urfu-ui-kit-react 2.1.6 → 2.1.7-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/components/Modal/useModalTitleClearance.js +5 -5
  2. package/dist/components/Multiselect/Multiselect.js +1 -1
  3. package/dist/components/StickyActionBar/StickyActionBar.d.ts.map +1 -1
  4. package/dist/components/StickyActionBar/StickyActionBar.js +45 -58
  5. package/dist/components/Table/Filter/FilterStringBox.d.ts.map +1 -1
  6. package/dist/components/Table/Filter/FilterStringBox.js +45 -40
  7. package/dist/components/Table/Filter/filterLoading.d.ts +4 -1
  8. package/dist/components/Table/Filter/filterLoading.d.ts.map +1 -1
  9. package/dist/components/Table/Filter/filterLoading.js +6 -2
  10. package/dist/components/Table/Filter/useServerFilterOptions.d.ts +4 -1
  11. package/dist/components/Table/Filter/useServerFilterOptions.d.ts.map +1 -1
  12. package/dist/components/Table/Filter/useServerFilterOptions.js +28 -25
  13. package/dist/components/Table/Table.dataPipeline.js +37 -37
  14. package/dist/components/Table/Table.filterTypes.d.ts +5 -0
  15. package/dist/components/Table/Table.filterTypes.d.ts.map +1 -1
  16. package/dist/components/Table/Table.js +13 -13
  17. package/dist/components/Table/useTableVirtualization.js +20 -20
  18. package/dist/components/Tabs/useTabsOverflow.js +24 -24
  19. package/dist/components/Tooltip/Tooltip.js +7 -7
  20. package/dist/dev/index.js +3 -4
  21. package/dist/dev/types/vanilla/src/dev/panelStyles.d.ts +1 -1
  22. package/dist/shared/kitCopy.js +1 -1
  23. package/dist/style-no-fonts.css +1 -1
  24. package/dist/style.css +1 -1
  25. package/dist/style.layer.css +1 -1
  26. package/dist/style.shell.css +1 -1
  27. package/dist/utils/describeError.d.ts.map +1 -1
  28. package/dist/utils/inputMode.d.ts +5 -0
  29. package/dist/utils/inputMode.d.ts.map +1 -1
  30. package/dist/vanilla/core/dateMask.js +6 -6
  31. package/dist/vanilla/core/describeError.js +38 -38
  32. package/dist/vanilla/core/inputMode.js +18 -11
  33. package/dist/vanilla/core/kitRegistry.js +4 -4
  34. package/dist/vanilla/core/tabsScroll.js +5 -5
  35. package/package.json +1 -1
  36. package/dist/shared/devLauncherOffset.d.ts +0 -8
  37. package/dist/shared/devLauncherOffset.d.ts.map +0 -1
  38. package/dist/vanilla/core/devLauncherOffset.js +0 -20
@@ -23,15 +23,15 @@ import { useMobileFilterColumns$u as wr } from "./useMobileFilterColumns.js";
23
23
  import { nextCardMode$u as xr, getStickyLeft$u as Fr } from "./Table.helpers.js";
24
24
  const Or = (i) => i.map((T, y) => ({ ...T, tableData: { number: y + 1 } })), Wr = (i) => {
25
25
  if (typeof i == "number") return i > 0 ? i : void 0;
26
- if (typeof i == "string" && /^\d+(\.\d+)?(px)?$/.test(i.trim())) return parseFloat(i);
26
+ if (typeof i == "string" && /^\d+(\.\d+)?(px)?$/.test(i.trim())) return Number.parseFloat(i);
27
27
  }, Pr = ({
28
28
  data: i,
29
29
  columns: T,
30
30
  borders: y = "horizontal",
31
31
  striped: Me,
32
32
  linesNotActive: Te,
33
- fixedHeader: ze,
34
- headerBorders: Ne,
33
+ fixedHeader: Ne,
34
+ headerBorders: ze,
35
35
  tdStyle: Ve,
36
36
  thStyle: je,
37
37
  cellStyle: G,
@@ -39,7 +39,7 @@ const Or = (i) => i.map((T, y) => ({ ...T, tableData: { number: y + 1 } })), Wr
39
39
  thContentStyle: Le,
40
40
  cellContentStyle: Q,
41
41
  contentForEmptyTable: _e = /* @__PURE__ */ o("p", { children: "Ничего не найдено" }),
42
- messageForEmptyTable: z,
42
+ messageForEmptyTable: N,
43
43
  messageForEmptyFilter: X = "Ничего не найдено. Измените или сбросьте фильтры.",
44
44
  mobileMessageForEmptyTable: Y,
45
45
  className: Z = "",
@@ -62,7 +62,7 @@ const Or = (i) => i.map((T, y) => ({ ...T, tableData: { number: y + 1 } })), Wr
62
62
  setFilteredTableData: re,
63
63
  withoutHeader: oe,
64
64
  filterResetParam: se,
65
- filterMode: N = "client",
65
+ filterMode: z = "client",
66
66
  filters: Xe,
67
67
  defaultFilters: Ye,
68
68
  onFiltersChange: Ze,
@@ -110,7 +110,7 @@ const Or = (i) => i.map((T, y) => ({ ...T, tableData: { number: y + 1 } })), Wr
110
110
  setLookColumnWidths: Ht,
111
111
  handleMouseDown: It,
112
112
  thRefs: Mt
113
- } = br(g, C), [Tt, ue] = H(void 0), [zt, _] = H([]), [Nt, Vt] = H(void 0), jt = U(() => g.filter((e) => e.hidden !== !0), [g]), { filters: he, setFilters: ae, uncheckedValues: w, setUncheckedValues: Bt, filterDates: x, setFilterDates: Lt } = Sr({ filters: Xe, defaultFilters: Ye, onFiltersChange: Ze, filterResetParam: se }), {
113
+ } = br(g, C), [Tt, ue] = H(void 0), [Nt, _] = H([]), [zt, Vt] = H(void 0), jt = U(() => g.filter((e) => e.hidden !== !0), [g]), { filters: he, setFilters: ae, uncheckedValues: w, setUncheckedValues: Bt, filterDates: x, setFilterDates: Lt } = Sr({ filters: Xe, defaultFilters: Ye, onFiltersChange: Ze, filterResetParam: se }), {
114
114
  sort: F,
115
115
  setSort: _t,
116
116
  hoveredSortCol: kt,
@@ -132,12 +132,12 @@ const Or = (i) => i.map((T, y) => ({ ...T, tableData: { number: y + 1 } })), Wr
132
132
  columns: g,
133
133
  sort: le && !ie ? void 0 : F,
134
134
  uncheckedValues: w,
135
- filterMode: N,
135
+ filterMode: z,
136
136
  filterDates: x,
137
137
  whereFindChecked: Ue,
138
138
  filterEmptyLabel: ee,
139
139
  parentDataField: p
140
- })), pe = !r || Nt === r, s = U(() => pe ? void 0 : fe(r), [pe, r]) ?? zt, {
140
+ })), pe = !r || zt === r, s = U(() => pe ? void 0 : fe(r), [pe, r]) ?? Nt, {
141
141
  rootRef: u,
142
142
  start: O,
143
143
  visibleCount: Kt,
@@ -169,7 +169,7 @@ const Or = (i) => i.map((T, y) => ({ ...T, tableData: { number: y + 1 } })), Wr
169
169
  const e = fe(r);
170
170
  _(e), Vt(r), re && re(e);
171
171
  }
172
- }, [r, w, x, F, N]);
172
+ }, [r, w, x, F, z]);
173
173
  const Pt = (e) => {
174
174
  const t = [...s];
175
175
  t[e].parentDataOpened = !0, _(t);
@@ -213,7 +213,7 @@ const Or = (i) => i.map((T, y) => ({ ...T, tableData: { number: y + 1 } })), Wr
213
213
  ), Fe = P === void 0 ? -1 : n.findIndex((e, t) => M(e, t) === P), E = Fe >= 0 ? Fe : n.length - 1, v = n.map((e, t) => {
214
214
  const l = Wr(e.width), f = h && t === E && l !== void 0 ? l : or[M(e, t)] ?? l;
215
215
  return C && !e.resizeOff ? Math.max(L[e.field] || f || 0, e.width || 0) : f;
216
- }), Oe = xe && v.length > 0 && v.every((e) => (e ?? 0) > 0), sr = Object.values(w).some((e) => e.length > 0) || x.some((e) => e.begin != null || e.end != null), We = N === "client" && sr && (r == null ? void 0 : r.length) > 0 && s.length === 0, De = We ? X : z, J = !B && !d && s.length === 0 && !!De;
216
+ }), Oe = xe && v.length > 0 && v.every((e) => (e ?? 0) > 0), sr = Object.values(w).some((e) => e.length > 0) || x.some((e) => e.begin != null || e.end != null), We = z === "client" && sr && (r == null ? void 0 : r.length) > 0 && s.length === 0, De = We ? X : N, J = !B && !d && s.length === 0 && !!De;
217
217
  I(() => {
218
218
  const e = u.current;
219
219
  if (!J || !e || typeof ResizeObserver > "u") return;
@@ -245,11 +245,11 @@ const Or = (i) => i.map((T, y) => ({ ...T, tableData: { number: y + 1 } })), Wr
245
245
  fillColumnIndex: h ? E : -1
246
246
  };
247
247
  return /* @__PURE__ */ $(He, { children: [
248
- c || d || (r == null ? void 0 : r.length) !== 0 || (r == null ? void 0 : r.length) === 0 && z ? /* @__PURE__ */ o(
248
+ c || d || (r == null ? void 0 : r.length) !== 0 || (r == null ? void 0 : r.length) === 0 && N ? /* @__PURE__ */ o(
249
249
  "div",
250
250
  {
251
251
  id: S,
252
- className: `u-table${["horizontal", "vertical", "none", "both"].includes(y) ? dr(y) : ""}${Me ? " striped" : ""}${Te ? " not-active-lines" : ""}${ze ? " thead-fixed" : ""}${Ne ? " header-borders" : ""}${Z ? " " + Z : ""}${m ? " u-table-mobile" : ""}`,
252
+ className: `u-table${["horizontal", "vertical", "none", "both"].includes(y) ? dr(y) : ""}${Me ? " striped" : ""}${Te ? " not-active-lines" : ""}${Ne ? " thead-fixed" : ""}${ze ? " header-borders" : ""}${Z ? " " + Z : ""}${m ? " u-table-mobile" : ""}`,
253
253
  style: {
254
254
  maxHeight: Je,
255
255
  minHeight: Ke,
@@ -269,7 +269,7 @@ const Or = (i) => i.map((T, y) => ({ ...T, tableData: { number: y + 1 } })), Wr
269
269
  isCardMode: m,
270
270
  isLoading: c,
271
271
  isLoadingPreloader: d,
272
- messageForEmptyTable: Y === "off" || B ? void 0 : We ? X : Y ?? z,
272
+ messageForEmptyTable: Y === "off" || B ? void 0 : We ? X : Y ?? N,
273
273
  effectiveSortField: k,
274
274
  effectiveSortDir: q,
275
275
  applySort: At,
@@ -1,4 +1,4 @@
1
- import { useRef as i, useState as A, useLayoutEffect as k, useCallback as N, useMemo as Z, useEffect as B } from "react";
1
+ import { useRef as i, useState as A, useLayoutEffect as N, useCallback as k, useMemo as Z, useEffect as B } from "react";
2
2
  const ot = ({
3
3
  filteredData: e,
4
4
  virtualizationOn: c,
@@ -11,7 +11,7 @@ const ot = ({
11
11
  pageSize: p
12
12
  }) => {
13
13
  const s = i(null), [h, P] = A(0), [_, $] = A(0), d = i([]), j = i([]), F = i([]), G = i([]), J = i([]), K = i({}), T = i(0);
14
- k(() => {
14
+ N(() => {
15
15
  if (!C && !S && s.current) {
16
16
  if (e.length === 0) {
17
17
  T.current = 0;
@@ -21,7 +21,7 @@ const ot = ({
21
21
  t > 0 && (T.current = t);
22
22
  }
23
23
  });
24
- const [L, O] = A(void 0), Q = N(
24
+ const [L, O] = A(void 0), Q = k(
25
25
  (t) => d.current[t] ?? I,
26
26
  [I]
27
27
  ), l = Z(() => {
@@ -32,7 +32,7 @@ const ot = ({
32
32
  }, [e.length, Q, _]), a = Z(
33
33
  () => l.length > 0 ? l[l.length - 1] : 0,
34
34
  [l]
35
- ), w = q + 1, U = N(
35
+ ), b = q + 1, U = k(
36
36
  (t) => {
37
37
  let n = 0, o = l.length - 1;
38
38
  for (; n < o; ) {
@@ -44,15 +44,15 @@ const ot = ({
44
44
  [l, e.length]
45
45
  ), X = typeof H == "number" && typeof p == "number" && p > 0, z = X ? e.slice((H - 1) * p, H * p) : e, f = c && !X && e.length > q, D = f ? l[h] : 0, tt = f ? Math.max(
46
46
  0,
47
- a - l[Math.min(e.length, h + w)]
48
- ) : 0, V = N(
47
+ a - l[Math.min(e.length, h + b)]
48
+ ) : 0, V = k(
49
49
  (t) => {
50
50
  if (!f)
51
51
  return;
52
- const n = t.target, o = Math.max(0, e.length - w), r = Math.min(o, U(n.scrollTop));
52
+ const n = t.target, o = Math.max(0, e.length - b), r = Math.min(o, U(n.scrollTop));
53
53
  P(r);
54
54
  },
55
- [e.length, U, f, w]
55
+ [e.length, U, f, b]
56
56
  );
57
57
  B(() => {
58
58
  if (c && s.current) {
@@ -77,14 +77,14 @@ const ot = ({
77
77
  return o.observe(t), () => o.disconnect();
78
78
  }, [c]);
79
79
  const Y = i(null);
80
- return k(() => {
80
+ return N(() => {
81
81
  if (!c || C) return;
82
82
  const t = Y.current;
83
83
  Y.current = { data: e, width: M }, !(!t || t.data === e && t.width === M) && (d.current = [], $((n) => n + 1));
84
84
  }, [c, C, e, M]), B(() => {
85
85
  if (!c)
86
86
  return;
87
- const t = f ? h : 0, n = f ? Math.min(e.length, h + w) : e.length;
87
+ const t = f ? h : 0, n = f ? Math.min(e.length, h + b) : e.length;
88
88
  let o = !1;
89
89
  for (let r = t; r < n; r++) {
90
90
  const u = K.current[r];
@@ -93,16 +93,16 @@ const ot = ({
93
93
  (!d.current[r] || Math.abs(d.current[r] - m) > 0.5) && (d.current[r] = m, o = !0);
94
94
  }
95
95
  o && $((r) => r + 1);
96
- }, [c, f, h, w, e.length, M]), k(() => {
96
+ }, [c, f, h, b, e.length, M]), N(() => {
97
97
  var t;
98
98
  if (!C && e.length > 0) {
99
- const n = Array.from(((t = s.current) == null ? void 0 : t.querySelectorAll(".table tbody tr")) ?? []).filter((b) => b.cells.length > 0), o = new Array(e.length).fill(void 0), r = new Array(e.length).fill(void 0), u = new Array(e.length).fill(void 0), m = new Array(e.length).fill(void 0), v = new Array(e.length).fill(void 0);
100
- n.forEach((b, W) => {
101
- const y = Number(b.dataset.virtualIndex ?? W);
102
- if (isNaN(y)) return;
103
- const nt = b.getBoundingClientRect().height;
99
+ const n = Array.from(((t = s.current) == null ? void 0 : t.querySelectorAll(".table tbody tr")) ?? []).filter((w) => w.cells.length > 0), o = new Array(e.length).fill(void 0), r = new Array(e.length).fill(void 0), u = new Array(e.length).fill(void 0), m = new Array(e.length).fill(void 0), v = new Array(e.length).fill(void 0);
100
+ n.forEach((w, W) => {
101
+ const y = Number(w.dataset.virtualIndex ?? W);
102
+ if (Number.isNaN(y)) return;
103
+ const nt = w.getBoundingClientRect().height;
104
104
  o[y] = nt;
105
- const x = Array.from(b.children);
105
+ const x = Array.from(w.children);
106
106
  r[y] = x.map((R) => R.getBoundingClientRect().height), u[y] = x.map((R) => {
107
107
  const g = R.firstElementChild;
108
108
  return g ? g.getBoundingClientRect().height : 0;
@@ -117,9 +117,9 @@ const ot = ({
117
117
  background: g.background
118
118
  };
119
119
  });
120
- }), d.current = o.map((b, W) => b ?? d.current[W]), j.current = r.filter(Boolean), F.current = u.filter(Boolean), G.current = m.filter(Boolean), J.current = v.filter(Boolean);
120
+ }), d.current = o.map((w, W) => w ?? d.current[W]), j.current = r.filter(Boolean), F.current = u.filter(Boolean), G.current = m.filter(Boolean), J.current = v.filter(Boolean);
121
121
  }
122
- }, [C, e, E, H, p, h, w]), B(() => {
122
+ }, [C, e, E, H, p, h, b]), B(() => {
123
123
  !S && e.length > 0 && setTimeout(() => {
124
124
  const t = document.querySelector(`#${E} .table tbody`);
125
125
  t && O(t.getBoundingClientRect().height);
@@ -127,7 +127,7 @@ const ot = ({
127
127
  }, [S, e, E]), {
128
128
  rootRef: s,
129
129
  start: h,
130
- visibleCount: w,
130
+ visibleCount: b,
131
131
  pagedData: z,
132
132
  hasOverflow: f,
133
133
  topPadding: D,
@@ -1,49 +1,49 @@
1
- import { useRef as O, useState as B, useCallback as P, useLayoutEffect as D } from "react";
2
- import { TAB_PADDING_MIN_RATIO$u as T, distributeTabs$u as G, lineTabsSqueeze$u as k, tabsSqueeze$u as J } from "../../vanilla/core/distributeTabs.js";
3
- const U = (l, L, g, h) => {
4
- const u = O(null), p = O(null), S = O(null), w = JSON.stringify(l.map((t) => t.id)), z = l.map((t, e) => e), [F, _] = B({ signature: w, order: z }), f = F.signature === w ? F.order : z, [r, M] = B({ widths: [], paddings: [], available: 0, gap: 0, more: 0 }), o = P(() => {
5
- var A;
6
- const t = u.current, e = p.current;
1
+ import { useRef as O, useState as q, useCallback as P, useLayoutEffect as D } from "react";
2
+ import { TAB_PADDING_MIN_RATIO$u as B, distributeTabs$u as G, lineTabsSqueeze$u as k, tabsSqueeze$u as J } from "../../vanilla/core/distributeTabs.js";
3
+ const U = (l, N, u, b) => {
4
+ const g = O(null), m = O(null), L = O(null), h = JSON.stringify(l.map((t) => t.id)), S = l.map((t, e) => e), [z, T] = q({ signature: h, order: S }), p = z.signature === h ? z.order : S, [r, _] = q({ widths: [], paddings: [], available: 0, gap: 0, more: 0 }), o = P(() => {
5
+ var x;
6
+ const t = g.current, e = m.current;
7
7
  if (!t || !e) return;
8
- const n = getComputedStyle(t), a = t.getBoundingClientRect().width - (parseFloat(n.borderLeftWidth) || 0) - (parseFloat(n.borderRightWidth) || 0) - (parseFloat(n.paddingLeft) || 0) - (parseFloat(n.paddingRight) || 0), s = Array.from(e.querySelectorAll("[data-measure-tab]")), b = s.map((i) => i.getBoundingClientRect().width), R = s.map((i) => {
8
+ const n = getComputedStyle(t), a = t.getBoundingClientRect().width - (Number.parseFloat(n.borderLeftWidth) || 0) - (Number.parseFloat(n.borderRightWidth) || 0) - (Number.parseFloat(n.paddingLeft) || 0) - (Number.parseFloat(n.paddingRight) || 0), s = Array.from(e.querySelectorAll("[data-measure-tab]")), v = s.map((i) => i.getBoundingClientRect().width), R = s.map((i) => {
9
9
  const c = getComputedStyle(i);
10
- return [parseFloat(c.paddingLeft) || 0, parseFloat(c.paddingRight) || 0];
11
- }), m = {
12
- widths: b,
10
+ return [Number.parseFloat(c.paddingLeft) || 0, Number.parseFloat(c.paddingRight) || 0];
11
+ }), f = {
12
+ widths: v,
13
13
  paddings: R,
14
14
  available: a,
15
- gap: parseFloat(n.columnGap || "0") || 0,
16
- more: ((A = S.current) == null ? void 0 : A.getBoundingClientRect().width) || 0
15
+ gap: Number.parseFloat(n.columnGap || "0") || 0,
16
+ more: ((x = L.current) == null ? void 0 : x.getBoundingClientRect().width) || 0
17
17
  };
18
- M((i) => i.available === m.available && i.gap === m.gap && i.more === m.more && i.widths.length === b.length && i.widths.every((c, y) => c === b[y]) && i.paddings.every(([c, y], E) => {
19
- var I, q;
20
- return c === ((I = R[E]) == null ? void 0 : I[0]) && y === ((q = R[E]) == null ? void 0 : q[1]);
21
- }) ? i : m);
18
+ _((i) => i.available === f.available && i.gap === f.gap && i.more === f.more && i.widths.length === v.length && i.widths.every((c, y) => c === v[y]) && i.paddings.every(([c, y], A) => {
19
+ var E, I;
20
+ return c === ((E = R[A]) == null ? void 0 : E[0]) && y === ((I = R[A]) == null ? void 0 : I[1]);
21
+ }) ? i : f);
22
22
  }, []);
23
23
  D(() => {
24
24
  var n, a;
25
25
  o();
26
26
  let t = !1;
27
27
  const e = typeof ResizeObserver > "u" ? null : new ResizeObserver(o);
28
- return u.current && (e == null || e.observe(u.current)), p.current && (e == null || e.observe(p.current)), window.addEventListener("resize", o), (n = document.fonts) == null || n.addEventListener("loadingdone", o), (a = document.fonts) == null || a.ready.then(() => {
28
+ return g.current && (e == null || e.observe(g.current)), m.current && (e == null || e.observe(m.current)), window.addEventListener("resize", o), (n = document.fonts) == null || n.addEventListener("loadingdone", o), (a = document.fonts) == null || a.ready.then(() => {
29
29
  t || o();
30
30
  }), () => {
31
31
  var s;
32
32
  t = !0, e == null || e.disconnect(), window.removeEventListener("resize", o), (s = document.fonts) == null || s.removeEventListener("loadingdone", o);
33
33
  };
34
- }, [o, l, g, h]);
35
- const N = L === void 0 ? -1 : l.findIndex((t) => t.id === L), C = r.widths.length === l.length && r.widths.every((t) => t > 0), v = g ? [] : r.paddings.map(([t, e]) => (t + e) * (1 - T)), d = C && !h ? G(f, r.widths, r.available, r.gap, r.more, N, g, v) : { visible: f, overflow: [] }, x = !C || g ? 0 : h ? k(f, r.widths, v, r.available, r.gap) : J(d.visible, r.widths, v, r.available, r.gap, r.more, d.overflow.length > 0);
36
- return { containerRef: u, measureRef: p, moreMeasureRef: S, ...d, paddingOf: (t) => {
34
+ }, [o, l, u, b]);
35
+ const M = N === void 0 ? -1 : l.findIndex((t) => t.id === N), F = r.widths.length === l.length && r.widths.every((t) => t > 0), w = u ? [] : r.paddings.map(([t, e]) => (t + e) * (1 - B)), d = F && !b ? G(p, r.widths, r.available, r.gap, r.more, M, u, w) : { visible: p, overflow: [] }, C = !F || u ? 0 : b ? k(p, r.widths, w, r.available, r.gap) : J(d.visible, r.widths, w, r.available, r.gap, r.more, d.overflow.length > 0);
36
+ return { containerRef: g, measureRef: m, moreMeasureRef: L, ...d, paddingOf: (t) => {
37
37
  const e = r.paddings[t];
38
- if (!x || !e) return;
39
- const n = 1 - x * (1 - T);
38
+ if (!C || !e) return;
39
+ const n = 1 - C * (1 - B);
40
40
  return { paddingLeft: e[0] * n, paddingRight: e[1] * n };
41
41
  }, promote: (t) => {
42
42
  if (!d.overflow.includes(t)) return;
43
43
  const e = d.visible[d.visible.length - 1];
44
44
  if (e === void 0) return;
45
- const n = [...f], a = n.indexOf(t), s = n.indexOf(e);
46
- [n[a], n[s]] = [n[s], n[a]], _({ signature: w, order: n });
45
+ const n = [...p], a = n.indexOf(t), s = n.indexOf(e);
46
+ [n[a], n[s]] = [n[s], n[a]], T({ signature: h, order: n });
47
47
  } };
48
48
  };
49
49
  export { U as useTabsOverflow$u };
@@ -1,5 +1,5 @@
1
1
  import { jsxs as X, jsx as $ } from "react/jsx-runtime";
2
- import { useRef as z, useState as Y, useCallback as B, useEffect as v, useLayoutEffect as W, useId as q } from "react";
2
+ import { useRef as z, useState as N, useCallback as B, useEffect as v, useLayoutEffect as W, useId as q } from "react";
3
3
  /* empty css */
4
4
  import { createPortal as tt } from "react-dom";
5
5
  /* empty css */
@@ -17,7 +17,7 @@ const ot = 100, it = {
17
17
  return r === "bottom" ? { x: y, y: t.y + t.height + t.scrollY + u } : r === "right" ? { x: t.x + t.width + u + n / 2, y: m } : r === "left" ? { x: t.x - u - n / 2, y: m } : { x: y, y: t.y + t.scrollY - u - a };
18
18
  }, R = 8, V = 10, ct = 14, J = (r) => {
19
19
  if (typeof window > "u" || typeof document > "u") return r;
20
- const t = parseFloat(getComputedStyle(document.documentElement).fontSize);
20
+ const t = Number.parseFloat(getComputedStyle(document.documentElement).fontSize);
21
21
  return !Number.isFinite(t) || t <= 0 ? r : r * (t / 16);
22
22
  }, ut = {
23
23
  top: "bottom",
@@ -50,8 +50,8 @@ const ot = 100, it = {
50
50
  let f = M.x;
51
51
  const x = n / 2;
52
52
  f - x < R ? f = x + R : f + x > m - R && (f = m - R - x);
53
- const T = t.x + t.width / 2, s = Math.max(0, x - ct), N = Math.max(-s, Math.min(s, T - f));
54
- return { placement: M.placement, x: f, y: M.y, arrowShift: N };
53
+ const T = t.x + t.width / 2, s = Math.max(0, x - ct), Y = Math.max(-s, Math.min(s, T - f));
54
+ return { placement: M.placement, x: f, y: M.y, arrowShift: Y };
55
55
  }, K = (r) => {
56
56
  const t = document.activeElement;
57
57
  if (!r || !t || !r.contains(t)) return !1;
@@ -81,10 +81,10 @@ const at = () => {
81
81
  showWhenActive: d = !1,
82
82
  showDelay: M = ot
83
83
  }) => {
84
- const f = z(null), x = z(null), T = z(null), [s, N] = Y(!1), [_, I] = Y(null), [o, p] = Y(null), [b, H] = Y(w), [k, G] = Y(!1), P = () => {
84
+ const f = z(null), x = z(null), T = z(null), [s, Y] = N(!1), [_, I] = N(null), [o, p] = N(null), [b, H] = N(w), [k, G] = N(!1), P = () => {
85
85
  T.current && (clearTimeout(T.current), T.current = null);
86
86
  }, h = B(() => {
87
- P(), N(!1), I(null), G(!1);
87
+ P(), Y(!1), I(null), G(!1);
88
88
  }, []), { shouldRender: D, isAnimated: j } = nt({ isOpen: s, duration: rt.instant });
89
89
  v(() => {
90
90
  D || (p(null), H(w));
@@ -92,7 +92,7 @@ const at = () => {
92
92
  const F = B((e) => {
93
93
  P();
94
94
  const { x: c, y: i, width: l, height: E } = e.getBoundingClientRect();
95
- I({ x: c, y: i, width: l, height: E, scrollY: window.scrollY }), N(!0);
95
+ I({ x: c, y: i, width: l, height: E, scrollY: window.scrollY }), Y(!0);
96
96
  }, []), O = B((e) => {
97
97
  const { x: c, y: i, width: l, height: E } = e.getBoundingClientRect();
98
98
  I((S) => S && { x: c, y: i, width: l, height: E, scrollY: window.scrollY });
package/dist/dev/index.js CHANGED
@@ -952,9 +952,8 @@ const La = `
952
952
  /* «Анимации ×5» ставит длительности на каждый элемент документа, в том числе на хост панели:
953
953
  режим замедляет сервис, а не инструмент, которым его включили. */
954
954
  --u-duration-instant: 100ms; --u-duration-fast: 150ms; --u-duration-base: 200ms; --u-duration-moderate: 250ms; --u-duration-slow: 300ms;
955
- /* Отступ кнопки снизу: StickyActionBar кита, пока стоит у нижнего края, задаёт на <html>
956
- --u-dev-launcher-bottom (его высота + 12px) — кнопка и панель поднимаются над ним. */
957
- --launcher-bottom: var(--u-dev-launcher-bottom, calc(12px + env(safe-area-inset-bottom, 0px)));
955
+ /* Отступ кнопки снизу: всегда левый нижний угол, StickyActionBar её не поднимает. */
956
+ --launcher-bottom: calc(12px + env(safe-area-inset-bottom, 0px));
958
957
  font-family: Montserrat, "Segoe UI", Arial, sans-serif; font-size: 14px; line-height: 1.4; color: var(--u-color-text, #222); }
959
958
  button, input, textarea { font: inherit; color: inherit; }
960
959
  /* Кнопка панели — в цветах кита: токены --u-color-* с :root сервиса проходят в shadow DOM
@@ -1574,7 +1573,7 @@ function hn(t) {
1574
1573
  function mn() {
1575
1574
  (zt() ?? ot).reset();
1576
1575
  }
1577
- const bn = () => "2.1.6";
1576
+ const bn = () => "2.1.7-next.1";
1578
1577
  function xn(t) {
1579
1578
  return pn(t, { name: "urfu-ui-kit-react", version: bn() });
1580
1579
  }
@@ -4,4 +4,4 @@
4
4
  * список «ключ — значение»). Цвета, радиусы, тени и движение — токены кита (`--u-*`):
5
5
  * CSS-переменные документа проходят в Shadow DOM, `all: initial` их не сбрасывает.
6
6
  */
7
- export declare const STYLES = "\n:host { all: initial; }\n* { box-sizing: border-box; }\n.root {\n /* \u00AB\u0410\u043D\u0438\u043C\u0430\u0446\u0438\u0438 \u00D75\u00BB \u0441\u0442\u0430\u0432\u0438\u0442 \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0438 \u043D\u0430 \u043A\u0430\u0436\u0434\u044B\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430, \u0432 \u0442\u043E\u043C \u0447\u0438\u0441\u043B\u0435 \u043D\u0430 \u0445\u043E\u0441\u0442 \u043F\u0430\u043D\u0435\u043B\u0438:\n \u0440\u0435\u0436\u0438\u043C \u0437\u0430\u043C\u0435\u0434\u043B\u044F\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441, \u0430 \u043D\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442, \u043A\u043E\u0442\u043E\u0440\u044B\u043C \u0435\u0433\u043E \u0432\u043A\u043B\u044E\u0447\u0438\u043B\u0438. */\n --u-duration-instant: 100ms; --u-duration-fast: 150ms; --u-duration-base: 200ms; --u-duration-moderate: 250ms; --u-duration-slow: 300ms;\n /* \u041E\u0442\u0441\u0442\u0443\u043F \u043A\u043D\u043E\u043F\u043A\u0438 \u0441\u043D\u0438\u0437\u0443: StickyActionBar \u043A\u0438\u0442\u0430, \u043F\u043E\u043A\u0430 \u0441\u0442\u043E\u0438\u0442 \u0443 \u043D\u0438\u0436\u043D\u0435\u0433\u043E \u043A\u0440\u0430\u044F, \u0437\u0430\u0434\u0430\u0451\u0442 \u043D\u0430 <html>\n --u-dev-launcher-bottom (\u0435\u0433\u043E \u0432\u044B\u0441\u043E\u0442\u0430 + 12px) \u2014 \u043A\u043D\u043E\u043F\u043A\u0430 \u0438 \u043F\u0430\u043D\u0435\u043B\u044C \u043F\u043E\u0434\u043D\u0438\u043C\u0430\u044E\u0442\u0441\u044F \u043D\u0430\u0434 \u043D\u0438\u043C. */\n --launcher-bottom: var(--u-dev-launcher-bottom, calc(12px + env(safe-area-inset-bottom, 0px)));\n font-family: Montserrat, \"Segoe UI\", Arial, sans-serif; font-size: 14px; line-height: 1.4; color: var(--u-color-text, #222); }\nbutton, input, textarea { font: inherit; color: inherit; }\n/* \u041A\u043D\u043E\u043F\u043A\u0430 \u043F\u0430\u043D\u0435\u043B\u0438 \u2014 \u0432 \u0446\u0432\u0435\u0442\u0430\u0445 \u043A\u0438\u0442\u0430: \u0442\u043E\u043A\u0435\u043D\u044B --u-color-* \u0441 :root \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043F\u0440\u043E\u0445\u043E\u0434\u044F\u0442 \u0432 shadow DOM\n (all: initial \u0438\u0445 \u043D\u0435 \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442), \u0437\u0430\u043F\u0430\u0441\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u2014 \u043A\u0430\u043A \u0432 \u043A\u0438\u0442\u0435. \u0412 \u043F\u043E\u043A\u043E\u0435 \u2014 \u043A\u0440\u0443\u0433 \u0441 \u043B\u043E\u0433\u043E\u0442\u0438\u043F\u043E\u043C,\n \u0447\u0442\u043E\u0431\u044B \u043C\u0435\u043D\u044C\u0448\u0435 \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u043D\u0438\u0436\u043D\u0438\u0435 \u043B\u0438\u043F\u043A\u0438\u0435 \u043F\u0430\u043D\u0435\u043B\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430; \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438 \u0438 \u0444\u043E\u043A\u0443\u0441\u0435 \u0440\u0430\u0441\u043A\u0440\u044B\u0432\u0430\u0435\u0442\u0441\u044F\n \u0432 \u00AB\u043B\u043E\u0433\u043E\u0442\u0438\u043F + Dev\u00BB; \u043F\u0440\u0438 \u0432\u043A\u043B\u044E\u0447\u0451\u043D\u043D\u044B\u0445 \u0441\u0431\u043E\u044F\u0445 \u0440\u0430\u0441\u043A\u0440\u044B\u0442\u0430 \u0432\u0441\u0435\u0433\u0434\u0430, \u0446\u0432\u0435\u0442 \u043E\u0448\u0438\u0431\u043A\u0438 \u0438 \u0447\u0438\u0441\u043B\u043E \u0441\u0431\u043E\u0435\u0432. */\n.pill { --kit-p: var(--u-color-primary, #1e4391); --kit-error: var(--u-color-error, #ef302b);\n --kit-surface: var(--u-color-surface, #fff); --kit-line: var(--u-color-border, #748ab9);\n position: fixed; left: 12px; bottom: var(--launcher-bottom); z-index: 2147483000;\n display: inline-flex; align-items: center; height: 36px; padding: 0; border: 1px solid var(--kit-line); border-radius: 18px;\n background: var(--kit-surface); color: var(--kit-p); font-size: 13px; font-weight: 500; white-space: nowrap; cursor: pointer;\n box-shadow: 0 2px 8px rgba(0,0,0,.15);\n transition: background-color var(--u-duration-fast) var(--u-ease-standard), border-color var(--u-duration-fast) var(--u-ease-standard); }\n.pill .logo { flex: none; display: grid; place-items: center; width: 34px; height: 34px; border-radius: 50%; background: var(--kit-surface); }\n.pill .logo svg { display: block; width: 20px; height: 20px; }\n.pill .label { max-width: 0; overflow: hidden; opacity: 0; padding: 0;\n 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); }\n.pill:hover .label, .pill:focus-visible .label, .pill.on .label { max-width: 260px; opacity: 1; padding: 0 14px 0 2px; }\n.pill.on { background: var(--kit-error); border-color: var(--kit-error); color: #fff; }\n.pill.on .logo { width: 30px; height: 30px; margin: 0 1px 0 2px; }\n.pill:focus-visible { outline: 2px solid var(--kit-p); outline-offset: 2px; }\n.panel { position: fixed; left: 12px; bottom: calc(var(--launcher-bottom) + 44px); z-index: 2147483001;\n width: 400px; max-width: calc(100vw - 24px); max-height: min(75vh, 680px); display: flex; flex-direction: column;\n background: var(--u-color-surface, #fff); border: 1px solid var(--u-color-border-light, #d3d3d3); border-radius: var(--u-radius, 10px);\n box-shadow: var(--u-shadow-popup, 0 8px 24px rgba(15,43,94,.16)); }\n.panel.alone { bottom: var(--launcher-bottom); }\n/* \u041F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0430 \u0443 \u043A\u043D\u043E\u043F\u043A\u0438 \u2014 \u043F\u0443\u0437\u044B\u0440\u044C, \u043A\u0430\u043A \u0443 Tooltip \u043A\u0438\u0442\u0430. */\n.hint { position: fixed; left: 12px; bottom: var(--launcher-bottom); z-index: 2147483000;\n max-width: min(360px, calc(100vw - 24px)); padding: 8px 12px; border-radius: var(--u-radius-small, 8px);\n background: var(--u-color-text, #222); color: var(--u-color-surface, #fff); font-size: 12px; box-shadow: var(--u-shadow-popup); }\n.pill ~ .hint { bottom: calc(var(--launcher-bottom) + 44px); }\n/* min-height \u0443 u-message-small \u043E\u0442\u043C\u0435\u043D\u044F\u0435\u0442 \u0437\u0430\u0449\u0438\u0442\u0443 \u0444\u043B\u0435\u043A\u0441-\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 \u043E\u0442 \u0441\u0436\u0430\u0442\u0438\u044F: \u0431\u0435\u0437 flex-shrink \u0442\u0435\u043A\u0441\u0442 \u043E\u0431\u0440\u0435\u0437\u0430\u0435\u0442\u0441\u044F. */\n.note { margin: 0 16px 8px; overflow-wrap: anywhere; flex-shrink: 0; }\n.head { display: flex; align-items: center; gap: 4px; padding: 10px 8px 2px 16px; }\n.title { flex: 1; min-width: 0; font-weight: 600; font-size: 16px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.title .u-selectbox { width: 100%; }\n.title .u-selectbox-select-title { font-weight: 600; }\n.intro, .caption, .escape { margin: 0; color: var(--u-color-text-secondary, #545454); }\n.intro { padding: 0 16px 10px; }\n.tabs { padding: 0 16px 8px; }\n.tabs .u-tab-segment { padding: 6px 4px; }\n.body { overflow: auto; padding: 4px 16px 12px; display: flex; flex-direction: column; gap: 14px; }\n.body .u-search { display: block; width: 100%; }\n.group { display: flex; flex-direction: column; gap: 8px; }\n.group-title { font-weight: 600; color: var(--u-color-text-secondary, #545454); }\n.u-switch { align-items: flex-start; }\n.u-switch .tt { padding-top: 3px; }\n.u-switch .sub { display: block; color: var(--u-color-text-secondary, #545454); font-size: 12px; }\n/* Select \u043A\u0438\u0442\u0430: \u043E\u0442\u043C\u0435\u0442\u043A\u0430 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0438 \u043F\u0443\u043D\u043A\u0442\u0430 \u043F\u043E\u0434 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u043E\u0439 \u2014 \u043A\u0430\u043A \u0443 Select \u0432 React \u0438 Vue. */\n.u-selectbox-option[aria-selected=\"true\"] { background: var(--u-color-background, #f6f6f6); }\n.u-selectbox-option.active { background: var(--u-color-selected, #e7f2ff); }\n.u-selectbox-select-icon-arrow { transition: transform var(--u-duration-fast) var(--u-ease-standard); }\n.u-selectbox-select-open .u-selectbox-select-icon-arrow { transform: rotate(180deg); }\n.rule { display: flex; align-items: center; gap: 10px; padding: 6px 4px 6px 10px; border-radius: var(--u-radius-small, 8px);\n background: var(--u-color-background-light, #f9f9f9); }\n.rule .text { flex: 1; min-width: 0; font-family: Consolas, monospace; font-size: 12px; overflow-wrap: anywhere; }\n.rule small, .req small, .shown small { display: block; color: var(--u-color-text-secondary, #545454);\n font-family: Montserrat, \"Segoe UI\", Arial, sans-serif; font-size: 12px; }\n.add { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 8px; }\n.add .wide { grid-column: 1 / -1; }\n.add .u-textarea { height: auto; min-height: 76px; font-family: Consolas, monospace; font-size: 12px; resize: vertical; }\n.add .u-form-field__hint { color: var(--u-color-warning, #e98446); }\n.add [type=\"submit\"] { align-self: end; }\n.foot { display: flex; flex-direction: column; gap: 8px; padding: 10px 16px 12px; border-top: 1px solid var(--u-color-border-light, #d3d3d3); }\n.actions { display: flex; gap: 8px; flex-wrap: wrap; }\n.empty { margin: 0; color: var(--u-color-text-secondary, #545454); }\n.list-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; color: var(--u-color-text-secondary, #545454); }\n.requests { display: flex; flex-direction: column; }\n.req { display: grid; grid-template-columns: 52px 1fr auto auto; gap: 8px; align-items: center; padding: 6px 0;\n border-bottom: 1px solid var(--u-color-background, #f6f6f6); font-family: Consolas, monospace; font-size: 12px; }\n.req .path { min-width: 0; overflow-wrap: break-word; }\n/* \u041F\u0443\u0442\u044C \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u0438\u0442\u0441\u044F \u043F\u043E \u00AB/\u00BB (<wbr>), \u0430 \u043D\u0435 \u043F\u043E\u0441\u0440\u0435\u0434\u0438 \u0441\u043B\u043E\u0432\u0430; \u0434\u043B\u0438\u043D\u043D\u044B\u0439 \u043E\u0431\u0440\u0435\u0437\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u0432\u0442\u043E\u0440\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0435, \u043F\u043E\u043B\u043D\u044B\u0439 \u2014 \u0432 title. */\n.req .path .p { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden; }\n.req .u-status { font-family: Montserrat, \"Segoe UI\", Arial, sans-serif; }\n.shown { padding: 8px 0; border-bottom: 1px solid var(--u-color-background, #f6f6f6); }\n.shown-head { display: flex; justify-content: space-between; gap: 8px; color: var(--u-color-text-secondary, #545454); font-size: 12px; }\n.shown-head .kind { font-weight: 600; color: var(--u-color-error, #ef302b); }\n.shown-head .kind.warning { color: var(--u-color-warning, #e98446); }\n.shown-title { font-weight: 600; }\n.shown .cause { margin-top: 2px; font-family: Consolas, monospace; font-size: 12px; }\ndl { display: grid; grid-template-columns: auto 1fr; gap: 6px 12px; margin: 0; }\ndt { color: var(--u-color-text-secondary, #545454); }\ndd { margin: 0; font-family: Consolas, monospace; font-size: 12px; overflow-wrap: anywhere; }\n@media (max-width: 576px) {\n .panel { left: 0; right: 0; bottom: 0; width: auto; max-width: none; max-height: 80vh;\n border-radius: var(--u-radius, 10px) var(--u-radius, 10px) 0 0; padding-bottom: env(safe-area-inset-bottom, 0px); }\n .panel ~ .pill { display: none; }\n}\n@media (prefers-reduced-motion: reduce) { .u-selectbox-select-icon-arrow, .pill, .pill .label { transition: none; } }\n";
7
+ export declare const STYLES = "\n:host { all: initial; }\n* { box-sizing: border-box; }\n.root {\n /* \u00AB\u0410\u043D\u0438\u043C\u0430\u0446\u0438\u0438 \u00D75\u00BB \u0441\u0442\u0430\u0432\u0438\u0442 \u0434\u043B\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0438 \u043D\u0430 \u043A\u0430\u0436\u0434\u044B\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430, \u0432 \u0442\u043E\u043C \u0447\u0438\u0441\u043B\u0435 \u043D\u0430 \u0445\u043E\u0441\u0442 \u043F\u0430\u043D\u0435\u043B\u0438:\n \u0440\u0435\u0436\u0438\u043C \u0437\u0430\u043C\u0435\u0434\u043B\u044F\u0435\u0442 \u0441\u0435\u0440\u0432\u0438\u0441, \u0430 \u043D\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442, \u043A\u043E\u0442\u043E\u0440\u044B\u043C \u0435\u0433\u043E \u0432\u043A\u043B\u044E\u0447\u0438\u043B\u0438. */\n --u-duration-instant: 100ms; --u-duration-fast: 150ms; --u-duration-base: 200ms; --u-duration-moderate: 250ms; --u-duration-slow: 300ms;\n /* \u041E\u0442\u0441\u0442\u0443\u043F \u043A\u043D\u043E\u043F\u043A\u0438 \u0441\u043D\u0438\u0437\u0443: \u0432\u0441\u0435\u0433\u0434\u0430 \u043B\u0435\u0432\u044B\u0439 \u043D\u0438\u0436\u043D\u0438\u0439 \u0443\u0433\u043E\u043B, StickyActionBar \u0435\u0451 \u043D\u0435 \u043F\u043E\u0434\u043D\u0438\u043C\u0430\u0435\u0442. */\n --launcher-bottom: calc(12px + env(safe-area-inset-bottom, 0px));\n font-family: Montserrat, \"Segoe UI\", Arial, sans-serif; font-size: 14px; line-height: 1.4; color: var(--u-color-text, #222); }\nbutton, input, textarea { font: inherit; color: inherit; }\n/* \u041A\u043D\u043E\u043F\u043A\u0430 \u043F\u0430\u043D\u0435\u043B\u0438 \u2014 \u0432 \u0446\u0432\u0435\u0442\u0430\u0445 \u043A\u0438\u0442\u0430: \u0442\u043E\u043A\u0435\u043D\u044B --u-color-* \u0441 :root \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043F\u0440\u043E\u0445\u043E\u0434\u044F\u0442 \u0432 shadow DOM\n (all: initial \u0438\u0445 \u043D\u0435 \u0441\u0431\u0440\u0430\u0441\u044B\u0432\u0430\u0435\u0442), \u0437\u0430\u043F\u0430\u0441\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u2014 \u043A\u0430\u043A \u0432 \u043A\u0438\u0442\u0435. \u0412 \u043F\u043E\u043A\u043E\u0435 \u2014 \u043A\u0440\u0443\u0433 \u0441 \u043B\u043E\u0433\u043E\u0442\u0438\u043F\u043E\u043C,\n \u0447\u0442\u043E\u0431\u044B \u043C\u0435\u043D\u044C\u0448\u0435 \u0437\u0430\u043A\u0440\u044B\u0432\u0430\u0442\u044C \u043D\u0438\u0436\u043D\u0438\u0435 \u043B\u0438\u043F\u043A\u0438\u0435 \u043F\u0430\u043D\u0435\u043B\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430; \u043F\u0440\u0438 \u043D\u0430\u0432\u0435\u0434\u0435\u043D\u0438\u0438 \u0438 \u0444\u043E\u043A\u0443\u0441\u0435 \u0440\u0430\u0441\u043A\u0440\u044B\u0432\u0430\u0435\u0442\u0441\u044F\n \u0432 \u00AB\u043B\u043E\u0433\u043E\u0442\u0438\u043F + Dev\u00BB; \u043F\u0440\u0438 \u0432\u043A\u043B\u044E\u0447\u0451\u043D\u043D\u044B\u0445 \u0441\u0431\u043E\u044F\u0445 \u0440\u0430\u0441\u043A\u0440\u044B\u0442\u0430 \u0432\u0441\u0435\u0433\u0434\u0430, \u0446\u0432\u0435\u0442 \u043E\u0448\u0438\u0431\u043A\u0438 \u0438 \u0447\u0438\u0441\u043B\u043E \u0441\u0431\u043E\u0435\u0432. */\n.pill { --kit-p: var(--u-color-primary, #1e4391); --kit-error: var(--u-color-error, #ef302b);\n --kit-surface: var(--u-color-surface, #fff); --kit-line: var(--u-color-border, #748ab9);\n position: fixed; left: 12px; bottom: var(--launcher-bottom); z-index: 2147483000;\n display: inline-flex; align-items: center; height: 36px; padding: 0; border: 1px solid var(--kit-line); border-radius: 18px;\n background: var(--kit-surface); color: var(--kit-p); font-size: 13px; font-weight: 500; white-space: nowrap; cursor: pointer;\n box-shadow: 0 2px 8px rgba(0,0,0,.15);\n transition: background-color var(--u-duration-fast) var(--u-ease-standard), border-color var(--u-duration-fast) var(--u-ease-standard); }\n.pill .logo { flex: none; display: grid; place-items: center; width: 34px; height: 34px; border-radius: 50%; background: var(--kit-surface); }\n.pill .logo svg { display: block; width: 20px; height: 20px; }\n.pill .label { max-width: 0; overflow: hidden; opacity: 0; padding: 0;\n 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); }\n.pill:hover .label, .pill:focus-visible .label, .pill.on .label { max-width: 260px; opacity: 1; padding: 0 14px 0 2px; }\n.pill.on { background: var(--kit-error); border-color: var(--kit-error); color: #fff; }\n.pill.on .logo { width: 30px; height: 30px; margin: 0 1px 0 2px; }\n.pill:focus-visible { outline: 2px solid var(--kit-p); outline-offset: 2px; }\n.panel { position: fixed; left: 12px; bottom: calc(var(--launcher-bottom) + 44px); z-index: 2147483001;\n width: 400px; max-width: calc(100vw - 24px); max-height: min(75vh, 680px); display: flex; flex-direction: column;\n background: var(--u-color-surface, #fff); border: 1px solid var(--u-color-border-light, #d3d3d3); border-radius: var(--u-radius, 10px);\n box-shadow: var(--u-shadow-popup, 0 8px 24px rgba(15,43,94,.16)); }\n.panel.alone { bottom: var(--launcher-bottom); }\n/* \u041F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0430 \u0443 \u043A\u043D\u043E\u043F\u043A\u0438 \u2014 \u043F\u0443\u0437\u044B\u0440\u044C, \u043A\u0430\u043A \u0443 Tooltip \u043A\u0438\u0442\u0430. */\n.hint { position: fixed; left: 12px; bottom: var(--launcher-bottom); z-index: 2147483000;\n max-width: min(360px, calc(100vw - 24px)); padding: 8px 12px; border-radius: var(--u-radius-small, 8px);\n background: var(--u-color-text, #222); color: var(--u-color-surface, #fff); font-size: 12px; box-shadow: var(--u-shadow-popup); }\n.pill ~ .hint { bottom: calc(var(--launcher-bottom) + 44px); }\n/* min-height \u0443 u-message-small \u043E\u0442\u043C\u0435\u043D\u044F\u0435\u0442 \u0437\u0430\u0449\u0438\u0442\u0443 \u0444\u043B\u0435\u043A\u0441-\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 \u043E\u0442 \u0441\u0436\u0430\u0442\u0438\u044F: \u0431\u0435\u0437 flex-shrink \u0442\u0435\u043A\u0441\u0442 \u043E\u0431\u0440\u0435\u0437\u0430\u0435\u0442\u0441\u044F. */\n.note { margin: 0 16px 8px; overflow-wrap: anywhere; flex-shrink: 0; }\n.head { display: flex; align-items: center; gap: 4px; padding: 10px 8px 2px 16px; }\n.title { flex: 1; min-width: 0; font-weight: 600; font-size: 16px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.title .u-selectbox { width: 100%; }\n.title .u-selectbox-select-title { font-weight: 600; }\n.intro, .caption, .escape { margin: 0; color: var(--u-color-text-secondary, #545454); }\n.intro { padding: 0 16px 10px; }\n.tabs { padding: 0 16px 8px; }\n.tabs .u-tab-segment { padding: 6px 4px; }\n.body { overflow: auto; padding: 4px 16px 12px; display: flex; flex-direction: column; gap: 14px; }\n.body .u-search { display: block; width: 100%; }\n.group { display: flex; flex-direction: column; gap: 8px; }\n.group-title { font-weight: 600; color: var(--u-color-text-secondary, #545454); }\n.u-switch { align-items: flex-start; }\n.u-switch .tt { padding-top: 3px; }\n.u-switch .sub { display: block; color: var(--u-color-text-secondary, #545454); font-size: 12px; }\n/* Select \u043A\u0438\u0442\u0430: \u043E\u0442\u043C\u0435\u0442\u043A\u0430 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u043E\u0433\u043E \u0438 \u043F\u0443\u043D\u043A\u0442\u0430 \u043F\u043E\u0434 \u043A\u043B\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u043E\u0439 \u2014 \u043A\u0430\u043A \u0443 Select \u0432 React \u0438 Vue. */\n.u-selectbox-option[aria-selected=\"true\"] { background: var(--u-color-background, #f6f6f6); }\n.u-selectbox-option.active { background: var(--u-color-selected, #e7f2ff); }\n.u-selectbox-select-icon-arrow { transition: transform var(--u-duration-fast) var(--u-ease-standard); }\n.u-selectbox-select-open .u-selectbox-select-icon-arrow { transform: rotate(180deg); }\n.rule { display: flex; align-items: center; gap: 10px; padding: 6px 4px 6px 10px; border-radius: var(--u-radius-small, 8px);\n background: var(--u-color-background-light, #f9f9f9); }\n.rule .text { flex: 1; min-width: 0; font-family: Consolas, monospace; font-size: 12px; overflow-wrap: anywhere; }\n.rule small, .req small, .shown small { display: block; color: var(--u-color-text-secondary, #545454);\n font-family: Montserrat, \"Segoe UI\", Arial, sans-serif; font-size: 12px; }\n.add { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 8px; }\n.add .wide { grid-column: 1 / -1; }\n.add .u-textarea { height: auto; min-height: 76px; font-family: Consolas, monospace; font-size: 12px; resize: vertical; }\n.add .u-form-field__hint { color: var(--u-color-warning, #e98446); }\n.add [type=\"submit\"] { align-self: end; }\n.foot { display: flex; flex-direction: column; gap: 8px; padding: 10px 16px 12px; border-top: 1px solid var(--u-color-border-light, #d3d3d3); }\n.actions { display: flex; gap: 8px; flex-wrap: wrap; }\n.empty { margin: 0; color: var(--u-color-text-secondary, #545454); }\n.list-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; color: var(--u-color-text-secondary, #545454); }\n.requests { display: flex; flex-direction: column; }\n.req { display: grid; grid-template-columns: 52px 1fr auto auto; gap: 8px; align-items: center; padding: 6px 0;\n border-bottom: 1px solid var(--u-color-background, #f6f6f6); font-family: Consolas, monospace; font-size: 12px; }\n.req .path { min-width: 0; overflow-wrap: break-word; }\n/* \u041F\u0443\u0442\u044C \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u0438\u0442\u0441\u044F \u043F\u043E \u00AB/\u00BB (<wbr>), \u0430 \u043D\u0435 \u043F\u043E\u0441\u0440\u0435\u0434\u0438 \u0441\u043B\u043E\u0432\u0430; \u0434\u043B\u0438\u043D\u043D\u044B\u0439 \u043E\u0431\u0440\u0435\u0437\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u0432\u0442\u043E\u0440\u043E\u0439 \u0441\u0442\u0440\u043E\u043A\u0435, \u043F\u043E\u043B\u043D\u044B\u0439 \u2014 \u0432 title. */\n.req .path .p { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; overflow: hidden; }\n.req .u-status { font-family: Montserrat, \"Segoe UI\", Arial, sans-serif; }\n.shown { padding: 8px 0; border-bottom: 1px solid var(--u-color-background, #f6f6f6); }\n.shown-head { display: flex; justify-content: space-between; gap: 8px; color: var(--u-color-text-secondary, #545454); font-size: 12px; }\n.shown-head .kind { font-weight: 600; color: var(--u-color-error, #ef302b); }\n.shown-head .kind.warning { color: var(--u-color-warning, #e98446); }\n.shown-title { font-weight: 600; }\n.shown .cause { margin-top: 2px; font-family: Consolas, monospace; font-size: 12px; }\ndl { display: grid; grid-template-columns: auto 1fr; gap: 6px 12px; margin: 0; }\ndt { color: var(--u-color-text-secondary, #545454); }\ndd { margin: 0; font-family: Consolas, monospace; font-size: 12px; overflow-wrap: anywhere; }\n@media (max-width: 576px) {\n .panel { left: 0; right: 0; bottom: 0; width: auto; max-width: none; max-height: 80vh;\n border-radius: var(--u-radius, 10px) var(--u-radius, 10px) 0 0; padding-bottom: env(safe-area-inset-bottom, 0px); }\n .panel ~ .pill { display: none; }\n}\n@media (prefers-reduced-motion: reduce) { .u-selectbox-select-icon-arrow, .pill, .pill .label { transition: none; } }\n";
@@ -1,5 +1,5 @@
1
1
  import { registerKitCopy$u as e, getKitCopies$u as r, hasLegacyKitOverlay$u as o, kitIdPrefix$u as n } from "../vanilla/core/kitRegistry.js";
2
- const c = "2.1.6", t = () => e("react", c), a = () => n(t());
2
+ const c = "2.1.7-next.1", t = () => e("react", c), a = () => n(t());
3
3
  function p() {
4
4
  return t(), r();
5
5
  }