urfu-ui-kit-react 2.1.5 → 2.1.7-next.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 (192) hide show
  1. package/dist/components/Accordion/Accordion.d.ts +1 -1
  2. package/dist/components/Accordion/Accordion.d.ts.map +1 -1
  3. package/dist/components/Accordion/Accordion.js +9 -8
  4. package/dist/components/Accordion/Accordion.types.d.ts +2 -0
  5. package/dist/components/Accordion/Accordion.types.d.ts.map +1 -1
  6. package/dist/components/BreadCrumbs/BreadCrumbs.d.ts.map +1 -1
  7. package/dist/components/BreadCrumbs/BreadCrumbs.js +20 -19
  8. package/dist/components/Calendar/Calendar.d.ts.map +1 -1
  9. package/dist/components/Calendar/Calendar.js +145 -144
  10. package/dist/components/Calendar/Calendar.types.d.ts +9 -4
  11. package/dist/components/Calendar/Calendar.types.d.ts.map +1 -1
  12. package/dist/components/Card/Card.d.ts.map +1 -1
  13. package/dist/components/Card/Card.js +37 -31
  14. package/dist/components/ColumnSettings/ColumnSettings.d.ts.map +1 -1
  15. package/dist/components/ColumnSettings/ColumnSettings.js +72 -72
  16. package/dist/components/Drawer/Drawer.d.ts +11 -0
  17. package/dist/components/Drawer/Drawer.d.ts.map +1 -0
  18. package/dist/components/Drawer/Drawer.js +87 -0
  19. package/dist/components/Drawer/Drawer.types.d.ts +44 -0
  20. package/dist/components/Drawer/Drawer.types.d.ts.map +1 -0
  21. package/dist/components/ErrorScreen/ErrorScreen.d.ts.map +1 -1
  22. package/dist/components/ErrorScreen/ErrorScreen.js +172 -138
  23. package/dist/components/FormField/FormField.d.ts +1 -1
  24. package/dist/components/FormField/FormField.d.ts.map +1 -1
  25. package/dist/components/FormField/FormField.js +42 -29
  26. package/dist/components/FormField/FormField.types.d.ts +6 -0
  27. package/dist/components/FormField/FormField.types.d.ts.map +1 -1
  28. package/dist/components/InfiniteScroll/InfiniteScroll.d.ts +22 -0
  29. package/dist/components/InfiniteScroll/InfiniteScroll.d.ts.map +1 -0
  30. package/dist/components/InfiniteScroll/InfiniteScroll.js +27 -0
  31. package/dist/components/InputText/InputText.d.ts +39 -2
  32. package/dist/components/InputText/InputText.d.ts.map +1 -1
  33. package/dist/components/InputText/InputText.js +103 -94
  34. package/dist/components/InputText/InputText.types.d.ts +11 -0
  35. package/dist/components/InputText/InputText.types.d.ts.map +1 -1
  36. package/dist/components/InputTime/inputTimeKeyDown.d.ts +17 -2
  37. package/dist/components/InputTime/inputTimeKeyDown.d.ts.map +1 -1
  38. package/dist/components/InputTime/useInputTimeWheel.d.ts +13 -1
  39. package/dist/components/InputTime/useInputTimeWheel.d.ts.map +1 -1
  40. package/dist/components/Menu/Menu.d.ts.map +1 -1
  41. package/dist/components/Menu/Menu.js +54 -49
  42. package/dist/components/Modal/Modal.d.ts.map +1 -1
  43. package/dist/components/Modal/Modal.js +52 -49
  44. package/dist/components/Modal/Modal.types.d.ts +4 -2
  45. package/dist/components/Modal/Modal.types.d.ts.map +1 -1
  46. package/dist/components/Modal/useModalTitleClearance.js +5 -5
  47. package/dist/components/Multiselect/Multiselect.js +1 -1
  48. package/dist/components/Notification/Notification.d.ts.map +1 -1
  49. package/dist/components/Notification/Notification.js +97 -86
  50. package/dist/components/OfflineBanner/OfflineBanner.d.ts.map +1 -1
  51. package/dist/components/OfflineBanner/OfflineBanner.js +40 -32
  52. package/dist/components/Pagination/Pagination.d.ts.map +1 -1
  53. package/dist/components/Pagination/Pagination.js +61 -66
  54. package/dist/components/SearchSelect/SearchSelect.d.ts.map +1 -1
  55. package/dist/components/SearchSelect/SearchSelect.js +137 -134
  56. package/dist/components/TabPanels/TabPanels.d.ts +13 -0
  57. package/dist/components/TabPanels/TabPanels.d.ts.map +1 -0
  58. package/dist/components/TabPanels/TabPanels.js +8 -0
  59. package/dist/components/Table/Filter/Filter.d.ts.map +1 -1
  60. package/dist/components/Table/Filter/Filter.js +47 -47
  61. package/dist/components/Table/Filter/Filter.types.d.ts +2 -1
  62. package/dist/components/Table/Filter/Filter.types.d.ts.map +1 -1
  63. package/dist/components/Table/Filter/SelectFilter.d.ts.map +1 -1
  64. package/dist/components/Table/Filter/SelectFilter.js +9 -9
  65. package/dist/components/Table/Table.d.ts +1 -1
  66. package/dist/components/Table/Table.d.ts.map +1 -1
  67. package/dist/components/Table/Table.dataPipeline.d.ts +4 -3
  68. package/dist/components/Table/Table.dataPipeline.d.ts.map +1 -1
  69. package/dist/components/Table/Table.dataPipeline.js +63 -62
  70. package/dist/components/Table/Table.js +297 -297
  71. package/dist/components/Table/Table.rowTypes.d.ts +6 -0
  72. package/dist/components/Table/Table.rowTypes.d.ts.map +1 -0
  73. package/dist/components/Table/Table.types.d.ts +10 -3
  74. package/dist/components/Table/Table.types.d.ts.map +1 -1
  75. package/dist/components/Table/TableHead.d.ts +27 -19
  76. package/dist/components/Table/TableHead.d.ts.map +1 -1
  77. package/dist/components/Table/TableHead.js +1 -1
  78. package/dist/components/Table/TableMobileCard.d.ts +11 -11
  79. package/dist/components/Table/TableMobileCard.d.ts.map +1 -1
  80. package/dist/components/Table/TableMobileCard.js +81 -84
  81. package/dist/components/Table/TableMobileView.d.ts +7 -5
  82. package/dist/components/Table/TableMobileView.d.ts.map +1 -1
  83. package/dist/components/Table/TableRow.d.ts +10 -8
  84. package/dist/components/Table/TableRow.d.ts.map +1 -1
  85. package/dist/components/Table/TableRow.js +116 -112
  86. package/dist/components/Table/useTableColumnPinning.d.ts.map +1 -1
  87. package/dist/components/Table/useTableVirtualization.d.ts +5 -5
  88. package/dist/components/Table/useTableVirtualization.d.ts.map +1 -1
  89. package/dist/components/Table/useTableVirtualization.js +20 -20
  90. package/dist/components/Tabs/Tabs.d.ts +1 -1
  91. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  92. package/dist/components/Tabs/Tabs.js +109 -104
  93. package/dist/components/Tabs/Tabs.types.d.ts +29 -1
  94. package/dist/components/Tabs/Tabs.types.d.ts.map +1 -1
  95. package/dist/components/Tabs/distributeTabs.d.ts +6 -0
  96. package/dist/components/Tabs/distributeTabs.d.ts.map +1 -1
  97. package/dist/components/Tabs/tabsIndicator.d.ts +7 -3
  98. package/dist/components/Tabs/tabsIndicator.d.ts.map +1 -1
  99. package/dist/components/Tabs/tabsScroll.d.ts +20 -0
  100. package/dist/components/Tabs/tabsScroll.d.ts.map +1 -0
  101. package/dist/components/Tabs/useTabsOverflow.d.ts +3 -1
  102. package/dist/components/Tabs/useTabsOverflow.d.ts.map +1 -1
  103. package/dist/components/Tabs/useTabsOverflow.js +32 -32
  104. package/dist/components/Tabs/useTabsScroll.d.ts +4 -0
  105. package/dist/components/Tabs/useTabsScroll.d.ts.map +1 -0
  106. package/dist/components/Tabs/useTabsScroll.js +17 -0
  107. package/dist/components/Textarea/Textarea.d.ts +22 -2
  108. package/dist/components/Textarea/Textarea.d.ts.map +1 -1
  109. package/dist/components/Textarea/Textarea.js +48 -43
  110. package/dist/components/Textarea/Textarea.types.d.ts +1 -0
  111. package/dist/components/Textarea/Textarea.types.d.ts.map +1 -1
  112. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  113. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  114. package/dist/components/Tooltip/Tooltip.js +151 -132
  115. package/dist/components/Tooltip/Tooltip.types.d.ts +7 -2
  116. package/dist/components/Tooltip/Tooltip.types.d.ts.map +1 -1
  117. package/dist/components/TreeView/TreeView.js +95 -95
  118. package/dist/components/TreeView/TreeView.types.d.ts +1 -1
  119. package/dist/components/TreeView/TreeView.types.d.ts.map +1 -1
  120. package/dist/components/VirtualList/VirtualList.d.ts +45 -0
  121. package/dist/components/VirtualList/VirtualList.d.ts.map +1 -0
  122. package/dist/components/VirtualList/VirtualList.js +62 -0
  123. package/dist/dev/index.js +1306 -584
  124. package/dist/dev/types/react/src/dev/index.d.ts +1 -1
  125. package/dist/dev/types/vanilla/src/core/motion.d.ts +41 -0
  126. package/dist/dev/types/vanilla/src/core/requestLog.d.ts +29 -0
  127. package/dist/dev/types/vanilla/src/dev/highlight.d.ts +32 -0
  128. package/dist/dev/types/vanilla/src/dev/intercept.d.ts +4 -1
  129. package/dist/dev/types/vanilla/src/dev/motionModes.d.ts +30 -0
  130. package/dist/dev/types/vanilla/src/dev/panelKit.d.ts +49 -0
  131. package/dist/dev/types/vanilla/src/dev/panelStyles.d.ts +7 -0
  132. package/dist/dev/types/vanilla/src/dev/rules.d.ts +31 -0
  133. package/dist/dev/types/vanilla/src/dev/store.d.ts +7 -4
  134. package/dist/dev/types/vanilla/src/dev/types.d.ts +14 -3
  135. package/dist/dev/types/vanilla/src/dev/viewModes.d.ts +22 -0
  136. package/dist/hooks/useCollapseMotion.d.ts +18 -0
  137. package/dist/hooks/useCollapseMotion.d.ts.map +1 -0
  138. package/dist/hooks/useCollapseMotion.js +9 -0
  139. package/dist/hooks/useDismiss.d.ts +7 -1
  140. package/dist/hooks/useDismiss.d.ts.map +1 -1
  141. package/dist/hooks/useDismiss.js +19 -17
  142. package/dist/hooks/useEnterMotion.d.ts +9 -0
  143. package/dist/hooks/useEnterMotion.d.ts.map +1 -0
  144. package/dist/hooks/useEnterMotion.js +10 -0
  145. package/dist/hooks/useForwardedRef.d.ts +8 -0
  146. package/dist/hooks/useForwardedRef.d.ts.map +1 -0
  147. package/dist/hooks/useForwardedRef.js +8 -0
  148. package/dist/hooks/useInfiniteScroll.d.ts +27 -0
  149. package/dist/hooks/useInfiniteScroll.d.ts.map +1 -0
  150. package/dist/hooks/useInfiniteScroll.js +13 -0
  151. package/dist/hooks/useMountTransition.d.ts +1 -1
  152. package/dist/hooks/useMountTransition.d.ts.map +1 -1
  153. package/dist/hooks/useMountTransition.js +14 -13
  154. package/dist/hooks/useVirtualList.d.ts +34 -0
  155. package/dist/hooks/useVirtualList.d.ts.map +1 -0
  156. package/dist/hooks/useVirtualList.js +21 -0
  157. package/dist/index.d.ts +15 -1
  158. package/dist/index.d.ts.map +1 -1
  159. package/dist/shared/collapseMotion.d.ts +32 -0
  160. package/dist/shared/collapseMotion.d.ts.map +1 -0
  161. package/dist/shared/infiniteScroll.d.ts +42 -0
  162. package/dist/shared/infiniteScroll.d.ts.map +1 -0
  163. package/dist/shared/kitCopy.js +1 -1
  164. package/dist/shared/linkClick.d.ts +7 -0
  165. package/dist/shared/linkClick.d.ts.map +1 -0
  166. package/dist/shared/motion.d.ts +42 -0
  167. package/dist/shared/motion.d.ts.map +1 -0
  168. package/dist/shared/popupTransition.d.ts +10 -2
  169. package/dist/shared/popupTransition.d.ts.map +1 -1
  170. package/dist/shared/popupTransition.js +6 -5
  171. package/dist/shared/virtualList.d.ts +103 -0
  172. package/dist/shared/virtualList.d.ts.map +1 -0
  173. package/dist/style-no-fonts.css +1 -1
  174. package/dist/style.css +1 -1
  175. package/dist/style.layer.css +2 -2
  176. package/dist/style.shell.css +5 -5
  177. package/dist/urfu-ui-kit-react.js +53 -45
  178. package/dist/utils/describeError.d.ts +12 -1
  179. package/dist/utils/describeError.d.ts.map +1 -1
  180. package/dist/vanilla/core/collapseMotion.js +58 -0
  181. package/dist/vanilla/core/dateMask.js +6 -6
  182. package/dist/vanilla/core/describeError.js +169 -112
  183. package/dist/vanilla/core/distributeTabs.js +23 -20
  184. package/dist/vanilla/core/infiniteScroll.js +79 -0
  185. package/dist/vanilla/core/kitRegistry.js +4 -4
  186. package/dist/vanilla/core/linkClick.js +2 -0
  187. package/dist/vanilla/core/motion.js +29 -0
  188. package/dist/vanilla/core/requestLog.js +40 -0
  189. package/dist/vanilla/core/tabsIndicator.js +29 -26
  190. package/dist/vanilla/core/tabsScroll.js +29 -0
  191. package/dist/vanilla/core/virtualList.js +213 -0
  192. package/package.json +1 -1
package/dist/dev/index.js CHANGED
@@ -1,415 +1,962 @@
1
- import { useSyncExternalStore as Ht } from "react";
2
- let I = [], jt = 1;
3
- const K = /* @__PURE__ */ new Set();
4
- let O = !1;
5
- function J() {
6
- O || (O = !0, setTimeout(() => {
7
- O = !1, K.forEach((t) => t());
1
+ import { useSyncExternalStore as zr } from "react";
2
+ const se = 10, Dr = /* @__PURE__ */ new Set(["fetch", "xmlhttprequest"]);
3
+ let M = [];
4
+ function Tr(t, e = typeof location > "u" ? "" : location.href) {
5
+ try {
6
+ const r = new URL(t, e || void 0), o = e ? new URL(e).origin : "";
7
+ return r.origin === o ? r.pathname : `${r.host}${r.pathname}`;
8
+ } catch {
9
+ return t.split(/[?#]/)[0];
10
+ }
11
+ }
12
+ function Mr(t) {
13
+ for (const e of t) {
14
+ const r = e;
15
+ Dr.has(r.initiatorType) && M.push({
16
+ time: Math.round((performance.timeOrigin || 0) + r.startTime),
17
+ path: Tr(r.name),
18
+ status: typeof r.responseStatus == "number" ? r.responseStatus : void 0,
19
+ duration: Math.round(r.duration)
20
+ });
21
+ }
22
+ M.length > se && (M = M.slice(-se));
23
+ }
24
+ function Br() {
25
+ return M;
26
+ }
27
+ function Rr() {
28
+ if (typeof PerformanceObserver > "u") return () => {
29
+ };
30
+ let t;
31
+ try {
32
+ t = new PerformanceObserver((e) => Mr(e.getEntries())), t.observe({ type: "resource", buffered: !0 });
33
+ } catch {
34
+ return () => {
35
+ };
36
+ }
37
+ return () => {
38
+ t.disconnect(), M = [];
39
+ };
40
+ }
41
+ let pt = [], Or = 1;
42
+ const Rt = /* @__PURE__ */ new Set();
43
+ let ct = !1;
44
+ function Ot() {
45
+ ct || (ct = !0, setTimeout(() => {
46
+ ct = !1, Rt.forEach((t) => t());
8
47
  }, 16));
9
48
  }
10
- function Ut(t, e, n) {
11
- const o = Date.now(), r = { id: jt++, service: t, method: e.toUpperCase(), path: n, status: "pending", duration: null, endedAt: null, faked: !1 };
12
- I = [...I.slice(-49), r], J();
13
- let a = !1;
14
- return (s, i) => {
15
- a || (a = !0, r.status = s, r.faked = i, r.endedAt = Date.now(), r.duration = r.endedAt - o, J());
49
+ function qr(t, e, r) {
50
+ const o = Date.now(), a = { id: Or++, service: t, method: e.toUpperCase(), path: r, status: "pending", duration: null, endedAt: null, faked: !1 };
51
+ pt = [...pt.slice(-49), a], Ot();
52
+ let n = !1;
53
+ return (i, u) => {
54
+ n || (n = !0, a.status = i, a.faked = u, a.endedAt = Date.now(), a.duration = a.endedAt - o, Ot());
16
55
  };
17
56
  }
18
- function nt() {
19
- return [...I].reverse();
57
+ function Qt() {
58
+ return [...pt].reverse();
20
59
  }
21
- function ft() {
22
- I = [], O = !1, J();
60
+ function Se() {
61
+ pt = [], ct = !1, Ot();
23
62
  }
24
- function Nt(t) {
25
- return K.add(t), () => {
26
- K.delete(t);
63
+ function Ir(t) {
64
+ return Rt.add(t), () => {
65
+ Rt.delete(t);
27
66
  };
28
67
  }
29
- const pt = "urfu-ui-kit:dev:", x = /* @__PURE__ */ new Map(), X = /* @__PURE__ */ new Set();
30
- let ht;
31
- const bt = (t) => `${pt}${t}`, _t = ["offline", "network", "slow"];
32
- let L = null;
33
- const q = /* @__PURE__ */ new Set();
34
- function Wt() {
35
- let t;
68
+ const Le = 6e4, _e = 1e5, ze = 1500;
69
+ function De(t) {
36
70
  try {
37
- t = new URLSearchParams(window.location.search).get("dev");
71
+ return JSON.parse(t), !0;
72
+ } catch {
73
+ return !1;
74
+ }
75
+ }
76
+ const B = (t) => typeof t == "string";
77
+ function Te(t) {
78
+ if (!(typeof t != "number" || !Number.isFinite(t) || t <= 0))
79
+ return Math.min(Math.round(t), Le);
80
+ }
81
+ function Me(t) {
82
+ if (!t || typeof t != "object") return null;
83
+ const e = t;
84
+ if (!B(e.path) || !e.path || typeof e.status != "number" || !Number.isInteger(e.status) || e.status < 100 || e.status > 599) return null;
85
+ const r = Te(e.delay);
86
+ return {
87
+ path: e.path,
88
+ status: e.status,
89
+ ...B(e.method) && e.method ? { method: e.method } : {},
90
+ ...B(e.message) ? { message: e.message } : {},
91
+ ...e.html === !0 ? { html: !0 } : {},
92
+ ...B(e.body) && e.body && e.body.length <= _e ? { body: e.body } : {},
93
+ ...r ? { delay: r } : {}
94
+ };
95
+ }
96
+ function Pr(t) {
97
+ const e = Me(t);
98
+ if (!e) return null;
99
+ const { id: r, enabled: o } = t;
100
+ return B(r) && r ? { ...e, id: r, enabled: o !== !1 } : null;
101
+ }
102
+ const ft = "devRules", Nr = (t) => {
103
+ const e = new TextEncoder().encode(t);
104
+ let r = "";
105
+ return e.forEach((o) => {
106
+ r += String.fromCharCode(o);
107
+ }), btoa(r).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
108
+ }, jr = (t) => {
109
+ const e = atob(t.replace(/-/g, "+").replace(/_/g, "/"));
110
+ return new TextDecoder().decode(Uint8Array.from(e, (r) => r.charCodeAt(0)));
111
+ };
112
+ function Ur(t) {
113
+ let e = 0;
114
+ const r = t.map(({ service: o, rule: a }) => {
115
+ const n = a.body !== void 0 && a.body.length <= ze;
116
+ return a.body !== void 0 && !n && (e += 1), {
117
+ s: o,
118
+ ...a.method ? { m: a.method } : {},
119
+ p: a.path,
120
+ c: a.status,
121
+ ...a.message !== void 0 ? { t: a.message } : {},
122
+ ...a.html ? { h: 1 } : {},
123
+ ...n ? { b: a.body } : {},
124
+ ...a.delay ? { d: a.delay } : {}
125
+ };
126
+ });
127
+ return { value: Nr(JSON.stringify(r)), droppedBodies: e };
128
+ }
129
+ function Hr(t) {
130
+ try {
131
+ const e = JSON.parse(jr(t));
132
+ return Array.isArray(e) ? e.flatMap((r) => {
133
+ if (!r || typeof r != "object" || !B(r.s)) return [];
134
+ const o = Me({
135
+ method: r.m,
136
+ path: r.p,
137
+ status: r.c,
138
+ message: r.t,
139
+ html: r.h === 1,
140
+ body: r.b,
141
+ delay: r.d
142
+ });
143
+ return o ? [{ service: r.s, rule: o }] : [];
144
+ }) : [];
145
+ } catch {
146
+ return [];
147
+ }
148
+ }
149
+ const Be = "urfu-ui-kit:dev:", A = /* @__PURE__ */ new Map(), qt = /* @__PURE__ */ new Set();
150
+ let Re;
151
+ const Oe = (t) => `${Be}${t}`, Zr = ["offline", "network", "slow"];
152
+ let I = null, P = null;
153
+ const ht = /* @__PURE__ */ new Set(), qe = () => `rule-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;
154
+ function Kr() {
155
+ let t, e;
156
+ try {
157
+ const r = new URLSearchParams(window.location.search);
158
+ t = r.get("dev"), e = r.get(ft);
38
159
  } catch {
39
160
  return;
40
161
  }
41
- if (t !== null) {
162
+ if (!(t === null && e === null)) {
42
163
  if (t === "off") {
43
- L = null;
164
+ I = null, P = null;
44
165
  try {
45
- Object.keys(localStorage).filter((e) => e.startsWith(pt)).forEach((e) => localStorage.removeItem(e));
166
+ Object.keys(localStorage).filter((r) => r.startsWith(Be)).forEach((r) => localStorage.removeItem(r));
46
167
  } catch {
47
168
  }
48
169
  } else
49
- L = t.split(",").map((e) => e.trim()).filter(Boolean), q.clear();
170
+ t !== null && (I = t.split(",").map((r) => r.trim()).filter(Boolean)), e !== null && (P = Hr(e)), ht.clear();
50
171
  try {
51
- const e = new URL(window.location.href);
52
- e.searchParams.delete("dev"), window.history.replaceState(window.history.state, "", e.href);
172
+ const r = new URL(window.location.href);
173
+ r.searchParams.delete("dev"), r.searchParams.delete(ft), window.history.replaceState(window.history.state, "", r.href);
53
174
  } catch {
54
175
  }
55
176
  }
56
177
  }
57
- function Bt(t) {
58
- return [..._t, ...t.builtins ?? [], ...(t.groups ?? []).flatMap((e) => e.items.map((n) => n.id))];
178
+ function Vr(t) {
179
+ return [...Zr, ...t.builtins ?? [], ...(t.groups ?? []).flatMap((e) => e.items.map((r) => r.id))];
59
180
  }
60
- function Kt(t) {
61
- if (!L || q.has(t.config.service)) return;
62
- const e = new Set(Bt(t.config)), n = L.filter((o) => e.has(o));
63
- n.length && (q.add(t.config.service), t.state = { ...t.state, faults: n }, _(t.config.service, t.state));
181
+ function Wr(t) {
182
+ const e = t.config.service;
183
+ if (!I && !P || ht.has(e)) return;
184
+ const r = new Set(Vr(t.config)), o = I ? I.filter((n) => r.has(n)) : [], a = P ? P.filter((n) => n.service === e).map((n) => ({ ...n.rule, id: qe(), enabled: !0 })) : null;
185
+ !o.length && !a || (ht.add(e), t.state = { ...t.state, faults: o, ...a ? { rules: a } : {} }, at(e, t.state));
64
186
  }
65
- function Jt(t) {
187
+ function Jr(t) {
66
188
  try {
67
- const e = JSON.parse(localStorage.getItem(bt(t)) ?? "null");
189
+ const e = JSON.parse(localStorage.getItem(Oe(t)) ?? "null");
68
190
  return {
69
- faults: Array.isArray(e == null ? void 0 : e.faults) ? e.faults.filter((n) => typeof n == "string") : [],
70
- rules: Array.isArray(e == null ? void 0 : e.rules) ? e.rules : [],
191
+ faults: Array.isArray(e == null ? void 0 : e.faults) ? e.faults.filter((r) => typeof r == "string") : [],
192
+ rules: Array.isArray(e == null ? void 0 : e.rules) ? e.rules.flatMap((r) => Pr(r) ?? []) : [],
71
193
  ...(e == null ? void 0 : e.launcher) === "visible" || (e == null ? void 0 : e.launcher) === "hidden" ? { launcher: e.launcher } : {}
72
194
  };
73
195
  } catch {
74
196
  return { faults: [], rules: [] };
75
197
  }
76
198
  }
77
- function _(t, e) {
199
+ function at(t, e) {
78
200
  try {
79
- localStorage.setItem(bt(t), JSON.stringify(e));
201
+ localStorage.setItem(Oe(t), JSON.stringify(e));
80
202
  } catch {
81
203
  }
82
204
  }
83
- function Xt(t) {
84
- t && (ht = t);
205
+ function Yr(t) {
206
+ t && (Re = t);
85
207
  }
86
- function Vt() {
87
- return ht;
208
+ function Xr() {
209
+ return Re;
88
210
  }
89
- function Zt(t, e) {
90
- const n = { config: t, state: Jt(t.service), kit: e };
91
- return Kt(n), x.set(t.service, n), D(), n;
211
+ function Gr(t, e) {
212
+ const r = { config: t, state: Jr(t.service), kit: e };
213
+ return Wr(r), A.set(t.service, r), U(), r;
92
214
  }
93
- function Gt(t) {
94
- x.delete(t), x.size || (L = null, q.clear()), D();
215
+ function Qr(t) {
216
+ A.delete(t), A.size || (I = null, P = null, ht.clear()), U();
95
217
  }
96
- function m() {
97
- return [...x.values()];
218
+ function y() {
219
+ return [...A.values()];
98
220
  }
99
- function Yt(t) {
100
- return t ? x.get(t) : x.values().next().value;
221
+ function le(t) {
222
+ return t ? A.get(t) : A.values().next().value;
101
223
  }
102
- function gt(t) {
103
- return X.add(t), () => {
104
- X.delete(t);
224
+ function Ie(t) {
225
+ return qt.add(t), () => {
226
+ qt.delete(t);
105
227
  };
106
228
  }
107
- function D() {
108
- X.forEach((t) => t());
229
+ function U() {
230
+ qt.forEach((t) => t());
109
231
  }
110
- function W(t, e) {
111
- t.state = e, _(t.config.service, e), D();
232
+ function $t(t, e) {
233
+ t.state = e, at(t.config.service, e), U();
112
234
  }
113
- function Qt(t, e, n) {
114
- const o = t.state.faults.filter((r) => r !== e);
115
- W(t, { ...t.state, faults: n ? [...o, e] : o });
235
+ function to(t, e, r) {
236
+ const o = t.state.faults.filter((a) => a !== e);
237
+ $t(t, { ...t.state, faults: r ? [...o, e] : o });
116
238
  }
117
- function te(t, e) {
118
- const n = `rule-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;
119
- W(t, { ...t.state, rules: [...t.state.rules, { ...e, id: n, enabled: !0 }] });
239
+ function eo(t, e) {
240
+ $t(t, { ...t.state, rules: [...t.state.rules, { ...e, id: qe(), enabled: !0 }] });
120
241
  }
121
- function ee(t, e, n) {
122
- W(t, { ...t.state, rules: t.state.rules.map((o) => o.id === e ? { ...o, enabled: n } : o) });
242
+ function ro(t, e, r) {
243
+ $t(t, { ...t.state, rules: t.state.rules.map((o) => o.id === e ? { ...o, enabled: r } : o) });
123
244
  }
124
- function ne(t, e) {
125
- W(t, { ...t.state, rules: t.state.rules.filter((n) => n.id !== e) });
245
+ function oo(t, e) {
246
+ $t(t, { ...t.state, rules: t.state.rules.filter((r) => r.id !== e) });
126
247
  }
127
- function oe() {
128
- x.forEach((t) => {
129
- t.state = { faults: [], rules: [], ...t.state.launcher ? { launcher: t.state.launcher } : {} }, _(t.config.service, t.state);
130
- }), D();
248
+ function ao() {
249
+ A.forEach((t) => {
250
+ t.state = { faults: [], rules: [], ...t.state.launcher ? { launcher: t.state.launcher } : {} }, at(t.config.service, t.state);
251
+ }), U();
131
252
  }
132
- function z(t) {
253
+ function bt(t) {
133
254
  return t.state.faults.length + t.state.rules.filter((e) => e.enabled).length;
134
255
  }
135
- function ae(t) {
256
+ function no(t) {
136
257
  return t.state.launcher ?? t.config.launcher ?? "visible";
137
258
  }
138
- function at(t) {
139
- x.forEach((e) => {
140
- e.state = { ...e.state, launcher: t }, _(e.config.service, e.state);
141
- }), D();
142
- }
143
- const re = 1e4, rt = 200, T = ".u-error-screen, .u-notification-fail, .u-notification-warning, .u-offline-banner-offline";
144
- let F = [], se = 1;
145
- const V = /* @__PURE__ */ new WeakMap(), H = /* @__PURE__ */ new Set();
146
- let y = null;
147
- const $ = (t) => {
148
- const e = (t ?? "").replace(/\s+/g, " ").trim();
149
- return e.length > rt ? `${e.slice(0, rt - 1)}…` : e;
150
- }, ie = (t) => t.status === "network" || typeof t.status == "number" && t.status >= 400;
151
- function le(t, e) {
152
- var i;
153
- const n = m().map((f) => f.config.service), o = (i = e.closest("[data-name]")) == null ? void 0 : i.getAttribute("data-name"), r = o && n.includes(o) ? o : null, a = nt().find((f) => ie(f) && f.endedAt !== null && t - f.endedAt <= re && (!r || f.service === r));
154
- if (!a) return;
155
- const s = `${a.method} ${a.path} → ${a.status === "network" ? "сеть" : a.status}`;
156
- return n.length > 1 ? `${a.service}: ${s}` : s;
259
+ function io() {
260
+ A.forEach((t) => {
261
+ t.state = { faults: t.state.faults, rules: t.state.rules }, at(t.config.service, t.state);
262
+ }), U();
157
263
  }
158
264
  function ce(t) {
159
- var o, r, a;
265
+ A.forEach((e) => {
266
+ e.state = { ...e.state, launcher: t }, at(e.config.service, e.state);
267
+ }), U();
268
+ }
269
+ const uo = 1e4, de = 200, X = ".u-error-screen, .u-notification-fail, .u-notification-warning, .u-offline-banner-offline";
270
+ let vt = [], so = 1;
271
+ const It = /* @__PURE__ */ new WeakMap(), gt = /* @__PURE__ */ new Set();
272
+ let L = null;
273
+ const D = (t) => {
274
+ const e = (t ?? "").replace(/\s+/g, " ").trim();
275
+ return e.length > de ? `${e.slice(0, de - 1)}…` : e;
276
+ }, lo = (t) => t.status === "network" || typeof t.status == "number" && t.status >= 400;
277
+ function co(t, e) {
278
+ var u;
279
+ const r = y().map((p) => p.config.service), o = (u = e.closest("[data-name]")) == null ? void 0 : u.getAttribute("data-name"), a = o && r.includes(o) ? o : null, n = Qt().find((p) => lo(p) && p.endedAt !== null && t - p.endedAt <= uo && (!a || p.service === a));
280
+ if (!n) return;
281
+ const i = `${n.method} ${n.path} → ${n.status === "network" ? "сеть" : n.status}`;
282
+ return r.length > 1 ? `${n.service}: ${i}` : i;
283
+ }
284
+ function po(t) {
285
+ var o, a, n;
160
286
  if (t.classList.contains("u-error-screen"))
161
287
  return {
162
288
  kind: "screen",
163
289
  // Код — в data-error-code на корне заглушки: крупный код рисуется не у всех вариантов (forbidden, serverError).
164
290
  // .u-error-screen-code — для разметки кита до появления атрибута.
165
- code: $(t.dataset.errorCode || ((o = t.querySelector(".u-error-screen-code")) == null ? void 0 : o.textContent)) || void 0,
166
- title: $((r = t.querySelector(".u-error-screen-title")) == null ? void 0 : r.textContent) || $(t.getAttribute("aria-label")) || "Заглушка",
167
- text: $((a = t.querySelector(".u-error-screen-description")) == null ? void 0 : a.textContent) || void 0
291
+ code: D(t.dataset.errorCode || ((o = t.querySelector(".u-error-screen-code")) == null ? void 0 : o.textContent)) || void 0,
292
+ title: D((a = t.querySelector(".u-error-screen-title")) == null ? void 0 : a.textContent) || D(t.getAttribute("aria-label")) || "Заглушка",
293
+ text: D((n = t.querySelector(".u-error-screen-description")) == null ? void 0 : n.textContent) || void 0
168
294
  };
169
295
  if (t.classList.contains("u-offline-banner-offline"))
170
- return { kind: "offline", title: $(t.textContent) || "Нет связи" };
171
- const e = t.classList.contains("u-notification-fail") ? "fail" : "warning", n = t.querySelector(".u-notification-content") ?? t;
172
- return { kind: "notification", variant: e, title: $(n.textContent) || "Уведомление" };
296
+ return { kind: "offline", title: D(t.textContent) || "Нет связи" };
297
+ const e = t.classList.contains("u-notification-fail") ? "fail" : "warning", r = t.querySelector(".u-notification-content") ?? t;
298
+ return { kind: "notification", variant: e, title: D(r.textContent) || "Уведомление" };
173
299
  }
174
- function st(t) {
175
- if (!t.isConnected || !t.matches(T)) return;
176
- const e = ce(t);
300
+ function pe(t) {
301
+ if (!t.isConnected || !t.matches(X)) return;
302
+ const e = po(t);
177
303
  if (!e) return;
178
- const n = JSON.stringify(e);
179
- if (V.get(t) === n) return;
180
- V.set(t, n);
304
+ const r = JSON.stringify(e);
305
+ if (It.get(t) === r) return;
306
+ It.set(t, r);
181
307
  const o = Date.now();
182
- F = [...F.slice(-29), { id: se++, at: o, ...e, cause: le(o, t) }], H.forEach((r) => r());
308
+ vt = [...vt.slice(-29), { id: so++, at: o, ...e, cause: co(o, t) }], gt.forEach((a) => a());
183
309
  }
184
- function ue(t, e) {
185
- t instanceof Element && (t.matches(T) && e.push(t), t.querySelectorAll(T).forEach((n) => e.push(n)));
310
+ function fo(t, e) {
311
+ t instanceof Element && (t.matches(X) && e.push(t), t.querySelectorAll(X).forEach((r) => e.push(r)));
186
312
  }
187
- function de() {
188
- y || typeof MutationObserver > "u" || (y = new MutationObserver((t) => {
313
+ function ho() {
314
+ L || typeof MutationObserver > "u" || (L = new MutationObserver((t) => {
189
315
  const e = [];
190
- t.forEach((n) => {
191
- if (n.type === "childList") {
192
- n.addedNodes.forEach((r) => ue(r, e));
316
+ t.forEach((r) => {
317
+ if (r.type === "childList") {
318
+ r.addedNodes.forEach((a) => fo(a, e));
193
319
  return;
194
320
  }
195
- const o = n.target;
196
- o.matches(T) ? e.push(o) : V.delete(o);
197
- }), e.length && setTimeout(() => e.forEach(st), 0);
198
- }), y.observe(document.documentElement, { childList: !0, subtree: !0, attributes: !0, attributeFilter: ["data-error-code", "class"] }), document.querySelectorAll(T).forEach(st));
321
+ const o = r.target;
322
+ o.matches(X) ? e.push(o) : It.delete(o);
323
+ }), e.length && setTimeout(() => e.forEach(pe), 0);
324
+ }), L.observe(document.documentElement, { childList: !0, subtree: !0, attributes: !0, attributeFilter: ["data-error-code", "class"] }), document.querySelectorAll(X).forEach(pe));
199
325
  }
200
- function fe() {
201
- y == null || y.disconnect(), y = null;
326
+ function bo() {
327
+ L == null || L.disconnect(), L = null;
202
328
  }
203
- function Z() {
204
- return [...F].reverse();
329
+ function Pe() {
330
+ return [...vt].reverse();
205
331
  }
206
- function vt() {
207
- F = [], H.forEach((t) => t());
332
+ function Ne() {
333
+ vt = [], gt.forEach((t) => t());
208
334
  }
209
- function pe(t) {
210
- return H.add(t), () => {
211
- H.delete(t);
335
+ function vo(t) {
336
+ return gt.add(t), () => {
337
+ gt.delete(t);
212
338
  };
213
339
  }
214
- const mt = 4e3, he = /* @__PURE__ */ new Set(["GET", "HEAD"]);
215
- function be(t, e) {
216
- let n;
340
+ const je = 4e3, go = /* @__PURE__ */ new Set(["GET", "HEAD"]);
341
+ function Ue(t) {
342
+ if (!/^[a-z][a-z\d+.-]*:\/\//i.test(t)) return { path: t.replace(/\/+$/, "") };
217
343
  try {
218
- n = new URL(t, window.location.href).pathname;
344
+ const e = new URL(t);
345
+ return { origin: e.origin, path: e.pathname.replace(/\/+$/, "") };
219
346
  } catch {
220
347
  return null;
221
348
  }
222
- if (!e) return n;
223
- const o = e.replace(/\/+$/, ""), r = n.indexOf(o);
224
- if (r < 0) return null;
225
- const a = n.slice(r + o.length);
226
- return a.startsWith("/") || a === "" ? a || "/" : null;
227
- }
228
- function ge(t, e) {
229
- const n = (s) => s.split("/").filter(Boolean), o = n(t.trim()), r = n(e), a = (s, i) => s === o.length ? i === r.length : o[s] === "**" ? a(s + 1, i) || i < r.length && a(s, i + 1) : i === r.length ? !1 : (o[s] === "*" || o[s] === r[i]) && a(s + 1, i + 1);
230
- return a(0, 0);
231
349
  }
232
- function ve(t, e) {
350
+ function mo(t, e) {
351
+ let r;
352
+ try {
353
+ r = new URL(t, window.location.href);
354
+ } catch {
355
+ return null;
356
+ }
357
+ const o = r.pathname;
358
+ if (!e) return o;
359
+ const a = Ue(e);
360
+ if (!a || a.origin && a.origin !== r.origin) return null;
361
+ const n = a.path, i = o.indexOf(n);
362
+ if (i < 0) return null;
363
+ const u = o.slice(i + n.length);
364
+ return u.startsWith("/") || u === "" ? u || "/" : null;
365
+ }
366
+ function xo(t, e) {
367
+ const r = (i) => i.split("/").filter(Boolean), o = r(t.trim()), a = r(e), n = (i, u) => i === o.length ? u === a.length : o[i] === "**" ? n(i + 1, u) || u < a.length && n(i, u + 1) : u === a.length ? !1 : (o[i] === "*" || o[i] === a[u]) && n(i + 1, u + 1);
368
+ return n(0, 0);
369
+ }
370
+ function wo(t, e) {
233
371
  var o;
234
- const n = (o = t.method) == null ? void 0 : o.trim().toUpperCase();
235
- return !n || n === "*" ? !0 : n === "WRITE" ? !he.has(e) : n === e;
372
+ const r = (o = t.method) == null ? void 0 : o.trim().toUpperCase();
373
+ return !r || r === "*" ? !0 : r === "WRITE" ? !go.has(e) : r === e;
236
374
  }
237
- function me(t, e) {
238
- return t.html ? {
375
+ const yo = (t, e) => Math.max(t.delay ?? 0, e);
376
+ function ko(t, e) {
377
+ const r = yo(t, e);
378
+ return t.body !== void 0 ? {
379
+ kind: "response",
380
+ delay: r,
381
+ status: t.status,
382
+ body: t.body,
383
+ contentType: De(t.body) ? "application/json" : "text/plain"
384
+ } : t.status < 400 ? { kind: "response", delay: r, status: t.status, body: "", contentType: "text/plain" } : t.html ? {
239
385
  kind: "response",
240
- delay: e,
386
+ delay: r,
241
387
  status: t.status,
242
388
  contentType: "text/html",
243
389
  body: `<html><body><h1>${t.status} ${t.message ?? "Bad Gateway"}</h1></body></html>`
244
390
  } : {
245
391
  kind: "response",
246
- delay: e,
392
+ delay: r,
247
393
  status: t.status,
248
394
  contentType: "application/json",
249
395
  body: JSON.stringify({ statusCode: t.status, message: t.message ?? `Сбой из dev-панели: ${t.status}` })
250
396
  };
251
397
  }
252
- function we(t) {
398
+ function Eo(t) {
253
399
  const e = new Set(t.state.faults);
254
400
  return [...(t.config.groups ?? []).flatMap((o) => o.items).filter((o) => e.has(o.id)).flatMap((o) => [].concat(o.request ?? [])), ...t.state.rules.filter((o) => o.enabled)];
255
401
  }
256
- function wt(t) {
257
- for (const e of m()) {
258
- const n = be(t, e.config.apiBase);
259
- if (n !== null) return { entry: e, path: n };
402
+ function He(t) {
403
+ var o;
404
+ let e = null, r = -1;
405
+ for (const a of y()) {
406
+ const n = mo(t, a.config.apiBase);
407
+ if (n === null) continue;
408
+ const i = a.config.apiBase ? ((o = Ue(a.config.apiBase)) == null ? void 0 : o.path.length) ?? 0 : 0;
409
+ i > r && (e = { entry: a, path: n }, r = i);
260
410
  }
261
- return null;
411
+ return e;
262
412
  }
263
- function xt({ entry: t, path: e }, n) {
264
- const o = n.toUpperCase(), r = new Set(t.state.faults), a = r.has("slow") ? mt : 0;
265
- if (r.has("offline") || r.has("network")) return { kind: "network", delay: a };
266
- const s = we(t).find((i) => ve(i, o) && ge(i.path, e));
267
- return s ? me(s, a) : a ? { kind: "pass", delay: a } : null;
413
+ function Ze({ entry: t, path: e }, r) {
414
+ const o = r.toUpperCase(), a = new Set(t.state.faults), n = a.has("slow") ? je : 0;
415
+ if (a.has("offline") || a.has("network")) return { kind: "network", delay: n };
416
+ const i = Eo(t).find((u) => wo(u, o) && xo(u.path, e));
417
+ return i ? ko(i, n) : n ? { kind: "pass", delay: n } : null;
268
418
  }
269
- const yt = (t, e) => Ut(t.entry.config.service, e, t.path), G = (t) => t.reason ?? new DOMException("The operation was aborted.", "AbortError");
270
- function xe(t, e) {
271
- return new Promise((n, o) => {
419
+ const Ke = (t, e) => qr(t.entry.config.service, e, t.path), Pt = (t) => t.reason ?? new DOMException("The operation was aborted.", "AbortError");
420
+ function Co(t, e) {
421
+ return new Promise((r, o) => {
272
422
  if (e != null && e.aborted) {
273
- o(G(e));
423
+ o(Pt(e));
274
424
  return;
275
425
  }
276
- const r = setTimeout(n, t);
426
+ const a = setTimeout(r, t);
277
427
  e == null || e.addEventListener("abort", () => {
278
- clearTimeout(r), o(G(e));
428
+ clearTimeout(a), o(Pt(e));
279
429
  }, { once: !0 });
280
430
  });
281
431
  }
282
- const $t = /* @__PURE__ */ new Set([204, 205, 304]), R = /* @__PURE__ */ new WeakSet();
283
- function ye(t) {
432
+ const Ve = /* @__PURE__ */ new Set([204, 205, 304]), lt = /* @__PURE__ */ new WeakSet();
433
+ function Fo(t) {
284
434
  if (typeof window > "u") return;
285
435
  const e = t ?? window;
286
- R.has(e) || (R.add(e), $e(e)), typeof XMLHttpRequest < "u" && !R.has(XMLHttpRequest.prototype) && (R.add(XMLHttpRequest.prototype), Se());
287
- }
288
- function $e(t) {
289
- var n;
290
- const e = (n = t.fetch) == null ? void 0 : n.bind(t);
291
- e && (t.fetch = async (o, r) => {
292
- const a = typeof o == "object" && "url" in o ? o : null, s = wt(a ? a.url : String(o));
293
- if (!s) return e(o, r);
294
- const i = (r == null ? void 0 : r.method) ?? (a == null ? void 0 : a.method) ?? "GET", f = yt(s, i), u = xt(s, i), p = (r == null ? void 0 : r.signal) ?? (a == null ? void 0 : a.signal);
436
+ lt.has(e) || (lt.add(e), Ao(e)), typeof XMLHttpRequest < "u" && !lt.has(XMLHttpRequest.prototype) && (lt.add(XMLHttpRequest.prototype), So());
437
+ }
438
+ function Ao(t) {
439
+ var r;
440
+ const e = (r = t.fetch) == null ? void 0 : r.bind(t);
441
+ e && (t.fetch = async (o, a) => {
442
+ const n = typeof o == "object" && "url" in o ? o : null, i = He(n ? n.url : String(o));
443
+ if (!i) return e(o, a);
444
+ const u = (a == null ? void 0 : a.method) ?? (n == null ? void 0 : n.method) ?? "GET", p = Ke(i, u), l = Ze(i, u), h = (a == null ? void 0 : a.signal) ?? (n == null ? void 0 : n.signal);
295
445
  try {
296
- if (u != null && u.delay && await xe(u.delay, p), p != null && p.aborted) throw G(p);
297
- if ((u == null ? void 0 : u.kind) === "network")
298
- throw f("network", !0), new TypeError("Failed to fetch");
299
- if ((u == null ? void 0 : u.kind) === "response")
300
- return f(u.status, !0), new Response($t.has(u.status) ? null : u.body, {
301
- status: u.status,
302
- headers: { "Content-Type": u.contentType }
446
+ if (l != null && l.delay && await Co(l.delay, h), h != null && h.aborted) throw Pt(h);
447
+ if ((l == null ? void 0 : l.kind) === "network")
448
+ throw p("network", !0), new TypeError("Failed to fetch");
449
+ if ((l == null ? void 0 : l.kind) === "response")
450
+ return p(l.status, !0), new Response(Ve.has(l.status) ? null : l.body, {
451
+ status: l.status,
452
+ headers: { "Content-Type": l.contentType }
303
453
  });
304
- const w = await e(o, r);
305
- return f(w.status, !1), w;
306
- } catch (w) {
307
- throw f(p != null && p.aborted ? "abort" : "network", !1), w;
454
+ const g = await e(o, a);
455
+ return p(g.status, !1), g;
456
+ } catch (g) {
457
+ throw p(h != null && h.aborted ? "abort" : "network", !1), g;
308
458
  }
309
459
  });
310
460
  }
311
- const it = /* @__PURE__ */ new WeakMap(), lt = /* @__PURE__ */ new WeakMap(), j = /* @__PURE__ */ new WeakMap(), ke = ["readyState", "responseURL", "status", "statusText", "responseText", "response", "getAllResponseHeaders", "getResponseHeader"];
312
- function Se() {
313
- const t = XMLHttpRequest.prototype, e = t.open, n = t.send, o = t.abort;
314
- t.open = function(a, s, ...i) {
315
- ct(this), ke.forEach((f) => {
316
- Reflect.deleteProperty(this, f);
317
- }), it.set(this, { method: a, url: String(s) }), e.call(this, a, s, ...i);
318
- }, t.send = function(a) {
319
- const s = it.get(this), i = s ? wt(s.url) : null;
320
- if (!s || !i) {
321
- n.call(this, a);
461
+ const fe = /* @__PURE__ */ new WeakMap(), he = /* @__PURE__ */ new WeakMap(), mt = /* @__PURE__ */ new WeakMap(), $o = ["readyState", "responseURL", "status", "statusText", "responseText", "response", "getAllResponseHeaders", "getResponseHeader"];
462
+ function So() {
463
+ const t = XMLHttpRequest.prototype, e = t.open, r = t.send, o = t.abort;
464
+ t.open = function(n, i, ...u) {
465
+ be(this), $o.forEach((p) => {
466
+ Reflect.deleteProperty(this, p);
467
+ }), fe.set(this, { method: n, url: String(i) }), e.call(this, n, i, ...u);
468
+ }, t.send = function(n) {
469
+ const i = fe.get(this), u = i ? He(i.url) : null;
470
+ if (!i || !u) {
471
+ r.call(this, n);
322
472
  return;
323
473
  }
324
- const f = yt(i, s.method);
325
- lt.set(this, f);
326
- const u = xt(i, s.method), p = () => {
327
- this.addEventListener("abort", () => f("abort", !1), { once: !0 }), this.addEventListener("loadend", () => f(this.status || "network", !1), { once: !0 }), n.call(this, a);
474
+ const p = Ke(u, i.method);
475
+ he.set(this, p);
476
+ const l = Ze(u, i.method), h = () => {
477
+ this.addEventListener("abort", () => p("abort", !1), { once: !0 }), this.addEventListener("loadend", () => p(this.status || "network", !1), { once: !0 }), r.call(this, n);
328
478
  };
329
- if (!u) {
330
- p();
479
+ if (!l) {
480
+ h();
331
481
  return;
332
482
  }
333
- j.set(this, setTimeout(() => {
334
- if (j.delete(this), u.kind === "pass") {
335
- p();
483
+ mt.set(this, setTimeout(() => {
484
+ if (mt.delete(this), l.kind === "pass") {
485
+ h();
336
486
  return;
337
487
  }
338
- f(u.kind === "network" ? "network" : u.status, !0), Ee(this, u, s.url);
339
- }, u.delay));
488
+ p(l.kind === "network" ? "network" : l.status, !0), Lo(this, l, i.url);
489
+ }, l.delay));
340
490
  }, t.abort = function() {
341
- var s;
342
- if (!ct(this)) {
491
+ var i;
492
+ if (!be(this)) {
343
493
  o.call(this);
344
494
  return;
345
495
  }
346
- (s = lt.get(this)) == null || s("abort", !1);
347
- const a = kt(this);
348
- a("readyState", 4), a("status", 0), Y(this, ["readystatechange", "abort", "loadend"]), a("readyState", 0);
496
+ (i = he.get(this)) == null || i("abort", !1);
497
+ const n = We(this);
498
+ n("readyState", 4), n("status", 0), Nt(this, ["readystatechange", "abort", "loadend"]), n("readyState", 0);
349
499
  };
350
500
  }
351
- function ct(t) {
352
- const e = j.get(t);
353
- return e === void 0 ? !1 : (clearTimeout(e), j.delete(t), !0);
501
+ function be(t) {
502
+ const e = mt.get(t);
503
+ return e === void 0 ? !1 : (clearTimeout(e), mt.delete(t), !0);
354
504
  }
355
- const kt = (t) => (e, n) => {
356
- Object.defineProperty(t, e, { configurable: !0, get: () => n });
357
- }, Y = (t, e) => {
358
- e.forEach((n) => t.dispatchEvent(new ProgressEvent(n)));
505
+ const We = (t) => (e, r) => {
506
+ Object.defineProperty(t, e, { configurable: !0, get: () => r });
507
+ }, Nt = (t, e) => {
508
+ e.forEach((r) => t.dispatchEvent(new ProgressEvent(r)));
359
509
  };
360
- function Ee(t, e, n) {
361
- const o = kt(t);
362
- if (o("readyState", 4), o("responseURL", n), e.kind === "network") {
363
- o("status", 0), o("statusText", ""), Y(t, ["readystatechange", "error", "loadend"]);
510
+ function Lo(t, e, r) {
511
+ const o = We(t);
512
+ if (o("readyState", 4), o("responseURL", r), e.kind === "network") {
513
+ o("status", 0), o("statusText", ""), Nt(t, ["readystatechange", "error", "loadend"]);
364
514
  return;
365
515
  }
366
- const r = $t.has(e.status) ? "" : e.body;
367
- let a = r;
516
+ const a = Ve.has(e.status) ? "" : e.body;
517
+ let n = a;
368
518
  if (t.responseType === "json")
369
519
  try {
370
- a = e.contentType === "application/json" && r ? JSON.parse(r) : null;
520
+ n = e.contentType === "application/json" && a ? JSON.parse(a) : null;
371
521
  } catch {
372
- a = null;
522
+ n = null;
373
523
  }
374
- o("status", e.status), o("statusText", String(e.status)), o("responseText", r), o("response", a);
375
- const s = `content-type: ${e.contentType}\r
524
+ o("status", e.status), o("statusText", String(e.status)), o("responseText", a), o("response", n);
525
+ const i = `content-type: ${e.contentType}\r
376
526
  `;
377
- Object.defineProperty(t, "getAllResponseHeaders", { configurable: !0, value: () => s }), Object.defineProperty(t, "getResponseHeader", {
527
+ Object.defineProperty(t, "getAllResponseHeaders", { configurable: !0, value: () => i }), Object.defineProperty(t, "getResponseHeader", {
378
528
  configurable: !0,
379
- value: (i) => i.toLowerCase() === "content-type" ? e.contentType : null
380
- }), Y(t, ["readystatechange", "load", "loadend"]);
529
+ value: (u) => u.toLowerCase() === "content-type" ? e.contentType : null
530
+ }), Nt(t, ["readystatechange", "load", "loadend"]);
381
531
  }
382
- function ot(t) {
532
+ function te(t) {
383
533
  try {
384
534
  t ? Reflect.deleteProperty(navigator, "onLine") : Object.defineProperty(navigator, "onLine", { configurable: !0, get: () => !1 }), window.dispatchEvent(new Event(t ? "online" : "offline"));
385
535
  } catch {
386
536
  }
387
537
  }
388
- function St() {
389
- const t = m().some((e) => e.state.faults.includes("offline"));
390
- oe(), ft(), vt(), t && ot(!0);
538
+ function Je() {
539
+ const t = y().some((e) => e.state.faults.includes("offline"));
540
+ ao(), Se(), Ne(), t && te(!0);
541
+ }
542
+ const xt = { instant: 100, fast: 150, base: 200, moderate: 250, slow: 300 }, jt = {
543
+ enter: "cubic-bezier(0, 0, .2, 1)",
544
+ exit: "cubic-bezier(.4, 0, 1, 1)"
545
+ }, _o = 4, ee = "data-u-motion", ve = "data-u-motion-scale", Ye = () => typeof document > "u" ? null : document.documentElement, zo = () => {
546
+ var t, e;
547
+ return ((t = Ye()) == null ? void 0 : t.getAttribute(ee)) === "reduce" || typeof window < "u" && ((e = window.matchMedia) == null ? void 0 : e.call(window, "(prefers-reduced-motion: reduce)").matches) === !0;
548
+ }, Xe = (t) => {
549
+ const e = Ye();
550
+ e && (t === 1 ? e.removeAttribute(ve) : e.setAttribute(ve, String(t)));
551
+ }, Do = [
552
+ "accordion",
553
+ "bc",
554
+ "breadcrumbs",
555
+ "button",
556
+ "calendar",
557
+ "card",
558
+ "checkbox",
559
+ "collapsible",
560
+ "drawer",
561
+ "empty",
562
+ "error",
563
+ "expand",
564
+ "file",
565
+ "filter",
566
+ "form",
567
+ "help",
568
+ "icon",
569
+ "infinite",
570
+ "input",
571
+ "menu",
572
+ "message",
573
+ "modal",
574
+ "multiselectbox",
575
+ "notification",
576
+ "number",
577
+ "offline",
578
+ "pagination",
579
+ "paginator",
580
+ "password",
581
+ "popup",
582
+ "preloader",
583
+ "radio",
584
+ "react",
585
+ "rich",
586
+ "search",
587
+ "selectbox",
588
+ "skeleton",
589
+ "status",
590
+ "switch",
591
+ "tab",
592
+ "table",
593
+ "tabs",
594
+ "textarea",
595
+ "upward",
596
+ "virtual"
597
+ ], To = ["air-datepicker", "treeview", "select-column"], Mo = [
598
+ "u-card",
599
+ "u-card-second",
600
+ "u-react-card__body",
601
+ "u-modal__body",
602
+ "u-drawer__body",
603
+ "u-drawer__footer",
604
+ "u-form-field__control",
605
+ "u-accordion-content",
606
+ "u-collapsible-menu-body",
607
+ "u-help__content",
608
+ "u-message",
609
+ "u-react-sticky-action-bar",
610
+ "u-tabs-content",
611
+ "u-table-mobile-card__fields--body",
612
+ "u-table-mobile-card__actions",
613
+ "u-virtual-list__item"
614
+ ], Bo = new RegExp(`^(?:u-(?:${Do.join("|")})|${To.join("|")})(?:$|[-_])`), Ro = new Set(Mo), Oo = (t) => Bo.test(t), ge = (t) => Array.from(t.classList).some(Oo), qo = (t) => t.tagName === "TD" || t.tagName === "TH" || Array.from(t.classList).some((e) => Ro.has(e)), Io = (t) => {
615
+ if (ge(t)) return !0;
616
+ for (let e = t.parentElement; e; e = e.parentElement) {
617
+ if (qo(e)) return !1;
618
+ if (ge(e)) return !0;
619
+ }
620
+ return !1;
621
+ }, Po = 'button, input, select, textarea, a[href], table, [role="dialog"], dialog, svg, h1, h2, h3, h4, h5, h6', Mt = (t) => {
622
+ const e = t.tagName.toLowerCase();
623
+ return /^h[1-6]$/.test(e) ? "h1–h6" : t.getAttribute("role") === "dialog" ? "dialog" : e;
624
+ }, No = "[data-urfu-ui-kit-dev], [data-urfu-ui-kit-dev-highlight]", jo = (t = document) => Array.from(t.querySelectorAll(Po)).filter((e) => {
625
+ var r;
626
+ return e.closest(No) || e.tagName === "svg" && ((r = e.parentElement) != null && r.closest("svg")) || e instanceof HTMLInputElement && e.type === "hidden" ? !1 : !Io(e);
627
+ }), me = (t) => typeof CSS < "u" && CSS.escape ? CSS.escape(t) : t.replace(/[^\w-]/g, "\\$&"), Uo = (t) => {
628
+ const e = [];
629
+ for (let r = t; r && r.tagName !== "HTML"; r = r.parentElement) {
630
+ if (r.id) {
631
+ e.unshift(`#${me(r.id)}`);
632
+ break;
633
+ }
634
+ const o = Array.from(r.classList).slice(0, 2).map((i) => `.${me(i)}`).join(""), a = r.parentElement ? Array.from(r.parentElement.children).filter((i) => i.tagName === r.tagName) : [], n = a.length > 1 ? `:nth-of-type(${a.indexOf(r) + 1})` : "";
635
+ e.unshift(`${r.tagName.toLowerCase()}${o}${n}`);
636
+ }
637
+ return e.join(" > ");
638
+ }, Ho = 500, Zo = 200, Ko = `
639
+ :host { all: initial; }
640
+ .layer { position: fixed; inset: 0; pointer-events: none; z-index: 2147482999; }
641
+ .box { position: fixed; box-sizing: border-box; border: 2px dashed #e5484d; border-radius: 2px; }
642
+ .box.active { border-style: solid; background: rgba(229, 72, 77, .18); }
643
+ .tag { position: absolute; left: -2px; top: -18px; pointer-events: auto; cursor: pointer; border: 0; padding: 1px 4px;
644
+ font: 600 11px/14px system-ui, sans-serif; color: #fff; background: #e5484d; border-radius: 2px 2px 2px 0; white-space: nowrap; }
645
+ .box.below .tag { top: auto; bottom: -18px; border-radius: 0 2px 2px 2px; }
646
+ `;
647
+ let x = null, wt = null, re = [], W, R = null, k = null, G, Ge = 0, N = { total: 0, byType: {} };
648
+ const Vo = (t, e) => {
649
+ if (e.width === 0 && e.height === 0) return !1;
650
+ const r = t.checkVisibility;
651
+ return r ? r.call(t, { visibilityProperty: !0, opacityProperty: !0 }) : !0;
652
+ }, Qe = () => {
653
+ if (!x) return;
654
+ let t = document.documentElement;
655
+ try {
656
+ const e = document.querySelectorAll("dialog:modal");
657
+ t = e[e.length - 1] ?? t;
658
+ } catch {
659
+ }
660
+ x.parentNode !== t && t.appendChild(x);
661
+ }, Ut = () => {
662
+ if (Ge = Date.now(), G = void 0, !wt) return;
663
+ Qe();
664
+ const t = jo().map((n) => ({ element: n, rect: n.getBoundingClientRect() })).filter(({ element: n, rect: i }) => Vo(n, i)), e = {};
665
+ for (const { element: n } of t) e[Mt(n)] = (e[Mt(n)] ?? 0) + 1;
666
+ N = { total: t.length, byType: e };
667
+ const { innerHeight: r, innerWidth: o } = window, a = t.filter(({ rect: n }) => n.bottom > 0 && n.top < r && n.right > 0 && n.left < o).slice(0, Ho);
668
+ re = a.map(({ element: n }) => n), wt.innerHTML = a.map(({ element: n, rect: i }, u) => `<div class="box${i.top < 18 ? " below" : ""}" style="left:${i.left}px;top:${i.top}px;width:${i.width}px;height:${i.height}px"><button class="tag" type="button" data-mark="${u}" title="Путь — в консоли">${Mt(n)}</button></div>`).join(""), W == null || W(N);
669
+ }, Q = () => {
670
+ G === void 0 && (G = setTimeout(Ut, Math.max(0, Zo - (Date.now() - Ge))));
671
+ }, Wo = (t) => {
672
+ t.every((e) => x && (e.target === x || x.contains(e.target))) || Q();
673
+ }, Jo = (t) => {
674
+ const e = t.target.closest("[data-mark]"), r = e ? re[Number(e.dataset.mark)] : void 0;
675
+ if (!e || !r) return;
676
+ console.info("[urfu-ui-kit dev] не из кита:", Uo(r), r);
677
+ const o = e.parentElement;
678
+ o.classList.add("active"), setTimeout(() => o.classList.remove("active"), 1500);
679
+ }, Yo = () => N, Xo = (t) => {
680
+ if (W = t, x || typeof document > "u")
681
+ return x && Ut(), N;
682
+ x = document.createElement("div"), x.setAttribute("data-urfu-ui-kit-dev-highlight", "");
683
+ const e = x.attachShadow({ mode: "open" });
684
+ return e.innerHTML = `<style>${Ko}</style><div class="layer"></div>`, wt = e.querySelector(".layer"), e.addEventListener("click", Jo), Qe(), k = document.defaultView ?? window, k.addEventListener("scroll", Q, { capture: !0, passive: !0 }), k.addEventListener("resize", Q), R = new MutationObserver(Wo), R.observe(document.documentElement, { childList: !0, subtree: !0, attributes: !0, attributeFilter: ["class", "hidden", "open", "style"] }), Ut(), N;
685
+ }, Go = () => {
686
+ R == null || R.disconnect(), R = null, k == null || k.removeEventListener("scroll", Q, { capture: !0 }), k == null || k.removeEventListener("resize", Q), k = null, clearTimeout(G), G = void 0, x == null || x.remove(), x = null, wt = null, re = [], W = void 0, N = { total: 0, byType: {} };
687
+ }, St = "data-urfu-dev-motion", xe = 5, yt = /\(\s*prefers-reduced-motion\s*(?::\s*reduce\s*)?\)/gi, Qo = new RegExp(yt.source, "i"), ta = /\(\s*prefers-reduced-motion\s*:\s*no-preference\s*\)/i, ea = new RegExp(String.raw`not\s*` + yt.source, "i"), Bt = "(min-width: 0px)", H = () => typeof document > "u" ? null : document, Lt = (t) => {
688
+ var e;
689
+ return ((e = H()) == null ? void 0 : e.querySelector(`style[${St}="${t}"]`)) ?? null;
690
+ }, tr = (t, e) => {
691
+ const r = H();
692
+ if (!r) return;
693
+ let o = Lt(t);
694
+ o || (o = r.createElement("style"), o.setAttribute(St, t)), o.textContent !== e && (o.textContent = e);
695
+ const a = r.body ?? r.head;
696
+ a.lastElementChild !== o && a.append(o);
697
+ }, ra = (t) => t.cssText.slice(0, t.cssText.indexOf("{")).trim(), oa = 7, aa = 4, na = (t) => {
698
+ const e = t.split(",").map((o) => o.trim()).filter((o) => o.match(yt) && !/^not\s/i.test(o));
699
+ if (e.length === 0) return null;
700
+ const r = e.map((o) => o.replace(yt, Bt).replace(/^only\s+/i, ""));
701
+ return r.some((o) => o === Bt || o === `all and ${Bt}`) ? "" : r.join(", ");
702
+ }, we = (t) => /^not\s/i.test(t) ? Qo.test(t) : ta.test(t) || ea.test(t), ia = (t) => {
703
+ const e = t.split(",").map((r) => r.trim());
704
+ return e.some(we) ? e.map((r) => we(r) ? "not all" : r).join(", ") : null;
705
+ }, er = (t, e, r) => {
706
+ for (const o of Array.from(t)) {
707
+ if ("styleSheet" in o) {
708
+ const n = o, i = [...e];
709
+ n.layerName != null && i.push(`@layer ${n.layerName}`.trim()), n.media.mediaText && n.media.mediaText !== "all" && i.push(`@media ${n.media.mediaText}`), n.styleSheet && rr(n.styleSheet, i, r);
710
+ continue;
711
+ }
712
+ if (!("cssRules" in o) || o.type === oa) continue;
713
+ const a = o;
714
+ if (o.type === aa) {
715
+ const n = o.media, i = ia(n.mediaText);
716
+ i !== null && r.noPreference.push({ media: n, text: i });
717
+ const u = na(n.mediaText);
718
+ if (u !== null) {
719
+ const p = u ? [...e, `@media ${u}`] : e, l = Array.from(a.cssRules).map((h) => h.cssText).join(`
720
+ `);
721
+ r.css.push(p.reduceRight((h, g) => `${g} {
722
+ ${h}
723
+ }`, l)), r.blocks += 1;
724
+ continue;
725
+ }
726
+ }
727
+ er(a.cssRules, [...e, ra(o)], r);
728
+ }
729
+ }, rr = (t, e, r) => {
730
+ let o;
731
+ try {
732
+ o = t.cssRules;
733
+ } catch {
734
+ r.blocked += 1;
735
+ return;
736
+ }
737
+ er(o, e, r);
738
+ }, ua = () => {
739
+ var o, a;
740
+ const t = { css: [], blocks: 0, blocked: 0, noPreference: [] }, e = H();
741
+ if (!e) return t;
742
+ const r = [...Array.from(e.styleSheets), ...e.adoptedStyleSheets ?? []];
743
+ for (const n of r)
744
+ (a = (o = n.ownerNode) == null ? void 0 : o.hasAttribute) != null && a.call(o, St) || rr(n, [], t);
745
+ return t;
746
+ };
747
+ let _ = null, Ht, J, j = { blocks: 0, disabled: 0, blocked: 0 }, kt = [];
748
+ const or = (t) => t.nodeName === "STYLE" || t.nodeName === "LINK" && t.rel === "stylesheet", ye = (t) => {
749
+ var e;
750
+ return ((e = t.hasAttribute) == null ? void 0 : e.call(t, St)) === !0;
751
+ }, ar = () => {
752
+ const t = ua();
753
+ for (const { media: e, text: r } of t.noPreference)
754
+ kt.push({ media: e, text: e.mediaText }), e.mediaText = r;
755
+ tr("reduce", t.css.join(`
756
+ `)), j = { blocks: t.blocks, disabled: kt.length, blocked: t.blocked }, J == null || J(j);
757
+ }, nr = () => {
758
+ clearTimeout(Ht), Ht = setTimeout(ar, 100);
759
+ }, sa = (t) => {
760
+ t.some((r) => {
761
+ const o = r.target.nodeType === Node.TEXT_NODE ? r.target.parentNode : r.target;
762
+ return (o == null ? void 0 : o.nodeName) === "STYLE" ? !ye(o) : [...Array.from(r.addedNodes), ...Array.from(r.removedNodes)].some((a) => or(a) && !ye(a));
763
+ }) && nr();
764
+ }, ir = (t) => {
765
+ t.target instanceof Element && or(t.target) && nr();
766
+ }, la = () => j, ca = (t) => {
767
+ const e = H();
768
+ return e && (J = t, e.documentElement.setAttribute(ee, "reduce"), ar(), !_ && typeof MutationObserver < "u" && (_ = new MutationObserver(sa), _.observe(e.documentElement, { childList: !0, subtree: !0, characterData: !0 }), e.addEventListener("load", ir, !0))), j;
769
+ }, da = () => {
770
+ var e;
771
+ const t = H();
772
+ _ == null || _.disconnect(), _ = null, clearTimeout(Ht), t == null || t.removeEventListener("load", ir, !0);
773
+ for (const { media: r, text: o } of kt) r.mediaText = o;
774
+ kt = [], (e = Lt("reduce")) == null || e.remove(), t == null || t.documentElement.removeAttribute(ee), j = { blocks: 0, disabled: 0, blocked: 0 }, J = void 0;
775
+ }, pa = {
776
+ ...Object.fromEntries(Object.entries(xt).map(([t, e]) => [`--u-duration-${t}`, e])),
777
+ "--u-spinner-duration": 3e3,
778
+ "--u-skeleton-duration": 1200
779
+ }, fa = (t) => {
780
+ const e = t.trim().match(/^(-?[\d.]+)(ms|s)$/);
781
+ return e ? Number(e[1]) * (e[2] === "s" ? 1e3 : 1) : null;
782
+ }, ha = () => {
783
+ var o;
784
+ const t = H();
785
+ if (!t) return;
786
+ (o = Lt("slow")) == null || o.remove();
787
+ const e = getComputedStyle(t.documentElement), r = Object.entries(pa).map(([a, n]) => {
788
+ const i = fa(e.getPropertyValue(a)) ?? n;
789
+ return `${a}: ${i * xe}ms !important;`;
790
+ });
791
+ tr("slow", `:root, :root * { ${r.join(" ")} }`), Xe(xe);
792
+ }, ba = () => {
793
+ var t;
794
+ (t = Lt("slow")) == null || t.remove(), Xe(1);
795
+ }, tt = ["reduce", "slow", "highlight"], Zt = "urfu-ui-kit:dev:~view", E = /* @__PURE__ */ new Set();
796
+ let $, Kt = "";
797
+ const va = (t) => tt.includes(t);
798
+ function ga() {
799
+ try {
800
+ const t = JSON.parse(localStorage.getItem(Zt) ?? "null");
801
+ return Array.isArray(t) ? t.filter(va) : [];
802
+ } catch {
803
+ return [];
804
+ }
391
805
  }
392
- const Le = {
393
- title: "Сеть",
394
- items: [
395
- { id: "offline", label: "Офлайн браузера", hint: "Полоса «Нет связи», запросы к API падают" },
396
- { id: "network", label: "Обрыв соединения", hint: "Сеть есть, а сервер не отвечает" },
397
- { id: "slow", label: "Медленные ответы", hint: `Задержка ${mt / 1e3} с на запросы к API` }
398
- ]
399
- }, Te = {
400
- authFail: { label: "Сбой входа", hint: "После перезагрузки сервис рисует заглушку входа" },
401
- crashApp: { label: "Падение приложения", hint: "Ошибка рендера над каркасом сервиса" },
402
- crashPage: { label: "Падение страницы", hint: "Каждая открытая страница падает, пока флаг включён" }
403
- }, Q = [["", "Любой"], ["GET", "GET"], ["write", "Запись"], ["POST", "POST"], ["PUT", "PUT"], ["PATCH", "PATCH"], ["DELETE", "DELETE"]], Ae = [400, 401, 403, 404, 409, 422, 429, 500, 502, 503, 504], d = (t) => String(t ?? "").replace(/[&<>"']/g, (e) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[e]), Ce = '<svg viewBox="0 0 36 36" fill="none" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M28 0L20 16H36L28 0ZM28 5.11101L23.6984 13.7143H32.3016L28 5.11101Z" fill="#3BA68C"/><path fill-rule="evenodd" clip-rule="evenodd" d="M9 33.7143C12.1559 33.7143 14.7143 31.1559 14.7143 28C14.7143 24.8441 12.1559 22.2857 9 22.2857C5.84409 22.2857 3.28571 24.8441 3.28571 28C3.28571 31.1559 5.84409 33.7143 9 33.7143ZM9 36C13.4183 36 17 32.4183 17 28C17 23.5817 13.4183 20 9 20C4.58172 20 1 23.5817 1 28C1 32.4183 4.58172 36 9 36Z" fill="#E54B6A"/><path fill-rule="evenodd" clip-rule="evenodd" d="M33.7143 22.2857H22.2857V33.7143H33.7143V22.2857ZM20 20V36H36V20H20Z" fill="#1E4391"/><path fill-rule="evenodd" clip-rule="evenodd" d="M12.0593 4.9091L9 0L5.94073 4.9091L0 6.11146L4.05 10.3478L3.43769 16L9 13.7091L14.5623 16L13.95 10.3478L18 6.11146L12.0593 4.9091ZM14.0262 7.31822L10.7085 6.64674L9 3.90515L7.29149 6.64674L3.97378 7.31822L6.23558 9.68408L5.89362 12.8407L9 11.5613L12.1064 12.8407L11.7644 9.68408L14.0262 7.31822Z" fill="#E98446"/></svg>', Me = `
806
+ function ma() {
807
+ try {
808
+ E.size ? localStorage.setItem(Zt, JSON.stringify([...E])) : localStorage.removeItem(Zt);
809
+ } catch {
810
+ }
811
+ }
812
+ const xa = (t) => {
813
+ const e = JSON.stringify(t);
814
+ e !== Kt && (Kt = e, $ == null || $());
815
+ };
816
+ function oe(t, e) {
817
+ t === "reduce" ? e ? ca(() => $ == null ? void 0 : $()) : da() : t === "slow" ? e ? ha() : ba() : e ? Xo(xa) : (Go(), Kt = "");
818
+ }
819
+ function et(t) {
820
+ return E.has(t);
821
+ }
822
+ function ur(t, e) {
823
+ E.has(t) !== e && (e ? E.add(t) : E.delete(t), oe(t, e), ma());
824
+ }
825
+ function wa(t) {
826
+ $ = t, ga().forEach((e) => {
827
+ E.has(e) || (E.add(e), oe(e, !0));
828
+ });
829
+ }
830
+ function ya() {
831
+ E.forEach((t) => oe(t, !1)), E.clear(), $ = void 0;
832
+ }
833
+ function ka() {
834
+ return { reduce: la(), highlight: Yo() };
835
+ }
836
+ var ke = { css: `.u-icon{font-family:urfu-ui-icon-font!important;speak:never;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-cross:before{content:"\\e913"}.icon-cross-small:before{content:"\\e914"}:host{--u-unit: 1px;--u-height-main: calc(48 * var(--u-unit));--u-height-secondary: calc(54 * var(--u-unit));--u-height-medium: calc(44 * var(--u-unit));--u-height-small: calc(38 * var(--u-unit));--u-option-min-height: var(--u-height-main)}:host{--u-preset-unit: 1px}:host([data-u-responsive=urfu]){--u-preset-unit: var(--u-unit)}:host([data-u-viewport=tablet]){--u-font-size-10: 12px;--u-font-size-11: 12px;--u-font-size-12: 12px;--u-font-size-13: 12px;--u-font-size-14: 14px;--u-font-size-16: 15px;--u-font-size-18: 17px;--u-font-size-20: 19px;--u-font-size-24: 22px;--u-font-size-40: 32px;--u-font-size-52: 40px;--u-input-line-padding-y: 10px}:host([data-u-viewport=mobile]){--u-font-size-10: 12px;--u-font-size-11: 12px;--u-font-size-12: 12px;--u-font-size-13: 12px;--u-font-size-14: 14px;--u-font-size-16: 14px;--u-font-size-18: 16px;--u-font-size-20: 18px;--u-font-size-24: 20px;--u-font-size-40: 24px;--u-font-size-52: 28px;--u-input-line-padding-y: 7px}:host{--u-blue-main: #1E4391;--u-blue-dark: #0F2B5E;--u-blue-60: #748AB9;--u-blue-40: #9FAECD;--u-blue-20: #CAD1E1;--u-blue-10: #E7F2FF;--u-blue-secondary: #4685CF;--u-red-main: #EF302B;--u-red-dark: #C0231F;--u-red-60: #F58380;--u-red-10: #FDEAEA;--u-gray-60: #545454;--u-gray-40: #A7A7A7;--u-gray-20: #D3D3D3;--u-gray-10: #F6F6F6;--u-gray-5: #F9F9F9;--u-black-main: #222222;--u-white: #FFFFFF;--u-green: #3BA68C;--u-green-10: #EDF7EB;--u-pink: #E54B6A;--u-orange: #E98446;--u-orange-10: #FCF4E6;--u-violet: #A08CE2;--u-gradient-main: linear-gradient(270deg, #FF2D7F -.71%, #FB3727 47.63%, #FEEA0F 100%);--u-color-primary: var(--u-blue-main, #1E4391);--u-color-primary-hover: var(--u-blue-dark, #0F2B5E);--u-color-primary-disabled: var(--u-blue-40, #9FAECD);--u-color-primary-quiet: var(--u-blue-20, #CAD1E1);--u-color-selected: var(--u-blue-10, #E7F2FF);--u-color-focus: var(--u-blue-main, #1E4391);--u-color-text: var(--u-black-main, #222222);--u-color-text-secondary: var(--u-gray-60, #545454);--u-color-text-muted: var(--u-gray-40, #A7A7A7);--u-color-text-inverse: var(--u-white, #FFFFFF);--u-color-border: var(--u-blue-60, #748AB9);--u-color-border-light: var(--u-gray-20, #D3D3D3);--u-color-surface: var(--u-white, #FFFFFF);--u-color-background: var(--u-gray-10, #F6F6F6);--u-color-background-light: var(--u-gray-5, #F9F9F9);--u-color-error: var(--u-red-main, #EF302B);--u-color-error-hover: var(--u-red-dark, #C0231F);--u-color-error-disabled: var(--u-red-60, #F58380);--u-color-error-light: var(--u-red-10, #FDEAEA);--u-color-success: var(--u-green, #3BA68C);--u-color-success-light: var(--u-green-10, #EDF7EB);--u-color-warning: var(--u-orange, #E98446);--u-color-warning-light: var(--u-orange-10, #FCF4E6)}:host{--u-radius: 10px;--u-radius-small: 8px;--u-z-dropdown: 100;--u-z-dropdown-icon: 101;--u-z-dropdown-list: 102;--u-z-upward: 112;--u-z-dropdown-item: 999;--u-z-modal: 1000;--u-z-datepicker: 1001;--u-duration-fast: .15s;--u-duration-base: .2s;--u-duration-slow: .3s;--u-ease-standard: ease-in-out;--u-spinner-duration: 3s;--u-skeleton-duration: 1.2s;--u-duration-instant: .1s;--u-duration-moderate: .25s;--u-ease-move: cubic-bezier(.2, 0, 0, 1);--u-ease-enter: cubic-bezier(0, 0, .2, 1);--u-ease-exit: cubic-bezier(.4, 0, 1, 1);--u-ease-sheet: cubic-bezier(.22, 1, .36, 1);--u-motion-shift-sm: 4px;--u-motion-shift-md: 8px;--u-font-weight-regular: 400;--u-font-weight-medium: 500;--u-font-weight-semibold: 600;--u-line-height-base: 1.4;--u-line-height-compact: 1.4286;--u-shadow-popup: 0 8px 24px rgba(15, 43, 94, .16);--u-color-surface-tint: #EEF0F4}.u-button{--u-button-height: var(--u-height-main, 48px);height:var(--u-button-height);padding:0 var(--u-button-padding-x, calc(50 * var(--u-preset-unit)));border-radius:var(--u-radius, 10px);border:none;font-weight:var(--u-font-weight-medium, 500);font-size:var(--u-font-size-13, calc(13 * var(--u-unit)));white-space:nowrap;cursor:pointer;display:inline-flex;column-gap:calc(8 * var(--u-unit));justify-content:center;align-items:center;transition-property:color,background-color,border-color,background-image;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out);color:var(--u-color-text-inverse, #FFFFFF);background-color:var(--u-color-primary, #1E4391)}.u-button:hover,.u-button:active{background-color:var(--u-color-primary-hover, #0F2B5E)}.u-button:disabled{cursor:default;background-color:var(--u-color-primary-disabled, #9FAECD)}.u-button .u-icon{position:relative;top:calc(1 * var(--u-unit))}.u-button .u-icon:before{color:inherit}.u-button-outline{color:var(--u-color-primary, #1E4391);background-color:var(--u-color-surface, #FFFFFF);border:2px solid var(--u-color-primary, #1E4391)}.u-button-outline:hover,.u-button-outline:active{background-color:var(--u-color-primary-hover, #0F2B5E);color:var(--u-color-text-inverse, #FFFFFF);border:2px solid var(--u-color-primary-hover, #0F2B5E)}.u-button-outline:disabled{cursor:default;background-color:var(--u-color-primary-disabled, #9FAECD);color:var(--u-color-text-inverse, #FFFFFF);border:2px solid var(--u-color-primary-disabled, #9FAECD)}.u-button-danger{color:var(--u-color-text-inverse, #FFFFFF);background-color:var(--u-color-error, #EF302B)}.u-button-danger:hover,.u-button-danger:active{background-color:var(--u-color-error-hover, #C0231F)}.u-button-danger:disabled{cursor:default;background-color:var(--u-color-error-disabled, #F58380)}.u-button-danger-outline{color:var(--u-color-error, #EF302B);background-color:var(--u-color-surface, #FFFFFF);border:2px solid var(--u-color-error, #EF302B)}.u-button-danger-outline:hover,.u-button-danger-outline:active{background-color:var(--u-color-error-hover, #C0231F);color:var(--u-color-text-inverse, #FFFFFF);border:2px solid var(--u-color-error-hover, #C0231F)}.u-button-danger-outline:disabled{cursor:default;background-color:var(--u-color-error-disabled, #F58380);color:var(--u-color-text-inverse, #FFFFFF);border:2px solid var(--u-color-error-disabled, #F58380)}.u-button-simple{border:2px solid var(--u-color-border-light, #D3D3D3);background-color:var(--u-color-surface, #FFFFFF);color:var(--u-color-text, #222222)}.u-button-simple:hover,.u-button-simple:active{border:2px solid var(--u-color-border-light, #D3D3D3);background-color:var(--u-gray-20, #D3D3D3);color:var(--u-color-text, #222222)}.u-button-simple:disabled{cursor:default;border:2px solid var(--u-button-simple-disabled, #E9E9E9);background-color:var(--u-button-simple-disabled, #E9E9E9);color:var(--u-color-text-secondary, #545454)}.u-button-icon{border:1px solid var(--u-color-border-light, #D3D3D3);background-color:var(--u-color-surface, #FFFFFF);color:var(--u-color-primary, #1E4391);padding:0;width:var(--u-button-icon-width, calc(48 * var(--u-preset-unit)))}.u-button-icon:hover,.u-button-icon:active{border:1px solid var(--u-color-primary, #1E4391);background-color:var(--u-color-surface, #FFFFFF);color:var(--u-color-primary, #1E4391)}.u-button-icon:disabled{cursor:default;border:1px solid var(--u-color-border-light, #D3D3D3);background-color:var(--u-color-surface, #FFFFFF);color:var(--u-gray-20, #D3D3D3)}.u-button-icon.u-button-small{padding:0;width:var(--u-button-icon-small-width, calc(38 * var(--u-preset-unit)))}.u-button-cross{--u-button-height: var(--u-height-main, 48px);padding:0 var(--u-button-padding-x, calc(50 * var(--u-preset-unit)));border-radius:var(--u-radius, 10px);border:none;font-weight:var(--u-font-weight-medium, 500);font-size:var(--u-font-size-13, calc(13 * var(--u-unit)));white-space:nowrap;cursor:pointer;display:inline-flex;column-gap:calc(8 * var(--u-unit));justify-content:center;align-items:center;transition-property:color,background-color,border-color,background-image;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out);padding:0;width:var(--u-button-cross-size, calc(52 * var(--u-preset-unit)));--u-button-height: var(--u-button-cross-size, calc(52 * var(--u-preset-unit)));height:var(--u-button-height);border-radius:50%;background-color:transparent;background-image:url("data:image/svg+xml,%3Csvg width='52' height='52' viewBox='0 0 52 52' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='26' cy='26' r='26' transform='rotate(90 26 26)' fill='white'/%3E%3Cpath d='M20 20L31.5 32M32 20L20 32' stroke='%23222222' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ");background-repeat:no-repeat;background-size:100% 100%}.u-button-cross:hover{background-image:url("data:image/svg+xml,%3Csvg width='52' height='52' viewBox='0 0 52 52' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='26' cy='26' r='26' transform='rotate(90 26 26)' fill='white'/%3E%3Cpath d='M20 20L31.5 32M32 20L20 32' stroke='%231E4391' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E ")}.u-button-icon-left{flex-direction:row-reverse}.u-button-medium{--u-button-height: var(--u-height-medium, 44px);height:var(--u-button-height)}.u-button-small{--u-button-height: var(--u-height-small, 38px);height:var(--u-button-height);padding:0 var(--u-button-small-padding-x, calc(24 * var(--u-preset-unit)))}.u-button-text{display:flex;text-align:center;border:none;padding:0;border-radius:var(--u-radius-small, 8px);font-weight:var(--u-font-weight-semibold, 600);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));background:none;align-items:center;white-space:nowrap;cursor:pointer;transition-property:color,background-color,border-color,background-image;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out);color:var(--u-color-primary, #1E4391)}.u-button-text:focus-visible{outline-offset:4px}.u-button-text:hover,.u-button-text:active{color:var(--u-color-primary-hover, #0F2B5E)}.u-button-text:disabled{cursor:default;color:var(--u-color-primary-disabled, #9FAECD)}.u-button-text .u-icon{position:relative;margin-left:calc(8 * var(--u-unit))}.u-button-text-icon-left{flex-direction:row-reverse;font-weight:var(--u-font-weight-regular, 400)}.u-button-text-icon-left .u-icon{margin-left:0;margin-right:calc(8 * var(--u-unit))}.u-button-text-table{cursor:pointer;color:var(--u-blue-60, #748AB9)}.u-button-text-table:hover,.u-button-text-table:active{color:var(--u-color-primary-hover, #0F2B5E)}.u-button-text-table:disabled{cursor:default;color:var(--u-color-primary-quiet, #CAD1E1)}.u-button-text-danger{color:var(--u-pink, #E54B6A)}.u-button-text-danger:hover,.u-button-text-danger:active{color:var(--u-button-text-danger-hover, #B62C48)}.u-button-text-danger:disabled{cursor:default;color:var(--u-button-text-danger-disabled, #D995A2)}.u-button-text-danger-table{cursor:pointer;color:var(--u-color-error-disabled, #F58380)}.u-button-text-danger-table:hover,.u-button-text-danger-table:active{color:var(--u-pink, #E54B6A)}.u-button-text-danger-table:disabled{cursor:default;color:var(--u-button-text-danger-table-disabled, #FE514D1F)}.u-button-text-table,.u-button-text-danger-table{position:relative}.u-button-text-table:after,.u-button-text-danger-table:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:44px;height:44px;z-index:1}.u-button-text-table:has(+.u-button-text-table):after,.u-button-text-table:has(+.u-button-text-danger-table):after,.u-button-text-danger-table:has(+.u-button-text-table):after,.u-button-text-danger-table:has(+.u-button-text-danger-table):after,.u-button-text-table+.u-button-text-table:after,.u-button-text-table+.u-button-text-danger-table:after,.u-button-text-danger-table+.u-button-text-table:after,.u-button-text-danger-table+.u-button-text-danger-table:after{width:100%}.u-button-text-table.u-button-text-square,.u-button-text-danger-table.u-button-text-square{width:calc(38 * var(--u-unit));justify-content:center}.u-button-text-table.u-button-text-square:after,.u-button-text-danger-table.u-button-text-square:after{width:100%;height:100%}.u-input{height:var(--u-height-main, 48px);padding:var(--u-input-line-padding-y, var(--u-input-padding-y, calc(14 * var(--u-preset-unit)))) var(--u-input-padding-x, calc(16 * var(--u-preset-unit)));border-radius:var(--u-radius, 10px);font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));line-height:var(--u-line-height-compact, 1.4286);color:var(--u-color-text, #222222);background-color:var(--u-color-surface, #FFFFFF);width:100%;transition-property:color,background-color,border-color,background-image;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out);text-overflow:ellipsis;border:1px solid var(--u-color-border-light, #D3D3D3)}.u-input:hover{border:1px solid var(--u-color-border, #748AB9)}.u-input:focus{outline:0;border:1px solid var(--u-color-border, #748AB9)}.u-input:disabled{cursor:default;border:none;background-color:var(--u-color-background, #F6F6F6)}.u-input::placeholder{color:var(--u-color-text-secondary, #545454);opacity:1}.u-input:-ms-input-placeholder{color:var(--u-color-text-secondary, #545454)}.u-input::placeholder{color:var(--u-color-text-secondary, #545454)}.u-input[type=number]{display:block;box-sizing:border-box;-moz-appearance:textfield;-webkit-appearance:textfield;appearance:textfield}.u-input[type=number]::-webkit-outer-spin-button,.u-input[type=number]::-webkit-inner-spin-button{display:none}.u-input[type=search]::-webkit-search-cancel-button{transition-property:color,background-color,border-color,background-image;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out);display:block;cursor:pointer;-webkit-appearance:none;width:calc(12 * var(--u-unit));height:calc(12 * var(--u-unit));margin-left:calc(10 * var(--u-unit));background-color:var(--u-color-text-muted, #A7A7A7);-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11.3386 0.661444C11.7039 1.02675 11.7039 1.61903 11.3386 1.98433L1.98434 11.3386C1.61904 11.7039 1.02676 11.7039 0.661455 11.3386C0.29615 10.9733 0.296149 10.381 0.661454 10.0157L10.0157 0.661444C10.381 0.296138 10.9733 0.296138 11.3386 0.661444Z' fill='%23A7A7A7'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0.661432 0.661444C1.02674 0.296138 1.61901 0.296138 1.98432 0.661444L11.3385 10.0157C11.7039 10.381 11.7038 10.9733 11.3385 11.3386C10.9732 11.7039 10.381 11.7039 10.0157 11.3386L0.661432 1.98433C0.296127 1.61903 0.296127 1.02675 0.661432 0.661444Z' fill='%23A7A7A7'/%3E%3C/svg%3E ");mask-image:url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11.3386 0.661444C11.7039 1.02675 11.7039 1.61903 11.3386 1.98433L1.98434 11.3386C1.61904 11.7039 1.02676 11.7039 0.661455 11.3386C0.29615 10.9733 0.296149 10.381 0.661454 10.0157L10.0157 0.661444C10.381 0.296138 10.9733 0.296138 11.3386 0.661444Z' fill='%23A7A7A7'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0.661432 0.661444C1.02674 0.296138 1.61901 0.296138 1.98432 0.661444L11.3385 10.0157C11.7039 10.381 11.7038 10.9733 11.3385 11.3386C10.9732 11.7039 10.381 11.7039 10.0157 11.3386L0.661432 1.98433C0.296127 1.61903 0.296127 1.02675 0.661432 0.661444Z' fill='%23A7A7A7'/%3E%3C/svg%3E ");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:100% 100%;mask-size:100% 100%}.u-input[type=search]::-webkit-search-cancel-button:hover{background-color:var(--u-color-primary, #1E4391)}.u-input-required{height:var(--u-height-main, 48px);padding:var(--u-input-line-padding-y, var(--u-input-padding-y, calc(14 * var(--u-preset-unit)))) var(--u-input-padding-x, calc(16 * var(--u-preset-unit)));border-radius:var(--u-radius, 10px);font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));line-height:var(--u-line-height-compact, 1.4286);color:var(--u-color-text, #222222);background-color:var(--u-color-surface, #FFFFFF);width:100%;transition-property:color,background-color,border-color,background-image;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out);text-overflow:ellipsis;border:1px solid var(--u-color-error, #EF302B)}.u-input-required:hover{border:1px solid var(--u-color-border, #748AB9)}.u-input-required:focus{outline:0;border:1px solid var(--u-color-border, #748AB9)}.u-input-required::placeholder{color:var(--u-color-text-secondary, #545454);opacity:1}.u-input-required:-ms-input-placeholder{color:var(--u-color-text-secondary, #545454)}.u-input-required::-ms-input-placeholder{color:var(--u-color-text-secondary, #545454)}.u-textarea{height:var(--u-textarea-height, calc(125 * var(--u-preset-unit)));padding:var(--u-input-padding-y, calc(14 * var(--u-preset-unit))) var(--u-input-padding-x, calc(16 * var(--u-preset-unit)));border-radius:var(--u-radius, 10px);font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));line-height:var(--u-line-height-compact, 1.4286);color:var(--u-color-text, #222222);background-color:var(--u-color-surface, #FFFFFF);width:100%;resize:vertical;transition-property:color,background-color,border-color,background-image;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out);border:1px solid var(--u-color-border-light, #D3D3D3)}.u-textarea:hover{border:1px solid var(--u-color-border, #748AB9)}.u-textarea:focus{outline:0;border:1px solid var(--u-color-border, #748AB9)}.u-textarea:disabled{cursor:default;border:none;background-color:var(--u-color-background, #F6F6F6)}.u-textarea::placeholder{color:var(--u-color-text-secondary, #545454);opacity:1}.u-textarea:-ms-input-placeholder{color:var(--u-color-text-secondary, #545454)}.u-textarea::placeholder{color:var(--u-color-text-secondary, #545454)}.u-textarea-required{height:var(--u-textarea-height, calc(125 * var(--u-preset-unit)));padding:var(--u-input-padding-y, calc(14 * var(--u-preset-unit))) var(--u-input-padding-x, calc(16 * var(--u-preset-unit)));border-radius:var(--u-radius, 10px);font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));line-height:var(--u-line-height-compact, 1.4286);color:var(--u-color-text, #222222);background-color:var(--u-color-surface, #FFFFFF);width:100%;resize:vertical;transition-property:color,background-color,border-color,background-image;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out);border:1px solid var(--u-color-error, #EF302B)}.u-textarea-required:hover{border:1px solid var(--u-color-border, #748AB9)}.u-textarea-required:focus{outline:0;border:1px solid var(--u-color-border, #748AB9)}.u-textarea-required::placeholder{color:var(--u-color-text-secondary, #545454);opacity:1}.u-textarea-required:-ms-input-placeholder{color:var(--u-color-text-secondary, #545454)}.u-textarea-required::-ms-input-placeholder{color:var(--u-color-text-secondary, #545454)}.u-textarea::-webkit-scrollbar-thumb{height:calc(clamp(calc(7 * var(--u-unit)),.01vh,calc(16 * var(--u-unit))) + calc(3 * var(--u-unit)));background-clip:content-box;border:2px solid transparent}.u-textarea::-webkit-scrollbar{width:calc(clamp(calc(7 * var(--u-unit)),.01vw,calc(16 * var(--u-unit))) + calc(3 * var(--u-unit)))}.u-number{display:inline-block;position:relative}.u-number:hover .u-input{border:1px solid var(--u-color-border, #748AB9)}.u-number .u-number-down{cursor:pointer;position:absolute;top:calc(50% + calc(2 * var(--u-unit)));right:calc(16 * var(--u-unit));width:calc(10 * var(--u-unit));height:calc(6 * var(--u-unit));padding:0;display:block;border:none;background-color:transparent;background-image:url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.38415 5.53884L9.31663 0.819867C9.58801 0.494204 9.35643 -0.000225067 8.93252 -0.000225067L1.06756 -0.000225067C0.64364 -0.000225067 0.412061 0.494203 0.683447 0.819866L4.61593 5.53884C4.81582 5.77872 5.18425 5.77872 5.38415 5.53884Z' fill='%23748AB9'/%3E%3C/svg%3E%0A");background-repeat:no-repeat;background-position:center;background-size:100% 100%;transition-property:color,background-color,border-color,background-image;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out)}.u-number .u-number-down:hover{background-image:url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.38415 5.53884L9.31663 0.819867C9.58801 0.494204 9.35643 -0.000225067 8.93252 -0.000225067L1.06756 -0.000225067C0.64364 -0.000225067 0.412061 0.494203 0.683447 0.819866L4.61593 5.53884C4.81582 5.77872 5.18425 5.77872 5.38415 5.53884Z' fill='%231E4391'/%3E%3C/svg%3E%0A")}.u-number .u-number-up{cursor:pointer;position:absolute;top:calc(50% - calc(8 * var(--u-unit)));right:calc(16 * var(--u-unit));width:calc(10 * var(--u-unit));height:calc(6 * var(--u-unit));padding:0;display:block;border:none;background-color:transparent;background-image:url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.38415 5.53884L9.31663 0.819867C9.58801 0.494204 9.35643 -0.000225067 8.93252 -0.000225067L1.06756 -0.000225067C0.64364 -0.000225067 0.412061 0.494203 0.683447 0.819866L4.61593 5.53884C4.81582 5.77872 5.18425 5.77872 5.38415 5.53884Z' fill='%23748AB9'/%3E%3C/svg%3E%0A");background-repeat:no-repeat;background-position:center;background-size:100% 100%;transform:rotate(180deg);transition-property:color,background-color,border-color,background-image;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out)}.u-number .u-number-up:hover{background-image:url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.38415 5.53884L9.31663 0.819867C9.58801 0.494204 9.35643 -0.000225067 8.93252 -0.000225067L1.06756 -0.000225067C0.64364 -0.000225067 0.412061 0.494203 0.683447 0.819866L4.61593 5.53884C4.81582 5.77872 5.18425 5.77872 5.38415 5.53884Z' fill='%231E4391'/%3E%3C/svg%3E%0A")}.u-selectbox{position:relative}.u-selectbox.u-selectbox-disabled *{cursor:default}.u-selectbox.u-selectbox-disabled .u-selectbox-select{border:none;background-color:var(--u-color-background, #F6F6F6)}.u-selectbox.u-selectbox-disabled .u-selectbox-select-icon-arrow{background-image:url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0.292892 4.29289C0.683416 3.90237 1.31658 3.90237 1.70711 4.29289L6.00001 8.58579L10.2929 4.29289C10.6834 3.90237 11.3166 3.90237 11.7071 4.29289C12.0976 4.68342 12.0976 5.31658 11.7071 5.70711L6.70712 10.7071C6.51958 10.8946 6.26523 11 6.00001 11C5.73479 11 5.48044 10.8946 5.2929 10.7071L0.292894 5.70711C-0.0976308 5.31658 -0.0976314 4.68342 0.292892 4.29289Z' fill='%23A7A7A7'/%3E%3C/svg%3E ")}.u-selectbox.u-selectbox-disabled .u-selectbox-select-icon-cross{background-image:url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11.3386 0.661444C11.7039 1.02675 11.7039 1.61903 11.3386 1.98433L1.98434 11.3386C1.61904 11.7039 1.02676 11.7039 0.661455 11.3386C0.29615 10.9733 0.296149 10.381 0.661454 10.0157L10.0157 0.661444C10.381 0.296138 10.9733 0.296138 11.3386 0.661444Z' fill='%23A7A7A7'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0.661432 0.661444C1.02674 0.296138 1.61901 0.296138 1.98432 0.661444L11.3385 10.0157C11.7039 10.381 11.7038 10.9733 11.3385 11.3386C10.9732 11.7039 10.381 11.7039 10.0157 11.3386L0.661432 1.98433C0.296127 1.61903 0.296127 1.02675 0.661432 0.661444Z' fill='%23A7A7A7'/%3E%3C/svg%3E ")}.u-selectbox.u-selectbox-disabled .u-selectbox-select-open~.u-selectbox-options-wrapper{display:none}.u-selectbox-select{cursor:pointer;height:var(--u-height-main, 48px);padding:var(--u-input-line-padding-y, var(--u-input-padding-y, calc(14 * var(--u-preset-unit)))) var(--u-input-padding-x, calc(16 * var(--u-preset-unit)));border-radius:var(--u-radius, 10px);font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));line-height:var(--u-line-height-compact, 1.4286);color:var(--u-color-text, #222222);background-color:var(--u-color-surface, #FFFFFF);width:100%;transition-property:color,background-color,border-color,background-image;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out);text-overflow:ellipsis;border:1px solid var(--u-color-border-light, #D3D3D3);position:relative}.u-selectbox-select:hover{border:1px solid var(--u-color-border, #748AB9)}.u-selectbox-select:focus{outline:0;border:1px solid var(--u-color-border, #748AB9)}.u-selectbox-select:disabled{cursor:default;border:none;background-color:var(--u-color-background, #F6F6F6)}.u-selectbox-select::placeholder{color:var(--u-color-text-secondary, #545454);opacity:1}.u-selectbox-select:-ms-input-placeholder{color:var(--u-color-text-secondary, #545454)}.u-selectbox-select::placeholder{color:var(--u-color-text-secondary, #545454)}.u-selectbox-select[type=number]{display:block;box-sizing:border-box;-moz-appearance:textfield;-webkit-appearance:textfield;appearance:textfield}.u-selectbox-select[type=number]::-webkit-outer-spin-button,.u-selectbox-select[type=number]::-webkit-inner-spin-button{display:none}.u-selectbox-select[type=search]::-webkit-search-cancel-button{transition-property:color,background-color,border-color,background-image;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out);display:block;cursor:pointer;-webkit-appearance:none;width:calc(12 * var(--u-unit));height:calc(12 * var(--u-unit));margin-left:calc(10 * var(--u-unit));background-color:var(--u-color-text-muted, #A7A7A7);-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11.3386 0.661444C11.7039 1.02675 11.7039 1.61903 11.3386 1.98433L1.98434 11.3386C1.61904 11.7039 1.02676 11.7039 0.661455 11.3386C0.29615 10.9733 0.296149 10.381 0.661454 10.0157L10.0157 0.661444C10.381 0.296138 10.9733 0.296138 11.3386 0.661444Z' fill='%23A7A7A7'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0.661432 0.661444C1.02674 0.296138 1.61901 0.296138 1.98432 0.661444L11.3385 10.0157C11.7039 10.381 11.7038 10.9733 11.3385 11.3386C10.9732 11.7039 10.381 11.7039 10.0157 11.3386L0.661432 1.98433C0.296127 1.61903 0.296127 1.02675 0.661432 0.661444Z' fill='%23A7A7A7'/%3E%3C/svg%3E ");mask-image:url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11.3386 0.661444C11.7039 1.02675 11.7039 1.61903 11.3386 1.98433L1.98434 11.3386C1.61904 11.7039 1.02676 11.7039 0.661455 11.3386C0.29615 10.9733 0.296149 10.381 0.661454 10.0157L10.0157 0.661444C10.381 0.296138 10.9733 0.296138 11.3386 0.661444Z' fill='%23A7A7A7'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0.661432 0.661444C1.02674 0.296138 1.61901 0.296138 1.98432 0.661444L11.3385 10.0157C11.7039 10.381 11.7038 10.9733 11.3385 11.3386C10.9732 11.7039 10.381 11.7039 10.0157 11.3386L0.661432 1.98433C0.296127 1.61903 0.296127 1.02675 0.661432 0.661444Z' fill='%23A7A7A7'/%3E%3C/svg%3E ");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center;mask-position:center;-webkit-mask-size:100% 100%;mask-size:100% 100%}.u-selectbox-select[type=search]::-webkit-search-cancel-button:hover{background-color:var(--u-color-primary, #1E4391)}.u-selectbox-select-required{height:var(--u-height-main, 48px);padding:var(--u-input-line-padding-y, var(--u-input-padding-y, calc(14 * var(--u-preset-unit)))) var(--u-input-padding-x, calc(16 * var(--u-preset-unit)));border-radius:var(--u-radius, 10px);font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));line-height:var(--u-line-height-compact, 1.4286);color:var(--u-color-text, #222222);background-color:var(--u-color-surface, #FFFFFF);width:100%;transition-property:color,background-color,border-color,background-image;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out);text-overflow:ellipsis;border:1px solid var(--u-color-error, #EF302B)}.u-selectbox-select-required:hover{border:1px solid var(--u-color-border, #748AB9)}.u-selectbox-select-required:focus{outline:0;border:1px solid var(--u-color-border, #748AB9)}.u-selectbox-select-required::placeholder{color:var(--u-color-text-secondary, #545454);opacity:1}.u-selectbox-select-required:-ms-input-placeholder{color:var(--u-color-text-secondary, #545454)}.u-selectbox-select-required::-ms-input-placeholder{color:var(--u-color-text-secondary, #545454)}.u-selectbox-select-open{border:1px solid var(--u-color-border, #748AB9)}.u-selectbox-select-open .u-selectbox-select-icon{background-image:url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11.7071 10.3819C11.3166 10.7724 10.6834 10.7724 10.2929 10.3819L5.99999 6.08902L1.70711 10.3819C1.31658 10.7724 0.683418 10.7724 0.292894 10.3819C-0.0976305 9.99139 -0.0976315 9.35822 0.292892 8.9677L5.29288 3.9677C5.48042 3.78016 5.73477 3.67481 5.99999 3.6748C6.26521 3.6748 6.51956 3.78016 6.7071 3.9677L11.7071 8.9677C12.0976 9.35822 12.0976 9.99139 11.7071 10.3819Z' fill='%231E4391'/%3E%3C/svg%3E ")}.u-selectbox-select-open+.u-selectbox-options{display:block}.u-selectbox-select-icon-arrow{position:absolute;display:block;background-image:url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0.292892 4.29289C0.683416 3.90237 1.31658 3.90237 1.70711 4.29289L6.00001 8.58579L10.2929 4.29289C10.6834 3.90237 11.3166 3.90237 11.7071 4.29289C12.0976 4.68342 12.0976 5.31658 11.7071 5.70711L6.70712 10.7071C6.51958 10.8946 6.26523 11 6.00001 11C5.73479 11 5.48044 10.8946 5.2929 10.7071L0.292894 5.70711C-0.0976308 5.31658 -0.0976314 4.68342 0.292892 4.29289Z' fill='%231E4391'/%3E%3C/svg%3E ");background-repeat:no-repeat;background-position:center;background-size:100% 100%;width:calc(12 * var(--u-unit));height:calc(12 * var(--u-unit));right:calc(20 * var(--u-unit));top:calc(50% - calc(7 * var(--u-unit)));transition-property:color,background-color,border-color,background-image;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out)}.u-selectbox-select-icon-cross{position:absolute;display:block;background-image:url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11.3386 0.661444C11.7039 1.02675 11.7039 1.61903 11.3386 1.98433L1.98434 11.3386C1.61904 11.7039 1.02676 11.7039 0.661455 11.3386C0.29615 10.9733 0.296149 10.381 0.661454 10.0157L10.0157 0.661444C10.381 0.296138 10.9733 0.296138 11.3386 0.661444Z' fill='%23A7A7A7'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0.661432 0.661444C1.02674 0.296138 1.61901 0.296138 1.98432 0.661444L11.3385 10.0157C11.7039 10.381 11.7038 10.9733 11.3385 11.3386C10.9732 11.7039 10.381 11.7039 10.0157 11.3386L0.661432 1.98433C0.296127 1.61903 0.296127 1.02675 0.661432 0.661444Z' fill='%23A7A7A7'/%3E%3C/svg%3E ");background-repeat:no-repeat;background-position:center;background-size:100% 100%;width:calc(12 * var(--u-unit));height:calc(12 * var(--u-unit));right:calc(44 * var(--u-unit));top:calc(50% - calc(5 * var(--u-unit)));transition-property:color,background-color,border-color,background-image;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out)}.u-selectbox-select-icon-cross:hover{background-image:url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 12 12' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11.3386 0.661444C11.7039 1.02675 11.7039 1.61903 11.3386 1.98433L1.98434 11.3386C1.61904 11.7039 1.02676 11.7039 0.661455 11.3386C0.29615 10.9733 0.296149 10.381 0.661454 10.0157L10.0157 0.661444C10.381 0.296138 10.9733 0.296138 11.3386 0.661444Z' fill='%231E4391'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M0.661432 0.661444C1.02674 0.296138 1.61901 0.296138 1.98432 0.661444L11.3385 10.0157C11.7039 10.381 11.7038 10.9733 11.3385 11.3386C10.9732 11.7039 10.381 11.7039 10.0157 11.3386L0.661432 1.98433C0.296127 1.61903 0.296127 1.02675 0.661432 0.661444Z' fill='%231E4391'/%3E%3C/svg%3E ")}.u-selectbox-select-title{display:block;max-width:calc(100% - calc(52 * var(--u-unit)));overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.u-selectbox-options{display:none;background-color:var(--u-color-surface, #FFFFFF);z-index:var(--u-z-dropdown, 100);border-radius:var(--u-radius, 10px);border:1px solid var(--u-color-border, #748AB9);margin-top:calc(2 * var(--u-unit));width:100%;overflow-y:auto;max-height:calc(200 * var(--u-unit));position:absolute}.u-selectbox-options::-webkit-scrollbar{width:calc(clamp(calc(7 * var(--u-unit)),.01vw,calc(16 * var(--u-unit))) + calc(3 * var(--u-unit)))}.u-selectbox-options::-webkit-scrollbar-thumb{height:calc(clamp(calc(7 * var(--u-unit)),.01vh,calc(16 * var(--u-unit))) + calc(3 * var(--u-unit)));background-clip:content-box;border:2px solid transparent}.u-selectbox-option{cursor:pointer;min-height:var(--u-option-min-height, calc(48 * var(--u-unit)));background-color:var(--u-color-surface, #FFFFFF);border-bottom:1px solid var(--u-color-primary-quiet, #CAD1E1);padding:max(calc(4 * var(--u-unit)),calc((var(--u-option-min-height, calc(48 * var(--u-unit))) - 1.4286em - 1px) / 2)) calc(16 * var(--u-unit));font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));line-height:var(--u-line-height-compact, 1.4286)}.u-selectbox-option:last-child{border-bottom:none}.u-selectbox-option:hover{background-color:var(--u-color-selected, #E7F2FF)}.u-search{display:inline-block;position:relative}.u-search .u-input{padding-left:calc(46 * var(--u-unit))}.u-search:hover .u-input{border:1px solid var(--u-color-border, #748AB9)}.u-search-loupe{cursor:pointer;position:absolute;top:calc(50% - calc(10 * var(--u-unit)));left:calc(16 * var(--u-unit));width:calc(20 * var(--u-unit));height:calc(20 * var(--u-unit));padding:0;display:block;border:none;background-color:transparent;background-image:url("data:image/svg+xml,%3Csvg width='21' height='21' viewBox='0 0 21 21' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M11.6001 4.39941C14.5117 4.39941 16.8721 6.75977 16.8721 9.67141C16.8721 12.5831 14.5117 14.9434 11.6001 14.9434C10.144 14.9434 8.82734 14.3544 7.8722 13.3993C6.91706 12.4441 6.32807 11.1275 6.32807 9.67141C6.32807 6.75977 8.68842 4.39941 11.6001 4.39941ZM18.8721 9.67141C18.8721 5.6552 15.6163 2.39941 11.6001 2.39941C7.58385 2.39941 4.32807 5.6552 4.32807 9.67141C4.32807 11.3185 4.87655 12.8388 5.79951 14.0578L3.16496 16.6923C2.77444 17.0828 2.77444 17.716 3.16496 18.1065C3.55549 18.497 4.18865 18.497 4.57918 18.1065L7.21372 15.472C8.4327 16.3949 9.95297 16.9434 11.6001 16.9434C15.6163 16.9434 18.8721 13.6876 18.8721 9.67141Z' fill='%231E4391'/%3E%3C/svg%3E%0A");background-repeat:no-repeat;background-position:center;background-size:100% 100%;transition-property:color,background-color,border-color,background-image;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out)}:where(.u-number) .u-input{padding-right:calc(34 * var(--u-unit))}.u-switch{cursor:pointer;display:flex;align-items:center;column-gap:calc(10 * var(--u-unit))}.u-switch:has(input:disabled){cursor:default}.u-switch input{position:absolute;opacity:0;width:0;height:0;margin:0;pointer-events:none}.u-switch input:checked+.u-switch__point:after{left:calc(100% - calc(23.2 * var(--u-unit)))}.u-switch input:disabled+.u-switch__point{cursor:default;border-color:var(--u-color-border-light, #D3D3D3);background-color:var(--u-color-background-light, #F9F9F9)}.u-switch input:disabled+.u-switch__point:after{background-color:var(--u-color-text-muted, #A7A7A7)}.u-switch input:disabled:hover+.u-switch__point{cursor:default;border-color:var(--u-color-border-light, #D3D3D3);background-color:var(--u-color-background-light, #F9F9F9)}.u-switch input:disabled:hover+.u-switch__point:after{background-color:var(--u-color-text-muted, #A7A7A7)}.u-switch input:hover+.u-switch__point{border-color:var(--u-switch-hover, #2452B3)}.u-switch input:hover+.u-switch__point:after{background-color:var(--u-switch-hover, #2452B3)}.u-switch input:checked+.u-switch__point{background-color:var(--u-color-primary, #1E4391);border-color:var(--u-color-primary, #1E4391)}.u-switch input:checked+.u-switch__point:after{background-color:var(--u-color-surface, #FFFFFF)}.u-switch input:checked:disabled+.u-switch__point{background-color:var(--u-gray-20, #D3D3D3);border-color:var(--u-color-border-light, #D3D3D3)}.u-switch input:checked:disabled+.u-switch__point:after{background-color:var(--u-color-surface, #FFFFFF)}.u-switch input:checked:disabled:hover+.u-switch__point{background-color:var(--u-gray-20, #D3D3D3);border-color:var(--u-color-border-light, #D3D3D3)}.u-switch input:checked:disabled:hover+.u-switch__point:after{background-color:var(--u-color-surface, #FFFFFF)}.u-switch input:checked:hover+.u-switch__point{background-color:var(--u-switch-hover, #2452B3);border-color:var(--u-switch-hover, #2452B3)}.u-switch input:checked:hover+.u-switch__point:after{background-color:var(--u-color-surface, #FFFFFF)}.u-switch__point{cursor:pointer;width:calc(54 * var(--u-unit));height:calc(26 * var(--u-unit));position:relative;border-radius:var(--u-switch-radius, 16px);transition:background-color var(--u-duration-base, .2s) var(--u-ease-standard, ease-in-out),border-color var(--u-duration-base, .2s) var(--u-ease-standard, ease-in-out);background-color:var(--u-color-surface, #FFFFFF);border:1.4px solid var(--u-color-primary, #1E4391)}@media (prefers-reduced-motion:reduce){.u-switch__point{transition:none}}.u-switch__point:after{content:"";display:block;position:absolute;width:calc(18 * var(--u-unit));height:calc(18 * var(--u-unit));border-radius:50%;transition:left var(--u-duration-fast, .15s) var(--u-ease-move, cubic-bezier(.2, 0, 0, 1)),background-color var(--u-duration-base, .2s) var(--u-ease-standard, ease-in-out);background-color:var(--u-color-primary, #1E4391);margin:calc(2.6 * var(--u-unit));left:calc(0 * var(--u-unit))}@media (prefers-reduced-motion:reduce){.u-switch__point:after{transition:none}}.u-switch-small .u-switch__point{width:calc(42 * var(--u-unit));height:calc(20 * var(--u-unit))}.u-switch-small .u-switch__point:after{width:calc(14 * var(--u-unit));height:calc(14 * var(--u-unit))}.u-switch-small .u-switch__point{border:1px solid var(--u-color-primary, #1E4391)}.u-switch-small .u-switch__point:after{margin:calc(2 * var(--u-unit))}.u-switch-small input:checked+.u-switch__point:after{left:calc(100% - calc(18 * var(--u-unit)))}.u-icon:before{color:inherit}.u-status{display:flex;justify-content:center;align-items:center;width:min-content;white-space:wrap;font-size:var(--u-font-size-10, calc(10 * var(--u-unit)));line-height:1.6;font-weight:var(--u-font-weight-semibold, 600);padding:calc(1 * var(--u-unit)) calc(8 * var(--u-unit)) calc(3 * var(--u-unit)) calc(8 * var(--u-unit));border-radius:var(--u-radius-small, 8px);max-width:100%}.u-status-large{font-size:var(--u-font-size-12, calc(12 * var(--u-unit)));line-height:1.4167;padding:calc(5 * var(--u-unit)) calc(12 * var(--u-unit))}.u-status-warning{background-color:var(--u-color-warning-light, #FCF4E6);color:var(--u-color-warning, #E98446)}.u-status-info{background-color:var(--u-color-selected, #E7F2FF);color:var(--u-color-primary, #1E4391)}.u-status-neutral{background-color:var(--u-status-neutral-background, #eee);color:var(--u-color-text, #222222)}.u-status-success{background-color:var(--u-color-success-light, #EDF7EB);color:var(--u-status-success-color, #147246)}.u-status-danger{background-color:var(--u-color-error-light, #FDEAEA);color:var(--u-color-error, #EF302B)}.u-status-intermediate{background-color:var(--u-status-intermediate-background, #fcf4ff);color:var(--u-status-intermediate-color, #742c8e)}.u-status-prepared{background-color:var(--u-status-prepared-background, #E9FDFD);color:var(--u-status-prepared-color, #0987AE)}.u-message{padding:calc(15 * var(--u-unit)) calc(16 * var(--u-unit)) calc(15 * var(--u-unit)) calc(52 * var(--u-unit));background-color:var(--u-color-selected, #E7F2FF);background-image:url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='9' stroke='%231E4391' stroke-width='2'%3E%3C/circle%3E%3Crect x='9' y='8' width='2' height='8' rx='1' fill='%231E4391'%3E%3C/rect%3E%3Ccircle cx='10' cy='6' r='1' fill='%231E4391'%3E%3C/circle%3E%3C/svg%3E");min-height:calc(54 * var(--u-unit));display:flex;align-items:center;border-radius:var(--u-radius, 10px);font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));color:var(--u-color-text, #222222);background-repeat:no-repeat;background-position:top calc(50% - calc(1 * var(--u-unit))) left calc(16 * var(--u-unit))}.u-message-fail{display:flex;align-items:center;border-radius:var(--u-radius, 10px);font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));color:var(--u-color-text, #222222);background-repeat:no-repeat;background-position:top calc(50% - calc(1 * var(--u-unit))) left calc(16 * var(--u-unit));padding:calc(15 * var(--u-unit)) calc(16 * var(--u-unit)) calc(15 * var(--u-unit)) calc(52 * var(--u-unit));background-color:var(--u-color-error-light, #FDEAEA);background-image:url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='9' stroke='%23EF302B' stroke-width='2'%3E%3C/circle%3E%3Ccircle cx='10' cy='15' r='1' fill='%23EF302B'%3E%3C/circle%3E%3Cpath d='M8.59357 6.49708C8.54286 5.68582 9.18716 5 10 5C10.8128 5 11.4571 5.68582 11.4064 6.49708L11.0624 12.0019C11.0273 12.563 10.5621 13 10 13C9.4379 13 8.97268 12.563 8.93762 12.0019L8.59357 6.49708Z' fill='%23EF302B'%3E%3C/path%3E%3C/svg%3E");min-height:calc(54 * var(--u-unit))}.u-message-success{display:flex;align-items:center;border-radius:var(--u-radius, 10px);font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));color:var(--u-color-text, #222222);background-repeat:no-repeat;background-position:top calc(50% - calc(1 * var(--u-unit))) left calc(16 * var(--u-unit));padding:calc(15 * var(--u-unit)) calc(16 * var(--u-unit)) calc(15 * var(--u-unit)) calc(52 * var(--u-unit));background-color:var(--u-color-success-light, #EDF7EB);background-image:url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='9' stroke='%23147246' stroke-width='2'%3E%3C/circle%3E%3Cpath d='M6 10.5L9.10148 13.6015C9.31345 13.8134 9.663 13.7925 9.8482 13.5568L15 7' stroke='%23147246' stroke-width='2' stroke-linecap='round'%3E%3C/path%3E%3C/svg%3E");min-height:calc(54 * var(--u-unit))}.u-message-warning{display:flex;align-items:center;border-radius:var(--u-radius, 10px);font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));color:var(--u-color-text, #222222);background-repeat:no-repeat;background-position:top calc(50% - calc(1 * var(--u-unit))) left calc(16 * var(--u-unit));padding:calc(15 * var(--u-unit)) calc(16 * var(--u-unit)) calc(15 * var(--u-unit)) calc(52 * var(--u-unit));background-color:var(--u-color-warning-light, #FCF4E6);background-image:url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='9' stroke='%23E98446' stroke-width='2'%3E%3C/circle%3E%3Ccircle cx='10' cy='15' r='1' fill='%23E98446'%3E%3C/circle%3E%3Cpath d='M8.59357 6.49708C8.54286 5.68582 9.18716 5 10 5C10.8128 5 11.4571 5.68582 11.4064 6.49708L11.0624 12.0019C11.0273 12.563 10.5621 13 10 13C9.4379 13 8.97268 12.563 8.93762 12.0019L8.59357 6.49708Z' fill='%23E98446'%3E%3C/path%3E%3C/svg%3E");min-height:calc(54 * var(--u-unit))}.u-message-small{padding:calc(7 * var(--u-unit)) calc(16 * var(--u-unit)) calc(7 * var(--u-unit)) calc(52 * var(--u-unit));background-color:var(--u-color-selected, #E7F2FF);background-image:url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='9' stroke='%231E4391' stroke-width='2'%3E%3C/circle%3E%3Crect x='9' y='8' width='2' height='8' rx='1' fill='%231E4391'%3E%3C/rect%3E%3Ccircle cx='10' cy='6' r='1' fill='%231E4391'%3E%3C/circle%3E%3C/svg%3E");min-height:calc(38 * var(--u-unit));display:flex;align-items:center;border-radius:var(--u-radius, 10px);font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));color:var(--u-color-text, #222222);background-repeat:no-repeat;background-position:top calc(50% - calc(1 * var(--u-unit))) left calc(16 * var(--u-unit))}.u-message-small-fail{display:flex;align-items:center;border-radius:var(--u-radius, 10px);font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));color:var(--u-color-text, #222222);background-repeat:no-repeat;background-position:top calc(50% - calc(1 * var(--u-unit))) left calc(16 * var(--u-unit));padding:calc(7 * var(--u-unit)) calc(16 * var(--u-unit)) calc(7 * var(--u-unit)) calc(52 * var(--u-unit));background-color:var(--u-color-error-light, #FDEAEA);background-image:url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='9' stroke='%23EF302B' stroke-width='2'%3E%3C/circle%3E%3Ccircle cx='10' cy='15' r='1' fill='%23EF302B'%3E%3C/circle%3E%3Cpath d='M8.59357 6.49708C8.54286 5.68582 9.18716 5 10 5C10.8128 5 11.4571 5.68582 11.4064 6.49708L11.0624 12.0019C11.0273 12.563 10.5621 13 10 13C9.4379 13 8.97268 12.563 8.93762 12.0019L8.59357 6.49708Z' fill='%23EF302B'%3E%3C/path%3E%3C/svg%3E");min-height:calc(38 * var(--u-unit))}.u-message-small-success{display:flex;align-items:center;border-radius:var(--u-radius, 10px);font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));color:var(--u-color-text, #222222);background-repeat:no-repeat;background-position:top calc(50% - calc(1 * var(--u-unit))) left calc(16 * var(--u-unit));padding:calc(7 * var(--u-unit)) calc(16 * var(--u-unit)) calc(7 * var(--u-unit)) calc(52 * var(--u-unit));background-color:var(--u-color-success-light, #EDF7EB);background-image:url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='9' stroke='%23147246' stroke-width='2'%3E%3C/circle%3E%3Cpath d='M6 10.5L9.10148 13.6015C9.31345 13.8134 9.663 13.7925 9.8482 13.5568L15 7' stroke='%23147246' stroke-width='2' stroke-linecap='round'%3E%3C/path%3E%3C/svg%3E");min-height:calc(38 * var(--u-unit))}.u-message-small-warning{display:flex;align-items:center;border-radius:var(--u-radius, 10px);font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));color:var(--u-color-text, #222222);background-repeat:no-repeat;background-position:top calc(50% - calc(1 * var(--u-unit))) left calc(16 * var(--u-unit));padding:calc(7 * var(--u-unit)) calc(16 * var(--u-unit)) calc(7 * var(--u-unit)) calc(52 * var(--u-unit));background-color:var(--u-color-warning-light, #FCF4E6);background-image:url("data:image/svg+xml,%3Csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='10' cy='10' r='9' stroke='%23E98446' stroke-width='2'%3E%3C/circle%3E%3Ccircle cx='10' cy='15' r='1' fill='%23E98446'%3E%3C/circle%3E%3Cpath d='M8.59357 6.49708C8.54286 5.68582 9.18716 5 10 5C10.8128 5 11.4571 5.68582 11.4064 6.49708L11.0624 12.0019C11.0273 12.563 10.5621 13 10 13C9.4379 13 8.97268 12.563 8.93762 12.0019L8.59357 6.49708Z' fill='%23E98446'%3E%3C/path%3E%3C/svg%3E");min-height:calc(38 * var(--u-unit))}:host{--u-menu-item-margin-top: calc(28 * var(--u-unit));--u-menu-subtitle-margin-top: calc(16 * var(--u-unit));--u-menu-list-padding-left: calc(18 * var(--u-unit));--u-menu-subtitle-padding-left: calc(44 * var(--u-unit));--u-collapsible-toggle-right: calc(-20 * var(--u-unit));--u-collapsible-toggle-top: calc(28 * var(--u-unit));--u-collapsible-toggle-width: calc(21 * var(--u-unit));--u-collapsible-toggle-height: calc(84 * var(--u-unit));--u-collapsible-body-max-width: calc(268 * var(--u-unit))}.u-input:focus-visible,.u-input-required:focus-visible,.u-textarea:focus-visible,.u-textarea-required:focus-visible,.u-selectbox-select:focus-visible,.u-selectbox-select-required:focus-visible,.u-search input:focus-visible{outline:none}:host(:not([data-input-mode=pointer])) .u-switch input:focus-visible+.u-switch__point{outline:2px solid var(--u-color-focus, #1E4391);outline-offset:2px}:host([data-input-mode=keyboard]) .u-input:focus,:host([data-input-mode=keyboard]) .u-input-required:focus,:host([data-input-mode=keyboard]) .u-textarea:focus,:host([data-input-mode=keyboard]) .u-textarea-required:focus,:host([data-input-mode=keyboard]) .u-selectbox-select:focus,:host([data-input-mode=keyboard]) .u-selectbox-select-required:focus,:host([data-input-mode=keyboard]) .u-search input:focus{outline:none;border-color:var(--u-color-focus, #1E4391);box-shadow:0 0 0 calc(3 * var(--u-unit, 1px)) var(--u-focus-shadow, rgba(30, 67, 145, .2))}.h5{font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-12, calc(12 * var(--u-unit)));line-height:var(--u-line-height-base, 1.4)}.st{font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-16, calc(16 * var(--u-unit)));line-height:var(--u-line-height-base, 1.4)}.tt{font-weight:var(--u-font-weight-regular, 400);font-size:var(--u-font-size-14, calc(14 * var(--u-unit)));line-height:var(--u-line-height-compact, 1.4286)}:host{--u-skeleton-color: #F0F0F0;--u-skeleton-highlight: #E0E0E0;--u-field-title-color: var(--u-color-text-secondary);--u-field-title-size: var(--u-font-size-14, calc(14 * var(--u-unit, 1px)));--u-option-color: var(--u-color-text);--u-option-selected-background: var(--u-color-background, #F6F6F6);--u-option-hovered-background: var(--u-color-background, #F6F6F6);--u-compact-height: calc(30 * var(--u-unit, 1px));--u-compact-font-size: var(--u-font-size-12, calc(12 * var(--u-unit, 1px)));--u-compact-padding: calc(8 * var(--u-unit, 1px)) calc(5 * var(--u-unit, 1px));--u-compact-radius: calc(8 * var(--u-unit, 1px));--u-dense-height: var(--u-height-small, calc(38 * var(--u-unit, 1px)));--u-table-filter-popup-z: 9999;--u-select-popup-z: 10010}:host([data-u-viewport=tablet]){--u-compact-height: 28px;--u-dense-height: var(--u-height-main);--u-compact-padding: 7px calc(5 * var(--u-unit, 1px))}:host([data-u-viewport=mobile]){--u-compact-height: 26px;--u-dense-height: var(--u-height-main);--u-compact-padding: 6px calc(5 * var(--u-unit, 1px))}:host{--u-icon-size-main: calc(16 * var(--u-unit, 1px));--u-field-label-size-main: var(--u-font-size-14, calc(14 * var(--u-unit, 1px)));--u-input-padding-y: calc(14 * var(--u-unit, 1px));--u-input-padding-x: calc(16 * var(--u-unit, 1px));--u-textarea-height: calc(125 * var(--u-unit, 1px))}.u-icon{font-size:var(--u-icon-size-main)}.u-selectbox-empty-text{padding:calc(14 * var(--u-unit, 1px)) calc(16 * var(--u-unit, 1px));font-size:var(--u-font-size-14, calc(14 * var(--u-unit, 1px)));line-height:1.4286}.u-selectbox-options-up{top:auto;bottom:100%;margin-top:0;margin-bottom:calc(2 * var(--u-unit, 1px))}.u-selectbox-select-icon-arrow{right:calc(18 * var(--u-unit, 1px))}.u-selectbox-select,.u-selectbox-select-required{padding-top:clamp(calc(12 * var(--u-unit, 1px)),1.1vw,calc(14 * var(--u-unit, 1px)));padding-bottom:clamp(calc(12 * var(--u-unit, 1px)),1.1vw,calc(14 * var(--u-unit, 1px)));box-sizing:border-box;line-height:calc(20 * var(--u-unit, 1px))}.u-selectbox-select:not(input),.u-selectbox-select-required:not(input){display:flex;align-items:center}.u-selectbox-select-icon-arrow,.u-selectbox-select-icon-cross{transition:transform var(--u-duration-fast, .15s) var(--u-ease-move, cubic-bezier(.2, 0, 0, 1)),top var(--u-duration-fast, .15s) var(--u-ease-move, cubic-bezier(.2, 0, 0, 1))}.u-selectbox .u-selectbox-options{transform-origin:top center}@media (prefers-reduced-motion:reduce){.u-selectbox-select-icon-arrow,.u-selectbox-select-icon-cross{transition:none}}.u-button{height:auto;min-height:var(--u-button-height, var(--u-height-main, calc(48 * var(--u-unit, 1px))));white-space:normal;padding-top:var(--u-button-padding-y, calc(6 * var(--u-unit, 1px)));padding-bottom:var(--u-button-padding-y, calc(6 * var(--u-unit, 1px)))}.u-button-text-icon-only{min-width:calc(44 * var(--u-unit, 1px));min-height:calc(44 * var(--u-unit, 1px));justify-content:center}.u-button.u-button-icon-only{box-sizing:border-box;width:var(--u-button-height, calc(48 * var(--u-unit, 1px)));min-width:var(--u-button-height, calc(48 * var(--u-unit, 1px)));padding:0;flex-shrink:0}.u-button-with-loading{position:relative}.u-button-loading-content{display:inline-flex;align-items:inherit;justify-content:inherit;flex-direction:inherit;gap:inherit;min-width:0}.u-button-loading .u-button-loading-content{opacity:0}.u-button-loading-indicator{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none}.u-button-refresh-icon{display:inline-block;flex:0 0 auto;width:var(--u-button-refresh-icon-size);height:var(--u-button-refresh-icon-size);vertical-align:middle;transform-origin:center}.u-button-refresh-icon--spinning{animation:u-button-refresh-spin .75s linear infinite}@keyframes u-button-refresh-spin{to{transform:rotate(-360deg)}}@media (prefers-reduced-motion:reduce){.u-button-refresh-icon--spinning{animation:none}}.u-react-size-dense{--u-height-main: var(--u-dense-height);--u-input-line-padding-y: max(0px, calc((var(--u-dense-height) - 2px - 1.4286em) / 2));--u-input-padding-y: max(0px, calc((var(--u-dense-height) - 2px - 1.4286em) / 2));--u-textarea-min-height: var(--u-dense-height)}.u-react-size-dense .u-selectbox-select,.u-react-size-dense .u-selectbox-select-required{padding-top:var(--u-input-line-padding-y);padding-bottom:var(--u-input-line-padding-y)}.u-message,.u-message-fail,.u-message-success,.u-message-warning{background-position:top calc(15 * var(--u-unit)) left calc(16 * var(--u-unit))}.u-message,.u-message-fail,.u-message-success,.u-message-warning,.u-message-small,.u-message-small-fail,.u-message-small-success,.u-message-small-warning{overflow-wrap:anywhere}.u-message-small,.u-message-small-fail,.u-message-small-success,.u-message-small-warning{background-position:top calc(7 * var(--u-unit)) left calc(16 * var(--u-unit))}.u-message,.u-message-fail,.u-message-success,.u-message-warning,.u-message-small,.u-message-small-fail,.u-message-small-success,.u-message-small-warning{background-size:calc(20 * var(--u-unit)) calc(20 * var(--u-unit))}.u-form-field{display:flex;flex-direction:column;gap:calc(4 * var(--u-unit, 1px))}.u-form-field--inline{flex-direction:row;align-items:center;gap:calc(20 * var(--u-unit, 1px))}.u-form-field--inline .u-form-field__control{flex:1}.u-form-field__title{color:var(--u-field-title-color, #545454);font-size:var(--u-field-title-size, calc(14 * var(--u-unit, 1px)))}.u-form-field__control{min-width:0}.u-form-field__error{color:var(--u-color-error, #ef302b);font-size:var(--u-font-size-12, calc(12 * var(--u-unit, 1px)))}.u-form-field__hint{color:var(--u-color-text-secondary, #545454);font-size:var(--u-font-size-12, calc(12 * var(--u-unit, 1px)))}.u-form-field__title-row{display:flex;align-items:center;font-size:var(--u-field-title-size, calc(14 * var(--u-unit, 1px)))}.u-form-field__help{display:inline-flex;margin-left:calc(5 * var(--u-unit, 1px))}.u-form-field__help .u-button-text-table{min-height:0;height:auto;padding:0}.u-form-field__help .u-button-text-table:after{width:calc(24 * var(--u-unit, 1px));height:calc(24 * var(--u-unit, 1px))}.u-number.u-number-disabled .u-input{border:none!important;background-color:#f6f6f6!important;transition:none!important}.u-number.u-number-disabled .u-input:disabled{cursor:default}.u-number.u-number-disabled:hover .u-input,.u-number.u-number-disabled:hover .u-input:disabled,.u-number.u-number-disabled .u-input:disabled:hover,.u-number.u-number-disabled .u-input:disabled:focus,.u-number.u-number-disabled .u-input:disabled:active{border:none!important;box-shadow:none!important;outline:none!important;background-color:#f6f6f6!important}.u-number.u-number-disabled .u-number-up,.u-number.u-number-disabled .u-number-down{cursor:default;opacity:.45;pointer-events:none}.u-number.u-number-disabled .u-number-down,.u-number.u-number-disabled .u-number-down:hover{background-image:url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.38415 5.53884L9.31663 0.819867C9.58801 0.494204 9.35643 -0.000225067 8.93252 -0.000225067L1.06756 -0.000225067C0.64364 -0.000225067 0.412061 0.494203 0.683447 0.819866L4.61593 5.53884C4.81582 5.77872 5.18425 5.77872 5.38415 5.53884Z' fill='%23748AB9'/%3E%3C/svg%3E%0A")!important}.u-number.u-number-disabled .u-number-up,.u-number.u-number-disabled .u-number-up:hover{background-image:url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.38415 5.53884L9.31663 0.819867C9.58801 0.494204 9.35643 -0.000225067 8.93252 -0.000225067L1.06756 -0.000225067C0.64364 -0.000225067 0.412061 0.494203 0.683447 0.819866L4.61593 5.53884C4.81582 5.77872 5.18425 5.77872 5.38415 5.53884Z' fill='%23748AB9'/%3E%3C/svg%3E%0A")!important}.u-search:hover .u-search-clear{opacity:1}.u-search .u-search-clear{display:flex;align-items:center;justify-content:center;opacity:0;position:absolute;top:calc(50% - calc(10 * var(--u-unit, 1px)));right:calc(16 * var(--u-unit, 1px));width:calc(20 * var(--u-unit, 1px));height:calc(20 * var(--u-unit, 1px));margin:0;padding:0;border:none;background:none;cursor:pointer;color:var(--u-color-text-muted, #A7A7A7);font-size:var(--u-font-size-20, calc(20 * var(--u-unit, 1px)));transition-property:color,opacity;transition-duration:var(--u-duration-fast, .15s);transition-timing-function:var(--u-ease-standard, ease-in-out)}.u-search .u-search-clear:hover{color:var(--u-color-primary, #1E4391)}.u-search .u-search-clear .u-icon{font-size:inherit}.u-search .u-search-clear:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:44px;height:44px}.u-search .u-input[type=search].u-input--clearable{padding-right:calc(44 * var(--u-unit, 1px))}.u-search .u-input[type=search]::-webkit-search-cancel-button{display:none}.u-search .u-input:focus+.u-search-clear,.u-search .u-search-clear:focus-visible{opacity:1}@media (hover:none){.u-search .u-search-clear{opacity:1}}.u-status{width:max-content;white-space:normal;max-width:100%;overflow-wrap:normal}.u-status-truncate{white-space:nowrap}.u-status__text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.u-switch-wrapper,.u-switch{width:fit-content;max-width:100%;min-width:0}.u-switch .u-switch__point{flex-shrink:0}.u-switch .tt{min-width:0;overflow-wrap:break-word}.u-tabs{display:inline-grid;grid-template-columns:minmax(0,1fr);position:relative;min-width:0;max-width:100%;vertical-align:top;box-sizing:border-box}.u-tabs:where(:not(.u-tabs-full-width)){width:max-content}.u-tabs-segment{background:#f0f0f0;border-radius:calc(10 * var(--u-unit, 1px));padding:calc(2 * var(--u-unit, 1px))}.u-tabs-track{grid-area:1 / 1;display:flex;align-items:center;gap:inherit;min-width:0}.u-tabs-item{flex:0 0 auto;min-width:0;max-width:100%}.u-tabs-track>.u-tabs-item:only-of-type{flex-shrink:1}.u-tabs-track{position:relative}.u-tabs .u-tab-segment{transition:color var(--u-duration-base, .2s) var(--u-ease-move, cubic-bezier(.2, 0, 0, 1))}.u-tab-segment>.u-tabs-title{align-self:stretch}.u-tab-segment .u-tabs-title{position:relative;display:block;text-align:center;font-weight:var(--u-font-weight-regular, 400);-webkit-text-fill-color:currentcolor;transition:-webkit-text-fill-color var(--u-duration-base, .2s) var(--u-ease-move, cubic-bezier(.2, 0, 0, 1))}.u-tab-segment .u-tabs-title:before{content:attr(data-label);display:block;height:0;overflow:hidden;visibility:hidden;font-weight:600;pointer-events:none;-webkit-user-select:none;user-select:none}.u-tab-segment .u-tabs-title:after{content:attr(data-label);position:absolute;inset:0;overflow:hidden;text-overflow:ellipsis;font-weight:600;-webkit-text-fill-color:transparent;transition:inherit}.u-tab-segment.u-tab-segment-active .u-tabs-title{-webkit-text-fill-color:transparent}.u-tab-segment.u-tab-segment-active .u-tabs-title:after{-webkit-text-fill-color:currentcolor}@media (prefers-reduced-motion:reduce){.u-tabs .u-tab-segment,.u-tab-segment .u-tabs-title{transition:none}}.u-tabs-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.u-tab-segment{border:none;background:transparent;color:var(--u-color-text-secondary);padding:calc(10 * var(--u-unit, 1px)) calc(20 * var(--u-unit, 1px));border-radius:calc(8 * var(--u-unit, 1px));cursor:pointer;white-space:nowrap;display:flex;flex-direction:column;align-items:center;max-width:100%;min-width:0;font-size:var(--u-font-size-14, calc(14 * var(--u-unit, 1px)));font-family:inherit}.u-tab-segment:before{content:attr(data-label);font-weight:600;visibility:hidden;height:0;overflow:hidden;pointer-events:none;-webkit-user-select:none;user-select:none}.u-tab-segment.u-tab-segment-active{background:var(--u-color-surface);color:var(--u-color-primary);box-shadow:0 1px 4px #0000001f;font-weight:600}:where(.u-tabs.u-tabs-full-width){width:100%}.u-tabs-full-width>.u-tabs-track>.u-tabs-item{flex:1 1 0;min-width:0}.u-tabs-full-width>.u-tabs-track>.u-tabs-item>button,.u-tabs-full-width>.u-tabs-track>.u-tabs-item>a{width:100%;justify-content:center}.u-tabs .u-tab--disabled{opacity:.5;cursor:not-allowed}.u-tabs :is(button,a):focus:not(:focus-visible){outline:none}.u-tabs :is(button,a):focus-visible{outline:2px solid var(--u-color-primary);outline-offset:-2px}.u-tabs a.u-tab-segment{font-style:normal;line-height:normal;letter-spacing:normal}.u-tabs a.u-tab-segment,.u-tabs a.u-tab-segment:hover{text-decoration:none}.u-tabs a.u-tab-segment:not(.u-tab-segment-active):hover{color:var(--u-color-text-secondary)}.u-selectbox-select *{pointer-events:none}.u-selectbox-select-icon-cross{pointer-events:auto}`, hostAttrs: ["data-input-mode", "data-u-responsive", "data-u-viewport"] };
837
+ const Et = typeof ke == "object" ? ke : { css: "", hostAttrs: [] }, c = (t) => String(t ?? "").replace(/[&<>"']/g, (e) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&#39;" })[e]);
838
+ function sr(t, e, r) {
839
+ return `<label class="u-switch u-switch-small"><input type="checkbox" role="switch" ${e}><div class="u-switch__point"></div>
840
+ <span class="tt">${c(t)}${r ? `<span class="sub">${c(r)}</span>` : ""}</span></label>`;
841
+ }
842
+ function F(t, e, r, o = "button") {
843
+ return `<button class="${e === "text" ? "u-button-text" : e === "text-danger" ? "u-button-text u-button-text-danger" : `u-button u-button-small${e === "primary" ? "" : ` u-button-${e}`}`}" type="${o}" ${r}>${c(t)}</button>`;
844
+ }
845
+ function lr(t, e, r) {
846
+ return `<button class="u-button-text u-button-text-icon-only" type="button" aria-label="${c(e)}" ${r}><i class="u-icon ${t}" aria-hidden="true"></i></button>`;
847
+ }
848
+ function Ea(t, e, r) {
849
+ return `<div class="u-search"><input class="u-input${t ? " u-input--clearable" : ""}" type="search" data-search placeholder="${c(e)}" aria-label="${c(r)}" value="${c(t)}">
850
+ ${t ? '<button class="u-search-clear" type="button" aria-label="Очистить" data-search-clear><i class="u-icon icon-cross-small" aria-hidden="true"></i></button>' : ""}
851
+ <button class="u-search-loupe" type="button" tabindex="-1" aria-hidden="true"></button></div>`;
852
+ }
853
+ function Ca(t, e) {
854
+ return `<div class="u-number"><button class="u-number-down" type="button" data-step="-1" aria-label="Уменьшить: ${c(t)}"></button>
855
+ <input class="u-input" type="number" aria-label="${c(t)}" ${e}>
856
+ <button class="u-number-up" type="button" data-step="1" aria-label="Увеличить: ${c(t)}"></button></div>`;
857
+ }
858
+ function Fa(t) {
859
+ var r;
860
+ const e = (r = t.closest(".u-number")) == null ? void 0 : r.querySelector("input");
861
+ e && (t.dataset.step === "-1" ? e.stepDown() : e.stepUp(), e.dispatchEvent(new Event("input", { bubbles: !0 })));
862
+ }
863
+ function K(t, e, r = "", o = "") {
864
+ return `<div class="u-form-field${o ? ` ${o}` : ""}"><span class="u-form-field__title">${c(t)}</span>
865
+ <div class="u-form-field__control">${e}</div>${r}</div>`;
866
+ }
867
+ function Aa(t, e) {
868
+ return `<div class="u-tabs u-tabs-segment u-tabs-full-width"><div class="u-tabs-track" role="tablist">${t.map((r) => {
869
+ const o = r.id === e;
870
+ return `<div class="u-tabs-item"><button class="u-tab-segment${o ? " u-tab-segment-active" : ""}" type="button" role="tab" data-tab="${r.id}"
871
+ data-label="${c(r.title)}" aria-selected="${o}"><span class="u-tabs-title" data-label="${c(r.title)}">${c(r.title)}</span></button></div>`;
872
+ }).join("")}</div></div>`;
873
+ }
874
+ function Vt(t, e, r, o, a) {
875
+ const n = `u-dev-select-${t}`, i = r.find((u) => u.value === o) ?? r[0];
876
+ return `<div class="u-selectbox"><input type="hidden" ${a} value="${c(i == null ? void 0 : i.value)}" data-default="${c(i == null ? void 0 : i.value)}">
877
+ <div class="u-selectbox-select" tabindex="0" role="combobox" aria-expanded="false" aria-haspopup="listbox" aria-controls="${n}"
878
+ aria-label="${c(e)}" data-select="${t}"><span class="u-selectbox-select-title">${c(i == null ? void 0 : i.label)}</span><i class="u-selectbox-select-icon-arrow" aria-hidden="true"></i></div>
879
+ <div class="u-selectbox-options" role="listbox" id="${n}" aria-label="${c(e)}">${r.map((u, p) => `
880
+ <div class="u-selectbox-option" role="option" id="${n}-${p}" data-value="${c(u.value)}" aria-selected="${u === i}">${c(u.label)}</div>`).join("")}</div></div>`;
881
+ }
882
+ const nt = (t) => ({
883
+ trigger: t.querySelector("[data-select]"),
884
+ input: t.querySelector('input[type="hidden"]'),
885
+ options: [...t.querySelectorAll(".u-selectbox-option")]
886
+ });
887
+ function cr(t) {
888
+ const { trigger: e, input: r, options: o } = nt(t);
889
+ if (!e || !r) return;
890
+ const a = o.find((i) => i.dataset.value === r.value) ?? o[0];
891
+ o.forEach((i) => i.setAttribute("aria-selected", String(i === a)));
892
+ const n = e.querySelector(".u-selectbox-select-title");
893
+ n && a && (n.textContent = a.textContent), a && (r.value = a.dataset.value ?? "");
894
+ }
895
+ function dr(t) {
896
+ t.querySelectorAll(".u-selectbox").forEach(cr);
897
+ }
898
+ function pr(t) {
899
+ t.querySelectorAll(".u-selectbox input[data-default]").forEach((e) => {
900
+ e.value = e.dataset.default ?? "";
901
+ }), dr(t);
902
+ }
903
+ const Wt = (t) => t.querySelector(".u-selectbox-select-open");
904
+ function fr(t, e) {
905
+ var o;
906
+ const r = t.closest(".u-selectbox");
907
+ !r || !e || (nt(r).options.forEach((a) => a.classList.toggle("active", a === e)), t.setAttribute("aria-activedescendant", e.id), (o = e.scrollIntoView) == null || o.call(e, { block: "nearest" }));
908
+ }
909
+ function z(t, e) {
910
+ const r = t.closest(".u-selectbox"), o = r == null ? void 0 : r.querySelector(".u-selectbox-options");
911
+ if (!r || !o) return;
912
+ if (t.classList.toggle("u-selectbox-select-open", e), t.setAttribute("aria-expanded", String(e)), !e) {
913
+ t.removeAttribute("aria-activedescendant");
914
+ return;
915
+ }
916
+ const a = t.closest(".body");
917
+ if (a) {
918
+ const i = a.getBoundingClientRect(), u = t.getBoundingClientRect();
919
+ o.classList.toggle("u-selectbox-options-up", i.bottom - u.bottom < o.offsetHeight + 8 && u.top - i.top > i.bottom - u.bottom);
920
+ }
921
+ const { options: n } = nt(r);
922
+ fr(t, n.find((i) => i.getAttribute("aria-selected") === "true") ?? n[0]);
923
+ }
924
+ function $a(t) {
925
+ t.querySelectorAll(".u-selectbox-select-open").forEach((e) => z(e, !1));
926
+ }
927
+ function hr(t) {
928
+ const e = t.closest(".u-selectbox");
929
+ if (!e) return;
930
+ const { trigger: r, input: o } = nt(e);
931
+ !r || !o || (z(r, !1), r.focus({ preventScroll: !0 }), o.value !== t.dataset.value && (o.value = t.dataset.value ?? "", cr(e), o.dispatchEvent(new Event("change", { bubbles: !0 }))));
932
+ }
933
+ function Sa(t, e) {
934
+ const r = e.closest(".u-selectbox");
935
+ if (!r) return;
936
+ const { options: o } = nt(r), a = e.classList.contains("u-selectbox-select-open"), n = o.findIndex((u) => u.classList.contains("active"));
937
+ if (t.key === "Tab") {
938
+ a && z(e, !1);
939
+ return;
940
+ }
941
+ if (!a) {
942
+ ["Enter", " ", "ArrowDown", "ArrowUp"].includes(t.key) && (t.preventDefault(), z(e, !0));
943
+ return;
944
+ }
945
+ const i = { ArrowDown: n + 1, ArrowUp: n - 1, Home: 0, End: o.length - 1 }[t.key];
946
+ i !== void 0 ? (t.preventDefault(), fr(e, o[Math.max(0, Math.min(o.length - 1, i))])) : (t.key === "Enter" || t.key === " ") && (t.preventDefault(), o[n] && hr(o[n]));
947
+ }
948
+ const La = `
404
949
  :host { all: initial; }
405
950
  * { box-sizing: border-box; }
406
- .root { --p: #1e4391; --p-soft: #e8eef9; --fg: #222; --muted: #6b7280; --line: #d9dee8; --bg: #fff; --soft: #f5f7fb;
407
- --danger: #d6342c; --danger-soft: #fdeceb;
951
+ .root {
952
+ /* «Анимации ×5» ставит длительности на каждый элемент документа, в том числе на хост панели:
953
+ режим замедляет сервис, а не инструмент, которым его включили. */
954
+ --u-duration-instant: 100ms; --u-duration-fast: 150ms; --u-duration-base: 200ms; --u-duration-moderate: 250ms; --u-duration-slow: 300ms;
408
955
  /* Отступ кнопки снизу: StickyActionBar кита, пока стоит у нижнего края, задаёт на <html>
409
956
  --u-dev-launcher-bottom (его высота + 12px) — кнопка и панель поднимаются над ним. */
410
957
  --launcher-bottom: var(--u-dev-launcher-bottom, calc(12px + env(safe-area-inset-bottom, 0px)));
411
- font-family: Montserrat, "Segoe UI", Arial, sans-serif; font-size: 13px; line-height: 1.4; color: var(--fg); }
412
- button, input, select { font: inherit; color: inherit; }
958
+ font-family: Montserrat, "Segoe UI", Arial, sans-serif; font-size: 14px; line-height: 1.4; color: var(--u-color-text, #222); }
959
+ button, input, textarea { font: inherit; color: inherit; }
413
960
  /* Кнопка панели — в цветах кита: токены --u-color-* с :root сервиса проходят в shadow DOM
414
961
  (all: initial их не сбрасывает), запасные значения — как в ките. В покое — круг с логотипом,
415
962
  чтобы меньше закрывать нижние липкие панели сервиса; при наведении и фокусе раскрывается
@@ -419,361 +966,522 @@ button, input, select { font: inherit; color: inherit; }
419
966
  position: fixed; left: 12px; bottom: var(--launcher-bottom); z-index: 2147483000;
420
967
  display: inline-flex; align-items: center; height: 36px; padding: 0; border: 1px solid var(--kit-line); border-radius: 18px;
421
968
  background: var(--kit-surface); color: var(--kit-p); font-size: 13px; font-weight: 500; white-space: nowrap; cursor: pointer;
422
- box-shadow: 0 2px 8px rgba(0,0,0,.15); }
969
+ box-shadow: 0 2px 8px rgba(0,0,0,.15);
970
+ transition: background-color var(--u-duration-fast) var(--u-ease-standard), border-color var(--u-duration-fast) var(--u-ease-standard); }
423
971
  .pill .logo { flex: none; display: grid; place-items: center; width: 34px; height: 34px; border-radius: 50%; background: var(--kit-surface); }
424
972
  .pill .logo svg { display: block; width: 20px; height: 20px; }
425
973
  .pill .label { max-width: 0; overflow: hidden; opacity: 0; padding: 0;
426
- transition: max-width .2s ease, opacity .2s ease, padding .2s ease; }
974
+ transition: max-width var(--u-duration-base) var(--u-ease-move), opacity var(--u-duration-base) var(--u-ease-move), padding var(--u-duration-base) var(--u-ease-move); }
427
975
  .pill:hover .label, .pill:focus-visible .label, .pill.on .label { max-width: 260px; opacity: 1; padding: 0 14px 0 2px; }
428
976
  .pill.on { background: var(--kit-error); border-color: var(--kit-error); color: #fff; }
429
977
  .pill.on .logo { width: 30px; height: 30px; margin: 0 1px 0 2px; }
430
978
  .pill:focus-visible { outline: 2px solid var(--kit-p); outline-offset: 2px; }
431
979
  .panel { position: fixed; left: 12px; bottom: calc(var(--launcher-bottom) + 44px); z-index: 2147483001;
432
- width: 360px; max-width: calc(100vw - 24px); max-height: min(70vh, 640px); display: flex; flex-direction: column;
433
- background: var(--bg); border: 1px solid var(--line); border-radius: 12px; box-shadow: 0 12px 32px rgba(16,24,40,.25); }
980
+ width: 400px; max-width: calc(100vw - 24px); max-height: min(75vh, 680px); display: flex; flex-direction: column;
981
+ background: var(--u-color-surface, #fff); border: 1px solid var(--u-color-border-light, #d3d3d3); border-radius: var(--u-radius, 10px);
982
+ box-shadow: var(--u-shadow-popup, 0 8px 24px rgba(15,43,94,.16)); }
434
983
  .panel.alone { bottom: var(--launcher-bottom); }
984
+ /* Подсказка у кнопки — пузырь, как у Tooltip кита. */
435
985
  .hint { position: fixed; left: 12px; bottom: var(--launcher-bottom); z-index: 2147483000;
436
- max-width: calc(100vw - 24px); padding: 8px 12px; border-radius: 10px; background: #222; color: #fff; font-size: 12px;
437
- box-shadow: 0 4px 14px rgba(0,0,0,.2); }
438
- .note { margin: 0 12px 8px; padding: 6px 10px; border-radius: 8px; background: var(--p-soft); color: var(--fg); font-size: 12px; overflow-wrap: anywhere; }
986
+ max-width: min(360px, calc(100vw - 24px)); padding: 8px 12px; border-radius: var(--u-radius-small, 8px);
987
+ background: var(--u-color-text, #222); color: var(--u-color-surface, #fff); font-size: 12px; box-shadow: var(--u-shadow-popup); }
439
988
  .pill ~ .hint { bottom: calc(var(--launcher-bottom) + 44px); }
440
- .head { display: flex; align-items: center; gap: 8px; padding: 10px 12px 8px; }
441
- .title { flex: 1; min-width: 0; font-weight: 700; font-size: 13px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
442
- .title select { font-weight: 700; border: 1px solid var(--line); border-radius: 6px; padding: 2px 4px; background: var(--bg); max-width: 100%; }
443
- .reset { border: 0; border-radius: 6px; padding: 5px 10px; background: var(--danger-soft); color: var(--danger); font-weight: 600; font-size: 12px; cursor: pointer; }
444
- .close { width: 26px; height: 26px; border: 0; border-radius: 6px; background: none; color: var(--muted); font-size: 18px; line-height: 1; cursor: pointer; }
445
- .escape { padding: 0 12px 6px; color: var(--muted); font-size: 11px; }
446
- .tabs { display: flex; gap: 4px; padding: 0 12px; border-bottom: 1px solid var(--line); }
447
- .tab { border: 0; background: none; padding: 6px 8px; font-weight: 600; font-size: 12px; color: var(--muted); border-bottom: 2px solid transparent; cursor: pointer; }
448
- .tab[aria-selected="true"] { color: var(--p); border-color: var(--p); }
449
- .body { overflow: auto; padding: 8px 12px 10px; display: flex; flex-direction: column; gap: 10px; }
450
- .search { width: 100%; padding: 6px 10px; border: 1px solid var(--line); border-radius: 8px; background: var(--soft); }
451
- .group-title { margin: 2px 0 2px; font-size: 11px; font-weight: 600; letter-spacing: .05em; text-transform: uppercase; color: var(--muted); }
452
- .row { display: flex; align-items: center; gap: 10px; padding: 4px 0; cursor: pointer; }
453
- .row .text { flex: 1; min-width: 0; }
454
- .row small { display: block; color: var(--muted); font-size: 11px; }
455
- .switch { appearance: none; flex: none; width: 30px; height: 18px; border-radius: 9px; background: var(--line); position: relative; margin: 0; cursor: pointer; }
456
- .switch::after { content: ''; position: absolute; top: 2px; left: 2px; width: 14px; height: 14px; border-radius: 50%; background: #fff; box-shadow: 0 1px 2px rgba(0,0,0,.3); transition: left .12s; }
457
- .switch:checked { background: var(--danger); }
458
- .switch:checked::after { left: 14px; }
459
- .switch:focus-visible, button:focus-visible, select:focus-visible, input:focus-visible { outline: 2px solid var(--p); outline-offset: 2px; }
460
- .rule { display: flex; align-items: center; gap: 8px; padding: 5px 8px; border-radius: 8px; background: var(--soft); font-family: Consolas, monospace; font-size: 12px; }
461
- .rule .text { flex: 1; min-width: 0; overflow-wrap: anywhere; }
462
- .remove { border: 0; background: none; color: var(--muted); font-size: 16px; line-height: 1; cursor: pointer; padding: 0 2px; }
463
- .add { display: grid; grid-template-columns: auto 1fr auto auto; gap: 6px; }
464
- .add select, .add input { min-width: 0; padding: 5px 6px; border: 1px solid var(--line); border-radius: 6px; background: var(--bg); font-size: 12px; }
465
- .btn { border: 1px solid var(--line); border-radius: 6px; background: var(--bg); padding: 5px 10px; font-size: 12px; font-weight: 600; cursor: pointer; }
466
- .btn.primary { background: var(--p); border-color: var(--p); color: #fff; }
467
- .foot { display: flex; gap: 6px; flex-wrap: wrap; padding: 8px 12px; border-top: 1px solid var(--line); }
468
- .empty { color: var(--muted); font-size: 12px; }
469
- .requests { display: flex; flex-direction: column; gap: 2px; }
470
- .req { display: grid; grid-template-columns: 52px 1fr auto auto; gap: 8px; align-items: center; padding: 4px 0;
471
- border-bottom: 1px solid var(--soft); font-family: Consolas, monospace; font-size: 12px; }
472
- .req .path { min-width: 0; overflow-wrap: anywhere; }
473
- .req .status { font-weight: 700; }
474
- .req .status.bad { color: var(--danger); }
475
- .req small { display: block; color: var(--muted); font-family: Montserrat, "Segoe UI", Arial, sans-serif; font-size: 11px; }
476
- .req .btn { padding: 3px 8px; font-family: Montserrat, "Segoe UI", Arial, sans-serif; }
477
- .shown { padding: 6px 0; border-bottom: 1px solid var(--soft); }
478
- .shown-head { display: flex; justify-content: space-between; gap: 8px; color: var(--muted); font-size: 11px; }
479
- .shown-head .kind { font-weight: 600; color: var(--danger); }
480
- .shown-head .kind.warning { color: #b45309; }
989
+ /* min-height у u-message-small отменяет защиту флекс-элемента от сжатия: без flex-shrink текст обрезается. */
990
+ .note { margin: 0 16px 8px; overflow-wrap: anywhere; flex-shrink: 0; }
991
+ .head { display: flex; align-items: center; gap: 4px; padding: 10px 8px 2px 16px; }
992
+ .title { flex: 1; min-width: 0; font-weight: 600; font-size: 16px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
993
+ .title .u-selectbox { width: 100%; }
994
+ .title .u-selectbox-select-title { font-weight: 600; }
995
+ .intro, .caption, .escape { margin: 0; color: var(--u-color-text-secondary, #545454); }
996
+ .intro { padding: 0 16px 10px; }
997
+ .tabs { padding: 0 16px 8px; }
998
+ .tabs .u-tab-segment { padding: 6px 4px; }
999
+ .body { overflow: auto; padding: 4px 16px 12px; display: flex; flex-direction: column; gap: 14px; }
1000
+ .body .u-search { display: block; width: 100%; }
1001
+ .group { display: flex; flex-direction: column; gap: 8px; }
1002
+ .group-title { font-weight: 600; color: var(--u-color-text-secondary, #545454); }
1003
+ .u-switch { align-items: flex-start; }
1004
+ .u-switch .tt { padding-top: 3px; }
1005
+ .u-switch .sub { display: block; color: var(--u-color-text-secondary, #545454); font-size: 12px; }
1006
+ /* Select кита: отметка выбранного и пункта под клавиатурой — как у Select в React и Vue. */
1007
+ .u-selectbox-option[aria-selected="true"] { background: var(--u-color-background, #f6f6f6); }
1008
+ .u-selectbox-option.active { background: var(--u-color-selected, #e7f2ff); }
1009
+ .u-selectbox-select-icon-arrow { transition: transform var(--u-duration-fast) var(--u-ease-standard); }
1010
+ .u-selectbox-select-open .u-selectbox-select-icon-arrow { transform: rotate(180deg); }
1011
+ .rule { display: flex; align-items: center; gap: 10px; padding: 6px 4px 6px 10px; border-radius: var(--u-radius-small, 8px);
1012
+ background: var(--u-color-background-light, #f9f9f9); }
1013
+ .rule .text { flex: 1; min-width: 0; font-family: Consolas, monospace; font-size: 12px; overflow-wrap: anywhere; }
1014
+ .rule small, .req small, .shown small { display: block; color: var(--u-color-text-secondary, #545454);
1015
+ font-family: Montserrat, "Segoe UI", Arial, sans-serif; font-size: 12px; }
1016
+ .add { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 8px; }
1017
+ .add .wide { grid-column: 1 / -1; }
1018
+ .add .u-textarea { height: auto; min-height: 76px; font-family: Consolas, monospace; font-size: 12px; resize: vertical; }
1019
+ .add .u-form-field__hint { color: var(--u-color-warning, #e98446); }
1020
+ .add [type="submit"] { align-self: end; }
1021
+ .foot { display: flex; flex-direction: column; gap: 8px; padding: 10px 16px 12px; border-top: 1px solid var(--u-color-border-light, #d3d3d3); }
1022
+ .actions { display: flex; gap: 8px; flex-wrap: wrap; }
1023
+ .empty { margin: 0; color: var(--u-color-text-secondary, #545454); }
1024
+ .list-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; color: var(--u-color-text-secondary, #545454); }
1025
+ .requests { display: flex; flex-direction: column; }
1026
+ .req { display: grid; grid-template-columns: 52px 1fr auto auto; gap: 8px; align-items: center; padding: 6px 0;
1027
+ border-bottom: 1px solid var(--u-color-background, #f6f6f6); font-family: Consolas, monospace; font-size: 12px; }
1028
+ .req .path { min-width: 0; overflow-wrap: break-word; }
1029
+ /* Путь переносится по «/» (<wbr>), а не посреди слова; длинный обрезается на второй строке, полный — в title. */
1030
+ .req .path .p { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden; }
1031
+ .req .u-status { font-family: Montserrat, "Segoe UI", Arial, sans-serif; }
1032
+ .shown { padding: 8px 0; border-bottom: 1px solid var(--u-color-background, #f6f6f6); }
1033
+ .shown-head { display: flex; justify-content: space-between; gap: 8px; color: var(--u-color-text-secondary, #545454); font-size: 12px; }
1034
+ .shown-head .kind { font-weight: 600; color: var(--u-color-error, #ef302b); }
1035
+ .shown-head .kind.warning { color: var(--u-color-warning, #e98446); }
481
1036
  .shown-title { font-weight: 600; }
482
- .shown small { display: block; color: var(--muted); font-size: 11px; }
483
1037
  .shown .cause { margin-top: 2px; font-family: Consolas, monospace; font-size: 12px; }
484
- .requests-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; color: var(--muted); font-size: 11px; }
485
1038
  dl { display: grid; grid-template-columns: auto 1fr; gap: 6px 12px; margin: 0; }
486
- dt { color: var(--muted); }
1039
+ dt { color: var(--u-color-text-secondary, #545454); }
487
1040
  dd { margin: 0; font-family: Consolas, monospace; font-size: 12px; overflow-wrap: anywhere; }
488
1041
  @media (max-width: 576px) {
489
- .panel { left: 0; right: 0; bottom: 0; width: auto; max-width: none; max-height: 70vh; border-radius: 14px 14px 0 0;
490
- padding-bottom: env(safe-area-inset-bottom, 0px); }
1042
+ .panel { left: 0; right: 0; bottom: 0; width: auto; max-width: none; max-height: 80vh;
1043
+ border-radius: var(--u-radius, 10px) var(--u-radius, 10px) 0 0; padding-bottom: env(safe-area-inset-bottom, 0px); }
491
1044
  .panel ~ .pill { display: none; }
492
1045
  }
493
- @media (prefers-reduced-motion: reduce) { .switch::after, .pill .label { transition: none; } }
494
- `, De = 6e3;
495
- let tt, h = null, c = null, S = null, k = null, b = null, A = !1, E = !1;
496
- const Et = { open: !1, tab: "faults", search: "", service: void 0, hint: "" }, l = { ...Et };
497
- function P() {
498
- const t = m();
499
- return t.find((e) => e.config.service === l.service) ?? t[0];
500
- }
501
- function Lt(t) {
502
- const e = (t.config.builtins ?? []).map((n) => ({ id: n, ...Te[n] }));
1046
+ @media (prefers-reduced-motion: reduce) { .u-selectbox-select-icon-arrow, .pill, .pill .label { transition: none; } }
1047
+ `, _a = {
1048
+ title: "Сеть",
1049
+ items: [
1050
+ { id: "offline", label: "Офлайн браузера", hint: "Полоса «Нет связи», запросы к API падают" },
1051
+ { id: "network", label: "Обрыв соединения", hint: "Сеть есть, а сервер не отвечает" },
1052
+ { id: "slow", label: "Медленные ответы", hint: `Задержка ${je / 1e3} с на запросы к API` }
1053
+ ]
1054
+ }, br = {
1055
+ authFail: { label: "Сбой входа", hint: "После перезагрузки сервис рисует заглушку входа" },
1056
+ crashApp: { label: "Падение приложения", hint: "Ошибка рендера над каркасом сервиса" },
1057
+ crashPage: { label: "Падение страницы", hint: "Каждая открытая страница падает, пока флаг включён" }
1058
+ }, Jt = [["", "Любой"], ["GET", "GET"], ["write", "Запись"], ["POST", "POST"], ["PUT", "PUT"], ["PATCH", "PATCH"], ["DELETE", "DELETE"]], za = [200, 201, 204, 400, 401, 403, 404, 409, 422, 429, 500, 502, 503, 504], Da = '<svg viewBox="0 0 36 36" fill="none" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M28 0L20 16H36L28 0ZM28 5.11101L23.6984 13.7143H32.3016L28 5.11101Z" fill="#3BA68C"/><path fill-rule="evenodd" clip-rule="evenodd" d="M9 33.7143C12.1559 33.7143 14.7143 31.1559 14.7143 28C14.7143 24.8441 12.1559 22.2857 9 22.2857C5.84409 22.2857 3.28571 24.8441 3.28571 28C3.28571 31.1559 5.84409 33.7143 9 33.7143ZM9 36C13.4183 36 17 32.4183 17 28C17 23.5817 13.4183 20 9 20C4.58172 20 1 23.5817 1 28C1 32.4183 4.58172 36 9 36Z" fill="#E54B6A"/><path fill-rule="evenodd" clip-rule="evenodd" d="M33.7143 22.2857H22.2857V33.7143H33.7143V22.2857ZM20 20V36H36V20H20Z" fill="#1E4391"/><path fill-rule="evenodd" clip-rule="evenodd" d="M12.0593 4.9091L9 0L5.94073 4.9091L0 6.11146L4.05 10.3478L3.43769 16L9 13.7091L14.5623 16L13.95 10.3478L18 6.11146L12.0593 4.9091ZM14.0262 7.31822L10.7085 6.64674L9 3.90515L7.29149 6.64674L3.97378 7.31822L6.23558 9.68408L5.89362 12.8407L9 11.5613L12.1064 12.8407L11.7644 9.68408L14.0262 7.31822Z" fill="#E98446"/></svg>', Ta = 6e3;
1059
+ let Yt, f = null, s = null, V = null, O = null, q = null, b = null, rt = !1, Y = !1, w = null, S = "", dt = "";
1060
+ const ae = { open: !1, tab: "faults", search: "", service: void 0, hint: "" }, d = { ...ae };
1061
+ function it() {
1062
+ const t = y();
1063
+ return t.find((e) => e.config.service === d.service) ?? t[0];
1064
+ }
1065
+ function vr(t) {
1066
+ const e = (t.config.builtins ?? []).map((r) => ({ id: r, ...br[r] }));
503
1067
  return [
504
1068
  ...e.length ? [{ title: "Весь сервис", items: e }] : [],
505
- Le,
1069
+ _a,
506
1070
  ...t.config.groups ?? []
507
1071
  ];
508
1072
  }
509
- function Pe(t, e) {
510
- var n;
511
- return ((n = Lt(t).flatMap((o) => o.items).find((o) => o.id === e)) == null ? void 0 : n.label) ?? e;
1073
+ function Ma(t, e) {
1074
+ var r;
1075
+ return ((r = vr(t).flatMap((o) => o.items).find((o) => o.id === e)) == null ? void 0 : r.label) ?? e;
512
1076
  }
513
- function Tt(t) {
1077
+ function gr(t) {
514
1078
  return [
515
- ...t.state.faults.map((e) => Pe(t, e)),
1079
+ ...t.state.faults.map((e) => Ma(t, e)),
516
1080
  ...t.state.rules.filter((e) => e.enabled).map((e) => `${e.path} → ${e.status}`)
517
1081
  ];
518
1082
  }
519
- function Re(t, e, n, o) {
520
- const r = t % 100, a = t % 10;
521
- return r >= 11 && r <= 14 ? o : a === 1 ? e : a >= 2 && a <= 4 ? n : o;
522
- }
523
- const ut = (t) => !l.search || t.toLowerCase().includes(l.search.toLowerCase());
524
- function Oe(t) {
525
- const e = new Set(t.state.faults), n = Lt(t).map((a) => {
526
- const s = a.items.filter((i) => ut(`${i.label} ${i.hint ?? ""} ${i.id}`));
527
- return s.length ? `<div><div class="group-title">${d(a.title)}</div>${s.map((i) => `
528
- <label class="row"><span class="text">${d(i.label)}${i.hint ? `<small>${d(i.hint)}</small>` : ""}</span>
529
- <input class="switch" type="checkbox" role="switch" data-fault="${d(i.id)}" ${e.has(i.id) ? "checked" : ""}
530
- aria-label="${d(i.label)}"></label>`).join("")}</div>` : "";
531
- }).join(""), o = t.state.rules.filter((a) => ut(`${a.method ?? ""} ${a.path} ${a.status}`)), r = (a) => {
532
- var s;
533
- return ((s = Q.find(([i]) => i === (a ?? ""))) == null ? void 0 : s[1]) ?? a;
534
- };
1083
+ function Ba(t, e, r, o) {
1084
+ const a = t % 100, n = t % 10;
1085
+ return a >= 11 && a <= 14 ? o : n === 1 ? e : n >= 2 && n <= 4 ? r : o;
1086
+ }
1087
+ const Ee = (t) => !d.search || t.toLowerCase().includes(d.search.toLowerCase());
1088
+ function Ra(t) {
1089
+ const e = new Set(t.state.faults), r = vr(t).map((u) => {
1090
+ const p = u.items.filter((l) => Ee(`${l.label} ${l.hint ?? ""} ${l.id}`));
1091
+ return p.length ? `<div class="group"><div class="group-title h5">${c(u.title)}</div>${p.map((l) => sr(l.label, `data-fault="${c(l.id)}" ${e.has(l.id) ? "checked" : ""}`, l.hint)).join("")}</div>` : "";
1092
+ }).join(""), o = t.state.rules.filter((u) => Ee(`${u.method ?? ""} ${u.path} ${u.status}`)), a = (u) => {
1093
+ var p;
1094
+ return ((p = Jt.find(([l]) => l === (u ?? ""))) == null ? void 0 : p[1]) ?? u;
1095
+ }, n = (u) => [
1096
+ u.body !== void 0 ? "своё тело" : "",
1097
+ u.delay ? `задержка ${u.delay} мс` : ""
1098
+ ].filter(Boolean).join(" · "), i = c(t.config.apiBase ?? "адреса сайта");
535
1099
  return `
536
- <input class="search" type="search" data-search placeholder="Поиск: 503, офлайн, роли…" aria-label="Поиск по сценариям" value="${d(l.search)}">
537
- ${n || (o.length ? "" : '<div class="empty">Ничего не найдено.</div>')}
538
- <div><div class="group-title">Ответы сервера</div>
539
- ${o.map((a) => `<div class="rule"><span class="text">${d(r(a.method))} ${d(a.path)} → ${a.status}</span>
540
- <input class="switch" type="checkbox" role="switch" data-rule="${d(a.id)}" ${a.enabled ? "checked" : ""}
541
- aria-label="${d(`${a.path} → ${a.status}`)}">
542
- <button class="remove" type="button" data-remove="${d(a.id)}" aria-label="Удалить правило">×</button></div>`).join("")}
1100
+ ${Ea(d.search, "Поиск: 503, офлайн, роли…", "Поиск по сценариям")}
1101
+ ${r || (o.length ? "" : '<p class="empty tt">Ничего не найдено.</p>')}
1102
+ <div class="group"><div class="group-title h5">Ответы сервера</div>
1103
+ <p class="caption h5">Свой ответ API на адрес: пустой список, ошибка с текстом, ответ для другой роли. Включённое правило подменяет ответ сервера.</p>
1104
+ ${o.map((u) => `<div class="rule"><span class="text"${u.body !== void 0 ? ` title="${c(u.body.slice(0, 300))}"` : ""}>${c(a(u.method))} ${c(u.path)} → ${u.status}${n(u) ? `<small>${c(n(u))}</small>` : ""}</span>
1105
+ <label class="u-switch u-switch-small"><input type="checkbox" role="switch" data-rule="${c(u.id)}" ${u.enabled ? "checked" : ""}
1106
+ aria-label="${c(`${u.path} → ${u.status}`)}"><div class="u-switch__point"></div></label>
1107
+ ${lr("icon-cross", "Удалить правило", `data-remove="${c(u.id)}"`)}</div>`).join("")}
543
1108
  <form class="add" data-add>
544
- <select name="method" aria-label="Метод">${Q.map(([a, s]) => `<option value="${a}">${s}</option>`).join("")}</select>
545
- <input name="path" required placeholder="/assets/*" aria-label="Путь после ${d(t.config.apiBase ?? "адреса сайта")}">
546
- <select name="status" aria-label="Код ответа">${Ae.map((a) => `<option${a === 503 ? " selected" : ""}>${a}</option>`).join("")}</select>
547
- <button class="btn primary" type="submit">Добавить</button>
1109
+ ${K("Метод", Vt("method", "Метод", Jt.map(([u, p]) => ({ value: u, label: p })), "", 'name="method"'))}
1110
+ ${K("Код ответа", Vt("status", "Код ответа", za.map((u) => ({ value: String(u), label: String(u) })), "503", 'name="status"'))}
1111
+ ${K(`Путь после ${t.config.apiBase ?? "адреса сайта"}`, `<input class="u-input" name="path" required placeholder="/assets/*" aria-label="Путь после ${i}">`, "", "wide")}
1112
+ ${K(
1113
+ "Тело ответа — JSON или текст (необязательно)",
1114
+ `<textarea class="u-textarea" name="body" rows="3" maxlength="${_e}" spellcheck="false" placeholder='[] или {"items": []}' aria-label="Тело ответа"></textarea>`,
1115
+ '<span class="u-form-field__hint h5" data-body-hint hidden>Это не JSON — ответ уйдёт как простой текст.</span>',
1116
+ "wide"
1117
+ )}
1118
+ ${K("Задержка, мс", Ca("Задержка, мс", `name="delay" min="0" max="${Le}" step="100" placeholder="0"`))}
1119
+ ${F("Добавить", "primary", "", "submit")}
548
1120
  </form>
549
1121
  </div>`;
550
1122
  }
551
- function Ie() {
1123
+ function Oa() {
552
1124
  const t = document.documentElement.getAttribute("data-u-viewport");
553
1125
  return t || (window.matchMedia("(max-width: 576px)").matches ? "mobile" : window.matchMedia("(max-width: 900px)").matches ? "tablet" : "desktop");
554
1126
  }
555
- function qe(t) {
556
- var i, f, u;
557
- const e = document.documentElement, n = getComputedStyle(e).getPropertyValue("--u-unit").trim(), o = t.kit ?? Vt();
558
- let r = "—";
1127
+ const ne = {
1128
+ reduce: { label: "Уменьшенная анимация", hint: "Как при системной настройке «уменьшить движение»" },
1129
+ slow: { label: "Анимации ×5", hint: "Длительности кита в пять раз дольше — рассмотреть движение" },
1130
+ highlight: { label: "Подсветка «не из кита»", hint: "Рамкой — кнопки, поля, ссылки, таблицы, окна, svg и заголовки мимо компонентов кита" }
1131
+ };
1132
+ function qa(t) {
1133
+ const e = ka();
1134
+ if (t === "reduce" && et(t)) {
1135
+ const { blocks: r, disabled: o, blocked: a } = e.reduce;
1136
+ return [
1137
+ `Правил reduce: ${r}`,
1138
+ o ? `выключено no-preference: ${o}` : "",
1139
+ a ? `не прочитано таблиц стилей: ${a} (чужой домен без CORS)` : ""
1140
+ ].filter(Boolean).join(" · ");
1141
+ }
1142
+ if (t === "highlight" && et(t)) {
1143
+ const { total: r, byType: o } = e.highlight;
1144
+ if (!r) return "На странице всё из кита";
1145
+ const a = Object.entries(o).sort((n, i) => i[1] - n[1]).map(([n, i]) => `${n} ${i}`).join(" · ");
1146
+ return `Не из кита: ${r} — ${a}. Нажмите на метку — путь в консоли`;
1147
+ }
1148
+ return ne[t].hint;
1149
+ }
1150
+ function Ia() {
1151
+ return `<div class="group"><div class="group-title h5">Вид</div>${tt.map((t) => sr(ne[t].label, `data-view="${t}" ${et(t) ? "checked" : ""}`, qa(t))).join("")}</div>`;
1152
+ }
1153
+ const Pa = { pointer: "мышь", keyboard: "клавиатура" };
1154
+ function Na(t) {
1155
+ var u, p, l;
1156
+ const e = document.documentElement, r = getComputedStyle(e).getPropertyValue("--u-unit").trim(), o = t.kit ?? Xr();
1157
+ let a = "—";
559
1158
  try {
560
- const p = (f = (i = t.config).user) == null ? void 0 : f.call(i);
561
- p && (r = [p.name, (u = p.roles) != null && u.length ? p.roles.join(", ") : "без ролей"].filter(Boolean).join(" · "));
1159
+ const h = (p = (u = t.config).user) == null ? void 0 : p.call(u);
1160
+ h && (a = [h.name, (l = h.roles) != null && l.length ? h.roles.join(", ") : "без ролей"].filter(Boolean).join(" · "));
562
1161
  } catch {
563
- r = "не удалось прочитать";
1162
+ a = "не удалось прочитать";
564
1163
  }
565
- const a = Tt(t);
566
- return `<dl>${[
567
- ["Ширина", `${window.innerWidth} px · ${Ie()}`],
568
- ["Шкала", `${e.getAttribute("data-u-responsive") ?? "legacy"}${n ? ` · --u-unit ${n}` : ""}`],
1164
+ const n = gr(t), i = [
1165
+ ["Ширина", `${window.innerWidth} px · ${Oa()}`],
1166
+ ["Шкала", `${e.getAttribute("data-u-responsive") ?? "legacy"}${r ? ` · --u-unit ${r}` : ""}`],
569
1167
  ["Кит", o ? `${o.name} ${o.version}` : "—"],
570
1168
  ["Сервис", [t.config.service, t.config.version].filter(Boolean).join(" ")],
571
1169
  ["API", t.config.apiBase ?? "все запросы"],
572
1170
  ["Оболочка ЛК", window.__POWERED_BY_QIANKUN__ ? "да (Qiankun)" : "нет"],
573
- ["Ввод", e.getAttribute("data-input-mode") ?? "—"],
1171
+ ["Ввод", Pa[e.getAttribute("data-input-mode") ?? ""] ?? "—"],
574
1172
  ["Сеть", navigator.onLine ? "онлайн" : "офлайн"],
575
- ["Пользователь", r],
576
- ["Включено", a.length ? a.join("; ") : "ничего"]
577
- ].map(([p, w]) => `<dt>${d(p)}</dt><dd>${d(w)}</dd>`).join("")}</dl>`;
1173
+ ["Пользователь", a],
1174
+ ["Включено", n.length ? n.join("; ") : "ничего"]
1175
+ ];
1176
+ return `${Ia()}<div class="group"><div class="group-title h5">Окружение</div>
1177
+ <dl>${i.map(([h, g]) => `<dt>${c(h)}</dt><dd>${c(g)}</dd>`).join("")}</dl></div>`;
1178
+ }
1179
+ function Xt(t, e, r) {
1180
+ return !t || typeof t.animate != "function" || zo() ? null : t.animate(e, r);
1181
+ }
1182
+ function Ce(t) {
1183
+ Xt(t, [{ opacity: 0, transform: `translateY(${_o}px)` }, { opacity: 1, transform: "none" }], { duration: xt.base, easing: jt.enter });
578
1184
  }
579
1185
  function v() {
580
- if (!c) return;
581
- const t = P();
1186
+ var ue;
1187
+ if (!s) return;
1188
+ const t = it();
582
1189
  if (!t) {
583
- c.innerHTML = "";
1190
+ s.innerHTML = "", S = "", dt = "";
584
1191
  return;
585
1192
  }
586
- const e = m().flatMap(Tt), n = e.length, o = n ? `Dev · ${n === 1 ? e[0] : `${n} ${Re(n, "сбой", "сбоя", "сбоев")}`}` : "Dev", r = m(), a = r.every((g) => ae(g) === "hidden"), s = !a || n > 0, i = r.length > 1 ? `<select data-service aria-label="Сервис">${r.map((g) => `<option value="${d(g.config.service)}"${g === t ? " selected" : ""}>Dev · ${d(g.config.service)}</option>`).join("")}</select>` : `Dev · ${d(t.config.service)}`, f = l.open ? `
587
- <section class="panel${s ? "" : " alone"}" role="region" aria-label="Панель разработки">
588
- <div class="head"><span class="title">${i}</span>
589
- <button class="reset" type="button" data-reset>Сбросить всё</button>
590
- <button class="close" type="button" data-close aria-label="Свернуть панель">×</button></div>
591
- <div class="escape">Без панели: адрес с ?dev=off · открыть и закрыть: Ctrl+Alt+D</div>
592
- <div class="tabs" role="tablist">
593
- <button class="tab" type="button" role="tab" data-tab="faults" aria-selected="${l.tab === "faults"}">Сбои${z(t) ? ` · ${z(t)}` : ""}</button>
594
- <button class="tab" type="button" role="tab" data-tab="requests" aria-selected="${l.tab === "requests"}">Запросы</button>
595
- <button class="tab" type="button" role="tab" data-tab="errors" aria-selected="${l.tab === "errors"}">Ошибки${Z().length ? ` · ${Z().length}` : ""}</button>
596
- <button class="tab" type="button" role="tab" data-tab="view" aria-selected="${l.tab === "view"}">Смотреть</button>
597
- </div>
598
- <div class="body">${l.tab === "faults" ? Oe(t) : l.tab === "requests" ? Mt(t) : l.tab === "errors" ? Ue() : qe(t)}</div>
599
- ${l.hint ? `<div class="note" role="status">${d(l.hint)}</div>` : ""}
1193
+ const e = y().flatMap(gr), r = e.length, o = r ? `Dev · ${r === 1 ? e[0] : `${r} ${Ba(r, "сбой", "сбоя", "сбоев")}`}` : "Dev", a = y(), n = a.every((m) => no(m) === "hidden"), i = !n || r > 0, u = a.length > 1 ? Vt("service", "Сервис", a.map((m) => ({ value: m.config.service, label: `Dev · ${m.config.service}` })), t.config.service, "data-service") : `Dev · ${c(t.config.service)}`, p = Pe().length, l = a.some((m) => m.state.faults.length || m.state.rules.some((_r) => _r.enabled)), h = d.open ? `
1194
+ <section class="panel u-react-size-dense${i ? "" : " alone"}" role="region" aria-label="Панель разработки">
1195
+ <div class="head"><span class="title">${u}</span>
1196
+ ${F("Сбросить всё", "text-danger", "data-reset")}
1197
+ ${lr("icon-cross", "Свернуть панель", "data-close")}</div>
1198
+ <p class="intro h5">Ломает сервис нарочно: ответы API, сеть, падения — чтобы проверить, что видит пользователь. Есть только при локальном запуске.</p>
1199
+ <div class="tabs">${Aa([
1200
+ { id: "faults", title: `Сбои${bt(t) ? ` · ${bt(t)}` : ""}` },
1201
+ { id: "requests", title: "Запросы" },
1202
+ { id: "errors", title: `Ошибки${p ? ` · ${p}` : ""}` },
1203
+ { id: "view", title: "Среда" }
1204
+ ], d.tab)}</div>
1205
+ <div class="body">${d.tab === "faults" ? Ra(t) : d.tab === "requests" ? wr(t) : d.tab === "errors" ? Ka() : Na(t)}</div>
1206
+ ${d.hint ? `<div class="note u-message-small" role="status">${c(d.hint)}</div>` : ""}
600
1207
  <div class="foot">
601
- ${t.config.onRefetch ? '<button class="btn" type="button" data-refetch>Перезапросить данные</button>' : ""}
602
- <button class="btn" type="button" data-reload>Перезагрузить</button>
603
- ${r.some((g) => g.state.faults.length) ? '<button class="btn" type="button" data-share>Ссылка на сбои</button>' : ""}
604
- <button class="btn" type="button" data-launcher="${a ? "visible" : "hidden"}">${a ? "Показывать кнопку" : "Скрыть кнопку"}</button>
1208
+ <div class="actions">
1209
+ ${l ? F("Ссылка на сбои", "primary", "data-share") : ""}
1210
+ ${t.config.onRefetch ? F("Перезапросить данные", "outline", "data-refetch") : ""}
1211
+ ${F("Перезагрузить", "outline", "data-reload")}
1212
+ ${F(n ? "Показывать кнопку" : "Скрыть кнопку", "outline", `data-launcher="${n ? "visible" : "hidden"}"`)}
1213
+ </div>
1214
+ ${l ? '<p class="caption h5">Ссылка открывает страницу с теми же сбоями — приложите её к задаче или отправьте тестировщику.</p>' : ""}
1215
+ <p class="escape h5">Без панели: адрес с ?dev=off · открыть и закрыть: Ctrl+Alt+D</p>
605
1216
  </div>
606
- </section>` : "", u = c.activeElement, p = At(u), w = (u == null ? void 0 : u.dataset.search) !== void 0 ? u.selectionStart : null, It = et ?? We();
607
- et = null;
608
- const qt = [
1217
+ </section>` : "", g = s.activeElement, Dt = mr(g), Z = (g == null ? void 0 : g.dataset.search) !== void 0 ? g.selectionStart : null, Ar = Ct ?? Ja();
1218
+ Ct = null;
1219
+ const $r = [
609
1220
  e.length ? `Включено: ${e.join(", ")}` : "Панель разработки (Ctrl+Alt+D)",
610
- a ? "Кнопка скрыта и видна, пока включены сбои" : ""
611
- ].filter(Boolean).join(". "), zt = s ? `
612
- <button class="pill${n ? " on" : ""}" type="button" data-toggle aria-expanded="${l.open}"
613
- title="${d(qt)}"><span class="logo">${Ce}</span><span class="label">${d(o)}</span></button>` : "", Ft = l.hint && !l.open ? `<div class="hint" role="status">${d(l.hint)}</div>` : "";
614
- if (c.innerHTML = `<style>${Me}</style><div class="root">${f}${zt}${Ft}</div>`, Be(It), p) {
615
- const g = c.querySelector(p);
616
- g == null || g.focus(), g instanceof HTMLInputElement && w !== null && g.setSelectionRange(w, w);
1221
+ n ? "Кнопка скрыта и видна, пока включены сбои" : "",
1222
+ // Режимы «Вид» переживают перезагрузку — напоминание, чтобы медленные анимации не приняли за дефект.
1223
+ tt.some(et) ? `Вид: ${tt.filter(et).map((m) => ne[m].label).join(", ")}` : ""
1224
+ ].filter(Boolean).join(". "), Sr = i ? `
1225
+ <button class="pill${r ? " on" : ""}" type="button" data-toggle aria-expanded="${d.open}"
1226
+ title="${c($r)}"><span class="logo">${Da}</span><span class="label">${c(o)}</span></button>` : "", Lr = d.hint && !d.open ? `<div class="hint" role="status">${c(d.hint)}</div>` : "", ut = d.open ? `${t.config.service}:${d.tab}` : "", ie = ut && ut === S ? ((ue = s.querySelector(".body")) == null ? void 0 : ue.scrollTop) ?? 0 : 0, Tt = d.hint ? `${d.open}:${d.hint}` : "";
1227
+ s.innerHTML = `<style>${Et.css}${La}</style><div class="root">${h}${Sr}${Lr}</div>`;
1228
+ const st = s.querySelector(".body");
1229
+ if (st && ie ? st.scrollTop = ie : st && S && ut !== S && Ce(st), Tt && Tt !== dt && Ce(s.querySelector(".note, .hint")), S = ut, dt = Tt, Ya(Ar), dr(s), _t(), Dt) {
1230
+ const m = s.querySelector(Dt);
1231
+ m == null || m.focus({ preventScroll: !0 }), m instanceof HTMLInputElement && Z !== null && m.setSelectionRange(Z, Z);
617
1232
  }
618
1233
  }
619
- const ze = ["search", "fault", "rule", "tab", "service", "reset", "close", "toggle", "ruleFrom", "clearJournal"];
620
- function At(t) {
1234
+ const ja = ["search", "select", "fault", "rule", "tab", "reset", "close", "toggle", "ruleFrom", "clearJournal", "view"];
1235
+ function mr(t) {
621
1236
  if (!t) return null;
622
1237
  const e = t.getAttribute("name");
623
1238
  if (e && t.closest("[data-add]")) return `[data-add] [name="${e}"]`;
624
- const n = ze.find((a) => t.dataset[a] !== void 0);
625
- if (!n) return null;
626
- const o = t.dataset[n], r = `data-${n.replace(/[A-Z]/g, (a) => `-${a.toLowerCase()}`)}`;
627
- return o ? `[${r}="${o.replace(/["\\]/g, "\\$&")}"]` : `[${r}]`;
628
- }
629
- const Ct = ["method", "path", "status"];
630
- let et = null;
631
- const Fe = { network: "сеть", abort: "отмена", pending: "…" };
632
- function Mt(t) {
633
- const e = nt().filter((n) => n.service === t.config.service);
634
- return e.length ? `<div class="requests-head"><span>Последние ${e.length}, новые сверху</span>
635
- <button class="btn" type="button" data-clear-journal>Очистить</button></div>
636
- <div class="requests">${e.map((n) => {
637
- const o = typeof n.status == "number" ? String(n.status) : Fe[n.status], r = n.status === "network" || typeof n.status == "number" && n.status >= 400, a = [n.duration === null ? "" : `${n.duration} мс`, n.faked ? "подменён панелью" : ""].filter(Boolean).join(" · ");
638
- return `<div class="req"><span>${d(n.method)}</span>
639
- <span class="path">${d(n.path)}${a ? `<small>${d(a)}</small>` : ""}</span>
640
- <span class="status${r ? " bad" : ""}">${d(o)}</span>
641
- <button class="btn" type="button" data-rule-from="${n.id}" title="Ответ на этот адрес — в «Ответах сервера»">Правило</button></div>`;
642
- }).join("")}</div>` : '<div class="empty">Запросов к API пока не было. Журнал помнит последние 50 и очищается при перезагрузке.</div>';
643
- }
644
- const He = {
1239
+ const r = ja.find((n) => t.dataset[n] !== void 0);
1240
+ if (!r) return null;
1241
+ const o = t.dataset[r], a = `data-${r.replace(/[A-Z]/g, (n) => `-${n.toLowerCase()}`)}`;
1242
+ return o ? `[${a}="${o.replace(/["\\]/g, "\\$&")}"]` : `[${a}]`;
1243
+ }
1244
+ const xr = ["method", "path", "status", "body", "delay"];
1245
+ let Ct = null;
1246
+ const Ua = { network: "сеть", abort: "отмена", pending: "…" };
1247
+ function wr(t) {
1248
+ const e = Qt().filter((r) => r.service === t.config.service);
1249
+ return e.length ? `<div class="list-head h5"><span>Последние ${e.length}, новые сверху</span>${F("Очистить", "text", "data-clear-journal")}</div>
1250
+ <p class="caption h5">«Правило» — подменить ответ на этот адрес: форма в «Ответах сервера» откроется с методом и путём.</p>
1251
+ <div class="requests">${e.map((r) => {
1252
+ const o = typeof r.status == "number" ? String(r.status) : Ua[r.status], a = r.status === "network" || typeof r.status == "number" && r.status >= 400, n = [r.duration === null ? "" : `${r.duration} мс`, r.faked ? "подменён панелью" : ""].filter(Boolean).join(" · ");
1253
+ return `<div class="req"><span>${c(r.method)}</span>
1254
+ <span class="path"><span class="p" title="${c(r.path)}">${c(r.path).replace(/\//g, "/<wbr>")}</span>${n ? `<small>${c(n)}</small>` : ""}</span>
1255
+ <span class="status u-status u-status-${a ? "danger bad" : r.status === "pending" ? "neutral" : "success"}">${c(o)}</span>
1256
+ ${F("Правило", "text", `data-rule-from="${r.id}" title="Ответ на этот адрес — в «Ответах сервера»"`)}</div>`;
1257
+ }).join("")}</div>` : '<p class="empty tt">Запросов к API пока не было. Откройте экран сервиса или нажмите «Перезапросить данные» — запросы появятся здесь. Журнал помнит последние 50 и очищается при перезагрузке.</p>';
1258
+ }
1259
+ const Ha = {
645
1260
  screen: "Заглушка",
646
1261
  fail: "Уведомление об ошибке",
647
1262
  warning: "Предупреждение",
648
1263
  offline: "Нет связи"
649
- }, je = (t) => He[t.kind === "notification" ? t.variant ?? "fail" : t.kind];
650
- function Ue() {
651
- const t = Z();
652
- return t.length ? `<div class="requests-head"><span>Последние ${t.length}, новые сверху</span>
653
- <button class="btn" type="button" data-clear-shown>Очистить</button></div>
1264
+ }, Za = (t) => Ha[t.kind === "notification" ? t.variant ?? "fail" : t.kind];
1265
+ function Ka() {
1266
+ const t = Pe();
1267
+ return t.length ? `<div class="list-head h5"><span>Последние ${t.length}, новые сверху</span>${F("Очистить", "text", "data-clear-shown")}</div>
654
1268
  <div>${t.map((e) => `<div class="shown">
655
- <div class="shown-head"><span class="kind${e.variant === "warning" ? " warning" : ""}">${d(je(e))}${e.code ? ` · ${d(e.code)}` : ""}</span>
656
- <time>${d(new Date(e.at).toLocaleTimeString("ru-RU"))}</time></div>
657
- <div class="shown-title">${d(e.title)}</div>
658
- ${e.text ? `<small>${d(e.text)}</small>` : ""}
659
- <div class="cause">${e.cause ? `← ${d(e.cause)}` : "<small>Неудачных запросов к API перед показом не было</small>"}</div>
660
- </div>`).join("")}</div>` : '<div class="empty">Ошибок пользователю пока не показывали. Здесь появятся заглушки, уведомления об ошибке и полоса «Нет связи» — с причиной из запросов к API.</div>';
661
- }
662
- function Ne(t) {
1269
+ <div class="shown-head"><span class="kind${e.variant === "warning" ? " warning" : ""}">${c(Za(e))}${e.code ? ` · ${c(e.code)}` : ""}</span>
1270
+ <time>${c(new Date(e.at).toLocaleTimeString("ru-RU"))}</time></div>
1271
+ <div class="shown-title">${c(e.title)}</div>
1272
+ ${e.text ? `<small>${c(e.text)}</small>` : ""}
1273
+ <div class="cause">${e.cause ? `← ${c(e.cause)}` : "<small>Неудачных запросов к API перед показом не было</small>"}</div>
1274
+ </div>`).join("")}</div>` : '<p class="empty tt">Ошибок пользователю пока не показывали. Включите сбой на вкладке «Сбои» и повторите действие — здесь появится, что увидел пользователь (заглушка, уведомление, «Нет связи»), и какой запрос к API к этому привёл.</p>';
1275
+ }
1276
+ function Va(t) {
663
1277
  var o;
664
- const e = nt().find((r) => String(r.id) === String(t));
1278
+ const e = Qt().find((a) => String(a.id) === String(t));
665
1279
  if (!e) return;
666
- et = { method: Q.some(([r]) => r === e.method) ? e.method : "", path: e.path, status: "503" }, l.tab = "faults", l.search = "", v(), (o = c == null ? void 0 : c.querySelector('[data-add] [name="status"]')) == null || o.focus();
667
- }
668
- function _e() {
669
- const t = [...new Set(m().flatMap((i) => i.state.faults))], e = new URL(window.location.href);
670
- e.searchParams.set("dev", t.join(","));
671
- const n = e.href.replace(/%2C/gi, ","), r = m().some((i) => i.state.rules.some((f) => f.enabled)) ? " Свои правила «адрес → код» в неё не входят." : "", a = () => {
672
- C(`Ссылка скопирована.${r}`), v();
673
- }, s = () => {
674
- C(`Ссылка: ${n}${r}`), v();
1280
+ Ct = { method: Jt.some(([a]) => a === e.method) ? e.method : "", path: e.path, status: "503", body: "", delay: "" }, d.tab = "faults", d.search = "", v(), (o = s == null ? void 0 : s.querySelector('[data-add] [data-select="status"]')) == null || o.focus();
1281
+ }
1282
+ function Wa() {
1283
+ const t = y(), e = [...new Set(t.flatMap((h) => h.state.faults))], r = t.flatMap((h) => h.state.rules.filter((g) => g.enabled).map(({ id: g, enabled: Dt, ...Z }) => ({ service: h.config.service, rule: Z }))), o = new URL(window.location.href);
1284
+ e.length ? o.searchParams.set("dev", e.join(",")) : o.searchParams.delete("dev");
1285
+ const { value: a, droppedBodies: n } = Ur(r);
1286
+ r.length ? o.searchParams.set(ft, a) : o.searchParams.delete(ft);
1287
+ const i = o.href.replace(/%2C/gi, ","), u = n ? ` Тело ответа длиннее ${ze} символов в ссылку не вошло (${n}) — у получателя такое правило отдаст ответ без тела.` : "", p = () => {
1288
+ C(`Ссылка скопирована.${u}`), v();
1289
+ }, l = () => {
1290
+ C(`Ссылка: ${i}${u}`), v();
675
1291
  };
676
1292
  try {
677
- navigator.clipboard.writeText(n).then(a, s);
1293
+ navigator.clipboard.writeText(i).then(p, l);
678
1294
  } catch {
679
- s();
1295
+ l();
680
1296
  }
681
1297
  }
682
- function We() {
683
- const t = c == null ? void 0 : c.querySelector("[data-add]");
684
- return t ? Object.fromEntries(Ct.map((e) => {
685
- var n;
686
- return [e, ((n = t.elements.namedItem(e)) == null ? void 0 : n.value) ?? ""];
1298
+ function _t() {
1299
+ const t = s == null ? void 0 : s.querySelector("[data-add]");
1300
+ if (!t) return;
1301
+ const e = t.elements.namedItem("body"), r = t.elements.namedItem("status"), o = t.querySelector("[data-body-hint]");
1302
+ if (!e) return;
1303
+ const a = Number(r == null ? void 0 : r.value) === 204;
1304
+ e.disabled = a, o && (o.hidden = a || !e.value.trim() || De(e.value));
1305
+ }
1306
+ function Ja() {
1307
+ const t = s == null ? void 0 : s.querySelector("[data-add]");
1308
+ return t ? Object.fromEntries(xr.map((e) => {
1309
+ var r;
1310
+ return [e, ((r = t.elements.namedItem(e)) == null ? void 0 : r.value) ?? ""];
687
1311
  })) : null;
688
1312
  }
689
- function Be(t) {
690
- const e = c == null ? void 0 : c.querySelector("[data-add]");
691
- !e || !t || Ct.forEach((n) => {
692
- const o = e.elements.namedItem(n);
693
- o && (o.value = t[n]);
1313
+ function Ya(t) {
1314
+ const e = s == null ? void 0 : s.querySelector("[data-add]");
1315
+ !e || !t || xr.forEach((r) => {
1316
+ const o = e.elements.namedItem(r);
1317
+ o && (o.value = t[r] ?? "");
694
1318
  });
695
1319
  }
696
- function Ke(t) {
1320
+ function Xa(t) {
697
1321
  if (!t) {
698
- C(""), at("visible");
1322
+ C(""), ce("visible");
699
1323
  return;
700
1324
  }
701
- l.open = !1;
702
- const e = m().some((n) => z(n) > 0);
703
- C(`Кнопка Dev скрыта${e ? " и видна, пока включены сбои" : ""}. Панель: Ctrl+Alt+D`), at("hidden");
1325
+ d.open = !1;
1326
+ const e = y().some((r) => bt(r) > 0);
1327
+ C(`Кнопка Dev скрыта${e ? " и видна, пока включены сбои" : ""}. Панель: Ctrl+Alt+D`), ce("hidden");
704
1328
  }
705
1329
  function C(t) {
706
- clearTimeout(tt), l.hint = t, t && (tt = setTimeout(() => {
707
- l.hint = "", v();
708
- }, De));
709
- }
710
- function U(t = !l.open) {
711
- var e, n;
712
- t && C(""), l.open = t, v(), t ? (e = c == null ? void 0 : c.querySelector("[data-search], [data-tab]")) == null || e.focus() : (n = c == null ? void 0 : c.querySelector("[data-toggle]")) == null || n.focus();
713
- }
714
- function Je(t) {
715
- var o, r, a, s;
716
- const e = t.target, n = P();
717
- if (n)
718
- if (e.closest("[data-toggle]")) U();
719
- else if (e.closest("[data-close]")) U(!1);
720
- else if (e.closest("[data-reset]"))
721
- St(), (r = (o = n.config).onRefetch) == null || r.call(o);
722
- else if (e.closest("[data-reload]")) window.location.reload();
723
- else if (e.closest("[data-rule-from]")) Ne(Number(e.closest("[data-rule-from]").dataset.ruleFrom));
724
- else if (e.closest("[data-clear-journal]"))
725
- ft(), v();
726
- else if (e.closest("[data-clear-shown]")) vt();
727
- else if (e.closest("[data-share]")) _e();
728
- else if (e.closest("[data-launcher]")) Ke(e.closest("[data-launcher]").dataset.launcher === "hidden");
729
- else if (e.closest("[data-refetch]")) (s = (a = n.config).onRefetch) == null || s.call(a);
730
- else if (e.closest("[data-tab]")) {
731
- const i = e.closest("[data-tab]").dataset.tab;
732
- l.tab = i === "view" || i === "requests" || i === "errors" ? i : "faults", v();
733
- } else e.closest("[data-remove]") && ne(n, e.closest("[data-remove]").dataset.remove);
734
- }
735
- function Xe(t) {
736
- const e = t.target, n = P();
737
- if (n)
1330
+ clearTimeout(Yt), d.hint = t, t && (Yt = setTimeout(() => {
1331
+ d.hint = "", v();
1332
+ }, Ta));
1333
+ }
1334
+ function Ft(t = !d.open || w !== null) {
1335
+ var o, a;
1336
+ if (w == null || w.cancel(), w = null, t) {
1337
+ C("");
1338
+ const n = !d.open;
1339
+ d.open = !0, v(), n && Xt(s == null ? void 0 : s.querySelector(".panel"), [{ opacity: 0, transform: "translateY(8px)" }, { opacity: 1, transform: "none" }], { duration: xt.base, easing: jt.enter }), (o = s == null ? void 0 : s.querySelector("[data-search], [data-tab]")) == null || o.focus();
1340
+ return;
1341
+ }
1342
+ C("");
1343
+ const e = () => {
1344
+ w = null, d.open = !1, v();
1345
+ };
1346
+ (a = s == null ? void 0 : s.querySelector("[data-toggle]")) == null || a.focus();
1347
+ const r = d.open ? Xt(s == null ? void 0 : s.querySelector(".panel"), [{ opacity: 1, transform: "none" }, { opacity: 0, transform: "translateY(8px)" }], { duration: xt.fast, easing: jt.exit, fill: "forwards" }) : null;
1348
+ if (!r) {
1349
+ e();
1350
+ return;
1351
+ }
1352
+ w = r, r.onfinish = e;
1353
+ }
1354
+ function Ga(t) {
1355
+ var i, u, p;
1356
+ const e = t.target, r = it();
1357
+ if (!r || !s) return;
1358
+ const o = e.closest(".u-selectbox-option"), a = e.closest("[data-select]");
1359
+ if (o) {
1360
+ hr(o);
1361
+ return;
1362
+ }
1363
+ const n = Wt(s);
1364
+ if (n && n !== a && z(n, !1), a) z(a, n !== a);
1365
+ else if (e.closest("[data-step]")) Fa(e.closest("[data-step]"));
1366
+ else if (e.closest("[data-search-clear]"))
1367
+ d.search = "", v(), (i = s.querySelector("[data-search]")) == null || i.focus();
1368
+ else if (e.closest("[data-toggle]")) Ft();
1369
+ else if (e.closest("[data-close]")) Ft(!1);
1370
+ else if (e.closest("[data-reset]")) Qa();
1371
+ else if (e.closest("[data-reload]")) window.location.reload();
1372
+ else if (e.closest("[data-rule-from]")) Va(Number(e.closest("[data-rule-from]").dataset.ruleFrom));
1373
+ else if (e.closest("[data-clear-journal]"))
1374
+ Se(), v();
1375
+ else if (e.closest("[data-clear-shown]")) Ne();
1376
+ else if (e.closest("[data-share]")) Wa();
1377
+ else if (e.closest("[data-launcher]")) Xa(e.closest("[data-launcher]").dataset.launcher === "hidden");
1378
+ else if (e.closest("[data-refetch]")) (p = (u = r.config).onRefetch) == null || p.call(u);
1379
+ else if (e.closest("[data-tab]")) {
1380
+ const l = e.closest("[data-tab]").dataset.tab;
1381
+ d.tab = l === "view" || l === "requests" || l === "errors" ? l : "faults", v();
1382
+ } else e.closest("[data-remove]") && oo(r, e.closest("[data-remove]").dataset.remove);
1383
+ }
1384
+ function Qa() {
1385
+ var e;
1386
+ tt.forEach((r) => ur(r, !1));
1387
+ const t = s == null ? void 0 : s.querySelector("[data-add]");
1388
+ t == null || t.reset(), t && pr(t), Ct = null, C(""), Object.assign(d, ae, { open: !0 }), S = "", io(), Je(), v(), (e = s == null ? void 0 : s.querySelector("[data-search], [data-tab]")) == null || e.focus(), tn();
1389
+ }
1390
+ function tn() {
1391
+ y().forEach((t) => {
1392
+ var e, r;
1393
+ try {
1394
+ (r = (e = t.config).onRefetch) == null || r.call(e);
1395
+ } catch {
1396
+ }
1397
+ });
1398
+ }
1399
+ function en(t) {
1400
+ const e = t.target, r = it();
1401
+ if (r)
738
1402
  if (e.dataset.fault) {
739
1403
  const o = e.checked;
740
- Qt(n, e.dataset.fault, o), e.dataset.fault === "offline" && ot(!o);
741
- } else e.dataset.rule ? ee(n, e.dataset.rule, e.checked) : e.dataset.service !== void 0 && (l.service = e.value, v());
1404
+ C(o ? Gt(r, e.dataset.fault) : ""), to(r, e.dataset.fault, o), e.dataset.fault === "offline" && te(!o);
1405
+ } else if (e.dataset.view)
1406
+ ur(e.dataset.view, e.checked), v();
1407
+ else if (e.dataset.rule) {
1408
+ const o = e.checked;
1409
+ C(o ? Gt(r, "rule") : ""), ro(r, e.dataset.rule, o);
1410
+ } else e.dataset.service !== void 0 ? (d.service = e.value, v()) : e.getAttribute("name") === "status" && e.closest("[data-add]") && _t();
1411
+ }
1412
+ function Gt(t, e) {
1413
+ return e === "offline" ? "" : e in br ? "Сбой включён. Если экран не изменился — нажмите «Перезагрузить»." : t.config.onRefetch ? "Сбой включён — сработает на следующем запросе к API: нажмите «Перезапросить данные» или повторите действие на странице." : "Сбой включён — сработает на следующем запросе к API: повторите действие на странице или нажмите «Перезагрузить».";
742
1414
  }
743
- function Ve(t) {
1415
+ function rn(t) {
744
1416
  const e = t.target;
745
- e.dataset.search !== void 0 && (l.search = e.value, v());
1417
+ if (e.getAttribute("name") === "body" && e.closest("[data-add]")) {
1418
+ _t();
1419
+ return;
1420
+ }
1421
+ e.dataset.search !== void 0 && (d.search = e.value, v());
746
1422
  }
747
- function Ze(t) {
1423
+ function on(t) {
748
1424
  const e = t.target;
749
1425
  if (e.dataset.add === void 0) return;
750
1426
  t.preventDefault();
751
- const n = P(), o = new FormData(e), r = String(o.get("path") ?? "").trim();
752
- !n || !r || (e.reset(), te(n, {
1427
+ const r = it(), o = new FormData(e), a = String(o.get("path") ?? "").trim();
1428
+ if (!r || !a) return;
1429
+ const n = Number(o.get("status")) || 500, i = String(o.get("body") ?? ""), u = Te(Number(o.get("delay")));
1430
+ e.reset(), pr(e), _t(), C(Gt(r, "rule")), eo(r, {
753
1431
  method: String(o.get("method") ?? "") || void 0,
754
- path: r.startsWith("/") ? r : `/${r}`,
755
- status: Number(o.get("status")) || 500,
756
- html: Number(o.get("status")) === 502 || void 0
757
- }));
758
- }
759
- function Dt(t) {
760
- t.ctrlKey && t.altKey && t.code === "KeyD" ? (t.preventDefault(), U()) : t.key === "Escape" && l.open && h && t.composedPath().includes(h) && (t.preventDefault(), t.stopPropagation(), U(!1));
761
- }
762
- function Ge() {
763
- if (h || typeof document > "u") return;
764
- h = document.createElement("div"), h.id = "urfu-ui-kit-dev", h.setAttribute("data-urfu-ui-kit-dev", ""), c = h.attachShadow({ mode: "open" }), c.addEventListener("click", Je), c.addEventListener("change", Xe), c.addEventListener("input", Ve), c.addEventListener("submit", Ze), b = document.defaultView ?? window, b.addEventListener("keydown", Dt, !0), dt(), k = new MutationObserver((o) => {
765
- (!(h != null && h.isConnected) || o.some((r) => r.type === "attributes")) && dt();
766
- }), k.observe(document.documentElement, { childList: !0, subtree: !0, attributes: !0, attributeFilter: ["open"] }), l.open = m().some((o) => z(o) > 0);
767
- const t = gt(v), e = Nt(Pt);
768
- c.addEventListener("pointerdown", Qe), b.addEventListener("pointerup", N, !0), b.addEventListener("pointercancel", N, !0);
769
- const n = pe(() => {
770
- l.open && v();
1432
+ path: a.startsWith("/") ? a : `/${a}`,
1433
+ status: n,
1434
+ // У 204 тела нет; пустое поле — ответ по умолчанию (JSON с кодом, у 502 — HTML шлюза).
1435
+ ...n !== 204 && i.trim() ? { body: i } : {},
1436
+ ...n === 502 && !i.trim() ? { html: !0 } : {},
1437
+ ...u ? { delay: u } : {}
771
1438
  });
772
- de(), S = () => {
773
- t(), e(), n(), fe();
1439
+ }
1440
+ function yr(t) {
1441
+ if (t.ctrlKey && t.altKey && t.code === "KeyD")
1442
+ t.preventDefault(), Ft();
1443
+ else if (t.key === "Escape" && s && f && t.composedPath().includes(f) && Wt(s)) {
1444
+ const e = Wt(s);
1445
+ t.preventDefault(), t.stopPropagation(), z(e, !1), e.focus();
1446
+ } else t.key === "Escape" && d.open && f && t.composedPath().includes(f) && (t.preventDefault(), t.stopPropagation(), Ft(!1));
1447
+ }
1448
+ function an() {
1449
+ if (f || typeof document > "u") return;
1450
+ f = document.createElement("div"), f.id = "urfu-ui-kit-dev", f.setAttribute("data-urfu-ui-kit-dev", ""), s = f.attachShadow({ mode: "open" }), s.addEventListener("click", Ga), s.addEventListener("change", en), s.addEventListener("input", rn), s.addEventListener("submit", on), s.addEventListener("keydown", nn), b = document.defaultView ?? window, b.addEventListener("keydown", yr, !0), b.addEventListener("pointerdown", kr, !0), $e(), Fe(), O = new MutationObserver((o) => {
1451
+ (!(f != null && f.isConnected) || o.some((a) => a.type === "attributes")) && $e(), o.some((a) => a.target === document.documentElement && Et.hostAttrs.includes(a.attributeName ?? "")) && Fe();
1452
+ }), O.observe(document.documentElement, { childList: !0, subtree: !0, attributes: !0, attributeFilter: ["open", ...Et.hostAttrs] }), Ae(), q = new MutationObserver(Ae), q.observe(document.documentElement, { attributes: !0, attributeFilter: ["style"] }), d.open = y().some((o) => bt(o) > 0);
1453
+ const t = Ie(v), e = Ir(Er);
1454
+ s.addEventListener("pointerdown", ln), b.addEventListener("pointerup", At, !0), b.addEventListener("pointercancel", At, !0);
1455
+ const r = vo(() => {
1456
+ d.open && v();
1457
+ });
1458
+ ho(), wa(() => {
1459
+ d.open && d.tab === "view" && v();
1460
+ }), V = () => {
1461
+ t(), e(), r(), bo();
774
1462
  }, v();
775
1463
  }
776
- function Ye() {
1464
+ function nn(t) {
1465
+ const e = t.target.closest("[data-select]");
1466
+ e && Sa(t, e);
1467
+ }
1468
+ function kr(t) {
1469
+ s && f && !t.composedPath().includes(f) && $a(s);
1470
+ }
1471
+ function Fe() {
1472
+ Et.hostAttrs.forEach((t) => {
1473
+ const e = document.documentElement.getAttribute(t);
1474
+ e === null ? f == null || f.removeAttribute(t) : f == null || f.setAttribute(t, e);
1475
+ });
1476
+ }
1477
+ const un = ["--u-unit", "--u-responsive-scale"];
1478
+ function Ae() {
1479
+ un.forEach((t) => {
1480
+ const e = document.documentElement.style.getPropertyValue(t);
1481
+ e ? f == null || f.style.setProperty(t, e) : f == null || f.style.removeProperty(t);
1482
+ });
1483
+ }
1484
+ function sn() {
777
1485
  try {
778
1486
  const t = document.querySelectorAll("dialog:modal");
779
1487
  return t[t.length - 1] ?? null;
@@ -781,94 +1489,108 @@ function Ye() {
781
1489
  return null;
782
1490
  }
783
1491
  }
784
- function dt() {
785
- if (!h) return;
786
- const t = Ye() ?? document.documentElement;
787
- h.parentNode !== t && t.appendChild(h);
1492
+ function $e() {
1493
+ if (!f) return;
1494
+ const t = sn() ?? document.documentElement;
1495
+ f.parentNode !== t && t.appendChild(f);
788
1496
  }
789
- function Pt() {
790
- var r;
791
- if (!l.open || l.tab !== "requests") {
792
- E = !1;
1497
+ function Er() {
1498
+ var a;
1499
+ if (!d.open || d.tab !== "requests") {
1500
+ Y = !1;
793
1501
  return;
794
1502
  }
795
- if (A) {
796
- E = !0;
1503
+ if (rt) {
1504
+ Y = !0;
797
1505
  return;
798
1506
  }
799
- E = !1;
800
- const t = c == null ? void 0 : c.querySelector(".body"), e = P();
801
- if (!c || !t || !e) {
1507
+ Y = !1;
1508
+ const t = s == null ? void 0 : s.querySelector(".body"), e = it();
1509
+ if (!s || !t || !e) {
802
1510
  v();
803
1511
  return;
804
1512
  }
805
- const n = c.activeElement, o = n && t.contains(n) ? At(n) : null;
806
- t.innerHTML = Mt(e), o && ((r = t.querySelector(o)) == null || r.focus());
1513
+ const r = s.activeElement, o = r && t.contains(r) ? mr(r) : null;
1514
+ t.innerHTML = wr(e), o && ((a = t.querySelector(o)) == null || a.focus({ preventScroll: !0 }));
807
1515
  }
808
- function Qe() {
809
- A = !0;
1516
+ function ln() {
1517
+ rt = !0;
810
1518
  }
811
- function N() {
812
- A && (A = !1, E && setTimeout(Pt, 0));
1519
+ function At() {
1520
+ rt && (rt = !1, Y && setTimeout(Er, 0));
813
1521
  }
814
- function tn() {
815
- S == null || S(), S = null, k == null || k.disconnect(), k = null, b == null || b.removeEventListener("keydown", Dt, !0), b == null || b.removeEventListener("pointerup", N, !0), b == null || b.removeEventListener("pointercancel", N, !0), b = null, A = !1, E = !1, clearTimeout(tt), h == null || h.remove(), h = null, c = null, Object.assign(l, Et);
1522
+ function cn() {
1523
+ V == null || V(), V = null, ya(), O == null || O.disconnect(), O = null, q == null || q.disconnect(), q = null, b == null || b.removeEventListener("keydown", yr, !0), b == null || b.removeEventListener("pointerdown", kr, !0), b == null || b.removeEventListener("pointerup", At, !0), b == null || b.removeEventListener("pointercancel", At, !0), b = null, rt = !1, Y = !1, w == null || w.cancel(), w = null, S = "", dt = "", clearTimeout(Yt), f == null || f.remove(), f = null, s = null, Object.assign(d, ae);
816
1524
  }
817
- const Rt = /* @__PURE__ */ Symbol.for("urfu-ui-kit.dev-panel"), M = {
1525
+ const Cr = /* @__PURE__ */ Symbol.for("urfu-ui-kit.dev-panel");
1526
+ let T = null;
1527
+ const ot = {
818
1528
  version: 1,
819
- mount(t, e, n) {
820
- return Wt(), Xt(e), Zt(t, e).state.faults.includes("offline") && ot(!1), ye(n), Ge(), () => {
821
- Gt(t.service), m().length || tn();
1529
+ mount(t, e, r) {
1530
+ return Kr(), Yr(e), Gr(t, e).state.faults.includes("offline") && te(!1), Fo(r), an(), T ?? (T = Rr()), () => {
1531
+ Qr(t.service), !y().length && (cn(), T == null || T(), T = null);
822
1532
  };
823
1533
  },
824
1534
  isFault: (t, e) => {
825
- var n;
826
- return ((n = Yt(e)) == null ? void 0 : n.state.faults.includes(t)) ?? !1;
1535
+ var r;
1536
+ return ((r = le(e)) == null ? void 0 : r.state.faults.includes(t)) ?? !1;
827
1537
  },
828
- subscribe: gt,
829
- reset: St
830
- }, Ot = () => typeof document > "u" ? null : document.defaultView;
831
- function B() {
1538
+ subscribe: Ie,
1539
+ reset: Je,
1540
+ diagnostics() {
1541
+ var r, o, a;
1542
+ const t = le();
1543
+ if (!t) return null;
1544
+ let e;
1545
+ try {
1546
+ e = (a = (o = (r = t.config).user) == null ? void 0 : o.call(r)) == null ? void 0 : a.roles;
1547
+ } catch {
1548
+ e = void 0;
1549
+ }
1550
+ return { requests: Br(), roles: e };
1551
+ }
1552
+ }, Fr = () => typeof document > "u" ? null : document.defaultView;
1553
+ function zt() {
832
1554
  var e;
833
- const t = (e = Ot()) == null ? void 0 : e[Rt];
1555
+ const t = (e = Fr()) == null ? void 0 : e[Cr];
834
1556
  return t && typeof t.version == "number" && t.version >= 1 ? t : null;
835
1557
  }
836
- function en() {
837
- const t = B();
1558
+ function dn() {
1559
+ const t = zt();
838
1560
  if (t) return t;
839
- const e = Ot();
840
- return e && (e[Rt] = M), M;
1561
+ const e = Fr();
1562
+ return e && (e[Cr] = ot), ot;
841
1563
  }
842
- function nn(t, e) {
1564
+ function pn(t, e) {
843
1565
  return typeof window > "u" ? () => {
844
- } : en().mount(t, e, window);
1566
+ } : dn().mount(t, e, window);
845
1567
  }
846
- function on(t, e) {
847
- return (B() ?? M).isFault(t, e);
1568
+ function fn(t, e) {
1569
+ return (zt() ?? ot).isFault(t, e);
848
1570
  }
849
- function an(t) {
850
- return (B() ?? M).subscribe(t);
1571
+ function hn(t) {
1572
+ return (zt() ?? ot).subscribe(t);
851
1573
  }
852
- function cn() {
853
- (B() ?? M).reset();
1574
+ function mn() {
1575
+ (zt() ?? ot).reset();
854
1576
  }
855
- const rn = () => "2.1.5";
856
- function un(t) {
857
- return nn(t, { name: "urfu-ui-kit-react", version: rn() });
1577
+ const bn = () => "2.1.7-next.0";
1578
+ function xn(t) {
1579
+ return pn(t, { name: "urfu-ui-kit-react", version: bn() });
858
1580
  }
859
- function sn(t, e) {
860
- return Ht(an, () => on(t, e), () => !1);
1581
+ function vn(t, e) {
1582
+ return zr(hn, () => fn(t, e), () => !1);
861
1583
  }
862
- function dn({ scope: t, service: e }) {
863
- if (sn(t === "app" ? "crashApp" : "crashPage", e)) throw new Error(`Сбой из dev-панели: падение ${t === "app" ? "приложения" : "страницы"}`);
1584
+ function wn({ scope: t, service: e }) {
1585
+ if (vn(t === "app" ? "crashApp" : "crashPage", e)) throw new Error(`Сбой из dev-панели: падение ${t === "app" ? "приложения" : "страницы"}`);
864
1586
  return null;
865
1587
  }
866
1588
  export {
867
- dn as DevCrashProbe,
868
- on as isDevFault,
869
- ge as matchPath,
870
- un as mountDevPanel,
871
- cn as resetDevFaults,
872
- an as subscribeDevFaults,
873
- sn as useDevFault
1589
+ wn as DevCrashProbe,
1590
+ fn as isDevFault,
1591
+ xo as matchPath,
1592
+ xn as mountDevPanel,
1593
+ mn as resetDevFaults,
1594
+ hn as subscribeDevFaults,
1595
+ vn as useDevFault
874
1596
  };