photon-grid-core 2.0.5 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cell-selection/cell-selection-engine.d.ts +35 -0
- package/cell-selection/cell-selection-engine.d.ts.map +1 -1
- package/cell-selection/cell-selection-engine.js +133 -6
- package/cell-selection/cell-selection-engine.js.map +1 -1
- package/core/grid-api.d.ts +59 -0
- package/core/grid-api.d.ts.map +1 -1
- package/core/grid-api.js +88 -1
- package/core/grid-api.js.map +1 -1
- package/core/grid-core.d.ts.map +1 -1
- package/core/grid-core.js +1 -0
- package/core/grid-core.js.map +1 -1
- package/engines/clipboard/clipboard-engine.d.ts +3 -2
- package/engines/clipboard/clipboard-engine.d.ts.map +1 -1
- package/engines/clipboard/clipboard-engine.js +4 -3
- package/engines/clipboard/clipboard-engine.js.map +1 -1
- package/engines/filter/filter-engine.d.ts +16 -0
- package/engines/filter/filter-engine.d.ts.map +1 -1
- package/engines/filter/filter-engine.js +20 -0
- package/engines/filter/filter-engine.js.map +1 -1
- package/engines/filter/filter-panel.d.ts.map +1 -1
- package/engines/filter/filter-panel.js +6 -1
- package/engines/filter/filter-panel.js.map +1 -1
- package/package.json +1 -1
- package/photon-ai/builtins/filter.commands.d.ts +15 -0
- package/photon-ai/builtins/filter.commands.d.ts.map +1 -1
- package/photon-ai/builtins/filter.commands.js +5 -5
- package/photon-ai/builtins/filter.commands.js.map +1 -1
- package/photon-ai/builtins/selection.commands.d.ts.map +1 -1
- package/photon-ai/builtins/selection.commands.js +161 -2
- package/photon-ai/builtins/selection.commands.js.map +1 -1
- package/photon-ai/provider/command-normalizer.d.ts.map +1 -1
- package/photon-ai/provider/command-normalizer.js +5 -1
- package/photon-ai/provider/command-normalizer.js.map +1 -1
- package/photon-ai/provider/system-prompt.d.ts.map +1 -1
- package/photon-ai/provider/system-prompt.js +3 -1
- package/photon-ai/provider/system-prompt.js.map +1 -1
- package/photon-grid.min.js +149 -66
- package/renderer/auto-scroller.d.ts +11 -1
- package/renderer/auto-scroller.d.ts.map +1 -1
- package/renderer/auto-scroller.js +34 -19
- package/renderer/auto-scroller.js.map +1 -1
- package/renderer/body-renderer.d.ts +16 -0
- package/renderer/body-renderer.d.ts.map +1 -1
- package/renderer/body-renderer.js +54 -1
- package/renderer/body-renderer.js.map +1 -1
- package/renderer/cell-renderer.d.ts +9 -1
- package/renderer/cell-renderer.d.ts.map +1 -1
- package/renderer/cell-renderer.js +16 -2
- package/renderer/cell-renderer.js.map +1 -1
- package/renderer/grid-renderer.d.ts +20 -0
- package/renderer/grid-renderer.d.ts.map +1 -1
- package/renderer/grid-renderer.js +117 -1
- package/renderer/grid-renderer.js.map +1 -1
- package/renderer/header-renderer.d.ts +39 -0
- package/renderer/header-renderer.d.ts.map +1 -1
- package/renderer/header-renderer.js +131 -16
- package/renderer/header-renderer.js.map +1 -1
- package/styles/base/column-group-header.css.d.ts +1 -1
- package/styles/base/column-group-header.css.d.ts.map +1 -1
- package/styles/base/column-group-header.css.js +4 -0
- package/styles/base/column-group-header.css.js.map +1 -1
- package/styles/base/context-menu.css.d.ts +1 -1
- package/styles/base/context-menu.css.d.ts.map +1 -1
- package/styles/base/context-menu.css.js +15 -0
- package/styles/base/context-menu.css.js.map +1 -1
- package/styles/base/filter.css.d.ts +1 -1
- package/styles/base/filter.css.d.ts.map +1 -1
- package/styles/base/filter.css.js +43 -2
- package/styles/base/filter.css.js.map +1 -1
- package/styles/base/header.css.d.ts +1 -1
- package/styles/base/header.css.d.ts.map +1 -1
- package/styles/base/header.css.js +4 -1
- package/styles/base/header.css.js.map +1 -1
- package/styles/base/rows.css.d.ts +1 -1
- package/styles/base/rows.css.d.ts.map +1 -1
- package/styles/base/rows.css.js +19 -0
- package/styles/base/rows.css.js.map +1 -1
- package/styles/themes/theme-alpine.d.ts +1 -1
- package/styles/themes/theme-alpine.d.ts.map +1 -1
- package/styles/themes/theme-alpine.js +1 -1
- package/styles/themes/theme-balham.d.ts +1 -1
- package/styles/themes/theme-balham.d.ts.map +1 -1
- package/styles/themes/theme-balham.js +1 -1
- package/styles/themes/theme-material.d.ts +1 -1
- package/styles/themes/theme-material.d.ts.map +1 -1
- package/styles/themes/theme-material.js +1 -1
- package/styles/themes/theme-quartz.d.ts +1 -1
- package/styles/themes/theme-quartz.d.ts.map +1 -1
- package/styles/themes/theme-quartz.js +2 -1
- package/styles/themes/theme-quartz.js.map +1 -1
- package/theme/themes/light-theme.js +1 -1
package/photon-grid.min.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var PhotonGrid=(()=>{var
|
|
1
|
+
"use strict";var PhotonGrid=(()=>{var Mo=Object.defineProperty;var ii=Object.getOwnPropertyDescriptor;var si=Object.getOwnPropertyNames;var li=Object.prototype.hasOwnProperty;var ai=(a,e)=>{for(var t in e)Mo(a,t,{get:e[t],enumerable:!0})},di=(a,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of si(e))!li.call(a,r)&&r!==t&&Mo(a,r,{get:()=>e[r],enumerable:!(o=ii(e,r))||o.enumerable});return a};var ci=a=>di(Mo({},"__esModule",{value:!0}),a);var ql={};ai(ql,{AggregationEngine:()=>Ne,BodyRenderer:()=>nt,CellEditorEngine:()=>Fe,CellRenderer:()=>rt,CellSelectionEngine:()=>qe,ChartDataTransformer:()=>ce,ChartEngine:()=>Ze,ChartRenderer:()=>oe,ClipboardEngine:()=>We,ColumnChooser:()=>tt,ColumnGroupDragHandler:()=>Qe,ColumnGroupHeaderBuilder:()=>So,ColumnGroupModel:()=>Ro,ColumnGroupNodeType:()=>Vo,ColumnGroupResizeStrategy:()=>$o,ColumnGroupStateManager:()=>at,ColumnModel:()=>Le,CommandBuilder:()=>we,CommandExecutor:()=>Ee,CommandNormalizer:()=>ge,CssVarInjector:()=>ve,DragAutoscroll:()=>$e,DragDropEngine:()=>Ue,DragPreview:()=>Ve,EntityResolver:()=>xe,EventBus:()=>ke,ExportEngine:()=>ze,FilterEngine:()=>He,FooterRenderer:()=>it,GridApi:()=>dt,GridContextBuilder:()=>ue,GridCore:()=>ut,GridEventType:()=>x,GridRenderer:()=>lt,GridStore:()=>_e,GroupingEngine:()=>Ge,HeaderIconDisplay:()=>qo,HeaderRenderer:()=>et,HttpAIProvider:()=>fe,IconRegistry:()=>Ye,IconRenderer:()=>Ke,IntentParser:()=>Ce,OverlayRenderer:()=>st,PaginationEngine:()=>Pe,PhotonAICommandRegistry:()=>Re,PhotonAIErrorKind:()=>me,PhotonAIProviderError:()=>P,PhotonAIProviderType:()=>ir,PhotonAIService:()=>Ie,RendererSlot:()=>ar,RowModel:()=>Ae,RowSelectionEngine:()=>Oe,SelectionRenderer:()=>Io,SortEngine:()=>De,SparklineRenderer:()=>ot,SummaryEngine:()=>Be,ThemeManager:()=>Xe,UndoRedoEngine:()=>ct,VirtualScrollRenderer:()=>To,buildSystemInstruction:()=>ht,coreIcons:()=>ft,createAIProvider:()=>Mt,createGrid:()=>lr,darkTheme:()=>Nt,dateComparator:()=>Ao,formatValue:()=>ee,getComparator:()=>Dt,injectBaseStyles:()=>kt,lightTheme:()=>je,normalizeInput:()=>St,numberComparator:()=>Lo,parseValue:()=>_t,registerBuiltinCommands:()=>It,removeBaseStyles:()=>Br,renderGrid:()=>oi,stringComparator:()=>_o,tokenize:()=>Rt,validateValue:()=>Lt});var dr=`
|
|
2
2
|
|
|
3
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 {
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
both light and dark; defined once here so the look changes in one place. */
|
|
12
12
|
--pg-quartz-chrome-background: var(--pg-colors-background-alt);
|
|
13
13
|
--pg-colors-header-background: var(--pg-quartz-chrome-background);
|
|
14
|
+
--pg-colors-filter-background: var(--pg-quartz-chrome-background);
|
|
14
15
|
--pg-colors-footer-background: var(--pg-quartz-chrome-background);
|
|
15
16
|
--pg-colors-scrollbar-bg: var(--pg-quartz-chrome-background);
|
|
16
17
|
--pg-colors-scrollbar-track: var(--pg-quartz-chrome-background);
|
|
@@ -107,7 +108,7 @@
|
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
/* 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); }
|
|
111
|
+
// .pg-quartz-theme .pg-row--selected { box-shadow: inset 3px 0 0 var(--pg-colors-primary); }
|
|
111
112
|
|
|
112
113
|
/* Quartz row-drag animation \u2014 smooth cubic-bezier */
|
|
113
114
|
.pg-quartz-theme .pg-grid--row-dragging .pg-row {
|
|
@@ -123,7 +124,7 @@
|
|
|
123
124
|
.pg-quartz-theme .pg-cell--serial {
|
|
124
125
|
background: var(--pg-quartz-chrome-background);
|
|
125
126
|
}
|
|
126
|
-
`;var
|
|
127
|
+
`;var cr=`
|
|
127
128
|
|
|
128
129
|
/* \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 */
|
|
129
130
|
.pg-alpine-theme .pg-grid {
|
|
@@ -218,13 +219,13 @@
|
|
|
218
219
|
}
|
|
219
220
|
|
|
220
221
|
/* Alpine selection \u2014 clean accent left bar */
|
|
221
|
-
.pg-alpine-theme .pg-row--selected { box-shadow: inset 2px 0 0 var(--pg-colors-primary); }
|
|
222
|
+
// .pg-alpine-theme .pg-row--selected { box-shadow: inset 2px 0 0 var(--pg-colors-primary); }
|
|
222
223
|
|
|
223
224
|
/* Alpine row-drag animation \u2014 snappy, fast linear */
|
|
224
225
|
.pg-alpine-theme .pg-grid--row-dragging .pg-row {
|
|
225
226
|
transition: background 100ms linear, top 100ms ease-out;
|
|
226
227
|
}
|
|
227
|
-
`;var
|
|
228
|
+
`;var pr=`
|
|
228
229
|
|
|
229
230
|
/* \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 */
|
|
230
231
|
.pg-balham-theme .pg-grid {
|
|
@@ -318,13 +319,13 @@
|
|
|
318
319
|
}
|
|
319
320
|
|
|
320
321
|
/* Balham selection \u2014 amber left accent bar */
|
|
321
|
-
.pg-balham-theme .pg-row--selected { box-shadow: inset 3px 0 0 var(--pg-colors-primary); }
|
|
322
|
+
// .pg-balham-theme .pg-row--selected { box-shadow: inset 3px 0 0 var(--pg-colors-primary); }
|
|
322
323
|
|
|
323
324
|
/* Balham row-drag \u2014 very fast, minimal */
|
|
324
325
|
.pg-balham-theme .pg-grid--row-dragging .pg-row {
|
|
325
326
|
transition: background 80ms linear, top 80ms linear;
|
|
326
327
|
}
|
|
327
|
-
`;var
|
|
328
|
+
`;var hr=`
|
|
328
329
|
|
|
329
330
|
/* \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 */
|
|
330
331
|
.pg-material-theme .pg-grid {
|
|
@@ -432,14 +433,14 @@
|
|
|
432
433
|
}
|
|
433
434
|
|
|
434
435
|
/* Material selection \u2014 no left bar, full-row tint only */
|
|
435
|
-
.pg-material-theme .pg-row--selected { box-shadow: none; }
|
|
436
|
+
// .pg-material-theme .pg-row--selected { box-shadow: none; }
|
|
436
437
|
|
|
437
438
|
/* Material row-drag animation \u2014 Material motion curve */
|
|
438
439
|
.pg-material-theme .pg-grid--row-dragging .pg-row {
|
|
439
440
|
transition: background 200ms cubic-bezier(0.4,0,0.2,1),
|
|
440
441
|
top 200ms cubic-bezier(0.4,0,0.2,1);
|
|
441
442
|
}
|
|
442
|
-
`;var
|
|
443
|
+
`;var ur=`
|
|
443
444
|
/* \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 */
|
|
444
445
|
.pg-grid {
|
|
445
446
|
display: flex;
|
|
@@ -486,7 +487,7 @@
|
|
|
486
487
|
position: relative;
|
|
487
488
|
}
|
|
488
489
|
|
|
489
|
-
`;var
|
|
490
|
+
`;var gr=`/* \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 */
|
|
490
491
|
.pg-group-drop-zone--top {
|
|
491
492
|
display: flex;
|
|
492
493
|
flex-direction: row;
|
|
@@ -650,7 +651,7 @@
|
|
|
650
651
|
flex-shrink: 0;
|
|
651
652
|
}
|
|
652
653
|
|
|
653
|
-
`;var
|
|
654
|
+
`;var mr=`/* \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 */
|
|
654
655
|
.pg-group-search {
|
|
655
656
|
display: flex;
|
|
656
657
|
align-items: center;
|
|
@@ -727,7 +728,7 @@
|
|
|
727
728
|
background: var(--pg-colors-background-alt, #f1f5f9);
|
|
728
729
|
}
|
|
729
730
|
|
|
730
|
-
`;var
|
|
731
|
+
`;var fr=`/* \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 */
|
|
731
732
|
.pg-grid__header {
|
|
732
733
|
display: flex;
|
|
733
734
|
flex-direction: row;
|
|
@@ -880,7 +881,7 @@
|
|
|
880
881
|
pointer-events: auto;
|
|
881
882
|
}
|
|
882
883
|
|
|
883
|
-
`;var
|
|
884
|
+
`;var vr=`/* \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 */
|
|
884
885
|
.pg-header-row, .pg-filter-row {
|
|
885
886
|
display: flex;
|
|
886
887
|
align-items: stretch;
|
|
@@ -889,7 +890,9 @@
|
|
|
889
890
|
.pg-filter-row {
|
|
890
891
|
height: var(--pg-filter-row-height, 36px);
|
|
891
892
|
border-top: 1px solid var(--pg-colors-border, #e2e8f0);
|
|
892
|
-
|
|
893
|
+
/* Filter row shares the header surface so it reads as one chrome band across
|
|
894
|
+
every mode/variant. A theme may still override via --pg-colors-filter-background. */
|
|
895
|
+
background: var(--pg-colors-filter-background, var(--pg-colors-header-background, #f8fafc));
|
|
893
896
|
}
|
|
894
897
|
.pg-th {
|
|
895
898
|
display: flex;
|
|
@@ -1057,6 +1060,7 @@
|
|
|
1057
1060
|
|
|
1058
1061
|
/* No vertical-borders mode: completely remove the 1px border slot from both headers and cells */
|
|
1059
1062
|
.pg-grid--no-v-borders .pg-th { border-right: none; }
|
|
1063
|
+
.pg-grid--no-v-borders .pg-filter-cell { border-right: none; }
|
|
1060
1064
|
.pg-grid--no-v-borders .pg-cell { border-right: none; }
|
|
1061
1065
|
// .pg-grid--no-v-borders .pg-th__resize-handle {
|
|
1062
1066
|
// background: var(--pg-colors-resize-handle-color, #e2e8f0);
|
|
@@ -1106,7 +1110,7 @@
|
|
|
1106
1110
|
box-shadow: 0 0 0 2px var(--pg-colors-primary-soft, rgba(37, 99, 235, 0.16));
|
|
1107
1111
|
}
|
|
1108
1112
|
|
|
1109
|
-
`;var
|
|
1113
|
+
`;var br=`/* \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 */
|
|
1110
1114
|
.pg-header-group-row {
|
|
1111
1115
|
position: relative;
|
|
1112
1116
|
flex-shrink: 0;
|
|
@@ -1228,6 +1232,7 @@
|
|
|
1228
1232
|
|
|
1229
1233
|
/* Smooth column-shift animation \u2014 enabled ONLY while actively dragging a column */
|
|
1230
1234
|
.pg-grid--col-dragging .pg-th[data-col-id],
|
|
1235
|
+
.pg-grid--col-dragging .pg-filter-cell[data-col-id],
|
|
1231
1236
|
.pg-grid--col-dragging .pg-cell[data-col-id] {
|
|
1232
1237
|
transform: translateX(var(--pg-drag-x, 0px));
|
|
1233
1238
|
transition: transform 180ms cubic-bezier(0.25, 0.46, 0.45, 0.94);
|
|
@@ -1240,11 +1245,13 @@
|
|
|
1240
1245
|
/* During header auto-scroll the transforms update every RAF tick \u2014 disable the
|
|
1241
1246
|
transition so cells snap instantly rather than endlessly chasing a moving target */
|
|
1242
1247
|
.pg-grid--col-autoscrolling .pg-th[data-col-id],
|
|
1248
|
+
.pg-grid--col-autoscrolling .pg-filter-cell[data-col-id],
|
|
1243
1249
|
.pg-grid--col-autoscrolling .pg-cell[data-col-id] {
|
|
1244
1250
|
transition: none;
|
|
1245
1251
|
}
|
|
1246
1252
|
/* Live-preview path (store mutations during drag): suppress all transitions */
|
|
1247
1253
|
.pg-grid--drag-preview-sync .pg-th[data-col-id],
|
|
1254
|
+
.pg-grid--drag-preview-sync .pg-filter-cell[data-col-id],
|
|
1248
1255
|
.pg-grid--drag-preview-sync .pg-cell[data-col-id] {
|
|
1249
1256
|
transition: none !important;
|
|
1250
1257
|
}
|
|
@@ -1265,6 +1272,7 @@
|
|
|
1265
1272
|
transform: translateX(var(--pg-drag-x, 0px));
|
|
1266
1273
|
transition: transform var(--pg-drag-transition, 180ms cubic-bezier(0.25, 0.46, 0.45, 0.94));
|
|
1267
1274
|
}
|
|
1275
|
+
.pg-grid--group-dragging .pg-filter-cell[data-col-id],
|
|
1268
1276
|
.pg-grid--group-dragging .pg-cell[data-col-id] {
|
|
1269
1277
|
transform: translateX(var(--pg-drag-x, 0px));
|
|
1270
1278
|
transition: transform var(--pg-drag-transition, 180ms cubic-bezier(0.25, 0.46, 0.45, 0.94));
|
|
@@ -1367,7 +1375,7 @@
|
|
|
1367
1375
|
animation: pg-scroll-arrow-right 700ms ease-in-out infinite;
|
|
1368
1376
|
}
|
|
1369
1377
|
|
|
1370
|
-
`;var
|
|
1378
|
+
`;var yr=`/* \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 */
|
|
1371
1379
|
.pg-drag-preview {
|
|
1372
1380
|
position: fixed;
|
|
1373
1381
|
pointer-events: none;
|
|
@@ -1420,9 +1428,13 @@
|
|
|
1420
1428
|
|
|
1421
1429
|
.pg-filter-cell {
|
|
1422
1430
|
display: flex;
|
|
1431
|
+
gap: 6px;
|
|
1423
1432
|
align-items: center;
|
|
1424
1433
|
flex-shrink: 0;
|
|
1425
1434
|
padding: 0 6px;
|
|
1435
|
+
/* Column divider \u2014 themed, and gated by showVerticalBorders (removed under
|
|
1436
|
+
.pg-grid--no-v-borders, same as .pg-th/.pg-cell) so the filter row's
|
|
1437
|
+
vertical lines stay continuous with the header and body columns. */
|
|
1426
1438
|
border-right: 1px solid var(--pg-colors-border, #e2e8f0);
|
|
1427
1439
|
}
|
|
1428
1440
|
.pg-filter-cell:last-child { border-right: none; }
|
|
@@ -1439,8 +1451,11 @@
|
|
|
1439
1451
|
flex-shrink: 0;
|
|
1440
1452
|
}
|
|
1441
1453
|
.pg-filter-input {
|
|
1442
|
-
|
|
1443
|
-
|
|
1454
|
+
/* Grow to fill the cell but yield room for the trailing filter icon. */
|
|
1455
|
+
flex: 1 1 auto;
|
|
1456
|
+
width: auto !important;
|
|
1457
|
+
min-width: 0 !important;
|
|
1458
|
+
height: 70%;
|
|
1444
1459
|
padding: 0 8px;
|
|
1445
1460
|
border: 1px solid var(--pg-colors-border, #e2e8f0);
|
|
1446
1461
|
border-radius: var(--pg-borders-radius-sm, 4px);
|
|
@@ -1453,6 +1468,40 @@
|
|
|
1453
1468
|
}
|
|
1454
1469
|
.pg-filter-input:focus { border-color: var(--pg-colors-border-focus, #2563eb); }
|
|
1455
1470
|
|
|
1471
|
+
/* Set-type columns (object / array / dropdown): read-only input that looks
|
|
1472
|
+
disabled and opens the checkbox filter dropdown on click. */
|
|
1473
|
+
.pg-filter-input--set {
|
|
1474
|
+
cursor: pointer;
|
|
1475
|
+
color: var(--pg-colors-text-secondary, #64748b);
|
|
1476
|
+
background: var(--pg-colors-background-alt, #f1f5f9);
|
|
1477
|
+
}
|
|
1478
|
+
.pg-filter-input--set::placeholder { color: var(--pg-colors-text-secondary, #64748b); }
|
|
1479
|
+
|
|
1480
|
+
/* Trailing filter icon inside each filter cell \u2014 opens the filter panel. */
|
|
1481
|
+
.pg-filter-cell__icon {
|
|
1482
|
+
display: inline-flex;
|
|
1483
|
+
align-items: center;
|
|
1484
|
+
justify-content: center;
|
|
1485
|
+
flex-shrink: 0;
|
|
1486
|
+
width: 22px;
|
|
1487
|
+
height: 22px;
|
|
1488
|
+
border-radius: var(--pg-borders-radius-sm, 4px);
|
|
1489
|
+
color: var(--pg-colors-text-secondary, #64748b);
|
|
1490
|
+
cursor: pointer;
|
|
1491
|
+
transition: background var(--pg-transitions-duration-fast, 100ms),
|
|
1492
|
+
color var(--pg-transitions-duration-fast, 100ms);
|
|
1493
|
+
}
|
|
1494
|
+
.pg-filter-cell__icon:hover {
|
|
1495
|
+
background: var(--pg-colors-background-alt, #f1f5f9);
|
|
1496
|
+
color: var(--pg-colors-text-primary, #1e293b);
|
|
1497
|
+
}
|
|
1498
|
+
.pg-filter-cell__icon:focus-visible {
|
|
1499
|
+
outline: 2px solid var(--pg-colors-border-focus, #2563eb);
|
|
1500
|
+
outline-offset: -1px;
|
|
1501
|
+
}
|
|
1502
|
+
.pg-filter-cell__icon svg { display: block; }
|
|
1503
|
+
.pg-filter-cell__icon--active { color: var(--pg-colors-primary, #2563eb); }
|
|
1504
|
+
|
|
1456
1505
|
/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Filter Panel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
|
|
1457
1506
|
.pg-filter-panel {
|
|
1458
1507
|
position: absolute;
|
|
@@ -1670,7 +1719,7 @@
|
|
|
1670
1719
|
color: var(--pg-colors-text-primary, #1e293b);
|
|
1671
1720
|
}
|
|
1672
1721
|
|
|
1673
|
-
`;var
|
|
1722
|
+
`;var Cr=`/* \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 */
|
|
1674
1723
|
.pg-row {
|
|
1675
1724
|
display: flex;
|
|
1676
1725
|
align-items: stretch;
|
|
@@ -1688,6 +1737,25 @@
|
|
|
1688
1737
|
outline: none;
|
|
1689
1738
|
}
|
|
1690
1739
|
.pg-row--selected .pg-cell { color: inherit; }
|
|
1740
|
+
|
|
1741
|
+
/* Row-selection outline \u2014 a thin primary-coloured border drawn around the
|
|
1742
|
+
whole selected block, mirroring the cell-range selection border. Edges are
|
|
1743
|
+
drawn via ::after so corners connect cleanly; JS (BodyRenderer.refreshRow-
|
|
1744
|
+
SelectionEdges) adds the edge classes only on the block's outer rows/parts
|
|
1745
|
+
(top of a run, bottom of a run, leftmost part, rightmost part) so interior
|
|
1746
|
+
boundaries between adjacent selected rows carry no line. */
|
|
1747
|
+
.pg-row--selected::after {
|
|
1748
|
+
content: '';
|
|
1749
|
+
position: absolute;
|
|
1750
|
+
inset: 0;
|
|
1751
|
+
border: 0 solid var(--pg-colors-primary, #2563eb);
|
|
1752
|
+
pointer-events: none;
|
|
1753
|
+
z-index: 3;
|
|
1754
|
+
}
|
|
1755
|
+
.pg-row--sel-top::after { border-top-width: 1px; }
|
|
1756
|
+
.pg-row--sel-bottom::after { border-bottom-width: 1px; }
|
|
1757
|
+
.pg-row--sel-edge-left::after { border-left-width: 1px; }
|
|
1758
|
+
.pg-row--sel-edge-right::after { border-right-width: 1px; }
|
|
1691
1759
|
.pg-row--group {
|
|
1692
1760
|
background: var(--pg-colors-group-row-background, #f8fafc);
|
|
1693
1761
|
font-weight: var(--pg-typography-font-weight-semi-bold, 600);
|
|
@@ -1732,7 +1800,7 @@
|
|
|
1732
1800
|
color: var(--pg-colors-text-secondary, #475569);
|
|
1733
1801
|
}
|
|
1734
1802
|
|
|
1735
|
-
`;var
|
|
1803
|
+
`;var xr=`/* \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 */
|
|
1736
1804
|
.pg-cell {
|
|
1737
1805
|
display: flex;
|
|
1738
1806
|
align-items: center;
|
|
@@ -1975,7 +2043,7 @@
|
|
|
1975
2043
|
background-color: rgba(37, 99, 235, 0.12) !important;
|
|
1976
2044
|
}
|
|
1977
2045
|
|
|
1978
|
-
`;var
|
|
2046
|
+
`;var wr=`/* \u2500\u2500\u2500 Context menu \u2500\u2500\u2500 */
|
|
1979
2047
|
.pg-context-menu {
|
|
1980
2048
|
position: fixed;
|
|
1981
2049
|
z-index: 999999;
|
|
@@ -2060,6 +2128,21 @@
|
|
|
2060
2128
|
[data-pg-mode="dark"] .pg-cell--serial {
|
|
2061
2129
|
background: var(--pg-colors-header-background, var(--pg-colors-footer-background, #1e293b));
|
|
2062
2130
|
}
|
|
2131
|
+
/* \u2500\u2500 Serial column as a row-selection column (opt-in) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
|
|
2132
|
+
When serialColumnSelection is enabled, the "#" cell becomes an AG Grid\u2013style
|
|
2133
|
+
selection handle: mouse-down starts a row drag-selection. The selected-state
|
|
2134
|
+
outline is drawn around the whole row (see rows.css), not on this cell. */
|
|
2135
|
+
.pg-cell--serial-select {
|
|
2136
|
+
cursor: pointer;
|
|
2137
|
+
user-select: none;
|
|
2138
|
+
}
|
|
2139
|
+
.pg-cell--serial-select:hover {
|
|
2140
|
+
background: var(--pg-colors-header-hover, var(--pg-colors-background-alt, #f1f5f9));
|
|
2141
|
+
}
|
|
2142
|
+
.pg-cell--serial-select:focus-visible {
|
|
2143
|
+
outline: none;
|
|
2144
|
+
box-shadow: inset 0 0 0 2px var(--pg-colors-primary, #2563eb);
|
|
2145
|
+
}
|
|
2063
2146
|
.pg-cell--bool-true { color: var(--pg-colors-success, #16a34a); }
|
|
2064
2147
|
.pg-cell--bool-false { color: var(--pg-colors-text-disabled, #94a3b8); }
|
|
2065
2148
|
.pg-cell__image { border-radius: var(--pg-borders-radius-sm, 4px); object-fit: cover; }
|
|
@@ -2077,7 +2160,7 @@
|
|
|
2077
2160
|
.pg-cell--editing .pg-cell__inner { padding: 0; overflow: visible; }
|
|
2078
2161
|
.pg-selection-canvas { position: absolute; top: 0; left: 0; pointer-events: none; z-index: 10; }
|
|
2079
2162
|
|
|
2080
|
-
`;var
|
|
2163
|
+
`;var Er=`/* \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 */
|
|
2081
2164
|
.pg-checkbox {
|
|
2082
2165
|
width: var(--pg-sizing-checkbox-size, 16px);
|
|
2083
2166
|
height: var(--pg-sizing-checkbox-size, 16px);
|
|
@@ -2147,7 +2230,7 @@
|
|
|
2147
2230
|
letter-spacing: 0.02em;
|
|
2148
2231
|
}
|
|
2149
2232
|
|
|
2150
|
-
`;var
|
|
2233
|
+
`;var Rr=`/* \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
|
|
2151
2234
|
The toggle column's cell gets a marker class ('.pg-cell--tree-toggle-col',
|
|
2152
2235
|
applied by applyTreeToggle regardless of whether the row has children \u2014
|
|
2153
2236
|
leaves still need to sit indented under their parent), then indentation is
|
|
@@ -2216,7 +2299,7 @@
|
|
|
2216
2299
|
box-shadow: inset 0 -2px 0 0 var(--pg-colors-primary, #2563eb);
|
|
2217
2300
|
}
|
|
2218
2301
|
|
|
2219
|
-
`;var
|
|
2302
|
+
`;var Sr=`/* \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 */
|
|
2220
2303
|
|
|
2221
2304
|
/* Native vertical scrollbar \u2014 flex item that lives beside the center panel.
|
|
2222
2305
|
It is NOT absolutely positioned so it never overlaps cell content; the center
|
|
@@ -2312,7 +2395,7 @@
|
|
|
2312
2395
|
/* Hidden state \u2014 applied to wraps */
|
|
2313
2396
|
.pg-scrollbar--hidden { display: none; }
|
|
2314
2397
|
|
|
2315
|
-
`;var
|
|
2398
|
+
`;var Ir=`/* \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 */
|
|
2316
2399
|
.pg-editor {
|
|
2317
2400
|
width: 100%;
|
|
2318
2401
|
height: 100%;
|
|
@@ -2594,7 +2677,7 @@
|
|
|
2594
2677
|
flex-shrink: 0;
|
|
2595
2678
|
}
|
|
2596
2679
|
|
|
2597
|
-
`;var
|
|
2680
|
+
`;var Tr=`/* \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 */
|
|
2598
2681
|
.pg-grid__footer {
|
|
2599
2682
|
flex-shrink: 0;
|
|
2600
2683
|
border-top: 1px solid var(--pg-colors-footer-border, #e2e8f0);
|
|
@@ -2663,7 +2746,7 @@
|
|
|
2663
2746
|
outline: none;
|
|
2664
2747
|
}
|
|
2665
2748
|
|
|
2666
|
-
`;var
|
|
2749
|
+
`;var Mr=`/* \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 */
|
|
2667
2750
|
.pg-overlay {
|
|
2668
2751
|
position: absolute;
|
|
2669
2752
|
inset: 0;
|
|
@@ -2719,7 +2802,7 @@
|
|
|
2719
2802
|
word-break: break-word;
|
|
2720
2803
|
}
|
|
2721
2804
|
|
|
2722
|
-
`;var
|
|
2805
|
+
`;var kr=`/* \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
2806
|
.pg-grid__body { position: relative; transform: translateZ(10px);}
|
|
2724
2807
|
|
|
2725
2808
|
.pg-row-drag-handle {
|
|
@@ -2803,7 +2886,7 @@
|
|
|
2803
2886
|
top 130ms cubic-bezier(0.2, 0, 0, 1);
|
|
2804
2887
|
}
|
|
2805
2888
|
|
|
2806
|
-
`;var
|
|
2889
|
+
`;var _r=`/* \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 */
|
|
2807
2890
|
.pg-chart-panel-backdrop {
|
|
2808
2891
|
position: absolute; inset: 0; z-index: 9990;
|
|
2809
2892
|
background: transparent;
|
|
@@ -2942,7 +3025,7 @@
|
|
|
2942
3025
|
max-width: 120px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
|
|
2943
3026
|
}
|
|
2944
3027
|
|
|
2945
|
-
`;var
|
|
3028
|
+
`;var Lr=`/* \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 */
|
|
2946
3029
|
.pg-context-menu__item { display: flex; align-items: center; gap: 8px; }
|
|
2947
3030
|
.pg-context-menu__item--has-sub { position: relative; padding-right: 28px; max-width: stretch; }
|
|
2948
3031
|
.pg-context-menu__item--has-sub > .pg-context-menu__sub { display: none; }
|
|
@@ -3048,7 +3131,7 @@
|
|
|
3048
3131
|
min-width: 12px;
|
|
3049
3132
|
}
|
|
3050
3133
|
|
|
3051
|
-
`;var
|
|
3134
|
+
`;var Ar=`/* \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Column Context Menu \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
|
|
3052
3135
|
|
|
3053
3136
|
/* Menu container \u2014 fixed-position dropdown attached to document.body.
|
|
3054
3137
|
Height is capped so the menu never grows into the viewport's top/bottom
|
|
@@ -3216,7 +3299,7 @@
|
|
|
3216
3299
|
height: 100%;
|
|
3217
3300
|
}
|
|
3218
3301
|
|
|
3219
|
-
`;var
|
|
3302
|
+
`;var Dr=`/* \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
|
|
3220
3303
|
The detail layer is a sibling of the left/center/right body panels, not a
|
|
3221
3304
|
child of any of them \u2014 that is what lets a detail row span the full grid
|
|
3222
3305
|
width regardless of pinned columns. Its content wrapper receives only the
|
|
@@ -3409,7 +3492,7 @@
|
|
|
3409
3492
|
background: var(--pg-colors-resize-handle-color, #e2e8f0);
|
|
3410
3493
|
}
|
|
3411
3494
|
|
|
3412
|
-
`;var
|
|
3495
|
+
`;var Hr=`/* \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
|
|
3413
3496
|
Floating command bar, anchored to the grid body's bottom-right corner.
|
|
3414
3497
|
Mounted as a sibling of the pinned-column panels (see PhotonAIPanel.mount /
|
|
3415
3498
|
GridRenderer.buildLayout) so it floats independently of virtualization and
|
|
@@ -3665,7 +3748,7 @@
|
|
|
3665
3748
|
}
|
|
3666
3749
|
}
|
|
3667
3750
|
|
|
3668
|
-
`;var
|
|
3751
|
+
`;var Pr=`/* \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
|
|
3669
3752
|
* Only mounted/shown for columns with renderer.tooltip \u2014 plain columns keep
|
|
3670
3753
|
* using the free native title attribute. Positioned via a transform set
|
|
3671
3754
|
* in JS relative to .pg-grid__body so it never affects grid layout. */
|
|
@@ -3695,7 +3778,7 @@
|
|
|
3695
3778
|
visibility: visible;
|
|
3696
3779
|
}
|
|
3697
3780
|
|
|
3698
|
-
`;var
|
|
3781
|
+
`;var Gr=`
|
|
3699
3782
|
.pg-chart-config {
|
|
3700
3783
|
position: absolute;
|
|
3701
3784
|
top: 0;
|
|
@@ -3811,7 +3894,7 @@
|
|
|
3811
3894
|
height: 100%;
|
|
3812
3895
|
pointer-events: none;
|
|
3813
3896
|
}
|
|
3814
|
-
`;var
|
|
3897
|
+
`;var Nr=`
|
|
3815
3898
|
.pg-chart-ctrl__row {
|
|
3816
3899
|
display: flex;
|
|
3817
3900
|
align-items: center;
|
|
@@ -3969,7 +4052,7 @@
|
|
|
3969
4052
|
opacity: 0.4;
|
|
3970
4053
|
pointer-events: none;
|
|
3971
4054
|
}
|
|
3972
|
-
`;var
|
|
4055
|
+
`;var Or=`/* \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 */
|
|
3973
4056
|
|
|
3974
4057
|
/* Positioning layer only \u2014 no backdrop scrim/blur, and transparent to pointer
|
|
3975
4058
|
events so the grid behind stays visible and interactive. The dialog itself
|
|
@@ -4197,7 +4280,7 @@
|
|
|
4197
4280
|
text-align: center;
|
|
4198
4281
|
color: var(--pg-colors-text-secondary, #94a3b8);
|
|
4199
4282
|
}
|
|
4200
|
-
`;var
|
|
4283
|
+
`;var Fr=`/* \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 */
|
|
4201
4284
|
|
|
4202
4285
|
/* Scroll surfaces: suppress native pan/zoom so JS panning owns the gesture. */
|
|
4203
4286
|
.pg-grid__header,
|
|
@@ -4259,23 +4342,23 @@
|
|
|
4259
4342
|
min-height: 16px;
|
|
4260
4343
|
}
|
|
4261
4344
|
}
|
|
4262
|
-
`;var
|
|
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(
|
|
4345
|
+
`;var ko="photon-grid-base-styles",pi=[ur,gr,mr,fr,vr,br,yr,Cr,xr,wr,Er,Rr,Sr,Ir,Tr,Mr,kr,_r,Lr,Ar,Dr,Hr,Pr,Gr,Nr,Or,Fr].join(""),hi=[pi,dr,cr,pr,hr].join(`
|
|
4346
|
+
`);function kt(){if(document.getElementById(ko))return;let a=document.createElement("style");a.id=ko,a.textContent=hi,document.head.appendChild(a)}function Br(){document.getElementById(ko)?.remove()}function _t(a,e){if(a==null||a==="")return e.required,null;switch(e.type){case"number":case"currency":{let t=Number(a);return isNaN(t)?null:t}case"boolean":return typeof a=="boolean"?a:typeof a=="string"?a.toLowerCase()==="true"||a==="1":!!a;case"date":case"time":{let t=new Date(a);return isNaN(t.getTime())?null:t.toISOString()}case"array":return Array.isArray(a)?a:[a];default:return String(a)}}function ee(a,e,t){if(a==null)return"";switch(e.type){case"number":{let o=Number(a);if(isNaN(o))return String(a);let r=t?.locale??"en-US";return o.toLocaleString(r,{minimumFractionDigits:0,maximumFractionDigits:2})}case"currency":{let o=Number(a);return isNaN(o)?String(a):`${t?.currencySymbol??"$"}${o.toLocaleString(t?.locale??"en-US",{minimumFractionDigits:2,maximumFractionDigits:2})}`}case"date":{let o=new Date(a);return isNaN(o.getTime())?String(a):ui(o,t?.dateFormat??"dd/MM/yyyy",t?.timeZone)}case"time":{let o=new Date(a);return isNaN(o.getTime())?String(a):o.toLocaleTimeString(t?.locale??"en-US",{hour:"2-digit",minute:"2-digit",timeZone:t?.timeZone})}case"boolean":return a?"Yes":"No";case"array":return Array.isArray(a)?a.join(", "):String(a);case"dropdown":{let o=e.dropdownOptions?.find(r=>String(r.value)===String(a));return o?o.label:String(a)}default:{let o=String(a);return o.charAt(0).toUpperCase()+o.slice(1)}}}function Lt(a,e){if(e.required&&(a==null||a===""))return`${e.header} is required`;if(e.type==="number"||e.type==="currency"){let t=Number(a);if(a!=null&&a!==""&&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"&&a&&!/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(String(a))?`${e.header} must be a valid email address`:e.validatorFn?e.validatorFn(a):null}function ui(a,e,t){let o={};t&&(o.timeZone=t);let r=i=>String(i).padStart(2,"0"),n=new Date(a.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 U(a,e){return a.renderer?.[e]}var At=class a{constructor(e,t,o,r,n){this.container=e;this.cellEl=t;this.options=o;this.currentValue=r;this.callbacks=n;this.instanceId=++a.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(a.MAX_VISIBLE);break;case"PageUp":e.preventDefault(),this.navigate(-a.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),a.MAX_VISIBLE)*a.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*a.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=a.ITEM_HEIGHT,o=a.SCROLL_BUFFER,r=a.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 d=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(d,l,c,p);typeof u=="string"?h.innerHTML=u:h.appendChild(u)}else{let u=this.buildIcon(d,"pg-dropdown-editor__opt-icon");u&&h.appendChild(u);let g=document.createElement("span");if(g.className="pg-dropdown-editor__opt-label",g.textContent=d.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=a.ITEM_HEIGHT,r=Math.min(Math.max(this.options.length,1),a.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 d=Math.max(i,Math.min(e.left,window.innerWidth-n-i));this.panelEl.style.top=`${Math.max(i,s)}px`,this.panelEl.style.left=`${d}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=a.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 ke=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 _e=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 zr(a){return a.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 Wr(a){let e=0,t=o=>o.map(r=>{let n=r.colId??`col_${r.field}_${e++}`;return{...r,colId:n,header:r.header??zr(r.field),type:r.type??"string",children:r.children?t(r.children):void 0}});return t(a)}var Le=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(d=>d.colId===e);if(i===-1){this.rebuildPinnedSections(),this.store.set("columns",[...this.columns]);return}let s;if(o)s=n.findIndex(d=>d.colId===o),s===-1&&(s=n.length);else{let d=[...n].reverse().find(c=>(c.pinned??null)===(t??null)&&c.colId!==e);s=d?n.findIndex(c=>c.colId===d.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(d=>o.find(c=>c.colId===d)).filter(d=>!!d);if(n.length===0)return;let i=o.filter(d=>!r.has(d.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,d=Math.round((i.width??150)/o*e);i.width=Math.min(l,Math.max(s,d)),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??zr(e.field)}}emitStatesChanged(){this.eventBus.emit(x.COLUMNS_STATE_CHANGED,{states:this.getColumnStates()})}};function gt(a){return`detail_${a}`}var gi=0;function Vr(){return`rn_${++gi}_${Math.random().toString(36).slice(2,7)}`}var Ae=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:Vr(),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:gt(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 d=o.get(l);d&&(r.push(d),o.delete(l))}let n=[];if(e.update?.length)for(let l of e.update){let d=l[this.idField],c=d!==void 0?o.get(d):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]??Vr(),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 mi=new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"});function $r(a){if(a==null||a==="")return NaN;let e=Number(a);return isNaN(e)?NaN:e}function Ur(a){if(a instanceof Date)return a.getTime();if(typeof a=="string"||typeof a=="number"){let e=new Date(a);return isNaN(e.getTime())?NaN:e.getTime()}return NaN}var _o=(a,e)=>{let t=a==null?"":String(a),o=e==null?"":String(e);return t===o?0:t===""?1:o===""?-1:mi.compare(t,o)},Lo=(a,e)=>{let t=$r(a),o=$r(e);return isNaN(t)&&isNaN(o)?0:isNaN(t)?1:isNaN(o)?-1:t-o},Ao=(a,e)=>{let t=Ur(a),o=Ur(e);return isNaN(t)&&isNaN(o)?0:isNaN(t)?1:isNaN(o)?-1:t-o},fi=(a,e)=>(a?1:0)-(e?1:0);function Dt(a){switch(a){case"number":case"currency":case"percentage":return Lo;case"date":case"time":return Ao;case"boolean":return fi;default:return _o}}function vi(a,e){let t=e.split("."),o=a;for(let r of t){if(o==null)return;o=o[r]}return o}var De=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,d=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?vi(u,f.field):u[f.field]}d[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(d[g][0],d[m][0])*u)}else c.sort((h,u)=>{let g=d[h],m=d[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 qr(a){return a==null?"":String(a).toLowerCase().trim()}function Do(a){return Number(a)}function Ho(a){if(!a)return null;let e=new Date(a);return isNaN(e.getTime())?null:e}function de(a){return a==null||String(a).trim()===""}function jr(a,e){let t=qr(e),o=qr(a.value);switch(a.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 de(e);case"notBlank":return!de(e);default:return!0}}function Xr(a,e){let t=Do(e),o=Do(a.value);if(isNaN(t))return a.operator==="blank";switch(a.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(a.valueTo);return t>=o&&t<=r}case"blank":return de(e);case"notBlank":return!de(e);default:return!0}}function Yr(a,e){let t=Ho(e),o=Ho(a.value);if(!t)return a.operator==="blank";if(!o&&a.operator!=="blank"&&a.operator!=="notBlank")return!0;switch(a.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=Ho(a.valueTo);return!!r&&t>=o&&t<=r}case"blank":return de(e);case"notBlank":return!de(e);default:return!0}}function Kr(a,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 a==="in"?n:!n}return a==="in"?o.has(r):!o.has(r)}function Zr(a,e){switch(a.operator){case"equals":return!!e==!!a.value;case"notEquals":return!!e!=!!a.value;case"blank":return de(e);case"notBlank":return!de(e);default:return!0}}function Jr(a,e){let t=e.split("."),o=a;for(let r of t){if(o==null)return;o=o[r]}return o}var He=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))}matchesColumnFilter(e,t,o){return e.type!=="data"?!1:this.passesColumnFilters(e,[[t.colId,t]],new Map([[o.colId,o]]))}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=Jr(e.data,n.field);if(n.selectedIds&&n.selectedIds.length>0){if(!Kr("in",n.selectedIds,s))return!1;continue}if(!n.conditions||n.conditions.length===0)continue;let[l,d]=n.conditions,c=this.evaluateCondition(n.type,l,s,i);if(!d||n.logic==="and"){if(!c||d&&!this.evaluateCondition(n.type,d,s,i))return!1}else{let p=this.evaluateCondition(n.type,d,s,i);if(!c&&!p)return!1}}return!0}evaluateCondition(e,t,o,r){switch(e){case"number":case"currency":return Xr(t,o);case"date":case"time":return Yr(t,o);case"boolean":return Zr(t,o);default:return jr(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 d=Jr(e.data,l);if((r?String(d??""):String(d??"").toLowerCase()).includes(i))return!0}return!1}};var Pe=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 Ht(a,e){let t=e.split("."),o=a;for(let r of t){if(o==null)return;o=o[r]}return o}function Qr(a,e){if(a==null||a==="")return"_Blank";if(typeof a=="object"){let o=a;return String(o.label??o.name??o.value??o.id??JSON.stringify(a))}if(e==="is_deleted"||e==="deleted")return a?"Archived":"Active";let t=String(a);return t.charAt(0).toUpperCase()+t.slice(1)}function Go(a,e){let t=[];for(let o of a){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:Po(o),aggregatedValues:o.aggregatedValues,height:50,top:0};t.push(n),r&&(o.children.length>0?t.push(...Go(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:Po(o),aggregatedValues:o.aggregatedValues,height:50,top:0}))}return t}function Po(a){return a.children.length===0?a.rows.length:a.children.reduce((e,t)=>e+Po(t),0)}var Ge=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(d=>d.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 Go(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 d of t){if(d.type!=="data")continue;let c=Ht(d.data,n),p=Qr(c,n),h=s.get(p)??[];h.push(d),s.set(p,h)}let l=[];for(let[d,c]of s){let p=r?`${r}||${n}::${d}`:`${n}::${d}`,h=i.length>0?this.buildGroupTree(i,c,o+1,p):[];l.push({key:p,field:n,value:d,level:o,children:h,rows:i.length===0?c:[],expanded:this.store.get("expandedGroupKeys").has(p)})}return l}};var Ne=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=Ht(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 Oe=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 Fe=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=_t(n,o),l=Lt(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 d=document.createElement("span");d.className="pg-editor__ms-arrow",s.appendChild(l),s.appendChild(d);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 Be=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,d=n.summaryLabel??"";switch(i){case"sum":l=s.reduce((c,p)=>c+p,0),d=d||"Sum";break;case"avg":l=s.length>0?s.reduce((c,p)=>c+p,0)/s.length:null,d=d||"Avg";break;case"min":l=s.length>0?Math.min(...s):null,d=d||"Min";break;case"max":l=s.length>0?Math.max(...s):null,d=d||"Max";break;case"count":l=o.length,d=d||"Count";break;case"none":l=null;break}r[n.colId]={value:l,label:d,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 ze=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}):ee(h,p);return this.escapeCsvCell(u)}).join(",")),d=[s,...l].join(`\r
|
|
4347
|
+
`);this.downloadFile(d,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}):ee(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 d=`<?xml version="1.0"?>
|
|
4265
4348
|
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
|
|
4266
4349
|
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
|
|
4267
4350
|
<Worksheet ss:Name="Sheet1">
|
|
4268
4351
|
<Table>${s.join("")}</Table>
|
|
4269
4352
|
</Worksheet>
|
|
4270
|
-
</Workbook>`;this.downloadFile(
|
|
4271
|
-
`)?`"${e.replace(/"/g,'""')}"`:e}escapeXml(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}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
|
|
4272
|
-
`))}copyCellValue(e,t){let o=this.buildDescriptors([t],0,0)[0];return this.writeToClipboard(
|
|
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))),
|
|
4353
|
+
</Workbook>`;this.downloadFile(d,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(`
|
|
4354
|
+
`)?`"${e.replace(/"/g,'""')}"`:e}escapeXml(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}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 Pt(a,e){if(a==null)return"";switch(e.type){case"number":case"currency":case"percentage":return String(a);case"boolean":return a?"Yes":"No";case"array":return Array.isArray(a)?a.join(", "):String(a);case"dropdown":{let t=e.dropdownMap?.get(String(a));return t??String(a)}default:return String(a)}}function No(a,e){if(!e.nested)return a[e.field];let t=a;for(let o of e.parts){if(t==null)return;t=t[o]}return t}var We=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,o=!1){let r=this.buildDescriptors(t,0,t.length-1),n=o?[t.map(i=>i.header).join(" ")]:[];for(let i of e){let s=new Array(r.length);for(let l=0;l<r.length;l++)s[l]=Pt(No(i.data,r[l]),r[l]);n.push(s.join(" "))}return this.writeToClipboard(n.join(`
|
|
4355
|
+
`))}copyCellValue(e,t){let o=this.buildDescriptors([t],0,0)[0];return this.writeToClipboard(Pt(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),d=Math.min(i.startColIndex,i.endColIndex),c=Math.max(i.startColIndex,i.endColIndex),p=d<0,h=p?0:d,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]=Pt(No(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(`
|
|
4356
|
+
`),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))),d=Math.max(...n.map(g=>g.endColIndex));if(d<0)return{text:"",buffer:[]};let c=this.buildDescriptors(o,l,d),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]=Pt(No(m.data,c[b]),c[b]))}h.push(C.join(" ")),u.push(C)}return{text:h.join(`
|
|
4274
4357
|
`),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(`
|
|
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(`
|
|
4358
|
+
`).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 Ve=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 $e=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 en=4;var Ue=class{constructor(e){this.eventBus=e;this.dropTargets=new Map;this.currentSession=null;this.preview=new Ve;this.autoscroll=new $e;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<en&&n<en)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 te(a){return{startRowIndex:Math.min(a.startRowIndex,a.endRowIndex),endRowIndex:Math.max(a.startRowIndex,a.endRowIndex),startColIndex:Math.min(a.startColIndex,a.endColIndex),endColIndex:Math.max(a.startColIndex,a.endColIndex)}}function Oo(a,e,t){for(let o of t){let r=te(o);if(a>=r.startRowIndex&&a<=r.endRowIndex&&e>=r.startColIndex&&e<=r.endColIndex)return!0}return!1}var Fo=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)}},mt=new Fo;var qe=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.clearRowSelectionCallback=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.serialRowSelectionEnabled=!1;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)}setSerialColumnSelection(e){this.serialRowSelectionEnabled=e}setEnterEditHandler(e){this.enterEditHandler=e}setTreeToggleHandler(e){this.treeToggleHandler=e}setScrollToCellCallback(e){this.scrollToCellCallback=e}setClearRowSelectionCallback(e){this.clearRowSelectionCallback=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),mt.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){mt.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}mt.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 Oo(e,t,this.store.get("cellRanges"))}addRangeCell(e,t){mt.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(te):[];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")),d=o&&Oo(s,l,e),c=!!t&&t.rowIndex===s&&t.colIndex===l;if(i.classList.toggle("pg-cell--in-selection",d),i.classList.toggle("pg-cell--active-cell",c),d){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=te(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=te(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,d=i<s.startColIndex?i-s.startColIndex:i>s.endColIndex?i-s.endColIndex:0;Math.abs(l)>=Math.abs(d)?(this.fillDirection=l>=0?"down":"up",this.fillTargetRow=n,this.fillTargetCol=null):(this.fillDirection=d>=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")),d=Number(s.getAttribute("data-col-index"));l>=t&&l<=o&&d>=r&&d<=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"),d===r&&s.classList.add("pg-cell--fp-left"),d===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"),d=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=d[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=d[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 d=Number(l.getAttribute("data-row-index")),c=Number(l.getAttribute("data-col-index"));d>=e&&d<=t&&c>=o&&c<=r&&i.push(l)}for(let s of i)s.classList.remove("pg-cell--fill-flash","pg-cell--cut-flash","pg-cell--copy-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 copySelectedRows(){let e=this.store.get("selectedRowIds");if(e.size===0)return;let t=this.store.get("visibleRows"),o=this.getVisibleColumns(),r=t.filter(i=>e.has(i.nodeId));if(r.length===0)return;let n=this.selectedRowBounds(e,t,o.length);return n&&this.flashFillArea(n.minRow,n.maxRow,0,n.maxCol,"pg-cell--copy-flash"),this.clipboardEngine.copyRowsToClipboard(r,o,!1)}async cutSelectedRows(){let e=this.store.get("selectedRowIds");if(e.size===0)return;let t=this.store.get("visibleRows"),o=this.getVisibleColumns(),r=t.filter(p=>e.has(p.nodeId)&&p.type==="data");if(r.length===0)return;let n=this.selectedRowBounds(e,t,o.length);if(!n)return;this.clipboardEngine.copyRowsToClipboard(r,o,!1);let i=[];for(let p of r)for(let h of o)i.push({nodeId:p.nodeId,field:h.field,oldValue:p.data[h.field],newValue:null}),p.data[h.field]=null;this.undoRedoEngine?.record({type:"cut",changes:i}),this.store.set("allRows",[...this.store.get("allRows")]);let{minRow:s,maxRow:l,maxCol:d}=n;this.clearRowSelectionCallback?.();let c={startRowIndex:s,endRowIndex:l,startColIndex:0,endColIndex:d};this.anchorCell={rowIndex:s,colIndex:0},this.store.set("cellRanges",[c]),this.store.set("activeCell",{rowIndex:s,colIndex:0}),this.emitSelectionChanged(),this.dataChangedCallback?.(new Set(i.map(p=>p.nodeId))),requestAnimationFrame(()=>requestAnimationFrame(()=>this.flashFillArea(s,l,0,d,"pg-cell--cut-flash")))}selectedRowBounds(e,t,o){let r=1/0,n=-1/0;for(let i=0;i<t.length;i++)e.has(t[i].nodeId)&&(i<r&&(r=i),i>n&&(n=i));return r===1/0?null:{minRow:r,maxRow:n,maxCol:Math.max(0,o-1)}}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=te(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,d=1/0,c=-1/0;for(let p of o){let h=te(p);h.startRowIndex<s&&(s=h.startRowIndex),h.endRowIndex>l&&(l=h.endRowIndex),h.startColIndex<d&&(d=h.startColIndex),h.endColIndex>c&&(c=h.endColIndex)}if(s!==1/0){let p=s,h=l,u=Math.max(0,d),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,d=[],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;d.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");d.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:d}),this.store.set("allRows",[...this.store.get("allRows")]),this.dataChangedCallback?.(new Set(d.map(u=>u.nodeId))),d.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,d=-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>d&&(d=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:d,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=d,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,d=i.right+s>r-4,c=i.left-s>=4;if(d&&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(te);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=e.ctrlKey||e.metaKey,r=e.key.length===1?e.key.toLowerCase():e.key;if(this.serialRowSelectionEnabled&&this.store.get("selectedRowIds").size>0){if(o&&r==="c"){e.preventDefault(),this.copySelectedRows();return}if(o&&r==="x"){e.preventDefault(),this.cutSelectedRows();return}if(r==="Delete"||r==="Backspace"){e.preventDefault(),this.cutSelectedRows();return}}if(o&&r==="z"){e.preventDefault(),this.performUndo();return}if(o&&r==="y"){e.preventDefault(),this.performRedo();return}let n=this.store.get("activeCell");if(!n)return;let i=this.store.get("visibleRows"),s=this.getVisibleColumns();if(i.length===0||s.length===0)return;let l=e.shiftKey;switch(r){case"ArrowUp":e.preventDefault(),o?this.jumpToEdge("up",i.length,s.length,l):this.moveActiveCell(-1,0,i.length,s.length,l);break;case"ArrowDown":e.preventDefault(),o?this.jumpToEdge("down",i.length,s.length,l):this.moveActiveCell(1,0,i.length,s.length,l);break;case"ArrowLeft":if(e.preventDefault(),!o&&!l&&this.treeToggleHandler){let c=i[n.rowIndex];if(c&&this.treeToggleHandler(c,"left"))break}if(o)this.jumpToEdge("left",i.length,s.length,l);else if(l)this.moveActiveCell(0,-1,i.length,s.length,!0);else{let d=n;d.colIndex===0&&d.rowIndex>0?this.startSelection(d.rowIndex-1,s.length-1):this.moveActiveCell(0,-1,i.length,s.length,!1)}break;case"ArrowRight":if(e.preventDefault(),!o&&!l&&this.treeToggleHandler){let c=i[n.rowIndex];if(c&&this.treeToggleHandler(c,"right"))break}if(o)this.jumpToEdge("right",i.length,s.length,l);else if(l)this.moveActiveCell(0,1,i.length,s.length,!0);else{let d=n;d.colIndex>=s.length-1&&d.rowIndex<i.length-1?this.startSelection(d.rowIndex+1,0):this.moveActiveCell(0,1,i.length,s.length,!1)}break;case"PageDown":{e.preventDefault();let d=this.getViewportRowCountCallback?.()??10;this.moveActiveCell(d,0,i.length,s.length,l);break}case"PageUp":{e.preventDefault();let d=this.getViewportRowCountCallback?.()??10;this.moveActiveCell(-d,0,i.length,s.length,l);break}case"Home":e.preventDefault(),o?this.startSelection(0,0,l):this.moveActiveCell(0,-n.colIndex,i.length,s.length,l);break;case"End":e.preventDefault(),o?this.startSelection(i.length-1,s.length-1,l):this.moveActiveCell(0,s.length-1-n.colIndex,i.length,s.length,l);break;case"Tab":{e.preventDefault();let d=n;e.shiftKey?d.colIndex===0&&d.rowIndex>0?this.startSelection(d.rowIndex-1,s.length-1):this.moveActiveCell(0,-1,i.length,s.length,!1):d.colIndex>=s.length-1&&d.rowIndex<i.length-1?this.startSelection(d.rowIndex+1,0):this.moveActiveCell(0,1,i.length,s.length,!1);break}case"Enter":if(e.preventDefault(),!e.shiftKey&&this.enterEditHandler){let d=n;if(this.enterEditHandler(d.rowIndex,d.colIndex))break}this.moveActiveCell(e.shiftKey?-1:1,0,i.length,s.length,!1);break;case"c":o&&(e.preventDefault(),this.copySelection(i,s));break;case"x":o&&(e.preventDefault(),this.cutSelection(i,s));break;case"v":o&&(e.preventDefault(),this.pasteSelection(i,s));break;case"a":o&&(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 A=document.createElement("span");if(A.className="pg-context-menu__label",A.textContent=S,T.appendChild(M),T.appendChild(A),I){let L=document.createElement("span");L.className="pg-context-menu__kbd",L.textContent=I,T.appendChild(L)}return T},l=()=>{let E=document.createElement("div");return E.className="pg-context-menu__sep",E.setAttribute("role","separator"),E},d=(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",[d("column-grouped","Grouped"),d("column-stacked","Stacked"),d("column-100stacked","100% Stacked")])),g.appendChild(c("Bar",[d("bar-grouped","Grouped"),d("bar-stacked","Stacked"),d("bar-100stacked","100% Stacked")])),g.appendChild(d("pie","Pie")),g.appendChild(d("line","Line")),g.appendChild(d("area","Area")),g.appendChild(d("scatter","X Y (Scatter)")),g.appendChild(d("polar","Polar")),g.appendChild(d("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(d=>`"${d.header}"`).join(","),r=e.filter(d=>d.type==="data").map(d=>t.map(c=>{let p=d.data[c.field];return`"${(p==null?"":String(p)).replace(/"/g,'""')}"`}).join(",")).join(`
|
|
4276
4359
|
`),n=`${o}
|
|
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
|
|
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=`
|
|
4360
|
+
${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 tn={quartz:"pg-quartz-theme",alpine:"pg-alpine-theme",balham:"pg-balham-theme",material:"pg-material-theme"};var Gt="--pg";function on(a){return a.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`)}function Bo(a,e,t){for(let[o,r]of Object.entries(a)){let n=`${e}-${on(o)}`;typeof r=="string"||typeof r=="number"?t.set(n,String(r)):typeof r=="object"&&r!==null&&Bo(r,n,t)}}var ve=class{constructor(){this.styleEl=null;this.scopeEl=null}inject(e,t){this.scopeEl=t??document.documentElement;let o=new Map;Bo(e,Gt,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;Bo(e,Gt,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(`
|
|
4361
|
+
`),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(Gt)&&e.removeProperty(o)}}}getVar(e){return`var(${Gt}-${on(e)})`}};var je={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:"#f8fafc",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 Nt={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 zo="data-pg-theme-scope",bi=/^pg-[a-z0-9]+-theme$/,Xe=class a{constructor(e){this.eventBus=e;this.injector=new ve;this.rootInjector=new ve;this.registry=new Map;this.activeVariant="none";this.scopeEl=null;this.registry.set("light",je),this.registry.set("dark",Nt),this.activeMode=je}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,`[${zo}="${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))bi.test(r)&&o.classList.remove(r);this.activeVariant=e,e!=="none"?(o.classList.add(tn[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}=a.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)??je}ensureScopeId(e){let t=e.getAttribute(zo);return t||(t=`pg-scope-${a.scopeSeq+=1}`,e.setAttribute(zo,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 ft={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 Ye=class{constructor(e={}){this.icons=new Map(Object.entries(ft));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(ft)}getNames(){return Array.from(this.icons.keys())}};var Ke=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=`
|
|
4279
4362
|
display: inline-flex;
|
|
4280
4363
|
align-items: center;
|
|
4281
4364
|
justify-content: center;
|
|
@@ -4286,37 +4369,37 @@ ${r}`,i=new Blob([n],{type:"text/csv"}),s=URL.createObjectURL(i),l=document.crea
|
|
|
4286
4369
|
${t.rotate?`transform: rotate(${t.rotate}deg);`:""}
|
|
4287
4370
|
${t.spin?"animation: pg-spin 0.8s linear infinite;":""}
|
|
4288
4371
|
transition: transform var(--pg-transitions-duration-base, 150ms) var(--pg-transitions-easing-base);
|
|
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">${
|
|
4372
|
+
`;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 yi=["#2563eb","#16a34a","#d97706","#dc2626","#7c3aed","#0284c7","#db2777","#65a30d","#c2410c","#0891b2"],ce=class{transform(e,t){let o=e.filter(u=>u.type==="data"),{labelField:r,valueFields:n,aggregation:i="sum",limit:s,sortByValue:l,colors:d=yi}=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:d[g%d.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 Ci=["#008FFB","#00E396","#FEB019","#FF4560","#775DD0","#3F51B5","#03A9F4","#4CAF50","#F9CE1D","#FF9800"];function rn(a){let e=getComputedStyle(a),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:Ci}}var nn={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 sn(a,e,t){let o=e.length>0?e:N;return{labels:a.labels,datasets:a.datasets.map((r,n)=>({...r,color:t[r.label]??r.color??o[n%o.length]}))}}var oe=class a{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=rn(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={...nn,...t};this.canvas.width=o.width,this.canvas.height=o.height,this.prepareOptions(o);let r=sn(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={...nn,...r};this.prepareOptions(n);let i=sn(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),d=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+(d-l)*m,this.draw(i,n,1),g<1?this.seriesToggleRafs.set(e,requestAnimationFrame(h)):(this.seriesScales[e]=d,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:d}=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*d;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,d=l-i,c=this.hoverY;if(c<i||c>l)return;let p=e.labels.length;if(!p)return;let h=d/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:d}=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;d.font=`600 ${t.fontSize}px ${t.fontFamily}`;let f=d.measureText(c).width;d.font=`${t.fontSize}px ${t.fontFamily}`;let C=Math.max(...p.map(S=>{d.font=`600 ${t.fontSize}px ${t.fontFamily}`;let I=d.measureText(S.value).width;d.font=`${t.fontSize}px ${t.fontFamily}`;let T=d.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),d.save(),d.shadowColor="rgba(0,0,0,0.12)",d.shadowBlur=12,d.shadowOffsetY=3,d.fillStyle=t.backgroundColor==="transparent"?"#fff":t.backgroundColor,d.strokeStyle="rgba(0,0,0,0.08)",d.lineWidth=1,d.beginPath(),d.roundRect(w,R,b,v,6),d.fill(),d.shadowColor="transparent",d.stroke(),d.restore(),d.save(),d.font=`600 ${t.fontSize}px ${t.fontFamily}`,d.fillStyle=t.textColor,d.textAlign="left",d.textBaseline="middle",d.fillText(c,w+h,R+h+u/2),d.strokeStyle="rgba(0,0,0,0.07)",d.lineWidth=1,d.beginPath(),d.moveTo(w+h,R+h+u),d.lineTo(w+b-h,R+h+u),d.stroke(),d.font=`${t.fontSize}px ${t.fontFamily}`;for(let S=0;S<p.length;S++){let I=R+h+u+4+S*u+u/2;d.fillStyle=p[S].color,d.beginPath(),d.roundRect(w+h,I-g/2,g,g,2),d.fill(),d.fillStyle=t.textColor,d.textAlign="left",d.fillText(this.truncate(p[S].label,16),w+h+g+m,I),d.font=`600 ${t.fontSize}px ${t.fontFamily}`,d.fillStyle=p[S].color,d.textAlign="right",d.fillText(p[S].value,w+b-h,I),d.font=`${t.fontSize}px ${t.fontFamily}`}d.textBaseline="alphabetic",d.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=a.LEGEND_BAND,i=a.LEGEND_SIDE,s=this.titleBandHeight(e),l=e.xAxisTitle?e.fontSize+10:0,d=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+d,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:d,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,d,c,t):this.drawGridLines(n,i,d,c,m,t):this.drawAxes(n,i,l,s,t);let f=e.labels.length,C=d/Math.max(f,1),b=C*t.barWidth/p,v=this.getLabelStep(f,d,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,A=this.seriesScales[I]??1,L=T/M*c*o*A,$=S+I*b,W=s-L;r.fillStyle=e.datasets[I].color??N[I%N.length],r.beginPath(),r.roundRect($,W,Math.max(b-1,1),Math.max(L,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:d,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,d,c,t):this.drawGridLines(n,i,d,c,m,t):this.drawAxes(n,i,l,s,t);let f=e.labels.length,C=d/Math.max(f,1),b=C*t.barWidth,v=c/Math.max(p,1),w=this.getLabelStep(f,d,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,A=(h?M/(u[T]||1)*v:M/m*c)*o,L=I-A;r.fillStyle=e.datasets[T].color??N[T%N.length],r.beginPath(),T===p-1?r.roundRect(S,L,Math.max(b,1),Math.max(A,0),[3,3,0,0]):r.rect(S,L,Math.max(b,1),Math.max(A,0)),r.fill(),I-=A}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:d,plotH:c}=this.getPlotArea(t,e);t.showGrid?this.drawGridLines(n,i,d,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=d/Math.max(g,1),f=m*t.barWidth,C=this.getLabelStep(g,d,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),d=t.width-(t.compact?t.padding:20),c=t.height-n-(t.compact?t.padding:30),p=d-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(d,c),r.stroke()}else this.drawAxes(s,l,d,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,A=g?m[T]||1:C,L=this.seriesScales[T]??1,$=M/A*p*o*L,W=I+T*E;r.fillStyle=e.datasets[T].color??N[T%N.length],r.beginPath(),r.roundRect(s,W,Math.max($,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),d=t.width-(t.compact?t.padding:20),c=t.height-n-(t.compact?t.padding:30),p=d-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((A,L)=>A+(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 A=s+M/5*p;r.beginPath(),r.moveTo(A,l),r.lineTo(A,c),r.stroke(),r.fillStyle=t.textColor,r.font=`${t.fontSize}px ${t.fontFamily}`,r.textAlign="center";let L=g?`${Math.round(100*M/5)}%`:this.formatNum(b*M/5);r.fillText(L,A,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(d,c),r.stroke()}else this.drawAxes(s,l,d,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,A=s;for(let L=0;L<u;L++){let $=e.datasets[L].data[T]??0,W=(g?$/(m[L]||1)*S:$/b*p)*o;r.fillStyle=e.datasets[L].color??N[L%N.length],r.beginPath(),L===u-1?r.roundRect(A,M,Math.max(W,0),Math.max(R,1),[0,3,3,0]):r.rect(A,M,Math.max(W,0),Math.max(R,1)),r.fill(),A+=W}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),d=t.width-(t.compact?t.padding:20),c=t.height-n-(t.compact?t.padding:30),p=d-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(d,c),r.stroke()}else this.drawAxes(s,l,d,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,A)=>{let L=M.data[E]??0;return v?L/(w[A]||1):L}),S=R.reduce((M,A)=>M+A,0)||1,I=l+E*m+(m-f)/2,T=s;for(let M=0;M<b;M++){let A=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(A,0),Math.max(f,1),[0,3,3,0]):r.rect(T,I,Math.max(A,0),Math.max(f,1)),r.fill(),T+=A}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:d,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,d,c,h,t):this.drawAxes(n,i,l,s,t);let m=v=>n+v/Math.max(1,u-1)*d,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,d,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,d,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:d,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,d,c,h,t):this.drawAxes(n,i,l,s,t);let m=v=>n+v/Math.max(1,u-1)*d,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,d,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,d,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,d=Math.min(t.width,t.height-i-this.titleBandHeight(t))/2-(t.compact?t.padding:20),c=r?d*.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,d,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?(d+c)/2:d*.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)*(d+16),v=l+Math.sin(C)*(d+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:d,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,d,c,h,t):this.drawAxes(n,i,l,s,t);let m=v=>n+v/Math.max(1,u-1)*d,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,d,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),d=e.labels,c=d.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(d[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,d=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-d-(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 d=0;d<=l;d++){let c=t+r-d/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*d/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 d=t+r-l/s*r;i.beginPath(),i.moveTo(e,d),i.lineTo(e+o,d),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,d+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 d=l*s+(s-80)/2;r.fillStyle=e.datasets[l].color??this.paletteColor(l),r.beginPath(),r.roundRect(d,n-5,12,10,2),r.fill(),r.fillStyle=t.textColor,r.fillText(this.truncate(e.datasets[l].label,14),d+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),d=o==="left"?12:t.width-a.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(d,p-5,12,10,2),r.fill(),r.fillStyle=t.textColor,r.fillText(this.truncate(e.datasets[c].label,14),d+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 vt(a,e={},t){let o=document.createElement(a);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(a,e){let t=document.createElement("div");return a&&(t.className=a),e&&(t.style.cssText=e),t}function ln(a){for(;a.firstChild;)a.removeChild(a.firstChild)}function B(a,e,t){t?a.classList.add(e):a.classList.remove(e)}var Ze=class{constructor(e){this.eventBus=e;this.charts=new Map;this.transformer=new ce}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),d={config:t,containerEl:i,canvas:s,renderer:l};return this.charts.set(t.chartId,d),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(d=>d.type==="string"||d.type==="dropdown"),l=o.filter(d=>d.type==="number"||d.type==="currency");if(!s||l.length===0)return;i=this.transformer.transform(t,{labelField:s.field,valueFields:l.slice(0,3).map(d=>d.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 an(a){let e={chartId:a.chartId,chartType:a.chartType,cellRange:a.cellRange,chartColIds:a.chartColIds?[...a.chartColIds]:[a.categoryColId,...a.seriesColIds],categoryColId:a.categoryColId,seriesColIds:[...a.seriesColIds],aggregation:a.aggregation??"sum",switchCategorySeries:!1,unlinked:!1,title:{text:a.title??"",align:"left"},subtitle:{text:"",align:"left"},legend:{enabled:a.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 Wo(e)}function Ot(a,e){let t={...a,...e,chartColIds:e.chartColIds?[...e.chartColIds]:a.chartColIds,seriesColIds:e.seriesColIds?[...e.seriesColIds]:a.seriesColIds,title:e.title?{...a.title,...e.title}:a.title,subtitle:e.subtitle?{...a.subtitle,...e.subtitle}:a.subtitle,legend:e.legend?{...a.legend,...e.legend}:a.legend,xAxis:e.xAxis?{...a.xAxis,...e.xAxis}:a.xAxis,yAxis:e.yAxis?{...a.yAxis,...e.yAxis}:a.yAxis,series:e.series?xi(a.series,e.series):a.series,style:e.style?{...a.style,...e.style}:a.style};return Wo(t)}function xi(a,e){return{...a,...e,colorByKey:e.colorByKey?{...a.colorByKey,...e.colorByKey}:a.colorByKey}}function Wo(a){if(a===null||typeof a!="object"||Object.isFrozen(a))return a;for(let e of Object.keys(a))Wo(a[e]);return Object.freeze(a)}var wi='<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>',Ei='<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>',dn='<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>',Ri='<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>',Si='<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>',cn='<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>',Ii='<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>',Ti='<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>',Mi='<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>',Ft=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=dn,l.addEventListener("click",()=>this.toggleFullscreen());let d=document.createElement("button");d.className="pg-chart-panel__action-btn",d.title="Close",d.innerHTML=Ei,d.addEventListener("click",()=>this.close()),s.appendChild(l),s.appendChild(d),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=`
|
|
4373
|
+
<span class="pg-chart-panel__empty-icon">${wi}</span>
|
|
4291
4374
|
<span class="pg-chart-panel__empty-text">No chart data available</span>
|
|
4292
4375
|
<span class="pg-chart-panel__empty-sub">Select cells that include Number, Currency, or Percentage columns</span>
|
|
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; }
|
|
4294
|
-
`;for(let
|
|
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;
|
|
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),
|
|
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; }
|
|
4376
|
+
`,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=Si;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:Ii,action:()=>this.host?.onEditChart()});break;case"advancedSettings":t.push({item:o,label:"Advanced Settings",icon:Ti,action:()=>this.host?.onAdvancedSettings()});break;case"unlink":t.push({item:o,label:"Unlink from Grid",icon:Mi,action:()=>this.host?.onUnlink()});break;case"download":t.push({item:o,label:"Download PNG",icon:cn,action:()=>this.downloadChart("png")}),t.push({item:o,label:"Download JPEG",icon:cn,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=d=>{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+d.clientX-o,c)),this.panelY=Math.max(0,Math.min(i+d.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?Ri:dn,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 ki=new ce;function hn(a,e,t){let o=t.find(s=>s.colId===a.categoryColId),r=a.seriesColIds.map(s=>t.find(l=>l.colId===s)).filter(s=>s!==void 0);if(!o||r.length===0)return{labels:[],datasets:[]};let n=a.aggregation==="none"?_i(e,o,r):ki.transform(e,{labelField:o.field,valueFields:r.map(s=>s.field),aggregation:a.aggregation}),i={labels:n.labels,datasets:n.datasets.map((s,l)=>({...s,label:r[l]?.header??s.label}))};return a.switchCategorySeries?Li(i):i}function _i(a,e,t){let o=a.filter(s=>s.type==="data"),r=[],n=new Map;for(let s of o){let l=String(pn(s.data,e.field)??"Unknown"),d=n.get(l)??0;n.set(l,d+1),r.push(d===0?l:`${l} (${d+1})`)}let i=t.map(s=>({label:s.header,data:o.map(l=>{let d=Number(pn(l.data,s.field));return Number.isNaN(d)?0:d})}));return{labels:r,datasets:i}}function Li(a){let e=a.datasets.map(o=>o.label),t=a.labels.map((o,r)=>({label:o,data:a.datasets.map(n=>n.data[r]??0)}));return{labels:e,datasets:t}}function un(a,e){return{type:a.chartType,width:e.width,height:e.height,animationDuration:400,showGrid:a.yAxis.showGridLines??!0,showLegend:a.legend.enabled,legendPosition:a.legend.position,title:a.title.text??"",titleColor:a.title.color??"",titleAlign:a.title.align??"left",subtitle:a.subtitle.text??"",subtitleColor:a.subtitle.color??"",subtitleAlign:a.subtitle.align??"left",xAxisTitle:a.xAxis.title??"",yAxisTitle:a.yAxis.title??"",axisTitleColor:a.xAxis.titleColor??a.yAxis.titleColor??"",axisLabelColor:a.yAxis.labelColor??a.xAxis.labelColor??"",axisLineColor:a.yAxis.lineColor??a.xAxis.lineColor??"",showXLabels:a.xAxis.showLabels??!0,showYLabels:a.yAxis.showLabels??!0,showXTicks:a.xAxis.showTicks??!0,showYTicks:a.yAxis.showTicks??!0,seriesColors:a.series.colorByKey,strokeWidth:a.series.strokeWidth??0,fillOpacity:a.series.fillOpacity??0,backgroundColor:a.style.backgroundColor??"transparent",fontFamily:a.style.fontFamily??"",fontSize:a.style.fontSize??12}}var gn=["sum","avg","count","min","max","none"];function pn(a,e){let t=e.split("."),o=a;for(let r of t){if(o==null)return;o=o[r]}return o}var Ai='<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>',Di='<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>',Hi='<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 bt(a,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=a,t.appendChild(o),t.appendChild(e),t}function yt(a,e,t,o){let r=document.createElement("select");r.className="pg-chart-ctrl__select";for(let n of a){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?bt(o,r):r}function pe(a,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(a)),n.classList.toggle("pg-chart-ctrl__toggle--on",a);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(a,e,t){let o=document.createElement("input");return o.type="color",o.className="pg-chart-ctrl__color",a&&(o.value=a),o.addEventListener("input",()=>e(o.value)),bt(t,o)}function Bt(a,e,t,o,r,n){let i=document.createElement("input");return i.type="number",i.className="pg-chart-ctrl__input",i.value=String(a),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)}),bt(t,i)}function Ct(a,e,t,o=""){let r=document.createElement("input");return r.type="text",r.className="pg-chart-ctrl__input",r.value=a,r.placeholder=o,r.addEventListener("input",()=>e(r.value)),bt(t,r)}function zt(a,e,t,o){let r=document.createElement("div");r.className="pg-chart-ctrl__segmented";for(let n of a){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?bt(o,r):r}function re(a,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=Ai;let n=document.createElement("span");n.textContent=a,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 mn(a,e,t){let o=document.createElement("div");o.className="pg-chart-ctrl__list";let r=a.map(n=>n.id);return a.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=Di,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 d=document.createElement("button");d.type="button",d.className="pg-chart-ctrl__list-remove",d.innerHTML=Hi,d.addEventListener("click",()=>t(n.id)),i.appendChild(d),Pi(i,o,r,e),o.appendChild(i)}),o}function Pi(a,e,t,o){let r=a.querySelector(".pg-chart-ctrl__list-handle");r&&r.addEventListener("mousedown",n=>{n.preventDefault(),a.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===a)return!1;let h=p.getBoundingClientRect();return l.clientY<h.top+h.height/2});c?e.insertBefore(a,c):e.appendChild(a)},s=()=>{a.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(d=>d.dataset.id??"").filter(d=>d.length>0);t.splice(0,t.length,...l),o(l)};document.addEventListener("mousemove",i),document.addEventListener("mouseup",s)})}var Gi=[{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"}]}],Ni={labels:["","","",""],datasets:[{label:"Series 1",data:[6,9,5,8]},{label:"Series 2",data:[4,6,8,5]}]},Oi=132,Fi=64,Bi=240,zi=[{value:"top",label:"Top"},{value:"right",label:"Right"},{value:"bottom",label:"Bottom"},{value:"left",label:"Left"}],fn=[{value:"left",label:"Left"},{value:"center",label:"Center"},{value:"right",label:"Right"}],Wi=[{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"}],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>',$i={chart:"Chart",setup:"Set Up",customize:"Customize"},Wt=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()},Bi)}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=Vi,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=$i[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 Gi){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||Oi,n=e.clientHeight||Fi,i=new oe(e);i.render(Ni,{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(yt(n.length>0?n:o.map(c=>({value:c.colId,label:c.header})),t.categoryColId,c=>this.host.updateModel({categoryColId:c}))),r.body.appendChild(pe(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(mn(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(yt([{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 d=re("Aggregation",!1);d.body.appendChild(yt(gn.map(c=>({value:c,label:c==="none"?"None":c.toUpperCase()})),t.aggregation,c=>this.host.updateModel({aggregation:c}),"Function")),d.body.appendChild(pe(t.switchCategorySeries,c=>this.host.updateModel({switchCategorySeries:c}),"Switch Category / Series")),e.appendChild(d.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(yt(Wi,t.style.fontFamily??"",c=>this.host.updateModel({style:{fontFamily:c}}),"Font family")),o.body.appendChild(Bt(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(Ct(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(zt(fn,t.title.align??"left",c=>this.host.updateModel({title:{align:c}}),"Title align")),r.body.appendChild(Ct(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(zt(fn,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(pe(t.legend.enabled,c=>this.host.updateModel({legend:{enabled:c}}),"Show legend")),n.body.appendChild(zt(zi,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(Bt(t.series.strokeWidth??2,c=>this.host.updateModel({series:{strokeWidth:c}}),"Stroke width",0,10,.5)),i.body.appendChild(Bt(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(Ct(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(pe(t.xAxis.showGridLines??!1,c=>this.host.updateModel({xAxis:{showGridLines:c}}),"Show grid lines")),l.body.appendChild(pe(t.xAxis.showLabels??!0,c=>this.host.updateModel({xAxis:{showLabels:c}}),"Show labels")),e.appendChild(l.section);let d=re("Vertical Axis",!1);d.body.appendChild(Ct(t.yAxis.title??"",c=>this.host.updateModel({yAxis:{title:c}}),"Title","Y-axis title")),d.body.appendChild(ne(t.yAxis.labelColor??"#64748b",c=>this.host.updateModel({yAxis:{labelColor:c}}),"Label color")),d.body.appendChild(ne(t.yAxis.lineColor??"#e2e8f0",c=>this.host.updateModel({yAxis:{lineColor:c}}),"Line color")),d.body.appendChild(pe(t.yAxis.showGridLines??!0,c=>this.host.updateModel({yAxis:{showGridLines:c}}),"Show grid lines")),d.body.appendChild(pe(t.yAxis.showLabels??!0,c=>this.host.updateModel({yAxis:{showLabels:c}}),"Show labels")),e.appendChild(d.section)}};var Ui=new Set(["number","currency","percentage"]),qi=new Set(["string","dropdown","date","boolean","email"]),ji=["edit","advancedSettings","unlink","download"],xt=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 Ft(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=Ot(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 Wt(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 un(this.model,e)}getToolbarItems(){let e=this.ctx.options.getChartToolbarItems,t=[...ji];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:Ui.has(o.type),isDimension:qi.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 hn(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 Xi=new Set(["number","currency","percentage"]),Yi=new Set(["string","dropdown","date","boolean","email"]),Vt=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 xt(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 xt(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=>Yi.has(h.type))?.colId??r[0]?.colId,s=e.seriesColIds??r.filter(h=>Xi.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",d=r.find(h=>h.colId===i)?.header??"Category",c=an({chartId:`chart-${this.nextId++}`,chartType:l,cellRange:e.cellRange,chartColIds:n,categoryColId:i,seriesColIds:s,aggregation:e.aggregation,title:`${d} Chart`}),p=this.ctx.options.chartThemeOverrides;return p&&(c=Ot(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 Vo=(t=>(t.GROUP="group",t.LEAF="leaf",t))(Vo||{}),$o=(r=>(r.PROPORTIONAL="proportional",r.EQUAL="equal",r.FIRST_FIXED="firstFixed",r.LAST_FIXED="lastFixed",r))($o||{});function Y(a){return a.pointerType==="touch"}var be=5,X=8;var Je=400,Uo=.95,wt=.02,vn=".pg-th__resize-handle,[data-row-drag],.pg-fill-handle,.pg-ai-panel,.pg-editor,[data-detail-toggle],[data-detail-resize-handle]";var bn={valid:!1,targetId:"",position:"before",indicatorX:0},Qe=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=Y(o),s=!1,l=0,d=()=>{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),d())},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>X||f>X)&&p():m>be&&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)},Je))})}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}"]`),d=parseInt(l?.closest("[data-group-depth]")?.getAttribute("data-group-depth")??"0",10),c=[];for(let h of r.querySelectorAll(`[data-group-depth="${d}"]`))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; }
|
|
4377
|
+
`;for(let d=0;d<this.dragCells.length;d++){if(d===r)continue;let c=0;e>r&&d>r&&d<=e?c=-this.dragCellWidth:e<r&&d>=e&&d<r&&(c=this.dragCellWidth),c!==0&&(l+=`${o}[data-group-id="${this.dragCells[d].groupId}"] { transform: translateX(${c}px); }
|
|
4378
|
+
`)}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 bn;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 d=s.getBoundingClientRect();if(t<d.top-4||t>d.bottom+4)continue;let c=d.left+d.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"?d.left:d.right)-r.left}}}return n??bn}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 $t=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 d=y("pg-group-chip__close");d.innerHTML=this.iconRenderer.renderToString("close",11),d.title="Remove grouping",d.addEventListener("click",c=>{c.stopPropagation(),this.removeColumn(n)}),s.appendChild(d),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 qo=(o=>(o.HOVER="hover",o.ALWAYS="always",o.HIDDEN="hidden",o))(qo||{});var yn=(d=>(d.SORT="sort",d.FILTER="filter",d.PIN="pin",d.MOVE="move",d.RESIZE="resize",d.VISIBILITY="visibility",d.DATA="data",d.CLIPBOARD="clipboard",d.COLUMN="column",d))(yn||{});var Ki=[["sort"],["filter"],["pin","move"],["resize"],["visibility"],["data"],["clipboard"],["column"]],Ut=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(yn)),r=this.buildAllSections(e),n=new Map(r.map(s=>[s.key,s])),i=!0;for(let s of Ki){let l=s.filter(d=>o.has(d)&&(n.get(d)?.items.length??0)>0);if(l.length!==0){i||t.appendChild(this.createSeparator()),i=!1;for(let d of l){let c=n.get(d);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),d,c;if(t!==void 0&&o!==void 0)d=t,c=o;else{let p=e.getBoundingClientRect();d=p.right-s,c=p.bottom+2}d+s>n&&(d=n-s-4),d<4&&(d=4),c+l>i&&(c=(o??e.getBoundingClientRect().top)-l-2),c<4&&(c=4),r.style.left=`${d}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,d=o.top-4;l+r>i&&(l=o.left-r),l<4&&(l=4),d+n>s&&(d=s-n-4),d<4&&(d=4),e.style.left=`${l}px`,e.style.top=`${d}px`}};var qt=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,d,c;if(t!==void 0&&o!==void 0)d=t,c=o;else{let p=e.getBoundingClientRect();d=p.left,c=p.bottom+2}d+s>n&&(d=n-s-4),d<4&&(d=4),c+l>i&&(c=(o??e.getBoundingClientRect().top)-l-2),c<4&&(c=4),r.style.left=`${d}px`,r.style.top=`${c}px`}};var et=class a{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.leftFilterRowEl=null;this.centerFilterRowEl=null;this.rightFilterRowEl=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.applyInlineFilterFn=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 Ut(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 d=l,c=this.columnModel.getColumn(s.colId)?.aggFunc;this.columnModel.setColumnAggFunc(s.colId,c===d?null:d),this.store.get("groupedColumnIds").length>0&&this.columnDataRefreshFn?.(),this.onAction(`aggregate-${l}`,s.colId)},onMoveLeft:s=>{let d=r.getVisibleColumns().findIndex(c=>c.colId===s);d>0&&(r.moveColumn(d,d-1),this.onAction("move",s))},onMoveRight:s=>{let l=r.getVisibleColumns(),d=l.findIndex(c=>c.colId===s);d<l.length-1&&(r.moveColumn(d,d+1),this.onAction("move",s))},onMoveStart:s=>{let d=r.getVisibleColumns().findIndex(c=>c.colId===s);d>0&&(r.moveColumn(d,0),this.onAction("move",s))},onMoveEnd:s=>{let l=r.getVisibleColumns(),d=l.findIndex(c=>c.colId===s);d<l.length-1&&(r.moveColumn(d,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}setInlineFilterCallback(e){this.applyInlineFilterFn=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 qt(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(r=>r!==null);for(let r of t)for(let n of Array.from(r.querySelectorAll(".pg-th[data-col-id]"))){let i=n.getAttribute("data-col-id")??"",s=e.has(i);n.classList.toggle("pg-th--filter-active",s);let l=n.querySelector(".pg-th__filter-btn");if(l){l.classList.toggle("pg-th__filter-btn--active",s);let d=s?"filterActive":"filter",c=l.querySelector(".pg-icon");c&&this.iconRenderer.updateIcon(c,d)}}let o=[this.leftFilterRowEl,this.centerFilterRowEl,this.rightFilterRowEl].filter(r=>r!==null);for(let r of o)for(let n of Array.from(r.querySelectorAll(".pg-filter-cell[data-col-id]"))){let i=n.getAttribute("data-col-id")??"",s=e.has(i),l=n.querySelector(".pg-filter-cell__icon");l&&(l.classList.toggle("pg-filter-cell__icon--active",s),this.iconRenderer.updateIcon(l,s?"filterActive":"filter",{size:14}))}}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(d=>d.pinned==="left"),s=r.filter(d=>d.pinned!=="left"&&d.pinned!=="right"),l=r.filter(d=>d.pinned==="right");if(this.lastGroupRowHeight=n.headerRowHeight??this.lastGroupRowHeight,this.leftGroupRowEls=[],this.centerGroupRowEls=[],this.rightGroupRowEls=[],this.displayGroupEngine?.hasGroups){let d=this.displayGroupEngine,c=n.headerRowHeight??44,p=d.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=d.headerBuilder.buildGroupRows(d.buildTree(i),h),this.centerGroupRowEls=d.headerBuilder.buildGroupRows(d.buildTree(s),h),this.rightGroupRowEls=d.headerBuilder.buildGroupRows(d.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 d=this.groupModel.getMaxDepth(),c=n.headerRowHeight??44,p=this.buildGroupCellOptions(c);this.leftGroupRowEls=this.groupHeaderBuilder.buildGroupRows(this.groupModel.getRootNodes("left"),this.colStyles,d,p),this.centerGroupRowEls=this.groupHeaderBuilder.buildGroupRows(this.groupModel.getRootNodes("center"),this.colStyles,d,p),this.rightGroupRowEls=this.groupHeaderBuilder.buildGroupRows(this.groupModel.getRootNodes("right"),this.colStyles,d,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&&(this.leftFilterRowEl=this.buildFilterRow(i,n,!0),e.appendChild(this.leftFilterRowEl)),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 d=this.buildFilterRow(s,n,!1);this.centerFilterRowEl=d,n.hasGroupedColumns&&d.insertBefore(this.buildAutoGroupFilterCell(n.autoGroupColWidth??200),d.firstChild),t.appendChild(d)}this.rightHeaderRowEl=this.buildHeaderRow(l,n,!1),o.appendChild(this.rightHeaderRowEl),n.showFilterRow&&(this.rightFilterRowEl=this.buildFilterRow(l,n,!1),o.appendChild(this.rightFilterRowEl))}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");B(n,"pg-th--sort-asc",i&&t==="asc"),B(n,"pg-th--sort-desc",i&&t==="desc"),B(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.leftFilterRowEl=null,this.centerFilterRowEl=null,this.rightFilterRowEl=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(d=>d.pinned!=="left"&&d.pinned!=="right"&&d.visible!==!1);this.rebuildGroupRowsForPanel("center",l),this.isDragging&&(this.rebuildGroupRowsForPanel("left",s.filter(d=>d.pinned==="left"&&d.visible!==!1)),this.rebuildGroupRowsForPanel("right",s.filter(d=>d.pinned==="right"&&d.visible!==!1)))}if(this.groupModel?.hasGroups()&&this.groupHeaderBuilder&&this.centerGroupRowEls.length>0){let s=this.groupModel.getMaxDepth(),l=r.headerRowHeight??44,d=this.buildGroupCellOptions(l);this.groupHeaderBuilder.updateGroupRows(this.centerGroupRowEls,this.groupModel.getRootNodes("center"),this.colStyles,s,d)}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(this.buildAutoGroupFilterCell(r.autoGroupColWidth??200)),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}buildAutoGroupFilterCell(e){let t=y("pg-filter-cell pg-filter-cell--auto-group");return t.style.width=`${e}px`,t.style.minWidth=`${e}px`,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}`),B(i,"pg-th--sortable",e.sortable!==!1),B(i,"pg-th--sorted",!!e.sortOrder),B(i,"pg-th--sort-asc",e.sortOrder==="asc"),B(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=U(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 d=e.filterIconDisplay??r.filterIconDisplay??"hover";if(e.filterable!==!1&&d!=="hidden"){let p=y("pg-th__filter-btn"),h=e.filterActive===!0;h&&p.classList.add("pg-th__filter-btn--active"),d==="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}static{this.SET_FILTER_TYPES=new Set(["object","array","dropdown"])}isSetFilterColumn(e){return e.type!=null&&a.SET_FILTER_TYPES.has(e.type)}buildFilterCell(e){let t=y("pg-filter-cell");if(t.setAttribute("data-col-id",e.colId),e.filterable===!1)return t;let o=this.isSetFilterColumn(e),r=e.filterActive===!0,n=document.createElement("input");n.type="text",n.className="pg-filter-input";let i=y("pg-filter-cell__icon");i.setAttribute("role","button"),i.setAttribute("tabindex","0"),i.setAttribute("aria-label",`Filter ${e.header}`),r&&i.classList.add("pg-filter-cell__icon--active"),i.innerHTML=this.iconRenderer.renderToString(r?"filterActive":"filter",14);let s=()=>this.openFilterPanelFn?.(e,i);return i.addEventListener("click",s),i.addEventListener("keydown",l=>{(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),s())}),o?(n.readOnly=!0,n.setAttribute("aria-disabled","true"),n.setAttribute("aria-haspopup","listbox"),n.classList.add("pg-filter-input--set"),t.classList.add("pg-filter-cell--set"),n.addEventListener("mousedown",l=>{l.preventDefault(),s()})):n.addEventListener("input",l=>{this.applyInlineFilterFn?.(e,l.target.value)}),t.appendChild(n),t.appendChild(i),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=Y(n),d=!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=()=>{d||(d=!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(d)return;let f=Math.abs(m.clientX-i),C=Math.abs(m.clientY-s);l?(f>X||C>X)&&p():f>be&&h()},g=()=>{d||p()};document.addEventListener("pointermove",u),document.addEventListener("pointerup",g),l&&(e.classList.add("pg-th--drag-armed"),c=window.setTimeout(()=>{c=0,h()},Je))})}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 d=this.panelDragData.find(u=>u.panel===this.dragSourcePanel),c=d?.colIds.indexOf(e.colId)??-1;this.draggedColWidth=(c>=0&&d?d.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(d=>d.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 d=Array.from(s.querySelectorAll(".pg-th[data-col-id]")),c=t<d.length?d[t]:null;if(c)s.insertBefore(l,c);else{let p=d[d.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 d=this.panelDragData.find(c=>c.panel==="center");this.centerPanelRect=d?.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)},d=i.headerBuilder.buildGroupRows(i.buildTree(t),l);for(let c of d)r.insertBefore(c,o);e==="left"?this.leftGroupRowEls=d:e==="right"?this.rightGroupRowEls=d:this.centerGroupRowEls=d,r.style.setProperty("--pg-group-rows-count",String(d.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(d=>[d.colId,d])),l=r.map(d=>s.get(d)).filter(d=>d!==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 d=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){d=b;break}}let c=n.length>1&&l>=0&&l<n.length;if(c&&d===l&&e<n[0].left+r&&(d=l===0?1:0),c&&d===l&&e>=n[n.length-1].right+r){let b=n.length-1;d=l===b?b-1:b}let p=this.dragTargetLocalIdx;this.dragTargetLocalIdx=d,this.displayGroupEngine?.hasGroups&&d!==p&&this.rebuildGroupRowsWithPreview(d,l,s);let h=this.draggingGridEl?.getAttribute("data-photon-grid-id")??"",u=h?`[data-photon-grid-id="${h}"] `:"",g="";if(d===l){this.dragStyleEl.textContent="";return}let m=s.rects[l],f=n[d];if(!m||!f){this.dragStyleEl.textContent="";return}let C=d>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; }
|
|
4379
|
+
`;for(let b=0;b<n.length;b++){if(b===l)continue;let v=0;d>l&&b>l&&b<=d?v=-this.draggedColWidth:d<l&&b>=d&&b<l&&(v=this.draggedColWidth),v!==0&&(g+=`${u}[data-col-id="${i[b]}"] { --pg-drag-x: ${v}px; }
|
|
4380
|
+
`)}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,d=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(),d){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,d=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",d),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",d),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)},d=()=>{s||(s=!0,i.replaceWith(r))};i.addEventListener("keydown",c=>{c.stopPropagation(),c.key==="Enter"?(c.preventDefault(),l()):c.key==="Escape"&&(c.preventDefault(),d())}),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 d=o.offsetWidth+24;d>r&&(r=d)}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(d=>d.pinned!=="left"&&d.pinned!=="right");if(r.length===0)return;let n=r.reduce((d,c)=>d+this.colStyles.getWidth(c.colId),0)||1,i=[],s=0;for(let d of r){let c=d.minWidth??40,p=d.maxWidth??1/0,h=Math.min(p,Math.max(c,Math.round(this.colStyles.getWidth(d.colId)/n*o)));i.push([d.colId,h]),s+=h}let l=o-s;if(l!==0){let d=r[r.length-1],c=d.minWidth??40,p=d.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 tt=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 d=e.createElement("input");d.className="pg-col-chooser__search-input",d.type="text",d.placeholder="Search\u2026",d.setAttribute("aria-label","Search columns"),d.addEventListener("input",()=>{this.searchTerm=d.value.trim().toLowerCase(),this.renderTree()}),s.append(l,d);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(),d.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),d=this.makeLabel(e.header??t);if(n.append(i,s,d),d.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 J={_el:null,get(){if(!J._el){let a=document.createElement("div");a.className="pg-sparkline-tooltip",a.setAttribute("role","tooltip"),a.setAttribute("aria-live","polite"),document.body.appendChild(a),J._el=a}return J._el},show(a,e,t,o,r){let n=J.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=Cn(o),n.appendChild(i),J._position(n,a,e)},showOHLC(a,e,t,o){let r=J.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 d=document.createElement("span");d.className="pg-sparkline-tooltip__ohlc-key",d.textContent=i;let c=document.createElement("span");c.className="pg-sparkline-tooltip__value",c.textContent=Cn(s),l.appendChild(d),l.appendChild(c),r.appendChild(l)}J._position(r,a,e)},hide(){J._el&&(J._el.className="pg-sparkline-tooltip pg-sparkline-tooltip--hidden")},_position(a,e,t){a.className="pg-sparkline-tooltip";let o=a.offsetWidth||80,r=a.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),a.style.left=`${s}px`,a.style.top=`${l}px`}};function Cn(a){if(!isFinite(a))return"\u2014";let e=Math.abs(a);return e>=1e6?(a/1e6).toFixed(1)+"M":e>=1e3?(a/1e3).toFixed(1)+"K":a!==Math.floor(a)?a.toFixed(2):String(a)}function jt(a,e,t){return getComputedStyle(a).getPropertyValue(e).trim()||t}function Zi(a,e){let t=a.replace("#","");if(t.length!==6)return a;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 ot=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),J.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=jt(t,"--pg-primary","#2563eb"),r=jt(t,"--pg-colors-error","#ef4444"),n=jt(t,"--pg-colors-success","#22c55e"),i=e.stroke??o,s=e.positiveColor??i,l=e.fill??"";return l||(i.startsWith("#")&&i.length===7?l=Zi(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:d,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,d,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,d,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:d,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,d,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,d,s);m===0?r.moveTo(f,C):r.lineTo(f,C)}r.stroke(),n.showMarkers&&this._drawMarkers(o,l,d,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:d,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,d,s);for(let C of o){let b=l+C.index*u+g/2,v=this._yPos(C.value,c,p,d,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,d=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=d+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,d=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=d+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=jt(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:d,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:d,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:d}=this;l.fillStyle=d.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,d.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,d=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:d,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,d=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=d/Math.max(f,1),b=C*this.cfg.barSpacing;return{plotLeft:n,plotTop:i,plotRight:s,plotBottom:l,plotW:d,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,d=t-s*2,c;if(i.length===1)c=0;else{let h=d/(i.length-1),u=Math.round((e-l)/h);c=Math.max(0,Math.min(i.length-1,u))}let p=i[c];p&&J.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&&J.showOHLC(r,n,u,this.hasLabels)}_handleMouseLeave(){J.hide()}};var rt=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"),B(l,"pg-cell--selected",t.selected);let d=o.textAlign??(o.type==="number"||o.type==="currency"?"right":"left");if(d!=="left"&&l.classList.add(`pg-cell--align-${d}`),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=U(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,o=!1){let r=y("pg-cell pg-cell--serial");r.setAttribute("data-row-index",String(e.rowIndex)),r.setAttribute("role","gridcell"),o&&(r.classList.add("pg-cell--serial-select"),r.setAttribute("data-node-id",e.nodeId),r.setAttribute("aria-selected",e.selected?"true":"false"),r.setAttribute("tabindex","-1"));let n=document.createElement("span");return n.className="pg-cell__serial",n.textContent=String(t),r.appendChild(n),r}updateCellSelection(e,t){B(e,"pg-cell--range-selected",t)}updateCellActive(e,t){B(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),d=y("pg-badge");d.textContent=l?.label??s,l?.color&&(d.style.backgroundColor=l.color+"20",d.style.color=l.color),r.appendChild(d)}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,d=i.clientHeight;l>0&&d>0&&(i._pgSparkline=new ot(i,e,s))});break}default:{let n=ee(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 xn(a,e,t,o,r,n){if(!o||e.type!=="data"||t.colId!==o.toggleColumnId)return;a.classList.add("pg-cell--tree-toggle-col");let i=a.querySelector(".pg-cell__inner");if(!e.hasChildren){let d=y("pg-tree-toggle-spacer");i?a.insertBefore(d,i):a.insertBefore(d,a.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?a.insertBefore(l,i):a.insertBefore(l,a.firstChild),l.addEventListener("click",d=>{d.stopPropagation(),n.emit(x.TREE_NODE_TOGGLE_CLICKED,{row:e,colDef:t})})}function wn(a,e,t,o){if(!t||e.type!=="data")return;let r=a.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 En={colId:"__group__",field:"__group__",header:"Group",type:"string",editable:!1},nt=class{constructor(e,t,o,r){this.store=e;this.eventBus=t;this.iconRenderer=o;this.rowSelectionEngine=r;this.cellRenderer=new rt;this.renderedRowMap=new Map;this.leftContent=null;this.centerContent=null;this.rightContent=null;this.serialColumnSelection=!1;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(d=>d.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 d of[s.left,s.center,s.right])d?.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 d=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&&d.appendChild(v.left),v.center&&c.appendChild(v.center),v.right&&p.appendChild(v.right)}}this.leftContent&&this.leftContent.appendChild(d),this.centerContent?.appendChild(c),this.rightContent&&this.rightContent.appendChild(p),this.serialColumnSelection=!!n.serialColumnSelection,this.refreshRowSelectionEdges(),this.refreshHoverAtPointer()}refreshRowSelectionEdges(){if(!this.serialColumnSelection)return;let e=this.store.get("visibleRows"),t=this.store.get("selectedRowIds"),o=new Map;for(let r=0;r<e.length;r++)o.set(e[r].nodeId,r);for(let[r,n]of this.renderedRowMap){let i=[n.left,n.center,n.right].filter(h=>h!==null),s=t.has(r),l=!1,d=!1;if(s){let h=o.get(r);if(h!==void 0){let u=e[h-1]?.nodeId,g=e[h+1]?.nodeId;l=!u||!t.has(u),d=!g||!t.has(g)}}let c=n.left??n.center,p=n.right??n.center;for(let h of i)B(h,"pg-row--sel-top",s&&l),B(h,"pg-row--sel-bottom",s&&d),B(h,"pg-row--sel-edge-left",s&&h===c),B(h,"pg-row--sel-edge-right",s&&h===p)}}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){B(n,"pg-row--selected",t);let i=n.querySelector(".pg-checkbox");i&&(i.checked=t);let s=n.querySelector(".pg-cell--serial-select");s&&s.setAttribute("aria-selected",t?"true":"false")}}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 d=!!(this.leftContent&&(l.showCheckboxes||l.showSerialNumber||o.length>0)),c=!!(this.rightContent&&n.length>0),p=d?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 d=y("pg-cell--h-spacer");d.style.cssText=`width:${l}px;min-width:${l}px;flex-shrink:0;`,s.appendChild(d)}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 d=y("pg-cell--h-spacer");d.style.cssText=`width:${l}px;min-width:${l}px;flex-shrink:0;`,s.appendChild(d)}}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,t+1,!!i.serialColumnSelection)),i.showCheckboxes&&s.appendChild(this.cellRenderer.renderCheckboxCell(e,e.rowIndex))),o==="center"){let l=i.centerLeftSpacerW??0;if(l>0){let d=y("pg-cell--h-spacer");d.style.cssText=`width:${l}px;min-width:${l}px;flex-shrink:0;`,s.appendChild(d)}i.showGroupsColumn&&this.buildLeafGroupCell(s,e,i)}for(let l=0;l<r.length;l++){let d=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&&d.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=d.querySelector(".pg-cell__inner");p?p.insertBefore(c,p.firstChild):d.insertBefore(c,d.firstChild)}this.applyMasterDetailToggle(d,e,r[l],i),xn(d,e,r[l],i.treeData,this.iconRenderer,this.eventBus),s.appendChild(d)}if(o==="center"){let l=i.centerRightSpacerW??0;if(l>0){let d=y("pg-cell--h-spacer");d.style.cssText=`width:${l}px;min-width:${l}px;flex-shrink:0;`,s.appendChild(d)}}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"),d=o.allLeafColumns?.find(p=>p.field===t.groupField),c=d?U(d,"group"):void 0;if(d&&c){let p=c({row:t,colDef:d,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=U(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)&&ee(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 d=l.querySelectorAll(".pg-cell[data-row-index]");for(let c of d)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 d=l.querySelector(".pg-icon");d&&this.iconRenderer.updateIcon(d,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 d of i){let c=d.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)wn(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",d=>{d.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")),d=s.getAttribute("data-col-id")??"",c=o.find(h=>h.colId===d)??(d==="__group__"?t.type==="data"?n.leafGroupColDef??null:En: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(Y(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)<=X&&Math.abs(f.clientY-u)<=X&&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")),d=s.getAttribute("data-col-id")??"",c=o.find(p=>p.colId===d)??(d==="__group__"?t.type==="data"?n.leafGroupColDef??null:En: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 Xt=64,Rn=24,Yt=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 d=s?.nodeId??null,c=l;(d!==this.targetNodeId||c!==this.targetPosition)&&(this.targetNodeId=d,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<Xt?r=-Rn*Math.pow(1-t/Xt,2):o>=0&&o<Xt&&(r=Rn*Math.pow(1-o/Xt,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;}
|
|
4381
|
+
`),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),d=0;for(let h=0;h<s.length;h++)s[h]={...s[h],rowIndex:h,top:d},d+=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 it=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"]'),d=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),d&&(d.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 d=parseInt(n.value,10);isNaN(d)||(this.paginationEngine.goToPage(d),this.updatePaginationState(),this.eventBus.emit(x.PAGE_CHANGED,{page:d,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 st=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 Kt=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),d=Math.max(l.minWidth,Math.floor(l.flex/i*n));this.widths.set(s,d)}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(`
|
|
4382
|
+
`)}destroy(){this.styleEl?.remove(),this.styleEl=null,this.widths.clear(),this.flexCols.clear(),this.userResizedWidths.clear()}};var Zt=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 Jt=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(Y(e)&&this.panPointerId===null&&!this.gestureGuard?.()&&!e.target?.closest(vn)){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)<X&&Math.abs(o)<X)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 d=new AbortController;this.abortCtrl=d;let c=d.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)<wt&&Math.abs(t)<wt)return;let o=16,r=()=>{if(this.momentumRAF=null,e*=Uo,t*=Uo,Math.abs(e)<wt&&Math.abs(t)<wt)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 Qt=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.axis="both";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;if(this.axis!=="x"){let 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)}if(this.axis!=="y"){let s=n-t.left,l=t.right-n;s<this.threshold?(this.scrollX(-this.speedAt(Math.max(0,s))*o),r=!0):l<this.threshold&&(this.scrollX(this.speedAt(Math.max(0,l))*o),r=!0)}}r&&this.onScrolled?.(this.clientX,this.clientY),this.rafId=requestAnimationFrame(this.tick)}}updateMouse(e,t,o="both"){this.clientX=e,this.clientY=t,this.axis=o,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 jo="cubic-bezier(0.4, 0, 0.2, 1)",eo=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",d=s.reduce((g,m)=>g+(m.oldTop!==void 0?1:0),0),c=!l&&d/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 ${jo}`,m=`opacity ${n}ms ${jo}, transform ${n}ms ${jo}`;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 Ji=[{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"}],Qi=[{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"}],es=[{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 Sn(a){switch(a){case"number":case"currency":case"percentage":return Qi;case"date":case"time":return es;default:return Ji}}function ts(a){switch(a){case"number":case"currency":case"percentage":return"number";case"date":return"date";case"time":return"time";default:return"text"}}function to(a){return a==="dropdown"||a==="array"||a==="object"}function Et(a){return a==="blank"||a==="notBlank"}function Xo(a){return a==="inRange"}var ye=28,In=9,Tn=3,os=200,oo=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=Sn(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(to(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=U(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 to(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&&to(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=Sn(e),r=ts(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 d=document.createElement("select");d.className="pg-filter-cond__select",d.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),d.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=Xo(n),m=Et(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),d.addEventListener("change",()=>{let f=d.value;t===1?this.op1=f:this.op2=f;let C=Et(f),b=Xo(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&&!Et(this.op1))):this.val2=f,this.scheduleEmit()}),u.addEventListener("input",()=>{t===1?this.val1To=u.value:this.val2To=u.value,this.scheduleEmit()}),l.appendChild(d),l.appendChild(c),l}hasConditionValue(e){let t=e===1?this.op1:this.op2,o=e===1?this.val1:this.val2;return Et(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,In)*ye,d=document.createElement("div");d.className="pg-filter-set__list",d.style.height=`${l}px`;let c=document.createElement("div");return c.className="pg-filter-set__list-inner",c.style.height=`${this.displayOptions.length*ye}px`,d.appendChild(c),d.addEventListener("scroll",()=>this.renderVirtualList(),{passive:!0}),this.vsContainerEl=d,this.vsInnerEl=c,e.appendChild(d),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*ye}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||In*ye,o=Math.max(0,Math.floor(e/ye)-Tn),r=Math.min(this.displayOptions.length,Math.ceil((e+t)/ye)+Tn);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*ye}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=U(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(to(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 Et(e)?{operator:e,value:null}:t.trim()===""?null:Xo(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(),os)}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 rs=20,ns=10,ro=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=gt(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=d=>{d.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(gt(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??ns;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 d=n.detailRendererFn({rowData:t.data,nodeId:r,containerEl:e.containerEl,parentApi:this.parentApi});d&&d!==e.containerEl&&e.containerEl.appendChild(d),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"),d=r.querySelector(".pg-grid__footer"),c=(l?.offsetHeight??0)+(d?.offsetHeight??0)+2;this.masterDetailEngine.setDetailHeight(t,c+s+rs*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=d=>{this.masterDetailEngine.setDetailHeight(t,n+(d.clientY-r))},s=()=>{document.removeEventListener("pointermove",i),document.removeEventListener("pointerup",s)},l=d=>{d.button===0&&(d.preventDefault(),r=d.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 no(a,e,t,o=0,r=a.length-1){let n=o,i=r;for(;n<=i;){let s=n+i>>1,l=a[s].top,d=l+(a[s].height??t);if(e<l)i=s-1;else if(e>=d)n=s+1;else return s}return-1}var io=class{compute(e,t,o,r){let n={nodeId:null,offsetPx:0,minStart:r};if(e.length===0)return n;let i=no(e,t,o);if(i<0)return n;let s=this.resolveMasterIndex(e,i);if(s<0)return n;let l=e[s],d=e[s+1];if(!d||d.type!=="detail")return n;let c=l.height??o,p=d.top+(d.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 is(a,e,t){let o=0,r=a.length-1;for(;o<=r;){let n=o+r>>1,i=a[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 so=class{compute(e,t,o,r){let n={entries:[],minStart:r};if(e.length===0)return n;let i=no(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,d=0,c=[];for(;;){let p=t+d,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:d+g}),l=Math.min(l,s.rowIndex),p>=u)break;d+=h;let m=is(s.children,t+d,o);if(!m||!(m.hasChildren||m.children.length>0))break;s=m}return{entries:c,minStart:l}}};var ss=120,ls=140,lo=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=vt("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=vt("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=vt("textarea",{placeholder:e.placeholder??"Ask Photon AI to do something...",rows:1});o.className="pg-ai-panel__input",this.inputEl=o;let r=vt("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,ss)}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){ln(e);for(let o of t.split(`
|
|
4383
|
+
`)){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*ls));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 as=400,ao=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=U(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))},as))}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 Mn=44,kn=52,ds=5,cs=2,he=200,lt=class{constructor(e,t,o,r,n,i,s,l,d,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=d;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 io;this.treeStickyRowTracker=new so;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 eo;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 Kt,this.rowPositionSheet=new Zt,this.scrollController=new Jt,this.masterDetailEnabledAtConstruction=p.masterDetail?.enabled??!1,this.treeDataEnabledAtConstruction=p.treeData?.enabled??!1,this.masterDetailEnabledAtConstruction&&this.scrollController.setReserveVerticalGutter(!0),this.headerRenderer=new et(t,o,i,r,l,this.colStyles),p.showGroupingBar&&(this.groupDropZone=new $t(t,c,i),this.headerRenderer.setGroupDropZone(this.groupDropZone)),this.bodyRenderer=new nt(t,o,i,d),this.footerRenderer=new it(o,i,n),this.overlayRenderer=new st(i),p.masterDetail?.enabled&&(this.detailRowRenderer=new ro,this.detailRowRenderer.setParentScrollForwarder(h=>{this.scrollController.scrollToY(this.scrollController.getScrollTop()+h)})),p.photonAI?.enabled&&(this.photonAIPanel=new lo(i)),this.tooltipController=new ao(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 Yt(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 Qe(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(d=>[d.colId,d])),s=r.map(d=>i.get(d.colId)).filter(d=>d!==void 0);s.some((d,c)=>d.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 oo({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()}applyInlineTextFilter(e,t){if(!this.filterEngine)return;let o=t.trim();if(o==="")this.filterEngine.setColumnFilter(e.colId,null);else{let r={colId:e.colId,field:e.field,type:"string",logic:"and",conditions:[{operator:"contains",value:o}],searchTerm:o};this.filterEngine.setColumnFilter(e.colId,r)}this.filterRefreshFn?.()}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 d of r){if(l==null)break;l=l[d]}}else l=s.data[o];if(Array.isArray(l))for(let d of l)d!=null&&d!==""&&i.add(String(d));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"),d=t-s.length;if(d<0||d>=l.length)return;let h=(this.store.get("groupedColumnIds").length>0?he:0)+this.colStyles.getTotalWidth(l.slice(0,d).map(f=>f.colId)),u=this.colStyles.getWidth(l[d].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?he:0)+this.colStyles.getTotalWidth(r.slice(0,n).map(h=>h.colId)),d=this.colStyles.getWidth(e),c=this.scrollController.getScrollLeft(),p=this.scrollController.getCenterViewportWidth();l<c?this.scrollController.scrollToX(l):l+d>c+p&&this.scrollController.scrollToX(l+d-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}extendRowDragAtPoint(e,t){let r=document.elementFromPoint(e,t)?.closest("[data-row-index]");if(!r)return;let n=Number(r.getAttribute("data-row-index"));isNaN(n)||this.rowSelectionEngine.extendRowDrag(n,this.store.get("visibleRows"))}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"),d=y("pg-panel__header-inner");l.appendChild(d),s.appendChild(l),r.appendChild(s),this.centerHeaderInnerEl=d;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"),A=y("pg-scrollbar-h-spacer pg-scrollbar-h-spacer--left"),L=y("pg-scrollbar-h-native"),$=y("pg-scrollbar-h-content");L.appendChild($);let W=y("pg-scrollbar-h-spacer pg-scrollbar-h-spacer--right"),F=y("pg-scrollbar-h-spacer pg-scrollbar-h-spacer--vscroll");M.appendChild(A),M.appendChild(L),M.appendChild(W),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,L,$,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(_=>this.scrollController.scrollToX(this.scrollController.getScrollLeft()+_),_=>_<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 Q=[f,v,R];this.leftStickyRowEl&&Q.push(this.leftStickyRowEl),this.centerStickyRowEl&&Q.push(this.centerStickyRowEl),this.rightStickyRowEl&&Q.push(this.rightStickyRowEl),this.cellSelectionEngine.setBodyPanels(Q),this.cellSelectionEngine.setScrollToCellCallback((_,D)=>this.scrollToCell(_,D)),this.cellSelectionEngine.setClearRowSelectionCallback(()=>this.rowSelectionEngine.deselectAll(this.store.get("visibleRows"))),this.cellSelectionEngine.setGetViewportRowCountCallback(()=>{let _=this.scrollController.getViewportHeight(),D=this.options.rowHeight??48;return Math.max(1,Math.floor(_/D))}),this.cellSelectionEngine.setDataChangedCallback(_=>{_&&_.size>0?this.invalidateBodyRowsByIds(_):this.invalidateBodyRows()}),this.headerRenderer.setOpenFilterPanelCallback((_,D)=>this.openFilterPanel(_,D)),this.headerRenderer.setInlineFilterCallback((_,D)=>this.applyInlineTextFilter(_,D)),this.columnChooser=new tt(this.columnModel,this.iconRenderer),this.headerRenderer.setColumnChooserCallback(()=>{this.columnChooser?.open(this.options.columns??[])}),this.headerRenderer.setColumnDataRefreshCallback(()=>this.filterRefreshFn?.()),this.autoScroller=new Qt(()=>this.bodyWrapEl?.getBoundingClientRect()??null,_=>this.scrollController.scrollToY(this.scrollController.getScrollTop()+_),_=>this.scrollController.scrollToX(this.scrollController.getScrollLeft()+_),(_,D)=>{if(this.rowSelectionEngine.isRowDragging)this.extendRowDragAtPoint(_,D);else if(this.cellSelectionEngine.isSelecting){let q=document.elementFromPoint(_,D)?.closest("[data-row-index][data-col-index]");if(!q||!q.hasAttribute("data-col-id"))return;let se=Number(q.getAttribute("data-row-index")),le=Number(q.getAttribute("data-col-index"));!isNaN(se)&&!isNaN(le)&&this.cellSelectionEngine.extendSelection(se,le)}else this.cellSelectionEngine.updateFillPosition(_,D)}),this.cellSelectionEngine.setFillDragScrollCallback((_,D)=>this.autoScroller.updateMouse(_,D)),this.cellSelectionEngine.setFillDragEndCallback(()=>this.autoScroller?.stop()),this.cellSelectionEngine.setDragViewportRectCallback(()=>this.bodyWrapEl?.getBoundingClientRect()??null),u.addEventListener("pointerdown",_=>{if(!this.rowSelectionEngine.serialColumnSelection||Y(_)||_.button!==0)return;let D=_.target.closest(".pg-cell--serial-select");if(!D)return;let K=Number(D.getAttribute("data-row-index")),q=D.getAttribute("data-node-id");isNaN(K)||!q||(_.preventDefault(),this.cellSelectionEngine.clearSelection(),this.rowSelectionEngine.beginRowDrag(K,q,this.store.get("visibleRows"),{ctrl:_.ctrlKey||_.metaKey,shift:_.shiftKey}),this.autoScroller?.updateMouse(_.clientX,_.clientY,"y"))}),u.addEventListener("pointermove",_=>{if(this.rowSelectionEngine.isRowDragging){if(Y(_))return;if(_.buttons===0){this.rowSelectionEngine.endRowDrag(),this.autoScroller?.stop();return}this.autoScroller?.updateMouse(_.clientX,_.clientY,"y");let se=_.target.closest("[data-row-index]");if(se){let le=Number(se.getAttribute("data-row-index"));isNaN(le)||this.rowSelectionEngine.extendRowDrag(le,this.store.get("visibleRows"))}return}if(!this.cellSelectionEngine.isSelecting||Y(_))return;if(_.buttons===0){this.cellSelectionEngine.endSelection(),this.autoScroller?.stop();return}this.autoScroller?.updateMouse(_.clientX,_.clientY);let D=_.target.closest("[data-row-index][data-col-index]");if(!D||!D.hasAttribute("data-col-id"))return;let K=Number(D.getAttribute("data-row-index")),q=Number(D.getAttribute("data-col-index"));!isNaN(K)&&!isNaN(q)&&this.cellSelectionEngine.extendSelection(K,q)}),u.addEventListener("pointerup",()=>{this.cellSelectionEngine.endSelection(),this.rowSelectionEngine.endRowDrag(),this.autoScroller?.stop()});let ie=()=>{this.cellSelectionEngine.isSelecting&&this.cellSelectionEngine.endSelection(),this.rowSelectionEngine.isRowDragging&&this.rowSelectionEngine.endRowDrag(),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"),d=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?Mn:0,G=this.options.showSerialNumber?kn:0,O=this.colStyles.getTotalWidth(i.map(j=>j.colId)),H=this.colStyles.getTotalWidth(l.map(j=>j.colId)),V=k>0||G>0||i.length>0,Z=l.length>0;c.style.setProperty("--pg-left-panel-width",V?`${k+G+O}px`:"0px"),c.style.setProperty("--pg-right-panel-width",Z?`${H+2}px`:"0px"),this.leftBodyPanelEl&&(this.leftBodyPanelEl.style.setProperty("display",V?"":"none"),this.leftHeaderPanelEl?.parentElement&&this.leftHeaderPanelEl.parentElement.style.setProperty("display",V?"":"none")),this.rightBodyPanelEl&&(this.rightBodyPanelEl.style.setProperty("display",Z?"":"none"),this.rightHeaderPanelEl?.parentElement&&this.rightHeaderPanelEl.parentElement.style.setProperty("display",Z?"":"none"));let ae=s.map(j=>j.colId);if(this.colStyles.hasFlex(ae)){let j=this.centerBodyEl?.clientWidth??0;j>0&&(this.colStyles.resolveFlex(ae,j),this._lastFlexResolvedWidth=j)}let Me=this.colStyles.getTotalWidth(ae)+(u?he:0);this._cachedCenterW=Me,c.style.setProperty("--pg-center-content-width",`${Me}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?he: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??d;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?Mn:0,G=this.options.showSerialNumber?kn:0,O=this.colStyles.getTotalWidth(i.map(j=>j.colId)),H=this.colStyles.getTotalWidth(l.map(j=>j.colId)),V=k>0||G>0||i.length>0,Z=l.length>0;c.style.setProperty("--pg-left-panel-width",V?`${k+G+O}px`:"0px"),c.style.setProperty("--pg-right-panel-width",Z?`${H+2}px`:"0px");let ae=s.map(j=>j.colId),Me=this.colStyles.getTotalWidth(ae)+(u?he:0);this._cachedCenterW=Me,c.style.setProperty("--pg-center-content-width",`${Me}px`),this.scrollController.updateSizes(this._cachedTotalHeight,Me)}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?he: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:cs,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)),A=this.colStyles.getTotalWidth(s.slice(T).map(k=>k.colId)),L=s.slice(I,T),$={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:he,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,$),this.headerRendered=!0),(I!==this.lastCenterColStart||T!==this.lastCenterColEnd)&&(this.headerRenderer.updateCenterVisibleCols(L,M,A,$),this.lastCenterColStart=I,this.lastCenterColEnd=T);let W=this.scrollController.getScrollTop(),F=this.centerBodyEl?.clientHeight??400,Q=this.options.virtualScroll?.rowBuffer??ds,ie=this.rowAnimator.hasPending()?Math.ceil(F/d):0,_=this.options.rowHeightMode==="auto",D,K;if(_){let k=(Q+ie)*d,G=W-k,O=W+F+k;D=0,K=e.length;for(let H=0;H<e.length;H++)if(e[H].top+(e[H].height??d)>=G){D=H;break}for(let H=D;H<e.length;H++)if(e[H].top>O){K=H;break}}else D=Math.max(0,Math.floor(W/d)-Q-ie),K=Math.min(e.length,Math.ceil((W+F)/d)+Q+ie);let q=null,se=0,le=[];if(this.masterDetailEnabledAtConstruction){let k=this.stickyRowTracker.compute(e,W,d,D);q=k.nodeId,se=k.offsetPx,D=k.minStart}else if(this.treeExpansionService){let k=this.treeStickyRowTracker.compute(e,W,d,D);le=k.entries,D=k.minStart}this.stickyNodeId=q,this.rowPositionSheet.update(e.slice(D,K).map(k=>({nodeId:k.nodeId,top:k.top,height:_?d:k.height??d})),_);let Te=e.slice(D,K),ri=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,ni=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+L.length):this.bodyRenderer.renderRows(Te,i,L,l,{showCheckboxes:this.options.showCheckboxes,showSerialNumber:this.options.showSerialNumber,serialColumnSelection:this.rowSelectionEngine.serialColumnSelection,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:he,leafGroupColDef:g,allLeafColumns:t,centerColStart:I,centerLeftSpacerW:M,centerRightSpacerW:A,totalCenterCols:s.length,masterDetail:ri,treeData:ni}),this.detailRowRenderer){let k=new Set(e.filter(O=>O.type==="detail").map(O=>O.nodeId)),G=Te.filter(O=>O.type==="detail");this.detailRowRenderer.sync(G,k)}if(this.masterDetailEnabledAtConstruction?this.bodyRenderer.setStickyRows(q?[{nodeId:q,top:se}]:[]):this.treeExpansionService&&this.bodyRenderer.setStickyRows(le),this.rowAnimator.hasPending()){let k=[this.leftBodyContentEl,this.centerBodyContentEl,this.rightBodyContentEl].filter(Boolean);this.rowAnimator.animate(k,Te,F)}if(_){let k=new Map(Te.map(H=>[H.nodeId,H])),G=new Map;for(let H of[this.leftBodyContentEl,this.centerBodyContentEl,this.rightBodyContentEl])if(H)for(let V of H.querySelectorAll("[data-node-id]")){let Z=V.getAttribute("data-node-id");if(!Z)continue;let ae=V.offsetHeight;ae>0&&G.set(Z,Math.max(G.get(Z)??0,ae))}let O=!1;for(let[H,V]of G){let Z=k.get(H);Z&&V!==Z.height&&(Z.height=V,O=!0)}if(O){let H=0;for(let V of e)V.top=H,H+=V.height??d;this.rowPositionSheet.update(Te.map(V=>({nodeId:V.nodeId,top:V.top,height:d})),!0),this._cachedTotalHeight=H,c.style.setProperty("--pg-content-height",`${H}px`),this.scrollController.updateSizes(H,this._cachedCenterW)}}this.store.set("firstRenderedRowIndex",D),this.store.set("lastRenderedRowIndex",K),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:Te.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.bodyRenderer.refreshRowSelectionEdges()}),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;this.rowSelectionEngine.serialColumnSelection&&this.store.get("selectedRowIds").size>0&&this.rowSelectionEngine.deselectAll(this.store.get("visibleRows")),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),d=Math.max(s.minWidth??40,Math.round(l*n));this.colStyles.setWidth(s.colId,d),this.columnModel.setColumnWidth(s.colId,d,!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 at=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 dt=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 at(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)}toggleRowSelection(e){let t=this.ctx.store.get("visibleRows");this.ctx.rowSelectionEngine.toggleRowSelection(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)}getSelectedRowIds(){return Array.from(this.ctx.store.get("selectedRowIds"))}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,!0)}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(d=>d.nodeId)),s=o&&o.length>0?new Set(o):null,l=[];for(let d of this.ctx.containerEl.querySelectorAll("[data-node-id]"))if(i.has(d.getAttribute("data-node-id")??""))for(let c of d.querySelectorAll("[data-col-id]")){let p=c.getAttribute("data-col-id");s&&(!p||!s.has(p))||l.push(c)}for(let d of l)d.classList.remove("pg-cell--flash"),d.offsetWidth,d.classList.add("pg-cell--flash");l.length>0&&setTimeout(()=>{for(let d of l)d.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())}selectRowsByIndex(e){let t=this.getVisibleRows(),o=[];for(let r of e){let n=t[r];n&&n.type==="data"&&o.push(n.nodeId)}o.length>0&&this.ctx.rowSelectionEngine.selectRows(o,t)}selectRowRange(e,t){this.ctx.rowSelectionEngine.selectRange(e,t,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())}selectRowsMatchingFilter(e,t){let o=this.ctx.columnModel.getColumn(e);if(!o)return 0;let r=this.getAllRows().filter(n=>n.type==="data"&&this.ctx.filterEngine.matchesColumnFilter(n,t,o)).map(n=>n.nodeId);return r.length>0&&this.ctx.rowSelectionEngine.selectRows(r,this.getVisibleRows()),r.length}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 ct=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 ps=200,co=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??ps,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 hs="parentId",us="children";function _n(a,e){switch(a.mode){case"parentId":return gs(e,a.idField??"id",a.parentIdField??hs);case"dataPath":return ms(e,a.getDataPath);case"custom":return fs(e,a.hierarchyProvider);case"childrenField":return vs(e,a.childrenField??us,a.idField??"id");default:return[]}}function gs(a,e,t){let o=new Array(a.length);for(let r=0;r<a.length;r++){let n=a[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 ms(a,e){let t=new Map;for(let o of a){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 fs(a,e){return a.map(t=>({id:e.getId(t),parentId:e.getParentKey(t)??null,record:t}))}function vs(a,e,t){let o=[];function r(n,i,s){for(let l=0;l<n.length;l++){let d=n[l],c=s?`${s}.${l}`:String(l),p=d[t],h=p!=null?String(p):c;o.push({id:h,parentId:i,record:d});let u=d[e];Array.isArray(u)&&u.length>0&&r(u,h,c)}}return r(a,null,""),o}function Ln(a,e=50){let t=new Map;for(let n of a)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 a){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 An(a,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(a),t}var po=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),An(o,this.expansionService.getExpandedIds())}buildRoots(e){if(!this.config)return[];let t=e.map(i=>i.data),o=_n(this.config,t),r=Ln(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 ho=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 uo=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 go=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 mo=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 d=this.computeMaxGroupDepth(n),c=d>0?this.buildGroupRows(n,d):[];return{roots:n,maxGroupDepth:d,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 fo=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},d=e.headerRendererFn({logicalGroup:l,collapsed:n,api:null});typeof d=="string"?s.innerHTML=d:s.appendChild(d)}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",d=>{d.button===0&&(d.stopPropagation(),d.preventDefault(),this.startGroupResize(d,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 d=Math.max(t.collapsedWidth,o+l.clientX-n);r.onGroupResize?.(t.instanceId,d)},s=l=>{let d=Math.max(t.collapsedWidth,o+l.clientX-n);r.onGroupResize?.(t.instanceId,d),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 vo=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=Y(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>X||h>X)&&(this.removeMoveUp?.(),this.removeMoveUp=null,i());return}if(p<be&&h<be)return;this.isDragging=!0,this.activateDrag(c,t)}this.isDragging&&this.onMouseMove(c)},d=c=>{this.removeMoveUp?.(),this.removeMoveUp=null,i(),this.isDragging&&this.onMouseUp(c),this.isDragging=!1};document.addEventListener("pointermove",l),document.addEventListener("pointerup",d),this.removeMoveUp=()=>{document.removeEventListener("pointermove",l),document.removeEventListener("pointerup",d)},r&&(o.classList.add("pg-th--drag-armed"),n=window.setTimeout(()=>{n=0,s(this.startX,this.startY)},Je))}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??"",d=e<this.capturedCells.length?this.capturedCells[e]:this.capturedCells[this.capturedCells.length-1],c=e>o?d.rect.right-i.rect.right:d.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; }
|
|
4301
4384
|
`;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; }
|
|
4302
4385
|
`;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
4386
|
`:`${n}[data-col-id="${g}"] { --pg-drag-x: ${m}px; }
|
|
4304
4387
|
`,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:
|
|
4306
|
-
${
|
|
4307
|
-
`)}`};
|
|
4308
|
-
`),t=
|
|
4388
|
+
`}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 d=n.querySelector(`.pg-th[data-col-id="${e}"]`);if(!d){this.indicatorEl.style.display="none";return}let c=d.getBoundingClientRect();i=c.left,s=c.top,l=c.height}else{let d=Array.from(n.querySelectorAll(".pg-th[data-col-id]"));if(d.length===0){this.indicatorEl.style.display="none";return}let c=d[d.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 bo=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 go,this.builder=new mo,this.headerBuilder=new fo(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)),d=this.findInstanceLeaves(s,r,l);if(i){let c=d.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)??d.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)),d=n.filter(u=>!l.has(u.colId)),c=s.map(u=>({...u,pinned:o})),p;r?(p=d.findIndex(u=>u.colId===r),p===-1&&(p=this.findEndOfPanel(d,o))):p=this.findEndOfPanel(d,o);let h=[...d.slice(0,p),...c,...d.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 d=l.reduce((p,h)=>p+this.colStyles.getWidth(h.colId),0);if(d<=0||Math.abs(t-d)<1)return;let c=t/d;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)),d=n.filter(h=>!l.has(h.colId)),c=s.map(h=>({...h,pinned:o})),p;r?(p=d.findIndex(h=>h.colId===r),p===-1&&(p=this.findEndOfPanel(d,o))):p=this.findEndOfPanel(d,o),this.store.set("columns",[...d.slice(0,p),...c,...d.slice(p)])}confirmDragPreview(){this.previewBaseColumns=null}createDragHandler(e){return this.dragHandler||(this.dragHandler=new vo(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,d,c)=>(o.has(d.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,d=l<i.length?i[l].colId:null;this.handleGroupMoved(e,n,n,d)}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 bs=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"]),ys=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"]]),Cs=new Set(["status","address","series","analysis","this","his","is","was","has","as","gas"]);function Dn(a){return a.length<=3||/^\d+$/.test(a)||Cs.has(a)?a:a.endsWith("ies")?`${a.slice(0,-3)}y`:/(?:s|x|z|ch|sh)es$/.test(a)?a.slice(0,-2):a.endsWith("ss")?a:a.endsWith("s")?a.slice(0,-1):a}function Rt(a){return a.split(" ").filter(e=>e.length>0)}function pt(a){let e=Dn(a.toLowerCase());return ys.get(e)??e}function St(a){let o=a.toLowerCase().replace(/[^\p{L}\p{N}\s.\-:/]/gu," ").split(/\s+/).filter(n=>n.length>0),r=[];for(let n of o){let i=pt(n);bs.has(i)||r.push(i)}return r.join(" ")}var xs=new Set([",","and","then","also","plus"]),ws=new Set(["between","from"]),Es=new Set(["select","deselect"]);function Rs(a,e,t){return e<a.length&&t.has(pt(a[e]))}function Hn(a,e){let o=a.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(),d=l===",";if(!d&&!xs.has(l)){n.push(s);continue}let c=n.some(u=>ws.has(u.toLowerCase())),p=n.length===1&&Es.has(pt(n[0])),h=Rs(o,i+1,e);n.length>0&&!c&&!p&&h?(r.push(n.join(" ")),n=[]):d||n.push(s)}return n.length>0&&r.push(n.join(" ")),r.length>0?r:[a.trim()]}function Ss(a,e){let t=new Set(e);return{covered:a.every(r=>t.has(r)),words:a}}function Is(a,e){let t=null;for(let o of a.aliases)Ss(o,e).covered&&(!t||o.length>t.length)&&(t=o);return t}var Ce=class{parse(e,t){let o=null,r=null;for(let s of t.getAll()){let l=Is(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 Ts(a,e){if(a===e)return 0;if(a.length===0)return e.length;if(e.length===0)return a.length;let t=Array.from({length:e.length+1},(r,n)=>n),o=new Array(e.length+1);for(let r=1;r<=a.length;r++){o[0]=r;for(let n=1;n<=e.length;n++){let i=a[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 Pn(a,e){let t=Math.max(a.length,e.length);return t===0?1:1-Ts(a,e)/t}var Ms=.6,Gn=.75,ks=300,_s=new Set(["true","yes","active","enabled","on","open"]),Ls=new Set(["false","no","inactive","disabled","off","closed"]),As=new Set(["of","the","a","an","and","or"]),Ds=3,Hs=[{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"}],Ps=[...Hs].sort((a,e)=>e.words.length-a.words.length);function z(a){return a.toLowerCase().trim()}function Yo(a){return[a.colId,a.field,a.header].filter(e=>!!e).map(z)}function Gs(a){let e=new Set;for(let t of Yo(a))for(let o of t.split(" "))e.add(o);return e}var xe=class{constructor(e){this.memory=e}resolveColumn(e,t){if(e.length===0||t.length===0)return null;let o=e.map(z).join(" "),r=this.memory?.getColumnAlias(o);if(r){let l=t.find(d=>d.colId===r);if(l)return l}let n=[o,...e.map(z)].filter(l=>l.length>0),i=null,s=0;for(let l of t){let d=Yo(l);for(let c of n)for(let p of d){let h=this.scoreCandidate(c,p);h>s&&(s=h,i=l)}}return!i||s<Ms?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(Ds,e.length-n);l>=2;l--){let d=e.slice(n,n+l).map(z).join(" "),c=t.find(p=>Yo(p).includes(d));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(z)),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(z));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=>z(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=Gs(t);return e.filter(r=>!o.has(z(r)))}resolveNegation(e){let t=e.map(z).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(z);for(let{words:o,operator:r}of Ps){let n=Ns(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(z),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=z(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=z(e);return _s.has(t)?!0:Ls.has(t)?!1:null}matchOption(e,t){let o=z(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>=Gn?n:null}resolveColumnByValue(e,t,o){if(e.length===0)return null;let r=e.map(z).join(" "),n=[r,...e.map(z)].filter(d=>d.length>0),i=t.filter(d=>d.filterable!==!1),s=null,l=0;for(let d of i){let c=d.dropdownOptions??d.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:d,rawValue:String(h.value)})}d.type==="boolean"&&this.parseBooleanToken(p)!==null&&1>l&&(l=1,s={column:d,rawValue:p})}}return s&&l>=Gn?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,ks);for(let s=0;s<i;s++){let l=n[s].data;for(let d of r){let c=l[d.field];if(c!=null&&z(String(c))===e)return{column:d,rawValue:String(c)}}}return null}scoreCandidate(e,t){return e===t?1:e.length>=3&&(t.includes(e)||e.includes(t))?.9:Pn(e,t)}optionScore(e,t){let o=z(t),r=this.scoreCandidate(e,o),n=new Set(e.split(" ").filter(d=>d.length>0)),i=o.split(" ").filter(d=>d.length>0&&!As.has(d));if(i.length===0)return r;let s=i.filter(d=>n.has(d)).length/i.length,l=s===1?.95:s*.7;return Math.max(r,l)}};function Ns(a,e){if(e.length===0||e.length>a.length)return-1;e:for(let t=0;t<=a.length-e.length;t++){for(let o=0;o<e.length;o++)if(a[t+o]!==e[o])continue e;return t}return-1}var we=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 Ee=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 Re=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 yo(){return{columnAliases:{},phrases:{}}}var Co=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=yo(),this.persist()}load(){try{if(typeof localStorage>"u")return yo();let e=localStorage.getItem(this.storageKey);if(!e)return yo();let t=JSON.parse(e);return{columnAliases:t.columnAliases??{},phrases:t.phrases??{}}}catch{return yo()}}persist(){try{if(typeof localStorage>"u")return;localStorage.setItem(this.storageKey,JSON.stringify(this.snapshot))}catch{}}};function Nn(a){return[...a].sort().join("|")}function On(a,e,t){return{column:e.resolveColumn(a,t)??void 0}}function Fn(a){return a.column?a.column.sortable===!1?`"${a.column.header}" isn't sortable.`:null:"I couldn't find a column matching your request."}var Os={key:"sortAscending",aliases:[["sort","ascending"],["sort","asc"],["ascending"],["asc"],["low","high"],["smallest","largest"],["sort"]],description:"Sorts a column in ascending order.",resolveEntities:On,validate:Fn,buildCommand:a=>({type:"sortAscending",params:{colId:a.column.colId,header:a.column.header}}),execute:(a,e)=>{let t=a.params.colId;return e.sortColumn(t,"asc"),`Sorted "${a.params.header}" ascending.`}},Fs={key:"sortDescending",aliases:[["sort","descending"],["sort","desc"],["descending"],["desc"],["high","low"],["largest","smallest"]],description:"Sorts a column in descending order.",resolveEntities:On,validate:Fn,buildCommand:a=>({type:"sortDescending",params:{colId:a.column.colId,header:a.column.header}}),execute:(a,e)=>{let t=a.params.colId;return e.sortColumn(t,"desc"),`Sorted "${a.params.header}" descending.`}},Bs={key:"clearSort",aliases:[["clear","sort"],["remove","sort"],["unsort"]],description:"Clears all sorting.",resolveEntities:()=>({}),buildCommand:()=>({type:"clearSort",params:{}}),execute:(a,e)=>(e.clearSort(),"Cleared sorting.")};function Bn(a){a.registerAll([Os,Fs,Bs])}function Ko(a){return a==="number"||a==="currency"||a==="percentage"?"number":a==="date"||a==="time"?"date":a==="boolean"?"boolean":a==="dropdown"?"dropdown":"string"}var zs={equals:"notEquals",notEquals:"equals",contains:"notContains",notContains:"contains",blank:"notBlank",notBlank:"blank"};function Ws(a){return a==="string"?"contains":"equals"}function Zo(a,e,t){let o=Ko(a.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),d=l.join(" ").trim(),c=n??Ws(o);if(s&&(c=zs[c]??c),c==="blank"||c==="notBlank")return{operator:c,value:null};if(!d)return null;switch(o){case"number":{let p=t.parseNumberToken(d);return p===null?null:{operator:c,value:p}}case"date":{let p=t.parseDateToken(d);return p?{operator:c,value:p}:null}case"boolean":{let p=t.parseBooleanToken(d);return p===null?null:{operator:c,value:p}}case"dropdown":{let p=t.matchOption(d,a);return p?{operator:c,value:p.value}:null}default:return{operator:c,value:d}}}function Jo(a,e,t){let o=Ko(a.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 Qo(a,e){let t=Ko(a.type),o={operator:e.operator,value:e.value,valueTo:e.valueTo},r=t==="dropdown"&&e.operator==="equals";return{colId:a.colId,field:a.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:(a,e,t,o)=>{let r=e.resolveColumn(a,t)??void 0;if(r){let d=e.stripColumnTokens(a,r),c=Zo(r,d,e);return c?{column:r,operator:c.operator,coercedValue:c.value,coercedValueTo:c.valueTo}:{column:r}}if(a.length===0||e.resolveAllRequested(a)&&a.length<=2)return{allColumns:!0};let{negated:n,remaining:i}=e.resolveNegation(a),s=e.resolveColumnByValue(i,t,o);if(!s)return{};let l=Jo(s.column,s.rawValue,n);return{column:s.column,operator:l.operator,coercedValue:l.value,coercedValueTo:l.valueTo}},validate:a=>a.allColumns?null:a.column?a.column.filterable===!1?`"${a.column.header}" isn't filterable.`:a.coercedValue===void 0?`What value should I filter "${a.column.header}" by?`:null:"I couldn't find a column or a matching value for that in the grid.",buildCommand:a=>{if(a.allColumns||!a.column)return{type:"clearFilters",params:{}};let e=a.column;return{type:"applyFilter",params:{colId:e.colId,header:e.header,operator:a.operator,value:a.coercedValue,valueTo:a.coercedValueTo}}},execute:(a,e)=>{let t=a.params.colId,o=e.getColumn(t);if(!o)return`"${a.params.header}" is no longer a valid column.`;let r={operator:a.params.operator,value:a.params.value,valueTo:a.params.valueTo};e.setColumnFilter(t,Qo(o,r));let n=r.operator==="blank"||r.operator==="notBlank"?"":r.valueTo!==void 0?` between "${Se(r.value)}" and "${Se(r.valueTo)}"`:` to "${Se(r.value)}"`;return`Filtered "${a.params.header}"${n}.`}};function Se(a){return a instanceof Date?a.toLocaleDateString():String(a)}var $s={key:"clearFilters",aliases:[["clear","filter"],["remove","filter"],["clear","all","filter"]],description:"Clears all active filters.",resolveEntities:()=>({}),buildCommand:()=>({type:"clearFilters",params:{}}),execute:(a,e)=>(e.clearAllFilters(),"Cleared all filters.")};function zn(a){a.registerAll([Vs,$s])}function er(a,e,t){return{columns:e.resolveColumns(a,t)}}function tr(a){return a.columns?.length?null:"I couldn't find a column matching your request."}function or(a,e,t,o){for(let n of a)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:er,validate:tr,buildCommand:a=>({type:"pinLeft",params:{colIds:a.columns.map(e=>e.colId),header:a.columns.map(e=>e.header).join('", "')}}),execute:(a,e)=>or(a.params.colIds,`"${a.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:er,validate:tr,buildCommand:a=>({type:"pinRight",params:{colIds:a.columns.map(e=>e.colId),header:a.columns.map(e=>e.header).join('", "')}}),execute:(a,e)=>or(a.params.colIds,`"${a.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:er,validate:tr,buildCommand:a=>({type:"unpin",params:{colIds:a.columns.map(e=>e.colId),header:a.columns.map(e=>e.header).join('", "')}}),execute:(a,e)=>or(a.params.colIds,`"${a.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:(a,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:(a,e)=>{let t=new Set(a.map(r=>r.toLowerCase())),o=[];return t.has("left")&&o.push("left"),t.has("right")&&o.push("right"),{sides:o}},validate:a=>a.sides?.length?null:"Which side should I pin the columns to \u2014 left, right, or both?",buildCommand:a=>({type:"pinHalf",params:{sides:a.sides}}),execute:(a,e)=>{let t=a.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 Wn(a){a.registerAll([Xs,Ys,Us,qs,js])}function Ks(a,e,t){return{column:e.resolveColumn(a,t)??void 0}}function Vn(a){return a.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:Vn,buildCommand:a=>({type:"hideColumn",params:{colId:a.column.colId,header:a.column.header}}),execute:(a,e)=>(e.setColumnVisible(a.params.colId,!1),`Hid "${a.params.header}".`)},Js={key:"showColumn",aliases:[["show","column"],["unhide","column"],["unhide"]],description:"Shows a previously hidden column.",resolveEntities:(a,e,t)=>({column:e.resolveColumn(a,t)??void 0}),validate:Vn,buildCommand:a=>({type:"showColumn",params:{colId:a.column.colId,header:a.column.header}}),execute:(a,e)=>(e.setColumnVisible(a.params.colId,!0),`Showed "${a.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:(a,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:(a,e)=>{let t=e.getAllColumns();for(let o of t)e.setColumnVisible(o.colId,!0);return`Showed all ${t.length} columns.`}};function $n(a){a.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:(a,e,t)=>({columns:e.resolveColumns(a,t)}),validate:a=>a.columns?.length?a.columns.filter(t=>t.groupable!==!1).length===0?`"${a.columns.map(t=>t.header).join('", "')}" can't be grouped.`:null:"I couldn't find a column matching your request.",buildCommand:a=>{let e=a.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:(a,e)=>{for(let r of a.params.colIds)e.groupByColumn(r);let t=a.params.skippedHeader,o=`Grouped by "${a.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:(a,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:(a,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:(a,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:(a,e)=>({index:e.resolveIndex(a)??void 0}),validate:a=>a.index!=null?null:'Tell me which row number to expand, e.g. "expand row 2".',buildCommand:a=>({type:"expandRow",params:{index:a.index}}),execute:(a,e)=>{let t=a.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:(a,e)=>({index:e.resolveIndex(a)??void 0}),validate:a=>a.index!=null?null:'Tell me which row number to collapse, e.g. "collapse row 2".',buildCommand:a=>({type:"collapseRow",params:{index:a.index}}),execute:(a,e)=>{let t=a.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 Un(a){a.registerAll([tl,ol,rl,nl,il,sl])}function rr(a){let e=a.getVisibleColumns(),t=a.getVisibleRows();return e.length===0||t.length===0?!1:(a.setCellRange({startRowIndex:0,endRowIndex:t.length-1,startColIndex:0,endColIndex:e.length-1}),!0)}var ll=new Set(["first","top","earliest"]),al=new Set(["last","bottom","latest"]),dl={key:"selectRow",aliases:[["select","row"]],description:'Selects a single row by its (1-based) position \u2014 e.g. "select row 5".',resolveEntities:(a,e)=>({index:e.resolveIndex(a)??void 0}),validate:a=>a.index!=null?null:'Tell me which row number to select, e.g. "select row 5".',buildCommand:a=>({type:"selectRow",params:{index:a.index}}),execute:(a,e)=>{let t=a.params.index,o=e.getRowByIndex(t-1);return o?(e.selectRow(o.nodeId),e.scrollToRow(t-1),`Selected row ${t}.`):`There's no row ${t}.`}},cl={key:"selectAllRows",aliases:[["select","all","row"],["highlight","all","row"],["select","all","record"]],description:'Selects every row in the grid \u2014 e.g. "select all rows".',resolveEntities:()=>({}),buildCommand:()=>({type:"selectAllRows",params:{}}),execute:(a,e)=>{e.selectAll();let t=e.getSelectedCount();return t>0?`Selected all ${t} rows.`:"There are no rows to select."}},pl={key:"selectRowRange",aliases:[["select","first","row"],["select","top","row"],["select","last","row"],["select","bottom","row"],["select","row","between"],["select","row","through"],["highlight","first","row"],["highlight","last","row"]],description:'Selects a block of rows by position \u2014 e.g. "select the first 10 rows", "select last 5 rows", "select rows between 3 and 7".',resolveEntities:a=>{let e=a.map(o=>o.toLowerCase()),t=a.filter(o=>/^\d+$/.test(o)).map(o=>parseInt(o,10));return e.some(o=>ll.has(o))?{value:"first",index:t[0]}:e.some(o=>al.has(o))?{value:"last",index:t[0]}:t.length>=2?{value:"range",index:t[0],coercedValue:t[1]}:{}},validate:a=>a.value?a.index==null?'How many rows? e.g. "select the first 10 rows".':null:'Tell me a row range, e.g. "select rows between 3 and 7" or "select the first 10 rows".',buildCommand:a=>({type:"selectRowRange",params:{mode:a.value,from:a.index,to:a.coercedValue??null}}),execute:(a,e)=>{let t=e.getDisplayedRowCount();if(t===0)return"There are no rows to select.";let o=a.params.mode,r=0,n=0;if(o==="first")r=0,n=Math.min(a.params.from,t)-1;else if(o==="last")r=Math.max(0,t-a.params.from),n=t-1;else{let i=a.params.from,s=a.params.to;r=Math.min(i,s)-1,n=Math.max(i,s)-1}return r=Math.max(0,r),n=Math.min(t-1,n),n<r?"That row range is empty.":(e.selectRowRange(r,n),e.scrollToRow(r),`Selected ${n-r+1} rows.`)}},hl={key:"selectRowsWhere",aliases:[["select","row","where"],["select","row","match"],["select","row","matching"],["select","matching","row"],["highlight","row","where"],["select","row","over"],["select","row","above"],["select","row","under"],["select","row","below"],["select","row","than"],["select","row","contain"],["select","row","equal"]],description:'Selects (highlights) every row matching a column condition, without hiding the rest \u2014 e.g. "select all rows where status is active", "highlight rows where salary is over 50000".',resolveEntities:(a,e,t,o)=>{let r=e.resolveColumn(a,t)??void 0;if(r){let d=e.stripColumnTokens(a,r),c=Zo(r,d,e);return c?{column:r,operator:c.operator,coercedValue:c.value,coercedValueTo:c.valueTo}:{column:r}}let{negated:n,remaining:i}=e.resolveNegation(a),s=e.resolveColumnByValue(i,t,o);if(!s)return{};let l=Jo(s.column,s.rawValue,n);return{column:s.column,operator:l.operator,coercedValue:l.value,coercedValueTo:l.valueTo}},validate:a=>{if(!a.column)return"I couldn't find a column or a matching value for that in the grid.";let e=a.operator==="blank"||a.operator==="notBlank";return a.coercedValue===void 0&&!e?`What value should I match "${a.column.header}" by?`:null},buildCommand:a=>({type:"selectRowsWhere",params:{colId:a.column.colId,header:a.column.header,operator:a.operator,value:a.coercedValue,valueTo:a.coercedValueTo}}),execute:(a,e)=>{let t=a.params.colId,o=e.getColumn(t);if(!o)return`"${a.params.header}" is no longer a valid column.`;let r={operator:a.params.operator,value:a.params.value,valueTo:a.params.valueTo},n=e.selectRowsMatchingFilter(t,Qo(o,r));if(n===0)return"No rows match that \u2014 nothing selected.";let i=e.getSelectedRowIds()[0];i&&e.ensureNodeVisible(i);let l=r.operator==="blank"||r.operator==="notBlank"?"":r.valueTo!==void 0?` between "${Se(r.value)}" and "${Se(r.valueTo)}"`:` = "${Se(r.value)}"`;return`Selected ${n} row${n===1?"":"s"} where "${a.params.header}"${l}.`}},ul={key:"selectColumn",aliases:[["select","column"]],description:"Selects every cell in a column.",resolveEntities:(a,e,t)=>({column:e.resolveColumn(a,t)??void 0}),validate:a=>a.column?null:"I couldn't find a column matching your request.",buildCommand:a=>({type:"selectColumn",params:{colId:a.column.colId,header:a.column.header}}),execute:(a,e)=>{let t=a.params.colId,r=e.getVisibleColumns().findIndex(i=>i.colId===t),n=e.getVisibleRows().length;return r<0||n===0?`"${a.params.header}" isn't visible right now.`:(e.setCellRange({startRowIndex:0,endRowIndex:n-1,startColIndex:r,endColIndex:r}),`Selected the "${a.params.header}" column.`)}},gl={key:"clearSelection",aliases:[["clear","selection"],["clear","select"],["deselect"]],description:"Clears row and cell selection.",resolveEntities:()=>({}),buildCommand:()=>({type:"clearSelection",params:{}}),execute:(a,e)=>(e.deselectAll(),e.clearCellSelection(),"Cleared selection.")},ml={key:"selectAllCells",aliases:[["select","all","cell"],["select","every","cell"]],description:"Selects every cell in the grid.",resolveEntities:()=>({}),buildCommand:()=>({type:"selectAllCells",params:{}}),execute:(a,e)=>rr(e)?"Selected all cells.":"There are no cells to select."},fl={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:(a,e)=>rr(e)?(e.copySelectedCellsToClipboard(),"Copied all cells to the clipboard."):"There are no cells to copy."},vl={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:(a,e)=>rr(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 qn(a){a.registerAll([dl,cl,pl,hl,ul,ml,fl,vl,gl])}function jn(a,e,t){return{column:e.resolveColumn(a,t)??void 0}}function Xn(a){return a.column?null:"I couldn't find a column matching your request."}function Yn(a,e){return a.getVisibleColumns().findIndex(t=>t.colId===e)}var bl={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:jn,validate:Xn,buildCommand:a=>({type:"moveColumnToStart",params:{colId:a.column.colId,header:a.column.header}}),execute:(a,e)=>{let t=a.params.colId,o=Yn(e,t);return o<=0?`"${a.params.header}" is already at the start.`:(e.moveColumn(o,0),`Moved "${a.params.header}" to the start.`)}},yl={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:jn,validate:Xn,buildCommand:a=>({type:"moveColumnToEnd",params:{colId:a.column.colId,header:a.column.header}}),execute:(a,e)=>{let t=a.params.colId,o=Yn(e,t),r=e.getVisibleColumns().length-1;return o<0||o===r?`"${a.params.header}" is already at the end.`:(e.moveColumn(o,r),`Moved "${a.params.header}" to the end.`)}};function Kn(a){a.registerAll([bl,yl])}function nr(a,e){return a.getColumn(e)?.header??e}var Cl={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:(a,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.`}},xl={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:(a,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.`}},wl={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:(a,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(", ")}.`}},El={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:(a,e)=>{let t=e.getFilterModel(),o=Object.values(t);return o.length===0?"No filters are active.":`Active filters: ${o.map(n=>{let i=nr(e,n.colId);if(n.selectedIds?.length)return`${i} (${n.selectedIds.join(", ")})`;let[s]=n.conditions;return`${i} ${s.operator} ${String(s.value)}`}).join("; ")}.`}},Rl={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:(a,e)=>{let t=e.getSortConfig();return t.length===0?"No column is sorted.":`Sorted by: ${t.map(o=>`${nr(e,o.colId)} (${o.order})`).join(", ")}.`}},Sl={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:(a,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(" | ")}.`}},Il={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:(a,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(", ")}.`}},Tl={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:(a,e)=>{let t=e.getGridState().groupedColumns??[];return t.length===0?"Rows aren't grouped by anything.":`Grouped by: ${t.map(o=>nr(e,o)).join(" > ")}.`}};function Ml(a){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:
|
|
4389
|
+
${a.getAll().map(o=>o.description).filter(o=>!!o).map(o=>`\u2022 ${o}`).join(`
|
|
4390
|
+
`)}`};a.register(e)}function Zn(a){a.registerAll([Cl,xl,wl,El,Rl,Sl,Il,Tl]),Ml(a)}function It(a){Bn(a),zn(a),Wn(a),$n(a),Un(a),qn(a),Kn(a),Zn(a)}var ue=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:kl(e)}))}};function kl(a){if(a.selectedIds?.length)return`in [${a.selectedIds.join(", ")}]`;let e=a.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 ge=class{constructor(e){this.api=e}normalize(e){let t={...e.params};return this.normalizeColumnTargets(t),(e.type==="applyFilter"||e.type==="selectRowsWhere")&&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=_l(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 _l(a){return a==="number"||a==="currency"||a==="percentage"||a==="date"||a==="time"||a==="boolean"||a==="dropdown"?"equals":"contains"}function Jn(a,e){if(a==null)return a;if(e==="date"||e==="time"){if(a instanceof Date)return a;let t=new Date(String(a));return Number.isNaN(t.getTime())?a:t}if(e==="number"||e==="currency"||e==="percentage"){if(typeof a=="number")return a;let t=Number(String(a).replace(/,/g,"").trim());return Number.isNaN(t)?a:t}if(e==="boolean"){if(typeof a=="boolean")return a;let t=String(a).trim().toLowerCase();return["true","yes","active","enabled","on","1"].includes(t)?!0:["false","no","inactive","disabled","off","0"].includes(t)?!1:a}return a}function ht(a){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 selectRowsWhere (highlights matching rows without hiding others): { "colId": "<colId>", "operator": <operator>, "value": <typed value>, "valueTo": <typed value, only for inRange> } \u2014 same operator/value rules as applyFilter.',' \u2022 pinHalf: { "sides": ["left"] | ["right"] | ["left", "right"] }',' \u2022 Row-index actions \u2014 selectRow, expandRow, collapseRow: { "index": <1-based row number> }',' \u2022 selectRowRange: { "mode": "first" | "last" | "range", "from": <count for first/last, OR the 1-based start for range>, "to": <1-based end, only for range> }'," \u2022 Every other action (clearSort, clearFilters, unpinAll, hideAllColumns, showAllColumns, ungroup,"," expandAllGroups, collapseAllGroups, clearSelection, selectAllRows, 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(`
|
|
4391
|
+
`),t=a?.trim();return t?`${e}
|
|
4309
4392
|
|
|
4310
4393
|
ADDITIONAL INSTRUCTIONS:
|
|
4311
|
-
${t}`:e}function
|
|
4312
|
-
`)}var
|
|
4394
|
+
${t}`:e}function xo(a){return["GRID CONTEXT:",`capabilities: ${JSON.stringify(a.capabilities)}`,`columns: ${JSON.stringify(a.columns)}`,`state: ${JSON.stringify(a.state)}`].join(`
|
|
4395
|
+
`)}var me=(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))(me||{}),P=class extends Error{constructor(t,o,r){super(o);this.kind=t;this.status=r;this.name="PhotonAIProviderError"}};function wo(a){return a instanceof P?a.message:a instanceof Error?`Photon AI request failed: ${a.message}`:"Photon AI request failed due to an unexpected error."}var Ll=new Set(["hi","hello","hey","hiya","howdy","yo","greetings"]),Al=new Set(["thanks","thank","thankyou","thx","ty"]),Dl=`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).`,Hl="You're welcome! Let me know if there's anything else you'd like to do with the grid.",Ie=class a{constructor(e,t,o,r){this.api=e;this.parser=new Ce;this.builder=new we;this.registry=t??a.createDefaultRegistry(),this.executor=new Ee(this.registry),this.memory=new Co(Nn(e.getAllColumns().map(n=>n.colId))),this.resolver=new xe(this.memory),this.provider=o??null,this.providerSystemInstruction=r,this.contextBuilder=this.provider?new ue(this.api,this.registry):null,this.commandNormalizer=this.provider?new ge(this.api):null}static createDefaultRegistry(){let e=new Re;return It(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=Hn(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:ht(this.providerSystemInstruction),gridContext:r,userCommand:o,signal:t});return this.executeGeneratedActions(n.actions,n.reply)}catch(r){return{success:!1,message:wo(r)}}}executeGeneratedActions(e,t){let o=this.commandNormalizer,r=[],n=[],i;for(let d of e){let c=o.normalize(d),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=St(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=Rt(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 d=this.executor.execute(s,this.api);return d.success&&this.memory.learnPhrase(t,[s]),d}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=>Ll.has(o))?{success:!0,message:Dl}:t.length>0&&t.every(o=>Al.has(o))?{success:!0,message:Hl}:{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(pt(o[0]));return e}};var ir=(r=>(r.Gemini="gemini",r.OpenAI="openai",r.Anthropic="anthropic",r.Custom="custom",r))(ir||{});function Eo(a){return`${xo(a.gridContext)}
|
|
4313
4396
|
|
|
4314
4397
|
USER COMMAND:
|
|
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=`
|
|
4398
|
+
${a.userCommand}`}function Tt(a){let e=a.trim();if(!e)throw new P("invalid-response","The model returned an empty response.");let t;try{t=JSON.parse(e)}catch{if(t=Gl(e),t===void 0)throw new P("invalid-response","The model returned malformed JSON that could not be parsed.")}return sr(t)}function sr(a){if(typeof a!="object"||a===null)throw new P("invalid-response","The model response was not a JSON object.");let e=a,t=Pl(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 Pl(a){if(!Array.isArray(a))return[];let e=[];for(let t of a){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 Gl(a){let e=a.indexOf("{"),t=a.lastIndexOf("}");if(!(e<0||t<=e))try{return JSON.parse(a.slice(e,t+1))}catch{return}}function Nl(a,e,t){let o=a.replace("{model}",encodeURIComponent(e));if(!t)return o;let r=o.includes("?")?"&":"?";return`${o}${r}key=${encodeURIComponent(t)}`}function Qn(a,e){let t=a;for(let o of e){if(t==null)return"";t=t[o]}return typeof t=="string"?t:""}var Ol={defaultApiUrl:"https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent",defaultModel:"gemini-2.5-flash",buildUrl:Nl,buildHeaders:()=>({}),transformRequest:a=>({systemInstruction:{parts:[{text:a.systemInstruction}]},contents:[{role:"user",parts:[{text:Eo(a)}]}],generationConfig:{responseMimeType:"application/json",temperature:a.temperature}}),transformResponse:a=>{let e=a;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 Tt(o)}},Fl={defaultApiUrl:"https://api.openai.com/v1/chat/completions",defaultModel:"gpt-4o-mini",buildUrl:a=>a,buildHeaders:a=>{let e={};return a&&(e.Authorization=`Bearer ${a}`),e},transformRequest:a=>({model:a.model,temperature:a.temperature,response_format:{type:"json_object"},messages:[{role:"system",content:a.systemInstruction},{role:"user",content:Eo(a)}]}),transformResponse:a=>Tt(Qn(a,["choices",0,"message","content"]))},Bl={defaultApiUrl:"https://api.anthropic.com/v1/messages",defaultModel:"claude-haiku-4-5-20251001",buildUrl:a=>a,buildHeaders:a=>{let e={"anthropic-version":"2023-06-01","anthropic-dangerous-direct-browser-access":"true"};return a&&(e["x-api-key"]=a),e},transformRequest:a=>({model:a.model,max_tokens:1024,temperature:a.temperature,system:a.systemInstruction,messages:[{role:"user",content:Eo(a)}]}),transformResponse:a=>Tt(Qn(a,["content",0,"text"]))},zl={gemini:Ol,openai:Fl,anthropic:Bl,custom:null};function ei(a){return zl[a]??null}var Wl=3e4,fe=class{constructor(e){if(this.type=e.type??"gemini",this.preset=ei(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??Wl,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 d=l instanceof Error?l.message:String(l);throw new P("network",`Couldn't reach the model provider: ${d}`)}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 Mt(a){if(!a)return null;if((a.type??"gemini")==="custom"){if(!a.apiUrl||!a.requestTransformer||!a.responseTransformer)return null}else if(!a.apiKey?.trim()&&!a.headers)return null;return new fe(a)}function ti(a){let e=[];for(let t of a)Array.isArray(t.children)&&t.children.length>0?e.push(...ti(t.children)):e.push(t);return e}var ut=class a{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 dt(this.ctx),this.initialize()}buildContext(e,t){let o=new ke,r=new _e(o),n=new Le(r,o),i=new Ae(r,o),s=new De(r,o),l=new He(r,o),d=new Pe(r,o),c=new Ne,p=new Ge(r,o,c),h=new Oe(r,o),u=new Fe(r,o),g=new Be,m=new ze(o),f=new We,C=new Ue(o),b=new ct,v=new qe(r,o,f,b),w=new co(r,o,i),E=new ho(r,o),R=new po(r,o,l,s,E),S=new uo(h,R),I=new Xe(o),T=new Ye,M=new Ke(T),A=new Ze(o),L=new lt(e,r,o,n,d,M,v,s,h,p,t),$=t.columns?Wr(t.columns):[];if(this.normalizedColumns=$,$.some(F=>Array.isArray(F.children)&&F.children.length>0)){let F=new bo(L.colStyles,o,n,r,M);F.parse($),this.displayGroupEngine=F,L.setDisplayGroupEngine(F)}return L.setMasterDetailConfig(w,(F,Q)=>new a(F,Q),M,I),w.setRefreshCallback(()=>{let F=r.get("visibleRows");F.length>0&&L.captureRowAnimation(F,"detail"),this.api.refresh()}),R.setRefreshCallback(()=>this.api.refresh()),L.setTreeDragConfig(!!t.treeData?.enabled&&(t.treeData.mode==="parentId"||t.treeData.mode==="childrenField"),(F,Q,ie)=>R.moveNode(F,Q,ie)),t.treeData?.enabled&&L.setTreeRenderConfig(t.treeData.toggleColumnId,E),{options:t,containerEl:e,eventBus:o,store:r,columnModel:n,rowModel:i,sortEngine:s,filterEngine:l,paginationEngine:d,groupingEngine:p,aggregationEngine:c,rowSelectionEngine:h,cellEditorEngine:u,summaryEngine:g,exportEngine:m,clipboardEngine:f,dragDropEngine:C,cellSelectionEngine:v,themeManager:I,iconRegistry:T,chartEngine:A,undoRedoEngine:b,masterDetailEngine:w,treeDataService:R,treeExpansionService:E,treeSelectionService:S,renderer:L}}initialize(){kt();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),t.cellSelectionEngine.setSerialColumnSelection(!!e.selection.serialColumnSelection&&e.selection.mode!=="none")),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(ti(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=Mt(e.photonAI.provider);this.photonAIService=new Ie(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 Vt(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 d=n.findIndex(c=>c.nodeId===t.parent.nodeId);if(d!==-1)return e.cellSelectionEngine.startSelection(d,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(d=>d.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(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(u,"option");n=new At(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 d=e.options.editing?.singleClickEdit?x.CELL_CLICKED:x.CELL_DOUBLE_CLICKED;e.eventBus.on(d,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=U(o,"display");if(n){let l=this.ctx.columnModel.getVisibleColumns().findIndex(p=>p.colId===o.colId),d={value:r,rawValue:r,row:t.data,colDef:o,rowIndex:t.rowIndex,colIndex:l,api:this.api},c=n(d);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(d=>String(d.value)===String(s??""));if(l?.color){let d=document.createElement("div");d.className="pg-badge",d.style.backgroundColor=l.color+"20",d.style.color=l.color,d.textContent=l.label,i.appendChild(d)}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 d of l){let c=o.dropdownOptions?.find(h=>String(h.value)===d),p=document.createElement("div");p.className="pg-badge",p.textContent=c?.label??d,c?.color&&(p.style.backgroundColor=c.color+"20",p.style.color=c.color),i.appendChild(p)}if(s.length>l.length){let d=document.createElement("div");d.className="pg-badge pg-badge--overflow",d.textContent=`+${s.length-l.length}`,i.appendChild(d)}break}default:{let s=ee(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 lr(a,e){let t=Vl(a);return new ut(t,e)}function oi(a,e){return lr(a,e)}function Vl(a){if(typeof a=="string"){let e=document.querySelector(a);if(!e)throw new Error(`[PhotonGrid] createGrid: no element matches selector "${a}".`);return e}if(!a)throw new Error("[PhotonGrid] createGrid: a container element or selector is required.");return a}var $l=0,Ro=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 d=i?i.children:this.rootNodes,c=o!==null?d.findIndex(p=>this.nodeId(p)===o):-1;c!==-1?d.splice(c,0,r):d.push(r),this.parentMap.set(e,i),this.eventBus.emit(x.COLUMN_MOVED,{colDef:r.colDef,fromIndex:l,toIndex:c>=0?c:d.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 d=n?n.children:this.rootNodes,c=o!==null?d.findIndex(p=>this.nodeId(p)===o):-1;c!==-1?d.splice(c,0,r):d.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((d,c)=>d+o.getWidth(c.colId),0);for(let d of i){let c=o.getWidth(d.colId),p=l>0?c/l:1/i.length,h=Math.max(d.minWidth??40,c-t*p);r.set(d.colId,h)}}else if(s==="equal"){let l=t/i.length;for(let d of i){let c=Math.max(d.minWidth??40,o.getWidth(d.colId)-l);r.set(d.colId,c)}}else if(s==="firstFixed"){let l=i[i.length-1],d=Math.max(l.minWidth??40,o.getWidth(l.colId)-t);r.set(l.colId,d)}else{let l=i[0],d=Math.max(l.minWidth??40,o.getWidth(l.colId)-t);r.set(l.colId,d)}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(d=>this.nodeId(d)===e);n!==-1&&r.splice(n,1);let i=`grp_solo_${e}_${++$l}`,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(d=>this.nodeId(d)===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,d=o!==null?l.findIndex(c=>this.nodeId(c)===o):-1;d!==-1?l.splice(d,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 So=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,d=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-d;if(!(c<=0)&&n<o.length){let p={type:"group",id:l.groupId,label:l.header,left:d,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 d=Math.max(t.collapsedWidth,o+(l.clientX-n));r.onGroupResize?.(t.groupId,d)},s=l=>{let d=Math.max(t.collapsedWidth,o+(l.clientX-n));r.onGroupResize?.(t.groupId,d),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 Io=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=`
|
|
4316
4399
|
position: absolute;
|
|
4317
4400
|
top: 0;
|
|
4318
4401
|
left: 0;
|
|
4319
4402
|
pointer-events: none;
|
|
4320
4403
|
z-index: 10;
|
|
4321
4404
|
border-radius: 0;
|
|
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,
|
|
4405
|
+
`,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,d=r.borderWidth??1.5;for(let c of e)this.renderRange(c,o,n,i,d),this.renderCorner(c,o,s,l);if(t){let c=o(t.rowIndex,t.colIndex);c&&this.renderActiveCell(c,i,d)}}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=te(e),s=t(i.startRowIndex,i.startColIndex),l=t(i.endRowIndex,i.endColIndex);if(!s||!l)return;let d=this.canvas.getBoundingClientRect(),c=s.left-d.left,p=s.top-d.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=te(e),i=t(n.endRowIndex,n.endColIndex);if(!i)return;let s=this.canvas.getBoundingClientRect(),l=i.right-s.left,d=i.bottom-s.top;this.ctx.save(),this.ctx.fillStyle=o,this.ctx.fillRect(l-r,d-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 Ul=5,To=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:Ul,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 d=this.options.estimatedRowHeight,c=Math.max(0,Math.floor(t/d)-r),p=Math.min(e.length,Math.ceil((t+o)/d)+r);return{start:c,end:p}}let n=0,i=e.length,s=0,l=!1;for(let d=0;d<e.length;d++){let c=this.getRowHeight(e[d]);if(!l&&s+c>t&&(n=Math.max(0,d-r),l=!0),s>t+o){i=Math.min(e.length,d+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 ar=(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))(ar||{});return ci(ql);})();
|