@xiee/utils 1.14.86 → 1.14.88

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
@@ -99,10 +111,14 @@
99
111
  if (pred) idx = idx.filter(r => pred(cols.map(c => cell(c, r))));
100
112
 
101
113
  // predicates registered from outside (el._lt.filter) run last, each a
102
- // function of the row's raw values keyed by column; combined with AND
114
+ // function of the row's raw values keyed by column; combined with AND. The
115
+ // row carries *every* column (not just the visible `cols`), so a widget can
116
+ // filter on a hidden helper column — e.g. forestly's incidence slider reads
117
+ // the hidden `hide_prop`, its parameter dropdown the hidden `parameter`.
103
118
  const fns = Object.values(state.predicates || {});
104
119
  if (fns.length) {
105
- const row = r => Object.fromEntries(cols.map(c => [c, data[c]?.[r - 1] ?? null]));
120
+ const all = Object.keys(data);
121
+ const row = r => Object.fromEntries(all.map(c => [c, data[c]?.[r - 1] ?? null]));
106
122
  idx = idx.filter(r => { const o = row(r); return fns.every(f => f(o)); });
107
123
  }
108
124
 
@@ -201,21 +217,34 @@
201
217
 
202
218
  // a small controller for driving the table from outside (e.g. forestly's
203
219
  // own dropdown and range-slider widgets): register a predicate over a row's
204
- // raw values (`{col: value}`) under an id, replacing or (with a null `fn`)
205
- // removing it, then re-render. `spec`/`state` are exposed for reading (the
206
- // column values for a widget's choices come from `el._ltSpec.data`).
220
+ // raw values (`{col: value}`, including hidden columns) under an id,
221
+ // replacing or (with a null `fn`) removing it, then re-render. `spec`/`state`
222
+ // are exposed for reading (a widget's choices come from `el._ltSpec.data`).
207
223
  el._lt = {
208
224
  spec, state,
209
225
  refresh: () => refresh(),
226
+ // the current filtered + sorted row indices (1-based, every row, not just
227
+ // the page) — e.g. for a "download what's shown" button that must honor the
228
+ // typed filters (which live in state.filters, not external predicates)
229
+ view: () => view || computeView(spec, disp, state),
210
230
  filter(id, fn) {
211
231
  fn ? (state.predicates[id] = fn) : (delete state.predicates[id]);
212
232
  refresh();
213
233
  }
214
234
  };
215
235
 
236
+ // the `filter` option is normalized (R side) to { default?, cols? }: a
237
+ // `default` spec applies to every visible column left unnamed, `cols` maps a
238
+ // column to its spec (`true` = a plain box, else a typed select/range). A
239
+ // typed filter on a hidden column (not in `cols` = spec._cols) can't live
240
+ // under a header, so it becomes a chip in the head bar; everything else sits
241
+ // under its column header.
242
+ const flt = opts.filter,
243
+ barCols = flt?.cols ?
244
+ Object.keys(flt.cols).filter(c => flt.cols[c] !== true && !cols.includes(c)) : [];
216
245
  // the table-wide controls share one full-width head row: the column menu
217
- // (if any) at its start, then the search box, laid out in an inner flex bar
218
- const headBar = (opts.search !== false || opts.hide) ?
246
+ // (if any) at its start, the search box, then any head-bar filter chips
247
+ const headBar = (opts.search !== false || opts.hide || barCols.length) ?
219
248
  elem(el.ownerDocument, "div", { className: "lti-bar" },
220
249
  fullRow(el.tHead || el.createTHead(), "lti-head", cols.length, 0)) : null;
221
250
  // the header labels, read before sort/resize decorate the cells, so the
@@ -223,12 +252,16 @@
223
252
  const labels = [...$$(hrow, "th")].map(th => th.textContent);
224
253
  // wire sort before adding the filter row, so it sees the header row only
225
254
  if (opts.sort !== false) addSort(hrow, cols, state, refresh);
226
- 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);
227
259
  const layout = opts.resize ? fixedLayout(el, hrow, cols.length) : null;
228
260
  if (opts.resize) addResize(el, layout);
229
261
  if (opts.hide)
230
262
  addColumnToggle(headBar, el, hrow, cols, labels, opts.hide, layout, postSwap);
231
263
  if (opts.search !== false) addSearch(headBar, el, state, refresh);
264
+ if (barCols.length) addControlFilters(headBar, barCols, flt.cols, spec.data, state, refresh);
232
265
  // row detail re-renders through the same seam: toggling a row only changes
233
266
  // which rows carry a detail block, so a plain re-render (no new view) is
234
267
  // enough
@@ -325,17 +358,24 @@
325
358
  paint(); // reflect any initial sort carried on the spec
326
359
  }
327
360
 
328
- // A row of per-column search boxes below the headers, inside <thead> so the
329
- // <tbody> swap leaves it (and what has been typed into it) alone.
330
- // `opt.columns`, when an array, restricts which columns get a box.
331
- function addFilter(hrow, cols, opt, state, refresh) {
332
- const doc = hrow.ownerDocument, only = opt.columns,
333
- 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 || {};
334
370
  cols.forEach(c => {
335
- const cell = elem(doc, "td", {}, row);
336
- if (Array.isArray(only) && !only.includes(c)) return;
337
- const input = cell.appendChild(searchInput(doc, `Filter ${c}`));
338
- 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));
339
379
  });
340
380
  hrow.parentNode.appendChild(row);
341
381
  }
@@ -470,17 +510,12 @@
470
510
  setWidth(i, natural(i));
471
511
  };
472
512
  grip.onpointerdown = e => {
473
- e.preventDefault(); // no text selection while dragging
474
513
  e.stopPropagation();
475
514
  freeze();
476
- const x0 = e.clientX, w0 = parseFloat(cs[i].style.width),
477
- move = ev => setWidth(i, w0 + ev.clientX - x0);
515
+ const x0 = e.clientX, w0 = parseFloat(cs[i].style.width);
478
516
  el.classList.add("lti-resizing");
479
- on(doc, "pointermove", move);
480
- on(doc, "pointerup", () => {
481
- off(doc, "pointermove", move);
482
- el.classList.remove("lti-resizing");
483
- }, { once: true });
517
+ drag(e, ev => setWidth(i, w0 + ev.clientX - x0),
518
+ () => el.classList.remove("lti-resizing"));
484
519
  };
485
520
  });
486
521
  }
@@ -493,7 +528,7 @@
493
528
  // start hidden). `layout` is resize's fixed layout, used when present to drop a
494
529
  // hidden column's <col> so the fixed table reflows too.
495
530
  function addColumnToggle(cell, el, hrow, cols, labels, opt, layout, postSwap) {
496
- const doc = el.ownerDocument, ths = [...$$(hrow, "th")],
531
+ const doc = el.ownerDocument,
497
532
  start = (opt && opt.hidden) || [], hidden = new Set();
498
533
  // show/hide column i's cell in one row, skipping the single colspan cell of
499
534
  // a detail or empty row (which spans every column and is no column's own)
@@ -505,14 +540,18 @@
505
540
  postSwap.push(body => hidden.forEach(i => {
506
541
  for (const tr of body.rows) setCell(tr, i, true);
507
542
  }));
508
- // show/hide column i everywhere it lives: header, <col> (fixed layout only),
509
- // and the current body cells
543
+ // show/hide column i everywhere it lives: the <col> (fixed layout only) and,
544
+ // one row at a time, every per-column cell — the header labels, the filter
545
+ // boxes, the body cells, and a plot's axis footer. The spanner row is the one
546
+ // row whose merged cells break the 1:1 column-to-cell index, so skip it; the
547
+ // setCell colspan guard skips the other full-width rows (search bar, detail,
548
+ // footnotes, pager). <thead>/<tfoot> survive a <tbody> swap, so this one pass
549
+ // keeps them in sync; only the fresh <tbody> is re-hidden (via postSwap).
510
550
  const apply = i => {
511
551
  const on = hidden.has(i);
512
- if (ths[i]) ths[i].hidden = on;
513
552
  if (layout?.cs[i]) layout.cs[i].hidden = on;
514
- for (const body of el.tBodies)
515
- for (const tr of body.rows) setCell(tr, i, on);
553
+ for (const tr of el.rows)
554
+ if (!tr.classList.contains("lt-spanner-row")) setCell(tr, i, on);
516
555
  };
517
556
  const wrap = elem(doc, "span", { className: "lti-cols" }, cell),
518
557
  btn = elem(doc, "button", {
@@ -541,6 +580,242 @@
541
580
  on(doc, "keydown", e => { if (e.key === "Escape") open(false); });
542
581
  }
543
582
 
583
+ // --- Typed column filters (the `filter` named-list form). A typed spec is
584
+ // {type:"select"|"range", label?, choices?, min?, max?, step?, value?,
585
+ // selected?}; it renders as a funnel + popover, under its own header when the
586
+ // column is visible or as a labelled head-bar chip when it is hidden (the
587
+ // column still travels in spec.data, which is what computeView filters on). The
588
+ // popover holds an expression box AND a widget (a value dropdown or a range
589
+ // slider); both edit the one filter term for that column (state.filters[col])
590
+ // and stay in sync, so the widget is a friendly face on the same expression a
591
+ // reader could type.
592
+
593
+ // A filter term string <-> a widget value, per type. A `null` parse means the
594
+ // term is something the widget can't show (a hand-typed expression), so the
595
+ // widget falls back to neutral and the box stays authoritative.
596
+ const selExpr = v => v === "" ? "" : `x == ${JSON.stringify(String(v))}`,
597
+ selParse = s => {
598
+ const m = /^\s*x\s*==\s*(['"])([\s\S]*)\1\s*$/.exec(s || "");
599
+ return m ? m[2] : null;
600
+ },
601
+ rngExpr = (lo, hi, min, max) =>
602
+ lo <= min && hi >= max ? "" : `x >= ${lo} && x <= ${hi}`,
603
+ rngParse = s => {
604
+ const m = /^\s*x\s*>=\s*(-?[\d.]+)\s*&&\s*x\s*<=\s*(-?[\d.]+)\s*$/.exec(s || "");
605
+ return m ? [parseFloat(m[1]), parseFloat(m[2])] : null;
606
+ };
607
+
608
+ // Fill a typed spec's choices (select) or min/max (range) from the column's
609
+ // data when the R side left them out, so `filter = list(x = "select")` needs no
610
+ // enumeration. Returns a copy with the gaps filled.
611
+ function resolveSpec(spec, column) {
612
+ if (spec.type === "select") {
613
+ let choices = spec.choices;
614
+ if (!choices) {
615
+ const seen = new Set(), vals = [];
616
+ for (const v of column) if (v != null && !seen.has(v)) { seen.add(v); vals.push(v); }
617
+ vals.sort((a, b) => typeof a === "number" && typeof b === "number"
618
+ ? a - b : String(a).localeCompare(String(b)));
619
+ choices = vals.map(v => ({ value: String(v), label: String(v) }));
620
+ }
621
+ return { ...spec, choices };
622
+ }
623
+ let { min, max } = spec;
624
+ if (min == null || max == null) {
625
+ let lo = Infinity, hi = -Infinity;
626
+ for (const v of column) {
627
+ const n = Number(v);
628
+ if (isFinite(n)) { if (n < lo) lo = n; if (n > hi) hi = n; }
629
+ }
630
+ if (min == null) min = isFinite(lo) ? lo : 0;
631
+ if (max == null) max = isFinite(hi) ? hi : 1;
632
+ }
633
+ return { ...spec, min, max };
634
+ }
635
+
636
+ // A dropdown of {value, label} options; `onInput(value)` fires on change.
637
+ function makeSelect(doc, options, onInput) {
638
+ const sel = elem(doc, "select", { className: "lti-filter-pick" });
639
+ options.forEach(o => elem(doc, "option", { value: o.value, textContent: o.label }, sel));
640
+ sel.onchange = () => onInput(sel.value);
641
+ return { el: sel, set: v => sel.value = v };
642
+ }
643
+
644
+ // A two-thumb range slider from a track, a fill band, and two <button> thumbs —
645
+ // no native <input type=range>, so no vendor pseudo-element CSS and no stacked-
646
+ // input z-index hacks. Thumbs drag via the shared drag() helper and step with
647
+ // the arrow keys (Home/End jump to the ends); the low thumb never passes the
648
+ // high one. `cfg` is {min, max, step}; `onInput([lo, hi])` fires as a thumb
649
+ // moves. Returns { el, set([lo, hi]) }.
650
+ function makeSlider(doc, cfg, onInput) {
651
+ const min = cfg.min, max = cfg.max, span = max - min || 1,
652
+ step = cfg.step || span / 100,
653
+ track = elem(doc, "div", { className: "lti-slider" }),
654
+ fill = elem(doc, "div", { className: "lti-slider-fill" }, track),
655
+ mk = lab => elem(doc, "button", {
656
+ type: "button", className: "lti-thumb", role: "slider",
657
+ "aria-label": lab, "aria-valuemin": min, "aria-valuemax": max
658
+ }, track),
659
+ thumbs = [mk("Minimum"), mk("Maximum")];
660
+ let val = [min, max];
661
+ const pct = v => (v - min) / span * 100,
662
+ snap = v => {
663
+ const s = Math.round((v - min) / step) * step + min;
664
+ return Math.min(max, Math.max(min, Math.round(s * 1e6) / 1e6));
665
+ },
666
+ paint = () => {
667
+ thumbs.forEach((t, i) => {
668
+ t.style.left = pct(val[i]) + "%";
669
+ t.setAttribute("aria-valuenow", val[i]);
670
+ });
671
+ fill.style.left = pct(val[0]) + "%";
672
+ fill.style.right = 100 - pct(val[1]) + "%";
673
+ },
674
+ setOne = (i, v) => {
675
+ val[i] = snap(v);
676
+ if (val[0] > val[1]) val = [Math.min(...val), Math.max(...val)];
677
+ paint();
678
+ onInput(val.slice());
679
+ };
680
+ thumbs.forEach((t, i) => {
681
+ const at = clientX => {
682
+ const r = track.getBoundingClientRect();
683
+ return min + span * Math.min(1, Math.max(0, (clientX - r.left) / r.width));
684
+ };
685
+ t.onpointerdown = e => { t.focus(); drag(e, ev => setOne(i, at(ev.clientX))); };
686
+ t.onkeydown = e => {
687
+ const d = { ArrowLeft: -1, ArrowDown: -1, ArrowRight: 1, ArrowUp: 1 }[e.key];
688
+ if (d) setOne(i, val[i] + d * step);
689
+ else if (e.key === "Home") setOne(i, min);
690
+ else if (e.key === "End") setOne(i, max);
691
+ else return;
692
+ e.preventDefault();
693
+ };
694
+ });
695
+ paint();
696
+ return { el: track, set: v => { val = v.slice(); paint(); } };
697
+ }
698
+
699
+ // A funnel button that toggles a floating panel built by `build(panel)`; closes
700
+ // on an outside click or Escape. Returns the wrapper element.
701
+ function popover(doc, label, build) {
702
+ const wrap = elem(doc, "span", { className: "lti-pop" }),
703
+ btn = elem(doc, "button", {
704
+ type: "button", className: "lti-funnel", title: label,
705
+ "aria-label": label, "aria-expanded": "false"
706
+ }, wrap),
707
+ panel = elem(doc, "div", { className: "lti-pop-panel", hidden: true }, wrap);
708
+ build(panel);
709
+ // keep the panel inside the viewport: it opens to the funnel's left edge by
710
+ // default, but a funnel near the right margin would push it off-screen (and
711
+ // raise a horizontal scrollbar), so anchor it to the funnel's right instead
712
+ const place = () => {
713
+ panel.style.left = panel.style.right = ""; // back to the CSS default (left:0)
714
+ const r = panel.getBoundingClientRect(), vw = (doc.defaultView || window).innerWidth;
715
+ if (r.right > vw - 4) { panel.style.left = "auto"; panel.style.right = "0"; }
716
+ };
717
+ const open = on => {
718
+ panel.hidden = !on;
719
+ btn.setAttribute("aria-expanded", String(on));
720
+ if (on) place();
721
+ };
722
+ btn.onclick = e => { e.stopPropagation(); open(panel.hidden); };
723
+ on(doc, "click", e => { if (!wrap.contains(e.target)) open(false); });
724
+ on(doc, "keydown", e => { if (e.key === "Escape") open(false); });
725
+ return wrap;
726
+ }
727
+
728
+ // One bundle per filter type, so adding a type is a single entry rather than a
729
+ // branch in each of describe/build/init. `describe(term, cfg)` is the chip's
730
+ // one-line summary; `init(cfg)` is the term for the configured default; and
731
+ // `build(doc, cfg, setTerm)` makes the widget as a syncing editor `{ el,
732
+ // reflect(term) }`, where `el` (a node or array of nodes) goes in the popover
733
+ // and the widget's own input writes the term through `setTerm`. The term <->
734
+ // value primitives (selExpr etc., above) back these.
735
+ const KINDS = {
736
+ select: {
737
+ describe: (t, cfg) => {
738
+ const v = selParse(t);
739
+ if (v == null) return t ? "⋯" : "";
740
+ const o = cfg.choices.find(o => o.value === v);
741
+ return o ? o.label : v;
742
+ },
743
+ init: cfg => selExpr(cfg.selected ?? (cfg.choices[0] || {}).value ?? ""),
744
+ build: (doc, cfg, setTerm) => {
745
+ const w = makeSelect(doc, cfg.choices, v => setTerm(selExpr(v), ed)),
746
+ ed = { el: w.el, reflect: t => { const v = selParse(t); w.set(v == null ? "" : v); } };
747
+ return ed;
748
+ }
749
+ },
750
+ range: {
751
+ describe: t => { const p = rngParse(t); return p ? `${p[0]} – ${p[1]}` : t ? "⋯" : ""; },
752
+ init: cfg => cfg.value ? rngExpr(cfg.value[0], cfg.value[1], cfg.min, cfg.max) : "",
753
+ build: (doc, cfg, setTerm) => {
754
+ const out = elem(doc, "span", { className: "lti-slider-out" }),
755
+ show = p => out.textContent = `${p[0]} – ${p[1]}`,
756
+ w = makeSlider(doc, cfg, v => { show(v); setTerm(rngExpr(v[0], v[1], cfg.min, cfg.max), ed); }),
757
+ ed = { el: [w.el, out], reflect: t => { const p = rngParse(t) || [cfg.min, cfg.max]; w.set(p); show(p); } };
758
+ return ed;
759
+ }
760
+ }
761
+ };
762
+
763
+ // Build one typed column filter and return its element. The funnel + popover
764
+ // machinery is shared by both placements: a head-bar chip when `chipLabel` is a
765
+ // string (a label + current-value summary wrap the funnel), or a bare funnel
766
+ // under the column header when `chipLabel` is null.
767
+ function typedFilter(doc, col, spec, data, state, refresh, chipLabel) {
768
+ const cfg = resolveSpec(spec, data[col] || []),
769
+ kind = KINDS[cfg.type],
770
+ editors = []; // the expression box + widget, kept in sync
771
+ let mark = () => {}; // paints the active state once `root` exists (below)
772
+ // set the one term, re-render, and reflect it into every editor but the one
773
+ // that caused the change (`from`), so the slider and box update each other
774
+ const setTerm = (expr, from) => {
775
+ expr ? (state.filters[col] = expr) : delete state.filters[col];
776
+ refresh();
777
+ const cur = state.filters[col] || "";
778
+ editors.forEach(e => e !== from && e.reflect(cur));
779
+ mark(cur);
780
+ };
781
+ const wrap = popover(doc, `Filter ${cfg.label || col}`, panel => {
782
+ const box = elem(doc, "input", {
783
+ type: "search", className: "lti-search",
784
+ "aria-label": `${cfg.label || col} filter expression`
785
+ }, panel);
786
+ const boxEd = { reflect: v => { if (doc.activeElement !== box) box.value = v; } };
787
+ editors.push(boxEd);
788
+ onType(box, v => setTerm(v.trim(), boxEd));
789
+ const wEd = kind.build(doc, cfg, setTerm); // the widget as a syncing editor
790
+ editors.push(wEd);
791
+ panel.append(...[].concat(wEd.el));
792
+ setTerm(kind.init(cfg), null); // seed the configured default
793
+ });
794
+ // a hidden column wraps the funnel in a chip (label + value summary); a
795
+ // visible column shows the bare funnel under its own header
796
+ let root = wrap, summary;
797
+ if (chipLabel != null) {
798
+ root = elem(doc, "span", { className: "lti-chip" });
799
+ elem(doc, "span", { className: "lti-chip-name", textContent: chipLabel }, root);
800
+ summary = elem(doc, "span", { className: "lti-chip-cur" }, root);
801
+ root.appendChild(wrap);
802
+ }
803
+ mark = cur => {
804
+ root.classList.toggle("lti-on", !!cur);
805
+ if (summary) summary.textContent = kind.describe(cur, cfg);
806
+ };
807
+ mark(state.filters[col] || ""); // paint the seeded term
808
+ return root;
809
+ }
810
+
811
+ // A head-bar chip for each hidden typed column (see typedFilter).
812
+ function addControlFilters(cell, barCols, cfg, data, state, refresh) {
813
+ const doc = cell.ownerDocument;
814
+ for (const col of barCols)
815
+ cell.appendChild(
816
+ typedFilter(doc, col, cfg[col], data, state, refresh, cfg[col].label || col));
817
+ }
818
+
544
819
  // Pager as the last row of <tfoot> (after any footnotes), with a page-size
545
820
  // <select> when there is more than one size to offer. Both are symbols or
546
821
  // numbers only: « ‹ › » for first/previous/next/last and `from–to / total`
@@ -1,2 +1,2 @@
1
- (t=>{"use strict";const e=t.LT;if(!e?.onMount||e.plugins.interactive)return;let n;const o=t=>"number"==typeof t.find(t=>null!=t),r=t=>"string"!=typeof t?{...t}:"-"===t[0]?{col:t.slice(1),dir:"desc"}:{col:t,dir:"asc"},i=(t,e)=>t.querySelector(e),s=(t,e)=>t.querySelectorAll(e),c=(t,e,n,o)=>t.addEventListener(e,n,o);function a(t,e,n={},o){const r=t.createElement(e);for(const t in n)t.includes("-")?r.setAttribute(t,n[t]):r[t]=n[t];return o?o.appendChild(r):r}function l(t){const e=String(t??"").trim();if(""===e)return null;if(/(^|[^\w$])x([^\w$]|$)/.test(e)){let t;try{t=new Function("x",`return (${e});`)}catch(t){}if(t){const n=/^\s*!|!=/.test(e),o=e=>{if(null==e)return n;try{const n=Number(e);return!!t(String(e))||""!==e&&isFinite(n)&&!!t(n)}catch(t){return!1}};return t=>t[n?"every":"some"](t=>o(t.raw))}}const n="!"===e[0],o=(n?e.slice(1).trim():e).toLowerCase();return""===o?null:t=>n!==t.some(t=>null!=t.disp&&String(t.disp).toLowerCase().includes(o))}function d(t,e,r){const i=t._cols||[],s=t.data||{},c=(t,n)=>({raw:s[t]?.[n-1]??null,disp:e[t]?.[n-1]??""});let a=Array.from({length:(s[i[0]]||[]).length},(t,e)=>e+1);for(const t in r.filters||{}){const e=l(r.filters[t]);e&&(a=a.filter(n=>e([c(t,n)])))}const d=l(r.term);d&&(a=a.filter(t=>d(i.map(e=>c(e,t)))));const u=Object.values(r.predicates||{});if(u.length){const t=t=>Object.fromEntries(i.map(e=>[e,s[e]?.[t-1]??null]));a=a.filter(e=>{const n=t(e);return u.every(t=>t(n))})}const p=(r.sort||[]).map(t=>{const e=s[t.col];return e&&{col:e,num:o(e),dir:"desc"===t.dir?-1:1}}).filter(Boolean);return p.length&&(n||=new Intl.Collator,a.sort((t,e)=>{for(const{col:o,num:r,dir:i}of p){const s=o[t-1],c=o[e-1],a=null==s,l=null==c;if(a||l){if(a!==l)return a?1:-1;continue}const d=r?s-c:n.compare(String(s),String(c));if(d)return i*d}return 0})),a}function u(t,e){const n=e.pageSize;if(!n)return e.page=0,t;const o=Math.max(0,Math.ceil(t.length/n)-1);return e.page=Math.min(Math.max(e.page||0,0),o),t.slice(e.page*n,(e.page+1)*n)}function p(n,o){if(!(t=>!t.row_group&&!(t.ops||[]).some(t=>"row_group"===t.type||"indent"===t.type))(o))return console.warn("lt: interactive tables need flat rows (no row groups or indentation); rendering a static table.");const l=o.interactive,p=o._cols||[],m=function(t,e){const n={};return e.forEach(t=>n[t]=[]),s(t,"tbody tr").forEach((t,o)=>e.forEach((e,r)=>n[e][o]=t.children[r]?.textContent??"")),n}(n,p),w=[...s(n,"thead tr")].pop(),y={filters:{},predicates:{},page:0,pageSize:0,sort:Array.isArray(l.sort)?l.sort.map(r):[]};let x,b=()=>{};const v=[],S=(t=!0)=>{t&&(x=d(o,m,y),y.page=0);const r=u(x,y),s=a(n.ownerDocument,"template",{innerHTML:e.buildHtml({...o,_viewRows:r})}),c=i(s.content,"tbody");r.length?v.forEach(t=>t(c,r)):c.innerHTML=`<tr class="lti-empty"><td colspan="${p.length}">—</td></tr>`,i(n,"tbody").replaceWith(c),b(x.length)};n._lt={spec:o,state:y,refresh:()=>S(),filter(t,e){e?y.predicates[t]=e:delete y.predicates[t],S()}};const E=!1!==l.search||l.hide?a(n.ownerDocument,"div",{className:"lti-bar"},f(n.tHead||n.createTHead(),"lti-head",p.length,0)):null,C=[...s(w,"th")].map(t=>t.textContent);!1!==l.sort&&function(t,e,n,o){const r=t.ownerDocument,i={},c=()=>{for(const t in i)i[t].th.removeAttribute("aria-sort"),i[t].ind.textContent="";const t=n.sort||[];t.forEach(({col:e,dir:n},o)=>{const r=i[e];r&&(r.th.setAttribute("aria-sort","desc"===n?"descending":"ascending"),r.ind.textContent=("desc"===n?"▼":"▲")+(t.length>1?String(o+1).replace(/\d/g,t=>"₀₁₂₃₄₅₆₇₈₉"[t]):""))})};s(t,"th").forEach((t,s)=>{const l=e[s];null!=l&&(t.classList.add("lti-sortable"),i[l]={th:t,ind:a(r,"span",{className:"lti-sort"},t)},t.onclick=t=>{!function(t,e,n){const o=(t.sort||[]).slice(),r=o.findIndex(t=>t.col===e),i=r<0?"asc":"asc"===o[r].dir?"desc":null;if(!n)return void(t.sort=i?[{col:e,dir:i}]:[]);r<0?o.push({col:e,dir:i}):i?o[r]={col:e,dir:i}:o.splice(r,1);t.sort=o}(n,l,t.shiftKey),c(),o()})}),c()}(w,p,y,S),l.filter&&function(t,e,n,o,r){const i=t.ownerDocument,s=n.columns,c=a(i,"tr",{className:"lti-filters"});e.forEach(t=>{const e=a(i,"td",{},c);if(Array.isArray(s)&&!s.includes(t))return;g(e.appendChild(h(i,`Filter ${t}`)),e=>{o.filters[t]=e,r()})}),t.parentNode.appendChild(c)}(w,p,l.filter,y,S);const N=l.resize?function(t,e,n){const o=[...s(e,"th")],r=function(t,e){let n=i(t,"colgroup");if(!n){const o=t.ownerDocument;n=a(o,"colgroup");for(let t=0;t<e;t++)a(o,"col",{},n);t.caption?t.caption.after(n):t.prepend(n)}return[...n.children]}(t,n),c=t=>t.getBoundingClientRect().width,l=()=>{if(t.classList.contains("lti-fixed"))return;const e=o.map(c);t.style.width=c(t)+"px",r.forEach((t,n)=>t.style.width=e[n]+"px"),t.classList.add("lti-fixed")},d=e=>{const n=r.map(t=>t.style.width),i=t.style.width;r.forEach(t=>t.style.width=""),t.style.width="",t.classList.remove("lti-fixed");const s=c(o[e]);return r.forEach((t,e)=>t.style.width=n[e]),t.style.width=i,t.classList.add("lti-fixed"),s},u=(e,n,o=24)=>{const i=parseFloat(r[e].style.width);r[e].style.width=Math.max(n,o)+"px",t.style.width=parseFloat(t.style.width)+parseFloat(r[e].style.width)-i+"px"};return{ths:o,cs:r,freeze:l,natural:d,setWidth:u}}(n,w,p.length):null;if(l.resize&&function(t,e){const n=t.ownerDocument,{ths:o,cs:r,freeze:i,natural:s,setWidth:l}=e;o.forEach((e,o)=>{const d=a(n,"div",{className:"lti-resizer"},e);d.onclick=t=>t.stopPropagation(),d.ondblclick=t=>{t.stopPropagation(),i(),l(o,s(o))},d.onpointerdown=e=>{e.preventDefault(),e.stopPropagation(),i();const s=e.clientX,a=parseFloat(r[o].style.width),d=t=>l(o,a+t.clientX-s);t.classList.add("lti-resizing"),c(n,"pointermove",d),c(n,"pointerup",()=>{var e,o;e="pointermove",o=d,n.removeEventListener(e,o),t.classList.remove("lti-resizing")},{once:!0})}})}(n,N),l.hide&&function(t,e,n,o,r,i,l,d){const u=e.ownerDocument,p=[...s(n,"th")],h=i&&i.hidden||[],f=new Set,g=(t,e,n)=>{const o=t.children[e];o&&1===o.colSpan&&(o.hidden=n)};d.push(t=>f.forEach(e=>{for(const n of t.rows)g(n,e,!0)}));const m=t=>{const n=f.has(t);p[t]&&(p[t].hidden=n),l?.cs[t]&&(l.cs[t].hidden=n);for(const o of e.tBodies)for(const e of o.rows)g(e,t,n)},w=a(u,"span",{className:"lti-cols"},t),y=a(u,"button",{type:"button",title:"Columns","aria-label":"Show or hide columns","aria-expanded":"false"},w),x=a(u,"div",{className:"lti-menu",hidden:!0},w);o.forEach((t,e)=>{if(null==t)return;const n=a(u,"label",{},x),o=a(u,"input",{type:"checkbox",checked:!0},n);n.append(r[e]??t),h.includes(t)&&(o.checked=!1,f.add(e)),o.onchange=()=>{o.checked?f.delete(e):f.add(e),m(e)}}),o.forEach((t,e)=>m(e));const b=t=>{x.hidden=!t,y.setAttribute("aria-expanded",String(t))};y.onclick=t=>{t.stopPropagation(),b(x.hidden)},c(u,"click",t=>{w.contains(t.target)||b(!1)}),c(u,"keydown",t=>{"Escape"===t.key&&b(!1)})}(E,n,w,p,C,l.hide,N,v),!1!==l.search&&function(t,e,n,o){const r=t.appendChild(h(e.ownerDocument,"Search"));g(r,t=>{n.term=t,o()})}(E,n,y,S),l.detail&&v.push(function(n,o,r,i,s,c){const l=n.ownerDocument,d=r.length,u={};i.expanded=new Set;const p=(t,e)=>{const n={};for(const o in t)n[o]=t[o]?.[e-1]??null;return n},h=e=>{if(e in u)return u[e];const n=p(o._display||{},e);let r=null;if(Array.isArray(s)){const t={};for(const e of s)t[e]=[n[e]??null];r={data:t}}else{const i="function"==typeof s?s:t[s];"function"==typeof i&&(r=i(p(o.data||{},e),e,n))}return u[e]=r},f=t=>{i.expanded.has(t)?i.expanded.delete(t):i.expanded.add(t),c()};return(t,n)=>[...t.rows].forEach((t,o)=>{const r=n[o],s=t.cells[0],c=i.expanded.has(r);if(!s)return;const u=a(l,"button",{type:"button",className:"lti-expand",textContent:c?"▾":"▸","aria-expanded":String(c),"aria-label":"Toggle detail"});u.onclick=()=>f(r),s.prepend(u);const p=c&&h(r);if(p){const n=a(l,"tr",{className:"lti-detail"});t.after(n);const o=a(l,"td",{colSpan:d},n);e.render(a(l,"div",{},o),p)}})}(n,o,p,y,l.detail,()=>S(!1))),l.pager){const t=Array.isArray(l.pager)?l.pager:[10,25,50,100];b=function(t,e,n,o,r){const i=t.ownerDocument;let s=t.tFoot;s||((s=t.createTFoot()).className="lt-footer");const c=a(i,"div",{className:"lti-pager"},f(s,"lti-pager-row",e.length,-1)),l=a(i,"span",{className:"lti-pos"});o.pageSize=n[0];const d=[()=>0,t=>t-1,t=>t+1,()=>1e9],u=["«","‹","›","»"].map((t,e)=>{const n=a(i,"button",{type:"button",textContent:t,"aria-label":["First","Previous","Next","Last"][e]},c);return n.onclick=()=>{o.page=d[e](o.page),r()},n});if(c.appendChild(l),n.length>1){const t=a(i,"select",{"aria-label":"Rows per page"},c);n.forEach(e=>a(i,"option",{value:e,textContent:e||"∞"},t)),t.onchange=()=>{o.pageSize=+t.value,o.page=0,r()}}return t=>{const e=o.pageSize||t||1,n=Math.max(0,Math.ceil(t/e)-1);l.textContent=t?`${o.page*e+1}–${Math.min(t,(o.page+1)*e)} / ${t}`:"0 / 0",u.forEach((t,e)=>t.disabled=e<2?!o.page:o.page===n)}}(n,p,t,y,()=>S(!1)),S()}else(y.sort.length||l.detail)&&S()}function h(t,e){return a(t,"input",{type:"search",className:"lti-search","aria-label":e})}function f(t,e,n,o){const r=t.insertRow(o);return r.className=e,a(t.ownerDocument,"td",{colSpan:n},r)}function g(t,e){let n;const o=()=>e(t.value);t.oninput=()=>{clearTimeout(n),n=setTimeout(o,150)},t.onchange=()=>{clearTimeout(n),o()}}const m=(t,e)=>{e?.interactive&&!t.dataset.ltiOn&&(t.dataset.ltiOn="1",p(t,e))};e.plugins.interactive={matcher:l,computeView:d,pageSlice:u,enhance:p},e.onMount.push(m),"undefined"!=typeof document&&s(document,".lt-table").forEach(t=>m(t,t._ltSpec))})("undefined"!=typeof window?window:globalThis);
1
+ (t=>{"use strict";const e=t.LT;if(!e?.onMount||e.plugins.interactive)return;let n;const o=t=>"number"==typeof t.find(t=>null!=t),i=t=>"string"!=typeof t?{...t}:"-"===t[0]?{col:t.slice(1),dir:"desc"}:{col:t,dir:"asc"},s=(t,e)=>t.querySelector(e),l=(t,e)=>t.querySelectorAll(e),r=(t,e,n,o)=>t.addEventListener(e,n,o);function a(t,e,n={},o){const i=t.createElement(e);for(const t in n)t.includes("-")?i.setAttribute(t,n[t]):i[t]=n[t];return o?o.appendChild(i):i}function c(t,e,n){t.preventDefault();const o=t.target.ownerDocument||document,i=t=>e(t);r(o,"pointermove",i),r(o,"pointerup",()=>{var t,e;t="pointermove",e=i,o.removeEventListener(t,e),n&&n()},{once:!0})}function d(t){const e=String(t??"").trim();if(""===e)return null;if(/(^|[^\w$])x([^\w$]|$)/.test(e)){let t;try{t=new Function("x",`return (${e});`)}catch(t){}if(t){const n=/^\s*!|!=/.test(e),o=e=>{if(null==e)return n;try{const n=Number(e);return!!t(String(e))||""!==e&&isFinite(n)&&!!t(n)}catch(t){return!1}};return t=>t[n?"every":"some"](t=>o(t.raw))}}const n="!"===e[0],o=(n?e.slice(1).trim():e).toLowerCase();return""===o?null:t=>n!==t.some(t=>null!=t.disp&&String(t.disp).toLowerCase().includes(o))}function u(t,e,i){const s=t._cols||[],l=t.data||{},r=(t,n)=>({raw:l[t]?.[n-1]??null,disp:e[t]?.[n-1]??""});let a=Array.from({length:(l[s[0]]||[]).length},(t,e)=>e+1);for(const t in i.filters||{}){const e=d(i.filters[t]);e&&(a=a.filter(n=>e([r(t,n)])))}const c=d(i.term);c&&(a=a.filter(t=>c(s.map(e=>r(e,t)))));const u=Object.values(i.predicates||{});if(u.length){const t=Object.keys(l),e=e=>Object.fromEntries(t.map(t=>[t,l[t]?.[e-1]??null]));a=a.filter(t=>{const n=e(t);return u.every(t=>t(n))})}const p=(i.sort||[]).map(t=>{const e=l[t.col];return e&&{col:e,num:o(e),dir:"desc"===t.dir?-1:1}}).filter(Boolean);return p.length&&(n||=new Intl.Collator,a.sort((t,e)=>{for(const{col:o,num:i,dir:s}of p){const l=o[t-1],r=o[e-1],a=null==l,c=null==r;if(a||c){if(a!==c)return a?1:-1;continue}const d=i?l-r:n.compare(String(l),String(r));if(d)return s*d}return 0})),a}function p(t,e){const n=e.pageSize;if(!n)return e.page=0,t;const o=Math.max(0,Math.ceil(t.length/n)-1);return e.page=Math.min(Math.max(e.page||0,0),o),t.slice(e.page*n,(e.page+1)*n)}function f(n,o){if(!(t=>!t.row_group&&!(t.ops||[]).some(t=>"row_group"===t.type||"indent"===t.type))(o))return console.warn("lt: interactive tables need flat rows (no row groups or indentation); rendering a static table.");const d=o.interactive,f=o._cols||[],w=function(t,e){const n={};return e.forEach(t=>n[t]=[]),l(t,"tbody tr").forEach((t,o)=>e.forEach((e,i)=>n[e][o]=t.children[i]?.textContent??"")),n}(n,f),y=[...l(n,"thead tr")].pop(),b={filters:{},predicates:{},page:0,pageSize:0,sort:Array.isArray(d.sort)?d.sort.map(i):[]};let x,v=()=>{};const S=[],E=(t=!0)=>{t&&(x=u(o,w,b),b.page=0);const i=p(x,b),l=a(n.ownerDocument,"template",{innerHTML:e.buildHtml({...o,_viewRows:i})}),r=s(l.content,"tbody");i.length?S.forEach(t=>t(r,i)):r.innerHTML=`<tr class="lti-empty"><td colspan="${f.length}">—</td></tr>`,s(n,"tbody").replaceWith(r),v(x.length)};n._lt={spec:o,state:b,refresh:()=>E(),view:()=>x||u(o,w,b),filter(t,e){e?b.predicates[t]=e:delete b.predicates[t],E()}};const C=d.filter,k=C?.cols?Object.keys(C.cols).filter(t=>!0!==C.cols[t]&&!f.includes(t)):[],M=!1!==d.search||d.hide||k.length?a(n.ownerDocument,"div",{className:"lti-bar"},m(n.tHead||n.createTHead(),"lti-head",f.length,0)):null,$=[...l(y,"th")].map(t=>t.textContent);!1!==d.sort&&function(t,e,n,o){const i=t.ownerDocument,s={},r=()=>{for(const t in s)s[t].th.removeAttribute("aria-sort"),s[t].ind.textContent="";const t=n.sort||[];t.forEach(({col:e,dir:n},o)=>{const i=s[e];i&&(i.th.setAttribute("aria-sort","desc"===n?"descending":"ascending"),i.ind.textContent=("desc"===n?"▼":"▲")+(t.length>1?String(o+1).replace(/\d/g,t=>"₀₁₂₃₄₅₆₇₈₉"[t]):""))})};l(t,"th").forEach((t,l)=>{const c=e[l];null!=c&&(t.classList.add("lti-sortable"),s[c]={th:t,ind:a(i,"span",{className:"lti-sort"},t)},t.onclick=t=>{!function(t,e,n){const o=(t.sort||[]).slice(),i=o.findIndex(t=>t.col===e),s=i<0?"asc":"asc"===o[i].dir?"desc":null;if(!n)return void(t.sort=s?[{col:e,dir:s}]:[]);i<0?o.push({col:e,dir:s}):s?o[i]={col:e,dir:s}:o.splice(i,1);t.sort=o}(n,c,t.shiftKey),r(),o()})}),r()}(y,f,b,E),C&&(C.default||C.cols&&Object.keys(C.cols).some(t=>f.includes(t)))&&function(t,e,n,o,i,s){const l=t.ownerDocument,r=a(l,"tr",{className:"lti-filters"}),c=n.default,d=n.cols||{};e.forEach(t=>{const e=a(l,"td",{},r),n=t in d?d[t]:c;if(n)if(!0===n){g(e.appendChild(h(l,`Filter ${t}`)),e=>{e?i.filters[t]=e:delete i.filters[t],s()})}else e.appendChild(N(l,t,n,o,i,s,null))}),t.parentNode.appendChild(r)}(y,f,C,o.data,b,E);const A=d.resize?function(t,e,n){const o=[...l(e,"th")],i=function(t,e){let n=s(t,"colgroup");if(!n){const o=t.ownerDocument;n=a(o,"colgroup");for(let t=0;t<e;t++)a(o,"col",{},n);t.caption?t.caption.after(n):t.prepend(n)}return[...n.children]}(t,n),r=t=>t.getBoundingClientRect().width,c=()=>{if(t.classList.contains("lti-fixed"))return;const e=o.map(r);t.style.width=r(t)+"px",i.forEach((t,n)=>t.style.width=e[n]+"px"),t.classList.add("lti-fixed")},d=e=>{const n=i.map(t=>t.style.width),s=t.style.width;i.forEach(t=>t.style.width=""),t.style.width="",t.classList.remove("lti-fixed");const l=r(o[e]);return i.forEach((t,e)=>t.style.width=n[e]),t.style.width=s,t.classList.add("lti-fixed"),l},u=(e,n,o=24)=>{const s=parseFloat(i[e].style.width);i[e].style.width=Math.max(n,o)+"px",t.style.width=parseFloat(t.style.width)+parseFloat(i[e].style.width)-s+"px"};return{ths:o,cs:i,freeze:c,natural:d,setWidth:u}}(n,y,f.length):null;if(d.resize&&function(t,e){const n=t.ownerDocument,{ths:o,cs:i,freeze:s,natural:l,setWidth:r}=e;o.forEach((e,o)=>{const d=a(n,"div",{className:"lti-resizer"},e);d.onclick=t=>t.stopPropagation(),d.ondblclick=t=>{t.stopPropagation(),s(),r(o,l(o))},d.onpointerdown=e=>{e.stopPropagation(),s();const n=e.clientX,l=parseFloat(i[o].style.width);t.classList.add("lti-resizing"),c(e,t=>r(o,l+t.clientX-n),()=>t.classList.remove("lti-resizing"))}})}(n,A),d.hide&&function(t,e,n,o,i,s,l,c){const d=e.ownerDocument,u=s&&s.hidden||[],p=new Set,f=(t,e,n)=>{const o=t.children[e];o&&1===o.colSpan&&(o.hidden=n)};c.push(t=>p.forEach(e=>{for(const n of t.rows)f(n,e,!0)}));const h=t=>{const n=p.has(t);l?.cs[t]&&(l.cs[t].hidden=n);for(const o of e.rows)o.classList.contains("lt-spanner-row")||f(o,t,n)},m=a(d,"span",{className:"lti-cols"},t),g=a(d,"button",{type:"button",title:"Columns","aria-label":"Show or hide columns","aria-expanded":"false"},m),w=a(d,"div",{className:"lti-menu",hidden:!0},m);o.forEach((t,e)=>{if(null==t)return;const n=a(d,"label",{},w),o=a(d,"input",{type:"checkbox",checked:!0},n);n.append(i[e]??t),u.includes(t)&&(o.checked=!1,p.add(e)),o.onchange=()=>{o.checked?p.delete(e):p.add(e),h(e)}}),o.forEach((t,e)=>h(e));const y=t=>{w.hidden=!t,g.setAttribute("aria-expanded",String(t))};g.onclick=t=>{t.stopPropagation(),y(w.hidden)},r(d,"click",t=>{m.contains(t.target)||y(!1)}),r(d,"keydown",t=>{"Escape"===t.key&&y(!1)})}(M,n,0,f,$,d.hide,A,S),!1!==d.search&&function(t,e,n,o){const i=t.appendChild(h(e.ownerDocument,"Search"));g(i,t=>{n.term=t,o()})}(M,n,b,E),k.length&&function(t,e,n,o,i,s){const l=t.ownerDocument;for(const r of e)t.appendChild(N(l,r,n[r],o,i,s,n[r].label||r))}(M,k,C.cols,o.data,b,E),d.detail&&S.push(function(n,o,i,s,l,r){const c=n.ownerDocument,d=i.length,u={};s.expanded=new Set;const p=(t,e)=>{const n={};for(const o in t)n[o]=t[o]?.[e-1]??null;return n},f=e=>{if(e in u)return u[e];const n=p(o._display||{},e);let i=null;if(Array.isArray(l)){const t={};for(const e of l)t[e]=[n[e]??null];i={data:t}}else{const s="function"==typeof l?l:t[l];"function"==typeof s&&(i=s(p(o.data||{},e),e,n))}return u[e]=i},h=t=>{s.expanded.has(t)?s.expanded.delete(t):s.expanded.add(t),r()};return(t,n)=>[...t.rows].forEach((t,o)=>{const i=n[o],l=t.cells[0],r=s.expanded.has(i);if(!l)return;const u=a(c,"button",{type:"button",className:"lti-expand",textContent:r?"▾":"▸","aria-expanded":String(r),"aria-label":"Toggle detail"});u.onclick=()=>h(i),l.prepend(u);const p=r&&f(i);if(p){const n=a(c,"tr",{className:"lti-detail"});t.after(n);const o=a(c,"td",{colSpan:d},n);e.render(a(c,"div",{},o),p)}})}(n,o,f,b,d.detail,()=>E(!1))),d.pager){const t=Array.isArray(d.pager)?d.pager:[10,25,50,100];v=function(t,e,n,o,i){const s=t.ownerDocument;let l=t.tFoot;l||((l=t.createTFoot()).className="lt-footer");const r=a(s,"div",{className:"lti-pager"},m(l,"lti-pager-row",e.length,-1)),c=a(s,"span",{className:"lti-pos"});o.pageSize=n[0];const d=[()=>0,t=>t-1,t=>t+1,()=>1e9],u=["«","‹","›","»"].map((t,e)=>{const n=a(s,"button",{type:"button",textContent:t,"aria-label":["First","Previous","Next","Last"][e]},r);return n.onclick=()=>{o.page=d[e](o.page),i()},n});if(r.appendChild(c),n.length>1){const t=a(s,"select",{"aria-label":"Rows per page"},r);n.forEach(e=>a(s,"option",{value:e,textContent:e||"∞"},t)),t.onchange=()=>{o.pageSize=+t.value,o.page=0,i()}}return t=>{const e=o.pageSize||t||1,n=Math.max(0,Math.ceil(t/e)-1);c.textContent=t?`${o.page*e+1}–${Math.min(t,(o.page+1)*e)} / ${t}`:"0 / 0",u.forEach((t,e)=>t.disabled=e<2?!o.page:o.page===n)}}(n,f,t,b,()=>E(!1)),E()}else(b.sort.length||d.detail)&&E()}function h(t,e){return a(t,"input",{type:"search",className:"lti-search","aria-label":e})}function m(t,e,n,o){const i=t.insertRow(o);return i.className=e,a(t.ownerDocument,"td",{colSpan:n},i)}function g(t,e){let n;const o=()=>e(t.value);t.oninput=()=>{clearTimeout(n),n=setTimeout(o,150)},t.onchange=()=>{clearTimeout(n),o()}}const w=t=>""===t?"":`x == ${JSON.stringify(String(t))}`,y=t=>{const e=/^\s*x\s*==\s*(['"])([\s\S]*)\1\s*$/.exec(t||"");return e?e[2]:null},b=(t,e,n,o)=>t<=n&&e>=o?"":`x >= ${t} && x <= ${e}`,x=t=>{const e=/^\s*x\s*>=\s*(-?[\d.]+)\s*&&\s*x\s*<=\s*(-?[\d.]+)\s*$/.exec(t||"");return e?[parseFloat(e[1]),parseFloat(e[2])]:null};function v(t,e,n){const o=e.min,i=e.max,s=i-o||1,l=e.step||s/100,r=a(t,"div",{className:"lti-slider"}),d=a(t,"div",{className:"lti-slider-fill"},r),u=e=>a(t,"button",{type:"button",className:"lti-thumb",role:"slider","aria-label":e,"aria-valuemin":o,"aria-valuemax":i},r),p=[u("Minimum"),u("Maximum")];let f=[o,i];const h=t=>(t-o)/s*100,m=()=>{p.forEach((t,e)=>{t.style.left=h(f[e])+"%",t.setAttribute("aria-valuenow",f[e])}),d.style.left=h(f[0])+"%",d.style.right=100-h(f[1])+"%"},g=(t,e)=>{f[t]=(t=>{const e=Math.round((t-o)/l)*l+o;return Math.min(i,Math.max(o,Math.round(1e6*e)/1e6))})(e),f[0]>f[1]&&(f=[Math.min(...f),Math.max(...f)]),m(),n(f.slice())};return p.forEach((t,e)=>{t.onpointerdown=n=>{t.focus(),c(n,t=>g(e,(t=>{const e=r.getBoundingClientRect();return o+s*Math.min(1,Math.max(0,(t-e.left)/e.width))})(t.clientX)))},t.onkeydown=t=>{const n={ArrowLeft:-1,ArrowDown:-1,ArrowRight:1,ArrowUp:1}[t.key];if(n)g(e,f[e]+n*l);else if("Home"===t.key)g(e,o);else{if("End"!==t.key)return;g(e,i)}t.preventDefault()}}),m(),{el:r,set:t=>{f=t.slice(),m()}}}function S(t,e,n){const o=a(t,"span",{className:"lti-pop"}),i=a(t,"button",{type:"button",className:"lti-funnel",title:e,"aria-label":e,"aria-expanded":"false"},o),s=a(t,"div",{className:"lti-pop-panel",hidden:!0},o);n(s);const l=e=>{s.hidden=!e,i.setAttribute("aria-expanded",String(e)),e&&(()=>{s.style.left=s.style.right="";const e=s.getBoundingClientRect(),n=(t.defaultView||window).innerWidth;e.right>n-4&&(s.style.left="auto",s.style.right="0")})()};return i.onclick=t=>{t.stopPropagation(),l(s.hidden)},r(t,"click",t=>{o.contains(t.target)||l(!1)}),r(t,"keydown",t=>{"Escape"===t.key&&l(!1)}),o}const E={select:{describe:(t,e)=>{const n=y(t);if(null==n)return t?"⋯":"";const o=e.choices.find(t=>t.value===n);return o?o.label:n},init:t=>w(t.selected??(t.choices[0]||{}).value??""),build:(t,e,n)=>{const o=function(t,e,n){const o=a(t,"select",{className:"lti-filter-pick"});return e.forEach(e=>a(t,"option",{value:e.value,textContent:e.label},o)),o.onchange=()=>n(o.value),{el:o,set:t=>o.value=t}}(t,e.choices,t=>n(w(t),i)),i={el:o.el,reflect:t=>{const e=y(t);o.set(null==e?"":e)}};return i}},range:{describe:t=>{const e=x(t);return e?`${e[0]} – ${e[1]}`:t?"⋯":""},init:t=>t.value?b(t.value[0],t.value[1],t.min,t.max):"",build:(t,e,n)=>{const o=a(t,"span",{className:"lti-slider-out"}),i=t=>o.textContent=`${t[0]} – ${t[1]}`,s=v(t,e,t=>{i(t),n(b(t[0],t[1],e.min,e.max),l)}),l={el:[s.el,o],reflect:t=>{const n=x(t)||[e.min,e.max];s.set(n),i(n)}};return l}}};function N(t,e,n,o,i,s,l){const r=function(t,e){if("select"===t.type){let n=t.choices;if(!n){const t=new Set,o=[];for(const n of e)null==n||t.has(n)||(t.add(n),o.push(n));o.sort((t,e)=>"number"==typeof t&&"number"==typeof e?t-e:String(t).localeCompare(String(e))),n=o.map(t=>({value:String(t),label:String(t)}))}return{...t,choices:n}}let{min:n,max:o}=t;if(null==n||null==o){let t=1/0,i=-1/0;for(const n of e){const e=Number(n);isFinite(e)&&(e<t&&(t=e),e>i&&(i=e))}null==n&&(n=isFinite(t)?t:0),null==o&&(o=isFinite(i)?i:1)}return{...t,min:n,max:o}}(n,o[e]||[]),c=E[r.type],d=[];let u=()=>{};const p=(t,n)=>{t?i.filters[e]=t:delete i.filters[e],s();const o=i.filters[e]||"";d.forEach(t=>t!==n&&t.reflect(o)),u(o)},f=S(t,`Filter ${r.label||e}`,n=>{const o=a(t,"input",{type:"search",className:"lti-search","aria-label":`${r.label||e} filter expression`},n),i={reflect:e=>{t.activeElement!==o&&(o.value=e)}};d.push(i),g(o,t=>p(t.trim(),i));const s=c.build(t,r,p);d.push(s),n.append(...[].concat(s.el)),p(c.init(r),null)});let h,m=f;return null!=l&&(m=a(t,"span",{className:"lti-chip"}),a(t,"span",{className:"lti-chip-name",textContent:l},m),h=a(t,"span",{className:"lti-chip-cur"},m),m.appendChild(f)),u=t=>{m.classList.toggle("lti-on",!!t),h&&(h.textContent=c.describe(t,r))},u(i.filters[e]||""),m}const C=(t,e)=>{e?.interactive&&!t.dataset.ltiOn&&(t.dataset.ltiOn="1",f(t,e))};e.plugins.interactive={matcher:d,computeView:u,pageSlice:p,enhance:f},e.onMount.push(C),"undefined"!=typeof document&&l(document,".lt-table").forEach(t=>C(t,t._ltSpec))})("undefined"!=typeof window?window:globalThis);
2
2
  //# sourceMappingURL=lt-interactive.min.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["root","LT","onMount","plugins","interactive","coll","numCol","col","find","v","parseKey","k","slice","dir","$","el","sel","querySelector","$$","querySelectorAll","on","t","type","fn","opts","addEventListener","elem","doc","tag","props","parent","e","createElement","includes","setAttribute","appendChild","matcher","term","String","trim","test","Function","neg","raw","num","Number","isFinite","cells","c","needle","toLowerCase","some","disp","computeView","spec","state","cols","_cols","data","cell","r","idx","Array","from","length","_","i","filters","pred","filter","map","fns","Object","values","predicates","row","fromEntries","o","every","f","keys","sort","Boolean","Intl","Collator","a","b","x","y","xn","yn","compare","pageSlice","view","n","pageSize","page","last","Math","max","ceil","min","enhance","row_group","ops","isFlat","console","warn","forEach","tr","ri","ci","children","textContent","captureDisplay","hrow","pop","isArray","sync","postSwap","refresh","stale","rows","tmp","ownerDocument","innerHTML","buildHtml","_viewRows","body","content","replaceWith","_lt","id","headBar","search","hide","className","fullRow","tHead","createTHead","labels","th","marks","paint","removeAttribute","ind","order","m","replace","d","classList","add","onclick","additive","findIndex","push","splice","cycle","shiftKey","addSort","opt","only","columns","onType","searchInput","parentNode","addFilter","layout","resize","nCol","ths","cs","g","caption","after","prepend","colGroup","wOf","getBoundingClientRect","width","freeze","contains","w","style","natural","keep","tw","remove","j","setWidth","old","parseFloat","fixedLayout","grip","stopPropagation","ondblclick","onpointerdown","preventDefault","x0","clientX","w0","move","ev","removeEventListener","once","addResize","start","hidden","Set","setCell","colSpan","apply","has","tBodies","wrap","btn","title","menu","label","box","checked","append","onchange","delete","open","target","key","addColumnToggle","input","addSearch","detail","detailOpt","rerender","cache","expanded","pick","src","build","_display","out","toggle","td0","child","render","addDetail","pager","sizes","repage","foot","tFoot","createTFoot","bar","pos","steps","p","btns","glyph","value","total","disabled","addPaginate","sect","cls","insertRow","timer","go","oninput","clearTimeout","setTimeout","dataset","ltiOn","document","_ltSpec","window","globalThis"],"sources":["lt-interactive.js"],"mappings":"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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","stopPropagation","ondblclick","onpointerdown","x0","clientX","w0","addResize","opt","start","hidden","Set","setCell","colSpan","apply","has","wrap","btn","title","menu","label","box","checked","append","onchange","delete","open","key","addColumnToggle","input","addSearch","cfg","addControlFilters","detail","detailOpt","rerender","cache","expanded","pick","src","build","_display","out","toggle","td0","child","render","addDetail","pager","sizes","repage","foot","tFoot","createTFoot","bar","pos","steps","p","btns","glyph","value","total","disabled","addPaginate","sect","cls","insertRow","timer","go","oninput","clearTimeout","setTimeout","selExpr","JSON","stringify","selParse","s","exec","rngExpr","lo","hi","rngParse","makeSlider","onInput","span","step","track","fill","mk","lab","role","thumbs","val","pct","left","right","setOne","round","snap","focus","at","onkeydown","ArrowLeft","ArrowDown","ArrowRight","ArrowUp","set","popover","panel","vw","defaultView","window","innerWidth","place","KINDS","select","describe","choices","init","selected","setTerm","options","makeSelect","ed","reflect","range","show","chipLabel","column","seen","vals","localeCompare","Infinity","resolveSpec","kind","editors","mark","expr","cur","boxEd","activeElement","wEd","concat","summary","dataset","ltiOn","_ltSpec","globalThis"],"sources":["lt-interactive.js"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xiee/utils",
3
- "version": "1.14.86",
3
+ "version": "1.14.88",
4
4
  "description": "Miscellaneous tools and utilities to manipulate HTML pages",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"