@elcrm/components 0.2.13 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/README.md +76 -38
  2. package/dist/ActionGroup-DcApj_Mz.js +27 -0
  3. package/dist/ActionGroup.css +1 -1
  4. package/dist/ActionGroup.d.ts +19 -19
  5. package/dist/ActionGroup.js +1 -1
  6. package/dist/Avatar-eGdLrMCv.js +113 -0
  7. package/dist/Avatar.css +1 -1
  8. package/dist/Avatar.d.ts +4 -4
  9. package/dist/Avatar.js +1 -1
  10. package/dist/AvatarGroup-Dq-UrOaC.js +81 -0
  11. package/dist/AvatarGroup.css +1 -1
  12. package/dist/AvatarGroup.d.ts +8 -28
  13. package/dist/AvatarGroup.js +1 -1
  14. package/dist/AvatarName-3B4yCxHn.js +68 -0
  15. package/dist/AvatarName.css +1 -1
  16. package/dist/AvatarName.js +1 -1
  17. package/dist/Badge-BjScAXGy.js +28 -0
  18. package/dist/Badge.css +1 -1
  19. package/dist/Badge.js +1 -1
  20. package/dist/Banner-DAY18FWO.js +34 -0
  21. package/dist/Banner.css +1 -1
  22. package/dist/Banner.js +1 -1
  23. package/dist/Brand-BfCuiyf7.js +34 -0
  24. package/dist/Brand.css +1 -1
  25. package/dist/Brand.d.ts +8 -10
  26. package/dist/Brand.js +1 -1
  27. package/dist/Breadcrumb-DM_hWw5n.js +98 -0
  28. package/dist/Breadcrumb.css +1 -1
  29. package/dist/Breadcrumb.d.ts +8 -5
  30. package/dist/Breadcrumb.js +1 -1
  31. package/dist/Card-a7N8Uh_H.js +12 -0
  32. package/dist/Card.css +1 -1
  33. package/dist/Card.js +1 -1
  34. package/dist/ChatFrame-BdSYRF-B.js +37 -0
  35. package/dist/ChatFrame.css +1 -1
  36. package/dist/ChatList.js +2 -2
  37. package/dist/{ChatMessages-B8rdXiK-.js → ChatMessages-CLxwRGIa.js} +1 -1
  38. package/dist/ChatMessages.js +1 -1
  39. package/dist/ChatSplit-8iw_1Shp.js +21 -0
  40. package/dist/CodeBlock-B3wvMejv.js +34 -0
  41. package/dist/CodeBlock.css +1 -1
  42. package/dist/CodeBlock.js +1 -1
  43. package/dist/Dropdown-CR_XxNak.js +185 -0
  44. package/dist/Dropdown.css +1 -1
  45. package/dist/Dropdown.d.ts +4 -94
  46. package/dist/Dropdown.js +1 -1
  47. package/dist/EmptyState-B_wWPjUu.js +23 -0
  48. package/dist/EmptyState.css +1 -1
  49. package/dist/EmptyState.d.ts +1 -1
  50. package/dist/EmptyState.js +1 -1
  51. package/dist/{Footer-qxUlnPR9.js → Footer-Bgh_JCUe.js} +4 -4
  52. package/dist/Footer.css +1 -1
  53. package/dist/Footer.js +1 -1
  54. package/dist/Header-BMDIi3u2.js +21 -0
  55. package/dist/Header.css +1 -1
  56. package/dist/Header.js +1 -1
  57. package/dist/Healthmap-Z-LLfGW0.js +359 -0
  58. package/dist/Healthmap.css +1 -1
  59. package/dist/Healthmap.d.ts +25 -3
  60. package/dist/Healthmap.js +1 -1
  61. package/dist/{Item-D4okhsfW.js → Item-CGpkMJu0.js} +13 -13
  62. package/dist/Item.css +1 -1
  63. package/dist/Item.d.ts +7 -7
  64. package/dist/Item.js +1 -1
  65. package/dist/ItemColumn-Ch61LqE0.js +41 -0
  66. package/dist/ItemColumn.css +1 -1
  67. package/dist/ItemColumn.js +1 -1
  68. package/dist/Layout-CzEGKl9s.js +31 -0
  69. package/dist/Layout.css +1 -1
  70. package/dist/Layout.d.ts +1 -1
  71. package/dist/Layout.js +1 -1
  72. package/dist/List-D13pqaUY.js +12 -0
  73. package/dist/List.css +1 -1
  74. package/dist/List.js +1 -1
  75. package/dist/Loading-C_CKD-zt.js +16 -0
  76. package/dist/Loading.css +1 -1
  77. package/dist/Loading.d.ts +1 -1
  78. package/dist/Loading.js +1 -1
  79. package/dist/Menu-D2kf7fN_.js +72 -0
  80. package/dist/Menu.css +1 -1
  81. package/dist/Menu.d.ts +7 -25
  82. package/dist/Menu.js +1 -1
  83. package/dist/NavSections-CNxxBMPT.js +154 -0
  84. package/dist/NavSections.css +1 -1
  85. package/dist/NavSections.d.ts +16 -28
  86. package/dist/NavSections.js +1 -1
  87. package/dist/PageHead-BfClTLrF.js +31 -0
  88. package/dist/PageHead.css +1 -1
  89. package/dist/PageHead.d.ts +1 -1
  90. package/dist/PageHead.js +1 -1
  91. package/dist/PageShell-BAJges-G.js +30 -0
  92. package/dist/PageShell.css +1 -1
  93. package/dist/PageShell.js +1 -1
  94. package/dist/PanelInfo-Db5GCr-c.js +137 -0
  95. package/dist/PanelInfo.css +1 -1
  96. package/dist/PanelInfo.d.ts +16 -9
  97. package/dist/PanelInfo.js +1 -1
  98. package/dist/Popover-xEZoMY-h.js +143 -0
  99. package/dist/Popover.css +1 -1
  100. package/dist/Popover.d.ts +40 -11
  101. package/dist/Popover.js +1 -1
  102. package/dist/PricingGroup-CWy47MlE.js +138 -0
  103. package/dist/PricingGroup.css +1 -1
  104. package/dist/PricingGroup.d.ts +0 -2
  105. package/dist/PricingGroup.js +1 -1
  106. package/dist/PricingTable-BjpGVAhi.js +157 -0
  107. package/dist/PricingTable.css +1 -1
  108. package/dist/PricingTable.d.ts +4 -7
  109. package/dist/PricingTable.js +1 -1
  110. package/dist/RadioGroup-DI4KKUvZ.js +121 -0
  111. package/dist/RadioGroup.css +1 -1
  112. package/dist/RadioGroup.js +1 -1
  113. package/dist/Section-PprWjOvt.js +47 -0
  114. package/dist/Section.css +1 -1
  115. package/dist/Section.d.ts +29 -9
  116. package/dist/Section.js +1 -1
  117. package/dist/Sidebar-Bouhd5SS.js +205 -0
  118. package/dist/Sidebar.css +1 -1
  119. package/dist/Sidebar.d.ts +18 -26
  120. package/dist/Sidebar.js +1 -1
  121. package/dist/SplitPane-DBa-g9td.js +92 -0
  122. package/dist/SplitPane.css +1 -1
  123. package/dist/SplitPane.d.ts +8 -7
  124. package/dist/SplitPane.js +1 -1
  125. package/dist/Stack-BPTehVYc.js +53 -0
  126. package/dist/Stack.css +1 -1
  127. package/dist/Stack.d.ts +2 -1
  128. package/dist/Stack.js +1 -1
  129. package/dist/Stat-p8j4PjrC.js +28 -0
  130. package/dist/Stat.css +1 -1
  131. package/dist/Stat.js +1 -1
  132. package/dist/TabSections-Dppe9wiz.js +84 -0
  133. package/dist/TabSections.css +1 -1
  134. package/dist/TabSections.d.ts +7 -2
  135. package/dist/TabSections.js +1 -1
  136. package/dist/Table-DqrDUUtb.js +27 -0
  137. package/dist/Table.css +1 -1
  138. package/dist/Table.d.ts +10 -2
  139. package/dist/Table.js +1 -1
  140. package/dist/Text-Bo1u7gVC.js +25 -0
  141. package/dist/Text.css +1 -0
  142. package/dist/Text.d.ts +19 -0
  143. package/dist/Text.js +4 -0
  144. package/dist/TextGroup-236jHxdT.js +23 -0
  145. package/dist/TextGroup.css +1 -1
  146. package/dist/TextGroup.js +1 -1
  147. package/dist/Toolbar-Bl9-5Mis.js +35 -0
  148. package/dist/Toolbar.css +1 -1
  149. package/dist/Toolbar.d.ts +7 -12
  150. package/dist/Toolbar.js +1 -2
  151. package/dist/cx.d.ts +1 -1
  152. package/dist/dark.css +12 -0
  153. package/dist/index.css +41 -39
  154. package/dist/index.d.ts +7 -12
  155. package/dist/index.es.d.ts +7 -12
  156. package/dist/index.es.js +110 -107
  157. package/dist/kit-manifest.json +1646 -0
  158. package/dist/lazyRoute.d.ts +12 -6
  159. package/dist/light.css +12 -0
  160. package/dist/navTree.d.ts +13 -1
  161. package/dist/rovingKeys-Di9N1Nct.js +23 -0
  162. package/dist/rovingKeys.d.ts +7 -1
  163. package/dist/stackGap.d.ts +1 -1
  164. package/dist/tokens.css +20 -2
  165. package/dist/useControllableValue-BaE0VR5d.js +13 -0
  166. package/dist/useControllableValue.d.ts +3 -0
  167. package/package.json +48 -4
  168. package/dist/ActionGroup-ChKFW0mt.js +0 -27
  169. package/dist/Avatar-loGgFt72.js +0 -113
  170. package/dist/AvatarGroup-D1gnT3Od.js +0 -81
  171. package/dist/AvatarName-0BzyfpMq.js +0 -68
  172. package/dist/Badge-jp-9iNNL.js +0 -28
  173. package/dist/Banner-B72lcEMo.js +0 -34
  174. package/dist/Block-Bu7NEA0g.js +0 -8
  175. package/dist/Block.d.ts +0 -30
  176. package/dist/Block.js +0 -4
  177. package/dist/Brand-Zq-Idks4.js +0 -34
  178. package/dist/Breadcrumb-CAM_e9LN.js +0 -98
  179. package/dist/Card-hn37Opo3.js +0 -12
  180. package/dist/ChatFrame-BW2TmCkZ.js +0 -37
  181. package/dist/ChatSplit-DNnu3TNq.js +0 -21
  182. package/dist/CodeBlock-CRzVopIv.js +0 -25
  183. package/dist/Column-BiogBDf8.js +0 -8
  184. package/dist/Column.d.ts +0 -24
  185. package/dist/Column.js +0 -4
  186. package/dist/Dropdown-DosvDR13.js +0 -147
  187. package/dist/EmptyState-mBiWtMIM.js +0 -23
  188. package/dist/Header-DZQopVNy.js +0 -21
  189. package/dist/Healthmap-B6cdiLUl.js +0 -243
  190. package/dist/ItemColumn-M7a9L8CI.js +0 -41
  191. package/dist/Layout-mi6Ghayv.js +0 -31
  192. package/dist/List-BgKkYaGO.js +0 -12
  193. package/dist/Loading-DkkG7RcE.js +0 -16
  194. package/dist/Menu-DuXQv-zT.js +0 -66
  195. package/dist/NavSections-D6rDEtT1.js +0 -142
  196. package/dist/PageHead-DgaJ1mXY.js +0 -31
  197. package/dist/PageShell-D9EZiO8o.js +0 -30
  198. package/dist/PanelInfo-A5y5ysH8.js +0 -81
  199. package/dist/Popover-DWdvZTuA.js +0 -135
  200. package/dist/PricingGroup-Czuhe81Z.js +0 -120
  201. package/dist/PricingTable-BuLC0opK.js +0 -152
  202. package/dist/RadioGroup-fcXzhvMu.js +0 -129
  203. package/dist/Row-DsQOVn18.js +0 -8
  204. package/dist/Row.d.ts +0 -24
  205. package/dist/Row.js +0 -4
  206. package/dist/Section-Crxk2J-E.js +0 -34
  207. package/dist/Sidebar-CYFaPqdC.js +0 -178
  208. package/dist/SplitPane-DR7PCZ8f.js +0 -74
  209. package/dist/Stack-XkmPSswj.js +0 -53
  210. package/dist/Stat-sKXJwz5L.js +0 -27
  211. package/dist/TabSections-DN7yVJoF.js +0 -69
  212. package/dist/Table-BoDr3X2d.js +0 -25
  213. package/dist/TextGroup-DmhuyMR1.js +0 -23
  214. package/dist/Toolbar-C1zAk9ak.js +0 -42
  215. package/dist/rovingKeys-CGlfTtNQ.js +0 -15
  216. package/dist/useControllableValue-CWqH1kpM.js +0 -10
@@ -0,0 +1,205 @@
1
+ import e from "react";
2
+ import { D as M } from "./Dropdown-CR_XxNak.js";
3
+ import { c as x } from "./cx-CcykAxZN.js";
4
+ import { c as O, b as P, a as j, i as z } from "./navTree-BRyaILN9.js";
5
+ import { h as A } from "./rovingKeys-Di9N1Nct.js";
6
+ import { u as q } from "./useControllableValue-BaE0VR5d.js";
7
+ import { B as T } from "./Badge-BjScAXGy.js";
8
+ import { I as W } from "./Item-CGpkMJu0.js";
9
+ import { b as G } from "./badgeText-CRzlIzi3.js";
10
+ import './Sidebar.css';const H = "nsr", J = "nsb", Q = "nsx", U = "nsg", V = "nss", X = "nsp", Y = "nsh", Z = "nsn", _ = "nsi", $ = "nsa", ee = "nso", ne = "nsl", te = "nsd", ae = "nsc", le = "nsm", se = "nsf", ce = "nsq", re = "nsw", oe = "nsu", ie = "nsk", ue = "nsv", n = {
11
+ root: H,
12
+ brand: J,
13
+ xtra: Q,
14
+ groups: U,
15
+ section: V,
16
+ plain: X,
17
+ heading: Y,
18
+ nav: Z,
19
+ item: _,
20
+ active: $,
21
+ oico: ee,
22
+ label: ne,
23
+ dot: te,
24
+ chevron: ae,
25
+ menu: le,
26
+ footer: se,
27
+ qmenu: ce,
28
+ who: re,
29
+ userbtn: oe,
30
+ kebab: ie,
31
+ ver: ue
32
+ };
33
+ function me({ className: s }) {
34
+ return /* @__PURE__ */ e.createElement("svg", { className: s, viewBox: "0 0 16 16", "aria-hidden": !0 }, /* @__PURE__ */ e.createElement("circle", { cx: "8", cy: "3", r: "1.3", fill: "currentColor" }), /* @__PURE__ */ e.createElement("circle", { cx: "8", cy: "8", r: "1.3", fill: "currentColor" }), /* @__PURE__ */ e.createElement("circle", { cx: "8", cy: "13", r: "1.3", fill: "currentColor" }));
35
+ }
36
+ function de({ className: s }) {
37
+ return /* @__PURE__ */ e.createElement("svg", { className: s, viewBox: "0 0 12 12", "aria-hidden": !0 }, /* @__PURE__ */ e.createElement(
38
+ "path",
39
+ {
40
+ d: "M2.5 4.5 6 8l3.5-3.5",
41
+ fill: "none",
42
+ stroke: "currentColor",
43
+ strokeWidth: "1.5",
44
+ strokeLinecap: "round",
45
+ strokeLinejoin: "round"
46
+ }
47
+ ));
48
+ }
49
+ function B({
50
+ items: s,
51
+ value: v,
52
+ focusValue: b,
53
+ open: p,
54
+ onValueChange: d,
55
+ onToggle: E
56
+ }) {
57
+ return /* @__PURE__ */ e.createElement(e.Fragment, null, s.map((a) => {
58
+ const f = a.items, c = f != null && f.length > 0, o = c && p.includes(a.value), i = G(a.badge), u = !c && v === a.value, N = a.value === (b ?? v);
59
+ return /* @__PURE__ */ e.createElement("li", { key: a.value }, /* @__PURE__ */ e.createElement(
60
+ W,
61
+ {
62
+ as: "button",
63
+ active: u,
64
+ className: x(n.item, u && n.active),
65
+ "data-value": a.value,
66
+ "aria-current": u ? "page" : void 0,
67
+ "aria-expanded": c ? o : void 0,
68
+ "data-open": o ? "true" : void 0,
69
+ tabIndex: N ? 0 : -1,
70
+ onClick: () => {
71
+ c ? E(a.value) : d == null || d(a.value);
72
+ }
73
+ },
74
+ a.icon != null ? /* @__PURE__ */ e.createElement("span", { className: n.oico, "aria-hidden": !0 }, a.icon) : null,
75
+ /* @__PURE__ */ e.createElement("span", { className: n.label }, a.label),
76
+ i != null ? /* @__PURE__ */ e.createElement(T, { className: n.dot, tone: "accent", size: "s" }, i) : null,
77
+ c ? /* @__PURE__ */ e.createElement(de, { className: n.chevron }) : null
78
+ ), c && o ? /* @__PURE__ */ e.createElement("ul", { className: n.menu }, /* @__PURE__ */ e.createElement(
79
+ B,
80
+ {
81
+ items: f,
82
+ value: v,
83
+ focusValue: b,
84
+ open: p,
85
+ onValueChange: d,
86
+ onToggle: E
87
+ }
88
+ )) : null);
89
+ }));
90
+ }
91
+ function xe({
92
+ groups: s = [],
93
+ value: v,
94
+ defaultValue: b,
95
+ onValueChange: p,
96
+ open: d,
97
+ defaultOpen: E,
98
+ onOpenChange: a,
99
+ variant: f = "cards",
100
+ brand: c,
101
+ extra: o,
102
+ footer: i,
103
+ footerItems: u,
104
+ onFooterValueChange: N,
105
+ footerMenuLabel: C = "Меню аккаунта",
106
+ version: h,
107
+ className: D,
108
+ "aria-label": S = "Основное меню"
109
+ }) {
110
+ const [l, y] = q(
111
+ v,
112
+ b,
113
+ p
114
+ ), [m = [], k] = q(
115
+ d,
116
+ O(s, E, l),
117
+ a
118
+ ), g = e.useRef(l);
119
+ e.useEffect(() => {
120
+ if (l == null || l === g.current) {
121
+ g.current = l;
122
+ return;
123
+ }
124
+ g.current = l;
125
+ const r = P(s, l).filter((L) => !m.includes(L));
126
+ r.length && k([...m, ...r]);
127
+ }, [l, s, m, k]);
128
+ const I = (t) => {
129
+ k(
130
+ m.includes(t) ? m.filter((r) => r !== t) : [...m, t]
131
+ );
132
+ }, w = e.useRef(null), F = j(s).map((t) => t.value), [R, K] = e.useState(l);
133
+ return e.useEffect(() => {
134
+ l && K(l);
135
+ }, [l]), /* @__PURE__ */ e.createElement(
136
+ "aside",
137
+ {
138
+ className: x(n.root, f === "plain" && n.plain, D),
139
+ "aria-label": S
140
+ },
141
+ c != null || o != null ? /* @__PURE__ */ e.createElement("div", { className: n.brand }, c, o != null ? /* @__PURE__ */ e.createElement("div", { className: n.xtra }, o) : null) : null,
142
+ /* @__PURE__ */ e.createElement(
143
+ "div",
144
+ {
145
+ ref: w,
146
+ className: n.groups,
147
+ onKeyDown: (t) => A(t, {
148
+ values: F,
149
+ value: R,
150
+ vertical: !0,
151
+ focusRoot: w.current,
152
+ onSelect: (r) => {
153
+ K(r), z(s, r) || y(r);
154
+ }
155
+ })
156
+ },
157
+ s.map((t) => /* @__PURE__ */ e.createElement(
158
+ "nav",
159
+ {
160
+ key: t.value,
161
+ className: n.section,
162
+ "aria-label": t.title ?? "Навигация"
163
+ },
164
+ t.title ? /* @__PURE__ */ e.createElement("div", { className: n.heading }, t.title) : null,
165
+ /* @__PURE__ */ e.createElement("ul", { className: n.nav }, /* @__PURE__ */ e.createElement(
166
+ B,
167
+ {
168
+ items: t.items ?? [],
169
+ value: l,
170
+ focusValue: R,
171
+ open: m,
172
+ onValueChange: y,
173
+ onToggle: I
174
+ }
175
+ ))
176
+ ))
177
+ ),
178
+ i != null || h != null ? /* @__PURE__ */ e.createElement("div", { className: x(n.section, n.footer) }, i != null && u != null && u.length > 0 ? /* @__PURE__ */ e.createElement(
179
+ M,
180
+ {
181
+ className: n.qmenu,
182
+ tone: "account",
183
+ align: "start",
184
+ placement: "top",
185
+ label: C,
186
+ trigger: (t) => /* @__PURE__ */ e.createElement(
187
+ "button",
188
+ {
189
+ type: "button",
190
+ className: n.userbtn,
191
+ "data-open": t.open ? "true" : void 0,
192
+ ...t.anchorProps
193
+ },
194
+ /* @__PURE__ */ e.createElement("span", { className: n.who }, i),
195
+ /* @__PURE__ */ e.createElement(me, { className: n.kebab })
196
+ ),
197
+ items: u,
198
+ onValueChange: N
199
+ }
200
+ ) : i, h != null ? /* @__PURE__ */ e.createElement("div", { className: n.ver }, h) : null) : null
201
+ );
202
+ }
203
+ export {
204
+ xe as S
205
+ };
package/dist/Sidebar.css CHANGED
@@ -1 +1 @@
1
- @layer elcrm-components{.c2r{box-sizing:border-box;display:flex;flex-direction:column;flex:1 1 auto;width:var(--sidebar-width, 248px);min-width:0;min-height:0;height:100%;max-height:100%;padding:var(--sidebar-pad-y, 16px) var(--sidebar-pad-x, 12px);gap:var(--shell-gap-sm, 8px);color:var(--shell-color);align-self:stretch}.c2b{display:flex;flex-direction:row;align-items:center;gap:var(--shell-gap);padding:4px 8px;min-width:0}.c2x{flex-shrink:0;margin-left:auto}.c2g{flex:1;min-height:0;display:flex;flex-direction:column;gap:var(--shell-gap-sm);overflow-y:auto;overflow-x:hidden;scrollbar-width:thin}.c2s{box-sizing:border-box;flex-shrink:0;padding:8px}.c2p{--sidebar-plain: 1}.c2r:not(.c2p) .c2s{background:var(--sidebar-block-bg);border:1px solid var(--sidebar-block-border);border-radius:var(--sidebar-block-radius);box-shadow:var(--sidebar-block-shadow)}.c2h{margin:2px 10px 6px;font-size:var(--sidebar-group-font-size);font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--shell-color-muted)}.c2n{margin:0;padding:0;list-style:none}.c2n>li{list-style:none}.c2n .c2i:is(button){position:relative;display:flex;width:100%;box-sizing:border-box;flex-direction:row;align-items:center;gap:8px;margin:0 0 1px;padding:var(--sidebar-item-padding);border:0;border-radius:8px;background:transparent;color:var(--shell-color-muted);font-family:inherit;font-size:var(--sidebar-item-font-size);font-weight:500;line-height:1.25;letter-spacing:0;text-align:left;cursor:pointer}.c2n .c2i:is(button):hover{color:var(--shell-color);background:var(--shell-background-hover)}.c2n .c2i:is(button).c2a,.c2n .c2i:is(button)[aria-current=page],.c2n .c2i:is(button)[data-active=true],.c2n .c2i:is(button).c2a:hover{color:var(--sidebar-item-active);background:var(--sidebar-item-active-bg)}.c2o{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;width:var(--sidebar-icon-size);height:var(--sidebar-icon-size);color:inherit}.c2o :is(svg){display:block;width:var(--sidebar-icon-size);height:var(--sidebar-icon-size)}.c2a .c2o{color:var(--sidebar-icon-active)}.c2l{flex:1;min-width:0}.c2d{flex-shrink:0;min-width:16px;height:16px;padding:0 4px;font-size:10px}.c2c{flex-shrink:0;width:12px;height:12px;margin-left:auto;color:var(--shell-color-muted);transition:transform .15s ease}.c2n .c2i:is(button)[data-open=true] .c2c{transform:rotate(180deg);color:inherit}.c2m{margin:0;padding:0 0 0 var(--sidebar-indent);list-style:none}.c2m>li{list-style:none}.c2f{margin-top:auto}.c2q{display:flex;width:100%;min-width:0;flex:0 0 auto;height:auto;align-items:center}.c2q>*{display:flex;width:100%;min-width:0;height:auto;align-items:center}.c2w{display:flex;width:100%;min-width:0;align-items:center}.c2u{display:flex;align-items:center;width:100%;min-width:0;gap:var(--shell-gap-sm);margin:0;padding:0;border:none;background:transparent;font:inherit;color:inherit;cursor:pointer;text-align:left}.c2k{flex-shrink:0;width:var(--sidebar-icon-size);height:var(--sidebar-icon-size);color:var(--shell-color-muted)}.c2v{margin-top:var(--shell-gap-sm);font-size:11px;color:var(--shell-color-muted);text-align:center}@media (max-width: 900px){.c2r{width:72px;padding:12px 8px}.c2l,.c2h,.c2v,.c2c,.c2m{display:none}.c2b{flex-direction:column;justify-content:center;align-items:center;gap:8px;padding:4px 0}.c2x{margin-left:0}.c2s{padding:6px}.c2n .c2i{justify-content:center;align-items:center;gap:0;width:100%;min-height:40px;padding:10px 0}.c2n .c2d{position:absolute;top:4px;right:4px;min-width:14px;height:14px;padding:0 4px;font-size:.625rem;line-height:14px;pointer-events:none}}}
1
+ @layer elcrm-components{.nsr{box-sizing:border-box;display:flex;flex-direction:column;flex:1 1 auto;width:var(--sidebar-width);min-width:0;min-height:0;height:100%;max-height:100%;padding:var(--sidebar-pad-y) var(--sidebar-pad-x);gap:var(--shell-gap-sm, 8px);color:var(--shell-color);align-self:stretch}.nsb{display:flex;flex-direction:row;align-items:center;gap:var(--shell-gap);padding:4px var(--shell-gap-sm);min-width:0}.nsx{flex-shrink:0;margin-left:auto}.nsg{flex:1;min-height:0;display:flex;flex-direction:column;gap:var(--shell-gap-sm);overflow-y:auto;overflow-x:hidden;scrollbar-width:thin}.nss{box-sizing:border-box;flex-shrink:0;padding:var(--shell-gap-sm)}.nsp{--sidebar-plain: 1}.nsr:not(.nsp) .nss{background:var(--sidebar-block-bg);border:1px solid var(--sidebar-block-border);border-radius:var(--sidebar-block-radius);box-shadow:var(--sidebar-block-shadow)}.nsh{margin:2px 10px 6px;font-size:var(--sidebar-group-font-size);font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--shell-color-muted)}.nsn{margin:0;padding:0;list-style:none}.nsn>li{list-style:none}.nsn .nsi:is(button){position:relative;display:flex;width:100%;box-sizing:border-box;flex-direction:row;align-items:center;gap:var(--shell-gap-sm);margin:0 0 1px;padding:var(--sidebar-item-padding);border:0;border-radius:var(--shell-radius);background:transparent;color:var(--shell-color-muted);font-family:inherit;font-size:var(--sidebar-item-font-size);font-weight:500;line-height:1.25;letter-spacing:0;text-align:left;cursor:pointer}.nsn .nsi:is(button):hover{color:var(--shell-color);background:var(--shell-background-hover)}.nsn .nsi:is(button).nsa,.nsn .nsi:is(button)[aria-current=page],.nsn .nsi:is(button)[data-active=true],.nsn .nsi:is(button).nsa:hover{color:var(--sidebar-item-active);background:var(--sidebar-item-active-bg)}.nso{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;width:var(--sidebar-icon-size);height:var(--sidebar-icon-size);color:inherit}.nso :is(svg){display:block;width:var(--sidebar-icon-size);height:var(--sidebar-icon-size)}.nsa .nso{color:var(--sidebar-icon-active)}.nsl{flex:1;min-width:0}.nsd{flex-shrink:0;min-width:var(--sidebar-icon-size);height:var(--sidebar-icon-size);padding:0 4px;font-size:10px}.nsc{flex-shrink:0;width:var(--shell-status-size);height:var(--shell-status-size);margin-left:auto;color:var(--shell-color-muted);transition:transform .15s ease}.nsn .nsi:is(button)[data-open=true] .nsc{transform:rotate(180deg);color:inherit}.nsm{margin:0;padding:0 0 0 var(--sidebar-indent);list-style:none}.nsm>li{list-style:none}.nsf{margin-top:auto}.nsq{position:relative;display:flex;width:100%;min-width:0;flex:0 0 auto;height:auto;align-items:stretch}.nsq>*{display:flex;width:100%;min-width:0;height:auto;align-items:stretch}.nsw{display:flex;flex:1 1 auto;width:100%;min-width:0;align-items:center}.nsw>*{flex:1 1 auto;min-width:0;max-width:100%}.nsu{display:flex;align-items:center;gap:var(--sidebar-account-chip-gap);width:100%;min-width:0;margin:0;padding:var(--sidebar-account-chip-padding);border:none;border-radius:var(--sidebar-account-chip-radius);background:transparent;font:inherit;color:var(--shell-color);cursor:pointer;text-align:left;transition:background .15s ease}.nsu:hover,.nsu[data-open=true]{background:var(--shell-background-hover)}.nsk{flex-shrink:0;width:var(--sidebar-icon-size);height:var(--sidebar-icon-size);color:var(--shell-color-muted)}.nsv{margin-top:2px;padding:4px 8px 2px;font-size:11px;line-height:1.2;color:var(--shell-color-muted);text-align:left;-webkit-user-select:text;user-select:text}@media (max-width: 900px){.nsr{width:72px;padding:var(--shell-gap) var(--shell-gap-sm)}.nsl,.nsh,.nsv,.nsc,.nsm{display:none}.nsb{flex-direction:column;justify-content:center;align-items:center;gap:var(--shell-gap-sm);padding:4px 0}.nsx{margin-left:0}.nss{padding:6px}.nsn .nsi{justify-content:center;align-items:center;gap:0;width:100%;min-height:40px;padding:10px 0}.nsn .nsd{position:absolute;top:4px;right:4px;min-width:14px;height:14px;padding:0 4px;font-size:.625rem;line-height:14px;pointer-events:none}}}
package/dist/Sidebar.d.ts CHANGED
@@ -1,27 +1,16 @@
1
1
  import { default as React } from 'react';
2
2
  import { DropdownItem } from './Dropdown';
3
+ import { NavTreeItem } from './navTree';
3
4
  /** Вид колонки: карточки (консоль) или плоский список (backoffice) */
4
5
  export type SidebarVariant = "cards" | "plain";
5
- /** Пункт бокового меню. Идентификатор — `value`. */
6
- export type SidebarItem = {
7
- value: string;
8
- /** Подпись */
6
+ /**
7
+ * Пункт бокового меню. База — {@link NavTreeItem}; здесь `label: string` + `badge`.
8
+ */
9
+ export type SidebarItem = Omit<NavTreeItem, "label" | "items"> & {
9
10
  label: string;
10
- /** Иконка (слот приложения) */
11
- icon?: React.ReactNode;
12
11
  /** Счётчик справа */
13
12
  badge?: number | string | null;
14
- /**
15
- * Вложенные пункты — есть → шеврон и раскрытие.
16
- * Клик по родителю только открывает/закрывает, `onSelect` не зовём.
17
- */
18
13
  items?: SidebarItem[];
19
- /**
20
- * Подменю открыто при первом рендере.
21
- * Если выбран потомок — ветка откроется сама.
22
- * @default false
23
- */
24
- defaultOpen?: boolean;
25
14
  };
26
15
  /** Группа пунктов. `title` — «Аккаунт» / «Админ». */
27
16
  export type SidebarGroup = {
@@ -46,7 +35,7 @@ export type SidebarGroup = {
46
35
  * <Sidebar
47
36
  * variant="cards"
48
37
  * value={page}
49
- * onSelect={setPage}
38
+ * onValueChange={setPage}
50
39
  * brand={<Brand as="strong">App</Brand>}
51
40
  * extra={<Notifications.Bell />}
52
41
  * groups={[
@@ -74,22 +63,25 @@ export type SidebarGroup = {
74
63
  * { value: "theme", label: "Тема", submenu: true },
75
64
  * { value: "logout", label: "Выйти", danger: true },
76
65
  * ]}
77
- * onFooterSelect={(value) => console.log(value)}
66
+ * onFooterValueChange={(value) => console.log(value)}
78
67
  * version="v 0.2.26"
79
68
  * />
80
69
  * ```
81
70
  *
71
+ * Меню аккаунта (`footerItems`): chip как elWMS SidebarUserMenu + `Dropdown tone="account"`
72
+ * (токены `--sidebar-account-*`).
73
+ *
82
74
  * Токены: `--sidebar-*`, цвета — `--shell-*`.
83
75
  */
84
76
  export type SidebarProps = {
85
- /** Группы пунктов (`value` + `items`) */
77
+ /** Группы пунктов (`value` + `items`). Канон — только `groups`. */
86
78
  groups?: SidebarGroup[];
87
- /** То же, что `groups` (совместимость) */
88
- items?: SidebarGroup[];
89
- /** Текущий пункт */
79
+ /** Текущий пункт (controlled). */
90
80
  value?: string;
91
- /** Выбор пункта (только листья, без `items`) */
92
- onSelect?: (value: string) => void;
81
+ /** Начальный пункт (uncontrolled). */
82
+ defaultValue?: string;
83
+ /** Выбор пункта (только листья, без вложенных `items`). */
84
+ onValueChange?: (value: string) => void;
93
85
  /**
94
86
  * Раскрытые родители (их `value`). Контролируемый режим.
95
87
  * Вместе с `onOpenChange`.
@@ -119,7 +111,7 @@ export type SidebarProps = {
119
111
  */
120
112
  footerItems?: DropdownItem[];
121
113
  /** Выбор пункта меню аккаунта */
122
- onFooterSelect?: (value: string, item: DropdownItem) => void;
114
+ onFooterValueChange?: (value: string, item: DropdownItem) => void;
123
115
  /** `aria-label` панели меню аккаунта */
124
116
  footerMenuLabel?: string;
125
117
  /** Версия под футером */
@@ -133,4 +125,4 @@ export type SidebarProps = {
133
125
  *
134
126
  * @see Layout, Brand, Item, Badge, NavSections
135
127
  */
136
- export declare function Sidebar({ groups, items, value, onSelect, open: openProp, defaultOpen, onOpenChange, variant, brand, extra, footer, footerItems, onFooterSelect, footerMenuLabel, version, className, "aria-label": ariaLabel, }: SidebarProps): React.JSX.Element;
128
+ export declare function Sidebar({ groups, value: valueProp, defaultValue, onValueChange, open: openProp, defaultOpen, onOpenChange, variant, brand, extra, footer, footerItems, onFooterValueChange, footerMenuLabel, version, className, "aria-label": ariaLabel, }: SidebarProps): React.JSX.Element;
package/dist/Sidebar.js CHANGED
@@ -1,4 +1,4 @@
1
- import { S as e } from "./Sidebar-CYFaPqdC.js";
1
+ import { S as e } from "./Sidebar-Bouhd5SS.js";
2
2
  export {
3
3
  e as Sidebar
4
4
  };
@@ -0,0 +1,92 @@
1
+ import m from "react";
2
+ import { c as C } from "./cx-CcykAxZN.js";
3
+ import { u as P } from "./useControllableValue-BaE0VR5d.js";
4
+ import './SplitPane.css';function E(e, o, p, y) {
5
+ if (o <= 0) return e;
6
+ const l = p / o, c = 1 - y / o;
7
+ return c < l ? 0.5 : Math.max(l, Math.min(c, e));
8
+ }
9
+ const H = "dsr", K = "dsx", U = "dsy", V = "dsp", X = "dsh", i = {
10
+ root: H,
11
+ xaxis: K,
12
+ yaxis: U,
13
+ pane: V,
14
+ handle: X
15
+ }, g = 6;
16
+ function v() {
17
+ if (typeof document > "u") return g;
18
+ const e = getComputedStyle(document.documentElement).getPropertyValue("--split-handle-size").trim(), o = Number.parseFloat(e);
19
+ return Number.isFinite(o) && o > 0 ? o : g;
20
+ }
21
+ function q({
22
+ direction: e,
23
+ ratio: o,
24
+ defaultRatio: p = 0.5,
25
+ onRatioChange: y,
26
+ minFirst: l = 140,
27
+ minSecond: c = 140,
28
+ first: R,
29
+ second: S,
30
+ className: k,
31
+ ...N
32
+ }) {
33
+ const x = m.useRef(null), D = e === "horizontal" ? "x" : "y", [r = p, z] = P(
34
+ o,
35
+ p,
36
+ y
37
+ ), L = (t) => {
38
+ t.preventDefault();
39
+ const a = x.current;
40
+ if (!a) return;
41
+ const n = v(), s = a.getBoundingClientRect(), u = e === "horizontal" ? s.width - n : s.height - n, d = (h, A) => {
42
+ const B = e === "horizontal" ? h - s.left : A - s.top;
43
+ z(E(B / u, u, l, c));
44
+ };
45
+ d(t.clientX, t.clientY);
46
+ const f = (h) => {
47
+ d(h.clientX, h.clientY);
48
+ }, b = () => {
49
+ document.removeEventListener("pointermove", f), document.removeEventListener("pointerup", b), document.body.style.cursor = "", document.body.style.userSelect = "";
50
+ };
51
+ document.body.style.cursor = e === "horizontal" ? "col-resize" : "row-resize", document.body.style.userSelect = "none", document.addEventListener("pointermove", f), document.addEventListener("pointerup", b);
52
+ }, w = v(), M = `calc((100% - ${w}px) * ${r})`, $ = `calc((100% - ${w}px) * ${1 - r})`;
53
+ return /* @__PURE__ */ m.createElement(
54
+ "div",
55
+ {
56
+ ref: x,
57
+ className: C(i.root, D === "x" ? i.xaxis : i.yaxis, k),
58
+ ...N
59
+ },
60
+ /* @__PURE__ */ m.createElement("div", { className: i.pane, style: { flexBasis: M } }, R),
61
+ /* @__PURE__ */ m.createElement(
62
+ "button",
63
+ {
64
+ type: "button",
65
+ className: i.handle,
66
+ role: "separator",
67
+ "aria-label": "Разделитель панелей",
68
+ "aria-orientation": e === "horizontal" ? "vertical" : "horizontal",
69
+ "aria-valuenow": Math.round(r * 100),
70
+ "aria-valuemin": 0,
71
+ "aria-valuemax": 100,
72
+ "aria-valuetext": `${Math.round(r * 100)}%`,
73
+ onPointerDown: L,
74
+ onKeyDown: (t) => {
75
+ const a = t.shiftKey ? 0.1 : 0.02;
76
+ let n;
77
+ if (e === "horizontal" ? t.key === "ArrowLeft" ? n = r - a : t.key === "ArrowRight" && (n = r + a) : t.key === "ArrowUp" ? n = r - a : t.key === "ArrowDown" && (n = r + a), t.key === "Home" ? n = 0 : t.key === "End" && (n = 1), n == null) return;
78
+ t.preventDefault();
79
+ const s = x.current;
80
+ if (!s) return;
81
+ const u = v(), d = s.getBoundingClientRect(), f = e === "horizontal" ? d.width - u : d.height - u;
82
+ z(E(n, f, l, c));
83
+ }
84
+ }
85
+ ),
86
+ /* @__PURE__ */ m.createElement("div", { className: i.pane, style: { flexBasis: $ } }, S)
87
+ );
88
+ }
89
+ export {
90
+ q as S,
91
+ E as c
92
+ };
@@ -1 +1 @@
1
- @layer elcrm-components{.cFr{display:flex;min-height:0;min-width:0}.cFx{flex-direction:row}.cFy{flex-direction:column}.cFp{min-width:0;min-height:0;overflow:auto}.cFh{flex:0 0 var(--split-handle-size);margin:0;padding:0;border:0;background:var(--split-handle-bg);cursor:col-resize;touch-action:none}.cFy .cFh{cursor:row-resize}.cFh:hover,.cFh:focus-visible{background:var(--split-handle-bg-hover)}}
1
+ @layer elcrm-components{.dsr{display:flex;min-height:0;min-width:0}.dsx{flex-direction:row}.dsy{flex-direction:column}.dsp{min-width:0;min-height:0;overflow:auto}.dsh{flex:0 0 var(--split-handle-size);margin:0;padding:0;border:0;background:var(--split-handle-bg);cursor:col-resize;touch-action:none}.dsy .dsh{cursor:row-resize}.dsh:hover,.dsh:focus-visible{background:var(--split-handle-bg-hover)}}
@@ -2,9 +2,11 @@ import { default as React } from 'react';
2
2
  export type SplitPaneDirection = "horizontal" | "vertical";
3
3
  export type SplitPaneProps = React.HTMLAttributes<HTMLDivElement> & {
4
4
  direction: SplitPaneDirection;
5
- /** Доля первой панели 0…1 */
6
- ratio: number;
7
- onRatioChange: (ratio: number) => void;
5
+ /** Доля первой панели 0…1 (controlled). */
6
+ ratio?: number;
7
+ /** Начальная доля (uncontrolled). @default 0.5 */
8
+ defaultRatio?: number;
9
+ onRatioChange?: (ratio: number) => void;
8
10
  minFirst?: number;
9
11
  minSecond?: number;
10
12
  first: React.ReactNode;
@@ -17,13 +19,12 @@ export type SplitPaneProps = React.HTMLAttributes<HTMLDivElement> & {
17
19
  * ```tsx
18
20
  * <SplitPane
19
21
  * direction="horizontal"
20
- * ratio={0.58}
22
+ * ratio={ratio}
21
23
  * onRatioChange={setRatio}
22
24
  * first={<Preview />}
23
25
  * second={<Editor />}
24
26
  * />
27
+ * <SplitPane direction="horizontal" defaultRatio={0.58} first={…} second={…} />
25
28
  * ```
26
- *
27
- * Токены: `--split-handle-size`, `--split-handle-bg`.
28
29
  */
29
- export declare function SplitPane({ direction, ratio, onRatioChange, minFirst, minSecond, first, second, className, ...rest }: SplitPaneProps): React.JSX.Element;
30
+ export declare function SplitPane({ direction, ratio: ratioProp, defaultRatio, onRatioChange, minFirst, minSecond, first, second, className, ...rest }: SplitPaneProps): React.JSX.Element;
package/dist/SplitPane.js CHANGED
@@ -1,4 +1,4 @@
1
- import { S as t, c as i } from "./SplitPane-DR7PCZ8f.js";
1
+ import { S as t, c as i } from "./SplitPane-DBa-g9td.js";
2
2
  export {
3
3
  t as SplitPane,
4
4
  i as clampSplitRatio
@@ -0,0 +1,53 @@
1
+ import i from "react";
2
+ import { c as u } from "./cx-CcykAxZN.js";
3
+ import './Stack.css';function c(t) {
4
+ if (t != null)
5
+ return { gap: typeof t == "number" ? `${t}px` : t };
6
+ }
7
+ const f = "ksr", p = "ksc", d = "ksg", k = "ksh", g = "ksn", o = {
8
+ root: f,
9
+ column: p,
10
+ grid: d,
11
+ horizontal: k,
12
+ named: g
13
+ };
14
+ function h(t) {
15
+ if (typeof t == "number")
16
+ return t <= 0 ? void 0 : `repeat(${t}, minmax(0, 1fr))`;
17
+ if (t.length !== 0)
18
+ return t.map((n) => typeof n == "number" ? `${n}px` : n).join(" ");
19
+ }
20
+ function y({
21
+ direction: t = "column",
22
+ columns: n,
23
+ gap: e,
24
+ children: a,
25
+ className: m,
26
+ style: s,
27
+ ...l
28
+ }) {
29
+ const r = t === "grid" && n != null ? h(n) : void 0;
30
+ return /* @__PURE__ */ i.createElement(
31
+ "div",
32
+ {
33
+ className: u(
34
+ o.root,
35
+ t === "column" && o.column,
36
+ t === "row" && o.horizontal,
37
+ t === "grid" && (r ? o.named : o.grid),
38
+ m
39
+ ),
40
+ style: {
41
+ ...c(e),
42
+ ...r ? { "--stack-columns-template": r } : null,
43
+ ...s
44
+ },
45
+ ...l
46
+ },
47
+ a
48
+ );
49
+ }
50
+ export {
51
+ y as S,
52
+ h as s
53
+ };
package/dist/Stack.css CHANGED
@@ -1 +1 @@
1
- @layer elcrm-components{.c1r{box-sizing:border-box;min-width:0;gap:var(--shell-gap)}.c1c,.c1g{width:100%}.c1c{display:flex;flex-direction:column}.c1h{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;width:auto;max-width:100%}.c1g{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--stack-grid-min)),1fr))}.c1n{display:grid;width:100%;align-items:stretch;grid-template-columns:var(--stack-columns-template)}}
1
+ @layer elcrm-components{.ksr{box-sizing:border-box;min-width:0;gap:var(--shell-gap)}.ksc,.ksg{width:100%}.ksc{display:flex;flex-direction:column}.ksh{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;width:auto;max-width:100%}.ksg{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,var(--stack-grid-min)),1fr))}.ksn{display:grid;width:100%;align-items:stretch;grid-template-columns:var(--stack-columns-template)}}
package/dist/Stack.d.ts CHANGED
@@ -8,7 +8,8 @@ export declare function stackColumnsTemplate(columns: StackColumns): string | un
8
8
  /**
9
9
  * Универсальный стек (ряд / колонка) с отступами между детьми.
10
10
  *
11
- * Роли: Stack = базовая раскладка; заменяет устаревшие Block / Row / Column.
11
+ * Роли: Stack = базовая раскладка (Block / Row / Column удалены —
12
+ * `elcrm migrate components`).
12
13
  * Внутри Section, Card, форм и списков действий.
13
14
  *
14
15
  * @example
package/dist/Stack.js CHANGED
@@ -1,4 +1,4 @@
1
- import { S as t, s as e } from "./Stack-XkmPSswj.js";
1
+ import { S as t, s as e } from "./Stack-BPTehVYc.js";
2
2
  export {
3
3
  t as Stack,
4
4
  e as stackColumnsTemplate
@@ -0,0 +1,28 @@
1
+ import e from "react";
2
+ import { C as u } from "./Card-a7N8Uh_H.js";
3
+ import { c as n } from "./cx-CcykAxZN.js";
4
+ import './Stat.css';const p = "ktr", k = "ktl", g = "kte", i = "ktv", d = "kta", w = "ktu", f = "ktw", v = "ktd", b = "ktn", t = {
5
+ root: p,
6
+ label: k,
7
+ emph: g,
8
+ value: i,
9
+ accent: d,
10
+ up: w,
11
+ warning: f,
12
+ danger: v,
13
+ neutral: b
14
+ };
15
+ function N({
16
+ label: c,
17
+ value: r,
18
+ tone: a = "neutral",
19
+ labelMuted: s = !0,
20
+ className: o,
21
+ ...l
22
+ }) {
23
+ const m = a === "accent" ? t.accent : a === "success" ? t.up : a === "warning" ? t.warning : a === "danger" ? t.danger : t.neutral;
24
+ return /* @__PURE__ */ e.createElement(u, { className: n(t.root, m, o), ...l }, /* @__PURE__ */ e.createElement("span", { className: n(t.label, !s && t.emph) }, c), /* @__PURE__ */ e.createElement("span", { className: t.value }, r));
25
+ }
26
+ export {
27
+ N as S
28
+ };
package/dist/Stat.css CHANGED
@@ -1 +1 @@
1
- @layer elcrm-components{.c4r{display:flex;flex-direction:column;gap:6px}.c4l{font-size:var(--shell-font-size-sm);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--shell-color-muted);line-height:1.2}.c4e{color:var(--shell-color)}.c4v{font-size:var(--stat-value-size);font-weight:700;letter-spacing:-.03em;line-height:1.1;color:var(--shell-color)}.c4a .c4v{color:var(--shell-color-accent)}.c4u .c4v{color:var(--shell-color-success)}.c4w .c4v{color:var(--shell-color-warning)}.c4d .c4v{color:var(--shell-color-danger)}}
1
+ @layer elcrm-components{.ktr{display:flex;flex-direction:column;gap:6px}.ktl{font-size:var(--shell-font-size-sm);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--shell-color-muted);line-height:1.2}.kte{color:var(--shell-color)}.ktv{font-size:var(--stat-value-size);font-weight:700;letter-spacing:-.03em;line-height:1.1;color:var(--shell-color)}.kta .ktv{color:var(--shell-color-accent)}.ktu .ktv{color:var(--shell-color-success)}.ktw .ktv{color:var(--shell-color-warning)}.ktd .ktv{color:var(--shell-color-danger)}.ktn .ktv{color:var(--shell-color)}}
package/dist/Stat.js CHANGED
@@ -1,4 +1,4 @@
1
- import { S as o } from "./Stat-sKXJwz5L.js";
1
+ import { S as o } from "./Stat-p8j4PjrC.js";
2
2
  export {
3
3
  o as Stat
4
4
  };
@@ -0,0 +1,84 @@
1
+ import a, { useMemo as k, useId as x, useRef as C, Suspense as K } from "react";
2
+ import { c as p } from "./cx-CcykAxZN.js";
3
+ import { h as S } from "./rovingKeys-Di9N1Nct.js";
4
+ import { u as T } from "./useControllableValue-BaE0VR5d.js";
5
+ import './TabSections.css';const w = "ntr", D = "ntb", M = "ntn", P = "ntt", h = "nta", j = "nte", q = "nts", z = "ntm", l = {
6
+ root: w,
7
+ bar: D,
8
+ nav: M,
9
+ tab: P,
10
+ active: h,
11
+ ember: j,
12
+ slot: q,
13
+ main: z
14
+ };
15
+ function H({
16
+ items: s = [],
17
+ resolveSection: b,
18
+ children: o,
19
+ value: f,
20
+ defaultValue: c,
21
+ onValueChange: E,
22
+ loading: N = null,
23
+ actions: u,
24
+ className: y,
25
+ navLabel: I = "Вкладки"
26
+ }) {
27
+ const R = k(() => {
28
+ var e;
29
+ return c || (((e = s.find((n) => !n.disabled)) == null ? void 0 : e.value) ?? "");
30
+ }, [c, s]), [t, d] = T(
31
+ f,
32
+ R,
33
+ E
34
+ ), $ = s.filter((e) => !e.disabled).map((e) => e.value), r = x(), v = C(null), m = `${r}-panel`, i = o == null && t && b ? b(t) : null;
35
+ return /* @__PURE__ */ a.createElement("div", { className: p(l.root, y) }, /* @__PURE__ */ a.createElement("div", { className: l.bar }, /* @__PURE__ */ a.createElement(
36
+ "nav",
37
+ {
38
+ ref: v,
39
+ className: l.nav,
40
+ "aria-label": I,
41
+ role: "tablist",
42
+ onKeyDown: (e) => S(e, {
43
+ values: $,
44
+ value: t,
45
+ onSelect: d,
46
+ focusRoot: v.current
47
+ })
48
+ },
49
+ s.map((e) => {
50
+ const n = e.value === t, g = `${r}-tab-${e.value}`;
51
+ return /* @__PURE__ */ a.createElement(
52
+ "button",
53
+ {
54
+ key: e.value,
55
+ id: g,
56
+ type: "button",
57
+ role: "tab",
58
+ className: p(l.tab, n && l.active),
59
+ "data-value": e.value,
60
+ "data-active": n ? "true" : void 0,
61
+ "aria-selected": n,
62
+ "aria-controls": m,
63
+ tabIndex: n ? 0 : -1,
64
+ disabled: e.disabled,
65
+ onClick: () => d(e.value)
66
+ },
67
+ /* @__PURE__ */ a.createElement("span", null, e.label),
68
+ e.badge != null && e.badge !== "" ? /* @__PURE__ */ a.createElement("em", { className: l.ember }, e.badge) : null
69
+ );
70
+ })
71
+ ), u != null ? /* @__PURE__ */ a.createElement("div", { className: l.slot }, u) : null), /* @__PURE__ */ a.createElement(
72
+ "div",
73
+ {
74
+ id: m,
75
+ className: l.main,
76
+ role: "tabpanel",
77
+ "aria-labelledby": t ? `${r}-tab-${t}` : void 0
78
+ },
79
+ o ?? (i ? /* @__PURE__ */ a.createElement(K, { fallback: N }, a.createElement(i)) : null)
80
+ ));
81
+ }
82
+ export {
83
+ H as T
84
+ };