urfu-ui-kit-react 2.1.7-next.0 → 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.
@@ -1 +1 @@
1
- {"version":3,"file":"StickyActionBar.d.ts","sourceRoot":"","sources":["../../../src/components/StickyActionBar/StickyActionBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC5E,OAAO,kCAAkC,CAAC;AAC1C,OAAO,gEAAgE,CAAC;AAGxE,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wFAAwF;IACxF,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC,CAAC;AAEH,eAAO,MAAM,eAAe,GAAI,sCAAmD,oBAAoB,4CAyHtG,CAAC"}
1
+ {"version":3,"file":"StickyActionBar.d.ts","sourceRoot":"","sources":["../../../src/components/StickyActionBar/StickyActionBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC5E,OAAO,kCAAkC,CAAC;AAC1C,OAAO,gEAAgE,CAAC;AAExE,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wFAAwF;IACxF,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC,CAAC;AAEH,eAAO,MAAM,eAAe,GAAI,sCAAmD,oBAAoB,4CAiGtG,CAAC"}
@@ -1,73 +1,60 @@
1
- import { jsx as A } from "react/jsx-runtime";
2
- import { useRef as N, useState as H, useEffect as k } from "react";
1
+ import { jsx as z } from "react/jsx-runtime";
2
+ import { useRef as A, useState as N, useEffect as F } from "react";
3
3
  /* empty css */
4
4
  /* empty css */
5
- import { setDevLauncherOffset$u as E, occupiedFromBottom$u as I } from "../../vanilla/core/devLauncherOffset.js";
6
- const Y = ({ children: R, className: S = "", mobileFixed: c = !1 }) => {
7
- const p = N(null), [m, v] = H(!1);
8
- return k(() => {
9
- const t = p.current;
10
- if (!t) return;
5
+ const O = ({ children: k, className: E = "", mobileFixed: c = !1 }) => {
6
+ const m = A(null), [L, f] = N(!1);
7
+ return F(() => {
8
+ const e = m.current;
9
+ if (!e) return;
11
10
  if (c) {
12
- v(!1);
11
+ f(!1);
13
12
  return;
14
13
  }
15
- const i = window.matchMedia("(max-width: 576px)");
14
+ const a = window.matchMedia("(max-width: 576px)");
16
15
  let o;
17
- const n = () => {
16
+ const l = () => {
18
17
  o == null || o(), o = void 0;
19
- const r = "--u-sticky-action-bar-scroll-padding", d = "--u-sticky-action-bar-left-inset", g = "--u-sticky-action-bar-right-inset", B = [r, d, g].map((e) => [e, t.style.getPropertyValue(e)]), h = (e, s) => {
20
- const u = String(s) + "px";
21
- t.style.getPropertyValue(e) !== u && t.style.setProperty(e, u);
18
+ const u = "--u-sticky-action-bar-scroll-padding", g = "--u-sticky-action-bar-left-inset", w = "--u-sticky-action-bar-right-inset", S = [u, g, w].map((t) => [t, e.style.getPropertyValue(t)]), v = (t, r) => {
19
+ const i = String(r) + "px";
20
+ e.style.getPropertyValue(t) !== i && e.style.setProperty(t, i);
22
21
  };
23
- let a = null;
22
+ let n = null;
24
23
  const b = () => {
25
- let e = t.parentElement;
26
- for (; e && !/(auto|scroll|hidden|overlay)/.test(getComputedStyle(e).overflowY); )
27
- e = e.parentElement;
28
- const s = i.matches && e && Number.parseFloat(getComputedStyle(e).paddingBottom) || 0, u = String(s) + "px";
29
- t.style.getPropertyValue(r) !== u && t.style.setProperty(r, u);
30
- const x = e ? e.getBoundingClientRect().top + e.clientTop + e.clientHeight : window.innerHeight, P = t.style.getPropertyValue("position"), z = t.style.getPropertyPriority("position");
31
- t.style.setProperty("position", "static", "important");
32
- const f = "u-react-sticky-action-bar-stuck", C = t.classList.contains(f);
33
- t.classList.remove(f);
34
- const w = t.getBoundingClientRect();
35
- C && t.classList.add(f);
36
- const L = e ? e.getBoundingClientRect().left + e.clientLeft : 0, V = e ? e.clientWidth : window.innerWidth;
37
- h(d, Math.max(0, w.left - L)), h(g, Math.max(0, L + V - w.right));
38
- const M = w.bottom;
39
- P ? t.style.setProperty("position", P, z) : t.style.removeProperty("position");
40
- const O = (Number.parseFloat(getComputedStyle(t).bottom) || 0) + s;
41
- v(M > x - O + 1);
42
- }, l = () => {
43
- a === null && (a = window.requestAnimationFrame(() => {
44
- a = null, b();
24
+ let t = e.parentElement;
25
+ for (; t && !/(auto|scroll|hidden|overlay)/.test(getComputedStyle(t).overflowY); )
26
+ t = t.parentElement;
27
+ const r = a.matches && t && Number.parseFloat(getComputedStyle(t).paddingBottom) || 0, i = String(r) + "px";
28
+ e.style.getPropertyValue(u) !== i && e.style.setProperty(u, i);
29
+ const R = t ? t.getBoundingClientRect().top + t.clientTop + t.clientHeight : window.innerHeight, h = e.style.getPropertyValue("position"), x = e.style.getPropertyPriority("position");
30
+ e.style.setProperty("position", "static", "important");
31
+ const d = "u-react-sticky-action-bar-stuck", B = e.classList.contains(d);
32
+ e.classList.remove(d);
33
+ const y = e.getBoundingClientRect();
34
+ B && e.classList.add(d);
35
+ const P = t ? t.getBoundingClientRect().left + t.clientLeft : 0, C = t ? t.clientWidth : window.innerWidth;
36
+ v(g, Math.max(0, y.left - P)), v(w, Math.max(0, P + C - y.right));
37
+ const V = y.bottom;
38
+ h ? e.style.setProperty("position", h, x) : e.style.removeProperty("position");
39
+ const M = (Number.parseFloat(getComputedStyle(e).bottom) || 0) + r;
40
+ f(V > R - M + 1);
41
+ }, s = () => {
42
+ n === null && (n = window.requestAnimationFrame(() => {
43
+ n = null, b();
45
44
  }));
46
45
  };
47
- b(), window.addEventListener("scroll", l, { capture: !0, passive: !0 }), window.addEventListener("resize", l);
48
- const y = new ResizeObserver(l);
49
- y.observe(t), t.parentElement && y.observe(t.parentElement), o = () => {
50
- window.removeEventListener("scroll", l, !0), window.removeEventListener("resize", l), y.disconnect();
51
- for (const [e, s] of B)
52
- s ? t.style.setProperty(e, s) : t.style.removeProperty(e);
53
- a !== null && window.cancelAnimationFrame(a);
46
+ b(), window.addEventListener("scroll", s, { capture: !0, passive: !0 }), window.addEventListener("resize", s);
47
+ const p = new ResizeObserver(s);
48
+ p.observe(e), e.parentElement && p.observe(e.parentElement), o = () => {
49
+ window.removeEventListener("scroll", s, !0), window.removeEventListener("resize", s), p.disconnect();
50
+ for (const [t, r] of S)
51
+ r ? e.style.setProperty(t, r) : e.style.removeProperty(t);
52
+ n !== null && window.cancelAnimationFrame(n);
54
53
  };
55
54
  };
56
- return n(), i.addEventListener("change", n), () => {
57
- i.removeEventListener("change", n), o == null || o();
55
+ return l(), a.addEventListener("change", l), () => {
56
+ a.removeEventListener("change", l), o == null || o();
58
57
  };
59
- }, [c]), k(() => {
60
- const t = p.current;
61
- if (!t) return;
62
- const i = {}, o = window.matchMedia("(max-width: 576px)"), n = () => {
63
- const d = m || c && o.matches;
64
- E(i, d ? I(t) : null);
65
- };
66
- n();
67
- const r = typeof ResizeObserver < "u" ? new ResizeObserver(n) : void 0;
68
- return r == null || r.observe(t), window.addEventListener("resize", n), o.addEventListener("change", n), () => {
69
- r == null || r.disconnect(), window.removeEventListener("resize", n), o.removeEventListener("change", n), E(i, null);
70
- };
71
- }, [m, c]), /* @__PURE__ */ A("footer", { ref: p, className: "u-react-sticky-action-bar " + (m ? "u-react-sticky-action-bar-stuck u-react-sticky-action-bar-shadow " : "") + (c ? "u-react-sticky-action-bar-mobile-fixed " : "") + S, children: R });
58
+ }, [c]), /* @__PURE__ */ z("footer", { ref: m, className: "u-react-sticky-action-bar " + (L ? "u-react-sticky-action-bar-stuck u-react-sticky-action-bar-shadow " : "") + (c ? "u-react-sticky-action-bar-mobile-fixed " : "") + E, children: k });
72
59
  };
73
- export { Y as StickyActionBar$u };
60
+ export { O as StickyActionBar$u };
@@ -1 +1 @@
1
- {"version":3,"file":"FilterStringBox.d.ts","sourceRoot":"","sources":["../../../../src/components/Table/Filter/FilterStringBox.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGxE,eAAO,MAAM,eAAe,GAAI,kQAI7B,cAAc,GAAG,iBAAiB,4CA0EpC,CAAC"}
1
+ {"version":3,"file":"FilterStringBox.d.ts","sourceRoot":"","sources":["../../../../src/components/Table/Filter/FilterStringBox.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGxE,eAAO,MAAM,eAAe,GAAI,kQAI7B,cAAc,GAAG,iBAAiB,4CA4EpC,CAAC"}
@@ -1,14 +1,14 @@
1
- import { jsx as c } from "react/jsx-runtime";
1
+ import { jsx as u } from "react/jsx-runtime";
2
2
  import { FilterConditionSelect$u as q } from "./FilterConditionSelect.js";
3
3
  import { getColumnSortDirection$u as B, getFilterResetLabel$u as k } from "./filterBoxHelpers.js";
4
- import { selectNumber$u as v, selectText$u as ee } from "./SelectOptions.js";
4
+ import { selectNumber$u as g, selectText$u as ee } from "./SelectOptions.js";
5
5
  import { FilterBoxShell$u as te } from "./FilterBoxShell.js";
6
6
  import { TableFilterOptions$u as E } from "./TableFilterOptions.js";
7
7
  import { useState as H, useEffect as ie } from "react";
8
8
  import { useServerFilterOptions$u as oe } from "./useServerFilterOptions.js";
9
9
  import { usePagedFilterOptions$u as re } from "./usePagedFilterOptions.js";
10
10
  import { filterExpressionSummary$u as ne, parseFilterNumber$u as se, matchesNumeric$u as le } from "./filterExpression.js";
11
- import { getFilterSelectedCount$u as ae, isServerFilterActive$u as de } from "../Table.helpers.js";
11
+ import { getFilterSelectedCount$u as de, isServerFilterActive$u as ae } from "../Table.helpers.js";
12
12
  const Ne = ({
13
13
  column: i,
14
14
  anchorRef: M,
@@ -16,48 +16,53 @@ const Ne = ({
16
16
  width: j,
17
17
  label: z,
18
18
  tableRight: I,
19
- typeFilterSearch: b,
19
+ typeFilterSearch: h,
20
20
  setTypeFilterSearch: G,
21
- handleSort: O,
22
- sort: d,
21
+ handleSort: C,
22
+ sort: m,
23
23
  textSearch: J,
24
24
  setTextSearch: K,
25
25
  searched: Q,
26
- checkBoxes: g,
27
- uncheckedValues: x,
26
+ checkBoxes: b,
27
+ uncheckedValues: A,
28
28
  setUncheckedValues: V,
29
29
  embedded: W,
30
- basePages: C,
31
- baseOptions: A,
30
+ basePages: T,
31
+ baseOptions: l,
32
32
  onSelectedCountChange: f
33
33
  }) => {
34
- const e = i.filterServer, [o, X] = H(""), h = i.filterType === "number", l = (e == null ? void 0 : e.type) === "values" && h && i.filterShowConditions === !0, [F, Y] = H(v[0]), T = !!A && (l || !o.trim()), Z = oe(T ? void 0 : e, l ? "" : o), S = T ? A : Z, r = (e == null ? void 0 : e.type) === "values" ? e.paged : void 0, R = Number(o.trim().replace(",", ".")), s = l && o.trim() && Number.isFinite(R) ? { operator: F.id === "1" ? "gt" : F.id === "2" ? "lt" : "eq", value: R } : void 0, w = !!C && !o.trim() && !s, _ = re(w ? void 0 : r, l && s ? "" : o.trim(), s), u = w ? C : _, m = r ? u : S, N = (e == null ? void 0 : e.type) === "values" ? ae({
34
+ const e = i.filterServer, [o, X] = H(""), F = i.filterType === "number", d = (e == null ? void 0 : e.type) === "values" && F && i.filterShowConditions === !0, [S, Y] = H(g[0]), O = !!l && (d || !o.trim()), Z = oe(
35
+ O ? void 0 : e,
36
+ d ? "" : o,
37
+ !0,
38
+ l != null && l.complete ? l.options : void 0
39
+ ), N = O ? l : Z, r = (e == null ? void 0 : e.type) === "values" ? e.paged : void 0, R = Number(o.trim().replace(",", ".")), s = d && o.trim() && Number.isFinite(R) ? { operator: S.id === "1" ? "gt" : S.id === "2" ? "lt" : "eq", value: R } : void 0, w = !!T && !o.trim() && !s, _ = re(w ? void 0 : r, d && s ? "" : o.trim(), s), v = w ? T : _, p = r ? v : N, y = (e == null ? void 0 : e.type) === "values" ? de({
35
40
  filter: e,
36
- pagedSummary: r ? ne(r.expression, u.options, u.complete && !o.trim() && !s) : void 0,
37
- loadedOptions: !r && S.complete && !o.trim() ? S.options : void 0
41
+ pagedSummary: r ? ne(r.expression, v.options, v.complete && !o.trim() && !s) : void 0,
42
+ loadedOptions: !r && N.complete && !o.trim() ? N.options : void 0
38
43
  }) : void 0;
39
44
  ie(() => {
40
- N !== void 0 && (f == null || f(N));
41
- }, [N, f]);
42
- const $ = r || !l || !o.trim() ? m.options : s ? m.options.filter((t) => {
45
+ y !== void 0 && (f == null || f(y));
46
+ }, [y, f]);
47
+ const $ = r || !d || !o.trim() ? p.options : s ? p.options.filter((t) => {
43
48
  if (t.value === null || typeof t.value == "boolean" || t.value === "") return !1;
44
49
  const n = se(t.label, t.value);
45
50
  return n !== void 0 && le(n, s);
46
- }) : [], L = de(e), U = (d == null ? void 0 : d.column) === i.field, D = (t) => h && t !== null && t !== "" && Number.isFinite(Number(t)) ? new Intl.NumberFormat("ru-RU", i.roundUpTo ? {
51
+ }) : [], L = ae(e), U = (m == null ? void 0 : m.column) === i.field, D = (t) => F && t !== null && t !== "" && Number.isFinite(Number(t)) ? new Intl.NumberFormat("ru-RU", i.roundUpTo ? {
47
52
  minimumFractionDigits: i.roundUpTo,
48
53
  maximumFractionDigits: i.roundUpTo
49
54
  } : void 0).format(Number(t)).replace(",", ".") : String(t ?? "");
50
- return /* @__PURE__ */ c(te, { embedded: W, customContent: !!e, adaptiveHeight: i.filterAdaptiveHeight, anchorRef: M, tableRight: I, boxRef: P, width: j, label: z, children: (e == null ? void 0 : e.type) === "values" ? /* @__PURE__ */ c(
55
+ return /* @__PURE__ */ u(te, { embedded: W, customContent: !!e, adaptiveHeight: i.filterAdaptiveHeight, anchorRef: M, tableRight: I, boxRef: P, width: j, label: z, children: (e == null ? void 0 : e.type) === "values" ? /* @__PURE__ */ u(
51
56
  E,
52
57
  {
53
- ...m,
54
- onRetry: m.retry,
58
+ ...p,
59
+ onRetry: p.retry,
55
60
  options: $,
56
- allOptions: m.options,
61
+ allOptions: p.options,
57
62
  virtualize: !!r,
58
63
  paged: r,
59
64
  numeric: s,
60
- paging: r ? u : void 0,
65
+ paging: r ? v : void 0,
61
66
  onReset: e.resetVisible !== !1 && (L || U) ? e.onReset : void 0,
62
67
  resetLabel: k(U, L),
63
68
  selection: e.selection,
@@ -67,45 +72,45 @@ const Ne = ({
67
72
  searchLabel: e.searchLabel,
68
73
  optionsAlreadyFiltered: !0,
69
74
  selectFoundOnSearch: e.selectFoundOnSearch,
70
- onSort: O,
71
- conditionControl: l ? /* @__PURE__ */ c(
75
+ onSort: C,
76
+ conditionControl: d ? /* @__PURE__ */ u(
72
77
  q,
73
78
  {
74
- value: F,
75
- options: v,
79
+ value: S,
80
+ options: g,
76
81
  onChange: (t) => {
77
82
  var a;
78
- const n = (a = t.typeFilterSearch) == null ? void 0 : a.id, p = v.find((y) => y.id === n);
79
- p && Y(p);
83
+ const n = (a = t.typeFilterSearch) == null ? void 0 : a.id, c = g.find((x) => x.id === n);
84
+ c && Y(c);
80
85
  },
81
86
  portalOn: !0
82
87
  }
83
88
  ) : void 0,
84
- sort: B(d, i.field)
89
+ sort: B(m, i.field)
85
90
  }
86
- ) : /* @__PURE__ */ c(
91
+ ) : /* @__PURE__ */ u(
87
92
  E,
88
93
  {
89
94
  options: (Q ?? []).map((t) => ({ value: t, label: D(t) })),
90
- allOptions: (g ?? []).map((t) => ({ value: t, label: D(t) })),
91
- values: (g ?? []).filter((t) => {
95
+ allOptions: (b ?? []).map((t) => ({ value: t, label: D(t) })),
96
+ values: (b ?? []).filter((t) => {
92
97
  var n;
93
- return !((n = x[i.field]) != null && n.includes(t));
98
+ return !((n = A[i.field]) != null && n.includes(t));
94
99
  }),
95
100
  search: J,
96
101
  onSearchChange: K,
97
102
  optionsAlreadyFiltered: !0,
98
103
  onChange: (t) => {
99
- const n = new Set(t), p = (g ?? []).filter((y) => !n.has(y)), a = { ...x };
100
- p.length ? a[i.field] = p : delete a[i.field], V(a);
104
+ const n = new Set(t), c = (b ?? []).filter((x) => !n.has(x)), a = { ...A };
105
+ c.length ? a[i.field] = c : delete a[i.field], V(a);
101
106
  },
102
- onSort: O,
103
- sort: B(d, i.field),
104
- conditionControl: i.filterShowConditions === !1 ? void 0 : /* @__PURE__ */ c(
107
+ onSort: C,
108
+ sort: B(m, i.field),
109
+ conditionControl: i.filterShowConditions === !1 ? void 0 : /* @__PURE__ */ u(
105
110
  q,
106
111
  {
107
- value: b == null ? void 0 : b.typeFilterSearch,
108
- options: h ? v : ee,
112
+ value: h == null ? void 0 : h.typeFilterSearch,
113
+ options: F ? g : ee,
109
114
  onChange: G
110
115
  }
111
116
  )
@@ -1,5 +1,8 @@
1
+ import type { TableFilterOption } from './TableFilterOptions';
1
2
  /** Общий текст отказа загрузки вариантов фильтра. */
2
3
  export declare const FILTER_LOAD_ERROR = "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0444\u0438\u043B\u044C\u0442\u0440\u0430. \u041F\u043E\u043F\u0440\u043E\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0451 \u0440\u0430\u0437.";
3
4
  /** Поиск ждёт паузу ввода; первая загрузка без условий идёт сразу. */
4
- export declare const getFilterSearchDelay: (search: string, hasNumeric?: boolean) => 0 | 300;
5
+ export declare const getFilterSearchDelay: (search: string, hasNumeric?: boolean, delay?: number) => number;
6
+ /** Прошлые варианты, суженные по подписи без учёта регистра, — пока не пришёл ответ на новый поиск. */
7
+ export declare function narrowFilterOptions<Value>(options: readonly TableFilterOption<Value>[], search: string): readonly TableFilterOption<Value>[];
5
8
  //# sourceMappingURL=filterLoading.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"filterLoading.d.ts","sourceRoot":"","sources":["../../../../src/components/Table/Filter/filterLoading.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,eAAO,MAAM,iBAAiB,oTAA+D,CAAC;AAE9F,sEAAsE;AACtE,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,EAAE,oBAAkB,YAA0C,CAAC"}
1
+ {"version":3,"file":"filterLoading.d.ts","sourceRoot":"","sources":["../../../../src/components/Table/Filter/filterLoading.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,qDAAqD;AACrD,eAAO,MAAM,iBAAiB,oTAA+D,CAAC;AAE9F,sEAAsE;AACtE,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,EAAE,oBAAkB,EAAE,cAAW,WAA4C,CAAC;AAEjI,uGAAuG;AACvG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,iBAAiB,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,uCAGtG"}
@@ -1,2 +1,6 @@
1
- const r = "Не удалось загрузить значения фильтра. Попробуйте ещё раз.", R = (e, t = !1) => e.trim() || t ? 300 : 0;
2
- export { r as FILTER_LOAD_ERROR$u, R as getFilterSearchDelay$u };
1
+ const o = "Не удалось загрузить значения фильтра. Попробуйте ещё раз.", a = (e, t = !1, r = 300) => e.trim() || t ? r : 0;
2
+ function n(e, t) {
3
+ const r = t.trim().toLocaleLowerCase("ru");
4
+ return r ? e.filter((l) => l.label.toLocaleLowerCase("ru").includes(r)) : e;
5
+ }
6
+ export { o as FILTER_LOAD_ERROR$u, a as getFilterSearchDelay$u, n as narrowFilterOptions$u };
@@ -1,6 +1,8 @@
1
1
  import type { TableServerFilter, TableFilterValue } from '../Table.filterTypes';
2
2
  import type { TableFilterOption } from './TableFilterOptions';
3
- export declare function useServerFilterOptions(filter: TableServerFilter | undefined, search: string, enabled?: boolean): {
3
+ type Options = readonly TableFilterOption<TableFilterValue>[];
4
+ /** `fallback` — уже загруженный полный набор, который сужается, пока у этого хука нет своего ответа. */
5
+ export declare function useServerFilterOptions(filter: TableServerFilter | undefined, search: string, enabled?: boolean, fallback?: Options): {
4
6
  options: readonly TableFilterOption<TableFilterValue>[];
5
7
  error: string;
6
8
  loading: boolean;
@@ -8,4 +10,5 @@ export declare function useServerFilterOptions(filter: TableServerFilter | undef
8
10
  complete: boolean;
9
11
  retry: () => void;
10
12
  };
13
+ export {};
11
14
  //# sourceMappingURL=useServerFilterOptions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useServerFilterOptions.d.ts","sourceRoot":"","sources":["../../../../src/components/Table/Filter/useServerFilterOptions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,UAAO;;;;IA6BxG,sGAAsG;;;EAGzG"}
1
+ {"version":3,"file":"useServerFilterOptions.d.ts","sourceRoot":"","sources":["../../../../src/components/Table/Filter/useServerFilterOptions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,KAAK,OAAO,GAAG,SAAS,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,CAAC;AAQ9D,wGAAwG;AACxG,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,UAAO,EAAE,QAAQ,CAAC,EAAE,OAAO;;;;IAwC5H,sGAAsG;;;EAGzG"}
@@ -1,35 +1,38 @@
1
- import { useState as S, useRef as m, useEffect as x } from "react";
2
- import { FILTER_LOAD_ERROR$u as D, getFilterSearchDelay$u as L } from "./filterLoading.js";
3
- function k(n, e, s = !0) {
4
- var v, w, y;
5
- const t = (n == null ? void 0 : n.type) === "values" && !n.paged ? n.loadOptions : void 0, [c, i] = S({ options: [], loading: !!t }), [u, A] = S(0), l = m(!1), r = m(), a = m(!1), g = ((v = r.current) == null ? void 0 : v.loader) === t && ((w = r.current) == null ? void 0 : w.search) === e, d = g && ((y = r.current) == null ? void 0 : y.attempt) === u;
6
- x(() => {
7
- var O, R, E;
8
- if (!t || !s || ((O = r.current) == null ? void 0 : O.loader) === t && ((R = r.current) == null ? void 0 : R.search) === e && ((E = r.current) == null ? void 0 : E.attempt) === u && a.current) return;
9
- r.current = { loader: t, search: e, attempt: u }, a.current = !1;
10
- const o = new AbortController(), F = l.current;
11
- l.current = !1, i((p) => ({ options: [], loading: !0, error: F ? p.error : void 0 }));
12
- const T = window.setTimeout(() => {
13
- t(e, o.signal).then((p) => {
14
- o.signal.aborted || (a.current = !0, i({ options: p, loading: !1 }));
1
+ import { useState as b, useRef as y, useEffect as C, useMemo as I } from "react";
2
+ import { FILTER_LOAD_ERROR$u as M, getFilterSearchDelay$u as Q, narrowFilterOptions$u as j } from "./filterLoading.js";
3
+ function q(o, t, c) {
4
+ return o.loader !== t ? c : o.error ? void 0 : o.options;
5
+ }
6
+ function G(o, t, c = !0, h) {
7
+ var D, E, F;
8
+ const s = (o == null ? void 0 : o.type) === "values" && !o.paged ? o : void 0, r = s == null ? void 0 : s.loadOptions, g = s == null ? void 0 : s.searchDelay, [e, f] = b({ options: [], loading: !!r }), [a, x] = b(0), m = y(!1), n = y(), u = y(!1), O = ((D = n.current) == null ? void 0 : D.loader) === r && ((E = n.current) == null ? void 0 : E.search) === t, l = O && ((F = n.current) == null ? void 0 : F.attempt) === a;
9
+ C(() => {
10
+ var S, A, T;
11
+ if (!r || !c || ((S = n.current) == null ? void 0 : S.loader) === r && ((A = n.current) == null ? void 0 : A.search) === t && ((T = n.current) == null ? void 0 : T.attempt) === a && u.current) return;
12
+ n.current = { loader: r, search: t, attempt: a }, u.current = !1;
13
+ const i = new AbortController(), _ = m.current;
14
+ m.current = !1, f((p) => ({ ...p, loading: !0, error: _ ? p.error : void 0 }));
15
+ const k = window.setTimeout(() => {
16
+ r(t, i.signal).then((p) => {
17
+ i.signal.aborted || (u.current = !0, f({ options: p, loading: !1, loader: r }));
15
18
  }).catch(() => {
16
- o.signal.aborted || (a.current = !0, i({ options: [], loading: !1, error: D }));
19
+ i.signal.aborted || (u.current = !0, f({ options: [], loading: !1, error: M, loader: r }));
17
20
  });
18
- }, L(e));
21
+ }, Q(t, !1, g));
19
22
  return () => {
20
- o.abort(), window.clearTimeout(T);
23
+ i.abort(), window.clearTimeout(k);
21
24
  };
22
- }, [t, e, u, s]);
23
- const f = !!t && s && (!d || c.loading);
25
+ }, [r, t, a, c, g]);
26
+ const v = !!r && c, w = v && (!l || e.loading), d = v ? q(e, r, h) : void 0, R = I(() => !w && l ? e.options : d ? j(d, t) : [], [w, l, e.options, d, t]), L = w && !R.length && (!d || g !== 0);
24
27
  return {
25
- options: d ? c.options : [],
26
- error: g ? c.error : void 0,
27
- loading: f,
28
+ options: R,
29
+ error: O ? e.error : void 0,
30
+ loading: L,
28
31
  /** Словарь загружен для текущего запроса; пустой список выключенного загрузчика сюда не относится. */
29
- complete: !!t && s && d && !f && !c.error,
32
+ complete: v && l && !e.loading && !e.error,
30
33
  retry: () => {
31
- l.current = !0, A((o) => o + 1);
34
+ m.current = !0, x((i) => i + 1);
32
35
  }
33
36
  };
34
37
  }
35
- export { k as useServerFilterOptions$u };
38
+ export { G as useServerFilterOptions$u };
@@ -53,6 +53,11 @@ export type TableServerFilter = {
53
53
  /** Можно скрыть локальный сброс, оставив общий сброс в тулбаре сервиса. */
54
54
  resetVisible?: boolean;
55
55
  loadOptions: (search: string, signal: AbortSignal) => Promise<readonly TableFilterOption<TableFilterValue>[]>;
56
+ /**
57
+ * Пауза ввода перед `loadOptions` при поиске, мс (по умолчанию 300). `0` — для загрузчика без сети,
58
+ * который режет готовый набор: варианты обновляются сразу. Порционный режим `paged` её не использует.
59
+ */
60
+ searchDelay?: number;
56
61
  searchLabel?: string;
57
62
  /** При поиске массовый выбор затрагивает только найденные варианты. */
58
63
  selectFoundOnSearch?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"Table.filterTypes.d.ts","sourceRoot":"","sources":["../../../src/components/Table/Table.filterTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Table.filterTypes.d.ts","sourceRoot":"","sources":["../../../src/components/Table/Table.filterTypes.ts"],"names":[],"mappings":"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"}
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.7-next.0";
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.7-next.0", 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
  }
@@ -14,5 +14,10 @@
14
14
  * Слушатели пассивные, на `document`, вешаются один раз за загрузку страницы — на все
15
15
  * копии кита сразу (оболочка ЛК и сервисы): ставит их первая копия, см. `claimKitOnce`.
16
16
  */
17
+ /**
18
+ * Включает ли нажатие режим клавиатуры. В текстовом поле — только Tab: иначе пробел
19
+ * в поиске, кликнутом мышью, подсвечивал бы поле посреди набора.
20
+ */
21
+ export declare function isKeyboardNavigation(e: Pick<KeyboardEvent, "key" | "target">): boolean;
17
22
  export declare function installInputModeTracking(): void;
18
23
  //# sourceMappingURL=inputMode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inputMode.d.ts","sourceRoot":"","sources":["../../src/utils/inputMode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAQH,wBAAgB,wBAAwB,IAAI,IAAI,CA0B/C"}
1
+ {"version":3,"file":"inputMode.d.ts","sourceRoot":"","sources":["../../src/utils/inputMode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAuBH;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,QAAQ,CAAC,GAAG,OAAO,CAGtF;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAsB/C"}
@@ -225,7 +225,7 @@ function G() {
225
225
  return `${e <= 576 ? "mobile" : e <= 900 ? "tablet" : "desktop"} (по ширине окна, шкала urfu не включена)`;
226
226
  }
227
227
  function T() {
228
- return "2.1.7-next.0";
228
+ return "2.1.7-next.1";
229
229
  }
230
230
  function z(t) {
231
231
  if (!(!s.roles && !t))
@@ -1,17 +1,24 @@
1
- import { claimKitOnce$u as o } from "./kitRegistry.js";
2
- const i = "data-input-mode";
3
- let n = !1;
4
- function u() {
5
- if (n || typeof document > "u" || (n = !0, !o("input-mode"))) return;
6
- const e = (t) => {
7
- document.documentElement.setAttribute(i, t);
8
- }, r = /* @__PURE__ */ new Set(["Tab", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End", "Enter", " "]);
1
+ import { claimKitOnce$u as r } from "./kitRegistry.js";
2
+ const o = "data-input-mode";
3
+ let t = !1;
4
+ const i = /* @__PURE__ */ new Set(["Tab", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End", "Enter", " "]), u = /* @__PURE__ */ new Set(["checkbox", "radio", "range", "button", "submit", "reset", "image", "file", "color"]);
5
+ function a(e) {
6
+ return e instanceof HTMLElement ? e instanceof HTMLTextAreaElement ? !e.readOnly : e instanceof HTMLInputElement ? !e.readOnly && !u.has(e.type) : e.isContentEditable : !1;
7
+ }
8
+ function s(e) {
9
+ return i.has(e.key) ? e.key === "Tab" || !a(e.target) : !1;
10
+ }
11
+ function c() {
12
+ if (t || typeof document > "u" || (t = !0, !r("input-mode"))) return;
13
+ const e = (n) => {
14
+ document.documentElement.setAttribute(o, n);
15
+ };
9
16
  document.addEventListener(
10
17
  "keydown",
11
- (t) => {
12
- r.has(t.key) && e("keyboard");
18
+ (n) => {
19
+ s(n) && e("keyboard");
13
20
  },
14
21
  { capture: !0, passive: !0 }
15
22
  ), document.addEventListener("pointerdown", () => e("pointer"), { capture: !0, passive: !0 }), e("pointer");
16
23
  }
17
- export { u as installInputModeTracking$u };
24
+ export { c as installInputModeTracking$u, s as isKeyboardNavigation$u };
package/package.json CHANGED
@@ -12,7 +12,7 @@
12
12
  ],
13
13
  "license": "UNLICENSED",
14
14
  "private": false,
15
- "version": "2.1.7-next.0",
15
+ "version": "2.1.7-next.1",
16
16
  "type": "module",
17
17
  "main": "dist/urfu-ui-kit-react",
18
18
  "types": "dist/index.d.ts",
@@ -1,8 +0,0 @@
1
- /** Высота, которую занимает у нижнего края панель `owner`; `null` — панель не у края. */
2
- export declare function setDevLauncherOffset(owner: object, px: number | null): void;
3
- /**
4
- * Сколько занимает элемент от нижнего края окна до своего верха; `null` — элемент не виден
5
- * (`display: none` и т. п.): у него `top` 0, и кнопка dev улетела бы к верху экрана.
6
- */
7
- export declare const occupiedFromBottom: (node: Element) => number | null;
8
- //# sourceMappingURL=devLauncherOffset.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"devLauncherOffset.d.ts","sourceRoot":"","sources":["../../src/shared/devLauncherOffset.ts"],"names":[],"mappings":"AAwBA,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAI3E;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,OAAO,KAAG,MAAM,GAAG,IAI3D,CAAC"}
@@ -1,20 +0,0 @@
1
- const o = "--u-dev-launcher-bottom";
2
- const n = /* @__PURE__ */ new Map();
3
- function r() {
4
- if (typeof document > "u") return;
5
- const t = document.documentElement;
6
- if (n.size === 0) {
7
- t.style.removeProperty(o);
8
- return;
9
- }
10
- const e = `calc(${Math.round(Math.max(...n.values()))}px + 12px)`;
11
- t.style.getPropertyValue(o) !== e && t.style.setProperty(o, e);
12
- }
13
- function u(t, e) {
14
- e === null ? n.delete(t) : n.set(t, Math.max(0, e)), r();
15
- }
16
- const c = (t) => {
17
- const e = t.getBoundingClientRect();
18
- return e.width === 0 && e.height === 0 ? null : window.innerHeight - e.top;
19
- };
20
- export { c as occupiedFromBottom$u, u as setDevLauncherOffset$u };