@webority/ui-elements 0.37.0 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/WuiAutocomplete-Comrnbmf.js +13 -0
- package/dist/WuiCommandPalette-CKna1GlO.js +2 -0
- package/dist/WuiConsentBanner-CFll7vxN.js +201 -0
- package/dist/WuiContextMenu-CBy0O4HT.js +1 -0
- package/dist/WuiCountrySelect-oLBUHvMM.js +1 -0
- package/dist/WuiDatePicker-nB1B3eWW.js +31 -0
- package/dist/WuiDateRange-Di5YE9mg.js +25 -0
- package/dist/WuiDock-BD2HgMmP.js +1 -0
- package/dist/WuiImageCrop-Cr3D2iPo.js +17 -0
- package/dist/WuiMultiSelect-BUw-7apM.js +25 -0
- package/dist/WuiOtp-BbO_75RB.js +14 -0
- package/dist/WuiPhone-GJglNelp.js +15 -0
- package/dist/WuiSelect-DvtN4qC2.js +14 -0
- package/dist/WuiSlider-Br6V2amU.js +49 -0
- package/dist/WuiSortable-Bd7Fz5Ox.js +1 -0
- package/dist/WuiTagInput-DzEZooIn.js +6 -0
- package/dist/WuiTimePicker-Bolpp93P.js +9 -0
- package/dist/WuiTour-DiKZEWeb.js +15 -0
- package/dist/WuiTree-SA0QU9AF.js +1 -0
- package/dist/WuiWizardStep-DIHxrXn9.js +1 -0
- package/dist/anchorOverlay-WcDeH46q.js +1 -0
- package/dist/calendarMath-BC2wGCD-.js +1 -0
- package/dist/countries-CvmZ2xpG.js +1 -0
- package/dist/elementBase-BlsR4tqa.js +1 -0
- package/dist/elements/autocomplete.js +1 -6
- package/dist/elements/command-palette.js +1 -6
- package/dist/elements/consent-banner.js +1 -6
- package/dist/elements/context-menu.js +1 -6
- package/dist/elements/country-select.js +1 -6
- package/dist/elements/date-range.js +1 -6
- package/dist/elements/datepicker.js +1 -6
- package/dist/elements/dock.js +1 -6
- package/dist/elements/image-crop.js +1 -6
- package/dist/elements/kanban.js +1 -6
- package/dist/elements/multiselect.js +1 -6
- package/dist/elements/otp.js +1 -6
- package/dist/elements/phone.js +1 -6
- package/dist/elements/select.js +1 -6
- package/dist/elements/slider.js +1 -6
- package/dist/elements/sortable.js +1 -6
- package/dist/elements/status-icon.js +1 -6
- package/dist/elements/taginput.js +1 -6
- package/dist/elements/timepicker.js +1 -6
- package/dist/elements/tour.js +1 -6
- package/dist/elements/tree.js +1 -6
- package/dist/elements/wizard.js +1 -5
- package/dist/examples.mobile.json-GS1_MGh9.js +1 -0
- package/dist/fileViewerImage-Y9QBn2Rj.js +6 -0
- package/dist/fileViewerMedia-CaJaVnjE.js +1 -0
- package/dist/fileViewerPdf-BN0zuehw.js +19 -0
- package/dist/fileViewerUi-DasgDsU-.js +1 -0
- package/dist/focusOrigin-2imUSs-u.js +1 -0
- package/dist/formMirror-BgY7zkC3.js +1 -0
- package/dist/formatters-BAE__8ye.js +1 -0
- package/dist/helpers.js +1 -5
- package/dist/iconGlyphs.g-CUm_mfze.js +1 -0
- package/dist/kanban-CdELdS3U.js +1 -0
- package/dist/listboxKeyNav-DMIvs9d6.js +1 -0
- package/dist/max-CNrKnpEj.js +17 -0
- package/dist/optionLabel-DsX2fhWs.js +1 -0
- package/dist/statusIcons-2X4iGkKL.js +10 -0
- package/dist/textMatch-wdY7XLIc.js +1 -0
- package/dist/themeTransition-lkmQm8FR.js +1 -0
- package/dist/tokenCommit-BKckxgtg.js +2 -0
- package/dist/ui-calendar.global.js +1 -1
- package/dist/ui-calendar.js +1 -9905
- package/dist/ui-chart.js +21 -34563
- package/dist/ui-chat-core.js +10 -347
- package/dist/ui-chat.js +10 -1066
- package/dist/ui-elements.global.js +52 -53
- package/dist/ui-elements.js +1 -692
- package/dist/ui-file-viewer.js +1 -311
- package/dist/ui-rich-text.js +193 -16887
- package/dist/wuiHttp-BC8co934.js +1 -0
- package/package.json +5 -7
- package/dist/WuiAutocomplete-ByxnwJNQ.js +0 -283
- package/dist/WuiCommandPalette-CtZ04JxZ.js +0 -130
- package/dist/WuiConsentBanner-oVe-jxCO.js +0 -399
- package/dist/WuiContextMenu-Bx_U2X3t.js +0 -211
- package/dist/WuiCountrySelect-CUAwKnL9.js +0 -28
- package/dist/WuiDatePicker-DkNbc-z7.js +0 -325
- package/dist/WuiDateRange-BocnVO6L.js +0 -233
- package/dist/WuiDock-BSDY9g8Q.js +0 -57
- package/dist/WuiImageCrop-1yaAONTk.js +0 -462
- package/dist/WuiMultiSelect-BrCGRNCt.js +0 -416
- package/dist/WuiOtp-D8-4Pqil.js +0 -128
- package/dist/WuiPhone-BvbhiP2r.js +0 -731
- package/dist/WuiSelect-BXrpiuXG.js +0 -214
- package/dist/WuiSlider-BcU0psYf.js +0 -256
- package/dist/WuiSortable-JjJqstSU.js +0 -280
- package/dist/WuiTagInput-D1ay3OcL.js +0 -158
- package/dist/WuiTimePicker-C7n-VFGt.js +0 -370
- package/dist/WuiTour-R5O9l--J.js +0 -205
- package/dist/WuiTree-DXP7pGeI.js +0 -393
- package/dist/WuiWizardStep-BU5w9_Ds.js +0 -221
- package/dist/anchorOverlay-DluGZ8ef.js +0 -23
- package/dist/calendarMath-BAF2Jkg_.js +0 -42
- package/dist/countries-B-M_LTgS.js +0 -1234
- package/dist/elementBase-Bg1xpvup.js +0 -9
- package/dist/examples.mobile.json-BMXTGiGC.js +0 -250
- package/dist/fileViewerImage-Dky4nQZS.js +0 -185
- package/dist/fileViewerMedia-DPk_YcvC.js +0 -133
- package/dist/fileViewerPdf-BnIsj-J-.js +0 -15799
- package/dist/fileViewerUi-R6hlcShk.js +0 -272
- package/dist/formMirror-jGf5M4gk.js +0 -29
- package/dist/formatters-DusKbTyV.js +0 -138
- package/dist/iconGlyphs.g-Cpg1BUHm.js +0 -215
- package/dist/kanban-BIiEMkTK.js +0 -985
- package/dist/listboxKeyNav-zts_8d5e.js +0 -36
- package/dist/max-BDKx469G.js +0 -14478
- package/dist/optionLabel-Dn-I7zyp.js +0 -16
- package/dist/statusIcons-C3zjycpa.js +0 -37
- package/dist/textMatch-DEUjlkdy.js +0 -27
- package/dist/themeTransition-BpCuMnjk.js +0 -589
- package/dist/tokenCommit-VWz-2jEf.js +0 -20
- package/dist/wuiHttp-oeHs7X_c.js +0 -118
package/dist/ui-elements.js
CHANGED
|
@@ -1,692 +1 @@
|
|
|
1
|
-
import { n as e } from "./elementBase-Bg1xpvup.js";
|
|
2
|
-
import { a as t, c as n, d as r, f as i, h as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h } from "./formatters-DusKbTyV.js";
|
|
3
|
-
import { a as g, c as _, i as v, n as y, o as b, r as x, s as S, t as C } from "./wuiHttp-oeHs7X_c.js";
|
|
4
|
-
import { _ as ee, a as te, c as w, d as T, f as E, g as ne, h as D, i as O, l as re, m as ie, n as k, o as ae, p as oe, r as se, s as ce, t as le, u as ue, v as de, y as A } from "./kanban-BIiEMkTK.js";
|
|
5
|
-
import { n as j, t as fe } from "./statusIcons-C3zjycpa.js";
|
|
6
|
-
import { t as M } from "./iconGlyphs.g-Cpg1BUHm.js";
|
|
7
|
-
import { t as N } from "./WuiAutocomplete-ByxnwJNQ.js";
|
|
8
|
-
import { t as P } from "./textMatch-DEUjlkdy.js";
|
|
9
|
-
import { t as F } from "./WuiCommandPalette-CtZ04JxZ.js";
|
|
10
|
-
import { t as I } from "./WuiConsentBanner-oVe-jxCO.js";
|
|
11
|
-
import { t as L } from "./WuiContextMenu-Bx_U2X3t.js";
|
|
12
|
-
import { t as R } from "./WuiSelect-BXrpiuXG.js";
|
|
13
|
-
import { t as z } from "./WuiCountrySelect-CUAwKnL9.js";
|
|
14
|
-
import { t as B } from "./WuiDatePicker-DkNbc-z7.js";
|
|
15
|
-
import { t as V } from "./WuiDateRange-BocnVO6L.js";
|
|
16
|
-
import { t as pe } from "./WuiDock-BSDY9g8Q.js";
|
|
17
|
-
import { t as me } from "./WuiImageCrop-1yaAONTk.js";
|
|
18
|
-
import { t as he } from "./WuiMultiSelect-BrCGRNCt.js";
|
|
19
|
-
import { t as ge } from "./WuiOtp-D8-4Pqil.js";
|
|
20
|
-
import { t as _e } from "./WuiPhone-BvbhiP2r.js";
|
|
21
|
-
import { t as ve } from "./WuiSlider-BcU0psYf.js";
|
|
22
|
-
import { t as ye } from "./WuiSortable-JjJqstSU.js";
|
|
23
|
-
import { t as be } from "./WuiTagInput-D1ay3OcL.js";
|
|
24
|
-
import { t as xe } from "./WuiTimePicker-C7n-VFGt.js";
|
|
25
|
-
import { n as Se, t as Ce } from "./WuiTour-R5O9l--J.js";
|
|
26
|
-
import { t as we } from "./WuiTree-DXP7pGeI.js";
|
|
27
|
-
import { n as Te, t as Ee } from "./WuiWizardStep-BU5w9_Ds.js";
|
|
28
|
-
import { A as De, B as Oe, C as ke, D as Ae, E as je, F as Me, G as Ne, H as Pe, I as Fe, J as Ie, K as Le, L as Re, M as ze, N as Be, O as Ve, P as He, Q as Ue, R as We, S as Ge, T as Ke, U as qe, V as Je, W as Ye, X as Xe, Y as Ze, Z as Qe, _ as $e, a as et, b as tt, c as nt, d as rt, f as it, g as at, h as ot, i as st, j as ct, k as lt, l as ut, m as dt, n as ft, o as pt, p as mt, q as ht, r as gt, s as _t, t as vt, u as yt, v as bt, w as xt, x as St, y as Ct, z as wt } from "./themeTransition-BpCuMnjk.js";
|
|
29
|
-
//#region src/tableSelect.js
|
|
30
|
-
var Tt = "Select all rows", Et = "Select row", H = "wui-select-cell", Dt = (e, t) => {
|
|
31
|
-
let n = e.createElement("input");
|
|
32
|
-
return n.type = "checkbox", n.className = "wui-check", n.setAttribute("aria-label", t), n;
|
|
33
|
-
};
|
|
34
|
-
function Ot(e = document) {
|
|
35
|
-
let t = e.createElement("th");
|
|
36
|
-
return t.className = H, t.appendChild(Dt(e, Tt)), t;
|
|
37
|
-
}
|
|
38
|
-
function kt(e = document) {
|
|
39
|
-
let t = e.createElement("td");
|
|
40
|
-
return t.className = H, t.appendChild(Dt(e, Et)), t;
|
|
41
|
-
}
|
|
42
|
-
function At(e = document) {
|
|
43
|
-
let t = e.createElement("td");
|
|
44
|
-
return t.className = H, t;
|
|
45
|
-
}
|
|
46
|
-
var jt = (e) => e.firstElementChild?.classList.contains(H);
|
|
47
|
-
function Mt(e) {
|
|
48
|
-
for (let t of e) jt(t) || t.insertBefore(kt(t.ownerDocument), t.firstChild);
|
|
49
|
-
}
|
|
50
|
-
function Nt(e) {
|
|
51
|
-
let t = e.querySelector("thead tr");
|
|
52
|
-
if (!t) return null;
|
|
53
|
-
jt(t) || t.insertBefore(Ot(e.ownerDocument), t.firstChild), Mt(e.querySelectorAll("tbody tr"));
|
|
54
|
-
for (let t of e.querySelectorAll("tfoot tr")) jt(t) || t.insertBefore(At(e.ownerDocument), t.firstChild);
|
|
55
|
-
return t.querySelector(`.${H} .wui-check`);
|
|
56
|
-
}
|
|
57
|
-
function Pt(e) {
|
|
58
|
-
let t = e.querySelector(`thead .${H} .wui-check`), n = [...e.querySelectorAll("tbody tr .wui-check")], r = n.length, i = n.filter((e) => e.checked).length;
|
|
59
|
-
t && (t.checked = r > 0 && i === r, t.indeterminate = i > 0 && i < r);
|
|
60
|
-
for (let t of e.querySelectorAll("tbody tr")) t.classList.toggle("is-selected", !!t.querySelector(".wui-check")?.checked);
|
|
61
|
-
return {
|
|
62
|
-
selected: i,
|
|
63
|
-
total: r
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
//#endregion
|
|
67
|
-
//#region src/serverTable.js
|
|
68
|
-
var Ft = Object.freeze([
|
|
69
|
-
"page",
|
|
70
|
-
"pageSize",
|
|
71
|
-
"sortBy",
|
|
72
|
-
"sortOrder"
|
|
73
|
-
]), U = "search", W = Object.freeze({
|
|
74
|
-
loading: "Loading rows",
|
|
75
|
-
error: "These rows did not load. Try again.",
|
|
76
|
-
network: "The connection dropped before the rows loaded. Check it and try again.",
|
|
77
|
-
forbidden: "You do not have access to these rows.",
|
|
78
|
-
retry: "Retry",
|
|
79
|
-
actionFailed: "That did not work. Try again.",
|
|
80
|
-
actionForbidden: "You do not have permission to do that.",
|
|
81
|
-
empty: "No rows"
|
|
82
|
-
}), It = 5, Lt = /* @__PURE__ */ new WeakMap(), Rt = (e, t) => {
|
|
83
|
-
let n = Number(e);
|
|
84
|
-
return Number.isInteger(n) ? n : t;
|
|
85
|
-
}, zt = (e) => ({
|
|
86
|
-
total: Rt(e.dataset.total, 0),
|
|
87
|
-
page: Rt(e.dataset.page, 1),
|
|
88
|
-
pageSize: Rt(e.dataset.pageSize, 0),
|
|
89
|
-
sortBy: e.dataset.sortBy || "",
|
|
90
|
-
sortOrder: e.dataset.sortOrder === "desc" ? "desc" : "asc"
|
|
91
|
-
}), Bt = (e, t) => {
|
|
92
|
-
e && window.WUI?.toast?.(e, { variant: t });
|
|
93
|
-
};
|
|
94
|
-
function Vt(e = document) {
|
|
95
|
-
let t = e.querySelectorAll ? [...e.querySelectorAll("[data-wui-server]")] : [];
|
|
96
|
-
e instanceof Element && e.matches("[data-wui-server]") && t.unshift(e);
|
|
97
|
-
for (let e of t) Lt.has(e) || Lt.set(e, Ut(e));
|
|
98
|
-
}
|
|
99
|
-
function Ht(e) {
|
|
100
|
-
let t = e instanceof Element ? e.closest("[data-wui-server]") : null;
|
|
101
|
-
return t && Lt.get(t) || null;
|
|
102
|
-
}
|
|
103
|
-
function Ut(e) {
|
|
104
|
-
let t = e.querySelector(".table-wrap"), n = t?.querySelector(":scope > table"), r = e.dataset.src;
|
|
105
|
-
if (!n || !r) throw Error("A server-paged table needs data-src and a .table-wrap > table: render it with <app-data-table src>.");
|
|
106
|
-
let i = t.querySelector(":scope > [data-wui-table-state]"), a = e.querySelector("[data-wui-table-pager]"), o = e.querySelector("[data-wui-table-status]"), s = {
|
|
107
|
-
urlState: e.dataset.urlState !== "false",
|
|
108
|
-
refreshOnSuccess: e.dataset.refreshOnSuccess !== "false",
|
|
109
|
-
filtersForm: e.dataset.filtersForm || null,
|
|
110
|
-
filtersRegion: e.dataset.filtersRegion || null,
|
|
111
|
-
searchInput: e.dataset.searchInput || null,
|
|
112
|
-
loadingText: e.dataset.loadingText || W.loading,
|
|
113
|
-
errorText: e.dataset.errorText || W.error
|
|
114
|
-
}, c = new URL(r, window.location.href), l = new Set(c.searchParams.keys()), u = n.hasAttribute("data-app-datatable-selectable"), d = /* @__PURE__ */ new Set(), f = b(), p = new AbortController(), m = { signal: p.signal }, h = n.querySelector(":scope > tbody[data-wui-rows]");
|
|
115
|
-
if (!h) throw Error("A server-paged table needs its rows in <app-table-rows> (tbody[data-wui-rows]).");
|
|
116
|
-
let g = zt(h), v = null, y = null, x = (e) => {
|
|
117
|
-
let t = new URLSearchParams();
|
|
118
|
-
for (let [n, r] of new URLSearchParams(e)) l.has(n) || t.append(n, r);
|
|
119
|
-
return t;
|
|
120
|
-
}, S = (e) => x(new URL(e, window.location.href).search), C = (e) => {
|
|
121
|
-
let t = e.toString();
|
|
122
|
-
return `${window.location.pathname}${t ? `?${t}` : ""}${window.location.hash}`;
|
|
123
|
-
}, ee = (e) => {
|
|
124
|
-
let t = new URL(c.href);
|
|
125
|
-
for (let [n, r] of e) l.has(n) || t.searchParams.append(n, r);
|
|
126
|
-
return t.origin === window.location.origin ? `${t.pathname}${t.search}` : t.href;
|
|
127
|
-
}, te = (e, t) => {
|
|
128
|
-
let n = new URLSearchParams(e);
|
|
129
|
-
return n.has("page") && n.set("page", String(t.page)), n.has("pageSize") && n.set("pageSize", String(t.pageSize)), n.has("sortBy") ? t.sortBy ? (n.set("sortBy", t.sortBy), n.set("sortOrder", t.sortOrder)) : (n.delete("sortBy"), n.delete("sortOrder")) : n.delete("sortOrder"), n;
|
|
130
|
-
}, w = te(s.urlState ? x(window.location.search) : new URLSearchParams(), g);
|
|
131
|
-
s.urlState && C(w) !== `${window.location.pathname}${window.location.search}${window.location.hash}` && window.history.replaceState(window.history.state, "", C(w));
|
|
132
|
-
let T = (e, n) => t.dispatchEvent(new CustomEvent(e, {
|
|
133
|
-
bubbles: !0,
|
|
134
|
-
detail: n
|
|
135
|
-
})), E = (e) => {
|
|
136
|
-
o && (o.textContent = e);
|
|
137
|
-
}, ne = (e) => {
|
|
138
|
-
if (e.total === 0) return W.empty;
|
|
139
|
-
let t = e.pageSize > 0 ? Math.max(1, Math.ceil(e.total / e.pageSize)) : 1;
|
|
140
|
-
return `Page ${e.page} of ${t}, ${e.total} ${e.total === 1 ? "row" : "rows"}`;
|
|
141
|
-
}, D = () => [...n.querySelectorAll(":scope > thead > tr:first-child > th")], O = (e) => {
|
|
142
|
-
if (u && [...e.querySelectorAll(":scope > tr")].some((e) => !e.dataset.rowKey)) throw Error("A selectable server-paged table needs data-row-key on every row, so a selection can span pages.");
|
|
143
|
-
}, re = (e) => {
|
|
144
|
-
let t = [...e.querySelectorAll(":scope > tr")];
|
|
145
|
-
if (u) {
|
|
146
|
-
Mt(t);
|
|
147
|
-
for (let e of t) {
|
|
148
|
-
let t = e.querySelector(`.${H} .wui-check`);
|
|
149
|
-
t && (t.checked = d.has(e.dataset.rowKey));
|
|
150
|
-
}
|
|
151
|
-
Pt(n);
|
|
152
|
-
}
|
|
153
|
-
let r = D();
|
|
154
|
-
if (n.classList.contains("wui-table-stack")) for (let e of t) [...e.cells].forEach((e, t) => {
|
|
155
|
-
let n = r[t]?.textContent.trim();
|
|
156
|
-
n && !e.hasAttribute("data-label") && e.setAttribute("data-label", n);
|
|
157
|
-
});
|
|
158
|
-
r.forEach((e, n) => {
|
|
159
|
-
if (e.classList.contains("wui-col-hidden")) for (let e of t) e.cells[n]?.classList.add("wui-col-hidden");
|
|
160
|
-
});
|
|
161
|
-
}, ie = (e) => {
|
|
162
|
-
for (let t of e.querySelectorAll(":scope > template[data-wui-pager], :scope > template[data-wui-empty], :scope > template[data-wui-filters]")) t.remove();
|
|
163
|
-
}, k = (e) => e?.dispatchEvent(new CustomEvent("wui:teardown", { bubbles: !0 })), ae = (e, t) => {
|
|
164
|
-
if (!i) return;
|
|
165
|
-
let n = e.querySelector(":scope > template[data-wui-empty]");
|
|
166
|
-
k(i), t.total === 0 && n ? (i.replaceChildren(n.content.cloneNode(!0)), i.hidden = !1) : (i.replaceChildren(), i.hidden = !0);
|
|
167
|
-
}, oe = (e) => {
|
|
168
|
-
let r = zt(e);
|
|
169
|
-
if (a) {
|
|
170
|
-
let t = e.querySelector(":scope > template[data-wui-pager]");
|
|
171
|
-
k(a), a.replaceChildren(...t ? [t.content.cloneNode(!0)] : []), a.hidden = !1;
|
|
172
|
-
}
|
|
173
|
-
ae(e, r);
|
|
174
|
-
let i = e.querySelector(":scope > template[data-wui-filters]"), o = s.filtersRegion && i ? document.querySelector(s.filtersRegion) : null;
|
|
175
|
-
o && (k(o), o.replaceChildren(i.content.cloneNode(!0))), ie(e), k(h), n.replaceChild(e, h), h = e, g = r, t.removeAttribute("data-wui-table-error"), re(e), N();
|
|
176
|
-
}, se = (e) => {
|
|
177
|
-
let t = document.createElement("template");
|
|
178
|
-
t.innerHTML = `<table>${e}</table>`;
|
|
179
|
-
let n = t.content.querySelector("tbody[data-wui-rows]");
|
|
180
|
-
return n && O(n), n ? document.importNode(n, !0) : null;
|
|
181
|
-
}, ce = () => {
|
|
182
|
-
if (h.querySelector(":scope > tr:not([data-wui-skeleton])")) return;
|
|
183
|
-
let e = Math.max(1, D().length);
|
|
184
|
-
h.replaceChildren(...Array.from({ length: It }, () => {
|
|
185
|
-
let t = document.createElement("tr");
|
|
186
|
-
t.setAttribute("data-wui-skeleton", "");
|
|
187
|
-
for (let n = 0; n < e; n++) {
|
|
188
|
-
let e = document.createElement("td"), r = document.createElement("span");
|
|
189
|
-
r.className = "skeleton", r.setAttribute("aria-hidden", "true"), r.style.cssText = `display:block;width:${n === 0 ? 70 : 50}%;height:12px;border-radius:6px`, e.append(r), t.append(e);
|
|
190
|
-
}
|
|
191
|
-
return t;
|
|
192
|
-
})), t.removeAttribute("data-wui-table-error"), i && (i.hidden = !0);
|
|
193
|
-
}, le = (e) => {
|
|
194
|
-
e ? (t.setAttribute("aria-busy", "true"), ce()) : t.removeAttribute("aria-busy");
|
|
195
|
-
}, ue = (e) => e === "forbidden" ? W.forbidden : e === "network" ? W.network : s.errorText, de = (e) => {
|
|
196
|
-
let n = ue(e);
|
|
197
|
-
if (t.setAttribute("data-wui-table-error", e), a && (a.hidden = !0), i) {
|
|
198
|
-
let t = document.createElement("div");
|
|
199
|
-
t.className = "tbl-empty wui-table-error", t.setAttribute("role", "alert");
|
|
200
|
-
let r = document.createElement("span");
|
|
201
|
-
r.className = "tbl-empty-icon", r.innerHTML = M(e === "forbidden" ? "lock" : "alert-circle", { size: 24 });
|
|
202
|
-
let a = document.createElement("div");
|
|
203
|
-
a.className = "tbl-empty-title", a.textContent = n;
|
|
204
|
-
let o = document.createElement("div");
|
|
205
|
-
o.className = "tbl-empty-action";
|
|
206
|
-
let s = document.createElement("button");
|
|
207
|
-
s.type = "button", s.className = "btn btn-outline-primary btn-sm", s.setAttribute("data-wui-table-retry", ""), s.textContent = W.retry, o.append(s), t.append(r, a, o), k(i), i.replaceChildren(t), i.hidden = !1;
|
|
208
|
-
}
|
|
209
|
-
E(n);
|
|
210
|
-
}, A = async (e, t = "none") => {
|
|
211
|
-
let n = new URLSearchParams(e);
|
|
212
|
-
v = {
|
|
213
|
-
query: n,
|
|
214
|
-
mode: t
|
|
215
|
-
}, le(!0), E(s.loadingText), T("wui:table:loading", { query: n.toString() });
|
|
216
|
-
let r = await f.run(ee(n));
|
|
217
|
-
if (r.kind === "aborted" || r.kind === "stale" || r.kind === "session") return r;
|
|
218
|
-
le(!1);
|
|
219
|
-
let i = null, a = r.ok ? null : r.kind;
|
|
220
|
-
if (r.ok) {
|
|
221
|
-
try {
|
|
222
|
-
i = se(r.html);
|
|
223
|
-
} catch (e) {
|
|
224
|
-
console.error(e);
|
|
225
|
-
}
|
|
226
|
-
i || (a = "server");
|
|
227
|
-
}
|
|
228
|
-
return a ? (de(a), T("wui:table:error", {
|
|
229
|
-
status: r.status,
|
|
230
|
-
kind: a,
|
|
231
|
-
message: ue(a)
|
|
232
|
-
}), r) : (oe(i), w = te(n, g), s.urlState && t === "push" ? window.history.pushState(window.history.state, "", C(w)) : s.urlState && t === "replace" && window.history.replaceState(window.history.state, "", C(w)), E(ne(g)), window.WUI?.refresh?.(), T("wui:table:loaded", {
|
|
233
|
-
...g,
|
|
234
|
-
query: w.toString()
|
|
235
|
-
}), r);
|
|
236
|
-
}, j = (e) => (e.delete("page"), e), fe = () => [...n.querySelectorAll(":scope > thead th[data-sort-key]")], N = () => {
|
|
237
|
-
for (let e of fe()) {
|
|
238
|
-
let t = e.dataset.sortKey === g.sortBy;
|
|
239
|
-
e.setAttribute("aria-sort", t ? g.sortOrder === "desc" ? "descending" : "ascending" : "none");
|
|
240
|
-
}
|
|
241
|
-
};
|
|
242
|
-
for (let e of fe()) if (e.classList.add("sortable"), e.tabIndex = 0, !e.querySelector(".sort-icon")) {
|
|
243
|
-
let t = e.classList.contains("num") || e.classList.contains("text-end"), n = document.createElement("span");
|
|
244
|
-
n.className = t ? "sort-icon wui-sort-lead" : "sort-icon", n.innerHTML = M("chevrons-up-down", { size: 14 }), t ? e.prepend(n) : e.append(n);
|
|
245
|
-
}
|
|
246
|
-
let P = (e) => {
|
|
247
|
-
let t = j(new URLSearchParams(w)), n = g.sortBy === e && g.sortOrder === "asc" ? "desc" : "asc";
|
|
248
|
-
return t.set("sortBy", e), t.set("sortOrder", n), A(t, "push");
|
|
249
|
-
};
|
|
250
|
-
n.addEventListener("click", (e) => {
|
|
251
|
-
let t = e.target.closest("th[data-sort-key]");
|
|
252
|
-
t && n.tHead?.contains(t) && P(t.dataset.sortKey);
|
|
253
|
-
}), n.addEventListener("keydown", (e) => {
|
|
254
|
-
if (e.key !== "Enter" && e.key !== " ") return;
|
|
255
|
-
let t = e.target.closest?.("th[data-sort-key]");
|
|
256
|
-
!t || !n.tHead?.contains(t) || (e.preventDefault(), P(t.dataset.sortKey));
|
|
257
|
-
});
|
|
258
|
-
let F = () => {
|
|
259
|
-
Pt(n), n.dispatchEvent(new CustomEvent("selectionchange", {
|
|
260
|
-
bubbles: !0,
|
|
261
|
-
detail: {
|
|
262
|
-
selected: d.size,
|
|
263
|
-
total: g.total
|
|
264
|
-
}
|
|
265
|
-
}));
|
|
266
|
-
};
|
|
267
|
-
u && n.addEventListener("change", (e) => {
|
|
268
|
-
let t = e.target;
|
|
269
|
-
if (t.matches?.(".wui-select-cell .wui-check")) {
|
|
270
|
-
if (n.tHead?.contains(t)) for (let e of h.querySelectorAll(":scope > tr")) {
|
|
271
|
-
let n = e.querySelector(`.${H} .wui-check`);
|
|
272
|
-
n && (n.checked = t.checked, t.checked ? d.add(e.dataset.rowKey) : d.delete(e.dataset.rowKey));
|
|
273
|
-
}
|
|
274
|
-
else {
|
|
275
|
-
let e = t.closest("tr")?.dataset.rowKey;
|
|
276
|
-
if (!e) return;
|
|
277
|
-
t.checked ? d.add(e) : d.delete(e);
|
|
278
|
-
}
|
|
279
|
-
F();
|
|
280
|
-
}
|
|
281
|
-
}), a && (a.addEventListener("click", (e) => {
|
|
282
|
-
let t = e.target.closest("a[href]");
|
|
283
|
-
!t || e.defaultPrevented || e.button !== 0 || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey || (e.preventDefault(), A(S(t.getAttribute("href")), "push"));
|
|
284
|
-
}), a.addEventListener("change", (e) => {
|
|
285
|
-
!e.target.classList?.contains("tpg-select") || !e.target.value || (e.stopPropagation(), A(S(e.target.value), "push"));
|
|
286
|
-
}));
|
|
287
|
-
let I = () => {
|
|
288
|
-
if (!s.searchInput) return null;
|
|
289
|
-
let e = document.querySelector(s.searchInput);
|
|
290
|
-
return e && (e.matches("input, textarea") ? e : e.querySelector("input"));
|
|
291
|
-
}, L = () => e.isConnected ? !0 : (p.abort(), clearTimeout(y), !1), R = (e, t) => {
|
|
292
|
-
let n = t?.name ? new FormData(e, t) : new FormData(e), r = new Set([...e.querySelectorAll("[name]")].map((e) => e.getAttribute("name"))), i = new URLSearchParams();
|
|
293
|
-
for (let [e, t] of w) e !== "page" && (Ft.includes(e) || !r.has(e)) && i.append(e, t);
|
|
294
|
-
for (let [e, t] of n) typeof t != "string" || t === "" || Ft.includes(e) || l.has(e) || i.append(e, t);
|
|
295
|
-
let a = I();
|
|
296
|
-
if (a) {
|
|
297
|
-
i.delete(U);
|
|
298
|
-
let e = a.value.trim();
|
|
299
|
-
e && i.set(U, e);
|
|
300
|
-
}
|
|
301
|
-
return A(i, "push");
|
|
302
|
-
}, z = (e) => s.filtersForm && e.closest?.(s.filtersForm) || s.filtersRegion && e.closest?.(s.filtersRegion) || null;
|
|
303
|
-
document.addEventListener("submit", (e) => {
|
|
304
|
-
!L() || !s.filtersForm || !(e.target instanceof HTMLFormElement) || !e.target.matches(s.filtersForm) || (e.preventDefault(), R(e.target, e.submitter));
|
|
305
|
-
}, m), document.addEventListener("change", (e) => {
|
|
306
|
-
if (!L() || !s.filtersForm) return;
|
|
307
|
-
let t = e.target.closest?.(s.filtersForm);
|
|
308
|
-
!t || e.target === I() || R(t);
|
|
309
|
-
}, m);
|
|
310
|
-
let B = (e, t) => {
|
|
311
|
-
if (!e) return;
|
|
312
|
-
let n = (e) => t.get(e) ?? "";
|
|
313
|
-
for (let r of e.querySelectorAll("input[name]:not([type=hidden])")) if (r.type === "checkbox") r.checked = t.getAll(r.name).includes(r.value);
|
|
314
|
-
else if (r.type === "radio") {
|
|
315
|
-
let e = n(r.name) === r.value;
|
|
316
|
-
if (r.checked === e) continue;
|
|
317
|
-
r.checked = e, e && r.dispatchEvent(new Event("change"));
|
|
318
|
-
} else r.value !== n(r.name) && (r.value = n(r.name), r.dispatchEvent(new Event("input", { bubbles: !0 })));
|
|
319
|
-
for (let r of e.querySelectorAll("select[name]")) if (!r.multiple) r.value = n(r.name);
|
|
320
|
-
else for (let e of r.options) e.selected = t.getAll(r.name).includes(e.value);
|
|
321
|
-
for (let t of e.querySelectorAll("wui-select[name]")) t.value = n(t.getAttribute("name"));
|
|
322
|
-
for (let n of e.querySelectorAll("wui-multiselect[name]")) n.values = t.getAll(n.getAttribute("name"));
|
|
323
|
-
for (let t of e.querySelectorAll("wui-date-range")) {
|
|
324
|
-
let e = t.getAttribute("start-name") || t.getAttribute("name"), r = t.getAttribute("end-name");
|
|
325
|
-
t.value = {
|
|
326
|
-
start: e ? n(e) : "",
|
|
327
|
-
end: r ? n(r) : ""
|
|
328
|
-
};
|
|
329
|
-
}
|
|
330
|
-
};
|
|
331
|
-
document.addEventListener("click", (e) => {
|
|
332
|
-
if (!L()) return;
|
|
333
|
-
let t = e.target.closest?.("a[href]");
|
|
334
|
-
if (!t || !z(t) || e.defaultPrevented || e.button !== 0 || e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) return;
|
|
335
|
-
let n = new URL(t.getAttribute("href"), window.location.href);
|
|
336
|
-
if (n.origin !== window.location.origin || n.pathname !== window.location.pathname) return;
|
|
337
|
-
e.preventDefault();
|
|
338
|
-
let r = j(S(n.href));
|
|
339
|
-
B(t.closest("form"), r), A(r, "push");
|
|
340
|
-
}, m), document.addEventListener("input", (e) => {
|
|
341
|
-
if (!L()) return;
|
|
342
|
-
let t = I();
|
|
343
|
-
!t || e.target !== t || (clearTimeout(y), y = setTimeout(() => {
|
|
344
|
-
let e = j(new URLSearchParams(w)), n = t.value.trim();
|
|
345
|
-
n ? e.set(U, n) : e.delete(U), e.toString() !== w.toString() && A(e, "replace");
|
|
346
|
-
}, 300));
|
|
347
|
-
}, m), s.urlState && window.addEventListener("popstate", () => {
|
|
348
|
-
if (!L()) return;
|
|
349
|
-
let e = x(window.location.search), t = I();
|
|
350
|
-
t && (t.value = e.get("search") ?? ""), A(e, "none");
|
|
351
|
-
}, m), document.addEventListener("wui:modal:success", () => {
|
|
352
|
-
L() && s.refreshOnSuccess && A(w, "none");
|
|
353
|
-
}, m), i?.addEventListener("click", (e) => {
|
|
354
|
-
e.target.closest("[data-wui-table-retry]") && v && A(v.query, v.mode);
|
|
355
|
-
});
|
|
356
|
-
let V = async (e) => {
|
|
357
|
-
let t = e.dataset.url;
|
|
358
|
-
if (!t) throw Error("A data-wui-row-action button needs data-url: the handler the action posts to.");
|
|
359
|
-
let n = e.closest("tr")?.dataset.rowKey ?? null, r = e.dataset.wuiRowAction || "";
|
|
360
|
-
e.disabled = !0, e.setAttribute("aria-busy", "true");
|
|
361
|
-
let i = await _(t, { method: (e.dataset.method || "post").toUpperCase() });
|
|
362
|
-
if (e.disabled = !1, e.removeAttribute("aria-busy"), i.kind === "session" || i.kind === "aborted") return;
|
|
363
|
-
let a = i.message;
|
|
364
|
-
i.ok ? (Bt(a, i.toastVariant || "success"), await A(w, "none")) : Bt(a || (i.kind === "forbidden" ? W.actionForbidden : W.actionFailed), "danger"), T("wui:table:action", {
|
|
365
|
-
action: r,
|
|
366
|
-
key: n,
|
|
367
|
-
ok: i.ok,
|
|
368
|
-
status: i.status
|
|
369
|
-
});
|
|
370
|
-
};
|
|
371
|
-
return n.addEventListener("click", (e) => {
|
|
372
|
-
let t = e.target.closest("[data-wui-row-action]");
|
|
373
|
-
!t || !h.contains(t) || t.disabled || (e.preventDefault(), V(t));
|
|
374
|
-
}), O(h), ie(h), u && Nt(n), re(h), N(), {
|
|
375
|
-
el: e,
|
|
376
|
-
reload: () => A(w, "none"),
|
|
377
|
-
query: () => new URLSearchParams(w),
|
|
378
|
-
setQuery: (e) => {
|
|
379
|
-
let t = new URLSearchParams(w);
|
|
380
|
-
for (let [n, r] of Object.entries(e ?? {})) {
|
|
381
|
-
t.delete(n);
|
|
382
|
-
for (let e of Array.isArray(r) ? r : [r]) e != null && e !== "" && t.append(n, String(e));
|
|
383
|
-
}
|
|
384
|
-
return (!e || !("page" in e)) && t.delete("page"), A(t, "push");
|
|
385
|
-
},
|
|
386
|
-
selection: {
|
|
387
|
-
keys: () => [...d],
|
|
388
|
-
count: () => d.size,
|
|
389
|
-
clear: () => {
|
|
390
|
-
d.clear();
|
|
391
|
-
for (let e of h.querySelectorAll(`:scope > tr > .${H} .wui-check`)) e.checked = !1;
|
|
392
|
-
F();
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
};
|
|
396
|
-
}
|
|
397
|
-
//#endregion
|
|
398
|
-
//#region src/serverActions.js
|
|
399
|
-
var G = "wuiConfirm", Wt = Object.freeze(["danger"]), Gt = Object.freeze([
|
|
400
|
-
"success",
|
|
401
|
-
"info",
|
|
402
|
-
"warning",
|
|
403
|
-
"danger"
|
|
404
|
-
]), K = "wui.flash", q = Object.freeze({
|
|
405
|
-
confirmTitle: "Are you sure?",
|
|
406
|
-
confirmLabel: "Confirm",
|
|
407
|
-
cancelLabel: "Cancel",
|
|
408
|
-
failed: "That did not work. Try again.",
|
|
409
|
-
forbidden: "You do not have permission to do that.",
|
|
410
|
-
network: "Could not reach the server. Check your connection and try again."
|
|
411
|
-
}), Kt = /* @__PURE__ */ new WeakSet(), J = null, Y = null, X = !1, qt = (e) => {
|
|
412
|
-
let t = document.createElement("span");
|
|
413
|
-
return t.textContent = e ?? "", t.innerHTML;
|
|
414
|
-
}, Z = (e, t) => {
|
|
415
|
-
e && window.WUI?.toast?.(e, { variant: t });
|
|
416
|
-
}, Jt = () => {
|
|
417
|
-
let e = window.bootstrap?.Modal;
|
|
418
|
-
if (!e) throw Error("data-wui-confirm: Bootstrap's bundle (window.bootstrap) is not loaded on this page.");
|
|
419
|
-
return e;
|
|
420
|
-
};
|
|
421
|
-
function Yt() {
|
|
422
|
-
let e = document.getElementById(G);
|
|
423
|
-
return e || (e = document.createElement("div"), e.id = G, e.className = "modal fade wui-modal-shell", e.tabIndex = -1, e.setAttribute("aria-hidden", "true"), e.setAttribute("role", "dialog"), e.setAttribute("aria-modal", "true"), e.style.setProperty("--wui-modal-max-width", `${ee.md}px`), e.innerHTML = `<div class="modal-dialog modal-dialog-centered wui-rb-dialog"><div class="modal-content wui-modal wui-confirm"><div class="wui-modal-body"><div class="wui-confirm-content"><span class="wui-confirm-icon"><wui-status-icon tone="info" size="120"></wui-status-icon></span><h3 class="wui-confirm-title" tabindex="-1" data-autofocus></h3><p class="wui-confirm-msg"></p></div></div><div class="wui-modal-footer"><div class="wui-confirm-actions"><button type="button" class="btn btn-secondary" data-bs-dismiss="modal">${qt(q.cancelLabel)}</button><button type="button" class="btn btn-primary" data-app-confirm></button></div></div></div></div>`, document.body.appendChild(e), e);
|
|
424
|
-
}
|
|
425
|
-
function Xt(e, t) {
|
|
426
|
-
let n = e.getAttribute("data-wui-confirm-tone");
|
|
427
|
-
if (n !== null && !Wt.includes(n)) throw TypeError(`data-wui-confirm-tone="${n}" is not supported. Use danger, or leave it off.`);
|
|
428
|
-
let r = Jt(), i = Yt(), a = i.querySelector(".wui-confirm-title"), o = i.querySelector("[data-app-confirm]");
|
|
429
|
-
if (!a || !o) throw Error(`#${G} is not a confirm dialog with a confirm button. Render <app-confirm-dialog id="${G}"> without confirm-href, or leave the dialog to the library.`);
|
|
430
|
-
let s = i.querySelector(".wui-confirm-msg");
|
|
431
|
-
s || (s = document.createElement("p"), s.className = "wui-confirm-msg", a.after(s));
|
|
432
|
-
let c = n === "danger";
|
|
433
|
-
a.textContent = e.getAttribute("data-wui-confirm-title") || q.confirmTitle, s.textContent = e.getAttribute("data-wui-confirm"), o.textContent = e.getAttribute("data-wui-confirm-label") || q.confirmLabel, o.classList.toggle("btn-danger", c), o.classList.toggle("btn-primary", !c), i.querySelector("wui-status-icon")?.setAttribute("tone", c ? "delete" : "info"), i.setAttribute("aria-label", a.textContent), Y = t, X = !1, r.getOrCreateInstance(i).show();
|
|
434
|
-
}
|
|
435
|
-
var Zt = (e, t) => {
|
|
436
|
-
J = e;
|
|
437
|
-
try {
|
|
438
|
-
t();
|
|
439
|
-
} finally {
|
|
440
|
-
J = null;
|
|
441
|
-
}
|
|
442
|
-
}, Qt = (e) => e.disabled === !0 || e.getAttribute("aria-disabled") === "true";
|
|
443
|
-
function $t(e) {
|
|
444
|
-
let t = e.target.closest?.("[data-wui-confirm]:not(form)");
|
|
445
|
-
!t || t === J || Qt(t) || (e.preventDefault(), e.stopImmediatePropagation(), Xt(t, () => Zt(t, () => t.click())));
|
|
446
|
-
}
|
|
447
|
-
function en(e) {
|
|
448
|
-
let t = e.target;
|
|
449
|
-
if (!(t instanceof HTMLFormElement) || !t.hasAttribute("data-wui-confirm") || t === J || e.submitter && e.submitter === J) return;
|
|
450
|
-
e.preventDefault(), e.stopImmediatePropagation();
|
|
451
|
-
let n = e.submitter?.form === t ? e.submitter : void 0;
|
|
452
|
-
Xt(t, () => Zt(t, () => t.requestSubmit(n)));
|
|
453
|
-
}
|
|
454
|
-
function tn(e) {
|
|
455
|
-
let t = e.target.closest?.(`#${G} [data-app-confirm]`);
|
|
456
|
-
!t || t.disabled || !Y || (X = !0, Jt().getOrCreateInstance(t.closest(`#${G}`)).hide());
|
|
457
|
-
}
|
|
458
|
-
function nn(e) {
|
|
459
|
-
if (e.target.id !== "wuiConfirm") return;
|
|
460
|
-
let t = X ? Y : null;
|
|
461
|
-
Y = null, X = !1, t?.();
|
|
462
|
-
}
|
|
463
|
-
var rn = (e, t) => {
|
|
464
|
-
e && window.sessionStorage.setItem(K, JSON.stringify({
|
|
465
|
-
message: e,
|
|
466
|
-
variant: t
|
|
467
|
-
}));
|
|
468
|
-
}, an = (e) => e === "forbidden" ? q.forbidden : e === "network" ? q.network : q.failed;
|
|
469
|
-
function on() {
|
|
470
|
-
for (let e of document.querySelectorAll("[data-wui-server]")) e.dataset.refreshOnSuccess !== "false" && Ht(e)?.reload();
|
|
471
|
-
}
|
|
472
|
-
async function sn(e) {
|
|
473
|
-
let t = e.getAttribute("data-wui-post");
|
|
474
|
-
if (!t) throw Error("A data-wui-post button needs the URL the action posts to.");
|
|
475
|
-
let n = e.getAttribute("data-wui-post-reload");
|
|
476
|
-
if (n !== null && n !== "page") throw TypeError(`data-wui-post-reload="${n}" is not supported. Use page, or leave it off to reload the server tables.`);
|
|
477
|
-
e.disabled = !0, e.setAttribute("aria-busy", "true");
|
|
478
|
-
let r = await _(t, { method: "POST" });
|
|
479
|
-
if (r.kind === "session" || r.kind === "aborted") return;
|
|
480
|
-
let i = r.toastVariant || "success";
|
|
481
|
-
if (r.ok && (r.redirect || n === "page")) {
|
|
482
|
-
rn(r.message, i), r.redirect ? window.location.assign(r.redirect) : window.location.reload();
|
|
483
|
-
return;
|
|
484
|
-
}
|
|
485
|
-
if (e.disabled = !1, e.removeAttribute("aria-busy"), r.ok) {
|
|
486
|
-
Z(r.message, i), on();
|
|
487
|
-
return;
|
|
488
|
-
}
|
|
489
|
-
Z(r.message || an(r.kind), "danger");
|
|
490
|
-
}
|
|
491
|
-
function cn(e) {
|
|
492
|
-
let t = e.target.closest?.("[data-wui-post]");
|
|
493
|
-
t && (e.preventDefault(), !(Qt(t) || t.getAttribute("aria-busy") === "true") && sn(t).catch((e) => console.error(e)));
|
|
494
|
-
}
|
|
495
|
-
function ln() {
|
|
496
|
-
let e = window.sessionStorage.getItem(K);
|
|
497
|
-
if (!e) return;
|
|
498
|
-
window.sessionStorage.removeItem(K);
|
|
499
|
-
let { message: t, variant: n } = JSON.parse(e);
|
|
500
|
-
Z(t, n);
|
|
501
|
-
}
|
|
502
|
-
function un(e) {
|
|
503
|
-
let t = e.querySelectorAll ? [...e.querySelectorAll("[data-wui-flash]")] : [];
|
|
504
|
-
e instanceof Element && e.matches("[data-wui-flash]") && t.unshift(e);
|
|
505
|
-
for (let e of t) {
|
|
506
|
-
let t = e.getAttribute("data-wui-flash-variant") || "success";
|
|
507
|
-
if (!Gt.includes(t)) throw TypeError(`data-wui-flash-variant="${t}" is not supported. Use ${Gt.join(", ")}.`);
|
|
508
|
-
let n = e.getAttribute("data-wui-flash") || e.textContent.trim();
|
|
509
|
-
e.remove(), Z(n, t);
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
function dn(e = document) {
|
|
513
|
-
let t = e.ownerDocument || e;
|
|
514
|
-
Kt.has(t) || (Kt.add(t), t.addEventListener("click", $t, !0), t.addEventListener("submit", en, !0), t.addEventListener("click", tn), t.addEventListener("click", cn), t.addEventListener("hidden.bs.modal", nn), ln()), un(e);
|
|
515
|
-
}
|
|
516
|
-
var fn = 31536e3, Q = /* @__PURE__ */ new WeakMap(), pn = (e) => e > 99 ? "99+" : String(e);
|
|
517
|
-
function mn(e, t, n = document) {
|
|
518
|
-
n.cookie = `${e}=${t ? "1" : "0"}; Path=/; Max-Age=${fn}; SameSite=Lax`;
|
|
519
|
-
}
|
|
520
|
-
var hn = (e) => {
|
|
521
|
-
let t = document.createElement("template");
|
|
522
|
-
return t.innerHTML = e, t.content;
|
|
523
|
-
}, $ = (e, t) => {
|
|
524
|
-
let n = document.createElement("div");
|
|
525
|
-
return n.className = e, n.textContent = t, n;
|
|
526
|
-
};
|
|
527
|
-
function gn(e, t) {
|
|
528
|
-
let n = e.querySelector(".wui-bell-trigger"), r = e.querySelector(".wui-bell-count"), i = e.querySelector("[data-wui-bell-live]"), a = e.querySelector("[data-wui-bell-list]"), o = e.querySelector(".wui-bell-menu"), { src: s, readAction: c } = e.dataset, l = e.dataset.label || "Notifications", u = e.dataset.emptyText || "You are all caught up.", d = Number(e.dataset.pollSeconds ?? 60), f = b(), p = Number(e.dataset.unread) || 0, m = (t, a = !0) => {
|
|
529
|
-
let o = Math.max(0, Number(t) || 0), s = o !== p;
|
|
530
|
-
p = o, e.dataset.unread = String(o), r && (r.textContent = pn(o), r.hidden = o === 0), n?.setAttribute("aria-label", o === 0 ? l : `${l}, ${pn(o)} unread`), a && s && i && (i.textContent = o === 0 ? "No unread notifications" : `${pn(o)} unread notifications`);
|
|
531
|
-
}, h = () => o?.classList.contains("show") ?? !1, g = () => {
|
|
532
|
-
let e = $("wui-bell-state", "Could not load notifications. "), t = document.createElement("button");
|
|
533
|
-
t.type = "button", t.className = "btn btn-link btn-sm", t.dataset.wuiBellRetry = "", t.textContent = "Retry", e.append(t), a.replaceChildren(e);
|
|
534
|
-
}, v = async (t) => {
|
|
535
|
-
t && (a.setAttribute("aria-busy", "true"), a.querySelector(".wui-bell-item") || a.replaceChildren($("wui-bell-state", "Loading…")));
|
|
536
|
-
let n = await f.run(s);
|
|
537
|
-
if (n.kind === "aborted" || n.kind === "stale" || n.kind === "session") return;
|
|
538
|
-
if (a.removeAttribute("aria-busy"), !n.ok) {
|
|
539
|
-
t && g();
|
|
540
|
-
return;
|
|
541
|
-
}
|
|
542
|
-
let r = hn(n.html), i = r.querySelector("[data-wui-unread]"), o = i ? Number(i.getAttribute("data-wui-unread")) : p;
|
|
543
|
-
m(o), (t || h()) && (r.querySelector(".wui-bell-item") ? a.replaceChildren(r) : a.replaceChildren($("wui-bell-state", u))), e.dispatchEvent(new CustomEvent("wui:notifications:loaded", {
|
|
544
|
-
bubbles: !0,
|
|
545
|
-
detail: { unread: o }
|
|
546
|
-
}));
|
|
547
|
-
};
|
|
548
|
-
e.addEventListener("show.bs.dropdown", () => v(!0)), e.addEventListener("click", async (e) => {
|
|
549
|
-
if (e.target.closest("[data-wui-bell-retry]")) {
|
|
550
|
-
v(!0);
|
|
551
|
-
return;
|
|
552
|
-
}
|
|
553
|
-
let t = e.target.closest("[data-wui-bell-read]");
|
|
554
|
-
if (!t || !c) return;
|
|
555
|
-
t.disabled = !0;
|
|
556
|
-
let n = await _(c, { method: "POST" });
|
|
557
|
-
t.disabled = !1, n.ok && (m(0), v(!0));
|
|
558
|
-
});
|
|
559
|
-
let y = null, x = () => {
|
|
560
|
-
d > 0 && y === null && (y = setInterval(() => v(h()), d * 1e3));
|
|
561
|
-
}, S = () => {
|
|
562
|
-
y !== null && clearInterval(y), y = null;
|
|
563
|
-
}, C = () => {
|
|
564
|
-
document.hidden ? S() : (v(h()), x());
|
|
565
|
-
};
|
|
566
|
-
return d > 0 && (document.addEventListener("visibilitychange", C), document.hidden || x()), t.push(() => {
|
|
567
|
-
S(), f.abort(), document.removeEventListener("visibilitychange", C);
|
|
568
|
-
}), {
|
|
569
|
-
setUnread: (e) => m(e),
|
|
570
|
-
refresh: () => v(h())
|
|
571
|
-
};
|
|
572
|
-
}
|
|
573
|
-
var _n = (e) => !!e && (e.isContentEditable || /^(INPUT|TEXTAREA|SELECT)$/.test(e.tagName)), vn = (e, t, n) => `${e}${e.includes("?") ? "&" : "?"}${encodeURIComponent(t)}=${encodeURIComponent(n)}`;
|
|
574
|
-
function yn(e, t) {
|
|
575
|
-
let n = e.querySelector("input.search-input"), r = e.querySelector(".wui-topsearch-results"), i = e.querySelector(".wui-topsearch-open"), a = e.querySelector("[data-wui-topsearch-live]"), { src: o, param: s = "q", resultsHref: c } = e.dataset, l = Number(e.dataset.minChars ?? 2), u = Number(e.dataset.debounceMs ?? 250), d = b(), f = null, p = -1, m = () => [...r.querySelectorAll(".wui-topsearch-hit")], h = (e) => {
|
|
576
|
-
let t = m();
|
|
577
|
-
p = t.length === 0 ? -1 : (e + t.length) % t.length, t.forEach((e, t) => {
|
|
578
|
-
let n = t === p;
|
|
579
|
-
e.classList.toggle("is-active", n), e.setAttribute("aria-selected", n ? "true" : "false");
|
|
580
|
-
}), p >= 0 ? (n.setAttribute("aria-activedescendant", t[p].id), t[p].scrollIntoView?.({ block: "nearest" })) : n.removeAttribute("aria-activedescendant");
|
|
581
|
-
}, g = () => {
|
|
582
|
-
r.hidden = !0, n.setAttribute("aria-expanded", "false"), n.removeAttribute("aria-activedescendant"), p = -1;
|
|
583
|
-
}, _ = () => {
|
|
584
|
-
r.hidden = !1, n.setAttribute("aria-expanded", "true");
|
|
585
|
-
}, v = (t) => {
|
|
586
|
-
e.classList.toggle("is-open", t), i?.setAttribute("aria-expanded", t ? "true" : "false");
|
|
587
|
-
}, y = (t) => {
|
|
588
|
-
let n = new CustomEvent("wui:search:select", {
|
|
589
|
-
bubbles: !0,
|
|
590
|
-
cancelable: !0,
|
|
591
|
-
detail: { href: t }
|
|
592
|
-
});
|
|
593
|
-
e.dispatchEvent(n) && window.location.assign(t);
|
|
594
|
-
}, x = async (t) => {
|
|
595
|
-
e.classList.add("is-loading");
|
|
596
|
-
let n = await d.run(vn(o, s, t));
|
|
597
|
-
if (!(n.kind === "aborted" || n.kind === "stale" || n.kind === "session")) {
|
|
598
|
-
if (e.classList.remove("is-loading"), n.ok) {
|
|
599
|
-
let e = hn(n.html), t = e.querySelector("[data-wui-count]");
|
|
600
|
-
r.replaceChildren(e), m().forEach((e, t) => {
|
|
601
|
-
e.id = `${r.id}-opt-${t}`;
|
|
602
|
-
});
|
|
603
|
-
let i = t ? Number(t.getAttribute("data-wui-count")) : m().length;
|
|
604
|
-
a && (a.textContent = i === 0 ? "No results" : `${i} ${i === 1 ? "result" : "results"}`);
|
|
605
|
-
} else r.replaceChildren($("wui-topsearch-empty", "Search is unavailable right now."));
|
|
606
|
-
p = -1, _();
|
|
607
|
-
}
|
|
608
|
-
};
|
|
609
|
-
n.addEventListener("input", () => {
|
|
610
|
-
clearTimeout(f);
|
|
611
|
-
let t = n.value.trim();
|
|
612
|
-
if (t.length < l) {
|
|
613
|
-
d.abort(), e.classList.remove("is-loading"), r.replaceChildren(), g();
|
|
614
|
-
return;
|
|
615
|
-
}
|
|
616
|
-
f = setTimeout(() => x(t), u);
|
|
617
|
-
}), n.addEventListener("keydown", (t) => {
|
|
618
|
-
if (t.key === "ArrowDown" || t.key === "ArrowUp") {
|
|
619
|
-
if (r.hidden || m().length === 0) return;
|
|
620
|
-
t.preventDefault(), h(p + (t.key === "ArrowDown" ? 1 : -1));
|
|
621
|
-
} else if (t.key === "Enter") {
|
|
622
|
-
let e = m();
|
|
623
|
-
!r.hidden && p >= 0 && e[p] ? (t.preventDefault(), y(e[p].getAttribute("href"))) : c && n.value.trim() !== "" && (t.preventDefault(), y(vn(c, s, n.value.trim())));
|
|
624
|
-
} else t.key === "Escape" && (r.hidden ? e.classList.contains("is-open") && (t.preventDefault(), v(!1), i?.focus()) : (t.preventDefault(), g()));
|
|
625
|
-
}), r.addEventListener("click", (e) => {
|
|
626
|
-
let t = e.target.closest(".wui-topsearch-hit");
|
|
627
|
-
!t || e.ctrlKey || e.metaKey || e.shiftKey || e.button === 1 || (e.preventDefault(), y(t.getAttribute("href")));
|
|
628
|
-
}), i?.addEventListener("click", () => {
|
|
629
|
-
let t = !e.classList.contains("is-open");
|
|
630
|
-
v(t), t && n.focus();
|
|
631
|
-
});
|
|
632
|
-
let S = (e) => {
|
|
633
|
-
e.key !== "/" || e.ctrlKey || e.metaKey || e.altKey || _n(e.target) || (e.preventDefault(), v(!0), n.focus());
|
|
634
|
-
}, C = (t) => {
|
|
635
|
-
e.contains(t.target) || (g(), e.classList.contains("is-open") && v(!1));
|
|
636
|
-
};
|
|
637
|
-
document.addEventListener("keydown", S), document.addEventListener("pointerdown", C), t.push(() => {
|
|
638
|
-
clearTimeout(f), d.abort(), document.removeEventListener("keydown", S), document.removeEventListener("pointerdown", C);
|
|
639
|
-
});
|
|
640
|
-
}
|
|
641
|
-
function bn(e) {
|
|
642
|
-
let t = [], n = e.dataset.wuiCollapsedCookie;
|
|
643
|
-
n && e.addEventListener("wui:shell:collapse", (e) => mn(n, !!e.detail?.collapsed)), e.addEventListener("click", (t) => {
|
|
644
|
-
t.target.closest("[data-wui-tabbar-more]") && e.querySelector("[data-app-shell-menu]")?.click();
|
|
645
|
-
});
|
|
646
|
-
let r = e.querySelector("[data-wui-bell]"), i = r ? gn(r, t) : null, a = e.querySelector("[data-wui-topsearch]");
|
|
647
|
-
a && yn(a, t);
|
|
648
|
-
let o = {
|
|
649
|
-
el: e,
|
|
650
|
-
setUnread(e) {
|
|
651
|
-
if (!i) throw Error("WUI.shell: this <app-shell> has no <app-shell-notifications>.");
|
|
652
|
-
i.setUnread(e);
|
|
653
|
-
},
|
|
654
|
-
refreshNotifications() {
|
|
655
|
-
if (!i) throw Error("WUI.shell: this <app-shell> has no <app-shell-notifications>.");
|
|
656
|
-
return i.refresh();
|
|
657
|
-
},
|
|
658
|
-
get collapsed() {
|
|
659
|
-
return e.classList.contains("collapsed");
|
|
660
|
-
},
|
|
661
|
-
set collapsed(t) {
|
|
662
|
-
if (!!t === e.classList.contains("collapsed")) return;
|
|
663
|
-
let n = e.querySelector("[data-app-shell-collapse]");
|
|
664
|
-
n ? n.click() : e.classList.toggle("collapsed", !!t);
|
|
665
|
-
}
|
|
666
|
-
};
|
|
667
|
-
Q.set(e, o);
|
|
668
|
-
let s = (n) => {
|
|
669
|
-
if (n.target === e || n.target.contains?.(e)) {
|
|
670
|
-
for (let e of t) e();
|
|
671
|
-
Q.delete(e), delete e.dataset.wuiPartsWired, document.removeEventListener("wui:teardown", s);
|
|
672
|
-
}
|
|
673
|
-
};
|
|
674
|
-
return document.addEventListener("wui:teardown", s), o;
|
|
675
|
-
}
|
|
676
|
-
function xn(e = document) {
|
|
677
|
-
let t = [];
|
|
678
|
-
e instanceof Element && e.matches("[data-app-shell]") && t.push(e), t.push(...e.querySelectorAll("[data-app-shell]"));
|
|
679
|
-
for (let e of t) e.dataset.wuiPartsWired || (e.dataset.wuiPartsWired = "1", bn(e));
|
|
680
|
-
}
|
|
681
|
-
function Sn(e) {
|
|
682
|
-
let t = e?.closest?.("[data-app-shell]") ?? null;
|
|
683
|
-
return t ? (Q.has(t) || xn(t), Q.get(t) ?? null) : null;
|
|
684
|
-
}
|
|
685
|
-
//#endregion
|
|
686
|
-
//#region src/index.js
|
|
687
|
-
function Cn() {
|
|
688
|
-
e("wui-select", R), e("wui-country-select", z), e("wui-phone", _e), e("wui-datepicker", B), e("wui-date-range", V), e("wui-dock", pe), e("wui-image-crop", me), e("wui-kanban", w), e("wui-consent-banner", I), e("wui-slider", ve), e("wui-sortable", ye), e("wui-timepicker", xe), e("wui-tour", Ce), e("wui-tree", we), e("wui-autocomplete", N), e("wui-command-palette", F), e("wui-context-menu", L), e("wui-multiselect", he), e("wui-taginput", be), e("wui-otp", ge), e("wui-status-icon", j), e("wui-wizard-step", Ee), e("wui-wizard", Te);
|
|
689
|
-
}
|
|
690
|
-
Cn();
|
|
691
|
-
//#endregion
|
|
692
|
-
export { Ye as AVATAR_ACCEPT, Ne as AVATAR_MAX_SIZE_MB, Le as AVATAR_OUTPUT_SIZE, ht as AVATAR_OUTPUT_TYPE, Ie as AVATAR_PREVIEW_SIZES, Ze as AVATAR_TEXT, G as CONFIRM_DIALOG_ID, Wt as CONFIRM_TONES, Pe as COPY_FEEDBACK_MS, C as CSRF_META_NAME, m as CURRENCIES, l as DATE_PATTERNS, y as DEFAULT_CSRF_HEADER, He as DEFAULT_IMAGE_ACCEPT, Me as DEFAULT_MAX_SIZE_MB, Ct as DEFAULT_PASSWORD_RULES, tt as DEFAULT_REQUIREMENTS_TITLE, vt as DEFAULT_THEME_EFFECT, ft as DEFAULT_THEME_STORAGE_KEY, f as DURATION_UNITS, o as EMPTY_VALUE, K as FLASH_STORAGE_KEY, Gt as FLASH_VARIANTS, t as FORMAT_STYLES, x as HTTP_KINDS, u as IST_TIME_ZONE, le as KANBAN_DRAG_THRESHOLD_PX, k as KANBAN_LONG_PRESS_MS, se as KANBAN_PHONE_QUERY, O as KANBAN_STORAGE_PREFIX, te as KANBAN_SUMMARY_FORMATS, ae as KANBAN_TEXT, ce as KANBAN_TONES, xt as MASK_INPUT_TYPES, Ke as MASK_NAMES, p as MONEY_UNITS, Tt as SELECT_ALL_LABEL, H as SELECT_CELL_CLASS, Et as SELECT_ROW_LABEL, q as SERVER_ACTION_TEXT, fe as STATUS_TONES, gt as THEME_BOOT_SCRIPT_BODY, st as THEME_CHANGE_EVENT, et as THEME_EFFECTS, pt as THEME_EFFECT_DURATION, _t as THEME_LIVE_NAME, nt as THEME_MODES, ut as THEME_SWITCHING_CLASS, v as WUI_HEADERS, N as WuiAutocomplete, F as WuiCommandPalette, I as WuiConsentBanner, L as WuiContextMenu, z as WuiCountrySelect, B as WuiDatePicker, V as WuiDateRange, pe as WuiDock, me as WuiImageCrop, w as WuiKanban, he as WuiMultiSelect, ge as WuiOtp, _e as WuiPhone, R as WuiSelect, ve as WuiSlider, ye as WuiSortable, j as WuiStatusIcon, be as WuiTagInput, xe as WuiTimePicker, Ce as WuiTour, we as WuiTree, Te as WuiWizard, Ee as WuiWizardStep, Fe as acceptLabel, Mt as addRowSelectCells, Nt as addSelectColumn, yt as applyTheme, je as attachInputMask, Xe as avatarCropOptions, Qe as avatarUnreadableMessage, St as buildPasswordRules, g as classifyStatus, qe as copyTextToClipboard, Se as createLocalSeenStore, b as createRequestQueue, Ot as createSelectHeaderCell, kt as createSelectRowCell, At as createSelectSpacerCell, Cn as defineWeborityElements, Ge as evaluatePassword, n as formatCompact, s as formatCurrency, h as formatDate, r as formatDuration, Ae as formatMasked, i as formatNumber, d as formatPercent, c as formatValue, Ht as getServerTable, Sn as getShell, M as glyphSvg, Ve as initInputMasks, de as initRemoteModals, dn as initServerActions, Vt as initServerTables, xn as initShellParts, Ue as isHeicFile, Re as isImageFile, We as isImageOnlyAccept, lt as isMaskPattern, wt as isPdfFile, re as kanbanCardLabel, ue as kanbanOverflow, T as kanbanStorageKey, E as kanbanSummaryFormat, oe as kanbanVisibleLimit, A as loadRemoteModal, De as maskedPostValue, P as matchSegments, Oe as matchesAccept, rt as nextTheme, ke as passwordSatisfies, ct as postedMasked, ze as rawMasked, S as readCsrf, ie as readKanbanCollapsed, it as readStoredTheme, Be as resolveMask, mt as resolveTheme, dt as storeTheme, D as sumKanbanValues, Pt as syncSelectAll, ot as themeBootScript, at as themeKeyframes, a as toInstant, $e as transitionTheme, Je as validateFile, bt as watchSystemTheme, ne as writeKanbanCollapsed, _ as wuiFetch };
|
|
1
|
+
import{n as e}from"./elementBase-BlsR4tqa.js";import{a as t,c as n,d as r,f as i,h as a,i as o,l as s,m as c,n as l,o as u,p as d,r as f,s as p,t as m,u as h}from"./formatters-BAE__8ye.js";import{a as g,c as _,i as v,n as y,o as b,r as x,s as S,t as C}from"./wuiHttp-BC8co934.js";import{_ as ee,a as te,c as w,d as T,f as E,g as ne,h as D,i as O,l as re,m as ie,n as k,o as ae,p as oe,r as se,s as ce,t as le,u as ue,v as de,y as A}from"./kanban-CdELdS3U.js";import{n as j,t as M}from"./statusIcons-2X4iGkKL.js";import{t as N}from"./iconGlyphs.g-CUm_mfze.js";import{t as P}from"./WuiAutocomplete-Comrnbmf.js";import{t as F}from"./textMatch-wdY7XLIc.js";import{t as I}from"./WuiCommandPalette-CKna1GlO.js";import{t as L}from"./WuiConsentBanner-CFll7vxN.js";import{t as R}from"./WuiContextMenu-CBy0O4HT.js";import{t as z}from"./WuiSelect-DvtN4qC2.js";import{t as B}from"./WuiCountrySelect-oLBUHvMM.js";import{t as V}from"./WuiDatePicker-nB1B3eWW.js";import{t as fe}from"./WuiDateRange-Di5YE9mg.js";import{t as pe}from"./WuiDock-BD2HgMmP.js";import{t as me}from"./WuiImageCrop-Cr3D2iPo.js";import{t as he}from"./WuiMultiSelect-BUw-7apM.js";import{t as ge}from"./WuiOtp-BbO_75RB.js";import{t as _e}from"./WuiPhone-GJglNelp.js";import{t as ve}from"./WuiSlider-Br6V2amU.js";import{t as ye}from"./WuiSortable-Bd7Fz5Ox.js";import{t as be}from"./WuiTagInput-DzEZooIn.js";import{t as xe}from"./WuiTimePicker-Bolpp93P.js";import{n as Se,t as Ce}from"./WuiTour-DiKZEWeb.js";import{t as we}from"./WuiTree-SA0QU9AF.js";import{n as Te,t as Ee}from"./WuiWizardStep-DIHxrXn9.js";import{$ as De,A as Oe,B as ke,C as Ae,D as je,E as Me,F as Ne,G as Pe,H as Fe,I as Ie,J as Le,K as Re,L as ze,M as Be,N as Ve,O as He,P as Ue,Q as We,R as Ge,S as Ke,T as qe,U as Je,V as Ye,W as Xe,X as Ze,Y as Qe,Z as $e,_ as et,a as tt,b as nt,c as rt,d as it,et as at,f as ot,g as st,h as ct,i as lt,j as ut,k as dt,l as ft,m as pt,n as mt,o as ht,p as gt,q as _t,r as vt,s as yt,t as bt,tt as xt,u as St,v as Ct,w as wt,x as Tt,y as Et,z as Dt}from"./themeTransition-lkmQm8FR.js";var Ot=`Select all rows`,kt=`Select row`,H=`wui-select-cell`,At=(e,t)=>{let n=e.createElement(`input`);return n.type=`checkbox`,n.className=`wui-check`,n.setAttribute(`aria-label`,t),n};function jt(e=document){let t=e.createElement(`th`);return t.className=H,t.appendChild(At(e,Ot)),t}function Mt(e=document){let t=e.createElement(`td`);return t.className=H,t.appendChild(At(e,kt)),t}function Nt(e=document){let t=e.createElement(`td`);return t.className=H,t}var Pt=e=>e.firstElementChild?.classList.contains(H);function Ft(e){for(let t of e)Pt(t)||t.insertBefore(Mt(t.ownerDocument),t.firstChild)}function It(e){let t=e.querySelector(`thead tr`);if(!t)return null;Pt(t)||t.insertBefore(jt(e.ownerDocument),t.firstChild),Ft(e.querySelectorAll(`tbody tr`));for(let t of e.querySelectorAll(`tfoot tr`))Pt(t)||t.insertBefore(Nt(e.ownerDocument),t.firstChild);return t.querySelector(`.${H} .wui-check`)}function Lt(e){let t=e.querySelector(`thead .${H} .wui-check`),n=[...e.querySelectorAll(`tbody tr .wui-check`)],r=n.length,i=n.filter(e=>e.checked).length;t&&(t.checked=r>0&&i===r,t.indeterminate=i>0&&i<r);for(let t of e.querySelectorAll(`tbody tr`))t.classList.toggle(`is-selected`,!!t.querySelector(`.wui-check`)?.checked);return{selected:i,total:r}}var Rt=Object.freeze([`page`,`pageSize`,`sortBy`,`sortOrder`]),U=`search`,W=Object.freeze({loading:`Loading rows`,error:`These rows did not load. Try again.`,network:`The connection dropped before the rows loaded. Check it and try again.`,forbidden:`You do not have access to these rows.`,retry:`Retry`,actionFailed:`That did not work. Try again.`,actionForbidden:`You do not have permission to do that.`,empty:`No rows`}),zt=5,Bt=new WeakMap,Vt=(e,t)=>{let n=Number(e);return Number.isInteger(n)?n:t},Ht=e=>({total:Vt(e.dataset.total,0),page:Vt(e.dataset.page,1),pageSize:Vt(e.dataset.pageSize,0),sortBy:e.dataset.sortBy||``,sortOrder:e.dataset.sortOrder===`desc`?`desc`:`asc`}),Ut=(e,t)=>{e&&window.WUI?.toast?.(e,{variant:t})};function Wt(e=document){let t=e.querySelectorAll?[...e.querySelectorAll(`[data-wui-server]`)]:[];e instanceof Element&&e.matches(`[data-wui-server]`)&&t.unshift(e);for(let e of t)Bt.has(e)||Bt.set(e,Kt(e))}function Gt(e){let t=e instanceof Element?e.closest(`[data-wui-server]`):null;return t&&Bt.get(t)||null}function Kt(e){let t=e.querySelector(`.table-wrap`),n=t?.querySelector(`:scope > table`),r=e.dataset.src;if(!n||!r)throw Error(`A server-paged table needs data-src and a .table-wrap > table: render it with <app-data-table src>.`);let i=t.querySelector(`:scope > [data-wui-table-state]`),a=e.querySelector(`[data-wui-table-pager]`),o=e.querySelector(`[data-wui-table-status]`),s={urlState:e.dataset.urlState!==`false`,refreshOnSuccess:e.dataset.refreshOnSuccess!==`false`,filtersForm:e.dataset.filtersForm||null,filtersRegion:e.dataset.filtersRegion||null,searchInput:e.dataset.searchInput||null,loadingText:e.dataset.loadingText||W.loading,errorText:e.dataset.errorText||W.error},c=new URL(r,window.location.href),l=new Set(c.searchParams.keys()),u=n.hasAttribute(`data-app-datatable-selectable`),d=new Set,f=b(),p=new AbortController,m={signal:p.signal},h=n.querySelector(`:scope > tbody[data-wui-rows]`);if(!h)throw Error(`A server-paged table needs its rows in <app-table-rows> (tbody[data-wui-rows]).`);let g=Ht(h),v=null,y=null,x=e=>{let t=new URLSearchParams;for(let[n,r]of new URLSearchParams(e))l.has(n)||t.append(n,r);return t},S=e=>x(new URL(e,window.location.href).search),C=e=>{let t=e.toString();return`${window.location.pathname}${t?`?${t}`:``}${window.location.hash}`},ee=e=>{let t=new URL(c.href);for(let[n,r]of e)l.has(n)||t.searchParams.append(n,r);return t.origin===window.location.origin?`${t.pathname}${t.search}`:t.href},te=(e,t)=>{let n=new URLSearchParams(e);return n.has(`page`)&&n.set(`page`,String(t.page)),n.has(`pageSize`)&&n.set(`pageSize`,String(t.pageSize)),n.has(`sortBy`)?t.sortBy?(n.set(`sortBy`,t.sortBy),n.set(`sortOrder`,t.sortOrder)):(n.delete(`sortBy`),n.delete(`sortOrder`)):n.delete(`sortOrder`),n},w=te(s.urlState?x(window.location.search):new URLSearchParams,g);s.urlState&&C(w)!==`${window.location.pathname}${window.location.search}${window.location.hash}`&&window.history.replaceState(window.history.state,``,C(w));let T=(e,n)=>t.dispatchEvent(new CustomEvent(e,{bubbles:!0,detail:n})),E=e=>{o&&(o.textContent=e)},ne=e=>{if(e.total===0)return W.empty;let t=e.pageSize>0?Math.max(1,Math.ceil(e.total/e.pageSize)):1;return`Page ${e.page} of ${t}, ${e.total} ${e.total===1?`row`:`rows`}`},D=()=>[...n.querySelectorAll(`:scope > thead > tr:first-child > th`)],O=e=>{if(u&&[...e.querySelectorAll(`:scope > tr`)].some(e=>!e.dataset.rowKey))throw Error(`A selectable server-paged table needs data-row-key on every row, so a selection can span pages.`)},re=e=>{let t=[...e.querySelectorAll(`:scope > tr`)];if(u){Ft(t);for(let e of t){let t=e.querySelector(`.${H} .wui-check`);t&&(t.checked=d.has(e.dataset.rowKey))}Lt(n)}let r=D();if(n.classList.contains(`wui-table-stack`))for(let e of t)[...e.cells].forEach((e,t)=>{let n=r[t]?.textContent.trim();n&&!e.hasAttribute(`data-label`)&&e.setAttribute(`data-label`,n)});r.forEach((e,n)=>{if(e.classList.contains(`wui-col-hidden`))for(let e of t)e.cells[n]?.classList.add(`wui-col-hidden`)})},ie=e=>{for(let t of e.querySelectorAll(`:scope > template[data-wui-pager], :scope > template[data-wui-empty], :scope > template[data-wui-filters]`))t.remove()},k=e=>e?.dispatchEvent(new CustomEvent(`wui:teardown`,{bubbles:!0})),ae=(e,t)=>{if(!i)return;let n=e.querySelector(`:scope > template[data-wui-empty]`);k(i),t.total===0&&n?(i.replaceChildren(n.content.cloneNode(!0)),i.hidden=!1):(i.replaceChildren(),i.hidden=!0)},oe=e=>{let r=Ht(e);if(a){let t=e.querySelector(`:scope > template[data-wui-pager]`);k(a),a.replaceChildren(...t?[t.content.cloneNode(!0)]:[]),a.hidden=!1}ae(e,r);let i=e.querySelector(`:scope > template[data-wui-filters]`),o=s.filtersRegion&&i?document.querySelector(s.filtersRegion):null;o&&(k(o),o.replaceChildren(i.content.cloneNode(!0))),ie(e),k(h),n.replaceChild(e,h),h=e,g=r,t.removeAttribute(`data-wui-table-error`),re(e),P()},se=e=>{let t=document.createElement(`template`);t.innerHTML=`<table>${e}</table>`;let n=t.content.querySelector(`tbody[data-wui-rows]`);return n&&O(n),n?document.importNode(n,!0):null},ce=()=>{if(h.querySelector(`:scope > tr:not([data-wui-skeleton])`))return;let e=Math.max(1,D().length);h.replaceChildren(...Array.from({length:zt},()=>{let t=document.createElement(`tr`);t.setAttribute(`data-wui-skeleton`,``);for(let n=0;n<e;n++){let e=document.createElement(`td`),r=document.createElement(`span`);r.className=`skeleton`,r.setAttribute(`aria-hidden`,`true`),r.style.cssText=`display:block;width:${n===0?70:50}%;height:12px;border-radius:6px`,e.append(r),t.append(e)}return t})),t.removeAttribute(`data-wui-table-error`),i&&(i.hidden=!0)},le=e=>{e?(t.setAttribute(`aria-busy`,`true`),ce()):t.removeAttribute(`aria-busy`)},ue=e=>e===`forbidden`?W.forbidden:e===`network`?W.network:s.errorText,de=e=>{let n=ue(e);if(t.setAttribute(`data-wui-table-error`,e),a&&(a.hidden=!0),i){let t=document.createElement(`div`);t.className=`tbl-empty wui-table-error`,t.setAttribute(`role`,`alert`);let r=document.createElement(`span`);r.className=`tbl-empty-icon`,r.innerHTML=N(e===`forbidden`?`lock`:`alert-circle`,{size:24});let a=document.createElement(`div`);a.className=`tbl-empty-title`,a.textContent=n;let o=document.createElement(`div`);o.className=`tbl-empty-action`;let s=document.createElement(`button`);s.type=`button`,s.className=`btn btn-outline-primary btn-sm`,s.setAttribute(`data-wui-table-retry`,``),s.textContent=W.retry,o.append(s),t.append(r,a,o),k(i),i.replaceChildren(t),i.hidden=!1}E(n)},A=async(e,t=`none`)=>{let n=new URLSearchParams(e);v={query:n,mode:t},le(!0),E(s.loadingText),T(`wui:table:loading`,{query:n.toString()});let r=await f.run(ee(n));if(r.kind===`aborted`||r.kind===`stale`||r.kind===`session`)return r;le(!1);let i=null,a=r.ok?null:r.kind;if(r.ok){try{i=se(r.html)}catch(e){console.error(e)}i||(a=`server`)}return a?(de(a),T(`wui:table:error`,{status:r.status,kind:a,message:ue(a)}),r):(oe(i),w=te(n,g),s.urlState&&t===`push`?window.history.pushState(window.history.state,``,C(w)):s.urlState&&t===`replace`&&window.history.replaceState(window.history.state,``,C(w)),E(ne(g)),window.WUI?.refresh?.(),T(`wui:table:loaded`,{...g,query:w.toString()}),r)},j=e=>(e.delete(`page`),e),M=()=>[...n.querySelectorAll(`:scope > thead th[data-sort-key]`)],P=()=>{for(let e of M()){let t=e.dataset.sortKey===g.sortBy;e.setAttribute(`aria-sort`,t?g.sortOrder===`desc`?`descending`:`ascending`:`none`)}};for(let e of M())if(e.classList.add(`sortable`),e.tabIndex=0,!e.querySelector(`.sort-icon`)){let t=e.classList.contains(`num`)||e.classList.contains(`text-end`),n=document.createElement(`span`);n.className=t?`sort-icon wui-sort-lead`:`sort-icon`,n.innerHTML=N(`chevrons-up-down`,{size:14}),t?e.prepend(n):e.append(n)}let F=e=>{let t=j(new URLSearchParams(w)),n=g.sortBy===e&&g.sortOrder===`asc`?`desc`:`asc`;return t.set(`sortBy`,e),t.set(`sortOrder`,n),A(t,`push`)};n.addEventListener(`click`,e=>{let t=e.target.closest(`th[data-sort-key]`);t&&n.tHead?.contains(t)&&F(t.dataset.sortKey)}),n.addEventListener(`keydown`,e=>{if(e.key!==`Enter`&&e.key!==` `)return;let t=e.target.closest?.(`th[data-sort-key]`);!t||!n.tHead?.contains(t)||(e.preventDefault(),F(t.dataset.sortKey))});let I=()=>{Lt(n),n.dispatchEvent(new CustomEvent(`selectionchange`,{bubbles:!0,detail:{selected:d.size,total:g.total}}))};u&&n.addEventListener(`change`,e=>{let t=e.target;if(t.matches?.(`.wui-select-cell .wui-check`)){if(n.tHead?.contains(t))for(let e of h.querySelectorAll(`:scope > tr`)){let n=e.querySelector(`.${H} .wui-check`);n&&(n.checked=t.checked,t.checked?d.add(e.dataset.rowKey):d.delete(e.dataset.rowKey))}else{let e=t.closest(`tr`)?.dataset.rowKey;if(!e)return;t.checked?d.add(e):d.delete(e)}I()}}),a&&(a.addEventListener(`click`,e=>{let t=e.target.closest(`a[href]`);!t||e.defaultPrevented||e.button!==0||e.ctrlKey||e.metaKey||e.shiftKey||e.altKey||(e.preventDefault(),A(S(t.getAttribute(`href`)),`push`))}),a.addEventListener(`change`,e=>{!e.target.classList?.contains(`tpg-select`)||!e.target.value||(e.stopPropagation(),A(S(e.target.value),`push`))}));let L=()=>{if(!s.searchInput)return null;let e=document.querySelector(s.searchInput);return e&&(e.matches(`input, textarea`)?e:e.querySelector(`input`))},R=()=>e.isConnected?!0:(p.abort(),clearTimeout(y),!1),z=(e,t)=>{let n=t?.name?new FormData(e,t):new FormData(e),r=new Set([...e.querySelectorAll(`[name]`)].map(e=>e.getAttribute(`name`))),i=new URLSearchParams;for(let[e,t]of w)e!==`page`&&(Rt.includes(e)||!r.has(e))&&i.append(e,t);for(let[e,t]of n)typeof t!=`string`||t===``||Rt.includes(e)||l.has(e)||i.append(e,t);let a=L();if(a){i.delete(U);let e=a.value.trim();e&&i.set(U,e)}return A(i,`push`)},B=e=>s.filtersForm&&e.closest?.(s.filtersForm)||s.filtersRegion&&e.closest?.(s.filtersRegion)||null;document.addEventListener(`submit`,e=>{!R()||!s.filtersForm||!(e.target instanceof HTMLFormElement)||!e.target.matches(s.filtersForm)||(e.preventDefault(),z(e.target,e.submitter))},m),document.addEventListener(`change`,e=>{if(!R()||!s.filtersForm)return;let t=e.target.closest?.(s.filtersForm);!t||e.target===L()||z(t)},m);let V=(e,t)=>{if(!e)return;let n=e=>t.get(e)??``;for(let r of e.querySelectorAll(`input[name]:not([type=hidden])`))if(r.type===`checkbox`)r.checked=t.getAll(r.name).includes(r.value);else if(r.type===`radio`){let e=n(r.name)===r.value;if(r.checked===e)continue;r.checked=e,e&&r.dispatchEvent(new Event(`change`))}else r.value!==n(r.name)&&(r.value=n(r.name),r.dispatchEvent(new Event(`input`,{bubbles:!0})));for(let r of e.querySelectorAll(`select[name]`))if(!r.multiple)r.value=n(r.name);else for(let e of r.options)e.selected=t.getAll(r.name).includes(e.value);for(let t of e.querySelectorAll(`wui-select[name]`))t.value=n(t.getAttribute(`name`));for(let n of e.querySelectorAll(`wui-multiselect[name]`))n.values=t.getAll(n.getAttribute(`name`));for(let t of e.querySelectorAll(`wui-date-range`)){let e=t.getAttribute(`start-name`)||t.getAttribute(`name`),r=t.getAttribute(`end-name`);t.value={start:e?n(e):``,end:r?n(r):``}}};document.addEventListener(`click`,e=>{if(!R())return;let t=e.target.closest?.(`a[href]`);if(!t||!B(t)||e.defaultPrevented||e.button!==0||e.ctrlKey||e.metaKey||e.shiftKey||e.altKey)return;let n=new URL(t.getAttribute(`href`),window.location.href);if(n.origin!==window.location.origin||n.pathname!==window.location.pathname)return;e.preventDefault();let r=j(S(n.href));V(t.closest(`form`),r),A(r,`push`)},m),document.addEventListener(`input`,e=>{if(!R())return;let t=L();!t||e.target!==t||(clearTimeout(y),y=setTimeout(()=>{let e=j(new URLSearchParams(w)),n=t.value.trim();n?e.set(U,n):e.delete(U),e.toString()!==w.toString()&&A(e,`replace`)},300))},m),s.urlState&&window.addEventListener(`popstate`,()=>{if(!R())return;let e=x(window.location.search),t=L();t&&(t.value=e.get(`search`)??``),A(e,`none`)},m),document.addEventListener(`wui:modal:success`,()=>{R()&&s.refreshOnSuccess&&A(w,`none`)},m),i?.addEventListener(`click`,e=>{e.target.closest(`[data-wui-table-retry]`)&&v&&A(v.query,v.mode)});let fe=async e=>{let t=e.dataset.url;if(!t)throw Error(`A data-wui-row-action button needs data-url: the handler the action posts to.`);let n=e.closest(`tr`)?.dataset.rowKey??null,r=e.dataset.wuiRowAction||``;e.disabled=!0,e.setAttribute(`aria-busy`,`true`);let i=await _(t,{method:(e.dataset.method||`post`).toUpperCase()});if(e.disabled=!1,e.removeAttribute(`aria-busy`),i.kind===`session`||i.kind===`aborted`)return;let a=i.message;i.ok?(Ut(a,i.toastVariant||`success`),await A(w,`none`)):Ut(a||(i.kind===`forbidden`?W.actionForbidden:W.actionFailed),`danger`),T(`wui:table:action`,{action:r,key:n,ok:i.ok,status:i.status})};return n.addEventListener(`click`,e=>{let t=e.target.closest(`[data-wui-row-action]`);!t||!h.contains(t)||t.disabled||(e.preventDefault(),fe(t))}),O(h),ie(h),u&&It(n),re(h),P(),{el:e,reload:()=>A(w,`none`),query:()=>new URLSearchParams(w),setQuery:e=>{let t=new URLSearchParams(w);for(let[n,r]of Object.entries(e??{})){t.delete(n);for(let e of Array.isArray(r)?r:[r])e!=null&&e!==``&&t.append(n,String(e))}return(!e||!(`page`in e))&&t.delete(`page`),A(t,`push`)},selection:{keys:()=>[...d],count:()=>d.size,clear:()=>{d.clear();for(let e of h.querySelectorAll(`:scope > tr > .${H} .wui-check`))e.checked=!1;I()}}}}var G=`wuiConfirm`,qt=Object.freeze([`danger`]),Jt=Object.freeze([`success`,`info`,`warning`,`danger`]),K=`wui.flash`,q=Object.freeze({confirmTitle:`Are you sure?`,confirmLabel:`Confirm`,cancelLabel:`Cancel`,failed:`That did not work. Try again.`,forbidden:`You do not have permission to do that.`,network:`Could not reach the server. Check your connection and try again.`}),Yt=new WeakSet,J=null,Y=null,X=!1,Xt=e=>{let t=document.createElement(`span`);return t.textContent=e??``,t.innerHTML},Z=(e,t)=>{e&&window.WUI?.toast?.(e,{variant:t})},Zt=()=>{let e=window.bootstrap?.Modal;if(!e)throw Error(`data-wui-confirm: Bootstrap's bundle (window.bootstrap) is not loaded on this page.`);return e};function Qt(){let e=document.getElementById(G);return e||(e=document.createElement(`div`),e.id=G,e.className=`modal fade wui-modal-shell`,e.tabIndex=-1,e.setAttribute(`aria-hidden`,`true`),e.setAttribute(`role`,`dialog`),e.setAttribute(`aria-modal`,`true`),e.style.setProperty(`--wui-modal-max-width`,`${ee.md}px`),e.innerHTML=`<div class="modal-dialog modal-dialog-centered wui-rb-dialog"><div class="modal-content wui-modal wui-confirm"><div class="wui-modal-body"><div class="wui-confirm-content"><span class="wui-confirm-icon"><wui-status-icon tone="info" size="120"></wui-status-icon></span><h3 class="wui-confirm-title" tabindex="-1" data-autofocus></h3><p class="wui-confirm-msg"></p></div></div><div class="wui-modal-footer"><div class="wui-confirm-actions"><button type="button" class="btn btn-secondary" data-bs-dismiss="modal">${Xt(q.cancelLabel)}</button><button type="button" class="btn btn-primary" data-app-confirm></button></div></div></div></div>`,document.body.appendChild(e),e)}function $t(e,t){let n=e.getAttribute(`data-wui-confirm-tone`);if(n!==null&&!qt.includes(n))throw TypeError(`data-wui-confirm-tone="${n}" is not supported. Use danger, or leave it off.`);let r=Zt(),i=Qt(),a=i.querySelector(`.wui-confirm-title`),o=i.querySelector(`[data-app-confirm]`);if(!a||!o)throw Error(`#${G} is not a confirm dialog with a confirm button. Render <app-confirm-dialog id="${G}"> without confirm-href, or leave the dialog to the library.`);let s=i.querySelector(`.wui-confirm-msg`);s||(s=document.createElement(`p`),s.className=`wui-confirm-msg`,a.after(s));let c=n===`danger`;a.textContent=e.getAttribute(`data-wui-confirm-title`)||q.confirmTitle,s.textContent=e.getAttribute(`data-wui-confirm`),o.textContent=e.getAttribute(`data-wui-confirm-label`)||q.confirmLabel,o.classList.toggle(`btn-danger`,c),o.classList.toggle(`btn-primary`,!c),i.querySelector(`wui-status-icon`)?.setAttribute(`tone`,c?`delete`:`info`),i.setAttribute(`aria-label`,a.textContent),Y=t,X=!1,r.getOrCreateInstance(i).show()}var en=(e,t)=>{J=e;try{t()}finally{J=null}},tn=e=>e.disabled===!0||e.getAttribute(`aria-disabled`)===`true`;function nn(e){let t=e.target.closest?.(`[data-wui-confirm]:not(form)`);!t||t===J||tn(t)||(e.preventDefault(),e.stopImmediatePropagation(),$t(t,()=>en(t,()=>t.click())))}function rn(e){let t=e.target;if(!(t instanceof HTMLFormElement)||!t.hasAttribute(`data-wui-confirm`)||t===J||e.submitter&&e.submitter===J)return;e.preventDefault(),e.stopImmediatePropagation();let n=e.submitter?.form===t?e.submitter:void 0;$t(t,()=>en(t,()=>t.requestSubmit(n)))}function an(e){let t=e.target.closest?.(`#${G} [data-app-confirm]`);!t||t.disabled||!Y||(X=!0,Zt().getOrCreateInstance(t.closest(`#${G}`)).hide())}function on(e){if(e.target.id!==`wuiConfirm`)return;let t=X?Y:null;Y=null,X=!1,t?.()}var sn=(e,t)=>{e&&window.sessionStorage.setItem(K,JSON.stringify({message:e,variant:t}))},cn=e=>e===`forbidden`?q.forbidden:e===`network`?q.network:q.failed;function ln(){for(let e of document.querySelectorAll(`[data-wui-server]`))e.dataset.refreshOnSuccess!==`false`&&Gt(e)?.reload()}async function un(e){let t=e.getAttribute(`data-wui-post`);if(!t)throw Error(`A data-wui-post button needs the URL the action posts to.`);let n=e.getAttribute(`data-wui-post-reload`);if(n!==null&&n!==`page`)throw TypeError(`data-wui-post-reload="${n}" is not supported. Use page, or leave it off to reload the server tables.`);e.disabled=!0,e.setAttribute(`aria-busy`,`true`);let r=await _(t,{method:`POST`});if(r.kind===`session`||r.kind===`aborted`)return;let i=r.toastVariant||`success`;if(r.ok&&(r.redirect||n===`page`)){sn(r.message,i),r.redirect?window.location.assign(r.redirect):window.location.reload();return}if(e.disabled=!1,e.removeAttribute(`aria-busy`),r.ok){Z(r.message,i),ln();return}Z(r.message||cn(r.kind),`danger`)}function dn(e){let t=e.target.closest?.(`[data-wui-post]`);t&&(e.preventDefault(),!(tn(t)||t.getAttribute(`aria-busy`)===`true`)&&un(t).catch(e=>console.error(e)))}function fn(){let e=window.sessionStorage.getItem(K);if(!e)return;window.sessionStorage.removeItem(K);let{message:t,variant:n}=JSON.parse(e);Z(t,n)}function pn(e){let t=e.querySelectorAll?[...e.querySelectorAll(`[data-wui-flash]`)]:[];e instanceof Element&&e.matches(`[data-wui-flash]`)&&t.unshift(e);for(let e of t){let t=e.getAttribute(`data-wui-flash-variant`)||`success`;if(!Jt.includes(t))throw TypeError(`data-wui-flash-variant="${t}" is not supported. Use ${Jt.join(`, `)}.`);let n=e.getAttribute(`data-wui-flash`)||e.textContent.trim();e.remove(),Z(n,t)}}function mn(e=document){let t=e.ownerDocument||e;Yt.has(t)||(Yt.add(t),t.addEventListener(`click`,nn,!0),t.addEventListener(`submit`,rn,!0),t.addEventListener(`click`,an),t.addEventListener(`click`,dn),t.addEventListener(`hidden.bs.modal`,on),fn()),pn(e)}var hn=31536e3,Q=new WeakMap,gn=e=>e>99?`99+`:String(e);function _n(e,t,n=document){n.cookie=`${e}=${t?`1`:`0`}; Path=/; Max-Age=${hn}; SameSite=Lax`}var vn=e=>{let t=document.createElement(`template`);return t.innerHTML=e,t.content},$=(e,t)=>{let n=document.createElement(`div`);return n.className=e,n.textContent=t,n};function yn(e,t){let n=e.querySelector(`.wui-bell-trigger`),r=e.querySelector(`.wui-bell-count`),i=e.querySelector(`[data-wui-bell-live]`),a=e.querySelector(`[data-wui-bell-list]`),o=e.querySelector(`.wui-bell-menu`),{src:s,readAction:c}=e.dataset,l=e.dataset.label||`Notifications`,u=e.dataset.emptyText||`You are all caught up.`,d=Number(e.dataset.pollSeconds??60),f=b(),p=Number(e.dataset.unread)||0,m=(t,a=!0)=>{let o=Math.max(0,Number(t)||0),s=o!==p;p=o,e.dataset.unread=String(o),r&&(r.textContent=gn(o),r.hidden=o===0),n?.setAttribute(`aria-label`,o===0?l:`${l}, ${gn(o)} unread`),a&&s&&i&&(i.textContent=o===0?`No unread notifications`:`${gn(o)} unread notifications`)},h=()=>o?.classList.contains(`show`)??!1,g=()=>{let e=$(`wui-bell-state`,`Could not load notifications. `),t=document.createElement(`button`);t.type=`button`,t.className=`btn btn-link btn-sm`,t.dataset.wuiBellRetry=``,t.textContent=`Retry`,e.append(t),a.replaceChildren(e)},v=async t=>{t&&(a.setAttribute(`aria-busy`,`true`),a.querySelector(`.wui-bell-item`)||a.replaceChildren($(`wui-bell-state`,`Loading…`)));let n=await f.run(s);if(n.kind===`aborted`||n.kind===`stale`||n.kind===`session`)return;if(a.removeAttribute(`aria-busy`),!n.ok){t&&g();return}let r=vn(n.html),i=r.querySelector(`[data-wui-unread]`),o=i?Number(i.getAttribute(`data-wui-unread`)):p;m(o),(t||h())&&(r.querySelector(`.wui-bell-item`)?a.replaceChildren(r):a.replaceChildren($(`wui-bell-state`,u))),e.dispatchEvent(new CustomEvent(`wui:notifications:loaded`,{bubbles:!0,detail:{unread:o}}))};e.addEventListener(`show.bs.dropdown`,()=>v(!0)),e.addEventListener(`click`,async e=>{if(e.target.closest(`[data-wui-bell-retry]`)){v(!0);return}let t=e.target.closest(`[data-wui-bell-read]`);if(!t||!c)return;t.disabled=!0;let n=await _(c,{method:`POST`});t.disabled=!1,n.ok&&(m(0),v(!0))});let y=null,x=()=>{d>0&&y===null&&(y=setInterval(()=>v(h()),d*1e3))},S=()=>{y!==null&&clearInterval(y),y=null},C=()=>{document.hidden?S():(v(h()),x())};return d>0&&(document.addEventListener(`visibilitychange`,C),document.hidden||x()),t.push(()=>{S(),f.abort(),document.removeEventListener(`visibilitychange`,C)}),{setUnread:e=>m(e),refresh:()=>v(h())}}var bn=e=>!!e&&(e.isContentEditable||/^(INPUT|TEXTAREA|SELECT)$/.test(e.tagName)),xn=(e,t,n)=>`${e}${e.includes(`?`)?`&`:`?`}${encodeURIComponent(t)}=${encodeURIComponent(n)}`;function Sn(e,t){let n=e.querySelector(`input.search-input`),r=e.querySelector(`.wui-topsearch-results`),i=e.querySelector(`.wui-topsearch-open`),a=e.querySelector(`[data-wui-topsearch-live]`),{src:o,param:s=`q`,resultsHref:c}=e.dataset,l=Number(e.dataset.minChars??2),u=Number(e.dataset.debounceMs??250),d=b(),f=null,p=-1,m=()=>[...r.querySelectorAll(`.wui-topsearch-hit`)],h=e=>{let t=m();p=t.length===0?-1:(e+t.length)%t.length,t.forEach((e,t)=>{let n=t===p;e.classList.toggle(`is-active`,n),e.setAttribute(`aria-selected`,n?`true`:`false`)}),p>=0?(n.setAttribute(`aria-activedescendant`,t[p].id),t[p].scrollIntoView?.({block:`nearest`})):n.removeAttribute(`aria-activedescendant`)},g=()=>{r.hidden=!0,n.setAttribute(`aria-expanded`,`false`),n.removeAttribute(`aria-activedescendant`),p=-1},_=()=>{r.hidden=!1,n.setAttribute(`aria-expanded`,`true`)},v=t=>{e.classList.toggle(`is-open`,t),i?.setAttribute(`aria-expanded`,t?`true`:`false`)},y=t=>{let n=new CustomEvent(`wui:search:select`,{bubbles:!0,cancelable:!0,detail:{href:t}});e.dispatchEvent(n)&&window.location.assign(t)},x=async t=>{e.classList.add(`is-loading`);let n=await d.run(xn(o,s,t));if(!(n.kind===`aborted`||n.kind===`stale`||n.kind===`session`)){if(e.classList.remove(`is-loading`),n.ok){let e=vn(n.html),t=e.querySelector(`[data-wui-count]`);r.replaceChildren(e),m().forEach((e,t)=>{e.id=`${r.id}-opt-${t}`});let i=t?Number(t.getAttribute(`data-wui-count`)):m().length;a&&(a.textContent=i===0?`No results`:`${i} ${i===1?`result`:`results`}`)}else r.replaceChildren($(`wui-topsearch-empty`,`Search is unavailable right now.`));p=-1,_()}};n.addEventListener(`input`,()=>{clearTimeout(f);let t=n.value.trim();if(t.length<l){d.abort(),e.classList.remove(`is-loading`),r.replaceChildren(),g();return}f=setTimeout(()=>x(t),u)}),n.addEventListener(`keydown`,t=>{if(t.key===`ArrowDown`||t.key===`ArrowUp`){if(r.hidden||m().length===0)return;t.preventDefault(),h(p+(t.key===`ArrowDown`?1:-1))}else if(t.key===`Enter`){let e=m();!r.hidden&&p>=0&&e[p]?(t.preventDefault(),y(e[p].getAttribute(`href`))):c&&n.value.trim()!==``&&(t.preventDefault(),y(xn(c,s,n.value.trim())))}else t.key===`Escape`&&(r.hidden?e.classList.contains(`is-open`)&&(t.preventDefault(),v(!1),i?.focus()):(t.preventDefault(),g()))}),r.addEventListener(`click`,e=>{let t=e.target.closest(`.wui-topsearch-hit`);!t||e.ctrlKey||e.metaKey||e.shiftKey||e.button===1||(e.preventDefault(),y(t.getAttribute(`href`)))}),i?.addEventListener(`click`,()=>{let t=!e.classList.contains(`is-open`);v(t),t&&n.focus()});let S=e=>{e.key!==`/`||e.ctrlKey||e.metaKey||e.altKey||bn(e.target)||(e.preventDefault(),v(!0),n.focus())},C=t=>{e.contains(t.target)||(g(),e.classList.contains(`is-open`)&&v(!1))};document.addEventListener(`keydown`,S),document.addEventListener(`pointerdown`,C),t.push(()=>{clearTimeout(f),d.abort(),document.removeEventListener(`keydown`,S),document.removeEventListener(`pointerdown`,C)})}function Cn(e){let t=[],n=e.dataset.wuiCollapsedCookie;n&&e.addEventListener(`wui:shell:collapse`,e=>_n(n,!!e.detail?.collapsed)),e.addEventListener(`click`,t=>{t.target.closest(`[data-wui-tabbar-more]`)&&e.querySelector(`[data-app-shell-menu]`)?.click()});let r=e.querySelector(`[data-wui-bell]`),i=r?yn(r,t):null,a=e.querySelector(`[data-wui-topsearch]`);a&&Sn(a,t);let o={el:e,setUnread(e){if(!i)throw Error(`WUI.shell: this <app-shell> has no <app-shell-notifications>.`);i.setUnread(e)},refreshNotifications(){if(!i)throw Error(`WUI.shell: this <app-shell> has no <app-shell-notifications>.`);return i.refresh()},get collapsed(){return e.classList.contains(`collapsed`)},set collapsed(t){if(!!t===e.classList.contains(`collapsed`))return;let n=e.querySelector(`[data-app-shell-collapse]`);n?n.click():e.classList.toggle(`collapsed`,!!t)}};Q.set(e,o);let s=n=>{if(n.target===e||n.target.contains?.(e)){for(let e of t)e();Q.delete(e),delete e.dataset.wuiPartsWired,document.removeEventListener(`wui:teardown`,s)}};return document.addEventListener(`wui:teardown`,s),o}function wn(e=document){let t=[];e instanceof Element&&e.matches(`[data-app-shell]`)&&t.push(e),t.push(...e.querySelectorAll(`[data-app-shell]`));for(let e of t)e.dataset.wuiPartsWired||(e.dataset.wuiPartsWired=`1`,Cn(e))}function Tn(e){let t=e?.closest?.(`[data-app-shell]`)??null;return t?(Q.has(t)||wn(t),Q.get(t)??null):null}function En(){e(`wui-select`,z),e(`wui-country-select`,B),e(`wui-phone`,_e),e(`wui-datepicker`,V),e(`wui-date-range`,fe),e(`wui-dock`,pe),e(`wui-image-crop`,me),e(`wui-kanban`,w),e(`wui-consent-banner`,L),e(`wui-slider`,ve),e(`wui-sortable`,ye),e(`wui-timepicker`,xe),e(`wui-tour`,Ce),e(`wui-tree`,we),e(`wui-autocomplete`,P),e(`wui-command-palette`,I),e(`wui-context-menu`,R),e(`wui-multiselect`,he),e(`wui-taginput`,be),e(`wui-otp`,ge),e(`wui-status-icon`,j),e(`wui-wizard-step`,Ee),e(`wui-wizard`,Te)}En();export{_t as AVATAR_ACCEPT,Le as AVATAR_MAX_SIZE_MB,Qe as AVATAR_OUTPUT_SIZE,Ze as AVATAR_OUTPUT_TYPE,$e as AVATAR_PREVIEW_SIZES,We as AVATAR_TEXT,G as CONFIRM_DIALOG_ID,qt as CONFIRM_TONES,Pe as COPY_FEEDBACK_MS,C as CSRF_META_NAME,m as CURRENCIES,l as DATE_PATTERNS,y as DEFAULT_CSRF_HEADER,ze as DEFAULT_IMAGE_ACCEPT,Ge as DEFAULT_MAX_SIZE_MB,Ke as DEFAULT_PASSWORD_RULES,Ae as DEFAULT_REQUIREMENTS_TITLE,bt as DEFAULT_THEME_EFFECT,mt as DEFAULT_THEME_STORAGE_KEY,f as DURATION_UNITS,o as EMPTY_VALUE,K as FLASH_STORAGE_KEY,Jt as FLASH_VARIANTS,t as FORMAT_STYLES,x as HTTP_KINDS,u as IST_TIME_ZONE,le as KANBAN_DRAG_THRESHOLD_PX,k as KANBAN_LONG_PRESS_MS,se as KANBAN_PHONE_QUERY,O as KANBAN_STORAGE_PREFIX,te as KANBAN_SUMMARY_FORMATS,ae as KANBAN_TEXT,ce as KANBAN_TONES,je as MASK_INPUT_TYPES,He as MASK_NAMES,p as MONEY_UNITS,Et as SCROLL_EDGE_SELECTOR,Ot as SELECT_ALL_LABEL,H as SELECT_CELL_CLASS,kt as SELECT_ROW_LABEL,q as SERVER_ACTION_TEXT,M as STATUS_TONES,vt as THEME_BOOT_SCRIPT_BODY,lt as THEME_CHANGE_EVENT,tt as THEME_EFFECTS,ht as THEME_EFFECT_DURATION,yt as THEME_LIVE_NAME,rt as THEME_MODES,ft as THEME_SWITCHING_CLASS,v as WUI_HEADERS,P as WuiAutocomplete,I as WuiCommandPalette,L as WuiConsentBanner,R as WuiContextMenu,B as WuiCountrySelect,V as WuiDatePicker,fe as WuiDateRange,pe as WuiDock,me as WuiImageCrop,w as WuiKanban,he as WuiMultiSelect,ge as WuiOtp,_e as WuiPhone,z as WuiSelect,ve as WuiSlider,ye as WuiSortable,j as WuiStatusIcon,be as WuiTagInput,xe as WuiTimePicker,Ce as WuiTour,we as WuiTree,Te as WuiWizard,Ee as WuiWizardStep,Dt as acceptLabel,Ft as addRowSelectCells,It as addSelectColumn,St as applyTheme,dt as attachInputMask,nt as attachScrollEdges,De as avatarCropOptions,at as avatarUnreadableMessage,wt as buildPasswordRules,g as classifyStatus,Re as copyTextToClipboard,Se as createLocalSeenStore,b as createRequestQueue,jt as createSelectHeaderCell,Mt as createSelectRowCell,Nt as createSelectSpacerCell,En as defineWeborityElements,qe as evaluatePassword,n as formatCompact,s as formatCurrency,h as formatDate,r as formatDuration,Oe as formatMasked,i as formatNumber,d as formatPercent,c as formatValue,Gt as getServerTable,Tn as getShell,N as glyphSvg,ut as initInputMasks,de as initRemoteModals,Tt as initScrollEdges,mn as initServerActions,Wt as initServerTables,wn as initShellParts,xt as isHeicFile,ke as isImageFile,Ye as isImageOnlyAccept,Be as isMaskPattern,Fe as isPdfFile,re as kanbanCardLabel,ue as kanbanOverflow,T as kanbanStorageKey,E as kanbanSummaryFormat,oe as kanbanVisibleLimit,A as loadRemoteModal,Ve as maskedPostValue,F as matchSegments,Je as matchesAccept,it as nextTheme,Me as passwordSatisfies,Ue as postedMasked,Ne as rawMasked,S as readCsrf,ie as readKanbanCollapsed,ot as readStoredTheme,Ie as resolveMask,gt as resolveTheme,pt as storeTheme,D as sumKanbanValues,Lt as syncSelectAll,ct as themeBootScript,st as themeKeyframes,a as toInstant,et as transitionTheme,Xe as validateFile,Ct as watchSystemTheme,ne as writeKanbanCollapsed,_ as wuiFetch};
|