@acronis-platform/ui-react 3.0.0 → 4.0.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/dist/components/ui/accordion-container/accordion-container.js +14 -14
- package/dist/components/ui/accordion-container/accordion-container.js.map +1 -1
- package/dist/components/ui/app-shell-chat/app-shell-chat.js.map +1 -1
- package/dist/components/ui/area-chart/area-chart.js +141 -139
- package/dist/components/ui/area-chart/area-chart.js.map +1 -1
- package/dist/components/ui/bar-chart/bar-chart.js +295 -293
- package/dist/components/ui/bar-chart/bar-chart.js.map +1 -1
- package/dist/components/ui/category-bar/category-bar.js +109 -93
- package/dist/components/ui/category-bar/category-bar.js.map +1 -1
- package/dist/components/ui/chart/chart-palette.js +113 -0
- package/dist/components/ui/chart/chart-palette.js.map +1 -0
- package/dist/components/ui/chart/chart.js +176 -129
- package/dist/components/ui/chart/chart.js.map +1 -1
- package/dist/components/ui/chart-state/chart-state-illustrations.js +310 -0
- package/dist/components/ui/chart-state/chart-state-illustrations.js.map +1 -0
- package/dist/components/ui/chart-state/chart-state.js +48 -34
- package/dist/components/ui/chart-state/chart-state.js.map +1 -1
- package/dist/components/ui/chart-widget/chart-widget.js +87 -0
- package/dist/components/ui/chart-widget/chart-widget.js.map +1 -0
- package/dist/components/ui/composed-chart/composed-chart.js +117 -115
- package/dist/components/ui/composed-chart/composed-chart.js.map +1 -1
- package/dist/components/ui/confidence-cone/confidence-cone.js +166 -158
- package/dist/components/ui/confidence-cone/confidence-cone.js.map +1 -1
- package/dist/components/ui/funnel-chart/funnel-chart.js +162 -161
- package/dist/components/ui/funnel-chart/funnel-chart.js.map +1 -1
- package/dist/components/ui/histogram/histogram.js +94 -92
- package/dist/components/ui/histogram/histogram.js.map +1 -1
- package/dist/components/ui/input/input.js.map +1 -1
- package/dist/components/ui/label/label.js +2 -9
- package/dist/components/ui/label/label.js.map +1 -1
- package/dist/components/ui/line-chart/line-chart.js +143 -141
- package/dist/components/ui/line-chart/line-chart.js.map +1 -1
- package/dist/components/ui/metric/metric.js +74 -185
- package/dist/components/ui/metric/metric.js.map +1 -1
- package/dist/components/ui/page-content/page-content.js.map +1 -1
- package/dist/components/ui/pie-chart/pie-chart.js +201 -195
- package/dist/components/ui/pie-chart/pie-chart.js.map +1 -1
- package/dist/components/ui/radar-chart/radar-chart.js +133 -131
- package/dist/components/ui/radar-chart/radar-chart.js.map +1 -1
- package/dist/components/ui/radial-bar-chart/radial-bar-chart.js +297 -265
- package/dist/components/ui/radial-bar-chart/radial-bar-chart.js.map +1 -1
- package/dist/components/ui/sankey-chart/sankey-chart.js +123 -101
- package/dist/components/ui/sankey-chart/sankey-chart.js.map +1 -1
- package/dist/components/ui/scatter-chart/scatter-chart.js +76 -74
- package/dist/components/ui/scatter-chart/scatter-chart.js.map +1 -1
- package/dist/components/ui/section/section.js +157 -31
- package/dist/components/ui/section/section.js.map +1 -1
- package/dist/components/ui/stepper/stepper.js +24 -24
- package/dist/components/ui/stepper/stepper.js.map +1 -1
- package/dist/components/ui/stepper-item/stepper-item.js +43 -24
- package/dist/components/ui/stepper-item/stepper-item.js.map +1 -1
- package/dist/components/ui/treemap/treemap.js +133 -124
- package/dist/components/ui/treemap/treemap.js.map +1 -1
- package/dist/components/ui/trend-indicator/trend-indicator.js +34 -69
- package/dist/components/ui/trend-indicator/trend-indicator.js.map +1 -1
- package/dist/components/ui/wizard/wizard.js +59 -0
- package/dist/components/ui/wizard/wizard.js.map +1 -0
- package/dist/hooks/use-wizard.js +75 -0
- package/dist/hooks/use-wizard.js.map +1 -0
- package/dist/index.js +502 -497
- package/dist/index.js.map +1 -1
- package/dist/llms/accordion-container.md +181 -0
- package/dist/llms/accordion.md +124 -0
- package/dist/llms/alert.md +225 -0
- package/dist/llms/app-shell-chat.md +415 -0
- package/dist/llms/area-chart.md +355 -0
- package/dist/llms/avatar.md +208 -0
- package/dist/llms/bar-chart.md +406 -0
- package/dist/llms/breadcrumb.md +326 -0
- package/dist/llms/button-group.md +298 -0
- package/dist/llms/button-icon-input.md +142 -0
- package/dist/llms/button-icon-menu.md +209 -0
- package/dist/llms/button-icon.md +128 -0
- package/dist/llms/button-menu.md +172 -0
- package/dist/llms/button.md +185 -0
- package/dist/llms/calendar-panel.md +733 -0
- package/dist/llms/calendar.md +188 -0
- package/dist/llms/card-filter.md +214 -0
- package/dist/llms/card-section.md +293 -0
- package/dist/llms/card.md +447 -0
- package/dist/llms/carousel-dialog.md +156 -0
- package/dist/llms/category-bar.md +193 -0
- package/dist/llms/chart-state.md +190 -0
- package/dist/llms/chart-widget.md +209 -0
- package/dist/llms/chart.md +182 -0
- package/dist/llms/checkbox.md +257 -0
- package/dist/llms/chip.md +195 -0
- package/dist/llms/combobox.md +164 -0
- package/dist/llms/composed-chart.md +508 -0
- package/dist/llms/confidence-cone.md +277 -0
- package/dist/llms/data-table.md +474 -0
- package/dist/llms/date-range-picker.md +272 -0
- package/dist/llms/description-list.md +131 -0
- package/dist/llms/dialog-footer-carousel.md +147 -0
- package/dist/llms/dialog-footer-default.md +142 -0
- package/dist/llms/dialog-root.md +246 -0
- package/dist/llms/dialog-welcome.md +223 -0
- package/dist/llms/dialog.md +403 -0
- package/dist/llms/dropdown-menu.md +193 -0
- package/dist/llms/empty-overlay.md +146 -0
- package/dist/llms/empty.md +156 -0
- package/dist/llms/field.md +185 -0
- package/dist/llms/filter-cards.md +157 -0
- package/dist/llms/filter-chips.md +323 -0
- package/dist/llms/filter-search.md +512 -0
- package/dist/llms/form.md +154 -0
- package/dist/llms/funnel-chart.md +333 -0
- package/dist/llms/grid.md +80 -0
- package/dist/llms/histogram.md +190 -0
- package/dist/llms/input-date-picker.md +203 -0
- package/dist/llms/input-otp.md +173 -0
- package/dist/llms/input-password.md +197 -0
- package/dist/llms/input-search.md +170 -0
- package/dist/llms/input-select.md +278 -0
- package/dist/llms/input-text-area.md +271 -0
- package/dist/llms/input-text.md +192 -0
- package/dist/llms/line-chart.md +369 -0
- package/dist/llms/link.md +209 -0
- package/dist/llms/loading.md +130 -0
- package/dist/llms/meter.md +177 -0
- package/dist/llms/metric.md +204 -0
- package/dist/llms/number-field.md +122 -0
- package/dist/llms/page-content.md +69 -0
- package/dist/llms/page-header.md +182 -0
- package/dist/llms/pagination.md +133 -0
- package/dist/llms/pie-chart.md +307 -0
- package/dist/llms/popover.md +252 -0
- package/dist/llms/progress-circle.md +126 -0
- package/dist/llms/progress.md +111 -0
- package/dist/llms/radar-chart.md +316 -0
- package/dist/llms/radial-bar-chart.md +319 -0
- package/dist/llms/radio.md +255 -0
- package/dist/llms/resizable.md +195 -0
- package/dist/llms/sankey-chart.md +208 -0
- package/dist/llms/scatter-chart.md +239 -0
- package/dist/llms/scroll-area.md +183 -0
- package/dist/llms/section.md +401 -0
- package/dist/llms/select.md +210 -0
- package/dist/llms/separator.md +87 -0
- package/dist/llms/sheet.md +202 -0
- package/dist/llms/sidebar-primary.md +360 -0
- package/dist/llms/sidebar-secondary.md +417 -0
- package/dist/llms/skeleton.md +81 -0
- package/dist/llms/slider.md +97 -0
- package/dist/llms/spinner.md +100 -0
- package/dist/llms/stack.md +80 -0
- package/dist/llms/stepper-item.md +309 -0
- package/dist/llms/stepper.md +251 -0
- package/dist/llms/switch.md +140 -0
- package/dist/llms/table.md +436 -0
- package/dist/llms/tabs.md +197 -0
- package/dist/llms/tag.md +139 -0
- package/dist/llms/timeline.md +361 -0
- package/dist/llms/timer.md +259 -0
- package/dist/llms/toast.md +241 -0
- package/dist/llms/toggle-group.md +121 -0
- package/dist/llms/toolbar.md +453 -0
- package/dist/llms/tooltip.md +164 -0
- package/dist/llms/treemap.md +254 -0
- package/dist/llms/trend-indicator.md +132 -0
- package/dist/llms/widget-placeholder.md +169 -0
- package/dist/llms/wizard.md +412 -0
- package/dist/llms.txt +142 -0
- package/dist/react.js +502 -497
- package/dist/react.js.map +1 -1
- package/dist/src/components/ui/area-chart/area-chart.d.ts +9 -4
- package/dist/src/components/ui/avatar/avatar.d.ts +1 -1
- package/dist/src/components/ui/bar-chart/bar-chart.d.ts +9 -4
- package/dist/src/components/ui/category-bar/category-bar.d.ts +10 -4
- package/dist/src/components/ui/chart/__stories__/palette-control.d.ts +48 -0
- package/dist/src/components/ui/chart/__tests__/chart-palette.test.d.ts +1 -0
- package/dist/src/components/ui/chart/chart-palette.d.ts +128 -0
- package/dist/src/components/ui/chart/chart.d.ts +66 -15
- package/dist/src/components/ui/chart/index.d.ts +4 -2
- package/dist/src/components/ui/chart-state/chart-state-illustrations.d.ts +6 -0
- package/dist/src/components/ui/chart-state/chart-state.d.ts +13 -2
- package/dist/src/components/ui/chart-state/index.d.ts +1 -0
- package/dist/src/components/ui/chart-widget/chart-widget.d.ts +64 -0
- package/dist/src/components/ui/chart-widget/index.d.ts +1 -0
- package/dist/src/components/ui/composed-chart/composed-chart.d.ts +12 -7
- package/dist/src/components/ui/confidence-cone/confidence-cone.d.ts +10 -5
- package/dist/src/components/ui/empty-overlay/empty-overlay.d.ts +1 -1
- package/dist/src/components/ui/funnel-chart/funnel-chart.d.ts +11 -5
- package/dist/src/components/ui/histogram/histogram.d.ts +10 -4
- package/dist/src/components/ui/label/index.d.ts +1 -1
- package/dist/src/components/ui/label/label.d.ts +1 -5
- package/dist/src/components/ui/line-chart/line-chart.d.ts +9 -4
- package/dist/src/components/ui/metric/metric.d.ts +13 -14
- package/dist/src/components/ui/pie-chart/pie-chart.d.ts +17 -8
- package/dist/src/components/ui/radar-chart/radar-chart.d.ts +10 -5
- package/dist/src/components/ui/radial-bar-chart/radial-bar-chart.d.ts +17 -6
- package/dist/src/components/ui/sankey-chart/sankey-chart.d.ts +10 -5
- package/dist/src/components/ui/scatter-chart/scatter-chart.d.ts +10 -5
- package/dist/src/components/ui/section/index.d.ts +1 -1
- package/dist/src/components/ui/section/section.d.ts +75 -6
- package/dist/src/components/ui/stepper-item/stepper-item.d.ts +6 -5
- package/dist/src/components/ui/tag/tag.d.ts +1 -1
- package/dist/src/components/ui/treemap/treemap.d.ts +11 -5
- package/dist/src/components/ui/trend-indicator/trend-indicator.d.ts +3 -7
- package/dist/src/components/ui/wizard/index.d.ts +1 -0
- package/dist/src/components/ui/wizard/wizard.d.ts +6 -0
- package/dist/src/hooks/index.d.ts +1 -0
- package/dist/src/hooks/use-wizard.d.ts +80 -0
- package/dist/src/index.d.ts +2 -3
- package/dist/ui-react.css +1 -1
- package/package.json +9 -3
- package/dist/components/ui/app-shell/app-shell.js +0 -75
- package/dist/components/ui/app-shell/app-shell.js.map +0 -1
- package/dist/components/ui/auth-layout/auth-layout.js +0 -56
- package/dist/components/ui/auth-layout/auth-layout.js.map +0 -1
- package/dist/components/ui/collapsible/collapsible.js +0 -22
- package/dist/components/ui/collapsible/collapsible.js.map +0 -1
- package/dist/src/components/ui/app-shell/app-shell.d.ts +0 -8
- package/dist/src/components/ui/app-shell/index.d.ts +0 -1
- package/dist/src/components/ui/auth-layout/auth-layout.d.ts +0 -6
- package/dist/src/components/ui/auth-layout/index.d.ts +0 -1
- package/dist/src/components/ui/collapsible/collapsible.d.ts +0 -5
- package/dist/src/components/ui/collapsible/index.d.ts +0 -1
- package/dist/src/components/ui/label/label.docs.d.ts +0 -10
|
@@ -1,203 +1,92 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import * as
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
// Semantic status — drives the icon badge tint (see STATUS_BADGE). Kept as a
|
|
17
|
-
// cva axis so the enum is spec-conformant; the tint is applied on the badge.
|
|
18
|
-
status: {
|
|
19
|
-
neutral: "",
|
|
20
|
-
info: "",
|
|
21
|
-
success: "",
|
|
22
|
-
warning: "",
|
|
23
|
-
danger: "",
|
|
24
|
-
critical: ""
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
defaultVariants: {
|
|
28
|
-
size: "medium",
|
|
29
|
-
status: "neutral"
|
|
30
|
-
}
|
|
31
|
-
}), B = {
|
|
32
|
-
small: "text-[10px]",
|
|
33
|
-
medium: "text-[11px]",
|
|
34
|
-
large: "text-xs"
|
|
35
|
-
}, M = {
|
|
36
|
-
small: "text-2xl",
|
|
37
|
-
medium: "text-3xl",
|
|
38
|
-
large: "text-4xl"
|
|
39
|
-
}, V = {
|
|
40
|
-
small: "text-sm",
|
|
41
|
-
medium: "text-base",
|
|
42
|
-
large: "text-lg"
|
|
43
|
-
}, y = {
|
|
44
|
-
small: "text-xs",
|
|
45
|
-
medium: "text-xs",
|
|
46
|
-
large: "text-sm"
|
|
47
|
-
}, C = {
|
|
48
|
-
small: "size-7",
|
|
49
|
-
medium: "size-8",
|
|
50
|
-
large: "size-10"
|
|
51
|
-
}, G = {
|
|
52
|
-
small: 14,
|
|
53
|
-
medium: 16,
|
|
54
|
-
large: 20
|
|
55
|
-
}, L = {
|
|
56
|
-
small: "h-6 w-16",
|
|
57
|
-
medium: "h-8 w-20",
|
|
58
|
-
large: "h-10 w-28"
|
|
59
|
-
}, U = {
|
|
60
|
-
neutral: "bg-[var(--ui-background-status-neutral-pressed)] text-[var(--ui-text-on-status-neutral)]",
|
|
61
|
-
info: "bg-[var(--ui-background-status-info-pressed)] text-[var(--ui-text-on-status-info)]",
|
|
62
|
-
success: "bg-[var(--ui-background-status-success-pressed)] text-[var(--ui-text-on-status-success)]",
|
|
63
|
-
warning: "bg-[var(--ui-background-status-warning-pressed)] text-[var(--ui-text-on-status-warning)]",
|
|
64
|
-
danger: "bg-[var(--ui-background-status-danger-pressed)] text-[var(--ui-text-on-status-danger)]",
|
|
65
|
-
critical: "bg-[var(--ui-background-status-critical-pressed)] text-[var(--ui-text-on-status-critical)]"
|
|
1
|
+
import { jsxs as n, jsx as e, Fragment as N } from "react/jsx-runtime";
|
|
2
|
+
import * as a from "react";
|
|
3
|
+
import { CircleInfoIcon as v } from "@acronis-platform/icons-react/stroke-mono";
|
|
4
|
+
import { cn as b } from "../../../lib/utils.js";
|
|
5
|
+
import { Skeleton as T } from "../skeleton/skeleton.js";
|
|
6
|
+
import { Tooltip as k, TooltipTrigger as E, TooltipContent as I } from "../tooltip/tooltip.js";
|
|
7
|
+
import { TrendIndicator as w } from "../trend-indicator/trend-indicator.js";
|
|
8
|
+
const M = {
|
|
9
|
+
up: "up",
|
|
10
|
+
down: "down",
|
|
11
|
+
stable: "flat"
|
|
12
|
+
}, R = {
|
|
13
|
+
up: "positive",
|
|
14
|
+
down: "negative",
|
|
15
|
+
stable: "neutral"
|
|
66
16
|
};
|
|
67
|
-
function
|
|
68
|
-
icon: s,
|
|
69
|
-
size: a,
|
|
70
|
-
status: n
|
|
71
|
-
}) {
|
|
17
|
+
function j({ icon: r }) {
|
|
72
18
|
return /* @__PURE__ */ e(
|
|
73
19
|
"span",
|
|
74
20
|
{
|
|
75
21
|
"aria-hidden": !0,
|
|
76
|
-
className:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
),
|
|
81
|
-
children: i.isValidElement(s) ? i.cloneElement(s, {
|
|
82
|
-
size: G[a]
|
|
83
|
-
}) : s
|
|
22
|
+
className: "flex size-9 shrink-0 items-center justify-center rounded-lg bg-[var(--ui-background-status-info)] text-[var(--ui-glyph-on-surface-neutral-dark)] [&_svg]:shrink-0",
|
|
23
|
+
children: a.isValidElement(r) ? a.cloneElement(r, {
|
|
24
|
+
size: 16
|
|
25
|
+
}) : r
|
|
84
26
|
}
|
|
85
27
|
);
|
|
86
28
|
}
|
|
87
|
-
function
|
|
88
|
-
value:
|
|
89
|
-
unit:
|
|
90
|
-
size: n
|
|
29
|
+
function y({
|
|
30
|
+
value: r,
|
|
31
|
+
unit: l
|
|
91
32
|
}) {
|
|
92
|
-
return /* @__PURE__ */
|
|
93
|
-
/* @__PURE__ */ e(
|
|
94
|
-
|
|
95
|
-
{
|
|
96
|
-
className: r(
|
|
97
|
-
"font-bold leading-none tabular-nums text-foreground",
|
|
98
|
-
M[n]
|
|
99
|
-
),
|
|
100
|
-
children: s
|
|
101
|
-
}
|
|
102
|
-
),
|
|
103
|
-
a != null && /* @__PURE__ */ e(
|
|
104
|
-
"span",
|
|
105
|
-
{
|
|
106
|
-
className: r("font-medium text-muted-foreground", V[n]),
|
|
107
|
-
children: a
|
|
108
|
-
}
|
|
109
|
-
)
|
|
33
|
+
return /* @__PURE__ */ n(N, { children: [
|
|
34
|
+
/* @__PURE__ */ e("span", { className: "text-2xl font-semibold leading-8 tabular-nums text-foreground", children: r }),
|
|
35
|
+
l != null && /* @__PURE__ */ e("span", { className: "text-xs text-muted-foreground", children: l })
|
|
110
36
|
] });
|
|
111
37
|
}
|
|
112
|
-
const
|
|
38
|
+
const z = a.forwardRef(
|
|
113
39
|
({
|
|
114
|
-
className:
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
supportingText:
|
|
121
|
-
badge:
|
|
122
|
-
icon:
|
|
123
|
-
tooltip:
|
|
124
|
-
tooltipLabel:
|
|
125
|
-
loading:
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
40
|
+
className: r,
|
|
41
|
+
value: l,
|
|
42
|
+
unit: m,
|
|
43
|
+
caption: i,
|
|
44
|
+
trend: t,
|
|
45
|
+
trendValue: u,
|
|
46
|
+
supportingText: s,
|
|
47
|
+
badge: o,
|
|
48
|
+
icon: c,
|
|
49
|
+
tooltip: d,
|
|
50
|
+
tooltipLabel: f = "More information",
|
|
51
|
+
loading: p = !1,
|
|
52
|
+
children: h,
|
|
53
|
+
...x
|
|
54
|
+
}, g) => /* @__PURE__ */ n("div", { ref: g, className: b("flex flex-col gap-2", r), ...x, children: [
|
|
55
|
+
/* @__PURE__ */ n("div", { className: "flex items-center justify-between gap-2", children: [
|
|
56
|
+
/* @__PURE__ */ n("div", { className: "flex items-center gap-2", children: [
|
|
57
|
+
c != null && /* @__PURE__ */ e(j, { icon: c }),
|
|
58
|
+
/* @__PURE__ */ n("div", { className: "flex items-baseline gap-1", children: [
|
|
59
|
+
p ? /* @__PURE__ */ e(T, { className: "h-8 w-20" }) : /* @__PURE__ */ e(y, { value: l, unit: m }),
|
|
60
|
+
o != null && /* @__PURE__ */ e("span", { className: "ms-1 self-center", children: o })
|
|
61
|
+
] }),
|
|
62
|
+
d != null && /* @__PURE__ */ n(k, { children: [
|
|
63
|
+
/* @__PURE__ */ e(
|
|
64
|
+
E,
|
|
65
|
+
{
|
|
66
|
+
"aria-label": f,
|
|
67
|
+
className: "inline-flex shrink-0 cursor-default appearance-none border-0 bg-transparent p-0 text-muted-foreground",
|
|
68
|
+
children: /* @__PURE__ */ e(v, { size: 16, "aria-hidden": !0 })
|
|
69
|
+
}
|
|
70
|
+
),
|
|
71
|
+
/* @__PURE__ */ e(I, { children: d })
|
|
72
|
+
] })
|
|
73
|
+
] }),
|
|
74
|
+
i != null && /* @__PURE__ */ e("div", { className: "shrink-0", children: i })
|
|
75
|
+
] }),
|
|
76
|
+
t != null && /* @__PURE__ */ e("div", { children: /* @__PURE__ */ e(
|
|
77
|
+
w,
|
|
134
78
|
{
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
className: r("flex flex-col p-4", s),
|
|
139
|
-
...w,
|
|
140
|
-
children: [
|
|
141
|
-
/* @__PURE__ */ t("div", { className: r(j({ size: x, status: f })), children: [
|
|
142
|
-
/* @__PURE__ */ t("div", { className: "flex items-center justify-between gap-2", children: [
|
|
143
|
-
/* @__PURE__ */ t("div", { className: "flex min-w-0 items-center gap-1.5", children: [
|
|
144
|
-
/* @__PURE__ */ e(
|
|
145
|
-
"span",
|
|
146
|
-
{
|
|
147
|
-
className: r(
|
|
148
|
-
"min-w-0 truncate font-bold uppercase leading-none tracking-wide text-muted-foreground",
|
|
149
|
-
B[l]
|
|
150
|
-
),
|
|
151
|
-
children: a
|
|
152
|
-
}
|
|
153
|
-
),
|
|
154
|
-
g != null && /* @__PURE__ */ t(z, { children: [
|
|
155
|
-
/* @__PURE__ */ e(
|
|
156
|
-
T,
|
|
157
|
-
{
|
|
158
|
-
"aria-label": v,
|
|
159
|
-
className: "inline-flex shrink-0 cursor-default appearance-none border-0 bg-transparent p-0 text-muted-foreground",
|
|
160
|
-
children: /* @__PURE__ */ e(I, { size: 16, "aria-hidden": !0 })
|
|
161
|
-
}
|
|
162
|
-
),
|
|
163
|
-
/* @__PURE__ */ e(A, { children: g })
|
|
164
|
-
] })
|
|
165
|
-
] }),
|
|
166
|
-
c != null && /* @__PURE__ */ e("div", { className: "shrink-0", children: c })
|
|
167
|
-
] }),
|
|
168
|
-
/* @__PURE__ */ t("div", { className: "flex items-center justify-between gap-3", children: [
|
|
169
|
-
/* @__PURE__ */ t("div", { className: "flex min-w-0 items-center gap-2", children: [
|
|
170
|
-
o != null && /* @__PURE__ */ e(
|
|
171
|
-
D,
|
|
172
|
-
{
|
|
173
|
-
icon: o,
|
|
174
|
-
size: l,
|
|
175
|
-
status: p
|
|
176
|
-
}
|
|
177
|
-
),
|
|
178
|
-
/* @__PURE__ */ t("div", { className: "flex min-w-0 items-baseline gap-1", children: [
|
|
179
|
-
N ? /* @__PURE__ */ e(Z, { className: L[l] }) : /* @__PURE__ */ e(O, { value: n, unit: h, size: l }),
|
|
180
|
-
d != null && /* @__PURE__ */ e("span", { className: "ms-1 self-center", children: d })
|
|
181
|
-
] })
|
|
182
|
-
] }),
|
|
183
|
-
u != null && /* @__PURE__ */ e("div", { className: "shrink-0", children: u })
|
|
184
|
-
] }),
|
|
185
|
-
m != null && /* @__PURE__ */ e(
|
|
186
|
-
"div",
|
|
187
|
-
{
|
|
188
|
-
className: r("text-muted-foreground", y[l]),
|
|
189
|
-
children: m
|
|
190
|
-
}
|
|
191
|
-
)
|
|
192
|
-
] }),
|
|
193
|
-
b
|
|
194
|
-
]
|
|
79
|
+
direction: M[t],
|
|
80
|
+
sentiment: R[t],
|
|
81
|
+
value: u
|
|
195
82
|
}
|
|
196
|
-
)
|
|
197
|
-
|
|
83
|
+
) }),
|
|
84
|
+
s != null && /* @__PURE__ */ e("div", { className: "text-xs text-muted-foreground", children: s }),
|
|
85
|
+
h
|
|
86
|
+
] })
|
|
198
87
|
);
|
|
199
|
-
|
|
88
|
+
z.displayName = "Metric";
|
|
200
89
|
export {
|
|
201
|
-
|
|
90
|
+
z as Metric
|
|
202
91
|
};
|
|
203
92
|
//# sourceMappingURL=metric.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metric.js","sources":["../../../../src/components/ui/metric/metric.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { CircleInfoIcon } from '@acronis-platform/icons-react/stroke-mono';\n\nimport { cn } from '@/lib/utils';\nimport { Card } from '../card';\nimport { Skeleton } from '../skeleton';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip';\n\n// A presentational metric / statistic, laid out after the Figma MetricCard node:\n// a label row (label + an optional top-right caption) over a value row (an\n// optional status-tinted icon badge + the value + unit on the left, an optional\n// trend on the right), with optional supporting text below. It owns visual\n// hierarchy and layout only — it never computes or formats the value, converts\n// units, or decides whether a value is good or bad; the consumer passes\n// ready-to-render nodes and a resolved `status`, and composes a `TrendIndicator`\n// into the trend slot. `status` tints the icon badge (a subtle cue, not a full\n// color fill). No dedicated token tier — colors are semantic `--ui-*` tokens and\n// geometry uses the Tailwind scale.\nconst metricVariants = cva('flex flex-col', {\n variants: {\n size: {\n small: 'gap-1',\n medium: 'gap-1.5',\n large: 'gap-2',\n },\n // Semantic status — drives the icon badge tint (see STATUS_BADGE). Kept as a\n // cva axis so the enum is spec-conformant; the tint is applied on the badge.\n status: {\n neutral: '',\n info: '',\n success: '',\n warning: '',\n danger: '',\n critical: '',\n },\n },\n defaultVariants: {\n size: 'medium',\n status: 'neutral',\n },\n});\n\nconst LABEL_SIZE = {\n small: 'text-[10px]',\n medium: 'text-[11px]',\n large: 'text-xs',\n} as const;\n\nconst VALUE_SIZE = {\n small: 'text-2xl',\n medium: 'text-3xl',\n large: 'text-4xl',\n} as const;\n\nconst UNIT_SIZE = {\n small: 'text-sm',\n medium: 'text-base',\n large: 'text-lg',\n} as const;\n\nconst SUPPORTING_SIZE = {\n small: 'text-xs',\n medium: 'text-xs',\n large: 'text-sm',\n} as const;\n\nconst BADGE_SIZE = {\n small: 'size-7',\n medium: 'size-8',\n large: 'size-10',\n} as const;\n\n// icons-react icons size themselves from a `size` prop (which also picks the\n// designed stroke weight) — CSS can't do that reliably — so the badge icon is\n// cloned to the right px for the Metric size.\nconst BADGE_ICON_PX = {\n small: 14,\n medium: 16,\n large: 20,\n} as const;\n\nconst SKELETON_SIZE = {\n small: 'h-6 w-16',\n medium: 'h-8 w-20',\n large: 'h-10 w-28',\n} as const;\n\n// The badge pairs the status \"pressed\" background tint with its matching icon\n// color (the same pairing the design uses for status icon chips).\nconst STATUS_BADGE = {\n neutral:\n 'bg-[var(--ui-background-status-neutral-pressed)] text-[var(--ui-text-on-status-neutral)]',\n info: 'bg-[var(--ui-background-status-info-pressed)] text-[var(--ui-text-on-status-info)]',\n success:\n 'bg-[var(--ui-background-status-success-pressed)] text-[var(--ui-text-on-status-success)]',\n warning:\n 'bg-[var(--ui-background-status-warning-pressed)] text-[var(--ui-text-on-status-warning)]',\n danger:\n 'bg-[var(--ui-background-status-danger-pressed)] text-[var(--ui-text-on-status-danger)]',\n critical:\n 'bg-[var(--ui-background-status-critical-pressed)] text-[var(--ui-text-on-status-critical)]',\n} as const;\n\nexport interface MetricProps\n extends React.ComponentProps<'div'>,\n VariantProps<typeof metricVariants> {\n /** What the value measures — e.g. \"Gross margin\". Rendered as an uppercase note heading. */\n label: React.ReactNode;\n /**\n * The primary value, already formatted (`73`, `\"94%\"`, `\"$72K\"`, `\"2.8\"`).\n * The kit does not format currency, units, or decimals.\n */\n value: React.ReactNode;\n /** Unit shown next to the value at a smaller, muted size — e.g. `\"%\"`, `\"hours\"`. */\n unit?: React.ReactNode;\n /** A top-right caption aligned with the label — e.g. a timeframe `Tag` (\"Last 30 days\"). */\n caption?: React.ReactNode;\n /** A trend slot on the right of the value — typically a `TrendIndicator`. */\n trend?: React.ReactNode;\n /** Secondary line below the value — e.g. \"Target: 99%\". */\n supportingText?: React.ReactNode;\n /** A small badge / metadata slot beside the value — e.g. a `Tag`. */\n badge?: React.ReactNode;\n /** Icon rendered in a status-tinted badge before the value. */\n icon?: React.ReactNode;\n /** Contextual hint on an info affordance next to the label (Base UI Tooltip). */\n tooltip?: React.ReactNode;\n /** Accessible name for the info affordance that reveals `tooltip`. */\n tooltipLabel?: string;\n /** Show a skeleton in place of the value, preserving its space. */\n loading?: boolean;\n /** Card body below the header — e.g. a chart, a Separator, an insight line. */\n children?: React.ReactNode;\n}\n\n// Every size-keyed lookup above (LABEL/VALUE/UNIT/SUPPORTING/BADGE/SKELETON) is\n// keyed by the `size` cva axis, so the vocabulary is derived from that axis\n// rather than from whichever one map a given helper happens to index.\ntype MetricSize = NonNullable<VariantProps<typeof metricVariants>['size']>;\ntype MetricStatus = keyof typeof STATUS_BADGE;\n\n/**\n * The status-tinted icon chip beside the value.\n *\n * The icon is cloned rather than sized in CSS because icons-react icons pick\n * their designed stroke weight from the `size` prop — scaling them with CSS\n * would thin or thicken the stroke off-design.\n */\nfunction MetricIconBadge({\n icon,\n size,\n status,\n}: {\n icon: React.ReactNode;\n size: MetricSize;\n status: MetricStatus;\n}) {\n return (\n <span\n aria-hidden\n className={cn(\n 'flex shrink-0 items-center justify-center rounded-lg [&_svg]:shrink-0',\n BADGE_SIZE[size],\n STATUS_BADGE[status]\n )}\n >\n {React.isValidElement(icon)\n ? React.cloneElement(icon as React.ReactElement<{ size?: number }>, {\n size: BADGE_ICON_PX[size],\n })\n : icon}\n </span>\n );\n}\n\n/** The headline number and its unit, sharing one baseline. */\nfunction MetricValue({\n value,\n unit,\n size,\n}: {\n value: React.ReactNode;\n unit?: React.ReactNode;\n size: MetricSize;\n}) {\n return (\n <>\n <span\n className={cn(\n 'font-bold leading-none tabular-nums text-foreground',\n VALUE_SIZE[size]\n )}\n >\n {value}\n </span>\n {unit != null && (\n <span\n className={cn('font-medium text-muted-foreground', UNIT_SIZE[size])}\n >\n {unit}\n </span>\n )}\n </>\n );\n}\n\nconst Metric = React.forwardRef<HTMLDivElement, MetricProps>(\n (\n {\n className,\n label,\n value,\n unit,\n caption,\n trend,\n supportingText,\n badge,\n icon,\n tooltip,\n tooltipLabel = 'More information',\n loading = false,\n size,\n status,\n children,\n ...props\n },\n ref\n ) => {\n const resolvedSize = size ?? 'medium';\n const resolvedStatus = status ?? 'neutral';\n\n return (\n <Card\n ref={ref}\n data-size={resolvedSize}\n data-status={resolvedStatus}\n className={cn('flex flex-col p-4', className)}\n {...props}\n >\n <div className={cn(metricVariants({ size, status }))}>\n {/* Label row: label (+ optional info) on the left, caption on the right. */}\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex min-w-0 items-center gap-1.5\">\n <span\n className={cn(\n 'min-w-0 truncate font-bold uppercase leading-none tracking-wide text-muted-foreground',\n LABEL_SIZE[resolvedSize]\n )}\n >\n {label}\n </span>\n {tooltip != null && (\n <Tooltip>\n <TooltipTrigger\n aria-label={tooltipLabel}\n className=\"inline-flex shrink-0 cursor-default appearance-none border-0 bg-transparent p-0 text-muted-foreground\"\n >\n <CircleInfoIcon size={16} aria-hidden />\n </TooltipTrigger>\n <TooltipContent>{tooltip}</TooltipContent>\n </Tooltip>\n )}\n </div>\n {caption != null && <div className=\"shrink-0\">{caption}</div>}\n </div>\n\n {/* Value row: badge + value + unit on the left, trend on the right. */}\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-2\">\n {icon != null && (\n <MetricIconBadge\n icon={icon}\n size={resolvedSize}\n status={resolvedStatus}\n />\n )}\n <div className=\"flex min-w-0 items-baseline gap-1\">\n {loading ? (\n <Skeleton className={SKELETON_SIZE[resolvedSize]} />\n ) : (\n <MetricValue value={value} unit={unit} size={resolvedSize} />\n )}\n {badge != null && <span className=\"ms-1 self-center\">{badge}</span>}\n </div>\n </div>\n {trend != null && <div className=\"shrink-0\">{trend}</div>}\n </div>\n\n {supportingText != null && (\n <div\n className={cn('text-muted-foreground', SUPPORTING_SIZE[resolvedSize])}\n >\n {supportingText}\n </div>\n )}\n </div>\n {children}\n </Card>\n );\n }\n);\nMetric.displayName = 'Metric';\n\nexport { Metric };\n"],"names":["metricVariants","cva","LABEL_SIZE","VALUE_SIZE","UNIT_SIZE","SUPPORTING_SIZE","BADGE_SIZE","BADGE_ICON_PX","SKELETON_SIZE","STATUS_BADGE","MetricIconBadge","icon","size","status","jsx","cn","React","MetricValue","value","unit","jsxs","Fragment","Metric","className","label","caption","trend","supportingText","badge","tooltip","tooltipLabel","loading","children","props","ref","resolvedSize","resolvedStatus","Card","Tooltip","TooltipTrigger","CircleInfoIcon","TooltipContent","Skeleton"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"metric.js","sources":["../../../../src/components/ui/metric/metric.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { CircleInfoIcon } from '@acronis-platform/icons-react/stroke-mono';\n\nimport { cn } from '@/lib/utils';\nimport { Skeleton } from '../skeleton';\nimport { TrendIndicator } from '../trend-indicator';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip';\n\n// A presentational metric stats strip: a single row with an optional status-info\n// icon badge + value + unit on the left and an optional caption on the right, with\n// an optional trend row below and a composable body. No Card wrapper, no size or\n// status axes — nest it inside ChartWidget or a Card when you need card chrome.\n// Colors are semantic `--ui-*` tokens; the badge always uses the info tint per Figma.\n\nconst TREND_DIRECTION = {\n up: 'up',\n down: 'down',\n stable: 'flat',\n} as const satisfies Record<string, 'up' | 'down' | 'flat'>;\n\nconst TREND_SENTIMENT = {\n up: 'positive',\n down: 'negative',\n stable: 'neutral',\n} as const satisfies Record<string, 'positive' | 'negative' | 'neutral'>;\n\nexport interface MetricProps extends React.ComponentProps<'div'> {\n /**\n * The primary value, already formatted (`73`, `\"94%\"`, `\"$72K\"`, `\"2.8\"`).\n * The kit does not format currency, units, or decimals.\n */\n value: React.ReactNode;\n /** Unit shown next to the value at a smaller, muted size — e.g. `\"%\"`, `\"hours\"`. */\n unit?: React.ReactNode;\n /** Caption at the right end of the stats row — e.g. a timeframe `Tag`. */\n caption?: React.ReactNode;\n /**\n * Trend direction — renders a `TrendIndicator` on its own row below the value.\n * Sentiment follows direction: `up` → positive, `down` → negative, `stable` → neutral.\n * Pair with `trendValue` for the change text.\n */\n trend?: 'up' | 'down' | 'stable';\n /** Change text shown next to the trend arrow — e.g. `\"20%\"`, `\"+3\"`. Requires `trend`. */\n trendValue?: React.ReactNode;\n /** Secondary line below the trend — e.g. \"Target: 99%\". */\n supportingText?: React.ReactNode;\n /** A small badge / metadata slot beside the value — e.g. a `Tag`. */\n badge?: React.ReactNode;\n /** Icon rendered in a status-info-tinted badge before the value. */\n icon?: React.ReactNode;\n /** Contextual hint on an info affordance next to the label (Base UI Tooltip). */\n tooltip?: React.ReactNode;\n /** Accessible name for the info affordance that reveals `tooltip`. */\n tooltipLabel?: string;\n /** Show a skeleton in place of the value, preserving its space. */\n loading?: boolean;\n /** Content below the stats strip — e.g. a chart, a `Separator`, an insight line. */\n children?: React.ReactNode;\n}\n\n// The status-info-tinted icon chip. The icon is cloned to a fixed 16 px rather\n// than sized in CSS because icons-react icons pick their stroke weight from the\n// `size` prop — CSS alone can't replicate that.\nfunction MetricIconBadge({ icon }: { icon: React.ReactNode }) {\n return (\n <span\n aria-hidden\n className=\"flex size-9 shrink-0 items-center justify-center rounded-lg bg-[var(--ui-background-status-info)] text-[var(--ui-glyph-on-surface-neutral-dark)] [&_svg]:shrink-0\"\n >\n {React.isValidElement(icon)\n ? React.cloneElement(icon as React.ReactElement<{ size?: number }>, {\n size: 16,\n })\n : icon}\n </span>\n );\n}\n\n/** The headline number and its unit, sharing one baseline. */\nfunction MetricValue({\n value,\n unit,\n}: {\n value: React.ReactNode;\n unit?: React.ReactNode;\n}) {\n return (\n <>\n <span className=\"text-2xl font-semibold leading-8 tabular-nums text-foreground\">\n {value}\n </span>\n {unit != null && (\n <span className=\"text-xs text-muted-foreground\">{unit}</span>\n )}\n </>\n );\n}\n\nconst Metric = React.forwardRef<HTMLDivElement, MetricProps>(\n (\n {\n className,\n value,\n unit,\n caption,\n trend,\n trendValue,\n supportingText,\n badge,\n icon,\n tooltip,\n tooltipLabel = 'More information',\n loading = false,\n children,\n ...props\n },\n ref\n ) => {\n return (\n <div ref={ref} className={cn('flex flex-col gap-2', className)} {...props}>\n {/* Stats row: icon badge + value + unit on the left, caption on the right. */}\n <div className=\"flex items-center justify-between gap-2\">\n <div className=\"flex items-center gap-2\">\n {icon != null && <MetricIconBadge icon={icon} />}\n <div className=\"flex items-baseline gap-1\">\n {loading ? (\n <Skeleton className=\"h-8 w-20\" />\n ) : (\n <MetricValue value={value} unit={unit} />\n )}\n {badge != null && (\n <span className=\"ms-1 self-center\">{badge}</span>\n )}\n </div>\n {tooltip != null && (\n <Tooltip>\n <TooltipTrigger\n aria-label={tooltipLabel}\n className=\"inline-flex shrink-0 cursor-default appearance-none border-0 bg-transparent p-0 text-muted-foreground\"\n >\n <CircleInfoIcon size={16} aria-hidden />\n </TooltipTrigger>\n <TooltipContent>{tooltip}</TooltipContent>\n </Tooltip>\n )}\n </div>\n {caption != null && <div className=\"shrink-0\">{caption}</div>}\n </div>\n\n {/* Trend row: renders TrendIndicator from the first-class trend prop. */}\n {trend != null && (\n <div>\n <TrendIndicator\n direction={TREND_DIRECTION[trend]}\n sentiment={TREND_SENTIMENT[trend]}\n value={trendValue}\n />\n </div>\n )}\n\n {supportingText != null && (\n <div className=\"text-xs text-muted-foreground\">{supportingText}</div>\n )}\n\n {children}\n </div>\n );\n }\n);\nMetric.displayName = 'Metric';\n\nexport { Metric };\n"],"names":["TREND_DIRECTION","TREND_SENTIMENT","MetricIconBadge","icon","jsx","React","MetricValue","value","unit","jsxs","Fragment","Metric","className","caption","trend","trendValue","supportingText","badge","tooltip","tooltipLabel","loading","children","props","ref","cn","Skeleton","Tooltip","TooltipTrigger","CircleInfoIcon","TooltipContent","TrendIndicator"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-content.js","sources":["../../../../src/components/ui/page-content/page-content.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\n// The page content region — the padded gutter for a page's body. Ported from\n// `@acronis-platform`'s `page-content`. Rendered as a `<div
|
|
1
|
+
{"version":3,"file":"page-content.js","sources":["../../../../src/components/ui/page-content/page-content.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\n// The page content region — the padded gutter for a page's body. Ported from\n// `@acronis-platform`'s `page-content`. Rendered as a `<div>`, not `<main>` —\n// `AppShellChatContentBody` doesn't provide a `main` landmark either, so wrap\n// this in your own `<main>` regardless of whether it nests inside\n// `AppShellChatContentBody` or is used standalone. Layout-only (flex-1 + page\n// padding).\nexport type PageContentProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst PageContent = React.forwardRef<HTMLDivElement, PageContentProps>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"page-content\"\n className={cn('flex-1 p-6', className)}\n {...props}\n />\n )\n);\nPageContent.displayName = 'PageContent';\n\nexport { PageContent };\n"],"names":["PageContent","React","className","props","ref","jsx","cn"],"mappings":";;;AAYA,MAAMA,IAAcC,EAAM;AAAA,EACxB,CAAC,EAAE,WAAAC,GAAW,GAAGC,EAAA,GAASC,MACxB,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAD;AAAA,MACA,aAAU;AAAA,MACV,WAAWE,EAAG,cAAcJ,CAAS;AAAA,MACpC,GAAGC;AAAA,IAAA;AAAA,EAAA;AAGV;AACAH,EAAY,cAAc;"}
|