@elcrm/components 0.5.3 → 0.5.5

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 (42) hide show
  1. package/README.md +12 -1
  2. package/dist/{AvatarGroup-Dq-UrOaC.js → AvatarGroup-DeceOhGV.js} +29 -26
  3. package/dist/AvatarGroup.js +1 -1
  4. package/dist/{Breadcrumb-DM_hWw5n.js → Breadcrumb-BexTTfCV.js} +42 -29
  5. package/dist/Breadcrumb.js +1 -1
  6. package/dist/CodeBlock-CZFC4r35.js +37 -0
  7. package/dist/CodeBlock.js +1 -1
  8. package/dist/Dropdown-C9rbsSgR.js +190 -0
  9. package/dist/Dropdown.js +1 -1
  10. package/dist/{Healthmap-Z-LLfGW0.js → Healthmap-B4h6_9Yv.js} +130 -123
  11. package/dist/Healthmap.js +1 -1
  12. package/dist/Layout.css +1 -1
  13. package/dist/Layout.d.ts +3 -1
  14. package/dist/Menu-CR2CclSe.js +76 -0
  15. package/dist/Menu.d.ts +5 -0
  16. package/dist/Menu.js +1 -1
  17. package/dist/PageHead-BjBvWtlk.js +33 -0
  18. package/dist/PageHead.d.ts +7 -1
  19. package/dist/PageHead.js +1 -1
  20. package/dist/{PanelInfo-Db5GCr-c.js → PanelInfo-BTkDUF-p.js} +61 -58
  21. package/dist/PanelInfo.js +1 -1
  22. package/dist/Popover.d.ts +1 -1
  23. package/dist/{PricingTable-BjpGVAhi.js → PricingTable-Dt2wsnEz.js} +56 -53
  24. package/dist/PricingTable.js +1 -1
  25. package/dist/Section-C5XfBTfd.js +48 -0
  26. package/dist/Section.d.ts +8 -1
  27. package/dist/Section.js +1 -1
  28. package/dist/{Sidebar-Bouhd5SS.js → Sidebar-C5vMwV9L.js} +77 -74
  29. package/dist/Sidebar.js +1 -1
  30. package/dist/TabSections-CEM_8Fjy.js +87 -0
  31. package/dist/TabSections.js +1 -1
  32. package/dist/index.css +1 -1
  33. package/dist/index.es.js +12 -12
  34. package/dist/kit-manifest.json +12 -2
  35. package/dist/tokens.css +2 -0
  36. package/package.json +1 -1
  37. package/dist/CodeBlock-B3wvMejv.js +0 -34
  38. package/dist/Dropdown-CR_XxNak.js +0 -185
  39. package/dist/Menu-D2kf7fN_.js +0 -72
  40. package/dist/PageHead-BfClTLrF.js +0 -31
  41. package/dist/Section-PprWjOvt.js +0 -47
  42. package/dist/TabSections-Dppe9wiz.js +0 -84
@@ -1,21 +1,22 @@
1
- import t, { useState as H, useMemo as Y, useEffect as z } from "react";
2
- import { c as G } from "./cx-CcykAxZN.js";
3
- import { createPortal as Z } from "react-dom";
4
- import { p as J } from "./overlayZ-BvHbYC1x.js";
1
+ import t, { useState as z, useMemo as Y, useEffect as j } from "react";
2
+ import { c as _ } from "./cx-CcykAxZN.js";
3
+ import { createPortal as J } from "react-dom";
4
+ import { p as Q } from "./overlayZ-BvHbYC1x.js";
5
+ import { Button as H } from "@elcrm/button";
5
6
  import './Healthmap.css';function L(e) {
6
- const [a, l, u] = e.split("-").map(Number);
7
- return new Date(Date.UTC(a, l - 1, u));
7
+ const [a, s, u] = e.split("-").map(Number);
8
+ return new Date(Date.UTC(a, s - 1, u));
8
9
  }
9
- function Q(e, a) {
10
+ function X(e, a) {
10
11
  if (e <= 0) return 0;
11
12
  if (a <= 1) return 4;
12
- const l = e / a;
13
- return l > 0.75 ? 4 : l > 0.5 ? 3 : l > 0.25 ? 2 : 1;
13
+ const s = e / a;
14
+ return s > 0.75 ? 4 : s > 0.5 ? 3 : s > 0.25 ? 2 : 1;
14
15
  }
15
- function X(e) {
16
+ function I(e) {
16
17
  let a = 0;
17
- for (let l = e.length - 1; l >= 0; l--) {
18
- if (e[l].count <= 0) {
18
+ for (let s = e.length - 1; s >= 0; s--) {
19
+ if (e[s].count <= 0) {
19
20
  if (a === 0) continue;
20
21
  break;
21
22
  }
@@ -23,7 +24,7 @@ function X(e) {
23
24
  }
24
25
  return a;
25
26
  }
26
- function I(e, a) {
27
+ function ee(e, a) {
27
28
  var D;
28
29
  if (!((D = e == null ? void 0 : e.days) != null && D.length))
29
30
  return {
@@ -33,31 +34,31 @@ function I(e, a) {
33
34
  activeDays: 0,
34
35
  bestDay: 0
35
36
  };
36
- const l = Math.max(1, ...e.days.map((s) => s.count)), u = new Map(e.days.map((s) => [s.date, s.count])), y = L(e.from), d = L(e.to), f = y.getUTCDay(), c = f === 0 ? -6 : 1 - f, i = new Date(y);
37
+ const s = Math.max(1, ...e.days.map((l) => l.count)), u = new Map(e.days.map((l) => [l.date, l.count])), E = L(e.from), d = L(e.to), f = E.getUTCDay(), c = f === 0 ? -6 : 1 - f, i = new Date(E);
37
38
  i.setUTCDate(i.getUTCDate() + c);
38
39
  const p = [], N = [];
39
40
  let k = -1;
40
41
  for (; i.getTime() <= d.getTime() || p.length === 0; ) {
41
- const s = [];
42
+ const l = [];
42
43
  for (let r = 0; r < 7; r++) {
43
- const o = i.getUTCFullYear(), m = i.getUTCMonth(), E = i.getUTCDate(), b = `${o}-${String(m + 1).padStart(2, "0")}-${String(E).padStart(2, "0")}`, g = i.getTime() >= y.getTime() && i.getTime() <= d.getTime(), w = g ? u.get(b) ?? 0 : 0;
44
- r === 0 && g && m !== k && (N.push({ label: a[m], col: p.length }), k = m), s.push({
45
- date: b,
46
- count: g ? w : 0,
47
- level: g ? Q(w, l) : 0
44
+ const o = i.getUTCFullYear(), m = i.getUTCMonth(), y = i.getUTCDate(), w = `${o}-${String(m + 1).padStart(2, "0")}-${String(y).padStart(2, "0")}`, g = i.getTime() >= E.getTime() && i.getTime() <= d.getTime(), v = g ? u.get(w) ?? 0 : 0;
45
+ r === 0 && g && m !== k && (N.push({ label: a[m], col: p.length }), k = m), l.push({
46
+ date: w,
47
+ count: g ? v : 0,
48
+ level: g ? X(v, s) : 0
48
49
  }), i.setUTCDate(i.getUTCDate() + 1);
49
50
  }
50
- if (p.push(s), i.getTime() > d.getTime() && p.length >= 52 || p.length > 60) break;
51
+ if (p.push(l), i.getTime() > d.getTime() && p.length >= 52 || p.length > 60) break;
51
52
  }
52
53
  return {
53
54
  weeks: p,
54
55
  months: N,
55
- streak: X(e.days),
56
- activeDays: e.days.filter((s) => s.count > 0).length,
57
- bestDay: Math.max(0, ...e.days.map((s) => s.count))
56
+ streak: I(e.days),
57
+ activeDays: e.days.filter((l) => l.count > 0).length,
58
+ bestDay: Math.max(0, ...e.days.map((l) => l.count))
58
59
  };
59
60
  }
60
- const U = 5, j = [
61
+ const U = 5, G = [
61
62
  "янв",
62
63
  "фев",
63
64
  "мар",
@@ -70,16 +71,16 @@ const U = 5, j = [
70
71
  "окт",
71
72
  "ноя",
72
73
  "дек"
73
- ], _ = ["Пн", "", "Ср", "", "Пт", "", ""], ee = {
74
+ ], B = ["Пн", "", "Ср", "", "Пт", "", ""], te = {
74
75
  one: "действие",
75
76
  few: "действия",
76
77
  many: "действий"
77
78
  };
78
79
  function S(e, a) {
79
- const l = e % 10, u = e % 100;
80
- return l === 1 && u !== 11 ? a.one : l >= 2 && l <= 4 && (u < 10 || u >= 20) ? a.few : a.many;
80
+ const s = e % 10, u = e % 100;
81
+ return s === 1 && u !== 11 ? a.one : s >= 2 && s <= 4 && (u < 10 || u >= 20) ? a.few : a.many;
81
82
  }
82
- function te(e) {
83
+ function ne(e) {
83
84
  return S(e, { one: "день", few: "дня", many: "дней" });
84
85
  }
85
86
  function K(e, a) {
@@ -91,40 +92,40 @@ function K(e, a) {
91
92
  timeZone: "UTC"
92
93
  });
93
94
  }
94
- const ne = "hhr", ae = "hhc", le = "hha", se = "hhh", re = "hht", oe = "hhm", ce = "hho", ie = "hhn", me = "hhd", ue = "hhw", he = "hhk", pe = "hhe", de = "hhf", fe = "hhi", ge = "hhg", ye = "hhb", Ee = "hhp", be = "hhq", we = "hhv", ve = "hhl", Ne = "hhz", ke = "hhj", Te = "hhu", De = "hhx", xe = "hhs", Me = "hhy", n = {
95
- root: ne,
96
- calendar: ae,
95
+ const ae = "hhr", se = "hhc", le = "hha", re = "hhh", oe = "hht", ce = "hhm", ie = "hho", me = "hhn", ue = "hhd", he = "hhw", pe = "hhk", de = "hhe", fe = "hhf", ge = "hhi", Ee = "hhg", ye = "hhb", we = "hhp", ve = "hhq", be = "hhv", Ne = "hhl", ke = "hhz", Te = "hhj", De = "hhu", xe = "hhx", Me = "hhs", Ue = "hhy", n = {
96
+ root: ae,
97
+ calendar: se,
97
98
  aside: le,
98
- header: se,
99
- title: re,
100
- main: oe,
101
- omonth: ce,
102
- nest: ie,
103
- dow: me,
104
- weeks: ue,
105
- krow: he,
106
- entry: pe,
107
- footer: de,
108
- ihint: fe,
109
- gleg: ge,
99
+ header: re,
100
+ title: oe,
101
+ main: ce,
102
+ omonth: ie,
103
+ nest: me,
104
+ dow: ue,
105
+ weeks: he,
106
+ krow: pe,
107
+ entry: de,
108
+ footer: fe,
109
+ ihint: ge,
110
+ gleg: Ee,
110
111
  brand: ye,
111
- plist: Ee,
112
- qkpi: be,
113
- value: we,
114
- label: ve,
115
- zyears: Ne,
116
- jump: ke,
117
- up: Te,
118
- xbtn: De,
119
- selected: xe,
120
- ytip: Me
112
+ plist: we,
113
+ qkpi: ve,
114
+ value: be,
115
+ label: Ne,
116
+ zyears: ke,
117
+ jump: Te,
118
+ up: De,
119
+ xbtn: xe,
120
+ selected: Me,
121
+ ytip: Ue
121
122
  };
122
- function Ue({
123
+ function $e({
123
124
  weeks: e,
124
125
  months: a,
125
- cell: l,
126
+ cell: s,
126
127
  gap: u,
127
- step: y,
128
+ step: E,
128
129
  weekdays: d,
129
130
  focusDate: f,
130
131
  locale: c,
@@ -133,8 +134,8 @@ function Ue({
133
134
  onShowTip: N,
134
135
  onHideTip: k
135
136
  }) {
136
- function D(s) {
137
- const { key: r } = s;
137
+ function D(l) {
138
+ const { key: r } = l;
138
139
  if (r !== "ArrowLeft" && r !== "ArrowRight" && r !== "ArrowUp" && r !== "ArrowDown" || !e.length) return;
139
140
  let o = -1, m = -1;
140
141
  for (let x = 0; x < e.length; x++) {
@@ -145,15 +146,15 @@ function Ue({
145
146
  }
146
147
  }
147
148
  if (o < 0) return;
148
- s.preventDefault();
149
- let E = o, b = m;
150
- r === "ArrowDown" ? b = Math.min(6, m + 1) : r === "ArrowUp" ? b = Math.max(0, m - 1) : r === "ArrowRight" ? E = Math.min(e.length - 1, o + 1) : r === "ArrowLeft" && (E = Math.max(0, o - 1));
151
- const g = e[E][b];
149
+ l.preventDefault();
150
+ let y = o, w = m;
151
+ r === "ArrowDown" ? w = Math.min(6, m + 1) : r === "ArrowUp" ? w = Math.max(0, m - 1) : r === "ArrowRight" ? y = Math.min(e.length - 1, o + 1) : r === "ArrowLeft" && (y = Math.max(0, o - 1));
152
+ const g = e[y][w];
152
153
  p(g.date);
153
- const w = s.currentTarget.querySelector(
154
+ const v = l.currentTarget.querySelector(
154
155
  `[data-date="${g.date}"]`
155
156
  );
156
- w == null || w.focus();
157
+ v == null || v.focus();
157
158
  }
158
159
  return /* @__PURE__ */ t.createElement(t.Fragment, null, /* @__PURE__ */ t.createElement(
159
160
  "div",
@@ -161,32 +162,32 @@ function Ue({
161
162
  className: n.main,
162
163
  "aria-hidden": !0,
163
164
  style: {
164
- width: e.length ? e.length * y - u : void 0
165
+ width: e.length ? e.length * E - u : void 0
165
166
  }
166
167
  },
167
- a.map((s) => /* @__PURE__ */ t.createElement(
168
+ a.map((l) => /* @__PURE__ */ t.createElement(
168
169
  "span",
169
170
  {
170
- key: `${s.label}-${s.col}`,
171
+ key: `${l.label}-${l.col}`,
171
172
  className: n.omonth,
172
- style: { left: s.col * y }
173
+ style: { left: l.col * E }
173
174
  },
174
- s.label
175
+ l.label
175
176
  ))
176
- ), /* @__PURE__ */ t.createElement("div", { className: n.nest }, /* @__PURE__ */ t.createElement("div", { className: n.dow, "aria-hidden": !0 }, (d.length >= 7 ? d : _).slice(0, 7).map(
177
- (s, r) => s ? /* @__PURE__ */ t.createElement("span", { key: r }, s) : /* @__PURE__ */ t.createElement("span", { key: r })
177
+ ), /* @__PURE__ */ t.createElement("div", { className: n.nest }, /* @__PURE__ */ t.createElement("div", { className: n.dow, "aria-hidden": !0 }, (d.length >= 7 ? d : B).slice(0, 7).map(
178
+ (l, r) => l ? /* @__PURE__ */ t.createElement("span", { key: r }, l) : /* @__PURE__ */ t.createElement("span", { key: r })
178
179
  )), /* @__PURE__ */ t.createElement(
179
180
  "div",
180
181
  {
181
182
  className: n.weeks,
182
183
  style: {
183
- gridTemplateColumns: `repeat(${e.length}, ${l}px)`
184
+ gridTemplateColumns: `repeat(${e.length}, ${s}px)`
184
185
  },
185
186
  role: "grid",
186
187
  "aria-label": "График активности",
187
188
  onKeyDown: D
188
189
  },
189
- e.map((s, r) => /* @__PURE__ */ t.createElement("div", { key: r, className: n.krow, role: "row" }, s.map((o) => /* @__PURE__ */ t.createElement(
190
+ e.map((l, r) => /* @__PURE__ */ t.createElement("div", { key: r, className: n.krow, role: "row" }, l.map((o) => /* @__PURE__ */ t.createElement(
190
191
  "button",
191
192
  {
192
193
  key: o.date,
@@ -207,8 +208,8 @@ function Ue({
207
208
  ))))
208
209
  )));
209
210
  }
210
- function $e({ tip: e, locale: a, unit: l }) {
211
- return e ? Z(
211
+ function Ae({ tip: e, locale: a, unit: s }) {
212
+ return e ? J(
212
213
  /* @__PURE__ */ t.createElement(
213
214
  "div",
214
215
  {
@@ -216,49 +217,55 @@ function $e({ tip: e, locale: a, unit: l }) {
216
217
  style: {
217
218
  left: e.x,
218
219
  top: e.y,
219
- zIndex: J() + 10
220
+ zIndex: Q() + 10
220
221
  },
221
222
  role: "tooltip"
222
223
  },
223
224
  /* @__PURE__ */ t.createElement("div", null, K(e.date, a)),
224
- /* @__PURE__ */ t.createElement("div", null, e.count, " ", S(e.count, l))
225
+ /* @__PURE__ */ t.createElement("div", null, e.count, " ", S(e.count, s))
225
226
  ),
226
227
  document.body
227
228
  ) : null;
228
229
  }
229
- function Ae({
230
+ function Ce({
230
231
  yearPage: e,
231
232
  yearPageCount: a,
232
- visibleYears: l,
233
+ visibleYears: s,
233
234
  activeYear: u,
234
- currentYear: y,
235
+ currentYear: E,
235
236
  onYearPageChange: d,
236
237
  onYearChange: f
237
238
  }) {
238
239
  return /* @__PURE__ */ t.createElement("nav", { className: n.zyears, "aria-label": "Год" }, a > 1 ? /* @__PURE__ */ t.createElement(
239
- "button",
240
+ H,
240
241
  {
241
- type: "button",
242
+ variant: "ghost",
243
+ size: "s",
244
+ width: "s",
242
245
  className: n.up,
243
246
  "aria-label": "Предыдущие годы",
244
247
  disabled: e <= 0,
245
248
  onClick: () => d((c) => Math.max(0, c - 1))
246
249
  },
247
250
  "‹"
248
- ) : null, /* @__PURE__ */ t.createElement("div", { className: n.jump, role: "group" }, l.map((c) => /* @__PURE__ */ t.createElement(
249
- "button",
251
+ ) : null, /* @__PURE__ */ t.createElement("div", { className: n.jump, role: "group" }, s.map((c) => /* @__PURE__ */ t.createElement(
252
+ H,
250
253
  {
251
254
  key: c,
252
- type: "button",
255
+ variant: "ghost",
256
+ size: "s",
257
+ width: "s",
253
258
  "aria-pressed": c === u,
254
- className: G(n.xbtn, c === u && n.selected),
255
- onClick: () => f == null ? void 0 : f(c === y ? null : c)
259
+ className: _(n.xbtn, c === u && n.selected),
260
+ onClick: () => f == null ? void 0 : f(c === E ? null : c)
256
261
  },
257
262
  c
258
263
  ))), a > 1 ? /* @__PURE__ */ t.createElement(
259
- "button",
264
+ H,
260
265
  {
261
- type: "button",
266
+ variant: "ghost",
267
+ size: "s",
268
+ width: "s",
262
269
  className: n.up,
263
270
  "aria-label": "Следующие годы",
264
271
  disabled: e >= a - 1,
@@ -267,47 +274,47 @@ function Ae({
267
274
  "›"
268
275
  ) : null);
269
276
  }
270
- function Ce() {
277
+ function Se() {
271
278
  if (typeof document > "u")
272
279
  return { cell: 12, gap: 3, step: 15 };
273
- const e = getComputedStyle(document.documentElement), a = parseFloat(e.getPropertyValue("--healthmap-cell").trim()) || 12, l = parseFloat(e.getPropertyValue("--healthmap-gap").trim()) || 3;
274
- return { cell: a, gap: l, step: a + l };
280
+ const e = getComputedStyle(document.documentElement), a = parseFloat(e.getPropertyValue("--healthmap-cell").trim()) || 12, s = parseFloat(e.getPropertyValue("--healthmap-gap").trim()) || 3;
281
+ return { cell: a, gap: s, step: a + s };
275
282
  }
276
- function Le({
283
+ function qe({
277
284
  data: e,
278
285
  loading: a = !1,
279
- year: l = null,
286
+ year: s = null,
280
287
  onYearChange: u,
281
- hint: y,
288
+ hint: E,
282
289
  brandName: d = "Активность",
283
290
  brandSub: f = "сводка",
284
- unit: c = ee,
285
- months: i = j,
291
+ unit: c = te,
292
+ months: i = G,
286
293
  locale: p = "ru-RU",
287
294
  loadingLabel: N = "Загрузка…",
288
295
  lastYearLabel: k = "последний год",
289
- weekdays: D = _,
290
- className: s
296
+ weekdays: D = B,
297
+ className: l
291
298
  }) {
292
- const [r, o] = H(0), [m, E] = H(null), [b, g] = H(""), { cell: w, gap: x, step: $ } = Ce(), A = i.length >= 12 ? i : j, v = Y(
293
- () => I(e, A),
299
+ const [r, o] = z(0), [m, y] = z(null), [w, g] = z(""), { cell: v, gap: x, step: $ } = Se(), A = i.length >= 12 ? i : G, b = Y(
300
+ () => ee(e, A),
294
301
  [e, A]
295
302
  );
296
- z(() => {
297
- const h = v.weeks.flat();
303
+ j(() => {
304
+ const h = b.weeks.flat();
298
305
  if (!h.length) {
299
306
  g("");
300
307
  return;
301
308
  }
302
309
  const M = h.find((T) => T.count > 0);
303
310
  g((M ?? h[0]).date);
304
- }, [v.weeks]);
311
+ }, [b.weeks]);
305
312
  const C = Y(() => {
306
313
  var M;
307
314
  const h = (M = e == null ? void 0 : e.years) != null && M.length ? [...e.years] : [(/* @__PURE__ */ new Date()).getUTCFullYear(), (/* @__PURE__ */ new Date()).getUTCFullYear() - 1];
308
- return [...new Set(h)].sort((T, W) => W - T);
309
- }, [e == null ? void 0 : e.years]), F = (/* @__PURE__ */ new Date()).getUTCFullYear(), R = l ?? (e == null ? void 0 : e.year) ?? F, q = (e == null ? void 0 : e.total) ?? 0, O = Math.max(1, Math.ceil(C.length / U));
310
- z(() => {
315
+ return [...new Set(h)].sort((T, Z) => Z - T);
316
+ }, [e == null ? void 0 : e.years]), F = (/* @__PURE__ */ new Date()).getUTCFullYear(), R = s ?? (e == null ? void 0 : e.year) ?? F, q = (e == null ? void 0 : e.total) ?? 0, O = Math.max(1, Math.ceil(C.length / U));
317
+ j(() => {
311
318
  const h = C.indexOf(R);
312
319
  h < 0 || o(Math.floor(h / U));
313
320
  }, [R, C]);
@@ -315,34 +322,34 @@ function Le({
315
322
  r * U,
316
323
  r * U + U
317
324
  );
318
- function B(h, M) {
325
+ function V(h, M) {
319
326
  const T = M.getBoundingClientRect();
320
- E({
327
+ y({
321
328
  date: h.date,
322
329
  count: h.count,
323
330
  x: T.left + T.width / 2,
324
331
  y: T.top
325
332
  });
326
333
  }
327
- const V = a ? N : `${q} ${S(q, c)} за ${l == null || l === F ? k : `${l} год`}`;
328
- return /* @__PURE__ */ t.createElement("div", { className: G(n.root, s) }, /* @__PURE__ */ t.createElement("section", { className: n.calendar, "aria-label": "Календарь активности" }, /* @__PURE__ */ t.createElement("div", { className: n.header }, /* @__PURE__ */ t.createElement("h3", { className: n.title }, V)), /* @__PURE__ */ t.createElement(
329
- Ue,
334
+ const W = a ? N : `${q} ${S(q, c)} за ${s == null || s === F ? k : `${s} год`}`;
335
+ return /* @__PURE__ */ t.createElement("div", { className: _(n.root, l) }, /* @__PURE__ */ t.createElement("section", { className: n.calendar, "aria-label": "Календарь активности" }, /* @__PURE__ */ t.createElement("div", { className: n.header }, /* @__PURE__ */ t.createElement("h3", { className: n.title }, W)), /* @__PURE__ */ t.createElement(
336
+ $e,
330
337
  {
331
- weeks: v.weeks,
332
- months: v.months,
333
- cell: w,
338
+ weeks: b.weeks,
339
+ months: b.months,
340
+ cell: v,
334
341
  gap: x,
335
342
  step: $,
336
343
  weekdays: D,
337
- focusDate: b,
344
+ focusDate: w,
338
345
  locale: p,
339
346
  unit: c,
340
347
  onFocusDate: g,
341
- onShowTip: B,
342
- onHideTip: () => E(null)
348
+ onShowTip: V,
349
+ onHideTip: () => y(null)
343
350
  }
344
- ), /* @__PURE__ */ t.createElement("div", { className: n.footer }, /* @__PURE__ */ t.createElement("span", { className: n.ihint }, y ?? ""), /* @__PURE__ */ t.createElement(
345
- Ae,
351
+ ), /* @__PURE__ */ t.createElement("div", { className: n.footer }, /* @__PURE__ */ t.createElement("span", { className: n.ihint }, E ?? ""), /* @__PURE__ */ t.createElement(
352
+ Ce,
346
353
  {
347
354
  yearPage: r,
348
355
  yearPageCount: O,
@@ -352,8 +359,8 @@ function Le({
352
359
  onYearPageChange: o,
353
360
  onYearChange: u
354
361
  }
355
- ), /* @__PURE__ */ t.createElement("div", { className: n.gleg, "aria-hidden": !0 }, /* @__PURE__ */ t.createElement("span", null, "Меньше"), [0, 1, 2, 3, 4].map((h) => /* @__PURE__ */ t.createElement("span", { key: h, className: n.entry, "data-level": h })), /* @__PURE__ */ t.createElement("span", null, "Больше")))), /* @__PURE__ */ t.createElement("aside", { className: n.aside, "aria-label": "Сводка" }, /* @__PURE__ */ t.createElement("div", { className: n.brand }, /* @__PURE__ */ t.createElement("span", null, d), /* @__PURE__ */ t.createElement("span", null, f)), /* @__PURE__ */ t.createElement("div", { className: n.plist }, /* @__PURE__ */ t.createElement("div", { className: n.qkpi }, /* @__PURE__ */ t.createElement("span", { className: n.value }, a ? "—" : v.streak), /* @__PURE__ */ t.createElement("span", { className: n.label }, "серия, ", te(v.streak))), /* @__PURE__ */ t.createElement("div", { className: n.qkpi }, /* @__PURE__ */ t.createElement("span", { className: n.value }, a ? "—" : v.activeDays), /* @__PURE__ */ t.createElement("span", { className: n.label }, "активных дней")), /* @__PURE__ */ t.createElement("div", { className: n.qkpi }, /* @__PURE__ */ t.createElement("span", { className: n.value }, a ? "—" : v.bestDay), /* @__PURE__ */ t.createElement("span", { className: n.label }, "макс. за день")))), /* @__PURE__ */ t.createElement($e, { tip: m, locale: p, unit: c }));
362
+ ), /* @__PURE__ */ t.createElement("div", { className: n.gleg, "aria-hidden": !0 }, /* @__PURE__ */ t.createElement("span", null, "Меньше"), [0, 1, 2, 3, 4].map((h) => /* @__PURE__ */ t.createElement("span", { key: h, className: n.entry, "data-level": h })), /* @__PURE__ */ t.createElement("span", null, "Больше")))), /* @__PURE__ */ t.createElement("aside", { className: n.aside, "aria-label": "Сводка" }, /* @__PURE__ */ t.createElement("div", { className: n.brand }, /* @__PURE__ */ t.createElement("span", null, d), /* @__PURE__ */ t.createElement("span", null, f)), /* @__PURE__ */ t.createElement("div", { className: n.plist }, /* @__PURE__ */ t.createElement("div", { className: n.qkpi }, /* @__PURE__ */ t.createElement("span", { className: n.value }, a ? "—" : b.streak), /* @__PURE__ */ t.createElement("span", { className: n.label }, "серия, ", ne(b.streak))), /* @__PURE__ */ t.createElement("div", { className: n.qkpi }, /* @__PURE__ */ t.createElement("span", { className: n.value }, a ? "—" : b.activeDays), /* @__PURE__ */ t.createElement("span", { className: n.label }, "активных дней")), /* @__PURE__ */ t.createElement("div", { className: n.qkpi }, /* @__PURE__ */ t.createElement("span", { className: n.value }, a ? "—" : b.bestDay), /* @__PURE__ */ t.createElement("span", { className: n.label }, "макс. за день")))), /* @__PURE__ */ t.createElement(Ae, { tip: m, locale: p, unit: c }));
356
363
  }
357
364
  export {
358
- Le as H
365
+ qe as H
359
366
  };
package/dist/Healthmap.js CHANGED
@@ -1,4 +1,4 @@
1
- import { H as m } from "./Healthmap-Z-LLfGW0.js";
1
+ import { H as m } from "./Healthmap-B4h6_9Yv.js";
2
2
  export {
3
3
  m as Healthmap
4
4
  };
package/dist/Layout.css CHANGED
@@ -1 +1 @@
1
- @layer elcrm-components{.slr{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;box-sizing:border-box;background:var(--shell-background-muted);margin:var(--layout-margin);padding:var(--layout-padding);max-width:var(--layout-max-width);gap:0}.slx{height:var(--layout-height);max-height:var(--layout-height);overflow:hidden}.slm{display:flex;flex-direction:column;flex:1 1 auto;min-width:0;min-height:0;overflow:auto;overscroll-behavior:contain}.slr:not(.slx){height:auto;max-height:none;overflow:visible}.slr:not(.slx) .slm{overflow:visible;flex:0 1 auto;min-height:auto}.sls{flex-direction:row;align-items:stretch;gap:var(--layout-gap)}.slb{display:flex;flex-direction:column;flex:1 1 auto;min-width:0;min-height:0;overflow:hidden;background:var(--layout-main-background);border-radius:var(--layout-main-radius);box-shadow:var(--layout-main-shadow);border:var(--layout-main-border)}.slr:not(.slx) .slb{overflow:visible}.sla{display:flex;flex-direction:column;flex:0 0 var(--sidebar-width);width:var(--sidebar-width);min-width:0;min-height:0;align-self:stretch}.slk{overflow:hidden}.sla:not(.slk){overflow:auto}.sla>*{flex:1 1 auto;min-height:0;width:100%;height:100%;max-height:100%}@media (max-width: 900px){.sla{flex-basis:72px;width:72px}}.slh,.slf{flex:0 0 auto;min-width:0}}
1
+ @layer elcrm-components{.slr{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;box-sizing:border-box;background:var(--shell-background-muted);margin:var(--layout-margin);padding:var(--layout-padding);max-width:var(--layout-max-width);gap:0}.slx{height:var(--layout-height);max-height:var(--layout-height);overflow:hidden}.slm{display:flex;flex-direction:column;flex:1 1 auto;min-width:0;min-height:0;overflow:auto;overscroll-behavior:contain;box-sizing:border-box;padding:var(--layout-main-padding)}.slr:not(.slx){height:auto;max-height:none;overflow:visible}.slr:not(.slx) .slm{overflow:visible;flex:0 1 auto;min-height:auto}.sls{flex-direction:row;align-items:stretch;gap:var(--layout-gap)}.slb{display:flex;flex-direction:column;flex:1 1 auto;min-width:0;min-height:0;overflow:hidden;background:var(--layout-main-background);border-radius:var(--layout-main-radius);box-shadow:var(--layout-main-shadow);border:var(--layout-main-border)}.slr:not(.slx) .slb{overflow:visible}.sla{display:flex;flex-direction:column;flex:0 0 var(--sidebar-width);width:var(--sidebar-width);min-width:0;min-height:0;align-self:stretch}.slk{overflow:hidden}.sla:not(.slk){overflow:auto}.sla>*{flex:1 1 auto;min-height:0;width:100%;height:100%;max-height:100%}@media (max-width: 900px){.sla{flex-basis:72px;width:72px}}.slh,.slf{flex:0 0 auto;min-width:0}}
package/dist/Layout.d.ts CHANGED
@@ -26,7 +26,9 @@ export type LayoutFixedSlot = "header" | "footer" | "sidebar";
26
26
  * </Layout>
27
27
  * ```
28
28
  *
29
- * Токены: `--layout-height`, `--layout-padding`, `--layout-margin`, `--layout-max-width`, `--shell-*`.
29
+ * Токены: `--layout-height`, `--layout-padding`, `--layout-main-padding`,
30
+ * `--layout-margin`, `--layout-max-width`, `--shell-*`.
31
+ * `--layout-main-padding` — отступ внутри `<main>` (между шапкой и контентом).
30
32
  */
31
33
  export type LayoutProps = React.HTMLAttributes<HTMLDivElement> & {
32
34
  /** Левая колонка (обычно `<Sidebar />`) — ряд: сайдбар + контент */
@@ -0,0 +1,76 @@
1
+ import l from "react";
2
+ import { Button as w } from "@elcrm/button";
3
+ import { B as y } from "./Badge-BjScAXGy.js";
4
+ import { b as B } from "./badgeText-CRzlIzi3.js";
5
+ import { c as p } from "./cx-CcykAxZN.js";
6
+ import { h as E } from "./rovingKeys-Di9N1Nct.js";
7
+ import { u as N } from "./useControllableValue-BaE0VR5d.js";
8
+ import './Menu.css';const z = "lnr", C = "lnv", K = "lni", M = "lnd", D = "lna", I = "lnu", e = {
9
+ root: z,
10
+ vertical: C,
11
+ item: K,
12
+ dot: M,
13
+ active: D,
14
+ underline: I
15
+ };
16
+ function G({
17
+ items: n,
18
+ vertical: r,
19
+ variant: m = "plain",
20
+ value: c,
21
+ defaultValue: s,
22
+ onValueChange: i,
23
+ children: g,
24
+ className: R,
25
+ ...h
26
+ }) {
27
+ const [t, v] = N(
28
+ c,
29
+ s,
30
+ i
31
+ ), x = (n ?? []).filter((a) => !a.disabled).map((a) => a.value), k = m === "line", d = l.useRef(null), u = i || c !== void 0 || s !== void 0;
32
+ return /* @__PURE__ */ l.createElement(
33
+ "nav",
34
+ {
35
+ ref: d,
36
+ className: p(e.root, r && e.vertical, k && e.underline, R),
37
+ onKeyDown: u ? (a) => E(a, {
38
+ values: x,
39
+ value: t,
40
+ onSelect: v,
41
+ vertical: r,
42
+ focusRoot: d.current
43
+ }) : void 0,
44
+ ...h
45
+ },
46
+ n == null ? void 0 : n.map((a) => {
47
+ const o = a.active ?? (t != null && a.value === t), b = B(a.badge);
48
+ return /* @__PURE__ */ l.createElement(
49
+ w,
50
+ {
51
+ key: a.value,
52
+ variant: "ghost",
53
+ size: "m",
54
+ width: "s",
55
+ className: p(e.item, o && e.active),
56
+ "data-value": a.value,
57
+ "data-active": o ? "true" : void 0,
58
+ "aria-current": o ? "page" : void 0,
59
+ "aria-label": a.ariaLabel,
60
+ tabIndex: u ? o ? 0 : -1 : void 0,
61
+ disabled: a.disabled,
62
+ onClick: () => {
63
+ var f;
64
+ (f = a.onClick) == null || f.call(a), v(a.value);
65
+ }
66
+ },
67
+ a.label,
68
+ b != null ? /* @__PURE__ */ l.createElement(y, { className: e.dot, tone: "accent", size: "s" }, b) : null
69
+ );
70
+ }),
71
+ g
72
+ );
73
+ }
74
+ export {
75
+ G as M
76
+ };
package/dist/Menu.d.ts CHANGED
@@ -24,6 +24,11 @@ export type MenuItem = {
24
24
  * `0`, `null`, `""` — не рендерим.
25
25
  */
26
26
  badge?: number | string | null;
27
+ /**
28
+ * Подпись для скринридера, если `label` — иконка без текста.
29
+ * Попадает в `aria-label` кнопки пункта.
30
+ */
31
+ ariaLabel?: string;
27
32
  };
28
33
  /**
29
34
  * Props компонента {@link Menu}.
package/dist/Menu.js CHANGED
@@ -1,4 +1,4 @@
1
- import { M as r } from "./Menu-D2kf7fN_.js";
1
+ import { M as r } from "./Menu-CR2CclSe.js";
2
2
  export {
3
3
  r as Menu
4
4
  };
@@ -0,0 +1,33 @@
1
+ import t from "react";
2
+ import { c as i } from "./cx-CcykAxZN.js";
3
+ import './PageHead.css';const u = "sdr", f = "sdk", p = "sdw", E = "sdt", N = "sdh", h = "sdn", g = "sdu", v = "sds", w = "sda", x = "sdc", e = {
4
+ root: u,
5
+ kept: f,
6
+ wrap: p,
7
+ textcol: E,
8
+ heading: N,
9
+ name: h,
10
+ usup: g,
11
+ subtitle: v,
12
+ actions: w,
13
+ children: x
14
+ };
15
+ function k(n) {
16
+ return !(n == null || n === !1 || n === "" || typeof n == "number" && n === 0 || n === "0");
17
+ }
18
+ function P({
19
+ title: n,
20
+ sup: s,
21
+ subtitle: a,
22
+ actions: l,
23
+ sticky: r,
24
+ headingLevel: o = "h1",
25
+ className: m,
26
+ children: c
27
+ }) {
28
+ const d = o;
29
+ return /* @__PURE__ */ t.createElement("div", { className: i(e.root, r && e.kept, m) }, /* @__PURE__ */ t.createElement("div", { className: e.wrap }, /* @__PURE__ */ t.createElement("div", { className: e.textcol }, /* @__PURE__ */ t.createElement(d, { className: e.heading }, /* @__PURE__ */ t.createElement("span", { className: e.name }, n), k(s) ? /* @__PURE__ */ t.createElement("span", { className: e.usup }, s) : null), a != null ? /* @__PURE__ */ t.createElement("p", { className: e.subtitle }, a) : null), l != null ? /* @__PURE__ */ t.createElement("div", { className: e.actions }, l) : null), c != null ? /* @__PURE__ */ t.createElement("div", { className: e.children }, c) : null);
30
+ }
31
+ export {
32
+ P
33
+ };
@@ -28,6 +28,12 @@ export type PageHeadProps = {
28
28
  sup?: React.ReactNode;
29
29
  /** Подзаголовок */
30
30
  subtitle?: React.ReactNode;
31
+ /**
32
+ * HTML-тег заголовка.
33
+ * По умолчанию `h1`: PageHead — заголовок страницы.
34
+ * `div` — если семантический заголовок уже есть во внешнем layout.
35
+ */
36
+ headingLevel?: "h1" | "h2" | "div";
31
37
  /** Кнопки / поиск справа в одной строке с заголовком */
32
38
  actions?: React.ReactNode;
33
39
  /**
@@ -55,4 +61,4 @@ export type PageHeadProps = {
55
61
  *
56
62
  * @see PageShell, Section, Header, Badge
57
63
  */
58
- export declare function PageHead({ title, sup, subtitle, actions, sticky, className, children, }: PageHeadProps): React.JSX.Element;
64
+ export declare function PageHead({ title, sup, subtitle, actions, sticky, headingLevel, className, children, }: PageHeadProps): React.JSX.Element;
package/dist/PageHead.js CHANGED
@@ -1,4 +1,4 @@
1
- import { P as o } from "./PageHead-BfClTLrF.js";
1
+ import { P as o } from "./PageHead-BjBvWtlk.js";
2
2
  export {
3
3
  o as PageHead
4
4
  };