@parto-system-design/ui 1.1.18 → 1.1.20
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/alert-rule-card.d.cts +1 -1
- package/dist/components/ui/alert-rule-card.d.ts +1 -1
- package/dist/components/ui/button.d.cts +3 -3
- package/dist/components/ui/button.d.ts +3 -3
- package/dist/components/ui/concept-card.cjs +40 -12
- package/dist/components/ui/concept-card.d.cts +2 -2
- package/dist/components/ui/concept-card.d.ts +2 -2
- package/dist/components/ui/concept-card.js +40 -12
- package/dist/components/ui/page-card.d.cts +2 -2
- package/dist/components/ui/page-card.d.ts +2 -2
- package/dist/components/ui/skeleton.d.cts +1 -1
- package/dist/components/ui/skeleton.d.ts +1 -1
- package/dist/{concept-card-D7PfDkNR.d.ts → concept-card-DX5zRCk2.d.ts} +15 -4
- package/dist/{concept-card-BU8JL-gj.d.cts → concept-card-dZeBeup5.d.cts} +15 -4
- package/dist/{i18n-DD3DMY8O.d.cts → i18n-B4rvgH-T.d.cts} +1 -1
- package/dist/{i18n-UEClNsBy.d.ts → i18n-CZQ2kPWD.d.ts} +1 -1
- package/dist/index.cjs +27 -12
- package/dist/index.d.cts +8 -8
- package/dist/index.d.ts +8 -8
- package/dist/index.js +27 -12
- package/dist/{page-card-sIE4lvnb.d.ts → page-card-CU6_AmNR.d.ts} +1 -1
- package/dist/{page-card-DjztZrFM.d.cts → page-card-DWBUZYwM.d.cts} +1 -1
- package/dist/{server-FTUA8opZ.d.cts → server-BxuDPPiW.d.cts} +1 -1
- package/dist/{server-m6tiB6DB.d.ts → server-Cfw5kIug.d.ts} +1 -1
- package/dist/server.d.cts +2 -2
- package/dist/server.d.ts +2 -2
- package/package.json +1 -1
|
@@ -4,15 +4,15 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
4
4
|
|
|
5
5
|
type ButtonVariantProps = VariantProps<typeof buttonVariants>;
|
|
6
6
|
declare const buttonVariants: (props?: ({
|
|
7
|
-
variant?: "link" | "
|
|
7
|
+
variant?: "link" | "text" | "warning" | "default" | "outline" | "dashed" | "destructive" | "primary" | "secondary" | "danger" | "ghost" | null | undefined;
|
|
8
8
|
block?: boolean | null | undefined;
|
|
9
|
-
size?: "xs" | "sm" | "md" | "lg" | "xl" | "default" | "icon
|
|
9
|
+
size?: "icon" | "xs" | "sm" | "md" | "lg" | "xl" | "default" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
|
|
10
10
|
disabled?: boolean | null | undefined;
|
|
11
11
|
rounded?: boolean | null | undefined;
|
|
12
12
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
13
13
|
type LoadingVariantProps = VariantProps<typeof loadingVariants>;
|
|
14
14
|
declare const loadingVariants: (props?: ({
|
|
15
|
-
variant?: "link" | "
|
|
15
|
+
variant?: "link" | "text" | "warning" | "default" | "outline" | "dashed" | "destructive" | "primary" | "secondary" | "danger" | "ghost" | null | undefined;
|
|
16
16
|
loading?: boolean | "default" | null | undefined;
|
|
17
17
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
18
18
|
interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'>, Omit<ButtonVariantProps, 'disabled'>, Omit<LoadingVariantProps, 'variant'> {
|
|
@@ -4,15 +4,15 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
4
4
|
|
|
5
5
|
type ButtonVariantProps = VariantProps<typeof buttonVariants>;
|
|
6
6
|
declare const buttonVariants: (props?: ({
|
|
7
|
-
variant?: "link" | "
|
|
7
|
+
variant?: "link" | "text" | "warning" | "default" | "outline" | "dashed" | "destructive" | "primary" | "secondary" | "danger" | "ghost" | null | undefined;
|
|
8
8
|
block?: boolean | null | undefined;
|
|
9
|
-
size?: "xs" | "sm" | "md" | "lg" | "xl" | "default" | "icon
|
|
9
|
+
size?: "icon" | "xs" | "sm" | "md" | "lg" | "xl" | "default" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
|
|
10
10
|
disabled?: boolean | null | undefined;
|
|
11
11
|
rounded?: boolean | null | undefined;
|
|
12
12
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
13
13
|
type LoadingVariantProps = VariantProps<typeof loadingVariants>;
|
|
14
14
|
declare const loadingVariants: (props?: ({
|
|
15
|
-
variant?: "link" | "
|
|
15
|
+
variant?: "link" | "text" | "warning" | "default" | "outline" | "dashed" | "destructive" | "primary" | "secondary" | "danger" | "ghost" | null | undefined;
|
|
16
16
|
loading?: boolean | "default" | null | undefined;
|
|
17
17
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
18
18
|
interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'>, Omit<ButtonVariantProps, 'disabled'>, Omit<LoadingVariantProps, 'variant'> {
|
|
@@ -127,7 +127,14 @@ var flowLabels = {
|
|
|
127
127
|
grey: "Grey"
|
|
128
128
|
}
|
|
129
129
|
};
|
|
130
|
-
|
|
130
|
+
var FLOW_VALUE_MAP = {
|
|
131
|
+
1: "pro-gov",
|
|
132
|
+
2: "internal-critic",
|
|
133
|
+
3: "internal-opponent",
|
|
134
|
+
4: "external-opponent",
|
|
135
|
+
5: "grey"
|
|
136
|
+
};
|
|
137
|
+
var FLOW_LABEL_LOOKUP = (() => {
|
|
131
138
|
const map = {};
|
|
132
139
|
for (const key of FLOW_KEYS) map[key] = key;
|
|
133
140
|
for (const locale of Object.keys(flowLabels)) {
|
|
@@ -137,6 +144,14 @@ var flowLabels = {
|
|
|
137
144
|
}
|
|
138
145
|
return map;
|
|
139
146
|
})();
|
|
147
|
+
function resolveFlow(input) {
|
|
148
|
+
if (input == null) return null;
|
|
149
|
+
if (typeof input === "number") return FLOW_VALUE_MAP[input] ?? null;
|
|
150
|
+
const raw = String(input).trim();
|
|
151
|
+
if (raw === "") return null;
|
|
152
|
+
if (/^\d+$/.test(raw)) return FLOW_VALUE_MAP[Number(raw)] ?? null;
|
|
153
|
+
return FLOW_LABEL_LOOKUP[raw.toLowerCase()] ?? null;
|
|
154
|
+
}
|
|
140
155
|
var STATUS_KEYS = ["critical", "warning", "middle", "low"];
|
|
141
156
|
var statusLabels = {
|
|
142
157
|
fa: { critical: "\u0628\u062D\u0631\u0627\u0646\u06CC", warning: "\u0647\u0634\u062F\u0627\u0631", middle: "\u0645\u062A\u0648\u0633\u0637", low: "\u067E\u0627\u06CC\u06CC\u0646" },
|
|
@@ -309,12 +324,24 @@ var SeverityBadge = React__namespace.forwardRef(
|
|
|
309
324
|
}
|
|
310
325
|
);
|
|
311
326
|
SeverityBadge.displayName = "SeverityBadge";
|
|
312
|
-
function
|
|
313
|
-
const
|
|
327
|
+
function normalizeFlowData(data) {
|
|
328
|
+
const counts = Object.fromEntries(FLOW_KEYS.map((k) => [k, 0]));
|
|
329
|
+
if (Array.isArray(data)) {
|
|
330
|
+
for (const item of data) {
|
|
331
|
+
const key = resolveFlow(item.type);
|
|
332
|
+
if (key) counts[key] += item.value ?? 0;
|
|
333
|
+
}
|
|
334
|
+
} else {
|
|
335
|
+
for (const k of FLOW_KEYS) counts[k] = data[k] ?? 0;
|
|
336
|
+
}
|
|
337
|
+
return counts;
|
|
338
|
+
}
|
|
339
|
+
function calcPercents(counts) {
|
|
340
|
+
const total = FLOW_KEYS.reduce((s, k) => s + counts[k], 0);
|
|
314
341
|
const result = Object.fromEntries(FLOW_KEYS.map((k) => [k, 0]));
|
|
315
342
|
if (total === 0) return result;
|
|
316
|
-
const floats = FLOW_KEYS.filter((k) =>
|
|
317
|
-
const v =
|
|
343
|
+
const floats = FLOW_KEYS.filter((k) => counts[k] > 0).map((k) => {
|
|
344
|
+
const v = counts[k] / total * 100;
|
|
318
345
|
return { k, floor: Math.floor(v), rem: v - Math.floor(v) };
|
|
319
346
|
});
|
|
320
347
|
const remaining = 100 - floats.reduce((s, f) => s + f.floor, 0);
|
|
@@ -345,7 +372,8 @@ var FlowDistribution = React__namespace.forwardRef(
|
|
|
345
372
|
...props
|
|
346
373
|
}, ref) => {
|
|
347
374
|
const labels = flowLabels[locale] ?? flowLabels.fa;
|
|
348
|
-
const
|
|
375
|
+
const counts = normalizeFlowData(data);
|
|
376
|
+
const percents = calcPercents(counts);
|
|
349
377
|
const percentSign = locale === "en" ? "%" : "\u066A";
|
|
350
378
|
if (isLoading) {
|
|
351
379
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, "data-slot": "flow-distribution", className: cn("space-y-2", className), ...props, children: variant === "stacked" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-3 w-full rounded-full bg-muted animate-pulse" }) : variant === "compact" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-5 w-20 rounded-full bg-muted animate-pulse" }, i)) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
@@ -355,7 +383,7 @@ var FlowDistribution = React__namespace.forwardRef(
|
|
|
355
383
|
] }, i)) }) });
|
|
356
384
|
}
|
|
357
385
|
if (variant === "stacked") {
|
|
358
|
-
const active = STACKED_ORDER.filter((k) =>
|
|
386
|
+
const active = STACKED_ORDER.filter((k) => counts[k] > 0);
|
|
359
387
|
const srLabel = active.map((k) => `${labels[k]} ${convertToLocalNumbers(percents[k], locale)}${percentSign}`).join("\u060C ");
|
|
360
388
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, "data-slot": "flow-distribution", className: cn("space-y-2", className), ...props, children: [
|
|
361
389
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-3 w-full overflow-hidden rounded-full bg-muted", role: "img", "aria-label": srLabel, children: active.map((k) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -381,14 +409,14 @@ var FlowDistribution = React__namespace.forwardRef(
|
|
|
381
409
|
] }),
|
|
382
410
|
showCounts && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-foreground-muted tabular-nums", children: [
|
|
383
411
|
"(",
|
|
384
|
-
convertToLocalNumbers(
|
|
412
|
+
convertToLocalNumbers(counts[k], locale),
|
|
385
413
|
")"
|
|
386
414
|
] })
|
|
387
415
|
] }, k)) })
|
|
388
416
|
] });
|
|
389
417
|
}
|
|
390
418
|
if (variant === "compact") {
|
|
391
|
-
const active = FLOW_KEYS.filter((k) =>
|
|
419
|
+
const active = FLOW_KEYS.filter((k) => counts[k] > 0).sort((a, b) => counts[b] - counts[a]);
|
|
392
420
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
393
421
|
"div",
|
|
394
422
|
{
|
|
@@ -412,7 +440,7 @@ var FlowDistribution = React__namespace.forwardRef(
|
|
|
412
440
|
] }),
|
|
413
441
|
showCounts && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-foreground-muted tabular-nums", children: [
|
|
414
442
|
"(",
|
|
415
|
-
convertToLocalNumbers(
|
|
443
|
+
convertToLocalNumbers(counts[k], locale),
|
|
416
444
|
")"
|
|
417
445
|
] })
|
|
418
446
|
]
|
|
@@ -422,7 +450,7 @@ var FlowDistribution = React__namespace.forwardRef(
|
|
|
422
450
|
}
|
|
423
451
|
);
|
|
424
452
|
}
|
|
425
|
-
const sorted = FLOW_KEYS.filter((k) =>
|
|
453
|
+
const sorted = FLOW_KEYS.filter((k) => counts[k] > 0).sort((a, b) => counts[b] - counts[a]);
|
|
426
454
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, "data-slot": "flow-distribution", className: cn("space-y-1.5", className), ...props, children: sorted.map((k) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
427
455
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-24 shrink-0 text-xs text-foreground-light text-end", children: labels[k] }),
|
|
428
456
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative flex-1 h-2 rounded-full bg-muted overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -445,7 +473,7 @@ var FlowDistribution = React__namespace.forwardRef(
|
|
|
445
473
|
{
|
|
446
474
|
className: "w-12 shrink-0 text-xs font-medium tabular-nums text-start",
|
|
447
475
|
style: { color: `var(${tokenVar3(k)})` },
|
|
448
|
-
children: showCounts ? convertToLocalNumbers(
|
|
476
|
+
children: showCounts ? convertToLocalNumbers(counts[k].toLocaleString(), locale) : `${convertToLocalNumbers(percents[k], locale)}${percentSign}`
|
|
449
477
|
}
|
|
450
478
|
)
|
|
451
479
|
] }, k)) });
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import 'react';
|
|
2
2
|
import '../../utils-Czyp5Ned.cjs';
|
|
3
|
-
export { C as ConceptCard, a as ConceptCardProps } from '../../concept-card-
|
|
4
|
-
import '../../i18n-
|
|
3
|
+
export { C as ConceptCard, a as ConceptCardProps } from '../../concept-card-dZeBeup5.cjs';
|
|
4
|
+
import '../../i18n-B4rvgH-T.cjs';
|
|
5
5
|
import 'clsx';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import 'react';
|
|
2
2
|
import '../../utils-Czyp5Ned.js';
|
|
3
|
-
export { C as ConceptCard, a as ConceptCardProps } from '../../concept-card-
|
|
4
|
-
import '../../i18n-
|
|
3
|
+
export { C as ConceptCard, a as ConceptCardProps } from '../../concept-card-DX5zRCk2.js';
|
|
4
|
+
import '../../i18n-CZQ2kPWD.js';
|
|
5
5
|
import 'clsx';
|
|
@@ -104,7 +104,14 @@ var flowLabels = {
|
|
|
104
104
|
grey: "Grey"
|
|
105
105
|
}
|
|
106
106
|
};
|
|
107
|
-
|
|
107
|
+
var FLOW_VALUE_MAP = {
|
|
108
|
+
1: "pro-gov",
|
|
109
|
+
2: "internal-critic",
|
|
110
|
+
3: "internal-opponent",
|
|
111
|
+
4: "external-opponent",
|
|
112
|
+
5: "grey"
|
|
113
|
+
};
|
|
114
|
+
var FLOW_LABEL_LOOKUP = (() => {
|
|
108
115
|
const map = {};
|
|
109
116
|
for (const key of FLOW_KEYS) map[key] = key;
|
|
110
117
|
for (const locale of Object.keys(flowLabels)) {
|
|
@@ -114,6 +121,14 @@ var flowLabels = {
|
|
|
114
121
|
}
|
|
115
122
|
return map;
|
|
116
123
|
})();
|
|
124
|
+
function resolveFlow(input) {
|
|
125
|
+
if (input == null) return null;
|
|
126
|
+
if (typeof input === "number") return FLOW_VALUE_MAP[input] ?? null;
|
|
127
|
+
const raw = String(input).trim();
|
|
128
|
+
if (raw === "") return null;
|
|
129
|
+
if (/^\d+$/.test(raw)) return FLOW_VALUE_MAP[Number(raw)] ?? null;
|
|
130
|
+
return FLOW_LABEL_LOOKUP[raw.toLowerCase()] ?? null;
|
|
131
|
+
}
|
|
117
132
|
var STATUS_KEYS = ["critical", "warning", "middle", "low"];
|
|
118
133
|
var statusLabels = {
|
|
119
134
|
fa: { critical: "\u0628\u062D\u0631\u0627\u0646\u06CC", warning: "\u0647\u0634\u062F\u0627\u0631", middle: "\u0645\u062A\u0648\u0633\u0637", low: "\u067E\u0627\u06CC\u06CC\u0646" },
|
|
@@ -286,12 +301,24 @@ var SeverityBadge = React.forwardRef(
|
|
|
286
301
|
}
|
|
287
302
|
);
|
|
288
303
|
SeverityBadge.displayName = "SeverityBadge";
|
|
289
|
-
function
|
|
290
|
-
const
|
|
304
|
+
function normalizeFlowData(data) {
|
|
305
|
+
const counts = Object.fromEntries(FLOW_KEYS.map((k) => [k, 0]));
|
|
306
|
+
if (Array.isArray(data)) {
|
|
307
|
+
for (const item of data) {
|
|
308
|
+
const key = resolveFlow(item.type);
|
|
309
|
+
if (key) counts[key] += item.value ?? 0;
|
|
310
|
+
}
|
|
311
|
+
} else {
|
|
312
|
+
for (const k of FLOW_KEYS) counts[k] = data[k] ?? 0;
|
|
313
|
+
}
|
|
314
|
+
return counts;
|
|
315
|
+
}
|
|
316
|
+
function calcPercents(counts) {
|
|
317
|
+
const total = FLOW_KEYS.reduce((s, k) => s + counts[k], 0);
|
|
291
318
|
const result = Object.fromEntries(FLOW_KEYS.map((k) => [k, 0]));
|
|
292
319
|
if (total === 0) return result;
|
|
293
|
-
const floats = FLOW_KEYS.filter((k) =>
|
|
294
|
-
const v =
|
|
320
|
+
const floats = FLOW_KEYS.filter((k) => counts[k] > 0).map((k) => {
|
|
321
|
+
const v = counts[k] / total * 100;
|
|
295
322
|
return { k, floor: Math.floor(v), rem: v - Math.floor(v) };
|
|
296
323
|
});
|
|
297
324
|
const remaining = 100 - floats.reduce((s, f) => s + f.floor, 0);
|
|
@@ -322,7 +349,8 @@ var FlowDistribution = React.forwardRef(
|
|
|
322
349
|
...props
|
|
323
350
|
}, ref) => {
|
|
324
351
|
const labels = flowLabels[locale] ?? flowLabels.fa;
|
|
325
|
-
const
|
|
352
|
+
const counts = normalizeFlowData(data);
|
|
353
|
+
const percents = calcPercents(counts);
|
|
326
354
|
const percentSign = locale === "en" ? "%" : "\u066A";
|
|
327
355
|
if (isLoading) {
|
|
328
356
|
return /* @__PURE__ */ jsx("div", { ref, "data-slot": "flow-distribution", className: cn("space-y-2", className), ...props, children: variant === "stacked" ? /* @__PURE__ */ jsx("div", { className: "h-3 w-full rounded-full bg-muted animate-pulse" }) : variant === "compact" ? /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx("div", { className: "h-5 w-20 rounded-full bg-muted animate-pulse" }, i)) }) : /* @__PURE__ */ jsx("div", { className: "space-y-2", children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
@@ -332,7 +360,7 @@ var FlowDistribution = React.forwardRef(
|
|
|
332
360
|
] }, i)) }) });
|
|
333
361
|
}
|
|
334
362
|
if (variant === "stacked") {
|
|
335
|
-
const active = STACKED_ORDER.filter((k) =>
|
|
363
|
+
const active = STACKED_ORDER.filter((k) => counts[k] > 0);
|
|
336
364
|
const srLabel = active.map((k) => `${labels[k]} ${convertToLocalNumbers(percents[k], locale)}${percentSign}`).join("\u060C ");
|
|
337
365
|
return /* @__PURE__ */ jsxs("div", { ref, "data-slot": "flow-distribution", className: cn("space-y-2", className), ...props, children: [
|
|
338
366
|
/* @__PURE__ */ jsx("div", { className: "flex h-3 w-full overflow-hidden rounded-full bg-muted", role: "img", "aria-label": srLabel, children: active.map((k) => /* @__PURE__ */ jsx(
|
|
@@ -358,14 +386,14 @@ var FlowDistribution = React.forwardRef(
|
|
|
358
386
|
] }),
|
|
359
387
|
showCounts && /* @__PURE__ */ jsxs("span", { className: "text-xs text-foreground-muted tabular-nums", children: [
|
|
360
388
|
"(",
|
|
361
|
-
convertToLocalNumbers(
|
|
389
|
+
convertToLocalNumbers(counts[k], locale),
|
|
362
390
|
")"
|
|
363
391
|
] })
|
|
364
392
|
] }, k)) })
|
|
365
393
|
] });
|
|
366
394
|
}
|
|
367
395
|
if (variant === "compact") {
|
|
368
|
-
const active = FLOW_KEYS.filter((k) =>
|
|
396
|
+
const active = FLOW_KEYS.filter((k) => counts[k] > 0).sort((a, b) => counts[b] - counts[a]);
|
|
369
397
|
return /* @__PURE__ */ jsx(
|
|
370
398
|
"div",
|
|
371
399
|
{
|
|
@@ -389,7 +417,7 @@ var FlowDistribution = React.forwardRef(
|
|
|
389
417
|
] }),
|
|
390
418
|
showCounts && /* @__PURE__ */ jsxs("span", { className: "text-xs text-foreground-muted tabular-nums", children: [
|
|
391
419
|
"(",
|
|
392
|
-
convertToLocalNumbers(
|
|
420
|
+
convertToLocalNumbers(counts[k], locale),
|
|
393
421
|
")"
|
|
394
422
|
] })
|
|
395
423
|
]
|
|
@@ -399,7 +427,7 @@ var FlowDistribution = React.forwardRef(
|
|
|
399
427
|
}
|
|
400
428
|
);
|
|
401
429
|
}
|
|
402
|
-
const sorted = FLOW_KEYS.filter((k) =>
|
|
430
|
+
const sorted = FLOW_KEYS.filter((k) => counts[k] > 0).sort((a, b) => counts[b] - counts[a]);
|
|
403
431
|
return /* @__PURE__ */ jsx("div", { ref, "data-slot": "flow-distribution", className: cn("space-y-1.5", className), ...props, children: sorted.map((k) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
404
432
|
/* @__PURE__ */ jsx("span", { className: "w-24 shrink-0 text-xs text-foreground-light text-end", children: labels[k] }),
|
|
405
433
|
/* @__PURE__ */ jsx("div", { className: "relative flex-1 h-2 rounded-full bg-muted overflow-hidden", children: /* @__PURE__ */ jsx(
|
|
@@ -422,7 +450,7 @@ var FlowDistribution = React.forwardRef(
|
|
|
422
450
|
{
|
|
423
451
|
className: "w-12 shrink-0 text-xs font-medium tabular-nums text-start",
|
|
424
452
|
style: { color: `var(${tokenVar3(k)})` },
|
|
425
|
-
children: showCounts ? convertToLocalNumbers(
|
|
453
|
+
children: showCounts ? convertToLocalNumbers(counts[k].toLocaleString(), locale) : `${convertToLocalNumbers(percents[k], locale)}${percentSign}`
|
|
426
454
|
}
|
|
427
455
|
)
|
|
428
456
|
] }, k)) });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import 'react';
|
|
2
2
|
import '../../utils-Czyp5Ned.cjs';
|
|
3
3
|
import './social-platform-badge.cjs';
|
|
4
|
-
export { P as PageCard, d as PageCardContentMix, e as PageCardProps } from '../../page-card-
|
|
5
|
-
import '../../i18n-
|
|
4
|
+
export { P as PageCard, d as PageCardContentMix, e as PageCardProps } from '../../page-card-DWBUZYwM.cjs';
|
|
5
|
+
import '../../i18n-B4rvgH-T.cjs';
|
|
6
6
|
import 'clsx';
|
|
7
7
|
import 'class-variance-authority/types';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import 'react';
|
|
2
2
|
import '../../utils-Czyp5Ned.js';
|
|
3
3
|
import './social-platform-badge.js';
|
|
4
|
-
export { P as PageCard, d as PageCardContentMix, e as PageCardProps } from '../../page-card-
|
|
5
|
-
import '../../i18n-
|
|
4
|
+
export { P as PageCard, d as PageCardContentMix, e as PageCardProps } from '../../page-card-CU6_AmNR.js';
|
|
5
|
+
import '../../i18n-CZQ2kPWD.js';
|
|
6
6
|
import 'clsx';
|
|
7
7
|
import 'class-variance-authority/types';
|
|
@@ -3,7 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import { VariantProps } from 'class-variance-authority';
|
|
4
4
|
|
|
5
5
|
declare const skeletonVariants: (props?: ({
|
|
6
|
-
shape?: "
|
|
6
|
+
shape?: "text" | "circle" | "rect" | "line" | null | undefined;
|
|
7
7
|
size?: "sm" | "md" | "lg" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof skeletonVariants> {
|
|
@@ -3,7 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import { VariantProps } from 'class-variance-authority';
|
|
4
4
|
|
|
5
5
|
declare const skeletonVariants: (props?: ({
|
|
6
|
-
shape?: "
|
|
6
|
+
shape?: "text" | "circle" | "rect" | "line" | null | undefined;
|
|
7
7
|
size?: "sm" | "md" | "lg" | null | undefined;
|
|
8
8
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
9
9
|
interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof skeletonVariants> {
|
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { S as SupportedLocale } from './utils-Czyp5Ned.js';
|
|
3
|
-
import { F as FlowKey, a as StatusKey, S as SeverityKey } from './i18n-
|
|
3
|
+
import { F as FlowInput, b as FlowKey, a as StatusKey, S as SeverityKey } from './i18n-CZQ2kPWD.js';
|
|
4
4
|
|
|
5
|
-
type
|
|
5
|
+
/** A single flow entry: `type` accepts a key, a numeric code `1–5`, or a label. */
|
|
6
|
+
interface FlowDataItem {
|
|
7
|
+
/** Flow identity — `FlowKey` (`'pro-gov'`…), numeric code `1–5`, or localized label. */
|
|
8
|
+
type: FlowInput;
|
|
9
|
+
/** Numeric count for this flow. */
|
|
10
|
+
value: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Flow counts. Either an array of `{ type, value }` entries (type as a key,
|
|
14
|
+
* a numeric code `1–5`, or a label) or a keyed object `{ 'pro-gov': 420, … }`.
|
|
15
|
+
*/
|
|
16
|
+
type FlowData = FlowDataItem[] | Partial<Record<FlowKey, number>>;
|
|
6
17
|
interface FlowDistributionProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
7
|
-
/** Flow counts (auto-normalized). Missing
|
|
18
|
+
/** Flow counts (auto-normalized). Missing flows treated as 0. */
|
|
8
19
|
data: FlowData;
|
|
9
20
|
/** Display mode */
|
|
10
21
|
variant?: 'bars' | 'stacked' | 'compact';
|
|
@@ -80,4 +91,4 @@ interface ConceptCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 't
|
|
|
80
91
|
}
|
|
81
92
|
declare const ConceptCard: React.ForwardRefExoticComponent<ConceptCardProps & React.RefAttributes<HTMLDivElement>>;
|
|
82
93
|
|
|
83
|
-
export { ConceptCard as C, type FlowData as F, type SentimentData as S, type ConceptCardProps as a,
|
|
94
|
+
export { ConceptCard as C, type FlowData as F, type SentimentData as S, type ConceptCardProps as a, type FlowDataItem as b, FlowDistribution as c, type FlowDistributionProps as d, SentimentDistribution as e, type SentimentDistributionProps as f };
|
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { S as SupportedLocale } from './utils-Czyp5Ned.cjs';
|
|
3
|
-
import { F as FlowKey, a as StatusKey, S as SeverityKey } from './i18n-
|
|
3
|
+
import { F as FlowInput, b as FlowKey, a as StatusKey, S as SeverityKey } from './i18n-B4rvgH-T.cjs';
|
|
4
4
|
|
|
5
|
-
type
|
|
5
|
+
/** A single flow entry: `type` accepts a key, a numeric code `1–5`, or a label. */
|
|
6
|
+
interface FlowDataItem {
|
|
7
|
+
/** Flow identity — `FlowKey` (`'pro-gov'`…), numeric code `1–5`, or localized label. */
|
|
8
|
+
type: FlowInput;
|
|
9
|
+
/** Numeric count for this flow. */
|
|
10
|
+
value: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Flow counts. Either an array of `{ type, value }` entries (type as a key,
|
|
14
|
+
* a numeric code `1–5`, or a label) or a keyed object `{ 'pro-gov': 420, … }`.
|
|
15
|
+
*/
|
|
16
|
+
type FlowData = FlowDataItem[] | Partial<Record<FlowKey, number>>;
|
|
6
17
|
interface FlowDistributionProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
7
|
-
/** Flow counts (auto-normalized). Missing
|
|
18
|
+
/** Flow counts (auto-normalized). Missing flows treated as 0. */
|
|
8
19
|
data: FlowData;
|
|
9
20
|
/** Display mode */
|
|
10
21
|
variant?: 'bars' | 'stacked' | 'compact';
|
|
@@ -80,4 +91,4 @@ interface ConceptCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 't
|
|
|
80
91
|
}
|
|
81
92
|
declare const ConceptCard: React.ForwardRefExoticComponent<ConceptCardProps & React.RefAttributes<HTMLDivElement>>;
|
|
82
93
|
|
|
83
|
-
export { ConceptCard as C, type FlowData as F, type SentimentData as S, type ConceptCardProps as a,
|
|
94
|
+
export { ConceptCard as C, type FlowData as F, type SentimentData as S, type ConceptCardProps as a, type FlowDataItem as b, FlowDistribution as c, type FlowDistributionProps as d, SentimentDistribution as e, type SentimentDistributionProps as f };
|
|
@@ -432,4 +432,4 @@ type UIStrings = Record<UIStringKeys, string>;
|
|
|
432
432
|
*/
|
|
433
433
|
declare function getUIStrings(locale?: SupportedLocale): UIStrings;
|
|
434
434
|
|
|
435
|
-
export { sentimentLabels as $, type ActionStatusKey as A, UI_STRINGS as B, actionStatusLabels as C, actionTypeLabels as D, type EntityHealthKey as E, type
|
|
435
|
+
export { sentimentLabels as $, type ActionStatusKey as A, UI_STRINGS as B, actionStatusLabels as C, actionTypeLabels as D, type EntityHealthKey as E, type FlowInput as F, actionTypeVerbs as G, emotionLabels as H, engagementUiTranslations as I, type JobStatusKey as J, entityHealthLabels as K, type Locale as L, entityHealthPriority as M, flowLabels as N, formatRelativeLocaleTime as O, formatTimeRemaining as P, getUIStrings as Q, isActiveJobStatus as R, type SeverityKey as S, isCriticalEntityHealth as T, type UIStringKeys as U, isRTL as V, jobStatusLabels as W, resolveEmotion as X, resolveFlow as Y, resolveSeverity as Z, resolveStatus as _, type StatusKey as a, severityLabels as a0, stageStatusLabels as a1, statusLabels as a2, type FlowKey as b, type ActionTypeKey as c, type EmotionKey as d, type StageStatusKey as e, type EmotionInput as f, type StatusInput as g, type SeverityInput as h, ACTION_STATUS_KEYS as i, ACTION_TYPE_KEYS as j, EMOTION_KEYS as k, EMOTION_KEY_TO_VALUE as l, EMOTION_VALUE_MAP as m, ENTITY_HEALTH_KEYS as n, FLOW_KEYS as o, FLOW_KEY_TO_VALUE as p, FLOW_VALUE_MAP as q, JOB_STATUS_KEYS as r, SEVERITY_KEYS as s, SEVERITY_KEY_TO_VALUE as t, SEVERITY_VALUE_MAP as u, STAGE_STATUS_KEYS as v, STATUS_KEYS as w, STATUS_KEY_TO_VALUE as x, STATUS_VALUE_MAP as y, type UIStrings as z };
|
|
@@ -432,4 +432,4 @@ type UIStrings = Record<UIStringKeys, string>;
|
|
|
432
432
|
*/
|
|
433
433
|
declare function getUIStrings(locale?: SupportedLocale): UIStrings;
|
|
434
434
|
|
|
435
|
-
export { sentimentLabels as $, type ActionStatusKey as A, UI_STRINGS as B, actionStatusLabels as C, actionTypeLabels as D, type EntityHealthKey as E, type
|
|
435
|
+
export { sentimentLabels as $, type ActionStatusKey as A, UI_STRINGS as B, actionStatusLabels as C, actionTypeLabels as D, type EntityHealthKey as E, type FlowInput as F, actionTypeVerbs as G, emotionLabels as H, engagementUiTranslations as I, type JobStatusKey as J, entityHealthLabels as K, type Locale as L, entityHealthPriority as M, flowLabels as N, formatRelativeLocaleTime as O, formatTimeRemaining as P, getUIStrings as Q, isActiveJobStatus as R, type SeverityKey as S, isCriticalEntityHealth as T, type UIStringKeys as U, isRTL as V, jobStatusLabels as W, resolveEmotion as X, resolveFlow as Y, resolveSeverity as Z, resolveStatus as _, type StatusKey as a, severityLabels as a0, stageStatusLabels as a1, statusLabels as a2, type FlowKey as b, type ActionTypeKey as c, type EmotionKey as d, type StageStatusKey as e, type EmotionInput as f, type StatusInput as g, type SeverityInput as h, ACTION_STATUS_KEYS as i, ACTION_TYPE_KEYS as j, EMOTION_KEYS as k, EMOTION_KEY_TO_VALUE as l, EMOTION_VALUE_MAP as m, ENTITY_HEALTH_KEYS as n, FLOW_KEYS as o, FLOW_KEY_TO_VALUE as p, FLOW_VALUE_MAP as q, JOB_STATUS_KEYS as r, SEVERITY_KEYS as s, SEVERITY_KEY_TO_VALUE as t, SEVERITY_VALUE_MAP as u, STAGE_STATUS_KEYS as v, STATUS_KEYS as w, STATUS_KEY_TO_VALUE as x, STATUS_VALUE_MAP as y, type UIStrings as z };
|
package/dist/index.cjs
CHANGED
|
@@ -4554,7 +4554,9 @@ var VARIANT_COLORS = {
|
|
|
4554
4554
|
primary: "var(--brand-default)",
|
|
4555
4555
|
success: "var(--sentiment-positive)",
|
|
4556
4556
|
warning: "var(--warning-default)",
|
|
4557
|
-
destructive: "var(--destructive-default)"
|
|
4557
|
+
destructive: "var(--destructive-default)",
|
|
4558
|
+
info: "var(--info-default)",
|
|
4559
|
+
neutral: "var(--sentiment-neutral)"
|
|
4558
4560
|
};
|
|
4559
4561
|
var TRACK_COLOR = "var(--border-muted)";
|
|
4560
4562
|
var CircularProgress = React127__namespace.forwardRef(
|
|
@@ -7374,12 +7376,24 @@ var StatusBadge = React127__namespace.forwardRef(
|
|
|
7374
7376
|
}
|
|
7375
7377
|
);
|
|
7376
7378
|
StatusBadge.displayName = "StatusBadge";
|
|
7377
|
-
function
|
|
7378
|
-
const
|
|
7379
|
+
function normalizeFlowData(data) {
|
|
7380
|
+
const counts = Object.fromEntries(FLOW_KEYS.map((k) => [k, 0]));
|
|
7381
|
+
if (Array.isArray(data)) {
|
|
7382
|
+
for (const item of data) {
|
|
7383
|
+
const key = resolveFlow(item.type);
|
|
7384
|
+
if (key) counts[key] += item.value ?? 0;
|
|
7385
|
+
}
|
|
7386
|
+
} else {
|
|
7387
|
+
for (const k of FLOW_KEYS) counts[k] = data[k] ?? 0;
|
|
7388
|
+
}
|
|
7389
|
+
return counts;
|
|
7390
|
+
}
|
|
7391
|
+
function calcPercents(counts) {
|
|
7392
|
+
const total = FLOW_KEYS.reduce((s, k) => s + counts[k], 0);
|
|
7379
7393
|
const result = Object.fromEntries(FLOW_KEYS.map((k) => [k, 0]));
|
|
7380
7394
|
if (total === 0) return result;
|
|
7381
|
-
const floats = FLOW_KEYS.filter((k) =>
|
|
7382
|
-
const v =
|
|
7395
|
+
const floats = FLOW_KEYS.filter((k) => counts[k] > 0).map((k) => {
|
|
7396
|
+
const v = counts[k] / total * 100;
|
|
7383
7397
|
return { k, floor: Math.floor(v), rem: v - Math.floor(v) };
|
|
7384
7398
|
});
|
|
7385
7399
|
const remaining = 100 - floats.reduce((s, f) => s + f.floor, 0);
|
|
@@ -7410,7 +7424,8 @@ var FlowDistribution = React127__namespace.forwardRef(
|
|
|
7410
7424
|
...props
|
|
7411
7425
|
}, ref) => {
|
|
7412
7426
|
const labels = flowLabels[locale] ?? flowLabels.fa;
|
|
7413
|
-
const
|
|
7427
|
+
const counts = normalizeFlowData(data);
|
|
7428
|
+
const percents = calcPercents(counts);
|
|
7414
7429
|
const percentSign = locale === "en" ? "%" : "\u066A";
|
|
7415
7430
|
if (isLoading) {
|
|
7416
7431
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, "data-slot": "flow-distribution", className: cn("space-y-2", className), ...props, children: variant === "stacked" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-3 w-full rounded-full bg-muted animate-pulse" }) : variant === "compact" ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-2", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-5 w-20 rounded-full bg-muted animate-pulse" }, i)) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-2", children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
@@ -7420,7 +7435,7 @@ var FlowDistribution = React127__namespace.forwardRef(
|
|
|
7420
7435
|
] }, i)) }) });
|
|
7421
7436
|
}
|
|
7422
7437
|
if (variant === "stacked") {
|
|
7423
|
-
const active = STACKED_ORDER.filter((k) =>
|
|
7438
|
+
const active = STACKED_ORDER.filter((k) => counts[k] > 0);
|
|
7424
7439
|
const srLabel = active.map((k) => `${labels[k]} ${convertToLocalNumbers(percents[k], locale)}${percentSign}`).join("\u060C ");
|
|
7425
7440
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref, "data-slot": "flow-distribution", className: cn("space-y-2", className), ...props, children: [
|
|
7426
7441
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-3 w-full overflow-hidden rounded-full bg-muted", role: "img", "aria-label": srLabel, children: active.map((k) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -7446,14 +7461,14 @@ var FlowDistribution = React127__namespace.forwardRef(
|
|
|
7446
7461
|
] }),
|
|
7447
7462
|
showCounts && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-foreground-muted tabular-nums", children: [
|
|
7448
7463
|
"(",
|
|
7449
|
-
convertToLocalNumbers(
|
|
7464
|
+
convertToLocalNumbers(counts[k], locale),
|
|
7450
7465
|
")"
|
|
7451
7466
|
] })
|
|
7452
7467
|
] }, k)) })
|
|
7453
7468
|
] });
|
|
7454
7469
|
}
|
|
7455
7470
|
if (variant === "compact") {
|
|
7456
|
-
const active = FLOW_KEYS.filter((k) =>
|
|
7471
|
+
const active = FLOW_KEYS.filter((k) => counts[k] > 0).sort((a, b) => counts[b] - counts[a]);
|
|
7457
7472
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
7458
7473
|
"div",
|
|
7459
7474
|
{
|
|
@@ -7477,7 +7492,7 @@ var FlowDistribution = React127__namespace.forwardRef(
|
|
|
7477
7492
|
] }),
|
|
7478
7493
|
showCounts && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-foreground-muted tabular-nums", children: [
|
|
7479
7494
|
"(",
|
|
7480
|
-
convertToLocalNumbers(
|
|
7495
|
+
convertToLocalNumbers(counts[k], locale),
|
|
7481
7496
|
")"
|
|
7482
7497
|
] })
|
|
7483
7498
|
]
|
|
@@ -7487,7 +7502,7 @@ var FlowDistribution = React127__namespace.forwardRef(
|
|
|
7487
7502
|
}
|
|
7488
7503
|
);
|
|
7489
7504
|
}
|
|
7490
|
-
const sorted = FLOW_KEYS.filter((k) =>
|
|
7505
|
+
const sorted = FLOW_KEYS.filter((k) => counts[k] > 0).sort((a, b) => counts[b] - counts[a]);
|
|
7491
7506
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { ref, "data-slot": "flow-distribution", className: cn("space-y-1.5", className), ...props, children: sorted.map((k) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
7492
7507
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "w-24 shrink-0 text-xs text-foreground-light text-end", children: labels[k] }),
|
|
7493
7508
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative flex-1 h-2 rounded-full bg-muted overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -7510,7 +7525,7 @@ var FlowDistribution = React127__namespace.forwardRef(
|
|
|
7510
7525
|
{
|
|
7511
7526
|
className: "w-12 shrink-0 text-xs font-medium tabular-nums text-start",
|
|
7512
7527
|
style: { color: `var(${tokenVar3(k)})` },
|
|
7513
|
-
children: showCounts ? convertToLocalNumbers(
|
|
7528
|
+
children: showCounts ? convertToLocalNumbers(counts[k].toLocaleString(), locale) : `${convertToLocalNumbers(percents[k], locale)}${percentSign}`
|
|
7514
7529
|
}
|
|
7515
7530
|
)
|
|
7516
7531
|
] }, k)) });
|
package/dist/index.d.cts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { S as SupportedLocale } from './utils-Czyp5Ned.cjs';
|
|
2
2
|
export { c as cn, a as convertToLocalNumbers, f as formatAbsoluteTime, b as formatLargeNumber, d as formatNumber, e as formatRelativeTime } from './utils-Czyp5Ned.cjs';
|
|
3
|
-
import { I as IranProvinceSlug, C as Country, P as PostData, a as PostView, b as PostAction, c as PostMediaItem, d as PostAuthor, e as PostPlatform, f as PostSentiment, g as PostEnrichmentFlags, h as PostDensity, i as PostOutlet, j as PostBodyData, S as StoryItem, k as PostMetrics, l as PostSeverity, m as PostCluster, n as PostRepostInfo, o as PostThreadInfo, p as PostUrlPreview$1, q as PostBulkAction, r as PostDetails, s as PostComment } from './server-
|
|
4
|
-
export { t as COUNTRIES, u as CountryCode, E as ENGAGEMENT_RANGES, v as EngagementRange, w as EngagementRangeWithDisplay, x as EngagementTier, F as FollowerGroup, G as GROUP_LABELS, y as IRAN_PROVINCES, z as IranProvince, L as LegacySize, A as PERSIAN_MONTHS, B as PERSIAN_MONTHS_SHORT, D as PERSIAN_WEEKDAYS, H as PERSIAN_WEEKDAYS_SHORT, J as PlatformMetadata, K as PostAiAnalysis, M as PostAiEntity, N as PostAuthorityTier, O as PostCommentAuthor, Q as PostEmotion, R as PostFlags, T as PostFlow, U as PostIntent, V as PostMediaSensitivity, W as PostMediaStatus, X as PostSource, Y as PostSourceCategory, Z as PostStatus, _ as ReactionBreakdown, $ as SizeWithLegacy, a0 as StandardSize, a1 as TIER_LABELS, a2 as countryFlag, a3 as findCountry, a4 as findProvince, a5 as formatJalaliDate, a6 as formatPersianDateRange, a7 as getCountryLabel, a8 as getCurrentRangeIndex, a9 as getEngagementRanges, aa as getFollowerGroup, ab as getMetricLabel, ac as getPersianDay, ad as getPersianMonth, ae as getPersianMonthName, af as getPersianMonthNameShort, ag as getPersianMonthsForDropdown, ah as getPersianWeekdayName, ai as getPersianYear, aj as getPersianYearsForDropdown, ak as getPostSourceConfig, al as getProvinceLabel, am as getSourceColorVar, an as jalaliToGregorian, ao as normalizeSize, ap as sourceCategory, aq as toEnglishDigits, ar as toPersianDigits } from './server-
|
|
5
|
-
import { A as ActionStatusKey,
|
|
6
|
-
export { i as ACTION_STATUS_KEYS, j as ACTION_TYPE_KEYS, k as EMOTION_KEYS, l as EMOTION_KEY_TO_VALUE, m as EMOTION_VALUE_MAP, n as ENTITY_HEALTH_KEYS, o as FLOW_KEYS, p as FLOW_KEY_TO_VALUE, q as FLOW_VALUE_MAP, r as JOB_STATUS_KEYS, L as Locale, s as SEVERITY_KEYS, t as SEVERITY_KEY_TO_VALUE, u as SEVERITY_VALUE_MAP, v as STAGE_STATUS_KEYS, w as STATUS_KEYS, x as STATUS_KEY_TO_VALUE, y as STATUS_VALUE_MAP, S as SeverityKey, U as UIStringKeys, z as UIStrings, B as UI_STRINGS, C as actionStatusLabels, D as actionTypeLabels, G as actionTypeVerbs, H as emotionLabels, I as engagementUiTranslations, K as entityHealthLabels, M as entityHealthPriority, N as flowLabels, O as formatRelativeLocaleTime, P as formatTimeRemaining, Q as getUIStrings, R as isActiveJobStatus, T as isCriticalEntityHealth, V as isRTL, W as jobStatusLabels, X as resolveEmotion, Y as resolveFlow, Z as resolveSeverity, _ as resolveStatus, $ as sentimentLabels, a0 as severityLabels, a1 as stageStatusLabels, a2 as statusLabels } from './i18n-
|
|
3
|
+
import { I as IranProvinceSlug, C as Country, P as PostData, a as PostView, b as PostAction, c as PostMediaItem, d as PostAuthor, e as PostPlatform, f as PostSentiment, g as PostEnrichmentFlags, h as PostDensity, i as PostOutlet, j as PostBodyData, S as StoryItem, k as PostMetrics, l as PostSeverity, m as PostCluster, n as PostRepostInfo, o as PostThreadInfo, p as PostUrlPreview$1, q as PostBulkAction, r as PostDetails, s as PostComment } from './server-BxuDPPiW.cjs';
|
|
4
|
+
export { t as COUNTRIES, u as CountryCode, E as ENGAGEMENT_RANGES, v as EngagementRange, w as EngagementRangeWithDisplay, x as EngagementTier, F as FollowerGroup, G as GROUP_LABELS, y as IRAN_PROVINCES, z as IranProvince, L as LegacySize, A as PERSIAN_MONTHS, B as PERSIAN_MONTHS_SHORT, D as PERSIAN_WEEKDAYS, H as PERSIAN_WEEKDAYS_SHORT, J as PlatformMetadata, K as PostAiAnalysis, M as PostAiEntity, N as PostAuthorityTier, O as PostCommentAuthor, Q as PostEmotion, R as PostFlags, T as PostFlow, U as PostIntent, V as PostMediaSensitivity, W as PostMediaStatus, X as PostSource, Y as PostSourceCategory, Z as PostStatus, _ as ReactionBreakdown, $ as SizeWithLegacy, a0 as StandardSize, a1 as TIER_LABELS, a2 as countryFlag, a3 as findCountry, a4 as findProvince, a5 as formatJalaliDate, a6 as formatPersianDateRange, a7 as getCountryLabel, a8 as getCurrentRangeIndex, a9 as getEngagementRanges, aa as getFollowerGroup, ab as getMetricLabel, ac as getPersianDay, ad as getPersianMonth, ae as getPersianMonthName, af as getPersianMonthNameShort, ag as getPersianMonthsForDropdown, ah as getPersianWeekdayName, ai as getPersianYear, aj as getPersianYearsForDropdown, ak as getPostSourceConfig, al as getProvinceLabel, am as getSourceColorVar, an as jalaliToGregorian, ao as normalizeSize, ap as sourceCategory, aq as toEnglishDigits, ar as toPersianDigits } from './server-BxuDPPiW.cjs';
|
|
5
|
+
import { A as ActionStatusKey, c as ActionTypeKey, E as EntityHealthKey, J as JobStatusKey, d as EmotionKey, b as FlowKey, e as StageStatusKey, f as EmotionInput, F as FlowInput, g as StatusInput, h as SeverityInput, a as StatusKey } from './i18n-B4rvgH-T.cjs';
|
|
6
|
+
export { i as ACTION_STATUS_KEYS, j as ACTION_TYPE_KEYS, k as EMOTION_KEYS, l as EMOTION_KEY_TO_VALUE, m as EMOTION_VALUE_MAP, n as ENTITY_HEALTH_KEYS, o as FLOW_KEYS, p as FLOW_KEY_TO_VALUE, q as FLOW_VALUE_MAP, r as JOB_STATUS_KEYS, L as Locale, s as SEVERITY_KEYS, t as SEVERITY_KEY_TO_VALUE, u as SEVERITY_VALUE_MAP, v as STAGE_STATUS_KEYS, w as STATUS_KEYS, x as STATUS_KEY_TO_VALUE, y as STATUS_VALUE_MAP, S as SeverityKey, U as UIStringKeys, z as UIStrings, B as UI_STRINGS, C as actionStatusLabels, D as actionTypeLabels, G as actionTypeVerbs, H as emotionLabels, I as engagementUiTranslations, K as entityHealthLabels, M as entityHealthPriority, N as flowLabels, O as formatRelativeLocaleTime, P as formatTimeRemaining, Q as getUIStrings, R as isActiveJobStatus, T as isCriticalEntityHealth, V as isRTL, W as jobStatusLabels, X as resolveEmotion, Y as resolveFlow, Z as resolveSeverity, _ as resolveStatus, $ as sentimentLabels, a0 as severityLabels, a1 as stageStatusLabels, a2 as statusLabels } from './i18n-B4rvgH-T.cjs';
|
|
7
7
|
import * as React$1 from 'react';
|
|
8
8
|
import { LucideIcon } from 'lucide-react';
|
|
9
9
|
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from './components/ui/accordion.cjs';
|
|
@@ -32,8 +32,8 @@ export { DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHead
|
|
|
32
32
|
import { HotkeyCombo } from './hooks/use-hotkeys.cjs';
|
|
33
33
|
export { UseHotkeysOptions, formatHotkey, useHotkeys } from './hooks/use-hotkeys.cjs';
|
|
34
34
|
import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
|
|
35
|
-
import { F as FlowData, S as SentimentData } from './concept-card-
|
|
36
|
-
export { C as ConceptCard, a as ConceptCardProps, b as
|
|
35
|
+
import { F as FlowData, S as SentimentData } from './concept-card-dZeBeup5.cjs';
|
|
36
|
+
export { C as ConceptCard, a as ConceptCardProps, b as FlowDataItem, c as FlowDistribution, d as FlowDistributionProps, e as SentimentDistribution, f as SentimentDistributionProps } from './concept-card-dZeBeup5.cjs';
|
|
37
37
|
import { DateRange } from 'react-day-picker';
|
|
38
38
|
import { Drawer as Drawer$1 } from 'vaul';
|
|
39
39
|
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './components/ui/dropdown-menu.cjs';
|
|
@@ -48,7 +48,7 @@ export { IranProvinceCell, IranProvinceHeat, IranProvinceHeatProps, IranProvince
|
|
|
48
48
|
import { OTPInput } from 'input-otp';
|
|
49
49
|
import * as MenubarPrimitive from '@radix-ui/react-menubar';
|
|
50
50
|
import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
|
|
51
|
-
export { B as BotDetectionData, a as BotDetectionKey, b as BotDetectionMeter, c as BotDetectionMeterProps, P as PageCard, d as PageCardContentMix, e as PageCardProps } from './page-card-
|
|
51
|
+
export { B as BotDetectionData, a as BotDetectionKey, b as BotDetectionMeter, c as BotDetectionMeterProps, P as PageCard, d as PageCardContentMix, e as PageCardProps } from './page-card-DWBUZYwM.cjs';
|
|
52
52
|
export { PageHeader, PageHeaderProps } from './components/ui/page-header.cjs';
|
|
53
53
|
export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from './components/ui/popover.cjs';
|
|
54
54
|
export { Progress, ProgressProps } from './components/ui/progress.cjs';
|
|
@@ -506,7 +506,7 @@ interface CircularProgressProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
|
506
506
|
/** Stroke width in px @default 8 */
|
|
507
507
|
strokeWidth?: number;
|
|
508
508
|
/** Color variant */
|
|
509
|
-
variant?: 'primary' | 'success' | 'warning' | 'destructive';
|
|
509
|
+
variant?: 'primary' | 'success' | 'warning' | 'destructive' | 'info' | 'neutral';
|
|
510
510
|
/** Show the numeric value in center @default true */
|
|
511
511
|
showValue?: boolean;
|
|
512
512
|
/** Label text below the value (inside circle) */
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { S as SupportedLocale } from './utils-Czyp5Ned.js';
|
|
2
2
|
export { c as cn, a as convertToLocalNumbers, f as formatAbsoluteTime, b as formatLargeNumber, d as formatNumber, e as formatRelativeTime } from './utils-Czyp5Ned.js';
|
|
3
|
-
import { I as IranProvinceSlug, C as Country, P as PostData, a as PostView, b as PostAction, c as PostMediaItem, d as PostAuthor, e as PostPlatform, f as PostSentiment, g as PostEnrichmentFlags, h as PostDensity, i as PostOutlet, j as PostBodyData, S as StoryItem, k as PostMetrics, l as PostSeverity, m as PostCluster, n as PostRepostInfo, o as PostThreadInfo, p as PostUrlPreview$1, q as PostBulkAction, r as PostDetails, s as PostComment } from './server-
|
|
4
|
-
export { t as COUNTRIES, u as CountryCode, E as ENGAGEMENT_RANGES, v as EngagementRange, w as EngagementRangeWithDisplay, x as EngagementTier, F as FollowerGroup, G as GROUP_LABELS, y as IRAN_PROVINCES, z as IranProvince, L as LegacySize, A as PERSIAN_MONTHS, B as PERSIAN_MONTHS_SHORT, D as PERSIAN_WEEKDAYS, H as PERSIAN_WEEKDAYS_SHORT, J as PlatformMetadata, K as PostAiAnalysis, M as PostAiEntity, N as PostAuthorityTier, O as PostCommentAuthor, Q as PostEmotion, R as PostFlags, T as PostFlow, U as PostIntent, V as PostMediaSensitivity, W as PostMediaStatus, X as PostSource, Y as PostSourceCategory, Z as PostStatus, _ as ReactionBreakdown, $ as SizeWithLegacy, a0 as StandardSize, a1 as TIER_LABELS, a2 as countryFlag, a3 as findCountry, a4 as findProvince, a5 as formatJalaliDate, a6 as formatPersianDateRange, a7 as getCountryLabel, a8 as getCurrentRangeIndex, a9 as getEngagementRanges, aa as getFollowerGroup, ab as getMetricLabel, ac as getPersianDay, ad as getPersianMonth, ae as getPersianMonthName, af as getPersianMonthNameShort, ag as getPersianMonthsForDropdown, ah as getPersianWeekdayName, ai as getPersianYear, aj as getPersianYearsForDropdown, ak as getPostSourceConfig, al as getProvinceLabel, am as getSourceColorVar, an as jalaliToGregorian, ao as normalizeSize, ap as sourceCategory, aq as toEnglishDigits, ar as toPersianDigits } from './server-
|
|
5
|
-
import { A as ActionStatusKey,
|
|
6
|
-
export { i as ACTION_STATUS_KEYS, j as ACTION_TYPE_KEYS, k as EMOTION_KEYS, l as EMOTION_KEY_TO_VALUE, m as EMOTION_VALUE_MAP, n as ENTITY_HEALTH_KEYS, o as FLOW_KEYS, p as FLOW_KEY_TO_VALUE, q as FLOW_VALUE_MAP, r as JOB_STATUS_KEYS, L as Locale, s as SEVERITY_KEYS, t as SEVERITY_KEY_TO_VALUE, u as SEVERITY_VALUE_MAP, v as STAGE_STATUS_KEYS, w as STATUS_KEYS, x as STATUS_KEY_TO_VALUE, y as STATUS_VALUE_MAP, S as SeverityKey, U as UIStringKeys, z as UIStrings, B as UI_STRINGS, C as actionStatusLabels, D as actionTypeLabels, G as actionTypeVerbs, H as emotionLabels, I as engagementUiTranslations, K as entityHealthLabels, M as entityHealthPriority, N as flowLabels, O as formatRelativeLocaleTime, P as formatTimeRemaining, Q as getUIStrings, R as isActiveJobStatus, T as isCriticalEntityHealth, V as isRTL, W as jobStatusLabels, X as resolveEmotion, Y as resolveFlow, Z as resolveSeverity, _ as resolveStatus, $ as sentimentLabels, a0 as severityLabels, a1 as stageStatusLabels, a2 as statusLabels } from './i18n-
|
|
3
|
+
import { I as IranProvinceSlug, C as Country, P as PostData, a as PostView, b as PostAction, c as PostMediaItem, d as PostAuthor, e as PostPlatform, f as PostSentiment, g as PostEnrichmentFlags, h as PostDensity, i as PostOutlet, j as PostBodyData, S as StoryItem, k as PostMetrics, l as PostSeverity, m as PostCluster, n as PostRepostInfo, o as PostThreadInfo, p as PostUrlPreview$1, q as PostBulkAction, r as PostDetails, s as PostComment } from './server-Cfw5kIug.js';
|
|
4
|
+
export { t as COUNTRIES, u as CountryCode, E as ENGAGEMENT_RANGES, v as EngagementRange, w as EngagementRangeWithDisplay, x as EngagementTier, F as FollowerGroup, G as GROUP_LABELS, y as IRAN_PROVINCES, z as IranProvince, L as LegacySize, A as PERSIAN_MONTHS, B as PERSIAN_MONTHS_SHORT, D as PERSIAN_WEEKDAYS, H as PERSIAN_WEEKDAYS_SHORT, J as PlatformMetadata, K as PostAiAnalysis, M as PostAiEntity, N as PostAuthorityTier, O as PostCommentAuthor, Q as PostEmotion, R as PostFlags, T as PostFlow, U as PostIntent, V as PostMediaSensitivity, W as PostMediaStatus, X as PostSource, Y as PostSourceCategory, Z as PostStatus, _ as ReactionBreakdown, $ as SizeWithLegacy, a0 as StandardSize, a1 as TIER_LABELS, a2 as countryFlag, a3 as findCountry, a4 as findProvince, a5 as formatJalaliDate, a6 as formatPersianDateRange, a7 as getCountryLabel, a8 as getCurrentRangeIndex, a9 as getEngagementRanges, aa as getFollowerGroup, ab as getMetricLabel, ac as getPersianDay, ad as getPersianMonth, ae as getPersianMonthName, af as getPersianMonthNameShort, ag as getPersianMonthsForDropdown, ah as getPersianWeekdayName, ai as getPersianYear, aj as getPersianYearsForDropdown, ak as getPostSourceConfig, al as getProvinceLabel, am as getSourceColorVar, an as jalaliToGregorian, ao as normalizeSize, ap as sourceCategory, aq as toEnglishDigits, ar as toPersianDigits } from './server-Cfw5kIug.js';
|
|
5
|
+
import { A as ActionStatusKey, c as ActionTypeKey, E as EntityHealthKey, J as JobStatusKey, d as EmotionKey, b as FlowKey, e as StageStatusKey, f as EmotionInput, F as FlowInput, g as StatusInput, h as SeverityInput, a as StatusKey } from './i18n-CZQ2kPWD.js';
|
|
6
|
+
export { i as ACTION_STATUS_KEYS, j as ACTION_TYPE_KEYS, k as EMOTION_KEYS, l as EMOTION_KEY_TO_VALUE, m as EMOTION_VALUE_MAP, n as ENTITY_HEALTH_KEYS, o as FLOW_KEYS, p as FLOW_KEY_TO_VALUE, q as FLOW_VALUE_MAP, r as JOB_STATUS_KEYS, L as Locale, s as SEVERITY_KEYS, t as SEVERITY_KEY_TO_VALUE, u as SEVERITY_VALUE_MAP, v as STAGE_STATUS_KEYS, w as STATUS_KEYS, x as STATUS_KEY_TO_VALUE, y as STATUS_VALUE_MAP, S as SeverityKey, U as UIStringKeys, z as UIStrings, B as UI_STRINGS, C as actionStatusLabels, D as actionTypeLabels, G as actionTypeVerbs, H as emotionLabels, I as engagementUiTranslations, K as entityHealthLabels, M as entityHealthPriority, N as flowLabels, O as formatRelativeLocaleTime, P as formatTimeRemaining, Q as getUIStrings, R as isActiveJobStatus, T as isCriticalEntityHealth, V as isRTL, W as jobStatusLabels, X as resolveEmotion, Y as resolveFlow, Z as resolveSeverity, _ as resolveStatus, $ as sentimentLabels, a0 as severityLabels, a1 as stageStatusLabels, a2 as statusLabels } from './i18n-CZQ2kPWD.js';
|
|
7
7
|
import * as React$1 from 'react';
|
|
8
8
|
import { LucideIcon } from 'lucide-react';
|
|
9
9
|
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from './components/ui/accordion.js';
|
|
@@ -32,8 +32,8 @@ export { DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHead
|
|
|
32
32
|
import { HotkeyCombo } from './hooks/use-hotkeys.js';
|
|
33
33
|
export { UseHotkeysOptions, formatHotkey, useHotkeys } from './hooks/use-hotkeys.js';
|
|
34
34
|
import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
|
|
35
|
-
import { F as FlowData, S as SentimentData } from './concept-card-
|
|
36
|
-
export { C as ConceptCard, a as ConceptCardProps, b as
|
|
35
|
+
import { F as FlowData, S as SentimentData } from './concept-card-DX5zRCk2.js';
|
|
36
|
+
export { C as ConceptCard, a as ConceptCardProps, b as FlowDataItem, c as FlowDistribution, d as FlowDistributionProps, e as SentimentDistribution, f as SentimentDistributionProps } from './concept-card-DX5zRCk2.js';
|
|
37
37
|
import { DateRange } from 'react-day-picker';
|
|
38
38
|
import { Drawer as Drawer$1 } from 'vaul';
|
|
39
39
|
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from './components/ui/dropdown-menu.js';
|
|
@@ -48,7 +48,7 @@ export { IranProvinceCell, IranProvinceHeat, IranProvinceHeatProps, IranProvince
|
|
|
48
48
|
import { OTPInput } from 'input-otp';
|
|
49
49
|
import * as MenubarPrimitive from '@radix-ui/react-menubar';
|
|
50
50
|
import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
|
|
51
|
-
export { B as BotDetectionData, a as BotDetectionKey, b as BotDetectionMeter, c as BotDetectionMeterProps, P as PageCard, d as PageCardContentMix, e as PageCardProps } from './page-card-
|
|
51
|
+
export { B as BotDetectionData, a as BotDetectionKey, b as BotDetectionMeter, c as BotDetectionMeterProps, P as PageCard, d as PageCardContentMix, e as PageCardProps } from './page-card-CU6_AmNR.js';
|
|
52
52
|
export { PageHeader, PageHeaderProps } from './components/ui/page-header.js';
|
|
53
53
|
export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from './components/ui/popover.js';
|
|
54
54
|
export { Progress, ProgressProps } from './components/ui/progress.js';
|
|
@@ -506,7 +506,7 @@ interface CircularProgressProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
|
506
506
|
/** Stroke width in px @default 8 */
|
|
507
507
|
strokeWidth?: number;
|
|
508
508
|
/** Color variant */
|
|
509
|
-
variant?: 'primary' | 'success' | 'warning' | 'destructive';
|
|
509
|
+
variant?: 'primary' | 'success' | 'warning' | 'destructive' | 'info' | 'neutral';
|
|
510
510
|
/** Show the numeric value in center @default true */
|
|
511
511
|
showValue?: boolean;
|
|
512
512
|
/** Label text below the value (inside circle) */
|
package/dist/index.js
CHANGED
|
@@ -4505,7 +4505,9 @@ var VARIANT_COLORS = {
|
|
|
4505
4505
|
primary: "var(--brand-default)",
|
|
4506
4506
|
success: "var(--sentiment-positive)",
|
|
4507
4507
|
warning: "var(--warning-default)",
|
|
4508
|
-
destructive: "var(--destructive-default)"
|
|
4508
|
+
destructive: "var(--destructive-default)",
|
|
4509
|
+
info: "var(--info-default)",
|
|
4510
|
+
neutral: "var(--sentiment-neutral)"
|
|
4509
4511
|
};
|
|
4510
4512
|
var TRACK_COLOR = "var(--border-muted)";
|
|
4511
4513
|
var CircularProgress = React127.forwardRef(
|
|
@@ -7325,12 +7327,24 @@ var StatusBadge = React127.forwardRef(
|
|
|
7325
7327
|
}
|
|
7326
7328
|
);
|
|
7327
7329
|
StatusBadge.displayName = "StatusBadge";
|
|
7328
|
-
function
|
|
7329
|
-
const
|
|
7330
|
+
function normalizeFlowData(data) {
|
|
7331
|
+
const counts = Object.fromEntries(FLOW_KEYS.map((k) => [k, 0]));
|
|
7332
|
+
if (Array.isArray(data)) {
|
|
7333
|
+
for (const item of data) {
|
|
7334
|
+
const key = resolveFlow(item.type);
|
|
7335
|
+
if (key) counts[key] += item.value ?? 0;
|
|
7336
|
+
}
|
|
7337
|
+
} else {
|
|
7338
|
+
for (const k of FLOW_KEYS) counts[k] = data[k] ?? 0;
|
|
7339
|
+
}
|
|
7340
|
+
return counts;
|
|
7341
|
+
}
|
|
7342
|
+
function calcPercents(counts) {
|
|
7343
|
+
const total = FLOW_KEYS.reduce((s, k) => s + counts[k], 0);
|
|
7330
7344
|
const result = Object.fromEntries(FLOW_KEYS.map((k) => [k, 0]));
|
|
7331
7345
|
if (total === 0) return result;
|
|
7332
|
-
const floats = FLOW_KEYS.filter((k) =>
|
|
7333
|
-
const v =
|
|
7346
|
+
const floats = FLOW_KEYS.filter((k) => counts[k] > 0).map((k) => {
|
|
7347
|
+
const v = counts[k] / total * 100;
|
|
7334
7348
|
return { k, floor: Math.floor(v), rem: v - Math.floor(v) };
|
|
7335
7349
|
});
|
|
7336
7350
|
const remaining = 100 - floats.reduce((s, f) => s + f.floor, 0);
|
|
@@ -7361,7 +7375,8 @@ var FlowDistribution = React127.forwardRef(
|
|
|
7361
7375
|
...props
|
|
7362
7376
|
}, ref) => {
|
|
7363
7377
|
const labels = flowLabels[locale] ?? flowLabels.fa;
|
|
7364
|
-
const
|
|
7378
|
+
const counts = normalizeFlowData(data);
|
|
7379
|
+
const percents = calcPercents(counts);
|
|
7365
7380
|
const percentSign = locale === "en" ? "%" : "\u066A";
|
|
7366
7381
|
if (isLoading) {
|
|
7367
7382
|
return /* @__PURE__ */ jsx("div", { ref, "data-slot": "flow-distribution", className: cn("space-y-2", className), ...props, children: variant === "stacked" ? /* @__PURE__ */ jsx("div", { className: "h-3 w-full rounded-full bg-muted animate-pulse" }) : variant === "compact" ? /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2", children: [0, 1, 2].map((i) => /* @__PURE__ */ jsx("div", { className: "h-5 w-20 rounded-full bg-muted animate-pulse" }, i)) }) : /* @__PURE__ */ jsx("div", { className: "space-y-2", children: [0, 1, 2, 3].map((i) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
@@ -7371,7 +7386,7 @@ var FlowDistribution = React127.forwardRef(
|
|
|
7371
7386
|
] }, i)) }) });
|
|
7372
7387
|
}
|
|
7373
7388
|
if (variant === "stacked") {
|
|
7374
|
-
const active = STACKED_ORDER.filter((k) =>
|
|
7389
|
+
const active = STACKED_ORDER.filter((k) => counts[k] > 0);
|
|
7375
7390
|
const srLabel = active.map((k) => `${labels[k]} ${convertToLocalNumbers(percents[k], locale)}${percentSign}`).join("\u060C ");
|
|
7376
7391
|
return /* @__PURE__ */ jsxs("div", { ref, "data-slot": "flow-distribution", className: cn("space-y-2", className), ...props, children: [
|
|
7377
7392
|
/* @__PURE__ */ jsx("div", { className: "flex h-3 w-full overflow-hidden rounded-full bg-muted", role: "img", "aria-label": srLabel, children: active.map((k) => /* @__PURE__ */ jsx(
|
|
@@ -7397,14 +7412,14 @@ var FlowDistribution = React127.forwardRef(
|
|
|
7397
7412
|
] }),
|
|
7398
7413
|
showCounts && /* @__PURE__ */ jsxs("span", { className: "text-xs text-foreground-muted tabular-nums", children: [
|
|
7399
7414
|
"(",
|
|
7400
|
-
convertToLocalNumbers(
|
|
7415
|
+
convertToLocalNumbers(counts[k], locale),
|
|
7401
7416
|
")"
|
|
7402
7417
|
] })
|
|
7403
7418
|
] }, k)) })
|
|
7404
7419
|
] });
|
|
7405
7420
|
}
|
|
7406
7421
|
if (variant === "compact") {
|
|
7407
|
-
const active = FLOW_KEYS.filter((k) =>
|
|
7422
|
+
const active = FLOW_KEYS.filter((k) => counts[k] > 0).sort((a, b) => counts[b] - counts[a]);
|
|
7408
7423
|
return /* @__PURE__ */ jsx(
|
|
7409
7424
|
"div",
|
|
7410
7425
|
{
|
|
@@ -7428,7 +7443,7 @@ var FlowDistribution = React127.forwardRef(
|
|
|
7428
7443
|
] }),
|
|
7429
7444
|
showCounts && /* @__PURE__ */ jsxs("span", { className: "text-xs text-foreground-muted tabular-nums", children: [
|
|
7430
7445
|
"(",
|
|
7431
|
-
convertToLocalNumbers(
|
|
7446
|
+
convertToLocalNumbers(counts[k], locale),
|
|
7432
7447
|
")"
|
|
7433
7448
|
] })
|
|
7434
7449
|
]
|
|
@@ -7438,7 +7453,7 @@ var FlowDistribution = React127.forwardRef(
|
|
|
7438
7453
|
}
|
|
7439
7454
|
);
|
|
7440
7455
|
}
|
|
7441
|
-
const sorted = FLOW_KEYS.filter((k) =>
|
|
7456
|
+
const sorted = FLOW_KEYS.filter((k) => counts[k] > 0).sort((a, b) => counts[b] - counts[a]);
|
|
7442
7457
|
return /* @__PURE__ */ jsx("div", { ref, "data-slot": "flow-distribution", className: cn("space-y-1.5", className), ...props, children: sorted.map((k) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
7443
7458
|
/* @__PURE__ */ jsx("span", { className: "w-24 shrink-0 text-xs text-foreground-light text-end", children: labels[k] }),
|
|
7444
7459
|
/* @__PURE__ */ jsx("div", { className: "relative flex-1 h-2 rounded-full bg-muted overflow-hidden", children: /* @__PURE__ */ jsx(
|
|
@@ -7461,7 +7476,7 @@ var FlowDistribution = React127.forwardRef(
|
|
|
7461
7476
|
{
|
|
7462
7477
|
className: "w-12 shrink-0 text-xs font-medium tabular-nums text-start",
|
|
7463
7478
|
style: { color: `var(${tokenVar3(k)})` },
|
|
7464
|
-
children: showCounts ? convertToLocalNumbers(
|
|
7479
|
+
children: showCounts ? convertToLocalNumbers(counts[k].toLocaleString(), locale) : `${convertToLocalNumbers(percents[k], locale)}${percentSign}`
|
|
7465
7480
|
}
|
|
7466
7481
|
)
|
|
7467
7482
|
] }, k)) });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { S as SupportedLocale } from './utils-Czyp5Ned.js';
|
|
3
3
|
import { SocialPlatform } from './components/ui/social-platform-badge.js';
|
|
4
|
-
import { a as StatusKey } from './i18n-
|
|
4
|
+
import { a as StatusKey } from './i18n-CZQ2kPWD.js';
|
|
5
5
|
|
|
6
6
|
type BotDetectionKey = 'real' | 'suspicious' | 'bot';
|
|
7
7
|
interface BotDetectionData {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { S as SupportedLocale } from './utils-Czyp5Ned.cjs';
|
|
3
3
|
import { SocialPlatform } from './components/ui/social-platform-badge.cjs';
|
|
4
|
-
import { a as StatusKey } from './i18n-
|
|
4
|
+
import { a as StatusKey } from './i18n-B4rvgH-T.cjs';
|
|
5
5
|
|
|
6
6
|
type BotDetectionKey = 'real' | 'suspicious' | 'bot';
|
|
7
7
|
interface BotDetectionData {
|
package/dist/server.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { S as SupportedLocale, c as cn, a as convertToLocalNumbers, f as formatAbsoluteTime, b as formatLargeNumber, d as formatNumber, e as formatRelativeTime } from './utils-Czyp5Ned.cjs';
|
|
2
|
-
export { t as COUNTRIES, C as Country, u as CountryCode, E as ENGAGEMENT_RANGES, v as EngagementRange, w as EngagementRangeWithDisplay, x as EngagementTier, F as FollowerGroup, G as GROUP_LABELS, y as IRAN_PROVINCES, z as IranProvince, I as IranProvinceSlug, L as LegacySize, A as PERSIAN_MONTHS, B as PERSIAN_MONTHS_SHORT, D as PERSIAN_WEEKDAYS, H as PERSIAN_WEEKDAYS_SHORT, $ as SizeWithLegacy, a0 as StandardSize, a1 as TIER_LABELS, a2 as countryFlag, a3 as findCountry, a4 as findProvince, a5 as formatJalaliDate, a6 as formatPersianDateRange, a7 as getCountryLabel, a8 as getCurrentRangeIndex, a9 as getEngagementRanges, aa as getFollowerGroup, ab as getMetricLabel, ac as getPersianDay, ad as getPersianMonth, ae as getPersianMonthName, af as getPersianMonthNameShort, ag as getPersianMonthsForDropdown, ah as getPersianWeekdayName, ai as getPersianYear, aj as getPersianYearsForDropdown, ak as getPostSourceConfig, al as getProvinceLabel, am as getSourceColorVar, an as jalaliToGregorian, ao as normalizeSize, aq as toEnglishDigits, ar as toPersianDigits } from './server-
|
|
3
|
-
export { i as ACTION_STATUS_KEYS, j as ACTION_TYPE_KEYS, A as ActionStatusKey,
|
|
2
|
+
export { t as COUNTRIES, C as Country, u as CountryCode, E as ENGAGEMENT_RANGES, v as EngagementRange, w as EngagementRangeWithDisplay, x as EngagementTier, F as FollowerGroup, G as GROUP_LABELS, y as IRAN_PROVINCES, z as IranProvince, I as IranProvinceSlug, L as LegacySize, A as PERSIAN_MONTHS, B as PERSIAN_MONTHS_SHORT, D as PERSIAN_WEEKDAYS, H as PERSIAN_WEEKDAYS_SHORT, $ as SizeWithLegacy, a0 as StandardSize, a1 as TIER_LABELS, a2 as countryFlag, a3 as findCountry, a4 as findProvince, a5 as formatJalaliDate, a6 as formatPersianDateRange, a7 as getCountryLabel, a8 as getCurrentRangeIndex, a9 as getEngagementRanges, aa as getFollowerGroup, ab as getMetricLabel, ac as getPersianDay, ad as getPersianMonth, ae as getPersianMonthName, af as getPersianMonthNameShort, ag as getPersianMonthsForDropdown, ah as getPersianWeekdayName, ai as getPersianYear, aj as getPersianYearsForDropdown, ak as getPostSourceConfig, al as getProvinceLabel, am as getSourceColorVar, an as jalaliToGregorian, ao as normalizeSize, aq as toEnglishDigits, ar as toPersianDigits } from './server-BxuDPPiW.cjs';
|
|
3
|
+
export { i as ACTION_STATUS_KEYS, j as ACTION_TYPE_KEYS, A as ActionStatusKey, c as ActionTypeKey, k as EMOTION_KEYS, l as EMOTION_KEY_TO_VALUE, m as EMOTION_VALUE_MAP, n as ENTITY_HEALTH_KEYS, f as EmotionInput, d as EmotionKey, E as EntityHealthKey, o as FLOW_KEYS, p as FLOW_KEY_TO_VALUE, q as FLOW_VALUE_MAP, F as FlowInput, b as FlowKey, r as JOB_STATUS_KEYS, J as JobStatusKey, L as Locale, s as SEVERITY_KEYS, t as SEVERITY_KEY_TO_VALUE, u as SEVERITY_VALUE_MAP, v as STAGE_STATUS_KEYS, w as STATUS_KEYS, x as STATUS_KEY_TO_VALUE, y as STATUS_VALUE_MAP, h as SeverityInput, S as SeverityKey, e as StageStatusKey, g as StatusInput, a as StatusKey, U as UIStringKeys, z as UIStrings, B as UI_STRINGS, C as actionStatusLabels, D as actionTypeLabels, G as actionTypeVerbs, H as emotionLabels, I as engagementUiTranslations, K as entityHealthLabels, M as entityHealthPriority, N as flowLabels, O as formatRelativeLocaleTime, P as formatTimeRemaining, Q as getUIStrings, R as isActiveJobStatus, T as isCriticalEntityHealth, V as isRTL, W as jobStatusLabels, X as resolveEmotion, Y as resolveFlow, Z as resolveSeverity, _ as resolveStatus, $ as sentimentLabels, a0 as severityLabels, a1 as stageStatusLabels, a2 as statusLabels } from './i18n-B4rvgH-T.cjs';
|
|
4
4
|
import 'clsx';
|
|
5
5
|
import 'lucide-react';
|
|
6
6
|
import './components/ui/social-platform-badge.cjs';
|
package/dist/server.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { S as SupportedLocale, c as cn, a as convertToLocalNumbers, f as formatAbsoluteTime, b as formatLargeNumber, d as formatNumber, e as formatRelativeTime } from './utils-Czyp5Ned.js';
|
|
2
|
-
export { t as COUNTRIES, C as Country, u as CountryCode, E as ENGAGEMENT_RANGES, v as EngagementRange, w as EngagementRangeWithDisplay, x as EngagementTier, F as FollowerGroup, G as GROUP_LABELS, y as IRAN_PROVINCES, z as IranProvince, I as IranProvinceSlug, L as LegacySize, A as PERSIAN_MONTHS, B as PERSIAN_MONTHS_SHORT, D as PERSIAN_WEEKDAYS, H as PERSIAN_WEEKDAYS_SHORT, $ as SizeWithLegacy, a0 as StandardSize, a1 as TIER_LABELS, a2 as countryFlag, a3 as findCountry, a4 as findProvince, a5 as formatJalaliDate, a6 as formatPersianDateRange, a7 as getCountryLabel, a8 as getCurrentRangeIndex, a9 as getEngagementRanges, aa as getFollowerGroup, ab as getMetricLabel, ac as getPersianDay, ad as getPersianMonth, ae as getPersianMonthName, af as getPersianMonthNameShort, ag as getPersianMonthsForDropdown, ah as getPersianWeekdayName, ai as getPersianYear, aj as getPersianYearsForDropdown, ak as getPostSourceConfig, al as getProvinceLabel, am as getSourceColorVar, an as jalaliToGregorian, ao as normalizeSize, aq as toEnglishDigits, ar as toPersianDigits } from './server-
|
|
3
|
-
export { i as ACTION_STATUS_KEYS, j as ACTION_TYPE_KEYS, A as ActionStatusKey,
|
|
2
|
+
export { t as COUNTRIES, C as Country, u as CountryCode, E as ENGAGEMENT_RANGES, v as EngagementRange, w as EngagementRangeWithDisplay, x as EngagementTier, F as FollowerGroup, G as GROUP_LABELS, y as IRAN_PROVINCES, z as IranProvince, I as IranProvinceSlug, L as LegacySize, A as PERSIAN_MONTHS, B as PERSIAN_MONTHS_SHORT, D as PERSIAN_WEEKDAYS, H as PERSIAN_WEEKDAYS_SHORT, $ as SizeWithLegacy, a0 as StandardSize, a1 as TIER_LABELS, a2 as countryFlag, a3 as findCountry, a4 as findProvince, a5 as formatJalaliDate, a6 as formatPersianDateRange, a7 as getCountryLabel, a8 as getCurrentRangeIndex, a9 as getEngagementRanges, aa as getFollowerGroup, ab as getMetricLabel, ac as getPersianDay, ad as getPersianMonth, ae as getPersianMonthName, af as getPersianMonthNameShort, ag as getPersianMonthsForDropdown, ah as getPersianWeekdayName, ai as getPersianYear, aj as getPersianYearsForDropdown, ak as getPostSourceConfig, al as getProvinceLabel, am as getSourceColorVar, an as jalaliToGregorian, ao as normalizeSize, aq as toEnglishDigits, ar as toPersianDigits } from './server-Cfw5kIug.js';
|
|
3
|
+
export { i as ACTION_STATUS_KEYS, j as ACTION_TYPE_KEYS, A as ActionStatusKey, c as ActionTypeKey, k as EMOTION_KEYS, l as EMOTION_KEY_TO_VALUE, m as EMOTION_VALUE_MAP, n as ENTITY_HEALTH_KEYS, f as EmotionInput, d as EmotionKey, E as EntityHealthKey, o as FLOW_KEYS, p as FLOW_KEY_TO_VALUE, q as FLOW_VALUE_MAP, F as FlowInput, b as FlowKey, r as JOB_STATUS_KEYS, J as JobStatusKey, L as Locale, s as SEVERITY_KEYS, t as SEVERITY_KEY_TO_VALUE, u as SEVERITY_VALUE_MAP, v as STAGE_STATUS_KEYS, w as STATUS_KEYS, x as STATUS_KEY_TO_VALUE, y as STATUS_VALUE_MAP, h as SeverityInput, S as SeverityKey, e as StageStatusKey, g as StatusInput, a as StatusKey, U as UIStringKeys, z as UIStrings, B as UI_STRINGS, C as actionStatusLabels, D as actionTypeLabels, G as actionTypeVerbs, H as emotionLabels, I as engagementUiTranslations, K as entityHealthLabels, M as entityHealthPriority, N as flowLabels, O as formatRelativeLocaleTime, P as formatTimeRemaining, Q as getUIStrings, R as isActiveJobStatus, T as isCriticalEntityHealth, V as isRTL, W as jobStatusLabels, X as resolveEmotion, Y as resolveFlow, Z as resolveSeverity, _ as resolveStatus, $ as sentimentLabels, a0 as severityLabels, a1 as stageStatusLabels, a2 as statusLabels } from './i18n-CZQ2kPWD.js';
|
|
4
4
|
import 'clsx';
|
|
5
5
|
import 'lucide-react';
|
|
6
6
|
import './components/ui/social-platform-badge.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@parto-system-design/ui",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.20",
|
|
4
4
|
"description": "Persian-first, RTL-native React component library for public-opinion monitoring (افکارسنجی), social listening, and influencer analytics — Supabase-style design language adapted for Farsi typography.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Parto Design System contributors",
|