urfu-ui-kit-react 2.1.5 → 2.1.7-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/dist/components/Accordion/Accordion.d.ts +1 -1
  2. package/dist/components/Accordion/Accordion.d.ts.map +1 -1
  3. package/dist/components/Accordion/Accordion.js +9 -8
  4. package/dist/components/Accordion/Accordion.types.d.ts +2 -0
  5. package/dist/components/Accordion/Accordion.types.d.ts.map +1 -1
  6. package/dist/components/BreadCrumbs/BreadCrumbs.d.ts.map +1 -1
  7. package/dist/components/BreadCrumbs/BreadCrumbs.js +20 -19
  8. package/dist/components/Calendar/Calendar.d.ts.map +1 -1
  9. package/dist/components/Calendar/Calendar.js +145 -144
  10. package/dist/components/Calendar/Calendar.types.d.ts +9 -4
  11. package/dist/components/Calendar/Calendar.types.d.ts.map +1 -1
  12. package/dist/components/Card/Card.d.ts.map +1 -1
  13. package/dist/components/Card/Card.js +37 -31
  14. package/dist/components/ColumnSettings/ColumnSettings.d.ts.map +1 -1
  15. package/dist/components/ColumnSettings/ColumnSettings.js +72 -72
  16. package/dist/components/Drawer/Drawer.d.ts +11 -0
  17. package/dist/components/Drawer/Drawer.d.ts.map +1 -0
  18. package/dist/components/Drawer/Drawer.js +87 -0
  19. package/dist/components/Drawer/Drawer.types.d.ts +44 -0
  20. package/dist/components/Drawer/Drawer.types.d.ts.map +1 -0
  21. package/dist/components/ErrorScreen/ErrorScreen.d.ts.map +1 -1
  22. package/dist/components/ErrorScreen/ErrorScreen.js +172 -138
  23. package/dist/components/FormField/FormField.d.ts +1 -1
  24. package/dist/components/FormField/FormField.d.ts.map +1 -1
  25. package/dist/components/FormField/FormField.js +42 -29
  26. package/dist/components/FormField/FormField.types.d.ts +6 -0
  27. package/dist/components/FormField/FormField.types.d.ts.map +1 -1
  28. package/dist/components/InfiniteScroll/InfiniteScroll.d.ts +22 -0
  29. package/dist/components/InfiniteScroll/InfiniteScroll.d.ts.map +1 -0
  30. package/dist/components/InfiniteScroll/InfiniteScroll.js +27 -0
  31. package/dist/components/InputText/InputText.d.ts +39 -2
  32. package/dist/components/InputText/InputText.d.ts.map +1 -1
  33. package/dist/components/InputText/InputText.js +103 -94
  34. package/dist/components/InputText/InputText.types.d.ts +11 -0
  35. package/dist/components/InputText/InputText.types.d.ts.map +1 -1
  36. package/dist/components/InputTime/inputTimeKeyDown.d.ts +17 -2
  37. package/dist/components/InputTime/inputTimeKeyDown.d.ts.map +1 -1
  38. package/dist/components/InputTime/useInputTimeWheel.d.ts +13 -1
  39. package/dist/components/InputTime/useInputTimeWheel.d.ts.map +1 -1
  40. package/dist/components/Menu/Menu.d.ts.map +1 -1
  41. package/dist/components/Menu/Menu.js +54 -49
  42. package/dist/components/Modal/Modal.d.ts.map +1 -1
  43. package/dist/components/Modal/Modal.js +52 -49
  44. package/dist/components/Modal/Modal.types.d.ts +4 -2
  45. package/dist/components/Modal/Modal.types.d.ts.map +1 -1
  46. package/dist/components/Modal/useModalTitleClearance.js +5 -5
  47. package/dist/components/Multiselect/Multiselect.js +1 -1
  48. package/dist/components/Notification/Notification.d.ts.map +1 -1
  49. package/dist/components/Notification/Notification.js +97 -86
  50. package/dist/components/OfflineBanner/OfflineBanner.d.ts.map +1 -1
  51. package/dist/components/OfflineBanner/OfflineBanner.js +40 -32
  52. package/dist/components/Pagination/Pagination.d.ts.map +1 -1
  53. package/dist/components/Pagination/Pagination.js +61 -66
  54. package/dist/components/SearchSelect/SearchSelect.d.ts.map +1 -1
  55. package/dist/components/SearchSelect/SearchSelect.js +137 -134
  56. package/dist/components/TabPanels/TabPanels.d.ts +13 -0
  57. package/dist/components/TabPanels/TabPanels.d.ts.map +1 -0
  58. package/dist/components/TabPanels/TabPanels.js +8 -0
  59. package/dist/components/Table/Filter/Filter.d.ts.map +1 -1
  60. package/dist/components/Table/Filter/Filter.js +47 -47
  61. package/dist/components/Table/Filter/Filter.types.d.ts +2 -1
  62. package/dist/components/Table/Filter/Filter.types.d.ts.map +1 -1
  63. package/dist/components/Table/Filter/SelectFilter.d.ts.map +1 -1
  64. package/dist/components/Table/Filter/SelectFilter.js +9 -9
  65. package/dist/components/Table/Table.d.ts +1 -1
  66. package/dist/components/Table/Table.d.ts.map +1 -1
  67. package/dist/components/Table/Table.dataPipeline.d.ts +4 -3
  68. package/dist/components/Table/Table.dataPipeline.d.ts.map +1 -1
  69. package/dist/components/Table/Table.dataPipeline.js +63 -62
  70. package/dist/components/Table/Table.js +297 -297
  71. package/dist/components/Table/Table.rowTypes.d.ts +6 -0
  72. package/dist/components/Table/Table.rowTypes.d.ts.map +1 -0
  73. package/dist/components/Table/Table.types.d.ts +10 -3
  74. package/dist/components/Table/Table.types.d.ts.map +1 -1
  75. package/dist/components/Table/TableHead.d.ts +27 -19
  76. package/dist/components/Table/TableHead.d.ts.map +1 -1
  77. package/dist/components/Table/TableHead.js +1 -1
  78. package/dist/components/Table/TableMobileCard.d.ts +11 -11
  79. package/dist/components/Table/TableMobileCard.d.ts.map +1 -1
  80. package/dist/components/Table/TableMobileCard.js +81 -84
  81. package/dist/components/Table/TableMobileView.d.ts +7 -5
  82. package/dist/components/Table/TableMobileView.d.ts.map +1 -1
  83. package/dist/components/Table/TableRow.d.ts +10 -8
  84. package/dist/components/Table/TableRow.d.ts.map +1 -1
  85. package/dist/components/Table/TableRow.js +116 -112
  86. package/dist/components/Table/useTableColumnPinning.d.ts.map +1 -1
  87. package/dist/components/Table/useTableVirtualization.d.ts +5 -5
  88. package/dist/components/Table/useTableVirtualization.d.ts.map +1 -1
  89. package/dist/components/Table/useTableVirtualization.js +20 -20
  90. package/dist/components/Tabs/Tabs.d.ts +1 -1
  91. package/dist/components/Tabs/Tabs.d.ts.map +1 -1
  92. package/dist/components/Tabs/Tabs.js +109 -104
  93. package/dist/components/Tabs/Tabs.types.d.ts +29 -1
  94. package/dist/components/Tabs/Tabs.types.d.ts.map +1 -1
  95. package/dist/components/Tabs/distributeTabs.d.ts +6 -0
  96. package/dist/components/Tabs/distributeTabs.d.ts.map +1 -1
  97. package/dist/components/Tabs/tabsIndicator.d.ts +7 -3
  98. package/dist/components/Tabs/tabsIndicator.d.ts.map +1 -1
  99. package/dist/components/Tabs/tabsScroll.d.ts +20 -0
  100. package/dist/components/Tabs/tabsScroll.d.ts.map +1 -0
  101. package/dist/components/Tabs/useTabsOverflow.d.ts +3 -1
  102. package/dist/components/Tabs/useTabsOverflow.d.ts.map +1 -1
  103. package/dist/components/Tabs/useTabsOverflow.js +32 -32
  104. package/dist/components/Tabs/useTabsScroll.d.ts +4 -0
  105. package/dist/components/Tabs/useTabsScroll.d.ts.map +1 -0
  106. package/dist/components/Tabs/useTabsScroll.js +17 -0
  107. package/dist/components/Textarea/Textarea.d.ts +22 -2
  108. package/dist/components/Textarea/Textarea.d.ts.map +1 -1
  109. package/dist/components/Textarea/Textarea.js +48 -43
  110. package/dist/components/Textarea/Textarea.types.d.ts +1 -0
  111. package/dist/components/Textarea/Textarea.types.d.ts.map +1 -1
  112. package/dist/components/Tooltip/Tooltip.d.ts +1 -1
  113. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  114. package/dist/components/Tooltip/Tooltip.js +151 -132
  115. package/dist/components/Tooltip/Tooltip.types.d.ts +7 -2
  116. package/dist/components/Tooltip/Tooltip.types.d.ts.map +1 -1
  117. package/dist/components/TreeView/TreeView.js +95 -95
  118. package/dist/components/TreeView/TreeView.types.d.ts +1 -1
  119. package/dist/components/TreeView/TreeView.types.d.ts.map +1 -1
  120. package/dist/components/VirtualList/VirtualList.d.ts +45 -0
  121. package/dist/components/VirtualList/VirtualList.d.ts.map +1 -0
  122. package/dist/components/VirtualList/VirtualList.js +62 -0
  123. package/dist/dev/index.js +1306 -584
  124. package/dist/dev/types/react/src/dev/index.d.ts +1 -1
  125. package/dist/dev/types/vanilla/src/core/motion.d.ts +41 -0
  126. package/dist/dev/types/vanilla/src/core/requestLog.d.ts +29 -0
  127. package/dist/dev/types/vanilla/src/dev/highlight.d.ts +32 -0
  128. package/dist/dev/types/vanilla/src/dev/intercept.d.ts +4 -1
  129. package/dist/dev/types/vanilla/src/dev/motionModes.d.ts +30 -0
  130. package/dist/dev/types/vanilla/src/dev/panelKit.d.ts +49 -0
  131. package/dist/dev/types/vanilla/src/dev/panelStyles.d.ts +7 -0
  132. package/dist/dev/types/vanilla/src/dev/rules.d.ts +31 -0
  133. package/dist/dev/types/vanilla/src/dev/store.d.ts +7 -4
  134. package/dist/dev/types/vanilla/src/dev/types.d.ts +14 -3
  135. package/dist/dev/types/vanilla/src/dev/viewModes.d.ts +22 -0
  136. package/dist/hooks/useCollapseMotion.d.ts +18 -0
  137. package/dist/hooks/useCollapseMotion.d.ts.map +1 -0
  138. package/dist/hooks/useCollapseMotion.js +9 -0
  139. package/dist/hooks/useDismiss.d.ts +7 -1
  140. package/dist/hooks/useDismiss.d.ts.map +1 -1
  141. package/dist/hooks/useDismiss.js +19 -17
  142. package/dist/hooks/useEnterMotion.d.ts +9 -0
  143. package/dist/hooks/useEnterMotion.d.ts.map +1 -0
  144. package/dist/hooks/useEnterMotion.js +10 -0
  145. package/dist/hooks/useForwardedRef.d.ts +8 -0
  146. package/dist/hooks/useForwardedRef.d.ts.map +1 -0
  147. package/dist/hooks/useForwardedRef.js +8 -0
  148. package/dist/hooks/useInfiniteScroll.d.ts +27 -0
  149. package/dist/hooks/useInfiniteScroll.d.ts.map +1 -0
  150. package/dist/hooks/useInfiniteScroll.js +13 -0
  151. package/dist/hooks/useMountTransition.d.ts +1 -1
  152. package/dist/hooks/useMountTransition.d.ts.map +1 -1
  153. package/dist/hooks/useMountTransition.js +14 -13
  154. package/dist/hooks/useVirtualList.d.ts +34 -0
  155. package/dist/hooks/useVirtualList.d.ts.map +1 -0
  156. package/dist/hooks/useVirtualList.js +21 -0
  157. package/dist/index.d.ts +15 -1
  158. package/dist/index.d.ts.map +1 -1
  159. package/dist/shared/collapseMotion.d.ts +32 -0
  160. package/dist/shared/collapseMotion.d.ts.map +1 -0
  161. package/dist/shared/infiniteScroll.d.ts +42 -0
  162. package/dist/shared/infiniteScroll.d.ts.map +1 -0
  163. package/dist/shared/kitCopy.js +1 -1
  164. package/dist/shared/linkClick.d.ts +7 -0
  165. package/dist/shared/linkClick.d.ts.map +1 -0
  166. package/dist/shared/motion.d.ts +42 -0
  167. package/dist/shared/motion.d.ts.map +1 -0
  168. package/dist/shared/popupTransition.d.ts +10 -2
  169. package/dist/shared/popupTransition.d.ts.map +1 -1
  170. package/dist/shared/popupTransition.js +6 -5
  171. package/dist/shared/virtualList.d.ts +103 -0
  172. package/dist/shared/virtualList.d.ts.map +1 -0
  173. package/dist/style-no-fonts.css +1 -1
  174. package/dist/style.css +1 -1
  175. package/dist/style.layer.css +2 -2
  176. package/dist/style.shell.css +5 -5
  177. package/dist/urfu-ui-kit-react.js +53 -45
  178. package/dist/utils/describeError.d.ts +12 -1
  179. package/dist/utils/describeError.d.ts.map +1 -1
  180. package/dist/vanilla/core/collapseMotion.js +58 -0
  181. package/dist/vanilla/core/dateMask.js +6 -6
  182. package/dist/vanilla/core/describeError.js +169 -112
  183. package/dist/vanilla/core/distributeTabs.js +23 -20
  184. package/dist/vanilla/core/infiniteScroll.js +79 -0
  185. package/dist/vanilla/core/kitRegistry.js +4 -4
  186. package/dist/vanilla/core/linkClick.js +2 -0
  187. package/dist/vanilla/core/motion.js +29 -0
  188. package/dist/vanilla/core/requestLog.js +40 -0
  189. package/dist/vanilla/core/tabsIndicator.js +29 -26
  190. package/dist/vanilla/core/tabsScroll.js +29 -0
  191. package/dist/vanilla/core/virtualList.js +213 -0
  192. package/package.json +1 -1
@@ -1,141 +1,146 @@
1
- import { jsxs as i, jsx as o } from "react/jsx-runtime";
1
+ import { jsxs as a, jsx as r } from "react/jsx-runtime";
2
2
  /* empty css */
3
3
  /* empty css */
4
4
  /* empty css */
5
5
  /* empty css */
6
- import { useState as Q, useRef as f, useId as V, useEffect as X } from "react";
7
- import { Icon$u as p } from "../Icon/Icon.js";
8
- import { Tooltip$u as Z } from "../Tooltip/Tooltip.js";
9
- import { useDismiss$u as W } from "../../hooks/useDismiss.js";
10
- import { useMountTransition$u as x } from "../../hooks/useMountTransition.js";
11
- import { getPopupTransitionStyle$u as D, POPUP_TRANSITION_MS$u as ee } from "../../shared/popupTransition.js";
12
- import { useTabsOverflow$u as te } from "./useTabsOverflow.js";
13
- import { useTabsIndicator$u as ne } from "./useTabsIndicator.js";
14
- const oe = [], ye = ({
15
- onClick: b,
16
- tabsData: r = oe,
6
+ import { useState as x, useRef as p, useId as D, useEffect as ee, Fragment as oe } from "react";
7
+ import { Icon$u as b } from "../Icon/Icon.js";
8
+ import { Tooltip$u as te } from "../Tooltip/Tooltip.js";
9
+ import { useDismiss$u as re } from "../../hooks/useDismiss.js";
10
+ import { useMountTransition$u as ne } from "../../hooks/useMountTransition.js";
11
+ import { getPopupTransitionStyle$u as se, POPUP_TRANSITION_MS$u as ie } from "../../shared/popupTransition.js";
12
+ import { useTabsOverflow$u as le } from "./useTabsOverflow.js";
13
+ import { useTabsIndicator$u as ae } from "./useTabsIndicator.js";
14
+ import { useTabsScroll$u as ce } from "./useTabsScroll.js";
15
+ import { isPlainLeftClick$u as ue } from "../../vanilla/core/linkClick.js";
16
+ const me = [], Ie = ({
17
+ onClick: h,
18
+ tabsData: n = me,
17
19
  activeTab: m,
18
- className: w = "",
19
- variant: $ = "line",
20
- fullWidth: h = !1,
21
- tooltipOn: P = !1,
22
- tooltipDisabled: M = !1
20
+ className: $ = "",
21
+ variant: g = "line",
22
+ fullWidth: y = !1,
23
+ tooltipOn: U = !1,
24
+ tooltipDisabled: _ = !1,
25
+ LinkComponent: v,
26
+ ariaLabel: B
23
27
  }) => {
24
- const { containerRef: E, measureRef: U, moreMeasureRef: _, visible: B, overflow: l, paddingOf: K, promote: j } = te(r, m, h), [c, a] = Q(!1), v = f(null), y = f(null), O = f(null), R = V(), { shouldRender: q, status: z, isAnimated: C } = x({ isOpen: c, duration: ee }), A = f(l);
25
- c && (A.current = l);
26
- const g = $ === "segment", N = g ? "u-tab-segment" : "u-tab-line", F = g ? "u-tab-segment-active" : "u-tab-active", { trackRef: H, indicatorRef: J } = ne(m, `${$}|${h}|${JSON.stringify(r.map((e) => e.id))}`);
27
- W({ refs: [v], enabled: c, onDismiss: () => a(!1) }), X(() => {
28
- l.length || a(!1);
29
- }, [l.length]);
30
- const T = (e) => {
31
- var n, s;
32
- if ((n = r[e]) != null && n.disabled) return;
33
- const t = l.includes(e);
34
- j(e), a(!1), b == null || b(r[e]), t && ((s = y.current) == null || s.focus({ preventScroll: !0 }));
35
- }, I = () => {
28
+ const { containerRef: K, measureRef: j, moreMeasureRef: q, visible: z, overflow: u, paddingOf: F, promote: L } = le(n, m, y, g !== "segment"), [d, c] = x(!1), R = p(null), N = p(null), k = p(null), O = D(), { shouldRender: H, status: J, isAnimated: Y } = ne({ isOpen: d, duration: ie }), A = p(u);
29
+ d && (A.current = u);
30
+ const f = g === "segment", T = n.some((e) => e.url), w = f ? "u-tab-segment" : "u-tab-line", G = f ? "u-tab-segment-active" : "u-tab-active", { trackRef: I, indicatorRef: Q } = ae(m, `${g}|${y}|${JSON.stringify(n.map((e) => e.id))}`);
31
+ ce(I, !f, m), re({ refs: [R], enabled: d, onDismiss: () => c(!1) }), ee(() => {
32
+ u.length || c(!1);
33
+ }, [u.length]);
34
+ const S = (e) => {
35
+ var t, s;
36
+ if ((t = n[e]) != null && t.disabled) return;
37
+ const o = u.includes(e);
38
+ L(e), c(!1), h == null || h(n[e]), o && ((s = N.current) == null || s.focus({ preventScroll: !0 }));
39
+ }, P = () => {
36
40
  var e;
37
- return Array.from(((e = O.current) == null ? void 0 : e.querySelectorAll('button:not([aria-disabled="true"])')) || []);
38
- }, L = (e) => {
39
- var n;
40
- const t = I();
41
- (n = t[e < 0 ? t.length - 1 : e]) == null || n.focus();
42
- }, Y = (e) => {
43
- var d, u;
44
- const t = I(), n = t.indexOf(document.activeElement), s = e.key === "ArrowDown" ? (n + 1) % t.length : e.key === "ArrowUp" ? (n - 1 + t.length) % t.length : e.key === "Home" ? 0 : e.key === "End" ? t.length - 1 : -1;
45
- s >= 0 ? (e.preventDefault(), (d = t[s]) == null || d.focus()) : e.key === "Escape" && (e.preventDefault(), a(!1), (u = y.current) == null || u.focus());
46
- }, k = (e) => /* @__PURE__ */ o("span", { className: "u-tabs-title", "data-label": e.title, children: e.title }), G = (e) => {
47
- if (!e.icon) return k(e);
48
- const t = e.iconPosition === "right";
49
- return /* @__PURE__ */ i("span", { className: `u-tabs-content${t ? " u-tabs-content-reverse" : ""}`, children: [
50
- /* @__PURE__ */ o(p, { name: e.icon, className: "u-tabs-icon" }),
51
- !e.iconOnly && k(e)
41
+ return Array.from(((e = k.current) == null ? void 0 : e.querySelectorAll('[role="menuitem"]:not([aria-disabled="true"])')) || []);
42
+ }, V = (e) => {
43
+ var t;
44
+ const o = P();
45
+ (t = o[e < 0 ? o.length - 1 : e]) == null || t.focus();
46
+ }, X = (e) => {
47
+ var i, l;
48
+ const o = P(), t = o.indexOf(document.activeElement), s = e.key === "ArrowDown" ? (t + 1) % o.length : e.key === "ArrowUp" ? (t - 1 + o.length) % o.length : e.key === "Home" ? 0 : e.key === "End" ? o.length - 1 : -1;
49
+ s >= 0 ? (e.preventDefault(), (i = o[s]) == null || i.focus()) : e.key === "Escape" && (e.preventDefault(), c(!1), (l = N.current) == null || l.focus());
50
+ }, M = (e) => /* @__PURE__ */ r("span", { className: "u-tabs-title", "data-label": e.title, children: e.title }), Z = (e) => {
51
+ if (!e.icon) return M(e);
52
+ const o = e.iconPosition === "right";
53
+ return /* @__PURE__ */ a("span", { className: `u-tabs-content${o ? " u-tabs-content-reverse" : ""}`, children: [
54
+ /* @__PURE__ */ r(b, { name: e.icon, className: "u-tabs-icon" }),
55
+ !e.iconOnly && M(e)
52
56
  ] });
53
- }, S = (e, t = !1) => {
54
- const n = r[e], s = !!(n.icon && n.iconOnly), d = n.icon ? s ? " u-tab-icon-only" : ` u-tab-with-icon${n.iconPosition === "right" ? " u-tab-icon-right" : ""}` : "", u = /* @__PURE__ */ o(
55
- "button",
56
- {
57
- className: `${N}${d}${n.id === m ? ` ${F}` : ""}${n.disabled ? " u-tab--disabled" : ""}`,
58
- type: "button",
59
- "data-label": s ? void 0 : n.title,
60
- "aria-label": s ? n.title : void 0,
61
- "data-measure-tab": t ? "" : void 0,
62
- style: t ? void 0 : K(e),
63
- tabIndex: t || n.disabled ? -1 : void 0,
64
- "aria-current": !t && n.id === m ? "page" : void 0,
65
- "aria-disabled": !t && n.disabled ? "true" : void 0,
66
- onClick: t ? void 0 : () => T(e),
67
- children: G(n)
68
- }
69
- );
70
- return /* @__PURE__ */ o("div", { className: "u-tabs-item", children: P && !M && !t ? /* @__PURE__ */ o(Z, { tooltipText: n.title, portalOn: !0, className: "u-tabs-tooltip", children: u }) : u }, e);
57
+ }, C = (e, o, t, s = !1) => {
58
+ const i = n[e];
59
+ if (!i.url)
60
+ return /* @__PURE__ */ r("button", { type: "button", ...o, onClick: s ? void 0 : () => S(e), children: t });
61
+ if (s || i.disabled)
62
+ return /* @__PURE__ */ r("a", { ...o, role: o.role ?? (s ? void 0 : "link"), children: t });
63
+ const l = (W) => {
64
+ ue(W) && S(e);
65
+ };
66
+ return v ? /* @__PURE__ */ r(v, { to: i.url, ...o, onClick: l, children: t }) : /* @__PURE__ */ r("a", { href: i.url, ...o, onClick: l, children: t });
67
+ }, E = (e, o = !1) => {
68
+ const t = n[e], s = !!(t.icon && t.iconOnly), i = t.icon ? s ? " u-tab-icon-only" : ` u-tab-with-icon${t.iconPosition === "right" ? " u-tab-icon-right" : ""}` : "", l = C(e, {
69
+ className: `${w}${i}${t.id === m ? ` ${G}` : ""}${t.disabled ? " u-tab--disabled" : ""}`,
70
+ "data-label": s ? void 0 : t.title,
71
+ "aria-label": s ? t.title : void 0,
72
+ "data-measure-tab": o ? "" : void 0,
73
+ // Не хватает места — сначала ужимаются отступы вкладок, подпись остаётся целой.
74
+ style: o ? void 0 : F(e),
75
+ // Отключённая вкладка не попадает в обход по Tab; нативный disabled не ставим —
76
+ // он гасит события мыши, и подсказка с объяснением не показалась бы.
77
+ tabIndex: o || t.disabled ? -1 : void 0,
78
+ "aria-current": !o && t.id === m ? "page" : void 0,
79
+ "aria-disabled": !o && t.disabled ? "true" : void 0
80
+ }, Z(t), o);
81
+ return /* @__PURE__ */ r("div", { className: "u-tabs-item", children: U && !_ && !o ? /* @__PURE__ */ r(te, { tooltipText: t.title, portalOn: !0, className: "u-tabs-tooltip", children: l }) : l }, e);
71
82
  };
72
- return /* @__PURE__ */ i(
73
- "div",
83
+ return /* @__PURE__ */ a(
84
+ T ? "nav" : "div",
74
85
  {
75
- ref: E,
76
- className: `u-tabs ${g ? "u-tabs-segment" : "u-tabs-line"}${h ? " u-tabs-full-width" : ""}${w ? ` ${w}` : ""}`,
86
+ ref: K,
87
+ className: `u-tabs ${f ? "u-tabs-segment" : "u-tabs-line"}${y ? " u-tabs-full-width" : ""}${$ ? ` ${$}` : ""}`,
88
+ "aria-label": T ? B : void 0,
77
89
  children: [
78
- /* @__PURE__ */ i("div", { className: "u-tabs-track", ref: H, children: [
79
- /* @__PURE__ */ o("span", { className: "u-tabs-indicator", ref: J, "aria-hidden": "true" }),
80
- B.map((e) => S(e)),
81
- l.length > 0 && /* @__PURE__ */ i(
90
+ /* @__PURE__ */ a("div", { className: "u-tabs-track", ref: I, children: [
91
+ /* @__PURE__ */ r("span", { className: "u-tabs-indicator", ref: Q, "aria-hidden": "true" }),
92
+ z.map((e) => E(e)),
93
+ u.length > 0 && /* @__PURE__ */ a(
82
94
  "div",
83
95
  {
84
96
  className: "u-tabs-more",
85
- ref: v,
86
- onKeyDown: Y,
97
+ ref: R,
98
+ onKeyDown: X,
87
99
  onBlur: (e) => {
88
- const t = e.relatedTarget;
89
- t && !e.currentTarget.contains(t) && a(!1);
100
+ const o = e.relatedTarget;
101
+ o && !e.currentTarget.contains(o) && c(!1);
90
102
  },
91
103
  children: [
92
- /* @__PURE__ */ i(
104
+ /* @__PURE__ */ a(
93
105
  "button",
94
106
  {
95
107
  type: "button",
96
- ref: y,
97
- className: `${N} u-tabs-more-trigger`,
98
- "aria-expanded": c,
108
+ ref: N,
109
+ className: `${w} u-tabs-more-trigger`,
110
+ "aria-expanded": d,
99
111
  "aria-haspopup": "menu",
100
- "aria-controls": R,
101
- onClick: () => a((e) => !e),
112
+ "aria-controls": O,
113
+ onClick: () => c((e) => !e),
102
114
  onKeyDown: (e) => {
103
- (e.key === "ArrowDown" || e.key === "ArrowUp") && (e.preventDefault(), e.stopPropagation(), a(!0), requestAnimationFrame(() => L(e.key === "ArrowUp" ? -1 : 0)));
115
+ (e.key === "ArrowDown" || e.key === "ArrowUp") && (e.preventDefault(), e.stopPropagation(), c(!0), requestAnimationFrame(() => V(e.key === "ArrowUp" ? -1 : 0)));
104
116
  },
105
117
  children: [
106
- /* @__PURE__ */ o("span", { children: "Ещё" }),
107
- /* @__PURE__ */ o(p, { name: "down", size: 14, rotate: c ? 180 : 0 })
118
+ /* @__PURE__ */ r("span", { children: "Ещё" }),
119
+ /* @__PURE__ */ r(b, { name: "down", size: 14, rotate: d ? 180 : 0 })
108
120
  ]
109
121
  }
110
122
  ),
111
- q && /* @__PURE__ */ o("div", { className: "u-tabs-more-menu", role: "menu", id: R, ref: O, style: D(z, C), children: A.current.filter((e) => r[e]).map((e) => /* @__PURE__ */ o(
112
- "button",
113
- {
114
- type: "button",
115
- role: "menuitem",
116
- "aria-disabled": r[e].disabled ? "true" : void 0,
117
- tabIndex: r[e].disabled ? -1 : void 0,
118
- onClick: () => T(e),
119
- children: r[e].icon ? /* @__PURE__ */ i("span", { className: "u-tabs-content", children: [
120
- /* @__PURE__ */ o(p, { name: r[e].icon, className: "u-tabs-icon" }),
121
- /* @__PURE__ */ o("span", { children: r[e].title })
122
- ] }) : r[e].title
123
- },
124
- e
125
- )) })
123
+ H && /* @__PURE__ */ r("div", { className: "u-tabs-more-menu", role: "menu", id: O, ref: k, style: se(J, Y), children: A.current.filter((e) => n[e]).map((e) => /* @__PURE__ */ r(oe, { children: C(e, {
124
+ role: "menuitem",
125
+ "aria-disabled": n[e].disabled ? "true" : void 0,
126
+ tabIndex: n[e].disabled ? -1 : void 0
127
+ }, n[e].icon ? /* @__PURE__ */ a("span", { className: "u-tabs-content", children: [
128
+ /* @__PURE__ */ r(b, { name: n[e].icon, className: "u-tabs-icon" }),
129
+ /* @__PURE__ */ r("span", { children: n[e].title })
130
+ ] }) : n[e].title) }, e)) })
126
131
  ]
127
132
  }
128
133
  )
129
134
  ] }),
130
- /* @__PURE__ */ i("div", { ref: U, className: "u-tabs-measure", "aria-hidden": "true", children: [
131
- r.map((e, t) => S(t, !0)),
132
- /* @__PURE__ */ i("button", { ref: _, type: "button", tabIndex: -1, className: `${N} u-tabs-more-trigger u-tabs-more-measure`, children: [
133
- /* @__PURE__ */ o("span", { children: "Ещё" }),
134
- /* @__PURE__ */ o(p, { name: "down", size: 14 })
135
+ /* @__PURE__ */ a("div", { ref: j, className: "u-tabs-measure", "aria-hidden": "true", children: [
136
+ n.map((e, o) => E(o, !0)),
137
+ f && /* @__PURE__ */ a("button", { ref: q, type: "button", tabIndex: -1, className: `${w} u-tabs-more-trigger u-tabs-more-measure`, children: [
138
+ /* @__PURE__ */ r("span", { children: "Ещё" }),
139
+ /* @__PURE__ */ r(b, { name: "down", size: 14 })
135
140
  ] })
136
141
  ] })
137
142
  ]
138
143
  }
139
144
  );
140
145
  };
141
- export { ye as Tabs$u };
146
+ export { Ie as Tabs$u };
@@ -1,6 +1,13 @@
1
+ import type { ComponentType, CSSProperties, MouseEvent, ReactNode } from 'react';
1
2
  export type TabsDataProperties = Partial<{
2
3
  id: string | number;
3
4
  title: string;
5
+ /**
6
+ * Адрес раздела. Есть хотя бы у одной вкладки — вкладки становятся ссылками (режим навигации):
7
+ * Ctrl/Cmd/Shift/средний клик и «Открыть в новой вкладке» работают как у обычной ссылки,
8
+ * обычный клик вызывает `onClick`, как раньше. Без `LinkComponent` — `<a href>` с переходом браузера.
9
+ */
10
+ url: string;
4
11
  /** Имя иконки кита (как у `Icon`): `'list-view'`, `'table-view'` и т. д. Без него вкладка — только текст. */
5
12
  icon: string;
6
13
  /** Сторона иконки относительно текста; по умолчанию слева. */
@@ -12,11 +19,24 @@ export type TabsDataProperties = Partial<{
12
19
  iconOnly: boolean;
13
20
  /**
14
21
  * Вкладку нельзя выбрать: клик и Enter не вызывают `onClick`, кнопка с `aria-disabled="true"`
15
- * выпадает из обхода по Tab и стрелками в меню «Ещё», вид приглушён. Если она уже активна
22
+ * выпадает из обхода по Tab и стрелками в меню «Ещё» сегментов, вид приглушён. Если она уже активна
16
23
  * (`activeTab`), выбор не меняется — кит её не переключает сам.
17
24
  */
18
25
  disabled: boolean;
19
26
  }>;
27
+ /** Пропсы, которые кит передаёт `LinkComponent` вкладки-ссылки (как у `Link` react-router). */
28
+ export type TabsLinkProperties = {
29
+ to: string;
30
+ className?: string;
31
+ children?: ReactNode;
32
+ onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;
33
+ tabIndex?: number;
34
+ style?: CSSProperties;
35
+ role?: string;
36
+ 'aria-current'?: 'page';
37
+ 'aria-label'?: string;
38
+ 'data-label'?: string;
39
+ };
20
40
  export type TabsProperties = Partial<{
21
41
  onClick: (...args: unknown[]) => unknown;
22
42
  tabsData: Array<TabsDataProperties>;
@@ -32,5 +52,13 @@ export type TabsProperties = Partial<{
32
52
  tooltipOn: boolean;
33
53
  /** Отключает китовую подсказку и при `tooltipOn`; по умолчанию false. */
34
54
  tooltipDisabled: boolean;
55
+ /**
56
+ * Компонент ссылки роутера для вкладок с `url` (react-router `Link`): получает `to={url}`, классы
57
+ * и обработчик клика, обычный клик переходит без перезагрузки страницы. Без него — `<a href>`.
58
+ * Функция наряду с `ComponentType`: `to` у `Link` шире строки, а `propTypes` в `ComponentType` это запрещают.
59
+ */
60
+ LinkComponent: ComponentType<TabsLinkProperties> | ((props: TabsLinkProperties) => ReactNode);
61
+ /** Подпись области навигации (`<nav aria-label>`) в режиме ссылок, если на странице несколько `nav`. */
62
+ ariaLabel: string;
35
63
  }>;
36
64
  //# sourceMappingURL=Tabs.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.types.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/Tabs.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC;IACrC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,6GAA6G;IAC7G,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;CACrB,CAAC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC;IACjC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;IACzC,QAAQ,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,qFAAqF;IACrF,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,eAAe,EAAE,OAAO,CAAC;CAC5B,CAAC,CAAC"}
1
+ {"version":3,"file":"Tabs.types.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/Tabs.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjF,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC;IACrC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,6GAA6G;IAC7G,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B;;;OAGG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;CACrB,CAAC,CAAC;AAEH,+FAA+F;AAC/F,MAAM,MAAM,kBAAkB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC;IACjC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;IACzC,QAAQ,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACpC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,qFAAqF;IACrF,SAAS,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,eAAe,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,aAAa,EAAE,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,kBAAkB,KAAK,SAAS,CAAC,CAAC;IAC9F,wGAAwG;IACxG,SAAS,EAAE,MAAM,CAAC;CACrB,CAAC,CAAC"}
@@ -5,6 +5,12 @@ export declare const TAB_PADDING_MIN_RATIO = 0.4;
5
5
  * Ровно столько, чтобы вкладки вместе с «Ещё» поместились в контейнер.
6
6
  */
7
7
  export declare const tabsSqueeze: (visible: number[], widths: number[], cuts: number[], availableWidth: number, gap: number, moreWidth: number, withMore: boolean) => number;
8
+ /**
9
+ * Ужатие отступов линейных вкладок: они не прячутся в «Ещё», а прокручиваются (tabsScroll.ts).
10
+ * Ужимаем, только если так помещаются все; не помещаются и ужатыми — обычные отступы и прокрутка,
11
+ * тесные вкладки в прокручиваемом ряду ничего не дают.
12
+ */
13
+ export declare const lineTabsSqueeze: (order: number[], widths: number[], cuts: number[], availableWidth: number, gap: number) => number;
8
14
  /**
9
15
  * Индексы сохраняют порядок и исходные объекты tabsData, включая дополнительные поля.
10
16
  * `cuts` — на сколько каждую вкладку можно сузить за счёт боковых отступов. Прежде чем прятать
@@ -1 +1 @@
1
- {"version":3,"file":"distributeTabs.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/distributeTabs.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,SAAS,MAAM,EAAE,EACjB,QAAQ,MAAM,EAAE,EAChB,MAAM,MAAM,EAAE,EACd,gBAAgB,MAAM,EACtB,KAAK,MAAM,EACX,WAAW,MAAM,EACjB,UAAU,OAAO,WAUlB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,OAAO,MAAM,EAAE,EACf,QAAQ,MAAM,EAAE,EAChB,gBAAgB,MAAM,EACtB,KAAK,MAAM,EACX,WAAW,MAAM,EACjB,aAAa,MAAM,EACnB,mBAAiB,EACjB,OAAM,MAAM,EAAO;;cAcwB,MAAM,EAAE;CAsBpD,CAAC"}
1
+ {"version":3,"file":"distributeTabs.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/distributeTabs.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,WAAW,GACtB,SAAS,MAAM,EAAE,EACjB,QAAQ,MAAM,EAAE,EAChB,MAAM,MAAM,EAAE,EACd,gBAAgB,MAAM,EACtB,KAAK,MAAM,EACX,WAAW,MAAM,EACjB,UAAU,OAAO,WAUlB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,EAAE,EAAE,QAAQ,MAAM,EAAE,EAAE,MAAM,MAAM,EAAE,EAAE,gBAAgB,MAAM,EAAE,KAAK,MAAM,WAGrH,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,OAAO,MAAM,EAAE,EACf,QAAQ,MAAM,EAAE,EAChB,gBAAgB,MAAM,EACtB,KAAK,MAAM,EACX,WAAW,MAAM,EACjB,aAAa,MAAM,EACnB,mBAAiB,EACjB,OAAM,MAAM,EAAO;;cAcwB,MAAM,EAAE;CAsBpD,CAAC"}
@@ -1,14 +1,18 @@
1
- /** Длительность переезда подсветки активной вкладки, мс. */
2
- export declare const TABS_INDICATOR_MS = 200;
1
+ /** Длительность переезда подсветки активной вкладки, мс — `--u-duration-base` шкалы движения. */
2
+ export declare const TABS_INDICATOR_MS: 200;
3
3
  /**
4
4
  * Подсветка активной вкладки — один элемент `.u-tabs-indicator` на ряд `.u-tabs-track`.
5
5
  * Встаёт на кнопку с `aria-current="page"`; переезжает к ней, только когда сменилась активная
6
6
  * вкладка при том же составе. Первый показ, смена размеров и состава, prefers-reduced-motion — без переезда.
7
+ * Ряд сменил размер посреди переезда — подсветка доезжает до нового места плавно, а не прыгает.
7
8
  */
8
9
  export declare const createTabsIndicator: () => {
9
10
  /** После каждой отрисовки. layout — состав и вид вкладок: при его смене подсветка не едет. */
10
11
  update(track: HTMLElement | null, indicator: HTMLElement | null, active: unknown, layout: string): void;
11
- /** Ряд сменил размер (окно, загрузка шрифтов) — встать на место без переезда. */
12
+ /**
13
+ * Ряд сменил размер (окно, шрифты, полоса прокрутки страницы) — встать на место без переезда.
14
+ * Посреди переезда — доехать до нового места: `transition: none` оборвал бы его прыжком.
15
+ */
12
16
  refresh(track: HTMLElement | null, indicator: HTMLElement | null): void;
13
17
  };
14
18
  //# sourceMappingURL=tabsIndicator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tabsIndicator.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/tabsIndicator.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAQrC;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;IAmC5B,8FAA8F;kBAChF,WAAW,GAAG,IAAI,aAAa,WAAW,GAAG,IAAI,UAAU,OAAO,UAAU,MAAM;IAMhG,iFAAiF;mBAClE,WAAW,GAAG,IAAI,aAAa,WAAW,GAAG,IAAI;CAInE,CAAC"}
1
+ {"version":3,"file":"tabsIndicator.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/tabsIndicator.ts"],"names":[],"mappings":"AAEA,iGAAiG;AACjG,eAAO,MAAM,iBAAiB,KAAiB,CAAC;AAMhD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;IAyC5B,8FAA8F;kBAChF,WAAW,GAAG,IAAI,aAAa,WAAW,GAAG,IAAI,UAAU,OAAO,UAAU,MAAM;IAOhG;;;OAGG;mBACY,WAAW,GAAG,IAAI,aAAa,WAAW,GAAG,IAAI;CAInE,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Прокрутка ряда линейных вкладок `.u-tabs-line > .u-tabs-track` (решение дизайнера 28.10.2026):
3
+ * не поместившиеся вкладки не прячутся в «Ещё», ряд прокручивается, как в ЛК-профиле.
4
+ * За краем есть вкладки — на треке атрибут `data-fade-start` / `data-fade-end`, по нему tabs.css
5
+ * затухает край. Ширина затухания — `scroll-padding-inline` трека: на неё активная вкладка
6
+ * отступает от края при прокрутке к ней.
7
+ */
8
+ export declare const createTabsScroll: (track: HTMLElement) => {
9
+ /** После каждой отрисовки: состав и отступы вкладок меняют ширину содержимого, а не трека. */
10
+ fade: () => void;
11
+ /**
12
+ * Прокрутить ряд к активной вкладке (`aria-current="page"`), если она за краем или под затуханием.
13
+ * Вкладка шире ряда без затуханий — по центру: иначе у последней вкладки ряд вставал в паре
14
+ * пикселей от конца и правый край оставался под затуханием.
15
+ * Только `scrollLeft` трека: `scrollIntoView` прокрутил бы и страницу к вкладкам.
16
+ */
17
+ reveal(smooth: boolean): void;
18
+ destroy(): void;
19
+ };
20
+ //# sourceMappingURL=tabsScroll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabsScroll.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/tabsScroll.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,WAAW;IAa/C,8FAA8F;;IAE9F;;;;;OAKG;mBACY,OAAO;;CAwBzB,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import type { TabsDataProperties } from './Tabs.types';
2
- export declare const useTabsOverflow: (tabs: TabsDataProperties[], activeTab: string | number | undefined, fullWidth: boolean) => {
2
+ export declare const useTabsOverflow: (tabs: TabsDataProperties[], activeTab: string | number | undefined, fullWidth: boolean,
3
+ /** Линейные вкладки: все в ряду, не поместившиеся прокручиваются, без «Ещё» (решение дизайнера 28.10.2026). */
4
+ scroll: boolean) => {
3
5
  paddingOf: (index: number) => {
4
6
  paddingLeft: number;
5
7
  paddingRight: number;
@@ -1 +1 @@
1
- {"version":3,"file":"useTabsOverflow.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/useTabsOverflow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,eAAO,MAAM,eAAe,GAC1B,MAAM,kBAAkB,EAAE,EAC1B,WAAW,MAAM,GAAG,MAAM,GAAG,SAAS,EACtC,WAAW,OAAO;uBAoEQ,MAAM;;;;qBAOR,MAAM;;;;;;CAY/B,CAAC"}
1
+ {"version":3,"file":"useTabsOverflow.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/useTabsOverflow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGvD,eAAO,MAAM,eAAe,GAC1B,MAAM,kBAAkB,EAAE,EAC1B,WAAW,MAAM,GAAG,MAAM,GAAG,SAAS,EACtC,WAAW,OAAO;AAClB,+GAA+G;AAC/G,QAAQ,OAAO;uBAoEW,MAAM;;;;qBAOR,MAAM;;;;;;CAY/B,CAAC"}
@@ -1,49 +1,49 @@
1
- import { useRef as R, useState as B, useCallback as P, useLayoutEffect as T } from "react";
2
- import { TAB_PADDING_MIN_RATIO$u as _, distributeTabs$u as D, tabsSqueeze$u as G } from "../../vanilla/core/distributeTabs.js";
3
- const K = (l, y, g) => {
4
- const u = R(null), p = R(null), O = R(null), m = JSON.stringify(l.map((t) => t.id)), L = l.map((t, e) => e), [F, q] = B({ signature: m, order: L }), h = F.signature === m ? F.order : L, [r, M] = B({ widths: [], paddings: [], available: 0, gap: 0, more: 0 }), i = P(() => {
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
5
  var x;
6
- const t = u.current, e = p.current;
6
+ const t = g.current, e = m.current;
7
7
  if (!t || !e) return;
8
- const n = getComputedStyle(t), d = 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]")), w = s.map((o) => o.getBoundingClientRect().width), v = s.map((o) => {
9
- const c = getComputedStyle(o);
10
- return [parseFloat(c.paddingLeft) || 0, parseFloat(c.paddingRight) || 0];
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
+ const c = getComputedStyle(i);
10
+ return [Number.parseFloat(c.paddingLeft) || 0, Number.parseFloat(c.paddingRight) || 0];
11
11
  }), f = {
12
- widths: w,
13
- paddings: v,
14
- available: d,
15
- gap: parseFloat(n.columnGap || "0") || 0,
16
- more: ((x = O.current) == null ? void 0 : x.getBoundingClientRect().width) || 0
12
+ widths: v,
13
+ paddings: R,
14
+ available: a,
15
+ gap: Number.parseFloat(n.columnGap || "0") || 0,
16
+ more: ((x = L.current) == null ? void 0 : x.getBoundingClientRect().width) || 0
17
17
  };
18
- M((o) => o.available === f.available && o.gap === f.gap && o.more === f.more && o.widths.length === w.length && o.widths.every((c, b) => c === w[b]) && o.paddings.every(([c, b], A) => {
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
19
  var E, I;
20
- return c === ((E = v[A]) == null ? void 0 : E[0]) && b === ((I = v[A]) == null ? void 0 : I[1]);
21
- }) ? o : f);
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
- T(() => {
24
- var n, d;
25
- i();
23
+ D(() => {
24
+ var n, a;
25
+ o();
26
26
  let t = !1;
27
- const e = typeof ResizeObserver > "u" ? null : new ResizeObserver(i);
28
- return u.current && (e == null || e.observe(u.current)), p.current && (e == null || e.observe(p.current)), window.addEventListener("resize", i), (n = document.fonts) == null || n.addEventListener("loadingdone", i), (d = document.fonts) == null || d.ready.then(() => {
29
- t || i();
27
+ const e = typeof ResizeObserver > "u" ? null : new ResizeObserver(o);
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
+ t || o();
30
30
  }), () => {
31
31
  var s;
32
- t = !0, e == null || e.disconnect(), window.removeEventListener("resize", i), (s = document.fonts) == null || s.removeEventListener("loadingdone", i);
32
+ t = !0, e == null || e.disconnect(), window.removeEventListener("resize", o), (s = document.fonts) == null || s.removeEventListener("loadingdone", o);
33
33
  };
34
- }, [i, l, g]);
35
- const N = y === void 0 ? -1 : l.findIndex((t) => t.id === y), S = r.widths.length === l.length && r.widths.every((t) => t > 0), z = g ? [] : r.paddings.map(([t, e]) => (t + e) * (1 - _)), a = S ? D(h, r.widths, r.available, r.gap, r.more, N, g, z) : { visible: h, overflow: [] }, C = S && !g ? G(a.visible, r.widths, z, r.available, r.gap, r.more, a.overflow.length > 0) : 0;
36
- return { containerRef: u, measureRef: p, moreMeasureRef: O, ...a, 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
38
  if (!C || !e) return;
39
- const n = 1 - C * (1 - _);
39
+ const n = 1 - C * (1 - B);
40
40
  return { paddingLeft: e[0] * n, paddingRight: e[1] * n };
41
41
  }, promote: (t) => {
42
- if (!a.overflow.includes(t)) return;
43
- const e = a.visible[a.visible.length - 1];
42
+ if (!d.overflow.includes(t)) return;
43
+ const e = d.visible[d.visible.length - 1];
44
44
  if (e === void 0) return;
45
- const n = [...h], d = n.indexOf(t), s = n.indexOf(e);
46
- [n[d], n[s]] = [n[s], n[d]], q({ signature: m, 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
- export { K as useTabsOverflow$u };
49
+ export { U as useTabsOverflow$u };
@@ -0,0 +1,4 @@
1
+ import { type RefObject } from 'react';
2
+ /** Ряд линейных вкладок прокручивается к активной, края за которыми есть вкладки затухают (tabsScroll.ts). */
3
+ export declare const useTabsScroll: (trackRef: RefObject<HTMLDivElement | null>, enabled: boolean, activeTab: string | number | undefined) => void;
4
+ //# sourceMappingURL=useTabsScroll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTabsScroll.d.ts","sourceRoot":"","sources":["../../../src/components/Tabs/useTabsScroll.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGhE,8GAA8G;AAC9G,eAAO,MAAM,aAAa,GAAI,UAAU,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,WAAW,MAAM,GAAG,MAAM,GAAG,SAAS,SAyBjI,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { useRef as u, useLayoutEffect as s } from "react";
2
+ import { createTabsScroll$u as f } from "../../vanilla/core/tabsScroll.js";
3
+ const i = (c, l, e) => {
4
+ const t = u(null), n = u(e);
5
+ s(() => {
6
+ const r = c.current;
7
+ if (!l || !r) return;
8
+ const o = f(r);
9
+ return t.current = o, o.reveal(!1), () => {
10
+ o.destroy(), t.current = null;
11
+ };
12
+ }, [l, c]), s(() => {
13
+ const r = t.current;
14
+ r && (r.fade(), n.current !== e && (n.current = e, r.reveal(!0)));
15
+ });
16
+ };
17
+ export { i as useTabsScroll$u };
@@ -1,4 +1,24 @@
1
1
 
2
- import { TextareaProperties } from './Textarea.types';
3
- export declare const Textarea: ({ "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-describedby": ariaDescribedBy, title, placeholder, defaultValue, value, id: providedId, name, onChange, required, disabled, lineUp, rowGap, columnGap, styleInputContainer, styleTitle, styleInput, className, size, validationText, validationOn, }: TextareaProperties) => import("react/jsx-runtime").JSX.Element;
2
+ export declare const Textarea: import("react").ForwardRefExoticComponent<import("../..").FieldAccessibilityProps & Partial<{
3
+ title: string;
4
+ placeholder: string;
5
+ defaultValue: string;
6
+ value: string;
7
+ id: string;
8
+ name: string;
9
+ onChange: React.ChangeEventHandler<HTMLTextAreaElement>;
10
+ onBlur: React.FocusEventHandler<HTMLTextAreaElement>;
11
+ required: boolean;
12
+ disabled: boolean;
13
+ lineUp: boolean;
14
+ rowGap: string | number;
15
+ columnGap: string | number;
16
+ styleInputContainer: import("react").CSSProperties;
17
+ styleTitle: import("react").CSSProperties;
18
+ styleInput: import("react").CSSProperties;
19
+ className: string;
20
+ size: import("../..").FieldSize;
21
+ validationText: string;
22
+ validationOn: boolean;
23
+ }> & import("react").RefAttributes<HTMLTextAreaElement>>;
4
24
  //# sourceMappingURL=Textarea.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../src/components/Textarea/Textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAMrD,eAAO,MAAM,QAAQ,GAAI,0TAuBtB,kBAAkB,4CAqFpB,CAAA"}
1
+ {"version":3,"file":"Textarea.d.ts","sourceRoot":"","sources":["../../../src/components/Textarea/Textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC;AAQ1C,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;wDA+GnB,CAAC"}