@xiee/utils 1.14.87 → 1.14.89
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
|
|
@@ -211,15 +223,28 @@
|
|
|
211
223
|
el._lt = {
|
|
212
224
|
spec, state,
|
|
213
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),
|
|
214
230
|
filter(id, fn) {
|
|
215
231
|
fn ? (state.predicates[id] = fn) : (delete state.predicates[id]);
|
|
216
232
|
refresh();
|
|
217
233
|
}
|
|
218
234
|
};
|
|
219
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)) : [];
|
|
220
245
|
// the table-wide controls share one full-width head row: the column menu
|
|
221
|
-
// (if any) at its start,
|
|
222
|
-
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) ?
|
|
223
248
|
elem(el.ownerDocument, "div", { className: "lti-bar" },
|
|
224
249
|
fullRow(el.tHead || el.createTHead(), "lti-head", cols.length, 0)) : null;
|
|
225
250
|
// the header labels, read before sort/resize decorate the cells, so the
|
|
@@ -227,12 +252,16 @@
|
|
|
227
252
|
const labels = [...$$(hrow, "th")].map(th => th.textContent);
|
|
228
253
|
// wire sort before adding the filter row, so it sees the header row only
|
|
229
254
|
if (opts.sort !== false) addSort(hrow, cols, state, refresh);
|
|
230
|
-
|
|
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);
|
|
231
259
|
const layout = opts.resize ? fixedLayout(el, hrow, cols.length) : null;
|
|
232
260
|
if (opts.resize) addResize(el, layout);
|
|
233
261
|
if (opts.hide)
|
|
234
262
|
addColumnToggle(headBar, el, hrow, cols, labels, opts.hide, layout, postSwap);
|
|
235
263
|
if (opts.search !== false) addSearch(headBar, el, state, refresh);
|
|
264
|
+
if (barCols.length) addControlFilters(headBar, barCols, flt.cols, spec.data, state, refresh);
|
|
236
265
|
// row detail re-renders through the same seam: toggling a row only changes
|
|
237
266
|
// which rows carry a detail block, so a plain re-render (no new view) is
|
|
238
267
|
// enough
|
|
@@ -329,17 +358,24 @@
|
|
|
329
358
|
paint(); // reflect any initial sort carried on the spec
|
|
330
359
|
}
|
|
331
360
|
|
|
332
|
-
// A row of per-column
|
|
333
|
-
//
|
|
334
|
-
//
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
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 || {};
|
|
338
370
|
cols.forEach(c => {
|
|
339
|
-
const cell = elem(doc, "td", {}, row)
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
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));
|
|
343
379
|
});
|
|
344
380
|
hrow.parentNode.appendChild(row);
|
|
345
381
|
}
|
|
@@ -465,26 +501,24 @@
|
|
|
465
501
|
{ ths, cs, freeze, natural, setWidth } = layout;
|
|
466
502
|
ths.forEach((th, i) => {
|
|
467
503
|
const grip = elem(doc, "div", { className: "lti-resizer" }, th);
|
|
468
|
-
// the grip sits in a header cell that may sort on click:
|
|
469
|
-
//
|
|
470
|
-
grip
|
|
504
|
+
// the grip sits in a header cell that may sort on click: swallow the click
|
|
505
|
+
// that follows a resize (captured on the document, since dragging past the
|
|
506
|
+
// column's min width leaves the pointer off the grip, so the click lands on
|
|
507
|
+
// the <th> itself and would otherwise sort the column)
|
|
508
|
+
const noSort = () => on(doc, "click", e => e.stopPropagation(),
|
|
509
|
+
{ capture: true, once: true });
|
|
471
510
|
grip.ondblclick = e => {
|
|
472
511
|
e.stopPropagation();
|
|
473
512
|
freeze();
|
|
474
513
|
setWidth(i, natural(i));
|
|
475
514
|
};
|
|
476
515
|
grip.onpointerdown = e => {
|
|
477
|
-
e.preventDefault(); // no text selection while dragging
|
|
478
516
|
e.stopPropagation();
|
|
479
517
|
freeze();
|
|
480
|
-
const x0 = e.clientX, w0 = parseFloat(cs[i].style.width)
|
|
481
|
-
move = ev => setWidth(i, w0 + ev.clientX - x0);
|
|
518
|
+
const x0 = e.clientX, w0 = parseFloat(cs[i].style.width);
|
|
482
519
|
el.classList.add("lti-resizing");
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
off(doc, "pointermove", move);
|
|
486
|
-
el.classList.remove("lti-resizing");
|
|
487
|
-
}, { once: true });
|
|
520
|
+
drag(e, ev => setWidth(i, w0 + ev.clientX - x0),
|
|
521
|
+
() => { el.classList.remove("lti-resizing"); noSort(); });
|
|
488
522
|
};
|
|
489
523
|
});
|
|
490
524
|
}
|
|
@@ -497,7 +531,7 @@
|
|
|
497
531
|
// start hidden). `layout` is resize's fixed layout, used when present to drop a
|
|
498
532
|
// hidden column's <col> so the fixed table reflows too.
|
|
499
533
|
function addColumnToggle(cell, el, hrow, cols, labels, opt, layout, postSwap) {
|
|
500
|
-
const doc = el.ownerDocument,
|
|
534
|
+
const doc = el.ownerDocument,
|
|
501
535
|
start = (opt && opt.hidden) || [], hidden = new Set();
|
|
502
536
|
// show/hide column i's cell in one row, skipping the single colspan cell of
|
|
503
537
|
// a detail or empty row (which spans every column and is no column's own)
|
|
@@ -509,14 +543,18 @@
|
|
|
509
543
|
postSwap.push(body => hidden.forEach(i => {
|
|
510
544
|
for (const tr of body.rows) setCell(tr, i, true);
|
|
511
545
|
}));
|
|
512
|
-
// show/hide column i everywhere it lives:
|
|
513
|
-
//
|
|
546
|
+
// show/hide column i everywhere it lives: the <col> (fixed layout only) and,
|
|
547
|
+
// one row at a time, every per-column cell — the header labels, the filter
|
|
548
|
+
// boxes, the body cells, and a plot's axis footer. The spanner row is the one
|
|
549
|
+
// row whose merged cells break the 1:1 column-to-cell index, so skip it; the
|
|
550
|
+
// setCell colspan guard skips the other full-width rows (search bar, detail,
|
|
551
|
+
// footnotes, pager). <thead>/<tfoot> survive a <tbody> swap, so this one pass
|
|
552
|
+
// keeps them in sync; only the fresh <tbody> is re-hidden (via postSwap).
|
|
514
553
|
const apply = i => {
|
|
515
554
|
const on = hidden.has(i);
|
|
516
|
-
if (ths[i]) ths[i].hidden = on;
|
|
517
555
|
if (layout?.cs[i]) layout.cs[i].hidden = on;
|
|
518
|
-
for (const
|
|
519
|
-
|
|
556
|
+
for (const tr of el.rows)
|
|
557
|
+
if (!tr.classList.contains("lt-spanner-row")) setCell(tr, i, on);
|
|
520
558
|
};
|
|
521
559
|
const wrap = elem(doc, "span", { className: "lti-cols" }, cell),
|
|
522
560
|
btn = elem(doc, "button", {
|
|
@@ -545,6 +583,242 @@
|
|
|
545
583
|
on(doc, "keydown", e => { if (e.key === "Escape") open(false); });
|
|
546
584
|
}
|
|
547
585
|
|
|
586
|
+
// --- Typed column filters (the `filter` named-list form). A typed spec is
|
|
587
|
+
// {type:"select"|"range", label?, choices?, min?, max?, step?, value?,
|
|
588
|
+
// selected?}; it renders as a funnel + popover, under its own header when the
|
|
589
|
+
// column is visible or as a labelled head-bar chip when it is hidden (the
|
|
590
|
+
// column still travels in spec.data, which is what computeView filters on). The
|
|
591
|
+
// popover holds an expression box AND a widget (a value dropdown or a range
|
|
592
|
+
// slider); both edit the one filter term for that column (state.filters[col])
|
|
593
|
+
// and stay in sync, so the widget is a friendly face on the same expression a
|
|
594
|
+
// reader could type.
|
|
595
|
+
|
|
596
|
+
// A filter term string <-> a widget value, per type. A `null` parse means the
|
|
597
|
+
// term is something the widget can't show (a hand-typed expression), so the
|
|
598
|
+
// widget falls back to neutral and the box stays authoritative.
|
|
599
|
+
const selExpr = v => v === "" ? "" : `x == ${JSON.stringify(String(v))}`,
|
|
600
|
+
selParse = s => {
|
|
601
|
+
const m = /^\s*x\s*==\s*(['"])([\s\S]*)\1\s*$/.exec(s || "");
|
|
602
|
+
return m ? m[2] : null;
|
|
603
|
+
},
|
|
604
|
+
rngExpr = (lo, hi, min, max) =>
|
|
605
|
+
lo <= min && hi >= max ? "" : `x >= ${lo} && x <= ${hi}`,
|
|
606
|
+
rngParse = s => {
|
|
607
|
+
const m = /^\s*x\s*>=\s*(-?[\d.]+)\s*&&\s*x\s*<=\s*(-?[\d.]+)\s*$/.exec(s || "");
|
|
608
|
+
return m ? [parseFloat(m[1]), parseFloat(m[2])] : null;
|
|
609
|
+
};
|
|
610
|
+
|
|
611
|
+
// Fill a typed spec's choices (select) or min/max (range) from the column's
|
|
612
|
+
// data when the R side left them out, so `filter = list(x = "select")` needs no
|
|
613
|
+
// enumeration. Returns a copy with the gaps filled.
|
|
614
|
+
function resolveSpec(spec, column) {
|
|
615
|
+
if (spec.type === "select") {
|
|
616
|
+
let choices = spec.choices;
|
|
617
|
+
if (!choices) {
|
|
618
|
+
const seen = new Set(), vals = [];
|
|
619
|
+
for (const v of column) if (v != null && !seen.has(v)) { seen.add(v); vals.push(v); }
|
|
620
|
+
vals.sort((a, b) => typeof a === "number" && typeof b === "number"
|
|
621
|
+
? a - b : String(a).localeCompare(String(b)));
|
|
622
|
+
choices = vals.map(v => ({ value: String(v), label: String(v) }));
|
|
623
|
+
}
|
|
624
|
+
return { ...spec, choices };
|
|
625
|
+
}
|
|
626
|
+
let { min, max } = spec;
|
|
627
|
+
if (min == null || max == null) {
|
|
628
|
+
let lo = Infinity, hi = -Infinity;
|
|
629
|
+
for (const v of column) {
|
|
630
|
+
const n = Number(v);
|
|
631
|
+
if (isFinite(n)) { if (n < lo) lo = n; if (n > hi) hi = n; }
|
|
632
|
+
}
|
|
633
|
+
if (min == null) min = isFinite(lo) ? lo : 0;
|
|
634
|
+
if (max == null) max = isFinite(hi) ? hi : 1;
|
|
635
|
+
}
|
|
636
|
+
return { ...spec, min, max };
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
// A dropdown of {value, label} options; `onInput(value)` fires on change.
|
|
640
|
+
function makeSelect(doc, options, onInput) {
|
|
641
|
+
const sel = elem(doc, "select", { className: "lti-filter-pick" });
|
|
642
|
+
options.forEach(o => elem(doc, "option", { value: o.value, textContent: o.label }, sel));
|
|
643
|
+
sel.onchange = () => onInput(sel.value);
|
|
644
|
+
return { el: sel, set: v => sel.value = v };
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
// A two-thumb range slider from a track, a fill band, and two <button> thumbs —
|
|
648
|
+
// no native <input type=range>, so no vendor pseudo-element CSS and no stacked-
|
|
649
|
+
// input z-index hacks. Thumbs drag via the shared drag() helper and step with
|
|
650
|
+
// the arrow keys (Home/End jump to the ends); the low thumb never passes the
|
|
651
|
+
// high one. `cfg` is {min, max, step}; `onInput([lo, hi])` fires as a thumb
|
|
652
|
+
// moves. Returns { el, set([lo, hi]) }.
|
|
653
|
+
function makeSlider(doc, cfg, onInput) {
|
|
654
|
+
const min = cfg.min, max = cfg.max, span = max - min || 1,
|
|
655
|
+
step = cfg.step || span / 100,
|
|
656
|
+
track = elem(doc, "div", { className: "lti-slider" }),
|
|
657
|
+
fill = elem(doc, "div", { className: "lti-slider-fill" }, track),
|
|
658
|
+
mk = lab => elem(doc, "button", {
|
|
659
|
+
type: "button", className: "lti-thumb", role: "slider",
|
|
660
|
+
"aria-label": lab, "aria-valuemin": min, "aria-valuemax": max
|
|
661
|
+
}, track),
|
|
662
|
+
thumbs = [mk("Minimum"), mk("Maximum")];
|
|
663
|
+
let val = [min, max];
|
|
664
|
+
const pct = v => (v - min) / span * 100,
|
|
665
|
+
snap = v => {
|
|
666
|
+
const s = Math.round((v - min) / step) * step + min;
|
|
667
|
+
return Math.min(max, Math.max(min, Math.round(s * 1e6) / 1e6));
|
|
668
|
+
},
|
|
669
|
+
paint = () => {
|
|
670
|
+
thumbs.forEach((t, i) => {
|
|
671
|
+
t.style.left = pct(val[i]) + "%";
|
|
672
|
+
t.setAttribute("aria-valuenow", val[i]);
|
|
673
|
+
});
|
|
674
|
+
fill.style.left = pct(val[0]) + "%";
|
|
675
|
+
fill.style.right = 100 - pct(val[1]) + "%";
|
|
676
|
+
},
|
|
677
|
+
setOne = (i, v) => {
|
|
678
|
+
val[i] = snap(v);
|
|
679
|
+
if (val[0] > val[1]) val = [Math.min(...val), Math.max(...val)];
|
|
680
|
+
paint();
|
|
681
|
+
onInput(val.slice());
|
|
682
|
+
};
|
|
683
|
+
thumbs.forEach((t, i) => {
|
|
684
|
+
const at = clientX => {
|
|
685
|
+
const r = track.getBoundingClientRect();
|
|
686
|
+
return min + span * Math.min(1, Math.max(0, (clientX - r.left) / r.width));
|
|
687
|
+
};
|
|
688
|
+
t.onpointerdown = e => { t.focus(); drag(e, ev => setOne(i, at(ev.clientX))); };
|
|
689
|
+
t.onkeydown = e => {
|
|
690
|
+
const d = { ArrowLeft: -1, ArrowDown: -1, ArrowRight: 1, ArrowUp: 1 }[e.key];
|
|
691
|
+
if (d) setOne(i, val[i] + d * step);
|
|
692
|
+
else if (e.key === "Home") setOne(i, min);
|
|
693
|
+
else if (e.key === "End") setOne(i, max);
|
|
694
|
+
else return;
|
|
695
|
+
e.preventDefault();
|
|
696
|
+
};
|
|
697
|
+
});
|
|
698
|
+
paint();
|
|
699
|
+
return { el: track, set: v => { val = v.slice(); paint(); } };
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
// A funnel button that toggles a floating panel built by `build(panel)`; closes
|
|
703
|
+
// on an outside click or Escape. Returns the wrapper element.
|
|
704
|
+
function popover(doc, label, build) {
|
|
705
|
+
const wrap = elem(doc, "span", { className: "lti-pop" }),
|
|
706
|
+
btn = elem(doc, "button", {
|
|
707
|
+
type: "button", className: "lti-funnel", title: label,
|
|
708
|
+
"aria-label": label, "aria-expanded": "false"
|
|
709
|
+
}, wrap),
|
|
710
|
+
panel = elem(doc, "div", { className: "lti-pop-panel", hidden: true }, wrap);
|
|
711
|
+
build(panel);
|
|
712
|
+
// keep the panel inside the viewport: it opens to the funnel's left edge by
|
|
713
|
+
// default, but a funnel near the right margin would push it off-screen (and
|
|
714
|
+
// raise a horizontal scrollbar), so anchor it to the funnel's right instead
|
|
715
|
+
const place = () => {
|
|
716
|
+
panel.style.left = panel.style.right = ""; // back to the CSS default (left:0)
|
|
717
|
+
const r = panel.getBoundingClientRect(), vw = (doc.defaultView || window).innerWidth;
|
|
718
|
+
if (r.right > vw - 4) { panel.style.left = "auto"; panel.style.right = "0"; }
|
|
719
|
+
};
|
|
720
|
+
const open = on => {
|
|
721
|
+
panel.hidden = !on;
|
|
722
|
+
btn.setAttribute("aria-expanded", String(on));
|
|
723
|
+
if (on) place();
|
|
724
|
+
};
|
|
725
|
+
btn.onclick = e => { e.stopPropagation(); open(panel.hidden); };
|
|
726
|
+
on(doc, "click", e => { if (!wrap.contains(e.target)) open(false); });
|
|
727
|
+
on(doc, "keydown", e => { if (e.key === "Escape") open(false); });
|
|
728
|
+
return wrap;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
// One bundle per filter type, so adding a type is a single entry rather than a
|
|
732
|
+
// branch in each of describe/build/init. `describe(term, cfg)` is the chip's
|
|
733
|
+
// one-line summary; `init(cfg)` is the term for the configured default; and
|
|
734
|
+
// `build(doc, cfg, setTerm)` makes the widget as a syncing editor `{ el,
|
|
735
|
+
// reflect(term) }`, where `el` (a node or array of nodes) goes in the popover
|
|
736
|
+
// and the widget's own input writes the term through `setTerm`. The term <->
|
|
737
|
+
// value primitives (selExpr etc., above) back these.
|
|
738
|
+
const KINDS = {
|
|
739
|
+
select: {
|
|
740
|
+
describe: (t, cfg) => {
|
|
741
|
+
const v = selParse(t);
|
|
742
|
+
if (v == null) return t ? "⋯" : "";
|
|
743
|
+
const o = cfg.choices.find(o => o.value === v);
|
|
744
|
+
return o ? o.label : v;
|
|
745
|
+
},
|
|
746
|
+
init: cfg => selExpr(cfg.selected ?? (cfg.choices[0] || {}).value ?? ""),
|
|
747
|
+
build: (doc, cfg, setTerm) => {
|
|
748
|
+
const w = makeSelect(doc, cfg.choices, v => setTerm(selExpr(v), ed)),
|
|
749
|
+
ed = { el: w.el, reflect: t => { const v = selParse(t); w.set(v == null ? "" : v); } };
|
|
750
|
+
return ed;
|
|
751
|
+
}
|
|
752
|
+
},
|
|
753
|
+
range: {
|
|
754
|
+
describe: t => { const p = rngParse(t); return p ? `${p[0]} – ${p[1]}` : t ? "⋯" : ""; },
|
|
755
|
+
init: cfg => cfg.value ? rngExpr(cfg.value[0], cfg.value[1], cfg.min, cfg.max) : "",
|
|
756
|
+
build: (doc, cfg, setTerm) => {
|
|
757
|
+
const out = elem(doc, "span", { className: "lti-slider-out" }),
|
|
758
|
+
show = p => out.textContent = `${p[0]} – ${p[1]}`,
|
|
759
|
+
w = makeSlider(doc, cfg, v => { show(v); setTerm(rngExpr(v[0], v[1], cfg.min, cfg.max), ed); }),
|
|
760
|
+
ed = { el: [w.el, out], reflect: t => { const p = rngParse(t) || [cfg.min, cfg.max]; w.set(p); show(p); } };
|
|
761
|
+
return ed;
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
};
|
|
765
|
+
|
|
766
|
+
// Build one typed column filter and return its element. The funnel + popover
|
|
767
|
+
// machinery is shared by both placements: a head-bar chip when `chipLabel` is a
|
|
768
|
+
// string (a label + current-value summary wrap the funnel), or a bare funnel
|
|
769
|
+
// under the column header when `chipLabel` is null.
|
|
770
|
+
function typedFilter(doc, col, spec, data, state, refresh, chipLabel) {
|
|
771
|
+
const cfg = resolveSpec(spec, data[col] || []),
|
|
772
|
+
kind = KINDS[cfg.type],
|
|
773
|
+
editors = []; // the expression box + widget, kept in sync
|
|
774
|
+
let mark = () => {}; // paints the active state once `root` exists (below)
|
|
775
|
+
// set the one term, re-render, and reflect it into every editor but the one
|
|
776
|
+
// that caused the change (`from`), so the slider and box update each other
|
|
777
|
+
const setTerm = (expr, from) => {
|
|
778
|
+
expr ? (state.filters[col] = expr) : delete state.filters[col];
|
|
779
|
+
refresh();
|
|
780
|
+
const cur = state.filters[col] || "";
|
|
781
|
+
editors.forEach(e => e !== from && e.reflect(cur));
|
|
782
|
+
mark(cur);
|
|
783
|
+
};
|
|
784
|
+
const wrap = popover(doc, `Filter ${cfg.label || col}`, panel => {
|
|
785
|
+
const box = elem(doc, "input", {
|
|
786
|
+
type: "search", className: "lti-search",
|
|
787
|
+
"aria-label": `${cfg.label || col} filter expression`
|
|
788
|
+
}, panel);
|
|
789
|
+
const boxEd = { reflect: v => { if (doc.activeElement !== box) box.value = v; } };
|
|
790
|
+
editors.push(boxEd);
|
|
791
|
+
onType(box, v => setTerm(v.trim(), boxEd));
|
|
792
|
+
const wEd = kind.build(doc, cfg, setTerm); // the widget as a syncing editor
|
|
793
|
+
editors.push(wEd);
|
|
794
|
+
panel.append(...[].concat(wEd.el));
|
|
795
|
+
setTerm(kind.init(cfg), null); // seed the configured default
|
|
796
|
+
});
|
|
797
|
+
// a hidden column wraps the funnel in a chip (label + value summary); a
|
|
798
|
+
// visible column shows the bare funnel under its own header
|
|
799
|
+
let root = wrap, summary;
|
|
800
|
+
if (chipLabel != null) {
|
|
801
|
+
root = elem(doc, "span", { className: "lti-chip" });
|
|
802
|
+
elem(doc, "span", { className: "lti-chip-name", textContent: chipLabel }, root);
|
|
803
|
+
summary = elem(doc, "span", { className: "lti-chip-cur" }, root);
|
|
804
|
+
root.appendChild(wrap);
|
|
805
|
+
}
|
|
806
|
+
mark = cur => {
|
|
807
|
+
root.classList.toggle("lti-on", !!cur);
|
|
808
|
+
if (summary) summary.textContent = kind.describe(cur, cfg);
|
|
809
|
+
};
|
|
810
|
+
mark(state.filters[col] || ""); // paint the seeded term
|
|
811
|
+
return root;
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
// A head-bar chip for each hidden typed column (see typedFilter).
|
|
815
|
+
function addControlFilters(cell, barCols, cfg, data, state, refresh) {
|
|
816
|
+
const doc = cell.ownerDocument;
|
|
817
|
+
for (const col of barCols)
|
|
818
|
+
cell.appendChild(
|
|
819
|
+
typedFilter(doc, col, cfg[col], data, state, refresh, cfg[col].label || col));
|
|
820
|
+
}
|
|
821
|
+
|
|
548
822
|
// Pager as the last row of <tfoot> (after any footnotes), with a page-size
|
|
549
823
|
// <select> when there is more than one size to offer. Both are symbols or
|
|
550
824
|
// 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=Object.keys(s),e=e=>Object.fromEntries(t.map(t=>[t,s[t]?.[e-1]??null]));a=a.filter(t=>{const n=e(t);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 b,x=()=>{};const v=[],S=(t=!0)=>{t&&(b=d(o,m,y),y.page=0);const r=u(b,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),x(b.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),b=a(u,"div",{className:"lti-menu",hidden:!0},w);o.forEach((t,e)=>{if(null==t)return;const n=a(u,"label",{},b),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 x=t=>{b.hidden=!t,y.setAttribute("aria-expanded",String(t))};y.onclick=t=>{t.stopPropagation(),x(b.hidden)},c(u,"click",t=>{w.contains(t.target)||x(!1)}),c(u,"keydown",t=>{"Escape"===t.key&&x(!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];x=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:d}=e;o.forEach((e,o)=>{const u=a(n,"div",{className:"lti-resizer"},e),p=()=>r(n,"click",t=>t.stopPropagation(),{capture:!0,once:!0});u.ondblclick=t=>{t.stopPropagation(),s(),d(o,l(o))},u.onpointerdown=e=>{e.stopPropagation(),s();const n=e.clientX,l=parseFloat(i[o].style.width);t.classList.add("lti-resizing"),c(e,t=>d(o,l+t.clientX-n),()=>{t.classList.remove("lti-resizing"),p()})}})}(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","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","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":"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","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","noSort","stopPropagation","capture","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":[]}
|