artefact-design-system 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/context/COMPONENTS.md +6 -2
- package/context/DESIGN.md +2 -1
- package/dist/index.d.ts +58 -1
- package/dist/index.js +164 -72
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
package/context/COMPONENTS.md
CHANGED
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
- `[data-slot="button"]`/`[data-slot="input"]`/`[data-slot="select-trigger"]` — высота/радиус пересчитаны в `brand-overrides.css` (см. `DESIGN.md` → Components).
|
|
49
49
|
- Если конкретному месту нужно другое поведение (например, `Select`, который умеет очищаться крестиком) — это уже не «просто shadcn Select», это новый Components-тир композит (см. `FilterSelect` ниже), а не проп на самом `Select`.
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
`recharts` — реальная, объявленная зависимость этого пакета (не только внутренняя деталь реализации чартов ниже). Если для какой-то задачи не хватает ни одного из готовых чарт-компонентов — можно писать напрямую на `recharts`, но объявляй его явной зависимостью в своём `package.json`, не рассчитывай, что он долетит транзитивно через хойстинг node_modules (он долетает сегодня, но это случайность конкретного дерева зависимостей, не гарантия).
|
|
52
52
|
|
|
53
53
|
## Components
|
|
54
54
|
|
|
@@ -68,7 +68,11 @@ Primitives + Foundation, собранные в конкретную повтор
|
|
|
68
68
|
| `Search` | `placeholder?, value?, onChange?, className?` | `InputGroup` (shadcn) + `Icon` как leading addon. Всегда для полей поиска — не собирай Input + абсолютно-позиционированную иконку вручную. |
|
|
69
69
|
| `BarChart` / `LineChart` / `AreaChart` | `data, xKey, series: {key,label,color}[], height?, showLegend?` (+`stacked?` у Area) | Настоящий Recharts через shadcn's `ChartContainer`. `showLegend` по умолчанию `series.length > 1`. Grid/оси — `color.input`, никогда `color.border` (тот прозрачный по правилу). |
|
|
70
70
|
| `DonutChart` | `data: {key,label,value,color}[], height?, showLegend?` | Категориальная разбивка (Pie, `innerRadius:"60%"`). |
|
|
71
|
-
| `DistributionChart` | `groups: {name,total,segments:{label,count,widthPct}[]}[], rowHeight?` | Горизонтальный stacked-bar на группу; если сегменты не сумма в 100% — остаток дорисовывается приглушённым `rest`.
|
|
71
|
+
| `DistributionChart` | `groups: {name,total,segments:{label,count,widthPct}[]}[], rowHeight?` | Горизонтальный stacked-bar на группу; если сегменты не сумма в 100% — остаток дорисовывается приглушённым `rest`. |
|
|
72
|
+
| `ScatterChart` | `series: {key,label,color,data:{x,y}[]}[], xLabel?, yLabel?, height?, showLegend?` | Корреляция двух числовых величин, опционально по нескольким сериям. |
|
|
73
|
+
| `RadialChart` | `value(0–100), color, trackColor?, size?, label?` | Круговой гейдж. Это и есть формализованный «ScoreRing» — раньше пересобирался с нуля на каждом новом экране (в исходной странице, в Storybook-демо, в тестовой consumer-сессии) вместо того, чтобы быть готовым компонентом. |
|
|
74
|
+
| `ComposedChart` | `data, xKey, series: {key,label,color,type:"bar"\|"line"\|"area",axis?:"left"\|"right"}[], height?, showLegend?` | Смешивает типы серий на одном графике (например, объём как бары + тренд как линия). **`axis:"right"` — не опционально-декоративное**: если серии на сильно разных масштабах (штуки 0–60 и оценка 0–10), на общей оси меньшая серия визуально сплющивается в почти прямую линию — заметно прямо на демо-данных этого компонента. |
|
|
75
|
+
| `Sparkline` | `data: number[], color, width?, height?, showEndDot?` | Мини-линия тренда внутри строки/карточки (не полноценный `LineChart` — без осей/сетки/тултипа, фиксированный размер). Формализует паттерн, который до этого просто копипастили руками на каждом новом экране (в т.ч. в оригинальной странице-источнике и в тестовой consumer-сессии) — теперь настоящий экспорт, не «собери сам». **Без `ResponsiveContainer` намеренно** — процентный размер внутри auto-height Grid/Flex-строки не на что мерить, это реальный, воспроизводимый баг Recharts, не связанный с `Foundation/Grid` (был неверно приписан ему в одной из тестовых сессий). |
|
|
72
76
|
|
|
73
77
|
### shadcn/vendored, но на уровне Components (не Primitives)
|
|
74
78
|
|
package/context/DESIGN.md
CHANGED
|
@@ -191,7 +191,8 @@ components:
|
|
|
191
191
|
- `foreground` подобран по **измеренному** WCAG-контрасту, не по предположению «всегда белый» (у `warn` это тёмный ink, а не белый — белый давал хуже контраст).
|
|
192
192
|
- `hover` всегда через `color-mix()` от `base` — пересчитывается сам, никогда не второй захардкоженный hex, который может разойтись с базой.
|
|
193
193
|
- `soft`/`soft-foreground` — бледная плашка-беджик (светлый фон + текст цветом базы).
|
|
194
|
-
- **`
|
|
194
|
+
- **`plum` — роль-тинт для сетевого управляющего/точки, не «ещё один статус».** Это не про хорошо/плохо (как `green`/`warn`/`danger`) — это про РОЛЬ человека в структуре (управляющий сетью/точкой), визуально отличную от рядового сотрудника. Если строишь карточку/бейдж для такой роли — бери `plum`, не `muted`: без этого указания легко не узнать, что токен вообще существует, и взять нейтральный цвет там, где задумано различие.
|
|
195
|
+
- **`danger` (красный) — для разрушительных действий и критических состояний, не для «просто плохой метрики».** Подобран так, чтобы читаться как отдельный цвет, а не «грустный оранжевый» (другой тон и насыщенность, приземлённая к семье `accent/green/warn`, а не к выбивающейся насыщенности `accent`). Но это не значит, что любой падающий показатель должен быть красным: обычная бизнес-метрика, которая просела за неделю (продажи, конверсия, чек) — это `accent` (та же роль, что и у CTA — «требует внимания»), не `danger`. `danger` — для реально разрушительных/подтверждающих-удаление действий и жёстких ошибок, где перепутать со «стандартным вниманием» было бы неверно считать некритичным.
|
|
195
196
|
- **Единственный градиент во всей системе** — `components.assistant-dock-btn` (кнопка AI-ассистента). Живёт в `components`, не в `colors` — градиент не проходит как CSS-цвет (см. `Do's and Don'ts`). Не заводи второй градиент без такой же осознанной причины — иначе это быстро превращается в декоративный шум.
|
|
196
197
|
- **`scrim` — тёмная подложка низкой прозрачности позади тяжёлого блюра** (панель ассистента). Отличается от `card` (светлое стекло) — не путать.
|
|
197
198
|
- **`border: transparent` — правило, не забытое значение.** Разделение поверхностей — прозрачностью/тенью фона, а не рамкой. Если разделитель реально нужен видимым (инпут, `<hr>`-подобный разделитель) — используй `input` (единственный «настоящий» hairline-токен), никогда не включай `border` обратно.
|
package/dist/index.d.ts
CHANGED
|
@@ -758,6 +758,22 @@ type AreaChartProps = {
|
|
|
758
758
|
};
|
|
759
759
|
declare function AreaChart({ data, xKey, series, height, showLegend, stacked }: AreaChartProps): React$1.JSX.Element;
|
|
760
760
|
|
|
761
|
+
type ComposedSeries = {
|
|
762
|
+
key: string;
|
|
763
|
+
label: string;
|
|
764
|
+
color: string;
|
|
765
|
+
type: "bar" | "line" | "area";
|
|
766
|
+
axis?: "left" | "right";
|
|
767
|
+
};
|
|
768
|
+
type ComposedChartProps = {
|
|
769
|
+
data: Record<string, unknown>[];
|
|
770
|
+
xKey: string;
|
|
771
|
+
series: ComposedSeries[];
|
|
772
|
+
height?: number;
|
|
773
|
+
showLegend?: boolean;
|
|
774
|
+
};
|
|
775
|
+
declare function ComposedChart({ data, xKey, series, height, showLegend }: ComposedChartProps): React$1.JSX.Element;
|
|
776
|
+
|
|
761
777
|
type DistributionSegment = {
|
|
762
778
|
label: string;
|
|
763
779
|
count: string;
|
|
@@ -797,6 +813,47 @@ type LineChartProps = {
|
|
|
797
813
|
};
|
|
798
814
|
declare function LineChart({ data, xKey, series, height, showLegend }: LineChartProps): React$1.JSX.Element;
|
|
799
815
|
|
|
816
|
+
type RadialChartProps = {
|
|
817
|
+
/** 0–100 */
|
|
818
|
+
value: number;
|
|
819
|
+
color: string;
|
|
820
|
+
/** track color behind the filled arc; defaults to the muted token */
|
|
821
|
+
trackColor?: string;
|
|
822
|
+
size?: number;
|
|
823
|
+
/** centered content, e.g. the numeric score itself */
|
|
824
|
+
label?: ReactNode;
|
|
825
|
+
};
|
|
826
|
+
declare function RadialChart({ value, color: fillColor, trackColor, size, label }: RadialChartProps): React$1.JSX.Element;
|
|
827
|
+
|
|
828
|
+
type ScatterPoint = {
|
|
829
|
+
x: number;
|
|
830
|
+
y: number;
|
|
831
|
+
};
|
|
832
|
+
type ScatterSeries = {
|
|
833
|
+
key: string;
|
|
834
|
+
label: string;
|
|
835
|
+
color: string;
|
|
836
|
+
data: ScatterPoint[];
|
|
837
|
+
};
|
|
838
|
+
type ScatterChartProps = {
|
|
839
|
+
series: ScatterSeries[];
|
|
840
|
+
xLabel?: string;
|
|
841
|
+
yLabel?: string;
|
|
842
|
+
height?: number;
|
|
843
|
+
showLegend?: boolean;
|
|
844
|
+
};
|
|
845
|
+
declare function ScatterChart({ series, xLabel, yLabel, height, showLegend }: ScatterChartProps): React$1.JSX.Element;
|
|
846
|
+
|
|
847
|
+
type SparklineProps = {
|
|
848
|
+
data: number[];
|
|
849
|
+
color: string;
|
|
850
|
+
width?: number;
|
|
851
|
+
height?: number;
|
|
852
|
+
/** dot on the last point only, matching the source's own "value + trend" reading — not one dot per point */
|
|
853
|
+
showEndDot?: boolean;
|
|
854
|
+
};
|
|
855
|
+
declare function Sparkline({ data, color, width, height, showEndDot }: SparklineProps): React$1.JSX.Element;
|
|
856
|
+
|
|
800
857
|
type ChipQuestion = {
|
|
801
858
|
question: string;
|
|
802
859
|
answer: ReactNode;
|
|
@@ -831,4 +888,4 @@ type SidebarNavProps = {
|
|
|
831
888
|
};
|
|
832
889
|
declare function SidebarNav({ active, items, avatarInitials, avatarTitle, showSettings, clientLabel, clientInitial, }: SidebarNavProps): React$1.JSX.Element;
|
|
833
890
|
|
|
834
|
-
export { AdviceCard, type AdviceCardProps, Alert, AlertAction, AlertDescription, AlertTitle, AppShell, AreaChart, type AreaChartProps, AssistantDock, type AssistantDockProps, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, BarChart, type BarChartProps, Box, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, type ChartSeries, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Chip, type ChipQuestion, Container, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DistributionChart, type DistributionGroup, type DistributionSegment, DonutChart, type DonutChartProps, type DonutSlice, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EXAMPLE_NAV_ITEMS, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, FilterSelect, type FilterSelectProps, Flex, FormField, Grid, ICON_NAMES, Icon, type IconName, type IconProps, Image, type ImageProps, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Label, LineChart, type LineChartProps, MessageBubble, type NavItem, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Progress, RadioGroup, RadioGroupItem, SURFACE_VARIANTS, Search, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, SidebarNav, type SidebarNavProps, type SpacingKey, Spinner, Stack, Surface, type SurfaceProps, type SurfaceVariant, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Text, type TextProps, Textarea, TitledRow, type TitledRowProps, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Toolbar, ToolbarButton, ToolbarGroup, ToolbarSeparator, ToolbarToggleGroup, ToolbarToggleItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type TypeKey, TypingIndicator, badgeVariants, buttonGroupVariants, buttonVariants, chartKeys, cn, color, font, navigationMenuTriggerStyle, radius, semanticRoles, spacing, tabsListVariants, toggleVariants, type };
|
|
891
|
+
export { AdviceCard, type AdviceCardProps, Alert, AlertAction, AlertDescription, AlertTitle, AppShell, AreaChart, type AreaChartProps, AssistantDock, type AssistantDockProps, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, BarChart, type BarChartProps, Box, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, type ChartSeries, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Chip, type ChipQuestion, ComposedChart, type ComposedChartProps, type ComposedSeries, Container, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DistributionChart, type DistributionGroup, type DistributionSegment, DonutChart, type DonutChartProps, type DonutSlice, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EXAMPLE_NAV_ITEMS, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, FilterSelect, type FilterSelectProps, Flex, FormField, Grid, ICON_NAMES, Icon, type IconName, type IconProps, Image, type ImageProps, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Label, LineChart, type LineChartProps, MessageBubble, type NavItem, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Progress, RadialChart, type RadialChartProps, RadioGroup, RadioGroupItem, SURFACE_VARIANTS, ScatterChart, type ScatterChartProps, type ScatterPoint, type ScatterSeries, Search, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, SidebarNav, type SidebarNavProps, type SpacingKey, Sparkline, type SparklineProps, Spinner, Stack, Surface, type SurfaceProps, type SurfaceVariant, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Text, type TextProps, Textarea, TitledRow, type TitledRowProps, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Toolbar, ToolbarButton, ToolbarGroup, ToolbarSeparator, ToolbarToggleGroup, ToolbarToggleItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type TypeKey, TypingIndicator, badgeVariants, buttonGroupVariants, buttonVariants, chartKeys, cn, color, font, navigationMenuTriggerStyle, radius, semanticRoles, spacing, tabsListVariants, toggleVariants, type };
|
package/dist/index.js
CHANGED
|
@@ -3492,15 +3492,55 @@ function BarChart({ data, xKey, series, height = 260, showLegend = series.length
|
|
|
3492
3492
|
] }) });
|
|
3493
3493
|
}
|
|
3494
3494
|
|
|
3495
|
+
// src/components/composed/charts/ComposedChart.tsx
|
|
3496
|
+
import { ComposedChart as RComposedChart, Bar as Bar2, Line, Area as Area2, XAxis as XAxis3, YAxis as YAxis3, CartesianGrid as CartesianGrid3 } from "recharts";
|
|
3497
|
+
import { jsx as jsx49, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
3498
|
+
function ComposedChart({ data, xKey, series, height = 260, showLegend = series.length > 1 }) {
|
|
3499
|
+
const config = Object.fromEntries(series.map((s) => [s.key, { label: s.label, color: s.color }]));
|
|
3500
|
+
const hasRightAxis = series.some((s) => s.axis === "right");
|
|
3501
|
+
return /* @__PURE__ */ jsx49(ChartContainer, { config, style: { height }, className: "w-full", children: /* @__PURE__ */ jsxs18(RComposedChart, { data, children: [
|
|
3502
|
+
/* @__PURE__ */ jsx49(CartesianGrid3, { vertical: false, stroke: color.input }),
|
|
3503
|
+
/* @__PURE__ */ jsx49(XAxis3, { dataKey: xKey, tickLine: false, axisLine: false, fontSize: 12 }),
|
|
3504
|
+
/* @__PURE__ */ jsx49(YAxis3, { yAxisId: "left", tickLine: false, axisLine: false, fontSize: 12, width: 32 }),
|
|
3505
|
+
hasRightAxis && /* @__PURE__ */ jsx49(YAxis3, { yAxisId: "right", orientation: "right", tickLine: false, axisLine: false, fontSize: 12, width: 32 }),
|
|
3506
|
+
/* @__PURE__ */ jsx49(ChartTooltip, { content: /* @__PURE__ */ jsx49(ChartTooltipContent, {}) }),
|
|
3507
|
+
showLegend && /* @__PURE__ */ jsx49(ChartLegend, { content: /* @__PURE__ */ jsx49(ChartLegendContent, {}) }),
|
|
3508
|
+
series.map((s) => {
|
|
3509
|
+
const paint = `var(--color-${s.key})`;
|
|
3510
|
+
const yAxisId = s.axis === "right" ? "right" : "left";
|
|
3511
|
+
if (s.type === "bar") {
|
|
3512
|
+
return /* @__PURE__ */ jsx49(Bar2, { yAxisId, dataKey: s.key, fill: paint, radius: 4, isAnimationActive: false }, s.key);
|
|
3513
|
+
}
|
|
3514
|
+
if (s.type === "area") {
|
|
3515
|
+
return /* @__PURE__ */ jsx49(
|
|
3516
|
+
Area2,
|
|
3517
|
+
{
|
|
3518
|
+
yAxisId,
|
|
3519
|
+
dataKey: s.key,
|
|
3520
|
+
type: "monotone",
|
|
3521
|
+
stroke: paint,
|
|
3522
|
+
fill: paint,
|
|
3523
|
+
fillOpacity: 0.2,
|
|
3524
|
+
strokeWidth: 2,
|
|
3525
|
+
isAnimationActive: false
|
|
3526
|
+
},
|
|
3527
|
+
s.key
|
|
3528
|
+
);
|
|
3529
|
+
}
|
|
3530
|
+
return /* @__PURE__ */ jsx49(Line, { yAxisId, dataKey: s.key, type: "monotone", stroke: paint, strokeWidth: 2, dot: false, isAnimationActive: false }, s.key);
|
|
3531
|
+
})
|
|
3532
|
+
] }) });
|
|
3533
|
+
}
|
|
3534
|
+
|
|
3495
3535
|
// src/components/composed/charts/DistributionChart.tsx
|
|
3496
3536
|
import {
|
|
3497
3537
|
BarChart as BarChart2,
|
|
3498
|
-
Bar as
|
|
3499
|
-
XAxis as
|
|
3500
|
-
YAxis as
|
|
3501
|
-
CartesianGrid as
|
|
3538
|
+
Bar as Bar3,
|
|
3539
|
+
XAxis as XAxis4,
|
|
3540
|
+
YAxis as YAxis4,
|
|
3541
|
+
CartesianGrid as CartesianGrid4
|
|
3502
3542
|
} from "recharts";
|
|
3503
|
-
import { jsx as
|
|
3543
|
+
import { jsx as jsx50, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
3504
3544
|
var SEGMENT_COLORS = [color.accent, color.chart2, color.chart3, color.chart4, color.chart5];
|
|
3505
3545
|
var MAX_SEGMENTS = 5;
|
|
3506
3546
|
function DistributionChart({ groups, rowHeight = 40 }) {
|
|
@@ -3520,14 +3560,14 @@ function DistributionChart({ groups, rowHeight = 40 }) {
|
|
|
3520
3560
|
row.rest = Math.max(0, 100 - sum);
|
|
3521
3561
|
return row;
|
|
3522
3562
|
});
|
|
3523
|
-
return /* @__PURE__ */
|
|
3524
|
-
/* @__PURE__ */
|
|
3525
|
-
/* @__PURE__ */
|
|
3526
|
-
/* @__PURE__ */
|
|
3527
|
-
/* @__PURE__ */
|
|
3563
|
+
return /* @__PURE__ */ jsx50(ChartContainer, { config, style: { height: groups.length * rowHeight + 24 }, className: "w-full", children: /* @__PURE__ */ jsxs19(BarChart2, { data, layout: "vertical", margin: { left: 0, right: 12, top: 4, bottom: 4 }, children: [
|
|
3564
|
+
/* @__PURE__ */ jsx50(CartesianGrid4, { horizontal: false, stroke: color.input }),
|
|
3565
|
+
/* @__PURE__ */ jsx50(XAxis4, { type: "number", domain: [0, 100], hide: true }),
|
|
3566
|
+
/* @__PURE__ */ jsx50(YAxis4, { type: "category", dataKey: "name", tickLine: false, axisLine: false, width: 130, fontSize: 12 }),
|
|
3567
|
+
/* @__PURE__ */ jsx50(
|
|
3528
3568
|
ChartTooltip,
|
|
3529
3569
|
{
|
|
3530
|
-
content: /* @__PURE__ */
|
|
3570
|
+
content: /* @__PURE__ */ jsx50(
|
|
3531
3571
|
ChartTooltipContent,
|
|
3532
3572
|
{
|
|
3533
3573
|
hideLabel: true,
|
|
@@ -3540,41 +3580,89 @@ function DistributionChart({ groups, rowHeight = 40 }) {
|
|
|
3540
3580
|
)
|
|
3541
3581
|
}
|
|
3542
3582
|
),
|
|
3543
|
-
Array.from({ length: MAX_SEGMENTS }, (_, i) => /* @__PURE__ */
|
|
3544
|
-
/* @__PURE__ */
|
|
3583
|
+
Array.from({ length: MAX_SEGMENTS }, (_, i) => /* @__PURE__ */ jsx50(Bar3, { dataKey: `seg${i}`, stackId: "dist", fill: `var(--color-seg${i})`, isAnimationActive: false }, i)),
|
|
3584
|
+
/* @__PURE__ */ jsx50(Bar3, { dataKey: "rest", stackId: "dist", fill: "var(--color-rest)", isAnimationActive: false })
|
|
3545
3585
|
] }) });
|
|
3546
3586
|
}
|
|
3547
3587
|
|
|
3548
3588
|
// src/components/composed/charts/DonutChart.tsx
|
|
3549
3589
|
import { PieChart, Pie, Cell } from "recharts";
|
|
3550
|
-
import { jsx as
|
|
3590
|
+
import { jsx as jsx51, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
3551
3591
|
function DonutChart({ data, height = 260, showLegend = true }) {
|
|
3552
3592
|
const config = Object.fromEntries(data.map((d) => [d.key, { label: d.label, color: d.color }]));
|
|
3553
|
-
return /* @__PURE__ */
|
|
3554
|
-
/* @__PURE__ */
|
|
3555
|
-
showLegend && /* @__PURE__ */
|
|
3556
|
-
/* @__PURE__ */
|
|
3593
|
+
return /* @__PURE__ */ jsx51(ChartContainer, { config, style: { height }, className: "w-full", children: /* @__PURE__ */ jsxs20(PieChart, { children: [
|
|
3594
|
+
/* @__PURE__ */ jsx51(ChartTooltip, { content: /* @__PURE__ */ jsx51(ChartTooltipContent, { nameKey: "key" }) }),
|
|
3595
|
+
showLegend && /* @__PURE__ */ jsx51(ChartLegend, { content: /* @__PURE__ */ jsx51(ChartLegendContent, { nameKey: "key" }) }),
|
|
3596
|
+
/* @__PURE__ */ jsx51(Pie, { data, dataKey: "value", nameKey: "key", innerRadius: "60%", outerRadius: "90%", strokeWidth: 2, isAnimationActive: false, children: data.map((d) => /* @__PURE__ */ jsx51(Cell, { fill: `var(--color-${d.key})` }, d.key)) })
|
|
3557
3597
|
] }) });
|
|
3558
3598
|
}
|
|
3559
3599
|
|
|
3560
3600
|
// src/components/composed/charts/LineChart.tsx
|
|
3561
|
-
import { LineChart as RLineChart, Line, XAxis as
|
|
3562
|
-
import { jsx as
|
|
3601
|
+
import { LineChart as RLineChart, Line as Line2, XAxis as XAxis5, YAxis as YAxis5, CartesianGrid as CartesianGrid5 } from "recharts";
|
|
3602
|
+
import { jsx as jsx52, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
3563
3603
|
function LineChart({ data, xKey, series, height = 260, showLegend = series.length > 1 }) {
|
|
3564
3604
|
const config = Object.fromEntries(series.map((s) => [s.key, { label: s.label, color: s.color }]));
|
|
3565
|
-
return /* @__PURE__ */
|
|
3566
|
-
/* @__PURE__ */
|
|
3567
|
-
/* @__PURE__ */
|
|
3568
|
-
/* @__PURE__ */
|
|
3569
|
-
/* @__PURE__ */
|
|
3570
|
-
showLegend && /* @__PURE__ */
|
|
3571
|
-
series.map((s) => /* @__PURE__ */
|
|
3605
|
+
return /* @__PURE__ */ jsx52(ChartContainer, { config, style: { height }, className: "w-full", children: /* @__PURE__ */ jsxs21(RLineChart, { data, children: [
|
|
3606
|
+
/* @__PURE__ */ jsx52(CartesianGrid5, { vertical: false, stroke: color.input }),
|
|
3607
|
+
/* @__PURE__ */ jsx52(XAxis5, { dataKey: xKey, tickLine: false, axisLine: false, fontSize: 12 }),
|
|
3608
|
+
/* @__PURE__ */ jsx52(YAxis5, { tickLine: false, axisLine: false, fontSize: 12, width: 32 }),
|
|
3609
|
+
/* @__PURE__ */ jsx52(ChartTooltip, { content: /* @__PURE__ */ jsx52(ChartTooltipContent, {}) }),
|
|
3610
|
+
showLegend && /* @__PURE__ */ jsx52(ChartLegend, { content: /* @__PURE__ */ jsx52(ChartLegendContent, {}) }),
|
|
3611
|
+
series.map((s) => /* @__PURE__ */ jsx52(Line2, { dataKey: s.key, type: "monotone", stroke: `var(--color-${s.key})`, strokeWidth: 2, dot: false, isAnimationActive: false }, s.key))
|
|
3572
3612
|
] }) });
|
|
3573
3613
|
}
|
|
3574
3614
|
|
|
3615
|
+
// src/components/composed/charts/RadialChart.tsx
|
|
3616
|
+
import { RadialBarChart as RRadialBarChart, RadialBar, PolarAngleAxis } from "recharts";
|
|
3617
|
+
import { jsx as jsx53, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
3618
|
+
function RadialChart({ value, color: fillColor, trackColor = color.muted, size = 96, label }) {
|
|
3619
|
+
const config = {};
|
|
3620
|
+
return /* @__PURE__ */ jsxs22("div", { style: { position: "relative", width: size, height: size }, children: [
|
|
3621
|
+
/* @__PURE__ */ jsx53(ChartContainer, { config, style: { width: size, height: size }, children: /* @__PURE__ */ jsxs22(RRadialBarChart, { data: [{ value }], innerRadius: "72%", outerRadius: "100%", startAngle: 90, endAngle: -270, children: [
|
|
3622
|
+
/* @__PURE__ */ jsx53(PolarAngleAxis, { type: "number", domain: [0, 100], tick: false, axisLine: false }),
|
|
3623
|
+
/* @__PURE__ */ jsx53(RadialBar, { dataKey: "value", cornerRadius: 999, fill: fillColor, background: { fill: trackColor }, isAnimationActive: false })
|
|
3624
|
+
] }) }),
|
|
3625
|
+
label && /* @__PURE__ */ jsx53("div", { style: { position: "absolute", inset: 0, display: "flex", alignItems: "center", justifyContent: "center" }, children: label })
|
|
3626
|
+
] });
|
|
3627
|
+
}
|
|
3628
|
+
|
|
3629
|
+
// src/components/composed/charts/ScatterChart.tsx
|
|
3630
|
+
import { ScatterChart as RScatterChart, Scatter, XAxis as XAxis6, YAxis as YAxis6, CartesianGrid as CartesianGrid6 } from "recharts";
|
|
3631
|
+
import { jsx as jsx54, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
3632
|
+
function ScatterChart({ series, xLabel, yLabel, height = 260, showLegend = series.length > 1 }) {
|
|
3633
|
+
const config = Object.fromEntries(series.map((s) => [s.key, { label: s.label, color: s.color }]));
|
|
3634
|
+
return /* @__PURE__ */ jsx54(ChartContainer, { config, style: { height }, className: "w-full", children: /* @__PURE__ */ jsxs23(RScatterChart, { children: [
|
|
3635
|
+
/* @__PURE__ */ jsx54(CartesianGrid6, { stroke: color.input }),
|
|
3636
|
+
/* @__PURE__ */ jsx54(XAxis6, { type: "number", dataKey: "x", name: xLabel, tickLine: false, axisLine: false, fontSize: 12 }),
|
|
3637
|
+
/* @__PURE__ */ jsx54(YAxis6, { type: "number", dataKey: "y", name: yLabel, tickLine: false, axisLine: false, fontSize: 12, width: 32 }),
|
|
3638
|
+
/* @__PURE__ */ jsx54(ChartTooltip, { content: /* @__PURE__ */ jsx54(ChartTooltipContent, {}), cursor: { strokeDasharray: "3 3" } }),
|
|
3639
|
+
showLegend && /* @__PURE__ */ jsx54(ChartLegend, { content: /* @__PURE__ */ jsx54(ChartLegendContent, {}) }),
|
|
3640
|
+
series.map((s) => /* @__PURE__ */ jsx54(Scatter, { name: s.label, data: s.data, fill: `var(--color-${s.key})`, isAnimationActive: false }, s.key))
|
|
3641
|
+
] }) });
|
|
3642
|
+
}
|
|
3643
|
+
|
|
3644
|
+
// src/components/composed/charts/Sparkline.tsx
|
|
3645
|
+
import { Line as Line3, LineChart as RLineChart2 } from "recharts";
|
|
3646
|
+
import { jsx as jsx55 } from "react/jsx-runtime";
|
|
3647
|
+
function Sparkline({ data, color: color2, width = 64, height = 24, showEndDot = true }) {
|
|
3648
|
+
const points = data.map((value, index) => ({ index, value }));
|
|
3649
|
+
const lastIndex = points.length - 1;
|
|
3650
|
+
return /* @__PURE__ */ jsx55(RLineChart2, { width, height, data: points, margin: { top: 2, right: 2, bottom: 2, left: 2 }, style: { flexShrink: 0 }, children: /* @__PURE__ */ jsx55(
|
|
3651
|
+
Line3,
|
|
3652
|
+
{
|
|
3653
|
+
dataKey: "value",
|
|
3654
|
+
type: "monotone",
|
|
3655
|
+
stroke: color2,
|
|
3656
|
+
strokeWidth: 2,
|
|
3657
|
+
isAnimationActive: false,
|
|
3658
|
+
dot: showEndDot ? (props) => props.index === lastIndex ? /* @__PURE__ */ jsx55("circle", { cx: props.cx, cy: props.cy, r: 2.5, fill: color2 }, props.index) : /* @__PURE__ */ jsx55("g", {}, props.index) : false
|
|
3659
|
+
}
|
|
3660
|
+
) });
|
|
3661
|
+
}
|
|
3662
|
+
|
|
3575
3663
|
// src/sections/AssistantDock.tsx
|
|
3576
3664
|
import { useEffect, useRef, useState } from "react";
|
|
3577
|
-
import { Fragment as Fragment3, jsx as
|
|
3665
|
+
import { Fragment as Fragment3, jsx as jsx56, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
3578
3666
|
var msgId = 0;
|
|
3579
3667
|
function AssistantDock({
|
|
3580
3668
|
title = "\u0410\u0441\u0441\u0438\u0441\u0442\u0435\u043D\u0442",
|
|
@@ -3641,17 +3729,17 @@ function AssistantDock({
|
|
|
3641
3729
|
close();
|
|
3642
3730
|
}
|
|
3643
3731
|
};
|
|
3644
|
-
return /* @__PURE__ */
|
|
3645
|
-
/* @__PURE__ */
|
|
3646
|
-
/* @__PURE__ */
|
|
3647
|
-
/* @__PURE__ */
|
|
3648
|
-
/* @__PURE__ */
|
|
3649
|
-
/* @__PURE__ */
|
|
3732
|
+
return /* @__PURE__ */ jsxs24("div", { className: `assistant-dock assistant-dock--${mode === "open" ? "open" : mode === "orb" ? "orb" : "idle"}`, children: [
|
|
3733
|
+
/* @__PURE__ */ jsxs24("div", { className: "assistant-dock-panel", children: [
|
|
3734
|
+
/* @__PURE__ */ jsxs24("div", { className: "assistant-dock-glow", "aria-hidden": "true", children: [
|
|
3735
|
+
/* @__PURE__ */ jsx56("span", { className: "blob blob1" }),
|
|
3736
|
+
/* @__PURE__ */ jsx56("span", { className: "blob blob2" }),
|
|
3737
|
+
/* @__PURE__ */ jsx56("span", { className: "blob blob3" })
|
|
3650
3738
|
] }),
|
|
3651
|
-
/* @__PURE__ */
|
|
3652
|
-
/* @__PURE__ */
|
|
3653
|
-
/* @__PURE__ */
|
|
3654
|
-
/* @__PURE__ */
|
|
3739
|
+
/* @__PURE__ */ jsxs24("div", { className: "assistant-dock-inner", children: [
|
|
3740
|
+
/* @__PURE__ */ jsxs24("div", { className: "assistant-dock-head", children: [
|
|
3741
|
+
/* @__PURE__ */ jsx56("span", { className: "assistant-dock-title", children: title }),
|
|
3742
|
+
/* @__PURE__ */ jsx56(
|
|
3655
3743
|
"button",
|
|
3656
3744
|
{
|
|
3657
3745
|
type: "button",
|
|
@@ -3659,14 +3747,14 @@ function AssistantDock({
|
|
|
3659
3747
|
"aria-label": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C",
|
|
3660
3748
|
onMouseDown: (e) => e.preventDefault(),
|
|
3661
3749
|
onClick: close,
|
|
3662
|
-
children: /* @__PURE__ */
|
|
3750
|
+
children: /* @__PURE__ */ jsx56(Icon, { name: "close", size: 16 })
|
|
3663
3751
|
}
|
|
3664
3752
|
)
|
|
3665
3753
|
] }),
|
|
3666
|
-
/* @__PURE__ */
|
|
3667
|
-
messages.length === 0 && /* @__PURE__ */
|
|
3668
|
-
/* @__PURE__ */
|
|
3669
|
-
/* @__PURE__ */
|
|
3754
|
+
/* @__PURE__ */ jsxs24("div", { className: "assistant-dock-msgs", ref: msgsRef, children: [
|
|
3755
|
+
messages.length === 0 && /* @__PURE__ */ jsxs24(Fragment3, { children: [
|
|
3756
|
+
/* @__PURE__ */ jsx56("div", { className: "assistant-dock-sub", children: intro }),
|
|
3757
|
+
/* @__PURE__ */ jsx56("div", { className: "assistant-dock-chips", children: chips.map((c) => /* @__PURE__ */ jsx56(
|
|
3670
3758
|
Chip,
|
|
3671
3759
|
{
|
|
3672
3760
|
onMouseDown: (e) => e.preventDefault(),
|
|
@@ -3679,13 +3767,13 @@ function AssistantDock({
|
|
|
3679
3767
|
c.question
|
|
3680
3768
|
)) })
|
|
3681
3769
|
] }),
|
|
3682
|
-
messages.map((m) => /* @__PURE__ */
|
|
3683
|
-
typing && /* @__PURE__ */
|
|
3770
|
+
messages.map((m) => /* @__PURE__ */ jsx56(MessageBubble, { from: m.from, children: m.content }, m.id)),
|
|
3771
|
+
typing && /* @__PURE__ */ jsx56(TypingIndicator, {})
|
|
3684
3772
|
] })
|
|
3685
3773
|
] })
|
|
3686
3774
|
] }),
|
|
3687
|
-
/* @__PURE__ */
|
|
3688
|
-
/* @__PURE__ */
|
|
3775
|
+
/* @__PURE__ */ jsxs24("div", { className: "assistant-dock-input", children: [
|
|
3776
|
+
/* @__PURE__ */ jsx56(
|
|
3689
3777
|
"input",
|
|
3690
3778
|
{
|
|
3691
3779
|
ref: fieldRef,
|
|
@@ -3697,13 +3785,13 @@ function AssistantDock({
|
|
|
3697
3785
|
onKeyDown: handleKey
|
|
3698
3786
|
}
|
|
3699
3787
|
),
|
|
3700
|
-
/* @__PURE__ */
|
|
3701
|
-
/* @__PURE__ */
|
|
3702
|
-
/* @__PURE__ */
|
|
3703
|
-
/* @__PURE__ */
|
|
3704
|
-
/* @__PURE__ */
|
|
3788
|
+
/* @__PURE__ */ jsxs24("div", { className: "assistant-dock-blob", "aria-hidden": "true", children: [
|
|
3789
|
+
/* @__PURE__ */ jsx56("i", {}),
|
|
3790
|
+
/* @__PURE__ */ jsx56("i", {}),
|
|
3791
|
+
/* @__PURE__ */ jsx56("i", {}),
|
|
3792
|
+
/* @__PURE__ */ jsx56("i", {})
|
|
3705
3793
|
] }),
|
|
3706
|
-
/* @__PURE__ */
|
|
3794
|
+
/* @__PURE__ */ jsxs24(
|
|
3707
3795
|
"button",
|
|
3708
3796
|
{
|
|
3709
3797
|
type: "button",
|
|
@@ -3712,12 +3800,12 @@ function AssistantDock({
|
|
|
3712
3800
|
onMouseDown: (e) => e.preventDefault(),
|
|
3713
3801
|
onClick: handleBtnClick,
|
|
3714
3802
|
children: [
|
|
3715
|
-
/* @__PURE__ */
|
|
3716
|
-
/* @__PURE__ */
|
|
3803
|
+
/* @__PURE__ */ jsxs24("span", { className: "assistant-dock-btn-label", children: [
|
|
3804
|
+
/* @__PURE__ */ jsx56(Icon, { name: "spark", size: 16 }),
|
|
3717
3805
|
" \u0421\u043F\u0440\u043E\u0441\u0438\u0442\u044C \u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043D\u0442\u0430"
|
|
3718
3806
|
] }),
|
|
3719
|
-
/* @__PURE__ */
|
|
3720
|
-
/* @__PURE__ */
|
|
3807
|
+
/* @__PURE__ */ jsx56("span", { className: "assistant-dock-miniico", children: /* @__PURE__ */ jsx56(Icon, { name: "spark", size: 16 }) }),
|
|
3808
|
+
/* @__PURE__ */ jsx56(Icon, { name: "send", size: 22, className: "assistant-dock-send" })
|
|
3721
3809
|
]
|
|
3722
3810
|
}
|
|
3723
3811
|
)
|
|
@@ -3726,7 +3814,7 @@ function AssistantDock({
|
|
|
3726
3814
|
}
|
|
3727
3815
|
|
|
3728
3816
|
// src/sections/SidebarNav.tsx
|
|
3729
|
-
import { jsx as
|
|
3817
|
+
import { jsx as jsx57, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
3730
3818
|
var BRAND_LOGO_PATH = "M450.313 0C769.313 0 944.528 245.166 864.813 542.666C852.313 581.666 848.967 591.728 838.813 623.165L872.813 664.166C962.596 778.457 980.313 929.666 937.814 1104.77H624.813C746.313 944.666 814.313 782.166 825.313 711.666L814.313 696.165C714.974 976.165 548.411 1115.92 359.862 1115.92C151.313 1115.92 0 972.665 0 794.466C0 582.558 193.313 444.512 450.313 444.512C625.327 444.512 730.313 526.666 783.813 571.665L796.313 532.666C781.813 463.166 613.813 360.364 436.813 360.364C329.862 360.364 239.313 386.166 144.313 437.165L20 114.335C134.313 49.6655 286.313 0 450.313 0ZM543.813 547.665C425.012 547.665 349.862 633.349 349.862 720.165C349.862 791.982 413.313 872.992 493.663 872.992C605.327 872.992 712.813 785.665 764.813 639.665C704.313 582.666 621.859 547.665 543.813 547.665Z";
|
|
3731
3819
|
var EXAMPLE_NAV_ITEMS = [
|
|
3732
3820
|
{ key: "home", label: "\u0413\u043B\u0430\u0432\u043D\u0430\u044F", icon: "home" },
|
|
@@ -3744,22 +3832,22 @@ function SidebarNav({
|
|
|
3744
3832
|
clientLabel,
|
|
3745
3833
|
clientInitial
|
|
3746
3834
|
}) {
|
|
3747
|
-
return /* @__PURE__ */
|
|
3748
|
-
/* @__PURE__ */
|
|
3835
|
+
return /* @__PURE__ */ jsxs25("aside", { className: "sidebar", children: [
|
|
3836
|
+
/* @__PURE__ */ jsx57("div", { className: "brand", title: "\u0410\u0440\u0442\u0435\u0444\u0430\u043A\u0442", children: /* @__PURE__ */ jsx57(
|
|
3749
3837
|
"svg",
|
|
3750
3838
|
{
|
|
3751
3839
|
className: "brand-logo",
|
|
3752
3840
|
viewBox: "0 0 960 1116",
|
|
3753
3841
|
fill: "currentColor",
|
|
3754
3842
|
"aria-hidden": "true",
|
|
3755
|
-
children: /* @__PURE__ */
|
|
3843
|
+
children: /* @__PURE__ */ jsx57("path", { fillRule: "evenodd", clipRule: "evenodd", d: BRAND_LOGO_PATH })
|
|
3756
3844
|
}
|
|
3757
3845
|
) }),
|
|
3758
|
-
clientLabel && /* @__PURE__ */
|
|
3759
|
-
/* @__PURE__ */
|
|
3760
|
-
/* @__PURE__ */
|
|
3846
|
+
clientLabel && /* @__PURE__ */ jsxs25("div", { className: "client", "aria-label": clientLabel, children: [
|
|
3847
|
+
/* @__PURE__ */ jsx57("span", { className: "bd", children: (clientInitial ?? clientLabel.charAt(0)).toUpperCase() }),
|
|
3848
|
+
/* @__PURE__ */ jsx57("span", { className: "tip", children: clientLabel })
|
|
3761
3849
|
] }),
|
|
3762
|
-
/* @__PURE__ */
|
|
3850
|
+
/* @__PURE__ */ jsx57("nav", { className: "nav", "aria-label": "\u041D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044F", children: items.map((item) => /* @__PURE__ */ jsxs25(
|
|
3763
3851
|
"a",
|
|
3764
3852
|
{
|
|
3765
3853
|
href: "#",
|
|
@@ -3767,17 +3855,17 @@ function SidebarNav({
|
|
|
3767
3855
|
"aria-label": item.label,
|
|
3768
3856
|
"aria-current": item.key === active ? "page" : void 0,
|
|
3769
3857
|
children: [
|
|
3770
|
-
/* @__PURE__ */
|
|
3771
|
-
/* @__PURE__ */
|
|
3858
|
+
/* @__PURE__ */ jsx57(Icon, { name: item.icon, size: NI }),
|
|
3859
|
+
/* @__PURE__ */ jsx57("span", { className: "tip", children: item.label })
|
|
3772
3860
|
]
|
|
3773
3861
|
},
|
|
3774
3862
|
item.key
|
|
3775
3863
|
)) }),
|
|
3776
|
-
/* @__PURE__ */
|
|
3777
|
-
/* @__PURE__ */
|
|
3778
|
-
showSettings && /* @__PURE__ */
|
|
3779
|
-
/* @__PURE__ */
|
|
3780
|
-
/* @__PURE__ */
|
|
3864
|
+
/* @__PURE__ */ jsxs25("div", { className: "side-foot", children: [
|
|
3865
|
+
/* @__PURE__ */ jsx57("span", { className: "avatar", title: avatarTitle, children: avatarInitials }),
|
|
3866
|
+
showSettings && /* @__PURE__ */ jsxs25("span", { className: "ico-btn", "aria-label": "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438", children: [
|
|
3867
|
+
/* @__PURE__ */ jsx57(Icon, { name: "settings", size: NI }),
|
|
3868
|
+
/* @__PURE__ */ jsx57("span", { className: "tip", children: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438" })
|
|
3781
3869
|
] })
|
|
3782
3870
|
] })
|
|
3783
3871
|
] });
|
|
@@ -3819,6 +3907,7 @@ export {
|
|
|
3819
3907
|
ChartTooltipContent,
|
|
3820
3908
|
Checkbox,
|
|
3821
3909
|
Chip,
|
|
3910
|
+
ComposedChart,
|
|
3822
3911
|
Container,
|
|
3823
3912
|
Dialog,
|
|
3824
3913
|
DialogClose,
|
|
@@ -3907,9 +3996,11 @@ export {
|
|
|
3907
3996
|
PaginationNext,
|
|
3908
3997
|
PaginationPrevious,
|
|
3909
3998
|
Progress,
|
|
3999
|
+
RadialChart,
|
|
3910
4000
|
RadioGroup,
|
|
3911
4001
|
RadioGroupItem,
|
|
3912
4002
|
SURFACE_VARIANTS,
|
|
4003
|
+
ScatterChart,
|
|
3913
4004
|
Search,
|
|
3914
4005
|
Select,
|
|
3915
4006
|
SelectContent,
|
|
@@ -3923,6 +4014,7 @@ export {
|
|
|
3923
4014
|
SelectValue,
|
|
3924
4015
|
Separator,
|
|
3925
4016
|
SidebarNav,
|
|
4017
|
+
Sparkline,
|
|
3926
4018
|
Spinner,
|
|
3927
4019
|
Stack,
|
|
3928
4020
|
Surface,
|