@acronis-platform/ui-react 0.57.1 → 0.60.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/area-chart/area-chart.js +177 -0
- package/dist/components/ui/area-chart/area-chart.js.map +1 -0
- package/dist/components/ui/bar-chart/bar-chart.js +184 -78
- package/dist/components/ui/bar-chart/bar-chart.js.map +1 -1
- package/dist/components/ui/button-icon-input/button-icon-input.js +36 -0
- package/dist/components/ui/button-icon-input/button-icon-input.js.map +1 -0
- package/dist/components/ui/button-menu/button-menu.js +1 -1
- package/dist/components/ui/button-menu/button-menu.js.map +1 -1
- package/dist/components/ui/calendar/calendar.js +17 -15
- package/dist/components/ui/calendar/calendar.js.map +1 -1
- package/dist/components/ui/card-filter/card-filter.js +40 -27
- package/dist/components/ui/card-filter/card-filter.js.map +1 -1
- package/dist/components/ui/carousel-dialog/carousel-dialog.js +87 -0
- package/dist/components/ui/carousel-dialog/carousel-dialog.js.map +1 -0
- package/dist/components/ui/category-bar/category-bar.js +126 -0
- package/dist/components/ui/category-bar/category-bar.js.map +1 -0
- package/dist/components/ui/chart/chart-format.js +40 -0
- package/dist/components/ui/chart/chart-format.js.map +1 -0
- package/dist/components/ui/chart/chart.js.map +1 -1
- package/dist/components/ui/chart-state/chart-state.js +42 -0
- package/dist/components/ui/chart-state/chart-state.js.map +1 -0
- package/dist/components/ui/chip/chip.js +13 -13
- package/dist/components/ui/chip/chip.js.map +1 -1
- package/dist/components/ui/composed-chart/composed-chart.js +135 -0
- package/dist/components/ui/composed-chart/composed-chart.js.map +1 -0
- package/dist/components/ui/confidence-cone/confidence-cone.js +223 -0
- package/dist/components/ui/confidence-cone/confidence-cone.js.map +1 -0
- package/dist/components/ui/date-range-picker/date-range-picker.js +21 -21
- package/dist/components/ui/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/ui/dialog/dialog.js +248 -76
- package/dist/components/ui/dialog/dialog.js.map +1 -1
- package/dist/components/ui/dialog-footer-carousel/dialog-footer-carousel.js +57 -0
- package/dist/components/ui/dialog-footer-carousel/dialog-footer-carousel.js.map +1 -0
- package/dist/components/ui/dialog-footer-default/dialog-footer-default.js +26 -0
- package/dist/components/ui/dialog-footer-default/dialog-footer-default.js.map +1 -0
- package/dist/components/ui/dialog-welcome/dialog-welcome.js +272 -0
- package/dist/components/ui/dialog-welcome/dialog-welcome.js.map +1 -0
- package/dist/components/ui/dropdown-menu/dropdown-menu.js +21 -21
- package/dist/components/ui/dropdown-menu/dropdown-menu.js.map +1 -1
- package/dist/components/ui/filter-search/filter-search.js +91 -90
- package/dist/components/ui/filter-search/filter-search.js.map +1 -1
- package/dist/components/ui/funnel-chart/funnel-chart.js +87 -0
- package/dist/components/ui/funnel-chart/funnel-chart.js.map +1 -0
- package/dist/components/ui/histogram/histogram.js +136 -0
- package/dist/components/ui/histogram/histogram.js.map +1 -0
- package/dist/components/ui/input/input.js.map +1 -1
- package/dist/components/ui/input-otp/input-otp.js +104 -0
- package/dist/components/ui/input-otp/input-otp.js.map +1 -0
- package/dist/components/ui/input-password/input-password.js +120 -0
- package/dist/components/ui/input-password/input-password.js.map +1 -0
- package/dist/components/ui/input-text/input-text.js +9 -9
- package/dist/components/ui/input-text/input-text.js.map +1 -1
- package/dist/components/ui/line-chart/line-chart.js +234 -0
- package/dist/components/ui/line-chart/line-chart.js.map +1 -0
- package/dist/components/ui/link/link.js +5 -5
- package/dist/components/ui/link/link.js.map +1 -1
- package/dist/components/ui/loading/loading.js +79 -0
- package/dist/components/ui/loading/loading.js.map +1 -0
- package/dist/components/ui/meter/meter.js +93 -0
- package/dist/components/ui/meter/meter.js.map +1 -0
- package/dist/components/ui/metric/metric.js +185 -0
- package/dist/components/ui/metric/metric.js.map +1 -0
- package/dist/components/ui/pie-chart/pie-chart.js +113 -0
- package/dist/components/ui/pie-chart/pie-chart.js.map +1 -0
- package/dist/components/ui/popover/popover.js +57 -27
- package/dist/components/ui/popover/popover.js.map +1 -1
- package/dist/components/ui/radar-chart/radar-chart.js +74 -0
- package/dist/components/ui/radar-chart/radar-chart.js.map +1 -0
- package/dist/components/ui/radial-bar-chart/radial-bar-chart.js +69 -0
- package/dist/components/ui/radial-bar-chart/radial-bar-chart.js.map +1 -0
- package/dist/components/ui/sankey-chart/sankey-chart.js +192 -0
- package/dist/components/ui/sankey-chart/sankey-chart.js.map +1 -0
- package/dist/components/ui/scatter-chart/scatter-chart.js +130 -0
- package/dist/components/ui/scatter-chart/scatter-chart.js.map +1 -0
- package/dist/components/ui/search/search.js +16 -16
- package/dist/components/ui/search/search.js.map +1 -1
- package/dist/components/ui/sheet/sheet-details.js +16 -16
- package/dist/components/ui/sheet/sheet-details.js.map +1 -1
- package/dist/components/ui/spinner/spinner.js.map +1 -1
- package/dist/components/ui/timeline/timeline.js +175 -0
- package/dist/components/ui/timeline/timeline.js.map +1 -0
- package/dist/components/ui/toolbar/toolbar.js +82 -92
- package/dist/components/ui/toolbar/toolbar.js.map +1 -1
- package/dist/components/ui/treemap/treemap.js +83 -0
- package/dist/components/ui/treemap/treemap.js.map +1 -0
- package/dist/components/ui/trend-indicator/trend-indicator.js +97 -0
- package/dist/components/ui/trend-indicator/trend-indicator.js.map +1 -0
- package/dist/index.js +461 -400
- package/dist/index.js.map +1 -1
- package/dist/lib/breakpoints.js +9 -6
- package/dist/lib/breakpoints.js.map +1 -1
- package/dist/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.6/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js +25 -0
- package/dist/node_modules/.pnpm/embla-carousel-react@8.6.0_react@19.2.6/node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js.map +1 -0
- package/dist/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js +36 -0
- package/dist/node_modules/.pnpm/embla-carousel-reactive-utils@8.6.0_embla-carousel@8.6.0/node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js.map +1 -0
- package/dist/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js +1205 -0
- package/dist/node_modules/.pnpm/embla-carousel@8.6.0/node_modules/embla-carousel/esm/embla-carousel.esm.js.map +1 -0
- package/dist/react.js +461 -400
- package/dist/react.js.map +1 -1
- package/dist/src/components/ui/area-chart/area-chart.d.ts +34 -0
- package/dist/src/components/ui/area-chart/index.d.ts +1 -0
- package/dist/src/components/ui/avatar/avatar.d.ts +1 -1
- package/dist/src/components/ui/bar-chart/bar-chart.d.ts +30 -5
- package/dist/src/components/ui/bar-chart/index.d.ts +1 -1
- package/dist/src/components/ui/button-icon-input/button-icon-input.d.ts +21 -0
- package/dist/src/components/ui/button-icon-input/index.d.ts +1 -0
- package/dist/src/components/ui/card-filter/card-filter.d.ts +5 -0
- package/dist/src/components/ui/carousel-dialog/carousel-dialog.d.ts +28 -0
- package/dist/src/components/ui/carousel-dialog/index.d.ts +1 -0
- package/dist/src/components/ui/category-bar/category-bar.d.ts +51 -0
- package/dist/src/components/ui/category-bar/index.d.ts +1 -0
- package/dist/src/components/ui/chart/__tests__/chart-format.test.d.ts +1 -0
- package/dist/src/components/ui/chart/chart-format.d.ts +111 -0
- package/dist/src/components/ui/chart/chart.d.ts +2 -0
- package/dist/src/components/ui/chart/index.d.ts +3 -1
- package/dist/src/components/ui/chart-state/chart-state.d.ts +11 -0
- package/dist/src/components/ui/chart-state/index.d.ts +1 -0
- package/dist/src/components/ui/composed-chart/composed-chart.d.ts +33 -0
- package/dist/src/components/ui/composed-chart/index.d.ts +1 -0
- package/dist/src/components/ui/confidence-cone/confidence-cone.d.ts +62 -0
- package/dist/src/components/ui/confidence-cone/index.d.ts +1 -0
- package/dist/src/components/ui/dialog/dialog.d.ts +105 -9
- package/dist/src/components/ui/dialog/dialog.docs.d.ts +82 -5
- package/dist/src/components/ui/dialog/index.d.ts +1 -1
- package/dist/src/components/ui/dialog-footer-carousel/dialog-footer-carousel.d.ts +9 -0
- package/dist/src/components/ui/dialog-footer-carousel/index.d.ts +1 -0
- package/dist/src/components/ui/dialog-footer-default/dialog-footer-default.d.ts +11 -0
- package/dist/src/components/ui/dialog-footer-default/index.d.ts +1 -0
- package/dist/src/components/ui/dialog-welcome/dialog-welcome.d.ts +54 -0
- package/dist/src/components/ui/dialog-welcome/dialog-welcome.docs.d.ts +55 -0
- package/dist/src/components/ui/dialog-welcome/index.d.ts +1 -0
- package/dist/src/components/ui/filter-search/filter-search.d.ts +1 -1
- package/dist/src/components/ui/funnel-chart/funnel-chart.d.ts +39 -0
- package/dist/src/components/ui/funnel-chart/index.d.ts +1 -0
- package/dist/src/components/ui/histogram/histogram.d.ts +40 -0
- package/dist/src/components/ui/histogram/index.d.ts +1 -0
- package/dist/src/components/ui/input-otp/index.d.ts +1 -0
- package/dist/src/components/ui/input-otp/input-otp.d.ts +23 -0
- package/dist/src/components/ui/input-password/index.d.ts +1 -0
- package/dist/src/components/ui/input-password/input-password.d.ts +21 -0
- package/dist/src/components/ui/line-chart/index.d.ts +1 -0
- package/dist/src/components/ui/line-chart/line-chart.d.ts +68 -0
- package/dist/src/components/ui/loading/index.d.ts +1 -0
- package/dist/src/components/ui/loading/loading.d.ts +13 -0
- package/dist/src/components/ui/meter/index.d.ts +1 -0
- package/dist/src/components/ui/meter/meter.d.ts +25 -0
- package/dist/src/components/ui/metric/index.d.ts +1 -0
- package/dist/src/components/ui/metric/metric.d.ts +37 -0
- package/dist/src/components/ui/pie-chart/index.d.ts +1 -0
- package/dist/src/components/ui/pie-chart/pie-chart.d.ts +54 -0
- package/dist/src/components/ui/popover/index.d.ts +1 -1
- package/dist/src/components/ui/popover/popover.d.ts +13 -1
- package/dist/src/components/ui/radar-chart/index.d.ts +1 -0
- package/dist/src/components/ui/radar-chart/radar-chart.d.ts +40 -0
- package/dist/src/components/ui/radial-bar-chart/index.d.ts +1 -0
- package/dist/src/components/ui/radial-bar-chart/radial-bar-chart.d.ts +45 -0
- package/dist/src/components/ui/sankey-chart/index.d.ts +2 -0
- package/dist/src/components/ui/sankey-chart/sankey-chart.d.ts +69 -0
- package/dist/src/components/ui/scatter-chart/index.d.ts +1 -0
- package/dist/src/components/ui/scatter-chart/scatter-chart.d.ts +35 -0
- package/dist/src/components/ui/stack/stack.d.ts +1 -1
- package/dist/src/components/ui/timeline/index.d.ts +1 -0
- package/dist/src/components/ui/timeline/timeline.d.ts +41 -0
- package/dist/src/components/ui/treemap/index.d.ts +1 -0
- package/dist/src/components/ui/treemap/treemap.d.ts +44 -0
- package/dist/src/components/ui/trend-indicator/index.d.ts +1 -0
- package/dist/src/components/ui/trend-indicator/trend-indicator.d.ts +32 -0
- package/dist/src/index.d.ts +27 -2
- package/dist/ui-react.css +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { jsx as r, jsxs as u } from "react/jsx-runtime";
|
|
2
|
+
import * as x from "react";
|
|
3
|
+
import { Treemap as T } from "recharts";
|
|
4
|
+
import { cn as C } from "../../../lib/utils.js";
|
|
5
|
+
import { ChartContainer as h, ChartTooltip as v, ChartTooltipContent as N } from "../chart/chart.js";
|
|
6
|
+
function b({
|
|
7
|
+
x: o = 0,
|
|
8
|
+
y: l = 0,
|
|
9
|
+
width: t = 0,
|
|
10
|
+
height: a = 0,
|
|
11
|
+
name: e,
|
|
12
|
+
showLabels: s = !0
|
|
13
|
+
}) {
|
|
14
|
+
if (!e) return /* @__PURE__ */ r("g", {});
|
|
15
|
+
const i = s && t > 64 && a > 28;
|
|
16
|
+
return /* @__PURE__ */ u("g", { children: [
|
|
17
|
+
/* @__PURE__ */ r(
|
|
18
|
+
"rect",
|
|
19
|
+
{
|
|
20
|
+
x: o,
|
|
21
|
+
y: l,
|
|
22
|
+
width: t,
|
|
23
|
+
height: a,
|
|
24
|
+
strokeWidth: 2,
|
|
25
|
+
className: "stroke-background",
|
|
26
|
+
style: { fill: `var(--color-${e})` }
|
|
27
|
+
}
|
|
28
|
+
),
|
|
29
|
+
i && /* @__PURE__ */ r(
|
|
30
|
+
"text",
|
|
31
|
+
{
|
|
32
|
+
x: o + t / 2,
|
|
33
|
+
y: l + a / 2,
|
|
34
|
+
textAnchor: "middle",
|
|
35
|
+
dominantBaseline: "middle",
|
|
36
|
+
className: "fill-[var(--ui-text-on-status-strong-neutral)] text-xs",
|
|
37
|
+
children: e
|
|
38
|
+
}
|
|
39
|
+
)
|
|
40
|
+
] });
|
|
41
|
+
}
|
|
42
|
+
const k = x.forwardRef(
|
|
43
|
+
({
|
|
44
|
+
className: o,
|
|
45
|
+
config: l,
|
|
46
|
+
data: t,
|
|
47
|
+
dataKey: a,
|
|
48
|
+
nameKey: e,
|
|
49
|
+
aspectRatio: s = 4 / 3,
|
|
50
|
+
showLabels: i = !0,
|
|
51
|
+
showTooltip: c = !0,
|
|
52
|
+
tooltipContent: m,
|
|
53
|
+
...d
|
|
54
|
+
}, p) => {
|
|
55
|
+
const f = t.map((n) => ({
|
|
56
|
+
...n,
|
|
57
|
+
fill: `var(--color-${n[e]})`
|
|
58
|
+
}));
|
|
59
|
+
return /* @__PURE__ */ r("div", { ref: p, className: C(o), ...d, children: /* @__PURE__ */ r(h, { config: l, className: "size-full", children: /* @__PURE__ */ r(
|
|
60
|
+
T,
|
|
61
|
+
{
|
|
62
|
+
data: f,
|
|
63
|
+
dataKey: a,
|
|
64
|
+
nameKey: e,
|
|
65
|
+
aspectRatio: s,
|
|
66
|
+
isAnimationActive: !1,
|
|
67
|
+
content: /* @__PURE__ */ r(b, { showLabels: i }),
|
|
68
|
+
children: c && /* @__PURE__ */ r(
|
|
69
|
+
v,
|
|
70
|
+
{
|
|
71
|
+
content: m ?? /* @__PURE__ */ r(N, { nameKey: e, hideLabel: !0 })
|
|
72
|
+
}
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
) }) });
|
|
76
|
+
}
|
|
77
|
+
);
|
|
78
|
+
k.displayName = "Treemap";
|
|
79
|
+
export {
|
|
80
|
+
k as Treemap,
|
|
81
|
+
b as TreemapCell
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=treemap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treemap.js","sources":["../../../../src/components/ui/treemap/treemap.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Treemap as RechartsTreemap } from 'recharts';\n\nimport { cn } from '@/lib/utils';\nimport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n type ChartConfig,\n} from '../chart';\n\n// A typed recharts composition over the shared `Chart` primitives. A treemap is\n// the odd one out: a single `Treemap` element with no axes/grid/legend, themed\n// through a custom `content` cell renderer (recharts' default paints every cell\n// the same fill and has no token hooks). Like Scatter/Composed/RadialBar there's\n// no CVA variant — a treemap's knobs are geometry (`aspectRatio`) and the data,\n// not a visual \"mode\". v1 is a flat treemap (a list of leaves).\n\ninterface TreemapCellProps {\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n // recharts injects the node's resolved `name` (from nameKey) + value.\n name?: string;\n showLabels?: boolean;\n}\n\n// Cell renderer: fill each rect from its `--color-<name>` var, separate cells\n// with the surface color, and center a white label (readable over the saturated\n// series colors) when the cell is big enough. Passed to `Treemap.content`;\n// recharts clones it with each node's geometry + `name`.\nexport function TreemapCell({\n x = 0,\n y = 0,\n width = 0,\n height = 0,\n name,\n showLabels = true,\n}: TreemapCellProps) {\n // recharts invokes `content` for the synthetic root node too (full chart\n // dimensions, empty name). Skip any name-less node — otherwise its rect has no\n // `--color-<name>` fill and paints the SVG-default black behind everything\n // (invisible when leaves cover it, a black box on empty data).\n if (!name) return <g />;\n const canLabel = showLabels && width > 64 && height > 28;\n return (\n <g>\n <rect\n x={x}\n y={y}\n width={width}\n height={height}\n strokeWidth={2}\n className=\"stroke-background\"\n style={{ fill: `var(--color-${name})` }}\n />\n {canLabel && (\n <text\n x={x + width / 2}\n y={y + height / 2}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n // The design system's \"text on a strong colored surface\" token\n // (constant white in both themes) — reads over the saturated series\n // colors without hardcoding a color.\n className=\"fill-[var(--ui-text-on-status-strong-neutral)] text-xs\"\n >\n {name}\n </text>\n )}\n </g>\n );\n}\n\nexport interface TreemapProps\n extends Omit<React.ComponentProps<'div'>, 'children'> {\n /** Row-per-leaf data. Each object holds the leaf's `nameKey` label + its `dataKey` numeric size. */\n data: ReadonlyArray<Record<string, string | number>>;\n /**\n * Per-leaf map of `label` / `color`, keyed by the leaf's `nameKey` value\n * (imported from the shared `Chart` primitives). Turned into `--color-<name>`\n * custom properties. Colors are caller-supplied — reference an existing\n * semantic `--ui-*` token; there is no chart palette tier yet.\n */\n config: ChartConfig;\n /** Numeric field that sizes each leaf's rectangle. */\n dataKey: string;\n /**\n * Label field that names each leaf (drives the on-cell label, tooltip, and\n * `--color-<name>` lookup). Values should be unique and CSS-safe (they become\n * part of a custom-property name).\n */\n nameKey: string;\n /** Width-to-height ratio the tiling targets. */\n aspectRatio?: number;\n /** Render each leaf's name inside its cell (when it fits). */\n showLabels?: boolean;\n showTooltip?: boolean;\n /**\n * Replace the default tooltip. Pass a configured `ChartTooltipContent`\n * (imported from this library) — e.g. with a `formatter` / `labelFormatter` —\n * to customize formatting, per-cell rows, or extra fields without composing\n * recharts yourself. Ignored when `showTooltip` is false.\n */\n tooltipContent?: React.ComponentProps<typeof ChartTooltip>['content'];\n}\n\nconst Treemap = React.forwardRef<HTMLDivElement, TreemapProps>(\n (\n {\n className,\n config,\n data,\n dataKey,\n nameKey,\n aspectRatio = 4 / 3,\n showLabels = true,\n showTooltip = true,\n tooltipContent,\n ...props\n },\n ref\n ) => {\n // Stamp each row with its `fill` (the shadcn data-driven pattern) so a real\n // hover resolves the cell color in the tooltip — recharts' Treemap carries no\n // per-cell color on the tooltip payload item.\n const seriesData: Record<string, string | number>[] = data.map((row) => ({\n ...row,\n fill: `var(--color-${row[nameKey]})`,\n }));\n\n return (\n <div ref={ref} className={cn(className)} {...props}>\n <ChartContainer config={config} className=\"size-full\">\n <RechartsTreemap\n data={seriesData}\n dataKey={dataKey}\n nameKey={nameKey}\n aspectRatio={aspectRatio}\n isAnimationActive={false}\n content={<TreemapCell showLabels={showLabels} />}\n >\n {showTooltip && (\n <ChartTooltip\n content={\n tooltipContent ?? (\n <ChartTooltipContent nameKey={nameKey} hideLabel />\n )\n }\n />\n )}\n </RechartsTreemap>\n </ChartContainer>\n </div>\n );\n }\n);\nTreemap.displayName = 'Treemap';\n\nexport { Treemap };\n"],"names":["TreemapCell","x","y","width","height","name","showLabels","jsx","canLabel","Treemap","React","className","config","data","dataKey","nameKey","aspectRatio","showTooltip","tooltipContent","props","ref","seriesData","row","cn","ChartContainer","RechartsTreemap","ChartTooltip","ChartTooltipContent"],"mappings":";;;;;AAkCO,SAASA,EAAY;AAAA,EAC1B,GAAAC,IAAI;AAAA,EACJ,GAAAC,IAAI;AAAA,EACJ,OAAAC,IAAQ;AAAA,EACR,QAAAC,IAAS;AAAA,EACT,MAAAC;AAAA,EACA,YAAAC,IAAa;AACf,GAAqB;AAKnB,MAAI,CAACD,EAAM,QAAO,gBAAAE,EAAC,KAAA,CAAA,CAAE;AACrB,QAAMC,IAAWF,KAAcH,IAAQ,MAAMC,IAAS;AACtD,2BACG,KAAA,EACC,UAAA;AAAA,IAAA,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,GAAAN;AAAA,QACA,GAAAC;AAAA,QACA,OAAAC;AAAA,QACA,QAAAC;AAAA,QACA,aAAa;AAAA,QACb,WAAU;AAAA,QACV,OAAO,EAAE,MAAM,eAAeC,CAAI,IAAA;AAAA,MAAI;AAAA,IAAA;AAAA,IAEvCG,KACC,gBAAAD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,GAAGN,IAAIE,IAAQ;AAAA,QACf,GAAGD,IAAIE,IAAS;AAAA,QAChB,YAAW;AAAA,QACX,kBAAiB;AAAA,QAIjB,WAAU;AAAA,QAET,UAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GAEJ;AAEJ;AAmCA,MAAMI,IAAUC,EAAM;AAAA,EACpB,CACE;AAAA,IACE,WAAAC;AAAA,IACA,QAAAC;AAAA,IACA,MAAAC;AAAA,IACA,SAAAC;AAAA,IACA,SAAAC;AAAA,IACA,aAAAC,IAAc,IAAI;AAAA,IAClB,YAAAV,IAAa;AAAA,IACb,aAAAW,IAAc;AAAA,IACd,gBAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AAIH,UAAMC,IAAgDR,EAAK,IAAI,CAACS,OAAS;AAAA,MACvE,GAAGA;AAAA,MACH,MAAM,eAAeA,EAAIP,CAAO,CAAC;AAAA,IAAA,EACjC;AAEF,WACE,gBAAAR,EAAC,OAAA,EAAI,KAAAa,GAAU,WAAWG,EAAGZ,CAAS,GAAI,GAAGQ,GAC3C,UAAA,gBAAAZ,EAACiB,GAAA,EAAe,QAAAZ,GAAgB,WAAU,aACxC,UAAA,gBAAAL;AAAA,MAACkB;AAAAA,MAAA;AAAA,QACC,MAAMJ;AAAA,QACN,SAAAP;AAAA,QACA,SAAAC;AAAA,QACA,aAAAC;AAAA,QACA,mBAAmB;AAAA,QACnB,SAAS,gBAAAT,EAACP,GAAA,EAAY,YAAAM,EAAA,CAAwB;AAAA,QAE7C,UAAAW,KACC,gBAAAV;AAAA,UAACmB;AAAA,UAAA;AAAA,YACC,SACER,KACE,gBAAAX,EAACoB,GAAA,EAAoB,SAAAZ,GAAkB,WAAS,GAAA,CAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MAGvD;AAAA,IAAA,GAGN,EAAA,CACF;AAAA,EAEJ;AACF;AACAN,EAAQ,cAAc;"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { jsxs as c, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import * as u from "react";
|
|
3
|
+
import { cva as b } from "../../../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.js";
|
|
4
|
+
import { ArrowRightIcon as I, ArrowTrendDownIcon as N, ArrowTrendUpIcon as T } from "@acronis-platform/icons-react/stroke-mono";
|
|
5
|
+
import { cn as h } from "../../../lib/utils.js";
|
|
6
|
+
import { Tooltip as w, TooltipTrigger as k, TooltipContent as z } from "../tooltip/tooltip.js";
|
|
7
|
+
const R = b(
|
|
8
|
+
"inline-flex items-center align-middle font-medium [&_svg]:shrink-0",
|
|
9
|
+
{
|
|
10
|
+
variants: {
|
|
11
|
+
sentiment: {
|
|
12
|
+
positive: "text-[var(--ui-text-on-status-success)]",
|
|
13
|
+
negative: "text-[var(--ui-text-on-status-danger)]",
|
|
14
|
+
neutral: "text-[var(--ui-text-on-status-neutral)]"
|
|
15
|
+
},
|
|
16
|
+
size: {
|
|
17
|
+
small: "gap-0.5 text-xs [&_svg]:size-3.5",
|
|
18
|
+
medium: "gap-1 text-sm [&_svg]:size-4"
|
|
19
|
+
},
|
|
20
|
+
variant: {
|
|
21
|
+
inline: "",
|
|
22
|
+
badge: "rounded-sm px-1.5 py-0.5"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
// The badge tint pairs with the same status family as the text color.
|
|
26
|
+
compoundVariants: [
|
|
27
|
+
{
|
|
28
|
+
variant: "badge",
|
|
29
|
+
sentiment: "positive",
|
|
30
|
+
className: "bg-[var(--ui-background-status-success)]"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
variant: "badge",
|
|
34
|
+
sentiment: "negative",
|
|
35
|
+
className: "bg-[var(--ui-background-status-danger)]"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
variant: "badge",
|
|
39
|
+
sentiment: "neutral",
|
|
40
|
+
className: "bg-[var(--ui-background-status-neutral)]"
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
defaultVariants: {
|
|
44
|
+
sentiment: "neutral",
|
|
45
|
+
size: "medium",
|
|
46
|
+
variant: "inline"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
), _ = {
|
|
50
|
+
up: T,
|
|
51
|
+
down: N,
|
|
52
|
+
flat: I
|
|
53
|
+
}, y = u.forwardRef(
|
|
54
|
+
({
|
|
55
|
+
className: m,
|
|
56
|
+
direction: e,
|
|
57
|
+
sentiment: a,
|
|
58
|
+
size: g,
|
|
59
|
+
variant: p,
|
|
60
|
+
value: n,
|
|
61
|
+
comparisonLabel: r,
|
|
62
|
+
tooltip: s,
|
|
63
|
+
showIcon: v = !0,
|
|
64
|
+
ariaLabel: i,
|
|
65
|
+
...x
|
|
66
|
+
}, o) => {
|
|
67
|
+
const f = _[e], l = s != null, d = /* @__PURE__ */ c(
|
|
68
|
+
"span",
|
|
69
|
+
{
|
|
70
|
+
"data-direction": e,
|
|
71
|
+
"data-sentiment": a ?? "neutral",
|
|
72
|
+
className: h(
|
|
73
|
+
R({ sentiment: a, size: g, variant: p }),
|
|
74
|
+
m
|
|
75
|
+
),
|
|
76
|
+
...i ? { role: "img", "aria-label": i } : {},
|
|
77
|
+
tabIndex: l ? 0 : void 0,
|
|
78
|
+
...x,
|
|
79
|
+
children: [
|
|
80
|
+
v && /* @__PURE__ */ t(f, { "aria-hidden": !0, className: "rtl:-scale-x-100" }),
|
|
81
|
+
n != null && /* @__PURE__ */ t("span", { className: "tabular-nums", children: n }),
|
|
82
|
+
r != null && /* @__PURE__ */ t("span", { className: "text-[var(--ui-text-on-surface-secondary)]", children: r })
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
);
|
|
86
|
+
return l ? /* @__PURE__ */ c(w, { children: [
|
|
87
|
+
/* @__PURE__ */ t(k, { ref: o, render: d }),
|
|
88
|
+
/* @__PURE__ */ t(z, { children: s })
|
|
89
|
+
] }) : u.cloneElement(d, { ref: o });
|
|
90
|
+
}
|
|
91
|
+
);
|
|
92
|
+
y.displayName = "TrendIndicator";
|
|
93
|
+
export {
|
|
94
|
+
y as TrendIndicator,
|
|
95
|
+
R as trendIndicatorVariants
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=trend-indicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trend-indicator.js","sources":["../../../../src/components/ui/trend-indicator/trend-indicator.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport {\n ArrowRightIcon,\n ArrowTrendDownIcon,\n ArrowTrendUpIcon,\n} from '@acronis-platform/icons-react/stroke-mono';\n\nimport { cn } from '@/lib/utils';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip';\n\n// A small, presentational trend/delta indicator: a direction glyph + a\n// pre-formatted change value + an optional comparison label. It deliberately\n// separates `direction` (what happened mathematically) from `sentiment`\n// (whether that change is good or bad), because the kit can't assume up = good —\n// revenue ↑ is positive, threats ↑ is negative, MTTR ↓ is positive. The consumer\n// computes both and passes an already-formatted `value`; this component never\n// diffs two numbers, rounds, or interprets domain rules. Sentiment drives the\n// color through the semantic status text tokens (the glyph inherits via\n// `currentColor`), and the `badge` variant adds a matching status tint — no new\n// tokens.\nconst trendIndicatorVariants = cva(\n 'inline-flex items-center align-middle font-medium [&_svg]:shrink-0',\n {\n variants: {\n sentiment: {\n positive: 'text-[var(--ui-text-on-status-success)]',\n negative: 'text-[var(--ui-text-on-status-danger)]',\n neutral: 'text-[var(--ui-text-on-status-neutral)]',\n },\n size: {\n small: 'gap-0.5 text-xs [&_svg]:size-3.5',\n medium: 'gap-1 text-sm [&_svg]:size-4',\n },\n variant: {\n inline: '',\n badge: 'rounded-sm px-1.5 py-0.5',\n },\n },\n // The badge tint pairs with the same status family as the text color.\n compoundVariants: [\n {\n variant: 'badge',\n sentiment: 'positive',\n className: 'bg-[var(--ui-background-status-success)]',\n },\n {\n variant: 'badge',\n sentiment: 'negative',\n className: 'bg-[var(--ui-background-status-danger)]',\n },\n {\n variant: 'badge',\n sentiment: 'neutral',\n className: 'bg-[var(--ui-background-status-neutral)]',\n },\n ],\n defaultVariants: {\n sentiment: 'neutral',\n size: 'medium',\n variant: 'inline',\n },\n }\n);\n\n// `flat` uses a horizontal arrow (the \"no meaningful change\" glyph); up/down use\n// the trend arrows. All three carry a horizontal direction, so they mirror under\n// `dir=\"rtl\"` (`rtl:-scale-x-100`) to stay aligned with the mirrored text flow.\nconst DIRECTION_ICON = {\n up: ArrowTrendUpIcon,\n down: ArrowTrendDownIcon,\n flat: ArrowRightIcon,\n} as const;\n\nexport interface TrendIndicatorProps\n extends Omit<React.ComponentProps<'span'>, 'children'>,\n VariantProps<typeof trendIndicatorVariants> {\n /** What changed mathematically — selects the direction glyph. */\n direction: 'up' | 'down' | 'flat';\n /**\n * Already-formatted change to display — e.g. `\"12%\"`, `\"3.5 h\"`,\n * `\"Improving\"`, `\"4.2 h → 2.8 h\"`. The kit does not format or compute it.\n */\n value?: React.ReactNode;\n /** Secondary comparison caption — e.g. `\"vs previous quarter\"`, `\"YoY\"`. */\n comparisonLabel?: React.ReactNode;\n /** Contextual hint shown on hover/focus (Base UI Tooltip). */\n tooltip?: React.ReactNode;\n /** Show the leading direction glyph. Defaults to `true` — color alone isn't enough. */\n showIcon?: boolean;\n /**\n * Accessible sentence describing the trend (e.g. \"Revenue increased 12%\n * compared with the previous quarter\"). Applied as the element's label via\n * `role=\"img\"`, since the kit can't build a correct, localized sentence from\n * `direction` + `value` alone. Without it, assistive tech reads the visible\n * `value` / `comparisonLabel` text (the glyph is decorative).\n */\n ariaLabel?: string;\n}\n\nconst TrendIndicator = React.forwardRef<HTMLSpanElement, TrendIndicatorProps>(\n (\n {\n className,\n direction,\n sentiment,\n size,\n variant,\n value,\n comparisonLabel,\n tooltip,\n showIcon = true,\n ariaLabel,\n ...props\n },\n ref\n ) => {\n const Icon = DIRECTION_ICON[direction];\n const hasTooltip = tooltip != null;\n\n const root = (\n <span\n data-direction={direction}\n data-sentiment={sentiment ?? 'neutral'}\n className={cn(\n trendIndicatorVariants({ sentiment, size, variant }),\n className\n )}\n // With an explicit sentence, the whole unit is one labelled image and\n // the inner text/glyph is decorative; otherwise the visible text carries\n // the meaning and the glyph is hidden.\n {...(ariaLabel ? { role: 'img', 'aria-label': ariaLabel } : {})}\n // When it's a tooltip trigger, make it keyboard-reachable so the hint\n // isn't hover-only.\n tabIndex={hasTooltip ? 0 : undefined}\n {...props}\n >\n {showIcon && <Icon aria-hidden className=\"rtl:-scale-x-100\" />}\n {value != null && <span className=\"tabular-nums\">{value}</span>}\n {comparisonLabel != null && (\n <span className=\"text-[var(--ui-text-on-surface-secondary)]\">\n {comparisonLabel}\n </span>\n )}\n </span>\n );\n\n if (!hasTooltip) {\n return React.cloneElement(root, { ref });\n }\n\n return (\n <Tooltip>\n {/* Base UI's Trigger ref is typed to its default <button>; the trigger\n here is the span, so the runtime ref is that span. */}\n <TooltipTrigger ref={ref as React.Ref<HTMLButtonElement>} render={root} />\n <TooltipContent>{tooltip}</TooltipContent>\n </Tooltip>\n );\n }\n);\nTrendIndicator.displayName = 'TrendIndicator';\n\nexport { TrendIndicator, trendIndicatorVariants };\n"],"names":["trendIndicatorVariants","cva","DIRECTION_ICON","ArrowTrendUpIcon","ArrowTrendDownIcon","ArrowRightIcon","TrendIndicator","React","className","direction","sentiment","size","variant","value","comparisonLabel","tooltip","showIcon","ariaLabel","props","ref","Icon","hasTooltip","root","jsxs","cn","jsx","Tooltip","TooltipTrigger","TooltipContent"],"mappings":";;;;;;AAuBA,MAAMA,IAAyBC;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,WAAW;AAAA,QACT,UAAU;AAAA,QACV,UAAU;AAAA,QACV,SAAS;AAAA,MAAA;AAAA,MAEX,MAAM;AAAA,QACJ,OAAO;AAAA,QACP,QAAQ;AAAA,MAAA;AAAA,MAEV,SAAS;AAAA,QACP,QAAQ;AAAA,QACR,OAAO;AAAA,MAAA;AAAA,IACT;AAAA;AAAA,IAGF,kBAAkB;AAAA,MAChB;AAAA,QACE,SAAS;AAAA,QACT,WAAW;AAAA,QACX,WAAW;AAAA,MAAA;AAAA,MAEb;AAAA,QACE,SAAS;AAAA,QACT,WAAW;AAAA,QACX,WAAW;AAAA,MAAA;AAAA,MAEb;AAAA,QACE,SAAS;AAAA,QACT,WAAW;AAAA,QACX,WAAW;AAAA,MAAA;AAAA,IACb;AAAA,IAEF,iBAAiB;AAAA,MACf,WAAW;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ,GAKMC,IAAiB;AAAA,EACrB,IAAIC;AAAA,EACJ,MAAMC;AAAA,EACN,MAAMC;AACR,GA4BMC,IAAiBC,EAAM;AAAA,EAC3B,CACE;AAAA,IACE,WAAAC;AAAA,IACA,WAAAC;AAAA,IACA,WAAAC;AAAA,IACA,MAAAC;AAAA,IACA,SAAAC;AAAA,IACA,OAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,SAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,WAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAMC,IAAOlB,EAAeO,CAAS,GAC/BY,IAAaN,KAAW,MAExBO,IACJ,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,kBAAgBd;AAAA,QAChB,kBAAgBC,KAAa;AAAA,QAC7B,WAAWc;AAAA,UACTxB,EAAuB,EAAE,WAAAU,GAAW,MAAAC,GAAM,SAAAC,GAAS;AAAA,UACnDJ;AAAA,QAAA;AAAA,QAKD,GAAIS,IAAY,EAAE,MAAM,OAAO,cAAcA,EAAA,IAAc,CAAA;AAAA,QAG5D,UAAUI,IAAa,IAAI;AAAA,QAC1B,GAAGH;AAAA,QAEH,UAAA;AAAA,UAAAF,KAAY,gBAAAS,EAACL,GAAA,EAAK,eAAW,IAAC,WAAU,oBAAmB;AAAA,UAC3DP,KAAS,QAAQ,gBAAAY,EAAC,QAAA,EAAK,WAAU,gBAAgB,UAAAZ,GAAM;AAAA,UACvDC,KAAmB,QAClB,gBAAAW,EAAC,QAAA,EAAK,WAAU,8CACb,UAAAX,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAKN,WAAKO,sBAKFK,GAAA,EAGC,UAAA;AAAA,MAAA,gBAAAD,EAACE,GAAA,EAAe,KAAAR,GAA0C,QAAQG,EAAA,CAAM;AAAA,MACxE,gBAAAG,EAACG,KAAgB,UAAAb,EAAA,CAAQ;AAAA,IAAA,GAC3B,IATOR,EAAM,aAAae,GAAM,EAAE,KAAAH,GAAK;AAAA,EAW3C;AACF;AACAb,EAAe,cAAc;"}
|