@freegridjs/core 0.0.0-stage → 0.1.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 +21 -0
- package/README.md +43 -2
- package/dist/cdn/freegrid.css +200 -0
- package/dist/cdn/freegrid.esm.js +1 -0
- package/dist/cdn/freegrid.min.js +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +2326 -0
- package/dist/locales/de.d.ts +5 -0
- package/dist/locales/de.js +51 -0
- package/dist/locales/en.d.ts +5 -0
- package/dist/locales/en.js +51 -0
- package/dist/locales/es.d.ts +5 -0
- package/dist/locales/es.js +51 -0
- package/dist/locales/fr.d.ts +5 -0
- package/dist/locales/fr.js +51 -0
- package/dist/locales/ja.d.ts +5 -0
- package/dist/locales/ja.js +51 -0
- package/dist/locales/ko.d.ts +5 -0
- package/dist/locales/ko.js +51 -0
- package/dist/locales/zh-CN.d.ts +5 -0
- package/dist/locales/zh-CN.js +51 -0
- package/dist/styles.css +200 -0
- package/dist/types-vxZQWo_S.d.ts +226 -0
- package/package.json +52 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 FreeGrid contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,44 @@
|
|
|
1
|
-
#
|
|
1
|
+
# FreeGrid
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A fast, free, MIT-licensed data grid for the web. Docs and live demos: **https://freegrid.app**
|
|
4
|
+
|
|
5
|
+
- 100,000+ rows with row and column virtualization
|
|
6
|
+
- Pinned columns, multi-level headers, resize and drag to reorder
|
|
7
|
+
- Multi-sort, text / number / date / set filters, quick search
|
|
8
|
+
- Column chooser and side bar, autosize, save and restore layouts
|
|
9
|
+
- Summary rows (top or bottom, pinned or scrolling)
|
|
10
|
+
- Row selection, keyboard navigation, light / dark and Korean-style themes, font settings
|
|
11
|
+
- 7 languages: English, 한국어, 简体中文, 日本語, Español, Français, Deutsch
|
|
12
|
+
- Zero dependencies. React: [`@freegridjs/react`](https://www.npmjs.com/package/freegrid-react) · Vue: [`@freegridjs/vue`](https://www.npmjs.com/package/freegrid-vue)
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm i @freegridjs/core
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
```js
|
|
19
|
+
import { createGrid } from '@freegridjs/core';
|
|
20
|
+
import '@freegridjs/core/styles.css';
|
|
21
|
+
|
|
22
|
+
const grid = createGrid(document.getElementById('grid'), {
|
|
23
|
+
columns: [
|
|
24
|
+
{ field: 'name', header: 'Name', pinned: 'left' },
|
|
25
|
+
{ field: 'country', header: 'Country', filter: 'set' },
|
|
26
|
+
{ field: 'total', header: 'Total', type: 'number', format: '#,##0' },
|
|
27
|
+
],
|
|
28
|
+
data: rows,
|
|
29
|
+
rowSelection: 'multiple',
|
|
30
|
+
summary: { rows: [{ label: 'Total', columns: { total: 'sum' } }] },
|
|
31
|
+
});
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
The container needs a height. Languages: `import ko from '@freegridjs/core/locales/ko'` and pass `locale: ko`.
|
|
35
|
+
|
|
36
|
+
### CDN
|
|
37
|
+
|
|
38
|
+
```html
|
|
39
|
+
<link rel="stylesheet" href="https://freegrid.app/cdn/v0.1.0/freegrid.css">
|
|
40
|
+
<script src="https://freegrid.app/cdn/v0.1.0/freegrid.min.js"></script>
|
|
41
|
+
<script>FreeGrid.createGrid(el, { columns, data, locale: 'ko' });</script>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
MIT License
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
[class*="fg-theme-"] {
|
|
2
|
+
--fg-font: ui-sans-serif, system-ui, -apple-system, "Segoe UI", "Apple SD Gothic Neo", "Malgun Gothic", "Noto Sans", sans-serif;
|
|
3
|
+
--fg-font-size: 13px;
|
|
4
|
+
--fg-radius: 8px;
|
|
5
|
+
--fg-cell-px: 12px;
|
|
6
|
+
--fg-shadow: 0 12px 32px rgba(15, 23, 42, .16), 0 2px 6px rgba(15, 23, 42, .08);
|
|
7
|
+
}
|
|
8
|
+
.fg-theme-light {
|
|
9
|
+
--fg-bg: #ffffff; --fg-fg: #1f2430; --fg-muted: #6b7385;
|
|
10
|
+
--fg-header-bg: #f6f7f9; --fg-header-fg: #39404f; --fg-border: #e3e6eb; --fg-row-border: #eef0f3;
|
|
11
|
+
--fg-row-odd: #fbfbfc; --fg-row-hover: #f2f6ff; --fg-row-selected: #e3edff;
|
|
12
|
+
--fg-accent: #2563eb; --fg-accent-fg: #ffffff; --fg-focus: #2563eb; --fg-popup-bg: #ffffff; --fg-input-bg: #ffffff;
|
|
13
|
+
}
|
|
14
|
+
.fg-theme-dark {
|
|
15
|
+
--fg-bg: #11141b; --fg-fg: #e6e9f0; --fg-muted: #8c95a8;
|
|
16
|
+
--fg-header-bg: #171b24; --fg-header-fg: #c9cfdc; --fg-border: #262c38; --fg-row-border: #1c212b;
|
|
17
|
+
--fg-row-odd: #13171f; --fg-row-hover: #1a2233; --fg-row-selected: #1d3157;
|
|
18
|
+
--fg-accent: #4f8cff; --fg-accent-fg: #0b0d12; --fg-focus: #4f8cff; --fg-popup-bg: #171b24; --fg-input-bg: #0f1218;
|
|
19
|
+
--fg-shadow: 0 12px 32px rgba(0, 0, 0, .5);
|
|
20
|
+
color-scheme: dark;
|
|
21
|
+
}
|
|
22
|
+
.fg-root {
|
|
23
|
+
position: relative; display: flex; flex-direction: row; box-sizing: border-box;
|
|
24
|
+
width: 100%; height: 100%; overflow: hidden; outline: none;
|
|
25
|
+
font: var(--fg-font-size)/1.4 var(--fg-font); color: var(--fg-fg); background: var(--fg-bg);
|
|
26
|
+
border: 1px solid var(--fg-border); border-radius: var(--fg-radius);
|
|
27
|
+
border-top: var(--fg-top-border, 1px solid var(--fg-border));
|
|
28
|
+
font-variant-numeric: tabular-nums;
|
|
29
|
+
}
|
|
30
|
+
.fg-root *, .fg-menu * { box-sizing: border-box; }
|
|
31
|
+
.fg-main { position: relative; display: flex; flex-direction: column; flex: 1 1 auto; min-width: 0; overflow: hidden; }
|
|
32
|
+
.fg-root [hidden], .fg-menu [hidden] { display: none !important; }
|
|
33
|
+
.fg-header { display: flex; flex: none; background: var(--fg-header-bg); color: var(--fg-header-fg); border-bottom: var(--fg-header-border, 1px solid var(--fg-border)); }
|
|
34
|
+
.fg-header-pane { position: relative; overflow: hidden; flex: none; }
|
|
35
|
+
.fg-header-pane-center { flex: 1 1 0; min-width: 0; }
|
|
36
|
+
.fg-header-pane-left { border-right: 1px solid var(--fg-border); }
|
|
37
|
+
.fg-header-pane-right { border-left: 1px solid var(--fg-border); }
|
|
38
|
+
.fg-header-inner { position: relative; will-change: transform; }
|
|
39
|
+
.fg-header-cell {
|
|
40
|
+
position: absolute; display: flex; align-items: center; gap: 6px; padding: 0 var(--fg-cell-px);
|
|
41
|
+
font-weight: var(--fg-header-weight, 600); white-space: nowrap; overflow: hidden; user-select: none;
|
|
42
|
+
box-shadow: inset -1px -1px 0 var(--fg-header-line, var(--fg-row-border));
|
|
43
|
+
}
|
|
44
|
+
.fg-header-group { justify-content: center; }
|
|
45
|
+
.fg-header-cell.fg-sortable { cursor: pointer; }
|
|
46
|
+
.fg-header-cell.fg-align-right { flex-direction: row-reverse; }
|
|
47
|
+
.fg-header-label { overflow: hidden; text-overflow: ellipsis; flex: var(--fg-header-label-flex, 0 1 auto); text-align: var(--fg-header-text-align, left); }
|
|
48
|
+
.fg-sort-icon { color: var(--fg-accent); font-size: 12px; }
|
|
49
|
+
.fg-sort-icon sup { font-size: 9px; margin-left: 1px; }
|
|
50
|
+
.fg-menu-btn {
|
|
51
|
+
margin-left: auto; display: inline-grid; place-items: center; width: 22px; height: 22px; flex: none;
|
|
52
|
+
border: 0; border-radius: 5px; background: none; color: var(--fg-muted); cursor: pointer; opacity: 0; transition: opacity .12s;
|
|
53
|
+
}
|
|
54
|
+
.fg-header-cell.fg-align-right .fg-menu-btn { margin-left: 0; margin-right: auto; }
|
|
55
|
+
.fg-header-cell:hover .fg-menu-btn, .fg-menu-btn.fg-filter-active { opacity: 1; }
|
|
56
|
+
.fg-menu-btn:hover { background: var(--fg-row-hover); color: var(--fg-fg); }
|
|
57
|
+
.fg-menu-btn.fg-filter-active { color: var(--fg-accent); }
|
|
58
|
+
.fg-resize { position: absolute; right: 0; top: 0; bottom: 0; width: 8px; cursor: col-resize; z-index: 1; }
|
|
59
|
+
.fg-resize:hover, .fg-resizing .fg-resize:active { background: linear-gradient(90deg, transparent 5px, var(--fg-accent) 5px, var(--fg-accent) 8px); }
|
|
60
|
+
.fg-resizing { cursor: col-resize; user-select: none; }
|
|
61
|
+
.fg-header-cell.fg-dragging { opacity: .45; }
|
|
62
|
+
.fg-drop-marker { position: absolute; top: 0; width: 2px; background: var(--fg-accent); z-index: 5; pointer-events: none; }
|
|
63
|
+
.fg-drag-ghost {
|
|
64
|
+
position: fixed; left: 0; top: 0; z-index: 10000; pointer-events: none; padding: 6px 10px; border-radius: 6px;
|
|
65
|
+
font: 600 var(--fg-font-size) var(--fg-font); color: var(--fg-fg); background: var(--fg-popup-bg); box-shadow: var(--fg-shadow);
|
|
66
|
+
}
|
|
67
|
+
.fg-body { position: relative; display: flex; flex: 1 1 auto; min-height: 0; }
|
|
68
|
+
.fg-body-pane { position: relative; overflow: hidden; flex: none; }
|
|
69
|
+
.fg-body-pane-center { flex: 1 1 0; min-width: 0; overflow: auto; }
|
|
70
|
+
.fg-body-pane-left { border-right: 1px solid var(--fg-border); box-shadow: 4px 0 8px -6px rgba(0, 0, 0, .18); z-index: 1; }
|
|
71
|
+
.fg-body-pane-right { border-left: 1px solid var(--fg-border); box-shadow: -4px 0 8px -6px rgba(0, 0, 0, .18); z-index: 1; }
|
|
72
|
+
.fg-canvas { position: relative; }
|
|
73
|
+
.fg-row { position: absolute; left: 0; right: 0; top: 0; border-bottom: 1px solid var(--fg-row-border); background: var(--fg-bg); }
|
|
74
|
+
.fg-row-odd { background: var(--fg-row-odd); }
|
|
75
|
+
.fg-row:hover { background: var(--fg-row-hover); }
|
|
76
|
+
.fg-row-selected, .fg-row-selected:hover { background: var(--fg-row-selected); }
|
|
77
|
+
.fg-cell {
|
|
78
|
+
position: absolute; top: 0; bottom: 0; display: flex; align-items: center; padding: 0 var(--fg-cell-px);
|
|
79
|
+
white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
|
|
80
|
+
box-shadow: var(--fg-col-line, none);
|
|
81
|
+
}
|
|
82
|
+
.fg-cell.fg-align-right { justify-content: flex-end; }
|
|
83
|
+
.fg-cell.fg-align-center { justify-content: center; }
|
|
84
|
+
.fg-cell-focused { outline: 2px solid var(--fg-focus); outline-offset: -2px; border-radius: 2px; }
|
|
85
|
+
.fg-cell-select, .fg-header-select { justify-content: center; padding: 0; }
|
|
86
|
+
.fg-checkbox { width: 15px; height: 15px; margin: 0; accent-color: var(--fg-accent); cursor: pointer; }
|
|
87
|
+
.fg-summary { display: flex; flex: none; background: var(--fg-header-bg); font-weight: 600; }
|
|
88
|
+
.fg-summary-top { border-bottom: 1px solid var(--fg-border); }
|
|
89
|
+
.fg-summary-bottom { border-top: 1px solid var(--fg-border); }
|
|
90
|
+
.fg-summary-pane { position: relative; overflow: hidden; flex: none; }
|
|
91
|
+
.fg-summary-pane-center { flex: 1 1 0; min-width: 0; }
|
|
92
|
+
.fg-summary-pane-left { border-right: 1px solid var(--fg-border); }
|
|
93
|
+
.fg-summary-pane-right { border-left: 1px solid var(--fg-border); }
|
|
94
|
+
.fg-summary-inner { position: relative; will-change: transform; }
|
|
95
|
+
.fg-summary-row, .fg-summary-row:hover { background: var(--fg-header-bg); font-weight: 600; }
|
|
96
|
+
.fg-summary-label { color: var(--fg-muted); }
|
|
97
|
+
.fg-overlay { position: absolute; left: 0; right: 0; bottom: 0; display: grid; place-items: center; color: var(--fg-muted); pointer-events: none; }
|
|
98
|
+
.fg-menu {
|
|
99
|
+
position: fixed; z-index: 10000; width: 248px; padding: 6px; border-radius: 10px; overflow: auto; overscroll-behavior: contain;
|
|
100
|
+
font: var(--fg-font-size)/1.4 var(--fg-font); color: var(--fg-fg); background: var(--fg-popup-bg);
|
|
101
|
+
border: 1px solid var(--fg-border); box-shadow: var(--fg-shadow);
|
|
102
|
+
}
|
|
103
|
+
.fg-menu-section { display: flex; flex-direction: column; gap: 2px; padding: 4px 0; }
|
|
104
|
+
.fg-menu-section + .fg-menu-section { border-top: 1px solid var(--fg-border); }
|
|
105
|
+
.fg-menu-item { text-align: left; padding: 6px 10px; border: 0; border-radius: 6px; background: none; color: inherit; font: inherit; cursor: pointer; }
|
|
106
|
+
.fg-menu-item:hover, .fg-menu-item:focus-visible { background: var(--fg-row-hover); outline: none; }
|
|
107
|
+
.fg-menu-title { padding: 4px 10px 2px; font-size: 11px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--fg-muted); }
|
|
108
|
+
.fg-filter { gap: 6px; padding: 6px 4px; }
|
|
109
|
+
.fg-input, .fg-filter-op {
|
|
110
|
+
width: 100%; height: 30px; padding: 0 8px; border: 1px solid var(--fg-border); border-radius: 6px;
|
|
111
|
+
background: var(--fg-input-bg); color: inherit; font: inherit;
|
|
112
|
+
}
|
|
113
|
+
.fg-input:focus, .fg-filter-op:focus { outline: 2px solid var(--fg-focus); outline-offset: -1px; }
|
|
114
|
+
.fg-set-list { max-height: 220px; overflow: auto; display: flex; flex-direction: column; }
|
|
115
|
+
.fg-set-item { display: flex; align-items: center; gap: 8px; padding: 4px 6px; border-radius: 5px; cursor: pointer; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
116
|
+
.fg-set-item:hover { background: var(--fg-row-hover); }
|
|
117
|
+
.fg-set-all { font-weight: 600; }
|
|
118
|
+
.fg-set-more { padding: 4px 6px; color: var(--fg-muted); }
|
|
119
|
+
.fg-menu-actions { display: flex; justify-content: flex-end; gap: 6px; padding-top: 4px; }
|
|
120
|
+
.fg-btn { height: 28px; padding: 0 12px; border: 1px solid var(--fg-border); border-radius: 6px; background: none; color: inherit; font: inherit; cursor: pointer; }
|
|
121
|
+
.fg-btn:hover { background: var(--fg-row-hover); }
|
|
122
|
+
.fg-btn-primary { background: var(--fg-accent); border-color: var(--fg-accent); color: var(--fg-accent-fg); }
|
|
123
|
+
.fg-btn-primary:hover { background: var(--fg-accent); filter: brightness(1.08); }
|
|
124
|
+
.fg-sidebar { display: flex; flex: none; border-left: 1px solid var(--fg-border); background: var(--fg-header-bg); }
|
|
125
|
+
.fg-sidebar-panel { width: 240px; display: flex; flex-direction: column; border-right: 1px solid var(--fg-border); background: var(--fg-bg); }
|
|
126
|
+
.fg-sidebar-tabs { width: 28px; display: flex; flex-direction: column; }
|
|
127
|
+
.fg-sidebar-tab {
|
|
128
|
+
writing-mode: vertical-rl; padding: 12px 0; border: 0; background: none; color: var(--fg-header-fg);
|
|
129
|
+
font: 600 var(--fg-font-size) var(--fg-font); cursor: pointer;
|
|
130
|
+
}
|
|
131
|
+
.fg-sidebar-tab[aria-expanded="true"] { color: var(--fg-accent); box-shadow: inset 2px 0 var(--fg-accent); }
|
|
132
|
+
.fg-chooser { display: flex; flex-direction: column; gap: 6px; padding: 8px; min-height: 0; flex: 1; }
|
|
133
|
+
.fg-chooser-dialog { width: 280px; }
|
|
134
|
+
.fg-chooser-dialog .fg-chooser { max-height: 420px; }
|
|
135
|
+
.fg-chooser-head { display: flex; align-items: center; justify-content: space-between; padding: 2px 2px 0 0; }
|
|
136
|
+
.fg-chooser-close { width: 26px; height: 26px; border: 0; border-radius: 6px; background: none; color: var(--fg-muted); font-size: 18px; cursor: pointer; }
|
|
137
|
+
.fg-chooser-close:hover { background: var(--fg-row-hover); color: var(--fg-fg); }
|
|
138
|
+
.fg-chooser-all { display: flex; align-items: center; gap: 8px; padding: 4px 6px; font-weight: 600; cursor: pointer; }
|
|
139
|
+
.fg-chooser-list { position: relative; overflow: auto; flex: 1; min-height: 0; }
|
|
140
|
+
.fg-chooser-item { display: flex; align-items: center; gap: 6px; height: 28px; padding-right: 6px; border-radius: 6px; white-space: nowrap; }
|
|
141
|
+
.fg-chooser-item:hover { background: var(--fg-row-hover); }
|
|
142
|
+
.fg-chooser-item.fg-dragging { opacity: .45; }
|
|
143
|
+
.fg-chooser-group > .fg-chooser-label { font-weight: 600; }
|
|
144
|
+
.fg-chooser-handle { color: var(--fg-muted); cursor: grab; letter-spacing: -3px; padding: 0 4px 0 0; user-select: none; }
|
|
145
|
+
.fg-chooser-caret { width: 16px; border: 0; background: none; color: var(--fg-muted); cursor: pointer; padding: 0; }
|
|
146
|
+
.fg-chooser-label { overflow: hidden; text-overflow: ellipsis; }
|
|
147
|
+
.fg-chooser-pin { margin-left: auto; color: var(--fg-muted); font-size: 11px; }
|
|
148
|
+
.fg-chooser-marker { position: absolute; left: 0; right: 0; height: 2px; background: var(--fg-accent); pointer-events: none; }
|
|
149
|
+
|
|
150
|
+
/* ── Korean-style themes: simple lines, centered headers ─────────────────── */
|
|
151
|
+
.fg-theme-board, .fg-theme-erp, .fg-theme-excel, .fg-theme-classic {
|
|
152
|
+
--fg-font: "Pretendard Variable", Pretendard, "Malgun Gothic", "Apple SD Gothic Neo", "Noto Sans KR", ui-sans-serif, system-ui, sans-serif;
|
|
153
|
+
--fg-header-label-flex: 1 1 auto; --fg-header-text-align: center;
|
|
154
|
+
--fg-popup-bg: #ffffff; --fg-input-bg: #ffffff; --fg-accent-fg: #ffffff; --fg-shadow: 0 8px 24px rgba(0, 0, 0, .14);
|
|
155
|
+
}
|
|
156
|
+
/* 게시판형: thick top rule, light grey header, horizontal lines only */
|
|
157
|
+
.fg-theme-board {
|
|
158
|
+
--fg-radius: 0; --fg-bg: #ffffff; --fg-fg: #222222; --fg-muted: #767676;
|
|
159
|
+
--fg-header-bg: #f7f7f7; --fg-header-fg: #222222; --fg-border: #dddddd; --fg-row-border: #e5e5e5;
|
|
160
|
+
--fg-row-odd: #ffffff; --fg-row-hover: #f6f8fb; --fg-row-selected: #eef3fc;
|
|
161
|
+
--fg-accent: #1f5bd6; --fg-focus: #1f5bd6;
|
|
162
|
+
--fg-top-border: 2px solid #222222; --fg-header-border: 1px solid #bbbbbb; --fg-header-line: transparent;
|
|
163
|
+
}
|
|
164
|
+
.fg-theme-board.fg-root { border-left: 0; border-right: 0; }
|
|
165
|
+
/* 관리자·ERP형: every cell bordered, blue-grey header, compact */
|
|
166
|
+
.fg-theme-erp {
|
|
167
|
+
--fg-font-size: 12px; --fg-radius: 2px; --fg-cell-px: 8px;
|
|
168
|
+
--fg-bg: #ffffff; --fg-fg: #333333; --fg-muted: #7a8494;
|
|
169
|
+
--fg-header-bg: #eef2f7; --fg-header-fg: #2b3442; --fg-border: #c5ceda; --fg-row-border: #dde3eb;
|
|
170
|
+
--fg-row-odd: #fafbfd; --fg-row-hover: #eef5ff; --fg-row-selected: #fff6d5;
|
|
171
|
+
--fg-accent: #2f6fde; --fg-focus: #2f6fde;
|
|
172
|
+
--fg-col-line: inset -1px 0 #dde3eb; --fg-header-line: #c5ceda;
|
|
173
|
+
}
|
|
174
|
+
/* 엑셀형: gridlines, plain grey header, green focus */
|
|
175
|
+
.fg-theme-excel {
|
|
176
|
+
--fg-radius: 0; --fg-cell-px: 8px;
|
|
177
|
+
--fg-bg: #ffffff; --fg-fg: #1f1f1f; --fg-muted: #6e6e6e;
|
|
178
|
+
--fg-header-bg: #f3f3f3; --fg-header-fg: #444444; --fg-header-weight: 500;
|
|
179
|
+
--fg-border: #d4d4d4; --fg-row-border: #e2e2e2;
|
|
180
|
+
--fg-row-odd: #ffffff; --fg-row-hover: #f7f7f7; --fg-row-selected: #e6f2ea;
|
|
181
|
+
--fg-accent: #107c41; --fg-focus: #107c41;
|
|
182
|
+
--fg-col-line: inset -1px 0 #e2e2e2; --fg-header-line: #d4d4d4;
|
|
183
|
+
}
|
|
184
|
+
/* 진한 헤더형: calm navy header with white text */
|
|
185
|
+
.fg-theme-classic {
|
|
186
|
+
--fg-radius: 4px; --fg-bg: #ffffff; --fg-fg: #2a2f37; --fg-muted: #6b7380;
|
|
187
|
+
--fg-header-bg: #3d4b63; --fg-header-fg: #ffffff; --fg-border: #cfd5de; --fg-row-border: #e3e7ed;
|
|
188
|
+
--fg-row-odd: #f8f9fb; --fg-row-hover: #eef2f8; --fg-row-selected: #e2e9f5;
|
|
189
|
+
--fg-accent: #3d4b63; --fg-focus: #3d6bb3;
|
|
190
|
+
--fg-col-line: inset -1px 0 #e3e7ed; --fg-header-line: #56657e;
|
|
191
|
+
}
|
|
192
|
+
.fg-theme-classic .fg-menu-btn { color: #c9d2e0; }
|
|
193
|
+
.fg-theme-classic .fg-menu-btn:hover { background: rgba(255, 255, 255, .12); color: #ffffff; }
|
|
194
|
+
.fg-theme-classic .fg-sort-icon, .fg-theme-classic .fg-menu-btn.fg-filter-active { color: #ffd166; }
|
|
195
|
+
.fg-theme-classic .fg-sidebar-tab { color: #3d4b63; }
|
|
196
|
+
.fg-theme-board .fg-header-cell, .fg-theme-erp .fg-header-cell, .fg-theme-excel .fg-header-cell, .fg-theme-classic .fg-header-cell { flex-direction: row; justify-content: center; }
|
|
197
|
+
.fg-theme-board .fg-menu-btn, .fg-theme-erp .fg-menu-btn, .fg-theme-excel .fg-menu-btn, .fg-theme-classic .fg-menu-btn {
|
|
198
|
+
position: absolute; right: 6px; top: 50%; transform: translateY(-50%); margin: 0;
|
|
199
|
+
}
|
|
200
|
+
.fg-theme-board .fg-header-label, .fg-theme-erp .fg-header-label, .fg-theme-excel .fg-header-label, .fg-theme-classic .fg-header-label { flex: 0 1 auto; }
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var We={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",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"}},k=We;var ae=new Set;function y(r){ae.has(r)||(ae.add(r),console.warn(`[FreeGrid] ${r}`))}var A=new Map([["en",k]]);function J(r){A.set(r.code,r)}function ce(r){let e=r.toLowerCase();for(let n of A.keys())if(n.toLowerCase()===e)return n;let t=e.split("-")[0];if(t==="zh"&&A.has("zh-CN"))return"zh-CN";for(let n of A.keys())if(n.toLowerCase().split("-")[0]===t)return n}function Ge(){return typeof navigator>"u"?[]:navigator.languages?.length?navigator.languages:navigator.language?[navigator.language]:[]}function _e(r){return{...k,...r,code:r.code??"en",ops:{...k.ops,...r.ops??{}}}}function O(r,e=Ge()){if(r&&typeof r=="object")return _e(r);if(typeof r=="string"){let t=ce(r);return t?A.get(t):(y(`locale "${r}" is not registered \u2014 import it from "@freegridjs/core/locales/${r}" and pass the pack (or call registerLocale). Falling back to "en".`),k)}for(let t of e){let n=ce(t);if(n)return A.get(n)}return k}var Ve={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",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"}},de=Ve;var Ke={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",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"}},ue=Ke;var je={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",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"}},he=je;var Ue={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",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"}},fe=Ue;var Ye={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",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"}},me=Ye;var Xe={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",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"}},pe=Xe;var v="__fg_select__",ge={id:v,header:"",width:44,minWidth:44,maxWidth:44,pinned:"left",sortable:!1,resizable:!1,filter:!1},Ze=120,Qe=40,Je=["left","center","right"];function q(r){if(r.id===v||r.filter===!1)return null;if(r.filter)return r.filter;switch(r.type){case"number":return"number";case"date":return"date";case"boolean":return"set";default:return"text"}}var N=r=>r.id!==v&&r.sortable!==!1,W=r=>r.id!==v&&r.resizable!==!1;function z(r,e){let t=r.minWidth??Qe,n=r.maxWidth??1/0;return Math.round(Math.min(n,Math.max(t,e)))}function ye(r){return r.children?1+Math.max(0,...r.children.map(ye)):1}var B=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,l)=>{let a=Array.isArray(o.children)&&o.children.length>0,c=t++,d=o.id??(a?`g${c}`:o.field);if(d||(d=`c${c}`,y(`column #${c} has neither "field" nor "id"; using "${d}"`)),this.byId.has(d)){let f=1;for(;this.byId.has(`${d}_${f}`);)f++;y(`duplicate column id "${d}"; renamed to "${d}_${f}"`),d=`${d}_${f}`}let u={id:d,def:o,parent:i,children:null,depth:l,width:z(o,o.width??Ze),flex:o.flex&&o.flex>0?o.flex:null,hide:o.hide??!1,pinned:o.pinned??i?.pinned??null};return this.byId.set(d,u),a&&(u.children=s(o.children).map(f=>n(f,u,l+1))),u},s=o=>{let i=o.filter(l=>l!==null&&typeof l=="object");return i.length!==o.length&&y("columns contain entries that are not objects; they were skipped"),i};this.roots_=s(e).map(o=>n(o,null,0)),this.depth=Math.max(1,...this.roots_.map(ye)),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=z(n.def,t),this.relayout(),n.width)}setPinned(e,t){let n=this.byId.get(e);!n||n.children||e===v||(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),s=n.findIndex(i=>i.id===e);if(s<0)return;let[o]=n.splice(s,1);n.splice(Math.max(0,Math.min(n.length,t)),0,o),this.relayout()}headerCells(e){let t=[],n=new Map;for(let s of this.layout[e]){let o=[];for(let i=s.node.parent;i;i=i.parent)o.unshift(i);for(let i of o){let l=n.get(i.id);if(l){l.width+=s.width;continue}let a={id:i.id,label:i.def.header??"",isGroup:!0,column:null,node:i,row:i.depth,rowSpan:1,left:s.left,width:s.width};n.set(i.id,a),t.push(a)}t.push({id:s.id,label:s.def.header??s.def.field??"",isGroup:!1,column:s,node:s.node,row:s.node.depth,rowSpan:this.depth-s.node.depth,left:s.left,width:s.width})}return t}getState(){return this.leafNodes().filter(e=>e.id!==v).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 l=this.byId.get(o.colId);!l||l.children||o.colId===v||(l.flex=null,l.width=z(l.def,o.width),l.hide=o.hide,l.pinned=o.pinned)}),t.set(v,-1);let n=o=>o.children?Math.min(1/0,...o.children.map(n)):t.get(o.id)??1/0,s=o=>{let i=o.map((l,a)=>({n:l,i:a,r:n(l)}));i.sort((l,a)=>l.r===a.r?l.i-a.i:l.r-a.r),o.splice(0,o.length,...i.map(l=>l.n));for(let l of o)l.children&&s(l.children)};s(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(a=>!a.hide),t=e.reduce((a,c)=>a+(c.flex?0:c.width),0),n=e.reduce((a,c)=>a+(c.flex??0),0),s=Math.max(0,this.containerWidth-t),o=a=>a.flex?z(a.def,Math.floor(s*a.flex/n)):a.width,i={left:[],center:[],right:[]};this.leafById=new Map;let l=0;for(let a of Je){let c=0;for(let d of e){if((d.pinned??"center")!==a)continue;let u={id:d.id,def:d.def,node:d,width:o(d),region:a,left:c,index:l++};c+=u.width,i[a].push(u),this.leafById.set(d.id,u)}}this.layout=i}};var H=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 s of[...n])try{s(t)}catch(o){console.error("[FreeGrid] event listener threw",o)}}clear(){this.listeners.clear()}};function L(r){return r==null||typeof r=="string"&&r.trim()===""||typeof r=="number"&&Number.isNaN(r)}var we=r=>String(r).padStart(2,"0");function G(r){if(L(r))return null;if(typeof r=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(r))return r;let e=r instanceof Date?r:new Date(r);return Number.isNaN(e.getTime())?null:`${e.getFullYear()}-${we(e.getMonth()+1)}-${we(e.getDate())}`}function F(r){return L(r)?"":r instanceof Date?G(r)??"":String(r)}var T=()=>!0;function ve(r){switch(r.type){case"text":{let e=(r.value??"").toLowerCase(),t=n=>L(n)?"":String(n).toLowerCase();switch(r.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 L;case"notBlank":return n=>!L(n)}return T}case"number":{let e=n=>L(n)?NaN:Number(n);if(r.op==="blank")return n=>Number.isNaN(e(n));if(r.op==="notBlank")return n=>!Number.isNaN(e(n));let t=r.value;if(t==null||Number.isNaN(t))return T;switch(r.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=r.valueTo;if(n==null||Number.isNaN(n))return T;let s=Math.min(t,n),o=Math.max(t,n);return i=>{let l=e(i);return l>=s&&l<=o}}}return T}case"date":{if(r.op==="blank")return n=>G(n)===null;if(r.op==="notBlank")return n=>G(n)!==null;let e=r.value;if(!e)return T;let t=n=>G(n);switch(r.op){case"equals":return n=>t(n)===e;case"before":return n=>{let s=t(n);return s!==null&&s<e};case"after":return n=>{let s=t(n);return s!==null&&s>e};case"between":{let n=r.valueTo;if(!n)return T;let s=e<n?e:n,o=e<n?n:e;return i=>{let l=t(i);return l!==null&&l>=s&&l<=o}}}return T}case"set":{let e=new Set(r.values.map(F));return t=>e.has(F(t))}}return T}function be(r){let e=r.trim().toLowerCase();return e?e.split(/\s+/):[]}function xe(r,e){return r.every(t=>e.includes(t))}var Ce=new Map;function et(r){if(r==="integer")return{maximumFractionDigits:0};if(r==="percent")return{style:"percent"};if(r.startsWith("currency:"))return{style:"currency",currency:r.slice(9)};if(!/^[#0,]*(\.[#0]+)?%?$/.test(r)||!/[#0]/.test(r))return null;let e=r.endsWith("%"),t=e?r.slice(0,-1):r,n=t.includes(".")?t.split(".")[1]:"";return{useGrouping:t.includes(","),minimumFractionDigits:(n.match(/0/g)??[]).length,maximumFractionDigits:n.length,...e?{style:"percent"}:{}}}var _={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 ee(r){if(L(r))return null;if(r instanceof Date)return Number.isNaN(r.getTime())?null:r;if(typeof r=="string"){let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(r);if(t)return new Date(Number(t[1]),Number(t[2])-1,Number(t[3]))}if(typeof r!="string"&&typeof r!="number")return null;let e=new Date(r);return Number.isNaN(e.getTime())?null:e}function tt(r,e,t){switch(r){case"number":{let n={};if(typeof e=="string"){let o=et(e);o||y(`unknown number format "${e}"`),n=o??{}}else e&&(n=e);let s=new Intl.NumberFormat(t,n);return o=>{if(L(o))return"";let i=typeof o=="number"?o:Number(o);return Number.isNaN(i)?String(o):s.format(i)}}case"date":{let n=_.date;typeof e=="string"?(_[e]||y(`unknown date format "${e}"`),n=_[e]??_.date):e&&(n=e);let s=new Intl.DateTimeFormat(t,n);return o=>{let i=ee(o);return i?s.format(i):L(o)?"":String(o)}}case"boolean":return n=>n===!0?"\u2713":n===!1?"\u2717":"";default:return n=>L(n)?"":n instanceof Date?n.toISOString():String(n)}}function I(r,e){let t=r.format,n=`${e}|${r.type??"text"}|${typeof t=="string"?t:JSON.stringify(t??null)}`,s=Ce.get(n);return s||(s=tt(r.type,t,e),Ce.set(n,s)),s}var Le=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Tab","Home","End","PageUp","PageDown"]);function Se(r,e,t,n){let s=i=>Math.max(0,Math.min(n.rows-1,i)),o=i=>Math.max(0,Math.min(n.cols-1,i));switch(r){case"ArrowUp":return{rowIndex:s(t.rowIndex-1),colIndex:t.colIndex};case"ArrowDown":return{rowIndex:s(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:s(t.rowIndex-n.pageRows),colIndex:t.colIndex};case"PageDown":return{rowIndex:s(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}}function M(r,e){if(r.valueGetter)try{return r.valueGetter(e)}catch{y(`valueGetter of column "${r.id??r.field}" threw; rendering an empty cell`);return}return r.field!=null?e[r.field]:void 0}function Ee(r){let{renderer:e}=r,t=e.bodyEl,n=e.root,s=a=>{let c=e.cellAt(a.target);if(!c)return null;let d=r.rowModel.getRow(c.rowIndex),u=r.columns.getColumn(c.colId);if(!d||!u)return null;let f=u.id===v?void 0:M(u.def,d.data);return{row:d.data,rowIndex:c.rowIndex,colId:c.colId,value:f,event:a}},o=a=>{let c=s(a);if(c){if(n.focus({preventScroll:!0}),r.setFocus(c.rowIndex,c.colId),r.options.rowSelection){let d=c.colId===v;r.selectFromClick(c.rowIndex,d||a.ctrlKey||a.metaKey,a.shiftKey)}r.events.emit("cellClick",c)}},i=a=>{let c=s(a);c&&r.events.emit("cellDoubleClick",c)},l=a=>{if(a.target!==n)return;let c=r.columns.displayed(),d=r.rowModel.getRowCount();if(!c.length||!d)return;let u=r.store.state.focus;if(a.key===" "&&u&&r.options.rowSelection){a.preventDefault(),r.selectFromClick(Math.min(u.rowIndex,d-1),!0,a.shiftKey);return}let f;if(!u)f=Le.has(a.key)&&a.key!=="Tab"?{rowIndex:0,colIndex:0}:null;else{let p=Math.max(0,c.findIndex(g=>g.id===u.colId));f=Se(a.key,{ctrl:a.ctrlKey||a.metaKey,shift:a.shiftKey},{rowIndex:Math.min(u.rowIndex,d-1),colIndex:p},{rows:d,cols:c.length,pageRows:e.pageRows()})}if(!f)return;a.preventDefault();let m=c[f.colIndex].id;r.setFocus(f.rowIndex,m),e.ensureVisible(f.rowIndex,m)};return t.addEventListener("click",o),t.addEventListener("dblclick",i),n.addEventListener("keydown",l),()=>{t.removeEventListener("click",o),t.removeEventListener("dblclick",i),n.removeEventListener("keydown",l)}}function te(r){let e=[];for(let t of r){if(L(t)||t instanceof Date)continue;let n=typeof t=="number"?t:Number(t);Number.isNaN(n)||e.push(n)}return e}function Me(r,e){let t=r.filter(s=>s instanceof Date&&!Number.isNaN(s.getTime()));if(t.length)return t.reduce((s,o)=>(e?o>s:o<s)?o:s);let n=te(r);return n.length?e?Math.max(...n):Math.min(...n):null}function nt(r,e,t){if(typeof r=="function")return r(e,t);switch(r){case"sum":return te(e).reduce((n,s)=>n+s,0);case"avg":{let n=te(e);return n.length?n.reduce((s,o)=>s+o,0)/n.length:null}case"min":return Me(e,!1);case"max":return Me(e,!0);case"count":return t.length}return null}function ne(r){return typeof r=="object"&&r!==null&&"agg"in r?r:{agg:r}}function ke(r,e,t){let n=new Map,s=(o,i)=>{let l=n.get(o);return l||n.set(o,l=e.map(a=>M(i,a))),l};return r.map(o=>{let i={};for(let[l,a]of Object.entries(o.columns??{})){let c=t(l);c&&(i[l]=nt(ne(a).agg,s(l,c),e))}return i})}function Re(r,e,t,n,s=4){if(n<=0||t<=0)return{first:0,last:-1};let o=Math.max(0,Math.floor(r/t)-s),i=Math.floor((r+e)/t);return{first:Math.min(o,n-1),last:Math.min(n-1,i+s)}}function oe(r,e,t,n,s=2){let o=r.length;if(!o)return{first:0,last:-1};let i=0,l=o-1;for(;i<l;){let d=i+l>>1;r[d]+e[d]<=t?i=d+1:l=d}let a=i,c=t+n;for(l=o-1;i<l;){let d=i+l+1>>1;r[d]<c?i=d:l=d-1}return{first:Math.max(0,a-s),last:Math.min(o-1,Math.max(a,i)+s)}}var D=["left","center","right"],ot=6,Te=2,rt='<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>',st='<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 h(r,e="",t={}){let n=document.createElement(r);e&&(n.className=e);for(let[s,o]of Object.entries(t))n.setAttribute(s,o);return n}var V=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.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=h("div","",{role:"grid",tabindex:"0"}),this.headerEl=h("div","fg-header",{role:"rowgroup"}),this.bodyEl=h("div","fg-body",{role:"rowgroup"});let s=o=>({left:h("div",`${o} ${o}-left`),center:h("div",`${o} ${o}-center`),right:h("div",`${o} ${o}-right`)});this.headerPanes=s("fg-header-pane"),this.headerInners=s("fg-header-inner"),this.bodyPanes=s("fg-body-pane"),this.canvases=s("fg-canvas");for(let o of D)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=h("div","fg-overlay",{role:"status"}),this.main=h("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:s}=this.grid,{rowHeight:o,headerHeight:i}=this.opts,l=this.scroller.offsetWidth-this.scroller.clientWidth;e.setContainerWidth(Math.max(0,this.main.clientWidth-l))&&(this.headerDirty=!0,this.version++);let a=t.getRowCount(),c=this.grid.summary(),d=c?c.opts.rows.length:0,u=c?.opts.position??"bottom",f=c?c.opts.pinned!==!1:!1;this.topOffset=c&&!f&&u==="top"?d*o:0;let m=c&&!f&&u==="bottom"?d*o:0;this.syncSummaryPane(c&&f?u:null,d*o);let p=e.depth*i;this.headerEl.style.height=`${p}px`;for(let E of D){let S=e.regionWidth(E);E!=="center"&&(this.headerPanes[E].style.width=this.bodyPanes[E].style.width=`${S}px`,this.headerPanes[E].hidden=this.bodyPanes[E].hidden=S===0),this.canvases[E].style.width=`${S}px`,this.canvases[E].style.height=`${a*o+this.topOffset+m}px`}let g=this.scroller.offsetHeight-this.scroller.clientHeight;this.bodyPanes.left.style.marginBottom=this.bodyPanes.right.style.marginBottom=`${g}px`,this.root.setAttribute("aria-rowcount",String(a+e.depth)),this.root.setAttribute("aria-colcount",String(e.displayed().length)),s.rowSelection==="multiple"&&this.root.setAttribute("aria-multiselectable","true"),this.headerDirty&&(this.headerDirty=!1,this.renderHeader()),this.renderRows(a),this.renderSummary(a,c&&c.opts.rows,c?.values??[],f,u),this.overlay.hidden=a>0,this.overlay.textContent=n.state.locale.noRows,this.overlay.style.top=`${p}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)`)}renderHeader(){let{columns:e,store:t}=this.grid,{sort:n,filters:s,locale:o}=t.state;for(let i of D){let l=this.headerInners[i];l.style.width=`${e.regionWidth(i)}px`,l.style.height=`${e.depth*this.opts.headerHeight}px`,l.replaceChildren(...e.headerCells(i).map(a=>this.headerCell(a,n,s,o)))}}headerCell(e,t,n,s){let o=this.opts.headerHeight,i=h("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`,e.id===v)return i.classList.add("fg-header-select"),i.append(this.selectAllBox(s)),i;let l=h("span","fg-header-label");if(l.textContent=e.label,i.append(l),e.isGroup||!e.column)return i;let a=e.node.def;i.setAttribute("aria-colindex",String(e.column.index+1)),(a.align??(a.type==="number"?"right":"left"))==="right"&&i.classList.add("fg-align-right");let c=t.findIndex(d=>d.colId===e.id);if(i.setAttribute("aria-sort",c<0?"none":t[c].dir==="asc"?"ascending":"descending"),N(a)&&i.classList.add("fg-sortable"),c>=0){let d=h("span","fg-sort-icon");if(d.textContent=t[c].dir==="asc"?"\u2191":"\u2193",t.length>1){let u=h("sup");u.textContent=String(c+1),d.append(u)}i.append(d)}if(N(a)||q(a)){let d=!!n[e.id],u=h("button",d?"fg-menu-btn fg-filter-active":"fg-menu-btn",{type:"button",tabindex:"-1","aria-label":s.columnMenu});u.innerHTML=d?st:rt,i.append(u)}return W(a)&&i.append(h("div","fg-resize",{"aria-hidden":"true"})),i}selectAllBox(e){let t=this.grid.rowModel.rows(),n=this.grid.store.state.selected,s=0;for(let i of t)n.has(i.id)&&s++;let o=h("input","fg-checkbox fg-select-all",{type:"checkbox",tabindex:"-1","aria-label":e.selectAllRows});return o.checked=t.length>0&&s===t.length,o.indeterminate=s>0&&s<t.length,o.hidden=this.grid.options.rowSelection!=="multiple",o}renderRows(e){let{columns:t,rowModel:n,store:s}=this.grid,{selected:o,focus:i}=s.state,l=Re(Math.max(0,this.scroller.scrollTop-this.topOffset),this.scroller.clientHeight,this.opts.rowHeight,e,ot);this.lastRange=l;let a=t.region("center"),c=oe(a.map(d=>d.left),a.map(d=>d.width),this.scroller.scrollLeft,this.scroller.clientWidth,Te);for(let d of D){let u=d==="center"?a.slice(c.first,c.last+1):t.region(d),f=this.painted[d];for(let[p,g]of f)p>=l.first&&p<=l.last&&u.length||(g.el.remove(),this.pool[d].push(g.el),f.delete(p));if(!u.length)continue;let m=d==="center"?`${c.first}-${c.last}`:"";for(let p=l.first;p<=l.last;p++){let g=n.getRow(p),b=o.has(g.id),C=i&&i.rowIndex===p?i.colId:"",E=`${g.id}|${this.version}|${m}|${b?1:0}|${C}`,S=f.get(p);if(!S){let P=this.pool[d].pop()??h("div","fg-row",{role:"row"});this.canvases[d].append(P),S={el:P,key:""},f.set(p,S)}S.key!==E&&(S.key=E,this.paintRow(S.el,g,p,u,b,C))}}}paintRow(e,t,n,s,o,i){let l=this.opts.rowHeight;for(e.className=`fg-row${n%2?" fg-row-odd":""}${o?" fg-row-selected":""}`,e.style.transform=`translateY(${n*l+this.topOffset}px)`,e.style.height=`${l}px`,e.dataset.row=String(n),e.setAttribute("aria-rowindex",String(n+1+this.grid.columns.depth)),this.grid.options.rowSelection&&e.setAttribute("aria-selected",String(o));e.childElementCount>s.length;)e.lastElementChild.remove();for(;e.childElementCount<s.length;)e.append(h("div","fg-cell",{role:"gridcell"}));s.forEach((a,c)=>this.paintCell(e.children[c],t,n,a,o,i===a.id))}paintCell(e,t,n,s,o,i){let l=this.grid.store.state.locale;e.style.left=`${s.left}px`,e.style.width=`${s.width}px`,e.dataset.col=s.id,e.setAttribute("aria-colindex",String(s.index+1));let a=i?"fg-cell fg-cell-focused":"fg-cell";if(s.id===v){e.className=`${a} fg-cell-select`;let m=h("input","fg-checkbox",{type:"checkbox",tabindex:"-1","aria-label":l.selectRow});m.checked=o,e.replaceChildren(m);return}let c=s.def,d=M(c,t.data),u=I(c,l.code)(d);a+=` fg-align-${c.align??(c.type==="number"?"right":c.type==="boolean"?"center":"left")}`;let f={value:d,formatted:u,row:t.data,rowIndex:n,column:c};if(c.cellClass)try{let m=typeof c.cellClass=="function"?c.cellClass(f):c.cellClass;m&&(a+=` ${m}`)}catch{y(`cellClass of column "${s.id}" threw`)}if(e.className=a,!c.renderer){e.textContent=u;return}try{let m=c.renderer(f);typeof m=="string"?e.innerHTML=m:e.replaceChildren(m)}catch{y(`renderer of column "${s.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?null:{rowIndex:Number(n.dataset.row),colId:t.dataset.col}}ensureVisible(e,t){let n=this.scroller,s=e*this.opts.rowHeight+this.topOffset,o=s+this.opts.rowHeight;s<n.scrollTop?n.scrollTop=s: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 o=i=>({left:h("div",`${i} ${i}-left`),center:h("div",`${i} ${i}-center`),right:h("div",`${i} ${i}-right`)});this.summaryEl=h("div","fg-summary",{role:"rowgroup"}),this.summaryPanes=o("fg-summary-pane"),this.summaryInners=o("fg-summary-inner");for(let i of D)this.summaryPanes[i].append(this.summaryInners[i]),this.summaryEl.append(this.summaryPanes[i])}this.summaryEl.className=`fg-summary fg-summary-${e}`;let n=e==="top"?this.bodyEl:this.overlay;this.summaryEl.nextElementSibling!==n&&this.main.insertBefore(this.summaryEl,n),this.summaryEl.style.height=`${t}px`;for(let o of D){let i=this.grid.columns.regionWidth(o);o!=="center"&&(this.summaryPanes[o].style.width=`${i}px`,this.summaryPanes[o].hidden=i===0),this.summaryInners[o].style.width=`${i}px`,this.summaryInners[o].style.height=`${t}px`}let s=this.scroller.offsetWidth-this.scroller.clientWidth;this.summaryPanes.center.style.marginRight=`${s}px`}renderSummary(e,t,n,s,o){for(let u of D){for(let f of this.canvasSummary[u])f.remove();this.canvasSummary[u]=[]}if(!t)return;let{columns:i}=this.grid,l=this.opts.rowHeight,a=i.region("center"),c=oe(a.map(u=>u.left),a.map(u=>u.width),this.scroller.scrollLeft,this.scroller.clientWidth,Te),d=i.displayed().filter(u=>u.id!==v);for(let u of D){let f=u==="center"?a.slice(c.first,c.last+1):i.region(u),m=t.map((p,g)=>{let b=p.label!=null?d.find(S=>!(S.id in(p.columns??{})))?.id??null:null,C=h("div","fg-row fg-summary-row",{role:"row"}),E=s||o==="top"?g*l:e*l+g*l;C.style.transform=`translateY(${E}px)`,C.style.height=`${l}px`;for(let S of f)C.append(this.summaryCell(S,p,n[g]??{},b));return C});s?this.summaryInners[u].replaceChildren(...m):(this.canvases[u].append(...m),this.canvasSummary[u]=m)}}summaryCell(e,t,n,s){let o=h("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,l=i.align??(i.type==="number"?"right":i.type==="boolean"?"center":"left");o.className=`fg-cell fg-align-${l}`;let a=t.columns?.[e.id];if(a===void 0)return e.id===s&&(o.textContent=t.label??"",o.classList.add("fg-summary-label")),o;let c=n[e.id],d=ne(a),u=this.grid.store.state.locale.code,f;if(c==null||c==="")f="";else if(typeof c=="string")f=c;else if(d.agg==="count")f=new Intl.NumberFormat(u).format(c);else{let m=i.type??(typeof c=="number"?"number":c instanceof Date?"date":void 0);f=I({...i,type:m,format:d.format??i.format},u)(c)}return o.textContent=d.prefix&&f?`${d.prefix} ${f}`:f,o}renderedRange(){return this.lastRange}measureText(e,t){let n=getComputedStyle(this.main),s=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} ${s}px ${n.fontFamily||"sans-serif"}`,o.measureText(e).width):e.length*s*.6}scrollToRow(e){this.scroller.scrollTop=Math.max(0,e)*this.opts.rowHeight+this.topOffset}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()}};var it=4,K=r=>r.id!==v&&(r.children?r.children.some(K):r.def.chooser!==!1),re=r=>r.def.header??r.def.field??r.id,j=class{constructor(e){this.grid=e;this.collapsed=new Set;this.el=h("div","fg-chooser"),this.search=h("input","fg-input fg-chooser-search",{type:"search"});let t=h("label","fg-chooser-all");this.allBox=h("input","fg-checkbox",{type:"checkbox"}),this.allText=h("span"),t.append(this.allBox,this.allText),this.list=h("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 s=n.target,o=this.nodeOf(s);o&&this.setVisible(this.leavesOf(o),s.checked)}),this.list.addEventListener("click",n=>{let s=n.target.closest(".fg-chooser-caret"),o=s&&this.nodeOf(s);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=[],s=(l,a)=>{for(let c of l)!K(c)||t&&!this.subtreeMatches(c,t)||(n.push(this.item(c,a)),c.children&&(t||!this.collapsed.has(c.id))&&s(c.children,a+1))};s(this.grid.columns.roots(),0),this.list.replaceChildren(...n);let o=this.matchingLeaves(),i=o.filter(l=>!l.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(re(n).toLowerCase().includes(t))return!0;return!!e.children&&e.children.some(n=>K(n)&&this.subtreeMatches(n,t))}leavesOf(e){return K(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=h("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 s=h("span","fg-chooser-handle",{"aria-hidden":"true"});if(s.textContent="\u22EE\u22EE",n.append(s),e.children){let c=!this.collapsed.has(e.id),d=h("button","fg-chooser-caret",{type:"button",tabindex:"-1","aria-hidden":"true"});d.textContent=c?"\u25BE":"\u25B8",n.setAttribute("aria-expanded",String(c)),n.append(d)}let o=this.leavesOf(e),i=o.filter(c=>!c.hide).length,l=h("input","fg-checkbox",{type:"checkbox","aria-label":re(e)});l.checked=o.length>0&&i===o.length,l.indeterminate=i>0&&i<o.length,l.disabled=o.every(c=>c.def.lockVisible);let a=h("span","fg-chooser-label");if(a.textContent=re(e),n.append(l,a),!e.children&&e.pinned){let c=h("span","fg-chooser-pin");c.textContent=e.pinned==="left"?"\u21E4":"\u21E5",n.append(c)}return n}onPointerDown(e){let n=e.target.closest(".fg-chooser-handle")?.closest(".fg-chooser-item"),s=n&&this.nodeOf(n);if(!n||!s||e.button!==0)return;e.preventDefault();let o=new Set(this.grid.columns.siblings(s.id).map(m=>m.id).filter(m=>m!==s.id)),i=[...this.list.querySelectorAll(".fg-chooser-item")].filter(m=>o.has(m.dataset.col)),l=e.clientY,a=!1,c=-1,d=h("div","fg-chooser-marker"),u=m=>{if(!a){if(Math.abs(m.clientY-l)<it||!i.length)return;a=!0,n.classList.add("fg-dragging"),this.list.append(d)}c=i.filter(b=>{let C=b.getBoundingClientRect();return m.clientY>C.top+C.height/2}).length;let p=this.list.getBoundingClientRect().top-this.list.scrollTop,g=c<i.length?i[c].getBoundingClientRect().top:i[i.length-1].getBoundingClientRect().bottom;d.style.top=`${g-p-1}px`},f=()=>{if(window.removeEventListener("pointermove",u),window.removeEventListener("pointerup",f),d.remove(),n.classList.remove("fg-dragging"),!a||c<0)return;let m=this.grid.columns.siblings(s.id).map(b=>b.id).filter(b=>b!==s.id),p=c<i.length?m.indexOf(i[c].dataset.col):m.indexOf(i[i.length-1].dataset.col)+1;m[0]===v&&(p=Math.max(1,p));let g=this.grid.columns.siblings(s.id).findIndex(b=>b.id===s.id);p!==g&&(this.grid.columns.move(s.id,p),this.grid.layoutChanged(),this.grid.events.emit("columnMove",{colId:s.id,toIndex:p}))};window.addEventListener("pointermove",u),window.addEventListener("pointerup",f)}},U=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=h("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=h("div","fg-chooser-head"),s=h("span","fg-menu-title");s.textContent=e.chooseColumns;let o=h("button","fg-chooser-close",{type:"button","aria-label":e.close});o.textContent="\xD7",o.addEventListener("click",()=>this.close()),n.append(s,o),this.panel=new j(this.grid),t.append(n,this.panel.el),document.body.append(t);let i=this.grid.renderer.root.getBoundingClientRect(),l=t.offsetWidth||280;t.style.left=`${Math.max(4,Math.min(i.right-l-8,window.innerWidth-l-4))}px`,t.style.top=`${Math.max(4,i.top+8)}px`,this.popup=t;let a=d=>{t.contains(d.target)||this.close()},c=d=>{d.key==="Escape"&&this.close()};document.addEventListener("pointerdown",a,!0),document.addEventListener("keydown",c,!0),this.off.push(()=>document.removeEventListener("pointerdown",a,!0),()=>document.removeEventListener("keydown",c,!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}},Y=class{constructor(e,t){this.grid=e;this.el=h("div","fg-sidebar"),this.panelHost=h("div","fg-sidebar-panel"),this.panel=new j(e),this.panelHost.append(this.panel.el);let n=h("div","fg-sidebar-tabs");this.tab=h("button","fg-sidebar-tab",{type:"button"}),this.tab.addEventListener("click",()=>this.toggle()),n.append(this.tab),this.el.append(this.panelHost,n),e.renderer.root.append(this.el),this.panelHost.hidden=!t,this.refresh()}get isOpen(){return!this.panelHost.hidden}toggle(e=!this.isOpen){this.panelHost.hidden=!e,this.tab.setAttribute("aria-expanded",String(e)),this.grid.renderer.invalidate({header:!0,rows:!0})}refresh(){this.tab.textContent=this.grid.store.state.locale.columns,this.tab.setAttribute("aria-expanded",String(this.isOpen)),this.panel.refresh()}};var lt=5;function Ie(r,e){let t=s=>r(s),n=s=>{window.removeEventListener("pointermove",t),window.removeEventListener("pointerup",n),window.removeEventListener("pointercancel",n),e(s)};window.addEventListener("pointermove",t),window.addEventListener("pointerup",n),window.addEventListener("pointercancel",n)}function at(r,e,t){let n=r.columns.getColumn(t);if(!n)return;let s=e.clientX,o=n.width;r.renderer.root.classList.add("fg-resizing"),Ie(i=>{r.columns.setWidth(t,o+i.clientX-s),r.layoutChanged()},()=>{r.renderer.root.classList.remove("fg-resizing");let i=r.columns.getColumn(t)?.width??o;i!==o&&r.events.emit("columnResize",{colId:t,width:i})})}function ct(r,e,t,n){let s=new Set(r.columns.siblings(e).map(a=>a.id).filter(a=>a!==e&&a!==v)),o=[...n.querySelectorAll(".fg-header-cell")].filter(a=>s.has(a.dataset.col)).map(a=>({id:a.dataset.col,el:a})),i=h("div",`fg-drag-ghost fg-theme-${r.store.state.theme}`);i.textContent=t.querySelector(".fg-header-label")?.textContent??"",r.applyFontTo(i),document.body.append(i);let l=h("div","fg-drop-marker");return l.style.height=`${r.renderer.headerEl.offsetHeight}px`,r.renderer.root.append(l),t.classList.add("fg-dragging"),{ghost:i,marker:l,cell:t,sibs:o,target:-1}}function dt(r,e,t,n){e.ghost.style.transform=`translate(${t+12}px, ${n+8}px)`;let s=0;for(let l of e.sibs){let a=l.el.getBoundingClientRect();t>a.left+a.width/2&&s++}e.target=s;let o=r.renderer.root.getBoundingClientRect().left,i=s<e.sibs.length?e.sibs[s].el.getBoundingClientRect().left:e.sibs.length?e.sibs[e.sibs.length-1].el.getBoundingClientRect().right:e.cell.getBoundingClientRect().left;e.marker.style.left=`${i-o-1}px`}function ut(r,e,t){if(t.ghost.remove(),t.marker.remove(),t.cell.classList.remove("fg-dragging"),t.target<0||!t.sibs.length)return;let n=r.columns.siblings(e),s=n.findIndex(l=>l.id===e),o=n.map(l=>l.id).filter(l=>l!==e),i=t.target<t.sibs.length?o.indexOf(t.sibs[t.target].id):o.indexOf(t.sibs[t.sibs.length-1].id)+1;o[0]===v&&(i=Math.max(1,i)),i!==s&&(r.columns.move(e,i),r.layoutChanged(),r.events.emit("columnMove",{colId:e,toIndex:i}))}function ht(r,e,t,n){let s=r.columns.getNode(t),o=n.closest(".fg-header-pane");if(!s||!o)return;let i=e.clientX,l=null;Ie(a=>{if(!l){if(Math.abs(a.clientX-i)<lt)return;l=ct(r,t,n,o)}dt(r,l,a.clientX,a.clientY)},a=>{l?ut(r,t,l):!s.children&&N(s.def)&&r.toggleSort(t,a.shiftKey||a.ctrlKey||a.metaKey)})}function De(r){let e=r.renderer.headerEl,t=s=>{if(s.button!==0)return;let o=s.target,i=o.closest(".fg-header-cell"),l=i?.dataset.col;!i||!l||l===v||o.closest(".fg-menu-btn")||(s.preventDefault(),o.closest(".fg-resize")?at(r,s,l):ht(r,s,l,i))},n=s=>{let o=s.target,i=o.closest(".fg-menu-btn");if(i){let l=i.closest(".fg-header-cell")?.dataset.col;l&&r.menu.toggle(l,i);return}o.closest(".fg-select-all")&&r.toggleSelectAll()};return e.addEventListener("pointerdown",t),e.addEventListener("click",n),()=>{e.removeEventListener("pointerdown",t),e.removeEventListener("click",n)}}function Ne(r,e,t){return typeof r=="number"&&typeof e=="number"?r-e:r instanceof Date&&e instanceof Date?r.getTime()-e.getTime():typeof r=="boolean"&&typeof e=="boolean"?Number(r)-Number(e):t.compare(String(r),String(e))}function ft(r,e){if(L(e))return null;if(r.type==="number"){let t=typeof e=="number"?e:Number(e);return Number.isNaN(t)?null:t}return r.type==="date"?ee(e)?.getTime()??null:e}function Ae(r,e,t){let n=L(r),s=L(e);return n||s?n===s?0:n?1:-1:Ne(r,e,t)}function He(r,e,t,n){let s=e.map(l=>({def:t(l.colId),mul:l.dir==="desc"?-1:1})).filter(l=>!!l.def);if(!s.length)return r;let o=s.map(l=>r.map(a=>{let c=M(l.def,a.data);return l.def.comparator?c:ft(l.def,c)})),i=r.map((l,a)=>a);return i.sort((l,a)=>{for(let c=0;c<s.length;c++){let{def:d,mul:u}=s[c],f=o[c][l],m=o[c][a],p;if(d.comparator)try{p=(Number(d.comparator(f,m,r[l].data,r[a].data))||0)*u}catch{y(`comparator of column "${d.id??d.field}" threw; treating values as equal`),p=0}else{let g=L(f),b=L(m);p=g||b?g===b?0:g?1:-1:Ne(f,m,n)*u}if(p)return p}return l-a}),i.map(l=>r[l])}var Pe={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"]},Fe=["blank","notBlank"],se=500,X=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||e===v)return;let s=this.grid.store.state.locale,o=n.def,i=h("div",`fg-menu fg-theme-${this.grid.store.state.theme}`,{role:"dialog","aria-label":s.columnMenu});this.grid.applyFontTo(i),N(o)&&i.append(this.section([[s.sortAsc,()=>this.grid.setSort([{colId:e,dir:"asc"}])],[s.sortDesc,()=>this.grid.setSort([{colId:e,dir:"desc"}])],[s.clearSort,()=>this.grid.setSort(this.grid.store.state.sort.filter(p=>p.colId!==e))]])),i.append(this.section([[s.pinLeft,()=>this.grid.setPinned(e,"left")],[s.pinRight,()=>this.grid.setPinned(e,"right")],[s.unpin,()=>this.grid.setPinned(e,null)]]));let l=[[s.autosizeThis,()=>this.grid.autoSize([e])],[s.autosizeAll,()=>this.grid.autoSize()]];o.lockVisible||l.push([s.hideColumn,()=>this.grid.setColumnsVisible([e],!1)]),l.push([s.chooseColumns,()=>this.grid.chooser.open()],[s.resetColumns,()=>this.grid.resetColumns()]),i.append(this.section(l));let a=q(o);a==="set"?i.append(this.setFilter(e,s)):a&&i.append(this.conditionFilter(e,a,s)),document.body.append(i);let c=t.getBoundingClientRect(),d=i.offsetWidth||248;i.style.left=`${Math.max(4,Math.min(c.right-d,window.innerWidth-d-4))}px`;let u=Math.max(4,Math.min(c.bottom+4,window.innerHeight-240));i.style.top=`${u}px`,i.style.maxHeight=`${Math.max(160,window.innerHeight-u-8)}px`,this.popup=i,this.colId=e;let f=p=>{let g=p.target;!i.contains(g)&&!t.contains(g)&&this.close()},m=p=>{p.key==="Escape"&&(this.close(),this.grid.renderer.root.focus())};document.addEventListener("pointerdown",f,!0),document.addEventListener("keydown",m,!0),this.off.push(()=>document.removeEventListener("pointerdown",f,!0),()=>document.removeEventListener("keydown",m,!0)),i.querySelector(".fg-filter-value:not([hidden]), .fg-set-search, .fg-menu-item")?.focus()}close(){for(let e of this.off)e();this.off=[],this.popup?.remove(),this.popup=null,this.colId=null}section(e){let t=h("div","fg-menu-section");for(let[n,s]of e){let o=h("button","fg-menu-item",{type:"button"});o.textContent=n,o.addEventListener("click",()=>{s(),this.close()}),t.append(o)}return t}actions(e,t,n){let s=h("div","fg-menu-actions"),o=h("button","fg-btn",{type:"button"});o.textContent=t.reset,o.addEventListener("click",()=>{this.grid.setFilter(e,null),this.close()});let i=h("button","fg-btn fg-btn-primary",{type:"button"});return i.textContent=t.apply,i.addEventListener("click",n),s.append(o,i),s}title(e){let t=h("div","fg-menu-title");return t.textContent=e.filter,t}conditionFilter(e,t,n){let s=this.grid.store.state.filters[e],o=s&&s.type===t?s:void 0,i=h("div","fg-menu-section fg-filter"),l=h("select","fg-filter-op",{"aria-label":n.filter});for(let m of Pe[t]){let p=h("option");p.value=m,p.textContent=n.ops[m],l.append(p)}l.value=o?.op??Pe[t][0];let a=t==="text"?"text":t,c=h("input","fg-input fg-filter-value",{type:a,placeholder:n.value,"aria-label":n.value}),d=h("input","fg-input fg-filter-value-to",{type:a,placeholder:n.valueTo,"aria-label":n.valueTo});o&&(c.value=o.value!=null?String(o.value):"",d.value="valueTo"in o&&o.valueTo!=null?String(o.valueTo):"");let u=()=>{c.hidden=Fe.includes(l.value),d.hidden=l.value!=="between"};l.addEventListener("change",u),u();let f=()=>{let m=l.value,p=!Fe.includes(m),g=null;if(t==="number"){let b=c.value===""?void 0:Number(c.value),C=d.value===""?void 0:Number(d.value);(!p||b!==void 0)&&(g={type:t,op:m,value:b,valueTo:C})}else t==="date"?(!p||c.value)&&(g={type:t,op:m,value:c.value||void 0,valueTo:d.value||void 0}):(!p||c.value)&&(g={type:t,op:m,value:c.value});this.grid.setFilter(e,g),this.close()};for(let m of[c,d])m.addEventListener("keydown",p=>p.key==="Enter"&&f());return i.append(this.title(n),l,c,d,this.actions(e,n,f)),i}setFilter(e,t){let{grid:n}=this,s=n.columns.getNode(e).def,o=I(s,t.code),i=n.collator(),l=new Map;for(let w of n.rowModel.allNodes()){let x=M(s,w.data),R=F(x);l.has(R)||l.set(R,x)}let a=[...l.entries()].sort((w,x)=>Ae(w[1],x[1],i)),c=n.store.state.filters[e],d=new Set(c?.type==="set"?c.values.map(F).filter(w=>l.has(w)):l.keys()),u=(w,x)=>w===""?t.blanks:o(x),f=h("div","fg-menu-section fg-filter fg-set-filter"),m=h("input","fg-input fg-set-search",{type:"search",placeholder:t.search,"aria-label":t.search}),p=h("label","fg-set-item fg-set-all"),g=h("input","fg-checkbox",{type:"checkbox"});p.append(g,document.createTextNode(t.selectAll));let b=h("div","fg-set-list"),C=()=>{let w=m.value.trim().toLowerCase();return w?a.filter(([x,R])=>u(x,R).toLowerCase().includes(w)):a},E=()=>{let w=C(),x=w.filter(([R])=>d.has(R)).length;g.checked=x>0&&x===w.length,g.indeterminate=x>0&&x<w.length},S=()=>{let w=C();if(b.replaceChildren(...w.slice(0,se).map(([x,R])=>{let le=h("label","fg-set-item"),$=h("input","fg-checkbox",{type:"checkbox"});return $.checked=d.has(x),$.addEventListener("change",()=>{$.checked?d.add(x):d.delete(x),E()}),le.append($,document.createTextNode(u(x,R))),le})),w.length>se){let x=h("div","fg-set-more");x.textContent=`\u2026 +${w.length-se}`,b.append(x)}E()};g.addEventListener("change",()=>{for(let[w]of C())g.checked?d.add(w):d.delete(w);S()}),m.addEventListener("input",S);let P=()=>{n.setFilter(e,d.size===l.size?null:{type:"set",values:a.filter(([w])=>d.has(w)).map(([,w])=>w)}),this.close()};return m.addEventListener("keydown",w=>w.key==="Enter"&&P()),S(),f.append(this.title(t),m,p,b,this.actions(e,t,P)),f}};var Z=class{constructor(e){this.deps=e;this.stats={filterRuns:0,sortRuns:0};this.last={};this.nodes=[];this.filtered=[];this.sorted=[];this.indexById=null}update(e){let t=this.deps.collator(),n=e.data!==this.last.data,s=n||e.filters!==this.last.filters||e.quickFilter!==this.last.quickFilter,o=s||e.sort!==this.last.sort||t!==this.last.collator;if(n){let i=this.deps.getRowId;this.nodes=e.data.map((l,a)=>({id:String(i?i(l):a),data:l,sourceIndex:a}))}s&&(this.filtered=this.filter(e),this.stats.filterRuns++),o&&(this.sorted=He(this.filtered,e.sort,i=>this.deps.columnDef(i),t),this.indexById=null,this.stats.sortRuns++),this.last={...e,collator:t}}invalidate(){this.last={}}getRowCount(){return this.sorted.length}getRow(e){return this.sorted[e]}rows(){return this.sorted}allNodes(){return this.nodes}indexOfId(e){return this.indexById||(this.indexById=new Map(this.sorted.map((t,n)=>[t.id,n]))),this.indexById.get(e)??-1}filter(e){let t=Object.entries(e.filters).map(([o,i])=>({def:this.deps.columnDef(o),pred:ve(i)})).filter(o=>!!o.def),n=be(e.quickFilter),s=n.length?this.deps.quickColumns():[];return!t.length&&!n.length?this.nodes:this.nodes.filter(o=>{for(let i of t)if(!i.pred(M(i.def,o.data)))return!1;if(n.length){let i=s.map(l=>this.deps.format(l,M(l,o.data))).join("").toLowerCase();if(!xe(n,i))return!1}return!0})}};function $e(r){let e=r.idAt(r.index);if(r.mode==="single"){let t=new Set;return r.toggle&&r.selected.has(e)||t.add(e),{selected:t,anchorIndex:r.index}}if(r.range&&r.anchorIndex!=null){let t=r.toggle?new Set(r.selected):new Set,n=Math.min(r.anchorIndex,r.index),s=Math.max(r.anchorIndex,r.index);for(let o=n;o<=s;o++)t.add(r.idAt(o));return{selected:t,anchorIndex:r.anchorIndex}}if(r.toggle){let t=new Set(r.selected);return t.has(e)?t.delete(e):t.add(e),{selected:t,anchorIndex:r.index}}return{selected:new Set([e]),anchorIndex:r.index}}var Q=class{constructor(e){this.bus=new H;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 Oe=r=>Math.round(r*2.75),ze=r=>Math.round(r*3.1),Be=13;function qe(r){return r.every(e=>e!==null&&typeof e=="object")?r:(y("data contains entries that are not objects; they were skipped"),r.filter(e=>e!==null&&typeof e=="object"))}var ie=class{constructor(e,t){this.options=t;this.events=new H;this.disposers=[];this.collatorCache=null;this.destroyed=!1;this.summaryOpts=null;this.summaryValues=[];Array.isArray(t.columns)||y("options.columns must be an array"),t.data!=null&&!Array.isArray(t.data)&&y("options.data must be an array"),this.store=new Q({data:Array.isArray(t.data)?qe(t.data):[],sort:[],filters:{},quickFilter:"",selected:new Set,anchorId:null,focus:null,locale:O(t.locale),theme:t.theme??"light"}),this.columns=new B(this.withSelect(Array.isArray(t.columns)?t.columns:[])),this.rowModel=new Z({getRowId:t.getRowId,columnDef:o=>this.columns.getNode(o)?.def,quickColumns:()=>this.columns.displayed().filter(o=>o.id!==v).map(o=>o.def),format:(o,i)=>I(o,this.store.state.locale.code)(i),collator:()=>this.collator()}),this.rowModel.update(this.store.state),this.summaryOpts=t.summary??null,this.refreshSummary();let n=t.fontSize!=null&&t.fontSize>0?t.fontSize:null;t.fontSize!=null&&!(t.fontSize>0)&&y("fontSize must be a positive number"),this.font={size:n,family:t.fontFamily??null};let s=n??Be;if(this.renderer=new V(e,this,{rowHeight:t.rowHeight??Oe(s),headerHeight:t.headerHeight??ze(s)}),this.renderer.applyFont(this.font.size,this.font.family),this.menu=new X(this),this.chooser=new U(this),this.sideBar=t.sideBar?new Y(this,typeof t.sideBar=="object"&&!!t.sideBar.open):null,this.disposers.push(this.store.bus.on("change",o=>this.onChange(o)),De(this),Ee(this),()=>this.menu.close(),()=>this.chooser.close()),typeof ResizeObserver<"u"){let o=new ResizeObserver(()=>this.renderer.schedule());o.observe(this.renderer.main),this.disposers.push(()=>o.disconnect())}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.rowModel.update(this.store.state),this.refreshSummary(),this.renderer.invalidate({header:!0,rows:!0}),this.refreshChoosers()}setFont(e){let t=this.font.size;e.size!==void 0&&(typeof e.size=="number"&&e.size>0?t=e.size:y("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 s=t??Be;this.options.rowHeight==null&&(this.renderer.opts.rowHeight=Oe(s)),this.options.headerHeight==null&&(this.renderer.opts.headerHeight=ze(s)),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)){y("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(s=>s.data):t==="selected"?this.selectedRows():this.rowModel.rows().map(s=>s.data);this.summaryValues=ke(e.rows,n,s=>this.columns.getNode(s)?.def)}refreshChoosers(){this.chooser.refresh(),this.sideBar?.refresh()}setColumnsVisible(e,t){let n=[];for(let s of e){let o=this.columns.getNode(s);!o||o.children||o.hide===!t||(this.columns.setHide(s,!t),n.push(s))}if(n.length){this.columnsChanged();for(let s of n)this.events.emit("columnVisible",{colId:s,visible:t})}}autoSize(e){let t=(e?e.map(a=>this.columns.getColumn(a)):this.columns.displayed()).filter(a=>!!a&&W(a.def)),{first:n,last:s}=this.renderer.renderedRange(),o=this.store.state.locale.code,i=66,l=24;for(let a of t){let c=this.renderer.measureText(a.def.header??a.def.field??"",!0)+i,d=I(a.def,o);for(let f=n;f<=s;f++){let m=this.rowModel.getRow(f);m&&(c=Math.max(c,this.renderer.measureText(d(M(a.def,m.data)),!1)+l))}let u=this.columns.setWidth(a.id,Math.ceil(c));this.events.emit("columnResize",{colId:a.id,width:u})}this.layoutChanged()}resetColumns(){this.columns.reset(),this.columnsChanged()}setSort(e){let t=e.filter(n=>{let s=this.columns.getNode(n.colId);return!s||s.children?(y(`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,s=n.find(l=>l.colId===e),o=s?s.dir==="asc"?"desc":null:"asc",i;t?o?s?i=n.map(l=>l.colId===e?{colId:e,dir:o}:l):i=[...n,{colId:e,dir:o}]:i=n.filter(l=>l.colId!==e):i=o?[{colId:e,dir:o}]:[],this.setSort(i)}setFilter(e,t){let n=this.columns.getNode(e);if(!n||n.children){y(`setFilter: unknown column "${e}"`);return}let s={...this.store.state.filters};t?s[e]=t:delete s[e],this.store.set({filters:s}),this.events.emit("filterChange",{filters:{...s}})}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 s=this.options.rowSelection;if(!s||e<0||e>=this.rowModel.getRowCount())return;let o=$e({selected:this.store.state.selected,anchorIndex:this.anchorIndex(),mode:s,index:e,idAt:i=>this.rowModel.getRow(i).id,toggle:t,range:n});this.setSelected(o.selected,this.rowModel.getRow(o.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.rows(),t=this.store.state.selected,n=e.length>0&&e.every(o=>t.has(o.id)),s=new Set(t);for(let o of e)n?s.delete(o.id):s.add(o.id);this.setSelected(s)}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){return this.options.rowSelection?[ge,...e]:e}setData(e){if(!Array.isArray(e)){y("setData: rows must be an array");return}this.store.set({data:qe(e)});let t=this.store.state.selected;if(t.size)if(this.options.getRowId){let o=new Set(this.rowModel.allNodes().map(l=>l.id)),i=new Set([...t].filter(l=>o.has(l)));i.size!==t.size&&this.setSelected(i)}else this.setSelected(new Set,null);let n=this.rowModel.getRowCount(),s=this.store.state.focus;s&&s.rowIndex>=n&&this.store.set({focus:n?{...s,rowIndex:n-1}:null})}setColumns(e){if(!Array.isArray(e)){y("setColumns: columns must be an array");return}this.menu.close(),this.columns.setDefs(this.withSelect(e));let t=n=>!!this.columns.getNode(n);this.store.set({sort:this.store.state.sort.filter(n=>t(n.colId)),filters:Object.fromEntries(Object.entries(this.store.state.filters).filter(([n])=>t(n))),focus:null}),this.columnsChanged()}onChange(e){let t=(...n)=>n.some(s=>e.includes(s));t("locale")&&(this.menu.close(),this.chooser.close(),this.sideBar?.refresh(),this.rowModel.invalidate()),t("data","sort","filters","quickFilter","locale")&&this.rowModel.update(this.store.state),(t("data","filters","quickFilter","locale")||t("selected")&&this.summaryOpts?.scope==="selected")&&this.refreshSummary(),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){y("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.rows().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:O(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=>this.sideBar?.toggle(t)),setSummary:e(t=>this.setSummary(t)),getSummaryValues:e(()=>this.summaryValues.map(t=>({...t}))),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 mt(r,e){return new ie(r,e).api}var pt={en:k,ko:me,"zh-CN":pe,ja:fe,es:ue,fr:he,de},Qn="0.1.0";for(let r of Object.values(pt))J(r);export{mt as createGrid,k as en,pt as locales,J as registerLocale,O as resolveLocale,Qn as version};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var FreeGrid=(()=>{var ee=Object.defineProperty;var Ve=Object.getOwnPropertyDescriptor;var Ke=Object.getOwnPropertyNames;var je=Object.prototype.hasOwnProperty;var Ue=(r,e)=>{for(var t in e)ee(r,t,{get:e[t],enumerable:!0})},Ye=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ke(e))!je.call(r,o)&&o!==t&&ee(r,o,{get:()=>e[o],enumerable:!(n=Ve(e,o))||n.enumerable});return r};var Xe=r=>Ye(ee({},"__esModule",{value:!0}),r);var St={};Ue(St,{createGrid:()=>Ge,en:()=>T,locales:()=>_e,registerLocale:()=>z,resolveLocale:()=>F,version:()=>Lt});var Ze={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",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"}},T=Ze;var ce=new Set;function b(r){ce.has(r)||(ce.add(r),console.warn(`[FreeGrid] ${r}`))}var H=new Map([["en",T]]);function z(r){H.set(r.code,r)}function de(r){let e=r.toLowerCase();for(let n of H.keys())if(n.toLowerCase()===e)return n;let t=e.split("-")[0];if(t==="zh"&&H.has("zh-CN"))return"zh-CN";for(let n of H.keys())if(n.toLowerCase().split("-")[0]===t)return n}function Qe(){var r;return typeof navigator=="undefined"?[]:(r=navigator.languages)!=null&&r.length?navigator.languages:navigator.language?[navigator.language]:[]}function Je(r){var e,t;return{...T,...r,code:(e=r.code)!=null?e:"en",ops:{...T.ops,...(t=r.ops)!=null?t:{}}}}function F(r,e=Qe()){if(r&&typeof r=="object")return Je(r);if(typeof r=="string"){let t=de(r);return t?H.get(t):(b(`locale "${r}" is not registered \u2014 import it from "@freegridjs/core/locales/${r}" and pass the pack (or call registerLocale). Falling back to "en".`),T)}for(let t of e){let n=de(t);if(n)return H.get(n)}return T}var et={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",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"}},ue=et;var tt={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",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"}},he=tt;var nt={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",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"}},fe=nt;var ot={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",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"}},me=ot;var rt={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",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"}},pe=rt;var st={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",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"}},ge=st;var x="__fg_select__",ye={id:x,header:"",width:44,minWidth:44,maxWidth:44,pinned:"left",sortable:!1,resizable:!1,filter:!1},it=120,lt=40,at=["left","center","right"];function W(r){if(r.id===x||r.filter===!1)return null;if(r.filter)return r.filter;switch(r.type){case"number":return"number";case"date":return"date";case"boolean":return"set";default:return"text"}}var A=r=>r.id!==x&&r.sortable!==!1,G=r=>r.id!==x&&r.resizable!==!1;function B(r,e){var o,s;let t=(o=r.minWidth)!=null?o:lt,n=(s=r.maxWidth)!=null?s:1/0;return Math.round(Math.min(n,Math.max(t,e)))}function we(r){return r.children?1+Math.max(0,...r.children.map(we)):1}var q=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=(s,i,l)=>{var f,g,p,m,y;let c=Array.isArray(s.children)&&s.children.length>0,a=t++,d=(f=s.id)!=null?f:c?`g${a}`:s.field;if(d||(d=`c${a}`,b(`column #${a} has neither "field" nor "id"; using "${d}"`)),this.byId.has(d)){let v=1;for(;this.byId.has(`${d}_${v}`);)v++;b(`duplicate column id "${d}"; renamed to "${d}_${v}"`),d=`${d}_${v}`}let u={id:d,def:s,parent:i,children:null,depth:l,width:B(s,(g=s.width)!=null?g:it),flex:s.flex&&s.flex>0?s.flex:null,hide:(p=s.hide)!=null?p:!1,pinned:(y=(m=s.pinned)!=null?m:i==null?void 0:i.pinned)!=null?y:null};return this.byId.set(d,u),c&&(u.children=o(s.children).map(v=>n(v,u,l+1))),u},o=s=>{let i=s.filter(l=>l!==null&&typeof l=="object");return i.length!==s.length&&b("columns contain entries that are not objects; they were skipped"),i};this.roots_=o(e).map(s=>n(s,null,0)),this.depth=Math.max(1,...this.roots_.map(we)),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=B(n.def,t),this.relayout(),n.width)}setPinned(e,t){let n=this.byId.get(e);!n||n.children||e===x||(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[s]=n.splice(o,1);n.splice(Math.max(0,Math.min(n.length,t)),0,s),this.relayout()}headerCells(e){var o,s,i;let t=[],n=new Map;for(let l of this.layout[e]){let c=[];for(let a=l.node.parent;a;a=a.parent)c.unshift(a);for(let a of c){let d=n.get(a.id);if(d){d.width+=l.width;continue}let u={id:a.id,label:(o=a.def.header)!=null?o:"",isGroup:!0,column:null,node:a,row:a.depth,rowSpan:1,left:l.left,width:l.width};n.set(a.id,u),t.push(u)}t.push({id:l.id,label:(i=(s=l.def.header)!=null?s:l.def.field)!=null?i:"",isGroup:!1,column:l,node:l.node,row:l.node.depth,rowSpan:this.depth-l.node.depth,left:l.left,width:l.width})}return t}getState(){return this.leafNodes().filter(e=>e.id!==x).map(e=>{var t,n;return{colId:e.id,width:(n=(t=this.leafById.get(e.id))==null?void 0:t.width)!=null?n:e.width,hide:e.hide,pinned:e.pinned}})}applyState(e){let t=new Map;e.forEach((s,i)=>{t.set(s.colId,i);let l=this.byId.get(s.colId);!l||l.children||s.colId===x||(l.flex=null,l.width=B(l.def,s.width),l.hide=s.hide,l.pinned=s.pinned)}),t.set(x,-1);let n=s=>{var i;return s.children?Math.min(1/0,...s.children.map(n)):(i=t.get(s.id))!=null?i:1/0},o=s=>{let i=s.map((l,c)=>({n:l,i:c,r:n(l)}));i.sort((l,c)=>l.r===c.r?l.i-c.i:l.r-c.r),s.splice(0,s.length,...i.map(l=>l.n));for(let l of s)l.children&&o(l.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(){var c;let e=this.leafNodes().filter(a=>!a.hide),t=e.reduce((a,d)=>a+(d.flex?0:d.width),0),n=e.reduce((a,d)=>{var u;return a+((u=d.flex)!=null?u:0)},0),o=Math.max(0,this.containerWidth-t),s=a=>a.flex?B(a.def,Math.floor(o*a.flex/n)):a.width,i={left:[],center:[],right:[]};this.leafById=new Map;let l=0;for(let a of at){let d=0;for(let u of e){if(((c=u.pinned)!=null?c:"center")!==a)continue;let f={id:u.id,def:u.def,node:u,width:s(u),region:a,left:d,index:l++};d+=f.width,i[a].push(f),this.leafById.set(u.id,f)}}this.layout=i}};var P=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(s){console.error("[FreeGrid] event listener threw",s)}}clear(){this.listeners.clear()}};function S(r){return r==null||typeof r=="string"&&r.trim()===""||typeof r=="number"&&Number.isNaN(r)}var ve=r=>String(r).padStart(2,"0");function _(r){if(S(r))return null;if(typeof r=="string"&&/^\d{4}-\d{2}-\d{2}$/.test(r))return r;let e=r instanceof Date?r:new Date(r);return Number.isNaN(e.getTime())?null:`${e.getFullYear()}-${ve(e.getMonth()+1)}-${ve(e.getDate())}`}function $(r){var e;return S(r)?"":r instanceof Date?(e=_(r))!=null?e:"":String(r)}var I=()=>!0;function be(r){var e;switch(r.type){case"text":{let t=((e=r.value)!=null?e:"").toLowerCase(),n=o=>S(o)?"":String(o).toLowerCase();switch(r.op){case"contains":return o=>n(o).includes(t);case"equals":return o=>n(o)===t;case"notEquals":return o=>n(o)!==t;case"startsWith":return o=>n(o).startsWith(t);case"endsWith":return o=>n(o).endsWith(t);case"blank":return S;case"notBlank":return o=>!S(o)}return I}case"number":{let t=o=>S(o)?NaN:Number(o);if(r.op==="blank")return o=>Number.isNaN(t(o));if(r.op==="notBlank")return o=>!Number.isNaN(t(o));let n=r.value;if(n==null||Number.isNaN(n))return I;switch(r.op){case"eq":return o=>t(o)===n;case"ne":return o=>t(o)!==n;case"lt":return o=>t(o)<n;case"lte":return o=>t(o)<=n;case"gt":return o=>t(o)>n;case"gte":return o=>t(o)>=n;case"between":{let o=r.valueTo;if(o==null||Number.isNaN(o))return I;let s=Math.min(n,o),i=Math.max(n,o);return l=>{let c=t(l);return c>=s&&c<=i}}}return I}case"date":{if(r.op==="blank")return o=>_(o)===null;if(r.op==="notBlank")return o=>_(o)!==null;let t=r.value;if(!t)return I;let n=o=>_(o);switch(r.op){case"equals":return o=>n(o)===t;case"before":return o=>{let s=n(o);return s!==null&&s<t};case"after":return o=>{let s=n(o);return s!==null&&s>t};case"between":{let o=r.valueTo;if(!o)return I;let s=t<o?t:o,i=t<o?o:t;return l=>{let c=n(l);return c!==null&&c>=s&&c<=i}}}return I}case"set":{let t=new Set(r.values.map($));return n=>t.has($(n))}}return I}function xe(r){let e=r.trim().toLowerCase();return e?e.split(/\s+/):[]}function Ce(r,e){return r.every(t=>e.includes(t))}var Le=new Map;function ct(r){var o;if(r==="integer")return{maximumFractionDigits:0};if(r==="percent")return{style:"percent"};if(r.startsWith("currency:"))return{style:"currency",currency:r.slice(9)};if(!/^[#0,]*(\.[#0]+)?%?$/.test(r)||!/[#0]/.test(r))return null;let e=r.endsWith("%"),t=e?r.slice(0,-1):r,n=t.includes(".")?t.split(".")[1]:"";return{useGrouping:t.includes(","),minimumFractionDigits:((o=n.match(/0/g))!=null?o:[]).length,maximumFractionDigits:n.length,...e?{style:"percent"}:{}}}var V={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 te(r){if(S(r))return null;if(r instanceof Date)return Number.isNaN(r.getTime())?null:r;if(typeof r=="string"){let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(r);if(t)return new Date(Number(t[1]),Number(t[2])-1,Number(t[3]))}if(typeof r!="string"&&typeof r!="number")return null;let e=new Date(r);return Number.isNaN(e.getTime())?null:e}function dt(r,e,t){var n;switch(r){case"number":{let o={};if(typeof e=="string"){let i=ct(e);i||b(`unknown number format "${e}"`),o=i!=null?i:{}}else e&&(o=e);let s=new Intl.NumberFormat(t,o);return i=>{if(S(i))return"";let l=typeof i=="number"?i:Number(i);return Number.isNaN(l)?String(i):s.format(l)}}case"date":{let o=V.date;typeof e=="string"?(V[e]||b(`unknown date format "${e}"`),o=(n=V[e])!=null?n:V.date):e&&(o=e);let s=new Intl.DateTimeFormat(t,o);return i=>{let l=te(i);return l?s.format(l):S(i)?"":String(i)}}case"boolean":return o=>o===!0?"\u2713":o===!1?"\u2717":"";default:return o=>S(o)?"":o instanceof Date?o.toISOString():String(o)}}function D(r,e){var s;let t=r.format,n=`${e}|${(s=r.type)!=null?s:"text"}|${typeof t=="string"?t:JSON.stringify(t!=null?t:null)}`,o=Le.get(n);return o||(o=dt(r.type,t,e),Le.set(n,o)),o}var Se=new Set(["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Tab","Home","End","PageUp","PageDown"]);function Ee(r,e,t,n){let o=i=>Math.max(0,Math.min(n.rows-1,i)),s=i=>Math.max(0,Math.min(n.cols-1,i));switch(r){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:s(t.colIndex-1)};case"ArrowRight":return{rowIndex:t.rowIndex,colIndex:s(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}}function E(r,e){var t;if(r.valueGetter)try{return r.valueGetter(e)}catch{b(`valueGetter of column "${(t=r.id)!=null?t:r.field}" threw; rendering an empty cell`);return}return r.field!=null?e[r.field]:void 0}function Me(r){let{renderer:e}=r,t=e.bodyEl,n=e.root,o=c=>{let a=e.cellAt(c.target);if(!a)return null;let d=r.rowModel.getRow(a.rowIndex),u=r.columns.getColumn(a.colId);if(!d||!u)return null;let f=u.id===x?void 0:E(u.def,d.data);return{row:d.data,rowIndex:a.rowIndex,colId:a.colId,value:f,event:c}},s=c=>{let a=o(c);if(a){if(n.focus({preventScroll:!0}),r.setFocus(a.rowIndex,a.colId),r.options.rowSelection){let d=a.colId===x;r.selectFromClick(a.rowIndex,d||c.ctrlKey||c.metaKey,c.shiftKey)}r.events.emit("cellClick",a)}},i=c=>{let a=o(c);a&&r.events.emit("cellDoubleClick",a)},l=c=>{if(c.target!==n)return;let a=r.columns.displayed(),d=r.rowModel.getRowCount();if(!a.length||!d)return;let u=r.store.state.focus;if(c.key===" "&&u&&r.options.rowSelection){c.preventDefault(),r.selectFromClick(Math.min(u.rowIndex,d-1),!0,c.shiftKey);return}let f;if(!u)f=Se.has(c.key)&&c.key!=="Tab"?{rowIndex:0,colIndex:0}:null;else{let p=Math.max(0,a.findIndex(m=>m.id===u.colId));f=Ee(c.key,{ctrl:c.ctrlKey||c.metaKey,shift:c.shiftKey},{rowIndex:Math.min(u.rowIndex,d-1),colIndex:p},{rows:d,cols:a.length,pageRows:e.pageRows()})}if(!f)return;c.preventDefault();let g=a[f.colIndex].id;r.setFocus(f.rowIndex,g),e.ensureVisible(f.rowIndex,g)};return t.addEventListener("click",s),t.addEventListener("dblclick",i),n.addEventListener("keydown",l),()=>{t.removeEventListener("click",s),t.removeEventListener("dblclick",i),n.removeEventListener("keydown",l)}}function ne(r){let e=[];for(let t of r){if(S(t)||t instanceof Date)continue;let n=typeof t=="number"?t:Number(t);Number.isNaN(n)||e.push(n)}return e}function ke(r,e){let t=r.filter(o=>o instanceof Date&&!Number.isNaN(o.getTime()));if(t.length)return t.reduce((o,s)=>(e?s>o:s<o)?s:o);let n=ne(r);return n.length?e?Math.max(...n):Math.min(...n):null}function ut(r,e,t){if(typeof r=="function")return r(e,t);switch(r){case"sum":return ne(e).reduce((n,o)=>n+o,0);case"avg":{let n=ne(e);return n.length?n.reduce((o,s)=>o+s,0)/n.length:null}case"min":return ke(e,!1);case"max":return ke(e,!0);case"count":return t.length}return null}function oe(r){return typeof r=="object"&&r!==null&&"agg"in r?r:{agg:r}}function Re(r,e,t){let n=new Map,o=(s,i)=>{let l=n.get(s);return l||n.set(s,l=e.map(c=>E(i,c))),l};return r.map(s=>{var l;let i={};for(let[c,a]of Object.entries((l=s.columns)!=null?l:{})){let d=t(c);d&&(i[c]=ut(oe(a).agg,o(c,d),e))}return i})}function Te(r,e,t,n,o=4){if(n<=0||t<=0)return{first:0,last:-1};let s=Math.max(0,Math.floor(r/t)-o),i=Math.floor((r+e)/t);return{first:Math.min(s,n-1),last:Math.min(n-1,i+o)}}function re(r,e,t,n,o=2){let s=r.length;if(!s)return{first:0,last:-1};let i=0,l=s-1;for(;i<l;){let d=i+l>>1;r[d]+e[d]<=t?i=d+1:l=d}let c=i,a=t+n;for(l=s-1;i<l;){let d=i+l+1>>1;r[d]<a?i=d:l=d-1}return{first:Math.max(0,c-o),last:Math.min(s-1,Math.max(c,i)+o)}}var N=["left","center","right"],ht=6,Ie=2,ft='<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>',mt='<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 h(r,e="",t={}){let n=document.createElement(r);e&&(n.className=e);for(let[o,s]of Object.entries(t))n.setAttribute(o,s);return n}var K=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.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=h("div","",{role:"grid",tabindex:"0"}),this.headerEl=h("div","fg-header",{role:"rowgroup"}),this.bodyEl=h("div","fg-body",{role:"rowgroup"});let o=s=>({left:h("div",`${s} ${s}-left`),center:h("div",`${s} ${s}-center`),right:h("div",`${s} ${s}-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 s of N)this.headerPanes[s].dataset.region=s,this.bodyPanes[s].dataset.region=s,this.headerPanes[s].append(this.headerInners[s]),this.bodyPanes[s].append(this.canvases[s]),this.headerEl.append(this.headerPanes[s]),this.bodyEl.append(this.bodyPanes[s]);this.scroller=this.bodyPanes.center,this.overlay=h("div","fg-overlay",{role:"status"}),this.main=h("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(){var M,k;let{columns:e,rowModel:t,store:n,options:o}=this.grid,{rowHeight:s,headerHeight:i}=this.opts,l=this.scroller.offsetWidth-this.scroller.clientWidth;e.setContainerWidth(Math.max(0,this.main.clientWidth-l))&&(this.headerDirty=!0,this.version++);let c=t.getRowCount(),a=this.grid.summary(),d=a?a.opts.rows.length:0,u=(M=a==null?void 0:a.opts.position)!=null?M:"bottom",f=a?a.opts.pinned!==!1:!1;this.topOffset=a&&!f&&u==="top"?d*s:0;let g=a&&!f&&u==="bottom"?d*s:0;this.syncSummaryPane(a&&f?u:null,d*s);let p=e.depth*i;this.headerEl.style.height=`${p}px`;for(let L of N){let w=e.regionWidth(L);L!=="center"&&(this.headerPanes[L].style.width=this.bodyPanes[L].style.width=`${w}px`,this.headerPanes[L].hidden=this.bodyPanes[L].hidden=w===0),this.canvases[L].style.width=`${w}px`,this.canvases[L].style.height=`${c*s+this.topOffset+g}px`}let m=this.scroller.offsetHeight-this.scroller.clientHeight;this.bodyPanes.left.style.marginBottom=this.bodyPanes.right.style.marginBottom=`${m}px`,this.root.setAttribute("aria-rowcount",String(c+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(c),this.renderSummary(c,a&&a.opts.rows,(k=a==null?void 0:a.values)!=null?k:[],f,u),this.overlay.hidden=c>0,this.overlay.textContent=n.state.locale.noRows,this.overlay.style.top=`${p}px`;let{scrollTop:y,scrollLeft:v}=this.scroller;this.bodyPanes.left.scrollTop=this.bodyPanes.right.scrollTop=y,this.headerInners.center.style.transform=`translateX(${-v}px)`,this.summaryInners&&(this.summaryInners.center.style.transform=`translateX(${-v}px)`)}renderHeader(){let{columns:e,store:t}=this.grid,{sort:n,filters:o,locale:s}=t.state;for(let i of N){let l=this.headerInners[i];l.style.width=`${e.regionWidth(i)}px`,l.style.height=`${e.depth*this.opts.headerHeight}px`,l.replaceChildren(...e.headerCells(i).map(c=>this.headerCell(c,n,o,s)))}}headerCell(e,t,n,o){var d;let s=this.opts.headerHeight,i=h("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*s}px`,i.style.width=`${e.width}px`,i.style.height=`${e.rowSpan*s}px`,e.id===x)return i.classList.add("fg-header-select"),i.append(this.selectAllBox(o)),i;let l=h("span","fg-header-label");if(l.textContent=e.label,i.append(l),e.isGroup||!e.column)return i;let c=e.node.def;i.setAttribute("aria-colindex",String(e.column.index+1)),((d=c.align)!=null?d:c.type==="number"?"right":"left")==="right"&&i.classList.add("fg-align-right");let a=t.findIndex(u=>u.colId===e.id);if(i.setAttribute("aria-sort",a<0?"none":t[a].dir==="asc"?"ascending":"descending"),A(c)&&i.classList.add("fg-sortable"),a>=0){let u=h("span","fg-sort-icon");if(u.textContent=t[a].dir==="asc"?"\u2191":"\u2193",t.length>1){let f=h("sup");f.textContent=String(a+1),u.append(f)}i.append(u)}if(A(c)||W(c)){let u=!!n[e.id],f=h("button",u?"fg-menu-btn fg-filter-active":"fg-menu-btn",{type:"button",tabindex:"-1","aria-label":o.columnMenu});f.innerHTML=u?mt:ft,i.append(f)}return G(c)&&i.append(h("div","fg-resize",{"aria-hidden":"true"})),i}selectAllBox(e){let t=this.grid.rowModel.rows(),n=this.grid.store.state.selected,o=0;for(let i of t)n.has(i.id)&&o++;let s=h("input","fg-checkbox fg-select-all",{type:"checkbox",tabindex:"-1","aria-label":e.selectAllRows});return s.checked=t.length>0&&o===t.length,s.indeterminate=o>0&&o<t.length,s.hidden=this.grid.options.rowSelection!=="multiple",s}renderRows(e){var d;let{columns:t,rowModel:n,store:o}=this.grid,{selected:s,focus:i}=o.state,l=Te(Math.max(0,this.scroller.scrollTop-this.topOffset),this.scroller.clientHeight,this.opts.rowHeight,e,ht);this.lastRange=l;let c=t.region("center"),a=re(c.map(u=>u.left),c.map(u=>u.width),this.scroller.scrollLeft,this.scroller.clientWidth,Ie);for(let u of N){let f=u==="center"?c.slice(a.first,a.last+1):t.region(u),g=this.painted[u];for(let[m,y]of g)m>=l.first&&m<=l.last&&f.length||(y.el.remove(),this.pool[u].push(y.el),g.delete(m));if(!f.length)continue;let p=u==="center"?`${a.first}-${a.last}`:"";for(let m=l.first;m<=l.last;m++){let y=n.getRow(m),v=s.has(y.id),M=i&&i.rowIndex===m?i.colId:"",k=`${y.id}|${this.version}|${p}|${v?1:0}|${M}`,L=g.get(m);if(!L){let w=(d=this.pool[u].pop())!=null?d:h("div","fg-row",{role:"row"});this.canvases[u].append(w),L={el:w,key:""},g.set(m,L)}L.key!==k&&(L.key=k,this.paintRow(L.el,y,m,f,v,M))}}}paintRow(e,t,n,o,s,i){let l=this.opts.rowHeight;for(e.className=`fg-row${n%2?" fg-row-odd":""}${s?" fg-row-selected":""}`,e.style.transform=`translateY(${n*l+this.topOffset}px)`,e.style.height=`${l}px`,e.dataset.row=String(n),e.setAttribute("aria-rowindex",String(n+1+this.grid.columns.depth)),this.grid.options.rowSelection&&e.setAttribute("aria-selected",String(s));e.childElementCount>o.length;)e.lastElementChild.remove();for(;e.childElementCount<o.length;)e.append(h("div","fg-cell",{role:"gridcell"}));o.forEach((c,a)=>this.paintCell(e.children[a],t,n,c,s,i===c.id))}paintCell(e,t,n,o,s,i){var g;let l=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 c=i?"fg-cell fg-cell-focused":"fg-cell";if(o.id===x){e.className=`${c} fg-cell-select`;let p=h("input","fg-checkbox",{type:"checkbox",tabindex:"-1","aria-label":l.selectRow});p.checked=s,e.replaceChildren(p);return}let a=o.def,d=E(a,t.data),u=D(a,l.code)(d);c+=` fg-align-${(g=a.align)!=null?g:a.type==="number"?"right":a.type==="boolean"?"center":"left"}`;let f={value:d,formatted:u,row:t.data,rowIndex:n,column:a};if(a.cellClass)try{let p=typeof a.cellClass=="function"?a.cellClass(f):a.cellClass;p&&(c+=` ${p}`)}catch{b(`cellClass of column "${o.id}" threw`)}if(e.className=c,!a.renderer){e.textContent=u;return}try{let p=a.renderer(f);typeof p=="string"?e.innerHTML=p:e.replaceChildren(p)}catch{b(`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==null?void 0:t.parentElement;return!t||!(n!=null&&n.dataset.row)||!t.dataset.col?null:{rowIndex:Number(n.dataset.row),colId:t.dataset.col}}ensureVisible(e,t){let n=this.scroller,o=e*this.opts.rowHeight+this.topOffset,s=o+this.opts.rowHeight;o<n.scrollTop?n.scrollTop=o:s>n.scrollTop+n.clientHeight&&(n.scrollTop=s-n.clientHeight);let i=t?this.grid.columns.getColumn(t):void 0;(i==null?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){var s;if(!e){(s=this.summaryEl)==null||s.remove(),this.summaryEl=this.summaryPanes=this.summaryInners=null;return}if(!this.summaryEl){let i=l=>({left:h("div",`${l} ${l}-left`),center:h("div",`${l} ${l}-center`),right:h("div",`${l} ${l}-right`)});this.summaryEl=h("div","fg-summary",{role:"rowgroup"}),this.summaryPanes=i("fg-summary-pane"),this.summaryInners=i("fg-summary-inner");for(let l of N)this.summaryPanes[l].append(this.summaryInners[l]),this.summaryEl.append(this.summaryPanes[l])}this.summaryEl.className=`fg-summary fg-summary-${e}`;let n=e==="top"?this.bodyEl:this.overlay;this.summaryEl.nextElementSibling!==n&&this.main.insertBefore(this.summaryEl,n),this.summaryEl.style.height=`${t}px`;for(let i of N){let l=this.grid.columns.regionWidth(i);i!=="center"&&(this.summaryPanes[i].style.width=`${l}px`,this.summaryPanes[i].hidden=l===0),this.summaryInners[i].style.width=`${l}px`,this.summaryInners[i].style.height=`${t}px`}let o=this.scroller.offsetWidth-this.scroller.clientWidth;this.summaryPanes.center.style.marginRight=`${o}px`}renderSummary(e,t,n,o,s){for(let u of N){for(let f of this.canvasSummary[u])f.remove();this.canvasSummary[u]=[]}if(!t)return;let{columns:i}=this.grid,l=this.opts.rowHeight,c=i.region("center"),a=re(c.map(u=>u.left),c.map(u=>u.width),this.scroller.scrollLeft,this.scroller.clientWidth,Ie),d=i.displayed().filter(u=>u.id!==x);for(let u of N){let f=u==="center"?c.slice(a.first,a.last+1):i.region(u),g=t.map((p,m)=>{var k,L,w;let y=p.label!=null&&(L=(k=d.find(C=>{var R;return!(C.id in((R=p.columns)!=null?R:{}))}))==null?void 0:k.id)!=null?L:null,v=h("div","fg-row fg-summary-row",{role:"row"}),M=o||s==="top"?m*l:e*l+m*l;v.style.transform=`translateY(${M}px)`,v.style.height=`${l}px`;for(let C of f)v.append(this.summaryCell(C,p,(w=n[m])!=null?w:{},y));return v});o?this.summaryInners[u].replaceChildren(...g):(this.canvases[u].append(...g),this.canvasSummary[u]=g)}}summaryCell(e,t,n,o){var g,p,m,y,v;let s=h("div","fg-cell",{role:"gridcell"});s.style.left=`${e.left}px`,s.style.width=`${e.width}px`,s.dataset.col=e.id;let i=e.def,l=(g=i.align)!=null?g:i.type==="number"?"right":i.type==="boolean"?"center":"left";s.className=`fg-cell fg-align-${l}`;let c=(p=t.columns)==null?void 0:p[e.id];if(c===void 0)return e.id===o&&(s.textContent=(m=t.label)!=null?m:"",s.classList.add("fg-summary-label")),s;let a=n[e.id],d=oe(c),u=this.grid.store.state.locale.code,f;if(a==null||a==="")f="";else if(typeof a=="string")f=a;else if(d.agg==="count")f=new Intl.NumberFormat(u).format(a);else{let M=(y=i.type)!=null?y:typeof a=="number"?"number":a instanceof Date?"date":void 0;f=D({...i,type:M,format:(v=d.format)!=null?v:i.format},u)(a)}return s.textContent=d.prefix&&f?`${d.prefix} ${f}`:f,s}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 s=this.measureCtx;return s?(s.font=`${t?600:400} ${o}px ${n.fontFamily||"sans-serif"}`,s.measureText(e).width):e.length*o*.6}scrollToRow(e){this.scroller.scrollTop=Math.max(0,e)*this.opts.rowHeight+this.topOffset}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()}};var pt=4,j=r=>r.id!==x&&(r.children?r.children.some(j):r.def.chooser!==!1),se=r=>{var e,t;return(t=(e=r.def.header)!=null?e:r.def.field)!=null?t:r.id},U=class{constructor(e){this.grid=e;this.collapsed=new Set;this.el=h("div","fg-chooser"),this.search=h("input","fg-input fg-chooser-search",{type:"search"});let t=h("label","fg-chooser-all");this.allBox=h("input","fg-checkbox",{type:"checkbox"}),this.allText=h("span"),t.append(this.allBox,this.allText),this.list=h("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,s=this.nodeOf(o);s&&this.setVisible(this.leavesOf(s),o.checked)}),this.list.addEventListener("click",n=>{let o=n.target.closest(".fg-chooser-caret"),s=o&&this.nodeOf(o);s&&(this.collapsed.has(s.id)?this.collapsed.delete(s.id):this.collapsed.add(s.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=(l,c)=>{for(let a of l)!j(a)||t&&!this.subtreeMatches(a,t)||(n.push(this.item(a,c)),a.children&&(t||!this.collapsed.has(a.id))&&o(a.children,c+1))};o(this.grid.columns.roots(),0),this.list.replaceChildren(...n);let s=this.matchingLeaves(),i=s.filter(l=>!l.hide).length;this.allBox.checked=s.length>0&&i===s.length,this.allBox.indeterminate=i>0&&i<s.length}query(){return this.search.value.trim().toLowerCase()}subtreeMatches(e,t){for(let n=e;n;n=n.parent)if(se(n).toLowerCase().includes(t))return!0;return!!e.children&&e.children.some(n=>j(n)&&this.subtreeMatches(n,t))}leavesOf(e){return j(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){var n;let t=(n=e.closest(".fg-chooser-item"))==null?void 0:n.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=h("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=h("span","fg-chooser-handle",{"aria-hidden":"true"});if(o.textContent="\u22EE\u22EE",n.append(o),e.children){let a=!this.collapsed.has(e.id),d=h("button","fg-chooser-caret",{type:"button",tabindex:"-1","aria-hidden":"true"});d.textContent=a?"\u25BE":"\u25B8",n.setAttribute("aria-expanded",String(a)),n.append(d)}let s=this.leavesOf(e),i=s.filter(a=>!a.hide).length,l=h("input","fg-checkbox",{type:"checkbox","aria-label":se(e)});l.checked=s.length>0&&i===s.length,l.indeterminate=i>0&&i<s.length,l.disabled=s.every(a=>a.def.lockVisible);let c=h("span","fg-chooser-label");if(c.textContent=se(e),n.append(l,c),!e.children&&e.pinned){let a=h("span","fg-chooser-pin");a.textContent=e.pinned==="left"?"\u21E4":"\u21E5",n.append(a)}return n}onPointerDown(e){let t=e.target.closest(".fg-chooser-handle"),n=t==null?void 0:t.closest(".fg-chooser-item"),o=n&&this.nodeOf(n);if(!n||!o||e.button!==0)return;e.preventDefault();let s=new Set(this.grid.columns.siblings(o.id).map(g=>g.id).filter(g=>g!==o.id)),i=[...this.list.querySelectorAll(".fg-chooser-item")].filter(g=>s.has(g.dataset.col)),l=e.clientY,c=!1,a=-1,d=h("div","fg-chooser-marker"),u=g=>{if(!c){if(Math.abs(g.clientY-l)<pt||!i.length)return;c=!0,n.classList.add("fg-dragging"),this.list.append(d)}a=i.filter(y=>{let v=y.getBoundingClientRect();return g.clientY>v.top+v.height/2}).length;let p=this.list.getBoundingClientRect().top-this.list.scrollTop,m=a<i.length?i[a].getBoundingClientRect().top:i[i.length-1].getBoundingClientRect().bottom;d.style.top=`${m-p-1}px`},f=()=>{if(window.removeEventListener("pointermove",u),window.removeEventListener("pointerup",f),d.remove(),n.classList.remove("fg-dragging"),!c||a<0)return;let g=this.grid.columns.siblings(o.id).map(y=>y.id).filter(y=>y!==o.id),p=a<i.length?g.indexOf(i[a].dataset.col):g.indexOf(i[i.length-1].dataset.col)+1;g[0]===x&&(p=Math.max(1,p));let m=this.grid.columns.siblings(o.id).findIndex(y=>y.id===o.id);p!==m&&(this.grid.columns.move(o.id,p),this.grid.layoutChanged(),this.grid.events.emit("columnMove",{colId:o.id,toIndex:p}))};window.addEventListener("pointermove",u),window.addEventListener("pointerup",f)}},Y=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=h("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=h("div","fg-chooser-head"),o=h("span","fg-menu-title");o.textContent=e.chooseColumns;let s=h("button","fg-chooser-close",{type:"button","aria-label":e.close});s.textContent="\xD7",s.addEventListener("click",()=>this.close()),n.append(o,s),this.panel=new U(this.grid),t.append(n,this.panel.el),document.body.append(t);let i=this.grid.renderer.root.getBoundingClientRect(),l=t.offsetWidth||280;t.style.left=`${Math.max(4,Math.min(i.right-l-8,window.innerWidth-l-4))}px`,t.style.top=`${Math.max(4,i.top+8)}px`,this.popup=t;let c=d=>{t.contains(d.target)||this.close()},a=d=>{d.key==="Escape"&&this.close()};document.addEventListener("pointerdown",c,!0),document.addEventListener("keydown",a,!0),this.off.push(()=>document.removeEventListener("pointerdown",c,!0),()=>document.removeEventListener("keydown",a,!0)),t.querySelector(".fg-chooser-search").focus()}refresh(){var e;(e=this.panel)==null||e.refresh()}close(){var e;for(let t of this.off)t();this.off=[],(e=this.popup)==null||e.remove(),this.popup=null,this.panel=null}},X=class{constructor(e,t){this.grid=e;this.el=h("div","fg-sidebar"),this.panelHost=h("div","fg-sidebar-panel"),this.panel=new U(e),this.panelHost.append(this.panel.el);let n=h("div","fg-sidebar-tabs");this.tab=h("button","fg-sidebar-tab",{type:"button"}),this.tab.addEventListener("click",()=>this.toggle()),n.append(this.tab),this.el.append(this.panelHost,n),e.renderer.root.append(this.el),this.panelHost.hidden=!t,this.refresh()}get isOpen(){return!this.panelHost.hidden}toggle(e=!this.isOpen){this.panelHost.hidden=!e,this.tab.setAttribute("aria-expanded",String(e)),this.grid.renderer.invalidate({header:!0,rows:!0})}refresh(){this.tab.textContent=this.grid.store.state.locale.columns,this.tab.setAttribute("aria-expanded",String(this.isOpen)),this.panel.refresh()}};var gt=5;function De(r,e){let t=o=>r(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 yt(r,e,t){let n=r.columns.getColumn(t);if(!n)return;let o=e.clientX,s=n.width;r.renderer.root.classList.add("fg-resizing"),De(i=>{r.columns.setWidth(t,s+i.clientX-o),r.layoutChanged()},()=>{var l,c;r.renderer.root.classList.remove("fg-resizing");let i=(c=(l=r.columns.getColumn(t))==null?void 0:l.width)!=null?c:s;i!==s&&r.events.emit("columnResize",{colId:t,width:i})})}function wt(r,e,t,n){var c,a;let o=new Set(r.columns.siblings(e).map(d=>d.id).filter(d=>d!==e&&d!==x)),s=[...n.querySelectorAll(".fg-header-cell")].filter(d=>o.has(d.dataset.col)).map(d=>({id:d.dataset.col,el:d})),i=h("div",`fg-drag-ghost fg-theme-${r.store.state.theme}`);i.textContent=(a=(c=t.querySelector(".fg-header-label"))==null?void 0:c.textContent)!=null?a:"",r.applyFontTo(i),document.body.append(i);let l=h("div","fg-drop-marker");return l.style.height=`${r.renderer.headerEl.offsetHeight}px`,r.renderer.root.append(l),t.classList.add("fg-dragging"),{ghost:i,marker:l,cell:t,sibs:s,target:-1}}function vt(r,e,t,n){e.ghost.style.transform=`translate(${t+12}px, ${n+8}px)`;let o=0;for(let l of e.sibs){let c=l.el.getBoundingClientRect();t>c.left+c.width/2&&o++}e.target=o;let s=r.renderer.root.getBoundingClientRect().left,i=o<e.sibs.length?e.sibs[o].el.getBoundingClientRect().left:e.sibs.length?e.sibs[e.sibs.length-1].el.getBoundingClientRect().right:e.cell.getBoundingClientRect().left;e.marker.style.left=`${i-s-1}px`}function bt(r,e,t){if(t.ghost.remove(),t.marker.remove(),t.cell.classList.remove("fg-dragging"),t.target<0||!t.sibs.length)return;let n=r.columns.siblings(e),o=n.findIndex(l=>l.id===e),s=n.map(l=>l.id).filter(l=>l!==e),i=t.target<t.sibs.length?s.indexOf(t.sibs[t.target].id):s.indexOf(t.sibs[t.sibs.length-1].id)+1;s[0]===x&&(i=Math.max(1,i)),i!==o&&(r.columns.move(e,i),r.layoutChanged(),r.events.emit("columnMove",{colId:e,toIndex:i}))}function xt(r,e,t,n){let o=r.columns.getNode(t),s=n.closest(".fg-header-pane");if(!o||!s)return;let i=e.clientX,l=null;De(c=>{if(!l){if(Math.abs(c.clientX-i)<gt)return;l=wt(r,t,n,s)}vt(r,l,c.clientX,c.clientY)},c=>{l?bt(r,t,l):!o.children&&A(o.def)&&r.toggleSort(t,c.shiftKey||c.ctrlKey||c.metaKey)})}function Ne(r){let e=r.renderer.headerEl,t=o=>{if(o.button!==0)return;let s=o.target,i=s.closest(".fg-header-cell"),l=i==null?void 0:i.dataset.col;!i||!l||l===x||s.closest(".fg-menu-btn")||(o.preventDefault(),s.closest(".fg-resize")?yt(r,o,l):xt(r,o,l,i))},n=o=>{var l;let s=o.target,i=s.closest(".fg-menu-btn");if(i){let c=(l=i.closest(".fg-header-cell"))==null?void 0:l.dataset.col;c&&r.menu.toggle(c,i);return}s.closest(".fg-select-all")&&r.toggleSelectAll()};return e.addEventListener("pointerdown",t),e.addEventListener("click",n),()=>{e.removeEventListener("pointerdown",t),e.removeEventListener("click",n)}}function Ae(r,e,t){return typeof r=="number"&&typeof e=="number"?r-e:r instanceof Date&&e instanceof Date?r.getTime()-e.getTime():typeof r=="boolean"&&typeof e=="boolean"?Number(r)-Number(e):t.compare(String(r),String(e))}function Ct(r,e){var t,n;if(S(e))return null;if(r.type==="number"){let o=typeof e=="number"?e:Number(e);return Number.isNaN(o)?null:o}return r.type==="date"?(n=(t=te(e))==null?void 0:t.getTime())!=null?n:null:e}function He(r,e,t){let n=S(r),o=S(e);return n||o?n===o?0:n?1:-1:Ae(r,e,t)}function Pe(r,e,t,n){let o=e.map(l=>({def:t(l.colId),mul:l.dir==="desc"?-1:1})).filter(l=>!!l.def);if(!o.length)return r;let s=o.map(l=>r.map(c=>{let a=E(l.def,c.data);return l.def.comparator?a:Ct(l.def,a)})),i=r.map((l,c)=>c);return i.sort((l,c)=>{var a;for(let d=0;d<o.length;d++){let{def:u,mul:f}=o[d],g=s[d][l],p=s[d][c],m;if(u.comparator)try{m=(Number(u.comparator(g,p,r[l].data,r[c].data))||0)*f}catch{b(`comparator of column "${(a=u.id)!=null?a:u.field}" threw; treating values as equal`),m=0}else{let y=S(g),v=S(p);m=y||v?y===v?0:y?1:-1:Ae(g,p,n)*f}if(m)return m}return l-c}),i.map(l=>r[l])}var Fe={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"]},$e=["blank","notBlank"],ie=500,Z=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){var p;this.close();let n=this.grid.columns.getNode(e);if(!n||n.children||e===x)return;let o=this.grid.store.state.locale,s=n.def,i=h("div",`fg-menu fg-theme-${this.grid.store.state.theme}`,{role:"dialog","aria-label":o.columnMenu});this.grid.applyFontTo(i),A(s)&&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(m=>m.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 l=[[o.autosizeThis,()=>this.grid.autoSize([e])],[o.autosizeAll,()=>this.grid.autoSize()]];s.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 c=W(s);c==="set"?i.append(this.setFilter(e,o)):c&&i.append(this.conditionFilter(e,c,o)),document.body.append(i);let a=t.getBoundingClientRect(),d=i.offsetWidth||248;i.style.left=`${Math.max(4,Math.min(a.right-d,window.innerWidth-d-4))}px`;let u=Math.max(4,Math.min(a.bottom+4,window.innerHeight-240));i.style.top=`${u}px`,i.style.maxHeight=`${Math.max(160,window.innerHeight-u-8)}px`,this.popup=i,this.colId=e;let f=m=>{let y=m.target;!i.contains(y)&&!t.contains(y)&&this.close()},g=m=>{m.key==="Escape"&&(this.close(),this.grid.renderer.root.focus())};document.addEventListener("pointerdown",f,!0),document.addEventListener("keydown",g,!0),this.off.push(()=>document.removeEventListener("pointerdown",f,!0),()=>document.removeEventListener("keydown",g,!0)),(p=i.querySelector(".fg-filter-value:not([hidden]), .fg-set-search, .fg-menu-item"))==null||p.focus()}close(){var e;for(let t of this.off)t();this.off=[],(e=this.popup)==null||e.remove(),this.popup=null,this.colId=null}section(e){let t=h("div","fg-menu-section");for(let[n,o]of e){let s=h("button","fg-menu-item",{type:"button"});s.textContent=n,s.addEventListener("click",()=>{o(),this.close()}),t.append(s)}return t}actions(e,t,n){let o=h("div","fg-menu-actions"),s=h("button","fg-btn",{type:"button"});s.textContent=t.reset,s.addEventListener("click",()=>{this.grid.setFilter(e,null),this.close()});let i=h("button","fg-btn fg-btn-primary",{type:"button"});return i.textContent=t.apply,i.addEventListener("click",n),o.append(s,i),o}title(e){let t=h("div","fg-menu-title");return t.textContent=e.filter,t}conditionFilter(e,t,n){var g;let o=this.grid.store.state.filters[e],s=o&&o.type===t?o:void 0,i=h("div","fg-menu-section fg-filter"),l=h("select","fg-filter-op",{"aria-label":n.filter});for(let p of Fe[t]){let m=h("option");m.value=p,m.textContent=n.ops[p],l.append(m)}l.value=(g=s==null?void 0:s.op)!=null?g:Fe[t][0];let c=t==="text"?"text":t,a=h("input","fg-input fg-filter-value",{type:c,placeholder:n.value,"aria-label":n.value}),d=h("input","fg-input fg-filter-value-to",{type:c,placeholder:n.valueTo,"aria-label":n.valueTo});s&&(a.value=s.value!=null?String(s.value):"",d.value="valueTo"in s&&s.valueTo!=null?String(s.valueTo):"");let u=()=>{a.hidden=$e.includes(l.value),d.hidden=l.value!=="between"};l.addEventListener("change",u),u();let f=()=>{let p=l.value,m=!$e.includes(p),y=null;if(t==="number"){let v=a.value===""?void 0:Number(a.value),M=d.value===""?void 0:Number(d.value);(!m||v!==void 0)&&(y={type:t,op:p,value:v,valueTo:M})}else t==="date"?(!m||a.value)&&(y={type:t,op:p,value:a.value||void 0,valueTo:d.value||void 0}):(!m||a.value)&&(y={type:t,op:p,value:a.value});this.grid.setFilter(e,y),this.close()};for(let p of[a,d])p.addEventListener("keydown",m=>m.key==="Enter"&&f());return i.append(this.title(n),l,a,d,this.actions(e,n,f)),i}setFilter(e,t){let{grid:n}=this,o=n.columns.getNode(e).def,s=D(o,t.code),i=n.collator(),l=new Map;for(let w of n.rowModel.allNodes()){let C=E(o,w.data),R=$(C);l.has(R)||l.set(R,C)}let c=[...l.entries()].sort((w,C)=>He(w[1],C[1],i)),a=n.store.state.filters[e],d=new Set((a==null?void 0:a.type)==="set"?a.values.map($).filter(w=>l.has(w)):l.keys()),u=(w,C)=>w===""?t.blanks:s(C),f=h("div","fg-menu-section fg-filter fg-set-filter"),g=h("input","fg-input fg-set-search",{type:"search",placeholder:t.search,"aria-label":t.search}),p=h("label","fg-set-item fg-set-all"),m=h("input","fg-checkbox",{type:"checkbox"});p.append(m,document.createTextNode(t.selectAll));let y=h("div","fg-set-list"),v=()=>{let w=g.value.trim().toLowerCase();return w?c.filter(([C,R])=>u(C,R).toLowerCase().includes(w)):c},M=()=>{let w=v(),C=w.filter(([R])=>d.has(R)).length;m.checked=C>0&&C===w.length,m.indeterminate=C>0&&C<w.length},k=()=>{let w=v();if(y.replaceChildren(...w.slice(0,ie).map(([C,R])=>{let ae=h("label","fg-set-item"),O=h("input","fg-checkbox",{type:"checkbox"});return O.checked=d.has(C),O.addEventListener("change",()=>{O.checked?d.add(C):d.delete(C),M()}),ae.append(O,document.createTextNode(u(C,R))),ae})),w.length>ie){let C=h("div","fg-set-more");C.textContent=`\u2026 +${w.length-ie}`,y.append(C)}M()};m.addEventListener("change",()=>{for(let[w]of v())m.checked?d.add(w):d.delete(w);k()}),g.addEventListener("input",k);let L=()=>{n.setFilter(e,d.size===l.size?null:{type:"set",values:c.filter(([w])=>d.has(w)).map(([,w])=>w)}),this.close()};return g.addEventListener("keydown",w=>w.key==="Enter"&&L()),k(),f.append(this.title(t),g,p,y,this.actions(e,t,L)),f}};var Q=class{constructor(e){this.deps=e;this.stats={filterRuns:0,sortRuns:0};this.last={};this.nodes=[];this.filtered=[];this.sorted=[];this.indexById=null}update(e){let t=this.deps.collator(),n=e.data!==this.last.data,o=n||e.filters!==this.last.filters||e.quickFilter!==this.last.quickFilter,s=o||e.sort!==this.last.sort||t!==this.last.collator;if(n){let i=this.deps.getRowId;this.nodes=e.data.map((l,c)=>({id:String(i?i(l):c),data:l,sourceIndex:c}))}o&&(this.filtered=this.filter(e),this.stats.filterRuns++),s&&(this.sorted=Pe(this.filtered,e.sort,i=>this.deps.columnDef(i),t),this.indexById=null,this.stats.sortRuns++),this.last={...e,collator:t}}invalidate(){this.last={}}getRowCount(){return this.sorted.length}getRow(e){return this.sorted[e]}rows(){return this.sorted}allNodes(){return this.nodes}indexOfId(e){var t;return this.indexById||(this.indexById=new Map(this.sorted.map((n,o)=>[n.id,o]))),(t=this.indexById.get(e))!=null?t:-1}filter(e){let t=Object.entries(e.filters).map(([s,i])=>({def:this.deps.columnDef(s),pred:be(i)})).filter(s=>!!s.def),n=xe(e.quickFilter),o=n.length?this.deps.quickColumns():[];return!t.length&&!n.length?this.nodes:this.nodes.filter(s=>{for(let i of t)if(!i.pred(E(i.def,s.data)))return!1;if(n.length){let i=o.map(l=>this.deps.format(l,E(l,s.data))).join("").toLowerCase();if(!Ce(n,i))return!1}return!0})}};function Oe(r){let e=r.idAt(r.index);if(r.mode==="single"){let t=new Set;return r.toggle&&r.selected.has(e)||t.add(e),{selected:t,anchorIndex:r.index}}if(r.range&&r.anchorIndex!=null){let t=r.toggle?new Set(r.selected):new Set,n=Math.min(r.anchorIndex,r.index),o=Math.max(r.anchorIndex,r.index);for(let s=n;s<=o;s++)t.add(r.idAt(s));return{selected:t,anchorIndex:r.anchorIndex}}if(r.toggle){let t=new Set(r.selected);return t.has(e)?t.delete(e):t.add(e),{selected:t,anchorIndex:r.index}}return{selected:new Set([e]),anchorIndex:r.index}}var J=class{constructor(e){this.bus=new P;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 ze=r=>Math.round(r*2.75),Be=r=>Math.round(r*3.1),qe=13;function We(r){return r.every(e=>e!==null&&typeof e=="object")?r:(b("data contains entries that are not objects; they were skipped"),r.filter(e=>e!==null&&typeof e=="object"))}var le=class{constructor(e,t){this.options=t;this.events=new P;this.disposers=[];this.collatorCache=null;this.destroyed=!1;this.summaryOpts=null;this.summaryValues=[];var s,i,l,c,a;Array.isArray(t.columns)||b("options.columns must be an array"),t.data!=null&&!Array.isArray(t.data)&&b("options.data must be an array"),this.store=new J({data:Array.isArray(t.data)?We(t.data):[],sort:[],filters:{},quickFilter:"",selected:new Set,anchorId:null,focus:null,locale:F(t.locale),theme:(s=t.theme)!=null?s:"light"}),this.columns=new q(this.withSelect(Array.isArray(t.columns)?t.columns:[])),this.rowModel=new Q({getRowId:t.getRowId,columnDef:d=>{var u;return(u=this.columns.getNode(d))==null?void 0:u.def},quickColumns:()=>this.columns.displayed().filter(d=>d.id!==x).map(d=>d.def),format:(d,u)=>D(d,this.store.state.locale.code)(u),collator:()=>this.collator()}),this.rowModel.update(this.store.state),this.summaryOpts=(i=t.summary)!=null?i:null,this.refreshSummary();let n=t.fontSize!=null&&t.fontSize>0?t.fontSize:null;t.fontSize!=null&&!(t.fontSize>0)&&b("fontSize must be a positive number"),this.font={size:n,family:(l=t.fontFamily)!=null?l:null};let o=n!=null?n:qe;if(this.renderer=new K(e,this,{rowHeight:(c=t.rowHeight)!=null?c:ze(o),headerHeight:(a=t.headerHeight)!=null?a:Be(o)}),this.renderer.applyFont(this.font.size,this.font.family),this.menu=new Z(this),this.chooser=new Y(this),this.sideBar=t.sideBar?new X(this,typeof t.sideBar=="object"&&!!t.sideBar.open):null,this.disposers.push(this.store.bus.on("change",d=>this.onChange(d)),Ne(this),Me(this),()=>this.menu.close(),()=>this.chooser.close()),typeof ResizeObserver!="undefined"){let d=new ResizeObserver(()=>this.renderer.schedule());d.observe(this.renderer.main),this.disposers.push(()=>d.disconnect())}this.renderer.render(),this.api=this.createApi()}collator(){var t;let e=this.store.state.locale.code;return((t=this.collatorCache)==null?void 0:t.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.rowModel.update(this.store.state),this.refreshSummary(),this.renderer.invalidate({header:!0,rows:!0}),this.refreshChoosers()}setFont(e){let t=this.font.size;e.size!==void 0&&(typeof e.size=="number"&&e.size>0?t=e.size:b("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!=null?t:qe;this.options.rowHeight==null&&(this.renderer.opts.rowHeight=ze(o)),this.options.headerHeight==null&&(this.renderer.opts.headerHeight=Be(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(){var e;return this.summaryOpts&&((e=this.summaryOpts.rows)!=null&&e.length)?{opts:this.summaryOpts,values:this.summaryValues}:null}setSummary(e){if(e&&!Array.isArray(e.rows)){b("setSummary: summary.rows must be an array");return}this.summaryOpts=e,this.refreshSummary(),this.renderer.invalidate({header:!0,rows:!0})}refreshSummary(){var o,s;let e=this.summaryOpts;if(!((o=e==null?void 0:e.rows)!=null&&o.length)){this.summaryValues=[];return}let t=(s=e.scope)!=null?s:"filtered",n=t==="all"?this.rowModel.allNodes().map(i=>i.data):t==="selected"?this.selectedRows():this.rowModel.rows().map(i=>i.data);this.summaryValues=Re(e.rows,n,i=>{var l;return(l=this.columns.getNode(i))==null?void 0:l.def})}refreshChoosers(){var e;this.chooser.refresh(),(e=this.sideBar)==null||e.refresh()}setColumnsVisible(e,t){let n=[];for(let o of e){let s=this.columns.getNode(o);!s||s.children||s.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){var c,a;let t=(e?e.map(d=>this.columns.getColumn(d)):this.columns.displayed()).filter(d=>!!d&&G(d.def)),{first:n,last:o}=this.renderer.renderedRange(),s=this.store.state.locale.code,i=66,l=24;for(let d of t){let u=this.renderer.measureText((a=(c=d.def.header)!=null?c:d.def.field)!=null?a:"",!0)+i,f=D(d.def,s);for(let p=n;p<=o;p++){let m=this.rowModel.getRow(p);m&&(u=Math.max(u,this.renderer.measureText(f(E(d.def,m.data)),!1)+l))}let g=this.columns.setWidth(d.id,Math.ceil(u));this.events.emit("columnResize",{colId:d.id,width:g})}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?(b(`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(l=>l.colId===e),s=o?o.dir==="asc"?"desc":null:"asc",i;t?s?o?i=n.map(l=>l.colId===e?{colId:e,dir:s}:l):i=[...n,{colId:e,dir:s}]:i=n.filter(l=>l.colId!==e):i=s?[{colId:e,dir:s}]:[],this.setSort(i)}setFilter(e,t){let n=this.columns.getNode(e);if(!n||n.children){b(`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){var i,l;let o=this.options.rowSelection;if(!o||e<0||e>=this.rowModel.getRowCount())return;let s=Oe({selected:this.store.state.selected,anchorIndex:this.anchorIndex(),mode:o,index:e,idAt:c=>this.rowModel.getRow(c).id,toggle:t,range:n});this.setSelected(s.selected,(l=(i=this.rowModel.getRow(s.anchorIndex))==null?void 0:i.id)!=null?l: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.rows(),t=this.store.state.selected,n=e.length>0&&e.every(s=>t.has(s.id)),o=new Set(t);for(let s of e)n?o.delete(s.id):o.add(s.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){return this.options.rowSelection?[ye,...e]:e}setData(e){if(!Array.isArray(e)){b("setData: rows must be an array");return}this.store.set({data:We(e)});let t=this.store.state.selected;if(t.size)if(this.options.getRowId){let s=new Set(this.rowModel.allNodes().map(l=>l.id)),i=new Set([...t].filter(l=>s.has(l)));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)){b("setColumns: columns must be an array");return}this.menu.close(),this.columns.setDefs(this.withSelect(e));let t=n=>!!this.columns.getNode(n);this.store.set({sort:this.store.state.sort.filter(n=>t(n.colId)),filters:Object.fromEntries(Object.entries(this.store.state.filters).filter(([n])=>t(n))),focus:null}),this.columnsChanged()}onChange(e){var n,o;let t=(...s)=>s.some(i=>e.includes(i));t("locale")&&(this.menu.close(),this.chooser.close(),(n=this.sideBar)==null||n.refresh(),this.rowModel.invalidate()),t("data","sort","filters","quickFilter","locale")&&this.rowModel.update(this.store.state),(t("data","filters","quickFilter","locale")||t("selected")&&((o=this.summaryOpts)==null?void 0:o.scope)==="selected")&&this.refreshSummary(),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){b("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!=null?t:""})),getSelectedRows:e(()=>this.selectedRows()),selectAll:e(()=>this.setSelected(new Set([...this.store.state.selected,...this.rowModel.rows().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:F(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=>{var n;return(n=this.sideBar)==null?void 0:n.toggle(t)}),setSummary:e(t=>this.setSummary(t)),getSummaryValues:e(()=>this.summaryValues.map(t=>({...t}))),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 Ge(r,e){return new le(r,e).api}var _e={en:T,ko:pe,"zh-CN":ge,ja:me,es:he,fr:fe,de:ue},Lt="0.1.0";for(let r of Object.values(_e))z(r);return Xe(St);})();
|