@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.
Files changed (116) hide show
  1. package/dist/WuiAutocomplete-Comrnbmf.js +13 -0
  2. package/dist/WuiCommandPalette-CKna1GlO.js +2 -0
  3. package/dist/WuiConsentBanner-CFll7vxN.js +201 -0
  4. package/dist/WuiContextMenu-CBy0O4HT.js +1 -0
  5. package/dist/WuiCountrySelect-oLBUHvMM.js +1 -0
  6. package/dist/WuiDatePicker-nB1B3eWW.js +31 -0
  7. package/dist/WuiDateRange-Di5YE9mg.js +25 -0
  8. package/dist/WuiDock-BD2HgMmP.js +1 -0
  9. package/dist/WuiImageCrop-Cr3D2iPo.js +17 -0
  10. package/dist/WuiMultiSelect-BUw-7apM.js +25 -0
  11. package/dist/WuiOtp-BbO_75RB.js +14 -0
  12. package/dist/WuiPhone-GJglNelp.js +15 -0
  13. package/dist/WuiSelect-DvtN4qC2.js +14 -0
  14. package/dist/WuiSlider-Br6V2amU.js +49 -0
  15. package/dist/WuiSortable-Bd7Fz5Ox.js +1 -0
  16. package/dist/WuiTagInput-DzEZooIn.js +6 -0
  17. package/dist/WuiTimePicker-Bolpp93P.js +9 -0
  18. package/dist/WuiTour-DiKZEWeb.js +15 -0
  19. package/dist/WuiTree-SA0QU9AF.js +1 -0
  20. package/dist/WuiWizardStep-DIHxrXn9.js +1 -0
  21. package/dist/anchorOverlay-WcDeH46q.js +1 -0
  22. package/dist/calendarMath-BC2wGCD-.js +1 -0
  23. package/dist/countries-CvmZ2xpG.js +1 -0
  24. package/dist/elementBase-BlsR4tqa.js +1 -0
  25. package/dist/elements/autocomplete.js +1 -6
  26. package/dist/elements/command-palette.js +1 -6
  27. package/dist/elements/consent-banner.js +1 -6
  28. package/dist/elements/context-menu.js +1 -6
  29. package/dist/elements/country-select.js +1 -6
  30. package/dist/elements/date-range.js +1 -6
  31. package/dist/elements/datepicker.js +1 -6
  32. package/dist/elements/dock.js +1 -6
  33. package/dist/elements/image-crop.js +1 -6
  34. package/dist/elements/kanban.js +1 -6
  35. package/dist/elements/multiselect.js +1 -6
  36. package/dist/elements/otp.js +1 -6
  37. package/dist/elements/phone.js +1 -6
  38. package/dist/elements/select.js +1 -6
  39. package/dist/elements/slider.js +1 -6
  40. package/dist/elements/sortable.js +1 -6
  41. package/dist/elements/status-icon.js +1 -6
  42. package/dist/elements/taginput.js +1 -6
  43. package/dist/elements/timepicker.js +1 -6
  44. package/dist/elements/tour.js +1 -6
  45. package/dist/elements/tree.js +1 -6
  46. package/dist/elements/wizard.js +1 -5
  47. package/dist/examples.mobile.json-GS1_MGh9.js +1 -0
  48. package/dist/fileViewerImage-Y9QBn2Rj.js +6 -0
  49. package/dist/fileViewerMedia-CaJaVnjE.js +1 -0
  50. package/dist/fileViewerPdf-BN0zuehw.js +19 -0
  51. package/dist/fileViewerUi-DasgDsU-.js +1 -0
  52. package/dist/focusOrigin-2imUSs-u.js +1 -0
  53. package/dist/formMirror-BgY7zkC3.js +1 -0
  54. package/dist/formatters-BAE__8ye.js +1 -0
  55. package/dist/helpers.js +1 -5
  56. package/dist/iconGlyphs.g-CUm_mfze.js +1 -0
  57. package/dist/kanban-CdELdS3U.js +1 -0
  58. package/dist/listboxKeyNav-DMIvs9d6.js +1 -0
  59. package/dist/max-CNrKnpEj.js +17 -0
  60. package/dist/optionLabel-DsX2fhWs.js +1 -0
  61. package/dist/statusIcons-2X4iGkKL.js +10 -0
  62. package/dist/textMatch-wdY7XLIc.js +1 -0
  63. package/dist/themeTransition-lkmQm8FR.js +1 -0
  64. package/dist/tokenCommit-BKckxgtg.js +2 -0
  65. package/dist/ui-calendar.global.js +1 -1
  66. package/dist/ui-calendar.js +1 -9905
  67. package/dist/ui-chart.js +21 -34563
  68. package/dist/ui-chat-core.js +10 -347
  69. package/dist/ui-chat.js +10 -1066
  70. package/dist/ui-elements.global.js +52 -53
  71. package/dist/ui-elements.js +1 -692
  72. package/dist/ui-file-viewer.js +1 -311
  73. package/dist/ui-rich-text.js +193 -16887
  74. package/dist/wuiHttp-BC8co934.js +1 -0
  75. package/package.json +5 -7
  76. package/dist/WuiAutocomplete-ByxnwJNQ.js +0 -283
  77. package/dist/WuiCommandPalette-CtZ04JxZ.js +0 -130
  78. package/dist/WuiConsentBanner-oVe-jxCO.js +0 -399
  79. package/dist/WuiContextMenu-Bx_U2X3t.js +0 -211
  80. package/dist/WuiCountrySelect-CUAwKnL9.js +0 -28
  81. package/dist/WuiDatePicker-DkNbc-z7.js +0 -325
  82. package/dist/WuiDateRange-BocnVO6L.js +0 -233
  83. package/dist/WuiDock-BSDY9g8Q.js +0 -57
  84. package/dist/WuiImageCrop-1yaAONTk.js +0 -462
  85. package/dist/WuiMultiSelect-BrCGRNCt.js +0 -416
  86. package/dist/WuiOtp-D8-4Pqil.js +0 -128
  87. package/dist/WuiPhone-BvbhiP2r.js +0 -731
  88. package/dist/WuiSelect-BXrpiuXG.js +0 -214
  89. package/dist/WuiSlider-BcU0psYf.js +0 -256
  90. package/dist/WuiSortable-JjJqstSU.js +0 -280
  91. package/dist/WuiTagInput-D1ay3OcL.js +0 -158
  92. package/dist/WuiTimePicker-C7n-VFGt.js +0 -370
  93. package/dist/WuiTour-R5O9l--J.js +0 -205
  94. package/dist/WuiTree-DXP7pGeI.js +0 -393
  95. package/dist/WuiWizardStep-BU5w9_Ds.js +0 -221
  96. package/dist/anchorOverlay-DluGZ8ef.js +0 -23
  97. package/dist/calendarMath-BAF2Jkg_.js +0 -42
  98. package/dist/countries-B-M_LTgS.js +0 -1234
  99. package/dist/elementBase-Bg1xpvup.js +0 -9
  100. package/dist/examples.mobile.json-BMXTGiGC.js +0 -250
  101. package/dist/fileViewerImage-Dky4nQZS.js +0 -185
  102. package/dist/fileViewerMedia-DPk_YcvC.js +0 -133
  103. package/dist/fileViewerPdf-BnIsj-J-.js +0 -15799
  104. package/dist/fileViewerUi-R6hlcShk.js +0 -272
  105. package/dist/formMirror-jGf5M4gk.js +0 -29
  106. package/dist/formatters-DusKbTyV.js +0 -138
  107. package/dist/iconGlyphs.g-Cpg1BUHm.js +0 -215
  108. package/dist/kanban-BIiEMkTK.js +0 -985
  109. package/dist/listboxKeyNav-zts_8d5e.js +0 -36
  110. package/dist/max-BDKx469G.js +0 -14478
  111. package/dist/optionLabel-Dn-I7zyp.js +0 -16
  112. package/dist/statusIcons-C3zjycpa.js +0 -37
  113. package/dist/textMatch-DEUjlkdy.js +0 -27
  114. package/dist/themeTransition-BpCuMnjk.js +0 -589
  115. package/dist/tokenCommit-VWz-2jEf.js +0 -20
  116. package/dist/wuiHttp-oeHs7X_c.js +0 -118
@@ -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};