@elcrm/components 0.2.13 → 0.2.14

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.
package/README.md CHANGED
@@ -33,6 +33,7 @@ import {
33
33
  ActionGroup,
34
34
  Toolbar,
35
35
  TextGroup,
36
+ Text,
36
37
  Stat,
37
38
  Stack,
38
39
  Menu,
@@ -115,12 +116,13 @@ import { RadioGroup } from "@elcrm/components/RadioGroup";
115
116
  | **ActionGroup** | Ряд иконок в карточке | `label`, `items` и/или `children` |
116
117
  | **Toolbar** | Фильтры одной высоты | `size`, `width` (`l` = 100%, `s` = по контенту), `align`, `label`, `children` |
117
118
  | **TextGroup** | Title + description | `title`, `description`, `size` |
119
+ | **Text** | Короткий текст | `tone` (`default`/`muted`), `as` |
118
120
  | **ItemColumn** | Иконка + столбик в Item | `icon`, `title`, `extra`, `aside`, `description`, `footer` / `meta`, `unread` |
119
121
  | **Stat** | Карточка-метрика | `label`, `value`, `tone`, `labelMuted` |
120
122
  | **List** / **Item** | Список и строка | List: `row`; Item: `as`, `active`, `variant` (`plain`/`card`) |
121
123
  | **Stack** | Ряд / колонка / сетка | `direction`, `columns` (N или `["1fr", "100px"]`), `gap` |
122
- | **Loading** | Плейсхолдер загрузки | `children` |
123
- | **EmptyState** | Заглушка «нет данных» | `title`, `description`, `icon`, `actions` |
124
+ | **Loading** | Плейсхолдер загрузки | `children`; `--loading-min-height` |
125
+ | **EmptyState** | Пустой / ошибка | `title`, `description`, `icon`, `actions`; `--empty-*` |
124
126
  | **createLazyResolver** | Кэш `import()` секций | `(key) => import(…)` |
125
127
 
126
128
  Слоты `Header` заполняет приложение: поиск — `@elcrm/search`, кнопки — `@elcrm/button`, и т.д.
@@ -774,6 +776,8 @@ const resolve = createLazyResolver(
774
776
  --code-block-bg / --code-block-padding / --code-block-font-size
775
777
  --split-handle-size / --split-handle-bg / --split-handle-bg-hover
776
778
  --banner-padding / --banner-bg / --banner-border
779
+ --loading-min-height
780
+ --empty-max-width / --empty-padding
777
781
  --panel-info-width / --panel-info-width-min / --panel-info-overlay-max / --panel-info-backdrop
778
782
  --row-gap / --column-gap
779
783
  --popup-shadow
@@ -1 +1 @@
1
- @layer elcrm-components{.cpr{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--shell-gap);padding:var(--shell-padding);text-align:center;color:var(--shell-color-muted)}.cpi{display:flex;margin-bottom:var(--shell-gap-sm);color:var(--shell-color-muted)}.cpt{margin:0;font-size:var(--shell-font-size-lg);font-weight:var(--shell-font-weight);color:var(--shell-color);line-height:1.3}.cpd{margin:0;max-width:22rem;font-size:var(--shell-font-size);color:var(--shell-color-muted);line-height:1.45}.cpa{display:flex;flex-wrap:wrap;gap:var(--shell-gap-sm);justify-content:center;margin-top:var(--shell-gap)}}
1
+ @layer elcrm-components{.cpr{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--shell-gap);padding:var(--empty-padding);max-width:var(--empty-max-width);margin-inline:auto;text-align:center;color:var(--shell-color-muted)}.cpi{display:flex;margin-bottom:var(--shell-gap-sm);color:var(--shell-color-muted)}.cpt{margin:0;font-size:var(--shell-font-size-lg);font-weight:var(--shell-font-weight);color:var(--shell-color);line-height:1.3}.cpd{margin:0;max-width:22rem;font-size:var(--shell-font-size);color:var(--shell-color-muted);line-height:1.45}.cpa{display:flex;flex-wrap:wrap;gap:var(--shell-gap-sm);justify-content:center;margin-top:var(--shell-gap)}}
@@ -14,7 +14,7 @@ import { default as React } from 'react';
14
14
  * />
15
15
  * ```
16
16
  *
17
- * Токены: `--shell-*`.
17
+ * Токены: `--shell-*`, `--empty-max-width`, `--empty-padding`.
18
18
  */
19
19
  export type EmptyStateProps = React.HTMLAttributes<HTMLDivElement> & {
20
20
  /** Заголовок заглушки */
package/dist/Loading.css CHANGED
@@ -1 +1 @@
1
- @layer elcrm-components{.cgr{display:flex;align-items:center;justify-content:center;gap:var(--shell-gap-sm);padding:var(--shell-gap-lg);color:var(--shell-color-muted)}.cgi{box-sizing:border-box;width:var(--shell-icon-size);height:var(--shell-icon-size);border:2px solid var(--shell-border);border-top-color:var(--shell-color-accent);border-radius:var(--avatar-radius);animation:cgk .7s linear infinite}}@keyframes cgk{to{transform:rotate(360deg)}}
1
+ @layer elcrm-components{.cgr{display:flex;align-items:center;justify-content:center;gap:var(--shell-gap-sm);padding:var(--shell-gap-lg);min-height:var(--loading-min-height);color:var(--shell-color-muted)}.cgi{box-sizing:border-box;width:var(--shell-icon-size);height:var(--shell-icon-size);border:2px solid var(--shell-border);border-top-color:var(--shell-color-accent);border-radius:var(--avatar-radius);animation:cgk .7s linear infinite}}@keyframes cgk{to{transform:rotate(360deg)}}
package/dist/Loading.d.ts CHANGED
@@ -10,7 +10,7 @@ import { default as React } from 'react';
10
10
  * {isLoading ? <Loading>Загружаем клиентов…</Loading> : <List>…</List>}
11
11
  * ```
12
12
  *
13
- * Токены: `--shell-*`.
13
+ * Токены: `--shell-*`, `--loading-min-height`.
14
14
  */
15
15
  export type LoadingProps = React.HTMLAttributes<HTMLDivElement> & {
16
16
  /** Текст или кастомный индикатор (по умолчанию «Загрузка…») */
@@ -0,0 +1,25 @@
1
+ import s from "react";
2
+ import { c as a } from "./cx-CcykAxZN.js";
3
+ import './Text.css';const n = "cHr", f = "cHm", t = {
4
+ r: n,
5
+ m: f
6
+ };
7
+ function i({
8
+ tone: r = "default",
9
+ as: c = "p",
10
+ className: e,
11
+ children: m,
12
+ ...o
13
+ }) {
14
+ return /* @__PURE__ */ s.createElement(
15
+ c,
16
+ {
17
+ className: a(t.r, r === "muted" && t.m, e),
18
+ ...o
19
+ },
20
+ m
21
+ );
22
+ }
23
+ export {
24
+ i as T
25
+ };
package/dist/Text.css ADDED
@@ -0,0 +1 @@
1
+ @layer elcrm-components{.cHr{margin:0;font-size:.9rem;line-height:1.45;color:var(--shell-color)}.cHm{color:var(--shell-color-muted)}}
package/dist/Text.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import { default as React } from 'react';
2
+ export type TextTone = "default" | "muted";
3
+ export type TextProps = React.HTMLAttributes<HTMLElement> & {
4
+ /** Семантика цвета: default = `--shell-color`, muted = `--shell-color-muted` */
5
+ tone?: TextTone;
6
+ /** HTML-тег */
7
+ as?: "p" | "span" | "div" | "label" | "strong" | "em";
8
+ };
9
+ /**
10
+ * Короткий текст с тоном. Для пары title+description — {@link TextGroup}.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * <Text tone="muted">Ничего не найдено</Text>
15
+ * ```
16
+ *
17
+ * Токены: `--shell-color`, `--shell-color-muted`, `--shell-font-size`.
18
+ */
19
+ export declare function Text({ tone, as: Tag, className, children, ...rest }: TextProps): React.JSX.Element;
package/dist/Text.js ADDED
@@ -0,0 +1,4 @@
1
+ import { T as r } from "./Text-zHK2wmsw.js";
2
+ export {
3
+ r as Text
4
+ };
package/dist/index.css CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  @layer elcrm-components{.crr{position:relative;display:inline-flex;vertical-align:middle}.crt{display:inline-flex;align-items:center;gap:var(--shell-gap-sm);margin:0;padding:var(--shell-padding);box-sizing:border-box;font:inherit;font-size:var(--shell-font-size);font-weight:var(--shell-font-weight);color:var(--shell-color);background:var(--shell-background);border:1px solid var(--shell-border);border-radius:var(--shell-radius);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;line-height:1.2}.crt[data-size]{height:var(--control-height);min-height:var(--control-height);padding-block:0;box-sizing:border-box}.crt:hover{background:var(--shell-background-hover)}.crt[data-open=true]{border-color:var(--shell-color-accent);color:var(--shell-color-accent)}.crc{display:inline-flex;width:var(--shell-icon-size);height:var(--shell-icon-size);flex-shrink:0;color:var(--shell-color-muted)}.crt[data-open=true] .crc{color:var(--shell-color-accent)}.crp{min-width:0}.crh{margin:0;padding:var(--shell-padding);font-size:var(--shell-font-size-sm);font-weight:var(--shell-font-weight);color:var(--shell-color-muted);line-height:1.3}.crg{display:flex;flex-direction:column;gap:2px}.crd{height:0;margin:var(--shell-gap-sm) 0;border:0;border-top:1px solid var(--shell-border)}.cri{display:flex;align-items:center;gap:var(--shell-gap-sm);width:100%;margin:0;padding:var(--shell-padding);box-sizing:border-box;text-align:left;font:inherit;font-size:var(--shell-font-size);font-weight:500;color:var(--shell-color);background:transparent;border:none;border-radius:calc(var(--shell-radius) * .7);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;line-height:1.35}.cri:hover:not(:disabled),.cri:focus-visible:not(:disabled){background:var(--shell-background-hover);outline:none}.cri[data-checked=true]{background:var(--shell-background-selected)}.cri[data-danger=true]{color:var(--shell-color-danger)}.cri[data-danger=true] .crn,.cri[data-danger=true] .crm{color:inherit}.cri:disabled,.cri[aria-disabled=true]{opacity:var(--shell-disabled-opacity);cursor:not-allowed}.crn,.crk{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;width:var(--shell-icon-size);height:var(--shell-icon-size);color:var(--shell-color-muted)}.crk{color:var(--shell-color-accent)}.crl{flex:1;min-width:0}.cru{flex-shrink:0;margin-left:auto;font-size:var(--shell-font-size-sm);color:var(--shell-color-muted)}.crm{display:inline-flex;flex-shrink:0;margin-left:auto;width:var(--shell-icon-size);height:var(--shell-icon-size);color:var(--shell-color-muted)}.crb{display:inline-flex;flex-shrink:0;width:var(--shell-status-size);height:var(--shell-status-size);border-radius:50%}.cro{background:var(--shell-color-success)}.crf{background:var(--shell-color-muted)}.crx{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;box-sizing:border-box;width:var(--shell-check-size);height:var(--shell-check-size);border:1px solid var(--shell-border);border-radius:calc(var(--shell-radius) * .4);background:var(--shell-background);color:var(--avatar-color)}.cry{border-color:var(--shell-color-accent);background:var(--shell-color-accent)}.crv{width:70%;height:70%;display:block}}
24
24
 
25
- @layer elcrm-components{.cpr{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--shell-gap);padding:var(--shell-padding);text-align:center;color:var(--shell-color-muted)}.cpi{display:flex;margin-bottom:var(--shell-gap-sm);color:var(--shell-color-muted)}.cpt{margin:0;font-size:var(--shell-font-size-lg);font-weight:var(--shell-font-weight);color:var(--shell-color);line-height:1.3}.cpd{margin:0;max-width:22rem;font-size:var(--shell-font-size);color:var(--shell-color-muted);line-height:1.45}.cpa{display:flex;flex-wrap:wrap;gap:var(--shell-gap-sm);justify-content:center;margin-top:var(--shell-gap)}}
25
+ @layer elcrm-components{.cpr{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--shell-gap);padding:var(--empty-padding);max-width:var(--empty-max-width);margin-inline:auto;text-align:center;color:var(--shell-color-muted)}.cpi{display:flex;margin-bottom:var(--shell-gap-sm);color:var(--shell-color-muted)}.cpt{margin:0;font-size:var(--shell-font-size-lg);font-weight:var(--shell-font-weight);color:var(--shell-color);line-height:1.3}.cpd{margin:0;max-width:22rem;font-size:var(--shell-font-size);color:var(--shell-color-muted);line-height:1.45}.cpa{display:flex;flex-wrap:wrap;gap:var(--shell-gap-sm);justify-content:center;margin-top:var(--shell-gap)}}
26
26
 
27
27
  @layer elcrm-components{.cfr{flex-shrink:0;padding:var(--shell-padding);color:var(--shell-color-muted);background:transparent;border-top:1px solid var(--shell-border);font-size:var(--shell-font-size-sm)}}
28
28
 
@@ -38,7 +38,7 @@
38
38
 
39
39
  @layer elcrm-components{.csr{display:flex;flex-direction:column;gap:var(--shell-gap-sm);padding:0;margin:0;list-style:none}.csh{flex-direction:row;flex-wrap:wrap}}
40
40
 
41
- @layer elcrm-components{.cgr{display:flex;align-items:center;justify-content:center;gap:var(--shell-gap-sm);padding:var(--shell-gap-lg);color:var(--shell-color-muted)}.cgi{box-sizing:border-box;width:var(--shell-icon-size);height:var(--shell-icon-size);border:2px solid var(--shell-border);border-top-color:var(--shell-color-accent);border-radius:var(--avatar-radius);animation:cgk .7s linear infinite}}@keyframes cgk{to{transform:rotate(360deg)}}
41
+ @layer elcrm-components{.cgr{display:flex;align-items:center;justify-content:center;gap:var(--shell-gap-sm);padding:var(--shell-gap-lg);min-height:var(--loading-min-height);color:var(--shell-color-muted)}.cgi{box-sizing:border-box;width:var(--shell-icon-size);height:var(--shell-icon-size);border:2px solid var(--shell-border);border-top-color:var(--shell-color-accent);border-radius:var(--avatar-radius);animation:cgk .7s linear infinite}}@keyframes cgk{to{transform:rotate(360deg)}}
42
42
 
43
43
  @layer elcrm-components{.cmr{display:flex;align-items:center;gap:var(--shell-gap-sm);margin:0;padding:0;list-style:none}.cmv{flex-direction:column;align-items:stretch}.cmi{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:inline-flex;align-items:center;justify-content:center;border:0;background:transparent;color:var(--button-color-muted);padding:var(--button-padding);border-radius:var(--button-radius);font:inherit;line-height:1;cursor:pointer;text-align:left;gap:var(--shell-gap-sm)}.cmd{flex-shrink:0;min-width:16px;height:16px;padding:0 4px;font-size:10px}.cmi>svg{display:block;flex-shrink:0}.cmi:hover{background:var(--button-background-hover);color:var(--button-color)}.cma,.cmi[aria-current=page],.cmi[data-active=true]{background:var(--button-background-selected);color:var(--button-color)}.cmu{width:100%;align-items:stretch;gap:1.25rem;padding:0;border-bottom:1px solid var(--shell-border)}.cmu .cmi{border-radius:0;background:transparent;padding:.45rem .1rem .55rem;border-bottom:2px solid transparent;margin-bottom:-1px}.cmu .cmi:hover{background:transparent;color:var(--shell-color)}.cmu .cma,.cmu .cmi[aria-current=page],.cmu .cmi[data-active=true]{background:transparent;color:var(--shell-color);border-bottom-color:var(--shell-color-accent)}}
44
44
 
@@ -72,6 +72,8 @@
72
72
 
73
73
  @layer elcrm-components{.cDw{overflow:auto}.cDt{width:100%;border-collapse:collapse;font-size:var(--table-font-size);color:var(--shell-color)}.cDf{table-layout:fixed}.cDt th,.cDt td{padding:var(--table-cell-padding);border-bottom:1px solid var(--shell-border);text-align:left;vertical-align:top}.cDt th{color:var(--shell-color-muted);font-weight:var(--shell-font-weight);font-size:var(--table-head-font-size);text-transform:uppercase;letter-spacing:.04em}.cDt code{font-size:var(--table-code-font-size)}}
74
74
 
75
+ @layer elcrm-components{.cHr{margin:0;font-size:.9rem;line-height:1.45;color:var(--shell-color)}.cHm{color:var(--shell-color-muted)}}
76
+
75
77
  @layer elcrm-components{.c6r{display:flex;flex-direction:column;gap:2px;min-width:0;text-align:left}.c6t{margin:0;font-size:var(--shell-font-size);font-weight:var(--shell-font-weight);color:var(--shell-color);line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.c6d{margin:0;font-size:var(--shell-font-size-sm);font-weight:400;color:var(--shell-color-muted);line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.c6s .c6t{font-size:var(--shell-font-size-sm)}.c6l .c6t{font-size:var(--shell-font-size-lg)}.c6l .c6d{font-size:var(--shell-font-size)}}
76
78
 
77
79
  @layer elcrm-components{.cCr{display:flex;flex-wrap:wrap;align-items:center;gap:var(--toolbar-gap);width:100%;min-width:0;box-sizing:border-box;--field-width: auto}.cCr>[data-field]{flex:0 1 auto;width:auto;min-width:0;max-width:100%}.cCr>[data-field=search]{flex:1 1 var(--field-search-min-width, 10rem);width:auto!important;max-width:none}.cCr[data-width=s]{display:inline-flex;width:auto;max-width:100%}.cCr[data-align=center]{justify-content:center}.cCr[data-align=end]{justify-content:flex-end}.cCr[data-align=between]{justify-content:space-between}.cCr[data-size=s]{--control-height: var(--control-height-s);--field-height: var(--control-height-s);--control-font-size: 13px;--button-height: var(--button-height-s);--button-height-m: var(--button-height-s);--button-padding: var(--button-padding-s);--button-size-m: var(--button-size-s)}.cCr[data-size=l]{--control-height: var(--control-height-l);--field-height: var(--control-height-l);--button-height: var(--button-height-l);--button-height-m: var(--button-height-l);--button-size-m: var(--button-size-l)}}
package/dist/index.d.ts CHANGED
@@ -18,6 +18,8 @@ export { Toolbar, useToolbar, applyToolbarSize } from './Toolbar';
18
18
  export type { ToolbarProps, ToolbarAlign, ToolbarWidth, ToolbarContextValue, } from './Toolbar';
19
19
  export { TextGroup } from './TextGroup';
20
20
  export type { TextGroupProps } from './TextGroup';
21
+ export { Text } from './Text';
22
+ export type { TextProps, TextTone } from './Text';
21
23
  export { Stat } from './Stat';
22
24
  export type { StatProps, StatTone } from './Stat';
23
25
  export { Block } from './Block';
@@ -18,6 +18,8 @@ export { Toolbar, useToolbar, applyToolbarSize } from './Toolbar';
18
18
  export type { ToolbarProps, ToolbarAlign, ToolbarWidth, ToolbarContextValue, } from './Toolbar';
19
19
  export { TextGroup } from './TextGroup';
20
20
  export type { TextGroupProps } from './TextGroup';
21
+ export { Text } from './Text';
22
+ export type { TextProps, TextTone } from './Text';
21
23
  export { Stat } from './Stat';
22
24
  export type { StatProps, StatTone } from './Stat';
23
25
  export { Block } from './Block';
package/dist/index.es.js CHANGED
@@ -3,109 +3,111 @@ import { H as l } from "./Header-DZQopVNy.js";
3
3
  import { F as n } from "./Footer-qxUlnPR9.js";
4
4
  import { L as u } from "./List-BgKkYaGO.js";
5
5
  import { I as d } from "./Item-D4okhsfW.js";
6
- import { I as P } from "./ItemColumn-M7a9L8CI.js";
7
- import { C as T } from "./Card-hn37Opo3.js";
6
+ import { I as T } from "./ItemColumn-M7a9L8CI.js";
7
+ import { C as B } from "./Card-hn37Opo3.js";
8
8
  import { A as I } from "./ActionGroup-ChKFW0mt.js";
9
9
  import { T as b, a as A, u as L } from "./Toolbar-C1zAk9ak.js";
10
10
  import { T as R } from "./TextGroup-DmhuyMR1.js";
11
- import { S as G } from "./Stat-sKXJwz5L.js";
12
- import { B as g } from "./Block-Bu7NEA0g.js";
13
- import { R as N } from "./Row-DsQOVn18.js";
14
- import { C as M } from "./Column-BiogBDf8.js";
15
- import { S as Z, s as w } from "./Stack-XkmPSswj.js";
16
- import { M as E } from "./Menu-DuXQv-zT.js";
17
- import { D as j } from "./Dropdown-DosvDR13.js";
18
- import { B as K } from "./Breadcrumb-CAM_e9LN.js";
19
- import { L as U } from "./Loading-DkkG7RcE.js";
20
- import { S as W } from "./Section-Crxk2J-E.js";
21
- import { N as Y } from "./NavSections-D6rDEtT1.js";
22
- import { T as $ } from "./TabSections-DN7yVJoF.js";
23
- import { A as ro, a as ao, i as eo } from "./Avatar-loGgFt72.js";
24
- import { A as so } from "./AvatarGroup-D1gnT3Od.js";
25
- import { A as mo } from "./AvatarName-0BzyfpMq.js";
26
- import { B as fo } from "./Badge-jp-9iNNL.js";
27
- import { B as io } from "./Brand-Zq-Idks4.js";
28
- import { E as co } from "./EmptyState-mBiWtMIM.js";
29
- import { R as So } from "./RadioGroup-fcXzhvMu.js";
30
- import { P as Po } from "./PricingGroup-Czuhe81Z.js";
31
- import { P as To } from "./PricingTable-BuLC0opK.js";
32
- import { P as Io } from "./PageHead-DgaJ1mXY.js";
33
- import { P as bo } from "./PageShell-D9EZiO8o.js";
34
- import { C as Lo, a as ho } from "./ChatSplit-DNnu3TNq.js";
35
- import { C as ko } from "./ChatFrame-BW2TmCkZ.js";
36
- import { C as Ho } from "./ChatMessages-B8rdXiK-.js";
37
- import { S as Fo } from "./Sidebar-CYFaPqdC.js";
38
- import { P as zo } from "./Popover-DWdvZTuA.js";
39
- import { H as Oo } from "./Healthmap-B6cdiLUl.js";
40
- import { P as wo } from "./PanelInfo-A5y5ysH8.js";
41
- import { T as Eo } from "./Table-BoDr3X2d.js";
42
- import { C as jo } from "./CodeBlock-CRzVopIv.js";
43
- import { S as Ko, c as Qo } from "./SplitPane-DR7PCZ8f.js";
44
- import { B as Vo } from "./Banner-B72lcEMo.js";
45
- import { I as Xo } from "./IconButton-DPjpBKJn.js";
46
- import { a as _o, p as $o, r as or } from "./overlayZ-BvHbYC1x.js";
11
+ import { T as G } from "./Text-zHK2wmsw.js";
12
+ import { S as g } from "./Stat-sKXJwz5L.js";
13
+ import { B as N } from "./Block-Bu7NEA0g.js";
14
+ import { R as M } from "./Row-DsQOVn18.js";
15
+ import { C as Z } from "./Column-BiogBDf8.js";
16
+ import { S as D, s as E } from "./Stack-XkmPSswj.js";
17
+ import { M as j } from "./Menu-DuXQv-zT.js";
18
+ import { D as K } from "./Dropdown-DosvDR13.js";
19
+ import { B as U } from "./Breadcrumb-CAM_e9LN.js";
20
+ import { L as W } from "./Loading-DkkG7RcE.js";
21
+ import { S as Y } from "./Section-Crxk2J-E.js";
22
+ import { N as $ } from "./NavSections-D6rDEtT1.js";
23
+ import { T as ro } from "./TabSections-DN7yVJoF.js";
24
+ import { A as eo, a as to, i as so } from "./Avatar-loGgFt72.js";
25
+ import { A as mo } from "./AvatarGroup-D1gnT3Od.js";
26
+ import { A as fo } from "./AvatarName-0BzyfpMq.js";
27
+ import { B as io } from "./Badge-jp-9iNNL.js";
28
+ import { B as co } from "./Brand-Zq-Idks4.js";
29
+ import { E as So } from "./EmptyState-mBiWtMIM.js";
30
+ import { R as To } from "./RadioGroup-fcXzhvMu.js";
31
+ import { P as Bo } from "./PricingGroup-Czuhe81Z.js";
32
+ import { P as Io } from "./PricingTable-BuLC0opK.js";
33
+ import { P as bo } from "./PageHead-DgaJ1mXY.js";
34
+ import { P as Lo } from "./PageShell-D9EZiO8o.js";
35
+ import { C as Ro, a as ko } from "./ChatSplit-DNnu3TNq.js";
36
+ import { C as Ho } from "./ChatFrame-BW2TmCkZ.js";
37
+ import { C as Fo } from "./ChatMessages-B8rdXiK-.js";
38
+ import { S as zo } from "./Sidebar-CYFaPqdC.js";
39
+ import { P as Oo } from "./Popover-DWdvZTuA.js";
40
+ import { H as wo } from "./Healthmap-B6cdiLUl.js";
41
+ import { P as Eo } from "./PanelInfo-A5y5ysH8.js";
42
+ import { T as jo } from "./Table-BoDr3X2d.js";
43
+ import { C as Ko } from "./CodeBlock-CRzVopIv.js";
44
+ import { S as Uo, c as Vo } from "./SplitPane-DR7PCZ8f.js";
45
+ import { B as Xo } from "./Banner-B72lcEMo.js";
46
+ import { I as _o } from "./IconButton-DPjpBKJn.js";
47
+ import { a as or, p as rr, r as ar } from "./overlayZ-BvHbYC1x.js";
47
48
  import { lazy as e } from "react";
48
- import { c as ar } from "./cx-CcykAxZN.js";
49
+ import { c as tr } from "./cx-CcykAxZN.js";
49
50
  function s(a) {
50
51
  const r = {};
51
52
  return (o) => (r[o] || (r[o] = e(() => a(o))), r[o]);
52
53
  }
53
54
  export {
54
55
  I as ActionGroup,
55
- ro as Avatar,
56
- so as AvatarGroup,
57
- mo as AvatarName,
58
- fo as Badge,
59
- Vo as Banner,
60
- g as Block,
61
- io as Brand,
62
- K as Breadcrumb,
63
- T as Card,
64
- ko as ChatFrame,
65
- Lo as ChatList,
66
- Ho as ChatMessages,
67
- ho as ChatSplit,
68
- jo as CodeBlock,
69
- M as Column,
70
- j as Dropdown,
71
- co as EmptyState,
56
+ eo as Avatar,
57
+ mo as AvatarGroup,
58
+ fo as AvatarName,
59
+ io as Badge,
60
+ Xo as Banner,
61
+ N as Block,
62
+ co as Brand,
63
+ U as Breadcrumb,
64
+ B as Card,
65
+ Ho as ChatFrame,
66
+ Ro as ChatList,
67
+ Fo as ChatMessages,
68
+ ko as ChatSplit,
69
+ Ko as CodeBlock,
70
+ Z as Column,
71
+ K as Dropdown,
72
+ So as EmptyState,
72
73
  n as Footer,
73
74
  l as Header,
74
- Oo as Healthmap,
75
- Xo as IconButton,
75
+ wo as Healthmap,
76
+ _o as IconButton,
76
77
  d as Item,
77
- P as ItemColumn,
78
+ T as ItemColumn,
78
79
  x as Layout,
79
80
  u as List,
80
- U as Loading,
81
- E as Menu,
82
- Y as NavSections,
83
- Io as PageHead,
84
- bo as PageShell,
85
- wo as PanelInfo,
86
- zo as Popover,
87
- Po as PricingGroup,
88
- To as PricingTable,
89
- So as RadioGroup,
90
- N as Row,
91
- W as Section,
92
- Fo as Sidebar,
93
- Ko as SplitPane,
94
- Z as Stack,
95
- G as Stat,
96
- $ as TabSections,
97
- Eo as Table,
81
+ W as Loading,
82
+ j as Menu,
83
+ $ as NavSections,
84
+ bo as PageHead,
85
+ Lo as PageShell,
86
+ Eo as PanelInfo,
87
+ Oo as Popover,
88
+ Bo as PricingGroup,
89
+ Io as PricingTable,
90
+ To as RadioGroup,
91
+ M as Row,
92
+ Y as Section,
93
+ zo as Sidebar,
94
+ Uo as SplitPane,
95
+ D as Stack,
96
+ g as Stat,
97
+ ro as TabSections,
98
+ jo as Table,
99
+ G as Text,
98
100
  R as TextGroup,
99
101
  b as Toolbar,
100
- _o as acquireOverlayZIndex,
102
+ or as acquireOverlayZIndex,
101
103
  A as applyToolbarSize,
102
- ao as avatarRadiusStyle,
103
- Qo as clampSplitRatio,
104
+ to as avatarRadiusStyle,
105
+ Vo as clampSplitRatio,
104
106
  s as createLazyResolver,
105
- ar as cx,
106
- eo as initialsFromName,
107
- $o as peekOverlayZIndex,
108
- or as releaseOverlayZIndex,
109
- w as stackColumnsTemplate,
107
+ tr as cx,
108
+ so as initialsFromName,
109
+ rr as peekOverlayZIndex,
110
+ ar as releaseOverlayZIndex,
111
+ E as stackColumnsTemplate,
110
112
  L as useToolbar
111
113
  };
package/dist/tokens.css CHANGED
@@ -41,7 +41,7 @@
41
41
  --header-height: 52px;
42
42
  --header-shadow: none;
43
43
  --header-margin: 0;
44
- --header-z: 20;
44
+ --header-z: 30;
45
45
  /* shorthand: толщина + стиль + цвет, все стороны. Только снизу — `none` и линия через --header-shadow */
46
46
  --header-border: 1px solid var(--shell-border);
47
47
  /* выравнивание nav в оставшейся ширине шапки: flex-start | center | flex-end */
@@ -108,7 +108,7 @@
108
108
  --sidebar-width: 248px;
109
109
  --sidebar-pad-x: var(--shell-gap);
110
110
  --sidebar-pad-y: var(--shell-gap-lg);
111
- --sidebar-block-radius: var(--shell-radius);
111
+ --sidebar-block-radius: 14px;
112
112
  --sidebar-item-font-size: var(--shell-font-size-sm);
113
113
  --sidebar-item-padding: 6px 10px;
114
114
  --sidebar-icon-size: 16px;
@@ -153,4 +153,9 @@
153
153
  --banner-padding: 0.55rem 0.85rem;
154
154
  --banner-bg: color-mix(in srgb, var(--shell-color-accent) 8%, var(--shell-bg));
155
155
  --banner-border: color-mix(in srgb, var(--shell-color-accent) 35%, var(--shell-border));
156
+
157
+ /* —— loading / empty —— */
158
+ --loading-min-height: min(50vh, 24rem);
159
+ --empty-max-width: 36rem;
160
+ --empty-padding: 2rem;
156
161
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elcrm/components",
3
- "version": "0.2.13",
3
+ "version": "0.2.14",
4
4
  "description": "Shell UI elCRM: Layout, Header, Sidebar, Popover, Healthmap, PanelInfo, PageHead, PageShell, Section, Stack, Stat и др.",
5
5
  "type": "module",
6
6
  "author": "MaSkal <dev@elcrm.online>",