@freegridjs/core 0.7.0 → 0.8.0
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/LICENSE +0 -7
- package/dist/cdn/freegrid.css +54 -1
- package/dist/cdn/freegrid.esm.js +8 -8
- package/dist/cdn/freegrid.min.js +8 -8
- package/dist/index.d.ts +14 -7
- package/dist/index.js +1393 -279
- package/dist/locales/de.d.ts +1 -1
- package/dist/locales/de.js +2 -0
- package/dist/locales/en.d.ts +1 -1
- package/dist/locales/en.js +2 -0
- package/dist/locales/es.d.ts +1 -1
- package/dist/locales/es.js +2 -0
- package/dist/locales/fr.d.ts +1 -1
- package/dist/locales/fr.js +2 -0
- package/dist/locales/ja.d.ts +1 -1
- package/dist/locales/ja.js +2 -0
- package/dist/locales/ko.d.ts +1 -1
- package/dist/locales/ko.js +2 -0
- package/dist/locales/zh-CN.d.ts +1 -1
- package/dist/locales/zh-CN.js +2 -0
- package/dist/styles.css +54 -1
- package/dist/{types-DZ66BpLd.d.ts → types-e45suTSB.d.ts} +152 -6
- package/package.json +1 -1
package/dist/cdn/freegrid.esm.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
var Ln={code:"en",noRows:"No rows to show",filter:"Filter",apply:"Apply",reset:"Reset",selectAll:"(Select all)",search:"Search\u2026",blanks:"(Blanks)",value:"Value",valueTo:"To",sortAsc:"Sort ascending",sortDesc:"Sort descending",clearSort:"Clear sort",pinLeft:"Pin left",pinRight:"Pin right",unpin:"Unpin",columnMenu:"Column menu",selectRow:"Select row",selectAllRows:"Select all rows",chooseColumns:"Choose columns",columns:"Columns",autosizeThis:"Autosize this column",autosizeAll:"Autosize all columns",resetColumns:"Reset columns",hideColumn:"Hide column",close:"Close",copy:"Copy",copyWithHeaders:"Copy with headers",paste:"Paste",pasteHint:"Clipboard access was blocked. Press Ctrl+V to paste.",required:"This field is required",invalidValue:"Invalid value",undo:"Undo",redo:"Redo",deleteRows:"Delete selected rows",copyRows:"Copy selected rows",statusRows:"{n} rows",statusFiltered:"{shown} of {total} rows",statusSelected:"{n} selected",count:"Count",sum:"Sum",avg:"Average",min:"Min",max:"Max",findPlaceholder:"Find in grid",noMatches:"No matches",findNext:"Next match",findPrevious:"Previous match",groupPanelHint:"Drag a column header here to group rows",groupByThis:"Group by this column",ungroup:"Remove grouping",expandAll:"Expand all",collapseAll:"Collapse all",pagerRange:"{from}\u2013{to} of {total}",pageOf:"Page {page} of {pages}",pageSize:"Rows per page",firstPage:"First page",previousPage:"Previous page",nextPage:"Next page",lastPage:"Last page",loading:"Loading\u2026",loadFailed:"Could not load rows",filters:"Filters",clearFilters:"Clear all filters",exportCsv:"Export CSV",exportExcel:"Export Excel",pivot:"Pivot",pivotMode:"Pivot mode",pivotRows:"Row groups",pivotColumns:"Column labels",pivotValues:"Values",total:"Total",addColumn:"Add a column\u2026",chartBar:"Bar chart",chartStacked:"Stacked bar chart",chartLine:"Line chart",chartArea:"Area chart",chartPie:"Pie chart",ops:{contains:"Contains",equals:"Equals",notEquals:"Does not equal",startsWith:"Starts with",endsWith:"Ends with",blank:"Blank",notBlank:"Not blank",eq:"Equals",ne:"Does not equal",lt:"Less than",lte:"Less than or equal",gt:"Greater than",gte:"Greater than or equal",between:"Between",before:"Before",after:"After"}},j=Ln;var Ct=new Set;function P(s){Ct.has(s)||(Ct.add(s),console.warn(`[FreeGrid] ${s}`))}var te=new Map([["en",j]]);function _e(s){te.set(s.code,s)}function Rt(s){let e=s.toLowerCase();for(let n of te.keys())if(n.toLowerCase()===e)return n;let t=e.split("-")[0];if(t==="zh"&&te.has("zh-CN"))return"zh-CN";for(let n of te.keys())if(n.toLowerCase().split("-")[0]===t)return n}function In(){return typeof navigator>"u"?[]:navigator.languages?.length?navigator.languages:navigator.language?[navigator.language]:[]}function Dn(s){return{...j,...s,code:s.code??"en",ops:{...j.ops,...s.ops??{}}}}function me(s,e=In()){if(s&&typeof s=="object")return Dn(s);if(typeof s=="string"){let t=Rt(s);return t?te.get(t):(P(`locale "${s}" is not registered \u2014 import it from "@freegridjs/core/locales/${s}" and pass the pack (or call registerLocale). Falling back to "en".`),j)}for(let t of e){let n=Rt(t);if(n)return te.get(n)}return j}var Tn={code:"de",noRows:"Keine Zeilen vorhanden",filter:"Filter",apply:"Anwenden",reset:"Zur\xFCcksetzen",selectAll:"(Alle ausw\xE4hlen)",search:"Suchen\u2026",blanks:"(Leer)",value:"Wert",valueTo:"Bis",sortAsc:"Aufsteigend sortieren",sortDesc:"Absteigend sortieren",clearSort:"Sortierung aufheben",pinLeft:"Links fixieren",pinRight:"Rechts fixieren",unpin:"Fixierung l\xF6sen",columnMenu:"Spaltenmen\xFC",selectRow:"Zeile ausw\xE4hlen",selectAllRows:"Alle Zeilen ausw\xE4hlen",chooseColumns:"Spalten ausw\xE4hlen",columns:"Spalten",autosizeThis:"Diese Spalte automatisch anpassen",autosizeAll:"Alle Spalten automatisch anpassen",resetColumns:"Spalten zur\xFCcksetzen",hideColumn:"Spalte ausblenden",close:"Schlie\xDFen",copy:"Kopieren",copyWithHeaders:"Mit \xDCberschriften kopieren",paste:"Einf\xFCgen",pasteHint:"Der Browser hat die Zwischenablage blockiert. Dr\xFCcken Sie Ctrl+V zum Einf\xFCgen.",required:"Dieses Feld ist erforderlich",invalidValue:"Ung\xFCltiger Wert",undo:"R\xFCckg\xE4ngig",redo:"Wiederholen",deleteRows:"Ausgew\xE4hlte Zeilen l\xF6schen",copyRows:"Ausgew\xE4hlte Zeilen kopieren",statusRows:"{n} Zeilen",statusFiltered:"{shown} von {total} Zeilen",statusSelected:"{n} ausgew\xE4hlt",count:"Anzahl",sum:"Summe",avg:"Mittelwert",min:"Min",max:"Max",findPlaceholder:"Im Raster suchen",noMatches:"Keine Treffer",findNext:"N\xE4chster Treffer",findPrevious:"Vorheriger Treffer",groupPanelHint:"Spalten\xFCberschrift hierher ziehen, um zu gruppieren",groupByThis:"Nach dieser Spalte gruppieren",ungroup:"Gruppierung aufheben",expandAll:"Alle aufklappen",collapseAll:"Alle zuklappen",pagerRange:"{from}\u2013{to} von {total}",pageOf:"Seite {page} von {pages}",pageSize:"Zeilen pro Seite",firstPage:"Erste Seite",previousPage:"Vorherige Seite",nextPage:"N\xE4chste Seite",lastPage:"Letzte Seite",loading:"Wird geladen\u2026",loadFailed:"Zeilen konnten nicht geladen werden",filters:"Filter",clearFilters:"Alle Filter entfernen",exportCsv:"Als CSV exportieren",exportExcel:"Nach Excel exportieren",pivot:"Pivot",pivotMode:"Pivot-Modus",pivotRows:"Zeilengruppen",pivotColumns:"Spaltenbeschriftungen",pivotValues:"Werte",total:"Gesamt",addColumn:"Spalte hinzuf\xFCgen\u2026",chartBar:"Balkendiagramm",chartStacked:"Gestapelte Balken",chartLine:"Liniendiagramm",chartArea:"Fl\xE4chendiagramm",chartPie:"Kreisdiagramm",ops:{contains:"Enth\xE4lt",equals:"Gleich",notEquals:"Ungleich",startsWith:"Beginnt mit",endsWith:"Endet mit",blank:"Leer",notBlank:"Nicht leer",eq:"Gleich",ne:"Ungleich",lt:"Kleiner als",lte:"Kleiner oder gleich",gt:"Gr\xF6\xDFer als",gte:"Gr\xF6\xDFer oder gleich",between:"Zwischen",before:"Vor",after:"Nach"}},kt=Tn;var Pn={code:"es",noRows:"No hay filas para mostrar",filter:"Filtro",apply:"Aplicar",reset:"Restablecer",selectAll:"(Seleccionar todo)",search:"Buscar\u2026",blanks:"(Vac\xEDos)",value:"Valor",valueTo:"Hasta",sortAsc:"Orden ascendente",sortDesc:"Orden descendente",clearSort:"Quitar orden",pinLeft:"Fijar a la izquierda",pinRight:"Fijar a la derecha",unpin:"Desfijar",columnMenu:"Men\xFA de columna",selectRow:"Seleccionar fila",selectAllRows:"Seleccionar todas las filas",chooseColumns:"Elegir columnas",columns:"Columnas",autosizeThis:"Ajustar esta columna",autosizeAll:"Ajustar todas las columnas",resetColumns:"Restablecer columnas",hideColumn:"Ocultar columna",close:"Cerrar",copy:"Copiar",copyWithHeaders:"Copiar con encabezados",paste:"Pegar",pasteHint:"El navegador bloque\xF3 el portapapeles. Pulsa Ctrl+V para pegar.",required:"Este campo es obligatorio",invalidValue:"Valor no v\xE1lido",undo:"Deshacer",redo:"Rehacer",deleteRows:"Eliminar filas seleccionadas",copyRows:"Copiar filas seleccionadas",statusRows:"{n} filas",statusFiltered:"{shown} de {total} filas",statusSelected:"{n} seleccionadas",count:"Recuento",sum:"Suma",avg:"Promedio",min:"M\xEDn.",max:"M\xE1x.",findPlaceholder:"Buscar en la tabla",noMatches:"Sin coincidencias",findNext:"Siguiente",findPrevious:"Anterior",groupPanelHint:"Arrastre aqu\xED un encabezado de columna para agrupar",groupByThis:"Agrupar por esta columna",ungroup:"Quitar agrupaci\xF3n",expandAll:"Expandir todo",collapseAll:"Contraer todo",pagerRange:"{from}\u2013{to} de {total}",pageOf:"P\xE1gina {page} de {pages}",pageSize:"Filas por p\xE1gina",firstPage:"Primera p\xE1gina",previousPage:"P\xE1gina anterior",nextPage:"P\xE1gina siguiente",lastPage:"\xDAltima p\xE1gina",loading:"Cargando\u2026",loadFailed:"No se pudieron cargar las filas",filters:"Filtros",clearFilters:"Quitar todos los filtros",exportCsv:"Exportar CSV",exportExcel:"Exportar a Excel",pivot:"Tabla din\xE1mica",pivotMode:"Modo tabla din\xE1mica",pivotRows:"Grupos de filas",pivotColumns:"Etiquetas de columna",pivotValues:"Valores",total:"Total",addColumn:"A\xF1adir columna\u2026",chartBar:"Gr\xE1fico de barras",chartStacked:"Barras apiladas",chartLine:"Gr\xE1fico de l\xEDneas",chartArea:"Gr\xE1fico de \xE1reas",chartPie:"Gr\xE1fico circular",ops:{contains:"Contiene",equals:"Igual a",notEquals:"Distinto de",startsWith:"Empieza por",endsWith:"Termina en",blank:"Vac\xEDo",notBlank:"No vac\xEDo",eq:"Igual a",ne:"Distinto de",lt:"Menor que",lte:"Menor o igual que",gt:"Mayor que",gte:"Mayor o igual que",between:"Entre",before:"Antes de",after:"Despu\xE9s de"}},Mt=Pn;var $n={code:"fr",noRows:"Aucune ligne \xE0 afficher",filter:"Filtre",apply:"Appliquer",reset:"R\xE9initialiser",selectAll:"(Tout s\xE9lectionner)",search:"Rechercher\u2026",blanks:"(Vides)",value:"Valeur",valueTo:"\xC0",sortAsc:"Tri croissant",sortDesc:"Tri d\xE9croissant",clearSort:"Annuler le tri",pinLeft:"\xC9pingler \xE0 gauche",pinRight:"\xC9pingler \xE0 droite",unpin:"D\xE9s\xE9pingler",columnMenu:"Menu de colonne",selectRow:"S\xE9lectionner la ligne",selectAllRows:"S\xE9lectionner toutes les lignes",chooseColumns:"Choisir les colonnes",columns:"Colonnes",autosizeThis:"Ajuster cette colonne",autosizeAll:"Ajuster toutes les colonnes",resetColumns:"R\xE9initialiser les colonnes",hideColumn:"Masquer la colonne",close:"Fermer",copy:"Copier",copyWithHeaders:"Copier avec les en-t\xEAtes",paste:"Coller",pasteHint:"Le navigateur a bloqu\xE9 le presse-papiers. Appuyez sur Ctrl+V pour coller.",required:"Ce champ est obligatoire",invalidValue:"Valeur non valide",undo:"Annuler",redo:"R\xE9tablir",deleteRows:"Supprimer les lignes s\xE9lectionn\xE9es",copyRows:"Copier les lignes s\xE9lectionn\xE9es",statusRows:"{n} lignes",statusFiltered:"{shown} sur {total} lignes",statusSelected:"{n} s\xE9lectionn\xE9es",count:"Nombre",sum:"Somme",avg:"Moyenne",min:"Min",max:"Max",findPlaceholder:"Rechercher dans la grille",noMatches:"Aucun r\xE9sultat",findNext:"Suivant",findPrevious:"Pr\xE9c\xE9dent",groupPanelHint:"Faites glisser un en-t\xEAte de colonne ici pour regrouper",groupByThis:"Regrouper par cette colonne",ungroup:"Supprimer le regroupement",expandAll:"Tout d\xE9velopper",collapseAll:"Tout r\xE9duire",pagerRange:"{from}\u2013{to} sur {total}",pageOf:"Page {page} sur {pages}",pageSize:"Lignes par page",firstPage:"Premi\xE8re page",previousPage:"Page pr\xE9c\xE9dente",nextPage:"Page suivante",lastPage:"Derni\xE8re page",loading:"Chargement\u2026",loadFailed:"Impossible de charger les lignes",filters:"Filtres",clearFilters:"Effacer tous les filtres",exportCsv:"Exporter en CSV",exportExcel:"Exporter vers Excel",pivot:"Tableau crois\xE9",pivotMode:"Mode tableau crois\xE9",pivotRows:"Groupes de lignes",pivotColumns:"\xC9tiquettes de colonnes",pivotValues:"Valeurs",total:"Total",addColumn:"Ajouter une colonne\u2026",chartBar:"Histogramme",chartStacked:"Histogramme empil\xE9",chartLine:"Courbes",chartArea:"Aires",chartPie:"Secteurs",ops:{contains:"Contient",equals:"\xC9gal \xE0",notEquals:"Diff\xE9rent de",startsWith:"Commence par",endsWith:"Se termine par",blank:"Vide",notBlank:"Non vide",eq:"\xC9gal \xE0",ne:"Diff\xE9rent de",lt:"Inf\xE9rieur \xE0",lte:"Inf\xE9rieur ou \xE9gal \xE0",gt:"Sup\xE9rieur \xE0",gte:"Sup\xE9rieur ou \xE9gal \xE0",between:"Entre",before:"Avant",after:"Apr\xE8s"}},St=$n;var An={code:"ja",noRows:"\u8868\u793A\u3059\u308B\u30C7\u30FC\u30BF\u304C\u3042\u308A\u307E\u305B\u3093",filter:"\u30D5\u30A3\u30EB\u30BF\u30FC",apply:"\u9069\u7528",reset:"\u30EA\u30BB\u30C3\u30C8",selectAll:"(\u3059\u3079\u3066\u9078\u629E)",search:"\u691C\u7D22\u2026",blanks:"(\u7A7A\u767D)",value:"\u5024",valueTo:"\u7D42\u4E86\u5024",sortAsc:"\u6607\u9806\u3067\u4E26\u3079\u66FF\u3048",sortDesc:"\u964D\u9806\u3067\u4E26\u3079\u66FF\u3048",clearSort:"\u4E26\u3079\u66FF\u3048\u3092\u89E3\u9664",pinLeft:"\u5DE6\u306B\u56FA\u5B9A",pinRight:"\u53F3\u306B\u56FA\u5B9A",unpin:"\u56FA\u5B9A\u3092\u89E3\u9664",columnMenu:"\u5217\u30E1\u30CB\u30E5\u30FC",selectRow:"\u884C\u3092\u9078\u629E",selectAllRows:"\u3059\u3079\u3066\u306E\u884C\u3092\u9078\u629E",chooseColumns:"\u5217\u3092\u9078\u629E",columns:"\u5217",autosizeThis:"\u3053\u306E\u5217\u306E\u5E45\u3092\u81EA\u52D5\u8ABF\u6574",autosizeAll:"\u3059\u3079\u3066\u306E\u5217\u306E\u5E45\u3092\u81EA\u52D5\u8ABF\u6574",resetColumns:"\u5217\u3092\u30EA\u30BB\u30C3\u30C8",hideColumn:"\u5217\u3092\u975E\u8868\u793A",close:"\u9589\u3058\u308B",copy:"\u30B3\u30D4\u30FC",copyWithHeaders:"\u30D8\u30C3\u30C0\u30FC\u4ED8\u304D\u3067\u30B3\u30D4\u30FC",paste:"\u8CBC\u308A\u4ED8\u3051",pasteHint:"\u30D6\u30E9\u30A6\u30B6\u30FC\u304C\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u30D6\u30ED\u30C3\u30AF\u3057\u307E\u3057\u305F\u3002Ctrl+V \u3067\u8CBC\u308A\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002",required:"\u3053\u306E\u9805\u76EE\u306F\u5FC5\u9808\u3067\u3059",invalidValue:"\u7121\u52B9\u306A\u5024\u3067\u3059",undo:"\u5143\u306B\u623B\u3059",redo:"\u3084\u308A\u76F4\u3057",deleteRows:"\u9078\u629E\u3057\u305F\u884C\u3092\u524A\u9664",copyRows:"\u9078\u629E\u3057\u305F\u884C\u3092\u30B3\u30D4\u30FC",statusRows:"{n} \u884C",statusFiltered:"{total} \u884C\u4E2D {shown} \u884C",statusSelected:"{n} \u4EF6\u9078\u629E",count:"\u30C7\u30FC\u30BF\u306E\u500B\u6570",sum:"\u5408\u8A08",avg:"\u5E73\u5747",min:"\u6700\u5C0F",max:"\u6700\u5927",findPlaceholder:"\u30B0\u30EA\u30C3\u30C9\u5185\u3092\u691C\u7D22",noMatches:"\u4E00\u81F4\u306A\u3057",findNext:"\u6B21\u3092\u691C\u7D22",findPrevious:"\u524D\u3092\u691C\u7D22",groupPanelHint:"\u5217\u898B\u51FA\u3057\u3092\u3053\u3053\u306B\u30C9\u30E9\u30C3\u30B0\u3057\u3066\u30B0\u30EB\u30FC\u30D7\u5316",groupByThis:"\u3053\u306E\u5217\u3067\u30B0\u30EB\u30FC\u30D7\u5316",ungroup:"\u30B0\u30EB\u30FC\u30D7\u5316\u3092\u89E3\u9664",expandAll:"\u3059\u3079\u3066\u5C55\u958B",collapseAll:"\u3059\u3079\u3066\u6298\u308A\u305F\u305F\u3080",pagerRange:"{total} \u4EF6\u4E2D {from}\u2013{to} \u4EF6",pageOf:"{pages} \u30DA\u30FC\u30B8\u4E2D {page} \u30DA\u30FC\u30B8",pageSize:"1 \u30DA\u30FC\u30B8\u306E\u884C\u6570",firstPage:"\u6700\u521D\u306E\u30DA\u30FC\u30B8",previousPage:"\u524D\u306E\u30DA\u30FC\u30B8",nextPage:"\u6B21\u306E\u30DA\u30FC\u30B8",lastPage:"\u6700\u5F8C\u306E\u30DA\u30FC\u30B8",loading:"\u8AAD\u307F\u8FBC\u307F\u4E2D\u2026",loadFailed:"\u884C\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\u3067\u3057\u305F",filters:"\u30D5\u30A3\u30EB\u30BF\u30FC",clearFilters:"\u3059\u3079\u3066\u306E\u30D5\u30A3\u30EB\u30BF\u30FC\u3092\u89E3\u9664",exportCsv:"CSV \u306B\u66F8\u304D\u51FA\u3059",exportExcel:"Excel \u306B\u66F8\u304D\u51FA\u3059",pivot:"\u30D4\u30DC\u30C3\u30C8",pivotMode:"\u30D4\u30DC\u30C3\u30C8\u30E2\u30FC\u30C9",pivotRows:"\u884C\u30B0\u30EB\u30FC\u30D7",pivotColumns:"\u5217\u30E9\u30D9\u30EB",pivotValues:"\u5024",total:"\u5408\u8A08",addColumn:"\u5217\u3092\u8FFD\u52A0\u2026",chartBar:"\u68D2\u30B0\u30E9\u30D5",chartStacked:"\u7A4D\u307F\u4E0A\u3052\u68D2\u30B0\u30E9\u30D5",chartLine:"\u6298\u308C\u7DDA\u30B0\u30E9\u30D5",chartArea:"\u9762\u30B0\u30E9\u30D5",chartPie:"\u5186\u30B0\u30E9\u30D5",ops:{contains:"\u542B\u3080",equals:"\u7B49\u3057\u3044",notEquals:"\u7B49\u3057\u304F\u306A\u3044",startsWith:"\u3067\u59CB\u307E\u308B",endsWith:"\u3067\u7D42\u308F\u308B",blank:"\u7A7A\u767D",notBlank:"\u7A7A\u767D\u4EE5\u5916",eq:"\u7B49\u3057\u3044",ne:"\u7B49\u3057\u304F\u306A\u3044",lt:"\u3088\u308A\u5C0F\u3055\u3044",lte:"\u4EE5\u4E0B",gt:"\u3088\u308A\u5927\u304D\u3044",gte:"\u4EE5\u4E0A",between:"\u7BC4\u56F2\u5185",before:"\u3088\u308A\u524D",after:"\u3088\u308A\u5F8C"}},Et=An;var Nn={code:"ko",noRows:"\uD45C\uC2DC\uD560 \uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4",filter:"\uD544\uD130",apply:"\uC801\uC6A9",reset:"\uCD08\uAE30\uD654",selectAll:"(\uC804\uCCB4 \uC120\uD0DD)",search:"\uAC80\uC0C9\u2026",blanks:"(\uBE48 \uAC12)",value:"\uAC12",valueTo:"\uB05D \uAC12",sortAsc:"\uC624\uB984\uCC28\uC21C \uC815\uB82C",sortDesc:"\uB0B4\uB9BC\uCC28\uC21C \uC815\uB82C",clearSort:"\uC815\uB82C \uD574\uC81C",pinLeft:"\uC67C\uCABD \uACE0\uC815",pinRight:"\uC624\uB978\uCABD \uACE0\uC815",unpin:"\uACE0\uC815 \uD574\uC81C",columnMenu:"\uCEEC\uB7FC \uBA54\uB274",selectRow:"\uD589 \uC120\uD0DD",selectAllRows:"\uC804\uCCB4 \uD589 \uC120\uD0DD",chooseColumns:"\uCEEC\uB7FC \uC120\uD0DD",columns:"\uCEEC\uB7FC",autosizeThis:"\uC774 \uCEEC\uB7FC \uB108\uBE44 \uC790\uB3D9 \uB9DE\uCDA4",autosizeAll:"\uBAA8\uB4E0 \uCEEC\uB7FC \uB108\uBE44 \uC790\uB3D9 \uB9DE\uCDA4",resetColumns:"\uCEEC\uB7FC \uCD08\uAE30\uD654",hideColumn:"\uCEEC\uB7FC \uC228\uAE30\uAE30",close:"\uB2EB\uAE30",copy:"\uBCF5\uC0AC",copyWithHeaders:"\uD5E4\uB354 \uD3EC\uD568 \uBCF5\uC0AC",paste:"\uBD99\uC5EC\uB123\uAE30",pasteHint:"\uBE0C\uB77C\uC6B0\uC800\uAC00 \uD074\uB9BD\uBCF4\uB4DC \uC811\uADFC\uC744 \uB9C9\uC558\uC2B5\uB2C8\uB2E4. Ctrl+V\uB85C \uBD99\uC5EC\uB123\uC73C\uC138\uC694.",required:"\uD544\uC218 \uC785\uB825 \uD56D\uBAA9\uC785\uB2C8\uB2E4",invalidValue:"\uC62C\uBC14\uB978 \uAC12\uC774 \uC544\uB2D9\uB2C8\uB2E4",undo:"\uC2E4\uD589 \uCDE8\uC18C",redo:"\uB2E4\uC2DC \uC2E4\uD589",deleteRows:"\uC120\uD0DD\uD55C \uD589 \uC0AD\uC81C",copyRows:"\uC120\uD0DD\uD55C \uD589 \uBCF5\uC0AC",statusRows:"{n}\uD589",statusFiltered:"{total}\uD589 \uC911 {shown}\uD589",statusSelected:"{n}\uAC1C \uC120\uD0DD",count:"\uAC1C\uC218",sum:"\uD569\uACC4",avg:"\uD3C9\uADE0",min:"\uCD5C\uC18C",max:"\uCD5C\uB300",findPlaceholder:"\uADF8\uB9AC\uB4DC\uC5D0\uC11C \uCC3E\uAE30",noMatches:"\uC77C\uCE58 \uD56D\uBAA9 \uC5C6\uC74C",findNext:"\uB2E4\uC74C \uCC3E\uAE30",findPrevious:"\uC774\uC804 \uCC3E\uAE30",groupPanelHint:"\uC5F4 \uBA38\uB9AC\uAE00\uC744 \uC5EC\uAE30\uB85C \uB04C\uC5B4\uC640 \uD589\uC744 \uBB36\uC73C\uC138\uC694",groupByThis:"\uC774 \uC5F4\uB85C \uBB36\uAE30",ungroup:"\uBB36\uAE30 \uD574\uC81C",expandAll:"\uBAA8\uB450 \uD3BC\uCE58\uAE30",collapseAll:"\uBAA8\uB450 \uC811\uAE30",pagerRange:"{total}\uAC1C \uC911 {from}\u2013{to}",pageOf:"{pages}\uCABD \uC911 {page}\uCABD",pageSize:"\uCABD\uB2F9 \uD589 \uC218",firstPage:"\uCCAB \uCABD",previousPage:"\uC774\uC804 \uCABD",nextPage:"\uB2E4\uC74C \uCABD",lastPage:"\uB9C8\uC9C0\uB9C9 \uCABD",loading:"\uBD88\uB7EC\uC624\uB294 \uC911\u2026",loadFailed:"\uD589\uC744 \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4",filters:"\uD544\uD130",clearFilters:"\uD544\uD130 \uBAA8\uB450 \uC9C0\uC6B0\uAE30",exportCsv:"CSV\uB85C \uB0B4\uBCF4\uB0B4\uAE30",exportExcel:"\uC5D1\uC140\uB85C \uB0B4\uBCF4\uB0B4\uAE30",pivot:"\uD53C\uBC97",pivotMode:"\uD53C\uBC97 \uBAA8\uB4DC",pivotRows:"\uD589 \uADF8\uB8F9",pivotColumns:"\uC5F4 \uB808\uC774\uBE14",pivotValues:"\uAC12",total:"\uD569\uACC4",addColumn:"\uCEEC\uB7FC \uCD94\uAC00\u2026",chartBar:"\uB9C9\uB300 \uCC28\uD2B8",chartStacked:"\uB204\uC801 \uB9C9\uB300 \uCC28\uD2B8",chartLine:"\uAEBE\uC740\uC120 \uCC28\uD2B8",chartArea:"\uC601\uC5ED \uCC28\uD2B8",chartPie:"\uC6D0\uD615 \uCC28\uD2B8",ops:{contains:"\uD3EC\uD568",equals:"\uAC19\uC74C",notEquals:"\uAC19\uC9C0 \uC54A\uC74C",startsWith:"\uC2DC\uC791 \uBB38\uC790",endsWith:"\uB05D \uBB38\uC790",blank:"\uBE48 \uAC12",notBlank:"\uBE48 \uAC12 \uC544\uB2D8",eq:"\uAC19\uC74C",ne:"\uAC19\uC9C0 \uC54A\uC74C",lt:"\uBBF8\uB9CC",lte:"\uC774\uD558",gt:"\uCD08\uACFC",gte:"\uC774\uC0C1",between:"\uBC94\uC704",before:"\uC774\uC804",after:"\uC774\uD6C4"}},Lt=Nn;var Fn={code:"zh-CN",noRows:"\u6CA1\u6709\u53EF\u663E\u793A\u7684\u6570\u636E",filter:"\u7B5B\u9009",apply:"\u5E94\u7528",reset:"\u91CD\u7F6E",selectAll:"(\u5168\u9009)",search:"\u641C\u7D22\u2026",blanks:"(\u7A7A\u767D)",value:"\u503C",valueTo:"\u81F3",sortAsc:"\u5347\u5E8F\u6392\u5E8F",sortDesc:"\u964D\u5E8F\u6392\u5E8F",clearSort:"\u6E05\u9664\u6392\u5E8F",pinLeft:"\u56FA\u5B9A\u5728\u5DE6\u4FA7",pinRight:"\u56FA\u5B9A\u5728\u53F3\u4FA7",unpin:"\u53D6\u6D88\u56FA\u5B9A",columnMenu:"\u5217\u83DC\u5355",selectRow:"\u9009\u62E9\u884C",selectAllRows:"\u9009\u62E9\u6240\u6709\u884C",chooseColumns:"\u9009\u62E9\u5217",columns:"\u5217",autosizeThis:"\u81EA\u52A8\u8C03\u6574\u6B64\u5217\u5BBD\u5EA6",autosizeAll:"\u81EA\u52A8\u8C03\u6574\u6240\u6709\u5217\u5BBD\u5EA6",resetColumns:"\u91CD\u7F6E\u5217",hideColumn:"\u9690\u85CF\u5217",close:"\u5173\u95ED",copy:"\u590D\u5236",copyWithHeaders:"\u8FDE\u540C\u6807\u9898\u590D\u5236",paste:"\u7C98\u8D34",pasteHint:"\u6D4F\u89C8\u5668\u963B\u6B62\u4E86\u526A\u8D34\u677F\u8BBF\u95EE\u3002\u8BF7\u6309 Ctrl+V \u7C98\u8D34\u3002",required:"\u6B64\u9879\u4E3A\u5FC5\u586B\u9879",invalidValue:"\u503C\u65E0\u6548",undo:"\u64A4\u9500",redo:"\u91CD\u505A",deleteRows:"\u5220\u9664\u6240\u9009\u884C",copyRows:"\u590D\u5236\u6240\u9009\u884C",statusRows:"{n} \u884C",statusFiltered:"{total} \u884C\u4E2D\u7684 {shown} \u884C",statusSelected:"\u5DF2\u9009 {n} \u884C",count:"\u8BA1\u6570",sum:"\u6C42\u548C",avg:"\u5E73\u5747\u503C",min:"\u6700\u5C0F\u503C",max:"\u6700\u5927\u503C",findPlaceholder:"\u5728\u8868\u683C\u4E2D\u67E5\u627E",noMatches:"\u65E0\u5339\u914D\u9879",findNext:"\u4E0B\u4E00\u4E2A",findPrevious:"\u4E0A\u4E00\u4E2A",groupPanelHint:"\u5C06\u5217\u6807\u9898\u62D6\u5230\u6B64\u5904\u4EE5\u5206\u7EC4",groupByThis:"\u6309\u6B64\u5217\u5206\u7EC4",ungroup:"\u53D6\u6D88\u5206\u7EC4",expandAll:"\u5168\u90E8\u5C55\u5F00",collapseAll:"\u5168\u90E8\u6298\u53E0",pagerRange:"\u7B2C {from}\u2013{to} \u6761\uFF0C\u5171 {total} \u6761",pageOf:"\u7B2C {page} \u9875\uFF0C\u5171 {pages} \u9875",pageSize:"\u6BCF\u9875\u884C\u6570",firstPage:"\u9996\u9875",previousPage:"\u4E0A\u4E00\u9875",nextPage:"\u4E0B\u4E00\u9875",lastPage:"\u672B\u9875",loading:"\u52A0\u8F7D\u4E2D\u2026",loadFailed:"\u65E0\u6CD5\u52A0\u8F7D\u6570\u636E",filters:"\u7B5B\u9009",clearFilters:"\u6E05\u9664\u6240\u6709\u7B5B\u9009",exportCsv:"\u5BFC\u51FA CSV",exportExcel:"\u5BFC\u51FA Excel",pivot:"\u6570\u636E\u900F\u89C6",pivotMode:"\u900F\u89C6\u6A21\u5F0F",pivotRows:"\u884C\u5206\u7EC4",pivotColumns:"\u5217\u6807\u7B7E",pivotValues:"\u503C",total:"\u603B\u8BA1",addColumn:"\u6DFB\u52A0\u5217\u2026",chartBar:"\u67F1\u72B6\u56FE",chartStacked:"\u5806\u79EF\u67F1\u72B6\u56FE",chartLine:"\u6298\u7EBF\u56FE",chartArea:"\u9762\u79EF\u56FE",chartPie:"\u997C\u56FE",ops:{contains:"\u5305\u542B",equals:"\u7B49\u4E8E",notEquals:"\u4E0D\u7B49\u4E8E",startsWith:"\u5F00\u5934\u662F",endsWith:"\u7ED3\u5C3E\u662F",blank:"\u4E3A\u7A7A",notBlank:"\u4E0D\u4E3A\u7A7A",eq:"\u7B49\u4E8E",ne:"\u4E0D\u7B49\u4E8E",lt:"\u5C0F\u4E8E",lte:"\u5C0F\u4E8E\u6216\u7B49\u4E8E",gt:"\u5927\u4E8E",gte:"\u5927\u4E8E\u6216\u7B49\u4E8E",between:"\u4ECB\u4E8E",before:"\u65E9\u4E8E",after:"\u665A\u4E8E"}},It=Fn;var K="__fg_select__",Dt={id:K,header:"",width:44,minWidth:44,maxWidth:44,pinned:"left",sortable:!1,resizable:!1,filter:!1},Z="__fg_drag__",Tt={id:Z,header:"",width:28,minWidth:28,maxWidth:28,pinned:"left",sortable:!1,resizable:!1,filter:!1,chooser:!1},L=s=>s===K||s===Z,Hn=120,Bn=40,On=["left","center","right"];function ne(s){if(L(s.id)||s.filter===!1)return null;if(s.filter)return s.filter;switch(s.type){case"number":return"number";case"date":return"date";case"boolean":return"set";default:return"text"}}var J=s=>s.id!==K&&s.sortable!==!1,ve=s=>s.id!==K&&s.resizable!==!1;function ge(s,e){let t=s.minWidth??Bn,n=s.maxWidth??1/0;return Math.round(Math.min(n,Math.max(t,e)))}function Pt(s){return s.children?1+Math.max(0,...s.children.map(Pt)):1}var we=class{constructor(e){this.depth=1;this.roots_=[];this.defs=[];this.byId=new Map;this.containerWidth=0;this.layout={left:[],center:[],right:[]};this.leafById=new Map;this.setDefs(e)}setDefs(e){this.defs=e,this.byId=new Map;let t=0,n=(r,i,a)=>{let l=Array.isArray(r.children)&&r.children.length>0,d=t++,c=r.id??(l?`g${d}`:r.field);if(c||(c=`c${d}`,P(`column #${d} has neither "field" nor "id"; using "${c}"`)),this.byId.has(c)){let p=1;for(;this.byId.has(`${c}_${p}`);)p++;P(`duplicate column id "${c}"; renamed to "${c}_${p}"`),c=`${c}_${p}`}let u={id:c,def:r,parent:i,children:null,depth:a,width:ge(r,r.width??Hn),flex:r.flex&&r.flex>0?r.flex:null,hide:r.hide??!1,pinned:r.pinned??i?.pinned??null};return this.byId.set(c,u),l&&(u.children=o(r.children).map(p=>n(p,u,a+1))),u},o=r=>{let i=r.filter(a=>a!==null&&typeof a=="object");return i.length!==r.length&&P("columns contain entries that are not objects; they were skipped"),i};this.roots_=o(e).map(r=>n(r,null,0)),this.depth=Math.max(1,...this.roots_.map(Pt)),this.relayout()}setContainerWidth(e){if(e===this.containerWidth)return!1;this.containerWidth=e;let t=this.displayed().map(n=>n.width).join();return this.relayout(),t!==this.displayed().map(n=>n.width).join()}roots(){return this.roots_}reset(){this.setDefs(this.defs)}region(e){return this.layout[e]}displayed(){return[...this.layout.left,...this.layout.center,...this.layout.right]}regionWidth(e){let t=this.layout[e],n=t[t.length-1];return n?n.left+n.width:0}getColumn(e){return this.leafById.get(e)}getNode(e){return this.byId.get(e)}siblings(e){let t=this.byId.get(e);return t?t.parent?t.parent.children:this.roots_:[]}setWidth(e,t){let n=this.byId.get(e);return!n||n.children?0:(n.flex=null,n.width=ge(n.def,t),this.relayout(),n.width)}setPinned(e,t){let n=this.byId.get(e);!n||n.children||L(e)||(n.pinned=t,this.relayout())}setHide(e,t){let n=this.byId.get(e);!n||n.children||(n.hide=t,this.relayout())}move(e,t){let n=this.siblings(e),o=n.findIndex(i=>i.id===e);if(o<0)return;let[r]=n.splice(o,1);n.splice(Math.max(0,Math.min(n.length,t)),0,r),this.relayout()}headerCells(e){let t=[],n=new Map;for(let o of this.layout[e]){let r=[];for(let i=o.node.parent;i;i=i.parent)r.unshift(i);for(let i of r){let a=n.get(i.id);if(a){a.width+=o.width;continue}let l={id:i.id,label:i.def.header??"",isGroup:!0,column:null,node:i,row:i.depth,rowSpan:1,left:o.left,width:o.width};n.set(i.id,l),t.push(l)}t.push({id:o.id,label:o.def.header??o.def.field??"",isGroup:!1,column:o,node:o.node,row:o.node.depth,rowSpan:this.depth-o.node.depth,left:o.left,width:o.width})}return t}getState(){return this.leafNodes().filter(e=>!L(e.id)).map(e=>({colId:e.id,width:this.leafById.get(e.id)?.width??e.width,hide:e.hide,pinned:e.pinned}))}applyState(e){let t=new Map;e.forEach((r,i)=>{t.set(r.colId,i);let a=this.byId.get(r.colId);!a||a.children||L(r.colId)||(a.flex=null,a.width=ge(a.def,r.width),a.hide=r.hide,a.pinned=r.pinned)}),t.set(Z,-2),t.set(K,-1);let n=r=>r.children?Math.min(1/0,...r.children.map(n)):t.get(r.id)??1/0,o=r=>{let i=r.map((a,l)=>({n:a,i:l,r:n(a)}));i.sort((a,l)=>a.r===l.r?a.i-l.i:a.r-l.r),r.splice(0,r.length,...i.map(a=>a.n));for(let a of r)a.children&&o(a.children)};o(this.roots_),this.relayout()}leafNodes(){let e=[],t=n=>n.children?n.children.forEach(t):e.push(n);return this.roots_.forEach(t),e}relayout(){let e=this.leafNodes().filter(l=>!l.hide),t=e.reduce((l,d)=>l+(d.flex?0:d.width),0),n=e.reduce((l,d)=>l+(d.flex??0),0),o=Math.max(0,this.containerWidth-t),r=l=>l.flex?ge(l.def,Math.floor(o*l.flex/n)):l.width,i={left:[],center:[],right:[]};this.leafById=new Map;let a=0;for(let l of On){let d=0;for(let c of e){if((c.pinned??"center")!==l)continue;let u={id:c.id,def:c.def,node:c,width:r(c),region:l,left:d,index:a++};d+=u.width,i[l].push(u),this.leafById.set(c.id,u)}}this.layout=i}};function A(s){return s==null||typeof s=="string"&&s.trim()===""||typeof s=="number"&&Number.isNaN(s)}var $t=s=>String(s).padStart(2,"0");function V(s){if(A(s))return null;if(typeof s=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(s))return s;let e=s instanceof Date?s:new Date(s);return Number.isNaN(e.getTime())?null:`${e.getFullYear()}-${$t(e.getMonth()+1)}-${$t(e.getDate())}`}function G(s){return A(s)?"":s instanceof Date?V(s)??"":String(s)}var Y=()=>!0;function At(s){switch(s.type){case"text":{let e=(s.value??"").toLowerCase(),t=n=>A(n)?"":String(n).toLowerCase();switch(s.op){case"contains":return n=>t(n).includes(e);case"equals":return n=>t(n)===e;case"notEquals":return n=>t(n)!==e;case"startsWith":return n=>t(n).startsWith(e);case"endsWith":return n=>t(n).endsWith(e);case"blank":return A;case"notBlank":return n=>!A(n)}return Y}case"number":{let e=n=>A(n)?NaN:Number(n);if(s.op==="blank")return n=>Number.isNaN(e(n));if(s.op==="notBlank")return n=>!Number.isNaN(e(n));let t=s.value;if(t==null||Number.isNaN(t))return Y;switch(s.op){case"eq":return n=>e(n)===t;case"ne":return n=>e(n)!==t;case"lt":return n=>e(n)<t;case"lte":return n=>e(n)<=t;case"gt":return n=>e(n)>t;case"gte":return n=>e(n)>=t;case"between":{let n=s.valueTo;if(n==null||Number.isNaN(n))return Y;let o=Math.min(t,n),r=Math.max(t,n);return i=>{let a=e(i);return a>=o&&a<=r}}}return Y}case"date":{if(s.op==="blank")return n=>V(n)===null;if(s.op==="notBlank")return n=>V(n)!==null;let e=s.value;if(!e)return Y;let t=n=>V(n);switch(s.op){case"equals":return n=>t(n)===e;case"before":return n=>{let o=t(n);return o!==null&&o<e};case"after":return n=>{let o=t(n);return o!==null&&o>e};case"between":{let n=s.valueTo;if(!n)return Y;let o=e<n?e:n,r=e<n?n:e;return i=>{let a=t(i);return a!==null&&a>=o&&a<=r}}}return Y}case"set":{let e=new Set(s.values.map(G));return t=>e.has(G(t))}}return Y}function Nt(s){let e=s.trim().toLowerCase();return e?e.split(/\s+/):[]}function Ft(s,e){return s.every(t=>e.includes(t))}var Ht=new Map;function zn(s){if(s==="integer")return{maximumFractionDigits:0};if(s==="percent")return{style:"percent"};if(s.startsWith("currency:"))return{style:"currency",currency:s.slice(9)};if(!/^[#0,]*(\.[#0]+)?%?$/.test(s)||!/[#0]/.test(s))return null;let e=s.endsWith("%"),t=e?s.slice(0,-1):s,n=t.includes(".")?t.split(".")[1]:"";return{useGrouping:t.includes(","),minimumFractionDigits:(n.match(/0/g)??[]).length,maximumFractionDigits:n.length,...e?{style:"percent"}:{}}}var ye={date:{year:"numeric",month:"2-digit",day:"2-digit"},datetime:{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"},time:{hour:"2-digit",minute:"2-digit"},short:{dateStyle:"short"},medium:{dateStyle:"medium"},long:{dateStyle:"long"}};function _(s){if(A(s))return null;if(s instanceof Date)return Number.isNaN(s.getTime())?null:s;if(typeof s=="string"){let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(s);if(t)return new Date(Number(t[1]),Number(t[2])-1,Number(t[3]))}if(typeof s!="string"&&typeof s!="number")return null;let e=new Date(s);return Number.isNaN(e.getTime())?null:e}function Vn(s,e,t){switch(s){case"number":{let n={};if(typeof e=="string"){let r=zn(e);r||P(`unknown number format "${e}"`),n=r??{}}else e&&(n=e);let o=new Intl.NumberFormat(t,n);return r=>{if(A(r))return"";let i=typeof r=="number"?r:Number(r);return Number.isNaN(i)?String(r):o.format(i)}}case"date":{if(t.toLowerCase().startsWith("ko")&&(e===void 0||e==="date"||e==="datetime")){let r=a=>String(a).padStart(2,"0"),i=e==="datetime";return a=>{let l=_(a);if(!l)return A(a)?"":String(a);let d=`${l.getFullYear()}-${r(l.getMonth()+1)}-${r(l.getDate())}`;return i?`${d} ${r(l.getHours())}:${r(l.getMinutes())}`:d}}let n=ye.date;typeof e=="string"?(ye[e]||P(`unknown date format "${e}"`),n=ye[e]??ye.date):e&&(n=e);let o=new Intl.DateTimeFormat(t,n);return r=>{let i=_(r);return i?o.format(i):A(r)?"":String(r)}}case"boolean":return n=>n===!0?"\u2713":n===!1?"\u2717":"";default:return n=>A(n)?"":n instanceof Date?n.toISOString():String(n)}}function H(s,e){let t=s.format,n=`${e}|${s.type??"text"}|${typeof t=="string"?t:JSON.stringify(t??null)}`,o=Ht.get(n);return o||(o=Vn(s.type,t,e),Ht.set(n,o)),o}function N(s,e){if(s.valueGetter)try{return s.valueGetter(e)}catch{P(`valueGetter of column "${s.id??s.field}" threw; rendering an empty cell`);return}return s.field!=null?e[s.field]:void 0}function We(s){let e=[];for(let t of s){if(A(t)||t instanceof Date)continue;let n=typeof t=="number"?t:Number(t);Number.isNaN(n)||e.push(n)}return e}function Bt(s,e){let t=s.filter(o=>o instanceof Date&&!Number.isNaN(o.getTime()));if(t.length)return t.reduce((o,r)=>(e?r>o:r<o)?r:o);let n=We(s);return n.length?e?Math.max(...n):Math.min(...n):null}function oe(s,e,t){if(typeof s=="function")return s(e,t);switch(s){case"sum":return We(e).reduce((n,o)=>n+o,0);case"avg":{let n=We(e);return n.length?n.reduce((o,r)=>o+r,0)/n.length:null}case"min":return Bt(e,!1);case"max":return Bt(e,!0);case"count":return t.length}return null}function je(s){return typeof s=="object"&&s!==null&&"agg"in s?s:{agg:s}}function Ot(s,e,t){let n=new Map,o=(r,i)=>{let a=n.get(r);return a||n.set(r,a=e.map(l=>N(i,l))),a};return s.map(r=>{let i={};for(let[a,l]of Object.entries(r.columns??{})){let d=t(a);d&&(i[a]=oe(je(l).agg,o(a,d),e))}return i})}function zt(s,e,t,n,o=4){if(n<=0||t<=0)return{first:0,last:-1};let r=Math.max(0,Math.floor(s/t)-o),i=Math.floor((s+e)/t);return{first:Math.min(r,n-1),last:Math.min(n-1,i+o)}}function be(s,e,t,n,o=2){let r=s.length;if(!r)return{first:0,last:-1};let i=0,a=r-1;for(;i<a;){let c=i+a>>1;s[c]+e[c]<=t?i=c+1:a=c}let l=i,d=t+n;for(a=r-1;i<a;){let c=i+a+1>>1;s[c]<d?i=c:a=c-1}return{first:Math.max(0,l-o),last:Math.min(r-1,Math.max(l,i)+o)}}function Vt(s,e,t,n,o=4){if(n<=0)return{first:0,last:-1};let r=0,i=n-1;for(;r<i;){let d=r+i>>1;s[d+1]<=e?r=d+1:i=d}let a=r,l=e+t;for(i=n-1;r<i;){let d=r+i+1>>1;s[d]<l?r=d:i=d-1}return{first:Math.max(0,a-o),last:Math.min(n-1,r+o)}}var q=["left","center","right"],Gt=6,Xe=2,Gn='<svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"><path d="M3 4h10M3 8h10M3 12h10" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/></svg>',Ye='<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path d="M6 3.5 10.5 8 6 12.5" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>';var qn='<svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"><path d="M2.5 3h11l-4.2 5v4.5l-2.6 1.2V8z" fill="currentColor"/></svg>';function y(s,e="",t={}){let n=document.createElement(s);e&&(n.className=e);for(let[o,r]of Object.entries(t))n.setAttribute(o,r);return n}var xe=class{constructor(e,t,n){this.grid=t;this.opts=n;this.painted={left:new Map,center:new Map,right:new Map};this.pool={left:[],center:[],right:[]};this.frame=0;this.headerDirty=!0;this.version=0;this.lastRange={first:0,last:-1};this.summaryEl=null;this.summaryPanes=null;this.summaryInners=null;this.canvasSummary={left:[],center:[],right:[]};this.topOffset=0;this.pinnedTop=null;this.pinnedBottom=null;this.statusEl=null;this.statusKey="";this.pagerEl=null;this.pagerKey="";this.offsets=null;this.details=new Map;this.firstDataId="";this.groupLabelId="";this.onScroll=()=>{this.frame&&cancelAnimationFrame(this.frame),this.frame=0,this.render()};this.onSideWheel=e=>{e.deltaY&&(e.preventDefault(),this.scroller.scrollTop+=e.deltaY)};this.root=y("div","",{role:"grid",tabindex:"0"}),this.headerEl=y("div","fg-header",{role:"rowgroup"}),this.bodyEl=y("div","fg-body",{role:"rowgroup"});let o=r=>({left:y("div",`${r} ${r}-left`),center:y("div",`${r} ${r}-center`),right:y("div",`${r} ${r}-right`)});this.headerPanes=o("fg-header-pane"),this.headerInners=o("fg-header-inner"),this.bodyPanes=o("fg-body-pane"),this.canvases=o("fg-canvas");for(let r of q)this.headerPanes[r].dataset.region=r,this.bodyPanes[r].dataset.region=r,this.headerPanes[r].append(this.headerInners[r]),this.bodyPanes[r].append(this.canvases[r]),this.headerEl.append(this.headerPanes[r]),this.bodyEl.append(this.bodyPanes[r]);this.scroller=this.bodyPanes.center,this.overlay=y("div","fg-overlay",{role:"status"}),this.main=y("div","fg-main"),this.main.append(this.headerEl,this.bodyEl,this.overlay),this.root.append(this.main),e.append(this.root),this.applyTheme(),this.scroller.addEventListener("scroll",this.onScroll,{passive:!0}),this.bodyPanes.left.addEventListener("wheel",this.onSideWheel,{passive:!1}),this.bodyPanes.right.addEventListener("wheel",this.onSideWheel,{passive:!1})}applyFont(e,t){e?this.root.style.setProperty("--fg-font-size",`${e}px`):this.root.style.removeProperty("--fg-font-size"),t?this.root.style.setProperty("--fg-font",t):this.root.style.removeProperty("--fg-font")}applyTheme(){this.root.className=`fg-root fg-theme-${this.grid.store.state.theme}`}invalidate(e={}){e.header&&(this.headerDirty=!0),e.rows&&this.version++,this.schedule()}schedule(){this.frame||(this.frame=requestAnimationFrame(()=>{this.frame=0,this.render()}))}render(){let{columns:e,rowModel:t,store:n,options:o}=this.grid,{rowHeight:r,headerHeight:i}=this.opts,a=this.scroller.offsetWidth-this.scroller.clientWidth;e.setContainerWidth(Math.max(0,this.main.clientWidth-a))&&(this.headerDirty=!0,this.version++);let l=t.getRowCount(),d=t.layout(r,this.detailHeight());this.offsets=d.uniform?null:d.offsets,this.firstDataId=e.displayed().find(f=>!L(f.id))?.id??"",this.groupLabelId=e.region("center").find(f=>!L(f.id))?.id??this.firstDataId;let c=this.grid.summary(),u=c?c.opts.rows.length:0,p=c?.opts.position??"bottom",h=c?c.opts.pinned!==!1:!1;this.topOffset=c&&!h&&p==="top"?u*r:0;let v=c&&!h&&p==="bottom"?u*r:0;this.syncSummaryPane(c&&h?p:null,u*r);let w=e.depth*i;this.headerEl.style.height=`${w}px`;for(let f of q){let m=e.regionWidth(f);f!=="center"&&(this.headerPanes[f].style.width=this.bodyPanes[f].style.width=`${m}px`,this.headerPanes[f].hidden=this.bodyPanes[f].hidden=m===0),this.canvases[f].style.width=`${m}px`,this.canvases[f].style.height=`${this.rowsHeight(l)+this.topOffset+v}px`}let R=this.scroller.offsetHeight-this.scroller.clientHeight;this.bodyPanes.left.style.marginBottom=this.bodyPanes.right.style.marginBottom=`${R}px`,this.root.setAttribute("aria-rowcount",String(l+e.depth)),this.root.setAttribute("aria-colcount",String(e.displayed().length)),o.rowSelection==="multiple"&&this.root.setAttribute("aria-multiselectable","true"),this.headerDirty&&(this.headerDirty=!1,this.renderHeader()),this.renderRows(l),this.renderSummary(l,c&&c.opts.rows,c?.values??[],h,p),this.pinnedTop=this.renderPinned(this.pinnedTop,"top",this.grid.pinnedRows.top),this.pinnedBottom=this.renderPinned(this.pinnedBottom,"bottom",this.grid.pinnedRows.bottom),this.renderStatusBar(t.dataCount()),this.renderPager(),this.orderSections(c&&h?p:null),this.overlay.hidden=l>0,this.overlay.textContent=l===0&&t.loading()?n.state.locale.loading:n.state.locale.noRows,this.overlay.style.top=`${w}px`;let{scrollTop:b,scrollLeft:C}=this.scroller;this.bodyPanes.left.scrollTop=this.bodyPanes.right.scrollTop=b,this.headerInners.center.style.transform=`translateX(${-C}px)`,this.summaryInners&&(this.summaryInners.center.style.transform=`translateX(${-C}px)`);for(let f of[this.pinnedTop,this.pinnedBottom])f&&(f.inners.center.style.transform=`translateX(${-C}px)`);this.grid.fillHandle.update()}orderSections(e){let t=[e==="top"?this.summaryEl:null,this.pinnedTop?.el??null].filter(r=>!!r),n=[this.pinnedBottom?.el??null,e==="bottom"?this.summaryEl:null,this.statusEl,this.pagerEl].filter(r=>!!r);for(let r of t)r.nextElementSibling!==this.bodyEl&&!t.includes(r.nextElementSibling)&&this.main.insertBefore(r,this.bodyEl);let o=this.bodyEl;for(let r=t.length-1;r>=0;r--)o.previousElementSibling!==t[r]&&this.main.insertBefore(t[r],o),o=t[r];o=this.bodyEl;for(let r of n)o.nextElementSibling!==r&&o.after(r),o=r}renderPinned(e,t,n){if(!n.length)return e?.el.remove(),null;let o=e??new Ze(`fg-pinned-rows fg-pinned-${t}`),{columns:r}=this.grid,i=this.opts.rowHeight;o.size(r,n.length*i,this.scroller.offsetWidth-this.scroller.clientWidth);let a=r.region("center"),l=be(a.map(d=>d.left),a.map(d=>d.width),this.scroller.scrollLeft,this.scroller.clientWidth,Xe);for(let d of q){let c=d==="center"?a.slice(l.first,l.last+1):r.region(d);o.inners[d].replaceChildren(...n.map((u,p)=>{let h=y("div","fg-row fg-row-pinned",{role:"row"});h.style.transform=`translateY(${p*i}px)`,h.style.height=`${i}px`;let v={id:`pinned-${t}-${p}`,data:u,sourceIndex:-1};for(let w of c){let R=y("div","fg-cell",{role:"gridcell"});L(w.id)?(R.style.left=`${w.left}px`,R.style.width=`${w.width}px`):this.paintCell(R,v,-1,w,!1,!1),h.append(R)}return h}))}return o}renderStatusBar(e){if(!this.grid.options.statusBar){this.statusEl?.remove(),this.statusEl=null;return}let{grid:t}=this,n=t.store.state,o=t.rowModel.server?e:t.viewRows().length,r=`${this.version}|${e}|${o}|${n.selected.size}|${JSON.stringify(n.range)}|${n.locale.code}`;if(this.statusEl&&r===this.statusKey)return;this.statusKey=r,this.statusEl??(this.statusEl=y("div","fg-statusbar",{role:"status","aria-live":"polite"}));let i=n.locale,a=new Intl.NumberFormat(i.code,{maximumFractionDigits:2}),l=y("span","fg-status-rows");l.textContent=(e===o?i.statusRows.replace("{n}",a.format(o)):i.statusFiltered.replace("{shown}",a.format(e)).replace("{total}",a.format(o)))+(n.selected.size?` \xB7 ${i.statusSelected.replace("{n}",a.format(n.selected.size))}`:"");let d=y("span","fg-status-aggs"),c=t.rangeAggregates();if(c&&c.cells>1){let u=[`${i.count} ${a.format(c.count)}`];c.numbers&&u.push(`${i.sum} ${a.format(c.sum)}`,`${i.avg} ${a.format(c.sum/c.numbers)}`,`${i.min} ${a.format(c.min)}`,`${i.max} ${a.format(c.max)}`),d.textContent=u.join(" ")}this.statusEl.replaceChildren(l,d)}renderHeader(){let{columns:e,store:t}=this.grid,{sort:n,filters:o,locale:r}=t.state;for(let i of q){let a=this.headerInners[i];a.style.width=`${e.regionWidth(i)}px`,a.style.height=`${e.depth*this.opts.headerHeight}px`,a.replaceChildren(...e.headerCells(i).map(l=>this.headerCell(l,n,o,r)))}}headerCell(e,t,n,o){let r=this.opts.headerHeight,i=y("div",e.isGroup?"fg-header-cell fg-header-group":"fg-header-cell",{role:"columnheader"});if(i.dataset.col=e.id,i.style.left=`${e.left}px`,i.style.top=`${e.row*r}px`,i.style.width=`${e.width}px`,i.style.height=`${e.rowSpan*r}px`,L(e.id))return e.id===K&&(i.classList.add("fg-header-select"),i.append(this.selectAllBox(o))),i;let a=y("span","fg-header-label");if(a.textContent=e.label,i.append(a),e.isGroup||!e.column)return i;let l=e.node.def;(l.wrapHeaderText??this.grid.options.wrapHeaderText)&&i.classList.add("fg-header-wrap"),i.setAttribute("aria-colindex",String(e.column.index+1)),(l.align??(l.type==="number"?"right":"left"))==="right"&&i.classList.add("fg-align-right");let d=t.findIndex(c=>c.colId===e.id);if(i.setAttribute("aria-sort",d<0?"none":t[d].dir==="asc"?"ascending":"descending"),J(l)&&i.classList.add("fg-sortable"),d>=0){let c=y("span","fg-sort-icon");if(c.textContent=t[d].dir==="asc"?"\u2191":"\u2193",t.length>1){let u=y("sup");u.textContent=String(d+1),c.append(u)}i.append(c)}if(J(l)||ne(l)){let c=!!n[e.id],u=y("button",c?"fg-menu-btn fg-filter-active":"fg-menu-btn",{type:"button",tabindex:"-1","aria-label":o.columnMenu});u.innerHTML=c?qn:Gn,i.append(u)}return ve(l)&&i.append(y("div","fg-resize",{"aria-hidden":"true"})),i}selectAllBox(e){let t=this.grid.rowModel.dataRows(),n=this.grid.store.state.selected,o=0;for(let i of t)n.has(i.id)&&o++;let r=y("input","fg-checkbox fg-select-all",{type:"checkbox",tabindex:"-1","aria-label":e.selectAllRows});return r.checked=t.length>0&&o===t.length,r.indeterminate=o>0&&o<t.length,r.hidden=this.grid.options.rowSelection!=="multiple",r}renderRows(e){let{columns:t,rowModel:n,store:o}=this.grid,{selected:r,focus:i}=o.state,a=this.grid.rangeBounds(),l=this.grid.mergeSpans(),d=Math.max(0,this.scroller.scrollTop-this.topOffset),c=this.offsets?Vt(this.offsets,d,this.scroller.clientHeight,e,Gt):zt(d,this.scroller.clientHeight,this.opts.rowHeight,e,Gt);this.lastRange=c;let u=t.region("center"),p=be(u.map(h=>h.left),u.map(h=>h.width),this.scroller.scrollLeft,this.scroller.clientWidth,Xe);for(let h of q){let v=h==="center"?u.slice(p.first,p.last+1):t.region(h),w=this.painted[h];for(let[b,C]of w)b>=c.first&&b<=c.last&&v.length||(C.el.remove(),this.pool[h].push(C.el),w.delete(b));if(!v.length)continue;let R=h==="center"?`${p.first}-${p.last}`:"";for(let b=c.first;b<=c.last;b++){let C=n.getRow(b),f=r.has(C.id),m=i&&i.rowIndex===b?i.colId:"",x=a&&b>=a.r1&&b<=a.r2?`${a.c1}-${a.c2}`:"",g=this.mergeState(l,v,b,c.first),k=C.kind==="detail"?`${this.scroller.scrollLeft}:${this.scroller.clientWidth}`:"",S=`${C.id}|${this.version}|${R}|${f?1:0}|${m}|${x}|${g}|${k}`,M=w.get(b);if(!M){let E=this.pool[h].pop()??y("div","fg-row",{role:"row"});this.canvases[h].append(E),M={el:E,key:""},w.set(b,M)}M.key!==S&&(M.key=S,M.el.dataset.kind!==(C.kind??"")&&(M.el.replaceChildren(),M.el.dataset.kind=C.kind??""),C.kind==="group"?this.paintGroupRow(M.el,C,b,v,m):C.kind==="detail"?this.paintDetailRow(M.el,C,b,h):C.kind==="loading"?this.paintLoadingRow(M.el,b,v):this.paintRow(M.el,C,b,v,f,m,x?a:null,l,c.first))}}}mergeState(e,t,n,o){if(!e.size)return"";let r="";for(let i of t){let a=e.get(i.id);if(!a)continue;let l=a.start[n],d=a.end[n];r+=l===d?"n":n===Math.max(l,o)?`d${l}`:"h"}return r}paintRow(e,t,n,o,r,i,a,l=new Map,d=0){let c=this.opts.rowHeight;for(e.className=`fg-row${n%2?" fg-row-odd":""}${r?" fg-row-selected":""}${this.grid.tracker.created.has(t.data)?" fg-row-created":""}`,this.placeRow(e,n),this.grid.options.rowSelection&&e.setAttribute("aria-selected",String(r)),t.level!==void 0?e.setAttribute("aria-level",String(t.level+1)):e.removeAttribute("aria-level"),t.hasChildren?e.setAttribute("aria-expanded",String(!!t.expanded)):e.removeAttribute("aria-expanded");e.childElementCount>o.length;)e.lastElementChild.remove();for(;e.childElementCount<o.length;)e.append(y("div","fg-cell",{role:"gridcell"}));let u=!1;o.forEach((p,h)=>{let v=e.children[h];this.paintCell(v,t,n,p,r,i===p.id),p.id===this.firstDataId&&this.decorate(v,t),v.style.top=v.style.height=v.style.bottom="";let w=l.get(p.id);w&&w.start[n]!==w.end[n]&&(n===Math.max(w.start[n],d)?(v.classList.add("fg-cell-merged"),v.style.top=`${-(n-w.start[n])*c}px`,v.style.height=`${(w.end[n]-w.start[n]+1)*c}px`,v.style.bottom="auto",u=!0):v.classList.add("fg-cell-merge-hidden")),a&&p.index>=a.c1&&p.index<=a.c2&&!L(p.id)&&v.classList.add("fg-cell-range")}),e.style.zIndex=u?"1":""}paintCell(e,t,n,o,r,i){let a=this.grid.store.state.locale;e.style.left=`${o.left}px`,e.style.width=`${o.width}px`,e.dataset.col=o.id,e.setAttribute("aria-colindex",String(o.index+1));let l=i?"fg-cell fg-cell-focused":"fg-cell";if(o.id===Z){e.className=`${l} fg-cell-drag`;let h=y("span",this.grid.canMoveRows()?"fg-drag-handle":"fg-drag-handle fg-drag-disabled",{"aria-hidden":"true"});h.textContent="\u22EE\u22EE",e.replaceChildren(h);return}if(o.id===K){e.className=`${l} fg-cell-select`;let h=y("input","fg-checkbox",{type:"checkbox",tabindex:"-1","aria-label":a.selectRow});h.checked=r,e.replaceChildren(h);return}let d=o.def,c=N(d,t.data),u=H(d,a.code)(c);l+=` fg-align-${d.align??(d.type==="number"?"right":d.type==="boolean"?"center":"left")}`;let p={value:c,formatted:u,row:t.data,rowIndex:n,column:d};if(d.cellClass)try{let h=typeof d.cellClass=="function"?d.cellClass(p):d.cellClass;h&&(l+=` ${h}`)}catch{P(`cellClass of column "${o.id}" threw`)}if(this.grid.tracker.isDirty(t.data,d.field)&&(l+=" fg-cell-dirty"),n>=0&&(l+=this.grid.finder.classFor(n,o.id)),e.className=l,!d.renderer){e.textContent=u;return}try{let h=d.renderer(p);typeof h=="string"?e.innerHTML=h:e.replaceChildren(h)}catch{P(`renderer of column "${o.id}" threw; rendering an empty cell`),e.textContent=""}}cellAt(e){let t=e instanceof Element?e.closest(".fg-cell"):null,n=t?.parentElement;return!t||!n?.dataset.row||!t.dataset.col||t.closest(".fg-root")!==this.root?null:{rowIndex:Number(n.dataset.row),colId:t.dataset.col}}ensureVisible(e,t){let n=this.scroller,o=this.rowTop(e),r=o+Math.min(this.rowH(e),n.clientHeight||1/0);o<n.scrollTop?n.scrollTop=o:r>n.scrollTop+n.clientHeight&&(n.scrollTop=r-n.clientHeight);let i=t?this.grid.columns.getColumn(t):void 0;i?.region==="center"&&(i.left<n.scrollLeft?n.scrollLeft=i.left:i.left+i.width>n.scrollLeft+n.clientWidth&&(n.scrollLeft=i.left+i.width-n.clientWidth))}syncSummaryPane(e,t){if(!e){this.summaryEl?.remove(),this.summaryEl=this.summaryPanes=this.summaryInners=null;return}if(!this.summaryEl){let o=r=>({left:y("div",`${r} ${r}-left`),center:y("div",`${r} ${r}-center`),right:y("div",`${r} ${r}-right`)});this.summaryEl=y("div","fg-summary",{role:"rowgroup"}),this.summaryPanes=o("fg-summary-pane"),this.summaryInners=o("fg-summary-inner");for(let r of q)this.summaryPanes[r].append(this.summaryInners[r]),this.summaryEl.append(this.summaryPanes[r])}this.summaryEl.className=`fg-summary fg-summary-${e}`,this.summaryEl.style.height=`${t}px`;for(let o of q){let r=this.grid.columns.regionWidth(o);o!=="center"&&(this.summaryPanes[o].style.width=`${r}px`,this.summaryPanes[o].hidden=r===0),this.summaryInners[o].style.width=`${r}px`,this.summaryInners[o].style.height=`${t}px`}let n=this.scroller.offsetWidth-this.scroller.clientWidth;this.summaryPanes.center.style.marginRight=`${n}px`}renderSummary(e,t,n,o,r){for(let u of q){for(let p of this.canvasSummary[u])p.remove();this.canvasSummary[u]=[]}if(!t)return;let{columns:i}=this.grid,a=this.opts.rowHeight,l=i.region("center"),d=be(l.map(u=>u.left),l.map(u=>u.width),this.scroller.scrollLeft,this.scroller.clientWidth,Xe),c=i.displayed().filter(u=>!L(u.id));for(let u of q){let p=u==="center"?l.slice(d.first,d.last+1):i.region(u),h=t.map((v,w)=>{let R=v.label!=null?c.find(f=>!(f.id in(v.columns??{})))?.id??null:null,b=y("div","fg-row fg-summary-row",{role:"row"}),C=o||r==="top"?w*a:this.rowsHeight(e)+w*a;b.style.transform=`translateY(${C}px)`,b.style.height=`${a}px`;for(let f of p)b.append(this.summaryCell(f,v,n[w]??{},R));return b});o?this.summaryInners[u].replaceChildren(...h):(this.canvases[u].append(...h),this.canvasSummary[u]=h)}}summaryCell(e,t,n,o){let r=y("div","fg-cell",{role:"gridcell"});r.style.left=`${e.left}px`,r.style.width=`${e.width}px`,r.dataset.col=e.id;let i=e.def,a=i.align??(i.type==="number"?"right":i.type==="boolean"?"center":"left");r.className=`fg-cell fg-align-${a}`;let l=t.columns?.[e.id];if(l===void 0)return e.id===o&&(r.textContent=t.label??"",r.classList.add("fg-summary-label")),r;let d=n[e.id],c=je(l),u=this.grid.store.state.locale.code,p;if(d==null||d==="")p="";else if(typeof d=="string")p=d;else if(c.agg==="count")p=new Intl.NumberFormat(u).format(d);else{let h=i.type??(typeof d=="number"?"number":d instanceof Date?"date":void 0);p=H({...i,type:h,format:c.format??i.format},u)(d)}return r.textContent=c.prefix&&p?`${c.prefix} ${p}`:p,r}detailHeight(){let e=this.grid.options.detailHeight;return typeof e=="number"&&e>0?e:240}rowTop(e){return(this.offsets?this.offsets[e]:e*this.opts.rowHeight)+this.topOffset}rowH(e){return this.offsets?this.offsets[e+1]-this.offsets[e]:this.opts.rowHeight}rowsHeight(e){return this.offsets?this.offsets[e]:e*this.opts.rowHeight}placeRow(e,t){e.style.transform=`translateY(${this.rowTop(t)}px)`,e.style.height=`${this.rowH(t)}px`,e.dataset.row=String(t),e.setAttribute("aria-rowindex",String(t+1+this.grid.columns.depth))}decorate(e,t){let{grid:n}=this,o=n.store.state.locale,r=t.level??0,i=!!n.options.treeData,a=n.canExpandDetail(t.data);if(!i&&!a&&!r)return;e.classList.add("fg-cell-lead"),e.style.setProperty("--fg-level",String(r));let l=[];if(i)if(t.hasChildren){let d=y("button",t.expanded?"fg-tree-toggle fg-expanded":"fg-tree-toggle",{type:"button",tabindex:"-1","aria-label":t.expanded?o.collapseAll:o.expandAll,"aria-expanded":String(!!t.expanded)});d.innerHTML=Ye,l.push(d)}else l.push(y("span","fg-tree-spacer",{"aria-hidden":"true"}));if(a){let d=n.isDetailExpanded(t.data),c=y("button",d?"fg-detail-toggle fg-expanded":"fg-detail-toggle",{type:"button",tabindex:"-1","aria-expanded":String(d),"aria-label":d?o.collapseAll:o.expandAll});c.innerHTML=Ye,l.push(c)}e.prepend(...l)}paintGroupRow(e,t,n,o,r){let i=t.group,{grid:a}=this,l=a.store.state.locale;for(e.className="fg-row fg-row-group",this.placeRow(e,n),e.setAttribute("aria-level",String((t.level??0)+1)),e.setAttribute("aria-expanded",String(i.expanded)),e.removeAttribute("aria-selected"),e.style.zIndex="";e.childElementCount>o.length;)e.lastElementChild.remove();for(;e.childElementCount<o.length;)e.append(y("div","fg-cell",{role:"gridcell"}));o.forEach((d,c)=>{let u=e.children[c];u.style.left=`${d.left}px`,u.style.width=`${d.width}px`,u.style.top=u.style.height=u.style.bottom="",u.style.removeProperty("--fg-level"),u.dataset.col=d.id,u.setAttribute("aria-colindex",String(d.index+1));let p=r===d.id?" fg-cell-focused":"";if(d.id===this.groupLabelId){u.className=`fg-cell fg-group-cell${p}`,u.style.setProperty("--fg-level",String(t.level??0));let R=y("button",i.expanded?"fg-group-toggle fg-expanded":"fg-group-toggle",{type:"button",tabindex:"-1","aria-expanded":String(i.expanded),"aria-label":i.expanded?l.collapseAll:l.expandAll});R.innerHTML=Ye;let b=a.columns.getNode(i.colId)?.def,C=y("span","fg-group-label"),f=A(i.value)?l.blanks:b?H(b,l.code)(i.value):String(i.value),m=new Intl.NumberFormat(l.code);C.textContent=`${b?.header??b?.field??i.colId}: ${f} (${m.format(i.rows.length)})`,u.replaceChildren(R,C);return}let h=d.def,v=h.align??(h.type==="number"?"right":h.type==="boolean"?"center":"left");u.className=`fg-cell fg-align-${v}${p}`;let w=h.aggFunc&&!L(d.id)?a.groupAggregate(t,d.id):void 0;if(w==null||w==="")u.textContent="";else if(h.aggFunc==="count")u.textContent=new Intl.NumberFormat(l.code).format(w);else{let R=h.type??(typeof w=="number"?"number":w instanceof Date?"date":void 0);u.textContent=H({...h,type:R},l.code)(w)}u.textContent&&u.classList.add("fg-cell-agg")})}paintDetailRow(e,t,n,o){if(e.className="fg-row fg-row-detail",this.placeRow(e,n),e.style.zIndex="",o!=="center"){e.replaceChildren();return}let r=t.detailOf,i=this.details.get(r.id);if(!i){i=y("div","fg-detail");try{let a=this.grid.options.detailRenderer?.({row:r.data,rowIndex:n-1});typeof a=="string"?i.innerHTML=a:a&&i.append(a)}catch{P("detailRenderer threw; showing an empty panel")}this.details.set(r.id,i)}i.style.left=`${this.scroller.scrollLeft}px`,i.style.width=`${this.scroller.clientWidth||this.grid.columns.regionWidth("center")}px`,(e.firstChild!==i||e.childNodes.length!==1)&&e.replaceChildren(i)}paintLoadingRow(e,t,n){e.className="fg-row fg-row-loading",this.placeRow(e,t),e.setAttribute("aria-busy","true"),e.style.zIndex="",e.replaceChildren(...n.map(o=>{let r=y("div","fg-cell",{role:"gridcell"});return r.style.left=`${o.left}px`,r.style.width=`${o.width}px`,r.dataset.col=o.id,L(o.id)||r.append(y("span","fg-skeleton",{"aria-hidden":"true"})),r}))}renderPager(){let{grid:e}=this,t=e.options.pagination;if(!t){this.pagerEl?.remove(),this.pagerEl=null;return}let n=e.store.state.locale,o=e.getPage(),r=e.getPageSize(),i=e.getPageCount(),a=e.rowModel.fullCount(),l=typeof t=="object"&&Array.isArray(t.pageSizes)?t.pageSizes.filter(b=>Number.isInteger(b)&&b>0):[],d=`${o}|${r}|${i}|${a}|${n.code}|${l.join(",")}`;if(this.pagerEl&&d===this.pagerKey)return;this.pagerKey=d,this.pagerEl||(this.pagerEl=y("div","fg-pager",{role:"navigation"}),this.pagerEl.addEventListener("click",b=>{let C=b.target.closest("button[data-action]")?.dataset.action,f=e.getPage();C==="first"?e.setPage(0):C==="prev"?e.setPage(f-1):C==="next"?e.setPage(f+1):C==="last"&&e.setPage(e.getPageCount()-1)}),this.pagerEl.addEventListener("change",b=>{let C=b.target;C.classList.contains("fg-pager-size")&&e.setPageSize(Number(C.value))})),this.pagerEl.setAttribute("aria-label",n.pageSize);let c=new Intl.NumberFormat(n.code),u=a?o*r+1:0,p=Math.min(a,(o+1)*r),h=y("span","fg-pager-range");h.textContent=n.pagerRange.replace("{from}",c.format(u)).replace("{to}",c.format(p)).replace("{total}",c.format(a));let v=[h,y("span","fg-pager-spacer")];if(l.length){let b=y("label","fg-pager-size-label");b.textContent=n.pageSize;let C=y("select","fg-pager-size");for(let f of[...new Set([...l,r])].sort((m,x)=>m-x)){let m=y("option");m.value=String(f),m.textContent=c.format(f),m.selected=f===r,C.append(m)}b.append(C),v.push(b)}let w=(b,C,f,m)=>{let x=y("button","fg-pager-btn",{type:"button","aria-label":f,title:f});return x.dataset.action=b,x.textContent=C,x.disabled=m,x},R=y("span","fg-pager-page",{"aria-live":"polite"});R.textContent=n.pageOf.replace("{page}",c.format(o+1)).replace("{pages}",c.format(i)),v.push(w("first","\xAB",n.firstPage,o===0),w("prev","\u2039",n.previousPage,o===0),R,w("next","\u203A",n.nextPage,o>=i-1),w("last","\xBB",n.lastPage,o>=i-1)),this.pagerEl.replaceChildren(...v)}dropDetail(e){e===void 0?this.details.clear():this.details.delete(e)}renderedRange(){return this.lastRange}measureText(e,t){let n=getComputedStyle(this.main),o=parseFloat(getComputedStyle(this.root).getPropertyValue("--fg-font-size"))||13;this.measureCtx===void 0&&(this.measureCtx=document.createElement("canvas").getContext("2d"));let r=this.measureCtx;return r?(r.font=`${t?600:400} ${o}px ${n.fontFamily||"sans-serif"}`,r.measureText(e).width):e.length*o*.6}scrollToRow(e){this.scroller.scrollTop=this.rowTop(Math.max(0,Math.min(e,this.grid.rowModel.getRowCount())))}pageRows(){return Math.max(1,Math.floor(this.scroller.clientHeight/this.opts.rowHeight))}destroy(){this.frame&&cancelAnimationFrame(this.frame),this.scroller.removeEventListener("scroll",this.onScroll),this.root.remove()}},Ze=class{constructor(e){let t=n=>({left:y("div",`${n} ${n}-left`),center:y("div",`${n} ${n}-center`),right:y("div",`${n} ${n}-right`)});this.el=y("div",e,{role:"rowgroup"}),this.panes=t("fg-section-pane"),this.inners=t("fg-section-inner");for(let n of q)this.panes[n].append(this.inners[n]),this.el.append(this.panes[n])}size(e,t,n){this.el.style.height=`${t}px`;for(let o of q){let r=e.regionWidth(o);o!=="center"&&(this.panes[o].style.width=`${r}px`,this.panes[o].hidden=r===0),this.inners[o].style.width=`${r}px`,this.inners[o].style.height=`${t}px`}this.panes.center.style.marginRight=`${n}px`}};var Un=4,Ce=class{constructor(e){this.grid=e;this.onClick=e=>{let n=e.target.closest(".fg-group-chip-remove")?.closest(".fg-group-chip")?.dataset.col;n&&this.grid.setGroupBy(this.grid.getGroupBy().filter(o=>o!==n))};this.onPointerDown=e=>{let t=e.target,n=t.closest(".fg-group-chip");if(e.button!==0||!n||t.closest("button"))return;let o=n.dataset.col,r=e.clientX,i=!1,a=d=>{!i&&Math.abs(d.clientX-r)<Un||(i=!0,n.classList.add("fg-dragging"))},l=d=>{if(window.removeEventListener("pointermove",a),window.removeEventListener("pointerup",l),n.classList.remove("fg-dragging"),!i)return;let u=[...this.el.querySelectorAll(".fg-group-chip")].filter(h=>h!==n).filter(h=>{let v=h.getBoundingClientRect();return d.clientX>v.left+v.width/2}).length,p=this.grid.getGroupBy().filter(h=>h!==o);p.splice(u,0,o),this.grid.setGroupBy(p)};window.addEventListener("pointermove",a),window.addEventListener("pointerup",l)};this.el=y("div","fg-group-panel",{role:"toolbar"}),e.renderer.main.insertBefore(this.el,e.renderer.headerEl),this.el.addEventListener("click",this.onClick),this.el.addEventListener("pointerdown",this.onPointerDown),this.refresh()}contains(e,t){let n=this.el.getBoundingClientRect();return e>=n.left&&e<=n.right&&t>=n.top&&t<=n.bottom}highlight(e){this.el.classList.toggle("fg-group-panel-over",e)}refresh(){let{grid:e}=this,t=e.store.state.locale;this.el.setAttribute("aria-label",t.groupByThis);let n=e.getGroupBy();if(!n.length){let o=y("span","fg-group-hint");o.textContent=t.groupPanelHint,this.el.replaceChildren(o);return}this.el.replaceChildren(...n.map((o,r)=>{let i=e.columns.getNode(o)?.def,a=y("span","fg-group-chip");a.dataset.col=o;let l=y("span","fg-group-chip-label");l.textContent=i?.header??i?.field??o;let d=y("button","fg-group-chip-remove",{type:"button","aria-label":`${t.ungroup}: ${l.textContent}`});if(d.textContent="\xD7",a.append(l,d),r<n.length-1){let c=y("span","fg-group-sep",{"aria-hidden":"true"});return c.textContent="\u203A",[a,c]}return[a]}).flat())}destroy(){this.el.removeEventListener("click",this.onClick),this.el.removeEventListener("pointerdown",this.onPointerDown),this.el.remove()}};var re=class{constructor(){this.listeners=new Map}on(e,t){let n=this.listeners.get(e);return n||this.listeners.set(e,n=new Set),n.add(t),()=>{n.delete(t)}}emit(e,t){let n=this.listeners.get(e);if(n)for(let o of[...n])try{o(t)}catch(r){console.error("[FreeGrid] event listener threw",r)}}clear(){this.listeners.clear()}};var Je=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Tab","Home","End","PageUp","PageDown"]);function Qe(s,e,t,n){let o=i=>Math.max(0,Math.min(n.rows-1,i)),r=i=>Math.max(0,Math.min(n.cols-1,i));switch(s){case"ArrowUp":return{rowIndex:o(t.rowIndex-1),colIndex:t.colIndex};case"ArrowDown":return{rowIndex:o(t.rowIndex+1),colIndex:t.colIndex};case"ArrowLeft":return{rowIndex:t.rowIndex,colIndex:r(t.colIndex-1)};case"ArrowRight":return{rowIndex:t.rowIndex,colIndex:r(t.colIndex+1)};case"PageUp":return{rowIndex:o(t.rowIndex-n.pageRows),colIndex:t.colIndex};case"PageDown":return{rowIndex:o(t.rowIndex+n.pageRows),colIndex:t.colIndex};case"Home":return{rowIndex:e.ctrl?0:t.rowIndex,colIndex:0};case"End":return{rowIndex:e.ctrl?n.rows-1:t.rowIndex,colIndex:n.cols-1};case"Tab":{let i=t.rowIndex*n.cols+t.colIndex+(e.shift?-1:1);return i<0||i>=n.rows*n.cols?null:{rowIndex:Math.floor(i/n.cols),colIndex:i%n.cols}}default:return null}}var Kn={Enter:"edit",F2:"edit",Delete:"clear",Backspace:"clear","Ctrl+Z":"undo","Ctrl+Y":"redo","Ctrl+Shift+Z":"redo","Ctrl+F":"find"};function _n(s){let e=[];return(s.ctrlKey||s.metaKey)&&e.push("Ctrl"),s.altKey&&e.push("Alt"),s.shiftKey&&s.key.length>1&&e.push("Shift"),s.shiftKey&&s.key.length===1&&(s.ctrlKey||s.metaKey)&&e.push("Shift"),e.push(s.key.length===1?s.key.toUpperCase():s.key),e.join("+")}var Wn=3;function qt(s){let{renderer:e}=s,t=e.bodyEl,n=e.root,o=!1,r=f=>{let m=e.cellAt(f.target);if(!m)return null;let x=s.rowModel.getRow(m.rowIndex),g=s.columns.getColumn(m.colId);if(!x||!g)return null;let k=L(g.id)?void 0:N(g.def,x.data);return{row:x.data,rowIndex:m.rowIndex,colId:m.colId,value:k,event:f}},i=f=>{let m=f.target.closest?.(".fg-group-toggle, .fg-tree-toggle, .fg-detail-toggle"),x=m&&e.cellAt(f.target);if(!x)return!1;n.focus({preventScroll:!0}),s.setFocus(x.rowIndex,x.colId),s.setRange(null);let g=s.rowModel.getRow(x.rowIndex);return m.classList.contains("fg-detail-toggle")?s.setDetailExpanded(g.data,!s.isDetailExpanded(g.data)):s.toggleRow(x.rowIndex),!0},a=f=>{if(i(f))return;let m=e.cellAt(f.target);if(m&&s.rowModel.getRow(m.rowIndex)?.kind){n.focus({preventScroll:!0}),s.setFocus(m.rowIndex,m.colId),s.setRange(null);return}let x=r(f);if(!x)return;n.focus({preventScroll:!0});let g=o;o=!1;let k=s.store.state.focus,S=x.colId===K;g||(f.shiftKey&&k&&!S&&!L(k.colId)&&s.options.rangeSelection!==!1?s.setRange({start:k,end:{rowIndex:x.rowIndex,colId:x.colId}}):(s.setFocus(x.rowIndex,x.colId),s.setRange(null))),s.options.rowSelection&&!g&&s.selectFromClick(x.rowIndex,S||f.ctrlKey||f.metaKey,f.shiftKey),s.events.emit("cellClick",x)},l=f=>{if(f.target.closest?.("button"))return;let m=e.cellAt(f.target),x=m&&s.rowModel.getRow(m.rowIndex);if(x?.kind==="group"){s.toggleRow(m.rowIndex);return}if(x?.kind)return;let g=r(f);if(!g||(s.events.emit("cellDoubleClick",g),!s.editor.canEdit(g.rowIndex,g.colId)))return;s.columns.getColumn(g.colId).def.type==="boolean"?s.applyEdit(g.rowIndex,g.colId,g.value!==!0):s.editor.start(g.rowIndex,g.colId)},d={...Kn};for(let[f,m]of Object.entries(s.options.keymap??{}))d[f]=m===!1?"none":m;let c=f=>{let m=s.store.state.focus,x=d[_n(f)];if(x==="none")return!1;switch(x){case"edit":return!m||!s.editor.canEdit(m.rowIndex,m.colId)||s.columns.getColumn(m.colId).def.type==="boolean"?!1:(s.editor.start(m.rowIndex,m.colId),!0);case"clear":return s.clearCells(),!0;case"undo":return s.undo(),!0;case"redo":return s.redo(),!0;case"copy":return s.copyToClipboard(!1),!0;case"selectAll":return s.selectAllCells(),!0;case"find":return s.options.findBar===!1?!1:(s.finder.openBar(),!0);case"paste":return navigator.clipboard?.readText?.().then(k=>s.pasteText(k),()=>{}),!0}if(!m||!s.editor.canEdit(m.rowIndex,m.colId))return!1;let g=s.columns.getColumn(m.colId).def;if(f.key===" "&&g.type==="boolean"&&!f.ctrlKey&&!f.metaKey){let k=s.rowModel.getRow(m.rowIndex).data;return s.applyEdit(m.rowIndex,m.colId,k[g.field]!==!0),!0}return f.key.length===1&&f.key!==" "&&!f.ctrlKey&&!f.metaKey&&!f.altKey&&g.type!=="boolean"?(s.editor.start(m.rowIndex,m.colId,f.key),!0):!1},u=f=>{let m=s.store.state.focus;if(!m||f.ctrlKey||f.metaKey||f.altKey||f.shiftKey)return!1;let x=s.rowModel.getRow(m.rowIndex);if(!s.isExpandable(x))return!1;let g=x.kind==="group";if(!g&&m.colId!==s.columns.displayed().find(M=>!L(M.id))?.id)return!1;let k=!!(x.group?.expanded??x.expanded),S=s.expandKey(x);if(g&&(f.key==="Enter"||f.key===" "))s.setGroupExpanded(S,!k);else if(f.key==="ArrowRight"&&!k)s.setGroupExpanded(S,!0);else if(f.key==="ArrowLeft"&&k)s.setGroupExpanded(S,!1);else return!1;return!0},p=f=>{let m=e.cellAt(f.target);if(!m||m.colId!==Z)return!1;f.preventDefault();let x=s.rowModel.getRow(m.rowIndex);if(!x||x.kind||!s.canMoveRows())return!0;let g=x.data,k=y("div","fg-row-drop-marker"),S=null;n.classList.add("fg-row-dragging");let M=I=>{let $=document.elementFromPoint(I.clientX,I.clientY)?.closest(".fg-row[data-row]");if(!$||$.closest(".fg-root")!==n)return;let T=$.getBoundingClientRect(),D=I.clientY>T.top+T.height/2;S={index:Number($.dataset.row),after:D},k.isConnected||n.append(k),k.style.top=`${(D?T.bottom:T.top)-n.getBoundingClientRect().top-1}px`},E=()=>{if(window.removeEventListener("pointermove",M),window.removeEventListener("pointerup",E),window.removeEventListener("pointercancel",E),n.classList.remove("fg-row-dragging"),k.remove(),!S)return;let I=s.rowModel.getRow(S.index),$=I?.detailOf?.data??I?.data,T=s.store.state.data,D=T.indexOf(g),F=T.indexOf($)+(S.after||I?.kind==="detail"?1:0);D<0||F<0||(F>D&&F--,s.moveRow(g,F))};return window.addEventListener("pointermove",M),window.addEventListener("pointerup",E),window.addEventListener("pointercancel",E),!0},h=f=>{if(f.button===0&&p(f)||s.options.rangeSelection===!1||f.button!==0||f.shiftKey||f.target.closest("input, a, button"))return;let m=e.cellAt(f.target);if(!m||L(m.colId))return;let x=f.clientX,g=f.clientY,k=!1,S=E=>{if(!k&&Math.hypot(E.clientX-x,E.clientY-g)<Wn)return;let I=e.cellAt(document.elementFromPoint(E.clientX,E.clientY));!I||L(I.colId)||(k||(k=!0,n.classList.add("fg-range-dragging"),s.setFocus(m.rowIndex,m.colId)),s.setRange({start:m,end:I}))},M=()=>{window.removeEventListener("pointermove",S),window.removeEventListener("pointerup",M),n.classList.remove("fg-range-dragging"),k&&(o=!0)};window.addEventListener("pointermove",S),window.addEventListener("pointerup",M)},v=f=>{if(f.target!==n)return;let m=s.columns.displayed(),x=s.rowModel.getRowCount();if(!m.length||!x)return;if(u(f)){f.preventDefault();return}if(c(f)){f.preventDefault();return}let g=s.store.state.focus,k=f.ctrlKey||f.metaKey;if(f.key==="Escape"&&s.store.state.range){f.preventDefault(),s.setRange(null);return}if(k&&f.key.toLowerCase()==="a"&&s.options.rangeSelection!==!1){f.preventDefault(),s.selectAllCells();return}if(f.key==="ContextMenu"||f.key==="F10"&&f.shiftKey){f.preventDefault(),s.contextMenu.openAtFocus();return}if(f.key===" "&&g&&s.options.rowSelection){f.preventDefault(),s.selectFromClick(Math.min(g.rowIndex,x-1),!0,f.shiftKey);return}let S={rows:x,cols:m.length,pageRows:e.pageRows()},M=m.findIndex(T=>!L(T.id));if(s.options.rangeSelection!==!1&&f.shiftKey&&f.key!=="Tab"&&Je.has(f.key)){let T=g??{rowIndex:0,colId:m[M].id},D=s.store.state.range,F=D?.end??T,z={rowIndex:Math.min(F.rowIndex,x-1),colIndex:Math.max(0,m.findIndex(U=>U.id===F.colId))},B=Qe(f.key,{ctrl:k,shift:!1},z,S);if(!B)return;f.preventDefault();let W=m[Math.max(M,B.colIndex)].id;g||s.setFocus(T.rowIndex,T.colId),s.setRange({start:D?.start??T,end:{rowIndex:B.rowIndex,colId:W}}),e.ensureVisible(B.rowIndex,W);return}let I;if(!g)I=Je.has(f.key)&&f.key!=="Tab"?{rowIndex:0,colIndex:0}:null;else{let T=Math.max(0,m.findIndex(D=>D.id===g.colId));I=Qe(f.key,{ctrl:k,shift:f.shiftKey},{rowIndex:Math.min(g.rowIndex,x-1),colIndex:T},S)}if(!I)return;f.preventDefault();let $=m[I.colIndex].id;s.setFocus(I.rowIndex,$),s.setRange(null),e.ensureVisible(I.rowIndex,$)},w=f=>f.target?.closest?.(".fg-editor, input, textarea, select, [contenteditable]"),R=f=>f.target?.closest?.(".fg-root")!==n,b=f=>{if(w(f)||R(f))return;let m=s.selectionTSV(!1);!m||!f.clipboardData||(f.clipboardData.setData("text/plain",m),f.preventDefault())},C=f=>{if(w(f)||R(f))return;let m=f.clipboardData?.getData("text/plain");m&&(f.preventDefault(),s.pasteText(m))};return t.addEventListener("click",a),t.addEventListener("dblclick",l),t.addEventListener("pointerdown",h),n.addEventListener("keydown",v),n.addEventListener("copy",b),n.addEventListener("paste",C),()=>{t.removeEventListener("click",a),t.removeEventListener("dblclick",l),t.removeEventListener("pointerdown",h),n.removeEventListener("keydown",v),n.removeEventListener("copy",b),n.removeEventListener("paste",C)}}var Re=class{constructor(e){this.grid=e;this.open=new Set;this.el=y("div","fg-filters-panel")}refresh(){let{grid:e}=this,t=e.store.state.locale,n=e.store.state.filters,o=y("div","fg-filters-head"),r=y("span","fg-filters-title");r.textContent=t.filters;let i=y("button","fg-btn fg-filters-clear",{type:"button"});i.textContent=t.clearFilters,i.disabled=!Object.keys(n).length,i.addEventListener("click",()=>{for(let l of Object.keys(e.store.state.filters))e.setFilter(l,null)}),o.append(r,i);let a=y("div","fg-filters-list");for(let l of e.columns.displayed()){if(L(l.id)||!ne(l.def))continue;let d=y("details",n[l.id]?"fg-filters-item fg-filter-on":"fg-filters-item");d.dataset.col=l.id,d.open=this.open.has(l.id);let c=y("summary");c.textContent=l.def.header??l.def.field??l.id,d.append(c);let u=()=>{if(d.querySelector(".fg-filter"))return;let p=e.menu.filterSection(l.id,()=>{});p&&d.append(p)};d.open&&u(),d.addEventListener("toggle",()=>{d.open?(this.open.add(l.id),u()):this.open.delete(l.id)}),a.append(d)}this.el.replaceChildren(o,a)}};var jn=["sum","avg","min","max","count"],ke=class{constructor(e){this.grid=e;this.draft={rows:[],columns:[],values:[]};this.el=y("div","fg-pivot-panel")}apply(){this.grid.getPivot()?this.grid.setPivot(this.draft):this.refresh()}refresh(){let{grid:e}=this,t=e.store.state.locale,n=e.getPivot();n&&(this.draft={rows:[...n.rows],columns:[...n.columns??[]],values:n.values.map(d=>({colId:d.colId,aggFunc:typeof d.aggFunc=="string"?d.aggFunc:"sum"}))});let o=e.sourceLeaves(),r=d=>{let c=o.find(u=>u.id===d)?.def;return c?.header??c?.field??d},i=y("label","fg-pivot-mode"),a=y("input","fg-checkbox",{type:"checkbox"});a.checked=!!n,a.addEventListener("click",()=>e.setPivot(a.checked?this.draft:null)),i.append(a,document.createTextNode(t.pivotMode));let l=(d,c)=>{let u=y("div","fg-pivot-zone");u.dataset.zone=d;let p=y("div","fg-pivot-zone-title");p.textContent=c;let h=y("div","fg-pivot-chips"),v=d==="values"?this.draft.values.map(b=>b.colId):this.draft[d];v.forEach((b,C)=>{let f=y("span","fg-group-chip");f.dataset.col=b;let m=y("span","fg-group-chip-label");if(m.textContent=r(b),f.append(m),d==="values"){let g=y("select","fg-pivot-agg",{"aria-label":`${r(b)} ${t.pivotValues}`});for(let k of jn){let S=y("option");S.value=k,S.textContent=t[k],g.append(S)}g.value=this.draft.values[C].aggFunc,g.addEventListener("change",()=>{this.draft.values[C].aggFunc=g.value,this.apply()}),f.append(g)}let x=y("button","fg-group-chip-remove",{type:"button","aria-label":`${t.ungroup}: ${r(b)}`});x.textContent="\xD7",x.addEventListener("click",()=>{d==="values"?this.draft.values.splice(C,1):this.draft[d].splice(C,1),this.apply()}),f.append(x),h.append(f)});let w=y("select","fg-pivot-add",{"aria-label":`${c}: ${t.addColumn}`}),R=y("option");R.value="",R.textContent=t.addColumn,w.append(R);for(let b of o){if(v.includes(b.id)||d==="values"&&b.def.type!=="number")continue;let C=y("option");C.value=b.id,C.textContent=r(b.id),w.append(C)}return w.addEventListener("change",()=>{w.value&&(d==="values"?this.draft.values.push({colId:w.value,aggFunc:"sum"}):this.draft[d].push(w.value),this.apply())}),u.append(p,h,w),u};this.el.replaceChildren(i,l("rows",t.pivotRows),l("columns",t.pivotColumns),l("values",t.pivotValues))}};var Xn=4,Me=s=>!L(s.id)&&(s.children?s.children.some(Me):s.def.chooser!==!1),et=s=>s.def.header??s.def.field??s.id,Se=class{constructor(e){this.grid=e;this.collapsed=new Set;this.el=y("div","fg-chooser"),this.search=y("input","fg-input fg-chooser-search",{type:"search"});let t=y("label","fg-chooser-all");this.allBox=y("input","fg-checkbox",{type:"checkbox"}),this.allText=y("span"),t.append(this.allBox,this.allText),this.list=y("div","fg-chooser-list",{role:"tree"}),this.el.append(this.search,t,this.list),this.search.addEventListener("input",()=>this.refresh()),this.allBox.addEventListener("change",()=>this.setVisible(this.matchingLeaves(),this.allBox.checked)),this.list.addEventListener("change",n=>{let o=n.target,r=this.nodeOf(o);r&&this.setVisible(this.leavesOf(r),o.checked)}),this.list.addEventListener("click",n=>{let o=n.target.closest(".fg-chooser-caret"),r=o&&this.nodeOf(o);r&&(this.collapsed.has(r.id)?this.collapsed.delete(r.id):this.collapsed.add(r.id),this.refresh())}),this.list.addEventListener("pointerdown",n=>this.onPointerDown(n)),this.refresh()}refresh(){let e=this.grid.store.state.locale;this.search.placeholder=e.search,this.search.setAttribute("aria-label",e.search),this.allText.textContent=e.selectAll;let t=this.query(),n=[],o=(a,l)=>{for(let d of a)!Me(d)||t&&!this.subtreeMatches(d,t)||(n.push(this.item(d,l)),d.children&&(t||!this.collapsed.has(d.id))&&o(d.children,l+1))};o(this.grid.columns.roots(),0),this.list.replaceChildren(...n);let r=this.matchingLeaves(),i=r.filter(a=>!a.hide).length;this.allBox.checked=r.length>0&&i===r.length,this.allBox.indeterminate=i>0&&i<r.length}query(){return this.search.value.trim().toLowerCase()}subtreeMatches(e,t){for(let n=e;n;n=n.parent)if(et(n).toLowerCase().includes(t))return!0;return!!e.children&&e.children.some(n=>Me(n)&&this.subtreeMatches(n,t))}leavesOf(e){return Me(e)?e.children?e.children.flatMap(t=>this.leavesOf(t)):[e]:[]}matchingLeaves(){let e=this.query(),t=this.grid.columns.roots().flatMap(n=>this.leavesOf(n));return e?t.filter(n=>this.subtreeMatches(n,e)):t}nodeOf(e){let t=e.closest(".fg-chooser-item")?.dataset.col;return t?this.grid.columns.getNode(t):void 0}setVisible(e,t){this.grid.setColumnsVisible(e.filter(n=>!n.def.lockVisible).map(n=>n.id),t)}item(e,t){let n=y("div",e.children?"fg-chooser-item fg-chooser-group":"fg-chooser-item",{role:"treeitem"});n.dataset.col=e.id,n.style.paddingLeft=`${6+t*16}px`;let o=y("span","fg-chooser-handle",{"aria-hidden":"true"});if(o.textContent="\u22EE\u22EE",n.append(o),e.children){let d=!this.collapsed.has(e.id),c=y("button","fg-chooser-caret",{type:"button",tabindex:"-1","aria-hidden":"true"});c.textContent=d?"\u25BE":"\u25B8",n.setAttribute("aria-expanded",String(d)),n.append(c)}let r=this.leavesOf(e),i=r.filter(d=>!d.hide).length,a=y("input","fg-checkbox",{type:"checkbox","aria-label":et(e)});a.checked=r.length>0&&i===r.length,a.indeterminate=i>0&&i<r.length,a.disabled=r.every(d=>d.def.lockVisible);let l=y("span","fg-chooser-label");if(l.textContent=et(e),n.append(a,l),!e.children&&e.pinned){let d=y("span","fg-chooser-pin");d.textContent=e.pinned==="left"?"\u21E4":"\u21E5",n.append(d)}return n}onPointerDown(e){let n=e.target.closest(".fg-chooser-handle")?.closest(".fg-chooser-item"),o=n&&this.nodeOf(n);if(!n||!o||e.button!==0)return;e.preventDefault();let r=new Set(this.grid.columns.siblings(o.id).map(h=>h.id).filter(h=>h!==o.id)),i=[...this.list.querySelectorAll(".fg-chooser-item")].filter(h=>r.has(h.dataset.col)),a=e.clientY,l=!1,d=-1,c=y("div","fg-chooser-marker"),u=h=>{if(!l){if(Math.abs(h.clientY-a)<Xn||!i.length)return;l=!0,n.classList.add("fg-dragging"),this.list.append(c)}d=i.filter(R=>{let b=R.getBoundingClientRect();return h.clientY>b.top+b.height/2}).length;let v=this.list.getBoundingClientRect().top-this.list.scrollTop,w=d<i.length?i[d].getBoundingClientRect().top:i[i.length-1].getBoundingClientRect().bottom;c.style.top=`${w-v-1}px`},p=()=>{if(window.removeEventListener("pointermove",u),window.removeEventListener("pointerup",p),c.remove(),n.classList.remove("fg-dragging"),!l||d<0)return;let h=this.grid.columns.siblings(o.id).map(R=>R.id).filter(R=>R!==o.id),v=d<i.length?h.indexOf(i[d].dataset.col):h.indexOf(i[i.length-1].dataset.col)+1;v=Math.max(h.filter(L).length,v);let w=this.grid.columns.siblings(o.id).findIndex(R=>R.id===o.id);v!==w&&(this.grid.columns.move(o.id,v),this.grid.layoutChanged(),this.grid.events.emit("columnMove",{colId:o.id,toIndex:v}))};window.addEventListener("pointermove",u),window.addEventListener("pointerup",p)}},Ee=class{constructor(e){this.grid=e;this.popup=null;this.panel=null;this.off=[]}get isOpen(){return!!this.popup}open(){this.close();let e=this.grid.store.state.locale,t=y("div",`fg-menu fg-chooser-dialog fg-theme-${this.grid.store.state.theme}`,{role:"dialog","aria-label":e.chooseColumns});this.grid.applyFontTo(t);let n=y("div","fg-chooser-head"),o=y("span","fg-menu-title");o.textContent=e.chooseColumns;let r=y("button","fg-chooser-close",{type:"button","aria-label":e.close});r.textContent="\xD7",r.addEventListener("click",()=>this.close()),n.append(o,r),this.panel=new Se(this.grid),t.append(n,this.panel.el),document.body.append(t);let i=this.grid.renderer.root.getBoundingClientRect(),a=t.offsetWidth||280;t.style.left=`${Math.max(4,Math.min(i.right-a-8,window.innerWidth-a-4))}px`,t.style.top=`${Math.max(4,i.top+8)}px`,this.popup=t;let l=c=>{t.contains(c.target)||this.close()},d=c=>{c.key==="Escape"&&this.close()};document.addEventListener("pointerdown",l,!0),document.addEventListener("keydown",d,!0),this.off.push(()=>document.removeEventListener("pointerdown",l,!0),()=>document.removeEventListener("keydown",d,!0)),t.querySelector(".fg-chooser-search").focus()}refresh(){this.panel?.refresh()}close(){for(let e of this.off)e();this.off=[],this.popup?.remove(),this.popup=null,this.panel=null}},Le=class{constructor(e,t,n=["columns","filters"]){this.grid=e;this.tabs=new Map;this.el=y("div","fg-sidebar"),this.panelHost=y("div","fg-sidebar-panel"),this.columns=new Se(e),this.filters=new Re(e),this.pivot=new ke(e);let o=n.filter(i=>i==="columns"||i==="filters"||i==="pivot");o.length||o.push("columns"),this.current=o[0];let r=y("div","fg-sidebar-tabs",{role:"tablist"});for(let i of o){let a=y("button","fg-sidebar-tab",{type:"button",role:"tab"});a.dataset.panel=i,a.addEventListener("click",()=>this.toggle(!(this.isOpen&&this.current===i),i)),this.tabs.set(i,a),r.append(a)}this.el.append(this.panelHost,r),e.renderer.root.append(this.el),this.panelHost.hidden=!t,this.show(),this.refresh()}get isOpen(){return!this.panelHost.hidden}show(){this.panelHost.replaceChildren(this.current==="filters"?this.filters.el:this.current==="pivot"?this.pivot.el:this.columns.el)}toggle(e=!this.isOpen,t){t&&this.tabs.has(t)&&t!==this.current&&(this.current=t,this.show()),this.panelHost.hidden=!e,this.syncTabs(),this.grid.renderer.invalidate({header:!0,rows:!0})}syncTabs(){for(let[e,t]of this.tabs){let n=this.isOpen&&e===this.current;t.setAttribute("aria-expanded",String(n)),t.setAttribute("aria-selected",String(n))}}refresh(){let e=this.grid.store.state.locale;for(let[t,n]of this.tabs)n.textContent=t==="filters"?e.filters:t==="pivot"?e.pivot:e.columns;this.syncTabs(),this.columns.refresh(),this.filters.refresh(),this.pivot.refresh()}};var Yn=()=>typeof navigator<"u"&&/Mac|iPhone|iPad/.test(navigator.platform||navigator.userAgent||""),de=s=>Yn()?`\u2318${s}`:`Ctrl+${s}`,Ie=class{constructor(e){this.grid=e;this.popup=null;this.off=[];let t=e.renderer.root,n=o=>this.onContextMenu(o);t.addEventListener("contextmenu",n),this.detach=()=>t.removeEventListener("contextmenu",n)}destroy(){this.close(),this.detach()}onContextMenu(e){let{grid:t}=this;if(t.options.contextMenu===!1)return;let n=e.target,o=n.closest(".fg-header-cell");if(o){let i=o.dataset.col;if(!i||L(i)||o.classList.contains("fg-header-group"))return;e.preventDefault(),this.close(),t.menu.open(i,o);return}let r=t.renderer.cellAt(n);r&&(e.preventDefault(),t.renderer.root.focus({preventScroll:!0}),!L(r.colId)&&!t.rangeContains(r.rowIndex,r.colId)&&(t.setFocus(r.rowIndex,r.colId),t.setRange({start:r,end:r})),this.open(e.clientX,e.clientY,r.rowIndex,r.colId))}openAtFocus(){let e=this.grid.store.state.focus;if(!e||this.grid.options.contextMenu===!1)return;let t=this.grid.renderer.root.getBoundingClientRect(),o=this.grid.renderer.root.querySelector(`.fg-row[data-row="${e.rowIndex}"] .fg-cell[data-col="${CSS.escape(e.colId)}"]`)?.getBoundingClientRect()??t;this.open(o.left+8,o.bottom,e.rowIndex,e.colId)}defaultItems(e){let{grid:t}=this,n=t.store.state.locale,o=t.columns.getNode(e),r=o?.def,i=!!r&&!L(e),a=[{label:n.copy,shortcut:de("C"),action:()=>t.copyToClipboard(!1)},{label:n.copyWithHeaders,action:()=>t.copyToClipboard(!0)},...t.store.state.selected.size?[{label:n.copyRows,action:()=>t.copyToClipboard(!1,!0)}]:[],{label:n.paste,shortcut:de("V"),action:()=>this.pasteFromClipboard()}];(t.history.canUndo()||t.history.canRedo())&&a.push("separator",{label:n.undo,shortcut:de("Z"),action:()=>t.undo(),disabled:!t.history.canUndo()},{label:n.redo,shortcut:de("Y"),action:()=>t.redo(),disabled:!t.history.canRedo()}),t.options.rowSelection&&t.store.state.selected.size&&a.push({label:n.deleteRows,action:()=>t.api.removeSelectedRows()}),i&&(a.push("separator",{label:n.autosizeThis,action:()=>t.autoSize([e])}),r.lockVisible||a.push({label:n.hideColumn,action:()=>t.setColumnsVisible([e],!1)}),a.push({label:n.pinLeft,action:()=>t.setPinned(e,"left"),disabled:o.pinned==="left"},{label:n.pinRight,action:()=>t.setPinned(e,"right"),disabled:o.pinned==="right"},{label:n.unpin,action:()=>t.setPinned(e,null),disabled:!o.pinned})),a.push("separator"),t.options.rowSelection==="multiple"&&a.push({label:n.selectAllRows,action:()=>t.api.selectAll()}),a.push({label:n.chooseColumns,action:()=>t.chooser.open()});let l=t.rangeBounds();return l&&(l.r2>l.r1||l.c2>l.c1)&&a.push("separator",{label:n.chartBar,action:()=>t.api.createChart({type:"bar"})},{label:n.chartLine,action:()=>t.api.createChart({type:"line"})},{label:n.chartPie,action:()=>t.api.createChart({type:"pie"})}),a.push("separator",{label:n.exportCsv,action:()=>t.api.exportCsv()},{label:n.exportExcel,action:()=>t.api.exportXlsx()}),a}pasteFromClipboard(){let e=typeof navigator<"u"?navigator.clipboard:void 0,t=()=>this.grid.toast(this.grid.store.state.locale.pasteHint.replace("Ctrl+V",de("V")));if(!e?.readText)return t();e.readText().then(n=>this.grid.pasteText(n),t)}open(e,t,n,o){this.close(),this.grid.menu.close();let{grid:r}=this,i=r.rowModel.getRow(n),a=r.columns.getColumn(o),l=this.defaultItems(o),d={row:i?.data??null,rowIndex:n,colId:o,value:i&&a&&!L(o)?N(a.def,i.data):void 0,defaultItems:l},c=r.options.contextMenu,u=l;if(typeof c=="function")try{u=c(d)}catch{u=l}let p=r.store.state.locale,h=y("div",`fg-menu fg-context-menu fg-theme-${r.store.state.theme}`,{role:"menu","aria-label":p.columnMenu});r.applyFontTo(h);let v=!0;for(let m of u){if(m==="separator"){v||h.append(y("div","fg-cm-sep",{role:"separator"})),v=!0;continue}let x=y("button","fg-menu-item fg-cm-item",{type:"button",role:"menuitem"}),g=y("span","fg-cm-label");if(g.textContent=m.label,x.append(g),m.shortcut){let k=y("span","fg-cm-shortcut");k.textContent=m.shortcut,x.append(k)}x.disabled=!!m.disabled,x.addEventListener("click",()=>{this.close(),m.action()}),h.append(x),v=!1}h.lastElementChild?.classList.contains("fg-cm-sep")&&h.lastElementChild.remove(),document.body.append(h);let w=h.offsetWidth||220,R=h.offsetHeight||300;h.style.left=`${Math.max(4,Math.min(e,window.innerWidth-w-4))}px`,h.style.top=`${Math.max(4,Math.min(t,window.innerHeight-R-4))}px`,this.popup=h;let b=m=>{h.contains(m.target)||this.close()},C=m=>{if(m.key==="Escape"){this.close(),r.renderer.root.focus();return}if(m.key!=="ArrowDown"&&m.key!=="ArrowUp")return;let x=[...h.querySelectorAll("button:not(:disabled)")],g=x.indexOf(document.activeElement);x[(g+(m.key==="ArrowDown"?1:x.length-1)+x.length)%x.length]?.focus(),m.preventDefault()},f=()=>this.close();document.addEventListener("pointerdown",b,!0),document.addEventListener("keydown",C,!0),r.renderer.scroller.addEventListener("scroll",f,{passive:!0}),this.off.push(()=>document.removeEventListener("pointerdown",b,!0),()=>document.removeEventListener("keydown",C,!0),()=>r.renderer.scroller.removeEventListener("scroll",f)),h.querySelector("button:not(:disabled)")?.focus()}close(){for(let e of this.off)e();this.off=[],this.popup?.remove(),this.popup=null}};var De=class{constructor(e){this.grid=e;this.onDown=e=>{if(e.button!==0)return;e.preventDefault(),e.stopPropagation();let t=this.source();if(!t)return;let{grid:n}=this,o=null,r=n.renderer.root,i=l=>{let d=n.renderer.cellAt(document.elementFromPoint(l.clientX,l.clientY)),c=d&&n.columns.getColumn(d.colId);if(!d||!c||L(c.id))return;let u=d.rowIndex>t.r2?d.rowIndex-t.r2:d.rowIndex<t.r1?d.rowIndex-t.r1:0,p=c.index>t.c2?c.index-t.c2:c.index<t.c1?c.index-t.c1:0;!u&&!p?o=null:Math.abs(u)>=Math.abs(p)?o={r1:Math.min(t.r1,d.rowIndex),r2:Math.max(t.r2,d.rowIndex),c1:t.c1,c2:t.c2}:o={r1:t.r1,r2:t.r2,c1:Math.min(t.c1,c.index),c2:Math.max(t.c2,c.index)},this.showPreview(o)},a=()=>{if(window.removeEventListener("pointermove",i),window.removeEventListener("pointerup",a),this.preview.remove(),r.classList.remove("fg-range-dragging"),!o)return;let l=n.columns.displayed();n.fillRange({start:{rowIndex:o.r1,colId:l[o.c1].id},end:{rowIndex:o.r2,colId:l[o.c2].id}})};r.classList.add("fg-range-dragging"),window.addEventListener("pointermove",i),window.addEventListener("pointerup",a)};this.handle=y("div","fg-fill-handle",{"aria-hidden":"true"}),this.preview=y("div","fg-fill-preview",{"aria-hidden":"true"}),this.handle.addEventListener("pointerdown",this.onDown)}enabled(){let e=this.grid.options;return e.fillHandle!==!1&&e.rangeSelection!==!1}source(){let e=this.grid.rangeBounds();if(e)return e;let t=this.grid.store.state.focus,n=t&&this.grid.columns.getColumn(t.colId);return!t||!n||L(n.id)?null:{r1:t.rowIndex,r2:t.rowIndex,c1:n.index,c2:n.index}}cellEl(e,t){let n=this.grid.columns.displayed()[t];return n?this.grid.renderer.root.querySelector(`.fg-body .fg-row[data-row="${e}"] .fg-cell[data-col="${CSS.escape(n.id)}"]`):null}update(){let e=this.enabled()?this.source():null,t=this.grid.columns.displayed(),o=!!e&&t.slice(e.c1,e.c2+1).some(a=>a.def.editable&&a.def.field)&&e?this.cellEl(e.r2,e.c2):null;if(!o){this.handle.remove();return}let r=this.grid.renderer.root.getBoundingClientRect(),i=o.getBoundingClientRect();this.handle.style.left=`${i.right-r.left-4}px`,this.handle.style.top=`${i.bottom-r.top-4}px`,this.handle.isConnected||this.grid.renderer.root.append(this.handle)}showPreview(e){let t=e&&this.cellEl(e.r1,e.c1),n=e&&this.cellEl(e.r2,e.c2);if(!t||!n){this.preview.remove();return}let o=this.grid.renderer.root.getBoundingClientRect(),r=t.getBoundingClientRect(),i=n.getBoundingClientRect();Object.assign(this.preview.style,{left:`${r.left-o.left}px`,top:`${r.top-o.top}px`,width:`${i.right-r.left}px`,height:`${i.bottom-r.top}px`}),this.preview.isConnected||this.grid.renderer.root.append(this.preview)}destroy(){this.handle.remove(),this.preview.remove()}};var Zn=1e4,Te=class{constructor(e){this.grid=e;this.matches=[];this.lookup=new Map;this.index=-1;this.query="";this.bar=null;this.countEl=null}get active(){return!!this.query}classFor(e,t){if(!this.query)return"";let n=this.lookup.get(`${e}|${t}`);return n===void 0?"":n===this.index?" fg-cell-match fg-cell-match-current":" fg-cell-match"}find(e){if(this.query=e.trim().toLowerCase(),this.matches=[],this.lookup.clear(),this.index=-1,this.query){let{grid:t}=this,n=t.store.state.locale.code,o=t.columns.displayed().filter(a=>!L(a.id)),r=o.map(a=>H(a.def,n)),i=t.rowModel.rows();e:for(let a=0;a<i.length;a++)if(!i[a].kind){for(let l=0;l<o.length;l++)if(r[l](N(o[l].def,i[a].data)).toLowerCase().includes(this.query)&&(this.lookup.set(`${a}|${o[l].id}`,this.matches.length),this.matches.push({rowIndex:a,colId:o[l].id}),this.matches.length>=Zn))break e}this.matches.length&&this.go(0)}return this.updateCount(),this.grid.renderer.invalidate({rows:!0}),this.matches.length}refresh(){this.query&&this.find(this.query)}next(){this.matches.length&&this.go((this.index+1)%this.matches.length)}previous(){this.matches.length&&this.go((this.index-1+this.matches.length)%this.matches.length)}clear(){this.query="",this.matches=[],this.lookup.clear(),this.index=-1,this.grid.renderer.invalidate({rows:!0})}go(e){this.index=e;let t=this.matches[e];this.grid.setFocus(t.rowIndex,t.colId),this.grid.renderer.ensureVisible(t.rowIndex,t.colId),this.updateCount(),this.grid.renderer.invalidate({rows:!0})}updateCount(){if(!this.countEl)return;let e=this.grid.store.state.locale;this.countEl.textContent=this.query?this.matches.length?`${this.index+1}/${this.matches.length}`:e.noMatches:""}openBar(){if(this.grid.options.findBar===!1)return;if(this.bar){this.bar.querySelector("input").focus();return}let e=this.grid.store.state.locale,t=y("div","fg-findbar",{role:"search"}),n=y("input","fg-input",{type:"search",placeholder:e.findPlaceholder,"aria-label":e.findPlaceholder});this.countEl=y("span","fg-findbar-count",{"aria-live":"polite"});let o=(r,i,a)=>{let l=y("button","fg-findbar-btn",{type:"button","aria-label":r,title:r});return l.textContent=i,l.addEventListener("click",a),l};t.append(n,this.countEl,o(e.findPrevious,"\u2191",()=>this.previous()),o(e.findNext,"\u2193",()=>this.next()),o(e.close,"\xD7",()=>this.closeBar())),n.addEventListener("input",()=>this.find(n.value)),t.addEventListener("keydown",r=>{r.stopPropagation(),r.key==="Escape"?(r.preventDefault(),this.closeBar()):r.key==="Enter"&&(r.preventDefault(),r.shiftKey?this.previous():this.next())}),this.grid.renderer.root.append(t),this.bar=t,n.focus()}closeBar(){this.bar?.remove(),this.bar=null,this.countEl=null,this.clear(),this.grid.renderer.root.focus({preventScroll:!0})}};function Ut(s,e){let t=s.length,n=new Int32Array(t),o=new Int32Array(t),r=typeof e.merge=="function"?(a,l)=>{try{return!!e.merge(N(e,s[a]),N(e,s[l]),s[a],s[l])}catch{return!1}}:(()=>{let a=s.map(l=>{let d=N(e,l);return A(d)?null:G(d)});return(l,d)=>a[l]!==null&&a[l]===a[d]})(),i=0;for(let a=1;a<=t;a++)if(!(a<t&&r(a-1,a))){for(let l=i;l<a;l++)n[l]=i,o[l]=a-1;i=a}return{start:n,end:o}}var Jn=864e5;function ce(s,e){if(!s.length||e<=0)return[];let t=()=>Array.from({length:e},(r,i)=>s[i%s.length]);if(s.every(r=>typeof r=="number"&&!Number.isNaN(r))){let r=s;if(r.length===1)return t();let i=r[1]-r[0];if(!r.every((l,d)=>d===0||Math.abs(l-r[d-1]-i)<1e-9))return t();let a=r[r.length-1];return Array.from({length:e},(l,d)=>Math.round((a+i*(d+1))*1e12)/1e12)}let n=s.map(r=>r instanceof Date||typeof r=="string"&&/^\d{4}-\d{2}-\d{2}/.test(r)?_(r):null);if(n.every(Boolean)&&s.length>=2){let r=n.map(a=>Math.round(a.getTime()/Jn)),i=r[1]-r[0];if(r.every((a,l)=>l===0||a-r[l-1]===i)){let a=n[n.length-1],l=s[s.length-1]instanceof Date;return Array.from({length:e},(d,c)=>{let u=new Date(a.getFullYear(),a.getMonth(),a.getDate()+i*(c+1));return l?u:V(u)})}return t()}let o=s[s.length-1];if(typeof o=="string"&&!A(o)&&s.every(r=>typeof r=="string")){let r=/^(.*?)(\d+)$/.exec(o);if(r){let i=r[2].length,a=Number(r[2]);return Array.from({length:e},(l,d)=>`${r[1]}${String(a+d+1).padStart(i,"0")}`)}}return t()}function _t(s){let e=t=>/[\t\n\r"]/.test(t)?`"${t.replace(/"/g,'""')}"`:t;return s.map(t=>t.map(e).join(" ")).join(`\r
|
|
2
|
-
`)}function
|
|
3
|
-
`){n.push(
|
|
4
|
-
`?2:1;continue}o+=l,a=!1,r++}return(o!==""||n.length||!a)&&(n.push(o),t.push(n)),t}function Pe(s,e,t){if(A(e))return"";switch(s.type){case"number":{let n=typeof e=="number"?e:Number(e);return Number.isNaN(n)?String(e):String(n)}case"date":return V(e)??String(e);case"boolean":return e===!0?"TRUE":e===!1?"FALSE":String(e);default:return H(s,t)(e)}}var Qn=new Set(["true","1","y","yes","\uC608","o","on"]),eo=new Set(["false","0","n","no","\uC544\uB2C8\uC624","x","off"]);function to(s){let e=s.trim();if(!e)return{ok:!0,value:null};let t=!1;/^\(.*\)$/.test(e)&&(t=!0,e=e.slice(1,-1));let n=e.endsWith("%");if(n&&(e=e.slice(0,-1)),e=e.replace(/[\s,₩$€£¥원]/g,""),!/^[-+]?(\d+\.?\d*|\.\d+)(e[-+]?\d+)?$/i.test(e))return{ok:!1};let o=Number(e);return n&&(o/=100),t&&(o=-o),{ok:!0,value:Math.round(o*1e12)/1e12}}function Kt(s,e,t){let n=new Date(s,e-1,t);return n.getFullYear()===s&&n.getMonth()===e-1&&n.getDate()===t?n:null}function no(s,e){let t=s.trim();if(!t)return{ok:!0,value:null};let n=null,o=/^(\d{4})\s*[-./년]\s*(\d{1,2})\s*[-./월]\s*(\d{1,2})\s*[.일]?$/.exec(t);return o?n=Kt(+o[1],+o[2],+o[3]):(o=/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/.exec(t))?n=Kt(+o[3],+o[1],+o[2]):/^\d{4}-\d{2}-\d{2}T/.test(t)&&(n=_(t)),n?{ok:!0,value:e instanceof Date?n:V(n)}:{ok:!1}}function $e(s,e,t){switch(s.type){case"number":return to(e);case"date":return no(e,t);case"boolean":{let n=e.trim().toLowerCase();return n?Qn.has(n)?{ok:!0,value:!0}:eo.has(n)?{ok:!0,value:!1}:{ok:!1}:{ok:!0,value:null}}default:return{ok:!0,value:e}}}var oo=s=>s.map(e=>e!==null&&typeof e=="object"&&"value"in e?e:{value:e,label:String(e)}),Ae=class{constructor(e){this.grid=e;this.cur=null}get active(){return this.cur&&{rowIndex:this.cur.rowIndex,colId:this.cur.colId}}canEdit(e,t){if(L(t))return!1;let n=this.grid.columns.getColumn(t);return!!n?.def.editable&&!!n.def.field&&e>=0&&e<this.grid.rowModel.getRowCount()&&!this.grid.rowModel.getRow(e).kind}start(e,t,n){if(this.cur&&this.commit(null),!this.canEdit(e,t))return!1;let{grid:o}=this,{renderer:r}=o,i=o.columns.getColumn(t),a=i.def,l=o.rowModel.getRow(e).data,d=l[a.field];o.setFocus(e,t),r.ensureVisible(e,t),r.render();let c=r.root.querySelector(`.fg-row[data-row="${e}"] .fg-cell[data-col="${CSS.escape(t)}"]`),u=r.root.getBoundingClientRect(),p=c?.getBoundingClientRect(),h=y("div","fg-editor");h.style.left=`${(p?.left??u.left)-u.left}px`,h.style.top=`${(p?.top??u.top)-u.top}px`,h.style.width=`${p?.width||i.width}px`,h.style.height=`${p?.height||r.opts.rowHeight}px`;let v,w,R=()=>{},b=a.editor;if(typeof b=="function"){let g=b({value:d,row:l,column:a,initialText:n});v=g.el,w=()=>({value:g.getValue()}),R=()=>g.destroy?.(),h.append(v),queueMicrotask(()=>g.focus?.())}else if(b?.type==="select"){let g=oo(typeof b.options=="function"?b.options(l):b.options),k=y("select","fg-editor-control");g.forEach((S,M)=>{let E=y("option");E.value=String(M),E.textContent=S.label??String(S.value),k.append(E)}),k.selectedIndex=Math.max(0,g.findIndex(S=>Object.is(S.value,d))),v=k,w=()=>({value:g[k.selectedIndex]?.value??null}),h.append(k)}else{let k=b?.type==="textarea"?y("textarea","fg-editor-control"):y("input","fg-editor-control");k instanceof HTMLInputElement&&(k.type=a.type==="date"&&n===void 0?"date":"text",a.type==="number"&&(k.inputMode="decimal"));let S=a.type==="date"?V(d)??"":A(d)?"":String(d);k.value=n??S,v=k,w=()=>({text:k.value}),h.append(k)}v.setAttribute("aria-label",a.header??a.field??t);let C=y("div","fg-editor-msg",{role:"alert"});h.append(C);let f=g=>{if(g.stopPropagation(),g.key==="Escape")g.preventDefault(),this.cancel();else if(g.key==="Enter"){if(v instanceof HTMLTextAreaElement&&!(g.ctrlKey||g.metaKey))return;g.preventDefault(),this.commit(g.shiftKey?"up":"down")}else g.key==="Tab"&&(g.preventDefault(),this.commit(g.shiftKey?"left":"right"))},m=g=>{this.cur?.wrap===h&&!h.contains(g.relatedTarget)&&this.commit(null)},x=()=>this.commit(null);return h.addEventListener("keydown",f),h.addEventListener("focusout",m),r.scroller.addEventListener("scroll",x,{passive:!0}),r.root.append(h),this.cur={rowIndex:e,colId:t,row:l,def:a,wrap:h,read:w,dispose:()=>{h.removeEventListener("keydown",f),h.removeEventListener("focusout",m),r.scroller.removeEventListener("scroll",x),R(),h.remove()}},typeof b!="function"&&(v.focus(),n===void 0&&v instanceof HTMLInputElement&&v.type==="text"&&v.select()),o.events.emit("editStart",{rowIndex:e,colId:t}),!0}commit(e){let t=this.cur;if(!t)return!1;let{grid:n}=this,o=n.store.state.locale,r=t.def.field,i=t.row[r],a=t.read(),l;if("text"in a){let d=$e(t.def,a.text,i);if(!d.ok)return this.fail(a.text,o.invalidValue);l=d.value}else l=a.value;if(t.def.required&&A(l))return this.fail(l,o.required);if(t.def.validate){let d;try{d=t.def.validate(l,t.row)}catch{d=o.invalidValue}if(d!==!0)return this.fail(l,typeof d=="string"&&d?d:o.invalidValue)}return this.close(!0),n.applyEdit(t.rowIndex,t.colId,l),this.move(t.rowIndex,t.colId,e),!0}cancel(){this.close(!1)}fail(e,t){let n=this.cur;return n.wrap.classList.add("fg-editor-invalid"),n.wrap.querySelector(".fg-editor-msg").textContent=t,this.grid.events.emit("validationFailed",{rowIndex:n.rowIndex,colId:n.colId,value:e,message:t}),!1}close(e){let t=this.cur;t&&(this.cur=null,t.dispose(),this.grid.renderer.root.focus({preventScroll:!0}),this.grid.events.emit("editStop",{rowIndex:t.rowIndex,colId:t.colId,committed:e}))}move(e,t,n){if(!n)return;let{grid:o}=this,r=o.rowModel.getRowCount();if(n==="down"||n==="up"){let c=Math.max(0,Math.min(r-1,e+(n==="down"?1:-1)));o.setFocus(c,t),o.renderer.ensureVisible(c,t);return}let i=o.columns.displayed().filter(c=>this.canEdit(e,c.id)||c.def.editable);if(!i.length)return;let a=n==="right"?1:-1,l=e,d=i.findIndex(c=>c.id===t)+a;d>=i.length&&(d=0,l++),d<0&&(d=i.length-1,l--),!(l<0||l>=r)&&this.start(l,i[d].id)}};var Ne=class{constructor(e=200){this.limit=e;this.entries=[];this.index=0}push(e){this.entries.splice(this.index),this.entries.push(e),this.entries.length>this.limit&&this.entries.shift(),this.index=this.entries.length}canUndo(){return this.index>0}canRedo(){return this.index<this.entries.length}undo(){return this.canUndo()?(this.entries[--this.index].undo(),!0):!1}redo(){return this.canRedo()?(this.entries[this.index++].redo(),!0):!1}clear(){this.entries=[],this.index=0}};var jt=(s,e)=>s instanceof Date&&e instanceof Date?s.getTime()===e.getTime():Object.is(s,e),Fe=class{constructor(){this.originals=new Map;this.created=new Set;this.deleted=new Map}beforeChange(e){!this.created.has(e)&&!this.originals.has(e)&&this.originals.set(e,{...e})}isDirty(e,t){if(!t||this.created.has(e))return!1;let n=this.originals.get(e);return!!n&&!jt(n[t],e[t])}diff(e,t){let n=this.originals.get(e);return n?t.filter(o=>!jt(n[o],e[o])):[]}get size(){return this.originals.size+this.created.size+this.deleted.size}reset(){this.originals.clear(),this.created.clear(),this.deleted.clear()}};function ue(s){return{r1:Math.min(s.start.rowIndex,s.end.rowIndex),r2:Math.max(s.start.rowIndex,s.end.rowIndex),c1:Math.min(s.start.colIndex,s.end.colIndex),c2:Math.max(s.start.colIndex,s.end.colIndex)}}function Xt(s,e,t){return e>=s.r1&&e<=s.r2&&t>=s.c1&&t<=s.c2}var ro=5;function Yt(s,e){let t=o=>s(o),n=o=>{window.removeEventListener("pointermove",t),window.removeEventListener("pointerup",n),window.removeEventListener("pointercancel",n),e(o)};window.addEventListener("pointermove",t),window.addEventListener("pointerup",n),window.addEventListener("pointercancel",n)}function so(s,e,t){let n=s.columns.getColumn(t);if(!n)return;let o=e.clientX,r=n.width;s.renderer.root.classList.add("fg-resizing"),Yt(i=>{s.columns.setWidth(t,r+i.clientX-o),s.layoutChanged()},()=>{s.renderer.root.classList.remove("fg-resizing");let i=s.columns.getColumn(t)?.width??r;i!==r&&s.events.emit("columnResize",{colId:t,width:i})})}function io(s,e){let t=s.columns.getNode(e);return!!s.groupPanel&&!!t&&!t.children&&!s.options.treeData&&!s.getGroupBy().includes(e)}function ao(s,e,t,n){let o=new Set(s.columns.siblings(e).map(l=>l.id).filter(l=>l!==e&&!L(l))),r=[...n.querySelectorAll(".fg-header-cell")].filter(l=>o.has(l.dataset.col)).map(l=>({id:l.dataset.col,el:l})),i=y("div",`fg-drag-ghost fg-theme-${s.store.state.theme}`);i.textContent=t.querySelector(".fg-header-label")?.textContent??"",s.applyFontTo(i),document.body.append(i);let a=y("div","fg-drop-marker");return a.style.height=`${s.renderer.headerEl.offsetHeight}px`,s.renderer.root.append(a),t.classList.add("fg-dragging"),{ghost:i,marker:a,cell:t,sibs:r,target:-1,overPanel:!1}}function lo(s,e,t,n,o){t.ghost.style.transform=`translate(${n+12}px, ${o+8}px)`,t.overPanel=io(s,e)&&!!s.groupPanel?.contains(n,o),s.groupPanel?.highlight(t.overPanel),t.marker.hidden=t.overPanel;let r=0;for(let l of t.sibs){let d=l.el.getBoundingClientRect();n>d.left+d.width/2&&r++}t.target=r;let i=s.renderer.root.getBoundingClientRect().left,a=r<t.sibs.length?t.sibs[r].el.getBoundingClientRect().left:t.sibs.length?t.sibs[t.sibs.length-1].el.getBoundingClientRect().right:t.cell.getBoundingClientRect().left;t.marker.style.left=`${a-i-1}px`}function co(s,e,t){if(t.ghost.remove(),t.marker.remove(),t.cell.classList.remove("fg-dragging"),t.overPanel){s.groupPanel?.highlight(!1),s.setGroupBy([...s.getGroupBy(),e]);return}if(t.target<0||!t.sibs.length)return;let n=s.columns.siblings(e),o=n.findIndex(a=>a.id===e),r=n.map(a=>a.id).filter(a=>a!==e),i=t.target<t.sibs.length?r.indexOf(t.sibs[t.target].id):r.indexOf(t.sibs[t.sibs.length-1].id)+1;i=Math.max(r.filter(L).length,i),i!==o&&(s.columns.move(e,i),s.layoutChanged(),s.events.emit("columnMove",{colId:e,toIndex:i}))}function uo(s,e,t,n){let o=s.columns.getNode(t),r=n.closest(".fg-header-pane");if(!o||!r)return;let i=e.clientX,a=null;Yt(l=>{if(!a){if(Math.abs(l.clientX-i)<ro)return;a=ao(s,t,n,r)}lo(s,t,a,l.clientX,l.clientY)},l=>{a?co(s,t,a):!o.children&&J(o.def)&&s.toggleSort(t,l.shiftKey||l.ctrlKey||l.metaKey)})}function Zt(s){let e=s.renderer.headerEl,t=o=>{if(o.button!==0)return;let r=o.target,i=r.closest(".fg-header-cell"),a=i?.dataset.col;!i||!a||L(a)||r.closest(".fg-menu-btn")||(o.preventDefault(),r.closest(".fg-resize")?so(s,o,a):uo(s,o,a,i))},n=o=>{let r=o.target,i=r.closest(".fg-menu-btn");if(i){let a=i.closest(".fg-header-cell")?.dataset.col;a&&s.menu.toggle(a,i);return}r.closest(".fg-select-all")&&s.toggleSelectAll()};return e.addEventListener("pointerdown",t),e.addEventListener("click",n),()=>{e.removeEventListener("pointerdown",t),e.removeEventListener("click",n)}}var ho=/^[=+\-@\t\r]/;function Jt(s,e=","){let t=n=>{let o=n.value;return n.text&&ho.test(o)&&(o=`'${o}`),o.includes(e)||/["\r\n]/.test(o)||/^\s|\s$/.test(o)?`"${o.replace(/"/g,'""')}"`:o};return s.map(n=>n.map(t).join(e)).join(`\r
|
|
5
|
-
`)}function
|
|
6
|
-
`,st="http://schemas.openxmlformats.org/spreadsheetml/2006/main",ie="http://schemas.openxmlformats.org/officeDocument/2006/relationships";function yo(s){let e=new Set;return s.map((t,n)=>{let o=(t.name??`Sheet${n+1}`).replace(/[[\]:*?/\\]/g," ").slice(0,31).trim()||`Sheet${n+1}`,r=o;for(let i=2;e.has(r.toLowerCase());i++)r=`${o.slice(0,28)} (${i})`;return e.add(r.toLowerCase()),r})}function it(s){let e=new Map([["General",0]]),t=[],n=['<xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>'],o=new Map([["General|0",0]]),r=(c,u)=>{let p=`${c}|${u?1:0}`,h=o.get(p);if(h!==void 0)return h;let v=e.get(c);return v===void 0&&(v=164+t.length,t.push(c),e.set(c,v)),h=n.length,n.push(`<xf numFmtId="${v}" fontId="${u?1:0}" fillId="${u?2:0}" borderId="0" xfId="0"${v?' applyNumberFormat="1"':""}${u?' applyFont="1" applyFill="1"':""}/>`),o.set(p,h),h},i=yo(s),a=s.map(c=>{let u=c.rows.map((C,f)=>{let m=C.map((x,g)=>{let k=x!==null&&typeof x=="object"&&!(x instanceof Date)?x:{v:x},S=`${rt(g)}${f+1}`,M=k.v,E=k.fmt??"General";M instanceof Date&&(Number.isNaN(M.getTime())?M=null:(E==="General"&&(E="yyyy-mm-dd"),M=go(M)));let I=r(E,!!k.bold),$=I?` s="${I}"`:"";return M==null||M===""?$?`<c r="${S}"${$}/>`:"":typeof M=="number"?Number.isFinite(M)?`<c r="${S}"${$}><v>${M}</v></c>`:"":typeof M=="boolean"?`<c r="${S}"${$} t="b"><v>${M?1:0}</v></c>`:`<c r="${S}"${$} t="inlineStr"><is><t xml:space="preserve">${Be(String(M))}</t></is></c>`}).join("");return`<row r="${f+1}">${m}</row>`}).join(""),p=Math.max(0,...c.rows.map(C=>C.length)),h=c.freezeRows??0,v=h?`<sheetViews><sheetView workbookViewId="0"><pane ySplit="${h}" topLeftCell="A${h+1}" activePane="bottomLeft" state="frozen"/></sheetView></sheetViews>`:'<sheetViews><sheetView workbookViewId="0"/></sheetViews>',w=c.widths?.length?`<cols>${c.widths.map((C,f)=>`<col min="${f+1}" max="${f+1}" width="${Math.max(4,Math.min(120,C)).toFixed(1)}" customWidth="1"/>`).join("")}</cols>`:"",R=c.autoFilter&&p&&h&&c.rows.length>=h?`<autoFilter ref="A${h}:${rt(p-1)}${c.rows.length}"/>`:"",b=c.merges?.length?`<mergeCells count="${c.merges.length}">${c.merges.map(C=>`<mergeCell ref="${C}"/>`).join("")}</mergeCells>`:"";return`${se}<worksheet xmlns="${st}" xmlns:r="${ie}">${v}<sheetFormatPr defaultRowHeight="15"/>${w}<sheetData>${u}</sheetData>${R}${b}</worksheet>`}),l=`${se}<styleSheet xmlns="${st}">`+(t.length?`<numFmts count="${t.length}">${t.map((c,u)=>`<numFmt numFmtId="${164+u}" formatCode="${Be(c)}"/>`).join("")}</numFmts>`:"")+`<fonts count="2"><font><sz val="11"/><name val="Calibri"/></font><font><b/><sz val="11"/><name val="Calibri"/></font></fonts><fills count="3"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill><fill><patternFill patternType="solid"><fgColor rgb="FFF2F4F7"/><bgColor indexed="64"/></patternFill></fill></fills><borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="${n.length}">${n.join("")}</cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles></styleSheet>`,d=[{name:"[Content_Types].xml",data:`${se}<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>`+s.map((c,u)=>`<Override PartName="/xl/worksheets/sheet${u+1}.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>`).join("")+"</Types>"},{name:"_rels/.rels",data:`${se}<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="${ie}/officeDocument" Target="xl/workbook.xml"/></Relationships>`},{name:"xl/workbook.xml",data:`${se}<workbook xmlns="${st}" xmlns:r="${ie}"><sheets>`+i.map((c,u)=>`<sheet name="${Be(c)}" sheetId="${u+1}" r:id="rId${u+1}"/>`).join("")+"</sheets>"+(s.some(c=>c.autoFilter&&c.freezeRows)?`<definedNames>${s.map((c,u)=>{let p=Math.max(0,...c.rows.map(h=>h.length));return c.autoFilter&&c.freezeRows&&p?`<definedName name="_xlnm._FilterDatabase" localSheetId="${u}" hidden="1">'${Be(i[u].replace(/'/g,"''"))}'!$A$${c.freezeRows}:$${rt(p-1)}$${c.rows.length}</definedName>`:""}).join("")}</definedNames>`:"")+"</workbook>"},{name:"xl/_rels/workbook.xml.rels",data:`${se}<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">`+s.map((c,u)=>`<Relationship Id="rId${u+1}" Type="${ie}/worksheet" Target="worksheets/sheet${u+1}.xml"/>`).join("")+`<Relationship Id="rId${s.length+1}" Type="${ie}/styles" Target="styles.xml"/></Relationships>`},{name:"xl/styles.xml",data:l},...a.map((c,u)=>({name:`xl/worksheets/sheet${u+1}.xml`,data:c}))];return en(d)}var bo=new Set([14,15,16,17,18,19,20,21,22,27,30,36,45,46,47,50,57]);function xo(s){let e=s.replace(/"[^"]*"/g,"").replace(/\[[^\]]*\]/g,"").replace(/\\./g,"");return/[dmyhs]/i.test(e)&&!/^[#0.,%\s]*$/.test(e)}function he(s){return s?new DOMParser().parseFromString(new TextDecoder().decode(s),"application/xml"):null}var X=(s,e)=>[...s.getElementsByTagNameNS("*",e)];function Co(s){let e=0;for(let t of s){let n=t.charCodeAt(0);if(n<65||n>90)break;e=e*26+(n-64)}return e-1}async function at(s){let e=s instanceof Uint8Array?s:new Uint8Array(s);if(!He(e))throw new Error("Not an xlsx file");let t=await tn(e),n=he(t.get("xl/workbook.xml"));if(!n)throw new Error("xlsx has no workbook");let o=he(t.get("xl/_rels/workbook.xml.rels")),r=new Map(o?X(o,"Relationship").map(h=>[h.getAttribute("Id")??"",h.getAttribute("Target")??""]):[]),i=he(t.get("xl/sharedStrings.xml")),a=i?X(i,"si").map(h=>X(h,"t").map(v=>v.textContent??"").join("")):[],l=he(t.get("xl/styles.xml")),d=new Map(l?X(l,"numFmt").map(h=>[Number(h.getAttribute("numFmtId")),h.getAttribute("formatCode")??""]):[]),c=l?X(l,"cellXfs")[0]:void 0,u=(c?[...c.children].filter(h=>h.localName==="xf"):[]).map(h=>{let v=Number(h.getAttribute("numFmtId")??0);return bo.has(v)||d.has(v)&&xo(d.get(v))}),p=[];for(let h of X(n,"sheet")){let v=h.getAttribute("r:id")??h.getAttributeNS(ie,"id")??"",w=r.get(v)??"";w=w.startsWith("/")?w.slice(1):`xl/${w}`;let R=he(t.get(w)),b=[];if(R){for(let C of X(R,"row")){let f=Number(C.getAttribute("r")??b.length+1)-1,m=[],x=0;for(let g of[...C.children].filter(k=>k.localName==="c")){let k=g.getAttribute("r"),S=k?Co(k):x;x=S+1;let M=g.getAttribute("t"),E=X(g,"v")[0]?.textContent??null,I=null;if(M==="s")I=E===null?null:a[Number(E)]??"";else if(M==="inlineStr")I=X(g,"t").map($=>$.textContent??"").join("");else if(M==="b")I=E==="1";else if(M==="str"||M==="e")I=E;else if(E!==null&&E!==""){let $=Number(E);I=u[Number(g.getAttribute("s")??0)]?wo($):$}m[S]=I}for(let g=0;g<m.length;g++)m[g]===void 0&&(m[g]=null);b[f]=m}for(let C=0;C<b.length;C++)b[C]||(b[C]=[])}p.push({name:h.getAttribute("name")??`Sheet${p.length+1}`,rows:b})}return p}function rn(s,e){return Array.isArray(e)?e.flatMap(t=>{let n=s.columns.getNode(t);return!n||n.children||L(t)?(P(`export: unknown column "${t}"`),[]):[{id:t,def:n.def,node:n,width:s.columns.getColumn(t)?.width??n.width}]}):s.columns.displayed().filter(t=>!L(t.id)).map(t=>({id:t.id,def:t.def,node:t.node,width:t.width}))}function sn(s,e){return e==="selected"?s.selectedRows():e==="all"?s.rowModel.server?s.rowModel.dataRows().map(t=>t.data):s.viewRows():s.rowModel.dataRows().map(t=>t.data)}var lt=(s,e)=>s.header??s.field??e;function dt(s,e={}){let t=rn(s,e.columns),n=s.store.state.locale.code,o=typeof e.separator=="string"&&e.separator.length===1?e.separator:",",r=sn(s,e.rows).map(i=>t.map(a=>{let l=N(a.def,i),d=a.def.type;return{value:Pe(a.def,l,n),text:!(d==="number"||d==="date"||d==="boolean")||typeof l=="string"}}));return e.headers!==!1&&r.unshift(t.map(i=>({value:lt(i.def,i.id),text:!0}))),Jt(r,o)}function Ro(s){let e=s.format;if(s.type==="date")return e==="datetime"?"yyyy-mm-dd hh:mm":e==="time"?"hh:mm":"yyyy-mm-dd";if(s.type!=="number"||e==null)return null;if(typeof e=="string")return e==="integer"?"#,##0":e==="percent"?"0%":e.startsWith("currency:")?"#,##0.##":/^[#0,.%]+$/.test(e)?e:null;let t=e,n=t.maximumFractionDigits??t.minimumFractionDigits,o=n?`.${"0".repeat(Math.min(10,n))}`:"";return t.style==="percent"?`0${o}%`:`${t.useGrouping===!1?"0":"#,##0"}${o}`}function ct(s,e={}){let t=rn(s,e.columns),n=s.store.state.locale.code,o=[],r=[],i=0;if(e.headers!==!1){let d=t.map(u=>{let p=[];for(let h=u.node;h;h=h.parent)p.unshift(h);return p});i=Math.max(1,...d.map(u=>u.length));let c=u=>{let p="";for(let h=u+1;h>0;h=Math.floor((h-1)/26))p=String.fromCharCode(65+(h-1)%26)+p;return p};for(let u=0;u<i;u++){let p=[];for(let h=0;h<t.length;h++){let v=d[h],w=v.length-1;if(u<w){let R=v[u],b=h>0?d[h-1][u]:null;if(p.push({v:b===R?null:lt(R.def,R.id),bold:!0}),b!==R){let C=h;for(;C+1<t.length&&d[C+1][u]===R;)C++;C>h&&r.push(`${c(h)}${u+1}:${c(C)}${u+1}`)}}else u===w?(p.push({v:lt(t[h].def,t[h].id),bold:!0}),i-1>u&&r.push(`${c(h)}${u+1}:${c(h)}${i}`)):p.push({v:null,bold:!0})}o.push(p)}}let a=t.map(d=>Ro(d.def)),l=t.map(d=>H(d.def,n));for(let d of sn(s,e.rows))o.push(t.map((c,u)=>{let p=N(c.def,d);if(A(p))return null;let h=a[u]??void 0;switch(c.def.type){case"number":{let v=typeof p=="number"?p:Number(p);return Number.isFinite(v)?{v,fmt:h}:String(p)}case"date":{let v=_(p);return v?{v,fmt:h}:String(p)}case"boolean":return typeof p=="boolean"?p:String(p);default:return l[u](p)}}));return it([{name:e.sheetName??"Sheet1",rows:o,widths:t.map(d=>Math.round(d.width/7)),merges:r,freezeRows:i,autoFilter:i>0}])}function ut(s,e,t){if(typeof URL>"u"||typeof URL.createObjectURL!="function"||typeof document>"u"){P("downloads are not supported in this environment");return}let n=URL.createObjectURL(new Blob(e,{type:t})),o=document.createElement("a");o.href=n,o.download=s,o.style.display="none",document.body.append(o),o.click(),o.remove(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}var Oe=s=>String(s??"").trim().toLowerCase();function ko(s){return s==null?"":s instanceof Date?s.getHours()||s.getMinutes()||s.getSeconds()?s.toISOString():V(s)??"":String(s)}async function an(s,e,t={}){let n=e instanceof Uint8Array?e:new Uint8Array(e instanceof ArrayBuffer?e:await e.arrayBuffer()),o;if(He(n)){let w=await at(n),R=typeof t.sheet=="string"?w.find(b=>b.name===t.sheet):w[typeof t.sheet=="number"?t.sheet:0];if(!R)throw new Error(`Sheet ${String(t.sheet)} not found`);o=R.rows}else{let w=new TextDecoder().decode(n);o=ot(w,nt(w))}if(!o.length)return{rows:[],skipped:0};let r=[],i=w=>w.forEach(R=>R.children?i(R.children):!L(R.id)&&R.def.field&&r.push(R));i(s.columns.roots());let a=w=>{let R=Oe(w);return R?r.find(b=>Oe(b.def.header)===R)??r.find(b=>Oe(b.def.field)===R||Oe(b.id)===R)??null:null},l=1,d=new Set(o[0].map(a).filter(Boolean));for(;l<Math.min(o.length,5);){let R=(o[l]??[]).filter(C=>C!=null&&String(C).trim()!==""),b=R.map(a).filter(C=>C&&!d.has(C));if(!R.length||!R.every(C=>typeof C=="string")||!b.length)break;b.forEach(C=>d.add(C)),l++}let c=Math.max(...o.slice(0,l).map(w=>w?.length??0)),u=Array.from({length:c},(w,R)=>{for(let b=l-1;b>=0;b--){let C=o[b]?.[R];if(C!=null&&String(C).trim()!=="")return a(C)}return null}),p=s.store.state.data[0],h=0,v=[];for(let w of o.slice(l)){if(!w||w.every(b=>b==null||String(b).trim()===""))continue;let R={};u.forEach((b,C)=>{if(!b)return;let f=b.def,m=ko(w[C]),x=s.acceptText(f,R,m,p?.[f.field]);x.ok?m===""&&(x.value===null||x.value==="")||(R[f.field]=x.value):h++}),v.push(R)}return t.mode==="replace"?s.setData(v):s.addRows(v),{rows:v,skipped:h}}var Mo="http://www.w3.org/2000/svg";var ft=["var(--fg-accent, #2563eb)","#f59e0b","#10b981","#ef4444","#8b5cf6","#06b6d4","#ec4899","#84cc16","#f97316","#64748b","#14b8a6","#a855f7"],ae=s=>ft[s%ft.length];function O(s,e={},t=""){let n=document.createElementNS(Mo,s);t&&n.setAttribute("class",t);for(let[o,r]of Object.entries(e))n.setAttribute(o,String(r));return n}function ht(s,e){let t=O("title");t.textContent=e,s.append(t)}function So(s,e,t=5){let n=Math.min(0,s),o=Math.max(0,e);n===o&&(o=n+1);let r=(o-n)/t,i=10**Math.floor(Math.log10(r)),a=[1,2,5,10].map(d=>d*i).find(d=>d>=r);n=Math.floor(n/a)*a,o=Math.ceil(o/a)*a;let l=[];for(let d=n;d<=o+a/2;d+=a)l.push(Math.round(d/a)*a);return l}function pt(s,e){let t=new Intl.NumberFormat(e.locale,{maximumFractionDigits:2}),n=new Intl.NumberFormat(e.locale,{notation:"compact",maximumFractionDigits:1}),o=O("svg",{viewBox:"0 0 640 360",role:"img",preserveAspectRatio:"xMidYMid meet"},`fg-chart fg-chart-is-${e.type}`);e.title&&o.setAttribute("aria-label",e.title);let r=e.series.slice(0,ft.length),i=e.categories,a=16;if(e.title){let M=O("text",{x:320,y:22,"text-anchor":"middle"},"fg-chart-title");M.textContent=e.title,o.append(M),a=36}let l=O("g",{},"fg-chart-legend"),d=e.type==="pie"?i:r.map(M=>M.name),c=16;d.forEach((M,E)=>{let I=O("g",{transform:`translate(${c},350)`},"fg-chart-legend-item");I.append(O("rect",{x:0,y:-9,width:10,height:10,rx:2,fill:ae(E)}));let $=O("text",{x:14,y:0});$.textContent=M,I.append($),l.append(I),c+=24+Math.min(140,M.length*7)});let u=308;if(e.type==="pie"){let M=(r[0]?.values??[]).map(F=>F!==null&&F>0?F:0),E=M.reduce((F,z)=>F+z,0),I=640/2,$=(a+u)/2,T=Math.max(10,(u-a)/2-6),D=-Math.PI/2;M.forEach((F,z)=>{if(!F||!E)return;let B=D+F/E*Math.PI*2,W=B-D>Math.PI?1:0,U=xt=>`${I+T*Math.cos(xt)},${$+T*Math.sin(xt)}`,Ke=F===E?`M${I-T},${$}a${T},${T} 0 1,0 ${2*T},0a${T},${T} 0 1,0 ${-2*T},0`:`M${I},${$}L${U(D)}A${T},${T} 0 ${W} 1 ${U(B)}Z`,le=O("path",{d:Ke,fill:ae(z)},"fg-chart-slice");ht(le,`${i[z]}: ${t.format(F)} (${Math.round(F/E*1e3)/10}%)`),o.append(le),D=B}),o.append(l),s.replaceChildren(o);return}let p=e.type==="stackedBar",h=0,v=0;i.forEach((M,E)=>{let I=0,$=0;for(let T of r){let D=T.values[E];D==null||!Number.isFinite(D)||(p?D>=0?I+=D:$+=D:(v=Math.max(v,D),h=Math.min(h,D)))}p&&(v=Math.max(v,I),h=Math.min(h,$))});let w=So(h,v),R=w[0],b=w[w.length-1],C=56,f=624,m=M=>u-(M-R)/(b-R)*(u-a),x=O("g",{},"fg-chart-axis");for(let M of w){x.append(O("line",{x1:C,x2:f,y1:m(M),y2:m(M)},M===0?"fg-chart-zero":"fg-chart-grid"));let E=O("text",{x:C-6,y:m(M)+4,"text-anchor":"end"});E.textContent=n.format(M),x.append(E)}let g=(f-C)/Math.max(1,i.length),k=Math.max(1,Math.ceil(i.length/Math.floor((f-C)/56)));i.forEach((M,E)=>{if(E%k)return;let I=O("text",{x:C+g*(E+.5),y:u+16,"text-anchor":"middle"});I.textContent=M.length>12?`${M.slice(0,11)}\u2026`:M,x.append(I)}),o.append(x);let S=O("g",{},"fg-chart-plot");if(e.type==="bar"||p){let M=g*.72,E=p?M:M/Math.max(1,r.length);i.forEach((I,$)=>{let T=0,D=0;r.forEach((F,z)=>{let B=F.values[$];if(B==null||!Number.isFinite(B))return;let W=0,U=B;p&&(W=B>=0?T:D,U=W+B,B>=0?T=U:D=U);let Ke=C+g*$+(g-M)/2+(p?0:E*z),le=O("rect",{x:Ke,y:Math.min(m(W),m(U)),width:Math.max(1,E-2),height:Math.max(.5,Math.abs(m(U)-m(W))),fill:ae(z),rx:2},"fg-chart-bar");ht(le,`${F.name} \xB7 ${I}: ${t.format(B)}`),S.append(le)})})}else r.forEach((M,E)=>{let I=M.values.map((D,F)=>D==null||!Number.isFinite(D)?null:[C+g*(F+.5),m(D),D]),$="",T=!1;for(let D of I){if(!D){T=!1;continue}$+=`${T?"L":"M"}${D[0]},${D[1]}`,T=!0}if(e.type==="area"){let D=I.filter(F=>!!F);if(D.length){let F=`M${D[0][0]},${m(0)}${D.map(z=>`L${z[0]},${z[1]}`).join("")}L${D[D.length-1][0]},${m(0)}Z`;S.append(O("path",{d:F,fill:ae(E),"fill-opacity":.18},"fg-chart-area"))}}S.append(O("path",{d:$,fill:"none",stroke:ae(E),"stroke-width":2.2,"stroke-linejoin":"round"},"fg-chart-line")),I.forEach((D,F)=>{if(!D)return;let z=O("circle",{cx:D[0],cy:D[1],r:3.5,fill:ae(E)},"fg-chart-point");ht(z,`${M.name} \xB7 ${i[F]}: ${t.format(D[2])}`),S.append(z)})});o.append(S,l),s.replaceChildren(o)}var Eo=12,ln=500,mt=["bar","stackedBar","line","area","pie"],ze=class{constructor(e){this.grid=e;this.handles=new Set}create(e={}){let{grid:t}=this,n=mt.includes(e.type)?e.type:"bar",o=()=>t.store.state.locale,r=e.range??t.store.state.range,i=null;if(r){let w=t.columns.getColumn(r.start.colId),R=t.columns.getColumn(r.end.colId);if(w&&R){let b=ue({start:{rowIndex:r.start.rowIndex,colIndex:w.index},end:{rowIndex:r.end.rowIndex,colIndex:R.index}}),C=[];for(let f=b.r1;f<=b.r2&&C.length<ln;f++){let m=t.rowModel.getRow(f);m&&!m.kind&&C.push(m.data)}i={rows:C,colIds:t.columns.displayed().slice(b.c1,b.c2+1).filter(f=>!L(f.id)).map(f=>f.id)}}}let a=()=>{let w=i?i.rows:t.rowModel.dataRows().slice(0,ln).map(g=>g.data),R=(i?i.colIds.map(g=>t.columns.getColumn(g)):t.columns.displayed().filter(g=>!L(g.id))).filter(g=>!!g),b=R[0]&&R[0].def.type!=="number"?R[0]:i?null:R.find(g=>g.def.type!=="number")??null,C=g=>!!g.node.parent&&g.node.parent.id==="pivotgroup|total",f=R.filter(g=>g!==b&&g.def.type==="number"&&(i||!C(g))).slice(0,Eo),m=g=>{let k=[];for(let S=g.node.parent;S;S=S.parent)k.unshift(S.def.header??S.id);return k.push(g.def.header??g.def.field??g.id),k.join(" \xB7 ")},x=b?H(b.def,o().code):null;return{categories:w.map((g,k)=>b&&x?x(N(b.def,g)):String(k+1)),series:f.map(g=>({name:m(g),values:w.map(k=>{let S=N(g.def,k),M=typeof S=="number"?S:S==null||S===""?NaN:Number(S);return Number.isFinite(M)?M:null})}))}},l=y("div","fg-chart-body"),d=null,c=()=>pt(l,{type:n,title:e.title,locale:o().code,...a()}),u=w=>({bar:o().chartBar,stackedBar:o().chartStacked,line:o().chartLine,area:o().chartArea,pie:o().chartPie})[w],p=()=>d?.querySelectorAll(".fg-chart-type").forEach(w=>w.setAttribute("aria-pressed",String(w.dataset.type===n)));if(e.container)e.container.append(l);else{d=y("div","fg-chart-panel",{role:"dialog","aria-label":e.title??u(n)});let w=y("div","fg-chart-head");for(let b of mt){let C=y("button","fg-chart-type",{type:"button",title:u(b)});C.dataset.type=b,C.textContent=u(b),C.addEventListener("click",()=>v.setType(b)),w.append(C)}let R=y("button","fg-chooser-close",{type:"button","aria-label":o().close});R.textContent="\xD7",R.addEventListener("click",()=>v.destroy()),w.append(y("span","fg-chart-spacer"),R),d.append(w,l),t.renderer.root.append(d)}let h=[t.events.on("cellValueChanged",()=>c()),t.events.on("rowsAdded",()=>c()),t.events.on("rowsRemoved",()=>c())];i||h.push(t.events.on("sortChange",()=>c()),t.events.on("filterChange",()=>c()));let v={el:l,setType:w=>{mt.includes(w)&&(n=w,p(),c())},update:()=>c(),destroy:()=>{h.forEach(w=>w()),(d??l).remove(),this.handles.delete(v)}};return this.handles.add(v),p(),c(),v}destroy(){for(let e of[...this.handles])e.destroy()}};function dn(s,e,t){return typeof s=="number"&&typeof e=="number"?s-e:s instanceof Date&&e instanceof Date?s.getTime()-e.getTime():typeof s=="boolean"&&typeof e=="boolean"?Number(s)-Number(e):t.compare(String(s),String(e))}function Lo(s,e){if(A(e))return null;if(s.type==="number"){let t=typeof e=="number"?e:Number(e);return Number.isNaN(t)?null:t}return s.type==="date"?_(e)?.getTime()??null:e}function Q(s,e,t){let n=A(s),o=A(e);return n||o?n===o?0:n?1:-1:dn(s,e,t)}function cn(s,e,t,n){let o=e.map(a=>({def:t(a.colId),mul:a.dir==="desc"?-1:1})).filter(a=>!!a.def);if(!o.length)return s;let r=o.map(a=>s.map(l=>{let d=N(a.def,l.data);return a.def.comparator?d:Lo(a.def,d)})),i=s.map((a,l)=>l);return i.sort((a,l)=>{for(let d=0;d<o.length;d++){let{def:c,mul:u}=o[d],p=r[d][a],h=r[d][l],v;if(c.comparator)try{v=(Number(c.comparator(p,h,s[a].data,s[l].data))||0)*u}catch{P(`comparator of column "${c.id??c.field}" threw; treating values as equal`),v=0}else{let w=A(p),R=A(h);v=w||R?w===R?0:w?1:-1:dn(p,h,n)*u}if(v)return v}return a-l}),i.map(a=>s[a])}var un=new WeakMap,Io=s=>typeof s=="function"?"custom":s;function gt(s,e){return{rows:(s.rows??[]).filter(e),columns:(s.columns??[]).filter(e),values:(s.values??[]).filter(t=>t&&e(t.colId)).map(t=>({colId:t.colId,aggFunc:t.aggFunc??"sum"})),totals:s.totals!==!1}}function hn(s,e,t,n,o){let r=gt(e,f=>!!t(f)),i=new Intl.Collator(o,{numeric:!0,sensitivity:"base"}),a=f=>t(f),l=(f,m)=>f.map(x=>G(N(a(x),m))).join(""),d=new Map;for(let f of s){let m=l(r.columns,f);d.has(m)||d.set(m,r.columns.map(x=>N(a(x),f)))}let c=[...d.entries()].sort((f,m)=>{for(let x=0;x<r.columns.length;x++){let g=Q(f[1][x],m[1][x],i);if(g)return g}return 0});r.columns.length||c.splice(0,c.length,["",[]]);let u=[],p=(f,m,x)=>{let g=r.values[m],k=a(g.colId),S=`pivot|${x}|${m}`;u.push({id:S,comboKey:f,valueIndex:m});let M=I=>f===null||l(r.columns,I)===f,E=g.aggFunc;return{id:S,field:S,header:`${k.header??k.field??g.colId} (${n.agg(Io(E))})`,type:"number",format:E==="count"?"integer":k.format,width:130,aggFunc:(I,$)=>{let T=$.flatMap(D=>un.get(D)??[]).filter(M);return T.length?oe(E,T.map(D=>N(k,D)),T):null}}},h=[],v=(f,m)=>{if(A(m))return n.blank;let x=a(f);return x.type==="number"&&!x.format?String(m):H(x,o)(m)};if(!r.columns.length)r.values.forEach((f,m)=>h.push(p("",m,0)));else{let f=(m,x,g)=>{let k=[],S=0;for(;S<m.length;){let M=m[S][1][x],E=G(M),I=S;for(;I<m.length&&G(m[I][1][x])===E;)I++;let $=m.slice(S,I),T=x===r.columns.length-1?r.values.map((D,F)=>p($[0][0],F,g+S)):f($,x+1,g+S);k.push({id:`pivotgroup|${x}|${g+S}`,header:v(r.columns[x],M),children:T}),S=I}return k};h.push(...f(c,0,0)),r.totals&&r.values.length&&h.push({id:"pivotgroup|total",header:n.total,children:r.values.map((m,x)=>p(null,x,"total"))})}let w=new Map;for(let f of s){let m=l(r.rows,f),x=w.get(m);x||w.set(m,x={values:r.rows.map(g=>N(a(g),f)),src:[]}),x.src.push(f)}let b=[...w.values()].sort((f,m)=>{for(let x=0;x<r.rows.length;x++){let g=Q(f.values[x],m.values[x],i);if(g)return g}return 0}).map(f=>{let m={};r.rows.forEach((g,k)=>{m[a(g).field??g]=f.values[k]});let x=new Map;if(r.columns.length)for(let g of f.src){let k=l(r.columns,g),S=x.get(k);S||x.set(k,S=[]),S.push(g)}for(let g of u){let k=r.values[g.valueIndex],S=g.comboKey===null||!r.columns.length?f.src:x.get(g.comboKey)??[],M=a(k.colId);m[g.id]=S.length?oe(k.aggFunc,S.map(E=>N(M,E)),S):null}return un.set(m,f.src),m});return{columns:[...r.rows.map(f=>{let m=a(f);return{id:f,field:m.field??f,header:m.header??m.field??f,type:m.type,format:m.format,width:m.width??140}}),...h],rows:b,groupBy:r.rows.slice(0,-1)}}var Ve="0.7.0";var Do={kty:"EC",crv:"P-256",x:"sUTKkglZmk-HMKPNub8p7AeLBKesHCU8irIkw9rJlbE",y:"j0U_aKRDR7iApY9UpaD3hUemhBLZJwDv9-QiT_hUyw8"},wt="https://freegrid.app/pricing/",fn="https://freegrid.app/api/usage",pn=s=>{let e=atob(s.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-s.length%4)%4));return Uint8Array.from(e,t=>t.charCodeAt(0))};function vn(s){let e=s.toLowerCase().replace(/^\[|\]$/g,"");return!e||e==="localhost"||e==="127.0.0.1"||e==="::1"||e==="0.0.0.0"||e.endsWith(".localhost")||e.endsWith(".test")||e.endsWith(".local")||/^(10|192\.168|172\.(1[6-9]|2\d|3[01]))\./.test(e)}function To(s,e){let t=s.toLowerCase().replace(/\.$/,"");return e.some(n=>{let o=n.toLowerCase().replace(/^\*\./,"").replace(/\.$/,"");return!!o&&(t===o||t.endsWith(`.${o}`))})}var Po=s=>`${s.getFullYear()}-${String(s.getMonth()+1).padStart(2,"0")}-${String(s.getDate()).padStart(2,"0")}`;async function yn(s,e,t={}){let n=typeof s=="string"?s.trim().split("."):[];if(n.length!==3||n[0]!=="FG1")return{ok:!1,reason:"format"};let o;try{if(o=JSON.parse(new TextDecoder().decode(pn(n[1]))),!Array.isArray(o.domains)||typeof o.expires!="string")return{ok:!1,reason:"format"}}catch{return{ok:!1,reason:"format"}}let r=typeof crypto<"u"?crypto.subtle:void 0;if(!r)return{ok:!1,reason:"unsupported",info:o};try{let i=await r.importKey("jwk",t.publicKey??Do,{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]),a=new TextEncoder().encode(`${n[0]}.${n[1]}`);if(!await r.verify({name:"ECDSA",hash:"SHA-256"},i,pn(n[2]),a))return{ok:!1,reason:"signature",info:o}}catch{return{ok:!1,reason:"signature",info:o}}return Po(t.now??new Date)>o.expires?{ok:!1,reason:"expired",info:o}:To(e,o.domains)?{ok:!0,info:o}:{ok:!1,reason:"domain",info:o}}var vt,mn=new Set;function $o(s){vt=s}var gn={missing:`FreeGrid is free for personal use. Company use needs a domain license (\u20A9200,000 per domain per year): ${wt}
|
|
7
|
-
FreeGrid\uB294 \uAC1C\uC778\uC5D0\uAC8C \uBB34\uB8CC\uC785\uB2C8\uB2E4. \uD68C\uC0AC\uC5D0\uC11C \uC4F0\uB824\uBA74 \uB3C4\uBA54\uC778 \uB77C\uC774\uC120\uC2A4(\uB3C4\uBA54\uC778\uB2F9 \uC5F0 20\uB9CC \uC6D0)\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4: ${
|
|
8
|
-
${wt}`)},()=>{}):(console.info(gn.missing),wn({version:Ve,licensed:!1},e),Promise.resolve()))}var xn={text:["contains","equals","notEquals","startsWith","endsWith","blank","notBlank"],number:["eq","ne","lt","lte","gt","gte","between","blank","notBlank"],date:["equals","before","after","between","blank","notBlank"]},Cn=["blank","notBlank"],yt=500,Ge=class{constructor(e){this.grid=e;this.popup=null;this.colId=null;this.off=[]}get openColumn(){return this.colId}toggle(e,t){this.colId===e?this.close():this.open(e,t)}open(e,t){this.close();let n=this.grid.columns.getNode(e);if(!n||n.children||L(e))return;let o=this.grid.store.state.locale,r=n.def,i=y("div",`fg-menu fg-theme-${this.grid.store.state.theme}`,{role:"dialog","aria-label":o.columnMenu});this.grid.applyFontTo(i),J(r)&&i.append(this.section([[o.sortAsc,()=>this.grid.setSort([{colId:e,dir:"asc"}])],[o.sortDesc,()=>this.grid.setSort([{colId:e,dir:"desc"}])],[o.clearSort,()=>this.grid.setSort(this.grid.store.state.sort.filter(w=>w.colId!==e))]])),i.append(this.section([[o.pinLeft,()=>this.grid.setPinned(e,"left")],[o.pinRight,()=>this.grid.setPinned(e,"right")],[o.unpin,()=>this.grid.setPinned(e,null)]]));let a=this.grid.getGroupBy();if(!this.grid.options.treeData&&(this.grid.options.groupPanel||a.length)){let w=a.includes(e)?[[o.ungroup,()=>this.grid.setGroupBy(a.filter(R=>R!==e))]]:[[o.groupByThis,()=>this.grid.setGroupBy([...a,e])]];a.length&&w.push([o.expandAll,()=>this.grid.expandAll(!0)],[o.collapseAll,()=>this.grid.expandAll(!1)]),i.append(this.section(w))}let l=[[o.autosizeThis,()=>this.grid.autoSize([e])],[o.autosizeAll,()=>this.grid.autoSize()]];r.lockVisible||l.push([o.hideColumn,()=>this.grid.setColumnsVisible([e],!1)]),l.push([o.chooseColumns,()=>this.grid.chooser.open()],[o.resetColumns,()=>this.grid.resetColumns()]),i.append(this.section(l));let d=this.filterSection(e,()=>this.close());d&&i.append(d),document.body.append(i);let c=t.getBoundingClientRect(),u=i.offsetWidth||248;i.style.left=`${Math.max(4,Math.min(c.right-u,window.innerWidth-u-4))}px`;let p=Math.max(4,Math.min(c.bottom+4,window.innerHeight-240));i.style.top=`${p}px`,i.style.maxHeight=`${Math.max(160,window.innerHeight-p-8)}px`,this.popup=i,this.colId=e;let h=w=>{let R=w.target;!i.contains(R)&&!t.contains(R)&&this.close()},v=w=>{w.key==="Escape"&&(this.close(),this.grid.renderer.root.focus())};document.addEventListener("pointerdown",h,!0),document.addEventListener("keydown",v,!0),this.off.push(()=>document.removeEventListener("pointerdown",h,!0),()=>document.removeEventListener("keydown",v,!0)),i.querySelector(".fg-filter-value:not([hidden]), .fg-set-search, .fg-menu-item")?.focus()}filterSection(e,t){let n=this.grid.columns.getNode(e);if(!n||n.children)return null;let o=this.grid.store.state.locale,r=ne(n.def);return r==="set"?this.setFilter(e,o,t):r?this.conditionFilter(e,r,o,t):null}close(){for(let e of this.off)e();this.off=[],this.popup?.remove(),this.popup=null,this.colId=null}section(e){let t=y("div","fg-menu-section");for(let[n,o]of e){let r=y("button","fg-menu-item",{type:"button"});r.textContent=n,r.addEventListener("click",()=>{o(),this.close()}),t.append(r)}return t}actions(e,t,n,o){let r=y("div","fg-menu-actions"),i=y("button","fg-btn",{type:"button"});i.textContent=t.reset,i.addEventListener("click",()=>{this.grid.setFilter(e,null),o()});let a=y("button","fg-btn fg-btn-primary",{type:"button"});return a.textContent=t.apply,a.addEventListener("click",n),r.append(i,a),r}title(e){let t=y("div","fg-menu-title");return t.textContent=e.filter,t}conditionFilter(e,t,n,o){let r=this.grid.store.state.filters[e],i=r&&r.type===t?r:void 0,a=y("div","fg-menu-section fg-filter"),l=y("select","fg-filter-op",{"aria-label":n.filter});for(let v of xn[t]){let w=y("option");w.value=v,w.textContent=n.ops[v],l.append(w)}l.value=i?.op??xn[t][0];let d=t==="text"?"text":t,c=y("input","fg-input fg-filter-value",{type:d,placeholder:n.value,"aria-label":n.value}),u=y("input","fg-input fg-filter-value-to",{type:d,placeholder:n.valueTo,"aria-label":n.valueTo});i&&(c.value=i.value!=null?String(i.value):"",u.value="valueTo"in i&&i.valueTo!=null?String(i.valueTo):"");let p=()=>{c.hidden=Cn.includes(l.value),u.hidden=l.value!=="between"};l.addEventListener("change",p),p();let h=()=>{let v=l.value,w=!Cn.includes(v),R=null;if(t==="number"){let b=c.value===""?void 0:Number(c.value),C=u.value===""?void 0:Number(u.value);(!w||b!==void 0)&&(R={type:t,op:v,value:b,valueTo:C})}else t==="date"?(!w||c.value)&&(R={type:t,op:v,value:c.value||void 0,valueTo:u.value||void 0}):(!w||c.value)&&(R={type:t,op:v,value:c.value});this.grid.setFilter(e,R),o()};for(let v of[c,u])v.addEventListener("keydown",w=>w.key==="Enter"&&h());return a.append(this.title(n),l,c,u,this.actions(e,n,h,o)),a}setFilter(e,t,n){let{grid:o}=this,r=o.columns.getNode(e).def,i=H(r,t.code),a=o.collator(),l=new Map;for(let g of o.rowModel.allNodes()){let k=N(r,g.data),S=G(k);l.has(S)||l.set(S,k)}let d=[...l.entries()].sort((g,k)=>Q(g[1],k[1],a)),c=o.store.state.filters[e],u=new Set(c?.type==="set"?c.values.map(G).filter(g=>l.has(g)):l.keys()),p=(g,k)=>g===""?t.blanks:i(k),h=y("div","fg-menu-section fg-filter fg-set-filter"),v=y("input","fg-input fg-set-search",{type:"search",placeholder:t.search,"aria-label":t.search}),w=y("label","fg-set-item fg-set-all"),R=y("input","fg-checkbox",{type:"checkbox"});w.append(R,document.createTextNode(t.selectAll));let b=y("div","fg-set-list"),C=()=>{let g=v.value.trim().toLowerCase();return g?d.filter(([k,S])=>p(k,S).toLowerCase().includes(g)):d},f=()=>{let g=C(),k=g.filter(([S])=>u.has(S)).length;R.checked=k>0&&k===g.length,R.indeterminate=k>0&&k<g.length},m=()=>{let g=C();if(b.replaceChildren(...g.slice(0,yt).map(([k,S])=>{let M=y("label","fg-set-item"),E=y("input","fg-checkbox",{type:"checkbox"});return E.checked=u.has(k),E.addEventListener("change",()=>{E.checked?u.add(k):u.delete(k),f()}),M.append(E,document.createTextNode(p(k,S))),M})),g.length>yt){let k=y("div","fg-set-more");k.textContent=`\u2026 +${g.length-yt}`,b.append(k)}f()};R.addEventListener("change",()=>{for(let[g]of C())R.checked?u.add(g):u.delete(g);m()}),v.addEventListener("input",m);let x=()=>{o.setFilter(e,u.size===l.size?null:{type:"set",values:d.filter(([g])=>u.has(g)).map(([,g])=>g)}),n()};return v.addEventListener("keydown",g=>g.key==="Enter"&&x()),m(),h.append(this.title(t),v,w,b,this.actions(e,t,x,n)),h}};var Rn=new WeakMap,Ao=0;function fe(s){let e=Rn.get(s);return e||Rn.set(s,e=`r${++Ao}`),e}var qe=class{constructor(e){this.deps=e;this.stats={filterRuns:0,sortRuns:0};this.server=!1;this.full=[];this.last={};this.nodes=[];this.filtered=[];this.sorted=[];this.display=[];this.indexById=null;this.layoutCache=null}update(e){let t=this.deps.collator(),n=e.display,o=!!n?.getParentId!=!!this.last.display?.getParentId,r=e.data!==this.last.data,i=r||o||e.filters!==this.last.filters||e.quickFilter!==this.last.quickFilter,a=i||e.sort!==this.last.sort||t!==this.last.collator,l=a||n?.version!==this.last.displayVersion||n?.groupBy!==this.last.display?.groupBy;if(r){let u=this.deps.getRowId;this.nodes=e.data.map((p,h)=>({id:u?String(u(p)):fe(p),data:p,sourceIndex:h}))}i&&(this.filtered=this.filter(e),this.stats.filterRuns++),a&&(this.sorted=cn(this.filtered,e.sort,u=>this.deps.columnDef(u),t),this.stats.sortRuns++),l&&(this.full=n?this.buildDisplay(n,e.sort,t):this.sorted);let d=e.page??null,c=this.last.page??null;(l||d?.index!==c?.index||d?.size!==c?.size)&&(this.display=d?this.full.slice(d.index*d.size,(d.index+1)*d.size):this.full,this.indexById=null,this.layoutCache=null),this.last={...e,collator:t,displayVersion:n?.version}}invalidate(){this.last={}}fullCount(){return this.full.length}dataCount(){return this.sorted.length}loading(){return!1}getRowCount(){return this.display.length}getRow(e){return this.display[e]}rows(){return this.display}dataRows(){return this.sorted}allNodes(){return this.nodes}idOf(e){return this.deps.getRowId?String(this.deps.getRowId(e)):fe(e)}indexOfId(e){return this.indexById||(this.indexById=new Map(this.display.map((t,n)=>[t.id,n]))),this.indexById.get(e)??-1}layout(e,t){let n=this.layoutCache;if(n&&n.rows===this.display&&n.rh===e&&n.dh===t)return n;let o=this.display.length,r=new Float64Array(o+1),i=!0;for(let a=0;a<o;a++){let l=this.display[a].kind==="detail";l&&(i=!1),r[a+1]=r[a]+(l?t:e)}return this.layoutCache={rows:this.display,rh:e,dh:t,offsets:r,uniform:i},this.layoutCache}filter(e){let t=Object.entries(e.filters).map(([d,c])=>({def:this.deps.columnDef(d),pred:At(c)})).filter(d=>!!d.def),n=Nt(e.quickFilter),o=n.length?this.deps.quickColumns():[];if(!t.length&&!n.length)return this.nodes;let r=this.nodes.filter(d=>{for(let c of t)if(!c.pred(N(c.def,d.data)))return!1;if(n.length){let c=o.map(u=>this.deps.format(u,N(u,d.data))).join("").toLowerCase();if(!Ft(n,c))return!1}return!0}),i=e.display?.getParentId;if(!i)return r;let a=new Map(this.nodes.map(d=>[d.id,d])),l=new Set(r);for(let d of r){let c=i(d.data),u=new Set;for(;c!=null&&!u.has(c);){u.add(c);let p=a.get(String(c));if(!p)break;l.add(p),c=i(p.data)}}return this.nodes.filter(d=>l.has(d))}isOpen(e,t,n){let o=e.expanded.get(t);return o!==void 0?o:e.defaultExpanded===-1||n<e.defaultExpanded}withDetails(e,t,n){for(let o of t)n.push(o),e.detailOpen.has(o.id)&&(!e.isMaster||e.isMaster(o.data))&&n.push({id:`detail:${o.id}`,data:{},sourceIndex:-1,kind:"detail",detailOf:o})}buildDisplay(e,t,n){let o=[];if(e.getParentId)return this.buildTree(e,o),o;let r=e.groupBy.filter(a=>this.deps.columnDef(a));if(!r.length)return e.detailOpen.size?(this.withDetails(e,this.sorted,o),o):this.sorted;let i=(a,l,d)=>{let c=r[l],u=this.deps.columnDef(c),p=new Map;for(let w of a){let R=N(u,w.data),b=A(R)?"":G(R),C=p.get(b);C||p.set(b,C={value:R,nodes:[]}),C.nodes.push(w)}let h=t.find(w=>w.colId===c)?.dir==="desc"?-1:1,v=[...p.entries()].sort((w,R)=>Q(w[1].value,R[1].value,n)*h);for(let[w,R]of v){let b=`${d}${c}:${w}`,C=this.isOpen(e,b,l);o.push({id:`group:${b}`,data:{},sourceIndex:-1,kind:"group",level:l,group:{key:b,colId:c,value:R.value,rows:R.nodes.map(f=>f.data),expanded:C}}),C&&(l+1<r.length?i(R.nodes,l+1,`${b}|`):this.withDetails(e,R.nodes.map(f=>({...f,level:l+1})),o))}};return i(this.sorted,0,""),o}buildTree(e,t){let n=new Set(this.sorted.map(a=>a.id)),o=new Map,r=[];for(let a of this.sorted){let l=e.getParentId(a.data),d=l==null?null:String(l);if(d!==null&&n.has(d)&&d!==a.id){let c=o.get(d);c||o.set(d,c=[]),c.push(a)}else r.push(a)}let i=(a,l,d)=>{for(let c of a){if(d.has(c.id))continue;let u=o.get(c.id)??[],p=u.length>0&&this.isOpen(e,c.id,l),h={...c,level:l,hasChildren:u.length>0,expanded:p};this.withDetails(e,[h],t),p&&i(u,l+1,new Set([...d,c.id]))}};i(r,0,new Set)}};var No=3e3,Fo=new Float64Array(0),pe=class{constructor(e){this.deps=e;this.stats={filterRuns:0,sortRuns:0};this.server=!0;this.blocks=new Map;this.total=null;this.loadedEnd=0;this.gen=0;this.query=null;this.page=null;this.lastBlock=0;this.version=0;this.cache=null}get bs(){return this.page?this.page.size:this.deps.blockSize}get base(){return this.page?this.page.index*this.page.size:0}update(e){let t=this.query,n=!t||t.sort!==e.sort||t.filters!==e.filters||t.quickFilter!==e.quickFilter,o=e.page??null,r=(o?.size??0)!==(this.page?.size??0);this.query={sort:e.sort,filters:e.filters,quickFilter:e.quickFilter},this.page=o?{...o}:null,(n||r)&&this.purge(),this.ensure(Math.floor(this.base/this.bs))}invalidate(){}purge(){this.gen++,this.blocks.clear(),this.total=null,this.loadedEnd=0,this.touch(),this.query&&this.ensure(Math.floor(this.base/this.bs))}touch(){this.version++,this.cache=null}fullCount(){if(this.total!==null)return this.total;if(!this.loadedEnd)return 0;let e=this.blocks.get(Math.floor((this.loadedEnd-1)/this.bs));return this.loadedEnd+(e&&e.nodes.length<this.bs?0:this.bs)}getRowCount(){let e=this.fullCount();return this.page?Math.max(0,Math.min(this.page.size,e-this.base)):e}dataCount(){return this.fullCount()}loading(){for(let e of this.blocks.values())if(e.state==="loading")return!0;return!1}placeholder(e){return{id:`loading:${e}`,data:{},sourceIndex:-1,kind:"loading"}}peek(e){let t=Math.floor(e/this.bs),n=this.blocks.get(t);return n?.state==="loaded"?n.nodes[e-t*this.bs]??null:null}getRow(e){let t=this.base+e,n=this.peek(t);return n||(e>=0&&e<this.getRowCount()&&this.ensure(Math.floor(t/this.bs)),this.placeholder(t))}ensure(e){let t=this.blocks.get(e);if(t&&(t.state!=="failed"||Date.now()<(t.retryAt??0))||this.total!==null&&e*this.bs>=this.total&&e>0)return;let n=e*this.bs,o=n+this.bs,r=this.gen;this.lastBlock=e,this.blocks.set(e,{state:"loading",nodes:[]});let i=this.query,a=d=>{r===this.gen&&(this.blocks.set(e,{state:"failed",nodes:[],retryAt:Date.now()+No}),this.deps.onFailed(n,o,d))},l;try{l=Promise.resolve(this.deps.datasource.getRows({start:n,end:o,sort:[...i.sort],filters:{...i.filters},quickFilter:i.quickFilter}))}catch(d){l=Promise.reject(d)}l.then(d=>{if(r!==this.gen)return;let c=Array.isArray(d?.rows)?d.rows.filter(h=>h!==null&&typeof h=="object"):null;if(!c){P("datasource.getRows must resolve to { rows: Row[], total?: number }"),a(new Error("invalid datasource response"));return}let u=this.deps.getRowId,p=c.slice(0,this.bs).map((h,v)=>({id:u?String(u(h)):fe(h),data:h,sourceIndex:n+v}));this.blocks.set(e,{state:"loaded",nodes:p}),typeof d.total=="number"&&d.total>=0?this.total=d.total:p.length<this.bs&&(this.total=n+p.length),this.loadedEnd=Math.max(this.loadedEnd,n+p.length),this.evict(),this.touch(),this.deps.onLoaded(n,n+p.length,this.total)},a)}evict(){let e=Math.max(2,this.deps.maxBlocks);if(this.blocks.size<=e)return;let t=[...this.blocks.keys()].sort((n,o)=>Math.abs(o-this.lastBlock)-Math.abs(n-this.lastBlock));for(let n of t){if(this.blocks.size<=e)break;this.blocks.get(n).state!=="loading"&&this.blocks.delete(n)}}built(){if(this.cache?.ver===this.version)return this.cache;let e=[];for(let n of[...this.blocks.keys()].sort((o,r)=>o-r)){let o=this.blocks.get(n);o.state==="loaded"&&e.push(...o.nodes)}let t=new Map;for(let n of e)t.set(n.id,n.sourceIndex);return this.cache={ver:this.version,data:e,rows:null,ids:t},this.cache}rows(){let e=this.built();if(!e.rows){let t=this.getRowCount();e.rows=new Array(t);for(let n=0;n<t;n++)e.rows[n]=this.peek(this.base+n)??this.placeholder(this.base+n)}return e.rows}dataRows(){return this.built().data}allNodes(){return this.built().data}idOf(e){return this.deps.getRowId?String(this.deps.getRowId(e)):fe(e)}indexOfId(e){let t=this.built().ids.get(e);if(t===void 0)return-1;let n=t-this.base;return n>=0&&n<this.getRowCount()?n:-1}layout(){return{offsets:Fo,uniform:!0}}};function kn(s){let e=s.idAt(s.index);if(s.mode==="single"){let t=new Set;return s.toggle&&s.selected.has(e)||t.add(e),{selected:t,anchorIndex:s.index}}if(s.range&&s.anchorIndex!=null){let t=s.toggle?new Set(s.selected):new Set,n=Math.min(s.anchorIndex,s.index),o=Math.max(s.anchorIndex,s.index);for(let r=n;r<=o;r++)t.add(s.idAt(r));return{selected:t,anchorIndex:s.anchorIndex}}if(s.toggle){let t=new Set(s.selected);return t.has(e)?t.delete(e):t.add(e),{selected:t,anchorIndex:s.index}}return{selected:new Set([e]),anchorIndex:s.index}}var Ue=class{constructor(e){this.bus=new re;this.current=e}get state(){return this.current}set(e){let t=Object.keys(e).filter(n=>e[n]!==this.current[n]);t.length&&(this.current={...this.current,...e},this.bus.emit("change",t))}};var Mn=s=>Math.round(s*2.75),Sn=s=>Math.round(s*3.1),En=13,Ho=[],Bo=100,Oo=new Map;function ee(s){return s.every(e=>e!==null&&typeof e=="object")?s:(P("data contains entries that are not objects; they were skipped"),s.filter(e=>e!==null&&typeof e=="object"))}var bt=class{constructor(e,t){this.options=t;this.events=new re;this.pinnedRows={top:[],bottom:[]};this.spanCache=null;this.editVersion=0;this.tracker=new Fe;this.history=new Ne;this.disposers=[];this.collatorCache=null;this.destroyed=!1;this.summaryOpts=null;this.summaryValues=[];this.groupBy=[];this.expanded=new Map;this.defaultExpanded=0;this.detailOpen=new Set;this.displayVersion=0;this.aggCache={ver:-1,map:new WeakMap};this.charts=new ze(this);this.sourceDefs=[];this.pivotCfg=null;this.pivotData=null;this.savedGroup=null;this.page=0;this.pageSize=Bo;Array.isArray(t.columns)||P("options.columns must be an array"),t.data!=null&&!Array.isArray(t.data)&&P("options.data must be an array"),this.store=new Ue({data:Array.isArray(t.data)?ee(t.data):[],sort:[],filters:{},quickFilter:"",selected:new Set,anchorId:null,focus:null,range:null,locale:me(t.locale),theme:t.theme??"light"}),this.sourceDefs=Array.isArray(t.columns)?t.columns:[],this.columns=new we(this.withSelect(this.sourceDefs));let n=t.pagination;n&&typeof n=="object"&&n.pageSize!==void 0&&(Number.isInteger(n.pageSize)&&n.pageSize>0?this.pageSize=n.pageSize:P("pagination.pageSize must be a positive integer")),t.datasource&&typeof t.datasource.getRows!="function"&&P("datasource.getRows must be a function"),this.rowModel=t.datasource&&typeof t.datasource.getRows=="function"?new pe({datasource:t.datasource,blockSize:Number.isInteger(t.blockSize)&&t.blockSize>0?t.blockSize:100,maxBlocks:Number.isInteger(t.maxBlocks)&&t.maxBlocks>0?t.maxBlocks:100,getRowId:t.getRowId,onLoaded:(i,a,l)=>this.serverLoaded(i,a,l),onFailed:(i,a,l)=>this.serverFailed(i,a,l)}):new qe({getRowId:t.getRowId,columnDef:i=>this.columns.getNode(i)?.def,quickColumns:()=>this.columns.displayed().filter(i=>!L(i.id)).map(i=>i.def),format:(i,a)=>H(i,this.store.state.locale.code)(a),collator:()=>this.collator()}),this.groupBy=this.validGroupBy(t.groupBy??[]),this.defaultExpanded=t.groupDefaultExpanded??0,t.treeData&&!t.getRowId&&P("treeData needs getRowId so parent ids can be matched"),this.updateRows(),this.summaryOpts=t.summary??null,this.refreshSummary();let o=t.fontSize!=null&&t.fontSize>0?t.fontSize:null;t.fontSize!=null&&!(t.fontSize>0)&&P("fontSize must be a positive number"),this.font={size:o,family:t.fontFamily??null};let r=o??En;if(this.renderer=new xe(e,this,{rowHeight:t.rowHeight??Mn(r),headerHeight:t.headerHeight??Sn(r)}),this.renderer.applyFont(this.font.size,this.font.family),this.menu=new Ge(this),this.chooser=new Ee(this),this.contextMenu=new Ie(this),this.editor=new Ae(this),this.finder=new Te(this),this.fillHandle=new De(this),this.groupPanel=t.groupPanel?new Ce(this):null,this.pinnedRows={top:ee(t.pinnedTopRows??[]),bottom:ee(t.pinnedBottomRows??[])},this.sideBar=t.sideBar?new Le(this,typeof t.sideBar=="object"&&!!t.sideBar.open,(typeof t.sideBar=="object"?t.sideBar.panels:void 0)??(t.pivot||t.pivotPanel?["columns","filters","pivot"]:void 0)):null,this.disposers.push(this.store.bus.on("change",i=>this.onChange(i)),Zt(this),qt(this),()=>this.menu.close(),()=>this.chooser.close(),()=>this.contextMenu.destroy(),()=>this.editor.cancel(),()=>this.fillHandle.destroy(),()=>this.groupPanel?.destroy(),()=>this.charts.destroy()),typeof ResizeObserver<"u"){let i=new ResizeObserver(()=>this.renderer.schedule());i.observe(this.renderer.main),this.disposers.push(()=>i.disconnect())}t.pivot&&this.setPivot(t.pivot),bn(t.licenseKey),this.renderer.render(),this.api=this.createApi()}collator(){let e=this.store.state.locale.code;return this.collatorCache?.code!==e&&(this.collatorCache={code:e,collator:new Intl.Collator(e,{numeric:!0,sensitivity:"base"})}),this.collatorCache.collator}layoutChanged(){this.renderer.invalidate({header:!0,rows:!0}),this.refreshChoosers()}columnsChanged(){this.rowModel.invalidate(),this.updateRows(),this.refreshSummary(),this.renderer.invalidate({header:!0,rows:!0}),this.refreshChoosers()}display(){return{groupBy:this.options.treeData?Ho:this.groupBy,getParentId:this.options.treeData?.getParentId,expanded:this.expanded,defaultExpanded:this.defaultExpanded,detailOpen:this.options.detailRenderer?this.detailOpen:new Set,isMaster:this.options.isRowMaster,version:this.displayVersion}}updateRows(){let e=!!this.options.pagination,t=this.pivotData??this.store.state.data;this.rowModel.update({...this.store.state,data:t,display:this.display(),page:e?{index:this.page,size:this.pageSize}:null}),e&&this.page>=this.getPageCount()&&(this.page=this.getPageCount()-1,this.rowModel.update({...this.store.state,data:t,display:this.display(),page:{index:this.page,size:this.pageSize}}))}viewRows(){return this.pivotData??this.store.state.data}sourceLeaves(){let e=[],t=n=>{for(let o of n)!o||typeof o!="object"||(Array.isArray(o.children)?t(o.children):(o.id??o.field)&&e.push({id:o.id??o.field,def:o}))};return t(this.sourceDefs),e}getPivot(){let e=this.pivotCfg;if(!e)return null;let t={rows:[...e.rows],columns:[...e.columns],values:e.values.map(n=>({...n}))};return e.totals||(t.totals=!1),t}setPivot(e){if(e&&this.clientOnly("pivot"))return;if(e&&(typeof e!="object"||!Array.isArray(e.rows)||!Array.isArray(e.values))){P("setPivot: expected { rows: string[], values: [...] }");return}if(this.editor.cancel(),!e){if(!this.pivotCfg)return;this.pivotCfg=null,this.pivotData=null,this.columns.setDefs(this.withSelect(this.sourceDefs)),this.savedGroup&&(this.groupBy=this.savedGroup.groupBy,this.expanded=this.savedGroup.expanded,this.defaultExpanded=this.savedGroup.defaultExpanded,this.savedGroup=null),this.afterPivotSwitch();return}let t=new Set(this.sourceLeaves().map(n=>n.id));this.pivotCfg||(this.savedGroup={groupBy:this.groupBy,expanded:this.expanded,defaultExpanded:this.defaultExpanded}),this.pivotCfg=gt(e,n=>t.has(n)),this.expanded=new Map,this.defaultExpanded=-1,this.rebuildPivot(!1),this.afterPivotSwitch()}afterPivotSwitch(){this.page=0,this.store.set({sort:[],filters:{},range:null,focus:null}),this.rowModel.invalidate(),this.updateRows(),this.displayVersion++,this.updateRows(),this.groupPanel?.refresh(),this.renderer.invalidate({header:!0,rows:!0}),this.refreshChoosers(),this.events.emit("pivotChange",{pivot:this.getPivot()})}rebuildPivot(e=!0){let t=this.pivotCfg;if(!t)return;let n=this.store.state.locale,o=new Map(this.sourceLeaves().map(d=>[d.id,d.def])),r={sum:n.sum,avg:n.avg,min:n.min,max:n.max,count:n.count},i=hn(this.store.state.data,t,d=>o.get(d),{total:n.total,blank:n.blanks,agg:d=>r[d]??d},n.code);if(this.pivotData=i.rows,this.columns.setDefs(this.withSelect(i.columns)),this.groupBy=i.groupBy,!e)return;let a=d=>!!this.columns.getNode(d),l=this.store.state;(l.sort.some(d=>!a(d.colId))||Object.keys(l.filters).some(d=>!a(d)))&&this.store.set({sort:l.sort.filter(d=>a(d.colId)),filters:Object.fromEntries(Object.entries(l.filters).filter(([d])=>a(d)))}),this.rowModel.invalidate(),this.displayVersion++,this.updateRows(),this.renderer.invalidate({header:!0,rows:!0}),this.refreshChoosers()}getPage(){return this.options.pagination?this.page:0}getPageSize(){return this.options.pagination?this.pageSize:this.rowModel.fullCount()}getPageCount(){return this.options.pagination?Math.max(1,Math.ceil(this.rowModel.fullCount()/this.pageSize)):1}setPage(e){if(!this.options.pagination||!Number.isFinite(e))return;let t=Math.max(0,Math.min(this.getPageCount()-1,Math.floor(e)));t!==this.page&&(this.page=t,this.pageMoved())}setPageSize(e){if(!this.options.pagination)return;if(!Number.isInteger(e)||e<=0){P("setPageSize: size must be a positive integer");return}if(e===this.pageSize)return;let t=this.page*this.pageSize;this.pageSize=e,this.page=Math.floor(t/e),this.pageMoved()}pageMoved(){this.editor.cancel(),this.updateRows(),this.store.state.range&&this.setRange(null);let e=this.rowModel.getRowCount(),t=this.store.state.focus;t&&t.rowIndex>=e&&this.store.set({focus:e?{...t,rowIndex:e-1}:null}),this.renderer.scroller.scrollTop=0,this.finder.refresh(),this.renderer.invalidate({header:!0,rows:!0}),this.emitPage()}emitPage(){this.events.emit("pageChange",{page:this.page,pageSize:this.pageSize,pageCount:this.getPageCount()})}refreshRows(){this.rowModel instanceof pe&&(this.rowModel.purge(),this.renderer.invalidate({rows:!0}))}serverLoaded(e,t,n){this.destroyed||(this.renderer.invalidate({header:!0,rows:!0}),this.events.emit("rowsLoaded",n===null?{start:e,end:t}:{start:e,end:t,total:n}))}serverFailed(e,t,n){this.destroyed||(P(`datasource.getRows failed for rows ${e}\u2013${t}`),this.toast(this.store.state.locale.loadFailed),this.renderer.invalidate({rows:!0}),this.events.emit("rowsLoadFailed",{start:e,end:t,error:n}))}clientOnly(e){return this.rowModel.server?(P(`${e} is not available with a datasource`),!0):!1}displayChanged(){this.displayVersion++,this.updateRows(),this.store.state.range&&this.setRange(null);let e=this.rowModel.getRowCount(),t=this.store.state.focus;t&&t.rowIndex>=e&&this.store.set({focus:e?{...t,rowIndex:e-1}:null}),this.finder.refresh(),this.renderer.invalidate({header:!0,rows:!0})}validGroupBy(e){return Array.isArray(e)?e.length&&this.clientOnly("grouping")?[]:[...new Set(e)].filter(t=>{let n=this.columns.getNode(t);return!n||n.children||L(t)?(P(`groupBy: unknown column "${t}"`),!1):!0}):[]}getGroupBy(){return[...this.groupBy]}setGroupBy(e){let t=this.validGroupBy(e);t.join("")!==this.groupBy.join("")&&(this.groupBy=t,this.page=0,this.groupPanel?.refresh(),this.displayChanged(),this.events.emit("groupChange",{groupBy:[...t]}))}isExpandable(e){return!!e&&(e.kind==="group"||!!e.hasChildren)}expandKey(e){return e.group?e.group.key:e.id}setGroupExpanded(e,t){let n=this.rowModel.rows().find(r=>this.isExpandable(r)&&this.expandKey(r)===e);(n?!!(n.group?.expanded??n.expanded):this.expanded.get(e))!==t&&(this.expanded.set(e,t),this.displayChanged(),this.events.emit("groupToggle",{key:e,expanded:t}))}toggleRow(e){let t=this.rowModel.getRow(e);this.isExpandable(t)&&this.setGroupExpanded(this.expandKey(t),!(t.group?.expanded??t.expanded))}expandAll(e=!0){this.expanded.clear(),this.defaultExpanded=e?-1:0,this.displayChanged()}groupAggregate(e,t){let n=this.columns.getNode(t)?.def;if(!e.group||!n?.aggFunc)return;this.aggCache.ver!==this.editVersion&&(this.aggCache={ver:this.editVersion,map:new WeakMap});let o=this.aggCache.map.get(e.group);if(o||this.aggCache.map.set(e.group,o=new Map),!o.has(t)){let r=e.group.rows;try{o.set(t,oe(n.aggFunc,r.map(i=>N(n,i)),r))}catch{P(`aggFunc of column "${t}" threw`),o.set(t,null)}}return o.get(t)}canExpandDetail(e){if(!this.options.detailRenderer)return!1;try{return!this.options.isRowMaster||!!this.options.isRowMaster(e)}catch{return!1}}isDetailExpanded(e){return!!e&&typeof e=="object"&&this.detailOpen.has(this.rowModel.idOf(e))}setDetailExpanded(e,t){if(!e||typeof e!="object"||t&&!this.canExpandDetail(e))return;let n=this.rowModel.idOf(e);this.detailOpen.has(n)!==t&&(t?this.detailOpen.add(n):(this.detailOpen.delete(n),this.renderer.dropDetail(n)),this.displayChanged(),this.events.emit("detailToggle",{row:e,expanded:t}))}canMoveRows(){let e=this.store.state;return!this.rowModel.server&&!e.sort.length&&!Object.keys(e.filters).length&&!e.quickFilter.trim()&&!this.groupBy.length&&!this.options.treeData}moveRow(e,t,n=!0){if(this.clientOnly("moveRow")||!this.canMoveRows())return!1;let o=this.store.state.data,r=o.indexOf(e);if(r<0||!Number.isFinite(t))return!1;let i=Math.max(0,Math.min(o.length-1,Math.floor(t)));if(i===r)return!1;let a=[...o];return a.splice(r,1),a.splice(i,0,e),this.replaceData(a),n&&this.history.push({undo:()=>this.moveRow(e,r,!1),redo:()=>this.moveRow(e,i,!1)}),this.events.emit("rowDragEnd",{row:e,fromIndex:r,toIndex:i}),!0}setFont(e){let t=this.font.size;e.size!==void 0&&(typeof e.size=="number"&&e.size>0?t=e.size:P("setFont: size must be a positive number"));let n=e.family===void 0?this.font.family:e.family||null;this.font={size:t,family:n};let o=t??En;this.options.rowHeight==null&&(this.renderer.opts.rowHeight=Mn(o)),this.options.headerHeight==null&&(this.renderer.opts.headerHeight=Sn(o)),this.renderer.applyFont(t,n),this.menu.close(),this.layoutChanged()}applyFontTo(e){this.font.size&&e.style.setProperty("--fg-font-size",`${this.font.size}px`),this.font.family&&e.style.setProperty("--fg-font",this.font.family)}summary(){return this.summaryOpts&&this.summaryOpts.rows?.length?{opts:this.summaryOpts,values:this.summaryValues}:null}setSummary(e){if(e&&!Array.isArray(e.rows)){P("setSummary: summary.rows must be an array");return}this.summaryOpts=e,this.refreshSummary(),this.renderer.invalidate({header:!0,rows:!0})}refreshSummary(){let e=this.summaryOpts;if(!e?.rows?.length){this.summaryValues=[];return}let t=e.scope??"filtered",n=t==="all"?this.rowModel.allNodes().map(o=>o.data):t==="selected"?this.selectedRows():this.rowModel.dataRows().map(o=>o.data);this.summaryValues=Ot(e.rows,n,o=>this.columns.getNode(o)?.def)}dataColumns(){return this.columns.displayed().filter(e=>!L(e.id))}setRange(e){let t=null;if(e&&this.options.rangeSelection!==!1){let o=this.rowModel.getRowCount(),r=i=>!L(i.colId)&&!!this.columns.getColumn(i.colId)&&i.rowIndex>=0&&i.rowIndex<o;r(e.start)&&r(e.end)&&(t={start:{...e.start},end:{...e.end}})}let n=this.store.state.range;JSON.stringify(n)!==JSON.stringify(t)&&(this.store.set({range:t}),this.events.emit("rangeChange",{range:t&&{start:{...t.start},end:{...t.end}}}))}rangeBounds(){let e=this.store.state.range;if(!e)return null;let t=this.columns.getColumn(e.start.colId),n=this.columns.getColumn(e.end.colId);return!t||!n?null:ue({start:{rowIndex:e.start.rowIndex,colIndex:t.index},end:{rowIndex:e.end.rowIndex,colIndex:n.index}})}rangeContains(e,t){let n=this.rangeBounds(),o=this.columns.getColumn(t);return!!n&&!!o&&Xt(n,e,o.index)}selectAllCells(){let e=this.dataColumns(),t=this.rowModel.getRowCount();!e.length||!t||(this.store.state.focus||this.setFocus(0,e[0].id),this.setRange({start:{rowIndex:0,colId:e[0].id},end:{rowIndex:t-1,colId:e[e.length-1].id}}))}selectionTSV(e,t=!1){let n=this.store.state.locale.code,o=this.columns.displayed(),r=t?null:this.rangeBounds(),i=t,a,l;if(r){a=[];for(let c=r.r1;c<=r.r2;c++){let u=this.rowModel.getRow(c);u.kind||a.push(u.data)}l=o.slice(r.c1,r.c2+1).filter(c=>!L(c.id))}else if(i){let c=this.store.state.selected;a=this.rowModel.dataRows().filter(u=>c.has(u.id)).map(u=>u.data),l=this.dataColumns()}else{let c=this.store.state.focus,u=c&&this.columns.getColumn(c.colId),p=c&&this.rowModel.getRow(c.rowIndex);if(!u||!p||p.kind||L(u.id))return"";a=[p.data],l=[u]}let d=a.map(c=>l.map(u=>Pe(u.def,N(u.def,c),n)));return e&&d.unshift(l.map(c=>c.def.header??c.def.field??c.id)),_t(d)}copyToClipboard(e,t=!1){let n=this.selectionTSV(e,t);if(n&&typeof navigator<"u"&&navigator.clipboard?.writeText)try{navigator.clipboard.writeText(n)?.catch?.(()=>{})}catch{}return n}pasteText(e){let t=Wt(e),n={changed:0,skipped:0};if(!t.length)return n;let o=this.columns.displayed(),r=this.rowModel.getRowCount(),i=this.rangeBounds(),a=this.store.state.focus,l=a&&this.columns.getColumn(a.colId),d,c;if(i)d=i.r1,c=i.c1;else if(a&&l&&!L(l.id))d=a.rowIndex,c=l.index;else return n;let u=[],p=t.length===1&&t[0].length===1,h=p&&i?i.r2-i.r1+1:t.length,v=p&&i?i.c2-i.c1+1:Math.max(...t.map(w=>w.length));for(let w=0;w<h;w++){let R=d+w;if(R>=r)break;let b=this.rowModel.getRow(R);if(!b.kind)for(let C=0;C<v;C++){let f=o[c+C];if(!f)break;if(L(f.id))continue;let m=p&&i?t[0][0]:t[w]?.[C];if(m===void 0)continue;let x=f.def;if(!x.editable||!x.field){n.skipped++;continue}let g=b.data[x.field],k=this.acceptText(x,b.data,m,g);if(!k.ok){n.skipped++;continue}this.writeCell(u,b.data,x.field,f.id,R,k.value)&&n.changed++}}return this.endCellTx(u),this.events.emit("paste",{...n}),n}acceptText(e,t,n,o){let r,i=e.editor;if(i&&typeof i=="object"&&i.type==="select"){let a=(typeof i.options=="function"?i.options(t):i.options)??[],l=n.trim().toLowerCase(),d=a.map(c=>c!==null&&typeof c=="object"&&"value"in c?c:{value:c,label:String(c)}).find(c=>String(c.value).toLowerCase()===l||(c.label??"").toLowerCase()===l);if(!d)return{ok:!1};r=d.value}else{let a=$e(e,n,o);if(!a.ok)return a;r=a.value}if(e.required&&A(r))return{ok:!1};if(e.validate)try{if(e.validate(r,t)!==!0)return{ok:!1}}catch{return{ok:!1}}return{ok:!0,value:r}}mergeSpans(){if(this.rowModel.server||!this.columns.displayed().some(r=>r.def.merge))return Oo;let e=this.rowModel.rows(),t=this.editVersion*1e6+this.columns.displayed().length;if(this.spanCache&&this.spanCache.rows===e&&this.spanCache.ver===t)return this.spanCache.spans;let n=new Map,o=this.columns.displayed().filter(r=>r.def.merge);if(o.length&&!e.some(r=>r.kind)){let r=e.map(i=>i.data);for(let i of o)n.set(i.id,Ut(r,i.def))}return this.spanCache={rows:e,ver:t,spans:n},n}rangeAggregates(){let e=this.rangeBounds();if(!e)return null;let t=this.columns.displayed().slice(e.c1,e.c2+1).filter(o=>!L(o.id)),n={cells:0,count:0,numbers:0,sum:0,min:1/0,max:-1/0};for(let o=e.r1;o<=e.r2;o++){let r=this.rowModel.getRow(o);if(!r||r.kind)continue;let i=r.data;for(let a of t){n.cells++;let l=N(a.def,i);if(!A(l)&&(n.count++,typeof l=="number"||a.def.type==="number"&&!Number.isNaN(Number(l)))){let d=Number(l);n.numbers++,n.sum+=d,d<n.min&&(n.min=d),d>n.max&&(n.max=d)}}}return n}fillRange(e){let t=this.rangeBounds()??(()=>{let u=this.store.state.focus,p=u&&this.columns.getColumn(u.colId);return u&&p&&!L(p.id)?{r1:u.rowIndex,r2:u.rowIndex,c1:p.index,c2:p.index}:null})(),n=this.columns.getColumn(e.start.colId),o=this.columns.getColumn(e.end.colId);if(!t||!n||!o)return;let r=ue({start:{rowIndex:e.start.rowIndex,colIndex:n.index},end:{rowIndex:e.end.rowIndex,colIndex:o.index}}),i=this.rowModel.getRowCount();r.r1=Math.max(0,r.r1),r.r2=Math.min(i-1,r.r2);let a=this.columns.displayed(),l=[],d=(u,p,h)=>{let v=a[p],w=this.rowModel.getRow(u),R=v?.def;if(!(!w||w.kind||!R?.editable||!R.field||L(v.id))&&!(R.required&&A(h))){try{if(R.validate&&R.validate(h,w.data)!==!0)return}catch{return}this.writeCell(l,w.data,R.field,v.id,u,h)}},c=(u,p)=>N(a[p].def,this.rowModel.getRow(u).data);if(r.r1<t.r1||r.r2>t.r2)for(let u=t.c1;u<=t.c2;u++){let p=[],h=[];for(let v=t.r1;v<=t.r2;v++)p.push(c(v,u));for(let v=t.r2;v>=t.r1;v--)h.push(c(v,u));ce(p,r.r2-t.r2).forEach((v,w)=>d(t.r2+1+w,u,v)),ce(h,t.r1-r.r1).forEach((v,w)=>d(t.r1-1-w,u,v))}else if(r.c1<t.c1||r.c2>t.c2)for(let u=t.r1;u<=t.r2;u++){let p=[],h=[];for(let v=t.c1;v<=t.c2;v++)p.push(c(u,v));for(let v=t.c2;v>=t.c1;v--)h.push(c(u,v));ce(p,r.c2-t.c2).forEach((v,w)=>d(u,t.c2+1+w,v)),ce(h,t.c1-r.c1).forEach((v,w)=>d(u,t.c1-1-w,v))}else return;this.endCellTx(l),this.setRange({start:{rowIndex:r.r1,colId:a[r.c1].id},end:{rowIndex:r.r2,colId:a[r.c2].id}})}setPinnedRows(e){e.top&&(this.pinnedRows.top=ee(e.top)),e.bottom&&(this.pinnedRows.bottom=ee(e.bottom)),this.renderer.invalidate({rows:!0})}writeCell(e,t,n,o,r,i){let a=t[n];return Object.is(a,i)?!1:(this.tracker.beforeChange(t),t[n]=i,e.push({row:t,field:n,colId:o,oldValue:a,newValue:i}),this.events.emit("cellValueChanged",{row:t,rowIndex:r,colId:o,oldValue:a,newValue:i}),!0)}endCellTx(e){if(!e.length)return;let t=(n,o)=>{for(let r of n){let i=r.row[r.field];r.row[r.field]=r[o],this.events.emit("cellValueChanged",{row:r.row,rowIndex:this.rowModel.indexOfId(this.rowModel.idOf(r.row)),colId:r.colId,oldValue:i,newValue:r[o]})}this.afterDataEdit()};this.history.push({undo:()=>t([...e].reverse(),"oldValue"),redo:()=>t(e,"newValue")}),this.afterDataEdit()}afterDataEdit(){this.editVersion++,this.refreshSummary(),this.renderer.invalidate({rows:!0})}applyEdit(e,t,n){let o=this.rowModel.getRow(e),r=this.columns.getColumn(t)?.def;if(!o||!r?.field)return;let i=[];this.writeCell(i,o.data,r.field,t,e,n),this.endCellTx(i)}clearCells(){let e=this.columns.displayed(),t=this.rangeBounds(),n=this.store.state.focus,o=n?this.columns.getColumn(n.colId)?.index:void 0,r=t??(n&&o!==void 0?{r1:n.rowIndex,r2:n.rowIndex,c1:o,c2:o}:null);if(!r)return;let i=[];for(let a=r.r1;a<=r.r2;a++){let l=this.rowModel.getRow(a);for(let d=r.c1;d<=r.c2;d++){let c=e[d]?.def;l&&!l.kind&&c?.editable&&c.field&&this.writeCell(i,l.data,c.field,e[d].id,a,null)}}this.endCellTx(i)}replaceData(e){this.store.set({data:e});let t=new Set(this.rowModel.allNodes().map(i=>i.id)),n=this.store.state.selected;[...n].some(i=>!t.has(i))&&this.setSelected(new Set([...n].filter(i=>t.has(i))));let o=this.rowModel.getRowCount(),r=this.store.state.focus;r&&r.rowIndex>=o&&this.store.set({focus:o?{...r,rowIndex:o-1}:null})}addRows(e,t,n=!0){if(this.clientOnly("addRows"))return[];let o=ee(Array.isArray(e)?e:[]);if(!o.length)return[];let r=[...this.store.state.data],i=t===void 0?r.length:Math.max(0,Math.min(r.length,t));r.splice(i,0,...o);for(let a of o)this.tracker.created.add(a);return this.replaceData(r),n&&this.history.push({undo:()=>this.removeRows(o,!1),redo:()=>this.addRows(o,i,!1)}),this.events.emit("rowsAdded",{rows:[...o]}),o}removeRows(e,t=!0){if(this.clientOnly("removeRows"))return[];let n=this.store.state.data,o=typeof e=="function"?e:(l=>d=>l.has(d))(new Set(e)),r=[];if(n.forEach((l,d)=>{let c=!1;try{c=!!o(l)}catch{c=!1}c&&r.push({row:l,index:d})}),!r.length)return[];let i=new Set(r.map(l=>l.row)),a=new Set(r.filter(l=>this.tracker.created.has(l.row)).map(l=>l.row));for(let{row:l,index:d}of r)a.has(l)?this.tracker.created.delete(l):this.tracker.deleted.set(l,d);return this.replaceData(n.filter(l=>!i.has(l))),t&&this.history.push({undo:()=>{let l=[...this.store.state.data];for(let{row:d,index:c}of r)l.splice(Math.min(c,l.length),0,d),this.tracker.deleted.delete(d),a.has(d)&&this.tracker.created.add(d);this.replaceData(l)},redo:()=>this.removeRows([...i],!1)}),this.events.emit("rowsRemoved",{rows:r.map(l=>l.row)}),r.map(l=>l.row)}trackedFields(){let e=[],t=n=>{for(let o of n)o.children?t(o.children):o.def.field&&!L(o.id)&&e.push({field:o.def.field,colId:o.id})};return t(this.columns.roots()),e}getChanges(){let e=this.trackedFields(),t=[];for(let[n,o]of this.tracker.originals)if(!this.tracker.deleted.has(n))for(let r of this.tracker.diff(n,e.map(i=>i.field)))t.push({row:n,colId:e.find(i=>i.field===r).colId,oldValue:o[r],newValue:n[r]});return t}getModifiedRows(){let e=this.trackedFields().map(n=>n.field),t=this.store.state.data;return{created:t.filter(n=>this.tracker.created.has(n)),updated:t.filter(n=>this.tracker.originals.has(n)&&this.tracker.diff(n,e).length>0),deleted:[...this.tracker.deleted.keys()]}}hasChanges(){let e=this.getModifiedRows();return e.created.length+e.updated.length+e.deleted.length>0}commitChanges(){this.tracker.reset(),this.renderer.invalidate({rows:!0})}revertChanges(){this.editor.cancel();for(let[n,o]of this.tracker.originals)Object.assign(n,o);let e=this.store.state.data.filter(n=>!this.tracker.created.has(n)),t=[...this.tracker.deleted.entries()].sort((n,o)=>n[1]-o[1]);e=[...e];for(let[n,o]of t)e.splice(Math.min(o,e.length),0,n);this.tracker.reset(),this.history.clear(),this.replaceData(e),this.afterDataEdit()}undo(){this.editor.cancel(),this.history.undo()}redo(){this.editor.cancel(),this.history.redo()}toast(e){let t=y("div","fg-toast",{role:"status"});t.textContent=e,this.renderer.root.append(t),setTimeout(()=>t.remove(),3500)}refreshChoosers(){this.chooser.refresh(),this.sideBar?.refresh()}setColumnsVisible(e,t){let n=[];for(let o of e){let r=this.columns.getNode(o);!r||r.children||r.hide===!t||(this.columns.setHide(o,!t),n.push(o))}if(n.length){this.columnsChanged();for(let o of n)this.events.emit("columnVisible",{colId:o,visible:t})}}autoSize(e){let t=(e?e.map(l=>this.columns.getColumn(l)):this.columns.displayed()).filter(l=>!!l&&ve(l.def)),{first:n,last:o}=this.renderer.renderedRange(),r=this.store.state.locale.code,i=66,a=24;for(let l of t){let d=this.renderer.measureText(l.def.header??l.def.field??"",!0)+i,c=H(l.def,r);for(let p=n;p<=o;p++){let h=this.rowModel.getRow(p);h&&(d=Math.max(d,this.renderer.measureText(c(N(l.def,h.data)),!1)+a))}let u=this.columns.setWidth(l.id,Math.ceil(d));this.events.emit("columnResize",{colId:l.id,width:u})}this.layoutChanged()}resetColumns(){this.columns.reset(),this.columnsChanged()}setSort(e){let t=e.filter(n=>{let o=this.columns.getNode(n.colId);return!o||o.children?(P(`setSort: unknown column "${n.colId}"`),!1):n.dir==="asc"||n.dir==="desc"});this.store.set({sort:t}),this.events.emit("sortChange",{sort:[...t]})}toggleSort(e,t){let n=this.store.state.sort,o=n.find(a=>a.colId===e),r=o?o.dir==="asc"?"desc":null:"asc",i;t?r?o?i=n.map(a=>a.colId===e?{colId:e,dir:r}:a):i=[...n,{colId:e,dir:r}]:i=n.filter(a=>a.colId!==e):i=r?[{colId:e,dir:r}]:[],this.setSort(i)}setFilter(e,t){let n=this.columns.getNode(e);if(!n||n.children){P(`setFilter: unknown column "${e}"`);return}let o={...this.store.state.filters};t?o[e]=t:delete o[e],this.store.set({filters:o}),this.events.emit("filterChange",{filters:{...o}})}setPinned(e,t){this.columns.setPinned(e,t),this.layoutChanged()}setFocus(e,t){let n=this.store.state.focus;n&&n.rowIndex===e&&n.colId===t||(this.store.set({focus:{rowIndex:e,colId:t}}),this.events.emit("focusChange",{rowIndex:e,colId:t}))}setSelected(e,t=this.store.state.anchorId){this.store.set({selected:e,anchorId:t}),this.events.emit("selectionChange",{selected:this.selectedRows()})}selectFromClick(e,t,n){let o=this.options.rowSelection;if(!o||e<0||e>=this.rowModel.getRowCount()||this.rowModel.getRow(e).kind)return;let r=kn({selected:this.store.state.selected,anchorIndex:this.anchorIndex(),mode:o,index:e,idAt:i=>this.rowModel.getRow(i).id,toggle:t,range:n});if(this.rowModel.rows()!==this.rowModel.dataRows())for(let i of r.selected){if(this.store.state.selected.has(i))continue;let a=this.rowModel.indexOfId(i);a>=0&&this.rowModel.getRow(a).kind&&r.selected.delete(i)}this.setSelected(r.selected,this.rowModel.getRow(r.anchorIndex)?.id??null)}anchorIndex(){let e=this.store.state.anchorId;if(e==null)return null;let t=this.rowModel.indexOfId(e);return t<0?null:t}toggleSelectAll(){let e=this.rowModel.dataRows(),t=this.store.state.selected,n=e.length>0&&e.every(r=>t.has(r.id)),o=new Set(t);for(let r of e)n?o.delete(r.id):o.add(r.id);this.setSelected(o)}selectedRows(){let e=this.store.state.selected;return e.size?this.rowModel.allNodes().filter(t=>e.has(t.id)).map(t=>t.data):[]}withSelect(e){let t=[];return this.options.rowDrag&&t.push(Tt),this.options.rowSelection&&t.push(Dt),[...t,...e]}setData(e){if(this.clientOnly("setData"))return;if(!Array.isArray(e)){P("setData: rows must be an array");return}this.editor.cancel(),this.tracker.reset(),this.history.clear(),this.detailOpen.clear(),this.renderer.dropDetail(),this.store.set({data:ee(e)});let t=this.store.state.selected;if(t.size)if(this.options.getRowId){let r=new Set(this.rowModel.allNodes().map(a=>a.id)),i=new Set([...t].filter(a=>r.has(a)));i.size!==t.size&&this.setSelected(i)}else this.setSelected(new Set,null);let n=this.rowModel.getRowCount(),o=this.store.state.focus;o&&o.rowIndex>=n&&this.store.set({focus:n?{...o,rowIndex:n-1}:null})}setColumns(e){if(!Array.isArray(e)){P("setColumns: columns must be an array");return}if(this.menu.close(),this.sourceDefs=e,this.pivotCfg){this.rebuildPivot();return}this.columns.setDefs(this.withSelect(e));let t=o=>!!this.columns.getNode(o),n=this.groupBy.filter(t);n.length!==this.groupBy.length&&(this.groupBy=n,this.groupPanel?.refresh(),this.events.emit("groupChange",{groupBy:[...n]})),this.store.set({sort:this.store.state.sort.filter(o=>t(o.colId)),filters:Object.fromEntries(Object.entries(this.store.state.filters).filter(([o])=>t(o))),focus:null}),this.columnsChanged()}onChange(e){let t=(...o)=>o.some(r=>e.includes(r));this.pivotCfg&&t("data","locale")&&this.rebuildPivot(!1),t("locale")&&(this.menu.close(),this.chooser.close(),this.sideBar?.refresh(),this.rowModel.invalidate());let n=t("sort","filters","quickFilter")&&this.page!==0;n&&(this.page=0),t("data","sort","filters","quickFilter","locale")&&this.updateRows(),n&&this.emitPage(),t("data","sort","filters","quickFilter")&&this.store.state.range&&this.setRange(null),t("data","sort","filters","quickFilter","locale")&&this.finder.refresh(),(t("data","filters","quickFilter","locale")||t("selected")&&this.summaryOpts?.scope==="selected")&&this.refreshSummary(),t("locale")&&this.groupPanel?.refresh(),t("filters")&&this.sideBar?.refresh(),t("theme")&&this.renderer.applyTheme(),this.renderer.invalidate({header:t("sort","filters","quickFilter","locale","selected","data"),rows:t("data","sort","filters","quickFilter","locale")})}createApi(){let e=t=>((...n)=>{if(this.destroyed){P("API called after destroy()");return}return t(...n)});return{setData:e(t=>this.setData(t)),getData:e(()=>this.store.state.data),setColumns:e(t=>this.setColumns(t)),getColumnState:e(()=>this.columns.getState()),applyColumnState:e(t=>{this.columns.applyState(t),this.columnsChanged()}),setSort:e(t=>this.setSort(t)),getSort:e(()=>[...this.store.state.sort]),setFilter:e((t,n)=>this.setFilter(t,n)),getFilterModel:e(()=>({...this.store.state.filters})),setQuickFilter:e(t=>this.store.set({quickFilter:t??""})),getSelectedRows:e(()=>this.selectedRows()),selectAll:e(()=>this.setSelected(new Set([...this.store.state.selected,...this.rowModel.dataRows().map(t=>t.id)]))),deselectAll:e(()=>this.setSelected(new Set,null)),getDisplayedRowCount:e(()=>this.rowModel.getRowCount()),scrollToRow:e(t=>this.renderer.scrollToRow(t)),setTheme:e(t=>this.store.set({theme:t})),setLocale:e(t=>this.store.set({locale:me(t)})),setFont:e(t=>this.setFont(t)),setColumnVisible:e((t,n)=>this.setColumnsVisible([t],n)),autoSizeColumns:e(t=>this.autoSize(t)),resetColumnState:e(()=>this.resetColumns()),openColumnChooser:e(()=>this.chooser.open()),closeColumnChooser:e(()=>this.chooser.close()),toggleSideBar:e((t,n)=>this.sideBar?.toggle(t,n)),setSummary:e(t=>this.setSummary(t)),getSummaryValues:e(()=>this.summaryValues.map(t=>({...t}))),getRange:e(()=>{let t=this.store.state.range;return t&&{start:{...t.start},end:{...t.end}}}),setRange:e(t=>this.setRange(t)),copySelection:e(t=>this.copyToClipboard(!!t?.headers,!!t?.rows)),pasteText:e(t=>this.pasteText(t)),startEdit:e((t,n)=>this.editor.start(t,n)),stopEdit:e(t=>t?this.editor.cancel():void this.editor.commit(null)),addRows:e((t,n)=>this.addRows(t,n)),removeRows:e(t=>this.removeRows(t)),removeSelectedRows:e(()=>this.removeRows(this.selectedRows())),getModifiedRows:e(()=>this.getModifiedRows()),getChanges:e(()=>this.getChanges()),hasChanges:e(()=>this.hasChanges()),commitChanges:e(()=>this.commitChanges()),revertChanges:e(()=>this.revertChanges()),undo:e(()=>this.undo()),redo:e(()=>this.redo()),canUndo:e(()=>this.history.canUndo()),canRedo:e(()=>this.history.canRedo()),fillRange:e(t=>this.fillRange(t)),setPinnedRows:e(t=>this.setPinnedRows(t)),find:e(t=>this.finder.find(t)),findNext:e(()=>this.finder.next()),findPrevious:e(()=>this.finder.previous()),clearFind:e(()=>this.finder.clear()),setGroupBy:e(t=>this.setGroupBy(t)),getGroupBy:e(()=>this.getGroupBy()),setGroupExpanded:e((t,n)=>this.setGroupExpanded(t,n)),expandAll:e(()=>this.expandAll(!0)),collapseAll:e(()=>this.expandAll(!1)),setDetailExpanded:e((t,n)=>this.setDetailExpanded(t,n)),isDetailExpanded:e(t=>this.isDetailExpanded(t)),moveRow:e((t,n)=>this.moveRow(t,n)),setPage:e(t=>this.setPage(t)),getPage:e(()=>this.getPage()),getPageCount:e(()=>this.getPageCount()),setPageSize:e(t=>this.setPageSize(t)),getPageSize:e(()=>this.getPageSize()),refreshRows:e(()=>this.refreshRows()),setPivot:e(t=>this.setPivot(t)),getPivot:e(()=>this.getPivot()),createChart:e(t=>this.charts.create(t)),getCsv:e(t=>dt(this,t)),exportCsv:e((t="export.csv",n)=>ut(t,["\uFEFF",dt(this,n)],"text/csv;charset=utf-8")),getXlsx:e(t=>ct(this,t)),exportXlsx:e((t="export.xlsx",n)=>ut(t,[ct(this,n)],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")),importFile:e((t,n)=>an(this,t,n)),on:e((t,n)=>this.events.on(t,n)),destroy:()=>this.destroy()}}destroy(){if(!this.destroyed){this.destroyed=!0;for(let e of this.disposers)e();this.renderer.destroy(),this.events.clear()}}};function zo(s,e){return new bt(s,e).api}var Vo={en:j,ko:Lt,"zh-CN":It,ja:Et,es:Mt,fr:St,de:kt};for(let s of Object.values(Vo))_e(s);export{zo as createGrid,j as en,Vo as locales,ot as parseCsv,at as readXlsx,_e as registerLocale,pt as renderChart,me as resolveLocale,$o as setLicenseKey,yn as verifyLicense,Ve as version,it as writeXlsx};
|
|
1
|
+
var Jn={code:"en",noRows:"No rows to show",filter:"Filter",apply:"Apply",reset:"Reset",selectAll:"(Select all)",search:"Search\u2026",blanks:"(Blanks)",value:"Value",valueTo:"To",sortAsc:"Sort ascending",sortDesc:"Sort descending",clearSort:"Clear sort",pinLeft:"Pin left",pinRight:"Pin right",unpin:"Unpin",columnMenu:"Column menu",selectRow:"Select row",selectAllRows:"Select all rows",chooseColumns:"Choose columns",columns:"Columns",autosizeThis:"Autosize this column",autosizeAll:"Autosize all columns",resetColumns:"Reset columns",hideColumn:"Hide column",close:"Close",copy:"Copy",copyWithHeaders:"Copy with headers",paste:"Paste",pasteHint:"Clipboard access was blocked. Press Ctrl+V to paste.",required:"This field is required",invalidValue:"Invalid value",duplicate:"This value is already used",undo:"Undo",redo:"Redo",deleteRows:"Delete selected rows",copyRows:"Copy selected rows",statusRows:"{n} rows",statusFiltered:"{shown} of {total} rows",statusSelected:"{n} selected",count:"Count",sum:"Sum",avg:"Average",min:"Min",max:"Max",findPlaceholder:"Find in grid",noMatches:"No matches",findNext:"Next match",findPrevious:"Previous match",groupPanelHint:"Drag a column header here to group rows",groupByThis:"Group by this column",ungroup:"Remove grouping",expandAll:"Expand all",collapseAll:"Collapse all",pagerRange:"{from}\u2013{to} of {total}",pageOf:"Page {page} of {pages}",pageSize:"Rows per page",firstPage:"First page",previousPage:"Previous page",nextPage:"Next page",lastPage:"Last page",loading:"Loading\u2026",loadFailed:"Could not load rows",filters:"Filters",clearFilters:"Clear all filters",exportCsv:"Export CSV",exportExcel:"Export Excel",pivot:"Pivot",pivotMode:"Pivot mode",pivotRows:"Row groups",pivotColumns:"Column labels",pivotValues:"Values",total:"Total",addColumn:"Add a column\u2026",chartBar:"Bar chart",chartStacked:"Stacked bar chart",chartLine:"Line chart",chartArea:"Area chart",chartPie:"Pie chart",freeBadge:"Free version",ops:{contains:"Contains",equals:"Equals",notEquals:"Does not equal",startsWith:"Starts with",endsWith:"Ends with",blank:"Blank",notBlank:"Not blank",eq:"Equals",ne:"Does not equal",lt:"Less than",lte:"Less than or equal",gt:"Greater than",gte:"Greater than or equal",between:"Between",before:"Before",after:"After"}},ee=Jn;var _t=new Set;function $(s){_t.has(s)||(_t.add(s),console.warn(`[FreeGrid] ${s}`))}var ue=new Map([["en",ee]]);function ht(s){ue.set(s.code,s)}function Wt(s){let e=s.toLowerCase();for(let n of ue.keys())if(n.toLowerCase()===e)return n;let t=e.split("-")[0];if(t==="zh"&&ue.has("zh-CN"))return"zh-CN";for(let n of ue.keys())if(n.toLowerCase().split("-")[0]===t)return n}function Qn(){return typeof navigator>"u"?[]:navigator.languages?.length?navigator.languages:navigator.language?[navigator.language]:[]}function er(s){return{...ee,...s,code:s.code??"en",ops:{...ee.ops,...s.ops??{}}}}function De(s,e=Qn()){if(s&&typeof s=="object")return er(s);if(typeof s=="string"){let t=Wt(s);return t?ue.get(t):($(`locale "${s}" is not registered \u2014 import it from "@freegridjs/core/locales/${s}" and pass the pack (or call registerLocale). Falling back to "en".`),ee)}for(let t of e){let n=Wt(t);if(n)return ue.get(n)}return ee}var tr={code:"de",noRows:"Keine Zeilen vorhanden",filter:"Filter",apply:"Anwenden",reset:"Zur\xFCcksetzen",selectAll:"(Alle ausw\xE4hlen)",search:"Suchen\u2026",blanks:"(Leer)",value:"Wert",valueTo:"Bis",sortAsc:"Aufsteigend sortieren",sortDesc:"Absteigend sortieren",clearSort:"Sortierung aufheben",pinLeft:"Links fixieren",pinRight:"Rechts fixieren",unpin:"Fixierung l\xF6sen",columnMenu:"Spaltenmen\xFC",selectRow:"Zeile ausw\xE4hlen",selectAllRows:"Alle Zeilen ausw\xE4hlen",chooseColumns:"Spalten ausw\xE4hlen",columns:"Spalten",autosizeThis:"Diese Spalte automatisch anpassen",autosizeAll:"Alle Spalten automatisch anpassen",resetColumns:"Spalten zur\xFCcksetzen",hideColumn:"Spalte ausblenden",close:"Schlie\xDFen",copy:"Kopieren",copyWithHeaders:"Mit \xDCberschriften kopieren",paste:"Einf\xFCgen",pasteHint:"Der Browser hat die Zwischenablage blockiert. Dr\xFCcken Sie Ctrl+V zum Einf\xFCgen.",required:"Dieses Feld ist erforderlich",invalidValue:"Ung\xFCltiger Wert",duplicate:"Dieser Wert wird bereits verwendet",undo:"R\xFCckg\xE4ngig",redo:"Wiederholen",deleteRows:"Ausgew\xE4hlte Zeilen l\xF6schen",copyRows:"Ausgew\xE4hlte Zeilen kopieren",statusRows:"{n} Zeilen",statusFiltered:"{shown} von {total} Zeilen",statusSelected:"{n} ausgew\xE4hlt",count:"Anzahl",sum:"Summe",avg:"Mittelwert",min:"Min",max:"Max",findPlaceholder:"Im Raster suchen",noMatches:"Keine Treffer",findNext:"N\xE4chster Treffer",findPrevious:"Vorheriger Treffer",groupPanelHint:"Spalten\xFCberschrift hierher ziehen, um zu gruppieren",groupByThis:"Nach dieser Spalte gruppieren",ungroup:"Gruppierung aufheben",expandAll:"Alle aufklappen",collapseAll:"Alle zuklappen",pagerRange:"{from}\u2013{to} von {total}",pageOf:"Seite {page} von {pages}",pageSize:"Zeilen pro Seite",firstPage:"Erste Seite",previousPage:"Vorherige Seite",nextPage:"N\xE4chste Seite",lastPage:"Letzte Seite",loading:"Wird geladen\u2026",loadFailed:"Zeilen konnten nicht geladen werden",filters:"Filter",clearFilters:"Alle Filter entfernen",exportCsv:"Als CSV exportieren",exportExcel:"Nach Excel exportieren",pivot:"Pivot",pivotMode:"Pivot-Modus",pivotRows:"Zeilengruppen",pivotColumns:"Spaltenbeschriftungen",pivotValues:"Werte",total:"Gesamt",addColumn:"Spalte hinzuf\xFCgen\u2026",chartBar:"Balkendiagramm",chartStacked:"Gestapelte Balken",chartLine:"Liniendiagramm",chartArea:"Fl\xE4chendiagramm",chartPie:"Kreisdiagramm",freeBadge:"Kostenlose Version",ops:{contains:"Enth\xE4lt",equals:"Gleich",notEquals:"Ungleich",startsWith:"Beginnt mit",endsWith:"Endet mit",blank:"Leer",notBlank:"Nicht leer",eq:"Gleich",ne:"Ungleich",lt:"Kleiner als",lte:"Kleiner oder gleich",gt:"Gr\xF6\xDFer als",gte:"Gr\xF6\xDFer oder gleich",between:"Zwischen",before:"Vor",after:"Nach"}},jt=tr;var nr={code:"es",noRows:"No hay filas para mostrar",filter:"Filtro",apply:"Aplicar",reset:"Restablecer",selectAll:"(Seleccionar todo)",search:"Buscar\u2026",blanks:"(Vac\xEDos)",value:"Valor",valueTo:"Hasta",sortAsc:"Orden ascendente",sortDesc:"Orden descendente",clearSort:"Quitar orden",pinLeft:"Fijar a la izquierda",pinRight:"Fijar a la derecha",unpin:"Desfijar",columnMenu:"Men\xFA de columna",selectRow:"Seleccionar fila",selectAllRows:"Seleccionar todas las filas",chooseColumns:"Elegir columnas",columns:"Columnas",autosizeThis:"Ajustar esta columna",autosizeAll:"Ajustar todas las columnas",resetColumns:"Restablecer columnas",hideColumn:"Ocultar columna",close:"Cerrar",copy:"Copiar",copyWithHeaders:"Copiar con encabezados",paste:"Pegar",pasteHint:"El navegador bloque\xF3 el portapapeles. Pulsa Ctrl+V para pegar.",required:"Este campo es obligatorio",invalidValue:"Valor no v\xE1lido",duplicate:"Este valor ya est\xE1 en uso",undo:"Deshacer",redo:"Rehacer",deleteRows:"Eliminar filas seleccionadas",copyRows:"Copiar filas seleccionadas",statusRows:"{n} filas",statusFiltered:"{shown} de {total} filas",statusSelected:"{n} seleccionadas",count:"Recuento",sum:"Suma",avg:"Promedio",min:"M\xEDn.",max:"M\xE1x.",findPlaceholder:"Buscar en la tabla",noMatches:"Sin coincidencias",findNext:"Siguiente",findPrevious:"Anterior",groupPanelHint:"Arrastre aqu\xED un encabezado de columna para agrupar",groupByThis:"Agrupar por esta columna",ungroup:"Quitar agrupaci\xF3n",expandAll:"Expandir todo",collapseAll:"Contraer todo",pagerRange:"{from}\u2013{to} de {total}",pageOf:"P\xE1gina {page} de {pages}",pageSize:"Filas por p\xE1gina",firstPage:"Primera p\xE1gina",previousPage:"P\xE1gina anterior",nextPage:"P\xE1gina siguiente",lastPage:"\xDAltima p\xE1gina",loading:"Cargando\u2026",loadFailed:"No se pudieron cargar las filas",filters:"Filtros",clearFilters:"Quitar todos los filtros",exportCsv:"Exportar CSV",exportExcel:"Exportar a Excel",pivot:"Tabla din\xE1mica",pivotMode:"Modo tabla din\xE1mica",pivotRows:"Grupos de filas",pivotColumns:"Etiquetas de columna",pivotValues:"Valores",total:"Total",addColumn:"A\xF1adir columna\u2026",chartBar:"Gr\xE1fico de barras",chartStacked:"Barras apiladas",chartLine:"Gr\xE1fico de l\xEDneas",chartArea:"Gr\xE1fico de \xE1reas",chartPie:"Gr\xE1fico circular",freeBadge:"Versi\xF3n gratuita",ops:{contains:"Contiene",equals:"Igual a",notEquals:"Distinto de",startsWith:"Empieza por",endsWith:"Termina en",blank:"Vac\xEDo",notBlank:"No vac\xEDo",eq:"Igual a",ne:"Distinto de",lt:"Menor que",lte:"Menor o igual que",gt:"Mayor que",gte:"Mayor o igual que",between:"Entre",before:"Antes de",after:"Despu\xE9s de"}},Xt=nr;var rr={code:"fr",noRows:"Aucune ligne \xE0 afficher",filter:"Filtre",apply:"Appliquer",reset:"R\xE9initialiser",selectAll:"(Tout s\xE9lectionner)",search:"Rechercher\u2026",blanks:"(Vides)",value:"Valeur",valueTo:"\xC0",sortAsc:"Tri croissant",sortDesc:"Tri d\xE9croissant",clearSort:"Annuler le tri",pinLeft:"\xC9pingler \xE0 gauche",pinRight:"\xC9pingler \xE0 droite",unpin:"D\xE9s\xE9pingler",columnMenu:"Menu de colonne",selectRow:"S\xE9lectionner la ligne",selectAllRows:"S\xE9lectionner toutes les lignes",chooseColumns:"Choisir les colonnes",columns:"Colonnes",autosizeThis:"Ajuster cette colonne",autosizeAll:"Ajuster toutes les colonnes",resetColumns:"R\xE9initialiser les colonnes",hideColumn:"Masquer la colonne",close:"Fermer",copy:"Copier",copyWithHeaders:"Copier avec les en-t\xEAtes",paste:"Coller",pasteHint:"Le navigateur a bloqu\xE9 le presse-papiers. Appuyez sur Ctrl+V pour coller.",required:"Ce champ est obligatoire",invalidValue:"Valeur non valide",duplicate:"Cette valeur est d\xE9j\xE0 utilis\xE9e",undo:"Annuler",redo:"R\xE9tablir",deleteRows:"Supprimer les lignes s\xE9lectionn\xE9es",copyRows:"Copier les lignes s\xE9lectionn\xE9es",statusRows:"{n} lignes",statusFiltered:"{shown} sur {total} lignes",statusSelected:"{n} s\xE9lectionn\xE9es",count:"Nombre",sum:"Somme",avg:"Moyenne",min:"Min",max:"Max",findPlaceholder:"Rechercher dans la grille",noMatches:"Aucun r\xE9sultat",findNext:"Suivant",findPrevious:"Pr\xE9c\xE9dent",groupPanelHint:"Faites glisser un en-t\xEAte de colonne ici pour regrouper",groupByThis:"Regrouper par cette colonne",ungroup:"Supprimer le regroupement",expandAll:"Tout d\xE9velopper",collapseAll:"Tout r\xE9duire",pagerRange:"{from}\u2013{to} sur {total}",pageOf:"Page {page} sur {pages}",pageSize:"Lignes par page",firstPage:"Premi\xE8re page",previousPage:"Page pr\xE9c\xE9dente",nextPage:"Page suivante",lastPage:"Derni\xE8re page",loading:"Chargement\u2026",loadFailed:"Impossible de charger les lignes",filters:"Filtres",clearFilters:"Effacer tous les filtres",exportCsv:"Exporter en CSV",exportExcel:"Exporter vers Excel",pivot:"Tableau crois\xE9",pivotMode:"Mode tableau crois\xE9",pivotRows:"Groupes de lignes",pivotColumns:"\xC9tiquettes de colonnes",pivotValues:"Valeurs",total:"Total",addColumn:"Ajouter une colonne\u2026",chartBar:"Histogramme",chartStacked:"Histogramme empil\xE9",chartLine:"Courbes",chartArea:"Aires",chartPie:"Secteurs",freeBadge:"Version gratuite",ops:{contains:"Contient",equals:"\xC9gal \xE0",notEquals:"Diff\xE9rent de",startsWith:"Commence par",endsWith:"Se termine par",blank:"Vide",notBlank:"Non vide",eq:"\xC9gal \xE0",ne:"Diff\xE9rent de",lt:"Inf\xE9rieur \xE0",lte:"Inf\xE9rieur ou \xE9gal \xE0",gt:"Sup\xE9rieur \xE0",gte:"Sup\xE9rieur ou \xE9gal \xE0",between:"Entre",before:"Avant",after:"Apr\xE8s"}},Yt=rr;var or={code:"ja",noRows:"\u8868\u793A\u3059\u308B\u30C7\u30FC\u30BF\u304C\u3042\u308A\u307E\u305B\u3093",filter:"\u30D5\u30A3\u30EB\u30BF\u30FC",apply:"\u9069\u7528",reset:"\u30EA\u30BB\u30C3\u30C8",selectAll:"(\u3059\u3079\u3066\u9078\u629E)",search:"\u691C\u7D22\u2026",blanks:"(\u7A7A\u767D)",value:"\u5024",valueTo:"\u7D42\u4E86\u5024",sortAsc:"\u6607\u9806\u3067\u4E26\u3079\u66FF\u3048",sortDesc:"\u964D\u9806\u3067\u4E26\u3079\u66FF\u3048",clearSort:"\u4E26\u3079\u66FF\u3048\u3092\u89E3\u9664",pinLeft:"\u5DE6\u306B\u56FA\u5B9A",pinRight:"\u53F3\u306B\u56FA\u5B9A",unpin:"\u56FA\u5B9A\u3092\u89E3\u9664",columnMenu:"\u5217\u30E1\u30CB\u30E5\u30FC",selectRow:"\u884C\u3092\u9078\u629E",selectAllRows:"\u3059\u3079\u3066\u306E\u884C\u3092\u9078\u629E",chooseColumns:"\u5217\u3092\u9078\u629E",columns:"\u5217",autosizeThis:"\u3053\u306E\u5217\u306E\u5E45\u3092\u81EA\u52D5\u8ABF\u6574",autosizeAll:"\u3059\u3079\u3066\u306E\u5217\u306E\u5E45\u3092\u81EA\u52D5\u8ABF\u6574",resetColumns:"\u5217\u3092\u30EA\u30BB\u30C3\u30C8",hideColumn:"\u5217\u3092\u975E\u8868\u793A",close:"\u9589\u3058\u308B",copy:"\u30B3\u30D4\u30FC",copyWithHeaders:"\u30D8\u30C3\u30C0\u30FC\u4ED8\u304D\u3067\u30B3\u30D4\u30FC",paste:"\u8CBC\u308A\u4ED8\u3051",pasteHint:"\u30D6\u30E9\u30A6\u30B6\u30FC\u304C\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u30D6\u30ED\u30C3\u30AF\u3057\u307E\u3057\u305F\u3002Ctrl+V \u3067\u8CBC\u308A\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u3002",required:"\u3053\u306E\u9805\u76EE\u306F\u5FC5\u9808\u3067\u3059",invalidValue:"\u7121\u52B9\u306A\u5024\u3067\u3059",duplicate:"\u3053\u306E\u5024\u306F\u3059\u3067\u306B\u4F7F\u308F\u308C\u3066\u3044\u307E\u3059",undo:"\u5143\u306B\u623B\u3059",redo:"\u3084\u308A\u76F4\u3057",deleteRows:"\u9078\u629E\u3057\u305F\u884C\u3092\u524A\u9664",copyRows:"\u9078\u629E\u3057\u305F\u884C\u3092\u30B3\u30D4\u30FC",statusRows:"{n} \u884C",statusFiltered:"{total} \u884C\u4E2D {shown} \u884C",statusSelected:"{n} \u4EF6\u9078\u629E",count:"\u30C7\u30FC\u30BF\u306E\u500B\u6570",sum:"\u5408\u8A08",avg:"\u5E73\u5747",min:"\u6700\u5C0F",max:"\u6700\u5927",findPlaceholder:"\u30B0\u30EA\u30C3\u30C9\u5185\u3092\u691C\u7D22",noMatches:"\u4E00\u81F4\u306A\u3057",findNext:"\u6B21\u3092\u691C\u7D22",findPrevious:"\u524D\u3092\u691C\u7D22",groupPanelHint:"\u5217\u898B\u51FA\u3057\u3092\u3053\u3053\u306B\u30C9\u30E9\u30C3\u30B0\u3057\u3066\u30B0\u30EB\u30FC\u30D7\u5316",groupByThis:"\u3053\u306E\u5217\u3067\u30B0\u30EB\u30FC\u30D7\u5316",ungroup:"\u30B0\u30EB\u30FC\u30D7\u5316\u3092\u89E3\u9664",expandAll:"\u3059\u3079\u3066\u5C55\u958B",collapseAll:"\u3059\u3079\u3066\u6298\u308A\u305F\u305F\u3080",pagerRange:"{total} \u4EF6\u4E2D {from}\u2013{to} \u4EF6",pageOf:"{pages} \u30DA\u30FC\u30B8\u4E2D {page} \u30DA\u30FC\u30B8",pageSize:"1 \u30DA\u30FC\u30B8\u306E\u884C\u6570",firstPage:"\u6700\u521D\u306E\u30DA\u30FC\u30B8",previousPage:"\u524D\u306E\u30DA\u30FC\u30B8",nextPage:"\u6B21\u306E\u30DA\u30FC\u30B8",lastPage:"\u6700\u5F8C\u306E\u30DA\u30FC\u30B8",loading:"\u8AAD\u307F\u8FBC\u307F\u4E2D\u2026",loadFailed:"\u884C\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\u3067\u3057\u305F",filters:"\u30D5\u30A3\u30EB\u30BF\u30FC",clearFilters:"\u3059\u3079\u3066\u306E\u30D5\u30A3\u30EB\u30BF\u30FC\u3092\u89E3\u9664",exportCsv:"CSV \u306B\u66F8\u304D\u51FA\u3059",exportExcel:"Excel \u306B\u66F8\u304D\u51FA\u3059",pivot:"\u30D4\u30DC\u30C3\u30C8",pivotMode:"\u30D4\u30DC\u30C3\u30C8\u30E2\u30FC\u30C9",pivotRows:"\u884C\u30B0\u30EB\u30FC\u30D7",pivotColumns:"\u5217\u30E9\u30D9\u30EB",pivotValues:"\u5024",total:"\u5408\u8A08",addColumn:"\u5217\u3092\u8FFD\u52A0\u2026",chartBar:"\u68D2\u30B0\u30E9\u30D5",chartStacked:"\u7A4D\u307F\u4E0A\u3052\u68D2\u30B0\u30E9\u30D5",chartLine:"\u6298\u308C\u7DDA\u30B0\u30E9\u30D5",chartArea:"\u9762\u30B0\u30E9\u30D5",chartPie:"\u5186\u30B0\u30E9\u30D5",freeBadge:"\u7121\u6599\u7248\u3092\u4F7F\u7528\u4E2D",ops:{contains:"\u542B\u3080",equals:"\u7B49\u3057\u3044",notEquals:"\u7B49\u3057\u304F\u306A\u3044",startsWith:"\u3067\u59CB\u307E\u308B",endsWith:"\u3067\u7D42\u308F\u308B",blank:"\u7A7A\u767D",notBlank:"\u7A7A\u767D\u4EE5\u5916",eq:"\u7B49\u3057\u3044",ne:"\u7B49\u3057\u304F\u306A\u3044",lt:"\u3088\u308A\u5C0F\u3055\u3044",lte:"\u4EE5\u4E0B",gt:"\u3088\u308A\u5927\u304D\u3044",gte:"\u4EE5\u4E0A",between:"\u7BC4\u56F2\u5185",before:"\u3088\u308A\u524D",after:"\u3088\u308A\u5F8C"}},Zt=or;var sr={code:"ko",noRows:"\uD45C\uC2DC\uD560 \uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4",filter:"\uD544\uD130",apply:"\uC801\uC6A9",reset:"\uCD08\uAE30\uD654",selectAll:"(\uC804\uCCB4 \uC120\uD0DD)",search:"\uAC80\uC0C9\u2026",blanks:"(\uBE48 \uAC12)",value:"\uAC12",valueTo:"\uB05D \uAC12",sortAsc:"\uC624\uB984\uCC28\uC21C \uC815\uB82C",sortDesc:"\uB0B4\uB9BC\uCC28\uC21C \uC815\uB82C",clearSort:"\uC815\uB82C \uD574\uC81C",pinLeft:"\uC67C\uCABD \uACE0\uC815",pinRight:"\uC624\uB978\uCABD \uACE0\uC815",unpin:"\uACE0\uC815 \uD574\uC81C",columnMenu:"\uCEEC\uB7FC \uBA54\uB274",selectRow:"\uD589 \uC120\uD0DD",selectAllRows:"\uC804\uCCB4 \uD589 \uC120\uD0DD",chooseColumns:"\uCEEC\uB7FC \uC120\uD0DD",columns:"\uCEEC\uB7FC",autosizeThis:"\uC774 \uCEEC\uB7FC \uB108\uBE44 \uC790\uB3D9 \uB9DE\uCDA4",autosizeAll:"\uBAA8\uB4E0 \uCEEC\uB7FC \uB108\uBE44 \uC790\uB3D9 \uB9DE\uCDA4",resetColumns:"\uCEEC\uB7FC \uCD08\uAE30\uD654",hideColumn:"\uCEEC\uB7FC \uC228\uAE30\uAE30",close:"\uB2EB\uAE30",copy:"\uBCF5\uC0AC",copyWithHeaders:"\uD5E4\uB354 \uD3EC\uD568 \uBCF5\uC0AC",paste:"\uBD99\uC5EC\uB123\uAE30",pasteHint:"\uBE0C\uB77C\uC6B0\uC800\uAC00 \uD074\uB9BD\uBCF4\uB4DC \uC811\uADFC\uC744 \uB9C9\uC558\uC2B5\uB2C8\uB2E4. Ctrl+V\uB85C \uBD99\uC5EC\uB123\uC73C\uC138\uC694.",required:"\uD544\uC218 \uC785\uB825 \uD56D\uBAA9\uC785\uB2C8\uB2E4",invalidValue:"\uC62C\uBC14\uB978 \uAC12\uC774 \uC544\uB2D9\uB2C8\uB2E4",duplicate:"\uC774\uBBF8 \uC0AC\uC6A9 \uC911\uC778 \uAC12\uC785\uB2C8\uB2E4",undo:"\uC2E4\uD589 \uCDE8\uC18C",redo:"\uB2E4\uC2DC \uC2E4\uD589",deleteRows:"\uC120\uD0DD\uD55C \uD589 \uC0AD\uC81C",copyRows:"\uC120\uD0DD\uD55C \uD589 \uBCF5\uC0AC",statusRows:"{n}\uD589",statusFiltered:"{total}\uD589 \uC911 {shown}\uD589",statusSelected:"{n}\uAC1C \uC120\uD0DD",count:"\uAC1C\uC218",sum:"\uD569\uACC4",avg:"\uD3C9\uADE0",min:"\uCD5C\uC18C",max:"\uCD5C\uB300",findPlaceholder:"\uADF8\uB9AC\uB4DC\uC5D0\uC11C \uCC3E\uAE30",noMatches:"\uC77C\uCE58 \uD56D\uBAA9 \uC5C6\uC74C",findNext:"\uB2E4\uC74C \uCC3E\uAE30",findPrevious:"\uC774\uC804 \uCC3E\uAE30",groupPanelHint:"\uC5F4 \uBA38\uB9AC\uAE00\uC744 \uC5EC\uAE30\uB85C \uB04C\uC5B4\uC640 \uD589\uC744 \uBB36\uC73C\uC138\uC694",groupByThis:"\uC774 \uC5F4\uB85C \uBB36\uAE30",ungroup:"\uBB36\uAE30 \uD574\uC81C",expandAll:"\uBAA8\uB450 \uD3BC\uCE58\uAE30",collapseAll:"\uBAA8\uB450 \uC811\uAE30",pagerRange:"{total}\uAC1C \uC911 {from}\u2013{to}",pageOf:"{pages}\uCABD \uC911 {page}\uCABD",pageSize:"\uCABD\uB2F9 \uD589 \uC218",firstPage:"\uCCAB \uCABD",previousPage:"\uC774\uC804 \uCABD",nextPage:"\uB2E4\uC74C \uCABD",lastPage:"\uB9C8\uC9C0\uB9C9 \uCABD",loading:"\uBD88\uB7EC\uC624\uB294 \uC911\u2026",loadFailed:"\uD589\uC744 \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4",filters:"\uD544\uD130",clearFilters:"\uD544\uD130 \uBAA8\uB450 \uC9C0\uC6B0\uAE30",exportCsv:"CSV\uB85C \uB0B4\uBCF4\uB0B4\uAE30",exportExcel:"\uC5D1\uC140\uB85C \uB0B4\uBCF4\uB0B4\uAE30",pivot:"\uD53C\uBC97",pivotMode:"\uD53C\uBC97 \uBAA8\uB4DC",pivotRows:"\uD589 \uADF8\uB8F9",pivotColumns:"\uC5F4 \uB808\uC774\uBE14",pivotValues:"\uAC12",total:"\uD569\uACC4",addColumn:"\uCEEC\uB7FC \uCD94\uAC00\u2026",chartBar:"\uB9C9\uB300 \uCC28\uD2B8",chartStacked:"\uB204\uC801 \uB9C9\uB300 \uCC28\uD2B8",chartLine:"\uAEBE\uC740\uC120 \uCC28\uD2B8",chartArea:"\uC601\uC5ED \uCC28\uD2B8",chartPie:"\uC6D0\uD615 \uCC28\uD2B8",freeBadge:"\uBB34\uB8CC \uC0AC\uC6A9 \uC911",ops:{contains:"\uD3EC\uD568",equals:"\uAC19\uC74C",notEquals:"\uAC19\uC9C0 \uC54A\uC74C",startsWith:"\uC2DC\uC791 \uBB38\uC790",endsWith:"\uB05D \uBB38\uC790",blank:"\uBE48 \uAC12",notBlank:"\uBE48 \uAC12 \uC544\uB2D8",eq:"\uAC19\uC74C",ne:"\uAC19\uC9C0 \uC54A\uC74C",lt:"\uBBF8\uB9CC",lte:"\uC774\uD558",gt:"\uCD08\uACFC",gte:"\uC774\uC0C1",between:"\uBC94\uC704",before:"\uC774\uC804",after:"\uC774\uD6C4"}},Jt=sr;var ir={code:"zh-CN",noRows:"\u6CA1\u6709\u53EF\u663E\u793A\u7684\u6570\u636E",filter:"\u7B5B\u9009",apply:"\u5E94\u7528",reset:"\u91CD\u7F6E",selectAll:"(\u5168\u9009)",search:"\u641C\u7D22\u2026",blanks:"(\u7A7A\u767D)",value:"\u503C",valueTo:"\u81F3",sortAsc:"\u5347\u5E8F\u6392\u5E8F",sortDesc:"\u964D\u5E8F\u6392\u5E8F",clearSort:"\u6E05\u9664\u6392\u5E8F",pinLeft:"\u56FA\u5B9A\u5728\u5DE6\u4FA7",pinRight:"\u56FA\u5B9A\u5728\u53F3\u4FA7",unpin:"\u53D6\u6D88\u56FA\u5B9A",columnMenu:"\u5217\u83DC\u5355",selectRow:"\u9009\u62E9\u884C",selectAllRows:"\u9009\u62E9\u6240\u6709\u884C",chooseColumns:"\u9009\u62E9\u5217",columns:"\u5217",autosizeThis:"\u81EA\u52A8\u8C03\u6574\u6B64\u5217\u5BBD\u5EA6",autosizeAll:"\u81EA\u52A8\u8C03\u6574\u6240\u6709\u5217\u5BBD\u5EA6",resetColumns:"\u91CD\u7F6E\u5217",hideColumn:"\u9690\u85CF\u5217",close:"\u5173\u95ED",copy:"\u590D\u5236",copyWithHeaders:"\u8FDE\u540C\u6807\u9898\u590D\u5236",paste:"\u7C98\u8D34",pasteHint:"\u6D4F\u89C8\u5668\u963B\u6B62\u4E86\u526A\u8D34\u677F\u8BBF\u95EE\u3002\u8BF7\u6309 Ctrl+V \u7C98\u8D34\u3002",required:"\u6B64\u9879\u4E3A\u5FC5\u586B\u9879",invalidValue:"\u503C\u65E0\u6548",duplicate:"\u8BE5\u503C\u5DF2\u88AB\u4F7F\u7528",undo:"\u64A4\u9500",redo:"\u91CD\u505A",deleteRows:"\u5220\u9664\u6240\u9009\u884C",copyRows:"\u590D\u5236\u6240\u9009\u884C",statusRows:"{n} \u884C",statusFiltered:"{total} \u884C\u4E2D\u7684 {shown} \u884C",statusSelected:"\u5DF2\u9009 {n} \u884C",count:"\u8BA1\u6570",sum:"\u6C42\u548C",avg:"\u5E73\u5747\u503C",min:"\u6700\u5C0F\u503C",max:"\u6700\u5927\u503C",findPlaceholder:"\u5728\u8868\u683C\u4E2D\u67E5\u627E",noMatches:"\u65E0\u5339\u914D\u9879",findNext:"\u4E0B\u4E00\u4E2A",findPrevious:"\u4E0A\u4E00\u4E2A",groupPanelHint:"\u5C06\u5217\u6807\u9898\u62D6\u5230\u6B64\u5904\u4EE5\u5206\u7EC4",groupByThis:"\u6309\u6B64\u5217\u5206\u7EC4",ungroup:"\u53D6\u6D88\u5206\u7EC4",expandAll:"\u5168\u90E8\u5C55\u5F00",collapseAll:"\u5168\u90E8\u6298\u53E0",pagerRange:"\u7B2C {from}\u2013{to} \u6761\uFF0C\u5171 {total} \u6761",pageOf:"\u7B2C {page} \u9875\uFF0C\u5171 {pages} \u9875",pageSize:"\u6BCF\u9875\u884C\u6570",firstPage:"\u9996\u9875",previousPage:"\u4E0A\u4E00\u9875",nextPage:"\u4E0B\u4E00\u9875",lastPage:"\u672B\u9875",loading:"\u52A0\u8F7D\u4E2D\u2026",loadFailed:"\u65E0\u6CD5\u52A0\u8F7D\u6570\u636E",filters:"\u7B5B\u9009",clearFilters:"\u6E05\u9664\u6240\u6709\u7B5B\u9009",exportCsv:"\u5BFC\u51FA CSV",exportExcel:"\u5BFC\u51FA Excel",pivot:"\u6570\u636E\u900F\u89C6",pivotMode:"\u900F\u89C6\u6A21\u5F0F",pivotRows:"\u884C\u5206\u7EC4",pivotColumns:"\u5217\u6807\u7B7E",pivotValues:"\u503C",total:"\u603B\u8BA1",addColumn:"\u6DFB\u52A0\u5217\u2026",chartBar:"\u67F1\u72B6\u56FE",chartStacked:"\u5806\u79EF\u67F1\u72B6\u56FE",chartLine:"\u6298\u7EBF\u56FE",chartArea:"\u9762\u79EF\u56FE",chartPie:"\u997C\u56FE",freeBadge:"\u514D\u8D39\u4F7F\u7528\u4E2D",ops:{contains:"\u5305\u542B",equals:"\u7B49\u4E8E",notEquals:"\u4E0D\u7B49\u4E8E",startsWith:"\u5F00\u5934\u662F",endsWith:"\u7ED3\u5C3E\u662F",blank:"\u4E3A\u7A7A",notBlank:"\u4E0D\u4E3A\u7A7A",eq:"\u7B49\u4E8E",ne:"\u4E0D\u7B49\u4E8E",lt:"\u5C0F\u4E8E",lte:"\u5C0F\u4E8E\u6216\u7B49\u4E8E",gt:"\u5927\u4E8E",gte:"\u5927\u4E8E\u6216\u7B49\u4E8E",between:"\u4ECB\u4E8E",before:"\u65E9\u4E8E",after:"\u665A\u4E8E"}},Qt=ir;var Y="__fg_select__",en={id:Y,header:"",width:44,minWidth:44,maxWidth:44,pinned:"left",sortable:!1,resizable:!1,filter:!1},ae="__fg_drag__",tn={id:ae,header:"",width:28,minWidth:28,maxWidth:28,pinned:"left",sortable:!1,resizable:!1,filter:!1,chooser:!1},I=s=>s===Y||s===ae,ar=120,lr=40,dr=["left","center","right"];function he(s){if(I(s.id)||s.filter===!1)return null;if(s.filter)return s.filter;switch(s.type){case"number":return"number";case"date":return"date";case"boolean":return"set";default:return"text"}}function te(s,e,t){let n=s.editable;if(typeof n!="function")return!!n;try{return!!n({value:s.valueGetter?s.valueGetter(e):s.field?e[s.field]:void 0,row:e,rowIndex:t,column:s})}catch{return!1}}var le=s=>s.id!==Y&&s.sortable!==!1,Pe=s=>s.id!==Y&&s.resizable!==!1;function Te(s,e){let t=s.minWidth??lr,n=s.maxWidth??1/0;return Math.round(Math.min(n,Math.max(t,e)))}function nn(s){return s.children?1+Math.max(0,...s.children.map(nn)):1}var $e=class{constructor(e){this.depth=1;this.roots_=[];this.defs=[];this.byId=new Map;this.containerWidth=0;this.layout={left:[],center:[],right:[]};this.leafById=new Map;this.setDefs(e)}setDefs(e){this.defs=e,this.byId=new Map;let t=0,n=(o,i,a)=>{let l=Array.isArray(o.children)&&o.children.length>0,d=t++,c=o.id??(l?`g${d}`:o.field);if(c||(c=`c${d}`,$(`column #${d} has neither "field" nor "id"; using "${c}"`)),this.byId.has(c)){let v=1;for(;this.byId.has(`${c}_${v}`);)v++;$(`duplicate column id "${c}"; renamed to "${c}_${v}"`),c=`${c}_${v}`}let u={id:c,def:o,parent:i,children:null,depth:a,width:Te(o,o.width??ar),flex:o.flex&&o.flex>0?o.flex:null,hide:o.hide??!1,pinned:o.pinned??i?.pinned??null};return this.byId.set(c,u),l&&(u.children=r(o.children).map(v=>n(v,u,a+1))),u},r=o=>{let i=o.filter(a=>a!==null&&typeof a=="object");return i.length!==o.length&&$("columns contain entries that are not objects; they were skipped"),i};this.roots_=r(e).map(o=>n(o,null,0)),this.depth=Math.max(1,...this.roots_.map(nn)),this.relayout()}setContainerWidth(e){if(e===this.containerWidth)return!1;this.containerWidth=e;let t=this.displayed().map(n=>n.width).join();return this.relayout(),t!==this.displayed().map(n=>n.width).join()}roots(){return this.roots_}reset(){this.setDefs(this.defs)}region(e){return this.layout[e]}displayed(){return[...this.layout.left,...this.layout.center,...this.layout.right]}regionWidth(e){let t=this.layout[e],n=t[t.length-1];return n?n.left+n.width:0}getColumn(e){return this.leafById.get(e)}getNode(e){return this.byId.get(e)}siblings(e){let t=this.byId.get(e);return t?t.parent?t.parent.children:this.roots_:[]}setWidth(e,t){let n=this.byId.get(e);return!n||n.children?0:(n.flex=null,n.width=Te(n.def,t),this.relayout(),n.width)}setPinned(e,t){let n=this.byId.get(e);!n||n.children||I(e)||(n.pinned=t,this.relayout())}setHide(e,t){let n=this.byId.get(e);!n||n.children||(n.hide=t,this.relayout())}move(e,t){let n=this.siblings(e),r=n.findIndex(i=>i.id===e);if(r<0)return;let[o]=n.splice(r,1);n.splice(Math.max(0,Math.min(n.length,t)),0,o),this.relayout()}headerCells(e){let t=[],n=new Map;for(let r of this.layout[e]){let o=[];for(let i=r.node.parent;i;i=i.parent)o.unshift(i);for(let i of o){let a=n.get(i.id);if(a){a.width+=r.width;continue}let l={id:i.id,label:i.def.header??"",isGroup:!0,column:null,node:i,row:i.depth,rowSpan:1,left:r.left,width:r.width};n.set(i.id,l),t.push(l)}t.push({id:r.id,label:r.def.header??r.def.field??"",isGroup:!1,column:r,node:r.node,row:r.node.depth,rowSpan:this.depth-r.node.depth,left:r.left,width:r.width})}return t}getState(){return this.leafNodes().filter(e=>!I(e.id)).map(e=>({colId:e.id,width:this.leafById.get(e.id)?.width??e.width,hide:e.hide,pinned:e.pinned}))}applyState(e){let t=new Map;e.forEach((o,i)=>{t.set(o.colId,i);let a=this.byId.get(o.colId);!a||a.children||I(o.colId)||(a.flex=null,a.width=Te(a.def,o.width),a.hide=o.hide,a.pinned=o.pinned)}),t.set(ae,-2),t.set(Y,-1);let n=o=>o.children?Math.min(1/0,...o.children.map(n)):t.get(o.id)??1/0,r=o=>{let i=o.map((a,l)=>({n:a,i:l,r:n(a)}));i.sort((a,l)=>a.r===l.r?a.i-l.i:a.r-l.r),o.splice(0,o.length,...i.map(a=>a.n));for(let a of o)a.children&&r(a.children)};r(this.roots_),this.relayout()}leafNodes(){let e=[],t=n=>n.children?n.children.forEach(t):e.push(n);return this.roots_.forEach(t),e}relayout(){let e=this.leafNodes().filter(l=>!l.hide),t=e.reduce((l,d)=>l+(d.flex?0:d.width),0),n=e.reduce((l,d)=>l+(d.flex??0),0),r=Math.max(0,this.containerWidth-t),o=l=>l.flex?Te(l.def,Math.floor(r*l.flex/n)):l.width,i={left:[],center:[],right:[]};this.leafById=new Map;let a=0;for(let l of dr){let d=0;for(let c of e){if((c.pinned??"center")!==l)continue;let u={id:c.id,def:c.def,node:c,width:o(c),region:l,left:d,index:a++};d+=u.width,i[l].push(u),this.leafById.set(c.id,u)}}this.layout=i}};function F(s){return s==null||typeof s=="string"&&s.trim()===""||typeof s=="number"&&Number.isNaN(s)}var rn=s=>String(s).padStart(2,"0");function _(s){if(F(s))return null;if(typeof s=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(s))return s;let e=s instanceof Date?s:new Date(s);return Number.isNaN(e.getTime())?null:`${e.getFullYear()}-${rn(e.getMonth()+1)}-${rn(e.getDate())}`}function W(s){return F(s)?"":s instanceof Date?_(s)??"":String(s)}var oe=()=>!0;function on(s){switch(s.type){case"text":{let e=(s.value??"").toLowerCase(),t=n=>F(n)?"":String(n).toLowerCase();switch(s.op){case"contains":return n=>t(n).includes(e);case"equals":return n=>t(n)===e;case"notEquals":return n=>t(n)!==e;case"startsWith":return n=>t(n).startsWith(e);case"endsWith":return n=>t(n).endsWith(e);case"blank":return F;case"notBlank":return n=>!F(n)}return oe}case"number":{let e=n=>F(n)?NaN:Number(n);if(s.op==="blank")return n=>Number.isNaN(e(n));if(s.op==="notBlank")return n=>!Number.isNaN(e(n));let t=s.value;if(t==null||Number.isNaN(t))return oe;switch(s.op){case"eq":return n=>e(n)===t;case"ne":return n=>e(n)!==t;case"lt":return n=>e(n)<t;case"lte":return n=>e(n)<=t;case"gt":return n=>e(n)>t;case"gte":return n=>e(n)>=t;case"between":{let n=s.valueTo;if(n==null||Number.isNaN(n))return oe;let r=Math.min(t,n),o=Math.max(t,n);return i=>{let a=e(i);return a>=r&&a<=o}}}return oe}case"date":{if(s.op==="blank")return n=>_(n)===null;if(s.op==="notBlank")return n=>_(n)!==null;let e=s.value;if(!e)return oe;let t=n=>_(n);switch(s.op){case"equals":return n=>t(n)===e;case"before":return n=>{let r=t(n);return r!==null&&r<e};case"after":return n=>{let r=t(n);return r!==null&&r>e};case"between":{let n=s.valueTo;if(!n)return oe;let r=e<n?e:n,o=e<n?n:e;return i=>{let a=t(i);return a!==null&&a>=r&&a<=o}}}return oe}case"set":{let e=new Set(s.values.map(W));return t=>e.has(W(t))}}return oe}function sn(s){let e=s.trim().toLowerCase();return e?e.split(/\s+/):[]}function an(s,e){return s.every(t=>e.includes(t))}var ln=new Map;function cr(s){if(s==="integer")return{maximumFractionDigits:0};if(s==="percent")return{style:"percent"};if(s.startsWith("currency:"))return{style:"currency",currency:s.slice(9)};if(!/^[#0,]*(\.[#0]+)?%?$/.test(s)||!/[#0]/.test(s))return null;let e=s.endsWith("%"),t=e?s.slice(0,-1):s,n=t.includes(".")?t.split(".")[1]:"";return{useGrouping:t.includes(","),minimumFractionDigits:(n.match(/0/g)??[]).length,maximumFractionDigits:n.length,...e?{style:"percent"}:{}}}var Ae={date:{year:"numeric",month:"2-digit",day:"2-digit"},datetime:{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"},time:{hour:"2-digit",minute:"2-digit"},short:{dateStyle:"short"},medium:{dateStyle:"medium"},long:{dateStyle:"long"}};function Z(s){if(F(s))return null;if(s instanceof Date)return Number.isNaN(s.getTime())?null:s;if(typeof s=="string"){let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(s);if(t)return new Date(Number(t[1]),Number(t[2])-1,Number(t[3]))}if(typeof s!="string"&&typeof s!="number")return null;let e=new Date(s);return Number.isNaN(e.getTime())?null:e}function ur(s,e,t){switch(s){case"number":{let n={};if(typeof e=="string"){let o=cr(e);o||$(`unknown number format "${e}"`),n=o??{}}else e&&(n=e);let r=new Intl.NumberFormat(t,n);return o=>{if(F(o))return"";let i=typeof o=="number"?o:Number(o);return Number.isNaN(i)?String(o):r.format(i)}}case"date":{if(t.toLowerCase().startsWith("ko")&&(e===void 0||e==="date"||e==="datetime")){let o=a=>String(a).padStart(2,"0"),i=e==="datetime";return a=>{let l=Z(a);if(!l)return F(a)?"":String(a);let d=`${l.getFullYear()}-${o(l.getMonth()+1)}-${o(l.getDate())}`;return i?`${d} ${o(l.getHours())}:${o(l.getMinutes())}`:d}}let n=Ae.date;typeof e=="string"?(Ae[e]||$(`unknown date format "${e}"`),n=Ae[e]??Ae.date):e&&(n=e);let r=new Intl.DateTimeFormat(t,n);return o=>{let i=Z(o);return i?r.format(i):F(o)?"":String(o)}}case"boolean":return n=>n===!0?"\u2713":n===!1?"\u2717":"";default:return n=>F(n)?"":n instanceof Date?n.toISOString():String(n)}}function G(s,e){let t=s.format,n=`${e}|${s.type??"text"}|${typeof t=="string"?t:JSON.stringify(t??null)}`,r=ln.get(n);return r||(r=ur(s.type,t,e),ln.set(n,r)),r}var U=class extends Error{constructor(t){super(t);this.code=t}};function hr(s){let e=[],t=0;for(;t<s.length;){let n=s[t];if(/\s/.test(n))t++;else if(/[0-9.]/.test(n)){let r=/^(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?/i.exec(s.slice(t));if(!r)throw new U("#ERROR!");e.push({t:"num",v:Number(r[0])}),t+=r[0].length}else if(n==='"'){let r="";for(t++;;){if(t>=s.length)throw new U("#ERROR!");if(s[t]==='"'){if(s[t+1]==='"'){r+='"',t+=2;continue}t++;break}r+=s[t++]}e.push({t:"str",v:r})}else if(n==="["){let r=s.indexOf("]",t);if(r<0)throw new U("#ERROR!");e.push({t:"id",v:s.slice(t+1,r)}),t=r+1}else if(/[A-Za-z_À-]/.test(n)){let r=/^[A-Za-z_À-][\wÀ-]*/.exec(s.slice(t));e.push({t:"id",v:r[0]}),t+=r[0].length}else{let r=s.slice(t,t+2);if(r==="<>"||r==="<="||r===">=")e.push({t:"op",v:r}),t+=2;else if("+-*/%^&=<>(),".includes(n))e.push({t:"op",v:n}),t++;else throw new U("#ERROR!")}}return e}var Ne=s=>s==null||s==="";function z(s){if(typeof s=="number")return s;if(typeof s=="boolean")return s?1:0;if(Ne(s))return 0;if(typeof s=="string"&&s.trim()!==""&&Number.isFinite(Number(s)))return Number(s);throw new U("#VALUE!")}var Fe=s=>Ne(s)?"":typeof s=="boolean"?s?"TRUE":"FALSE":String(s);function fr(s,e){let t=Math.trunc(e),n=+`${Math.round(+`${Math.abs(s)}e${t}`)}e${-t}`;return s<0?-n:n}var dn={ROUND:s=>fr(z(s[0]),s.length>1?z(s[1]):0),ABS:s=>Math.abs(z(s[0])),MIN:s=>s.length?Math.min(...s.map(z)):0,MAX:s=>s.length?Math.max(...s.map(z)):0,SUM:s=>s.reduce((e,t)=>e+z(t),0),AVG:s=>{if(!s.length)throw new U("#DIV/0!");return s.reduce((e,t)=>e+z(t),0)/s.length}};function pr(s,e){return(typeof s=="number"||Ne(s))&&(typeof e=="number"||Ne(e))?z(s)-z(e):Fe(s).localeCompare(Fe(e),void 0,{sensitivity:"accent"})}var ft=class{constructor(e,t){this.tokens=e;this.resolve=t;this.i=0}parse(){let e=this.comparison();if(this.i<this.tokens.length)throw new U("#ERROR!");return e}peek(e){let t=this.tokens[this.i];return!!t&&t.t==="op"&&(e===void 0||t.v===e)}take(e){return this.peek(e)?(this.i++,!0):!1}comparison(){let e=this.concat();for(let t of["=","<>","<=",">=","<",">"])if(this.take(t)){let n=pr(e,this.concat());return t==="="?n===0:t==="<>"?n!==0:t==="<"?n<0:t===">"?n>0:t==="<="?n<=0:n>=0}return e}concat(){let e=this.additive();for(;this.take("&");)e=Fe(e)+Fe(this.additive());return e}additive(){let e=this.multiplicative();for(;;)if(this.take("+"))e=z(e)+z(this.multiplicative());else if(this.take("-"))e=z(e)-z(this.multiplicative());else return e}multiplicative(){let e=this.unary();for(;;)if(this.take("*"))e=z(e)*z(this.unary());else if(this.take("/")||this.take("%")){let t=this.tokens[this.i-1].v,n=z(this.unary());if(n===0)throw new U("#DIV/0!");e=t==="/"?z(e)/n:z(e)%n}else return e}unary(){return this.take("-")?-z(this.unary()):this.take("+")?z(this.unary()):this.power()}power(){let e=this.primary();return this.take("^")?z(e)**z(this.unary()):e}primary(){let e=this.tokens[this.i++];if(!e)throw new U("#ERROR!");if(e.t==="num"||e.t==="str")return e.v;if(e.t==="op"){if(e.v!=="(")throw new U("#ERROR!");let n=this.comparison();if(!this.take(")"))throw new U("#ERROR!");return n}let t=e.v;if(this.peek("(")){this.i++;let n=[];if(!this.take(")")){do n.push(this.comparison());while(this.take(","));if(!this.take(")"))throw new U("#ERROR!")}let r=t.toUpperCase();if(r==="IF"){if(n.length<2)throw new U("#ERROR!");return(typeof n[0]=="boolean"?n[0]:z(n[0])!==0)?n[1]:n.length>2?n[2]:!1}let o=Object.hasOwn(dn,r)?dn[r]:void 0;if(!o)throw new U("#NAME?");return o(n)}return/^(true|false)$/i.test(t)?t.toLowerCase()==="true":this.resolve(t)}},gr=32;function pt(s,e,t=new Set,n=0){try{let r=i=>{if(!e||!Object.hasOwn(e,i))throw new U("#REF!");let a=e[i];if(typeof a=="string"&&a.startsWith("=")){if(t.has(i)||n>=gr)throw new U("#CYCLE!");let l=pt(a,e,new Set([...t,i]),n+1);if(typeof l=="string"&&/^#[A-Z/0]+[!?]$/.test(l))throw new U(l);return l}return a},o=new ft(hr(s.slice(1)),r).parse();return typeof o=="number"&&!Number.isFinite(o)?"#NUM!":o}catch(r){return r instanceof U?r.code:"#ERROR!"}}var fe=s=>typeof s=="string"&&s.length>1&&s.startsWith("=");function N(s,e){if(s.valueGetter)try{return s.valueGetter(e)}catch{$(`valueGetter of column "${s.id??s.field}" threw; rendering an empty cell`);return}if(s.field==null)return;let t=e[s.field];return s.formulas&&fe(t)?pt(t,e,new Set([s.field])):t}function gt(s){let e=[];for(let t of s){if(F(t)||t instanceof Date)continue;let n=typeof t=="number"?t:Number(t);Number.isNaN(n)||e.push(n)}return e}function cn(s,e){let t=s.filter(r=>r instanceof Date&&!Number.isNaN(r.getTime()));if(t.length)return t.reduce((r,o)=>(e?o>r:o<r)?o:r);let n=gt(s);return n.length?e?Math.max(...n):Math.min(...n):null}function pe(s,e,t){if(typeof s=="function")return s(e,t);switch(s){case"sum":return gt(e).reduce((n,r)=>n+r,0);case"avg":{let n=gt(e);return n.length?n.reduce((r,o)=>r+o,0)/n.length:null}case"min":return cn(e,!1);case"max":return cn(e,!0);case"count":return t.length}return null}function mt(s){return typeof s=="object"&&s!==null&&"agg"in s?s:{agg:s}}function un(s,e,t){let n=new Map,r=(o,i)=>{let a=n.get(o);return a||n.set(o,a=e.map(l=>N(i,l))),a};return s.map(o=>{let i={};for(let[a,l]of Object.entries(o.columns??{})){let d=t(a);d&&(i[a]=pe(mt(l).agg,r(a,d),e))}return i})}function xe(s,e,t,n,r){if(!s)return 1;let o=1;try{o=Math.floor(Number(s({value:N(e,t),row:t,rowIndex:n})))}catch{o=1}return Number.isFinite(o)?Math.max(1,Math.min(r,o)):1}function He(s,e){let t=s.length,n=new Int32Array(t),r=new Int32Array(t);if(e.rowSpan){for(let a=0;a<t;){let l=xe(e.rowSpan,e,s[a],a,t-a);for(let d=a;d<a+l;d++)n[d]=a,r[d]=a+l-1;a+=l}return{start:n,end:r}}let o=typeof e.merge=="function"?(a,l)=>{try{return!!e.merge(N(e,s[a]),N(e,s[l]),s[a],s[l])}catch{return!1}}:(()=>{let a=s.map(l=>{let d=N(e,l);return F(d)?null:W(d)});return(l,d)=>a[l]!==null&&a[l]===a[d]})(),i=0;for(let a=1;a<=t;a++)if(!(a<t&&o(a-1,a))){for(let l=i;l<a;l++)n[l]=i,r[l]=a-1;i=a}return{start:n,end:r}}function hn(s,e,t,n,r=4){if(n<=0||t<=0)return{first:0,last:-1};let o=Math.max(0,Math.floor(s/t)-r),i=Math.floor((s+e)/t);return{first:Math.min(o,n-1),last:Math.min(n-1,i+r)}}function Be(s,e,t,n,r=2){let o=s.length;if(!o)return{first:0,last:-1};let i=0,a=o-1;for(;i<a;){let c=i+a>>1;s[c]+e[c]<=t?i=c+1:a=c}let l=i,d=t+n;for(a=o-1;i<a;){let c=i+a+1>>1;s[c]<d?i=c:a=c-1}return{first:Math.max(0,l-r),last:Math.min(o-1,Math.max(l,i)+r)}}function fn(s,e,t,n,r=4){if(n<=0)return{first:0,last:-1};let o=0,i=n-1;for(;o<i;){let d=o+i>>1;s[d+1]<=e?o=d+1:i=d}let a=o,l=e+t;for(i=n-1;o<i;){let d=o+i+1>>1;s[d]<l?o=d:i=d-1}return{first:Math.max(0,a-r),last:Math.min(n-1,o+r)}}var j=["left","center","right"],pn=6,mr=8,wt=2,wr='<svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"><path d="M3 4h10M3 8h10M3 12h10" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/></svg>',vt='<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path d="M6 3.5 10.5 8 6 12.5" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg>';var vr='<svg viewBox="0 0 16 16" width="14" height="14" aria-hidden="true"><path d="M2.5 3h11l-4.2 5v4.5l-2.6 1.2V8z" fill="currentColor"/></svg>';function b(s,e="",t={}){let n=document.createElement(s);e&&(n.className=e);for(let[r,o]of Object.entries(t))n.setAttribute(r,o);return n}var Oe=class{constructor(e,t,n){this.grid=t;this.opts=n;this.activeCellId="";this.idBase=`fg${Math.random().toString(36).slice(2,8)}`;this.painted={left:new Map,center:new Map,right:new Map};this.pool={left:[],center:[],right:[]};this.frame=0;this.headerDirty=!0;this.version=0;this.lastRange={first:0,last:-1};this.summaryEl=null;this.summaryPanes=null;this.summaryInners=null;this.canvasSummary={left:[],center:[],right:[]};this.topOffset=0;this.pinnedTop=null;this.pinnedBottom=null;this.statusEl=null;this.statusKey="";this.pagerEl=null;this.cards=null;this.cardMode=!1;this.pagerKey="";this.offsets=null;this.details=new Map;this.firstDataId="";this.rowHeights=new Map;this.heightsVersion=0;this.groupLabelId="";this.onScroll=()=>{this.frame&&cancelAnimationFrame(this.frame),this.frame=0,this.render(),this.grid.events.emit("scroll",this.getScroll())};this.onSideWheel=e=>{e.deltaY&&(e.preventDefault(),this.scroller.scrollTop+=e.deltaY)};this.onCardClick=e=>{let t=e.target,n=t.closest(".fg-card");if(!n)return;let r=Number(n.dataset.row),o=this.grid.rowModel.getRow(r);if(!o||o.kind)return;if(t.closest(".fg-card-check")){this.grid.selectFromClick(r,!0,!1),this.invalidate({rows:!0});return}let i=t.closest(".fg-card-value")?.dataset.col,a=i?this.grid.columns.getColumn(i):void 0;a&&this.grid.events.emit("cellClick",{row:o.data,rowIndex:r,colId:a.id,value:N(a.def,o.data),event:e})};this.root=b("div","",{tabindex:"-1"}),this.root.addEventListener("focus",()=>this.gridEl.focus({preventScroll:!0})),this.gridEl=b("div","fg-grid",{role:"grid",tabindex:"0"}),this.headerEl=b("div","fg-header",{role:"rowgroup"}),this.bodyEl=b("div","fg-body",{role:"rowgroup"});let r=o=>({left:b("div",`${o} ${o}-left`),center:b("div",`${o} ${o}-center`),right:b("div",`${o} ${o}-right`)});this.headerPanes=r("fg-header-pane"),this.headerInners=r("fg-header-inner");for(let o of j)this.headerInners[o].setAttribute("role","row");this.bodyPanes=r("fg-body-pane"),this.canvases=r("fg-canvas");for(let o of j)this.headerPanes[o].dataset.region=o,this.bodyPanes[o].dataset.region=o,this.headerPanes[o].append(this.headerInners[o]),this.bodyPanes[o].append(this.canvases[o]),this.headerEl.append(this.headerPanes[o]),this.bodyEl.append(this.bodyPanes[o]);this.scroller=this.bodyPanes.center,this.overlay=b("div","fg-overlay",{"aria-live":"polite"}),this.main=b("div","fg-main"),this.gridEl.append(this.headerEl,this.bodyEl),this.main.append(this.gridEl,this.overlay),this.root.append(this.main),e.append(this.root),this.applyTheme(),this.scroller.addEventListener("scroll",this.onScroll,{passive:!0}),this.bodyPanes.left.addEventListener("wheel",this.onSideWheel,{passive:!1}),this.bodyPanes.right.addEventListener("wheel",this.onSideWheel,{passive:!1})}get activeScroller(){return this.cards?.scroller??this.scroller}getScroll(){let e=this.activeScroller;return{top:e.scrollTop,left:e.scrollLeft}}setScroll(e){let t=this.activeScroller;typeof e?.top=="number"&&Number.isFinite(e.top)&&(t.scrollTop=Math.max(0,e.top)),typeof e?.left=="number"&&Number.isFinite(e.left)&&(t.scrollLeft=Math.max(0,e.left))}applyFont(e,t){e?this.root.style.setProperty("--fg-font-size",`${e}px`):this.root.style.removeProperty("--fg-font-size"),t?this.root.style.setProperty("--fg-font",t):this.root.style.removeProperty("--fg-font")}applyTheme(){let e=this.grid.options.direction==="rtl";this.root.className=`fg-root fg-theme-${this.grid.store.state.theme}${e?" fg-rtl":""}${this.cardMode?" fg-card-mode":""}`,this.root.setAttribute("dir",e?"rtl":"ltr")}get rtl(){return this.grid.options.direction==="rtl"}invalidate(e={}){e.header&&(this.headerDirty=!0),e.rows&&this.version++,this.schedule()}schedule(){this.frame||(this.frame=requestAnimationFrame(()=>{this.frame=0,this.render()}))}render(){let{columns:e,rowModel:t,store:n,options:r}=this.grid,{rowHeight:o,headerHeight:i}=this.opts,a=this.scroller.offsetWidth-this.scroller.clientWidth;e.setContainerWidth(Math.max(0,this.main.clientWidth-a))&&(this.headerDirty=!0,this.version++);let l=t.getRowCount(),d=!!this.grid.options.autoRowHeight&&!t.server,c=t.layout(o,this.detailHeight(),d?this.rowHeights:void 0,this.heightsVersion);if(this.offsets=c.uniform?null:c.offsets,this.firstDataId=e.displayed().find(S=>!I(S.id))?.id??"",this.groupLabelId=e.region("center").find(S=>!I(S.id))?.id??this.firstDataId,this.useCards()){this.renderCards(l),this.renderStatusBar(t.dataCount()),this.renderPager(),this.orderSections(null),this.overlay.hidden=l>0,this.overlay.textContent=l===0&&t.loading()?n.state.locale.loading:n.state.locale.noRows;return}let u=this.grid.summary(),v=u?u.opts.rows.length:0,p=u?.opts.position??"bottom",R=u?u.opts.pinned!==!1:!1;this.topOffset=u&&!R&&p==="top"?v*o:0;let w=u&&!R&&p==="bottom"?v*o:0;this.syncSummaryPane(u&&R?p:null,v*o);let m=e.depth*i;this.headerEl.style.height=`${m}px`;for(let S of j){let x=e.regionWidth(S);S!=="center"&&(this.headerPanes[S].style.width=this.bodyPanes[S].style.width=`${x}px`,this.headerPanes[S].hidden=this.bodyPanes[S].hidden=x===0),this.canvases[S].style.width=`${x}px`,this.canvases[S].style.height=`${this.rowsHeight(l)+this.topOffset+w}px`}let h=this.scroller.offsetHeight-this.scroller.clientHeight;this.bodyPanes.left.style.marginBottom=this.bodyPanes.right.style.marginBottom=`${h}px`;let f=this.gridEl;f.setAttribute("role",r.treeData||this.grid.getGroupBy().length?"treegrid":"grid"),f.setAttribute("aria-rowcount",String(l+e.depth)),f.setAttribute("aria-colcount",String(e.displayed().length)),r.rowSelection==="multiple"&&f.setAttribute("aria-multiselectable","true"),this.headerDirty&&(this.headerDirty=!1,this.renderHeader()),this.renderRows(l),this.updateActiveCell(),d&&this.measureRows(),this.renderSummary(l,u&&u.opts.rows,u?.values??[],R,p),this.pinnedTop=this.renderPinned(this.pinnedTop,"top",this.grid.pinnedRows.top),this.pinnedBottom=this.renderPinned(this.pinnedBottom,"bottom",this.grid.pinnedRows.bottom),this.renderStatusBar(t.dataCount()),this.renderPager(),this.orderSections(u&&R?p:null),this.overlay.hidden=l>0,this.overlay.textContent=l===0&&t.loading()?n.state.locale.loading:n.state.locale.noRows,this.overlay.style.top=`${m}px`;let{scrollTop:C,scrollLeft:y}=this.scroller;this.bodyPanes.left.scrollTop=this.bodyPanes.right.scrollTop=C,this.headerInners.center.style.transform=`translateX(${-y}px)`,this.summaryInners&&(this.summaryInners.center.style.transform=`translateX(${-y}px)`);for(let S of[this.pinnedTop,this.pinnedBottom])S&&(S.inners.center.style.transform=`translateX(${-y}px)`);this.grid.fillHandle.update()}orderSections(e){let t=[e==="top"?this.summaryEl:null,this.pinnedTop?.el??null].filter(i=>!!i),n=[this.pinnedBottom?.el??null,e==="bottom"?this.summaryEl:null].filter(i=>!!i),r=[this.statusEl,this.pagerEl].filter(i=>!!i);for(let i of t)i.nextElementSibling!==this.bodyEl&&!t.includes(i.nextElementSibling)&&this.gridEl.insertBefore(i,this.bodyEl);let o=this.bodyEl;for(let i=t.length-1;i>=0;i--)o.previousElementSibling!==t[i]&&this.gridEl.insertBefore(t[i],o),o=t[i];o=this.bodyEl;for(let i of n)o.nextElementSibling!==i&&o.after(i),o=i;o=this.gridEl;for(let i of r)o.nextElementSibling!==i&&o.after(i),o=i}updateActiveCell(){let e=this.activeCellId?this.root.getRootNode().getElementById?.(this.activeCellId)??null:null,t=this.gridEl.querySelector(".fg-body .fg-cell-focused, .fg-body .fg-row-group .fg-cell-focused");if(e&&e!==t&&e.removeAttribute("id"),!t){this.gridEl.removeAttribute("aria-activedescendant"),this.activeCellId="";return}t.id||(t.id=`${this.idBase}-cell`),this.activeCellId=t.id,this.gridEl.setAttribute("aria-activedescendant",t.id)}renderPinned(e,t,n){if(!n.length)return e?.el.remove(),null;let r=e??new yt(`fg-pinned-rows fg-pinned-${t}`),{columns:o}=this.grid,i=this.opts.rowHeight;r.size(o,n.length*i,this.scroller.offsetWidth-this.scroller.clientWidth);let a=o.region("center"),l=Be(a.map(d=>d.left),a.map(d=>d.width),this.scroller.scrollLeft,this.scroller.clientWidth,wt);for(let d of j){let c=d==="center"?a.slice(l.first,l.last+1):o.region(d);r.inners[d].replaceChildren(...n.map((u,v)=>{let p=b("div","fg-row fg-row-pinned",{role:"row"});p.style.transform=`translateY(${v*i}px)`,p.style.height=`${i}px`;let R={id:`pinned-${t}-${v}`,data:u,sourceIndex:-1};for(let w of c){let m=b("div","fg-cell",{role:"gridcell"});I(w.id)?(m.style.left=`${w.left}px`,m.style.width=`${w.width}px`):this.paintCell(m,R,-1,w,!1,!1),p.append(m)}return p}))}return r}renderStatusBar(e){if(!this.grid.options.statusBar){this.statusEl?.remove(),this.statusEl=null;return}let{grid:t}=this,n=t.store.state,r=t.rowModel.server?e:t.viewRows().length,o=`${this.version}|${e}|${r}|${n.selected.size}|${JSON.stringify(n.range)}|${n.locale.code}`;if(this.statusEl&&o===this.statusKey)return;this.statusKey=o,this.statusEl??(this.statusEl=b("div","fg-statusbar",{role:"status","aria-live":"polite"}));let i=n.locale,a=new Intl.NumberFormat(i.code,{maximumFractionDigits:2}),l=b("span","fg-status-rows");l.textContent=(e===r?i.statusRows.replace("{n}",a.format(r)):i.statusFiltered.replace("{shown}",a.format(e)).replace("{total}",a.format(r)))+(n.selected.size?` \xB7 ${i.statusSelected.replace("{n}",a.format(n.selected.size))}`:"");let d=b("span","fg-status-aggs"),c=t.rangeAggregates();if(c&&c.cells>1){let u=[`${i.count} ${a.format(c.count)}`];c.numbers&&u.push(`${i.sum} ${a.format(c.sum)}`,`${i.avg} ${a.format(c.sum/c.numbers)}`,`${i.min} ${a.format(c.min)}`,`${i.max} ${a.format(c.max)}`),d.textContent=u.join(" ")}this.statusEl.replaceChildren(l,d)}renderHeader(){let{columns:e,store:t}=this.grid,{sort:n,filters:r,locale:o}=t.state;for(let i of j){let a=this.headerInners[i];a.style.width=`${e.regionWidth(i)}px`,a.style.height=`${e.depth*this.opts.headerHeight}px`,a.replaceChildren(...e.headerCells(i).map(l=>this.headerCell(l,n,r,o)))}}headerCell(e,t,n,r){let o=this.opts.headerHeight,i=b("div",e.isGroup?"fg-header-cell fg-header-group":"fg-header-cell",{role:"columnheader"});if(i.dataset.col=e.id,i.style.left=`${e.left}px`,i.style.top=`${e.row*o}px`,i.style.width=`${e.width}px`,i.style.height=`${e.rowSpan*o}px`,I(e.id))return e.id===Y&&(i.classList.add("fg-header-select"),i.append(this.selectAllBox(r))),i;let a=b("span","fg-header-label"),l=e.node.def;if(a.textContent=e.label,l.headerRenderer)try{let u=l.headerRenderer({header:e.label,column:l});typeof u=="string"?a.innerHTML=u:a.replaceChildren(u)}catch{$(`headerRenderer of column "${e.id}" threw; showing the plain header`),a.textContent=e.label}if(l.headerClass)try{let u=typeof l.headerClass=="function"?l.headerClass(l):l.headerClass;u&&i.classList.add(...u.split(/\s+/).filter(Boolean))}catch{$(`headerClass of column "${e.id}" threw`)}if(i.append(a),e.isGroup||!e.column)return i;let d=e.node.def;(d.wrapHeaderText??this.grid.options.wrapHeaderText)&&i.classList.add("fg-header-wrap"),i.setAttribute("aria-colindex",String(e.column.index+1)),(d.align??(d.type==="number"?"right":"left"))==="right"&&i.classList.add("fg-align-right");let c=t.findIndex(u=>u.colId===e.id);if(i.setAttribute("aria-sort",c<0?"none":t[c].dir==="asc"?"ascending":"descending"),le(d)&&i.classList.add("fg-sortable"),c>=0){let u=b("span","fg-sort-icon");if(u.textContent=t[c].dir==="asc"?"\u2191":"\u2193",t.length>1){let v=b("sup");v.textContent=String(c+1),u.append(v)}i.append(u)}if(le(d)||he(d)){let u=!!n[e.id],v=b("button",u?"fg-menu-btn fg-filter-active":"fg-menu-btn",{type:"button",tabindex:"-1","aria-label":r.columnMenu});v.innerHTML=u?vr:wr,i.append(v)}return Pe(d)&&i.append(b("div","fg-resize",{"aria-hidden":"true"})),i}selectAllBox(e){let t=this.grid.selectableRows(),n=this.grid.store.state.selected,r=0;for(let i of t)n.has(i.id)&&r++;let o=b("input","fg-checkbox fg-select-all",{type:"checkbox",tabindex:"-1","aria-label":e.selectAllRows});return o.checked=t.length>0&&r===t.length,o.indeterminate=r>0&&r<t.length,o.hidden=this.grid.options.rowSelection!=="multiple"||this.grid.options.headerCheckbox===!1,o}renderRows(e){let{columns:t,rowModel:n,store:r}=this.grid,{selected:o,focus:i}=r.state,a=this.grid.allRangeBounds(),l=this.grid.mergeSpans(),d=Math.max(0,this.scroller.scrollTop-this.topOffset),c=this.offsets?fn(this.offsets,d,this.scroller.clientHeight,e,pn):hn(d,this.scroller.clientHeight,this.opts.rowHeight,e,pn);this.lastRange=c;let u=t.region("center"),v=Be(u.map(p=>p.left),u.map(p=>p.width),this.scroller.scrollLeft,this.scroller.clientWidth,wt);u.some(p=>p.def.colSpan)&&(v.first=Math.max(0,v.first-mr));for(let p of j){let R=p==="center"?u.slice(v.first,v.last+1):t.region(p),w=this.painted[p];for(let[h,f]of w)h>=c.first&&h<=c.last&&R.length||(f.el.remove(),this.pool[p].push(f.el),w.delete(h));if(!R.length)continue;let m=p==="center"?`${v.first}-${v.last}`:"";for(let h=c.first;h<=c.last;h++){let f=n.getRow(h),C=o.has(f.id),y=i&&i.rowIndex===h?i.colId:"",S=a.filter(L=>h>=L.r1&&h<=L.r2),x=S.map(L=>`${L.c1}-${L.c2}`).join(","),g=this.mergeState(l,R,h,c.first),k=f.kind==="detail"?`${this.scroller.scrollLeft}:${this.scroller.clientWidth}`:"",E=`${f.id}|${this.version}|${m}|${C?1:0}|${y}|${x}|${g}|${k}`,M=w.get(h);if(!M){let L=this.pool[p].pop()??b("div","fg-row",{role:"row"});this.canvases[p].append(L),M={el:L,key:""},w.set(h,M)}M.key!==E&&(M.key=E,M.el.dataset.kind!==(f.kind??"")&&(M.el.replaceChildren(),M.el.dataset.kind=f.kind??""),f.kind==="group"?this.paintGroupRow(M.el,f,h,R,y):f.kind==="detail"?this.paintDetailRow(M.el,f,h,p):f.kind==="loading"?this.paintLoadingRow(M.el,h,R):this.paintRow(M.el,f,h,R,C,y,S,l,c.first))}}}mergeState(e,t,n,r){if(!e.size)return"";let o="";for(let i of t){let a=e.get(i.id);if(!a)continue;let l=a.start[n],d=a.end[n];o+=l===d?"n":n===Math.max(l,r)?`d${l}`:"h"}return o}paintRow(e,t,n,r,o,i,a,l=new Map,d=0){let c=this.opts.rowHeight;for(e.className=`fg-row${n%2?" fg-row-odd":""}${o?" fg-row-selected":""}${this.grid.tracker.created.has(t.data)?" fg-row-created":""}`,this.placeRow(e,n),this.grid.options.rowSelection&&e.setAttribute("aria-selected",String(o)),t.level!==void 0?e.setAttribute("aria-level",String(t.level+1)):e.removeAttribute("aria-level"),t.hasChildren?e.setAttribute("aria-expanded",String(!!t.expanded)):e.removeAttribute("aria-expanded");e.childElementCount>r.length;)e.lastElementChild.remove();for(;e.childElementCount<r.length;)e.append(b("div","fg-cell",{role:"gridcell"}));let u=!1,v=r.length?this.grid.columns.region(r[0].region):[],p=v.some(m=>m.def.colSpan),R=-1,w=p?new Map(v.map((m,h)=>[m.id,h])):null;r.forEach((m,h)=>{let f=e.children[h];if(this.paintCell(f,t,n,m,o,i===m.id),w){let y=w.get(m.id);if(y<=R)f.classList.add("fg-cell-span-hidden");else if(m.def.colSpan&&!I(m.id)){let S=xe(m.def.colSpan,m.def,t.data,n,v.length-y);if(S>1){R=y+S-1;let x=0;for(let g=y;g<=R;g++)x+=v[g].width;f.style.width=`${x}px`,f.classList.add("fg-cell-colspan")}}}m.id===this.firstDataId&&this.decorate(f,t),f.style.top=f.style.height=f.style.bottom="";let C=l.get(m.id);C&&C.start[n]!==C.end[n]&&(n===Math.max(C.start[n],d)?(f.classList.add("fg-cell-merged"),f.style.top=`${-(this.rowTop(n)-this.rowTop(C.start[n]))}px`,f.style.height=`${this.rowTop(C.end[n])+this.rowH(C.end[n])-this.rowTop(C.start[n])}px`,f.style.bottom="auto",u=!0):f.classList.add("fg-cell-merge-hidden")),!I(m.id)&&a.some(y=>m.index>=y.c1&&m.index<=y.c2)&&f.classList.add("fg-cell-range")}),e.style.zIndex=u?"1":""}paintCell(e,t,n,r,o,i){let a=this.grid.store.state.locale;e.style.left=`${r.left}px`,e.style.width=`${r.width}px`,e.dataset.col=r.id,e.setAttribute("aria-colindex",String(r.index+1));let l=i?"fg-cell fg-cell-focused":"fg-cell";if(r.id===ae){e.className=`${l} fg-cell-drag`;let p=b("span",this.grid.canMoveRows()?"fg-drag-handle":"fg-drag-handle fg-drag-disabled",{"aria-hidden":"true"});p.textContent="\u22EE\u22EE",e.replaceChildren(p);return}if(r.id===Y){e.className=`${l} fg-cell-select`;let p=b("input","fg-checkbox",{type:"checkbox",tabindex:"-1","aria-label":a.selectRow});p.checked=o,n>=0&&!t.kind&&!this.grid.rowSelectable(t.data)&&(p.disabled=!0,e.classList.add("fg-cell-select-locked")),e.replaceChildren(p);return}let d=r.def,c=N(d,t.data),u=G(d,a.code)(c);l+=` fg-align-${d.align??(d.type==="number"?"right":d.type==="boolean"?"center":"left")}`;let v={value:c,formatted:u,row:t.data,rowIndex:n,column:d};if(d.cellClass)try{let p=typeof d.cellClass=="function"?d.cellClass(v):d.cellClass;p&&(l+=` ${p}`)}catch{$(`cellClass of column "${r.id}" threw`)}if(this.grid.tracker.isDirty(t.data,d.field)&&(l+=" fg-cell-dirty"),d.wrapText&&(l+=" fg-cell-wrap"),typeof d.editable=="function"&&n>=0&&!te(d,t.data,n)&&(l+=" fg-cell-readonly"),n>=0&&(l+=this.grid.finder.classFor(n,r.id)),e.className=l,!d.renderer){e.textContent=u;return}try{let p=d.renderer(v);typeof p=="string"?e.innerHTML=p:e.replaceChildren(p)}catch{$(`renderer of column "${r.id}" threw; rendering an empty cell`),e.textContent=""}}cellAt(e){let t=e instanceof Element?e.closest(".fg-cell"):null,n=t?.parentElement;return!t||!n?.dataset.row||!t.dataset.col||t.closest(".fg-root")!==this.root?null:{rowIndex:Number(n.dataset.row),colId:t.dataset.col}}ensureVisible(e,t){let n=this.scroller,r=this.rowTop(e),o=r+Math.min(this.rowH(e),n.clientHeight||1/0);r<n.scrollTop?n.scrollTop=r:o>n.scrollTop+n.clientHeight&&(n.scrollTop=o-n.clientHeight);let i=t?this.grid.columns.getColumn(t):void 0;i?.region==="center"&&(i.left<n.scrollLeft?n.scrollLeft=i.left:i.left+i.width>n.scrollLeft+n.clientWidth&&(n.scrollLeft=i.left+i.width-n.clientWidth))}syncSummaryPane(e,t){if(!e){this.summaryEl?.remove(),this.summaryEl=this.summaryPanes=this.summaryInners=null;return}if(!this.summaryEl){let r=o=>({left:b("div",`${o} ${o}-left`),center:b("div",`${o} ${o}-center`),right:b("div",`${o} ${o}-right`)});this.summaryEl=b("div","fg-summary",{role:"rowgroup"}),this.summaryPanes=r("fg-summary-pane"),this.summaryInners=r("fg-summary-inner");for(let o of j)this.summaryPanes[o].append(this.summaryInners[o]),this.summaryEl.append(this.summaryPanes[o])}this.summaryEl.className=`fg-summary fg-summary-${e}`,this.summaryEl.style.height=`${t}px`;for(let r of j){let o=this.grid.columns.regionWidth(r);r!=="center"&&(this.summaryPanes[r].style.width=`${o}px`,this.summaryPanes[r].hidden=o===0),this.summaryInners[r].style.width=`${o}px`,this.summaryInners[r].style.height=`${t}px`}let n=this.scroller.offsetWidth-this.scroller.clientWidth;this.summaryPanes.center.style.marginRight=`${n}px`}renderSummary(e,t,n,r,o){for(let u of j){for(let v of this.canvasSummary[u])v.remove();this.canvasSummary[u]=[]}if(!t)return;let{columns:i}=this.grid,a=this.opts.rowHeight,l=i.region("center"),d=Be(l.map(u=>u.left),l.map(u=>u.width),this.scroller.scrollLeft,this.scroller.clientWidth,wt),c=i.displayed().filter(u=>!I(u.id));for(let u of j){let v=u==="center"?l.slice(d.first,d.last+1):i.region(u),p=t.map((R,w)=>{let m=R.label!=null?c.find(C=>!(C.id in(R.columns??{})))?.id??null:null,h=b("div","fg-row fg-summary-row",{role:"row"}),f=r||o==="top"?w*a:this.rowsHeight(e)+w*a;h.style.transform=`translateY(${f}px)`,h.style.height=`${a}px`;for(let C of v)h.append(this.summaryCell(C,R,n[w]??{},m));return h});r?this.summaryInners[u].replaceChildren(...p):(this.canvases[u].append(...p),this.canvasSummary[u]=p)}}summaryCell(e,t,n,r){let o=b("div","fg-cell",{role:"gridcell"});o.style.left=`${e.left}px`,o.style.width=`${e.width}px`,o.dataset.col=e.id;let i=e.def,a=i.align??(i.type==="number"?"right":i.type==="boolean"?"center":"left");o.className=`fg-cell fg-align-${a}`;let l=t.columns?.[e.id];if(l===void 0)return e.id===r&&(o.textContent=t.label??"",o.classList.add("fg-summary-label")),o;let d=n[e.id],c=mt(l),u=this.grid.store.state.locale.code,v;if(d==null||d==="")v="";else if(typeof d=="string")v=d;else if(c.agg==="count")v=new Intl.NumberFormat(u).format(d);else{let p=i.type??(typeof d=="number"?"number":d instanceof Date?"date":void 0);v=G({...i,type:p,format:c.format??i.format},u)(d)}return o.textContent=c.prefix&&v?`${c.prefix} ${v}`:v,o}invalidateHeights(){this.rowHeights.size&&(this.rowHeights.clear(),this.heightsVersion++)}measureRows(){let e=this.opts.rowHeight,t=new Map;for(let r of j)for(let[o,i]of this.painted[r]){let a=this.grid.rowModel.getRow(o);if(!a||a.kind)continue;let l=t.get(o)??e;for(let d of i.el.querySelectorAll(".fg-cell-wrap"))d.classList.contains("fg-cell-merged")||d.classList.contains("fg-cell-merge-hidden")||(l=Math.max(l,Math.ceil(d.scrollHeight)));t.set(o,l)}let n=!1;for(let[r,o]of t){let i=this.grid.rowModel.getRow(r).id,a=this.rowHeights.get(i)??e;Math.abs(a-o)>1&&(o===e?this.rowHeights.delete(i):this.rowHeights.set(i,o),n=!0)}n&&(this.heightsVersion++,this.version++,this.schedule())}detailHeight(){let e=this.grid.options.detailHeight;return typeof e=="number"&&e>0?e:240}rowTop(e){return(this.offsets?this.offsets[e]:e*this.opts.rowHeight)+this.topOffset}rowH(e){return this.offsets?this.offsets[e+1]-this.offsets[e]:this.opts.rowHeight}rowsHeight(e){return this.offsets?this.offsets[e]:e*this.opts.rowHeight}placeRow(e,t){e.style.transform=`translateY(${this.rowTop(t)}px)`,e.style.height=`${this.rowH(t)}px`,e.dataset.row=String(t),e.setAttribute("aria-rowindex",String(t+1+this.grid.columns.depth))}decorate(e,t){let{grid:n}=this,r=n.store.state.locale,o=t.level??0,i=!!n.options.treeData,a=n.canExpandDetail(t.data);if(!i&&!a&&!o)return;e.classList.add("fg-cell-lead"),e.style.setProperty("--fg-level",String(o));let l=[];if(i)if(t.hasChildren){let d=b("button",t.expanded?"fg-tree-toggle fg-expanded":t.loading?"fg-tree-toggle fg-tree-loading":"fg-tree-toggle",{type:"button",tabindex:"-1","aria-label":t.expanded?r.collapseAll:r.expandAll,"aria-expanded":String(!!t.expanded)});t.loading&&d.setAttribute("aria-busy","true"),d.innerHTML=vt,l.push(d)}else l.push(b("span","fg-tree-spacer",{"aria-hidden":"true"}));if(a){let d=n.isDetailExpanded(t.data),c=b("button",d?"fg-detail-toggle fg-expanded":"fg-detail-toggle",{type:"button",tabindex:"-1","aria-expanded":String(d),"aria-label":d?r.collapseAll:r.expandAll});c.innerHTML=vt,l.push(c)}e.prepend(...l)}paintGroupRow(e,t,n,r,o){let i=t.group,{grid:a}=this,l=a.store.state.locale;for(e.className="fg-row fg-row-group",this.placeRow(e,n),e.setAttribute("aria-level",String((t.level??0)+1)),e.setAttribute("aria-expanded",String(i.expanded)),e.removeAttribute("aria-selected"),e.style.zIndex="";e.childElementCount>r.length;)e.lastElementChild.remove();for(;e.childElementCount<r.length;)e.append(b("div","fg-cell",{role:"gridcell"}));r.forEach((d,c)=>{let u=e.children[c];u.style.left=`${d.left}px`,u.style.width=`${d.width}px`,u.style.top=u.style.height=u.style.bottom="",u.style.removeProperty("--fg-level"),u.dataset.col=d.id,u.setAttribute("aria-colindex",String(d.index+1));let v=o===d.id?" fg-cell-focused":"";if(d.id===this.groupLabelId){u.className=`fg-cell fg-group-cell${v}`,u.style.setProperty("--fg-level",String(t.level??0));let m=b("button",i.expanded?"fg-group-toggle fg-expanded":"fg-group-toggle",{type:"button",tabindex:"-1","aria-expanded":String(i.expanded),"aria-label":i.expanded?l.collapseAll:l.expandAll});m.innerHTML=vt;let h=a.columns.getNode(i.colId)?.def,f=b("span","fg-group-label"),C=F(i.value)?l.blanks:h?G(h,l.code)(i.value):String(i.value),y=new Intl.NumberFormat(l.code);f.textContent=`${h?.header??h?.field??i.colId}: ${C} (${y.format(i.rows.length)})`,u.replaceChildren(m,f);return}let p=d.def,R=p.align??(p.type==="number"?"right":p.type==="boolean"?"center":"left");u.className=`fg-cell fg-align-${R}${v}`;let w=p.aggFunc&&!I(d.id)?a.groupAggregate(t,d.id):void 0;if(w==null||w==="")u.textContent="";else if(p.aggFunc==="count")u.textContent=new Intl.NumberFormat(l.code).format(w);else{let m=p.type??(typeof w=="number"?"number":w instanceof Date?"date":void 0);u.textContent=G({...p,type:m},l.code)(w)}u.textContent&&u.classList.add("fg-cell-agg")})}paintDetailRow(e,t,n,r){if(e.className="fg-row fg-row-detail",this.placeRow(e,n),e.style.zIndex="",r!=="center"){e.replaceChildren();return}let o=t.detailOf,i=this.details.get(o.id);if(!i){i=b("div","fg-detail");try{let a=this.grid.options.detailRenderer?.({row:o.data,rowIndex:n-1});typeof a=="string"?i.innerHTML=a:a&&i.append(a)}catch{$("detailRenderer threw; showing an empty panel")}this.details.set(o.id,i)}i.style.left=`${this.scroller.scrollLeft}px`,i.style.width=`${this.scroller.clientWidth||this.grid.columns.regionWidth("center")}px`,(e.firstChild!==i||e.childNodes.length!==1)&&e.replaceChildren(i)}paintLoadingRow(e,t,n){e.className="fg-row fg-row-loading",this.placeRow(e,t),e.setAttribute("aria-busy","true"),e.style.zIndex="",e.replaceChildren(...n.map(r=>{let o=b("div","fg-cell",{role:"gridcell"});return o.style.left=`${r.left}px`,o.style.width=`${r.width}px`,o.dataset.col=r.id,I(r.id)||o.append(b("span","fg-skeleton",{"aria-hidden":"true"})),o}))}renderPager(){let{grid:e}=this,t=e.options.pagination;if(!t){this.pagerEl?.remove(),this.pagerEl=null;return}let n=e.store.state.locale,r=e.getPage(),o=e.getPageSize(),i=e.getPageCount(),a=e.rowModel.fullCount(),l=typeof t=="object"&&Array.isArray(t.pageSizes)?t.pageSizes.filter(h=>Number.isInteger(h)&&h>0):[],d=`${r}|${o}|${i}|${a}|${n.code}|${l.join(",")}`;if(this.pagerEl&&d===this.pagerKey)return;this.pagerKey=d,this.pagerEl||(this.pagerEl=b("div","fg-pager",{role:"navigation"}),this.pagerEl.addEventListener("click",h=>{let f=h.target.closest("button[data-action]")?.dataset.action,C=e.getPage();f==="first"?e.setPage(0):f==="prev"?e.setPage(C-1):f==="next"?e.setPage(C+1):f==="last"&&e.setPage(e.getPageCount()-1)}),this.pagerEl.addEventListener("change",h=>{let f=h.target;f.classList.contains("fg-pager-size")&&e.setPageSize(Number(f.value))})),this.pagerEl.setAttribute("aria-label",n.pageSize);let c=new Intl.NumberFormat(n.code),u=a?r*o+1:0,v=Math.min(a,(r+1)*o),p=b("span","fg-pager-range");p.textContent=n.pagerRange.replace("{from}",c.format(u)).replace("{to}",c.format(v)).replace("{total}",c.format(a));let R=[p,b("span","fg-pager-spacer")];if(l.length){let h=b("label","fg-pager-size-label");h.textContent=n.pageSize;let f=b("select","fg-pager-size");for(let C of[...new Set([...l,o])].sort((y,S)=>y-S)){let y=b("option");y.value=String(C),y.textContent=c.format(C),y.selected=C===o,f.append(y)}h.append(f),R.push(h)}let w=(h,f,C,y)=>{let S=b("button","fg-pager-btn",{type:"button","aria-label":C,title:C});return S.dataset.action=h,S.textContent=f,S.disabled=y,S},m=b("span","fg-pager-page",{"aria-live":"polite"});m.textContent=n.pageOf.replace("{page}",c.format(r+1)).replace("{pages}",c.format(i)),R.push(w("first","\xAB",n.firstPage,r===0),w("prev","\u2039",n.previousPage,r===0),m,w("next","\u203A",n.nextPage,r>=i-1),w("last","\xBB",n.lastPage,r>=i-1)),this.pagerEl.replaceChildren(...R)}showFreeBadge(){if(this.root.querySelector(".fg-free-badge"))return;let e=b("a","fg-free-badge",{href:"https://freegrid.app/pricing/",target:"_blank",rel:"noopener"});e.innerHTML='<svg viewBox="0 0 32 32" width="14" height="14" aria-hidden="true"><rect width="32" height="32" rx="7" fill="#0E1726"/><path d="M7 11.5h18M7 16.5h18M7 21.5h18M13 7v18" stroke="#fff" stroke-width="2" stroke-linecap="round"/><rect x="14" y="12.5" width="11" height="3" rx="1" fill="#F2A900"/></svg>';let t=b("span");t.textContent=`FreeGrid \xB7 ${this.grid.store.state.locale.freeBadge}`,e.append(t),this.root.append(e)}useCards(){let e=this.grid.options.cardView,t=e===!0?640:typeof e=="number"?e:-1,n=t>0&&this.main.clientWidth<t;return n!==this.cardMode&&(this.cardMode=n,this.root.classList.toggle("fg-card-mode",n),!n&&this.cards&&(this.cards.scroller.remove(),this.cards=null),this.version++),n}renderCards(e){let{grid:t}=this;if(!this.cards){let w=b("div","fg-cards",{role:"list"}),m=b("div","fg-cards-canvas");w.append(m),this.main.insertBefore(w,this.overlay),w.addEventListener("scroll",()=>{this.schedule(),this.grid.events.emit("scroll",this.getScroll())},{passive:!0}),w.addEventListener("click",this.onCardClick),this.cards={scroller:w,canvas:m}}let{scroller:n,canvas:r}=this.cards,o=t.columns.displayed().filter(w=>!I(w.id)),i=Math.round(this.opts.rowHeight*.75),a=!!t.options.rowSelection,l=20+o.length*i+(a?i:0),d=10;r.style.height=`${e*(l+d)}px`;let c=Math.max(0,Math.floor(n.scrollTop/(l+d))-2),u=Math.min(e-1,Math.ceil((n.scrollTop+(n.clientHeight||800))/(l+d))+2),{selected:v,locale:p}=t.store.state,R=[];for(let w=c;w<=u;w++){let m=t.rowModel.getRow(w);if(!m)continue;let h=b("div",m.kind?"fg-card fg-card-other":v.has(m.id)?"fg-card fg-card-selected":"fg-card",{role:"listitem"});if(h.dataset.row=String(w),h.style.transform=`translateY(${w*(l+d)}px)`,h.style.height=`${l}px`,h.style.setProperty("--fg-card-line",`${i}px`),m.kind==="group"&&m.group){let f=t.columns.getNode(m.group.colId)?.def;h.textContent=`${f?.header??m.group.colId}: ${String(m.group.value??p.blanks)} (${m.group.rows.length})`}else if(!m.kind){if(a){let f=b("label","fg-card-head"),C=b("input","fg-card-check fg-checkbox",{type:"checkbox","aria-label":p.selectRow});C.checked=v.has(m.id),C.disabled=!t.rowSelectable(m.data),f.append(C,document.createTextNode(`#${w+1}`)),h.append(f)}for(let f of o){let C=b("div","fg-card-line"),y=b("span","fg-card-label");y.textContent=f.def.header??f.def.field??f.id;let S=b("span","fg-card-value");S.dataset.col=f.id;let x=N(f.def,m.data),g=G(f.def,p.code)(x);if(f.def.renderer)try{let k=f.def.renderer({value:x,formatted:g,row:m.data,rowIndex:w,column:f.def});typeof k=="string"?S.innerHTML=k:S.replaceChildren(k)}catch{S.textContent=g}else S.textContent=g;C.append(y,S),h.append(C)}}R.push(h)}r.replaceChildren(...R)}dropDetail(e){e===void 0?this.details.clear():this.details.delete(e)}renderedRange(){return this.lastRange}measureText(e,t){let n=getComputedStyle(this.main),r=parseFloat(getComputedStyle(this.root).getPropertyValue("--fg-font-size"))||13;this.measureCtx===void 0&&(this.measureCtx=document.createElement("canvas").getContext("2d"));let o=this.measureCtx;return o?(o.font=`${t?600:400} ${r}px ${n.fontFamily||"sans-serif"}`,o.measureText(e).width):e.length*r*.6}scrollToRow(e){this.scroller.scrollTop=this.rowTop(Math.max(0,Math.min(e,this.grid.rowModel.getRowCount())))}pageRows(){return Math.max(1,Math.floor(this.scroller.clientHeight/this.opts.rowHeight))}destroy(){this.frame&&cancelAnimationFrame(this.frame),this.scroller.removeEventListener("scroll",this.onScroll),this.root.remove()}},yt=class{constructor(e){let t=n=>({left:b("div",`${n} ${n}-left`),center:b("div",`${n} ${n}-center`),right:b("div",`${n} ${n}-right`)});this.el=b("div",e,{role:"rowgroup"}),this.panes=t("fg-section-pane"),this.inners=t("fg-section-inner");for(let n of j)this.panes[n].append(this.inners[n]),this.el.append(this.panes[n])}size(e,t,n){this.el.style.height=`${t}px`;for(let r of j){let o=e.regionWidth(r);r!=="center"&&(this.panes[r].style.width=`${o}px`,this.panes[r].hidden=o===0),this.inners[r].style.width=`${o}px`,this.inners[r].style.height=`${t}px`}this.panes.center.style.marginRight=`${n}px`}};var yr=4,ze=class{constructor(e){this.grid=e;this.onClick=e=>{let n=e.target.closest(".fg-group-chip-remove")?.closest(".fg-group-chip")?.dataset.col;n&&this.grid.setGroupBy(this.grid.getGroupBy().filter(r=>r!==n))};this.onPointerDown=e=>{let t=e.target,n=t.closest(".fg-group-chip");if(e.button!==0||!n||t.closest("button"))return;let r=n.dataset.col,o=e.clientX,i=!1,a=d=>{!i&&Math.abs(d.clientX-o)<yr||(i=!0,n.classList.add("fg-dragging"))},l=d=>{if(window.removeEventListener("pointermove",a),window.removeEventListener("pointerup",l),n.classList.remove("fg-dragging"),!i)return;let u=[...this.el.querySelectorAll(".fg-group-chip")].filter(p=>p!==n).filter(p=>{let R=p.getBoundingClientRect();return d.clientX>R.left+R.width/2}).length,v=this.grid.getGroupBy().filter(p=>p!==r);v.splice(u,0,r),this.grid.setGroupBy(v)};window.addEventListener("pointermove",a),window.addEventListener("pointerup",l)};this.el=b("div","fg-group-panel",{role:"toolbar"}),e.renderer.main.insertBefore(this.el,e.renderer.gridEl),this.el.addEventListener("click",this.onClick),this.el.addEventListener("pointerdown",this.onPointerDown),this.refresh()}contains(e,t){let n=this.el.getBoundingClientRect();return e>=n.left&&e<=n.right&&t>=n.top&&t<=n.bottom}highlight(e){this.el.classList.toggle("fg-group-panel-over",e)}refresh(){let{grid:e}=this,t=e.store.state.locale;this.el.setAttribute("aria-label",t.groupByThis);let n=e.getGroupBy();if(!n.length){let r=b("span","fg-group-hint");r.textContent=t.groupPanelHint,this.el.replaceChildren(r);return}this.el.replaceChildren(...n.map((r,o)=>{let i=e.columns.getNode(r)?.def,a=b("span","fg-group-chip");a.dataset.col=r;let l=b("span","fg-group-chip-label");l.textContent=i?.header??i?.field??r;let d=b("button","fg-group-chip-remove",{type:"button","aria-label":`${t.ungroup}: ${l.textContent}`});if(d.textContent="\xD7",a.append(l,d),o<n.length-1){let c=b("span","fg-group-sep",{"aria-hidden":"true"});return c.textContent="\u203A",[a,c]}return[a]}).flat())}destroy(){this.el.removeEventListener("click",this.onClick),this.el.removeEventListener("pointerdown",this.onPointerDown),this.el.remove()}};var ge=class{constructor(){this.listeners=new Map}on(e,t){let n=this.listeners.get(e);return n||this.listeners.set(e,n=new Set),n.add(t),()=>{n.delete(t)}}emit(e,t){let n=this.listeners.get(e);if(n)for(let r of[...n])try{r(t)}catch(o){console.error("[FreeGrid] event listener threw",o)}}clear(){this.listeners.clear()}};function se(s){let e=s.getRootNode();return typeof ShadowRoot<"u"&&e instanceof ShadowRoot?e:document.body}function Ce(s,e,t){let n=s.getRootNode();return(typeof n.elementFromPoint=="function"?n.elementFromPoint(e,t):null)??document.elementFromPoint(e,t)}function gn(s){return s.getRootNode().activeElement??document.activeElement}function me(s,...e){let t=typeof s.composedPath=="function"?s.composedPath():[];return t.length?e.some(n=>!!n&&t.includes(n)):e.some(n=>!!n&&n.contains(s.target))}var bt=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Tab","Home","End","PageUp","PageDown"]);function xt(s,e,t,n){let r=i=>Math.max(0,Math.min(n.rows-1,i)),o=i=>Math.max(0,Math.min(n.cols-1,i));switch(s){case"ArrowUp":return{rowIndex:r(t.rowIndex-1),colIndex:t.colIndex};case"ArrowDown":return{rowIndex:r(t.rowIndex+1),colIndex:t.colIndex};case"ArrowLeft":return{rowIndex:t.rowIndex,colIndex:o(t.colIndex-1)};case"ArrowRight":return{rowIndex:t.rowIndex,colIndex:o(t.colIndex+1)};case"PageUp":return{rowIndex:r(t.rowIndex-n.pageRows),colIndex:t.colIndex};case"PageDown":return{rowIndex:r(t.rowIndex+n.pageRows),colIndex:t.colIndex};case"Home":return{rowIndex:e.ctrl?0:t.rowIndex,colIndex:0};case"End":return{rowIndex:e.ctrl?n.rows-1:t.rowIndex,colIndex:n.cols-1};case"Tab":{let i=t.rowIndex*n.cols+t.colIndex+(e.shift?-1:1);return i<0||i>=n.rows*n.cols?null:{rowIndex:Math.floor(i/n.cols),colIndex:i%n.cols}}default:return null}}var Ge=new Map,mn=s=>s?Ge.get(s):void 0;var br={Enter:"edit",F2:"edit",Delete:"clear",Backspace:"clear","Ctrl+Z":"undo","Ctrl+Y":"redo","Ctrl+Shift+Z":"redo","Ctrl+F":"find"};function xr(s){let e=[];return(s.ctrlKey||s.metaKey)&&e.push("Ctrl"),s.altKey&&e.push("Alt"),s.shiftKey&&s.key.length>1&&e.push("Shift"),s.shiftKey&&s.key.length===1&&(s.ctrlKey||s.metaKey)&&e.push("Shift"),e.push(s.key.length===1?s.key.toUpperCase():s.key),e.join("+")}var Cr=3;function Rr(s,e){return s.renderer.rtl?e.key==="ArrowLeft"?"ArrowRight":e.key==="ArrowRight"?"ArrowLeft":e.key:e.key}function wn(s){let{renderer:e}=s,t=e.bodyEl,n=e.root,r=g=>Rr(s,g),o="mouse",i=0,a=!1,l=g=>{let k=e.cellAt(g.target);if(!k)return null;let E=s.rowModel.getRow(k.rowIndex),M=s.columns.getColumn(k.colId);if(!E||!M)return null;let L=I(M.id)?void 0:N(M.def,E.data);return{row:E.data,rowIndex:k.rowIndex,colId:k.colId,value:L,event:g}},d=g=>{let k=g.target.closest?.(".fg-group-toggle, .fg-tree-toggle, .fg-detail-toggle"),E=k&&e.cellAt(g.target);if(!E)return!1;e.gridEl.focus({preventScroll:!0}),s.setFocus(E.rowIndex,E.colId),s.setRange(null);let M=s.rowModel.getRow(E.rowIndex);return k.classList.contains("fg-detail-toggle")?s.setDetailExpanded(M.data,!s.isDetailExpanded(M.data)):s.toggleRow(E.rowIndex),!0},c=g=>{if(d(g))return;let k=s.store.state.focus,E=e.cellAt(g.target);if(E&&s.rowModel.getRow(E.rowIndex)?.kind){e.gridEl.focus({preventScroll:!0}),s.setFocus(E.rowIndex,E.colId),s.setRange(null);return}let M=l(g);if(!M)return;e.gridEl.focus({preventScroll:!0});let L=a;a=!1;let D=s.store.state.focus,P=M.colId===Y;if(!L)if(g.shiftKey&&D&&!P&&!I(D.colId)&&s.options.rangeSelection!==!1)s.setRange({start:D,end:{rowIndex:M.rowIndex,colId:M.colId}},!0);else if((g.ctrlKey||g.metaKey)&&!P&&!I(M.colId)&&s.options.rangeSelection!==!1){let T={rowIndex:M.rowIndex,colId:M.colId};s.addRange({start:T,end:T}),s.setFocus(M.rowIndex,M.colId)}else s.setFocus(M.rowIndex,M.colId),s.setRange(null);s.options.rowSelection&&!L&&s.selectFromClick(M.rowIndex,P||g.ctrlKey||g.metaKey,g.shiftKey),s.events.emit("cellClick",M),o==="touch"&&!L&&k&&k.rowIndex===M.rowIndex&&k.colId===M.colId&&s.editor.canEdit(M.rowIndex,M.colId)&&(s.columns.getColumn(M.colId).def.type==="boolean"?s.applyEdit(M.rowIndex,M.colId,M.value!==!0):s.editor.start(M.rowIndex,M.colId))},u=g=>{if(g.target.closest?.("button"))return;let k=e.cellAt(g.target),E=k&&s.rowModel.getRow(k.rowIndex);if(E?.kind==="group"){s.toggleRow(k.rowIndex);return}if(E?.kind)return;let M=l(g);if(!M||(s.events.emit("cellDoubleClick",M),!s.editor.canEdit(M.rowIndex,M.colId)))return;s.columns.getColumn(M.colId).def.type==="boolean"?s.applyEdit(M.rowIndex,M.colId,M.value!==!0):s.editor.start(M.rowIndex,M.colId)},v={...br};for(let[g,k]of Object.entries(s.options.keymap??{}))v[g]=k===!1?"none":k;let p=g=>{let k=s.store.state.focus,E=v[xr(g)];if(E==="none")return!1;switch(E){case"edit":return!k||!s.editor.canEdit(k.rowIndex,k.colId)||s.columns.getColumn(k.colId).def.type==="boolean"?!1:(s.editor.start(k.rowIndex,k.colId),!0);case"clear":return s.clearCells(),!0;case"undo":return s.undo(),!0;case"redo":return s.redo(),!0;case"copy":return s.copyToClipboard(!1),!0;case"selectAll":return s.selectAllCells(),!0;case"find":return s.options.findBar===!1?!1:(s.finder.openBar(),!0);case"paste":return navigator.clipboard?.readText?.().then(L=>s.pasteText(L),()=>{}),!0}if(!k||!s.editor.canEdit(k.rowIndex,k.colId))return!1;let M=s.columns.getColumn(k.colId).def;if(g.key===" "&&M.type==="boolean"&&!g.ctrlKey&&!g.metaKey){let L=s.rowModel.getRow(k.rowIndex).data;return s.applyEdit(k.rowIndex,k.colId,L[M.field]!==!0),!0}return g.key.length===1&&g.key!==" "&&!g.ctrlKey&&!g.metaKey&&!g.altKey&&M.type!=="boolean"?(s.editor.start(k.rowIndex,k.colId,g.key),!0):!1},R=g=>{let k=s.store.state.focus;if(!k||g.ctrlKey||g.metaKey||g.altKey||g.shiftKey)return!1;let E=s.rowModel.getRow(k.rowIndex);if(!s.isExpandable(E))return!1;let M=E.kind==="group";if(!M&&k.colId!==s.columns.displayed().find(P=>!I(P.id))?.id)return!1;let L=!!(E.group?.expanded??E.expanded),D=s.expandKey(E);if(M&&(g.key==="Enter"||g.key===" "))s.setGroupExpanded(D,!L);else if(r(g)==="ArrowRight"&&!L)s.setGroupExpanded(D,!0);else if(r(g)==="ArrowLeft"&&L)s.setGroupExpanded(D,!1);else return!1;return!0},w=g=>{let k=e.cellAt(g.target);if(!k||k.colId!==ae)return!1;g.preventDefault();let E=s.rowModel.getRow(k.rowIndex);if(!E||E.kind||!s.canMoveRows())return!0;let M=E.data,L=b("div","fg-row-drop-marker"),D=null;n.classList.add("fg-row-dragging");let P=A=>{let H=Ce(n,A.clientX,A.clientY),B=H?.closest(".fg-root"),O=B===n?s:mn(B),V=s.dragOptions.group;if(D=null,L.remove(),!O||!B||O!==s&&(!V||O.dragOptions.group!==V||!O.options.rowDrag))return;let J=H.closest(".fg-row[data-row]"),q=J?.getBoundingClientRect(),Q=null,X="after",ut;if(J&&q){let re=O.rowModel.getRow(Number(J.dataset.row));if(!re||re.kind==="group")return;Q=re.detailOf?.data??re.data;let be=(A.clientY-q.top)/q.height;re.kind==="detail"?X="after":O.options.treeData?X=be<.25?"before":be>.75?"after":"inside":X=be<.5?"before":"after",ut=X==="before"?q.top:q.bottom}else{if(!H.closest(".fg-body"))return;let re=B.querySelectorAll(".fg-body-pane-center .fg-row[data-row]");ut=re.length?Math.max(...[...re].map(be=>be.getBoundingClientRect().bottom)):B.querySelector(".fg-body").getBoundingClientRect().top}if(!O.canDropRow(M,Q,X,s))return;D={into:O,target:Q,position:X};let Kt=B.getBoundingClientRect().top;L.classList.toggle("fg-row-drop-inside",X==="inside"),L.style.top=`${X==="inside"?q.top-Kt:ut-Kt-1}px`,L.style.height=X==="inside"?`${q.height}px`:"",B.append(L)},T=()=>{window.removeEventListener("pointermove",P),window.removeEventListener("pointerup",T),window.removeEventListener("pointercancel",T),n.classList.remove("fg-row-dragging"),L.remove(),D&&D.into.dropRow(M,D.target,D.position,s)};return window.addEventListener("pointermove",P),window.addEventListener("pointerup",T),window.addEventListener("pointercancel",T),!0},m=g=>{let k=e.cellAt(g.target);if(!k)return;let E=g.clientX,M=g.clientY,L=()=>{clearTimeout(i),window.removeEventListener("pointermove",D),window.removeEventListener("pointerup",L),window.removeEventListener("pointercancel",L)},D=P=>{Math.hypot(P.clientX-E,P.clientY-M)>8&&L()};clearTimeout(i),i=window.setTimeout(()=>{L(),s.options.contextMenu!==!1&&(a=!0,I(k.colId)||(s.setFocus(k.rowIndex,k.colId),s.rangeContains(k.rowIndex,k.colId)||s.setRange({start:k,end:k})),s.contextMenu.open(E,M,k.rowIndex,k.colId))},550),window.addEventListener("pointermove",D),window.addEventListener("pointerup",L),window.addEventListener("pointercancel",L)},h=g=>{if(o=g.pointerType||"mouse",o==="touch"){m(g);return}if(g.button===0&&w(g)||s.options.rangeSelection===!1||g.button!==0||g.shiftKey||g.target.closest("input, a, button"))return;let k=e.cellAt(g.target);if(!k||I(k.colId))return;let E=g.clientX,M=g.clientY,L=g.ctrlKey||g.metaKey,D=!1,P=A=>{if(!D&&Math.hypot(A.clientX-E,A.clientY-M)<Cr)return;let H=e.cellAt(Ce(n,A.clientX,A.clientY));!H||I(H.colId)||(D||(D=!0,n.classList.add("fg-range-dragging"),L&&s.addRange({start:k,end:k}),s.setFocus(k.rowIndex,k.colId)),s.setRange({start:k,end:H},L))},T=()=>{window.removeEventListener("pointermove",P),window.removeEventListener("pointerup",T),n.classList.remove("fg-range-dragging"),D&&(a=!0)};window.addEventListener("pointermove",P),window.addEventListener("pointerup",T)},f=g=>{if(g.target!==n&&g.target!==e.gridEl)return;let k=s.columns.displayed(),E=s.rowModel.getRowCount();if(!k.length||!E)return;if(R(g)){g.preventDefault();return}if(p(g)){g.preventDefault();return}let M=s.store.state.focus,L=g.ctrlKey||g.metaKey;if(g.key==="Escape"&&s.store.state.range){g.preventDefault(),s.setRange(null);return}if(L&&g.key.toLowerCase()==="a"&&s.options.rangeSelection!==!1){g.preventDefault(),s.selectAllCells();return}if(g.key==="ContextMenu"||g.key==="F10"&&g.shiftKey){g.preventDefault(),s.contextMenu.openAtFocus();return}if(g.key===" "&&M&&s.options.rowSelection){g.preventDefault(),s.selectFromClick(Math.min(M.rowIndex,E-1),!0,g.shiftKey);return}let D={rows:E,cols:k.length,pageRows:e.pageRows()},P=k.findIndex(B=>!I(B.id));if(s.options.rangeSelection!==!1&&g.shiftKey&&g.key!=="Tab"&&bt.has(g.key)){let B=M??{rowIndex:0,colId:k[P].id},O=s.store.state.range,V=O?.end??B,J={rowIndex:Math.min(V.rowIndex,E-1),colIndex:Math.max(0,k.findIndex(X=>X.id===V.colId))},q=xt(r(g),{ctrl:L,shift:!1},J,D);if(!q)return;g.preventDefault();let Q=k[Math.max(P,q.colIndex)].id;M||s.setFocus(B.rowIndex,B.colId),s.setRange({start:O?.start??B,end:{rowIndex:q.rowIndex,colId:Q}}),e.ensureVisible(q.rowIndex,Q);return}let A;if(!M)A=bt.has(g.key)&&g.key!=="Tab"?{rowIndex:0,colIndex:0}:null;else{let B=Math.max(0,k.findIndex(O=>O.id===M.colId));A=xt(r(g),{ctrl:L,shift:g.shiftKey},{rowIndex:Math.min(M.rowIndex,E-1),colIndex:B},D)}if(!A)return;g.preventDefault();let H=k[A.colIndex].id;s.setFocus(A.rowIndex,H),s.setRange(null),e.ensureVisible(A.rowIndex,H)},C=g=>g.target?.closest?.(".fg-editor, input, textarea, select, [contenteditable]"),y=g=>g.target?.closest?.(".fg-root")!==n,S=g=>{if(C(g)||y(g))return;let k=s.selectionTSV(!1);!k||!g.clipboardData||(g.clipboardData.setData("text/plain",k),g.preventDefault())},x=g=>{if(C(g)||y(g))return;let k=g.clipboardData?.getData("text/plain");k&&(g.preventDefault(),s.pasteText(k))};return t.addEventListener("click",c),t.addEventListener("dblclick",u),t.addEventListener("pointerdown",h),n.addEventListener("keydown",f),n.addEventListener("copy",S),n.addEventListener("paste",x),()=>{t.removeEventListener("click",c),t.removeEventListener("dblclick",u),t.removeEventListener("pointerdown",h),n.removeEventListener("keydown",f),n.removeEventListener("copy",S),n.removeEventListener("paste",x)}}var Ve=class{constructor(e){this.grid=e;this.open=new Set;this.el=b("div","fg-filters-panel")}refresh(){let{grid:e}=this,t=e.store.state.locale,n=e.store.state.filters,r=b("div","fg-filters-head"),o=b("span","fg-filters-title");o.textContent=t.filters;let i=b("button","fg-btn fg-filters-clear",{type:"button"});i.textContent=t.clearFilters,i.disabled=!Object.keys(n).length,i.addEventListener("click",()=>{for(let l of Object.keys(e.store.state.filters))e.setFilter(l,null)}),r.append(o,i);let a=b("div","fg-filters-list");for(let l of e.columns.displayed()){if(I(l.id)||!he(l.def))continue;let d=b("details",n[l.id]?"fg-filters-item fg-filter-on":"fg-filters-item");d.dataset.col=l.id,d.open=this.open.has(l.id);let c=b("summary");c.textContent=l.def.header??l.def.field??l.id,d.append(c);let u=()=>{if(d.querySelector(".fg-filter"))return;let v=e.menu.filterSection(l.id,()=>{});v&&d.append(v)};d.open&&u(),d.addEventListener("toggle",()=>{d.open?(this.open.add(l.id),u()):this.open.delete(l.id)}),a.append(d)}this.el.replaceChildren(r,a)}};var kr=["sum","avg","min","max","count"],Ue=class{constructor(e){this.grid=e;this.draft={rows:[],columns:[],values:[]};this.el=b("div","fg-pivot-panel")}apply(){this.grid.getPivot()?this.grid.setPivot(this.draft):this.refresh()}refresh(){let{grid:e}=this,t=e.store.state.locale,n=e.getPivot();n&&(this.draft={rows:[...n.rows],columns:[...n.columns??[]],values:n.values.map(d=>({colId:d.colId,aggFunc:typeof d.aggFunc=="string"?d.aggFunc:"sum"}))});let r=e.sourceLeaves(),o=d=>{let c=r.find(u=>u.id===d)?.def;return c?.header??c?.field??d},i=b("label","fg-pivot-mode"),a=b("input","fg-checkbox",{type:"checkbox"});a.checked=!!n,a.addEventListener("click",()=>e.setPivot(a.checked?this.draft:null)),i.append(a,document.createTextNode(t.pivotMode));let l=(d,c)=>{let u=b("div","fg-pivot-zone");u.dataset.zone=d;let v=b("div","fg-pivot-zone-title");v.textContent=c;let p=b("div","fg-pivot-chips"),R=d==="values"?this.draft.values.map(h=>h.colId):this.draft[d];R.forEach((h,f)=>{let C=b("span","fg-group-chip");C.dataset.col=h;let y=b("span","fg-group-chip-label");if(y.textContent=o(h),C.append(y),d==="values"){let x=b("select","fg-pivot-agg",{"aria-label":`${o(h)} ${t.pivotValues}`});for(let g of kr){let k=b("option");k.value=g,k.textContent=t[g],x.append(k)}x.value=this.draft.values[f].aggFunc,x.addEventListener("change",()=>{this.draft.values[f].aggFunc=x.value,this.apply()}),C.append(x)}let S=b("button","fg-group-chip-remove",{type:"button","aria-label":`${t.ungroup}: ${o(h)}`});S.textContent="\xD7",S.addEventListener("click",()=>{d==="values"?this.draft.values.splice(f,1):this.draft[d].splice(f,1),this.apply()}),C.append(S),p.append(C)});let w=b("select","fg-pivot-add",{"aria-label":`${c}: ${t.addColumn}`}),m=b("option");m.value="",m.textContent=t.addColumn,w.append(m);for(let h of r){if(R.includes(h.id)||d==="values"&&h.def.type!=="number")continue;let f=b("option");f.value=h.id,f.textContent=o(h.id),w.append(f)}return w.addEventListener("change",()=>{w.value&&(d==="values"?this.draft.values.push({colId:w.value,aggFunc:"sum"}):this.draft[d].push(w.value),this.apply())}),u.append(v,p,w),u};this.el.replaceChildren(i,l("rows",t.pivotRows),l("columns",t.pivotColumns),l("values",t.pivotValues))}};var Sr=4,qe=s=>!I(s.id)&&(s.children?s.children.some(qe):s.def.chooser!==!1),Ct=s=>s.def.header??s.def.field??s.id,Ke=class{constructor(e){this.grid=e;this.collapsed=new Set;this.el=b("div","fg-chooser"),this.search=b("input","fg-input fg-chooser-search",{type:"search"});let t=b("label","fg-chooser-all");this.allBox=b("input","fg-checkbox",{type:"checkbox"}),this.allText=b("span"),t.append(this.allBox,this.allText),this.list=b("div","fg-chooser-list",{role:"tree"}),this.el.append(this.search,t,this.list),this.search.addEventListener("input",()=>this.refresh()),this.allBox.addEventListener("change",()=>this.setVisible(this.matchingLeaves(),this.allBox.checked)),this.list.addEventListener("change",n=>{let r=n.target,o=this.nodeOf(r);o&&this.setVisible(this.leavesOf(o),r.checked)}),this.list.addEventListener("click",n=>{let r=n.target.closest(".fg-chooser-caret"),o=r&&this.nodeOf(r);o&&(this.collapsed.has(o.id)?this.collapsed.delete(o.id):this.collapsed.add(o.id),this.refresh())}),this.list.addEventListener("pointerdown",n=>this.onPointerDown(n)),this.refresh()}refresh(){let e=this.grid.store.state.locale;this.search.placeholder=e.search,this.search.setAttribute("aria-label",e.search),this.allText.textContent=e.selectAll;let t=this.query(),n=[],r=(a,l)=>{for(let d of a)!qe(d)||t&&!this.subtreeMatches(d,t)||(n.push(this.item(d,l)),d.children&&(t||!this.collapsed.has(d.id))&&r(d.children,l+1))};r(this.grid.columns.roots(),0),this.list.replaceChildren(...n);let o=this.matchingLeaves(),i=o.filter(a=>!a.hide).length;this.allBox.checked=o.length>0&&i===o.length,this.allBox.indeterminate=i>0&&i<o.length}query(){return this.search.value.trim().toLowerCase()}subtreeMatches(e,t){for(let n=e;n;n=n.parent)if(Ct(n).toLowerCase().includes(t))return!0;return!!e.children&&e.children.some(n=>qe(n)&&this.subtreeMatches(n,t))}leavesOf(e){return qe(e)?e.children?e.children.flatMap(t=>this.leavesOf(t)):[e]:[]}matchingLeaves(){let e=this.query(),t=this.grid.columns.roots().flatMap(n=>this.leavesOf(n));return e?t.filter(n=>this.subtreeMatches(n,e)):t}nodeOf(e){let t=e.closest(".fg-chooser-item")?.dataset.col;return t?this.grid.columns.getNode(t):void 0}setVisible(e,t){this.grid.setColumnsVisible(e.filter(n=>!n.def.lockVisible).map(n=>n.id),t)}item(e,t){let n=b("div",e.children?"fg-chooser-item fg-chooser-group":"fg-chooser-item",{role:"treeitem"});n.dataset.col=e.id,n.style.paddingLeft=`${6+t*16}px`;let r=b("span","fg-chooser-handle",{"aria-hidden":"true"});if(r.textContent="\u22EE\u22EE",n.append(r),e.children){let d=!this.collapsed.has(e.id),c=b("button","fg-chooser-caret",{type:"button",tabindex:"-1","aria-hidden":"true"});c.textContent=d?"\u25BE":"\u25B8",n.setAttribute("aria-expanded",String(d)),n.append(c)}let o=this.leavesOf(e),i=o.filter(d=>!d.hide).length,a=b("input","fg-checkbox",{type:"checkbox","aria-label":Ct(e)});a.checked=o.length>0&&i===o.length,a.indeterminate=i>0&&i<o.length,a.disabled=o.every(d=>d.def.lockVisible);let l=b("span","fg-chooser-label");if(l.textContent=Ct(e),n.append(a,l),!e.children&&e.pinned){let d=b("span","fg-chooser-pin");d.textContent=e.pinned==="left"?"\u21E4":"\u21E5",n.append(d)}return n}onPointerDown(e){let n=e.target.closest(".fg-chooser-handle")?.closest(".fg-chooser-item"),r=n&&this.nodeOf(n);if(!n||!r||e.button!==0)return;e.preventDefault();let o=new Set(this.grid.columns.siblings(r.id).map(p=>p.id).filter(p=>p!==r.id)),i=[...this.list.querySelectorAll(".fg-chooser-item")].filter(p=>o.has(p.dataset.col)),a=e.clientY,l=!1,d=-1,c=b("div","fg-chooser-marker"),u=p=>{if(!l){if(Math.abs(p.clientY-a)<Sr||!i.length)return;l=!0,n.classList.add("fg-dragging"),this.list.append(c)}d=i.filter(m=>{let h=m.getBoundingClientRect();return p.clientY>h.top+h.height/2}).length;let R=this.list.getBoundingClientRect().top-this.list.scrollTop,w=d<i.length?i[d].getBoundingClientRect().top:i[i.length-1].getBoundingClientRect().bottom;c.style.top=`${w-R-1}px`},v=()=>{if(window.removeEventListener("pointermove",u),window.removeEventListener("pointerup",v),c.remove(),n.classList.remove("fg-dragging"),!l||d<0)return;let p=this.grid.columns.siblings(r.id).map(m=>m.id).filter(m=>m!==r.id),R=d<i.length?p.indexOf(i[d].dataset.col):p.indexOf(i[i.length-1].dataset.col)+1;R=Math.max(p.filter(I).length,R);let w=this.grid.columns.siblings(r.id).findIndex(m=>m.id===r.id);R!==w&&(this.grid.columns.move(r.id,R),this.grid.layoutChanged(),this.grid.events.emit("columnMove",{colId:r.id,toIndex:R}))};window.addEventListener("pointermove",u),window.addEventListener("pointerup",v)}},_e=class{constructor(e){this.grid=e;this.popup=null;this.panel=null;this.off=[]}get isOpen(){return!!this.popup}open(){this.close();let e=this.grid.store.state.locale,t=b("div",`fg-menu fg-chooser-dialog fg-theme-${this.grid.store.state.theme}`,{role:"dialog","aria-label":e.chooseColumns});this.grid.applyFontTo(t);let n=b("div","fg-chooser-head"),r=b("span","fg-menu-title");r.textContent=e.chooseColumns;let o=b("button","fg-chooser-close",{type:"button","aria-label":e.close});o.textContent="\xD7",o.addEventListener("click",()=>this.close()),n.append(r,o),this.panel=new Ke(this.grid),t.append(n,this.panel.el),se(this.grid.renderer.root).append(t);let i=this.grid.renderer.root.getBoundingClientRect(),a=t.offsetWidth||280;t.style.left=`${Math.max(4,Math.min(i.right-a-8,window.innerWidth-a-4))}px`,t.style.top=`${Math.max(4,i.top+8)}px`,this.popup=t;let l=c=>{me(c,t)||this.close()},d=c=>{c.key==="Escape"&&this.close()};document.addEventListener("pointerdown",l,!0),document.addEventListener("keydown",d,!0),this.off.push(()=>document.removeEventListener("pointerdown",l,!0),()=>document.removeEventListener("keydown",d,!0)),t.querySelector(".fg-chooser-search").focus()}refresh(){this.panel?.refresh()}close(){for(let e of this.off)e();this.off=[],this.popup?.remove(),this.popup=null,this.panel=null}},We=class{constructor(e,t,n=["columns","filters"]){this.grid=e;this.tabs=new Map;this.el=b("div","fg-sidebar"),this.panelHost=b("div","fg-sidebar-panel"),this.columns=new Ke(e),this.filters=new Ve(e),this.pivot=new Ue(e);let r=n.filter(i=>i==="columns"||i==="filters"||i==="pivot");r.length||r.push("columns"),this.current=r[0];let o=b("div","fg-sidebar-tabs",{role:"tablist"});for(let i of r){let a=b("button","fg-sidebar-tab",{type:"button",role:"tab"});a.dataset.panel=i,a.addEventListener("click",()=>this.toggle(!(this.isOpen&&this.current===i),i)),this.tabs.set(i,a),o.append(a)}this.el.append(this.panelHost,o),e.renderer.root.append(this.el),this.panelHost.hidden=!t,this.show(),this.refresh()}get isOpen(){return!this.panelHost.hidden}show(){this.panelHost.replaceChildren(this.current==="filters"?this.filters.el:this.current==="pivot"?this.pivot.el:this.columns.el)}toggle(e=!this.isOpen,t){t&&this.tabs.has(t)&&t!==this.current&&(this.current=t,this.show()),this.panelHost.hidden=!e,this.syncTabs(),this.grid.renderer.invalidate({header:!0,rows:!0})}syncTabs(){for(let[e,t]of this.tabs){let n=this.isOpen&&e===this.current;t.setAttribute("aria-expanded",String(n)),t.setAttribute("aria-selected",String(n))}}refresh(){let e=this.grid.store.state.locale;for(let[t,n]of this.tabs)n.textContent=t==="filters"?e.filters:t==="pivot"?e.pivot:e.columns;this.syncTabs(),this.columns.refresh(),this.filters.refresh(),this.pivot.refresh()}};var Mr=()=>typeof navigator<"u"&&/Mac|iPhone|iPad/.test(navigator.platform||navigator.userAgent||""),Re=s=>Mr()?`\u2318${s}`:`Ctrl+${s}`,je=class{constructor(e){this.grid=e;this.popup=null;this.off=[];let t=e.renderer.root,n=r=>this.onContextMenu(r);t.addEventListener("contextmenu",n),this.detach=()=>t.removeEventListener("contextmenu",n)}destroy(){this.close(),this.detach()}onContextMenu(e){let{grid:t}=this;if(t.options.contextMenu===!1)return;let n=e.target,r=n.closest(".fg-header-cell");if(r){let i=r.dataset.col;if(!i||I(i)||r.classList.contains("fg-header-group"))return;e.preventDefault(),this.close(),t.menu.open(i,r);return}let o=t.renderer.cellAt(n);o&&(e.preventDefault(),t.renderer.gridEl.focus({preventScroll:!0}),!I(o.colId)&&!t.rangeContains(o.rowIndex,o.colId)&&(t.setFocus(o.rowIndex,o.colId),t.setRange({start:o,end:o})),this.open(e.clientX,e.clientY,o.rowIndex,o.colId))}openAtFocus(){let e=this.grid.store.state.focus;if(!e||this.grid.options.contextMenu===!1)return;let t=this.grid.renderer.root.getBoundingClientRect(),r=this.grid.renderer.root.querySelector(`.fg-row[data-row="${e.rowIndex}"] .fg-cell[data-col="${CSS.escape(e.colId)}"]`)?.getBoundingClientRect()??t;this.open(r.left+8,r.bottom,e.rowIndex,e.colId)}defaultItems(e){let{grid:t}=this,n=t.store.state.locale,r=t.columns.getNode(e),o=r?.def,i=!!o&&!I(e),a=[{label:n.copy,shortcut:Re("C"),action:()=>t.copyToClipboard(!1)},{label:n.copyWithHeaders,action:()=>t.copyToClipboard(!0)},...t.store.state.selected.size?[{label:n.copyRows,action:()=>t.copyToClipboard(!1,!0)}]:[],{label:n.paste,shortcut:Re("V"),action:()=>this.pasteFromClipboard()}];(t.history.canUndo()||t.history.canRedo())&&a.push("separator",{label:n.undo,shortcut:Re("Z"),action:()=>t.undo(),disabled:!t.history.canUndo()},{label:n.redo,shortcut:Re("Y"),action:()=>t.redo(),disabled:!t.history.canRedo()}),t.options.rowSelection&&t.store.state.selected.size&&a.push({label:n.deleteRows,action:()=>t.api.removeSelectedRows()}),i&&(a.push("separator",{label:n.autosizeThis,action:()=>t.autoSize([e])}),o.lockVisible||a.push({label:n.hideColumn,action:()=>t.setColumnsVisible([e],!1)}),a.push({label:n.pinLeft,action:()=>t.setPinned(e,"left"),disabled:r.pinned==="left"},{label:n.pinRight,action:()=>t.setPinned(e,"right"),disabled:r.pinned==="right"},{label:n.unpin,action:()=>t.setPinned(e,null),disabled:!r.pinned})),a.push("separator"),t.options.rowSelection==="multiple"&&a.push({label:n.selectAllRows,action:()=>t.api.selectAll()}),a.push({label:n.chooseColumns,action:()=>t.chooser.open()});let l=t.rangeBounds();return l&&(l.r2>l.r1||l.c2>l.c1)&&a.push("separator",{label:n.chartBar,action:()=>t.api.createChart({type:"bar"})},{label:n.chartLine,action:()=>t.api.createChart({type:"line"})},{label:n.chartPie,action:()=>t.api.createChart({type:"pie"})}),a.push("separator",{label:n.exportCsv,action:()=>t.api.exportCsv()},{label:n.exportExcel,action:()=>t.api.exportXlsx()}),a}pasteFromClipboard(){let e=typeof navigator<"u"?navigator.clipboard:void 0,t=()=>this.grid.toast(this.grid.store.state.locale.pasteHint.replace("Ctrl+V",Re("V")));if(!e?.readText)return t();e.readText().then(n=>this.grid.pasteText(n),t)}open(e,t,n,r){this.close(),this.grid.menu.close();let{grid:o}=this,i=o.rowModel.getRow(n),a=o.columns.getColumn(r),l=this.defaultItems(r),d={row:i?.data??null,rowIndex:n,colId:r,value:i&&a&&!I(r)?N(a.def,i.data):void 0,defaultItems:l},c=o.options.contextMenu,u=l;if(typeof c=="function")try{u=c(d)}catch{u=l}let v=o.store.state.locale,p=b("div",`fg-menu fg-context-menu fg-theme-${o.store.state.theme}`,{role:"menu","aria-label":v.columnMenu});o.applyFontTo(p);let R=!0;for(let y of u){if(y==="separator"){R||p.append(b("div","fg-cm-sep",{role:"separator"})),R=!0;continue}let S=b("button","fg-menu-item fg-cm-item",{type:"button",role:"menuitem"}),x=b("span","fg-cm-label");if(x.textContent=y.label,S.append(x),y.shortcut){let g=b("span","fg-cm-shortcut");g.textContent=y.shortcut,S.append(g)}S.disabled=!!y.disabled,S.addEventListener("click",()=>{this.close(),y.action()}),p.append(S),R=!1}p.lastElementChild?.classList.contains("fg-cm-sep")&&p.lastElementChild.remove(),se(this.grid.renderer.root).append(p);let w=p.offsetWidth||220,m=p.offsetHeight||300;p.style.left=`${Math.max(4,Math.min(e,window.innerWidth-w-4))}px`,p.style.top=`${Math.max(4,Math.min(t,window.innerHeight-m-4))}px`,this.popup=p;let h=y=>{me(y,p)||this.close()},f=y=>{if(y.key==="Escape"){this.close(),o.renderer.gridEl.focus();return}if(y.key!=="ArrowDown"&&y.key!=="ArrowUp")return;let S=[...p.querySelectorAll("button:not(:disabled)")],x=S.indexOf(gn(p));S[(x+(y.key==="ArrowDown"?1:S.length-1)+S.length)%S.length]?.focus(),y.preventDefault()},C=()=>this.close();document.addEventListener("pointerdown",h,!0),document.addEventListener("keydown",f,!0),o.renderer.scroller.addEventListener("scroll",C,{passive:!0}),this.off.push(()=>document.removeEventListener("pointerdown",h,!0),()=>document.removeEventListener("keydown",f,!0),()=>o.renderer.scroller.removeEventListener("scroll",C)),p.querySelector("button:not(:disabled)")?.focus()}close(){for(let e of this.off)e();this.off=[],this.popup?.remove(),this.popup=null}};var Xe=class{constructor(e){this.grid=e;this.onDown=e=>{if(e.button!==0)return;e.preventDefault(),e.stopPropagation();let t=this.source();if(!t)return;let{grid:n}=this,r=null,o=n.renderer.root,i=l=>{let d=n.renderer.cellAt(Ce(n.renderer.root,l.clientX,l.clientY)),c=d&&n.columns.getColumn(d.colId);if(!d||!c||I(c.id))return;let u=d.rowIndex>t.r2?d.rowIndex-t.r2:d.rowIndex<t.r1?d.rowIndex-t.r1:0,v=c.index>t.c2?c.index-t.c2:c.index<t.c1?c.index-t.c1:0;!u&&!v?r=null:Math.abs(u)>=Math.abs(v)?r={r1:Math.min(t.r1,d.rowIndex),r2:Math.max(t.r2,d.rowIndex),c1:t.c1,c2:t.c2}:r={r1:t.r1,r2:t.r2,c1:Math.min(t.c1,c.index),c2:Math.max(t.c2,c.index)},this.showPreview(r)},a=()=>{if(window.removeEventListener("pointermove",i),window.removeEventListener("pointerup",a),this.preview.remove(),o.classList.remove("fg-range-dragging"),!r)return;let l=n.columns.displayed();n.fillRange({start:{rowIndex:r.r1,colId:l[r.c1].id},end:{rowIndex:r.r2,colId:l[r.c2].id}})};o.classList.add("fg-range-dragging"),window.addEventListener("pointermove",i),window.addEventListener("pointerup",a)};this.handle=b("div","fg-fill-handle",{"aria-hidden":"true"}),this.preview=b("div","fg-fill-preview",{"aria-hidden":"true"}),this.handle.addEventListener("pointerdown",this.onDown)}enabled(){let e=this.grid.options;return e.fillHandle!==!1&&e.rangeSelection!==!1}source(){let e=this.grid.rangeBounds();if(e)return e;let t=this.grid.store.state.focus,n=t&&this.grid.columns.getColumn(t.colId);return!t||!n||I(n.id)?null:{r1:t.rowIndex,r2:t.rowIndex,c1:n.index,c2:n.index}}cellEl(e,t){let n=this.grid.columns.displayed()[t];return n?this.grid.renderer.root.querySelector(`.fg-body .fg-row[data-row="${e}"] .fg-cell[data-col="${CSS.escape(n.id)}"]`):null}update(){let e=this.enabled()?this.source():null,t=this.grid.columns.displayed(),r=!!e&&t.slice(e.c1,e.c2+1).some(a=>a.def.editable&&a.def.field)&&e?this.cellEl(e.r2,e.c2):null;if(!r){this.handle.remove();return}let o=this.grid.renderer.root.getBoundingClientRect(),i=r.getBoundingClientRect();this.handle.style.left=`${(this.grid.renderer.rtl?i.left:i.right)-o.left-4}px`,this.handle.style.top=`${i.bottom-o.top-4}px`,this.handle.isConnected||this.grid.renderer.root.append(this.handle)}showPreview(e){let t=e&&this.cellEl(e.r1,e.c1),n=e&&this.cellEl(e.r2,e.c2);if(!t||!n){this.preview.remove();return}let r=this.grid.renderer.root.getBoundingClientRect(),o=t.getBoundingClientRect(),i=n.getBoundingClientRect();Object.assign(this.preview.style,{left:`${o.left-r.left}px`,top:`${o.top-r.top}px`,width:`${i.right-o.left}px`,height:`${i.bottom-o.top}px`}),this.preview.isConnected||this.grid.renderer.root.append(this.preview)}destroy(){this.handle.remove(),this.preview.remove()}};var Er=1e4,Ye=class{constructor(e){this.grid=e;this.matches=[];this.lookup=new Map;this.index=-1;this.query="";this.bar=null;this.countEl=null}get active(){return!!this.query}classFor(e,t){if(!this.query)return"";let n=this.lookup.get(`${e}|${t}`);return n===void 0?"":n===this.index?" fg-cell-match fg-cell-match-current":" fg-cell-match"}find(e){if(this.query=e.trim().toLowerCase(),this.matches=[],this.lookup.clear(),this.index=-1,this.query){let{grid:t}=this,n=t.store.state.locale.code,r=t.columns.displayed().filter(a=>!I(a.id)),o=r.map(a=>G(a.def,n)),i=t.rowModel.rows();e:for(let a=0;a<i.length;a++)if(!i[a].kind){for(let l=0;l<r.length;l++)if(o[l](N(r[l].def,i[a].data)).toLowerCase().includes(this.query)&&(this.lookup.set(`${a}|${r[l].id}`,this.matches.length),this.matches.push({rowIndex:a,colId:r[l].id}),this.matches.length>=Er))break e}this.matches.length&&this.go(0)}return this.updateCount(),this.grid.renderer.invalidate({rows:!0}),this.matches.length}refresh(){this.query&&this.find(this.query)}next(){this.matches.length&&this.go((this.index+1)%this.matches.length)}previous(){this.matches.length&&this.go((this.index-1+this.matches.length)%this.matches.length)}clear(){this.query="",this.matches=[],this.lookup.clear(),this.index=-1,this.grid.renderer.invalidate({rows:!0})}go(e){this.index=e;let t=this.matches[e];this.grid.setFocus(t.rowIndex,t.colId),this.grid.renderer.ensureVisible(t.rowIndex,t.colId),this.updateCount(),this.grid.renderer.invalidate({rows:!0})}updateCount(){if(!this.countEl)return;let e=this.grid.store.state.locale;this.countEl.textContent=this.query?this.matches.length?`${this.index+1}/${this.matches.length}`:e.noMatches:""}openBar(){if(this.grid.options.findBar===!1)return;if(this.bar){this.bar.querySelector("input").focus();return}let e=this.grid.store.state.locale,t=b("div","fg-findbar",{role:"search"}),n=b("input","fg-input",{type:"search",placeholder:e.findPlaceholder,"aria-label":e.findPlaceholder});this.countEl=b("span","fg-findbar-count",{"aria-live":"polite"});let r=(o,i,a)=>{let l=b("button","fg-findbar-btn",{type:"button","aria-label":o,title:o});return l.textContent=i,l.addEventListener("click",a),l};t.append(n,this.countEl,r(e.findPrevious,"\u2191",()=>this.previous()),r(e.findNext,"\u2193",()=>this.next()),r(e.close,"\xD7",()=>this.closeBar())),n.addEventListener("input",()=>this.find(n.value)),t.addEventListener("keydown",o=>{o.stopPropagation(),o.key==="Escape"?(o.preventDefault(),this.closeBar()):o.key==="Enter"&&(o.preventDefault(),o.shiftKey?this.previous():this.next())}),this.grid.renderer.root.append(t),this.bar=t,n.focus()}closeBar(){this.bar?.remove(),this.bar=null,this.countEl=null,this.clear(),this.grid.renderer.gridEl.focus({preventScroll:!0})}};var Lr=864e5;function ke(s,e){if(!s.length||e<=0)return[];let t=()=>Array.from({length:e},(o,i)=>s[i%s.length]);if(s.every(o=>typeof o=="number"&&!Number.isNaN(o))){let o=s;if(o.length===1)return t();let i=o[1]-o[0];if(!o.every((l,d)=>d===0||Math.abs(l-o[d-1]-i)<1e-9))return t();let a=o[o.length-1];return Array.from({length:e},(l,d)=>Math.round((a+i*(d+1))*1e12)/1e12)}let n=s.map(o=>o instanceof Date||typeof o=="string"&&/^\d{4}-\d{2}-\d{2}/.test(o)?Z(o):null);if(n.every(Boolean)&&s.length>=2){let o=n.map(a=>Math.round(a.getTime()/Lr)),i=o[1]-o[0];if(o.every((a,l)=>l===0||a-o[l-1]===i)){let a=n[n.length-1],l=s[s.length-1]instanceof Date;return Array.from({length:e},(d,c)=>{let u=new Date(a.getFullYear(),a.getMonth(),a.getDate()+i*(c+1));return l?u:_(u)})}return t()}let r=s[s.length-1];if(typeof r=="string"&&!F(r)&&s.every(o=>typeof o=="string")){let o=/^(.*?)(\d+)$/.exec(r);if(o){let i=o[2].length,a=Number(o[2]);return Array.from({length:e},(l,d)=>`${o[1]}${String(a+d+1).padStart(i,"0")}`)}}return t()}function Rt(s){let e=t=>/[\t\n\r"]/.test(t)?`"${t.replace(/"/g,'""')}"`:t;return s.map(t=>t.map(e).join(" ")).join(`\r
|
|
2
|
+
`)}function yn(s){return kt(s," ")}function kt(s,e){if(!s)return[];let t=[],n=[],r="",o=0,i=!1,a=!0;for(;o<s.length;){let l=s[o];if(i){if(l==='"'){if(s[o+1]==='"'){r+='"',o+=2;continue}i=!1,o++;continue}r+=l,o++;continue}if(l==='"'&&a){i=!0,a=!1,o++;continue}if(l===e){n.push(r),r="",a=!0,o++;continue}if(l==="\r"||l===`
|
|
3
|
+
`){n.push(r),t.push(n),n=[],r="",a=!0,o+=l==="\r"&&s[o+1]===`
|
|
4
|
+
`?2:1;continue}r+=l,a=!1,o++}return(r!==""||n.length||!a)&&(n.push(r),t.push(n)),t}function Ze(s,e,t){if(F(e))return"";switch(s.type){case"number":{let n=typeof e=="number"?e:Number(e);return Number.isNaN(n)?String(e):String(n)}case"date":return _(e)??String(e);case"boolean":return e===!0?"TRUE":e===!1?"FALSE":String(e);default:return G(s,t)(e)}}var Ir=new Set(["true","1","y","yes","\uC608","o","on"]),Dr=new Set(["false","0","n","no","\uC544\uB2C8\uC624","x","off"]);function Tr(s){let e=s.trim();if(!e)return{ok:!0,value:null};let t=!1;/^\(.*\)$/.test(e)&&(t=!0,e=e.slice(1,-1));let n=e.endsWith("%");if(n&&(e=e.slice(0,-1)),e=e.replace(/[\s,₩$€£¥원]/g,""),!/^[-+]?(\d+\.?\d*|\.\d+)(e[-+]?\d+)?$/i.test(e))return{ok:!1};let r=Number(e);return n&&(r/=100),t&&(r=-r),{ok:!0,value:Math.round(r*1e12)/1e12}}function vn(s,e,t){let n=new Date(s,e-1,t);return n.getFullYear()===s&&n.getMonth()===e-1&&n.getDate()===t?n:null}function $r(s,e){let t=s.trim();if(!t)return{ok:!0,value:null};let n=null,r=/^(\d{4})\s*[-./년]\s*(\d{1,2})\s*[-./월]\s*(\d{1,2})\s*[.일]?$/.exec(t);return r?n=vn(+r[1],+r[2],+r[3]):(r=/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/.exec(t))?n=vn(+r[3],+r[1],+r[2]):/^\d{4}-\d{2}-\d{2}T/.test(t)&&(n=Z(t)),n?{ok:!0,value:e instanceof Date?n:_(n)}:{ok:!1}}function Je(s,e,t){switch(s.type){case"number":return Tr(e);case"date":return $r(e,t);case"boolean":{let n=e.trim().toLowerCase();return n?Ir.has(n)?{ok:!0,value:!0}:Dr.has(n)?{ok:!0,value:!1}:{ok:!1}:{ok:!0,value:null}}default:return{ok:!0,value:e}}}var Pr=s=>s.map(e=>e!==null&&typeof e=="object"&&"value"in e?e:{value:e,label:String(e),disabled:!1}),de=s=>String(s).padStart(2,"0");function Ar(s){let e=s instanceof Date?s:typeof s=="string"&&s?new Date(s):null;return!e||Number.isNaN(e.getTime())?"":`${e.getFullYear()}-${de(e.getMonth()+1)}-${de(e.getDate())}T${de(e.getHours())}:${de(e.getMinutes())}`}function Nr(s){if(s instanceof Date)return`${de(s.getHours())}:${de(s.getMinutes())}`;let e=typeof s=="string"?/(\d{1,2}):(\d{2})/.exec(s):null;return e?`${de(Number(e[1]))}:${e[2]}`:""}var Qe=class{constructor(e){this.grid=e;this.cur=null}get active(){return this.cur&&{rowIndex:this.cur.rowIndex,colId:this.cur.colId}}canEdit(e,t){if(I(t))return!1;let n=this.grid.columns.getColumn(t);if(!n?.def.field||e<0||e>=this.grid.rowModel.getRowCount())return!1;let r=this.grid.rowModel.getRow(e);return!r.kind&&te(n.def,r.data,e)}start(e,t,n){if(this.cur&&this.commit(null),!this.canEdit(e,t))return!1;let{grid:r}=this;if(r.veto("beforeEdit",{row:r.rowModel.getRow(e).data,rowIndex:e,colId:t}))return!1;let{renderer:o}=r,i=r.columns.getColumn(t),a=i.def,l=r.rowModel.getRow(e).data,d=l[a.field];r.setFocus(e,t),o.ensureVisible(e,t),o.render();let c=o.root.querySelector(`.fg-row[data-row="${e}"] .fg-cell[data-col="${CSS.escape(t)}"]`),u=o.root.getBoundingClientRect(),v=c?.getBoundingClientRect(),p=b("div","fg-editor");p.style.left=`${(v?.left??u.left)-u.left}px`,p.style.top=`${(v?.top??u.top)-u.top}px`,p.style.width=`${v?.width||i.width}px`,p.style.height=`${v?.height||o.opts.rowHeight}px`;let R,w,m=()=>{},h=a.editor;if(typeof h=="function"){let x=h({value:d,row:l,column:a,initialText:n});R=x.el,w=()=>({value:x.getValue()}),m=()=>x.destroy?.(),p.append(R),queueMicrotask(()=>x.focus?.())}else if(h?.type==="select"){let x=Pr(typeof h.options=="function"?h.options(l):h.options),g=b("select","fg-editor-control");x.forEach((k,E)=>{let M=b("option");M.value=String(E),M.textContent=k.label??String(k.value),M.disabled=!!k.disabled,g.append(M)}),g.selectedIndex=Math.max(0,x.findIndex(k=>Object.is(k.value,d))),R=g,w=()=>({value:x[g.selectedIndex]?.value??null}),p.append(g)}else if(h?.type==="time"||h?.type==="datetime"||!h&&a.type==="date"&&a.format==="datetime"){let x=h?.type==="time",g=b("input","fg-editor-control",{type:x?"time":"datetime-local"});g.value=x?Nr(d):Ar(d),R=g,w=()=>g.value?x?{value:g.value}:{value:d instanceof Date?new Date(g.value):g.value}:{value:null},p.append(g)}else{let g=h?.type==="textarea"?b("textarea","fg-editor-control"):b("input","fg-editor-control");g instanceof HTMLInputElement&&(g.type=a.type==="date"&&n===void 0?"date":"text",a.type==="number"&&(g.inputMode="decimal"));let k=a.type==="date"?_(d)??"":F(d)?"":String(d);g.value=n??k,R=g,w=()=>({text:g.value}),p.append(g)}R.setAttribute("aria-label",a.header??a.field??t);let f=b("div","fg-editor-msg",{role:"alert"});p.append(f);let C=x=>{if(x.stopPropagation(),x.key==="Escape")x.preventDefault(),this.cancel();else if(x.key==="Enter"){if(R instanceof HTMLTextAreaElement&&!(x.ctrlKey||x.metaKey))return;x.preventDefault(),this.commit(x.shiftKey?"up":"down")}else x.key==="Tab"&&(x.preventDefault(),this.commit(x.shiftKey?"left":"right"))},y=x=>{this.cur?.wrap===p&&!p.contains(x.relatedTarget)&&this.commit(null)},S=()=>this.commit(null);return p.addEventListener("keydown",C),p.addEventListener("focusout",y),o.scroller.addEventListener("scroll",S,{passive:!0}),o.root.append(p),this.cur={rowIndex:e,colId:t,row:l,def:a,wrap:p,read:w,dispose:()=>{p.removeEventListener("keydown",C),p.removeEventListener("focusout",y),o.scroller.removeEventListener("scroll",S),m(),p.remove()}},typeof h!="function"&&(R.focus(),n===void 0&&R instanceof HTMLInputElement&&R.type==="text"&&R.select()),r.events.emit("editStart",{rowIndex:e,colId:t}),!0}commit(e){let t=this.cur;if(!t)return!1;let{grid:n}=this,r=n.store.state.locale,o=t.def.field,i=t.row[o],a=t.read(),l;if("text"in a&&t.def.formulas&&fe(a.text.trim()))l=a.text.trim();else if("text"in a){let c=Je(t.def,a.text,i);if(!c.ok)return this.fail(a.text,r.invalidValue);l=c.value}else l=a.value;let d=n.cellError(t.def,t.row,l);return d!==null?this.fail(l,d):(this.close(!0),n.applyEdit(t.rowIndex,t.colId,l),this.move(t.rowIndex,t.colId,e),!0)}cancel(){this.close(!1)}fail(e,t){let n=this.cur;return n.wrap.classList.add("fg-editor-invalid"),n.wrap.querySelector(".fg-editor-msg").textContent=t,this.grid.events.emit("validationFailed",{rowIndex:n.rowIndex,colId:n.colId,value:e,message:t}),!1}close(e){let t=this.cur;t&&(this.cur=null,t.dispose(),this.grid.renderer.gridEl.focus({preventScroll:!0}),this.grid.events.emit("editStop",{rowIndex:t.rowIndex,colId:t.colId,committed:e}))}move(e,t,n){if(!n)return;let{grid:r}=this,o=r.rowModel.getRowCount();if(n==="down"||n==="up"){let c=Math.max(0,Math.min(o-1,e+(n==="down"?1:-1)));r.setFocus(c,t),r.renderer.ensureVisible(c,t);return}let i=r.columns.displayed().filter(c=>this.canEdit(e,c.id)||c.def.editable);if(!i.length)return;let a=n==="right"?1:-1,l=e,d=i.findIndex(c=>c.id===t)+a;d>=i.length&&(d=0,l++),d<0&&(d=i.length-1,l--),!(l<0||l>=o)&&this.start(l,i[d].id)}};var et=class{constructor(e=200){this.limit=e;this.entries=[];this.index=0}push(e){this.entries.splice(this.index),this.entries.push(e),this.entries.length>this.limit&&this.entries.shift(),this.index=this.entries.length}canUndo(){return this.index>0}canRedo(){return this.index<this.entries.length}undo(){return this.canUndo()?(this.entries[--this.index].undo(),!0):!1}redo(){return this.canRedo()?(this.entries[this.index++].redo(),!0):!1}clear(){this.entries=[],this.index=0}};var bn=(s,e)=>s instanceof Date&&e instanceof Date?s.getTime()===e.getTime():Object.is(s,e),tt=class{constructor(){this.originals=new Map;this.created=new Set;this.deleted=new Map}beforeChange(e){!this.created.has(e)&&!this.originals.has(e)&&this.originals.set(e,{...e})}isDirty(e,t){if(!t||this.created.has(e))return!1;let n=this.originals.get(e);return!!n&&!bn(n[t],e[t])}diff(e,t){let n=this.originals.get(e);return n?t.filter(r=>!bn(n[r],e[r])):[]}get size(){return this.originals.size+this.created.size+this.deleted.size}reset(){this.originals.clear(),this.created.clear(),this.deleted.clear()}};function Se(s){return{r1:Math.min(s.start.rowIndex,s.end.rowIndex),r2:Math.max(s.start.rowIndex,s.end.rowIndex),c1:Math.min(s.start.colIndex,s.end.colIndex),c2:Math.max(s.start.colIndex,s.end.colIndex)}}function xn(s,e,t){return e>=s.r1&&e<=s.r2&&t>=s.c1&&t<=s.c2}var Fr=5;function Cn(s,e){let t=r=>s(r),n=r=>{window.removeEventListener("pointermove",t),window.removeEventListener("pointerup",n),window.removeEventListener("pointercancel",n),e(r)};window.addEventListener("pointermove",t),window.addEventListener("pointerup",n),window.addEventListener("pointercancel",n)}function Hr(s,e,t){let n=s.columns.getColumn(t);if(!n)return;let r=e.clientX,o=n.width;s.renderer.root.classList.add("fg-resizing"),Cn(i=>{s.columns.setWidth(t,o+(i.clientX-r)*(s.renderer.rtl?-1:1)),s.layoutChanged()},()=>{s.renderer.root.classList.remove("fg-resizing");let i=s.columns.getColumn(t)?.width??o;i!==o&&s.events.emit("columnResize",{colId:t,width:i})})}function Br(s,e){let t=s.columns.getNode(e);return!!s.groupPanel&&!!t&&!t.children&&!s.options.treeData&&!s.getGroupBy().includes(e)}function Or(s,e,t,n){let r=new Set(s.columns.siblings(e).map(l=>l.id).filter(l=>l!==e&&!I(l))),o=[...n.querySelectorAll(".fg-header-cell")].filter(l=>r.has(l.dataset.col)).map(l=>({id:l.dataset.col,el:l})),i=b("div",`fg-drag-ghost fg-theme-${s.store.state.theme}`);i.textContent=t.querySelector(".fg-header-label")?.textContent??"",s.applyFontTo(i),se(s.renderer.root).append(i);let a=b("div","fg-drop-marker");return a.style.height=`${s.renderer.headerEl.offsetHeight}px`,s.renderer.root.append(a),t.classList.add("fg-dragging"),{ghost:i,marker:a,cell:t,sibs:o,target:-1,overPanel:!1}}function zr(s,e,t,n,r){t.ghost.style.transform=`translate(${n+12}px, ${r+8}px)`,t.overPanel=Br(s,e)&&!!s.groupPanel?.contains(n,r),s.groupPanel?.highlight(t.overPanel),t.marker.hidden=t.overPanel;let o=0;for(let c of t.sibs){let u=c.el.getBoundingClientRect();(s.renderer.rtl?n<u.left+u.width/2:n>u.left+u.width/2)&&o++}t.target=o;let i=s.renderer.root.getBoundingClientRect().left,a=c=>s.renderer.rtl?c.getBoundingClientRect().right:c.getBoundingClientRect().left,l=c=>s.renderer.rtl?c.getBoundingClientRect().left:c.getBoundingClientRect().right,d=o<t.sibs.length?a(t.sibs[o].el):t.sibs.length?l(t.sibs[t.sibs.length-1].el):a(t.cell);t.marker.style.left=`${d-i-1}px`}function Gr(s,e,t){if(t.ghost.remove(),t.marker.remove(),t.cell.classList.remove("fg-dragging"),t.overPanel){s.groupPanel?.highlight(!1),s.setGroupBy([...s.getGroupBy(),e]);return}if(t.target<0||!t.sibs.length)return;let n=s.columns.siblings(e),r=n.findIndex(a=>a.id===e),o=n.map(a=>a.id).filter(a=>a!==e),i=t.target<t.sibs.length?o.indexOf(t.sibs[t.target].id):o.indexOf(t.sibs[t.sibs.length-1].id)+1;i=Math.max(o.filter(I).length,i),i!==r&&(s.columns.move(e,i),s.layoutChanged(),s.events.emit("columnMove",{colId:e,toIndex:i}))}function Vr(s,e,t,n){let r=s.columns.getNode(t),o=n.closest(".fg-header-pane");if(!r||!o)return;let i=e.clientX,a=null;Cn(l=>{if(!a){if(Math.abs(l.clientX-i)<Fr)return;a=Or(s,t,n,o)}zr(s,t,a,l.clientX,l.clientY)},l=>{a?Gr(s,t,a):!r.children&&le(r.def)&&s.toggleSort(t,l.shiftKey||l.ctrlKey||l.metaKey)})}function Rn(s){let e=s.renderer.headerEl,t=r=>{if(r.button!==0)return;let o=r.target,i=o.closest(".fg-header-cell"),a=i?.dataset.col;!i||!a||I(a)||o.closest(".fg-menu-btn")||o.closest("button, a, input, select, textarea, [data-fg-no-sort]")&&o.closest(".fg-header-label")||(r.preventDefault(),o.closest(".fg-resize")?Hr(s,r,a):Vr(s,r,a,i))},n=r=>{let o=r.target,i=o.closest(".fg-menu-btn");if(i){let a=i.closest(".fg-header-cell")?.dataset.col;a&&s.menu.toggle(a,i);return}o.closest(".fg-select-all")&&s.toggleSelectAll()};return e.addEventListener("pointerdown",t),e.addEventListener("click",n),()=>{e.removeEventListener("pointerdown",t),e.removeEventListener("click",n)}}var Ur=/^[=+\-@\t\r]/;function kn(s,e=","){let t=n=>{let r=n.value;return n.text&&Ur.test(r)&&(r=`'${r}`),r.includes(e)||/["\r\n]/.test(r)||/^\s|\s$/.test(r)?`"${r.replace(/"/g,'""')}"`:r};return s.map(n=>n.map(t).join(e)).join(`\r
|
|
5
|
+
`)}function St(s){let e=s.slice(0,s.search(/\r?\n|$/)),t=i=>e.split(i).length-1,n=t(" "),r=t(";"),o=t(",");return n&&n>=o&&n>=r?" ":r>o?";":","}function Mt(s,e=St(s)){return kt(s.replace(/^\uFEFF/,""),e)}var qr=(()=>{let s=new Uint32Array(256);for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)t=t&1?3988292384^t>>>1:t>>>1;s[e]=t>>>0}return s})();function Kr(s){let e=4294967295;for(let t=0;t<s.length;t++)e=qr[(e^s[t])&255]^e>>>8;return(e^4294967295)>>>0}var Sn=new TextEncoder;function Mn(s){let e=s.map(c=>{let u=Sn.encode(c.name),v=typeof c.data=="string"?Sn.encode(c.data):c.data;return{name:u,data:v,crc:Kr(v),offset:0}}),t=e.reduce((c,u)=>c+30+u.name.length+u.data.length,0),n=e.reduce((c,u)=>c+46+u.name.length,0),r=new Uint8Array(t+n+22),o=new DataView(r.buffer),i=0,a=0,l=33;for(let c of e)c.offset=i,o.setUint32(i,67324752,!0),o.setUint16(i+4,20,!0),o.setUint16(i+6,2048,!0),o.setUint16(i+8,0,!0),o.setUint16(i+10,a,!0),o.setUint16(i+12,l,!0),o.setUint32(i+14,c.crc,!0),o.setUint32(i+18,c.data.length,!0),o.setUint32(i+22,c.data.length,!0),o.setUint16(i+26,c.name.length,!0),o.setUint16(i+28,0,!0),r.set(c.name,i+30),r.set(c.data,i+30+c.name.length),i+=30+c.name.length+c.data.length;let d=i;for(let c of e)o.setUint32(i,33639248,!0),o.setUint16(i+4,20,!0),o.setUint16(i+6,20,!0),o.setUint16(i+8,2048,!0),o.setUint16(i+10,0,!0),o.setUint16(i+12,a,!0),o.setUint16(i+14,l,!0),o.setUint32(i+16,c.crc,!0),o.setUint32(i+20,c.data.length,!0),o.setUint32(i+24,c.data.length,!0),o.setUint16(i+28,c.name.length,!0),o.setUint16(i+30,0,!0),o.setUint16(i+32,0,!0),o.setUint16(i+34,0,!0),o.setUint16(i+36,0,!0),o.setUint32(i+38,0,!0),o.setUint32(i+42,c.offset,!0),r.set(c.name,i+46),i+=46+c.name.length;return o.setUint32(i,101010256,!0),o.setUint16(i+8,e.length,!0),o.setUint16(i+10,e.length,!0),o.setUint32(i+12,i-d,!0),o.setUint32(i+16,d,!0),r}var nt=s=>s.length>4&&s[0]===80&&s[1]===75&&s[2]===3&&s[3]===4;async function _r(s){if(typeof DecompressionStream>"u")throw new Error("This browser cannot read compressed xlsx files (no DecompressionStream)");let e=new Response(s).body.pipeThrough(new DecompressionStream("deflate-raw"));return new Uint8Array(await new Response(e).arrayBuffer())}async function En(s){let e=new DataView(s.buffer,s.byteOffset,s.byteLength),t=-1;for(let a=s.length-22;a>=Math.max(0,s.length-65557);a--)if(e.getUint32(a,!0)===101010256){t=a;break}if(t<0)throw new Error("Not a zip file");let n=e.getUint16(t+10,!0),r=e.getUint32(t+16,!0),o=new TextDecoder,i=new Map;for(let a=0;a<n;a++){if(e.getUint32(r,!0)!==33639248)throw new Error("Broken zip directory");let l=e.getUint16(r+10,!0),d=e.getUint32(r+20,!0),c=e.getUint16(r+28,!0),u=e.getUint16(r+30,!0),v=e.getUint16(r+32,!0),p=e.getUint32(r+42,!0),R=o.decode(s.subarray(r+46,r+46+c)),w=e.getUint16(p+26,!0),m=e.getUint16(p+28,!0),h=p+30+w+m,f=s.subarray(h,h+d);if(l===0)i.set(R,f);else if(l===8)i.set(R,await _r(f));else throw new Error(`Unsupported zip compression ${l}`);r+=46+c+u+v}return i}function Et(s){let e="";for(let t=s+1;t>0;t=Math.floor((t-1)/26))e=String.fromCharCode(65+(t-1)%26)+e;return e}var Ln=Date.UTC(1899,11,30),In=864e5;function Wr(s){return(Date.UTC(s.getFullYear(),s.getMonth(),s.getDate(),s.getHours(),s.getMinutes(),s.getSeconds(),s.getMilliseconds())-Ln)/In}function jr(s){let e=new Date(Math.round(s*In)+Ln);return new Date(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds())}var Xr=/[\u0000-\u0008\u000b\u000c\u000e-\u001f]/g,rt=s=>s.replace(Xr,"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),we=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
6
|
+
`,Lt="http://schemas.openxmlformats.org/spreadsheetml/2006/main",ve="http://schemas.openxmlformats.org/officeDocument/2006/relationships";function Yr(s){let e=new Set;return s.map((t,n)=>{let r=(t.name??`Sheet${n+1}`).replace(/[[\]:*?/\\]/g," ").slice(0,31).trim()||`Sheet${n+1}`,o=r;for(let i=2;e.has(o.toLowerCase());i++)o=`${r.slice(0,28)} (${i})`;return e.add(o.toLowerCase()),o})}function It(s){let e=new Map([["General",0]]),t=[],n=['<xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>'],r=new Map([["General||||",0]]),o=['<font><sz val="11"/><name val="Calibri"/></font>','<font><b/><sz val="11"/><name val="Calibri"/></font>'],i=new Map([["0|",0],["1|",1]]),a=['<fill><patternFill patternType="none"/></fill>','<fill><patternFill patternType="gray125"/></fill>','<fill><patternFill patternType="solid"><fgColor rgb="FFF2F4F7"/><bgColor indexed="64"/></patternFill></fill>'],l=new Map([["FFF2F4F7",2]]),d=h=>h&&/^[0-9a-f]{8}$/i.test(h)?h.toUpperCase():h&&/^[0-9a-f]{6}$/i.test(h)?`FF${h.toUpperCase()}`:"",c=(h,f)=>{let C=`${h?1:0}|${f}`,y=i.get(C);return y===void 0&&(y=o.length,o.push(`<font>${h?"<b/>":""}<sz val="11"/>${f?`<color rgb="${f}"/>`:""}<name val="Calibri"/></font>`),i.set(C,y)),y},u=h=>{if(!h)return 0;let f=l.get(h);return f===void 0&&(f=a.length,a.push(`<fill><patternFill patternType="solid"><fgColor rgb="${h}"/><bgColor indexed="64"/></patternFill></fill>`),l.set(h,f)),f},v=(h,f)=>{let C=d(f.color),y=f.header?"FFF2F4F7":d(f.fill),S=!!(f.bold||f.header),x=f.align==="left"||f.align==="center"||f.align==="right"?f.align:"",g=`${h}|${S?1:""}|${C}|${y}|${x}`,k=r.get(g);if(k!==void 0)return k;let E=e.get(h);E===void 0&&(E=164+t.length,t.push(h),e.set(h,E));let M=c(S,C),L=u(y),D=`numFmtId="${E}" fontId="${M}" fillId="${L}" borderId="0" xfId="0"`+(E?' applyNumberFormat="1"':"")+(M?' applyFont="1"':"")+(L?' applyFill="1"':"")+(x?' applyAlignment="1"':"");return k=n.length,n.push(x?`<xf ${D}><alignment horizontal="${x}"/></xf>`:`<xf ${D}/>`),r.set(g,k),k},p=Yr(s),R=s.map(h=>{let f=h.rows.map((E,M)=>{let L=E.map((D,P)=>{let T=D!==null&&typeof D=="object"&&!(D instanceof Date)?D:{v:D},A=`${Et(P)}${M+1}`,H=T.v,B=T.fmt??"General";H instanceof Date&&(Number.isNaN(H.getTime())?H=null:(B==="General"&&(B="yyyy-mm-dd"),H=Wr(H)));let O=v(B,T),V=O?` s="${O}"`:"";return H==null||H===""?V?`<c r="${A}"${V}/>`:"":typeof H=="number"?Number.isFinite(H)?`<c r="${A}"${V}><v>${H}</v></c>`:"":typeof H=="boolean"?`<c r="${A}"${V} t="b"><v>${H?1:0}</v></c>`:`<c r="${A}"${V} t="inlineStr"><is><t xml:space="preserve">${rt(String(H))}</t></is></c>`}).join("");return`<row r="${M+1}">${L}</row>`}).join(""),C=Math.max(0,...h.rows.map(E=>E.length)),y=h.freezeRows??0,S=y?`<sheetViews><sheetView workbookViewId="0"><pane ySplit="${y}" topLeftCell="A${y+1}" activePane="bottomLeft" state="frozen"/></sheetView></sheetViews>`:'<sheetViews><sheetView workbookViewId="0"/></sheetViews>',x=h.widths?.length?`<cols>${h.widths.map((E,M)=>`<col min="${M+1}" max="${M+1}" width="${Math.max(4,Math.min(120,E)).toFixed(1)}" customWidth="1"/>`).join("")}</cols>`:"",g=h.autoFilter&&C&&y&&h.rows.length>=y?`<autoFilter ref="A${y}:${Et(C-1)}${h.rows.length}"/>`:"",k=h.merges?.length?`<mergeCells count="${h.merges.length}">${h.merges.map(E=>`<mergeCell ref="${E}"/>`).join("")}</mergeCells>`:"";return`${we}<worksheet xmlns="${Lt}" xmlns:r="${ve}">${S}<sheetFormatPr defaultRowHeight="15"/>${x}<sheetData>${f}</sheetData>${g}${k}</worksheet>`}),w=`${we}<styleSheet xmlns="${Lt}">`+(t.length?`<numFmts count="${t.length}">${t.map((h,f)=>`<numFmt numFmtId="${164+f}" formatCode="${rt(h)}"/>`).join("")}</numFmts>`:"")+`<fonts count="${o.length}">${o.join("")}</fonts><fills count="${a.length}">${a.join("")}</fills><borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs><cellXfs count="${n.length}">${n.join("")}</cellXfs><cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles></styleSheet>`,m=[{name:"[Content_Types].xml",data:`${we}<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/><Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>`+s.map((h,f)=>`<Override PartName="/xl/worksheets/sheet${f+1}.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>`).join("")+"</Types>"},{name:"_rels/.rels",data:`${we}<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="${ve}/officeDocument" Target="xl/workbook.xml"/></Relationships>`},{name:"xl/workbook.xml",data:`${we}<workbook xmlns="${Lt}" xmlns:r="${ve}"><sheets>`+p.map((h,f)=>`<sheet name="${rt(h)}" sheetId="${f+1}" r:id="rId${f+1}"/>`).join("")+"</sheets>"+(s.some(h=>h.autoFilter&&h.freezeRows)?`<definedNames>${s.map((h,f)=>{let C=Math.max(0,...h.rows.map(y=>y.length));return h.autoFilter&&h.freezeRows&&C?`<definedName name="_xlnm._FilterDatabase" localSheetId="${f}" hidden="1">'${rt(p[f].replace(/'/g,"''"))}'!$A$${h.freezeRows}:$${Et(C-1)}$${h.rows.length}</definedName>`:""}).join("")}</definedNames>`:"")+"</workbook>"},{name:"xl/_rels/workbook.xml.rels",data:`${we}<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">`+s.map((h,f)=>`<Relationship Id="rId${f+1}" Type="${ve}/worksheet" Target="worksheets/sheet${f+1}.xml"/>`).join("")+`<Relationship Id="rId${s.length+1}" Type="${ve}/styles" Target="styles.xml"/></Relationships>`},{name:"xl/styles.xml",data:w},...R.map((h,f)=>({name:`xl/worksheets/sheet${f+1}.xml`,data:h}))];return Mn(m)}var Zr=new Set([14,15,16,17,18,19,20,21,22,27,30,36,45,46,47,50,57]);function Jr(s){let e=s.replace(/"[^"]*"/g,"").replace(/\[[^\]]*\]/g,"").replace(/\\./g,"");return/[dmyhs]/i.test(e)&&!/^[#0.,%\s]*$/.test(e)}function Me(s){return s?new DOMParser().parseFromString(new TextDecoder().decode(s),"application/xml"):null}var ne=(s,e)=>[...s.getElementsByTagNameNS("*",e)];function Qr(s){let e=0;for(let t of s){let n=t.charCodeAt(0);if(n<65||n>90)break;e=e*26+(n-64)}return e-1}async function Dt(s){let e=s instanceof Uint8Array?s:new Uint8Array(s);if(!nt(e))throw new Error("Not an xlsx file");let t=await En(e),n=Me(t.get("xl/workbook.xml"));if(!n)throw new Error("xlsx has no workbook");let r=Me(t.get("xl/_rels/workbook.xml.rels")),o=new Map(r?ne(r,"Relationship").map(p=>[p.getAttribute("Id")??"",p.getAttribute("Target")??""]):[]),i=Me(t.get("xl/sharedStrings.xml")),a=i?ne(i,"si").map(p=>ne(p,"t").map(R=>R.textContent??"").join("")):[],l=Me(t.get("xl/styles.xml")),d=new Map(l?ne(l,"numFmt").map(p=>[Number(p.getAttribute("numFmtId")),p.getAttribute("formatCode")??""]):[]),c=l?ne(l,"cellXfs")[0]:void 0,u=(c?[...c.children].filter(p=>p.localName==="xf"):[]).map(p=>{let R=Number(p.getAttribute("numFmtId")??0);return Zr.has(R)||d.has(R)&&Jr(d.get(R))}),v=[];for(let p of ne(n,"sheet")){let R=p.getAttribute("r:id")??p.getAttributeNS(ve,"id")??"",w=o.get(R)??"";w=w.startsWith("/")?w.slice(1):`xl/${w}`;let m=Me(t.get(w)),h=[];if(m){for(let f of ne(m,"row")){let C=Number(f.getAttribute("r")??h.length+1)-1,y=[],S=0;for(let x of[...f.children].filter(g=>g.localName==="c")){let g=x.getAttribute("r"),k=g?Qr(g):S;S=k+1;let E=x.getAttribute("t"),M=ne(x,"v")[0]?.textContent??null,L=null;if(E==="s")L=M===null?null:a[Number(M)]??"";else if(E==="inlineStr")L=ne(x,"t").map(D=>D.textContent??"").join("");else if(E==="b")L=M==="1";else if(E==="str"||E==="e")L=M;else if(M!==null&&M!==""){let D=Number(M);L=u[Number(x.getAttribute("s")??0)]?jr(D):D}y[k]=L}for(let x=0;x<y.length;x++)y[x]===void 0&&(y[x]=null);h[C]=y}for(let f=0;f<h.length;f++)h[f]||(h[f]=[])}v.push({name:p.getAttribute("name")??`Sheet${v.length+1}`,rows:h})}return v}function Dn(s,e){return Array.isArray(e)?e.flatMap(t=>{let n=s.columns.getNode(t);return!n||n.children||I(t)?($(`export: unknown column "${t}"`),[]):[{id:t,def:n.def,node:n,width:s.columns.getColumn(t)?.width??n.width}]}):s.columns.displayed().filter(t=>!I(t.id)).map(t=>({id:t.id,def:t.def,node:t.node,width:t.width}))}function Tn(s,e){return e==="selected"?s.selectedRows():e==="all"?s.rowModel.server?s.rowModel.dataRows().map(t=>t.data):s.viewRows():s.rowModel.dataRows().map(t=>t.data)}var Tt=(s,e)=>s.header??s.field??e;function $t(s,e={}){let t=Dn(s,e.columns),n=s.store.state.locale.code,r=typeof e.separator=="string"&&e.separator.length===1?e.separator:",",o=Tn(s,e.rows).map(i=>t.map(a=>{let l=N(a.def,i),d=a.def.type;return{value:Ze(a.def,l,n),text:!(d==="number"||d==="date"||d==="boolean")||typeof l=="string"}}));return e.headers!==!1&&o.unshift(t.map(i=>({value:Tt(i.def,i.id),text:!0}))),kn(o,r)}function eo(s){let e=s.format;if(s.type==="date")return e==="datetime"?"yyyy-mm-dd hh:mm":e==="time"?"hh:mm":"yyyy-mm-dd";if(s.type!=="number"||e==null)return null;if(typeof e=="string")return e==="integer"?"#,##0":e==="percent"?"0%":e.startsWith("currency:")?"#,##0.##":/^[#0,.%]+$/.test(e)?e:null;let t=e,n=t.maximumFractionDigits??t.minimumFractionDigits,r=n?`.${"0".repeat(Math.min(10,n))}`:"";return t.style==="percent"?`0${r}%`:`${t.useGrouping===!1?"0":"#,##0"}${r}`}function ot(s){let e=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(s.trim());if(e)return`FF${(e[1].length===3?[...e[1]].map(o=>o+o).join(""):e[1]).toUpperCase()}`;let t=/^rgba?\(\s*(\d+)[\s,]+(\d+)[\s,]+(\d+)(?:[\s,/]+([\d.]+%?))?\s*\)$/i.exec(s.trim());return!t||!((t[4]===void 0?1:t[4].endsWith("%")?parseFloat(t[4])/100:parseFloat(t[4]))>0)?"":`FF${[t[1],t[2],t[3]].map(r=>Math.min(255,Number(r)).toString(16).padStart(2,"0")).join("").toUpperCase()}`}function to(s){let e=s.renderer.root;if(typeof getComputedStyle!="function"||!e.isConnected)return{of:()=>({}),dispose:()=>{}};let t=document.createElement("div");t.className="fg-row",t.style.cssText="position:absolute;left:-9999px;top:0;visibility:hidden;pointer-events:none";let n=document.createElement("div");t.append(n),e.append(t);let r=a=>{n.className=a?`fg-cell ${a}`:"fg-cell";let l=getComputedStyle(n),d=l.fontWeight;return{color:l.color,fill:l.backgroundColor,bold:d==="bold"||Number(d)>=600}},o=r(""),i=new Map;return{of(a){let l=i.get(a);if(!l){let d=r(a);l={},d.color!==o.color&&ot(d.color)&&(l.color=ot(d.color)),d.fill!==o.fill&&ot(d.fill)&&(l.fill=ot(d.fill)),d.bold&&!o.bold&&(l.bold=!0),i.set(a,l)}return l},dispose:()=>t.remove()}}function Pt(s,e={}){let t=Dn(s,e.columns),n=s.store.state.locale.code,r=[],o=[],i=0;if(e.headers!==!1){let m=t.map(f=>{let C=[];for(let y=f.node;y;y=y.parent)C.unshift(y);return C});i=Math.max(1,...m.map(f=>f.length));let h=f=>{let C="";for(let y=f+1;y>0;y=Math.floor((y-1)/26))C=String.fromCharCode(65+(y-1)%26)+C;return C};for(let f=0;f<i;f++){let C=[];for(let y=0;y<t.length;y++){let S=m[y],x=S.length-1;if(f<x){let g=S[f],k=y>0?m[y-1][f]:null;if(C.push({v:k===g?null:Tt(g.def,g.id),header:!0}),k!==g){let E=y;for(;E+1<t.length&&m[E+1][f]===g;)E++;E>y&&o.push(`${h(y)}${f+1}:${h(E)}${f+1}`)}}else f===x?(C.push({v:Tt(t[y].def,t[y].id),header:!0}),i-1>f&&o.push(`${h(y)}${f+1}:${h(y)}${i}`)):C.push({v:null,header:!0})}r.push(C)}}let a=t.map(m=>eo(m.def)),l=t.map(m=>G(m.def,n)),d=Tn(s,e.rows),c=e.styles!==!1,u=c&&t.some(m=>m.def.cellClass)?to(s):null,v=(m,h,f)=>{if(F(f))return null;let C=a[h]??void 0;switch(m.def.type){case"number":{let y=typeof f=="number"?f:Number(f);return Number.isFinite(y)?{v:y,fmt:C}:String(f)}case"date":{let y=Z(f);return y?{v:y,fmt:C}:String(f)}case"boolean":return typeof f=="boolean"?f:String(f);default:return l[h](f)}};try{d.forEach((m,h)=>{r.push(t.map((f,C)=>{let y=N(f.def,m),S=v(f,C,y);if(!c)return S;let x=f.def.align?{align:f.def.align}:{};if(u&&f.def.cellClass){let g;try{g=typeof f.def.cellClass=="function"?f.def.cellClass({value:y,formatted:l[C](y),row:m,rowIndex:h,column:f.def}):f.def.cellClass}catch{g=void 0}g&&(x={...x,...u.of(g)})}return Object.keys(x).length?S!==null&&typeof S=="object"&&!(S instanceof Date)?{...S,...x}:{v:S,...x}:S}))})}finally{u?.dispose()}let p=new Set,R=m=>{let h="";for(let f=m+1;f>0;f=Math.floor((f-1)/26))h=String.fromCharCode(65+(f-1)%26)+h;return h},w=(m,h,f,C)=>{for(let y=m;y<=f;y++)for(let S=h;S<=C;S++)if(p.has(`${y},${S}`))return;for(let y=m;y<=f;y++)for(let S=h;S<=C;S++)p.add(`${y},${S}`);o.push(`${R(h)}${i+m+1}:${R(C)}${i+f+1}`)};return d.forEach((m,h)=>t.forEach((f,C)=>{let y=f.def.colSpan?xe(f.def.colSpan,f.def,m,h,t.length-C):1;y>1&&w(h,C,h,C+y-1)})),t.forEach((m,h)=>{if(!m.def.merge&&!m.def.rowSpan)return;let f=He(d,m.def);for(let C=0;C<d.length;C++)f.start[C]===C&&f.end[C]>C&&w(C,h,f.end[C],h)}),It([{name:e.sheetName??"Sheet1",rows:r,widths:t.map(m=>Math.round(m.width/7)),merges:o,freezeRows:i,autoFilter:i>0}])}function At(s,e,t){if(typeof URL>"u"||typeof URL.createObjectURL!="function"||typeof document>"u"){$("downloads are not supported in this environment");return}let n=URL.createObjectURL(new Blob(e,{type:t})),r=document.createElement("a");r.href=n,r.download=s,r.style.display="none",document.body.append(r),r.click(),r.remove(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}var st=s=>String(s??"").trim().toLowerCase();function no(s){return s==null?"":s instanceof Date?s.getHours()||s.getMinutes()||s.getSeconds()?s.toISOString():_(s)??"":String(s)}async function $n(s,e,t={}){let n=e instanceof Uint8Array?e:new Uint8Array(e instanceof ArrayBuffer?e:await e.arrayBuffer()),r;if(nt(n)){let w=await Dt(n),m=typeof t.sheet=="string"?w.find(h=>h.name===t.sheet):w[typeof t.sheet=="number"?t.sheet:0];if(!m)throw new Error(`Sheet ${String(t.sheet)} not found`);r=m.rows}else{let w=new TextDecoder().decode(n);r=Mt(w,St(w))}if(!r.length)return{rows:[],skipped:0};let o=[],i=w=>w.forEach(m=>m.children?i(m.children):!I(m.id)&&m.def.field&&o.push(m));i(s.columns.roots());let a=w=>{let m=st(w);return m?o.find(h=>st(h.def.header)===m)??o.find(h=>st(h.def.field)===m||st(h.id)===m)??null:null},l=1,d=new Set(r[0].map(a).filter(Boolean));for(;l<Math.min(r.length,5);){let m=(r[l]??[]).filter(f=>f!=null&&String(f).trim()!==""),h=m.map(a).filter(f=>f&&!d.has(f));if(!m.length||!m.every(f=>typeof f=="string")||!h.length)break;h.forEach(f=>d.add(f)),l++}let c=Math.max(...r.slice(0,l).map(w=>w?.length??0)),u=Array.from({length:c},(w,m)=>{for(let h=l-1;h>=0;h--){let f=r[h]?.[m];if(f!=null&&String(f).trim()!=="")return a(f)}return null}),v=s.store.state.data[0],p=0,R=[];for(let w of r.slice(l)){if(!w||w.every(h=>h==null||String(h).trim()===""))continue;let m={};u.forEach((h,f)=>{if(!h)return;let C=h.def,y=no(w[f]),S=s.acceptText(C,m,y,v?.[C.field]);S.ok?y===""&&(S.value===null||S.value==="")||(m[C.field]=S.value):p++}),R.push(m)}return t.mode==="replace"?s.setData(R):s.addRows(R),{rows:R,skipped:p}}var ro="http://www.w3.org/2000/svg";var Ft=["var(--fg-accent, #2563eb)","#f59e0b","#10b981","#ef4444","#8b5cf6","#06b6d4","#ec4899","#84cc16","#f97316","#64748b","#14b8a6","#a855f7"],ye=s=>Ft[s%Ft.length];function K(s,e={},t=""){let n=document.createElementNS(ro,s);t&&n.setAttribute("class",t);for(let[r,o]of Object.entries(e))n.setAttribute(r,String(o));return n}function Nt(s,e){let t=K("title");t.textContent=e,s.append(t)}function oo(s,e,t=5){let n=Math.min(0,s),r=Math.max(0,e);n===r&&(r=n+1);let o=(r-n)/t,i=10**Math.floor(Math.log10(o)),a=[1,2,5,10].map(d=>d*i).find(d=>d>=o);n=Math.floor(n/a)*a,r=Math.ceil(r/a)*a;let l=[];for(let d=n;d<=r+a/2;d+=a)l.push(Math.round(d/a)*a);return l}function Ht(s,e){let t=new Intl.NumberFormat(e.locale,{maximumFractionDigits:2}),n=new Intl.NumberFormat(e.locale,{notation:"compact",maximumFractionDigits:1}),r=K("svg",{viewBox:"0 0 640 360",role:"img",preserveAspectRatio:"xMidYMid meet"},`fg-chart fg-chart-is-${e.type}`);e.title&&r.setAttribute("aria-label",e.title);let o=e.series.slice(0,Ft.length),i=e.categories,a=16;if(e.title){let E=K("text",{x:320,y:22,"text-anchor":"middle"},"fg-chart-title");E.textContent=e.title,r.append(E),a=36}let l=K("g",{},"fg-chart-legend"),d=e.type==="pie"?i:o.map(E=>E.name),c=16;d.forEach((E,M)=>{let L=K("g",{transform:`translate(${c},350)`},"fg-chart-legend-item");L.append(K("rect",{x:0,y:-9,width:10,height:10,rx:2,fill:ye(M)}));let D=K("text",{x:14,y:0});D.textContent=E,L.append(D),l.append(L),c+=24+Math.min(140,E.length*7)});let u=308;if(e.type==="pie"){let E=(o[0]?.values??[]).map(A=>A!==null&&A>0?A:0),M=E.reduce((A,H)=>A+H,0),L=640/2,D=(a+u)/2,P=Math.max(10,(u-a)/2-6),T=-Math.PI/2;E.forEach((A,H)=>{if(!A||!M)return;let B=T+A/M*Math.PI*2,O=B-T>Math.PI?1:0,V=Q=>`${L+P*Math.cos(Q)},${D+P*Math.sin(Q)}`,J=A===M?`M${L-P},${D}a${P},${P} 0 1,0 ${2*P},0a${P},${P} 0 1,0 ${-2*P},0`:`M${L},${D}L${V(T)}A${P},${P} 0 ${O} 1 ${V(B)}Z`,q=K("path",{d:J,fill:ye(H)},"fg-chart-slice");Nt(q,`${i[H]}: ${t.format(A)} (${Math.round(A/M*1e3)/10}%)`),r.append(q),T=B}),r.append(l),s.replaceChildren(r);return}let v=e.type==="stackedBar",p=0,R=0;i.forEach((E,M)=>{let L=0,D=0;for(let P of o){let T=P.values[M];T==null||!Number.isFinite(T)||(v?T>=0?L+=T:D+=T:(R=Math.max(R,T),p=Math.min(p,T)))}v&&(R=Math.max(R,L),p=Math.min(p,D))});let w=oo(p,R),m=w[0],h=w[w.length-1],f=56,C=624,y=E=>u-(E-m)/(h-m)*(u-a),S=K("g",{},"fg-chart-axis");for(let E of w){S.append(K("line",{x1:f,x2:C,y1:y(E),y2:y(E)},E===0?"fg-chart-zero":"fg-chart-grid"));let M=K("text",{x:f-6,y:y(E)+4,"text-anchor":"end"});M.textContent=n.format(E),S.append(M)}let x=(C-f)/Math.max(1,i.length),g=Math.max(1,Math.ceil(i.length/Math.floor((C-f)/56)));i.forEach((E,M)=>{if(M%g)return;let L=K("text",{x:f+x*(M+.5),y:u+16,"text-anchor":"middle"});L.textContent=E.length>12?`${E.slice(0,11)}\u2026`:E,S.append(L)}),r.append(S);let k=K("g",{},"fg-chart-plot");if(e.type==="bar"||v){let E=x*.72,M=v?E:E/Math.max(1,o.length);i.forEach((L,D)=>{let P=0,T=0;o.forEach((A,H)=>{let B=A.values[D];if(B==null||!Number.isFinite(B))return;let O=0,V=B;v&&(O=B>=0?P:T,V=O+B,B>=0?P=V:T=V);let J=f+x*D+(x-E)/2+(v?0:M*H),q=K("rect",{x:J,y:Math.min(y(O),y(V)),width:Math.max(1,M-2),height:Math.max(.5,Math.abs(y(V)-y(O))),fill:ye(H),rx:2},"fg-chart-bar");Nt(q,`${A.name} \xB7 ${L}: ${t.format(B)}`),k.append(q)})})}else o.forEach((E,M)=>{let L=E.values.map((T,A)=>T==null||!Number.isFinite(T)?null:[f+x*(A+.5),y(T),T]),D="",P=!1;for(let T of L){if(!T){P=!1;continue}D+=`${P?"L":"M"}${T[0]},${T[1]}`,P=!0}if(e.type==="area"){let T=L.filter(A=>!!A);if(T.length){let A=`M${T[0][0]},${y(0)}${T.map(H=>`L${H[0]},${H[1]}`).join("")}L${T[T.length-1][0]},${y(0)}Z`;k.append(K("path",{d:A,fill:ye(M),"fill-opacity":.18},"fg-chart-area"))}}k.append(K("path",{d:D,fill:"none",stroke:ye(M),"stroke-width":2.2,"stroke-linejoin":"round"},"fg-chart-line")),L.forEach((T,A)=>{if(!T)return;let H=K("circle",{cx:T[0],cy:T[1],r:3.5,fill:ye(M)},"fg-chart-point");Nt(H,`${E.name} \xB7 ${i[A]}: ${t.format(T[2])}`),k.append(H)})});r.append(k,l),s.replaceChildren(r)}var so=12,Pn=500,Bt=["bar","stackedBar","line","area","pie"],it=class{constructor(e){this.grid=e;this.handles=new Set}create(e={}){let{grid:t}=this,n=Bt.includes(e.type)?e.type:"bar",r=()=>t.store.state.locale,o=e.range??t.store.state.range,i=null;if(o){let w=t.columns.getColumn(o.start.colId),m=t.columns.getColumn(o.end.colId);if(w&&m){let h=Se({start:{rowIndex:o.start.rowIndex,colIndex:w.index},end:{rowIndex:o.end.rowIndex,colIndex:m.index}}),f=[];for(let C=h.r1;C<=h.r2&&f.length<Pn;C++){let y=t.rowModel.getRow(C);y&&!y.kind&&f.push(y.data)}i={rows:f,colIds:t.columns.displayed().slice(h.c1,h.c2+1).filter(C=>!I(C.id)).map(C=>C.id)}}}let a=()=>{let w=i?i.rows:t.rowModel.dataRows().slice(0,Pn).map(x=>x.data),m=(i?i.colIds.map(x=>t.columns.getColumn(x)):t.columns.displayed().filter(x=>!I(x.id))).filter(x=>!!x),h=m[0]&&m[0].def.type!=="number"?m[0]:i?null:m.find(x=>x.def.type!=="number")??null,f=x=>!!x.node.parent&&x.node.parent.id==="pivotgroup|total",C=m.filter(x=>x!==h&&x.def.type==="number"&&(i||!f(x))).slice(0,so),y=x=>{let g=[];for(let k=x.node.parent;k;k=k.parent)g.unshift(k.def.header??k.id);return g.push(x.def.header??x.def.field??x.id),g.join(" \xB7 ")},S=h?G(h.def,r().code):null;return{categories:w.map((x,g)=>h&&S?S(N(h.def,x)):String(g+1)),series:C.map(x=>({name:y(x),values:w.map(g=>{let k=N(x.def,g),E=typeof k=="number"?k:k==null||k===""?NaN:Number(k);return Number.isFinite(E)?E:null})}))}},l=b("div","fg-chart-body"),d=null,c=()=>Ht(l,{type:n,title:e.title,locale:r().code,...a()}),u=w=>({bar:r().chartBar,stackedBar:r().chartStacked,line:r().chartLine,area:r().chartArea,pie:r().chartPie})[w],v=()=>d?.querySelectorAll(".fg-chart-type").forEach(w=>w.setAttribute("aria-pressed",String(w.dataset.type===n)));if(e.container)e.container.append(l);else{d=b("div","fg-chart-panel",{role:"dialog","aria-label":e.title??u(n)});let w=b("div","fg-chart-head");for(let h of Bt){let f=b("button","fg-chart-type",{type:"button",title:u(h)});f.dataset.type=h,f.textContent=u(h),f.addEventListener("click",()=>R.setType(h)),w.append(f)}let m=b("button","fg-chooser-close",{type:"button","aria-label":r().close});m.textContent="\xD7",m.addEventListener("click",()=>R.destroy()),w.append(b("span","fg-chart-spacer"),m),d.append(w,l),t.renderer.root.append(d)}let p=[t.events.on("cellValueChanged",()=>c()),t.events.on("rowsAdded",()=>c()),t.events.on("rowsRemoved",()=>c())];i||p.push(t.events.on("sortChange",()=>c()),t.events.on("filterChange",()=>c()));let R={el:l,setType:w=>{Bt.includes(w)&&(n=w,v(),c())},update:()=>c(),destroy:()=>{p.forEach(w=>w()),(d??l).remove(),this.handles.delete(R)}};return this.handles.add(R),v(),c(),R}destroy(){for(let e of[...this.handles])e.destroy()}};function An(s,e,t){return typeof s=="number"&&typeof e=="number"?s-e:s instanceof Date&&e instanceof Date?s.getTime()-e.getTime():typeof s=="boolean"&&typeof e=="boolean"?Number(s)-Number(e):t.compare(String(s),String(e))}function io(s,e){if(F(e))return null;if(s.type==="number"){let t=typeof e=="number"?e:Number(e);return Number.isNaN(t)?null:t}return s.type==="date"?Z(e)?.getTime()??null:e}function ce(s,e,t){let n=F(s),r=F(e);return n||r?n===r?0:n?1:-1:An(s,e,t)}function Nn(s,e,t,n){let r=e.map(a=>({def:t(a.colId),mul:a.dir==="desc"?-1:1})).filter(a=>!!a.def);if(!r.length)return s;let o=r.map(a=>s.map(l=>{let d=N(a.def,l.data);return a.def.comparator?d:io(a.def,d)})),i=s.map((a,l)=>l);return i.sort((a,l)=>{for(let d=0;d<r.length;d++){let{def:c,mul:u}=r[d],v=o[d][a],p=o[d][l],R;if(c.comparator)try{R=(Number(c.comparator(v,p,s[a].data,s[l].data))||0)*u}catch{$(`comparator of column "${c.id??c.field}" threw; treating values as equal`),R=0}else{let w=F(v),m=F(p);R=w||m?w===m?0:w?1:-1:An(v,p,n)*u}if(R)return R}return a-l}),i.map(a=>s[a])}var Fn=new WeakMap,ao=s=>typeof s=="function"?"custom":s;function Ot(s,e){return{rows:(s.rows??[]).filter(e),columns:(s.columns??[]).filter(e),values:(s.values??[]).filter(t=>t&&e(t.colId)).map(t=>({colId:t.colId,aggFunc:t.aggFunc??"sum"})),totals:s.totals!==!1}}function Hn(s,e,t,n,r){let o=Ot(e,C=>!!t(C)),i=new Intl.Collator(r,{numeric:!0,sensitivity:"base"}),a=C=>t(C),l=(C,y)=>C.map(S=>W(N(a(S),y))).join(""),d=new Map;for(let C of s){let y=l(o.columns,C);d.has(y)||d.set(y,o.columns.map(S=>N(a(S),C)))}let c=[...d.entries()].sort((C,y)=>{for(let S=0;S<o.columns.length;S++){let x=ce(C[1][S],y[1][S],i);if(x)return x}return 0});o.columns.length||c.splice(0,c.length,["",[]]);let u=[],v=(C,y,S)=>{let x=o.values[y],g=a(x.colId),k=`pivot|${S}|${y}`;u.push({id:k,comboKey:C,valueIndex:y});let E=L=>C===null||l(o.columns,L)===C,M=x.aggFunc;return{id:k,field:k,header:`${g.header??g.field??x.colId} (${n.agg(ao(M))})`,type:"number",format:M==="count"?"integer":g.format,width:130,aggFunc:(L,D)=>{let P=D.flatMap(T=>Fn.get(T)??[]).filter(E);return P.length?pe(M,P.map(T=>N(g,T)),P):null}}},p=[],R=(C,y)=>{if(F(y))return n.blank;let S=a(C);return S.type==="number"&&!S.format?String(y):G(S,r)(y)};if(!o.columns.length)o.values.forEach((C,y)=>p.push(v("",y,0)));else{let C=(y,S,x)=>{let g=[],k=0;for(;k<y.length;){let E=y[k][1][S],M=W(E),L=k;for(;L<y.length&&W(y[L][1][S])===M;)L++;let D=y.slice(k,L),P=S===o.columns.length-1?o.values.map((T,A)=>v(D[0][0],A,x+k)):C(D,S+1,x+k);g.push({id:`pivotgroup|${S}|${x+k}`,header:R(o.columns[S],E),children:P}),k=L}return g};p.push(...C(c,0,0)),o.totals&&o.values.length&&p.push({id:"pivotgroup|total",header:n.total,children:o.values.map((y,S)=>v(null,S,"total"))})}let w=new Map;for(let C of s){let y=l(o.rows,C),S=w.get(y);S||w.set(y,S={values:o.rows.map(x=>N(a(x),C)),src:[]}),S.src.push(C)}let h=[...w.values()].sort((C,y)=>{for(let S=0;S<o.rows.length;S++){let x=ce(C.values[S],y.values[S],i);if(x)return x}return 0}).map(C=>{let y={};o.rows.forEach((x,g)=>{y[a(x).field??x]=C.values[g]});let S=new Map;if(o.columns.length)for(let x of C.src){let g=l(o.columns,x),k=S.get(g);k||S.set(g,k=[]),k.push(x)}for(let x of u){let g=o.values[x.valueIndex],k=x.comboKey===null||!o.columns.length?C.src:S.get(x.comboKey)??[],E=a(g.colId);y[x.id]=k.length?pe(g.aggFunc,k.map(M=>N(E,M)),k):null}return Fn.set(y,C.src),y});return{columns:[...o.rows.map(C=>{let y=a(C);return{id:C,field:y.field??C,header:y.header??y.field??C,type:y.type,format:y.format,width:y.width??140}}),...p],rows:h,groupBy:o.rows.slice(0,-1)}}var at="0.8.0";var lo={kty:"EC",crv:"P-256",x:"sUTKkglZmk-HMKPNub8p7AeLBKesHCU8irIkw9rJlbE",y:"j0U_aKRDR7iApY9UpaD3hUemhBLZJwDv9-QiT_hUyw8"},zt="https://freegrid.app/pricing/",Bn="https://freegrid.app/api/usage",co="https://freegrid.app/api/domain-status",On=s=>{let e=atob(s.replace(/-/g,"+").replace(/_/g,"/")+"=".repeat((4-s.length%4)%4));return Uint8Array.from(e,t=>t.charCodeAt(0))};function Vt(s){let e=s.toLowerCase().replace(/^\[|\]$/g,"");return!e||e==="localhost"||e==="127.0.0.1"||e==="::1"||e==="0.0.0.0"||e.endsWith(".localhost")||e.endsWith(".test")||e.endsWith(".local")||/^(10|192\.168|172\.(1[6-9]|2\d|3[01]))\./.test(e)}function uo(s,e){let t=s.toLowerCase().replace(/\.$/,"");return e.some(n=>{let r=n.toLowerCase().replace(/^\*\./,"").replace(/\.$/,"");return!!r&&(t===r||t.endsWith(`.${r}`))})}var ho=s=>`${s.getFullYear()}-${String(s.getMonth()+1).padStart(2,"0")}-${String(s.getDate()).padStart(2,"0")}`;async function Un(s,e,t={}){let n=typeof s=="string"?s.trim().split("."):[];if(n.length!==3||n[0]!=="FG1")return{ok:!1,reason:"format"};let r;try{if(r=JSON.parse(new TextDecoder().decode(On(n[1]))),!Array.isArray(r.domains)||typeof r.expires!="string")return{ok:!1,reason:"format"}}catch{return{ok:!1,reason:"format"}}let o=typeof crypto<"u"?crypto.subtle:void 0;if(!o)return{ok:!1,reason:"unsupported",info:r};try{let i=await o.importKey("jwk",t.publicKey??lo,{name:"ECDSA",namedCurve:"P-256"},!1,["verify"]),a=new TextEncoder().encode(`${n[0]}.${n[1]}`);if(!await o.verify({name:"ECDSA",hash:"SHA-256"},i,On(n[2]),a))return{ok:!1,reason:"signature",info:r}}catch{return{ok:!1,reason:"signature",info:r}}return ho(t.now??new Date)>r.expires?{ok:!1,reason:"expired",info:r}:uo(e,r.domains)?{ok:!0,info:r}:{ok:!1,reason:"domain",info:r}}var Gt,zn=new Map,Ee=null;function fo(s){Gt=s}var Gn={missing:`FreeGrid is free for personal use. Company use needs a domain license (\u20A9200,000 per domain per year): ${zt}
|
|
7
|
+
FreeGrid\uB294 \uAC1C\uC778\uC5D0\uAC8C \uBB34\uB8CC\uC785\uB2C8\uB2E4. \uD68C\uC0AC\uC5D0\uC11C \uC4F0\uB824\uBA74 \uB3C4\uBA54\uC778 \uB77C\uC774\uC120\uC2A4(\uB3C4\uBA54\uC778\uB2F9 \uC5F0 20\uB9CC \uC6D0)\uAC00 \uD544\uC694\uD569\uB2C8\uB2E4: ${zt}`,format:"FreeGrid: the license key is not in the right format. / \uB77C\uC774\uC120\uC2A4 \uD0A4 \uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.",signature:"FreeGrid: the license key could not be verified. / \uB77C\uC774\uC120\uC2A4 \uD0A4\uB97C \uD655\uC778\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.",expired:"FreeGrid: the license key has expired. / \uB77C\uC774\uC120\uC2A4 \uAE30\uAC04\uC774 \uB05D\uB0AC\uC2B5\uB2C8\uB2E4.",domain:"FreeGrid: the license key is for a different domain. / \uB2E4\uB978 \uB3C4\uBA54\uC778\uC6A9 \uB77C\uC774\uC120\uC2A4 \uD0A4\uC785\uB2C8\uB2E4."};function Vn(s,e=typeof location<"u"?location.hostname:""){try{if(Vt(e)||typeof navigator>"u")return;let t=new Date().toISOString().slice(0,10),n=`${e}|${t}|${s.licensed?1:0}`,r=typeof localStorage<"u"?localStorage:null;if(r?.getItem("freegrid:usage")===n)return;r?.setItem("freegrid:usage",n);let o=JSON.stringify({version:s.version,licensed:s.licensed,company:s.company,url:`${location.origin}${location.pathname}`});typeof navigator.sendBeacon=="function"?navigator.sendBeacon(Bn,o):typeof fetch=="function"&&fetch(Bn,{method:"POST",body:o,mode:"no-cors",keepalive:!0}).catch(()=>{})}catch{}}function po(s=Gt,e=typeof location<"u"?location.hostname:""){if(Vt(e))return Promise.resolve(!0);let t=s??Gt,n=`${t??""}@${e}`,r=zn.get(n);return r||(t?r=Un(t,e).then(o=>{if(Vn({version:at,licensed:o.ok,company:o.ok?o.info.company:void 0},e),o.ok||o.reason==="unsupported")return o.ok||o.reason==="unsupported";let i=o.info?` (${o.info.domains.join(", ")}, ${o.info.expires})`:"";return console.warn(`${Gn[o.reason]}${i}
|
|
8
|
+
${zt}`),!1},()=>!1):(console.info(Gn.missing),Vn({version:at,licensed:!1},e),r=Promise.resolve(!1)),zn.set(n,r),r)}function go(s=typeof location<"u"?location.hostname:""){if(Vt(s)||typeof fetch!="function")return Promise.resolve(!1);if(Ee)return Ee;let e=new Date().toISOString().slice(0,10),t=null;try{t=typeof localStorage<"u"?localStorage:null;let n=JSON.parse(t?.getItem("freegrid:badge")??"null");if(n&&n.host===s&&n.day===e)return Ee=Promise.resolve(n.show)}catch{}return Ee=fetch(co,{mode:"cors",credentials:"omit"}).then(n=>n.ok?n.json():{badge:!1}).then(n=>{let r=n.badge===!0;try{t?.setItem("freegrid:badge",JSON.stringify({host:s,day:e,show:r}))}catch{}return r},()=>!1),Ee}async function qn(s,e=typeof location<"u"?location.hostname:""){return await po(s,e)?!1:go(e)}var Kn={text:["contains","equals","notEquals","startsWith","endsWith","blank","notBlank"],number:["eq","ne","lt","lte","gt","gte","between","blank","notBlank"],date:["equals","before","after","between","blank","notBlank"]},_n=["blank","notBlank"],Ut=500,lt=class{constructor(e){this.grid=e;this.popup=null;this.colId=null;this.off=[]}get openColumn(){return this.colId}toggle(e,t){this.colId===e?this.close():this.open(e,t)}open(e,t){this.close();let n=this.grid.columns.getNode(e);if(!n||n.children||I(e))return;let r=this.grid.store.state.locale,o=n.def,i=b("div",`fg-menu fg-theme-${this.grid.store.state.theme}`,{role:"dialog","aria-label":r.columnMenu});this.grid.applyFontTo(i),le(o)&&i.append(this.section([[r.sortAsc,()=>this.grid.setSort([{colId:e,dir:"asc"}])],[r.sortDesc,()=>this.grid.setSort([{colId:e,dir:"desc"}])],[r.clearSort,()=>this.grid.setSort(this.grid.store.state.sort.filter(w=>w.colId!==e))]])),i.append(this.section([[r.pinLeft,()=>this.grid.setPinned(e,"left")],[r.pinRight,()=>this.grid.setPinned(e,"right")],[r.unpin,()=>this.grid.setPinned(e,null)]]));let a=this.grid.getGroupBy();if(!this.grid.options.treeData&&(this.grid.options.groupPanel||a.length)){let w=a.includes(e)?[[r.ungroup,()=>this.grid.setGroupBy(a.filter(m=>m!==e))]]:[[r.groupByThis,()=>this.grid.setGroupBy([...a,e])]];a.length&&w.push([r.expandAll,()=>this.grid.expandAll(!0)],[r.collapseAll,()=>this.grid.expandAll(!1)]),i.append(this.section(w))}let l=[[r.autosizeThis,()=>this.grid.autoSize([e])],[r.autosizeAll,()=>this.grid.autoSize()]];o.lockVisible||l.push([r.hideColumn,()=>this.grid.setColumnsVisible([e],!1)]),l.push([r.chooseColumns,()=>this.grid.chooser.open()],[r.resetColumns,()=>this.grid.resetColumns()]),i.append(this.section(l));let d=this.filterSection(e,()=>this.close());d&&i.append(d),se(this.grid.renderer.root).append(i);let c=t.getBoundingClientRect(),u=i.offsetWidth||248;i.style.left=`${Math.max(4,Math.min(c.right-u,window.innerWidth-u-4))}px`;let v=Math.max(4,Math.min(c.bottom+4,window.innerHeight-240));i.style.top=`${v}px`,i.style.maxHeight=`${Math.max(160,window.innerHeight-v-8)}px`,this.popup=i,this.colId=e;let p=w=>{me(w,i,t)||this.close()},R=w=>{w.key==="Escape"&&(this.close(),this.grid.renderer.gridEl.focus())};document.addEventListener("pointerdown",p,!0),document.addEventListener("keydown",R,!0),this.off.push(()=>document.removeEventListener("pointerdown",p,!0),()=>document.removeEventListener("keydown",R,!0)),i.querySelector(".fg-filter-value:not([hidden]), .fg-set-search, .fg-menu-item")?.focus()}filterSection(e,t){let n=this.grid.columns.getNode(e);if(!n||n.children)return null;let r=this.grid.store.state.locale,o=he(n.def);return o==="set"?this.setFilter(e,r,t):o?this.conditionFilter(e,o,r,t):null}close(){for(let e of this.off)e();this.off=[],this.popup?.remove(),this.popup=null,this.colId=null}section(e){let t=b("div","fg-menu-section");for(let[n,r]of e){let o=b("button","fg-menu-item",{type:"button"});o.textContent=n,o.addEventListener("click",()=>{r(),this.close()}),t.append(o)}return t}actions(e,t,n,r){let o=b("div","fg-menu-actions"),i=b("button","fg-btn",{type:"button"});i.textContent=t.reset,i.addEventListener("click",()=>{this.grid.setFilter(e,null),r()});let a=b("button","fg-btn fg-btn-primary",{type:"button"});return a.textContent=t.apply,a.addEventListener("click",n),o.append(i,a),o}title(e){let t=b("div","fg-menu-title");return t.textContent=e.filter,t}conditionFilter(e,t,n,r){let o=this.grid.store.state.filters[e],i=o&&o.type===t?o:void 0,a=b("div","fg-menu-section fg-filter"),l=b("select","fg-filter-op",{"aria-label":n.filter});for(let R of Kn[t]){let w=b("option");w.value=R,w.textContent=n.ops[R],l.append(w)}l.value=i?.op??Kn[t][0];let d=t==="text"?"text":t,c=b("input","fg-input fg-filter-value",{type:d,placeholder:n.value,"aria-label":n.value}),u=b("input","fg-input fg-filter-value-to",{type:d,placeholder:n.valueTo,"aria-label":n.valueTo});i&&(c.value=i.value!=null?String(i.value):"",u.value="valueTo"in i&&i.valueTo!=null?String(i.valueTo):"");let v=()=>{c.hidden=_n.includes(l.value),u.hidden=l.value!=="between"};l.addEventListener("change",v),v();let p=()=>{let R=l.value,w=!_n.includes(R),m=null;if(t==="number"){let h=c.value===""?void 0:Number(c.value),f=u.value===""?void 0:Number(u.value);(!w||h!==void 0)&&(m={type:t,op:R,value:h,valueTo:f})}else t==="date"?(!w||c.value)&&(m={type:t,op:R,value:c.value||void 0,valueTo:u.value||void 0}):(!w||c.value)&&(m={type:t,op:R,value:c.value});this.grid.setFilter(e,m),r()};for(let R of[c,u])R.addEventListener("keydown",w=>w.key==="Enter"&&p());return a.append(this.title(n),l,c,u,this.actions(e,n,p,r)),a}setFilter(e,t,n){let{grid:r}=this,o=r.columns.getNode(e).def,i=G(o,t.code),a=r.collator(),l=new Map;for(let x of r.rowModel.allNodes()){let g=N(o,x.data),k=W(g);l.has(k)||l.set(k,g)}let d=[...l.entries()].sort((x,g)=>ce(x[1],g[1],a)),c=r.store.state.filters[e],u=new Set(c?.type==="set"?c.values.map(W).filter(x=>l.has(x)):l.keys()),v=(x,g)=>x===""?t.blanks:i(g),p=b("div","fg-menu-section fg-filter fg-set-filter"),R=b("input","fg-input fg-set-search",{type:"search",placeholder:t.search,"aria-label":t.search}),w=b("label","fg-set-item fg-set-all"),m=b("input","fg-checkbox",{type:"checkbox"});w.append(m,document.createTextNode(t.selectAll));let h=b("div","fg-set-list"),f=()=>{let x=R.value.trim().toLowerCase();return x?d.filter(([g,k])=>v(g,k).toLowerCase().includes(x)):d},C=()=>{let x=f(),g=x.filter(([k])=>u.has(k)).length;m.checked=g>0&&g===x.length,m.indeterminate=g>0&&g<x.length},y=()=>{let x=f();if(h.replaceChildren(...x.slice(0,Ut).map(([g,k])=>{let E=b("label","fg-set-item"),M=b("input","fg-checkbox",{type:"checkbox"});return M.checked=u.has(g),M.addEventListener("change",()=>{M.checked?u.add(g):u.delete(g),C()}),E.append(M,document.createTextNode(v(g,k))),E})),x.length>Ut){let g=b("div","fg-set-more");g.textContent=`\u2026 +${x.length-Ut}`,h.append(g)}C()};m.addEventListener("change",()=>{for(let[x]of f())m.checked?u.add(x):u.delete(x);y()}),R.addEventListener("input",y);let S=()=>{r.setFilter(e,u.size===l.size?null:{type:"set",values:d.filter(([x])=>u.has(x)).map(([,x])=>x)}),n()};return R.addEventListener("keydown",x=>x.key==="Enter"&&S()),y(),p.append(this.title(t),R,w,h,this.actions(e,t,S,n)),p}};var Wn=new WeakMap,mo=0;function Le(s){let e=Wn.get(s);return e||Wn.set(s,e=`r${++mo}`),e}var dt=class{constructor(e){this.deps=e;this.stats={filterRuns:0,sortRuns:0};this.server=!1;this.full=[];this.last={};this.nodes=[];this.filtered=[];this.sorted=[];this.display=[];this.indexById=null;this.layoutCache=null}update(e){let t=this.deps.collator(),n=e.display,r=!!n?.getParentId!=!!this.last.display?.getParentId,o=e.data!==this.last.data,i=o||r||e.filters!==this.last.filters||e.quickFilter!==this.last.quickFilter,a=i||e.sort!==this.last.sort||t!==this.last.collator,l=a||n?.version!==this.last.displayVersion||n?.groupBy!==this.last.display?.groupBy;if(o){let u=this.deps.getRowId;this.nodes=e.data.map((v,p)=>({id:u?String(u(v)):Le(v),data:v,sourceIndex:p}))}i&&(this.filtered=this.filter(e),this.stats.filterRuns++),a&&(this.sorted=Nn(this.filtered,e.sort,u=>this.deps.columnDef(u),t),this.stats.sortRuns++),l&&(this.full=n?this.buildDisplay(n,e.sort,t):this.sorted);let d=e.page??null,c=this.last.page??null;(l||d?.index!==c?.index||d?.size!==c?.size)&&(this.display=d?this.full.slice(d.index*d.size,(d.index+1)*d.size):this.full,this.indexById=null,this.layoutCache=null),this.last={...e,collator:t,displayVersion:n?.version}}invalidate(){this.last={}}fullCount(){return this.full.length}dataCount(){return this.sorted.length}loading(){return!1}getRowCount(){return this.display.length}getRow(e){return this.display[e]}rows(){return this.display}dataRows(){return this.sorted}allNodes(){return this.nodes}idOf(e){return this.deps.getRowId?String(this.deps.getRowId(e)):Le(e)}indexOfId(e){return this.indexById||(this.indexById=new Map(this.display.map((t,n)=>[t.id,n]))),this.indexById.get(e)??-1}layout(e,t,n,r=0){let o=this.layoutCache;if(o&&o.rows===this.display&&o.rh===e&&o.dh===t&&o.hv===r)return o;let i=this.display.length,a=new Float64Array(i+1),l=!0,d=n&&n.size?n:null;for(let c=0;c<i;c++){let u=this.display[c],v=e;u.kind==="detail"?v=t:d&&!u.kind&&(v=d.get(u.id)??e),v!==e&&(l=!1),a[c+1]=a[c]+v}return this.layoutCache={rows:this.display,rh:e,dh:t,hv:r,offsets:a,uniform:l},this.layoutCache}filter(e){let t=Object.entries(e.filters).map(([d,c])=>({def:this.deps.columnDef(d),pred:on(c)})).filter(d=>!!d.def),n=sn(e.quickFilter),r=n.length?this.deps.quickColumns():[];if(!t.length&&!n.length)return this.nodes;let o=this.nodes.filter(d=>{for(let c of t)if(!c.pred(N(c.def,d.data)))return!1;if(n.length){let c=r.map(u=>this.deps.format(u,N(u,d.data))).join("").toLowerCase();if(!an(n,c))return!1}return!0}),i=e.display?.getParentId;if(!i)return o;let a=new Map(this.nodes.map(d=>[d.id,d])),l=new Set(o);for(let d of o){let c=i(d.data),u=new Set;for(;c!=null&&!u.has(c);){u.add(c);let v=a.get(String(c));if(!v)break;l.add(v),c=i(v.data)}}return this.nodes.filter(d=>l.has(d))}isOpen(e,t,n){let r=e.expanded.get(t);return r!==void 0?r:e.defaultExpanded===-1||n<e.defaultExpanded}withDetails(e,t,n){for(let r of t)n.push(r),e.detailOpen.has(r.id)&&(!e.isMaster||e.isMaster(r.data))&&n.push({id:`detail:${r.id}`,data:{},sourceIndex:-1,kind:"detail",detailOf:r})}buildDisplay(e,t,n){let r=[];if(e.getParentId)return this.buildTree(e,r),r;let o=e.groupBy.filter(a=>this.deps.columnDef(a));if(!o.length)return e.detailOpen.size?(this.withDetails(e,this.sorted,r),r):this.sorted;let i=(a,l,d)=>{let c=o[l],u=this.deps.columnDef(c),v=new Map;for(let w of a){let m=N(u,w.data),h=F(m)?"":W(m),f=v.get(h);f||v.set(h,f={value:m,nodes:[]}),f.nodes.push(w)}let p=t.find(w=>w.colId===c)?.dir==="desc"?-1:1,R=[...v.entries()].sort((w,m)=>ce(w[1].value,m[1].value,n)*p);for(let[w,m]of R){let h=`${d}${c}:${w}`,f=this.isOpen(e,h,l);r.push({id:`group:${h}`,data:{},sourceIndex:-1,kind:"group",level:l,group:{key:h,colId:c,value:m.value,rows:m.nodes.map(C=>C.data),expanded:f}}),f&&(l+1<o.length?i(m.nodes,l+1,`${h}|`):this.withDetails(e,m.nodes.map(C=>({...C,level:l+1})),r))}};return i(this.sorted,0,""),r}buildTree(e,t){let n=new Set(this.sorted.map(a=>a.id)),r=new Map,o=[];for(let a of this.sorted){let l=e.getParentId(a.data),d=l==null?null:String(l);if(d!==null&&n.has(d)&&d!==a.id){let c=r.get(d);c||r.set(d,c=[]),c.push(a)}else o.push(a)}let i=(a,l,d)=>{for(let c of a){if(d.has(c.id))continue;let u=r.get(c.id)??[],v=!u.length&&!!e.lazyChildren?.(c.id,c.data),p=u.length>0&&this.isOpen(e,c.id,l),R={...c,level:l,hasChildren:u.length>0||v,expanded:p};v&&e.loading?.has(c.id)&&(R.loading=!0),this.withDetails(e,[R],t),p&&i(u,l+1,new Set([...d,c.id]))}};i(o,0,new Set)}};var wo=3e3,vo=new Float64Array(0),Ie=class{constructor(e){this.deps=e;this.stats={filterRuns:0,sortRuns:0};this.server=!0;this.blocks=new Map;this.total=null;this.loadedEnd=0;this.gen=0;this.query=null;this.page=null;this.lastBlock=0;this.version=0;this.cache=null}get bs(){return this.page?this.page.size:this.deps.blockSize}get base(){return this.page?this.page.index*this.page.size:0}update(e){let t=this.query,n=!t||t.sort!==e.sort||t.filters!==e.filters||t.quickFilter!==e.quickFilter,r=e.page??null,o=(r?.size??0)!==(this.page?.size??0);this.query={sort:e.sort,filters:e.filters,quickFilter:e.quickFilter},this.page=r?{...r}:null,(n||o)&&this.purge(),this.ensure(Math.floor(this.base/this.bs))}invalidate(){}purge(){this.gen++,this.blocks.clear(),this.total=null,this.loadedEnd=0,this.touch(),this.query&&this.ensure(Math.floor(this.base/this.bs))}touch(){this.version++,this.cache=null}fullCount(){if(this.total!==null)return this.total;if(!this.loadedEnd)return 0;let e=this.blocks.get(Math.floor((this.loadedEnd-1)/this.bs));return this.loadedEnd+(e&&e.nodes.length<this.bs?0:this.bs)}getRowCount(){let e=this.fullCount();return this.page?Math.max(0,Math.min(this.page.size,e-this.base)):e}dataCount(){return this.fullCount()}loading(){for(let e of this.blocks.values())if(e.state==="loading")return!0;return!1}placeholder(e){return{id:`loading:${e}`,data:{},sourceIndex:-1,kind:"loading"}}peek(e){let t=Math.floor(e/this.bs),n=this.blocks.get(t);return n?.state==="loaded"?n.nodes[e-t*this.bs]??null:null}getRow(e){let t=this.base+e,n=this.peek(t);return n||(e>=0&&e<this.getRowCount()&&this.ensure(Math.floor(t/this.bs)),this.placeholder(t))}ensure(e){let t=this.blocks.get(e);if(t&&(t.state!=="failed"||Date.now()<(t.retryAt??0))||this.total!==null&&e*this.bs>=this.total&&e>0)return;let n=e*this.bs,r=n+this.bs,o=this.gen;this.lastBlock=e,this.blocks.set(e,{state:"loading",nodes:[]});let i=this.query,a=d=>{o===this.gen&&(this.blocks.set(e,{state:"failed",nodes:[],retryAt:Date.now()+wo}),this.deps.onFailed(n,r,d))},l;try{l=Promise.resolve(this.deps.datasource.getRows({start:n,end:r,sort:[...i.sort],filters:{...i.filters},quickFilter:i.quickFilter}))}catch(d){l=Promise.reject(d)}l.then(d=>{if(o!==this.gen)return;let c=Array.isArray(d?.rows)?d.rows.filter(p=>p!==null&&typeof p=="object"):null;if(!c){$("datasource.getRows must resolve to { rows: Row[], total?: number }"),a(new Error("invalid datasource response"));return}let u=this.deps.getRowId,v=c.slice(0,this.bs).map((p,R)=>({id:u?String(u(p)):Le(p),data:p,sourceIndex:n+R}));this.blocks.set(e,{state:"loaded",nodes:v}),typeof d.total=="number"&&d.total>=0?this.total=d.total:v.length<this.bs&&(this.total=n+v.length),this.loadedEnd=Math.max(this.loadedEnd,n+v.length),this.evict(),this.touch(),this.deps.onLoaded(n,n+v.length,this.total)},a)}evict(){let e=Math.max(2,this.deps.maxBlocks);if(this.blocks.size<=e)return;let t=[...this.blocks.keys()].sort((n,r)=>Math.abs(r-this.lastBlock)-Math.abs(n-this.lastBlock));for(let n of t){if(this.blocks.size<=e)break;this.blocks.get(n).state!=="loading"&&this.blocks.delete(n)}}built(){if(this.cache?.ver===this.version)return this.cache;let e=[];for(let n of[...this.blocks.keys()].sort((r,o)=>r-o)){let r=this.blocks.get(n);r.state==="loaded"&&e.push(...r.nodes)}let t=new Map;for(let n of e)t.set(n.id,n.sourceIndex);return this.cache={ver:this.version,data:e,rows:null,ids:t},this.cache}rows(){let e=this.built();if(!e.rows){let t=this.getRowCount();e.rows=new Array(t);for(let n=0;n<t;n++)e.rows[n]=this.peek(this.base+n)??this.placeholder(this.base+n)}return e.rows}dataRows(){return this.built().data}allNodes(){return this.built().data}idOf(e){return this.deps.getRowId?String(this.deps.getRowId(e)):Le(e)}indexOfId(e){let t=this.built().ids.get(e);if(t===void 0)return-1;let n=t-this.base;return n>=0&&n<this.getRowCount()?n:-1}layout(){return{offsets:vo,uniform:!0}}};function jn(s){let e=s.idAt(s.index);if(s.mode==="single"){let t=new Set;return s.toggle&&s.selected.has(e)||t.add(e),{selected:t,anchorIndex:s.index}}if(s.range&&s.anchorIndex!=null){let t=s.toggle?new Set(s.selected):new Set,n=Math.min(s.anchorIndex,s.index),r=Math.max(s.anchorIndex,s.index);for(let o=n;o<=r;o++)t.add(s.idAt(o));return{selected:t,anchorIndex:s.anchorIndex}}if(s.toggle){let t=new Set(s.selected);return t.has(e)?t.delete(e):t.add(e),{selected:t,anchorIndex:s.index}}return{selected:new Set([e]),anchorIndex:s.index}}var ct=class{constructor(e){this.bus=new ge;this.current=e}get state(){return this.current}set(e){let t=Object.keys(e).filter(n=>e[n]!==this.current[n]);t.length&&(this.current={...this.current,...e},this.bus.emit("change",t))}};var Xn=s=>Math.round(s*2.75),Yn=s=>Math.round(s*3.1),Zn=13,yo=[],bo=100,xo=new Map;function ie(s){return s.every(e=>e!==null&&typeof e=="object")?s:($("data contains entries that are not objects; they were skipped"),s.filter(e=>e!==null&&typeof e=="object"))}var qt=class{constructor(e,t){this.options=t;this.events=new ge;this.pinnedRows={top:[],bottom:[]};this.spanCache=null;this.editVersion=0;this.tracker=new tt;this.history=new et;this.disposers=[];this.collatorCache=null;this.destroyed=!1;this.summaryOpts=null;this.summaryValues=[];this.groupBy=[];this.expanded=new Map;this.defaultExpanded=0;this.detailOpen=new Set;this.displayVersion=0;this.aggCache={ver:-1,map:new WeakMap};this.charts=new it(this);this.sourceDefs=[];this.pivotCfg=null;this.pivotData=null;this.savedGroup=null;this.page=0;this.pageSize=bo;this.treeLoaded=new Set;this.treeLoading=new Set;this.lazyChildren=(e,t)=>{if(this.treeLoaded.has(e))return!1;try{return!!this.options.treeData?.hasChildren?.(t)}catch{return!1}};Array.isArray(t.columns)||$("options.columns must be an array"),t.data!=null&&!Array.isArray(t.data)&&$("options.data must be an array"),this.store=new ct({data:Array.isArray(t.data)?ie(t.data):[],sort:[],filters:{},quickFilter:"",selected:new Set,anchorId:null,focus:null,range:null,extraRanges:[],locale:De(t.locale),theme:t.theme??"light"}),this.sourceDefs=Array.isArray(t.columns)?t.columns:[],this.columns=new $e(this.withSelect(this.sourceDefs));let n=t.pagination;n&&typeof n=="object"&&n.pageSize!==void 0&&(Number.isInteger(n.pageSize)&&n.pageSize>0?this.pageSize=n.pageSize:$("pagination.pageSize must be a positive integer")),t.datasource&&typeof t.datasource.getRows!="function"&&$("datasource.getRows must be a function"),this.rowModel=t.datasource&&typeof t.datasource.getRows=="function"?new Ie({datasource:t.datasource,blockSize:Number.isInteger(t.blockSize)&&t.blockSize>0?t.blockSize:100,maxBlocks:Number.isInteger(t.maxBlocks)&&t.maxBlocks>0?t.maxBlocks:100,getRowId:t.getRowId,onLoaded:(i,a,l)=>this.serverLoaded(i,a,l),onFailed:(i,a,l)=>this.serverFailed(i,a,l)}):new dt({getRowId:t.getRowId,columnDef:i=>this.columns.getNode(i)?.def,quickColumns:()=>this.columns.displayed().filter(i=>!I(i.id)).map(i=>i.def),format:(i,a)=>G(i,this.store.state.locale.code)(a),collator:()=>this.collator()}),this.groupBy=this.validGroupBy(t.groupBy??[]),this.defaultExpanded=t.groupDefaultExpanded??0,t.treeData&&!t.getRowId&&$("treeData needs getRowId so parent ids can be matched"),this.updateRows(),this.summaryOpts=t.summary??null,this.refreshSummary();let r=t.fontSize!=null&&t.fontSize>0?t.fontSize:null;t.fontSize!=null&&!(t.fontSize>0)&&$("fontSize must be a positive number"),this.font={size:r,family:t.fontFamily??null};let o=r??Zn;if(this.renderer=new Oe(e,this,{rowHeight:t.rowHeight??Xn(o),headerHeight:t.headerHeight??Yn(o)}),this.renderer.applyFont(this.font.size,this.font.family),this.menu=new lt(this),this.chooser=new _e(this),this.contextMenu=new je(this),this.editor=new Qe(this),this.finder=new Ye(this),this.fillHandle=new Xe(this),this.groupPanel=t.groupPanel?new ze(this):null,this.pinnedRows={top:ie(t.pinnedTopRows??[]),bottom:ie(t.pinnedBottomRows??[])},this.sideBar=t.sideBar?new We(this,typeof t.sideBar=="object"&&!!t.sideBar.open,(typeof t.sideBar=="object"?t.sideBar.panels:void 0)??(t.pivot||t.pivotPanel?["columns","filters","pivot"]:void 0)):null,this.disposers.push(this.store.bus.on("change",i=>this.onChange(i)),Rn(this),wn(this),()=>this.menu.close(),()=>this.chooser.close(),()=>this.contextMenu.destroy(),()=>this.editor.cancel(),()=>this.fillHandle.destroy(),()=>this.groupPanel?.destroy(),()=>this.charts.destroy()),typeof ResizeObserver<"u"){let i=new ResizeObserver(()=>this.renderer.schedule());i.observe(this.renderer.main),this.disposers.push(()=>i.disconnect())}t.pivot&&this.setPivot(t.pivot),qn(t.licenseKey).then(i=>{i&&!this.destroyed&&this.renderer.showFreeBadge()}),this.renderer.render(),this.api=this.createApi(),Ge.set(this.renderer.root,this)}collator(){let e=this.store.state.locale.code;return this.collatorCache?.code!==e&&(this.collatorCache={code:e,collator:new Intl.Collator(e,{numeric:!0,sensitivity:"base"})}),this.collatorCache.collator}layoutChanged(){this.renderer.invalidateHeights(),this.renderer.invalidate({header:!0,rows:!0}),this.refreshChoosers()}columnsChanged(){this.rowModel.invalidate(),this.updateRows(),this.refreshSummary(),this.renderer.invalidate({header:!0,rows:!0}),this.refreshChoosers()}display(){return{groupBy:this.options.treeData?yo:this.groupBy,getParentId:this.options.treeData?.getParentId,expanded:this.expanded,defaultExpanded:this.defaultExpanded,detailOpen:this.options.detailRenderer?this.detailOpen:new Set,isMaster:this.options.isRowMaster,lazyChildren:this.options.treeData?.hasChildren?this.lazyChildren:void 0,loading:this.treeLoading,version:this.displayVersion}}updateRows(){let e=!!this.options.pagination,t=this.pivotData??this.store.state.data;this.rowModel.update({...this.store.state,data:t,display:this.display(),page:e?{index:this.page,size:this.pageSize}:null}),e&&this.page>=this.getPageCount()&&(this.page=this.getPageCount()-1,this.rowModel.update({...this.store.state,data:t,display:this.display(),page:{index:this.page,size:this.pageSize}}))}viewRows(){return this.pivotData??this.store.state.data}sourceLeaves(){let e=[],t=n=>{for(let r of n)!r||typeof r!="object"||(Array.isArray(r.children)?t(r.children):(r.id??r.field)&&e.push({id:r.id??r.field,def:r}))};return t(this.sourceDefs),e}getPivot(){let e=this.pivotCfg;if(!e)return null;let t={rows:[...e.rows],columns:[...e.columns],values:e.values.map(n=>({...n}))};return e.totals||(t.totals=!1),t}setPivot(e){if(e&&this.clientOnly("pivot"))return;if(e&&(typeof e!="object"||!Array.isArray(e.rows)||!Array.isArray(e.values))){$("setPivot: expected { rows: string[], values: [...] }");return}if(this.editor.cancel(),!e){if(!this.pivotCfg)return;this.pivotCfg=null,this.pivotData=null,this.columns.setDefs(this.withSelect(this.sourceDefs)),this.savedGroup&&(this.groupBy=this.savedGroup.groupBy,this.expanded=this.savedGroup.expanded,this.defaultExpanded=this.savedGroup.defaultExpanded,this.savedGroup=null),this.afterPivotSwitch();return}let t=new Set(this.sourceLeaves().map(n=>n.id));this.pivotCfg||(this.savedGroup={groupBy:this.groupBy,expanded:this.expanded,defaultExpanded:this.defaultExpanded}),this.pivotCfg=Ot(e,n=>t.has(n)),this.expanded=new Map,this.defaultExpanded=-1,this.rebuildPivot(!1),this.afterPivotSwitch()}afterPivotSwitch(){this.page=0,this.store.set({sort:[],filters:{},range:null,focus:null}),this.rowModel.invalidate(),this.updateRows(),this.displayVersion++,this.updateRows(),this.groupPanel?.refresh(),this.renderer.invalidate({header:!0,rows:!0}),this.refreshChoosers(),this.events.emit("pivotChange",{pivot:this.getPivot()})}rebuildPivot(e=!0){let t=this.pivotCfg;if(!t)return;let n=this.store.state.locale,r=new Map(this.sourceLeaves().map(d=>[d.id,d.def])),o={sum:n.sum,avg:n.avg,min:n.min,max:n.max,count:n.count},i=Hn(this.store.state.data,t,d=>r.get(d),{total:n.total,blank:n.blanks,agg:d=>o[d]??d},n.code);if(this.pivotData=i.rows,this.columns.setDefs(this.withSelect(i.columns)),this.groupBy=i.groupBy,!e)return;let a=d=>!!this.columns.getNode(d),l=this.store.state;(l.sort.some(d=>!a(d.colId))||Object.keys(l.filters).some(d=>!a(d)))&&this.store.set({sort:l.sort.filter(d=>a(d.colId)),filters:Object.fromEntries(Object.entries(l.filters).filter(([d])=>a(d)))}),this.rowModel.invalidate(),this.displayVersion++,this.updateRows(),this.renderer.invalidate({header:!0,rows:!0}),this.refreshChoosers()}getPage(){return this.options.pagination?this.page:0}getPageSize(){return this.options.pagination?this.pageSize:this.rowModel.fullCount()}getPageCount(){return this.options.pagination?Math.max(1,Math.ceil(this.rowModel.fullCount()/this.pageSize)):1}setPage(e){if(!this.options.pagination||!Number.isFinite(e))return;let t=Math.max(0,Math.min(this.getPageCount()-1,Math.floor(e)));t!==this.page&&(this.veto("beforePageChange",{page:t,pageSize:this.pageSize})||(this.page=t,this.pageMoved()))}setPageSize(e){if(!this.options.pagination)return;if(!Number.isInteger(e)||e<=0){$("setPageSize: size must be a positive integer");return}if(e===this.pageSize)return;let t=this.page*this.pageSize;this.veto("beforePageChange",{page:Math.floor(t/e),pageSize:e})||(this.pageSize=e,this.page=Math.floor(t/e),this.pageMoved())}pageMoved(){this.editor.cancel(),this.updateRows(),this.store.state.range&&this.setRange(null);let e=this.rowModel.getRowCount(),t=this.store.state.focus;t&&t.rowIndex>=e&&this.store.set({focus:e?{...t,rowIndex:e-1}:null}),this.renderer.scroller.scrollTop=0,this.finder.refresh(),this.renderer.invalidate({header:!0,rows:!0}),this.emitPage()}emitPage(){this.events.emit("pageChange",{page:this.page,pageSize:this.pageSize,pageCount:this.getPageCount()})}refreshRows(){this.rowModel instanceof Ie&&(this.rowModel.purge(),this.renderer.invalidate({rows:!0}))}serverLoaded(e,t,n){this.destroyed||(this.renderer.invalidate({header:!0,rows:!0}),this.events.emit("rowsLoaded",n===null?{start:e,end:t}:{start:e,end:t,total:n}))}serverFailed(e,t,n){this.destroyed||($(`datasource.getRows failed for rows ${e}\u2013${t}`),this.toast(this.store.state.locale.loadFailed),this.renderer.invalidate({rows:!0}),this.events.emit("rowsLoadFailed",{start:e,end:t,error:n}))}syncScroll(e,t){if(!e||typeof e.setScrollPosition!="function"||e===this.api)return()=>{};let n=new Map,r=a=>`${a.top},${a.left}`,o=(a,l)=>a.on("scroll",d=>{if(n.get(a)===r(d)){n.delete(a);return}l.setScrollPosition(t==="vertical"?{top:d.top}:t==="horizontal"?{left:d.left}:d),n.set(l,r(l.getScrollPosition()))}),i=[o(this.api,e),o(e,this.api)];return()=>{for(let a of i)a()}}veto(e,t){let n=!1;return this.events.emit(e,{...t,cancel:()=>{n=!0}}),n}clientOnly(e){return this.rowModel.server?($(`${e} is not available with a datasource`),!0):!1}displayChanged(){this.displayVersion++,this.updateRows(),this.store.state.range&&this.setRange(null);let e=this.rowModel.getRowCount(),t=this.store.state.focus;t&&t.rowIndex>=e&&this.store.set({focus:e?{...t,rowIndex:e-1}:null}),this.finder.refresh(),this.renderer.invalidate({header:!0,rows:!0})}validGroupBy(e){return Array.isArray(e)?e.length&&this.clientOnly("grouping")?[]:[...new Set(e)].filter(t=>{let n=this.columns.getNode(t);return!n||n.children||I(t)?($(`groupBy: unknown column "${t}"`),!1):!0}):[]}getGroupBy(){return[...this.groupBy]}setGroupBy(e){let t=this.validGroupBy(e);t.join("")!==this.groupBy.join("")&&(this.groupBy=t,this.page=0,this.groupPanel?.refresh(),this.displayChanged(),this.events.emit("groupChange",{groupBy:[...t]}))}isExpandable(e){return!!e&&(e.kind==="group"||!!e.hasChildren)}expandKey(e){return e.group?e.group.key:e.id}loadChildren(e){let t=this.options.treeData,n=e.id;if(this.treeLoading.has(n))return;if(typeof t.loadChildren!="function"){$("treeData.hasChildren needs treeData.loadChildren");return}this.treeLoading.add(n),this.displayChanged();let r=()=>(this.treeLoading.delete(n),!this.destroyed&&this.store.state.data.includes(e.data));Promise.resolve().then(()=>t.loadChildren(e.data)).then(o=>{if(!r())return;let i=ie(Array.isArray(o)?o:[]);this.treeLoaded.add(n),this.expanded.set(n,!0),i.length&&this.replaceData([...this.store.state.data,...i]),this.displayChanged(),this.events.emit("childrenLoaded",{row:e.data,rows:i}),this.events.emit("groupToggle",{key:n,expanded:!0})},o=>{r()&&($(`treeData.loadChildren failed for row "${n}"`),this.displayChanged(),this.events.emit("childrenLoadFailed",{row:e.data,error:o}))})}setGroupExpanded(e,t){let n=this.rowModel.rows().find(o=>this.isExpandable(o)&&this.expandKey(o)===e);if((n?!!(n.group?.expanded??n.expanded):this.expanded.get(e))!==t){if(t&&n&&!n.group&&this.options.treeData&&this.lazyChildren(n.id,n.data)){this.loadChildren(n);return}this.expanded.set(e,t),this.displayChanged(),this.events.emit("groupToggle",{key:e,expanded:t})}}toggleRow(e){let t=this.rowModel.getRow(e);this.isExpandable(t)&&this.setGroupExpanded(this.expandKey(t),!(t.group?.expanded??t.expanded))}expandAll(e=!0){this.expanded.clear(),this.defaultExpanded=e?-1:0,this.displayChanged()}groupAggregate(e,t){let n=this.columns.getNode(t)?.def;if(!e.group||!n?.aggFunc)return;this.aggCache.ver!==this.editVersion&&(this.aggCache={ver:this.editVersion,map:new WeakMap});let r=this.aggCache.map.get(e.group);if(r||this.aggCache.map.set(e.group,r=new Map),!r.has(t)){let o=e.group.rows;try{r.set(t,pe(n.aggFunc,o.map(i=>N(n,i)),o))}catch{$(`aggFunc of column "${t}" threw`),r.set(t,null)}}return r.get(t)}canExpandDetail(e){if(!this.options.detailRenderer)return!1;try{return!this.options.isRowMaster||!!this.options.isRowMaster(e)}catch{return!1}}isDetailExpanded(e){return!!e&&typeof e=="object"&&this.detailOpen.has(this.rowModel.idOf(e))}setDetailExpanded(e,t){if(!e||typeof e!="object"||t&&!this.canExpandDetail(e))return;let n=this.rowModel.idOf(e);this.detailOpen.has(n)!==t&&(t?this.detailOpen.add(n):(this.detailOpen.delete(n),this.renderer.dropDetail(n)),this.displayChanged(),this.events.emit("detailToggle",{row:e,expanded:t}))}canMoveRows(){let e=this.store.state,t=this.options.treeData;return!this.rowModel.server&&!e.sort.length&&!Object.keys(e.filters).length&&!e.quickFilter.trim()&&!this.groupBy.length&&(!t||typeof t.setParentId=="function")}get dragOptions(){let e=this.options.rowDrag;return e&&typeof e=="object"?e:{}}parentOf(e){let t=null;try{t=this.options.treeData.getParentId(e)}catch{t=null}return t==null?null:String(t)}rawParent(e){try{return this.options.treeData.getParentId(e)??null}catch{return null}}idValue(e){let t=this.rowModel.idOf(e);for(let r of this.store.state.data){let o=this.rawParent(r);if(o!==null&&String(o)===t)return o}return this.store.state.data.some(r=>typeof this.rawParent(r)=="number")&&t.trim()!==""&&Number.isFinite(Number(t))?Number(t):t}canDropRow(e,t,n,r=this){if(!this.canMoveRows()||t===e)return!1;if(r===this&&this.options.treeData&&t){let i=this.rowModel.idOf(e),a=new Set;for(let l=this.rowModel.idOf(t);l!==null&&!a.has(l);){if(l===i)return!1;a.add(l);let d=this.rowModel.allNodes().find(c=>c.id===l);l=d?this.parentOf(d.data):null}}let o=this.dragOptions.canDrop;if(!o)return!0;try{return o({row:e,target:t,position:n,fromOtherGrid:r!==this})!==!1}catch{return $("rowDrag.canDrop threw; the drop was refused"),!1}}dropRow(e,t,n="after",r=this){if(this.clientOnly("dropRow")||!e||typeof e!="object")return!1;let o=this.options.treeData;!o&&n==="inside"&&(n="after");let i=this.store.state.data,a=r!==this,l=a?-1:i.indexOf(e);if(!a&&l<0||t&&!i.includes(t)||a&&(!r.canMoveRows()||i.includes(e))||!this.canDropRow(e,t,n,r))return!1;let d=o?this.rawParent(e):null,c=!o||!t?null:n==="inside"?t:this.store.state.data.find(h=>this.rowModel.idOf(h)===this.parentOf(t))??null,u=c?this.idValue(c):null,v=i.filter(h=>h!==e),p=!t||n==="inside"?v.length:v.indexOf(t)+(n==="after"?1:0);v.splice(p,0,e);let R=v.some((h,f)=>h!==i[f]);if(!a&&!R&&String(d??"")===String(u??""))return!1;let w=(h,f)=>{try{o.setParentId(e,h,f)}catch{$("treeData.setParentId threw")}},m=o?this.store.state.data.find(h=>this.rowModel.idOf(h)===this.parentOf(e))??null:null;return a?(r.removeRows([e]),o&&w(u,c),this.addRows([e],p)):(o&&w(u,c),this.replaceData(v),this.history.push({undo:()=>{o&&w(d,m),this.replaceData(i)},redo:()=>{o&&w(u,c),this.replaceData(v)}}),this.events.emit("rowDragEnd",{row:e,fromIndex:l,toIndex:p})),this.events.emit("rowDrop",{row:e,target:t,position:n,fromOtherGrid:a,fromGrid:a?r.api:null}),!0}moveRow(e,t,n=!0){if(this.clientOnly("moveRow")||!this.canMoveRows())return!1;let r=this.store.state.data,o=r.indexOf(e);if(o<0||!Number.isFinite(t))return!1;let i=Math.max(0,Math.min(r.length-1,Math.floor(t)));if(i===o)return!1;let a=[...r];return a.splice(o,1),a.splice(i,0,e),this.replaceData(a),n&&this.history.push({undo:()=>this.moveRow(e,o,!1),redo:()=>this.moveRow(e,i,!1)}),this.events.emit("rowDragEnd",{row:e,fromIndex:o,toIndex:i}),!0}setFont(e){let t=this.font.size;e.size!==void 0&&(typeof e.size=="number"&&e.size>0?t=e.size:$("setFont: size must be a positive number"));let n=e.family===void 0?this.font.family:e.family||null;this.font={size:t,family:n};let r=t??Zn;this.options.rowHeight==null&&(this.renderer.opts.rowHeight=Xn(r)),this.options.headerHeight==null&&(this.renderer.opts.headerHeight=Yn(r)),this.renderer.applyFont(t,n),this.renderer.invalidateHeights(),this.menu.close(),this.layoutChanged()}applyFontTo(e){this.font.size&&e.style.setProperty("--fg-font-size",`${this.font.size}px`),this.font.family&&e.style.setProperty("--fg-font",this.font.family)}summary(){return this.summaryOpts&&this.summaryOpts.rows?.length?{opts:this.summaryOpts,values:this.summaryValues}:null}setSummary(e){if(e&&!Array.isArray(e.rows)){$("setSummary: summary.rows must be an array");return}this.summaryOpts=e,this.refreshSummary(),this.renderer.invalidate({header:!0,rows:!0})}refreshSummary(){let e=this.summaryOpts;if(!e?.rows?.length){this.summaryValues=[];return}let t=e.scope??"filtered",n=t==="all"?this.rowModel.allNodes().map(r=>r.data):t==="selected"?this.selectedRows():this.rowModel.dataRows().map(r=>r.data);this.summaryValues=un(e.rows,n,r=>this.columns.getNode(r)?.def)}dataColumns(){return this.columns.displayed().filter(e=>!I(e.id))}validRange(e){if(!e||this.options.rangeSelection===!1)return null;let t=this.rowModel.getRowCount(),n=r=>!!r&&!I(r.colId)&&!!this.columns.getColumn(r.colId)&&r.rowIndex>=0&&r.rowIndex<t;return n(e.start)&&n(e.end)?{start:{...e.start},end:{...e.end}}:null}setRange(e,t=!1){let n=this.validRange(e),r=t||!this.store.state.extraRanges.length?this.store.state.extraRanges:[],o=this.store.state.range;JSON.stringify(o)===JSON.stringify(n)&&r===this.store.state.extraRanges||(this.store.set({range:n,extraRanges:r}),this.events.emit("rangeChange",{range:n&&{start:{...n.start},end:{...n.end}}}))}addRange(e){let{range:t,focus:n}=this.store.state,r=this.validRange(t??(n?{start:n,end:n}:null));r&&this.store.set({extraRanges:[...this.store.state.extraRanges,r]}),this.setRange(e,!0)}getRanges(){let e=[...this.store.state.extraRanges];return this.store.state.range&&e.push(this.store.state.range),e.map(t=>({start:{...t.start},end:{...t.end}}))}setRanges(e){let t=(Array.isArray(e)?e:[]).map(n=>this.validRange(n)).filter(n=>!!n);this.store.set({extraRanges:t.slice(0,-1)}),this.setRange(t[t.length-1]??null,!0)}boundsOf(e){if(!e)return null;let t=this.columns.getColumn(e.start.colId),n=this.columns.getColumn(e.end.colId);return!t||!n?null:Se({start:{rowIndex:e.start.rowIndex,colIndex:t.index},end:{rowIndex:e.end.rowIndex,colIndex:n.index}})}rangeBounds(){return this.boundsOf(this.store.state.range)}allRangeBounds(){return[...this.store.state.extraRanges,this.store.state.range].map(e=>this.boundsOf(e)).filter(e=>!!e)}rangeContains(e,t){let n=this.columns.getColumn(t);return!!n&&this.allRangeBounds().some(r=>xn(r,e,n.index))}selectAllCells(){let e=this.dataColumns(),t=this.rowModel.getRowCount();!e.length||!t||(this.store.state.focus||this.setFocus(0,e[0].id),this.setRange({start:{rowIndex:0,colId:e[0].id},end:{rowIndex:t-1,colId:e[e.length-1].id}}))}selectionTSV(e,t=!1){let n=this.store.state.locale.code,r=this.columns.displayed(),o=t?null:this.rangeBounds(),i=t,a,l,d=t?[]:this.allRangeBounds();if(d.length>1){let u=d.every(p=>p.c1===d[0].c1&&p.c2===d[0].c2),v=d.every(p=>p.r1===d[0].r1&&p.r2===d[0].r2);if(u||v){let p=[...d].sort((m,h)=>u?m.r1-h.r1:m.c1-h.c1),R=p.map(m=>this.rangeMatrix(m)),w=u?R.flat():R[0].map((m,h)=>R.flatMap(f=>f[h]??[]));return e&&w.unshift((u?p.slice(0,1):p).flatMap(m=>this.rangeHeaders(m))),Rt(w)}}if(o){a=[];for(let u=o.r1;u<=o.r2;u++){let v=this.rowModel.getRow(u);v.kind||a.push(v.data)}l=r.slice(o.c1,o.c2+1).filter(u=>!I(u.id))}else if(i){let u=this.store.state.selected;a=this.rowModel.dataRows().filter(v=>u.has(v.id)).map(v=>v.data),l=this.dataColumns()}else{let u=this.store.state.focus,v=u&&this.columns.getColumn(u.colId),p=u&&this.rowModel.getRow(u.rowIndex);if(!v||!p||p.kind||I(v.id))return"";a=[p.data],l=[v]}let c=a.map(u=>l.map(v=>this.copyCell(v.def,u,n)));return e&&c.unshift(l.map(u=>u.def.header??u.def.field??u.id)),Rt(c)}rangeHeaders(e){return this.columns.displayed().slice(e.c1,e.c2+1).filter(t=>!I(t.id)).map(t=>t.def.header??t.def.field??t.id)}rangeMatrix(e){let t=this.columns.displayed().slice(e.c1,e.c2+1).filter(o=>!I(o.id)),n=this.store.state.locale.code,r=[];for(let o=e.r1;o<=e.r2;o++){let i=this.rowModel.getRow(o);i&&!i.kind&&r.push(t.map(a=>this.copyCell(a.def,i.data,n)))}return r}copyCell(e,t,n){let r=N(e,t),o=e.copyable;if(o===!1)return"";if(typeof o=="function"){let i=!1;try{i=o({value:r,row:t,column:e})!==!1}catch{i=!1}if(!i)return""}return Ze(e,r,n)}copyToClipboard(e,t=!1){let n=this.selectionTSV(e,t);if(n&&typeof navigator<"u"&&navigator.clipboard?.writeText)try{navigator.clipboard.writeText(n)?.catch?.(()=>{})}catch{}return n}pasteText(e){let t=yn(e),n={changed:0,skipped:0};if(!t.length)return n;let r=this.columns.displayed(),o=this.rowModel.getRowCount(),i=this.rangeBounds(),a=this.store.state.focus,l=a&&this.columns.getColumn(a.colId),d,c;if(i)d=i.r1,c=i.c1;else if(a&&l&&!I(l.id))d=a.rowIndex,c=l.index;else return n;let u=[],v=t.length===1&&t[0].length===1,p=v&&i?i.r2-i.r1+1:t.length,R=v&&i?i.c2-i.c1+1:Math.max(...t.map(w=>w.length));for(let w=0;w<p;w++){let m=d+w;if(m>=o)break;let h=this.rowModel.getRow(m);if(!h.kind)for(let f=0;f<R;f++){let C=r[c+f];if(!C)break;if(I(C.id))continue;let y=v&&i?t[0][0]:t[w]?.[f];if(y===void 0)continue;let S=C.def;if(!S.field||!te(S,h.data,m)){n.skipped++;continue}let x=h.data[S.field],g=this.acceptText(S,h.data,y,x);if(!g.ok){n.skipped++;continue}this.writeCell(u,h.data,S.field,C.id,m,g.value)&&n.changed++}}return this.endCellTx(u),this.events.emit("paste",{...n}),n}acceptText(e,t,n,r){let o,i=e.editor;if(i&&typeof i=="object"&&i.type==="select"){let a=(typeof i.options=="function"?i.options(t):i.options)??[],l=n.trim().toLowerCase(),d=a.map(c=>c!==null&&typeof c=="object"&&"value"in c?c:{value:c,label:String(c),disabled:!1}).find(c=>String(c.value).toLowerCase()===l||(c.label??"").toLowerCase()===l);if(!d||d.disabled)return{ok:!1};o=d.value}else if(e.formulas&&fe(n.trim()))o=n.trim();else{let a=Je(e,n,r);if(!a.ok)return a;o=a.value}return this.cellError(e,t,o)!==null?{ok:!1}:{ok:!0,value:o}}cellError(e,t,n){let r=this.store.state.locale;if(e.required&&F(n))return r.required;if(e.unique&&e.field&&!F(n)){let o=n instanceof Date?n.getTime():String(n),i=e.field;if(this.store.state.data.some(a=>{if(a===t)return!1;let l=a[i];return!F(l)&&(l instanceof Date?l.getTime():String(l))===o}))return r.duplicate}if(e.validate){let o;try{o=e.validate(n,t)}catch{o=r.invalidValue}if(o!==!0)return typeof o=="string"&&o?o:r.invalidValue}return null}validateAll(){let e=[],t=this.columns.getState().map(n=>({id:n.colId,def:this.columns.getNode(n.colId).def})).filter(n=>n.def.field&&n.def.editable&&(n.def.required||n.def.unique||n.def.validate));return this.store.state.data.forEach((n,r)=>{let o=this.rowModel.idOf(n),i=this.rowModel.indexOfId(o);for(let a of t){if(!te(a.def,n,i<0?r:i))continue;let l=this.cellError(a.def,n,n[a.def.field]);l!==null&&e.push({row:n,rowIndex:i,colId:a.id,message:l})}}),e}mergeSpans(){if(this.rowModel.server||!this.columns.displayed().some(o=>o.def.merge||o.def.rowSpan))return xo;let e=this.rowModel.rows(),t=this.editVersion*1e6+this.columns.displayed().length;if(this.spanCache&&this.spanCache.rows===e&&this.spanCache.ver===t)return this.spanCache.spans;let n=new Map,r=this.columns.displayed().filter(o=>o.def.merge||o.def.rowSpan);if(r.length&&!e.some(o=>o.kind)){let o=e.map(i=>i.data);for(let i of r)n.set(i.id,He(o,i.def))}return this.spanCache={rows:e,ver:t,spans:n},n}rangeAggregates(){let e=this.allRangeBounds();if(!e.length)return null;let t=this.columns.displayed(),n={cells:0,count:0,numbers:0,sum:0,min:1/0,max:-1/0},r=e.length>1?new Set:null;for(let o of e)for(let i=o.r1;i<=o.r2;i++){let a=this.rowModel.getRow(i);if(!a||a.kind)continue;let l=a.data;for(let d of t.slice(o.c1,o.c2+1)){if(I(d.id))continue;if(r){let u=`${i},${d.index}`;if(r.has(u))continue;r.add(u)}n.cells++;let c=N(d.def,l);if(!F(c)&&(n.count++,typeof c=="number"||d.def.type==="number"&&!Number.isNaN(Number(c)))){let u=Number(c);n.numbers++,n.sum+=u,u<n.min&&(n.min=u),u>n.max&&(n.max=u)}}}return n}fillRange(e){let t=this.rangeBounds()??(()=>{let u=this.store.state.focus,v=u&&this.columns.getColumn(u.colId);return u&&v&&!I(v.id)?{r1:u.rowIndex,r2:u.rowIndex,c1:v.index,c2:v.index}:null})(),n=this.columns.getColumn(e.start.colId),r=this.columns.getColumn(e.end.colId);if(!t||!n||!r)return;let o=Se({start:{rowIndex:e.start.rowIndex,colIndex:n.index},end:{rowIndex:e.end.rowIndex,colIndex:r.index}}),i=this.rowModel.getRowCount();o.r1=Math.max(0,o.r1),o.r2=Math.min(i-1,o.r2);let a=this.columns.displayed(),l=[],d=(u,v,p)=>{let R=a[v],w=this.rowModel.getRow(u),m=R?.def;!w||w.kind||!m?.field||I(R.id)||!te(m,w.data,u)||this.cellError(m,w.data,p)===null&&this.writeCell(l,w.data,m.field,R.id,u,p)},c=(u,v)=>N(a[v].def,this.rowModel.getRow(u).data);if(o.r1<t.r1||o.r2>t.r2)for(let u=t.c1;u<=t.c2;u++){let v=[],p=[];for(let R=t.r1;R<=t.r2;R++)v.push(c(R,u));for(let R=t.r2;R>=t.r1;R--)p.push(c(R,u));ke(v,o.r2-t.r2).forEach((R,w)=>d(t.r2+1+w,u,R)),ke(p,t.r1-o.r1).forEach((R,w)=>d(t.r1-1-w,u,R))}else if(o.c1<t.c1||o.c2>t.c2)for(let u=t.r1;u<=t.r2;u++){let v=[],p=[];for(let R=t.c1;R<=t.c2;R++)v.push(c(u,R));for(let R=t.c2;R>=t.c1;R--)p.push(c(u,R));ke(v,o.c2-t.c2).forEach((R,w)=>d(u,t.c2+1+w,R)),ke(p,t.c1-o.c1).forEach((R,w)=>d(u,t.c1-1-w,R))}else return;this.endCellTx(l),this.setRange({start:{rowIndex:o.r1,colId:a[o.c1].id},end:{rowIndex:o.r2,colId:a[o.c2].id}})}setPinnedRows(e){e.top&&(this.pinnedRows.top=ie(e.top)),e.bottom&&(this.pinnedRows.bottom=ie(e.bottom)),this.renderer.invalidate({rows:!0})}writeCell(e,t,n,r,o,i){let a=t[n];return Object.is(a,i)||this.veto("beforeCellChange",{row:t,rowIndex:o,colId:r,oldValue:a,newValue:i})?!1:(this.tracker.beforeChange(t),t[n]=i,e.push({row:t,field:n,colId:r,oldValue:a,newValue:i}),this.events.emit("cellValueChanged",{row:t,rowIndex:o,colId:r,oldValue:a,newValue:i}),!0)}endCellTx(e){if(!e.length)return;let t=(n,r)=>{for(let o of n){let i=o.row[o.field];o.row[o.field]=o[r],this.events.emit("cellValueChanged",{row:o.row,rowIndex:this.rowModel.indexOfId(this.rowModel.idOf(o.row)),colId:o.colId,oldValue:i,newValue:o[r]})}this.afterDataEdit()};this.history.push({undo:()=>t([...e].reverse(),"oldValue"),redo:()=>t(e,"newValue")}),this.afterDataEdit()}afterDataEdit(){this.renderer.invalidateHeights(),this.editVersion++,this.refreshSummary(),this.renderer.invalidate({rows:!0})}applyEdit(e,t,n){let r=this.rowModel.getRow(e),o=this.columns.getColumn(t)?.def;if(!r||!o?.field)return;let i=[];this.writeCell(i,r.data,o.field,t,e,n),this.endCellTx(i)}clearCells(){let e=this.columns.displayed(),t=this.allRangeBounds(),n=this.store.state.focus,r=n?this.columns.getColumn(n.colId)?.index:void 0,o=t.length?t:n&&r!==void 0?[{r1:n.rowIndex,r2:n.rowIndex,c1:r,c2:r}]:[];if(!o.length)return;let i=[];for(let a of o)for(let l=a.r1;l<=a.r2;l++){let d=this.rowModel.getRow(l);for(let c=a.c1;c<=a.c2;c++){let u=e[c]?.def;d&&!d.kind&&u?.field&&te(u,d.data,l)&&this.writeCell(i,d.data,u.field,e[c].id,l,null)}}this.endCellTx(i)}replaceData(e){this.store.set({data:e});let t=new Set(this.rowModel.allNodes().map(i=>i.id)),n=this.store.state.selected;[...n].some(i=>!t.has(i))&&this.setSelected(new Set([...n].filter(i=>t.has(i))));let r=this.rowModel.getRowCount(),o=this.store.state.focus;o&&o.rowIndex>=r&&this.store.set({focus:r?{...o,rowIndex:r-1}:null})}addRows(e,t,n=!0){if(this.clientOnly("addRows"))return[];let r=ie(Array.isArray(e)?e:[]);if(!r.length)return[];let o=[...this.store.state.data],i=t===void 0?o.length:Math.max(0,Math.min(o.length,t));o.splice(i,0,...r);for(let a of r)this.tracker.created.add(a);return this.replaceData(o),n&&this.history.push({undo:()=>this.removeRows(r,!1),redo:()=>this.addRows(r,i,!1)}),this.events.emit("rowsAdded",{rows:[...r]}),r}removeRows(e,t=!0){if(this.clientOnly("removeRows"))return[];let n=this.store.state.data,r=typeof e=="function"?e:(l=>d=>l.has(d))(new Set(e)),o=[];if(n.forEach((l,d)=>{let c=!1;try{c=!!r(l)}catch{c=!1}c&&o.push({row:l,index:d})}),!o.length)return[];let i=new Set(o.map(l=>l.row)),a=new Set(o.filter(l=>this.tracker.created.has(l.row)).map(l=>l.row));for(let{row:l,index:d}of o)a.has(l)?this.tracker.created.delete(l):this.tracker.deleted.set(l,d);return this.replaceData(n.filter(l=>!i.has(l))),t&&this.history.push({undo:()=>{let l=[...this.store.state.data];for(let{row:d,index:c}of o)l.splice(Math.min(c,l.length),0,d),this.tracker.deleted.delete(d),a.has(d)&&this.tracker.created.add(d);this.replaceData(l)},redo:()=>this.removeRows([...i],!1)}),this.events.emit("rowsRemoved",{rows:o.map(l=>l.row)}),o.map(l=>l.row)}trackedFields(){let e=[],t=n=>{for(let r of n)r.children?t(r.children):r.def.field&&!I(r.id)&&e.push({field:r.def.field,colId:r.id})};return t(this.columns.roots()),e}getChanges(){let e=this.trackedFields(),t=[];for(let[n,r]of this.tracker.originals)if(!this.tracker.deleted.has(n))for(let o of this.tracker.diff(n,e.map(i=>i.field)))t.push({row:n,colId:e.find(i=>i.field===o).colId,oldValue:r[o],newValue:n[o]});return t}getModifiedRows(){let e=this.trackedFields().map(n=>n.field),t=this.store.state.data;return{created:t.filter(n=>this.tracker.created.has(n)),updated:t.filter(n=>this.tracker.originals.has(n)&&this.tracker.diff(n,e).length>0),deleted:[...this.tracker.deleted.keys()]}}hasChanges(){let e=this.getModifiedRows();return e.created.length+e.updated.length+e.deleted.length>0}commitChanges(){this.tracker.reset(),this.renderer.invalidate({rows:!0})}revertChanges(){this.editor.cancel();for(let[n,r]of this.tracker.originals)Object.assign(n,r);let e=this.store.state.data.filter(n=>!this.tracker.created.has(n)),t=[...this.tracker.deleted.entries()].sort((n,r)=>n[1]-r[1]);e=[...e];for(let[n,r]of t)e.splice(Math.min(r,e.length),0,n);this.tracker.reset(),this.history.clear(),this.replaceData(e),this.afterDataEdit()}undo(){this.editor.cancel(),this.history.undo()}redo(){this.editor.cancel(),this.history.redo()}toast(e){let t=b("div","fg-toast",{role:"status"});t.textContent=e,this.renderer.root.append(t),setTimeout(()=>t.remove(),3500)}refreshChoosers(){this.chooser.refresh(),this.sideBar?.refresh()}setColumnsVisible(e,t){let n=[];for(let r of e){let o=this.columns.getNode(r);!o||o.children||o.hide===!t||(this.columns.setHide(r,!t),n.push(r))}if(n.length){this.columnsChanged();for(let r of n)this.events.emit("columnVisible",{colId:r,visible:t})}}autoSize(e){let t=(e?e.map(l=>this.columns.getColumn(l)):this.columns.displayed()).filter(l=>!!l&&Pe(l.def)),{first:n,last:r}=this.renderer.renderedRange(),o=this.store.state.locale.code,i=66,a=24;for(let l of t){let d=this.renderer.measureText(l.def.header??l.def.field??"",!0)+i,c=G(l.def,o);for(let v=n;v<=r;v++){let p=this.rowModel.getRow(v);p&&(d=Math.max(d,this.renderer.measureText(c(N(l.def,p.data)),!1)+a))}let u=this.columns.setWidth(l.id,Math.ceil(d));this.events.emit("columnResize",{colId:l.id,width:u})}this.layoutChanged()}resetColumns(){this.columns.reset(),this.columnsChanged()}setSort(e){let t=e.filter(n=>{let r=this.columns.getNode(n.colId);return!r||r.children?($(`setSort: unknown column "${n.colId}"`),!1):n.dir==="asc"||n.dir==="desc"});this.veto("beforeSort",{sort:t.map(n=>({...n}))})||(this.store.set({sort:t}),this.events.emit("sortChange",{sort:[...t]}))}toggleSort(e,t){let n=this.store.state.sort,r=n.find(a=>a.colId===e),o=r?r.dir==="asc"?"desc":null:"asc",i;t?o?r?i=n.map(a=>a.colId===e?{colId:e,dir:o}:a):i=[...n,{colId:e,dir:o}]:i=n.filter(a=>a.colId!==e):i=o?[{colId:e,dir:o}]:[],this.setSort(i)}setFilter(e,t){let n=this.columns.getNode(e);if(!n||n.children){$(`setFilter: unknown column "${e}"`);return}if(this.veto("beforeFilter",{colId:e,model:t}))return;let r={...this.store.state.filters};t?r[e]=t:delete r[e],this.store.set({filters:r}),this.events.emit("filterChange",{filters:{...r}})}setPinned(e,t){this.columns.setPinned(e,t),this.layoutChanged()}setFocus(e,t){let n=this.store.state.focus;n&&n.rowIndex===e&&n.colId===t||(this.store.set({focus:{rowIndex:e,colId:t}}),this.events.emit("focusChange",{rowIndex:e,colId:t}))}setSelected(e,t=this.store.state.anchorId){this.store.set({selected:e,anchorId:t}),this.events.emit("selectionChange",{selected:this.selectedRows()})}rowSelectable(e){let t=this.options.isRowSelectable;if(!t)return!0;try{return!!t(e)}catch{return!1}}selectFromClick(e,t,n){let r=this.options.rowSelection;if(!r||e<0||e>=this.rowModel.getRowCount())return;let o=this.rowModel.getRow(e);if(o.kind||!this.rowSelectable(o.data))return;let i=jn({selected:this.store.state.selected,anchorIndex:this.anchorIndex(),mode:r,index:e,idAt:a=>this.rowModel.getRow(a).id,toggle:t,range:n});if(this.rowModel.rows()!==this.rowModel.dataRows()||this.options.isRowSelectable)for(let a of i.selected){if(this.store.state.selected.has(a))continue;let l=this.rowModel.indexOfId(a),d=l>=0?this.rowModel.getRow(l):null;d&&(d.kind||!this.rowSelectable(d.data))&&i.selected.delete(a)}this.setSelected(i.selected,this.rowModel.getRow(i.anchorIndex)?.id??null)}anchorIndex(){let e=this.store.state.anchorId;if(e==null)return null;let t=this.rowModel.indexOfId(e);return t<0?null:t}selectableRows(){let e=this.rowModel.dataRows();return this.options.isRowSelectable?e.filter(t=>this.rowSelectable(t.data)):e}toggleSelectAll(){let e=this.selectableRows(),t=this.store.state.selected,n=e.length>0&&e.every(o=>t.has(o.id)),r=new Set(t);for(let o of e)n?r.delete(o.id):r.add(o.id);this.setSelected(r)}selectedRows(){let e=this.store.state.selected;return e.size?this.rowModel.allNodes().filter(t=>e.has(t.id)).map(t=>t.data):[]}withSelect(e){let t=[];return this.options.rowDrag&&t.push(tn),this.options.rowSelection&&t.push(en),[...t,...e]}setData(e,t){if(this.clientOnly("setData"))return;if(!Array.isArray(e)){$("setData: rows must be an array");return}this.editor.cancel(),this.tracker.reset(),this.history.clear(),this.detailOpen.clear(),this.treeLoaded.clear(),this.treeLoading.clear(),this.renderer.dropDetail(),this.store.set({data:ie(e)}),t?.scrollToTop&&this.renderer.setScroll({top:0,left:0});let n=this.store.state.selected;if(n.size)if(this.options.getRowId){let i=new Set(this.rowModel.allNodes().map(l=>l.id)),a=new Set([...n].filter(l=>i.has(l)));a.size!==n.size&&this.setSelected(a)}else this.setSelected(new Set,null);let r=this.rowModel.getRowCount(),o=this.store.state.focus;o&&o.rowIndex>=r&&this.store.set({focus:r?{...o,rowIndex:r-1}:null})}setColumns(e){if(!Array.isArray(e)){$("setColumns: columns must be an array");return}if(this.menu.close(),this.sourceDefs=e,this.pivotCfg){this.rebuildPivot();return}this.columns.setDefs(this.withSelect(e));let t=r=>!!this.columns.getNode(r),n=this.groupBy.filter(t);n.length!==this.groupBy.length&&(this.groupBy=n,this.groupPanel?.refresh(),this.events.emit("groupChange",{groupBy:[...n]})),this.store.set({sort:this.store.state.sort.filter(r=>t(r.colId)),filters:Object.fromEntries(Object.entries(this.store.state.filters).filter(([r])=>t(r))),focus:null}),this.columnsChanged()}onChange(e){let t=(...r)=>r.some(o=>e.includes(o));this.pivotCfg&&t("data","locale")&&this.rebuildPivot(!1),t("locale")&&(this.menu.close(),this.chooser.close(),this.sideBar?.refresh(),this.rowModel.invalidate());let n=t("sort","filters","quickFilter")&&this.page!==0;n&&(this.page=0),t("data","sort","filters","quickFilter","locale")&&this.updateRows(),n&&this.emitPage(),t("data","sort","filters","quickFilter")&&this.store.state.range&&this.setRange(null),t("data","sort","filters","quickFilter","locale")&&this.finder.refresh(),(t("data","filters","quickFilter","locale")||t("selected")&&this.summaryOpts?.scope==="selected")&&this.refreshSummary(),t("locale")&&this.groupPanel?.refresh(),t("filters")&&this.sideBar?.refresh(),t("theme")&&this.renderer.applyTheme(),this.renderer.invalidate({header:t("sort","filters","quickFilter","locale","selected","data"),rows:t("data","sort","filters","quickFilter","locale")})}createApi(){let e=t=>((...n)=>{if(this.destroyed){$("API called after destroy()");return}return t(...n)});return{setData:e((t,n)=>this.setData(t,n)),getData:e(()=>this.store.state.data),setColumns:e(t=>this.setColumns(t)),getColumnState:e(()=>this.columns.getState()),applyColumnState:e(t=>{this.columns.applyState(t),this.columnsChanged()}),setSort:e(t=>this.setSort(t)),getSort:e(()=>[...this.store.state.sort]),setFilter:e((t,n)=>this.setFilter(t,n)),getFilterModel:e(()=>({...this.store.state.filters})),setQuickFilter:e(t=>this.store.set({quickFilter:t??""})),getSelectedRows:e(()=>this.selectedRows()),selectAll:e(()=>this.setSelected(new Set([...this.store.state.selected,...this.selectableRows().map(t=>t.id)]))),deselectAll:e(()=>this.setSelected(new Set,null)),getDisplayedRowCount:e(()=>this.rowModel.getRowCount()),scrollToRow:e(t=>this.renderer.scrollToRow(t)),validate:e(()=>this.validateAll()),getScrollPosition:e(()=>this.renderer.getScroll()),setScrollPosition:e(t=>this.renderer.setScroll(t??{})),syncScroll:e((t,n="both")=>this.syncScroll(t,n)),setTheme:e(t=>this.store.set({theme:t})),setLocale:e(t=>this.store.set({locale:De(t)})),setFont:e(t=>this.setFont(t)),setColumnVisible:e((t,n)=>this.setColumnsVisible([t],n)),autoSizeColumns:e(t=>this.autoSize(t)),resetColumnState:e(()=>this.resetColumns()),openColumnChooser:e(()=>this.chooser.open()),closeColumnChooser:e(()=>this.chooser.close()),toggleSideBar:e((t,n)=>this.sideBar?.toggle(t,n)),setSummary:e(t=>this.setSummary(t)),getSummaryValues:e(()=>this.summaryValues.map(t=>({...t}))),getRange:e(()=>{let t=this.store.state.range;return t&&{start:{...t.start},end:{...t.end}}}),setRange:e(t=>this.setRange(t)),getRanges:e(()=>this.getRanges()),setRanges:e(t=>this.setRanges(t)),copySelection:e(t=>this.copyToClipboard(!!t?.headers,!!t?.rows)),pasteText:e(t=>this.pasteText(t)),startEdit:e((t,n)=>this.editor.start(t,n)),stopEdit:e(t=>t?this.editor.cancel():void this.editor.commit(null)),addRows:e((t,n)=>this.addRows(t,n)),removeRows:e(t=>this.removeRows(t)),removeSelectedRows:e(()=>this.removeRows(this.selectedRows())),getModifiedRows:e(()=>this.getModifiedRows()),getChanges:e(()=>this.getChanges()),hasChanges:e(()=>this.hasChanges()),commitChanges:e(()=>this.commitChanges()),revertChanges:e(()=>this.revertChanges()),undo:e(()=>this.undo()),redo:e(()=>this.redo()),canUndo:e(()=>this.history.canUndo()),canRedo:e(()=>this.history.canRedo()),fillRange:e(t=>this.fillRange(t)),setPinnedRows:e(t=>this.setPinnedRows(t)),find:e(t=>this.finder.find(t)),findNext:e(()=>this.finder.next()),findPrevious:e(()=>this.finder.previous()),clearFind:e(()=>this.finder.clear()),setGroupBy:e(t=>this.setGroupBy(t)),getGroupBy:e(()=>this.getGroupBy()),setGroupExpanded:e((t,n)=>this.setGroupExpanded(t,n)),expandAll:e(()=>this.expandAll(!0)),collapseAll:e(()=>this.expandAll(!1)),setDetailExpanded:e((t,n)=>this.setDetailExpanded(t,n)),isDetailExpanded:e(t=>this.isDetailExpanded(t)),moveRow:e((t,n)=>this.moveRow(t,n)),dropRow:e((t,n,r)=>this.dropRow(t,n,r)),setPage:e(t=>this.setPage(t)),getPage:e(()=>this.getPage()),getPageCount:e(()=>this.getPageCount()),setPageSize:e(t=>this.setPageSize(t)),getPageSize:e(()=>this.getPageSize()),refreshRows:e(()=>this.refreshRows()),setPivot:e(t=>this.setPivot(t)),getPivot:e(()=>this.getPivot()),createChart:e(t=>this.charts.create(t)),getCsv:e(t=>$t(this,t)),exportCsv:e((t="export.csv",n)=>At(t,["\uFEFF",$t(this,n)],"text/csv;charset=utf-8")),getXlsx:e(t=>Pt(this,t)),exportXlsx:e((t="export.xlsx",n)=>At(t,[Pt(this,n)],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")),importFile:e((t,n)=>$n(this,t,n)),on:e((t,n)=>this.events.on(t,n)),destroy:()=>this.destroy()}}destroy(){if(!this.destroyed){this.destroyed=!0,Ge.delete(this.renderer.root);for(let e of this.disposers)e();this.renderer.destroy(),this.events.clear()}}};function Co(s,e){return new qt(s,e).api}var Ro={en:ee,ko:Jt,"zh-CN":Qt,ja:Zt,es:Xt,fr:Yt,de:jt};for(let s of Object.values(Ro))ht(s);export{Co as createGrid,ee as en,Ro as locales,Mt as parseCsv,Dt as readXlsx,ht as registerLocale,Ht as renderChart,De as resolveLocale,fo as setLicenseKey,Un as verifyLicense,at as version,It as writeXlsx};
|