photon-grid-core 2.0.4 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/cell-selection/cell-selection-engine.d.ts +14 -0
  2. package/cell-selection/cell-selection-engine.d.ts.map +1 -1
  3. package/cell-selection/cell-selection-engine.js +52 -0
  4. package/cell-selection/cell-selection-engine.js.map +1 -1
  5. package/core/grid-api.d.ts +24 -0
  6. package/core/grid-api.d.ts.map +1 -1
  7. package/core/grid-api.js +30 -0
  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 +13 -4
  11. package/core/grid-core.js.map +1 -1
  12. package/engines/master-detail/master-detail-engine.d.ts +4 -3
  13. package/engines/master-detail/master-detail-engine.d.ts.map +1 -1
  14. package/engines/master-detail/master-detail-engine.js +14 -5
  15. package/engines/master-detail/master-detail-engine.js.map +1 -1
  16. package/engines/selection/row-selection-engine.d.ts +41 -0
  17. package/engines/selection/row-selection-engine.d.ts.map +1 -1
  18. package/engines/selection/row-selection-engine.js +103 -0
  19. package/engines/selection/row-selection-engine.js.map +1 -1
  20. package/index.d.ts +2 -1
  21. package/index.d.ts.map +1 -1
  22. package/index.js +1 -0
  23. package/index.js.map +1 -1
  24. package/package.json +1 -1
  25. package/photon-grid.min.js +255 -487
  26. package/renderer/detail-row-renderer.d.ts.map +1 -1
  27. package/renderer/detail-row-renderer.js +1 -1
  28. package/renderer/detail-row-renderer.js.map +1 -1
  29. package/renderer/grid-renderer.d.ts +13 -1
  30. package/renderer/grid-renderer.d.ts.map +1 -1
  31. package/renderer/grid-renderer.js +21 -1
  32. package/renderer/grid-renderer.js.map +1 -1
  33. package/renderer/header-renderer.d.ts +5 -0
  34. package/renderer/header-renderer.d.ts.map +1 -1
  35. package/renderer/header-renderer.js +14 -3
  36. package/renderer/header-renderer.js.map +1 -1
  37. package/renderer/row-animator.d.ts +18 -1
  38. package/renderer/row-animator.d.ts.map +1 -1
  39. package/renderer/row-animator.js +93 -17
  40. package/renderer/row-animator.js.map +1 -1
  41. package/renderer/scroll-controller.d.ts.map +1 -1
  42. package/renderer/scroll-controller.js +31 -13
  43. package/renderer/scroll-controller.js.map +1 -1
  44. package/styles/base/cells.css.d.ts +1 -1
  45. package/styles/base/cells.css.d.ts.map +1 -1
  46. package/styles/base/cells.css.js +13 -13
  47. package/styles/base/column-context-menu.css.d.ts +1 -1
  48. package/styles/base/column-context-menu.css.d.ts.map +1 -1
  49. package/styles/base/column-context-menu.css.js +19 -5
  50. package/styles/base/column-context-menu.css.js.map +1 -1
  51. package/styles/base/column-group-header.css.d.ts +1 -1
  52. package/styles/base/column-group-header.css.d.ts.map +1 -1
  53. package/styles/base/column-group-header.css.js +1 -1
  54. package/styles/base/context-menu.css.d.ts +1 -1
  55. package/styles/base/context-menu.css.d.ts.map +1 -1
  56. package/styles/base/context-menu.css.js +8 -0
  57. package/styles/base/context-menu.css.js.map +1 -1
  58. package/styles/base/filter.css.d.ts +1 -1
  59. package/styles/base/filter.css.d.ts.map +1 -1
  60. package/styles/base/filter.css.js +6 -6
  61. package/styles/base/group-drop-zone.css.d.ts +1 -1
  62. package/styles/base/group-drop-zone.css.d.ts.map +1 -1
  63. package/styles/base/group-drop-zone.css.js +3 -3
  64. package/styles/base/header.css.d.ts +1 -1
  65. package/styles/base/header.css.d.ts.map +1 -1
  66. package/styles/base/header.css.js +4 -0
  67. package/styles/base/header.css.js.map +1 -1
  68. package/styles/base/row-drag.css.d.ts +1 -1
  69. package/styles/base/row-drag.css.d.ts.map +1 -1
  70. package/styles/base/row-drag.css.js +1 -1
  71. package/styles/base/rows.css.d.ts +1 -1
  72. package/styles/base/rows.css.d.ts.map +1 -1
  73. package/styles/base/rows.css.js +4 -16
  74. package/styles/base/rows.css.js.map +1 -1
  75. package/styles/base/scrollbars.css.d.ts +1 -1
  76. package/styles/base/scrollbars.css.d.ts.map +1 -1
  77. package/styles/base/scrollbars.css.js +6 -3
  78. package/styles/base/scrollbars.css.js.map +1 -1
  79. package/styles/base/sparkline.css.d.ts +1 -1
  80. package/styles/base/sparkline.css.d.ts.map +1 -1
  81. package/styles/base/sparkline.css.js +6 -0
  82. package/styles/base/sparkline.css.js.map +1 -1
  83. package/styles/base/tooltip.css.d.ts +1 -1
  84. package/styles/base/tooltip.css.d.ts.map +1 -1
  85. package/styles/base/tooltip.css.js +1 -1
  86. package/styles/base-styles.d.ts.map +1 -1
  87. package/styles/base-styles.js +5 -2
  88. package/styles/base-styles.js.map +1 -1
  89. package/styles/themes/theme-alpine.d.ts +9 -1
  90. package/styles/themes/theme-alpine.d.ts.map +1 -1
  91. package/styles/themes/theme-alpine.js +34 -43
  92. package/styles/themes/theme-alpine.js.map +1 -1
  93. package/styles/themes/theme-balham.d.ts +9 -1
  94. package/styles/themes/theme-balham.d.ts.map +1 -1
  95. package/styles/themes/theme-balham.js +33 -42
  96. package/styles/themes/theme-balham.js.map +1 -1
  97. package/styles/themes/theme-material.d.ts +9 -1
  98. package/styles/themes/theme-material.d.ts.map +1 -1
  99. package/styles/themes/theme-material.js +35 -43
  100. package/styles/themes/theme-material.js.map +1 -1
  101. package/styles/themes/theme-quartz.d.ts +14 -1
  102. package/styles/themes/theme-quartz.d.ts.map +1 -1
  103. package/styles/themes/theme-quartz.js +63 -43
  104. package/styles/themes/theme-quartz.js.map +1 -1
  105. package/theme/theme-manager.d.ts +55 -7
  106. package/theme/theme-manager.d.ts.map +1 -1
  107. package/theme/theme-manager.js +139 -35
  108. package/theme/theme-manager.js.map +1 -1
  109. package/types/column.types.d.ts +42 -0
  110. package/types/column.types.d.ts.map +1 -1
  111. package/types/column.types.js +26 -1
  112. package/types/column.types.js.map +1 -1
  113. package/types/grid.types.d.ts +90 -2
  114. package/types/grid.types.d.ts.map +1 -1
  115. package/types/theme.types.d.ts +19 -0
  116. package/types/theme.types.d.ts.map +1 -1
  117. package/types/theme.types.js +7 -1
  118. package/types/theme.types.js.map +1 -1
  119. package/styles/themes/theme-dark.d.ts +0 -2
  120. package/styles/themes/theme-dark.d.ts.map +0 -1
  121. package/styles/themes/theme-dark.js +0 -219
  122. package/styles/themes/theme-dark.js.map +0 -1
@@ -1,26 +1,21 @@
1
- "use strict";var PhotonGrid=(()=>{var To=Object.defineProperty;var ei=Object.getOwnPropertyDescriptor;var ti=Object.getOwnPropertyNames;var oi=Object.prototype.hasOwnProperty;var ri=(d,e)=>{for(var t in e)To(d,t,{get:e[t],enumerable:!0})},ni=(d,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ti(e))!oi.call(d,r)&&r!==t&&To(d,r,{get:()=>e[r],enumerable:!(o=ei(e,r))||o.enumerable});return d};var ii=d=>ni(To({},"__esModule",{value:!0}),d);var Ol={};ri(Ol,{AggregationEngine:()=>He,BodyRenderer:()=>et,CellEditorEngine:()=>Ge,CellRenderer:()=>Qe,CellSelectionEngine:()=>Ve,ChartDataTransformer:()=>ae,ChartEngine:()=>je,ChartRenderer:()=>oe,ClipboardEngine:()=>Fe,ColumnChooser:()=>Ze,ColumnGroupDragHandler:()=>Ye,ColumnGroupHeaderBuilder:()=>Ro,ColumnGroupModel:()=>Eo,ColumnGroupNodeType:()=>zo,ColumnGroupResizeStrategy:()=>Wo,ColumnGroupStateManager:()=>nt,ColumnModel:()=>ke,CommandBuilder:()=>Ce,CommandExecutor:()=>xe,CommandNormalizer:()=>he,CssVarInjector:()=>me,DragAutoscroll:()=>ze,DragDropEngine:()=>We,DragPreview:()=>Be,EntityResolver:()=>ye,EventBus:()=>Ie,ExportEngine:()=>Oe,FilterEngine:()=>Le,FooterRenderer:()=>tt,GridApi:()=>it,GridContextBuilder:()=>pe,GridCore:()=>dt,GridEventType:()=>x,GridRenderer:()=>rt,GridStore:()=>Te,GroupingEngine:()=>Ae,HeaderRenderer:()=>Ke,HttpAIProvider:()=>ge,IconRegistry:()=>Ue,IconRenderer:()=>qe,IntentParser:()=>be,OverlayRenderer:()=>ot,PaginationEngine:()=>De,PhotonAICommandRegistry:()=>we,PhotonAIErrorKind:()=>ue,PhotonAIProviderError:()=>P,PhotonAIProviderType:()=>er,PhotonAIService:()=>Ee,RendererSlot:()=>rr,RowModel:()=>Me,RowSelectionEngine:()=>Pe,SelectionRenderer:()=>So,SortEngine:()=>_e,SparklineRenderer:()=>Je,SummaryEngine:()=>Ne,ThemeManager:()=>$e,UndoRedoEngine:()=>st,VirtualScrollRenderer:()=>Io,buildSystemInstruction:()=>at,coreIcons:()=>mt,createAIProvider:()=>Tt,createGrid:()=>or,darkTheme:()=>Gt,dateComparator:()=>Lo,formatValue:()=>Q,getComparator:()=>Dt,injectBaseStyles:()=>kt,lightTheme:()=>gt,normalizeInput:()=>Rt,numberComparator:()=>_o,parseValue:()=>Mt,registerBuiltinCommands:()=>St,removeBaseStyles:()=>Gr,renderGrid:()=>Zn,stringComparator:()=>Mo,tokenize:()=>Et,validateValue:()=>_t});var nr=`
1
+ "use strict";var PhotonGrid=(()=>{var To=Object.defineProperty;var oi=Object.getOwnPropertyDescriptor;var ri=Object.getOwnPropertyNames;var ni=Object.prototype.hasOwnProperty;var ii=(d,e)=>{for(var t in e)To(d,t,{get:e[t],enumerable:!0})},si=(d,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ri(e))!ni.call(d,r)&&r!==t&&To(d,r,{get:()=>e[r],enumerable:!(o=oi(e,r))||o.enumerable});return d};var li=d=>si(To({},"__esModule",{value:!0}),d);var zl={};ii(zl,{AggregationEngine:()=>He,BodyRenderer:()=>tt,CellEditorEngine:()=>Ge,CellRenderer:()=>et,CellSelectionEngine:()=>Ve,ChartDataTransformer:()=>ae,ChartEngine:()=>Xe,ChartRenderer:()=>oe,ClipboardEngine:()=>Fe,ColumnChooser:()=>Je,ColumnGroupDragHandler:()=>Ke,ColumnGroupHeaderBuilder:()=>Ro,ColumnGroupModel:()=>Eo,ColumnGroupNodeType:()=>Wo,ColumnGroupResizeStrategy:()=>Vo,ColumnGroupStateManager:()=>it,ColumnModel:()=>Me,CommandBuilder:()=>Ce,CommandExecutor:()=>xe,CommandNormalizer:()=>he,CssVarInjector:()=>me,DragAutoscroll:()=>ze,DragDropEngine:()=>We,DragPreview:()=>Be,EntityResolver:()=>ye,EventBus:()=>Ie,ExportEngine:()=>Oe,FilterEngine:()=>Le,FooterRenderer:()=>ot,GridApi:()=>st,GridContextBuilder:()=>pe,GridCore:()=>ct,GridEventType:()=>x,GridRenderer:()=>nt,GridStore:()=>Te,GroupingEngine:()=>Ae,HeaderIconDisplay:()=>Uo,HeaderRenderer:()=>Ze,HttpAIProvider:()=>ge,IconRegistry:()=>qe,IconRenderer:()=>je,IntentParser:()=>be,OverlayRenderer:()=>rt,PaginationEngine:()=>De,PhotonAICommandRegistry:()=>we,PhotonAIErrorKind:()=>ue,PhotonAIProviderError:()=>P,PhotonAIProviderType:()=>or,PhotonAIService:()=>Ee,RendererSlot:()=>ir,RowModel:()=>ke,RowSelectionEngine:()=>Pe,SelectionRenderer:()=>So,SortEngine:()=>_e,SparklineRenderer:()=>Qe,SummaryEngine:()=>Ne,ThemeManager:()=>Ue,UndoRedoEngine:()=>lt,VirtualScrollRenderer:()=>Io,buildSystemInstruction:()=>dt,coreIcons:()=>mt,createAIProvider:()=>Tt,createGrid:()=>nr,darkTheme:()=>Gt,dateComparator:()=>Lo,formatValue:()=>Q,getComparator:()=>Dt,injectBaseStyles:()=>Mt,lightTheme:()=>$e,normalizeInput:()=>Rt,numberComparator:()=>_o,parseValue:()=>kt,registerBuiltinCommands:()=>St,removeBaseStyles:()=>Nr,renderGrid:()=>Qn,stringComparator:()=>ko,tokenize:()=>Et,validateValue:()=>_t});var sr=`
2
2
 
3
- /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 pg-quartz-theme variables \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
3
+ /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 pg-quartz-theme: structural + accent tokens \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
4
4
  .pg-quartz-theme .pg-grid {
5
- --pg-colors-border: #ddddde;
6
- --pg-colors-header-background: #f8fafc;
7
- --pg-colors-header-border: #ddddde;
8
- --pg-colors-header-text: #475569;
9
- --pg-colors-row-background: #ffffff;
10
- --pg-colors-row-alt-background: #f8fafc;
11
- --pg-colors-row-hover: #f1f5f9;
12
- --pg-colors-row-selected: #eff6ff;
13
- --pg-colors-row-selected-hover: #dbeafe;
14
- --pg-colors-text-primary: #0f172a;
15
- --pg-colors-text-secondary: #64748b;
16
- --pg-colors-text-muted: #94a3b8;
17
- --pg-colors-text-disabled: #cbd5e1;
5
+ /* Accent identity \u2014 drives sorted headers, selection, checkboxes, links. */
18
6
  --pg-colors-primary: #2563eb;
19
- --pg-colors-filter-background: #ffffff;
20
- --pg-colors-scrollbar-bg: #f8fafc;
21
- --pg-colors-badge-background: #dbeafe;
22
- --pg-colors-badge-text: #1e40af;
23
7
 
8
+ /* Quartz "chrome" surface \u2014 the flat tint shared by every non-data surface
9
+ (header, footer/pagination, top grouping row, scrollbars, serial-number
10
+ column). Derived from the mode's alt background so it tints correctly in
11
+ both light and dark; defined once here so the look changes in one place. */
12
+ --pg-quartz-chrome-background: var(--pg-colors-background-alt);
13
+ --pg-colors-header-background: var(--pg-quartz-chrome-background);
14
+ --pg-colors-footer-background: var(--pg-quartz-chrome-background);
15
+ --pg-colors-scrollbar-bg: var(--pg-quartz-chrome-background);
16
+ --pg-colors-scrollbar-track: var(--pg-quartz-chrome-background);
17
+
18
+ /* Typography identity */
24
19
  --pg-typography-font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
25
20
  --pg-typography-font-size-md: 0.8rem;
26
21
  --pg-typography-font-size-sm: 12px;
@@ -29,57 +24,60 @@
29
24
  --pg-typography-font-weight-semi-bold: 600;
30
25
  --pg-typography-letter-spacing-wide: 0.06em;
31
26
 
27
+ /* Density */
32
28
  --pg-header-row-height: 40px;
33
29
  --pg-row-height: 44px;
30
+
31
+ /* Shape */
34
32
  --pg-borders-radius-md: 6px;
35
33
  --pg-borders-radius-sm: 4px;
36
34
  --pg-borders-radius-pill: 9999px;
37
- --pg-transitions-duration-fast: 150ms;
38
35
  --pg-sizing-checkbox-size: 16px;
39
- --pg-colors-resize-handle-color: #ddddde;
36
+
37
+ /* Motion */
38
+ --pg-transitions-duration-fast: 150ms;
40
39
  }
41
40
 
42
- /* Quartz header \u2014 title case, semi-bold */
41
+ /* Quartz header \u2014 capitalized, semi-bold; color follows the mode. */
43
42
  .pg-quartz-theme .pg-th {
44
43
  text-transform: capitalize;
45
44
  font-size: 13px;
46
45
  font-weight: 600;
47
46
  letter-spacing: 0;
48
- color: #475569;
47
+ color: var(--pg-colors-header-text);
49
48
  }
50
- // .pg-quartz-theme .pg-th--sorted { color: #2563eb; }
51
49
 
52
- /* Quartz row \u2014 bottom divider uses the theme border color */
50
+ /* Quartz row \u2014 bottom divider uses the mode border color */
53
51
  .pg-quartz-theme .pg-row { border-bottom: 1px solid var(--pg-colors-border); }
54
52
 
55
- /* Quartz icon tones */
56
- .pg-quartz-theme .pg-icon { color: #64748b; }
57
- .pg-quartz-theme .pg-th--sorted .pg-icon { color: #2563eb; }
58
- .pg-quartz-theme .pg-row-drag-handle { color: #94a3b8; }
59
- .pg-quartz-theme .pg-th--no-group { background-color: #f8fafc; }
53
+ /* Quartz icon tones \u2014 mode-aware */
54
+ .pg-quartz-theme .pg-icon { color: var(--pg-colors-text-secondary); }
55
+ .pg-quartz-theme .pg-th--sorted .pg-icon { color: var(--pg-colors-primary); }
56
+ .pg-quartz-theme .pg-row-drag-handle { color: var(--pg-colors-text-disabled); }
57
+ .pg-quartz-theme .pg-th--no-group { background: var(--pg-quartz-chrome-background); }
60
58
 
61
- /* Quartz checkbox \u2014 16px, 4px-radius square, solid blue on check */
59
+ /* Quartz checkbox \u2014 16px, 4px-radius square, solid accent on check */
62
60
  .pg-quartz-theme .pg-checkbox {
63
61
  appearance: none;
64
62
  -webkit-appearance: none;
65
63
  width: 16px;
66
64
  height: 16px;
67
- border: 2px solid #cbd5e1;
65
+ border: 2px solid var(--pg-colors-checkbox-border);
68
66
  border-radius: 4px;
69
- background: #fff;
67
+ background: var(--pg-colors-checkbox-background);
70
68
  cursor: pointer;
71
69
  position: relative;
72
70
  flex-shrink: 0;
73
71
  transition: background 150ms ease, border-color 150ms ease, box-shadow 150ms ease;
74
72
  }
75
- .pg-quartz-theme .pg-checkbox:hover { border-color: #2563eb; }
73
+ .pg-quartz-theme .pg-checkbox:hover { border-color: var(--pg-colors-primary); }
76
74
  .pg-quartz-theme .pg-checkbox:focus-visible {
77
75
  outline: none;
78
- box-shadow: 0 0 0 3px rgba(37,99,235,0.25);
76
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--pg-colors-primary) 25%, transparent);
79
77
  }
80
78
  .pg-quartz-theme .pg-checkbox:checked {
81
- background: #2563eb;
82
- border-color: #2563eb;
79
+ background: var(--pg-colors-primary);
80
+ border-color: var(--pg-colors-primary);
83
81
  }
84
82
  .pg-quartz-theme .pg-checkbox:checked::after {
85
83
  content: '';
@@ -88,14 +86,14 @@
88
86
  top: 1px;
89
87
  width: 5px;
90
88
  height: 9px;
91
- border: 2px solid #fff;
89
+ border: 2px solid var(--pg-colors-primary-text);
92
90
  border-top: none;
93
91
  border-left: none;
94
92
  transform: rotate(45deg);
95
93
  }
96
94
  .pg-quartz-theme .pg-checkbox:indeterminate {
97
- background: #2563eb;
98
- border-color: #2563eb;
95
+ background: var(--pg-colors-primary);
96
+ border-color: var(--pg-colors-primary);
99
97
  }
100
98
  .pg-quartz-theme .pg-checkbox:indeterminate::after {
101
99
  content: '';
@@ -104,40 +102,32 @@
104
102
  top: 50%;
105
103
  width: 8px;
106
104
  height: 2px;
107
- background: #fff;
105
+ background: var(--pg-colors-primary-text);
108
106
  transform: translateY(-50%);
109
107
  }
110
108
 
111
- /* Quartz row selection highlight \u2014 blue left bar */
112
- .pg-quartz-theme .pg-row--selected { box-shadow: inset 3px 0 0 #2563eb; }
109
+ /* Quartz row selection highlight \u2014 accent left bar */
110
+ .pg-quartz-theme .pg-row--selected { box-shadow: inset 3px 0 0 var(--pg-colors-primary); }
113
111
 
114
112
  /* Quartz row-drag animation \u2014 smooth cubic-bezier */
115
113
  .pg-quartz-theme .pg-grid--row-dragging .pg-row {
116
114
  transition: background 150ms ease, top 130ms cubic-bezier(0.2, 0, 0, 1);
117
115
  }
118
- `;var ir=`
119
116
 
120
- /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 pg-alpine-theme variables \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
117
+ /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Quartz chrome tint \u2014 serial (row number) column \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
118
+ Header, filter and body cells of the serial column share the chrome surface
119
+ so the number gutter reads as grid chrome rather than data. (Scrollbars and
120
+ the header/footer/grouping surfaces are driven by the tokens above.) */
121
+ .pg-quartz-theme .pg-th--serial,
122
+ .pg-quartz-theme .pg-filter-cell--serial,
123
+ .pg-quartz-theme .pg-cell--serial {
124
+ background: var(--pg-quartz-chrome-background);
125
+ }
126
+ `;var lr=`
127
+
128
+ /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 pg-alpine-theme: structural + accent tokens \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
121
129
  .pg-alpine-theme .pg-grid {
122
- --pg-colors-border: #e5e7eb;
123
- --pg-colors-header-background: #ffffff;
124
- --pg-colors-header-border: #e5e7eb;
125
- --pg-colors-header-text: #374151;
126
- --pg-colors-row-background: #ffffff;
127
- --pg-colors-row-alt-background: #fafafa;
128
- --pg-colors-row-hover: #f0fdf4;
129
- --pg-colors-row-selected: #dcfce7;
130
- --pg-colors-row-selected-hover: #bbf7d0;
131
- --pg-colors-text-primary: #111827;
132
- --pg-colors-text-secondary: #6b7280;
133
- --pg-colors-text-muted: #9ca3af;
134
- --pg-colors-text-disabled: #d1d5db;
135
130
  --pg-colors-primary: #16a34a;
136
- --pg-colors-filter-background: #ffffff;
137
- --pg-colors-scrollbar-bg: #f9fafb;
138
- --pg-colors-badge-background: #dcfce7;
139
- --pg-colors-badge-text: #166534;
140
- --pg-colors-resize-handle-color: #d1d5db;
141
131
 
142
132
  --pg-typography-font-family: -apple-system, BlinkMacSystemFont, 'Inter', 'Segoe UI', sans-serif;
143
133
  --pg-typography-font-size-md: 0.8rem;
@@ -149,54 +139,56 @@
149
139
 
150
140
  --pg-header-row-height: 42px;
151
141
  --pg-row-height: 40px;
142
+
152
143
  --pg-borders-radius-md: 4px;
153
144
  --pg-borders-radius-sm: 2px;
154
145
  --pg-borders-radius-pill: 9999px;
155
- --pg-transitions-duration-fast: 100ms;
156
146
  --pg-sizing-checkbox-size: 15px;
147
+
148
+ --pg-transitions-duration-fast: 100ms;
157
149
  }
158
150
 
159
- /* Alpine header \u2014 no uppercase, clean weight */
151
+ /* Alpine header \u2014 no uppercase, clean weight; color follows the mode. */
160
152
  .pg-alpine-theme .pg-th {
161
153
  text-transform: none;
162
154
  font-size: 13px;
163
155
  font-weight: 600;
164
156
  letter-spacing: 0em;
165
- color: #374151;
157
+ color: var(--pg-colors-header-text);
166
158
  }
167
- .pg-alpine-theme .pg-th--sorted { color: #16a34a; }
168
- .pg-alpine-theme .pg-grid__header { border-bottom: 2px solid #e5e7eb; }
159
+ .pg-alpine-theme .pg-th--sorted { color: var(--pg-colors-primary); }
160
+ .pg-alpine-theme .pg-grid__header { border-bottom: 2px solid var(--pg-colors-header-border); }
169
161
 
170
162
  /* Alpine rows \u2014 thin full-width divider */
171
- .pg-alpine-theme .pg-row { border-bottom: 1px solid #f3f4f6; }
163
+ .pg-alpine-theme .pg-row { border-bottom: 1px solid var(--pg-colors-border); }
172
164
 
173
- /* Alpine icon tones */
174
- .pg-alpine-theme .pg-icon { color: #6b7280; }
175
- .pg-alpine-theme .pg-th--sorted .pg-icon { color: #16a34a; }
176
- .pg-alpine-theme .pg-row-drag-handle { color: #9ca3af; }
165
+ /* Alpine icon tones \u2014 mode-aware */
166
+ .pg-alpine-theme .pg-icon { color: var(--pg-colors-text-secondary); }
167
+ .pg-alpine-theme .pg-th--sorted .pg-icon { color: var(--pg-colors-primary); }
168
+ .pg-alpine-theme .pg-row-drag-handle { color: var(--pg-colors-text-disabled); }
177
169
 
178
- /* Alpine checkbox \u2014 15px, 2px-radius, slim green outline \u2192 fill */
170
+ /* Alpine checkbox \u2014 15px, 2px-radius, slim accent outline \u2192 fill */
179
171
  .pg-alpine-theme .pg-checkbox {
180
172
  appearance: none;
181
173
  -webkit-appearance: none;
182
174
  width: 15px;
183
175
  height: 15px;
184
- border: 1.5px solid #d1d5db;
176
+ border: 1.5px solid var(--pg-colors-checkbox-border);
185
177
  border-radius: 2px;
186
- background: #fff;
178
+ background: var(--pg-colors-checkbox-background);
187
179
  cursor: pointer;
188
180
  position: relative;
189
181
  flex-shrink: 0;
190
182
  transition: background 100ms linear, border-color 100ms linear;
191
183
  }
192
- .pg-alpine-theme .pg-checkbox:hover { border-color: #16a34a; }
184
+ .pg-alpine-theme .pg-checkbox:hover { border-color: var(--pg-colors-primary); }
193
185
  .pg-alpine-theme .pg-checkbox:focus-visible {
194
186
  outline: none;
195
- box-shadow: 0 0 0 2px rgba(22,163,74,0.3);
187
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--pg-colors-primary) 30%, transparent);
196
188
  }
197
189
  .pg-alpine-theme .pg-checkbox:checked {
198
- background: #16a34a;
199
- border-color: #16a34a;
190
+ background: var(--pg-colors-primary);
191
+ border-color: var(--pg-colors-primary);
200
192
  }
201
193
  .pg-alpine-theme .pg-checkbox:checked::after {
202
194
  content: '';
@@ -205,14 +197,14 @@
205
197
  top: 1px;
206
198
  width: 5px;
207
199
  height: 8px;
208
- border: 1.5px solid #fff;
200
+ border: 1.5px solid var(--pg-colors-primary-text);
209
201
  border-top: none;
210
202
  border-left: none;
211
203
  transform: rotate(45deg);
212
204
  }
213
205
  .pg-alpine-theme .pg-checkbox:indeterminate {
214
- background: #16a34a;
215
- border-color: #16a34a;
206
+ background: var(--pg-colors-primary);
207
+ border-color: var(--pg-colors-primary);
216
208
  }
217
209
  .pg-alpine-theme .pg-checkbox:indeterminate::after {
218
210
  content: '';
@@ -221,40 +213,22 @@
221
213
  top: 50%;
222
214
  width: 7px;
223
215
  height: 1.5px;
224
- background: #fff;
216
+ background: var(--pg-colors-primary-text);
225
217
  transform: translateY(-50%);
226
218
  }
227
219
 
228
- /* Alpine selection \u2014 clean green underline */
229
- .pg-alpine-theme .pg-row--selected { box-shadow: inset 2px 0 0 #16a34a; }
220
+ /* Alpine selection \u2014 clean accent left bar */
221
+ .pg-alpine-theme .pg-row--selected { box-shadow: inset 2px 0 0 var(--pg-colors-primary); }
230
222
 
231
223
  /* Alpine row-drag animation \u2014 snappy, fast linear */
232
224
  .pg-alpine-theme .pg-grid--row-dragging .pg-row {
233
225
  transition: background 100ms linear, top 100ms ease-out;
234
226
  }
235
- `;var sr=`
227
+ `;var ar=`
236
228
 
237
- /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 pg-balham-theme variables \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
229
+ /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 pg-balham-theme: structural + accent tokens \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
238
230
  .pg-balham-theme .pg-grid {
239
- --pg-colors-border: #d1d5db;
240
- --pg-colors-header-background: #f3f4f6;
241
- --pg-colors-header-border: #d1d5db;
242
- --pg-colors-header-text: #374151;
243
- --pg-colors-row-background: #ffffff;
244
- --pg-colors-row-alt-background: #f9fafb;
245
- --pg-colors-row-hover: #fef3c7;
246
- --pg-colors-row-selected: #fffbeb;
247
- --pg-colors-row-selected-hover: #fef08a;
248
- --pg-colors-text-primary: #111827;
249
- --pg-colors-text-secondary: #6b7280;
250
- --pg-colors-text-muted: #9ca3af;
251
- --pg-colors-text-disabled: #d1d5db;
252
231
  --pg-colors-primary: #d97706;
253
- --pg-colors-filter-background: #ffffff;
254
- --pg-colors-scrollbar-bg: #f3f4f6;
255
- --pg-colors-badge-background: #fef3c7;
256
- --pg-colors-badge-text: #92400e;
257
- --pg-colors-resize-handle-color: #d1d5db;
258
232
 
259
233
  --pg-typography-font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;
260
234
  --pg-typography-font-size-sm: 11px;
@@ -265,54 +239,56 @@
265
239
 
266
240
  --pg-header-row-height: 36px;
267
241
  --pg-row-height: 32px;
242
+
268
243
  --pg-borders-radius-md: 2px;
269
244
  --pg-borders-radius-sm: 0px;
270
245
  --pg-borders-radius-pill: 2px;
271
- --pg-transitions-duration-fast: 80ms;
272
246
  --pg-sizing-checkbox-size: 14px;
247
+
248
+ --pg-transitions-duration-fast: 80ms;
273
249
  }
274
250
 
275
- /* Balham header \u2014 dense, uppercase, pronounced border */
251
+ /* Balham header \u2014 dense, uppercase, pronounced border; color follows the mode. */
276
252
  .pg-balham-theme .pg-th {
277
253
  text-transform: uppercase;
278
254
  font-size: 10px;
279
255
  font-weight: 700;
280
256
  letter-spacing: 0.06em;
281
- color: #374151;
257
+ color: var(--pg-colors-header-text);
282
258
  }
283
- .pg-balham-theme .pg-th--sorted { color: #d97706; }
284
- .pg-balham-theme .pg-grid__header { border-bottom: 2px solid #d1d5db; }
259
+ .pg-balham-theme .pg-th--sorted { color: var(--pg-colors-primary); }
260
+ .pg-balham-theme .pg-grid__header { border-bottom: 2px solid var(--pg-colors-header-border); }
285
261
 
286
262
  /* Balham rows \u2014 full row border, classic spreadsheet look */
287
- .pg-balham-theme .pg-row { border-bottom: 1px solid #e5e7eb; }
263
+ .pg-balham-theme .pg-row { border-bottom: 1px solid var(--pg-colors-border); }
288
264
 
289
- /* Balham icon tones \u2014 warmer grays */
290
- .pg-balham-theme .pg-icon { color: #6b7280; }
291
- .pg-balham-theme .pg-th--sorted .pg-icon { color: #d97706; }
292
- .pg-balham-theme .pg-row-drag-handle { color: #9ca3af; }
265
+ /* Balham icon tones \u2014 mode-aware */
266
+ .pg-balham-theme .pg-icon { color: var(--pg-colors-text-secondary); }
267
+ .pg-balham-theme .pg-th--sorted .pg-icon { color: var(--pg-colors-primary); }
268
+ .pg-balham-theme .pg-row-drag-handle { color: var(--pg-colors-text-disabled); }
293
269
 
294
- /* Balham checkbox \u2014 14px, square (0 radius), flat amber fill */
270
+ /* Balham checkbox \u2014 14px, square (0 radius), flat accent fill */
295
271
  .pg-balham-theme .pg-checkbox {
296
272
  appearance: none;
297
273
  -webkit-appearance: none;
298
274
  width: 14px;
299
275
  height: 14px;
300
- border: 1px solid #9ca3af;
276
+ border: 1px solid var(--pg-colors-checkbox-border);
301
277
  border-radius: 0px;
302
- background: #fff;
278
+ background: var(--pg-colors-checkbox-background);
303
279
  cursor: pointer;
304
280
  position: relative;
305
281
  flex-shrink: 0;
306
282
  transition: background 80ms linear, border-color 80ms linear;
307
283
  }
308
- .pg-balham-theme .pg-checkbox:hover { border-color: #d97706; }
284
+ .pg-balham-theme .pg-checkbox:hover { border-color: var(--pg-colors-primary); }
309
285
  .pg-balham-theme .pg-checkbox:focus-visible {
310
- outline: 1px solid #d97706;
286
+ outline: 1px solid var(--pg-colors-primary);
311
287
  outline-offset: 1px;
312
288
  }
313
289
  .pg-balham-theme .pg-checkbox:checked {
314
- background: #d97706;
315
- border-color: #d97706;
290
+ background: var(--pg-colors-primary);
291
+ border-color: var(--pg-colors-primary);
316
292
  }
317
293
  .pg-balham-theme .pg-checkbox:checked::after {
318
294
  content: '';
@@ -321,14 +297,14 @@
321
297
  top: 1px;
322
298
  width: 5px;
323
299
  height: 8px;
324
- border: 2px solid #fff;
300
+ border: 2px solid var(--pg-colors-primary-text);
325
301
  border-top: none;
326
302
  border-left: none;
327
303
  transform: rotate(45deg);
328
304
  }
329
305
  .pg-balham-theme .pg-checkbox:indeterminate {
330
- background: #d97706;
331
- border-color: #d97706;
306
+ background: var(--pg-colors-primary);
307
+ border-color: var(--pg-colors-primary);
332
308
  }
333
309
  .pg-balham-theme .pg-checkbox:indeterminate::after {
334
310
  content: '';
@@ -337,44 +313,27 @@
337
313
  top: 50%;
338
314
  width: 8px;
339
315
  height: 2px;
340
- background: #fff;
316
+ background: var(--pg-colors-primary-text);
341
317
  transform: translateY(-50%);
342
318
  }
343
319
 
344
320
  /* Balham selection \u2014 amber left accent bar */
345
- .pg-balham-theme .pg-row--selected { box-shadow: inset 3px 0 0 #d97706; }
321
+ .pg-balham-theme .pg-row--selected { box-shadow: inset 3px 0 0 var(--pg-colors-primary); }
346
322
 
347
323
  /* Balham row-drag \u2014 very fast, minimal */
348
324
  .pg-balham-theme .pg-grid--row-dragging .pg-row {
349
325
  transition: background 80ms linear, top 80ms linear;
350
326
  }
351
- `;var lr=`
327
+ `;var dr=`
352
328
 
353
- /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 pg-material-theme variables \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
329
+ /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 pg-material-theme: structural + accent tokens \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
354
330
  .pg-material-theme .pg-grid {
331
+ /* Material uses elevation instead of a hard border. */
355
332
  border-radius: 4px;
356
333
  border-color: transparent;
357
334
  box-shadow: 0 2px 1px -1px rgba(0,0,0,.2), 0 1px 1px 0 rgba(0,0,0,.14), 0 1px 3px 0 rgba(0,0,0,.12);
358
335
 
359
- --pg-colors-border: rgba(0,0,0,.12);
360
- --pg-colors-header-background: #ffffff;
361
- --pg-colors-header-border: transparent;
362
- --pg-colors-header-text: rgba(0,0,0,.54);
363
- --pg-colors-row-background: #ffffff;
364
- --pg-colors-row-alt-background: #fafafa;
365
- --pg-colors-row-hover: rgba(0,0,0,.04);
366
- --pg-colors-row-selected: rgba(25,118,210,.10);
367
- --pg-colors-row-selected-hover: rgba(25,118,210,.16);
368
- --pg-colors-text-primary: rgba(0,0,0,.87);
369
- --pg-colors-text-secondary: rgba(0,0,0,.54);
370
- --pg-colors-text-muted: rgba(0,0,0,.38);
371
- --pg-colors-text-disabled: rgba(0,0,0,.26);
372
336
  --pg-colors-primary: #1976d2;
373
- --pg-colors-filter-background: #ffffff;
374
- --pg-colors-scrollbar-bg: #fafafa;
375
- --pg-colors-badge-background: #e3f2fd;
376
- --pg-colors-badge-text: #0d47a1;
377
- --pg-colors-resize-handle-color: rgba(0,0,0,.20);
378
337
 
379
338
  --pg-typography-font-family: Roboto, 'Helvetica Neue', Arial, sans-serif;
380
339
  --pg-typography-font-size-sm: 12px;
@@ -385,43 +344,45 @@
385
344
 
386
345
  --pg-header-row-height: 56px;
387
346
  --pg-row-height: 52px;
347
+
388
348
  --pg-borders-radius-md: 4px;
389
349
  --pg-borders-radius-sm: 2px;
390
350
  --pg-borders-radius-pill: 4px;
391
- --pg-transitions-duration-fast: 200ms;
392
351
  --pg-sizing-checkbox-size: 18px;
352
+
353
+ --pg-transitions-duration-fast: 200ms;
393
354
  }
394
355
 
395
- /* Material header \u2014 no uppercase, medium weight, subdued */
356
+ /* Material header \u2014 no uppercase, medium weight; color follows the mode. */
396
357
  .pg-material-theme .pg-th {
397
358
  text-transform: none;
398
359
  font-size: 12px;
399
360
  font-weight: 500;
400
361
  letter-spacing: 0.04em;
401
- color: rgba(0,0,0,.54);
362
+ color: var(--pg-colors-header-text);
402
363
  }
403
- .pg-material-theme .pg-th--sorted { color: #1976d2; }
404
- .pg-material-theme .pg-grid__header { border-bottom: 1px solid rgba(0,0,0,.12); }
364
+ .pg-material-theme .pg-th--sorted { color: var(--pg-colors-primary); }
365
+ .pg-material-theme .pg-grid__header { border-bottom: 1px solid var(--pg-colors-header-border); }
405
366
 
406
367
  /* Material rows \u2014 thin divider lines */
407
- .pg-material-theme .pg-row { border-bottom: 1px solid rgba(0,0,0,.06); }
408
- .pg-material-theme .pg-cell--v-border { border-right-color: rgba(0,0,0,.06); }
368
+ .pg-material-theme .pg-row { border-bottom: 1px solid var(--pg-colors-border); }
369
+ .pg-material-theme .pg-cell--v-border { border-right-color: var(--pg-colors-border); }
409
370
 
410
371
  /* Material filter row */
411
- .pg-material-theme .pg-filter-row { border-top-color: rgba(0,0,0,.08); }
372
+ .pg-material-theme .pg-filter-row { border-top-color: var(--pg-colors-border); }
412
373
 
413
- /* Material icon tones */
414
- .pg-material-theme .pg-icon { color: rgba(0,0,0,.54); }
415
- .pg-material-theme .pg-th--sorted .pg-icon { color: #1976d2; }
416
- .pg-material-theme .pg-row-drag-handle { color: rgba(0,0,0,.38); }
374
+ /* Material icon tones \u2014 mode-aware */
375
+ .pg-material-theme .pg-icon { color: var(--pg-colors-text-secondary); }
376
+ .pg-material-theme .pg-th--sorted .pg-icon { color: var(--pg-colors-primary); }
377
+ .pg-material-theme .pg-row-drag-handle { color: var(--pg-colors-text-disabled); }
417
378
 
418
- /* Material checkbox \u2014 18px, 2px radius, blue, Material motion */
379
+ /* Material checkbox \u2014 18px, 2px radius, accent, Material motion + ripple */
419
380
  .pg-material-theme .pg-checkbox {
420
381
  appearance: none;
421
382
  -webkit-appearance: none;
422
383
  width: 18px;
423
384
  height: 18px;
424
- border: 2px solid rgba(0,0,0,.38);
385
+ border: 2px solid var(--pg-colors-checkbox-border);
425
386
  border-radius: 2px;
426
387
  background: transparent;
427
388
  cursor: pointer;
@@ -432,16 +393,16 @@
432
393
  box-shadow 200ms cubic-bezier(0.4,0,0.2,1);
433
394
  }
434
395
  .pg-material-theme .pg-checkbox:hover {
435
- border-color: #1976d2;
436
- box-shadow: 0 0 0 8px rgba(25,118,210,.1);
396
+ border-color: var(--pg-colors-primary);
397
+ box-shadow: 0 0 0 8px color-mix(in srgb, var(--pg-colors-primary) 10%, transparent);
437
398
  }
438
399
  .pg-material-theme .pg-checkbox:focus-visible {
439
400
  outline: none;
440
- box-shadow: 0 0 0 8px rgba(25,118,210,.2);
401
+ box-shadow: 0 0 0 8px color-mix(in srgb, var(--pg-colors-primary) 20%, transparent);
441
402
  }
442
403
  .pg-material-theme .pg-checkbox:checked {
443
- background: #1976d2;
444
- border-color: #1976d2;
404
+ background: var(--pg-colors-primary);
405
+ border-color: var(--pg-colors-primary);
445
406
  }
446
407
  .pg-material-theme .pg-checkbox:checked::after {
447
408
  content: '';
@@ -450,14 +411,14 @@
450
411
  top: 1px;
451
412
  width: 7px;
452
413
  height: 11px;
453
- border: 2px solid #fff;
414
+ border: 2px solid var(--pg-colors-primary-text);
454
415
  border-top: none;
455
416
  border-left: none;
456
417
  transform: rotate(45deg);
457
418
  }
458
419
  .pg-material-theme .pg-checkbox:indeterminate {
459
- background: #1976d2;
460
- border-color: #1976d2;
420
+ background: var(--pg-colors-primary);
421
+ border-color: var(--pg-colors-primary);
461
422
  }
462
423
  .pg-material-theme .pg-checkbox:indeterminate::after {
463
424
  content: '';
@@ -466,7 +427,7 @@
466
427
  top: 50%;
467
428
  width: 10px;
468
429
  height: 2px;
469
- background: #fff;
430
+ background: var(--pg-colors-primary-text);
470
431
  transform: translateY(-50%);
471
432
  }
472
433
 
@@ -478,223 +439,7 @@
478
439
  transition: background 200ms cubic-bezier(0.4,0,0.2,1),
479
440
  top 200ms cubic-bezier(0.4,0,0.2,1);
480
441
  }
481
- `;var ar=`
482
-
483
- /* \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 */
484
- .pg-dark-theme .pg-grid {
485
- --pg-colors-border: #334155;
486
- --pg-colors-header-background: #0f172a;
487
- --pg-colors-header-border: #334155;
488
- --pg-colors-header-text: #94a3b8;
489
- --pg-colors-row-background: #1e293b;
490
- --pg-colors-row-alt-background: #1a2436;
491
- --pg-colors-row-hover: #334155;
492
- --pg-colors-row-selected: rgba(96,165,250,.15);
493
- --pg-colors-row-selected-hover: rgba(96,165,250,.25);
494
- --pg-colors-text-primary: #e2e8f0;
495
- --pg-colors-text-secondary: #94a3b8;
496
- --pg-colors-text-muted: #64748b;
497
- --pg-colors-text-disabled: #475569;
498
- --pg-colors-primary: #60a5fa;
499
- --pg-colors-filter-background: #1e293b;
500
- --pg-colors-scrollbar-bg: #0f172a;
501
- --pg-colors-scrollbar-track: #0f172a;
502
- --pg-colors-scrollbar-thumb: #475569;
503
- --pg-colors-scrollbar-thumb-hover: #64748b;
504
- --pg-colors-badge-background: rgba(96,165,250,.2);
505
- --pg-colors-badge-text: #93c5fd;
506
- --pg-colors-group-row-text: #cbd5e1;
507
- --pg-colors-group-row-background: #1a2840;
508
- --pg-colors-group-row-hover: rgba(96,165,250,.08);
509
- --pg-colors-group-toggle-hover: rgba(96,165,250,.15);
510
- --pg-colors-chip-background: rgba(96,165,250,.15);
511
- --pg-colors-chip-text: #93c5fd;
512
- --pg-colors-group-zone-over: rgba(96,165,250,.12);
513
- --pg-colors-cell-edit-background: #0f172a;
514
- --pg-colors-footer-background: #0f172a;
515
- --pg-colors-footer-border: #334155;
516
- --pg-colors-surface: #1e293b;
517
- --pg-colors-background-alt: #334155;
518
- --pg-colors-border-strong: #475569;
519
- --pg-colors-border-focus: #60a5fa;
520
- --pg-colors-resize-handle-color: #475569;
521
-
522
- --pg-typography-font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
523
- --pg-typography-font-size-md: 0.9rem;
524
- --pg-typography-font-size-sm: 12px;
525
- --pg-typography-font-size-xs: 11px;
526
- --pg-typography-font-weight-medium: 400;
527
- --pg-typography-font-weight-semi-bold: 600;
528
- --pg-typography-letter-spacing-wide: 0.06em;
529
-
530
- --pg-header-row-height: 48px;
531
- --pg-row-height: 44px;
532
- --pg-borders-radius-md: 6px;
533
- --pg-borders-radius-sm: 4px;
534
- --pg-borders-radius-pill: 9999px;
535
- --pg-transitions-duration-fast: 200ms;
536
- --pg-sizing-checkbox-size: 16px;
537
- }
538
-
539
- /* Dark: override the grid border itself */
540
- .pg-dark-theme .pg-grid {
541
- border-color: #334155;
542
- background: #1e293b;
543
- }
544
-
545
- /* Dark header */
546
- .pg-dark-theme .pg-th {
547
- text-transform: uppercase;
548
- font-size: 11px;
549
- font-weight: 600;
550
- letter-spacing: 0.06em;
551
- color: #94a3b8;
552
- }
553
- .pg-dark-theme .pg-th--sorted { color: #60a5fa; }
554
- .pg-dark-theme .pg-grid__header { border-bottom: 1px solid #334155; }
555
-
556
- /* Dark rows \u2014 subtle divider on dark bg */
557
- .pg-dark-theme .pg-row { border-bottom: 1px solid #263347; }
558
-
559
- /* Dark cell vertical border */
560
- .pg-dark-theme .pg-cell--v-border { border-right-color: #2d3f56; }
561
-
562
- /* Dark filter row */
563
- .pg-dark-theme .pg-filter-row { border-top-color: #334155; }
564
- .pg-dark-theme input[type="text"], .pg-dark-theme select {
565
- background: #0f172a;
566
- color: #e2e8f0;
567
- border-color: #475569;
568
- }
569
- .pg-dark-theme input[type="text"]::placeholder { color: #64748b; }
570
-
571
- /* Dark filter panel */
572
- .pg-dark-theme .pg-filter-panel {
573
- background: #1e293b;
574
- border-color: #334155;
575
- box-shadow: 0 8px 24px rgba(0,0,0,.4);
576
- color: #e2e8f0;
577
- }
578
- .pg-dark-theme .pg-filter-cond__select,
579
- .pg-dark-theme .pg-filter-cond__input,
580
- .pg-dark-theme .pg-filter-set__search-input {
581
- background: #0f172a;
582
- color: #e2e8f0;
583
- border-color: #475569;
584
- }
585
- .pg-dark-theme .pg-filter-logic__btn {
586
- background: #1e293b;
587
- border-color: #475569;
588
- color: #94a3b8;
589
- }
590
- .pg-dark-theme .pg-filter-logic__btn:hover { background: #263347; }
591
- .pg-dark-theme .pg-filter-logic__btn--active { background: #2563eb; color: #fff; border-color: #2563eb; }
592
- .pg-dark-theme .pg-filter-set__item:hover { background: #263347; }
593
- .pg-dark-theme .pg-filter-set__divider { background: #334155; }
594
- .pg-dark-theme .pg-filter-panel__footer { background: #1e293b; border-top-color: #334155; }
595
- .pg-dark-theme .pg-filter-panel__clear-btn {
596
- background: #1e293b;
597
- border-color: #475569;
598
- color: #94a3b8;
599
- }
600
- .pg-dark-theme .pg-filter-panel__clear-btn:hover { background: #263347; color: #e2e8f0; }
601
-
602
- /* Dark icon tones */
603
- .pg-dark-theme .pg-icon { color: #64748b; }
604
- .pg-dark-theme .pg-th--sorted .pg-icon { color: #60a5fa; }
605
- .pg-dark-theme .pg-row-drag-handle { color: #475569; }
606
-
607
- /* Dark checkbox \u2014 16px, 4px radius, glowing blue fill */
608
- .pg-dark-theme .pg-checkbox {
609
- appearance: none;
610
- -webkit-appearance: none;
611
- width: 16px;
612
- height: 16px;
613
- border: 2px solid #475569;
614
- border-radius: 4px;
615
- background: #0f172a;
616
- cursor: pointer;
617
- position: relative;
618
- flex-shrink: 0;
619
- transition: background 200ms ease, border-color 200ms ease, box-shadow 200ms ease;
620
- }
621
- .pg-dark-theme .pg-checkbox:hover { border-color: #60a5fa; }
622
- .pg-dark-theme .pg-checkbox:focus-visible {
623
- outline: none;
624
- box-shadow: 0 0 0 3px rgba(96,165,250,.35);
625
- }
626
- .pg-dark-theme .pg-checkbox:checked {
627
- background: #2563eb;
628
- border-color: #60a5fa;
629
- box-shadow: 0 0 6px rgba(96,165,250,.4);
630
- }
631
- .pg-dark-theme .pg-checkbox:checked::after {
632
- content: '';
633
- position: absolute;
634
- left: 4px;
635
- top: 1px;
636
- width: 5px;
637
- height: 9px;
638
- border: 2px solid #e2e8f0;
639
- border-top: none;
640
- border-left: none;
641
- transform: rotate(45deg);
642
- }
643
- .pg-dark-theme .pg-checkbox:indeterminate {
644
- background: #2563eb;
645
- border-color: #60a5fa;
646
- box-shadow: 0 0 6px rgba(96,165,250,.4);
647
- }
648
- .pg-dark-theme .pg-checkbox:indeterminate::after {
649
- content: '';
650
- position: absolute;
651
- left: 2px;
652
- top: 50%;
653
- width: 8px;
654
- height: 2px;
655
- background: #e2e8f0;
656
- transform: translateY(-50%);
657
- }
658
-
659
- /* Dark selection \u2014 glowing blue left bar */
660
- .pg-dark-theme .pg-row--selected { box-shadow: inset 3px 0 0 #60a5fa; }
661
-
662
- /* Dark scrollbar \u2014 dark track + styled thumb via scrollbar-color (Firefox/Chromium) */
663
- .pg-dark-theme .pg-scrollbar-h-spacer,
664
- .pg-dark-theme .pg-scrollbar-v-native,
665
- .pg-dark-theme .pg-scrollbar-h-native { background: #0f172a; }
666
- .pg-dark-theme .pg-scrollbar-v-native,
667
- .pg-dark-theme .pg-scrollbar-h-native,
668
- .pg-dark-theme .pg-scrollbar-h-spacer { scrollbar-color: #475569 #0f172a; }
669
-
670
- /* Dark overlay \u2014 override hardcoded white loading tint */
671
- .pg-dark-theme .pg-overlay { background: #1e293b; }
672
- .pg-dark-theme .pg-overlay--loading { background: rgba(15,23,42,0.85); }
673
-
674
- /* Dark group drop zone areas */
675
- .pg-dark-theme .pg-group-drop-zone--top,
676
- .pg-dark-theme .pg-group-drop-zone--left,
677
- .pg-dark-theme .pg-group-drop-zone--right {
678
- background: #0f172a;
679
- border-color: #334155;
680
- }
681
- /* Group zone grip hover \u2014 override hardcoded rgba(0,0,0,.06) */
682
- .pg-dark-theme .pg-group-zone-grip:hover { background: rgba(255,255,255,.08); }
683
- /* Group chip close hover \u2014 override hardcoded indigo tint */
684
- .pg-dark-theme .pg-group-chip__close:hover { background: rgba(96,165,250,.2); }
685
-
686
- /* Dark column menu */
687
- .pg-dark-theme .pg-column-menu {
688
- background: #1e293b;
689
- border-color: #334155;
690
- color: #e2e8f0;
691
- }
692
-
693
- /* Dark row-drag animation \u2014 smooth ease */
694
- .pg-dark-theme .pg-grid--row-dragging .pg-row {
695
- transition: background 200ms ease, top 160ms cubic-bezier(0.2, 0, 0, 1);
696
- }
697
- `;var dr=`
442
+ `;var cr=`
698
443
  /* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Root \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
699
444
  .pg-grid {
700
445
  display: flex;
@@ -741,7 +486,7 @@
741
486
  position: relative;
742
487
  }
743
488
 
744
- `;var cr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Group drop zone \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
489
+ `;var pr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Group drop zone \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
745
490
  .pg-group-drop-zone--top {
746
491
  display: flex;
747
492
  flex-direction: row;
@@ -825,7 +570,7 @@
825
570
  overflow-x: hidden;
826
571
  }
827
572
  .pg-group-zone-chips--over {
828
- background: var(--pg-colors-group-zone-over, #eff6ff);
573
+ background: var(--pg-colors-group-zone-over, var(--pg-colors-selection-background, #eff6ff));
829
574
  outline: 1px dashed var(--pg-colors-primary, #2563eb);
830
575
  outline-offset: -2px;
831
576
  }
@@ -873,8 +618,8 @@
873
618
  gap: 5px;
874
619
  padding: 3px 6px 3px 10px;
875
620
  border-radius: var(--pg-borders-radius-pill, 9999px);
876
- background: var(--pg-colors-chip-background, #e0e7ff);
877
- color: var(--pg-colors-chip-text, #1e40af);
621
+ background: var(--pg-colors-chip-background, var(--pg-colors-badge-background, #e0e7ff));
622
+ color: var(--pg-colors-chip-text, var(--pg-colors-badge-text, #1e40af));
878
623
  font-size: var(--pg-typography-font-size-sm, 12px);
879
624
  font-weight: var(--pg-typography-font-weight-medium, 500);
880
625
  user-select: none;
@@ -905,7 +650,7 @@
905
650
  flex-shrink: 0;
906
651
  }
907
652
 
908
- `;var pr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Group bar quick-filter search \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
653
+ `;var hr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Group bar quick-filter search \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
909
654
  .pg-group-search {
910
655
  display: flex;
911
656
  align-items: center;
@@ -982,7 +727,7 @@
982
727
  background: var(--pg-colors-background-alt, #f1f5f9);
983
728
  }
984
729
 
985
- `;var hr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Three-panel header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
730
+ `;var ur=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Three-panel header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
986
731
  .pg-grid__header {
987
732
  display: flex;
988
733
  flex-direction: row;
@@ -1135,7 +880,7 @@
1135
880
  pointer-events: auto;
1136
881
  }
1137
882
 
1138
- `;var ur=`/* \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 */
883
+ `;var gr=`/* \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 */
1139
884
  .pg-header-row, .pg-filter-row {
1140
885
  display: flex;
1141
886
  align-items: stretch;
@@ -1253,6 +998,8 @@
1253
998
  }
1254
999
  .pg-th:hover .pg-th__filter-btn,
1255
1000
  .pg-th__filter-btn--active { display: flex; }
1001
+ /* Always-visible mode \u2014 opt in via headerIcons.filter / ColumnDef.filterIconDisplay */
1002
+ .pg-th__filter-btn--always { display: flex; }
1256
1003
  .pg-th__filter-btn:hover { opacity: 1; background: var(--pg-colors-background-alt, #f1f5f9); }
1257
1004
  .pg-th__filter-btn--active {
1258
1005
  opacity: 1;
@@ -1272,6 +1019,8 @@
1272
1019
  }
1273
1020
  .pg-th:hover .pg-th__menu-btn,
1274
1021
  .pg-th__menu-btn--active { display: flex; }
1022
+ /* Always-visible mode \u2014 opt in via headerIcons.menu / ColumnDef.menuIconDisplay */
1023
+ .pg-th__menu-btn--always { display: flex; }
1275
1024
  .pg-th__menu-btn:hover { opacity: 1; background: var(--pg-colors-background-alt, #f1f5f9); }
1276
1025
  .pg-th__menu-btn--active { opacity: 1; background: var(--pg-colors-border, #e2e8f0); }
1277
1026
  .pg-th__resize-handle {
@@ -1357,7 +1106,7 @@
1357
1106
  box-shadow: 0 0 0 2px var(--pg-colors-primary-soft, rgba(37, 99, 235, 0.16));
1358
1107
  }
1359
1108
 
1360
- `;var gr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Column group header rows \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1109
+ `;var mr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Column group header rows \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1361
1110
  .pg-header-group-row {
1362
1111
  position: relative;
1363
1112
  flex-shrink: 0;
@@ -1537,7 +1286,7 @@
1537
1286
  align-items: center;
1538
1287
  gap: var(--pg-drag-ghost-gap, 8px);
1539
1288
  padding: 5px 12px 5px 10px;
1540
- background: var(--pg-colors-drag-ghost-background, #fff);
1289
+ background: var(--pg-colors-drag-ghost-background, var(--pg-colors-drag-preview-background, var(--pg-colors-surface, #fff)));
1541
1290
  border: 1.5px solid var(--pg-colors-primary, #2563eb);
1542
1291
  border-radius: var(--pg-borders-radius-md, 6px);
1543
1292
  box-shadow: 0 6px 24px rgba(0,0,0,0.13), 0 2px 8px rgba(37, 99, 235, 0.12);
@@ -1618,7 +1367,7 @@
1618
1367
  animation: pg-scroll-arrow-right 700ms ease-in-out infinite;
1619
1368
  }
1620
1369
 
1621
- `;var mr=`/* \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 */
1370
+ `;var fr=`/* \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 */
1622
1371
  .pg-drag-preview {
1623
1372
  position: fixed;
1624
1373
  pointer-events: none;
@@ -1717,7 +1466,7 @@
1717
1466
  box-shadow: var(--pg-shadows-lg, 0 8px 24px rgba(0,0,0,.12));
1718
1467
  overflow: hidden;
1719
1468
  font-size: var(--pg-typography-font-size-sm, 13px);
1720
- color: var(--pg-colors-text, #1e293b);
1469
+ color: var(--pg-colors-text-primary, #1e293b);
1721
1470
  user-select: none;
1722
1471
  }
1723
1472
 
@@ -1734,7 +1483,7 @@
1734
1483
  border: 1px solid var(--pg-colors-border, #e2e8f0);
1735
1484
  border-radius: var(--pg-borders-radius-sm, 4px);
1736
1485
  background: var(--pg-colors-surface, #fff);
1737
- color: var(--pg-colors-text, #1e293b);
1486
+ color: var(--pg-colors-text-primary, #1e293b);
1738
1487
  font-size: inherit;
1739
1488
  font-family: inherit;
1740
1489
  cursor: pointer;
@@ -1762,7 +1511,7 @@
1762
1511
  border: 1px solid var(--pg-colors-border, #e2e8f0);
1763
1512
  border-radius: var(--pg-borders-radius-sm, 4px);
1764
1513
  background: var(--pg-colors-surface, #fff);
1765
- color: var(--pg-colors-text, #1e293b);
1514
+ color: var(--pg-colors-text-primary, #1e293b);
1766
1515
  font-size: inherit;
1767
1516
  font-family: inherit;
1768
1517
  outline: none;
@@ -1825,7 +1574,7 @@
1825
1574
  border: 1px solid var(--pg-colors-border, #e2e8f0);
1826
1575
  border-radius: var(--pg-borders-radius-sm, 4px);
1827
1576
  background: var(--pg-colors-surface, #fff);
1828
- color: var(--pg-colors-text, #1e293b);
1577
+ color: var(--pg-colors-text-primary, #1e293b);
1829
1578
  font-size: inherit;
1830
1579
  font-family: inherit;
1831
1580
  box-sizing: border-box;
@@ -1858,7 +1607,7 @@
1858
1607
  .pg-filter-set__item--select-all {
1859
1608
  position: static;
1860
1609
  font-weight: 500;
1861
- color: var(--pg-colors-text, #1e293b);
1610
+ color: var(--pg-colors-text-primary, #1e293b);
1862
1611
  }
1863
1612
  .pg-filter-set__item-label {
1864
1613
  overflow: hidden;
@@ -1918,10 +1667,10 @@
1918
1667
  .pg-filter-panel__clear-btn:hover {
1919
1668
  background: var(--pg-colors-background-alt, #f1f5f9);
1920
1669
  border-color: var(--pg-colors-text-secondary, #475569);
1921
- color: var(--pg-colors-text, #1e293b);
1670
+ color: var(--pg-colors-text-primary, #1e293b);
1922
1671
  }
1923
1672
 
1924
- `;var fr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Rows \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1673
+ `;var vr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Rows \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1925
1674
  .pg-row {
1926
1675
  display: flex;
1927
1676
  align-items: stretch;
@@ -1947,7 +1696,7 @@
1947
1696
  }
1948
1697
  .pg-row--group:hover,
1949
1698
  .pg-row--group.pg-row--hover {
1950
- background: var(--pg-colors-group-row-hover, #eff2ff) !important;
1699
+ background: var(--pg-colors-group-row-hover, var(--pg-colors-row-hover, #eff2ff)) !important;
1951
1700
  }
1952
1701
  .pg-row--group:hover .pg-row-group__toggle,
1953
1702
  .pg-row--group.pg-row--hover .pg-row-group__toggle {
@@ -1962,15 +1711,15 @@
1962
1711
  * Cells are fully selectable and copyable; editing is blocked because values are computed.
1963
1712
  */
1964
1713
  .pg-row--group-footer {
1965
- background: var(--pg-colors-group-footer-background, #eef2fa);
1714
+ background: var(--pg-colors-group-footer-background, var(--pg-colors-background-alt, #eef2fa));
1966
1715
  font-style: italic;
1967
1716
  font-weight: var(--pg-typography-font-weight-semi-bold, 600);
1968
- border-bottom: 2px solid var(--pg-colors-primary-light, #bfdbfe);
1717
+ border-bottom: 2px solid var(--pg-colors-primary-light, var(--pg-colors-border-strong, #bfdbfe));
1969
1718
  cursor: default;
1970
1719
  }
1971
1720
  .pg-row--group-footer:hover,
1972
1721
  .pg-row--group-footer.pg-row--hover {
1973
- background: var(--pg-colors-group-footer-hover, #e0e9f8) !important;
1722
+ background: var(--pg-colors-group-footer-hover, var(--pg-colors-row-hover, #e0e9f8)) !important;
1974
1723
  }
1975
1724
  /* Level-based indentation mirrors the group header rules */
1976
1725
  .pg-row--group-footer[data-level="0"] .pg-row-group__cell { padding-left: var(--pg-group-indent-0, 8px); }
@@ -1982,20 +1731,8 @@
1982
1731
  .pg-row--group-footer .pg-row-group__label {
1983
1732
  color: var(--pg-colors-text-secondary, #475569);
1984
1733
  }
1985
- /* Dark-mode overrides */
1986
- .pg-grid[data-theme="dark"] .pg-row--group-footer {
1987
- background: var(--pg-colors-group-footer-background, rgba(37, 99, 235, 0.06));
1988
- border-bottom-color: rgba(96, 165, 250, 0.28);
1989
- }
1990
- .pg-grid[data-theme="dark"] .pg-row--group-footer:hover,
1991
- .pg-grid[data-theme="dark"] .pg-row--group-footer.pg-row--hover {
1992
- background: var(--pg-colors-group-footer-hover, rgba(37, 99, 235, 0.11)) !important;
1993
- }
1994
- .pg-grid[data-theme="dark"] .pg-row--group-footer .pg-row-group__label {
1995
- color: var(--pg-colors-text-secondary, #94a3b8);
1996
- }
1997
1734
 
1998
- `;var vr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Cells \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1735
+ `;var br=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Cells \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
1999
1736
  .pg-cell {
2000
1737
  display: flex;
2001
1738
  align-items: center;
@@ -2059,18 +1796,18 @@
2059
1796
  }
2060
1797
 
2061
1798
  /* Dark-mode overrides */
2062
- .pg-grid[data-theme="dark"] .pg-cell--in-selection {
1799
+ [data-pg-mode="dark"] .pg-cell--in-selection {
2063
1800
  background-color: rgba(37,99,235,0.18) !important;
2064
1801
  }
2065
- .pg-grid[data-theme="dark"] .pg-cell--sel-top { --_t: 2px; }
2066
- .pg-grid[data-theme="dark"] .pg-cell--sel-bottom { --_b: -2px; }
2067
- .pg-grid[data-theme="dark"] .pg-cell--sel-left { --_l: 2px; }
2068
- .pg-grid[data-theme="dark"] .pg-cell--sel-right { --_r: -2px; }
2069
- .pg-grid[data-theme="dark"] .pg-cell--active-cell {
1802
+ [data-pg-mode="dark"] .pg-cell--sel-top { --_t: 2px; }
1803
+ [data-pg-mode="dark"] .pg-cell--sel-bottom { --_b: -2px; }
1804
+ [data-pg-mode="dark"] .pg-cell--sel-left { --_l: 2px; }
1805
+ [data-pg-mode="dark"] .pg-cell--sel-right { --_r: -2px; }
1806
+ [data-pg-mode="dark"] .pg-cell--active-cell {
2070
1807
  background-color: rgba(37,99,235,0.25) !important;
2071
1808
  box-shadow: inset 0 0 0 2px #60a5fa !important;
2072
1809
  }
2073
- .pg-grid[data-theme="dark"] .pg-cell--in-selection.pg-cell--active-cell {
1810
+ [data-pg-mode="dark"] .pg-cell--in-selection.pg-cell--active-cell {
2074
1811
  background-color: rgba(37,99,235,0.18) !important;
2075
1812
  box-shadow:
2076
1813
  inset 0 var(--_t) 0 0 #60a5fa,
@@ -2090,7 +1827,7 @@
2090
1827
  font-style: italic;
2091
1828
  font-weight: var(--pg-typography-font-weight-semi-bold, 600);
2092
1829
  }
2093
- .pg-grid[data-theme="dark"] .pg-cell--agg {
1830
+ [data-pg-mode="dark"] .pg-cell--agg {
2094
1831
  color: var(--pg-colors-agg-text, var(--pg-colors-text-secondary, #94a3b8));
2095
1832
  }
2096
1833
 
@@ -2130,10 +1867,10 @@
2130
1867
  animation: pg-cut-flash-overlay 0.75s ease-out forwards;
2131
1868
  }
2132
1869
  /* Dark mode uses stronger overlay */
2133
- .pg-grid[data-theme="dark"] .pg-cell--copy-flash::before {
1870
+ [data-pg-mode="dark"] .pg-cell--copy-flash::before {
2134
1871
  background: rgba(99, 165, 253, 0.5);
2135
1872
  }
2136
- .pg-grid[data-theme="dark"] .pg-cell--cut-flash::before {
1873
+ [data-pg-mode="dark"] .pg-cell--cut-flash::before {
2137
1874
  background: rgba(252, 100, 100, 0.5);
2138
1875
  }
2139
1876
 
@@ -2157,7 +1894,7 @@
2157
1894
  background: rgba(34, 197, 94, 0.45);
2158
1895
  animation: pg-fill-flash-overlay 0.75s ease-out forwards;
2159
1896
  }
2160
- .pg-grid[data-theme="dark"] .pg-cell--fill-flash::before {
1897
+ [data-pg-mode="dark"] .pg-cell--fill-flash::before {
2161
1898
  background: rgba(74, 222, 128, 0.5);
2162
1899
  }
2163
1900
 
@@ -2176,7 +1913,7 @@
2176
1913
  background: rgba(59, 130, 246, 0.40);
2177
1914
  animation: pg-fill-flash-overlay 0.75s ease-out forwards;
2178
1915
  }
2179
- .pg-grid[data-theme="dark"] .pg-cell--flash::before {
1916
+ [data-pg-mode="dark"] .pg-cell--flash::before {
2180
1917
  background: rgba(96, 165, 250, 0.45);
2181
1918
  }
2182
1919
 
@@ -2234,11 +1971,11 @@
2234
1971
  .pg-cell--fp-left::after { border-left-width: 1px; }
2235
1972
  .pg-cell--fp-right::after { border-right-width: 1px; }
2236
1973
 
2237
- .pg-grid[data-theme="dark"] .pg-cell--fill-preview {
1974
+ [data-pg-mode="dark"] .pg-cell--fill-preview {
2238
1975
  background-color: rgba(37, 99, 235, 0.12) !important;
2239
1976
  }
2240
1977
 
2241
- `;var br=`/* \u2500\u2500\u2500 Context menu \u2500\u2500\u2500 */
1978
+ `;var yr=`/* \u2500\u2500\u2500 Context menu \u2500\u2500\u2500 */
2242
1979
  .pg-context-menu {
2243
1980
  position: fixed;
2244
1981
  z-index: 999999;
@@ -2315,6 +2052,14 @@
2315
2052
  font-size: var(--pg-typography-font-size-sm, 12px);
2316
2053
  }
2317
2054
  .pg-cell__serial { font-variant-numeric: tabular-nums; }
2055
+ /* Dark mode: tint the serial (row-number) column with the header/footer chrome
2056
+ background (which sits above the darker data-row background in dark themes) so
2057
+ the number gutter reads as grid chrome \u2014 matching the header and footer
2058
+ surfaces \u2014 rather than as data. Scoped to dark mode per design; variants that
2059
+ define their own serial-column chrome (e.g. quartz) still win via source order. */
2060
+ [data-pg-mode="dark"] .pg-cell--serial {
2061
+ background: var(--pg-colors-header-background, var(--pg-colors-footer-background, #1e293b));
2062
+ }
2318
2063
  .pg-cell--bool-true { color: var(--pg-colors-success, #16a34a); }
2319
2064
  .pg-cell--bool-false { color: var(--pg-colors-text-disabled, #94a3b8); }
2320
2065
  .pg-cell__image { border-radius: var(--pg-borders-radius-sm, 4px); object-fit: cover; }
@@ -2332,7 +2077,7 @@
2332
2077
  .pg-cell--editing .pg-cell__inner { padding: 0; overflow: visible; }
2333
2078
  .pg-selection-canvas { position: absolute; top: 0; left: 0; pointer-events: none; z-index: 10; }
2334
2079
 
2335
- `;var yr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Checkbox \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
2080
+ `;var Cr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Checkbox \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
2336
2081
  .pg-checkbox {
2337
2082
  width: var(--pg-sizing-checkbox-size, 16px);
2338
2083
  height: var(--pg-sizing-checkbox-size, 16px);
@@ -2402,7 +2147,7 @@
2402
2147
  letter-spacing: 0.02em;
2403
2148
  }
2404
2149
 
2405
- `;var Cr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Tree Data \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
2150
+ `;var xr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Tree Data \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
2406
2151
  The toggle column's cell gets a marker class ('.pg-cell--tree-toggle-col',
2407
2152
  applied by applyTreeToggle regardless of whether the row has children \u2014
2408
2153
  leaves still need to sit indented under their parent), then indentation is
@@ -2471,7 +2216,7 @@
2471
2216
  box-shadow: inset 0 -2px 0 0 var(--pg-colors-primary, #2563eb);
2472
2217
  }
2473
2218
 
2474
- `;var xr=`/* \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 */
2219
+ `;var wr=`/* \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 */
2475
2220
 
2476
2221
  /* Native vertical scrollbar \u2014 flex item that lives beside the center panel.
2477
2222
  It is NOT absolutely positioned so it never overlaps cell content; the center
@@ -2496,11 +2241,14 @@
2496
2241
  .pg-scrollbar-h-spacer { flex-shrink: 0; background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc)); }
2497
2242
  .pg-scrollbar-h-spacer--left { width: var(--pg-left-panel-width, 0px); overflow: scroll; }
2498
2243
  .pg-scrollbar-h-spacer--right { width: var(--pg-right-panel-width, 0px); overflow: scroll; }
2499
- /* Aligns the h-scroll track with the narrowed center panel (which is now
2500
- offset by the vertical scrollbar width captured in --pg-scrollbar-v-width). */
2244
+ /* Aligns the h-scroll track with the narrowed center panel: reserves exactly
2245
+ the vertical scrollbar's *current* width (0 when hidden) so the native
2246
+ h-scroll container's client width equals the center viewport \u2014 otherwise the
2247
+ track is wider than the panel and the body scrolls short by the scrollbar
2248
+ width, leaving the last column partly hidden. */
2501
2249
  .pg-scrollbar-h-spacer--vscroll {
2502
2250
  flex-shrink: 0;
2503
- width: 0px;
2251
+ width: var(--pg-scrollbar-v-live-width, 0px);
2504
2252
  background: var(--pg-colors-scrollbar-track, var(--pg-colors-scrollbar-bg, #f8fafc));
2505
2253
  }
2506
2254
  /* Native horizontal scrollbar container */
@@ -2564,7 +2312,7 @@
2564
2312
  /* Hidden state \u2014 applied to wraps */
2565
2313
  .pg-scrollbar--hidden { display: none; }
2566
2314
 
2567
- `;var wr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Editors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
2315
+ `;var Er=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Editors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
2568
2316
  .pg-editor {
2569
2317
  width: 100%;
2570
2318
  height: 100%;
@@ -2846,7 +2594,7 @@
2846
2594
  flex-shrink: 0;
2847
2595
  }
2848
2596
 
2849
- `;var Er=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Footer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
2597
+ `;var Rr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Footer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
2850
2598
  .pg-grid__footer {
2851
2599
  flex-shrink: 0;
2852
2600
  border-top: 1px solid var(--pg-colors-footer-border, #e2e8f0);
@@ -2915,7 +2663,7 @@
2915
2663
  outline: none;
2916
2664
  }
2917
2665
 
2918
- `;var Rr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Overlay \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
2666
+ `;var Sr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Overlay \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
2919
2667
  .pg-overlay {
2920
2668
  position: absolute;
2921
2669
  inset: 0;
@@ -2971,8 +2719,8 @@
2971
2719
  word-break: break-word;
2972
2720
  }
2973
2721
 
2974
- `;var Sr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Row Drag \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
2975
- .pg-grid__body { position: relative; }
2722
+ `;var Ir=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Row Drag \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
2723
+ .pg-grid__body { position: relative; transform: translateZ(10px);}
2976
2724
 
2977
2725
  .pg-row-drag-handle {
2978
2726
  display: inline-flex;
@@ -3055,7 +2803,7 @@
3055
2803
  top 130ms cubic-bezier(0.2, 0, 0, 1);
3056
2804
  }
3057
2805
 
3058
- `;var Ir=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Chart Panel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
2806
+ `;var Tr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Chart Panel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
3059
2807
  .pg-chart-panel-backdrop {
3060
2808
  position: absolute; inset: 0; z-index: 9990;
3061
2809
  background: transparent;
@@ -3194,7 +2942,7 @@
3194
2942
  max-width: 120px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
3195
2943
  }
3196
2944
 
3197
- `;var Tr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Context menu submenu \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
2945
+ `;var Mr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Context menu submenu \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
3198
2946
  .pg-context-menu__item { display: flex; align-items: center; gap: 8px; }
3199
2947
  .pg-context-menu__item--has-sub { position: relative; padding-right: 28px; max-width: stretch; }
3200
2948
  .pg-context-menu__item--has-sub > .pg-context-menu__sub { display: none; }
@@ -3208,6 +2956,12 @@
3208
2956
  min-width: 175px; padding: 4px;
3209
2957
  white-space: nowrap;
3210
2958
  }
2959
+ /* Viewport-aware flip: when a submenu near the right edge would overflow,
2960
+ JS (positionSubmenu) adds --sub-left so the flyout opens to the left
2961
+ instead. Works at any nesting depth since every wrapper shares the class. */
2962
+ .pg-context-menu__item--has-sub.pg-context-menu__item--sub-left > .pg-context-menu__sub {
2963
+ left: auto; right: 100%;
2964
+ }
3211
2965
  .pg-context-menu__item--has-sub::after {
3212
2966
  content: '\u203A'; position: absolute; right: 10px; top: 50%; transform: translateY(-50%);
3213
2967
  font-size: 16px; color: var(--pg-colors-text-secondary,#64748b); line-height: 1;
@@ -3320,11 +3074,18 @@
3320
3074
  color: var(--pg-colors-text-primary, #0f172a);
3321
3075
  user-select: none;
3322
3076
  outline: none;
3077
+ /* Theme the internal overflow scrollbar so it matches the surface in dark
3078
+ mode too (the menu is portaled to <body>, outside the grid's own
3079
+ scrollbar styling \u2014 these tokens are mirrored onto :root by ThemeManager). */
3080
+ scrollbar-width: thin;
3081
+ scrollbar-color: var(--pg-colors-scrollbar-thumb, #cbd5e1) var(--pg-colors-scrollbar-track, #f1f5f9);
3323
3082
  }
3324
3083
 
3325
- /* Horizontal divider between section groups */
3084
+ /* Horizontal divider between section groups.
3085
+ Uses the themed border token \u2014 a non-existent token here would fall back to
3086
+ a hardcoded light value and paint a bright line in dark mode. */
3326
3087
  .pg-col-ctx-menu__separator {
3327
- border-top: 1px solid var(--pg-colors-border-col-ctxt-menu, #e2e8f0);
3088
+ height: 1px;
3328
3089
  background: var(--pg-colors-border, #e2e8f0);
3329
3090
  margin: 4px 0;
3330
3091
  }
@@ -3340,14 +3101,17 @@
3340
3101
  padding: 7px 10px;
3341
3102
  border-radius: var(--pg-borders-radius-sm, 4px);
3342
3103
  cursor: pointer;
3343
- transition: background var(--pg-transitions-fast, 80ms ease);
3104
+ transition: background var(--pg-transitions-duration-fast, 80ms) ease;
3344
3105
  outline: none;
3345
3106
  white-space: nowrap;
3346
3107
  }
3347
3108
 
3109
+ /* Hover / keyboard-focus background. Uses header-hover (distinct from the menu
3110
+ surface in both light and dark themes) rather than background-alt, which
3111
+ collapses to the surface colour in dark mode and leaves hover invisible. */
3348
3112
  .pg-col-ctx-menu__item:hover,
3349
3113
  .pg-col-ctx-menu__item:focus-visible {
3350
- background: var(--pg-colors-background-alt, #f1f5f9);
3114
+ background: var(--pg-colors-header-hover, #f1f5f9);
3351
3115
  }
3352
3116
 
3353
3117
  /* Highlighted / "currently applied" item (e.g. active sort direction) */
@@ -3407,7 +3171,7 @@
3407
3171
  height: 14px;
3408
3172
  opacity: 0.4;
3409
3173
  margin-left: 4px;
3410
- transition: opacity var(--pg-transitions-fast, 80ms ease);
3174
+ transition: opacity var(--pg-transitions-duration-fast, 80ms) ease;
3411
3175
  }
3412
3176
 
3413
3177
  .pg-col-ctx-menu__item--has-submenu:hover .pg-col-ctx-menu__item-chevron {
@@ -3429,6 +3193,10 @@
3429
3193
  border: 1px solid var(--pg-colors-border, #e2e8f0);
3430
3194
  border-radius: var(--pg-borders-radius-md, 6px);
3431
3195
  box-shadow: var(--pg-shadows-dropdown, 0 8px 24px rgba(15, 23, 42, 0.12));
3196
+ /* Portaled to <body>, so it no longer inherits the parent menu's text color
3197
+ (set on .pg-column-context-menu) \u2014 declare it explicitly, or items fall
3198
+ back to the browser default black and are unreadable in dark mode. */
3199
+ color: var(--pg-colors-text-primary, #0f172a);
3432
3200
  z-index: 10000;
3433
3201
  }
3434
3202
 
@@ -3448,7 +3216,7 @@
3448
3216
  height: 100%;
3449
3217
  }
3450
3218
 
3451
- `;var Mr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Master/Detail \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
3219
+ `;var _r=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Master/Detail \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
3452
3220
  The detail layer is a sibling of the left/center/right body panels, not a
3453
3221
  child of any of them \u2014 that is what lets a detail row span the full grid
3454
3222
  width regardless of pinned columns. Its content wrapper receives only the
@@ -3641,7 +3409,7 @@
3641
3409
  background: var(--pg-colors-resize-handle-color, #e2e8f0);
3642
3410
  }
3643
3411
 
3644
- `;var _r=`/* \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
3412
+ `;var Lr=`/* \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
3645
3413
  Floating command bar, anchored to the grid body's bottom-right corner.
3646
3414
  Mounted as a sibling of the pinned-column panels (see PhotonAIPanel.mount /
3647
3415
  GridRenderer.buildLayout) so it floats independently of virtualization and
@@ -3897,7 +3665,7 @@
3897
3665
  }
3898
3666
  }
3899
3667
 
3900
- `;var Lr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Custom cell tooltip \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
3668
+ `;var Dr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Custom cell tooltip \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
3901
3669
  * Only mounted/shown for columns with renderer.tooltip \u2014 plain columns keep
3902
3670
  * using the free native title attribute. Positioned via a transform set
3903
3671
  * in JS relative to .pg-grid__body so it never affects grid layout. */
@@ -3909,7 +3677,7 @@
3909
3677
  max-width: 320px;
3910
3678
  padding: var(--pg-spacing-xs, 6px) var(--pg-spacing-sm, 10px);
3911
3679
  border-radius: var(--pg-borders-radius-sm, 4px);
3912
- background: var(--pg-colors-tooltip-bg, #1f2937);
3680
+ background: var(--pg-colors-tooltip-background, #1f2937);
3913
3681
  color: var(--pg-colors-tooltip-text, #ffffff);
3914
3682
  font-family: var(--pg-typography-font-family, sans-serif);
3915
3683
  font-size: var(--pg-typography-font-size-xs, 12px);
@@ -3927,7 +3695,7 @@
3927
3695
  visibility: visible;
3928
3696
  }
3929
3697
 
3930
- `;var Dr=`
3698
+ `;var Ar=`
3931
3699
  .pg-chart-config {
3932
3700
  position: absolute;
3933
3701
  top: 0;
@@ -4043,7 +3811,7 @@
4043
3811
  height: 100%;
4044
3812
  pointer-events: none;
4045
3813
  }
4046
- `;var Ar=`
3814
+ `;var Hr=`
4047
3815
  .pg-chart-ctrl__row {
4048
3816
  display: flex;
4049
3817
  align-items: center;
@@ -4201,7 +3969,7 @@
4201
3969
  opacity: 0.4;
4202
3970
  pointer-events: none;
4203
3971
  }
4204
- `;var Hr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Column Chooser \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
3972
+ `;var Pr=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Column Chooser \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
4205
3973
 
4206
3974
  /* Positioning layer only \u2014 no backdrop scrim/blur, and transparent to pointer
4207
3975
  events so the grid behind stays visible and interactive. The dialog itself
@@ -4429,7 +4197,7 @@
4429
4197
  text-align: center;
4430
4198
  color: var(--pg-colors-text-secondary, #94a3b8);
4431
4199
  }
4432
- `;var Pr=`/* \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 */
4200
+ `;var Gr=`/* \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 */
4433
4201
 
4434
4202
  /* Scroll surfaces: suppress native pan/zoom so JS panning owns the gesture. */
4435
4203
  .pg-grid__header,
@@ -4491,9 +4259,9 @@
4491
4259
  min-height: 16px;
4492
4260
  }
4493
4261
  }
4494
- `;var ko="photon-grid-base-styles",si=[dr,cr,pr,hr,ur,gr,mr,fr,vr,br,yr,Cr,xr,wr,Er,Rr,Sr,Ir,Tr,kr,Mr,_r,Lr,Dr,Ar,Hr,Pr].join(""),li=[si,nr,ir,sr,lr,ar].join(`
4495
- `);function kt(){if(document.getElementById(ko))return;let d=document.createElement("style");d.id=ko,d.textContent=li,document.head.appendChild(d)}function Gr(){document.getElementById(ko)?.remove()}function Mt(d,e){if(d==null||d==="")return e.required,null;switch(e.type){case"number":case"currency":{let t=Number(d);return isNaN(t)?null:t}case"boolean":return typeof d=="boolean"?d:typeof d=="string"?d.toLowerCase()==="true"||d==="1":!!d;case"date":case"time":{let t=new Date(d);return isNaN(t.getTime())?null:t.toISOString()}case"array":return Array.isArray(d)?d:[d];default:return String(d)}}function Q(d,e,t){if(d==null)return"";switch(e.type){case"number":{let o=Number(d);if(isNaN(o))return String(d);let r=t?.locale??"en-US";return o.toLocaleString(r,{minimumFractionDigits:0,maximumFractionDigits:2})}case"currency":{let o=Number(d);return isNaN(o)?String(d):`${t?.currencySymbol??"$"}${o.toLocaleString(t?.locale??"en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}`}case"date":{let o=new Date(d);return isNaN(o.getTime())?String(d):ai(o,t?.dateFormat??"dd/MM/yyyy",t?.timeZone)}case"time":{let o=new Date(d);return isNaN(o.getTime())?String(d):o.toLocaleTimeString(t?.locale??"en-US",{hour:"2-digit",minute:"2-digit",timeZone:t?.timeZone})}case"boolean":return d?"Yes":"No";case"array":return Array.isArray(d)?d.join(", "):String(d);case"dropdown":{let o=e.dropdownOptions?.find(r=>String(r.value)===String(d));return o?o.label:String(d)}default:{let o=String(d);return o.charAt(0).toUpperCase()+o.slice(1)}}}function _t(d,e){if(e.required&&(d==null||d===""))return`${e.header} is required`;if(e.type==="number"||e.type==="currency"){let t=Number(d);if(d!=null&&d!==""&&isNaN(t))return`${e.header} must be a number`;if(!isNaN(t)){if(e.min!==void 0&&e.min!==null&&t<e.min)return`${e.header} must be at least ${e.min}`;if(e.max!==void 0&&e.max!==null&&t>e.max)return`${e.header} must be at most ${e.max}`}}return e.type==="email"&&d&&!/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(String(d))?`${e.header} must be a valid email address`:e.validatorFn?e.validatorFn(d):null}function ai(d,e,t){let o={};t&&(o.timeZone=t);let r=i=>String(i).padStart(2,"0"),n=new Date(d.toLocaleString("en-US",o));return e.replace("yyyy",String(n.getFullYear())).replace("MM",r(n.getMonth()+1)).replace("dd",r(n.getDate())).replace("HH",r(n.getHours())).replace("mm",r(n.getMinutes())).replace("ss",r(n.getSeconds()))}function $(d,e){return d.renderer?.[e]}var Lt=class d{constructor(e,t,o,r,n){this.container=e;this.cellEl=t;this.options=o;this.currentValue=r;this.callbacks=n;this.instanceId=++d.instanceCounter;this.destroyed=!1;this.handleKeyDown=e=>{switch(e.key){case"ArrowDown":e.preventDefault(),this.navigate(1);break;case"ArrowUp":e.preventDefault(),this.navigate(-1);break;case"PageDown":e.preventDefault(),this.navigate(d.MAX_VISIBLE);break;case"PageUp":e.preventDefault(),this.navigate(-d.MAX_VISIBLE);break;case"Home":e.preventDefault(),this.setHighlight(0),this.scrollToIndex(0,"start");break;case"End":e.preventDefault(),this.setHighlight(this.options.length-1),this.scrollToIndex(this.options.length-1,"end");break;case"Enter":e.preventDefault(),this.selectIndex(this.highlightedIndex);break;case"Escape":e.preventDefault(),this.callbacks.onStop(!1);break;case"Tab":e.preventDefault(),this.callbacks.onStop(!0),this.callbacks.onTab?.(e.shiftKey);break}e.stopPropagation()};this.handleScroll=()=>{this.renderVisibleItems(this.scrollEl.scrollTop)};this.handleOutsideClick=e=>{let t=e.target;this.panelEl.contains(t)||this.cellEl.contains(t)||this.callbacks.onStop(!1)};this.handleResize=()=>{this.positionPanel()};this.handleBodyScroll=e=>{if(this.destroyed)return;let t=e.target;this.panelEl&&this.panelEl.contains(t)||this.callbacks.onStop(!1)};this.selectedIndex=this.options.findIndex(i=>String(i.value)===String(r??"")),this.highlightedIndex=this.selectedIndex>=0?this.selectedIndex:0,this.mount()}static{this.ITEM_HEIGHT=34}static{this.MAX_VISIBLE=8}static{this.SCROLL_BUFFER=3}static{this.instanceCounter=0}destroy(){this.destroyed||(this.destroyed=!0,this.scrollEl?.removeEventListener("keydown",this.handleKeyDown),this.scrollEl?.removeEventListener("scroll",this.handleScroll),document.removeEventListener("mousedown",this.handleOutsideClick),window.removeEventListener("resize",this.handleResize),document.removeEventListener("scroll",this.handleBodyScroll,!0),this.panelEl?.remove())}mount(){this.buildTrigger(),this.buildPanel(),this.positionPanel(),document.body.appendChild(this.panelEl),requestAnimationFrame(()=>{this.destroyed||this.panelEl.classList.add("pg-dropdown-editor__panel--visible")}),setTimeout(()=>{this.destroyed||(this.scrollEl.focus(),this.scrollToIndex(this.highlightedIndex,"center"))},0),setTimeout(()=>{this.destroyed||document.addEventListener("mousedown",this.handleOutsideClick)},0),window.addEventListener("resize",this.handleResize,{passive:!0}),document.addEventListener("scroll",this.handleBodyScroll,{passive:!0,capture:!0})}buildTrigger(){this.triggerEl=document.createElement("div"),this.triggerEl.className="pg-dropdown-editor__trigger",this.triggerEl.setAttribute("aria-haspopup","listbox"),this.triggerEl.setAttribute("aria-expanded","true"),this.syncTrigger(this.options[this.selectedIndex]),this.container.innerHTML="",this.container.appendChild(this.triggerEl)}syncTrigger(e){this.triggerEl.innerHTML="";let t=this.buildIcon(e,"pg-dropdown-editor__opt-icon");t&&this.triggerEl.appendChild(t);let o=document.createElement("span");o.className="pg-dropdown-editor__trigger-label",o.textContent=e?.label??"\u2014",this.triggerEl.appendChild(o);let r=document.createElement("span");r.className="pg-dropdown-editor__arrow",r.setAttribute("aria-hidden","true"),this.triggerEl.appendChild(r)}buildPanel(){this.panelEl=document.createElement("div"),this.panelEl.className="pg-dropdown-editor__panel";let t=Math.min(Math.max(this.options.length,1),d.MAX_VISIBLE)*d.ITEM_HEIGHT;if(this.scrollEl=document.createElement("div"),this.scrollEl.className="pg-dropdown-editor__scroll",this.scrollEl.setAttribute("role","listbox"),this.scrollEl.setAttribute("tabindex","0"),this.scrollEl.setAttribute("aria-label","Select an option"),this.scrollEl.style.height=`${t}px`,this.scrollEl.addEventListener("keydown",this.handleKeyDown),this.scrollEl.addEventListener("scroll",this.handleScroll,{passive:!0}),this.options.length===0){let o=document.createElement("div");o.className="pg-dropdown-editor__empty",o.textContent="No options available",this.scrollEl.appendChild(o)}else{let o=document.createElement("div");o.className="pg-dropdown-editor__spacer",o.style.height=`${this.options.length*d.ITEM_HEIGHT}px`,this.itemsEl=document.createElement("div"),this.itemsEl.className="pg-dropdown-editor__items",o.appendChild(this.itemsEl),this.scrollEl.appendChild(o),this.renderVisibleItems(0)}this.panelEl.appendChild(this.scrollEl)}renderVisibleItems(e){if(!this.itemsEl)return;let t=d.ITEM_HEIGHT,o=d.SCROLL_BUFFER,r=d.MAX_VISIBLE,n=this.options.length,i=Math.max(0,Math.floor(e/t)-o),s=Math.min(n,i+r+o*2);this.itemsEl.innerHTML="",this.itemsEl.style.transform=`translateY(${i*t}px)`;for(let l=i;l<s;l++){let a=this.options[l],c=l===this.selectedIndex,p=l===this.highlightedIndex,h=document.createElement("div");if(h.className="pg-dropdown-editor__option",h.id=this.optId(l),h.setAttribute("role","option"),h.setAttribute("aria-selected",String(c)),h.setAttribute("data-index",String(l)),c&&h.classList.add("pg-dropdown-editor__option--selected"),p&&h.classList.add("pg-dropdown-editor__option--highlighted"),this.callbacks.renderOption){let u=this.callbacks.renderOption(a,l,c,p);typeof u=="string"?h.innerHTML=u:h.appendChild(u)}else{let u=this.buildIcon(a,"pg-dropdown-editor__opt-icon");u&&h.appendChild(u);let m=document.createElement("span");if(m.className="pg-dropdown-editor__opt-label",m.textContent=a.label,h.appendChild(m),c){let g=document.createElement("span");g.className="pg-dropdown-editor__opt-check",g.setAttribute("aria-hidden","true"),h.appendChild(g)}}h.addEventListener("mousedown",u=>{u.preventDefault(),this.selectIndex(l)}),h.addEventListener("mouseenter",()=>this.setHighlight(l)),this.itemsEl.appendChild(h)}this.scrollEl.setAttribute("aria-activedescendant",this.optId(this.highlightedIndex))}positionPanel(){let e=this.cellEl.getBoundingClientRect(),t=d.ITEM_HEIGHT,r=Math.min(Math.max(this.options.length,1),d.MAX_VISIBLE)*t,n=e.width,i=4,s=e.bottom+i,l=!1;window.innerHeight-e.bottom<r+i&&e.top>r+i&&(s=e.top-r-i,l=!0);let a=Math.max(i,Math.min(e.left,window.innerWidth-n-i));this.panelEl.style.top=`${Math.max(i,s)}px`,this.panelEl.style.left=`${a}px`,this.panelEl.style.width=`${n}px`,this.panelEl.classList.toggle("pg-dropdown-editor__panel--above",l)}navigate(e){let t=Math.max(0,Math.min(this.options.length-1,this.highlightedIndex+e));this.setHighlight(t),this.scrollToIndex(t,e>0?"end":"start")}setHighlight(e){if(this.highlightedIndex===e)return;this.itemsEl?.querySelector(`[data-index="${this.highlightedIndex}"]`)?.classList.remove("pg-dropdown-editor__option--highlighted"),this.highlightedIndex=e,this.itemsEl?.querySelector(`[data-index="${e}"]`)?.classList.add("pg-dropdown-editor__option--highlighted"),this.scrollEl?.setAttribute("aria-activedescendant",this.optId(e))}scrollToIndex(e,t){let o=d.ITEM_HEIGHT,r=e*o,n=r+o,i=this.scrollEl.scrollTop,s=this.scrollEl.clientHeight;t==="center"?this.scrollEl.scrollTop=Math.max(0,r-s/2+o/2):r<i?this.scrollEl.scrollTop=r:n>i+s&&(this.scrollEl.scrollTop=n-s)}selectIndex(e){e<0||e>=this.options.length||(this.callbacks.onSelect(this.options[e]),this.callbacks.onStop(!0))}buildIcon(e,t){if(!e?.image&&!e?.icon)return null;let o=document.createElement("span");if(o.className=t,e.image){let r=document.createElement("img");r.src=e.image,r.alt="",r.width=20,r.height=20,o.appendChild(r)}else e.icon&&(o.innerHTML=e.icon);return o}optId(e){return`pg-dd-${this.instanceId}-${e}`}};var Ie=class{constructor(){this.subscriptions=new Map;this.nextId=1;this.paused=!1;this.pendingQueue=[]}on(e,t,o=0){let r={id:this.nextId++,type:e,handler:t,once:!1,priority:o};return this.addSubscription(r),()=>this.removeSubscription(e,r.id)}once(e,t){let o={id:this.nextId++,type:e,handler:t,once:!0,priority:0};return this.addSubscription(o),()=>this.removeSubscription(e,o.id)}off(e,t){let o=this.subscriptions.get(e);if(!o)return;let r=o.findIndex(n=>n.handler===t);r!==-1&&o.splice(r,1)}emit(e,t){if(this.paused){this.pendingQueue.push({type:e,payload:t});return}this.dispatch(e,t)}emitAsync(e,t){return Promise.resolve().then(()=>this.emit(e,t))}pause(){this.paused=!0}resume(){this.paused=!1;let e=this.pendingQueue.splice(0);for(let{type:t,payload:o}of e)this.dispatch(t,o)}clear(e){e?this.subscriptions.delete(e):this.subscriptions.clear()}hasListeners(e){let t=this.subscriptions.get(e);return!!t&&t.length>0}addSubscription(e){let t=this.subscriptions.get(e.type);t||(t=[],this.subscriptions.set(e.type,t)),t.push(e),t.sort((o,r)=>r.priority-o.priority)}removeSubscription(e,t){let o=this.subscriptions.get(e);if(!o)return;let r=o.findIndex(n=>n.id===t);r!==-1&&o.splice(r,1)}dispatch(e,t){let o=this.subscriptions.get(e);if(!o||o.length===0)return;let r=[];for(let n of[...o]){try{n.handler(t)}catch(i){console.error(`[PhotonGrid] EventBus handler error for "${e}":`,i)}n.once&&r.push(n.id)}for(let n of r)this.removeSubscription(e,n)}};var Te=class{constructor(e){this.eventBus=e;this.subscribers=new Map;this.state=this.createInitialState()}get(e){return this.state[e]}set(e,t){let o=this.state[e];o!==t&&(this.state[e]=t,this.notifySubscribers(e,t,o))}update(e,t){this.set(e,t(this.state[e]))}batch(e){this.eventBus.pause();for(let[t,o]of Object.entries(e))this.set(t,o);this.eventBus.resume()}watch(e,t){let o=this.subscribers.get(e);return o||(o=new Set,this.subscribers.set(e,o)),o.add(t),()=>{this.subscribers.get(e)?.delete(t)}}snapshot(){return Object.freeze({...this.state})}notifySubscribers(e,t,o){let r=this.subscribers.get(e);if(r)for(let n of r)try{n(t,o)}catch(i){console.error(`[PhotonGrid] GridStore subscriber error for "${String(e)}":`,i)}}createInitialState(){return{allRows:[],visibleRows:[],renderedRows:[],totalRowCount:0,columns:[],columnStates:new Map,pinnedLeftColumns:[],pinnedRightColumns:[],centerColumns:[],sortConfig:[],filterModel:{},quickFilterConfig:null,filterActive:!1,pagination:{enabled:!1,page:1,pageSize:50,pageSizeOptions:[10,25,50,100,200],serverSide:!1,totalRows:0},groupedColumnIds:[],expandedGroupKeys:new Set,expandedRowIds:new Set,expandedTreeNodeIds:new Set,selectedRowIds:new Set,activeRowId:null,isAllSelected:!1,isIndeterminate:!1,cellRanges:[],activeCell:null,loading:!1,error:null,scrollTop:0,scrollLeft:0,viewportHeight:0,viewportWidth:0,firstRenderedRowIndex:0,lastRenderedRowIndex:0,fullScreen:!1,editingCellId:null}}destroy(){this.subscribers.clear()}};var x={READY:"grid:ready",DESTROYED:"grid:destroyed",DATA_CHANGED:"grid:dataChanged",ROWS_RENDERED:"grid:rowsRendered",SCROLL:"grid:scroll",ROW_CLICKED:"row:clicked",ROW_DOUBLE_CLICKED:"row:doubleClicked",ROW_SELECTED:"row:selected",ROW_DESELECTED:"row:deselected",ALL_ROWS_SELECTED:"row:allSelected",ALL_ROWS_DESELECTED:"row:allDeselected",ROW_EXPANDED:"row:expanded",ROW_COLLAPSED:"row:collapsed",ROW_GROUP_OPENED:"row:groupOpened",ROW_DROP:"row:drop",ROW_EDIT_START:"row:editStart",ROW_EDIT_STOP:"row:editStop",CELL_CLICKED:"cell:clicked",CELL_DOUBLE_CLICKED:"cell:doubleClicked",CELL_VALUE_CHANGED:"cell:valueChanged",CELL_EDIT_START:"cell:editStart",CELL_EDIT_STOP:"cell:editStop",CELL_SELECTION_CHANGED:"cell:selectionChanged",COLUMN_RESIZED:"column:resized",COLUMN_MOVED:"column:moved",COLUMN_PINNED:"column:pinned",COLUMN_VISIBLE:"column:visible",COLUMN_SORTED:"column:sorted",COLUMN_FILTER_CHANGED:"column:filterChanged",COLUMNS_STATE_CHANGED:"column:stateChanged",COLUMN_AUTOSIZE:"column:autoSize",COLUMN_GROUP_CHANGED:"column:groupChanged",SORT_CHANGED:"sort:changed",FILTER_CHANGED:"filter:changed",QUICK_FILTER_CHANGED:"filter:quickChanged",PAGE_CHANGED:"pagination:pageChanged",PAGE_SIZE_CHANGED:"pagination:pageSizeChanged",GROUP_EXPANDED:"group:expanded",GROUP_COLLAPSED:"group:collapsed",THEME_CHANGED:"theme:changed",EXPORT_START:"export:start",EXPORT_COMPLETE:"export:complete",EXPORT_ERROR:"export:error",DRAG_STARTED:"drag:started",DRAG_OVER:"drag:over",DRAG_STOPPED:"drag:stopped",CHART_CREATED:"chart:created",CHART_DESTROYED:"chart:destroyed",CHART_RANGE_SELECTION_CHANGED:"chart:rangeSelectionChanged",CHART_OPTIONS_CHANGED:"chart:optionsChanged",LOADING_STARTED:"loading:started",LOADING_STOPPED:"loading:stopped",CELL_CONTEXT_MENU:"cell:contextMenu",COLUMN_GROUP_HEADER_COLLAPSED:"columnGroup:collapsed",COLUMN_GROUP_HEADER_EXPANDED:"columnGroup:expanded",COLUMN_GROUP_HEADER_CREATED:"columnGroup:created",COLUMN_GROUP_HEADER_REMOVED:"columnGroup:removed",ROW_DETAIL_TOGGLE_CLICKED:"row:detailToggleClicked",ROW_DETAIL_OPENED:"row:detailOpened",ROW_DETAIL_CLOSED:"row:detailClosed",ROW_DETAIL_HEIGHT_CHANGED:"row:detailHeightChanged",TREE_NODE_TOGGLE_CLICKED:"tree:nodeToggleClicked",TREE_NODE_EXPANDED:"tree:nodeExpanded",TREE_NODE_COLLAPSED:"tree:nodeCollapsed",TREE_CHILDREN_LOADED:"tree:childrenLoaded"};function Nr(d){return d.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[._-]+/g," ").replace(/\s+/g," ").trim().split(" ").map(e=>e&&e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function Or(d){let e=0,t=o=>o.map(r=>{let n=r.colId??`col_${r.field}_${e++}`;return{...r,colId:n,header:r.header??Nr(r.field),type:r.type??"string",children:r.children?t(r.children):void 0}});return t(d)}var ke=class{constructor(e,t){this.store=e;this.eventBus=t;this.columns=[];this.initialColumnStates=[];this.initialColumnDefs=new Map}initColumns(e){this.columns=e.map((t,o)=>this.normalizeColumn(t,o)),this.rebuildPinnedSections(),this.store.set("columns",this.columns),this.initialColumnStates=this.getColumnStates(),this.initialColumnDefs=new Map(this.columns.map(t=>[t.colId,{...t}])),this.emitStatesChanged()}getColumn(e){return this.columns.find(t=>t.colId===e)}getAllColumns(){return this.columns}getVisibleColumns(){return this.columns.filter(e=>e.visible!==!1)}setColumnWidth(e,t,o=!1){let r=this.getColumn(e);if(!r)return;let n=r.minWidth??40,i=r.maxWidth??1/0;r.width=Math.min(i,Math.max(n,t)),this.store.set("columns",[...this.columns]),this.eventBus.emit(x.COLUMN_RESIZED,{colDef:r,newWidth:r.width,finished:o}),o&&this.emitStatesChanged()}setColumnWidths(e){let t=!1;for(let[o,r]of e){let n=this.getColumn(o);if(!n)continue;let i=n.minWidth??40,s=n.maxWidth??1/0;n.width=Math.min(s,Math.max(i,r)),t=!0}t&&(this.store.set("columns",[...this.columns]),this.emitStatesChanged())}resetColumnWidth(e){let t=this.getColumn(e);if(!t)return;let o=this.initialColumnStates.find(r=>r.colId===e);t.width=o?.width??150,this.store.set("columns",[...this.columns]),this.emitStatesChanged()}setColumnVisible(e,t){let o=this.getColumn(e);!o||o.alwaysVisible||(o.visible=t,this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]),this.eventBus.emit(x.COLUMN_VISIBLE,{colDef:o,visible:t}),this.emitStatesChanged())}setColumnPin(e,t){let o=this.getColumn(e);o&&(o.pinned=t,this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]),this.eventBus.emit(x.COLUMN_PINNED,{colDef:o,pinned:t}),this.emitStatesChanged())}moveColumn(e,t){let o=this.getVisibleColumns();if(e<0||e>=o.length||t<0||t>=o.length)return;let r=o[e];o.splice(e,1),o.splice(t,0,r),this.columns=this.syncColumnOrder(o),this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]),this.eventBus.emit(x.COLUMN_MOVED,{colDef:r,fromIndex:e,toIndex:t}),this.emitStatesChanged()}moveAndPin(e,t,o){let r=this.getColumn(e);if(!r)return;r.pinned=t;let n=this.getVisibleColumns(),i=n.findIndex(a=>a.colId===e);if(i===-1){this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]);return}let s;if(o)s=n.findIndex(a=>a.colId===o),s===-1&&(s=n.length);else{let a=[...n].reverse().find(c=>(c.pinned??null)===(t??null)&&c.colId!==e);s=a?n.findIndex(c=>c.colId===a.colId)+1:n.length}n.splice(i,1);let l=Math.min(i<s?s-1:s,n.length);n.splice(l,0,r),this.columns=this.syncColumnOrder(n),this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]),this.eventBus.emit(x.COLUMN_MOVED,{colDef:r,fromIndex:i,toIndex:l}),this.eventBus.emit(x.COLUMN_PINNED,{colDef:r,pinned:t}),this.emitStatesChanged()}setColumnAggFunc(e,t){let o=this.getColumn(e);o&&(o.aggFunc=t??void 0,this.store.set("columns",[...this.columns]),this.emitStatesChanged())}setColumnHeader(e,t){let o=this.getColumn(e);!o||!t||(o.header=t,this.store.set("columns",[...this.columns]),this.emitStatesChanged())}duplicateColumn(e){let t=this.columns.findIndex(l=>l.colId===e);if(t===-1)return null;let o=this.columns[t],r=2,n=`${e}_copy`,i=new Set(this.columns.map(l=>l.colId));for(;i.has(n);)n=`${e}_copy_${r++}`;let s={...o,colId:n,sortOrder:null};return this.columns.splice(t+1,0,s),this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]),this.emitStatesChanged(),n}toggleColumnFrozen(e){let t=this.getColumn(e);t&&(t.draggable=t.draggable===!1,this.store.set("columns",[...this.columns]),this.emitStatesChanged())}toggleColumnLocked(e){let t=this.getColumn(e);t&&(t.locked=!t.locked,this.store.set("columns",[...this.columns]),this.emitStatesChanged())}resetColumn(e){let t=this.initialColumnDefs.get(e),o=this.getColumn(e);if(!t||!o)return;Object.assign(o,{...t});let r=this.initialColumnStates.findIndex(n=>n.colId===e);if(r>=0){let n=this.columns.filter(i=>i.colId!==e);n.splice(Math.min(r,n.length),0,o),this.columns=n}this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]),this.emitStatesChanged()}setColumnSort(e,t){for(let r of this.columns)r.sortOrder=r.colId===e?t:null;let o=this.getColumn(e);o&&this.eventBus.emit(x.COLUMN_SORTED,{colId:e,field:o.field,order:t})}clearAllSort(){for(let e of this.columns)e.sortOrder=null;this.eventBus.emit(x.COLUMN_SORTED,{colId:"",field:"",order:null})}autoSizeColumn(e,t){let o=this.getColumn(e);if(!o)return;let r=t.ownerDocument.createElement("span");r.style.cssText="position:absolute;visibility:hidden;white-space:nowrap;font-size:inherit;padding:0 12px;pointer-events:none;",t.appendChild(r),r.textContent=o.header;let n=r.offsetWidth+24,i=t.querySelectorAll(`[data-col-id="${e}"]`);for(let s of Array.from(i))r.textContent=s.textContent??"",n=Math.max(n,r.offsetWidth+24);t.removeChild(r),this.setColumnWidth(e,n,!0),this.eventBus.emit(x.COLUMN_AUTOSIZE,{colId:e,newWidth:n})}moveColumns(e,t){let o=this.getVisibleColumns(),r=new Set(e),n=e.map(a=>o.find(c=>c.colId===a)).filter(a=>!!a);if(n.length===0)return;let i=o.filter(a=>!r.has(a.colId)),s=Math.max(0,Math.min(t,i.length)),l=[...i.slice(0,s),...n,...i.slice(s)];this.columns=this.syncColumnOrder(l),this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]),this.emitStatesChanged()}sizeColumnsToFit(e){let t=this.getVisibleColumns();if(t.length===0||e<=0)return;let o=t.reduce((i,s)=>i+(s.width??150),0)||1,r=0;for(let i of t){let s=i.minWidth??40,l=i.maxWidth??1/0,a=Math.round((i.width??150)/o*e);i.width=Math.min(l,Math.max(s,a)),r+=i.width}let n=e-r;if(n!==0){let i=t[t.length-1],s=i.minWidth??40,l=i.maxWidth??1/0;i.width=Math.min(l,Math.max(s,(i.width??150)+n))}this.store.set("columns",[...this.columns]),this.emitStatesChanged()}resetColumnState(){this.initialColumnStates.length!==0&&this.applyColumnStates(this.initialColumnStates)}applyColumnStates(e){let t=new Map(e.map(o=>[o.colId,o]));for(let o of this.columns){let r=t.get(o.colId);r&&(o.width=r.width,o.visible=r.visible,o.pinned=r.pinned,o.sortOrder=r.sortOrder)}this.columns.sort((o,r)=>{let n=t.get(o.colId)?.index??9999,i=t.get(r.colId)?.index??9999;return n-i}),this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]),this.emitStatesChanged()}getColumnStates(){return this.columns.map((e,t)=>({colId:e.colId,width:e.width??150,visible:e.visible!==!1,pinned:e.pinned??null,sortOrder:e.sortOrder??null,index:t}))}rebuildPinnedSections(){let e=this.columns.filter(t=>t.visible!==!1);this.store.set("pinnedLeftColumns",e.filter(t=>t.pinned==="left")),this.store.set("pinnedRightColumns",e.filter(t=>t.pinned==="right")),this.store.set("centerColumns",e.filter(t=>!t.pinned))}syncColumnOrder(e){let t=this.columns.filter(o=>o.visible===!1);return[...e,...t]}normalizeColumn(e,t){let{children:o,...r}=e;return{width:150,minWidth:40,visible:!0,sortable:!0,filterable:!0,resizable:!0,draggable:!0,editable:!1,groupable:!1,sortOrder:null,filterActive:!1,...r,colId:e.colId??`col_${e.field}_${t}`,type:e.type??"string",header:e.header??Nr(e.field)}}emitStatesChanged(){this.eventBus.emit(x.COLUMNS_STATE_CHANGED,{states:this.getColumnStates()})}};function ht(d){return`detail_${d}`}var di=0;function Fr(){return`rn_${++di}_${Math.random().toString(36).slice(2,7)}`}var Me=class{constructor(e,t){this.store=e;this.eventBus=t;this.rawData=[];this.idField="__photon_id__";this.defaultRowHeight=50}setRowData(e,t=50){this.rawData=e,this.defaultRowHeight=t;let o=this.buildRowNodes(e);this.layoutNodes(o),this.store.set("allRows",o),this.store.set("totalRowCount",o.length),this.eventBus.emit(x.DATA_CHANGED,{oldCount:this.store.get("totalRowCount"),newCount:o.length})}appendRowData(e){let t=this.store.get("allRows"),o=this.buildRowNodes(e,t.length),r=t.length>0?t[t.length-1].top+t[t.length-1].height:0;this.layoutNodes(o,r);let n=[...t,...o];this.rawData=[...this.rawData,...e],this.store.set("allRows",n),this.store.set("totalRowCount",n.length)}updateRow(e,t){let o=this.store.get("allRows"),r=o.find(n=>n.nodeId===e);r&&(r.data={...r.data,...t},this.store.set("allRows",[...o]))}removeRows(e){let t=new Set(e),o=this.store.get("allRows").filter(r=>!t.has(r.nodeId));this.layoutNodes(o),this.store.set("allRows",o),this.store.set("totalRowCount",o.length)}getRowNode(e){return this.store.get("allRows").find(t=>t.nodeId===e)}getRowByIndex(e){return this.store.get("allRows")[e]}setVisibleRows(e){this.layoutNodes(e),this.store.set("visibleRows",e)}setRenderedRows(e){this.store.set("renderedRows",e)}setRowHeight(e,t){let o=this.store.get("visibleRows"),r=o.findIndex(n=>n.nodeId===e);if(r!==-1){o[r].height=t;for(let n=r+1;n<o.length;n++)o[n].top=o[n-1].top+o[n-1].height;this.store.set("visibleRows",[...o])}}buildGroupHeaderNode(e,t,o,r,n){return{nodeId:Fr(),rowIndex:-1,data:{[t]:o},type:"group",selected:!1,expanded:this.store.get("expandedGroupKeys").has(e),editable:!1,level:n,parent:null,children:r,groupKey:e,groupField:t,groupValue:o,childCount:r.length,height:this.defaultRowHeight,top:0}}createDetailNode(e,t,o=200){return{nodeId:ht(e.nodeId),rowIndex:-1,data:t,type:"detail",selected:!1,expanded:!1,editable:!1,level:e.level+1,parent:e,children:[],height:o,top:0,detail:t,parentNodeId:e.nodeId}}getRawData(){return this.rawData}applyTransaction(e){let t=this.store.get("allRows"),o=new Map(t.map(l=>[l.nodeId,l])),r=[];if(e.remove?.length)for(let l of e.remove){let a=o.get(l);a&&(r.push(a),o.delete(l))}let n=[];if(e.update?.length)for(let l of e.update){let a=l[this.idField],c=a!==void 0?o.get(a):void 0;c&&(c.data={...c.data,...l},n.push(c))}let i=r.length>0?t.filter(l=>o.has(l.nodeId)):t.slice(),s=[];if(e.add?.length){let l=this.buildRowNodes(e.add);s.push(...l),i=i.concat(l)}return this.layoutNodes(i),this.rawData=i.map(l=>l.data),this.store.set("allRows",i),this.store.set("totalRowCount",i.length),{add:s,update:n,remove:r}}buildRowNodes(e,t=0){return e.map((o,r)=>({nodeId:o[this.idField]??Fr(),rowIndex:t+r,data:{...o},type:"data",selected:this.store.get("selectedRowIds").has(o[this.idField]??""),expanded:!1,editable:!1,level:0,parent:null,children:[],height:this.defaultRowHeight,top:0}))}layoutNodes(e,t=0){let o=t;for(let r=0;r<e.length;r++)e[r].rowIndex=r,e[r].top=o,o+=e[r].height}};var ci=new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"});function Br(d){if(d==null||d==="")return NaN;let e=Number(d);return isNaN(e)?NaN:e}function zr(d){if(d instanceof Date)return d.getTime();if(typeof d=="string"||typeof d=="number"){let e=new Date(d);return isNaN(e.getTime())?NaN:e.getTime()}return NaN}var Mo=(d,e)=>{let t=d==null?"":String(d),o=e==null?"":String(e);return t===o?0:t===""?1:o===""?-1:ci.compare(t,o)},_o=(d,e)=>{let t=Br(d),o=Br(e);return isNaN(t)&&isNaN(o)?0:isNaN(t)?1:isNaN(o)?-1:t-o},Lo=(d,e)=>{let t=zr(d),o=zr(e);return isNaN(t)&&isNaN(o)?0:isNaN(t)?1:isNaN(o)?-1:t-o},pi=(d,e)=>(d?1:0)-(e?1:0);function Dt(d){switch(d){case"number":case"currency":case"percentage":return _o;case"date":case"time":return Lo;case"boolean":return pi;default:return Mo}}function hi(d,e){let t=e.split("."),o=d;for(let r of t){if(o==null)return;o=o[r]}return o}var _e=class{constructor(e,t){this.store=e;this.eventBus=t;this.sortConfig=[]}sort(e,t,o){this.sortConfig=[{colId:e,field:t,order:o}],this.store.set("sortConfig",[...this.sortConfig]),this.eventBus.emit(x.SORT_CHANGED,{colId:e,field:t,order:o})}multiSort(e){this.sortConfig=[...e],this.store.set("sortConfig",[...this.sortConfig]);let t=e[e.length-1];t&&this.eventBus.emit(x.SORT_CHANGED,{colId:t.colId,field:t.field,order:t.order})}clearSort(){this.sortConfig=[],this.store.set("sortConfig",[]),this.eventBus.emit(x.SORT_CHANGED,{colId:"",field:"",order:null})}clearColumnSort(e){this.sortConfig=this.sortConfig.filter(t=>t.colId!==e),this.store.set("sortConfig",[...this.sortConfig])}applySorting(e,t){if(this.sortConfig.length===0)return e;let o=new Map(t.map(h=>[h.colId,h])),r=this.sortConfig.map(({colId:h,field:u,order:m})=>{let g=o.get(h);return{field:u,nested:u.includes("."),compareFn:Dt(g?.type??"string"),direction:m==="asc"?1:-1}}),n=[],i=[];for(let h of e)h.type==="data"?n.push(h):i.push(h);let s=n.length;if(s===0)return e;let l=r.length,a=new Array(s);for(let h=0;h<s;h++){let u=n[h].data,m=new Array(l);for(let g=0;g<l;g++){let f=r[g];m[g]=f.nested?hi(u,f.field):u[f.field]}a[h]=m}let c=new Int32Array(s);for(let h=0;h<s;h++)c[h]=h;if(l===1){let{compareFn:h,direction:u}=r[0];c.sort((m,g)=>h(a[m][0],a[g][0])*u)}else c.sort((h,u)=>{let m=a[h],g=a[u];for(let f=0;f<l;f++){let C=r[f].compareFn(m[f],g[f])*r[f].direction;if(C!==0)return C}return 0});let p=new Array(s);for(let h=0;h<s;h++)p[h]=n[c[h]];return i.length===0?p:p.concat(i)}getSortConfig(){return[...this.sortConfig]}isSorted(e){return this.sortConfig.find(t=>t.colId===e)?.order??null}};function Wr(d){return d==null?"":String(d).toLowerCase().trim()}function Do(d){return Number(d)}function Ao(d){if(!d)return null;let e=new Date(d);return isNaN(e.getTime())?null:e}function le(d){return d==null||String(d).trim()===""}function Vr(d,e){let t=Wr(e),o=Wr(d.value);switch(d.operator){case"contains":return t.includes(o);case"notContains":return!t.includes(o);case"equals":return t===o;case"notEquals":return t!==o;case"startsWith":return t.startsWith(o);case"endsWith":return t.endsWith(o);case"blank":return le(e);case"notBlank":return!le(e);default:return!0}}function $r(d,e){let t=Do(e),o=Do(d.value);if(isNaN(t))return d.operator==="blank";switch(d.operator){case"equals":return t===o;case"notEquals":return t!==o;case"lessThan":return t<o;case"lessThanOrEqual":return t<=o;case"greaterThan":return t>o;case"greaterThanOrEqual":return t>=o;case"inRange":{let r=Do(d.valueTo);return t>=o&&t<=r}case"blank":return le(e);case"notBlank":return!le(e);default:return!0}}function Ur(d,e){let t=Ao(e),o=Ao(d.value);if(!t)return d.operator==="blank";if(!o&&d.operator!=="blank"&&d.operator!=="notBlank")return!0;switch(d.operator){case"equals":return t.toDateString()===o.toDateString();case"notEquals":return t.toDateString()!==o.toDateString();case"before":case"lessThan":return t<o;case"after":case"greaterThan":return t>o;case"inRange":{let r=Ao(d.valueTo);return!!r&&t>=o&&t<=r}case"blank":return le(e);case"notBlank":return!le(e);default:return!0}}function qr(d,e,t){let o=new Set(e.map(String)),r=String(t);if(Array.isArray(t)){let n=t.some(i=>o.has(String(i)));return d==="in"?n:!n}return d==="in"?o.has(r):!o.has(r)}function jr(d,e){switch(d.operator){case"equals":return!!e==!!d.value;case"notEquals":return!!e!=!!d.value;case"blank":return le(e);case"notBlank":return!le(e);default:return!0}}function Xr(d,e){let t=e.split("."),o=d;for(let r of t){if(o==null)return;o=o[r]}return o}var Le=class{constructor(e,t){this.store=e;this.eventBus=t;this.filterModel={};this.quickFilter=null}setFilterModel(e){this.filterModel={...e},this.store.set("filterModel",this.filterModel),this.store.set("filterActive",Object.keys(e).length>0),this.eventBus.emit(x.FILTER_CHANGED,{model:this.filterModel})}setColumnFilter(e,t){t===null?delete this.filterModel[e]:this.filterModel[e]=t,this.store.set("filterModel",{...this.filterModel}),this.store.set("filterActive",Object.keys(this.filterModel).length>0),this.eventBus.emit(x.COLUMN_FILTER_CHANGED,{model:this.filterModel}),this.eventBus.emit(x.FILTER_CHANGED,{model:this.filterModel})}clearColumnFilter(e){this.setColumnFilter(e,null)}clearAllFilters(){this.filterModel={},this.quickFilter=null,this.store.set("filterModel",{}),this.store.set("quickFilterConfig",null),this.store.set("filterActive",!1),this.eventBus.emit(x.FILTER_CHANGED,{model:{}}),this.eventBus.emit(x.QUICK_FILTER_CHANGED,{config:{term:""}})}setQuickFilter(e){this.quickFilter=e,this.store.set("quickFilterConfig",e),this.eventBus.emit(x.QUICK_FILTER_CHANGED,{config:e})}applyFilters(e,t){return this.hasActiveFilters()?e.filter(o=>this.matchesRow(o,t)):e}hasActiveFilters(){return Object.keys(this.filterModel).length>0||!!this.quickFilter?.term}matchesRow(e,t){if(e.type!=="data")return!0;let o=new Map(t.map(n=>[n.colId,n])),r=Object.entries(this.filterModel);return!(r.length>0&&!this.passesColumnFilters(e,r,o)||this.quickFilter?.term&&!this.passesQuickFilter(e,t))}getFilterModel(){return{...this.filterModel}}isColumnFiltered(e){return e in this.filterModel}passesColumnFilters(e,t,o){for(let[r,n]of t){let i=o.get(r);if(!i)continue;let s=Xr(e.data,n.field);if(n.selectedIds&&n.selectedIds.length>0){if(!qr("in",n.selectedIds,s))return!1;continue}if(!n.conditions||n.conditions.length===0)continue;let[l,a]=n.conditions,c=this.evaluateCondition(n.type,l,s,i);if(!a||n.logic==="and"){if(!c||a&&!this.evaluateCondition(n.type,a,s,i))return!1}else{let p=this.evaluateCondition(n.type,a,s,i);if(!c&&!p)return!1}}return!0}evaluateCondition(e,t,o,r){switch(e){case"number":case"currency":return $r(t,o);case"date":case"time":return Ur(t,o);case"boolean":return jr(t,o);default:return Vr(t,o)}}passesQuickFilter(e,t){if(!this.quickFilter)return!0;let{term:o,caseSensitive:r,fields:n}=this.quickFilter,i=r?o:o.toLowerCase(),s=n??t.map(l=>l.field);for(let l of s){let a=Xr(e.data,l);if((r?String(a??""):String(a??"").toLowerCase()).includes(i))return!0}return!1}};var De=class{constructor(e,t){this.store=e;this.eventBus=t}configure(e){let t=this.store.get("pagination");this.store.set("pagination",{...t,...e})}enable(){this.configure({enabled:!0})}disable(){this.configure({enabled:!1})}goToPage(e){let t=this.store.get("pagination"),o=this.getTotalPages(),r=Math.max(1,Math.min(e,o));r!==t.page&&(this.configure({page:r}),this.emitPageChange())}goToFirstPage(){this.goToPage(1)}goToLastPage(){this.goToPage(this.getTotalPages())}goToNextPage(){let e=this.store.get("pagination");this.goToPage(e.page+1)}goToPreviousPage(){let e=this.store.get("pagination");this.goToPage(e.page-1)}setPageSize(e){let t=this.store.get("pagination");this.configure({pageSize:e,page:1}),this.eventBus.emit(x.PAGE_SIZE_CHANGED,{page:1,pageSize:e,totalRows:t.totalRows??0,totalPages:this.getTotalPages()})}setTotalRows(e){this.configure({totalRows:e})}applyPagination(e){let t=this.store.get("pagination");if(!t.enabled||t.serverSide)return e;let o=e.filter(s=>s.type==="data"||s.type==="group").length;t.totalRows!==o&&this.configure({totalRows:o});let r=(t.page-1)*t.pageSize,n=r+t.pageSize,i=0;return e.filter(s=>s.type!=="data"&&s.type!=="group"?!0:(i++,i>r&&i<=n))}getTotalPages(){let e=this.store.get("pagination"),t=e.totalRows??0;return Math.max(1,Math.ceil(t/e.pageSize))}getCurrentPage(){return this.store.get("pagination").page}getPageSize(){return this.store.get("pagination").pageSize}getTotalRows(){return this.store.get("pagination").totalRows??0}getPageRange(){let e=this.store.get("pagination"),t=(e.page-1)*e.pageSize+1,o=Math.min(e.page*e.pageSize,e.totalRows??0);return{start:t,end:o}}isEnabled(){return this.store.get("pagination").enabled}isFirstPage(){return this.store.get("pagination").page===1}isLastPage(){return this.store.get("pagination").page>=this.getTotalPages()}emitPageChange(){let e=this.store.get("pagination");this.eventBus.emit(x.PAGE_CHANGED,{page:e.page,pageSize:e.pageSize,totalRows:e.totalRows??0,totalPages:this.getTotalPages()})}};function At(d,e){let t=e.split("."),o=d;for(let r of t){if(o==null)return;o=o[r]}return o}function Yr(d,e){if(d==null||d==="")return"_Blank";if(typeof d=="object"){let o=d;return String(o.label??o.name??o.value??o.id??JSON.stringify(d))}if(e==="is_deleted"||e==="deleted")return d?"Archived":"Active";let t=String(d);return t.charAt(0).toUpperCase()+t.slice(1)}function Po(d,e){let t=[];for(let o of d){let r=e.has(o.key),n={nodeId:`group_${o.key}`,rowIndex:-1,data:{[o.field]:o.value},type:"group",selected:!1,expanded:r,editable:!1,level:o.level,parent:null,children:[],groupKey:o.key,groupField:o.field,groupValue:o.value,childCount:Ho(o),aggregatedValues:o.aggregatedValues,height:50,top:0};t.push(n),r&&(o.children.length>0?t.push(...Po(o.children,e)):t.push(...o.rows),o.aggregatedValues&&t.push({nodeId:`group_footer_${o.key}`,rowIndex:-1,data:{[o.field]:o.value},type:"group-footer",selected:!1,expanded:!1,editable:!1,level:o.level,parent:null,children:[],groupKey:o.key,groupField:o.field,groupValue:o.value,childCount:Ho(o),aggregatedValues:o.aggregatedValues,height:50,top:0}))}return t}function Ho(d){return d.children.length===0?d.rows.length:d.children.reduce((e,t)=>e+Ho(t),0)}var Ae=class{constructor(e,t,o){this.store=e;this.eventBus=t;this.aggregationEngine=o}groupByColumns(e,t,o){if(e.length===0)return o;let n=e.map(l=>t.find(a=>a.colId===l)).filter(l=>!!l).map(l=>l.field),i=this.buildGroupTree(n,o,0);this.aggregationEngine&&this.aggregationEngine.compute(i,t);let s=this.store.get("expandedGroupKeys");return Po(i,s)}addGroupColumn(e){let t=this.store.get("groupedColumnIds");t.includes(e)||(this.store.set("groupedColumnIds",[...t,e]),this.eventBus.emit(x.COLUMN_GROUP_CHANGED,{groupedColumnIds:[...t,e]}))}removeGroupColumn(e){let t=this.store.get("groupedColumnIds");this.store.set("groupedColumnIds",t.filter(o=>o!==e)),this.eventBus.emit(x.COLUMN_GROUP_CHANGED,{groupedColumnIds:t.filter(o=>o!==e)})}reorderGroupColumns(e){this.store.set("groupedColumnIds",e),this.eventBus.emit(x.COLUMN_GROUP_CHANGED,{groupedColumnIds:e})}clearGrouping(){this.store.set("groupedColumnIds",[]),this.store.set("expandedGroupKeys",new Set),this.eventBus.emit(x.COLUMN_GROUP_CHANGED,{groupedColumnIds:[]})}expandGroup(e){let t=new Set(this.store.get("expandedGroupKeys"));t.add(e),this.store.set("expandedGroupKeys",t),this.eventBus.emit(x.GROUP_EXPANDED,{groupKey:e})}collapseGroup(e){let t=new Set(this.store.get("expandedGroupKeys"));t.delete(e),this.store.set("expandedGroupKeys",t),this.eventBus.emit(x.GROUP_COLLAPSED,{groupKey:e})}toggleGroup(e){this.store.get("expandedGroupKeys").has(e)?this.collapseGroup(e):this.expandGroup(e)}expandAllGroups(e){let t=e.filter(r=>r.type==="group"),o=new Set(t.map(r=>r.groupKey));this.store.set("expandedGroupKeys",o)}collapseAllGroups(){this.store.set("expandedGroupKeys",new Set)}isGroupExpanded(e){return this.store.get("expandedGroupKeys").has(e)}buildGroupTree(e,t,o,r=""){if(e.length===0||t.length===0)return[];let[n,...i]=e,s=new Map;for(let a of t){if(a.type!=="data")continue;let c=At(a.data,n),p=Yr(c,n),h=s.get(p)??[];h.push(a),s.set(p,h)}let l=[];for(let[a,c]of s){let p=r?`${r}||${n}::${a}`:`${n}::${a}`,h=i.length>0?this.buildGroupTree(i,c,o+1,p):[];l.push({key:p,field:n,value:a,level:o,children:h,rows:i.length===0?c:[],expanded:this.store.get("expandedGroupKeys").has(p)})}return l}};var He=class{compute(e,t){let o=t.filter(r=>(r.type==="currency"||r.type==="number")&&r.aggFunc!=null);if(o.length!==0)for(let r of e)this.walkGroup(r,o)}walkGroup(e,t){let o;if(e.children.length>0){let r=e.children.map(n=>this.walkGroup(n,t));o=this.mergeAccumulators(r,t)}else o=this.buildAccumulatorsFromRows(e.rows,t);return e.aggregatedValues=this.deriveDisplayValues(o,t),o}buildAccumulatorsFromRows(e,t){let o={};for(let r of t){let n={sum:0,count:0,min:1/0,max:-1/0};for(let i of e){let s=At(i.data,r.field),l=typeof s=="number"?s:parseFloat(String(s??""));isFinite(l)&&(n.sum+=l,n.count++,l<n.min&&(n.min=l),l>n.max&&(n.max=l))}o[r.field]=n}return o}mergeAccumulators(e,t){let o={};for(let r of t){let n={sum:0,count:0,min:1/0,max:-1/0};for(let i of e){let s=i[r.field];!s||s.count===0||(n.sum+=s.sum,n.count+=s.count,s.min<n.min&&(n.min=s.min),s.max>n.max&&(n.max=s.max))}o[r.field]=n}return o}deriveDisplayValues(e,t){let o={};for(let r of t){let n=e[r.field];if(!n||n.count===0){o[r.field]=null;continue}switch(r.aggFunc){case"sum":o[r.field]=n.sum;break;case"avg":o[r.field]=n.sum/n.count;break;case"min":o[r.field]=isFinite(n.min)?n.min:null;break;case"max":o[r.field]=isFinite(n.max)?n.max:null;break;case"count":o[r.field]=n.count;break}}return o}};var Pe=class{constructor(e,t){this.store=e;this.eventBus=t;this.config={mode:"multiple",checkboxSelection:!0,selectAllOnHeaderClick:!0,headerCheckbox:!0,suppressRowDeselection:!1}}configure(e){this.config={...this.config,...e}}selectRow(e,t){if(this.config.mode==="none")return;let o=new Set(this.store.get("selectedRowIds"));this.config.mode==="single"&&o.clear(),o.add(e),this.applySelectionToRows(t,o),this.store.set("selectedRowIds",o),this.updateSelectionState(t,o);let r=t.filter(n=>o.has(n.nodeId));this.eventBus.emit(x.ROW_SELECTED,{rows:r,selectedCount:o.size,isAllSelected:this.isAllSelected(t,o)})}deselectRow(e,t){if(this.config.suppressRowDeselection)return;let o=new Set(this.store.get("selectedRowIds"));o.delete(e),this.applySelectionToRows(t,o),this.store.set("selectedRowIds",o),this.updateSelectionState(t,o);let r=t.filter(n=>o.has(n.nodeId));this.eventBus.emit(x.ROW_DESELECTED,{rows:r,selectedCount:o.size,isAllSelected:!1})}toggleRowSelection(e,t){this.store.get("selectedRowIds").has(e)?this.deselectRow(e,t):this.selectRow(e,t)}selectRows(e,t){if(this.config.mode==="none")return;let o=this.config.mode==="single"?new Set([e[e.length-1]]):new Set([...this.store.get("selectedRowIds"),...e]);this.applySelectionToRows(t,o),this.store.set("selectedRowIds",o),this.updateSelectionState(t,o);let r=t.filter(n=>o.has(n.nodeId));this.eventBus.emit(x.ROW_SELECTED,{rows:r,selectedCount:o.size,isAllSelected:this.isAllSelected(t,o)})}deselectRows(e,t){if(this.config.suppressRowDeselection)return;let o=new Set(this.store.get("selectedRowIds"));for(let n of e)o.delete(n);this.applySelectionToRows(t,o),this.store.set("selectedRowIds",o),this.updateSelectionState(t,o);let r=t.filter(n=>o.has(n.nodeId));this.eventBus.emit(x.ROW_DESELECTED,{rows:r,selectedCount:o.size,isAllSelected:!1})}selectAll(e){if(this.config.mode!=="multiple")return;let t=e.filter(r=>r.type==="data"),o=new Set(t.map(r=>r.nodeId));this.applySelectionToRows(e,o),this.store.set("selectedRowIds",o),this.store.set("isAllSelected",!0),this.store.set("isIndeterminate",!1),this.eventBus.emit(x.ALL_ROWS_SELECTED,{rows:t,selectedCount:o.size,isAllSelected:!0})}deselectAll(e){let t=new Set;this.applySelectionToRows(e,t),this.store.set("selectedRowIds",t),this.store.set("isAllSelected",!1),this.store.set("isIndeterminate",!1),this.eventBus.emit(x.ALL_ROWS_DESELECTED,{rows:[],selectedCount:0,isAllSelected:!1})}selectRange(e,t,o){if(this.config.mode!=="multiple")return;let r=Math.min(e,t),n=Math.max(e,t),i=o.filter(s=>s.type==="data"&&s.rowIndex>=r&&s.rowIndex<=n).map(s=>s.nodeId);this.selectRows(i,o)}isRowSelected(e){return this.store.get("selectedRowIds").has(e)}getSelectedRows(e){let t=this.store.get("selectedRowIds");return e.filter(o=>t.has(o.nodeId))}getSelectedCount(){return this.store.get("selectedRowIds").size}clearSelection(e){this.deselectAll(e)}isAllSelected(e,t){let o=e.filter(r=>r.type==="data");return o.length>0&&o.every(r=>t.has(r.nodeId))}updateSelectionState(e,t){let o=e.filter(i=>i.type==="data"),r=o.length>0&&o.every(i=>t.has(i.nodeId)),n=!r&&o.some(i=>t.has(i.nodeId));this.store.set("isAllSelected",r),this.store.set("isIndeterminate",n)}applySelectionToRows(e,t){for(let o of e)o.selected=t.has(o.nodeId)}};var Ge=class{constructor(e,t){this.store=e;this.eventBus=t;this.activeSession=null;this.config={mode:"cell",singleClickEdit:!1,stopEditingWhenCellsLoseFocus:!0};this.tabHandler=null}setTabHandler(e){this.tabHandler=e}configure(e){this.config={...this.config,...e}}startEditing(e,t,o){if(this.config.mode==="none"||!t.editable||t.locked)return!1;this.activeSession&&this.stopEditing(!0);let r=e.data[t.field];return this.activeSession={rowNode:e,colDef:t,originalValue:r,currentValue:r,editorEl:null,cellEl:o},this.store.set("editingCellId",`${e.nodeId}__${t.colId}`),o.classList.add("pg-cell--editing"),this.eventBus.emit(x.CELL_EDIT_START,{row:e,colDef:t,oldValue:r,newValue:r,rowIndex:e.rowIndex}),this.eventBus.emit(x.ROW_EDIT_START,{row:e,field:t.field,oldValue:r,newValue:r}),!0}updateValue(e){this.activeSession&&(this.activeSession.currentValue=e)}stopEditing(e=!1){if(!this.activeSession)return;let{rowNode:t,colDef:o,originalValue:r,currentValue:n,cellEl:i}=this.activeSession;if(i?.classList.remove("pg-cell--editing"),this.store.set("editingCellId",null),!e){let s=Mt(n,o),l=_t(s,o);if(l){this.eventBus.emit(x.CELL_EDIT_STOP,{row:t,field:o.field,oldValue:r,newValue:s,error:l}),this.activeSession=null;return}s!==r&&(t.data={...t.data,[o.field]:s},this.eventBus.emit(x.CELL_VALUE_CHANGED,{row:t,colDef:o,oldValue:r,newValue:s,rowIndex:t.rowIndex}),i&&setTimeout(()=>{i.classList.remove("pg-cell--fill-flash"),i.offsetWidth,i.classList.add("pg-cell--fill-flash"),setTimeout(()=>i.classList.remove("pg-cell--fill-flash"),700)},0))}this.eventBus.emit(x.CELL_EDIT_STOP,{row:t,field:o.field,oldValue:r,newValue:e?r:n}),this.activeSession=null}isEditing(){return this.activeSession!==null}getActiveSession(){return this.activeSession}isCellEditing(e,t){return this.store.get("editingCellId")===`${e}__${t}`}buildNativeEditor(e,t,o){if(e.type==="array")return this.buildMultiSelectEditor(e,t,o);let r;switch(e.type){case"boolean":{let n=document.createElement("input");n.type="checkbox",n.checked=!!t,n.className="pg-editor pg-editor--checkbox",n.addEventListener("change",()=>this.updateValue(n.checked)),r=n;break}case"dropdown":case"object":{let n=document.createElement("select");n.className="pg-editor pg-editor--select";let i=this.resolveObjectKey(t,e);for(let s of e.dropdownOptions??[]){let l=document.createElement("option");l.value=String(s.value),l.textContent=s.label,l.selected=String(s.value)===String(i??""),n.appendChild(l)}n.addEventListener("change",()=>{if(e.type==="object"){let s=e.dropdownOptions?.find(l=>String(l.value)===n.value);this.updateValue(s??n.value)}else this.updateValue(n.value)}),r=n;break}case"number":case"currency":case"percentage":{let n=document.createElement("input");n.type="number",n.value=String(t??""),n.className="pg-editor pg-editor--number",e.min!==void 0&&e.min!==null&&(n.min=String(e.min)),e.max!==void 0&&e.max!==null&&(n.max=String(e.max)),n.addEventListener("input",()=>this.updateValue(n.value)),r=n;break}case"date":{let n=document.createElement("input");n.type="date",n.value=t?new Date(t).toISOString().split("T")[0]:"",n.className="pg-editor pg-editor--date",n.addEventListener("change",()=>this.updateValue(n.value)),r=n;break}case"time":{let n=document.createElement("input");n.type="time",n.value=String(t??""),n.className="pg-editor pg-editor--time",n.addEventListener("change",()=>this.updateValue(n.value)),r=n;break}default:{let n=document.createElement("input");n.type=e.type==="email"?"email":"text",n.value=String(t??""),n.className="pg-editor pg-editor--text",n.addEventListener("input",()=>this.updateValue(n.value)),r=n}}return this.config.stopEditingWhenCellsLoseFocus&&r.addEventListener("blur",()=>this.stopEditing(!1)),r.addEventListener("keydown",n=>{let i=n;i.stopPropagation(),i.key==="Enter"?(i.preventDefault(),this.stopEditing(!1)):i.key==="Escape"?(i.preventDefault(),this.stopEditing(!0)):i.key==="Tab"&&(i.preventDefault(),this.stopEditing(!1),this.tabHandler?.(i.shiftKey))}),o.appendChild(r),this.activeSession&&(this.activeSession.editorEl=r),setTimeout(()=>r.focus?.(),0),r}buildMultiSelectEditor(e,t,o){let r=new Set(Array.isArray(t)?t.map(String):[]),n=e.dropdownOptions??[],i=document.createElement("div");i.className="pg-editor pg-editor--multiselect",i.setAttribute("tabindex","-1");let s=document.createElement("div");s.className="pg-editor__ms-trigger";let l=document.createElement("span");l.className="pg-editor__ms-text";let a=document.createElement("span");a.className="pg-editor__ms-arrow",s.appendChild(l),s.appendChild(a);let c=document.createElement("div");c.className="pg-editor__ms-panel";let p=()=>{let u=n.filter(m=>r.has(String(m.value))).map(m=>m.label);l.textContent=u.length>0?u.join(", "):"\u2014"};for(let u of n){let m=document.createElement("label");m.className="pg-editor__ms-option";let g=document.createElement("input");g.type="checkbox",g.className="pg-editor__ms-check",g.value=String(u.value),g.checked=r.has(String(u.value)),g.addEventListener("change",()=>{g.checked?r.add(g.value):r.delete(g.value),p(),this.updateValue([...r])});let f=document.createElement("span");f.className="pg-editor__ms-label",f.textContent=u.label,m.appendChild(g),m.appendChild(f),c.appendChild(m)}p(),s.addEventListener("mousedown",u=>{u.preventDefault(),c.classList.toggle("pg-editor__ms-panel--open")}),i.appendChild(s),i.appendChild(c),o.appendChild(i),setTimeout(()=>{i.focus(),c.classList.add("pg-editor__ms-panel--open")},0);let h=null;return i.addEventListener("focusout",()=>{h=setTimeout(()=>{i.contains(document.activeElement)||this.stopEditing(!1)},150)}),i.addEventListener("focusin",()=>{h!==null&&(clearTimeout(h),h=null)}),i.addEventListener("keydown",u=>{u.stopPropagation(),u.key==="Enter"?(u.preventDefault(),this.stopEditing(!1)):u.key==="Escape"?(u.preventDefault(),this.stopEditing(!0)):u.key==="Tab"&&(u.preventDefault(),this.stopEditing(!1),this.tabHandler?.(u.shiftKey))}),this.activeSession&&(this.activeSession.editorEl=i),i}resolveObjectKey(e,t){if(typeof e=="object"&&e!==null){let o=t.objectValueKey??"value";return e[o]}return e}getConfig(){return this.config}};var Ne=class{compute(e,t){let o=e.filter(n=>n.type==="data"),r={};for(let n of t){if(!n.showSummary)continue;let i=n.summaryAggregation??"sum",s=o.map(c=>this.resolveValue(c.data,n.field)).filter(c=>typeof c=="number"&&!isNaN(c)),l=null,a=n.summaryLabel??"";switch(i){case"sum":l=s.reduce((c,p)=>c+p,0),a=a||"Sum";break;case"avg":l=s.length>0?s.reduce((c,p)=>c+p,0)/s.length:null,a=a||"Avg";break;case"min":l=s.length>0?Math.min(...s):null,a=a||"Min";break;case"max":l=s.length>0?Math.max(...s):null,a=a||"Max";break;case"count":l=o.length,a=a||"Count";break;case"none":l=null;break}r[n.colId]={value:l,label:a,aggregation:i,formatted:this.formatSummaryValue(l,n,i)}}return r}formatSummaryValue(e,t,o){if(e==null)return"";if(o==="count")return String(e);let r=Number(e);return isNaN(r)?String(e):t.isCurrency?r.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):r.toLocaleString("en-US",{maximumFractionDigits:2})}resolveValue(e,t){let o=t.split("."),r=e;for(let n of o){if(r==null)return;r=r[n]}return r}};var Oe=class{constructor(e){this.eventBus=e}exportToCsv(e,t,o={}){let r=(o.fileName??"export")+".csv",n=this.getExportColumns(t,o),i=e.filter(c=>c.type==="data");this.eventBus.emit(x.EXPORT_START,{format:"csv",fileName:r,rowCount:i.length});let s=n.map(c=>this.escapeCsvCell(c.header)).join(","),l=i.map(c=>n.map(p=>{let h=this.resolveValue(c.data,p.field),u=o.processCellValue?o.processCellValue({value:h,colDef:p}):Q(h,p);return this.escapeCsvCell(u)}).join(",")),a=[s,...l].join(`\r
4496
- `);this.downloadFile(a,r,"text/csv;charset=utf-8;"),this.eventBus.emit(x.EXPORT_COMPLETE,{format:"csv",fileName:r,rowCount:i.length})}exportToXlsx(e,t,o={}){let r=(o.fileName??"export")+".xlsx",n=this.getExportColumns(t,o),i=e.filter(c=>c.type==="data");this.eventBus.emit(x.EXPORT_START,{format:"xlsx",fileName:r,rowCount:i.length});let s=[],l=n.map(c=>`<Cell><Data ss:Type="String">${this.escapeXml(c.header)}</Data></Cell>`).join("");s.push(`<Row>${l}</Row>`);for(let c of i){let p=n.map(h=>{let u=this.resolveValue(c.data,h.field),m=o.processCellValue?o.processCellValue({value:u,colDef:h}):Q(u,h);return`<Cell><Data ss:Type="${h.type==="number"||h.type==="currency"?"Number":"String"}">${this.escapeXml(m)}</Data></Cell>`});s.push(`<Row>${p.join("")}</Row>`)}let a=`<?xml version="1.0"?>
4262
+ `;var Mo="photon-grid-base-styles",ai=[cr,pr,hr,ur,gr,mr,fr,vr,br,yr,Cr,xr,wr,Er,Rr,Sr,Ir,Tr,Mr,kr,_r,Lr,Dr,Ar,Hr,Pr,Gr].join(""),di=[ai,sr,lr,ar,dr].join(`
4263
+ `);function Mt(){if(document.getElementById(Mo))return;let d=document.createElement("style");d.id=Mo,d.textContent=di,document.head.appendChild(d)}function Nr(){document.getElementById(Mo)?.remove()}function kt(d,e){if(d==null||d==="")return e.required,null;switch(e.type){case"number":case"currency":{let t=Number(d);return isNaN(t)?null:t}case"boolean":return typeof d=="boolean"?d:typeof d=="string"?d.toLowerCase()==="true"||d==="1":!!d;case"date":case"time":{let t=new Date(d);return isNaN(t.getTime())?null:t.toISOString()}case"array":return Array.isArray(d)?d:[d];default:return String(d)}}function Q(d,e,t){if(d==null)return"";switch(e.type){case"number":{let o=Number(d);if(isNaN(o))return String(d);let r=t?.locale??"en-US";return o.toLocaleString(r,{minimumFractionDigits:0,maximumFractionDigits:2})}case"currency":{let o=Number(d);return isNaN(o)?String(d):`${t?.currencySymbol??"$"}${o.toLocaleString(t?.locale??"en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}`}case"date":{let o=new Date(d);return isNaN(o.getTime())?String(d):ci(o,t?.dateFormat??"dd/MM/yyyy",t?.timeZone)}case"time":{let o=new Date(d);return isNaN(o.getTime())?String(d):o.toLocaleTimeString(t?.locale??"en-US",{hour:"2-digit",minute:"2-digit",timeZone:t?.timeZone})}case"boolean":return d?"Yes":"No";case"array":return Array.isArray(d)?d.join(", "):String(d);case"dropdown":{let o=e.dropdownOptions?.find(r=>String(r.value)===String(d));return o?o.label:String(d)}default:{let o=String(d);return o.charAt(0).toUpperCase()+o.slice(1)}}}function _t(d,e){if(e.required&&(d==null||d===""))return`${e.header} is required`;if(e.type==="number"||e.type==="currency"){let t=Number(d);if(d!=null&&d!==""&&isNaN(t))return`${e.header} must be a number`;if(!isNaN(t)){if(e.min!==void 0&&e.min!==null&&t<e.min)return`${e.header} must be at least ${e.min}`;if(e.max!==void 0&&e.max!==null&&t>e.max)return`${e.header} must be at most ${e.max}`}}return e.type==="email"&&d&&!/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(String(d))?`${e.header} must be a valid email address`:e.validatorFn?e.validatorFn(d):null}function ci(d,e,t){let o={};t&&(o.timeZone=t);let r=i=>String(i).padStart(2,"0"),n=new Date(d.toLocaleString("en-US",o));return e.replace("yyyy",String(n.getFullYear())).replace("MM",r(n.getMonth()+1)).replace("dd",r(n.getDate())).replace("HH",r(n.getHours())).replace("mm",r(n.getMinutes())).replace("ss",r(n.getSeconds()))}function $(d,e){return d.renderer?.[e]}var Lt=class d{constructor(e,t,o,r,n){this.container=e;this.cellEl=t;this.options=o;this.currentValue=r;this.callbacks=n;this.instanceId=++d.instanceCounter;this.destroyed=!1;this.handleKeyDown=e=>{switch(e.key){case"ArrowDown":e.preventDefault(),this.navigate(1);break;case"ArrowUp":e.preventDefault(),this.navigate(-1);break;case"PageDown":e.preventDefault(),this.navigate(d.MAX_VISIBLE);break;case"PageUp":e.preventDefault(),this.navigate(-d.MAX_VISIBLE);break;case"Home":e.preventDefault(),this.setHighlight(0),this.scrollToIndex(0,"start");break;case"End":e.preventDefault(),this.setHighlight(this.options.length-1),this.scrollToIndex(this.options.length-1,"end");break;case"Enter":e.preventDefault(),this.selectIndex(this.highlightedIndex);break;case"Escape":e.preventDefault(),this.callbacks.onStop(!1);break;case"Tab":e.preventDefault(),this.callbacks.onStop(!0),this.callbacks.onTab?.(e.shiftKey);break}e.stopPropagation()};this.handleScroll=()=>{this.renderVisibleItems(this.scrollEl.scrollTop)};this.handleOutsideClick=e=>{let t=e.target;this.panelEl.contains(t)||this.cellEl.contains(t)||this.callbacks.onStop(!1)};this.handleResize=()=>{this.positionPanel()};this.handleBodyScroll=e=>{if(this.destroyed)return;let t=e.target;this.panelEl&&this.panelEl.contains(t)||this.callbacks.onStop(!1)};this.selectedIndex=this.options.findIndex(i=>String(i.value)===String(r??"")),this.highlightedIndex=this.selectedIndex>=0?this.selectedIndex:0,this.mount()}static{this.ITEM_HEIGHT=34}static{this.MAX_VISIBLE=8}static{this.SCROLL_BUFFER=3}static{this.instanceCounter=0}destroy(){this.destroyed||(this.destroyed=!0,this.scrollEl?.removeEventListener("keydown",this.handleKeyDown),this.scrollEl?.removeEventListener("scroll",this.handleScroll),document.removeEventListener("mousedown",this.handleOutsideClick),window.removeEventListener("resize",this.handleResize),document.removeEventListener("scroll",this.handleBodyScroll,!0),this.panelEl?.remove())}mount(){this.buildTrigger(),this.buildPanel(),this.positionPanel(),document.body.appendChild(this.panelEl),requestAnimationFrame(()=>{this.destroyed||this.panelEl.classList.add("pg-dropdown-editor__panel--visible")}),setTimeout(()=>{this.destroyed||(this.scrollEl.focus(),this.scrollToIndex(this.highlightedIndex,"center"))},0),setTimeout(()=>{this.destroyed||document.addEventListener("mousedown",this.handleOutsideClick)},0),window.addEventListener("resize",this.handleResize,{passive:!0}),document.addEventListener("scroll",this.handleBodyScroll,{passive:!0,capture:!0})}buildTrigger(){this.triggerEl=document.createElement("div"),this.triggerEl.className="pg-dropdown-editor__trigger",this.triggerEl.setAttribute("aria-haspopup","listbox"),this.triggerEl.setAttribute("aria-expanded","true"),this.syncTrigger(this.options[this.selectedIndex]),this.container.innerHTML="",this.container.appendChild(this.triggerEl)}syncTrigger(e){this.triggerEl.innerHTML="";let t=this.buildIcon(e,"pg-dropdown-editor__opt-icon");t&&this.triggerEl.appendChild(t);let o=document.createElement("span");o.className="pg-dropdown-editor__trigger-label",o.textContent=e?.label??"\u2014",this.triggerEl.appendChild(o);let r=document.createElement("span");r.className="pg-dropdown-editor__arrow",r.setAttribute("aria-hidden","true"),this.triggerEl.appendChild(r)}buildPanel(){this.panelEl=document.createElement("div"),this.panelEl.className="pg-dropdown-editor__panel";let t=Math.min(Math.max(this.options.length,1),d.MAX_VISIBLE)*d.ITEM_HEIGHT;if(this.scrollEl=document.createElement("div"),this.scrollEl.className="pg-dropdown-editor__scroll",this.scrollEl.setAttribute("role","listbox"),this.scrollEl.setAttribute("tabindex","0"),this.scrollEl.setAttribute("aria-label","Select an option"),this.scrollEl.style.height=`${t}px`,this.scrollEl.addEventListener("keydown",this.handleKeyDown),this.scrollEl.addEventListener("scroll",this.handleScroll,{passive:!0}),this.options.length===0){let o=document.createElement("div");o.className="pg-dropdown-editor__empty",o.textContent="No options available",this.scrollEl.appendChild(o)}else{let o=document.createElement("div");o.className="pg-dropdown-editor__spacer",o.style.height=`${this.options.length*d.ITEM_HEIGHT}px`,this.itemsEl=document.createElement("div"),this.itemsEl.className="pg-dropdown-editor__items",o.appendChild(this.itemsEl),this.scrollEl.appendChild(o),this.renderVisibleItems(0)}this.panelEl.appendChild(this.scrollEl)}renderVisibleItems(e){if(!this.itemsEl)return;let t=d.ITEM_HEIGHT,o=d.SCROLL_BUFFER,r=d.MAX_VISIBLE,n=this.options.length,i=Math.max(0,Math.floor(e/t)-o),s=Math.min(n,i+r+o*2);this.itemsEl.innerHTML="",this.itemsEl.style.transform=`translateY(${i*t}px)`;for(let l=i;l<s;l++){let a=this.options[l],c=l===this.selectedIndex,p=l===this.highlightedIndex,h=document.createElement("div");if(h.className="pg-dropdown-editor__option",h.id=this.optId(l),h.setAttribute("role","option"),h.setAttribute("aria-selected",String(c)),h.setAttribute("data-index",String(l)),c&&h.classList.add("pg-dropdown-editor__option--selected"),p&&h.classList.add("pg-dropdown-editor__option--highlighted"),this.callbacks.renderOption){let u=this.callbacks.renderOption(a,l,c,p);typeof u=="string"?h.innerHTML=u:h.appendChild(u)}else{let u=this.buildIcon(a,"pg-dropdown-editor__opt-icon");u&&h.appendChild(u);let g=document.createElement("span");if(g.className="pg-dropdown-editor__opt-label",g.textContent=a.label,h.appendChild(g),c){let m=document.createElement("span");m.className="pg-dropdown-editor__opt-check",m.setAttribute("aria-hidden","true"),h.appendChild(m)}}h.addEventListener("mousedown",u=>{u.preventDefault(),this.selectIndex(l)}),h.addEventListener("mouseenter",()=>this.setHighlight(l)),this.itemsEl.appendChild(h)}this.scrollEl.setAttribute("aria-activedescendant",this.optId(this.highlightedIndex))}positionPanel(){let e=this.cellEl.getBoundingClientRect(),t=d.ITEM_HEIGHT,r=Math.min(Math.max(this.options.length,1),d.MAX_VISIBLE)*t,n=e.width,i=4,s=e.bottom+i,l=!1;window.innerHeight-e.bottom<r+i&&e.top>r+i&&(s=e.top-r-i,l=!0);let a=Math.max(i,Math.min(e.left,window.innerWidth-n-i));this.panelEl.style.top=`${Math.max(i,s)}px`,this.panelEl.style.left=`${a}px`,this.panelEl.style.width=`${n}px`,this.panelEl.classList.toggle("pg-dropdown-editor__panel--above",l)}navigate(e){let t=Math.max(0,Math.min(this.options.length-1,this.highlightedIndex+e));this.setHighlight(t),this.scrollToIndex(t,e>0?"end":"start")}setHighlight(e){if(this.highlightedIndex===e)return;this.itemsEl?.querySelector(`[data-index="${this.highlightedIndex}"]`)?.classList.remove("pg-dropdown-editor__option--highlighted"),this.highlightedIndex=e,this.itemsEl?.querySelector(`[data-index="${e}"]`)?.classList.add("pg-dropdown-editor__option--highlighted"),this.scrollEl?.setAttribute("aria-activedescendant",this.optId(e))}scrollToIndex(e,t){let o=d.ITEM_HEIGHT,r=e*o,n=r+o,i=this.scrollEl.scrollTop,s=this.scrollEl.clientHeight;t==="center"?this.scrollEl.scrollTop=Math.max(0,r-s/2+o/2):r<i?this.scrollEl.scrollTop=r:n>i+s&&(this.scrollEl.scrollTop=n-s)}selectIndex(e){e<0||e>=this.options.length||(this.callbacks.onSelect(this.options[e]),this.callbacks.onStop(!0))}buildIcon(e,t){if(!e?.image&&!e?.icon)return null;let o=document.createElement("span");if(o.className=t,e.image){let r=document.createElement("img");r.src=e.image,r.alt="",r.width=20,r.height=20,o.appendChild(r)}else e.icon&&(o.innerHTML=e.icon);return o}optId(e){return`pg-dd-${this.instanceId}-${e}`}};var Ie=class{constructor(){this.subscriptions=new Map;this.nextId=1;this.paused=!1;this.pendingQueue=[]}on(e,t,o=0){let r={id:this.nextId++,type:e,handler:t,once:!1,priority:o};return this.addSubscription(r),()=>this.removeSubscription(e,r.id)}once(e,t){let o={id:this.nextId++,type:e,handler:t,once:!0,priority:0};return this.addSubscription(o),()=>this.removeSubscription(e,o.id)}off(e,t){let o=this.subscriptions.get(e);if(!o)return;let r=o.findIndex(n=>n.handler===t);r!==-1&&o.splice(r,1)}emit(e,t){if(this.paused){this.pendingQueue.push({type:e,payload:t});return}this.dispatch(e,t)}emitAsync(e,t){return Promise.resolve().then(()=>this.emit(e,t))}pause(){this.paused=!0}resume(){this.paused=!1;let e=this.pendingQueue.splice(0);for(let{type:t,payload:o}of e)this.dispatch(t,o)}clear(e){e?this.subscriptions.delete(e):this.subscriptions.clear()}hasListeners(e){let t=this.subscriptions.get(e);return!!t&&t.length>0}addSubscription(e){let t=this.subscriptions.get(e.type);t||(t=[],this.subscriptions.set(e.type,t)),t.push(e),t.sort((o,r)=>r.priority-o.priority)}removeSubscription(e,t){let o=this.subscriptions.get(e);if(!o)return;let r=o.findIndex(n=>n.id===t);r!==-1&&o.splice(r,1)}dispatch(e,t){let o=this.subscriptions.get(e);if(!o||o.length===0)return;let r=[];for(let n of[...o]){try{n.handler(t)}catch(i){console.error(`[PhotonGrid] EventBus handler error for "${e}":`,i)}n.once&&r.push(n.id)}for(let n of r)this.removeSubscription(e,n)}};var Te=class{constructor(e){this.eventBus=e;this.subscribers=new Map;this.state=this.createInitialState()}get(e){return this.state[e]}set(e,t){let o=this.state[e];o!==t&&(this.state[e]=t,this.notifySubscribers(e,t,o))}update(e,t){this.set(e,t(this.state[e]))}batch(e){this.eventBus.pause();for(let[t,o]of Object.entries(e))this.set(t,o);this.eventBus.resume()}watch(e,t){let o=this.subscribers.get(e);return o||(o=new Set,this.subscribers.set(e,o)),o.add(t),()=>{this.subscribers.get(e)?.delete(t)}}snapshot(){return Object.freeze({...this.state})}notifySubscribers(e,t,o){let r=this.subscribers.get(e);if(r)for(let n of r)try{n(t,o)}catch(i){console.error(`[PhotonGrid] GridStore subscriber error for "${String(e)}":`,i)}}createInitialState(){return{allRows:[],visibleRows:[],renderedRows:[],totalRowCount:0,columns:[],columnStates:new Map,pinnedLeftColumns:[],pinnedRightColumns:[],centerColumns:[],sortConfig:[],filterModel:{},quickFilterConfig:null,filterActive:!1,pagination:{enabled:!1,page:1,pageSize:50,pageSizeOptions:[10,25,50,100,200],serverSide:!1,totalRows:0},groupedColumnIds:[],expandedGroupKeys:new Set,expandedRowIds:new Set,expandedTreeNodeIds:new Set,selectedRowIds:new Set,activeRowId:null,isAllSelected:!1,isIndeterminate:!1,cellRanges:[],activeCell:null,loading:!1,error:null,scrollTop:0,scrollLeft:0,viewportHeight:0,viewportWidth:0,firstRenderedRowIndex:0,lastRenderedRowIndex:0,fullScreen:!1,editingCellId:null}}destroy(){this.subscribers.clear()}};var x={READY:"grid:ready",DESTROYED:"grid:destroyed",DATA_CHANGED:"grid:dataChanged",ROWS_RENDERED:"grid:rowsRendered",SCROLL:"grid:scroll",ROW_CLICKED:"row:clicked",ROW_DOUBLE_CLICKED:"row:doubleClicked",ROW_SELECTED:"row:selected",ROW_DESELECTED:"row:deselected",ALL_ROWS_SELECTED:"row:allSelected",ALL_ROWS_DESELECTED:"row:allDeselected",ROW_EXPANDED:"row:expanded",ROW_COLLAPSED:"row:collapsed",ROW_GROUP_OPENED:"row:groupOpened",ROW_DROP:"row:drop",ROW_EDIT_START:"row:editStart",ROW_EDIT_STOP:"row:editStop",CELL_CLICKED:"cell:clicked",CELL_DOUBLE_CLICKED:"cell:doubleClicked",CELL_VALUE_CHANGED:"cell:valueChanged",CELL_EDIT_START:"cell:editStart",CELL_EDIT_STOP:"cell:editStop",CELL_SELECTION_CHANGED:"cell:selectionChanged",COLUMN_RESIZED:"column:resized",COLUMN_MOVED:"column:moved",COLUMN_PINNED:"column:pinned",COLUMN_VISIBLE:"column:visible",COLUMN_SORTED:"column:sorted",COLUMN_FILTER_CHANGED:"column:filterChanged",COLUMNS_STATE_CHANGED:"column:stateChanged",COLUMN_AUTOSIZE:"column:autoSize",COLUMN_GROUP_CHANGED:"column:groupChanged",SORT_CHANGED:"sort:changed",FILTER_CHANGED:"filter:changed",QUICK_FILTER_CHANGED:"filter:quickChanged",PAGE_CHANGED:"pagination:pageChanged",PAGE_SIZE_CHANGED:"pagination:pageSizeChanged",GROUP_EXPANDED:"group:expanded",GROUP_COLLAPSED:"group:collapsed",THEME_CHANGED:"theme:changed",EXPORT_START:"export:start",EXPORT_COMPLETE:"export:complete",EXPORT_ERROR:"export:error",DRAG_STARTED:"drag:started",DRAG_OVER:"drag:over",DRAG_STOPPED:"drag:stopped",CHART_CREATED:"chart:created",CHART_DESTROYED:"chart:destroyed",CHART_RANGE_SELECTION_CHANGED:"chart:rangeSelectionChanged",CHART_OPTIONS_CHANGED:"chart:optionsChanged",LOADING_STARTED:"loading:started",LOADING_STOPPED:"loading:stopped",CELL_CONTEXT_MENU:"cell:contextMenu",COLUMN_GROUP_HEADER_COLLAPSED:"columnGroup:collapsed",COLUMN_GROUP_HEADER_EXPANDED:"columnGroup:expanded",COLUMN_GROUP_HEADER_CREATED:"columnGroup:created",COLUMN_GROUP_HEADER_REMOVED:"columnGroup:removed",ROW_DETAIL_TOGGLE_CLICKED:"row:detailToggleClicked",ROW_DETAIL_OPENED:"row:detailOpened",ROW_DETAIL_CLOSED:"row:detailClosed",ROW_DETAIL_HEIGHT_CHANGED:"row:detailHeightChanged",TREE_NODE_TOGGLE_CLICKED:"tree:nodeToggleClicked",TREE_NODE_EXPANDED:"tree:nodeExpanded",TREE_NODE_COLLAPSED:"tree:nodeCollapsed",TREE_CHILDREN_LOADED:"tree:childrenLoaded"};function Or(d){return d.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[._-]+/g," ").replace(/\s+/g," ").trim().split(" ").map(e=>e&&e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function Fr(d){let e=0,t=o=>o.map(r=>{let n=r.colId??`col_${r.field}_${e++}`;return{...r,colId:n,header:r.header??Or(r.field),type:r.type??"string",children:r.children?t(r.children):void 0}});return t(d)}var Me=class{constructor(e,t){this.store=e;this.eventBus=t;this.columns=[];this.initialColumnStates=[];this.initialColumnDefs=new Map}initColumns(e){this.columns=e.map((t,o)=>this.normalizeColumn(t,o)),this.rebuildPinnedSections(),this.store.set("columns",this.columns),this.initialColumnStates=this.getColumnStates(),this.initialColumnDefs=new Map(this.columns.map(t=>[t.colId,{...t}])),this.emitStatesChanged()}getColumn(e){return this.columns.find(t=>t.colId===e)}getAllColumns(){return this.columns}getVisibleColumns(){return this.columns.filter(e=>e.visible!==!1)}setColumnWidth(e,t,o=!1){let r=this.getColumn(e);if(!r)return;let n=r.minWidth??40,i=r.maxWidth??1/0;r.width=Math.min(i,Math.max(n,t)),this.store.set("columns",[...this.columns]),this.eventBus.emit(x.COLUMN_RESIZED,{colDef:r,newWidth:r.width,finished:o}),o&&this.emitStatesChanged()}setColumnWidths(e){let t=!1;for(let[o,r]of e){let n=this.getColumn(o);if(!n)continue;let i=n.minWidth??40,s=n.maxWidth??1/0;n.width=Math.min(s,Math.max(i,r)),t=!0}t&&(this.store.set("columns",[...this.columns]),this.emitStatesChanged())}resetColumnWidth(e){let t=this.getColumn(e);if(!t)return;let o=this.initialColumnStates.find(r=>r.colId===e);t.width=o?.width??150,this.store.set("columns",[...this.columns]),this.emitStatesChanged()}setColumnVisible(e,t){let o=this.getColumn(e);!o||o.alwaysVisible||(o.visible=t,this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]),this.eventBus.emit(x.COLUMN_VISIBLE,{colDef:o,visible:t}),this.emitStatesChanged())}setColumnPin(e,t){let o=this.getColumn(e);o&&(o.pinned=t,this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]),this.eventBus.emit(x.COLUMN_PINNED,{colDef:o,pinned:t}),this.emitStatesChanged())}moveColumn(e,t){let o=this.getVisibleColumns();if(e<0||e>=o.length||t<0||t>=o.length)return;let r=o[e];o.splice(e,1),o.splice(t,0,r),this.columns=this.syncColumnOrder(o),this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]),this.eventBus.emit(x.COLUMN_MOVED,{colDef:r,fromIndex:e,toIndex:t}),this.emitStatesChanged()}moveAndPin(e,t,o){let r=this.getColumn(e);if(!r)return;r.pinned=t;let n=this.getVisibleColumns(),i=n.findIndex(a=>a.colId===e);if(i===-1){this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]);return}let s;if(o)s=n.findIndex(a=>a.colId===o),s===-1&&(s=n.length);else{let a=[...n].reverse().find(c=>(c.pinned??null)===(t??null)&&c.colId!==e);s=a?n.findIndex(c=>c.colId===a.colId)+1:n.length}n.splice(i,1);let l=Math.min(i<s?s-1:s,n.length);n.splice(l,0,r),this.columns=this.syncColumnOrder(n),this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]),this.eventBus.emit(x.COLUMN_MOVED,{colDef:r,fromIndex:i,toIndex:l}),this.eventBus.emit(x.COLUMN_PINNED,{colDef:r,pinned:t}),this.emitStatesChanged()}setColumnAggFunc(e,t){let o=this.getColumn(e);o&&(o.aggFunc=t??void 0,this.store.set("columns",[...this.columns]),this.emitStatesChanged())}setColumnHeader(e,t){let o=this.getColumn(e);!o||!t||(o.header=t,this.store.set("columns",[...this.columns]),this.emitStatesChanged())}duplicateColumn(e){let t=this.columns.findIndex(l=>l.colId===e);if(t===-1)return null;let o=this.columns[t],r=2,n=`${e}_copy`,i=new Set(this.columns.map(l=>l.colId));for(;i.has(n);)n=`${e}_copy_${r++}`;let s={...o,colId:n,sortOrder:null};return this.columns.splice(t+1,0,s),this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]),this.emitStatesChanged(),n}toggleColumnFrozen(e){let t=this.getColumn(e);t&&(t.draggable=t.draggable===!1,this.store.set("columns",[...this.columns]),this.emitStatesChanged())}toggleColumnLocked(e){let t=this.getColumn(e);t&&(t.locked=!t.locked,this.store.set("columns",[...this.columns]),this.emitStatesChanged())}resetColumn(e){let t=this.initialColumnDefs.get(e),o=this.getColumn(e);if(!t||!o)return;Object.assign(o,{...t});let r=this.initialColumnStates.findIndex(n=>n.colId===e);if(r>=0){let n=this.columns.filter(i=>i.colId!==e);n.splice(Math.min(r,n.length),0,o),this.columns=n}this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]),this.emitStatesChanged()}setColumnSort(e,t){for(let r of this.columns)r.sortOrder=r.colId===e?t:null;let o=this.getColumn(e);o&&this.eventBus.emit(x.COLUMN_SORTED,{colId:e,field:o.field,order:t})}clearAllSort(){for(let e of this.columns)e.sortOrder=null;this.eventBus.emit(x.COLUMN_SORTED,{colId:"",field:"",order:null})}autoSizeColumn(e,t){let o=this.getColumn(e);if(!o)return;let r=t.ownerDocument.createElement("span");r.style.cssText="position:absolute;visibility:hidden;white-space:nowrap;font-size:inherit;padding:0 12px;pointer-events:none;",t.appendChild(r),r.textContent=o.header;let n=r.offsetWidth+24,i=t.querySelectorAll(`[data-col-id="${e}"]`);for(let s of Array.from(i))r.textContent=s.textContent??"",n=Math.max(n,r.offsetWidth+24);t.removeChild(r),this.setColumnWidth(e,n,!0),this.eventBus.emit(x.COLUMN_AUTOSIZE,{colId:e,newWidth:n})}moveColumns(e,t){let o=this.getVisibleColumns(),r=new Set(e),n=e.map(a=>o.find(c=>c.colId===a)).filter(a=>!!a);if(n.length===0)return;let i=o.filter(a=>!r.has(a.colId)),s=Math.max(0,Math.min(t,i.length)),l=[...i.slice(0,s),...n,...i.slice(s)];this.columns=this.syncColumnOrder(l),this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]),this.emitStatesChanged()}sizeColumnsToFit(e){let t=this.getVisibleColumns();if(t.length===0||e<=0)return;let o=t.reduce((i,s)=>i+(s.width??150),0)||1,r=0;for(let i of t){let s=i.minWidth??40,l=i.maxWidth??1/0,a=Math.round((i.width??150)/o*e);i.width=Math.min(l,Math.max(s,a)),r+=i.width}let n=e-r;if(n!==0){let i=t[t.length-1],s=i.minWidth??40,l=i.maxWidth??1/0;i.width=Math.min(l,Math.max(s,(i.width??150)+n))}this.store.set("columns",[...this.columns]),this.emitStatesChanged()}resetColumnState(){this.initialColumnStates.length!==0&&this.applyColumnStates(this.initialColumnStates)}applyColumnStates(e){let t=new Map(e.map(o=>[o.colId,o]));for(let o of this.columns){let r=t.get(o.colId);r&&(o.width=r.width,o.visible=r.visible,o.pinned=r.pinned,o.sortOrder=r.sortOrder)}this.columns.sort((o,r)=>{let n=t.get(o.colId)?.index??9999,i=t.get(r.colId)?.index??9999;return n-i}),this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]),this.emitStatesChanged()}getColumnStates(){return this.columns.map((e,t)=>({colId:e.colId,width:e.width??150,visible:e.visible!==!1,pinned:e.pinned??null,sortOrder:e.sortOrder??null,index:t}))}rebuildPinnedSections(){let e=this.columns.filter(t=>t.visible!==!1);this.store.set("pinnedLeftColumns",e.filter(t=>t.pinned==="left")),this.store.set("pinnedRightColumns",e.filter(t=>t.pinned==="right")),this.store.set("centerColumns",e.filter(t=>!t.pinned))}syncColumnOrder(e){let t=this.columns.filter(o=>o.visible===!1);return[...e,...t]}normalizeColumn(e,t){let{children:o,...r}=e;return{width:150,minWidth:40,visible:!0,sortable:!0,filterable:!0,resizable:!0,draggable:!0,editable:!1,groupable:!1,sortOrder:null,filterActive:!1,...r,colId:e.colId??`col_${e.field}_${t}`,type:e.type??"string",header:e.header??Or(e.field)}}emitStatesChanged(){this.eventBus.emit(x.COLUMNS_STATE_CHANGED,{states:this.getColumnStates()})}};function ut(d){return`detail_${d}`}var pi=0;function Br(){return`rn_${++pi}_${Math.random().toString(36).slice(2,7)}`}var ke=class{constructor(e,t){this.store=e;this.eventBus=t;this.rawData=[];this.idField="__photon_id__";this.defaultRowHeight=50}setRowData(e,t=50){this.rawData=e,this.defaultRowHeight=t;let o=this.buildRowNodes(e);this.layoutNodes(o),this.store.set("allRows",o),this.store.set("totalRowCount",o.length),this.eventBus.emit(x.DATA_CHANGED,{oldCount:this.store.get("totalRowCount"),newCount:o.length})}appendRowData(e){let t=this.store.get("allRows"),o=this.buildRowNodes(e,t.length),r=t.length>0?t[t.length-1].top+t[t.length-1].height:0;this.layoutNodes(o,r);let n=[...t,...o];this.rawData=[...this.rawData,...e],this.store.set("allRows",n),this.store.set("totalRowCount",n.length)}updateRow(e,t){let o=this.store.get("allRows"),r=o.find(n=>n.nodeId===e);r&&(r.data={...r.data,...t},this.store.set("allRows",[...o]))}removeRows(e){let t=new Set(e),o=this.store.get("allRows").filter(r=>!t.has(r.nodeId));this.layoutNodes(o),this.store.set("allRows",o),this.store.set("totalRowCount",o.length)}getRowNode(e){return this.store.get("allRows").find(t=>t.nodeId===e)}getRowByIndex(e){return this.store.get("allRows")[e]}setVisibleRows(e){this.layoutNodes(e),this.store.set("visibleRows",e)}setRenderedRows(e){this.store.set("renderedRows",e)}setRowHeight(e,t){let o=this.store.get("visibleRows"),r=o.findIndex(n=>n.nodeId===e);if(r!==-1){o[r].height=t;for(let n=r+1;n<o.length;n++)o[n].top=o[n-1].top+o[n-1].height;this.store.set("visibleRows",[...o])}}buildGroupHeaderNode(e,t,o,r,n){return{nodeId:Br(),rowIndex:-1,data:{[t]:o},type:"group",selected:!1,expanded:this.store.get("expandedGroupKeys").has(e),editable:!1,level:n,parent:null,children:r,groupKey:e,groupField:t,groupValue:o,childCount:r.length,height:this.defaultRowHeight,top:0}}createDetailNode(e,t,o=200){return{nodeId:ut(e.nodeId),rowIndex:-1,data:t,type:"detail",selected:!1,expanded:!1,editable:!1,level:e.level+1,parent:e,children:[],height:o,top:0,detail:t,parentNodeId:e.nodeId}}getRawData(){return this.rawData}applyTransaction(e){let t=this.store.get("allRows"),o=new Map(t.map(l=>[l.nodeId,l])),r=[];if(e.remove?.length)for(let l of e.remove){let a=o.get(l);a&&(r.push(a),o.delete(l))}let n=[];if(e.update?.length)for(let l of e.update){let a=l[this.idField],c=a!==void 0?o.get(a):void 0;c&&(c.data={...c.data,...l},n.push(c))}let i=r.length>0?t.filter(l=>o.has(l.nodeId)):t.slice(),s=[];if(e.add?.length){let l=this.buildRowNodes(e.add);s.push(...l),i=i.concat(l)}return this.layoutNodes(i),this.rawData=i.map(l=>l.data),this.store.set("allRows",i),this.store.set("totalRowCount",i.length),{add:s,update:n,remove:r}}buildRowNodes(e,t=0){return e.map((o,r)=>({nodeId:o[this.idField]??Br(),rowIndex:t+r,data:{...o},type:"data",selected:this.store.get("selectedRowIds").has(o[this.idField]??""),expanded:!1,editable:!1,level:0,parent:null,children:[],height:this.defaultRowHeight,top:0}))}layoutNodes(e,t=0){let o=t;for(let r=0;r<e.length;r++)e[r].rowIndex=r,e[r].top=o,o+=e[r].height}};var hi=new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"});function zr(d){if(d==null||d==="")return NaN;let e=Number(d);return isNaN(e)?NaN:e}function Wr(d){if(d instanceof Date)return d.getTime();if(typeof d=="string"||typeof d=="number"){let e=new Date(d);return isNaN(e.getTime())?NaN:e.getTime()}return NaN}var ko=(d,e)=>{let t=d==null?"":String(d),o=e==null?"":String(e);return t===o?0:t===""?1:o===""?-1:hi.compare(t,o)},_o=(d,e)=>{let t=zr(d),o=zr(e);return isNaN(t)&&isNaN(o)?0:isNaN(t)?1:isNaN(o)?-1:t-o},Lo=(d,e)=>{let t=Wr(d),o=Wr(e);return isNaN(t)&&isNaN(o)?0:isNaN(t)?1:isNaN(o)?-1:t-o},ui=(d,e)=>(d?1:0)-(e?1:0);function Dt(d){switch(d){case"number":case"currency":case"percentage":return _o;case"date":case"time":return Lo;case"boolean":return ui;default:return ko}}function gi(d,e){let t=e.split("."),o=d;for(let r of t){if(o==null)return;o=o[r]}return o}var _e=class{constructor(e,t){this.store=e;this.eventBus=t;this.sortConfig=[]}sort(e,t,o){this.sortConfig=[{colId:e,field:t,order:o}],this.store.set("sortConfig",[...this.sortConfig]),this.eventBus.emit(x.SORT_CHANGED,{colId:e,field:t,order:o})}multiSort(e){this.sortConfig=[...e],this.store.set("sortConfig",[...this.sortConfig]);let t=e[e.length-1];t&&this.eventBus.emit(x.SORT_CHANGED,{colId:t.colId,field:t.field,order:t.order})}clearSort(){this.sortConfig=[],this.store.set("sortConfig",[]),this.eventBus.emit(x.SORT_CHANGED,{colId:"",field:"",order:null})}clearColumnSort(e){this.sortConfig=this.sortConfig.filter(t=>t.colId!==e),this.store.set("sortConfig",[...this.sortConfig])}applySorting(e,t){if(this.sortConfig.length===0)return e;let o=new Map(t.map(h=>[h.colId,h])),r=this.sortConfig.map(({colId:h,field:u,order:g})=>{let m=o.get(h);return{field:u,nested:u.includes("."),compareFn:Dt(m?.type??"string"),direction:g==="asc"?1:-1}}),n=[],i=[];for(let h of e)h.type==="data"?n.push(h):i.push(h);let s=n.length;if(s===0)return e;let l=r.length,a=new Array(s);for(let h=0;h<s;h++){let u=n[h].data,g=new Array(l);for(let m=0;m<l;m++){let f=r[m];g[m]=f.nested?gi(u,f.field):u[f.field]}a[h]=g}let c=new Int32Array(s);for(let h=0;h<s;h++)c[h]=h;if(l===1){let{compareFn:h,direction:u}=r[0];c.sort((g,m)=>h(a[g][0],a[m][0])*u)}else c.sort((h,u)=>{let g=a[h],m=a[u];for(let f=0;f<l;f++){let C=r[f].compareFn(g[f],m[f])*r[f].direction;if(C!==0)return C}return 0});let p=new Array(s);for(let h=0;h<s;h++)p[h]=n[c[h]];return i.length===0?p:p.concat(i)}getSortConfig(){return[...this.sortConfig]}isSorted(e){return this.sortConfig.find(t=>t.colId===e)?.order??null}};function Vr(d){return d==null?"":String(d).toLowerCase().trim()}function Do(d){return Number(d)}function Ao(d){if(!d)return null;let e=new Date(d);return isNaN(e.getTime())?null:e}function le(d){return d==null||String(d).trim()===""}function $r(d,e){let t=Vr(e),o=Vr(d.value);switch(d.operator){case"contains":return t.includes(o);case"notContains":return!t.includes(o);case"equals":return t===o;case"notEquals":return t!==o;case"startsWith":return t.startsWith(o);case"endsWith":return t.endsWith(o);case"blank":return le(e);case"notBlank":return!le(e);default:return!0}}function Ur(d,e){let t=Do(e),o=Do(d.value);if(isNaN(t))return d.operator==="blank";switch(d.operator){case"equals":return t===o;case"notEquals":return t!==o;case"lessThan":return t<o;case"lessThanOrEqual":return t<=o;case"greaterThan":return t>o;case"greaterThanOrEqual":return t>=o;case"inRange":{let r=Do(d.valueTo);return t>=o&&t<=r}case"blank":return le(e);case"notBlank":return!le(e);default:return!0}}function qr(d,e){let t=Ao(e),o=Ao(d.value);if(!t)return d.operator==="blank";if(!o&&d.operator!=="blank"&&d.operator!=="notBlank")return!0;switch(d.operator){case"equals":return t.toDateString()===o.toDateString();case"notEquals":return t.toDateString()!==o.toDateString();case"before":case"lessThan":return t<o;case"after":case"greaterThan":return t>o;case"inRange":{let r=Ao(d.valueTo);return!!r&&t>=o&&t<=r}case"blank":return le(e);case"notBlank":return!le(e);default:return!0}}function jr(d,e,t){let o=new Set(e.map(String)),r=String(t);if(Array.isArray(t)){let n=t.some(i=>o.has(String(i)));return d==="in"?n:!n}return d==="in"?o.has(r):!o.has(r)}function Xr(d,e){switch(d.operator){case"equals":return!!e==!!d.value;case"notEquals":return!!e!=!!d.value;case"blank":return le(e);case"notBlank":return!le(e);default:return!0}}function Yr(d,e){let t=e.split("."),o=d;for(let r of t){if(o==null)return;o=o[r]}return o}var Le=class{constructor(e,t){this.store=e;this.eventBus=t;this.filterModel={};this.quickFilter=null}setFilterModel(e){this.filterModel={...e},this.store.set("filterModel",this.filterModel),this.store.set("filterActive",Object.keys(e).length>0),this.eventBus.emit(x.FILTER_CHANGED,{model:this.filterModel})}setColumnFilter(e,t){t===null?delete this.filterModel[e]:this.filterModel[e]=t,this.store.set("filterModel",{...this.filterModel}),this.store.set("filterActive",Object.keys(this.filterModel).length>0),this.eventBus.emit(x.COLUMN_FILTER_CHANGED,{model:this.filterModel}),this.eventBus.emit(x.FILTER_CHANGED,{model:this.filterModel})}clearColumnFilter(e){this.setColumnFilter(e,null)}clearAllFilters(){this.filterModel={},this.quickFilter=null,this.store.set("filterModel",{}),this.store.set("quickFilterConfig",null),this.store.set("filterActive",!1),this.eventBus.emit(x.FILTER_CHANGED,{model:{}}),this.eventBus.emit(x.QUICK_FILTER_CHANGED,{config:{term:""}})}setQuickFilter(e){this.quickFilter=e,this.store.set("quickFilterConfig",e),this.eventBus.emit(x.QUICK_FILTER_CHANGED,{config:e})}applyFilters(e,t){return this.hasActiveFilters()?e.filter(o=>this.matchesRow(o,t)):e}hasActiveFilters(){return Object.keys(this.filterModel).length>0||!!this.quickFilter?.term}matchesRow(e,t){if(e.type!=="data")return!0;let o=new Map(t.map(n=>[n.colId,n])),r=Object.entries(this.filterModel);return!(r.length>0&&!this.passesColumnFilters(e,r,o)||this.quickFilter?.term&&!this.passesQuickFilter(e,t))}getFilterModel(){return{...this.filterModel}}isColumnFiltered(e){return e in this.filterModel}passesColumnFilters(e,t,o){for(let[r,n]of t){let i=o.get(r);if(!i)continue;let s=Yr(e.data,n.field);if(n.selectedIds&&n.selectedIds.length>0){if(!jr("in",n.selectedIds,s))return!1;continue}if(!n.conditions||n.conditions.length===0)continue;let[l,a]=n.conditions,c=this.evaluateCondition(n.type,l,s,i);if(!a||n.logic==="and"){if(!c||a&&!this.evaluateCondition(n.type,a,s,i))return!1}else{let p=this.evaluateCondition(n.type,a,s,i);if(!c&&!p)return!1}}return!0}evaluateCondition(e,t,o,r){switch(e){case"number":case"currency":return Ur(t,o);case"date":case"time":return qr(t,o);case"boolean":return Xr(t,o);default:return $r(t,o)}}passesQuickFilter(e,t){if(!this.quickFilter)return!0;let{term:o,caseSensitive:r,fields:n}=this.quickFilter,i=r?o:o.toLowerCase(),s=n??t.map(l=>l.field);for(let l of s){let a=Yr(e.data,l);if((r?String(a??""):String(a??"").toLowerCase()).includes(i))return!0}return!1}};var De=class{constructor(e,t){this.store=e;this.eventBus=t}configure(e){let t=this.store.get("pagination");this.store.set("pagination",{...t,...e})}enable(){this.configure({enabled:!0})}disable(){this.configure({enabled:!1})}goToPage(e){let t=this.store.get("pagination"),o=this.getTotalPages(),r=Math.max(1,Math.min(e,o));r!==t.page&&(this.configure({page:r}),this.emitPageChange())}goToFirstPage(){this.goToPage(1)}goToLastPage(){this.goToPage(this.getTotalPages())}goToNextPage(){let e=this.store.get("pagination");this.goToPage(e.page+1)}goToPreviousPage(){let e=this.store.get("pagination");this.goToPage(e.page-1)}setPageSize(e){let t=this.store.get("pagination");this.configure({pageSize:e,page:1}),this.eventBus.emit(x.PAGE_SIZE_CHANGED,{page:1,pageSize:e,totalRows:t.totalRows??0,totalPages:this.getTotalPages()})}setTotalRows(e){this.configure({totalRows:e})}applyPagination(e){let t=this.store.get("pagination");if(!t.enabled||t.serverSide)return e;let o=e.filter(s=>s.type==="data"||s.type==="group").length;t.totalRows!==o&&this.configure({totalRows:o});let r=(t.page-1)*t.pageSize,n=r+t.pageSize,i=0;return e.filter(s=>s.type!=="data"&&s.type!=="group"?!0:(i++,i>r&&i<=n))}getTotalPages(){let e=this.store.get("pagination"),t=e.totalRows??0;return Math.max(1,Math.ceil(t/e.pageSize))}getCurrentPage(){return this.store.get("pagination").page}getPageSize(){return this.store.get("pagination").pageSize}getTotalRows(){return this.store.get("pagination").totalRows??0}getPageRange(){let e=this.store.get("pagination"),t=(e.page-1)*e.pageSize+1,o=Math.min(e.page*e.pageSize,e.totalRows??0);return{start:t,end:o}}isEnabled(){return this.store.get("pagination").enabled}isFirstPage(){return this.store.get("pagination").page===1}isLastPage(){return this.store.get("pagination").page>=this.getTotalPages()}emitPageChange(){let e=this.store.get("pagination");this.eventBus.emit(x.PAGE_CHANGED,{page:e.page,pageSize:e.pageSize,totalRows:e.totalRows??0,totalPages:this.getTotalPages()})}};function At(d,e){let t=e.split("."),o=d;for(let r of t){if(o==null)return;o=o[r]}return o}function Kr(d,e){if(d==null||d==="")return"_Blank";if(typeof d=="object"){let o=d;return String(o.label??o.name??o.value??o.id??JSON.stringify(d))}if(e==="is_deleted"||e==="deleted")return d?"Archived":"Active";let t=String(d);return t.charAt(0).toUpperCase()+t.slice(1)}function Po(d,e){let t=[];for(let o of d){let r=e.has(o.key),n={nodeId:`group_${o.key}`,rowIndex:-1,data:{[o.field]:o.value},type:"group",selected:!1,expanded:r,editable:!1,level:o.level,parent:null,children:[],groupKey:o.key,groupField:o.field,groupValue:o.value,childCount:Ho(o),aggregatedValues:o.aggregatedValues,height:50,top:0};t.push(n),r&&(o.children.length>0?t.push(...Po(o.children,e)):t.push(...o.rows),o.aggregatedValues&&t.push({nodeId:`group_footer_${o.key}`,rowIndex:-1,data:{[o.field]:o.value},type:"group-footer",selected:!1,expanded:!1,editable:!1,level:o.level,parent:null,children:[],groupKey:o.key,groupField:o.field,groupValue:o.value,childCount:Ho(o),aggregatedValues:o.aggregatedValues,height:50,top:0}))}return t}function Ho(d){return d.children.length===0?d.rows.length:d.children.reduce((e,t)=>e+Ho(t),0)}var Ae=class{constructor(e,t,o){this.store=e;this.eventBus=t;this.aggregationEngine=o}groupByColumns(e,t,o){if(e.length===0)return o;let n=e.map(l=>t.find(a=>a.colId===l)).filter(l=>!!l).map(l=>l.field),i=this.buildGroupTree(n,o,0);this.aggregationEngine&&this.aggregationEngine.compute(i,t);let s=this.store.get("expandedGroupKeys");return Po(i,s)}addGroupColumn(e){let t=this.store.get("groupedColumnIds");t.includes(e)||(this.store.set("groupedColumnIds",[...t,e]),this.eventBus.emit(x.COLUMN_GROUP_CHANGED,{groupedColumnIds:[...t,e]}))}removeGroupColumn(e){let t=this.store.get("groupedColumnIds");this.store.set("groupedColumnIds",t.filter(o=>o!==e)),this.eventBus.emit(x.COLUMN_GROUP_CHANGED,{groupedColumnIds:t.filter(o=>o!==e)})}reorderGroupColumns(e){this.store.set("groupedColumnIds",e),this.eventBus.emit(x.COLUMN_GROUP_CHANGED,{groupedColumnIds:e})}clearGrouping(){this.store.set("groupedColumnIds",[]),this.store.set("expandedGroupKeys",new Set),this.eventBus.emit(x.COLUMN_GROUP_CHANGED,{groupedColumnIds:[]})}expandGroup(e){let t=new Set(this.store.get("expandedGroupKeys"));t.add(e),this.store.set("expandedGroupKeys",t),this.eventBus.emit(x.GROUP_EXPANDED,{groupKey:e})}collapseGroup(e){let t=new Set(this.store.get("expandedGroupKeys"));t.delete(e),this.store.set("expandedGroupKeys",t),this.eventBus.emit(x.GROUP_COLLAPSED,{groupKey:e})}toggleGroup(e){this.store.get("expandedGroupKeys").has(e)?this.collapseGroup(e):this.expandGroup(e)}expandAllGroups(e){let t=e.filter(r=>r.type==="group"),o=new Set(t.map(r=>r.groupKey));this.store.set("expandedGroupKeys",o)}collapseAllGroups(){this.store.set("expandedGroupKeys",new Set)}isGroupExpanded(e){return this.store.get("expandedGroupKeys").has(e)}buildGroupTree(e,t,o,r=""){if(e.length===0||t.length===0)return[];let[n,...i]=e,s=new Map;for(let a of t){if(a.type!=="data")continue;let c=At(a.data,n),p=Kr(c,n),h=s.get(p)??[];h.push(a),s.set(p,h)}let l=[];for(let[a,c]of s){let p=r?`${r}||${n}::${a}`:`${n}::${a}`,h=i.length>0?this.buildGroupTree(i,c,o+1,p):[];l.push({key:p,field:n,value:a,level:o,children:h,rows:i.length===0?c:[],expanded:this.store.get("expandedGroupKeys").has(p)})}return l}};var He=class{compute(e,t){let o=t.filter(r=>(r.type==="currency"||r.type==="number")&&r.aggFunc!=null);if(o.length!==0)for(let r of e)this.walkGroup(r,o)}walkGroup(e,t){let o;if(e.children.length>0){let r=e.children.map(n=>this.walkGroup(n,t));o=this.mergeAccumulators(r,t)}else o=this.buildAccumulatorsFromRows(e.rows,t);return e.aggregatedValues=this.deriveDisplayValues(o,t),o}buildAccumulatorsFromRows(e,t){let o={};for(let r of t){let n={sum:0,count:0,min:1/0,max:-1/0};for(let i of e){let s=At(i.data,r.field),l=typeof s=="number"?s:parseFloat(String(s??""));isFinite(l)&&(n.sum+=l,n.count++,l<n.min&&(n.min=l),l>n.max&&(n.max=l))}o[r.field]=n}return o}mergeAccumulators(e,t){let o={};for(let r of t){let n={sum:0,count:0,min:1/0,max:-1/0};for(let i of e){let s=i[r.field];!s||s.count===0||(n.sum+=s.sum,n.count+=s.count,s.min<n.min&&(n.min=s.min),s.max>n.max&&(n.max=s.max))}o[r.field]=n}return o}deriveDisplayValues(e,t){let o={};for(let r of t){let n=e[r.field];if(!n||n.count===0){o[r.field]=null;continue}switch(r.aggFunc){case"sum":o[r.field]=n.sum;break;case"avg":o[r.field]=n.sum/n.count;break;case"min":o[r.field]=isFinite(n.min)?n.min:null;break;case"max":o[r.field]=isFinite(n.max)?n.max:null;break;case"count":o[r.field]=n.count;break}}return o}};var Pe=class{constructor(e,t){this.store=e;this.eventBus=t;this.config={mode:"multiple",checkboxSelection:!0,selectAllOnHeaderClick:!0,headerCheckbox:!0,suppressRowDeselection:!1,serialColumnSelection:!1};this.dragAnchorIndex=null;this.dragBaseIds=new Set;this._isRowDragging=!1}configure(e){this.config={...this.config,...e}}get serialColumnSelection(){return this.config.serialColumnSelection&&this.config.mode!=="none"}get isRowDragging(){return this._isRowDragging}selectRow(e,t){if(this.config.mode==="none")return;let o=new Set(this.store.get("selectedRowIds"));this.config.mode==="single"&&o.clear(),o.add(e),this.applySelectionToRows(t,o),this.store.set("selectedRowIds",o),this.updateSelectionState(t,o);let r=t.filter(n=>o.has(n.nodeId));this.eventBus.emit(x.ROW_SELECTED,{rows:r,selectedCount:o.size,isAllSelected:this.isAllSelected(t,o)})}deselectRow(e,t){if(this.config.suppressRowDeselection)return;let o=new Set(this.store.get("selectedRowIds"));o.delete(e),this.applySelectionToRows(t,o),this.store.set("selectedRowIds",o),this.updateSelectionState(t,o);let r=t.filter(n=>o.has(n.nodeId));this.eventBus.emit(x.ROW_DESELECTED,{rows:r,selectedCount:o.size,isAllSelected:!1})}toggleRowSelection(e,t){this.store.get("selectedRowIds").has(e)?this.deselectRow(e,t):this.selectRow(e,t)}selectRows(e,t){if(this.config.mode==="none")return;let o=this.config.mode==="single"?new Set([e[e.length-1]]):new Set([...this.store.get("selectedRowIds"),...e]);this.applySelectionToRows(t,o),this.store.set("selectedRowIds",o),this.updateSelectionState(t,o);let r=t.filter(n=>o.has(n.nodeId));this.eventBus.emit(x.ROW_SELECTED,{rows:r,selectedCount:o.size,isAllSelected:this.isAllSelected(t,o)})}deselectRows(e,t){if(this.config.suppressRowDeselection)return;let o=new Set(this.store.get("selectedRowIds"));for(let n of e)o.delete(n);this.applySelectionToRows(t,o),this.store.set("selectedRowIds",o),this.updateSelectionState(t,o);let r=t.filter(n=>o.has(n.nodeId));this.eventBus.emit(x.ROW_DESELECTED,{rows:r,selectedCount:o.size,isAllSelected:!1})}selectAll(e){if(this.config.mode!=="multiple")return;let t=e.filter(r=>r.type==="data"),o=new Set(t.map(r=>r.nodeId));this.applySelectionToRows(e,o),this.store.set("selectedRowIds",o),this.store.set("isAllSelected",!0),this.store.set("isIndeterminate",!1),this.eventBus.emit(x.ALL_ROWS_SELECTED,{rows:t,selectedCount:o.size,isAllSelected:!0})}deselectAll(e){let t=new Set;this.applySelectionToRows(e,t),this.store.set("selectedRowIds",t),this.store.set("isAllSelected",!1),this.store.set("isIndeterminate",!1),this.eventBus.emit(x.ALL_ROWS_DESELECTED,{rows:[],selectedCount:0,isAllSelected:!1})}selectRange(e,t,o){if(this.config.mode!=="multiple")return;let r=Math.min(e,t),n=Math.max(e,t),i=o.filter(s=>s.type==="data"&&s.rowIndex>=r&&s.rowIndex<=n).map(s=>s.nodeId);this.selectRows(i,o)}beginRowDrag(e,t,o,r){if(this.config.mode!=="none"){if(this.config.mode==="single"){this.setSelection(new Set([t]),o),this.dragAnchorIndex=e,this.dragBaseIds=new Set,this._isRowDragging=!0;return}if(r.shift&&this.dragAnchorIndex!==null)this.dragBaseIds=new Set,this.setSelection(new Set(this.rangeIds(this.dragAnchorIndex,e,o)),o);else if(r.ctrl){let n=new Set(this.store.get("selectedRowIds"));n.has(t)?n.delete(t):n.add(t),this.dragBaseIds=new Set(n),this.dragAnchorIndex=e,this.setSelection(n,o)}else this.dragBaseIds=new Set,this.dragAnchorIndex=e,this.setSelection(new Set([t]),o);this._isRowDragging=!0}}extendRowDrag(e,t){if(!this._isRowDragging||this.dragAnchorIndex===null||this.config.mode!=="multiple")return;let o=new Set(this.dragBaseIds);for(let r of this.rangeIds(this.dragAnchorIndex,e,t))o.add(r);this.setSelection(o,t)}endRowDrag(){this._isRowDragging=!1}rangeIds(e,t,o){let r=Math.min(e,t),n=Math.max(e,t);return o.filter(i=>i.type==="data"&&i.rowIndex>=r&&i.rowIndex<=n).map(i=>i.nodeId)}setSelection(e,t){this.applySelectionToRows(t,e),this.store.set("selectedRowIds",e),this.updateSelectionState(t,e);let o=t.filter(r=>e.has(r.nodeId));this.eventBus.emit(x.ROW_SELECTED,{rows:o,selectedCount:e.size,isAllSelected:this.isAllSelected(t,e)})}isRowSelected(e){return this.store.get("selectedRowIds").has(e)}getSelectedRows(e){let t=this.store.get("selectedRowIds");return e.filter(o=>t.has(o.nodeId))}getSelectedCount(){return this.store.get("selectedRowIds").size}clearSelection(e){this.deselectAll(e)}isAllSelected(e,t){let o=e.filter(r=>r.type==="data");return o.length>0&&o.every(r=>t.has(r.nodeId))}updateSelectionState(e,t){let o=e.filter(i=>i.type==="data"),r=o.length>0&&o.every(i=>t.has(i.nodeId)),n=!r&&o.some(i=>t.has(i.nodeId));this.store.set("isAllSelected",r),this.store.set("isIndeterminate",n)}applySelectionToRows(e,t){for(let o of e)o.selected=t.has(o.nodeId)}};var Ge=class{constructor(e,t){this.store=e;this.eventBus=t;this.activeSession=null;this.config={mode:"cell",singleClickEdit:!1,stopEditingWhenCellsLoseFocus:!0};this.tabHandler=null}setTabHandler(e){this.tabHandler=e}configure(e){this.config={...this.config,...e}}startEditing(e,t,o){if(this.config.mode==="none"||!t.editable||t.locked)return!1;this.activeSession&&this.stopEditing(!0);let r=e.data[t.field];return this.activeSession={rowNode:e,colDef:t,originalValue:r,currentValue:r,editorEl:null,cellEl:o},this.store.set("editingCellId",`${e.nodeId}__${t.colId}`),o.classList.add("pg-cell--editing"),this.eventBus.emit(x.CELL_EDIT_START,{row:e,colDef:t,oldValue:r,newValue:r,rowIndex:e.rowIndex}),this.eventBus.emit(x.ROW_EDIT_START,{row:e,field:t.field,oldValue:r,newValue:r}),!0}updateValue(e){this.activeSession&&(this.activeSession.currentValue=e)}stopEditing(e=!1){if(!this.activeSession)return;let{rowNode:t,colDef:o,originalValue:r,currentValue:n,cellEl:i}=this.activeSession;if(i?.classList.remove("pg-cell--editing"),this.store.set("editingCellId",null),!e){let s=kt(n,o),l=_t(s,o);if(l){this.eventBus.emit(x.CELL_EDIT_STOP,{row:t,field:o.field,oldValue:r,newValue:s,error:l}),this.activeSession=null;return}s!==r&&(t.data={...t.data,[o.field]:s},this.eventBus.emit(x.CELL_VALUE_CHANGED,{row:t,colDef:o,oldValue:r,newValue:s,rowIndex:t.rowIndex}),i&&setTimeout(()=>{i.classList.remove("pg-cell--fill-flash"),i.offsetWidth,i.classList.add("pg-cell--fill-flash"),setTimeout(()=>i.classList.remove("pg-cell--fill-flash"),700)},0))}this.eventBus.emit(x.CELL_EDIT_STOP,{row:t,field:o.field,oldValue:r,newValue:e?r:n}),this.activeSession=null}isEditing(){return this.activeSession!==null}getActiveSession(){return this.activeSession}isCellEditing(e,t){return this.store.get("editingCellId")===`${e}__${t}`}buildNativeEditor(e,t,o){if(e.type==="array")return this.buildMultiSelectEditor(e,t,o);let r;switch(e.type){case"boolean":{let n=document.createElement("input");n.type="checkbox",n.checked=!!t,n.className="pg-editor pg-editor--checkbox",n.addEventListener("change",()=>this.updateValue(n.checked)),r=n;break}case"dropdown":case"object":{let n=document.createElement("select");n.className="pg-editor pg-editor--select";let i=this.resolveObjectKey(t,e);for(let s of e.dropdownOptions??[]){let l=document.createElement("option");l.value=String(s.value),l.textContent=s.label,l.selected=String(s.value)===String(i??""),n.appendChild(l)}n.addEventListener("change",()=>{if(e.type==="object"){let s=e.dropdownOptions?.find(l=>String(l.value)===n.value);this.updateValue(s??n.value)}else this.updateValue(n.value)}),r=n;break}case"number":case"currency":case"percentage":{let n=document.createElement("input");n.type="number",n.value=String(t??""),n.className="pg-editor pg-editor--number",e.min!==void 0&&e.min!==null&&(n.min=String(e.min)),e.max!==void 0&&e.max!==null&&(n.max=String(e.max)),n.addEventListener("input",()=>this.updateValue(n.value)),r=n;break}case"date":{let n=document.createElement("input");n.type="date",n.value=t?new Date(t).toISOString().split("T")[0]:"",n.className="pg-editor pg-editor--date",n.addEventListener("change",()=>this.updateValue(n.value)),r=n;break}case"time":{let n=document.createElement("input");n.type="time",n.value=String(t??""),n.className="pg-editor pg-editor--time",n.addEventListener("change",()=>this.updateValue(n.value)),r=n;break}default:{let n=document.createElement("input");n.type=e.type==="email"?"email":"text",n.value=String(t??""),n.className="pg-editor pg-editor--text",n.addEventListener("input",()=>this.updateValue(n.value)),r=n}}return this.config.stopEditingWhenCellsLoseFocus&&r.addEventListener("blur",()=>this.stopEditing(!1)),r.addEventListener("keydown",n=>{let i=n;i.stopPropagation(),i.key==="Enter"?(i.preventDefault(),this.stopEditing(!1)):i.key==="Escape"?(i.preventDefault(),this.stopEditing(!0)):i.key==="Tab"&&(i.preventDefault(),this.stopEditing(!1),this.tabHandler?.(i.shiftKey))}),o.appendChild(r),this.activeSession&&(this.activeSession.editorEl=r),setTimeout(()=>r.focus?.(),0),r}buildMultiSelectEditor(e,t,o){let r=new Set(Array.isArray(t)?t.map(String):[]),n=e.dropdownOptions??[],i=document.createElement("div");i.className="pg-editor pg-editor--multiselect",i.setAttribute("tabindex","-1");let s=document.createElement("div");s.className="pg-editor__ms-trigger";let l=document.createElement("span");l.className="pg-editor__ms-text";let a=document.createElement("span");a.className="pg-editor__ms-arrow",s.appendChild(l),s.appendChild(a);let c=document.createElement("div");c.className="pg-editor__ms-panel";let p=()=>{let u=n.filter(g=>r.has(String(g.value))).map(g=>g.label);l.textContent=u.length>0?u.join(", "):"\u2014"};for(let u of n){let g=document.createElement("label");g.className="pg-editor__ms-option";let m=document.createElement("input");m.type="checkbox",m.className="pg-editor__ms-check",m.value=String(u.value),m.checked=r.has(String(u.value)),m.addEventListener("change",()=>{m.checked?r.add(m.value):r.delete(m.value),p(),this.updateValue([...r])});let f=document.createElement("span");f.className="pg-editor__ms-label",f.textContent=u.label,g.appendChild(m),g.appendChild(f),c.appendChild(g)}p(),s.addEventListener("mousedown",u=>{u.preventDefault(),c.classList.toggle("pg-editor__ms-panel--open")}),i.appendChild(s),i.appendChild(c),o.appendChild(i),setTimeout(()=>{i.focus(),c.classList.add("pg-editor__ms-panel--open")},0);let h=null;return i.addEventListener("focusout",()=>{h=setTimeout(()=>{i.contains(document.activeElement)||this.stopEditing(!1)},150)}),i.addEventListener("focusin",()=>{h!==null&&(clearTimeout(h),h=null)}),i.addEventListener("keydown",u=>{u.stopPropagation(),u.key==="Enter"?(u.preventDefault(),this.stopEditing(!1)):u.key==="Escape"?(u.preventDefault(),this.stopEditing(!0)):u.key==="Tab"&&(u.preventDefault(),this.stopEditing(!1),this.tabHandler?.(u.shiftKey))}),this.activeSession&&(this.activeSession.editorEl=i),i}resolveObjectKey(e,t){if(typeof e=="object"&&e!==null){let o=t.objectValueKey??"value";return e[o]}return e}getConfig(){return this.config}};var Ne=class{compute(e,t){let o=e.filter(n=>n.type==="data"),r={};for(let n of t){if(!n.showSummary)continue;let i=n.summaryAggregation??"sum",s=o.map(c=>this.resolveValue(c.data,n.field)).filter(c=>typeof c=="number"&&!isNaN(c)),l=null,a=n.summaryLabel??"";switch(i){case"sum":l=s.reduce((c,p)=>c+p,0),a=a||"Sum";break;case"avg":l=s.length>0?s.reduce((c,p)=>c+p,0)/s.length:null,a=a||"Avg";break;case"min":l=s.length>0?Math.min(...s):null,a=a||"Min";break;case"max":l=s.length>0?Math.max(...s):null,a=a||"Max";break;case"count":l=o.length,a=a||"Count";break;case"none":l=null;break}r[n.colId]={value:l,label:a,aggregation:i,formatted:this.formatSummaryValue(l,n,i)}}return r}formatSummaryValue(e,t,o){if(e==null)return"";if(o==="count")return String(e);let r=Number(e);return isNaN(r)?String(e):t.isCurrency?r.toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2}):r.toLocaleString("en-US",{maximumFractionDigits:2})}resolveValue(e,t){let o=t.split("."),r=e;for(let n of o){if(r==null)return;r=r[n]}return r}};var Oe=class{constructor(e){this.eventBus=e}exportToCsv(e,t,o={}){let r=(o.fileName??"export")+".csv",n=this.getExportColumns(t,o),i=e.filter(c=>c.type==="data");this.eventBus.emit(x.EXPORT_START,{format:"csv",fileName:r,rowCount:i.length});let s=n.map(c=>this.escapeCsvCell(c.header)).join(","),l=i.map(c=>n.map(p=>{let h=this.resolveValue(c.data,p.field),u=o.processCellValue?o.processCellValue({value:h,colDef:p}):Q(h,p);return this.escapeCsvCell(u)}).join(",")),a=[s,...l].join(`\r
4264
+ `);this.downloadFile(a,r,"text/csv;charset=utf-8;"),this.eventBus.emit(x.EXPORT_COMPLETE,{format:"csv",fileName:r,rowCount:i.length})}exportToXlsx(e,t,o={}){let r=(o.fileName??"export")+".xlsx",n=this.getExportColumns(t,o),i=e.filter(c=>c.type==="data");this.eventBus.emit(x.EXPORT_START,{format:"xlsx",fileName:r,rowCount:i.length});let s=[],l=n.map(c=>`<Cell><Data ss:Type="String">${this.escapeXml(c.header)}</Data></Cell>`).join("");s.push(`<Row>${l}</Row>`);for(let c of i){let p=n.map(h=>{let u=this.resolveValue(c.data,h.field),g=o.processCellValue?o.processCellValue({value:u,colDef:h}):Q(u,h);return`<Cell><Data ss:Type="${h.type==="number"||h.type==="currency"?"Number":"String"}">${this.escapeXml(g)}</Data></Cell>`});s.push(`<Row>${p.join("")}</Row>`)}let a=`<?xml version="1.0"?>
4497
4265
  <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
4498
4266
  xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
4499
4267
  <Worksheet ss:Name="Sheet1">
@@ -4501,13 +4269,13 @@
4501
4269
  </Worksheet>
4502
4270
  </Workbook>`;this.downloadFile(a,r,"application/vnd.ms-excel"),this.eventBus.emit(x.EXPORT_COMPLETE,{format:"xlsx",fileName:r,rowCount:i.length})}getExportColumns(e,t){return e.filter(o=>!(!t.includeHiddenColumns&&o.visible===!1))}escapeCsvCell(e){return e.includes(",")||e.includes('"')||e.includes(`
4503
4271
  `)?`"${e.replace(/"/g,'""')}"`:e}escapeXml(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}downloadFile(e,t,o){let r=new Blob([e],{type:o}),n=URL.createObjectURL(r),i=document.createElement("a");i.href=n,i.download=t,i.style.display="none",document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(n)}resolveValue(e,t){let o=t.split("."),r=e;for(let n of o){if(r==null)return;r=r[n]}return r}};function Ht(d,e){if(d==null)return"";switch(e.type){case"number":case"currency":case"percentage":return String(d);case"boolean":return d?"Yes":"No";case"array":return Array.isArray(d)?d.join(", "):String(d);case"dropdown":{let t=e.dropdownMap?.get(String(d));return t??String(d)}default:return String(d)}}function Go(d,e){if(!e.nested)return d[e.field];let t=d;for(let o of e.parts){if(t==null)return;t=t[o]}return t}var Fe=class{constructor(){this.clipboardBuffer=[]}copyRangesToClipboard(e,t,o,r=!1,n){let{text:i,buffer:s}=this.buildRangeData(e,t,o,r,n);return this.clipboardBuffer=s,this.writeToClipboard(i)}async pasteFromClipboard(){try{let e=await navigator.clipboard.readText();return this.parseClipboardText(e)}catch{return this.clipboardBuffer}}copyRowsToClipboard(e,t){let o=this.buildDescriptors(t,0,t.length-1),r=[t.map(n=>n.header).join(" ")];for(let n of e){let i=new Array(o.length);for(let s=0;s<o.length;s++)i[s]=Ht(Go(n.data,o[s]),o[s]);r.push(i.join(" "))}return this.writeToClipboard(r.join(`
4504
- `))}copyCellValue(e,t){let o=this.buildDescriptors([t],0,0)[0];return this.writeToClipboard(Ht(e,o))}buildRangeData(e,t,o,r,n){if(e.length===0)return{text:"",buffer:[]};if(e.length>1)return this.buildMultiRangeData(e,t,o,r);let i=e[0],s=Math.min(i.startRowIndex,i.endRowIndex),l=Math.max(i.startRowIndex,i.endRowIndex),a=Math.min(i.startColIndex,i.endColIndex),c=Math.max(i.startColIndex,i.endColIndex),p=a<0,h=p?0:a,u=c>=0?this.buildDescriptors(o,h,c):[],m=u.length,g=p?m+1:m,f=[],C=[];if(r&&g>0){let b=new Array(g),v=p?1:0;p&&(b[0]="Group");for(let w=0;w<m;w++)b[w+v]=o[h+w]?.header??"";f.push(b.join(" "))}for(let b=s;b<=l;b++){let v=t[b];if(!v)continue;let w=v.type==="group"||v.type==="group-footer";if(w&&!p&&!v.aggregatedValues||!w&&v.type!=="data")continue;let E=new Array(g).fill(""),R=p?1:0;if(p){if(w)E[0]=String(v.groupValue??"");else if(v.type==="data"&&n){let I=v.data[n];E[0]=I!=null?String(I):""}}if(v.type==="data"){let I=v.data;for(let S=0;S<m;S++)E[S+R]=Ht(Go(I,u[S]),u[S])}else if(w&&v.aggregatedValues){let I=v.aggregatedValues;for(let S=0;S<m;S++){let T=o[h+S];if(T&&(T.type==="currency"||T.type==="number")&&T.aggFunc!=null){let k=I[T.field];E[S+R]=k!=null?String(k):""}}}f.push(E.join(" ")),C.push(E)}return{text:f.join(`
4505
- `),buffer:C}}buildMultiRangeData(e,t,o,r){let n=e.map(m=>({startRowIndex:Math.min(m.startRowIndex,m.endRowIndex),endRowIndex:Math.max(m.startRowIndex,m.endRowIndex),startColIndex:Math.max(0,Math.min(m.startColIndex,m.endColIndex)),endColIndex:Math.max(m.startColIndex,m.endColIndex)})),i=Math.min(...n.map(m=>m.startRowIndex)),s=Math.max(...n.map(m=>m.endRowIndex)),l=Math.max(0,Math.min(...n.map(m=>m.startColIndex))),a=Math.max(...n.map(m=>m.endColIndex));if(a<0)return{text:"",buffer:[]};let c=this.buildDescriptors(o,l,a),p=c.length,h=[],u=[];r&&p>0&&h.push(c.map((m,g)=>o[l+g]?.header??"").join(" "));for(let m=i;m<=s;m++){let g=t[m];if(!g||g.type!=="data"||!n.some(b=>m>=b.startRowIndex&&m<=b.endRowIndex))continue;let C=new Array(p).fill("");for(let b=0;b<p;b++){let v=l+b;n.some(E=>m>=E.startRowIndex&&m<=E.endRowIndex&&v>=E.startColIndex&&v<=E.endColIndex)&&(C[b]=Ht(Go(g.data,c[b]),c[b]))}h.push(C.join(" ")),u.push(C)}return{text:h.join(`
4272
+ `))}copyCellValue(e,t){let o=this.buildDescriptors([t],0,0)[0];return this.writeToClipboard(Ht(e,o))}buildRangeData(e,t,o,r,n){if(e.length===0)return{text:"",buffer:[]};if(e.length>1)return this.buildMultiRangeData(e,t,o,r);let i=e[0],s=Math.min(i.startRowIndex,i.endRowIndex),l=Math.max(i.startRowIndex,i.endRowIndex),a=Math.min(i.startColIndex,i.endColIndex),c=Math.max(i.startColIndex,i.endColIndex),p=a<0,h=p?0:a,u=c>=0?this.buildDescriptors(o,h,c):[],g=u.length,m=p?g+1:g,f=[],C=[];if(r&&m>0){let b=new Array(m),v=p?1:0;p&&(b[0]="Group");for(let w=0;w<g;w++)b[w+v]=o[h+w]?.header??"";f.push(b.join(" "))}for(let b=s;b<=l;b++){let v=t[b];if(!v)continue;let w=v.type==="group"||v.type==="group-footer";if(w&&!p&&!v.aggregatedValues||!w&&v.type!=="data")continue;let E=new Array(m).fill(""),R=p?1:0;if(p){if(w)E[0]=String(v.groupValue??"");else if(v.type==="data"&&n){let S=v.data[n];E[0]=S!=null?String(S):""}}if(v.type==="data"){let S=v.data;for(let I=0;I<g;I++)E[I+R]=Ht(Go(S,u[I]),u[I])}else if(w&&v.aggregatedValues){let S=v.aggregatedValues;for(let I=0;I<g;I++){let T=o[h+I];if(T&&(T.type==="currency"||T.type==="number")&&T.aggFunc!=null){let M=S[T.field];E[I+R]=M!=null?String(M):""}}}f.push(E.join(" ")),C.push(E)}return{text:f.join(`
4273
+ `),buffer:C}}buildMultiRangeData(e,t,o,r){let n=e.map(g=>({startRowIndex:Math.min(g.startRowIndex,g.endRowIndex),endRowIndex:Math.max(g.startRowIndex,g.endRowIndex),startColIndex:Math.max(0,Math.min(g.startColIndex,g.endColIndex)),endColIndex:Math.max(g.startColIndex,g.endColIndex)})),i=Math.min(...n.map(g=>g.startRowIndex)),s=Math.max(...n.map(g=>g.endRowIndex)),l=Math.max(0,Math.min(...n.map(g=>g.startColIndex))),a=Math.max(...n.map(g=>g.endColIndex));if(a<0)return{text:"",buffer:[]};let c=this.buildDescriptors(o,l,a),p=c.length,h=[],u=[];r&&p>0&&h.push(c.map((g,m)=>o[l+m]?.header??"").join(" "));for(let g=i;g<=s;g++){let m=t[g];if(!m||m.type!=="data"||!n.some(b=>g>=b.startRowIndex&&g<=b.endRowIndex))continue;let C=new Array(p).fill("");for(let b=0;b<p;b++){let v=l+b;n.some(E=>g>=E.startRowIndex&&g<=E.endRowIndex&&v>=E.startColIndex&&v<=E.endColIndex)&&(C[b]=Ht(Go(m.data,c[b]),c[b]))}h.push(C.join(" ")),u.push(C)}return{text:h.join(`
4506
4274
  `),buffer:u}}buildDescriptors(e,t,o){let r=[];for(let n=t;n<=o;n++){let i=e[n];if(!i)continue;let s=null;i.type==="dropdown"&&i.dropdownOptions?.length&&(s=new Map(i.dropdownOptions.map(l=>[String(l.value),l.label]))),r.push({field:i.field,parts:i.field.split("."),nested:i.field.includes("."),type:i.type??"string",dropdownMap:s})}return r}parseClipboardText(e){return e.split(`
4507
- `).map(t=>t.split(" ").map(o=>o.trim()))}writeToClipboard(e){return navigator.clipboard?.writeText?navigator.clipboard.writeText(e).catch(()=>this.execCommandCopy(e)):Promise.resolve(this.execCommandCopy(e))}execCommandCopy(e){let t=document.createElement("textarea");t.value=e,t.style.cssText="position:fixed;opacity:0;top:0;left:0;",document.body.appendChild(t),t.focus(),t.select();try{document.execCommand("copy")}catch{}document.body.removeChild(t)}};var Be=class{constructor(){this.el=null;this.offsetX=12;this.offsetY=12}create(e={}){this.destroy();let t=document.createElement("div");if(t.className="pg-drag-preview",e.avatarUrl||e.shape){let r=document.createElement("div"),n=e.shape??"circle";if(r.className=`pg-drag-preview__avatar pg-drag-preview__avatar--${n}`,e.avatarUrl){let i=document.createElement("img");i.className="pg-drag-preview__avatar-img",i.src=e.avatarUrl,r.appendChild(i)}t.appendChild(r)}if(e.icon){let r=document.createElement("span");r.className="pg-drag-preview__icon",r.innerHTML=e.icon,t.appendChild(r)}let o=document.createElement("span");if(o.className="pg-drag-preview__label",o.textContent=e.label??"Dragging",t.appendChild(o),e.count&&e.count>1){let r=document.createElement("span");r.className="pg-drag-preview__badge",r.textContent=String(e.count),t.appendChild(r)}return document.body.appendChild(t),this.el=t,t}moveTo(e,t){this.el&&(this.el.style.transform=`translate(${e+this.offsetX}px, ${t+this.offsetY}px)`)}setOffset(e,t){this.offsetX=e,this.offsetY=t}destroy(){this.el&&(this.el.remove(),this.el=null)}};var ze=class{constructor(){this.scrollEl=null;this.rafId=null;this.mouseX=0;this.mouseY=0}attach(e){this.scrollEl=e}detach(){this.stop(),this.scrollEl=null}onMouseMove(e,t){this.mouseX=e,this.mouseY=t}start(){if(this.rafId!==null)return;let e=()=>{this.scroll(),this.rafId=requestAnimationFrame(e)};this.rafId=requestAnimationFrame(e)}stop(){this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null)}scroll(){if(!this.scrollEl)return;let e=this.scrollEl.getBoundingClientRect(),t=this.mouseX-e.left,o=this.mouseY-e.top,r=0,n=0;o<60?n=-this.calcSpeed(o):o>e.height-60&&(n=this.calcSpeed(e.height-o)),t<60?r=-this.calcSpeed(t):t>e.width-60&&(r=this.calcSpeed(e.width-t)),(r!==0||n!==0)&&this.scrollEl.scrollBy(r,n)}calcSpeed(e){let t=Math.max(0,Math.min(1,1-e/60));return Math.round(t*t*18)}};var Kr=4;var We=class{constructor(e){this.eventBus=e;this.dropTargets=new Map;this.currentSession=null;this.preview=new Be;this.autoscroll=new ze;this.previewOptions={};this.boundMouseMove=this.onMouseMove.bind(this),this.boundMouseUp=this.onMouseUp.bind(this)}registerDropTarget(e){return this.dropTargets.set(e.id,e),()=>this.dropTargets.delete(e.id)}makeDraggable(e,t,o,r){r&&(this.previewOptions=r);let n=i=>{i.button===0&&(i.preventDefault(),this.currentSession={item:t,sourceEl:e,currentTarget:null,position:null,startX:i.clientX,startY:i.clientY,currentX:i.clientX,currentY:i.clientY,isDragging:!1,startTime:Date.now()},o&&this.autoscroll.attach(o),document.addEventListener("pointermove",this.boundMouseMove),document.addEventListener("pointerup",this.boundMouseUp))};return e.addEventListener("pointerdown",n),e.style.cursor="grab",e.setAttribute("data-draggable",t.type),()=>{e.removeEventListener("pointerdown",n),e.style.cursor="",e.removeAttribute("data-draggable")}}setScrollContainer(e){this.autoscroll.attach(e)}cancelDrag(){this.currentSession&&this.cleanupDrag(!0)}destroy(){this.cancelDrag(),this.autoscroll.detach(),document.removeEventListener("pointermove",this.boundMouseMove),document.removeEventListener("pointerup",this.boundMouseUp)}onMouseMove(e){if(!this.currentSession)return;let t=this.currentSession;if(t.currentX=e.clientX,t.currentY=e.clientY,!t.isDragging){let r=Math.abs(e.clientX-t.startX),n=Math.abs(e.clientY-t.startY);if(r<Kr&&n<Kr)return;t.isDragging=!0,t.sourceEl.classList.add("pg-dragging"),this.preview.create(this.previewOptions),this.autoscroll.start(),this.eventBus.emit(x.DRAG_STARTED,{item:t.item})}this.preview.moveTo(e.clientX,e.clientY),this.autoscroll.onMouseMove(e.clientX,e.clientY);let o=this.findDropTarget(e.clientX,e.clientY,t.item);o!==t.currentTarget&&(t.currentTarget&&(t.currentTarget.el.classList.remove("pg-drop-over"),t.currentTarget.onDragLeave?.(t.item)),t.currentTarget=o,o&&(o.el.classList.add("pg-drop-over"),o.onDragEnter?.(t.item))),o&&(t.position=this.calcDropPosition(e.clientY,o.el),this.updateDropIndicator(o.el,t.position)),this.eventBus.emit(x.DRAG_OVER,{item:t.item,targetId:o?.id??null,position:t.position})}onMouseUp(e){if(!this.currentSession)return;let t=this.currentSession;t.isDragging&&t.currentTarget&&t.position?(t.currentTarget.onDrop?.(t.item,t.position),this.eventBus.emit(x.DRAG_STOPPED,{item:t.item,targetId:t.currentTarget.id,position:t.position,accepted:!0})):this.eventBus.emit(x.DRAG_STOPPED,{item:t.item,targetId:null,position:null,accepted:!1}),this.cleanupDrag(!1)}cleanupDrag(e){if(!this.currentSession)return;let t=this.currentSession;t.sourceEl.classList.remove("pg-dragging"),t.currentTarget&&(t.currentTarget.el.classList.remove("pg-drop-over"),this.clearDropIndicator(t.currentTarget.el)),this.preview.destroy(),this.autoscroll.stop(),document.removeEventListener("pointermove",this.boundMouseMove),document.removeEventListener("pointerup",this.boundMouseUp),this.currentSession=null}findDropTarget(e,t,o){let r=null;for(let n of this.dropTargets.values()){if(!n.acceptsTypes.includes(o.type)||n.id===o.id)continue;let i=n.el.getBoundingClientRect();e>=i.left&&e<=i.right&&t>=i.top&&t<=i.bottom&&(r=n)}return r}calcDropPosition(e,t){let o=t.getBoundingClientRect(),n=(e-o.top)/o.height;return n<.25?"before":n>.75?"after":"inside"}updateDropIndicator(e,t){e.classList.remove("pg-drop-before","pg-drop-after","pg-drop-inside"),e.classList.add(`pg-drop-${t}`)}clearDropIndicator(e){e.classList.remove("pg-drop-before","pg-drop-after","pg-drop-inside")}};function ee(d){return{startRowIndex:Math.min(d.startRowIndex,d.endRowIndex),endRowIndex:Math.max(d.startRowIndex,d.endRowIndex),startColIndex:Math.min(d.startColIndex,d.endColIndex),endColIndex:Math.max(d.startColIndex,d.endColIndex)}}function No(d,e,t){for(let o of t){let r=ee(o);if(d>=r.startRowIndex&&d<=r.endRowIndex&&e>=r.startColIndex&&e<=r.endColIndex)return!0}return!1}var Oo=class{constructor(){this.active=null}setActive(e){if(this.active===e)return;let t=this.active;this.active=e,t?.clearSelection()}release(e){this.active===e&&(this.active=null)}},ut=new Oo;var Ve=class{constructor(e,t,o,r){this.store=e;this.eventBus=t;this.clipboardEngine=o;this.undoRedoEngine=r;this._isSelecting=!1;this.anchorCell=null;this.bodyPanels=[];this.contextMenuEl=null;this.chartOpenCallback=null;this.enterEditHandler=null;this.treeToggleHandler=null;this.scrollToCellCallback=null;this.getViewportRowCountCallback=null;this.dataChangedCallback=null;this.fillHandleEl=null;this.fillHandleParentCell=null;this.isFillDragging=!1;this.fillSourceRange=null;this.fillPreviewCells=[];this.fillDirection=null;this.fillTargetRow=null;this.fillTargetCol=null;this.fillDragScrollCallback=null;this.fillDragEndCallback=null;this.dragViewportRectFn=null;this.boundKeydown=this.onKeydown.bind(this),this.boundHideCtx=()=>this.hideContextMenu(),this.boundFillMouseMove=this.onFillMouseMove.bind(this),this.boundFillMouseUp=this.onFillMouseUp.bind(this)}get isSelecting(){return this._isSelecting}attach(e){document.addEventListener("keydown",this.boundKeydown),this.buildContextMenu()}setBodyPanels(e){this.bodyPanels=e.filter(Boolean)}setEnterEditHandler(e){this.enterEditHandler=e}setTreeToggleHandler(e){this.treeToggleHandler=e}setScrollToCellCallback(e){this.scrollToCellCallback=e}setGetViewportRowCountCallback(e){this.getViewportRowCountCallback=e}setDataChangedCallback(e){this.dataChangedCallback=e}setFillDragScrollCallback(e){this.fillDragScrollCallback=e}setFillDragEndCallback(e){this.fillDragEndCallback=e}setDragViewportRectCallback(e){this.dragViewportRectFn=e}updateFillPosition(e,t){this.processFillPosition(e,t)}detach(){document.removeEventListener("keydown",this.boundKeydown),document.removeEventListener("pointermove",this.boundFillMouseMove),document.removeEventListener("pointerup",this.boundFillMouseUp),ut.release(this),this.fillHandleParentCell?.classList.remove("pg-cell--has-fill-handle"),this.fillHandleParentCell=null,this.fillHandleEl?.remove(),this.fillHandleEl=null,this.fillDragScrollCallback=null,this.fillDragEndCallback=null,this.dragViewportRectFn=null,this.contextMenuEl?.remove(),this.contextMenuEl=null}startSelection(e,t,o=!1){ut.setActive(this),o||(this.anchorCell={rowIndex:e,colIndex:t},this.store.set("cellRanges",[{startRowIndex:e,endRowIndex:e,startColIndex:t,endColIndex:t}])),this._isSelecting=!0,this.store.set("activeCell",{rowIndex:e,colIndex:t}),this.emitSelectionChanged(),this.scrollToCellCallback?.(e,t)}extendSelection(e,t){if(!this.anchorCell){this.startSelection(e,t);return}ut.setActive(this),this.store.set("cellRanges",[{startRowIndex:this.anchorCell.rowIndex,endRowIndex:e,startColIndex:this.anchorCell.colIndex,endColIndex:t}]),this.store.set("activeCell",{rowIndex:e,colIndex:t}),this.emitSelectionChanged(),this.scrollToCellCallback?.(e,t)}endSelection(){this._isSelecting=!1}clearSelection(){this.anchorCell=null,this._isSelecting=!1,this.store.set("cellRanges",[]),this.store.set("activeCell",null),this.applySelectionClasses(),this.emitSelectionChanged()}isCellSelected(e,t){return No(e,t,this.store.get("cellRanges"))}addRangeCell(e,t){ut.setActive(this);let o=this.store.get("cellRanges"),r=o.findIndex(i=>i.startRowIndex===e&&i.endRowIndex===e&&i.startColIndex===t&&i.endColIndex===t),n=r>=0?o.filter((i,s)=>s!==r):[...o,{startRowIndex:e,endRowIndex:e,startColIndex:t,endColIndex:t}];this.anchorCell={rowIndex:e,colIndex:t},this.store.set("cellRanges",n),this.store.set("activeCell",n.length>0?{rowIndex:e,colIndex:t}:null),this.applySelectionClasses(),this.emitSelectionChanged()}applySelectionClasses(){let e=this.store.get("cellRanges"),t=this.store.get("activeCell"),o=e.length>0,r=o?e.map(ee):[];for(let n of this.bodyPanels)for(let i of n.querySelectorAll(".pg-cell[data-row-index][data-col-index]")){let s=Number(i.getAttribute("data-row-index")),l=Number(i.getAttribute("data-col-index")),a=o&&No(s,l,e),c=!!t&&t.rowIndex===s&&t.colIndex===l;if(i.classList.toggle("pg-cell--in-selection",a),i.classList.toggle("pg-cell--active-cell",c),a){let p=!1,h=!1,u=!1,m=!1;for(let g of r)s>=g.startRowIndex&&s<=g.endRowIndex&&l>=g.startColIndex&&l<=g.endColIndex&&(s===g.startRowIndex&&(p=!0),s===g.endRowIndex&&(h=!0),l===g.startColIndex&&(u=!0),l===g.endColIndex&&(m=!0));i.classList.toggle("pg-cell--sel-top",p),i.classList.toggle("pg-cell--sel-bottom",h),i.classList.toggle("pg-cell--sel-left",u),i.classList.toggle("pg-cell--sel-right",m)}else i.classList.remove("pg-cell--sel-top","pg-cell--sel-bottom","pg-cell--sel-left","pg-cell--sel-right")}this.updateFillHandle()}renderSelection(e){this.applySelectionClasses()}updateFillHandle(){if(this.isFillDragging)return;let e=this.store.get("cellRanges");if(e.length!==1){this.hideFillHandle();return}let t=ee(e[0]),o=null;for(let r of this.bodyPanels){let n=r.querySelector(`[data-row-index="${t.endRowIndex}"][data-col-index="${t.endColIndex}"]`);if(n){o=n;break}}if(!o){this.hideFillHandle();return}if(!this.fillHandleEl){let r=document.createElement("div");r.className="pg-fill-handle",r.addEventListener("pointerdown",n=>{n.button===0&&(n.preventDefault(),n.stopPropagation(),this.startFillDrag())}),this.fillHandleEl=r}this.fillHandleParentCell!==o&&(this.fillHandleParentCell?.classList.remove("pg-cell--has-fill-handle"),this.fillHandleParentCell=o,o.classList.add("pg-cell--has-fill-handle"),o.appendChild(this.fillHandleEl)),this.fillHandleEl.style.display=""}hideFillHandle(){this.fillHandleEl&&(this.fillHandleEl.style.display="none"),this.fillHandleParentCell?.classList.remove("pg-cell--has-fill-handle"),this.fillHandleParentCell=null}startFillDrag(){let e=this.store.get("cellRanges");e.length&&(this.fillSourceRange=ee(e[0]),this.isFillDragging=!0,this.fillDirection=null,this.fillTargetRow=null,this.fillTargetCol=null,document.addEventListener("pointermove",this.boundFillMouseMove),document.addEventListener("pointerup",this.boundFillMouseUp))}onFillMouseMove(e){!this.isFillDragging||!this.fillSourceRange||(this.processFillPosition(e.clientX,e.clientY),this.fillDragScrollCallback?.(e.clientX,e.clientY))}processFillPosition(e,t){if(!this.isFillDragging||!this.fillSourceRange)return;let r=document.elementFromPoint(e,t)?.closest("[data-row-index][data-col-index]");if(!r){let c=this.dragViewportRectFn?.();if(c){let p=Math.max(c.left+1,Math.min(c.right-1,e)),h=Math.max(c.top+1,Math.min(c.bottom-1,t));r=document.elementFromPoint(p,h)?.closest("[data-row-index][data-col-index]")}}if(!r)return;let n=Number(r.getAttribute("data-row-index")),i=Number(r.getAttribute("data-col-index"));if(isNaN(n)||isNaN(i))return;let s=this.fillSourceRange,l=n<s.startRowIndex?n-s.startRowIndex:n>s.endRowIndex?n-s.endRowIndex:0,a=i<s.startColIndex?i-s.startColIndex:i>s.endColIndex?i-s.endColIndex:0;Math.abs(l)>=Math.abs(a)?(this.fillDirection=l>=0?"down":"up",this.fillTargetRow=n,this.fillTargetCol=null):(this.fillDirection=a>=0?"right":"left",this.fillTargetRow=null,this.fillTargetCol=i),this.updateFillPreview()}updateFillPreview(){for(let i of this.fillPreviewCells)i.classList.remove("pg-cell--fill-preview","pg-cell--fp-top","pg-cell--fp-bottom","pg-cell--fp-left","pg-cell--fp-right");if(this.fillPreviewCells=[],!this.fillSourceRange||!this.fillDirection)return;let e=this.fillSourceRange,t,o,r,n;switch(this.fillDirection){case"down":if(this.fillTargetRow===null||this.fillTargetRow<=e.endRowIndex)return;t=e.endRowIndex+1,o=this.fillTargetRow,r=e.startColIndex,n=e.endColIndex;break;case"up":if(this.fillTargetRow===null||this.fillTargetRow>=e.startRowIndex)return;t=this.fillTargetRow,o=e.startRowIndex-1,r=e.startColIndex,n=e.endColIndex;break;case"right":if(this.fillTargetCol===null||this.fillTargetCol<=e.endColIndex)return;t=e.startRowIndex,o=e.endRowIndex,r=e.endColIndex+1,n=this.fillTargetCol;break;case"left":if(this.fillTargetCol===null||this.fillTargetCol>=e.startColIndex)return;t=e.startRowIndex,o=e.endRowIndex,r=this.fillTargetCol,n=e.startColIndex-1;break;default:return}for(let i of this.bodyPanels)for(let s of i.querySelectorAll(".pg-cell[data-row-index][data-col-index]")){let l=Number(s.getAttribute("data-row-index")),a=Number(s.getAttribute("data-col-index"));l>=t&&l<=o&&a>=r&&a<=n&&(s.classList.add("pg-cell--fill-preview"),l===t&&s.classList.add("pg-cell--fp-top"),l===o&&s.classList.add("pg-cell--fp-bottom"),a===r&&s.classList.add("pg-cell--fp-left"),a===n&&s.classList.add("pg-cell--fp-right"),this.fillPreviewCells.push(s))}}onFillMouseUp(){document.removeEventListener("pointermove",this.boundFillMouseMove),document.removeEventListener("pointerup",this.boundFillMouseUp),this.fillDragEndCallback?.(),this.fillSourceRange&&this.fillDirection&&this.applyFill();for(let e of this.fillPreviewCells)e.classList.remove("pg-cell--fill-preview","pg-cell--fp-top","pg-cell--fp-bottom","pg-cell--fp-left","pg-cell--fp-right");this.fillPreviewCells=[],this.isFillDragging=!1,this.fillSourceRange=null,this.fillDirection=null,this.fillTargetRow=null,this.fillTargetCol=null,this.applySelectionClasses()}applyFill(){if(!this.fillSourceRange||!this.fillDirection)return;let e=this.fillSourceRange,t=e.endRowIndex-e.startRowIndex+1,o=e.endColIndex-e.startColIndex+1,r,n,i,s;switch(this.fillDirection){case"down":if(this.fillTargetRow===null||this.fillTargetRow<=e.endRowIndex)return;r=e.endRowIndex+1,n=this.fillTargetRow,i=e.startColIndex,s=e.endColIndex;break;case"up":if(this.fillTargetRow===null||this.fillTargetRow>=e.startRowIndex)return;r=this.fillTargetRow,n=e.startRowIndex-1,i=e.startColIndex,s=e.endColIndex;break;case"right":if(this.fillTargetCol===null||this.fillTargetCol<=e.endColIndex)return;r=e.startRowIndex,n=e.endRowIndex,i=e.endColIndex+1,s=this.fillTargetCol;break;case"left":if(this.fillTargetCol===null||this.fillTargetCol>=e.startColIndex)return;r=e.startRowIndex,n=e.endRowIndex,i=this.fillTargetCol,s=e.startColIndex-1;break;default:return}if(r>n||i>s)return;let l=this.store.get("visibleRows"),a=this.getVisibleColumns(),c=[];for(let p=r;p<=n;p++){let h=l[p];if(!(!h||h.type!=="data"))for(let u=i;u<=s;u++){let m=a[u];if(!m)continue;let g,f,C=this.fillDirection;C==="down"?(g=e.startRowIndex+(p-r)%t,f=u):C==="up"?(g=e.endRowIndex-(n-p)%t,f=u):C==="right"?(g=p,f=e.startColIndex+(u-i)%o):(g=p,f=e.endColIndex-(s-u)%o);let b=l[g];if(!b||b.type!=="data")continue;let v=a[f];if(!v)continue;let w=b.data[v.field],E=v.type??"string",R=m.type??"string",I=E!==R?this.coerceToColumnType(w,R):w,S=h.data[m.field];Object.is(S,I)||(c.push({nodeId:h.nodeId,field:m.field,oldValue:S,newValue:I}),h.data[m.field]=I)}}if(c.length>0){this.undoRedoEngine?.record({type:"paste",changes:c}),this.store.set("allRows",[...this.store.get("allRows")]),this.dataChangedCallback?.(new Set(c.map(f=>f.nodeId)));let p={startRowIndex:Math.min(e.startRowIndex,r),endRowIndex:Math.max(e.endRowIndex,n),startColIndex:Math.min(e.startColIndex,i),endColIndex:Math.max(e.endColIndex,s)};this.anchorCell={rowIndex:p.startRowIndex,colIndex:p.startColIndex},this.store.set("cellRanges",[p]),this.store.set("activeCell",{rowIndex:p.startRowIndex,colIndex:p.startColIndex}),this.emitSelectionChanged();let h=r,u=n,m=i,g=s;setTimeout(()=>this.flashFillArea(h,u,m,g),0)}}flashFillArea(e,t,o,r,n="pg-cell--fill-flash"){let i=[];for(let s of this.bodyPanels)for(let l of s.querySelectorAll(".pg-cell[data-row-index][data-col-index]")){let a=Number(l.getAttribute("data-row-index")),c=Number(l.getAttribute("data-col-index"));a>=e&&a<=t&&c>=o&&c<=r&&i.push(l)}for(let s of i)s.classList.remove("pg-cell--fill-flash","pg-cell--cut-flash"),s.offsetWidth,s.classList.add(n);setTimeout(()=>{for(let s of i)s.classList.remove(n)},700)}moveActiveCell(e,t,o,r,n=!1){let i=this.store.get("activeCell");if(!i)return;let s=Math.max(0,Math.min(o-1,i.rowIndex+e)),l=Math.max(0,Math.min(r-1,i.colIndex+t));n?this.extendSelection(s,l):this.startSelection(s,l)}jumpToEdge(e,t,o,r=!1){let n=this.store.get("activeCell");if(!n)return;let i=n.rowIndex,s=n.colIndex;switch(e){case"up":i=0;break;case"down":i=t-1;break;case"left":s=0;break;case"right":s=o-1;break}r?this.extendSelection(i,s):this.startSelection(i,s)}setChartOpenCallback(e){this.chartOpenCallback=e}async copySelection(e,t){return this.flashSelection("copy"),this.clipboardEngine.copyRangesToClipboard(this.store.get("cellRanges"),e,t,!1,this.getLeafGroupField())}async copySelectionWithHeaders(e,t){return this.flashSelection("copy"),this.clipboardEngine.copyRangesToClipboard(this.store.get("cellRanges"),e,t,!0,this.getLeafGroupField())}async cutSelection(e,t){let o=this.store.get("cellRanges"),r=this.getLeafGroupField();await this.clipboardEngine.copyRangesToClipboard(o,e,t,!1,r);let n=[];for(let p of o){let h=ee(p),u=h.startColIndex<0;for(let m=h.startRowIndex;m<=h.endRowIndex;m++){let g=e[m];if(!g||g.type!=="data")continue;if(u&&r){let C=g.data[r];n.push({nodeId:g.nodeId,field:r,oldValue:C,newValue:null}),g.data[r]=null}let f=u?0:h.startColIndex;for(let C=f;C<=h.endColIndex;C++){let b=t[C];if(!b)continue;let v=g.data[b.field];n.push({nodeId:g.nodeId,field:b.field,oldValue:v,newValue:null}),g.data[b.field]=null}}}this.undoRedoEngine?.record({type:"cut",changes:n}),this.clearCutCellsInDom(o),this.store.set("allRows",[...this.store.get("allRows")]);let i=new Set(n.map(p=>p.nodeId));this.dataChangedCallback?.(i);let s=1/0,l=-1/0,a=1/0,c=-1/0;for(let p of o){let h=ee(p);h.startRowIndex<s&&(s=h.startRowIndex),h.endRowIndex>l&&(l=h.endRowIndex),h.startColIndex<a&&(a=h.startColIndex),h.endColIndex>c&&(c=h.endColIndex)}if(s!==1/0){let p=s,h=l,u=Math.max(0,a),m=c;requestAnimationFrame(()=>requestAnimationFrame(()=>this.flashFillArea(p,h,u,m,"pg-cell--cut-flash")))}}async pasteSelection(e,t){let o=this.store.get("activeCell");if(!o)return;let r=await this.clipboardEngine.pasteFromClipboard();if(!r.length)return;let n=o.rowIndex,i=o.colIndex,s=this.getLeafGroupField(),l=i<0&&!!s,a=[],c=n,p=0,h=0;for(let u=n;h<r.length&&u<e.length;u++){let m=e[u];if(!m||m.type!=="data")continue;let g=r[h++];c=u,g.length>p&&(p=g.length);for(let f=0;f<g.length;f++){let C=i+f;if(l&&C<0){let b=s;a.push({nodeId:m.nodeId,field:b,oldValue:m.data[b],newValue:g[f]}),m.data[b]=g[f]}else{let b=t[C];if(b){let v=this.coerceToColumnType(g[f],b.type??"string");a.push({nodeId:m.nodeId,field:b.field,oldValue:m.data[b.field],newValue:v}),m.data[b.field]=v}}}}if(this.undoRedoEngine?.record({type:"paste",changes:a}),this.store.set("allRows",[...this.store.get("allRows")]),this.dataChangedCallback?.(new Set(a.map(u=>u.nodeId))),a.length>0&&p>0){let u=l?0:Math.max(0,i),m=l?p-2:i+p-1;if(m>=u){let g=n,f=c,C=u,b=m;requestAnimationFrame(()=>requestAnimationFrame(()=>this.flashFillArea(g,f,C,b)))}}}performUndo(){let e=this.undoRedoEngine?.undo();e&&this.applyUndoRedoChanges(e)}performRedo(){let e=this.undoRedoEngine?.redo();e&&this.applyUndoRedoChanges(e)}applyUndoRedoChanges(e){let t=this.store.get("allRows"),o=new Map;for(let v of t)o.set(v.nodeId,v);for(let v of e){let w=o.get(v.nodeId);w&&(w.data[v.field]=v.newValue)}if(this.store.set("allRows",[...t]),this.dataChangedCallback?.(new Set(e.map(v=>v.nodeId))),e.length===0)return;let r=this.store.get("visibleRows"),n=this.getVisibleColumns(),i=new Map;for(let v=0;v<r.length;v++)i.set(r[v].nodeId,v);let s=new Map;for(let v=0;v<n.length;v++)s.set(n[v].field,v);let l=1/0,a=-1/0,c=1/0,p=-1/0;for(let v of e){let w=i.get(v.nodeId),E=s.get(v.field);w!==void 0&&(w<l&&(l=w),w>a&&(a=w)),E!==void 0&&(E<c&&(c=E),E>p&&(p=E))}if(l===1/0)return;let h=c!==1/0?c:0,u=p!==1/0?p:0,m={startRowIndex:l,endRowIndex:a,startColIndex:h,endColIndex:u};this.anchorCell={rowIndex:l,colIndex:h},this.store.set("cellRanges",[m]),this.store.set("activeCell",{rowIndex:l,colIndex:h}),this.emitSelectionChanged(),this.scrollToCellCallback?.(l,h);let g=l,f=a,C=Math.max(0,h),b=Math.max(0,u);requestAnimationFrame(()=>requestAnimationFrame(()=>this.flashFillArea(g,f,C,b)))}getLeafGroupField(){let e=this.store.get("groupedColumnIds");if(e.length===0)return;let t=e[e.length-1];return this.store.get("columns").find(r=>r.colId===t)?.field}showContextMenu(e,t){if(!this.contextMenuEl)return;let o=window.innerWidth,r=window.innerHeight,n=200,i=300,s=e+n>o?o-n-4:e,l=t+i>r?r-i-4:t;this.contextMenuEl.style.left=`${s}px`,this.contextMenuEl.style.top=`${l}px`,this.contextMenuEl.classList.add("pg-context-menu--visible"),requestAnimationFrame(()=>{document.addEventListener("pointerdown",this.boundHideCtx,{once:!0})})}hideContextMenu(){this.contextMenuEl?.classList.remove("pg-context-menu--visible")}flashSelection(e){let t=e==="copy"?"pg-cell--copy-flash":"pg-cell--cut-flash",o=[];for(let r of this.bodyPanels)for(let n of r.querySelectorAll(".pg-cell--in-selection, .pg-cell--active-cell"))o.push(n);for(let r of o)r.classList.remove("pg-cell--copy-flash","pg-cell--cut-flash"),r.offsetWidth,r.classList.add(t);setTimeout(()=>{for(let r of o)r.classList.remove(t)},700)}clearCutCellsInDom(e){let t=e.map(ee);for(let o of this.bodyPanels)for(let r of o.querySelectorAll(".pg-cell[data-row-index][data-col-index]")){let n=Number(r.getAttribute("data-row-index")),i=Number(r.getAttribute("data-col-index"));if(t.some(l=>n>=l.startRowIndex&&n<=l.endRowIndex&&i>=l.startColIndex&&i<=l.endColIndex)){let l=r.querySelector(".pg-cell__inner");l&&(l.textContent="")}}}getVisibleColumns(){return this.store.get("columns").filter(e=>e.visible!==!1)}coerceToColumnType(e,t){if(e==null)return e;switch(t){case"number":case"currency":case"percentage":return Number(e);case"date":return e instanceof Date?new Date(e.getTime()):new Date(String(e));case"boolean":return!!e;case"string":return typeof e=="string"?e:String(e);default:return e}}onKeydown(e){let t=e.target;if(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.contentEditable==="true")return;let o=this.store.get("activeCell");if(!o)return;let r=e.ctrlKey||e.metaKey,n=e.key.length===1?e.key.toLowerCase():e.key;if(r&&n==="z"){e.preventDefault(),this.performUndo();return}if(r&&n==="y"){e.preventDefault(),this.performRedo();return}let i=this.store.get("visibleRows"),s=this.getVisibleColumns();if(i.length===0||s.length===0)return;let l=e.shiftKey;switch(n){case"ArrowUp":e.preventDefault(),r?this.jumpToEdge("up",i.length,s.length,l):this.moveActiveCell(-1,0,i.length,s.length,l);break;case"ArrowDown":e.preventDefault(),r?this.jumpToEdge("down",i.length,s.length,l):this.moveActiveCell(1,0,i.length,s.length,l);break;case"ArrowLeft":if(e.preventDefault(),!r&&!l&&this.treeToggleHandler){let c=i[o.rowIndex];if(c&&this.treeToggleHandler(c,"left"))break}if(r)this.jumpToEdge("left",i.length,s.length,l);else if(l)this.moveActiveCell(0,-1,i.length,s.length,!0);else{let a=o;a.colIndex===0&&a.rowIndex>0?this.startSelection(a.rowIndex-1,s.length-1):this.moveActiveCell(0,-1,i.length,s.length,!1)}break;case"ArrowRight":if(e.preventDefault(),!r&&!l&&this.treeToggleHandler){let c=i[o.rowIndex];if(c&&this.treeToggleHandler(c,"right"))break}if(r)this.jumpToEdge("right",i.length,s.length,l);else if(l)this.moveActiveCell(0,1,i.length,s.length,!0);else{let a=o;a.colIndex>=s.length-1&&a.rowIndex<i.length-1?this.startSelection(a.rowIndex+1,0):this.moveActiveCell(0,1,i.length,s.length,!1)}break;case"PageDown":{e.preventDefault();let a=this.getViewportRowCountCallback?.()??10;this.moveActiveCell(a,0,i.length,s.length,l);break}case"PageUp":{e.preventDefault();let a=this.getViewportRowCountCallback?.()??10;this.moveActiveCell(-a,0,i.length,s.length,l);break}case"Home":e.preventDefault(),r?this.startSelection(0,0,l):this.moveActiveCell(0,-o.colIndex,i.length,s.length,l);break;case"End":e.preventDefault(),r?this.startSelection(i.length-1,s.length-1,l):this.moveActiveCell(0,s.length-1-o.colIndex,i.length,s.length,l);break;case"Tab":{e.preventDefault();let a=o;e.shiftKey?a.colIndex===0&&a.rowIndex>0?this.startSelection(a.rowIndex-1,s.length-1):this.moveActiveCell(0,-1,i.length,s.length,!1):a.colIndex>=s.length-1&&a.rowIndex<i.length-1?this.startSelection(a.rowIndex+1,0):this.moveActiveCell(0,1,i.length,s.length,!1);break}case"Enter":if(e.preventDefault(),!e.shiftKey&&this.enterEditHandler){let a=o;if(this.enterEditHandler(a.rowIndex,a.colIndex))break}this.moveActiveCell(e.shiftKey?-1:1,0,i.length,s.length,!1);break;case"c":r&&(e.preventDefault(),this.copySelection(i,s));break;case"x":r&&(e.preventDefault(),this.cutSelection(i,s));break;case"v":r&&(e.preventDefault(),this.pasteSelection(i,s));break;case"a":r&&(e.preventDefault(),this.selectAll(i.length,s.length));break;case"Delete":case"Backspace":this.store.get("cellRanges").length>0&&(e.preventDefault(),this.cutSelection(i,s));break;case"Escape":this.clearSelection();break}}selectAll(e,t){let r=this.store.get("groupedColumnIds").length>0?-1:0;this.anchorCell={rowIndex:0,colIndex:r},this.store.set("cellRanges",[{startRowIndex:0,endRowIndex:e-1,startColIndex:r,endColIndex:t-1}]),this.store.set("activeCell",{rowIndex:0,colIndex:r}),this.emitSelectionChanged()}buildContextMenu(){let e='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="6" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><line x1="20" y1="4" x2="8.12" y2="15.88"/><line x1="14.47" y1="14.48" x2="20" y2="20"/><line x1="8.12" y1="8.12" x2="12" y2="12"/></svg>',t='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>',o='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><rect x="8" y="2" width="8" height="4" rx="1"/></svg>',r='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="18" y1="20" x2="18" y2="10"/><line x1="12" y1="20" x2="12" y2="4"/><line x1="6" y1="20" x2="6" y2="14"/></svg>',n='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>',i=document.createElement("div");i.className="pg-context-menu",i.setAttribute("role","menu");let s=(E,R,I,S)=>{let T=document.createElement("button");T.className="pg-context-menu__item",T.setAttribute("role","menuitem"),T.setAttribute("data-action",E);let k=document.createElement("span");k.className="pg-context-menu__icon",k.innerHTML=R;let L=document.createElement("span");if(L.className="pg-context-menu__label",L.textContent=I,T.appendChild(k),T.appendChild(L),S){let _=document.createElement("span");_.className="pg-context-menu__kbd",_.textContent=S,T.appendChild(_)}return T},l=()=>{let E=document.createElement("div");return E.className="pg-context-menu__sep",E.setAttribute("role","separator"),E},a=(E,R)=>{let I=document.createElement("button");I.className="pg-context-menu__item",I.setAttribute("role","menuitem"),I.setAttribute("data-chart-type",E);let S=document.createElement("span");return S.className="pg-context-menu__label",S.textContent=R,I.appendChild(S),I},c=(E,R)=>{let I=document.createElement("div");I.className="pg-context-menu__item pg-context-menu__item--has-sub",I.setAttribute("role","menuitem");let S=document.createElement("span");S.className="pg-context-menu__label",S.textContent=E,I.appendChild(S);let T=document.createElement("div");T.className="pg-context-menu__sub";for(let k of R)T.appendChild(k);return I.appendChild(T),I};i.appendChild(s("cut",e,"Cut","Ctrl+X")),i.appendChild(s("copy",t,"Copy","Ctrl+C")),i.appendChild(s("copy-headers",t,"Copy with Headers")),i.appendChild(s("paste",o,"Paste","Ctrl+V")),i.appendChild(l());let p=document.createElement("div");p.className="pg-context-menu__item pg-context-menu__item--has-sub",p.setAttribute("role","menuitem");let h=document.createElement("span");h.className="pg-context-menu__icon",h.innerHTML=r;let u=document.createElement("span");u.className="pg-context-menu__label",u.textContent="Chart Range",p.appendChild(h),p.appendChild(u);let m=document.createElement("div");m.className="pg-context-menu__sub",m.appendChild(c("Column",[a("column-grouped","Grouped"),a("column-stacked","Stacked"),a("column-100stacked","100% Stacked")])),m.appendChild(c("Bar",[a("bar-grouped","Grouped"),a("bar-stacked","Stacked"),a("bar-100stacked","100% Stacked")])),m.appendChild(a("pie","Pie")),m.appendChild(a("line","Line")),m.appendChild(a("area","Area")),m.appendChild(a("scatter","X Y (Scatter)")),m.appendChild(a("polar","Polar")),m.appendChild(a("funnel","Funnel")),p.appendChild(m),i.appendChild(p),i.appendChild(l());let g=document.createElement("div");g.className="pg-context-menu__item pg-context-menu__item--has-sub",g.setAttribute("role","menuitem");let f=document.createElement("span");f.className="pg-context-menu__icon",f.innerHTML=n;let C=document.createElement("span");C.className="pg-context-menu__label",C.textContent="Export",g.appendChild(f),g.appendChild(C);let b=document.createElement("div");b.className="pg-context-menu__sub";let v=document.createElement("button");v.className="pg-context-menu__item",v.setAttribute("role","menuitem"),v.setAttribute("data-action","export-csv");let w=document.createElement("span");w.className="pg-context-menu__label",w.textContent="Export as CSV",v.appendChild(w),b.appendChild(v),g.appendChild(b),i.appendChild(g),i.addEventListener("pointerdown",E=>E.stopPropagation()),i.addEventListener("click",E=>{let R=E.target.closest("[data-action],[data-chart-type]");if(!R)return;let I=R.getAttribute("data-action"),S=R.getAttribute("data-chart-type");if(!I&&!S)return;this.hideContextMenu();let T=this.store.get("visibleRows"),k=this.getVisibleColumns();if(S){this.chartOpenCallback?.(S);return}switch(I){case"cut":this.cutSelection(T,k);break;case"copy":this.copySelection(T,k);break;case"copy-headers":this.copySelectionWithHeaders(T,k);break;case"paste":this.pasteSelection(T,k);break;case"selectAll":this.selectAll(T.length,k.length);break;case"export-csv":this.exportAsCsv(T,k);break}}),document.body.appendChild(i),this.contextMenuEl=i}exportAsCsv(e,t){let o=t.map(a=>`"${a.header}"`).join(","),r=e.filter(a=>a.type==="data").map(a=>t.map(c=>{let p=a.data[c.field];return`"${(p==null?"":String(p)).replace(/"/g,'""')}"`}).join(",")).join(`
4275
+ `).map(t=>t.split(" ").map(o=>o.trim()))}writeToClipboard(e){return navigator.clipboard?.writeText?navigator.clipboard.writeText(e).catch(()=>this.execCommandCopy(e)):Promise.resolve(this.execCommandCopy(e))}execCommandCopy(e){let t=document.createElement("textarea");t.value=e,t.style.cssText="position:fixed;opacity:0;top:0;left:0;",document.body.appendChild(t),t.focus(),t.select();try{document.execCommand("copy")}catch{}document.body.removeChild(t)}};var Be=class{constructor(){this.el=null;this.offsetX=12;this.offsetY=12}create(e={}){this.destroy();let t=document.createElement("div");if(t.className="pg-drag-preview",e.avatarUrl||e.shape){let r=document.createElement("div"),n=e.shape??"circle";if(r.className=`pg-drag-preview__avatar pg-drag-preview__avatar--${n}`,e.avatarUrl){let i=document.createElement("img");i.className="pg-drag-preview__avatar-img",i.src=e.avatarUrl,r.appendChild(i)}t.appendChild(r)}if(e.icon){let r=document.createElement("span");r.className="pg-drag-preview__icon",r.innerHTML=e.icon,t.appendChild(r)}let o=document.createElement("span");if(o.className="pg-drag-preview__label",o.textContent=e.label??"Dragging",t.appendChild(o),e.count&&e.count>1){let r=document.createElement("span");r.className="pg-drag-preview__badge",r.textContent=String(e.count),t.appendChild(r)}return document.body.appendChild(t),this.el=t,t}moveTo(e,t){this.el&&(this.el.style.transform=`translate(${e+this.offsetX}px, ${t+this.offsetY}px)`)}setOffset(e,t){this.offsetX=e,this.offsetY=t}destroy(){this.el&&(this.el.remove(),this.el=null)}};var ze=class{constructor(){this.scrollEl=null;this.rafId=null;this.mouseX=0;this.mouseY=0}attach(e){this.scrollEl=e}detach(){this.stop(),this.scrollEl=null}onMouseMove(e,t){this.mouseX=e,this.mouseY=t}start(){if(this.rafId!==null)return;let e=()=>{this.scroll(),this.rafId=requestAnimationFrame(e)};this.rafId=requestAnimationFrame(e)}stop(){this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null)}scroll(){if(!this.scrollEl)return;let e=this.scrollEl.getBoundingClientRect(),t=this.mouseX-e.left,o=this.mouseY-e.top,r=0,n=0;o<60?n=-this.calcSpeed(o):o>e.height-60&&(n=this.calcSpeed(e.height-o)),t<60?r=-this.calcSpeed(t):t>e.width-60&&(r=this.calcSpeed(e.width-t)),(r!==0||n!==0)&&this.scrollEl.scrollBy(r,n)}calcSpeed(e){let t=Math.max(0,Math.min(1,1-e/60));return Math.round(t*t*18)}};var Zr=4;var We=class{constructor(e){this.eventBus=e;this.dropTargets=new Map;this.currentSession=null;this.preview=new Be;this.autoscroll=new ze;this.previewOptions={};this.boundMouseMove=this.onMouseMove.bind(this),this.boundMouseUp=this.onMouseUp.bind(this)}registerDropTarget(e){return this.dropTargets.set(e.id,e),()=>this.dropTargets.delete(e.id)}makeDraggable(e,t,o,r){r&&(this.previewOptions=r);let n=i=>{i.button===0&&(i.preventDefault(),this.currentSession={item:t,sourceEl:e,currentTarget:null,position:null,startX:i.clientX,startY:i.clientY,currentX:i.clientX,currentY:i.clientY,isDragging:!1,startTime:Date.now()},o&&this.autoscroll.attach(o),document.addEventListener("pointermove",this.boundMouseMove),document.addEventListener("pointerup",this.boundMouseUp))};return e.addEventListener("pointerdown",n),e.style.cursor="grab",e.setAttribute("data-draggable",t.type),()=>{e.removeEventListener("pointerdown",n),e.style.cursor="",e.removeAttribute("data-draggable")}}setScrollContainer(e){this.autoscroll.attach(e)}cancelDrag(){this.currentSession&&this.cleanupDrag(!0)}destroy(){this.cancelDrag(),this.autoscroll.detach(),document.removeEventListener("pointermove",this.boundMouseMove),document.removeEventListener("pointerup",this.boundMouseUp)}onMouseMove(e){if(!this.currentSession)return;let t=this.currentSession;if(t.currentX=e.clientX,t.currentY=e.clientY,!t.isDragging){let r=Math.abs(e.clientX-t.startX),n=Math.abs(e.clientY-t.startY);if(r<Zr&&n<Zr)return;t.isDragging=!0,t.sourceEl.classList.add("pg-dragging"),this.preview.create(this.previewOptions),this.autoscroll.start(),this.eventBus.emit(x.DRAG_STARTED,{item:t.item})}this.preview.moveTo(e.clientX,e.clientY),this.autoscroll.onMouseMove(e.clientX,e.clientY);let o=this.findDropTarget(e.clientX,e.clientY,t.item);o!==t.currentTarget&&(t.currentTarget&&(t.currentTarget.el.classList.remove("pg-drop-over"),t.currentTarget.onDragLeave?.(t.item)),t.currentTarget=o,o&&(o.el.classList.add("pg-drop-over"),o.onDragEnter?.(t.item))),o&&(t.position=this.calcDropPosition(e.clientY,o.el),this.updateDropIndicator(o.el,t.position)),this.eventBus.emit(x.DRAG_OVER,{item:t.item,targetId:o?.id??null,position:t.position})}onMouseUp(e){if(!this.currentSession)return;let t=this.currentSession;t.isDragging&&t.currentTarget&&t.position?(t.currentTarget.onDrop?.(t.item,t.position),this.eventBus.emit(x.DRAG_STOPPED,{item:t.item,targetId:t.currentTarget.id,position:t.position,accepted:!0})):this.eventBus.emit(x.DRAG_STOPPED,{item:t.item,targetId:null,position:null,accepted:!1}),this.cleanupDrag(!1)}cleanupDrag(e){if(!this.currentSession)return;let t=this.currentSession;t.sourceEl.classList.remove("pg-dragging"),t.currentTarget&&(t.currentTarget.el.classList.remove("pg-drop-over"),this.clearDropIndicator(t.currentTarget.el)),this.preview.destroy(),this.autoscroll.stop(),document.removeEventListener("pointermove",this.boundMouseMove),document.removeEventListener("pointerup",this.boundMouseUp),this.currentSession=null}findDropTarget(e,t,o){let r=null;for(let n of this.dropTargets.values()){if(!n.acceptsTypes.includes(o.type)||n.id===o.id)continue;let i=n.el.getBoundingClientRect();e>=i.left&&e<=i.right&&t>=i.top&&t<=i.bottom&&(r=n)}return r}calcDropPosition(e,t){let o=t.getBoundingClientRect(),n=(e-o.top)/o.height;return n<.25?"before":n>.75?"after":"inside"}updateDropIndicator(e,t){e.classList.remove("pg-drop-before","pg-drop-after","pg-drop-inside"),e.classList.add(`pg-drop-${t}`)}clearDropIndicator(e){e.classList.remove("pg-drop-before","pg-drop-after","pg-drop-inside")}};function ee(d){return{startRowIndex:Math.min(d.startRowIndex,d.endRowIndex),endRowIndex:Math.max(d.startRowIndex,d.endRowIndex),startColIndex:Math.min(d.startColIndex,d.endColIndex),endColIndex:Math.max(d.startColIndex,d.endColIndex)}}function No(d,e,t){for(let o of t){let r=ee(o);if(d>=r.startRowIndex&&d<=r.endRowIndex&&e>=r.startColIndex&&e<=r.endColIndex)return!0}return!1}var Oo=class{constructor(){this.active=null}setActive(e){if(this.active===e)return;let t=this.active;this.active=e,t?.clearSelection()}release(e){this.active===e&&(this.active=null)}},gt=new Oo;var Ve=class{constructor(e,t,o,r){this.store=e;this.eventBus=t;this.clipboardEngine=o;this.undoRedoEngine=r;this._isSelecting=!1;this.anchorCell=null;this.bodyPanels=[];this.contextMenuEl=null;this.chartOpenCallback=null;this.enterEditHandler=null;this.treeToggleHandler=null;this.scrollToCellCallback=null;this.getViewportRowCountCallback=null;this.dataChangedCallback=null;this.fillHandleEl=null;this.fillHandleParentCell=null;this.isFillDragging=!1;this.fillSourceRange=null;this.fillPreviewCells=[];this.fillDirection=null;this.fillTargetRow=null;this.fillTargetCol=null;this.fillDragScrollCallback=null;this.fillDragEndCallback=null;this.dragViewportRectFn=null;this.boundKeydown=this.onKeydown.bind(this),this.boundHideCtx=()=>this.hideContextMenu(),this.boundFillMouseMove=this.onFillMouseMove.bind(this),this.boundFillMouseUp=this.onFillMouseUp.bind(this)}get isSelecting(){return this._isSelecting}attach(e){document.addEventListener("keydown",this.boundKeydown),this.buildContextMenu()}setBodyPanels(e){this.bodyPanels=e.filter(Boolean)}setEnterEditHandler(e){this.enterEditHandler=e}setTreeToggleHandler(e){this.treeToggleHandler=e}setScrollToCellCallback(e){this.scrollToCellCallback=e}setGetViewportRowCountCallback(e){this.getViewportRowCountCallback=e}setDataChangedCallback(e){this.dataChangedCallback=e}setFillDragScrollCallback(e){this.fillDragScrollCallback=e}setFillDragEndCallback(e){this.fillDragEndCallback=e}setDragViewportRectCallback(e){this.dragViewportRectFn=e}updateFillPosition(e,t){this.processFillPosition(e,t)}detach(){document.removeEventListener("keydown",this.boundKeydown),document.removeEventListener("pointermove",this.boundFillMouseMove),document.removeEventListener("pointerup",this.boundFillMouseUp),gt.release(this),this.fillHandleParentCell?.classList.remove("pg-cell--has-fill-handle"),this.fillHandleParentCell=null,this.fillHandleEl?.remove(),this.fillHandleEl=null,this.fillDragScrollCallback=null,this.fillDragEndCallback=null,this.dragViewportRectFn=null,this.contextMenuEl?.remove(),this.contextMenuEl=null}startSelection(e,t,o=!1){gt.setActive(this),o||(this.anchorCell={rowIndex:e,colIndex:t},this.store.set("cellRanges",[{startRowIndex:e,endRowIndex:e,startColIndex:t,endColIndex:t}])),this._isSelecting=!0,this.store.set("activeCell",{rowIndex:e,colIndex:t}),this.emitSelectionChanged(),this.scrollToCellCallback?.(e,t)}extendSelection(e,t){if(!this.anchorCell){this.startSelection(e,t);return}gt.setActive(this),this.store.set("cellRanges",[{startRowIndex:this.anchorCell.rowIndex,endRowIndex:e,startColIndex:this.anchorCell.colIndex,endColIndex:t}]),this.store.set("activeCell",{rowIndex:e,colIndex:t}),this.emitSelectionChanged(),this.scrollToCellCallback?.(e,t)}endSelection(){this._isSelecting=!1}clearSelection(){this.anchorCell=null,this._isSelecting=!1,this.store.set("cellRanges",[]),this.store.set("activeCell",null),this.applySelectionClasses(),this.emitSelectionChanged()}isCellSelected(e,t){return No(e,t,this.store.get("cellRanges"))}addRangeCell(e,t){gt.setActive(this);let o=this.store.get("cellRanges"),r=o.findIndex(i=>i.startRowIndex===e&&i.endRowIndex===e&&i.startColIndex===t&&i.endColIndex===t),n=r>=0?o.filter((i,s)=>s!==r):[...o,{startRowIndex:e,endRowIndex:e,startColIndex:t,endColIndex:t}];this.anchorCell={rowIndex:e,colIndex:t},this.store.set("cellRanges",n),this.store.set("activeCell",n.length>0?{rowIndex:e,colIndex:t}:null),this.applySelectionClasses(),this.emitSelectionChanged()}applySelectionClasses(){let e=this.store.get("cellRanges"),t=this.store.get("activeCell"),o=e.length>0,r=o?e.map(ee):[];for(let n of this.bodyPanels)for(let i of n.querySelectorAll(".pg-cell[data-row-index][data-col-index]")){let s=Number(i.getAttribute("data-row-index")),l=Number(i.getAttribute("data-col-index")),a=o&&No(s,l,e),c=!!t&&t.rowIndex===s&&t.colIndex===l;if(i.classList.toggle("pg-cell--in-selection",a),i.classList.toggle("pg-cell--active-cell",c),a){let p=!1,h=!1,u=!1,g=!1;for(let m of r)s>=m.startRowIndex&&s<=m.endRowIndex&&l>=m.startColIndex&&l<=m.endColIndex&&(s===m.startRowIndex&&(p=!0),s===m.endRowIndex&&(h=!0),l===m.startColIndex&&(u=!0),l===m.endColIndex&&(g=!0));i.classList.toggle("pg-cell--sel-top",p),i.classList.toggle("pg-cell--sel-bottom",h),i.classList.toggle("pg-cell--sel-left",u),i.classList.toggle("pg-cell--sel-right",g)}else i.classList.remove("pg-cell--sel-top","pg-cell--sel-bottom","pg-cell--sel-left","pg-cell--sel-right")}this.updateFillHandle()}renderSelection(e){this.applySelectionClasses()}updateFillHandle(){if(this.isFillDragging)return;let e=this.store.get("cellRanges");if(e.length!==1){this.hideFillHandle();return}let t=ee(e[0]),o=null;for(let r of this.bodyPanels){let n=r.querySelector(`[data-row-index="${t.endRowIndex}"][data-col-index="${t.endColIndex}"]`);if(n){o=n;break}}if(!o){this.hideFillHandle();return}if(!this.fillHandleEl){let r=document.createElement("div");r.className="pg-fill-handle",r.addEventListener("pointerdown",n=>{n.button===0&&(n.preventDefault(),n.stopPropagation(),this.startFillDrag())}),this.fillHandleEl=r}this.fillHandleParentCell!==o&&(this.fillHandleParentCell?.classList.remove("pg-cell--has-fill-handle"),this.fillHandleParentCell=o,o.classList.add("pg-cell--has-fill-handle"),o.appendChild(this.fillHandleEl)),this.fillHandleEl.style.display=""}hideFillHandle(){this.fillHandleEl&&(this.fillHandleEl.style.display="none"),this.fillHandleParentCell?.classList.remove("pg-cell--has-fill-handle"),this.fillHandleParentCell=null}startFillDrag(){let e=this.store.get("cellRanges");e.length&&(this.fillSourceRange=ee(e[0]),this.isFillDragging=!0,this.fillDirection=null,this.fillTargetRow=null,this.fillTargetCol=null,document.addEventListener("pointermove",this.boundFillMouseMove),document.addEventListener("pointerup",this.boundFillMouseUp))}onFillMouseMove(e){!this.isFillDragging||!this.fillSourceRange||(this.processFillPosition(e.clientX,e.clientY),this.fillDragScrollCallback?.(e.clientX,e.clientY))}processFillPosition(e,t){if(!this.isFillDragging||!this.fillSourceRange)return;let r=document.elementFromPoint(e,t)?.closest("[data-row-index][data-col-index]");if(!r){let c=this.dragViewportRectFn?.();if(c){let p=Math.max(c.left+1,Math.min(c.right-1,e)),h=Math.max(c.top+1,Math.min(c.bottom-1,t));r=document.elementFromPoint(p,h)?.closest("[data-row-index][data-col-index]")}}if(!r)return;let n=Number(r.getAttribute("data-row-index")),i=Number(r.getAttribute("data-col-index"));if(isNaN(n)||isNaN(i))return;let s=this.fillSourceRange,l=n<s.startRowIndex?n-s.startRowIndex:n>s.endRowIndex?n-s.endRowIndex:0,a=i<s.startColIndex?i-s.startColIndex:i>s.endColIndex?i-s.endColIndex:0;Math.abs(l)>=Math.abs(a)?(this.fillDirection=l>=0?"down":"up",this.fillTargetRow=n,this.fillTargetCol=null):(this.fillDirection=a>=0?"right":"left",this.fillTargetRow=null,this.fillTargetCol=i),this.updateFillPreview()}updateFillPreview(){for(let i of this.fillPreviewCells)i.classList.remove("pg-cell--fill-preview","pg-cell--fp-top","pg-cell--fp-bottom","pg-cell--fp-left","pg-cell--fp-right");if(this.fillPreviewCells=[],!this.fillSourceRange||!this.fillDirection)return;let e=this.fillSourceRange,t,o,r,n;switch(this.fillDirection){case"down":if(this.fillTargetRow===null||this.fillTargetRow<=e.endRowIndex)return;t=e.endRowIndex+1,o=this.fillTargetRow,r=e.startColIndex,n=e.endColIndex;break;case"up":if(this.fillTargetRow===null||this.fillTargetRow>=e.startRowIndex)return;t=this.fillTargetRow,o=e.startRowIndex-1,r=e.startColIndex,n=e.endColIndex;break;case"right":if(this.fillTargetCol===null||this.fillTargetCol<=e.endColIndex)return;t=e.startRowIndex,o=e.endRowIndex,r=e.endColIndex+1,n=this.fillTargetCol;break;case"left":if(this.fillTargetCol===null||this.fillTargetCol>=e.startColIndex)return;t=e.startRowIndex,o=e.endRowIndex,r=this.fillTargetCol,n=e.startColIndex-1;break;default:return}for(let i of this.bodyPanels)for(let s of i.querySelectorAll(".pg-cell[data-row-index][data-col-index]")){let l=Number(s.getAttribute("data-row-index")),a=Number(s.getAttribute("data-col-index"));l>=t&&l<=o&&a>=r&&a<=n&&(s.classList.add("pg-cell--fill-preview"),l===t&&s.classList.add("pg-cell--fp-top"),l===o&&s.classList.add("pg-cell--fp-bottom"),a===r&&s.classList.add("pg-cell--fp-left"),a===n&&s.classList.add("pg-cell--fp-right"),this.fillPreviewCells.push(s))}}onFillMouseUp(){document.removeEventListener("pointermove",this.boundFillMouseMove),document.removeEventListener("pointerup",this.boundFillMouseUp),this.fillDragEndCallback?.(),this.fillSourceRange&&this.fillDirection&&this.applyFill();for(let e of this.fillPreviewCells)e.classList.remove("pg-cell--fill-preview","pg-cell--fp-top","pg-cell--fp-bottom","pg-cell--fp-left","pg-cell--fp-right");this.fillPreviewCells=[],this.isFillDragging=!1,this.fillSourceRange=null,this.fillDirection=null,this.fillTargetRow=null,this.fillTargetCol=null,this.applySelectionClasses()}applyFill(){if(!this.fillSourceRange||!this.fillDirection)return;let e=this.fillSourceRange,t=e.endRowIndex-e.startRowIndex+1,o=e.endColIndex-e.startColIndex+1,r,n,i,s;switch(this.fillDirection){case"down":if(this.fillTargetRow===null||this.fillTargetRow<=e.endRowIndex)return;r=e.endRowIndex+1,n=this.fillTargetRow,i=e.startColIndex,s=e.endColIndex;break;case"up":if(this.fillTargetRow===null||this.fillTargetRow>=e.startRowIndex)return;r=this.fillTargetRow,n=e.startRowIndex-1,i=e.startColIndex,s=e.endColIndex;break;case"right":if(this.fillTargetCol===null||this.fillTargetCol<=e.endColIndex)return;r=e.startRowIndex,n=e.endRowIndex,i=e.endColIndex+1,s=this.fillTargetCol;break;case"left":if(this.fillTargetCol===null||this.fillTargetCol>=e.startColIndex)return;r=e.startRowIndex,n=e.endRowIndex,i=this.fillTargetCol,s=e.startColIndex-1;break;default:return}if(r>n||i>s)return;let l=this.store.get("visibleRows"),a=this.getVisibleColumns(),c=[];for(let p=r;p<=n;p++){let h=l[p];if(!(!h||h.type!=="data"))for(let u=i;u<=s;u++){let g=a[u];if(!g)continue;let m,f,C=this.fillDirection;C==="down"?(m=e.startRowIndex+(p-r)%t,f=u):C==="up"?(m=e.endRowIndex-(n-p)%t,f=u):C==="right"?(m=p,f=e.startColIndex+(u-i)%o):(m=p,f=e.endColIndex-(s-u)%o);let b=l[m];if(!b||b.type!=="data")continue;let v=a[f];if(!v)continue;let w=b.data[v.field],E=v.type??"string",R=g.type??"string",S=E!==R?this.coerceToColumnType(w,R):w,I=h.data[g.field];Object.is(I,S)||(c.push({nodeId:h.nodeId,field:g.field,oldValue:I,newValue:S}),h.data[g.field]=S)}}if(c.length>0){this.undoRedoEngine?.record({type:"paste",changes:c}),this.store.set("allRows",[...this.store.get("allRows")]),this.dataChangedCallback?.(new Set(c.map(f=>f.nodeId)));let p={startRowIndex:Math.min(e.startRowIndex,r),endRowIndex:Math.max(e.endRowIndex,n),startColIndex:Math.min(e.startColIndex,i),endColIndex:Math.max(e.endColIndex,s)};this.anchorCell={rowIndex:p.startRowIndex,colIndex:p.startColIndex},this.store.set("cellRanges",[p]),this.store.set("activeCell",{rowIndex:p.startRowIndex,colIndex:p.startColIndex}),this.emitSelectionChanged();let h=r,u=n,g=i,m=s;setTimeout(()=>this.flashFillArea(h,u,g,m),0)}}flashFillArea(e,t,o,r,n="pg-cell--fill-flash"){let i=[];for(let s of this.bodyPanels)for(let l of s.querySelectorAll(".pg-cell[data-row-index][data-col-index]")){let a=Number(l.getAttribute("data-row-index")),c=Number(l.getAttribute("data-col-index"));a>=e&&a<=t&&c>=o&&c<=r&&i.push(l)}for(let s of i)s.classList.remove("pg-cell--fill-flash","pg-cell--cut-flash"),s.offsetWidth,s.classList.add(n);setTimeout(()=>{for(let s of i)s.classList.remove(n)},700)}moveActiveCell(e,t,o,r,n=!1){let i=this.store.get("activeCell");if(!i)return;let s=Math.max(0,Math.min(o-1,i.rowIndex+e)),l=Math.max(0,Math.min(r-1,i.colIndex+t));n?this.extendSelection(s,l):this.startSelection(s,l)}jumpToEdge(e,t,o,r=!1){let n=this.store.get("activeCell");if(!n)return;let i=n.rowIndex,s=n.colIndex;switch(e){case"up":i=0;break;case"down":i=t-1;break;case"left":s=0;break;case"right":s=o-1;break}r?this.extendSelection(i,s):this.startSelection(i,s)}setChartOpenCallback(e){this.chartOpenCallback=e}async copySelection(e,t){return this.flashSelection("copy"),this.clipboardEngine.copyRangesToClipboard(this.store.get("cellRanges"),e,t,!1,this.getLeafGroupField())}async copySelectionWithHeaders(e,t){return this.flashSelection("copy"),this.clipboardEngine.copyRangesToClipboard(this.store.get("cellRanges"),e,t,!0,this.getLeafGroupField())}async cutSelection(e,t){let o=this.store.get("cellRanges"),r=this.getLeafGroupField();await this.clipboardEngine.copyRangesToClipboard(o,e,t,!1,r);let n=[];for(let p of o){let h=ee(p),u=h.startColIndex<0;for(let g=h.startRowIndex;g<=h.endRowIndex;g++){let m=e[g];if(!m||m.type!=="data")continue;if(u&&r){let C=m.data[r];n.push({nodeId:m.nodeId,field:r,oldValue:C,newValue:null}),m.data[r]=null}let f=u?0:h.startColIndex;for(let C=f;C<=h.endColIndex;C++){let b=t[C];if(!b)continue;let v=m.data[b.field];n.push({nodeId:m.nodeId,field:b.field,oldValue:v,newValue:null}),m.data[b.field]=null}}}this.undoRedoEngine?.record({type:"cut",changes:n}),this.clearCutCellsInDom(o),this.store.set("allRows",[...this.store.get("allRows")]);let i=new Set(n.map(p=>p.nodeId));this.dataChangedCallback?.(i);let s=1/0,l=-1/0,a=1/0,c=-1/0;for(let p of o){let h=ee(p);h.startRowIndex<s&&(s=h.startRowIndex),h.endRowIndex>l&&(l=h.endRowIndex),h.startColIndex<a&&(a=h.startColIndex),h.endColIndex>c&&(c=h.endColIndex)}if(s!==1/0){let p=s,h=l,u=Math.max(0,a),g=c;requestAnimationFrame(()=>requestAnimationFrame(()=>this.flashFillArea(p,h,u,g,"pg-cell--cut-flash")))}}async pasteSelection(e,t){let o=this.store.get("activeCell");if(!o)return;let r=await this.clipboardEngine.pasteFromClipboard();if(!r.length)return;let n=o.rowIndex,i=o.colIndex,s=this.getLeafGroupField(),l=i<0&&!!s,a=[],c=n,p=0,h=0;for(let u=n;h<r.length&&u<e.length;u++){let g=e[u];if(!g||g.type!=="data")continue;let m=r[h++];c=u,m.length>p&&(p=m.length);for(let f=0;f<m.length;f++){let C=i+f;if(l&&C<0){let b=s;a.push({nodeId:g.nodeId,field:b,oldValue:g.data[b],newValue:m[f]}),g.data[b]=m[f]}else{let b=t[C];if(b){let v=this.coerceToColumnType(m[f],b.type??"string");a.push({nodeId:g.nodeId,field:b.field,oldValue:g.data[b.field],newValue:v}),g.data[b.field]=v}}}}if(this.undoRedoEngine?.record({type:"paste",changes:a}),this.store.set("allRows",[...this.store.get("allRows")]),this.dataChangedCallback?.(new Set(a.map(u=>u.nodeId))),a.length>0&&p>0){let u=l?0:Math.max(0,i),g=l?p-2:i+p-1;if(g>=u){let m=n,f=c,C=u,b=g;requestAnimationFrame(()=>requestAnimationFrame(()=>this.flashFillArea(m,f,C,b)))}}}performUndo(){let e=this.undoRedoEngine?.undo();e&&this.applyUndoRedoChanges(e)}performRedo(){let e=this.undoRedoEngine?.redo();e&&this.applyUndoRedoChanges(e)}applyUndoRedoChanges(e){let t=this.store.get("allRows"),o=new Map;for(let v of t)o.set(v.nodeId,v);for(let v of e){let w=o.get(v.nodeId);w&&(w.data[v.field]=v.newValue)}if(this.store.set("allRows",[...t]),this.dataChangedCallback?.(new Set(e.map(v=>v.nodeId))),e.length===0)return;let r=this.store.get("visibleRows"),n=this.getVisibleColumns(),i=new Map;for(let v=0;v<r.length;v++)i.set(r[v].nodeId,v);let s=new Map;for(let v=0;v<n.length;v++)s.set(n[v].field,v);let l=1/0,a=-1/0,c=1/0,p=-1/0;for(let v of e){let w=i.get(v.nodeId),E=s.get(v.field);w!==void 0&&(w<l&&(l=w),w>a&&(a=w)),E!==void 0&&(E<c&&(c=E),E>p&&(p=E))}if(l===1/0)return;let h=c!==1/0?c:0,u=p!==1/0?p:0,g={startRowIndex:l,endRowIndex:a,startColIndex:h,endColIndex:u};this.anchorCell={rowIndex:l,colIndex:h},this.store.set("cellRanges",[g]),this.store.set("activeCell",{rowIndex:l,colIndex:h}),this.emitSelectionChanged(),this.scrollToCellCallback?.(l,h);let m=l,f=a,C=Math.max(0,h),b=Math.max(0,u);requestAnimationFrame(()=>requestAnimationFrame(()=>this.flashFillArea(m,f,C,b)))}getLeafGroupField(){let e=this.store.get("groupedColumnIds");if(e.length===0)return;let t=e[e.length-1];return this.store.get("columns").find(r=>r.colId===t)?.field}showContextMenu(e,t){if(!this.contextMenuEl)return;let o=window.innerWidth,r=window.innerHeight,n=200,i=300,s=e+n>o?o-n-4:e,l=t+i>r?r-i-4:t;this.contextMenuEl.style.left=`${s}px`,this.contextMenuEl.style.top=`${l}px`,this.contextMenuEl.classList.add("pg-context-menu--visible"),requestAnimationFrame(()=>{document.addEventListener("pointerdown",this.boundHideCtx,{once:!0})})}hideContextMenu(){this.contextMenuEl?.classList.remove("pg-context-menu--visible")}positionSubmenu(e,t){let r=window.innerWidth,n=window.innerHeight;e.classList.remove("pg-context-menu__item--sub-left"),t.style.top="";let i=e.getBoundingClientRect(),s=t.offsetWidth||185,l=t.offsetHeight,a=i.right+s>r-4,c=i.left-s>=4;if(a&&c&&e.classList.add("pg-context-menu__item--sub-left"),l>0){let p=i.top-4,h=p+l-(n-4);if(h>0){let u=Math.min(h,p-4);t.style.top=`${-4-u}px`}}}flashSelection(e){let t=e==="copy"?"pg-cell--copy-flash":"pg-cell--cut-flash",o=[];for(let r of this.bodyPanels)for(let n of r.querySelectorAll(".pg-cell--in-selection, .pg-cell--active-cell"))o.push(n);for(let r of o)r.classList.remove("pg-cell--copy-flash","pg-cell--cut-flash"),r.offsetWidth,r.classList.add(t);setTimeout(()=>{for(let r of o)r.classList.remove(t)},700)}clearCutCellsInDom(e){let t=e.map(ee);for(let o of this.bodyPanels)for(let r of o.querySelectorAll(".pg-cell[data-row-index][data-col-index]")){let n=Number(r.getAttribute("data-row-index")),i=Number(r.getAttribute("data-col-index"));if(t.some(l=>n>=l.startRowIndex&&n<=l.endRowIndex&&i>=l.startColIndex&&i<=l.endColIndex)){let l=r.querySelector(".pg-cell__inner");l&&(l.textContent="")}}}getVisibleColumns(){return this.store.get("columns").filter(e=>e.visible!==!1)}coerceToColumnType(e,t){if(e==null)return e;switch(t){case"number":case"currency":case"percentage":return Number(e);case"date":return e instanceof Date?new Date(e.getTime()):new Date(String(e));case"boolean":return!!e;case"string":return typeof e=="string"?e:String(e);default:return e}}onKeydown(e){let t=e.target;if(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.contentEditable==="true")return;let o=this.store.get("activeCell");if(!o)return;let r=e.ctrlKey||e.metaKey,n=e.key.length===1?e.key.toLowerCase():e.key;if(r&&n==="z"){e.preventDefault(),this.performUndo();return}if(r&&n==="y"){e.preventDefault(),this.performRedo();return}let i=this.store.get("visibleRows"),s=this.getVisibleColumns();if(i.length===0||s.length===0)return;let l=e.shiftKey;switch(n){case"ArrowUp":e.preventDefault(),r?this.jumpToEdge("up",i.length,s.length,l):this.moveActiveCell(-1,0,i.length,s.length,l);break;case"ArrowDown":e.preventDefault(),r?this.jumpToEdge("down",i.length,s.length,l):this.moveActiveCell(1,0,i.length,s.length,l);break;case"ArrowLeft":if(e.preventDefault(),!r&&!l&&this.treeToggleHandler){let c=i[o.rowIndex];if(c&&this.treeToggleHandler(c,"left"))break}if(r)this.jumpToEdge("left",i.length,s.length,l);else if(l)this.moveActiveCell(0,-1,i.length,s.length,!0);else{let a=o;a.colIndex===0&&a.rowIndex>0?this.startSelection(a.rowIndex-1,s.length-1):this.moveActiveCell(0,-1,i.length,s.length,!1)}break;case"ArrowRight":if(e.preventDefault(),!r&&!l&&this.treeToggleHandler){let c=i[o.rowIndex];if(c&&this.treeToggleHandler(c,"right"))break}if(r)this.jumpToEdge("right",i.length,s.length,l);else if(l)this.moveActiveCell(0,1,i.length,s.length,!0);else{let a=o;a.colIndex>=s.length-1&&a.rowIndex<i.length-1?this.startSelection(a.rowIndex+1,0):this.moveActiveCell(0,1,i.length,s.length,!1)}break;case"PageDown":{e.preventDefault();let a=this.getViewportRowCountCallback?.()??10;this.moveActiveCell(a,0,i.length,s.length,l);break}case"PageUp":{e.preventDefault();let a=this.getViewportRowCountCallback?.()??10;this.moveActiveCell(-a,0,i.length,s.length,l);break}case"Home":e.preventDefault(),r?this.startSelection(0,0,l):this.moveActiveCell(0,-o.colIndex,i.length,s.length,l);break;case"End":e.preventDefault(),r?this.startSelection(i.length-1,s.length-1,l):this.moveActiveCell(0,s.length-1-o.colIndex,i.length,s.length,l);break;case"Tab":{e.preventDefault();let a=o;e.shiftKey?a.colIndex===0&&a.rowIndex>0?this.startSelection(a.rowIndex-1,s.length-1):this.moveActiveCell(0,-1,i.length,s.length,!1):a.colIndex>=s.length-1&&a.rowIndex<i.length-1?this.startSelection(a.rowIndex+1,0):this.moveActiveCell(0,1,i.length,s.length,!1);break}case"Enter":if(e.preventDefault(),!e.shiftKey&&this.enterEditHandler){let a=o;if(this.enterEditHandler(a.rowIndex,a.colIndex))break}this.moveActiveCell(e.shiftKey?-1:1,0,i.length,s.length,!1);break;case"c":r&&(e.preventDefault(),this.copySelection(i,s));break;case"x":r&&(e.preventDefault(),this.cutSelection(i,s));break;case"v":r&&(e.preventDefault(),this.pasteSelection(i,s));break;case"a":r&&(e.preventDefault(),this.selectAll(i.length,s.length));break;case"Delete":case"Backspace":this.store.get("cellRanges").length>0&&(e.preventDefault(),this.cutSelection(i,s));break;case"Escape":this.clearSelection();break}}selectAll(e,t){let r=this.store.get("groupedColumnIds").length>0?-1:0;this.anchorCell={rowIndex:0,colIndex:r},this.store.set("cellRanges",[{startRowIndex:0,endRowIndex:e-1,startColIndex:r,endColIndex:t-1}]),this.store.set("activeCell",{rowIndex:0,colIndex:r}),this.emitSelectionChanged()}buildContextMenu(){let e='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><circle cx="6" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><line x1="20" y1="4" x2="8.12" y2="15.88"/><line x1="14.47" y1="14.48" x2="20" y2="20"/><line x1="8.12" y1="8.12" x2="12" y2="12"/></svg>',t='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>',o='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><rect x="8" y="2" width="8" height="4" rx="1"/></svg>',r='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="18" y1="20" x2="18" y2="10"/><line x1="12" y1="20" x2="12" y2="4"/><line x1="6" y1="20" x2="6" y2="14"/></svg>',n='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>',i=document.createElement("div");i.className="pg-context-menu",i.setAttribute("role","menu");let s=(E,R,S,I)=>{let T=document.createElement("button");T.className="pg-context-menu__item",T.setAttribute("role","menuitem"),T.setAttribute("data-action",E);let M=document.createElement("span");M.className="pg-context-menu__icon",M.innerHTML=R;let L=document.createElement("span");if(L.className="pg-context-menu__label",L.textContent=S,T.appendChild(M),T.appendChild(L),I){let _=document.createElement("span");_.className="pg-context-menu__kbd",_.textContent=I,T.appendChild(_)}return T},l=()=>{let E=document.createElement("div");return E.className="pg-context-menu__sep",E.setAttribute("role","separator"),E},a=(E,R)=>{let S=document.createElement("button");S.className="pg-context-menu__item",S.setAttribute("role","menuitem"),S.setAttribute("data-chart-type",E);let I=document.createElement("span");return I.className="pg-context-menu__label",I.textContent=R,S.appendChild(I),S},c=(E,R)=>{let S=document.createElement("div");S.className="pg-context-menu__item pg-context-menu__item--has-sub",S.setAttribute("role","menuitem");let I=document.createElement("span");I.className="pg-context-menu__label",I.textContent=E,S.appendChild(I);let T=document.createElement("div");T.className="pg-context-menu__sub";for(let M of R)T.appendChild(M);return S.appendChild(T),S};i.appendChild(s("cut",e,"Cut","Ctrl+X")),i.appendChild(s("copy",t,"Copy","Ctrl+C")),i.appendChild(s("copy-headers",t,"Copy with Headers")),i.appendChild(s("paste",o,"Paste","Ctrl+V")),i.appendChild(l());let p=document.createElement("div");p.className="pg-context-menu__item pg-context-menu__item--has-sub",p.setAttribute("role","menuitem");let h=document.createElement("span");h.className="pg-context-menu__icon",h.innerHTML=r;let u=document.createElement("span");u.className="pg-context-menu__label",u.textContent="Chart Range",p.appendChild(h),p.appendChild(u);let g=document.createElement("div");g.className="pg-context-menu__sub",g.appendChild(c("Column",[a("column-grouped","Grouped"),a("column-stacked","Stacked"),a("column-100stacked","100% Stacked")])),g.appendChild(c("Bar",[a("bar-grouped","Grouped"),a("bar-stacked","Stacked"),a("bar-100stacked","100% Stacked")])),g.appendChild(a("pie","Pie")),g.appendChild(a("line","Line")),g.appendChild(a("area","Area")),g.appendChild(a("scatter","X Y (Scatter)")),g.appendChild(a("polar","Polar")),g.appendChild(a("funnel","Funnel")),p.appendChild(g),i.appendChild(p),i.appendChild(l());let m=document.createElement("div");m.className="pg-context-menu__item pg-context-menu__item--has-sub",m.setAttribute("role","menuitem");let f=document.createElement("span");f.className="pg-context-menu__icon",f.innerHTML=n;let C=document.createElement("span");C.className="pg-context-menu__label",C.textContent="Export",m.appendChild(f),m.appendChild(C);let b=document.createElement("div");b.className="pg-context-menu__sub";let v=document.createElement("button");v.className="pg-context-menu__item",v.setAttribute("role","menuitem"),v.setAttribute("data-action","export-csv");let w=document.createElement("span");w.className="pg-context-menu__label",w.textContent="Export as CSV",v.appendChild(w),b.appendChild(v),m.appendChild(b),i.appendChild(m),i.addEventListener("pointerdown",E=>E.stopPropagation()),i.addEventListener("mouseover",E=>{let R=E.target.closest(".pg-context-menu__item--has-sub");if(!R||!i.contains(R))return;let S=R.querySelector(":scope > .pg-context-menu__sub");S&&this.positionSubmenu(R,S)}),i.addEventListener("click",E=>{let R=E.target.closest("[data-action],[data-chart-type]");if(!R)return;let S=R.getAttribute("data-action"),I=R.getAttribute("data-chart-type");if(!S&&!I)return;this.hideContextMenu();let T=this.store.get("visibleRows"),M=this.getVisibleColumns();if(I){this.chartOpenCallback?.(I);return}switch(S){case"cut":this.cutSelection(T,M);break;case"copy":this.copySelection(T,M);break;case"copy-headers":this.copySelectionWithHeaders(T,M);break;case"paste":this.pasteSelection(T,M);break;case"selectAll":this.selectAll(T.length,M.length);break;case"export-csv":this.exportAsCsv(T,M);break}}),document.body.appendChild(i),this.contextMenuEl=i}exportAsCsv(e,t){let o=t.map(a=>`"${a.header}"`).join(","),r=e.filter(a=>a.type==="data").map(a=>t.map(c=>{let p=a.data[c.field];return`"${(p==null?"":String(p)).replace(/"/g,'""')}"`}).join(",")).join(`
4508
4276
  `),n=`${o}
4509
- ${r}`,i=new Blob([n],{type:"text/csv"}),s=URL.createObjectURL(i),l=document.createElement("a");l.href=s,l.download="export.csv",l.click(),URL.revokeObjectURL(s)}emitSelectionChanged(){this.eventBus.emit(x.CELL_SELECTION_CHANGED,{ranges:this.store.get("cellRanges")})}};var Pt="--pg";function Zr(d){return d.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`)}function Fo(d,e,t){for(let[o,r]of Object.entries(d)){let n=`${e}-${Zr(o)}`;typeof r=="string"||typeof r=="number"?t.set(n,String(r)):typeof r=="object"&&r!==null&&Fo(r,n,t)}}var me=class{constructor(){this.styleEl=null;this.scopeEl=null}inject(e,t){this.scopeEl=t??document.documentElement;let o=new Map;Fo(e,Pt,o);for(let[r,n]of o)this.scopeEl.style.setProperty(r,n)}injectAsStylesheet(e,t=":root"){this.styleEl&&this.styleEl.remove();let o=new Map;Fo(e,Pt,o);let r=[`${t} {`];for(let[n,i]of o)r.push(` ${n}: ${i};`);r.push("}"),this.styleEl=document.createElement("style"),this.styleEl.setAttribute("data-photon-grid-theme",""),this.styleEl.textContent=r.join(`
4510
- `),document.head.appendChild(this.styleEl)}remove(){if(this.styleEl&&(this.styleEl.remove(),this.styleEl=null),this.scopeEl){let e=this.scopeEl.style;for(let t=e.length-1;t>=0;t--){let o=e.item(t);o.startsWith(Pt)&&e.removeProperty(o)}}}getVar(e){return`var(${Pt}-${Zr(e)})`}};var gt={name:"light",displayName:"Light",mode:"light",tokens:{colors:{primary:"#2563eb",primaryHover:"#1d4ed8",primaryActive:"#1e40af",primaryText:"#ffffff",secondary:"#64748b",secondaryHover:"#475569",surface:"#ffffff",surfaceRaised:"#ffffff",surfaceOverlay:"#ffffff",surfaceSunken:"#f8fafc",background:"#f8fafc",backgroundAlt:"#f1f5f9",border:"#e2e8f0",borderStrong:"#cbd5e1",borderFocus:"#2563eb",textPrimary:"#0f172a",textSecondary:"#475569",textDisabled:"#94a3b8",textInverse:"#ffffff",headerBackground:"#f8fafc",headerText:"#374151",headerBorder:"#e2e8f0",headerHover:"#f1f5f9",rowBackground:"#ffffff",rowBackgroundAlt:"#f8fafc",rowHover:"#f0f7ff",rowSelected:"#eff6ff",rowSelectedBorder:"#bfdbfe",cellEditBackground:"#ffffff",cellEditBorder:"#2563eb",selectionBackground:"rgba(37, 99, 235, 0.08)",selectionBorder:"rgba(37, 99, 235, 0.85)",selectionCorner:"#2563eb",footerBackground:"#f8fafc",footerText:"#374151",footerBorder:"#e2e8f0",pinnedBackground:"#ffffff",pinnedShadow:"4px 0 6px -2px rgba(15,23,42,0.08)",filterBackground:"#ffffff",filterBorder:"#e2e8f0",filterActiveBackground:"#eff6ff",filterActiveBorder:"#93c5fd",scrollbarTrack:"#f1f5f9",scrollbarThumb:"#cbd5e1",scrollbarThumbHover:"#94a3b8",resizeHandleColor:"#e2e8f0",resizeHandleActiveColor:"#2563eb",dragPreviewBackground:"#ffffff",dragPreviewBorder:"#e2e8f0",dragOverHighlight:"rgba(37, 99, 235, 0.06)",checkboxBackground:"#ffffff",checkboxCheckedBackground:"#2563eb",checkboxBorder:"#cbd5e1",badgeBackground:"#eff6ff",badgeText:"#1d4ed8",groupRowBackground:"#f8fafc",groupRowBorder:"#e2e8f0",tooltipBackground:"#1e293b",tooltipText:"#f1f5f9",success:"#16a34a",warning:"#d97706",error:"#dc2626",info:"#0284c7",successLight:"#dcfce7",warningLight:"#fef3c7",errorLight:"#fee2e2",infoLight:"#e0f2fe"},typography:{fontFamily:"'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif",fontFamilyMono:"'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace",fontSizeXs:"11px",fontSizeSm:"12px",fontSizeMd:"13px",fontSizeLg:"14px",fontSizeXl:"16px",fontWeightRegular:"400",fontWeightMedium:"500",fontWeightSemiBold:"600",fontWeightBold:"700",lineHeightTight:"1.2",lineHeightBase:"1.5",lineHeightRelaxed:"1.75",letterSpacingTight:"-0.01em",letterSpacingBase:"0",letterSpacingWide:"0.025em"},spacing:{xs:"4px",sm:"8px",md:"12px",lg:"16px",xl:"24px",xxl:"32px"},sizing:{rowHeightSm:"36px",rowHeightMd:"48px",rowHeightLg:"60px",headerRowHeight:"42px",footerRowHeight:"44px",filterRowHeight:"36px",scrollbarWidth:"8px",resizeHandleWidth:"4px",columnMinWidth:"40px",checkboxSize:"16px",iconSizeSm:"14px",iconSizeMd:"16px",iconSizeLg:"20px"},borders:{radiusSm:"4px",radiusMd:"6px",radiusLg:"8px",radiusPill:"9999px",widthThin:"1px",widthBase:"1px",widthThick:"2px",styleBase:"solid"},shadows:{none:"none",xs:"0 1px 2px rgba(15,23,42,0.05)",sm:"0 1px 3px rgba(15,23,42,0.08), 0 1px 2px rgba(15,23,42,0.06)",md:"0 4px 6px -1px rgba(15,23,42,0.08), 0 2px 4px -2px rgba(15,23,42,0.05)",lg:"0 10px 15px -3px rgba(15,23,42,0.08), 0 4px 6px -4px rgba(15,23,42,0.05)",pinnedLeft:"4px 0 8px -2px rgba(15,23,42,0.10)",pinnedRight:"-4px 0 8px -2px rgba(15,23,42,0.10)",dropdown:"0 8px 24px rgba(15,23,42,0.12), 0 2px 8px rgba(15,23,42,0.08)",tooltip:"0 4px 12px rgba(15,23,42,0.15)",dragPreview:"0 8px 24px rgba(15,23,42,0.18), 0 2px 8px rgba(15,23,42,0.10)"},transitions:{durationFast:"100ms",durationBase:"150ms",durationSlow:"250ms",easingBase:"cubic-bezier(0.4, 0, 0.2, 1)",easingDecelerate:"cubic-bezier(0, 0, 0.2, 1)",easingAccelerate:"cubic-bezier(0.4, 0, 1, 1)"}}};var Gt={name:"dark",displayName:"Dark",mode:"dark",tokens:{colors:{primary:"#3b82f6",primaryHover:"#60a5fa",primaryActive:"#93c5fd",primaryText:"#ffffff",secondary:"#94a3b8",secondaryHover:"#cbd5e1",surface:"#1e293b",surfaceRaised:"#263347",surfaceOverlay:"#1e293b",surfaceSunken:"#0f172a",background:"#0f172a",backgroundAlt:"#1e293b",border:"#334155",borderStrong:"#475569",borderFocus:"#3b82f6",textPrimary:"#f1f5f9",textSecondary:"#94a3b8",textDisabled:"#475569",textInverse:"#0f172a",headerBackground:"#1e293b",headerText:"#cbd5e1",headerBorder:"#334155",headerHover:"#263347",rowBackground:"#0f172a",rowBackgroundAlt:"#1a2540",rowHover:"#1e3a5f",rowSelected:"#1e3a5f",rowSelectedBorder:"#3b82f6",cellEditBackground:"#1e293b",cellEditBorder:"#3b82f6",selectionBackground:"rgba(59, 130, 246, 0.15)",selectionBorder:"rgba(59, 130, 246, 0.8)",selectionCorner:"#3b82f6",footerBackground:"#1e293b",footerText:"#94a3b8",footerBorder:"#334155",pinnedBackground:"#0f172a",pinnedShadow:"4px 0 6px -2px rgba(0,0,0,0.4)",filterBackground:"#1e293b",filterBorder:"#334155",filterActiveBackground:"#1e3a5f",filterActiveBorder:"#3b82f6",scrollbarTrack:"#1e293b",scrollbarThumb:"#475569",scrollbarThumbHover:"#64748b",resizeHandleColor:"#334155",resizeHandleActiveColor:"#3b82f6",dragPreviewBackground:"#1e293b",dragPreviewBorder:"#475569",dragOverHighlight:"rgba(59, 130, 246, 0.1)",checkboxBackground:"#1e293b",checkboxCheckedBackground:"#3b82f6",checkboxBorder:"#475569",badgeBackground:"#1e3a5f",badgeText:"#93c5fd",groupRowBackground:"#1e293b",groupRowBorder:"#334155",tooltipBackground:"#f1f5f9",tooltipText:"#0f172a",success:"#22c55e",warning:"#f59e0b",error:"#ef4444",info:"#38bdf8",successLight:"#052e16",warningLight:"#1c1007",errorLight:"#1f0909",infoLight:"#082f49"},typography:{fontFamily:"'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif",fontFamilyMono:"'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace",fontSizeXs:"11px",fontSizeSm:"12px",fontSizeMd:"13px",fontSizeLg:"14px",fontSizeXl:"16px",fontWeightRegular:"400",fontWeightMedium:"500",fontWeightSemiBold:"600",fontWeightBold:"700",lineHeightTight:"1.2",lineHeightBase:"1.5",lineHeightRelaxed:"1.75",letterSpacingTight:"-0.01em",letterSpacingBase:"0",letterSpacingWide:"0.025em"},spacing:{xs:"4px",sm:"8px",md:"12px",lg:"16px",xl:"24px",xxl:"32px"},sizing:{rowHeightSm:"36px",rowHeightMd:"48px",rowHeightLg:"60px",headerRowHeight:"42px",footerRowHeight:"44px",filterRowHeight:"36px",scrollbarWidth:"8px",resizeHandleWidth:"4px",columnMinWidth:"40px",checkboxSize:"16px",iconSizeSm:"14px",iconSizeMd:"16px",iconSizeLg:"20px"},borders:{radiusSm:"4px",radiusMd:"6px",radiusLg:"8px",radiusPill:"9999px",widthThin:"1px",widthBase:"1px",widthThick:"2px",styleBase:"solid"},shadows:{none:"none",xs:"0 1px 2px rgba(0,0,0,0.3)",sm:"0 1px 3px rgba(0,0,0,0.35), 0 1px 2px rgba(0,0,0,0.25)",md:"0 4px 6px -1px rgba(0,0,0,0.35), 0 2px 4px -2px rgba(0,0,0,0.25)",lg:"0 10px 15px -3px rgba(0,0,0,0.4), 0 4px 6px -4px rgba(0,0,0,0.3)",pinnedLeft:"4px 0 8px -2px rgba(0,0,0,0.4)",pinnedRight:"-4px 0 8px -2px rgba(0,0,0,0.4)",dropdown:"0 8px 24px rgba(0,0,0,0.45), 0 2px 8px rgba(0,0,0,0.3)",tooltip:"0 4px 12px rgba(0,0,0,0.5)",dragPreview:"0 8px 24px rgba(0,0,0,0.5), 0 2px 8px rgba(0,0,0,0.35)"},transitions:{durationFast:"100ms",durationBase:"150ms",durationSlow:"250ms",easingBase:"cubic-bezier(0.4, 0, 0.2, 1)",easingDecelerate:"cubic-bezier(0, 0, 0.2, 1)",easingAccelerate:"cubic-bezier(0.4, 0, 1, 1)"}}};var $e=class{constructor(e){this.eventBus=e;this.injector=new me;this.rootInjector=new me;this.registry=new Map;this.activeTheme=null;this.scopeEl=null;this.registry.set("light",gt),this.registry.set("dark",Gt)}registerTheme(e){this.registry.set(e.name,e)}applyTheme(e,t){let o;typeof e=="string"?(o=this.registry.get(e),o||(console.warn(`[PhotonGrid] Theme "${e}" not found. Falling back to "light".`),o=gt)):(o=e,this.registry.set(o.name,o)),this.scopeEl=t??null,this.activeTheme=o;let r=t?`[data-photon-grid-id="${t.getAttribute("data-photon-grid-id")}"]`:":root";this.injector.injectAsStylesheet(o.tokens,r),this.rootInjector.inject(o.tokens,document.documentElement),t?(t.setAttribute("data-pg-theme",o.name),t.setAttribute("data-pg-mode",o.mode)):(document.documentElement.setAttribute("data-pg-theme",o.name),document.documentElement.setAttribute("data-pg-mode",o.mode)),this.eventBus.emit(x.THEME_CHANGED,{themeName:o.name})}getActiveTheme(){return this.activeTheme}getTheme(e){return this.registry.get(e)}getAllThemes(){return Array.from(this.registry.values())}toggleDarkMode(){let e=this.activeTheme;if(!e)return;let t=e.mode==="light"?"dark":"light",o=this.registry.get(t);o&&this.applyTheme(o,this.scopeEl??void 0)}isDarkMode(){return this.activeTheme?.mode==="dark"}destroy(){this.injector.remove(),this.rootInjector.remove(),this.activeTheme=null}};var mt={sortAsc:'<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sort-asc" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align: text-bottom;"><path d="m12.927 2.573 3 3A.25.25 0 0 1 15.75 6H13.5v6.75a.75.75 0 0 1-1.5 0V6H9.75a.25.25 0 0 1-.177-.427l3-3a.25.25 0 0 1 .354 0ZM0 12.25a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75Zm0-4a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5H.75A.75.75 0 0 1 0 8.25Zm0-4a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5H.75A.75.75 0 0 1 0 4.25Z"></path></svg>',sortDesc:'<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sort-desc" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align: text-bottom;"><path d="M0 4.25a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 0 1.5H.75A.75.75 0 0 1 0 4.25Zm0 4a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5H.75A.75.75 0 0 1 0 8.25Zm0 4a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75ZM13.5 10h2.25a.25.25 0 0 1 .177.427l-3 3a.25.25 0 0 1-.354 0l-3-3A.25.25 0 0 1 9.75 10H12V3.75a.75.75 0 0 1 1.5 0V10Z"></path></svg>',sortNone:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 3L11 7H5L8 3Z" fill="currentColor" opacity="0.4"/><path d="M8 13L5 9H11L8 13Z" fill="currentColor" opacity="0.4"/></svg>',filter:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 4H14M5 8H11M7 12H9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',filterActive:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 4H14M5 8H11M7 12H9" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><circle cx="12" cy="4" r="3" fill="currentColor"/></svg>',menu:'<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align: text-bottom;"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg>',menuHorizontal:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="3" cy="8" r="1.5" fill="currentColor"/><circle cx="8" cy="8" r="1.5" fill="currentColor"/><circle cx="13" cy="8" r="1.5" fill="currentColor"/></svg>',chevronRight:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6 4L10 8L6 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',chevronDown:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 6L8 10L12 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',chevronUp:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 10L8 6L12 10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',chevronLeft:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 4L6 8L10 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',expand:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 6V2H6M10 2H14V6M14 10V14H10M6 14H2V10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',collapse:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6 2V6H2M14 6H10V2M10 14V10H14M2 10H6V14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',fullscreen:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 6V2H6M10 2H14V6M14 10V14H10M6 14H2V10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',close:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 4L12 12M12 4L4 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',arrowUp:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 13V3M3.5 7.5L8 3L12.5 7.5" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"/></svg>',sparkle:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 1.5L9.3 5.7L13.5 7L9.3 8.3L8 12.5L6.7 8.3L2.5 7L6.7 5.7L8 1.5Z" fill="currentColor"/><path d="M13 10.5L13.5 12L15 12.5L13.5 13L13 14.5L12.5 13L11 12.5L12.5 12L13 10.5Z" fill="currentColor"/></svg>',check:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3 8L6.5 11.5L13 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',minus:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3 8H13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',drag:'<svg width="64px" height="64px" viewBox="-2.4 -2.4 28.80 28.80" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="#000000"><g id="SVGRepo_bgCarrier" stroke-width="0"><path transform="translate(-2.4, -2.4), scale(1.7999999999999998)" fill="#7ed0ec" d="M9.166.33a2.25 2.25 0 00-2.332 0l-5.25 3.182A2.25 2.25 0 00.5 5.436v5.128a2.25 2.25 0 001.084 1.924l5.25 3.182a2.25 2.25 0 002.332 0l5.25-3.182a2.25 2.25 0 001.084-1.924V5.436a2.25 2.25 0 00-1.084-1.924L9.166.33z" strokewidth="0"></path></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"> <g id="Interface / Drag_Horizontal"> <g id="Vector"> <path d="M18 14C17.4477 14 17 14.4477 17 15C17 15.5523 17.4477 16 18 16C18.5523 16 19 15.5523 19 15C19 14.4477 18.5523 14 18 14Z" stroke="#757575" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> <path d="M12 14C11.4477 14 11 14.4477 11 15C11 15.5523 11.4477 16 12 16C12.5523 16 13 15.5523 13 15C13 14.4477 12.5523 14 12 14Z" stroke="#757575" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> <path d="M6 14C5.44772 14 5 14.4477 5 15C5 15.5523 5.44772 16 6 16C6.55228 16 7 15.5523 7 15C7 14.4477 6.55228 14 6 14Z" stroke="#757575" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> <path d="M18 8C17.4477 8 17 8.44772 17 9C17 9.55228 17.4477 10 18 10C18.5523 10 19 9.55228 19 9C19 8.44772 18.5523 8 18 8Z" stroke="#757575" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> <path d="M12 8C11.4477 8 11 8.44772 11 9C11 9.55228 11.4477 10 12 10C12.5523 10 13 9.55228 13 9C13 8.44772 12.5523 8 12 8Z" stroke="#757575" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> <path d="M6 8C5.44772 8 5 8.44772 5 9C5 9.55228 5.44772 10 6 10C6.55228 10 7 9.55228 7 9C7 8.44772 6.55228 8 6 8Z" stroke="#757575" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </g> </g> </g></svg>',ban:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M3.76 3.76l8.48 8.48" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',pin:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 2L14 6L10 10H8V8L4 12L3 11L7 7H5L1 3L5 2H10Z" fill="currentColor"/></svg>',unpin:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 2L14 14M10 2L14 6L10 10H8V8L4 12L3 11L7 7H5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',columns:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="4" height="14" rx="1" stroke="currentColor" stroke-width="1.5"/><rect x="7" y="1" width="2" height="14" rx="0.5" stroke="currentColor" stroke-width="1.5"/><rect x="11" y="1" width="4" height="14" rx="1" stroke="currentColor" stroke-width="1.5"/></svg>',download:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 2V10M5 7L8 10L11 7" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M2 13H14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',search:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="7" cy="7" r="4" stroke="currentColor" stroke-width="1.5"/><path d="M10 10L13.5 13.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',eye:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 8C1 8 3 3 8 3C13 3 15 8 15 8C15 8 13 13 8 13C3 13 1 8 1 8Z" stroke="currentColor" stroke-width="1.5"/><circle cx="8" cy="8" r="2" stroke="currentColor" stroke-width="1.5"/></svg>',eyeOff:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L15 15M6.5 5.5A2 2 0 0 1 10.5 9.5M3 3.5C1.7 5 1 8 1 8S3 13 8 13C9.5 13 10.8 12.5 11.8 11.8M6 2.3C6.6 2.1 7.3 2 8 2C13 2 15 8 15 8C15 8 14.5 9.5 13.5 11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',group:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="14" height="4" rx="1" stroke="currentColor" stroke-width="1.5"/><rect x="3" y="7" width="10" height="3" rx="1" stroke="currentColor" stroke-width="1.5"/><rect x="5" y="12" width="6" height="2" rx="1" stroke="currentColor" stroke-width="1.5"/></svg>',settings:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="2" stroke="currentColor" stroke-width="1.5"/><path d="M8 1V3M8 13V15M1 8H3M13 8H15M3.1 3.1L4.5 4.5M11.5 11.5L12.9 12.9M12.9 3.1L11.5 4.5M4.5 11.5L3.1 12.9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',refresh:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14 8A6 6 0 1 1 8 2V1M11 1H8V4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',pagePrev:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9 4L5 8L9 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',pageNext:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7 4L11 8L7 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',pageFirst:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 4V12M7 4L3 8L7 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',pageLast:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 4V12M9 4L13 8L9 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',loading:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.5" stroke-dasharray="20 10" stroke-linecap="round"><animateTransform attributeName="transform" type="rotate" from="0 8 8" to="360 8 8" dur="0.8s" repeatCount="indefinite"/></circle></svg>',chart:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="8" width="3" height="6" rx="0.5" fill="currentColor"/><rect x="6.5" y="4" width="3" height="10" rx="0.5" fill="currentColor"/><rect x="11" y="2" width="3" height="12" rx="0.5" fill="currentColor"/></svg>',edit:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11 2L14 5L5 14H2V11L11 2Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',trash:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 4H14M5 4V2H11V4M6 7V12M10 7V12M3 4L4 14H12L13 4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',copy:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="5" y="5" width="9" height="9" rx="1" stroke="currentColor" stroke-width="1.5"/><path d="M11 5V3H2V12H5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',info:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M8 7V11M8 5V5.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',warning:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 2L14.5 13H1.5L8 2Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M8 6V9M8 11V11.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',success:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M5 8L7 10L11 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',lock:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="7" width="10" height="7" rx="1" stroke="currentColor" stroke-width="1.5"/><path d="M5 7V5a3 3 0 0 1 6 0v2" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><circle cx="8" cy="10.5" r="1" fill="currentColor"/></svg>',sigma:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11 3H5L8.5 8L5 13H11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>'};var Ue=class{constructor(e={}){this.icons=new Map(Object.entries(mt));this.options={defaultSize:16,defaultColor:"currentColor",...e}}register(e,t){this.icons.set(e,t)}registerAll(e){for(let[t,o]of Object.entries(e))this.icons.set(t,o)}has(e){return this.icons.has(e)}get(e){return this.icons.get(e)}getAll(){return new Map(this.icons)}remove(e){this.icons.delete(e)}clear(){this.icons.clear()}loadCoreIcons(){this.registerAll(mt)}getNames(){return Array.from(this.icons.keys())}};var qe=class{constructor(e){this.registry=e}render(e,t={}){let o=document.createElement("span");o.className=`pg-icon pg-icon--${e}${t.className?` ${t.className}`:""}`,o.setAttribute("aria-hidden","true"),o.setAttribute("data-icon",e);let r=t.size??16;o.style.cssText=`
4277
+ ${r}`,i=new Blob([n],{type:"text/csv"}),s=URL.createObjectURL(i),l=document.createElement("a");l.href=s,l.download="export.csv",l.click(),URL.revokeObjectURL(s)}emitSelectionChanged(){this.eventBus.emit(x.CELL_SELECTION_CHANGED,{ranges:this.store.get("cellRanges")})}};var Jr={quartz:"pg-quartz-theme",alpine:"pg-alpine-theme",balham:"pg-balham-theme",material:"pg-material-theme"};var Pt="--pg";function Qr(d){return d.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`)}function Fo(d,e,t){for(let[o,r]of Object.entries(d)){let n=`${e}-${Qr(o)}`;typeof r=="string"||typeof r=="number"?t.set(n,String(r)):typeof r=="object"&&r!==null&&Fo(r,n,t)}}var me=class{constructor(){this.styleEl=null;this.scopeEl=null}inject(e,t){this.scopeEl=t??document.documentElement;let o=new Map;Fo(e,Pt,o);for(let[r,n]of o)this.scopeEl.style.setProperty(r,n)}injectAsStylesheet(e,t=":root"){this.styleEl&&this.styleEl.remove();let o=new Map;Fo(e,Pt,o);let r=[`${t} {`];for(let[n,i]of o)r.push(` ${n}: ${i};`);r.push("}"),this.styleEl=document.createElement("style"),this.styleEl.setAttribute("data-photon-grid-theme",""),this.styleEl.textContent=r.join(`
4278
+ `),document.head.appendChild(this.styleEl)}remove(){if(this.styleEl&&(this.styleEl.remove(),this.styleEl=null),this.scopeEl){let e=this.scopeEl.style;for(let t=e.length-1;t>=0;t--){let o=e.item(t);o.startsWith(Pt)&&e.removeProperty(o)}}}getVar(e){return`var(${Pt}-${Qr(e)})`}};var $e={name:"light",displayName:"Light",mode:"light",tokens:{colors:{primary:"#2563eb",primaryHover:"#1d4ed8",primaryActive:"#1e40af",primaryText:"#ffffff",secondary:"#64748b",secondaryHover:"#475569",surface:"#ffffff",surfaceRaised:"#ffffff",surfaceOverlay:"#ffffff",surfaceSunken:"#f8fafc",background:"#f8fafc",backgroundAlt:"#f1f5f9",border:"#e2e8f0",borderStrong:"#cbd5e1",borderFocus:"#2563eb",textPrimary:"#0f172a",textSecondary:"#475569",textDisabled:"#94a3b8",textInverse:"#ffffff",headerBackground:"#f8fafc",headerText:"#374151",headerBorder:"#e2e8f0",headerHover:"#f1f5f9",rowBackground:"#ffffff",rowBackgroundAlt:"#f8fafc",rowHover:"#f0f7ff",rowSelected:"#eff6ff",rowSelectedBorder:"#bfdbfe",cellEditBackground:"#ffffff",cellEditBorder:"#2563eb",selectionBackground:"rgba(37, 99, 235, 0.08)",selectionBorder:"rgba(37, 99, 235, 0.85)",selectionCorner:"#2563eb",footerBackground:"#f8fafc",footerText:"#374151",footerBorder:"#e2e8f0",pinnedBackground:"#ffffff",pinnedShadow:"4px 0 6px -2px rgba(15,23,42,0.08)",filterBackground:"#ffffff",filterBorder:"#e2e8f0",filterActiveBackground:"#eff6ff",filterActiveBorder:"#93c5fd",scrollbarTrack:"#f1f5f9",scrollbarThumb:"#cbd5e1",scrollbarThumbHover:"#94a3b8",resizeHandleColor:"#e2e8f0",resizeHandleActiveColor:"#2563eb",dragPreviewBackground:"#ffffff",dragPreviewBorder:"#e2e8f0",dragOverHighlight:"rgba(37, 99, 235, 0.06)",checkboxBackground:"#ffffff",checkboxCheckedBackground:"#2563eb",checkboxBorder:"#cbd5e1",badgeBackground:"#eff6ff",badgeText:"#1d4ed8",groupRowBackground:"#f8fafc",groupRowBorder:"#e2e8f0",tooltipBackground:"#1e293b",tooltipText:"#f1f5f9",success:"#16a34a",warning:"#d97706",error:"#dc2626",info:"#0284c7",successLight:"#dcfce7",warningLight:"#fef3c7",errorLight:"#fee2e2",infoLight:"#e0f2fe"},typography:{fontFamily:"'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif",fontFamilyMono:"'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace",fontSizeXs:"11px",fontSizeSm:"12px",fontSizeMd:"13px",fontSizeLg:"14px",fontSizeXl:"16px",fontWeightRegular:"400",fontWeightMedium:"500",fontWeightSemiBold:"600",fontWeightBold:"700",lineHeightTight:"1.2",lineHeightBase:"1.5",lineHeightRelaxed:"1.75",letterSpacingTight:"-0.01em",letterSpacingBase:"0",letterSpacingWide:"0.025em"},spacing:{xs:"4px",sm:"8px",md:"12px",lg:"16px",xl:"24px",xxl:"32px"},sizing:{rowHeightSm:"36px",rowHeightMd:"48px",rowHeightLg:"60px",headerRowHeight:"42px",footerRowHeight:"44px",filterRowHeight:"36px",scrollbarWidth:"8px",resizeHandleWidth:"4px",columnMinWidth:"40px",checkboxSize:"16px",iconSizeSm:"14px",iconSizeMd:"16px",iconSizeLg:"20px"},borders:{radiusSm:"4px",radiusMd:"6px",radiusLg:"8px",radiusPill:"9999px",widthThin:"1px",widthBase:"1px",widthThick:"2px",styleBase:"solid"},shadows:{none:"none",xs:"0 1px 2px rgba(15,23,42,0.05)",sm:"0 1px 3px rgba(15,23,42,0.08), 0 1px 2px rgba(15,23,42,0.06)",md:"0 4px 6px -1px rgba(15,23,42,0.08), 0 2px 4px -2px rgba(15,23,42,0.05)",lg:"0 10px 15px -3px rgba(15,23,42,0.08), 0 4px 6px -4px rgba(15,23,42,0.05)",pinnedLeft:"4px 0 8px -2px rgba(15,23,42,0.10)",pinnedRight:"-4px 0 8px -2px rgba(15,23,42,0.10)",dropdown:"0 8px 24px rgba(15,23,42,0.12), 0 2px 8px rgba(15,23,42,0.08)",tooltip:"0 4px 12px rgba(15,23,42,0.15)",dragPreview:"0 8px 24px rgba(15,23,42,0.18), 0 2px 8px rgba(15,23,42,0.10)"},transitions:{durationFast:"100ms",durationBase:"150ms",durationSlow:"250ms",easingBase:"cubic-bezier(0.4, 0, 0.2, 1)",easingDecelerate:"cubic-bezier(0, 0, 0.2, 1)",easingAccelerate:"cubic-bezier(0.4, 0, 1, 1)"}}};var Gt={name:"dark",displayName:"Dark",mode:"dark",tokens:{colors:{primary:"#3b82f6",primaryHover:"#60a5fa",primaryActive:"#93c5fd",primaryText:"#ffffff",secondary:"#94a3b8",secondaryHover:"#cbd5e1",surface:"#1e293b",surfaceRaised:"#263347",surfaceOverlay:"#1e293b",surfaceSunken:"#0f172a",background:"#0f172a",backgroundAlt:"#1e293b",border:"#334155",borderStrong:"#475569",borderFocus:"#3b82f6",textPrimary:"#f1f5f9",textSecondary:"#94a3b8",textDisabled:"#475569",textInverse:"#0f172a",headerBackground:"#1e293b",headerText:"#cbd5e1",headerBorder:"#334155",headerHover:"#263347",rowBackground:"#0f172a",rowBackgroundAlt:"#1a2540",rowHover:"#1e3a5f",rowSelected:"#1e3a5f",rowSelectedBorder:"#3b82f6",cellEditBackground:"#1e293b",cellEditBorder:"#3b82f6",selectionBackground:"rgba(59, 130, 246, 0.15)",selectionBorder:"rgba(59, 130, 246, 0.8)",selectionCorner:"#3b82f6",footerBackground:"#1e293b",footerText:"#94a3b8",footerBorder:"#334155",pinnedBackground:"#0f172a",pinnedShadow:"4px 0 6px -2px rgba(0,0,0,0.4)",filterBackground:"#1e293b",filterBorder:"#334155",filterActiveBackground:"#1e3a5f",filterActiveBorder:"#3b82f6",scrollbarTrack:"#1e293b",scrollbarThumb:"#475569",scrollbarThumbHover:"#64748b",resizeHandleColor:"#334155",resizeHandleActiveColor:"#3b82f6",dragPreviewBackground:"#1e293b",dragPreviewBorder:"#475569",dragOverHighlight:"rgba(59, 130, 246, 0.1)",checkboxBackground:"#1e293b",checkboxCheckedBackground:"#3b82f6",checkboxBorder:"#475569",badgeBackground:"#1e3a5f",badgeText:"#93c5fd",groupRowBackground:"#1e293b",groupRowBorder:"#334155",tooltipBackground:"#f1f5f9",tooltipText:"#0f172a",success:"#22c55e",warning:"#f59e0b",error:"#ef4444",info:"#38bdf8",successLight:"#052e16",warningLight:"#1c1007",errorLight:"#1f0909",infoLight:"#082f49"},typography:{fontFamily:"'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif",fontFamilyMono:"'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace",fontSizeXs:"11px",fontSizeSm:"12px",fontSizeMd:"13px",fontSizeLg:"14px",fontSizeXl:"16px",fontWeightRegular:"400",fontWeightMedium:"500",fontWeightSemiBold:"600",fontWeightBold:"700",lineHeightTight:"1.2",lineHeightBase:"1.5",lineHeightRelaxed:"1.75",letterSpacingTight:"-0.01em",letterSpacingBase:"0",letterSpacingWide:"0.025em"},spacing:{xs:"4px",sm:"8px",md:"12px",lg:"16px",xl:"24px",xxl:"32px"},sizing:{rowHeightSm:"36px",rowHeightMd:"48px",rowHeightLg:"60px",headerRowHeight:"42px",footerRowHeight:"44px",filterRowHeight:"36px",scrollbarWidth:"8px",resizeHandleWidth:"4px",columnMinWidth:"40px",checkboxSize:"16px",iconSizeSm:"14px",iconSizeMd:"16px",iconSizeLg:"20px"},borders:{radiusSm:"4px",radiusMd:"6px",radiusLg:"8px",radiusPill:"9999px",widthThin:"1px",widthBase:"1px",widthThick:"2px",styleBase:"solid"},shadows:{none:"none",xs:"0 1px 2px rgba(0,0,0,0.3)",sm:"0 1px 3px rgba(0,0,0,0.35), 0 1px 2px rgba(0,0,0,0.25)",md:"0 4px 6px -1px rgba(0,0,0,0.35), 0 2px 4px -2px rgba(0,0,0,0.25)",lg:"0 10px 15px -3px rgba(0,0,0,0.4), 0 4px 6px -4px rgba(0,0,0,0.3)",pinnedLeft:"4px 0 8px -2px rgba(0,0,0,0.4)",pinnedRight:"-4px 0 8px -2px rgba(0,0,0,0.4)",dropdown:"0 8px 24px rgba(0,0,0,0.45), 0 2px 8px rgba(0,0,0,0.3)",tooltip:"0 4px 12px rgba(0,0,0,0.5)",dragPreview:"0 8px 24px rgba(0,0,0,0.5), 0 2px 8px rgba(0,0,0,0.35)"},transitions:{durationFast:"100ms",durationBase:"150ms",durationSlow:"250ms",easingBase:"cubic-bezier(0.4, 0, 0.2, 1)",easingDecelerate:"cubic-bezier(0, 0, 0.2, 1)",easingAccelerate:"cubic-bezier(0.4, 0, 1, 1)"}}};var Bo="data-pg-theme-scope",mi=/^pg-[a-z0-9]+-theme$/,Ue=class d{constructor(e){this.eventBus=e;this.injector=new me;this.rootInjector=new me;this.registry=new Map;this.activeVariant="none";this.scopeEl=null;this.registry.set("light",$e),this.registry.set("dark",Gt),this.activeMode=$e}static{this.scopeSeq=0}registerTheme(e){this.registry.set(e.name,e)}applyMode(e,t){let o=this.resolveModeTheme(e);this.activeMode=o,t&&(this.scopeEl=t);let r=this.scopeEl;if(r){let n=this.ensureScopeId(r);this.injector.injectAsStylesheet(o.tokens,`[${Bo}="${n}"]`),r.setAttribute("data-pg-mode",o.mode),r.style.colorScheme=o.mode}else this.injector.injectAsStylesheet(o.tokens,":root"),document.documentElement.setAttribute("data-pg-mode",o.mode),document.documentElement.style.colorScheme=o.mode;this.rootInjector.inject(o.tokens,document.documentElement),this.eventBus.emit(x.THEME_CHANGED,{themeName:o.name})}applyVariant(e,t){t&&(this.scopeEl=t);let o=this.scopeEl??document.documentElement;for(let r of Array.from(o.classList))mi.test(r)&&o.classList.remove(r);this.activeVariant=e,e!=="none"?(o.classList.add(Jr[e]),o.setAttribute("data-pg-variant",e)):o.removeAttribute("data-pg-variant")}applyTheme(e,t){if(typeof e!="string"){this.registry.set(e.name,e),this.applyMode(e,t);return}let{mode:o,variant:r}=d.parseLegacyTheme(e);t&&(this.scopeEl=t),o&&this.applyMode(o,t),r!==void 0&&this.applyVariant(r,t),!o&&r===void 0&&console.warn(`[PhotonGrid] Theme "${e}" not recognized. Expected a mode ('light' | 'dark') or variant ('quartz' | 'alpine' | 'balham' | 'material').`)}getActiveTheme(){return this.activeMode}getActiveMode(){return this.activeMode.mode}getActiveVariant(){return this.activeVariant}getTheme(e){return this.registry.get(e)}getAllThemes(){return Array.from(this.registry.values())}toggleDarkMode(){this.applyMode(this.activeMode.mode==="light"?"dark":"light")}isDarkMode(){return this.activeMode.mode==="dark"}destroy(){this.injector.remove(),this.rootInjector.remove()}resolveModeTheme(e){return typeof e!="string"?e:this.registry.get(e)??$e}ensureScopeId(e){let t=e.getAttribute(Bo);return t||(t=`pg-scope-${d.scopeSeq+=1}`,e.setAttribute(Bo,t)),t}static parseLegacyTheme(e){let t=e.trim().toLowerCase().replace(/^pg-/,"").replace(/-theme$/,"");if(t==="light"||t==="dark")return{mode:t};let[o,r]=t.split("-"),n=r==="light"||r==="dark"?r:void 0;return o==="quartz"||o==="alpine"||o==="balham"||o==="material"?{variant:o,mode:n}:{}}};var mt={sortAsc:'<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sort-asc" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align: text-bottom;"><path d="m12.927 2.573 3 3A.25.25 0 0 1 15.75 6H13.5v6.75a.75.75 0 0 1-1.5 0V6H9.75a.25.25 0 0 1-.177-.427l3-3a.25.25 0 0 1 .354 0ZM0 12.25a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75Zm0-4a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5H.75A.75.75 0 0 1 0 8.25Zm0-4a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5H.75A.75.75 0 0 1 0 4.25Z"></path></svg>',sortDesc:'<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sort-desc" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align: text-bottom;"><path d="M0 4.25a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 0 1.5H.75A.75.75 0 0 1 0 4.25Zm0 4a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5H.75A.75.75 0 0 1 0 8.25Zm0 4a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75ZM13.5 10h2.25a.25.25 0 0 1 .177.427l-3 3a.25.25 0 0 1-.354 0l-3-3A.25.25 0 0 1 9.75 10H12V3.75a.75.75 0 0 1 1.5 0V10Z"></path></svg>',sortNone:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 3L11 7H5L8 3Z" fill="currentColor" opacity="0.4"/><path d="M8 13L5 9H11L8 13Z" fill="currentColor" opacity="0.4"/></svg>',filter:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 4H14M5 8H11M7 12H9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',filterActive:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 4H14M5 8H11M7 12H9" stroke="currentColor" stroke-width="2" stroke-linecap="round"/><circle cx="12" cy="4" r="3" fill="currentColor"/></svg>',menu:'<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align: text-bottom;"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg>',menuHorizontal:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="3" cy="8" r="1.5" fill="currentColor"/><circle cx="8" cy="8" r="1.5" fill="currentColor"/><circle cx="13" cy="8" r="1.5" fill="currentColor"/></svg>',chevronRight:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6 4L10 8L6 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',chevronDown:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 6L8 10L12 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',chevronUp:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 10L8 6L12 10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',chevronLeft:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 4L6 8L10 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',expand:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 6V2H6M10 2H14V6M14 10V14H10M6 14H2V10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',collapse:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6 2V6H2M14 6H10V2M10 14V10H14M2 10H6V14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',fullscreen:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 6V2H6M10 2H14V6M14 10V14H10M6 14H2V10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',close:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 4L12 12M12 4L4 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',arrowUp:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 13V3M3.5 7.5L8 3L12.5 7.5" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"/></svg>',sparkle:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 1.5L9.3 5.7L13.5 7L9.3 8.3L8 12.5L6.7 8.3L2.5 7L6.7 5.7L8 1.5Z" fill="currentColor"/><path d="M13 10.5L13.5 12L15 12.5L13.5 13L13 14.5L12.5 13L11 12.5L12.5 12L13 10.5Z" fill="currentColor"/></svg>',check:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3 8L6.5 11.5L13 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',minus:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M3 8H13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',drag:'<svg width="64px" height="64px" viewBox="-2.4 -2.4 28.80 28.80" fill="none" xmlns="http://www.w3.org/2000/svg" stroke="#000000"><g id="SVGRepo_bgCarrier" stroke-width="0"><path transform="translate(-2.4, -2.4), scale(1.7999999999999998)" fill="#7ed0ec" d="M9.166.33a2.25 2.25 0 00-2.332 0l-5.25 3.182A2.25 2.25 0 00.5 5.436v5.128a2.25 2.25 0 001.084 1.924l5.25 3.182a2.25 2.25 0 002.332 0l5.25-3.182a2.25 2.25 0 001.084-1.924V5.436a2.25 2.25 0 00-1.084-1.924L9.166.33z" strokewidth="0"></path></g><g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g><g id="SVGRepo_iconCarrier"> <g id="Interface / Drag_Horizontal"> <g id="Vector"> <path d="M18 14C17.4477 14 17 14.4477 17 15C17 15.5523 17.4477 16 18 16C18.5523 16 19 15.5523 19 15C19 14.4477 18.5523 14 18 14Z" stroke="#757575" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> <path d="M12 14C11.4477 14 11 14.4477 11 15C11 15.5523 11.4477 16 12 16C12.5523 16 13 15.5523 13 15C13 14.4477 12.5523 14 12 14Z" stroke="#757575" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> <path d="M6 14C5.44772 14 5 14.4477 5 15C5 15.5523 5.44772 16 6 16C6.55228 16 7 15.5523 7 15C7 14.4477 6.55228 14 6 14Z" stroke="#757575" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> <path d="M18 8C17.4477 8 17 8.44772 17 9C17 9.55228 17.4477 10 18 10C18.5523 10 19 9.55228 19 9C19 8.44772 18.5523 8 18 8Z" stroke="#757575" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> <path d="M12 8C11.4477 8 11 8.44772 11 9C11 9.55228 11.4477 10 12 10C12.5523 10 13 9.55228 13 9C13 8.44772 12.5523 8 12 8Z" stroke="#757575" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> <path d="M6 8C5.44772 8 5 8.44772 5 9C5 9.55228 5.44772 10 6 10C6.55228 10 7 9.55228 7 9C7 8.44772 6.55228 8 6 8Z" stroke="#757575" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path> </g> </g> </g></svg>',ban:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M3.76 3.76l8.48 8.48" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',pin:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M10 2L14 6L10 10H8V8L4 12L3 11L7 7H5L1 3L5 2H10Z" fill="currentColor"/></svg>',unpin:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 2L14 14M10 2L14 6L10 10H8V8L4 12L3 11L7 7H5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',columns:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="4" height="14" rx="1" stroke="currentColor" stroke-width="1.5"/><rect x="7" y="1" width="2" height="14" rx="0.5" stroke="currentColor" stroke-width="1.5"/><rect x="11" y="1" width="4" height="14" rx="1" stroke="currentColor" stroke-width="1.5"/></svg>',download:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 2V10M5 7L8 10L11 7" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M2 13H14" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',search:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="7" cy="7" r="4" stroke="currentColor" stroke-width="1.5"/><path d="M10 10L13.5 13.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',eye:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 8C1 8 3 3 8 3C13 3 15 8 15 8C15 8 13 13 8 13C3 13 1 8 1 8Z" stroke="currentColor" stroke-width="1.5"/><circle cx="8" cy="8" r="2" stroke="currentColor" stroke-width="1.5"/></svg>',eyeOff:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 1L15 15M6.5 5.5A2 2 0 0 1 10.5 9.5M3 3.5C1.7 5 1 8 1 8S3 13 8 13C9.5 13 10.8 12.5 11.8 11.8M6 2.3C6.6 2.1 7.3 2 8 2C13 2 15 8 15 8C15 8 14.5 9.5 13.5 11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',group:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="1" y="1" width="14" height="4" rx="1" stroke="currentColor" stroke-width="1.5"/><rect x="3" y="7" width="10" height="3" rx="1" stroke="currentColor" stroke-width="1.5"/><rect x="5" y="12" width="6" height="2" rx="1" stroke="currentColor" stroke-width="1.5"/></svg>',settings:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="2" stroke="currentColor" stroke-width="1.5"/><path d="M8 1V3M8 13V15M1 8H3M13 8H15M3.1 3.1L4.5 4.5M11.5 11.5L12.9 12.9M12.9 3.1L11.5 4.5M4.5 11.5L3.1 12.9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',refresh:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M14 8A6 6 0 1 1 8 2V1M11 1H8V4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',pagePrev:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9 4L5 8L9 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',pageNext:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M7 4L11 8L7 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',pageFirst:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 4V12M7 4L3 8L7 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',pageLast:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M12 4V12M9 4L13 8L9 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',loading:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.5" stroke-dasharray="20 10" stroke-linecap="round"><animateTransform attributeName="transform" type="rotate" from="0 8 8" to="360 8 8" dur="0.8s" repeatCount="indefinite"/></circle></svg>',chart:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="2" y="8" width="3" height="6" rx="0.5" fill="currentColor"/><rect x="6.5" y="4" width="3" height="10" rx="0.5" fill="currentColor"/><rect x="11" y="2" width="3" height="12" rx="0.5" fill="currentColor"/></svg>',edit:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11 2L14 5L5 14H2V11L11 2Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',trash:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M2 4H14M5 4V2H11V4M6 7V12M10 7V12M3 4L4 14H12L13 4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',copy:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="5" y="5" width="9" height="9" rx="1" stroke="currentColor" stroke-width="1.5"/><path d="M11 5V3H2V12H5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',info:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M8 7V11M8 5V5.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',warning:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M8 2L14.5 13H1.5L8 2Z" stroke="currentColor" stroke-width="1.5" stroke-linejoin="round"/><path d="M8 6V9M8 11V11.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>',success:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="8" cy="8" r="6" stroke="currentColor" stroke-width="1.5"/><path d="M5 8L7 10L11 6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>',lock:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="3" y="7" width="10" height="7" rx="1" stroke="currentColor" stroke-width="1.5"/><path d="M5 7V5a3 3 0 0 1 6 0v2" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><circle cx="8" cy="10.5" r="1" fill="currentColor"/></svg>',sigma:'<svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11 3H5L8.5 8L5 13H11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>'};var qe=class{constructor(e={}){this.icons=new Map(Object.entries(mt));this.options={defaultSize:16,defaultColor:"currentColor",...e}}register(e,t){this.icons.set(e,t)}registerAll(e){for(let[t,o]of Object.entries(e))this.icons.set(t,o)}has(e){return this.icons.has(e)}get(e){return this.icons.get(e)}getAll(){return new Map(this.icons)}remove(e){this.icons.delete(e)}clear(){this.icons.clear()}loadCoreIcons(){this.registerAll(mt)}getNames(){return Array.from(this.icons.keys())}};var je=class{constructor(e){this.registry=e}render(e,t={}){let o=document.createElement("span");o.className=`pg-icon pg-icon--${e}${t.className?` ${t.className}`:""}`,o.setAttribute("aria-hidden","true"),o.setAttribute("data-icon",e);let r=t.size??16;o.style.cssText=`
4511
4279
  display: inline-flex;
4512
4280
  align-items: center;
4513
4281
  justify-content: center;
@@ -4518,37 +4286,37 @@ ${r}`,i=new Blob([n],{type:"text/csv"}),s=URL.createObjectURL(i),l=document.crea
4518
4286
  ${t.rotate?`transform: rotate(${t.rotate}deg);`:""}
4519
4287
  ${t.spin?"animation: pg-spin 0.8s linear infinite;":""}
4520
4288
  transition: transform var(--pg-transitions-duration-base, 150ms) var(--pg-transitions-easing-base);
4521
- `;let n=this.registry.get(e);if(n){o.innerHTML=n;let i=o.querySelector("svg");i&&(i.setAttribute("width",String(r)),i.setAttribute("height",String(r)),i.style.display="block")}else o.style.background="currentColor",o.style.borderRadius="2px",o.style.opacity="0.3";return t.title&&(o.setAttribute("title",t.title),o.setAttribute("aria-label",t.title),o.removeAttribute("aria-hidden")),o}renderToString(e,t=16){let o=this.registry.get(e);return o?o.replace("<svg",`<svg width="${t}" height="${t}" style="display:block;"`).replace(/currentColor/g,"currentColor"):""}updateIcon(e,t,o={}){e.setAttribute("data-icon",t);let r=o.size??16,n=this.registry.get(t);if(n){e.innerHTML=n;let i=e.querySelector("svg");i&&(i.setAttribute("width",String(r)),i.setAttribute("height",String(r)))}}injectSpinKeyframes(){if(document.getElementById("pg-icon-keyframes"))return;let e=document.createElement("style");e.id="pg-icon-keyframes",e.textContent="@keyframes pg-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }",document.head.appendChild(e)}};var ui=["#2563eb","#16a34a","#d97706","#dc2626","#7c3aed","#0284c7","#db2777","#65a30d","#c2410c","#0891b2"],ae=class{transform(e,t){let o=e.filter(u=>u.type==="data"),{labelField:r,valueFields:n,aggregation:i="sum",limit:s,sortByValue:l,colors:a=ui}=t,c=new Map;for(let u of o){let m=String(this.resolveValue(u.data,r)??"Unknown");if(!c.has(m)){let f={};for(let C of n)f[C]=[];c.set(m,f)}let g=c.get(m);for(let f of n){let C=Number(this.resolveValue(u.data,f));isNaN(C)||g[f].push(C)}}let p=Array.from(c.keys()),h=n.map((u,m)=>{let g=p.map(f=>{let C=c.get(f)[u]??[];return this.aggregate(C,i)});return{label:u,data:g,color:a[m%a.length]}});if(l&&h.length>0){let u=h[0].data,m=p.map((g,f)=>f).sort((g,f)=>u[f]-u[g]);p=m.map(g=>p[g]);for(let g of h)g.data=m.map(f=>g.data[f])}if(s&&s>0){p=p.slice(0,s);for(let u of h)u.data=u.data.slice(0,s)}return{labels:p,datasets:h}}fromSelectedColumns(e,t,o,r){let n=t.find(s=>s.colId===o),i=t.filter(s=>r.includes(s.colId));return!n||i.length===0?{labels:[],datasets:[]}:this.transform(e,{labelField:n.field,valueFields:i.map(s=>s.field)})}aggregate(e,t){if(e.length===0)return 0;switch(t){case"sum":return e.reduce((o,r)=>o+r,0);case"avg":return e.reduce((o,r)=>o+r,0)/e.length;case"min":return Math.min(...e);case"max":return Math.max(...e);case"count":return e.length;default:return e.reduce((o,r)=>o+r,0)}}resolveValue(e,t){let o=t.split("."),r=e;for(let n of o){if(r==null)return;r=r[n]}return r}};var gi=["#008FFB","#00E396","#FEB019","#FF4560","#775DD0","#3F51B5","#03A9F4","#4CAF50","#F9CE1D","#FF9800"];function Jr(d){let e=getComputedStyle(d),t=(r,n)=>{let i=e.getPropertyValue(r).trim();return i.length>0?i:n},o=[];for(let r=1;r<=10;r++){let n=e.getPropertyValue(`--pg-chart-series-${r}`).trim();n.length>0&&o.push(n)}return{textColor:t("--pg-colors-text-primary","#374151"),mutedColor:t("--pg-colors-text-secondary","#6b7280"),gridColor:t("--pg-colors-border","#e5e7eb"),background:t("--pg-colors-surface","transparent"),fontFamily:t("--pg-typography-font-family","system-ui, sans-serif"),palette:o.length>0?o:gi}}var Qr={type:"column-grouped",width:600,height:320,padding:40,showLegend:!0,showGrid:!0,showValues:!1,barWidth:.75,lineWidth:2,smooth:!1,fontFamily:"",fontSize:12,textColor:"",gridColor:"",backgroundColor:"transparent",animationDuration:400,title:"",titleColor:"",titleFontSize:15,titleAlign:"left",subtitle:"",subtitleColor:"",subtitleFontSize:12,subtitleAlign:"left",legendPosition:"bottom",xAxisTitle:"",yAxisTitle:"",axisTitleColor:"",axisLabelColor:"",axisLineColor:"",showXTicks:!0,showYTicks:!0,showXLabels:!0,showYLabels:!0,seriesColors:{},strokeWidth:0,fillOpacity:0,compact:!1},N=["#008FFB","#00E396","#FEB019","#FF4560","#775DD0","#3F51B5","#03A9F4","#4CAF50","#F9CE1D","#FF9800"];function en(d,e,t){let o=e.length>0?e:N;return{labels:d.labels,datasets:d.datasets.map((r,n)=>({...r,color:t[r.label]??r.color??o[n%o.length]}))}}var oe=class d{constructor(e){this.animProgress=1;this.rafId=null;this.hoverX=null;this.hoverY=null;this.hoverRafId=null;this.tooltipSmoothedY=null;this.lastData=null;this.lastOptions=null;this.seriesScales=[];this.seriesToggleRafs=new Map;this.theme=null;this.canvas=e;let t=e.getContext("2d");if(!t)throw new Error("[PhotonGrid] ChartRenderer: could not get 2d context");this.ctx=t,this.attachEvents()}prepareOptions(e){let t=Jr(this.canvas);this.theme=t,e.fontFamily||(e.fontFamily=t.fontFamily),e.textColor=e.axisLabelColor||e.textColor||t.textColor,e.gridColor=e.axisLineColor||e.gridColor||t.gridColor}paletteColor(e){let t=this.theme?.palette??N;return t[e%t.length]}render(e,t={type:"column-grouped"}){let o={...Qr,...t};this.canvas.width=o.width,this.canvas.height=o.height,this.prepareOptions(o);let r=en(e,this.theme.palette,o.seriesColors);this.lastData=r,this.lastOptions=o,this.seriesScales=r.datasets.map(()=>1),this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null),o.animationDuration>0?this.animate(r,o):(this.animProgress=1,this.draw(r,o,1))}destroy(){this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.hoverRafId!==null&&(cancelAnimationFrame(this.hoverRafId),this.hoverRafId=null);for(let e of this.seriesToggleRafs.values())cancelAnimationFrame(e);this.seriesToggleRafs.clear()}toggleSeries(e,t,o,r={type:"column-grouped"}){let n={...Qr,...r};this.prepareOptions(n);let i=en(o,this.theme.palette,n.seriesColors);for(this.lastData=i,this.lastOptions=n;this.seriesScales.length<i.datasets.length;)this.seriesScales.push(1);let s=this.seriesToggleRafs.get(e);s!==void 0&&(cancelAnimationFrame(s),this.seriesToggleRafs.delete(e));let l=this.seriesScales[e]??(t?0:1),a=t?1:0,c=280,p=performance.now(),h=u=>{let m=Math.min(1,(u-p)/c),g=t?this.easeOutQuart(m):1-this.easeOutQuart(1-m);this.seriesScales[e]=l+(a-l)*g,this.draw(i,n,1),m<1?this.seriesToggleRafs.set(e,requestAnimationFrame(h)):(this.seriesScales[e]=a,this.seriesToggleRafs.delete(e),this.draw(i,n,1))};this.seriesToggleRafs.set(e,requestAnimationFrame(h))}attachEvents(){this.canvas.addEventListener("mousemove",e=>{let t=this.canvas.getBoundingClientRect(),o=this.canvas.width/t.width,r=this.canvas.height/t.height;this.hoverX=(e.clientX-t.left)*o,this.hoverY=(e.clientY-t.top)*r,this.canvas.style.cursor="crosshair",this.scheduleHoverRedraw()}),this.canvas.addEventListener("mouseleave",()=>{this.hoverX=null,this.hoverY=null,this.tooltipSmoothedY=null,this.canvas.style.cursor="default",this.scheduleHoverRedraw()})}scheduleHoverRedraw(){this.hoverRafId!==null&&cancelAnimationFrame(this.hoverRafId),this.hoverRafId=requestAnimationFrame(()=>{if(this.hoverRafId=null,!this.lastData||!this.lastOptions||this.animProgress<1)return;let e=this.stepTooltipLerp();this.draw(this.lastData,this.lastOptions,1),this.hoverX!==null&&this.drawHover(this.lastData,this.lastOptions),e&&this.hoverX!==null&&this.scheduleHoverRedraw()})}stepTooltipLerp(){if(this.hoverY===null)return this.tooltipSmoothedY=null,!1;if(this.tooltipSmoothedY===null)return this.tooltipSmoothedY=this.hoverY,!1;let e=this.hoverY-this.tooltipSmoothedY;return Math.abs(e)<.5?(this.tooltipSmoothedY=this.hoverY,!1):(this.tooltipSmoothedY+=e*.14,!0)}drawHover(e,t){let o=t.type,r=o.startsWith("bar-")||o==="bar";["pie","doughnut","polar","funnel"].includes(o)||(r?this.drawBarHover(e,t):this.drawCartesianHover(e,t))}drawCartesianHover(e,t){let{ctx:o}=this,{plotLeft:r,plotTop:n,plotBottom:i,plotRight:s,plotW:l,plotH:a}=this.getPlotArea(t,e),c=this.hoverX;if(c<r||c>s)return;let p=e.labels.length;if(!p)return;let h=t.type,u=h.startsWith("column"),m,g;if(u){let f=l/Math.max(p,1);m=Math.min(Math.floor((c-r)/f),p-1),g=r+m*f+f/2}else{let f=p>1?l/(p-1):0;m=f>0?Math.round((c-r)/f):0,m=Math.max(0,Math.min(m,p-1)),g=p>1?r+m/(p-1)*l:r+l/2}if(o.save(),o.strokeStyle="rgba(100,116,139,0.30)",o.lineWidth=1,o.setLineDash([5,4]),o.beginPath(),o.moveTo(g,n),o.lineTo(g,i),o.stroke(),o.setLineDash([]),o.restore(),["line","area","scatter"].includes(h)){let f=Math.max(...e.datasets.flatMap(v=>v.data),0),C=this.niceMax(f),b=v=>i-v/C*a;for(let v of e.datasets){let w=v.data[m]??0,E=g,R=b(w);o.save(),o.beginPath(),o.arc(E,R,5,0,Math.PI*2),o.fillStyle=v.color??N[0],o.fill(),o.strokeStyle="#fff",o.lineWidth=2.5,o.stroke(),o.restore()}}if(u){let f=l/Math.max(p,1),C=r+m*f;o.save(),o.fillStyle="rgba(100,116,139,0.06)",o.fillRect(C,n,f,i-n),o.restore()}this.drawTooltip(e,t,m,g,this.tooltipSmoothedY,n,i,!1)}drawBarHover(e,t){let{ctx:o}=this,r=t.showLegend&&e.datasets.length>1?40:0,n=80,i=10+this.titleBandHeight(t),s=t.width-20,l=t.height-r-30,a=l-i,c=this.hoverY;if(c<i||c>l)return;let p=e.labels.length;if(!p)return;let h=a/Math.max(p,1),u=Math.min(Math.floor((c-i)/h),p-1),m=i+u*h+h/2;o.save(),o.strokeStyle="rgba(100,116,139,0.30)",o.lineWidth=1,o.setLineDash([5,4]),o.beginPath(),o.moveTo(n,m),o.lineTo(s,m),o.stroke(),o.setLineDash([]),o.restore(),o.save(),o.fillStyle="rgba(100,116,139,0.06)",o.fillRect(n,i+u*h,s-n,h),o.restore(),this.drawTooltip(e,t,u,s-10,m,i,l,!0)}drawTooltip(e,t,o,r,n,i,s,l){let{ctx:a}=this,c=e.labels[o]??"",p=e.datasets.filter((I,S)=>(this.seriesScales[S]??1)>.05).map(I=>({color:I.color??N[0],label:I.label,value:this.formatNum(I.data[o]??0)})),h=10,u=18,m=8,g=7;a.font=`600 ${t.fontSize}px ${t.fontFamily}`;let f=a.measureText(c).width;a.font=`${t.fontSize}px ${t.fontFamily}`;let C=Math.max(...p.map(I=>{a.font=`600 ${t.fontSize}px ${t.fontFamily}`;let S=a.measureText(I.value).width;a.font=`${t.fontSize}px ${t.fontFamily}`;let T=a.measureText(this.truncate(I.label,16)).width;return m+g+T+16+S}),0),b=Math.max(f,C)+h*2,v=h*2+u+p.length*u+(p.length>0?4:0),w;l?w=r-b-14:(w=r+14,w+b>t.width-8&&(w=r-b-14)),w=Math.max(4,w);let R=(n!==null?n:(i+s)/2)-v/2;R=Math.max(i,Math.min(R,s-v)),R=Math.max(4,R),a.save(),a.shadowColor="rgba(0,0,0,0.12)",a.shadowBlur=12,a.shadowOffsetY=3,a.fillStyle=t.backgroundColor==="transparent"?"#fff":t.backgroundColor,a.strokeStyle="rgba(0,0,0,0.08)",a.lineWidth=1,a.beginPath(),a.roundRect(w,R,b,v,6),a.fill(),a.shadowColor="transparent",a.stroke(),a.restore(),a.save(),a.font=`600 ${t.fontSize}px ${t.fontFamily}`,a.fillStyle=t.textColor,a.textAlign="left",a.textBaseline="middle",a.fillText(c,w+h,R+h+u/2),a.strokeStyle="rgba(0,0,0,0.07)",a.lineWidth=1,a.beginPath(),a.moveTo(w+h,R+h+u),a.lineTo(w+b-h,R+h+u),a.stroke(),a.font=`${t.fontSize}px ${t.fontFamily}`;for(let I=0;I<p.length;I++){let S=R+h+u+4+I*u+u/2;a.fillStyle=p[I].color,a.beginPath(),a.roundRect(w+h,S-m/2,m,m,2),a.fill(),a.fillStyle=t.textColor,a.textAlign="left",a.fillText(this.truncate(p[I].label,16),w+h+m+g,S),a.font=`600 ${t.fontSize}px ${t.fontFamily}`,a.fillStyle=p[I].color,a.textAlign="right",a.fillText(p[I].value,w+b-h,S),a.font=`${t.fontSize}px ${t.fontFamily}`}a.textBaseline="alphabetic",a.restore()}animate(e,t){this.animProgress=0;let o=performance.now(),r=n=>{let i=n-o;this.animProgress=Math.min(1,i/t.animationDuration);let s=this.easeOutQuart(this.animProgress);this.draw(e,t,s),this.animProgress<1?this.rafId=requestAnimationFrame(r):this.rafId=null};this.rafId=requestAnimationFrame(r)}titleBandHeight(e){let t=0;return e.title&&(t+=e.titleFontSize+8),e.subtitle&&(t+=e.subtitleFontSize+6),t>0?t+6:0}legendActive(e,t){return e.showLegend&&t.datasets.length>1}supportsSideLegend(e){let t=e.type;return t.startsWith("column")||t==="line"||t==="area"||t==="scatter"}effectiveLegendPosition(e){return this.supportsSideLegend(e)?e.legendPosition:"bottom"}static{this.LEGEND_BAND=40}static{this.LEGEND_SIDE=120}getPlotArea(e,t){let o=this.legendActive(e,t),r=this.effectiveLegendPosition(e),n=d.LEGEND_BAND,i=d.LEGEND_SIDE,s=this.titleBandHeight(e),l=e.xAxisTitle?e.fontSize+10:0,a=e.yAxisTitle?e.fontSize+12:0,c=e.compact?e.padding+s:20+s,p=e.compact?e.height-e.padding:e.height-36-l,h=e.compact?e.padding:65+a,u=e.width-(e.compact?e.padding:20);return o&&(r==="top"?c+=n:r==="bottom"?p-=n:r==="left"?h+=i:r==="right"&&(u-=i)),{plotLeft:h,plotTop:c,plotRight:u,plotBottom:p,plotW:u-h,plotH:p-c,legendH:o&&(r==="top"||r==="bottom")?n:0}}draw(e,t,o=1){this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),t.backgroundColor!=="transparent"&&(this.ctx.fillStyle=t.backgroundColor,this.ctx.fillRect(0,0,this.canvas.width,this.canvas.height));let r=t.type;switch(r==="bar"&&(r="column-grouped"),r){case"column-grouped":this.drawColumnGrouped(e,t,o);break;case"column-stacked":this.drawColumnStacked(e,t,o);break;case"column-100stacked":this.drawColumn100Stacked(e,t,o);break;case"bar-grouped":this.drawBarGrouped(e,t,o);break;case"bar-stacked":this.drawBarStacked(e,t,o);break;case"bar-100stacked":this.drawBar100Stacked(e,t,o);break;case"line":this.drawLine(e,t,o);break;case"area":this.drawArea(e,t,o);break;case"pie":this.drawPie(e,t,o,!1);break;case"doughnut":this.drawPie(e,t,o,!0);break;case"scatter":this.drawScatter(e,t,o);break;case"polar":this.drawPolar(e,t,o);break;case"funnel":this.drawFunnel(e,t,o);break;default:this.drawColumnGrouped(e,t,o);break}this.supportsSideLegend(t)&&this.drawAxisTitles(t),this.drawTitleBlock(t),this.legendActive(t,e)&&this.drawLegend(e,t)}drawTitleBlock(e){if(!e.title&&!e.subtitle)return;let{ctx:t}=this,o=this.theme;t.save(),t.textBaseline="alphabetic";let r=20;if(e.title){t.font=`600 ${e.titleFontSize}px ${e.fontFamily}`,t.fillStyle=e.titleColor||o?.textColor||e.textColor;let n=this.alignedX(e.titleAlign,e.width);t.textAlign=e.titleAlign,t.fillText(e.title,n,r),r+=e.titleFontSize+4}if(e.subtitle){t.font=`${e.subtitleFontSize}px ${e.fontFamily}`,t.fillStyle=e.subtitleColor||o?.mutedColor||e.textColor;let n=this.alignedX(e.subtitleAlign,e.width);t.textAlign=e.subtitleAlign,t.fillText(e.subtitle,n,r+e.subtitleFontSize)}t.restore()}alignedX(e,t){return e==="center"?t/2:e==="right"?t-20:20}drawAxisTitles(e){if(!e.xAxisTitle&&!e.yAxisTitle)return;let{ctx:t}=this,o=e.axisTitleColor||this.theme?.textColor||e.textColor;t.save(),t.fillStyle=o,t.font=`600 ${e.fontSize}px ${e.fontFamily}`,e.xAxisTitle&&(t.textAlign="center",t.textBaseline="bottom",t.fillText(e.xAxisTitle,e.width/2,e.height-4)),e.yAxisTitle&&(t.save(),t.translate(14,e.height/2),t.rotate(-Math.PI/2),t.textAlign="center",t.textBaseline="top",t.fillText(e.yAxisTitle,0,0),t.restore()),t.restore()}drawColumnGrouped(e,t,o){let{ctx:r}=this,{plotLeft:n,plotTop:i,plotBottom:s,plotRight:l,plotW:a,plotH:c}=this.getPlotArea(t,e),p=e.datasets.length,h=p>1,u=e.datasets.map(R=>this.niceMax(Math.max(...R.data,0))),m=Math.max(...e.datasets.flatMap(R=>R.data),0),g=this.niceMax(m);t.showGrid?h?this.drawGridLinesRelative(n,i,a,c,t):this.drawGridLines(n,i,a,c,g,t):this.drawAxes(n,i,l,s,t);let f=e.labels.length,C=a/Math.max(f,1),b=C*t.barWidth/p,v=this.getLabelStep(f,a,t.fontSize),w=f>8,E=Math.min(1,o*2.5);for(let R=0;R<f;R++){let I=n+R*C+C*(1-t.barWidth)/2;for(let S=0;S<p;S++){let T=e.datasets[S].data[R]??0,k=h?u[S]||1:g,L=this.seriesScales[S]??1,_=T/k*c*o*L,V=I+S*b,z=s-_;r.fillStyle=e.datasets[S].color??N[S%N.length],r.beginPath(),r.roundRect(V,z,Math.max(b-1,1),Math.max(_,0),[3,3,0,0]),r.fill()}if(R%v===0){r.save(),r.globalAlpha=E,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`;let S=I+C*t.barWidth*.5,T=s+14;w?(r.translate(S,T),r.rotate(Math.PI/4),r.textAlign="left",r.fillText(this.truncate(e.labels[R],12),0,0)):(r.textAlign="center",r.fillText(this.truncate(e.labels[R],12),S,T)),r.restore()}}}drawColumnStacked(e,t,o){let{ctx:r}=this,{plotLeft:n,plotTop:i,plotBottom:s,plotRight:l,plotW:a,plotH:c}=this.getPlotArea(t,e),p=e.datasets.length,h=p>1,u=e.datasets.map(R=>this.niceMax(Math.max(...R.data,0))),m=e.labels.map((R,I)=>e.datasets.reduce((S,T)=>S+(T.data[I]??0),0)),g=this.niceMax(Math.max(...m,0));t.showGrid?h?this.drawGridLinesRelative(n,i,a,c,t):this.drawGridLines(n,i,a,c,g,t):this.drawAxes(n,i,l,s,t);let f=e.labels.length,C=a/Math.max(f,1),b=C*t.barWidth,v=c/Math.max(p,1),w=this.getLabelStep(f,a,t.fontSize),E=Math.min(1,o*2.5);for(let R=0;R<f;R++){let I=n+R*C+(C-b)/2,S=s;for(let T=0;T<p;T++){let k=e.datasets[T].data[R]??0,L=(h?k/(u[T]||1)*v:k/g*c)*o,_=S-L;r.fillStyle=e.datasets[T].color??N[T%N.length],r.beginPath(),T===p-1?r.roundRect(I,_,Math.max(b,1),Math.max(L,0),[3,3,0,0]):r.rect(I,_,Math.max(b,1),Math.max(L,0)),r.fill(),S-=L}R%w===0&&(r.globalAlpha=E,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center",r.fillText(this.truncate(e.labels[R],12),I+b/2,s+14),r.globalAlpha=1)}}drawColumn100Stacked(e,t,o){let{ctx:r}=this,{plotLeft:n,plotTop:i,plotBottom:s,plotRight:l,plotW:a,plotH:c}=this.getPlotArea(t,e);t.showGrid?this.drawGridLines(n,i,a,c,100,t):this.drawAxes(n,i,l,s,t);let p=e.datasets.length,h=p>1,u=e.datasets.map(v=>this.niceMax(Math.max(...v.data,0))),m=e.labels.length,g=a/Math.max(m,1),f=g*t.barWidth,C=this.getLabelStep(m,a,t.fontSize),b=Math.min(1,o*2.5);for(let v=0;v<m;v++){let w=e.datasets.map((S,T)=>{let k=S.data[v]??0;return h?k/(u[T]||1):k}),E=w.reduce((S,T)=>S+T,0)||1,R=n+v*g+(g-f)/2,I=s;for(let S=0;S<p;S++){let T=w[S]/E*c*o,k=I-T;r.fillStyle=e.datasets[S].color??N[S%N.length],r.beginPath(),S===p-1?r.roundRect(R,k,Math.max(f,1),Math.max(T,0),[3,3,0,0]):r.rect(R,k,Math.max(f,1),Math.max(T,0)),r.fill(),I-=T}v%C===0&&(r.globalAlpha=b,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center",r.fillText(this.truncate(e.labels[v],12),R+f/2,s+14),r.globalAlpha=1)}}drawBarGrouped(e,t,o){let{ctx:r}=this,n=t.showLegend&&e.datasets.length>1?40:0,i=t.compact?t.padding:80,s=i,l=(t.compact?t.padding:10)+this.titleBandHeight(t),a=t.width-(t.compact?t.padding:20),c=t.height-n-(t.compact?t.padding:30),p=a-s,h=c-l,u=e.datasets.length,m=u>1,g=e.datasets.map(I=>this.niceMax(Math.max(...I.data,0))),f=Math.max(...e.datasets.flatMap(I=>I.data),0),C=this.niceMax(f),b=Math.min(1,o*2.5);if(t.showGrid){r.strokeStyle=t.gridColor,r.lineWidth=1,r.setLineDash([4,4]);for(let S=0;S<=5;S++){let T=s+S/5*p;r.beginPath(),r.moveTo(T,l),r.lineTo(T,c),r.stroke(),r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center";let k=m?`${Math.round(100*S/5)}%`:this.formatNum(C*S/5);r.fillText(k,T,c+14)}r.setLineDash([]),r.strokeStyle=t.gridColor,r.lineWidth=1.5,r.beginPath(),r.moveTo(s,l),r.lineTo(s,c),r.stroke(),r.beginPath(),r.moveTo(s,c),r.lineTo(a,c),r.stroke()}else this.drawAxes(s,l,a,c,t);let v=e.labels.length,w=h/Math.max(v,1),E=w*t.barWidth/u,R=this.getLabelStep(v,h,t.fontSize);for(let I=0;I<v;I++){let S=l+I*w+w*(1-t.barWidth)/2;for(let T=0;T<u;T++){let k=e.datasets[T].data[I]??0,L=m?g[T]||1:C,_=this.seriesScales[T]??1,V=k/L*p*o*_,z=S+T*E;r.fillStyle=e.datasets[T].color??N[T%N.length],r.beginPath(),r.roundRect(s,z,Math.max(V,0),Math.max(E-1,1),[0,3,3,0]),r.fill()}I%R===0&&(r.globalAlpha=b,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="right",r.fillText(this.truncate(e.labels[I],10),i-6,S+w*t.barWidth*.5+t.fontSize/3),r.globalAlpha=1)}}drawBarStacked(e,t,o){let{ctx:r}=this,n=t.showLegend&&e.datasets.length>1?40:0,i=t.compact?t.padding:80,s=i,l=(t.compact?t.padding:10)+this.titleBandHeight(t),a=t.width-(t.compact?t.padding:20),c=t.height-n-(t.compact?t.padding:30),p=a-s,h=c-l,u=e.datasets.length,m=u>1,g=e.datasets.map(T=>this.niceMax(Math.max(...T.data,0))),f=e.labels.map((T,k)=>e.datasets.reduce((L,_)=>L+(_.data[k]??0),0)),C=Math.max(...f,0),b=this.niceMax(C),v=Math.min(1,o*2.5);if(t.showGrid){r.strokeStyle=t.gridColor,r.lineWidth=1,r.setLineDash([4,4]);for(let k=0;k<=5;k++){let L=s+k/5*p;r.beginPath(),r.moveTo(L,l),r.lineTo(L,c),r.stroke(),r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center";let _=m?`${Math.round(100*k/5)}%`:this.formatNum(b*k/5);r.fillText(_,L,c+14)}r.setLineDash([]),r.strokeStyle=t.gridColor,r.lineWidth=1.5,r.beginPath(),r.moveTo(s,l),r.lineTo(s,c),r.stroke(),r.beginPath(),r.moveTo(s,c),r.lineTo(a,c),r.stroke()}else this.drawAxes(s,l,a,c,t);let w=e.labels.length,E=h/Math.max(w,1),R=E*t.barWidth,I=p/Math.max(u,1),S=this.getLabelStep(w,h,t.fontSize);for(let T=0;T<w;T++){let k=l+T*E+(E-R)/2,L=s;for(let _=0;_<u;_++){let V=e.datasets[_].data[T]??0,z=(m?V/(g[_]||1)*I:V/b*p)*o;r.fillStyle=e.datasets[_].color??N[_%N.length],r.beginPath(),_===u-1?r.roundRect(L,k,Math.max(z,0),Math.max(R,1),[0,3,3,0]):r.rect(L,k,Math.max(z,0),Math.max(R,1)),r.fill(),L+=z}T%S===0&&(r.globalAlpha=v,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="right",r.fillText(this.truncate(e.labels[T],10),i-6,k+R/2+t.fontSize/3),r.globalAlpha=1)}}drawBar100Stacked(e,t,o){let{ctx:r}=this,n=t.showLegend&&e.datasets.length>1?40:0,i=t.compact?t.padding:80,s=i,l=(t.compact?t.padding:10)+this.titleBandHeight(t),a=t.width-(t.compact?t.padding:20),c=t.height-n-(t.compact?t.padding:30),p=a-s,h=c-l,u=Math.min(1,o*2.5);if(t.showGrid){r.strokeStyle=t.gridColor,r.lineWidth=1,r.setLineDash([4,4]);for(let R=0;R<=5;R++){let I=s+R/5*p;r.beginPath(),r.moveTo(I,l),r.lineTo(I,c),r.stroke(),r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center",r.fillText(`${100*R/5}%`,I,c+14)}r.setLineDash([]),r.strokeStyle=t.gridColor,r.lineWidth=1.5,r.beginPath(),r.moveTo(s,l),r.lineTo(s,c),r.stroke(),r.beginPath(),r.moveTo(s,c),r.lineTo(a,c),r.stroke()}else this.drawAxes(s,l,a,c,t);let m=e.labels.length,g=h/Math.max(m,1),f=g*t.barWidth,C=this.getLabelStep(m,h,t.fontSize),b=e.datasets.length,v=b>1,w=e.datasets.map(E=>this.niceMax(Math.max(...E.data,0)));for(let E=0;E<m;E++){let R=e.datasets.map((k,L)=>{let _=k.data[E]??0;return v?_/(w[L]||1):_}),I=R.reduce((k,L)=>k+L,0)||1,S=l+E*g+(g-f)/2,T=s;for(let k=0;k<b;k++){let L=R[k]/I*p*o;r.fillStyle=e.datasets[k].color??N[k%N.length],r.beginPath(),k===e.datasets.length-1?r.roundRect(T,S,Math.max(L,0),Math.max(f,1),[0,3,3,0]):r.rect(T,S,Math.max(L,0),Math.max(f,1)),r.fill(),T+=L}E%C===0&&(r.globalAlpha=u,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="right",r.fillText(this.truncate(e.labels[E],10),i-6,S+f/2+t.fontSize/3),r.globalAlpha=1)}}drawLine(e,t,o){let{ctx:r}=this,{plotLeft:n,plotTop:i,plotBottom:s,plotRight:l,plotW:a,plotH:c}=this.getPlotArea(t,e),p=Math.max(...e.datasets.flatMap(v=>v.data),0),h=this.niceMax(p),u=e.labels.length,m=Math.min(1,o*2.5);t.showGrid?this.drawGridLines(n,i,a,c,h,t):this.drawAxes(n,i,l,s,t);let g=v=>n+v/Math.max(1,u-1)*a,f=v=>s-v/h*c,C=Math.max(2,Math.round(u*o));for(let v of e.datasets){r.save(),r.beginPath(),r.rect(n,i,a,c+1),r.clip(),r.strokeStyle=v.color??N[0],r.lineWidth=t.strokeWidth>0?t.strokeWidth:t.lineWidth,r.lineCap="round",r.lineJoin="round",r.beginPath();for(let w=0;w<Math.min(C,u);w++){let E=g(w),R=f(v.data[w]??0);w===0?r.moveTo(E,R):r.lineTo(E,R)}r.stroke();for(let w=0;w<Math.min(C,u);w++)r.beginPath(),r.arc(g(w),f(v.data[w]??0),3,0,Math.PI*2),r.fillStyle=v.color??N[0],r.fill(),r.strokeStyle="#fff",r.lineWidth=1.5,r.stroke();r.restore()}let b=this.getLabelStep(u,a,t.fontSize);r.globalAlpha=m,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center";for(let v=0;v<u;v++)v%b===0&&r.fillText(this.truncate(e.labels[v],10),g(v),s+16);r.globalAlpha=1}drawArea(e,t,o){let{ctx:r}=this,{plotLeft:n,plotTop:i,plotBottom:s,plotRight:l,plotW:a,plotH:c}=this.getPlotArea(t,e),p=Math.max(...e.datasets.flatMap(v=>v.data),0),h=this.niceMax(p),u=e.labels.length,m=Math.min(1,o*2.5);t.showGrid?this.drawGridLines(n,i,a,c,h,t):this.drawAxes(n,i,l,s,t);let g=v=>n+v/Math.max(1,u-1)*a,f=v=>s-v/h*c,C=Math.max(2,Math.round(u*o));for(let v of e.datasets){r.save(),r.beginPath(),r.rect(n,i,a,c+1),r.clip();let w=v.color??N[0];r.beginPath();for(let E=0;E<Math.min(C,u);E++){let R=g(E),I=f(v.data[E]??0);E===0?r.moveTo(R,I):r.lineTo(R,I)}r.lineTo(g(Math.min(C,u)-1),s),r.lineTo(g(0),s),r.closePath(),r.fillStyle=w+this.alphaHex(t.fillOpacity>0?t.fillOpacity:.15),r.fill(),r.strokeStyle=w,r.lineWidth=t.strokeWidth>0?t.strokeWidth:t.lineWidth,r.lineCap="round",r.lineJoin="round",r.beginPath();for(let E=0;E<Math.min(C,u);E++){let R=g(E),I=f(v.data[E]??0);E===0?r.moveTo(R,I):r.lineTo(R,I)}r.stroke(),r.restore()}let b=this.getLabelStep(u,a,t.fontSize);r.globalAlpha=m,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center";for(let v=0;v<u;v++)v%b===0&&r.fillText(this.truncate(e.labels[v],10),g(v),s+16);r.globalAlpha=1}drawPie(e,t,o,r){let{ctx:n}=this,i=t.showLegend?40:0,s=t.width/2,l=this.titleBandHeight(t)+(t.height-i-this.titleBandHeight(t))/2,a=Math.min(t.width,t.height-i-this.titleBandHeight(t))/2-(t.compact?t.padding:20),c=r?a*.5:0,p=e.datasets[0]?.data??[],h=p.reduce((m,g)=>m+g,0)||1,u=-Math.PI/2;for(let m=0;m<p.length;m++){let g=p[m]/h*Math.PI*2*o,f=this.paletteColor(m);if(n.beginPath(),n.moveTo(s,l),n.arc(s,l,a,u,u+g),c>0&&n.arc(s,l,c,u+g,u,!0),n.closePath(),n.fillStyle=f,n.fill(),n.strokeStyle="#fff",n.lineWidth=2,n.stroke(),o===1&&p[m]/h>.05){let C=u+g/2,b=r?(a+c)/2:a*.65;n.fillStyle="#fff",n.font=`bold ${t.fontSize}px ${t.fontFamily}`,n.textAlign="center",n.textBaseline="middle",n.fillText(`${Math.round(p[m]/h*100)}%`,s+Math.cos(C)*b,l+Math.sin(C)*b),n.textBaseline="alphabetic"}u+=g}if(o>.9&&t.showLegend&&e.labels.length<=8){let m=(o-.9)/.1;n.globalAlpha=m,u=-Math.PI/2;for(let g=0;g<p.length;g++){let f=p[g]/h*Math.PI*2,C=u+f/2,b=s+Math.cos(C)*(a+16),v=l+Math.sin(C)*(a+16);n.fillStyle=t.textColor,n.font=`${t.fontSize}px ${t.fontFamily}`,n.textAlign=Math.cos(C)>0?"left":"right",n.textBaseline="middle",n.fillText(this.truncate(e.labels[g],12),b,v),n.textBaseline="alphabetic",u+=f}n.globalAlpha=1}}drawScatter(e,t,o){let{ctx:r}=this,{plotLeft:n,plotTop:i,plotBottom:s,plotRight:l,plotW:a,plotH:c}=this.getPlotArea(t,e),p=Math.max(...e.datasets.flatMap(v=>v.data),0),h=this.niceMax(p),u=e.labels.length,m=Math.min(1,o*2.5);t.showGrid?this.drawGridLines(n,i,a,c,h,t):this.drawAxes(n,i,l,s,t);let g=v=>n+v/Math.max(1,u-1)*a,f=v=>s-v/h*c,C=Math.round(u*o);for(let v=0;v<e.datasets.length;v++){let w=e.datasets[v],E=w.color??N[v%N.length];for(let R=0;R<Math.min(C,u);R++)r.beginPath(),r.arc(g(R),f(w.data[R]??0),5,0,Math.PI*2),r.fillStyle=E+"CC",r.fill(),r.strokeStyle=E,r.lineWidth=1.5,r.stroke()}let b=this.getLabelStep(u,a,t.fontSize);r.globalAlpha=m,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center";for(let v=0;v<u;v++)v%b===0&&r.fillText(this.truncate(e.labels[v],10),g(v),s+16);r.globalAlpha=1}drawPolar(e,t,o){let{ctx:r}=this,n=t.showLegend&&e.datasets.length>1?40:0,i=t.width/2,s=this.titleBandHeight(t)+(t.height-n-this.titleBandHeight(t))/2,l=Math.min(t.width,t.height-n-this.titleBandHeight(t))/2-(t.compact?t.padding:30),a=e.labels,c=a.length;if(c<3)return;let p=e.datasets.flatMap(u=>u.data),h=this.niceMax(Math.max(...p,0));r.strokeStyle=t.gridColor,r.lineWidth=1,r.setLineDash([4,4]);for(let u=1;u<=4;u++){r.beginPath();let m=u/4*l;for(let g=0;g<c;g++){let f=g/c*Math.PI*2-Math.PI/2,C=i+Math.cos(f)*m,b=s+Math.sin(f)*m;g===0?r.moveTo(C,b):r.lineTo(C,b)}r.closePath(),r.stroke()}r.setLineDash([]);for(let u=0;u<c;u++){let m=u/c*Math.PI*2-Math.PI/2;r.strokeStyle=t.gridColor,r.lineWidth=1,r.beginPath(),r.moveTo(i,s),r.lineTo(i+Math.cos(m)*l,s+Math.sin(m)*l),r.stroke(),r.globalAlpha=Math.min(1,o*2.5),r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center",r.textBaseline="middle",r.fillText(this.truncate(a[u],10),i+Math.cos(m)*(l+14),s+Math.sin(m)*(l+14)),r.textBaseline="alphabetic",r.globalAlpha=1}for(let u=0;u<e.datasets.length;u++){let m=e.datasets[u],g=m.color??N[u%N.length];r.beginPath();for(let f=0;f<c;f++){let C=f/c*Math.PI*2-Math.PI/2,b=(m.data[f]??0)/h*l*o,v=i+Math.cos(C)*b,w=s+Math.sin(C)*b;f===0?r.moveTo(v,w):r.lineTo(v,w)}r.closePath(),r.fillStyle=g+"33",r.fill(),r.strokeStyle=g,r.lineWidth=2,r.stroke()}}drawFunnel(e,t,o){let{ctx:r}=this,n=e.labels,i=e.datasets[0]?.data??[],s=Math.max(...i,0)||1,l=n.length,a=t.showLegend&&e.datasets.length>1?40:0,c=t.compact?t.padding:90,p=c,u=t.width-(t.compact?t.padding:20)-p,m=(t.compact?t.padding:10)+this.titleBandHeight(t),f=t.height-a-(t.compact?t.padding:10)-m,C=Math.max(f/Math.max(l,1)-2,1),b=p+u/2,v=Math.min(1,o*2.5);for(let w=0;w<l;w++){let R=(i[w]??0)/s*u*o,I=b-R/2,S=m+w*(C+2),T=this.paletteColor(w);r.fillStyle=T,r.beginPath(),r.roundRect(I,S,Math.max(R,0),C,3),r.fill(),r.globalAlpha=v,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="right",r.fillText(this.truncate(n[w],12),c-6,S+C/2+t.fontSize/3),r.globalAlpha=1,o===1&&R>50&&(r.fillStyle="#fff",r.textAlign="center",r.fillText(this.formatNum(i[w]??0),b,S+C/2+t.fontSize/3))}}drawGridLines(e,t,o,r,n,i){let{ctx:s}=this,l=5;s.strokeStyle=i.gridColor,s.lineWidth=1,s.setLineDash([4,4]);for(let a=0;a<=l;a++){let c=t+r-a/l*r;s.beginPath(),s.moveTo(e,c),s.lineTo(e+o,c),s.stroke(),i.showYLabels&&(s.fillStyle=i.textColor,s.font=`${i.fontSize}px ${i.fontFamily}`,s.textAlign="right",s.fillText(this.formatNum(n*a/l),e-6,c+4))}s.setLineDash([]),s.strokeStyle=i.gridColor,s.lineWidth=1.5,s.beginPath(),s.moveTo(e,t),s.lineTo(e,t+r),s.stroke(),s.beginPath(),s.moveTo(e,t+r),s.lineTo(e+o,t+r),s.stroke()}drawGridLinesRelative(e,t,o,r,n){let{ctx:i}=this,s=4;i.strokeStyle=n.gridColor,i.lineWidth=1,i.setLineDash([4,4]);for(let l=0;l<=s;l++){let a=t+r-l/s*r;i.beginPath(),i.moveTo(e,a),i.lineTo(e+o,a),i.stroke(),n.showYLabels&&(i.fillStyle=n.textColor,i.font=`${n.fontSize}px ${n.fontFamily}`,i.textAlign="right",i.fillText(`${Math.round(100*l/s)}%`,e-6,a+4))}i.setLineDash([]),i.strokeStyle=n.gridColor,i.lineWidth=1.5,i.beginPath(),i.moveTo(e,t),i.lineTo(e,t+r),i.stroke(),i.beginPath(),i.moveTo(e,t+r),i.lineTo(e+o,t+r),i.stroke()}drawLegend(e,t){let o=this.effectiveLegendPosition(t);o==="left"||o==="right"?this.drawLegendVertical(e,t,o):this.drawLegendHorizontal(e,t,o)}drawLegendHorizontal(e,t,o){let{ctx:r}=this,n=o==="top"?this.titleBandHeight(t)+22:t.height-16,i=e.datasets.length,s=t.width/i;r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="left",r.textBaseline="middle";for(let l=0;l<i;l++){let a=l*s+(s-80)/2;r.fillStyle=e.datasets[l].color??this.paletteColor(l),r.beginPath(),r.roundRect(a,n-5,12,10,2),r.fill(),r.fillStyle=t.textColor,r.fillText(this.truncate(e.datasets[l].label,14),a+16,n)}r.textBaseline="alphabetic"}drawLegendVertical(e,t,o){let{ctx:r}=this,n=t.fontSize+10,i=e.datasets.length,s=i*n,l=Math.max(this.titleBandHeight(t)+24,(t.height-s)/2),a=o==="left"?12:t.width-d.LEGEND_SIDE+12;r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="left",r.textBaseline="middle";for(let c=0;c<i;c++){let p=l+c*n+n/2;r.fillStyle=e.datasets[c].color??this.paletteColor(c),r.beginPath(),r.roundRect(a,p-5,12,10,2),r.fill(),r.fillStyle=t.textColor,r.fillText(this.truncate(e.datasets[c].label,14),a+16,p)}r.textBaseline="alphabetic"}drawAxes(e,t,o,r,n){let{ctx:i}=this;i.setLineDash([]),i.strokeStyle=n.gridColor,i.lineWidth=1.5,i.beginPath(),i.moveTo(e,t),i.lineTo(e,r),i.stroke(),i.beginPath(),i.moveTo(e,r),i.lineTo(o,r),i.stroke()}niceMax(e){if(e<=0)return 10;let t=Math.pow(10,Math.floor(Math.log10(e))),o=[1,1.5,2,2.5,3,4,5,6,7,8,9,10];for(let r of o)if(r*t>=e)return r*t;return 10*t}getLabelStep(e,t,o){let r=o*5.5;return Math.max(1,Math.ceil(e*r/t))}easeOutQuart(e){return 1-Math.pow(1-e,4)}truncate(e,t){return e.length>t?e.slice(0,t-1)+"\u2026":e}alphaHex(e){let t=Math.max(0,Math.min(1,e));return Math.round(t*255).toString(16).padStart(2,"0")}formatNum(e){return e>=1e6?(e/1e6).toFixed(e%1e6===0?0:1)+"M":e>=1e3?(e/1e3).toFixed(e%1e3===0?0:1)+"K":e!==Math.floor(e)?e.toFixed(1):String(Math.round(e))}};function ft(d,e={},t){let o=document.createElement(d);for(let[r,n]of Object.entries(e))typeof n=="boolean"?n&&o.setAttribute(r,""):o.setAttribute(r,String(n));return t&&(o.style.cssText=t),o}function y(d,e){let t=document.createElement("div");return d&&(t.className=d),e&&(t.style.cssText=e),t}function tn(d){for(;d.firstChild;)d.removeChild(d.firstChild)}function j(d,e,t){t?d.classList.add(e):d.classList.remove(e)}var je=class{constructor(e){this.eventBus=e;this.charts=new Map;this.transformer=new ae}createChart(e,t,o,r){this.charts.get(t.chartId)&&this.destroyChart(t.chartId);let i=y("pg-chart");if(i.setAttribute("data-chart-id",t.chartId),t.title){let c=y("pg-chart__title");c.textContent=t.title,i.appendChild(c)}let s=document.createElement("canvas");s.className="pg-chart__canvas",i.appendChild(s),e.appendChild(i);let l=new oe(s),a={config:t,containerEl:i,canvas:s,renderer:l};return this.charts.set(t.chartId,a),this.renderChart(t.chartId,o,r),this.eventBus.emit(x.CHART_CREATED,{chartId:t.chartId}),t.chartId}renderChart(e,t,o){let r=this.charts.get(e);if(!r)return;let{config:n}=r,i;if(n.labelColId&&n.valueColIds)i=this.transformer.fromSelectedColumns(t,o,n.labelColId,n.valueColIds);else{let s=o.find(a=>a.type==="string"||a.type==="dropdown"),l=o.filter(a=>a.type==="number"||a.type==="currency");if(!s||l.length===0)return;i=this.transformer.transform(t,{labelField:s.field,valueFields:l.slice(0,3).map(a=>a.field),...n.transformOptions})}r.renderer.render(i,{type:n.type,width:n.width??600,height:n.height??320,...n.renderOptions})}updateChartData(e,t,o){this.renderChart(e,t,o)}destroyChart(e){let t=this.charts.get(e);t&&(t.renderer.destroy(),t.containerEl.remove(),this.charts.delete(e),this.eventBus.emit(x.CHART_DESTROYED,{chartId:e}))}destroyAll(){for(let e of this.charts.keys())this.destroyChart(e)}getChart(e){return this.charts.get(e)}getAllChartIds(){return Array.from(this.charts.keys())}exportChartAsImage(e,t="png"){let o=this.charts.get(e);return o?o.canvas.toDataURL(`image/${t}`,.95):null}};function on(d){let e={chartId:d.chartId,chartType:d.chartType,cellRange:d.cellRange,chartColIds:d.chartColIds?[...d.chartColIds]:[d.categoryColId,...d.seriesColIds],categoryColId:d.categoryColId,seriesColIds:[...d.seriesColIds],aggregation:d.aggregation??"sum",switchCategorySeries:!1,unlinked:!1,title:{text:d.title??"",align:"left"},subtitle:{text:"",align:"left"},legend:{enabled:d.seriesColIds.length>1,position:"bottom"},xAxis:{showGridLines:!1,showTicks:!0,showLabels:!0},yAxis:{showGridLines:!0,showTicks:!0,showLabels:!0},series:{colorByKey:{},strokeWidth:2,fillOpacity:.4},style:{}};return Bo(e)}function Nt(d,e){let t={...d,...e,chartColIds:e.chartColIds?[...e.chartColIds]:d.chartColIds,seriesColIds:e.seriesColIds?[...e.seriesColIds]:d.seriesColIds,title:e.title?{...d.title,...e.title}:d.title,subtitle:e.subtitle?{...d.subtitle,...e.subtitle}:d.subtitle,legend:e.legend?{...d.legend,...e.legend}:d.legend,xAxis:e.xAxis?{...d.xAxis,...e.xAxis}:d.xAxis,yAxis:e.yAxis?{...d.yAxis,...e.yAxis}:d.yAxis,series:e.series?mi(d.series,e.series):d.series,style:e.style?{...d.style,...e.style}:d.style};return Bo(t)}function mi(d,e){return{...d,...e,colorByKey:e.colorByKey?{...d.colorByKey,...e.colorByKey}:d.colorByKey}}function Bo(d){if(d===null||typeof d!="object"||Object.isFrozen(d))return d;for(let e of Object.keys(d))Bo(d[e]);return Object.freeze(d)}var fi='<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18M9 21V9"/><line x1="7" y1="15" x2="7" y2="17"/><line x1="12" y1="12" x2="12" y2="17"/><line x1="17" y1="14" x2="17" y2="17"/></svg>',vi='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',rn='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3"/></svg>',bi='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3"/></svg>',yi='<svg width="4" height="16" viewBox="0 0 4 16" fill="currentColor"><circle cx="2" cy="2" r="1.5"/><circle cx="2" cy="8" r="1.5"/><circle cx="2" cy="14" r="1.5"/></svg>',nn='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>',Ci='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/></svg>',xi='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></svg>',wi='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18.36 5.64a5 5 0 0 1 0 7.07l-1.5 1.5"/><path d="M7.14 18.36a5 5 0 0 1 0-7.07l1.5-1.5"/><line x1="2" y1="2" x2="22" y2="22"/></svg>',Ot=class{constructor(e){this.containerEl=e;this.backdropEl=null;this.cardEl=null;this.bodyEl=null;this.chartAreaEl=null;this.canvasEl=null;this.dotsMenuEl=null;this.dotsBtnEl=null;this.outsideMousedownHandler=null;this.fullscreenBtnEl=null;this.legendEl=null;this.renderer=null;this.resizeObserver=null;this.isFullscreen=!1;this.currentData=null;this.currentType="column-grouped";this.currentTitle="";this.hiddenSeries=new Set;this.panelX=0;this.panelY=0;this.host=null;this.closing=!1}setHost(e){this.host=e}update(e){this.currentData=e,e&&e.datasets.length>1?this.buildLegend(e):this.legendEl&&(this.legendEl.innerHTML=""),this.renderChart()}getCardElement(){return this.cardEl}getBodyElement(){return this.bodyEl}setConfigReserve(e){this.chartAreaEl&&(this.chartAreaEl.style.right=`${Math.max(0,e)}px`,this.renderChart())}setChartType(e){this.currentType=e}getImageDataURL(e="png"){return this.canvasEl?this.canvasEl.toDataURL(`image/${e}`,.95):null}download(e="png"){this.downloadChart(e)}open(e,t,o){this.close(),this.currentType=e,this.currentTitle=t,this.currentData=o,this.isFullscreen=!1,this.hiddenSeries=new Set,this.buildDom(t,o===null),o!==null&&(o.datasets.length>1&&this.buildLegend(o),this.renderChart())}close(){if(this.closing)return;this.closing=!0;let e=this.backdropEl!==null;this.detachOutsideMousedown(),this.resizeObserver?.disconnect(),this.resizeObserver=null,this.renderer?.destroy(),this.renderer=null,this.backdropEl?.remove(),this.backdropEl=null,this.cardEl=null,this.bodyEl=null,this.chartAreaEl=null,this.canvasEl=null,this.dotsMenuEl=null,this.dotsBtnEl=null,this.fullscreenBtnEl=null,this.legendEl=null,this.currentData=null;let t=this.host;this.closing=!1,e&&t?.onClose()}buildDom(e,t){let o=document.createElement("div");o.className="pg-chart-panel-backdrop pg-chart-panel-backdrop--open";let r=document.createElement("div");r.className="pg-chart-panel",o.appendChild(r);let n=document.createElement("div");n.className="pg-chart-panel__header";let i=document.createElement("div");i.className="pg-chart-panel__title",i.textContent=t?"Chart Range":e;let s=document.createElement("div");s.className="pg-chart-panel__actions";let l=document.createElement("button");l.className="pg-chart-panel__action-btn",l.title="Toggle fullscreen",l.innerHTML=rn,l.addEventListener("click",()=>this.toggleFullscreen());let a=document.createElement("button");a.className="pg-chart-panel__action-btn",a.title="Close",a.innerHTML=vi,a.addEventListener("click",()=>this.close()),s.appendChild(l),s.appendChild(a),n.appendChild(i),n.appendChild(s),r.appendChild(n);let c=document.createElement("div");c.className="pg-chart-panel__body";let p=document.createElement("div");if(p.className="pg-chart-panel__chart-area",c.appendChild(p),this.chartAreaEl=p,t){let u=document.createElement("div");u.className="pg-chart-panel__empty",u.innerHTML=`
4522
- <span class="pg-chart-panel__empty-icon">${fi}</span>
4289
+ `;let n=this.registry.get(e);if(n){o.innerHTML=n;let i=o.querySelector("svg");i&&(i.setAttribute("width",String(r)),i.setAttribute("height",String(r)),i.style.display="block")}else o.style.background="currentColor",o.style.borderRadius="2px",o.style.opacity="0.3";return t.title&&(o.setAttribute("title",t.title),o.setAttribute("aria-label",t.title),o.removeAttribute("aria-hidden")),o}renderToString(e,t=16){let o=this.registry.get(e);return o?o.replace("<svg",`<svg width="${t}" height="${t}" style="display:block;"`).replace(/currentColor/g,"currentColor"):""}updateIcon(e,t,o={}){e.setAttribute("data-icon",t);let r=o.size??16,n=this.registry.get(t);if(n){e.innerHTML=n;let i=e.querySelector("svg");i&&(i.setAttribute("width",String(r)),i.setAttribute("height",String(r)))}}injectSpinKeyframes(){if(document.getElementById("pg-icon-keyframes"))return;let e=document.createElement("style");e.id="pg-icon-keyframes",e.textContent="@keyframes pg-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }",document.head.appendChild(e)}};var fi=["#2563eb","#16a34a","#d97706","#dc2626","#7c3aed","#0284c7","#db2777","#65a30d","#c2410c","#0891b2"],ae=class{transform(e,t){let o=e.filter(u=>u.type==="data"),{labelField:r,valueFields:n,aggregation:i="sum",limit:s,sortByValue:l,colors:a=fi}=t,c=new Map;for(let u of o){let g=String(this.resolveValue(u.data,r)??"Unknown");if(!c.has(g)){let f={};for(let C of n)f[C]=[];c.set(g,f)}let m=c.get(g);for(let f of n){let C=Number(this.resolveValue(u.data,f));isNaN(C)||m[f].push(C)}}let p=Array.from(c.keys()),h=n.map((u,g)=>{let m=p.map(f=>{let C=c.get(f)[u]??[];return this.aggregate(C,i)});return{label:u,data:m,color:a[g%a.length]}});if(l&&h.length>0){let u=h[0].data,g=p.map((m,f)=>f).sort((m,f)=>u[f]-u[m]);p=g.map(m=>p[m]);for(let m of h)m.data=g.map(f=>m.data[f])}if(s&&s>0){p=p.slice(0,s);for(let u of h)u.data=u.data.slice(0,s)}return{labels:p,datasets:h}}fromSelectedColumns(e,t,o,r){let n=t.find(s=>s.colId===o),i=t.filter(s=>r.includes(s.colId));return!n||i.length===0?{labels:[],datasets:[]}:this.transform(e,{labelField:n.field,valueFields:i.map(s=>s.field)})}aggregate(e,t){if(e.length===0)return 0;switch(t){case"sum":return e.reduce((o,r)=>o+r,0);case"avg":return e.reduce((o,r)=>o+r,0)/e.length;case"min":return Math.min(...e);case"max":return Math.max(...e);case"count":return e.length;default:return e.reduce((o,r)=>o+r,0)}}resolveValue(e,t){let o=t.split("."),r=e;for(let n of o){if(r==null)return;r=r[n]}return r}};var vi=["#008FFB","#00E396","#FEB019","#FF4560","#775DD0","#3F51B5","#03A9F4","#4CAF50","#F9CE1D","#FF9800"];function en(d){let e=getComputedStyle(d),t=(r,n)=>{let i=e.getPropertyValue(r).trim();return i.length>0?i:n},o=[];for(let r=1;r<=10;r++){let n=e.getPropertyValue(`--pg-chart-series-${r}`).trim();n.length>0&&o.push(n)}return{textColor:t("--pg-colors-text-primary","#374151"),mutedColor:t("--pg-colors-text-secondary","#6b7280"),gridColor:t("--pg-colors-border","#e5e7eb"),background:t("--pg-colors-surface","transparent"),fontFamily:t("--pg-typography-font-family","system-ui, sans-serif"),palette:o.length>0?o:vi}}var tn={type:"column-grouped",width:600,height:320,padding:40,showLegend:!0,showGrid:!0,showValues:!1,barWidth:.75,lineWidth:2,smooth:!1,fontFamily:"",fontSize:12,textColor:"",gridColor:"",backgroundColor:"transparent",animationDuration:400,title:"",titleColor:"",titleFontSize:15,titleAlign:"left",subtitle:"",subtitleColor:"",subtitleFontSize:12,subtitleAlign:"left",legendPosition:"bottom",xAxisTitle:"",yAxisTitle:"",axisTitleColor:"",axisLabelColor:"",axisLineColor:"",showXTicks:!0,showYTicks:!0,showXLabels:!0,showYLabels:!0,seriesColors:{},strokeWidth:0,fillOpacity:0,compact:!1},N=["#008FFB","#00E396","#FEB019","#FF4560","#775DD0","#3F51B5","#03A9F4","#4CAF50","#F9CE1D","#FF9800"];function on(d,e,t){let o=e.length>0?e:N;return{labels:d.labels,datasets:d.datasets.map((r,n)=>({...r,color:t[r.label]??r.color??o[n%o.length]}))}}var oe=class d{constructor(e){this.animProgress=1;this.rafId=null;this.hoverX=null;this.hoverY=null;this.hoverRafId=null;this.tooltipSmoothedY=null;this.lastData=null;this.lastOptions=null;this.seriesScales=[];this.seriesToggleRafs=new Map;this.theme=null;this.canvas=e;let t=e.getContext("2d");if(!t)throw new Error("[PhotonGrid] ChartRenderer: could not get 2d context");this.ctx=t,this.attachEvents()}prepareOptions(e){let t=en(this.canvas);this.theme=t,e.fontFamily||(e.fontFamily=t.fontFamily),e.textColor=e.axisLabelColor||e.textColor||t.textColor,e.gridColor=e.axisLineColor||e.gridColor||t.gridColor}paletteColor(e){let t=this.theme?.palette??N;return t[e%t.length]}render(e,t={type:"column-grouped"}){let o={...tn,...t};this.canvas.width=o.width,this.canvas.height=o.height,this.prepareOptions(o);let r=on(e,this.theme.palette,o.seriesColors);this.lastData=r,this.lastOptions=o,this.seriesScales=r.datasets.map(()=>1),this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null),o.animationDuration>0?this.animate(r,o):(this.animProgress=1,this.draw(r,o,1))}destroy(){this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.hoverRafId!==null&&(cancelAnimationFrame(this.hoverRafId),this.hoverRafId=null);for(let e of this.seriesToggleRafs.values())cancelAnimationFrame(e);this.seriesToggleRafs.clear()}toggleSeries(e,t,o,r={type:"column-grouped"}){let n={...tn,...r};this.prepareOptions(n);let i=on(o,this.theme.palette,n.seriesColors);for(this.lastData=i,this.lastOptions=n;this.seriesScales.length<i.datasets.length;)this.seriesScales.push(1);let s=this.seriesToggleRafs.get(e);s!==void 0&&(cancelAnimationFrame(s),this.seriesToggleRafs.delete(e));let l=this.seriesScales[e]??(t?0:1),a=t?1:0,c=280,p=performance.now(),h=u=>{let g=Math.min(1,(u-p)/c),m=t?this.easeOutQuart(g):1-this.easeOutQuart(1-g);this.seriesScales[e]=l+(a-l)*m,this.draw(i,n,1),g<1?this.seriesToggleRafs.set(e,requestAnimationFrame(h)):(this.seriesScales[e]=a,this.seriesToggleRafs.delete(e),this.draw(i,n,1))};this.seriesToggleRafs.set(e,requestAnimationFrame(h))}attachEvents(){this.canvas.addEventListener("mousemove",e=>{let t=this.canvas.getBoundingClientRect(),o=this.canvas.width/t.width,r=this.canvas.height/t.height;this.hoverX=(e.clientX-t.left)*o,this.hoverY=(e.clientY-t.top)*r,this.canvas.style.cursor="crosshair",this.scheduleHoverRedraw()}),this.canvas.addEventListener("mouseleave",()=>{this.hoverX=null,this.hoverY=null,this.tooltipSmoothedY=null,this.canvas.style.cursor="default",this.scheduleHoverRedraw()})}scheduleHoverRedraw(){this.hoverRafId!==null&&cancelAnimationFrame(this.hoverRafId),this.hoverRafId=requestAnimationFrame(()=>{if(this.hoverRafId=null,!this.lastData||!this.lastOptions||this.animProgress<1)return;let e=this.stepTooltipLerp();this.draw(this.lastData,this.lastOptions,1),this.hoverX!==null&&this.drawHover(this.lastData,this.lastOptions),e&&this.hoverX!==null&&this.scheduleHoverRedraw()})}stepTooltipLerp(){if(this.hoverY===null)return this.tooltipSmoothedY=null,!1;if(this.tooltipSmoothedY===null)return this.tooltipSmoothedY=this.hoverY,!1;let e=this.hoverY-this.tooltipSmoothedY;return Math.abs(e)<.5?(this.tooltipSmoothedY=this.hoverY,!1):(this.tooltipSmoothedY+=e*.14,!0)}drawHover(e,t){let o=t.type,r=o.startsWith("bar-")||o==="bar";["pie","doughnut","polar","funnel"].includes(o)||(r?this.drawBarHover(e,t):this.drawCartesianHover(e,t))}drawCartesianHover(e,t){let{ctx:o}=this,{plotLeft:r,plotTop:n,plotBottom:i,plotRight:s,plotW:l,plotH:a}=this.getPlotArea(t,e),c=this.hoverX;if(c<r||c>s)return;let p=e.labels.length;if(!p)return;let h=t.type,u=h.startsWith("column"),g,m;if(u){let f=l/Math.max(p,1);g=Math.min(Math.floor((c-r)/f),p-1),m=r+g*f+f/2}else{let f=p>1?l/(p-1):0;g=f>0?Math.round((c-r)/f):0,g=Math.max(0,Math.min(g,p-1)),m=p>1?r+g/(p-1)*l:r+l/2}if(o.save(),o.strokeStyle="rgba(100,116,139,0.30)",o.lineWidth=1,o.setLineDash([5,4]),o.beginPath(),o.moveTo(m,n),o.lineTo(m,i),o.stroke(),o.setLineDash([]),o.restore(),["line","area","scatter"].includes(h)){let f=Math.max(...e.datasets.flatMap(v=>v.data),0),C=this.niceMax(f),b=v=>i-v/C*a;for(let v of e.datasets){let w=v.data[g]??0,E=m,R=b(w);o.save(),o.beginPath(),o.arc(E,R,5,0,Math.PI*2),o.fillStyle=v.color??N[0],o.fill(),o.strokeStyle="#fff",o.lineWidth=2.5,o.stroke(),o.restore()}}if(u){let f=l/Math.max(p,1),C=r+g*f;o.save(),o.fillStyle="rgba(100,116,139,0.06)",o.fillRect(C,n,f,i-n),o.restore()}this.drawTooltip(e,t,g,m,this.tooltipSmoothedY,n,i,!1)}drawBarHover(e,t){let{ctx:o}=this,r=t.showLegend&&e.datasets.length>1?40:0,n=80,i=10+this.titleBandHeight(t),s=t.width-20,l=t.height-r-30,a=l-i,c=this.hoverY;if(c<i||c>l)return;let p=e.labels.length;if(!p)return;let h=a/Math.max(p,1),u=Math.min(Math.floor((c-i)/h),p-1),g=i+u*h+h/2;o.save(),o.strokeStyle="rgba(100,116,139,0.30)",o.lineWidth=1,o.setLineDash([5,4]),o.beginPath(),o.moveTo(n,g),o.lineTo(s,g),o.stroke(),o.setLineDash([]),o.restore(),o.save(),o.fillStyle="rgba(100,116,139,0.06)",o.fillRect(n,i+u*h,s-n,h),o.restore(),this.drawTooltip(e,t,u,s-10,g,i,l,!0)}drawTooltip(e,t,o,r,n,i,s,l){let{ctx:a}=this,c=e.labels[o]??"",p=e.datasets.filter((S,I)=>(this.seriesScales[I]??1)>.05).map(S=>({color:S.color??N[0],label:S.label,value:this.formatNum(S.data[o]??0)})),h=10,u=18,g=8,m=7;a.font=`600 ${t.fontSize}px ${t.fontFamily}`;let f=a.measureText(c).width;a.font=`${t.fontSize}px ${t.fontFamily}`;let C=Math.max(...p.map(S=>{a.font=`600 ${t.fontSize}px ${t.fontFamily}`;let I=a.measureText(S.value).width;a.font=`${t.fontSize}px ${t.fontFamily}`;let T=a.measureText(this.truncate(S.label,16)).width;return g+m+T+16+I}),0),b=Math.max(f,C)+h*2,v=h*2+u+p.length*u+(p.length>0?4:0),w;l?w=r-b-14:(w=r+14,w+b>t.width-8&&(w=r-b-14)),w=Math.max(4,w);let R=(n!==null?n:(i+s)/2)-v/2;R=Math.max(i,Math.min(R,s-v)),R=Math.max(4,R),a.save(),a.shadowColor="rgba(0,0,0,0.12)",a.shadowBlur=12,a.shadowOffsetY=3,a.fillStyle=t.backgroundColor==="transparent"?"#fff":t.backgroundColor,a.strokeStyle="rgba(0,0,0,0.08)",a.lineWidth=1,a.beginPath(),a.roundRect(w,R,b,v,6),a.fill(),a.shadowColor="transparent",a.stroke(),a.restore(),a.save(),a.font=`600 ${t.fontSize}px ${t.fontFamily}`,a.fillStyle=t.textColor,a.textAlign="left",a.textBaseline="middle",a.fillText(c,w+h,R+h+u/2),a.strokeStyle="rgba(0,0,0,0.07)",a.lineWidth=1,a.beginPath(),a.moveTo(w+h,R+h+u),a.lineTo(w+b-h,R+h+u),a.stroke(),a.font=`${t.fontSize}px ${t.fontFamily}`;for(let S=0;S<p.length;S++){let I=R+h+u+4+S*u+u/2;a.fillStyle=p[S].color,a.beginPath(),a.roundRect(w+h,I-g/2,g,g,2),a.fill(),a.fillStyle=t.textColor,a.textAlign="left",a.fillText(this.truncate(p[S].label,16),w+h+g+m,I),a.font=`600 ${t.fontSize}px ${t.fontFamily}`,a.fillStyle=p[S].color,a.textAlign="right",a.fillText(p[S].value,w+b-h,I),a.font=`${t.fontSize}px ${t.fontFamily}`}a.textBaseline="alphabetic",a.restore()}animate(e,t){this.animProgress=0;let o=performance.now(),r=n=>{let i=n-o;this.animProgress=Math.min(1,i/t.animationDuration);let s=this.easeOutQuart(this.animProgress);this.draw(e,t,s),this.animProgress<1?this.rafId=requestAnimationFrame(r):this.rafId=null};this.rafId=requestAnimationFrame(r)}titleBandHeight(e){let t=0;return e.title&&(t+=e.titleFontSize+8),e.subtitle&&(t+=e.subtitleFontSize+6),t>0?t+6:0}legendActive(e,t){return e.showLegend&&t.datasets.length>1}supportsSideLegend(e){let t=e.type;return t.startsWith("column")||t==="line"||t==="area"||t==="scatter"}effectiveLegendPosition(e){return this.supportsSideLegend(e)?e.legendPosition:"bottom"}static{this.LEGEND_BAND=40}static{this.LEGEND_SIDE=120}getPlotArea(e,t){let o=this.legendActive(e,t),r=this.effectiveLegendPosition(e),n=d.LEGEND_BAND,i=d.LEGEND_SIDE,s=this.titleBandHeight(e),l=e.xAxisTitle?e.fontSize+10:0,a=e.yAxisTitle?e.fontSize+12:0,c=e.compact?e.padding+s:20+s,p=e.compact?e.height-e.padding:e.height-36-l,h=e.compact?e.padding:65+a,u=e.width-(e.compact?e.padding:20);return o&&(r==="top"?c+=n:r==="bottom"?p-=n:r==="left"?h+=i:r==="right"&&(u-=i)),{plotLeft:h,plotTop:c,plotRight:u,plotBottom:p,plotW:u-h,plotH:p-c,legendH:o&&(r==="top"||r==="bottom")?n:0}}draw(e,t,o=1){this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),t.backgroundColor!=="transparent"&&(this.ctx.fillStyle=t.backgroundColor,this.ctx.fillRect(0,0,this.canvas.width,this.canvas.height));let r=t.type;switch(r==="bar"&&(r="column-grouped"),r){case"column-grouped":this.drawColumnGrouped(e,t,o);break;case"column-stacked":this.drawColumnStacked(e,t,o);break;case"column-100stacked":this.drawColumn100Stacked(e,t,o);break;case"bar-grouped":this.drawBarGrouped(e,t,o);break;case"bar-stacked":this.drawBarStacked(e,t,o);break;case"bar-100stacked":this.drawBar100Stacked(e,t,o);break;case"line":this.drawLine(e,t,o);break;case"area":this.drawArea(e,t,o);break;case"pie":this.drawPie(e,t,o,!1);break;case"doughnut":this.drawPie(e,t,o,!0);break;case"scatter":this.drawScatter(e,t,o);break;case"polar":this.drawPolar(e,t,o);break;case"funnel":this.drawFunnel(e,t,o);break;default:this.drawColumnGrouped(e,t,o);break}this.supportsSideLegend(t)&&this.drawAxisTitles(t),this.drawTitleBlock(t),this.legendActive(t,e)&&this.drawLegend(e,t)}drawTitleBlock(e){if(!e.title&&!e.subtitle)return;let{ctx:t}=this,o=this.theme;t.save(),t.textBaseline="alphabetic";let r=20;if(e.title){t.font=`600 ${e.titleFontSize}px ${e.fontFamily}`,t.fillStyle=e.titleColor||o?.textColor||e.textColor;let n=this.alignedX(e.titleAlign,e.width);t.textAlign=e.titleAlign,t.fillText(e.title,n,r),r+=e.titleFontSize+4}if(e.subtitle){t.font=`${e.subtitleFontSize}px ${e.fontFamily}`,t.fillStyle=e.subtitleColor||o?.mutedColor||e.textColor;let n=this.alignedX(e.subtitleAlign,e.width);t.textAlign=e.subtitleAlign,t.fillText(e.subtitle,n,r+e.subtitleFontSize)}t.restore()}alignedX(e,t){return e==="center"?t/2:e==="right"?t-20:20}drawAxisTitles(e){if(!e.xAxisTitle&&!e.yAxisTitle)return;let{ctx:t}=this,o=e.axisTitleColor||this.theme?.textColor||e.textColor;t.save(),t.fillStyle=o,t.font=`600 ${e.fontSize}px ${e.fontFamily}`,e.xAxisTitle&&(t.textAlign="center",t.textBaseline="bottom",t.fillText(e.xAxisTitle,e.width/2,e.height-4)),e.yAxisTitle&&(t.save(),t.translate(14,e.height/2),t.rotate(-Math.PI/2),t.textAlign="center",t.textBaseline="top",t.fillText(e.yAxisTitle,0,0),t.restore()),t.restore()}drawColumnGrouped(e,t,o){let{ctx:r}=this,{plotLeft:n,plotTop:i,plotBottom:s,plotRight:l,plotW:a,plotH:c}=this.getPlotArea(t,e),p=e.datasets.length,h=p>1,u=e.datasets.map(R=>this.niceMax(Math.max(...R.data,0))),g=Math.max(...e.datasets.flatMap(R=>R.data),0),m=this.niceMax(g);t.showGrid?h?this.drawGridLinesRelative(n,i,a,c,t):this.drawGridLines(n,i,a,c,m,t):this.drawAxes(n,i,l,s,t);let f=e.labels.length,C=a/Math.max(f,1),b=C*t.barWidth/p,v=this.getLabelStep(f,a,t.fontSize),w=f>8,E=Math.min(1,o*2.5);for(let R=0;R<f;R++){let S=n+R*C+C*(1-t.barWidth)/2;for(let I=0;I<p;I++){let T=e.datasets[I].data[R]??0,M=h?u[I]||1:m,L=this.seriesScales[I]??1,_=T/M*c*o*L,V=S+I*b,z=s-_;r.fillStyle=e.datasets[I].color??N[I%N.length],r.beginPath(),r.roundRect(V,z,Math.max(b-1,1),Math.max(_,0),[3,3,0,0]),r.fill()}if(R%v===0){r.save(),r.globalAlpha=E,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`;let I=S+C*t.barWidth*.5,T=s+14;w?(r.translate(I,T),r.rotate(Math.PI/4),r.textAlign="left",r.fillText(this.truncate(e.labels[R],12),0,0)):(r.textAlign="center",r.fillText(this.truncate(e.labels[R],12),I,T)),r.restore()}}}drawColumnStacked(e,t,o){let{ctx:r}=this,{plotLeft:n,plotTop:i,plotBottom:s,plotRight:l,plotW:a,plotH:c}=this.getPlotArea(t,e),p=e.datasets.length,h=p>1,u=e.datasets.map(R=>this.niceMax(Math.max(...R.data,0))),g=e.labels.map((R,S)=>e.datasets.reduce((I,T)=>I+(T.data[S]??0),0)),m=this.niceMax(Math.max(...g,0));t.showGrid?h?this.drawGridLinesRelative(n,i,a,c,t):this.drawGridLines(n,i,a,c,m,t):this.drawAxes(n,i,l,s,t);let f=e.labels.length,C=a/Math.max(f,1),b=C*t.barWidth,v=c/Math.max(p,1),w=this.getLabelStep(f,a,t.fontSize),E=Math.min(1,o*2.5);for(let R=0;R<f;R++){let S=n+R*C+(C-b)/2,I=s;for(let T=0;T<p;T++){let M=e.datasets[T].data[R]??0,L=(h?M/(u[T]||1)*v:M/m*c)*o,_=I-L;r.fillStyle=e.datasets[T].color??N[T%N.length],r.beginPath(),T===p-1?r.roundRect(S,_,Math.max(b,1),Math.max(L,0),[3,3,0,0]):r.rect(S,_,Math.max(b,1),Math.max(L,0)),r.fill(),I-=L}R%w===0&&(r.globalAlpha=E,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center",r.fillText(this.truncate(e.labels[R],12),S+b/2,s+14),r.globalAlpha=1)}}drawColumn100Stacked(e,t,o){let{ctx:r}=this,{plotLeft:n,plotTop:i,plotBottom:s,plotRight:l,plotW:a,plotH:c}=this.getPlotArea(t,e);t.showGrid?this.drawGridLines(n,i,a,c,100,t):this.drawAxes(n,i,l,s,t);let p=e.datasets.length,h=p>1,u=e.datasets.map(v=>this.niceMax(Math.max(...v.data,0))),g=e.labels.length,m=a/Math.max(g,1),f=m*t.barWidth,C=this.getLabelStep(g,a,t.fontSize),b=Math.min(1,o*2.5);for(let v=0;v<g;v++){let w=e.datasets.map((I,T)=>{let M=I.data[v]??0;return h?M/(u[T]||1):M}),E=w.reduce((I,T)=>I+T,0)||1,R=n+v*m+(m-f)/2,S=s;for(let I=0;I<p;I++){let T=w[I]/E*c*o,M=S-T;r.fillStyle=e.datasets[I].color??N[I%N.length],r.beginPath(),I===p-1?r.roundRect(R,M,Math.max(f,1),Math.max(T,0),[3,3,0,0]):r.rect(R,M,Math.max(f,1),Math.max(T,0)),r.fill(),S-=T}v%C===0&&(r.globalAlpha=b,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center",r.fillText(this.truncate(e.labels[v],12),R+f/2,s+14),r.globalAlpha=1)}}drawBarGrouped(e,t,o){let{ctx:r}=this,n=t.showLegend&&e.datasets.length>1?40:0,i=t.compact?t.padding:80,s=i,l=(t.compact?t.padding:10)+this.titleBandHeight(t),a=t.width-(t.compact?t.padding:20),c=t.height-n-(t.compact?t.padding:30),p=a-s,h=c-l,u=e.datasets.length,g=u>1,m=e.datasets.map(S=>this.niceMax(Math.max(...S.data,0))),f=Math.max(...e.datasets.flatMap(S=>S.data),0),C=this.niceMax(f),b=Math.min(1,o*2.5);if(t.showGrid){r.strokeStyle=t.gridColor,r.lineWidth=1,r.setLineDash([4,4]);for(let I=0;I<=5;I++){let T=s+I/5*p;r.beginPath(),r.moveTo(T,l),r.lineTo(T,c),r.stroke(),r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center";let M=g?`${Math.round(100*I/5)}%`:this.formatNum(C*I/5);r.fillText(M,T,c+14)}r.setLineDash([]),r.strokeStyle=t.gridColor,r.lineWidth=1.5,r.beginPath(),r.moveTo(s,l),r.lineTo(s,c),r.stroke(),r.beginPath(),r.moveTo(s,c),r.lineTo(a,c),r.stroke()}else this.drawAxes(s,l,a,c,t);let v=e.labels.length,w=h/Math.max(v,1),E=w*t.barWidth/u,R=this.getLabelStep(v,h,t.fontSize);for(let S=0;S<v;S++){let I=l+S*w+w*(1-t.barWidth)/2;for(let T=0;T<u;T++){let M=e.datasets[T].data[S]??0,L=g?m[T]||1:C,_=this.seriesScales[T]??1,V=M/L*p*o*_,z=I+T*E;r.fillStyle=e.datasets[T].color??N[T%N.length],r.beginPath(),r.roundRect(s,z,Math.max(V,0),Math.max(E-1,1),[0,3,3,0]),r.fill()}S%R===0&&(r.globalAlpha=b,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="right",r.fillText(this.truncate(e.labels[S],10),i-6,I+w*t.barWidth*.5+t.fontSize/3),r.globalAlpha=1)}}drawBarStacked(e,t,o){let{ctx:r}=this,n=t.showLegend&&e.datasets.length>1?40:0,i=t.compact?t.padding:80,s=i,l=(t.compact?t.padding:10)+this.titleBandHeight(t),a=t.width-(t.compact?t.padding:20),c=t.height-n-(t.compact?t.padding:30),p=a-s,h=c-l,u=e.datasets.length,g=u>1,m=e.datasets.map(T=>this.niceMax(Math.max(...T.data,0))),f=e.labels.map((T,M)=>e.datasets.reduce((L,_)=>L+(_.data[M]??0),0)),C=Math.max(...f,0),b=this.niceMax(C),v=Math.min(1,o*2.5);if(t.showGrid){r.strokeStyle=t.gridColor,r.lineWidth=1,r.setLineDash([4,4]);for(let M=0;M<=5;M++){let L=s+M/5*p;r.beginPath(),r.moveTo(L,l),r.lineTo(L,c),r.stroke(),r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center";let _=g?`${Math.round(100*M/5)}%`:this.formatNum(b*M/5);r.fillText(_,L,c+14)}r.setLineDash([]),r.strokeStyle=t.gridColor,r.lineWidth=1.5,r.beginPath(),r.moveTo(s,l),r.lineTo(s,c),r.stroke(),r.beginPath(),r.moveTo(s,c),r.lineTo(a,c),r.stroke()}else this.drawAxes(s,l,a,c,t);let w=e.labels.length,E=h/Math.max(w,1),R=E*t.barWidth,S=p/Math.max(u,1),I=this.getLabelStep(w,h,t.fontSize);for(let T=0;T<w;T++){let M=l+T*E+(E-R)/2,L=s;for(let _=0;_<u;_++){let V=e.datasets[_].data[T]??0,z=(g?V/(m[_]||1)*S:V/b*p)*o;r.fillStyle=e.datasets[_].color??N[_%N.length],r.beginPath(),_===u-1?r.roundRect(L,M,Math.max(z,0),Math.max(R,1),[0,3,3,0]):r.rect(L,M,Math.max(z,0),Math.max(R,1)),r.fill(),L+=z}T%I===0&&(r.globalAlpha=v,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="right",r.fillText(this.truncate(e.labels[T],10),i-6,M+R/2+t.fontSize/3),r.globalAlpha=1)}}drawBar100Stacked(e,t,o){let{ctx:r}=this,n=t.showLegend&&e.datasets.length>1?40:0,i=t.compact?t.padding:80,s=i,l=(t.compact?t.padding:10)+this.titleBandHeight(t),a=t.width-(t.compact?t.padding:20),c=t.height-n-(t.compact?t.padding:30),p=a-s,h=c-l,u=Math.min(1,o*2.5);if(t.showGrid){r.strokeStyle=t.gridColor,r.lineWidth=1,r.setLineDash([4,4]);for(let R=0;R<=5;R++){let S=s+R/5*p;r.beginPath(),r.moveTo(S,l),r.lineTo(S,c),r.stroke(),r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center",r.fillText(`${100*R/5}%`,S,c+14)}r.setLineDash([]),r.strokeStyle=t.gridColor,r.lineWidth=1.5,r.beginPath(),r.moveTo(s,l),r.lineTo(s,c),r.stroke(),r.beginPath(),r.moveTo(s,c),r.lineTo(a,c),r.stroke()}else this.drawAxes(s,l,a,c,t);let g=e.labels.length,m=h/Math.max(g,1),f=m*t.barWidth,C=this.getLabelStep(g,h,t.fontSize),b=e.datasets.length,v=b>1,w=e.datasets.map(E=>this.niceMax(Math.max(...E.data,0)));for(let E=0;E<g;E++){let R=e.datasets.map((M,L)=>{let _=M.data[E]??0;return v?_/(w[L]||1):_}),S=R.reduce((M,L)=>M+L,0)||1,I=l+E*m+(m-f)/2,T=s;for(let M=0;M<b;M++){let L=R[M]/S*p*o;r.fillStyle=e.datasets[M].color??N[M%N.length],r.beginPath(),M===e.datasets.length-1?r.roundRect(T,I,Math.max(L,0),Math.max(f,1),[0,3,3,0]):r.rect(T,I,Math.max(L,0),Math.max(f,1)),r.fill(),T+=L}E%C===0&&(r.globalAlpha=u,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="right",r.fillText(this.truncate(e.labels[E],10),i-6,I+f/2+t.fontSize/3),r.globalAlpha=1)}}drawLine(e,t,o){let{ctx:r}=this,{plotLeft:n,plotTop:i,plotBottom:s,plotRight:l,plotW:a,plotH:c}=this.getPlotArea(t,e),p=Math.max(...e.datasets.flatMap(v=>v.data),0),h=this.niceMax(p),u=e.labels.length,g=Math.min(1,o*2.5);t.showGrid?this.drawGridLines(n,i,a,c,h,t):this.drawAxes(n,i,l,s,t);let m=v=>n+v/Math.max(1,u-1)*a,f=v=>s-v/h*c,C=Math.max(2,Math.round(u*o));for(let v of e.datasets){r.save(),r.beginPath(),r.rect(n,i,a,c+1),r.clip(),r.strokeStyle=v.color??N[0],r.lineWidth=t.strokeWidth>0?t.strokeWidth:t.lineWidth,r.lineCap="round",r.lineJoin="round",r.beginPath();for(let w=0;w<Math.min(C,u);w++){let E=m(w),R=f(v.data[w]??0);w===0?r.moveTo(E,R):r.lineTo(E,R)}r.stroke();for(let w=0;w<Math.min(C,u);w++)r.beginPath(),r.arc(m(w),f(v.data[w]??0),3,0,Math.PI*2),r.fillStyle=v.color??N[0],r.fill(),r.strokeStyle="#fff",r.lineWidth=1.5,r.stroke();r.restore()}let b=this.getLabelStep(u,a,t.fontSize);r.globalAlpha=g,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center";for(let v=0;v<u;v++)v%b===0&&r.fillText(this.truncate(e.labels[v],10),m(v),s+16);r.globalAlpha=1}drawArea(e,t,o){let{ctx:r}=this,{plotLeft:n,plotTop:i,plotBottom:s,plotRight:l,plotW:a,plotH:c}=this.getPlotArea(t,e),p=Math.max(...e.datasets.flatMap(v=>v.data),0),h=this.niceMax(p),u=e.labels.length,g=Math.min(1,o*2.5);t.showGrid?this.drawGridLines(n,i,a,c,h,t):this.drawAxes(n,i,l,s,t);let m=v=>n+v/Math.max(1,u-1)*a,f=v=>s-v/h*c,C=Math.max(2,Math.round(u*o));for(let v of e.datasets){r.save(),r.beginPath(),r.rect(n,i,a,c+1),r.clip();let w=v.color??N[0];r.beginPath();for(let E=0;E<Math.min(C,u);E++){let R=m(E),S=f(v.data[E]??0);E===0?r.moveTo(R,S):r.lineTo(R,S)}r.lineTo(m(Math.min(C,u)-1),s),r.lineTo(m(0),s),r.closePath(),r.fillStyle=w+this.alphaHex(t.fillOpacity>0?t.fillOpacity:.15),r.fill(),r.strokeStyle=w,r.lineWidth=t.strokeWidth>0?t.strokeWidth:t.lineWidth,r.lineCap="round",r.lineJoin="round",r.beginPath();for(let E=0;E<Math.min(C,u);E++){let R=m(E),S=f(v.data[E]??0);E===0?r.moveTo(R,S):r.lineTo(R,S)}r.stroke(),r.restore()}let b=this.getLabelStep(u,a,t.fontSize);r.globalAlpha=g,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center";for(let v=0;v<u;v++)v%b===0&&r.fillText(this.truncate(e.labels[v],10),m(v),s+16);r.globalAlpha=1}drawPie(e,t,o,r){let{ctx:n}=this,i=t.showLegend?40:0,s=t.width/2,l=this.titleBandHeight(t)+(t.height-i-this.titleBandHeight(t))/2,a=Math.min(t.width,t.height-i-this.titleBandHeight(t))/2-(t.compact?t.padding:20),c=r?a*.5:0,p=e.datasets[0]?.data??[],h=p.reduce((g,m)=>g+m,0)||1,u=-Math.PI/2;for(let g=0;g<p.length;g++){let m=p[g]/h*Math.PI*2*o,f=this.paletteColor(g);if(n.beginPath(),n.moveTo(s,l),n.arc(s,l,a,u,u+m),c>0&&n.arc(s,l,c,u+m,u,!0),n.closePath(),n.fillStyle=f,n.fill(),n.strokeStyle="#fff",n.lineWidth=2,n.stroke(),o===1&&p[g]/h>.05){let C=u+m/2,b=r?(a+c)/2:a*.65;n.fillStyle="#fff",n.font=`bold ${t.fontSize}px ${t.fontFamily}`,n.textAlign="center",n.textBaseline="middle",n.fillText(`${Math.round(p[g]/h*100)}%`,s+Math.cos(C)*b,l+Math.sin(C)*b),n.textBaseline="alphabetic"}u+=m}if(o>.9&&t.showLegend&&e.labels.length<=8){let g=(o-.9)/.1;n.globalAlpha=g,u=-Math.PI/2;for(let m=0;m<p.length;m++){let f=p[m]/h*Math.PI*2,C=u+f/2,b=s+Math.cos(C)*(a+16),v=l+Math.sin(C)*(a+16);n.fillStyle=t.textColor,n.font=`${t.fontSize}px ${t.fontFamily}`,n.textAlign=Math.cos(C)>0?"left":"right",n.textBaseline="middle",n.fillText(this.truncate(e.labels[m],12),b,v),n.textBaseline="alphabetic",u+=f}n.globalAlpha=1}}drawScatter(e,t,o){let{ctx:r}=this,{plotLeft:n,plotTop:i,plotBottom:s,plotRight:l,plotW:a,plotH:c}=this.getPlotArea(t,e),p=Math.max(...e.datasets.flatMap(v=>v.data),0),h=this.niceMax(p),u=e.labels.length,g=Math.min(1,o*2.5);t.showGrid?this.drawGridLines(n,i,a,c,h,t):this.drawAxes(n,i,l,s,t);let m=v=>n+v/Math.max(1,u-1)*a,f=v=>s-v/h*c,C=Math.round(u*o);for(let v=0;v<e.datasets.length;v++){let w=e.datasets[v],E=w.color??N[v%N.length];for(let R=0;R<Math.min(C,u);R++)r.beginPath(),r.arc(m(R),f(w.data[R]??0),5,0,Math.PI*2),r.fillStyle=E+"CC",r.fill(),r.strokeStyle=E,r.lineWidth=1.5,r.stroke()}let b=this.getLabelStep(u,a,t.fontSize);r.globalAlpha=g,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center";for(let v=0;v<u;v++)v%b===0&&r.fillText(this.truncate(e.labels[v],10),m(v),s+16);r.globalAlpha=1}drawPolar(e,t,o){let{ctx:r}=this,n=t.showLegend&&e.datasets.length>1?40:0,i=t.width/2,s=this.titleBandHeight(t)+(t.height-n-this.titleBandHeight(t))/2,l=Math.min(t.width,t.height-n-this.titleBandHeight(t))/2-(t.compact?t.padding:30),a=e.labels,c=a.length;if(c<3)return;let p=e.datasets.flatMap(u=>u.data),h=this.niceMax(Math.max(...p,0));r.strokeStyle=t.gridColor,r.lineWidth=1,r.setLineDash([4,4]);for(let u=1;u<=4;u++){r.beginPath();let g=u/4*l;for(let m=0;m<c;m++){let f=m/c*Math.PI*2-Math.PI/2,C=i+Math.cos(f)*g,b=s+Math.sin(f)*g;m===0?r.moveTo(C,b):r.lineTo(C,b)}r.closePath(),r.stroke()}r.setLineDash([]);for(let u=0;u<c;u++){let g=u/c*Math.PI*2-Math.PI/2;r.strokeStyle=t.gridColor,r.lineWidth=1,r.beginPath(),r.moveTo(i,s),r.lineTo(i+Math.cos(g)*l,s+Math.sin(g)*l),r.stroke(),r.globalAlpha=Math.min(1,o*2.5),r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center",r.textBaseline="middle",r.fillText(this.truncate(a[u],10),i+Math.cos(g)*(l+14),s+Math.sin(g)*(l+14)),r.textBaseline="alphabetic",r.globalAlpha=1}for(let u=0;u<e.datasets.length;u++){let g=e.datasets[u],m=g.color??N[u%N.length];r.beginPath();for(let f=0;f<c;f++){let C=f/c*Math.PI*2-Math.PI/2,b=(g.data[f]??0)/h*l*o,v=i+Math.cos(C)*b,w=s+Math.sin(C)*b;f===0?r.moveTo(v,w):r.lineTo(v,w)}r.closePath(),r.fillStyle=m+"33",r.fill(),r.strokeStyle=m,r.lineWidth=2,r.stroke()}}drawFunnel(e,t,o){let{ctx:r}=this,n=e.labels,i=e.datasets[0]?.data??[],s=Math.max(...i,0)||1,l=n.length,a=t.showLegend&&e.datasets.length>1?40:0,c=t.compact?t.padding:90,p=c,u=t.width-(t.compact?t.padding:20)-p,g=(t.compact?t.padding:10)+this.titleBandHeight(t),f=t.height-a-(t.compact?t.padding:10)-g,C=Math.max(f/Math.max(l,1)-2,1),b=p+u/2,v=Math.min(1,o*2.5);for(let w=0;w<l;w++){let R=(i[w]??0)/s*u*o,S=b-R/2,I=g+w*(C+2),T=this.paletteColor(w);r.fillStyle=T,r.beginPath(),r.roundRect(S,I,Math.max(R,0),C,3),r.fill(),r.globalAlpha=v,r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="right",r.fillText(this.truncate(n[w],12),c-6,I+C/2+t.fontSize/3),r.globalAlpha=1,o===1&&R>50&&(r.fillStyle="#fff",r.textAlign="center",r.fillText(this.formatNum(i[w]??0),b,I+C/2+t.fontSize/3))}}drawGridLines(e,t,o,r,n,i){let{ctx:s}=this,l=5;s.strokeStyle=i.gridColor,s.lineWidth=1,s.setLineDash([4,4]);for(let a=0;a<=l;a++){let c=t+r-a/l*r;s.beginPath(),s.moveTo(e,c),s.lineTo(e+o,c),s.stroke(),i.showYLabels&&(s.fillStyle=i.textColor,s.font=`${i.fontSize}px ${i.fontFamily}`,s.textAlign="right",s.fillText(this.formatNum(n*a/l),e-6,c+4))}s.setLineDash([]),s.strokeStyle=i.gridColor,s.lineWidth=1.5,s.beginPath(),s.moveTo(e,t),s.lineTo(e,t+r),s.stroke(),s.beginPath(),s.moveTo(e,t+r),s.lineTo(e+o,t+r),s.stroke()}drawGridLinesRelative(e,t,o,r,n){let{ctx:i}=this,s=4;i.strokeStyle=n.gridColor,i.lineWidth=1,i.setLineDash([4,4]);for(let l=0;l<=s;l++){let a=t+r-l/s*r;i.beginPath(),i.moveTo(e,a),i.lineTo(e+o,a),i.stroke(),n.showYLabels&&(i.fillStyle=n.textColor,i.font=`${n.fontSize}px ${n.fontFamily}`,i.textAlign="right",i.fillText(`${Math.round(100*l/s)}%`,e-6,a+4))}i.setLineDash([]),i.strokeStyle=n.gridColor,i.lineWidth=1.5,i.beginPath(),i.moveTo(e,t),i.lineTo(e,t+r),i.stroke(),i.beginPath(),i.moveTo(e,t+r),i.lineTo(e+o,t+r),i.stroke()}drawLegend(e,t){let o=this.effectiveLegendPosition(t);o==="left"||o==="right"?this.drawLegendVertical(e,t,o):this.drawLegendHorizontal(e,t,o)}drawLegendHorizontal(e,t,o){let{ctx:r}=this,n=o==="top"?this.titleBandHeight(t)+22:t.height-16,i=e.datasets.length,s=t.width/i;r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="left",r.textBaseline="middle";for(let l=0;l<i;l++){let a=l*s+(s-80)/2;r.fillStyle=e.datasets[l].color??this.paletteColor(l),r.beginPath(),r.roundRect(a,n-5,12,10,2),r.fill(),r.fillStyle=t.textColor,r.fillText(this.truncate(e.datasets[l].label,14),a+16,n)}r.textBaseline="alphabetic"}drawLegendVertical(e,t,o){let{ctx:r}=this,n=t.fontSize+10,i=e.datasets.length,s=i*n,l=Math.max(this.titleBandHeight(t)+24,(t.height-s)/2),a=o==="left"?12:t.width-d.LEGEND_SIDE+12;r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="left",r.textBaseline="middle";for(let c=0;c<i;c++){let p=l+c*n+n/2;r.fillStyle=e.datasets[c].color??this.paletteColor(c),r.beginPath(),r.roundRect(a,p-5,12,10,2),r.fill(),r.fillStyle=t.textColor,r.fillText(this.truncate(e.datasets[c].label,14),a+16,p)}r.textBaseline="alphabetic"}drawAxes(e,t,o,r,n){let{ctx:i}=this;i.setLineDash([]),i.strokeStyle=n.gridColor,i.lineWidth=1.5,i.beginPath(),i.moveTo(e,t),i.lineTo(e,r),i.stroke(),i.beginPath(),i.moveTo(e,r),i.lineTo(o,r),i.stroke()}niceMax(e){if(e<=0)return 10;let t=Math.pow(10,Math.floor(Math.log10(e))),o=[1,1.5,2,2.5,3,4,5,6,7,8,9,10];for(let r of o)if(r*t>=e)return r*t;return 10*t}getLabelStep(e,t,o){let r=o*5.5;return Math.max(1,Math.ceil(e*r/t))}easeOutQuart(e){return 1-Math.pow(1-e,4)}truncate(e,t){return e.length>t?e.slice(0,t-1)+"\u2026":e}alphaHex(e){let t=Math.max(0,Math.min(1,e));return Math.round(t*255).toString(16).padStart(2,"0")}formatNum(e){return e>=1e6?(e/1e6).toFixed(e%1e6===0?0:1)+"M":e>=1e3?(e/1e3).toFixed(e%1e3===0?0:1)+"K":e!==Math.floor(e)?e.toFixed(1):String(Math.round(e))}};function ft(d,e={},t){let o=document.createElement(d);for(let[r,n]of Object.entries(e))typeof n=="boolean"?n&&o.setAttribute(r,""):o.setAttribute(r,String(n));return t&&(o.style.cssText=t),o}function y(d,e){let t=document.createElement("div");return d&&(t.className=d),e&&(t.style.cssText=e),t}function rn(d){for(;d.firstChild;)d.removeChild(d.firstChild)}function j(d,e,t){t?d.classList.add(e):d.classList.remove(e)}var Xe=class{constructor(e){this.eventBus=e;this.charts=new Map;this.transformer=new ae}createChart(e,t,o,r){this.charts.get(t.chartId)&&this.destroyChart(t.chartId);let i=y("pg-chart");if(i.setAttribute("data-chart-id",t.chartId),t.title){let c=y("pg-chart__title");c.textContent=t.title,i.appendChild(c)}let s=document.createElement("canvas");s.className="pg-chart__canvas",i.appendChild(s),e.appendChild(i);let l=new oe(s),a={config:t,containerEl:i,canvas:s,renderer:l};return this.charts.set(t.chartId,a),this.renderChart(t.chartId,o,r),this.eventBus.emit(x.CHART_CREATED,{chartId:t.chartId}),t.chartId}renderChart(e,t,o){let r=this.charts.get(e);if(!r)return;let{config:n}=r,i;if(n.labelColId&&n.valueColIds)i=this.transformer.fromSelectedColumns(t,o,n.labelColId,n.valueColIds);else{let s=o.find(a=>a.type==="string"||a.type==="dropdown"),l=o.filter(a=>a.type==="number"||a.type==="currency");if(!s||l.length===0)return;i=this.transformer.transform(t,{labelField:s.field,valueFields:l.slice(0,3).map(a=>a.field),...n.transformOptions})}r.renderer.render(i,{type:n.type,width:n.width??600,height:n.height??320,...n.renderOptions})}updateChartData(e,t,o){this.renderChart(e,t,o)}destroyChart(e){let t=this.charts.get(e);t&&(t.renderer.destroy(),t.containerEl.remove(),this.charts.delete(e),this.eventBus.emit(x.CHART_DESTROYED,{chartId:e}))}destroyAll(){for(let e of this.charts.keys())this.destroyChart(e)}getChart(e){return this.charts.get(e)}getAllChartIds(){return Array.from(this.charts.keys())}exportChartAsImage(e,t="png"){let o=this.charts.get(e);return o?o.canvas.toDataURL(`image/${t}`,.95):null}};function nn(d){let e={chartId:d.chartId,chartType:d.chartType,cellRange:d.cellRange,chartColIds:d.chartColIds?[...d.chartColIds]:[d.categoryColId,...d.seriesColIds],categoryColId:d.categoryColId,seriesColIds:[...d.seriesColIds],aggregation:d.aggregation??"sum",switchCategorySeries:!1,unlinked:!1,title:{text:d.title??"",align:"left"},subtitle:{text:"",align:"left"},legend:{enabled:d.seriesColIds.length>1,position:"bottom"},xAxis:{showGridLines:!1,showTicks:!0,showLabels:!0},yAxis:{showGridLines:!0,showTicks:!0,showLabels:!0},series:{colorByKey:{},strokeWidth:2,fillOpacity:.4},style:{}};return zo(e)}function Nt(d,e){let t={...d,...e,chartColIds:e.chartColIds?[...e.chartColIds]:d.chartColIds,seriesColIds:e.seriesColIds?[...e.seriesColIds]:d.seriesColIds,title:e.title?{...d.title,...e.title}:d.title,subtitle:e.subtitle?{...d.subtitle,...e.subtitle}:d.subtitle,legend:e.legend?{...d.legend,...e.legend}:d.legend,xAxis:e.xAxis?{...d.xAxis,...e.xAxis}:d.xAxis,yAxis:e.yAxis?{...d.yAxis,...e.yAxis}:d.yAxis,series:e.series?bi(d.series,e.series):d.series,style:e.style?{...d.style,...e.style}:d.style};return zo(t)}function bi(d,e){return{...d,...e,colorByKey:e.colorByKey?{...d.colorByKey,...e.colorByKey}:d.colorByKey}}function zo(d){if(d===null||typeof d!="object"||Object.isFrozen(d))return d;for(let e of Object.keys(d))zo(d[e]);return Object.freeze(d)}var yi='<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18M9 21V9"/><line x1="7" y1="15" x2="7" y2="17"/><line x1="12" y1="12" x2="12" y2="17"/><line x1="17" y1="14" x2="17" y2="17"/></svg>',Ci='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',sn='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3"/></svg>',xi='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3"/></svg>',wi='<svg width="4" height="16" viewBox="0 0 4 16" fill="currentColor"><circle cx="2" cy="2" r="1.5"/><circle cx="2" cy="8" r="1.5"/><circle cx="2" cy="14" r="1.5"/></svg>',ln='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>',Ei='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/></svg>',Ri='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="4" y1="21" x2="4" y2="14"/><line x1="4" y1="10" x2="4" y2="3"/><line x1="12" y1="21" x2="12" y2="12"/><line x1="12" y1="8" x2="12" y2="3"/><line x1="20" y1="21" x2="20" y2="16"/><line x1="20" y1="12" x2="20" y2="3"/><line x1="1" y1="14" x2="7" y2="14"/><line x1="9" y1="8" x2="15" y2="8"/><line x1="17" y1="16" x2="23" y2="16"/></svg>',Si='<svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18.36 5.64a5 5 0 0 1 0 7.07l-1.5 1.5"/><path d="M7.14 18.36a5 5 0 0 1 0-7.07l1.5-1.5"/><line x1="2" y1="2" x2="22" y2="22"/></svg>',Ot=class{constructor(e){this.containerEl=e;this.backdropEl=null;this.cardEl=null;this.bodyEl=null;this.chartAreaEl=null;this.canvasEl=null;this.dotsMenuEl=null;this.dotsBtnEl=null;this.outsideMousedownHandler=null;this.fullscreenBtnEl=null;this.legendEl=null;this.renderer=null;this.resizeObserver=null;this.isFullscreen=!1;this.currentData=null;this.currentType="column-grouped";this.currentTitle="";this.hiddenSeries=new Set;this.panelX=0;this.panelY=0;this.host=null;this.closing=!1}setHost(e){this.host=e}update(e){this.currentData=e,e&&e.datasets.length>1?this.buildLegend(e):this.legendEl&&(this.legendEl.innerHTML=""),this.renderChart()}getCardElement(){return this.cardEl}getBodyElement(){return this.bodyEl}setConfigReserve(e){this.chartAreaEl&&(this.chartAreaEl.style.right=`${Math.max(0,e)}px`,this.renderChart())}setChartType(e){this.currentType=e}getImageDataURL(e="png"){return this.canvasEl?this.canvasEl.toDataURL(`image/${e}`,.95):null}download(e="png"){this.downloadChart(e)}open(e,t,o){this.close(),this.currentType=e,this.currentTitle=t,this.currentData=o,this.isFullscreen=!1,this.hiddenSeries=new Set,this.buildDom(t,o===null),o!==null&&(o.datasets.length>1&&this.buildLegend(o),this.renderChart())}close(){if(this.closing)return;this.closing=!0;let e=this.backdropEl!==null;this.detachOutsideMousedown(),this.resizeObserver?.disconnect(),this.resizeObserver=null,this.renderer?.destroy(),this.renderer=null,this.backdropEl?.remove(),this.backdropEl=null,this.cardEl=null,this.bodyEl=null,this.chartAreaEl=null,this.canvasEl=null,this.dotsMenuEl=null,this.dotsBtnEl=null,this.fullscreenBtnEl=null,this.legendEl=null,this.currentData=null;let t=this.host;this.closing=!1,e&&t?.onClose()}buildDom(e,t){let o=document.createElement("div");o.className="pg-chart-panel-backdrop pg-chart-panel-backdrop--open";let r=document.createElement("div");r.className="pg-chart-panel",o.appendChild(r);let n=document.createElement("div");n.className="pg-chart-panel__header";let i=document.createElement("div");i.className="pg-chart-panel__title",i.textContent=t?"Chart Range":e;let s=document.createElement("div");s.className="pg-chart-panel__actions";let l=document.createElement("button");l.className="pg-chart-panel__action-btn",l.title="Toggle fullscreen",l.innerHTML=sn,l.addEventListener("click",()=>this.toggleFullscreen());let a=document.createElement("button");a.className="pg-chart-panel__action-btn",a.title="Close",a.innerHTML=Ci,a.addEventListener("click",()=>this.close()),s.appendChild(l),s.appendChild(a),n.appendChild(i),n.appendChild(s),r.appendChild(n);let c=document.createElement("div");c.className="pg-chart-panel__body";let p=document.createElement("div");if(p.className="pg-chart-panel__chart-area",c.appendChild(p),this.chartAreaEl=p,t){let u=document.createElement("div");u.className="pg-chart-panel__empty",u.innerHTML=`
4290
+ <span class="pg-chart-panel__empty-icon">${yi}</span>
4523
4291
  <span class="pg-chart-panel__empty-text">No chart data available</span>
4524
4292
  <span class="pg-chart-panel__empty-sub">Select cells that include Number, Currency, or Percentage columns</span>
4525
- `,p.appendChild(u)}else{let u=document.createElement("canvas");u.className="pg-chart-panel__canvas",p.appendChild(u),this.canvasEl=u,this.buildDotsMenu(p),this.resizeObserver=new ResizeObserver(()=>{this.renderChart()}),this.resizeObserver.observe(p)}r.appendChild(c);let h=document.createElement("div");h.className="pg-chart-panel__legend",r.appendChild(h),this.legendEl=h,this.containerEl.appendChild(o),this.backdropEl=o,this.cardEl=r,this.bodyEl=c,this.fullscreenBtnEl=l,this.centerPanel(),this.attachDrag(n)}buildDotsMenu(e){let t=this.host?this.host.getToolbarItems():["download"];if(t.length===0)return;let o=document.createElement("button");o.className="pg-chart-panel__dots-btn",o.title="Chart menu",o.innerHTML=yi;let r=document.createElement("div");r.className="pg-chart-panel__dots-menu";for(let n of this.resolveMenuEntries(t)){let i=document.createElement("button");i.className="pg-chart-panel__dots-item",n.item==="unlink"&&this.host?.isUnlinked()&&(i.classList.add("pg-chart-panel__dots-item--disabled"),i.disabled=!0),i.innerHTML=`${n.icon} ${n.label}`,i.addEventListener("click",()=>{n.action(),this.closeDotsMenu()}),r.appendChild(i)}o.addEventListener("click",n=>{n.stopPropagation(),r.classList.contains("pg-chart-panel__dots-menu--open")?this.closeDotsMenu():(r.classList.add("pg-chart-panel__dots-menu--open"),o.classList.add("pg-chart-panel__dots-btn--active"),this.attachOutsideMousedown())}),e.appendChild(o),e.appendChild(r),this.dotsMenuEl=r,this.dotsBtnEl=o}resolveMenuEntries(e){let t=[];for(let o of e)switch(o){case"edit":t.push({item:o,label:"Edit Chart",icon:Ci,action:()=>this.host?.onEditChart()});break;case"advancedSettings":t.push({item:o,label:"Advanced Settings",icon:xi,action:()=>this.host?.onAdvancedSettings()});break;case"unlink":t.push({item:o,label:"Unlink from Grid",icon:wi,action:()=>this.host?.onUnlink()});break;case"download":t.push({item:o,label:"Download PNG",icon:nn,action:()=>this.downloadChart("png")}),t.push({item:o,label:"Download JPEG",icon:nn,action:()=>this.downloadChart("jpeg")});break}return t}centerPanel(){if(!this.backdropEl||!this.cardEl)return;let e=this.backdropEl.offsetWidth,t=this.backdropEl.offsetHeight,o=this.cardEl.offsetWidth,r=this.cardEl.offsetHeight;this.panelX=Math.max(0,(e-o)/2),this.panelY=Math.max(0,(t-r)/2),this.applyPosition()}applyPosition(){this.cardEl&&(this.cardEl.style.left=`${this.panelX}px`,this.cardEl.style.top=`${this.panelY}px`,this.host?.onMove(this.cardEl.getBoundingClientRect()))}attachDrag(e){e.addEventListener("mousedown",t=>{if(this.isFullscreen||t.target.closest("button"))return;t.preventDefault();let o=t.clientX,r=t.clientY,n=this.panelX,i=this.panelY;e.classList.add("pg-chart-panel__header--dragging"),this.cardEl?.classList.add("pg-chart-panel--dragging");let s=a=>{if(!this.backdropEl||!this.cardEl)return;let c=this.backdropEl.offsetWidth-this.cardEl.offsetWidth,p=this.backdropEl.offsetHeight-this.cardEl.offsetHeight;this.panelX=Math.max(0,Math.min(n+a.clientX-o,c)),this.panelY=Math.max(0,Math.min(i+a.clientY-r,p)),this.applyPosition()},l=()=>{e.classList.remove("pg-chart-panel__header--dragging"),this.cardEl?.classList.remove("pg-chart-panel--dragging"),document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",l)};document.addEventListener("mousemove",s),document.addEventListener("mouseup",l)})}closeDotsMenu(){this.dotsMenuEl?.classList.remove("pg-chart-panel__dots-menu--open"),this.dotsBtnEl?.classList.remove("pg-chart-panel__dots-btn--active"),this.detachOutsideMousedown()}attachOutsideMousedown(){this.detachOutsideMousedown();let e=t=>{let o=t.target;this.dotsMenuEl?.contains(o)||this.dotsBtnEl?.contains(o)||this.closeDotsMenu()};this.outsideMousedownHandler=e,document.addEventListener("mousedown",e)}detachOutsideMousedown(){this.outsideMousedownHandler&&(document.removeEventListener("mousedown",this.outsideMousedownHandler),this.outsideMousedownHandler=null)}toggleFullscreen(){if(!(!this.cardEl||!this.fullscreenBtnEl)){if(this.isFullscreen=!this.isFullscreen,this.cardEl.classList.toggle("pg-chart-panel--fullscreen",this.isFullscreen),this.fullscreenBtnEl.innerHTML=this.isFullscreen?bi:rn,this.fullscreenBtnEl.title=this.isFullscreen?"Exit fullscreen":"Toggle fullscreen",this.isFullscreen)this.panelX=0,this.panelY=0,this.applyPosition();else{setTimeout(()=>{this.centerPanel(),this.renderChart()},50);return}setTimeout(()=>this.renderChart(),50)}}renderChart(){if(!this.canvasEl||!this.currentData||!this.cardEl)return;let e=this.canvasEl.parentElement;if(!e)return;let t=e.clientWidth-16,o=e.clientHeight-16;t<=0||o<=0||(this.renderer||(this.renderer=new oe(this.canvasEl)),this.renderer.render(this.currentData,this.resolveRenderOptions(t,o)))}resolveRenderOptions(e,t){return{...this.host?this.host.getRenderOptions({width:e,height:t}):{type:this.currentType,width:e,height:t,showGrid:!0,animationDuration:400},type:this.currentType,width:e,height:t,showLegend:!1}}buildLegend(e){this.legendEl&&(this.legendEl.innerHTML="",e.datasets.forEach((t,o)=>{let r=document.createElement("button");r.type="button",r.className="pg-chart-panel__legend-item";let n=document.createElement("span");n.className="pg-chart-panel__legend-swatch",n.style.background=t.color??"#008FFB";let i=document.createElement("span");i.className="pg-chart-panel__legend-label",i.textContent=t.label,r.appendChild(n),r.appendChild(i),r.addEventListener("click",()=>this.handleLegendToggle(o)),this.legendEl.appendChild(r)}))}handleLegendToggle(e){if(!this.renderer||!this.currentData||!this.canvasEl)return;let t=this.canvasEl.parentElement;if(!t)return;let o=t.clientWidth-16,r=t.clientHeight-16;if(o<=0||r<=0)return;let n=this.hiddenSeries.has(e);n?this.hiddenSeries.delete(e):this.hiddenSeries.add(e),this.legendEl?.children[e]?.classList.toggle("pg-chart-panel__legend-item--hidden",!n),this.renderer.toggleSeries(e,n,this.currentData,this.resolveRenderOptions(o,r))}downloadChart(e){if(!this.canvasEl)return;let t=this.canvasEl;if(e==="jpeg"){let i=document.createElement("canvas");i.width=this.canvasEl.width,i.height=this.canvasEl.height;let s=i.getContext("2d");s&&(s.fillStyle="#ffffff",s.fillRect(0,0,i.width,i.height),s.drawImage(this.canvasEl,0,0),t=i)}let o=e==="png"?"image/png":"image/jpeg",r=t.toDataURL(o,.95),n=document.createElement("a");n.href=r,n.download=`${this.currentTitle||"chart"}.${e}`,document.body.appendChild(n),n.click(),document.body.removeChild(n)}};var Ei=new ae;function ln(d,e,t){let o=t.find(s=>s.colId===d.categoryColId),r=d.seriesColIds.map(s=>t.find(l=>l.colId===s)).filter(s=>s!==void 0);if(!o||r.length===0)return{labels:[],datasets:[]};let n=d.aggregation==="none"?Ri(e,o,r):Ei.transform(e,{labelField:o.field,valueFields:r.map(s=>s.field),aggregation:d.aggregation}),i={labels:n.labels,datasets:n.datasets.map((s,l)=>({...s,label:r[l]?.header??s.label}))};return d.switchCategorySeries?Si(i):i}function Ri(d,e,t){let o=d.filter(s=>s.type==="data"),r=[],n=new Map;for(let s of o){let l=String(sn(s.data,e.field)??"Unknown"),a=n.get(l)??0;n.set(l,a+1),r.push(a===0?l:`${l} (${a+1})`)}let i=t.map(s=>({label:s.header,data:o.map(l=>{let a=Number(sn(l.data,s.field));return Number.isNaN(a)?0:a})}));return{labels:r,datasets:i}}function Si(d){let e=d.datasets.map(o=>o.label),t=d.labels.map((o,r)=>({label:o,data:d.datasets.map(n=>n.data[r]??0)}));return{labels:e,datasets:t}}function an(d,e){return{type:d.chartType,width:e.width,height:e.height,animationDuration:400,showGrid:d.yAxis.showGridLines??!0,showLegend:d.legend.enabled,legendPosition:d.legend.position,title:d.title.text??"",titleColor:d.title.color??"",titleAlign:d.title.align??"left",subtitle:d.subtitle.text??"",subtitleColor:d.subtitle.color??"",subtitleAlign:d.subtitle.align??"left",xAxisTitle:d.xAxis.title??"",yAxisTitle:d.yAxis.title??"",axisTitleColor:d.xAxis.titleColor??d.yAxis.titleColor??"",axisLabelColor:d.yAxis.labelColor??d.xAxis.labelColor??"",axisLineColor:d.yAxis.lineColor??d.xAxis.lineColor??"",showXLabels:d.xAxis.showLabels??!0,showYLabels:d.yAxis.showLabels??!0,showXTicks:d.xAxis.showTicks??!0,showYTicks:d.yAxis.showTicks??!0,seriesColors:d.series.colorByKey,strokeWidth:d.series.strokeWidth??0,fillOpacity:d.series.fillOpacity??0,backgroundColor:d.style.backgroundColor??"transparent",fontFamily:d.style.fontFamily??"",fontSize:d.style.fontSize??12}}var dn=["sum","avg","count","min","max","none"];function sn(d,e){let t=e.split("."),o=d;for(let r of t){if(o==null)return;o=o[r]}return o}var Ii='<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg>',Ti='<svg width="10" height="16" viewBox="0 0 10 16" fill="currentColor"><circle cx="2.5" cy="3" r="1.4"/><circle cx="7.5" cy="3" r="1.4"/><circle cx="2.5" cy="8" r="1.4"/><circle cx="7.5" cy="8" r="1.4"/><circle cx="2.5" cy="13" r="1.4"/><circle cx="7.5" cy="13" r="1.4"/></svg>',ki='<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>';function vt(d,e){let t=document.createElement("label");t.className="pg-chart-ctrl__row";let o=document.createElement("span");return o.className="pg-chart-ctrl__label",o.textContent=d,t.appendChild(o),t.appendChild(e),t}function bt(d,e,t,o){let r=document.createElement("select");r.className="pg-chart-ctrl__select";for(let n of d){let i=document.createElement("option");i.value=n.value,i.textContent=n.label,n.value===e&&(i.selected=!0),r.appendChild(i)}return r.addEventListener("change",()=>t(r.value)),o?vt(o,r):r}function de(d,e,t){let o=document.createElement("div");o.className="pg-chart-ctrl__row";let r=document.createElement("span");r.className="pg-chart-ctrl__label",r.textContent=t;let n=document.createElement("button");n.type="button",n.className="pg-chart-ctrl__toggle",n.setAttribute("role","switch"),n.setAttribute("aria-checked",String(d)),n.classList.toggle("pg-chart-ctrl__toggle--on",d);let i=document.createElement("span");return i.className="pg-chart-ctrl__toggle-knob",n.appendChild(i),n.addEventListener("click",()=>{let s=!n.classList.contains("pg-chart-ctrl__toggle--on");n.classList.toggle("pg-chart-ctrl__toggle--on",s),n.setAttribute("aria-checked",String(s)),e(s)}),o.appendChild(r),o.appendChild(n),o}function ne(d,e,t){let o=document.createElement("input");return o.type="color",o.className="pg-chart-ctrl__color",d&&(o.value=d),o.addEventListener("input",()=>e(o.value)),vt(t,o)}function Ft(d,e,t,o,r,n){let i=document.createElement("input");return i.type="number",i.className="pg-chart-ctrl__input",i.value=String(d),o!==void 0&&(i.min=String(o)),r!==void 0&&(i.max=String(r)),n!==void 0&&(i.step=String(n)),i.addEventListener("input",()=>{let s=Number(i.value);Number.isNaN(s)||e(s)}),vt(t,i)}function yt(d,e,t,o=""){let r=document.createElement("input");return r.type="text",r.className="pg-chart-ctrl__input",r.value=d,r.placeholder=o,r.addEventListener("input",()=>e(r.value)),vt(t,r)}function Bt(d,e,t,o){let r=document.createElement("div");r.className="pg-chart-ctrl__segmented";for(let n of d){let i=document.createElement("button");i.type="button",i.className="pg-chart-ctrl__segment",i.textContent=n.label,i.classList.toggle("pg-chart-ctrl__segment--active",n.value===e),i.addEventListener("click",()=>{for(let s of Array.from(r.children))s.classList.remove("pg-chart-ctrl__segment--active");i.classList.add("pg-chart-ctrl__segment--active"),t(n.value)}),r.appendChild(i)}return o?vt(o,r):r}function re(d,e=!1){let t=document.createElement("div");t.className="pg-chart-ctrl__section";let o=document.createElement("button");o.type="button",o.className="pg-chart-ctrl__section-header";let r=document.createElement("span");r.className="pg-chart-ctrl__section-chevron",r.innerHTML=Ii;let n=document.createElement("span");n.textContent=d,o.appendChild(r),o.appendChild(n);let i=document.createElement("div");return i.className="pg-chart-ctrl__section-body",t.classList.toggle("pg-chart-ctrl__section--open",e),o.addEventListener("click",()=>{t.classList.toggle("pg-chart-ctrl__section--open")}),t.appendChild(o),t.appendChild(i),{section:t,body:i}}function cn(d,e,t){let o=document.createElement("div");o.className="pg-chart-ctrl__list";let r=d.map(n=>n.id);return d.forEach(n=>{let i=document.createElement("div");i.className="pg-chart-ctrl__list-item",i.dataset.id=n.id;let s=document.createElement("span");if(s.className="pg-chart-ctrl__list-handle",s.innerHTML=Ti,n.color){let c=document.createElement("span");c.className="pg-chart-ctrl__list-swatch",c.style.setProperty("--pg-chart-swatch",n.color),i.appendChild(s),i.appendChild(c)}else i.appendChild(s);let l=document.createElement("span");l.className="pg-chart-ctrl__list-label",l.textContent=n.label,i.appendChild(l);let a=document.createElement("button");a.type="button",a.className="pg-chart-ctrl__list-remove",a.innerHTML=ki,a.addEventListener("click",()=>t(n.id)),i.appendChild(a),Mi(i,o,r,e),o.appendChild(i)}),o}function Mi(d,e,t,o){let r=d.querySelector(".pg-chart-ctrl__list-handle");r&&r.addEventListener("mousedown",n=>{n.preventDefault(),d.classList.add("pg-chart-ctrl__list-item--dragging");let i=l=>{let c=Array.from(e.querySelectorAll(".pg-chart-ctrl__list-item")).find(p=>{if(p===d)return!1;let h=p.getBoundingClientRect();return l.clientY<h.top+h.height/2});c?e.insertBefore(d,c):e.appendChild(d)},s=()=>{d.classList.remove("pg-chart-ctrl__list-item--dragging"),document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",s);let l=Array.from(e.querySelectorAll(".pg-chart-ctrl__list-item")).map(a=>a.dataset.id??"").filter(a=>a.length>0);t.splice(0,t.length,...l),o(l)};document.addEventListener("mousemove",i),document.addEventListener("mouseup",s)})}var _i=[{group:"Column",entries:[{type:"column-grouped",label:"Grouped"},{type:"column-stacked",label:"Stacked"},{type:"column-100stacked",label:"100% Stacked"}]},{group:"Bar",entries:[{type:"bar-grouped",label:"Grouped"},{type:"bar-stacked",label:"Stacked"},{type:"bar-100stacked",label:"100% Stacked"}]},{group:"Pie",entries:[{type:"pie",label:"Pie"},{type:"doughnut",label:"Doughnut"},{type:"polar",label:"Polar"}]},{group:"Line & Area",entries:[{type:"line",label:"Line"},{type:"area",label:"Area"},{type:"scatter",label:"Scatter"}]},{group:"Other",entries:[{type:"funnel",label:"Funnel"}]}],Li={labels:["","","",""],datasets:[{label:"Series 1",data:[6,9,5,8]},{label:"Series 2",data:[4,6,8,5]}]},Di=132,Ai=64,Hi=240,Pi=[{value:"top",label:"Top"},{value:"right",label:"Right"},{value:"bottom",label:"Bottom"},{value:"left",label:"Left"}],pn=[{value:"left",label:"Left"},{value:"center",label:"Center"},{value:"right",label:"Right"}],Gi=[{value:"",label:"Theme default"},{value:"Inter, system-ui, sans-serif",label:"Inter"},{value:"system-ui, sans-serif",label:"System UI"},{value:"Arial, Helvetica, sans-serif",label:"Arial"},{value:"Roboto, Arial, sans-serif",label:"Roboto"},{value:'Georgia, "Times New Roman", serif',label:"Georgia"},{value:'"Courier New", monospace',label:"Monospace"}],Ni='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',Oi={chart:"Chart",setup:"Set Up",customize:"Customize"},zt=class{constructor(e,t,o){this.containerEl=e;this.host=t;this.onReserveChange=o;this.rootEl=null;this.tabsEl=null;this.bodyEl=null;this.thumbRenderers=[];this.openRaf=null;this.closeTimer=null;this.activeTab=t.getDefaultPanel()}isOpen(){return this.rootEl!==null}open(e){e&&(this.activeTab=e),this.closeTimer!==null&&(clearTimeout(this.closeTimer),this.closeTimer=null),this.rootEl?this.render():this.build(),this.slideIn(),this.onReserveChange?.(this.rootEl?this.rootEl.offsetWidth:0)}close(){if(!this.rootEl)return;this.openRaf!==null&&(cancelAnimationFrame(this.openRaf),this.openRaf=null),this.rootEl.classList.remove("pg-chart-config--open"),this.onReserveChange?.(0);let e=this.rootEl;this.closeTimer=window.setTimeout(()=>{this.closeTimer=null,this.rootEl===e&&this.teardown()},Hi)}destroy(){this.openRaf!==null&&(cancelAnimationFrame(this.openRaf),this.openRaf=null),this.closeTimer!==null&&(clearTimeout(this.closeTimer),this.closeTimer=null),this.onReserveChange?.(0),this.teardown()}teardown(){this.disposeThumbnails(),this.rootEl?.remove(),this.rootEl=null,this.tabsEl=null,this.bodyEl=null}slideIn(){if(!this.rootEl)return;let e=this.rootEl;e.classList.contains("pg-chart-config--open")||(this.openRaf=requestAnimationFrame(()=>{this.openRaf=null,e.classList.add("pg-chart-config--open")}))}render(){!this.tabsEl||!this.bodyEl||(this.renderTabs(),this.renderBody())}build(){let e=document.createElement("div");e.className="pg-chart-config";let t=document.createElement("div");t.className="pg-chart-config__header";let o=document.createElement("button");o.className="pg-chart-config__close",o.title="Close settings",o.innerHTML=Ni,o.addEventListener("click",()=>this.close());let r=document.createElement("div");r.className="pg-chart-config__tabs",t.appendChild(o),t.appendChild(r);let n=document.createElement("div");n.className="pg-chart-config__body",e.appendChild(t),e.appendChild(n),this.containerEl.appendChild(e),this.rootEl=e,this.tabsEl=r,this.bodyEl=n,this.render()}renderTabs(){let e=this.tabsEl;e.innerHTML="";for(let t of this.host.getPanels()){let o=document.createElement("button");o.className="pg-chart-config__tab",o.classList.toggle("pg-chart-config__tab--active",t===this.activeTab),o.textContent=Oi[t],o.addEventListener("click",()=>{this.activeTab=t,this.render()}),e.appendChild(o)}}renderBody(){this.disposeThumbnails();let e=this.bodyEl;e.innerHTML="";let t=this.host.getModel();switch(this.activeTab){case"chart":this.renderChartTab(e,t);break;case"setup":this.renderSetupTab(e,t);break;case"customize":this.renderCustomizeTab(e,t);break}}renderChartTab(e,t){let o=[];for(let{group:r,entries:n}of _i){let i=document.createElement("div");i.className="pg-chart-config__group-title",i.textContent=r,e.appendChild(i);let s=document.createElement("div");s.className="pg-chart-config__gallery";for(let l of n)s.appendChild(this.buildGalleryItem(l,l.type===t.chartType,o));e.appendChild(s)}for(let{canvas:r,type:n}of o)this.renderThumbnail(r,n)}buildGalleryItem(e,t,o){let r=document.createElement("button");r.type="button",r.className="pg-chart-config__gallery-item",r.classList.toggle("pg-chart-config__gallery-item--active",t),r.title=e.label,r.setAttribute("aria-label",e.label);let n=document.createElement("canvas");return n.className="pg-chart-config__gallery-canvas",r.appendChild(n),r.addEventListener("click",()=>{this.host.updateModel({chartType:e.type}),this.render()}),o.push({canvas:n,type:e.type}),r}renderThumbnail(e,t){let o=Math.min(window.devicePixelRatio||1,2),r=e.clientWidth||Di,n=e.clientHeight||Ai,i=new oe(e);i.render(Li,{type:t,width:Math.round(r*o),height:Math.round(n*o),padding:Math.round(6*o),compact:!0,animationDuration:0,showGrid:!1,showLegend:!1}),this.thumbRenderers.push(i)}disposeThumbnails(){for(let e of this.thumbRenderers)e.destroy();this.thumbRenderers=[]}renderSetupTab(e,t){let o=this.host.getColumnOptions(),r=re("Categories",!0),n=o.filter(c=>c.isDimension||!c.isMeasure).map(c=>({value:c.colId,label:c.header}));r.body.appendChild(bt(n.length>0?n:o.map(c=>({value:c.colId,label:c.header})),t.categoryColId,c=>this.host.updateModel({categoryColId:c}))),r.body.appendChild(de(t.aggregation!=="none",c=>this.host.updateModel({aggregation:c?"sum":"none"}),"Aggregate")),e.appendChild(r.section);let i=re("Series",!0),s=t.seriesColIds.map(c=>{let p=o.find(h=>h.colId===c);return{id:c,label:p?.header??c,color:t.series.colorByKey[p?.header??c]}});i.body.appendChild(cn(s,c=>this.host.updateModel({seriesColIds:c}),c=>{this.host.updateModel({seriesColIds:t.seriesColIds.filter(p=>p!==c)}),this.render()}));let l=o.filter(c=>c.isMeasure&&!t.seriesColIds.includes(c.colId));l.length>0&&i.body.appendChild(bt([{value:"",label:"+ Add series\u2026"},...l.map(c=>({value:c.colId,label:c.header}))],"",c=>{c&&(this.host.updateModel({seriesColIds:[...t.seriesColIds,c]}),this.render())})),e.appendChild(i.section);let a=re("Aggregation",!1);a.body.appendChild(bt(dn.map(c=>({value:c,label:c==="none"?"None":c.toUpperCase()})),t.aggregation,c=>this.host.updateModel({aggregation:c}),"Function")),a.body.appendChild(de(t.switchCategorySeries,c=>this.host.updateModel({switchCategorySeries:c}),"Switch Category / Series")),e.appendChild(a.section)}renderCustomizeTab(e,t){let o=re("Chart Style",!0);o.body.appendChild(ne(t.style.backgroundColor??"#ffffff",c=>this.host.updateModel({style:{backgroundColor:c}}),"Background")),o.body.appendChild(bt(Gi,t.style.fontFamily??"",c=>this.host.updateModel({style:{fontFamily:c}}),"Font family")),o.body.appendChild(Ft(t.style.fontSize??12,c=>this.host.updateModel({style:{fontSize:c}}),"Font size",8,32)),e.appendChild(o.section);let r=re("Titles",!1);r.body.appendChild(yt(t.title.text??"",c=>this.host.updateModel({title:{text:c}}),"Title","Chart title")),r.body.appendChild(ne(t.title.color??"#0f172a",c=>this.host.updateModel({title:{color:c}}),"Title color")),r.body.appendChild(Bt(pn,t.title.align??"left",c=>this.host.updateModel({title:{align:c}}),"Title align")),r.body.appendChild(yt(t.subtitle.text??"",c=>this.host.updateModel({subtitle:{text:c}}),"Subtitle","Subtitle")),r.body.appendChild(ne(t.subtitle.color??"#64748b",c=>this.host.updateModel({subtitle:{color:c}}),"Subtitle color")),r.body.appendChild(Bt(pn,t.subtitle.align??"left",c=>this.host.updateModel({subtitle:{align:c}}),"Subtitle align")),e.appendChild(r.section);let n=re("Legend",!1);n.body.appendChild(de(t.legend.enabled,c=>this.host.updateModel({legend:{enabled:c}}),"Show legend")),n.body.appendChild(Bt(Pi,t.legend.position,c=>this.host.updateModel({legend:{position:c}}),"Position")),e.appendChild(n.section);let i=re("Series",!1),s=this.host.getColumnOptions();for(let c of t.seriesColIds){let p=s.find(h=>h.colId===c)?.header??c;i.body.appendChild(ne(t.series.colorByKey[p]??"#008ffb",h=>this.host.updateModel({series:{colorByKey:{[p]:h}}}),p))}i.body.appendChild(Ft(t.series.strokeWidth??2,c=>this.host.updateModel({series:{strokeWidth:c}}),"Stroke width",0,10,.5)),i.body.appendChild(Ft(t.series.fillOpacity??.4,c=>this.host.updateModel({series:{fillOpacity:c}}),"Fill opacity",0,1,.05)),e.appendChild(i.section);let l=re("Horizontal Axis",!1);l.body.appendChild(yt(t.xAxis.title??"",c=>this.host.updateModel({xAxis:{title:c}}),"Title","X-axis title")),l.body.appendChild(ne(t.xAxis.labelColor??"#64748b",c=>this.host.updateModel({xAxis:{labelColor:c}}),"Label color")),l.body.appendChild(ne(t.xAxis.lineColor??"#e2e8f0",c=>this.host.updateModel({xAxis:{lineColor:c}}),"Line color")),l.body.appendChild(de(t.xAxis.showGridLines??!1,c=>this.host.updateModel({xAxis:{showGridLines:c}}),"Show grid lines")),l.body.appendChild(de(t.xAxis.showLabels??!0,c=>this.host.updateModel({xAxis:{showLabels:c}}),"Show labels")),e.appendChild(l.section);let a=re("Vertical Axis",!1);a.body.appendChild(yt(t.yAxis.title??"",c=>this.host.updateModel({yAxis:{title:c}}),"Title","Y-axis title")),a.body.appendChild(ne(t.yAxis.labelColor??"#64748b",c=>this.host.updateModel({yAxis:{labelColor:c}}),"Label color")),a.body.appendChild(ne(t.yAxis.lineColor??"#e2e8f0",c=>this.host.updateModel({yAxis:{lineColor:c}}),"Line color")),a.body.appendChild(de(t.yAxis.showGridLines??!0,c=>this.host.updateModel({yAxis:{showGridLines:c}}),"Show grid lines")),a.body.appendChild(de(t.yAxis.showLabels??!0,c=>this.host.updateModel({yAxis:{showLabels:c}}),"Show labels")),e.appendChild(a.section)}};var Fi=new Set(["number","currency","percentage"]),Bi=new Set(["string","dropdown","date","boolean","email"]),zi=["edit","advancedSettings","unlink","download"],Ct=class{constructor(e,t,o,r){this.ctx=e;this.hostEl=t;this.onDestroyed=r;this.toolPanel=null;this.unsubscribeRows=null;this.refreshRaf=null;this.disposed=!1;this.model=o,this.panel=new Ot(t)}start(){this.panel.setHost(this),this.panel.setChartType(this.model.chartType),this.panel.open(this.model.chartType,this.model.title.text||"Range Chart",this.buildData()),this.model.unlinked||this.subscribe()}getModel(){return this.model}updateModel(e){if(this.disposed)return;let t=!this.model.unlinked;this.model=Nt(this.model,e),e.unlinked===!0&&t?this.teardownSubscription():e.unlinked===!1&&!t&&this.subscribe(),this.panel.setChartType(this.model.chartType),this.panel.update(this.buildData()),this.ctx.eventBus.emit(x.CHART_OPTIONS_CHANGED,{chartId:this.model.chartId,chartType:this.model.chartType,chartModel:this.model})}refreshFromGrid(){this.disposed||this.model.unlinked||(this.panel.update(this.buildData()),this.ctx.eventBus.emit(x.CHART_RANGE_SELECTION_CHANGED,{chartId:this.model.chartId,cellRange:this.model.cellRange}))}openToolPanel(e){let t=this.panel.getBodyElement();t&&(this.toolPanel||(this.toolPanel=new zt(t,this,o=>this.panel.setConfigReserve(o))),this.toolPanel.open(e))}unlink(){this.model.unlinked||this.updateModel({unlinked:!0})}getImageDataURL(e="png"){return this.panel.getImageDataURL(e)}downloadImage(e="png"){this.panel.download(e)}dispose(){this.disposed||(this.disposed=!0,this.teardownSubscription(),this.refreshRaf!==null&&(cancelAnimationFrame(this.refreshRaf),this.refreshRaf=null),this.toolPanel?.destroy(),this.toolPanel=null,this.panel.close(),this.ctx.eventBus.emit(x.CHART_DESTROYED,{chartId:this.model.chartId,chartType:this.model.chartType}),this.onDestroyed(this.model.chartId))}getRenderOptions(e){return an(this.model,e)}getToolbarItems(){let e=this.ctx.options.getChartToolbarItems,t=[...zi];return e?e(t):t}isUnlinked(){return this.model.unlinked}onEditChart(){this.openToolPanel()}onAdvancedSettings(){this.openToolPanel("customize")}onUnlink(){this.unlink()}onMove(e){}onClose(){this.dispose()}getColumnOptions(){let e=this.ctx.columnModel.getVisibleColumns(),t;if(this.model.chartColIds&&this.model.chartColIds.length>0){let o=new Map(e.map(r=>[r.colId,r]));t=this.model.chartColIds.map(r=>o.get(r)).filter(r=>r!==void 0)}else{let{startColIndex:o,endColIndex:r}=this.model.cellRange,n=Math.min(o,r),i=Math.max(o,r),s=e.slice(n,i+1);t=s.length>0?s:e}return t.map(o=>({colId:o.colId,header:o.header,isMeasure:Fi.has(o.type),isDimension:Bi.has(o.type)}))}getPanels(){return this.ctx.options.chartToolPanelsDef?.panels??["chart","setup","customize"]}getDefaultPanel(){return this.ctx.options.chartToolPanelsDef?.defaultToolPanel??"chart"}buildData(){let e=this.ctx.store.get("visibleRows"),t=this.ctx.columnModel.getAllColumns();return ln(this.model,this.rowsInRange(e),t)}rowsInRange(e){let{startRowIndex:t,endRowIndex:o}=this.model.cellRange;if(t==null||o==null)return e;let r=Math.max(0,Math.min(t,o)),n=Math.min(e.length-1,Math.max(t,o));return r>n?[]:r===0&&n===e.length-1?e:e.slice(r,n+1)}subscribe(){this.unsubscribeRows||(this.unsubscribeRows=this.ctx.store.watch("visibleRows",()=>this.scheduleRefresh()))}teardownSubscription(){this.unsubscribeRows?.(),this.unsubscribeRows=null}scheduleRefresh(){this.refreshRaf!==null||this.disposed||(this.refreshRaf=requestAnimationFrame(()=>{this.refreshRaf=null,this.refreshFromGrid()}))}};var Wi=new Set(["number","currency","percentage"]),Vi=new Set(["string","dropdown","date","boolean","email"]),Wt=class{constructor(e){this.ctx=e;this.charts=new Map;this.nextId=1;this.hostEl=e.containerEl.querySelector(".pg-grid")??e.containerEl}createRangeChart(e){let t=this.seedModel(e);if(t===null)return"";let o=new Ct(this.ctx,this.hostEl,t,r=>{this.charts.delete(r)});return this.charts.set(t.chartId,o),this.ctx.eventBus.emit(x.CHART_CREATED,{chartId:t.chartId,chartType:t.chartType,cellRange:t.cellRange,chartModel:t}),e.suppressPanel||o.start(),t.chartId}getChartModels(){return Array.from(this.charts.values(),e=>e.getModel())}updateChart(e){let t=this.charts.get(e.chartId);t&&t.updateModel({chartType:e.chartType,cellRange:e.cellRange,chartColIds:e.chartColIds,categoryColId:e.categoryColId,seriesColIds:e.seriesColIds,aggregation:e.aggregation,switchCategorySeries:e.switchCategorySeries,unlinked:e.unlinked,title:e.title,subtitle:e.subtitle,legend:e.legend,xAxis:e.xAxis,yAxis:e.yAxis,series:e.series,style:e.style})}restoreChart(e){let t=new Ct(this.ctx,this.hostEl,e,o=>{this.charts.delete(o)});return this.charts.set(e.chartId,t),this.ctx.eventBus.emit(x.CHART_CREATED,{chartId:e.chartId,chartType:e.chartType,cellRange:e.cellRange,chartModel:e}),t.start(),e.chartId}getChartImageDataURL(e,t="png"){return this.charts.get(e)?.getImageDataURL(t)??null}downloadChart(e,t="png"){this.charts.get(e)?.downloadImage(t)}destroyChart(e){this.charts.get(e)?.dispose()}disposeAll(){for(let e of Array.from(this.charts.values()))e.dispose();this.charts.clear()}seedModel(e){let t=this.ctx.columnModel.getVisibleColumns(),o=e.cellRanges&&e.cellRanges.length>0?e.cellRanges:[e.cellRange],r=this.collectRangeColumns(t,o),n=r.map(h=>h.colId),i=e.categoryColId??r.find(h=>Vi.has(h.type))?.colId??r[0]?.colId,s=e.seriesColIds??r.filter(h=>Wi.has(h.type)&&h.colId!==i).map(h=>h.colId);if(!i||s.length===0)return null;let l=e.chartType??this.ctx.options.defaultChartType??"column-grouped",a=r.find(h=>h.colId===i)?.header??"Category",c=on({chartId:`chart-${this.nextId++}`,chartType:l,cellRange:e.cellRange,chartColIds:n,categoryColId:i,seriesColIds:s,aggregation:e.aggregation,title:`${a} Chart`}),p=this.ctx.options.chartThemeOverrides;return p&&(c=Nt(c,p)),c}collectRangeColumns(e,t){let o=new Set;for(let r of t){let n=Math.max(0,Math.min(r.startColIndex,r.endColIndex)),i=Math.min(e.length-1,Math.max(r.startColIndex,r.endColIndex));for(let s=n;s<=i;s++)o.add(s)}return o.size===0?[...e]:e.filter((r,n)=>o.has(n))}};var zo=(t=>(t.GROUP="group",t.LEAF="leaf",t))(zo||{}),Wo=(r=>(r.PROPORTIONAL="proportional",r.EQUAL="equal",r.FIRST_FIXED="firstFixed",r.LAST_FIXED="lastFixed",r))(Wo||{});function J(d){return d.pointerType==="touch"}var fe=5,q=8;var Xe=400,Vo=.95,xt=.02,hn=".pg-th__resize-handle,[data-row-drag],.pg-fill-handle,.pg-ai-panel,.pg-editor,[data-detail-toggle],[data-detail-resize-handle]";var un={valid:!1,targetId:"",position:"before",indicatorX:0},Ye=class{constructor(e,t,o,r,n,i){this.columnModel=e;this.groupModel=t;this.headerBuilder=o;this.colStyles=r;this.eventBus=n;this.gridElGetter=i;this.draggingId=null;this.draggingIsGroup=!1;this.ghostEl=null;this.indicatorEl=null;this.gridEl=null;this.currentTarget=null;this._didJustDrag=!1;this.dragStyleEl=null;this.dragCells=[];this.dragCellWidth=0;this.dragSourceIdx=-1;this.dragEffectiveIdx=-1;this.boundMouseMove=this.onMouseMove.bind(this),this.boundMouseUp=this.onMouseUp.bind(this)}get didJustDrag(){return this._didJustDrag}attachGroupDragListeners(e,t){e.addEventListener("pointerdown",o=>{if(o.target.closest(".pg-th__resize-handle, .pg-th__collapse-btn")||o.button!==0)return;let r=o.clientX,n=o.clientY,i=J(o),s=!1,l=0,a=()=>{let m=g=>{g.stopPropagation(),document.removeEventListener("click",m,!0)};document.addEventListener("click",m,!0)},c=(m,g)=>{s||(s=!0,l&&(clearTimeout(l),l=0),e.classList.remove("pg-th--drag-armed"),document.removeEventListener("pointermove",h),this.startGroupDrag(t,m,g),document.addEventListener("pointermove",this.boundMouseMove),document.addEventListener("pointerup",this.boundMouseUp),a())},p=()=>{l&&(clearTimeout(l),l=0),e.classList.remove("pg-th--drag-armed"),document.removeEventListener("pointermove",h),document.removeEventListener("pointerup",u)},h=m=>{if(s)return;let g=Math.abs(m.clientX-r),f=Math.abs(m.clientY-n);i?(g>q||f>q)&&p():g>fe&&c(m.clientX,m.clientY)},u=()=>{s||p()};document.addEventListener("pointermove",h),document.addEventListener("pointerup",u),i&&(e.classList.add("pg-th--drag-armed"),l=window.setTimeout(()=>{l=0,c(r,n)},Xe))})}attachLeafDragListeners(e,t){let o=this.groupModel.getParent(t.colId);if(o?.marryChildren){let r=this.groupModel.getGroup(o.groupId);r&&this.attachGroupDragListeners(e,r)}}get isDragging(){return this.draggingId!==null}destroy(){this.cleanupDrag(),document.removeEventListener("pointermove",this.boundMouseMove),document.removeEventListener("pointerup",this.boundMouseUp)}startGroupDrag(e,t,o){let r=this.gridElGetter();if(!r)return;this.draggingId=e.groupId,this.draggingIsGroup=!0,this.gridEl=r;let n=y("pg-col-drag-ghost"),i=document.createElement("span");i.className="pg-col-drag-ghost__label",i.textContent=e.header,n.appendChild(i),n.style.left=`${t+14}px`,n.style.top=`${o}px`,document.body.appendChild(n),this.ghostEl=n;let s=y("pg-group-drop-indicator");r.appendChild(s),this.indicatorEl=s,document.body.style.cursor="grabbing",document.body.style.userSelect="none",r.classList.add("pg-grid--col-dragging");let l=r.querySelector(`[data-group-id="${e.groupId}"]`),a=parseInt(l?.closest("[data-group-depth]")?.getAttribute("data-group-depth")??"0",10),c=[];for(let h of r.querySelectorAll(`[data-group-depth="${a}"]`))for(let u of h.querySelectorAll("[data-group-id]"))c.push({groupId:u.getAttribute("data-group-id")??"",rect:u.getBoundingClientRect()});c.sort((h,u)=>h.rect.left-u.rect.left),this.dragCells=c,this.dragSourceIdx=c.findIndex(h=>h.groupId===e.groupId),this.dragCellWidth=c[this.dragSourceIdx]?.rect.width??0,this.dragEffectiveIdx=this.dragSourceIdx;let p=document.createElement("style");p.setAttribute("data-pg-group-drag",""),document.head.appendChild(p),this.dragStyleEl=p}onMouseMove(e){if(!this.draggingId||!this.ghostEl)return;this.ghostEl.style.left=`${e.clientX+14}px`,this.ghostEl.style.top=`${e.clientY}px`;let t=this.isOutsideGrid(e.clientX,e.clientY);if(this.ghostEl.classList.toggle("pg-col-drag-ghost--outside",t),t){this.currentTarget=null,this.updateIndicator(null),this.applyDragTransforms(-1);return}let o=this.hitTest(e.clientX,e.clientY);if(this.currentTarget=o,this.updateIndicator(o),this.dragCells.length>0){let r=this.dragSourceIdx;for(let n=0;n<this.dragCells.length;n++){if(n===this.dragSourceIdx)continue;let i=this.dragCells[n].rect;if(e.clientX>=i.left&&e.clientX<i.right){r=n;break}}e.clientX<(this.dragCells[0]?.rect.left??0)&&(r=0),e.clientX>=(this.dragCells[this.dragCells.length-1]?.rect.right??0)&&(r=this.dragCells.length-1),this.dragEffectiveIdx=r,this.applyDragTransforms(r)}}applyDragTransforms(e){if(!this.dragStyleEl||!this.gridEl)return;if(e===-1||e===this.dragSourceIdx){this.dragStyleEl.textContent="";return}let t=this.gridEl.getAttribute("data-photon-grid-id")??"",o=t?`[data-photon-grid-id="${t}"] `:"",r=this.dragSourceIdx,n=this.dragCells[r]?.rect,i=this.dragCells[e]?.rect;if(!n||!i)return;let s=e>r?i.right-n.right:i.left-n.left,l=`${o}[data-group-id="${this.draggingId}"] { transform: translateX(${s}px); z-index: 10; position: relative; transition: none; }
4293
+ `,p.appendChild(u)}else{let u=document.createElement("canvas");u.className="pg-chart-panel__canvas",p.appendChild(u),this.canvasEl=u,this.buildDotsMenu(p),this.resizeObserver=new ResizeObserver(()=>{this.renderChart()}),this.resizeObserver.observe(p)}r.appendChild(c);let h=document.createElement("div");h.className="pg-chart-panel__legend",r.appendChild(h),this.legendEl=h,this.containerEl.appendChild(o),this.backdropEl=o,this.cardEl=r,this.bodyEl=c,this.fullscreenBtnEl=l,this.centerPanel(),this.attachDrag(n)}buildDotsMenu(e){let t=this.host?this.host.getToolbarItems():["download"];if(t.length===0)return;let o=document.createElement("button");o.className="pg-chart-panel__dots-btn",o.title="Chart menu",o.innerHTML=wi;let r=document.createElement("div");r.className="pg-chart-panel__dots-menu";for(let n of this.resolveMenuEntries(t)){let i=document.createElement("button");i.className="pg-chart-panel__dots-item",n.item==="unlink"&&this.host?.isUnlinked()&&(i.classList.add("pg-chart-panel__dots-item--disabled"),i.disabled=!0),i.innerHTML=`${n.icon} ${n.label}`,i.addEventListener("click",()=>{n.action(),this.closeDotsMenu()}),r.appendChild(i)}o.addEventListener("click",n=>{n.stopPropagation(),r.classList.contains("pg-chart-panel__dots-menu--open")?this.closeDotsMenu():(r.classList.add("pg-chart-panel__dots-menu--open"),o.classList.add("pg-chart-panel__dots-btn--active"),this.attachOutsideMousedown())}),e.appendChild(o),e.appendChild(r),this.dotsMenuEl=r,this.dotsBtnEl=o}resolveMenuEntries(e){let t=[];for(let o of e)switch(o){case"edit":t.push({item:o,label:"Edit Chart",icon:Ei,action:()=>this.host?.onEditChart()});break;case"advancedSettings":t.push({item:o,label:"Advanced Settings",icon:Ri,action:()=>this.host?.onAdvancedSettings()});break;case"unlink":t.push({item:o,label:"Unlink from Grid",icon:Si,action:()=>this.host?.onUnlink()});break;case"download":t.push({item:o,label:"Download PNG",icon:ln,action:()=>this.downloadChart("png")}),t.push({item:o,label:"Download JPEG",icon:ln,action:()=>this.downloadChart("jpeg")});break}return t}centerPanel(){if(!this.backdropEl||!this.cardEl)return;let e=this.backdropEl.offsetWidth,t=this.backdropEl.offsetHeight,o=this.cardEl.offsetWidth,r=this.cardEl.offsetHeight;this.panelX=Math.max(0,(e-o)/2),this.panelY=Math.max(0,(t-r)/2),this.applyPosition()}applyPosition(){this.cardEl&&(this.cardEl.style.left=`${this.panelX}px`,this.cardEl.style.top=`${this.panelY}px`,this.host?.onMove(this.cardEl.getBoundingClientRect()))}attachDrag(e){e.addEventListener("mousedown",t=>{if(this.isFullscreen||t.target.closest("button"))return;t.preventDefault();let o=t.clientX,r=t.clientY,n=this.panelX,i=this.panelY;e.classList.add("pg-chart-panel__header--dragging"),this.cardEl?.classList.add("pg-chart-panel--dragging");let s=a=>{if(!this.backdropEl||!this.cardEl)return;let c=this.backdropEl.offsetWidth-this.cardEl.offsetWidth,p=this.backdropEl.offsetHeight-this.cardEl.offsetHeight;this.panelX=Math.max(0,Math.min(n+a.clientX-o,c)),this.panelY=Math.max(0,Math.min(i+a.clientY-r,p)),this.applyPosition()},l=()=>{e.classList.remove("pg-chart-panel__header--dragging"),this.cardEl?.classList.remove("pg-chart-panel--dragging"),document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",l)};document.addEventListener("mousemove",s),document.addEventListener("mouseup",l)})}closeDotsMenu(){this.dotsMenuEl?.classList.remove("pg-chart-panel__dots-menu--open"),this.dotsBtnEl?.classList.remove("pg-chart-panel__dots-btn--active"),this.detachOutsideMousedown()}attachOutsideMousedown(){this.detachOutsideMousedown();let e=t=>{let o=t.target;this.dotsMenuEl?.contains(o)||this.dotsBtnEl?.contains(o)||this.closeDotsMenu()};this.outsideMousedownHandler=e,document.addEventListener("mousedown",e)}detachOutsideMousedown(){this.outsideMousedownHandler&&(document.removeEventListener("mousedown",this.outsideMousedownHandler),this.outsideMousedownHandler=null)}toggleFullscreen(){if(!(!this.cardEl||!this.fullscreenBtnEl)){if(this.isFullscreen=!this.isFullscreen,this.cardEl.classList.toggle("pg-chart-panel--fullscreen",this.isFullscreen),this.fullscreenBtnEl.innerHTML=this.isFullscreen?xi:sn,this.fullscreenBtnEl.title=this.isFullscreen?"Exit fullscreen":"Toggle fullscreen",this.isFullscreen)this.panelX=0,this.panelY=0,this.applyPosition();else{setTimeout(()=>{this.centerPanel(),this.renderChart()},50);return}setTimeout(()=>this.renderChart(),50)}}renderChart(){if(!this.canvasEl||!this.currentData||!this.cardEl)return;let e=this.canvasEl.parentElement;if(!e)return;let t=e.clientWidth-16,o=e.clientHeight-16;t<=0||o<=0||(this.renderer||(this.renderer=new oe(this.canvasEl)),this.renderer.render(this.currentData,this.resolveRenderOptions(t,o)))}resolveRenderOptions(e,t){return{...this.host?this.host.getRenderOptions({width:e,height:t}):{type:this.currentType,width:e,height:t,showGrid:!0,animationDuration:400},type:this.currentType,width:e,height:t,showLegend:!1}}buildLegend(e){this.legendEl&&(this.legendEl.innerHTML="",e.datasets.forEach((t,o)=>{let r=document.createElement("button");r.type="button",r.className="pg-chart-panel__legend-item";let n=document.createElement("span");n.className="pg-chart-panel__legend-swatch",n.style.background=t.color??"#008FFB";let i=document.createElement("span");i.className="pg-chart-panel__legend-label",i.textContent=t.label,r.appendChild(n),r.appendChild(i),r.addEventListener("click",()=>this.handleLegendToggle(o)),this.legendEl.appendChild(r)}))}handleLegendToggle(e){if(!this.renderer||!this.currentData||!this.canvasEl)return;let t=this.canvasEl.parentElement;if(!t)return;let o=t.clientWidth-16,r=t.clientHeight-16;if(o<=0||r<=0)return;let n=this.hiddenSeries.has(e);n?this.hiddenSeries.delete(e):this.hiddenSeries.add(e),this.legendEl?.children[e]?.classList.toggle("pg-chart-panel__legend-item--hidden",!n),this.renderer.toggleSeries(e,n,this.currentData,this.resolveRenderOptions(o,r))}downloadChart(e){if(!this.canvasEl)return;let t=this.canvasEl;if(e==="jpeg"){let i=document.createElement("canvas");i.width=this.canvasEl.width,i.height=this.canvasEl.height;let s=i.getContext("2d");s&&(s.fillStyle="#ffffff",s.fillRect(0,0,i.width,i.height),s.drawImage(this.canvasEl,0,0),t=i)}let o=e==="png"?"image/png":"image/jpeg",r=t.toDataURL(o,.95),n=document.createElement("a");n.href=r,n.download=`${this.currentTitle||"chart"}.${e}`,document.body.appendChild(n),n.click(),document.body.removeChild(n)}};var Ii=new ae;function dn(d,e,t){let o=t.find(s=>s.colId===d.categoryColId),r=d.seriesColIds.map(s=>t.find(l=>l.colId===s)).filter(s=>s!==void 0);if(!o||r.length===0)return{labels:[],datasets:[]};let n=d.aggregation==="none"?Ti(e,o,r):Ii.transform(e,{labelField:o.field,valueFields:r.map(s=>s.field),aggregation:d.aggregation}),i={labels:n.labels,datasets:n.datasets.map((s,l)=>({...s,label:r[l]?.header??s.label}))};return d.switchCategorySeries?Mi(i):i}function Ti(d,e,t){let o=d.filter(s=>s.type==="data"),r=[],n=new Map;for(let s of o){let l=String(an(s.data,e.field)??"Unknown"),a=n.get(l)??0;n.set(l,a+1),r.push(a===0?l:`${l} (${a+1})`)}let i=t.map(s=>({label:s.header,data:o.map(l=>{let a=Number(an(l.data,s.field));return Number.isNaN(a)?0:a})}));return{labels:r,datasets:i}}function Mi(d){let e=d.datasets.map(o=>o.label),t=d.labels.map((o,r)=>({label:o,data:d.datasets.map(n=>n.data[r]??0)}));return{labels:e,datasets:t}}function cn(d,e){return{type:d.chartType,width:e.width,height:e.height,animationDuration:400,showGrid:d.yAxis.showGridLines??!0,showLegend:d.legend.enabled,legendPosition:d.legend.position,title:d.title.text??"",titleColor:d.title.color??"",titleAlign:d.title.align??"left",subtitle:d.subtitle.text??"",subtitleColor:d.subtitle.color??"",subtitleAlign:d.subtitle.align??"left",xAxisTitle:d.xAxis.title??"",yAxisTitle:d.yAxis.title??"",axisTitleColor:d.xAxis.titleColor??d.yAxis.titleColor??"",axisLabelColor:d.yAxis.labelColor??d.xAxis.labelColor??"",axisLineColor:d.yAxis.lineColor??d.xAxis.lineColor??"",showXLabels:d.xAxis.showLabels??!0,showYLabels:d.yAxis.showLabels??!0,showXTicks:d.xAxis.showTicks??!0,showYTicks:d.yAxis.showTicks??!0,seriesColors:d.series.colorByKey,strokeWidth:d.series.strokeWidth??0,fillOpacity:d.series.fillOpacity??0,backgroundColor:d.style.backgroundColor??"transparent",fontFamily:d.style.fontFamily??"",fontSize:d.style.fontSize??12}}var pn=["sum","avg","count","min","max","none"];function an(d,e){let t=e.split("."),o=d;for(let r of t){if(o==null)return;o=o[r]}return o}var ki='<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg>',_i='<svg width="10" height="16" viewBox="0 0 10 16" fill="currentColor"><circle cx="2.5" cy="3" r="1.4"/><circle cx="7.5" cy="3" r="1.4"/><circle cx="2.5" cy="8" r="1.4"/><circle cx="7.5" cy="8" r="1.4"/><circle cx="2.5" cy="13" r="1.4"/><circle cx="7.5" cy="13" r="1.4"/></svg>',Li='<svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>';function vt(d,e){let t=document.createElement("label");t.className="pg-chart-ctrl__row";let o=document.createElement("span");return o.className="pg-chart-ctrl__label",o.textContent=d,t.appendChild(o),t.appendChild(e),t}function bt(d,e,t,o){let r=document.createElement("select");r.className="pg-chart-ctrl__select";for(let n of d){let i=document.createElement("option");i.value=n.value,i.textContent=n.label,n.value===e&&(i.selected=!0),r.appendChild(i)}return r.addEventListener("change",()=>t(r.value)),o?vt(o,r):r}function de(d,e,t){let o=document.createElement("div");o.className="pg-chart-ctrl__row";let r=document.createElement("span");r.className="pg-chart-ctrl__label",r.textContent=t;let n=document.createElement("button");n.type="button",n.className="pg-chart-ctrl__toggle",n.setAttribute("role","switch"),n.setAttribute("aria-checked",String(d)),n.classList.toggle("pg-chart-ctrl__toggle--on",d);let i=document.createElement("span");return i.className="pg-chart-ctrl__toggle-knob",n.appendChild(i),n.addEventListener("click",()=>{let s=!n.classList.contains("pg-chart-ctrl__toggle--on");n.classList.toggle("pg-chart-ctrl__toggle--on",s),n.setAttribute("aria-checked",String(s)),e(s)}),o.appendChild(r),o.appendChild(n),o}function ne(d,e,t){let o=document.createElement("input");return o.type="color",o.className="pg-chart-ctrl__color",d&&(o.value=d),o.addEventListener("input",()=>e(o.value)),vt(t,o)}function Ft(d,e,t,o,r,n){let i=document.createElement("input");return i.type="number",i.className="pg-chart-ctrl__input",i.value=String(d),o!==void 0&&(i.min=String(o)),r!==void 0&&(i.max=String(r)),n!==void 0&&(i.step=String(n)),i.addEventListener("input",()=>{let s=Number(i.value);Number.isNaN(s)||e(s)}),vt(t,i)}function yt(d,e,t,o=""){let r=document.createElement("input");return r.type="text",r.className="pg-chart-ctrl__input",r.value=d,r.placeholder=o,r.addEventListener("input",()=>e(r.value)),vt(t,r)}function Bt(d,e,t,o){let r=document.createElement("div");r.className="pg-chart-ctrl__segmented";for(let n of d){let i=document.createElement("button");i.type="button",i.className="pg-chart-ctrl__segment",i.textContent=n.label,i.classList.toggle("pg-chart-ctrl__segment--active",n.value===e),i.addEventListener("click",()=>{for(let s of Array.from(r.children))s.classList.remove("pg-chart-ctrl__segment--active");i.classList.add("pg-chart-ctrl__segment--active"),t(n.value)}),r.appendChild(i)}return o?vt(o,r):r}function re(d,e=!1){let t=document.createElement("div");t.className="pg-chart-ctrl__section";let o=document.createElement("button");o.type="button",o.className="pg-chart-ctrl__section-header";let r=document.createElement("span");r.className="pg-chart-ctrl__section-chevron",r.innerHTML=ki;let n=document.createElement("span");n.textContent=d,o.appendChild(r),o.appendChild(n);let i=document.createElement("div");return i.className="pg-chart-ctrl__section-body",t.classList.toggle("pg-chart-ctrl__section--open",e),o.addEventListener("click",()=>{t.classList.toggle("pg-chart-ctrl__section--open")}),t.appendChild(o),t.appendChild(i),{section:t,body:i}}function hn(d,e,t){let o=document.createElement("div");o.className="pg-chart-ctrl__list";let r=d.map(n=>n.id);return d.forEach(n=>{let i=document.createElement("div");i.className="pg-chart-ctrl__list-item",i.dataset.id=n.id;let s=document.createElement("span");if(s.className="pg-chart-ctrl__list-handle",s.innerHTML=_i,n.color){let c=document.createElement("span");c.className="pg-chart-ctrl__list-swatch",c.style.setProperty("--pg-chart-swatch",n.color),i.appendChild(s),i.appendChild(c)}else i.appendChild(s);let l=document.createElement("span");l.className="pg-chart-ctrl__list-label",l.textContent=n.label,i.appendChild(l);let a=document.createElement("button");a.type="button",a.className="pg-chart-ctrl__list-remove",a.innerHTML=Li,a.addEventListener("click",()=>t(n.id)),i.appendChild(a),Di(i,o,r,e),o.appendChild(i)}),o}function Di(d,e,t,o){let r=d.querySelector(".pg-chart-ctrl__list-handle");r&&r.addEventListener("mousedown",n=>{n.preventDefault(),d.classList.add("pg-chart-ctrl__list-item--dragging");let i=l=>{let c=Array.from(e.querySelectorAll(".pg-chart-ctrl__list-item")).find(p=>{if(p===d)return!1;let h=p.getBoundingClientRect();return l.clientY<h.top+h.height/2});c?e.insertBefore(d,c):e.appendChild(d)},s=()=>{d.classList.remove("pg-chart-ctrl__list-item--dragging"),document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",s);let l=Array.from(e.querySelectorAll(".pg-chart-ctrl__list-item")).map(a=>a.dataset.id??"").filter(a=>a.length>0);t.splice(0,t.length,...l),o(l)};document.addEventListener("mousemove",i),document.addEventListener("mouseup",s)})}var Ai=[{group:"Column",entries:[{type:"column-grouped",label:"Grouped"},{type:"column-stacked",label:"Stacked"},{type:"column-100stacked",label:"100% Stacked"}]},{group:"Bar",entries:[{type:"bar-grouped",label:"Grouped"},{type:"bar-stacked",label:"Stacked"},{type:"bar-100stacked",label:"100% Stacked"}]},{group:"Pie",entries:[{type:"pie",label:"Pie"},{type:"doughnut",label:"Doughnut"},{type:"polar",label:"Polar"}]},{group:"Line & Area",entries:[{type:"line",label:"Line"},{type:"area",label:"Area"},{type:"scatter",label:"Scatter"}]},{group:"Other",entries:[{type:"funnel",label:"Funnel"}]}],Hi={labels:["","","",""],datasets:[{label:"Series 1",data:[6,9,5,8]},{label:"Series 2",data:[4,6,8,5]}]},Pi=132,Gi=64,Ni=240,Oi=[{value:"top",label:"Top"},{value:"right",label:"Right"},{value:"bottom",label:"Bottom"},{value:"left",label:"Left"}],un=[{value:"left",label:"Left"},{value:"center",label:"Center"},{value:"right",label:"Right"}],Fi=[{value:"",label:"Theme default"},{value:"Inter, system-ui, sans-serif",label:"Inter"},{value:"system-ui, sans-serif",label:"System UI"},{value:"Arial, Helvetica, sans-serif",label:"Arial"},{value:"Roboto, Arial, sans-serif",label:"Roboto"},{value:'Georgia, "Times New Roman", serif',label:"Georgia"},{value:'"Courier New", monospace',label:"Monospace"}],Bi='<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',zi={chart:"Chart",setup:"Set Up",customize:"Customize"},zt=class{constructor(e,t,o){this.containerEl=e;this.host=t;this.onReserveChange=o;this.rootEl=null;this.tabsEl=null;this.bodyEl=null;this.thumbRenderers=[];this.openRaf=null;this.closeTimer=null;this.activeTab=t.getDefaultPanel()}isOpen(){return this.rootEl!==null}open(e){e&&(this.activeTab=e),this.closeTimer!==null&&(clearTimeout(this.closeTimer),this.closeTimer=null),this.rootEl?this.render():this.build(),this.slideIn(),this.onReserveChange?.(this.rootEl?this.rootEl.offsetWidth:0)}close(){if(!this.rootEl)return;this.openRaf!==null&&(cancelAnimationFrame(this.openRaf),this.openRaf=null),this.rootEl.classList.remove("pg-chart-config--open"),this.onReserveChange?.(0);let e=this.rootEl;this.closeTimer=window.setTimeout(()=>{this.closeTimer=null,this.rootEl===e&&this.teardown()},Ni)}destroy(){this.openRaf!==null&&(cancelAnimationFrame(this.openRaf),this.openRaf=null),this.closeTimer!==null&&(clearTimeout(this.closeTimer),this.closeTimer=null),this.onReserveChange?.(0),this.teardown()}teardown(){this.disposeThumbnails(),this.rootEl?.remove(),this.rootEl=null,this.tabsEl=null,this.bodyEl=null}slideIn(){if(!this.rootEl)return;let e=this.rootEl;e.classList.contains("pg-chart-config--open")||(this.openRaf=requestAnimationFrame(()=>{this.openRaf=null,e.classList.add("pg-chart-config--open")}))}render(){!this.tabsEl||!this.bodyEl||(this.renderTabs(),this.renderBody())}build(){let e=document.createElement("div");e.className="pg-chart-config";let t=document.createElement("div");t.className="pg-chart-config__header";let o=document.createElement("button");o.className="pg-chart-config__close",o.title="Close settings",o.innerHTML=Bi,o.addEventListener("click",()=>this.close());let r=document.createElement("div");r.className="pg-chart-config__tabs",t.appendChild(o),t.appendChild(r);let n=document.createElement("div");n.className="pg-chart-config__body",e.appendChild(t),e.appendChild(n),this.containerEl.appendChild(e),this.rootEl=e,this.tabsEl=r,this.bodyEl=n,this.render()}renderTabs(){let e=this.tabsEl;e.innerHTML="";for(let t of this.host.getPanels()){let o=document.createElement("button");o.className="pg-chart-config__tab",o.classList.toggle("pg-chart-config__tab--active",t===this.activeTab),o.textContent=zi[t],o.addEventListener("click",()=>{this.activeTab=t,this.render()}),e.appendChild(o)}}renderBody(){this.disposeThumbnails();let e=this.bodyEl;e.innerHTML="";let t=this.host.getModel();switch(this.activeTab){case"chart":this.renderChartTab(e,t);break;case"setup":this.renderSetupTab(e,t);break;case"customize":this.renderCustomizeTab(e,t);break}}renderChartTab(e,t){let o=[];for(let{group:r,entries:n}of Ai){let i=document.createElement("div");i.className="pg-chart-config__group-title",i.textContent=r,e.appendChild(i);let s=document.createElement("div");s.className="pg-chart-config__gallery";for(let l of n)s.appendChild(this.buildGalleryItem(l,l.type===t.chartType,o));e.appendChild(s)}for(let{canvas:r,type:n}of o)this.renderThumbnail(r,n)}buildGalleryItem(e,t,o){let r=document.createElement("button");r.type="button",r.className="pg-chart-config__gallery-item",r.classList.toggle("pg-chart-config__gallery-item--active",t),r.title=e.label,r.setAttribute("aria-label",e.label);let n=document.createElement("canvas");return n.className="pg-chart-config__gallery-canvas",r.appendChild(n),r.addEventListener("click",()=>{this.host.updateModel({chartType:e.type}),this.render()}),o.push({canvas:n,type:e.type}),r}renderThumbnail(e,t){let o=Math.min(window.devicePixelRatio||1,2),r=e.clientWidth||Pi,n=e.clientHeight||Gi,i=new oe(e);i.render(Hi,{type:t,width:Math.round(r*o),height:Math.round(n*o),padding:Math.round(6*o),compact:!0,animationDuration:0,showGrid:!1,showLegend:!1}),this.thumbRenderers.push(i)}disposeThumbnails(){for(let e of this.thumbRenderers)e.destroy();this.thumbRenderers=[]}renderSetupTab(e,t){let o=this.host.getColumnOptions(),r=re("Categories",!0),n=o.filter(c=>c.isDimension||!c.isMeasure).map(c=>({value:c.colId,label:c.header}));r.body.appendChild(bt(n.length>0?n:o.map(c=>({value:c.colId,label:c.header})),t.categoryColId,c=>this.host.updateModel({categoryColId:c}))),r.body.appendChild(de(t.aggregation!=="none",c=>this.host.updateModel({aggregation:c?"sum":"none"}),"Aggregate")),e.appendChild(r.section);let i=re("Series",!0),s=t.seriesColIds.map(c=>{let p=o.find(h=>h.colId===c);return{id:c,label:p?.header??c,color:t.series.colorByKey[p?.header??c]}});i.body.appendChild(hn(s,c=>this.host.updateModel({seriesColIds:c}),c=>{this.host.updateModel({seriesColIds:t.seriesColIds.filter(p=>p!==c)}),this.render()}));let l=o.filter(c=>c.isMeasure&&!t.seriesColIds.includes(c.colId));l.length>0&&i.body.appendChild(bt([{value:"",label:"+ Add series\u2026"},...l.map(c=>({value:c.colId,label:c.header}))],"",c=>{c&&(this.host.updateModel({seriesColIds:[...t.seriesColIds,c]}),this.render())})),e.appendChild(i.section);let a=re("Aggregation",!1);a.body.appendChild(bt(pn.map(c=>({value:c,label:c==="none"?"None":c.toUpperCase()})),t.aggregation,c=>this.host.updateModel({aggregation:c}),"Function")),a.body.appendChild(de(t.switchCategorySeries,c=>this.host.updateModel({switchCategorySeries:c}),"Switch Category / Series")),e.appendChild(a.section)}renderCustomizeTab(e,t){let o=re("Chart Style",!0);o.body.appendChild(ne(t.style.backgroundColor??"#ffffff",c=>this.host.updateModel({style:{backgroundColor:c}}),"Background")),o.body.appendChild(bt(Fi,t.style.fontFamily??"",c=>this.host.updateModel({style:{fontFamily:c}}),"Font family")),o.body.appendChild(Ft(t.style.fontSize??12,c=>this.host.updateModel({style:{fontSize:c}}),"Font size",8,32)),e.appendChild(o.section);let r=re("Titles",!1);r.body.appendChild(yt(t.title.text??"",c=>this.host.updateModel({title:{text:c}}),"Title","Chart title")),r.body.appendChild(ne(t.title.color??"#0f172a",c=>this.host.updateModel({title:{color:c}}),"Title color")),r.body.appendChild(Bt(un,t.title.align??"left",c=>this.host.updateModel({title:{align:c}}),"Title align")),r.body.appendChild(yt(t.subtitle.text??"",c=>this.host.updateModel({subtitle:{text:c}}),"Subtitle","Subtitle")),r.body.appendChild(ne(t.subtitle.color??"#64748b",c=>this.host.updateModel({subtitle:{color:c}}),"Subtitle color")),r.body.appendChild(Bt(un,t.subtitle.align??"left",c=>this.host.updateModel({subtitle:{align:c}}),"Subtitle align")),e.appendChild(r.section);let n=re("Legend",!1);n.body.appendChild(de(t.legend.enabled,c=>this.host.updateModel({legend:{enabled:c}}),"Show legend")),n.body.appendChild(Bt(Oi,t.legend.position,c=>this.host.updateModel({legend:{position:c}}),"Position")),e.appendChild(n.section);let i=re("Series",!1),s=this.host.getColumnOptions();for(let c of t.seriesColIds){let p=s.find(h=>h.colId===c)?.header??c;i.body.appendChild(ne(t.series.colorByKey[p]??"#008ffb",h=>this.host.updateModel({series:{colorByKey:{[p]:h}}}),p))}i.body.appendChild(Ft(t.series.strokeWidth??2,c=>this.host.updateModel({series:{strokeWidth:c}}),"Stroke width",0,10,.5)),i.body.appendChild(Ft(t.series.fillOpacity??.4,c=>this.host.updateModel({series:{fillOpacity:c}}),"Fill opacity",0,1,.05)),e.appendChild(i.section);let l=re("Horizontal Axis",!1);l.body.appendChild(yt(t.xAxis.title??"",c=>this.host.updateModel({xAxis:{title:c}}),"Title","X-axis title")),l.body.appendChild(ne(t.xAxis.labelColor??"#64748b",c=>this.host.updateModel({xAxis:{labelColor:c}}),"Label color")),l.body.appendChild(ne(t.xAxis.lineColor??"#e2e8f0",c=>this.host.updateModel({xAxis:{lineColor:c}}),"Line color")),l.body.appendChild(de(t.xAxis.showGridLines??!1,c=>this.host.updateModel({xAxis:{showGridLines:c}}),"Show grid lines")),l.body.appendChild(de(t.xAxis.showLabels??!0,c=>this.host.updateModel({xAxis:{showLabels:c}}),"Show labels")),e.appendChild(l.section);let a=re("Vertical Axis",!1);a.body.appendChild(yt(t.yAxis.title??"",c=>this.host.updateModel({yAxis:{title:c}}),"Title","Y-axis title")),a.body.appendChild(ne(t.yAxis.labelColor??"#64748b",c=>this.host.updateModel({yAxis:{labelColor:c}}),"Label color")),a.body.appendChild(ne(t.yAxis.lineColor??"#e2e8f0",c=>this.host.updateModel({yAxis:{lineColor:c}}),"Line color")),a.body.appendChild(de(t.yAxis.showGridLines??!0,c=>this.host.updateModel({yAxis:{showGridLines:c}}),"Show grid lines")),a.body.appendChild(de(t.yAxis.showLabels??!0,c=>this.host.updateModel({yAxis:{showLabels:c}}),"Show labels")),e.appendChild(a.section)}};var Wi=new Set(["number","currency","percentage"]),Vi=new Set(["string","dropdown","date","boolean","email"]),$i=["edit","advancedSettings","unlink","download"],Ct=class{constructor(e,t,o,r){this.ctx=e;this.hostEl=t;this.onDestroyed=r;this.toolPanel=null;this.unsubscribeRows=null;this.refreshRaf=null;this.disposed=!1;this.model=o,this.panel=new Ot(t)}start(){this.panel.setHost(this),this.panel.setChartType(this.model.chartType),this.panel.open(this.model.chartType,this.model.title.text||"Range Chart",this.buildData()),this.model.unlinked||this.subscribe()}getModel(){return this.model}updateModel(e){if(this.disposed)return;let t=!this.model.unlinked;this.model=Nt(this.model,e),e.unlinked===!0&&t?this.teardownSubscription():e.unlinked===!1&&!t&&this.subscribe(),this.panel.setChartType(this.model.chartType),this.panel.update(this.buildData()),this.ctx.eventBus.emit(x.CHART_OPTIONS_CHANGED,{chartId:this.model.chartId,chartType:this.model.chartType,chartModel:this.model})}refreshFromGrid(){this.disposed||this.model.unlinked||(this.panel.update(this.buildData()),this.ctx.eventBus.emit(x.CHART_RANGE_SELECTION_CHANGED,{chartId:this.model.chartId,cellRange:this.model.cellRange}))}openToolPanel(e){let t=this.panel.getBodyElement();t&&(this.toolPanel||(this.toolPanel=new zt(t,this,o=>this.panel.setConfigReserve(o))),this.toolPanel.open(e))}unlink(){this.model.unlinked||this.updateModel({unlinked:!0})}getImageDataURL(e="png"){return this.panel.getImageDataURL(e)}downloadImage(e="png"){this.panel.download(e)}dispose(){this.disposed||(this.disposed=!0,this.teardownSubscription(),this.refreshRaf!==null&&(cancelAnimationFrame(this.refreshRaf),this.refreshRaf=null),this.toolPanel?.destroy(),this.toolPanel=null,this.panel.close(),this.ctx.eventBus.emit(x.CHART_DESTROYED,{chartId:this.model.chartId,chartType:this.model.chartType}),this.onDestroyed(this.model.chartId))}getRenderOptions(e){return cn(this.model,e)}getToolbarItems(){let e=this.ctx.options.getChartToolbarItems,t=[...$i];return e?e(t):t}isUnlinked(){return this.model.unlinked}onEditChart(){this.openToolPanel()}onAdvancedSettings(){this.openToolPanel("customize")}onUnlink(){this.unlink()}onMove(e){}onClose(){this.dispose()}getColumnOptions(){let e=this.ctx.columnModel.getVisibleColumns(),t;if(this.model.chartColIds&&this.model.chartColIds.length>0){let o=new Map(e.map(r=>[r.colId,r]));t=this.model.chartColIds.map(r=>o.get(r)).filter(r=>r!==void 0)}else{let{startColIndex:o,endColIndex:r}=this.model.cellRange,n=Math.min(o,r),i=Math.max(o,r),s=e.slice(n,i+1);t=s.length>0?s:e}return t.map(o=>({colId:o.colId,header:o.header,isMeasure:Wi.has(o.type),isDimension:Vi.has(o.type)}))}getPanels(){return this.ctx.options.chartToolPanelsDef?.panels??["chart","setup","customize"]}getDefaultPanel(){return this.ctx.options.chartToolPanelsDef?.defaultToolPanel??"chart"}buildData(){let e=this.ctx.store.get("visibleRows"),t=this.ctx.columnModel.getAllColumns();return dn(this.model,this.rowsInRange(e),t)}rowsInRange(e){let{startRowIndex:t,endRowIndex:o}=this.model.cellRange;if(t==null||o==null)return e;let r=Math.max(0,Math.min(t,o)),n=Math.min(e.length-1,Math.max(t,o));return r>n?[]:r===0&&n===e.length-1?e:e.slice(r,n+1)}subscribe(){this.unsubscribeRows||(this.unsubscribeRows=this.ctx.store.watch("visibleRows",()=>this.scheduleRefresh()))}teardownSubscription(){this.unsubscribeRows?.(),this.unsubscribeRows=null}scheduleRefresh(){this.refreshRaf!==null||this.disposed||(this.refreshRaf=requestAnimationFrame(()=>{this.refreshRaf=null,this.refreshFromGrid()}))}};var Ui=new Set(["number","currency","percentage"]),qi=new Set(["string","dropdown","date","boolean","email"]),Wt=class{constructor(e){this.ctx=e;this.charts=new Map;this.nextId=1;this.hostEl=e.containerEl.querySelector(".pg-grid")??e.containerEl}createRangeChart(e){let t=this.seedModel(e);if(t===null)return"";let o=new Ct(this.ctx,this.hostEl,t,r=>{this.charts.delete(r)});return this.charts.set(t.chartId,o),this.ctx.eventBus.emit(x.CHART_CREATED,{chartId:t.chartId,chartType:t.chartType,cellRange:t.cellRange,chartModel:t}),e.suppressPanel||o.start(),t.chartId}getChartModels(){return Array.from(this.charts.values(),e=>e.getModel())}updateChart(e){let t=this.charts.get(e.chartId);t&&t.updateModel({chartType:e.chartType,cellRange:e.cellRange,chartColIds:e.chartColIds,categoryColId:e.categoryColId,seriesColIds:e.seriesColIds,aggregation:e.aggregation,switchCategorySeries:e.switchCategorySeries,unlinked:e.unlinked,title:e.title,subtitle:e.subtitle,legend:e.legend,xAxis:e.xAxis,yAxis:e.yAxis,series:e.series,style:e.style})}restoreChart(e){let t=new Ct(this.ctx,this.hostEl,e,o=>{this.charts.delete(o)});return this.charts.set(e.chartId,t),this.ctx.eventBus.emit(x.CHART_CREATED,{chartId:e.chartId,chartType:e.chartType,cellRange:e.cellRange,chartModel:e}),t.start(),e.chartId}getChartImageDataURL(e,t="png"){return this.charts.get(e)?.getImageDataURL(t)??null}downloadChart(e,t="png"){this.charts.get(e)?.downloadImage(t)}destroyChart(e){this.charts.get(e)?.dispose()}disposeAll(){for(let e of Array.from(this.charts.values()))e.dispose();this.charts.clear()}seedModel(e){let t=this.ctx.columnModel.getVisibleColumns(),o=e.cellRanges&&e.cellRanges.length>0?e.cellRanges:[e.cellRange],r=this.collectRangeColumns(t,o),n=r.map(h=>h.colId),i=e.categoryColId??r.find(h=>qi.has(h.type))?.colId??r[0]?.colId,s=e.seriesColIds??r.filter(h=>Ui.has(h.type)&&h.colId!==i).map(h=>h.colId);if(!i||s.length===0)return null;let l=e.chartType??this.ctx.options.defaultChartType??"column-grouped",a=r.find(h=>h.colId===i)?.header??"Category",c=nn({chartId:`chart-${this.nextId++}`,chartType:l,cellRange:e.cellRange,chartColIds:n,categoryColId:i,seriesColIds:s,aggregation:e.aggregation,title:`${a} Chart`}),p=this.ctx.options.chartThemeOverrides;return p&&(c=Nt(c,p)),c}collectRangeColumns(e,t){let o=new Set;for(let r of t){let n=Math.max(0,Math.min(r.startColIndex,r.endColIndex)),i=Math.min(e.length-1,Math.max(r.startColIndex,r.endColIndex));for(let s=n;s<=i;s++)o.add(s)}return o.size===0?[...e]:e.filter((r,n)=>o.has(n))}};var Wo=(t=>(t.GROUP="group",t.LEAF="leaf",t))(Wo||{}),Vo=(r=>(r.PROPORTIONAL="proportional",r.EQUAL="equal",r.FIRST_FIXED="firstFixed",r.LAST_FIXED="lastFixed",r))(Vo||{});function J(d){return d.pointerType==="touch"}var fe=5,q=8;var Ye=400,$o=.95,xt=.02,gn=".pg-th__resize-handle,[data-row-drag],.pg-fill-handle,.pg-ai-panel,.pg-editor,[data-detail-toggle],[data-detail-resize-handle]";var mn={valid:!1,targetId:"",position:"before",indicatorX:0},Ke=class{constructor(e,t,o,r,n,i){this.columnModel=e;this.groupModel=t;this.headerBuilder=o;this.colStyles=r;this.eventBus=n;this.gridElGetter=i;this.draggingId=null;this.draggingIsGroup=!1;this.ghostEl=null;this.indicatorEl=null;this.gridEl=null;this.currentTarget=null;this._didJustDrag=!1;this.dragStyleEl=null;this.dragCells=[];this.dragCellWidth=0;this.dragSourceIdx=-1;this.dragEffectiveIdx=-1;this.boundMouseMove=this.onMouseMove.bind(this),this.boundMouseUp=this.onMouseUp.bind(this)}get didJustDrag(){return this._didJustDrag}attachGroupDragListeners(e,t){e.addEventListener("pointerdown",o=>{if(o.target.closest(".pg-th__resize-handle, .pg-th__collapse-btn")||o.button!==0)return;let r=o.clientX,n=o.clientY,i=J(o),s=!1,l=0,a=()=>{let g=m=>{m.stopPropagation(),document.removeEventListener("click",g,!0)};document.addEventListener("click",g,!0)},c=(g,m)=>{s||(s=!0,l&&(clearTimeout(l),l=0),e.classList.remove("pg-th--drag-armed"),document.removeEventListener("pointermove",h),this.startGroupDrag(t,g,m),document.addEventListener("pointermove",this.boundMouseMove),document.addEventListener("pointerup",this.boundMouseUp),a())},p=()=>{l&&(clearTimeout(l),l=0),e.classList.remove("pg-th--drag-armed"),document.removeEventListener("pointermove",h),document.removeEventListener("pointerup",u)},h=g=>{if(s)return;let m=Math.abs(g.clientX-r),f=Math.abs(g.clientY-n);i?(m>q||f>q)&&p():m>fe&&c(g.clientX,g.clientY)},u=()=>{s||p()};document.addEventListener("pointermove",h),document.addEventListener("pointerup",u),i&&(e.classList.add("pg-th--drag-armed"),l=window.setTimeout(()=>{l=0,c(r,n)},Ye))})}attachLeafDragListeners(e,t){let o=this.groupModel.getParent(t.colId);if(o?.marryChildren){let r=this.groupModel.getGroup(o.groupId);r&&this.attachGroupDragListeners(e,r)}}get isDragging(){return this.draggingId!==null}destroy(){this.cleanupDrag(),document.removeEventListener("pointermove",this.boundMouseMove),document.removeEventListener("pointerup",this.boundMouseUp)}startGroupDrag(e,t,o){let r=this.gridElGetter();if(!r)return;this.draggingId=e.groupId,this.draggingIsGroup=!0,this.gridEl=r;let n=y("pg-col-drag-ghost"),i=document.createElement("span");i.className="pg-col-drag-ghost__label",i.textContent=e.header,n.appendChild(i),n.style.left=`${t+14}px`,n.style.top=`${o}px`,document.body.appendChild(n),this.ghostEl=n;let s=y("pg-group-drop-indicator");r.appendChild(s),this.indicatorEl=s,document.body.style.cursor="grabbing",document.body.style.userSelect="none",r.classList.add("pg-grid--col-dragging");let l=r.querySelector(`[data-group-id="${e.groupId}"]`),a=parseInt(l?.closest("[data-group-depth]")?.getAttribute("data-group-depth")??"0",10),c=[];for(let h of r.querySelectorAll(`[data-group-depth="${a}"]`))for(let u of h.querySelectorAll("[data-group-id]"))c.push({groupId:u.getAttribute("data-group-id")??"",rect:u.getBoundingClientRect()});c.sort((h,u)=>h.rect.left-u.rect.left),this.dragCells=c,this.dragSourceIdx=c.findIndex(h=>h.groupId===e.groupId),this.dragCellWidth=c[this.dragSourceIdx]?.rect.width??0,this.dragEffectiveIdx=this.dragSourceIdx;let p=document.createElement("style");p.setAttribute("data-pg-group-drag",""),document.head.appendChild(p),this.dragStyleEl=p}onMouseMove(e){if(!this.draggingId||!this.ghostEl)return;this.ghostEl.style.left=`${e.clientX+14}px`,this.ghostEl.style.top=`${e.clientY}px`;let t=this.isOutsideGrid(e.clientX,e.clientY);if(this.ghostEl.classList.toggle("pg-col-drag-ghost--outside",t),t){this.currentTarget=null,this.updateIndicator(null),this.applyDragTransforms(-1);return}let o=this.hitTest(e.clientX,e.clientY);if(this.currentTarget=o,this.updateIndicator(o),this.dragCells.length>0){let r=this.dragSourceIdx;for(let n=0;n<this.dragCells.length;n++){if(n===this.dragSourceIdx)continue;let i=this.dragCells[n].rect;if(e.clientX>=i.left&&e.clientX<i.right){r=n;break}}e.clientX<(this.dragCells[0]?.rect.left??0)&&(r=0),e.clientX>=(this.dragCells[this.dragCells.length-1]?.rect.right??0)&&(r=this.dragCells.length-1),this.dragEffectiveIdx=r,this.applyDragTransforms(r)}}applyDragTransforms(e){if(!this.dragStyleEl||!this.gridEl)return;if(e===-1||e===this.dragSourceIdx){this.dragStyleEl.textContent="";return}let t=this.gridEl.getAttribute("data-photon-grid-id")??"",o=t?`[data-photon-grid-id="${t}"] `:"",r=this.dragSourceIdx,n=this.dragCells[r]?.rect,i=this.dragCells[e]?.rect;if(!n||!i)return;let s=e>r?i.right-n.right:i.left-n.left,l=`${o}[data-group-id="${this.draggingId}"] { transform: translateX(${s}px); z-index: 10; position: relative; transition: none; }
4526
4294
  `;for(let a=0;a<this.dragCells.length;a++){if(a===r)continue;let c=0;e>r&&a>r&&a<=e?c=-this.dragCellWidth:e<r&&a>=e&&a<r&&(c=this.dragCellWidth),c!==0&&(l+=`${o}[data-group-id="${this.dragCells[a].groupId}"] { transform: translateX(${c}px); }
4527
- `)}this.dragStyleEl.textContent=l}onMouseUp(e){let t=this.currentTarget,o=this.draggingId,r=this.draggingIsGroup,n=this.gridEl,i=n?this.isOutsideGrid(e.clientX,e.clientY):!1,s=n?this.isOverGroupingBar(e.clientX,e.clientY):!1;if(this.cleanupDrag(),this._didJustDrag=!0,Promise.resolve().then(()=>{this._didJustDrag=!1}),!o)return;if(i){if(r){let p=this.groupModel.getLeavesInGroup(o);for(let h of p)this.columnModel.setColumnVisible(h.colId,!1)}return}if(s){if(r){let h=this.groupModel.getLeavesInGroup(o).filter(u=>u.groupable).map(u=>u.colId);h.length>0&&this.eventBus.emit(x.COLUMN_GROUP_CHANGED,{action:"add",colIds:h})}return}let l=this.dragEffectiveIdx,c=l!==-1&&l!==this.dragSourceIdx&&l<this.dragCells.length?{valid:!0,targetId:this.dragCells[l].groupId,position:l>this.dragSourceIdx?"after":"before",indicatorX:0}:t;if(c?.valid){if(r){if(!this.groupModel.getGroup(c.targetId))return;let u=this.groupModel.getParent(c.targetId)?.groupId??null,m=c.position==="before"?c.targetId:null,g=c.position==="after"?this.nextSiblingId(c.targetId):null,f=m??g,C=this.groupModel.getGroup(o);if(C?.isSoloGroup&&C.originalParentGroupId===u){let b=C.children[0];if(b?.nodeType==="leaf"){this.groupModel.dissolveGroupIfSolo(o,u,f),this.columnModel.setColumnVisible(b.colDef.colId,!0),this.triggerRebuild();return}}this.groupModel.moveGroup(o,u,f)}this.triggerRebuild()}}cleanupDrag(){this.draggingId=null,this.draggingIsGroup=!1,this.currentTarget=null,this.dragCells=[],this.dragCellWidth=0,this.dragSourceIdx=-1,this.dragEffectiveIdx=-1,this.ghostEl?.remove(),this.ghostEl=null,this.indicatorEl?.remove(),this.indicatorEl=null,this.dragStyleEl?.remove(),this.dragStyleEl=null,this.gridEl?.classList.remove("pg-grid--col-dragging"),this.gridEl=null,document.body.style.cursor="",document.body.style.userSelect="",document.removeEventListener("pointermove",this.boundMouseMove),document.removeEventListener("pointerup",this.boundMouseUp)}hitTest(e,t){if(!this.gridEl)return un;let o=this.gridEl.querySelectorAll("[data-group-id]"),r=this.gridEl.getBoundingClientRect(),n=null,i=1/0;for(let s of o){let l=s.getAttribute("data-group-id")??"";if(l===this.draggingId)continue;let a=s.getBoundingClientRect();if(t<a.top-4||t>a.bottom+4)continue;let c=a.left+a.width/2,p=Math.abs(e-c);if(p<i){i=p;let h=e<c?"before":"after";n={valid:!0,targetId:l,position:h,indicatorX:(h==="before"?a.left:a.right)-r.left}}}return n??un}updateIndicator(e){if(this.indicatorEl){if(!e?.valid){this.indicatorEl.style.display="none";return}this.indicatorEl.style.display="block",this.indicatorEl.style.left=`${e.indicatorX}px`}}isOutsideGrid(e,t){if(!this.gridEl)return!1;let o=this.gridEl.getBoundingClientRect(),r=40;return e<o.left-r||e>o.right+r||t<o.top-r||t>o.bottom+r}isOverGroupingBar(e,t){if(!this.gridEl)return!1;let o=this.gridEl.querySelector(".pg-group-drop-zone--top");if(!o)return!1;let r=o.getBoundingClientRect();return e>=r.left&&e<=r.right&&t>=r.top&&t<=r.bottom}nextSiblingId(e){let t=this.groupModel.getParent(e),o=t?t.children:this.groupModel.rootNodes,r=o.findIndex(i=>(i.nodeType==="group"?i.groupId:i.colDef?.colId)===e);if(r===-1||r>=o.length-1)return null;let n=o[r+1];return n.nodeType==="group"?n.groupId??null:n.colDef?.colId??null}extractLeafToSoloGroup(e,t){if(!this.groupModel.getParent(e))return;let r=this.groupModel.createSoloGroupForLeaf(e);r&&(this.groupModel.moveGroup(r,null,t),this.triggerRebuild())}createLeafClone(e,t){let o=this.groupModel.getParent(e);if(!o)return;if(o.isSoloGroup&&o.originalParentGroupId===t){this.groupModel.dissolveGroupIfSolo(o.groupId,t,null),this.columnModel.setColumnVisible(e,!0),this.triggerRebuild();return}if(o.groupId===t)return;let r=this.groupModel.createSoloGroupForLeaf(e);if(!r)return;let n=this.groupModel.getParent(t);this.groupModel.moveGroup(r,n?.groupId??null,t),this.triggerRebuild()}triggerRebuild(){this.eventBus.emit(x.COLUMN_MOVED,{colDef:null,fromIndex:-1,toIndex:-1})}};var Vt=class{constructor(e,t,o){this.store=e;this.groupingEngine=t;this.iconRenderer=o;this.el=null;this.chipsEl=null;this.dockPos="top";this.outerRowEl=null;this.mainColEl=null;this.isDockDragging=!1;this.dockIndicatorEl=null;this._onDockMove=null;this._onDockUp=null;this.draggingChipId=null;this.chipGhostEl=null;this.chipDropIndex=-1;this._onChipMove=null;this._onChipUp=null;this.isResizing=!1;this.resizeStartSize=0;this.resizeStartPos=0;this._onResizeMove=null;this._onResizeUp=null;this.searchCallback=null;this.searchInputEl=null;this.searchClearEl=null;this.searchDebounceTimer=null}mount(e,t){this.outerRowEl=e,this.mainColEl=t,this.el=y("pg-group-drop-zone pg-group-drop-zone--top"),t.insertBefore(this.el,t.firstChild),this.buildStructure(),this.render()}update(){this.render()}highlight(e){this.chipsEl?.classList.toggle("pg-group-zone-chips--over",e)}isOver(e,t){let o=this.el?.getBoundingClientRect();return o?e>=o.left&&e<=o.right&&t>=o.top&&t<=o.bottom:!1}isGrouped(e){return this.store.get("groupedColumnIds").includes(e)}dropColumn(e){this.groupingEngine.addGroupColumn(e)}removeColumn(e){this.groupingEngine.removeGroupColumn(e)}setSearchCallback(e){this.searchCallback=e}destroy(){this.searchDebounceTimer!==null&&(clearTimeout(this.searchDebounceTimer),this.searchDebounceTimer=null),this.cleanupDockDrag(),this.cleanupChipDrag(),this.cleanupResize(),this.el?.remove(),this.el=null,this.chipsEl=null,this.searchInputEl=null,this.searchClearEl=null}buildStructure(){if(!this.el)return;this.chipsEl=y("pg-group-zone-chips"),this.el.appendChild(this.chipsEl);let e=y("pg-group-search"),t=y("pg-group-search__field"),o=y("pg-group-search__icon");o.innerHTML=this.iconRenderer.renderToString("search",14);let r=document.createElement("input");r.type="text",r.className="pg-group-search__input",r.placeholder="Search...",r.spellcheck=!1,r.setAttribute("autocomplete","off"),this.searchInputEl=r;let n=y("pg-group-search__clear");n.innerHTML=this.iconRenderer.renderToString("close",12),n.title="Clear search",this.searchClearEl=n,r.addEventListener("input",()=>{let i=r.value;n.classList.toggle("pg-group-search__clear--visible",i.length>0),this.searchDebounceTimer!==null&&clearTimeout(this.searchDebounceTimer),this.searchDebounceTimer=setTimeout(()=>{this.searchDebounceTimer=null,this.searchCallback?.(i)},180)}),n.addEventListener("pointerdown",i=>{i.preventDefault(),r.value="",n.classList.remove("pg-group-search__clear--visible"),this.searchDebounceTimer!==null&&(clearTimeout(this.searchDebounceTimer),this.searchDebounceTimer=null),this.searchCallback?.(""),r.focus()}),t.appendChild(o),t.appendChild(r),t.appendChild(n),e.appendChild(t),this.el.appendChild(e)}render(){if(!this.chipsEl)return;this.chipsEl.innerHTML="";let e=this.store.get("groupedColumnIds"),t=this.store.get("columns"),o=this.dockPos==="left"||this.dockPos==="right";if(e.length===0){let r=y("pg-group-drop-zone__hint");r.textContent="Drag a column here to group rows",this.chipsEl.appendChild(r);return}for(let r=0;r<e.length;r++){let n=e[r],i=t.find(c=>c.colId===n);if(!i)continue;if(r>0&&!o){let c=y("pg-group-chip__sep");c.innerHTML=this.iconRenderer.renderToString("chevronRight",12),this.chipsEl.appendChild(c)}let s=y("pg-group-chip");s.setAttribute("data-col-id",n),s.setAttribute("data-chip-index",String(r)),s.style.cursor="grab";let l=y("pg-group-chip__label");l.textContent=i.header,s.appendChild(l);let a=y("pg-group-chip__close");a.innerHTML=this.iconRenderer.renderToString("close",11),a.title="Remove grouping",a.addEventListener("click",c=>{c.stopPropagation(),this.removeColumn(n)}),s.appendChild(a),s.addEventListener("pointerdown",c=>{c.target.closest(".pg-group-chip__close")||(c.preventDefault(),this.startChipDrag(c,n,r))}),this.chipsEl.appendChild(s)}}startDockDrag(e){this.isDockDragging=!0,this.dockIndicatorEl=document.createElement("div"),this.dockIndicatorEl.style.cssText="position:fixed;pointer-events:none;z-index:99999;border:2px dashed var(--pg-colors-primary,#2563eb);background:var(--pg-colors-group-zone-over,rgba(37,99,235,0.1));border-radius:var(--pg-borders-radius-sm,4px);",document.body.appendChild(this.dockIndicatorEl),this._onDockMove=t=>this.onDockMove(t),this._onDockUp=t=>this.onDockUp(t),document.addEventListener("pointermove",this._onDockMove),document.addEventListener("pointerup",this._onDockUp),this.onDockMove(e)}onDockMove(e){if(!this.isDockDragging||!this.el||!this.dockIndicatorEl)return;let t=this.el.closest(".pg-grid");if(!t)return;let o=t.getBoundingClientRect(),r=(e.clientX-o.left)/o.width;r<.2?Object.assign(this.dockIndicatorEl.style,{left:`${o.left}px`,top:`${o.top}px`,width:"160px",height:`${o.height}px`,borderRadius:"4px 0 0 4px"}):r>.8?Object.assign(this.dockIndicatorEl.style,{left:`${o.right-160}px`,top:`${o.top}px`,width:"160px",height:`${o.height}px`,borderRadius:"0 4px 4px 0"}):Object.assign(this.dockIndicatorEl.style,{left:`${o.left}px`,top:`${o.top}px`,width:`${o.width}px`,height:"48px",borderRadius:"4px 4px 0 0"})}onDockUp(e){if(!this.isDockDragging||!this.el){this.cleanupDockDrag();return}let t=this.el.closest(".pg-grid");if(t){let o=t.getBoundingClientRect(),r=(e.clientX-o.left)/o.width,n=r<.2?"left":r>.8?"right":"top";this.setDock(n)}this.cleanupDockDrag()}setDock(e){e===this.dockPos||!this.el||!this.outerRowEl||!this.mainColEl||(this.dockPos=e,this.el.remove(),this.el.classList.remove("pg-group-drop-zone--top","pg-group-drop-zone--left","pg-group-drop-zone--right"),this.el.classList.add(`pg-group-drop-zone--${e}`),this.el.style.height="",this.el.style.width="",e==="top"?this.mainColEl.insertBefore(this.el,this.mainColEl.firstChild):e==="left"?this.outerRowEl.insertBefore(this.el,this.mainColEl):this.outerRowEl.appendChild(this.el),this.render())}cleanupDockDrag(){this.isDockDragging=!1,this.dockIndicatorEl?.remove(),this.dockIndicatorEl=null,this._onDockMove&&document.removeEventListener("pointermove",this._onDockMove),this._onDockUp&&document.removeEventListener("pointerup",this._onDockUp),this._onDockMove=null,this._onDockUp=null}startChipDrag(e,t,o){this.draggingChipId=t,this.chipDropIndex=o;let r=this.store.get("columns").find(s=>s.colId===t),n=y("pg-group-chip pg-group-chip--ghost"),i=y("pg-group-chip__label");i.textContent=r?.header??t,n.appendChild(i),n.style.cssText=`position:fixed;pointer-events:none;z-index:99999;opacity:0.85;left:${e.clientX+8}px;top:${e.clientY-14}px;`,document.body.appendChild(n),this.chipGhostEl=n,this._onChipMove=s=>this.onChipMove(s),this._onChipUp=s=>this.onChipUp(s),document.addEventListener("pointermove",this._onChipMove),document.addEventListener("pointerup",this._onChipUp)}onChipMove(e){if(!this.chipGhostEl||!this.chipsEl)return;this.chipGhostEl.style.left=`${e.clientX+8}px`,this.chipGhostEl.style.top=`${e.clientY-14}px`;let t=this.dockPos==="left"||this.dockPos==="right",o=Array.from(this.chipsEl.querySelectorAll(".pg-group-chip:not(.pg-group-chip--ghost)")),r=o.length;for(let n=0;n<o.length;n++){let i=o[n].getBoundingClientRect(),s=t?(i.top+i.bottom)/2:(i.left+i.right)/2;if((t?e.clientY:e.clientX)<s){r=n;break}}this.chipDropIndex=r;for(let n of o)n.style.opacity=n.getAttribute("data-col-id")===this.draggingChipId?"0.3":""}onChipUp(e){let t=this.draggingChipId,o=this.chipDropIndex;if(this.cleanupChipDrag(),!t)return;let r=[...this.store.get("groupedColumnIds")],n=r.indexOf(t);if(n===-1||n===o)return;r.splice(n,1);let i=o>n?Math.max(0,o-1):o;r.splice(i,0,t),this.groupingEngine.reorderGroupColumns(r)}cleanupChipDrag(){if(this.draggingChipId=null,this.chipDropIndex=-1,this.chipsEl)for(let e of Array.from(this.chipsEl.querySelectorAll(".pg-group-chip")))e.style.opacity="";this.chipGhostEl?.remove(),this.chipGhostEl=null,this._onChipMove&&document.removeEventListener("pointermove",this._onChipMove),this._onChipUp&&document.removeEventListener("pointerup",this._onChipUp),this._onChipMove=null,this._onChipUp=null}startResize(e){this.el&&(this.isResizing=!0,this.dockPos==="top"?(this.resizeStartSize=this.el.offsetHeight,this.resizeStartPos=e.clientY):(this.resizeStartSize=this.el.offsetWidth,this.resizeStartPos=e.clientX),this._onResizeMove=t=>this.onResizeMove(t),this._onResizeUp=()=>this.cleanupResize(),document.addEventListener("pointermove",this._onResizeMove),document.addEventListener("pointerup",this._onResizeUp))}onResizeMove(e){if(!(!this.isResizing||!this.el))if(this.dockPos==="top"){let t=e.clientY-this.resizeStartPos;this.el.style.height=`${Math.max(48,this.resizeStartSize+t)}px`}else if(this.dockPos==="left"){let t=e.clientX-this.resizeStartPos;this.el.style.width=`${Math.max(80,this.resizeStartSize+t)}px`}else{let t=this.resizeStartPos-e.clientX;this.el.style.width=`${Math.max(80,this.resizeStartSize+t)}px`}}cleanupResize(){this.isResizing=!1,this._onResizeMove&&document.removeEventListener("pointermove",this._onResizeMove),this._onResizeUp&&document.removeEventListener("pointerup",this._onResizeUp),this._onResizeMove=null,this._onResizeUp=null}};var gn=(a=>(a.SORT="sort",a.FILTER="filter",a.PIN="pin",a.MOVE="move",a.RESIZE="resize",a.VISIBILITY="visibility",a.DATA="data",a.CLIPBOARD="clipboard",a.COLUMN="column",a))(gn||{});var $i=[["sort"],["filter"],["pin","move"],["resize"],["visibility"],["data"],["clipboard"],["column"]],$t=class{constructor(e,t,o,r,n){this.columnModel=e;this.sortEngine=t;this.eventBus=o;this.iconRenderer=r;this.onAction=n;this.el=null;this.anchorEl=null;this.outsideClickFn=null;this.escKeyFn=null;this.openSubmenuTimer=null;this.closeSubmenuTimer=null;this.activeSubmenuEl=null;this.submenuParents=new Map;this.groupCallbacks=null;this.menuCallbacks={};this.menuOptions={}}setMenuCallbacks(e){this.menuCallbacks=e}setMenuOptions(e){this.menuOptions=e}setGroupCallbacks(e){this.groupCallbacks=e}show(e,t,o,r){this.hide(),this.anchorEl=t,t.classList.add("pg-th__menu-btn--active");let n=this.buildMenu(e);document.body.appendChild(n),this.el=n,this.positionMenu(t,o,r),requestAnimationFrame(()=>{this.outsideClickFn=i=>{let s=i.target;this.el?.contains(s)||this.activeSubmenuEl?.contains(s)||this.hide()},this.escKeyFn=i=>{i.key==="Escape"&&this.hide()},document.addEventListener("mousedown",this.outsideClickFn),document.addEventListener("keydown",this.escKeyFn)})}hide(){this.outsideClickFn&&(document.removeEventListener("mousedown",this.outsideClickFn),this.outsideClickFn=null),this.escKeyFn&&(document.removeEventListener("keydown",this.escKeyFn),this.escKeyFn=null),this.clearSubmenuTimers(),this.activeSubmenuEl?.remove(),this.activeSubmenuEl=null,this.submenuParents.clear(),this.anchorEl?.classList.remove("pg-th__menu-btn--active"),this.anchorEl=null,this.el?.remove(),this.el=null}destroy(){this.hide()}buildMenu(e){let t=y("pg-col-ctx-menu");t.setAttribute("role","menu"),t.setAttribute("tabindex","-1");let o=new Set(this.menuOptions.sections??Object.values(gn)),r=this.buildAllSections(e),n=new Map(r.map(s=>[s.key,s])),i=!0;for(let s of $i){let l=s.filter(a=>o.has(a)&&(n.get(a)?.items.length??0)>0);if(l.length!==0){i||t.appendChild(this.createSeparator()),i=!1;for(let a of l){let c=n.get(a);for(let p of c.items)t.appendChild(p.kind==="parent"?this.buildParentItem(p,e):this.buildLeafItem(p))}}}return t}buildLeafItem(e){let t=y("pg-col-ctx-menu__item");if(t.setAttribute("role","menuitem"),t.setAttribute("tabindex","-1"),e.active&&t.classList.add("pg-col-ctx-menu__item--active"),e.disabled&&t.classList.add("pg-col-ctx-menu__item--disabled"),t.appendChild(this.createIcon(e.icon)),t.appendChild(this.createLabel(e.label)),e.checked){let o=y("pg-col-ctx-menu__item-check");o.innerHTML=this.iconRenderer.renderToString("check",14),t.appendChild(o)}return e.disabled||t.addEventListener("click",o=>{o.stopPropagation(),e.action(),this.hide()}),t}buildParentItem(e,t){let o=y("pg-col-ctx-menu__item pg-col-ctx-menu__item--has-submenu");o.setAttribute("role","menuitem"),o.setAttribute("aria-haspopup","true"),o.setAttribute("aria-expanded","false"),o.setAttribute("tabindex","-1"),o.appendChild(this.createIcon(e.icon)),o.appendChild(this.createLabel(e.label));let r=y("pg-col-ctx-menu__item-chevron");r.innerHTML=this.iconRenderer.renderToString("chevronRight",12),o.appendChild(r);let n=this.buildSubmenu(e.children,t);return this.submenuParents.set(n,o),this.attachSubmenuListeners(o,n),o}buildSubmenu(e,t){let o=y("pg-col-ctx-menu__submenu");o.setAttribute("role","menu");for(let r of e)o.appendChild(this.buildLeafItem(r));return o}attachSubmenuListeners(e,t){e.addEventListener("mouseenter",()=>{this.clearSubmenuTimers(),this.activeSubmenuEl&&this.activeSubmenuEl!==t&&this.closeSubmenu(this.activeSubmenuEl),this.openSubmenuTimer=setTimeout(()=>this.openSubmenu(t,e),60)}),e.addEventListener("mouseleave",o=>{this.activeSubmenuEl===t&&t.contains(o.relatedTarget)||(this.clearSubmenuTimers(),this.closeSubmenuTimer=setTimeout(()=>{!t.matches(":hover")&&!e.matches(":hover")&&this.closeSubmenu(t)},150))}),t.addEventListener("mouseenter",()=>{this.clearSubmenuTimers()}),t.addEventListener("mouseleave",o=>{e.contains(o.relatedTarget)||(this.clearSubmenuTimers(),this.closeSubmenuTimer=setTimeout(()=>{!t.matches(":hover")&&!e.matches(":hover")&&this.closeSubmenu(t)},150))})}openSubmenu(e,t){document.body.appendChild(e),this.activeSubmenuEl=e,e.classList.add("pg-col-ctx-menu__submenu--open"),t.setAttribute("aria-expanded","true"),this.adjustSubmenuPosition(e,t)}closeSubmenu(e){e.classList.remove("pg-col-ctx-menu__submenu--open"),e.remove(),this.submenuParents.get(e)?.setAttribute("aria-expanded","false"),this.activeSubmenuEl===e&&(this.activeSubmenuEl=null)}clearSubmenuTimers(){this.openSubmenuTimer!==null&&(clearTimeout(this.openSubmenuTimer),this.openSubmenuTimer=null),this.closeSubmenuTimer!==null&&(clearTimeout(this.closeSubmenuTimer),this.closeSubmenuTimer=null)}buildAllSections(e){return[this.buildSortSection(e),this.buildFilterSection(e),this.buildPinSection(e),this.buildMoveSection(e),this.buildResizeSection(e),this.buildVisibilitySection(e),this.buildDataSection(e),this.buildClipboardSection(e),this.buildColumnSection(e)]}buildSortSection(e){let t=this.sortEngine.isSorted(e.colId);return{key:"sort",items:e.sortable===!1?[]:[{kind:"leaf",label:"Sort Ascending",icon:"sortAsc",active:t==="asc",action:()=>{this.sortEngine.sort(e.colId,e.field,"asc"),this.columnModel.setColumnSort(e.colId,"asc"),this.onAction("sort",e.colId)}},{kind:"leaf",label:"Sort Descending",icon:"sortDesc",active:t==="desc",action:()=>{this.sortEngine.sort(e.colId,e.field,"desc"),this.columnModel.setColumnSort(e.colId,"desc"),this.onAction("sort",e.colId)}},{kind:"leaf",label:"Clear Sort",icon:"close",disabled:!t,action:()=>{this.sortEngine.clearColumnSort(e.colId),this.columnModel.setColumnSort(e.colId,null),this.onAction("sort",e.colId)}}]}}buildFilterSection(e){let t=e.filterActive===!0;return{key:"filter",items:e.filterable===!1?[]:[{kind:"leaf",label:"Filter",icon:"filter",action:()=>{let o=this.anchorEl??document.createElement("div");this.menuCallbacks.onOpenAdvancedFilter?.(e,o),this.onAction("advanced-filter",e.colId)}}]}}buildPinSection(e){return{key:"pin",items:[{kind:"parent",label:"Pin",icon:"pin",children:[{kind:"leaf",label:"Pin Left",icon:"pin",active:e.pinned==="left",action:()=>{this.columnModel.setColumnPin(e.colId,"left"),this.onAction("pin",e.colId)}},{kind:"leaf",label:"Pin Right",icon:"pin",active:e.pinned==="right",action:()=>{this.columnModel.setColumnPin(e.colId,"right"),this.onAction("pin",e.colId)}},{kind:"leaf",label:"Unpin",icon:"unpin",active:!e.pinned,action:()=>{this.columnModel.setColumnPin(e.colId,null),this.onAction("pin",e.colId)}}]}]}}buildMoveSection(e){let t=this.columnModel.getVisibleColumns(),o=t.findIndex(i=>i.colId===e.colId),r=o<=0,n=o>=t.length-1;return{key:"move",items:[{kind:"leaf",label:"Move Column to Left",icon:"chevronLeft",disabled:r,action:()=>{this.menuCallbacks.onMoveLeft?.(e.colId),this.onAction("move-left",e.colId)}},{kind:"leaf",label:"Move Column to Right",icon:"chevronRight",disabled:n,action:()=>{this.menuCallbacks.onMoveRight?.(e.colId),this.onAction("move-right",e.colId)}},{kind:"leaf",label:"Move to Start",icon:"pageFirst",disabled:r,action:()=>{this.menuCallbacks.onMoveStart?.(e.colId),this.onAction("move-start",e.colId)}},{kind:"leaf",label:"Move to End",icon:"pageLast",disabled:n,action:()=>{this.menuCallbacks.onMoveEnd?.(e.colId),this.onAction("move-end",e.colId)}}]}}buildResizeSection(e){return{key:"resize",items:[{kind:"parent",label:"Resize",icon:"expand",children:[{kind:"leaf",label:"Auto Size",icon:"columns",action:()=>{this.menuCallbacks.onAutoSize?.(e.colId),this.onAction("autosize",e.colId)}},{kind:"leaf",label:"Auto Size All",icon:"columns",action:()=>{this.menuCallbacks.onAutoSizeAll?.(),this.onAction("autosize-all",e.colId)}},{kind:"leaf",label:"Fit to Grid",icon:"expand",action:()=>{this.menuCallbacks.onFitToGrid?.(),this.onAction("fit-to-grid",e.colId)}},{kind:"leaf",label:"Reset Width",icon:"refresh",action:()=>{this.menuCallbacks.onResetWidth?.(e.colId),this.onAction("reset-width",e.colId)}}]}]}}buildVisibilitySection(e){return{key:"visibility",items:[{kind:"parent",label:"Visibility",icon:"eye",children:[{kind:"leaf",label:"Hide Column",icon:"eyeOff",action:()=>{this.columnModel.setColumnVisible(e.colId,!1),this.onAction("hide",e.colId)}},{kind:"leaf",label:"Column Chooser\u2026",icon:"columns",action:()=>{this.menuCallbacks.onOpenColumnChooser?.(),this.onAction("column-chooser",e.colId)}}]}]}}buildDataSection(e){let t=[];if(e.groupable!==!1&&this.groupCallbacks){let o=this.groupCallbacks.isGrouped(e.colId);t.push({kind:"leaf",label:o?"Remove Grouping":"Group by Column",icon:"group",active:o,action:()=>{o?this.groupCallbacks.removeGroup(e.colId):this.groupCallbacks.addGroup(e.colId),this.onAction("group",e.colId)}})}return(e.type==="number"||e.type==="currency")&&t.push({kind:"parent",label:"Aggregate",icon:"sigma",children:["sum","avg","min","max","count"].map(o=>({kind:"leaf",label:o.charAt(0).toUpperCase()+o.slice(1),icon:"sigma",checked:e.aggFunc===o,action:()=>{this.menuCallbacks.onAggregate?.(e,o),this.onAction(`aggregate-${o}`,e.colId)}}))}),{key:"data",items:t}}buildClipboardSection(e){return{key:"clipboard",items:[{kind:"parent",label:"Clipboard",icon:"copy",children:[{kind:"leaf",label:"Copy Header",icon:"copy",action:()=>{this.menuCallbacks.onCopyHeader?.(e),this.onAction("copy-header",e.colId)}},{kind:"leaf",label:"Copy Column",icon:"copy",action:()=>{this.menuCallbacks.onCopyColumn?.(e),this.onAction("copy-column",e.colId)}},{kind:"leaf",label:"Copy Values",icon:"copy",action:()=>{this.menuCallbacks.onCopyValues?.(e),this.onAction("copy-values",e.colId)}}]}]}}buildColumnSection(e){return{key:"column",items:[{kind:"parent",label:"Column",icon:"settings",children:[{kind:"leaf",label:"Rename",icon:"edit",action:()=>{this.menuCallbacks.onRename?.(e),this.onAction("rename",e.colId)}},{kind:"leaf",label:"Duplicate",icon:"copy",action:()=>{this.menuCallbacks.onDuplicate?.(e),this.onAction("duplicate",e.colId)}},{kind:"leaf",label:"Freeze Position",icon:"pin",checked:e.draggable===!1,action:()=>{this.menuCallbacks.onFreezePosition?.(e),this.onAction("freeze",e.colId)}},{kind:"leaf",label:"Lock Column",icon:"lock",checked:e.locked===!0,action:()=>{this.menuCallbacks.onLockColumn?.(e),this.onAction("lock",e.colId)}},{kind:"leaf",label:"Reset Column",icon:"refresh",action:()=>{this.menuCallbacks.onResetColumn?.(e),this.onAction("reset-column",e.colId)}}]}]}}createSeparator(){let e=y("pg-col-ctx-menu__separator");return e.setAttribute("role","separator"),e}createIcon(e){let t=y("pg-col-ctx-menu__item-icon");return t.innerHTML=this.iconRenderer.renderToString(e,14),t}createLabel(e){let t=y("pg-col-ctx-menu__item-label");return t.textContent=e,t}positionMenu(e,t,o){let r=this.el;if(!r)return;let n=window.innerWidth,i=window.innerHeight,s=r.offsetWidth||220,l=Math.min(r.scrollHeight||400,i-200),a,c;if(t!==void 0&&o!==void 0)a=t,c=o;else{let p=e.getBoundingClientRect();a=p.right-s,c=p.bottom+2}a+s>n&&(a=n-s-4),a<4&&(a=4),c+l>i&&(c=(o??e.getBoundingClientRect().top)-l-2),c<4&&(c=4),r.style.left=`${a}px`,r.style.top=`${c}px`}adjustSubmenuPosition(e,t){let o=t.getBoundingClientRect(),r=e.offsetWidth||180,n=e.scrollHeight||200,i=window.innerWidth,s=window.innerHeight,l=o.right,a=o.top-4;l+r>i&&(l=o.left-r),l<4&&(l=4),a+n>s&&(a=s-n-4),a<4&&(a=4),e.style.left=`${l}px`,e.style.top=`${a}px`}};var Ut=class{constructor(e,t){this.engine=e;this.iconRenderer=t;this.el=null;this.anchorEl=null;this.outsideClickFn=null;this.escKeyFn=null;this.callbacks={}}setCallbacks(e){this.callbacks=e}show(e,t,o,r){this.hide(),this.anchorEl=t,t.classList.add("pg-th--ctx-menu-open");let n=this.buildMenu(e);document.body.appendChild(n),this.el=n,this.positionMenu(t,o,r),requestAnimationFrame(()=>{this.outsideClickFn=i=>{this.el?.contains(i.target)||this.hide()},this.escKeyFn=i=>{i.key==="Escape"&&this.hide()},document.addEventListener("mousedown",this.outsideClickFn),document.addEventListener("keydown",this.escKeyFn)})}hide(){this.outsideClickFn&&(document.removeEventListener("mousedown",this.outsideClickFn),this.outsideClickFn=null),this.escKeyFn&&(document.removeEventListener("keydown",this.escKeyFn),this.escKeyFn=null),this.anchorEl?.classList.remove("pg-th--ctx-menu-open"),this.anchorEl=null,this.el?.remove(),this.el=null}destroy(){this.hide()}buildMenu(e){let t=y("pg-col-ctx-menu");t.setAttribute("role","menu"),t.setAttribute("tabindex","-1");let o=this.buildEntries(e);for(let r of o)"kind"in r?t.appendChild(this.createSeparator()):t.appendChild(this.buildItem(r));return t}buildEntries(e){let t=e.logicalGroupId,o=this.engine.getGroupPositionInfo(t);return[{label:"Move Column to Left",icon:"chevronLeft",disabled:o.isFirst,action:()=>{this.engine.moveGroupLeft(t),this.callbacks.onAction?.("move-left",t)}},{label:"Move Column to Right",icon:"chevronRight",disabled:o.isLast,action:()=>{this.engine.moveGroupRight(t),this.callbacks.onAction?.("move-right",t)}},{label:"Move to Start",icon:"pageFirst",disabled:o.isFirst,action:()=>{this.engine.moveGroupToStart(t),this.callbacks.onAction?.("move-start",t)}},{label:"Move to End",icon:"pageLast",disabled:o.isLast,action:()=>{this.engine.moveGroupToEnd(t),this.callbacks.onAction?.("move-end",t)}},{kind:"separator"},{label:"Hide Group",icon:"eyeOff",action:()=>{this.engine.hideGroupLeaves(t),this.callbacks.onAction?.("hide-group",t)}},{label:"Choose Columns\u2026",icon:"columns",action:()=>{this.callbacks.onOpenColumnChooser?.(),this.callbacks.onAction?.("column-chooser",t)}}]}buildItem(e){let t=y("pg-col-ctx-menu__item");t.setAttribute("role","menuitem"),t.setAttribute("tabindex","-1"),e.disabled&&t.classList.add("pg-col-ctx-menu__item--disabled");let o=y("pg-col-ctx-menu__item-icon");o.innerHTML=this.iconRenderer.renderToString(e.icon,14),t.appendChild(o);let r=y("pg-col-ctx-menu__item-label");return r.textContent=e.label,t.appendChild(r),e.disabled||t.addEventListener("click",n=>{n.stopPropagation(),e.action(),this.hide()}),t}createSeparator(){let e=y("pg-col-ctx-menu__separator");return e.setAttribute("role","separator"),e}positionMenu(e,t,o){let r=this.el;if(!r)return;let n=window.innerWidth,i=window.innerHeight,s=r.offsetWidth||220,l=r.scrollHeight||300,a,c;if(t!==void 0&&o!==void 0)a=t,c=o;else{let p=e.getBoundingClientRect();a=p.left,c=p.bottom+2}a+s>n&&(a=n-s-4),a<4&&(a=4),c+l>i&&(c=(o??e.getBoundingClientRect().top)-l-2),c<4&&(c=4),r.style.left=`${a}px`,r.style.top=`${c}px`}};var Ke=class{constructor(e,t,o,r,n,i){this.store=e;this.eventBus=t;this.iconRenderer=o;this.columnModel=r;this.sortEngine=n;this.colStyles=i;this.leftHeaderRowEl=null;this.centerHeaderRowEl=null;this.rightHeaderRowEl=null;this.centerFilterRowEl=null;this.headerCheckbox=null;this.groupContextMenu=null;this.groupDropZone=null;this.groupModel=null;this.groupHeaderBuilder=null;this.leftGroupRowEls=[];this.centerGroupRowEls=[];this.rightGroupRowEls=[];this.onGroupToggleFn=null;this.onGroupResizeFn=null;this.groupDragHandler=null;this.displayGroupEngine=null;this.lastGroupRowHeight=44;this.draggingColId=null;this.isDragging=!1;this.draggingPanelRowEl=null;this.draggingIsGroupable=!1;this.isOverGroupZone=!1;this.ghostEl=null;this.dragStyleEl=null;this.draggingGridEl=null;this.draggedColWidth=0;this.dragStartScrollX=0;this.dragIsHideMode=!1;this.dragSourcePanel="center";this.dragTargetPanel="center";this.dragTargetLocalIdx=-1;this.panelDragData=[];this.livePanelMoveInProgress=!1;this.scrollByX=null;this.canScrollX=null;this.onResizeCb=null;this.autoScrollRAF=0;this.autoScrollSpeed=0;this.centerPanelRect=null;this.lastDragClientX=0;this.openFilterPanelFn=null;this.openColumnChooserFn=null;this.columnDataRefreshFn=null;this._isResizingColumn=!1;this.lastResizeDownColId="";this.lastResizeDownAt=0;this.tickAutoScroll=()=>{if(!(!this.isDragging||this.autoScrollSpeed===0)){if(this.autoScrollSpeed<0&&!(this.canScrollX?.(-1)??!0)){this.stopAutoScroll();return}if(this.autoScrollSpeed>0&&!(this.canScrollX?.(1)??!0)){this.stopAutoScroll();return}this.scrollByX?.(this.autoScrollSpeed),this.onDragMove(this.lastDragClientX),this.autoScrollRAF=requestAnimationFrame(this.tickAutoScroll)}};this.columnMenu=new $t(r,n,t,o,(s,l)=>this.onAction(s,l)),this.columnMenu.setMenuCallbacks({onAutoSize:s=>{this.autoSizeColumns([s]),this.onAction("autosize",s)},onAutoSizeAll:()=>{this.autoSizeColumns(this.columnModel.getVisibleColumns().map(s=>s.colId)),this.onAction("autosize-all","")},onFitToGrid:()=>{this.fitColumnsToGrid(),this.onAction("fit-to-grid","")},onResetWidth:s=>{this.resetColumnWidth(s),this.onAction("reset-width",s)},onOpenColumnChooser:()=>{this.openColumnChooserFn?.(),this.onAction("column-chooser","")},onOpenAdvancedFilter:(s,l)=>{this.openFilterPanelFn?.(s,l),this.onAction("advanced-filter",s.colId)},onQuickFilter:s=>this.onAction("quick-filter",s),onCopyHeader:s=>{navigator.clipboard?.writeText(s.header).catch(()=>{}),this.onAction("copy-header",s.colId)},onCopyColumn:s=>this.onAction("copy-column",s.colId),onCopyValues:s=>this.onAction("copy-values",s.colId),onRename:s=>{this.startHeaderRename(s.colId),this.onAction("rename",s.colId)},onDuplicate:s=>{this.columnModel.duplicateColumn(s.colId),this.onAction("duplicate",s.colId)},onFreezePosition:s=>{this.columnModel.toggleColumnFrozen(s.colId),this.onAction("freeze",s.colId)},onLockColumn:s=>{this.columnModel.toggleColumnLocked(s.colId),this.onAction("lock",s.colId)},onResetColumn:s=>{this.colStyles.clearUserWidth(s.colId),this.columnModel.resetColumn(s.colId),this.onAction("reset-column",s.colId)},onAggregate:(s,l)=>{let a=l,c=this.columnModel.getColumn(s.colId)?.aggFunc;this.columnModel.setColumnAggFunc(s.colId,c===a?null:a),this.store.get("groupedColumnIds").length>0&&this.columnDataRefreshFn?.(),this.onAction(`aggregate-${l}`,s.colId)},onMoveLeft:s=>{let a=r.getVisibleColumns().findIndex(c=>c.colId===s);a>0&&(r.moveColumn(a,a-1),this.onAction("move",s))},onMoveRight:s=>{let l=r.getVisibleColumns(),a=l.findIndex(c=>c.colId===s);a<l.length-1&&(r.moveColumn(a,a+1),this.onAction("move",s))},onMoveStart:s=>{let a=r.getVisibleColumns().findIndex(c=>c.colId===s);a>0&&(r.moveColumn(a,0),this.onAction("move",s))},onMoveEnd:s=>{let l=r.getVisibleColumns(),a=l.findIndex(c=>c.colId===s);a<l.length-1&&(r.moveColumn(a,l.length-1),this.onAction("move",s))}}),this.boundMouseMove=this.onGlobalMouseMove.bind(this),this.boundMouseUp=this.onGlobalMouseUp.bind(this),this.eventBus.on(x.COLUMN_SORTED,s=>{let l=s;this.updateSortIndicator(l.colId,l.order)})}get isDraggingCol(){return this.isDragging}get isBusy(){return this.isDragging||this._isResizingColumn}get isResizingColumn(){return this._isResizingColumn}setScrollCallback(e,t){this.scrollByX=e,this.canScrollX=t??null}setResizeCallback(e){this.onResizeCb=e}setOpenFilterPanelCallback(e){this.openFilterPanelFn=e}setColumnChooserCallback(e){this.openColumnChooserFn=e}setColumnDataRefreshCallback(e){this.columnDataRefreshFn=e}setColumnGroupModel(e,t){this.groupModel=e,this.groupHeaderBuilder=t}setDisplayGroupEngine(e){this.displayGroupEngine=e,this.groupContextMenu=new Ut(e,this.iconRenderer),this.groupContextMenu.setCallbacks({onOpenColumnChooser:()=>{this.openColumnChooserFn?.(),this.onAction("column-chooser","")},onAction:(t,o)=>this.onAction(t,o)})}setGroupToggleCallback(e){this.onGroupToggleFn=e}setGroupResizeCallback(e){this.onGroupResizeFn=e}setGroupDragHandler(e){this.groupDragHandler=e}rebuildGroupRows(e){if(!this.groupModel||!this.groupHeaderBuilder||!this.groupModel.hasGroups())return;let t=this.groupModel.getMaxDepth(),o=e.headerRowHeight??44,r=this.buildGroupCellOptions(o),n=(i,s)=>{let l=this.groupModel.getRootNodes(s);this.groupHeaderBuilder.updateGroupRows(i,l,this.colStyles,t,r)};n(this.leftGroupRowEls,"left"),n(this.centerGroupRowEls,"center"),n(this.rightGroupRowEls,"right")}updateFilterIndicators(e){let t=[this.leftHeaderRowEl,this.centerHeaderRowEl,this.rightHeaderRowEl].filter(o=>o!==null);for(let o of t)for(let r of Array.from(o.querySelectorAll(".pg-th[data-col-id]"))){let n=r.getAttribute("data-col-id")??"",i=e.has(n);r.classList.toggle("pg-th--filter-active",i);let s=r.querySelector(".pg-th__filter-btn");if(s){s.classList.toggle("pg-th__filter-btn--active",i);let l=i?"filterActive":"filter",a=s.querySelector(".pg-icon");a&&this.iconRenderer.updateIcon(a,l)}}}buildGroupCellOptions(e){return{rowHeight:e,onCollapseToggle:t=>{this.onGroupToggleFn?.(t)},onGroupResize:(t,o)=>{this.onGroupResizeFn?.(t,o)}}}renderInPanels(e,t,o,r,n={}){let i=r.filter(a=>a.pinned==="left"),s=r.filter(a=>a.pinned!=="left"&&a.pinned!=="right"),l=r.filter(a=>a.pinned==="right");if(this.lastGroupRowHeight=n.headerRowHeight??this.lastGroupRowHeight,this.leftGroupRowEls=[],this.centerGroupRowEls=[],this.rightGroupRowEls=[],this.displayGroupEngine?.hasGroups){let a=this.displayGroupEngine,c=n.headerRowHeight??44,p=a.getDragHandler(),h={rowHeight:c,onCollapseToggle:u=>this.onGroupToggleFn?.(u),onGroupResize:(u,m)=>this.onGroupResizeFn?.(u,m),onGroupHeaderMouseDown:p?(u,m,g)=>p.onHeaderMouseDown(u,m,g):void 0,didJustDragFn:p?()=>p.didJustDrag:void 0,onGroupContextMenu:(u,m,g)=>this.groupContextMenu?.show(m,g,u.clientX,u.clientY)};this.leftGroupRowEls=a.headerBuilder.buildGroupRows(a.buildTree(i),h),this.centerGroupRowEls=a.headerBuilder.buildGroupRows(a.buildTree(s),h),this.rightGroupRowEls=a.headerBuilder.buildGroupRows(a.buildTree(l),h);for(let u of this.leftGroupRowEls)e.appendChild(u);for(let u of this.centerGroupRowEls)t.appendChild(u);for(let u of this.rightGroupRowEls)o.appendChild(u);e.style.setProperty("--pg-group-rows-count",String(this.leftGroupRowEls.length)),t.style.setProperty("--pg-group-rows-count",String(this.centerGroupRowEls.length)),o.style.setProperty("--pg-group-rows-count",String(this.rightGroupRowEls.length))}else if(this.groupModel?.hasGroups()&&this.groupHeaderBuilder){let a=this.groupModel.getMaxDepth(),c=n.headerRowHeight??44,p=this.buildGroupCellOptions(c);this.leftGroupRowEls=this.groupHeaderBuilder.buildGroupRows(this.groupModel.getRootNodes("left"),this.colStyles,a,p),this.centerGroupRowEls=this.groupHeaderBuilder.buildGroupRows(this.groupModel.getRootNodes("center"),this.colStyles,a,p),this.rightGroupRowEls=this.groupHeaderBuilder.buildGroupRows(this.groupModel.getRootNodes("right"),this.colStyles,a,p);for(let h of this.leftGroupRowEls)e.appendChild(h);for(let h of this.centerGroupRowEls)t.appendChild(h);for(let h of this.rightGroupRowEls)o.appendChild(h)}if(this.leftHeaderRowEl=this.buildHeaderRow(i,n,!0),e.appendChild(this.leftHeaderRowEl),n.showFilterRow&&e.appendChild(this.buildFilterRow(i,n,!0)),this.centerHeaderRowEl=this.buildHeaderRow(s,n,!1),n.hasGroupedColumns&&this.centerHeaderRowEl.insertBefore(this.buildAutoGroupTh(n.autoGroupColWidth??200),this.centerHeaderRowEl.firstChild),t.appendChild(this.centerHeaderRowEl),n.showFilterRow){let a=this.buildFilterRow(s,n,!1);this.centerFilterRowEl=a,n.hasGroupedColumns&&a.insertBefore(y("pg-filter-cell pg-filter-cell--auto-group"),a.firstChild),t.appendChild(a)}this.rightHeaderRowEl=this.buildHeaderRow(l,n,!1),o.appendChild(this.rightHeaderRowEl),n.showFilterRow&&o.appendChild(this.buildFilterRow(l,n,!1))}updateSortIndicator(e,t){let o=[this.leftHeaderRowEl,this.centerHeaderRowEl,this.rightHeaderRowEl].filter(r=>r!==null);for(let r of o)for(let n of Array.from(r.querySelectorAll(".pg-th[data-col-id]"))){let i=n.getAttribute("data-col-id")===e,s=n.classList.contains("pg-th--sorted");j(n,"pg-th--sort-asc",i&&t==="asc"),j(n,"pg-th--sort-desc",i&&t==="desc"),j(n,"pg-th--sorted",i&&t!==null);let l=n.querySelector(".pg-th__sort-icon");l&&(i?this.iconRenderer.updateIcon(l,t==="asc"?"sortAsc":t==="desc"?"sortDesc":"sortNone"):s&&this.iconRenderer.updateIcon(l,"sortNone"))}}updateAllChecked(e,t){this.headerCheckbox&&(this.headerCheckbox.checked=e,this.headerCheckbox.indeterminate=t&&!e)}setGroupDropZone(e){this.groupDropZone=e,this.columnMenu.setGroupCallbacks({isGrouped:t=>e.isGrouped(t),addGroup:t=>e.dropColumn(t),removeGroup:t=>e.removeColumn(t)})}destroy(){document.removeEventListener("pointermove",this.boundMouseMove),document.removeEventListener("pointerup",this.boundMouseUp),this.columnMenu.destroy(),this.groupContextMenu?.destroy(),this.leftHeaderRowEl=null,this.centerHeaderRowEl=null,this.rightHeaderRowEl=null,this.centerFilterRowEl=null,this.headerCheckbox=null,this.leftGroupRowEls=[],this.centerGroupRowEls=[],this.rightGroupRowEls=[]}updateCenterVisibleCols(e,t,o,r){if(!this.centerHeaderRowEl)return;if(this.lastGroupRowHeight=r.headerRowHeight??this.lastGroupRowHeight,this.displayGroupEngine?.hasGroups){let s=this.store.get("columns"),l=s.filter(a=>a.pinned!=="left"&&a.pinned!=="right"&&a.visible!==!1);this.rebuildGroupRowsForPanel("center",l),this.isDragging&&(this.rebuildGroupRowsForPanel("left",s.filter(a=>a.pinned==="left"&&a.visible!==!1)),this.rebuildGroupRowsForPanel("right",s.filter(a=>a.pinned==="right"&&a.visible!==!1)))}if(this.groupModel?.hasGroups()&&this.groupHeaderBuilder&&this.centerGroupRowEls.length>0){let s=this.groupModel.getMaxDepth(),l=r.headerRowHeight??44,a=this.buildGroupCellOptions(l);this.groupHeaderBuilder.updateGroupRows(this.centerGroupRowEls,this.groupModel.getRootNodes("center"),this.colStyles,s,a)}let n=this.isDragging?this.draggingColId:null,i=null;n&&(i=this.centerHeaderRowEl.querySelector(`.pg-th[data-col-id="${n}"]`),i?.remove()),this.centerHeaderRowEl.innerHTML="",r.hasGroupedColumns&&this.centerHeaderRowEl.appendChild(this.buildAutoGroupTh(r.autoGroupColWidth??200)),t>0&&this.centerHeaderRowEl.appendChild(this.makeSpacer("pg-th pg-th--h-spacer",t));for(let s=0;s<e.length;s++){let l=e[s];i&&l.colId===n?this.centerHeaderRowEl.appendChild(i):this.centerHeaderRowEl.appendChild(this.buildHeaderCell(l,s,e,r,this.centerHeaderRowEl))}if(o>0&&this.centerHeaderRowEl.appendChild(this.makeSpacer("pg-th pg-th--h-spacer",o)),!!this.centerFilterRowEl){this.centerFilterRowEl.innerHTML="",r.hasGroupedColumns&&this.centerFilterRowEl.appendChild(y("pg-filter-cell pg-filter-cell--auto-group")),t>0&&this.centerFilterRowEl.appendChild(this.makeSpacer("pg-filter-cell pg-filter-cell--h-spacer",t));for(let s of e)this.centerFilterRowEl.appendChild(this.buildFilterCell(s));o>0&&this.centerFilterRowEl.appendChild(this.makeSpacer("pg-filter-cell pg-filter-cell--h-spacer",o))}}makeSpacer(e,t){let o=y(e);return o.style.cssText=`width:${t}px;min-width:${t}px;flex-shrink:0;`,o}capturePanelDragData(){let e=(t,o)=>{if(!o)return null;let r=Array.from(o.querySelectorAll(".pg-th[data-col-id]")),i=o.closest(".pg-panel__header")?.getBoundingClientRect()??null;return!i||i.width===0?null:{panel:t,rects:r.map(s=>s.getBoundingClientRect()),colIds:r.map(s=>s.getAttribute("data-col-id")??""),bounds:i}};return[e("left",this.leftHeaderRowEl),e("center",this.centerHeaderRowEl),e("right",this.rightHeaderRowEl)].filter(t=>t!==null)}buildHeaderRow(e,t,o){let r=y("pg-header-row");r.setAttribute("role","row"),o&&(t.showSerialNumber&&r.appendChild(this.buildSerialHeaderCell()),t.showCheckboxes&&r.appendChild(this.buildCheckboxHeaderCell()));for(let n=0;n<e.length;n++)r.appendChild(this.buildHeaderCell(e[n],n,e,t,r));return r}buildAutoGroupTh(e){let t=y("pg-th pg-th--auto-group");t.setAttribute("role","columnheader"),t.style.width=`${e}px`,t.style.minWidth=`${e}px`;let o=y("pg-th__content"),r=y("pg-th__label");return r.textContent="Groups",o.appendChild(r),t.appendChild(o),t}buildCheckboxHeaderCell(){let e=y("pg-th pg-th--checkbox");e.setAttribute("role","columnheader");let t=document.createElement("input");t.type="checkbox",t.className="pg-checkbox pg-header-checkbox",t.setAttribute("aria-label","Select all rows"),this.headerCheckbox=t;let o=this.store.get("isAllSelected"),r=this.store.get("isIndeterminate");return t.checked=o,t.indeterminate=r&&!o,t.addEventListener("change",()=>{this.eventBus.emit(x.ALL_ROWS_SELECTED,{action:t.checked?"selectAll":"deselectAll"})}),e.appendChild(t),e}buildSerialHeaderCell(){let e=y("pg-th pg-th--serial");e.setAttribute("role","columnheader");let t=document.createElement("span");return t.className="pg-th__serial-label",t.textContent="#",e.appendChild(t),e}buildHeaderCell(e,t,o,r,n){let i=y("pg-th");i.setAttribute("role","columnheader"),i.setAttribute("data-col-id",e.colId),i.setAttribute("data-col-index",String(t)),i.setAttribute("tabindex","0"),this.displayGroupEngine?.hasGroups&&this.displayGroupEngine.isFlat(e.colId)&&i.classList.add("pg-th--no-group"),e.headerCssClass&&(i.className+=` ${e.headerCssClass}`),j(i,"pg-th--sortable",e.sortable!==!1),j(i,"pg-th--sorted",!!e.sortOrder),j(i,"pg-th--sort-asc",e.sortOrder==="asc"),j(i,"pg-th--sort-desc",e.sortOrder==="desc");let s=e.textAlign??(e.type==="number"||e.type==="currency"?"right":"left");s!=="left"&&i.classList.add(`pg-th--align-${s}`),s==="right"&&i.classList.add("pg-th--reverse"),e.pinned==="right"&&i.classList.add("pg-th--pinned-right");let l=$(e,"header");if(l){let a=l({colDef:e,sortOrder:e.sortOrder??null,filterActive:!!e.filterActive,api:null});typeof a=="string"?i.innerHTML=a:i.appendChild(a)}else{let a=y("pg-th__content"),c=y("pg-th__label");c.textContent=e.header,c.title=e.header,a.appendChild(c),e.sortable!==!1&&a.appendChild(this.iconRenderer.render(e.sortOrder==="asc"?"sortAsc":e.sortOrder==="desc"?"sortDesc":"sortNone",{size:14,className:"pg-th__sort-icon"})),i.appendChild(a)}if(e.filterable!==!1){let a=y("pg-th__filter-btn"),c=e.filterActive===!0;c&&a.classList.add("pg-th__filter-btn--active"),a.innerHTML=this.iconRenderer.renderToString(c?"filterActive":"filter",14),a.title="Filter column",a.setAttribute("tabindex","0"),a.setAttribute("aria-label",`Filter ${e.header}`),a.addEventListener("click",p=>{p.stopPropagation(),this.openFilterPanelFn?.(e,a)}),i.appendChild(a)}if(r.showColumnMenu!==!1){let a=y("pg-th__menu-btn");a.innerHTML=this.iconRenderer.renderToString("menuHorizontal",14),a.title="Column options",a.setAttribute("tabindex","0"),a.addEventListener("click",c=>{c.stopPropagation(),this.columnMenu.show(e,a)}),i.appendChild(a)}if(i.addEventListener("contextmenu",a=>{a.preventDefault(),a.stopPropagation(),this.columnMenu.show(e,i,a.clientX,a.clientY)}),e.resizable!==!1){let a=y("pg-th__resize-handle");a.addEventListener("pointerdown",c=>{if(c.button===0){if(c.preventDefault(),c.stopPropagation(),this.lastResizeDownColId===e.colId&&c.timeStamp-this.lastResizeDownAt<350){this.lastResizeDownColId="",this.lastResizeDownAt=0,this.autoSizeColumns([e.colId]),this.onAction("autosize",e.colId);return}this.lastResizeDownColId=e.colId,this.lastResizeDownAt=c.timeStamp,this.startResize(c,e,i)}}),i.appendChild(a)}return e.sortable!==!1&&i.addEventListener("click",a=>{if(a.target.closest(".pg-th__resize-handle, .pg-th__menu-btn, .pg-th__filter-btn"))return;let c=e.sortOrder===null?"asc":e.sortOrder==="asc"?"desc":null;c?this.sortEngine.sort(e.colId,e.field,c):this.sortEngine.clearSort(),this.columnModel.setColumnSort(e.colId,c),this.updateSortIndicator(e.colId,c),this.onAction("sort",e.colId)}),this.attachColumnDragListeners(i,e,o,n),i}buildFilterCell(e){let t=y("pg-filter-cell");if(t.setAttribute("data-col-id",e.colId),e.filterable!==!1){let o=document.createElement("input");o.type="text",o.className="pg-filter-input",o.placeholder=`${e.header}\u2026`,o.setAttribute("data-col-id",e.colId),o.addEventListener("input",r=>{this.eventBus.emit(x.COLUMN_FILTER_CHANGED,{colId:e.colId,field:e.field,term:r.target.value})}),t.appendChild(o)}return t}buildFilterRow(e,t,o){let r=y("pg-filter-row");r.setAttribute("role","row"),o&&(t.showCheckboxes&&r.appendChild(y("pg-filter-cell pg-filter-cell--checkbox")),t.showSerialNumber&&r.appendChild(y("pg-filter-cell pg-filter-cell--serial")));for(let n of e)r.appendChild(this.buildFilterCell(n));return r}attachColumnDragListeners(e,t,o,r){e.addEventListener("pointerdown",n=>{if(n.target.closest(".pg-th__resize-handle, .pg-th__menu-btn, .pg-th__filter-btn, .pg-checkbox")||t.draggable===!1||n.button!==0)return;let i=n.clientX,s=n.clientY,l=J(n),a=!1,c=0,p=()=>{c&&(clearTimeout(c),c=0),e.classList.remove("pg-th--drag-armed"),document.removeEventListener("pointermove",u),document.removeEventListener("pointerup",m)},h=()=>{a||(a=!0,c&&(clearTimeout(c),c=0),e.classList.remove("pg-th--drag-armed"),this.startColumnDrag(t,r),document.removeEventListener("pointermove",u),document.addEventListener("pointermove",this.boundMouseMove),document.addEventListener("pointerup",this.boundMouseUp),this.onDragMove(i))},u=g=>{if(a)return;let f=Math.abs(g.clientX-i),C=Math.abs(g.clientY-s);l?(f>q||C>q)&&p():f>fe&&h()},m=()=>{a||p()};document.addEventListener("pointermove",u),document.addEventListener("pointerup",m),l&&(e.classList.add("pg-th--drag-armed"),c=window.setTimeout(()=>{c=0,h()},Xe))})}startColumnDrag(e,t){this.draggingColId=e.colId,this.isDragging=!0,this.draggingPanelRowEl=t,this.draggingIsGroupable=e.groupable===!0&&this.groupDropZone!==null,this.isOverGroupZone=!1,this.dragIsHideMode=!1,this.livePanelMoveInProgress=!1,this.dragSourcePanel=t===this.leftHeaderRowEl?"left":t===this.rightHeaderRowEl?"right":"center",this.dragTargetPanel=this.dragSourcePanel,this.dragTargetLocalIdx=-1;let o=y("pg-col-drag-ghost"),r=(u,m)=>{let g=document.createElement("span");return g.className=`pg-col-drag-ghost__icon ${u}`,g.innerHTML=this.iconRenderer.renderToString(m,14),g};o.appendChild(r("pg-col-drag-ghost__icon--arrow-left","chevronLeft")),o.appendChild(r("pg-col-drag-ghost__icon--move","drag")),o.appendChild(r("pg-col-drag-ghost__icon--ban","ban")),o.appendChild(r("pg-col-drag-ghost__icon--hide","eyeOff"));let n=document.createElement("span");n.className="pg-col-drag-ghost__label",n.textContent=e.header,o.appendChild(n),o.appendChild(r("pg-col-drag-ghost__icon--arrow-right","chevronRight")),document.body.appendChild(o),this.ghostEl=o;let i=this.panelDragData.find(u=>u.panel===this.dragSourcePanel),s=t.querySelector(`[data-col-id="${e.colId}"]`);s?.classList.add("pg-th--dragging");let l=t.closest(".pg-grid");this.draggingGridEl=l,this.panelDragData=this.capturePanelDragData();let a=this.panelDragData.find(u=>u.panel===this.dragSourcePanel),c=a?.colIds.indexOf(e.colId)??-1;this.draggedColWidth=(c>=0&&a?a.rects[c].width:0)||s?.getBoundingClientRect().width||0,this.dragStartScrollX=parseFloat(l?.style.getPropertyValue("--pg-scroll-x")??"0");let p=this.panelDragData.find(u=>u.panel==="center");this.centerPanelRect=p?.bounds??null;let h=document.createElement("style");h.setAttribute("data-pg-drag",""),document.head.appendChild(h),this.dragStyleEl=h,l?.classList.add("pg-grid--col-dragging"),l?.classList.add("pg-grid--col-autoscrolling"),requestAnimationFrame(()=>requestAnimationFrame(()=>{this.isDragging&&this.draggingGridEl?.classList.remove("pg-grid--col-autoscrolling")})),document.body.style.cursor="grabbing",document.body.style.userSelect="none"}moveToPanelLive(e,t){if(this.livePanelMoveInProgress)return;this.livePanelMoveInProgress=!0;let o=this.draggingColId,n=this.panelDragData.find(a=>a.panel===e)?.colIds[t]??null,i=e==="left"?"left":e==="right"?"right":null,s=e==="left"?this.leftHeaderRowEl:e==="right"?this.rightHeaderRowEl:this.centerHeaderRowEl,l=this.draggingGridEl?.querySelector(`.pg-th[data-col-id="${o}"]`);if(l&&s){let a=Array.from(s.querySelectorAll(".pg-th[data-col-id]")),c=t<a.length?a[t]:null;if(c)s.insertBefore(l,c);else{let p=a[a.length-1];p?.nextSibling?s.insertBefore(l,p.nextSibling):s.appendChild(l)}}this.dragStyleEl&&(this.dragStyleEl.textContent=""),this.dragSourcePanel=e,this.dragTargetPanel=e,this.dragTargetLocalIdx=-1,this.columnModel.moveAndPin(o,i,n),requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!this.isDragging||this.draggingColId!==o){this.livePanelMoveInProgress=!1;return}this.draggingGridEl?.querySelector(`.pg-th[data-col-id="${o}"]`)?.classList.add("pg-th--dragging"),this.panelDragData=this.capturePanelDragData(),this.dragStartScrollX=parseFloat(this.draggingGridEl?.style.getPropertyValue("--pg-scroll-x")??"0");let a=this.panelDragData.find(c=>c.panel==="center");this.centerPanelRect=a?.bounds??null,this.livePanelMoveInProgress=!1})})}updateAutoScroll(e){if(!this.centerPanelRect||!this.scrollByX)return;let t=80,{left:o,right:r}=this.centerPanelRect,n=0;if(e<o+t){let s=-Math.round((o+t-e)/t*10);n=this.canScrollX?.(-1)??!0?s:0}else if(e>r-t){let s=Math.round((e-r+t)/t*10);n=this.canScrollX?.(1)??!0?s:0}let i=this.autoScrollSpeed!==0;this.autoScrollSpeed=n,n!==0&&!i?this.autoScrollRAF=requestAnimationFrame(this.tickAutoScroll):n===0&&i&&this.stopAutoScroll(),this.ghostEl?.classList.toggle("pg-col-drag-ghost--scroll-left",n<0),this.ghostEl?.classList.toggle("pg-col-drag-ghost--scroll-right",n>0)}stopAutoScroll(){cancelAnimationFrame(this.autoScrollRAF),this.autoScrollRAF=0,this.autoScrollSpeed=0,this.isDragging&&!this.livePanelMoveInProgress&&this.dragStyleEl&&(this.draggingGridEl?.classList.add("pg-grid--col-autoscrolling"),this.refreshDragAfterScroll(),this.draggingGridEl?.classList.remove("pg-grid--col-autoscrolling")),this.ghostEl?.classList.remove("pg-col-drag-ghost--scroll-left","pg-col-drag-ghost--scroll-right")}refreshDragAfterScroll(){if(!this.isDragging||this.livePanelMoveInProgress)return;this.dragStyleEl&&(this.dragStyleEl.textContent=""),this.draggingGridEl?.querySelector(`.pg-th[data-col-id="${this.draggingColId}"]`)?.classList.add("pg-th--dragging"),this.panelDragData=this.capturePanelDragData(),this.dragStartScrollX=parseFloat(this.draggingGridEl?.style.getPropertyValue("--pg-scroll-x")??"0");let e=this.panelDragData.find(t=>t.panel==="center");this.centerPanelRect=e?.bounds??null,this.onDragMove(this.lastDragClientX)}rebuildGroupRowsForPanel(e,t){if(!this.displayGroupEngine?.hasGroups)return;let o=e==="left"?this.leftHeaderRowEl:e==="right"?this.rightHeaderRowEl:this.centerHeaderRowEl;if(!o)return;let r=o.parentElement;if(!r)return;let n=e==="left"?this.leftGroupRowEls:e==="right"?this.rightGroupRowEls:this.centerGroupRowEls;for(let c of n)c.remove();let i=this.displayGroupEngine,s=i.getDragHandler(),l={rowHeight:this.lastGroupRowHeight,onCollapseToggle:c=>this.onGroupToggleFn?.(c),onGroupResize:(c,p)=>this.onGroupResizeFn?.(c,p),onGroupHeaderMouseDown:s?(c,p,h)=>s.onHeaderMouseDown(c,p,h):void 0,didJustDragFn:s?()=>s.didJustDrag:void 0,onGroupContextMenu:(c,p,h)=>this.groupContextMenu?.show(p,h,c.clientX,c.clientY)},a=i.headerBuilder.buildGroupRows(i.buildTree(t),l);for(let c of a)r.insertBefore(c,o);e==="left"?this.leftGroupRowEls=a:e==="right"?this.rightGroupRowEls=a:this.centerGroupRowEls=a,r.style.setProperty("--pg-group-rows-count",String(a.length))}rebuildGroupRowsWithPreview(e,t,o){let r=[...o.colIds],[n]=r.splice(t,1);r.splice(e,0,n);let i=this.store.get("columns"),s=new Map(i.map(a=>[a.colId,a])),l=r.map(a=>s.get(a)).filter(a=>a!==void 0);this.rebuildGroupRowsForPanel(this.dragSourcePanel,l)}onDragMove(e){if(!this.isDragging||!this.draggingColId||!this.panelDragData.length||!this.dragStyleEl)return;if(this.livePanelMoveInProgress){this.dragStyleEl.textContent="";return}let t=this.panelDragData.find(b=>b.bounds?e>=b.bounds.left&&e<=b.bounds.right:!1);if(t||(t=this.panelDragData.find(b=>b.panel===this.dragSourcePanel)),!t)return;this.dragTargetPanel=t.panel;let o=t.panel!==this.dragSourcePanel,r=t.panel==="center"?parseFloat(this.draggingGridEl?.style.getPropertyValue("--pg-scroll-x")??"0")-this.dragStartScrollX:0,{rects:n,colIds:i}=t,s=this.panelDragData.find(b=>b.panel===this.dragSourcePanel),l=s.colIds.indexOf(this.draggingColId);if(o){let b=i.length;for(let v=0;v<n.length;v++)if(e<n[v].right+r){b=v;break}this.moveToPanelLive(t.panel,b),this.dragStyleEl.textContent="";return}let a=l;for(let b=0;b<n.length;b++){if(b===l)continue;let v=n[b].left+r,w=n[b].right+r;if(e>=v&&e<w){a=b;break}}let c=n.length>1&&l>=0&&l<n.length;if(c&&a===l&&e<n[0].left+r&&(a=l===0?1:0),c&&a===l&&e>=n[n.length-1].right+r){let b=n.length-1;a=l===b?b-1:b}let p=this.dragTargetLocalIdx;this.dragTargetLocalIdx=a,this.displayGroupEngine?.hasGroups&&a!==p&&this.rebuildGroupRowsWithPreview(a,l,s);let h=this.draggingGridEl?.getAttribute("data-photon-grid-id")??"",u=h?`[data-photon-grid-id="${h}"] `:"",m="";if(a===l){this.dragStyleEl.textContent="";return}let g=s.rects[l],f=n[a];if(!g||!f){this.dragStyleEl.textContent="";return}let C=a>l?f.right-g.right:f.left-g.left;m+=`${u}[data-col-id="${i[l]}"] { --pg-drag-x: ${C}px; z-index: 10; position: relative; transition: none; }
4528
- `;for(let b=0;b<n.length;b++){if(b===l)continue;let v=0;a>l&&b>l&&b<=a?v=-this.draggedColWidth:a<l&&b>=a&&b<l&&(v=this.draggedColWidth),v!==0&&(m+=`${u}[data-col-id="${i[b]}"] { --pg-drag-x: ${v}px; }
4529
- `)}this.dragStyleEl.textContent=m}onGlobalMouseMove(e){if(!this.isDragging||!this.draggingPanelRowEl)return;this.ghostEl&&(this.ghostEl.style.left=`${e.clientX+14}px`,this.ghostEl.style.top=`${e.clientY}px`);let t=this.draggingGridEl?.getBoundingClientRect();if(!!t&&(e.clientX<t.left||e.clientX>t.right||e.clientY<t.top||e.clientY>t.bottom)){this.dragIsHideMode=!0,this.stopAutoScroll(),this.ghostEl?.classList.add("pg-col-drag-ghost--hide"),this.ghostEl?.classList.remove("pg-col-drag-ghost--no-drop","pg-col-drag-ghost--scroll-left","pg-col-drag-ghost--scroll-right"),this.dragStyleEl&&(this.dragStyleEl.textContent="");return}this.dragIsHideMode=!1,this.ghostEl?.classList.remove("pg-col-drag-ghost--hide");let r=this.groupDropZone?.isOver(e.clientX,e.clientY)??!1;if(r&&!this.draggingIsGroupable){this.stopAutoScroll(),this.ghostEl?.classList.add("pg-col-drag-ghost--no-drop"),document.body.style.cursor="no-drop",this.dragStyleEl&&(this.dragStyleEl.textContent="");return}if(this.ghostEl?.classList.remove("pg-col-drag-ghost--no-drop"),document.body.style.cursor="grabbing",this.draggingIsGroupable&&this.groupDropZone&&(this.groupDropZone.highlight(r),this.isOverGroupZone=r,r)){this.stopAutoScroll(),this.dragStyleEl&&(this.dragStyleEl.textContent="");return}this.lastDragClientX=e.clientX,this.updateAutoScroll(e.clientX),this.onDragMove(e.clientX)}onGlobalMouseUp(e){if(!this.isDragging){this.cleanupDrag();return}let t=this.draggingColId;if(!t){this.cleanupDrag();return}let o=this.dragSourcePanel,r=this.dragTargetPanel,n=this.dragTargetLocalIdx,i=this.panelDragData.find(u=>u.panel===r),l=this.panelDragData.find(u=>u.panel===o)?.colIds.indexOf(t)??-1,a=this.dragIsHideMode,c=this.draggingIsGroupable&&this.isOverGroupZone,h=document.elementFromPoint(e.clientX,e.clientY)?.closest("[data-group-id]")?.getAttribute("data-group-id")??null;if(this.cleanupDrag(),a){this.columnModel.setColumnVisible(t,!1);return}if(c&&this.groupDropZone){this.groupDropZone.dropColumn(t);return}if(h&&this.groupModel&&this.groupDragHandler){let u=this.groupModel.getParent(t);if(u){if(h!==u.groupId){this.groupDragHandler.createLeafClone(t,h);return}return}}if(o===r){let u=this.columnModel.getVisibleColumns(),m=u.findIndex(C=>C.colId===t);if(m===-1)return;let g=n!==-1&&i?i.colIds[n]:null,f=g?u.findIndex(C=>C.colId===g):m;if(this.columnModel.moveColumn(m,f!==-1?f:m),this.groupModel&&this.groupDragHandler&&this.groupModel.getParent(t)){let b=this.store.get("columns").filter(w=>w.visible!==!1),v=b.findIndex(w=>w.colId===t);if(v!==-1&&this.isLeafOutsideGroup(t,v,b)){let w=b[v+1]?.colId??null;this.groupDragHandler.extractLeafToSoloGroup(t,w)}}}else{let u=r==="left"?"left":r==="right"?"right":null,m=i?i.colIds[n]??null:null;this.columnModel.moveAndPin(t,u,m),this.groupModel&&this.groupDragHandler&&this.groupModel.getParent(t)&&this.groupDragHandler.extractLeafToSoloGroup(t,m)}}cleanupDrag(){this.isDragging=!1,this.livePanelMoveInProgress=!1,this.draggingIsGroupable=!1,this.isOverGroupZone=!1,this.dragIsHideMode=!1,this.groupDropZone?.highlight(!1),this.draggingPanelRowEl?.querySelector(".pg-th--dragging")?.classList.remove("pg-th--dragging"),this.ghostEl?.remove(),this.ghostEl=null,this.dragStyleEl?.remove(),this.dragStyleEl=null,this.draggingGridEl?.classList.remove("pg-grid--col-dragging","pg-grid--col-autoscrolling"),this.draggingGridEl=null,this.draggedColWidth=0,this.panelDragData=[],this.dragStartScrollX=0,this.stopAutoScroll(),this.centerPanelRect=null,this.draggingColId=null,this.dragTargetLocalIdx=-1,this.draggingPanelRowEl=null,document.body.style.cursor="",document.body.style.userSelect="",document.removeEventListener("pointermove",this.boundMouseMove),document.removeEventListener("pointerup",this.boundMouseUp)}startResize(e,t,o){let r=e.clientX,n=this.colStyles.getWidth(t.colId),i=t.pinned==="right"?-1:1,s=t.minWidth??60;document.body.style.cursor="col-resize",document.body.style.userSelect="none",this._isResizingColumn=!0;let l=!1,a=p=>{if(!l){if(Math.abs(p.clientX-r)<=2)return;l=!0,o.classList.add("pg-th--resizing"),this.colStyles.freezeFlexWidths()}this.colStyles.setWidth(t.colId,Math.max(s,n+(p.clientX-r)*i)),this.onResizeCb?.()},c=p=>{if(this._isResizingColumn=!1,o.classList.remove("pg-th--resizing"),document.body.style.cursor="",document.body.style.userSelect="",document.removeEventListener("pointermove",a),document.removeEventListener("pointerup",c),!l)return;let h=Math.max(s,n+(p.clientX-r)*i);this.colStyles.setWidth(t.colId,h),this.columnModel.setColumnWidth(t.colId,h,!0)};document.addEventListener("pointermove",a),document.addEventListener("pointerup",c)}isLeafOutsideGroup(e,t,o){if(!this.groupModel)return!1;let r=this.groupModel.getParent(e);if(!r)return!1;let n=new Set(this.groupModel.getLeavesInGroup(r.groupId).map(l=>l.colId).filter(l=>l!==e)),i=o[t-1],s=o[t+1];return!(i&&n.has(i.colId))&&!(s&&n.has(s.colId))}getGridEl(){return(this.centerHeaderRowEl??this.leftHeaderRowEl??this.rightHeaderRowEl)?.closest(".pg-grid")??null}startHeaderRename(e){let o=this.getGridEl()?.querySelector(`.pg-th[data-col-id="${e}"]`),r=o?.querySelector(".pg-th__label"),n=this.columnModel.getColumn(e);if(!o||!r||!n)return;let i=document.createElement("input");i.className="pg-th__rename-input",i.type="text",i.value=n.header,i.setAttribute("aria-label","Rename column");let s=!1,l=()=>{if(s)return;s=!0;let c=i.value.trim();c&&c!==n.header?this.columnModel.setColumnHeader(e,c):i.replaceWith(r)},a=()=>{s||(s=!0,i.replaceWith(r))};i.addEventListener("keydown",c=>{c.stopPropagation(),c.key==="Enter"?(c.preventDefault(),l()):c.key==="Escape"&&(c.preventDefault(),a())}),i.addEventListener("blur",l),i.addEventListener("mousedown",c=>c.stopPropagation()),i.addEventListener("click",c=>c.stopPropagation()),r.replaceWith(i),i.focus(),i.select()}measureColumnContentWidth(e,t){let o=e.ownerDocument.createElement("span");o.style.cssText="position:absolute;top:-9999px;left:-9999px;visibility:hidden;white-space:nowrap;pointer-events:none;padding:0 12px;",e.appendChild(o),o.textContent=t.header??"";let r=o.offsetWidth+24,n=e.querySelectorAll(`.pg-cell[data-col-id="${t.colId}"]`);for(let l=0;l<n.length;l++){o.textContent=n[l].textContent??"";let a=o.offsetWidth+24;a>r&&(r=a)}o.remove();let i=t.minWidth??40,s=t.maxWidth??1/0;return Math.round(Math.min(s,Math.max(i,r)))}autoSizeColumns(e){let t=this.getGridEl();if(!t)return;let o=[];for(let r of e){let n=this.columnModel.getColumn(r);n&&o.push([r,this.measureColumnContentWidth(t,n)])}o.length!==0&&(this.colStyles.setWidths(o),this.columnModel.setColumnWidths(o))}fitColumnsToGrid(){let e=this.getGridEl();if(!e)return;let o=e.querySelector(".pg-panel--center .pg-panel__body")?.clientWidth??0;if(o<=0)return;let r=this.columnModel.getVisibleColumns().filter(a=>a.pinned!=="left"&&a.pinned!=="right");if(r.length===0)return;let n=r.reduce((a,c)=>a+this.colStyles.getWidth(c.colId),0)||1,i=[],s=0;for(let a of r){let c=a.minWidth??40,p=a.maxWidth??1/0,h=Math.min(p,Math.max(c,Math.round(this.colStyles.getWidth(a.colId)/n*o)));i.push([a.colId,h]),s+=h}let l=o-s;if(l!==0){let a=r[r.length-1],c=a.minWidth??40,p=a.maxWidth??1/0,h=i[i.length-1];i[i.length-1]=[h[0],Math.min(p,Math.max(c,h[1]+l))]}this.colStyles.setWidths(i),this.columnModel.setColumnWidths(i)}resetColumnWidth(e){this.colStyles.clearUserWidth(e),this.columnModel.resetColumnWidth(e)}onAction(e,t){this.eventBus.emit(x.COLUMNS_STATE_CHANGED,{action:e,colId:t,states:this.columnModel.getColumnStates()})}};var Ze=class{constructor(e,t){this.columnModel=e;this.iconRenderer=t;this.overlayEl=null;this.dialogEl=null;this.treeEl=null;this.columns=[];this.expanded=new Set;this.searchTerm="";this.boundKeydown=o=>{o.key==="Escape"&&this.close()},this.boundOutsideDown=o=>{this.dialogEl&&!this.dialogEl.contains(o.target)&&this.close()}}open(e){this.columns=e,this.close(),this.expanded.clear(),this.collectGroupIds(e,this.expanded),this.build(),document.addEventListener("keydown",this.boundKeydown),setTimeout(()=>{this.overlayEl&&document.addEventListener("mousedown",this.boundOutsideDown,!0)},0)}close(){document.removeEventListener("keydown",this.boundKeydown),document.removeEventListener("mousedown",this.boundOutsideDown,!0),this.overlayEl?.remove(),this.overlayEl=null,this.dialogEl=null,this.treeEl=null}destroy(){this.close()}build(){let e=document,t=e.createElement("div");t.className="pg-col-chooser__overlay";let o=e.createElement("div");o.className="pg-col-chooser",o.setAttribute("role","dialog"),o.setAttribute("aria-modal","true"),o.setAttribute("aria-label","Choose columns");let r=e.createElement("div");r.className="pg-col-chooser__header";let n=e.createElement("span");n.className="pg-col-chooser__title",n.textContent="Choose Columns";let i=e.createElement("button");i.className="pg-col-chooser__close",i.type="button",i.setAttribute("aria-label","Close"),i.innerHTML=this.iconRenderer.renderToString("close",16),i.addEventListener("click",()=>this.close()),r.append(n,i);let s=e.createElement("div");s.className="pg-col-chooser__search";let l=e.createElement("span");l.className="pg-col-chooser__search-icon",l.innerHTML=this.iconRenderer.renderToString("search",14);let a=e.createElement("input");a.className="pg-col-chooser__search-input",a.type="text",a.placeholder="Search\u2026",a.setAttribute("aria-label","Search columns"),a.addEventListener("input",()=>{this.searchTerm=a.value.trim().toLowerCase(),this.renderTree()}),s.append(l,a);let c=e.createElement("div");c.className="pg-col-chooser__body";let p=e.createElement("div");p.className="pg-col-chooser__tree",p.setAttribute("role","tree"),c.appendChild(p),this.treeEl=p,o.append(r,s,c),t.appendChild(o),e.body.appendChild(t),this.overlayEl=t,this.dialogEl=o,this.renderTree(),a.focus()}renderTree(){if(!this.treeEl)return;this.treeEl.textContent="";let e=document.createDocumentFragment();for(let t of this.columns){let o=this.buildNode(t);o&&e.appendChild(o)}if(!e.childNodes.length){let t=document.createElement("div");t.className="pg-col-chooser__empty",t.textContent="No columns match your search.",e.appendChild(t)}this.treeEl.appendChild(e)}buildNode(e){return Array.isArray(e.children)&&e.children.length>0?this.buildGroupNode(e):this.buildLeafNode(e)}buildGroupNode(e){if(this.searchTerm&&!this.groupMatches(e))return null;let t=this.groupId(e),o=this.searchTerm?!0:this.expanded.has(t),r=document.createElement("div");r.className="pg-col-chooser__group";let n=this.makeRow();n.classList.add("pg-col-chooser__row--group");let i=document.createElement("button");i.type="button",i.className="pg-col-chooser__toggle",i.setAttribute("aria-label",o?"Collapse group":"Expand group"),i.innerHTML=this.iconRenderer.renderToString(o?"chevronDown":"chevronRight",14),i.addEventListener("click",c=>{c.stopPropagation(),this.expanded.has(t)?this.expanded.delete(t):this.expanded.add(t),this.renderTree()});let{checkbox:s,state:l}=this.makeGroupCheckbox(e),a=this.makeLabel(e.header??t);if(n.append(i,s,a),a.addEventListener("click",()=>this.setGroupVisible(e,l!=="all")),r.appendChild(n),o){let c=document.createElement("div");c.className="pg-col-chooser__children",c.setAttribute("role","group");for(let p of e.children){let h=this.buildNode(p);h&&c.appendChild(h)}r.appendChild(c)}return r}buildLeafNode(e){let t=this.resolveLeaf(e);if(!t||this.searchTerm&&!(t.header??"").toLowerCase().includes(this.searchTerm))return null;let o=this.makeRow();o.classList.add("pg-col-chooser__row--leaf");let r=document.createElement("span");r.className="pg-col-chooser__toggle pg-col-chooser__toggle--spacer";let n=t.visible!==!1,i=this.makeCheckbox(n,!1,!!t.alwaysVisible),s=this.makeLabel(t.header??t.colId),l=()=>{t.alwaysVisible||(this.columnModel.setColumnVisible(t.colId,t.visible===!1),this.renderTree())};return i.addEventListener("click",l),s.addEventListener("click",l),o.append(r,i,s),o}makeRow(){let e=document.createElement("div");return e.className="pg-col-chooser__row",e.setAttribute("role","treeitem"),e}makeLabel(e){let t=document.createElement("span");return t.className="pg-col-chooser__label",t.textContent=e,t.title=e,t}makeCheckbox(e,t,o){let r=document.createElement("span");return r.className="pg-col-chooser__checkbox",r.setAttribute("role","checkbox"),r.tabIndex=o?-1:0,r.setAttribute("aria-checked",t?"mixed":String(e)),e&&r.classList.add("pg-col-chooser__checkbox--checked"),t&&r.classList.add("pg-col-chooser__checkbox--indeterminate"),o&&r.classList.add("pg-col-chooser__checkbox--disabled"),r.innerHTML=this.iconRenderer.renderToString("check",12),r}makeGroupCheckbox(e){let t=this.groupLeaves(e),o=t.filter(i=>i.visible!==!1).length,r=o===0?"none":o===t.length?"all":"some",n=this.makeCheckbox(r==="all",r==="some",!1);return n.addEventListener("click",i=>{i.stopPropagation(),this.setGroupVisible(e,r!=="all")}),{checkbox:n,state:r}}setGroupVisible(e,t){for(let o of this.groupLeaves(e))o.alwaysVisible||this.columnModel.setColumnVisible(o.colId,t);this.renderTree()}groupLeaves(e){let t=[],o=r=>{if(Array.isArray(r.children)&&r.children.length>0)r.children.forEach(o);else{let n=this.resolveLeaf(r);n&&t.push(n)}};return e.children?.forEach(o),t}resolveLeaf(e){if(e.colId){let t=this.columnModel.getColumn(e.colId);if(t)return t}if(e.field)return this.columnModel.getAllColumns().find(t=>t.field===e.field)}groupMatches(e){return!this.searchTerm||(e.header??"").toLowerCase().includes(this.searchTerm)?!0:this.groupLeaves(e).some(t=>(t.header??"").toLowerCase().includes(this.searchTerm))}groupId(e){return e.colId??e.header??""}collectGroupIds(e,t){for(let o of e)Array.isArray(o.children)&&o.children.length>0&&(t.add(this.groupId(o)),this.collectGroupIds(o.children,t))}};var Y={_el:null,get(){if(!Y._el){let d=document.createElement("div");d.className="pg-sparkline-tooltip",d.setAttribute("role","tooltip"),d.setAttribute("aria-live","polite"),document.body.appendChild(d),Y._el=d}return Y._el},show(d,e,t,o,r){let n=Y.get();if(n.innerHTML="",r&&t!==void 0){let s=document.createElement("div");s.className="pg-sparkline-tooltip__label",s.textContent=t,n.appendChild(s)}let i=document.createElement("div");i.className="pg-sparkline-tooltip__value",i.textContent=mn(o),n.appendChild(i),Y._position(n,d,e)},showOHLC(d,e,t,o){let r=Y.get();if(r.innerHTML="",o&&t.label!==void 0){let i=document.createElement("div");i.className="pg-sparkline-tooltip__label",i.textContent=t.label,r.appendChild(i)}let n=[["O",t.open],["H",t.high],["L",t.low],["C",t.close]];for(let[i,s]of n){let l=document.createElement("div");l.className="pg-sparkline-tooltip__ohlc-row";let a=document.createElement("span");a.className="pg-sparkline-tooltip__ohlc-key",a.textContent=i;let c=document.createElement("span");c.className="pg-sparkline-tooltip__value",c.textContent=mn(s),l.appendChild(a),l.appendChild(c),r.appendChild(l)}Y._position(r,d,e)},hide(){Y._el&&(Y._el.className="pg-sparkline-tooltip pg-sparkline-tooltip--hidden")},_position(d,e,t){d.className="pg-sparkline-tooltip";let o=d.offsetWidth||80,r=d.offsetHeight||40,n=window.innerWidth,i=window.innerHeight,s=e+14;s+o>n-8&&(s=e-o-14);let l=t-Math.round(r/2);l<4&&(l=4),l+r>i-4&&(l=i-r-4),d.style.left=`${s}px`,d.style.top=`${l}px`}};function mn(d){if(!isFinite(d))return"\u2014";let e=Math.abs(d);return e>=1e6?(d/1e6).toFixed(1)+"M":e>=1e3?(d/1e3).toFixed(1)+"K":d!==Math.floor(d)?d.toFixed(2):String(d)}function qt(d,e,t){return getComputedStyle(d).getPropertyValue(e).trim()||t}function Ui(d,e){let t=d.replace("#","");if(t.length!==6)return d;let o=parseInt(t.slice(0,2),16),r=parseInt(t.slice(2,4),16),n=parseInt(t.slice(4,6),16);return`rgba(${o},${r},${n},${e})`}var Je=class{constructor(e,t,o){let r=e.getContext("2d");if(!r)throw new Error("[PhotonGrid] SparklineRenderer: failed to get 2D context");this.canvas=e,this.ctx=r,this.cfg=this._resolveConfig(o),this.rawData=t,this.isOHLC=this.cfg.type==="candlestick"||this.cfg.type==="ohlc",this.hasLabels=this._rawHasLabels(t,this.cfg),this.isOHLC?(this.ohlcPoints=this._parseOHLC(t),this.points=[]):(this.points=this._parsePoints(t),this.ohlcPoints=[]),this._syncSize(),this._onMouseMove=this._handleMouseMove.bind(this),this._onMouseLeave=this._handleMouseLeave.bind(this),this.cfg.showTooltip&&(this.canvas.addEventListener("mousemove",this._onMouseMove),this.canvas.addEventListener("mouseleave",this._onMouseLeave)),this._draw()}redraw(){this.isOHLC?this.ohlcPoints=this._parseOHLC(this.rawData):this.points=this._parsePoints(this.rawData),this._syncSize(),this._draw()}destroy(){this.canvas.removeEventListener("mousemove",this._onMouseMove),this.canvas.removeEventListener("mouseleave",this._onMouseLeave),Y.hide()}_syncSize(){let e=window.devicePixelRatio||1,t=this.canvas.clientWidth,o=this.canvas.clientHeight;this.canvas.width=Math.round(t*e),this.canvas.height=Math.round(o*e),this.ctx.setTransform(e,0,0,e,0,0)}_resolveConfig(e){let t=this.canvas,o=qt(t,"--pg-primary","#2563eb"),r=qt(t,"--pg-colors-error","#ef4444"),n=qt(t,"--pg-colors-success","#22c55e"),i=e.stroke??o,s=e.positiveColor??i,l=e.fill??"";return l||(i.startsWith("#")&&i.length===7?l=Ui(i,.18):l=i),{type:e.type??"line",stroke:i,fill:l,lineWidth:e.lineWidth??1.5,showMarkers:e.showMarkers??!1,markerSize:e.markerSize??2.5,markerFill:e.markerFill??i,padding:e.padding??3,barSpacing:e.barSpacing??.15,positiveColor:s,negativeColor:e.negativeColor??r,bullColor:e.bullColor??n,bearColor:e.bearColor??r,showTooltip:e.showTooltip??!0,xKey:e.xKey??"",yKey:e.yKey??"value",openKey:e.openKey??"open",highKey:e.highKey??"high",lowKey:e.lowKey??"low",closeKey:e.closeKey??"close"}}_rawHasLabels(e,t){return!Array.isArray(e)||e.length===0?!1:typeof e[0]=="object"&&e[0]!==null&&!!t.xKey}_parsePoints(e){return!Array.isArray(e)||e.length===0?[]:e.map((t,o)=>{if(typeof t=="number")return{index:o,value:t};if(typeof t=="object"&&t!==null){let r=t,n=Number(r[this.cfg.yKey]??0),i=this.cfg.xKey?String(r[this.cfg.xKey]??o):void 0;return{index:o,value:isFinite(n)?n:0,label:i}}return{index:o,value:Number(t)||0}})}_parseOHLC(e){return!Array.isArray(e)||e.length===0?[]:e.map((t,o)=>{let r=typeof t=="object"&&t!==null?t:{},n=s=>{let l=Number(r[s]??0);return isFinite(l)?l:0},i=this.cfg.xKey?String(r[this.cfg.xKey]??o):void 0;return{index:o,open:n(this.cfg.openKey),high:n(this.cfg.highKey),low:n(this.cfg.lowKey),close:n(this.cfg.closeKey),label:i}})}_draw(){let{ctx:e}=this,t=this.canvas.clientWidth,o=this.canvas.clientHeight;switch(e.clearRect(0,0,t,o),this.cfg.type){case"line":this._drawLine(t,o);break;case"area":this._drawArea(t,o);break;case"column":this._drawColumn(t,o);break;case"bar":this._drawBar(t,o);break;case"win-loss":this._drawWinLoss(t,o);break;case"candlestick":this._drawCandlestick(t,o);break;case"ohlc":this._drawOHLC(t,o);break}}_drawLine(e,t){let o=this.points;if(o.length<2)return;let{ctx:r,cfg:n}=this,{pad:i,plotW:s,plotH:l,plotLeft:a,plotTop:c,minV:p,range:h}=this._plotMetrics(e,t,o);r.beginPath(),r.strokeStyle=n.stroke,r.lineWidth=n.lineWidth,r.lineJoin="round",r.lineCap="round";for(let u=0;u<o.length;u++){let m=this._xPos(u,o.length,a,s),g=this._yPos(o[u].value,p,h,c,l);u===0?r.moveTo(m,g):r.lineTo(m,g)}r.stroke(),n.showMarkers&&this._drawMarkers(o,a,c,s,l,p,h)}_drawArea(e,t){let o=this.points;if(o.length<2)return;let{ctx:r,cfg:n}=this,{plotW:i,plotH:s,plotLeft:l,plotTop:a,plotBottom:c,minV:p,range:h}=this._plotMetrics(e,t,o);r.beginPath();for(let g=0;g<o.length;g++){let f=this._xPos(g,o.length,l,i),C=this._yPos(o[g].value,p,h,a,s);g===0?r.moveTo(f,C):r.lineTo(f,C)}let u=this._xPos(o.length-1,o.length,l,i),m=this._xPos(0,o.length,l,i);r.lineTo(u,c),r.lineTo(m,c),r.closePath(),r.fillStyle=n.fill,r.fill(),r.beginPath(),r.strokeStyle=n.stroke,r.lineWidth=n.lineWidth,r.lineJoin="round",r.lineCap="round";for(let g=0;g<o.length;g++){let f=this._xPos(g,o.length,l,i),C=this._yPos(o[g].value,p,h,a,s);g===0?r.moveTo(f,C):r.lineTo(f,C)}r.stroke(),n.showMarkers&&this._drawMarkers(o,l,a,i,s,p,h)}_drawColumn(e,t){let o=this.points;if(o.length===0)return;let{ctx:r,cfg:n}=this,{plotW:i,plotH:s,plotLeft:l,plotTop:a,minV:c,range:p}=this._plotMetrics(e,t,o),h=o.length,u=i/h,m=u*n.barSpacing,g=Math.max(1,u-m),f=this._yPos(0,c,p,a,s);for(let C of o){let b=l+C.index*u+m/2,v=this._yPos(C.value,c,p,a,s),w=Math.min(v,f),E=Math.max(1,Math.abs(v-f));r.fillStyle=C.value>=0?n.positiveColor:n.negativeColor,r.fillRect(b,w,g,E)}}_drawBar(e,t){let o=this.points;if(o.length===0)return;let{ctx:r,cfg:n}=this,i=n.padding,s=t-i*2,l=e-i*2,a=i,c=i,p=Math.min(...o.map(v=>v.value),0),u=Math.max(...o.map(v=>v.value),0)-p||1,m=o.length,g=s/m,f=g*n.barSpacing,C=Math.max(1,g-f),b=c+(0-p)/u*l;for(let v of o){let w=a+v.index*g+f/2,E=c+(v.value-p)/u*l,R=Math.min(E,b),I=Math.max(1,Math.abs(E-b));r.fillStyle=v.value>=0?n.positiveColor:n.negativeColor,r.fillRect(R,w,I,C)}}_drawWinLoss(e,t){let o=this.points;if(o.length===0)return;let{ctx:r,cfg:n}=this,i=n.padding,s=i,l=t-i*2,a=i,c=e-i*2,p=o.length,h=c/p,u=h*n.barSpacing,m=Math.max(1,h-u),g=s+l/2,f=Math.max(1,l/2-1);for(let C of o){let b=a+C.index*h+u/2;C.value>0?(r.fillStyle=n.positiveColor,r.fillRect(b,g-f,m,f)):C.value<0?(r.fillStyle=n.negativeColor,r.fillRect(b,g,m,f)):(r.fillStyle=qt(this.canvas,"--pg-colors-border","#e2e8f0"),r.fillRect(b,g-1,m,2))}}_drawCandlestick(e,t){let o=this.ohlcPoints;if(o.length===0)return;let{ctx:r,cfg:n}=this,i=this._ohlcMetrics(e,t,o),{plotLeft:s,plotTop:l,plotW:a,plotH:c,minV:p,range:h,bandW:u,gap:m}=i;for(let g of o){let C=g.close>=g.open?n.bullColor:n.bearColor,b=s+g.index*u+u/2,v=this._yPos(g.high,p,h,l,c),w=this._yPos(g.low,p,h,l,c),E=this._yPos(g.open,p,h,l,c),R=this._yPos(g.close,p,h,l,c),I=Math.min(E,R),S=Math.max(1,Math.abs(R-E)),T=Math.max(2,u-m);r.strokeStyle=C,r.lineWidth=1,r.beginPath(),r.moveTo(b,v),r.lineTo(b,w),r.stroke(),r.fillStyle=C,r.fillRect(b-T/2,I,T,S)}}_drawOHLC(e,t){let o=this.ohlcPoints;if(o.length===0)return;let{ctx:r,cfg:n}=this,i=this._ohlcMetrics(e,t,o),{plotLeft:s,plotTop:l,plotW:a,plotH:c,minV:p,range:h,bandW:u}=i,m=Math.max(2,Math.min(4,u*.35));for(let g of o){let C=g.close>=g.open?n.bullColor:n.bearColor,b=s+g.index*u+u/2,v=this._yPos(g.high,p,h,l,c),w=this._yPos(g.low,p,h,l,c),E=this._yPos(g.open,p,h,l,c),R=this._yPos(g.close,p,h,l,c);r.strokeStyle=C,r.lineWidth=Math.max(1,u*.15),r.lineCap="square",r.beginPath(),r.moveTo(b,v),r.lineTo(b,w),r.stroke(),r.beginPath(),r.moveTo(b-m,E),r.lineTo(b,E),r.stroke(),r.beginPath(),r.moveTo(b,R),r.lineTo(b+m,R),r.stroke()}}_drawMarkers(e,t,o,r,n,i,s){let{ctx:l,cfg:a}=this;l.fillStyle=a.markerFill;for(let c=0;c<e.length;c++){let p=this._xPos(c,e.length,t,r),h=this._yPos(e[c].value,i,s,o,n);l.beginPath(),l.arc(p,h,a.markerSize,0,Math.PI*2),l.fill()}}_plotMetrics(e,t,o){let r=this.cfg.padding,n=r,i=r,s=e-r,l=t-r,a=s-n,c=l-i,p=o.map(g=>g.value),h=Math.min(...p,0),u=Math.max(...p,0),m=u-h||1;return{pad:r,plotLeft:n,plotTop:i,plotRight:s,plotBottom:l,plotW:a,plotH:c,minV:h,maxV:u,range:m}}_ohlcMetrics(e,t,o){let r=this.cfg.padding,n=r,i=r,s=e-r,l=t-r,a=s-n,c=l-i,p=o.map(v=>v.high),h=o.map(v=>v.low),u=Math.min(...h),m=Math.max(...p),g=m-u||1,f=o.length,C=a/Math.max(f,1),b=C*this.cfg.barSpacing;return{plotLeft:n,plotTop:i,plotRight:s,plotBottom:l,plotW:a,plotH:c,minV:u,maxV:m,range:g,bandW:C,gap:b}}_xPos(e,t,o,r){return t===1?o+r/2:o+e/(t-1)*r}_yPos(e,t,o,r,n){return r+(1-(e-t)/o)*n}_handleMouseMove(e){let t=this.canvas.getBoundingClientRect(),o=window.devicePixelRatio||1,r=e.clientX-t.left,n=this.canvas.clientWidth,i=this.canvas.clientHeight;this.isOHLC?this._showOHLCTooltip(r,n,i,e.clientX,e.clientY):this._showPointTooltip(r,n,i,e.clientX,e.clientY)}_showPointTooltip(e,t,o,r,n){let i=this.points;if(i.length===0)return;let s=this.cfg.padding,l=s,a=t-s*2,c;if(i.length===1)c=0;else{let h=a/(i.length-1),u=Math.round((e-l)/h);c=Math.max(0,Math.min(i.length-1,u))}let p=i[c];p&&Y.show(r,n,p.label,p.value,this.hasLabels)}_showOHLCTooltip(e,t,o,r,n){let i=this.ohlcPoints;if(i.length===0)return;let s=this.cfg.padding,l=s,c=(t-s*2)/i.length,p=Math.floor((e-l)/c),h=Math.max(0,Math.min(i.length-1,p)),u=i[h];u&&Y.showOHLC(r,n,u,this.hasLabels)}_handleMouseLeave(){Y.hide()}};var Qe=class{renderCell(e){let{row:t,colDef:o,rowIndex:r,colIndex:n,api:i}=e,s=this.resolveValue(t.data,o.field),l=y("pg-cell");l.setAttribute("data-row-index",String(r)),l.setAttribute("data-col-index",String(n)),l.setAttribute("data-col-id",o.colId),l.setAttribute("data-field",o.field),l.setAttribute("role","gridcell"),l.setAttribute("tabindex","-1"),j(l,"pg-cell--selected",t.selected);let a=o.textAlign??(o.type==="number"||o.type==="currency"?"right":"left");if(a!=="left"&&l.classList.add(`pg-cell--align-${a}`),o.cellCssClass)if(typeof o.cellCssClass=="string")l.classList.add(o.cellCssClass);else{let h=o.cellCssClass({value:s,rawValue:s,row:t.data,colDef:o,rowIndex:r,colIndex:n,api:i});h&&l.classList.add(h)}let c=y("pg-cell__inner"),p=$(o,"display");if(p){let h={value:s,rawValue:s,row:t.data,colDef:o,rowIndex:r,colIndex:n,api:i},u=p(h);typeof u=="string"?c.innerHTML=u:c.appendChild(u)}else o.renderHtml?c.innerHTML=String(s??""):c.appendChild(this.renderDefaultCell(s,o,e));return l.appendChild(c),l}renderCheckboxCell(e,t){let o=y("pg-cell pg-cell--checkbox");o.setAttribute("data-row-index",String(t)),o.setAttribute("role","gridcell");let r=document.createElement("input");return r.type="checkbox",r.className="pg-checkbox",r.checked=e.selected,r.setAttribute("aria-label","Select row"),r.setAttribute("data-node-id",e.nodeId),o.appendChild(r),o}renderSerialNumberCell(e,t){let o=y("pg-cell pg-cell--serial");o.setAttribute("data-row-index",String(e)),o.setAttribute("role","gridcell");let r=document.createElement("span");return r.className="pg-cell__serial",r.textContent=String(t),o.appendChild(r),o}updateCellSelection(e,t){j(e,"pg-cell--range-selected",t)}updateCellActive(e,t){j(e,"pg-cell--active",t)}renderDefaultCell(e,t,o){let r=document.createElement("span");switch(r.className="pg-cell__value",t.type){case"boolean":{let n=!!e;r.innerHTML=n?o.iconRenderer.renderToString("check",14):"",r.classList.add(n?"pg-cell--bool-true":"pg-cell--bool-false");break}case"image":{if(e){let n=document.createElement("img");n.src=String(e),n.className="pg-cell__image",n.style.cssText="width:32px;height:32px;object-fit:cover;border-radius:4px;",n.alt="",r.appendChild(n)}break}case"dropdown":case"object":{let n=t.type==="object"?this.resolveObjectKey(e,t):e,i=t.dropdownOptions?.find(s=>String(s.value)===String(n??""));if(i?.color){let s=y("pg-badge");s.style.backgroundColor=i.color+"20",s.style.color=i.color,s.textContent=i.label,r.appendChild(s)}else r.textContent=i?.label??String(n??"");break}case"array":{let n=Array.isArray(e)?e.map(String):[];r.className="pg-cell__value pg-cell__value--tags";let i=n.slice(0,3);for(let s of i){let l=t.dropdownOptions?.find(c=>String(c.value)===s),a=y("pg-badge");a.textContent=l?.label??s,l?.color&&(a.style.backgroundColor=l.color+"20",a.style.color=l.color),r.appendChild(a)}if(n.length>i.length){let s=y("pg-badge pg-badge--overflow");s.textContent=`+${n.length-i.length}`,r.appendChild(s)}break}case"sparkline":{r.className="pg-cell__value pg-cell__value--sparkline";let n=y("pg-sparkline-wrapper"),i=document.createElement("canvas");i.className="pg-sparkline",i.setAttribute("aria-hidden","true"),n.appendChild(i),r.appendChild(n);let s=t.sparkline??{};requestAnimationFrame(()=>{if(!i.isConnected)return;let l=i.clientWidth,a=i.clientHeight;l>0&&a>0&&(i._pgSparkline=new Je(i,e,s))});break}default:{let n=Q(e,t,{locale:o.locale,dateFormat:o.dateFormat,timeZone:o.timeZone,currencySymbol:o.currencySymbol});r.textContent=n??"",r.title=n??"";break}}return r}resolveValue(e,t){let o=t.split("."),r=e;for(let n of o){if(r==null)return;r=r[n]}return r}resolveObjectKey(e,t){if(typeof e=="object"&&e!==null){let o=t.objectValueKey??"value";return e[o]}return e}};function fn(d,e,t,o,r,n){if(!o||e.type!=="data"||t.colId!==o.toggleColumnId)return;d.classList.add("pg-cell--tree-toggle-col");let i=d.querySelector(".pg-cell__inner");if(!e.hasChildren){let a=y("pg-tree-toggle-spacer");i?d.insertBefore(a,i):d.insertBefore(a,d.firstChild);return}let s=o.isExpandedFn(e.nodeId),l=y("pg-tree-toggle");l.setAttribute("role","button"),l.setAttribute("data-tree-toggle",""),l.setAttribute("aria-label",s?"Collapse":"Expand"),l.appendChild(r.render(s?"chevronDown":"chevronRight",{size:16})),i?d.insertBefore(l,i):d.insertBefore(l,d.firstChild),l.addEventListener("click",a=>{a.stopPropagation(),n.emit(x.TREE_NODE_TOGGLE_CLICKED,{row:e,colDef:t})})}function vn(d,e,t,o){if(!t||e.type!=="data")return;let r=d.querySelector(".pg-tree-toggle");if(!r)return;let n=t.isExpandedFn(e.nodeId),i=r.querySelector(".pg-icon");i&&o.updateIcon(i,n?"chevronDown":"chevronRight"),r.setAttribute("aria-label",n?"Collapse":"Expand")}var bn={colId:"__group__",field:"__group__",header:"Group",type:"string",editable:!1},et=class{constructor(e,t,o,r){this.store=e;this.eventBus=t;this.iconRenderer=o;this.rowSelectionEngine=r;this.cellRenderer=new Qe;this.renderedRowMap=new Map;this.leftContent=null;this.centerContent=null;this.rightContent=null;this.lastCenterStart=-1;this.lastCenterEnd=-1;this.leftSticky=null;this.centerSticky=null;this.rightSticky=null;this.stuckNodeIds=new Set;this.hoverPanels=[];this.hoveredNodeId=null;this.pointerX=0;this.pointerY=0;this.pointerInside=!1}setPanels(e,t,o){this.leftContent=e,this.centerContent=t,this.rightContent=o;let r=[e,t,o].filter(i=>i!==null);this.hoverPanels=r;let n=i=>i instanceof HTMLElement?i.closest("[data-node-id]")?.getAttribute("data-node-id")??null:null;for(let i of r)i.addEventListener("mousemove",s=>{this.pointerX=s.clientX,this.pointerY=s.clientY,this.pointerInside=!0,this.setHoveredRow(n(s.target))}),i.addEventListener("mouseleave",s=>{let l=s.relatedTarget;l instanceof Node&&r.some(a=>a.contains(l))||(this.pointerInside=!1,this.setHoveredRow(null))})}setHoveredRow(e){if(e!==this.hoveredNodeId){if(this.hoveredNodeId)for(let t of this.hoverPanels)t.querySelectorAll(`[data-node-id="${this.hoveredNodeId}"]`).forEach(o=>o.classList.remove("pg-row--hover"));if(this.hoveredNodeId=e,e)for(let t of this.hoverPanels)t.querySelectorAll(`[data-node-id="${e}"]`).forEach(o=>o.classList.add("pg-row--hover"))}}refreshHoverAtPointer(){if(!this.pointerInside)return;let e=document.elementFromPoint(this.pointerX,this.pointerY),t=e instanceof HTMLElement?e.closest("[data-node-id]")?.getAttribute("data-node-id")??null:null;this.setHoveredRow(t)}setStickyContainers(e,t,o){this.leftSticky=e,this.centerSticky=t,this.rightSticky=o}setStickyRows(e){let t=new Set(e.map(r=>r.nodeId));for(let r of this.stuckNodeIds){if(t.has(r))continue;let n=this.renderedRowMap.get(r);if(n){n.left&&(n.left.style.top="",n.left.style.zIndex="",this.leftContent?.appendChild(n.left)),n.center&&(n.center.style.top="",n.center.style.zIndex="",this.centerContent?.appendChild(n.center)),n.right&&(n.right.style.top="",n.right.style.zIndex="",this.rightContent?.appendChild(n.right));for(let i of[n.left,n.center,n.right])i?.classList.remove("pg-row--sticky")}}this.stuckNodeIds=t;let o=e.length;e.forEach(({nodeId:r,top:n},i)=>{let s=this.renderedRowMap.get(r);if(!s)return;let l=String(o-i);s.left&&this.leftSticky&&(s.left.style.top=`${n}px`,s.left.style.zIndex=l,this.leftSticky.appendChild(s.left)),s.center&&this.centerSticky&&(s.center.style.top=`${n}px`,s.center.style.zIndex=l,this.centerSticky.appendChild(s.center)),s.right&&this.rightSticky&&(s.right.style.top=`${n}px`,s.right.style.zIndex=l,this.rightSticky.appendChild(s.right));for(let a of[s.left,s.center,s.right])a?.classList.add("pg-row--sticky")})}renderRows(e,t,o,r,n={}){let i=n.centerColStart??0,s=i+o.length;if(i!==this.lastCenterStart||s!==this.lastCenterEnd){this.lastCenterStart=i,this.lastCenterEnd=s,this.centerContent&&(this.centerContent.innerHTML="");for(let g of this.renderedRowMap.values())g.center=null}let l=new Set(e.map(g=>g.nodeId));for(let[g,f]of this.renderedRowMap)l.has(g)||(f.left?.remove(),f.center?.remove(),f.right?.remove(),this.renderedRowMap.delete(g));let a=document.createDocumentFragment(),c=document.createDocumentFragment(),p=document.createDocumentFragment(),h=n.totalCenterCols??o.length,u=t.length+i,m=t.length+h;for(let g=0;g<e.length;g++){let f=e[g],C=f.rowIndex,b=this.renderedRowMap.get(f.nodeId);if(b&&(f.type==="group"||f.type==="group-footer")&&f.aggregatedValues&&(b.left?.remove(),b.center?.remove(),b.right?.remove(),this.renderedRowMap.delete(f.nodeId),b=void 0),!(b&&f.type==="detail"))if(b&&b.center!==null)this.updatePanelRow(b,f,C,n);else if(b){this.updatePanelRow(b,f,C,n);let v=this.buildSingleRow(f,C,"center",o,u,n);b.center=v,c.appendChild(v)}else{let v=this.buildPanelRow(f,C,t,o,r,u,m,n);this.renderedRowMap.set(f.nodeId,v),v.left&&a.appendChild(v.left),v.center&&c.appendChild(v.center),v.right&&p.appendChild(v.right)}}this.leftContent&&this.leftContent.appendChild(a),this.centerContent?.appendChild(c),this.rightContent&&this.rightContent.appendChild(p),this.refreshHoverAtPointer()}updateRowSelection(e,t){let o=this.renderedRowMap.get(e);if(!o)return;let r=[o.left,o.center,o.right].filter(n=>n!==null);for(let n of r){j(n,"pg-row--selected",t);let i=n.querySelector(".pg-checkbox");i&&(i.checked=t)}}syncCenterRange(e,t){this.lastCenterStart=e,this.lastCenterEnd=t}clear(){for(let e of this.renderedRowMap.values())e.left?.remove(),e.center?.remove(),e.right?.remove();this.renderedRowMap.clear(),this.lastCenterStart=-1,this.lastCenterEnd=-1}invalidateRowsByNodeId(e){for(let t of e){let o=this.renderedRowMap.get(t);o&&(o.left?.remove(),o.center?.remove(),o.right?.remove(),this.renderedRowMap.delete(t))}}destroy(){this.clear()}buildPanelRow(e,t,o,r,n,i,s,l){if(e.type==="detail")return{left:null,center:null,right:null};let a=!!(this.leftContent&&(l.showCheckboxes||l.showSerialNumber||o.length>0)),c=!!(this.rightContent&&n.length>0),p=a?this.buildSingleRow(e,t,"left",o,0,l):null,h=this.buildSingleRow(e,t,"center",r,i,l),u=c?this.buildSingleRow(e,t,"right",n,s,l):null;return{left:p,center:h,right:u}}buildSingleRow(e,t,o,r,n,i){let s=y(this.getRowClass(e,t,i));if(s.setAttribute("role","row"),s.setAttribute("data-node-id",e.nodeId),s.setAttribute("data-row-index",String(e.rowIndex)),s.setAttribute("data-panel",o),e.type==="group"||e.type==="group-footer"){if(s.setAttribute("data-level",String(e.level)),o==="center"){let l=i.centerLeftSpacerW??0;if(l>0){let a=y("pg-cell--h-spacer");a.style.cssText=`width:${l}px;min-width:${l}px;flex-shrink:0;`,s.appendChild(a)}e.type==="group"?this.buildGroupRowContent(s,e,i):this.buildGroupFooterContent(s,e,i)}if(this.buildGroupAggregateCells(s,e,r,n,i),o==="center"){let l=i.centerRightSpacerW??0;if(l>0){let a=y("pg-cell--h-spacer");a.style.cssText=`width:${l}px;min-width:${l}px;flex-shrink:0;`,s.appendChild(a)}}return this.attachRowListeners(s,e,r,n,i),s}if(i.treeData&&e.type==="data"&&s.setAttribute("data-level",String(e.level)),o==="left"&&(i.showSerialNumber&&s.appendChild(this.cellRenderer.renderSerialNumberCell(e.rowIndex,t+1)),i.showCheckboxes&&s.appendChild(this.cellRenderer.renderCheckboxCell(e,e.rowIndex))),o==="center"){let l=i.centerLeftSpacerW??0;if(l>0){let a=y("pg-cell--h-spacer");a.style.cssText=`width:${l}px;min-width:${l}px;flex-shrink:0;`,s.appendChild(a)}i.showGroupsColumn&&this.buildLeafGroupCell(s,e,i)}for(let l=0;l<r.length;l++){let a=this.cellRenderer.renderCell({row:e,colDef:r[l],rowIndex:e.rowIndex,colIndex:n+l,iconRenderer:this.iconRenderer,dateFormat:i.dateFormat,timeZone:i.timeZone,currencySymbol:i.currencySymbol,locale:i.locale,api:i.api??null});if(i.showVerticalBorders&&a.classList.add("pg-cell--v-border"),r[l].rowDrag&&e.type!=="summary"){let c=y("pg-row-drag-handle");c.setAttribute("data-row-drag",""),c.setAttribute("data-drag-label",String(e.data[r[l].field]??"")),c.innerHTML=this.iconRenderer.renderToString("drag",14);let p=a.querySelector(".pg-cell__inner");p?p.insertBefore(c,p.firstChild):a.insertBefore(c,a.firstChild)}this.applyMasterDetailToggle(a,e,r[l],i),fn(a,e,r[l],i.treeData,this.iconRenderer,this.eventBus),s.appendChild(a)}if(o==="center"){let l=i.centerRightSpacerW??0;if(l>0){let a=y("pg-cell--h-spacer");a.style.cssText=`width:${l}px;min-width:${l}px;flex-shrink:0;`,s.appendChild(a)}}return this.attachRowListeners(s,e,r,n,i),s}buildLeafGroupCell(e,t,o){let r=o.autoGroupColWidth??200,n=o.leafGroupColDef;if(!n){let s=y("pg-cell pg-cell--auto-group-spacer");s.style.width=`${r}px`,s.style.minWidth=`${r}px`,e.appendChild(s);return}let i=this.cellRenderer.renderCell({row:t,colDef:n,rowIndex:t.rowIndex,colIndex:-1,iconRenderer:this.iconRenderer,dateFormat:o.dateFormat,timeZone:o.timeZone,currencySymbol:o.currencySymbol,locale:o.locale,api:o.api??null});i.setAttribute("data-col-index","-1"),i.setAttribute("data-col-id","__group__"),i.style.width=`${r}px`,i.style.minWidth=`${r}px`,i.style.flex="none",e.appendChild(i)}buildGroupRowContent(e,t,o){let r=y("pg-cell pg-row-group__cell");r.setAttribute("data-row-index",String(t.rowIndex)),r.setAttribute("data-col-index","-1"),r.setAttribute("data-col-id","__group__"),r.setAttribute("role","gridcell");let n=o.autoGroupColWidth??200;r.style.width=`${n}px`,r.style.minWidth=`${n}px`,r.style.flex="none";let i=y("pg-row-group__toggle");i.setAttribute("role","button"),i.setAttribute("aria-label",t.expanded?"Collapse group":"Expand group");let s=this.iconRenderer.render(t.expanded?"chevronDown":"chevronRight",{size:16});i.appendChild(s);let l=y("pg-row-group__label"),a=o.allLeafColumns?.find(p=>p.field===t.groupField),c=a?$(a,"group"):void 0;if(a&&c){let p=c({row:t,colDef:a,groupValue:t.groupValue,childCount:t.childCount??0,collapsed:!t.expanded,api:null});typeof p=="string"?l.innerHTML=p:l.appendChild(p)}else l.textContent=t.groupValue+" ("+t.childCount+")";r.appendChild(i),r.appendChild(l),e.appendChild(r),i.addEventListener("click",p=>{p.stopPropagation(),this.eventBus.emit(x.ROW_GROUP_OPENED,{groupKey:t.groupKey})})}buildGroupFooterContent(e,t,o){let r=y("pg-cell pg-row-group__cell");r.setAttribute("data-row-index",String(t.rowIndex)),r.setAttribute("data-col-index","-1"),r.setAttribute("data-col-id","__group__"),r.setAttribute("role","gridcell");let n=o.autoGroupColWidth??200;r.style.width=`${n}px`,r.style.minWidth=`${n}px`,r.style.flex="none";let i=y("pg-row-group__label");i.textContent=`\u03A3 ${String(t.groupValue??"")}`,r.appendChild(i),e.appendChild(r)}buildGroupAggregateCells(e,t,o,r,n){let i=t.aggregatedValues;for(let s=0;s<o.length;s++){let l=o[s],c=(l.type==="currency"||l.type==="number")&&l.aggFunc!=null&&i?i[l.field]:void 0,p=c!=null,h=y(p?"pg-cell pg-cell--agg":"pg-cell");if(h.setAttribute("data-row-index",String(t.rowIndex)),h.setAttribute("data-col-index",String(r+s)),h.setAttribute("data-col-id",l.colId),h.setAttribute("role","gridcell"),p){let u=l.textAlign??"right";u!=="left"&&h.classList.add(`pg-cell--align-${u}`),n.showVerticalBorders&&h.classList.add("pg-cell--v-border");let m=y("pg-cell__inner"),g=$(l,"summary");if(g){let f=g({colDef:l,value:c,aggregation:l.aggFunc,label:l.summaryLabel,api:null});typeof f=="string"?m.innerHTML=f:m.appendChild(f)}else{let f=document.createElement("span");f.className="pg-cell__value",f.textContent=this.formatAggValue(c,l,n),m.appendChild(f)}h.appendChild(m)}e.appendChild(h)}}formatAggValue(e,t,o){if(t.aggFunc==="count")return String(typeof e=="number"?Math.round(e):e??"");let r=typeof e=="number"?e:parseFloat(String(e??""));return isFinite(r)&&Q(r,t,{locale:o.locale,currencySymbol:o.currencySymbol,dateFormat:o.dateFormat,timeZone:o.timeZone})||"\u2014"}updatePanelRow(e,t,o,r){let n=this.getRowClass(t,o,r),i=[e.left,e.center,e.right].filter(l=>l!==null),s=String(t.rowIndex);for(let l of i){l.className=n,l.setAttribute("data-row-index",s),t.type==="group"&&l.setAttribute("data-level",String(t.level)),r.treeData&&t.type==="data"&&l.setAttribute("data-level",String(t.level));let a=l.querySelectorAll(".pg-cell[data-row-index]");for(let c of a)c.setAttribute("data-row-index",s)}if(r.showSerialNumber&&e.left){let l=e.left.querySelector(".pg-cell__serial");l&&(l.textContent=String(o+1))}if((t.type==="group"||t.type==="group-footer")&&e.center){let l=e.center.querySelector(".pg-row-group__toggle");if(l){let a=l.querySelector(".pg-icon");a&&this.iconRenderer.updateIcon(a,t.expanded?"chevronDown":"chevronRight"),l.setAttribute("aria-label",t.expanded?"Collapse group":"Expand group")}}if(t.type==="data"&&r.masterDetail){let l=r.masterDetail.isExpandedFn(t.nodeId);for(let a of i){let c=a.querySelector(".pg-detail-toggle");if(!c)continue;let p=c.querySelector(".pg-icon");p&&this.iconRenderer.updateIcon(p,l?"chevronDown":"chevronRight"),c.setAttribute("aria-label",l?"Collapse detail":"Expand detail")}}if(t.type==="data"&&r.treeData)for(let l of i)vn(l,t,r.treeData,this.iconRenderer)}applyMasterDetailToggle(e,t,o,r){let n=r.masterDetail;if(!n||t.type!=="data"||o.colId!==n.toggleColumnId||!n.hasDetailFn(t.data))return;let i=n.isExpandedFn(t.nodeId),s=y("pg-detail-toggle");s.setAttribute("role","button"),s.setAttribute("data-detail-toggle",""),s.setAttribute("aria-label",i?"Collapse detail":"Expand detail"),s.appendChild(this.iconRenderer.render(i?"chevronDown":"chevronRight",{size:16}));let l=e.querySelector(".pg-cell__inner");l?e.insertBefore(s,l):e.insertBefore(s,e.firstChild),s.addEventListener("click",a=>{a.stopPropagation(),this.eventBus.emit(x.ROW_DETAIL_TOGGLE_CLICKED,{row:t,colDef:o})})}attachRowListeners(e,t,o,r,n){e.addEventListener("click",i=>{if(i.target.closest(".pg-checkbox")){i.stopPropagation(),this.rowSelectionEngine.toggleRowSelection(t.nodeId,this.store.get("allRows"));return}this.eventBus.emit(x.ROW_CLICKED,{row:t,event:i,rowIndex:t.rowIndex})}),e.addEventListener("dblclick",i=>{this.eventBus.emit(x.ROW_DOUBLE_CLICKED,{row:t,event:i,rowIndex:t.rowIndex})}),e.addEventListener("pointerdown",i=>{if(i.button!==0||i.target.closest("[data-detail-toggle]"))return;let s=i.target.closest("[data-col-index][data-col-id]");if(!s)return;let l=Number(s.getAttribute("data-col-index")),a=s.getAttribute("data-col-id")??"",c=o.find(h=>h.colId===a)??(a==="__group__"?t.type==="data"?n.leafGroupColDef??null:bn:null);if(!c)return;let p=h=>{this.eventBus.emit(x.CELL_CLICKED,{row:t,colDef:c,value:null,rowIndex:t.rowIndex,colIndex:l,event:h})};if(J(i)){let h=i.clientX,u=i.clientY,m=()=>{document.removeEventListener("pointerup",g),document.removeEventListener("pointercancel",m)},g=f=>{m(),Math.abs(f.clientX-h)<=q&&Math.abs(f.clientY-u)<=q&&p(f)};document.addEventListener("pointerup",g),document.addEventListener("pointercancel",m);return}p(i)}),e.addEventListener("contextmenu",i=>{let s=i.target.closest("[data-col-index][data-col-id]");if(!s)return;i.preventDefault();let l=Number(s.getAttribute("data-col-index"));this.eventBus.emit(x.CELL_CONTEXT_MENU,{row:t,rowIndex:t.rowIndex,colIndex:l,x:i.clientX,y:i.clientY,event:i})}),e.addEventListener("dblclick",i=>{let s=i.target.closest("[data-col-index][data-col-id]");if(!s)return;let l=Number(s.getAttribute("data-col-index")),a=s.getAttribute("data-col-id")??"",c=o.find(p=>p.colId===a)??(a==="__group__"?t.type==="data"?n.leafGroupColDef??null:bn:null);c&&this.eventBus.emit(x.CELL_DOUBLE_CLICKED,{row:t,colDef:c,value:null,rowIndex:t.rowIndex,colIndex:l,event:i})})}getRowClass(e,t,o){let r=["pg-row"];return e.selected&&r.push("pg-row--selected"),e.type==="group"&&r.push("pg-row--group"),e.type==="group-footer"&&r.push("pg-row--group-footer"),e.type==="detail"&&r.push("pg-row--detail"),o.treeData&&e.type==="data"&&r.push("pg-row--tree"),e.isTreeFiller&&r.push("pg-row--tree-filler"),o.rowShading&&t%2===1&&r.push("pg-row--alt"),e.cssClass&&r.push(e.cssClass),r.join(" ")}};var jt=64,yn=24,Xt=class{constructor(e,t,o){this.store=e;this.eventBus=t;this.iconRenderer=o;this.ghostEl=null;this.draggingNodeId=null;this.dragLabel="";this.isDragging=!1;this.gridEl=null;this.bodyWrapEl=null;this.targetNodeId=null;this.targetPosition="before";this.treeModeActive=!1;this.treeReparentHandler=null;this.scrollFn=null;this.autoScrollRAF=null;this.cursorX=0;this.cursorY=0;this.boundMouseDown=this.onMouseDown.bind(this),this.boundMouseMove=this.onMouseMove.bind(this),this.boundMouseUp=this.onMouseUp.bind(this)}mount(e,t,o){this.gridEl=e,this.bodyWrapEl=t,this.scrollFn=o,t.addEventListener("pointerdown",this.boundMouseDown,!0)}setTreeMode(e,t){this.treeModeActive=e,this.treeReparentHandler=t}destroy(){this.bodyWrapEl?.removeEventListener("pointerdown",this.boundMouseDown,!0),this.cleanup(),this.gridEl=null,this.bodyWrapEl=null,this.scrollFn=null}onMouseDown(e){if(e.button!==0)return;let t=e.target.closest("[data-row-drag]");if(!t)return;e.preventDefault(),e.stopPropagation();let r=t.closest("[data-node-id]")?.getAttribute("data-node-id");if(!r)return;let i=this.store.get("visibleRows").find(s=>s.nodeId===r);!i||i.type==="group"||i.type==="summary"||(this.dragLabel=t.getAttribute("data-drag-label")??"",this.startDrag(r,e))}startDrag(e,t){this.draggingNodeId=e,this.isDragging=!0,this.cursorX=t.clientX,this.cursorY=t.clientY,this.bodyWrapEl?.querySelectorAll(".pg-row--hover").forEach(s=>s.classList.remove("pg-row--hover"));let o=y("pg-row-drag-ghost"),r=document.createElement("span");r.className="pg-row-drag-ghost__icon pg-row-drag-ghost__icon--drag",r.innerHTML=this.iconRenderer.renderToString("drag",14);let n=document.createElement("span");n.className="pg-row-drag-ghost__icon pg-row-drag-ghost__icon--block",n.innerHTML=this.iconRenderer.renderToString("ban",14);let i=document.createElement("span");i.className="pg-row-drag-ghost__label",i.textContent=this.dragLabel||"Row",o.appendChild(r),o.appendChild(n),o.appendChild(i),o.style.left=`${t.clientX}px`,o.style.top=`${t.clientY}px`,document.body.appendChild(o),this.ghostEl=o,this.setDraggingClass(e,!0),this.gridEl?.classList.add("pg-grid--row-dragging"),document.addEventListener("pointermove",this.boundMouseMove),document.addEventListener("pointerup",this.boundMouseUp),document.body.style.userSelect="none",document.body.style.cursor="grabbing",this.startAutoScrollLoop()}onMouseMove(e){this.isDragging&&(this.cursorX=e.clientX,this.cursorY=e.clientY,this.ghostEl&&(this.ghostEl.style.left=`${e.clientX}px`,this.ghostEl.style.top=`${e.clientY}px`),this.updateDropTarget())}updateDropTarget(){if(!this.bodyWrapEl||!this.draggingNodeId)return;let e=this.bodyWrapEl.getBoundingClientRect();if(this.cursorX<e.left||this.cursorX>e.right||this.cursorY<e.top||this.cursorY>e.bottom){this.ghostEl?.classList.add("pg-row-drag-ghost--outside"),this.targetNodeId!==null&&(this.targetNodeId=null,this.clearDragTops());return}this.ghostEl?.classList.remove("pg-row-drag-ghost--outside");let o=this.getScrollTop(),r=this.cursorY-e.top+o,i=this.store.get("visibleRows").filter(p=>p.type!=="group"&&p.type!=="summary"&&p.nodeId!==this.draggingNodeId),s=null,l="before";for(let p of i)if(r>=p.top&&r<p.top+p.height){s=p,l=this.classifyDropPosition(r-p.top,p.height);break}if(!s&&i.length>0){let p=i[0],h=i[i.length-1];r<p.top?(s=p,l="before"):r>=h.top+h.height&&(s=h,l="after")}let a=s?.nodeId??null,c=l;(a!==this.targetNodeId||c!==this.targetPosition)&&(this.targetNodeId=a,this.targetPosition=c,this.targetNodeId?this.treeModeActive?this.updateTreeDropHighlight():this.updateRowTops():this.clearDragTops())}updateTreeDropHighlight(){if(this.bodyWrapEl?.querySelectorAll(".pg-row--drop-target").forEach(t=>t.classList.remove("pg-row--drop-target","pg-row--drop-inside","pg-row--drop-before","pg-row--drop-after")),!this.targetNodeId)return;this.bodyWrapEl?.querySelectorAll(`[data-node-id="${this.targetNodeId}"]`)?.forEach(t=>{t.classList.add("pg-row--drop-target",`pg-row--drop-${this.targetPosition}`)})}classifyDropPosition(e,t){if(!this.treeModeActive)return e<t/2?"before":"after";let o=t/3;return e<o?"before":e>t-o?"after":"inside"}onMouseUp(e){if(!this.isDragging){this.cleanup();return}let t=this.draggingNodeId,o=this.targetNodeId,r=this.targetPosition;this.cleanupInteraction(),t&&o&&t!==o&&this.treeModeActive&&this.treeReparentHandler?(this.treeReparentHandler(t,o,r),this.cleanupVisuals()):t&&o&&t!==o?(this.reorderRows(t,o,r==="inside"?"after":r),requestAnimationFrame(()=>requestAnimationFrame(()=>this.cleanupVisuals()))):this.cleanupVisuals()}startAutoScrollLoop(){this.autoScrollRAF===null&&(this.autoScrollRAF=requestAnimationFrame(()=>this.autoScrollTick()))}autoScrollTick(){if(this.autoScrollRAF=null,!this.isDragging||!this.bodyWrapEl||!this.scrollFn)return;let e=this.bodyWrapEl.getBoundingClientRect(),t=this.cursorY-e.top,o=e.bottom-this.cursorY,r=0;t>=0&&t<jt?r=-yn*Math.pow(1-t/jt,2):o>=0&&o<jt&&(r=yn*Math.pow(1-o/jt,2)),r!==0&&(this.scrollFn(r),this.updateDropTarget()),this.isDragging&&(this.autoScrollRAF=requestAnimationFrame(()=>this.autoScrollTick()))}updateRowTops(){if(!this.draggingNodeId||!this.targetNodeId){this.clearDragTops();return}let t=[...this.store.get("visibleRows")],o=t.findIndex(l=>l.nodeId===this.draggingNodeId);if(o===-1){this.clearDragTops();return}let[r]=t.splice(o,1),n=t.findIndex(l=>l.nodeId===this.targetNodeId);if(n===-1){this.clearDragTops();return}this.targetPosition==="after"&&n++,t.splice(Math.max(0,n),0,r);let i="",s=0;for(let l of t)Math.abs(s-l.top)>.5&&(i+=`.pg-grid--row-dragging .pg-row[data-node-id="${l.nodeId}"]{top:${s}px;}
4530
- `),s+=l.height;this.getOrCreateTopStyle().textContent=i,this.renumberSerialCells(t)}clearDragTops(){let e=document.querySelector("style[data-pg-row-drag-tops]");e&&(e.textContent=""),this.bodyWrapEl?.querySelectorAll(".pg-row--drop-target").forEach(t=>t.classList.remove("pg-row--drop-target","pg-row--drop-inside","pg-row--drop-before","pg-row--drop-after")),this.renumberSerialCells(this.store.get("visibleRows"))}renumberSerialCells(e){if(!this.bodyWrapEl)return;let t=new Map,o=[];if(this.bodyWrapEl.querySelectorAll(".pg-cell--serial").forEach(n=>{let i=n.closest("[data-node-id]")?.getAttribute("data-node-id"),s=n.querySelector(".pg-cell__serial");if(!i||!s||t.has(i))return;let l=parseInt(s.textContent??"",10);Number.isNaN(l)||(t.set(i,s),o.push(l))}),t.size===0)return;o.sort((n,i)=>n-i);let r=0;for(let n of e){let i=t.get(n.nodeId);i&&(i.textContent=String(o[r++]))}}getOrCreateTopStyle(){let e=document.querySelector("style[data-pg-row-drag-tops]");return e||(e=document.createElement("style"),e.setAttribute("data-pg-row-drag-tops",""),document.head.appendChild(e)),e}reorderRows(e,t,o){let r=[...this.store.get("allRows")],n=[...this.store.get("visibleRows")],i=h=>{let u=h.findIndex(f=>f.nodeId===e);if(u===-1)return h;let[m]=h.splice(u,1),g=h.findIndex(f=>f.nodeId===t);return g===-1?(h.splice(u,0,m),h):(o==="after"&&g++,h.splice(Math.max(0,g),0,m),h)},s=i(n),l=i(r),a=0;for(let h=0;h<s.length;h++)s[h]={...s[h],rowIndex:h,top:a},a+=s[h].height;let c=s.find(h=>h.nodeId===e),p=s.find(h=>h.nodeId===t);c&&p&&this.eventBus.emit(x.ROW_DROP,{draggedRows:[c],targetRow:p,position:o}),this.store.set("allRows",l),this.store.set("visibleRows",s)}getScrollTop(){let e=this.gridEl?.style.getPropertyValue("--pg-scroll-y")??"0px";return-parseFloat(e)||0}setDraggingClass(e,t){this.bodyWrapEl?.querySelectorAll(`[data-node-id="${e}"]`).forEach(o=>o.classList.toggle("pg-row--row-dragging",t))}cleanupInteraction(){this.autoScrollRAF!==null&&(cancelAnimationFrame(this.autoScrollRAF),this.autoScrollRAF=null),this.draggingNodeId&&this.setDraggingClass(this.draggingNodeId,!1),this.ghostEl?.remove(),this.ghostEl=null,this.draggingNodeId=null,this.targetNodeId=null,this.isDragging=!1,document.body.style.userSelect="",document.body.style.cursor="",document.removeEventListener("pointermove",this.boundMouseMove),document.removeEventListener("pointerup",this.boundMouseUp)}cleanupVisuals(){this.gridEl?.classList.remove("pg-grid--row-dragging"),this.clearDragTops()}cleanup(){this.cleanupInteraction(),this.cleanupVisuals()}};var tt=class{constructor(e,t,o){this.eventBus=e;this.iconRenderer=t;this.paginationEngine=o;this.footerEl=null;this.pageInfoEl=null;this.pageInputEl=null}render(e,t={}){this.footerEl=y("pg-footer");let o=t.footerHeight??44;if(this.footerEl.style.height=`${o}px`,t.showPagination&&this.footerEl.appendChild(this.buildPaginationControls()),t.showRowCount){let r=y("pg-footer__row-count");this.pageInfoEl=r,this.footerEl.appendChild(r)}return this.updatePaginationState(),e.appendChild(this.footerEl),this.footerEl}updatePaginationState(){if(!this.footerEl)return;let e=this.getConfig(),t=this.paginationEngine.getTotalPages(),{start:o,end:r}=this.paginationEngine.getPageRange(),n=this.footerEl.querySelector(".pg-pagination__info");n&&(n.textContent=`${o}\u2013${r} of ${e.totalRows??0}`),this.pageInputEl&&(this.pageInputEl.value=String(e.page),this.pageInputEl.max=String(t));let i=this.footerEl.querySelector('[data-action="first"]'),s=this.footerEl.querySelector('[data-action="prev"]'),l=this.footerEl.querySelector('[data-action="next"]'),a=this.footerEl.querySelector('[data-action="last"]'),c=this.paginationEngine.isFirstPage(),p=this.paginationEngine.isLastPage();i&&(i.disabled=c),s&&(s.disabled=c),l&&(l.disabled=p),a&&(a.disabled=p)}destroy(){this.footerEl?.remove(),this.footerEl=null,this.pageInfoEl=null,this.pageInputEl=null}buildPaginationControls(){let e=y("pg-pagination"),t=this.buildNavButton("first","pageFirst","First page"),o=this.buildNavButton("prev","pagePrev","Previous page"),r=y("pg-pagination__info");r.textContent="\u2014";let n=document.createElement("input");n.type="number",n.min="1",n.className="pg-pagination__page-input",n.setAttribute("aria-label","Page number"),this.pageInputEl=n,n.addEventListener("change",()=>{let a=parseInt(n.value,10);isNaN(a)||(this.paginationEngine.goToPage(a),this.updatePaginationState(),this.eventBus.emit(x.PAGE_CHANGED,{page:a,pageSize:this.getConfig().pageSize,totalRows:this.getConfig().totalRows??0,totalPages:this.paginationEngine.getTotalPages()}))});let i=this.buildNavButton("next","pageNext","Next page"),s=this.buildNavButton("last","pageLast","Last page"),l=this.buildPageSizeSelect();return e.appendChild(l),e.appendChild(t),e.appendChild(o),e.appendChild(r),e.appendChild(n),e.appendChild(i),e.appendChild(s),e}buildNavButton(e,t,o){let r=document.createElement("button");return r.className=`pg-pagination__btn pg-pagination__btn--${e}`,r.setAttribute("data-action",e),r.setAttribute("aria-label",o),r.setAttribute("type","button"),r.appendChild(this.iconRenderer.render(t,{size:16})),r.addEventListener("click",()=>{switch(e){case"first":this.paginationEngine.goToFirstPage();break;case"prev":this.paginationEngine.goToPreviousPage();break;case"next":this.paginationEngine.goToNextPage();break;case"last":this.paginationEngine.goToLastPage();break}this.updatePaginationState();let n=this.getConfig();this.eventBus.emit(x.PAGE_CHANGED,{page:n.page,pageSize:n.pageSize,totalRows:n.totalRows??0,totalPages:this.paginationEngine.getTotalPages()})}),r}buildPageSizeSelect(){let e=y("pg-pagination__size"),t=document.createElement("span");t.textContent="Rows per page:",t.className="pg-pagination__size-label";let o=document.createElement("select");o.className="pg-pagination__size-select";let r=this.getConfig();for(let n of r.pageSizeOptions){let i=document.createElement("option");i.value=String(n),i.textContent=String(n),i.selected=n===r.pageSize,o.appendChild(i)}return o.addEventListener("change",()=>{let n=parseInt(o.value,10);this.paginationEngine.setPageSize(n),this.updatePaginationState()}),e.appendChild(t),e.appendChild(o),e}getConfig(){return{enabled:!0,page:this.paginationEngine.getCurrentPage(),pageSize:this.paginationEngine.getPageSize(),pageSizeOptions:[10,25,50,100,1e3,1e4,1e5],serverSide:!1,totalRows:this.paginationEngine.getTotalRows()}}};var ot=class{constructor(e){this.iconRenderer=e;this.loadingEl=null;this.noRowsEl=null;this.containerEl=null}mount(e){this.containerEl=e}showLoading(e="Loading\u2026"){if(this.hideNoRows(),this.loadingEl)return;let t=y("pg-overlay pg-overlay--loading");t.setAttribute("role","status"),t.setAttribute("aria-live","polite");let o=this.iconRenderer.render("loading",{size:32,spin:!0,className:"pg-overlay__spinner"});this.iconRenderer.injectSpinKeyframes();let r=y("pg-overlay__text");r.textContent=e,t.appendChild(o),t.appendChild(r),this.loadingEl=t,this.containerEl?.appendChild(t)}hideLoading(){this.loadingEl?.remove(),this.loadingEl=null}showNoRows(e,t="No rows to show"){if(this.hideLoading(),this.noRowsEl)return;let o=y("pg-overlay pg-overlay--no-rows");if(o.setAttribute("role","status"),e)o.innerHTML=e;else{let r=this.iconRenderer.render("info",{size:32,className:"pg-overlay__icon"}),n=y("pg-overlay__text");n.textContent=t,o.appendChild(r),o.appendChild(n)}this.noRowsEl=o,this.containerEl?.appendChild(o)}hideNoRows(){this.noRowsEl?.remove(),this.noRowsEl=null}hideAll(){this.hideLoading(),this.hideNoRows()}destroy(){this.hideAll(),this.containerEl=null}};var Yt=class{constructor(){this.styleEl=null;this.widths=new Map;this.flexCols=new Map;this.userResizedWidths=new Map;this.scopePrefix=""}mount(){this.styleEl||(this.styleEl=document.createElement("style"),this.styleEl.setAttribute("data-pg-col-widths",""),document.head.appendChild(this.styleEl))}setScopeId(e){this.scopePrefix=e?`[data-photon-grid-id="${e}"] `:"",this.flush()}initFromColumns(e){let t=this.widths;this.widths=new Map,this.flexCols.clear();for(let o of e)if(this.userResizedWidths.has(o.colId))this.widths.set(o.colId,this.userResizedWidths.get(o.colId));else if(o.flex!=null){let r=o.minWidth??80;this.flexCols.set(o.colId,{flex:o.flex,minWidth:r});let n=t.get(o.colId);this.widths.set(o.colId,n!=null?Math.max(r,n):r)}else this.widths.set(o.colId,o.width??o.minWidth??150);this.flush()}resolveFlex(e,t){if(t<=0)return;let o=e.filter(s=>this.flexCols.has(s));if(o.length===0)return;let r=e.filter(s=>!this.flexCols.has(s)).reduce((s,l)=>s+(this.widths.get(l)??150),0),n=Math.max(0,t-r),i=o.reduce((s,l)=>s+(this.flexCols.get(l)?.flex??1),0);for(let s of o){let l=this.flexCols.get(s),a=Math.max(l.minWidth,Math.floor(l.flex/i*n));this.widths.set(s,a)}this.flush()}hasFlex(e){return e.some(t=>this.flexCols.has(t))}setWidth(e,t){this.userResizedWidths.set(e,t),this.flexCols.delete(e),this.widths.set(e,t),this.flush()}setWidths(e){if(e.length!==0){for(let[t,o]of e)this.userResizedWidths.set(t,o),this.flexCols.delete(t),this.widths.set(t,o);this.flush()}}clearUserWidth(e){this.userResizedWidths.delete(e)}freezeFlexWidths(){if(this.flexCols.size!==0){for(let[e,t]of this.flexCols){let o=this.widths.get(e)??t.minWidth;this.userResizedWidths.set(e,o)}this.flexCols.clear(),this.flush()}}getWidth(e){return this.widths.get(e)??150}getTotalWidth(e){return e.reduce((t,o)=>t+(this.widths.get(o)??150),0)}flush(){if(!this.styleEl)return;let e=[];for(let[t,o]of this.widths)e.push(`${this.scopePrefix}[data-col-id="${t}"] { width: ${o}px; min-width: ${o}px; max-width: ${o}px; flex-shrink: 0; }`);this.styleEl.textContent=e.join(`
4531
- `)}destroy(){this.styleEl?.remove(),this.styleEl=null,this.widths.clear(),this.flexCols.clear(),this.userResizedWidths.clear()}};var Kt=class{constructor(){this.styleEl=null}mount(){this.styleEl=document.createElement("style"),this.styleEl.setAttribute("data-pg-row-positions",""),document.head.appendChild(this.styleEl)}update(e,t=!1){if(!this.styleEl)return;let o=[];for(let r of e)t?o.push(`.pg-row[data-node-id="${r.nodeId}"]{top:${r.top}px;min-height:${r.height}px;}`):o.push(`.pg-row[data-node-id="${r.nodeId}"]{top:${r.top}px;height:${r.height}px;}`);this.styleEl.textContent=o.join("")}destroy(){this.styleEl?.remove(),this.styleEl=null}};var Zt=class{constructor(){this.scrollTop=0;this.scrollLeft=0;this.totalHeight=0;this.totalCenterWidth=0;this.viewportHeight=0;this.centerViewportWidth=0;this.gridEl=null;this.sbVNativeEl=null;this.sbVSpacerEl=null;this.sbHNativeEl=null;this.sbHSpacerEl=null;this.sbHRowEl=null;this.panPointerId=null;this.panStartX=0;this.panStartY=0;this.panLastX=0;this.panLastY=0;this.panLastT=0;this.panScrollStartLeft=0;this.panScrollStartTop=0;this.panMoved=!1;this.panCaptureEl=null;this.velX=0;this.velY=0;this.momentumRAF=null;this.gestureGuard=null;this.abortCtrl=null;this.resizeObs=null;this.scrollYCb=null;this.scrollXCb=null;this.reserveVerticalGutter=!1;this.onVNativeScroll=()=>{let e=this.sbVNativeEl.scrollTop;Math.abs(e-this.scrollTop)<.5||(this.scrollTop=e,this.syncCSSVars(),this.scrollYCb?.(e))};this.onHNativeScroll=()=>{let e=this.sbHNativeEl.scrollLeft;Math.abs(e-this.scrollLeft)<.5||(this.scrollLeft=e,this.syncCSSVars(),this.scrollXCb?.())};this.onWheel=e=>{if(e.ctrlKey||e.target?.closest(".pg-ai-panel"))return;e.preventDefault(),e.stopPropagation();let t=e.deltaX,o=e.deltaY;e.deltaMode===1?(t*=32,o*=32):e.deltaMode===2&&(t*=this.centerViewportWidth,o*=this.viewportHeight),e.shiftKey||Math.abs(t)>Math.abs(o)?this.scrollToX(this.scrollLeft+(e.deltaX!==0?t:o)):this.scrollToY(this.scrollTop+o)};this.onPanPointerDown=e=>{if(J(e)&&this.panPointerId===null&&!this.gestureGuard?.()&&!e.target?.closest(hn)){this.stopMomentum(),e.stopPropagation(),this.panPointerId=e.pointerId,this.panStartX=this.panLastX=e.clientX,this.panStartY=this.panLastY=e.clientY,this.panLastT=e.timeStamp,this.panScrollStartLeft=this.scrollLeft,this.panScrollStartTop=this.scrollTop,this.panMoved=!1,this.velX=0,this.velY=0,this.panCaptureEl=e.currentTarget;try{this.panCaptureEl.setPointerCapture(e.pointerId)}catch{}}};this.onPanPointerMove=e=>{if(e.pointerId!==this.panPointerId)return;if(this.gestureGuard?.()){this.releasePan(e.pointerId);return}let t=e.clientX-this.panStartX,o=e.clientY-this.panStartY;if(!this.panMoved){if(Math.abs(t)<q&&Math.abs(o)<q)return;this.panMoved=!0}this.scrollToX(this.panScrollStartLeft-t),this.scrollToY(this.panScrollStartTop-o);let r=e.timeStamp-this.panLastT;r>0&&(this.velX=(this.panLastX-e.clientX)/r,this.velY=(this.panLastY-e.clientY)/r),this.panLastX=e.clientX,this.panLastY=e.clientY,this.panLastT=e.timeStamp,e.preventDefault()};this.onPanPointerUp=e=>{if(e.pointerId!==this.panPointerId)return;let t=this.panMoved;this.releasePan(e.pointerId),t&&(this.suppressNextClick(),this.startMomentum())}}onScrollY(e){this.scrollYCb=e}onScrollX(e){this.scrollXCb=e}setReserveVerticalGutter(e){this.reserveVerticalGutter=e}setGestureGuard(e){this.gestureGuard=e}mount(e,t,o,r,n,i,s,l){this.gridEl=e,this.sbVNativeEl=r,this.sbVSpacerEl=n,this.sbHNativeEl=i,this.sbHSpacerEl=s,this.sbHRowEl=l??i;let a=new AbortController;this.abortCtrl=a;let c=a.signal;t.addEventListener("wheel",this.onWheel,{passive:!1,signal:c});let p=e.querySelector(".pg-grid__header");p?.addEventListener("wheel",this.onWheel,{passive:!1,signal:c});for(let h of[t,p])h&&(h.addEventListener("pointerdown",this.onPanPointerDown,{signal:c}),h.addEventListener("pointermove",this.onPanPointerMove,{passive:!1,signal:c}),h.addEventListener("pointerup",this.onPanPointerUp,{signal:c}),h.addEventListener("pointercancel",this.onPanPointerUp,{signal:c}));r.addEventListener("scroll",this.onVNativeScroll,{signal:c}),i.addEventListener("scroll",this.onHNativeScroll,{signal:c}),this.resizeObs=new ResizeObserver(()=>{this.viewportHeight=t.clientHeight,this.centerViewportWidth=o.clientWidth,this.clampScroll(),this.syncCSSVars(),this.syncScrollbars(),this.scrollXCb?.()}),this.resizeObs.observe(t),this.resizeObs.observe(o),this.viewportHeight=t.clientHeight,this.centerViewportWidth=o.clientWidth}updateSizes(e,t){this.totalHeight=e,this.totalCenterWidth=t,this.sbVSpacerEl&&(this.sbVSpacerEl.style.height=`${e}px`),this.sbHSpacerEl&&(this.sbHSpacerEl.style.width=`${t}px`),this.clampScroll(),this.syncCSSVars(),this.syncScrollbars()}getScrollTop(){return this.scrollTop}getScrollLeft(){return this.scrollLeft}getViewportHeight(){return this.viewportHeight}getCenterViewportWidth(){return this.centerViewportWidth}canScrollLeft(){return this.scrollLeft>0}canScrollRight(){return this.scrollLeft<Math.max(0,this.totalCenterWidth-this.centerViewportWidth)}canScrollUp(){return this.scrollTop>0}canScrollDown(){return this.scrollTop<Math.max(0,this.totalHeight-this.viewportHeight)}scrollToY(e){let t=Math.max(0,this.totalHeight-this.viewportHeight),o=Math.max(0,Math.min(e,t));o!==this.scrollTop&&(this.scrollTop=o,this.syncCSSVars(),this.syncScrollbars(),this.sbVNativeEl&&(this.sbVNativeEl.scrollTop=o),this.scrollYCb?.(this.scrollTop))}scrollToX(e){let t=Math.max(0,this.totalCenterWidth-this.centerViewportWidth),o=Math.max(0,Math.min(e,t));o!==this.scrollLeft&&(this.scrollLeft=o,this.syncCSSVars(),this.syncScrollbars(),this.sbHNativeEl&&(this.sbHNativeEl.scrollLeft=o),this.scrollXCb?.())}scrollToRow(e,t){e>=0&&e<t.length&&this.scrollToY(t[e].top)}scrollToTop(){this.scrollToY(0)}destroy(){this.stopMomentum(),this.abortCtrl?.abort(),this.abortCtrl=null,this.resizeObs?.disconnect(),this.resizeObs=null}clampScroll(){this.scrollTop=Math.max(0,Math.min(this.scrollTop,Math.max(0,this.totalHeight-this.viewportHeight))),this.scrollLeft=Math.max(0,Math.min(this.scrollLeft,Math.max(0,this.totalCenterWidth-this.centerViewportWidth)))}syncCSSVars(){this.gridEl&&(this.gridEl.style.setProperty("--pg-scroll-x",`-${this.scrollLeft}px`),this.gridEl.style.setProperty("--pg-scroll-y",`-${this.scrollTop}px`))}syncScrollbars(){if(this.sbVNativeEl){let e=!this.reserveVerticalGutter&&this.totalHeight<=this.viewportHeight;this.sbVNativeEl.classList.toggle("pg-scrollbar--hidden",e),this.gridEl?.style.setProperty("--pg-scrollbar-v-live-width",e?"0px":"var(--pg-scrollbar-v-width, 17px)")}this.sbHRowEl&&this.sbHRowEl.classList.toggle("pg-scrollbar--hidden",this.totalCenterWidth<=this.centerViewportWidth)}releasePan(e){this.panPointerId=null;try{this.panCaptureEl?.releasePointerCapture(e)}catch{}this.panCaptureEl=null}startMomentum(){let e=this.velX,t=this.velY;if(Math.abs(e)<xt&&Math.abs(t)<xt)return;let o=16,r=()=>{if(this.momentumRAF=null,e*=Vo,t*=Vo,Math.abs(e)<xt&&Math.abs(t)<xt)return;let n=this.scrollLeft,i=this.scrollTop;this.scrollToX(this.scrollLeft+e*o),this.scrollToY(this.scrollTop+t*o),!(this.scrollLeft===n&&this.scrollTop===i)&&(this.momentumRAF=requestAnimationFrame(r))};this.momentumRAF=requestAnimationFrame(r)}stopMomentum(){this.momentumRAF!==null&&(cancelAnimationFrame(this.momentumRAF),this.momentumRAF=null)}suppressNextClick(){let e=this.gridEl;if(!e)return;let t=o=>{o.stopPropagation(),o.preventDefault(),e.removeEventListener("click",t,!0)};e.addEventListener("click",t,!0),setTimeout(()=>e.removeEventListener("click",t,!0),400)}};var Jt=class{constructor(e,t,o,r,n=60,i=500){this.getRect=e;this.scrollY=t;this.scrollX=o;this.onScrolled=r;this.threshold=n;this.maxSpeed=i;this.rafId=null;this.lastTs=0;this.clientX=0;this.clientY=0;this.running=!1;this.tick=e=>{if(!this.running)return;let t=this.getRect();if(!t){this.stop();return}let o=this.lastTs===0?0:Math.min((e-this.lastTs)/1e3,.1);this.lastTs=e;let r=!1;if(o>0){let{clientX:n,clientY:i}=this,s=i-t.top,l=t.bottom-i;s<this.threshold?(this.scrollY(-this.speedAt(Math.max(0,s))*o),r=!0):l<this.threshold&&(this.scrollY(this.speedAt(Math.max(0,l))*o),r=!0);let a=n-t.left,c=t.right-n;a<this.threshold?(this.scrollX(-this.speedAt(Math.max(0,a))*o),r=!0):c<this.threshold&&(this.scrollX(this.speedAt(Math.max(0,c))*o),r=!0)}r&&this.onScrolled?.(this.clientX,this.clientY),this.rafId=requestAnimationFrame(this.tick)}}updateMouse(e,t){this.clientX=e,this.clientY=t,this.running||(this.running=!0,this.lastTs=0,this.rafId=requestAnimationFrame(this.tick))}stop(){this.running=!1,this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null)}speedAt(e){return this.maxSpeed*(1-e/this.threshold)}};var $o="cubic-bezier(0.4, 0, 0.2, 1)",Qt=class{constructor(){this.snapshot=null;this.animationType="sort";this.cleanupTimer=null}capture(e,t="sort"){this.cleanupTimer!==null&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null),this.animationType=t,this.snapshot=new Map(e.map(o=>[o.nodeId,o.top]))}animate(e,t,o){let r=this.snapshot;if(this.snapshot=null,!r||r.size===0)return;let n=this.animationType!=="sort",i=(this.animationType==="filter"||this.animationType==="detail",200),s=new Map(t.map(c=>[c.nodeId,c.top])),l=[],a=[];for(let c of e)for(let p of c.querySelectorAll("[data-node-id]")){let h=p.getAttribute("data-node-id");if(!h)continue;let u=r.get(h),m=s.get(h);if(u===void 0){n&&a.push(p);continue}if(m===void 0)continue;let g=u-m;if(Math.abs(g)<1)continue;let f=o!==void 0&&Math.abs(g)>o?Math.sign(g)*o:g;l.push({el:p,delta:f})}if(!(l.length===0&&a.length===0)){for(let{el:c,delta:p}of l)c.style.willChange="transform",c.style.transition="none",c.style.transform=`translateY(${p}px)`;for(let c of a)c.style.willChange="opacity, transform",c.style.transition="none",c.style.opacity="0",c.style.transform="translateY(8px)";e[0]?.offsetHeight,requestAnimationFrame(()=>{let c=`transform ${i}ms ${$o}`,p=`opacity ${i}ms ${$o}, transform ${i}ms ${$o}`;for(let{el:h}of l)h.style.transition=c,h.style.transform="translateY(0)";for(let h of a)h.style.transition=p,h.style.opacity="",h.style.transform="";this.cleanupTimer=setTimeout(()=>{this.cleanupTimer=null;for(let{el:h}of l)h.style.transform="",h.style.transition="",h.style.willChange="";for(let h of a)h.style.opacity="",h.style.transform="",h.style.transition="",h.style.willChange=""},i+20)})}}hasPending(){return this.snapshot!==null}destroy(){this.cleanupTimer!==null&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null),this.snapshot=null}};var qi=[{label:"Contains",operator:"contains"},{label:"Does not contain",operator:"notContains"},{label:"Equals",operator:"equals"},{label:"Does not equal",operator:"notEquals"},{label:"Starts with",operator:"startsWith"},{label:"Ends with",operator:"endsWith"},{label:"Blank",operator:"blank"},{label:"Not blank",operator:"notBlank"}],ji=[{label:"Equals",operator:"equals"},{label:"Does not equal",operator:"notEquals"},{label:"Greater than",operator:"greaterThan"},{label:"Greater than or equal to",operator:"greaterThanOrEqual"},{label:"Less than",operator:"lessThan"},{label:"Less than or equal to",operator:"lessThanOrEqual"},{label:"Between",operator:"inRange"},{label:"Blank",operator:"blank"},{label:"Not blank",operator:"notBlank"}],Xi=[{label:"Equals",operator:"equals"},{label:"Does not equal",operator:"notEquals"},{label:"Before",operator:"before"},{label:"After",operator:"after"},{label:"Between",operator:"inRange"},{label:"Blank",operator:"blank"},{label:"Not blank",operator:"notBlank"}];function Cn(d){switch(d){case"number":case"currency":case"percentage":return ji;case"date":case"time":return Xi;default:return qi}}function Yi(d){switch(d){case"number":case"currency":case"percentage":return"number";case"date":return"date";case"time":return"time";default:return"text"}}function eo(d){return d==="dropdown"||d==="array"}function wt(d){return d==="blank"||d==="notBlank"}function Uo(d){return d==="inRange"}var ve=28,xn=9,wn=3,Ki=200,to=class{constructor(e){this.config=e;this.panelEl=null;this.val1="";this.val1To="";this.logicMode="none";this.val2="";this.val2To="";this.setSearchTerm="";this.vsContainerEl=null;this.vsInnerEl=null;this.logicRowEl=null;this.cond2RowEl=null;this.selectAllCbEl=null;this.debounceTimer=null;let t=e.colDef.type??"string",o=Cn(t);this.op1=o[0].operator,this.op2=o[0].operator,this.allOptions=e.uniqueOptions,this.displayOptions=[...this.allOptions];let r=e.currentFilter;if(r)if(eo(t))this.selectedValues=new Set((r.selectedIds??[]).map(String));else{this.selectedValues=new Set,r.conditions.length>=1&&(this.op1=r.conditions[0].operator,this.val1=r.conditions[0].value!=null?String(r.conditions[0].value):"",this.val1To=r.conditions[0].valueTo!=null?String(r.conditions[0].valueTo):"");let n=r.conditions.length>=2?r.conditions[1]:null;n&&(this.logicMode=r.logic??"and",this.op2=n.operator,this.val2=n.value!=null?String(n.value):"",this.val2To=n.valueTo!=null?String(n.valueTo):"")}else this.selectedValues=new Set(this.allOptions.map(n=>n.value));this.boundClickOutside=this.handleClickOutside.bind(this),this.boundEscapeKey=this.handleEscapeKey.bind(this)}open(){let e=this.config.colDef.type??"string",t=document.createElement("div");t.className="pg-filter-panel",t.setAttribute("role","dialog"),t.setAttribute("aria-label",`Filter: ${this.config.colDef.header}`);let o=$(this.config.colDef,"filter"),r=!!o;if(o){let n={colDef:this.config.colDef,anchorEl:this.config.anchorEl,currentFilter:this.config.currentFilter,uniqueOptions:this.config.uniqueOptions,onFilterChange:this.config.onFilterChange,onClose:()=>this.destroy(),api:null};t.appendChild(o(n))}else eo(e)?t.appendChild(this.buildSetFilter()):t.appendChild(this.buildConditionFilter(e));r||t.appendChild(this.buildFooter()),this.panelEl=t,this.config.containerEl.appendChild(t),this.position(),!r&&eo(e)&&this.vsContainerEl&&this.renderVirtualList(),requestAnimationFrame(()=>{document.addEventListener("mousedown",this.boundClickOutside,!0),document.addEventListener("keydown",this.boundEscapeKey,!0)})}destroy(){this.clearDebounce(),document.removeEventListener("mousedown",this.boundClickOutside,!0),document.removeEventListener("keydown",this.boundEscapeKey,!0),this.panelEl?.remove(),this.panelEl=null,this.config.onClose()}buildConditionFilter(e){let t=document.createElement("div");t.className="pg-filter-cond-wrap";let o=this.buildConditionRow(e,1);t.appendChild(o);let r=document.createElement("div");r.className="pg-filter-logic",this.hasConditionValue(1)||r.classList.add("pg-filter-logic--hidden");for(let i of["and","or","none"]){let s=document.createElement("button");s.type="button",s.className="pg-filter-logic__btn",s.textContent=i==="none"?"None":i.toUpperCase(),this.logicMode===i&&s.classList.add("pg-filter-logic__btn--active"),s.addEventListener("click",()=>{this.logicMode=i,r.querySelectorAll(".pg-filter-logic__btn").forEach(l=>{l.classList.toggle("pg-filter-logic__btn--active",l.textContent===(i==="none"?"None":i.toUpperCase()))}),this.cond2RowEl&&this.cond2RowEl.classList.toggle("pg-filter-cond__row--hidden",i==="none"),this.scheduleEmit()}),r.appendChild(s)}this.logicRowEl=r,t.appendChild(r);let n=this.buildConditionRow(e,2);return this.logicMode==="none"&&n.classList.add("pg-filter-cond__row--hidden"),this.cond2RowEl=n,t.appendChild(n),t}buildConditionRow(e,t){let o=Cn(e),r=Yi(e),n=t===1?this.op1:this.op2,i=t===1?this.val1:this.val2,s=t===1?this.val1To:this.val2To,l=document.createElement("div");l.className="pg-filter-cond__row";let a=document.createElement("select");a.className="pg-filter-cond__select",a.setAttribute("aria-label","Filter operator");for(let f of o){let C=document.createElement("option");C.value=f.operator,C.textContent=f.label,f.operator===n&&(C.selected=!0),a.appendChild(C)}let c=document.createElement("div");c.className="pg-filter-cond__inputs";let p=document.createElement("input");p.type=r,p.className="pg-filter-cond__input",p.placeholder="Filter value\u2026",p.value=i,p.setAttribute("aria-label","Filter value");let h=document.createElement("span");h.className="pg-filter-cond__range-sep",h.textContent="and";let u=document.createElement("input");u.type=r,u.className="pg-filter-cond__input",u.placeholder="To value\u2026",u.value=s,u.setAttribute("aria-label","Filter to value"),t===1?(this.val1=i,this.val1To=s):(this.val2=i,this.val2To=s);let m=Uo(n),g=wt(n);return c.classList.toggle("pg-filter-cond__inputs--hidden",g),c.classList.toggle("pg-filter-cond__inputs--range",m),h.classList.toggle("pg-filter-cond__range-sep--hidden",!m),u.classList.toggle("pg-filter-cond__input--hidden",!m),c.appendChild(p),c.appendChild(h),c.appendChild(u),a.addEventListener("change",()=>{let f=a.value;t===1?this.op1=f:this.op2=f;let C=wt(f),b=Uo(f);c.classList.toggle("pg-filter-cond__inputs--hidden",C),c.classList.toggle("pg-filter-cond__inputs--range",b),h.classList.toggle("pg-filter-cond__range-sep--hidden",!b),u.classList.toggle("pg-filter-cond__input--hidden",!b),this.scheduleEmit()}),p.addEventListener("input",()=>{let f=p.value;t===1?(this.val1=f,this.logicRowEl&&this.logicRowEl.classList.toggle("pg-filter-logic--hidden",!f&&!wt(this.op1))):this.val2=f,this.scheduleEmit()}),u.addEventListener("input",()=>{t===1?this.val1To=u.value:this.val2To=u.value,this.scheduleEmit()}),l.appendChild(a),l.appendChild(c),l}hasConditionValue(e){let t=e===1?this.op1:this.op2,o=e===1?this.val1:this.val2;return wt(t)||o.trim()!==""}buildSetFilter(){let e=document.createElement("div");e.className="pg-filter-set";let t=document.createElement("div");t.className="pg-filter-set__search";let o=document.createElement("input");o.type="text",o.className="pg-filter-set__search-input",o.placeholder="Search values\u2026",o.setAttribute("aria-label","Search filter values"),o.value=this.setSearchTerm,o.addEventListener("input",()=>{this.setSearchTerm=o.value,this.applySetSearch()}),t.appendChild(o),e.appendChild(t),e.appendChild(this.buildDivider());let r=document.createElement("label");r.className="pg-filter-set__item pg-filter-set__item--select-all";let n=document.createElement("input");n.type="checkbox",n.className="pg-filter-set__checkbox",n.setAttribute("aria-label","Select all"),this.updateSelectAllState(n),n.addEventListener("change",()=>{n.checked?this.selectedValues=new Set(this.allOptions.map(p=>p.value)):this.selectedValues=new Set,this.renderVirtualList(),this.updateSelectAllState(n),this.emitFilter()}),this.selectAllCbEl=n;let i=document.createElement("span");i.className="pg-filter-set__item-label",i.textContent="(Select All)",r.appendChild(n),r.appendChild(i),e.appendChild(r),e.appendChild(this.buildDivider());let l=Math.min(this.allOptions.length,xn)*ve,a=document.createElement("div");a.className="pg-filter-set__list",a.style.height=`${l}px`;let c=document.createElement("div");return c.className="pg-filter-set__list-inner",c.style.height=`${this.displayOptions.length*ve}px`,a.appendChild(c),a.addEventListener("scroll",()=>this.renderVirtualList(),{passive:!0}),this.vsContainerEl=a,this.vsInnerEl=c,e.appendChild(a),e}buildDivider(){let e=document.createElement("div");return e.className="pg-filter-set__divider",e}applySetSearch(){let e=this.setSearchTerm.toLowerCase().trim();this.displayOptions=e?this.allOptions.filter(t=>t.label.toLowerCase().includes(e)):[...this.allOptions],this.vsInnerEl&&(this.vsInnerEl.style.height=`${this.displayOptions.length*ve}px`),this.vsContainerEl&&(this.vsContainerEl.scrollTop=0),this.renderVirtualList(),this.updateSelectAllState(this.selectAllCbEl)}renderVirtualList(){if(!this.vsContainerEl||!this.vsInnerEl)return;let e=this.vsContainerEl.scrollTop,t=this.vsContainerEl.clientHeight||xn*ve,o=Math.max(0,Math.floor(e/ve)-wn),r=Math.min(this.displayOptions.length,Math.ceil((e+t)/ve)+wn);this.vsInnerEl.innerHTML="";for(let n=o;n<r;n++){let i=this.displayOptions[n],s=this.buildSetItem(i,n);this.vsInnerEl.appendChild(s)}}buildSetItem(e,t){let o=document.createElement("label");o.className="pg-filter-set__item",o.style.top=`${t*ve}px`;let r=document.createElement("input");r.type="checkbox",r.className="pg-filter-set__checkbox",r.checked=this.selectedValues.has(e.value),r.addEventListener("change",()=>{r.checked?this.selectedValues.add(e.value):this.selectedValues.delete(e.value),this.updateSelectAllState(this.selectAllCbEl),this.emitFilter()});let n=document.createElement("span");n.className="pg-filter-set__item-label";let i=$(this.config.colDef,"option");if(i){let s=i({option:{value:e.value,label:e.label},index:t,selected:r.checked,highlighted:!1,colDef:this.config.colDef,api:null});typeof s=="string"?n.innerHTML=s:n.appendChild(s)}else n.textContent=e.label||"(Blank)",e.label||n.classList.add("pg-filter-set__item-label--blank");return o.appendChild(r),o.appendChild(n),o}updateSelectAllState(e){if(!e)return;let t=this.displayOptions.length||this.allOptions.length,o=this.searchTerm?this.displayOptions.filter(r=>this.selectedValues.has(r.value)).length:this.selectedValues.size;e.checked=o>=t,e.indeterminate=o>0&&o<t}get searchTerm(){return this.setSearchTerm}buildFooter(){let e=document.createElement("div");e.className="pg-filter-panel__footer";let t=document.createElement("button");return t.type="button",t.className="pg-filter-panel__clear-btn",t.textContent="Clear Filter",t.addEventListener("click",()=>{this.config.onFilterChange(null),this.destroy()}),e.appendChild(t),e}buildColumnFilter(){let e=this.config.colDef,t=e.type??"string";if(eo(t))return this.selectedValues.size>=this.allOptions.length?null:this.selectedValues.size===0?{colId:e.colId,field:e.field,type:"dropdown",logic:"and",conditions:[{operator:"equals",value:"__NO_MATCH__"}],selectedIds:[]}:{colId:e.colId,field:e.field,type:"dropdown",logic:"and",conditions:[{operator:"in",value:null}],selectedIds:Array.from(this.selectedValues)};let o=this.getFilterDataType(t),r=this.buildConditionObject(this.op1,this.val1,this.val1To);if(!r)return null;let i=this.logicMode!=="none"?this.buildConditionObject(this.op2,this.val2,this.val2To):null;return i?{colId:e.colId,field:e.field,type:o,logic:this.logicMode,conditions:[r,i]}:{colId:e.colId,field:e.field,type:o,logic:"and",conditions:[r]}}buildConditionObject(e,t,o){return wt(e)?{operator:e,value:null}:t.trim()===""?null:Uo(e)?{operator:e,value:t.trim(),valueTo:o.trim()}:{operator:e,value:t.trim()}}getFilterDataType(e){switch(e){case"number":case"currency":case"percentage":return"number";case"date":case"time":return"date";case"boolean":return"boolean";case"dropdown":return"dropdown";case"array":return"array";default:return"string"}}scheduleEmit(){this.clearDebounce(),this.debounceTimer=setTimeout(()=>this.emitFilter(),Ki)}emitFilter(){let e=this.buildColumnFilter();this.config.onFilterChange(e)}clearDebounce(){this.debounceTimer!==null&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}position(){if(!this.panelEl)return;let e=this.config.anchorEl.getBoundingClientRect(),t=this.config.containerEl.getBoundingClientRect(),o=e.bottom-t.top,r=e.left-t.left,n=this.panelEl.offsetWidth||280,i=t.width;r+n>i&&(r=Math.max(0,i-n));let s=this.panelEl.offsetHeight||300;t.height-o<s&&o>s&&(o=e.top-t.top-s),this.panelEl.style.top=`${Math.max(0,o)}px`,this.panelEl.style.left=`${Math.max(0,r)}px`}handleClickOutside(e){let t=e.target;this.panelEl?.contains(t)||this.config.anchorEl?.contains(t)||this.destroy()}handleEscapeKey(e){e.key==="Escape"&&(e.stopPropagation(),this.destroy())}};var Zi=20,Ji=10,oo=class{constructor(){this.layerEl=null;this.contentEl=null;this.entries=new Map;this.collapsedCache=new Map;this.masterDetailEngine=null;this.nestedGridFactory=null;this.iconRenderer=null;this.themeManager=null;this.parentApi=null;this.parentScrollForwarder=null}mount(e){this.layerEl=y("pg-detail-layer"),this.contentEl=y("pg-detail-layer__content"),this.layerEl.appendChild(this.contentEl),e.appendChild(this.layerEl)}setDependencies(e,t,o,r){this.masterDetailEngine=e,this.nestedGridFactory=t,this.iconRenderer=o,this.themeManager=r}setParentScrollForwarder(e){this.parentScrollForwarder=e}setParentApi(e){this.parentApi=e}sync(e,t){if(!this.contentEl||!this.masterDetailEngine)return;for(let[r,n]of this.entries)n.collapsing||t.has(r)||(this.destroyEntry(n),this.entries.delete(r));let o=new Set(e.map(r=>r.nodeId));for(let[r,n]of this.entries)n.collapsing||o.has(r)||(n.containerEl.style.display="none");for(let r of e){let n=this.entries.get(r.nodeId);n||(n=this.reviveOrBuildEntry(r),this.entries.set(r.nodeId,n),this.playEnterAnimation(n)),n.containerEl.style.display="",n.contentBuilt||this.tryBuildContent(n,r)}}reviveOrBuildEntry(e){let t=this.collapsedCache.get(e.nodeId);return t?(this.collapsedCache.delete(e.nodeId),t):this.buildEntry(e)}beginCollapse(e){if(!this.contentEl)return;let t=ht(e),o=this.entries.get(t);if(!o||o.collapsing)return;o.collapsing=!0;let r=this.contentEl.getBoundingClientRect(),n=o.containerEl.getBoundingClientRect();o.containerEl.style.top=`${n.top-r.top}px`,o.containerEl.style.height=`${n.height}px`,o.containerEl.offsetHeight;let i=!1,s=()=>{i||(i=!0,o.containerEl.removeEventListener("transitionend",l),this.entries.get(t)===o&&(this.entries.delete(t),this.cacheCollapsedEntry(t,o)))},l=a=>{a.propertyName==="height"&&s()};o.containerEl.addEventListener("transitionend",l),setTimeout(s,260),requestAnimationFrame(()=>{o.containerEl.classList.add("pg-row--detail-collapsing"),o.containerEl.style.height="0px"})}playEnterAnimation(e){e.containerEl.classList.add("pg-row--detail-entering"),requestAnimationFrame(()=>{requestAnimationFrame(()=>{e.containerEl.classList.remove("pg-row--detail-entering")})})}destroy(){for(let e of this.entries.values())this.destroyEntry(e);this.entries.clear();for(let e of this.collapsedCache.values())this.destroyEntry(e);this.collapsedCache.clear(),this.layerEl?.remove(),this.layerEl=null,this.contentEl=null}getNestedInstance(e){return this.entries.get(ht(e))?.instance??void 0}buildEntry(e){let t=y("pg-row pg-row--detail-container");return t.setAttribute("data-node-id",e.nodeId),this.contentEl.appendChild(t),{containerEl:t,instance:null,contentBuilt:!1,collapsing:!1,cleanupFns:[]}}cacheCollapsedEntry(e,t){t.collapsing=!1,t.containerEl.classList.remove("pg-row--detail-collapsing"),t.containerEl.style.removeProperty("top"),t.containerEl.style.removeProperty("height"),t.containerEl.style.display="none",this.collapsedCache.delete(e),this.collapsedCache.set(e,t);let o=this.masterDetailEngine?.getConfig()?.keepDetailGridsCount??Ji;for(;this.collapsedCache.size>o;){let r=this.collapsedCache.keys().next().value;if(r===void 0)break;let n=this.collapsedCache.get(r);this.collapsedCache.delete(r),this.destroyEntry(n)}}tryBuildContent(e,t){let o=this.masterDetailEngine,r=t.parentNodeId;if(o.isPending(r)){e.containerEl.querySelector(".pg-detail-loading")||e.containerEl.appendChild(this.buildLoadingIndicator());return}e.containerEl.innerHTML="";let n=o.getConfig();if(n?.detailRendererFn){let a=n.detailRendererFn({rowData:t.data,nodeId:r,containerEl:e.containerEl,parentApi:this.parentApi});a&&a!==e.containerEl&&e.containerEl.appendChild(a),e.contentBuilt=!0;return}let i=y("pg-detail-nested-grid-host");e.containerEl.appendChild(i);let s=o.resolveDetailGridOptions(t,this.themeManager.getActiveTheme()),l=this.nestedGridFactory(i,s);e.instance=l,e.contentBuilt=!0,n?.detailResizable?this.attachResizeHandle(e,r):n?.detailAutoHeight!==!1&&this.observeAutoHeight(e,r,l),this.attachWheelForwarding(e,l)}attachWheelForwarding(e,t){let o=r=>{r.ctrlKey||Math.abs(r.deltaX)>Math.abs(r.deltaY)||(r.deltaY<0?t.api.canScrollUp():t.api.canScrollDown())||(r.preventDefault(),r.stopPropagation(),this.parentScrollForwarder?.(r.deltaY))};e.containerEl.addEventListener("wheel",o,{capture:!0,passive:!1}),e.cleanupFns.push(()=>e.containerEl.removeEventListener("wheel",o,{capture:!0}))}observeAutoHeight(e,t,o){let r=e.containerEl.querySelector(".pg-grid");if(!r)return;let n=()=>{let s=parseFloat(r.style.getPropertyValue("--pg-content-height"))||0,l=r.querySelector(".pg-grid__header"),a=r.querySelector(".pg-grid__footer"),c=(l?.offsetHeight??0)+(a?.offsetHeight??0)+2;this.masterDetailEngine.setDetailHeight(t,c+s+Zi*2)},i=o.api.on(x.ROWS_RENDERED,()=>requestAnimationFrame(n));e.cleanupFns.push(i),requestAnimationFrame(n)}attachResizeHandle(e,t){let o=y("pg-detail-resize-handle");o.setAttribute("data-detail-resize-handle",""),e.containerEl.appendChild(o);let r=0,n=0,i=a=>{this.masterDetailEngine.setDetailHeight(t,n+(a.clientY-r))},s=()=>{document.removeEventListener("pointermove",i),document.removeEventListener("pointerup",s)},l=a=>{a.button===0&&(a.preventDefault(),r=a.clientY,n=e.containerEl.getBoundingClientRect().height,document.addEventListener("pointermove",i),document.addEventListener("pointerup",s))};o.addEventListener("pointerdown",l),e.cleanupFns.push(()=>{o.removeEventListener("pointerdown",l),s()})}buildLoadingIndicator(){let e=y("pg-detail-loading");return e.appendChild(this.iconRenderer.render("loading",{size:20,spin:!0})),this.iconRenderer.injectSpinKeyframes(),e}destroyEntry(e){for(let t of e.cleanupFns)t();e.instance?.destroy(),e.containerEl.remove()}};function ro(d,e,t,o=0,r=d.length-1){let n=o,i=r;for(;n<=i;){let s=n+i>>1,l=d[s].top,a=l+(d[s].height??t);if(e<l)i=s-1;else if(e>=a)n=s+1;else return s}return-1}var no=class{compute(e,t,o,r){let n={nodeId:null,offsetPx:0,minStart:r};if(e.length===0)return n;let i=ro(e,t,o);if(i<0)return n;let s=this.resolveMasterIndex(e,i);if(s<0)return n;let l=e[s],a=e[s+1];if(!a||a.type!=="detail")return n;let c=l.height??o,p=a.top+(a.height??o),h=Math.min(0,p-t-c);return{nodeId:l.nodeId,offsetPx:h,minStart:Math.min(r,s)}}resolveMasterIndex(e,t){let o=e[t];if(o.type==="detail"){let r=t-1;return e[r]?.type==="data"?r:-1}return o.type==="data"&&e[t+1]?.type==="detail"&&e[t+1].parentNodeId===o.nodeId?t:-1}};function Qi(d,e,t){let o=0,r=d.length-1;for(;o<=r;){let n=o+r>>1,i=d[n],s=i.subtreeEndTop??i.top+(i.height??t);if(e<i.top)r=n-1;else if(e>=s)o=n+1;else return i}return null}var io=class{compute(e,t,o,r){let n={entries:[],minStart:r};if(e.length===0)return n;let i=ro(e,t,o);if(i<0)return n;let s=e[i];for(;s.parent;)s=s.parent;if(!(s.hasChildren||s.children.length>0))return n;let l=r,a=0,c=[];for(;;){let p=t+a,h=s.height??o,u=s.subtreeEndTop??1/0,m=Math.max(-h,Math.min(0,u-p-h));if(c.push({nodeId:s.nodeId,top:a+m}),l=Math.min(l,s.rowIndex),p>=u)break;a+=h;let g=Qi(s.children,t+a,o);if(!g||!(g.hasChildren||g.children.length>0))break;s=g}return{entries:c,minStart:l}}};var es=120,ts=140,so=class{constructor(e){this.iconRenderer=e;this.launcherEl=null;this.panelEl=null;this.logEl=null;this.inputEl=null;this.sendBtnEl=null;this.submitHandler=null;this.asyncSubmitHandler=null;this.isOpen=!1;this.messages=[];this.activeController=null;this.typewriterHandle=null;this.isBusy=!1}mount(e,t){this.launcherEl=this.buildLauncher(),this.panelEl=this.buildPanel(t),e.appendChild(this.launcherEl),e.appendChild(this.panelEl),t.defaultOpen&&this.open()}setSubmitHandler(e){this.submitHandler=e}setAsyncSubmitHandler(e){this.asyncSubmitHandler=e}invoke(e){this.appendMessage({role:"user",text:e});let t=this.submitHandler?.(e)??{success:!1,message:"Photon AI is not ready yet."};return this.appendMessage({role:"assistant",text:t.message,success:t.success}),t}async invokeAsync(e){if(!this.asyncSubmitHandler)return this.invoke(e);this.cancelActiveRequest(),this.setBusy(!0),this.appendMessage({role:"user",text:e});let t=this.appendLoadingBubble(),o=new AbortController;this.activeController=o;let r;try{r=await this.asyncSubmitHandler(e,o.signal)}catch(n){r={success:!1,message:n instanceof Error?n.message:"Photon AI request failed."}}return o.signal.aborted?(t.remove(),this.activeController===o&&(this.activeController=null),r):(this.activeController=null,await this.renderStreamingResult(t,r),this.setBusy(!1),r)}open(){this.isOpen||!this.panelEl||!this.launcherEl||(this.isOpen=!0,this.launcherEl.classList.add("pg-ai-launcher--hidden"),this.panelEl.classList.add("pg-ai-panel--open"),this.messages.length===0&&this.appendGreeting(),requestAnimationFrame(()=>this.inputEl?.focus()))}close(){!this.isOpen||!this.panelEl||!this.launcherEl||(this.isOpen=!1,this.cancelActiveRequest(),this.panelEl.classList.remove("pg-ai-panel--open"),this.launcherEl.classList.remove("pg-ai-launcher--hidden"))}destroy(){this.cancelActiveRequest(),this.launcherEl?.remove(),this.panelEl?.remove(),this.launcherEl=null,this.panelEl=null,this.logEl=null,this.inputEl=null,this.sendBtnEl=null,this.submitHandler=null,this.asyncSubmitHandler=null,this.messages=[],this.isBusy=!1}buildLauncher(){let e=ft("button",{type:"button","aria-label":"Open Photon AI"});return e.className="pg-ai-launcher",e.appendChild(this.iconRenderer.render("sparkle",{size:20})),e.addEventListener("click",()=>this.open()),e}buildPanel(e){let t=y("pg-ai-panel");return t.setAttribute("role","complementary"),t.setAttribute("aria-label","Photon AI"),t.appendChild(this.buildHeader()),this.logEl=y("pg-ai-panel__log"),this.logEl.setAttribute("role","log"),this.logEl.setAttribute("aria-live","polite"),t.appendChild(this.logEl),t.appendChild(this.buildInputArea(e)),t}buildHeader(){let e=y("pg-ai-panel__header"),t=y("pg-ai-panel__title");t.appendChild(this.iconRenderer.render("sparkle",{size:16}));let o=document.createElement("span");o.textContent="Photon AI",t.appendChild(o),e.appendChild(t);let r=ft("button",{type:"button","aria-label":"Close Photon AI"});return r.className="pg-ai-panel__close",r.appendChild(this.iconRenderer.render("close",{size:14})),r.addEventListener("click",()=>this.close()),e.appendChild(r),e}buildInputArea(e){let t=y("pg-ai-panel__input-wrap"),o=ft("textarea",{placeholder:e.placeholder??"Ask Photon AI to do something...",rows:1});o.className="pg-ai-panel__input",this.inputEl=o;let r=ft("button",{type:"button","aria-label":"Send"});return r.className="pg-ai-panel__send",r.disabled=!0,r.appendChild(this.iconRenderer.render("arrowUp",{size:14})),this.sendBtnEl=r,o.addEventListener("input",()=>{this.autoGrow(o),r.disabled=o.value.trim().length===0}),o.addEventListener("keydown",n=>{n.key==="Enter"&&!n.shiftKey&&(n.preventDefault(),this.trySubmit())}),r.addEventListener("click",()=>this.trySubmit()),t.appendChild(o),t.appendChild(r),t}autoGrow(e){e.style.height="auto",e.style.height=`${Math.min(e.scrollHeight,es)}px`}trySubmit(){let e=this.inputEl,t=this.sendBtnEl;if(!e||!t||this.isBusy)return;let o=e.value.trim();!o||t.disabled||(e.value="",t.disabled=!0,this.autoGrow(e),this.asyncSubmitHandler?this.invokeAsync(o):this.invoke(o))}appendGreeting(){this.appendMessage({role:"assistant",text:`Hi! Tell me what to do \u2014 sort, filter, pin, group, hide/show columns, move columns, selection, and more \u2014 or ask me a question about the grid's current state (try "help" to see everything I understand).`,success:!0})}appendMessage(e){if(this.messages.push(e),!this.logEl)return;let t=this.createBubble(e.role);e.role==="assistant"&&t.classList.toggle("pg-ai-panel__message--error",e.success===!1),this.renderLines(t,e.text),this.logEl.appendChild(t),this.scrollToBottom()}createBubble(e){return y(`pg-ai-panel__message pg-ai-panel__message--${e}`)}renderLines(e,t){tn(e);for(let o of t.split(`
4532
- `)){let r=document.createElement("div");r.textContent=o.length>0?o:"\u200B",e.appendChild(r)}}appendLoadingBubble(){let e=this.createBubble("assistant");e.classList.add("pg-ai-panel__message--loading");let t=y("pg-ai-panel__typing");for(let o=0;o<3;o++)t.appendChild(y("pg-ai-panel__typing-dot"));return e.appendChild(t),this.logEl?.appendChild(e),this.scrollToBottom(),e}async renderStreamingResult(e,t){if(e.classList.remove("pg-ai-panel__message--loading"),e.classList.toggle("pg-ai-panel__message--error",t.success===!1),this.messages.push({role:"assistant",text:t.message,success:t.success}),this.prefersReducedMotion()){this.renderLines(e,t.message),this.scrollToBottom();return}await this.typewrite(e,t.message)}typewrite(e,t){return new Promise(o=>{e.classList.add("pg-ai-panel__message--streaming");let r=null,n=i=>{r===null&&(r=i);let s=(i-r)/1e3,l=Math.min(t.length,Math.ceil(s*ts));if(this.renderLines(e,t.slice(0,l)),this.scrollToBottom(),l>=t.length){e.classList.remove("pg-ai-panel__message--streaming"),this.typewriterHandle=null,o();return}this.typewriterHandle=requestAnimationFrame(n)};this.typewriterHandle=requestAnimationFrame(n)})}setBusy(e){this.isBusy=e,this.inputEl&&(this.inputEl.disabled=e),this.sendBtnEl&&(this.sendBtnEl.disabled=e||this.inputEl?.value.trim().length===0),e||requestAnimationFrame(()=>this.inputEl?.focus())}cancelActiveRequest(){this.activeController?.abort(),this.activeController=null,this.typewriterHandle!==null&&(cancelAnimationFrame(this.typewriterHandle),this.typewriterHandle=null),this.isBusy&&this.setBusy(!1)}scrollToBottom(){this.logEl&&(this.logEl.scrollTop=this.logEl.scrollHeight)}prefersReducedMotion(){return typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}};var os=400,lo=class{constructor(e,t,o){this.store=e;this.columnModel=t;this.api=o;this.hostEl=null;this.tooltipEl=null;this.showTimer=null;this.hoveredCellEl=null;this.boundMouseOver=this.handleMouseOver.bind(this),this.boundMouseOut=this.handleMouseOut.bind(this)}mount(e){this.hostEl=e,e.addEventListener("mouseover",this.boundMouseOver),e.addEventListener("mouseout",this.boundMouseOut)}destroy(){this.hostEl?.removeEventListener("mouseover",this.boundMouseOver),this.hostEl?.removeEventListener("mouseout",this.boundMouseOut),this.clearShowTimer(),this.tooltipEl?.remove(),this.tooltipEl=null,this.hostEl=null,this.hoveredCellEl=null}handleMouseOver(e){let t=e.target.closest(".pg-cell[data-col-id]");if(!t||t===this.hoveredCellEl)return;this.hoveredCellEl=t,this.clearShowTimer(),this.hide();let o=t.getAttribute("data-col-id"),r=t.closest("[data-node-id]")?.getAttribute("data-node-id");if(!o||!r)return;let n=this.columnModel.getVisibleColumns(),i=n.findIndex(p=>p.colId===o),s=n[i];if(!s)return;let l=$(s,"tooltip");if(!l)return;let c=(this.store.get("visibleRows")??[]).find(p=>p.nodeId===r);!c||c.type!=="data"||(this.showTimer=setTimeout(()=>{let p=c.data[s.field],h={value:p,rawValue:p,row:c.data,colDef:s,rowIndex:c.rowIndex,colIndex:i,api:this.api};this.show(t,l(h))},os))}handleMouseOut(e){let t=e.relatedTarget;this.hoveredCellEl&&t&&this.hoveredCellEl.contains(t)||(this.hoveredCellEl=null,this.clearShowTimer(),this.hide())}show(e,t){this.hostEl&&(this.tooltipEl||(this.tooltipEl=document.createElement("div"),this.tooltipEl.className="pg-tooltip",this.hostEl.appendChild(this.tooltipEl)),typeof t=="string"?this.tooltipEl.innerHTML=t:(this.tooltipEl.innerHTML="",this.tooltipEl.appendChild(t)),this.position(e),this.tooltipEl.classList.add("pg-tooltip--visible"))}hide(){this.tooltipEl?.classList.remove("pg-tooltip--visible")}position(e){if(!this.tooltipEl||!this.hostEl)return;let t=this.hostEl.getBoundingClientRect(),o=e.getBoundingClientRect(),r=this.tooltipEl.getBoundingClientRect(),n=o.top-t.top-r.height-8;n<0&&(n=o.bottom-t.top+8);let i=o.left-t.left,s=t.width-r.width-4;i>s&&(i=Math.max(4,s)),i<4&&(i=4),this.tooltipEl.style.transform=`translate(${i}px, ${n}px)`}clearShowTimer(){this.showTimer!==null&&(clearTimeout(this.showTimer),this.showTimer=null)}};var En=44,Rn=52,rs=5,ns=2,ce=200,rt=class{constructor(e,t,o,r,n,i,s,l,a,c,p){this.containerEl=e;this.store=t;this.eventBus=o;this.columnModel=r;this.paginationEngine=n;this.iconRenderer=i;this.cellSelectionEngine=s;this.sortEngine=l;this.rowSelectionEngine=a;this.groupingEngine=c;this.options=p;this.wrapperEl=null;this.leftHeaderPanelEl=null;this.centerHeaderInnerEl=null;this.rightHeaderPanelEl=null;this.leftBodyPanelEl=null;this.centerBodyEl=null;this.centerBodyContentEl=null;this.rightBodyPanelEl=null;this.leftBodyContentEl=null;this.rightBodyContentEl=null;this.footerContainerEl=null;this.bodyWrapEl=null;this.leftStickyRowEl=null;this.centerStickyRowEl=null;this.rightStickyRowEl=null;this.stickyNodeId=null;this.stickyRowTracker=new no;this.treeStickyRowTracker=new io;this.columnChooser=null;this.groupDropZone=null;this.rowDragRenderer=null;this.treeDragConfig=null;this.detailRowRenderer=null;this.masterDetailEngine=null;this.treeExpansionService=null;this.treeToggleColumnId=null;this.photonAIPanel=null;this.rafId=null;this.autoScroller=null;this.unsubscribers=[];this.headerRendered=!1;this.lastCenterColStart=-1;this.lastCenterColEnd=-1;this.rowAnimator=new Qt;this.columnGroupModel=null;this.groupHeaderBuilder=null;this.groupDragHandler=null;this.displayGroupEngine=null;this.filterEngine=null;this.filterRefreshFn=null;this.activeFilterPanel=null;this._lastColumnsRef=null;this._lastGroupedIdsRef=null;this._lastRowsRef=null;this._cachedTotalHeight=0;this._cachedCenterW=0;this._lastFlexResolvedWidth=-1;this.colStyles=new Yt,this.rowPositionSheet=new Kt,this.scrollController=new Zt,this.masterDetailEnabledAtConstruction=p.masterDetail?.enabled??!1,this.treeDataEnabledAtConstruction=p.treeData?.enabled??!1,this.masterDetailEnabledAtConstruction&&this.scrollController.setReserveVerticalGutter(!0),this.headerRenderer=new Ke(t,o,i,r,l,this.colStyles),p.showGroupingBar&&(this.groupDropZone=new Vt(t,c,i),this.headerRenderer.setGroupDropZone(this.groupDropZone)),this.bodyRenderer=new et(t,o,i,a),this.footerRenderer=new tt(o,i,n),this.overlayRenderer=new ot(i),p.masterDetail?.enabled&&(this.detailRowRenderer=new oo,this.detailRowRenderer.setParentScrollForwarder(h=>{this.scrollController.scrollToY(this.scrollController.getScrollTop()+h)})),p.photonAI?.enabled&&(this.photonAIPanel=new so(i)),this.tooltipController=new lo(t,r,null)}setTreeDragConfig(e,t){this.treeDragConfig={active:e,reparentHandler:t}}setTreeRenderConfig(e,t){this.treeToggleColumnId=e??null,this.treeExpansionService=t}mount(){this.colStyles.mount(),this.rowPositionSheet.mount(),this.buildLayout(),this.wrapperEl&&this.bodyWrapEl&&(this.rowDragRenderer=new Xt(this.store,this.eventBus,this.iconRenderer),this.rowDragRenderer.mount(this.wrapperEl,this.bodyWrapEl,e=>this.scrollController.scrollToY(this.scrollController.getScrollTop()+e)),this.treeDragConfig&&this.rowDragRenderer.setTreeMode(this.treeDragConfig.active,this.treeDragConfig.reparentHandler)),this.subscribeToStore(),this.scheduleRender()}scheduleRender(){this.rafId===null&&(this.rafId=requestAnimationFrame(()=>{this.rafId=null,this.performRender()}))}forceRender(){this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.performRender()}invalidateBodyRows(){this.bodyRenderer.clear(),this.scheduleRender()}invalidateBodyRowsByIds(e){this.bodyRenderer.invalidateRowsByNodeId(e),this.scheduleRender()}setFilterEngine(e){this.filterEngine=e}setFilterRefreshCallback(e){this.filterRefreshFn=e}setColumnGroupModel(e,t){this.columnGroupModel=e,this.groupHeaderBuilder=t,this.groupDragHandler=new Ye(this.columnModel,e,t,this.colStyles,this.eventBus,()=>this.wrapperEl),t.setDragConfig(this.groupDragHandler,()=>this.wrapperEl),this.headerRenderer.setColumnGroupModel(e,t),this.headerRenderer.setGroupDragHandler(this.groupDragHandler),this.headerRenderer.setGroupToggleCallback(o=>{this.handleGroupToggle(o)}),this.headerRenderer.setGroupResizeCallback((o,r)=>{this.handleGroupResize(o,r)})}setDisplayGroupEngine(e){this.displayGroupEngine=e,e.createDragHandler(()=>this.wrapperEl),this.headerRenderer.setDisplayGroupEngine(e),this.headerRenderer.setGroupToggleCallback(t=>{this.handleGroupToggle(t)}),this.headerRenderer.setGroupResizeCallback((t,o)=>{this.handleGroupResize(t,o)}),this.unsubscribers.push(this.eventBus.on(x.COLUMN_GROUP_HEADER_COLLAPSED,()=>{this.rebuildHeader()}),this.eventBus.on(x.COLUMN_GROUP_HEADER_EXPANDED,()=>{this.rebuildHeader()}),this.eventBus.on(x.COLUMN_MOVED,t=>{if(t?.fromIndex===-1){if(this.columnGroupModel){let r=this.columnGroupModel.getAllLeaves(),n=this.store.get("columns"),i=new Map(n.map(a=>[a.colId,a])),s=r.map(a=>i.get(a.colId)).filter(a=>a!==void 0);s.some((a,c)=>a.colId!==n[c]?.colId)&&this.store.set("columns",s)}this.bodyRenderer.clear(),this.rebuildHeader()}}))}openFilterPanel(e,t){if(!this.filterEngine||!this.wrapperEl)return;if(this.activeFilterPanel){this.activeFilterPanel.destroy(),this.activeFilterPanel=null;return}let o=this.filterEngine.getFilterModel()[e.colId]??null,r=this.extractUniqueOptions(e);this.activeFilterPanel=new to({colDef:e,anchorEl:t,containerEl:this.wrapperEl,currentFilter:o,uniqueOptions:r,onFilterChange:n=>{this.filterEngine.setColumnFilter(e.colId,n),this.filterRefreshFn?.()},onClose:()=>{this.activeFilterPanel=null}}),this.activeFilterPanel.open()}extractUniqueOptions(e){if(e.type==="dropdown"&&e.dropdownOptions?.length)return e.dropdownOptions.map(s=>({value:String(s.value),label:s.label??String(s.value)}));let t=this.store.get("allRows"),o=e.field,r=o.split("."),n=o.includes("."),i=new Set;for(let s of t){if(s.type!=="data")continue;let l;if(n){l=s.data;for(let a of r){if(l==null)break;l=l[a]}}else l=s.data[o];if(Array.isArray(l))for(let a of l)a!=null&&a!==""&&i.add(String(a));else l!=null&&l!==""&&i.add(String(l))}return Array.from(i).sort((s,l)=>s.localeCompare(l)).map(s=>({value:s,label:s}))}captureRowAnimation(e,t="sort"){this.rowAnimator.capture(e,t)}setSearchCallback(e){this.groupDropZone?.setSearchCallback(e)}setMasterDetailConfig(e,t,o,r){this.masterDetailEngine=e,this.detailRowRenderer?.setDependencies(e,t,o,r)}setParentApiForDetail(e){this.detailRowRenderer?.setParentApi(e)}getDetailGridApi(e){return this.detailRowRenderer?.getNestedInstance(e)?.api}setPhotonAISubmitHandler(e){this.photonAIPanel?.setSubmitHandler(e)}setPhotonAIAsyncSubmitHandler(e){this.photonAIPanel?.setAsyncSubmitHandler(e)}submitAICommand(e){return this.photonAIPanel?.invoke(e)??{success:!1,message:"Photon AI is not enabled on this grid."}}submitAICommandAsync(e){return this.photonAIPanel?.invokeAsync(e)??Promise.resolve({success:!1,message:"Photon AI is not enabled on this grid."})}beginDetailCollapse(e){this.detailRowRenderer?.beginCollapse(e)}scrollToRow(e){let t=this.store.get("allRows");this.scrollController.scrollToRow(e,t)}scrollToTop(){this.scrollController.scrollToTop()}canScrollUp(){return this.scrollController.canScrollUp()}canScrollDown(){return this.scrollController.canScrollDown()}scrollToCell(e,t){let o=this.store.get("visibleRows"),r=this.store.get("columns").filter(f=>f.visible!==!1),n=o[e];if(!n)return;let i=t>=0?r[t]:null;if(n.nodeId!==this.stickyNodeId){let f=n.height??this.options.rowHeight??48,C=this.scrollController.getScrollTop(),b=this.scrollController.getViewportHeight();n.top<C?this.scrollController.scrollToY(n.top):n.top+f>C+b&&this.scrollController.scrollToY(n.top+f-b)}if(!i||i.pinned==="left"||i.pinned==="right")return;let s=r.filter(f=>f.pinned==="left"),l=r.filter(f=>f.pinned!=="left"&&f.pinned!=="right"),a=t-s.length;if(a<0||a>=l.length)return;let h=(this.store.get("groupedColumnIds").length>0?ce:0)+this.colStyles.getTotalWidth(l.slice(0,a).map(f=>f.colId)),u=this.colStyles.getWidth(l[a].colId),m=this.scrollController.getScrollLeft(),g=this.scrollController.getCenterViewportWidth();h<m?this.scrollController.scrollToX(h):h+u>m+g&&this.scrollController.scrollToX(h+u-g)}getCellRect(e,t){for(let o of[this.leftBodyContentEl,this.centerBodyContentEl,this.rightBodyContentEl]){if(!o)continue;let r=o.querySelector(`[data-row-index="${e}"][data-col-index="${t}"]`);if(r)return r.getBoundingClientRect()}return null}ensureRowVisible(e,t){let r=this.store.get("visibleRows")[e];if(!r)return;let n=r.height??this.options.rowHeight??48,i=this.scrollController.getScrollTop(),s=this.scrollController.getViewportHeight(),l;switch(t){case"top":l=r.top;break;case"bottom":l=r.top+n-s;break;case"middle":l=r.top-(s-n)/2;break;default:if(r.top<i)l=r.top;else if(r.top+n>i+s)l=r.top+n-s;else return}this.scrollController.scrollToY(Math.max(0,l))}ensureColumnVisible(e){let t=this.store.get("columns").filter(h=>h.visible!==!1),o=t.find(h=>h.colId===e);if(!o||o.pinned==="left"||o.pinned==="right")return;let r=t.filter(h=>h.pinned!=="left"&&h.pinned!=="right"),n=r.findIndex(h=>h.colId===e);if(n<0)return;let l=(this.store.get("groupedColumnIds").length>0?ce:0)+this.colStyles.getTotalWidth(r.slice(0,n).map(h=>h.colId)),a=this.colStyles.getWidth(e),c=this.scrollController.getScrollLeft(),p=this.scrollController.getCenterViewportWidth();l<c?this.scrollController.scrollToX(l):l+a>c+p&&this.scrollController.scrollToX(l+a-p)}enterFullScreen(){this.wrapperEl&&(this.wrapperEl.requestFullscreen?.(),this.wrapperEl.classList.add("pg-grid--fullscreen"),this.store.set("fullScreen",!0))}exitFullScreen(){document.fullscreenElement===this.wrapperEl&&document.exitFullscreen?.(),this.wrapperEl?.classList.remove("pg-grid--fullscreen"),this.store.set("fullScreen",!1)}destroy(){this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null);for(let e of this.unsubscribers)e();this.unsubscribers=[],this.headerRenderer.destroy(),this.columnChooser?.destroy(),this.bodyRenderer.destroy(),this.footerRenderer.destroy(),this.overlayRenderer.destroy(),this.detailRowRenderer?.destroy(),this.photonAIPanel?.destroy(),this.tooltipController.destroy(),this.scrollController.destroy(),this.groupDropZone?.destroy(),this.rowDragRenderer?.destroy(),this.groupDragHandler?.destroy(),this.rowPositionSheet.destroy(),this.rowAnimator.destroy(),this.colStyles.destroy(),this.autoScroller?.stop(),this.autoScroller=null,this.wrapperEl?.remove(),this.wrapperEl=null}buildLayout(){this.wrapperEl=y("pg-grid"),this.wrapperEl.setAttribute("role","grid");let e=this.generateId();this.wrapperEl.setAttribute("data-photon-grid-id",e),this.colStyles.setScopeId(e),this.masterDetailEnabledAtConstruction&&this.wrapperEl.classList.add("pg-grid--has-master-detail"),this.options.showVerticalBorders||this.wrapperEl.classList.add("pg-grid--no-v-borders"),this.options.rowHeightMode==="auto"&&this.wrapperEl.classList.add("pg-grid--auto-row-height"),this.containerEl.appendChild(this.wrapperEl),this.options.headerRowHeight&&this.wrapperEl.style.setProperty("--pg-header-row-height",`${this.options.headerRowHeight}px`),this.options.filterRowHeight&&this.wrapperEl.style.setProperty("--pg-filter-row-height",`${this.options.filterRowHeight}px`);let t=y("pg-grid-outer");this.wrapperEl.appendChild(t);let o=y("pg-grid-main");t.appendChild(o),this.groupDropZone&&this.groupDropZone.mount(t,o);let r=y("pg-grid__header");o.appendChild(r);let n=y("pg-panel pg-panel--left"),i=y("pg-panel__header");n.appendChild(i),r.appendChild(n),this.leftHeaderPanelEl=i;let s=y("pg-panel pg-panel--center"),l=y("pg-panel__header"),a=y("pg-panel__header-inner");l.appendChild(a),s.appendChild(l),r.appendChild(s),this.centerHeaderInnerEl=a;let c=y("pg-panel pg-panel--right"),p=y("pg-panel__header");c.appendChild(p),r.appendChild(c),this.rightHeaderPanelEl=p;let h=y("pg-header-vscroll-spacer");r.appendChild(h);let u=y("pg-grid__body");o.appendChild(u),this.bodyWrapEl=u;let m=y("pg-panel pg-panel--left"),g=y("pg-panel__body"),f=y("pg-panel__content");g.appendChild(f),m.appendChild(g),u.appendChild(m),this.leftBodyPanelEl=m,this.leftBodyContentEl=f;let C=y("pg-panel pg-panel--center"),b=y("pg-panel__body"),v=y("pg-panel__content");b.appendChild(v),C.appendChild(b),u.appendChild(C),this.centerBodyEl=b,this.centerBodyContentEl=v;let w=y("pg-panel pg-panel--right"),E=y("pg-panel__body"),R=y("pg-panel__content");E.appendChild(R),w.appendChild(E),u.appendChild(w),this.rightBodyPanelEl=w,this.rightBodyContentEl=R;let I=y("pg-scrollbar-v-native"),S=y("pg-scrollbar-v-spacer");I.appendChild(S),u.appendChild(I);let T=I.offsetWidth;this.wrapperEl.style.setProperty("--pg-scrollbar-v-width",`${T}px`);let k=y("pg-scrollbar-h-row"),L=y("pg-scrollbar-h-spacer pg-scrollbar-h-spacer--left"),_=y("pg-scrollbar-h-native"),V=y("pg-scrollbar-h-content");_.appendChild(V);let z=y("pg-scrollbar-h-spacer pg-scrollbar-h-spacer--right"),F=y("pg-scrollbar-h-spacer pg-scrollbar-h-spacer--vscroll");k.appendChild(L),k.appendChild(_),k.appendChild(z),k.appendChild(F),o.appendChild(k),this.options.showFooter!==!1&&this.options.pagination?.enabled&&(this.footerContainerEl=y("pg-grid__footer"),this.wrapperEl.appendChild(this.footerContainerEl)),this.scrollController.mount(this.wrapperEl,u,b,I,S,_,V,k),this.scrollController.setGestureGuard(()=>this.headerRenderer.isBusy||(this.groupDragHandler?.isDragging??!1)||(this.displayGroupEngine?.isDraggingGroup??!1)),this.scrollController.onScrollY(()=>this.scheduleRender()),this.scrollController.onScrollX(()=>this.scheduleRender()),this.headerRenderer.setScrollCallback(D=>this.scrollController.scrollToX(this.scrollController.getScrollLeft()+D),D=>D<0?this.scrollController.canScrollLeft():this.scrollController.canScrollRight()),this.headerRenderer.setResizeCallback(()=>this.scheduleRender()),this.overlayRenderer.mount(u),this.detailRowRenderer&&this.detailRowRenderer.mount(u),(this.masterDetailEnabledAtConstruction||this.treeDataEnabledAtConstruction)&&this.buildStickyLayer(u),this.photonAIPanel&&this.photonAIPanel.mount(u,this.options.photonAI),this.tooltipController.mount(u),this.cellSelectionEngine.attach(v),this.bodyRenderer.setPanels(f,v,R);let K=[f,v,R];this.leftStickyRowEl&&K.push(this.leftStickyRowEl),this.centerStickyRowEl&&K.push(this.centerStickyRowEl),this.rightStickyRowEl&&K.push(this.rightStickyRowEl),this.cellSelectionEngine.setBodyPanels(K),this.cellSelectionEngine.setScrollToCellCallback((D,H)=>this.scrollToCell(D,H)),this.cellSelectionEngine.setGetViewportRowCountCallback(()=>{let D=this.scrollController.getViewportHeight(),H=this.options.rowHeight??48;return Math.max(1,Math.floor(D/H))}),this.cellSelectionEngine.setDataChangedCallback(D=>{D&&D.size>0?this.invalidateBodyRowsByIds(D):this.invalidateBodyRows()}),this.headerRenderer.setOpenFilterPanelCallback((D,H)=>this.openFilterPanel(D,H)),this.columnChooser=new Ze(this.columnModel,this.iconRenderer),this.headerRenderer.setColumnChooserCallback(()=>{this.columnChooser?.open(this.options.columns??[])}),this.headerRenderer.setColumnDataRefreshCallback(()=>this.filterRefreshFn?.()),this.autoScroller=new Jt(()=>this.bodyWrapEl?.getBoundingClientRect()??null,D=>this.scrollController.scrollToY(this.scrollController.getScrollTop()+D),D=>this.scrollController.scrollToX(this.scrollController.getScrollLeft()+D),(D,H)=>{if(this.cellSelectionEngine.isSelecting){let Z=document.elementFromPoint(D,H)?.closest("[data-row-index][data-col-index]");if(!Z||!Z.hasAttribute("data-col-id"))return;let ct=Number(Z.getAttribute("data-row-index")),pt=Number(Z.getAttribute("data-col-index"));!isNaN(ct)&&!isNaN(pt)&&this.cellSelectionEngine.extendSelection(ct,pt)}else this.cellSelectionEngine.updateFillPosition(D,H)}),this.cellSelectionEngine.setFillDragScrollCallback((D,H)=>this.autoScroller.updateMouse(D,H)),this.cellSelectionEngine.setFillDragEndCallback(()=>this.autoScroller?.stop()),this.cellSelectionEngine.setDragViewportRectCallback(()=>this.bodyWrapEl?.getBoundingClientRect()??null),u.addEventListener("pointermove",D=>{if(!this.cellSelectionEngine.isSelecting||J(D))return;if(D.buttons===0){this.cellSelectionEngine.endSelection(),this.autoScroller?.stop();return}this.autoScroller?.updateMouse(D.clientX,D.clientY);let H=D.target.closest("[data-row-index][data-col-index]");if(!H||!H.hasAttribute("data-col-id"))return;let te=Number(H.getAttribute("data-row-index")),Z=Number(H.getAttribute("data-col-index"));!isNaN(te)&&!isNaN(Z)&&this.cellSelectionEngine.extendSelection(te,Z)}),u.addEventListener("pointerup",()=>{this.cellSelectionEngine.endSelection(),this.autoScroller?.stop()});let ie=()=>{this.cellSelectionEngine.isSelecting&&this.cellSelectionEngine.endSelection(),this.autoScroller?.stop()};document.addEventListener("pointerup",ie),this.unsubscribers.push(()=>document.removeEventListener("pointerup",ie))}buildStickyLayer(e){let t=y("pg-sticky-layer");this.leftStickyRowEl=y("pg-sticky-layer__left"),t.appendChild(this.leftStickyRowEl);let o=y("pg-sticky-layer__center");this.centerStickyRowEl=y("pg-sticky-layer__center-inner"),o.appendChild(this.centerStickyRowEl),t.appendChild(o),this.rightStickyRowEl=y("pg-sticky-layer__right"),t.appendChild(this.rightStickyRowEl),e.appendChild(t),this.bodyRenderer.setStickyContainers(this.leftStickyRowEl,this.centerStickyRowEl,this.rightStickyRowEl)}performRender(){let e=this.store.get("visibleRows"),t=this.store.get("columns"),o=this.store.get("groupedColumnIds"),r=this.store.get("loading"),n=t.filter(M=>M.visible!==!1),i=n.filter(M=>M.pinned==="left"),s=n.filter(M=>M.pinned!=="left"&&M.pinned!=="right"),l=n.filter(M=>M.pinned==="right"),a=this.options.rowHeight??48,c=this.wrapperEl,p=t!==this._lastColumnsRef,h=o!==this._lastGroupedIdsRef,u=o.length>0,m=u?t.find(M=>M.colId===o[o.length-1])??null:null;if(p||h){this._lastColumnsRef=t,this._lastGroupedIdsRef=o,this.colStyles.initFromColumns(n);let M=this.options.showCheckboxes?En:0,G=this.options.showSerialNumber?Rn:0,O=this.colStyles.getTotalWidth(i.map(U=>U.colId)),A=this.colStyles.getTotalWidth(l.map(U=>U.colId)),W=M>0||G>0||i.length>0,X=l.length>0;c.style.setProperty("--pg-left-panel-width",W?`${M+G+O}px`:"0px"),c.style.setProperty("--pg-right-panel-width",X?`${A+2}px`:"0px"),this.leftBodyPanelEl&&(this.leftBodyPanelEl.style.setProperty("display",W?"":"none"),this.leftHeaderPanelEl?.parentElement&&this.leftHeaderPanelEl.parentElement.style.setProperty("display",W?"":"none")),this.rightBodyPanelEl&&(this.rightBodyPanelEl.style.setProperty("display",X?"":"none"),this.rightHeaderPanelEl?.parentElement&&this.rightHeaderPanelEl.parentElement.style.setProperty("display",X?"":"none"));let se=s.map(U=>U.colId);if(this.colStyles.hasFlex(se)){let U=this.centerBodyEl?.clientWidth??0;U>0&&(this.colStyles.resolveFlex(se,U),this._lastFlexResolvedWidth=U)}let Se=this.colStyles.getTotalWidth(se)+(u?ce:0);this._cachedCenterW=Se,c.style.setProperty("--pg-center-content-width",`${Se}px`)}else if(this.colStyles.hasFlex(s.map(M=>M.colId))){let M=s.map(O=>O.colId),G=this.centerBodyEl?.clientWidth??0;if(G>0&&Math.abs(G-this._lastFlexResolvedWidth)>1){this.colStyles.resolveFlex(M,G),this._lastFlexResolvedWidth=G;let O=this.colStyles.getTotalWidth(M)+(u?ce:0);this._cachedCenterW=O,c.style.setProperty("--pg-center-content-width",`${O}px`)}}if(e!==this._lastRowsRef){this._lastRowsRef=e;let M=0;for(let G of e)M+=G.height??a;this._cachedTotalHeight=M,c.style.setProperty("--pg-content-height",`${M}px`),this.scrollController.updateSizes(M,this._cachedCenterW)}else if(p||h)this.scrollController.updateSizes(this._cachedTotalHeight,this._cachedCenterW);else if(this.headerRenderer.isResizingColumn){let M=this.options.showCheckboxes?En:0,G=this.options.showSerialNumber?Rn:0,O=this.colStyles.getTotalWidth(i.map(U=>U.colId)),A=this.colStyles.getTotalWidth(l.map(U=>U.colId)),W=M>0||G>0||i.length>0,X=l.length>0;c.style.setProperty("--pg-left-panel-width",W?`${M+G+O}px`:"0px"),c.style.setProperty("--pg-right-panel-width",X?`${A+2}px`:"0px");let se=s.map(U=>U.colId),Se=this.colStyles.getTotalWidth(se)+(u?ce:0);this._cachedCenterW=Se,c.style.setProperty("--pg-center-content-width",`${Se}px`),this.scrollController.updateSizes(this._cachedTotalHeight,Se)}if(r){this.overlayRenderer.showLoading(this.options.loadingOverlayText);return}this.overlayRenderer.hideLoading(),e.length===0?this.overlayRenderer.showNoRows(this.options.noRowsOverlayHtml,this.options.noRowsOverlayText):this.overlayRenderer.hideNoRows();let f=this.scrollController.getScrollLeft(),C=this.centerBodyEl?.clientWidth??800,b=u?ce:0,v=s.length,w=0;for(let M=0;M<s.length;M++){let G=this.colStyles.getWidth(s[M].colId),O=b;b+G>f&&v>M&&(v=M),O<f+C&&(w=M+1),b+=G}v===s.length&&(v=0,w=0);let E=this.headerRenderer.isDraggingCol,R=this.displayGroupEngine?.isDraggingGroup??!1,I=E||R?s.length:ns,S=Math.max(0,v-I),T=Math.min(s.length,w+I),k=this.colStyles.getTotalWidth(s.slice(0,S).map(M=>M.colId)),L=this.colStyles.getTotalWidth(s.slice(T).map(M=>M.colId)),_=s.slice(S,T),V={showCheckboxes:this.options.showCheckboxes,showSerialNumber:this.options.showSerialNumber,showColumnMenu:this.options.showColumnMenu!==!1,showFilterRow:this.options.showFilterRow,headerRowHeight:this.options.headerRowHeight,filterRowHeight:this.options.filterRowHeight,hasGroupedColumns:u,autoGroupColWidth:ce};!this.headerRendered&&this.leftHeaderPanelEl&&this.centerHeaderInnerEl&&this.rightHeaderPanelEl&&(this.headerRenderer.renderInPanels(this.leftHeaderPanelEl,this.centerHeaderInnerEl,this.rightHeaderPanelEl,n,V),this.headerRendered=!0),(S!==this.lastCenterColStart||T!==this.lastCenterColEnd)&&(this.headerRenderer.updateCenterVisibleCols(_,k,L,V),this.lastCenterColStart=S,this.lastCenterColEnd=T);let z=this.scrollController.getScrollTop(),F=this.centerBodyEl?.clientHeight??400,K=this.options.virtualScroll?.rowBuffer??rs,ie=this.rowAnimator.hasPending()?Math.ceil(F/a):0,D=this.options.rowHeightMode==="auto",H,te;if(D){let M=(K+ie)*a,G=z-M,O=z+F+M;H=0,te=e.length;for(let A=0;A<e.length;A++)if(e[A].top+(e[A].height??a)>=G){H=A;break}for(let A=H;A<e.length;A++)if(e[A].top>O){te=A;break}}else H=Math.max(0,Math.floor(z/a)-K-ie),te=Math.min(e.length,Math.ceil((z+F)/a)+K+ie);let Z=null,ct=0,pt=[];if(this.masterDetailEnabledAtConstruction){let M=this.stickyRowTracker.compute(e,z,a,H);Z=M.nodeId,ct=M.offsetPx,H=M.minStart}else if(this.treeExpansionService){let M=this.treeStickyRowTracker.compute(e,z,a,H);pt=M.entries,H=M.minStart}this.stickyNodeId=Z,this.rowPositionSheet.update(e.slice(H,te).map(M=>({nodeId:M.nodeId,top:M.top,height:D?a:M.height??a})),D);let Re=e.slice(H,te),Jn=this.masterDetailEngine?.isEnabled()?{toggleColumnId:this.masterDetailEngine.getConfig()?.toggleColumnId??n[0]?.colId??"",isExpandedFn:M=>this.masterDetailEngine.isExpanded(M),hasDetailFn:M=>this.masterDetailEngine.hasDetail(M)}:void 0,Qn=this.treeExpansionService?{toggleColumnId:this.treeToggleColumnId??n[0]?.colId??"",isExpandedFn:M=>this.treeExpansionService.isExpanded(M)}:void 0;if(this.headerRenderer.isResizingColumn?this.bodyRenderer.syncCenterRange(S,S+_.length):this.bodyRenderer.renderRows(Re,i,_,l,{showCheckboxes:this.options.showCheckboxes,showSerialNumber:this.options.showSerialNumber,showVerticalBorders:this.options.showVerticalBorders,rowShading:this.options.rowShading,rowHeight:this.options.rowHeight,dateFormat:this.options.dateFormat,timeZone:this.options.timeZone,currencySymbol:this.options.currencySymbol,locale:this.options.locale,api:null,showGroupsColumn:u,autoGroupColWidth:ce,leafGroupColDef:m,allLeafColumns:t,centerColStart:S,centerLeftSpacerW:k,centerRightSpacerW:L,totalCenterCols:s.length,masterDetail:Jn,treeData:Qn}),this.detailRowRenderer){let M=new Set(e.filter(O=>O.type==="detail").map(O=>O.nodeId)),G=Re.filter(O=>O.type==="detail");this.detailRowRenderer.sync(G,M)}if(this.masterDetailEnabledAtConstruction?this.bodyRenderer.setStickyRows(Z?[{nodeId:Z,top:ct}]:[]):this.treeExpansionService&&this.bodyRenderer.setStickyRows(pt),this.rowAnimator.hasPending()){let M=[this.leftBodyContentEl,this.centerBodyContentEl,this.rightBodyContentEl].filter(Boolean);this.rowAnimator.animate(M,Re,F)}if(D){let M=new Map(Re.map(A=>[A.nodeId,A])),G=new Map;for(let A of[this.leftBodyContentEl,this.centerBodyContentEl,this.rightBodyContentEl])if(A)for(let W of A.querySelectorAll("[data-node-id]")){let X=W.getAttribute("data-node-id");if(!X)continue;let se=W.offsetHeight;se>0&&G.set(X,Math.max(G.get(X)??0,se))}let O=!1;for(let[A,W]of G){let X=M.get(A);X&&W!==X.height&&(X.height=W,O=!0)}if(O){let A=0;for(let W of e)W.top=A,A+=W.height??a;this.rowPositionSheet.update(Re.map(W=>({nodeId:W.nodeId,top:W.top,height:a})),!0),this._cachedTotalHeight=A,c.style.setProperty("--pg-content-height",`${A}px`),this.scrollController.updateSizes(A,this._cachedCenterW)}}this.store.set("firstRenderedRowIndex",H),this.store.set("lastRenderedRowIndex",te),this.footerContainerEl&&(this.footerContainerEl.hasChildNodes()?this.footerRenderer.updatePaginationState():this.footerRenderer.render(this.footerContainerEl,{showPagination:this.options.pagination?.enabled,showRowCount:!0,footerHeight:this.options.footerRowHeight})),(this.store.get("cellRanges").length>0||this.store.get("activeCell")!==null)&&this.cellSelectionEngine.applySelectionClasses(),this.eventBus.emit(x.ROWS_RENDERED,{renderedCount:Re.length})}subscribeToStore(){this.unsubscribers.push(this.store.watch("visibleRows",()=>this.scheduleRender()),this.store.watch("loading",()=>this.scheduleRender()),this.store.watch("columns",()=>{if(this.headerRenderer.isDraggingCol||this.displayGroupEngine?.isDraggingGroup){this.wrapperEl?.classList.add("pg-grid--drag-preview-sync"),this.lastCenterColStart=-1,this.lastCenterColEnd=-1,this.bodyRenderer.clear(),this.scheduleRender(),requestAnimationFrame(()=>{this.wrapperEl?.classList.remove("pg-grid--drag-preview-sync")});return}this.headerRendered=!1,this.lastCenterColStart=-1,this.lastCenterColEnd=-1,this.leftHeaderPanelEl&&(this.leftHeaderPanelEl.innerHTML=""),this.centerHeaderInnerEl&&(this.centerHeaderInnerEl.innerHTML=""),this.rightHeaderPanelEl&&(this.rightHeaderPanelEl.innerHTML=""),this.headerRenderer.destroy(),this.rewireGroupModelIntoHeaderRenderer(),this.bodyRenderer.clear(),this.scheduleRender()}),this.store.watch("groupedColumnIds",()=>{this.groupDropZone?.update()}),this.store.watch("filterModel",e=>{let t=new Set(Object.keys(e));this.headerRenderer.updateFilterIndicators(t)}),this.store.watch("scrollTop",()=>this.scheduleRender()),this.store.watch("selectedRowIds",e=>{let t=this.store.get("visibleRows");for(let o of t)this.bodyRenderer.updateRowSelection(o.nodeId,e.has(o.nodeId))}),this.store.watch("isAllSelected",e=>{let t=this.store.get("isIndeterminate");this.headerRenderer.updateAllChecked(e,t)}),this.store.watch("cellRanges",()=>{this.cellSelectionEngine.applySelectionClasses()}),this.store.watch("activeCell",()=>{this.cellSelectionEngine.applySelectionClasses()})),this.eventBus.on(x.ALL_ROWS_SELECTED,e=>{let t=e;t?.action==="selectAll"?this.rowSelectionEngine.selectAll(this.store.get("allRows")):t?.action==="deselectAll"&&this.rowSelectionEngine.deselectAll(this.store.get("allRows"))}),this.eventBus.on(x.CELL_CLICKED,e=>{let t=e;t.event.shiftKey?this.cellSelectionEngine.extendSelection(t.rowIndex,t.colIndex):t.event.ctrlKey||t.event.metaKey?this.cellSelectionEngine.addRangeCell(t.rowIndex,t.colIndex):this.cellSelectionEngine.startSelection(t.rowIndex,t.colIndex)}),this.eventBus.on(x.CELL_CONTEXT_MENU,e=>{let t=e;this.cellSelectionEngine.isCellSelected(t.rowIndex,t.colIndex)||this.cellSelectionEngine.startSelection(t.rowIndex,t.colIndex),this.cellSelectionEngine.showContextMenu(t.x,t.y)})}handleGroupToggle(e){if(this.displayGroupEngine){this.displayGroupEngine.toggleGroup(e);return}if(!this.columnGroupModel)return;let t=this.columnGroupModel.getGroup(e);if(!t)return;let o=t.collapsed;this.columnGroupModel.toggleGroup(e);let r=!o,n=this.columnGroupModel.getLeavesInGroup(e);for(let i=0;i<n.length;i++){let s=!r||i===0;this.columnModel.setColumnVisible(n[i].colId,s)}}handleGroupResize(e,t){if(this.displayGroupEngine){this.displayGroupEngine.resizeGroup(e,t),this.scheduleRender();return}if(!this.columnGroupModel||!this.columnGroupModel.getGroup(e))return;let r=this.columnGroupModel.computeGroupWidth(e,this.colStyles);if(r<=0||Math.abs(t-r)<1)return;let n=t/r,i=this.columnGroupModel.getLeavesInGroup(e);for(let s of i){let l=this.colStyles.getWidth(s.colId),a=Math.max(s.minWidth??40,Math.round(l*n));this.colStyles.setWidth(s.colId,a),this.columnModel.setColumnWidth(s.colId,a,!1)}this.scheduleRender()}rewireGroupModelIntoHeaderRenderer(){if(this.displayGroupEngine){this.headerRenderer.setDisplayGroupEngine(this.displayGroupEngine),this.headerRenderer.setGroupToggleCallback(e=>this.handleGroupToggle(e)),this.headerRenderer.setGroupResizeCallback((e,t)=>this.handleGroupResize(e,t));return}!this.columnGroupModel||!this.groupHeaderBuilder||(this.headerRenderer.setColumnGroupModel(this.columnGroupModel,this.groupHeaderBuilder),this.headerRenderer.setGroupToggleCallback(e=>this.handleGroupToggle(e)),this.headerRenderer.setGroupResizeCallback((e,t)=>this.handleGroupResize(e,t)),this.groupDragHandler&&(this.groupHeaderBuilder.setDragConfig(this.groupDragHandler,()=>this.wrapperEl),this.headerRenderer.setGroupDragHandler(this.groupDragHandler)))}rebuildHeader(){this.headerRendered=!1,this.lastCenterColStart=-1,this.lastCenterColEnd=-1,this.leftHeaderPanelEl&&(this.leftHeaderPanelEl.innerHTML=""),this.centerHeaderInnerEl&&(this.centerHeaderInnerEl.innerHTML=""),this.rightHeaderPanelEl&&(this.rightHeaderPanelEl.innerHTML=""),this.headerRenderer.destroy(),this.rewireGroupModelIntoHeaderRenderer(),this.scheduleRender()}generateId(){return`pg_${Math.random().toString(36).slice(2,9)}`}};var nt=class{constructor(e,t){this.columnModel=e;this.groupModel=t}getState(){return{groups:this.groupModel.serialize(),columnStates:this.columnModel.getColumnStates()}}applyState(e){e.groups!==void 0&&this.groupModel.deserialize(e.groups),e.columnStates!==void 0&&this.columnModel.applyColumnStates(e.columnStates)}diffState(e,t){let o=this.colStatesWidthChanged(e.columnStates,t.columnStates),r=this.colStatesVisibilityChanged(e.columnStates,t.columnStates),n=this.colStatesPinChanged(e.columnStates,t.columnStates),i=this.colStatesOrderChanged(e.columnStates,t.columnStates),s=this.groupStatesChanged(e.groups,t.groups);return{widthChanged:o,visibilityChanged:r,pinChanged:n,orderChanged:i,groupStateChanged:s,anyChanged:o||r||n||i||s}}getGroupStates(){return this.groupModel.serialize()}applyGroupStates(e){this.groupModel.deserialize(e)}getColumnStates(){return this.columnModel.getColumnStates()}applyColumnStates(e){this.columnModel.applyColumnStates(e)}colStatesWidthChanged(e,t){return e.length!==t.length?!0:e.some((o,r)=>o.width!==t[r]?.width)}colStatesVisibilityChanged(e,t){return e.length!==t.length?!0:e.some((o,r)=>o.visible!==t[r]?.visible)}colStatesPinChanged(e,t){return e.length!==t.length?!0:e.some((o,r)=>o.pinned!==t[r]?.pinned)}colStatesOrderChanged(e,t){return e.length!==t.length?!0:e.some((o,r)=>o.colId!==t[r]?.colId)}groupStatesChanged(e,t){if(e.length!==t.length)return!0;let o=new Map(t.map(r=>[r.groupId,r.collapsed]));return e.some(r=>{let n=o.get(r.groupId);return n===void 0||n!==r.collapsed})}};var it=class{constructor(e){this.ctx=e;this._columnGroupModel=null;this._groupStateManager=null;this._pendingTransactions=[];this._txnFlushHandle=null;this.ctx.renderer.setFilterEngine(this.ctx.filterEngine),this.ctx.renderer.setFilterRefreshCallback(()=>this.refresh())}setColumnGroupModel(e){this._columnGroupModel=e,this._groupStateManager=new nt(this.ctx.columnModel,e)}setData(e){let t=this.ctx.options.rowHeight??48;this.ctx.rowModel.setRowData(e,t),this.ctx.undoRedoEngine.clear(),this.refresh()}appendData(e){this.ctx.rowModel.appendRowData(e),this.refresh()}updateRow(e,t){this.ctx.rowModel.updateRow(e,t),this.refresh()}removeRows(e){this.ctx.rowModel.removeRows(e),this.refresh()}getRowNode(e){return this.ctx.rowModel.getRowNode(e)}getRowByIndex(e){return this.ctx.rowModel.getRowByIndex(e)}getAllRows(){return this.ctx.store.get("allRows")}getVisibleRows(){return this.ctx.store.get("visibleRows")}setColumns(e){this.ctx.columnModel.initColumns(e),this.refresh()}getColumn(e){return this.ctx.columnModel.getColumn(e)}getAllColumns(){return this.ctx.columnModel.getAllColumns()}getVisibleColumns(){return this.ctx.columnModel.getVisibleColumns()}setColumnWidth(e,t){this.ctx.columnModel.setColumnWidth(e,t,!0)}setColumnVisible(e,t){this.ctx.columnModel.setColumnVisible(e,t)}setColumnPin(e,t){this.ctx.columnModel.setColumnPin(e,t)}moveColumn(e,t){this.ctx.columnModel.moveColumn(e,t)}autoSizeColumn(e){this.ctx.columnModel.autoSizeColumn(e,this.ctx.containerEl)}autoSizeAllColumns(){for(let e of this.ctx.columnModel.getVisibleColumns())this.ctx.columnModel.autoSizeColumn(e.colId,this.ctx.containerEl)}getColumnStates(){return this.ctx.columnModel.getColumnStates()}applyColumnStates(e){this.ctx.columnModel.applyColumnStates(e)}sortColumn(e,t){let o=this.ctx.columnModel.getColumn(e);o&&(this.ctx.sortEngine.sort(e,o.field,t),this.ctx.columnModel.setColumnSort(e,t),this.refresh())}clearSort(){this.ctx.sortEngine.clearSort(),this.ctx.columnModel.clearAllSort(),this.refresh()}getSortConfig(){return this.ctx.sortEngine.getSortConfig()}setFilterModel(e){this.ctx.filterEngine.setFilterModel(e),this.refresh()}setColumnFilter(e,t){this.ctx.filterEngine.setColumnFilter(e,t),this.refresh()}clearAllFilters(){this.ctx.filterEngine.clearAllFilters(),this.refresh()}setQuickFilter(e,t){let o=this.ctx.store.get("visibleRows");o.length>0&&this.ctx.renderer.captureRowAnimation(o,"filter"),this.ctx.filterEngine.setQuickFilter({term:e,fields:t}),this.refresh()}getFilterModel(){return this.ctx.filterEngine.getFilterModel()}selectRow(e){let t=this.ctx.store.get("visibleRows");this.ctx.rowSelectionEngine.selectRow(e,t)}deselectRow(e){let t=this.ctx.store.get("visibleRows");this.ctx.rowSelectionEngine.deselectRow(e,t)}selectAll(){let e=this.ctx.store.get("visibleRows");this.ctx.rowSelectionEngine.selectAll(e)}deselectAll(){let e=this.ctx.store.get("visibleRows");this.ctx.rowSelectionEngine.deselectAll(e)}getSelectedRows(){let e=this.ctx.store.get("visibleRows");return this.ctx.rowSelectionEngine.getSelectedRows(e)}getSelectedCount(){return this.ctx.rowSelectionEngine.getSelectedCount()}isRowSelected(e){return this.ctx.rowSelectionEngine.isRowSelected(e)}setCellRange(e){this.ctx.store.set("cellRanges",[e]),this.ctx.cellSelectionEngine.startSelection(e.startRowIndex,e.startColIndex),this.ctx.cellSelectionEngine.extendSelection(e.endRowIndex,e.endColIndex)}clearCellSelection(){this.ctx.cellSelectionEngine.clearSelection()}getCellRanges(){return this.ctx.store.get("cellRanges")}startCellEditing(e,t){let o=this.ctx.rowModel.getRowNode(e),r=this.ctx.columnModel.getColumn(t);if(!o||!r)return;let n=this.ctx.containerEl.querySelector(`[data-node-id="${e}"] [data-col-id="${t}"]`);n&&this.ctx.cellEditorEngine.startEditing(o,r,n)}stopEditing(e=!1){this.ctx.cellEditorEngine.stopEditing(e)}goToPage(e){this.ctx.paginationEngine.goToPage(e),this.refresh()}setPageSize(e){this.ctx.paginationEngine.setPageSize(e),this.refresh()}getCurrentPage(){return this.ctx.paginationEngine.getCurrentPage()}getTotalPages(){return this.ctx.paginationEngine.getTotalPages()}groupByColumn(e){this.ctx.groupingEngine.addGroupColumn(e),this.refresh()}removeGroupColumn(e){this.ctx.groupingEngine.removeGroupColumn(e),this.refresh()}clearGrouping(){this.ctx.groupingEngine.clearGrouping(),this.refresh()}expandGroup(e){this.ctx.groupingEngine.expandGroup(e),this.refresh()}collapseGroup(e){this.ctx.groupingEngine.collapseGroup(e),this.refresh()}expandAllGroups(){this.ctx.groupingEngine.expandAllGroups(this.ctx.store.get("visibleRows")),this.refresh()}collapseAllGroups(){this.ctx.groupingEngine.collapseAllGroups(),this.refresh()}expandTreeNode(e){let t=this.ctx.treeDataService.getNode(e);t&&(this.ctx.treeExpansionService.expand(t),this.refresh())}collapseTreeNode(e){let t=this.ctx.treeDataService.getNode(e);t&&(this.ctx.treeExpansionService.collapse(t),this.refresh())}toggleTreeNode(e){let t=this.ctx.treeDataService.getNode(e);t&&(this.ctx.treeExpansionService.toggle(t),this.refresh())}expandAllTreeNodes(){this.ctx.treeExpansionService.expandAll(this.ctx.treeDataService.getRoots()),this.refresh()}collapseAllTreeNodes(){this.ctx.treeExpansionService.collapseAll(),this.refresh()}isTreeNodeExpanded(e){return this.ctx.treeExpansionService.isExpanded(e)}getTreeNodeChildren(e){return this.ctx.treeDataService.getNode(e)?.children??[]}loadTreeNodeChildren(e){this.ctx.treeDataService.loadChildren(e)}expandDetail(e){let t=this.ctx.rowModel.getRowNode(e);t&&(this.ctx.masterDetailEngine.expand(t),this.refresh())}collapseDetail(e){let t=this.ctx.rowModel.getRowNode(e);t&&(this.ctx.masterDetailEngine.collapse(t),this.refresh())}toggleDetail(e){let t=this.ctx.rowModel.getRowNode(e);t&&(this.ctx.masterDetailEngine.toggle(t),this.refresh())}isDetailExpanded(e){return this.ctx.masterDetailEngine.isExpanded(e)}collapseAllDetails(){this.ctx.masterDetailEngine.collapseAll(this.ctx.store.get("allRows")),this.refresh()}getDetailGridApi(e){return this.ctx.renderer.getDetailGridApi(e)}submitAICommand(e){return this.ctx.renderer.submitAICommand(e)}submitAICommandAsync(e){return this.ctx.renderer.submitAICommandAsync(e)}collapseColumnGroup(e){if(!this._columnGroupModel)return;this._columnGroupModel.collapseGroup(e);let t=this._columnGroupModel.getLeavesInGroup(e);for(let o of t)this.ctx.columnModel.setColumnVisible(o.colId,!1)}expandColumnGroup(e){if(!this._columnGroupModel)return;this._columnGroupModel.expandGroup(e);let t=this._columnGroupModel.getLeavesInGroup(e);for(let o of t)this.ctx.columnModel.setColumnVisible(o.colId,!0)}toggleColumnGroup(e){if(!this._columnGroupModel)return;let t=this._columnGroupModel.getGroup(e);t&&(t.collapsed?this.expandColumnGroup(e):this.collapseColumnGroup(e))}moveColumnGroup(e,t,o){this._columnGroupModel&&(this._columnGroupModel.moveGroup(e,t,o),this.refresh())}getColumnGroupState(){return this._groupStateManager?.getState()??null}applyColumnGroupState(e){this._groupStateManager&&(this._groupStateManager.applyState(e),this.refresh())}getColumnGroupStates(){return this._groupStateManager?.getGroupStates()??[]}getColumnTree(){return this._columnGroupModel?.getRootNodes()??null}exportCsv(e){this.ctx.exportEngine.exportToCsv(this.ctx.store.get("visibleRows"),this.ctx.columnModel.getVisibleColumns(),{fileName:e??this.ctx.options.exportConfig?.fileName??"export"})}exportXlsx(e){this.ctx.exportEngine.exportToXlsx(this.ctx.store.get("visibleRows"),this.ctx.columnModel.getVisibleColumns(),{fileName:e??this.ctx.options.exportConfig?.fileName??"export"})}copySelectedRowsToClipboard(){let e=this.getSelectedRows(),t=this.ctx.columnModel.getVisibleColumns();return this.ctx.clipboardEngine.copyRowsToClipboard(e,t)}copySelectedCellsToClipboard(){let e=this.getCellRanges();if(e.length===0)return Promise.resolve();let t=this.getVisibleRows(),o=this.ctx.columnModel.getVisibleColumns();return this.ctx.clipboardEngine.copyRangesToClipboard(e,t,o,!0)}scrollToRow(e){this.ctx.renderer.scrollToRow(e)}scrollToTop(){this.ctx.renderer.scrollToTop()}canScrollUp(){return this.ctx.renderer.canScrollUp()}canScrollDown(){return this.ctx.renderer.canScrollDown()}setTheme(e){this.ctx.themeManager.applyTheme(e,this.ctx.containerEl)}toggleDarkMode(){this.ctx.themeManager.toggleDarkMode()}enterFullScreen(){this.ctx.renderer.enterFullScreen()}exitFullScreen(){this.ctx.renderer.exitFullScreen()}createChart(e,t){let o=this.ctx.store.get("visibleRows"),r=this.ctx.columnModel.getVisibleColumns();return this.ctx.chartEngine.createChart(e,t,o,r)}destroyChart(e){this.ctx.chartEngine.destroyChart(e)}exportChartAsImage(e,t="png"){return this.ctx.chartEngine.exportChartAsImage(e,t)}createRangeChart(e){return this.ctx.rangeChartService?.createRangeChart(e)??""}getChartModels(){return this.ctx.rangeChartService?.getChartModels()??[]}updateChart(e){this.ctx.rangeChartService?.updateChart(e)}restoreChart(e){return this.ctx.rangeChartService?.restoreChart(e)??""}getChartImageDataURL(e,t="png"){return this.ctx.rangeChartService?.getChartImageDataURL(e,t)??null}downloadChart(e,t="png"){this.ctx.rangeChartService?.downloadChart(e,t)}getGridState(){return{columnStates:this.ctx.columnModel.getColumnStates(),sortConfig:this.ctx.sortEngine.getSortConfig(),filterModel:this.ctx.filterEngine.getFilterModel(),paginationPage:this.ctx.paginationEngine.getCurrentPage(),paginationPageSize:this.ctx.paginationEngine.getPageSize(),groupedColumns:this.ctx.store.get("groupedColumnIds"),expandedGroups:Array.from(this.ctx.store.get("expandedGroupKeys")),expandedTreeNodeIds:Array.from(this.ctx.store.get("expandedTreeNodeIds")),selectedRowIds:Array.from(this.ctx.store.get("selectedRowIds")),chartModels:this.ctx.rangeChartService?.getChartModels()??[]}}applyGridState(e){if(e.columnStates&&this.applyColumnStates(e.columnStates),e.sortConfig?.length&&this.ctx.sortEngine.multiSort(e.sortConfig),e.filterModel&&this.ctx.filterEngine.setFilterModel(e.filterModel),e.paginationPage&&this.ctx.paginationEngine.goToPage(e.paginationPage),e.paginationPageSize&&this.ctx.paginationEngine.setPageSize(e.paginationPageSize),e.expandedTreeNodeIds?.length&&this.ctx.store.set("expandedTreeNodeIds",new Set(e.expandedTreeNodeIds)),this.refresh(),e.chartModels){this.ctx.rangeChartService?.disposeAll();for(let t of e.chartModels)this.ctx.rangeChartService?.restoreChart(t)}}on(e,t){return this.ctx.eventBus.on(e,t)}off(e,t){this.ctx.eventBus.off(e,t)}getSummaryRow(){let e=this.ctx.store.get("visibleRows"),t=this.ctx.columnModel.getVisibleColumns();return this.ctx.summaryEngine.compute(e,t)}refresh(){this.applyPipeline(),this.ctx.renderer.scheduleRender()}forceRefresh(){this.applyPipeline(),this.ctx.renderer.forceRender()}destroy(){this._txnFlushHandle!==null&&(cancelAnimationFrame(this._txnFlushHandle),this._txnFlushHandle=null),this.ctx.renderer.destroy(),this.ctx.chartEngine.destroyAll(),this.ctx.cellSelectionEngine.detach(),this.ctx.dragDropEngine.destroy(),this.ctx.themeManager.destroy(),this.ctx.eventBus.clear(),this.ctx.store.destroy()}applyPipeline(){let e=this.ctx.store.get("allRows"),t=this.ctx.columnModel.getAllColumns();if(this.ctx.treeDataService.isEnabled())e=this.ctx.treeDataService.getFlatVisibleRows(e,t);else{e=this.ctx.filterEngine.applyFilters(e,t),e=this.ctx.sortEngine.applySorting(e,t);let o=this.ctx.store.get("groupedColumnIds");o.length>0&&(e=this.ctx.groupingEngine.groupByColumns(o,t,e))}e=this.ctx.paginationEngine.applyPagination(e),e=this.ctx.masterDetailEngine.injectDetailRows(e),this.ctx.rowModel.setVisibleRows(e),this.ctx.treeDataService.isEnabled()&&this.ctx.treeDataService.annotateSubtreeExtents(e),this.ctx.store.set("visibleRows",e)}undo(){this.ctx.undoRedoEngine.undo(),this.refresh()}redo(){this.ctx.undoRedoEngine.redo(),this.refresh()}getUndoSize(){return this.ctx.undoRedoEngine.getUndoSize()}getRedoSize(){return this.ctx.undoRedoEngine.getRedoSize()}applyTransaction(e){let t=this.ctx.rowModel.applyTransaction(e);return this.refresh(),[...t.add,...t.update]}applyTransactionAsync(e){this._pendingTransactions.push(e),this._txnFlushHandle===null&&(this._txnFlushHandle=requestAnimationFrame(()=>{this._txnFlushHandle=null;let t=this.mergeTransactions(this._pendingTransactions);this._pendingTransactions=[],this.ctx.rowModel.applyTransaction(t),this.refresh()}))}mergeTransactions(e){let t=[],o=[],r=[];for(let n of e)n.add&&t.push(...n.add),n.update&&o.push(...n.update),n.remove&&r.push(...n.remove);return{add:t,update:o,remove:r}}forEachNode(e){let t=this.getAllRows();for(let o=0;o<t.length;o++)e(t[o],o)}forEachNodeAfterFilter(e){let t=this.ctx.columnModel.getAllColumns(),o=this.ctx.filterEngine.applyFilters(this.getAllRows(),t);for(let r=0;r<o.length;r++)e(o[r],r)}forEachNodeAfterFilterAndSort(e){let t=this.ctx.columnModel.getAllColumns(),o=this.ctx.filterEngine.applyFilters(this.getAllRows(),t);o=this.ctx.sortEngine.applySorting(o,t);for(let r=0;r<o.length;r++)e(o[r],r)}getDisplayedRowCount(){return this.getVisibleRows().length}refreshCells(e={}){let{rowNodes:t,force:o}=e;if(o||!t||t.length===0){this.ctx.renderer.invalidateBodyRows();return}this.ctx.renderer.invalidateBodyRowsByIds(new Set(t.map(r=>r.nodeId)))}flashCells(e={}){let{rowNodes:t,colIds:o,flashDelay:r=700}=e,n=t??this.getVisibleRows();if(n.length===0)return;let i=new Set(n.map(a=>a.nodeId)),s=o&&o.length>0?new Set(o):null,l=[];for(let a of this.ctx.containerEl.querySelectorAll("[data-node-id]"))if(i.has(a.getAttribute("data-node-id")??""))for(let c of a.querySelectorAll("[data-col-id]")){let p=c.getAttribute("data-col-id");s&&(!p||!s.has(p))||l.push(c)}for(let a of l)a.classList.remove("pg-cell--flash"),a.offsetWidth,a.classList.add("pg-cell--flash");l.length>0&&setTimeout(()=>{for(let a of l)a.classList.remove("pg-cell--flash")},r)}sizeColumnsToFit(e){let t=e??this.ctx.containerEl.clientWidth;this.ctx.columnModel.sizeColumnsToFit(t),this.refresh()}resetColumnState(){this.ctx.columnModel.resetColumnState(),this.refresh()}setColumnsVisible(e,t){for(let o of e)this.ctx.columnModel.setColumnVisible(o,t);this.refresh()}moveColumns(e,t){this.ctx.columnModel.moveColumns(e,t),this.refresh()}multiSort(e){this.ctx.sortEngine.multiSort(e),this.refresh()}setFocusedCell(e,t){let o=this.ctx.columnModel.getVisibleColumns().findIndex(r=>r.colId===t);o<0||this.ctx.cellSelectionEngine.startSelection(e,o)}getFocusedCell(){let e=this.ctx.store.get("activeCell");if(!e)return null;let t=this.ctx.columnModel.getVisibleColumns()[e.colIndex];return t?{rowIndex:e.rowIndex,colId:t.colId}:null}ensureNodeVisible(e,t){let o=this.getVisibleRows().findIndex(r=>r.nodeId===e);o<0||this.ctx.renderer.ensureRowVisible(o,t)}ensureColumnVisible(e){this.ctx.renderer.ensureColumnVisible(e)}isAnyFilterActive(){return this.ctx.filterEngine.hasActiveFilters()}isColumnFilterActive(e){return this.ctx.filterEngine.isColumnFiltered(e)}selectRows(e){this.ctx.rowSelectionEngine.selectRows(e,this.getVisibleRows())}deselectRows(e){this.ctx.rowSelectionEngine.deselectRows(e,this.getVisibleRows())}selectRowsByFilter(e){let t=this.getAllRows().filter(o=>o.type==="data"&&e(o)).map(o=>o.nodeId);this.ctx.rowSelectionEngine.selectRows(t,this.getVisibleRows())}setRowGroupColumns(e){this.ctx.groupingEngine.reorderGroupColumns(e),this.refresh()}isGroupExpanded(e){return this.ctx.groupingEngine.isGroupExpanded(e)}resetGridState(){this.ctx.sortEngine.clearSort(),this.ctx.columnModel.clearAllSort(),this.ctx.filterEngine.clearAllFilters(),this.ctx.groupingEngine.clearGrouping(),this.ctx.rowSelectionEngine.deselectAll(this.getVisibleRows()),this.ctx.cellSelectionEngine.clearSelection(),this.ctx.paginationEngine.goToPage(1),this.ctx.columnModel.resetColumnState(),this.refresh()}};var st=class{constructor(e=200){this.undoStack=[];this.redoStack=[];this.maxStackSize=e}get canUndo(){return this.undoStack.length>0}get canRedo(){return this.redoStack.length>0}getUndoSize(){return this.undoStack.length}getRedoSize(){return this.redoStack.length}record(e){let t=e.changes.filter(n=>!Object.is(n.oldValue,n.newValue));if(t.length===0)return;let o={type:e.type,changes:t},r=this.undoStack.length>0?this.undoStack[this.undoStack.length-1]:null;if(!(r&&this.actionsIdentical(r,o))){if(e.type==="edit"&&r?.type==="edit"&&t.length===1&&r.changes.length===1&&r.changes[0].nodeId===t[0].nodeId&&r.changes[0].field===t[0].field){r.changes[0].newValue=t[0].newValue,this.redoStack=[];return}this.undoStack.length>=this.maxStackSize&&this.undoStack.shift(),this.undoStack.push(o),this.redoStack=[]}}undo(){let e=this.undoStack.pop();return e?(this.redoStack.length>=this.maxStackSize&&this.redoStack.shift(),this.redoStack.push(e),e.changes.map(t=>({nodeId:t.nodeId,field:t.field,oldValue:t.newValue,newValue:t.oldValue}))):null}redo(){let e=this.redoStack.pop();return e?(this.undoStack.length>=this.maxStackSize&&this.undoStack.shift(),this.undoStack.push(e),e.changes):null}clear(){this.undoStack=[],this.redoStack=[]}actionsIdentical(e,t){if(e.type!==t.type||e.changes.length!==t.changes.length)return!1;for(let o=0;o<e.changes.length;o++){let r=e.changes[o],n=t.changes[o];if(r.nodeId!==n.nodeId||r.field!==n.field||!Object.is(r.oldValue,n.oldValue)||!Object.is(r.newValue,n.newValue))return!1}return!0}};var is=200,ao=class{constructor(e,t,o){this.store=e;this.eventBus=t;this.rowModel=o;this.config=null;this.detailDataCache=new Map;this.heightCache=new Map;this.pendingNodeIds=new Set;this.defaultAppliedNodeIds=new Set;this.refreshCallback=null}configure(e){this.config=e?.enabled?e:null}isEnabled(){return this.config!==null}getConfig(){return this.config}setRefreshCallback(e){this.refreshCallback=e}isExpanded(e){return this.store.get("expandedRowIds").has(e)}hasDetail(e){return this.config?.hasDetail?this.config.hasDetail(e):!0}expand(e){if(!this.config||this.isExpanded(e.nodeId))return;let t=new Set(this.store.get("expandedRowIds"));t.add(e.nodeId),this.store.set("expandedRowIds",t),this.fetchDetailDataIfNeeded(e),this.eventBus.emit(x.ROW_DETAIL_OPENED,{nodeId:e.nodeId,row:e})}collapse(e){if(!this.isExpanded(e.nodeId))return;let t=new Set(this.store.get("expandedRowIds"));t.delete(e.nodeId),this.store.set("expandedRowIds",t),this.eventBus.emit(x.ROW_DETAIL_CLOSED,{nodeId:e.nodeId,row:e})}toggle(e){this.isExpanded(e.nodeId)?this.collapse(e):this.expand(e)}collapseAll(e){for(let t of e)t.type==="data"&&this.isExpanded(t.nodeId)&&this.collapse(t)}isPending(e){return this.pendingNodeIds.has(e)}injectDetailRows(e){if(!this.config)return e;if(this.config.defaultExpanded)for(let r of e)r.type!=="data"||this.defaultAppliedNodeIds.has(r.nodeId)||(this.defaultAppliedNodeIds.add(r.nodeId),this.hasDetail(r.data)&&this.expand(r));let t=this.store.get("expandedRowIds");if(t.size===0)return e;let o=[];for(let r of e)if(o.push(r),r.type==="data"&&t.has(r.nodeId)&&this.hasDetail(r.data)){let n=this.heightCache.get(r.nodeId)??this.config.detailFixedHeight??is,i=this.clampHeight(n);o.push(this.rowModel.createDetailNode(r,r.data,i))}return o}getCachedDetailData(e){return this.detailDataCache.get(e)}setDetailHeight(e,t){let o=this.clampHeight(t);this.heightCache.get(e)!==o&&(this.heightCache.set(e,o),this.eventBus.emit(x.ROW_DETAIL_HEIGHT_CHANGED,{nodeId:e,height:o}),this.refreshCallback?.())}resolveDetailGridOptions(e,t){let o=this.config?.detailGrid,r=o?typeof o=="function"?o(e.data):o:{columns:[]},n=r.theme??t??void 0;return{...r,theme:n,data:r.data??this.detailDataCache.get(e.parentNodeId??e.nodeId)??[]}}destroy(){this.detailDataCache.clear(),this.heightCache.clear(),this.pendingNodeIds.clear(),this.defaultAppliedNodeIds.clear(),this.refreshCallback=null}clampHeight(e){let t=this.config?.detailMinHeight,o=this.config?.detailMaxHeight,r=e;return t!=null&&(r=Math.max(t,r)),o!=null&&(r=Math.min(o,r)),r}fetchDetailDataIfNeeded(e){let t=this.config?.getDetailData;if(!t||this.detailDataCache.has(e.nodeId))return;let o=t(e.data);if(!(o instanceof Promise)){this.detailDataCache.set(e.nodeId,o);return}this.pendingNodeIds.add(e.nodeId),o.then(r=>{this.detailDataCache.set(e.nodeId,r)}).catch(r=>{console.error(`[PhotonGrid] masterDetail.getDetailData failed for row "${e.nodeId}":`,r),this.detailDataCache.set(e.nodeId,[])}).finally(()=>{this.pendingNodeIds.delete(e.nodeId),this.refreshCallback?.()})}};var ss="parentId",ls="children";function Sn(d,e){switch(d.mode){case"parentId":return as(e,d.idField??"id",d.parentIdField??ss);case"dataPath":return ds(e,d.getDataPath);case"custom":return cs(e,d.hierarchyProvider);case"childrenField":return ps(e,d.childrenField??ls,d.idField??"id");default:return[]}}function as(d,e,t){let o=new Array(d.length);for(let r=0;r<d.length;r++){let n=d[r],i=n[e],s=n[t];o[r]={id:i!=null?String(i):`pos_${r}`,parentId:s!=null?String(s):null,record:n}}return o}function ds(d,e){let t=new Map;for(let o of d){let r=e(o);for(let n=0;n<r.length;n++){let i=r.slice(0,n+1).join("/");n===r.length-1?t.set(i,{id:i,parentId:n>0?r.slice(0,n).join("/"):null,record:o}):t.has(i)||t.set(i,{id:i,parentId:n>0?r.slice(0,n).join("/"):null,record:{[r[n]]:r[n]},isFiller:!0})}}return Array.from(t.values())}function cs(d,e){return d.map(t=>({id:e.getId(t),parentId:e.getParentKey(t)??null,record:t}))}function ps(d,e,t){let o=[];function r(n,i,s){for(let l=0;l<n.length;l++){let a=n[l],c=s?`${s}.${l}`:String(l),p=a[t],h=p!=null?String(p):c;o.push({id:h,parentId:i,record:a});let u=a[e];Array.isArray(u)&&u.length>0&&r(u,h,c)}}return r(d,null,""),o}function In(d,e=50){let t=new Map;for(let n of d)t.set(n.id,{nodeId:n.id,rowIndex:-1,data:n.record,type:"data",selected:!1,expanded:!1,editable:!n.isFiller,level:0,parent:null,children:[],hasChildren:!1,isTreeFiller:n.isFiller,height:e,top:0});let o=[];for(let n of d){let i=t.get(n.id),s=n.parentId!=null?t.get(n.parentId):void 0;s?(s.children.push(i),s.hasChildren=!0,i.parent=s):o.push(i)}let r=(n,i)=>{for(let s of n)s.level=i,s.children.length>0&&r(s.children,i+1)};return r(o,0),o}function Tn(d,e){let t=[],o=r=>{for(let n of r)n.expanded=e.has(n.nodeId),t.push(n),n.expanded&&n.children.length>0&&o(n.children)};return o(d),t}var co=class{constructor(e,t,o,r,n){this.store=e;this.eventBus=t;this.filterEngine=o;this.sortEngine=r;this.expansionService=n;this.config=null;this.lastRoots=[];this.lastNodesById=new Map;this.defaultAppliedNodeIds=new Set;this.pendingLoadNodeIds=new Set;this.refreshCallback=null}configure(e){this.config=e?.enabled?e:null}isEnabled(){return this.config!==null}getConfig(){return this.config}setRefreshCallback(e){this.refreshCallback=e}supportsReparenting(){return this.config?.mode==="parentId"||this.config?.mode==="childrenField"}getFlatVisibleRows(e,t){if(!this.config)return e;let o=this.buildRoots(e);return this.applyDefaultExpansion(o),o=this.filterTree(o,t),o=this.sortTree(o,t),Tn(o,this.expansionService.getExpandedIds())}buildRoots(e){if(!this.config)return[];let t=e.map(i=>i.data),o=Sn(this.config,t),r=In(o,e[0]?.height??50);this.lastRoots=r,this.lastNodesById=new Map;let n=i=>{for(let s of i)this.lastNodesById.set(s.nodeId,s),s.children.length>0&&n(s.children)};return n(r),r}filterTree(e,t){if(!this.filterEngine.hasActiveFilters())return e;let o=r=>{let n=r.children.map(o).filter(s=>s!==null);return!this.filterEngine.matchesRow(r,t)&&n.length===0?null:{...r,children:n,hasChildren:n.length>0||r.hasChildren}};return e.map(o).filter(r=>r!==null)}sortTree(e,t){let o=r=>{let n=this.sortEngine.applySorting(r,t);for(let i of n)i.children.length>0&&(i.children=o(i.children));return n};return o(e)}annotateSubtreeExtents(e){if(!this.config||e.length===0)return;let t=[];for(let n of e)if(n.type==="data"){for(;t.length>0&&t[t.length-1].level>=n.level;)t.pop().subtreeEndTop=n.top;t.push(n)}let o=e[e.length-1],r=o.top+o.height;for(let n of t)n.subtreeEndTop=r}getNode(e){return this.lastNodesById.get(e)}getRoots(){return this.lastRoots}moveNode(e,t,o){if(!this.config||!this.supportsReparenting())return console.warn(`[PhotonGrid] Tree Data drag-to-reparent isn't supported for mode "${this.config?.mode}" (only "parentId"/"childrenField" have a mutable hierarchy).`),!1;let r=this.lastNodesById.get(e),n=this.lastNodesById.get(t);if(!r||!n||r.isTreeFiller||n.isTreeFiller)return!1;let i=o==="inside"?n:n.parent;if(i===r||this.isDescendantOf(i,r))return!1;if(this.config.mode==="parentId"){let s=this.config.idField??"id",l=this.config.parentIdField??"parentId";r.data[l]=i?i.data[s]:null}else this.reparentChildrenField(r,i);return this.refreshCallback?.(),!0}reparentChildrenField(e,t){let o=this.config.childrenField??"children",r=e.parent?e.parent.data[o]??[]:null;if(r){let n=r.indexOf(e.data);n!==-1&&r.splice(n,1)}if(t){let n=t.data[o]??[];n.push(e.data),t.data[o]=n}}isDescendantOf(e,t){let o=e;for(;o;){if(o===t)return!0;o=o.parent}return!1}loadChildren(e){let t=this.config?.lazyLoadChildren,o=this.lastNodesById.get(e);!t||!o||o.childrenLoaded||this.pendingLoadNodeIds.has(e)||(this.pendingLoadNodeIds.add(e),t(o).then(r=>{this.attachLoadedChildren(o,r),o.childrenLoaded=!0,this.eventBus.emit(x.TREE_CHILDREN_LOADED,{nodeId:e,children:r})}).catch(r=>{console.error(`[PhotonGrid] treeData.lazyLoadChildren failed for node "${e}":`,r)}).finally(()=>{this.pendingLoadNodeIds.delete(e),this.refreshCallback?.()}))}isLoadPending(e){return this.pendingLoadNodeIds.has(e)}attachLoadedChildren(e,t){if(this.config){if(this.config.mode==="parentId"){let o=this.config.idField??"id",r=this.config.parentIdField??"parentId",n=e.data[o];for(let i of t)i[r]=n}else if(this.config.mode==="childrenField"){let o=this.config.childrenField??"children";e.data[o]=t}}}applyDefaultExpansion(e){let{defaultExpanded:t}=this.config??{};if(!t)return;let o=t===!0?1/0:t,r=[],n=i=>{for(let s of i)s.level<o&&(s.children.length>0||s.hasChildren)&&!this.defaultAppliedNodeIds.has(s.nodeId)&&(this.defaultAppliedNodeIds.add(s.nodeId),r.push(s)),s.children.length>0&&n(s.children)};n(e);for(let i of r)this.expansionService.expand(i)}destroy(){this.lastRoots=[],this.lastNodesById.clear(),this.defaultAppliedNodeIds.clear(),this.pendingLoadNodeIds.clear(),this.refreshCallback=null}};var po=class{constructor(e,t){this.store=e;this.eventBus=t}expand(e){let t=new Set(this.store.get("expandedTreeNodeIds"));t.add(e.nodeId),this.store.set("expandedTreeNodeIds",t),this.eventBus.emit(x.TREE_NODE_EXPANDED,{nodeId:e.nodeId,row:e})}collapse(e){let t=new Set(this.store.get("expandedTreeNodeIds"));t.delete(e.nodeId),this.store.set("expandedTreeNodeIds",t),this.eventBus.emit(x.TREE_NODE_COLLAPSED,{nodeId:e.nodeId,row:e})}toggle(e){this.isExpanded(e.nodeId)?this.collapse(e):this.expand(e)}isExpanded(e){return this.store.get("expandedTreeNodeIds").has(e)}expandAll(e){let t=new Set,o=r=>{for(let n of r)(n.children.length>0||n.hasChildren)&&t.add(n.nodeId),n.children.length>0&&o(n.children)};o(e),this.store.set("expandedTreeNodeIds",t)}collapseAll(){this.store.set("expandedTreeNodeIds",new Set)}expandToLevel(e,t){if(t<=0){this.collapseAll();return}let o=new Set,r=n=>{for(let i of n)i.level<t&&(i.children.length>0||i.hasChildren)&&(o.add(i.nodeId),i.children.length>0&&r(i.children))};r(e),this.store.set("expandedTreeNodeIds",o)}getExpandedIds(){return this.store.get("expandedTreeNodeIds")}};var ho=class{constructor(e,t){this.rowSelectionEngine=e;this.treeDataService=t}selectWithDescendants(e,t){let o=[e.nodeId,...this.collectDescendantIds(e)];this.rowSelectionEngine.selectRows(o,t)}deselectWithDescendants(e,t){this.rowSelectionEngine.deselectRow(e.nodeId,t);for(let o of this.collectDescendantIds(e))this.rowSelectionEngine.deselectRow(o,t)}toggleWithDescendants(e,t){this.rowSelectionEngine.isRowSelected(e.nodeId)?this.deselectWithDescendants(e,t):this.selectWithDescendants(e,t)}getDescendantSelectionState(e){let t=this.collectDescendantIds(e);if(t.length===0)return this.rowSelectionEngine.isRowSelected(e.nodeId)?"all":"none";let o=0;for(let r of t)this.rowSelectionEngine.isRowSelected(r)&&o++;return o===0?"none":o===t.length?"all":"some"}collectDescendantIds(e){let t=this.treeDataService.getNode(e.nodeId)??e,o=[],r=n=>{for(let i of n.children)o.push(i.nodeId),r(i)};return r(t),o}};var uo=class{constructor(){this._groups=new Map;this._paths=new Map;this._hasGroups=!1}parse(e){this._groups.clear(),this._paths.clear(),this._hasGroups=!1,this.walk(e,[])}get hasGroups(){return this._hasGroups}get groups(){return this._groups}get paths(){return this._paths}getPath(e){return this._paths.get(e)??[]}getGroup(e){return this._groups.get(e)}getLeavesForGroup(e){let t=[];for(let[o,r]of this._paths)r.includes(e)&&t.push(o);return t}walk(e,t){for(let o of e){let r=o.children;if(Array.isArray(r)&&r.length>0){this._hasGroups=!0;let n=t.length>0?t[t.length-1]:null;this._groups.set(o.colId,{id:o.colId,header:o.header??"",parentId:n,headerCssClass:o.headerCssClass,resizable:o.resizable,collapsedWidth:o.collapsedWidth??36,marryChildren:o.marryChildren,headerRendererFn:o.groupHeaderRendererFn}),this.walk(r,[...t,o.colId])}else this._paths.set(o.colId,[...t])}}};var go=class{build(e,t,o,r){let n=[],i=[],s=0,l=p=>{for(;i.length>p;){let h=i.pop();h.width=s-h.left;let u=i.length>0?i[i.length-1]:null;u?u.children.push(h):n.push(h)}};for(let p of e){if(p.visible===!1)continue;let h=t.getPath(p.colId),u=r.getWidth(p.colId),m=this.commonPrefixLen(i,h);l(m);for(let C=m;C<h.length;C++){let b=h[C],v=t.getGroup(b),w=`${b}:${p.colId}`,E={kind:"group",instanceId:w,logicalGroupId:b,header:v?.header??b,depth:C,children:[],left:s,width:0,collapsed:o.get(w)??!1,resizable:v?.resizable!==!1,collapsedWidth:v?.collapsedWidth??36,headerCssClass:v?.headerCssClass,headerRendererFn:v?.headerRendererFn};i.push(E)}let g={kind:"leaf",colDef:p,groupPath:h,left:s,width:u},f=i.length>0?i[i.length-1]:null;f?f.children.push(g):n.push(g),s+=u}l(0);let a=this.computeMaxGroupDepth(n),c=a>0?this.buildGroupRows(n,a):[];return{roots:n,maxGroupDepth:a,groupRows:c,totalWidth:s}}commonPrefixLen(e,t){let o=Math.min(e.length,t.length);for(let r=0;r<o;r++)if(e[r].logicalGroupId!==t[r])return r;return o}computeMaxGroupDepth(e){let t=0;for(let o of e)if(o.kind==="group"){let r=this.computeMaxGroupDepth(o.children);t=Math.max(t,o.depth+1,r)}return t}buildGroupRows(e,t){let o=Array.from({length:t},()=>[]);return this.fillRows(e,o,0),o.map((r,n)=>({depth:n,cells:r.slice().sort((i,s)=>i.left-s.left)}))}fillRows(e,t,o){for(let r of e){if(r.kind==="leaf"){for(let n=o;n<t.length;n++){let i={kind:"filler",id:`_filler_${r.colDef.colId}_d${n}`,colId:r.colDef.colId,left:r.left,width:r.width,depth:n};t[n].push(i)}continue}if(r.depth<t.length){let n={kind:"group",node:r,left:r.left,width:r.width,depth:r.depth};t[r.depth].push(n)}this.fillRows(r.children,t,r.depth+1)}}};var mo=class{constructor(e){this.iconRenderer=e}buildGroupRows(e,t){return e.maxGroupDepth===0?[]:e.groupRows.map(o=>this.buildRow(o,t))}updateGroupRows(e,t,o){if(e.length===0||t.maxGroupDepth===0)return;let r=Math.min(e.length,t.groupRows.length);for(let n=0;n<r;n++)e[n].innerHTML="",this.populateRow(e[n],t.groupRows[n],o)}buildRow(e,t){let o=y(`pg-header-group-row pg-header-group-row--depth-${e.depth}`);return o.setAttribute("role","row"),o.setAttribute("data-group-depth",String(e.depth)),this.populateRow(o,e,t),o}populateRow(e,t,o){for(let r of t.cells)e.appendChild(this.buildCell(r,o))}buildCell(e,t){if(e.kind==="filler"){let o=y("pg-th pg-th--depth-filler");return o.setAttribute("data-filler-id",e.id),o.setAttribute("data-col-id",e.colId),o.style.left=`${e.left}px`,o.style.width=`${e.width}px`,o}return this.buildGroupCell(e.node,e.left,e.width,t)}buildGroupCell(e,t,o,r){let n=e.collapsed,i=["pg-th","pg-th--group"];if(n&&i.push("pg-th--group--collapsed"),e.headerCssClass)for(let l of e.headerCssClass.split(" "))l.trim()&&i.push(l.trim());let s=y(i.join(" "));if(s.setAttribute("role","columnheader"),s.setAttribute("data-group-id",e.logicalGroupId),s.setAttribute("data-instance-id",e.instanceId),s.setAttribute("aria-expanded",String(!n)),s.setAttribute("aria-label",e.header),s.setAttribute("tabindex","0"),s.style.left=`${t}px`,s.style.width=`${o}px`,e.headerRendererFn){let l={id:e.logicalGroupId,header:e.header,parentId:null,headerCssClass:e.headerCssClass,resizable:e.resizable,collapsedWidth:e.collapsedWidth,headerRendererFn:e.headerRendererFn},a=e.headerRendererFn({logicalGroup:l,collapsed:n,api:null});typeof a=="string"?s.innerHTML=a:s.appendChild(a)}else this.buildDefaultContent(s,e,n);if(e.resizable){let l=y("pg-th__resize-handle pg-th__resize-handle--group");l.setAttribute("aria-hidden","true"),l.addEventListener("pointerdown",a=>{a.button===0&&(a.stopPropagation(),a.preventDefault(),this.startGroupResize(a,e,o,r))}),s.appendChild(l)}return s.addEventListener("pointerdown",l=>{l.target.closest(".pg-th__resize-handle")||r.onGroupHeaderMouseDown?.(l,e,s)}),s.addEventListener("click",l=>{l.target.closest(".pg-th__resize-handle")||r.didJustDragFn?.()||r.onCollapseToggle?.(e.instanceId)}),s.addEventListener("contextmenu",l=>{l.preventDefault(),l.stopPropagation(),r.onGroupContextMenu?.(l,e,s)}),s.addEventListener("keydown",l=>{(l.key==="Enter"||l.key===" "||l.key==="ArrowLeft"&&!n||l.key==="ArrowRight"&&n)&&(l.preventDefault(),r.onCollapseToggle?.(e.instanceId))}),s}buildDefaultContent(e,t,o){let r=y("pg-th__content"),n=y("pg-th__label");n.textContent=t.header,n.title=t.header,r.appendChild(n),e.appendChild(r);let i=y("pg-th__collapse-btn");i.setAttribute("tabindex","-1"),i.setAttribute("aria-label",o?`Expand ${t.header}`:`Collapse ${t.header}`),i.innerHTML=this.iconRenderer.renderToString(o?"chevronRight":"chevronLeft",12),e.appendChild(i)}startGroupResize(e,t,o,r){let n=e.clientX;document.body.style.cursor="col-resize",document.body.style.userSelect="none";let i=l=>{let a=Math.max(t.collapsedWidth,o+l.clientX-n);r.onGroupResize?.(t.instanceId,a)},s=l=>{let a=Math.max(t.collapsedWidth,o+l.clientX-n);r.onGroupResize?.(t.instanceId,a),document.body.style.cursor="",document.body.style.userSelect="",document.removeEventListener("pointermove",i),document.removeEventListener("pointerup",s)};document.addEventListener("pointermove",i),document.addEventListener("pointerup",s)}};var fo=class{constructor(e,t,o,r){this.gridElGetter=e;this.onGroupMoved=t;this.previewCallbacks=o;this.leavesFor=r;this._didJustDrag=!1;this.isDragging=!1;this.dragGroupId=null;this.sourcePanel=null;this.ghostEl=null;this.indicatorEl=null;this.dragStyleEl=null;this.capturedCells=[];this.dragSourceIdx=-1;this.lastSlotKey="";this.startX=0;this.startY=0;this.removeMoveUp=null}onHeaderMouseDown(e,t,o){if(e.button!==0)return;this.startX=e.clientX,this.startY=e.clientY,this.dragGroupId=t.logicalGroupId,this._didJustDrag=!1,this.isDragging=!1,this.sourcePanel=this.detectPanelFromElement(o);let r=J(e),n=0,i=()=>{n&&(clearTimeout(n),n=0),o.classList.remove("pg-th--drag-armed")},s=(c,p)=>{this.isDragging||(i(),this.isDragging=!0,this.activateDrag({clientX:c,clientY:p},t))},l=c=>{if(!this.isDragging){let p=Math.abs(c.clientX-this.startX),h=Math.abs(c.clientY-this.startY);if(r){(p>q||h>q)&&(this.removeMoveUp?.(),this.removeMoveUp=null,i());return}if(p<fe&&h<fe)return;this.isDragging=!0,this.activateDrag(c,t)}this.isDragging&&this.onMouseMove(c)},a=c=>{this.removeMoveUp?.(),this.removeMoveUp=null,i(),this.isDragging&&this.onMouseUp(c),this.isDragging=!1};document.addEventListener("pointermove",l),document.addEventListener("pointerup",a),this.removeMoveUp=()=>{document.removeEventListener("pointermove",l),document.removeEventListener("pointerup",a)},r&&(o.classList.add("pg-th--drag-armed"),n=window.setTimeout(()=>{n=0,s(this.startX,this.startY)},Xe))}get didJustDrag(){return this._didJustDrag}get isDraggingGroup(){return this.isDragging}destroy(){this.removeMoveUp?.(),this.removeMoveUp=null,this.cleanupDrag()}activateDrag(e,t){let o=this.gridElGetter();o&&(o.classList.add("pg-grid--group-dragging"),this.ghostEl=y("pg-col-drag-ghost"),this.ghostEl.textContent=t.header,this.ghostEl.style.left=`${e.clientX+12}px`,this.ghostEl.style.top=`${e.clientY-14}px`,document.body.appendChild(this.ghostEl),this.indicatorEl=y("pg-group-drop-indicator"),document.body.appendChild(this.indicatorEl),this.previewCallbacks?(this.lastSlotKey="",this.previewCallbacks.onPreviewStart()):(this.dragStyleEl=document.createElement("style"),this.dragStyleEl.setAttribute("data-pg-group-drag",""),document.head.appendChild(this.dragStyleEl),this.capturePanelCells(o,this.sourcePanel),this.dragSourceIdx=this.capturedCells.findIndex(r=>r.groupId===t.logicalGroupId),this.dragSourceIdx===-1&&(this.dragSourceIdx=0)))}onMouseMove(e){if(!this.ghostEl)return;this._didJustDrag=!0,this.ghostEl.style.left=`${e.clientX+12}px`,this.ghostEl.style.top=`${e.clientY-14}px`;let t=this.gridElGetter();if(!t)return;let o=this.detectPanelAtPoint(e.clientX,e.clientY,t);if(this.previewCallbacks){let r=this.findInsertBeforeColId(e,o,t),n=`${o??"c"}:${r??"end"}`;n!==this.lastSlotKey&&(this.lastSlotKey=n,this.previewCallbacks.onPreviewMove(this.dragGroupId,this.sourcePanel,o,r)),this.updateIndicatorFromColId(r,o,t)}else{o!==this.sourcePanel&&(this.capturePanelCells(t,o),this.dragSourceIdx=-1);let r=this.findEffectiveSlot(e.clientX);this.applyTransforms(r,t),this.updateIndicator(r)}}onMouseUp(e){if(this.previewCallbacks){this.previewCallbacks.onPreviewConfirm(),this.cleanupDrag(),this._didJustDrag=!0,setTimeout(()=>{this._didJustDrag=!1},200);return}let t=this.gridElGetter();if(!t||!this.dragGroupId){this.cleanupDrag();return}let o=this.detectPanelAtPoint(e.clientX,e.clientY,t),r=this.findInsertBeforeColId(e,o,t),n=this.sourcePanel,i=this.dragGroupId;this.cleanupDrag(),this.onGroupMoved(i,n,o,r),this._didJustDrag=!0,setTimeout(()=>{this._didJustDrag=!1},200)}findInsertBeforeColId(e,t,o){let r=this.getPanelEl(t,o);if(!r)return null;let n=r.querySelector(".pg-header-row");if(!n)return null;let i=Array.from(n.querySelectorAll(".pg-th[data-col-id]"));for(let s of i){let l=s.getBoundingClientRect();if(e.clientX<l.left+l.width/2)return s.getAttribute("data-col-id")}return null}capturePanelCells(e,t){this.capturedCells=[];let o=this.getPanelEl(t,e);if(!o)return;let r=o.querySelector(".pg-header-group-row--depth-0");if(r){let i=Array.from(r.querySelectorAll(".pg-th--group, .pg-th--depth-filler"));i.sort((s,l)=>parseFloat(s.style.left||"0")-parseFloat(l.style.left||"0"));for(let s of i)this.capturedCells.push({el:s,rect:s.getBoundingClientRect(),groupId:s.getAttribute("data-group-id")??"",colId:s.getAttribute("data-col-id")??""});if(this.capturedCells.length>0)return}let n=o.querySelector(".pg-header-row");if(n){let i=Array.from(n.querySelectorAll(".pg-th[data-col-id]"));for(let s of i)this.capturedCells.push({el:s,rect:s.getBoundingClientRect(),groupId:"",colId:s.getAttribute("data-col-id")??""})}}findEffectiveSlot(e){for(let t=0;t<this.capturedCells.length;t++){let{rect:o}=this.capturedCells[t];if(e<o.left+o.width/2)return t}return this.capturedCells.length}applyTransforms(e,t){if(!this.dragStyleEl||this.capturedCells.length===0)return;let o=this.dragSourceIdx;if(o===-1||e===o||e===o+1){this.dragStyleEl.textContent="";return}let r=t.getAttribute("data-photon-grid-id")??"",n=r?`[data-photon-grid-id="${r}"].pg-grid--group-dragging `:".pg-grid--group-dragging ",i=this.capturedCells[o],s=i?.rect.width??0,l=this.dragGroupId??"",a=e<this.capturedCells.length?this.capturedCells[e]:this.capturedCells[this.capturedCells.length-1],c=e>o?a.rect.right-i.rect.right:a.rect.left-i.rect.left,p=`${n}[data-group-id="${l}"] { --pg-drag-x: ${c}px; --pg-drag-transition: 0ms; z-index: 10; position: relative; }
4295
+ `)}this.dragStyleEl.textContent=l}onMouseUp(e){let t=this.currentTarget,o=this.draggingId,r=this.draggingIsGroup,n=this.gridEl,i=n?this.isOutsideGrid(e.clientX,e.clientY):!1,s=n?this.isOverGroupingBar(e.clientX,e.clientY):!1;if(this.cleanupDrag(),this._didJustDrag=!0,Promise.resolve().then(()=>{this._didJustDrag=!1}),!o)return;if(i){if(r){let p=this.groupModel.getLeavesInGroup(o);for(let h of p)this.columnModel.setColumnVisible(h.colId,!1)}return}if(s){if(r){let h=this.groupModel.getLeavesInGroup(o).filter(u=>u.groupable).map(u=>u.colId);h.length>0&&this.eventBus.emit(x.COLUMN_GROUP_CHANGED,{action:"add",colIds:h})}return}let l=this.dragEffectiveIdx,c=l!==-1&&l!==this.dragSourceIdx&&l<this.dragCells.length?{valid:!0,targetId:this.dragCells[l].groupId,position:l>this.dragSourceIdx?"after":"before",indicatorX:0}:t;if(c?.valid){if(r){if(!this.groupModel.getGroup(c.targetId))return;let u=this.groupModel.getParent(c.targetId)?.groupId??null,g=c.position==="before"?c.targetId:null,m=c.position==="after"?this.nextSiblingId(c.targetId):null,f=g??m,C=this.groupModel.getGroup(o);if(C?.isSoloGroup&&C.originalParentGroupId===u){let b=C.children[0];if(b?.nodeType==="leaf"){this.groupModel.dissolveGroupIfSolo(o,u,f),this.columnModel.setColumnVisible(b.colDef.colId,!0),this.triggerRebuild();return}}this.groupModel.moveGroup(o,u,f)}this.triggerRebuild()}}cleanupDrag(){this.draggingId=null,this.draggingIsGroup=!1,this.currentTarget=null,this.dragCells=[],this.dragCellWidth=0,this.dragSourceIdx=-1,this.dragEffectiveIdx=-1,this.ghostEl?.remove(),this.ghostEl=null,this.indicatorEl?.remove(),this.indicatorEl=null,this.dragStyleEl?.remove(),this.dragStyleEl=null,this.gridEl?.classList.remove("pg-grid--col-dragging"),this.gridEl=null,document.body.style.cursor="",document.body.style.userSelect="",document.removeEventListener("pointermove",this.boundMouseMove),document.removeEventListener("pointerup",this.boundMouseUp)}hitTest(e,t){if(!this.gridEl)return mn;let o=this.gridEl.querySelectorAll("[data-group-id]"),r=this.gridEl.getBoundingClientRect(),n=null,i=1/0;for(let s of o){let l=s.getAttribute("data-group-id")??"";if(l===this.draggingId)continue;let a=s.getBoundingClientRect();if(t<a.top-4||t>a.bottom+4)continue;let c=a.left+a.width/2,p=Math.abs(e-c);if(p<i){i=p;let h=e<c?"before":"after";n={valid:!0,targetId:l,position:h,indicatorX:(h==="before"?a.left:a.right)-r.left}}}return n??mn}updateIndicator(e){if(this.indicatorEl){if(!e?.valid){this.indicatorEl.style.display="none";return}this.indicatorEl.style.display="block",this.indicatorEl.style.left=`${e.indicatorX}px`}}isOutsideGrid(e,t){if(!this.gridEl)return!1;let o=this.gridEl.getBoundingClientRect(),r=40;return e<o.left-r||e>o.right+r||t<o.top-r||t>o.bottom+r}isOverGroupingBar(e,t){if(!this.gridEl)return!1;let o=this.gridEl.querySelector(".pg-group-drop-zone--top");if(!o)return!1;let r=o.getBoundingClientRect();return e>=r.left&&e<=r.right&&t>=r.top&&t<=r.bottom}nextSiblingId(e){let t=this.groupModel.getParent(e),o=t?t.children:this.groupModel.rootNodes,r=o.findIndex(i=>(i.nodeType==="group"?i.groupId:i.colDef?.colId)===e);if(r===-1||r>=o.length-1)return null;let n=o[r+1];return n.nodeType==="group"?n.groupId??null:n.colDef?.colId??null}extractLeafToSoloGroup(e,t){if(!this.groupModel.getParent(e))return;let r=this.groupModel.createSoloGroupForLeaf(e);r&&(this.groupModel.moveGroup(r,null,t),this.triggerRebuild())}createLeafClone(e,t){let o=this.groupModel.getParent(e);if(!o)return;if(o.isSoloGroup&&o.originalParentGroupId===t){this.groupModel.dissolveGroupIfSolo(o.groupId,t,null),this.columnModel.setColumnVisible(e,!0),this.triggerRebuild();return}if(o.groupId===t)return;let r=this.groupModel.createSoloGroupForLeaf(e);if(!r)return;let n=this.groupModel.getParent(t);this.groupModel.moveGroup(r,n?.groupId??null,t),this.triggerRebuild()}triggerRebuild(){this.eventBus.emit(x.COLUMN_MOVED,{colDef:null,fromIndex:-1,toIndex:-1})}};var Vt=class{constructor(e,t,o){this.store=e;this.groupingEngine=t;this.iconRenderer=o;this.el=null;this.chipsEl=null;this.dockPos="top";this.outerRowEl=null;this.mainColEl=null;this.isDockDragging=!1;this.dockIndicatorEl=null;this._onDockMove=null;this._onDockUp=null;this.draggingChipId=null;this.chipGhostEl=null;this.chipDropIndex=-1;this._onChipMove=null;this._onChipUp=null;this.isResizing=!1;this.resizeStartSize=0;this.resizeStartPos=0;this._onResizeMove=null;this._onResizeUp=null;this.searchCallback=null;this.searchInputEl=null;this.searchClearEl=null;this.searchDebounceTimer=null}mount(e,t){this.outerRowEl=e,this.mainColEl=t,this.el=y("pg-group-drop-zone pg-group-drop-zone--top"),t.insertBefore(this.el,t.firstChild),this.buildStructure(),this.render()}update(){this.render()}highlight(e){this.chipsEl?.classList.toggle("pg-group-zone-chips--over",e)}isOver(e,t){let o=this.el?.getBoundingClientRect();return o?e>=o.left&&e<=o.right&&t>=o.top&&t<=o.bottom:!1}isGrouped(e){return this.store.get("groupedColumnIds").includes(e)}dropColumn(e){this.groupingEngine.addGroupColumn(e)}removeColumn(e){this.groupingEngine.removeGroupColumn(e)}setSearchCallback(e){this.searchCallback=e}destroy(){this.searchDebounceTimer!==null&&(clearTimeout(this.searchDebounceTimer),this.searchDebounceTimer=null),this.cleanupDockDrag(),this.cleanupChipDrag(),this.cleanupResize(),this.el?.remove(),this.el=null,this.chipsEl=null,this.searchInputEl=null,this.searchClearEl=null}buildStructure(){if(!this.el)return;this.chipsEl=y("pg-group-zone-chips"),this.el.appendChild(this.chipsEl);let e=y("pg-group-search"),t=y("pg-group-search__field"),o=y("pg-group-search__icon");o.innerHTML=this.iconRenderer.renderToString("search",14);let r=document.createElement("input");r.type="text",r.className="pg-group-search__input",r.placeholder="Search...",r.spellcheck=!1,r.setAttribute("autocomplete","off"),this.searchInputEl=r;let n=y("pg-group-search__clear");n.innerHTML=this.iconRenderer.renderToString("close",12),n.title="Clear search",this.searchClearEl=n,r.addEventListener("input",()=>{let i=r.value;n.classList.toggle("pg-group-search__clear--visible",i.length>0),this.searchDebounceTimer!==null&&clearTimeout(this.searchDebounceTimer),this.searchDebounceTimer=setTimeout(()=>{this.searchDebounceTimer=null,this.searchCallback?.(i)},180)}),n.addEventListener("pointerdown",i=>{i.preventDefault(),r.value="",n.classList.remove("pg-group-search__clear--visible"),this.searchDebounceTimer!==null&&(clearTimeout(this.searchDebounceTimer),this.searchDebounceTimer=null),this.searchCallback?.(""),r.focus()}),t.appendChild(o),t.appendChild(r),t.appendChild(n),e.appendChild(t),this.el.appendChild(e)}render(){if(!this.chipsEl)return;this.chipsEl.innerHTML="";let e=this.store.get("groupedColumnIds"),t=this.store.get("columns"),o=this.dockPos==="left"||this.dockPos==="right";if(e.length===0){let r=y("pg-group-drop-zone__hint");r.textContent="Drag a column here to group rows",this.chipsEl.appendChild(r);return}for(let r=0;r<e.length;r++){let n=e[r],i=t.find(c=>c.colId===n);if(!i)continue;if(r>0&&!o){let c=y("pg-group-chip__sep");c.innerHTML=this.iconRenderer.renderToString("chevronRight",12),this.chipsEl.appendChild(c)}let s=y("pg-group-chip");s.setAttribute("data-col-id",n),s.setAttribute("data-chip-index",String(r)),s.style.cursor="grab";let l=y("pg-group-chip__label");l.textContent=i.header,s.appendChild(l);let a=y("pg-group-chip__close");a.innerHTML=this.iconRenderer.renderToString("close",11),a.title="Remove grouping",a.addEventListener("click",c=>{c.stopPropagation(),this.removeColumn(n)}),s.appendChild(a),s.addEventListener("pointerdown",c=>{c.target.closest(".pg-group-chip__close")||(c.preventDefault(),this.startChipDrag(c,n,r))}),this.chipsEl.appendChild(s)}}startDockDrag(e){this.isDockDragging=!0,this.dockIndicatorEl=document.createElement("div"),this.dockIndicatorEl.style.cssText="position:fixed;pointer-events:none;z-index:99999;border:2px dashed var(--pg-colors-primary,#2563eb);background:var(--pg-colors-group-zone-over,rgba(37,99,235,0.1));border-radius:var(--pg-borders-radius-sm,4px);",document.body.appendChild(this.dockIndicatorEl),this._onDockMove=t=>this.onDockMove(t),this._onDockUp=t=>this.onDockUp(t),document.addEventListener("pointermove",this._onDockMove),document.addEventListener("pointerup",this._onDockUp),this.onDockMove(e)}onDockMove(e){if(!this.isDockDragging||!this.el||!this.dockIndicatorEl)return;let t=this.el.closest(".pg-grid");if(!t)return;let o=t.getBoundingClientRect(),r=(e.clientX-o.left)/o.width;r<.2?Object.assign(this.dockIndicatorEl.style,{left:`${o.left}px`,top:`${o.top}px`,width:"160px",height:`${o.height}px`,borderRadius:"4px 0 0 4px"}):r>.8?Object.assign(this.dockIndicatorEl.style,{left:`${o.right-160}px`,top:`${o.top}px`,width:"160px",height:`${o.height}px`,borderRadius:"0 4px 4px 0"}):Object.assign(this.dockIndicatorEl.style,{left:`${o.left}px`,top:`${o.top}px`,width:`${o.width}px`,height:"48px",borderRadius:"4px 4px 0 0"})}onDockUp(e){if(!this.isDockDragging||!this.el){this.cleanupDockDrag();return}let t=this.el.closest(".pg-grid");if(t){let o=t.getBoundingClientRect(),r=(e.clientX-o.left)/o.width,n=r<.2?"left":r>.8?"right":"top";this.setDock(n)}this.cleanupDockDrag()}setDock(e){e===this.dockPos||!this.el||!this.outerRowEl||!this.mainColEl||(this.dockPos=e,this.el.remove(),this.el.classList.remove("pg-group-drop-zone--top","pg-group-drop-zone--left","pg-group-drop-zone--right"),this.el.classList.add(`pg-group-drop-zone--${e}`),this.el.style.height="",this.el.style.width="",e==="top"?this.mainColEl.insertBefore(this.el,this.mainColEl.firstChild):e==="left"?this.outerRowEl.insertBefore(this.el,this.mainColEl):this.outerRowEl.appendChild(this.el),this.render())}cleanupDockDrag(){this.isDockDragging=!1,this.dockIndicatorEl?.remove(),this.dockIndicatorEl=null,this._onDockMove&&document.removeEventListener("pointermove",this._onDockMove),this._onDockUp&&document.removeEventListener("pointerup",this._onDockUp),this._onDockMove=null,this._onDockUp=null}startChipDrag(e,t,o){this.draggingChipId=t,this.chipDropIndex=o;let r=this.store.get("columns").find(s=>s.colId===t),n=y("pg-group-chip pg-group-chip--ghost"),i=y("pg-group-chip__label");i.textContent=r?.header??t,n.appendChild(i),n.style.cssText=`position:fixed;pointer-events:none;z-index:99999;opacity:0.85;left:${e.clientX+8}px;top:${e.clientY-14}px;`,document.body.appendChild(n),this.chipGhostEl=n,this._onChipMove=s=>this.onChipMove(s),this._onChipUp=s=>this.onChipUp(s),document.addEventListener("pointermove",this._onChipMove),document.addEventListener("pointerup",this._onChipUp)}onChipMove(e){if(!this.chipGhostEl||!this.chipsEl)return;this.chipGhostEl.style.left=`${e.clientX+8}px`,this.chipGhostEl.style.top=`${e.clientY-14}px`;let t=this.dockPos==="left"||this.dockPos==="right",o=Array.from(this.chipsEl.querySelectorAll(".pg-group-chip:not(.pg-group-chip--ghost)")),r=o.length;for(let n=0;n<o.length;n++){let i=o[n].getBoundingClientRect(),s=t?(i.top+i.bottom)/2:(i.left+i.right)/2;if((t?e.clientY:e.clientX)<s){r=n;break}}this.chipDropIndex=r;for(let n of o)n.style.opacity=n.getAttribute("data-col-id")===this.draggingChipId?"0.3":""}onChipUp(e){let t=this.draggingChipId,o=this.chipDropIndex;if(this.cleanupChipDrag(),!t)return;let r=[...this.store.get("groupedColumnIds")],n=r.indexOf(t);if(n===-1||n===o)return;r.splice(n,1);let i=o>n?Math.max(0,o-1):o;r.splice(i,0,t),this.groupingEngine.reorderGroupColumns(r)}cleanupChipDrag(){if(this.draggingChipId=null,this.chipDropIndex=-1,this.chipsEl)for(let e of Array.from(this.chipsEl.querySelectorAll(".pg-group-chip")))e.style.opacity="";this.chipGhostEl?.remove(),this.chipGhostEl=null,this._onChipMove&&document.removeEventListener("pointermove",this._onChipMove),this._onChipUp&&document.removeEventListener("pointerup",this._onChipUp),this._onChipMove=null,this._onChipUp=null}startResize(e){this.el&&(this.isResizing=!0,this.dockPos==="top"?(this.resizeStartSize=this.el.offsetHeight,this.resizeStartPos=e.clientY):(this.resizeStartSize=this.el.offsetWidth,this.resizeStartPos=e.clientX),this._onResizeMove=t=>this.onResizeMove(t),this._onResizeUp=()=>this.cleanupResize(),document.addEventListener("pointermove",this._onResizeMove),document.addEventListener("pointerup",this._onResizeUp))}onResizeMove(e){if(!(!this.isResizing||!this.el))if(this.dockPos==="top"){let t=e.clientY-this.resizeStartPos;this.el.style.height=`${Math.max(48,this.resizeStartSize+t)}px`}else if(this.dockPos==="left"){let t=e.clientX-this.resizeStartPos;this.el.style.width=`${Math.max(80,this.resizeStartSize+t)}px`}else{let t=this.resizeStartPos-e.clientX;this.el.style.width=`${Math.max(80,this.resizeStartSize+t)}px`}}cleanupResize(){this.isResizing=!1,this._onResizeMove&&document.removeEventListener("pointermove",this._onResizeMove),this._onResizeUp&&document.removeEventListener("pointerup",this._onResizeUp),this._onResizeMove=null,this._onResizeUp=null}};var Uo=(o=>(o.HOVER="hover",o.ALWAYS="always",o.HIDDEN="hidden",o))(Uo||{});var fn=(a=>(a.SORT="sort",a.FILTER="filter",a.PIN="pin",a.MOVE="move",a.RESIZE="resize",a.VISIBILITY="visibility",a.DATA="data",a.CLIPBOARD="clipboard",a.COLUMN="column",a))(fn||{});var ji=[["sort"],["filter"],["pin","move"],["resize"],["visibility"],["data"],["clipboard"],["column"]],$t=class{constructor(e,t,o,r,n){this.columnModel=e;this.sortEngine=t;this.eventBus=o;this.iconRenderer=r;this.onAction=n;this.el=null;this.anchorEl=null;this.outsideClickFn=null;this.escKeyFn=null;this.openSubmenuTimer=null;this.closeSubmenuTimer=null;this.activeSubmenuEl=null;this.submenuParents=new Map;this.groupCallbacks=null;this.menuCallbacks={};this.menuOptions={}}setMenuCallbacks(e){this.menuCallbacks=e}setMenuOptions(e){this.menuOptions=e}setGroupCallbacks(e){this.groupCallbacks=e}show(e,t,o,r){this.hide(),this.anchorEl=t,t.classList.add("pg-th__menu-btn--active");let n=this.buildMenu(e);document.body.appendChild(n),this.el=n,this.positionMenu(t,o,r),requestAnimationFrame(()=>{this.outsideClickFn=i=>{let s=i.target;this.el?.contains(s)||this.activeSubmenuEl?.contains(s)||this.hide()},this.escKeyFn=i=>{i.key==="Escape"&&this.hide()},document.addEventListener("mousedown",this.outsideClickFn),document.addEventListener("keydown",this.escKeyFn)})}hide(){this.outsideClickFn&&(document.removeEventListener("mousedown",this.outsideClickFn),this.outsideClickFn=null),this.escKeyFn&&(document.removeEventListener("keydown",this.escKeyFn),this.escKeyFn=null),this.clearSubmenuTimers(),this.activeSubmenuEl?.remove(),this.activeSubmenuEl=null,this.submenuParents.clear(),this.anchorEl?.classList.remove("pg-th__menu-btn--active"),this.anchorEl=null,this.el?.remove(),this.el=null}destroy(){this.hide()}buildMenu(e){let t=y("pg-col-ctx-menu");t.setAttribute("role","menu"),t.setAttribute("tabindex","-1");let o=new Set(this.menuOptions.sections??Object.values(fn)),r=this.buildAllSections(e),n=new Map(r.map(s=>[s.key,s])),i=!0;for(let s of ji){let l=s.filter(a=>o.has(a)&&(n.get(a)?.items.length??0)>0);if(l.length!==0){i||t.appendChild(this.createSeparator()),i=!1;for(let a of l){let c=n.get(a);for(let p of c.items)t.appendChild(p.kind==="parent"?this.buildParentItem(p,e):this.buildLeafItem(p))}}}return t}buildLeafItem(e){let t=y("pg-col-ctx-menu__item");if(t.setAttribute("role","menuitem"),t.setAttribute("tabindex","-1"),e.active&&t.classList.add("pg-col-ctx-menu__item--active"),e.disabled&&t.classList.add("pg-col-ctx-menu__item--disabled"),t.appendChild(this.createIcon(e.icon)),t.appendChild(this.createLabel(e.label)),e.checked){let o=y("pg-col-ctx-menu__item-check");o.innerHTML=this.iconRenderer.renderToString("check",14),t.appendChild(o)}return e.disabled||t.addEventListener("click",o=>{o.stopPropagation(),e.action(),this.hide()}),t}buildParentItem(e,t){let o=y("pg-col-ctx-menu__item pg-col-ctx-menu__item--has-submenu");o.setAttribute("role","menuitem"),o.setAttribute("aria-haspopup","true"),o.setAttribute("aria-expanded","false"),o.setAttribute("tabindex","-1"),o.appendChild(this.createIcon(e.icon)),o.appendChild(this.createLabel(e.label));let r=y("pg-col-ctx-menu__item-chevron");r.innerHTML=this.iconRenderer.renderToString("chevronRight",12),o.appendChild(r);let n=this.buildSubmenu(e.children,t);return this.submenuParents.set(n,o),this.attachSubmenuListeners(o,n),o}buildSubmenu(e,t){let o=y("pg-col-ctx-menu__submenu");o.setAttribute("role","menu");for(let r of e)o.appendChild(this.buildLeafItem(r));return o}attachSubmenuListeners(e,t){e.addEventListener("mouseenter",()=>{this.clearSubmenuTimers(),this.activeSubmenuEl&&this.activeSubmenuEl!==t&&this.closeSubmenu(this.activeSubmenuEl),this.openSubmenuTimer=setTimeout(()=>this.openSubmenu(t,e),60)}),e.addEventListener("mouseleave",o=>{this.activeSubmenuEl===t&&t.contains(o.relatedTarget)||(this.clearSubmenuTimers(),this.closeSubmenuTimer=setTimeout(()=>{!t.matches(":hover")&&!e.matches(":hover")&&this.closeSubmenu(t)},150))}),t.addEventListener("mouseenter",()=>{this.clearSubmenuTimers()}),t.addEventListener("mouseleave",o=>{e.contains(o.relatedTarget)||(this.clearSubmenuTimers(),this.closeSubmenuTimer=setTimeout(()=>{!t.matches(":hover")&&!e.matches(":hover")&&this.closeSubmenu(t)},150))})}openSubmenu(e,t){document.body.appendChild(e),this.activeSubmenuEl=e,e.classList.add("pg-col-ctx-menu__submenu--open"),t.setAttribute("aria-expanded","true"),this.adjustSubmenuPosition(e,t)}closeSubmenu(e){e.classList.remove("pg-col-ctx-menu__submenu--open"),e.remove(),this.submenuParents.get(e)?.setAttribute("aria-expanded","false"),this.activeSubmenuEl===e&&(this.activeSubmenuEl=null)}clearSubmenuTimers(){this.openSubmenuTimer!==null&&(clearTimeout(this.openSubmenuTimer),this.openSubmenuTimer=null),this.closeSubmenuTimer!==null&&(clearTimeout(this.closeSubmenuTimer),this.closeSubmenuTimer=null)}buildAllSections(e){return[this.buildSortSection(e),this.buildFilterSection(e),this.buildPinSection(e),this.buildMoveSection(e),this.buildResizeSection(e),this.buildVisibilitySection(e),this.buildDataSection(e),this.buildClipboardSection(e),this.buildColumnSection(e)]}buildSortSection(e){let t=this.sortEngine.isSorted(e.colId);return{key:"sort",items:e.sortable===!1?[]:[{kind:"leaf",label:"Sort Ascending",icon:"sortAsc",active:t==="asc",action:()=>{this.sortEngine.sort(e.colId,e.field,"asc"),this.columnModel.setColumnSort(e.colId,"asc"),this.onAction("sort",e.colId)}},{kind:"leaf",label:"Sort Descending",icon:"sortDesc",active:t==="desc",action:()=>{this.sortEngine.sort(e.colId,e.field,"desc"),this.columnModel.setColumnSort(e.colId,"desc"),this.onAction("sort",e.colId)}},{kind:"leaf",label:"Clear Sort",icon:"close",disabled:!t,action:()=>{this.sortEngine.clearColumnSort(e.colId),this.columnModel.setColumnSort(e.colId,null),this.onAction("sort",e.colId)}}]}}buildFilterSection(e){let t=e.filterActive===!0;return{key:"filter",items:e.filterable===!1?[]:[{kind:"leaf",label:"Filter",icon:"filter",action:()=>{let o=this.anchorEl??document.createElement("div");this.menuCallbacks.onOpenAdvancedFilter?.(e,o),this.onAction("advanced-filter",e.colId)}}]}}buildPinSection(e){return{key:"pin",items:[{kind:"parent",label:"Pin",icon:"pin",children:[{kind:"leaf",label:"Pin Left",icon:"pin",active:e.pinned==="left",action:()=>{this.columnModel.setColumnPin(e.colId,"left"),this.onAction("pin",e.colId)}},{kind:"leaf",label:"Pin Right",icon:"pin",active:e.pinned==="right",action:()=>{this.columnModel.setColumnPin(e.colId,"right"),this.onAction("pin",e.colId)}},{kind:"leaf",label:"Unpin",icon:"unpin",active:!e.pinned,action:()=>{this.columnModel.setColumnPin(e.colId,null),this.onAction("pin",e.colId)}}]}]}}buildMoveSection(e){let t=this.columnModel.getVisibleColumns(),o=t.findIndex(i=>i.colId===e.colId),r=o<=0,n=o>=t.length-1;return{key:"move",items:[{kind:"leaf",label:"Move Column to Left",icon:"chevronLeft",disabled:r,action:()=>{this.menuCallbacks.onMoveLeft?.(e.colId),this.onAction("move-left",e.colId)}},{kind:"leaf",label:"Move Column to Right",icon:"chevronRight",disabled:n,action:()=>{this.menuCallbacks.onMoveRight?.(e.colId),this.onAction("move-right",e.colId)}},{kind:"leaf",label:"Move to Start",icon:"pageFirst",disabled:r,action:()=>{this.menuCallbacks.onMoveStart?.(e.colId),this.onAction("move-start",e.colId)}},{kind:"leaf",label:"Move to End",icon:"pageLast",disabled:n,action:()=>{this.menuCallbacks.onMoveEnd?.(e.colId),this.onAction("move-end",e.colId)}}]}}buildResizeSection(e){return{key:"resize",items:[{kind:"parent",label:"Resize",icon:"expand",children:[{kind:"leaf",label:"Auto Size",icon:"columns",action:()=>{this.menuCallbacks.onAutoSize?.(e.colId),this.onAction("autosize",e.colId)}},{kind:"leaf",label:"Auto Size All",icon:"columns",action:()=>{this.menuCallbacks.onAutoSizeAll?.(),this.onAction("autosize-all",e.colId)}},{kind:"leaf",label:"Fit to Grid",icon:"expand",action:()=>{this.menuCallbacks.onFitToGrid?.(),this.onAction("fit-to-grid",e.colId)}},{kind:"leaf",label:"Reset Width",icon:"refresh",action:()=>{this.menuCallbacks.onResetWidth?.(e.colId),this.onAction("reset-width",e.colId)}}]}]}}buildVisibilitySection(e){return{key:"visibility",items:[{kind:"parent",label:"Visibility",icon:"eye",children:[{kind:"leaf",label:"Hide Column",icon:"eyeOff",action:()=>{this.columnModel.setColumnVisible(e.colId,!1),this.onAction("hide",e.colId)}},{kind:"leaf",label:"Column Chooser\u2026",icon:"columns",action:()=>{this.menuCallbacks.onOpenColumnChooser?.(),this.onAction("column-chooser",e.colId)}}]}]}}buildDataSection(e){let t=[];if(e.groupable!==!1&&this.groupCallbacks){let o=this.groupCallbacks.isGrouped(e.colId);t.push({kind:"leaf",label:o?"Remove Grouping":"Group by Column",icon:"group",active:o,action:()=>{o?this.groupCallbacks.removeGroup(e.colId):this.groupCallbacks.addGroup(e.colId),this.onAction("group",e.colId)}})}return(e.type==="number"||e.type==="currency")&&t.push({kind:"parent",label:"Aggregate",icon:"sigma",children:["sum","avg","min","max","count"].map(o=>({kind:"leaf",label:o.charAt(0).toUpperCase()+o.slice(1),icon:"sigma",checked:e.aggFunc===o,action:()=>{this.menuCallbacks.onAggregate?.(e,o),this.onAction(`aggregate-${o}`,e.colId)}}))}),{key:"data",items:t}}buildClipboardSection(e){return{key:"clipboard",items:[{kind:"parent",label:"Clipboard",icon:"copy",children:[{kind:"leaf",label:"Copy Header",icon:"copy",action:()=>{this.menuCallbacks.onCopyHeader?.(e),this.onAction("copy-header",e.colId)}},{kind:"leaf",label:"Copy Column",icon:"copy",action:()=>{this.menuCallbacks.onCopyColumn?.(e),this.onAction("copy-column",e.colId)}},{kind:"leaf",label:"Copy Values",icon:"copy",action:()=>{this.menuCallbacks.onCopyValues?.(e),this.onAction("copy-values",e.colId)}}]}]}}buildColumnSection(e){return{key:"column",items:[{kind:"parent",label:"Column",icon:"settings",children:[{kind:"leaf",label:"Rename",icon:"edit",action:()=>{this.menuCallbacks.onRename?.(e),this.onAction("rename",e.colId)}},{kind:"leaf",label:"Duplicate",icon:"copy",action:()=>{this.menuCallbacks.onDuplicate?.(e),this.onAction("duplicate",e.colId)}},{kind:"leaf",label:"Freeze Position",icon:"pin",checked:e.draggable===!1,action:()=>{this.menuCallbacks.onFreezePosition?.(e),this.onAction("freeze",e.colId)}},{kind:"leaf",label:"Lock Column",icon:"lock",checked:e.locked===!0,action:()=>{this.menuCallbacks.onLockColumn?.(e),this.onAction("lock",e.colId)}},{kind:"leaf",label:"Reset Column",icon:"refresh",action:()=>{this.menuCallbacks.onResetColumn?.(e),this.onAction("reset-column",e.colId)}}]}]}}createSeparator(){let e=y("pg-col-ctx-menu__separator");return e.setAttribute("role","separator"),e}createIcon(e){let t=y("pg-col-ctx-menu__item-icon");return t.innerHTML=this.iconRenderer.renderToString(e,14),t}createLabel(e){let t=y("pg-col-ctx-menu__item-label");return t.textContent=e,t}positionMenu(e,t,o){let r=this.el;if(!r)return;let n=window.innerWidth,i=window.innerHeight,s=r.offsetWidth||220,l=Math.min(r.scrollHeight||400,i-200),a,c;if(t!==void 0&&o!==void 0)a=t,c=o;else{let p=e.getBoundingClientRect();a=p.right-s,c=p.bottom+2}a+s>n&&(a=n-s-4),a<4&&(a=4),c+l>i&&(c=(o??e.getBoundingClientRect().top)-l-2),c<4&&(c=4),r.style.left=`${a}px`,r.style.top=`${c}px`}adjustSubmenuPosition(e,t){let o=t.getBoundingClientRect(),r=e.offsetWidth||180,n=e.scrollHeight||200,i=window.innerWidth,s=window.innerHeight,l=o.right,a=o.top-4;l+r>i&&(l=o.left-r),l<4&&(l=4),a+n>s&&(a=s-n-4),a<4&&(a=4),e.style.left=`${l}px`,e.style.top=`${a}px`}};var Ut=class{constructor(e,t){this.engine=e;this.iconRenderer=t;this.el=null;this.anchorEl=null;this.outsideClickFn=null;this.escKeyFn=null;this.callbacks={}}setCallbacks(e){this.callbacks=e}show(e,t,o,r){this.hide(),this.anchorEl=t,t.classList.add("pg-th--ctx-menu-open");let n=this.buildMenu(e);document.body.appendChild(n),this.el=n,this.positionMenu(t,o,r),requestAnimationFrame(()=>{this.outsideClickFn=i=>{this.el?.contains(i.target)||this.hide()},this.escKeyFn=i=>{i.key==="Escape"&&this.hide()},document.addEventListener("mousedown",this.outsideClickFn),document.addEventListener("keydown",this.escKeyFn)})}hide(){this.outsideClickFn&&(document.removeEventListener("mousedown",this.outsideClickFn),this.outsideClickFn=null),this.escKeyFn&&(document.removeEventListener("keydown",this.escKeyFn),this.escKeyFn=null),this.anchorEl?.classList.remove("pg-th--ctx-menu-open"),this.anchorEl=null,this.el?.remove(),this.el=null}destroy(){this.hide()}buildMenu(e){let t=y("pg-col-ctx-menu");t.setAttribute("role","menu"),t.setAttribute("tabindex","-1");let o=this.buildEntries(e);for(let r of o)"kind"in r?t.appendChild(this.createSeparator()):t.appendChild(this.buildItem(r));return t}buildEntries(e){let t=e.logicalGroupId,o=this.engine.getGroupPositionInfo(t);return[{label:"Move Column to Left",icon:"chevronLeft",disabled:o.isFirst,action:()=>{this.engine.moveGroupLeft(t),this.callbacks.onAction?.("move-left",t)}},{label:"Move Column to Right",icon:"chevronRight",disabled:o.isLast,action:()=>{this.engine.moveGroupRight(t),this.callbacks.onAction?.("move-right",t)}},{label:"Move to Start",icon:"pageFirst",disabled:o.isFirst,action:()=>{this.engine.moveGroupToStart(t),this.callbacks.onAction?.("move-start",t)}},{label:"Move to End",icon:"pageLast",disabled:o.isLast,action:()=>{this.engine.moveGroupToEnd(t),this.callbacks.onAction?.("move-end",t)}},{kind:"separator"},{label:"Hide Group",icon:"eyeOff",action:()=>{this.engine.hideGroupLeaves(t),this.callbacks.onAction?.("hide-group",t)}},{label:"Choose Columns\u2026",icon:"columns",action:()=>{this.callbacks.onOpenColumnChooser?.(),this.callbacks.onAction?.("column-chooser",t)}}]}buildItem(e){let t=y("pg-col-ctx-menu__item");t.setAttribute("role","menuitem"),t.setAttribute("tabindex","-1"),e.disabled&&t.classList.add("pg-col-ctx-menu__item--disabled");let o=y("pg-col-ctx-menu__item-icon");o.innerHTML=this.iconRenderer.renderToString(e.icon,14),t.appendChild(o);let r=y("pg-col-ctx-menu__item-label");return r.textContent=e.label,t.appendChild(r),e.disabled||t.addEventListener("click",n=>{n.stopPropagation(),e.action(),this.hide()}),t}createSeparator(){let e=y("pg-col-ctx-menu__separator");return e.setAttribute("role","separator"),e}positionMenu(e,t,o){let r=this.el;if(!r)return;let n=window.innerWidth,i=window.innerHeight,s=r.offsetWidth||220,l=r.scrollHeight||300,a,c;if(t!==void 0&&o!==void 0)a=t,c=o;else{let p=e.getBoundingClientRect();a=p.left,c=p.bottom+2}a+s>n&&(a=n-s-4),a<4&&(a=4),c+l>i&&(c=(o??e.getBoundingClientRect().top)-l-2),c<4&&(c=4),r.style.left=`${a}px`,r.style.top=`${c}px`}};var Ze=class{constructor(e,t,o,r,n,i){this.store=e;this.eventBus=t;this.iconRenderer=o;this.columnModel=r;this.sortEngine=n;this.colStyles=i;this.leftHeaderRowEl=null;this.centerHeaderRowEl=null;this.rightHeaderRowEl=null;this.centerFilterRowEl=null;this.headerCheckbox=null;this.groupContextMenu=null;this.groupDropZone=null;this.groupModel=null;this.groupHeaderBuilder=null;this.leftGroupRowEls=[];this.centerGroupRowEls=[];this.rightGroupRowEls=[];this.onGroupToggleFn=null;this.onGroupResizeFn=null;this.groupDragHandler=null;this.displayGroupEngine=null;this.lastGroupRowHeight=44;this.draggingColId=null;this.isDragging=!1;this.draggingPanelRowEl=null;this.draggingIsGroupable=!1;this.isOverGroupZone=!1;this.ghostEl=null;this.dragStyleEl=null;this.draggingGridEl=null;this.draggedColWidth=0;this.dragStartScrollX=0;this.dragIsHideMode=!1;this.dragSourcePanel="center";this.dragTargetPanel="center";this.dragTargetLocalIdx=-1;this.panelDragData=[];this.livePanelMoveInProgress=!1;this.scrollByX=null;this.canScrollX=null;this.onResizeCb=null;this.autoScrollRAF=0;this.autoScrollSpeed=0;this.centerPanelRect=null;this.lastDragClientX=0;this.openFilterPanelFn=null;this.openColumnChooserFn=null;this.columnDataRefreshFn=null;this._isResizingColumn=!1;this.lastResizeDownColId="";this.lastResizeDownAt=0;this.tickAutoScroll=()=>{if(!(!this.isDragging||this.autoScrollSpeed===0)){if(this.autoScrollSpeed<0&&!(this.canScrollX?.(-1)??!0)){this.stopAutoScroll();return}if(this.autoScrollSpeed>0&&!(this.canScrollX?.(1)??!0)){this.stopAutoScroll();return}this.scrollByX?.(this.autoScrollSpeed),this.onDragMove(this.lastDragClientX),this.autoScrollRAF=requestAnimationFrame(this.tickAutoScroll)}};this.columnMenu=new $t(r,n,t,o,(s,l)=>this.onAction(s,l)),this.columnMenu.setMenuCallbacks({onAutoSize:s=>{this.autoSizeColumns([s]),this.onAction("autosize",s)},onAutoSizeAll:()=>{this.autoSizeColumns(this.columnModel.getVisibleColumns().map(s=>s.colId)),this.onAction("autosize-all","")},onFitToGrid:()=>{this.fitColumnsToGrid(),this.onAction("fit-to-grid","")},onResetWidth:s=>{this.resetColumnWidth(s),this.onAction("reset-width",s)},onOpenColumnChooser:()=>{this.openColumnChooserFn?.(),this.onAction("column-chooser","")},onOpenAdvancedFilter:(s,l)=>{this.openFilterPanelFn?.(s,l),this.onAction("advanced-filter",s.colId)},onQuickFilter:s=>this.onAction("quick-filter",s),onCopyHeader:s=>{navigator.clipboard?.writeText(s.header).catch(()=>{}),this.onAction("copy-header",s.colId)},onCopyColumn:s=>this.onAction("copy-column",s.colId),onCopyValues:s=>this.onAction("copy-values",s.colId),onRename:s=>{this.startHeaderRename(s.colId),this.onAction("rename",s.colId)},onDuplicate:s=>{this.columnModel.duplicateColumn(s.colId),this.onAction("duplicate",s.colId)},onFreezePosition:s=>{this.columnModel.toggleColumnFrozen(s.colId),this.onAction("freeze",s.colId)},onLockColumn:s=>{this.columnModel.toggleColumnLocked(s.colId),this.onAction("lock",s.colId)},onResetColumn:s=>{this.colStyles.clearUserWidth(s.colId),this.columnModel.resetColumn(s.colId),this.onAction("reset-column",s.colId)},onAggregate:(s,l)=>{let a=l,c=this.columnModel.getColumn(s.colId)?.aggFunc;this.columnModel.setColumnAggFunc(s.colId,c===a?null:a),this.store.get("groupedColumnIds").length>0&&this.columnDataRefreshFn?.(),this.onAction(`aggregate-${l}`,s.colId)},onMoveLeft:s=>{let a=r.getVisibleColumns().findIndex(c=>c.colId===s);a>0&&(r.moveColumn(a,a-1),this.onAction("move",s))},onMoveRight:s=>{let l=r.getVisibleColumns(),a=l.findIndex(c=>c.colId===s);a<l.length-1&&(r.moveColumn(a,a+1),this.onAction("move",s))},onMoveStart:s=>{let a=r.getVisibleColumns().findIndex(c=>c.colId===s);a>0&&(r.moveColumn(a,0),this.onAction("move",s))},onMoveEnd:s=>{let l=r.getVisibleColumns(),a=l.findIndex(c=>c.colId===s);a<l.length-1&&(r.moveColumn(a,l.length-1),this.onAction("move",s))}}),this.boundMouseMove=this.onGlobalMouseMove.bind(this),this.boundMouseUp=this.onGlobalMouseUp.bind(this),this.eventBus.on(x.COLUMN_SORTED,s=>{let l=s;this.updateSortIndicator(l.colId,l.order)})}get isDraggingCol(){return this.isDragging}get isBusy(){return this.isDragging||this._isResizingColumn}get isResizingColumn(){return this._isResizingColumn}setScrollCallback(e,t){this.scrollByX=e,this.canScrollX=t??null}setResizeCallback(e){this.onResizeCb=e}setOpenFilterPanelCallback(e){this.openFilterPanelFn=e}setColumnChooserCallback(e){this.openColumnChooserFn=e}setColumnDataRefreshCallback(e){this.columnDataRefreshFn=e}setColumnGroupModel(e,t){this.groupModel=e,this.groupHeaderBuilder=t}setDisplayGroupEngine(e){this.displayGroupEngine=e,this.groupContextMenu=new Ut(e,this.iconRenderer),this.groupContextMenu.setCallbacks({onOpenColumnChooser:()=>{this.openColumnChooserFn?.(),this.onAction("column-chooser","")},onAction:(t,o)=>this.onAction(t,o)})}setGroupToggleCallback(e){this.onGroupToggleFn=e}setGroupResizeCallback(e){this.onGroupResizeFn=e}setGroupDragHandler(e){this.groupDragHandler=e}rebuildGroupRows(e){if(!this.groupModel||!this.groupHeaderBuilder||!this.groupModel.hasGroups())return;let t=this.groupModel.getMaxDepth(),o=e.headerRowHeight??44,r=this.buildGroupCellOptions(o),n=(i,s)=>{let l=this.groupModel.getRootNodes(s);this.groupHeaderBuilder.updateGroupRows(i,l,this.colStyles,t,r)};n(this.leftGroupRowEls,"left"),n(this.centerGroupRowEls,"center"),n(this.rightGroupRowEls,"right")}updateFilterIndicators(e){let t=[this.leftHeaderRowEl,this.centerHeaderRowEl,this.rightHeaderRowEl].filter(o=>o!==null);for(let o of t)for(let r of Array.from(o.querySelectorAll(".pg-th[data-col-id]"))){let n=r.getAttribute("data-col-id")??"",i=e.has(n);r.classList.toggle("pg-th--filter-active",i);let s=r.querySelector(".pg-th__filter-btn");if(s){s.classList.toggle("pg-th__filter-btn--active",i);let l=i?"filterActive":"filter",a=s.querySelector(".pg-icon");a&&this.iconRenderer.updateIcon(a,l)}}}buildGroupCellOptions(e){return{rowHeight:e,onCollapseToggle:t=>{this.onGroupToggleFn?.(t)},onGroupResize:(t,o)=>{this.onGroupResizeFn?.(t,o)}}}renderInPanels(e,t,o,r,n={}){let i=r.filter(a=>a.pinned==="left"),s=r.filter(a=>a.pinned!=="left"&&a.pinned!=="right"),l=r.filter(a=>a.pinned==="right");if(this.lastGroupRowHeight=n.headerRowHeight??this.lastGroupRowHeight,this.leftGroupRowEls=[],this.centerGroupRowEls=[],this.rightGroupRowEls=[],this.displayGroupEngine?.hasGroups){let a=this.displayGroupEngine,c=n.headerRowHeight??44,p=a.getDragHandler(),h={rowHeight:c,onCollapseToggle:u=>this.onGroupToggleFn?.(u),onGroupResize:(u,g)=>this.onGroupResizeFn?.(u,g),onGroupHeaderMouseDown:p?(u,g,m)=>p.onHeaderMouseDown(u,g,m):void 0,didJustDragFn:p?()=>p.didJustDrag:void 0,onGroupContextMenu:(u,g,m)=>this.groupContextMenu?.show(g,m,u.clientX,u.clientY)};this.leftGroupRowEls=a.headerBuilder.buildGroupRows(a.buildTree(i),h),this.centerGroupRowEls=a.headerBuilder.buildGroupRows(a.buildTree(s),h),this.rightGroupRowEls=a.headerBuilder.buildGroupRows(a.buildTree(l),h);for(let u of this.leftGroupRowEls)e.appendChild(u);for(let u of this.centerGroupRowEls)t.appendChild(u);for(let u of this.rightGroupRowEls)o.appendChild(u);e.style.setProperty("--pg-group-rows-count",String(this.leftGroupRowEls.length)),t.style.setProperty("--pg-group-rows-count",String(this.centerGroupRowEls.length)),o.style.setProperty("--pg-group-rows-count",String(this.rightGroupRowEls.length))}else if(this.groupModel?.hasGroups()&&this.groupHeaderBuilder){let a=this.groupModel.getMaxDepth(),c=n.headerRowHeight??44,p=this.buildGroupCellOptions(c);this.leftGroupRowEls=this.groupHeaderBuilder.buildGroupRows(this.groupModel.getRootNodes("left"),this.colStyles,a,p),this.centerGroupRowEls=this.groupHeaderBuilder.buildGroupRows(this.groupModel.getRootNodes("center"),this.colStyles,a,p),this.rightGroupRowEls=this.groupHeaderBuilder.buildGroupRows(this.groupModel.getRootNodes("right"),this.colStyles,a,p);for(let h of this.leftGroupRowEls)e.appendChild(h);for(let h of this.centerGroupRowEls)t.appendChild(h);for(let h of this.rightGroupRowEls)o.appendChild(h)}if(this.leftHeaderRowEl=this.buildHeaderRow(i,n,!0),e.appendChild(this.leftHeaderRowEl),n.showFilterRow&&e.appendChild(this.buildFilterRow(i,n,!0)),this.centerHeaderRowEl=this.buildHeaderRow(s,n,!1),n.hasGroupedColumns&&this.centerHeaderRowEl.insertBefore(this.buildAutoGroupTh(n.autoGroupColWidth??200),this.centerHeaderRowEl.firstChild),t.appendChild(this.centerHeaderRowEl),n.showFilterRow){let a=this.buildFilterRow(s,n,!1);this.centerFilterRowEl=a,n.hasGroupedColumns&&a.insertBefore(y("pg-filter-cell pg-filter-cell--auto-group"),a.firstChild),t.appendChild(a)}this.rightHeaderRowEl=this.buildHeaderRow(l,n,!1),o.appendChild(this.rightHeaderRowEl),n.showFilterRow&&o.appendChild(this.buildFilterRow(l,n,!1))}updateSortIndicator(e,t){let o=[this.leftHeaderRowEl,this.centerHeaderRowEl,this.rightHeaderRowEl].filter(r=>r!==null);for(let r of o)for(let n of Array.from(r.querySelectorAll(".pg-th[data-col-id]"))){let i=n.getAttribute("data-col-id")===e,s=n.classList.contains("pg-th--sorted");j(n,"pg-th--sort-asc",i&&t==="asc"),j(n,"pg-th--sort-desc",i&&t==="desc"),j(n,"pg-th--sorted",i&&t!==null);let l=n.querySelector(".pg-th__sort-icon");l&&(i?this.iconRenderer.updateIcon(l,t==="asc"?"sortAsc":t==="desc"?"sortDesc":"sortNone"):s&&this.iconRenderer.updateIcon(l,"sortNone"))}}updateAllChecked(e,t){this.headerCheckbox&&(this.headerCheckbox.checked=e,this.headerCheckbox.indeterminate=t&&!e)}setGroupDropZone(e){this.groupDropZone=e,this.columnMenu.setGroupCallbacks({isGrouped:t=>e.isGrouped(t),addGroup:t=>e.dropColumn(t),removeGroup:t=>e.removeColumn(t)})}destroy(){document.removeEventListener("pointermove",this.boundMouseMove),document.removeEventListener("pointerup",this.boundMouseUp),this.columnMenu.destroy(),this.groupContextMenu?.destroy(),this.leftHeaderRowEl=null,this.centerHeaderRowEl=null,this.rightHeaderRowEl=null,this.centerFilterRowEl=null,this.headerCheckbox=null,this.leftGroupRowEls=[],this.centerGroupRowEls=[],this.rightGroupRowEls=[]}updateCenterVisibleCols(e,t,o,r){if(!this.centerHeaderRowEl)return;if(this.lastGroupRowHeight=r.headerRowHeight??this.lastGroupRowHeight,this.displayGroupEngine?.hasGroups){let s=this.store.get("columns"),l=s.filter(a=>a.pinned!=="left"&&a.pinned!=="right"&&a.visible!==!1);this.rebuildGroupRowsForPanel("center",l),this.isDragging&&(this.rebuildGroupRowsForPanel("left",s.filter(a=>a.pinned==="left"&&a.visible!==!1)),this.rebuildGroupRowsForPanel("right",s.filter(a=>a.pinned==="right"&&a.visible!==!1)))}if(this.groupModel?.hasGroups()&&this.groupHeaderBuilder&&this.centerGroupRowEls.length>0){let s=this.groupModel.getMaxDepth(),l=r.headerRowHeight??44,a=this.buildGroupCellOptions(l);this.groupHeaderBuilder.updateGroupRows(this.centerGroupRowEls,this.groupModel.getRootNodes("center"),this.colStyles,s,a)}let n=this.isDragging?this.draggingColId:null,i=null;n&&(i=this.centerHeaderRowEl.querySelector(`.pg-th[data-col-id="${n}"]`),i?.remove()),this.centerHeaderRowEl.innerHTML="",r.hasGroupedColumns&&this.centerHeaderRowEl.appendChild(this.buildAutoGroupTh(r.autoGroupColWidth??200)),t>0&&this.centerHeaderRowEl.appendChild(this.makeSpacer("pg-th pg-th--h-spacer",t));for(let s=0;s<e.length;s++){let l=e[s];i&&l.colId===n?this.centerHeaderRowEl.appendChild(i):this.centerHeaderRowEl.appendChild(this.buildHeaderCell(l,s,e,r,this.centerHeaderRowEl))}if(o>0&&this.centerHeaderRowEl.appendChild(this.makeSpacer("pg-th pg-th--h-spacer",o)),!!this.centerFilterRowEl){this.centerFilterRowEl.innerHTML="",r.hasGroupedColumns&&this.centerFilterRowEl.appendChild(y("pg-filter-cell pg-filter-cell--auto-group")),t>0&&this.centerFilterRowEl.appendChild(this.makeSpacer("pg-filter-cell pg-filter-cell--h-spacer",t));for(let s of e)this.centerFilterRowEl.appendChild(this.buildFilterCell(s));o>0&&this.centerFilterRowEl.appendChild(this.makeSpacer("pg-filter-cell pg-filter-cell--h-spacer",o))}}makeSpacer(e,t){let o=y(e);return o.style.cssText=`width:${t}px;min-width:${t}px;flex-shrink:0;`,o}capturePanelDragData(){let e=(t,o)=>{if(!o)return null;let r=Array.from(o.querySelectorAll(".pg-th[data-col-id]")),i=o.closest(".pg-panel__header")?.getBoundingClientRect()??null;return!i||i.width===0?null:{panel:t,rects:r.map(s=>s.getBoundingClientRect()),colIds:r.map(s=>s.getAttribute("data-col-id")??""),bounds:i}};return[e("left",this.leftHeaderRowEl),e("center",this.centerHeaderRowEl),e("right",this.rightHeaderRowEl)].filter(t=>t!==null)}buildHeaderRow(e,t,o){let r=y("pg-header-row");r.setAttribute("role","row"),o&&(t.showSerialNumber&&r.appendChild(this.buildSerialHeaderCell()),t.showCheckboxes&&r.appendChild(this.buildCheckboxHeaderCell()));for(let n=0;n<e.length;n++)r.appendChild(this.buildHeaderCell(e[n],n,e,t,r));return r}buildAutoGroupTh(e){let t=y("pg-th pg-th--auto-group");t.setAttribute("role","columnheader"),t.style.width=`${e}px`,t.style.minWidth=`${e}px`;let o=y("pg-th__content"),r=y("pg-th__label");return r.textContent="Groups",o.appendChild(r),t.appendChild(o),t}buildCheckboxHeaderCell(){let e=y("pg-th pg-th--checkbox");e.setAttribute("role","columnheader");let t=document.createElement("input");t.type="checkbox",t.className="pg-checkbox pg-header-checkbox",t.setAttribute("aria-label","Select all rows"),this.headerCheckbox=t;let o=this.store.get("isAllSelected"),r=this.store.get("isIndeterminate");return t.checked=o,t.indeterminate=r&&!o,t.addEventListener("change",()=>{this.eventBus.emit(x.ALL_ROWS_SELECTED,{action:t.checked?"selectAll":"deselectAll"})}),e.appendChild(t),e}buildSerialHeaderCell(){let e=y("pg-th pg-th--serial");e.setAttribute("role","columnheader");let t=document.createElement("span");return t.className="pg-th__serial-label",t.textContent="#",e.appendChild(t),e}buildHeaderCell(e,t,o,r,n){let i=y("pg-th");i.setAttribute("role","columnheader"),i.setAttribute("data-col-id",e.colId),i.setAttribute("data-col-index",String(t)),i.setAttribute("tabindex","0"),this.displayGroupEngine?.hasGroups&&this.displayGroupEngine.isFlat(e.colId)&&i.classList.add("pg-th--no-group"),e.headerCssClass&&(i.className+=` ${e.headerCssClass}`),j(i,"pg-th--sortable",e.sortable!==!1),j(i,"pg-th--sorted",!!e.sortOrder),j(i,"pg-th--sort-asc",e.sortOrder==="asc"),j(i,"pg-th--sort-desc",e.sortOrder==="desc");let s=e.textAlign??(e.type==="number"||e.type==="currency"?"right":"left");s!=="left"&&i.classList.add(`pg-th--align-${s}`),s==="right"&&i.classList.add("pg-th--reverse"),e.pinned==="right"&&i.classList.add("pg-th--pinned-right");let l=$(e,"header");if(l){let p=l({colDef:e,sortOrder:e.sortOrder??null,filterActive:!!e.filterActive,api:null});typeof p=="string"?i.innerHTML=p:i.appendChild(p)}else{let p=y("pg-th__content"),h=y("pg-th__label");h.textContent=e.header,h.title=e.header,p.appendChild(h),e.sortable!==!1&&p.appendChild(this.iconRenderer.render(e.sortOrder==="asc"?"sortAsc":e.sortOrder==="desc"?"sortDesc":"sortNone",{size:14,className:"pg-th__sort-icon"})),i.appendChild(p)}let a=e.filterIconDisplay??r.filterIconDisplay??"hover";if(e.filterable!==!1&&a!=="hidden"){let p=y("pg-th__filter-btn"),h=e.filterActive===!0;h&&p.classList.add("pg-th__filter-btn--active"),a==="always"&&p.classList.add("pg-th__filter-btn--always"),p.innerHTML=this.iconRenderer.renderToString(h?"filterActive":"filter",14),p.title="Filter column",p.setAttribute("tabindex","0"),p.setAttribute("aria-label",`Filter ${e.header}`),p.addEventListener("click",u=>{u.stopPropagation(),this.openFilterPanelFn?.(e,p)}),i.appendChild(p)}let c=e.menuIconDisplay??r.menuIconDisplay??"hover";if(r.showColumnMenu!==!1&&c!=="hidden"){let p=y("pg-th__menu-btn");c==="always"&&p.classList.add("pg-th__menu-btn--always"),p.innerHTML=this.iconRenderer.renderToString("menuHorizontal",14),p.title="Column options",p.setAttribute("tabindex","0"),p.addEventListener("click",h=>{h.stopPropagation(),this.columnMenu.show(e,p)}),i.appendChild(p)}if(i.addEventListener("contextmenu",p=>{p.preventDefault(),p.stopPropagation(),this.columnMenu.show(e,i,p.clientX,p.clientY)}),e.resizable!==!1){let p=y("pg-th__resize-handle");p.addEventListener("pointerdown",h=>{if(h.button===0){if(h.preventDefault(),h.stopPropagation(),this.lastResizeDownColId===e.colId&&h.timeStamp-this.lastResizeDownAt<350){this.lastResizeDownColId="",this.lastResizeDownAt=0,this.autoSizeColumns([e.colId]),this.onAction("autosize",e.colId);return}this.lastResizeDownColId=e.colId,this.lastResizeDownAt=h.timeStamp,this.startResize(h,e,i)}}),i.appendChild(p)}return e.sortable!==!1&&i.addEventListener("click",p=>{if(p.target.closest(".pg-th__resize-handle, .pg-th__menu-btn, .pg-th__filter-btn"))return;let h=e.sortOrder===null?"asc":e.sortOrder==="asc"?"desc":null;h?this.sortEngine.sort(e.colId,e.field,h):this.sortEngine.clearSort(),this.columnModel.setColumnSort(e.colId,h),this.updateSortIndicator(e.colId,h),this.onAction("sort",e.colId)}),this.attachColumnDragListeners(i,e,o,n),i}buildFilterCell(e){let t=y("pg-filter-cell");if(t.setAttribute("data-col-id",e.colId),e.filterable!==!1){let o=document.createElement("input");o.type="text",o.className="pg-filter-input",o.placeholder=`${e.header}\u2026`,o.setAttribute("data-col-id",e.colId),o.addEventListener("input",r=>{this.eventBus.emit(x.COLUMN_FILTER_CHANGED,{colId:e.colId,field:e.field,term:r.target.value})}),t.appendChild(o)}return t}buildFilterRow(e,t,o){let r=y("pg-filter-row");r.setAttribute("role","row"),o&&(t.showCheckboxes&&r.appendChild(y("pg-filter-cell pg-filter-cell--checkbox")),t.showSerialNumber&&r.appendChild(y("pg-filter-cell pg-filter-cell--serial")));for(let n of e)r.appendChild(this.buildFilterCell(n));return r}attachColumnDragListeners(e,t,o,r){e.addEventListener("pointerdown",n=>{if(n.target.closest(".pg-th__resize-handle, .pg-th__menu-btn, .pg-th__filter-btn, .pg-checkbox")||t.draggable===!1||n.button!==0)return;let i=n.clientX,s=n.clientY,l=J(n),a=!1,c=0,p=()=>{c&&(clearTimeout(c),c=0),e.classList.remove("pg-th--drag-armed"),document.removeEventListener("pointermove",u),document.removeEventListener("pointerup",g)},h=()=>{a||(a=!0,c&&(clearTimeout(c),c=0),e.classList.remove("pg-th--drag-armed"),this.startColumnDrag(t,r),document.removeEventListener("pointermove",u),document.addEventListener("pointermove",this.boundMouseMove),document.addEventListener("pointerup",this.boundMouseUp),this.onDragMove(i))},u=m=>{if(a)return;let f=Math.abs(m.clientX-i),C=Math.abs(m.clientY-s);l?(f>q||C>q)&&p():f>fe&&h()},g=()=>{a||p()};document.addEventListener("pointermove",u),document.addEventListener("pointerup",g),l&&(e.classList.add("pg-th--drag-armed"),c=window.setTimeout(()=>{c=0,h()},Ye))})}startColumnDrag(e,t){this.draggingColId=e.colId,this.isDragging=!0,this.draggingPanelRowEl=t,this.draggingIsGroupable=e.groupable===!0&&this.groupDropZone!==null,this.isOverGroupZone=!1,this.dragIsHideMode=!1,this.livePanelMoveInProgress=!1,this.dragSourcePanel=t===this.leftHeaderRowEl?"left":t===this.rightHeaderRowEl?"right":"center",this.dragTargetPanel=this.dragSourcePanel,this.dragTargetLocalIdx=-1;let o=y("pg-col-drag-ghost"),r=(u,g)=>{let m=document.createElement("span");return m.className=`pg-col-drag-ghost__icon ${u}`,m.innerHTML=this.iconRenderer.renderToString(g,14),m};o.appendChild(r("pg-col-drag-ghost__icon--arrow-left","chevronLeft")),o.appendChild(r("pg-col-drag-ghost__icon--move","drag")),o.appendChild(r("pg-col-drag-ghost__icon--ban","ban")),o.appendChild(r("pg-col-drag-ghost__icon--hide","eyeOff"));let n=document.createElement("span");n.className="pg-col-drag-ghost__label",n.textContent=e.header,o.appendChild(n),o.appendChild(r("pg-col-drag-ghost__icon--arrow-right","chevronRight")),document.body.appendChild(o),this.ghostEl=o;let i=this.panelDragData.find(u=>u.panel===this.dragSourcePanel),s=t.querySelector(`[data-col-id="${e.colId}"]`);s?.classList.add("pg-th--dragging");let l=t.closest(".pg-grid");this.draggingGridEl=l,this.panelDragData=this.capturePanelDragData();let a=this.panelDragData.find(u=>u.panel===this.dragSourcePanel),c=a?.colIds.indexOf(e.colId)??-1;this.draggedColWidth=(c>=0&&a?a.rects[c].width:0)||s?.getBoundingClientRect().width||0,this.dragStartScrollX=parseFloat(l?.style.getPropertyValue("--pg-scroll-x")??"0");let p=this.panelDragData.find(u=>u.panel==="center");this.centerPanelRect=p?.bounds??null;let h=document.createElement("style");h.setAttribute("data-pg-drag",""),document.head.appendChild(h),this.dragStyleEl=h,l?.classList.add("pg-grid--col-dragging"),l?.classList.add("pg-grid--col-autoscrolling"),requestAnimationFrame(()=>requestAnimationFrame(()=>{this.isDragging&&this.draggingGridEl?.classList.remove("pg-grid--col-autoscrolling")})),document.body.style.cursor="grabbing",document.body.style.userSelect="none"}moveToPanelLive(e,t){if(this.livePanelMoveInProgress)return;this.livePanelMoveInProgress=!0;let o=this.draggingColId,n=this.panelDragData.find(a=>a.panel===e)?.colIds[t]??null,i=e==="left"?"left":e==="right"?"right":null,s=e==="left"?this.leftHeaderRowEl:e==="right"?this.rightHeaderRowEl:this.centerHeaderRowEl,l=this.draggingGridEl?.querySelector(`.pg-th[data-col-id="${o}"]`);if(l&&s){let a=Array.from(s.querySelectorAll(".pg-th[data-col-id]")),c=t<a.length?a[t]:null;if(c)s.insertBefore(l,c);else{let p=a[a.length-1];p?.nextSibling?s.insertBefore(l,p.nextSibling):s.appendChild(l)}}this.dragStyleEl&&(this.dragStyleEl.textContent=""),this.dragSourcePanel=e,this.dragTargetPanel=e,this.dragTargetLocalIdx=-1,this.columnModel.moveAndPin(o,i,n),requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!this.isDragging||this.draggingColId!==o){this.livePanelMoveInProgress=!1;return}this.draggingGridEl?.querySelector(`.pg-th[data-col-id="${o}"]`)?.classList.add("pg-th--dragging"),this.panelDragData=this.capturePanelDragData(),this.dragStartScrollX=parseFloat(this.draggingGridEl?.style.getPropertyValue("--pg-scroll-x")??"0");let a=this.panelDragData.find(c=>c.panel==="center");this.centerPanelRect=a?.bounds??null,this.livePanelMoveInProgress=!1})})}updateAutoScroll(e){if(!this.centerPanelRect||!this.scrollByX)return;let t=80,{left:o,right:r}=this.centerPanelRect,n=0;if(e<o+t){let s=-Math.round((o+t-e)/t*10);n=this.canScrollX?.(-1)??!0?s:0}else if(e>r-t){let s=Math.round((e-r+t)/t*10);n=this.canScrollX?.(1)??!0?s:0}let i=this.autoScrollSpeed!==0;this.autoScrollSpeed=n,n!==0&&!i?this.autoScrollRAF=requestAnimationFrame(this.tickAutoScroll):n===0&&i&&this.stopAutoScroll(),this.ghostEl?.classList.toggle("pg-col-drag-ghost--scroll-left",n<0),this.ghostEl?.classList.toggle("pg-col-drag-ghost--scroll-right",n>0)}stopAutoScroll(){cancelAnimationFrame(this.autoScrollRAF),this.autoScrollRAF=0,this.autoScrollSpeed=0,this.isDragging&&!this.livePanelMoveInProgress&&this.dragStyleEl&&(this.draggingGridEl?.classList.add("pg-grid--col-autoscrolling"),this.refreshDragAfterScroll(),this.draggingGridEl?.classList.remove("pg-grid--col-autoscrolling")),this.ghostEl?.classList.remove("pg-col-drag-ghost--scroll-left","pg-col-drag-ghost--scroll-right")}refreshDragAfterScroll(){if(!this.isDragging||this.livePanelMoveInProgress)return;this.dragStyleEl&&(this.dragStyleEl.textContent=""),this.draggingGridEl?.querySelector(`.pg-th[data-col-id="${this.draggingColId}"]`)?.classList.add("pg-th--dragging"),this.panelDragData=this.capturePanelDragData(),this.dragStartScrollX=parseFloat(this.draggingGridEl?.style.getPropertyValue("--pg-scroll-x")??"0");let e=this.panelDragData.find(t=>t.panel==="center");this.centerPanelRect=e?.bounds??null,this.onDragMove(this.lastDragClientX)}rebuildGroupRowsForPanel(e,t){if(!this.displayGroupEngine?.hasGroups)return;let o=e==="left"?this.leftHeaderRowEl:e==="right"?this.rightHeaderRowEl:this.centerHeaderRowEl;if(!o)return;let r=o.parentElement;if(!r)return;let n=e==="left"?this.leftGroupRowEls:e==="right"?this.rightGroupRowEls:this.centerGroupRowEls;for(let c of n)c.remove();let i=this.displayGroupEngine,s=i.getDragHandler(),l={rowHeight:this.lastGroupRowHeight,onCollapseToggle:c=>this.onGroupToggleFn?.(c),onGroupResize:(c,p)=>this.onGroupResizeFn?.(c,p),onGroupHeaderMouseDown:s?(c,p,h)=>s.onHeaderMouseDown(c,p,h):void 0,didJustDragFn:s?()=>s.didJustDrag:void 0,onGroupContextMenu:(c,p,h)=>this.groupContextMenu?.show(p,h,c.clientX,c.clientY)},a=i.headerBuilder.buildGroupRows(i.buildTree(t),l);for(let c of a)r.insertBefore(c,o);e==="left"?this.leftGroupRowEls=a:e==="right"?this.rightGroupRowEls=a:this.centerGroupRowEls=a,r.style.setProperty("--pg-group-rows-count",String(a.length))}rebuildGroupRowsWithPreview(e,t,o){let r=[...o.colIds],[n]=r.splice(t,1);r.splice(e,0,n);let i=this.store.get("columns"),s=new Map(i.map(a=>[a.colId,a])),l=r.map(a=>s.get(a)).filter(a=>a!==void 0);this.rebuildGroupRowsForPanel(this.dragSourcePanel,l)}onDragMove(e){if(!this.isDragging||!this.draggingColId||!this.panelDragData.length||!this.dragStyleEl)return;if(this.livePanelMoveInProgress){this.dragStyleEl.textContent="";return}let t=this.panelDragData.find(b=>b.bounds?e>=b.bounds.left&&e<=b.bounds.right:!1);if(t||(t=this.panelDragData.find(b=>b.panel===this.dragSourcePanel)),!t)return;this.dragTargetPanel=t.panel;let o=t.panel!==this.dragSourcePanel,r=t.panel==="center"?parseFloat(this.draggingGridEl?.style.getPropertyValue("--pg-scroll-x")??"0")-this.dragStartScrollX:0,{rects:n,colIds:i}=t,s=this.panelDragData.find(b=>b.panel===this.dragSourcePanel),l=s.colIds.indexOf(this.draggingColId);if(o){let b=i.length;for(let v=0;v<n.length;v++)if(e<n[v].right+r){b=v;break}this.moveToPanelLive(t.panel,b),this.dragStyleEl.textContent="";return}let a=l;for(let b=0;b<n.length;b++){if(b===l)continue;let v=n[b].left+r,w=n[b].right+r;if(e>=v&&e<w){a=b;break}}let c=n.length>1&&l>=0&&l<n.length;if(c&&a===l&&e<n[0].left+r&&(a=l===0?1:0),c&&a===l&&e>=n[n.length-1].right+r){let b=n.length-1;a=l===b?b-1:b}let p=this.dragTargetLocalIdx;this.dragTargetLocalIdx=a,this.displayGroupEngine?.hasGroups&&a!==p&&this.rebuildGroupRowsWithPreview(a,l,s);let h=this.draggingGridEl?.getAttribute("data-photon-grid-id")??"",u=h?`[data-photon-grid-id="${h}"] `:"",g="";if(a===l){this.dragStyleEl.textContent="";return}let m=s.rects[l],f=n[a];if(!m||!f){this.dragStyleEl.textContent="";return}let C=a>l?f.right-m.right:f.left-m.left;g+=`${u}[data-col-id="${i[l]}"] { --pg-drag-x: ${C}px; z-index: 10; position: relative; transition: none; }
4296
+ `;for(let b=0;b<n.length;b++){if(b===l)continue;let v=0;a>l&&b>l&&b<=a?v=-this.draggedColWidth:a<l&&b>=a&&b<l&&(v=this.draggedColWidth),v!==0&&(g+=`${u}[data-col-id="${i[b]}"] { --pg-drag-x: ${v}px; }
4297
+ `)}this.dragStyleEl.textContent=g}onGlobalMouseMove(e){if(!this.isDragging||!this.draggingPanelRowEl)return;this.ghostEl&&(this.ghostEl.style.left=`${e.clientX+14}px`,this.ghostEl.style.top=`${e.clientY}px`);let t=this.draggingGridEl?.getBoundingClientRect();if(!!t&&(e.clientX<t.left||e.clientX>t.right||e.clientY<t.top||e.clientY>t.bottom)){this.dragIsHideMode=!0,this.stopAutoScroll(),this.ghostEl?.classList.add("pg-col-drag-ghost--hide"),this.ghostEl?.classList.remove("pg-col-drag-ghost--no-drop","pg-col-drag-ghost--scroll-left","pg-col-drag-ghost--scroll-right"),this.dragStyleEl&&(this.dragStyleEl.textContent="");return}this.dragIsHideMode=!1,this.ghostEl?.classList.remove("pg-col-drag-ghost--hide");let r=this.groupDropZone?.isOver(e.clientX,e.clientY)??!1;if(r&&!this.draggingIsGroupable){this.stopAutoScroll(),this.ghostEl?.classList.add("pg-col-drag-ghost--no-drop"),document.body.style.cursor="no-drop",this.dragStyleEl&&(this.dragStyleEl.textContent="");return}if(this.ghostEl?.classList.remove("pg-col-drag-ghost--no-drop"),document.body.style.cursor="grabbing",this.draggingIsGroupable&&this.groupDropZone&&(this.groupDropZone.highlight(r),this.isOverGroupZone=r,r)){this.stopAutoScroll(),this.dragStyleEl&&(this.dragStyleEl.textContent="");return}this.lastDragClientX=e.clientX,this.updateAutoScroll(e.clientX),this.onDragMove(e.clientX)}onGlobalMouseUp(e){if(!this.isDragging){this.cleanupDrag();return}let t=this.draggingColId;if(!t){this.cleanupDrag();return}let o=this.dragSourcePanel,r=this.dragTargetPanel,n=this.dragTargetLocalIdx,i=this.panelDragData.find(u=>u.panel===r),l=this.panelDragData.find(u=>u.panel===o)?.colIds.indexOf(t)??-1,a=this.dragIsHideMode,c=this.draggingIsGroupable&&this.isOverGroupZone,h=document.elementFromPoint(e.clientX,e.clientY)?.closest("[data-group-id]")?.getAttribute("data-group-id")??null;if(this.cleanupDrag(),a){this.columnModel.setColumnVisible(t,!1);return}if(c&&this.groupDropZone){this.groupDropZone.dropColumn(t);return}if(h&&this.groupModel&&this.groupDragHandler){let u=this.groupModel.getParent(t);if(u){if(h!==u.groupId){this.groupDragHandler.createLeafClone(t,h);return}return}}if(o===r){let u=this.columnModel.getVisibleColumns(),g=u.findIndex(C=>C.colId===t);if(g===-1)return;let m=n!==-1&&i?i.colIds[n]:null,f=m?u.findIndex(C=>C.colId===m):g;if(this.columnModel.moveColumn(g,f!==-1?f:g),this.groupModel&&this.groupDragHandler&&this.groupModel.getParent(t)){let b=this.store.get("columns").filter(w=>w.visible!==!1),v=b.findIndex(w=>w.colId===t);if(v!==-1&&this.isLeafOutsideGroup(t,v,b)){let w=b[v+1]?.colId??null;this.groupDragHandler.extractLeafToSoloGroup(t,w)}}}else{let u=r==="left"?"left":r==="right"?"right":null,g=i?i.colIds[n]??null:null;this.columnModel.moveAndPin(t,u,g),this.groupModel&&this.groupDragHandler&&this.groupModel.getParent(t)&&this.groupDragHandler.extractLeafToSoloGroup(t,g)}}cleanupDrag(){this.isDragging=!1,this.livePanelMoveInProgress=!1,this.draggingIsGroupable=!1,this.isOverGroupZone=!1,this.dragIsHideMode=!1,this.groupDropZone?.highlight(!1),this.draggingPanelRowEl?.querySelector(".pg-th--dragging")?.classList.remove("pg-th--dragging"),this.ghostEl?.remove(),this.ghostEl=null,this.dragStyleEl?.remove(),this.dragStyleEl=null,this.draggingGridEl?.classList.remove("pg-grid--col-dragging","pg-grid--col-autoscrolling"),this.draggingGridEl=null,this.draggedColWidth=0,this.panelDragData=[],this.dragStartScrollX=0,this.stopAutoScroll(),this.centerPanelRect=null,this.draggingColId=null,this.dragTargetLocalIdx=-1,this.draggingPanelRowEl=null,document.body.style.cursor="",document.body.style.userSelect="",document.removeEventListener("pointermove",this.boundMouseMove),document.removeEventListener("pointerup",this.boundMouseUp)}startResize(e,t,o){let r=e.clientX,n=this.colStyles.getWidth(t.colId),i=t.pinned==="right"?-1:1,s=t.minWidth??60;document.body.style.cursor="col-resize",document.body.style.userSelect="none",this._isResizingColumn=!0;let l=!1,a=p=>{if(!l){if(Math.abs(p.clientX-r)<=2)return;l=!0,o.classList.add("pg-th--resizing"),this.colStyles.freezeFlexWidths()}this.colStyles.setWidth(t.colId,Math.max(s,n+(p.clientX-r)*i)),this.onResizeCb?.()},c=p=>{if(this._isResizingColumn=!1,o.classList.remove("pg-th--resizing"),document.body.style.cursor="",document.body.style.userSelect="",document.removeEventListener("pointermove",a),document.removeEventListener("pointerup",c),!l)return;let h=Math.max(s,n+(p.clientX-r)*i);this.colStyles.setWidth(t.colId,h),this.columnModel.setColumnWidth(t.colId,h,!0)};document.addEventListener("pointermove",a),document.addEventListener("pointerup",c)}isLeafOutsideGroup(e,t,o){if(!this.groupModel)return!1;let r=this.groupModel.getParent(e);if(!r)return!1;let n=new Set(this.groupModel.getLeavesInGroup(r.groupId).map(l=>l.colId).filter(l=>l!==e)),i=o[t-1],s=o[t+1];return!(i&&n.has(i.colId))&&!(s&&n.has(s.colId))}getGridEl(){return(this.centerHeaderRowEl??this.leftHeaderRowEl??this.rightHeaderRowEl)?.closest(".pg-grid")??null}startHeaderRename(e){let o=this.getGridEl()?.querySelector(`.pg-th[data-col-id="${e}"]`),r=o?.querySelector(".pg-th__label"),n=this.columnModel.getColumn(e);if(!o||!r||!n)return;let i=document.createElement("input");i.className="pg-th__rename-input",i.type="text",i.value=n.header,i.setAttribute("aria-label","Rename column");let s=!1,l=()=>{if(s)return;s=!0;let c=i.value.trim();c&&c!==n.header?this.columnModel.setColumnHeader(e,c):i.replaceWith(r)},a=()=>{s||(s=!0,i.replaceWith(r))};i.addEventListener("keydown",c=>{c.stopPropagation(),c.key==="Enter"?(c.preventDefault(),l()):c.key==="Escape"&&(c.preventDefault(),a())}),i.addEventListener("blur",l),i.addEventListener("mousedown",c=>c.stopPropagation()),i.addEventListener("click",c=>c.stopPropagation()),r.replaceWith(i),i.focus(),i.select()}measureColumnContentWidth(e,t){let o=e.ownerDocument.createElement("span");o.style.cssText="position:absolute;top:-9999px;left:-9999px;visibility:hidden;white-space:nowrap;pointer-events:none;padding:0 12px;",e.appendChild(o),o.textContent=t.header??"";let r=o.offsetWidth+24,n=e.querySelectorAll(`.pg-cell[data-col-id="${t.colId}"]`);for(let l=0;l<n.length;l++){o.textContent=n[l].textContent??"";let a=o.offsetWidth+24;a>r&&(r=a)}o.remove();let i=t.minWidth??40,s=t.maxWidth??1/0;return Math.round(Math.min(s,Math.max(i,r)))}autoSizeColumns(e){let t=this.getGridEl();if(!t)return;let o=[];for(let r of e){let n=this.columnModel.getColumn(r);n&&o.push([r,this.measureColumnContentWidth(t,n)])}o.length!==0&&(this.colStyles.setWidths(o),this.columnModel.setColumnWidths(o))}fitColumnsToGrid(){let e=this.getGridEl();if(!e)return;let o=e.querySelector(".pg-panel--center .pg-panel__body")?.clientWidth??0;if(o<=0)return;let r=this.columnModel.getVisibleColumns().filter(a=>a.pinned!=="left"&&a.pinned!=="right");if(r.length===0)return;let n=r.reduce((a,c)=>a+this.colStyles.getWidth(c.colId),0)||1,i=[],s=0;for(let a of r){let c=a.minWidth??40,p=a.maxWidth??1/0,h=Math.min(p,Math.max(c,Math.round(this.colStyles.getWidth(a.colId)/n*o)));i.push([a.colId,h]),s+=h}let l=o-s;if(l!==0){let a=r[r.length-1],c=a.minWidth??40,p=a.maxWidth??1/0,h=i[i.length-1];i[i.length-1]=[h[0],Math.min(p,Math.max(c,h[1]+l))]}this.colStyles.setWidths(i),this.columnModel.setColumnWidths(i)}resetColumnWidth(e){this.colStyles.clearUserWidth(e),this.columnModel.resetColumnWidth(e)}onAction(e,t){this.eventBus.emit(x.COLUMNS_STATE_CHANGED,{action:e,colId:t,states:this.columnModel.getColumnStates()})}};var Je=class{constructor(e,t){this.columnModel=e;this.iconRenderer=t;this.overlayEl=null;this.dialogEl=null;this.treeEl=null;this.columns=[];this.expanded=new Set;this.searchTerm="";this.boundKeydown=o=>{o.key==="Escape"&&this.close()},this.boundOutsideDown=o=>{this.dialogEl&&!this.dialogEl.contains(o.target)&&this.close()}}open(e){this.columns=e,this.close(),this.expanded.clear(),this.collectGroupIds(e,this.expanded),this.build(),document.addEventListener("keydown",this.boundKeydown),setTimeout(()=>{this.overlayEl&&document.addEventListener("mousedown",this.boundOutsideDown,!0)},0)}close(){document.removeEventListener("keydown",this.boundKeydown),document.removeEventListener("mousedown",this.boundOutsideDown,!0),this.overlayEl?.remove(),this.overlayEl=null,this.dialogEl=null,this.treeEl=null}destroy(){this.close()}build(){let e=document,t=e.createElement("div");t.className="pg-col-chooser__overlay";let o=e.createElement("div");o.className="pg-col-chooser",o.setAttribute("role","dialog"),o.setAttribute("aria-modal","true"),o.setAttribute("aria-label","Choose columns");let r=e.createElement("div");r.className="pg-col-chooser__header";let n=e.createElement("span");n.className="pg-col-chooser__title",n.textContent="Choose Columns";let i=e.createElement("button");i.className="pg-col-chooser__close",i.type="button",i.setAttribute("aria-label","Close"),i.innerHTML=this.iconRenderer.renderToString("close",16),i.addEventListener("click",()=>this.close()),r.append(n,i);let s=e.createElement("div");s.className="pg-col-chooser__search";let l=e.createElement("span");l.className="pg-col-chooser__search-icon",l.innerHTML=this.iconRenderer.renderToString("search",14);let a=e.createElement("input");a.className="pg-col-chooser__search-input",a.type="text",a.placeholder="Search\u2026",a.setAttribute("aria-label","Search columns"),a.addEventListener("input",()=>{this.searchTerm=a.value.trim().toLowerCase(),this.renderTree()}),s.append(l,a);let c=e.createElement("div");c.className="pg-col-chooser__body";let p=e.createElement("div");p.className="pg-col-chooser__tree",p.setAttribute("role","tree"),c.appendChild(p),this.treeEl=p,o.append(r,s,c),t.appendChild(o),e.body.appendChild(t),this.overlayEl=t,this.dialogEl=o,this.renderTree(),a.focus()}renderTree(){if(!this.treeEl)return;this.treeEl.textContent="";let e=document.createDocumentFragment();for(let t of this.columns){let o=this.buildNode(t);o&&e.appendChild(o)}if(!e.childNodes.length){let t=document.createElement("div");t.className="pg-col-chooser__empty",t.textContent="No columns match your search.",e.appendChild(t)}this.treeEl.appendChild(e)}buildNode(e){return Array.isArray(e.children)&&e.children.length>0?this.buildGroupNode(e):this.buildLeafNode(e)}buildGroupNode(e){if(this.searchTerm&&!this.groupMatches(e))return null;let t=this.groupId(e),o=this.searchTerm?!0:this.expanded.has(t),r=document.createElement("div");r.className="pg-col-chooser__group";let n=this.makeRow();n.classList.add("pg-col-chooser__row--group");let i=document.createElement("button");i.type="button",i.className="pg-col-chooser__toggle",i.setAttribute("aria-label",o?"Collapse group":"Expand group"),i.innerHTML=this.iconRenderer.renderToString(o?"chevronDown":"chevronRight",14),i.addEventListener("click",c=>{c.stopPropagation(),this.expanded.has(t)?this.expanded.delete(t):this.expanded.add(t),this.renderTree()});let{checkbox:s,state:l}=this.makeGroupCheckbox(e),a=this.makeLabel(e.header??t);if(n.append(i,s,a),a.addEventListener("click",()=>this.setGroupVisible(e,l!=="all")),r.appendChild(n),o){let c=document.createElement("div");c.className="pg-col-chooser__children",c.setAttribute("role","group");for(let p of e.children){let h=this.buildNode(p);h&&c.appendChild(h)}r.appendChild(c)}return r}buildLeafNode(e){let t=this.resolveLeaf(e);if(!t||this.searchTerm&&!(t.header??"").toLowerCase().includes(this.searchTerm))return null;let o=this.makeRow();o.classList.add("pg-col-chooser__row--leaf");let r=document.createElement("span");r.className="pg-col-chooser__toggle pg-col-chooser__toggle--spacer";let n=t.visible!==!1,i=this.makeCheckbox(n,!1,!!t.alwaysVisible),s=this.makeLabel(t.header??t.colId),l=()=>{t.alwaysVisible||(this.columnModel.setColumnVisible(t.colId,t.visible===!1),this.renderTree())};return i.addEventListener("click",l),s.addEventListener("click",l),o.append(r,i,s),o}makeRow(){let e=document.createElement("div");return e.className="pg-col-chooser__row",e.setAttribute("role","treeitem"),e}makeLabel(e){let t=document.createElement("span");return t.className="pg-col-chooser__label",t.textContent=e,t.title=e,t}makeCheckbox(e,t,o){let r=document.createElement("span");return r.className="pg-col-chooser__checkbox",r.setAttribute("role","checkbox"),r.tabIndex=o?-1:0,r.setAttribute("aria-checked",t?"mixed":String(e)),e&&r.classList.add("pg-col-chooser__checkbox--checked"),t&&r.classList.add("pg-col-chooser__checkbox--indeterminate"),o&&r.classList.add("pg-col-chooser__checkbox--disabled"),r.innerHTML=this.iconRenderer.renderToString("check",12),r}makeGroupCheckbox(e){let t=this.groupLeaves(e),o=t.filter(i=>i.visible!==!1).length,r=o===0?"none":o===t.length?"all":"some",n=this.makeCheckbox(r==="all",r==="some",!1);return n.addEventListener("click",i=>{i.stopPropagation(),this.setGroupVisible(e,r!=="all")}),{checkbox:n,state:r}}setGroupVisible(e,t){for(let o of this.groupLeaves(e))o.alwaysVisible||this.columnModel.setColumnVisible(o.colId,t);this.renderTree()}groupLeaves(e){let t=[],o=r=>{if(Array.isArray(r.children)&&r.children.length>0)r.children.forEach(o);else{let n=this.resolveLeaf(r);n&&t.push(n)}};return e.children?.forEach(o),t}resolveLeaf(e){if(e.colId){let t=this.columnModel.getColumn(e.colId);if(t)return t}if(e.field)return this.columnModel.getAllColumns().find(t=>t.field===e.field)}groupMatches(e){return!this.searchTerm||(e.header??"").toLowerCase().includes(this.searchTerm)?!0:this.groupLeaves(e).some(t=>(t.header??"").toLowerCase().includes(this.searchTerm))}groupId(e){return e.colId??e.header??""}collectGroupIds(e,t){for(let o of e)Array.isArray(o.children)&&o.children.length>0&&(t.add(this.groupId(o)),this.collectGroupIds(o.children,t))}};var Y={_el:null,get(){if(!Y._el){let d=document.createElement("div");d.className="pg-sparkline-tooltip",d.setAttribute("role","tooltip"),d.setAttribute("aria-live","polite"),document.body.appendChild(d),Y._el=d}return Y._el},show(d,e,t,o,r){let n=Y.get();if(n.innerHTML="",r&&t!==void 0){let s=document.createElement("div");s.className="pg-sparkline-tooltip__label",s.textContent=t,n.appendChild(s)}let i=document.createElement("div");i.className="pg-sparkline-tooltip__value",i.textContent=vn(o),n.appendChild(i),Y._position(n,d,e)},showOHLC(d,e,t,o){let r=Y.get();if(r.innerHTML="",o&&t.label!==void 0){let i=document.createElement("div");i.className="pg-sparkline-tooltip__label",i.textContent=t.label,r.appendChild(i)}let n=[["O",t.open],["H",t.high],["L",t.low],["C",t.close]];for(let[i,s]of n){let l=document.createElement("div");l.className="pg-sparkline-tooltip__ohlc-row";let a=document.createElement("span");a.className="pg-sparkline-tooltip__ohlc-key",a.textContent=i;let c=document.createElement("span");c.className="pg-sparkline-tooltip__value",c.textContent=vn(s),l.appendChild(a),l.appendChild(c),r.appendChild(l)}Y._position(r,d,e)},hide(){Y._el&&(Y._el.className="pg-sparkline-tooltip pg-sparkline-tooltip--hidden")},_position(d,e,t){d.className="pg-sparkline-tooltip";let o=d.offsetWidth||80,r=d.offsetHeight||40,n=window.innerWidth,i=window.innerHeight,s=e+14;s+o>n-8&&(s=e-o-14);let l=t-Math.round(r/2);l<4&&(l=4),l+r>i-4&&(l=i-r-4),d.style.left=`${s}px`,d.style.top=`${l}px`}};function vn(d){if(!isFinite(d))return"\u2014";let e=Math.abs(d);return e>=1e6?(d/1e6).toFixed(1)+"M":e>=1e3?(d/1e3).toFixed(1)+"K":d!==Math.floor(d)?d.toFixed(2):String(d)}function qt(d,e,t){return getComputedStyle(d).getPropertyValue(e).trim()||t}function Xi(d,e){let t=d.replace("#","");if(t.length!==6)return d;let o=parseInt(t.slice(0,2),16),r=parseInt(t.slice(2,4),16),n=parseInt(t.slice(4,6),16);return`rgba(${o},${r},${n},${e})`}var Qe=class{constructor(e,t,o){let r=e.getContext("2d");if(!r)throw new Error("[PhotonGrid] SparklineRenderer: failed to get 2D context");this.canvas=e,this.ctx=r,this.cfg=this._resolveConfig(o),this.rawData=t,this.isOHLC=this.cfg.type==="candlestick"||this.cfg.type==="ohlc",this.hasLabels=this._rawHasLabels(t,this.cfg),this.isOHLC?(this.ohlcPoints=this._parseOHLC(t),this.points=[]):(this.points=this._parsePoints(t),this.ohlcPoints=[]),this._syncSize(),this._onMouseMove=this._handleMouseMove.bind(this),this._onMouseLeave=this._handleMouseLeave.bind(this),this.cfg.showTooltip&&(this.canvas.addEventListener("mousemove",this._onMouseMove),this.canvas.addEventListener("mouseleave",this._onMouseLeave)),this._draw()}redraw(){this.isOHLC?this.ohlcPoints=this._parseOHLC(this.rawData):this.points=this._parsePoints(this.rawData),this._syncSize(),this._draw()}destroy(){this.canvas.removeEventListener("mousemove",this._onMouseMove),this.canvas.removeEventListener("mouseleave",this._onMouseLeave),Y.hide()}_syncSize(){let e=window.devicePixelRatio||1,t=this.canvas.clientWidth,o=this.canvas.clientHeight;this.canvas.width=Math.round(t*e),this.canvas.height=Math.round(o*e),this.ctx.setTransform(e,0,0,e,0,0)}_resolveConfig(e){let t=this.canvas,o=qt(t,"--pg-primary","#2563eb"),r=qt(t,"--pg-colors-error","#ef4444"),n=qt(t,"--pg-colors-success","#22c55e"),i=e.stroke??o,s=e.positiveColor??i,l=e.fill??"";return l||(i.startsWith("#")&&i.length===7?l=Xi(i,.18):l=i),{type:e.type??"line",stroke:i,fill:l,lineWidth:e.lineWidth??1.5,showMarkers:e.showMarkers??!1,markerSize:e.markerSize??2.5,markerFill:e.markerFill??i,padding:e.padding??3,barSpacing:e.barSpacing??.15,positiveColor:s,negativeColor:e.negativeColor??r,bullColor:e.bullColor??n,bearColor:e.bearColor??r,showTooltip:e.showTooltip??!0,xKey:e.xKey??"",yKey:e.yKey??"value",openKey:e.openKey??"open",highKey:e.highKey??"high",lowKey:e.lowKey??"low",closeKey:e.closeKey??"close"}}_rawHasLabels(e,t){return!Array.isArray(e)||e.length===0?!1:typeof e[0]=="object"&&e[0]!==null&&!!t.xKey}_parsePoints(e){return!Array.isArray(e)||e.length===0?[]:e.map((t,o)=>{if(typeof t=="number")return{index:o,value:t};if(typeof t=="object"&&t!==null){let r=t,n=Number(r[this.cfg.yKey]??0),i=this.cfg.xKey?String(r[this.cfg.xKey]??o):void 0;return{index:o,value:isFinite(n)?n:0,label:i}}return{index:o,value:Number(t)||0}})}_parseOHLC(e){return!Array.isArray(e)||e.length===0?[]:e.map((t,o)=>{let r=typeof t=="object"&&t!==null?t:{},n=s=>{let l=Number(r[s]??0);return isFinite(l)?l:0},i=this.cfg.xKey?String(r[this.cfg.xKey]??o):void 0;return{index:o,open:n(this.cfg.openKey),high:n(this.cfg.highKey),low:n(this.cfg.lowKey),close:n(this.cfg.closeKey),label:i}})}_draw(){let{ctx:e}=this,t=this.canvas.clientWidth,o=this.canvas.clientHeight;switch(e.clearRect(0,0,t,o),this.cfg.type){case"line":this._drawLine(t,o);break;case"area":this._drawArea(t,o);break;case"column":this._drawColumn(t,o);break;case"bar":this._drawBar(t,o);break;case"win-loss":this._drawWinLoss(t,o);break;case"candlestick":this._drawCandlestick(t,o);break;case"ohlc":this._drawOHLC(t,o);break}}_drawLine(e,t){let o=this.points;if(o.length<2)return;let{ctx:r,cfg:n}=this,{pad:i,plotW:s,plotH:l,plotLeft:a,plotTop:c,minV:p,range:h}=this._plotMetrics(e,t,o);r.beginPath(),r.strokeStyle=n.stroke,r.lineWidth=n.lineWidth,r.lineJoin="round",r.lineCap="round";for(let u=0;u<o.length;u++){let g=this._xPos(u,o.length,a,s),m=this._yPos(o[u].value,p,h,c,l);u===0?r.moveTo(g,m):r.lineTo(g,m)}r.stroke(),n.showMarkers&&this._drawMarkers(o,a,c,s,l,p,h)}_drawArea(e,t){let o=this.points;if(o.length<2)return;let{ctx:r,cfg:n}=this,{plotW:i,plotH:s,plotLeft:l,plotTop:a,plotBottom:c,minV:p,range:h}=this._plotMetrics(e,t,o);r.beginPath();for(let m=0;m<o.length;m++){let f=this._xPos(m,o.length,l,i),C=this._yPos(o[m].value,p,h,a,s);m===0?r.moveTo(f,C):r.lineTo(f,C)}let u=this._xPos(o.length-1,o.length,l,i),g=this._xPos(0,o.length,l,i);r.lineTo(u,c),r.lineTo(g,c),r.closePath(),r.fillStyle=n.fill,r.fill(),r.beginPath(),r.strokeStyle=n.stroke,r.lineWidth=n.lineWidth,r.lineJoin="round",r.lineCap="round";for(let m=0;m<o.length;m++){let f=this._xPos(m,o.length,l,i),C=this._yPos(o[m].value,p,h,a,s);m===0?r.moveTo(f,C):r.lineTo(f,C)}r.stroke(),n.showMarkers&&this._drawMarkers(o,l,a,i,s,p,h)}_drawColumn(e,t){let o=this.points;if(o.length===0)return;let{ctx:r,cfg:n}=this,{plotW:i,plotH:s,plotLeft:l,plotTop:a,minV:c,range:p}=this._plotMetrics(e,t,o),h=o.length,u=i/h,g=u*n.barSpacing,m=Math.max(1,u-g),f=this._yPos(0,c,p,a,s);for(let C of o){let b=l+C.index*u+g/2,v=this._yPos(C.value,c,p,a,s),w=Math.min(v,f),E=Math.max(1,Math.abs(v-f));r.fillStyle=C.value>=0?n.positiveColor:n.negativeColor,r.fillRect(b,w,m,E)}}_drawBar(e,t){let o=this.points;if(o.length===0)return;let{ctx:r,cfg:n}=this,i=n.padding,s=t-i*2,l=e-i*2,a=i,c=i,p=Math.min(...o.map(v=>v.value),0),u=Math.max(...o.map(v=>v.value),0)-p||1,g=o.length,m=s/g,f=m*n.barSpacing,C=Math.max(1,m-f),b=c+(0-p)/u*l;for(let v of o){let w=a+v.index*m+f/2,E=c+(v.value-p)/u*l,R=Math.min(E,b),S=Math.max(1,Math.abs(E-b));r.fillStyle=v.value>=0?n.positiveColor:n.negativeColor,r.fillRect(R,w,S,C)}}_drawWinLoss(e,t){let o=this.points;if(o.length===0)return;let{ctx:r,cfg:n}=this,i=n.padding,s=i,l=t-i*2,a=i,c=e-i*2,p=o.length,h=c/p,u=h*n.barSpacing,g=Math.max(1,h-u),m=s+l/2,f=Math.max(1,l/2-1);for(let C of o){let b=a+C.index*h+u/2;C.value>0?(r.fillStyle=n.positiveColor,r.fillRect(b,m-f,g,f)):C.value<0?(r.fillStyle=n.negativeColor,r.fillRect(b,m,g,f)):(r.fillStyle=qt(this.canvas,"--pg-colors-border","#e2e8f0"),r.fillRect(b,m-1,g,2))}}_drawCandlestick(e,t){let o=this.ohlcPoints;if(o.length===0)return;let{ctx:r,cfg:n}=this,i=this._ohlcMetrics(e,t,o),{plotLeft:s,plotTop:l,plotW:a,plotH:c,minV:p,range:h,bandW:u,gap:g}=i;for(let m of o){let C=m.close>=m.open?n.bullColor:n.bearColor,b=s+m.index*u+u/2,v=this._yPos(m.high,p,h,l,c),w=this._yPos(m.low,p,h,l,c),E=this._yPos(m.open,p,h,l,c),R=this._yPos(m.close,p,h,l,c),S=Math.min(E,R),I=Math.max(1,Math.abs(R-E)),T=Math.max(2,u-g);r.strokeStyle=C,r.lineWidth=1,r.beginPath(),r.moveTo(b,v),r.lineTo(b,w),r.stroke(),r.fillStyle=C,r.fillRect(b-T/2,S,T,I)}}_drawOHLC(e,t){let o=this.ohlcPoints;if(o.length===0)return;let{ctx:r,cfg:n}=this,i=this._ohlcMetrics(e,t,o),{plotLeft:s,plotTop:l,plotW:a,plotH:c,minV:p,range:h,bandW:u}=i,g=Math.max(2,Math.min(4,u*.35));for(let m of o){let C=m.close>=m.open?n.bullColor:n.bearColor,b=s+m.index*u+u/2,v=this._yPos(m.high,p,h,l,c),w=this._yPos(m.low,p,h,l,c),E=this._yPos(m.open,p,h,l,c),R=this._yPos(m.close,p,h,l,c);r.strokeStyle=C,r.lineWidth=Math.max(1,u*.15),r.lineCap="square",r.beginPath(),r.moveTo(b,v),r.lineTo(b,w),r.stroke(),r.beginPath(),r.moveTo(b-g,E),r.lineTo(b,E),r.stroke(),r.beginPath(),r.moveTo(b,R),r.lineTo(b+g,R),r.stroke()}}_drawMarkers(e,t,o,r,n,i,s){let{ctx:l,cfg:a}=this;l.fillStyle=a.markerFill;for(let c=0;c<e.length;c++){let p=this._xPos(c,e.length,t,r),h=this._yPos(e[c].value,i,s,o,n);l.beginPath(),l.arc(p,h,a.markerSize,0,Math.PI*2),l.fill()}}_plotMetrics(e,t,o){let r=this.cfg.padding,n=r,i=r,s=e-r,l=t-r,a=s-n,c=l-i,p=o.map(m=>m.value),h=Math.min(...p,0),u=Math.max(...p,0),g=u-h||1;return{pad:r,plotLeft:n,plotTop:i,plotRight:s,plotBottom:l,plotW:a,plotH:c,minV:h,maxV:u,range:g}}_ohlcMetrics(e,t,o){let r=this.cfg.padding,n=r,i=r,s=e-r,l=t-r,a=s-n,c=l-i,p=o.map(v=>v.high),h=o.map(v=>v.low),u=Math.min(...h),g=Math.max(...p),m=g-u||1,f=o.length,C=a/Math.max(f,1),b=C*this.cfg.barSpacing;return{plotLeft:n,plotTop:i,plotRight:s,plotBottom:l,plotW:a,plotH:c,minV:u,maxV:g,range:m,bandW:C,gap:b}}_xPos(e,t,o,r){return t===1?o+r/2:o+e/(t-1)*r}_yPos(e,t,o,r,n){return r+(1-(e-t)/o)*n}_handleMouseMove(e){let t=this.canvas.getBoundingClientRect(),o=window.devicePixelRatio||1,r=e.clientX-t.left,n=this.canvas.clientWidth,i=this.canvas.clientHeight;this.isOHLC?this._showOHLCTooltip(r,n,i,e.clientX,e.clientY):this._showPointTooltip(r,n,i,e.clientX,e.clientY)}_showPointTooltip(e,t,o,r,n){let i=this.points;if(i.length===0)return;let s=this.cfg.padding,l=s,a=t-s*2,c;if(i.length===1)c=0;else{let h=a/(i.length-1),u=Math.round((e-l)/h);c=Math.max(0,Math.min(i.length-1,u))}let p=i[c];p&&Y.show(r,n,p.label,p.value,this.hasLabels)}_showOHLCTooltip(e,t,o,r,n){let i=this.ohlcPoints;if(i.length===0)return;let s=this.cfg.padding,l=s,c=(t-s*2)/i.length,p=Math.floor((e-l)/c),h=Math.max(0,Math.min(i.length-1,p)),u=i[h];u&&Y.showOHLC(r,n,u,this.hasLabels)}_handleMouseLeave(){Y.hide()}};var et=class{renderCell(e){let{row:t,colDef:o,rowIndex:r,colIndex:n,api:i}=e,s=this.resolveValue(t.data,o.field),l=y("pg-cell");l.setAttribute("data-row-index",String(r)),l.setAttribute("data-col-index",String(n)),l.setAttribute("data-col-id",o.colId),l.setAttribute("data-field",o.field),l.setAttribute("role","gridcell"),l.setAttribute("tabindex","-1"),j(l,"pg-cell--selected",t.selected);let a=o.textAlign??(o.type==="number"||o.type==="currency"?"right":"left");if(a!=="left"&&l.classList.add(`pg-cell--align-${a}`),o.cellCssClass)if(typeof o.cellCssClass=="string")l.classList.add(o.cellCssClass);else{let h=o.cellCssClass({value:s,rawValue:s,row:t.data,colDef:o,rowIndex:r,colIndex:n,api:i});h&&l.classList.add(h)}let c=y("pg-cell__inner"),p=$(o,"display");if(p){let h={value:s,rawValue:s,row:t.data,colDef:o,rowIndex:r,colIndex:n,api:i},u=p(h);typeof u=="string"?c.innerHTML=u:c.appendChild(u)}else o.renderHtml?c.innerHTML=String(s??""):c.appendChild(this.renderDefaultCell(s,o,e));return l.appendChild(c),l}renderCheckboxCell(e,t){let o=y("pg-cell pg-cell--checkbox");o.setAttribute("data-row-index",String(t)),o.setAttribute("role","gridcell");let r=document.createElement("input");return r.type="checkbox",r.className="pg-checkbox",r.checked=e.selected,r.setAttribute("aria-label","Select row"),r.setAttribute("data-node-id",e.nodeId),o.appendChild(r),o}renderSerialNumberCell(e,t){let o=y("pg-cell pg-cell--serial");o.setAttribute("data-row-index",String(e)),o.setAttribute("role","gridcell");let r=document.createElement("span");return r.className="pg-cell__serial",r.textContent=String(t),o.appendChild(r),o}updateCellSelection(e,t){j(e,"pg-cell--range-selected",t)}updateCellActive(e,t){j(e,"pg-cell--active",t)}renderDefaultCell(e,t,o){let r=document.createElement("span");switch(r.className="pg-cell__value",t.type){case"boolean":{let n=!!e;r.innerHTML=n?o.iconRenderer.renderToString("check",14):"",r.classList.add(n?"pg-cell--bool-true":"pg-cell--bool-false");break}case"image":{if(e){let n=document.createElement("img");n.src=String(e),n.className="pg-cell__image",n.style.cssText="width:32px;height:32px;object-fit:cover;border-radius:4px;",n.alt="",r.appendChild(n)}break}case"dropdown":case"object":{let n=t.type==="object"?this.resolveObjectKey(e,t):e,i=t.dropdownOptions?.find(s=>String(s.value)===String(n??""));if(i?.color){let s=y("pg-badge");s.style.backgroundColor=i.color+"20",s.style.color=i.color,s.textContent=i.label,r.appendChild(s)}else r.textContent=i?.label??String(n??"");break}case"array":{let n=Array.isArray(e)?e.map(String):[];r.className="pg-cell__value pg-cell__value--tags";let i=n.slice(0,3);for(let s of i){let l=t.dropdownOptions?.find(c=>String(c.value)===s),a=y("pg-badge");a.textContent=l?.label??s,l?.color&&(a.style.backgroundColor=l.color+"20",a.style.color=l.color),r.appendChild(a)}if(n.length>i.length){let s=y("pg-badge pg-badge--overflow");s.textContent=`+${n.length-i.length}`,r.appendChild(s)}break}case"sparkline":{r.className="pg-cell__value pg-cell__value--sparkline";let n=y("pg-sparkline-wrapper"),i=document.createElement("canvas");i.className="pg-sparkline",i.setAttribute("aria-hidden","true"),n.appendChild(i),r.appendChild(n);let s=t.sparkline??{};requestAnimationFrame(()=>{if(!i.isConnected)return;let l=i.clientWidth,a=i.clientHeight;l>0&&a>0&&(i._pgSparkline=new Qe(i,e,s))});break}default:{let n=Q(e,t,{locale:o.locale,dateFormat:o.dateFormat,timeZone:o.timeZone,currencySymbol:o.currencySymbol});r.textContent=n??"",r.title=n??"";break}}return r}resolveValue(e,t){let o=t.split("."),r=e;for(let n of o){if(r==null)return;r=r[n]}return r}resolveObjectKey(e,t){if(typeof e=="object"&&e!==null){let o=t.objectValueKey??"value";return e[o]}return e}};function bn(d,e,t,o,r,n){if(!o||e.type!=="data"||t.colId!==o.toggleColumnId)return;d.classList.add("pg-cell--tree-toggle-col");let i=d.querySelector(".pg-cell__inner");if(!e.hasChildren){let a=y("pg-tree-toggle-spacer");i?d.insertBefore(a,i):d.insertBefore(a,d.firstChild);return}let s=o.isExpandedFn(e.nodeId),l=y("pg-tree-toggle");l.setAttribute("role","button"),l.setAttribute("data-tree-toggle",""),l.setAttribute("aria-label",s?"Collapse":"Expand"),l.appendChild(r.render(s?"chevronDown":"chevronRight",{size:16})),i?d.insertBefore(l,i):d.insertBefore(l,d.firstChild),l.addEventListener("click",a=>{a.stopPropagation(),n.emit(x.TREE_NODE_TOGGLE_CLICKED,{row:e,colDef:t})})}function yn(d,e,t,o){if(!t||e.type!=="data")return;let r=d.querySelector(".pg-tree-toggle");if(!r)return;let n=t.isExpandedFn(e.nodeId),i=r.querySelector(".pg-icon");i&&o.updateIcon(i,n?"chevronDown":"chevronRight"),r.setAttribute("aria-label",n?"Collapse":"Expand")}var Cn={colId:"__group__",field:"__group__",header:"Group",type:"string",editable:!1},tt=class{constructor(e,t,o,r){this.store=e;this.eventBus=t;this.iconRenderer=o;this.rowSelectionEngine=r;this.cellRenderer=new et;this.renderedRowMap=new Map;this.leftContent=null;this.centerContent=null;this.rightContent=null;this.lastCenterStart=-1;this.lastCenterEnd=-1;this.leftSticky=null;this.centerSticky=null;this.rightSticky=null;this.stuckNodeIds=new Set;this.hoverPanels=[];this.hoveredNodeId=null;this.pointerX=0;this.pointerY=0;this.pointerInside=!1}setPanels(e,t,o){this.leftContent=e,this.centerContent=t,this.rightContent=o;let r=[e,t,o].filter(i=>i!==null);this.hoverPanels=r;let n=i=>i instanceof HTMLElement?i.closest("[data-node-id]")?.getAttribute("data-node-id")??null:null;for(let i of r)i.addEventListener("mousemove",s=>{this.pointerX=s.clientX,this.pointerY=s.clientY,this.pointerInside=!0,this.setHoveredRow(n(s.target))}),i.addEventListener("mouseleave",s=>{let l=s.relatedTarget;l instanceof Node&&r.some(a=>a.contains(l))||(this.pointerInside=!1,this.setHoveredRow(null))})}setHoveredRow(e){if(e!==this.hoveredNodeId){if(this.hoveredNodeId)for(let t of this.hoverPanels)t.querySelectorAll(`[data-node-id="${this.hoveredNodeId}"]`).forEach(o=>o.classList.remove("pg-row--hover"));if(this.hoveredNodeId=e,e)for(let t of this.hoverPanels)t.querySelectorAll(`[data-node-id="${e}"]`).forEach(o=>o.classList.add("pg-row--hover"))}}refreshHoverAtPointer(){if(!this.pointerInside)return;let e=document.elementFromPoint(this.pointerX,this.pointerY),t=e instanceof HTMLElement?e.closest("[data-node-id]")?.getAttribute("data-node-id")??null:null;this.setHoveredRow(t)}setStickyContainers(e,t,o){this.leftSticky=e,this.centerSticky=t,this.rightSticky=o}setStickyRows(e){let t=new Set(e.map(r=>r.nodeId));for(let r of this.stuckNodeIds){if(t.has(r))continue;let n=this.renderedRowMap.get(r);if(n){n.left&&(n.left.style.top="",n.left.style.zIndex="",this.leftContent?.appendChild(n.left)),n.center&&(n.center.style.top="",n.center.style.zIndex="",this.centerContent?.appendChild(n.center)),n.right&&(n.right.style.top="",n.right.style.zIndex="",this.rightContent?.appendChild(n.right));for(let i of[n.left,n.center,n.right])i?.classList.remove("pg-row--sticky")}}this.stuckNodeIds=t;let o=e.length;e.forEach(({nodeId:r,top:n},i)=>{let s=this.renderedRowMap.get(r);if(!s)return;let l=String(o-i);s.left&&this.leftSticky&&(s.left.style.top=`${n}px`,s.left.style.zIndex=l,this.leftSticky.appendChild(s.left)),s.center&&this.centerSticky&&(s.center.style.top=`${n}px`,s.center.style.zIndex=l,this.centerSticky.appendChild(s.center)),s.right&&this.rightSticky&&(s.right.style.top=`${n}px`,s.right.style.zIndex=l,this.rightSticky.appendChild(s.right));for(let a of[s.left,s.center,s.right])a?.classList.add("pg-row--sticky")})}renderRows(e,t,o,r,n={}){let i=n.centerColStart??0,s=i+o.length;if(i!==this.lastCenterStart||s!==this.lastCenterEnd){this.lastCenterStart=i,this.lastCenterEnd=s,this.centerContent&&(this.centerContent.innerHTML="");for(let m of this.renderedRowMap.values())m.center=null}let l=new Set(e.map(m=>m.nodeId));for(let[m,f]of this.renderedRowMap)l.has(m)||(f.left?.remove(),f.center?.remove(),f.right?.remove(),this.renderedRowMap.delete(m));let a=document.createDocumentFragment(),c=document.createDocumentFragment(),p=document.createDocumentFragment(),h=n.totalCenterCols??o.length,u=t.length+i,g=t.length+h;for(let m=0;m<e.length;m++){let f=e[m],C=f.rowIndex,b=this.renderedRowMap.get(f.nodeId);if(b&&(f.type==="group"||f.type==="group-footer")&&f.aggregatedValues&&(b.left?.remove(),b.center?.remove(),b.right?.remove(),this.renderedRowMap.delete(f.nodeId),b=void 0),!(b&&f.type==="detail"))if(b&&b.center!==null)this.updatePanelRow(b,f,C,n);else if(b){this.updatePanelRow(b,f,C,n);let v=this.buildSingleRow(f,C,"center",o,u,n);b.center=v,c.appendChild(v)}else{let v=this.buildPanelRow(f,C,t,o,r,u,g,n);this.renderedRowMap.set(f.nodeId,v),v.left&&a.appendChild(v.left),v.center&&c.appendChild(v.center),v.right&&p.appendChild(v.right)}}this.leftContent&&this.leftContent.appendChild(a),this.centerContent?.appendChild(c),this.rightContent&&this.rightContent.appendChild(p),this.refreshHoverAtPointer()}updateRowSelection(e,t){let o=this.renderedRowMap.get(e);if(!o)return;let r=[o.left,o.center,o.right].filter(n=>n!==null);for(let n of r){j(n,"pg-row--selected",t);let i=n.querySelector(".pg-checkbox");i&&(i.checked=t)}}syncCenterRange(e,t){this.lastCenterStart=e,this.lastCenterEnd=t}clear(){for(let e of this.renderedRowMap.values())e.left?.remove(),e.center?.remove(),e.right?.remove();this.renderedRowMap.clear(),this.lastCenterStart=-1,this.lastCenterEnd=-1}invalidateRowsByNodeId(e){for(let t of e){let o=this.renderedRowMap.get(t);o&&(o.left?.remove(),o.center?.remove(),o.right?.remove(),this.renderedRowMap.delete(t))}}destroy(){this.clear()}buildPanelRow(e,t,o,r,n,i,s,l){if(e.type==="detail")return{left:null,center:null,right:null};let a=!!(this.leftContent&&(l.showCheckboxes||l.showSerialNumber||o.length>0)),c=!!(this.rightContent&&n.length>0),p=a?this.buildSingleRow(e,t,"left",o,0,l):null,h=this.buildSingleRow(e,t,"center",r,i,l),u=c?this.buildSingleRow(e,t,"right",n,s,l):null;return{left:p,center:h,right:u}}buildSingleRow(e,t,o,r,n,i){let s=y(this.getRowClass(e,t,i));if(s.setAttribute("role","row"),s.setAttribute("data-node-id",e.nodeId),s.setAttribute("data-row-index",String(e.rowIndex)),s.setAttribute("data-panel",o),e.type==="group"||e.type==="group-footer"){if(s.setAttribute("data-level",String(e.level)),o==="center"){let l=i.centerLeftSpacerW??0;if(l>0){let a=y("pg-cell--h-spacer");a.style.cssText=`width:${l}px;min-width:${l}px;flex-shrink:0;`,s.appendChild(a)}e.type==="group"?this.buildGroupRowContent(s,e,i):this.buildGroupFooterContent(s,e,i)}if(this.buildGroupAggregateCells(s,e,r,n,i),o==="center"){let l=i.centerRightSpacerW??0;if(l>0){let a=y("pg-cell--h-spacer");a.style.cssText=`width:${l}px;min-width:${l}px;flex-shrink:0;`,s.appendChild(a)}}return this.attachRowListeners(s,e,r,n,i),s}if(i.treeData&&e.type==="data"&&s.setAttribute("data-level",String(e.level)),o==="left"&&(i.showSerialNumber&&s.appendChild(this.cellRenderer.renderSerialNumberCell(e.rowIndex,t+1)),i.showCheckboxes&&s.appendChild(this.cellRenderer.renderCheckboxCell(e,e.rowIndex))),o==="center"){let l=i.centerLeftSpacerW??0;if(l>0){let a=y("pg-cell--h-spacer");a.style.cssText=`width:${l}px;min-width:${l}px;flex-shrink:0;`,s.appendChild(a)}i.showGroupsColumn&&this.buildLeafGroupCell(s,e,i)}for(let l=0;l<r.length;l++){let a=this.cellRenderer.renderCell({row:e,colDef:r[l],rowIndex:e.rowIndex,colIndex:n+l,iconRenderer:this.iconRenderer,dateFormat:i.dateFormat,timeZone:i.timeZone,currencySymbol:i.currencySymbol,locale:i.locale,api:i.api??null});if(i.showVerticalBorders&&a.classList.add("pg-cell--v-border"),r[l].rowDrag&&e.type!=="summary"){let c=y("pg-row-drag-handle");c.setAttribute("data-row-drag",""),c.setAttribute("data-drag-label",String(e.data[r[l].field]??"")),c.innerHTML=this.iconRenderer.renderToString("drag",14);let p=a.querySelector(".pg-cell__inner");p?p.insertBefore(c,p.firstChild):a.insertBefore(c,a.firstChild)}this.applyMasterDetailToggle(a,e,r[l],i),bn(a,e,r[l],i.treeData,this.iconRenderer,this.eventBus),s.appendChild(a)}if(o==="center"){let l=i.centerRightSpacerW??0;if(l>0){let a=y("pg-cell--h-spacer");a.style.cssText=`width:${l}px;min-width:${l}px;flex-shrink:0;`,s.appendChild(a)}}return this.attachRowListeners(s,e,r,n,i),s}buildLeafGroupCell(e,t,o){let r=o.autoGroupColWidth??200,n=o.leafGroupColDef;if(!n){let s=y("pg-cell pg-cell--auto-group-spacer");s.style.width=`${r}px`,s.style.minWidth=`${r}px`,e.appendChild(s);return}let i=this.cellRenderer.renderCell({row:t,colDef:n,rowIndex:t.rowIndex,colIndex:-1,iconRenderer:this.iconRenderer,dateFormat:o.dateFormat,timeZone:o.timeZone,currencySymbol:o.currencySymbol,locale:o.locale,api:o.api??null});i.setAttribute("data-col-index","-1"),i.setAttribute("data-col-id","__group__"),i.style.width=`${r}px`,i.style.minWidth=`${r}px`,i.style.flex="none",e.appendChild(i)}buildGroupRowContent(e,t,o){let r=y("pg-cell pg-row-group__cell");r.setAttribute("data-row-index",String(t.rowIndex)),r.setAttribute("data-col-index","-1"),r.setAttribute("data-col-id","__group__"),r.setAttribute("role","gridcell");let n=o.autoGroupColWidth??200;r.style.width=`${n}px`,r.style.minWidth=`${n}px`,r.style.flex="none";let i=y("pg-row-group__toggle");i.setAttribute("role","button"),i.setAttribute("aria-label",t.expanded?"Collapse group":"Expand group");let s=this.iconRenderer.render(t.expanded?"chevronDown":"chevronRight",{size:16});i.appendChild(s);let l=y("pg-row-group__label"),a=o.allLeafColumns?.find(p=>p.field===t.groupField),c=a?$(a,"group"):void 0;if(a&&c){let p=c({row:t,colDef:a,groupValue:t.groupValue,childCount:t.childCount??0,collapsed:!t.expanded,api:null});typeof p=="string"?l.innerHTML=p:l.appendChild(p)}else l.textContent=t.groupValue+" ("+t.childCount+")";r.appendChild(i),r.appendChild(l),e.appendChild(r),i.addEventListener("click",p=>{p.stopPropagation(),this.eventBus.emit(x.ROW_GROUP_OPENED,{groupKey:t.groupKey})})}buildGroupFooterContent(e,t,o){let r=y("pg-cell pg-row-group__cell");r.setAttribute("data-row-index",String(t.rowIndex)),r.setAttribute("data-col-index","-1"),r.setAttribute("data-col-id","__group__"),r.setAttribute("role","gridcell");let n=o.autoGroupColWidth??200;r.style.width=`${n}px`,r.style.minWidth=`${n}px`,r.style.flex="none";let i=y("pg-row-group__label");i.textContent=`\u03A3 ${String(t.groupValue??"")}`,r.appendChild(i),e.appendChild(r)}buildGroupAggregateCells(e,t,o,r,n){let i=t.aggregatedValues;for(let s=0;s<o.length;s++){let l=o[s],c=(l.type==="currency"||l.type==="number")&&l.aggFunc!=null&&i?i[l.field]:void 0,p=c!=null,h=y(p?"pg-cell pg-cell--agg":"pg-cell");if(h.setAttribute("data-row-index",String(t.rowIndex)),h.setAttribute("data-col-index",String(r+s)),h.setAttribute("data-col-id",l.colId),h.setAttribute("role","gridcell"),p){let u=l.textAlign??"right";u!=="left"&&h.classList.add(`pg-cell--align-${u}`),n.showVerticalBorders&&h.classList.add("pg-cell--v-border");let g=y("pg-cell__inner"),m=$(l,"summary");if(m){let f=m({colDef:l,value:c,aggregation:l.aggFunc,label:l.summaryLabel,api:null});typeof f=="string"?g.innerHTML=f:g.appendChild(f)}else{let f=document.createElement("span");f.className="pg-cell__value",f.textContent=this.formatAggValue(c,l,n),g.appendChild(f)}h.appendChild(g)}e.appendChild(h)}}formatAggValue(e,t,o){if(t.aggFunc==="count")return String(typeof e=="number"?Math.round(e):e??"");let r=typeof e=="number"?e:parseFloat(String(e??""));return isFinite(r)&&Q(r,t,{locale:o.locale,currencySymbol:o.currencySymbol,dateFormat:o.dateFormat,timeZone:o.timeZone})||"\u2014"}updatePanelRow(e,t,o,r){let n=this.getRowClass(t,o,r),i=[e.left,e.center,e.right].filter(l=>l!==null),s=String(t.rowIndex);for(let l of i){l.className=n,l.setAttribute("data-row-index",s),t.type==="group"&&l.setAttribute("data-level",String(t.level)),r.treeData&&t.type==="data"&&l.setAttribute("data-level",String(t.level));let a=l.querySelectorAll(".pg-cell[data-row-index]");for(let c of a)c.setAttribute("data-row-index",s)}if(r.showSerialNumber&&e.left){let l=e.left.querySelector(".pg-cell__serial");l&&(l.textContent=String(o+1))}if((t.type==="group"||t.type==="group-footer")&&e.center){let l=e.center.querySelector(".pg-row-group__toggle");if(l){let a=l.querySelector(".pg-icon");a&&this.iconRenderer.updateIcon(a,t.expanded?"chevronDown":"chevronRight"),l.setAttribute("aria-label",t.expanded?"Collapse group":"Expand group")}}if(t.type==="data"&&r.masterDetail){let l=r.masterDetail.isExpandedFn(t.nodeId);for(let a of i){let c=a.querySelector(".pg-detail-toggle");if(!c)continue;let p=c.querySelector(".pg-icon");p&&this.iconRenderer.updateIcon(p,l?"chevronDown":"chevronRight"),c.setAttribute("aria-label",l?"Collapse detail":"Expand detail")}}if(t.type==="data"&&r.treeData)for(let l of i)yn(l,t,r.treeData,this.iconRenderer)}applyMasterDetailToggle(e,t,o,r){let n=r.masterDetail;if(!n||t.type!=="data"||o.colId!==n.toggleColumnId||!n.hasDetailFn(t.data))return;let i=n.isExpandedFn(t.nodeId),s=y("pg-detail-toggle");s.setAttribute("role","button"),s.setAttribute("data-detail-toggle",""),s.setAttribute("aria-label",i?"Collapse detail":"Expand detail"),s.appendChild(this.iconRenderer.render(i?"chevronDown":"chevronRight",{size:16}));let l=e.querySelector(".pg-cell__inner");l?e.insertBefore(s,l):e.insertBefore(s,e.firstChild),s.addEventListener("click",a=>{a.stopPropagation(),this.eventBus.emit(x.ROW_DETAIL_TOGGLE_CLICKED,{row:t,colDef:o})})}attachRowListeners(e,t,o,r,n){e.addEventListener("click",i=>{if(i.target.closest(".pg-checkbox")){i.stopPropagation(),this.rowSelectionEngine.toggleRowSelection(t.nodeId,this.store.get("allRows"));return}this.eventBus.emit(x.ROW_CLICKED,{row:t,event:i,rowIndex:t.rowIndex})}),e.addEventListener("dblclick",i=>{this.eventBus.emit(x.ROW_DOUBLE_CLICKED,{row:t,event:i,rowIndex:t.rowIndex})}),e.addEventListener("pointerdown",i=>{if(i.button!==0||i.target.closest("[data-detail-toggle]"))return;let s=i.target.closest("[data-col-index][data-col-id]");if(!s)return;let l=Number(s.getAttribute("data-col-index")),a=s.getAttribute("data-col-id")??"",c=o.find(h=>h.colId===a)??(a==="__group__"?t.type==="data"?n.leafGroupColDef??null:Cn:null);if(!c)return;let p=h=>{this.eventBus.emit(x.CELL_CLICKED,{row:t,colDef:c,value:null,rowIndex:t.rowIndex,colIndex:l,event:h})};if(J(i)){let h=i.clientX,u=i.clientY,g=()=>{document.removeEventListener("pointerup",m),document.removeEventListener("pointercancel",g)},m=f=>{g(),Math.abs(f.clientX-h)<=q&&Math.abs(f.clientY-u)<=q&&p(f)};document.addEventListener("pointerup",m),document.addEventListener("pointercancel",g);return}p(i)}),e.addEventListener("contextmenu",i=>{let s=i.target.closest("[data-col-index][data-col-id]");if(!s)return;i.preventDefault();let l=Number(s.getAttribute("data-col-index"));this.eventBus.emit(x.CELL_CONTEXT_MENU,{row:t,rowIndex:t.rowIndex,colIndex:l,x:i.clientX,y:i.clientY,event:i})}),e.addEventListener("dblclick",i=>{let s=i.target.closest("[data-col-index][data-col-id]");if(!s)return;let l=Number(s.getAttribute("data-col-index")),a=s.getAttribute("data-col-id")??"",c=o.find(p=>p.colId===a)??(a==="__group__"?t.type==="data"?n.leafGroupColDef??null:Cn:null);c&&this.eventBus.emit(x.CELL_DOUBLE_CLICKED,{row:t,colDef:c,value:null,rowIndex:t.rowIndex,colIndex:l,event:i})})}getRowClass(e,t,o){let r=["pg-row"];return e.selected&&r.push("pg-row--selected"),e.type==="group"&&r.push("pg-row--group"),e.type==="group-footer"&&r.push("pg-row--group-footer"),e.type==="detail"&&r.push("pg-row--detail"),o.treeData&&e.type==="data"&&r.push("pg-row--tree"),e.isTreeFiller&&r.push("pg-row--tree-filler"),o.rowShading&&t%2===1&&r.push("pg-row--alt"),e.cssClass&&r.push(e.cssClass),r.join(" ")}};var jt=64,xn=24,Xt=class{constructor(e,t,o){this.store=e;this.eventBus=t;this.iconRenderer=o;this.ghostEl=null;this.draggingNodeId=null;this.dragLabel="";this.isDragging=!1;this.gridEl=null;this.bodyWrapEl=null;this.targetNodeId=null;this.targetPosition="before";this.treeModeActive=!1;this.treeReparentHandler=null;this.scrollFn=null;this.autoScrollRAF=null;this.cursorX=0;this.cursorY=0;this.boundMouseDown=this.onMouseDown.bind(this),this.boundMouseMove=this.onMouseMove.bind(this),this.boundMouseUp=this.onMouseUp.bind(this)}mount(e,t,o){this.gridEl=e,this.bodyWrapEl=t,this.scrollFn=o,t.addEventListener("pointerdown",this.boundMouseDown,!0)}setTreeMode(e,t){this.treeModeActive=e,this.treeReparentHandler=t}destroy(){this.bodyWrapEl?.removeEventListener("pointerdown",this.boundMouseDown,!0),this.cleanup(),this.gridEl=null,this.bodyWrapEl=null,this.scrollFn=null}onMouseDown(e){if(e.button!==0)return;let t=e.target.closest("[data-row-drag]");if(!t)return;e.preventDefault(),e.stopPropagation();let r=t.closest("[data-node-id]")?.getAttribute("data-node-id");if(!r)return;let i=this.store.get("visibleRows").find(s=>s.nodeId===r);!i||i.type==="group"||i.type==="summary"||(this.dragLabel=t.getAttribute("data-drag-label")??"",this.startDrag(r,e))}startDrag(e,t){this.draggingNodeId=e,this.isDragging=!0,this.cursorX=t.clientX,this.cursorY=t.clientY,this.bodyWrapEl?.querySelectorAll(".pg-row--hover").forEach(s=>s.classList.remove("pg-row--hover"));let o=y("pg-row-drag-ghost"),r=document.createElement("span");r.className="pg-row-drag-ghost__icon pg-row-drag-ghost__icon--drag",r.innerHTML=this.iconRenderer.renderToString("drag",14);let n=document.createElement("span");n.className="pg-row-drag-ghost__icon pg-row-drag-ghost__icon--block",n.innerHTML=this.iconRenderer.renderToString("ban",14);let i=document.createElement("span");i.className="pg-row-drag-ghost__label",i.textContent=this.dragLabel||"Row",o.appendChild(r),o.appendChild(n),o.appendChild(i),o.style.left=`${t.clientX}px`,o.style.top=`${t.clientY}px`,document.body.appendChild(o),this.ghostEl=o,this.setDraggingClass(e,!0),this.gridEl?.classList.add("pg-grid--row-dragging"),document.addEventListener("pointermove",this.boundMouseMove),document.addEventListener("pointerup",this.boundMouseUp),document.body.style.userSelect="none",document.body.style.cursor="grabbing",this.startAutoScrollLoop()}onMouseMove(e){this.isDragging&&(this.cursorX=e.clientX,this.cursorY=e.clientY,this.ghostEl&&(this.ghostEl.style.left=`${e.clientX}px`,this.ghostEl.style.top=`${e.clientY}px`),this.updateDropTarget())}updateDropTarget(){if(!this.bodyWrapEl||!this.draggingNodeId)return;let e=this.bodyWrapEl.getBoundingClientRect();if(this.cursorX<e.left||this.cursorX>e.right||this.cursorY<e.top||this.cursorY>e.bottom){this.ghostEl?.classList.add("pg-row-drag-ghost--outside"),this.targetNodeId!==null&&(this.targetNodeId=null,this.clearDragTops());return}this.ghostEl?.classList.remove("pg-row-drag-ghost--outside");let o=this.getScrollTop(),r=this.cursorY-e.top+o,i=this.store.get("visibleRows").filter(p=>p.type!=="group"&&p.type!=="summary"&&p.nodeId!==this.draggingNodeId),s=null,l="before";for(let p of i)if(r>=p.top&&r<p.top+p.height){s=p,l=this.classifyDropPosition(r-p.top,p.height);break}if(!s&&i.length>0){let p=i[0],h=i[i.length-1];r<p.top?(s=p,l="before"):r>=h.top+h.height&&(s=h,l="after")}let a=s?.nodeId??null,c=l;(a!==this.targetNodeId||c!==this.targetPosition)&&(this.targetNodeId=a,this.targetPosition=c,this.targetNodeId?this.treeModeActive?this.updateTreeDropHighlight():this.updateRowTops():this.clearDragTops())}updateTreeDropHighlight(){if(this.bodyWrapEl?.querySelectorAll(".pg-row--drop-target").forEach(t=>t.classList.remove("pg-row--drop-target","pg-row--drop-inside","pg-row--drop-before","pg-row--drop-after")),!this.targetNodeId)return;this.bodyWrapEl?.querySelectorAll(`[data-node-id="${this.targetNodeId}"]`)?.forEach(t=>{t.classList.add("pg-row--drop-target",`pg-row--drop-${this.targetPosition}`)})}classifyDropPosition(e,t){if(!this.treeModeActive)return e<t/2?"before":"after";let o=t/3;return e<o?"before":e>t-o?"after":"inside"}onMouseUp(e){if(!this.isDragging){this.cleanup();return}let t=this.draggingNodeId,o=this.targetNodeId,r=this.targetPosition;this.cleanupInteraction(),t&&o&&t!==o&&this.treeModeActive&&this.treeReparentHandler?(this.treeReparentHandler(t,o,r),this.cleanupVisuals()):t&&o&&t!==o?(this.reorderRows(t,o,r==="inside"?"after":r),requestAnimationFrame(()=>requestAnimationFrame(()=>this.cleanupVisuals()))):this.cleanupVisuals()}startAutoScrollLoop(){this.autoScrollRAF===null&&(this.autoScrollRAF=requestAnimationFrame(()=>this.autoScrollTick()))}autoScrollTick(){if(this.autoScrollRAF=null,!this.isDragging||!this.bodyWrapEl||!this.scrollFn)return;let e=this.bodyWrapEl.getBoundingClientRect(),t=this.cursorY-e.top,o=e.bottom-this.cursorY,r=0;t>=0&&t<jt?r=-xn*Math.pow(1-t/jt,2):o>=0&&o<jt&&(r=xn*Math.pow(1-o/jt,2)),r!==0&&(this.scrollFn(r),this.updateDropTarget()),this.isDragging&&(this.autoScrollRAF=requestAnimationFrame(()=>this.autoScrollTick()))}updateRowTops(){if(!this.draggingNodeId||!this.targetNodeId){this.clearDragTops();return}let t=[...this.store.get("visibleRows")],o=t.findIndex(l=>l.nodeId===this.draggingNodeId);if(o===-1){this.clearDragTops();return}let[r]=t.splice(o,1),n=t.findIndex(l=>l.nodeId===this.targetNodeId);if(n===-1){this.clearDragTops();return}this.targetPosition==="after"&&n++,t.splice(Math.max(0,n),0,r);let i="",s=0;for(let l of t)Math.abs(s-l.top)>.5&&(i+=`.pg-grid--row-dragging .pg-row[data-node-id="${l.nodeId}"]{top:${s}px;}
4298
+ `),s+=l.height;this.getOrCreateTopStyle().textContent=i,this.renumberSerialCells(t)}clearDragTops(){let e=document.querySelector("style[data-pg-row-drag-tops]");e&&(e.textContent=""),this.bodyWrapEl?.querySelectorAll(".pg-row--drop-target").forEach(t=>t.classList.remove("pg-row--drop-target","pg-row--drop-inside","pg-row--drop-before","pg-row--drop-after")),this.renumberSerialCells(this.store.get("visibleRows"))}renumberSerialCells(e){if(!this.bodyWrapEl)return;let t=new Map,o=[];if(this.bodyWrapEl.querySelectorAll(".pg-cell--serial").forEach(n=>{let i=n.closest("[data-node-id]")?.getAttribute("data-node-id"),s=n.querySelector(".pg-cell__serial");if(!i||!s||t.has(i))return;let l=parseInt(s.textContent??"",10);Number.isNaN(l)||(t.set(i,s),o.push(l))}),t.size===0)return;o.sort((n,i)=>n-i);let r=0;for(let n of e){let i=t.get(n.nodeId);i&&(i.textContent=String(o[r++]))}}getOrCreateTopStyle(){let e=document.querySelector("style[data-pg-row-drag-tops]");return e||(e=document.createElement("style"),e.setAttribute("data-pg-row-drag-tops",""),document.head.appendChild(e)),e}reorderRows(e,t,o){let r=[...this.store.get("allRows")],n=[...this.store.get("visibleRows")],i=h=>{let u=h.findIndex(f=>f.nodeId===e);if(u===-1)return h;let[g]=h.splice(u,1),m=h.findIndex(f=>f.nodeId===t);return m===-1?(h.splice(u,0,g),h):(o==="after"&&m++,h.splice(Math.max(0,m),0,g),h)},s=i(n),l=i(r),a=0;for(let h=0;h<s.length;h++)s[h]={...s[h],rowIndex:h,top:a},a+=s[h].height;let c=s.find(h=>h.nodeId===e),p=s.find(h=>h.nodeId===t);c&&p&&this.eventBus.emit(x.ROW_DROP,{draggedRows:[c],targetRow:p,position:o}),this.store.set("allRows",l),this.store.set("visibleRows",s)}getScrollTop(){let e=this.gridEl?.style.getPropertyValue("--pg-scroll-y")??"0px";return-parseFloat(e)||0}setDraggingClass(e,t){this.bodyWrapEl?.querySelectorAll(`[data-node-id="${e}"]`).forEach(o=>o.classList.toggle("pg-row--row-dragging",t))}cleanupInteraction(){this.autoScrollRAF!==null&&(cancelAnimationFrame(this.autoScrollRAF),this.autoScrollRAF=null),this.draggingNodeId&&this.setDraggingClass(this.draggingNodeId,!1),this.ghostEl?.remove(),this.ghostEl=null,this.draggingNodeId=null,this.targetNodeId=null,this.isDragging=!1,document.body.style.userSelect="",document.body.style.cursor="",document.removeEventListener("pointermove",this.boundMouseMove),document.removeEventListener("pointerup",this.boundMouseUp)}cleanupVisuals(){this.gridEl?.classList.remove("pg-grid--row-dragging"),this.clearDragTops()}cleanup(){this.cleanupInteraction(),this.cleanupVisuals()}};var ot=class{constructor(e,t,o){this.eventBus=e;this.iconRenderer=t;this.paginationEngine=o;this.footerEl=null;this.pageInfoEl=null;this.pageInputEl=null}render(e,t={}){this.footerEl=y("pg-footer");let o=t.footerHeight??44;if(this.footerEl.style.height=`${o}px`,t.showPagination&&this.footerEl.appendChild(this.buildPaginationControls()),t.showRowCount){let r=y("pg-footer__row-count");this.pageInfoEl=r,this.footerEl.appendChild(r)}return this.updatePaginationState(),e.appendChild(this.footerEl),this.footerEl}updatePaginationState(){if(!this.footerEl)return;let e=this.getConfig(),t=this.paginationEngine.getTotalPages(),{start:o,end:r}=this.paginationEngine.getPageRange(),n=this.footerEl.querySelector(".pg-pagination__info");n&&(n.textContent=`${o}\u2013${r} of ${e.totalRows??0}`),this.pageInputEl&&(this.pageInputEl.value=String(e.page),this.pageInputEl.max=String(t));let i=this.footerEl.querySelector('[data-action="first"]'),s=this.footerEl.querySelector('[data-action="prev"]'),l=this.footerEl.querySelector('[data-action="next"]'),a=this.footerEl.querySelector('[data-action="last"]'),c=this.paginationEngine.isFirstPage(),p=this.paginationEngine.isLastPage();i&&(i.disabled=c),s&&(s.disabled=c),l&&(l.disabled=p),a&&(a.disabled=p)}destroy(){this.footerEl?.remove(),this.footerEl=null,this.pageInfoEl=null,this.pageInputEl=null}buildPaginationControls(){let e=y("pg-pagination"),t=this.buildNavButton("first","pageFirst","First page"),o=this.buildNavButton("prev","pagePrev","Previous page"),r=y("pg-pagination__info");r.textContent="\u2014";let n=document.createElement("input");n.type="number",n.min="1",n.className="pg-pagination__page-input",n.setAttribute("aria-label","Page number"),this.pageInputEl=n,n.addEventListener("change",()=>{let a=parseInt(n.value,10);isNaN(a)||(this.paginationEngine.goToPage(a),this.updatePaginationState(),this.eventBus.emit(x.PAGE_CHANGED,{page:a,pageSize:this.getConfig().pageSize,totalRows:this.getConfig().totalRows??0,totalPages:this.paginationEngine.getTotalPages()}))});let i=this.buildNavButton("next","pageNext","Next page"),s=this.buildNavButton("last","pageLast","Last page"),l=this.buildPageSizeSelect();return e.appendChild(l),e.appendChild(t),e.appendChild(o),e.appendChild(r),e.appendChild(n),e.appendChild(i),e.appendChild(s),e}buildNavButton(e,t,o){let r=document.createElement("button");return r.className=`pg-pagination__btn pg-pagination__btn--${e}`,r.setAttribute("data-action",e),r.setAttribute("aria-label",o),r.setAttribute("type","button"),r.appendChild(this.iconRenderer.render(t,{size:16})),r.addEventListener("click",()=>{switch(e){case"first":this.paginationEngine.goToFirstPage();break;case"prev":this.paginationEngine.goToPreviousPage();break;case"next":this.paginationEngine.goToNextPage();break;case"last":this.paginationEngine.goToLastPage();break}this.updatePaginationState();let n=this.getConfig();this.eventBus.emit(x.PAGE_CHANGED,{page:n.page,pageSize:n.pageSize,totalRows:n.totalRows??0,totalPages:this.paginationEngine.getTotalPages()})}),r}buildPageSizeSelect(){let e=y("pg-pagination__size"),t=document.createElement("span");t.textContent="Rows per page:",t.className="pg-pagination__size-label";let o=document.createElement("select");o.className="pg-pagination__size-select";let r=this.getConfig();for(let n of r.pageSizeOptions){let i=document.createElement("option");i.value=String(n),i.textContent=String(n),i.selected=n===r.pageSize,o.appendChild(i)}return o.addEventListener("change",()=>{let n=parseInt(o.value,10);this.paginationEngine.setPageSize(n),this.updatePaginationState()}),e.appendChild(t),e.appendChild(o),e}getConfig(){return{enabled:!0,page:this.paginationEngine.getCurrentPage(),pageSize:this.paginationEngine.getPageSize(),pageSizeOptions:[10,25,50,100,1e3,1e4,1e5],serverSide:!1,totalRows:this.paginationEngine.getTotalRows()}}};var rt=class{constructor(e){this.iconRenderer=e;this.loadingEl=null;this.noRowsEl=null;this.containerEl=null}mount(e){this.containerEl=e}showLoading(e="Loading\u2026"){if(this.hideNoRows(),this.loadingEl)return;let t=y("pg-overlay pg-overlay--loading");t.setAttribute("role","status"),t.setAttribute("aria-live","polite");let o=this.iconRenderer.render("loading",{size:32,spin:!0,className:"pg-overlay__spinner"});this.iconRenderer.injectSpinKeyframes();let r=y("pg-overlay__text");r.textContent=e,t.appendChild(o),t.appendChild(r),this.loadingEl=t,this.containerEl?.appendChild(t)}hideLoading(){this.loadingEl?.remove(),this.loadingEl=null}showNoRows(e,t="No rows to show"){if(this.hideLoading(),this.noRowsEl)return;let o=y("pg-overlay pg-overlay--no-rows");if(o.setAttribute("role","status"),e)o.innerHTML=e;else{let r=this.iconRenderer.render("info",{size:32,className:"pg-overlay__icon"}),n=y("pg-overlay__text");n.textContent=t,o.appendChild(r),o.appendChild(n)}this.noRowsEl=o,this.containerEl?.appendChild(o)}hideNoRows(){this.noRowsEl?.remove(),this.noRowsEl=null}hideAll(){this.hideLoading(),this.hideNoRows()}destroy(){this.hideAll(),this.containerEl=null}};var Yt=class{constructor(){this.styleEl=null;this.widths=new Map;this.flexCols=new Map;this.userResizedWidths=new Map;this.scopePrefix=""}mount(){this.styleEl||(this.styleEl=document.createElement("style"),this.styleEl.setAttribute("data-pg-col-widths",""),document.head.appendChild(this.styleEl))}setScopeId(e){this.scopePrefix=e?`[data-photon-grid-id="${e}"] `:"",this.flush()}initFromColumns(e){let t=this.widths;this.widths=new Map,this.flexCols.clear();for(let o of e)if(this.userResizedWidths.has(o.colId))this.widths.set(o.colId,this.userResizedWidths.get(o.colId));else if(o.flex!=null){let r=o.minWidth??80;this.flexCols.set(o.colId,{flex:o.flex,minWidth:r});let n=t.get(o.colId);this.widths.set(o.colId,n!=null?Math.max(r,n):r)}else this.widths.set(o.colId,o.width??o.minWidth??150);this.flush()}resolveFlex(e,t){if(t<=0)return;let o=e.filter(s=>this.flexCols.has(s));if(o.length===0)return;let r=e.filter(s=>!this.flexCols.has(s)).reduce((s,l)=>s+(this.widths.get(l)??150),0),n=Math.max(0,t-r),i=o.reduce((s,l)=>s+(this.flexCols.get(l)?.flex??1),0);for(let s of o){let l=this.flexCols.get(s),a=Math.max(l.minWidth,Math.floor(l.flex/i*n));this.widths.set(s,a)}this.flush()}hasFlex(e){return e.some(t=>this.flexCols.has(t))}setWidth(e,t){this.userResizedWidths.set(e,t),this.flexCols.delete(e),this.widths.set(e,t),this.flush()}setWidths(e){if(e.length!==0){for(let[t,o]of e)this.userResizedWidths.set(t,o),this.flexCols.delete(t),this.widths.set(t,o);this.flush()}}clearUserWidth(e){this.userResizedWidths.delete(e)}freezeFlexWidths(){if(this.flexCols.size!==0){for(let[e,t]of this.flexCols){let o=this.widths.get(e)??t.minWidth;this.userResizedWidths.set(e,o)}this.flexCols.clear(),this.flush()}}getWidth(e){return this.widths.get(e)??150}getTotalWidth(e){return e.reduce((t,o)=>t+(this.widths.get(o)??150),0)}flush(){if(!this.styleEl)return;let e=[];for(let[t,o]of this.widths)e.push(`${this.scopePrefix}[data-col-id="${t}"] { width: ${o}px; min-width: ${o}px; max-width: ${o}px; flex-shrink: 0; }`);this.styleEl.textContent=e.join(`
4299
+ `)}destroy(){this.styleEl?.remove(),this.styleEl=null,this.widths.clear(),this.flexCols.clear(),this.userResizedWidths.clear()}};var Kt=class{constructor(){this.styleEl=null}mount(){this.styleEl=document.createElement("style"),this.styleEl.setAttribute("data-pg-row-positions",""),document.head.appendChild(this.styleEl)}update(e,t=!1){if(!this.styleEl)return;let o=[];for(let r of e)t?o.push(`.pg-row[data-node-id="${r.nodeId}"]{top:${r.top}px;min-height:${r.height}px;}`):o.push(`.pg-row[data-node-id="${r.nodeId}"]{top:${r.top}px;height:${r.height}px;}`);this.styleEl.textContent=o.join("")}destroy(){this.styleEl?.remove(),this.styleEl=null}};var Zt=class{constructor(){this.scrollTop=0;this.scrollLeft=0;this.totalHeight=0;this.totalCenterWidth=0;this.viewportHeight=0;this.centerViewportWidth=0;this.gridEl=null;this.sbVNativeEl=null;this.sbVSpacerEl=null;this.sbHNativeEl=null;this.sbHSpacerEl=null;this.sbHRowEl=null;this.panPointerId=null;this.panStartX=0;this.panStartY=0;this.panLastX=0;this.panLastY=0;this.panLastT=0;this.panScrollStartLeft=0;this.panScrollStartTop=0;this.panMoved=!1;this.panCaptureEl=null;this.velX=0;this.velY=0;this.momentumRAF=null;this.gestureGuard=null;this.abortCtrl=null;this.resizeObs=null;this.scrollYCb=null;this.scrollXCb=null;this.reserveVerticalGutter=!1;this.onVNativeScroll=()=>{let e=this.sbVNativeEl.scrollTop;Math.abs(e-this.scrollTop)<.5||(this.scrollTop=e,this.syncCSSVars(),this.scrollYCb?.(e))};this.onHNativeScroll=()=>{let e=this.sbHNativeEl.scrollLeft;Math.abs(e-this.scrollLeft)<.5||(this.scrollLeft=e,this.syncCSSVars(),this.scrollXCb?.())};this.onWheel=e=>{if(e.ctrlKey||e.target?.closest(".pg-ai-panel"))return;let t=e.deltaX,o=e.deltaY;e.deltaMode===1?(t*=32,o*=32):e.deltaMode===2&&(t*=this.centerViewportWidth,o*=this.viewportHeight);let r=e.shiftKey||Math.abs(t)>Math.abs(o),n=r&&e.deltaX!==0?t:o;(r?n>0?this.canScrollRight():n<0&&this.canScrollLeft():n>0?this.canScrollDown():n<0&&this.canScrollUp())&&(e.preventDefault(),e.stopPropagation(),r?this.scrollToX(this.scrollLeft+n):this.scrollToY(this.scrollTop+n))};this.onPanPointerDown=e=>{if(J(e)&&this.panPointerId===null&&!this.gestureGuard?.()&&!e.target?.closest(gn)){this.stopMomentum(),e.stopPropagation(),this.panPointerId=e.pointerId,this.panStartX=this.panLastX=e.clientX,this.panStartY=this.panLastY=e.clientY,this.panLastT=e.timeStamp,this.panScrollStartLeft=this.scrollLeft,this.panScrollStartTop=this.scrollTop,this.panMoved=!1,this.velX=0,this.velY=0,this.panCaptureEl=e.currentTarget;try{this.panCaptureEl.setPointerCapture(e.pointerId)}catch{}}};this.onPanPointerMove=e=>{if(e.pointerId!==this.panPointerId)return;if(this.gestureGuard?.()){this.releasePan(e.pointerId);return}let t=e.clientX-this.panStartX,o=e.clientY-this.panStartY;if(!this.panMoved){if(Math.abs(t)<q&&Math.abs(o)<q)return;this.panMoved=!0}this.scrollToX(this.panScrollStartLeft-t),this.scrollToY(this.panScrollStartTop-o);let r=e.timeStamp-this.panLastT;r>0&&(this.velX=(this.panLastX-e.clientX)/r,this.velY=(this.panLastY-e.clientY)/r),this.panLastX=e.clientX,this.panLastY=e.clientY,this.panLastT=e.timeStamp,e.preventDefault()};this.onPanPointerUp=e=>{if(e.pointerId!==this.panPointerId)return;let t=this.panMoved;this.releasePan(e.pointerId),t&&(this.suppressNextClick(),this.startMomentum())}}onScrollY(e){this.scrollYCb=e}onScrollX(e){this.scrollXCb=e}setReserveVerticalGutter(e){this.reserveVerticalGutter=e}setGestureGuard(e){this.gestureGuard=e}mount(e,t,o,r,n,i,s,l){this.gridEl=e,this.sbVNativeEl=r,this.sbVSpacerEl=n,this.sbHNativeEl=i,this.sbHSpacerEl=s,this.sbHRowEl=l??i;let a=new AbortController;this.abortCtrl=a;let c=a.signal;t.addEventListener("wheel",this.onWheel,{passive:!1,signal:c});let p=e.querySelector(".pg-grid__header");p?.addEventListener("wheel",this.onWheel,{passive:!1,signal:c});for(let h of[t,p])h&&(h.addEventListener("pointerdown",this.onPanPointerDown,{signal:c}),h.addEventListener("pointermove",this.onPanPointerMove,{passive:!1,signal:c}),h.addEventListener("pointerup",this.onPanPointerUp,{signal:c}),h.addEventListener("pointercancel",this.onPanPointerUp,{signal:c}));r.addEventListener("scroll",this.onVNativeScroll,{signal:c}),i.addEventListener("scroll",this.onHNativeScroll,{signal:c}),this.resizeObs=new ResizeObserver(()=>{this.viewportHeight=t.clientHeight,this.centerViewportWidth=o.clientWidth,this.clampScroll(),this.syncCSSVars(),this.syncScrollbars(),this.scrollXCb?.()}),this.resizeObs.observe(t),this.resizeObs.observe(o),this.viewportHeight=t.clientHeight,this.centerViewportWidth=o.clientWidth}updateSizes(e,t){this.totalHeight=e,this.totalCenterWidth=t,this.sbVSpacerEl&&(this.sbVSpacerEl.style.height=`${e}px`),this.sbHSpacerEl&&(this.sbHSpacerEl.style.width=`${t}px`),this.clampScroll(),this.syncCSSVars(),this.syncScrollbars()}getScrollTop(){return this.scrollTop}getScrollLeft(){return this.scrollLeft}getViewportHeight(){return this.viewportHeight}getCenterViewportWidth(){return this.centerViewportWidth}canScrollLeft(){return this.scrollLeft>0}canScrollRight(){return this.scrollLeft<Math.max(0,this.totalCenterWidth-this.centerViewportWidth)}canScrollUp(){return this.scrollTop>0}canScrollDown(){return this.scrollTop<Math.max(0,this.totalHeight-this.viewportHeight)}scrollToY(e){let t=Math.max(0,this.totalHeight-this.viewportHeight),o=Math.max(0,Math.min(e,t));o!==this.scrollTop&&(this.scrollTop=o,this.syncCSSVars(),this.syncScrollbars(),this.sbVNativeEl&&(this.sbVNativeEl.scrollTop=o),this.scrollYCb?.(this.scrollTop))}scrollToX(e){let t=Math.max(0,this.totalCenterWidth-this.centerViewportWidth),o=Math.max(0,Math.min(e,t));o!==this.scrollLeft&&(this.scrollLeft=o,this.syncCSSVars(),this.syncScrollbars(),this.sbHNativeEl&&(this.sbHNativeEl.scrollLeft=o),this.scrollXCb?.())}scrollToRow(e,t){e>=0&&e<t.length&&this.scrollToY(t[e].top)}scrollToTop(){this.scrollToY(0)}destroy(){this.stopMomentum(),this.abortCtrl?.abort(),this.abortCtrl=null,this.resizeObs?.disconnect(),this.resizeObs=null}clampScroll(){this.scrollTop=Math.max(0,Math.min(this.scrollTop,Math.max(0,this.totalHeight-this.viewportHeight))),this.scrollLeft=Math.max(0,Math.min(this.scrollLeft,Math.max(0,this.totalCenterWidth-this.centerViewportWidth)))}syncCSSVars(){this.gridEl&&(this.gridEl.style.setProperty("--pg-scroll-x",`-${this.scrollLeft}px`),this.gridEl.style.setProperty("--pg-scroll-y",`-${this.scrollTop}px`))}syncScrollbars(){if(this.sbVNativeEl){let e=!this.reserveVerticalGutter&&this.totalHeight<=this.viewportHeight;this.sbVNativeEl.classList.toggle("pg-scrollbar--hidden",e),this.gridEl?.style.setProperty("--pg-scrollbar-v-live-width",e?"0px":"var(--pg-scrollbar-v-width, 17px)")}this.sbHRowEl&&this.sbHRowEl.classList.toggle("pg-scrollbar--hidden",this.totalCenterWidth<=this.centerViewportWidth)}releasePan(e){this.panPointerId=null;try{this.panCaptureEl?.releasePointerCapture(e)}catch{}this.panCaptureEl=null}startMomentum(){let e=this.velX,t=this.velY;if(Math.abs(e)<xt&&Math.abs(t)<xt)return;let o=16,r=()=>{if(this.momentumRAF=null,e*=$o,t*=$o,Math.abs(e)<xt&&Math.abs(t)<xt)return;let n=this.scrollLeft,i=this.scrollTop;this.scrollToX(this.scrollLeft+e*o),this.scrollToY(this.scrollTop+t*o),!(this.scrollLeft===n&&this.scrollTop===i)&&(this.momentumRAF=requestAnimationFrame(r))};this.momentumRAF=requestAnimationFrame(r)}stopMomentum(){this.momentumRAF!==null&&(cancelAnimationFrame(this.momentumRAF),this.momentumRAF=null)}suppressNextClick(){let e=this.gridEl;if(!e)return;let t=o=>{o.stopPropagation(),o.preventDefault(),e.removeEventListener("click",t,!0)};e.addEventListener("click",t,!0),setTimeout(()=>e.removeEventListener("click",t,!0),400)}};var Jt=class{constructor(e,t,o,r,n=60,i=500){this.getRect=e;this.scrollY=t;this.scrollX=o;this.onScrolled=r;this.threshold=n;this.maxSpeed=i;this.rafId=null;this.lastTs=0;this.clientX=0;this.clientY=0;this.running=!1;this.tick=e=>{if(!this.running)return;let t=this.getRect();if(!t){this.stop();return}let o=this.lastTs===0?0:Math.min((e-this.lastTs)/1e3,.1);this.lastTs=e;let r=!1;if(o>0){let{clientX:n,clientY:i}=this,s=i-t.top,l=t.bottom-i;s<this.threshold?(this.scrollY(-this.speedAt(Math.max(0,s))*o),r=!0):l<this.threshold&&(this.scrollY(this.speedAt(Math.max(0,l))*o),r=!0);let a=n-t.left,c=t.right-n;a<this.threshold?(this.scrollX(-this.speedAt(Math.max(0,a))*o),r=!0):c<this.threshold&&(this.scrollX(this.speedAt(Math.max(0,c))*o),r=!0)}r&&this.onScrolled?.(this.clientX,this.clientY),this.rafId=requestAnimationFrame(this.tick)}}updateMouse(e,t){this.clientX=e,this.clientY=t,this.running||(this.running=!0,this.lastTs=0,this.rafId=requestAnimationFrame(this.tick))}stop(){this.running=!1,this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null)}speedAt(e){return this.maxSpeed*(1-e/this.threshold)}};var qo="cubic-bezier(0.4, 0, 0.2, 1)",Qt=class{constructor(){this.snapshot=null;this.animationType="sort";this.cleanupTimer=null}capture(e,t="sort"){this.cleanupTimer!==null&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null),this.animationType=t,this.snapshot=new Map(e.map(o=>[o.nodeId,o.top]))}animate(e,t,o){let r=this.snapshot;if(this.snapshot=null,!r||r.size===0)return;let n=(this.animationType==="filter"||this.animationType==="detail"||this.animationType==="group",200),i=new Map(t.map(g=>[g.nodeId,g.top])),s=[];for(let g of e)for(let m of g.querySelectorAll("[data-node-id]")){let f=m.getAttribute("data-node-id");f&&s.push({el:m,oldTop:r.get(f),newTop:i.get(f)})}if(s.length===0)return;let l=this.animationType==="group"||this.animationType==="detail",a=s.reduce((g,m)=>g+(m.oldTop!==void 0?1:0),0),c=!l&&a/s.length<.5,p=[],h=[],u=[];if(c)for(let g of s)u.push(g.el);else for(let g of s){if(g.oldTop===void 0){h.push(g.el);continue}if(g.newTop===void 0)continue;let m=g.oldTop-g.newTop;if(Math.abs(m)<1)continue;let f=o!==void 0&&Math.abs(m)>o?Math.sign(m)*o:m;p.push({el:g.el,delta:f})}if(!(p.length===0&&h.length===0&&u.length===0)){for(let{el:g,delta:m}of p)g.style.willChange="transform",g.style.transition="none",g.style.transform=`translateY(${m}px)`;for(let g of h)g.style.willChange="opacity, transform",g.style.transition="none",g.style.opacity="0",g.style.transform="translateY(8px)";for(let g of u)g.style.willChange="transform",g.style.transition="none",g.style.transform="translateY(14px)";e[0]?.offsetHeight,requestAnimationFrame(()=>{let g=`transform ${n}ms ${qo}`,m=`opacity ${n}ms ${qo}, transform ${n}ms ${qo}`;for(let{el:f}of p)f.style.transition=g,f.style.transform="translateY(0)";for(let f of h)f.style.transition=m,f.style.opacity="",f.style.transform="";for(let f of u)f.style.transition=g,f.style.transform="";this.cleanupTimer=setTimeout(()=>{this.cleanupTimer=null;for(let{el:f}of p)f.style.transform="",f.style.transition="",f.style.willChange="";for(let f of h)f.style.opacity="",f.style.transform="",f.style.transition="",f.style.willChange="";for(let f of u)f.style.transform="",f.style.transition="",f.style.willChange=""},n+20)})}}hasPending(){return this.snapshot!==null}destroy(){this.cleanupTimer!==null&&(clearTimeout(this.cleanupTimer),this.cleanupTimer=null),this.snapshot=null}};var Yi=[{label:"Contains",operator:"contains"},{label:"Does not contain",operator:"notContains"},{label:"Equals",operator:"equals"},{label:"Does not equal",operator:"notEquals"},{label:"Starts with",operator:"startsWith"},{label:"Ends with",operator:"endsWith"},{label:"Blank",operator:"blank"},{label:"Not blank",operator:"notBlank"}],Ki=[{label:"Equals",operator:"equals"},{label:"Does not equal",operator:"notEquals"},{label:"Greater than",operator:"greaterThan"},{label:"Greater than or equal to",operator:"greaterThanOrEqual"},{label:"Less than",operator:"lessThan"},{label:"Less than or equal to",operator:"lessThanOrEqual"},{label:"Between",operator:"inRange"},{label:"Blank",operator:"blank"},{label:"Not blank",operator:"notBlank"}],Zi=[{label:"Equals",operator:"equals"},{label:"Does not equal",operator:"notEquals"},{label:"Before",operator:"before"},{label:"After",operator:"after"},{label:"Between",operator:"inRange"},{label:"Blank",operator:"blank"},{label:"Not blank",operator:"notBlank"}];function wn(d){switch(d){case"number":case"currency":case"percentage":return Ki;case"date":case"time":return Zi;default:return Yi}}function Ji(d){switch(d){case"number":case"currency":case"percentage":return"number";case"date":return"date";case"time":return"time";default:return"text"}}function eo(d){return d==="dropdown"||d==="array"}function wt(d){return d==="blank"||d==="notBlank"}function jo(d){return d==="inRange"}var ve=28,En=9,Rn=3,Qi=200,to=class{constructor(e){this.config=e;this.panelEl=null;this.val1="";this.val1To="";this.logicMode="none";this.val2="";this.val2To="";this.setSearchTerm="";this.vsContainerEl=null;this.vsInnerEl=null;this.logicRowEl=null;this.cond2RowEl=null;this.selectAllCbEl=null;this.debounceTimer=null;let t=e.colDef.type??"string",o=wn(t);this.op1=o[0].operator,this.op2=o[0].operator,this.allOptions=e.uniqueOptions,this.displayOptions=[...this.allOptions];let r=e.currentFilter;if(r)if(eo(t))this.selectedValues=new Set((r.selectedIds??[]).map(String));else{this.selectedValues=new Set,r.conditions.length>=1&&(this.op1=r.conditions[0].operator,this.val1=r.conditions[0].value!=null?String(r.conditions[0].value):"",this.val1To=r.conditions[0].valueTo!=null?String(r.conditions[0].valueTo):"");let n=r.conditions.length>=2?r.conditions[1]:null;n&&(this.logicMode=r.logic??"and",this.op2=n.operator,this.val2=n.value!=null?String(n.value):"",this.val2To=n.valueTo!=null?String(n.valueTo):"")}else this.selectedValues=new Set(this.allOptions.map(n=>n.value));this.boundClickOutside=this.handleClickOutside.bind(this),this.boundEscapeKey=this.handleEscapeKey.bind(this)}open(){let e=this.config.colDef.type??"string",t=document.createElement("div");t.className="pg-filter-panel",t.setAttribute("role","dialog"),t.setAttribute("aria-label",`Filter: ${this.config.colDef.header}`);let o=$(this.config.colDef,"filter"),r=!!o;if(o){let n={colDef:this.config.colDef,anchorEl:this.config.anchorEl,currentFilter:this.config.currentFilter,uniqueOptions:this.config.uniqueOptions,onFilterChange:this.config.onFilterChange,onClose:()=>this.destroy(),api:null};t.appendChild(o(n))}else eo(e)?t.appendChild(this.buildSetFilter()):t.appendChild(this.buildConditionFilter(e));r||t.appendChild(this.buildFooter()),this.panelEl=t,this.config.containerEl.appendChild(t),this.position(),!r&&eo(e)&&this.vsContainerEl&&this.renderVirtualList(),requestAnimationFrame(()=>{document.addEventListener("mousedown",this.boundClickOutside,!0),document.addEventListener("keydown",this.boundEscapeKey,!0)})}destroy(){this.clearDebounce(),document.removeEventListener("mousedown",this.boundClickOutside,!0),document.removeEventListener("keydown",this.boundEscapeKey,!0),this.panelEl?.remove(),this.panelEl=null,this.config.onClose()}buildConditionFilter(e){let t=document.createElement("div");t.className="pg-filter-cond-wrap";let o=this.buildConditionRow(e,1);t.appendChild(o);let r=document.createElement("div");r.className="pg-filter-logic",this.hasConditionValue(1)||r.classList.add("pg-filter-logic--hidden");for(let i of["and","or","none"]){let s=document.createElement("button");s.type="button",s.className="pg-filter-logic__btn",s.textContent=i==="none"?"None":i.toUpperCase(),this.logicMode===i&&s.classList.add("pg-filter-logic__btn--active"),s.addEventListener("click",()=>{this.logicMode=i,r.querySelectorAll(".pg-filter-logic__btn").forEach(l=>{l.classList.toggle("pg-filter-logic__btn--active",l.textContent===(i==="none"?"None":i.toUpperCase()))}),this.cond2RowEl&&this.cond2RowEl.classList.toggle("pg-filter-cond__row--hidden",i==="none"),this.scheduleEmit()}),r.appendChild(s)}this.logicRowEl=r,t.appendChild(r);let n=this.buildConditionRow(e,2);return this.logicMode==="none"&&n.classList.add("pg-filter-cond__row--hidden"),this.cond2RowEl=n,t.appendChild(n),t}buildConditionRow(e,t){let o=wn(e),r=Ji(e),n=t===1?this.op1:this.op2,i=t===1?this.val1:this.val2,s=t===1?this.val1To:this.val2To,l=document.createElement("div");l.className="pg-filter-cond__row";let a=document.createElement("select");a.className="pg-filter-cond__select",a.setAttribute("aria-label","Filter operator");for(let f of o){let C=document.createElement("option");C.value=f.operator,C.textContent=f.label,f.operator===n&&(C.selected=!0),a.appendChild(C)}let c=document.createElement("div");c.className="pg-filter-cond__inputs";let p=document.createElement("input");p.type=r,p.className="pg-filter-cond__input",p.placeholder="Filter value\u2026",p.value=i,p.setAttribute("aria-label","Filter value");let h=document.createElement("span");h.className="pg-filter-cond__range-sep",h.textContent="and";let u=document.createElement("input");u.type=r,u.className="pg-filter-cond__input",u.placeholder="To value\u2026",u.value=s,u.setAttribute("aria-label","Filter to value"),t===1?(this.val1=i,this.val1To=s):(this.val2=i,this.val2To=s);let g=jo(n),m=wt(n);return c.classList.toggle("pg-filter-cond__inputs--hidden",m),c.classList.toggle("pg-filter-cond__inputs--range",g),h.classList.toggle("pg-filter-cond__range-sep--hidden",!g),u.classList.toggle("pg-filter-cond__input--hidden",!g),c.appendChild(p),c.appendChild(h),c.appendChild(u),a.addEventListener("change",()=>{let f=a.value;t===1?this.op1=f:this.op2=f;let C=wt(f),b=jo(f);c.classList.toggle("pg-filter-cond__inputs--hidden",C),c.classList.toggle("pg-filter-cond__inputs--range",b),h.classList.toggle("pg-filter-cond__range-sep--hidden",!b),u.classList.toggle("pg-filter-cond__input--hidden",!b),this.scheduleEmit()}),p.addEventListener("input",()=>{let f=p.value;t===1?(this.val1=f,this.logicRowEl&&this.logicRowEl.classList.toggle("pg-filter-logic--hidden",!f&&!wt(this.op1))):this.val2=f,this.scheduleEmit()}),u.addEventListener("input",()=>{t===1?this.val1To=u.value:this.val2To=u.value,this.scheduleEmit()}),l.appendChild(a),l.appendChild(c),l}hasConditionValue(e){let t=e===1?this.op1:this.op2,o=e===1?this.val1:this.val2;return wt(t)||o.trim()!==""}buildSetFilter(){let e=document.createElement("div");e.className="pg-filter-set";let t=document.createElement("div");t.className="pg-filter-set__search";let o=document.createElement("input");o.type="text",o.className="pg-filter-set__search-input",o.placeholder="Search values\u2026",o.setAttribute("aria-label","Search filter values"),o.value=this.setSearchTerm,o.addEventListener("input",()=>{this.setSearchTerm=o.value,this.applySetSearch()}),t.appendChild(o),e.appendChild(t),e.appendChild(this.buildDivider());let r=document.createElement("label");r.className="pg-filter-set__item pg-filter-set__item--select-all";let n=document.createElement("input");n.type="checkbox",n.className="pg-filter-set__checkbox",n.setAttribute("aria-label","Select all"),this.updateSelectAllState(n),n.addEventListener("change",()=>{n.checked?this.selectedValues=new Set(this.allOptions.map(p=>p.value)):this.selectedValues=new Set,this.renderVirtualList(),this.updateSelectAllState(n),this.emitFilter()}),this.selectAllCbEl=n;let i=document.createElement("span");i.className="pg-filter-set__item-label",i.textContent="(Select All)",r.appendChild(n),r.appendChild(i),e.appendChild(r),e.appendChild(this.buildDivider());let l=Math.min(this.allOptions.length,En)*ve,a=document.createElement("div");a.className="pg-filter-set__list",a.style.height=`${l}px`;let c=document.createElement("div");return c.className="pg-filter-set__list-inner",c.style.height=`${this.displayOptions.length*ve}px`,a.appendChild(c),a.addEventListener("scroll",()=>this.renderVirtualList(),{passive:!0}),this.vsContainerEl=a,this.vsInnerEl=c,e.appendChild(a),e}buildDivider(){let e=document.createElement("div");return e.className="pg-filter-set__divider",e}applySetSearch(){let e=this.setSearchTerm.toLowerCase().trim();this.displayOptions=e?this.allOptions.filter(t=>t.label.toLowerCase().includes(e)):[...this.allOptions],this.vsInnerEl&&(this.vsInnerEl.style.height=`${this.displayOptions.length*ve}px`),this.vsContainerEl&&(this.vsContainerEl.scrollTop=0),this.renderVirtualList(),this.updateSelectAllState(this.selectAllCbEl)}renderVirtualList(){if(!this.vsContainerEl||!this.vsInnerEl)return;let e=this.vsContainerEl.scrollTop,t=this.vsContainerEl.clientHeight||En*ve,o=Math.max(0,Math.floor(e/ve)-Rn),r=Math.min(this.displayOptions.length,Math.ceil((e+t)/ve)+Rn);this.vsInnerEl.innerHTML="";for(let n=o;n<r;n++){let i=this.displayOptions[n],s=this.buildSetItem(i,n);this.vsInnerEl.appendChild(s)}}buildSetItem(e,t){let o=document.createElement("label");o.className="pg-filter-set__item",o.style.top=`${t*ve}px`;let r=document.createElement("input");r.type="checkbox",r.className="pg-filter-set__checkbox",r.checked=this.selectedValues.has(e.value),r.addEventListener("change",()=>{r.checked?this.selectedValues.add(e.value):this.selectedValues.delete(e.value),this.updateSelectAllState(this.selectAllCbEl),this.emitFilter()});let n=document.createElement("span");n.className="pg-filter-set__item-label";let i=$(this.config.colDef,"option");if(i){let s=i({option:{value:e.value,label:e.label},index:t,selected:r.checked,highlighted:!1,colDef:this.config.colDef,api:null});typeof s=="string"?n.innerHTML=s:n.appendChild(s)}else n.textContent=e.label||"(Blank)",e.label||n.classList.add("pg-filter-set__item-label--blank");return o.appendChild(r),o.appendChild(n),o}updateSelectAllState(e){if(!e)return;let t=this.displayOptions.length||this.allOptions.length,o=this.searchTerm?this.displayOptions.filter(r=>this.selectedValues.has(r.value)).length:this.selectedValues.size;e.checked=o>=t,e.indeterminate=o>0&&o<t}get searchTerm(){return this.setSearchTerm}buildFooter(){let e=document.createElement("div");e.className="pg-filter-panel__footer";let t=document.createElement("button");return t.type="button",t.className="pg-filter-panel__clear-btn",t.textContent="Clear Filter",t.addEventListener("click",()=>{this.config.onFilterChange(null),this.destroy()}),e.appendChild(t),e}buildColumnFilter(){let e=this.config.colDef,t=e.type??"string";if(eo(t))return this.selectedValues.size>=this.allOptions.length?null:this.selectedValues.size===0?{colId:e.colId,field:e.field,type:"dropdown",logic:"and",conditions:[{operator:"equals",value:"__NO_MATCH__"}],selectedIds:[]}:{colId:e.colId,field:e.field,type:"dropdown",logic:"and",conditions:[{operator:"in",value:null}],selectedIds:Array.from(this.selectedValues)};let o=this.getFilterDataType(t),r=this.buildConditionObject(this.op1,this.val1,this.val1To);if(!r)return null;let i=this.logicMode!=="none"?this.buildConditionObject(this.op2,this.val2,this.val2To):null;return i?{colId:e.colId,field:e.field,type:o,logic:this.logicMode,conditions:[r,i]}:{colId:e.colId,field:e.field,type:o,logic:"and",conditions:[r]}}buildConditionObject(e,t,o){return wt(e)?{operator:e,value:null}:t.trim()===""?null:jo(e)?{operator:e,value:t.trim(),valueTo:o.trim()}:{operator:e,value:t.trim()}}getFilterDataType(e){switch(e){case"number":case"currency":case"percentage":return"number";case"date":case"time":return"date";case"boolean":return"boolean";case"dropdown":return"dropdown";case"array":return"array";default:return"string"}}scheduleEmit(){this.clearDebounce(),this.debounceTimer=setTimeout(()=>this.emitFilter(),Qi)}emitFilter(){let e=this.buildColumnFilter();this.config.onFilterChange(e)}clearDebounce(){this.debounceTimer!==null&&(clearTimeout(this.debounceTimer),this.debounceTimer=null)}position(){if(!this.panelEl)return;let e=this.config.anchorEl.getBoundingClientRect(),t=this.config.containerEl.getBoundingClientRect(),o=e.bottom-t.top,r=e.left-t.left,n=this.panelEl.offsetWidth||280,i=t.width;r+n>i&&(r=Math.max(0,i-n));let s=this.panelEl.offsetHeight||300;t.height-o<s&&o>s&&(o=e.top-t.top-s),this.panelEl.style.top=`${Math.max(0,o)}px`,this.panelEl.style.left=`${Math.max(0,r)}px`}handleClickOutside(e){let t=e.target;this.panelEl?.contains(t)||this.config.anchorEl?.contains(t)||this.destroy()}handleEscapeKey(e){e.key==="Escape"&&(e.stopPropagation(),this.destroy())}};var es=20,ts=10,oo=class{constructor(){this.layerEl=null;this.contentEl=null;this.entries=new Map;this.collapsedCache=new Map;this.masterDetailEngine=null;this.nestedGridFactory=null;this.iconRenderer=null;this.themeManager=null;this.parentApi=null;this.parentScrollForwarder=null}mount(e){this.layerEl=y("pg-detail-layer"),this.contentEl=y("pg-detail-layer__content"),this.layerEl.appendChild(this.contentEl),e.appendChild(this.layerEl)}setDependencies(e,t,o,r){this.masterDetailEngine=e,this.nestedGridFactory=t,this.iconRenderer=o,this.themeManager=r}setParentScrollForwarder(e){this.parentScrollForwarder=e}setParentApi(e){this.parentApi=e}sync(e,t){if(!this.contentEl||!this.masterDetailEngine)return;for(let[r,n]of this.entries)n.collapsing||t.has(r)||(this.destroyEntry(n),this.entries.delete(r));let o=new Set(e.map(r=>r.nodeId));for(let[r,n]of this.entries)n.collapsing||o.has(r)||(n.containerEl.style.display="none");for(let r of e){let n=this.entries.get(r.nodeId);n||(n=this.reviveOrBuildEntry(r),this.entries.set(r.nodeId,n),this.playEnterAnimation(n)),n.containerEl.style.display="",n.contentBuilt||this.tryBuildContent(n,r)}}reviveOrBuildEntry(e){let t=this.collapsedCache.get(e.nodeId);return t?(this.collapsedCache.delete(e.nodeId),t):this.buildEntry(e)}beginCollapse(e){if(!this.contentEl)return;let t=ut(e),o=this.entries.get(t);if(!o||o.collapsing)return;o.collapsing=!0;let r=this.contentEl.getBoundingClientRect(),n=o.containerEl.getBoundingClientRect();o.containerEl.style.top=`${n.top-r.top}px`,o.containerEl.style.height=`${n.height}px`,o.containerEl.offsetHeight;let i=!1,s=()=>{i||(i=!0,o.containerEl.removeEventListener("transitionend",l),this.entries.get(t)===o&&(this.entries.delete(t),this.cacheCollapsedEntry(t,o)))},l=a=>{a.propertyName==="height"&&s()};o.containerEl.addEventListener("transitionend",l),setTimeout(s,260),requestAnimationFrame(()=>{o.containerEl.classList.add("pg-row--detail-collapsing"),o.containerEl.style.height="0px"})}playEnterAnimation(e){e.containerEl.classList.add("pg-row--detail-entering"),requestAnimationFrame(()=>{requestAnimationFrame(()=>{e.containerEl.classList.remove("pg-row--detail-entering")})})}destroy(){for(let e of this.entries.values())this.destroyEntry(e);this.entries.clear();for(let e of this.collapsedCache.values())this.destroyEntry(e);this.collapsedCache.clear(),this.layerEl?.remove(),this.layerEl=null,this.contentEl=null}getNestedInstance(e){return this.entries.get(ut(e))?.instance??void 0}buildEntry(e){let t=y("pg-row pg-row--detail-container");return t.setAttribute("data-node-id",e.nodeId),this.contentEl.appendChild(t),{containerEl:t,instance:null,contentBuilt:!1,collapsing:!1,cleanupFns:[]}}cacheCollapsedEntry(e,t){t.collapsing=!1,t.containerEl.classList.remove("pg-row--detail-collapsing"),t.containerEl.style.removeProperty("top"),t.containerEl.style.removeProperty("height"),t.containerEl.style.display="none",this.collapsedCache.delete(e),this.collapsedCache.set(e,t);let o=this.masterDetailEngine?.getConfig()?.keepDetailGridsCount??ts;for(;this.collapsedCache.size>o;){let r=this.collapsedCache.keys().next().value;if(r===void 0)break;let n=this.collapsedCache.get(r);this.collapsedCache.delete(r),this.destroyEntry(n)}}tryBuildContent(e,t){let o=this.masterDetailEngine,r=t.parentNodeId;if(o.isPending(r)){e.containerEl.querySelector(".pg-detail-loading")||e.containerEl.appendChild(this.buildLoadingIndicator());return}e.containerEl.innerHTML="";let n=o.getConfig();if(n?.detailRendererFn){let a=n.detailRendererFn({rowData:t.data,nodeId:r,containerEl:e.containerEl,parentApi:this.parentApi});a&&a!==e.containerEl&&e.containerEl.appendChild(a),e.contentBuilt=!0;return}let i=y("pg-detail-nested-grid-host");e.containerEl.appendChild(i);let s=o.resolveDetailGridOptions(t,this.themeManager.getActiveMode(),this.themeManager.getActiveVariant()),l=this.nestedGridFactory(i,s);e.instance=l,e.contentBuilt=!0,n?.detailResizable?this.attachResizeHandle(e,r):n?.detailAutoHeight!==!1&&this.observeAutoHeight(e,r,l),this.attachWheelForwarding(e,l)}attachWheelForwarding(e,t){let o=r=>{r.ctrlKey||Math.abs(r.deltaX)>Math.abs(r.deltaY)||(r.deltaY<0?t.api.canScrollUp():t.api.canScrollDown())||(r.preventDefault(),r.stopPropagation(),this.parentScrollForwarder?.(r.deltaY))};e.containerEl.addEventListener("wheel",o,{capture:!0,passive:!1}),e.cleanupFns.push(()=>e.containerEl.removeEventListener("wheel",o,{capture:!0}))}observeAutoHeight(e,t,o){let r=e.containerEl.querySelector(".pg-grid");if(!r)return;let n=()=>{let s=parseFloat(r.style.getPropertyValue("--pg-content-height"))||0,l=r.querySelector(".pg-grid__header"),a=r.querySelector(".pg-grid__footer"),c=(l?.offsetHeight??0)+(a?.offsetHeight??0)+2;this.masterDetailEngine.setDetailHeight(t,c+s+es*2)},i=o.api.on(x.ROWS_RENDERED,()=>requestAnimationFrame(n));e.cleanupFns.push(i),requestAnimationFrame(n)}attachResizeHandle(e,t){let o=y("pg-detail-resize-handle");o.setAttribute("data-detail-resize-handle",""),e.containerEl.appendChild(o);let r=0,n=0,i=a=>{this.masterDetailEngine.setDetailHeight(t,n+(a.clientY-r))},s=()=>{document.removeEventListener("pointermove",i),document.removeEventListener("pointerup",s)},l=a=>{a.button===0&&(a.preventDefault(),r=a.clientY,n=e.containerEl.getBoundingClientRect().height,document.addEventListener("pointermove",i),document.addEventListener("pointerup",s))};o.addEventListener("pointerdown",l),e.cleanupFns.push(()=>{o.removeEventListener("pointerdown",l),s()})}buildLoadingIndicator(){let e=y("pg-detail-loading");return e.appendChild(this.iconRenderer.render("loading",{size:20,spin:!0})),this.iconRenderer.injectSpinKeyframes(),e}destroyEntry(e){for(let t of e.cleanupFns)t();e.instance?.destroy(),e.containerEl.remove()}};function ro(d,e,t,o=0,r=d.length-1){let n=o,i=r;for(;n<=i;){let s=n+i>>1,l=d[s].top,a=l+(d[s].height??t);if(e<l)i=s-1;else if(e>=a)n=s+1;else return s}return-1}var no=class{compute(e,t,o,r){let n={nodeId:null,offsetPx:0,minStart:r};if(e.length===0)return n;let i=ro(e,t,o);if(i<0)return n;let s=this.resolveMasterIndex(e,i);if(s<0)return n;let l=e[s],a=e[s+1];if(!a||a.type!=="detail")return n;let c=l.height??o,p=a.top+(a.height??o),h=Math.min(0,p-t-c);return{nodeId:l.nodeId,offsetPx:h,minStart:Math.min(r,s)}}resolveMasterIndex(e,t){let o=e[t];if(o.type==="detail"){let r=t-1;return e[r]?.type==="data"?r:-1}return o.type==="data"&&e[t+1]?.type==="detail"&&e[t+1].parentNodeId===o.nodeId?t:-1}};function os(d,e,t){let o=0,r=d.length-1;for(;o<=r;){let n=o+r>>1,i=d[n],s=i.subtreeEndTop??i.top+(i.height??t);if(e<i.top)r=n-1;else if(e>=s)o=n+1;else return i}return null}var io=class{compute(e,t,o,r){let n={entries:[],minStart:r};if(e.length===0)return n;let i=ro(e,t,o);if(i<0)return n;let s=e[i];for(;s.parent;)s=s.parent;if(!(s.hasChildren||s.children.length>0))return n;let l=r,a=0,c=[];for(;;){let p=t+a,h=s.height??o,u=s.subtreeEndTop??1/0,g=Math.max(-h,Math.min(0,u-p-h));if(c.push({nodeId:s.nodeId,top:a+g}),l=Math.min(l,s.rowIndex),p>=u)break;a+=h;let m=os(s.children,t+a,o);if(!m||!(m.hasChildren||m.children.length>0))break;s=m}return{entries:c,minStart:l}}};var rs=120,ns=140,so=class{constructor(e){this.iconRenderer=e;this.launcherEl=null;this.panelEl=null;this.logEl=null;this.inputEl=null;this.sendBtnEl=null;this.submitHandler=null;this.asyncSubmitHandler=null;this.isOpen=!1;this.messages=[];this.activeController=null;this.typewriterHandle=null;this.isBusy=!1}mount(e,t){this.launcherEl=this.buildLauncher(),this.panelEl=this.buildPanel(t),e.appendChild(this.launcherEl),e.appendChild(this.panelEl),t.defaultOpen&&this.open()}setSubmitHandler(e){this.submitHandler=e}setAsyncSubmitHandler(e){this.asyncSubmitHandler=e}invoke(e){this.appendMessage({role:"user",text:e});let t=this.submitHandler?.(e)??{success:!1,message:"Photon AI is not ready yet."};return this.appendMessage({role:"assistant",text:t.message,success:t.success}),t}async invokeAsync(e){if(!this.asyncSubmitHandler)return this.invoke(e);this.cancelActiveRequest(),this.setBusy(!0),this.appendMessage({role:"user",text:e});let t=this.appendLoadingBubble(),o=new AbortController;this.activeController=o;let r;try{r=await this.asyncSubmitHandler(e,o.signal)}catch(n){r={success:!1,message:n instanceof Error?n.message:"Photon AI request failed."}}return o.signal.aborted?(t.remove(),this.activeController===o&&(this.activeController=null),r):(this.activeController=null,await this.renderStreamingResult(t,r),this.setBusy(!1),r)}open(){this.isOpen||!this.panelEl||!this.launcherEl||(this.isOpen=!0,this.launcherEl.classList.add("pg-ai-launcher--hidden"),this.panelEl.classList.add("pg-ai-panel--open"),this.messages.length===0&&this.appendGreeting(),requestAnimationFrame(()=>this.inputEl?.focus()))}close(){!this.isOpen||!this.panelEl||!this.launcherEl||(this.isOpen=!1,this.cancelActiveRequest(),this.panelEl.classList.remove("pg-ai-panel--open"),this.launcherEl.classList.remove("pg-ai-launcher--hidden"))}destroy(){this.cancelActiveRequest(),this.launcherEl?.remove(),this.panelEl?.remove(),this.launcherEl=null,this.panelEl=null,this.logEl=null,this.inputEl=null,this.sendBtnEl=null,this.submitHandler=null,this.asyncSubmitHandler=null,this.messages=[],this.isBusy=!1}buildLauncher(){let e=ft("button",{type:"button","aria-label":"Open Photon AI"});return e.className="pg-ai-launcher",e.appendChild(this.iconRenderer.render("sparkle",{size:20})),e.addEventListener("click",()=>this.open()),e}buildPanel(e){let t=y("pg-ai-panel");return t.setAttribute("role","complementary"),t.setAttribute("aria-label","Photon AI"),t.appendChild(this.buildHeader()),this.logEl=y("pg-ai-panel__log"),this.logEl.setAttribute("role","log"),this.logEl.setAttribute("aria-live","polite"),t.appendChild(this.logEl),t.appendChild(this.buildInputArea(e)),t}buildHeader(){let e=y("pg-ai-panel__header"),t=y("pg-ai-panel__title");t.appendChild(this.iconRenderer.render("sparkle",{size:16}));let o=document.createElement("span");o.textContent="Photon AI",t.appendChild(o),e.appendChild(t);let r=ft("button",{type:"button","aria-label":"Close Photon AI"});return r.className="pg-ai-panel__close",r.appendChild(this.iconRenderer.render("close",{size:14})),r.addEventListener("click",()=>this.close()),e.appendChild(r),e}buildInputArea(e){let t=y("pg-ai-panel__input-wrap"),o=ft("textarea",{placeholder:e.placeholder??"Ask Photon AI to do something...",rows:1});o.className="pg-ai-panel__input",this.inputEl=o;let r=ft("button",{type:"button","aria-label":"Send"});return r.className="pg-ai-panel__send",r.disabled=!0,r.appendChild(this.iconRenderer.render("arrowUp",{size:14})),this.sendBtnEl=r,o.addEventListener("input",()=>{this.autoGrow(o),r.disabled=o.value.trim().length===0}),o.addEventListener("keydown",n=>{n.key==="Enter"&&!n.shiftKey&&(n.preventDefault(),this.trySubmit())}),r.addEventListener("click",()=>this.trySubmit()),t.appendChild(o),t.appendChild(r),t}autoGrow(e){e.style.height="auto",e.style.height=`${Math.min(e.scrollHeight,rs)}px`}trySubmit(){let e=this.inputEl,t=this.sendBtnEl;if(!e||!t||this.isBusy)return;let o=e.value.trim();!o||t.disabled||(e.value="",t.disabled=!0,this.autoGrow(e),this.asyncSubmitHandler?this.invokeAsync(o):this.invoke(o))}appendGreeting(){this.appendMessage({role:"assistant",text:`Hi! Tell me what to do \u2014 sort, filter, pin, group, hide/show columns, move columns, selection, and more \u2014 or ask me a question about the grid's current state (try "help" to see everything I understand).`,success:!0})}appendMessage(e){if(this.messages.push(e),!this.logEl)return;let t=this.createBubble(e.role);e.role==="assistant"&&t.classList.toggle("pg-ai-panel__message--error",e.success===!1),this.renderLines(t,e.text),this.logEl.appendChild(t),this.scrollToBottom()}createBubble(e){return y(`pg-ai-panel__message pg-ai-panel__message--${e}`)}renderLines(e,t){rn(e);for(let o of t.split(`
4300
+ `)){let r=document.createElement("div");r.textContent=o.length>0?o:"\u200B",e.appendChild(r)}}appendLoadingBubble(){let e=this.createBubble("assistant");e.classList.add("pg-ai-panel__message--loading");let t=y("pg-ai-panel__typing");for(let o=0;o<3;o++)t.appendChild(y("pg-ai-panel__typing-dot"));return e.appendChild(t),this.logEl?.appendChild(e),this.scrollToBottom(),e}async renderStreamingResult(e,t){if(e.classList.remove("pg-ai-panel__message--loading"),e.classList.toggle("pg-ai-panel__message--error",t.success===!1),this.messages.push({role:"assistant",text:t.message,success:t.success}),this.prefersReducedMotion()){this.renderLines(e,t.message),this.scrollToBottom();return}await this.typewrite(e,t.message)}typewrite(e,t){return new Promise(o=>{e.classList.add("pg-ai-panel__message--streaming");let r=null,n=i=>{r===null&&(r=i);let s=(i-r)/1e3,l=Math.min(t.length,Math.ceil(s*ns));if(this.renderLines(e,t.slice(0,l)),this.scrollToBottom(),l>=t.length){e.classList.remove("pg-ai-panel__message--streaming"),this.typewriterHandle=null,o();return}this.typewriterHandle=requestAnimationFrame(n)};this.typewriterHandle=requestAnimationFrame(n)})}setBusy(e){this.isBusy=e,this.inputEl&&(this.inputEl.disabled=e),this.sendBtnEl&&(this.sendBtnEl.disabled=e||this.inputEl?.value.trim().length===0),e||requestAnimationFrame(()=>this.inputEl?.focus())}cancelActiveRequest(){this.activeController?.abort(),this.activeController=null,this.typewriterHandle!==null&&(cancelAnimationFrame(this.typewriterHandle),this.typewriterHandle=null),this.isBusy&&this.setBusy(!1)}scrollToBottom(){this.logEl&&(this.logEl.scrollTop=this.logEl.scrollHeight)}prefersReducedMotion(){return typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}};var is=400,lo=class{constructor(e,t,o){this.store=e;this.columnModel=t;this.api=o;this.hostEl=null;this.tooltipEl=null;this.showTimer=null;this.hoveredCellEl=null;this.boundMouseOver=this.handleMouseOver.bind(this),this.boundMouseOut=this.handleMouseOut.bind(this)}mount(e){this.hostEl=e,e.addEventListener("mouseover",this.boundMouseOver),e.addEventListener("mouseout",this.boundMouseOut)}destroy(){this.hostEl?.removeEventListener("mouseover",this.boundMouseOver),this.hostEl?.removeEventListener("mouseout",this.boundMouseOut),this.clearShowTimer(),this.tooltipEl?.remove(),this.tooltipEl=null,this.hostEl=null,this.hoveredCellEl=null}handleMouseOver(e){let t=e.target.closest(".pg-cell[data-col-id]");if(!t||t===this.hoveredCellEl)return;this.hoveredCellEl=t,this.clearShowTimer(),this.hide();let o=t.getAttribute("data-col-id"),r=t.closest("[data-node-id]")?.getAttribute("data-node-id");if(!o||!r)return;let n=this.columnModel.getVisibleColumns(),i=n.findIndex(p=>p.colId===o),s=n[i];if(!s)return;let l=$(s,"tooltip");if(!l)return;let c=(this.store.get("visibleRows")??[]).find(p=>p.nodeId===r);!c||c.type!=="data"||(this.showTimer=setTimeout(()=>{let p=c.data[s.field],h={value:p,rawValue:p,row:c.data,colDef:s,rowIndex:c.rowIndex,colIndex:i,api:this.api};this.show(t,l(h))},is))}handleMouseOut(e){let t=e.relatedTarget;this.hoveredCellEl&&t&&this.hoveredCellEl.contains(t)||(this.hoveredCellEl=null,this.clearShowTimer(),this.hide())}show(e,t){this.hostEl&&(this.tooltipEl||(this.tooltipEl=document.createElement("div"),this.tooltipEl.className="pg-tooltip",this.hostEl.appendChild(this.tooltipEl)),typeof t=="string"?this.tooltipEl.innerHTML=t:(this.tooltipEl.innerHTML="",this.tooltipEl.appendChild(t)),this.position(e),this.tooltipEl.classList.add("pg-tooltip--visible"))}hide(){this.tooltipEl?.classList.remove("pg-tooltip--visible")}position(e){if(!this.tooltipEl||!this.hostEl)return;let t=this.hostEl.getBoundingClientRect(),o=e.getBoundingClientRect(),r=this.tooltipEl.getBoundingClientRect(),n=o.top-t.top-r.height-8;n<0&&(n=o.bottom-t.top+8);let i=o.left-t.left,s=t.width-r.width-4;i>s&&(i=Math.max(4,s)),i<4&&(i=4),this.tooltipEl.style.transform=`translate(${i}px, ${n}px)`}clearShowTimer(){this.showTimer!==null&&(clearTimeout(this.showTimer),this.showTimer=null)}};var Sn=44,In=52,ss=5,ls=2,ce=200,nt=class{constructor(e,t,o,r,n,i,s,l,a,c,p){this.containerEl=e;this.store=t;this.eventBus=o;this.columnModel=r;this.paginationEngine=n;this.iconRenderer=i;this.cellSelectionEngine=s;this.sortEngine=l;this.rowSelectionEngine=a;this.groupingEngine=c;this.options=p;this.wrapperEl=null;this.leftHeaderPanelEl=null;this.centerHeaderInnerEl=null;this.rightHeaderPanelEl=null;this.leftBodyPanelEl=null;this.centerBodyEl=null;this.centerBodyContentEl=null;this.rightBodyPanelEl=null;this.leftBodyContentEl=null;this.rightBodyContentEl=null;this.footerContainerEl=null;this.bodyWrapEl=null;this.leftStickyRowEl=null;this.centerStickyRowEl=null;this.rightStickyRowEl=null;this.stickyNodeId=null;this.stickyRowTracker=new no;this.treeStickyRowTracker=new io;this.columnChooser=null;this.groupDropZone=null;this.rowDragRenderer=null;this.treeDragConfig=null;this.detailRowRenderer=null;this.masterDetailEngine=null;this.treeExpansionService=null;this.treeToggleColumnId=null;this.photonAIPanel=null;this.rafId=null;this.autoScroller=null;this.unsubscribers=[];this.headerRendered=!1;this.lastCenterColStart=-1;this.lastCenterColEnd=-1;this.rowAnimator=new Qt;this.columnGroupModel=null;this.groupHeaderBuilder=null;this.groupDragHandler=null;this.displayGroupEngine=null;this.filterEngine=null;this.filterRefreshFn=null;this.activeFilterPanel=null;this._lastColumnsRef=null;this._lastGroupedIdsRef=null;this._lastRowsRef=null;this._cachedTotalHeight=0;this._cachedCenterW=0;this._lastFlexResolvedWidth=-1;this.colStyles=new Yt,this.rowPositionSheet=new Kt,this.scrollController=new Zt,this.masterDetailEnabledAtConstruction=p.masterDetail?.enabled??!1,this.treeDataEnabledAtConstruction=p.treeData?.enabled??!1,this.masterDetailEnabledAtConstruction&&this.scrollController.setReserveVerticalGutter(!0),this.headerRenderer=new Ze(t,o,i,r,l,this.colStyles),p.showGroupingBar&&(this.groupDropZone=new Vt(t,c,i),this.headerRenderer.setGroupDropZone(this.groupDropZone)),this.bodyRenderer=new tt(t,o,i,a),this.footerRenderer=new ot(o,i,n),this.overlayRenderer=new rt(i),p.masterDetail?.enabled&&(this.detailRowRenderer=new oo,this.detailRowRenderer.setParentScrollForwarder(h=>{this.scrollController.scrollToY(this.scrollController.getScrollTop()+h)})),p.photonAI?.enabled&&(this.photonAIPanel=new so(i)),this.tooltipController=new lo(t,r,null)}setTreeDragConfig(e,t){this.treeDragConfig={active:e,reparentHandler:t}}setTreeRenderConfig(e,t){this.treeToggleColumnId=e??null,this.treeExpansionService=t}mount(){this.colStyles.mount(),this.rowPositionSheet.mount(),this.buildLayout(),this.wrapperEl&&this.bodyWrapEl&&(this.rowDragRenderer=new Xt(this.store,this.eventBus,this.iconRenderer),this.rowDragRenderer.mount(this.wrapperEl,this.bodyWrapEl,e=>this.scrollController.scrollToY(this.scrollController.getScrollTop()+e)),this.treeDragConfig&&this.rowDragRenderer.setTreeMode(this.treeDragConfig.active,this.treeDragConfig.reparentHandler)),this.subscribeToStore(),this.scheduleRender()}scheduleRender(){this.rafId===null&&(this.rafId=requestAnimationFrame(()=>{this.rafId=null,this.performRender()}))}forceRender(){this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null),this.performRender()}invalidateBodyRows(){this.bodyRenderer.clear(),this.scheduleRender()}invalidateBodyRowsByIds(e){this.bodyRenderer.invalidateRowsByNodeId(e),this.scheduleRender()}setFilterEngine(e){this.filterEngine=e}setFilterRefreshCallback(e){this.filterRefreshFn=e}setColumnGroupModel(e,t){this.columnGroupModel=e,this.groupHeaderBuilder=t,this.groupDragHandler=new Ke(this.columnModel,e,t,this.colStyles,this.eventBus,()=>this.wrapperEl),t.setDragConfig(this.groupDragHandler,()=>this.wrapperEl),this.headerRenderer.setColumnGroupModel(e,t),this.headerRenderer.setGroupDragHandler(this.groupDragHandler),this.headerRenderer.setGroupToggleCallback(o=>{this.handleGroupToggle(o)}),this.headerRenderer.setGroupResizeCallback((o,r)=>{this.handleGroupResize(o,r)})}setDisplayGroupEngine(e){this.displayGroupEngine=e,e.createDragHandler(()=>this.wrapperEl),this.headerRenderer.setDisplayGroupEngine(e),this.headerRenderer.setGroupToggleCallback(t=>{this.handleGroupToggle(t)}),this.headerRenderer.setGroupResizeCallback((t,o)=>{this.handleGroupResize(t,o)}),this.unsubscribers.push(this.eventBus.on(x.COLUMN_GROUP_HEADER_COLLAPSED,()=>{this.rebuildHeader()}),this.eventBus.on(x.COLUMN_GROUP_HEADER_EXPANDED,()=>{this.rebuildHeader()}),this.eventBus.on(x.COLUMN_MOVED,t=>{if(t?.fromIndex===-1){if(this.columnGroupModel){let r=this.columnGroupModel.getAllLeaves(),n=this.store.get("columns"),i=new Map(n.map(a=>[a.colId,a])),s=r.map(a=>i.get(a.colId)).filter(a=>a!==void 0);s.some((a,c)=>a.colId!==n[c]?.colId)&&this.store.set("columns",s)}this.bodyRenderer.clear(),this.rebuildHeader()}}))}openFilterPanel(e,t){if(!this.filterEngine||!this.wrapperEl)return;if(this.activeFilterPanel){this.activeFilterPanel.destroy(),this.activeFilterPanel=null;return}let o=this.filterEngine.getFilterModel()[e.colId]??null,r=this.extractUniqueOptions(e);this.activeFilterPanel=new to({colDef:e,anchorEl:t,containerEl:this.wrapperEl,currentFilter:o,uniqueOptions:r,onFilterChange:n=>{this.filterEngine.setColumnFilter(e.colId,n),this.filterRefreshFn?.()},onClose:()=>{this.activeFilterPanel=null}}),this.activeFilterPanel.open()}extractUniqueOptions(e){if(e.type==="dropdown"&&e.dropdownOptions?.length)return e.dropdownOptions.map(s=>({value:String(s.value),label:s.label??String(s.value)}));let t=this.store.get("allRows"),o=e.field,r=o.split("."),n=o.includes("."),i=new Set;for(let s of t){if(s.type!=="data")continue;let l;if(n){l=s.data;for(let a of r){if(l==null)break;l=l[a]}}else l=s.data[o];if(Array.isArray(l))for(let a of l)a!=null&&a!==""&&i.add(String(a));else l!=null&&l!==""&&i.add(String(l))}return Array.from(i).sort((s,l)=>s.localeCompare(l)).map(s=>({value:s,label:s}))}captureRowAnimation(e,t="sort"){this.options.animateRows!==!1&&this.rowAnimator.capture(e,t)}setRowAnimationEnabled(e){this.options.animateRows=e,e||this.rowAnimator.destroy()}setSearchCallback(e){this.groupDropZone?.setSearchCallback(e)}setMasterDetailConfig(e,t,o,r){this.masterDetailEngine=e,this.detailRowRenderer?.setDependencies(e,t,o,r)}setParentApiForDetail(e){this.detailRowRenderer?.setParentApi(e)}getDetailGridApi(e){return this.detailRowRenderer?.getNestedInstance(e)?.api}setPhotonAISubmitHandler(e){this.photonAIPanel?.setSubmitHandler(e)}setPhotonAIAsyncSubmitHandler(e){this.photonAIPanel?.setAsyncSubmitHandler(e)}submitAICommand(e){return this.photonAIPanel?.invoke(e)??{success:!1,message:"Photon AI is not enabled on this grid."}}submitAICommandAsync(e){return this.photonAIPanel?.invokeAsync(e)??Promise.resolve({success:!1,message:"Photon AI is not enabled on this grid."})}beginDetailCollapse(e){this.detailRowRenderer?.beginCollapse(e)}scrollToRow(e){let t=this.store.get("allRows");this.scrollController.scrollToRow(e,t)}scrollToTop(){this.scrollController.scrollToTop()}canScrollUp(){return this.scrollController.canScrollUp()}canScrollDown(){return this.scrollController.canScrollDown()}scrollToCell(e,t){let o=this.store.get("visibleRows"),r=this.store.get("columns").filter(f=>f.visible!==!1),n=o[e];if(!n)return;let i=t>=0?r[t]:null;if(n.nodeId!==this.stickyNodeId){let f=n.height??this.options.rowHeight??48,C=this.scrollController.getScrollTop(),b=this.scrollController.getViewportHeight();n.top<C?this.scrollController.scrollToY(n.top):n.top+f>C+b&&this.scrollController.scrollToY(n.top+f-b)}if(!i||i.pinned==="left"||i.pinned==="right")return;let s=r.filter(f=>f.pinned==="left"),l=r.filter(f=>f.pinned!=="left"&&f.pinned!=="right"),a=t-s.length;if(a<0||a>=l.length)return;let h=(this.store.get("groupedColumnIds").length>0?ce:0)+this.colStyles.getTotalWidth(l.slice(0,a).map(f=>f.colId)),u=this.colStyles.getWidth(l[a].colId),g=this.scrollController.getScrollLeft(),m=this.scrollController.getCenterViewportWidth();h<g?this.scrollController.scrollToX(h):h+u>g+m&&this.scrollController.scrollToX(h+u-m)}getCellRect(e,t){for(let o of[this.leftBodyContentEl,this.centerBodyContentEl,this.rightBodyContentEl]){if(!o)continue;let r=o.querySelector(`[data-row-index="${e}"][data-col-index="${t}"]`);if(r)return r.getBoundingClientRect()}return null}ensureRowVisible(e,t){let r=this.store.get("visibleRows")[e];if(!r)return;let n=r.height??this.options.rowHeight??48,i=this.scrollController.getScrollTop(),s=this.scrollController.getViewportHeight(),l;switch(t){case"top":l=r.top;break;case"bottom":l=r.top+n-s;break;case"middle":l=r.top-(s-n)/2;break;default:if(r.top<i)l=r.top;else if(r.top+n>i+s)l=r.top+n-s;else return}this.scrollController.scrollToY(Math.max(0,l))}ensureColumnVisible(e){let t=this.store.get("columns").filter(h=>h.visible!==!1),o=t.find(h=>h.colId===e);if(!o||o.pinned==="left"||o.pinned==="right")return;let r=t.filter(h=>h.pinned!=="left"&&h.pinned!=="right"),n=r.findIndex(h=>h.colId===e);if(n<0)return;let l=(this.store.get("groupedColumnIds").length>0?ce:0)+this.colStyles.getTotalWidth(r.slice(0,n).map(h=>h.colId)),a=this.colStyles.getWidth(e),c=this.scrollController.getScrollLeft(),p=this.scrollController.getCenterViewportWidth();l<c?this.scrollController.scrollToX(l):l+a>c+p&&this.scrollController.scrollToX(l+a-p)}enterFullScreen(){this.wrapperEl&&(this.wrapperEl.requestFullscreen?.(),this.wrapperEl.classList.add("pg-grid--fullscreen"),this.store.set("fullScreen",!0))}exitFullScreen(){document.fullscreenElement===this.wrapperEl&&document.exitFullscreen?.(),this.wrapperEl?.classList.remove("pg-grid--fullscreen"),this.store.set("fullScreen",!1)}destroy(){this.rafId!==null&&(cancelAnimationFrame(this.rafId),this.rafId=null);for(let e of this.unsubscribers)e();this.unsubscribers=[],this.headerRenderer.destroy(),this.columnChooser?.destroy(),this.bodyRenderer.destroy(),this.footerRenderer.destroy(),this.overlayRenderer.destroy(),this.detailRowRenderer?.destroy(),this.photonAIPanel?.destroy(),this.tooltipController.destroy(),this.scrollController.destroy(),this.groupDropZone?.destroy(),this.rowDragRenderer?.destroy(),this.groupDragHandler?.destroy(),this.rowPositionSheet.destroy(),this.rowAnimator.destroy(),this.colStyles.destroy(),this.autoScroller?.stop(),this.autoScroller=null,this.wrapperEl?.remove(),this.wrapperEl=null}buildLayout(){this.wrapperEl=y("pg-grid"),this.wrapperEl.setAttribute("role","grid");let e=this.generateId();this.wrapperEl.setAttribute("data-photon-grid-id",e),this.colStyles.setScopeId(e),this.masterDetailEnabledAtConstruction&&this.wrapperEl.classList.add("pg-grid--has-master-detail"),this.options.showVerticalBorders||this.wrapperEl.classList.add("pg-grid--no-v-borders"),this.options.rowHeightMode==="auto"&&this.wrapperEl.classList.add("pg-grid--auto-row-height"),this.containerEl.appendChild(this.wrapperEl),this.options.headerRowHeight&&this.wrapperEl.style.setProperty("--pg-header-row-height",`${this.options.headerRowHeight}px`),this.options.filterRowHeight&&this.wrapperEl.style.setProperty("--pg-filter-row-height",`${this.options.filterRowHeight}px`);let t=y("pg-grid-outer");this.wrapperEl.appendChild(t);let o=y("pg-grid-main");t.appendChild(o),this.groupDropZone&&this.groupDropZone.mount(t,o);let r=y("pg-grid__header");o.appendChild(r);let n=y("pg-panel pg-panel--left"),i=y("pg-panel__header");n.appendChild(i),r.appendChild(n),this.leftHeaderPanelEl=i;let s=y("pg-panel pg-panel--center"),l=y("pg-panel__header"),a=y("pg-panel__header-inner");l.appendChild(a),s.appendChild(l),r.appendChild(s),this.centerHeaderInnerEl=a;let c=y("pg-panel pg-panel--right"),p=y("pg-panel__header");c.appendChild(p),r.appendChild(c),this.rightHeaderPanelEl=p;let h=y("pg-header-vscroll-spacer");r.appendChild(h);let u=y("pg-grid__body");o.appendChild(u),this.bodyWrapEl=u;let g=y("pg-panel pg-panel--left"),m=y("pg-panel__body"),f=y("pg-panel__content");m.appendChild(f),g.appendChild(m),u.appendChild(g),this.leftBodyPanelEl=g,this.leftBodyContentEl=f;let C=y("pg-panel pg-panel--center"),b=y("pg-panel__body"),v=y("pg-panel__content");b.appendChild(v),C.appendChild(b),u.appendChild(C),this.centerBodyEl=b,this.centerBodyContentEl=v;let w=y("pg-panel pg-panel--right"),E=y("pg-panel__body"),R=y("pg-panel__content");E.appendChild(R),w.appendChild(E),u.appendChild(w),this.rightBodyPanelEl=w,this.rightBodyContentEl=R;let S=y("pg-scrollbar-v-native"),I=y("pg-scrollbar-v-spacer");S.appendChild(I),u.appendChild(S);let T=S.offsetWidth;this.wrapperEl.style.setProperty("--pg-scrollbar-v-width",`${T}px`);let M=y("pg-scrollbar-h-row"),L=y("pg-scrollbar-h-spacer pg-scrollbar-h-spacer--left"),_=y("pg-scrollbar-h-native"),V=y("pg-scrollbar-h-content");_.appendChild(V);let z=y("pg-scrollbar-h-spacer pg-scrollbar-h-spacer--right"),F=y("pg-scrollbar-h-spacer pg-scrollbar-h-spacer--vscroll");M.appendChild(L),M.appendChild(_),M.appendChild(z),M.appendChild(F),o.appendChild(M),this.options.showFooter!==!1&&this.options.pagination?.enabled&&(this.footerContainerEl=y("pg-grid__footer"),this.wrapperEl.appendChild(this.footerContainerEl)),this.scrollController.mount(this.wrapperEl,u,b,S,I,_,V,M),this.scrollController.setGestureGuard(()=>this.headerRenderer.isBusy||(this.groupDragHandler?.isDragging??!1)||(this.displayGroupEngine?.isDraggingGroup??!1)),this.scrollController.onScrollY(()=>this.scheduleRender()),this.scrollController.onScrollX(()=>this.scheduleRender()),this.headerRenderer.setScrollCallback(D=>this.scrollController.scrollToX(this.scrollController.getScrollLeft()+D),D=>D<0?this.scrollController.canScrollLeft():this.scrollController.canScrollRight()),this.headerRenderer.setResizeCallback(()=>this.scheduleRender()),this.overlayRenderer.mount(u),this.detailRowRenderer&&this.detailRowRenderer.mount(u),(this.masterDetailEnabledAtConstruction||this.treeDataEnabledAtConstruction)&&this.buildStickyLayer(u),this.photonAIPanel&&this.photonAIPanel.mount(u,this.options.photonAI),this.tooltipController.mount(u),this.cellSelectionEngine.attach(v),this.bodyRenderer.setPanels(f,v,R);let K=[f,v,R];this.leftStickyRowEl&&K.push(this.leftStickyRowEl),this.centerStickyRowEl&&K.push(this.centerStickyRowEl),this.rightStickyRowEl&&K.push(this.rightStickyRowEl),this.cellSelectionEngine.setBodyPanels(K),this.cellSelectionEngine.setScrollToCellCallback((D,H)=>this.scrollToCell(D,H)),this.cellSelectionEngine.setGetViewportRowCountCallback(()=>{let D=this.scrollController.getViewportHeight(),H=this.options.rowHeight??48;return Math.max(1,Math.floor(D/H))}),this.cellSelectionEngine.setDataChangedCallback(D=>{D&&D.size>0?this.invalidateBodyRowsByIds(D):this.invalidateBodyRows()}),this.headerRenderer.setOpenFilterPanelCallback((D,H)=>this.openFilterPanel(D,H)),this.columnChooser=new Je(this.columnModel,this.iconRenderer),this.headerRenderer.setColumnChooserCallback(()=>{this.columnChooser?.open(this.options.columns??[])}),this.headerRenderer.setColumnDataRefreshCallback(()=>this.filterRefreshFn?.()),this.autoScroller=new Jt(()=>this.bodyWrapEl?.getBoundingClientRect()??null,D=>this.scrollController.scrollToY(this.scrollController.getScrollTop()+D),D=>this.scrollController.scrollToX(this.scrollController.getScrollLeft()+D),(D,H)=>{if(this.cellSelectionEngine.isSelecting){let Z=document.elementFromPoint(D,H)?.closest("[data-row-index][data-col-index]");if(!Z||!Z.hasAttribute("data-col-id"))return;let pt=Number(Z.getAttribute("data-row-index")),ht=Number(Z.getAttribute("data-col-index"));!isNaN(pt)&&!isNaN(ht)&&this.cellSelectionEngine.extendSelection(pt,ht)}else this.cellSelectionEngine.updateFillPosition(D,H)}),this.cellSelectionEngine.setFillDragScrollCallback((D,H)=>this.autoScroller.updateMouse(D,H)),this.cellSelectionEngine.setFillDragEndCallback(()=>this.autoScroller?.stop()),this.cellSelectionEngine.setDragViewportRectCallback(()=>this.bodyWrapEl?.getBoundingClientRect()??null),u.addEventListener("pointermove",D=>{if(!this.cellSelectionEngine.isSelecting||J(D))return;if(D.buttons===0){this.cellSelectionEngine.endSelection(),this.autoScroller?.stop();return}this.autoScroller?.updateMouse(D.clientX,D.clientY);let H=D.target.closest("[data-row-index][data-col-index]");if(!H||!H.hasAttribute("data-col-id"))return;let te=Number(H.getAttribute("data-row-index")),Z=Number(H.getAttribute("data-col-index"));!isNaN(te)&&!isNaN(Z)&&this.cellSelectionEngine.extendSelection(te,Z)}),u.addEventListener("pointerup",()=>{this.cellSelectionEngine.endSelection(),this.autoScroller?.stop()});let ie=()=>{this.cellSelectionEngine.isSelecting&&this.cellSelectionEngine.endSelection(),this.autoScroller?.stop()};document.addEventListener("pointerup",ie),this.unsubscribers.push(()=>document.removeEventListener("pointerup",ie))}buildStickyLayer(e){let t=y("pg-sticky-layer");this.leftStickyRowEl=y("pg-sticky-layer__left"),t.appendChild(this.leftStickyRowEl);let o=y("pg-sticky-layer__center");this.centerStickyRowEl=y("pg-sticky-layer__center-inner"),o.appendChild(this.centerStickyRowEl),t.appendChild(o),this.rightStickyRowEl=y("pg-sticky-layer__right"),t.appendChild(this.rightStickyRowEl),e.appendChild(t),this.bodyRenderer.setStickyContainers(this.leftStickyRowEl,this.centerStickyRowEl,this.rightStickyRowEl)}performRender(){let e=this.store.get("visibleRows"),t=this.store.get("columns"),o=this.store.get("groupedColumnIds"),r=this.store.get("loading"),n=t.filter(k=>k.visible!==!1),i=n.filter(k=>k.pinned==="left"),s=n.filter(k=>k.pinned!=="left"&&k.pinned!=="right"),l=n.filter(k=>k.pinned==="right"),a=this.options.rowHeight??48,c=this.wrapperEl,p=t!==this._lastColumnsRef,h=o!==this._lastGroupedIdsRef,u=o.length>0,g=u?t.find(k=>k.colId===o[o.length-1])??null:null;if(p||h){this._lastColumnsRef=t,this._lastGroupedIdsRef=o,this.colStyles.initFromColumns(n);let k=this.options.showCheckboxes?Sn:0,G=this.options.showSerialNumber?In:0,O=this.colStyles.getTotalWidth(i.map(U=>U.colId)),A=this.colStyles.getTotalWidth(l.map(U=>U.colId)),W=k>0||G>0||i.length>0,X=l.length>0;c.style.setProperty("--pg-left-panel-width",W?`${k+G+O}px`:"0px"),c.style.setProperty("--pg-right-panel-width",X?`${A+2}px`:"0px"),this.leftBodyPanelEl&&(this.leftBodyPanelEl.style.setProperty("display",W?"":"none"),this.leftHeaderPanelEl?.parentElement&&this.leftHeaderPanelEl.parentElement.style.setProperty("display",W?"":"none")),this.rightBodyPanelEl&&(this.rightBodyPanelEl.style.setProperty("display",X?"":"none"),this.rightHeaderPanelEl?.parentElement&&this.rightHeaderPanelEl.parentElement.style.setProperty("display",X?"":"none"));let se=s.map(U=>U.colId);if(this.colStyles.hasFlex(se)){let U=this.centerBodyEl?.clientWidth??0;U>0&&(this.colStyles.resolveFlex(se,U),this._lastFlexResolvedWidth=U)}let Se=this.colStyles.getTotalWidth(se)+(u?ce:0);this._cachedCenterW=Se,c.style.setProperty("--pg-center-content-width",`${Se}px`)}else if(this.colStyles.hasFlex(s.map(k=>k.colId))){let k=s.map(O=>O.colId),G=this.centerBodyEl?.clientWidth??0;if(G>0&&Math.abs(G-this._lastFlexResolvedWidth)>1){this.colStyles.resolveFlex(k,G),this._lastFlexResolvedWidth=G;let O=this.colStyles.getTotalWidth(k)+(u?ce:0);this._cachedCenterW=O,c.style.setProperty("--pg-center-content-width",`${O}px`)}}if(e!==this._lastRowsRef){this._lastRowsRef=e;let k=0;for(let G of e)k+=G.height??a;this._cachedTotalHeight=k,c.style.setProperty("--pg-content-height",`${k}px`),this.scrollController.updateSizes(k,this._cachedCenterW)}else if(p||h)this.scrollController.updateSizes(this._cachedTotalHeight,this._cachedCenterW);else if(this.headerRenderer.isResizingColumn){let k=this.options.showCheckboxes?Sn:0,G=this.options.showSerialNumber?In:0,O=this.colStyles.getTotalWidth(i.map(U=>U.colId)),A=this.colStyles.getTotalWidth(l.map(U=>U.colId)),W=k>0||G>0||i.length>0,X=l.length>0;c.style.setProperty("--pg-left-panel-width",W?`${k+G+O}px`:"0px"),c.style.setProperty("--pg-right-panel-width",X?`${A+2}px`:"0px");let se=s.map(U=>U.colId),Se=this.colStyles.getTotalWidth(se)+(u?ce:0);this._cachedCenterW=Se,c.style.setProperty("--pg-center-content-width",`${Se}px`),this.scrollController.updateSizes(this._cachedTotalHeight,Se)}if(r){this.overlayRenderer.showLoading(this.options.loadingOverlayText);return}this.overlayRenderer.hideLoading(),e.length===0?this.overlayRenderer.showNoRows(this.options.noRowsOverlayHtml,this.options.noRowsOverlayText):this.overlayRenderer.hideNoRows();let f=this.scrollController.getScrollLeft(),C=this.centerBodyEl?.clientWidth??800,b=u?ce:0,v=s.length,w=0;for(let k=0;k<s.length;k++){let G=this.colStyles.getWidth(s[k].colId),O=b;b+G>f&&v>k&&(v=k),O<f+C&&(w=k+1),b+=G}v===s.length&&(v=0,w=0);let E=this.headerRenderer.isDraggingCol,R=this.displayGroupEngine?.isDraggingGroup??!1,S=E||R?s.length:ls,I=Math.max(0,v-S),T=Math.min(s.length,w+S),M=this.colStyles.getTotalWidth(s.slice(0,I).map(k=>k.colId)),L=this.colStyles.getTotalWidth(s.slice(T).map(k=>k.colId)),_=s.slice(I,T),V={showCheckboxes:this.options.showCheckboxes,showSerialNumber:this.options.showSerialNumber,showColumnMenu:this.options.showColumnMenu!==!1,showFilterRow:this.options.showFilterRow,headerRowHeight:this.options.headerRowHeight,filterRowHeight:this.options.filterRowHeight,hasGroupedColumns:u,autoGroupColWidth:ce,filterIconDisplay:this.options.headerIcons?.filter,menuIconDisplay:this.options.headerIcons?.menu};!this.headerRendered&&this.leftHeaderPanelEl&&this.centerHeaderInnerEl&&this.rightHeaderPanelEl&&(this.headerRenderer.renderInPanels(this.leftHeaderPanelEl,this.centerHeaderInnerEl,this.rightHeaderPanelEl,n,V),this.headerRendered=!0),(I!==this.lastCenterColStart||T!==this.lastCenterColEnd)&&(this.headerRenderer.updateCenterVisibleCols(_,M,L,V),this.lastCenterColStart=I,this.lastCenterColEnd=T);let z=this.scrollController.getScrollTop(),F=this.centerBodyEl?.clientHeight??400,K=this.options.virtualScroll?.rowBuffer??ss,ie=this.rowAnimator.hasPending()?Math.ceil(F/a):0,D=this.options.rowHeightMode==="auto",H,te;if(D){let k=(K+ie)*a,G=z-k,O=z+F+k;H=0,te=e.length;for(let A=0;A<e.length;A++)if(e[A].top+(e[A].height??a)>=G){H=A;break}for(let A=H;A<e.length;A++)if(e[A].top>O){te=A;break}}else H=Math.max(0,Math.floor(z/a)-K-ie),te=Math.min(e.length,Math.ceil((z+F)/a)+K+ie);let Z=null,pt=0,ht=[];if(this.masterDetailEnabledAtConstruction){let k=this.stickyRowTracker.compute(e,z,a,H);Z=k.nodeId,pt=k.offsetPx,H=k.minStart}else if(this.treeExpansionService){let k=this.treeStickyRowTracker.compute(e,z,a,H);ht=k.entries,H=k.minStart}this.stickyNodeId=Z,this.rowPositionSheet.update(e.slice(H,te).map(k=>({nodeId:k.nodeId,top:k.top,height:D?a:k.height??a})),D);let Re=e.slice(H,te),ei=this.masterDetailEngine?.isEnabled()?{toggleColumnId:this.masterDetailEngine.getConfig()?.toggleColumnId??n[0]?.colId??"",isExpandedFn:k=>this.masterDetailEngine.isExpanded(k),hasDetailFn:k=>this.masterDetailEngine.hasDetail(k)}:void 0,ti=this.treeExpansionService?{toggleColumnId:this.treeToggleColumnId??n[0]?.colId??"",isExpandedFn:k=>this.treeExpansionService.isExpanded(k)}:void 0;if(this.headerRenderer.isResizingColumn?this.bodyRenderer.syncCenterRange(I,I+_.length):this.bodyRenderer.renderRows(Re,i,_,l,{showCheckboxes:this.options.showCheckboxes,showSerialNumber:this.options.showSerialNumber,showVerticalBorders:this.options.showVerticalBorders,rowShading:this.options.rowShading,rowHeight:this.options.rowHeight,dateFormat:this.options.dateFormat,timeZone:this.options.timeZone,currencySymbol:this.options.currencySymbol,locale:this.options.locale,api:null,showGroupsColumn:u,autoGroupColWidth:ce,leafGroupColDef:g,allLeafColumns:t,centerColStart:I,centerLeftSpacerW:M,centerRightSpacerW:L,totalCenterCols:s.length,masterDetail:ei,treeData:ti}),this.detailRowRenderer){let k=new Set(e.filter(O=>O.type==="detail").map(O=>O.nodeId)),G=Re.filter(O=>O.type==="detail");this.detailRowRenderer.sync(G,k)}if(this.masterDetailEnabledAtConstruction?this.bodyRenderer.setStickyRows(Z?[{nodeId:Z,top:pt}]:[]):this.treeExpansionService&&this.bodyRenderer.setStickyRows(ht),this.rowAnimator.hasPending()){let k=[this.leftBodyContentEl,this.centerBodyContentEl,this.rightBodyContentEl].filter(Boolean);this.rowAnimator.animate(k,Re,F)}if(D){let k=new Map(Re.map(A=>[A.nodeId,A])),G=new Map;for(let A of[this.leftBodyContentEl,this.centerBodyContentEl,this.rightBodyContentEl])if(A)for(let W of A.querySelectorAll("[data-node-id]")){let X=W.getAttribute("data-node-id");if(!X)continue;let se=W.offsetHeight;se>0&&G.set(X,Math.max(G.get(X)??0,se))}let O=!1;for(let[A,W]of G){let X=k.get(A);X&&W!==X.height&&(X.height=W,O=!0)}if(O){let A=0;for(let W of e)W.top=A,A+=W.height??a;this.rowPositionSheet.update(Re.map(W=>({nodeId:W.nodeId,top:W.top,height:a})),!0),this._cachedTotalHeight=A,c.style.setProperty("--pg-content-height",`${A}px`),this.scrollController.updateSizes(A,this._cachedCenterW)}}this.store.set("firstRenderedRowIndex",H),this.store.set("lastRenderedRowIndex",te),this.footerContainerEl&&(this.footerContainerEl.hasChildNodes()?this.footerRenderer.updatePaginationState():this.footerRenderer.render(this.footerContainerEl,{showPagination:this.options.pagination?.enabled,showRowCount:!0,footerHeight:this.options.footerRowHeight})),(this.store.get("cellRanges").length>0||this.store.get("activeCell")!==null)&&this.cellSelectionEngine.applySelectionClasses(),this.eventBus.emit(x.ROWS_RENDERED,{renderedCount:Re.length})}subscribeToStore(){this.unsubscribers.push(this.store.watch("visibleRows",()=>this.scheduleRender()),this.store.watch("loading",()=>this.scheduleRender()),this.store.watch("columns",()=>{if(this.headerRenderer.isDraggingCol||this.displayGroupEngine?.isDraggingGroup){this.wrapperEl?.classList.add("pg-grid--drag-preview-sync"),this.lastCenterColStart=-1,this.lastCenterColEnd=-1,this.bodyRenderer.clear(),this.scheduleRender(),requestAnimationFrame(()=>{this.wrapperEl?.classList.remove("pg-grid--drag-preview-sync")});return}this.headerRendered=!1,this.lastCenterColStart=-1,this.lastCenterColEnd=-1,this.leftHeaderPanelEl&&(this.leftHeaderPanelEl.innerHTML=""),this.centerHeaderInnerEl&&(this.centerHeaderInnerEl.innerHTML=""),this.rightHeaderPanelEl&&(this.rightHeaderPanelEl.innerHTML=""),this.headerRenderer.destroy(),this.rewireGroupModelIntoHeaderRenderer(),this.bodyRenderer.clear(),this.scheduleRender()}),this.store.watch("groupedColumnIds",()=>{this.groupDropZone?.update()}),this.store.watch("filterModel",e=>{let t=new Set(Object.keys(e));this.headerRenderer.updateFilterIndicators(t)}),this.store.watch("scrollTop",()=>this.scheduleRender()),this.store.watch("selectedRowIds",e=>{let t=this.store.get("visibleRows");for(let o of t)this.bodyRenderer.updateRowSelection(o.nodeId,e.has(o.nodeId))}),this.store.watch("isAllSelected",e=>{let t=this.store.get("isIndeterminate");this.headerRenderer.updateAllChecked(e,t)}),this.store.watch("cellRanges",()=>{this.cellSelectionEngine.applySelectionClasses()}),this.store.watch("activeCell",()=>{this.cellSelectionEngine.applySelectionClasses()})),this.eventBus.on(x.ALL_ROWS_SELECTED,e=>{let t=e;t?.action==="selectAll"?this.rowSelectionEngine.selectAll(this.store.get("allRows")):t?.action==="deselectAll"&&this.rowSelectionEngine.deselectAll(this.store.get("allRows"))}),this.eventBus.on(x.CELL_CLICKED,e=>{let t=e;t.event.shiftKey?this.cellSelectionEngine.extendSelection(t.rowIndex,t.colIndex):t.event.ctrlKey||t.event.metaKey?this.cellSelectionEngine.addRangeCell(t.rowIndex,t.colIndex):this.cellSelectionEngine.startSelection(t.rowIndex,t.colIndex)}),this.eventBus.on(x.CELL_CONTEXT_MENU,e=>{let t=e;this.cellSelectionEngine.isCellSelected(t.rowIndex,t.colIndex)||this.cellSelectionEngine.startSelection(t.rowIndex,t.colIndex),this.cellSelectionEngine.showContextMenu(t.x,t.y)})}handleGroupToggle(e){if(this.displayGroupEngine){this.displayGroupEngine.toggleGroup(e);return}if(!this.columnGroupModel)return;let t=this.columnGroupModel.getGroup(e);if(!t)return;let o=t.collapsed;this.columnGroupModel.toggleGroup(e);let r=!o,n=this.columnGroupModel.getLeavesInGroup(e);for(let i=0;i<n.length;i++){let s=!r||i===0;this.columnModel.setColumnVisible(n[i].colId,s)}}handleGroupResize(e,t){if(this.displayGroupEngine){this.displayGroupEngine.resizeGroup(e,t),this.scheduleRender();return}if(!this.columnGroupModel||!this.columnGroupModel.getGroup(e))return;let r=this.columnGroupModel.computeGroupWidth(e,this.colStyles);if(r<=0||Math.abs(t-r)<1)return;let n=t/r,i=this.columnGroupModel.getLeavesInGroup(e);for(let s of i){let l=this.colStyles.getWidth(s.colId),a=Math.max(s.minWidth??40,Math.round(l*n));this.colStyles.setWidth(s.colId,a),this.columnModel.setColumnWidth(s.colId,a,!1)}this.scheduleRender()}rewireGroupModelIntoHeaderRenderer(){if(this.displayGroupEngine){this.headerRenderer.setDisplayGroupEngine(this.displayGroupEngine),this.headerRenderer.setGroupToggleCallback(e=>this.handleGroupToggle(e)),this.headerRenderer.setGroupResizeCallback((e,t)=>this.handleGroupResize(e,t));return}!this.columnGroupModel||!this.groupHeaderBuilder||(this.headerRenderer.setColumnGroupModel(this.columnGroupModel,this.groupHeaderBuilder),this.headerRenderer.setGroupToggleCallback(e=>this.handleGroupToggle(e)),this.headerRenderer.setGroupResizeCallback((e,t)=>this.handleGroupResize(e,t)),this.groupDragHandler&&(this.groupHeaderBuilder.setDragConfig(this.groupDragHandler,()=>this.wrapperEl),this.headerRenderer.setGroupDragHandler(this.groupDragHandler)))}rebuildHeader(){this.headerRendered=!1,this.lastCenterColStart=-1,this.lastCenterColEnd=-1,this.leftHeaderPanelEl&&(this.leftHeaderPanelEl.innerHTML=""),this.centerHeaderInnerEl&&(this.centerHeaderInnerEl.innerHTML=""),this.rightHeaderPanelEl&&(this.rightHeaderPanelEl.innerHTML=""),this.headerRenderer.destroy(),this.rewireGroupModelIntoHeaderRenderer(),this.scheduleRender()}generateId(){return`pg_${Math.random().toString(36).slice(2,9)}`}};var it=class{constructor(e,t){this.columnModel=e;this.groupModel=t}getState(){return{groups:this.groupModel.serialize(),columnStates:this.columnModel.getColumnStates()}}applyState(e){e.groups!==void 0&&this.groupModel.deserialize(e.groups),e.columnStates!==void 0&&this.columnModel.applyColumnStates(e.columnStates)}diffState(e,t){let o=this.colStatesWidthChanged(e.columnStates,t.columnStates),r=this.colStatesVisibilityChanged(e.columnStates,t.columnStates),n=this.colStatesPinChanged(e.columnStates,t.columnStates),i=this.colStatesOrderChanged(e.columnStates,t.columnStates),s=this.groupStatesChanged(e.groups,t.groups);return{widthChanged:o,visibilityChanged:r,pinChanged:n,orderChanged:i,groupStateChanged:s,anyChanged:o||r||n||i||s}}getGroupStates(){return this.groupModel.serialize()}applyGroupStates(e){this.groupModel.deserialize(e)}getColumnStates(){return this.columnModel.getColumnStates()}applyColumnStates(e){this.columnModel.applyColumnStates(e)}colStatesWidthChanged(e,t){return e.length!==t.length?!0:e.some((o,r)=>o.width!==t[r]?.width)}colStatesVisibilityChanged(e,t){return e.length!==t.length?!0:e.some((o,r)=>o.visible!==t[r]?.visible)}colStatesPinChanged(e,t){return e.length!==t.length?!0:e.some((o,r)=>o.pinned!==t[r]?.pinned)}colStatesOrderChanged(e,t){return e.length!==t.length?!0:e.some((o,r)=>o.colId!==t[r]?.colId)}groupStatesChanged(e,t){if(e.length!==t.length)return!0;let o=new Map(t.map(r=>[r.groupId,r.collapsed]));return e.some(r=>{let n=o.get(r.groupId);return n===void 0||n!==r.collapsed})}};var st=class{constructor(e){this.ctx=e;this._columnGroupModel=null;this._groupStateManager=null;this._pendingTransactions=[];this._txnFlushHandle=null;this.ctx.renderer.setFilterEngine(this.ctx.filterEngine),this.ctx.renderer.setFilterRefreshCallback(()=>this.refresh())}setColumnGroupModel(e){this._columnGroupModel=e,this._groupStateManager=new it(this.ctx.columnModel,e)}setData(e){let t=this.ctx.options.rowHeight??48;this.ctx.rowModel.setRowData(e,t),this.ctx.undoRedoEngine.clear(),this.refresh()}appendData(e){this.ctx.rowModel.appendRowData(e),this.refresh()}updateRow(e,t){this.ctx.rowModel.updateRow(e,t),this.refresh()}removeRows(e){this.ctx.rowModel.removeRows(e),this.refresh()}getRowNode(e){return this.ctx.rowModel.getRowNode(e)}getRowByIndex(e){return this.ctx.rowModel.getRowByIndex(e)}getAllRows(){return this.ctx.store.get("allRows")}getVisibleRows(){return this.ctx.store.get("visibleRows")}setColumns(e){this.ctx.columnModel.initColumns(e),this.refresh()}getColumn(e){return this.ctx.columnModel.getColumn(e)}getAllColumns(){return this.ctx.columnModel.getAllColumns()}getVisibleColumns(){return this.ctx.columnModel.getVisibleColumns()}setColumnWidth(e,t){this.ctx.columnModel.setColumnWidth(e,t,!0)}setColumnVisible(e,t){this.ctx.columnModel.setColumnVisible(e,t)}setColumnPin(e,t){this.ctx.columnModel.setColumnPin(e,t)}moveColumn(e,t){this.ctx.columnModel.moveColumn(e,t)}autoSizeColumn(e){this.ctx.columnModel.autoSizeColumn(e,this.ctx.containerEl)}autoSizeAllColumns(){for(let e of this.ctx.columnModel.getVisibleColumns())this.ctx.columnModel.autoSizeColumn(e.colId,this.ctx.containerEl)}getColumnStates(){return this.ctx.columnModel.getColumnStates()}applyColumnStates(e){this.ctx.columnModel.applyColumnStates(e)}sortColumn(e,t){let o=this.ctx.columnModel.getColumn(e);o&&(this.ctx.sortEngine.sort(e,o.field,t),this.ctx.columnModel.setColumnSort(e,t),this.refresh())}clearSort(){this.ctx.sortEngine.clearSort(),this.ctx.columnModel.clearAllSort(),this.refresh()}getSortConfig(){return this.ctx.sortEngine.getSortConfig()}setFilterModel(e){this.ctx.filterEngine.setFilterModel(e),this.refresh()}setColumnFilter(e,t){this.ctx.filterEngine.setColumnFilter(e,t),this.refresh()}clearAllFilters(){this.ctx.filterEngine.clearAllFilters(),this.refresh()}setQuickFilter(e,t){let o=this.ctx.store.get("visibleRows");o.length>0&&this.ctx.renderer.captureRowAnimation(o,"filter"),this.ctx.filterEngine.setQuickFilter({term:e,fields:t}),this.refresh()}getFilterModel(){return this.ctx.filterEngine.getFilterModel()}selectRow(e){let t=this.ctx.store.get("visibleRows");this.ctx.rowSelectionEngine.selectRow(e,t)}deselectRow(e){let t=this.ctx.store.get("visibleRows");this.ctx.rowSelectionEngine.deselectRow(e,t)}selectAll(){let e=this.ctx.store.get("visibleRows");this.ctx.rowSelectionEngine.selectAll(e)}deselectAll(){let e=this.ctx.store.get("visibleRows");this.ctx.rowSelectionEngine.deselectAll(e)}getSelectedRows(){let e=this.ctx.store.get("visibleRows");return this.ctx.rowSelectionEngine.getSelectedRows(e)}getSelectedCount(){return this.ctx.rowSelectionEngine.getSelectedCount()}isRowSelected(e){return this.ctx.rowSelectionEngine.isRowSelected(e)}setCellRange(e){this.ctx.store.set("cellRanges",[e]),this.ctx.cellSelectionEngine.startSelection(e.startRowIndex,e.startColIndex),this.ctx.cellSelectionEngine.extendSelection(e.endRowIndex,e.endColIndex)}clearCellSelection(){this.ctx.cellSelectionEngine.clearSelection()}getCellRanges(){return this.ctx.store.get("cellRanges")}startCellEditing(e,t){let o=this.ctx.rowModel.getRowNode(e),r=this.ctx.columnModel.getColumn(t);if(!o||!r)return;let n=this.ctx.containerEl.querySelector(`[data-node-id="${e}"] [data-col-id="${t}"]`);n&&this.ctx.cellEditorEngine.startEditing(o,r,n)}stopEditing(e=!1){this.ctx.cellEditorEngine.stopEditing(e)}goToPage(e){this.ctx.paginationEngine.goToPage(e),this.refresh()}setPageSize(e){this.ctx.paginationEngine.setPageSize(e),this.refresh()}getCurrentPage(){return this.ctx.paginationEngine.getCurrentPage()}getTotalPages(){return this.ctx.paginationEngine.getTotalPages()}groupByColumn(e){this.ctx.groupingEngine.addGroupColumn(e),this.refresh()}removeGroupColumn(e){this.ctx.groupingEngine.removeGroupColumn(e),this.refresh()}clearGrouping(){this.ctx.groupingEngine.clearGrouping(),this.refresh()}expandGroup(e){this.ctx.groupingEngine.expandGroup(e),this.refresh()}collapseGroup(e){this.ctx.groupingEngine.collapseGroup(e),this.refresh()}expandAllGroups(){this.ctx.groupingEngine.expandAllGroups(this.ctx.store.get("visibleRows")),this.refresh()}collapseAllGroups(){this.ctx.groupingEngine.collapseAllGroups(),this.refresh()}expandTreeNode(e){let t=this.ctx.treeDataService.getNode(e);t&&(this.ctx.treeExpansionService.expand(t),this.refresh())}collapseTreeNode(e){let t=this.ctx.treeDataService.getNode(e);t&&(this.ctx.treeExpansionService.collapse(t),this.refresh())}toggleTreeNode(e){let t=this.ctx.treeDataService.getNode(e);t&&(this.ctx.treeExpansionService.toggle(t),this.refresh())}expandAllTreeNodes(){this.ctx.treeExpansionService.expandAll(this.ctx.treeDataService.getRoots()),this.refresh()}collapseAllTreeNodes(){this.ctx.treeExpansionService.collapseAll(),this.refresh()}isTreeNodeExpanded(e){return this.ctx.treeExpansionService.isExpanded(e)}getTreeNodeChildren(e){return this.ctx.treeDataService.getNode(e)?.children??[]}loadTreeNodeChildren(e){this.ctx.treeDataService.loadChildren(e)}expandDetail(e){let t=this.ctx.rowModel.getRowNode(e);t&&(this.ctx.masterDetailEngine.expand(t),this.refresh())}collapseDetail(e){let t=this.ctx.rowModel.getRowNode(e);t&&(this.ctx.masterDetailEngine.collapse(t),this.refresh())}toggleDetail(e){let t=this.ctx.rowModel.getRowNode(e);t&&(this.ctx.masterDetailEngine.toggle(t),this.refresh())}isDetailExpanded(e){return this.ctx.masterDetailEngine.isExpanded(e)}collapseAllDetails(){this.ctx.masterDetailEngine.collapseAll(this.ctx.store.get("allRows")),this.refresh()}getDetailGridApi(e){return this.ctx.renderer.getDetailGridApi(e)}submitAICommand(e){return this.ctx.renderer.submitAICommand(e)}submitAICommandAsync(e){return this.ctx.renderer.submitAICommandAsync(e)}collapseColumnGroup(e){if(!this._columnGroupModel)return;this._columnGroupModel.collapseGroup(e);let t=this._columnGroupModel.getLeavesInGroup(e);for(let o of t)this.ctx.columnModel.setColumnVisible(o.colId,!1)}expandColumnGroup(e){if(!this._columnGroupModel)return;this._columnGroupModel.expandGroup(e);let t=this._columnGroupModel.getLeavesInGroup(e);for(let o of t)this.ctx.columnModel.setColumnVisible(o.colId,!0)}toggleColumnGroup(e){if(!this._columnGroupModel)return;let t=this._columnGroupModel.getGroup(e);t&&(t.collapsed?this.expandColumnGroup(e):this.collapseColumnGroup(e))}moveColumnGroup(e,t,o){this._columnGroupModel&&(this._columnGroupModel.moveGroup(e,t,o),this.refresh())}getColumnGroupState(){return this._groupStateManager?.getState()??null}applyColumnGroupState(e){this._groupStateManager&&(this._groupStateManager.applyState(e),this.refresh())}getColumnGroupStates(){return this._groupStateManager?.getGroupStates()??[]}getColumnTree(){return this._columnGroupModel?.getRootNodes()??null}exportCsv(e){this.ctx.exportEngine.exportToCsv(this.ctx.store.get("visibleRows"),this.ctx.columnModel.getVisibleColumns(),{fileName:e??this.ctx.options.exportConfig?.fileName??"export"})}exportXlsx(e){this.ctx.exportEngine.exportToXlsx(this.ctx.store.get("visibleRows"),this.ctx.columnModel.getVisibleColumns(),{fileName:e??this.ctx.options.exportConfig?.fileName??"export"})}copySelectedRowsToClipboard(){let e=this.getSelectedRows(),t=this.ctx.columnModel.getVisibleColumns();return this.ctx.clipboardEngine.copyRowsToClipboard(e,t)}copySelectedCellsToClipboard(){let e=this.getCellRanges();if(e.length===0)return Promise.resolve();let t=this.getVisibleRows(),o=this.ctx.columnModel.getVisibleColumns();return this.ctx.clipboardEngine.copyRangesToClipboard(e,t,o,!0)}scrollToRow(e){this.ctx.renderer.scrollToRow(e)}scrollToTop(){this.ctx.renderer.scrollToTop()}canScrollUp(){return this.ctx.renderer.canScrollUp()}canScrollDown(){return this.ctx.renderer.canScrollDown()}setMode(e){this.ctx.themeManager.applyMode(e,this.ctx.containerEl)}setVariant(e){this.ctx.themeManager.applyVariant(e,this.ctx.containerEl)}setTheme(e){this.ctx.themeManager.applyTheme(e,this.ctx.containerEl)}toggleDarkMode(){this.ctx.themeManager.toggleDarkMode()}setRowAnimation(e){this.ctx.renderer.setRowAnimationEnabled(e)}enterFullScreen(){this.ctx.renderer.enterFullScreen()}exitFullScreen(){this.ctx.renderer.exitFullScreen()}createChart(e,t){let o=this.ctx.store.get("visibleRows"),r=this.ctx.columnModel.getVisibleColumns();return this.ctx.chartEngine.createChart(e,t,o,r)}destroyChart(e){this.ctx.chartEngine.destroyChart(e)}exportChartAsImage(e,t="png"){return this.ctx.chartEngine.exportChartAsImage(e,t)}createRangeChart(e){return this.ctx.rangeChartService?.createRangeChart(e)??""}getChartModels(){return this.ctx.rangeChartService?.getChartModels()??[]}updateChart(e){this.ctx.rangeChartService?.updateChart(e)}restoreChart(e){return this.ctx.rangeChartService?.restoreChart(e)??""}getChartImageDataURL(e,t="png"){return this.ctx.rangeChartService?.getChartImageDataURL(e,t)??null}downloadChart(e,t="png"){this.ctx.rangeChartService?.downloadChart(e,t)}getGridState(){return{columnStates:this.ctx.columnModel.getColumnStates(),sortConfig:this.ctx.sortEngine.getSortConfig(),filterModel:this.ctx.filterEngine.getFilterModel(),paginationPage:this.ctx.paginationEngine.getCurrentPage(),paginationPageSize:this.ctx.paginationEngine.getPageSize(),groupedColumns:this.ctx.store.get("groupedColumnIds"),expandedGroups:Array.from(this.ctx.store.get("expandedGroupKeys")),expandedTreeNodeIds:Array.from(this.ctx.store.get("expandedTreeNodeIds")),selectedRowIds:Array.from(this.ctx.store.get("selectedRowIds")),chartModels:this.ctx.rangeChartService?.getChartModels()??[]}}applyGridState(e){if(e.columnStates&&this.applyColumnStates(e.columnStates),e.sortConfig?.length&&this.ctx.sortEngine.multiSort(e.sortConfig),e.filterModel&&this.ctx.filterEngine.setFilterModel(e.filterModel),e.paginationPage&&this.ctx.paginationEngine.goToPage(e.paginationPage),e.paginationPageSize&&this.ctx.paginationEngine.setPageSize(e.paginationPageSize),e.expandedTreeNodeIds?.length&&this.ctx.store.set("expandedTreeNodeIds",new Set(e.expandedTreeNodeIds)),this.refresh(),e.chartModels){this.ctx.rangeChartService?.disposeAll();for(let t of e.chartModels)this.ctx.rangeChartService?.restoreChart(t)}}on(e,t){return this.ctx.eventBus.on(e,t)}off(e,t){this.ctx.eventBus.off(e,t)}getSummaryRow(){let e=this.ctx.store.get("visibleRows"),t=this.ctx.columnModel.getVisibleColumns();return this.ctx.summaryEngine.compute(e,t)}refresh(){this.applyPipeline(),this.ctx.renderer.scheduleRender()}forceRefresh(){this.applyPipeline(),this.ctx.renderer.forceRender()}destroy(){this._txnFlushHandle!==null&&(cancelAnimationFrame(this._txnFlushHandle),this._txnFlushHandle=null),this.ctx.renderer.destroy(),this.ctx.chartEngine.destroyAll(),this.ctx.cellSelectionEngine.detach(),this.ctx.dragDropEngine.destroy(),this.ctx.themeManager.destroy(),this.ctx.eventBus.clear(),this.ctx.store.destroy()}applyPipeline(){let e=this.ctx.store.get("allRows"),t=this.ctx.columnModel.getAllColumns();if(this.ctx.treeDataService.isEnabled())e=this.ctx.treeDataService.getFlatVisibleRows(e,t);else{e=this.ctx.filterEngine.applyFilters(e,t),e=this.ctx.sortEngine.applySorting(e,t);let o=this.ctx.store.get("groupedColumnIds");o.length>0&&(e=this.ctx.groupingEngine.groupByColumns(o,t,e))}e=this.ctx.paginationEngine.applyPagination(e),e=this.ctx.masterDetailEngine.injectDetailRows(e),this.ctx.rowModel.setVisibleRows(e),this.ctx.treeDataService.isEnabled()&&this.ctx.treeDataService.annotateSubtreeExtents(e),this.ctx.store.set("visibleRows",e)}undo(){this.ctx.undoRedoEngine.undo(),this.refresh()}redo(){this.ctx.undoRedoEngine.redo(),this.refresh()}getUndoSize(){return this.ctx.undoRedoEngine.getUndoSize()}getRedoSize(){return this.ctx.undoRedoEngine.getRedoSize()}applyTransaction(e){let t=this.ctx.rowModel.applyTransaction(e);return this.refresh(),[...t.add,...t.update]}applyTransactionAsync(e){this._pendingTransactions.push(e),this._txnFlushHandle===null&&(this._txnFlushHandle=requestAnimationFrame(()=>{this._txnFlushHandle=null;let t=this.mergeTransactions(this._pendingTransactions);this._pendingTransactions=[],this.ctx.rowModel.applyTransaction(t),this.refresh()}))}mergeTransactions(e){let t=[],o=[],r=[];for(let n of e)n.add&&t.push(...n.add),n.update&&o.push(...n.update),n.remove&&r.push(...n.remove);return{add:t,update:o,remove:r}}forEachNode(e){let t=this.getAllRows();for(let o=0;o<t.length;o++)e(t[o],o)}forEachNodeAfterFilter(e){let t=this.ctx.columnModel.getAllColumns(),o=this.ctx.filterEngine.applyFilters(this.getAllRows(),t);for(let r=0;r<o.length;r++)e(o[r],r)}forEachNodeAfterFilterAndSort(e){let t=this.ctx.columnModel.getAllColumns(),o=this.ctx.filterEngine.applyFilters(this.getAllRows(),t);o=this.ctx.sortEngine.applySorting(o,t);for(let r=0;r<o.length;r++)e(o[r],r)}getDisplayedRowCount(){return this.getVisibleRows().length}refreshCells(e={}){let{rowNodes:t,force:o}=e;if(o||!t||t.length===0){this.ctx.renderer.invalidateBodyRows();return}this.ctx.renderer.invalidateBodyRowsByIds(new Set(t.map(r=>r.nodeId)))}flashCells(e={}){let{rowNodes:t,colIds:o,flashDelay:r=700}=e,n=t??this.getVisibleRows();if(n.length===0)return;let i=new Set(n.map(a=>a.nodeId)),s=o&&o.length>0?new Set(o):null,l=[];for(let a of this.ctx.containerEl.querySelectorAll("[data-node-id]"))if(i.has(a.getAttribute("data-node-id")??""))for(let c of a.querySelectorAll("[data-col-id]")){let p=c.getAttribute("data-col-id");s&&(!p||!s.has(p))||l.push(c)}for(let a of l)a.classList.remove("pg-cell--flash"),a.offsetWidth,a.classList.add("pg-cell--flash");l.length>0&&setTimeout(()=>{for(let a of l)a.classList.remove("pg-cell--flash")},r)}sizeColumnsToFit(e){let t=e??this.ctx.containerEl.clientWidth;this.ctx.columnModel.sizeColumnsToFit(t),this.refresh()}resetColumnState(){this.ctx.columnModel.resetColumnState(),this.refresh()}setColumnsVisible(e,t){for(let o of e)this.ctx.columnModel.setColumnVisible(o,t);this.refresh()}moveColumns(e,t){this.ctx.columnModel.moveColumns(e,t),this.refresh()}multiSort(e){this.ctx.sortEngine.multiSort(e),this.refresh()}setFocusedCell(e,t){let o=this.ctx.columnModel.getVisibleColumns().findIndex(r=>r.colId===t);o<0||this.ctx.cellSelectionEngine.startSelection(e,o)}getFocusedCell(){let e=this.ctx.store.get("activeCell");if(!e)return null;let t=this.ctx.columnModel.getVisibleColumns()[e.colIndex];return t?{rowIndex:e.rowIndex,colId:t.colId}:null}ensureNodeVisible(e,t){let o=this.getVisibleRows().findIndex(r=>r.nodeId===e);o<0||this.ctx.renderer.ensureRowVisible(o,t)}ensureColumnVisible(e){this.ctx.renderer.ensureColumnVisible(e)}isAnyFilterActive(){return this.ctx.filterEngine.hasActiveFilters()}isColumnFilterActive(e){return this.ctx.filterEngine.isColumnFiltered(e)}selectRows(e){this.ctx.rowSelectionEngine.selectRows(e,this.getVisibleRows())}deselectRows(e){this.ctx.rowSelectionEngine.deselectRows(e,this.getVisibleRows())}selectRowsByFilter(e){let t=this.getAllRows().filter(o=>o.type==="data"&&e(o)).map(o=>o.nodeId);this.ctx.rowSelectionEngine.selectRows(t,this.getVisibleRows())}setRowGroupColumns(e){this.ctx.groupingEngine.reorderGroupColumns(e),this.refresh()}isGroupExpanded(e){return this.ctx.groupingEngine.isGroupExpanded(e)}resetGridState(){this.ctx.sortEngine.clearSort(),this.ctx.columnModel.clearAllSort(),this.ctx.filterEngine.clearAllFilters(),this.ctx.groupingEngine.clearGrouping(),this.ctx.rowSelectionEngine.deselectAll(this.getVisibleRows()),this.ctx.cellSelectionEngine.clearSelection(),this.ctx.paginationEngine.goToPage(1),this.ctx.columnModel.resetColumnState(),this.refresh()}};var lt=class{constructor(e=200){this.undoStack=[];this.redoStack=[];this.maxStackSize=e}get canUndo(){return this.undoStack.length>0}get canRedo(){return this.redoStack.length>0}getUndoSize(){return this.undoStack.length}getRedoSize(){return this.redoStack.length}record(e){let t=e.changes.filter(n=>!Object.is(n.oldValue,n.newValue));if(t.length===0)return;let o={type:e.type,changes:t},r=this.undoStack.length>0?this.undoStack[this.undoStack.length-1]:null;if(!(r&&this.actionsIdentical(r,o))){if(e.type==="edit"&&r?.type==="edit"&&t.length===1&&r.changes.length===1&&r.changes[0].nodeId===t[0].nodeId&&r.changes[0].field===t[0].field){r.changes[0].newValue=t[0].newValue,this.redoStack=[];return}this.undoStack.length>=this.maxStackSize&&this.undoStack.shift(),this.undoStack.push(o),this.redoStack=[]}}undo(){let e=this.undoStack.pop();return e?(this.redoStack.length>=this.maxStackSize&&this.redoStack.shift(),this.redoStack.push(e),e.changes.map(t=>({nodeId:t.nodeId,field:t.field,oldValue:t.newValue,newValue:t.oldValue}))):null}redo(){let e=this.redoStack.pop();return e?(this.undoStack.length>=this.maxStackSize&&this.undoStack.shift(),this.undoStack.push(e),e.changes):null}clear(){this.undoStack=[],this.redoStack=[]}actionsIdentical(e,t){if(e.type!==t.type||e.changes.length!==t.changes.length)return!1;for(let o=0;o<e.changes.length;o++){let r=e.changes[o],n=t.changes[o];if(r.nodeId!==n.nodeId||r.field!==n.field||!Object.is(r.oldValue,n.oldValue)||!Object.is(r.newValue,n.newValue))return!1}return!0}};var as=200,ao=class{constructor(e,t,o){this.store=e;this.eventBus=t;this.rowModel=o;this.config=null;this.detailDataCache=new Map;this.heightCache=new Map;this.pendingNodeIds=new Set;this.defaultAppliedNodeIds=new Set;this.refreshCallback=null}configure(e){this.config=e?.enabled?e:null}isEnabled(){return this.config!==null}getConfig(){return this.config}setRefreshCallback(e){this.refreshCallback=e}isExpanded(e){return this.store.get("expandedRowIds").has(e)}hasDetail(e){return this.config?.hasDetail?this.config.hasDetail(e):!0}expand(e){if(!this.config||this.isExpanded(e.nodeId))return;let t=new Set(this.store.get("expandedRowIds"));t.add(e.nodeId),this.store.set("expandedRowIds",t),this.fetchDetailDataIfNeeded(e),this.eventBus.emit(x.ROW_DETAIL_OPENED,{nodeId:e.nodeId,row:e})}collapse(e){if(!this.isExpanded(e.nodeId))return;let t=new Set(this.store.get("expandedRowIds"));t.delete(e.nodeId),this.store.set("expandedRowIds",t),this.eventBus.emit(x.ROW_DETAIL_CLOSED,{nodeId:e.nodeId,row:e})}toggle(e){this.isExpanded(e.nodeId)?this.collapse(e):this.expand(e)}collapseAll(e){for(let t of e)t.type==="data"&&this.isExpanded(t.nodeId)&&this.collapse(t)}isPending(e){return this.pendingNodeIds.has(e)}injectDetailRows(e){if(!this.config)return e;if(this.config.defaultExpanded)for(let r of e)r.type!=="data"||this.defaultAppliedNodeIds.has(r.nodeId)||(this.defaultAppliedNodeIds.add(r.nodeId),this.hasDetail(r.data)&&this.expand(r));let t=this.store.get("expandedRowIds");if(t.size===0)return e;let o=[];for(let r of e)if(o.push(r),r.type==="data"&&t.has(r.nodeId)&&this.hasDetail(r.data)){let n=this.heightCache.get(r.nodeId)??this.config.detailFixedHeight??as,i=this.clampHeight(n);o.push(this.rowModel.createDetailNode(r,r.data,i))}return o}getCachedDetailData(e){return this.detailDataCache.get(e)}setDetailHeight(e,t){let o=this.clampHeight(t);this.heightCache.get(e)!==o&&(this.heightCache.set(e,o),this.eventBus.emit(x.ROW_DETAIL_HEIGHT_CHANGED,{nodeId:e,height:o}),this.refreshCallback?.())}resolveDetailGridOptions(e,t,o){let r=this.config?.detailGrid,n=r?typeof r=="function"?r(e.data):r:{columns:[]},i=n.mode===void 0&&n.variant===void 0&&n.theme===void 0,s={...n,data:n.data??this.detailDataCache.get(e.parentNodeId??e.nodeId)??[]};return i&&(t&&(s.mode=t),o&&o!=="none"&&(s.variant=o)),s}destroy(){this.detailDataCache.clear(),this.heightCache.clear(),this.pendingNodeIds.clear(),this.defaultAppliedNodeIds.clear(),this.refreshCallback=null}clampHeight(e){let t=this.config?.detailMinHeight,o=this.config?.detailMaxHeight,r=e;return t!=null&&(r=Math.max(t,r)),o!=null&&(r=Math.min(o,r)),r}fetchDetailDataIfNeeded(e){let t=this.config?.getDetailData;if(!t||this.detailDataCache.has(e.nodeId))return;let o=t(e.data);if(!(o instanceof Promise)){this.detailDataCache.set(e.nodeId,o);return}this.pendingNodeIds.add(e.nodeId),o.then(r=>{this.detailDataCache.set(e.nodeId,r)}).catch(r=>{console.error(`[PhotonGrid] masterDetail.getDetailData failed for row "${e.nodeId}":`,r),this.detailDataCache.set(e.nodeId,[])}).finally(()=>{this.pendingNodeIds.delete(e.nodeId),this.refreshCallback?.()})}};var ds="parentId",cs="children";function Tn(d,e){switch(d.mode){case"parentId":return ps(e,d.idField??"id",d.parentIdField??ds);case"dataPath":return hs(e,d.getDataPath);case"custom":return us(e,d.hierarchyProvider);case"childrenField":return gs(e,d.childrenField??cs,d.idField??"id");default:return[]}}function ps(d,e,t){let o=new Array(d.length);for(let r=0;r<d.length;r++){let n=d[r],i=n[e],s=n[t];o[r]={id:i!=null?String(i):`pos_${r}`,parentId:s!=null?String(s):null,record:n}}return o}function hs(d,e){let t=new Map;for(let o of d){let r=e(o);for(let n=0;n<r.length;n++){let i=r.slice(0,n+1).join("/");n===r.length-1?t.set(i,{id:i,parentId:n>0?r.slice(0,n).join("/"):null,record:o}):t.has(i)||t.set(i,{id:i,parentId:n>0?r.slice(0,n).join("/"):null,record:{[r[n]]:r[n]},isFiller:!0})}}return Array.from(t.values())}function us(d,e){return d.map(t=>({id:e.getId(t),parentId:e.getParentKey(t)??null,record:t}))}function gs(d,e,t){let o=[];function r(n,i,s){for(let l=0;l<n.length;l++){let a=n[l],c=s?`${s}.${l}`:String(l),p=a[t],h=p!=null?String(p):c;o.push({id:h,parentId:i,record:a});let u=a[e];Array.isArray(u)&&u.length>0&&r(u,h,c)}}return r(d,null,""),o}function Mn(d,e=50){let t=new Map;for(let n of d)t.set(n.id,{nodeId:n.id,rowIndex:-1,data:n.record,type:"data",selected:!1,expanded:!1,editable:!n.isFiller,level:0,parent:null,children:[],hasChildren:!1,isTreeFiller:n.isFiller,height:e,top:0});let o=[];for(let n of d){let i=t.get(n.id),s=n.parentId!=null?t.get(n.parentId):void 0;s?(s.children.push(i),s.hasChildren=!0,i.parent=s):o.push(i)}let r=(n,i)=>{for(let s of n)s.level=i,s.children.length>0&&r(s.children,i+1)};return r(o,0),o}function kn(d,e){let t=[],o=r=>{for(let n of r)n.expanded=e.has(n.nodeId),t.push(n),n.expanded&&n.children.length>0&&o(n.children)};return o(d),t}var co=class{constructor(e,t,o,r,n){this.store=e;this.eventBus=t;this.filterEngine=o;this.sortEngine=r;this.expansionService=n;this.config=null;this.lastRoots=[];this.lastNodesById=new Map;this.defaultAppliedNodeIds=new Set;this.pendingLoadNodeIds=new Set;this.refreshCallback=null}configure(e){this.config=e?.enabled?e:null}isEnabled(){return this.config!==null}getConfig(){return this.config}setRefreshCallback(e){this.refreshCallback=e}supportsReparenting(){return this.config?.mode==="parentId"||this.config?.mode==="childrenField"}getFlatVisibleRows(e,t){if(!this.config)return e;let o=this.buildRoots(e);return this.applyDefaultExpansion(o),o=this.filterTree(o,t),o=this.sortTree(o,t),kn(o,this.expansionService.getExpandedIds())}buildRoots(e){if(!this.config)return[];let t=e.map(i=>i.data),o=Tn(this.config,t),r=Mn(o,e[0]?.height??50);this.lastRoots=r,this.lastNodesById=new Map;let n=i=>{for(let s of i)this.lastNodesById.set(s.nodeId,s),s.children.length>0&&n(s.children)};return n(r),r}filterTree(e,t){if(!this.filterEngine.hasActiveFilters())return e;let o=r=>{let n=r.children.map(o).filter(s=>s!==null);return!this.filterEngine.matchesRow(r,t)&&n.length===0?null:{...r,children:n,hasChildren:n.length>0||r.hasChildren}};return e.map(o).filter(r=>r!==null)}sortTree(e,t){let o=r=>{let n=this.sortEngine.applySorting(r,t);for(let i of n)i.children.length>0&&(i.children=o(i.children));return n};return o(e)}annotateSubtreeExtents(e){if(!this.config||e.length===0)return;let t=[];for(let n of e)if(n.type==="data"){for(;t.length>0&&t[t.length-1].level>=n.level;)t.pop().subtreeEndTop=n.top;t.push(n)}let o=e[e.length-1],r=o.top+o.height;for(let n of t)n.subtreeEndTop=r}getNode(e){return this.lastNodesById.get(e)}getRoots(){return this.lastRoots}moveNode(e,t,o){if(!this.config||!this.supportsReparenting())return console.warn(`[PhotonGrid] Tree Data drag-to-reparent isn't supported for mode "${this.config?.mode}" (only "parentId"/"childrenField" have a mutable hierarchy).`),!1;let r=this.lastNodesById.get(e),n=this.lastNodesById.get(t);if(!r||!n||r.isTreeFiller||n.isTreeFiller)return!1;let i=o==="inside"?n:n.parent;if(i===r||this.isDescendantOf(i,r))return!1;if(this.config.mode==="parentId"){let s=this.config.idField??"id",l=this.config.parentIdField??"parentId";r.data[l]=i?i.data[s]:null}else this.reparentChildrenField(r,i);return this.refreshCallback?.(),!0}reparentChildrenField(e,t){let o=this.config.childrenField??"children",r=e.parent?e.parent.data[o]??[]:null;if(r){let n=r.indexOf(e.data);n!==-1&&r.splice(n,1)}if(t){let n=t.data[o]??[];n.push(e.data),t.data[o]=n}}isDescendantOf(e,t){let o=e;for(;o;){if(o===t)return!0;o=o.parent}return!1}loadChildren(e){let t=this.config?.lazyLoadChildren,o=this.lastNodesById.get(e);!t||!o||o.childrenLoaded||this.pendingLoadNodeIds.has(e)||(this.pendingLoadNodeIds.add(e),t(o).then(r=>{this.attachLoadedChildren(o,r),o.childrenLoaded=!0,this.eventBus.emit(x.TREE_CHILDREN_LOADED,{nodeId:e,children:r})}).catch(r=>{console.error(`[PhotonGrid] treeData.lazyLoadChildren failed for node "${e}":`,r)}).finally(()=>{this.pendingLoadNodeIds.delete(e),this.refreshCallback?.()}))}isLoadPending(e){return this.pendingLoadNodeIds.has(e)}attachLoadedChildren(e,t){if(this.config){if(this.config.mode==="parentId"){let o=this.config.idField??"id",r=this.config.parentIdField??"parentId",n=e.data[o];for(let i of t)i[r]=n}else if(this.config.mode==="childrenField"){let o=this.config.childrenField??"children";e.data[o]=t}}}applyDefaultExpansion(e){let{defaultExpanded:t}=this.config??{};if(!t)return;let o=t===!0?1/0:t,r=[],n=i=>{for(let s of i)s.level<o&&(s.children.length>0||s.hasChildren)&&!this.defaultAppliedNodeIds.has(s.nodeId)&&(this.defaultAppliedNodeIds.add(s.nodeId),r.push(s)),s.children.length>0&&n(s.children)};n(e);for(let i of r)this.expansionService.expand(i)}destroy(){this.lastRoots=[],this.lastNodesById.clear(),this.defaultAppliedNodeIds.clear(),this.pendingLoadNodeIds.clear(),this.refreshCallback=null}};var po=class{constructor(e,t){this.store=e;this.eventBus=t}expand(e){let t=new Set(this.store.get("expandedTreeNodeIds"));t.add(e.nodeId),this.store.set("expandedTreeNodeIds",t),this.eventBus.emit(x.TREE_NODE_EXPANDED,{nodeId:e.nodeId,row:e})}collapse(e){let t=new Set(this.store.get("expandedTreeNodeIds"));t.delete(e.nodeId),this.store.set("expandedTreeNodeIds",t),this.eventBus.emit(x.TREE_NODE_COLLAPSED,{nodeId:e.nodeId,row:e})}toggle(e){this.isExpanded(e.nodeId)?this.collapse(e):this.expand(e)}isExpanded(e){return this.store.get("expandedTreeNodeIds").has(e)}expandAll(e){let t=new Set,o=r=>{for(let n of r)(n.children.length>0||n.hasChildren)&&t.add(n.nodeId),n.children.length>0&&o(n.children)};o(e),this.store.set("expandedTreeNodeIds",t)}collapseAll(){this.store.set("expandedTreeNodeIds",new Set)}expandToLevel(e,t){if(t<=0){this.collapseAll();return}let o=new Set,r=n=>{for(let i of n)i.level<t&&(i.children.length>0||i.hasChildren)&&(o.add(i.nodeId),i.children.length>0&&r(i.children))};r(e),this.store.set("expandedTreeNodeIds",o)}getExpandedIds(){return this.store.get("expandedTreeNodeIds")}};var ho=class{constructor(e,t){this.rowSelectionEngine=e;this.treeDataService=t}selectWithDescendants(e,t){let o=[e.nodeId,...this.collectDescendantIds(e)];this.rowSelectionEngine.selectRows(o,t)}deselectWithDescendants(e,t){this.rowSelectionEngine.deselectRow(e.nodeId,t);for(let o of this.collectDescendantIds(e))this.rowSelectionEngine.deselectRow(o,t)}toggleWithDescendants(e,t){this.rowSelectionEngine.isRowSelected(e.nodeId)?this.deselectWithDescendants(e,t):this.selectWithDescendants(e,t)}getDescendantSelectionState(e){let t=this.collectDescendantIds(e);if(t.length===0)return this.rowSelectionEngine.isRowSelected(e.nodeId)?"all":"none";let o=0;for(let r of t)this.rowSelectionEngine.isRowSelected(r)&&o++;return o===0?"none":o===t.length?"all":"some"}collectDescendantIds(e){let t=this.treeDataService.getNode(e.nodeId)??e,o=[],r=n=>{for(let i of n.children)o.push(i.nodeId),r(i)};return r(t),o}};var uo=class{constructor(){this._groups=new Map;this._paths=new Map;this._hasGroups=!1}parse(e){this._groups.clear(),this._paths.clear(),this._hasGroups=!1,this.walk(e,[])}get hasGroups(){return this._hasGroups}get groups(){return this._groups}get paths(){return this._paths}getPath(e){return this._paths.get(e)??[]}getGroup(e){return this._groups.get(e)}getLeavesForGroup(e){let t=[];for(let[o,r]of this._paths)r.includes(e)&&t.push(o);return t}walk(e,t){for(let o of e){let r=o.children;if(Array.isArray(r)&&r.length>0){this._hasGroups=!0;let n=t.length>0?t[t.length-1]:null;this._groups.set(o.colId,{id:o.colId,header:o.header??"",parentId:n,headerCssClass:o.headerCssClass,resizable:o.resizable,collapsedWidth:o.collapsedWidth??36,marryChildren:o.marryChildren,headerRendererFn:o.groupHeaderRendererFn}),this.walk(r,[...t,o.colId])}else this._paths.set(o.colId,[...t])}}};var go=class{build(e,t,o,r){let n=[],i=[],s=0,l=p=>{for(;i.length>p;){let h=i.pop();h.width=s-h.left;let u=i.length>0?i[i.length-1]:null;u?u.children.push(h):n.push(h)}};for(let p of e){if(p.visible===!1)continue;let h=t.getPath(p.colId),u=r.getWidth(p.colId),g=this.commonPrefixLen(i,h);l(g);for(let C=g;C<h.length;C++){let b=h[C],v=t.getGroup(b),w=`${b}:${p.colId}`,E={kind:"group",instanceId:w,logicalGroupId:b,header:v?.header??b,depth:C,children:[],left:s,width:0,collapsed:o.get(w)??!1,resizable:v?.resizable!==!1,collapsedWidth:v?.collapsedWidth??36,headerCssClass:v?.headerCssClass,headerRendererFn:v?.headerRendererFn};i.push(E)}let m={kind:"leaf",colDef:p,groupPath:h,left:s,width:u},f=i.length>0?i[i.length-1]:null;f?f.children.push(m):n.push(m),s+=u}l(0);let a=this.computeMaxGroupDepth(n),c=a>0?this.buildGroupRows(n,a):[];return{roots:n,maxGroupDepth:a,groupRows:c,totalWidth:s}}commonPrefixLen(e,t){let o=Math.min(e.length,t.length);for(let r=0;r<o;r++)if(e[r].logicalGroupId!==t[r])return r;return o}computeMaxGroupDepth(e){let t=0;for(let o of e)if(o.kind==="group"){let r=this.computeMaxGroupDepth(o.children);t=Math.max(t,o.depth+1,r)}return t}buildGroupRows(e,t){let o=Array.from({length:t},()=>[]);return this.fillRows(e,o,0),o.map((r,n)=>({depth:n,cells:r.slice().sort((i,s)=>i.left-s.left)}))}fillRows(e,t,o){for(let r of e){if(r.kind==="leaf"){for(let n=o;n<t.length;n++){let i={kind:"filler",id:`_filler_${r.colDef.colId}_d${n}`,colId:r.colDef.colId,left:r.left,width:r.width,depth:n};t[n].push(i)}continue}if(r.depth<t.length){let n={kind:"group",node:r,left:r.left,width:r.width,depth:r.depth};t[r.depth].push(n)}this.fillRows(r.children,t,r.depth+1)}}};var mo=class{constructor(e){this.iconRenderer=e}buildGroupRows(e,t){return e.maxGroupDepth===0?[]:e.groupRows.map(o=>this.buildRow(o,t))}updateGroupRows(e,t,o){if(e.length===0||t.maxGroupDepth===0)return;let r=Math.min(e.length,t.groupRows.length);for(let n=0;n<r;n++)e[n].innerHTML="",this.populateRow(e[n],t.groupRows[n],o)}buildRow(e,t){let o=y(`pg-header-group-row pg-header-group-row--depth-${e.depth}`);return o.setAttribute("role","row"),o.setAttribute("data-group-depth",String(e.depth)),this.populateRow(o,e,t),o}populateRow(e,t,o){for(let r of t.cells)e.appendChild(this.buildCell(r,o))}buildCell(e,t){if(e.kind==="filler"){let o=y("pg-th pg-th--depth-filler");return o.setAttribute("data-filler-id",e.id),o.setAttribute("data-col-id",e.colId),o.style.left=`${e.left}px`,o.style.width=`${e.width}px`,o}return this.buildGroupCell(e.node,e.left,e.width,t)}buildGroupCell(e,t,o,r){let n=e.collapsed,i=["pg-th","pg-th--group"];if(n&&i.push("pg-th--group--collapsed"),e.headerCssClass)for(let l of e.headerCssClass.split(" "))l.trim()&&i.push(l.trim());let s=y(i.join(" "));if(s.setAttribute("role","columnheader"),s.setAttribute("data-group-id",e.logicalGroupId),s.setAttribute("data-instance-id",e.instanceId),s.setAttribute("aria-expanded",String(!n)),s.setAttribute("aria-label",e.header),s.setAttribute("tabindex","0"),s.style.left=`${t}px`,s.style.width=`${o}px`,e.headerRendererFn){let l={id:e.logicalGroupId,header:e.header,parentId:null,headerCssClass:e.headerCssClass,resizable:e.resizable,collapsedWidth:e.collapsedWidth,headerRendererFn:e.headerRendererFn},a=e.headerRendererFn({logicalGroup:l,collapsed:n,api:null});typeof a=="string"?s.innerHTML=a:s.appendChild(a)}else this.buildDefaultContent(s,e,n);if(e.resizable){let l=y("pg-th__resize-handle pg-th__resize-handle--group");l.setAttribute("aria-hidden","true"),l.addEventListener("pointerdown",a=>{a.button===0&&(a.stopPropagation(),a.preventDefault(),this.startGroupResize(a,e,o,r))}),s.appendChild(l)}return s.addEventListener("pointerdown",l=>{l.target.closest(".pg-th__resize-handle")||r.onGroupHeaderMouseDown?.(l,e,s)}),s.addEventListener("click",l=>{l.target.closest(".pg-th__resize-handle")||r.didJustDragFn?.()||r.onCollapseToggle?.(e.instanceId)}),s.addEventListener("contextmenu",l=>{l.preventDefault(),l.stopPropagation(),r.onGroupContextMenu?.(l,e,s)}),s.addEventListener("keydown",l=>{(l.key==="Enter"||l.key===" "||l.key==="ArrowLeft"&&!n||l.key==="ArrowRight"&&n)&&(l.preventDefault(),r.onCollapseToggle?.(e.instanceId))}),s}buildDefaultContent(e,t,o){let r=y("pg-th__content"),n=y("pg-th__label");n.textContent=t.header,n.title=t.header,r.appendChild(n),e.appendChild(r);let i=y("pg-th__collapse-btn");i.setAttribute("tabindex","-1"),i.setAttribute("aria-label",o?`Expand ${t.header}`:`Collapse ${t.header}`),i.innerHTML=this.iconRenderer.renderToString(o?"chevronRight":"chevronLeft",12),e.appendChild(i)}startGroupResize(e,t,o,r){let n=e.clientX;document.body.style.cursor="col-resize",document.body.style.userSelect="none";let i=l=>{let a=Math.max(t.collapsedWidth,o+l.clientX-n);r.onGroupResize?.(t.instanceId,a)},s=l=>{let a=Math.max(t.collapsedWidth,o+l.clientX-n);r.onGroupResize?.(t.instanceId,a),document.body.style.cursor="",document.body.style.userSelect="",document.removeEventListener("pointermove",i),document.removeEventListener("pointerup",s)};document.addEventListener("pointermove",i),document.addEventListener("pointerup",s)}};var fo=class{constructor(e,t,o,r){this.gridElGetter=e;this.onGroupMoved=t;this.previewCallbacks=o;this.leavesFor=r;this._didJustDrag=!1;this.isDragging=!1;this.dragGroupId=null;this.sourcePanel=null;this.ghostEl=null;this.indicatorEl=null;this.dragStyleEl=null;this.capturedCells=[];this.dragSourceIdx=-1;this.lastSlotKey="";this.startX=0;this.startY=0;this.removeMoveUp=null}onHeaderMouseDown(e,t,o){if(e.button!==0)return;this.startX=e.clientX,this.startY=e.clientY,this.dragGroupId=t.logicalGroupId,this._didJustDrag=!1,this.isDragging=!1,this.sourcePanel=this.detectPanelFromElement(o);let r=J(e),n=0,i=()=>{n&&(clearTimeout(n),n=0),o.classList.remove("pg-th--drag-armed")},s=(c,p)=>{this.isDragging||(i(),this.isDragging=!0,this.activateDrag({clientX:c,clientY:p},t))},l=c=>{if(!this.isDragging){let p=Math.abs(c.clientX-this.startX),h=Math.abs(c.clientY-this.startY);if(r){(p>q||h>q)&&(this.removeMoveUp?.(),this.removeMoveUp=null,i());return}if(p<fe&&h<fe)return;this.isDragging=!0,this.activateDrag(c,t)}this.isDragging&&this.onMouseMove(c)},a=c=>{this.removeMoveUp?.(),this.removeMoveUp=null,i(),this.isDragging&&this.onMouseUp(c),this.isDragging=!1};document.addEventListener("pointermove",l),document.addEventListener("pointerup",a),this.removeMoveUp=()=>{document.removeEventListener("pointermove",l),document.removeEventListener("pointerup",a)},r&&(o.classList.add("pg-th--drag-armed"),n=window.setTimeout(()=>{n=0,s(this.startX,this.startY)},Ye))}get didJustDrag(){return this._didJustDrag}get isDraggingGroup(){return this.isDragging}destroy(){this.removeMoveUp?.(),this.removeMoveUp=null,this.cleanupDrag()}activateDrag(e,t){let o=this.gridElGetter();o&&(o.classList.add("pg-grid--group-dragging"),this.ghostEl=y("pg-col-drag-ghost"),this.ghostEl.textContent=t.header,this.ghostEl.style.left=`${e.clientX+12}px`,this.ghostEl.style.top=`${e.clientY-14}px`,document.body.appendChild(this.ghostEl),this.indicatorEl=y("pg-group-drop-indicator"),document.body.appendChild(this.indicatorEl),this.previewCallbacks?(this.lastSlotKey="",this.previewCallbacks.onPreviewStart()):(this.dragStyleEl=document.createElement("style"),this.dragStyleEl.setAttribute("data-pg-group-drag",""),document.head.appendChild(this.dragStyleEl),this.capturePanelCells(o,this.sourcePanel),this.dragSourceIdx=this.capturedCells.findIndex(r=>r.groupId===t.logicalGroupId),this.dragSourceIdx===-1&&(this.dragSourceIdx=0)))}onMouseMove(e){if(!this.ghostEl)return;this._didJustDrag=!0,this.ghostEl.style.left=`${e.clientX+12}px`,this.ghostEl.style.top=`${e.clientY-14}px`;let t=this.gridElGetter();if(!t)return;let o=this.detectPanelAtPoint(e.clientX,e.clientY,t);if(this.previewCallbacks){let r=this.findInsertBeforeColId(e,o,t),n=`${o??"c"}:${r??"end"}`;n!==this.lastSlotKey&&(this.lastSlotKey=n,this.previewCallbacks.onPreviewMove(this.dragGroupId,this.sourcePanel,o,r)),this.updateIndicatorFromColId(r,o,t)}else{o!==this.sourcePanel&&(this.capturePanelCells(t,o),this.dragSourceIdx=-1);let r=this.findEffectiveSlot(e.clientX);this.applyTransforms(r,t),this.updateIndicator(r)}}onMouseUp(e){if(this.previewCallbacks){this.previewCallbacks.onPreviewConfirm(),this.cleanupDrag(),this._didJustDrag=!0,setTimeout(()=>{this._didJustDrag=!1},200);return}let t=this.gridElGetter();if(!t||!this.dragGroupId){this.cleanupDrag();return}let o=this.detectPanelAtPoint(e.clientX,e.clientY,t),r=this.findInsertBeforeColId(e,o,t),n=this.sourcePanel,i=this.dragGroupId;this.cleanupDrag(),this.onGroupMoved(i,n,o,r),this._didJustDrag=!0,setTimeout(()=>{this._didJustDrag=!1},200)}findInsertBeforeColId(e,t,o){let r=this.getPanelEl(t,o);if(!r)return null;let n=r.querySelector(".pg-header-row");if(!n)return null;let i=Array.from(n.querySelectorAll(".pg-th[data-col-id]"));for(let s of i){let l=s.getBoundingClientRect();if(e.clientX<l.left+l.width/2)return s.getAttribute("data-col-id")}return null}capturePanelCells(e,t){this.capturedCells=[];let o=this.getPanelEl(t,e);if(!o)return;let r=o.querySelector(".pg-header-group-row--depth-0");if(r){let i=Array.from(r.querySelectorAll(".pg-th--group, .pg-th--depth-filler"));i.sort((s,l)=>parseFloat(s.style.left||"0")-parseFloat(l.style.left||"0"));for(let s of i)this.capturedCells.push({el:s,rect:s.getBoundingClientRect(),groupId:s.getAttribute("data-group-id")??"",colId:s.getAttribute("data-col-id")??""});if(this.capturedCells.length>0)return}let n=o.querySelector(".pg-header-row");if(n){let i=Array.from(n.querySelectorAll(".pg-th[data-col-id]"));for(let s of i)this.capturedCells.push({el:s,rect:s.getBoundingClientRect(),groupId:"",colId:s.getAttribute("data-col-id")??""})}}findEffectiveSlot(e){for(let t=0;t<this.capturedCells.length;t++){let{rect:o}=this.capturedCells[t];if(e<o.left+o.width/2)return t}return this.capturedCells.length}applyTransforms(e,t){if(!this.dragStyleEl||this.capturedCells.length===0)return;let o=this.dragSourceIdx;if(o===-1||e===o||e===o+1){this.dragStyleEl.textContent="";return}let r=t.getAttribute("data-photon-grid-id")??"",n=r?`[data-photon-grid-id="${r}"].pg-grid--group-dragging `:".pg-grid--group-dragging ",i=this.capturedCells[o],s=i?.rect.width??0,l=this.dragGroupId??"",a=e<this.capturedCells.length?this.capturedCells[e]:this.capturedCells[this.capturedCells.length-1],c=e>o?a.rect.right-i.rect.right:a.rect.left-i.rect.left,p=`${n}[data-group-id="${l}"] { --pg-drag-x: ${c}px; --pg-drag-transition: 0ms; z-index: 10; position: relative; }
4533
4301
  `;if(this.leavesFor)for(let h of this.leavesFor(l))p+=`${n}[data-col-id="${h}"] { --pg-drag-x: ${c}px; --pg-drag-transition: 0ms; }
4534
- `;for(let h=0;h<this.capturedCells.length;h++){if(h===o)continue;let u=this.capturedCells[h],m=u.groupId||u.colId,g=0;if(e>o&&h>o&&h<e?g=-s:e<=o&&h>=e&&h<o&&(g=s),!(g===0||!m)&&(p+=u.groupId?`${n}[data-group-id="${m}"] { --pg-drag-x: ${g}px; }
4535
- `:`${n}[data-col-id="${m}"] { --pg-drag-x: ${g}px; }
4536
- `,u.groupId&&this.leavesFor))for(let f of this.leavesFor(u.groupId))p+=`${n}[data-col-id="${f}"] { --pg-drag-x: ${g}px; }
4537
- `}this.dragStyleEl.textContent=p}updateIndicator(e){if(!this.indicatorEl)return;let t=this.capturedCells;if(t.length===0){this.indicatorEl.style.display="none";return}let o,r,n;if(e<t.length){let i=t[e].rect;o=i.left,r=i.top,n=i.height}else{let i=t[t.length-1].rect;o=i.right,r=i.top,n=i.height}this.indicatorEl.style.left=`${o}px`,this.indicatorEl.style.top=`${r}px`,this.indicatorEl.style.height=`${n}px`,this.indicatorEl.style.display="block"}updateIndicatorFromColId(e,t,o){if(!this.indicatorEl)return;let r=this.getPanelEl(t,o);if(!r){this.indicatorEl.style.display="none";return}let n=r.querySelector(".pg-header-row");if(!n){this.indicatorEl.style.display="none";return}let i,s,l;if(e){let a=n.querySelector(`.pg-th[data-col-id="${e}"]`);if(!a){this.indicatorEl.style.display="none";return}let c=a.getBoundingClientRect();i=c.left,s=c.top,l=c.height}else{let a=Array.from(n.querySelectorAll(".pg-th[data-col-id]"));if(a.length===0){this.indicatorEl.style.display="none";return}let c=a[a.length-1].getBoundingClientRect();i=c.right,s=c.top,l=c.height}this.indicatorEl.style.left=`${i}px`,this.indicatorEl.style.top=`${s}px`,this.indicatorEl.style.height=`${l}px`,this.indicatorEl.style.display="block"}detectPanelFromElement(e){return e.closest(".pg-panel--left")?"left":e.closest(".pg-panel--right")?"right":null}detectPanelAtPoint(e,t,o){let r=(n,i)=>{let s=o.querySelector(n);if(!s)return!1;let l=s.getBoundingClientRect();return e>=l.left&&e<=l.right&&t>=l.top&&t<=l.bottom};return r(".pg-panel--left","left")?"left":r(".pg-panel--right","right")?"right":null}getPanelEl(e,t){return e==="left"?t.querySelector(".pg-panel--left"):e==="right"?t.querySelector(".pg-panel--right"):t.querySelector(".pg-panel--center")??t.querySelector(".pg-panel:not(.pg-panel--left):not(.pg-panel--right)")}cleanupDrag(){this.dragStyleEl&&(this.dragStyleEl.textContent="",this.dragStyleEl.remove(),this.dragStyleEl=null),this.ghostEl?.remove(),this.ghostEl=null,this.indicatorEl?.remove(),this.indicatorEl=null,this.capturedCells=[],this.dragSourceIdx=-1,this.dragGroupId=null,this.sourcePanel=null,this.isDragging=!1,this.lastSlotKey="",this.gridElGetter()?.classList.remove("pg-grid--group-dragging","pg-grid--drag-preview-sync")}};var vo=class{constructor(e,t,o,r,n){this.colStyles=e;this.eventBus=t;this.columnModel=o;this.store=r;this.iconRenderer=n;this.dragHandler=null;this.collapseState=new Map;this.instanceLeaveCache=new Map;this.previewBaseColumns=null;this.registry=new uo,this.builder=new go,this.headerBuilder=new mo(n)}parse(e){this.registry.parse(e)}get hasGroups(){return this.registry.hasGroups}get isDraggingGroup(){return this.dragHandler?.isDraggingGroup??!1}isFlat(e){return this.registry.getPath(e).length===0}buildTree(e){return this.builder.build(e,this.registry,this.collapseState,this.colStyles)}toggleGroup(e){let t=e.indexOf(":"),o=t>=0?e.slice(0,t):e,r=t>=0?e.slice(t+1):"",i=!(this.collapseState.get(e)??!1);this.collapseState.set(e,i);let s=this.store.get("columns"),l=new Set(this.registry.getLeavesForGroup(o)),a=this.findInstanceLeaves(s,r,l);if(i){let c=a.filter(p=>p.visible!==!1);this.instanceLeaveCache.set(e,c.map(p=>p.colId));for(let p=0;p<c.length;p++)this.columnModel.setColumnVisible(c[p].colId,p===0)}else{let c=this.instanceLeaveCache.get(e)??a.map(p=>p.colId);for(let p of c)this.columnModel.setColumnVisible(p,!0);this.instanceLeaveCache.delete(e)}this.eventBus.emit(i?x.COLUMN_GROUP_HEADER_COLLAPSED:x.COLUMN_GROUP_HEADER_EXPANDED,{groupId:o})}isCollapsed(e){let t=`${e}:`;for(let[o,r]of this.collapseState)if(o.startsWith(t)&&r)return!0;return!1}getCollapseStateSnapshot(){return Array.from(this.collapseState.entries()).map(([e,t])=>({logicalGroupId:e,collapsed:t}))}applyCollapseState(e){for(let{logicalGroupId:t,collapsed:o}of e)this.collapseState.set(t,o)}handleGroupMoved(e,t,o,r){let n=this.store.get("columns"),i=this.registry.getLeavesForGroup(e),s=n.filter(u=>i.includes(u.colId)&&(u.pinned??null)===t);if(s.length===0)return;let l=new Set(s.map(u=>u.colId)),a=n.filter(u=>!l.has(u.colId)),c=s.map(u=>({...u,pinned:o})),p;r?(p=a.findIndex(u=>u.colId===r),p===-1&&(p=this.findEndOfPanel(a,o))):p=this.findEndOfPanel(a,o);let h=[...a.slice(0,p),...c,...a.slice(p)];this.store.set("columns",h)}resizeGroup(e,t){let o=e.indexOf(":"),r=o>=0?e.slice(0,o):e,n=o>=0?e.slice(o+1):"",i=this.store.get("columns"),s=new Set(this.registry.getLeavesForGroup(r)),l=this.findInstanceLeaves(i,n,s).filter(p=>p.visible!==!1);if(l.length===0)return;let a=l.reduce((p,h)=>p+this.colStyles.getWidth(h.colId),0);if(a<=0||Math.abs(t-a)<1)return;let c=t/a;for(let p of l){let h=this.colStyles.getWidth(p.colId),u=Math.max(p.minWidth??40,Math.round(h*c));this.colStyles.setWidth(p.colId,u),this.columnModel.setColumnWidth(p.colId,u,!1)}}beginDragPreview(){this.previewBaseColumns=this.store.get("columns")}applyPreviewMove(e,t,o,r){let n=this.previewBaseColumns;if(!n)return;let i=this.registry.getLeavesForGroup(e),s=n.filter(h=>i.includes(h.colId)&&(h.pinned??null)===t);if(s.length===0)return;let l=new Set(s.map(h=>h.colId)),a=n.filter(h=>!l.has(h.colId)),c=s.map(h=>({...h,pinned:o})),p;r?(p=a.findIndex(h=>h.colId===r),p===-1&&(p=this.findEndOfPanel(a,o))):p=this.findEndOfPanel(a,o),this.store.set("columns",[...a.slice(0,p),...c,...a.slice(p)])}confirmDragPreview(){this.previewBaseColumns=null}createDragHandler(e){return this.dragHandler||(this.dragHandler=new fo(e,(t,o,r,n)=>this.handleGroupMoved(t,o,r,n),void 0,t=>this.registry.getLeavesForGroup(t))),this.dragHandler}getDragHandler(){return this.dragHandler}getLeavesForGroup(e){return this.registry.getLeavesForGroup(e)}getGroupPositionInfo(e){let t=this.store.get("columns"),o=new Set(this.registry.getLeavesForGroup(e)),r=t.find(l=>o.has(l.colId));if(!r)return{isFirst:!0,isLast:!0,panel:null};let n=r.pinned??null,i=t.filter(l=>(l.pinned??null)===n&&l.visible!==!1),s=i.reduce((l,a,c)=>(o.has(a.colId)&&l.push(c),l),[]);return s.length===0?{isFirst:!0,isLast:!0,panel:n}:{isFirst:s[0]===0,isLast:s[s.length-1]===i.length-1,panel:n}}moveGroupLeft(e){let t=this.store.get("columns"),o=new Set(this.registry.getLeavesForGroup(e)),r=t.find(l=>o.has(l.colId));if(!r)return;let n=r.pinned??null,i=t.filter(l=>(l.pinned??null)===n),s=i.findIndex(l=>o.has(l.colId));s<=0||this.handleGroupMoved(e,n,n,i[s-1].colId)}moveGroupRight(e){let t=this.store.get("columns"),o=new Set(this.registry.getLeavesForGroup(e)),r=t.find(c=>o.has(c.colId));if(!r)return;let n=r.pinned??null,i=t.filter(c=>(c.pinned??null)===n),s=-1;for(let c=0;c<i.length;c++)o.has(i[c].colId)&&(s=c);if(s===-1||s>=i.length-1)return;let l=s+2,a=l<i.length?i[l].colId:null;this.handleGroupMoved(e,n,n,a)}moveGroupToStart(e){let t=this.store.get("columns"),o=new Set(this.registry.getLeavesForGroup(e)),r=t.find(l=>o.has(l.colId));if(!r)return;let n=r.pinned??null,s=t.filter(l=>(l.pinned??null)===n).find(l=>!o.has(l.colId));s&&this.handleGroupMoved(e,n,n,s.colId)}moveGroupToEnd(e){let t=this.store.get("columns"),o=new Set(this.registry.getLeavesForGroup(e)),r=t.find(i=>o.has(i.colId));if(!r)return;let n=r.pinned??null;this.handleGroupMoved(e,n,n,null)}hideGroupLeaves(e){let t=this.registry.getLeavesForGroup(e);for(let o of t)this.columnModel.setColumnVisible(o,!1)}findInstanceLeaves(e,t,o){let r=e.findIndex(i=>i.colId===t);if(r===-1)return[];let n=[];for(let i=r;i<e.length&&o.has(e[i].colId);i++)n.push(e[i]);return n}findEndOfPanel(e,t){let o=-1;for(let r=0;r<e.length;r++)(e[r].pinned??null)===t&&(o=r);return o===-1?e.length:o+1}};var hs=new Set(["hi","hello","hey","please","can","could","would","you","quickly","thanks","thank","photon","ai","assistant","to","the","a","an","in","on","at","is","are","was","were","be","me","my","side","now","just","them","it","their","order","whose","who","that","with","having","value","currently","kindly","want","need","like","this","these"]),us=new Map([["reset","clear"],["erase","clear"],["wipe","clear"],["delete","remove"],["drop","remove"],["freeze","pin"],["unfreeze","unpin"],["display","show"],["reveal","show"],["everything","all"],["every","all"],["entire","all"],["ascend","ascending"],["descend","descending"],["increasing","ascending"],["decreasing","descending"],["newest","descending"],["oldest","ascending"],["biggest","largest"],["smaller","smallest"],["bigger","largest"],["grouping","group"],["filtering","filter"],["sorting","sort"],["hiding","hide"],["showing","show"],["pinning","pin"],["pinned","pin"],["hidden","hide"],["filtered","filter"],["sorted","sort"],["grouped","group"],["selected","select"]]),gs=new Set(["status","address","series","analysis","this","his","is","was","has","as","gas"]);function kn(d){return d.length<=3||/^\d+$/.test(d)||gs.has(d)?d:d.endsWith("ies")?`${d.slice(0,-3)}y`:/(?:s|x|z|ch|sh)es$/.test(d)?d.slice(0,-2):d.endsWith("ss")?d:d.endsWith("s")?d.slice(0,-1):d}function Et(d){return d.split(" ").filter(e=>e.length>0)}function lt(d){let e=kn(d.toLowerCase());return us.get(e)??e}function Rt(d){let o=d.toLowerCase().replace(/[^\p{L}\p{N}\s.\-:/]/gu," ").split(/\s+/).filter(n=>n.length>0),r=[];for(let n of o){let i=lt(n);hs.has(i)||r.push(i)}return r.join(" ")}var ms=new Set([",","and","then","also","plus"]),fs=new Set(["between","from"]),vs=new Set(["select","deselect"]);function bs(d,e,t){return e<d.length&&t.has(lt(d[e]))}function Mn(d,e){let o=d.replace(/[,;]+/g," , ").trim().split(/\s+/).filter(i=>i.length>0);if(o.length===0)return[];let r=[],n=[];for(let i=0;i<o.length;i++){let s=o[i],l=s.toLowerCase(),a=l===",";if(!a&&!ms.has(l)){n.push(s);continue}let c=n.some(u=>fs.has(u.toLowerCase())),p=n.length===1&&vs.has(lt(n[0])),h=bs(o,i+1,e);n.length>0&&!c&&!p&&h?(r.push(n.join(" ")),n=[]):a||n.push(s)}return n.length>0&&r.push(n.join(" ")),r.length>0?r:[d.trim()]}function ys(d,e){let t=new Set(e);return{covered:d.every(r=>t.has(r)),words:d}}function Cs(d,e){let t=null;for(let o of d.aliases)ys(o,e).covered&&(!t||o.length>t.length)&&(t=o);return t}var be=class{parse(e,t){let o=null,r=null;for(let s of t.getAll()){let l=Cs(s,e);l&&(!r||l.length>r.length)&&(o=s,r=l)}if(!o||!r)return null;let n=new Set(r),i=e.filter(s=>!n.has(s));return{intent:o,remainingTokens:i}}};function xs(d,e){if(d===e)return 0;if(d.length===0)return e.length;if(e.length===0)return d.length;let t=Array.from({length:e.length+1},(r,n)=>n),o=new Array(e.length+1);for(let r=1;r<=d.length;r++){o[0]=r;for(let n=1;n<=e.length;n++){let i=d[r-1]===e[n-1]?0:1;o[n]=Math.min(t[n]+1,o[n-1]+1,t[n-1]+i)}[t,o]=[o,t]}return t[e.length]}function _n(d,e){let t=Math.max(d.length,e.length);return t===0?1:1-xs(d,e)/t}var ws=.6,Ln=.75,Es=300,Rs=new Set(["true","yes","active","enabled","on","open"]),Ss=new Set(["false","no","inactive","disabled","off","closed"]),Is=new Set(["of","the","a","an","and","or"]),Ts=3,ks=[{words:["greater","than","or","equal"],operator:"greaterThanOrEqual"},{words:["less","than","or","equal"],operator:"lessThanOrEqual"},{words:["no","less","than"],operator:"greaterThanOrEqual"},{words:["no","more","than"],operator:"lessThanOrEqual"},{words:["not","equal"],operator:"notEquals"},{words:["not","blank"],operator:"notBlank"},{words:["not","empty"],operator:"notBlank"},{words:["at","least"],operator:"greaterThanOrEqual"},{words:["at","most"],operator:"lessThanOrEqual"},{words:["start","with"],operator:"startsWith"},{words:["end","with"],operator:"endsWith"},{words:["greater","than"],operator:"greaterThan"},{words:["more","than"],operator:"greaterThan"},{words:["less","than"],operator:"lessThan"},{words:["fewer","than"],operator:"lessThan"},{words:["not","contain"],operator:"notContains"},{words:["contain"],operator:"contains"},{words:["over"],operator:"greaterThan"},{words:["above"],operator:"greaterThan"},{words:["under"],operator:"lessThan"},{words:["below"],operator:"lessThan"},{words:["before"],operator:"before"},{words:["after"],operator:"after"},{words:["equal"],operator:"equals"},{words:["blank"],operator:"blank"},{words:["empty"],operator:"blank"}],Ms=[...ks].sort((d,e)=>e.words.length-d.words.length);function B(d){return d.toLowerCase().trim()}function qo(d){return[d.colId,d.field,d.header].filter(e=>!!e).map(B)}function _s(d){let e=new Set;for(let t of qo(d))for(let o of t.split(" "))e.add(o);return e}var ye=class{constructor(e){this.memory=e}resolveColumn(e,t){if(e.length===0||t.length===0)return null;let o=e.map(B).join(" "),r=this.memory?.getColumnAlias(o);if(r){let l=t.find(a=>a.colId===r);if(l)return l}let n=[o,...e.map(B)].filter(l=>l.length>0),i=null,s=0;for(let l of t){let a=qo(l);for(let c of n)for(let p of a){let h=this.scoreCandidate(c,p);h>s&&(s=h,i=l)}}return!i||s<ws?null:(s<1&&this.memory?.learnColumnAlias(o,i.colId),i)}resolveColumns(e,t){let o=[],r=new Set,n=0;for(;n<e.length;){let i=1,s=null;for(let l=Math.min(Ts,e.length-n);l>=2;l--){let a=e.slice(n,n+l).map(B).join(" "),c=t.find(p=>qo(p).includes(a));if(c){s=c,i=l;break}}s||(s=this.resolveColumn([e[n]],t)),s&&!r.has(s.colId)&&(r.add(s.colId),o.push(s)),n+=i}return o}resolveDirection(e){let t=new Set(e.map(B)),o=["asc","ascending","low","smallest","increasing"];return["desc","descending","high","largest","decreasing"].some(n=>t.has(n))?"desc":o.some(n=>t.has(n))?"asc":null}resolveSide(e){let t=new Set(e.map(B));return t.has("left")?"left":t.has("right")?"right":null}resolveIndex(e){for(let t of e)if(/^\d+$/.test(t))return parseInt(t,10);return null}resolveAllRequested(e){return e.some(t=>B(t)==="all")}extractValue(e,t){let o=this.stripColumnTokens(e,t);return o.length?o.join(" "):null}stripColumnTokens(e,t){if(!t)return[...e];let o=_s(t);return e.filter(r=>!o.has(B(r)))}resolveNegation(e){let t=e.map(B).indexOf("not");return t<0?{negated:!1,remaining:[...e]}:{negated:!0,remaining:[...e.slice(0,t),...e.slice(t+1)]}}resolveOperator(e){let t=e.map(B);for(let{words:o,operator:r}of Ms){let n=Ls(t,o);if(n<0)continue;let i=[...t.slice(0,n),...t.slice(n+o.length)];return{operator:r,remaining:i}}return{operator:null,remaining:[...t]}}resolveRange(e){let t=e.map(B),o=t.indexOf("between");if(o<0)return null;let r=t.indexOf("and",o+1);if(r<0)return null;let n=t.slice(o+1,r),i=t.slice(r+1);return n.length===0||i.length===0?null:{from:n,to:i}}parseNumberToken(e){let t=e.replace(/[^0-9.\-]/g,"");if(!t)return null;let o=Number(t);return Number.isNaN(o)?null:o}parseDateToken(e){let t=B(e),o=new Date;if(t==="today")return o;if(t==="yesterday")return new Date(o.getTime()-864e5);if(t==="tomorrow")return new Date(o.getTime()+864e5);if(!/\d/.test(t))return null;let r=new Date(t);return Number.isNaN(r.getTime())?null:r}parseBooleanToken(e){let t=B(e);return Rs.has(t)?!0:Ss.has(t)?!1:null}matchOption(e,t){let o=B(e);if(!o)return null;let r=t.dropdownOptions??t.enumOptions?.map(s=>({value:s,label:s}))??[],n=null,i=0;for(let s of r){let l=this.optionScore(o,String(s.label));l>i&&(i=l,n=s)}return i>=Ln?n:null}resolveColumnByValue(e,t,o){if(e.length===0)return null;let r=e.map(B).join(" "),n=[r,...e.map(B)].filter(a=>a.length>0),i=t.filter(a=>a.filterable!==!1),s=null,l=0;for(let a of i){let c=a.dropdownOptions??a.enumOptions?.map(p=>({value:p,label:p}))??[];for(let p of n){for(let h of c){let u=this.optionScore(p,String(h.label));u>l&&(l=u,s={column:a,rawValue:String(h.value)})}a.type==="boolean"&&this.parseBooleanToken(p)!==null&&1>l&&(l=1,s={column:a,rawValue:p})}}return s&&l>=Ln?s:this.scanRowDataForValue(r,i,o)}scanRowDataForValue(e,t,o){if(e.length<3)return null;let r=t.filter(s=>s.type==="string"||s.type==="dropdown"||s.type==="email");if(r.length===0)return null;let n=o.getAllRows(),i=Math.min(n.length,Es);for(let s=0;s<i;s++){let l=n[s].data;for(let a of r){let c=l[a.field];if(c!=null&&B(String(c))===e)return{column:a,rawValue:String(c)}}}return null}scoreCandidate(e,t){return e===t?1:e.length>=3&&(t.includes(e)||e.includes(t))?.9:_n(e,t)}optionScore(e,t){let o=B(t),r=this.scoreCandidate(e,o),n=new Set(e.split(" ").filter(a=>a.length>0)),i=o.split(" ").filter(a=>a.length>0&&!Is.has(a));if(i.length===0)return r;let s=i.filter(a=>n.has(a)).length/i.length,l=s===1?.95:s*.7;return Math.max(r,l)}};function Ls(d,e){if(e.length===0||e.length>d.length)return-1;e:for(let t=0;t<=d.length-e.length;t++){for(let o=0;o<e.length;o++)if(d[t+o]!==e[o])continue e;return t}return-1}var Ce=class{build(e,t,o,r,n){let i=e.resolveEntities(t,o,r,n),s=e.validate?.(i);return s?{command:null,error:s}:{command:e.buildCommand(i),error:null}}};var xe=class{constructor(e){this.registry=e}execute(e,t){let o=this.registry.get(e.type);if(!o)return{success:!1,message:`No handler registered for "${e.type}".`};try{return{success:!0,message:o.execute(e,t),command:e}}catch(r){return{success:!1,message:`Couldn't run that command: ${r instanceof Error?r.message:String(r)}`,command:e}}}};var we=class{constructor(){this.intents=new Map}register(e){this.intents.set(e.key,e)}registerAll(e){for(let t of e)this.register(t)}unregister(e){this.intents.delete(e)}get(e){return this.intents.get(e)}getAll(){return Array.from(this.intents.values())}has(e){return this.intents.has(e)}clear(){this.intents.clear()}};function bo(){return{columnAliases:{},phrases:{}}}var yo=class{constructor(e){this.storageKey=`photon-ai:memory:${e}`,this.snapshot=this.load()}getColumnAlias(e){return this.snapshot.columnAliases[e]??null}learnColumnAlias(e,t){!e||this.snapshot.columnAliases[e]===t||(this.snapshot.columnAliases[e]=t,this.persist())}getPhraseCommands(e){return this.snapshot.phrases[e]??null}learnPhrase(e,t){!e||t.length===0||(this.snapshot.phrases[e]=[...t],this.persist())}clear(){this.snapshot=bo(),this.persist()}load(){try{if(typeof localStorage>"u")return bo();let e=localStorage.getItem(this.storageKey);if(!e)return bo();let t=JSON.parse(e);return{columnAliases:t.columnAliases??{},phrases:t.phrases??{}}}catch{return bo()}}persist(){try{if(typeof localStorage>"u")return;localStorage.setItem(this.storageKey,JSON.stringify(this.snapshot))}catch{}}};function Dn(d){return[...d].sort().join("|")}function An(d,e,t){return{column:e.resolveColumn(d,t)??void 0}}function Hn(d){return d.column?d.column.sortable===!1?`"${d.column.header}" isn't sortable.`:null:"I couldn't find a column matching your request."}var Ds={key:"sortAscending",aliases:[["sort","ascending"],["sort","asc"],["ascending"],["asc"],["low","high"],["smallest","largest"],["sort"]],description:"Sorts a column in ascending order.",resolveEntities:An,validate:Hn,buildCommand:d=>({type:"sortAscending",params:{colId:d.column.colId,header:d.column.header}}),execute:(d,e)=>{let t=d.params.colId;return e.sortColumn(t,"asc"),`Sorted "${d.params.header}" ascending.`}},As={key:"sortDescending",aliases:[["sort","descending"],["sort","desc"],["descending"],["desc"],["high","low"],["largest","smallest"]],description:"Sorts a column in descending order.",resolveEntities:An,validate:Hn,buildCommand:d=>({type:"sortDescending",params:{colId:d.column.colId,header:d.column.header}}),execute:(d,e)=>{let t=d.params.colId;return e.sortColumn(t,"desc"),`Sorted "${d.params.header}" descending.`}},Hs={key:"clearSort",aliases:[["clear","sort"],["remove","sort"],["unsort"]],description:"Clears all sorting.",resolveEntities:()=>({}),buildCommand:()=>({type:"clearSort",params:{}}),execute:(d,e)=>(e.clearSort(),"Cleared sorting.")};function Pn(d){d.registerAll([Ds,As,Hs])}function Xo(d){return d==="number"||d==="currency"||d==="percentage"?"number":d==="date"||d==="time"?"date":d==="boolean"?"boolean":d==="dropdown"?"dropdown":"string"}var Ps={equals:"notEquals",notEquals:"equals",contains:"notContains",notContains:"contains",blank:"notBlank",notBlank:"blank"};function Gs(d){return d==="string"?"contains":"equals"}function Ns(d,e,t){let o=Xo(d.type),r=t.resolveRange(e);if(r){if(o==="number"){let p=t.parseNumberToken(r.from.join(" ")),h=t.parseNumberToken(r.to.join(" "));return p===null||h===null?null:{operator:"inRange",value:p,valueTo:h}}if(o==="date"){let p=t.parseDateToken(r.from.join(" ")),h=t.parseDateToken(r.to.join(" "));return!p||!h?null:{operator:"inRange",value:p,valueTo:h}}return null}let{operator:n,remaining:i}=t.resolveOperator(e),{negated:s,remaining:l}=t.resolveNegation(i),a=l.join(" ").trim(),c=n??Gs(o);if(s&&(c=Ps[c]??c),c==="blank"||c==="notBlank")return{operator:c,value:null};if(!a)return null;switch(o){case"number":{let p=t.parseNumberToken(a);return p===null?null:{operator:c,value:p}}case"date":{let p=t.parseDateToken(a);return p?{operator:c,value:p}:null}case"boolean":{let p=t.parseBooleanToken(a);return p===null?null:{operator:c,value:p}}case"dropdown":{let p=t.matchOption(a,d);return p?{operator:c,value:p.value}:null}default:return{operator:c,value:a}}}function Os(d,e,t){let o=Xo(d.type),r=t?"notEquals":"equals";if(o==="boolean"){let n=["true","yes","active","enabled","on","open"].includes(e);return{operator:r,value:n}}return{operator:r,value:e}}function Fs(d,e){let t=Xo(d.type),o={operator:e.operator,value:e.value,valueTo:e.valueTo},r=t==="dropdown"&&e.operator==="equals";return{colId:d.colId,field:d.field,type:t,logic:"and",conditions:[o],selectedIds:r?[e.value]:void 0}}var Bs={key:"applyFilter",aliases:[["show","only"],["filter"],["where"],["find"],["show"]],description:'Filters rows by a column value, with full support for string/number/date/dropdown/boolean operators \u2014 e.g. "filter salary greater than 5000", "show status active", "filter hire date before 2024-01-01", "show price between 10 and 50".',resolveEntities:(d,e,t,o)=>{let r=e.resolveColumn(d,t)??void 0;if(r){let a=e.stripColumnTokens(d,r),c=Ns(r,a,e);return c?{column:r,operator:c.operator,coercedValue:c.value,coercedValueTo:c.valueTo}:{column:r}}if(d.length===0||e.resolveAllRequested(d)&&d.length<=2)return{allColumns:!0};let{negated:n,remaining:i}=e.resolveNegation(d),s=e.resolveColumnByValue(i,t,o);if(!s)return{};let l=Os(s.column,s.rawValue,n);return{column:s.column,operator:l.operator,coercedValue:l.value,coercedValueTo:l.valueTo}},validate:d=>d.allColumns?null:d.column?d.column.filterable===!1?`"${d.column.header}" isn't filterable.`:d.coercedValue===void 0?`What value should I filter "${d.column.header}" by?`:null:"I couldn't find a column or a matching value for that in the grid.",buildCommand:d=>{if(d.allColumns||!d.column)return{type:"clearFilters",params:{}};let e=d.column;return{type:"applyFilter",params:{colId:e.colId,header:e.header,operator:d.operator,value:d.coercedValue,valueTo:d.coercedValueTo}}},execute:(d,e)=>{let t=d.params.colId,o=e.getColumn(t);if(!o)return`"${d.params.header}" is no longer a valid column.`;let r={operator:d.params.operator,value:d.params.value,valueTo:d.params.valueTo};e.setColumnFilter(t,Fs(o,r));let n=r.operator==="blank"||r.operator==="notBlank"?"":r.valueTo!==void 0?` between "${jo(r.value)}" and "${jo(r.valueTo)}"`:` to "${jo(r.value)}"`;return`Filtered "${d.params.header}"${n}.`}};function jo(d){return d instanceof Date?d.toLocaleDateString():String(d)}var zs={key:"clearFilters",aliases:[["clear","filter"],["remove","filter"],["clear","all","filter"]],description:"Clears all active filters.",resolveEntities:()=>({}),buildCommand:()=>({type:"clearFilters",params:{}}),execute:(d,e)=>(e.clearAllFilters(),"Cleared all filters.")};function Gn(d){d.registerAll([Bs,zs])}function Yo(d,e,t){return{columns:e.resolveColumns(d,t)}}function Ko(d){return d.columns?.length?null:"I couldn't find a column matching your request."}function Zo(d,e,t,o){for(let n of d)t.setColumnPin(n,o);let r=o?` to the ${o}`:"";return`${o?"Pinned":"Unpinned"} ${e}${r}.`}var Ws={key:"pinLeft",aliases:[["pin","left"],["freeze","left"]],description:'Pins one or more columns to the left side of the grid \u2014 e.g. "pin price and income to the left".',resolveEntities:Yo,validate:Ko,buildCommand:d=>({type:"pinLeft",params:{colIds:d.columns.map(e=>e.colId),header:d.columns.map(e=>e.header).join('", "')}}),execute:(d,e)=>Zo(d.params.colIds,`"${d.params.header}"`,e,"left")},Vs={key:"pinRight",aliases:[["pin","right"],["freeze","right"]],description:'Pins one or more columns to the right side of the grid \u2014 e.g. "pin price and income to the right".',resolveEntities:Yo,validate:Ko,buildCommand:d=>({type:"pinRight",params:{colIds:d.columns.map(e=>e.colId),header:d.columns.map(e=>e.header).join('", "')}}),execute:(d,e)=>Zo(d.params.colIds,`"${d.params.header}"`,e,"right")},$s={key:"unpin",aliases:[["unpin"],["remove","pin"],["un","pin"]],description:'Unpins one or more columns \u2014 e.g. "unpin status, income and year".',resolveEntities:Yo,validate:Ko,buildCommand:d=>({type:"unpin",params:{colIds:d.columns.map(e=>e.colId),header:d.columns.map(e=>e.header).join('", "')}}),execute:(d,e)=>Zo(d.params.colIds,`"${d.params.header}"`,e,null)},Us={key:"unpinAll",aliases:[["unpin","all","column"],["unpin","every","column"],["remove","all","pin"],["clear","all","pin"],["clear","pin"]],description:"Unpins every column in the grid.",resolveEntities:()=>({}),buildCommand:()=>({type:"unpinAll",params:{}}),execute:(d,e)=>{let t=e.getAllColumns();for(let o of t)e.setColumnPin(o.colId,null);return`Unpinned all ${t.length} columns.`}},qs={key:"pinHalf",aliases:[["pin","half"],["freeze","half"]],description:`Splits the grid's columns in half and pins them \u2014 "pin half the columns to the left and half to the right" pins the first half left and the second half right.`,resolveEntities:(d,e)=>{let t=new Set(d.map(r=>r.toLowerCase())),o=[];return t.has("left")&&o.push("left"),t.has("right")&&o.push("right"),{sides:o}},validate:d=>d.sides?.length?null:"Which side should I pin the columns to \u2014 left, right, or both?",buildCommand:d=>({type:"pinHalf",params:{sides:d.sides}}),execute:(d,e)=>{let t=d.params.sides,o=e.getAllColumns(),r=Math.ceil(o.length/2),n=o.slice(0,r),i=o.slice(r);if(t.includes("left")&&t.includes("right")){for(let l of n)e.setColumnPin(l.colId,"left");for(let l of i)e.setColumnPin(l.colId,"right");return`Pinned ${n.length} columns left and ${i.length} columns right.`}let s=t[0];for(let l of n)e.setColumnPin(l.colId,s);return`Pinned ${n.length} columns to the ${s}.`}};function Nn(d){d.registerAll([Us,qs,Ws,Vs,$s])}function js(d,e,t){return{column:e.resolveColumn(d,t)??void 0}}function On(d){return d.column?null:"I couldn't find a column matching your request."}var Xs={key:"hideColumn",aliases:[["hide","column"],["hide"]],description:"Hides a column.",resolveEntities:js,validate:On,buildCommand:d=>({type:"hideColumn",params:{colId:d.column.colId,header:d.column.header}}),execute:(d,e)=>(e.setColumnVisible(d.params.colId,!1),`Hid "${d.params.header}".`)},Ys={key:"showColumn",aliases:[["show","column"],["unhide","column"],["unhide"]],description:"Shows a previously hidden column.",resolveEntities:(d,e,t)=>({column:e.resolveColumn(d,t)??void 0}),validate:On,buildCommand:d=>({type:"showColumn",params:{colId:d.column.colId,header:d.column.header}}),execute:(d,e)=>(e.setColumnVisible(d.params.colId,!0),`Showed "${d.params.header}".`)},Ks={key:"hideAllColumns",aliases:[["hide","all","column"],["hide","every","column"]],description:"Hides every column in the grid (columns marked `alwaysVisible` are left alone).",resolveEntities:()=>({}),buildCommand:()=>({type:"hideAllColumns",params:{}}),execute:(d,e)=>{let t=0;for(let o of e.getAllColumns())o.alwaysVisible||(e.setColumnVisible(o.colId,!1),t++);return`Hid ${t} column${t===1?"":"s"}.`}},Zs={key:"showAllColumns",aliases:[["show","all","column"],["show","every","column"],["unhide","all","column"],["unhide","every","column"]],description:"Shows every column in the grid.",resolveEntities:()=>({}),buildCommand:()=>({type:"showAllColumns",params:{}}),execute:(d,e)=>{let t=e.getAllColumns();for(let o of t)e.setColumnVisible(o.colId,!0);return`Showed all ${t.length} columns.`}};function Fn(d){d.registerAll([Ks,Zs,Xs,Ys])}var Js={key:"groupBy",aliases:[["group","by"],["group"]],description:'Groups rows by one or more columns \u2014 e.g. "group by department and status".',resolveEntities:(d,e,t)=>({columns:e.resolveColumns(d,t)}),validate:d=>d.columns?.length?d.columns.filter(t=>t.groupable!==!1).length===0?`"${d.columns.map(t=>t.header).join('", "')}" can't be grouped.`:null:"I couldn't find a column matching your request.",buildCommand:d=>{let e=d.columns,t=e.filter(r=>r.groupable!==!1),o=e.filter(r=>r.groupable===!1);return{type:"groupBy",params:{colIds:t.map(r=>r.colId),header:t.map(r=>r.header).join('", "'),skippedHeader:o.length?o.map(r=>r.header).join('", "'):void 0}}},execute:(d,e)=>{for(let r of d.params.colIds)e.groupByColumn(r);let t=d.params.skippedHeader,o=`Grouped by "${d.params.header}".`;return t?`${o} ("${t}" isn't groupable, so it was skipped.)`:o}},Qs={key:"ungroup",aliases:[["ungroup"],["clear","group"],["remove","group"]],description:"Clears all row grouping.",resolveEntities:()=>({}),buildCommand:()=>({type:"ungroup",params:{}}),execute:(d,e)=>(e.clearGrouping(),"Cleared grouping.")},el={key:"expandAllGroups",aliases:[["expand","all","row"],["expand","all","group"],["expand","all"],["expand","group"],["open","all","group"]],description:'Expands every group row (and level qualifiers like "to level one" are treated the same as expanding everything).',resolveEntities:()=>({}),buildCommand:()=>({type:"expandAllGroups",params:{}}),execute:(d,e)=>(e.expandAllGroups(),"Expanded all groups.")},tl={key:"collapseAllGroups",aliases:[["collapse","all","row"],["collapse","all","group"],["collapse","all"],["collapse","group"],["close","all","group"]],description:"Collapses every group row.",resolveEntities:()=>({}),buildCommand:()=>({type:"collapseAllGroups",params:{}}),execute:(d,e)=>(e.collapseAllGroups(),"Collapsed all groups.")},ol={key:"expandRow",aliases:[["expand","row"],["open","row"]],description:"Expands a specific row by its (1-based) position \u2014 its group children if it's a group row, or its detail row in a master/detail grid.",resolveEntities:(d,e)=>({index:e.resolveIndex(d)??void 0}),validate:d=>d.index!=null?null:'Tell me which row number to expand, e.g. "expand row 2".',buildCommand:d=>({type:"expandRow",params:{index:d.index}}),execute:(d,e)=>{let t=d.params.index,o=e.getRowByIndex(t-1);return o?o.type==="group"&&o.groupKey?(e.expandGroup(o.groupKey),`Expanded row ${t}.`):(e.expandDetail(o.nodeId),`Expanded row ${t}.`):`There's no row ${t}.`}},rl={key:"collapseRow",aliases:[["collapse","row"],["close","row"]],description:"Collapses a specific row by its (1-based) position.",resolveEntities:(d,e)=>({index:e.resolveIndex(d)??void 0}),validate:d=>d.index!=null?null:'Tell me which row number to collapse, e.g. "collapse row 2".',buildCommand:d=>({type:"collapseRow",params:{index:d.index}}),execute:(d,e)=>{let t=d.params.index,o=e.getRowByIndex(t-1);return o?o.type==="group"&&o.groupKey?(e.collapseGroup(o.groupKey),`Collapsed row ${t}.`):(e.collapseDetail(o.nodeId),`Collapsed row ${t}.`):`There's no row ${t}.`}};function Bn(d){d.registerAll([Js,Qs,el,tl,ol,rl])}function Jo(d){let e=d.getVisibleColumns(),t=d.getVisibleRows();return e.length===0||t.length===0?!1:(d.setCellRange({startRowIndex:0,endRowIndex:t.length-1,startColIndex:0,endColIndex:e.length-1}),!0)}var nl={key:"selectRow",aliases:[["select","row"]],description:"Selects a row by its (1-based) position.",resolveEntities:(d,e)=>({index:e.resolveIndex(d)??void 0}),validate:d=>d.index!=null?null:'Tell me which row number to select, e.g. "select row 5".',buildCommand:d=>({type:"selectRow",params:{index:d.index}}),execute:(d,e)=>{let t=d.params.index,o=e.getRowByIndex(t-1);return o?(e.selectRow(o.nodeId),`Selected row ${t}.`):`There's no row ${t}.`}},il={key:"selectColumn",aliases:[["select","column"]],description:"Selects every cell in a column.",resolveEntities:(d,e,t)=>({column:e.resolveColumn(d,t)??void 0}),validate:d=>d.column?null:"I couldn't find a column matching your request.",buildCommand:d=>({type:"selectColumn",params:{colId:d.column.colId,header:d.column.header}}),execute:(d,e)=>{let t=d.params.colId,r=e.getVisibleColumns().findIndex(i=>i.colId===t),n=e.getVisibleRows().length;return r<0||n===0?`"${d.params.header}" isn't visible right now.`:(e.setCellRange({startRowIndex:0,endRowIndex:n-1,startColIndex:r,endColIndex:r}),`Selected the "${d.params.header}" column.`)}},sl={key:"clearSelection",aliases:[["clear","selection"],["clear","select"],["deselect"]],description:"Clears row and cell selection.",resolveEntities:()=>({}),buildCommand:()=>({type:"clearSelection",params:{}}),execute:(d,e)=>(e.deselectAll(),e.clearCellSelection(),"Cleared selection.")},ll={key:"selectAllCells",aliases:[["select","all","cell"],["select","every","cell"]],description:"Selects every cell in the grid.",resolveEntities:()=>({}),buildCommand:()=>({type:"selectAllCells",params:{}}),execute:(d,e)=>Jo(e)?"Selected all cells.":"There are no cells to select."},al={key:"copyAllCells",aliases:[["copy"],["select","copy"],["select","copy","all","cell"]],description:'Selects and copies every cell to the clipboard \u2014 e.g. "copy all cells", "select and copy all the cells".',resolveEntities:()=>({}),buildCommand:()=>({type:"copyAllCells",params:{}}),execute:(d,e)=>Jo(e)?(e.copySelectedCellsToClipboard(),"Copied all cells to the clipboard."):"There are no cells to copy."},dl={key:"cutAllCells",aliases:[["cut"],["select","cut"],["select","cut","all","cell"]],description:'Selects every cell and copies it to the clipboard \u2014 "cut" never deletes grid data via a command, to avoid irreversible data loss from a misheard instruction.',resolveEntities:()=>({}),buildCommand:()=>({type:"cutAllCells",params:{}}),execute:(d,e)=>Jo(e)?(e.copySelectedCellsToClipboard(),"Cutting isn't supported, since it would permanently delete data \u2014 copied all cells instead."):"There are no cells to cut."};function zn(d){d.registerAll([nl,il,ll,al,dl,sl])}function Wn(d,e,t){return{column:e.resolveColumn(d,t)??void 0}}function Vn(d){return d.column?null:"I couldn't find a column matching your request."}function $n(d,e){return d.getVisibleColumns().findIndex(t=>t.colId===e)}var cl={key:"moveColumnToStart",aliases:[["move","start"],["move","left"],["move","beginning"],["move","front"],["move","first"]],description:'Moves a column to the leftmost position \u2014 e.g. "move country column to the start".',resolveEntities:Wn,validate:Vn,buildCommand:d=>({type:"moveColumnToStart",params:{colId:d.column.colId,header:d.column.header}}),execute:(d,e)=>{let t=d.params.colId,o=$n(e,t);return o<=0?`"${d.params.header}" is already at the start.`:(e.moveColumn(o,0),`Moved "${d.params.header}" to the start.`)}},pl={key:"moveColumnToEnd",aliases:[["move","end"],["move","right"],["move","last"]],description:'Moves a column to the rightmost position \u2014 e.g. "move country column to the end".',resolveEntities:Wn,validate:Vn,buildCommand:d=>({type:"moveColumnToEnd",params:{colId:d.column.colId,header:d.column.header}}),execute:(d,e)=>{let t=d.params.colId,o=$n(e,t),r=e.getVisibleColumns().length-1;return o<0||o===r?`"${d.params.header}" is already at the end.`:(e.moveColumn(o,r),`Moved "${d.params.header}" to the end.`)}};function Un(d){d.registerAll([cl,pl])}function Qo(d,e){return d.getColumn(e)?.header??e}var hl={key:"rowCount",aliases:[["row","count"],["count","row"],["total","row"],["how","many","row"],["how","many"],["count"]],description:"Reports how many rows the grid has, and how many are visible after filtering/grouping.",resolveEntities:()=>({}),buildCommand:()=>({type:"rowCount",params:{}}),execute:(d,e)=>{let t=e.getAllRows().filter(r=>r.type==="data").length,o=e.getVisibleRows().filter(r=>r.type==="data").length;return t===o?`There are ${t} row${t===1?"":"s"}.`:`There are ${t} rows total, ${o} visible after filtering/grouping.`}},ul={key:"columnCount",aliases:[["column","count"],["count","column"],["total","column"],["how","many","column"]],description:"Reports how many columns the grid has, and how many are visible vs. hidden.",resolveEntities:()=>({}),buildCommand:()=>({type:"columnCount",params:{}}),execute:(d,e)=>{let t=e.getAllColumns(),o=t.filter(r=>r.visible===!1).length;return o===0?`There are ${t.length} columns, all visible.`:`There are ${t.length} columns total \u2014 ${t.length-o} visible, ${o} hidden.`}},gl={key:"selectionInfo",aliases:[["select","count"],["which","row","select"],["what","select"],["how","many","select"],["how","many","row","select"]],description:"Reports how many rows/cells are currently selected.",resolveEntities:()=>({}),buildCommand:()=>({type:"selectionInfo",params:{}}),execute:(d,e)=>{let t=e.getSelectedCount(),o=e.getCellRanges().length;if(t===0&&o===0)return"Nothing is selected.";let r=[];return t>0&&r.push(`${t} row${t===1?"":"s"}`),o>0&&r.push(`${o} cell range${o===1?"":"s"}`),`Selected: ${r.join(", ")}.`}},ml={key:"filterInfo",aliases:[["what","filter"],["which","filter"],["filter","state"],["active","filter"],["list","filter"]],description:"Lists every column that currently has an active filter, and what it's filtering for.",resolveEntities:()=>({}),buildCommand:()=>({type:"filterInfo",params:{}}),execute:(d,e)=>{let t=e.getFilterModel(),o=Object.values(t);return o.length===0?"No filters are active.":`Active filters: ${o.map(n=>{let i=Qo(e,n.colId);if(n.selectedIds?.length)return`${i} (${n.selectedIds.join(", ")})`;let[s]=n.conditions;return`${i} ${s.operator} ${String(s.value)}`}).join("; ")}.`}},fl={key:"sortInfo",aliases:[["what","sort"],["which","sort"],["sort","state"],["current","sort"]],description:"Reports which column(s) the grid is currently sorted by.",resolveEntities:()=>({}),buildCommand:()=>({type:"sortInfo",params:{}}),execute:(d,e)=>{let t=e.getSortConfig();return t.length===0?"No column is sorted.":`Sorted by: ${t.map(o=>`${Qo(e,o.colId)} (${o.order})`).join(", ")}.`}},vl={key:"pinInfo",aliases:[["which","pin"],["what","pin"],["pin","state"],["list","pin"]],description:"Lists which columns are pinned left/right.",resolveEntities:()=>({}),buildCommand:()=>({type:"pinInfo",params:{}}),execute:(d,e)=>{let t=e.getAllColumns(),o=t.filter(i=>i.pinned==="left").map(i=>i.header),r=t.filter(i=>i.pinned==="right").map(i=>i.header);if(o.length===0&&r.length===0)return"No columns are pinned.";let n=[];return o.length&&n.push(`left: ${o.join(", ")}`),r.length&&n.push(`right: ${r.join(", ")}`),`Pinned \u2014 ${n.join(" | ")}.`}},bl={key:"hiddenColumnsInfo",aliases:[["which","hide"],["what","hide"],["hide","state"],["list","hide"],["which","column","hide"],["what","column","hide"],["list","hide","column"]],description:"Lists which columns are currently hidden.",resolveEntities:()=>({}),buildCommand:()=>({type:"hiddenColumnsInfo",params:{}}),execute:(d,e)=>{let t=e.getAllColumns().filter(o=>o.visible===!1).map(o=>o.header);return t.length===0?"No columns are hidden.":`Hidden columns: ${t.join(", ")}.`}},yl={key:"groupInfo",aliases:[["what","group"],["which","group"],["group","state"],["how","group"],["what","group","by"],["which","group","by"]],description:"Reports which column(s) rows are currently grouped by.",resolveEntities:()=>({}),buildCommand:()=>({type:"groupInfo",params:{}}),execute:(d,e)=>{let t=e.getGridState().groupedColumns??[];return t.length===0?"Rows aren't grouped by anything.":`Grouped by: ${t.map(o=>Qo(e,o)).join(" > ")}.`}};function Cl(d){let e={key:"help",aliases:[["help"],["what","do"],["list","command"],["what","command"]],description:"Lists every command Photon AI understands.",resolveEntities:()=>({}),buildCommand:()=>({type:"help",params:{}}),execute:()=>`Here's what I can do:
4302
+ `;for(let h=0;h<this.capturedCells.length;h++){if(h===o)continue;let u=this.capturedCells[h],g=u.groupId||u.colId,m=0;if(e>o&&h>o&&h<e?m=-s:e<=o&&h>=e&&h<o&&(m=s),!(m===0||!g)&&(p+=u.groupId?`${n}[data-group-id="${g}"] { --pg-drag-x: ${m}px; }
4303
+ `:`${n}[data-col-id="${g}"] { --pg-drag-x: ${m}px; }
4304
+ `,u.groupId&&this.leavesFor))for(let f of this.leavesFor(u.groupId))p+=`${n}[data-col-id="${f}"] { --pg-drag-x: ${m}px; }
4305
+ `}this.dragStyleEl.textContent=p}updateIndicator(e){if(!this.indicatorEl)return;let t=this.capturedCells;if(t.length===0){this.indicatorEl.style.display="none";return}let o,r,n;if(e<t.length){let i=t[e].rect;o=i.left,r=i.top,n=i.height}else{let i=t[t.length-1].rect;o=i.right,r=i.top,n=i.height}this.indicatorEl.style.left=`${o}px`,this.indicatorEl.style.top=`${r}px`,this.indicatorEl.style.height=`${n}px`,this.indicatorEl.style.display="block"}updateIndicatorFromColId(e,t,o){if(!this.indicatorEl)return;let r=this.getPanelEl(t,o);if(!r){this.indicatorEl.style.display="none";return}let n=r.querySelector(".pg-header-row");if(!n){this.indicatorEl.style.display="none";return}let i,s,l;if(e){let a=n.querySelector(`.pg-th[data-col-id="${e}"]`);if(!a){this.indicatorEl.style.display="none";return}let c=a.getBoundingClientRect();i=c.left,s=c.top,l=c.height}else{let a=Array.from(n.querySelectorAll(".pg-th[data-col-id]"));if(a.length===0){this.indicatorEl.style.display="none";return}let c=a[a.length-1].getBoundingClientRect();i=c.right,s=c.top,l=c.height}this.indicatorEl.style.left=`${i}px`,this.indicatorEl.style.top=`${s}px`,this.indicatorEl.style.height=`${l}px`,this.indicatorEl.style.display="block"}detectPanelFromElement(e){return e.closest(".pg-panel--left")?"left":e.closest(".pg-panel--right")?"right":null}detectPanelAtPoint(e,t,o){let r=(n,i)=>{let s=o.querySelector(n);if(!s)return!1;let l=s.getBoundingClientRect();return e>=l.left&&e<=l.right&&t>=l.top&&t<=l.bottom};return r(".pg-panel--left","left")?"left":r(".pg-panel--right","right")?"right":null}getPanelEl(e,t){return e==="left"?t.querySelector(".pg-panel--left"):e==="right"?t.querySelector(".pg-panel--right"):t.querySelector(".pg-panel--center")??t.querySelector(".pg-panel:not(.pg-panel--left):not(.pg-panel--right)")}cleanupDrag(){this.dragStyleEl&&(this.dragStyleEl.textContent="",this.dragStyleEl.remove(),this.dragStyleEl=null),this.ghostEl?.remove(),this.ghostEl=null,this.indicatorEl?.remove(),this.indicatorEl=null,this.capturedCells=[],this.dragSourceIdx=-1,this.dragGroupId=null,this.sourcePanel=null,this.isDragging=!1,this.lastSlotKey="",this.gridElGetter()?.classList.remove("pg-grid--group-dragging","pg-grid--drag-preview-sync")}};var vo=class{constructor(e,t,o,r,n){this.colStyles=e;this.eventBus=t;this.columnModel=o;this.store=r;this.iconRenderer=n;this.dragHandler=null;this.collapseState=new Map;this.instanceLeaveCache=new Map;this.previewBaseColumns=null;this.registry=new uo,this.builder=new go,this.headerBuilder=new mo(n)}parse(e){this.registry.parse(e)}get hasGroups(){return this.registry.hasGroups}get isDraggingGroup(){return this.dragHandler?.isDraggingGroup??!1}isFlat(e){return this.registry.getPath(e).length===0}buildTree(e){return this.builder.build(e,this.registry,this.collapseState,this.colStyles)}toggleGroup(e){let t=e.indexOf(":"),o=t>=0?e.slice(0,t):e,r=t>=0?e.slice(t+1):"",i=!(this.collapseState.get(e)??!1);this.collapseState.set(e,i);let s=this.store.get("columns"),l=new Set(this.registry.getLeavesForGroup(o)),a=this.findInstanceLeaves(s,r,l);if(i){let c=a.filter(p=>p.visible!==!1);this.instanceLeaveCache.set(e,c.map(p=>p.colId));for(let p=0;p<c.length;p++)this.columnModel.setColumnVisible(c[p].colId,p===0)}else{let c=this.instanceLeaveCache.get(e)??a.map(p=>p.colId);for(let p of c)this.columnModel.setColumnVisible(p,!0);this.instanceLeaveCache.delete(e)}this.eventBus.emit(i?x.COLUMN_GROUP_HEADER_COLLAPSED:x.COLUMN_GROUP_HEADER_EXPANDED,{groupId:o})}isCollapsed(e){let t=`${e}:`;for(let[o,r]of this.collapseState)if(o.startsWith(t)&&r)return!0;return!1}getCollapseStateSnapshot(){return Array.from(this.collapseState.entries()).map(([e,t])=>({logicalGroupId:e,collapsed:t}))}applyCollapseState(e){for(let{logicalGroupId:t,collapsed:o}of e)this.collapseState.set(t,o)}handleGroupMoved(e,t,o,r){let n=this.store.get("columns"),i=this.registry.getLeavesForGroup(e),s=n.filter(u=>i.includes(u.colId)&&(u.pinned??null)===t);if(s.length===0)return;let l=new Set(s.map(u=>u.colId)),a=n.filter(u=>!l.has(u.colId)),c=s.map(u=>({...u,pinned:o})),p;r?(p=a.findIndex(u=>u.colId===r),p===-1&&(p=this.findEndOfPanel(a,o))):p=this.findEndOfPanel(a,o);let h=[...a.slice(0,p),...c,...a.slice(p)];this.store.set("columns",h)}resizeGroup(e,t){let o=e.indexOf(":"),r=o>=0?e.slice(0,o):e,n=o>=0?e.slice(o+1):"",i=this.store.get("columns"),s=new Set(this.registry.getLeavesForGroup(r)),l=this.findInstanceLeaves(i,n,s).filter(p=>p.visible!==!1);if(l.length===0)return;let a=l.reduce((p,h)=>p+this.colStyles.getWidth(h.colId),0);if(a<=0||Math.abs(t-a)<1)return;let c=t/a;for(let p of l){let h=this.colStyles.getWidth(p.colId),u=Math.max(p.minWidth??40,Math.round(h*c));this.colStyles.setWidth(p.colId,u),this.columnModel.setColumnWidth(p.colId,u,!1)}}beginDragPreview(){this.previewBaseColumns=this.store.get("columns")}applyPreviewMove(e,t,o,r){let n=this.previewBaseColumns;if(!n)return;let i=this.registry.getLeavesForGroup(e),s=n.filter(h=>i.includes(h.colId)&&(h.pinned??null)===t);if(s.length===0)return;let l=new Set(s.map(h=>h.colId)),a=n.filter(h=>!l.has(h.colId)),c=s.map(h=>({...h,pinned:o})),p;r?(p=a.findIndex(h=>h.colId===r),p===-1&&(p=this.findEndOfPanel(a,o))):p=this.findEndOfPanel(a,o),this.store.set("columns",[...a.slice(0,p),...c,...a.slice(p)])}confirmDragPreview(){this.previewBaseColumns=null}createDragHandler(e){return this.dragHandler||(this.dragHandler=new fo(e,(t,o,r,n)=>this.handleGroupMoved(t,o,r,n),void 0,t=>this.registry.getLeavesForGroup(t))),this.dragHandler}getDragHandler(){return this.dragHandler}getLeavesForGroup(e){return this.registry.getLeavesForGroup(e)}getGroupPositionInfo(e){let t=this.store.get("columns"),o=new Set(this.registry.getLeavesForGroup(e)),r=t.find(l=>o.has(l.colId));if(!r)return{isFirst:!0,isLast:!0,panel:null};let n=r.pinned??null,i=t.filter(l=>(l.pinned??null)===n&&l.visible!==!1),s=i.reduce((l,a,c)=>(o.has(a.colId)&&l.push(c),l),[]);return s.length===0?{isFirst:!0,isLast:!0,panel:n}:{isFirst:s[0]===0,isLast:s[s.length-1]===i.length-1,panel:n}}moveGroupLeft(e){let t=this.store.get("columns"),o=new Set(this.registry.getLeavesForGroup(e)),r=t.find(l=>o.has(l.colId));if(!r)return;let n=r.pinned??null,i=t.filter(l=>(l.pinned??null)===n),s=i.findIndex(l=>o.has(l.colId));s<=0||this.handleGroupMoved(e,n,n,i[s-1].colId)}moveGroupRight(e){let t=this.store.get("columns"),o=new Set(this.registry.getLeavesForGroup(e)),r=t.find(c=>o.has(c.colId));if(!r)return;let n=r.pinned??null,i=t.filter(c=>(c.pinned??null)===n),s=-1;for(let c=0;c<i.length;c++)o.has(i[c].colId)&&(s=c);if(s===-1||s>=i.length-1)return;let l=s+2,a=l<i.length?i[l].colId:null;this.handleGroupMoved(e,n,n,a)}moveGroupToStart(e){let t=this.store.get("columns"),o=new Set(this.registry.getLeavesForGroup(e)),r=t.find(l=>o.has(l.colId));if(!r)return;let n=r.pinned??null,s=t.filter(l=>(l.pinned??null)===n).find(l=>!o.has(l.colId));s&&this.handleGroupMoved(e,n,n,s.colId)}moveGroupToEnd(e){let t=this.store.get("columns"),o=new Set(this.registry.getLeavesForGroup(e)),r=t.find(i=>o.has(i.colId));if(!r)return;let n=r.pinned??null;this.handleGroupMoved(e,n,n,null)}hideGroupLeaves(e){let t=this.registry.getLeavesForGroup(e);for(let o of t)this.columnModel.setColumnVisible(o,!1)}findInstanceLeaves(e,t,o){let r=e.findIndex(i=>i.colId===t);if(r===-1)return[];let n=[];for(let i=r;i<e.length&&o.has(e[i].colId);i++)n.push(e[i]);return n}findEndOfPanel(e,t){let o=-1;for(let r=0;r<e.length;r++)(e[r].pinned??null)===t&&(o=r);return o===-1?e.length:o+1}};var ms=new Set(["hi","hello","hey","please","can","could","would","you","quickly","thanks","thank","photon","ai","assistant","to","the","a","an","in","on","at","is","are","was","were","be","me","my","side","now","just","them","it","their","order","whose","who","that","with","having","value","currently","kindly","want","need","like","this","these"]),fs=new Map([["reset","clear"],["erase","clear"],["wipe","clear"],["delete","remove"],["drop","remove"],["freeze","pin"],["unfreeze","unpin"],["display","show"],["reveal","show"],["everything","all"],["every","all"],["entire","all"],["ascend","ascending"],["descend","descending"],["increasing","ascending"],["decreasing","descending"],["newest","descending"],["oldest","ascending"],["biggest","largest"],["smaller","smallest"],["bigger","largest"],["grouping","group"],["filtering","filter"],["sorting","sort"],["hiding","hide"],["showing","show"],["pinning","pin"],["pinned","pin"],["hidden","hide"],["filtered","filter"],["sorted","sort"],["grouped","group"],["selected","select"]]),vs=new Set(["status","address","series","analysis","this","his","is","was","has","as","gas"]);function _n(d){return d.length<=3||/^\d+$/.test(d)||vs.has(d)?d:d.endsWith("ies")?`${d.slice(0,-3)}y`:/(?:s|x|z|ch|sh)es$/.test(d)?d.slice(0,-2):d.endsWith("ss")?d:d.endsWith("s")?d.slice(0,-1):d}function Et(d){return d.split(" ").filter(e=>e.length>0)}function at(d){let e=_n(d.toLowerCase());return fs.get(e)??e}function Rt(d){let o=d.toLowerCase().replace(/[^\p{L}\p{N}\s.\-:/]/gu," ").split(/\s+/).filter(n=>n.length>0),r=[];for(let n of o){let i=at(n);ms.has(i)||r.push(i)}return r.join(" ")}var bs=new Set([",","and","then","also","plus"]),ys=new Set(["between","from"]),Cs=new Set(["select","deselect"]);function xs(d,e,t){return e<d.length&&t.has(at(d[e]))}function Ln(d,e){let o=d.replace(/[,;]+/g," , ").trim().split(/\s+/).filter(i=>i.length>0);if(o.length===0)return[];let r=[],n=[];for(let i=0;i<o.length;i++){let s=o[i],l=s.toLowerCase(),a=l===",";if(!a&&!bs.has(l)){n.push(s);continue}let c=n.some(u=>ys.has(u.toLowerCase())),p=n.length===1&&Cs.has(at(n[0])),h=xs(o,i+1,e);n.length>0&&!c&&!p&&h?(r.push(n.join(" ")),n=[]):a||n.push(s)}return n.length>0&&r.push(n.join(" ")),r.length>0?r:[d.trim()]}function ws(d,e){let t=new Set(e);return{covered:d.every(r=>t.has(r)),words:d}}function Es(d,e){let t=null;for(let o of d.aliases)ws(o,e).covered&&(!t||o.length>t.length)&&(t=o);return t}var be=class{parse(e,t){let o=null,r=null;for(let s of t.getAll()){let l=Es(s,e);l&&(!r||l.length>r.length)&&(o=s,r=l)}if(!o||!r)return null;let n=new Set(r),i=e.filter(s=>!n.has(s));return{intent:o,remainingTokens:i}}};function Rs(d,e){if(d===e)return 0;if(d.length===0)return e.length;if(e.length===0)return d.length;let t=Array.from({length:e.length+1},(r,n)=>n),o=new Array(e.length+1);for(let r=1;r<=d.length;r++){o[0]=r;for(let n=1;n<=e.length;n++){let i=d[r-1]===e[n-1]?0:1;o[n]=Math.min(t[n]+1,o[n-1]+1,t[n-1]+i)}[t,o]=[o,t]}return t[e.length]}function Dn(d,e){let t=Math.max(d.length,e.length);return t===0?1:1-Rs(d,e)/t}var Ss=.6,An=.75,Is=300,Ts=new Set(["true","yes","active","enabled","on","open"]),Ms=new Set(["false","no","inactive","disabled","off","closed"]),ks=new Set(["of","the","a","an","and","or"]),_s=3,Ls=[{words:["greater","than","or","equal"],operator:"greaterThanOrEqual"},{words:["less","than","or","equal"],operator:"lessThanOrEqual"},{words:["no","less","than"],operator:"greaterThanOrEqual"},{words:["no","more","than"],operator:"lessThanOrEqual"},{words:["not","equal"],operator:"notEquals"},{words:["not","blank"],operator:"notBlank"},{words:["not","empty"],operator:"notBlank"},{words:["at","least"],operator:"greaterThanOrEqual"},{words:["at","most"],operator:"lessThanOrEqual"},{words:["start","with"],operator:"startsWith"},{words:["end","with"],operator:"endsWith"},{words:["greater","than"],operator:"greaterThan"},{words:["more","than"],operator:"greaterThan"},{words:["less","than"],operator:"lessThan"},{words:["fewer","than"],operator:"lessThan"},{words:["not","contain"],operator:"notContains"},{words:["contain"],operator:"contains"},{words:["over"],operator:"greaterThan"},{words:["above"],operator:"greaterThan"},{words:["under"],operator:"lessThan"},{words:["below"],operator:"lessThan"},{words:["before"],operator:"before"},{words:["after"],operator:"after"},{words:["equal"],operator:"equals"},{words:["blank"],operator:"blank"},{words:["empty"],operator:"blank"}],Ds=[...Ls].sort((d,e)=>e.words.length-d.words.length);function B(d){return d.toLowerCase().trim()}function Xo(d){return[d.colId,d.field,d.header].filter(e=>!!e).map(B)}function As(d){let e=new Set;for(let t of Xo(d))for(let o of t.split(" "))e.add(o);return e}var ye=class{constructor(e){this.memory=e}resolveColumn(e,t){if(e.length===0||t.length===0)return null;let o=e.map(B).join(" "),r=this.memory?.getColumnAlias(o);if(r){let l=t.find(a=>a.colId===r);if(l)return l}let n=[o,...e.map(B)].filter(l=>l.length>0),i=null,s=0;for(let l of t){let a=Xo(l);for(let c of n)for(let p of a){let h=this.scoreCandidate(c,p);h>s&&(s=h,i=l)}}return!i||s<Ss?null:(s<1&&this.memory?.learnColumnAlias(o,i.colId),i)}resolveColumns(e,t){let o=[],r=new Set,n=0;for(;n<e.length;){let i=1,s=null;for(let l=Math.min(_s,e.length-n);l>=2;l--){let a=e.slice(n,n+l).map(B).join(" "),c=t.find(p=>Xo(p).includes(a));if(c){s=c,i=l;break}}s||(s=this.resolveColumn([e[n]],t)),s&&!r.has(s.colId)&&(r.add(s.colId),o.push(s)),n+=i}return o}resolveDirection(e){let t=new Set(e.map(B)),o=["asc","ascending","low","smallest","increasing"];return["desc","descending","high","largest","decreasing"].some(n=>t.has(n))?"desc":o.some(n=>t.has(n))?"asc":null}resolveSide(e){let t=new Set(e.map(B));return t.has("left")?"left":t.has("right")?"right":null}resolveIndex(e){for(let t of e)if(/^\d+$/.test(t))return parseInt(t,10);return null}resolveAllRequested(e){return e.some(t=>B(t)==="all")}extractValue(e,t){let o=this.stripColumnTokens(e,t);return o.length?o.join(" "):null}stripColumnTokens(e,t){if(!t)return[...e];let o=As(t);return e.filter(r=>!o.has(B(r)))}resolveNegation(e){let t=e.map(B).indexOf("not");return t<0?{negated:!1,remaining:[...e]}:{negated:!0,remaining:[...e.slice(0,t),...e.slice(t+1)]}}resolveOperator(e){let t=e.map(B);for(let{words:o,operator:r}of Ds){let n=Hs(t,o);if(n<0)continue;let i=[...t.slice(0,n),...t.slice(n+o.length)];return{operator:r,remaining:i}}return{operator:null,remaining:[...t]}}resolveRange(e){let t=e.map(B),o=t.indexOf("between");if(o<0)return null;let r=t.indexOf("and",o+1);if(r<0)return null;let n=t.slice(o+1,r),i=t.slice(r+1);return n.length===0||i.length===0?null:{from:n,to:i}}parseNumberToken(e){let t=e.replace(/[^0-9.\-]/g,"");if(!t)return null;let o=Number(t);return Number.isNaN(o)?null:o}parseDateToken(e){let t=B(e),o=new Date;if(t==="today")return o;if(t==="yesterday")return new Date(o.getTime()-864e5);if(t==="tomorrow")return new Date(o.getTime()+864e5);if(!/\d/.test(t))return null;let r=new Date(t);return Number.isNaN(r.getTime())?null:r}parseBooleanToken(e){let t=B(e);return Ts.has(t)?!0:Ms.has(t)?!1:null}matchOption(e,t){let o=B(e);if(!o)return null;let r=t.dropdownOptions??t.enumOptions?.map(s=>({value:s,label:s}))??[],n=null,i=0;for(let s of r){let l=this.optionScore(o,String(s.label));l>i&&(i=l,n=s)}return i>=An?n:null}resolveColumnByValue(e,t,o){if(e.length===0)return null;let r=e.map(B).join(" "),n=[r,...e.map(B)].filter(a=>a.length>0),i=t.filter(a=>a.filterable!==!1),s=null,l=0;for(let a of i){let c=a.dropdownOptions??a.enumOptions?.map(p=>({value:p,label:p}))??[];for(let p of n){for(let h of c){let u=this.optionScore(p,String(h.label));u>l&&(l=u,s={column:a,rawValue:String(h.value)})}a.type==="boolean"&&this.parseBooleanToken(p)!==null&&1>l&&(l=1,s={column:a,rawValue:p})}}return s&&l>=An?s:this.scanRowDataForValue(r,i,o)}scanRowDataForValue(e,t,o){if(e.length<3)return null;let r=t.filter(s=>s.type==="string"||s.type==="dropdown"||s.type==="email");if(r.length===0)return null;let n=o.getAllRows(),i=Math.min(n.length,Is);for(let s=0;s<i;s++){let l=n[s].data;for(let a of r){let c=l[a.field];if(c!=null&&B(String(c))===e)return{column:a,rawValue:String(c)}}}return null}scoreCandidate(e,t){return e===t?1:e.length>=3&&(t.includes(e)||e.includes(t))?.9:Dn(e,t)}optionScore(e,t){let o=B(t),r=this.scoreCandidate(e,o),n=new Set(e.split(" ").filter(a=>a.length>0)),i=o.split(" ").filter(a=>a.length>0&&!ks.has(a));if(i.length===0)return r;let s=i.filter(a=>n.has(a)).length/i.length,l=s===1?.95:s*.7;return Math.max(r,l)}};function Hs(d,e){if(e.length===0||e.length>d.length)return-1;e:for(let t=0;t<=d.length-e.length;t++){for(let o=0;o<e.length;o++)if(d[t+o]!==e[o])continue e;return t}return-1}var Ce=class{build(e,t,o,r,n){let i=e.resolveEntities(t,o,r,n),s=e.validate?.(i);return s?{command:null,error:s}:{command:e.buildCommand(i),error:null}}};var xe=class{constructor(e){this.registry=e}execute(e,t){let o=this.registry.get(e.type);if(!o)return{success:!1,message:`No handler registered for "${e.type}".`};try{return{success:!0,message:o.execute(e,t),command:e}}catch(r){return{success:!1,message:`Couldn't run that command: ${r instanceof Error?r.message:String(r)}`,command:e}}}};var we=class{constructor(){this.intents=new Map}register(e){this.intents.set(e.key,e)}registerAll(e){for(let t of e)this.register(t)}unregister(e){this.intents.delete(e)}get(e){return this.intents.get(e)}getAll(){return Array.from(this.intents.values())}has(e){return this.intents.has(e)}clear(){this.intents.clear()}};function bo(){return{columnAliases:{},phrases:{}}}var yo=class{constructor(e){this.storageKey=`photon-ai:memory:${e}`,this.snapshot=this.load()}getColumnAlias(e){return this.snapshot.columnAliases[e]??null}learnColumnAlias(e,t){!e||this.snapshot.columnAliases[e]===t||(this.snapshot.columnAliases[e]=t,this.persist())}getPhraseCommands(e){return this.snapshot.phrases[e]??null}learnPhrase(e,t){!e||t.length===0||(this.snapshot.phrases[e]=[...t],this.persist())}clear(){this.snapshot=bo(),this.persist()}load(){try{if(typeof localStorage>"u")return bo();let e=localStorage.getItem(this.storageKey);if(!e)return bo();let t=JSON.parse(e);return{columnAliases:t.columnAliases??{},phrases:t.phrases??{}}}catch{return bo()}}persist(){try{if(typeof localStorage>"u")return;localStorage.setItem(this.storageKey,JSON.stringify(this.snapshot))}catch{}}};function Hn(d){return[...d].sort().join("|")}function Pn(d,e,t){return{column:e.resolveColumn(d,t)??void 0}}function Gn(d){return d.column?d.column.sortable===!1?`"${d.column.header}" isn't sortable.`:null:"I couldn't find a column matching your request."}var Ps={key:"sortAscending",aliases:[["sort","ascending"],["sort","asc"],["ascending"],["asc"],["low","high"],["smallest","largest"],["sort"]],description:"Sorts a column in ascending order.",resolveEntities:Pn,validate:Gn,buildCommand:d=>({type:"sortAscending",params:{colId:d.column.colId,header:d.column.header}}),execute:(d,e)=>{let t=d.params.colId;return e.sortColumn(t,"asc"),`Sorted "${d.params.header}" ascending.`}},Gs={key:"sortDescending",aliases:[["sort","descending"],["sort","desc"],["descending"],["desc"],["high","low"],["largest","smallest"]],description:"Sorts a column in descending order.",resolveEntities:Pn,validate:Gn,buildCommand:d=>({type:"sortDescending",params:{colId:d.column.colId,header:d.column.header}}),execute:(d,e)=>{let t=d.params.colId;return e.sortColumn(t,"desc"),`Sorted "${d.params.header}" descending.`}},Ns={key:"clearSort",aliases:[["clear","sort"],["remove","sort"],["unsort"]],description:"Clears all sorting.",resolveEntities:()=>({}),buildCommand:()=>({type:"clearSort",params:{}}),execute:(d,e)=>(e.clearSort(),"Cleared sorting.")};function Nn(d){d.registerAll([Ps,Gs,Ns])}function Ko(d){return d==="number"||d==="currency"||d==="percentage"?"number":d==="date"||d==="time"?"date":d==="boolean"?"boolean":d==="dropdown"?"dropdown":"string"}var Os={equals:"notEquals",notEquals:"equals",contains:"notContains",notContains:"contains",blank:"notBlank",notBlank:"blank"};function Fs(d){return d==="string"?"contains":"equals"}function Bs(d,e,t){let o=Ko(d.type),r=t.resolveRange(e);if(r){if(o==="number"){let p=t.parseNumberToken(r.from.join(" ")),h=t.parseNumberToken(r.to.join(" "));return p===null||h===null?null:{operator:"inRange",value:p,valueTo:h}}if(o==="date"){let p=t.parseDateToken(r.from.join(" ")),h=t.parseDateToken(r.to.join(" "));return!p||!h?null:{operator:"inRange",value:p,valueTo:h}}return null}let{operator:n,remaining:i}=t.resolveOperator(e),{negated:s,remaining:l}=t.resolveNegation(i),a=l.join(" ").trim(),c=n??Fs(o);if(s&&(c=Os[c]??c),c==="blank"||c==="notBlank")return{operator:c,value:null};if(!a)return null;switch(o){case"number":{let p=t.parseNumberToken(a);return p===null?null:{operator:c,value:p}}case"date":{let p=t.parseDateToken(a);return p?{operator:c,value:p}:null}case"boolean":{let p=t.parseBooleanToken(a);return p===null?null:{operator:c,value:p}}case"dropdown":{let p=t.matchOption(a,d);return p?{operator:c,value:p.value}:null}default:return{operator:c,value:a}}}function zs(d,e,t){let o=Ko(d.type),r=t?"notEquals":"equals";if(o==="boolean"){let n=["true","yes","active","enabled","on","open"].includes(e);return{operator:r,value:n}}return{operator:r,value:e}}function Ws(d,e){let t=Ko(d.type),o={operator:e.operator,value:e.value,valueTo:e.valueTo},r=t==="dropdown"&&e.operator==="equals";return{colId:d.colId,field:d.field,type:t,logic:"and",conditions:[o],selectedIds:r?[e.value]:void 0}}var Vs={key:"applyFilter",aliases:[["show","only"],["filter"],["where"],["find"],["show"]],description:'Filters rows by a column value, with full support for string/number/date/dropdown/boolean operators \u2014 e.g. "filter salary greater than 5000", "show status active", "filter hire date before 2024-01-01", "show price between 10 and 50".',resolveEntities:(d,e,t,o)=>{let r=e.resolveColumn(d,t)??void 0;if(r){let a=e.stripColumnTokens(d,r),c=Bs(r,a,e);return c?{column:r,operator:c.operator,coercedValue:c.value,coercedValueTo:c.valueTo}:{column:r}}if(d.length===0||e.resolveAllRequested(d)&&d.length<=2)return{allColumns:!0};let{negated:n,remaining:i}=e.resolveNegation(d),s=e.resolveColumnByValue(i,t,o);if(!s)return{};let l=zs(s.column,s.rawValue,n);return{column:s.column,operator:l.operator,coercedValue:l.value,coercedValueTo:l.valueTo}},validate:d=>d.allColumns?null:d.column?d.column.filterable===!1?`"${d.column.header}" isn't filterable.`:d.coercedValue===void 0?`What value should I filter "${d.column.header}" by?`:null:"I couldn't find a column or a matching value for that in the grid.",buildCommand:d=>{if(d.allColumns||!d.column)return{type:"clearFilters",params:{}};let e=d.column;return{type:"applyFilter",params:{colId:e.colId,header:e.header,operator:d.operator,value:d.coercedValue,valueTo:d.coercedValueTo}}},execute:(d,e)=>{let t=d.params.colId,o=e.getColumn(t);if(!o)return`"${d.params.header}" is no longer a valid column.`;let r={operator:d.params.operator,value:d.params.value,valueTo:d.params.valueTo};e.setColumnFilter(t,Ws(o,r));let n=r.operator==="blank"||r.operator==="notBlank"?"":r.valueTo!==void 0?` between "${Yo(r.value)}" and "${Yo(r.valueTo)}"`:` to "${Yo(r.value)}"`;return`Filtered "${d.params.header}"${n}.`}};function Yo(d){return d instanceof Date?d.toLocaleDateString():String(d)}var $s={key:"clearFilters",aliases:[["clear","filter"],["remove","filter"],["clear","all","filter"]],description:"Clears all active filters.",resolveEntities:()=>({}),buildCommand:()=>({type:"clearFilters",params:{}}),execute:(d,e)=>(e.clearAllFilters(),"Cleared all filters.")};function On(d){d.registerAll([Vs,$s])}function Zo(d,e,t){return{columns:e.resolveColumns(d,t)}}function Jo(d){return d.columns?.length?null:"I couldn't find a column matching your request."}function Qo(d,e,t,o){for(let n of d)t.setColumnPin(n,o);let r=o?` to the ${o}`:"";return`${o?"Pinned":"Unpinned"} ${e}${r}.`}var Us={key:"pinLeft",aliases:[["pin","left"],["freeze","left"]],description:'Pins one or more columns to the left side of the grid \u2014 e.g. "pin price and income to the left".',resolveEntities:Zo,validate:Jo,buildCommand:d=>({type:"pinLeft",params:{colIds:d.columns.map(e=>e.colId),header:d.columns.map(e=>e.header).join('", "')}}),execute:(d,e)=>Qo(d.params.colIds,`"${d.params.header}"`,e,"left")},qs={key:"pinRight",aliases:[["pin","right"],["freeze","right"]],description:'Pins one or more columns to the right side of the grid \u2014 e.g. "pin price and income to the right".',resolveEntities:Zo,validate:Jo,buildCommand:d=>({type:"pinRight",params:{colIds:d.columns.map(e=>e.colId),header:d.columns.map(e=>e.header).join('", "')}}),execute:(d,e)=>Qo(d.params.colIds,`"${d.params.header}"`,e,"right")},js={key:"unpin",aliases:[["unpin"],["remove","pin"],["un","pin"]],description:'Unpins one or more columns \u2014 e.g. "unpin status, income and year".',resolveEntities:Zo,validate:Jo,buildCommand:d=>({type:"unpin",params:{colIds:d.columns.map(e=>e.colId),header:d.columns.map(e=>e.header).join('", "')}}),execute:(d,e)=>Qo(d.params.colIds,`"${d.params.header}"`,e,null)},Xs={key:"unpinAll",aliases:[["unpin","all","column"],["unpin","every","column"],["remove","all","pin"],["clear","all","pin"],["clear","pin"]],description:"Unpins every column in the grid.",resolveEntities:()=>({}),buildCommand:()=>({type:"unpinAll",params:{}}),execute:(d,e)=>{let t=e.getAllColumns();for(let o of t)e.setColumnPin(o.colId,null);return`Unpinned all ${t.length} columns.`}},Ys={key:"pinHalf",aliases:[["pin","half"],["freeze","half"]],description:`Splits the grid's columns in half and pins them \u2014 "pin half the columns to the left and half to the right" pins the first half left and the second half right.`,resolveEntities:(d,e)=>{let t=new Set(d.map(r=>r.toLowerCase())),o=[];return t.has("left")&&o.push("left"),t.has("right")&&o.push("right"),{sides:o}},validate:d=>d.sides?.length?null:"Which side should I pin the columns to \u2014 left, right, or both?",buildCommand:d=>({type:"pinHalf",params:{sides:d.sides}}),execute:(d,e)=>{let t=d.params.sides,o=e.getAllColumns(),r=Math.ceil(o.length/2),n=o.slice(0,r),i=o.slice(r);if(t.includes("left")&&t.includes("right")){for(let l of n)e.setColumnPin(l.colId,"left");for(let l of i)e.setColumnPin(l.colId,"right");return`Pinned ${n.length} columns left and ${i.length} columns right.`}let s=t[0];for(let l of n)e.setColumnPin(l.colId,s);return`Pinned ${n.length} columns to the ${s}.`}};function Fn(d){d.registerAll([Xs,Ys,Us,qs,js])}function Ks(d,e,t){return{column:e.resolveColumn(d,t)??void 0}}function Bn(d){return d.column?null:"I couldn't find a column matching your request."}var Zs={key:"hideColumn",aliases:[["hide","column"],["hide"]],description:"Hides a column.",resolveEntities:Ks,validate:Bn,buildCommand:d=>({type:"hideColumn",params:{colId:d.column.colId,header:d.column.header}}),execute:(d,e)=>(e.setColumnVisible(d.params.colId,!1),`Hid "${d.params.header}".`)},Js={key:"showColumn",aliases:[["show","column"],["unhide","column"],["unhide"]],description:"Shows a previously hidden column.",resolveEntities:(d,e,t)=>({column:e.resolveColumn(d,t)??void 0}),validate:Bn,buildCommand:d=>({type:"showColumn",params:{colId:d.column.colId,header:d.column.header}}),execute:(d,e)=>(e.setColumnVisible(d.params.colId,!0),`Showed "${d.params.header}".`)},Qs={key:"hideAllColumns",aliases:[["hide","all","column"],["hide","every","column"]],description:"Hides every column in the grid (columns marked `alwaysVisible` are left alone).",resolveEntities:()=>({}),buildCommand:()=>({type:"hideAllColumns",params:{}}),execute:(d,e)=>{let t=0;for(let o of e.getAllColumns())o.alwaysVisible||(e.setColumnVisible(o.colId,!1),t++);return`Hid ${t} column${t===1?"":"s"}.`}},el={key:"showAllColumns",aliases:[["show","all","column"],["show","every","column"],["unhide","all","column"],["unhide","every","column"]],description:"Shows every column in the grid.",resolveEntities:()=>({}),buildCommand:()=>({type:"showAllColumns",params:{}}),execute:(d,e)=>{let t=e.getAllColumns();for(let o of t)e.setColumnVisible(o.colId,!0);return`Showed all ${t.length} columns.`}};function zn(d){d.registerAll([Qs,el,Zs,Js])}var tl={key:"groupBy",aliases:[["group","by"],["group"]],description:'Groups rows by one or more columns \u2014 e.g. "group by department and status".',resolveEntities:(d,e,t)=>({columns:e.resolveColumns(d,t)}),validate:d=>d.columns?.length?d.columns.filter(t=>t.groupable!==!1).length===0?`"${d.columns.map(t=>t.header).join('", "')}" can't be grouped.`:null:"I couldn't find a column matching your request.",buildCommand:d=>{let e=d.columns,t=e.filter(r=>r.groupable!==!1),o=e.filter(r=>r.groupable===!1);return{type:"groupBy",params:{colIds:t.map(r=>r.colId),header:t.map(r=>r.header).join('", "'),skippedHeader:o.length?o.map(r=>r.header).join('", "'):void 0}}},execute:(d,e)=>{for(let r of d.params.colIds)e.groupByColumn(r);let t=d.params.skippedHeader,o=`Grouped by "${d.params.header}".`;return t?`${o} ("${t}" isn't groupable, so it was skipped.)`:o}},ol={key:"ungroup",aliases:[["ungroup"],["clear","group"],["remove","group"]],description:"Clears all row grouping.",resolveEntities:()=>({}),buildCommand:()=>({type:"ungroup",params:{}}),execute:(d,e)=>(e.clearGrouping(),"Cleared grouping.")},rl={key:"expandAllGroups",aliases:[["expand","all","row"],["expand","all","group"],["expand","all"],["expand","group"],["open","all","group"]],description:'Expands every group row (and level qualifiers like "to level one" are treated the same as expanding everything).',resolveEntities:()=>({}),buildCommand:()=>({type:"expandAllGroups",params:{}}),execute:(d,e)=>(e.expandAllGroups(),"Expanded all groups.")},nl={key:"collapseAllGroups",aliases:[["collapse","all","row"],["collapse","all","group"],["collapse","all"],["collapse","group"],["close","all","group"]],description:"Collapses every group row.",resolveEntities:()=>({}),buildCommand:()=>({type:"collapseAllGroups",params:{}}),execute:(d,e)=>(e.collapseAllGroups(),"Collapsed all groups.")},il={key:"expandRow",aliases:[["expand","row"],["open","row"]],description:"Expands a specific row by its (1-based) position \u2014 its group children if it's a group row, or its detail row in a master/detail grid.",resolveEntities:(d,e)=>({index:e.resolveIndex(d)??void 0}),validate:d=>d.index!=null?null:'Tell me which row number to expand, e.g. "expand row 2".',buildCommand:d=>({type:"expandRow",params:{index:d.index}}),execute:(d,e)=>{let t=d.params.index,o=e.getRowByIndex(t-1);return o?o.type==="group"&&o.groupKey?(e.expandGroup(o.groupKey),`Expanded row ${t}.`):(e.expandDetail(o.nodeId),`Expanded row ${t}.`):`There's no row ${t}.`}},sl={key:"collapseRow",aliases:[["collapse","row"],["close","row"]],description:"Collapses a specific row by its (1-based) position.",resolveEntities:(d,e)=>({index:e.resolveIndex(d)??void 0}),validate:d=>d.index!=null?null:'Tell me which row number to collapse, e.g. "collapse row 2".',buildCommand:d=>({type:"collapseRow",params:{index:d.index}}),execute:(d,e)=>{let t=d.params.index,o=e.getRowByIndex(t-1);return o?o.type==="group"&&o.groupKey?(e.collapseGroup(o.groupKey),`Collapsed row ${t}.`):(e.collapseDetail(o.nodeId),`Collapsed row ${t}.`):`There's no row ${t}.`}};function Wn(d){d.registerAll([tl,ol,rl,nl,il,sl])}function er(d){let e=d.getVisibleColumns(),t=d.getVisibleRows();return e.length===0||t.length===0?!1:(d.setCellRange({startRowIndex:0,endRowIndex:t.length-1,startColIndex:0,endColIndex:e.length-1}),!0)}var ll={key:"selectRow",aliases:[["select","row"]],description:"Selects a row by its (1-based) position.",resolveEntities:(d,e)=>({index:e.resolveIndex(d)??void 0}),validate:d=>d.index!=null?null:'Tell me which row number to select, e.g. "select row 5".',buildCommand:d=>({type:"selectRow",params:{index:d.index}}),execute:(d,e)=>{let t=d.params.index,o=e.getRowByIndex(t-1);return o?(e.selectRow(o.nodeId),`Selected row ${t}.`):`There's no row ${t}.`}},al={key:"selectColumn",aliases:[["select","column"]],description:"Selects every cell in a column.",resolveEntities:(d,e,t)=>({column:e.resolveColumn(d,t)??void 0}),validate:d=>d.column?null:"I couldn't find a column matching your request.",buildCommand:d=>({type:"selectColumn",params:{colId:d.column.colId,header:d.column.header}}),execute:(d,e)=>{let t=d.params.colId,r=e.getVisibleColumns().findIndex(i=>i.colId===t),n=e.getVisibleRows().length;return r<0||n===0?`"${d.params.header}" isn't visible right now.`:(e.setCellRange({startRowIndex:0,endRowIndex:n-1,startColIndex:r,endColIndex:r}),`Selected the "${d.params.header}" column.`)}},dl={key:"clearSelection",aliases:[["clear","selection"],["clear","select"],["deselect"]],description:"Clears row and cell selection.",resolveEntities:()=>({}),buildCommand:()=>({type:"clearSelection",params:{}}),execute:(d,e)=>(e.deselectAll(),e.clearCellSelection(),"Cleared selection.")},cl={key:"selectAllCells",aliases:[["select","all","cell"],["select","every","cell"]],description:"Selects every cell in the grid.",resolveEntities:()=>({}),buildCommand:()=>({type:"selectAllCells",params:{}}),execute:(d,e)=>er(e)?"Selected all cells.":"There are no cells to select."},pl={key:"copyAllCells",aliases:[["copy"],["select","copy"],["select","copy","all","cell"]],description:'Selects and copies every cell to the clipboard \u2014 e.g. "copy all cells", "select and copy all the cells".',resolveEntities:()=>({}),buildCommand:()=>({type:"copyAllCells",params:{}}),execute:(d,e)=>er(e)?(e.copySelectedCellsToClipboard(),"Copied all cells to the clipboard."):"There are no cells to copy."},hl={key:"cutAllCells",aliases:[["cut"],["select","cut"],["select","cut","all","cell"]],description:'Selects every cell and copies it to the clipboard \u2014 "cut" never deletes grid data via a command, to avoid irreversible data loss from a misheard instruction.',resolveEntities:()=>({}),buildCommand:()=>({type:"cutAllCells",params:{}}),execute:(d,e)=>er(e)?(e.copySelectedCellsToClipboard(),"Cutting isn't supported, since it would permanently delete data \u2014 copied all cells instead."):"There are no cells to cut."};function Vn(d){d.registerAll([ll,al,cl,pl,hl,dl])}function $n(d,e,t){return{column:e.resolveColumn(d,t)??void 0}}function Un(d){return d.column?null:"I couldn't find a column matching your request."}function qn(d,e){return d.getVisibleColumns().findIndex(t=>t.colId===e)}var ul={key:"moveColumnToStart",aliases:[["move","start"],["move","left"],["move","beginning"],["move","front"],["move","first"]],description:'Moves a column to the leftmost position \u2014 e.g. "move country column to the start".',resolveEntities:$n,validate:Un,buildCommand:d=>({type:"moveColumnToStart",params:{colId:d.column.colId,header:d.column.header}}),execute:(d,e)=>{let t=d.params.colId,o=qn(e,t);return o<=0?`"${d.params.header}" is already at the start.`:(e.moveColumn(o,0),`Moved "${d.params.header}" to the start.`)}},gl={key:"moveColumnToEnd",aliases:[["move","end"],["move","right"],["move","last"]],description:'Moves a column to the rightmost position \u2014 e.g. "move country column to the end".',resolveEntities:$n,validate:Un,buildCommand:d=>({type:"moveColumnToEnd",params:{colId:d.column.colId,header:d.column.header}}),execute:(d,e)=>{let t=d.params.colId,o=qn(e,t),r=e.getVisibleColumns().length-1;return o<0||o===r?`"${d.params.header}" is already at the end.`:(e.moveColumn(o,r),`Moved "${d.params.header}" to the end.`)}};function jn(d){d.registerAll([ul,gl])}function tr(d,e){return d.getColumn(e)?.header??e}var ml={key:"rowCount",aliases:[["row","count"],["count","row"],["total","row"],["how","many","row"],["how","many"],["count"]],description:"Reports how many rows the grid has, and how many are visible after filtering/grouping.",resolveEntities:()=>({}),buildCommand:()=>({type:"rowCount",params:{}}),execute:(d,e)=>{let t=e.getAllRows().filter(r=>r.type==="data").length,o=e.getVisibleRows().filter(r=>r.type==="data").length;return t===o?`There are ${t} row${t===1?"":"s"}.`:`There are ${t} rows total, ${o} visible after filtering/grouping.`}},fl={key:"columnCount",aliases:[["column","count"],["count","column"],["total","column"],["how","many","column"]],description:"Reports how many columns the grid has, and how many are visible vs. hidden.",resolveEntities:()=>({}),buildCommand:()=>({type:"columnCount",params:{}}),execute:(d,e)=>{let t=e.getAllColumns(),o=t.filter(r=>r.visible===!1).length;return o===0?`There are ${t.length} columns, all visible.`:`There are ${t.length} columns total \u2014 ${t.length-o} visible, ${o} hidden.`}},vl={key:"selectionInfo",aliases:[["select","count"],["which","row","select"],["what","select"],["how","many","select"],["how","many","row","select"]],description:"Reports how many rows/cells are currently selected.",resolveEntities:()=>({}),buildCommand:()=>({type:"selectionInfo",params:{}}),execute:(d,e)=>{let t=e.getSelectedCount(),o=e.getCellRanges().length;if(t===0&&o===0)return"Nothing is selected.";let r=[];return t>0&&r.push(`${t} row${t===1?"":"s"}`),o>0&&r.push(`${o} cell range${o===1?"":"s"}`),`Selected: ${r.join(", ")}.`}},bl={key:"filterInfo",aliases:[["what","filter"],["which","filter"],["filter","state"],["active","filter"],["list","filter"]],description:"Lists every column that currently has an active filter, and what it's filtering for.",resolveEntities:()=>({}),buildCommand:()=>({type:"filterInfo",params:{}}),execute:(d,e)=>{let t=e.getFilterModel(),o=Object.values(t);return o.length===0?"No filters are active.":`Active filters: ${o.map(n=>{let i=tr(e,n.colId);if(n.selectedIds?.length)return`${i} (${n.selectedIds.join(", ")})`;let[s]=n.conditions;return`${i} ${s.operator} ${String(s.value)}`}).join("; ")}.`}},yl={key:"sortInfo",aliases:[["what","sort"],["which","sort"],["sort","state"],["current","sort"]],description:"Reports which column(s) the grid is currently sorted by.",resolveEntities:()=>({}),buildCommand:()=>({type:"sortInfo",params:{}}),execute:(d,e)=>{let t=e.getSortConfig();return t.length===0?"No column is sorted.":`Sorted by: ${t.map(o=>`${tr(e,o.colId)} (${o.order})`).join(", ")}.`}},Cl={key:"pinInfo",aliases:[["which","pin"],["what","pin"],["pin","state"],["list","pin"]],description:"Lists which columns are pinned left/right.",resolveEntities:()=>({}),buildCommand:()=>({type:"pinInfo",params:{}}),execute:(d,e)=>{let t=e.getAllColumns(),o=t.filter(i=>i.pinned==="left").map(i=>i.header),r=t.filter(i=>i.pinned==="right").map(i=>i.header);if(o.length===0&&r.length===0)return"No columns are pinned.";let n=[];return o.length&&n.push(`left: ${o.join(", ")}`),r.length&&n.push(`right: ${r.join(", ")}`),`Pinned \u2014 ${n.join(" | ")}.`}},xl={key:"hiddenColumnsInfo",aliases:[["which","hide"],["what","hide"],["hide","state"],["list","hide"],["which","column","hide"],["what","column","hide"],["list","hide","column"]],description:"Lists which columns are currently hidden.",resolveEntities:()=>({}),buildCommand:()=>({type:"hiddenColumnsInfo",params:{}}),execute:(d,e)=>{let t=e.getAllColumns().filter(o=>o.visible===!1).map(o=>o.header);return t.length===0?"No columns are hidden.":`Hidden columns: ${t.join(", ")}.`}},wl={key:"groupInfo",aliases:[["what","group"],["which","group"],["group","state"],["how","group"],["what","group","by"],["which","group","by"]],description:"Reports which column(s) rows are currently grouped by.",resolveEntities:()=>({}),buildCommand:()=>({type:"groupInfo",params:{}}),execute:(d,e)=>{let t=e.getGridState().groupedColumns??[];return t.length===0?"Rows aren't grouped by anything.":`Grouped by: ${t.map(o=>tr(e,o)).join(" > ")}.`}};function El(d){let e={key:"help",aliases:[["help"],["what","do"],["list","command"],["what","command"]],description:"Lists every command Photon AI understands.",resolveEntities:()=>({}),buildCommand:()=>({type:"help",params:{}}),execute:()=>`Here's what I can do:
4538
4306
  ${d.getAll().map(o=>o.description).filter(o=>!!o).map(o=>`\u2022 ${o}`).join(`
4539
- `)}`};d.register(e)}function qn(d){d.registerAll([hl,ul,gl,ml,fl,vl,bl,yl]),Cl(d)}function St(d){Pn(d),Gn(d),Nn(d),Fn(d),Bn(d),zn(d),Un(d),qn(d)}var pe=class{constructor(e,t){this.api=e;this.registry=t}build(){return{columns:this.buildColumns(),capabilities:this.buildCapabilities(),state:this.buildState()}}buildColumns(){return this.api.getAllColumns().map(e=>this.toColumnContext(e))}toColumnContext(e){let t=this.columnOptions(e);return{colId:e.colId,header:e.header,field:e.field,type:e.type,sortable:e.sortable!==!1,filterable:e.filterable!==!1,groupable:e.groupable!==!1,pinned:e.pinned??null,visible:e.visible!==!1,...t?{options:t}:{}}}columnOptions(e){if(e.dropdownOptions?.length)return e.dropdownOptions.map(t=>t.value);if(e.enumOptions?.length)return e.enumOptions}buildCapabilities(){return this.registry.getAll().map(e=>({type:e.key,description:e.description??e.key}))}buildState(){return{totalRowCount:this.api.getAllRows().filter(e=>e.type==="data").length,visibleRowCount:this.api.getVisibleRows().filter(e=>e.type==="data").length,sort:this.buildSortState(),filters:this.buildFilterState(),groupedColumns:[...this.api.getGridState().groupedColumns??[]],selectedRowCount:this.api.getSelectedCount()}}buildSortState(){return this.api.getSortConfig().map(e=>({colId:e.colId,order:e.order}))}buildFilterState(){return Object.values(this.api.getFilterModel()).map(e=>({colId:e.colId,summary:xl(e)}))}};function xl(d){if(d.selectedIds?.length)return`in [${d.selectedIds.join(", ")}]`;let e=d.conditions[0];if(!e)return"active";if(e.operator==="blank"||e.operator==="notBlank")return e.operator;let t=e.valueTo!==void 0?`..${String(e.valueTo)}`:"";return`${e.operator} ${String(e.value)}${t}`}var he=class{constructor(e){this.api=e}normalize(e){let t={...e.params};return this.normalizeColumnTargets(t),e.type==="applyFilter"&&this.normalizeFilterParams(t),{type:e.type,params:t}}normalizeColumnTargets(e){if(typeof e.colId=="string"){let t=this.resolveColumn(e.colId);t&&(e.colId=t.colId,typeof e.header!="string"&&(e.header=t.header))}if(Array.isArray(e.colIds)){let t=e.colIds.map(o=>typeof o=="string"?this.resolveColumn(o):void 0).filter(o=>!!o);t.length>0&&(e.colIds=t.map(o=>o.colId),typeof e.header!="string"&&(e.header=t.map(o=>o.header).join('", "')))}}normalizeFilterParams(e){let t=typeof e.colId=="string"?e.colId:void 0,o=t?this.resolveColumn(t):void 0;o&&(e.colId=o.colId,typeof e.operator!="string"&&(e.operator=wl(o.type)),e.value=jn(e.value,o.type),e.valueTo!==void 0&&(e.valueTo=jn(e.valueTo,o.type)))}resolveColumn(e){let t=this.api.getColumn(e);if(t)return t;let o=e.trim().toLowerCase();return this.api.getAllColumns().find(r=>r.header.toLowerCase()===o)}};function wl(d){return d==="number"||d==="currency"||d==="percentage"||d==="date"||d==="time"||d==="boolean"||d==="dropdown"?"equals":"contains"}function jn(d,e){if(d==null)return d;if(e==="date"||e==="time"){if(d instanceof Date)return d;let t=new Date(String(d));return Number.isNaN(t.getTime())?d:t}if(e==="number"||e==="currency"||e==="percentage"){if(typeof d=="number")return d;let t=Number(String(d).replace(/,/g,"").trim());return Number.isNaN(t)?d:t}if(e==="boolean"){if(typeof d=="boolean")return d;let t=String(d).trim().toLowerCase();return["true","yes","active","enabled","on","1"].includes(t)?!0:["false","no","inactive","disabled","off","0"].includes(t)?!1:d}return d}function at(d){let e=["You are Photon AI, the built-in assistant for Photon Grid, an enterprise data grid.","Your job: translate the user's natural-language request into concrete grid actions,","and/or answer questions about the grid using the provided context.","","You will be given, as JSON:",' \u2022 capabilities \u2014 the ONLY actions you may emit (each has a "type" key and a description),'," \u2022 columns \u2014 every column with its colId, header, data type, and flags,"," \u2022 state \u2014 the grid's current sort, filters, grouping, row/selection counts.","","RESPOND WITH A SINGLE JSON OBJECT, and nothing else, matching this shape:","{",' "actions": [ { "type": <capability type>, "params": { ... } } ],',' "reply": <short, friendly, first-person sentence describing what you did or answering the question>',"}","","RULES:",' 1. "type" MUST be one of the capability "type" values verbatim. Never invent an action.',' 2. Reference columns ONLY by their exact "colId" from the columns list (not the header text).',' 3. A request may map to MULTIPLE actions (e.g. "hide id and sort by price desc") \u2014 list them in order.'," 4. If the request is a question about the grid (counts, current sort/filter, etc.), answer it in",' "reply" using the state/columns context and return "actions": []. Prefer the matching info'," capability (e.g. rowCount, sortInfo) when one exists.",' 5. If you cannot map the request to any capability, return "actions": [] and explain briefly in "reply".'," 6. Never include markdown, code fences, comments, or trailing text outside the JSON object.",' 7. Keep "reply" concise (one or two sentences) and never expose colIds or internal jargon to the user.',"","PARAMETER CONVENTIONS (params object per action type):"," \u2022 Single-column actions \u2014 sortAscending, sortDescending, hideColumn, showColumn, selectColumn,",' moveColumnToStart, moveColumnToEnd: { "colId": "<colId>" }',' \u2022 Multi-column actions \u2014 pinLeft, pinRight, unpin, groupBy: { "colIds": ["<colId>", ...] }',' \u2022 applyFilter: { "colId": "<colId>", "operator": <operator>, "value": <typed value>, "valueTo": <typed value, only for inRange> }',' \u2022 pinHalf: { "sides": ["left"] | ["right"] | ["left", "right"] }',' \u2022 Row-index actions \u2014 selectRow, expandRow, collapseRow: { "index": <1-based row number> }'," \u2022 Every other action (clearSort, clearFilters, unpinAll, hideAllColumns, showAllColumns, ungroup,"," expandAllGroups, collapseAllGroups, clearSelection, selectAllCells, copyAllCells, and all info"," actions): {}","","FILTER OPERATORS by column type:"," \u2022 string: contains, notContains, equals, notEquals, startsWith, endsWith, blank, notBlank"," \u2022 number/currency/percentage: equals, notEquals, greaterThan, greaterThanOrEqual, lessThan,"," lessThanOrEqual, inRange (needs value + valueTo)",' \u2022 date/time: equals, before, after, inRange (needs value + valueTo). Dates as ISO strings "YYYY-MM-DD".'," \u2022 boolean: equals with value true/false",` \u2022 dropdown: equals with value taken from that column's "options" list`," Emit numbers as JSON numbers, booleans as JSON booleans, dates as ISO strings \u2014 never quote a number."].join(`
4307
+ `)}`};d.register(e)}function Xn(d){d.registerAll([ml,fl,vl,bl,yl,Cl,xl,wl]),El(d)}function St(d){Nn(d),On(d),Fn(d),zn(d),Wn(d),Vn(d),jn(d),Xn(d)}var pe=class{constructor(e,t){this.api=e;this.registry=t}build(){return{columns:this.buildColumns(),capabilities:this.buildCapabilities(),state:this.buildState()}}buildColumns(){return this.api.getAllColumns().map(e=>this.toColumnContext(e))}toColumnContext(e){let t=this.columnOptions(e);return{colId:e.colId,header:e.header,field:e.field,type:e.type,sortable:e.sortable!==!1,filterable:e.filterable!==!1,groupable:e.groupable!==!1,pinned:e.pinned??null,visible:e.visible!==!1,...t?{options:t}:{}}}columnOptions(e){if(e.dropdownOptions?.length)return e.dropdownOptions.map(t=>t.value);if(e.enumOptions?.length)return e.enumOptions}buildCapabilities(){return this.registry.getAll().map(e=>({type:e.key,description:e.description??e.key}))}buildState(){return{totalRowCount:this.api.getAllRows().filter(e=>e.type==="data").length,visibleRowCount:this.api.getVisibleRows().filter(e=>e.type==="data").length,sort:this.buildSortState(),filters:this.buildFilterState(),groupedColumns:[...this.api.getGridState().groupedColumns??[]],selectedRowCount:this.api.getSelectedCount()}}buildSortState(){return this.api.getSortConfig().map(e=>({colId:e.colId,order:e.order}))}buildFilterState(){return Object.values(this.api.getFilterModel()).map(e=>({colId:e.colId,summary:Rl(e)}))}};function Rl(d){if(d.selectedIds?.length)return`in [${d.selectedIds.join(", ")}]`;let e=d.conditions[0];if(!e)return"active";if(e.operator==="blank"||e.operator==="notBlank")return e.operator;let t=e.valueTo!==void 0?`..${String(e.valueTo)}`:"";return`${e.operator} ${String(e.value)}${t}`}var he=class{constructor(e){this.api=e}normalize(e){let t={...e.params};return this.normalizeColumnTargets(t),e.type==="applyFilter"&&this.normalizeFilterParams(t),{type:e.type,params:t}}normalizeColumnTargets(e){if(typeof e.colId=="string"){let t=this.resolveColumn(e.colId);t&&(e.colId=t.colId,typeof e.header!="string"&&(e.header=t.header))}if(Array.isArray(e.colIds)){let t=e.colIds.map(o=>typeof o=="string"?this.resolveColumn(o):void 0).filter(o=>!!o);t.length>0&&(e.colIds=t.map(o=>o.colId),typeof e.header!="string"&&(e.header=t.map(o=>o.header).join('", "')))}}normalizeFilterParams(e){let t=typeof e.colId=="string"?e.colId:void 0,o=t?this.resolveColumn(t):void 0;o&&(e.colId=o.colId,typeof e.operator!="string"&&(e.operator=Sl(o.type)),e.value=Yn(e.value,o.type),e.valueTo!==void 0&&(e.valueTo=Yn(e.valueTo,o.type)))}resolveColumn(e){let t=this.api.getColumn(e);if(t)return t;let o=e.trim().toLowerCase();return this.api.getAllColumns().find(r=>r.header.toLowerCase()===o)}};function Sl(d){return d==="number"||d==="currency"||d==="percentage"||d==="date"||d==="time"||d==="boolean"||d==="dropdown"?"equals":"contains"}function Yn(d,e){if(d==null)return d;if(e==="date"||e==="time"){if(d instanceof Date)return d;let t=new Date(String(d));return Number.isNaN(t.getTime())?d:t}if(e==="number"||e==="currency"||e==="percentage"){if(typeof d=="number")return d;let t=Number(String(d).replace(/,/g,"").trim());return Number.isNaN(t)?d:t}if(e==="boolean"){if(typeof d=="boolean")return d;let t=String(d).trim().toLowerCase();return["true","yes","active","enabled","on","1"].includes(t)?!0:["false","no","inactive","disabled","off","0"].includes(t)?!1:d}return d}function dt(d){let e=["You are Photon AI, the built-in assistant for Photon Grid, an enterprise data grid.","Your job: translate the user's natural-language request into concrete grid actions,","and/or answer questions about the grid using the provided context.","","You will be given, as JSON:",' \u2022 capabilities \u2014 the ONLY actions you may emit (each has a "type" key and a description),'," \u2022 columns \u2014 every column with its colId, header, data type, and flags,"," \u2022 state \u2014 the grid's current sort, filters, grouping, row/selection counts.","","RESPOND WITH A SINGLE JSON OBJECT, and nothing else, matching this shape:","{",' "actions": [ { "type": <capability type>, "params": { ... } } ],',' "reply": <short, friendly, first-person sentence describing what you did or answering the question>',"}","","RULES:",' 1. "type" MUST be one of the capability "type" values verbatim. Never invent an action.',' 2. Reference columns ONLY by their exact "colId" from the columns list (not the header text).',' 3. A request may map to MULTIPLE actions (e.g. "hide id and sort by price desc") \u2014 list them in order.'," 4. If the request is a question about the grid (counts, current sort/filter, etc.), answer it in",' "reply" using the state/columns context and return "actions": []. Prefer the matching info'," capability (e.g. rowCount, sortInfo) when one exists.",' 5. If you cannot map the request to any capability, return "actions": [] and explain briefly in "reply".'," 6. Never include markdown, code fences, comments, or trailing text outside the JSON object.",' 7. Keep "reply" concise (one or two sentences) and never expose colIds or internal jargon to the user.',"","PARAMETER CONVENTIONS (params object per action type):"," \u2022 Single-column actions \u2014 sortAscending, sortDescending, hideColumn, showColumn, selectColumn,",' moveColumnToStart, moveColumnToEnd: { "colId": "<colId>" }',' \u2022 Multi-column actions \u2014 pinLeft, pinRight, unpin, groupBy: { "colIds": ["<colId>", ...] }',' \u2022 applyFilter: { "colId": "<colId>", "operator": <operator>, "value": <typed value>, "valueTo": <typed value, only for inRange> }',' \u2022 pinHalf: { "sides": ["left"] | ["right"] | ["left", "right"] }',' \u2022 Row-index actions \u2014 selectRow, expandRow, collapseRow: { "index": <1-based row number> }'," \u2022 Every other action (clearSort, clearFilters, unpinAll, hideAllColumns, showAllColumns, ungroup,"," expandAllGroups, collapseAllGroups, clearSelection, selectAllCells, copyAllCells, and all info"," actions): {}","","FILTER OPERATORS by column type:"," \u2022 string: contains, notContains, equals, notEquals, startsWith, endsWith, blank, notBlank"," \u2022 number/currency/percentage: equals, notEquals, greaterThan, greaterThanOrEqual, lessThan,"," lessThanOrEqual, inRange (needs value + valueTo)",' \u2022 date/time: equals, before, after, inRange (needs value + valueTo). Dates as ISO strings "YYYY-MM-DD".'," \u2022 boolean: equals with value true/false",` \u2022 dropdown: equals with value taken from that column's "options" list`," Emit numbers as JSON numbers, booleans as JSON booleans, dates as ISO strings \u2014 never quote a number."].join(`
4540
4308
  `),t=d?.trim();return t?`${e}
4541
4309
 
4542
4310
  ADDITIONAL INSTRUCTIONS:
4543
4311
  ${t}`:e}function Co(d){return["GRID CONTEXT:",`capabilities: ${JSON.stringify(d.capabilities)}`,`columns: ${JSON.stringify(d.columns)}`,`state: ${JSON.stringify(d.state)}`].join(`
4544
- `)}var ue=(s=>(s.Network="network",s.Http="http",s.RateLimit="rate-limit",s.Auth="auth",s.Blocked="blocked",s.InvalidResponse="invalid-response",s.Timeout="timeout",s))(ue||{}),P=class extends Error{constructor(t,o,r){super(o);this.kind=t;this.status=r;this.name="PhotonAIProviderError"}};function xo(d){return d instanceof P?d.message:d instanceof Error?`Photon AI request failed: ${d.message}`:"Photon AI request failed due to an unexpected error."}var El=new Set(["hi","hello","hey","hiya","howdy","yo","greetings"]),Rl=new Set(["thanks","thank","thankyou","thx","ty"]),Sl=`Hi! Tell me what to do \u2014 sort, filter, pin, group, hide/show columns, move columns, selection, and more \u2014 or ask me a question about the grid's current state (try "help" to see everything I understand).`,Il="You're welcome! Let me know if there's anything else you'd like to do with the grid.",Ee=class d{constructor(e,t,o,r){this.api=e;this.parser=new be;this.builder=new Ce;this.registry=t??d.createDefaultRegistry(),this.executor=new xe(this.registry),this.memory=new yo(Dn(e.getAllColumns().map(n=>n.colId))),this.resolver=new ye(this.memory),this.provider=o??null,this.providerSystemInstruction=r,this.contextBuilder=this.provider?new pe(this.api,this.registry):null,this.commandNormalizer=this.provider?new he(this.api):null}static createDefaultRegistry(){let e=new we;return St(e),e}getRegistry(){return this.registry}forgetLearnedMemory(){this.memory.clear()}submit(e){let t=e.trim();if(!t)return{success:!1,message:"Type a command first."};let r=Mn(t,this.clauseVerbs()).map(n=>this.runClause(n));return r.length===1?r[0]:{success:r.every(n=>n.success),message:r.map((n,i)=>`${i+1}) ${n.message}`).join(" ")}}hasProvider(){return this.provider!==null}async submitAsync(e,t){let o=e.trim();if(!o)return{success:!1,message:"Type a command first."};if(!this.provider||!this.contextBuilder||!this.commandNormalizer)return this.submit(o);try{let r=this.contextBuilder.build(),n=await this.provider.generate({systemInstruction:at(this.providerSystemInstruction),gridContext:r,userCommand:o,signal:t});return this.executeGeneratedActions(n.actions,n.reply)}catch(r){return{success:!1,message:xo(r)}}}executeGeneratedActions(e,t){let o=this.commandNormalizer,r=[],n=[],i;for(let a of e){let c=o.normalize(a),p=this.executor.execute(c,this.api);r.push(p.message),p.command&&(i=p.command),p.success||n.push(p.message)}let s=t||r.join(" ")||"I understood your request but there was nothing to do.",l=n.length>0?`${s} (${n.join(" ")})`:s;return{success:n.length===0,message:l,command:i}}runClause(e){let t=Rt(e);if(!t)return this.replyToSmallTalk(e);let o=this.memory.getPhraseCommands(t);if(o&&o.every(c=>this.commandStillValid(c)))return this.runCommands(o);let r=Et(t);if(r.length===0)return{success:!1,message:`I couldn't parse "${e}" \u2014 try rephrasing.`};let n=this.parser.parse(r,this.registry);if(!n)return{success:!1,message:`I don't know how to "${e}" yet.`};let i=this.api.getAllColumns(),{command:s,error:l}=this.builder.build(n.intent,n.remainingTokens,this.resolver,i,this.api);if(l||!s)return{success:!1,message:l??"Something went wrong building that command."};let a=this.executor.execute(s,this.api);return a.success&&this.memory.learnPhrase(t,[s]),a}runCommands(e){let t=[];for(let o of e){let r=this.executor.execute(o,this.api);if(t.push(r.message),!r.success)return{success:!1,message:t.join(" ")}}return{success:!0,message:t.join(" ")}}replyToSmallTalk(e){let t=e.toLowerCase().replace(/[^\p{L}\s]/gu," ").split(/\s+/).filter(o=>o.length>0);return t.length>0&&t.every(o=>El.has(o))?{success:!0,message:Sl}:t.length>0&&t.every(o=>Rl.has(o))?{success:!0,message:Il}:{success:!1,message:`I couldn't parse "${e}" \u2014 try rephrasing.`}}commandStillValid(e){let t=e.params.colId;return typeof t!="string"||!!this.api.getColumn(t)}clauseVerbs(){let e=new Set;for(let t of this.registry.getAll())for(let o of t.aliases)o[0]&&e.add(lt(o[0]));return e}};var er=(r=>(r.Gemini="gemini",r.OpenAI="openai",r.Anthropic="anthropic",r.Custom="custom",r))(er||{});function wo(d){return`${Co(d.gridContext)}
4312
+ `)}var ue=(s=>(s.Network="network",s.Http="http",s.RateLimit="rate-limit",s.Auth="auth",s.Blocked="blocked",s.InvalidResponse="invalid-response",s.Timeout="timeout",s))(ue||{}),P=class extends Error{constructor(t,o,r){super(o);this.kind=t;this.status=r;this.name="PhotonAIProviderError"}};function xo(d){return d instanceof P?d.message:d instanceof Error?`Photon AI request failed: ${d.message}`:"Photon AI request failed due to an unexpected error."}var Il=new Set(["hi","hello","hey","hiya","howdy","yo","greetings"]),Tl=new Set(["thanks","thank","thankyou","thx","ty"]),Ml=`Hi! Tell me what to do \u2014 sort, filter, pin, group, hide/show columns, move columns, selection, and more \u2014 or ask me a question about the grid's current state (try "help" to see everything I understand).`,kl="You're welcome! Let me know if there's anything else you'd like to do with the grid.",Ee=class d{constructor(e,t,o,r){this.api=e;this.parser=new be;this.builder=new Ce;this.registry=t??d.createDefaultRegistry(),this.executor=new xe(this.registry),this.memory=new yo(Hn(e.getAllColumns().map(n=>n.colId))),this.resolver=new ye(this.memory),this.provider=o??null,this.providerSystemInstruction=r,this.contextBuilder=this.provider?new pe(this.api,this.registry):null,this.commandNormalizer=this.provider?new he(this.api):null}static createDefaultRegistry(){let e=new we;return St(e),e}getRegistry(){return this.registry}forgetLearnedMemory(){this.memory.clear()}submit(e){let t=e.trim();if(!t)return{success:!1,message:"Type a command first."};let r=Ln(t,this.clauseVerbs()).map(n=>this.runClause(n));return r.length===1?r[0]:{success:r.every(n=>n.success),message:r.map((n,i)=>`${i+1}) ${n.message}`).join(" ")}}hasProvider(){return this.provider!==null}async submitAsync(e,t){let o=e.trim();if(!o)return{success:!1,message:"Type a command first."};if(!this.provider||!this.contextBuilder||!this.commandNormalizer)return this.submit(o);try{let r=this.contextBuilder.build(),n=await this.provider.generate({systemInstruction:dt(this.providerSystemInstruction),gridContext:r,userCommand:o,signal:t});return this.executeGeneratedActions(n.actions,n.reply)}catch(r){return{success:!1,message:xo(r)}}}executeGeneratedActions(e,t){let o=this.commandNormalizer,r=[],n=[],i;for(let a of e){let c=o.normalize(a),p=this.executor.execute(c,this.api);r.push(p.message),p.command&&(i=p.command),p.success||n.push(p.message)}let s=t||r.join(" ")||"I understood your request but there was nothing to do.",l=n.length>0?`${s} (${n.join(" ")})`:s;return{success:n.length===0,message:l,command:i}}runClause(e){let t=Rt(e);if(!t)return this.replyToSmallTalk(e);let o=this.memory.getPhraseCommands(t);if(o&&o.every(c=>this.commandStillValid(c)))return this.runCommands(o);let r=Et(t);if(r.length===0)return{success:!1,message:`I couldn't parse "${e}" \u2014 try rephrasing.`};let n=this.parser.parse(r,this.registry);if(!n)return{success:!1,message:`I don't know how to "${e}" yet.`};let i=this.api.getAllColumns(),{command:s,error:l}=this.builder.build(n.intent,n.remainingTokens,this.resolver,i,this.api);if(l||!s)return{success:!1,message:l??"Something went wrong building that command."};let a=this.executor.execute(s,this.api);return a.success&&this.memory.learnPhrase(t,[s]),a}runCommands(e){let t=[];for(let o of e){let r=this.executor.execute(o,this.api);if(t.push(r.message),!r.success)return{success:!1,message:t.join(" ")}}return{success:!0,message:t.join(" ")}}replyToSmallTalk(e){let t=e.toLowerCase().replace(/[^\p{L}\s]/gu," ").split(/\s+/).filter(o=>o.length>0);return t.length>0&&t.every(o=>Il.has(o))?{success:!0,message:Ml}:t.length>0&&t.every(o=>Tl.has(o))?{success:!0,message:kl}:{success:!1,message:`I couldn't parse "${e}" \u2014 try rephrasing.`}}commandStillValid(e){let t=e.params.colId;return typeof t!="string"||!!this.api.getColumn(t)}clauseVerbs(){let e=new Set;for(let t of this.registry.getAll())for(let o of t.aliases)o[0]&&e.add(at(o[0]));return e}};var or=(r=>(r.Gemini="gemini",r.OpenAI="openai",r.Anthropic="anthropic",r.Custom="custom",r))(or||{});function wo(d){return`${Co(d.gridContext)}
4545
4313
 
4546
4314
  USER COMMAND:
4547
- ${d.userCommand}`}function It(d){let e=d.trim();if(!e)throw new P("invalid-response","The model returned an empty response.");let t;try{t=JSON.parse(e)}catch{if(t=kl(e),t===void 0)throw new P("invalid-response","The model returned malformed JSON that could not be parsed.")}return tr(t)}function tr(d){if(typeof d!="object"||d===null)throw new P("invalid-response","The model response was not a JSON object.");let e=d,t=Tl(e.actions),o=typeof e.reply=="string"?e.reply.trim():"";if(t.length===0&&!o)throw new P("invalid-response","The model response contained neither an action nor a reply.");return{actions:t,reply:o}}function Tl(d){if(!Array.isArray(d))return[];let e=[];for(let t of d){if(typeof t!="object"||t===null)continue;let o=t;if(typeof o.type!="string"||!o.type)continue;let r=typeof o.params=="object"&&o.params!==null?o.params:{};e.push({type:o.type,params:r})}return e}function kl(d){let e=d.indexOf("{"),t=d.lastIndexOf("}");if(!(e<0||t<=e))try{return JSON.parse(d.slice(e,t+1))}catch{return}}function Ml(d,e,t){let o=d.replace("{model}",encodeURIComponent(e));if(!t)return o;let r=o.includes("?")?"&":"?";return`${o}${r}key=${encodeURIComponent(t)}`}function Xn(d,e){let t=d;for(let o of e){if(t==null)return"";t=t[o]}return typeof t=="string"?t:""}var _l={defaultApiUrl:"https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent",defaultModel:"gemini-2.5-flash",buildUrl:Ml,buildHeaders:()=>({}),transformRequest:d=>({systemInstruction:{parts:[{text:d.systemInstruction}]},contents:[{role:"user",parts:[{text:wo(d)}]}],generationConfig:{responseMimeType:"application/json",temperature:d.temperature}}),transformResponse:d=>{let e=d;if(e.promptFeedback?.blockReason)throw new P("blocked",`Gemini blocked the request (${e.promptFeedback.blockReason}).`);let t=e.candidates?.[0];if(!t)throw new P("blocked","Gemini returned no answer for that request.");let o=t.content?.parts?.map(r=>r.text??"").join("")??"";return It(o)}},Ll={defaultApiUrl:"https://api.openai.com/v1/chat/completions",defaultModel:"gpt-4o-mini",buildUrl:d=>d,buildHeaders:d=>{let e={};return d&&(e.Authorization=`Bearer ${d}`),e},transformRequest:d=>({model:d.model,temperature:d.temperature,response_format:{type:"json_object"},messages:[{role:"system",content:d.systemInstruction},{role:"user",content:wo(d)}]}),transformResponse:d=>It(Xn(d,["choices",0,"message","content"]))},Dl={defaultApiUrl:"https://api.anthropic.com/v1/messages",defaultModel:"claude-haiku-4-5-20251001",buildUrl:d=>d,buildHeaders:d=>{let e={"anthropic-version":"2023-06-01","anthropic-dangerous-direct-browser-access":"true"};return d&&(e["x-api-key"]=d),e},transformRequest:d=>({model:d.model,max_tokens:1024,temperature:d.temperature,system:d.systemInstruction,messages:[{role:"user",content:wo(d)}]}),transformResponse:d=>It(Xn(d,["content",0,"text"]))},Al={gemini:_l,openai:Ll,anthropic:Dl,custom:null};function Yn(d){return Al[d]??null}var Hl=3e4,ge=class{constructor(e){if(this.type=e.type??"gemini",this.preset=Yn(this.type),!this.preset&&(!e.apiUrl||!e.requestTransformer||!e.responseTransformer))throw new P("http","A custom Photon AI provider requires apiUrl, requestTransformer, and responseTransformer.");this.apiKey=e.apiKey?.trim()||void 0,this.apiUrl=e.apiUrl?.trim()||this.preset?.defaultApiUrl||"",this.model=e.model?.trim()||this.preset?.defaultModel||"",this.headers={...e.headers??{}},this.temperature=e.temperature??0,this.timeoutMs=e.requestTimeoutMs??Hl,this.transformRequest=e.requestTransformer??this.preset.transformRequest,this.transformResponse=e.responseTransformer??this.preset.transformResponse}async generate(e){let t={systemInstruction:e.systemInstruction,userCommand:e.userCommand,gridContext:e.gridContext,model:this.model,temperature:this.temperature},o=this.transformRequest(t),r=this.buildUrl(),n=this.buildHeaders(),i=await this.fetchWithTimeout(r,n,o,e.signal),s=await this.parseHttpResponse(i);return this.transformResponse(s)}buildUrl(){return this.preset?this.preset.buildUrl(this.apiUrl,this.model,this.apiKey):this.apiUrl}buildHeaders(){return{"Content-Type":"application/json",...this.preset?this.preset.buildHeaders(this.apiKey):{},...this.headers}}async fetchWithTimeout(e,t,o,r){let n=new AbortController,i=setTimeout(()=>n.abort(),this.timeoutMs),s=()=>n.abort();r?.addEventListener("abort",s,{once:!0});try{return await fetch(e,{method:"POST",headers:t,body:JSON.stringify(o),signal:n.signal})}catch(l){if(r?.aborted)throw new P("network","Photon AI request was cancelled.");if(n.signal.aborted)throw new P("timeout",`The model did not respond within ${this.timeoutMs/1e3}s. Please try again.`);let a=l instanceof Error?l.message:String(l);throw new P("network",`Couldn't reach the model provider: ${a}`)}finally{clearTimeout(i),r?.removeEventListener("abort",s)}}async parseHttpResponse(e){if(e.ok)try{return await e.json()}catch{throw new P("invalid-response","The model provider returned a response that was not valid JSON.")}let t=await this.readErrorMessage(e),o=t?` ${t}`:"";throw e.status===429?new P("rate-limit",`Rate limit reached. Please wait a moment and try again.${o}`,429):e.status===401||e.status===403?new P("auth",`The model provider rejected the API key (HTTP ${e.status}).${o}`,e.status):new P("http",`The model provider request failed (HTTP ${e.status}).${o}`,e.status)}async readErrorMessage(e){try{let t=await e.json();return typeof t.error=="string"?t.error.trim():t.error?.message?.trim()??""}catch{return""}}};function Tt(d){if(!d)return null;if((d.type??"gemini")==="custom"){if(!d.apiUrl||!d.requestTransformer||!d.responseTransformer)return null}else if(!d.apiKey?.trim()&&!d.headers)return null;return new ge(d)}function Kn(d){let e=[];for(let t of d)Array.isArray(t.children)&&t.children.length>0?e.push(...Kn(t.children)):e.push(t);return e}var dt=class d{constructor(e,t){this.columnGroupModel=null;this.groupHeaderBuilder=null;this.displayGroupEngine=null;this.photonAIService=null;this.normalizedColumns=[];this.ctx=this.buildContext(e,t),this.api=new it(this.ctx),this.initialize()}buildContext(e,t){let o=new Ie,r=new Te(o),n=new ke(r,o),i=new Me(r,o),s=new _e(r,o),l=new Le(r,o),a=new De(r,o),c=new He,p=new Ae(r,o,c),h=new Pe(r,o),u=new Ge(r,o),m=new Ne,g=new Oe(o),f=new Fe,C=new We(o),b=new st,v=new Ve(r,o,f,b),w=new ao(r,o,i),E=new po(r,o),R=new co(r,o,l,s,E),I=new ho(h,R),S=new $e(o),T=new Ue,k=new qe(T),L=new je(o),_=new rt(e,r,o,n,a,k,v,s,h,p,t),V=t.columns?Or(t.columns):[];if(this.normalizedColumns=V,V.some(F=>Array.isArray(F.children)&&F.children.length>0)){let F=new vo(_.colStyles,o,n,r,k);F.parse(V),this.displayGroupEngine=F,_.setDisplayGroupEngine(F)}return _.setMasterDetailConfig(w,(F,K)=>new d(F,K),k,S),w.setRefreshCallback(()=>{let F=r.get("visibleRows");F.length>0&&_.captureRowAnimation(F,"detail"),this.api.refresh()}),R.setRefreshCallback(()=>this.api.refresh()),_.setTreeDragConfig(!!t.treeData?.enabled&&(t.treeData.mode==="parentId"||t.treeData.mode==="childrenField"),(F,K,ie)=>R.moveNode(F,K,ie)),t.treeData?.enabled&&_.setTreeRenderConfig(t.treeData.toggleColumnId,E),{options:t,containerEl:e,eventBus:o,store:r,columnModel:n,rowModel:i,sortEngine:s,filterEngine:l,paginationEngine:a,groupingEngine:p,aggregationEngine:c,rowSelectionEngine:h,cellEditorEngine:u,summaryEngine:m,exportEngine:g,clipboardEngine:f,dragDropEngine:C,cellSelectionEngine:v,themeManager:S,iconRegistry:T,chartEngine:L,undoRedoEngine:b,masterDetailEngine:w,treeDataService:R,treeExpansionService:E,treeSelectionService:I,renderer:_}}initialize(){kt();let e=this.ctx.options,t=this.ctx;if(e.theme?t.themeManager.applyTheme(e.theme,t.containerEl):t.themeManager.applyTheme("light",t.containerEl),e.selection&&t.rowSelectionEngine.configure(e.selection),e.editing&&t.cellEditorEngine.configure(e.editing),e.pagination&&t.paginationEngine.configure({enabled:e.pagination.enabled??!1,page:e.pagination.page??1,pageSize:e.pagination.pageSize??50,pageSizeOptions:e.pagination.pageSizeOptions??[10,25,50,100],serverSide:e.pagination.serverSide??!1,totalRows:e.pagination.totalRows}),this.normalizedColumns.length&&(this.displayGroupEngine?t.columnModel.initColumns(Kn(this.normalizedColumns)):this.columnGroupModel?(this.columnGroupModel.init(this.normalizedColumns),t.columnModel.initColumns(this.columnGroupModel.getAllLeaves())):t.columnModel.initColumns(this.normalizedColumns)),e.columnState&&t.columnModel.applyColumnStates(e.columnState),e.sortConfig?.length&&t.sortEngine.multiSort(e.sortConfig),e.filterModel&&t.filterEngine.setFilterModel(e.filterModel),e.grouping?.groupedColumns?.length)for(let r of e.grouping.groupedColumns)t.groupingEngine.addGroupColumn(r);if(t.masterDetailEngine.configure(e.masterDetail),t.treeDataService.configure(e.treeData),t.cellSelectionEngine.setTreeToggleHandler((r,n)=>this.handleTreeToggleKey(t,r,n)),t.renderer.mount(),t.renderer.setParentApiForDetail(this.api),e.photonAI?.enabled){let r=Tt(e.photonAI.provider);this.photonAIService=new Ee(this.api,void 0,r,e.photonAI.provider?.systemInstruction),t.renderer.setPhotonAISubmitHandler(n=>this.photonAIService.submit(n)),r&&t.renderer.setPhotonAIAsyncSubmitHandler((n,i)=>this.photonAIService.submitAsync(n,i))}let o=new Wt(t);t.rangeChartService=o,t.cellSelectionEngine.setChartOpenCallback(r=>{let n=t.store.get("cellRanges");n.length!==0&&o.createRangeChart({cellRange:n[0],cellRanges:n,chartType:r})}),t.renderer.setSearchCallback(r=>this.api.setQuickFilter(r)),this.columnGroupModel&&this.api.setColumnGroupModel(this.columnGroupModel),e.data?.length&&this.api.setData(e.data),e.enableStateManagement&&e.stateKey&&this.loadState(e.stateKey),this.wireEventHandlers(t),this.wireEditing(t),t.eventBus.emit(x.READY,{api:this.api}),e.onReady?.(this.api)}wireEventHandlers(e){let t=e.options;t.onChartCreated&&e.eventBus.on(x.CHART_CREATED,r=>t.onChartCreated(r)),t.onChartRangeSelectionChanged&&e.eventBus.on(x.CHART_RANGE_SELECTION_CHANGED,r=>t.onChartRangeSelectionChanged(r)),t.onChartOptionsChanged&&e.eventBus.on(x.CHART_OPTIONS_CHANGED,r=>t.onChartOptionsChanged(r)),t.onChartDestroyed&&e.eventBus.on(x.CHART_DESTROYED,r=>t.onChartDestroyed(r)),e.eventBus.on(x.SORT_CHANGED,()=>{let r=e.store.get("visibleRows");r.length>0&&e.renderer.captureRowAnimation(r),this.api.refresh()}),e.eventBus.on(x.FILTER_CHANGED,()=>{let r=e.store.get("visibleRows");r.length>0&&e.renderer.captureRowAnimation(r,"filter")}),e.eventBus.on(x.PAGE_CHANGED,()=>this.api.refresh()),e.eventBus.on(x.PAGE_SIZE_CHANGED,()=>this.api.refresh()),e.eventBus.on(x.ROW_GROUP_OPENED,r=>{let n=r,i=e.store.get("visibleRows");i.length>0&&e.renderer.captureRowAnimation(i,"filter"),e.groupingEngine.toggleGroup(n.groupKey),this.api.refresh()});let o=[];e.eventBus.on(x.COLUMN_GROUP_CHANGED,()=>{let r=e.store.get("groupedColumnIds");for(let n of r)o.includes(n)||e.columnModel.setColumnVisible(n,!1);for(let n of o)r.includes(n)||e.columnModel.setColumnVisible(n,!0);o=[...r],this.api.refresh()}),e.eventBus.on(x.ROW_DETAIL_TOGGLE_CLICKED,r=>{let n=r,i=e.store.get("visibleRows");i.length>0&&e.renderer.captureRowAnimation(i,"detail"),e.masterDetailEngine.isExpanded(n.row.nodeId)&&e.renderer.beginDetailCollapse(n.row.nodeId),e.masterDetailEngine.toggle(n.row),this.api.refresh()}),e.eventBus.on(x.TREE_NODE_TOGGLE_CLICKED,r=>{let n=r,i=e.store.get("visibleRows");i.length>0&&e.renderer.captureRowAnimation(i,"filter"),e.treeExpansionService.toggle(n.row),this.api.refresh()})}handleTreeToggleKey(e,t,o){if(!e.treeDataService.isEnabled())return!1;let r=t.hasChildren||t.children.length>0,n=e.store.get("visibleRows"),i=e.store.get("activeCell");if(!i)return!1;if(o==="left"){if(r&&e.treeExpansionService.isExpanded(t.nodeId))return e.treeExpansionService.collapse(t),this.api.refresh(),!0;if(t.parent){let a=n.findIndex(c=>c.nodeId===t.parent.nodeId);if(a!==-1)return e.cellSelectionEngine.startSelection(a,i.colIndex),!0}return!1}if(!r)return!1;if(!e.treeExpansionService.isExpanded(t.nodeId))return!t.childrenLoaded&&e.treeDataService.getConfig()?.lazyLoadChildren&&e.treeDataService.loadChildren(t.nodeId),e.treeExpansionService.expand(t),this.api.refresh(),!0;let s=n.findIndex(a=>a.nodeId===t.nodeId),l=s!==-1?n[s+1]:void 0;return l&&l.level>t.level?(e.cellSelectionEngine.startSelection(s+1,i.colIndex),!0):!1}wireEditing(e){if(e.options.editing?.mode==="none")return;let t=null,o=null,r=null,n=null,i=c=>{let p=c,{row:h,colDef:u}=p;if(h.type!=="data"||!u.editable||e.cellEditorEngine.isCellEditing(h.nodeId,u.colId))return;let m=e.containerEl.querySelector(`[data-node-id="${h.nodeId}"] [data-col-id="${u.colId}"]`);if(!m)return;let g=m.querySelector(".pg-cell__inner");if(!g)return;if(e.cellEditorEngine.isEditing()&&e.cellEditorEngine.stopEditing(!1),t=g,o=h,r=u,g.innerHTML="",!e.cellEditorEngine.startEditing(h,u,m)){this.renderCellValue(g,h,u),t=o=r=null;return}let C=h.data[u.field],b=$(u,"editor");if(b){let v={value:C,row:h.data,colDef:u,rowIndex:h.rowIndex,onValueChange:R=>e.cellEditorEngine.updateValue(R),onEditStop:()=>e.cellEditorEngine.stopEditing(!1)},w=b(v);g.appendChild(w);let E=e.cellEditorEngine.getActiveSession();E&&(E.editorEl=w)}else if(u.type==="dropdown"||u.type==="object"){let v=u.dropdownOptions??u.enumOptions?.map(E=>({value:E,label:E}))??[],w=$(u,"option");n=new Lt(g,m,v,C,{onSelect:E=>{e.cellEditorEngine.updateValue(u.type==="object"?E:E.value)},onStop:E=>{e.cellEditorEngine.stopEditing(!E)},onTab:l,...w?{renderOption:(E,R,I,S)=>w({option:E,index:R,selected:I,highlighted:S,colDef:u,api:this.api})}:{}})}else e.cellEditorEngine.buildNativeEditor(u,C,g)},s=()=>{e.cellEditorEngine.isEditing()&&e.cellEditorEngine.stopEditing(!1)};e.eventBus.on(x.COLUMN_RESIZED,s),e.eventBus.on(x.COLUMN_MOVED,s),e.eventBus.on(x.CELL_EDIT_STOP,()=>{if(n?.destroy(),n=null,!t||!o||!r)return;let c=t,p=o,h=r;t=o=r=null,this.renderCellValue(c,p,h)}),e.eventBus.on(x.CELL_VALUE_CHANGED,c=>{let p=c;e.undoRedoEngine.record({type:"edit",changes:[{nodeId:p.row.nodeId,field:p.colDef.field,oldValue:p.oldValue,newValue:p.newValue}]}),this.api.refresh()});let l=c=>{let p=e.store.get("visibleRows"),h=e.columnModel.getVisibleColumns();if(!e.store.get("activeCell"))return;e.cellSelectionEngine.moveActiveCell(0,c?-1:1,p.length,h.length,!1);let m=e.store.get("activeCell");if(!m)return;let g=p[m.rowIndex],f=h[m.colIndex];!g||!f||!f.editable||i({row:g,colDef:f})};e.cellEditorEngine.setTabHandler(l);let a=e.options.editing?.singleClickEdit?x.CELL_CLICKED:x.CELL_DOUBLE_CLICKED;e.eventBus.on(a,i),e.cellSelectionEngine.setEnterEditHandler((c,p)=>{if(e.cellEditorEngine.isEditing())return!1;let h=e.store.get("visibleRows"),u=e.columnModel.getVisibleColumns(),m=h[c],g=u[p];return!m||m.type!=="data"||!g||!g.editable?!1:(i({row:m,colDef:g}),!0)})}renderCellValue(e,t,o){e.innerHTML="";let r=t.data[o.field],n=$(o,"display");if(n){let l=this.ctx.columnModel.getVisibleColumns().findIndex(p=>p.colId===o.colId),a={value:r,rawValue:r,row:t.data,colDef:o,rowIndex:t.rowIndex,colIndex:l,api:this.api},c=n(a);typeof c=="string"?e.innerHTML=c:e.appendChild(c);return}if(o.renderHtml){e.innerHTML=String(r??"");return}let i=document.createElement("span");switch(i.className="pg-cell__value",o.type){case"boolean":{i.textContent=r?"\u2713":"",i.classList.add(r?"pg-cell--bool-true":"pg-cell--bool-false");break}case"dropdown":case"object":{let s=o.type==="object"&&typeof r=="object"&&r!==null?r[o.objectValueKey??"value"]:r,l=o.dropdownOptions?.find(a=>String(a.value)===String(s??""));if(l?.color){let a=document.createElement("div");a.className="pg-badge",a.style.backgroundColor=l.color+"20",a.style.color=l.color,a.textContent=l.label,i.appendChild(a)}else i.textContent=l?.label??String(s??"");break}case"array":{i.className="pg-cell__value pg-cell__value--tags";let s=Array.isArray(r)?r.map(String):[],l=s.slice(0,3);for(let a of l){let c=o.dropdownOptions?.find(h=>String(h.value)===a),p=document.createElement("div");p.className="pg-badge",p.textContent=c?.label??a,c?.color&&(p.style.backgroundColor=c.color+"20",p.style.color=c.color),i.appendChild(p)}if(s.length>l.length){let a=document.createElement("div");a.className="pg-badge pg-badge--overflow",a.textContent=`+${s.length-l.length}`,i.appendChild(a)}break}default:{let s=Q(r,o,{locale:this.ctx.options.locale,dateFormat:this.ctx.options.dateFormat,timeZone:this.ctx.options.timeZone,currencySymbol:this.ctx.options.currencySymbol});i.textContent=s||"\u2014",i.title=s||""}}e.appendChild(i)}loadState(e){try{let t=localStorage.getItem(`photon_grid_${e}`);if(t){let o=JSON.parse(t);this.api.applyGridState(o)}this.ctx.eventBus.on(x.COLUMNS_STATE_CHANGED,()=>{let o=this.api.getGridState();localStorage.setItem(`photon_grid_${e}`,JSON.stringify(o))})}catch{}}destroy(){this.ctx.rangeChartService?.disposeAll(),this.api.destroy()}};function or(d,e){let t=Pl(d);return new dt(t,e)}function Zn(d,e){return or(d,e)}function Pl(d){if(typeof d=="string"){let e=document.querySelector(d);if(!e)throw new Error(`[PhotonGrid] createGrid: no element matches selector "${d}".`);return e}if(!d)throw new Error("[PhotonGrid] createGrid: a container element or selector is required.");return d}var Gl=0,Eo=class{constructor(e){this.eventBus=e;this.rootNodes=[];this.groupMap=new Map;this.leafMap=new Map;this.parentMap=new Map}init(e){this.groupMap.clear(),this.leafMap.clear(),this.parentMap.clear(),this.rootNodes=this.buildTree(e,null);for(let[t,o]of this.groupMap)this.eventBus.emit(x.COLUMN_GROUP_HEADER_CREATED,{groupId:t,header:o.header,childCount:o.children.length})}hasGroups(){return this.groupMap.size>0}getMaxDepth(){return this.computeDepth(this.rootNodes)}getRootNodes(e){return e?this.rootNodes.filter(t=>{let o=t.nodeType==="group"?t.pinned??null:t.colDef.pinned??null;return e==="left"?o==="left":e==="right"?o==="right":o!=="left"&&o!=="right"}):this.rootNodes}getGroup(e){return this.groupMap.get(e)}getLeafNode(e){return this.leafMap.get(e)}getParent(e){return this.parentMap.get(e)??null}getAncestors(e){let t=[],o=this.parentMap.get(e)??null;for(;o!==null;)t.unshift(o),o=this.parentMap.get(o.groupId)??null;return t}getAllLeaves(){let e=[];return this.collectLeaves(this.rootNodes,e,!1),e}getVisibleLeaves(e){let t=[],o=e?this.getRootNodes(e):this.rootNodes;return this.collectLeaves(o,t,!0),t}getLeavesInGroup(e){let t=this.groupMap.get(e);if(!t)return[];let o=[];return this.collectLeaves(t.children,o,!1),o}isGroupCollapsed(e){return this.groupMap.get(e)?.collapsed??!1}collapseGroup(e){let t=this.groupMap.get(e);!t||t.collapsed||(t.collapsed=!0,this.eventBus.emit(x.COLUMN_GROUP_HEADER_COLLAPSED,{groupId:e,header:t.header}))}expandGroup(e){let t=this.groupMap.get(e);!t||!t.collapsed||(t.collapsed=!1,this.eventBus.emit(x.COLUMN_GROUP_HEADER_EXPANDED,{groupId:e,header:t.header}))}toggleGroup(e){let t=this.groupMap.get(e);t&&(t.collapsed?this.expandGroup(e):this.collapseGroup(e))}computeGroupWidth(e,t){let o=this.groupMap.get(e);if(!o)return 0;if(o.collapsed){let r=this.findFirstVisibleLeaf(o.children);return r?t.getWidth(r.colDef.colId):o.collapsedWidth}return this.sumLeafWidths(o.children,t)}getFirstLeaf(e){let t=this.groupMap.get(e);return t?this.findFirstVisibleLeaf(t.children)?.colDef??null:null}computeSubtreeWidth(e,t){return this.sumLeafWidths(e,t)}getVisibleLeafIndex(e,t){return this.getVisibleLeaves(t).findIndex(o=>o.colId===e)}setLeafVisible(e,t){let o=this.leafMap.get(e);o&&(o.colDef.visible=t)}moveLeaf(e,t,o){let r=this.leafMap.get(e);if(!r)return;let n=this.parentMap.get(e)??null,i=t?this.groupMap.get(t)??null:null,s=n?n.children:this.rootNodes,l=s.findIndex(p=>this.nodeId(p)===e);l!==-1&&s.splice(l,1);let a=i?i.children:this.rootNodes,c=o!==null?a.findIndex(p=>this.nodeId(p)===o):-1;c!==-1?a.splice(c,0,r):a.push(r),this.parentMap.set(e,i),this.eventBus.emit(x.COLUMN_MOVED,{colDef:r.colDef,fromIndex:l,toIndex:c>=0?c:a.length-1})}moveGroup(e,t,o){let r=this.groupMap.get(e);if(!r)return;let n=t?this.groupMap.get(t)??null:null;if(n&&this.isAncestorOf(e,n.groupId))return;let i=this.parentMap.get(e)??null,s=i?i.children:this.rootNodes,l=s.findIndex(p=>this.nodeId(p)===e);l!==-1&&s.splice(l,1);let a=n?n.children:this.rootNodes,c=o!==null?a.findIndex(p=>this.nodeId(p)===o):-1;c!==-1?a.splice(c,0,r):a.push(r),this.parentMap.set(e,n)}distributeResizeDelta(e,t,o){let r=new Map,n=this.parentMap.get(e);if(!n)return r;let i=n.children.filter(l=>l.nodeType==="leaf"&&l.colDef.colId!==e&&l.colDef.visible!==!1).map(l=>l.colDef);if(i.length===0)return r;let s=n.resizeStrategy;if(s==="proportional"){let l=i.reduce((a,c)=>a+o.getWidth(c.colId),0);for(let a of i){let c=o.getWidth(a.colId),p=l>0?c/l:1/i.length,h=Math.max(a.minWidth??40,c-t*p);r.set(a.colId,h)}}else if(s==="equal"){let l=t/i.length;for(let a of i){let c=Math.max(a.minWidth??40,o.getWidth(a.colId)-l);r.set(a.colId,c)}}else if(s==="firstFixed"){let l=i[i.length-1],a=Math.max(l.minWidth??40,o.getWidth(l.colId)-t);r.set(l.colId,a)}else{let l=i[0],a=Math.max(l.minWidth??40,o.getWidth(l.colId)-t);r.set(l.colId,a)}return r}createSoloGroupForLeaf(e){let t=this.leafMap.get(e);if(!t)return null;let o=this.parentMap.get(e)??null,r=o?o.children:this.rootNodes,n=r.findIndex(a=>this.nodeId(a)===e);n!==-1&&r.splice(n,1);let i=`grp_solo_${e}_${++Gl}`,s={nodeType:"group",groupId:i,header:o?.header??t.colDef.header,children:[t],collapsed:!1,collapsedWidth:36,resizable:!0,marryChildren:!1,openByDefault:!0,resizeStrategy:"proportional",isSoloGroup:!0,originalParentGroupId:o?.groupId??void 0};this.groupMap.set(i,s),this.parentMap.set(i,null),this.parentMap.set(e,s);let l=o?this.rootNodes.findIndex(a=>this.nodeId(a)===o.groupId):-1;return l>=0?this.rootNodes.splice(l+1,0,s):this.rootNodes.push(s),this.eventBus.emit(x.COLUMN_GROUP_HEADER_CREATED,{groupId:i,header:s.header,childCount:1}),i}dissolveGroupIfSolo(e,t,o=null){let r=this.groupMap.get(e);if(!r?.isSoloGroup||r.children.length!==1)return;let n=r.children[0];if(n.nodeType!=="leaf")return;let i=this.rootNodes.findIndex(c=>this.nodeId(c)===e);i!==-1&&this.rootNodes.splice(i,1),this.groupMap.delete(e),this.parentMap.delete(e);let s=t?this.groupMap.get(t)??null:null,l=s?s.children:this.rootNodes,a=o!==null?l.findIndex(c=>this.nodeId(c)===o):-1;a!==-1?l.splice(a,0,n):l.push(n),this.parentMap.set(n.colDef.colId,s),this.eventBus.emit(x.COLUMN_GROUP_HEADER_REMOVED,{groupId:e,header:r.header})}cleanEmptyGroups(){let e=[];for(let[t,o]of this.groupMap)o.children.length===0&&e.push(t);for(let t of e){let o=this.parentMap.get(t)??null,r=o?o.children:this.rootNodes,n=r.findIndex(i=>this.nodeId(i)===t);n!==-1&&r.splice(n,1),this.groupMap.delete(t),this.parentMap.delete(t),this.eventBus.emit(x.COLUMN_GROUP_HEADER_REMOVED,{groupId:t,header:this.groupMap.get(t)?.header??t})}}serialize(){let e=[];for(let[t,o]of this.groupMap)e.push({groupId:t,collapsed:o.collapsed});return e}deserialize(e){for(let{groupId:t,collapsed:o}of e){let r=this.groupMap.get(t);r&&(r.collapsed=o)}}buildTree(e,t){return e.map(o=>{if(o.children&&o.children.length>0){let n=o.colId??`grp_${o.header.toLowerCase().replace(/[^a-z0-9]+/g,"_")}`,i={nodeType:"group",groupId:n,header:o.header,children:[],pinned:o.pinned,collapsed:o.openByDefault===!1,collapsedWidth:o.collapsedWidth??26,resizable:o.resizable!==!1,marryChildren:o.marryChildren===!0,openByDefault:o.openByDefault!==!1,resizeStrategy:o.resizeStrategy??"proportional",headerCssClass:o.headerCssClass,headerRendererFn:o.groupHeaderRendererFn};return i.children=this.buildTree(o.children,i),this.groupMap.set(n,i),this.parentMap.set(n,t),i}let r={nodeType:"leaf",colDef:o};return this.leafMap.set(o.colId,r),this.parentMap.set(o.colId,t),r})}computeDepth(e){let t=0;for(let o of e)if(o.nodeType==="group"){let r=this.computeDepth(o.children);r+1>t&&(t=r+1)}return t}collectLeaves(e,t,o){for(let r of e)if(r.nodeType==="leaf")(!o||r.colDef.visible!==!1)&&t.push(r.colDef);else if(!o||!r.collapsed)this.collectLeaves(r.children,t,o);else{let n=this.findFirstVisibleLeaf(r.children);n&&n.colDef.visible!==!1&&t.push(n.colDef)}}sumLeafWidths(e,t){let o=0;for(let r of e)if(r.nodeType==="leaf")r.colDef.visible!==!1&&(o+=t.getWidth(r.colDef.colId));else if(!r.collapsed)o+=this.sumLeafWidths(r.children,t);else{let n=this.findFirstVisibleLeaf(r.children);n&&(o+=t.getWidth(n.colDef.colId))}return o}findFirstVisibleLeaf(e){for(let t of e)if(t.nodeType==="leaf"){if(t.colDef.visible!==!1)return t}else{let o=this.findFirstVisibleLeaf(t.children);if(o)return o}return null}nodeId(e){return e.nodeType==="group"?e.groupId:e.colDef.colId}isAncestorOf(e,t){let o=t;for(;o!==null;){if(o===e)return!0;let r=this.parentMap.get(o);o=r?r.groupId:null}return!1}};var Ro=class{constructor(e){this.iconRenderer=e;this.dragHandler=null;this.gridElGetter=null}setDragConfig(e,t){this.dragHandler=e,this.gridElGetter=t}buildGroupRows(e,t,o,r){return o===0?[]:this.computeLayout(e,t,o).map(i=>this.buildGroupRow(i,r))}updateGroupRows(e,t,o,r,n){if(e.length===0||r===0)return;let i=this.computeLayout(t,o,r);for(let s=0;s<r&&s<e.length;s++)e[s].innerHTML="",s<i.length&&this.populateGroupRow(e[s],i[s],n)}computeLayout(e,t,o){let r=Array.from({length:o},(i,s)=>({depth:s,cells:[]})),n={left:0};return this.walk(e,t,r,o,0,n),r}walk(e,t,o,r,n,i){for(let s of e){if(s.nodeType==="leaf"){if(s.colDef.visible===!1)continue;let p=i.left,h=t.getWidth(s.colDef.colId);if(i.left+=h,n===0&&o.length>0)for(let u=0;u<o.length;u++)o[u].cells.push({type:"filler",id:`_filler_${s.colDef.colId}_d${u}`,label:"",left:p,width:h,depth:u,rowSpan:1,colDef:s.colDef});continue}let l=s,a=i.left;if(l.collapsed){let p=this.getFirstVisibleLeafColId(l.children);i.left+=p?t.getWidth(p):l.collapsedWidth}else this.walk(l.children,t,o,r,n+1,i);let c=i.left-a;if(!(c<=0)&&n<o.length){let p={type:"group",id:l.groupId,label:l.header,left:a,width:c,depth:n,rowSpan:1,groupNode:l};o[n].cells.push(p)}}}getFirstVisibleLeafColId(e){for(let t of e)if(t.nodeType==="leaf"){if(t.colDef.visible!==!1)return t.colDef.colId}else{let o=this.getFirstVisibleLeafColId(t.children);if(o)return o}return null}buildGroupRow(e,t){let o=y(`pg-header-group-row pg-header-group-row--depth-${e.depth}`);return o.setAttribute("role","row"),o.setAttribute("data-group-depth",String(e.depth)),this.populateGroupRow(o,e,t),o}populateGroupRow(e,t,o){for(let r of t.cells)e.appendChild(this.buildGroupCell(r,o))}buildGroupCell(e,t){if(e.type!=="group"||!e.groupNode){let s=y("pg-th pg-th--standalone-filler");return e.colDef&&s.setAttribute("data-col-id",e.colDef.colId),s.style.left=`${e.left}px`,s.style.width=`${e.width}px`,s}let o=e.groupNode,r=o.collapsed,n=["pg-th","pg-th--group"];r&&n.push("pg-th--group--collapsed"),o.headerCssClass&&n.push(...o.headerCssClass.split(" ").filter(Boolean));let i=y(n.join(" "));if(i.setAttribute("role","columnheader"),i.setAttribute("data-group-id",o.groupId),i.setAttribute("aria-expanded",String(!r)),i.setAttribute("aria-label",o.header),i.setAttribute("tabindex","0"),i.style.left=`${e.left}px`,i.style.width=`${e.width}px`,o.headerRendererFn){let s=o.headerRendererFn({group:o,collapsed:r,api:null});typeof s=="string"?i.innerHTML=s:i.appendChild(s)}else this.buildDefaultContent(i,o,r);if(o.resizable!==!1){let s=y("pg-th__resize-handle pg-th__resize-handle--group");s.textContent="|",s.addEventListener("pointerdown",l=>{l.button===0&&(l.stopPropagation(),l.preventDefault(),this.startGroupResize(l,o,e.width,t))}),i.appendChild(s)}return this.dragHandler&&this.dragHandler.attachGroupDragListeners(i,o),i.addEventListener("click",s=>{s.target.closest(".pg-th__resize-handle")||this.dragHandler?.didJustDrag||t.onCollapseToggle?.(o.groupId)}),i.addEventListener("keydown",s=>{s.key==="Enter"||s.key===" "?(s.preventDefault(),t.onCollapseToggle?.(o.groupId)):s.key==="ArrowLeft"?(s.preventDefault(),r||t.onCollapseToggle?.(o.groupId)):s.key==="ArrowRight"&&(s.preventDefault(),r&&t.onCollapseToggle?.(o.groupId))}),i}buildDefaultContent(e,t,o){let r=y("pg-th__content"),n=y("pg-th__label");n.textContent=t.header,n.title=t.header,r.appendChild(n),e.appendChild(r);let i=y("pg-th__collapse-btn");i.setAttribute("tabindex","-1"),i.setAttribute("aria-label",o?`Expand ${t.header}`:`Collapse ${t.header}`),i.innerHTML=this.iconRenderer.renderToString(o?"chevronRight":"chevronLeft",12),e.appendChild(i)}startGroupResize(e,t,o,r){let n=e.clientX;document.body.style.cursor="col-resize",document.body.style.userSelect="none";let i=l=>{let a=Math.max(t.collapsedWidth,o+(l.clientX-n));r.onGroupResize?.(t.groupId,a)},s=l=>{let a=Math.max(t.collapsedWidth,o+(l.clientX-n));r.onGroupResize?.(t.groupId,a),document.body.style.cursor="",document.body.style.userSelect="",document.removeEventListener("pointermove",i),document.removeEventListener("pointerup",s)};document.addEventListener("pointermove",i),document.addEventListener("pointerup",s)}};var So=class{constructor(){this.canvas=null;this.ctx=null}attach(e){this.canvas=document.createElement("canvas"),this.canvas.className="pg-selection-canvas",this.canvas.style.cssText=`
4315
+ ${d.userCommand}`}function It(d){let e=d.trim();if(!e)throw new P("invalid-response","The model returned an empty response.");let t;try{t=JSON.parse(e)}catch{if(t=Ll(e),t===void 0)throw new P("invalid-response","The model returned malformed JSON that could not be parsed.")}return rr(t)}function rr(d){if(typeof d!="object"||d===null)throw new P("invalid-response","The model response was not a JSON object.");let e=d,t=_l(e.actions),o=typeof e.reply=="string"?e.reply.trim():"";if(t.length===0&&!o)throw new P("invalid-response","The model response contained neither an action nor a reply.");return{actions:t,reply:o}}function _l(d){if(!Array.isArray(d))return[];let e=[];for(let t of d){if(typeof t!="object"||t===null)continue;let o=t;if(typeof o.type!="string"||!o.type)continue;let r=typeof o.params=="object"&&o.params!==null?o.params:{};e.push({type:o.type,params:r})}return e}function Ll(d){let e=d.indexOf("{"),t=d.lastIndexOf("}");if(!(e<0||t<=e))try{return JSON.parse(d.slice(e,t+1))}catch{return}}function Dl(d,e,t){let o=d.replace("{model}",encodeURIComponent(e));if(!t)return o;let r=o.includes("?")?"&":"?";return`${o}${r}key=${encodeURIComponent(t)}`}function Kn(d,e){let t=d;for(let o of e){if(t==null)return"";t=t[o]}return typeof t=="string"?t:""}var Al={defaultApiUrl:"https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent",defaultModel:"gemini-2.5-flash",buildUrl:Dl,buildHeaders:()=>({}),transformRequest:d=>({systemInstruction:{parts:[{text:d.systemInstruction}]},contents:[{role:"user",parts:[{text:wo(d)}]}],generationConfig:{responseMimeType:"application/json",temperature:d.temperature}}),transformResponse:d=>{let e=d;if(e.promptFeedback?.blockReason)throw new P("blocked",`Gemini blocked the request (${e.promptFeedback.blockReason}).`);let t=e.candidates?.[0];if(!t)throw new P("blocked","Gemini returned no answer for that request.");let o=t.content?.parts?.map(r=>r.text??"").join("")??"";return It(o)}},Hl={defaultApiUrl:"https://api.openai.com/v1/chat/completions",defaultModel:"gpt-4o-mini",buildUrl:d=>d,buildHeaders:d=>{let e={};return d&&(e.Authorization=`Bearer ${d}`),e},transformRequest:d=>({model:d.model,temperature:d.temperature,response_format:{type:"json_object"},messages:[{role:"system",content:d.systemInstruction},{role:"user",content:wo(d)}]}),transformResponse:d=>It(Kn(d,["choices",0,"message","content"]))},Pl={defaultApiUrl:"https://api.anthropic.com/v1/messages",defaultModel:"claude-haiku-4-5-20251001",buildUrl:d=>d,buildHeaders:d=>{let e={"anthropic-version":"2023-06-01","anthropic-dangerous-direct-browser-access":"true"};return d&&(e["x-api-key"]=d),e},transformRequest:d=>({model:d.model,max_tokens:1024,temperature:d.temperature,system:d.systemInstruction,messages:[{role:"user",content:wo(d)}]}),transformResponse:d=>It(Kn(d,["content",0,"text"]))},Gl={gemini:Al,openai:Hl,anthropic:Pl,custom:null};function Zn(d){return Gl[d]??null}var Nl=3e4,ge=class{constructor(e){if(this.type=e.type??"gemini",this.preset=Zn(this.type),!this.preset&&(!e.apiUrl||!e.requestTransformer||!e.responseTransformer))throw new P("http","A custom Photon AI provider requires apiUrl, requestTransformer, and responseTransformer.");this.apiKey=e.apiKey?.trim()||void 0,this.apiUrl=e.apiUrl?.trim()||this.preset?.defaultApiUrl||"",this.model=e.model?.trim()||this.preset?.defaultModel||"",this.headers={...e.headers??{}},this.temperature=e.temperature??0,this.timeoutMs=e.requestTimeoutMs??Nl,this.transformRequest=e.requestTransformer??this.preset.transformRequest,this.transformResponse=e.responseTransformer??this.preset.transformResponse}async generate(e){let t={systemInstruction:e.systemInstruction,userCommand:e.userCommand,gridContext:e.gridContext,model:this.model,temperature:this.temperature},o=this.transformRequest(t),r=this.buildUrl(),n=this.buildHeaders(),i=await this.fetchWithTimeout(r,n,o,e.signal),s=await this.parseHttpResponse(i);return this.transformResponse(s)}buildUrl(){return this.preset?this.preset.buildUrl(this.apiUrl,this.model,this.apiKey):this.apiUrl}buildHeaders(){return{"Content-Type":"application/json",...this.preset?this.preset.buildHeaders(this.apiKey):{},...this.headers}}async fetchWithTimeout(e,t,o,r){let n=new AbortController,i=setTimeout(()=>n.abort(),this.timeoutMs),s=()=>n.abort();r?.addEventListener("abort",s,{once:!0});try{return await fetch(e,{method:"POST",headers:t,body:JSON.stringify(o),signal:n.signal})}catch(l){if(r?.aborted)throw new P("network","Photon AI request was cancelled.");if(n.signal.aborted)throw new P("timeout",`The model did not respond within ${this.timeoutMs/1e3}s. Please try again.`);let a=l instanceof Error?l.message:String(l);throw new P("network",`Couldn't reach the model provider: ${a}`)}finally{clearTimeout(i),r?.removeEventListener("abort",s)}}async parseHttpResponse(e){if(e.ok)try{return await e.json()}catch{throw new P("invalid-response","The model provider returned a response that was not valid JSON.")}let t=await this.readErrorMessage(e),o=t?` ${t}`:"";throw e.status===429?new P("rate-limit",`Rate limit reached. Please wait a moment and try again.${o}`,429):e.status===401||e.status===403?new P("auth",`The model provider rejected the API key (HTTP ${e.status}).${o}`,e.status):new P("http",`The model provider request failed (HTTP ${e.status}).${o}`,e.status)}async readErrorMessage(e){try{let t=await e.json();return typeof t.error=="string"?t.error.trim():t.error?.message?.trim()??""}catch{return""}}};function Tt(d){if(!d)return null;if((d.type??"gemini")==="custom"){if(!d.apiUrl||!d.requestTransformer||!d.responseTransformer)return null}else if(!d.apiKey?.trim()&&!d.headers)return null;return new ge(d)}function Jn(d){let e=[];for(let t of d)Array.isArray(t.children)&&t.children.length>0?e.push(...Jn(t.children)):e.push(t);return e}var ct=class d{constructor(e,t){this.columnGroupModel=null;this.groupHeaderBuilder=null;this.displayGroupEngine=null;this.photonAIService=null;this.normalizedColumns=[];this.ctx=this.buildContext(e,t),this.api=new st(this.ctx),this.initialize()}buildContext(e,t){let o=new Ie,r=new Te(o),n=new Me(r,o),i=new ke(r,o),s=new _e(r,o),l=new Le(r,o),a=new De(r,o),c=new He,p=new Ae(r,o,c),h=new Pe(r,o),u=new Ge(r,o),g=new Ne,m=new Oe(o),f=new Fe,C=new We(o),b=new lt,v=new Ve(r,o,f,b),w=new ao(r,o,i),E=new po(r,o),R=new co(r,o,l,s,E),S=new ho(h,R),I=new Ue(o),T=new qe,M=new je(T),L=new Xe(o),_=new nt(e,r,o,n,a,M,v,s,h,p,t),V=t.columns?Fr(t.columns):[];if(this.normalizedColumns=V,V.some(F=>Array.isArray(F.children)&&F.children.length>0)){let F=new vo(_.colStyles,o,n,r,M);F.parse(V),this.displayGroupEngine=F,_.setDisplayGroupEngine(F)}return _.setMasterDetailConfig(w,(F,K)=>new d(F,K),M,I),w.setRefreshCallback(()=>{let F=r.get("visibleRows");F.length>0&&_.captureRowAnimation(F,"detail"),this.api.refresh()}),R.setRefreshCallback(()=>this.api.refresh()),_.setTreeDragConfig(!!t.treeData?.enabled&&(t.treeData.mode==="parentId"||t.treeData.mode==="childrenField"),(F,K,ie)=>R.moveNode(F,K,ie)),t.treeData?.enabled&&_.setTreeRenderConfig(t.treeData.toggleColumnId,E),{options:t,containerEl:e,eventBus:o,store:r,columnModel:n,rowModel:i,sortEngine:s,filterEngine:l,paginationEngine:a,groupingEngine:p,aggregationEngine:c,rowSelectionEngine:h,cellEditorEngine:u,summaryEngine:g,exportEngine:m,clipboardEngine:f,dragDropEngine:C,cellSelectionEngine:v,themeManager:I,iconRegistry:T,chartEngine:L,undoRedoEngine:b,masterDetailEngine:w,treeDataService:R,treeExpansionService:E,treeSelectionService:S,renderer:_}}initialize(){Mt();let e=this.ctx.options,t=this.ctx;if(e.mode||e.variant?(t.themeManager.applyMode(e.mode??"light",t.containerEl),e.variant&&t.themeManager.applyVariant(e.variant,t.containerEl)):e.theme?t.themeManager.applyTheme(e.theme,t.containerEl):t.themeManager.applyMode("light",t.containerEl),e.selection&&t.rowSelectionEngine.configure(e.selection),e.editing&&t.cellEditorEngine.configure(e.editing),e.pagination&&t.paginationEngine.configure({enabled:e.pagination.enabled??!1,page:e.pagination.page??1,pageSize:e.pagination.pageSize??50,pageSizeOptions:e.pagination.pageSizeOptions??[10,25,50,100],serverSide:e.pagination.serverSide??!1,totalRows:e.pagination.totalRows}),this.normalizedColumns.length&&(this.displayGroupEngine?t.columnModel.initColumns(Jn(this.normalizedColumns)):this.columnGroupModel?(this.columnGroupModel.init(this.normalizedColumns),t.columnModel.initColumns(this.columnGroupModel.getAllLeaves())):t.columnModel.initColumns(this.normalizedColumns)),e.columnState&&t.columnModel.applyColumnStates(e.columnState),e.sortConfig?.length&&t.sortEngine.multiSort(e.sortConfig),e.filterModel&&t.filterEngine.setFilterModel(e.filterModel),e.grouping?.groupedColumns?.length)for(let r of e.grouping.groupedColumns)t.groupingEngine.addGroupColumn(r);if(t.masterDetailEngine.configure(e.masterDetail),t.treeDataService.configure(e.treeData),t.cellSelectionEngine.setTreeToggleHandler((r,n)=>this.handleTreeToggleKey(t,r,n)),t.renderer.mount(),t.renderer.setParentApiForDetail(this.api),e.photonAI?.enabled){let r=Tt(e.photonAI.provider);this.photonAIService=new Ee(this.api,void 0,r,e.photonAI.provider?.systemInstruction),t.renderer.setPhotonAISubmitHandler(n=>this.photonAIService.submit(n)),r&&t.renderer.setPhotonAIAsyncSubmitHandler((n,i)=>this.photonAIService.submitAsync(n,i))}let o=new Wt(t);t.rangeChartService=o,t.cellSelectionEngine.setChartOpenCallback(r=>{let n=t.store.get("cellRanges");n.length!==0&&o.createRangeChart({cellRange:n[0],cellRanges:n,chartType:r})}),t.renderer.setSearchCallback(r=>this.api.setQuickFilter(r)),this.columnGroupModel&&this.api.setColumnGroupModel(this.columnGroupModel),e.data?.length&&this.api.setData(e.data),e.enableStateManagement&&e.stateKey&&this.loadState(e.stateKey),this.wireEventHandlers(t),this.wireEditing(t),t.eventBus.emit(x.READY,{api:this.api}),e.onReady?.(this.api)}wireEventHandlers(e){let t=e.options;t.onChartCreated&&e.eventBus.on(x.CHART_CREATED,r=>t.onChartCreated(r)),t.onChartRangeSelectionChanged&&e.eventBus.on(x.CHART_RANGE_SELECTION_CHANGED,r=>t.onChartRangeSelectionChanged(r)),t.onChartOptionsChanged&&e.eventBus.on(x.CHART_OPTIONS_CHANGED,r=>t.onChartOptionsChanged(r)),t.onChartDestroyed&&e.eventBus.on(x.CHART_DESTROYED,r=>t.onChartDestroyed(r)),e.eventBus.on(x.SORT_CHANGED,()=>{let r=e.store.get("visibleRows");r.length>0&&e.renderer.captureRowAnimation(r),this.api.refresh()}),e.eventBus.on(x.FILTER_CHANGED,()=>{let r=e.store.get("visibleRows");r.length>0&&e.renderer.captureRowAnimation(r,"filter")}),e.eventBus.on(x.PAGE_CHANGED,()=>this.api.refresh()),e.eventBus.on(x.PAGE_SIZE_CHANGED,()=>this.api.refresh()),e.eventBus.on(x.ROW_GROUP_OPENED,r=>{let n=r,i=e.store.get("visibleRows");i.length>0&&e.renderer.captureRowAnimation(i,"group"),e.groupingEngine.toggleGroup(n.groupKey),this.api.refresh()});let o=[];e.eventBus.on(x.COLUMN_GROUP_CHANGED,()=>{let r=e.store.get("groupedColumnIds");for(let n of r)o.includes(n)||e.columnModel.setColumnVisible(n,!1);for(let n of o)r.includes(n)||e.columnModel.setColumnVisible(n,!0);o=[...r],this.api.refresh()}),e.eventBus.on(x.ROW_DETAIL_TOGGLE_CLICKED,r=>{let n=r,i=e.store.get("visibleRows");i.length>0&&e.renderer.captureRowAnimation(i,"detail"),e.masterDetailEngine.isExpanded(n.row.nodeId)&&e.renderer.beginDetailCollapse(n.row.nodeId),e.masterDetailEngine.toggle(n.row),this.api.refresh()}),e.eventBus.on(x.TREE_NODE_TOGGLE_CLICKED,r=>{let n=r,i=e.store.get("visibleRows");i.length>0&&e.renderer.captureRowAnimation(i,"group"),e.treeExpansionService.toggle(n.row),this.api.refresh()})}handleTreeToggleKey(e,t,o){if(!e.treeDataService.isEnabled())return!1;let r=t.hasChildren||t.children.length>0,n=e.store.get("visibleRows"),i=e.store.get("activeCell");if(!i)return!1;if(o==="left"){if(r&&e.treeExpansionService.isExpanded(t.nodeId))return e.treeExpansionService.collapse(t),this.api.refresh(),!0;if(t.parent){let a=n.findIndex(c=>c.nodeId===t.parent.nodeId);if(a!==-1)return e.cellSelectionEngine.startSelection(a,i.colIndex),!0}return!1}if(!r)return!1;if(!e.treeExpansionService.isExpanded(t.nodeId))return!t.childrenLoaded&&e.treeDataService.getConfig()?.lazyLoadChildren&&e.treeDataService.loadChildren(t.nodeId),e.treeExpansionService.expand(t),this.api.refresh(),!0;let s=n.findIndex(a=>a.nodeId===t.nodeId),l=s!==-1?n[s+1]:void 0;return l&&l.level>t.level?(e.cellSelectionEngine.startSelection(s+1,i.colIndex),!0):!1}wireEditing(e){if(e.options.editing?.mode==="none")return;let t=null,o=null,r=null,n=null,i=c=>{let p=c,{row:h,colDef:u}=p;if(h.type!=="data"||!u.editable||e.cellEditorEngine.isCellEditing(h.nodeId,u.colId))return;let g=e.containerEl.querySelector(`[data-node-id="${h.nodeId}"] [data-col-id="${u.colId}"]`);if(!g)return;let m=g.querySelector(".pg-cell__inner");if(!m)return;if(e.cellEditorEngine.isEditing()&&e.cellEditorEngine.stopEditing(!1),t=m,o=h,r=u,m.innerHTML="",!e.cellEditorEngine.startEditing(h,u,g)){this.renderCellValue(m,h,u),t=o=r=null;return}let C=h.data[u.field],b=$(u,"editor");if(b){let v={value:C,row:h.data,colDef:u,rowIndex:h.rowIndex,onValueChange:R=>e.cellEditorEngine.updateValue(R),onEditStop:()=>e.cellEditorEngine.stopEditing(!1)},w=b(v);m.appendChild(w);let E=e.cellEditorEngine.getActiveSession();E&&(E.editorEl=w)}else if(u.type==="dropdown"||u.type==="object"){let v=u.dropdownOptions??u.enumOptions?.map(E=>({value:E,label:E}))??[],w=$(u,"option");n=new Lt(m,g,v,C,{onSelect:E=>{e.cellEditorEngine.updateValue(u.type==="object"?E:E.value)},onStop:E=>{e.cellEditorEngine.stopEditing(!E)},onTab:l,...w?{renderOption:(E,R,S,I)=>w({option:E,index:R,selected:S,highlighted:I,colDef:u,api:this.api})}:{}})}else e.cellEditorEngine.buildNativeEditor(u,C,m)},s=()=>{e.cellEditorEngine.isEditing()&&e.cellEditorEngine.stopEditing(!1)};e.eventBus.on(x.COLUMN_RESIZED,s),e.eventBus.on(x.COLUMN_MOVED,s),e.eventBus.on(x.CELL_EDIT_STOP,()=>{if(n?.destroy(),n=null,!t||!o||!r)return;let c=t,p=o,h=r;t=o=r=null,this.renderCellValue(c,p,h)}),e.eventBus.on(x.CELL_VALUE_CHANGED,c=>{let p=c;e.undoRedoEngine.record({type:"edit",changes:[{nodeId:p.row.nodeId,field:p.colDef.field,oldValue:p.oldValue,newValue:p.newValue}]}),this.api.refresh()});let l=c=>{let p=e.store.get("visibleRows"),h=e.columnModel.getVisibleColumns();if(!e.store.get("activeCell"))return;e.cellSelectionEngine.moveActiveCell(0,c?-1:1,p.length,h.length,!1);let g=e.store.get("activeCell");if(!g)return;let m=p[g.rowIndex],f=h[g.colIndex];!m||!f||!f.editable||i({row:m,colDef:f})};e.cellEditorEngine.setTabHandler(l);let a=e.options.editing?.singleClickEdit?x.CELL_CLICKED:x.CELL_DOUBLE_CLICKED;e.eventBus.on(a,i),e.cellSelectionEngine.setEnterEditHandler((c,p)=>{if(e.cellEditorEngine.isEditing())return!1;let h=e.store.get("visibleRows"),u=e.columnModel.getVisibleColumns(),g=h[c],m=u[p];return!g||g.type!=="data"||!m||!m.editable?!1:(i({row:g,colDef:m}),!0)})}renderCellValue(e,t,o){e.innerHTML="";let r=t.data[o.field],n=$(o,"display");if(n){let l=this.ctx.columnModel.getVisibleColumns().findIndex(p=>p.colId===o.colId),a={value:r,rawValue:r,row:t.data,colDef:o,rowIndex:t.rowIndex,colIndex:l,api:this.api},c=n(a);typeof c=="string"?e.innerHTML=c:e.appendChild(c);return}if(o.renderHtml){e.innerHTML=String(r??"");return}let i=document.createElement("span");switch(i.className="pg-cell__value",o.type){case"boolean":{i.textContent=r?"\u2713":"",i.classList.add(r?"pg-cell--bool-true":"pg-cell--bool-false");break}case"dropdown":case"object":{let s=o.type==="object"&&typeof r=="object"&&r!==null?r[o.objectValueKey??"value"]:r,l=o.dropdownOptions?.find(a=>String(a.value)===String(s??""));if(l?.color){let a=document.createElement("div");a.className="pg-badge",a.style.backgroundColor=l.color+"20",a.style.color=l.color,a.textContent=l.label,i.appendChild(a)}else i.textContent=l?.label??String(s??"");break}case"array":{i.className="pg-cell__value pg-cell__value--tags";let s=Array.isArray(r)?r.map(String):[],l=s.slice(0,3);for(let a of l){let c=o.dropdownOptions?.find(h=>String(h.value)===a),p=document.createElement("div");p.className="pg-badge",p.textContent=c?.label??a,c?.color&&(p.style.backgroundColor=c.color+"20",p.style.color=c.color),i.appendChild(p)}if(s.length>l.length){let a=document.createElement("div");a.className="pg-badge pg-badge--overflow",a.textContent=`+${s.length-l.length}`,i.appendChild(a)}break}default:{let s=Q(r,o,{locale:this.ctx.options.locale,dateFormat:this.ctx.options.dateFormat,timeZone:this.ctx.options.timeZone,currencySymbol:this.ctx.options.currencySymbol});i.textContent=s||"\u2014",i.title=s||""}}e.appendChild(i)}loadState(e){try{let t=localStorage.getItem(`photon_grid_${e}`);if(t){let o=JSON.parse(t);this.api.applyGridState(o)}this.ctx.eventBus.on(x.COLUMNS_STATE_CHANGED,()=>{let o=this.api.getGridState();localStorage.setItem(`photon_grid_${e}`,JSON.stringify(o))})}catch{}}destroy(){this.ctx.rangeChartService?.disposeAll(),this.api.destroy()}};function nr(d,e){let t=Ol(d);return new ct(t,e)}function Qn(d,e){return nr(d,e)}function Ol(d){if(typeof d=="string"){let e=document.querySelector(d);if(!e)throw new Error(`[PhotonGrid] createGrid: no element matches selector "${d}".`);return e}if(!d)throw new Error("[PhotonGrid] createGrid: a container element or selector is required.");return d}var Fl=0,Eo=class{constructor(e){this.eventBus=e;this.rootNodes=[];this.groupMap=new Map;this.leafMap=new Map;this.parentMap=new Map}init(e){this.groupMap.clear(),this.leafMap.clear(),this.parentMap.clear(),this.rootNodes=this.buildTree(e,null);for(let[t,o]of this.groupMap)this.eventBus.emit(x.COLUMN_GROUP_HEADER_CREATED,{groupId:t,header:o.header,childCount:o.children.length})}hasGroups(){return this.groupMap.size>0}getMaxDepth(){return this.computeDepth(this.rootNodes)}getRootNodes(e){return e?this.rootNodes.filter(t=>{let o=t.nodeType==="group"?t.pinned??null:t.colDef.pinned??null;return e==="left"?o==="left":e==="right"?o==="right":o!=="left"&&o!=="right"}):this.rootNodes}getGroup(e){return this.groupMap.get(e)}getLeafNode(e){return this.leafMap.get(e)}getParent(e){return this.parentMap.get(e)??null}getAncestors(e){let t=[],o=this.parentMap.get(e)??null;for(;o!==null;)t.unshift(o),o=this.parentMap.get(o.groupId)??null;return t}getAllLeaves(){let e=[];return this.collectLeaves(this.rootNodes,e,!1),e}getVisibleLeaves(e){let t=[],o=e?this.getRootNodes(e):this.rootNodes;return this.collectLeaves(o,t,!0),t}getLeavesInGroup(e){let t=this.groupMap.get(e);if(!t)return[];let o=[];return this.collectLeaves(t.children,o,!1),o}isGroupCollapsed(e){return this.groupMap.get(e)?.collapsed??!1}collapseGroup(e){let t=this.groupMap.get(e);!t||t.collapsed||(t.collapsed=!0,this.eventBus.emit(x.COLUMN_GROUP_HEADER_COLLAPSED,{groupId:e,header:t.header}))}expandGroup(e){let t=this.groupMap.get(e);!t||!t.collapsed||(t.collapsed=!1,this.eventBus.emit(x.COLUMN_GROUP_HEADER_EXPANDED,{groupId:e,header:t.header}))}toggleGroup(e){let t=this.groupMap.get(e);t&&(t.collapsed?this.expandGroup(e):this.collapseGroup(e))}computeGroupWidth(e,t){let o=this.groupMap.get(e);if(!o)return 0;if(o.collapsed){let r=this.findFirstVisibleLeaf(o.children);return r?t.getWidth(r.colDef.colId):o.collapsedWidth}return this.sumLeafWidths(o.children,t)}getFirstLeaf(e){let t=this.groupMap.get(e);return t?this.findFirstVisibleLeaf(t.children)?.colDef??null:null}computeSubtreeWidth(e,t){return this.sumLeafWidths(e,t)}getVisibleLeafIndex(e,t){return this.getVisibleLeaves(t).findIndex(o=>o.colId===e)}setLeafVisible(e,t){let o=this.leafMap.get(e);o&&(o.colDef.visible=t)}moveLeaf(e,t,o){let r=this.leafMap.get(e);if(!r)return;let n=this.parentMap.get(e)??null,i=t?this.groupMap.get(t)??null:null,s=n?n.children:this.rootNodes,l=s.findIndex(p=>this.nodeId(p)===e);l!==-1&&s.splice(l,1);let a=i?i.children:this.rootNodes,c=o!==null?a.findIndex(p=>this.nodeId(p)===o):-1;c!==-1?a.splice(c,0,r):a.push(r),this.parentMap.set(e,i),this.eventBus.emit(x.COLUMN_MOVED,{colDef:r.colDef,fromIndex:l,toIndex:c>=0?c:a.length-1})}moveGroup(e,t,o){let r=this.groupMap.get(e);if(!r)return;let n=t?this.groupMap.get(t)??null:null;if(n&&this.isAncestorOf(e,n.groupId))return;let i=this.parentMap.get(e)??null,s=i?i.children:this.rootNodes,l=s.findIndex(p=>this.nodeId(p)===e);l!==-1&&s.splice(l,1);let a=n?n.children:this.rootNodes,c=o!==null?a.findIndex(p=>this.nodeId(p)===o):-1;c!==-1?a.splice(c,0,r):a.push(r),this.parentMap.set(e,n)}distributeResizeDelta(e,t,o){let r=new Map,n=this.parentMap.get(e);if(!n)return r;let i=n.children.filter(l=>l.nodeType==="leaf"&&l.colDef.colId!==e&&l.colDef.visible!==!1).map(l=>l.colDef);if(i.length===0)return r;let s=n.resizeStrategy;if(s==="proportional"){let l=i.reduce((a,c)=>a+o.getWidth(c.colId),0);for(let a of i){let c=o.getWidth(a.colId),p=l>0?c/l:1/i.length,h=Math.max(a.minWidth??40,c-t*p);r.set(a.colId,h)}}else if(s==="equal"){let l=t/i.length;for(let a of i){let c=Math.max(a.minWidth??40,o.getWidth(a.colId)-l);r.set(a.colId,c)}}else if(s==="firstFixed"){let l=i[i.length-1],a=Math.max(l.minWidth??40,o.getWidth(l.colId)-t);r.set(l.colId,a)}else{let l=i[0],a=Math.max(l.minWidth??40,o.getWidth(l.colId)-t);r.set(l.colId,a)}return r}createSoloGroupForLeaf(e){let t=this.leafMap.get(e);if(!t)return null;let o=this.parentMap.get(e)??null,r=o?o.children:this.rootNodes,n=r.findIndex(a=>this.nodeId(a)===e);n!==-1&&r.splice(n,1);let i=`grp_solo_${e}_${++Fl}`,s={nodeType:"group",groupId:i,header:o?.header??t.colDef.header,children:[t],collapsed:!1,collapsedWidth:36,resizable:!0,marryChildren:!1,openByDefault:!0,resizeStrategy:"proportional",isSoloGroup:!0,originalParentGroupId:o?.groupId??void 0};this.groupMap.set(i,s),this.parentMap.set(i,null),this.parentMap.set(e,s);let l=o?this.rootNodes.findIndex(a=>this.nodeId(a)===o.groupId):-1;return l>=0?this.rootNodes.splice(l+1,0,s):this.rootNodes.push(s),this.eventBus.emit(x.COLUMN_GROUP_HEADER_CREATED,{groupId:i,header:s.header,childCount:1}),i}dissolveGroupIfSolo(e,t,o=null){let r=this.groupMap.get(e);if(!r?.isSoloGroup||r.children.length!==1)return;let n=r.children[0];if(n.nodeType!=="leaf")return;let i=this.rootNodes.findIndex(c=>this.nodeId(c)===e);i!==-1&&this.rootNodes.splice(i,1),this.groupMap.delete(e),this.parentMap.delete(e);let s=t?this.groupMap.get(t)??null:null,l=s?s.children:this.rootNodes,a=o!==null?l.findIndex(c=>this.nodeId(c)===o):-1;a!==-1?l.splice(a,0,n):l.push(n),this.parentMap.set(n.colDef.colId,s),this.eventBus.emit(x.COLUMN_GROUP_HEADER_REMOVED,{groupId:e,header:r.header})}cleanEmptyGroups(){let e=[];for(let[t,o]of this.groupMap)o.children.length===0&&e.push(t);for(let t of e){let o=this.parentMap.get(t)??null,r=o?o.children:this.rootNodes,n=r.findIndex(i=>this.nodeId(i)===t);n!==-1&&r.splice(n,1),this.groupMap.delete(t),this.parentMap.delete(t),this.eventBus.emit(x.COLUMN_GROUP_HEADER_REMOVED,{groupId:t,header:this.groupMap.get(t)?.header??t})}}serialize(){let e=[];for(let[t,o]of this.groupMap)e.push({groupId:t,collapsed:o.collapsed});return e}deserialize(e){for(let{groupId:t,collapsed:o}of e){let r=this.groupMap.get(t);r&&(r.collapsed=o)}}buildTree(e,t){return e.map(o=>{if(o.children&&o.children.length>0){let n=o.colId??`grp_${o.header.toLowerCase().replace(/[^a-z0-9]+/g,"_")}`,i={nodeType:"group",groupId:n,header:o.header,children:[],pinned:o.pinned,collapsed:o.openByDefault===!1,collapsedWidth:o.collapsedWidth??26,resizable:o.resizable!==!1,marryChildren:o.marryChildren===!0,openByDefault:o.openByDefault!==!1,resizeStrategy:o.resizeStrategy??"proportional",headerCssClass:o.headerCssClass,headerRendererFn:o.groupHeaderRendererFn};return i.children=this.buildTree(o.children,i),this.groupMap.set(n,i),this.parentMap.set(n,t),i}let r={nodeType:"leaf",colDef:o};return this.leafMap.set(o.colId,r),this.parentMap.set(o.colId,t),r})}computeDepth(e){let t=0;for(let o of e)if(o.nodeType==="group"){let r=this.computeDepth(o.children);r+1>t&&(t=r+1)}return t}collectLeaves(e,t,o){for(let r of e)if(r.nodeType==="leaf")(!o||r.colDef.visible!==!1)&&t.push(r.colDef);else if(!o||!r.collapsed)this.collectLeaves(r.children,t,o);else{let n=this.findFirstVisibleLeaf(r.children);n&&n.colDef.visible!==!1&&t.push(n.colDef)}}sumLeafWidths(e,t){let o=0;for(let r of e)if(r.nodeType==="leaf")r.colDef.visible!==!1&&(o+=t.getWidth(r.colDef.colId));else if(!r.collapsed)o+=this.sumLeafWidths(r.children,t);else{let n=this.findFirstVisibleLeaf(r.children);n&&(o+=t.getWidth(n.colDef.colId))}return o}findFirstVisibleLeaf(e){for(let t of e)if(t.nodeType==="leaf"){if(t.colDef.visible!==!1)return t}else{let o=this.findFirstVisibleLeaf(t.children);if(o)return o}return null}nodeId(e){return e.nodeType==="group"?e.groupId:e.colDef.colId}isAncestorOf(e,t){let o=t;for(;o!==null;){if(o===e)return!0;let r=this.parentMap.get(o);o=r?r.groupId:null}return!1}};var Ro=class{constructor(e){this.iconRenderer=e;this.dragHandler=null;this.gridElGetter=null}setDragConfig(e,t){this.dragHandler=e,this.gridElGetter=t}buildGroupRows(e,t,o,r){return o===0?[]:this.computeLayout(e,t,o).map(i=>this.buildGroupRow(i,r))}updateGroupRows(e,t,o,r,n){if(e.length===0||r===0)return;let i=this.computeLayout(t,o,r);for(let s=0;s<r&&s<e.length;s++)e[s].innerHTML="",s<i.length&&this.populateGroupRow(e[s],i[s],n)}computeLayout(e,t,o){let r=Array.from({length:o},(i,s)=>({depth:s,cells:[]})),n={left:0};return this.walk(e,t,r,o,0,n),r}walk(e,t,o,r,n,i){for(let s of e){if(s.nodeType==="leaf"){if(s.colDef.visible===!1)continue;let p=i.left,h=t.getWidth(s.colDef.colId);if(i.left+=h,n===0&&o.length>0)for(let u=0;u<o.length;u++)o[u].cells.push({type:"filler",id:`_filler_${s.colDef.colId}_d${u}`,label:"",left:p,width:h,depth:u,rowSpan:1,colDef:s.colDef});continue}let l=s,a=i.left;if(l.collapsed){let p=this.getFirstVisibleLeafColId(l.children);i.left+=p?t.getWidth(p):l.collapsedWidth}else this.walk(l.children,t,o,r,n+1,i);let c=i.left-a;if(!(c<=0)&&n<o.length){let p={type:"group",id:l.groupId,label:l.header,left:a,width:c,depth:n,rowSpan:1,groupNode:l};o[n].cells.push(p)}}}getFirstVisibleLeafColId(e){for(let t of e)if(t.nodeType==="leaf"){if(t.colDef.visible!==!1)return t.colDef.colId}else{let o=this.getFirstVisibleLeafColId(t.children);if(o)return o}return null}buildGroupRow(e,t){let o=y(`pg-header-group-row pg-header-group-row--depth-${e.depth}`);return o.setAttribute("role","row"),o.setAttribute("data-group-depth",String(e.depth)),this.populateGroupRow(o,e,t),o}populateGroupRow(e,t,o){for(let r of t.cells)e.appendChild(this.buildGroupCell(r,o))}buildGroupCell(e,t){if(e.type!=="group"||!e.groupNode){let s=y("pg-th pg-th--standalone-filler");return e.colDef&&s.setAttribute("data-col-id",e.colDef.colId),s.style.left=`${e.left}px`,s.style.width=`${e.width}px`,s}let o=e.groupNode,r=o.collapsed,n=["pg-th","pg-th--group"];r&&n.push("pg-th--group--collapsed"),o.headerCssClass&&n.push(...o.headerCssClass.split(" ").filter(Boolean));let i=y(n.join(" "));if(i.setAttribute("role","columnheader"),i.setAttribute("data-group-id",o.groupId),i.setAttribute("aria-expanded",String(!r)),i.setAttribute("aria-label",o.header),i.setAttribute("tabindex","0"),i.style.left=`${e.left}px`,i.style.width=`${e.width}px`,o.headerRendererFn){let s=o.headerRendererFn({group:o,collapsed:r,api:null});typeof s=="string"?i.innerHTML=s:i.appendChild(s)}else this.buildDefaultContent(i,o,r);if(o.resizable!==!1){let s=y("pg-th__resize-handle pg-th__resize-handle--group");s.textContent="|",s.addEventListener("pointerdown",l=>{l.button===0&&(l.stopPropagation(),l.preventDefault(),this.startGroupResize(l,o,e.width,t))}),i.appendChild(s)}return this.dragHandler&&this.dragHandler.attachGroupDragListeners(i,o),i.addEventListener("click",s=>{s.target.closest(".pg-th__resize-handle")||this.dragHandler?.didJustDrag||t.onCollapseToggle?.(o.groupId)}),i.addEventListener("keydown",s=>{s.key==="Enter"||s.key===" "?(s.preventDefault(),t.onCollapseToggle?.(o.groupId)):s.key==="ArrowLeft"?(s.preventDefault(),r||t.onCollapseToggle?.(o.groupId)):s.key==="ArrowRight"&&(s.preventDefault(),r&&t.onCollapseToggle?.(o.groupId))}),i}buildDefaultContent(e,t,o){let r=y("pg-th__content"),n=y("pg-th__label");n.textContent=t.header,n.title=t.header,r.appendChild(n),e.appendChild(r);let i=y("pg-th__collapse-btn");i.setAttribute("tabindex","-1"),i.setAttribute("aria-label",o?`Expand ${t.header}`:`Collapse ${t.header}`),i.innerHTML=this.iconRenderer.renderToString(o?"chevronRight":"chevronLeft",12),e.appendChild(i)}startGroupResize(e,t,o,r){let n=e.clientX;document.body.style.cursor="col-resize",document.body.style.userSelect="none";let i=l=>{let a=Math.max(t.collapsedWidth,o+(l.clientX-n));r.onGroupResize?.(t.groupId,a)},s=l=>{let a=Math.max(t.collapsedWidth,o+(l.clientX-n));r.onGroupResize?.(t.groupId,a),document.body.style.cursor="",document.body.style.userSelect="",document.removeEventListener("pointermove",i),document.removeEventListener("pointerup",s)};document.addEventListener("pointermove",i),document.addEventListener("pointerup",s)}};var So=class{constructor(){this.canvas=null;this.ctx=null}attach(e){this.canvas=document.createElement("canvas"),this.canvas.className="pg-selection-canvas",this.canvas.style.cssText=`
4548
4316
  position: absolute;
4549
4317
  top: 0;
4550
4318
  left: 0;
4551
4319
  pointer-events: none;
4552
4320
  z-index: 10;
4553
4321
  border-radius: 0;
4554
- `,e.style.position="relative",e.appendChild(this.canvas),this.ctx=this.canvas.getContext("2d")}detach(){this.canvas?.remove(),this.canvas=null,this.ctx=null}resize(e,t){this.canvas&&(this.canvas.width=e,this.canvas.height=t)}render(e,t,o,r={}){if(!this.ctx||!this.canvas)return;this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);let n=r.fillColor??"rgba(37, 99, 235, 0.08)",i=r.borderColor??"rgba(37, 99, 235, 0.85)",s=r.cornerColor??"#2563eb",l=r.cornerSize??5,a=r.borderWidth??1.5;for(let c of e)this.renderRange(c,o,n,i,a),this.renderCorner(c,o,s,l);if(t){let c=o(t.rowIndex,t.colIndex);c&&this.renderActiveCell(c,i,a)}}clear(){!this.ctx||!this.canvas||this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height)}renderRange(e,t,o,r,n){if(!this.ctx)return;let i=ee(e),s=t(i.startRowIndex,i.startColIndex),l=t(i.endRowIndex,i.endColIndex);if(!s||!l)return;let a=this.canvas.getBoundingClientRect(),c=s.left-a.left,p=s.top-a.top,h=l.right-s.left,u=l.bottom-s.top;this.ctx.save(),this.ctx.fillStyle=o,this.ctx.fillRect(c,p,h,u),this.ctx.strokeStyle=r,this.ctx.lineWidth=n,this.ctx.strokeRect(c+.5,p+.5,h-1,u-1),this.ctx.restore()}renderCorner(e,t,o,r){if(!this.ctx)return;let n=ee(e),i=t(n.endRowIndex,n.endColIndex);if(!i)return;let s=this.canvas.getBoundingClientRect(),l=i.right-s.left,a=i.bottom-s.top;this.ctx.save(),this.ctx.fillStyle=o,this.ctx.fillRect(l-r,a-r,r*2,r*2),this.ctx.restore()}renderActiveCell(e,t,o){if(!this.ctx||!this.canvas)return;let r=this.canvas.getBoundingClientRect(),n=e.left-r.left,i=e.top-r.top;this.ctx.save(),this.ctx.strokeStyle=t,this.ctx.lineWidth=o+.5,this.ctx.strokeRect(n+1,i+1,e.width-2,e.height-2),this.ctx.restore()}};var Nl=5,Io=class{constructor(e,t={}){this.store=e;this.viewportEl=null;this.spacerTopEl=null;this.spacerBottomEl=null;this.contentEl=null;this.rowHeightCache=new Map;this.scrollListener=null;this.resizeObserver=null;this.options={rowBuffer:Nl,estimatedRowHeight:48,dynamicRowHeight:!1,...t}}mount(e,t){this.viewportEl=e,this.contentEl=t,this.spacerTopEl=y("pg-vscroll-spacer-top"),this.spacerBottomEl=y("pg-vscroll-spacer-bottom"),t.insertBefore(this.spacerTopEl,t.firstChild),t.appendChild(this.spacerBottomEl),this.scrollListener=()=>this.onScroll(),e.addEventListener("scroll",this.scrollListener,{passive:!0}),this.resizeObserver=new ResizeObserver(()=>this.onViewportResize()),this.resizeObserver.observe(e)}unmount(){this.viewportEl&&this.scrollListener&&this.viewportEl.removeEventListener("scroll",this.scrollListener),this.resizeObserver?.disconnect(),this.resizeObserver=null,this.spacerTopEl?.remove(),this.spacerBottomEl?.remove(),this.viewportEl=null,this.contentEl=null}computeVisibleRange(e){if(!this.viewportEl||e.length===0)return{start:0,end:e.length};let t=this.viewportEl.scrollTop,o=this.viewportEl.clientHeight,r=this.options.rowBuffer;if(!this.options.dynamicRowHeight){let a=this.options.estimatedRowHeight,c=Math.max(0,Math.floor(t/a)-r),p=Math.min(e.length,Math.ceil((t+o)/a)+r);return{start:c,end:p}}let n=0,i=e.length,s=0,l=!1;for(let a=0;a<e.length;a++){let c=this.getRowHeight(e[a]);if(!l&&s+c>t&&(n=Math.max(0,a-r),l=!0),s>t+o){i=Math.min(e.length,a+r);break}s+=c}return{start:n,end:i}}updateSpacers(e,t,o){if(!this.spacerTopEl||!this.spacerBottomEl)return;let r=this.sumHeights(e,0,t),n=this.sumHeights(e,o,e.length);this.spacerTopEl.style.height=`${r}px`,this.spacerBottomEl.style.height=`${n}px`}getTotalHeight(e){return this.sumHeights(e,0,e.length)}cacheRowHeight(e,t){this.rowHeightCache.set(e,t)}getRowHeight(e){return this.rowHeightCache.has(e.nodeId)?this.rowHeightCache.get(e.nodeId):e.height||this.options.estimatedRowHeight}scrollToRow(e,t){if(!this.viewportEl||e<0||e>=t.length)return;let o=this.sumHeights(t,0,e);this.viewportEl.scrollTop=o}scrollToTop(){this.viewportEl&&(this.viewportEl.scrollTop=0)}getScrollTop(){return this.viewportEl?.scrollTop??0}getScrollLeft(){return this.viewportEl?.scrollLeft??0}sumHeights(e,t,o){let r=0;for(let n=t;n<o&&n<e.length;n++)r+=this.getRowHeight(e[n]);return r}onScroll(){if(!this.viewportEl)return;let e=this.viewportEl.scrollTop,t=this.viewportEl.scrollLeft,o=e===0,r=e+this.viewportEl.clientHeight>=this.viewportEl.scrollHeight-2;this.store.set("scrollTop",e),this.store.set("scrollLeft",t)}onViewportResize(){this.viewportEl&&(this.store.set("viewportHeight",this.viewportEl.clientHeight),this.store.set("viewportWidth",this.viewportEl.clientWidth))}};var rr=(l=>(l.Display="display",l.Editor="editor",l.Option="option",l.Filter="filter",l.Tooltip="tooltip",l.Group="group",l.Header="header",l.Summary="summary",l))(rr||{});return ii(Ol);})();
4322
+ `,e.style.position="relative",e.appendChild(this.canvas),this.ctx=this.canvas.getContext("2d")}detach(){this.canvas?.remove(),this.canvas=null,this.ctx=null}resize(e,t){this.canvas&&(this.canvas.width=e,this.canvas.height=t)}render(e,t,o,r={}){if(!this.ctx||!this.canvas)return;this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height);let n=r.fillColor??"rgba(37, 99, 235, 0.08)",i=r.borderColor??"rgba(37, 99, 235, 0.85)",s=r.cornerColor??"#2563eb",l=r.cornerSize??5,a=r.borderWidth??1.5;for(let c of e)this.renderRange(c,o,n,i,a),this.renderCorner(c,o,s,l);if(t){let c=o(t.rowIndex,t.colIndex);c&&this.renderActiveCell(c,i,a)}}clear(){!this.ctx||!this.canvas||this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height)}renderRange(e,t,o,r,n){if(!this.ctx)return;let i=ee(e),s=t(i.startRowIndex,i.startColIndex),l=t(i.endRowIndex,i.endColIndex);if(!s||!l)return;let a=this.canvas.getBoundingClientRect(),c=s.left-a.left,p=s.top-a.top,h=l.right-s.left,u=l.bottom-s.top;this.ctx.save(),this.ctx.fillStyle=o,this.ctx.fillRect(c,p,h,u),this.ctx.strokeStyle=r,this.ctx.lineWidth=n,this.ctx.strokeRect(c+.5,p+.5,h-1,u-1),this.ctx.restore()}renderCorner(e,t,o,r){if(!this.ctx)return;let n=ee(e),i=t(n.endRowIndex,n.endColIndex);if(!i)return;let s=this.canvas.getBoundingClientRect(),l=i.right-s.left,a=i.bottom-s.top;this.ctx.save(),this.ctx.fillStyle=o,this.ctx.fillRect(l-r,a-r,r*2,r*2),this.ctx.restore()}renderActiveCell(e,t,o){if(!this.ctx||!this.canvas)return;let r=this.canvas.getBoundingClientRect(),n=e.left-r.left,i=e.top-r.top;this.ctx.save(),this.ctx.strokeStyle=t,this.ctx.lineWidth=o+.5,this.ctx.strokeRect(n+1,i+1,e.width-2,e.height-2),this.ctx.restore()}};var Bl=5,Io=class{constructor(e,t={}){this.store=e;this.viewportEl=null;this.spacerTopEl=null;this.spacerBottomEl=null;this.contentEl=null;this.rowHeightCache=new Map;this.scrollListener=null;this.resizeObserver=null;this.options={rowBuffer:Bl,estimatedRowHeight:48,dynamicRowHeight:!1,...t}}mount(e,t){this.viewportEl=e,this.contentEl=t,this.spacerTopEl=y("pg-vscroll-spacer-top"),this.spacerBottomEl=y("pg-vscroll-spacer-bottom"),t.insertBefore(this.spacerTopEl,t.firstChild),t.appendChild(this.spacerBottomEl),this.scrollListener=()=>this.onScroll(),e.addEventListener("scroll",this.scrollListener,{passive:!0}),this.resizeObserver=new ResizeObserver(()=>this.onViewportResize()),this.resizeObserver.observe(e)}unmount(){this.viewportEl&&this.scrollListener&&this.viewportEl.removeEventListener("scroll",this.scrollListener),this.resizeObserver?.disconnect(),this.resizeObserver=null,this.spacerTopEl?.remove(),this.spacerBottomEl?.remove(),this.viewportEl=null,this.contentEl=null}computeVisibleRange(e){if(!this.viewportEl||e.length===0)return{start:0,end:e.length};let t=this.viewportEl.scrollTop,o=this.viewportEl.clientHeight,r=this.options.rowBuffer;if(!this.options.dynamicRowHeight){let a=this.options.estimatedRowHeight,c=Math.max(0,Math.floor(t/a)-r),p=Math.min(e.length,Math.ceil((t+o)/a)+r);return{start:c,end:p}}let n=0,i=e.length,s=0,l=!1;for(let a=0;a<e.length;a++){let c=this.getRowHeight(e[a]);if(!l&&s+c>t&&(n=Math.max(0,a-r),l=!0),s>t+o){i=Math.min(e.length,a+r);break}s+=c}return{start:n,end:i}}updateSpacers(e,t,o){if(!this.spacerTopEl||!this.spacerBottomEl)return;let r=this.sumHeights(e,0,t),n=this.sumHeights(e,o,e.length);this.spacerTopEl.style.height=`${r}px`,this.spacerBottomEl.style.height=`${n}px`}getTotalHeight(e){return this.sumHeights(e,0,e.length)}cacheRowHeight(e,t){this.rowHeightCache.set(e,t)}getRowHeight(e){return this.rowHeightCache.has(e.nodeId)?this.rowHeightCache.get(e.nodeId):e.height||this.options.estimatedRowHeight}scrollToRow(e,t){if(!this.viewportEl||e<0||e>=t.length)return;let o=this.sumHeights(t,0,e);this.viewportEl.scrollTop=o}scrollToTop(){this.viewportEl&&(this.viewportEl.scrollTop=0)}getScrollTop(){return this.viewportEl?.scrollTop??0}getScrollLeft(){return this.viewportEl?.scrollLeft??0}sumHeights(e,t,o){let r=0;for(let n=t;n<o&&n<e.length;n++)r+=this.getRowHeight(e[n]);return r}onScroll(){if(!this.viewportEl)return;let e=this.viewportEl.scrollTop,t=this.viewportEl.scrollLeft,o=e===0,r=e+this.viewportEl.clientHeight>=this.viewportEl.scrollHeight-2;this.store.set("scrollTop",e),this.store.set("scrollLeft",t)}onViewportResize(){this.viewportEl&&(this.store.set("viewportHeight",this.viewportEl.clientHeight),this.store.set("viewportWidth",this.viewportEl.clientWidth))}};var ir=(l=>(l.Display="display",l.Editor="editor",l.Option="option",l.Filter="filter",l.Tooltip="tooltip",l.Group="group",l.Header="header",l.Summary="summary",l))(ir||{});return li(zl);})();