@xiee/utils 1.14.86 → 1.14.88
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/css/lt-interactive.css
CHANGED
|
@@ -133,6 +133,94 @@
|
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
+
/* typed filter chips sit after the search box in the head bar; each is a label,
|
|
137
|
+
* a summary of the current filter, and a funnel popping up the widget + box */
|
|
138
|
+
.lti-chip {
|
|
139
|
+
display: inline-flex;
|
|
140
|
+
align-items: center;
|
|
141
|
+
gap: 0.3em;
|
|
142
|
+
&.lti-on .lti-chip-name {
|
|
143
|
+
font-weight: 600;
|
|
144
|
+
}
|
|
145
|
+
.lti-chip-cur {
|
|
146
|
+
color: #555;
|
|
147
|
+
font-variant-numeric: tabular-nums;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
.lti-pop {
|
|
151
|
+
position: relative;
|
|
152
|
+
.lti-funnel {
|
|
153
|
+
border: none;
|
|
154
|
+
padding: 0;
|
|
155
|
+
width: 1.1em;
|
|
156
|
+
height: 1.1em;
|
|
157
|
+
opacity: 0.55;
|
|
158
|
+
background: center / contain no-repeat url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="gray"><path d="M1 2h14l-5.5 6.5V14l-3 1V8.5z"/></svg>');
|
|
159
|
+
}
|
|
160
|
+
/* a funnel standing in for a header-level filter reads as active when its
|
|
161
|
+
* column has a live term */
|
|
162
|
+
&.lti-on .lti-funnel {
|
|
163
|
+
opacity: 1;
|
|
164
|
+
}
|
|
165
|
+
.lti-pop-panel {
|
|
166
|
+
position: absolute;
|
|
167
|
+
z-index: 1;
|
|
168
|
+
top: 100%;
|
|
169
|
+
left: 0;
|
|
170
|
+
display: flex;
|
|
171
|
+
flex-direction: column;
|
|
172
|
+
/* an explicit display beats the UA [hidden] rule, so re-hide it here */
|
|
173
|
+
&[hidden] { display: none; }
|
|
174
|
+
gap: 0.5em;
|
|
175
|
+
min-width: 14em;
|
|
176
|
+
max-width: 90vw;
|
|
177
|
+
padding: 0.6em;
|
|
178
|
+
background: Canvas;
|
|
179
|
+
border: 1px solid;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/* the custom range slider: a track with a fill band between two button thumbs */
|
|
184
|
+
.lti-slider {
|
|
185
|
+
position: relative;
|
|
186
|
+
height: 1.2em;
|
|
187
|
+
margin: 0.4em 0.6em;
|
|
188
|
+
&::before {
|
|
189
|
+
content: "";
|
|
190
|
+
position: absolute;
|
|
191
|
+
inset: 50% 0 auto;
|
|
192
|
+
height: 3px;
|
|
193
|
+
transform: translateY(-50%);
|
|
194
|
+
background: #c8c8c8;
|
|
195
|
+
border-radius: 3px;
|
|
196
|
+
}
|
|
197
|
+
.lti-slider-fill {
|
|
198
|
+
position: absolute;
|
|
199
|
+
inset: 50% 0;
|
|
200
|
+
height: 3px;
|
|
201
|
+
transform: translateY(-50%);
|
|
202
|
+
background: #4a90d9;
|
|
203
|
+
}
|
|
204
|
+
.lti-thumb {
|
|
205
|
+
position: absolute;
|
|
206
|
+
top: 50%;
|
|
207
|
+
width: 14px;
|
|
208
|
+
height: 14px;
|
|
209
|
+
padding: 0;
|
|
210
|
+
transform: translate(-50%, -50%);
|
|
211
|
+
border: 2px solid #fff;
|
|
212
|
+
border-radius: 50%;
|
|
213
|
+
background: #4a90d9;
|
|
214
|
+
box-shadow: 0 0 2px rgba(0, 0, 0, 0.4);
|
|
215
|
+
cursor: pointer;
|
|
216
|
+
touch-action: none;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
.lti-slider-out {
|
|
220
|
+
text-align: center;
|
|
221
|
+
font-variant-numeric: tabular-nums;
|
|
222
|
+
}
|
|
223
|
+
|
|
136
224
|
.lti-pager {
|
|
137
225
|
display: flex;
|
|
138
226
|
align-items: center;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
.lt-table{& :is(.lti-head,.lti-pager-row) td{padding-left:0;padding-right:0}& .lti-search{background-image:url("data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"gray\" stroke-width=\"2\"><circle cx=\"6.5\" cy=\"6.5\" r=\"4.5\"/><path d=\"M10 10l5 5\"/></svg>");background-position:.4em;background-repeat:no-repeat;background-size:1em;width:100%;padding:.5em 0 .5em 1.6em}& .lti-search:focus{background-image:none;padding-left:.5em}& .lti-sortable{cursor:pointer;user-select:none}& .lti-sort{margin-left:.3em;font-size:.8em}& .lti-empty td{text-align:center}& .lti-expand{cursor:pointer;background:0 0;border:none;margin-right:.4em;padding:0}& .lti-detail>td{padding-left:1.5em}& th:has(.lti-resizer){position:relative}& .lti-resizer{cursor:col-resize;user-select:none;touch-action:none;width:5px;height:100%;position:absolute;top:0;right:0}& .lti-resizer:hover{opacity:.3;background:currentColor}&.lti-resizing{cursor:col-resize;user-select:none}&.lti-fixed{table-layout:fixed}& .lti-bar{align-items:center;gap:.3em;display:flex;& .lti-search{flex:1}&:has(.lti-cols){justify-content:space-between;& .lti-search{flex:0 auto;width:auto}}}& .lti-cols{position:relative;& button{background:url("data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"gray\" stroke-width=\"1.5\"><path d=\"M1 8s2.5-4.5 7-4.5 7 4.5 7 4.5-2.5 4.5-7 4.5-7-4.5-7-4.5z\"/><circle cx=\"8\" cy=\"8\" r=\"2\"/></svg>") 50%/contain no-repeat;border:none;width:1.2em;height:1.2em;padding:0}& .lti-menu{z-index:1;background:canvas;border:1px solid;padding:.3em .6em;position:absolute;top:100%;left:0;& label{white-space:nowrap;cursor:pointer;display:block}}}& .lti-pager{align-items:center;gap:.3em;display:flex}& button,& select{font:inherit;cursor:pointer}& .lti-pos{margin:0 auto 0 .3em}}
|
|
1
|
+
.lt-table{& :is(.lti-head,.lti-pager-row) td{padding-left:0;padding-right:0}& .lti-search{background-image:url("data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"gray\" stroke-width=\"2\"><circle cx=\"6.5\" cy=\"6.5\" r=\"4.5\"/><path d=\"M10 10l5 5\"/></svg>");background-position:.4em;background-repeat:no-repeat;background-size:1em;width:100%;padding:.5em 0 .5em 1.6em}& .lti-search:focus{background-image:none;padding-left:.5em}& .lti-sortable{cursor:pointer;user-select:none}& .lti-sort{margin-left:.3em;font-size:.8em}& .lti-empty td{text-align:center}& .lti-expand{cursor:pointer;background:0 0;border:none;margin-right:.4em;padding:0}& .lti-detail>td{padding-left:1.5em}& th:has(.lti-resizer){position:relative}& .lti-resizer{cursor:col-resize;user-select:none;touch-action:none;width:5px;height:100%;position:absolute;top:0;right:0}& .lti-resizer:hover{opacity:.3;background:currentColor}&.lti-resizing{cursor:col-resize;user-select:none}&.lti-fixed{table-layout:fixed}& .lti-bar{align-items:center;gap:.3em;display:flex;& .lti-search{flex:1}&:has(.lti-cols){justify-content:space-between;& .lti-search{flex:0 auto;width:auto}}}& .lti-cols{position:relative;& button{background:url("data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"gray\" stroke-width=\"1.5\"><path d=\"M1 8s2.5-4.5 7-4.5 7 4.5 7 4.5-2.5 4.5-7 4.5-7-4.5-7-4.5z\"/><circle cx=\"8\" cy=\"8\" r=\"2\"/></svg>") 50%/contain no-repeat;border:none;width:1.2em;height:1.2em;padding:0}& .lti-menu{z-index:1;background:canvas;border:1px solid;padding:.3em .6em;position:absolute;top:100%;left:0;& label{white-space:nowrap;cursor:pointer;display:block}}}& .lti-chip{align-items:center;gap:.3em;display:inline-flex;&.lti-on .lti-chip-name{font-weight:600}& .lti-chip-cur{color:#555;font-variant-numeric:tabular-nums}}& .lti-pop{position:relative;& .lti-funnel{opacity:.55;background:url("data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"gray\"><path d=\"M1 2h14l-5.5 6.5V14l-3 1V8.5z\"/></svg>") 50%/contain no-repeat;border:none;width:1.1em;height:1.1em;padding:0}&.lti-on .lti-funnel{opacity:1}& .lti-pop-panel{z-index:1;flex-direction:column;display:flex;position:absolute;top:100%;left:0;&[hidden]{display:none}background:canvas;border:1px solid;gap:.5em;min-width:14em;max-width:90vw;padding:.6em}}& .lti-slider{height:1.2em;margin:.4em .6em;position:relative;&:before{content:"";background:#c8c8c8;border-radius:3px;height:3px;position:absolute;inset:50% 0 auto;transform:translateY(-50%)}& .lti-slider-fill{background:#4a90d9;height:3px;position:absolute;inset:50% 0;transform:translateY(-50%)}& .lti-thumb{cursor:pointer;touch-action:none;background:#4a90d9;border:2px solid #fff;border-radius:50%;width:14px;height:14px;padding:0;position:absolute;top:50%;transform:translate(-50%,-50%);box-shadow:0 0 2px #0006}}& .lti-slider-out{text-align:center;font-variant-numeric:tabular-nums}& .lti-pager{align-items:center;gap:.3em;display:flex}& button,& select{font:inherit;cursor:pointer}& .lti-pos{margin:0 auto 0 .3em}}
|
|
2
2
|
/*# sourceMappingURL=lt-interactive.min.css.map */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":"AAKA,UAGE,kEAQA,gWAUA,4DAKA,gDAKA,4CAKA,kCAMA,oFASA,oCAKA,yCAGA,0HAUA,wDAMA,kDAKA,+BAMA,oDAIE,qBAGA,+CAIE,uCAQJ,8BAEE,uVAOA,6GAQE,
|
|
1
|
+
{"version":3,"mappings":"AAKA,UAGE,kEAQA,gWAUA,4DAKA,gDAKA,4CAKA,kCAMA,oFASA,oCAKA,yCAGA,0HAUA,wDAMA,kDAKA,+BAMA,oDAIE,qBAGA,+CAIE,uCAQJ,8BAEE,uVAOA,6GAQE,0DAUJ,4DAIE,wCAGA,8DAKF,6BAEE,oQAUA,+BAGA,gGAQE,uBACI,wFAUR,8DAIE,kIASA,0GAOA,6NAeF,sEAKA,sDAKA,8CAKA","sources":["lt-interactive.css"],"sourcesContent":["/* lt-interactive.css — controls for lt-interactive.js (search box, sortable\n * headers, column filters, pager). Classes are namespaced `lti-*` to avoid\n * clashing with core `lt-*`. Only properties that change a default are\n * declared. */\n\n.lt-table {\n /* the search box and the pager are full-width rows of the table, so they line\n * up with its edges rather than the cell text */\n :is(.lti-head, .lti-pager-row) td {\n padding-left: 0;\n padding-right: 0;\n }\n\n /* Each box fills its cell: the whole table for the search, one column for a\n * filter. A faded magnifier stands in for a placeholder — it says \"type here\n * to search\" in no language — and steps aside once the box has the focus. */\n .lti-search {\n width: 100%;\n padding: .5em 0 .5em 1.6em;\n background-image: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"gray\" stroke-width=\"2\"><circle cx=\"6.5\" cy=\"6.5\" r=\"4.5\"/><path d=\"M10 10l5 5\"/></svg>');\n background-repeat: no-repeat;\n background-position: 0.4em center;\n background-size: 1em;\n }\n /* on focus the magnifier goes away, leaving a small left pad so the caret\n * sits just inside the edge rather than behind the icon's wider gutter */\n .lti-search:focus {\n padding-left: .5em;\n background-image: none;\n }\n\n .lti-sortable {\n cursor: pointer;\n user-select: none;\n }\n /* the ▲/▼ indicator, set off from the column label */\n .lti-sort {\n margin-left: 0.3em;\n font-size: 0.8em;\n }\n\n .lti-empty td {\n text-align: center;\n }\n\n /* the expand caret leads the first cell of each row; it carries its own\n * glyph (▸ / ▾), so it needs no borders or background of its own */\n .lti-expand {\n border: none;\n background: none;\n padding: 0;\n margin-right: 0.4em;\n cursor: pointer;\n }\n /* a row's detail spans every column; the inset marks it as belonging to the\n * row above it */\n .lti-detail > td {\n padding-left: 1.5em;\n }\n\n /* the drag grip sits on a column's right edge, inside its header cell */\n th:has(.lti-resizer) {\n position: relative;\n }\n .lti-resizer {\n position: absolute;\n top: 0;\n right: 0;\n width: 5px;\n height: 100%;\n cursor: col-resize;\n user-select: none;\n touch-action: none;\n }\n .lti-resizer:hover {\n background: currentColor;\n opacity: 0.3;\n }\n /* while dragging, the pointer keeps the resize cursor anywhere on the table,\n * and the drag selects no text */\n &.lti-resizing {\n cursor: col-resize;\n user-select: none;\n }\n /* column widths are authoritative once frozen, so a drag moves one edge only */\n &.lti-fixed {\n table-layout: fixed;\n }\n\n /* the column menu and search box share this flex bar: alone, the search fills\n * it; with the menu button, they sit at opposite ends */\n .lti-bar {\n display: flex;\n align-items: center;\n gap: 0.3em;\n .lti-search {\n flex: 1;\n }\n &:has(.lti-cols) {\n justify-content: space-between;\n /* width:auto overrides the base 100%, so the box takes its natural width\n * and the free space falls between it and the menu button */\n .lti-search {\n flex: 0 1 auto;\n width: auto;\n }\n }\n }\n\n /* the column-visibility menu: an eye button and the checklist it pops up */\n .lti-cols {\n position: relative;\n button {\n border: none;\n padding: 0;\n width: 1.2em;\n height: 1.2em;\n background: center / contain no-repeat url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"gray\" stroke-width=\"1.5\"><path d=\"M1 8s2.5-4.5 7-4.5 7 4.5 7 4.5-2.5 4.5-7 4.5-7-4.5-7-4.5z\"/><circle cx=\"8\" cy=\"8\" r=\"2\"/></svg>');\n }\n .lti-menu {\n position: absolute;\n z-index: 1;\n top: 100%;\n left: 0;\n background: Canvas;\n border: 1px solid;\n padding: 0.3em 0.6em;\n label {\n display: block;\n white-space: nowrap;\n cursor: pointer;\n }\n }\n }\n\n /* typed filter chips sit after the search box in the head bar; each is a label,\n * a summary of the current filter, and a funnel popping up the widget + box */\n .lti-chip {\n display: inline-flex;\n align-items: center;\n gap: 0.3em;\n &.lti-on .lti-chip-name {\n font-weight: 600;\n }\n .lti-chip-cur {\n color: #555;\n font-variant-numeric: tabular-nums;\n }\n }\n .lti-pop {\n position: relative;\n .lti-funnel {\n border: none;\n padding: 0;\n width: 1.1em;\n height: 1.1em;\n opacity: 0.55;\n background: center / contain no-repeat url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"gray\"><path d=\"M1 2h14l-5.5 6.5V14l-3 1V8.5z\"/></svg>');\n }\n /* a funnel standing in for a header-level filter reads as active when its\n * column has a live term */\n &.lti-on .lti-funnel {\n opacity: 1;\n }\n .lti-pop-panel {\n position: absolute;\n z-index: 1;\n top: 100%;\n left: 0;\n display: flex;\n flex-direction: column;\n /* an explicit display beats the UA [hidden] rule, so re-hide it here */\n &[hidden] { display: none; }\n gap: 0.5em;\n min-width: 14em;\n max-width: 90vw;\n padding: 0.6em;\n background: Canvas;\n border: 1px solid;\n }\n }\n\n /* the custom range slider: a track with a fill band between two button thumbs */\n .lti-slider {\n position: relative;\n height: 1.2em;\n margin: 0.4em 0.6em;\n &::before {\n content: \"\";\n position: absolute;\n inset: 50% 0 auto;\n height: 3px;\n transform: translateY(-50%);\n background: #c8c8c8;\n border-radius: 3px;\n }\n .lti-slider-fill {\n position: absolute;\n inset: 50% 0;\n height: 3px;\n transform: translateY(-50%);\n background: #4a90d9;\n }\n .lti-thumb {\n position: absolute;\n top: 50%;\n width: 14px;\n height: 14px;\n padding: 0;\n transform: translate(-50%, -50%);\n border: 2px solid #fff;\n border-radius: 50%;\n background: #4a90d9;\n box-shadow: 0 0 2px rgba(0, 0, 0, 0.4);\n cursor: pointer;\n touch-action: none;\n }\n }\n .lti-slider-out {\n text-align: center;\n font-variant-numeric: tabular-nums;\n }\n\n .lti-pager {\n display: flex;\n align-items: center;\n gap: 0.3em;\n }\n button, select {\n font: inherit;\n cursor: pointer;\n }\n /* push the row count away from the arrows, and the page size to the far end */\n .lti-pos {\n margin: 0 auto 0 0.3em;\n }\n}\n"],"names":[]}
|
package/js/lt-interactive.js
CHANGED
|
@@ -40,6 +40,18 @@
|
|
|
40
40
|
k.includes("-") ? e.setAttribute(k, props[k]) : (e[k] = props[k]);
|
|
41
41
|
return parent ? parent.appendChild(e) : e;
|
|
42
42
|
}
|
|
43
|
+
// Pointer-drag: after a pointerdown `e`, call `onMove(ev)` for every move until
|
|
44
|
+
// pointerup, then `onEnd()` (if given). Shared by column resize and the range
|
|
45
|
+
// filter's slider thumbs; suppresses text selection during the drag.
|
|
46
|
+
function drag(e, onMove, onEnd) {
|
|
47
|
+
e.preventDefault();
|
|
48
|
+
const doc = e.target.ownerDocument || document, move = ev => onMove(ev);
|
|
49
|
+
on(doc, "pointermove", move);
|
|
50
|
+
on(doc, "pointerup", () => {
|
|
51
|
+
off(doc, "pointermove", move);
|
|
52
|
+
onEnd && onEnd();
|
|
53
|
+
}, { once: true });
|
|
54
|
+
}
|
|
43
55
|
|
|
44
56
|
// Compile a search term into a predicate over one row's cells (`{raw, disp}`
|
|
45
57
|
// objects), or null to keep every row. Ported from forestly's
|
|
@@ -99,10 +111,14 @@
|
|
|
99
111
|
if (pred) idx = idx.filter(r => pred(cols.map(c => cell(c, r))));
|
|
100
112
|
|
|
101
113
|
// predicates registered from outside (el._lt.filter) run last, each a
|
|
102
|
-
// function of the row's raw values keyed by column; combined with AND
|
|
114
|
+
// function of the row's raw values keyed by column; combined with AND. The
|
|
115
|
+
// row carries *every* column (not just the visible `cols`), so a widget can
|
|
116
|
+
// filter on a hidden helper column — e.g. forestly's incidence slider reads
|
|
117
|
+
// the hidden `hide_prop`, its parameter dropdown the hidden `parameter`.
|
|
103
118
|
const fns = Object.values(state.predicates || {});
|
|
104
119
|
if (fns.length) {
|
|
105
|
-
const
|
|
120
|
+
const all = Object.keys(data);
|
|
121
|
+
const row = r => Object.fromEntries(all.map(c => [c, data[c]?.[r - 1] ?? null]));
|
|
106
122
|
idx = idx.filter(r => { const o = row(r); return fns.every(f => f(o)); });
|
|
107
123
|
}
|
|
108
124
|
|
|
@@ -201,21 +217,34 @@
|
|
|
201
217
|
|
|
202
218
|
// a small controller for driving the table from outside (e.g. forestly's
|
|
203
219
|
// own dropdown and range-slider widgets): register a predicate over a row's
|
|
204
|
-
// raw values (`{col: value}
|
|
205
|
-
// removing it, then re-render. `spec`/`state`
|
|
206
|
-
//
|
|
220
|
+
// raw values (`{col: value}`, including hidden columns) under an id,
|
|
221
|
+
// replacing or (with a null `fn`) removing it, then re-render. `spec`/`state`
|
|
222
|
+
// are exposed for reading (a widget's choices come from `el._ltSpec.data`).
|
|
207
223
|
el._lt = {
|
|
208
224
|
spec, state,
|
|
209
225
|
refresh: () => refresh(),
|
|
226
|
+
// the current filtered + sorted row indices (1-based, every row, not just
|
|
227
|
+
// the page) — e.g. for a "download what's shown" button that must honor the
|
|
228
|
+
// typed filters (which live in state.filters, not external predicates)
|
|
229
|
+
view: () => view || computeView(spec, disp, state),
|
|
210
230
|
filter(id, fn) {
|
|
211
231
|
fn ? (state.predicates[id] = fn) : (delete state.predicates[id]);
|
|
212
232
|
refresh();
|
|
213
233
|
}
|
|
214
234
|
};
|
|
215
235
|
|
|
236
|
+
// the `filter` option is normalized (R side) to { default?, cols? }: a
|
|
237
|
+
// `default` spec applies to every visible column left unnamed, `cols` maps a
|
|
238
|
+
// column to its spec (`true` = a plain box, else a typed select/range). A
|
|
239
|
+
// typed filter on a hidden column (not in `cols` = spec._cols) can't live
|
|
240
|
+
// under a header, so it becomes a chip in the head bar; everything else sits
|
|
241
|
+
// under its column header.
|
|
242
|
+
const flt = opts.filter,
|
|
243
|
+
barCols = flt?.cols ?
|
|
244
|
+
Object.keys(flt.cols).filter(c => flt.cols[c] !== true && !cols.includes(c)) : [];
|
|
216
245
|
// the table-wide controls share one full-width head row: the column menu
|
|
217
|
-
// (if any) at its start,
|
|
218
|
-
const headBar = (opts.search !== false || opts.hide) ?
|
|
246
|
+
// (if any) at its start, the search box, then any head-bar filter chips
|
|
247
|
+
const headBar = (opts.search !== false || opts.hide || barCols.length) ?
|
|
219
248
|
elem(el.ownerDocument, "div", { className: "lti-bar" },
|
|
220
249
|
fullRow(el.tHead || el.createTHead(), "lti-head", cols.length, 0)) : null;
|
|
221
250
|
// the header labels, read before sort/resize decorate the cells, so the
|
|
@@ -223,12 +252,16 @@
|
|
|
223
252
|
const labels = [...$$(hrow, "th")].map(th => th.textContent);
|
|
224
253
|
// wire sort before adding the filter row, so it sees the header row only
|
|
225
254
|
if (opts.sort !== false) addSort(hrow, cols, state, refresh);
|
|
226
|
-
|
|
255
|
+
// the under-header filter row: needed when a default applies to visible
|
|
256
|
+
// columns or any named column is itself visible
|
|
257
|
+
if (flt && (flt.default || (flt.cols && Object.keys(flt.cols).some(c => cols.includes(c)))))
|
|
258
|
+
addFilter(hrow, cols, flt, spec.data, state, refresh);
|
|
227
259
|
const layout = opts.resize ? fixedLayout(el, hrow, cols.length) : null;
|
|
228
260
|
if (opts.resize) addResize(el, layout);
|
|
229
261
|
if (opts.hide)
|
|
230
262
|
addColumnToggle(headBar, el, hrow, cols, labels, opts.hide, layout, postSwap);
|
|
231
263
|
if (opts.search !== false) addSearch(headBar, el, state, refresh);
|
|
264
|
+
if (barCols.length) addControlFilters(headBar, barCols, flt.cols, spec.data, state, refresh);
|
|
232
265
|
// row detail re-renders through the same seam: toggling a row only changes
|
|
233
266
|
// which rows carry a detail block, so a plain re-render (no new view) is
|
|
234
267
|
// enough
|
|
@@ -325,17 +358,24 @@
|
|
|
325
358
|
paint(); // reflect any initial sort carried on the spec
|
|
326
359
|
}
|
|
327
360
|
|
|
328
|
-
// A row of per-column
|
|
329
|
-
//
|
|
330
|
-
//
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
361
|
+
// A row of per-column filters below the headers, inside <thead> so the <tbody>
|
|
362
|
+
// swap leaves it (and what has been typed into it) alone. `flt` is the
|
|
363
|
+
// normalized { default?, cols? }: each visible column takes its named spec, or
|
|
364
|
+
// the default when unnamed. A `true` spec is a plain search box; a typed spec
|
|
365
|
+
// is a funnel + popover under the header (see typedFilter).
|
|
366
|
+
function addFilter(hrow, cols, flt, data, state, refresh) {
|
|
367
|
+
const doc = hrow.ownerDocument,
|
|
368
|
+
row = elem(doc, "tr", { className: "lti-filters" }),
|
|
369
|
+
def = flt.default, explicit = flt.cols || {};
|
|
334
370
|
cols.forEach(c => {
|
|
335
|
-
const cell = elem(doc, "td", {}, row)
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
371
|
+
const cell = elem(doc, "td", {}, row),
|
|
372
|
+
spec = c in explicit ? explicit[c] : def;
|
|
373
|
+
if (!spec) return; // no filter on this column
|
|
374
|
+
if (spec === true) { // a plain search box
|
|
375
|
+
const input = cell.appendChild(searchInput(doc, `Filter ${c}`));
|
|
376
|
+
onType(input, v => { v ? (state.filters[c] = v) : delete state.filters[c]; refresh(); });
|
|
377
|
+
} else // a typed funnel under the header
|
|
378
|
+
cell.appendChild(typedFilter(doc, c, spec, data, state, refresh, null));
|
|
339
379
|
});
|
|
340
380
|
hrow.parentNode.appendChild(row);
|
|
341
381
|
}
|
|
@@ -470,17 +510,12 @@
|
|
|
470
510
|
setWidth(i, natural(i));
|
|
471
511
|
};
|
|
472
512
|
grip.onpointerdown = e => {
|
|
473
|
-
e.preventDefault(); // no text selection while dragging
|
|
474
513
|
e.stopPropagation();
|
|
475
514
|
freeze();
|
|
476
|
-
const x0 = e.clientX, w0 = parseFloat(cs[i].style.width)
|
|
477
|
-
move = ev => setWidth(i, w0 + ev.clientX - x0);
|
|
515
|
+
const x0 = e.clientX, w0 = parseFloat(cs[i].style.width);
|
|
478
516
|
el.classList.add("lti-resizing");
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
off(doc, "pointermove", move);
|
|
482
|
-
el.classList.remove("lti-resizing");
|
|
483
|
-
}, { once: true });
|
|
517
|
+
drag(e, ev => setWidth(i, w0 + ev.clientX - x0),
|
|
518
|
+
() => el.classList.remove("lti-resizing"));
|
|
484
519
|
};
|
|
485
520
|
});
|
|
486
521
|
}
|
|
@@ -493,7 +528,7 @@
|
|
|
493
528
|
// start hidden). `layout` is resize's fixed layout, used when present to drop a
|
|
494
529
|
// hidden column's <col> so the fixed table reflows too.
|
|
495
530
|
function addColumnToggle(cell, el, hrow, cols, labels, opt, layout, postSwap) {
|
|
496
|
-
const doc = el.ownerDocument,
|
|
531
|
+
const doc = el.ownerDocument,
|
|
497
532
|
start = (opt && opt.hidden) || [], hidden = new Set();
|
|
498
533
|
// show/hide column i's cell in one row, skipping the single colspan cell of
|
|
499
534
|
// a detail or empty row (which spans every column and is no column's own)
|
|
@@ -505,14 +540,18 @@
|
|
|
505
540
|
postSwap.push(body => hidden.forEach(i => {
|
|
506
541
|
for (const tr of body.rows) setCell(tr, i, true);
|
|
507
542
|
}));
|
|
508
|
-
// show/hide column i everywhere it lives:
|
|
509
|
-
//
|
|
543
|
+
// show/hide column i everywhere it lives: the <col> (fixed layout only) and,
|
|
544
|
+
// one row at a time, every per-column cell — the header labels, the filter
|
|
545
|
+
// boxes, the body cells, and a plot's axis footer. The spanner row is the one
|
|
546
|
+
// row whose merged cells break the 1:1 column-to-cell index, so skip it; the
|
|
547
|
+
// setCell colspan guard skips the other full-width rows (search bar, detail,
|
|
548
|
+
// footnotes, pager). <thead>/<tfoot> survive a <tbody> swap, so this one pass
|
|
549
|
+
// keeps them in sync; only the fresh <tbody> is re-hidden (via postSwap).
|
|
510
550
|
const apply = i => {
|
|
511
551
|
const on = hidden.has(i);
|
|
512
|
-
if (ths[i]) ths[i].hidden = on;
|
|
513
552
|
if (layout?.cs[i]) layout.cs[i].hidden = on;
|
|
514
|
-
for (const
|
|
515
|
-
|
|
553
|
+
for (const tr of el.rows)
|
|
554
|
+
if (!tr.classList.contains("lt-spanner-row")) setCell(tr, i, on);
|
|
516
555
|
};
|
|
517
556
|
const wrap = elem(doc, "span", { className: "lti-cols" }, cell),
|
|
518
557
|
btn = elem(doc, "button", {
|
|
@@ -541,6 +580,242 @@
|
|
|
541
580
|
on(doc, "keydown", e => { if (e.key === "Escape") open(false); });
|
|
542
581
|
}
|
|
543
582
|
|
|
583
|
+
// --- Typed column filters (the `filter` named-list form). A typed spec is
|
|
584
|
+
// {type:"select"|"range", label?, choices?, min?, max?, step?, value?,
|
|
585
|
+
// selected?}; it renders as a funnel + popover, under its own header when the
|
|
586
|
+
// column is visible or as a labelled head-bar chip when it is hidden (the
|
|
587
|
+
// column still travels in spec.data, which is what computeView filters on). The
|
|
588
|
+
// popover holds an expression box AND a widget (a value dropdown or a range
|
|
589
|
+
// slider); both edit the one filter term for that column (state.filters[col])
|
|
590
|
+
// and stay in sync, so the widget is a friendly face on the same expression a
|
|
591
|
+
// reader could type.
|
|
592
|
+
|
|
593
|
+
// A filter term string <-> a widget value, per type. A `null` parse means the
|
|
594
|
+
// term is something the widget can't show (a hand-typed expression), so the
|
|
595
|
+
// widget falls back to neutral and the box stays authoritative.
|
|
596
|
+
const selExpr = v => v === "" ? "" : `x == ${JSON.stringify(String(v))}`,
|
|
597
|
+
selParse = s => {
|
|
598
|
+
const m = /^\s*x\s*==\s*(['"])([\s\S]*)\1\s*$/.exec(s || "");
|
|
599
|
+
return m ? m[2] : null;
|
|
600
|
+
},
|
|
601
|
+
rngExpr = (lo, hi, min, max) =>
|
|
602
|
+
lo <= min && hi >= max ? "" : `x >= ${lo} && x <= ${hi}`,
|
|
603
|
+
rngParse = s => {
|
|
604
|
+
const m = /^\s*x\s*>=\s*(-?[\d.]+)\s*&&\s*x\s*<=\s*(-?[\d.]+)\s*$/.exec(s || "");
|
|
605
|
+
return m ? [parseFloat(m[1]), parseFloat(m[2])] : null;
|
|
606
|
+
};
|
|
607
|
+
|
|
608
|
+
// Fill a typed spec's choices (select) or min/max (range) from the column's
|
|
609
|
+
// data when the R side left them out, so `filter = list(x = "select")` needs no
|
|
610
|
+
// enumeration. Returns a copy with the gaps filled.
|
|
611
|
+
function resolveSpec(spec, column) {
|
|
612
|
+
if (spec.type === "select") {
|
|
613
|
+
let choices = spec.choices;
|
|
614
|
+
if (!choices) {
|
|
615
|
+
const seen = new Set(), vals = [];
|
|
616
|
+
for (const v of column) if (v != null && !seen.has(v)) { seen.add(v); vals.push(v); }
|
|
617
|
+
vals.sort((a, b) => typeof a === "number" && typeof b === "number"
|
|
618
|
+
? a - b : String(a).localeCompare(String(b)));
|
|
619
|
+
choices = vals.map(v => ({ value: String(v), label: String(v) }));
|
|
620
|
+
}
|
|
621
|
+
return { ...spec, choices };
|
|
622
|
+
}
|
|
623
|
+
let { min, max } = spec;
|
|
624
|
+
if (min == null || max == null) {
|
|
625
|
+
let lo = Infinity, hi = -Infinity;
|
|
626
|
+
for (const v of column) {
|
|
627
|
+
const n = Number(v);
|
|
628
|
+
if (isFinite(n)) { if (n < lo) lo = n; if (n > hi) hi = n; }
|
|
629
|
+
}
|
|
630
|
+
if (min == null) min = isFinite(lo) ? lo : 0;
|
|
631
|
+
if (max == null) max = isFinite(hi) ? hi : 1;
|
|
632
|
+
}
|
|
633
|
+
return { ...spec, min, max };
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
// A dropdown of {value, label} options; `onInput(value)` fires on change.
|
|
637
|
+
function makeSelect(doc, options, onInput) {
|
|
638
|
+
const sel = elem(doc, "select", { className: "lti-filter-pick" });
|
|
639
|
+
options.forEach(o => elem(doc, "option", { value: o.value, textContent: o.label }, sel));
|
|
640
|
+
sel.onchange = () => onInput(sel.value);
|
|
641
|
+
return { el: sel, set: v => sel.value = v };
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
// A two-thumb range slider from a track, a fill band, and two <button> thumbs —
|
|
645
|
+
// no native <input type=range>, so no vendor pseudo-element CSS and no stacked-
|
|
646
|
+
// input z-index hacks. Thumbs drag via the shared drag() helper and step with
|
|
647
|
+
// the arrow keys (Home/End jump to the ends); the low thumb never passes the
|
|
648
|
+
// high one. `cfg` is {min, max, step}; `onInput([lo, hi])` fires as a thumb
|
|
649
|
+
// moves. Returns { el, set([lo, hi]) }.
|
|
650
|
+
function makeSlider(doc, cfg, onInput) {
|
|
651
|
+
const min = cfg.min, max = cfg.max, span = max - min || 1,
|
|
652
|
+
step = cfg.step || span / 100,
|
|
653
|
+
track = elem(doc, "div", { className: "lti-slider" }),
|
|
654
|
+
fill = elem(doc, "div", { className: "lti-slider-fill" }, track),
|
|
655
|
+
mk = lab => elem(doc, "button", {
|
|
656
|
+
type: "button", className: "lti-thumb", role: "slider",
|
|
657
|
+
"aria-label": lab, "aria-valuemin": min, "aria-valuemax": max
|
|
658
|
+
}, track),
|
|
659
|
+
thumbs = [mk("Minimum"), mk("Maximum")];
|
|
660
|
+
let val = [min, max];
|
|
661
|
+
const pct = v => (v - min) / span * 100,
|
|
662
|
+
snap = v => {
|
|
663
|
+
const s = Math.round((v - min) / step) * step + min;
|
|
664
|
+
return Math.min(max, Math.max(min, Math.round(s * 1e6) / 1e6));
|
|
665
|
+
},
|
|
666
|
+
paint = () => {
|
|
667
|
+
thumbs.forEach((t, i) => {
|
|
668
|
+
t.style.left = pct(val[i]) + "%";
|
|
669
|
+
t.setAttribute("aria-valuenow", val[i]);
|
|
670
|
+
});
|
|
671
|
+
fill.style.left = pct(val[0]) + "%";
|
|
672
|
+
fill.style.right = 100 - pct(val[1]) + "%";
|
|
673
|
+
},
|
|
674
|
+
setOne = (i, v) => {
|
|
675
|
+
val[i] = snap(v);
|
|
676
|
+
if (val[0] > val[1]) val = [Math.min(...val), Math.max(...val)];
|
|
677
|
+
paint();
|
|
678
|
+
onInput(val.slice());
|
|
679
|
+
};
|
|
680
|
+
thumbs.forEach((t, i) => {
|
|
681
|
+
const at = clientX => {
|
|
682
|
+
const r = track.getBoundingClientRect();
|
|
683
|
+
return min + span * Math.min(1, Math.max(0, (clientX - r.left) / r.width));
|
|
684
|
+
};
|
|
685
|
+
t.onpointerdown = e => { t.focus(); drag(e, ev => setOne(i, at(ev.clientX))); };
|
|
686
|
+
t.onkeydown = e => {
|
|
687
|
+
const d = { ArrowLeft: -1, ArrowDown: -1, ArrowRight: 1, ArrowUp: 1 }[e.key];
|
|
688
|
+
if (d) setOne(i, val[i] + d * step);
|
|
689
|
+
else if (e.key === "Home") setOne(i, min);
|
|
690
|
+
else if (e.key === "End") setOne(i, max);
|
|
691
|
+
else return;
|
|
692
|
+
e.preventDefault();
|
|
693
|
+
};
|
|
694
|
+
});
|
|
695
|
+
paint();
|
|
696
|
+
return { el: track, set: v => { val = v.slice(); paint(); } };
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
// A funnel button that toggles a floating panel built by `build(panel)`; closes
|
|
700
|
+
// on an outside click or Escape. Returns the wrapper element.
|
|
701
|
+
function popover(doc, label, build) {
|
|
702
|
+
const wrap = elem(doc, "span", { className: "lti-pop" }),
|
|
703
|
+
btn = elem(doc, "button", {
|
|
704
|
+
type: "button", className: "lti-funnel", title: label,
|
|
705
|
+
"aria-label": label, "aria-expanded": "false"
|
|
706
|
+
}, wrap),
|
|
707
|
+
panel = elem(doc, "div", { className: "lti-pop-panel", hidden: true }, wrap);
|
|
708
|
+
build(panel);
|
|
709
|
+
// keep the panel inside the viewport: it opens to the funnel's left edge by
|
|
710
|
+
// default, but a funnel near the right margin would push it off-screen (and
|
|
711
|
+
// raise a horizontal scrollbar), so anchor it to the funnel's right instead
|
|
712
|
+
const place = () => {
|
|
713
|
+
panel.style.left = panel.style.right = ""; // back to the CSS default (left:0)
|
|
714
|
+
const r = panel.getBoundingClientRect(), vw = (doc.defaultView || window).innerWidth;
|
|
715
|
+
if (r.right > vw - 4) { panel.style.left = "auto"; panel.style.right = "0"; }
|
|
716
|
+
};
|
|
717
|
+
const open = on => {
|
|
718
|
+
panel.hidden = !on;
|
|
719
|
+
btn.setAttribute("aria-expanded", String(on));
|
|
720
|
+
if (on) place();
|
|
721
|
+
};
|
|
722
|
+
btn.onclick = e => { e.stopPropagation(); open(panel.hidden); };
|
|
723
|
+
on(doc, "click", e => { if (!wrap.contains(e.target)) open(false); });
|
|
724
|
+
on(doc, "keydown", e => { if (e.key === "Escape") open(false); });
|
|
725
|
+
return wrap;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
// One bundle per filter type, so adding a type is a single entry rather than a
|
|
729
|
+
// branch in each of describe/build/init. `describe(term, cfg)` is the chip's
|
|
730
|
+
// one-line summary; `init(cfg)` is the term for the configured default; and
|
|
731
|
+
// `build(doc, cfg, setTerm)` makes the widget as a syncing editor `{ el,
|
|
732
|
+
// reflect(term) }`, where `el` (a node or array of nodes) goes in the popover
|
|
733
|
+
// and the widget's own input writes the term through `setTerm`. The term <->
|
|
734
|
+
// value primitives (selExpr etc., above) back these.
|
|
735
|
+
const KINDS = {
|
|
736
|
+
select: {
|
|
737
|
+
describe: (t, cfg) => {
|
|
738
|
+
const v = selParse(t);
|
|
739
|
+
if (v == null) return t ? "⋯" : "";
|
|
740
|
+
const o = cfg.choices.find(o => o.value === v);
|
|
741
|
+
return o ? o.label : v;
|
|
742
|
+
},
|
|
743
|
+
init: cfg => selExpr(cfg.selected ?? (cfg.choices[0] || {}).value ?? ""),
|
|
744
|
+
build: (doc, cfg, setTerm) => {
|
|
745
|
+
const w = makeSelect(doc, cfg.choices, v => setTerm(selExpr(v), ed)),
|
|
746
|
+
ed = { el: w.el, reflect: t => { const v = selParse(t); w.set(v == null ? "" : v); } };
|
|
747
|
+
return ed;
|
|
748
|
+
}
|
|
749
|
+
},
|
|
750
|
+
range: {
|
|
751
|
+
describe: t => { const p = rngParse(t); return p ? `${p[0]} – ${p[1]}` : t ? "⋯" : ""; },
|
|
752
|
+
init: cfg => cfg.value ? rngExpr(cfg.value[0], cfg.value[1], cfg.min, cfg.max) : "",
|
|
753
|
+
build: (doc, cfg, setTerm) => {
|
|
754
|
+
const out = elem(doc, "span", { className: "lti-slider-out" }),
|
|
755
|
+
show = p => out.textContent = `${p[0]} – ${p[1]}`,
|
|
756
|
+
w = makeSlider(doc, cfg, v => { show(v); setTerm(rngExpr(v[0], v[1], cfg.min, cfg.max), ed); }),
|
|
757
|
+
ed = { el: [w.el, out], reflect: t => { const p = rngParse(t) || [cfg.min, cfg.max]; w.set(p); show(p); } };
|
|
758
|
+
return ed;
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
};
|
|
762
|
+
|
|
763
|
+
// Build one typed column filter and return its element. The funnel + popover
|
|
764
|
+
// machinery is shared by both placements: a head-bar chip when `chipLabel` is a
|
|
765
|
+
// string (a label + current-value summary wrap the funnel), or a bare funnel
|
|
766
|
+
// under the column header when `chipLabel` is null.
|
|
767
|
+
function typedFilter(doc, col, spec, data, state, refresh, chipLabel) {
|
|
768
|
+
const cfg = resolveSpec(spec, data[col] || []),
|
|
769
|
+
kind = KINDS[cfg.type],
|
|
770
|
+
editors = []; // the expression box + widget, kept in sync
|
|
771
|
+
let mark = () => {}; // paints the active state once `root` exists (below)
|
|
772
|
+
// set the one term, re-render, and reflect it into every editor but the one
|
|
773
|
+
// that caused the change (`from`), so the slider and box update each other
|
|
774
|
+
const setTerm = (expr, from) => {
|
|
775
|
+
expr ? (state.filters[col] = expr) : delete state.filters[col];
|
|
776
|
+
refresh();
|
|
777
|
+
const cur = state.filters[col] || "";
|
|
778
|
+
editors.forEach(e => e !== from && e.reflect(cur));
|
|
779
|
+
mark(cur);
|
|
780
|
+
};
|
|
781
|
+
const wrap = popover(doc, `Filter ${cfg.label || col}`, panel => {
|
|
782
|
+
const box = elem(doc, "input", {
|
|
783
|
+
type: "search", className: "lti-search",
|
|
784
|
+
"aria-label": `${cfg.label || col} filter expression`
|
|
785
|
+
}, panel);
|
|
786
|
+
const boxEd = { reflect: v => { if (doc.activeElement !== box) box.value = v; } };
|
|
787
|
+
editors.push(boxEd);
|
|
788
|
+
onType(box, v => setTerm(v.trim(), boxEd));
|
|
789
|
+
const wEd = kind.build(doc, cfg, setTerm); // the widget as a syncing editor
|
|
790
|
+
editors.push(wEd);
|
|
791
|
+
panel.append(...[].concat(wEd.el));
|
|
792
|
+
setTerm(kind.init(cfg), null); // seed the configured default
|
|
793
|
+
});
|
|
794
|
+
// a hidden column wraps the funnel in a chip (label + value summary); a
|
|
795
|
+
// visible column shows the bare funnel under its own header
|
|
796
|
+
let root = wrap, summary;
|
|
797
|
+
if (chipLabel != null) {
|
|
798
|
+
root = elem(doc, "span", { className: "lti-chip" });
|
|
799
|
+
elem(doc, "span", { className: "lti-chip-name", textContent: chipLabel }, root);
|
|
800
|
+
summary = elem(doc, "span", { className: "lti-chip-cur" }, root);
|
|
801
|
+
root.appendChild(wrap);
|
|
802
|
+
}
|
|
803
|
+
mark = cur => {
|
|
804
|
+
root.classList.toggle("lti-on", !!cur);
|
|
805
|
+
if (summary) summary.textContent = kind.describe(cur, cfg);
|
|
806
|
+
};
|
|
807
|
+
mark(state.filters[col] || ""); // paint the seeded term
|
|
808
|
+
return root;
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
// A head-bar chip for each hidden typed column (see typedFilter).
|
|
812
|
+
function addControlFilters(cell, barCols, cfg, data, state, refresh) {
|
|
813
|
+
const doc = cell.ownerDocument;
|
|
814
|
+
for (const col of barCols)
|
|
815
|
+
cell.appendChild(
|
|
816
|
+
typedFilter(doc, col, cfg[col], data, state, refresh, cfg[col].label || col));
|
|
817
|
+
}
|
|
818
|
+
|
|
544
819
|
// Pager as the last row of <tfoot> (after any footnotes), with a page-size
|
|
545
820
|
// <select> when there is more than one size to offer. Both are symbols or
|
|
546
821
|
// numbers only: « ‹ › » for first/previous/next/last and `from–to / total`
|
package/js/lt-interactive.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(t=>{"use strict";const e=t.LT;if(!e?.onMount||e.plugins.interactive)return;let n;const o=t=>"number"==typeof t.find(t=>null!=t),r=t=>"string"!=typeof t?{...t}:"-"===t[0]?{col:t.slice(1),dir:"desc"}:{col:t,dir:"asc"},i=(t,e)=>t.querySelector(e),s=(t,e)=>t.querySelectorAll(e),c=(t,e,n,o)=>t.addEventListener(e,n,o);function a(t,e,n={},o){const r=t.createElement(e);for(const t in n)t.includes("-")?r.setAttribute(t,n[t]):r[t]=n[t];return o?o.appendChild(r):r}function l(t){const e=String(t??"").trim();if(""===e)return null;if(/(^|[^\w$])x([^\w$]|$)/.test(e)){let t;try{t=new Function("x",`return (${e});`)}catch(t){}if(t){const n=/^\s*!|!=/.test(e),o=e=>{if(null==e)return n;try{const n=Number(e);return!!t(String(e))||""!==e&&isFinite(n)&&!!t(n)}catch(t){return!1}};return t=>t[n?"every":"some"](t=>o(t.raw))}}const n="!"===e[0],o=(n?e.slice(1).trim():e).toLowerCase();return""===o?null:t=>n!==t.some(t=>null!=t.disp&&String(t.disp).toLowerCase().includes(o))}function d(t,e,r){const i=t._cols||[],s=t.data||{},c=(t,n)=>({raw:s[t]?.[n-1]??null,disp:e[t]?.[n-1]??""});let a=Array.from({length:(s[i[0]]||[]).length},(t,e)=>e+1);for(const t in r.filters||{}){const e=l(r.filters[t]);e&&(a=a.filter(n=>e([c(t,n)])))}const d=l(r.term);d&&(a=a.filter(t=>d(i.map(e=>c(e,t)))));const u=Object.values(r.predicates||{});if(u.length){const t=t=>Object.fromEntries(i.map(e=>[e,s[e]?.[t-1]??null]));a=a.filter(e=>{const n=t(e);return u.every(t=>t(n))})}const p=(r.sort||[]).map(t=>{const e=s[t.col];return e&&{col:e,num:o(e),dir:"desc"===t.dir?-1:1}}).filter(Boolean);return p.length&&(n||=new Intl.Collator,a.sort((t,e)=>{for(const{col:o,num:r,dir:i}of p){const s=o[t-1],c=o[e-1],a=null==s,l=null==c;if(a||l){if(a!==l)return a?1:-1;continue}const d=r?s-c:n.compare(String(s),String(c));if(d)return i*d}return 0})),a}function u(t,e){const n=e.pageSize;if(!n)return e.page=0,t;const o=Math.max(0,Math.ceil(t.length/n)-1);return e.page=Math.min(Math.max(e.page||0,0),o),t.slice(e.page*n,(e.page+1)*n)}function p(n,o){if(!(t=>!t.row_group&&!(t.ops||[]).some(t=>"row_group"===t.type||"indent"===t.type))(o))return console.warn("lt: interactive tables need flat rows (no row groups or indentation); rendering a static table.");const l=o.interactive,p=o._cols||[],m=function(t,e){const n={};return e.forEach(t=>n[t]=[]),s(t,"tbody tr").forEach((t,o)=>e.forEach((e,r)=>n[e][o]=t.children[r]?.textContent??"")),n}(n,p),w=[...s(n,"thead tr")].pop(),y={filters:{},predicates:{},page:0,pageSize:0,sort:Array.isArray(l.sort)?l.sort.map(r):[]};let x,b=()=>{};const v=[],S=(t=!0)=>{t&&(x=d(o,m,y),y.page=0);const r=u(x,y),s=a(n.ownerDocument,"template",{innerHTML:e.buildHtml({...o,_viewRows:r})}),c=i(s.content,"tbody");r.length?v.forEach(t=>t(c,r)):c.innerHTML=`<tr class="lti-empty"><td colspan="${p.length}">—</td></tr>`,i(n,"tbody").replaceWith(c),b(x.length)};n._lt={spec:o,state:y,refresh:()=>S(),filter(t,e){e?y.predicates[t]=e:delete y.predicates[t],S()}};const E=!1!==l.search||l.hide?a(n.ownerDocument,"div",{className:"lti-bar"},f(n.tHead||n.createTHead(),"lti-head",p.length,0)):null,C=[...s(w,"th")].map(t=>t.textContent);!1!==l.sort&&function(t,e,n,o){const r=t.ownerDocument,i={},c=()=>{for(const t in i)i[t].th.removeAttribute("aria-sort"),i[t].ind.textContent="";const t=n.sort||[];t.forEach(({col:e,dir:n},o)=>{const r=i[e];r&&(r.th.setAttribute("aria-sort","desc"===n?"descending":"ascending"),r.ind.textContent=("desc"===n?"▼":"▲")+(t.length>1?String(o+1).replace(/\d/g,t=>"₀₁₂₃₄₅₆₇₈₉"[t]):""))})};s(t,"th").forEach((t,s)=>{const l=e[s];null!=l&&(t.classList.add("lti-sortable"),i[l]={th:t,ind:a(r,"span",{className:"lti-sort"},t)},t.onclick=t=>{!function(t,e,n){const o=(t.sort||[]).slice(),r=o.findIndex(t=>t.col===e),i=r<0?"asc":"asc"===o[r].dir?"desc":null;if(!n)return void(t.sort=i?[{col:e,dir:i}]:[]);r<0?o.push({col:e,dir:i}):i?o[r]={col:e,dir:i}:o.splice(r,1);t.sort=o}(n,l,t.shiftKey),c(),o()})}),c()}(w,p,y,S),l.filter&&function(t,e,n,o,r){const i=t.ownerDocument,s=n.columns,c=a(i,"tr",{className:"lti-filters"});e.forEach(t=>{const e=a(i,"td",{},c);if(Array.isArray(s)&&!s.includes(t))return;g(e.appendChild(h(i,`Filter ${t}`)),e=>{o.filters[t]=e,r()})}),t.parentNode.appendChild(c)}(w,p,l.filter,y,S);const N=l.resize?function(t,e,n){const o=[...s(e,"th")],r=function(t,e){let n=i(t,"colgroup");if(!n){const o=t.ownerDocument;n=a(o,"colgroup");for(let t=0;t<e;t++)a(o,"col",{},n);t.caption?t.caption.after(n):t.prepend(n)}return[...n.children]}(t,n),c=t=>t.getBoundingClientRect().width,l=()=>{if(t.classList.contains("lti-fixed"))return;const e=o.map(c);t.style.width=c(t)+"px",r.forEach((t,n)=>t.style.width=e[n]+"px"),t.classList.add("lti-fixed")},d=e=>{const n=r.map(t=>t.style.width),i=t.style.width;r.forEach(t=>t.style.width=""),t.style.width="",t.classList.remove("lti-fixed");const s=c(o[e]);return r.forEach((t,e)=>t.style.width=n[e]),t.style.width=i,t.classList.add("lti-fixed"),s},u=(e,n,o=24)=>{const i=parseFloat(r[e].style.width);r[e].style.width=Math.max(n,o)+"px",t.style.width=parseFloat(t.style.width)+parseFloat(r[e].style.width)-i+"px"};return{ths:o,cs:r,freeze:l,natural:d,setWidth:u}}(n,w,p.length):null;if(l.resize&&function(t,e){const n=t.ownerDocument,{ths:o,cs:r,freeze:i,natural:s,setWidth:l}=e;o.forEach((e,o)=>{const d=a(n,"div",{className:"lti-resizer"},e);d.onclick=t=>t.stopPropagation(),d.ondblclick=t=>{t.stopPropagation(),i(),l(o,s(o))},d.onpointerdown=e=>{e.preventDefault(),e.stopPropagation(),i();const s=e.clientX,a=parseFloat(r[o].style.width),d=t=>l(o,a+t.clientX-s);t.classList.add("lti-resizing"),c(n,"pointermove",d),c(n,"pointerup",()=>{var e,o;e="pointermove",o=d,n.removeEventListener(e,o),t.classList.remove("lti-resizing")},{once:!0})}})}(n,N),l.hide&&function(t,e,n,o,r,i,l,d){const u=e.ownerDocument,p=[...s(n,"th")],h=i&&i.hidden||[],f=new Set,g=(t,e,n)=>{const o=t.children[e];o&&1===o.colSpan&&(o.hidden=n)};d.push(t=>f.forEach(e=>{for(const n of t.rows)g(n,e,!0)}));const m=t=>{const n=f.has(t);p[t]&&(p[t].hidden=n),l?.cs[t]&&(l.cs[t].hidden=n);for(const o of e.tBodies)for(const e of o.rows)g(e,t,n)},w=a(u,"span",{className:"lti-cols"},t),y=a(u,"button",{type:"button",title:"Columns","aria-label":"Show or hide columns","aria-expanded":"false"},w),x=a(u,"div",{className:"lti-menu",hidden:!0},w);o.forEach((t,e)=>{if(null==t)return;const n=a(u,"label",{},x),o=a(u,"input",{type:"checkbox",checked:!0},n);n.append(r[e]??t),h.includes(t)&&(o.checked=!1,f.add(e)),o.onchange=()=>{o.checked?f.delete(e):f.add(e),m(e)}}),o.forEach((t,e)=>m(e));const b=t=>{x.hidden=!t,y.setAttribute("aria-expanded",String(t))};y.onclick=t=>{t.stopPropagation(),b(x.hidden)},c(u,"click",t=>{w.contains(t.target)||b(!1)}),c(u,"keydown",t=>{"Escape"===t.key&&b(!1)})}(E,n,w,p,C,l.hide,N,v),!1!==l.search&&function(t,e,n,o){const r=t.appendChild(h(e.ownerDocument,"Search"));g(r,t=>{n.term=t,o()})}(E,n,y,S),l.detail&&v.push(function(n,o,r,i,s,c){const l=n.ownerDocument,d=r.length,u={};i.expanded=new Set;const p=(t,e)=>{const n={};for(const o in t)n[o]=t[o]?.[e-1]??null;return n},h=e=>{if(e in u)return u[e];const n=p(o._display||{},e);let r=null;if(Array.isArray(s)){const t={};for(const e of s)t[e]=[n[e]??null];r={data:t}}else{const i="function"==typeof s?s:t[s];"function"==typeof i&&(r=i(p(o.data||{},e),e,n))}return u[e]=r},f=t=>{i.expanded.has(t)?i.expanded.delete(t):i.expanded.add(t),c()};return(t,n)=>[...t.rows].forEach((t,o)=>{const r=n[o],s=t.cells[0],c=i.expanded.has(r);if(!s)return;const u=a(l,"button",{type:"button",className:"lti-expand",textContent:c?"▾":"▸","aria-expanded":String(c),"aria-label":"Toggle detail"});u.onclick=()=>f(r),s.prepend(u);const p=c&&h(r);if(p){const n=a(l,"tr",{className:"lti-detail"});t.after(n);const o=a(l,"td",{colSpan:d},n);e.render(a(l,"div",{},o),p)}})}(n,o,p,y,l.detail,()=>S(!1))),l.pager){const t=Array.isArray(l.pager)?l.pager:[10,25,50,100];b=function(t,e,n,o,r){const i=t.ownerDocument;let s=t.tFoot;s||((s=t.createTFoot()).className="lt-footer");const c=a(i,"div",{className:"lti-pager"},f(s,"lti-pager-row",e.length,-1)),l=a(i,"span",{className:"lti-pos"});o.pageSize=n[0];const d=[()=>0,t=>t-1,t=>t+1,()=>1e9],u=["«","‹","›","»"].map((t,e)=>{const n=a(i,"button",{type:"button",textContent:t,"aria-label":["First","Previous","Next","Last"][e]},c);return n.onclick=()=>{o.page=d[e](o.page),r()},n});if(c.appendChild(l),n.length>1){const t=a(i,"select",{"aria-label":"Rows per page"},c);n.forEach(e=>a(i,"option",{value:e,textContent:e||"∞"},t)),t.onchange=()=>{o.pageSize=+t.value,o.page=0,r()}}return t=>{const e=o.pageSize||t||1,n=Math.max(0,Math.ceil(t/e)-1);l.textContent=t?`${o.page*e+1}–${Math.min(t,(o.page+1)*e)} / ${t}`:"0 / 0",u.forEach((t,e)=>t.disabled=e<2?!o.page:o.page===n)}}(n,p,t,y,()=>S(!1)),S()}else(y.sort.length||l.detail)&&S()}function h(t,e){return a(t,"input",{type:"search",className:"lti-search","aria-label":e})}function f(t,e,n,o){const r=t.insertRow(o);return r.className=e,a(t.ownerDocument,"td",{colSpan:n},r)}function g(t,e){let n;const o=()=>e(t.value);t.oninput=()=>{clearTimeout(n),n=setTimeout(o,150)},t.onchange=()=>{clearTimeout(n),o()}}const m=(t,e)=>{e?.interactive&&!t.dataset.ltiOn&&(t.dataset.ltiOn="1",p(t,e))};e.plugins.interactive={matcher:l,computeView:d,pageSlice:u,enhance:p},e.onMount.push(m),"undefined"!=typeof document&&s(document,".lt-table").forEach(t=>m(t,t._ltSpec))})("undefined"!=typeof window?window:globalThis);
|
|
1
|
+
(t=>{"use strict";const e=t.LT;if(!e?.onMount||e.plugins.interactive)return;let n;const o=t=>"number"==typeof t.find(t=>null!=t),i=t=>"string"!=typeof t?{...t}:"-"===t[0]?{col:t.slice(1),dir:"desc"}:{col:t,dir:"asc"},s=(t,e)=>t.querySelector(e),l=(t,e)=>t.querySelectorAll(e),r=(t,e,n,o)=>t.addEventListener(e,n,o);function a(t,e,n={},o){const i=t.createElement(e);for(const t in n)t.includes("-")?i.setAttribute(t,n[t]):i[t]=n[t];return o?o.appendChild(i):i}function c(t,e,n){t.preventDefault();const o=t.target.ownerDocument||document,i=t=>e(t);r(o,"pointermove",i),r(o,"pointerup",()=>{var t,e;t="pointermove",e=i,o.removeEventListener(t,e),n&&n()},{once:!0})}function d(t){const e=String(t??"").trim();if(""===e)return null;if(/(^|[^\w$])x([^\w$]|$)/.test(e)){let t;try{t=new Function("x",`return (${e});`)}catch(t){}if(t){const n=/^\s*!|!=/.test(e),o=e=>{if(null==e)return n;try{const n=Number(e);return!!t(String(e))||""!==e&&isFinite(n)&&!!t(n)}catch(t){return!1}};return t=>t[n?"every":"some"](t=>o(t.raw))}}const n="!"===e[0],o=(n?e.slice(1).trim():e).toLowerCase();return""===o?null:t=>n!==t.some(t=>null!=t.disp&&String(t.disp).toLowerCase().includes(o))}function u(t,e,i){const s=t._cols||[],l=t.data||{},r=(t,n)=>({raw:l[t]?.[n-1]??null,disp:e[t]?.[n-1]??""});let a=Array.from({length:(l[s[0]]||[]).length},(t,e)=>e+1);for(const t in i.filters||{}){const e=d(i.filters[t]);e&&(a=a.filter(n=>e([r(t,n)])))}const c=d(i.term);c&&(a=a.filter(t=>c(s.map(e=>r(e,t)))));const u=Object.values(i.predicates||{});if(u.length){const t=Object.keys(l),e=e=>Object.fromEntries(t.map(t=>[t,l[t]?.[e-1]??null]));a=a.filter(t=>{const n=e(t);return u.every(t=>t(n))})}const p=(i.sort||[]).map(t=>{const e=l[t.col];return e&&{col:e,num:o(e),dir:"desc"===t.dir?-1:1}}).filter(Boolean);return p.length&&(n||=new Intl.Collator,a.sort((t,e)=>{for(const{col:o,num:i,dir:s}of p){const l=o[t-1],r=o[e-1],a=null==l,c=null==r;if(a||c){if(a!==c)return a?1:-1;continue}const d=i?l-r:n.compare(String(l),String(r));if(d)return s*d}return 0})),a}function p(t,e){const n=e.pageSize;if(!n)return e.page=0,t;const o=Math.max(0,Math.ceil(t.length/n)-1);return e.page=Math.min(Math.max(e.page||0,0),o),t.slice(e.page*n,(e.page+1)*n)}function f(n,o){if(!(t=>!t.row_group&&!(t.ops||[]).some(t=>"row_group"===t.type||"indent"===t.type))(o))return console.warn("lt: interactive tables need flat rows (no row groups or indentation); rendering a static table.");const d=o.interactive,f=o._cols||[],w=function(t,e){const n={};return e.forEach(t=>n[t]=[]),l(t,"tbody tr").forEach((t,o)=>e.forEach((e,i)=>n[e][o]=t.children[i]?.textContent??"")),n}(n,f),y=[...l(n,"thead tr")].pop(),b={filters:{},predicates:{},page:0,pageSize:0,sort:Array.isArray(d.sort)?d.sort.map(i):[]};let x,v=()=>{};const S=[],E=(t=!0)=>{t&&(x=u(o,w,b),b.page=0);const i=p(x,b),l=a(n.ownerDocument,"template",{innerHTML:e.buildHtml({...o,_viewRows:i})}),r=s(l.content,"tbody");i.length?S.forEach(t=>t(r,i)):r.innerHTML=`<tr class="lti-empty"><td colspan="${f.length}">—</td></tr>`,s(n,"tbody").replaceWith(r),v(x.length)};n._lt={spec:o,state:b,refresh:()=>E(),view:()=>x||u(o,w,b),filter(t,e){e?b.predicates[t]=e:delete b.predicates[t],E()}};const C=d.filter,k=C?.cols?Object.keys(C.cols).filter(t=>!0!==C.cols[t]&&!f.includes(t)):[],M=!1!==d.search||d.hide||k.length?a(n.ownerDocument,"div",{className:"lti-bar"},m(n.tHead||n.createTHead(),"lti-head",f.length,0)):null,$=[...l(y,"th")].map(t=>t.textContent);!1!==d.sort&&function(t,e,n,o){const i=t.ownerDocument,s={},r=()=>{for(const t in s)s[t].th.removeAttribute("aria-sort"),s[t].ind.textContent="";const t=n.sort||[];t.forEach(({col:e,dir:n},o)=>{const i=s[e];i&&(i.th.setAttribute("aria-sort","desc"===n?"descending":"ascending"),i.ind.textContent=("desc"===n?"▼":"▲")+(t.length>1?String(o+1).replace(/\d/g,t=>"₀₁₂₃₄₅₆₇₈₉"[t]):""))})};l(t,"th").forEach((t,l)=>{const c=e[l];null!=c&&(t.classList.add("lti-sortable"),s[c]={th:t,ind:a(i,"span",{className:"lti-sort"},t)},t.onclick=t=>{!function(t,e,n){const o=(t.sort||[]).slice(),i=o.findIndex(t=>t.col===e),s=i<0?"asc":"asc"===o[i].dir?"desc":null;if(!n)return void(t.sort=s?[{col:e,dir:s}]:[]);i<0?o.push({col:e,dir:s}):s?o[i]={col:e,dir:s}:o.splice(i,1);t.sort=o}(n,c,t.shiftKey),r(),o()})}),r()}(y,f,b,E),C&&(C.default||C.cols&&Object.keys(C.cols).some(t=>f.includes(t)))&&function(t,e,n,o,i,s){const l=t.ownerDocument,r=a(l,"tr",{className:"lti-filters"}),c=n.default,d=n.cols||{};e.forEach(t=>{const e=a(l,"td",{},r),n=t in d?d[t]:c;if(n)if(!0===n){g(e.appendChild(h(l,`Filter ${t}`)),e=>{e?i.filters[t]=e:delete i.filters[t],s()})}else e.appendChild(N(l,t,n,o,i,s,null))}),t.parentNode.appendChild(r)}(y,f,C,o.data,b,E);const A=d.resize?function(t,e,n){const o=[...l(e,"th")],i=function(t,e){let n=s(t,"colgroup");if(!n){const o=t.ownerDocument;n=a(o,"colgroup");for(let t=0;t<e;t++)a(o,"col",{},n);t.caption?t.caption.after(n):t.prepend(n)}return[...n.children]}(t,n),r=t=>t.getBoundingClientRect().width,c=()=>{if(t.classList.contains("lti-fixed"))return;const e=o.map(r);t.style.width=r(t)+"px",i.forEach((t,n)=>t.style.width=e[n]+"px"),t.classList.add("lti-fixed")},d=e=>{const n=i.map(t=>t.style.width),s=t.style.width;i.forEach(t=>t.style.width=""),t.style.width="",t.classList.remove("lti-fixed");const l=r(o[e]);return i.forEach((t,e)=>t.style.width=n[e]),t.style.width=s,t.classList.add("lti-fixed"),l},u=(e,n,o=24)=>{const s=parseFloat(i[e].style.width);i[e].style.width=Math.max(n,o)+"px",t.style.width=parseFloat(t.style.width)+parseFloat(i[e].style.width)-s+"px"};return{ths:o,cs:i,freeze:c,natural:d,setWidth:u}}(n,y,f.length):null;if(d.resize&&function(t,e){const n=t.ownerDocument,{ths:o,cs:i,freeze:s,natural:l,setWidth:r}=e;o.forEach((e,o)=>{const d=a(n,"div",{className:"lti-resizer"},e);d.onclick=t=>t.stopPropagation(),d.ondblclick=t=>{t.stopPropagation(),s(),r(o,l(o))},d.onpointerdown=e=>{e.stopPropagation(),s();const n=e.clientX,l=parseFloat(i[o].style.width);t.classList.add("lti-resizing"),c(e,t=>r(o,l+t.clientX-n),()=>t.classList.remove("lti-resizing"))}})}(n,A),d.hide&&function(t,e,n,o,i,s,l,c){const d=e.ownerDocument,u=s&&s.hidden||[],p=new Set,f=(t,e,n)=>{const o=t.children[e];o&&1===o.colSpan&&(o.hidden=n)};c.push(t=>p.forEach(e=>{for(const n of t.rows)f(n,e,!0)}));const h=t=>{const n=p.has(t);l?.cs[t]&&(l.cs[t].hidden=n);for(const o of e.rows)o.classList.contains("lt-spanner-row")||f(o,t,n)},m=a(d,"span",{className:"lti-cols"},t),g=a(d,"button",{type:"button",title:"Columns","aria-label":"Show or hide columns","aria-expanded":"false"},m),w=a(d,"div",{className:"lti-menu",hidden:!0},m);o.forEach((t,e)=>{if(null==t)return;const n=a(d,"label",{},w),o=a(d,"input",{type:"checkbox",checked:!0},n);n.append(i[e]??t),u.includes(t)&&(o.checked=!1,p.add(e)),o.onchange=()=>{o.checked?p.delete(e):p.add(e),h(e)}}),o.forEach((t,e)=>h(e));const y=t=>{w.hidden=!t,g.setAttribute("aria-expanded",String(t))};g.onclick=t=>{t.stopPropagation(),y(w.hidden)},r(d,"click",t=>{m.contains(t.target)||y(!1)}),r(d,"keydown",t=>{"Escape"===t.key&&y(!1)})}(M,n,0,f,$,d.hide,A,S),!1!==d.search&&function(t,e,n,o){const i=t.appendChild(h(e.ownerDocument,"Search"));g(i,t=>{n.term=t,o()})}(M,n,b,E),k.length&&function(t,e,n,o,i,s){const l=t.ownerDocument;for(const r of e)t.appendChild(N(l,r,n[r],o,i,s,n[r].label||r))}(M,k,C.cols,o.data,b,E),d.detail&&S.push(function(n,o,i,s,l,r){const c=n.ownerDocument,d=i.length,u={};s.expanded=new Set;const p=(t,e)=>{const n={};for(const o in t)n[o]=t[o]?.[e-1]??null;return n},f=e=>{if(e in u)return u[e];const n=p(o._display||{},e);let i=null;if(Array.isArray(l)){const t={};for(const e of l)t[e]=[n[e]??null];i={data:t}}else{const s="function"==typeof l?l:t[l];"function"==typeof s&&(i=s(p(o.data||{},e),e,n))}return u[e]=i},h=t=>{s.expanded.has(t)?s.expanded.delete(t):s.expanded.add(t),r()};return(t,n)=>[...t.rows].forEach((t,o)=>{const i=n[o],l=t.cells[0],r=s.expanded.has(i);if(!l)return;const u=a(c,"button",{type:"button",className:"lti-expand",textContent:r?"▾":"▸","aria-expanded":String(r),"aria-label":"Toggle detail"});u.onclick=()=>h(i),l.prepend(u);const p=r&&f(i);if(p){const n=a(c,"tr",{className:"lti-detail"});t.after(n);const o=a(c,"td",{colSpan:d},n);e.render(a(c,"div",{},o),p)}})}(n,o,f,b,d.detail,()=>E(!1))),d.pager){const t=Array.isArray(d.pager)?d.pager:[10,25,50,100];v=function(t,e,n,o,i){const s=t.ownerDocument;let l=t.tFoot;l||((l=t.createTFoot()).className="lt-footer");const r=a(s,"div",{className:"lti-pager"},m(l,"lti-pager-row",e.length,-1)),c=a(s,"span",{className:"lti-pos"});o.pageSize=n[0];const d=[()=>0,t=>t-1,t=>t+1,()=>1e9],u=["«","‹","›","»"].map((t,e)=>{const n=a(s,"button",{type:"button",textContent:t,"aria-label":["First","Previous","Next","Last"][e]},r);return n.onclick=()=>{o.page=d[e](o.page),i()},n});if(r.appendChild(c),n.length>1){const t=a(s,"select",{"aria-label":"Rows per page"},r);n.forEach(e=>a(s,"option",{value:e,textContent:e||"∞"},t)),t.onchange=()=>{o.pageSize=+t.value,o.page=0,i()}}return t=>{const e=o.pageSize||t||1,n=Math.max(0,Math.ceil(t/e)-1);c.textContent=t?`${o.page*e+1}–${Math.min(t,(o.page+1)*e)} / ${t}`:"0 / 0",u.forEach((t,e)=>t.disabled=e<2?!o.page:o.page===n)}}(n,f,t,b,()=>E(!1)),E()}else(b.sort.length||d.detail)&&E()}function h(t,e){return a(t,"input",{type:"search",className:"lti-search","aria-label":e})}function m(t,e,n,o){const i=t.insertRow(o);return i.className=e,a(t.ownerDocument,"td",{colSpan:n},i)}function g(t,e){let n;const o=()=>e(t.value);t.oninput=()=>{clearTimeout(n),n=setTimeout(o,150)},t.onchange=()=>{clearTimeout(n),o()}}const w=t=>""===t?"":`x == ${JSON.stringify(String(t))}`,y=t=>{const e=/^\s*x\s*==\s*(['"])([\s\S]*)\1\s*$/.exec(t||"");return e?e[2]:null},b=(t,e,n,o)=>t<=n&&e>=o?"":`x >= ${t} && x <= ${e}`,x=t=>{const e=/^\s*x\s*>=\s*(-?[\d.]+)\s*&&\s*x\s*<=\s*(-?[\d.]+)\s*$/.exec(t||"");return e?[parseFloat(e[1]),parseFloat(e[2])]:null};function v(t,e,n){const o=e.min,i=e.max,s=i-o||1,l=e.step||s/100,r=a(t,"div",{className:"lti-slider"}),d=a(t,"div",{className:"lti-slider-fill"},r),u=e=>a(t,"button",{type:"button",className:"lti-thumb",role:"slider","aria-label":e,"aria-valuemin":o,"aria-valuemax":i},r),p=[u("Minimum"),u("Maximum")];let f=[o,i];const h=t=>(t-o)/s*100,m=()=>{p.forEach((t,e)=>{t.style.left=h(f[e])+"%",t.setAttribute("aria-valuenow",f[e])}),d.style.left=h(f[0])+"%",d.style.right=100-h(f[1])+"%"},g=(t,e)=>{f[t]=(t=>{const e=Math.round((t-o)/l)*l+o;return Math.min(i,Math.max(o,Math.round(1e6*e)/1e6))})(e),f[0]>f[1]&&(f=[Math.min(...f),Math.max(...f)]),m(),n(f.slice())};return p.forEach((t,e)=>{t.onpointerdown=n=>{t.focus(),c(n,t=>g(e,(t=>{const e=r.getBoundingClientRect();return o+s*Math.min(1,Math.max(0,(t-e.left)/e.width))})(t.clientX)))},t.onkeydown=t=>{const n={ArrowLeft:-1,ArrowDown:-1,ArrowRight:1,ArrowUp:1}[t.key];if(n)g(e,f[e]+n*l);else if("Home"===t.key)g(e,o);else{if("End"!==t.key)return;g(e,i)}t.preventDefault()}}),m(),{el:r,set:t=>{f=t.slice(),m()}}}function S(t,e,n){const o=a(t,"span",{className:"lti-pop"}),i=a(t,"button",{type:"button",className:"lti-funnel",title:e,"aria-label":e,"aria-expanded":"false"},o),s=a(t,"div",{className:"lti-pop-panel",hidden:!0},o);n(s);const l=e=>{s.hidden=!e,i.setAttribute("aria-expanded",String(e)),e&&(()=>{s.style.left=s.style.right="";const e=s.getBoundingClientRect(),n=(t.defaultView||window).innerWidth;e.right>n-4&&(s.style.left="auto",s.style.right="0")})()};return i.onclick=t=>{t.stopPropagation(),l(s.hidden)},r(t,"click",t=>{o.contains(t.target)||l(!1)}),r(t,"keydown",t=>{"Escape"===t.key&&l(!1)}),o}const E={select:{describe:(t,e)=>{const n=y(t);if(null==n)return t?"⋯":"";const o=e.choices.find(t=>t.value===n);return o?o.label:n},init:t=>w(t.selected??(t.choices[0]||{}).value??""),build:(t,e,n)=>{const o=function(t,e,n){const o=a(t,"select",{className:"lti-filter-pick"});return e.forEach(e=>a(t,"option",{value:e.value,textContent:e.label},o)),o.onchange=()=>n(o.value),{el:o,set:t=>o.value=t}}(t,e.choices,t=>n(w(t),i)),i={el:o.el,reflect:t=>{const e=y(t);o.set(null==e?"":e)}};return i}},range:{describe:t=>{const e=x(t);return e?`${e[0]} – ${e[1]}`:t?"⋯":""},init:t=>t.value?b(t.value[0],t.value[1],t.min,t.max):"",build:(t,e,n)=>{const o=a(t,"span",{className:"lti-slider-out"}),i=t=>o.textContent=`${t[0]} – ${t[1]}`,s=v(t,e,t=>{i(t),n(b(t[0],t[1],e.min,e.max),l)}),l={el:[s.el,o],reflect:t=>{const n=x(t)||[e.min,e.max];s.set(n),i(n)}};return l}}};function N(t,e,n,o,i,s,l){const r=function(t,e){if("select"===t.type){let n=t.choices;if(!n){const t=new Set,o=[];for(const n of e)null==n||t.has(n)||(t.add(n),o.push(n));o.sort((t,e)=>"number"==typeof t&&"number"==typeof e?t-e:String(t).localeCompare(String(e))),n=o.map(t=>({value:String(t),label:String(t)}))}return{...t,choices:n}}let{min:n,max:o}=t;if(null==n||null==o){let t=1/0,i=-1/0;for(const n of e){const e=Number(n);isFinite(e)&&(e<t&&(t=e),e>i&&(i=e))}null==n&&(n=isFinite(t)?t:0),null==o&&(o=isFinite(i)?i:1)}return{...t,min:n,max:o}}(n,o[e]||[]),c=E[r.type],d=[];let u=()=>{};const p=(t,n)=>{t?i.filters[e]=t:delete i.filters[e],s();const o=i.filters[e]||"";d.forEach(t=>t!==n&&t.reflect(o)),u(o)},f=S(t,`Filter ${r.label||e}`,n=>{const o=a(t,"input",{type:"search",className:"lti-search","aria-label":`${r.label||e} filter expression`},n),i={reflect:e=>{t.activeElement!==o&&(o.value=e)}};d.push(i),g(o,t=>p(t.trim(),i));const s=c.build(t,r,p);d.push(s),n.append(...[].concat(s.el)),p(c.init(r),null)});let h,m=f;return null!=l&&(m=a(t,"span",{className:"lti-chip"}),a(t,"span",{className:"lti-chip-name",textContent:l},m),h=a(t,"span",{className:"lti-chip-cur"},m),m.appendChild(f)),u=t=>{m.classList.toggle("lti-on",!!t),h&&(h.textContent=c.describe(t,r))},u(i.filters[e]||""),m}const C=(t,e)=>{e?.interactive&&!t.dataset.ltiOn&&(t.dataset.ltiOn="1",f(t,e))};e.plugins.interactive={matcher:d,computeView:u,pageSlice:p,enhance:f},e.onMount.push(C),"undefined"!=typeof document&&l(document,".lt-table").forEach(t=>C(t,t._ltSpec))})("undefined"!=typeof window?window:globalThis);
|
|
2
2
|
//# sourceMappingURL=lt-interactive.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["root","LT","onMount","plugins","interactive","coll","numCol","col","find","v","parseKey","k","slice","dir","$","el","sel","querySelector","$$","querySelectorAll","on","t","type","fn","opts","addEventListener","elem","doc","tag","props","parent","e","createElement","includes","setAttribute","appendChild","matcher","term","String","trim","test","Function","neg","raw","num","Number","isFinite","cells","c","needle","toLowerCase","some","disp","computeView","spec","state","cols","_cols","data","cell","r","idx","Array","from","length","_","i","filters","pred","filter","map","fns","Object","values","predicates","row","fromEntries","o","every","f","keys","sort","Boolean","Intl","Collator","a","b","x","y","xn","yn","compare","pageSlice","view","n","pageSize","page","last","Math","max","ceil","min","enhance","row_group","ops","isFlat","console","warn","forEach","tr","ri","ci","children","textContent","captureDisplay","hrow","pop","isArray","sync","postSwap","refresh","stale","rows","tmp","ownerDocument","innerHTML","buildHtml","_viewRows","body","content","replaceWith","_lt","id","headBar","search","hide","className","fullRow","tHead","createTHead","labels","th","marks","paint","removeAttribute","ind","order","m","replace","d","classList","add","onclick","additive","findIndex","push","splice","cycle","shiftKey","addSort","opt","only","columns","onType","searchInput","parentNode","addFilter","layout","resize","nCol","ths","cs","g","caption","after","prepend","colGroup","wOf","getBoundingClientRect","width","freeze","contains","w","style","natural","keep","tw","remove","j","setWidth","old","parseFloat","fixedLayout","grip","stopPropagation","ondblclick","onpointerdown","preventDefault","x0","clientX","w0","move","ev","removeEventListener","once","addResize","start","hidden","Set","setCell","colSpan","apply","has","tBodies","wrap","btn","title","menu","label","box","checked","append","onchange","delete","open","target","key","addColumnToggle","input","addSearch","detail","detailOpt","rerender","cache","expanded","pick","src","build","_display","out","toggle","td0","child","render","addDetail","pager","sizes","repage","foot","tFoot","createTFoot","bar","pos","steps","p","btns","glyph","value","total","disabled","addPaginate","sect","cls","insertRow","timer","go","oninput","clearTimeout","setTimeout","dataset","ltiOn","document","_ltSpec","window","globalThis"],"sources":["lt-interactive.js"],"mappings":"AAUA,CAACA,IACC,aACA,MAAMC,EAAKD,EAAKC,GAEhB,IAAKA,GAAIC,SAAWD,EAAGE,QAAQC,YAAa,OAG5C,IAAIC,EAGJ,MAAMC,EAASC,GAA2C,iBAA7BA,EAAIC,KAAKC,GAAU,MAALA,GAKrCC,EAAWC,GAAkB,iBAANA,EAAiB,IAAKA,GACxC,MAATA,EAAE,GAAa,CAAEJ,IAAKI,EAAEC,MAAM,GAAIC,IAAK,QAAW,CAAEN,IAAKI,EAAGE,IAAK,OAG7DC,EAAI,CAACC,EAAIC,IAAQD,EAAGE,cAAcD,GAClCE,EAAK,CAACH,EAAIC,IAAQD,EAAGI,iBAAiBH,GACtCI,EAAK,CAACC,EAAGC,EAAMC,EAAIC,IAASH,EAAEI,iBAAiBH,EAAMC,EAAIC,GAK/D,SAASE,EAAKC,EAAKC,EAAKC,EAAQ,CAAC,EAAGC,GAClC,MAAMC,EAAIJ,EAAIK,cAAcJ,GAC5B,IAAK,MAAMjB,KAAKkB,EACdlB,EAAEsB,SAAS,KAAOF,EAAEG,aAAavB,EAAGkB,EAAMlB,IAAOoB,EAAEpB,GAAKkB,EAAMlB,GAChE,OAAOmB,EAASA,EAAOK,YAAYJ,GAAKA,CAC1C,CAYA,SAASK,EAAQC,GACf,MAAM5B,EAAI6B,OAAOD,GAAQ,IAAIE,OAC7B,GAAU,KAAN9B,EAAU,OAAO,KACrB,GAAI,wBAAwB+B,KAAK/B,GAAI,CACnC,IAAIc,EACJ,IAAMA,EAAK,IAAIkB,SAAS,IAAK,WAAWhC,MAAQ,CAAE,MAAOsB,GAAI,CAC7D,GAAIR,EAAI,CACN,MAAMmB,EAAM,WAAWF,KAAK/B,GAAI+B,EAAOG,IACrC,GAAW,MAAPA,EAAa,OAAOD,EACxB,IACE,MAAME,EAAMC,OAAOF,GACnB,QAASpB,EAAGe,OAAOK,KAAkB,KAARA,GAAcG,SAASF,MAAUrB,EAAGqB,EACnE,CAAE,MAAOb,GAAK,OAAO,CAAO,GAE9B,OAAOgB,GAASA,EAAML,EAAM,QAAU,QAAQM,GAAKR,EAAKQ,EAAEL,KAC5D,CACF,CACA,MAAMD,EAAe,MAATjC,EAAE,GAAYwC,GAAUP,EAAMjC,EAAEG,MAAM,GAAG2B,OAAS9B,GAAGyC,cACjE,MAAe,KAAXD,EAAsB,KACnBF,GAASL,IAAQK,EAAMI,KAC5BH,GAAe,MAAVA,EAAEI,MAAgBd,OAAOU,EAAEI,MAAMF,cAAcjB,SAASgB,GAEjE,CAUA,SAASI,EAAYC,EAAMF,EAAMG,GAC/B,MAAMC,EAAOF,EAAKG,OAAS,GAAIC,EAAOJ,EAAKI,MAAQ,CAAC,EAC9CC,EAAO,CAACX,EAAGY,KAAM,CACfjB,IAAKe,EAAKV,KAAKY,EAAI,IAAM,KAAMR,KAAMA,EAAKJ,KAAKY,EAAI,IAAM,KAEjE,IAAIC,EAAMC,MAAMC,KAAK,CAAEC,QAASN,EAAKF,EAAK,KAAO,IAAIQ,QAAU,CAACC,EAAGC,IAAMA,EAAI,GAG7E,IAAK,MAAMlB,KAAKO,EAAMY,SAAW,CAAC,EAAG,CACnC,MAAMC,EAAOhC,EAAQmB,EAAMY,QAAQnB,IAC/BoB,IAAMP,EAAMA,EAAIQ,OAAOT,GAAKQ,EAAK,CAACT,EAAKX,EAAGY,MAChD,CACA,MAAMQ,EAAOhC,EAAQmB,EAAMlB,MACvB+B,IAAMP,EAAMA,EAAIQ,OAAOT,GAAKQ,EAAKZ,EAAKc,IAAItB,GAAKW,EAAKX,EAAGY,OAI3D,MAAMW,EAAMC,OAAOC,OAAOlB,EAAMmB,YAAc,CAAC,GAC/C,GAAIH,EAAIP,OAAQ,CACd,MAAMW,EAAMf,GAAKY,OAAOI,YAAYpB,EAAKc,IAAItB,GAAK,CAACA,EAAGU,EAAKV,KAAKY,EAAI,IAAM,QAC1EC,EAAMA,EAAIQ,OAAOT,IAAO,MAAMiB,EAAIF,EAAIf,GAAI,OAAOW,EAAIO,MAAMC,GAAKA,EAAEF,KACpE,CAKA,MAAMG,GAAQzB,EAAM0B,MAAQ,IAAIX,IAAI3D,IAClC,MAAMJ,EAAMmD,EAAK/C,EAAEJ,KACnB,OAAOA,GAAO,CAAEA,MAAKqC,IAAKtC,EAAOC,GAAMM,IAAe,SAAVF,EAAEE,KAAkB,EAAI,KACnEwD,OAAOa,SAaV,OAZIF,EAAKhB,SACP3D,IAAS,IAAI8E,KAAKC,SAClBvB,EAAIoB,KAAK,CAACI,EAAGC,KACX,IAAK,MAAM/E,IAAEA,EAAGqC,IAAEA,EAAG/B,IAAEA,KAASmE,EAAM,CACpC,MAAMO,EAAIhF,EAAI8E,EAAI,GAAIG,EAAIjF,EAAI+E,EAAI,GAAIG,EAAU,MAALF,EAAWG,EAAU,MAALF,EAC3D,GAAIC,GAAMC,EAAI,CAAE,GAAID,IAAOC,EAAI,OAAOD,EAAK,GAAK,EAAG,QAAU,CAC7D,MAAMzC,EAAIJ,EAAM2C,EAAIC,EAAInF,EAAKsF,QAAQrD,OAAOiD,GAAIjD,OAAOkD,IACvD,GAAIxC,EAAG,OAAOnC,EAAMmC,CACtB,CACA,OAAO,KAGJa,CACT,CAMA,SAAS+B,EAAUC,EAAMtC,GACvB,MAAMuC,EAAIvC,EAAMwC,SAChB,IAAKD,EAAqB,OAAhBvC,EAAMyC,KAAO,EAAUH,EACjC,MAAMI,EAAOC,KAAKC,IAAI,EAAGD,KAAKE,KAAKP,EAAK7B,OAAS8B,GAAK,GAEtD,OADAvC,EAAMyC,KAAOE,KAAKG,IAAIH,KAAKC,IAAI5C,EAAMyC,MAAQ,EAAG,GAAIC,GAC7CJ,EAAKjF,MAAM2C,EAAMyC,KAAOF,GAAIvC,EAAMyC,KAAO,GAAKF,EACvD,CAsBA,SAASQ,EAAQvF,EAAIuC,GACnB,IAfaA,KAASA,EAAKiD,aACzBjD,EAAKkD,KAAO,IAAIrD,KAAK0B,GAAgB,cAAXA,EAAEvD,MAAmC,WAAXuD,EAAEvD,MAcnDmF,CAAOnD,GAAO,OAAOoD,QAAQC,KAChC,mGAGF,MAAMnF,EAAO8B,EAAKlD,YAAaoD,EAAOF,EAAKG,OAAS,GAC9CL,EAfR,SAAwBrC,EAAIyC,GAC1B,MAAMJ,EAAO,CAAC,EAKd,OAJAI,EAAKoD,QAAQ5D,GAAKI,EAAKJ,GAAK,IAC5B9B,EAAGH,EAAI,YAAY6F,QAAQ,CAACC,EAAIC,IAAOtD,EAAKoD,QAC1C,CAAC5D,EAAG+D,IAAO3D,EAAKJ,GAAG8D,GAAMD,EAAGG,SAASD,IAAKE,aAAe,KAEpD7D,CACT,CAQe8D,CAAenG,EAAIyC,GAE1B2D,EAAO,IAAIjG,EAAGH,EAAI,aAAaqG,MAG/B7D,EAAQ,CACNY,QAAS,CAAC,EAAGO,WAAY,CAAC,EAAGsB,KAAM,EAAGD,SAAU,EAChDd,KAAMnB,MAAMuD,QAAQ7F,EAAKyD,MAAQzD,EAAKyD,KAAKX,IAAI5D,GAAY,IAEnE,IAAImF,EACAyB,EAAO,OAKX,MAAMC,EAAW,GAIXC,EAAU,CAACC,GAAQ,KACnBA,IAAS5B,EAAOxC,EAAYC,EAAMF,EAAMG,GAAQA,EAAMyC,KAAO,GACjE,MAAM0B,EAAO9B,EAAUC,EAAMtC,GACvBoE,EAAMjG,EAAKX,EAAG6G,cAAe,WAAY,CACvCC,UAAW5H,EAAG6H,UAAU,IAAKxE,EAAMyE,UAAWL,MAEhDM,EAAOlH,EAAE6G,EAAIM,QAAS,SACvBP,EAAK1D,OAELuD,EAASX,QAAQ7B,GAAKA,EAAEiD,EAAMN,IADjCM,EAAKH,UAAY,sCAAsCrE,EAAKQ,sBAE9DlD,EAAEC,EAAI,SAASmH,YAAYF,GAC3BV,EAAKzB,EAAK7B,SAQZjD,EAAGoH,IAAM,CACP7E,OAAMC,QACNiE,QAAS,IAAMA,IACf,MAAAnD,CAAO+D,EAAI7G,GACTA,EAAMgC,EAAMmB,WAAW0D,GAAM7G,SAAcgC,EAAMmB,WAAW0D,GAC5DZ,GACF,GAKF,MAAMa,GAA2B,IAAhB7G,EAAK8G,QAAoB9G,EAAK+G,KAC7C7G,EAAKX,EAAG6G,cAAe,MAAO,CAAEY,UAAW,WACzCC,EAAQ1H,EAAG2H,OAAS3H,EAAG4H,cAAe,WAAYnF,EAAKQ,OAAQ,IAAM,KAGnE4E,EAAS,IAAI1H,EAAGiG,EAAM,OAAO7C,IAAIuE,GAAMA,EAAG5B,cAE9B,IAAdzF,EAAKyD,MA6EX,SAAiBkC,EAAM3D,EAAMD,EAAOiE,GAClC,MAAM7F,EAAMwF,EAAKS,cAAekB,EAAQ,CAAC,EACnCC,EAAQ,KACZ,IAAK,MAAM/F,KAAK8F,EACdA,EAAM9F,GAAG6F,GAAGG,gBAAgB,aAC5BF,EAAM9F,GAAGiG,IAAIhC,YAAc,GAE7B,MAAMiC,EAAQ3F,EAAM0B,MAAQ,GAC5BiE,EAAMtC,QAAQ,EAAGrG,MAAKM,OAAOqD,KAC3B,MAAMiF,EAAIL,EAAMvI,GACX4I,IACLA,EAAEN,GAAG3G,aAAa,YAAqB,SAARrB,EAAiB,aAAe,aAC/DsI,EAAEF,IAAIhC,aAAuB,SAARpG,EAAiB,IAAM,MACzCqI,EAAMlF,OAAS,EApSP1B,OAoSe4B,EAAI,GApSTkF,QAAQ,MAAOC,GAAK,aAAaA,IAoSnB,QAGvCnI,EAAGiG,EAAM,MAAMP,QAAQ,CAACiC,EAAI9B,KAC1B,MAAMxG,EAAMiD,EAAKuD,GACN,MAAPxG,IACJsI,EAAGS,UAAUC,IAAI,gBACjBT,EAAMvI,GAAO,CAAEsI,KAAII,IAAKvH,EAAKC,EAAK,OAAQ,CAAE6G,UAAW,YAAcK,IACrEA,EAAGW,QAAUzH,KApCjB,SAAewB,EAAOhD,EAAKkJ,GACzB,MAAMP,GAAS3F,EAAM0B,MAAQ,IAAIrE,QAC3BsD,EAAIgF,EAAMQ,UAAU/I,GAAKA,EAAEJ,MAAQA,GACnCM,EAAMqD,EAAI,EAAI,MAAyB,QAAjBgF,EAAMhF,GAAGrD,IAAgB,OAAS,KAC9D,IAAK4I,EAAoD,YAAxClG,EAAM0B,KAAOpE,EAAM,CAAC,CAAEN,MAAKM,QAAS,IACjDqD,EAAI,EAAGgF,EAAMS,KAAK,CAAEpJ,MAAKM,QACpBA,EAAKqI,EAAMhF,GAAK,CAAE3D,MAAKM,OAC3BqI,EAAMU,OAAO1F,EAAG,GACrBX,EAAM0B,KAAOiE,CACf,CA2BwBW,CAAMtG,EAAOhD,EAAKwB,EAAE+H,UAAWf,IAASvB,QAE9DuB,GACF,CArG2BgB,CAAQ5C,EAAM3D,EAAMD,EAAOiE,GAChDhG,EAAK6C,QAyGX,SAAmB8C,EAAM3D,EAAMwG,EAAKzG,EAAOiE,GACzC,MAAM7F,EAAMwF,EAAKS,cAAeqC,EAAOD,EAAIE,QACrCvF,EAAMjD,EAAKC,EAAK,KAAM,CAAE6G,UAAW,gBACzChF,EAAKoD,QAAQ5D,IACX,MAAMW,EAAOjC,EAAKC,EAAK,KAAM,CAAC,EAAGgD,GACjC,GAAIb,MAAMuD,QAAQ4C,KAAUA,EAAKhI,SAASe,GAAI,OAE9CmH,EADcxG,EAAKxB,YAAYiI,EAAYzI,EAAK,UAAUqB,MAC5CvC,IAAO8C,EAAMY,QAAQnB,GAAKvC,EAAG+G,QAE7CL,EAAKkD,WAAWlI,YAAYwC,EAC9B,CAnHmB2F,CAAUnD,EAAM3D,EAAMhC,EAAK6C,OAAQd,EAAOiE,GAC3D,MAAM+C,EAAS/I,EAAKgJ,OAsMtB,SAAqBzJ,EAAIoG,EAAMsD,GAC7B,MAAMC,EAAM,IAAIxJ,EAAGiG,EAAM,OACnBwD,EAtBR,SAAkB5J,EAAI0J,GACpB,IAAIG,EAAI9J,EAAEC,EAAI,YACd,IAAK6J,EAAG,CACN,MAAMjJ,EAAMZ,EAAG6G,cACfgD,EAAIlJ,EAAKC,EAAK,YACd,IAAK,IAAIuC,EAAI,EAAGA,EAAIuG,EAAMvG,IAAKxC,EAAKC,EAAK,MAAO,CAAC,EAAGiJ,GAEpD7J,EAAG8J,QAAU9J,EAAG8J,QAAQC,MAAMF,GAAK7J,EAAGgK,QAAQH,EAChD,CACA,MAAO,IAAIA,EAAE5D,SACf,CAYagE,CAASjK,EAAI0J,GAAOQ,EAAMlJ,GAAKA,EAAEmJ,wBAAwBC,MAC9DC,EAAS,KACb,GAAIrK,EAAGuI,UAAU+B,SAAS,aAAc,OACxC,MAAMC,EAAIZ,EAAIpG,IAAI2G,GAClBlK,EAAGwK,MAAMJ,MAAQF,EAAIlK,GAAM,KAC3B4J,EAAG/D,QAAQ,CAAC5D,EAAGkB,IAAMlB,EAAEuI,MAAMJ,MAAQG,EAAEpH,GAAK,MAC5CnD,EAAGuI,UAAUC,IAAI,cAEbiC,EAAUtH,IACd,MAAMuH,EAAOd,EAAGrG,IAAItB,GAAKA,EAAEuI,MAAMJ,OAAQO,EAAK3K,EAAGwK,MAAMJ,MACvDR,EAAG/D,QAAQ5D,GAAKA,EAAEuI,MAAMJ,MAAQ,IAChCpK,EAAGwK,MAAMJ,MAAQ,GACjBpK,EAAGuI,UAAUqC,OAAO,aACpB,MAAML,EAAIL,EAAIP,EAAIxG,IAIlB,OAHAyG,EAAG/D,QAAQ,CAAC5D,EAAG4I,IAAM5I,EAAEuI,MAAMJ,MAAQM,EAAKG,IAC1C7K,EAAGwK,MAAMJ,MAAQO,EACjB3K,EAAGuI,UAAUC,IAAI,aACV+B,GAEHO,EAAW,CAAC3H,EAAGoH,EAAGjF,EA7aV,MA8aZ,MAAMyF,EAAMC,WAAWpB,EAAGzG,GAAGqH,MAAMJ,OACnCR,EAAGzG,GAAGqH,MAAMJ,MAAQjF,KAAKC,IAAImF,EAAGjF,GAAO,KACvCtF,EAAGwK,MAAMJ,MACPY,WAAWhL,EAAGwK,MAAMJ,OAASY,WAAWpB,EAAGzG,GAAGqH,MAAMJ,OAASW,EAAM,MAEvE,MAAO,CAAEpB,MAAKC,KAAIS,SAAQI,UAASK,WACrC,CAlO+BG,CAAYjL,EAAIoG,EAAM3D,EAAKQ,QAAU,KAWlE,GAVIxC,EAAKgJ,QAuOX,SAAmBzJ,EAAIwJ,GACrB,MAAM5I,EAAMZ,EAAG6G,eACT8C,IAAEA,EAAGC,GAAEA,EAAES,OAAEA,EAAMI,QAAEA,EAAOK,SAAEA,GAAatB,EAC/CG,EAAI9D,QAAQ,CAACiC,EAAI3E,KACf,MAAM+H,EAAOvK,EAAKC,EAAK,MAAO,CAAE6G,UAAW,eAAiBK,GAG5DoD,EAAKzC,QAAUzH,GAAKA,EAAEmK,kBACtBD,EAAKE,WAAapK,IAChBA,EAAEmK,kBACFd,IACAS,EAAS3H,EAAGsH,EAAQtH,KAEtB+H,EAAKG,cAAgBrK,IACnBA,EAAEsK,iBACFtK,EAAEmK,kBACFd,IACA,MAAMkB,EAAKvK,EAAEwK,QAASC,EAAKT,WAAWpB,EAAGzG,GAAGqH,MAAMJ,OAC5CsB,EAAOC,GAAMb,EAAS3H,EAAGsI,EAAKE,EAAGH,QAAUD,GACjDvL,EAAGuI,UAAUC,IAAI,gBACjBnI,EAAGO,EAAK,cAAe8K,GACvBrL,EAAGO,EAAK,YAAa,KA/bf,IAAIL,EAAMC,EAAND,EAgcC,cAhcKC,EAgcUkL,EAApB9K,EAhcmBgL,oBAAoBrL,EAAMC,GAicjDR,EAAGuI,UAAUqC,OAAO,iBACnB,CAAEiB,MAAM,MAGjB,CAlQmBC,CAAU9L,EAAIwJ,GAC3B/I,EAAK+G,MA0QX,SAAyB5E,EAAM5C,EAAIoG,EAAM3D,EAAMoF,EAAQoB,EAAKO,EAAQhD,GAClE,MAAM5F,EAAMZ,EAAG6G,cAAe8C,EAAM,IAAIxJ,EAAGiG,EAAM,OAC3C2F,EAAS9C,GAAOA,EAAI+C,QAAW,GAAIA,EAAS,IAAIC,IAGhDC,EAAU,CAACpG,EAAI3C,EAAG9C,KACtB,MAAM4B,EAAI6D,EAAGG,SAAS9C,GAClBlB,GAAmB,IAAdA,EAAEkK,UAAelK,EAAE+J,OAAS3L,IAGvCmG,EAASoC,KAAK3B,GAAQ+E,EAAOnG,QAAQ1C,IACnC,IAAK,MAAM2C,KAAMmB,EAAKN,KAAMuF,EAAQpG,EAAI3C,GAAG,MAI7C,MAAMiJ,EAAQjJ,IACZ,MAAM9C,EAAK2L,EAAOK,IAAIlJ,GAClBwG,EAAIxG,KAAIwG,EAAIxG,GAAG6I,OAAS3L,GACxBmJ,GAAQI,GAAGzG,KAAIqG,EAAOI,GAAGzG,GAAG6I,OAAS3L,GACzC,IAAK,MAAM4G,KAAQjH,EAAGsM,QACpB,IAAK,MAAMxG,KAAMmB,EAAKN,KAAMuF,EAAQpG,EAAI3C,EAAG9C,IAEzCkM,EAAO5L,EAAKC,EAAK,OAAQ,CAAE6G,UAAW,YAAc7E,GACpD4J,EAAM7L,EAAKC,EAAK,SAAU,CACxBL,KAAM,SAAUkM,MAAO,UACvB,aAAc,uBAAwB,gBAAiB,SACtDF,GACHG,EAAO/L,EAAKC,EAAK,MAAO,CAAE6G,UAAW,WAAYuE,QAAQ,GAAQO,GACvE9J,EAAKoD,QAAQ,CAAC5D,EAAGkB,KACf,GAAS,MAALlB,EAAW,OACf,MAAM0K,EAAQhM,EAAKC,EAAK,QAAS,CAAC,EAAG8L,GAC/BE,EAAMjM,EAAKC,EAAK,QAAS,CAAEL,KAAM,WAAYsM,SAAS,GAAQF,GACpEA,EAAMG,OAAOjF,EAAO1E,IAAMlB,GACtB8J,EAAM7K,SAASe,KAAM2K,EAAIC,SAAU,EAAOb,EAAOxD,IAAIrF,IACzDyJ,EAAIG,SAAW,KACbH,EAAIC,QAAUb,EAAOgB,OAAO7J,GAAK6I,EAAOxD,IAAIrF,GAC5CiJ,EAAMjJ,MAGVV,EAAKoD,QAAQ,CAAC3C,EAAGC,IAAMiJ,EAAMjJ,IAC7B,MAAM8J,EAAO5M,IACXqM,EAAKV,QAAU3L,EACfmM,EAAIrL,aAAa,gBAAiBI,OAAOlB,KAE3CmM,EAAI/D,QAAUzH,IAAOA,EAAEmK,kBAAmB8B,EAAKP,EAAKV,SACpD3L,EAAGO,EAAK,QAASI,IAAYuL,EAAKjC,SAAStJ,EAAEkM,SAASD,GAAK,KAC3D5M,EAAGO,EAAK,UAAWI,IAAqB,WAAVA,EAAEmM,KAAkBF,GAAK,IACzD,CAxTIG,CAAgB9F,EAAStH,EAAIoG,EAAM3D,EAAMoF,EAAQpH,EAAK+G,KAAMgC,EAAQhD,IAClD,IAAhB/F,EAAK8G,QA+CX,SAAmB3E,EAAM5C,EAAIwC,EAAOiE,GAClC,MAAM4G,EAAQzK,EAAKxB,YAAYiI,EAAYrJ,EAAG6G,cAAe,WAC7DuC,EAAOiE,EAAO3N,IAAO8C,EAAMlB,KAAO5B,EAAG+G,KACvC,CAlD6B6G,CAAUhG,EAAStH,EAAIwC,EAAOiE,GAIrDhG,EAAK8M,QACP/G,EAASoC,KAsHb,SAAmB5I,EAAIuC,EAAME,EAAMD,EAAOgL,EAAWC,GACnD,MAAM7M,EAAMZ,EAAG6G,cAAe6C,EAAOjH,EAAKQ,OAAQyK,EAAQ,CAAC,EAC3DlL,EAAMmL,SAAW,IAAI1B,IAIrB,MAAM2B,EAAO,CAACC,EAAKhL,KACjB,MAAMiB,EAAI,CAAC,EAAG,IAAK,MAAM7B,KAAK4L,EAAK/J,EAAE7B,GAAK4L,EAAI5L,KAAKY,EAAI,IAAM,KAAM,OAAOiB,GAEtEgK,EAAQjL,IACZ,GAAIA,KAAK6K,EAAO,OAAOA,EAAM7K,GAC7B,MAAMR,EAAOuL,EAAKrL,EAAKwL,UAAY,CAAC,EAAGlL,GACvC,IAAImL,EAAM,KACV,GAAIjL,MAAMuD,QAAQkH,GAAY,CAG5B,MAAM7K,EAAO,CAAC,EACd,IAAK,MAAMV,KAAKuL,EAAW7K,EAAKV,GAAK,CAACI,EAAKJ,IAAM,MACjD+L,EAAM,CAAErL,OACV,KAAO,CAEL,MAAMnC,EAA0B,mBAAdgN,EAA2BA,EAAYvO,EAAKuO,GAC5C,mBAAPhN,IAAmBwN,EAAMxN,EAAGoN,EAAKrL,EAAKI,MAAQ,CAAC,EAAGE,GAAIA,EAAGR,GACtE,CACA,OAAOqL,EAAM7K,GAAKmL,GAEdC,EAASpL,IACbL,EAAMmL,SAAStB,IAAIxJ,GAAKL,EAAMmL,SAASX,OAAOnK,GAAKL,EAAMmL,SAASnF,IAAI3F,GACtE4K,KAEF,MAAO,CAACxG,EAAMN,IAAS,IAAIM,EAAKN,MAAMd,QAAQ,CAACC,EAAI3C,KACjD,MAAMN,EAAI8D,EAAKxD,GAAI+K,EAAMpI,EAAG9D,MAAM,GAAIiL,EAAOzK,EAAMmL,SAAStB,IAAIxJ,GAChE,IAAKqL,EAAK,OACV,MAAM1B,EAAM7L,EAAKC,EAAK,SAAU,CAC9BL,KAAM,SAAUkH,UAAW,aAAcvB,YAAa+G,EAAO,IAAM,IACnE,gBAAiB1L,OAAO0L,GAAO,aAAc,kBAE/CT,EAAI/D,QAAU,IAAMwF,EAAOpL,GAC3BqL,EAAIlE,QAAQwC,GACZ,MAAM2B,EAAQlB,GAAQa,EAAMjL,GAC5B,GAAIsL,EAAO,CACT,MAAMvK,EAAMjD,EAAKC,EAAK,KAAM,CAAE6G,UAAW,eACzC3B,EAAGiE,MAAMnG,GACT,MAAMhB,EAAOjC,EAAKC,EAAK,KAAM,CAAEuL,QAASzC,GAAQ9F,GAChD1E,EAAGkP,OAAOzN,EAAKC,EAAK,MAAO,CAAC,EAAGgC,GAAOuL,EACxC,GAEJ,CArKkBE,CAAUrO,EAAIuC,EAAME,EAAMD,EAAO/B,EAAK8M,OAAQ,IAAM9G,GAAQ,KAExEhG,EAAK6N,MAAO,CACd,MAAMC,EAAQxL,MAAMuD,QAAQ7F,EAAK6N,OAAS7N,EAAK6N,MAAQ,CAAC,GAAI,GAAI,GAAI,KACpE/H,EAqTJ,SAAqBvG,EAAIyC,EAAM8L,EAAO/L,EAAOgM,GAC3C,MAAM5N,EAAMZ,EAAG6G,cACf,IAAI4H,EAAOzO,EAAG0O,MAETD,KAAOA,EAAOzO,EAAG2O,eAAelH,UAAY,aACjD,MAAMmH,EAAMjO,EAAKC,EAAK,MAAO,CAAE6G,UAAW,aAClCC,EAAQ+G,EAAM,gBAAiBhM,EAAKQ,QAAS,IAC/C4L,EAAMlO,EAAKC,EAAK,OAAQ,CAAE6G,UAAW,YAC3CjF,EAAMwC,SAAWuJ,EAAM,GAEvB,MAAMO,EAAQ,CAAC,IAAM,EAAGC,GAAKA,EAAI,EAAGA,GAAKA,EAAI,EAAG,IAAM,KAChDC,EAAO,CAAC,IAAK,IAAK,IAAK,KAAKzL,IAAI,CAAC0L,EAAO9L,KAC5C,MAAMoB,EAAI5D,EAAKC,EAAK,SAAU,CAC5BL,KAAM,SAAU2F,YAAa+I,EAC7B,aAAc,CAAC,QAAS,WAAY,OAAQ,QAAQ9L,IACnDyL,GAEH,OADArK,EAAEkE,QAAU,KAAQjG,EAAMyC,KAAO6J,EAAM3L,GAAGX,EAAMyC,MAAOuJ,KAChDjK,IAGT,GADAqK,EAAIxN,YAAYyN,GACZN,EAAMtL,OAAS,EAAG,CACpB,MAAMhD,EAAMU,EAAKC,EAAK,SAAU,CAAE,aAAc,iBAAmBgO,GAEnEL,EAAM1I,QAAQd,GAAKpE,EAAKC,EAAK,SAAU,CAAEsO,MAAOnK,EAAGmB,YAAanB,GAAK,KAAO9E,IAC5EA,EAAI8M,SAAW,KAAQvK,EAAMwC,UAAY/E,EAAIiP,MAAO1M,EAAMyC,KAAO,EAAGuJ,IACtE,CACA,OAAOW,IAEL,MAAMpK,EAAIvC,EAAMwC,UAAYmK,GAAS,EAC/BjK,EAAOC,KAAKC,IAAI,EAAGD,KAAKE,KAAK8J,EAAQpK,GAAK,GAChD8J,EAAI3I,YAAciJ,EAChB,GAAG3M,EAAMyC,KAAOF,EAAI,KAAKI,KAAKG,IAAI6J,GAAQ3M,EAAMyC,KAAO,GAAKF,QAAQoK,IACpE,QACFH,EAAKnJ,QAAQ,CAACtB,EAAGpB,IAAMoB,EAAE6K,SAAWjM,EAAI,GAAKX,EAAMyC,KAAOzC,EAAMyC,OAASC,GAE7E,CAxVWmK,CAAYrP,EAAIyC,EAAM8L,EAAO/L,EAAO,IAAMiE,GAAQ,IACzDA,GACF,MAAWjE,EAAM0B,KAAKjB,QAAUxC,EAAK8M,SAGnC9G,GAEJ,CAKA,SAAS4C,EAAYzI,EAAK+L,GACxB,OAAOhM,EAAKC,EAAK,QAAS,CACxBL,KAAM,SAAUkH,UAAW,aAAc,aAAckF,GAE3D,CAMA,SAASjF,EAAQ4H,EAAMC,EAAK7F,EAAMmF,GAChC,MAAMjL,EAAM0L,EAAKE,UAAUX,GAE3B,OADAjL,EAAI6D,UAAY8H,EACT5O,EAAK2O,EAAKzI,cAAe,KAAM,CAAEsF,QAASzC,GAAQ9F,EAC3D,CAIA,SAASwF,EAAOiE,EAAOjB,GACrB,IAAIqD,EACJ,MAAMC,EAAK,IAAMtD,EAAMiB,EAAM6B,OAC7B7B,EAAMsC,QAAU,KAAQC,aAAaH,GAAQA,EAAQI,WAAWH,EAAI,MACpErC,EAAMN,SAAW,KAAQ6C,aAAaH,GAAQC,IAChD,CAwTA,MAAMvQ,EAAU,CAACa,EAAIuC,KACdA,GAAMlD,cAAeW,EAAG8P,QAAQC,QACrC/P,EAAG8P,QAAQC,MAAQ,IACnBxK,EAAQvF,EAAIuC,KAGdrD,EAAGE,QAAQC,YAAc,CAAEgC,UAASiB,cAAauC,YAAWU,WAC5DrG,EAAGC,QAAQyJ,KAAKzJ,GAIQ,oBAAb6Q,UACT7P,EAAG6P,SAAU,aAAanK,QAAQ7F,GAAMb,EAAQa,EAAIA,EAAGiQ,SAC1D,EA7kBD,CA6kBqB,oBAAXC,OAAyBA,OAASC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["root","LT","onMount","plugins","interactive","coll","numCol","col","find","v","parseKey","k","slice","dir","$","el","sel","querySelector","$$","querySelectorAll","on","t","type","fn","opts","addEventListener","elem","doc","tag","props","parent","e","createElement","includes","setAttribute","appendChild","drag","onMove","onEnd","preventDefault","target","ownerDocument","document","move","ev","removeEventListener","once","matcher","term","String","trim","test","Function","neg","raw","num","Number","isFinite","cells","c","needle","toLowerCase","some","disp","computeView","spec","state","cols","_cols","data","cell","r","idx","Array","from","length","_","i","filters","pred","filter","map","fns","Object","values","predicates","all","keys","row","fromEntries","o","every","f","sort","Boolean","Intl","Collator","a","b","x","y","xn","yn","compare","pageSlice","view","n","pageSize","page","last","Math","max","ceil","min","enhance","row_group","ops","isFlat","console","warn","forEach","tr","ri","ci","children","textContent","captureDisplay","hrow","pop","isArray","sync","postSwap","refresh","stale","rows","tmp","innerHTML","buildHtml","_viewRows","body","content","replaceWith","_lt","id","flt","barCols","headBar","search","hide","className","fullRow","tHead","createTHead","labels","th","marks","paint","removeAttribute","ind","order","m","replace","d","classList","add","onclick","additive","findIndex","push","splice","cycle","shiftKey","addSort","default","def","explicit","onType","searchInput","typedFilter","parentNode","addFilter","layout","resize","nCol","ths","cs","g","caption","after","prepend","colGroup","wOf","getBoundingClientRect","width","freeze","contains","w","style","natural","keep","tw","remove","j","setWidth","old","parseFloat","fixedLayout","grip","stopPropagation","ondblclick","onpointerdown","x0","clientX","w0","addResize","opt","start","hidden","Set","setCell","colSpan","apply","has","wrap","btn","title","menu","label","box","checked","append","onchange","delete","open","key","addColumnToggle","input","addSearch","cfg","addControlFilters","detail","detailOpt","rerender","cache","expanded","pick","src","build","_display","out","toggle","td0","child","render","addDetail","pager","sizes","repage","foot","tFoot","createTFoot","bar","pos","steps","p","btns","glyph","value","total","disabled","addPaginate","sect","cls","insertRow","timer","go","oninput","clearTimeout","setTimeout","selExpr","JSON","stringify","selParse","s","exec","rngExpr","lo","hi","rngParse","makeSlider","onInput","span","step","track","fill","mk","lab","role","thumbs","val","pct","left","right","setOne","round","snap","focus","at","onkeydown","ArrowLeft","ArrowDown","ArrowRight","ArrowUp","set","popover","panel","vw","defaultView","window","innerWidth","place","KINDS","select","describe","choices","init","selected","setTerm","options","makeSelect","ed","reflect","range","show","chipLabel","column","seen","vals","localeCompare","Infinity","resolveSpec","kind","editors","mark","expr","cur","boxEd","activeElement","wEd","concat","summary","dataset","ltiOn","_ltSpec","globalThis"],"sources":["lt-interactive.js"],"mappings":"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","ignoreList":[]}
|