covara 0.6.0 → 0.6.1

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.
Files changed (53) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/templates/readme.js +2 -2
  3. package/dist/client/live-store.d.ts.map +1 -1
  4. package/dist/client/live-store.js +18 -3
  5. package/dist/client/live-store.js.map +1 -1
  6. package/dist/index.d.ts +1 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -1
  9. package/dist/index.js.map +1 -1
  10. package/dist/middleware/securityHeaders.d.ts +1 -0
  11. package/dist/middleware/securityHeaders.d.ts.map +1 -1
  12. package/dist/middleware/securityHeaders.js +6 -3
  13. package/dist/middleware/securityHeaders.js.map +1 -1
  14. package/dist/resource/pagination.d.ts.map +1 -1
  15. package/dist/resource/pagination.js +32 -4
  16. package/dist/resource/pagination.js.map +1 -1
  17. package/dist/ui/html/client/data-explorer-app.d.ts +2 -0
  18. package/dist/ui/html/client/data-explorer-app.d.ts.map +1 -0
  19. package/dist/ui/html/client/data-explorer-app.js +441 -0
  20. package/dist/ui/html/client/data-explorer-app.js.map +1 -0
  21. package/dist/ui/html/client/htmx-vendor.d.ts +3 -0
  22. package/dist/ui/html/client/htmx-vendor.d.ts.map +1 -0
  23. package/dist/ui/html/client/htmx-vendor.js +5 -0
  24. package/dist/ui/html/client/htmx-vendor.js.map +1 -0
  25. package/dist/ui/html/client/runtime.d.ts +2 -0
  26. package/dist/ui/html/client/runtime.d.ts.map +1 -0
  27. package/dist/ui/html/client/runtime.js +198 -0
  28. package/dist/ui/html/client/runtime.js.map +1 -0
  29. package/dist/ui/html/components/index.d.ts +5 -1
  30. package/dist/ui/html/components/index.d.ts.map +1 -1
  31. package/dist/ui/html/components/index.js +10 -5
  32. package/dist/ui/html/components/index.js.map +1 -1
  33. package/dist/ui/html/icons.d.ts +3 -0
  34. package/dist/ui/html/icons.d.ts.map +1 -0
  35. package/dist/ui/html/icons.js +23 -0
  36. package/dist/ui/html/icons.js.map +1 -0
  37. package/dist/ui/html/layout.d.ts.map +1 -1
  38. package/dist/ui/html/layout.js +33 -17
  39. package/dist/ui/html/layout.js.map +1 -1
  40. package/dist/ui/html/pages/dashboard.d.ts.map +1 -1
  41. package/dist/ui/html/pages/dashboard.js +6 -5
  42. package/dist/ui/html/pages/dashboard.js.map +1 -1
  43. package/dist/ui/html/pages/data-explorer.d.ts.map +1 -1
  44. package/dist/ui/html/pages/data-explorer.js +5 -89
  45. package/dist/ui/html/pages/data-explorer.js.map +1 -1
  46. package/dist/ui/html/styles.d.ts +1 -1
  47. package/dist/ui/html/styles.d.ts.map +1 -1
  48. package/dist/ui/html/styles.js +357 -40
  49. package/dist/ui/html/styles.js.map +1 -1
  50. package/dist/ui/middleware.d.ts.map +1 -1
  51. package/dist/ui/middleware.js +35 -0
  52. package/dist/ui/middleware.js.map +1 -1
  53. package/package.json +5 -4
@@ -0,0 +1,441 @@
1
+ // Client-side Data Explorer: a full data tool over any registered resource —
2
+ // sortable grid, cursor pagination, visual filter builder, free-text quick
3
+ // search, row selection + bulk delete, column visibility, saved views, density,
4
+ // CSV/JSON export, inline cell editing, schema-driven create/edit, a detail
5
+ // drawer, and auto-refresh. Talks to the admin JSON API at {base}/api/explorer.
6
+ // Served verbatim as JS (no build step).
7
+ export const dataExplorerScript = String.raw `
8
+ (function () {
9
+ // On a full page load this body script can run before the deferred runtime
10
+ // (window.Covara) has executed, and before #dx-root is parsed. Wait for both
11
+ // so the app boots reliably whether reached by direct URL or htmx navigation.
12
+ function whenReady(cb) {
13
+ var attempt = function () {
14
+ if (document.getElementById('dx-root') && window.Covara) { cb(); return; }
15
+ setTimeout(attempt, 30);
16
+ };
17
+ if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', attempt);
18
+ else attempt();
19
+ }
20
+ whenReady(function () {
21
+ var root = document.getElementById('dx-root');
22
+ var C = window.Covara;
23
+ var api = C.base + '/api/explorer';
24
+ var LS = 'covara.dx.';
25
+
26
+ var state = {
27
+ resource: null, schema: null, readOnly: true, columns: [], pk: 'id', allResources: [],
28
+ rows: [], orderBy: null, dir: 'asc', filters: [], search: '', limit: 50,
29
+ cursorStack: [], nextCursor: null, total: null, autoRefresh: false, timer: null,
30
+ hidden: {}, density: 'comfortable', selected: {}, filtersOpen: false, pop: null
31
+ };
32
+
33
+ var OPS = [
34
+ { v: '==', label: '=' }, { v: '!=', label: '≠' },
35
+ { v: '>', label: '>' }, { v: '>=', label: '≥' }, { v: '<', label: '<' }, { v: '<=', label: '≤' },
36
+ { v: '=contains=', label: 'contains' }, { v: '=in=', label: 'in (a,b)' }, { v: '=isnull=', label: 'is null' }
37
+ ];
38
+
39
+ function qs() { var m = (location.search.match(/[?&]resource=([^&]+)/) || [])[1]; return m ? decodeURIComponent(m) : null; }
40
+ function isNum(t) { return /int|float|double|decimal|number|real|numeric/i.test(t || ''); }
41
+ function isBool(t) { return /bool/i.test(t || ''); }
42
+ function isJson(t) { return /json/i.test(t || ''); }
43
+ function isDate(t) { return /date|time|timestamp/i.test(t || ''); }
44
+ function isText(t) { return /text|char|string|varchar/i.test(t || ''); }
45
+ function colType(name) { var c = state.columns.find(function (c) { return c.name === name; }); return c ? c.type : ''; }
46
+
47
+ // ---- localStorage prefs --------------------------------------------------
48
+ function pref(key) { return LS + state.resource + '.' + key; }
49
+ function loadPrefs() {
50
+ try {
51
+ var h = JSON.parse(localStorage.getItem(pref('hidden')) || '{}'); state.hidden = h || {};
52
+ } catch (e) { state.hidden = {}; }
53
+ state.density = localStorage.getItem(LS + 'density') || 'comfortable';
54
+ }
55
+ function saveHidden() { try { localStorage.setItem(pref('hidden'), JSON.stringify(state.hidden)); } catch (e) {} }
56
+ function savedViews() { try { return JSON.parse(localStorage.getItem(pref('views')) || '[]'); } catch (e) { return []; } }
57
+ function setViews(v) { try { localStorage.setItem(pref('views'), JSON.stringify(v)); } catch (e) {} }
58
+
59
+ // ---- filter construction -------------------------------------------------
60
+ function quote(field, op, raw) {
61
+ var t = colType(field);
62
+ if (op === '=isnull=') return field + '=isnull=true';
63
+ if (op === '=in=') return field + '=in=(' + raw + ')';
64
+ if (isNum(t) || isBool(t)) return field + op + raw;
65
+ return field + op + '"' + String(raw).replace(/"/g, '\\"') + '"';
66
+ }
67
+ function buildFilter() {
68
+ var parts = state.filters.filter(function (f) { return f.field && f.op && (f.op === '=isnull=' || f.value !== ''); })
69
+ .map(function (f) { return quote(f.field, f.op, f.value); });
70
+ if (state.search) {
71
+ var q = state.search.replace(/"/g, '\\"');
72
+ var textCols = state.columns.filter(function (c) { return isText(c.type); });
73
+ if (textCols.length) {
74
+ var group = textCols.map(function (c) { return c.name + '=contains="' + q + '"'; }).join(',');
75
+ parts.push('(' + group + ')');
76
+ }
77
+ }
78
+ return parts.join(';');
79
+ }
80
+
81
+ // ---- data load -----------------------------------------------------------
82
+ async function loadSchemas() {
83
+ var r = await C.fetchJSON(api + '/schemas');
84
+ state.readOnly = !!r.readOnly;
85
+ return (r.schemas || []).map(function (s) { return s.name || s.resource || s; });
86
+ }
87
+ async function selectResource(name) {
88
+ state.resource = name; state.cursorStack = []; state.nextCursor = null; state.filters = []; state.search = ''; state.selected = {};
89
+ var s = await C.fetchJSON(api + '/schemas/' + encodeURIComponent(name));
90
+ state.schema = s.schema || s;
91
+ state.columns = state.schema.columns || [];
92
+ state.pk = (state.columns.find(function (c) { return c.isPrimary; }) || state.columns[0] || {}).name || 'id';
93
+ state.orderBy = state.pk; state.dir = 'asc';
94
+ loadPrefs();
95
+ var url = new URL(location.href); url.searchParams.set('resource', name); history.replaceState(null, '', url);
96
+ await loadData(); render();
97
+ }
98
+ async function loadData(cursor) {
99
+ if (!state.resource) return;
100
+ var p = new URLSearchParams();
101
+ p.set('limit', String(state.limit));
102
+ p.set('orderBy', state.orderBy + (state.dir === 'desc' ? ':desc' : ':asc'));
103
+ p.set('totalCount', 'true');
104
+ var f = buildFilter(); if (f) p.set('filter', f);
105
+ if (cursor) p.set('cursor', cursor);
106
+ var r = await C.fetchJSON(api + '/data/' + encodeURIComponent(state.resource) + '?' + p.toString());
107
+ state.rows = r.items || [];
108
+ state.nextCursor = r.nextCursor || r.cursor || null;
109
+ state.total = (typeof r.totalCount === 'number') ? r.totalCount : (typeof r.total === 'number' ? r.total : null);
110
+ }
111
+
112
+ // ---- helpers -------------------------------------------------------------
113
+ function visibleCols() { return state.columns.filter(function (c) { return !state.hidden[c.name]; }); }
114
+ function selCount() { return Object.keys(state.selected).filter(function (k) { return state.selected[k]; }).length; }
115
+ function fmtCell(val, col) {
116
+ if (val === null || val === undefined) return '<span class="cell-null">null</span>';
117
+ if (typeof val === 'boolean') return '<span class="cell-bool">' + val + '</span>';
118
+ if (typeof val === 'object') return '<span class="cell-json">' + C.escapeHtml(JSON.stringify(val)) + '</span>';
119
+ var s = String(val);
120
+ if (col && col.isPrimary) return '<span class="pk">' + C.escapeHtml(s) + '</span>';
121
+ return C.escapeHtml(s.length > 200 ? s.slice(0, 200) + '…' : s);
122
+ }
123
+ function closePop() { if (state.pop) { state.pop = null; render(); } }
124
+ document.addEventListener('click', function (e) {
125
+ if (state.pop && !e.target.closest('.dx-pop-wrap')) closePop();
126
+ });
127
+
128
+ // ---- render --------------------------------------------------------------
129
+ function render() {
130
+ root.innerHTML = '';
131
+ root.appendChild(toolbar());
132
+ if (state.filtersOpen) root.appendChild(filterPanel());
133
+ if (selCount() > 0) root.appendChild(bulkBar());
134
+ if (!state.resource) { root.appendChild(C.el('div', { class: 'card', html: '<div class="empty-state"><div class="empty-icon">▣</div><div class="empty-title">Select a resource</div><div class="empty-desc">Pick a resource above to browse its data.</div></div>' })); return; }
135
+ root.appendChild(grid());
136
+ root.appendChild(footer());
137
+ }
138
+
139
+ function popMenu(label, builder) {
140
+ var id = label.toLowerCase();
141
+ var btn = C.el('button', { class: 'btn btn-secondary btn-sm', onclick: function (e) { e.stopPropagation(); state.pop = state.pop === id ? null : id; render(); } }, [label + ' ▾']);
142
+ var wrap = C.el('div', { class: 'dx-pop-wrap' }, [btn]);
143
+ if (state.pop === id) wrap.appendChild(builder());
144
+ return wrap;
145
+ }
146
+
147
+ function toolbar() {
148
+ var sel = C.el('select', { class: 'select dx-resource-select', onchange: function (e) { selectResource(e.target.value); } });
149
+ sel.appendChild(C.el('option', { value: '', text: 'Select resource…' }));
150
+ state.allResources.forEach(function (name) { var o = C.el('option', { value: name, text: name }); if (name === state.resource) o.selected = true; sel.appendChild(o); });
151
+
152
+ var search = C.el('input', { class: 'input dx-search', type: 'search', placeholder: '⌕ Quick search…', value: state.search });
153
+ var t;
154
+ search.addEventListener('input', function (e) { state.search = e.target.value; clearTimeout(t); t = setTimeout(function () { reload(); }, 280); });
155
+
156
+ var filterBtn = C.el('button', { class: 'btn btn-secondary btn-sm', onclick: function () { state.filtersOpen = !state.filtersOpen; if (state.filtersOpen && !state.filters.length) addFilter(); render(); } },
157
+ ['⚲ Filters' + (state.filters.length ? ' (' + state.filters.length + ')' : '')]);
158
+
159
+ var right = C.el('div', { class: 'row' });
160
+ if (state.resource) {
161
+ right.appendChild(popMenu('Columns', columnsMenu));
162
+ right.appendChild(popMenu('Views', viewsMenu));
163
+ right.appendChild(popMenu('Export', exportMenu));
164
+ right.appendChild(densityToggle());
165
+ var autoWrap = C.el('label', { class: 'row', style: 'font-size:12.5px;color:var(--text-2);gap:7px' }, [makeSwitch(state.autoRefresh, toggleAuto), 'Live']);
166
+ right.appendChild(autoWrap);
167
+ right.appendChild(C.el('button', { class: 'btn btn-secondary btn-sm', title: 'Refresh', onclick: function () { reload(); } }, ['↻']));
168
+ if (!state.readOnly) right.appendChild(C.el('button', { class: 'btn btn-primary btn-sm', onclick: function () { openForm(null); } }, ['+ New']));
169
+ }
170
+
171
+ var left = C.el('div', { class: 'row', style: 'flex:1' }, [sel, search, filterBtn]);
172
+ return C.el('div', { class: 'dx-toolbar' }, [left, C.el('span', { class: 'dx-spacer' }), right]);
173
+ }
174
+
175
+ function makeSwitch(on, cb) {
176
+ var w = C.el('span', { class: 'switch' }); var i = C.el('input', { type: 'checkbox' }); i.checked = on;
177
+ i.addEventListener('change', function () { cb(i.checked); }); w.appendChild(i); w.appendChild(C.el('span', { class: 'track' })); return w;
178
+ }
179
+ function densityToggle() {
180
+ return C.el('div', { class: 'segmented' }, ['comfortable', 'compact'].map(function (d) {
181
+ return C.el('button', { class: state.density === d ? 'active' : '', title: d, onclick: function () { state.density = d; localStorage.setItem(LS + 'density', d); render(); } }, [d === 'compact' ? '≡' : '☰']);
182
+ }));
183
+ }
184
+
185
+ function columnsMenu() {
186
+ var items = state.columns.map(function (c) {
187
+ return C.el('label', { class: 'dx-pop-item' }, [
188
+ (function () { var i = C.el('input', { type: 'checkbox' }); i.checked = !state.hidden[c.name]; i.addEventListener('change', function () { if (i.checked) delete state.hidden[c.name]; else state.hidden[c.name] = true; saveHidden(); render(); }); return i; })(),
189
+ C.el('span', { text: c.name }), C.el('span', { class: 'cmdk-hint', text: c.type })
190
+ ]);
191
+ });
192
+ var reset = C.el('div', { class: 'dx-pop-item', onclick: function () { state.hidden = {}; saveHidden(); render(); } }, ['↺ Show all']);
193
+ return C.el('div', { class: 'dx-pop' }, [C.el('div', { class: 'dx-pop-title', text: 'Columns' })].concat(items).concat([C.el('div', { class: 'dx-pop-sep' }), reset]));
194
+ }
195
+
196
+ function viewsMenu() {
197
+ var views = savedViews();
198
+ var nodes = [C.el('div', { class: 'dx-pop-title', text: 'Saved views' })];
199
+ if (!views.length) nodes.push(C.el('div', { class: 'dx-pop-item muted', text: 'No saved views' }));
200
+ views.forEach(function (v, i) {
201
+ nodes.push(C.el('div', { class: 'dx-pop-item', onclick: function () { applyView(v); } }, [
202
+ C.el('span', { text: '▸' }), C.el('span', { text: v.name, style: 'flex:1' }),
203
+ C.el('button', { class: 'copy-btn', title: 'Delete', onclick: function (e) { e.stopPropagation(); views.splice(i, 1); setViews(views); render(); } }, ['✕'])
204
+ ]));
205
+ });
206
+ nodes.push(C.el('div', { class: 'dx-pop-sep' }));
207
+ nodes.push(C.el('div', { class: 'dx-pop-item', onclick: function () {
208
+ var name = prompt('Save current view as:'); if (!name) return;
209
+ var v = { name: name, filters: state.filters, search: state.search, orderBy: state.orderBy, dir: state.dir, hidden: state.hidden };
210
+ var vs = savedViews(); vs.push(v); setViews(vs); C.toast('View saved', 'success'); render();
211
+ } }, ['+ Save current view']));
212
+ return C.el('div', { class: 'dx-pop' }, nodes);
213
+ }
214
+ function applyView(v) {
215
+ state.filters = JSON.parse(JSON.stringify(v.filters || [])); state.search = v.search || '';
216
+ state.orderBy = v.orderBy || state.pk; state.dir = v.dir || 'asc'; state.hidden = Object.assign({}, v.hidden || {});
217
+ saveHidden(); reload();
218
+ }
219
+
220
+ function exportMenu() {
221
+ return C.el('div', { class: 'dx-pop' }, [
222
+ C.el('div', { class: 'dx-pop-title', text: 'Export current page' }),
223
+ C.el('div', { class: 'dx-pop-item', onclick: function () { exportCSV(); } }, ['⤓ CSV']),
224
+ C.el('div', { class: 'dx-pop-item', onclick: function () { exportJSON(); } }, ['⤓ JSON'])
225
+ ]);
226
+ }
227
+ function download(name, content, mime) {
228
+ var blob = new Blob([content], { type: mime }); var url = URL.createObjectURL(blob);
229
+ var a = C.el('a', { href: url, download: name }); document.body.appendChild(a); a.click(); a.remove(); URL.revokeObjectURL(url);
230
+ }
231
+ function exportJSON() { download(state.resource + '.json', JSON.stringify(state.rows, null, 2), 'application/json'); C.toast('Exported JSON', 'success'); }
232
+ function exportCSV() {
233
+ var cols = visibleCols().map(function (c) { return c.name; });
234
+ var esc = function (v) { if (v === null || v === undefined) return ''; var s = typeof v === 'object' ? JSON.stringify(v) : String(v); return /[",\n]/.test(s) ? '"' + s.replace(/"/g, '""') + '"' : s; };
235
+ var lines = [cols.join(',')].concat(state.rows.map(function (r) { return cols.map(function (c) { return esc(r[c]); }).join(','); }));
236
+ download(state.resource + '.csv', lines.join('\n'), 'text/csv'); C.toast('Exported CSV', 'success');
237
+ }
238
+
239
+ // ---- filter builder ------------------------------------------------------
240
+ function filterPanel() {
241
+ var rows = state.filters.map(function (f, i) { return filterRow(f, i); });
242
+ var add = C.el('button', { class: 'btn btn-ghost btn-sm', onclick: function () { addFilter(); render(); } }, ['+ Add condition']);
243
+ var apply = C.el('button', { class: 'btn btn-primary btn-sm', onclick: function () { reload(); } }, ['Apply']);
244
+ var clear = C.el('button', { class: 'btn btn-ghost btn-sm', onclick: function () { state.filters = []; reload(); } }, ['Clear']);
245
+ return C.el('div', { class: 'dx-filters' }, rows.concat([C.el('div', { class: 'row', style: 'margin-top:4px' }, [add, C.el('span', { class: 'dx-spacer' }), clear, apply])]));
246
+ }
247
+ function filterRow(f, i) {
248
+ var fieldSel = C.el('select', { class: 'select', onchange: function (e) { f.field = e.target.value; } });
249
+ state.columns.forEach(function (c) { var o = C.el('option', { value: c.name, text: c.name }); if (c.name === f.field) o.selected = true; fieldSel.appendChild(o); });
250
+ var opSel = C.el('select', { class: 'select', style: 'max-width:150px', onchange: function (e) { f.op = e.target.value; render(); } });
251
+ OPS.forEach(function (op) { var o = C.el('option', { value: op.v, text: op.label }); if (op.v === f.op) o.selected = true; opSel.appendChild(o); });
252
+ var val = C.el('input', { class: 'input', placeholder: f.op === '=in=' ? 'a,b,c' : 'value', value: f.value || '', oninput: function (e) { f.value = e.target.value; } });
253
+ if (f.op === '=isnull=') val.style.display = 'none';
254
+ var del = C.el('button', { class: 'btn btn-ghost btn-icon btn-sm', onclick: function () { state.filters.splice(i, 1); render(); } }, ['✕']);
255
+ return C.el('div', { class: 'dx-filter-row' }, [fieldSel, opSel, val, del]);
256
+ }
257
+ function addFilter() { state.filters.push({ field: (state.columns[0] || {}).name || '', op: '==', value: '' }); }
258
+
259
+ // ---- bulk bar ------------------------------------------------------------
260
+ function bulkBar() {
261
+ var n = selCount();
262
+ var nodes = [C.el('span', { text: n + ' selected' }), C.el('span', { class: 'dx-spacer', style: 'flex:1' }),
263
+ C.el('button', { class: 'btn btn-ghost btn-sm', onclick: function () { state.selected = {}; render(); } }, ['Clear'])];
264
+ if (!state.readOnly) nodes.push(C.el('button', { class: 'btn btn-danger btn-sm', onclick: bulkDelete }, ['🗑 Delete ' + n]));
265
+ return C.el('div', { class: 'dx-bulkbar' }, nodes);
266
+ }
267
+ async function bulkDelete() {
268
+ var ids = Object.keys(state.selected).filter(function (k) { return state.selected[k]; });
269
+ if (!confirm('Delete ' + ids.length + ' ' + state.resource + ' record(s)? This cannot be undone.')) return;
270
+ var ok = 0, fail = 0;
271
+ for (var i = 0; i < ids.length; i++) {
272
+ try { await C.fetchJSON(api + '/data/' + encodeURIComponent(state.resource) + '/' + encodeURIComponent(ids[i]), { method: 'DELETE' }); ok++; }
273
+ catch (e) { fail++; }
274
+ }
275
+ state.selected = {}; C.toast(ok + ' deleted' + (fail ? ', ' + fail + ' failed' : ''), fail ? 'error' : 'success'); reload();
276
+ }
277
+
278
+ // ---- grid ----------------------------------------------------------------
279
+ function grid() {
280
+ var cols = visibleCols();
281
+ var allSel = state.rows.length && state.rows.every(function (r) { return state.selected[r[state.pk]]; });
282
+ var headChk = C.el('th', { class: 'dx-check' }, [(function () { var i = C.el('input', { type: 'checkbox' }); i.checked = !!allSel; i.addEventListener('change', function () { state.rows.forEach(function (r) { state.selected[r[state.pk]] = i.checked; }); render(); }); return i; })()]);
283
+ var thead = C.el('tr', {}, [headChk].concat(cols.map(function (c) {
284
+ return C.el('th', { class: c.name === state.orderBy ? 'sorted' : '', onclick: function () { sortBy(c.name); } }, [c.name, C.el('span', { class: 'sort', text: c.name === state.orderBy ? (state.dir === 'asc' ? '▲' : '▼') : '↕' })]);
285
+ })));
286
+ if (!state.readOnly) thead.appendChild(C.el('th', { style: 'width:70px' }, ['']));
287
+
288
+ var tbody = C.el('tbody');
289
+ if (!state.rows.length) {
290
+ tbody.appendChild(C.el('tr', {}, [C.el('td', { colspan: String(cols.length + 2), html: '<div class="empty-state"><div class="empty-icon">∅</div><div class="empty-title">No rows</div><div class="empty-desc">Nothing matches the current filter.</div></div>' })]));
291
+ }
292
+ state.rows.forEach(function (row) {
293
+ var pkv = row[state.pk];
294
+ var tr = C.el('tr', { class: state.selected[pkv] ? 'selected' : '' });
295
+ var chk = C.el('td', { class: 'dx-check', onclick: function (e) { e.stopPropagation(); } }, [(function () { var i = C.el('input', { type: 'checkbox' }); i.checked = !!state.selected[pkv]; i.addEventListener('change', function () { state.selected[pkv] = i.checked; tr.classList.toggle('selected', i.checked); if (selCount() === 0 || selCount() === 1) render(); }); return i; })()]);
296
+ tr.appendChild(chk);
297
+ cols.forEach(function (c) {
298
+ var editable = !state.readOnly && !c.isPrimary;
299
+ var td = C.el('td', { class: editable ? 'dx-editable' : '', html: fmtCell(row[c.name], c) });
300
+ td.addEventListener('click', function () { openDetail(row); });
301
+ if (editable) td.addEventListener('dblclick', function (e) { e.stopPropagation(); editCell(td, row, c); });
302
+ tr.appendChild(td);
303
+ });
304
+ if (!state.readOnly) {
305
+ var actions = C.el('div', { class: 'dx-rowactions' }, [
306
+ C.el('button', { class: 'btn btn-ghost btn-icon btn-sm', title: 'Edit', onclick: function (e) { e.stopPropagation(); openForm(row); } }, ['✎']),
307
+ C.el('button', { class: 'btn btn-ghost btn-icon btn-sm', title: 'Delete', onclick: function (e) { e.stopPropagation(); del(row); } }, ['🗑'])
308
+ ]);
309
+ tr.appendChild(C.el('td', { onclick: function (e) { e.stopPropagation(); } }, [actions]));
310
+ }
311
+ tbody.appendChild(tr);
312
+ });
313
+ return C.el('div', { class: 'dx-grid-wrap' }, [C.el('table', { class: 'dx-grid' + (state.density === 'compact' ? ' compact' : '') }, [C.el('thead', {}, [thead]), tbody])]);
314
+ }
315
+
316
+ function footer() {
317
+ var info = state.total != null ? (state.total.toLocaleString() + ' rows') : (state.rows.length + ' shown');
318
+ var prev = C.el('button', { class: 'btn btn-secondary btn-sm', onclick: pagePrev }, ['← Prev']); prev.disabled = state.cursorStack.length === 0;
319
+ var next = C.el('button', { class: 'btn btn-secondary btn-sm', onclick: pageNext }, ['Next →']); next.disabled = !state.nextCursor;
320
+ var sizes = C.el('select', { class: 'select', style: 'width:auto;height:28px', onchange: function (e) { state.limit = parseInt(e.target.value, 10); reload(); } });
321
+ [25, 50, 100, 200].forEach(function (n) { var o = C.el('option', { value: String(n), text: n + ' / page' }); if (n === state.limit) o.selected = true; sizes.appendChild(o); });
322
+ return C.el('div', { class: 'dx-foot', style: 'padding:4px 2px' }, [C.el('span', { text: info }), C.el('span', { class: 'dx-spacer', style: 'flex:1' }), sizes, prev, next]);
323
+ }
324
+
325
+ // ---- inline cell edit ----------------------------------------------------
326
+ function editCell(td, row, col) {
327
+ var current = row[col.name];
328
+ td.classList.add('editing'); td.innerHTML = '';
329
+ var inp = C.el('input', { class: 'dx-cell-edit', value: current != null && typeof current !== 'object' ? String(current) : (current != null ? JSON.stringify(current) : '') });
330
+ if (isNum(col.type)) inp.type = 'number';
331
+ td.appendChild(inp); inp.focus(); inp.select();
332
+ var done = false;
333
+ function commit() {
334
+ if (done) return; done = true;
335
+ var raw = inp.value, val;
336
+ try {
337
+ if (raw === '') val = null;
338
+ else if (isNum(col.type)) val = Number(raw);
339
+ else if (isBool(col.type)) val = raw === 'true' || raw === '1';
340
+ else if (isJson(col.type)) val = JSON.parse(raw);
341
+ else val = raw;
342
+ } catch (e) { C.toast('Invalid value: ' + e.message, 'error'); render(); return; }
343
+ if (val === current) { render(); return; }
344
+ var patch = {}; patch[col.name] = val;
345
+ C.fetchJSON(api + '/data/' + encodeURIComponent(state.resource) + '/' + encodeURIComponent(row[state.pk]), { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(patch) })
346
+ .then(function () { C.toast('Updated ' + col.name, 'success'); reload(); })
347
+ .catch(function (e) { C.toast(e.message, 'error'); render(); });
348
+ }
349
+ inp.addEventListener('keydown', function (e) { if (e.key === 'Enter') commit(); else if (e.key === 'Escape') { done = true; render(); } });
350
+ inp.addEventListener('blur', commit);
351
+ }
352
+
353
+ // ---- actions -------------------------------------------------------------
354
+ async function reload() { try { state.cursorStack = []; await loadData(); render(); } catch (e) { C.toast(e.message, 'error'); } }
355
+ function sortBy(col) { if (state.orderBy === col) state.dir = state.dir === 'asc' ? 'desc' : 'asc'; else { state.orderBy = col; state.dir = 'asc'; } reload(); }
356
+ async function pageNext() { if (!state.nextCursor) return; state.cursorStack.push(state.nextCursor); try { await loadData(state.nextCursor); render(); } catch (e) { C.toast(e.message, 'error'); } }
357
+ async function pagePrev() { state.cursorStack.pop(); var c = state.cursorStack[state.cursorStack.length - 1]; try { await loadData(c); render(); } catch (e) { C.toast(e.message, 'error'); } }
358
+ function toggleAuto(on) { state.autoRefresh = on; if (state.timer) { clearInterval(state.timer); state.timer = null; } if (on) state.timer = setInterval(function () { loadData(state.cursorStack[state.cursorStack.length - 1]).then(render).catch(function () {}); }, 5000); }
359
+
360
+ // ---- drawers -------------------------------------------------------------
361
+ function drawer(title, bodyNode, footerNodes) {
362
+ var existing = document.getElementById('dx-overlay'); if (existing) existing.remove();
363
+ var overlay = C.el('div', { class: 'overlay open', id: 'dx-overlay' });
364
+ var d = C.el('div', { class: 'drawer' }, [
365
+ C.el('div', { class: 'drawer-header' }, [C.el('div', { class: 'drawer-title', text: title }), C.el('button', { class: 'btn btn-ghost btn-icon', onclick: close }, ['✕'])]),
366
+ C.el('div', { class: 'drawer-body' }, [bodyNode]),
367
+ footerNodes ? C.el('div', { class: 'drawer-footer' }, footerNodes) : null
368
+ ]);
369
+ overlay.appendChild(d); overlay.addEventListener('click', function (e) { if (e.target === overlay) close(); });
370
+ document.addEventListener('keydown', escClose);
371
+ document.body.appendChild(overlay);
372
+ function close() { document.removeEventListener('keydown', escClose); overlay.remove(); }
373
+ function escClose(e) { if (e.key === 'Escape') close(); }
374
+ return { close: close };
375
+ }
376
+
377
+ function openDetail(row) {
378
+ var body = C.el('div', {}, [C.el('div', { class: 'jsonview', html: C.highlightJSON(row) })]);
379
+ var foot = [C.el('button', { class: 'btn btn-secondary', 'data-copy': JSON.stringify(row, null, 2) }, ['Copy JSON'])];
380
+ if (!state.readOnly) {
381
+ foot.push(C.el('button', { class: 'btn btn-secondary', onclick: function () { dlg.close(); openForm(row); } }, ['Edit']));
382
+ foot.push(C.el('button', { class: 'btn btn-danger', onclick: function () { dlg.close(); del(row); } }, ['Delete']));
383
+ }
384
+ var dlg = drawer(state.resource + ' · ' + row[state.pk], body, foot);
385
+ }
386
+
387
+ function fieldInput(col, value) {
388
+ if (isBool(col.type)) { var w = makeSwitch(!!value, function () {}); w._get = function () { return w.querySelector('input').checked; }; return w; }
389
+ if (isJson(col.type)) { var ta = C.el('textarea', { class: 'input input-mono', rows: '5' }); ta.value = value != null ? JSON.stringify(value, null, 2) : ''; ta._get = function () { var v = ta.value.trim(); return v ? JSON.parse(v) : null; }; return ta; }
390
+ var inp = C.el('input', { class: 'input' + (col.isPrimary ? ' input-mono' : ''), value: value != null ? String(value) : '' });
391
+ if (isNum(col.type)) inp.type = 'number'; else if (isDate(col.type)) inp.placeholder = 'ISO 8601 or blank';
392
+ inp._get = function () { var v = inp.value; if (v === '') return undefined; return isNum(col.type) ? Number(v) : v; };
393
+ return inp;
394
+ }
395
+
396
+ function openForm(row) {
397
+ var editing = !!row, fields = {}, body = C.el('div', {});
398
+ state.columns.forEach(function (col) {
399
+ if (editing && col.isPrimary) {
400
+ body.appendChild(C.el('div', { style: 'margin-bottom:14px' }, [C.el('label', { class: 'form-label', text: col.name + ' (primary key)' }), C.el('div', { class: 'mono muted', text: String(row[col.name]) })]));
401
+ return;
402
+ }
403
+ var input = fieldInput(col, editing ? row[col.name] : undefined); fields[col.name] = input;
404
+ body.appendChild(C.el('div', { style: 'margin-bottom:14px' }, [
405
+ C.el('label', { class: 'form-label' }, [col.name, C.el('span', { class: 'muted', style: 'font-weight:400', text: ' ' + col.type + (col.nullable ? ' · nullable' : '') })]), input
406
+ ]));
407
+ });
408
+ var save = C.el('button', { class: 'btn btn-primary' }, [editing ? 'Save changes' : 'Create']);
409
+ save.addEventListener('click', async function () {
410
+ var payload = {};
411
+ try { Object.keys(fields).forEach(function (n) { var v = fields[n]._get(); if (v !== undefined) payload[n] = v; }); }
412
+ catch (e) { C.toast('Invalid JSON: ' + e.message, 'error'); return; }
413
+ save.disabled = true;
414
+ try {
415
+ if (editing) { await C.fetchJSON(api + '/data/' + encodeURIComponent(state.resource) + '/' + encodeURIComponent(row[state.pk]), { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); C.toast('Record updated', 'success'); }
416
+ else { await C.fetchJSON(api + '/data/' + encodeURIComponent(state.resource), { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); C.toast('Record created', 'success'); }
417
+ dlg.close(); reload();
418
+ } catch (e) { C.toast(e.message, 'error'); save.disabled = false; }
419
+ });
420
+ var dlg = drawer((editing ? 'Edit ' : 'New ') + state.resource, body, [C.el('button', { class: 'btn btn-ghost', onclick: function () { dlg.close(); } }, ['Cancel']), save]);
421
+ }
422
+
423
+ async function del(row) {
424
+ if (!confirm('Delete this ' + state.resource + ' record?\\n\\n' + row[state.pk])) return;
425
+ try { await C.fetchJSON(api + '/data/' + encodeURIComponent(state.resource) + '/' + encodeURIComponent(row[state.pk]), { method: 'DELETE' }); C.toast('Record deleted', 'success'); reload(); }
426
+ catch (e) { C.toast(e.message, 'error'); }
427
+ }
428
+
429
+ // ---- boot ----------------------------------------------------------------
430
+ render();
431
+ loadSchemas().then(function (names) {
432
+ state.allResources = names;
433
+ var pre = qs() || names[0]; render();
434
+ if (pre && names.indexOf(pre) >= 0) selectResource(pre);
435
+ }).catch(function (e) {
436
+ root.innerHTML = '<div class="card"><div class="card-body"><div class="alert alert-error">Failed to load resources: ' + C.escapeHtml(e.message) + '</div></div></div>';
437
+ });
438
+ });
439
+ })();
440
+ `;
441
+ //# sourceMappingURL=data-explorer-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-explorer-app.js","sourceRoot":"","sources":["../../../../src/ui/html/client/data-explorer-app.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,2EAA2E;AAC3E,gFAAgF;AAChF,4EAA4E;AAC5E,gFAAgF;AAChF,yCAAyC;AACzC,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAib3C,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const htmxVersion = "2.0.4";
2
+ export declare const htmxScript = "var htmx=function(){\"use strict\";const Q={onLoad:null,process:null,on:null,off:null,trigger:null,ajax:null,find:null,findAll:null,closest:null,values:function(e,t){const n=cn(e,t||\"post\");return n.values},remove:null,addClass:null,removeClass:null,toggleClass:null,takeClass:null,swap:null,defineExtension:null,removeExtension:null,logAll:null,logNone:null,logger:null,config:{historyEnabled:true,historyCacheSize:10,refreshOnHistoryMiss:false,defaultSwapStyle:\"innerHTML\",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:true,indicatorClass:\"htmx-indicator\",requestClass:\"htmx-request\",addedClass:\"htmx-added\",settlingClass:\"htmx-settling\",swappingClass:\"htmx-swapping\",allowEval:true,allowScriptTags:true,inlineScriptNonce:\"\",inlineStyleNonce:\"\",attributesToSettle:[\"class\",\"style\",\"width\",\"height\"],withCredentials:false,timeout:0,wsReconnectDelay:\"full-jitter\",wsBinaryType:\"blob\",disableSelector:\"[hx-disable], [data-hx-disable]\",scrollBehavior:\"instant\",defaultFocusScroll:false,getCacheBusterParam:false,globalViewTransitions:false,methodsThatUseUrlParams:[\"get\",\"delete\"],selfRequestsOnly:true,ignoreTitle:false,scrollIntoViewOnBoost:true,triggerSpecsCache:null,disableInheritance:false,responseHandling:[{code:\"204\",swap:false},{code:\"[23]..\",swap:true},{code:\"[45]..\",swap:false,error:true}],allowNestedOobSwaps:true},parseInterval:null,_:null,version:\"2.0.4\"};Q.onLoad=j;Q.process=kt;Q.on=ye;Q.off=be;Q.trigger=he;Q.ajax=Rn;Q.find=u;Q.findAll=x;Q.closest=g;Q.remove=z;Q.addClass=K;Q.removeClass=G;Q.toggleClass=W;Q.takeClass=Z;Q.swap=$e;Q.defineExtension=Fn;Q.removeExtension=Bn;Q.logAll=V;Q.logNone=_;Q.parseInterval=d;Q._=e;const n={addTriggerHandler:St,bodyContains:le,canAccessLocalStorage:B,findThisElement:Se,filterValues:hn,swap:$e,hasAttribute:s,getAttributeValue:te,getClosestAttributeValue:re,getClosestMatch:o,getExpressionVars:En,getHeaders:fn,getInputValues:cn,getInternalData:ie,getSwapSpecification:gn,getTriggerSpecs:st,getTarget:Ee,makeFragment:P,mergeObjects:ce,makeSettleInfo:xn,oobSwap:He,querySelectorExt:ae,settleImmediately:Kt,shouldCancel:ht,triggerEvent:he,triggerErrorEvent:fe,withExtensions:Ft};const r=[\"get\",\"post\",\"put\",\"delete\",\"patch\"];const H=r.map(function(e){return\"[hx-\"+e+\"], [data-hx-\"+e+\"]\"}).join(\", \");function d(e){if(e==undefined){return undefined}let t=NaN;if(e.slice(-2)==\"ms\"){t=parseFloat(e.slice(0,-2))}else if(e.slice(-1)==\"s\"){t=parseFloat(e.slice(0,-1))*1e3}else if(e.slice(-1)==\"m\"){t=parseFloat(e.slice(0,-1))*1e3*60}else{t=parseFloat(e)}return isNaN(t)?undefined:t}function ee(e,t){return e instanceof Element&&e.getAttribute(t)}function s(e,t){return!!e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute(\"data-\"+t))}function te(e,t){return ee(e,t)||ee(e,\"data-\"+t)}function c(e){const t=e.parentElement;if(!t&&e.parentNode instanceof ShadowRoot)return e.parentNode;return t}function ne(){return document}function m(e,t){return e.getRootNode?e.getRootNode({composed:t}):ne()}function o(e,t){while(e&&!t(e)){e=c(e)}return e||null}function i(e,t,n){const r=te(t,n);const o=te(t,\"hx-disinherit\");var i=te(t,\"hx-inherit\");if(e!==t){if(Q.config.disableInheritance){if(i&&(i===\"*\"||i.split(\" \").indexOf(n)>=0)){return r}else{return null}}if(o&&(o===\"*\"||o.split(\" \").indexOf(n)>=0)){return\"unset\"}}return r}function re(t,n){let r=null;o(t,function(e){return!!(r=i(t,ue(e),n))});if(r!==\"unset\"){return r}}function h(e,t){const n=e instanceof Element&&(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector);return!!n&&n.call(e,t)}function T(e){const t=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;const n=t.exec(e);if(n){return n[1].toLowerCase()}else{return\"\"}}function q(e){const t=new DOMParser;return t.parseFromString(e,\"text/html\")}function L(e,t){while(t.childNodes.length>0){e.append(t.childNodes[0])}}function A(e){const t=ne().createElement(\"script\");se(e.attributes,function(e){t.setAttribute(e.name,e.value)});t.textContent=e.textContent;t.async=false;if(Q.config.inlineScriptNonce){t.nonce=Q.config.inlineScriptNonce}return t}function N(e){return e.matches(\"script\")&&(e.type===\"text/javascript\"||e.type===\"module\"||e.type===\"\")}function I(e){Array.from(e.querySelectorAll(\"script\")).forEach(e=>{if(N(e)){const t=A(e);const n=e.parentNode;try{n.insertBefore(t,e)}catch(e){O(e)}finally{e.remove()}}})}function P(e){const t=e.replace(/<head(\\s[^>]*)?>[\\s\\S]*?<\\/head>/i,\"\");const n=T(t);let r;if(n===\"html\"){r=new DocumentFragment;const i=q(e);L(r,i.body);r.title=i.title}else if(n===\"body\"){r=new DocumentFragment;const i=q(t);L(r,i.body);r.title=i.title}else{const i=q('<body><template class=\"internal-htmx-wrapper\">'+t+\"</template></body>\");r=i.querySelector(\"template\").content;r.title=i.title;var o=r.querySelector(\"title\");if(o&&o.parentNode===r){o.remove();r.title=o.innerText}}if(r){if(Q.config.allowScriptTags){I(r)}else{r.querySelectorAll(\"script\").forEach(e=>e.remove())}}return r}function oe(e){if(e){e()}}function t(e,t){return Object.prototype.toString.call(e)===\"[object \"+t+\"]\"}function k(e){return typeof e===\"function\"}function D(e){return t(e,\"Object\")}function ie(e){const t=\"htmx-internal-data\";let n=e[t];if(!n){n=e[t]={}}return n}function M(t){const n=[];if(t){for(let e=0;e<t.length;e++){n.push(t[e])}}return n}function se(t,n){if(t){for(let e=0;e<t.length;e++){n(t[e])}}}function X(e){const t=e.getBoundingClientRect();const n=t.top;const r=t.bottom;return n<window.innerHeight&&r>=0}function le(e){return e.getRootNode({composed:true})===document}function F(e){return e.trim().split(/\\s+/)}function ce(e,t){for(const n in t){if(t.hasOwnProperty(n)){e[n]=t[n]}}return e}function S(e){try{return JSON.parse(e)}catch(e){O(e);return null}}function B(){const e=\"htmx:localStorageTest\";try{localStorage.setItem(e,e);localStorage.removeItem(e);return true}catch(e){return false}}function U(t){try{const e=new URL(t);if(e){t=e.pathname+e.search}if(!/^\\/$/.test(t)){t=t.replace(/\\/+$/,\"\")}return t}catch(e){return t}}function e(e){return vn(ne().body,function(){return eval(e)})}function j(t){const e=Q.on(\"htmx:load\",function(e){t(e.detail.elt)});return e}function V(){Q.logger=function(e,t,n){if(console){console.log(t,e,n)}}}function _(){Q.logger=null}function u(e,t){if(typeof e!==\"string\"){return e.querySelector(t)}else{return u(ne(),e)}}function x(e,t){if(typeof e!==\"string\"){return e.querySelectorAll(t)}else{return x(ne(),e)}}function E(){return window}function z(e,t){e=y(e);if(t){E().setTimeout(function(){z(e);e=null},t)}else{c(e).removeChild(e)}}function ue(e){return e instanceof Element?e:null}function $(e){return e instanceof HTMLElement?e:null}function J(e){return typeof e===\"string\"?e:null}function f(e){return e instanceof Element||e instanceof Document||e instanceof DocumentFragment?e:null}function K(e,t,n){e=ue(y(e));if(!e){return}if(n){E().setTimeout(function(){K(e,t);e=null},n)}else{e.classList&&e.classList.add(t)}}function G(e,t,n){let r=ue(y(e));if(!r){return}if(n){E().setTimeout(function(){G(r,t);r=null},n)}else{if(r.classList){r.classList.remove(t);if(r.classList.length===0){r.removeAttribute(\"class\")}}}}function W(e,t){e=y(e);e.classList.toggle(t)}function Z(e,t){e=y(e);se(e.parentElement.children,function(e){G(e,t)});K(ue(e),t)}function g(e,t){e=ue(y(e));if(e&&e.closest){return e.closest(t)}else{do{if(e==null||h(e,t)){return e}}while(e=e&&ue(c(e)));return null}}function l(e,t){return e.substring(0,t.length)===t}function Y(e,t){return e.substring(e.length-t.length)===t}function ge(e){const t=e.trim();if(l(t,\"<\")&&Y(t,\"/>\")){return t.substring(1,t.length-2)}else{return t}}function p(t,r,n){if(r.indexOf(\"global \")===0){return p(t,r.slice(7),true)}t=y(t);const o=[];{let t=0;let n=0;for(let e=0;e<r.length;e++){const l=r[e];if(l===\",\"&&t===0){o.push(r.substring(n,e));n=e+1;continue}if(l===\"<\"){t++}else if(l===\"/\"&&e<r.length-1&&r[e+1]===\">\"){t--}}if(n<r.length){o.push(r.substring(n))}}const i=[];const s=[];while(o.length>0){const r=ge(o.shift());let e;if(r.indexOf(\"closest \")===0){e=g(ue(t),ge(r.substr(8)))}else if(r.indexOf(\"find \")===0){e=u(f(t),ge(r.substr(5)))}else if(r===\"next\"||r===\"nextElementSibling\"){e=ue(t).nextElementSibling}else if(r.indexOf(\"next \")===0){e=pe(t,ge(r.substr(5)),!!n)}else if(r===\"previous\"||r===\"previousElementSibling\"){e=ue(t).previousElementSibling}else if(r.indexOf(\"previous \")===0){e=me(t,ge(r.substr(9)),!!n)}else if(r===\"document\"){e=document}else if(r===\"window\"){e=window}else if(r===\"body\"){e=document.body}else if(r===\"root\"){e=m(t,!!n)}else if(r===\"host\"){e=t.getRootNode().host}else{s.push(r)}if(e){i.push(e)}}if(s.length>0){const e=s.join(\",\");const c=f(m(t,!!n));i.push(...M(c.querySelectorAll(e)))}return i}var pe=function(t,e,n){const r=f(m(t,n)).querySelectorAll(e);for(let e=0;e<r.length;e++){const o=r[e];if(o.compareDocumentPosition(t)===Node.DOCUMENT_POSITION_PRECEDING){return o}}};var me=function(t,e,n){const r=f(m(t,n)).querySelectorAll(e);for(let e=r.length-1;e>=0;e--){const o=r[e];if(o.compareDocumentPosition(t)===Node.DOCUMENT_POSITION_FOLLOWING){return o}}};function ae(e,t){if(typeof e!==\"string\"){return p(e,t)[0]}else{return p(ne().body,e)[0]}}function y(e,t){if(typeof e===\"string\"){return u(f(t)||document,e)}else{return e}}function xe(e,t,n,r){if(k(t)){return{target:ne().body,event:J(e),listener:t,options:n}}else{return{target:y(e),event:J(t),listener:n,options:r}}}function ye(t,n,r,o){Vn(function(){const e=xe(t,n,r,o);e.target.addEventListener(e.event,e.listener,e.options)});const e=k(n);return e?n:r}function be(t,n,r){Vn(function(){const e=xe(t,n,r);e.target.removeEventListener(e.event,e.listener)});return k(n)?n:r}const ve=ne().createElement(\"output\");function we(e,t){const n=re(e,t);if(n){if(n===\"this\"){return[Se(e,t)]}else{const r=p(e,n);if(r.length===0){O('The selector \"'+n+'\" on '+t+\" returned no matches!\");return[ve]}else{return r}}}}function Se(e,t){return ue(o(e,function(e){return te(ue(e),t)!=null}))}function Ee(e){const t=re(e,\"hx-target\");if(t){if(t===\"this\"){return Se(e,\"hx-target\")}else{return ae(e,t)}}else{const n=ie(e);if(n.boosted){return ne().body}else{return e}}}function Ce(t){const n=Q.config.attributesToSettle;for(let e=0;e<n.length;e++){if(t===n[e]){return true}}return false}function Oe(t,n){se(t.attributes,function(e){if(!n.hasAttribute(e.name)&&Ce(e.name)){t.removeAttribute(e.name)}});se(n.attributes,function(e){if(Ce(e.name)){t.setAttribute(e.name,e.value)}})}function Re(t,e){const n=Un(e);for(let e=0;e<n.length;e++){const r=n[e];try{if(r.isInlineSwap(t)){return true}}catch(e){O(e)}}return t===\"outerHTML\"}function He(e,o,i,t){t=t||ne();let n=\"#\"+ee(o,\"id\");let s=\"outerHTML\";if(e===\"true\"){}else if(e.indexOf(\":\")>0){s=e.substring(0,e.indexOf(\":\"));n=e.substring(e.indexOf(\":\")+1)}else{s=e}o.removeAttribute(\"hx-swap-oob\");o.removeAttribute(\"data-hx-swap-oob\");const r=p(t,n,false);if(r){se(r,function(e){let t;const n=o.cloneNode(true);t=ne().createDocumentFragment();t.appendChild(n);if(!Re(s,e)){t=f(n)}const r={shouldSwap:true,target:e,fragment:t};if(!he(e,\"htmx:oobBeforeSwap\",r))return;e=r.target;if(r.shouldSwap){qe(t);_e(s,e,e,t,i);Te()}se(i.elts,function(e){he(e,\"htmx:oobAfterSwap\",r)})});o.parentNode.removeChild(o)}else{o.parentNode.removeChild(o);fe(ne().body,\"htmx:oobErrorNoTarget\",{content:o})}return e}function Te(){const e=u(\"#--htmx-preserve-pantry--\");if(e){for(const t of[...e.children]){const n=u(\"#\"+t.id);n.parentNode.moveBefore(t,n);n.remove()}e.remove()}}function qe(e){se(x(e,\"[hx-preserve], [data-hx-preserve]\"),function(e){const t=te(e,\"id\");const n=ne().getElementById(t);if(n!=null){if(e.moveBefore){let e=u(\"#--htmx-preserve-pantry--\");if(e==null){ne().body.insertAdjacentHTML(\"afterend\",\"<div id='--htmx-preserve-pantry--'></div>\");e=u(\"#--htmx-preserve-pantry--\")}e.moveBefore(n,null)}else{e.parentNode.replaceChild(n,e)}}})}function Le(l,e,c){se(e.querySelectorAll(\"[id]\"),function(t){const n=ee(t,\"id\");if(n&&n.length>0){const r=n.replace(\"'\",\"\\\\'\");const o=t.tagName.replace(\":\",\"\\\\:\");const e=f(l);const i=e&&e.querySelector(o+\"[id='\"+r+\"']\");if(i&&i!==e){const s=t.cloneNode();Oe(t,i);c.tasks.push(function(){Oe(t,s)})}}})}function Ae(e){return function(){G(e,Q.config.addedClass);kt(ue(e));Ne(f(e));he(e,\"htmx:load\")}}function Ne(e){const t=\"[autofocus]\";const n=$(h(e,t)?e:e.querySelector(t));if(n!=null){n.focus()}}function a(e,t,n,r){Le(e,n,r);while(n.childNodes.length>0){const o=n.firstChild;K(ue(o),Q.config.addedClass);e.insertBefore(o,t);if(o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE){r.tasks.push(Ae(o))}}}function Ie(e,t){let n=0;while(n<e.length){t=(t<<5)-t+e.charCodeAt(n++)|0}return t}function Pe(t){let n=0;if(t.attributes){for(let e=0;e<t.attributes.length;e++){const r=t.attributes[e];if(r.value){n=Ie(r.name,n);n=Ie(r.value,n)}}}return n}function ke(t){const n=ie(t);if(n.onHandlers){for(let e=0;e<n.onHandlers.length;e++){const r=n.onHandlers[e];be(t,r.event,r.listener)}delete n.onHandlers}}function De(e){const t=ie(e);if(t.timeout){clearTimeout(t.timeout)}if(t.listenerInfos){se(t.listenerInfos,function(e){if(e.on){be(e.on,e.trigger,e.listener)}})}ke(e);se(Object.keys(t),function(e){if(e!==\"firstInitCompleted\")delete t[e]})}function b(e){he(e,\"htmx:beforeCleanupElement\");De(e);if(e.children){se(e.children,function(e){b(e)})}}function Me(t,e,n){if(t instanceof Element&&t.tagName===\"BODY\"){return Ve(t,e,n)}let r;const o=t.previousSibling;const i=c(t);if(!i){return}a(i,t,e,n);if(o==null){r=i.firstChild}else{r=o.nextSibling}n.elts=n.elts.filter(function(e){return e!==t});while(r&&r!==t){if(r instanceof Element){n.elts.push(r)}r=r.nextSibling}b(t);if(t instanceof Element){t.remove()}else{t.parentNode.removeChild(t)}}function Xe(e,t,n){return a(e,e.firstChild,t,n)}function Fe(e,t,n){return a(c(e),e,t,n)}function Be(e,t,n){return a(e,null,t,n)}function Ue(e,t,n){return a(c(e),e.nextSibling,t,n)}function je(e){b(e);const t=c(e);if(t){return t.removeChild(e)}}function Ve(e,t,n){const r=e.firstChild;a(e,r,t,n);if(r){while(r.nextSibling){b(r.nextSibling);e.removeChild(r.nextSibling)}b(r);e.removeChild(r)}}function _e(t,e,n,r,o){switch(t){case\"none\":return;case\"outerHTML\":Me(n,r,o);return;case\"afterbegin\":Xe(n,r,o);return;case\"beforebegin\":Fe(n,r,o);return;case\"beforeend\":Be(n,r,o);return;case\"afterend\":Ue(n,r,o);return;case\"delete\":je(n);return;default:var i=Un(e);for(let e=0;e<i.length;e++){const s=i[e];try{const l=s.handleSwap(t,n,r,o);if(l){if(Array.isArray(l)){for(let e=0;e<l.length;e++){const c=l[e];if(c.nodeType!==Node.TEXT_NODE&&c.nodeType!==Node.COMMENT_NODE){o.tasks.push(Ae(c))}}}return}}catch(e){O(e)}}if(t===\"innerHTML\"){Ve(n,r,o)}else{_e(Q.config.defaultSwapStyle,e,n,r,o)}}}function ze(e,n,r){var t=x(e,\"[hx-swap-oob], [data-hx-swap-oob]\");se(t,function(e){if(Q.config.allowNestedOobSwaps||e.parentElement===null){const t=te(e,\"hx-swap-oob\");if(t!=null){He(t,e,n,r)}}else{e.removeAttribute(\"hx-swap-oob\");e.removeAttribute(\"data-hx-swap-oob\")}});return t.length>0}function $e(e,t,r,o){if(!o){o={}}e=y(e);const i=o.contextElement?m(o.contextElement,false):ne();const n=document.activeElement;let s={};try{s={elt:n,start:n?n.selectionStart:null,end:n?n.selectionEnd:null}}catch(e){}const l=xn(e);if(r.swapStyle===\"textContent\"){e.textContent=t}else{let n=P(t);l.title=n.title;if(o.selectOOB){const u=o.selectOOB.split(\",\");for(let t=0;t<u.length;t++){const a=u[t].split(\":\",2);let e=a[0].trim();if(e.indexOf(\"#\")===0){e=e.substring(1)}const f=a[1]||\"true\";const h=n.querySelector(\"#\"+e);if(h){He(f,h,l,i)}}}ze(n,l,i);se(x(n,\"template\"),function(e){if(e.content&&ze(e.content,l,i)){e.remove()}});if(o.select){const d=ne().createDocumentFragment();se(n.querySelectorAll(o.select),function(e){d.appendChild(e)});n=d}qe(n);_e(r.swapStyle,o.contextElement,e,n,l);Te()}if(s.elt&&!le(s.elt)&&ee(s.elt,\"id\")){const g=document.getElementById(ee(s.elt,\"id\"));const p={preventScroll:r.focusScroll!==undefined?!r.focusScroll:!Q.config.defaultFocusScroll};if(g){if(s.start&&g.setSelectionRange){try{g.setSelectionRange(s.start,s.end)}catch(e){}}g.focus(p)}}e.classList.remove(Q.config.swappingClass);se(l.elts,function(e){if(e.classList){e.classList.add(Q.config.settlingClass)}he(e,\"htmx:afterSwap\",o.eventInfo)});if(o.afterSwapCallback){o.afterSwapCallback()}if(!r.ignoreTitle){kn(l.title)}const c=function(){se(l.tasks,function(e){e.call()});se(l.elts,function(e){if(e.classList){e.classList.remove(Q.config.settlingClass)}he(e,\"htmx:afterSettle\",o.eventInfo)});if(o.anchor){const e=ue(y(\"#\"+o.anchor));if(e){e.scrollIntoView({block:\"start\",behavior:\"auto\"})}}yn(l.elts,r);if(o.afterSettleCallback){o.afterSettleCallback()}};if(r.settleDelay>0){E().setTimeout(c,r.settleDelay)}else{c()}}function Je(e,t,n){const r=e.getResponseHeader(t);if(r.indexOf(\"{\")===0){const o=S(r);for(const i in o){if(o.hasOwnProperty(i)){let e=o[i];if(D(e)){n=e.target!==undefined?e.target:n}else{e={value:e}}he(n,i,e)}}}else{const s=r.split(\",\");for(let e=0;e<s.length;e++){he(n,s[e].trim(),[])}}}const Ke=/\\s/;const v=/[\\s,]/;const Ge=/[_$a-zA-Z]/;const We=/[_$a-zA-Z0-9]/;const Ze=['\"',\"'\",\"/\"];const w=/[^\\s]/;const Ye=/[{(]/;const Qe=/[})]/;function et(e){const t=[];let n=0;while(n<e.length){if(Ge.exec(e.charAt(n))){var r=n;while(We.exec(e.charAt(n+1))){n++}t.push(e.substring(r,n+1))}else if(Ze.indexOf(e.charAt(n))!==-1){const o=e.charAt(n);var r=n;n++;while(n<e.length&&e.charAt(n)!==o){if(e.charAt(n)===\"\\\\\"){n++}n++}t.push(e.substring(r,n+1))}else{const i=e.charAt(n);t.push(i)}n++}return t}function tt(e,t,n){return Ge.exec(e.charAt(0))&&e!==\"true\"&&e!==\"false\"&&e!==\"this\"&&e!==n&&t!==\".\"}function nt(r,o,i){if(o[0]===\"[\"){o.shift();let e=1;let t=\" return (function(\"+i+\"){ return (\";let n=null;while(o.length>0){const s=o[0];if(s===\"]\"){e--;if(e===0){if(n===null){t=t+\"true\"}o.shift();t+=\")})\";try{const l=vn(r,function(){return Function(t)()},function(){return true});l.source=t;return l}catch(e){fe(ne().body,\"htmx:syntax:error\",{error:e,source:t});return null}}}else if(s===\"[\"){e++}if(tt(s,n,i)){t+=\"((\"+i+\".\"+s+\") ? (\"+i+\".\"+s+\") : (window.\"+s+\"))\"}else{t=t+s}n=o.shift()}}}function C(e,t){let n=\"\";while(e.length>0&&!t.test(e[0])){n+=e.shift()}return n}function rt(e){let t;if(e.length>0&&Ye.test(e[0])){e.shift();t=C(e,Qe).trim();e.shift()}else{t=C(e,v)}return t}const ot=\"input, textarea, select\";function it(e,t,n){const r=[];const o=et(t);do{C(o,w);const l=o.length;const c=C(o,/[,\\[\\s]/);if(c!==\"\"){if(c===\"every\"){const u={trigger:\"every\"};C(o,w);u.pollInterval=d(C(o,/[,\\[\\s]/));C(o,w);var i=nt(e,o,\"event\");if(i){u.eventFilter=i}r.push(u)}else{const a={trigger:c};var i=nt(e,o,\"event\");if(i){a.eventFilter=i}C(o,w);while(o.length>0&&o[0]!==\",\"){const f=o.shift();if(f===\"changed\"){a.changed=true}else if(f===\"once\"){a.once=true}else if(f===\"consume\"){a.consume=true}else if(f===\"delay\"&&o[0]===\":\"){o.shift();a.delay=d(C(o,v))}else if(f===\"from\"&&o[0]===\":\"){o.shift();if(Ye.test(o[0])){var s=rt(o)}else{var s=C(o,v);if(s===\"closest\"||s===\"find\"||s===\"next\"||s===\"previous\"){o.shift();const h=rt(o);if(h.length>0){s+=\" \"+h}}}a.from=s}else if(f===\"target\"&&o[0]===\":\"){o.shift();a.target=rt(o)}else if(f===\"throttle\"&&o[0]===\":\"){o.shift();a.throttle=d(C(o,v))}else if(f===\"queue\"&&o[0]===\":\"){o.shift();a.queue=C(o,v)}else if(f===\"root\"&&o[0]===\":\"){o.shift();a[f]=rt(o)}else if(f===\"threshold\"&&o[0]===\":\"){o.shift();a[f]=C(o,v)}else{fe(e,\"htmx:syntax:error\",{token:o.shift()})}C(o,w)}r.push(a)}}if(o.length===l){fe(e,\"htmx:syntax:error\",{token:o.shift()})}C(o,w)}while(o[0]===\",\"&&o.shift());if(n){n[t]=r}return r}function st(e){const t=te(e,\"hx-trigger\");let n=[];if(t){const r=Q.config.triggerSpecsCache;n=r&&r[t]||it(e,t,r)}if(n.length>0){return n}else if(h(e,\"form\")){return[{trigger:\"submit\"}]}else if(h(e,'input[type=\"button\"], input[type=\"submit\"]')){return[{trigger:\"click\"}]}else if(h(e,ot)){return[{trigger:\"change\"}]}else{return[{trigger:\"click\"}]}}function lt(e){ie(e).cancelled=true}function ct(e,t,n){const r=ie(e);r.timeout=E().setTimeout(function(){if(le(e)&&r.cancelled!==true){if(!gt(n,e,Mt(\"hx:poll:trigger\",{triggerSpec:n,target:e}))){t(e)}ct(e,t,n)}},n.pollInterval)}function ut(e){return location.hostname===e.hostname&&ee(e,\"href\")&&ee(e,\"href\").indexOf(\"#\")!==0}function at(e){return g(e,Q.config.disableSelector)}function ft(t,n,e){if(t instanceof HTMLAnchorElement&&ut(t)&&(t.target===\"\"||t.target===\"_self\")||t.tagName===\"FORM\"&&String(ee(t,\"method\")).toLowerCase()!==\"dialog\"){n.boosted=true;let r,o;if(t.tagName===\"A\"){r=\"get\";o=ee(t,\"href\")}else{const i=ee(t,\"method\");r=i?i.toLowerCase():\"get\";o=ee(t,\"action\");if(o==null||o===\"\"){o=ne().location.href}if(r===\"get\"&&o.includes(\"?\")){o=o.replace(/\\?[^#]+/,\"\")}}e.forEach(function(e){pt(t,function(e,t){const n=ue(e);if(at(n)){b(n);return}de(r,o,n,t)},n,e,true)})}}function ht(e,t){const n=ue(t);if(!n){return false}if(e.type===\"submit\"||e.type===\"click\"){if(n.tagName===\"FORM\"){return true}if(h(n,'input[type=\"submit\"], button')&&(h(n,\"[form]\")||g(n,\"form\")!==null)){return true}if(n instanceof HTMLAnchorElement&&n.href&&(n.getAttribute(\"href\")===\"#\"||n.getAttribute(\"href\").indexOf(\"#\")!==0)){return true}}return false}function dt(e,t){return ie(e).boosted&&e instanceof HTMLAnchorElement&&t.type===\"click\"&&(t.ctrlKey||t.metaKey)}function gt(e,t,n){const r=e.eventFilter;if(r){try{return r.call(t,n)!==true}catch(e){const o=r.source;fe(ne().body,\"htmx:eventFilter:error\",{error:e,source:o});return true}}return false}function pt(l,c,e,u,a){const f=ie(l);let t;if(u.from){t=p(l,u.from)}else{t=[l]}if(u.changed){if(!(\"lastValue\"in f)){f.lastValue=new WeakMap}t.forEach(function(e){if(!f.lastValue.has(u)){f.lastValue.set(u,new WeakMap)}f.lastValue.get(u).set(e,e.value)})}se(t,function(i){const s=function(e){if(!le(l)){i.removeEventListener(u.trigger,s);return}if(dt(l,e)){return}if(a||ht(e,l)){e.preventDefault()}if(gt(u,l,e)){return}const t=ie(e);t.triggerSpec=u;if(t.handledFor==null){t.handledFor=[]}if(t.handledFor.indexOf(l)<0){t.handledFor.push(l);if(u.consume){e.stopPropagation()}if(u.target&&e.target){if(!h(ue(e.target),u.target)){return}}if(u.once){if(f.triggeredOnce){return}else{f.triggeredOnce=true}}if(u.changed){const n=event.target;const r=n.value;const o=f.lastValue.get(u);if(o.has(n)&&o.get(n)===r){return}o.set(n,r)}if(f.delayed){clearTimeout(f.delayed)}if(f.throttle){return}if(u.throttle>0){if(!f.throttle){he(l,\"htmx:trigger\");c(l,e);f.throttle=E().setTimeout(function(){f.throttle=null},u.throttle)}}else if(u.delay>0){f.delayed=E().setTimeout(function(){he(l,\"htmx:trigger\");c(l,e)},u.delay)}else{he(l,\"htmx:trigger\");c(l,e)}}};if(e.listenerInfos==null){e.listenerInfos=[]}e.listenerInfos.push({trigger:u.trigger,listener:s,on:i});i.addEventListener(u.trigger,s)})}let mt=false;let xt=null;function yt(){if(!xt){xt=function(){mt=true};window.addEventListener(\"scroll\",xt);window.addEventListener(\"resize\",xt);setInterval(function(){if(mt){mt=false;se(ne().querySelectorAll(\"[hx-trigger*='revealed'],[data-hx-trigger*='revealed']\"),function(e){bt(e)})}},200)}}function bt(e){if(!s(e,\"data-hx-revealed\")&&X(e)){e.setAttribute(\"data-hx-revealed\",\"true\");const t=ie(e);if(t.initHash){he(e,\"revealed\")}else{e.addEventListener(\"htmx:afterProcessNode\",function(){he(e,\"revealed\")},{once:true})}}}function vt(e,t,n,r){const o=function(){if(!n.loaded){n.loaded=true;he(e,\"htmx:trigger\");t(e)}};if(r>0){E().setTimeout(o,r)}else{o()}}function wt(t,n,e){let i=false;se(r,function(r){if(s(t,\"hx-\"+r)){const o=te(t,\"hx-\"+r);i=true;n.path=o;n.verb=r;e.forEach(function(e){St(t,e,n,function(e,t){const n=ue(e);if(g(n,Q.config.disableSelector)){b(n);return}de(r,o,n,t)})})}});return i}function St(r,e,t,n){if(e.trigger===\"revealed\"){yt();pt(r,n,t,e);bt(ue(r))}else if(e.trigger===\"intersect\"){const o={};if(e.root){o.root=ae(r,e.root)}if(e.threshold){o.threshold=parseFloat(e.threshold)}const i=new IntersectionObserver(function(t){for(let e=0;e<t.length;e++){const n=t[e];if(n.isIntersecting){he(r,\"intersect\");break}}},o);i.observe(ue(r));pt(ue(r),n,t,e)}else if(!t.firstInitCompleted&&e.trigger===\"load\"){if(!gt(e,r,Mt(\"load\",{elt:r}))){vt(ue(r),n,t,e.delay)}}else if(e.pollInterval>0){t.polling=true;ct(ue(r),n,e)}else{pt(r,n,t,e)}}function Et(e){const t=ue(e);if(!t){return false}const n=t.attributes;for(let e=0;e<n.length;e++){const r=n[e].name;if(l(r,\"hx-on:\")||l(r,\"data-hx-on:\")||l(r,\"hx-on-\")||l(r,\"data-hx-on-\")){return true}}return false}const Ct=(new XPathEvaluator).createExpression('.//*[@*[ starts-with(name(), \"hx-on:\") or starts-with(name(), \"data-hx-on:\") or'+' starts-with(name(), \"hx-on-\") or starts-with(name(), \"data-hx-on-\") ]]');function Ot(e,t){if(Et(e)){t.push(ue(e))}const n=Ct.evaluate(e);let r=null;while(r=n.iterateNext())t.push(ue(r))}function Rt(e){const t=[];if(e instanceof DocumentFragment){for(const n of e.childNodes){Ot(n,t)}}else{Ot(e,t)}return t}function Ht(e){if(e.querySelectorAll){const n=\", [hx-boost] a, [data-hx-boost] a, a[hx-boost], a[data-hx-boost]\";const r=[];for(const i in Mn){const s=Mn[i];if(s.getSelectors){var t=s.getSelectors();if(t){r.push(t)}}}const o=e.querySelectorAll(H+n+\", form, [type='submit'],\"+\" [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger]\"+r.flat().map(e=>\", \"+e).join(\"\"));return o}else{return[]}}function Tt(e){const t=g(ue(e.target),\"button, input[type='submit']\");const n=Lt(e);if(n){n.lastButtonClicked=t}}function qt(e){const t=Lt(e);if(t){t.lastButtonClicked=null}}function Lt(e){const t=g(ue(e.target),\"button, input[type='submit']\");if(!t){return}const n=y(\"#\"+ee(t,\"form\"),t.getRootNode())||g(t,\"form\");if(!n){return}return ie(n)}function At(e){e.addEventListener(\"click\",Tt);e.addEventListener(\"focusin\",Tt);e.addEventListener(\"focusout\",qt)}function Nt(t,e,n){const r=ie(t);if(!Array.isArray(r.onHandlers)){r.onHandlers=[]}let o;const i=function(e){vn(t,function(){if(at(t)){return}if(!o){o=new Function(\"event\",n)}o.call(t,e)})};t.addEventListener(e,i);r.onHandlers.push({event:e,listener:i})}function It(t){ke(t);for(let e=0;e<t.attributes.length;e++){const n=t.attributes[e].name;const r=t.attributes[e].value;if(l(n,\"hx-on\")||l(n,\"data-hx-on\")){const o=n.indexOf(\"-on\")+3;const i=n.slice(o,o+1);if(i===\"-\"||i===\":\"){let e=n.slice(o+1);if(l(e,\":\")){e=\"htmx\"+e}else if(l(e,\"-\")){e=\"htmx:\"+e.slice(1)}else if(l(e,\"htmx-\")){e=\"htmx:\"+e.slice(5)}Nt(t,e,r)}}}}function Pt(t){if(g(t,Q.config.disableSelector)){b(t);return}const n=ie(t);const e=Pe(t);if(n.initHash!==e){De(t);n.initHash=e;he(t,\"htmx:beforeProcessNode\");const r=st(t);const o=wt(t,n,r);if(!o){if(re(t,\"hx-boost\")===\"true\"){ft(t,n,r)}else if(s(t,\"hx-trigger\")){r.forEach(function(e){St(t,e,n,function(){})})}}if(t.tagName===\"FORM\"||ee(t,\"type\")===\"submit\"&&s(t,\"form\")){At(t)}n.firstInitCompleted=true;he(t,\"htmx:afterProcessNode\")}}function kt(e){e=y(e);if(g(e,Q.config.disableSelector)){b(e);return}Pt(e);se(Ht(e),function(e){Pt(e)});se(Rt(e),It)}function Dt(e){return e.replace(/([a-z0-9])([A-Z])/g,\"$1-$2\").toLowerCase()}function Mt(e,t){let n;if(window.CustomEvent&&typeof window.CustomEvent===\"function\"){n=new CustomEvent(e,{bubbles:true,cancelable:true,composed:true,detail:t})}else{n=ne().createEvent(\"CustomEvent\");n.initCustomEvent(e,true,true,t)}return n}function fe(e,t,n){he(e,t,ce({error:t},n))}function Xt(e){return e===\"htmx:afterProcessNode\"}function Ft(e,t){se(Un(e),function(e){try{t(e)}catch(e){O(e)}})}function O(e){if(console.error){console.error(e)}else if(console.log){console.log(\"ERROR: \",e)}}function he(e,t,n){e=y(e);if(n==null){n={}}n.elt=e;const r=Mt(t,n);if(Q.logger&&!Xt(t)){Q.logger(e,t,n)}if(n.error){O(n.error);he(e,\"htmx:error\",{errorInfo:n})}let o=e.dispatchEvent(r);const i=Dt(t);if(o&&i!==t){const s=Mt(i,r.detail);o=o&&e.dispatchEvent(s)}Ft(ue(e),function(e){o=o&&(e.onEvent(t,r)!==false&&!r.defaultPrevented)});return o}let Bt=location.pathname+location.search;function Ut(){const e=ne().querySelector(\"[hx-history-elt],[data-hx-history-elt]\");return e||ne().body}function jt(t,e){if(!B()){return}const n=_t(e);const r=ne().title;const o=window.scrollY;if(Q.config.historyCacheSize<=0){localStorage.removeItem(\"htmx-history-cache\");return}t=U(t);const i=S(localStorage.getItem(\"htmx-history-cache\"))||[];for(let e=0;e<i.length;e++){if(i[e].url===t){i.splice(e,1);break}}const s={url:t,content:n,title:r,scroll:o};he(ne().body,\"htmx:historyItemCreated\",{item:s,cache:i});i.push(s);while(i.length>Q.config.historyCacheSize){i.shift()}while(i.length>0){try{localStorage.setItem(\"htmx-history-cache\",JSON.stringify(i));break}catch(e){fe(ne().body,\"htmx:historyCacheError\",{cause:e,cache:i});i.shift()}}}function Vt(t){if(!B()){return null}t=U(t);const n=S(localStorage.getItem(\"htmx-history-cache\"))||[];for(let e=0;e<n.length;e++){if(n[e].url===t){return n[e]}}return null}function _t(e){const t=Q.config.requestClass;const n=e.cloneNode(true);se(x(n,\".\"+t),function(e){G(e,t)});se(x(n,\"[data-disabled-by-htmx]\"),function(e){e.removeAttribute(\"disabled\")});return n.innerHTML}function zt(){const e=Ut();const t=Bt||location.pathname+location.search;let n;try{n=ne().querySelector('[hx-history=\"false\" i],[data-hx-history=\"false\" i]')}catch(e){n=ne().querySelector('[hx-history=\"false\"],[data-hx-history=\"false\"]')}if(!n){he(ne().body,\"htmx:beforeHistorySave\",{path:t,historyElt:e});jt(t,e)}if(Q.config.historyEnabled)history.replaceState({htmx:true},ne().title,window.location.href)}function $t(e){if(Q.config.getCacheBusterParam){e=e.replace(/org\\.htmx\\.cache-buster=[^&]*&?/,\"\");if(Y(e,\"&\")||Y(e,\"?\")){e=e.slice(0,-1)}}if(Q.config.historyEnabled){history.pushState({htmx:true},\"\",e)}Bt=e}function Jt(e){if(Q.config.historyEnabled)history.replaceState({htmx:true},\"\",e);Bt=e}function Kt(e){se(e,function(e){e.call(undefined)})}function Gt(o){const e=new XMLHttpRequest;const i={path:o,xhr:e};he(ne().body,\"htmx:historyCacheMiss\",i);e.open(\"GET\",o,true);e.setRequestHeader(\"HX-Request\",\"true\");e.setRequestHeader(\"HX-History-Restore-Request\",\"true\");e.setRequestHeader(\"HX-Current-URL\",ne().location.href);e.onload=function(){if(this.status>=200&&this.status<400){he(ne().body,\"htmx:historyCacheMissLoad\",i);const e=P(this.response);const t=e.querySelector(\"[hx-history-elt],[data-hx-history-elt]\")||e;const n=Ut();const r=xn(n);kn(e.title);qe(e);Ve(n,t,r);Te();Kt(r.tasks);Bt=o;he(ne().body,\"htmx:historyRestore\",{path:o,cacheMiss:true,serverResponse:this.response})}else{fe(ne().body,\"htmx:historyCacheMissLoadError\",i)}};e.send()}function Wt(e){zt();e=e||location.pathname+location.search;const t=Vt(e);if(t){const n=P(t.content);const r=Ut();const o=xn(r);kn(t.title);qe(n);Ve(r,n,o);Te();Kt(o.tasks);E().setTimeout(function(){window.scrollTo(0,t.scroll)},0);Bt=e;he(ne().body,\"htmx:historyRestore\",{path:e,item:t})}else{if(Q.config.refreshOnHistoryMiss){window.location.reload(true)}else{Gt(e)}}}function Zt(e){let t=we(e,\"hx-indicator\");if(t==null){t=[e]}se(t,function(e){const t=ie(e);t.requestCount=(t.requestCount||0)+1;e.classList.add.call(e.classList,Q.config.requestClass)});return t}function Yt(e){let t=we(e,\"hx-disabled-elt\");if(t==null){t=[]}se(t,function(e){const t=ie(e);t.requestCount=(t.requestCount||0)+1;e.setAttribute(\"disabled\",\"\");e.setAttribute(\"data-disabled-by-htmx\",\"\")});return t}function Qt(e,t){se(e.concat(t),function(e){const t=ie(e);t.requestCount=(t.requestCount||1)-1});se(e,function(e){const t=ie(e);if(t.requestCount===0){e.classList.remove.call(e.classList,Q.config.requestClass)}});se(t,function(e){const t=ie(e);if(t.requestCount===0){e.removeAttribute(\"disabled\");e.removeAttribute(\"data-disabled-by-htmx\")}})}function en(t,n){for(let e=0;e<t.length;e++){const r=t[e];if(r.isSameNode(n)){return true}}return false}function tn(e){const t=e;if(t.name===\"\"||t.name==null||t.disabled||g(t,\"fieldset[disabled]\")){return false}if(t.type===\"button\"||t.type===\"submit\"||t.tagName===\"image\"||t.tagName===\"reset\"||t.tagName===\"file\"){return false}if(t.type===\"checkbox\"||t.type===\"radio\"){return t.checked}return true}function nn(t,e,n){if(t!=null&&e!=null){if(Array.isArray(e)){e.forEach(function(e){n.append(t,e)})}else{n.append(t,e)}}}function rn(t,n,r){if(t!=null&&n!=null){let e=r.getAll(t);if(Array.isArray(n)){e=e.filter(e=>n.indexOf(e)<0)}else{e=e.filter(e=>e!==n)}r.delete(t);se(e,e=>r.append(t,e))}}function on(t,n,r,o,i){if(o==null||en(t,o)){return}else{t.push(o)}if(tn(o)){const s=ee(o,\"name\");let e=o.value;if(o instanceof HTMLSelectElement&&o.multiple){e=M(o.querySelectorAll(\"option:checked\")).map(function(e){return e.value})}if(o instanceof HTMLInputElement&&o.files){e=M(o.files)}nn(s,e,n);if(i){sn(o,r)}}if(o instanceof HTMLFormElement){se(o.elements,function(e){if(t.indexOf(e)>=0){rn(e.name,e.value,n)}else{t.push(e)}if(i){sn(e,r)}});new FormData(o).forEach(function(e,t){if(e instanceof File&&e.name===\"\"){return}nn(t,e,n)})}}function sn(e,t){const n=e;if(n.willValidate){he(n,\"htmx:validation:validate\");if(!n.checkValidity()){t.push({elt:n,message:n.validationMessage,validity:n.validity});he(n,\"htmx:validation:failed\",{message:n.validationMessage,validity:n.validity})}}}function ln(n,e){for(const t of e.keys()){n.delete(t)}e.forEach(function(e,t){n.append(t,e)});return n}function cn(e,t){const n=[];const r=new FormData;const o=new FormData;const i=[];const s=ie(e);if(s.lastButtonClicked&&!le(s.lastButtonClicked)){s.lastButtonClicked=null}let l=e instanceof HTMLFormElement&&e.noValidate!==true||te(e,\"hx-validate\")===\"true\";if(s.lastButtonClicked){l=l&&s.lastButtonClicked.formNoValidate!==true}if(t!==\"get\"){on(n,o,i,g(e,\"form\"),l)}on(n,r,i,e,l);if(s.lastButtonClicked||e.tagName===\"BUTTON\"||e.tagName===\"INPUT\"&&ee(e,\"type\")===\"submit\"){const u=s.lastButtonClicked||e;const a=ee(u,\"name\");nn(a,u.value,o)}const c=we(e,\"hx-include\");se(c,function(e){on(n,r,i,ue(e),l);if(!h(e,\"form\")){se(f(e).querySelectorAll(ot),function(e){on(n,r,i,e,l)})}});ln(r,o);return{errors:i,formData:r,values:An(r)}}function un(e,t,n){if(e!==\"\"){e+=\"&\"}if(String(n)===\"[object Object]\"){n=JSON.stringify(n)}const r=encodeURIComponent(n);e+=encodeURIComponent(t)+\"=\"+r;return e}function an(e){e=qn(e);let n=\"\";e.forEach(function(e,t){n=un(n,t,e)});return n}function fn(e,t,n){const r={\"HX-Request\":\"true\",\"HX-Trigger\":ee(e,\"id\"),\"HX-Trigger-Name\":ee(e,\"name\"),\"HX-Target\":te(t,\"id\"),\"HX-Current-URL\":ne().location.href};bn(e,\"hx-headers\",false,r);if(n!==undefined){r[\"HX-Prompt\"]=n}if(ie(e).boosted){r[\"HX-Boosted\"]=\"true\"}return r}function hn(n,e){const t=re(e,\"hx-params\");if(t){if(t===\"none\"){return new FormData}else if(t===\"*\"){return n}else if(t.indexOf(\"not \")===0){se(t.slice(4).split(\",\"),function(e){e=e.trim();n.delete(e)});return n}else{const r=new FormData;se(t.split(\",\"),function(t){t=t.trim();if(n.has(t)){n.getAll(t).forEach(function(e){r.append(t,e)})}});return r}}else{return n}}function dn(e){return!!ee(e,\"href\")&&ee(e,\"href\").indexOf(\"#\")>=0}function gn(e,t){const n=t||re(e,\"hx-swap\");const r={swapStyle:ie(e).boosted?\"innerHTML\":Q.config.defaultSwapStyle,swapDelay:Q.config.defaultSwapDelay,settleDelay:Q.config.defaultSettleDelay};if(Q.config.scrollIntoViewOnBoost&&ie(e).boosted&&!dn(e)){r.show=\"top\"}if(n){const s=F(n);if(s.length>0){for(let e=0;e<s.length;e++){const l=s[e];if(l.indexOf(\"swap:\")===0){r.swapDelay=d(l.slice(5))}else if(l.indexOf(\"settle:\")===0){r.settleDelay=d(l.slice(7))}else if(l.indexOf(\"transition:\")===0){r.transition=l.slice(11)===\"true\"}else if(l.indexOf(\"ignoreTitle:\")===0){r.ignoreTitle=l.slice(12)===\"true\"}else if(l.indexOf(\"scroll:\")===0){const c=l.slice(7);var o=c.split(\":\");const u=o.pop();var i=o.length>0?o.join(\":\"):null;r.scroll=u;r.scrollTarget=i}else if(l.indexOf(\"show:\")===0){const a=l.slice(5);var o=a.split(\":\");const f=o.pop();var i=o.length>0?o.join(\":\"):null;r.show=f;r.showTarget=i}else if(l.indexOf(\"focus-scroll:\")===0){const h=l.slice(\"focus-scroll:\".length);r.focusScroll=h==\"true\"}else if(e==0){r.swapStyle=l}else{O(\"Unknown modifier in hx-swap: \"+l)}}}}return r}function pn(e){return re(e,\"hx-encoding\")===\"multipart/form-data\"||h(e,\"form\")&&ee(e,\"enctype\")===\"multipart/form-data\"}function mn(t,n,r){let o=null;Ft(n,function(e){if(o==null){o=e.encodeParameters(t,r,n)}});if(o!=null){return o}else{if(pn(n)){return ln(new FormData,qn(r))}else{return an(r)}}}function xn(e){return{tasks:[],elts:[e]}}function yn(e,t){const n=e[0];const r=e[e.length-1];if(t.scroll){var o=null;if(t.scrollTarget){o=ue(ae(n,t.scrollTarget))}if(t.scroll===\"top\"&&(n||o)){o=o||n;o.scrollTop=0}if(t.scroll===\"bottom\"&&(r||o)){o=o||r;o.scrollTop=o.scrollHeight}}if(t.show){var o=null;if(t.showTarget){let e=t.showTarget;if(t.showTarget===\"window\"){e=\"body\"}o=ue(ae(n,e))}if(t.show===\"top\"&&(n||o)){o=o||n;o.scrollIntoView({block:\"start\",behavior:Q.config.scrollBehavior})}if(t.show===\"bottom\"&&(r||o)){o=o||r;o.scrollIntoView({block:\"end\",behavior:Q.config.scrollBehavior})}}}function bn(r,e,o,i){if(i==null){i={}}if(r==null){return i}const s=te(r,e);if(s){let e=s.trim();let t=o;if(e===\"unset\"){return null}if(e.indexOf(\"javascript:\")===0){e=e.slice(11);t=true}else if(e.indexOf(\"js:\")===0){e=e.slice(3);t=true}if(e.indexOf(\"{\")!==0){e=\"{\"+e+\"}\"}let n;if(t){n=vn(r,function(){return Function(\"return (\"+e+\")\")()},{})}else{n=S(e)}for(const l in n){if(n.hasOwnProperty(l)){if(i[l]==null){i[l]=n[l]}}}}return bn(ue(c(r)),e,o,i)}function vn(e,t,n){if(Q.config.allowEval){return t()}else{fe(e,\"htmx:evalDisallowedError\");return n}}function wn(e,t){return bn(e,\"hx-vars\",true,t)}function Sn(e,t){return bn(e,\"hx-vals\",false,t)}function En(e){return ce(wn(e),Sn(e))}function Cn(t,n,r){if(r!==null){try{t.setRequestHeader(n,r)}catch(e){t.setRequestHeader(n,encodeURIComponent(r));t.setRequestHeader(n+\"-URI-AutoEncoded\",\"true\")}}}function On(t){if(t.responseURL&&typeof URL!==\"undefined\"){try{const e=new URL(t.responseURL);return e.pathname+e.search}catch(e){fe(ne().body,\"htmx:badResponseUrl\",{url:t.responseURL})}}}function R(e,t){return t.test(e.getAllResponseHeaders())}function Rn(t,n,r){t=t.toLowerCase();if(r){if(r instanceof Element||typeof r===\"string\"){return de(t,n,null,null,{targetOverride:y(r)||ve,returnPromise:true})}else{let e=y(r.target);if(r.target&&!e||r.source&&!e&&!y(r.source)){e=ve}return de(t,n,y(r.source),r.event,{handler:r.handler,headers:r.headers,values:r.values,targetOverride:e,swapOverride:r.swap,select:r.select,returnPromise:true})}}else{return de(t,n,null,null,{returnPromise:true})}}function Hn(e){const t=[];while(e){t.push(e);e=e.parentElement}return t}function Tn(e,t,n){let r;let o;if(typeof URL===\"function\"){o=new URL(t,document.location.href);const i=document.location.origin;r=i===o.origin}else{o=t;r=l(t,document.location.origin)}if(Q.config.selfRequestsOnly){if(!r){return false}}return he(e,\"htmx:validateUrl\",ce({url:o,sameHost:r},n))}function qn(e){if(e instanceof FormData)return e;const t=new FormData;for(const n in e){if(e.hasOwnProperty(n)){if(e[n]&&typeof e[n].forEach===\"function\"){e[n].forEach(function(e){t.append(n,e)})}else if(typeof e[n]===\"object\"&&!(e[n]instanceof Blob)){t.append(n,JSON.stringify(e[n]))}else{t.append(n,e[n])}}}return t}function Ln(r,o,e){return new Proxy(e,{get:function(t,e){if(typeof e===\"number\")return t[e];if(e===\"length\")return t.length;if(e===\"push\"){return function(e){t.push(e);r.append(o,e)}}if(typeof t[e]===\"function\"){return function(){t[e].apply(t,arguments);r.delete(o);t.forEach(function(e){r.append(o,e)})}}if(t[e]&&t[e].length===1){return t[e][0]}else{return t[e]}},set:function(e,t,n){e[t]=n;r.delete(o);e.forEach(function(e){r.append(o,e)});return true}})}function An(o){return new Proxy(o,{get:function(e,t){if(typeof t===\"symbol\"){const r=Reflect.get(e,t);if(typeof r===\"function\"){return function(){return r.apply(o,arguments)}}else{return r}}if(t===\"toJSON\"){return()=>Object.fromEntries(o)}if(t in e){if(typeof e[t]===\"function\"){return function(){return o[t].apply(o,arguments)}}else{return e[t]}}const n=o.getAll(t);if(n.length===0){return undefined}else if(n.length===1){return n[0]}else{return Ln(e,t,n)}},set:function(t,n,e){if(typeof n!==\"string\"){return false}t.delete(n);if(e&&typeof e.forEach===\"function\"){e.forEach(function(e){t.append(n,e)})}else if(typeof e===\"object\"&&!(e instanceof Blob)){t.append(n,JSON.stringify(e))}else{t.append(n,e)}return true},deleteProperty:function(e,t){if(typeof t===\"string\"){e.delete(t)}return true},ownKeys:function(e){return Reflect.ownKeys(Object.fromEntries(e))},getOwnPropertyDescriptor:function(e,t){return Reflect.getOwnPropertyDescriptor(Object.fromEntries(e),t)}})}function de(t,n,r,o,i,D){let s=null;let l=null;i=i!=null?i:{};if(i.returnPromise&&typeof Promise!==\"undefined\"){var e=new Promise(function(e,t){s=e;l=t})}if(r==null){r=ne().body}const M=i.handler||Dn;const X=i.select||null;if(!le(r)){oe(s);return e}const c=i.targetOverride||ue(Ee(r));if(c==null||c==ve){fe(r,\"htmx:targetError\",{target:te(r,\"hx-target\")});oe(l);return e}let u=ie(r);const a=u.lastButtonClicked;if(a){const L=ee(a,\"formaction\");if(L!=null){n=L}const A=ee(a,\"formmethod\");if(A!=null){if(A.toLowerCase()!==\"dialog\"){t=A}}}const f=re(r,\"hx-confirm\");if(D===undefined){const K=function(e){return de(t,n,r,o,i,!!e)};const G={target:c,elt:r,path:n,verb:t,triggeringEvent:o,etc:i,issueRequest:K,question:f};if(he(r,\"htmx:confirm\",G)===false){oe(s);return e}}let h=r;let d=re(r,\"hx-sync\");let g=null;let F=false;if(d){const N=d.split(\":\");const I=N[0].trim();if(I===\"this\"){h=Se(r,\"hx-sync\")}else{h=ue(ae(r,I))}d=(N[1]||\"drop\").trim();u=ie(h);if(d===\"drop\"&&u.xhr&&u.abortable!==true){oe(s);return e}else if(d===\"abort\"){if(u.xhr){oe(s);return e}else{F=true}}else if(d===\"replace\"){he(h,\"htmx:abort\")}else if(d.indexOf(\"queue\")===0){const W=d.split(\" \");g=(W[1]||\"last\").trim()}}if(u.xhr){if(u.abortable){he(h,\"htmx:abort\")}else{if(g==null){if(o){const P=ie(o);if(P&&P.triggerSpec&&P.triggerSpec.queue){g=P.triggerSpec.queue}}if(g==null){g=\"last\"}}if(u.queuedRequests==null){u.queuedRequests=[]}if(g===\"first\"&&u.queuedRequests.length===0){u.queuedRequests.push(function(){de(t,n,r,o,i)})}else if(g===\"all\"){u.queuedRequests.push(function(){de(t,n,r,o,i)})}else if(g===\"last\"){u.queuedRequests=[];u.queuedRequests.push(function(){de(t,n,r,o,i)})}oe(s);return e}}const p=new XMLHttpRequest;u.xhr=p;u.abortable=F;const m=function(){u.xhr=null;u.abortable=false;if(u.queuedRequests!=null&&u.queuedRequests.length>0){const e=u.queuedRequests.shift();e()}};const B=re(r,\"hx-prompt\");if(B){var x=prompt(B);if(x===null||!he(r,\"htmx:prompt\",{prompt:x,target:c})){oe(s);m();return e}}if(f&&!D){if(!confirm(f)){oe(s);m();return e}}let y=fn(r,c,x);if(t!==\"get\"&&!pn(r)){y[\"Content-Type\"]=\"application/x-www-form-urlencoded\"}if(i.headers){y=ce(y,i.headers)}const U=cn(r,t);let b=U.errors;const j=U.formData;if(i.values){ln(j,qn(i.values))}const V=qn(En(r));const v=ln(j,V);let w=hn(v,r);if(Q.config.getCacheBusterParam&&t===\"get\"){w.set(\"org.htmx.cache-buster\",ee(c,\"id\")||\"true\")}if(n==null||n===\"\"){n=ne().location.href}const S=bn(r,\"hx-request\");const _=ie(r).boosted;let E=Q.config.methodsThatUseUrlParams.indexOf(t)>=0;const C={boosted:_,useUrlParams:E,formData:w,parameters:An(w),unfilteredFormData:v,unfilteredParameters:An(v),headers:y,target:c,verb:t,errors:b,withCredentials:i.credentials||S.credentials||Q.config.withCredentials,timeout:i.timeout||S.timeout||Q.config.timeout,path:n,triggeringEvent:o};if(!he(r,\"htmx:configRequest\",C)){oe(s);m();return e}n=C.path;t=C.verb;y=C.headers;w=qn(C.parameters);b=C.errors;E=C.useUrlParams;if(b&&b.length>0){he(r,\"htmx:validation:halted\",C);oe(s);m();return e}const z=n.split(\"#\");const $=z[0];const O=z[1];let R=n;if(E){R=$;const Z=!w.keys().next().done;if(Z){if(R.indexOf(\"?\")<0){R+=\"?\"}else{R+=\"&\"}R+=an(w);if(O){R+=\"#\"+O}}}if(!Tn(r,R,C)){fe(r,\"htmx:invalidPath\",C);oe(l);return e}p.open(t.toUpperCase(),R,true);p.overrideMimeType(\"text/html\");p.withCredentials=C.withCredentials;p.timeout=C.timeout;if(S.noHeaders){}else{for(const k in y){if(y.hasOwnProperty(k)){const Y=y[k];Cn(p,k,Y)}}}const H={xhr:p,target:c,requestConfig:C,etc:i,boosted:_,select:X,pathInfo:{requestPath:n,finalRequestPath:R,responsePath:null,anchor:O}};p.onload=function(){try{const t=Hn(r);H.pathInfo.responsePath=On(p);M(r,H);if(H.keepIndicators!==true){Qt(T,q)}he(r,\"htmx:afterRequest\",H);he(r,\"htmx:afterOnLoad\",H);if(!le(r)){let e=null;while(t.length>0&&e==null){const n=t.shift();if(le(n)){e=n}}if(e){he(e,\"htmx:afterRequest\",H);he(e,\"htmx:afterOnLoad\",H)}}oe(s);m()}catch(e){fe(r,\"htmx:onLoadError\",ce({error:e},H));throw e}};p.onerror=function(){Qt(T,q);fe(r,\"htmx:afterRequest\",H);fe(r,\"htmx:sendError\",H);oe(l);m()};p.onabort=function(){Qt(T,q);fe(r,\"htmx:afterRequest\",H);fe(r,\"htmx:sendAbort\",H);oe(l);m()};p.ontimeout=function(){Qt(T,q);fe(r,\"htmx:afterRequest\",H);fe(r,\"htmx:timeout\",H);oe(l);m()};if(!he(r,\"htmx:beforeRequest\",H)){oe(s);m();return e}var T=Zt(r);var q=Yt(r);se([\"loadstart\",\"loadend\",\"progress\",\"abort\"],function(t){se([p,p.upload],function(e){e.addEventListener(t,function(e){he(r,\"htmx:xhr:\"+t,{lengthComputable:e.lengthComputable,loaded:e.loaded,total:e.total})})})});he(r,\"htmx:beforeSend\",H);const J=E?null:mn(p,r,w);p.send(J);return e}function Nn(e,t){const n=t.xhr;let r=null;let o=null;if(R(n,/HX-Push:/i)){r=n.getResponseHeader(\"HX-Push\");o=\"push\"}else if(R(n,/HX-Push-Url:/i)){r=n.getResponseHeader(\"HX-Push-Url\");o=\"push\"}else if(R(n,/HX-Replace-Url:/i)){r=n.getResponseHeader(\"HX-Replace-Url\");o=\"replace\"}if(r){if(r===\"false\"){return{}}else{return{type:o,path:r}}}const i=t.pathInfo.finalRequestPath;const s=t.pathInfo.responsePath;const l=re(e,\"hx-push-url\");const c=re(e,\"hx-replace-url\");const u=ie(e).boosted;let a=null;let f=null;if(l){a=\"push\";f=l}else if(c){a=\"replace\";f=c}else if(u){a=\"push\";f=s||i}if(f){if(f===\"false\"){return{}}if(f===\"true\"){f=s||i}if(t.pathInfo.anchor&&f.indexOf(\"#\")===-1){f=f+\"#\"+t.pathInfo.anchor}return{type:a,path:f}}else{return{}}}function In(e,t){var n=new RegExp(e.code);return n.test(t.toString(10))}function Pn(e){for(var t=0;t<Q.config.responseHandling.length;t++){var n=Q.config.responseHandling[t];if(In(n,e.status)){return n}}return{swap:false}}function kn(e){if(e){const t=u(\"title\");if(t){t.innerHTML=e}else{window.document.title=e}}}function Dn(o,i){const s=i.xhr;let l=i.target;const e=i.etc;const c=i.select;if(!he(o,\"htmx:beforeOnLoad\",i))return;if(R(s,/HX-Trigger:/i)){Je(s,\"HX-Trigger\",o)}if(R(s,/HX-Location:/i)){zt();let e=s.getResponseHeader(\"HX-Location\");var t;if(e.indexOf(\"{\")===0){t=S(e);e=t.path;delete t.path}Rn(\"get\",e,t).then(function(){$t(e)});return}const n=R(s,/HX-Refresh:/i)&&s.getResponseHeader(\"HX-Refresh\")===\"true\";if(R(s,/HX-Redirect:/i)){i.keepIndicators=true;location.href=s.getResponseHeader(\"HX-Redirect\");n&&location.reload();return}if(n){i.keepIndicators=true;location.reload();return}if(R(s,/HX-Retarget:/i)){if(s.getResponseHeader(\"HX-Retarget\")===\"this\"){i.target=o}else{i.target=ue(ae(o,s.getResponseHeader(\"HX-Retarget\")))}}const u=Nn(o,i);const r=Pn(s);const a=r.swap;let f=!!r.error;let h=Q.config.ignoreTitle||r.ignoreTitle;let d=r.select;if(r.target){i.target=ue(ae(o,r.target))}var g=e.swapOverride;if(g==null&&r.swapOverride){g=r.swapOverride}if(R(s,/HX-Retarget:/i)){if(s.getResponseHeader(\"HX-Retarget\")===\"this\"){i.target=o}else{i.target=ue(ae(o,s.getResponseHeader(\"HX-Retarget\")))}}if(R(s,/HX-Reswap:/i)){g=s.getResponseHeader(\"HX-Reswap\")}var p=s.response;var m=ce({shouldSwap:a,serverResponse:p,isError:f,ignoreTitle:h,selectOverride:d,swapOverride:g},i);if(r.event&&!he(l,r.event,m))return;if(!he(l,\"htmx:beforeSwap\",m))return;l=m.target;p=m.serverResponse;f=m.isError;h=m.ignoreTitle;d=m.selectOverride;g=m.swapOverride;i.target=l;i.failed=f;i.successful=!f;if(m.shouldSwap){if(s.status===286){lt(o)}Ft(o,function(e){p=e.transformResponse(p,s,o)});if(u.type){zt()}var x=gn(o,g);if(!x.hasOwnProperty(\"ignoreTitle\")){x.ignoreTitle=h}l.classList.add(Q.config.swappingClass);let n=null;let r=null;if(c){d=c}if(R(s,/HX-Reselect:/i)){d=s.getResponseHeader(\"HX-Reselect\")}const y=re(o,\"hx-select-oob\");const b=re(o,\"hx-select\");let e=function(){try{if(u.type){he(ne().body,\"htmx:beforeHistoryUpdate\",ce({history:u},i));if(u.type===\"push\"){$t(u.path);he(ne().body,\"htmx:pushedIntoHistory\",{path:u.path})}else{Jt(u.path);he(ne().body,\"htmx:replacedInHistory\",{path:u.path})}}$e(l,p,x,{select:d||b,selectOOB:y,eventInfo:i,anchor:i.pathInfo.anchor,contextElement:o,afterSwapCallback:function(){if(R(s,/HX-Trigger-After-Swap:/i)){let e=o;if(!le(o)){e=ne().body}Je(s,\"HX-Trigger-After-Swap\",e)}},afterSettleCallback:function(){if(R(s,/HX-Trigger-After-Settle:/i)){let e=o;if(!le(o)){e=ne().body}Je(s,\"HX-Trigger-After-Settle\",e)}oe(n)}})}catch(e){fe(o,\"htmx:swapError\",i);oe(r);throw e}};let t=Q.config.globalViewTransitions;if(x.hasOwnProperty(\"transition\")){t=x.transition}if(t&&he(o,\"htmx:beforeTransition\",i)&&typeof Promise!==\"undefined\"&&document.startViewTransition){const v=new Promise(function(e,t){n=e;r=t});const w=e;e=function(){document.startViewTransition(function(){w();return v})}}if(x.swapDelay>0){E().setTimeout(e,x.swapDelay)}else{e()}}if(f){fe(o,\"htmx:responseError\",ce({error:\"Response Status Error Code \"+s.status+\" from \"+i.pathInfo.requestPath},i))}}const Mn={};function Xn(){return{init:function(e){return null},getSelectors:function(){return null},onEvent:function(e,t){return true},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return false},handleSwap:function(e,t,n,r){return false},encodeParameters:function(e,t,n){return null}}}function Fn(e,t){if(t.init){t.init(n)}Mn[e]=ce(Xn(),t)}function Bn(e){delete Mn[e]}function Un(e,n,r){if(n==undefined){n=[]}if(e==undefined){return n}if(r==undefined){r=[]}const t=te(e,\"hx-ext\");if(t){se(t.split(\",\"),function(e){e=e.replace(/ /g,\"\");if(e.slice(0,7)==\"ignore:\"){r.push(e.slice(7));return}if(r.indexOf(e)<0){const t=Mn[e];if(t&&n.indexOf(t)<0){n.push(t)}}})}return Un(ue(c(e)),n,r)}var jn=false;ne().addEventListener(\"DOMContentLoaded\",function(){jn=true});function Vn(e){if(jn||ne().readyState===\"complete\"){e()}else{ne().addEventListener(\"DOMContentLoaded\",e)}}function _n(){if(Q.config.includeIndicatorStyles!==false){const e=Q.config.inlineStyleNonce?` nonce=\"${Q.config.inlineStyleNonce}\"`:\"\";ne().head.insertAdjacentHTML(\"beforeend\",\"<style\"+e+\"> .\"+Q.config.indicatorClass+\"{opacity:0} .\"+Q.config.requestClass+\" .\"+Q.config.indicatorClass+\"{opacity:1; transition: opacity 200ms ease-in;} .\"+Q.config.requestClass+\".\"+Q.config.indicatorClass+\"{opacity:1; transition: opacity 200ms ease-in;} </style>\")}}function zn(){const e=ne().querySelector('meta[name=\"htmx-config\"]');if(e){return S(e.content)}else{return null}}function $n(){const e=zn();if(e){Q.config=ce(Q.config,e)}}Vn(function(){$n();_n();let e=ne().body;kt(e);const t=ne().querySelectorAll(\"[hx-trigger='restored'],[data-hx-trigger='restored']\");e.addEventListener(\"htmx:abort\",function(e){const t=e.target;const n=ie(t);if(n&&n.xhr){n.xhr.abort()}});const n=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(e){if(e.state&&e.state.htmx){Wt();se(t,function(e){he(e,\"htmx:restored\",{document:ne(),triggerEvent:he})})}else{if(n){n(e)}}};E().setTimeout(function(){he(e,\"htmx:load\",{});e=null},0)});return Q}();";
3
+ //# sourceMappingURL=htmx-vendor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmx-vendor.d.ts","sourceRoot":"","sources":["../../../../src/ui/html/client/htmx-vendor.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,UAAU,+9lDAA+9lD,CAAC"}