@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.
@@ -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,0DAQJ,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 .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":[]}
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":[]}
@@ -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, then the search box, laid out in an inner flex bar
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
- if (opts.filter) addFilter(hrow, cols, opts.filter, state, refresh);
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 search boxes below the headers, inside <thead> so the
333
- // <tbody> swap leaves it (and what has been typed into it) alone.
334
- // `opt.columns`, when an array, restricts which columns get a box.
335
- function addFilter(hrow, cols, opt, state, refresh) {
336
- const doc = hrow.ownerDocument, only = opt.columns,
337
- row = elem(doc, "tr", { className: "lti-filters" });
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
- if (Array.isArray(only) && !only.includes(c)) return;
341
- const input = cell.appendChild(searchInput(doc, `Filter ${c}`));
342
- onType(input, v => { state.filters[c] = v; refresh(); });
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: its own events
469
- // stop here, or a drag would sort the column as well
470
- grip.onclick = e => e.stopPropagation();
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
- on(doc, "pointermove", move);
484
- on(doc, "pointerup", () => {
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, ths = [...$$(hrow, "th")],
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: header, <col> (fixed layout only),
513
- // and the current body cells
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 body of el.tBodies)
519
- for (const tr of body.rows) setCell(tr, i, on);
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`
@@ -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":"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,OAO3D,MAAMW,EAAMC,OAAOC,OAAOlB,EAAMmB,YAAc,CAAC,GAC/C,GAAIH,EAAIP,OAAQ,CACd,MAAMW,EAAMH,OAAOI,KAAKlB,GAClBmB,EAAMjB,GAAKY,OAAOM,YAAYH,EAAIL,IAAItB,GAAK,CAACA,EAAGU,EAAKV,KAAKY,EAAI,IAAM,QACzEC,EAAMA,EAAIQ,OAAOT,IAAO,MAAMmB,EAAIF,EAAIjB,GAAI,OAAOW,EAAIS,MAAMC,GAAKA,EAAEF,KACpE,CAKA,MAAMH,GAAQrB,EAAM2B,MAAQ,IAAIZ,IAAI3D,IAClC,MAAMJ,EAAMmD,EAAK/C,EAAEJ,KACnB,OAAOA,GAAO,CAAEA,MAAKqC,IAAKtC,EAAOC,GAAMM,IAAe,SAAVF,EAAEE,KAAkB,EAAI,KACnEwD,OAAOc,SAaV,OAZIP,EAAKZ,SACP3D,IAAS,IAAI+E,KAAKC,SAClBxB,EAAIqB,KAAK,CAACI,EAAGC,KACX,IAAK,MAAMhF,IAAEA,EAAGqC,IAAEA,EAAG/B,IAAEA,KAAS+D,EAAM,CACpC,MAAMY,EAAIjF,EAAI+E,EAAI,GAAIG,EAAIlF,EAAIgF,EAAI,GAAIG,EAAU,MAALF,EAAWG,EAAU,MAALF,EAC3D,GAAIC,GAAMC,EAAI,CAAE,GAAID,IAAOC,EAAI,OAAOD,EAAK,GAAK,EAAG,QAAU,CAC7D,MAAM1C,EAAIJ,EAAM4C,EAAIC,EAAIpF,EAAKuF,QAAQtD,OAAOkD,GAAIlD,OAAOmD,IACvD,GAAIzC,EAAG,OAAOnC,EAAMmC,CACtB,CACA,OAAO,KAGJa,CACT,CAMA,SAASgC,EAAUC,EAAMvC,GACvB,MAAMwC,EAAIxC,EAAMyC,SAChB,IAAKD,EAAqB,OAAhBxC,EAAM0C,KAAO,EAAUH,EACjC,MAAMI,EAAOC,KAAKC,IAAI,EAAGD,KAAKE,KAAKP,EAAK9B,OAAS+B,GAAK,GAEtD,OADAxC,EAAM0C,KAAOE,KAAKG,IAAIH,KAAKC,IAAI7C,EAAM0C,MAAQ,EAAG,GAAIC,GAC7CJ,EAAKlF,MAAM2C,EAAM0C,KAAOF,GAAIxC,EAAM0C,KAAO,GAAKF,EACvD,CAsBA,SAASQ,EAAQxF,EAAIuC,GACnB,IAfaA,KAASA,EAAKkD,aACzBlD,EAAKmD,KAAO,IAAItD,KAAK4B,GAAgB,cAAXA,EAAEzD,MAAmC,WAAXyD,EAAEzD,MAcnDoF,CAAOpD,GAAO,OAAOqD,QAAQC,KAChC,mGAGF,MAAMpF,EAAO8B,EAAKlD,YAAaoD,EAAOF,EAAKG,OAAS,GAC9CL,EAfR,SAAwBrC,EAAIyC,GAC1B,MAAMJ,EAAO,CAAC,EAKd,OAJAI,EAAKqD,QAAQ7D,GAAKI,EAAKJ,GAAK,IAC5B9B,EAAGH,EAAI,YAAY8F,QAAQ,CAACC,EAAIC,IAAOvD,EAAKqD,QAC1C,CAAC7D,EAAGgE,IAAO5D,EAAKJ,GAAG+D,GAAMD,EAAGG,SAASD,IAAKE,aAAe,KAEpD9D,CACT,CAQe+D,CAAepG,EAAIyC,GAE1B4D,EAAO,IAAIlG,EAAGH,EAAI,aAAasG,MAG/B9D,EAAQ,CACNY,QAAS,CAAC,EAAGO,WAAY,CAAC,EAAGuB,KAAM,EAAGD,SAAU,EAChDd,KAAMpB,MAAMwD,QAAQ9F,EAAK0D,MAAQ1D,EAAK0D,KAAKZ,IAAI5D,GAAY,IAEnE,IAAIoF,EACAyB,EAAO,OAKX,MAAMC,EAAW,GAIXC,EAAU,CAACC,GAAQ,KACnBA,IAAS5B,EAAOzC,EAAYC,EAAMF,EAAMG,GAAQA,EAAM0C,KAAO,GACjE,MAAM0B,EAAO9B,EAAUC,EAAMvC,GACvBqE,EAAMlG,EAAKX,EAAG8G,cAAe,WAAY,CACvCC,UAAW7H,EAAG8H,UAAU,IAAKzE,EAAM0E,UAAWL,MAEhDM,EAAOnH,EAAE8G,EAAIM,QAAS,SACvBP,EAAK3D,OAELwD,EAASX,QAAQ5B,GAAKA,EAAEgD,EAAMN,IADjCM,EAAKH,UAAY,sCAAsCtE,EAAKQ,sBAE9DlD,EAAEC,EAAI,SAASoH,YAAYF,GAC3BV,EAAKzB,EAAK9B,SAQZjD,EAAGqH,IAAM,CACP9E,OAAMC,QACNkE,QAAS,IAAMA,IACf,MAAApD,CAAOgE,EAAI9G,GACTA,EAAMgC,EAAMmB,WAAW2D,GAAM9G,SAAcgC,EAAMmB,WAAW2D,GAC5DZ,GACF,GAKF,MAAMa,GAA2B,IAAhB9G,EAAK+G,QAAoB/G,EAAKgH,KAC7C9G,EAAKX,EAAG8G,cAAe,MAAO,CAAEY,UAAW,WACzCC,EAAQ3H,EAAG4H,OAAS5H,EAAG6H,cAAe,WAAYpF,EAAKQ,OAAQ,IAAM,KAGnE6E,EAAS,IAAI3H,EAAGkG,EAAM,OAAO9C,IAAIwE,GAAMA,EAAG5B,cAE9B,IAAd1F,EAAK0D,MA6EX,SAAiBkC,EAAM5D,EAAMD,EAAOkE,GAClC,MAAM9F,EAAMyF,EAAKS,cAAekB,EAAQ,CAAC,EACnCC,EAAQ,KACZ,IAAK,MAAMhG,KAAK+F,EACdA,EAAM/F,GAAG8F,GAAGG,gBAAgB,aAC5BF,EAAM/F,GAAGkG,IAAIhC,YAAc,GAE7B,MAAMiC,EAAQ5F,EAAM2B,MAAQ,GAC5BiE,EAAMtC,QAAQ,EAAGtG,MAAKM,OAAOqD,KAC3B,MAAMkF,EAAIL,EAAMxI,GACX6I,IACLA,EAAEN,GAAG5G,aAAa,YAAqB,SAARrB,EAAiB,aAAe,aAC/DuI,EAAEF,IAAIhC,aAAuB,SAARrG,EAAiB,IAAM,MACzCsI,EAAMnF,OAAS,EAxSP1B,OAwSe4B,EAAI,GAxSTmF,QAAQ,MAAOC,GAAK,aAAaA,IAwSnB,QAGvCpI,EAAGkG,EAAM,MAAMP,QAAQ,CAACiC,EAAI9B,KAC1B,MAAMzG,EAAMiD,EAAKwD,GACN,MAAPzG,IACJuI,EAAGS,UAAUC,IAAI,gBACjBT,EAAMxI,GAAO,CAAEuI,KAAII,IAAKxH,EAAKC,EAAK,OAAQ,CAAE8G,UAAW,YAAcK,IACrEA,EAAGW,QAAU1H,KApCjB,SAAewB,EAAOhD,EAAKmJ,GACzB,MAAMP,GAAS5F,EAAM2B,MAAQ,IAAItE,QAC3BsD,EAAIiF,EAAMQ,UAAUhJ,GAAKA,EAAEJ,MAAQA,GACnCM,EAAMqD,EAAI,EAAI,MAAyB,QAAjBiF,EAAMjF,GAAGrD,IAAgB,OAAS,KAC9D,IAAK6I,EAAoD,YAAxCnG,EAAM2B,KAAOrE,EAAM,CAAC,CAAEN,MAAKM,QAAS,IACjDqD,EAAI,EAAGiF,EAAMS,KAAK,CAAErJ,MAAKM,QACpBA,EAAKsI,EAAMjF,GAAK,CAAE3D,MAAKM,OAC3BsI,EAAMU,OAAO3F,EAAG,GACrBX,EAAM2B,KAAOiE,CACf,CA2BwBW,CAAMvG,EAAOhD,EAAKwB,EAAEgI,UAAWf,IAASvB,QAE9DuB,GACF,CArG2BgB,CAAQ5C,EAAM5D,EAAMD,EAAOkE,GAChDjG,EAAK6C,QAyGX,SAAmB+C,EAAM5D,EAAMyG,EAAK1G,EAAOkE,GACzC,MAAM9F,EAAMyF,EAAKS,cAAeqC,EAAOD,EAAIE,QACrCtF,EAAMnD,EAAKC,EAAK,KAAM,CAAE8G,UAAW,gBACzCjF,EAAKqD,QAAQ7D,IACX,MAAMW,EAAOjC,EAAKC,EAAK,KAAM,CAAC,EAAGkD,GACjC,GAAIf,MAAMwD,QAAQ4C,KAAUA,EAAKjI,SAASe,GAAI,OAE9CoH,EADczG,EAAKxB,YAAYkI,EAAY1I,EAAK,UAAUqB,MAC5CvC,IAAO8C,EAAMY,QAAQnB,GAAKvC,EAAGgH,QAE7CL,EAAKkD,WAAWnI,YAAY0C,EAC9B,CAnHmB0F,CAAUnD,EAAM5D,EAAMhC,EAAK6C,OAAQd,EAAOkE,GAC3D,MAAM+C,EAAShJ,EAAKiJ,OAsMtB,SAAqB1J,EAAIqG,EAAMsD,GAC7B,MAAMC,EAAM,IAAIzJ,EAAGkG,EAAM,OACnBwD,EAtBR,SAAkB7J,EAAI2J,GACpB,IAAIG,EAAI/J,EAAEC,EAAI,YACd,IAAK8J,EAAG,CACN,MAAMlJ,EAAMZ,EAAG8G,cACfgD,EAAInJ,EAAKC,EAAK,YACd,IAAK,IAAIuC,EAAI,EAAGA,EAAIwG,EAAMxG,IAAKxC,EAAKC,EAAK,MAAO,CAAC,EAAGkJ,GAEpD9J,EAAG+J,QAAU/J,EAAG+J,QAAQC,MAAMF,GAAK9J,EAAGiK,QAAQH,EAChD,CACA,MAAO,IAAIA,EAAE5D,SACf,CAYagE,CAASlK,EAAI2J,GAAOQ,EAAMnJ,GAAKA,EAAEoJ,wBAAwBC,MAC9DC,EAAS,KACb,GAAItK,EAAGwI,UAAU+B,SAAS,aAAc,OACxC,MAAMC,EAAIZ,EAAIrG,IAAI4G,GAClBnK,EAAGyK,MAAMJ,MAAQF,EAAInK,GAAM,KAC3B6J,EAAG/D,QAAQ,CAAC7D,EAAGkB,IAAMlB,EAAEwI,MAAMJ,MAAQG,EAAErH,GAAK,MAC5CnD,EAAGwI,UAAUC,IAAI,cAEbiC,EAAUvH,IACd,MAAMwH,EAAOd,EAAGtG,IAAItB,GAAKA,EAAEwI,MAAMJ,OAAQO,EAAK5K,EAAGyK,MAAMJ,MACvDR,EAAG/D,QAAQ7D,GAAKA,EAAEwI,MAAMJ,MAAQ,IAChCrK,EAAGyK,MAAMJ,MAAQ,GACjBrK,EAAGwI,UAAUqC,OAAO,aACpB,MAAML,EAAIL,EAAIP,EAAIzG,IAIlB,OAHA0G,EAAG/D,QAAQ,CAAC7D,EAAG6I,IAAM7I,EAAEwI,MAAMJ,MAAQM,EAAKG,IAC1C9K,EAAGyK,MAAMJ,MAAQO,EACjB5K,EAAGwI,UAAUC,IAAI,aACV+B,GAEHO,EAAW,CAAC5H,EAAGqH,EAAGjF,EAjbV,MAkbZ,MAAMyF,EAAMC,WAAWpB,EAAG1G,GAAGsH,MAAMJ,OACnCR,EAAG1G,GAAGsH,MAAMJ,MAAQjF,KAAKC,IAAImF,EAAGjF,GAAO,KACvCvF,EAAGyK,MAAMJ,MACPY,WAAWjL,EAAGyK,MAAMJ,OAASY,WAAWpB,EAAG1G,GAAGsH,MAAMJ,OAASW,EAAM,MAEvE,MAAO,CAAEpB,MAAKC,KAAIS,SAAQI,UAASK,WACrC,CAlO+BG,CAAYlL,EAAIqG,EAAM5D,EAAKQ,QAAU,KAWlE,GAVIxC,EAAKiJ,QAuOX,SAAmB1J,EAAIyJ,GACrB,MAAM7I,EAAMZ,EAAG8G,eACT8C,IAAEA,EAAGC,GAAEA,EAAES,OAAEA,EAAMI,QAAEA,EAAOK,SAAEA,GAAatB,EAC/CG,EAAI9D,QAAQ,CAACiC,EAAI5E,KACf,MAAMgI,EAAOxK,EAAKC,EAAK,MAAO,CAAE8G,UAAW,eAAiBK,GAG5DoD,EAAKzC,QAAU1H,GAAKA,EAAEoK,kBACtBD,EAAKE,WAAarK,IAChBA,EAAEoK,kBACFd,IACAS,EAAS5H,EAAGuH,EAAQvH,KAEtBgI,EAAKG,cAAgBtK,IACnBA,EAAEuK,iBACFvK,EAAEoK,kBACFd,IACA,MAAMkB,EAAKxK,EAAEyK,QAASC,EAAKT,WAAWpB,EAAG1G,GAAGsH,MAAMJ,OAC5CsB,EAAOC,GAAMb,EAAS5H,EAAGuI,EAAKE,EAAGH,QAAUD,GACjDxL,EAAGwI,UAAUC,IAAI,gBACjBpI,EAAGO,EAAK,cAAe+K,GACvBtL,EAAGO,EAAK,YAAa,KAncf,IAAIL,EAAMC,EAAND,EAocC,cApcKC,EAocUmL,EAApB/K,EApcmBiL,oBAAoBtL,EAAMC,GAqcjDR,EAAGwI,UAAUqC,OAAO,iBACnB,CAAEiB,MAAM,MAGjB,CAlQmBC,CAAU/L,EAAIyJ,GAC3BhJ,EAAKgH,MA0QX,SAAyB7E,EAAM5C,EAAIqG,EAAM5D,EAAMqF,EAAQoB,EAAKO,EAAQhD,GAClE,MAAM7F,EAAMZ,EAAG8G,cAAe8C,EAAM,IAAIzJ,EAAGkG,EAAM,OAC3C2F,EAAS9C,GAAOA,EAAI+C,QAAW,GAAIA,EAAS,IAAIC,IAGhDC,EAAU,CAACpG,EAAI5C,EAAG9C,KACtB,MAAM4B,EAAI8D,EAAGG,SAAS/C,GAClBlB,GAAmB,IAAdA,EAAEmK,UAAenK,EAAEgK,OAAS5L,IAGvCoG,EAASoC,KAAK3B,GAAQ+E,EAAOnG,QAAQ3C,IACnC,IAAK,MAAM4C,KAAMmB,EAAKN,KAAMuF,EAAQpG,EAAI5C,GAAG,MAI7C,MAAMkJ,EAAQlJ,IACZ,MAAM9C,EAAK4L,EAAOK,IAAInJ,GAClByG,EAAIzG,KAAIyG,EAAIzG,GAAG8I,OAAS5L,GACxBoJ,GAAQI,GAAG1G,KAAIsG,EAAOI,GAAG1G,GAAG8I,OAAS5L,GACzC,IAAK,MAAM6G,KAAQlH,EAAGuM,QACpB,IAAK,MAAMxG,KAAMmB,EAAKN,KAAMuF,EAAQpG,EAAI5C,EAAG9C,IAEzCmM,EAAO7L,EAAKC,EAAK,OAAQ,CAAE8G,UAAW,YAAc9E,GACpD6J,EAAM9L,EAAKC,EAAK,SAAU,CACxBL,KAAM,SAAUmM,MAAO,UACvB,aAAc,uBAAwB,gBAAiB,SACtDF,GACHG,EAAOhM,EAAKC,EAAK,MAAO,CAAE8G,UAAW,WAAYuE,QAAQ,GAAQO,GACvE/J,EAAKqD,QAAQ,CAAC7D,EAAGkB,KACf,GAAS,MAALlB,EAAW,OACf,MAAM2K,EAAQjM,EAAKC,EAAK,QAAS,CAAC,EAAG+L,GAC/BE,EAAMlM,EAAKC,EAAK,QAAS,CAAEL,KAAM,WAAYuM,SAAS,GAAQF,GACpEA,EAAMG,OAAOjF,EAAO3E,IAAMlB,GACtB+J,EAAM9K,SAASe,KAAM4K,EAAIC,SAAU,EAAOb,EAAOxD,IAAItF,IACzD0J,EAAIG,SAAW,KACbH,EAAIC,QAAUb,EAAOgB,OAAO9J,GAAK8I,EAAOxD,IAAItF,GAC5CkJ,EAAMlJ,MAGVV,EAAKqD,QAAQ,CAAC5C,EAAGC,IAAMkJ,EAAMlJ,IAC7B,MAAM+J,EAAO7M,IACXsM,EAAKV,QAAU5L,EACfoM,EAAItL,aAAa,gBAAiBI,OAAOlB,KAE3CoM,EAAI/D,QAAU1H,IAAOA,EAAEoK,kBAAmB8B,EAAKP,EAAKV,SACpD5L,EAAGO,EAAK,QAASI,IAAYwL,EAAKjC,SAASvJ,EAAEmM,SAASD,GAAK,KAC3D7M,EAAGO,EAAK,UAAWI,IAAqB,WAAVA,EAAEoM,KAAkBF,GAAK,IACzD,CAxTIG,CAAgB9F,EAASvH,EAAIqG,EAAM5D,EAAMqF,EAAQrH,EAAKgH,KAAMgC,EAAQhD,IAClD,IAAhBhG,EAAK+G,QA+CX,SAAmB5E,EAAM5C,EAAIwC,EAAOkE,GAClC,MAAM4G,EAAQ1K,EAAKxB,YAAYkI,EAAYtJ,EAAG8G,cAAe,WAC7DuC,EAAOiE,EAAO5N,IAAO8C,EAAMlB,KAAO5B,EAAGgH,KACvC,CAlD6B6G,CAAUhG,EAASvH,EAAIwC,EAAOkE,GAIrDjG,EAAK+M,QACP/G,EAASoC,KAsHb,SAAmB7I,EAAIuC,EAAME,EAAMD,EAAOiL,EAAWC,GACnD,MAAM9M,EAAMZ,EAAG8G,cAAe6C,EAAOlH,EAAKQ,OAAQ0K,EAAQ,CAAC,EAC3DnL,EAAMoL,SAAW,IAAI1B,IAIrB,MAAM2B,EAAO,CAACC,EAAKjL,KACjB,MAAMmB,EAAI,CAAC,EAAG,IAAK,MAAM/B,KAAK6L,EAAK9J,EAAE/B,GAAK6L,EAAI7L,KAAKY,EAAI,IAAM,KAAM,OAAOmB,GAEtE+J,EAAQlL,IACZ,GAAIA,KAAK8K,EAAO,OAAOA,EAAM9K,GAC7B,MAAMR,EAAOwL,EAAKtL,EAAKyL,UAAY,CAAC,EAAGnL,GACvC,IAAIoL,EAAM,KACV,GAAIlL,MAAMwD,QAAQkH,GAAY,CAG5B,MAAM9K,EAAO,CAAC,EACd,IAAK,MAAMV,KAAKwL,EAAW9K,EAAKV,GAAK,CAACI,EAAKJ,IAAM,MACjDgM,EAAM,CAAEtL,OACV,KAAO,CAEL,MAAMnC,EAA0B,mBAAdiN,EAA2BA,EAAYxO,EAAKwO,GAC5C,mBAAPjN,IAAmByN,EAAMzN,EAAGqN,EAAKtL,EAAKI,MAAQ,CAAC,EAAGE,GAAIA,EAAGR,GACtE,CACA,OAAOsL,EAAM9K,GAAKoL,GAEdC,EAASrL,IACbL,EAAMoL,SAAStB,IAAIzJ,GAAKL,EAAMoL,SAASX,OAAOpK,GAAKL,EAAMoL,SAASnF,IAAI5F,GACtE6K,KAEF,MAAO,CAACxG,EAAMN,IAAS,IAAIM,EAAKN,MAAMd,QAAQ,CAACC,EAAI5C,KACjD,MAAMN,EAAI+D,EAAKzD,GAAIgL,EAAMpI,EAAG/D,MAAM,GAAIkL,EAAO1K,EAAMoL,SAAStB,IAAIzJ,GAChE,IAAKsL,EAAK,OACV,MAAM1B,EAAM9L,EAAKC,EAAK,SAAU,CAC9BL,KAAM,SAAUmH,UAAW,aAAcvB,YAAa+G,EAAO,IAAM,IACnE,gBAAiB3L,OAAO2L,GAAO,aAAc,kBAE/CT,EAAI/D,QAAU,IAAMwF,EAAOrL,GAC3BsL,EAAIlE,QAAQwC,GACZ,MAAM2B,EAAQlB,GAAQa,EAAMlL,GAC5B,GAAIuL,EAAO,CACT,MAAMtK,EAAMnD,EAAKC,EAAK,KAAM,CAAE8G,UAAW,eACzC3B,EAAGiE,MAAMlG,GACT,MAAMlB,EAAOjC,EAAKC,EAAK,KAAM,CAAEwL,QAASzC,GAAQ7F,GAChD5E,EAAGmP,OAAO1N,EAAKC,EAAK,MAAO,CAAC,EAAGgC,GAAOwL,EACxC,GAEJ,CArKkBE,CAAUtO,EAAIuC,EAAME,EAAMD,EAAO/B,EAAK+M,OAAQ,IAAM9G,GAAQ,KAExEjG,EAAK8N,MAAO,CACd,MAAMC,EAAQzL,MAAMwD,QAAQ9F,EAAK8N,OAAS9N,EAAK8N,MAAQ,CAAC,GAAI,GAAI,GAAI,KACpE/H,EAqTJ,SAAqBxG,EAAIyC,EAAM+L,EAAOhM,EAAOiM,GAC3C,MAAM7N,EAAMZ,EAAG8G,cACf,IAAI4H,EAAO1O,EAAG2O,MAETD,KAAOA,EAAO1O,EAAG4O,eAAelH,UAAY,aACjD,MAAMmH,EAAMlO,EAAKC,EAAK,MAAO,CAAE8G,UAAW,aAClCC,EAAQ+G,EAAM,gBAAiBjM,EAAKQ,QAAS,IAC/C6L,EAAMnO,EAAKC,EAAK,OAAQ,CAAE8G,UAAW,YAC3ClF,EAAMyC,SAAWuJ,EAAM,GAEvB,MAAMO,EAAQ,CAAC,IAAM,EAAGC,GAAKA,EAAI,EAAGA,GAAKA,EAAI,EAAG,IAAM,KAChDC,EAAO,CAAC,IAAK,IAAK,IAAK,KAAK1L,IAAI,CAAC2L,EAAO/L,KAC5C,MAAMqB,EAAI7D,EAAKC,EAAK,SAAU,CAC5BL,KAAM,SAAU4F,YAAa+I,EAC7B,aAAc,CAAC,QAAS,WAAY,OAAQ,QAAQ/L,IACnD0L,GAEH,OADArK,EAAEkE,QAAU,KAAQlG,EAAM0C,KAAO6J,EAAM5L,GAAGX,EAAM0C,MAAOuJ,KAChDjK,IAGT,GADAqK,EAAIzN,YAAY0N,GACZN,EAAMvL,OAAS,EAAG,CACpB,MAAMhD,EAAMU,EAAKC,EAAK,SAAU,CAAE,aAAc,iBAAmBiO,GAEnEL,EAAM1I,QAAQd,GAAKrE,EAAKC,EAAK,SAAU,CAAEuO,MAAOnK,EAAGmB,YAAanB,GAAK,KAAO/E,IAC5EA,EAAI+M,SAAW,KAAQxK,EAAMyC,UAAYhF,EAAIkP,MAAO3M,EAAM0C,KAAO,EAAGuJ,IACtE,CACA,OAAOW,IAEL,MAAMpK,EAAIxC,EAAMyC,UAAYmK,GAAS,EAC/BjK,EAAOC,KAAKC,IAAI,EAAGD,KAAKE,KAAK8J,EAAQpK,GAAK,GAChD8J,EAAI3I,YAAciJ,EAChB,GAAG5M,EAAM0C,KAAOF,EAAI,KAAKI,KAAKG,IAAI6J,GAAQ5M,EAAM0C,KAAO,GAAKF,QAAQoK,IACpE,QACFH,EAAKnJ,QAAQ,CAACtB,EAAGrB,IAAMqB,EAAE6K,SAAWlM,EAAI,GAAKX,EAAM0C,KAAO1C,EAAM0C,OAASC,GAE7E,CAxVWmK,CAAYtP,EAAIyC,EAAM+L,EAAOhM,EAAO,IAAMkE,GAAQ,IACzDA,GACF,MAAWlE,EAAM2B,KAAKlB,QAAUxC,EAAK+M,SAGnC9G,GAEJ,CAKA,SAAS4C,EAAY1I,EAAKgM,GACxB,OAAOjM,EAAKC,EAAK,QAAS,CACxBL,KAAM,SAAUmH,UAAW,aAAc,aAAckF,GAE3D,CAMA,SAASjF,EAAQ4H,EAAMC,EAAK7F,EAAMmF,GAChC,MAAMhL,EAAMyL,EAAKE,UAAUX,GAE3B,OADAhL,EAAI4D,UAAY8H,EACT7O,EAAK4O,EAAKzI,cAAe,KAAM,CAAEsF,QAASzC,GAAQ7F,EAC3D,CAIA,SAASuF,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,MAAMxQ,EAAU,CAACa,EAAIuC,KACdA,GAAMlD,cAAeW,EAAG+P,QAAQC,QACrChQ,EAAG+P,QAAQC,MAAQ,IACnBxK,EAAQxF,EAAIuC,KAGdrD,EAAGE,QAAQC,YAAc,CAAEgC,UAASiB,cAAawC,YAAWU,WAC5DtG,EAAGC,QAAQ0J,KAAK1J,GAIQ,oBAAb8Q,UACT9P,EAAG8P,SAAU,aAAanK,QAAQ9F,GAAMb,EAAQa,EAAIA,EAAGkQ,SAC1D,EAjlBD,CAilBqB,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","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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xiee/utils",
3
- "version": "1.14.87",
3
+ "version": "1.14.89",
4
4
  "description": "Miscellaneous tools and utilities to manipulate HTML pages",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"