@parto-system-design/ui 1.1.4 → 1.1.5

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/index.d.ts CHANGED
@@ -230,6 +230,118 @@ declare const sentimentLabels: Record<SupportedLocale, {
230
230
  neutral: string;
231
231
  mixed: string;
232
232
  }>;
233
+ /**
234
+ * Canonical emotion keys — 9-class advanced sentiment scale used in افکارسنجی
235
+ * deep analysis. Coexists with the simple 3-class `Sentiment` above; they are
236
+ * NOT interchangeable. Choose the scale based on view density.
237
+ */
238
+ type EmotionKey = 'anger' | 'anticipation' | 'joy' | 'trust' | 'fear' | 'surprise' | 'sadness' | 'disgust' | 'neutral';
239
+ declare const EMOTION_KEYS: readonly EmotionKey[];
240
+ /** Emotion label translations used by EmotionBadge / EmotionDistribution. */
241
+ declare const emotionLabels: Record<SupportedLocale, Record<EmotionKey, string>>;
242
+ /**
243
+ * Political flow keys — 5-class classification used in افکارسنجی clustering.
244
+ * A concept / post / page belongs to exactly one flow (primary) but usually
245
+ * also has secondary flow composition expressed as percentages.
246
+ */
247
+ type FlowKey = 'pro-gov' | 'internal-critic' | 'internal-opponent' | 'external-opponent' | 'grey';
248
+ declare const FLOW_KEYS: readonly FlowKey[];
249
+ declare const flowLabels: Record<SupportedLocale, Record<FlowKey, string>>;
250
+ /** Operational status — visual state of a tracked entity. */
251
+ type StatusKey = 'critical' | 'warning' | 'normal';
252
+ declare const statusLabels: Record<SupportedLocale, Record<StatusKey, string>>;
253
+ /** Severity — urgency level. Independent from status. */
254
+ type SeverityKey = 'urgent' | 'high' | 'medium' | 'low';
255
+ declare const severityLabels: Record<SupportedLocale, Record<SeverityKey, string>>;
256
+ /**
257
+ * Job lifecycle — canonical states for async work (analyses, campaigns,
258
+ * evaluation runs, imports, exports, report generation).
259
+ *
260
+ * Terminal states: completed / failed / cancelled.
261
+ * Active states: queued / running / paused.
262
+ */
263
+ type JobStatusKey = 'queued' | 'running' | 'paused' | 'completed' | 'failed' | 'cancelled';
264
+ declare const JOB_STATUS_KEYS: readonly JobStatusKey[];
265
+ declare const jobStatusLabels: Record<SupportedLocale, Record<JobStatusKey, string>>;
266
+ /** True iff a job is still active (not in a terminal state). */
267
+ declare function isActiveJobStatus(s: JobStatusKey): boolean;
268
+ /**
269
+ * Action status — discrete outcome for a single completed (or in-flight)
270
+ * action in an activity feed / audit timeline. Distinct from the richer
271
+ * job/stage lifecycles above: each event is atomic, so no "paused" here.
272
+ */
273
+ type ActionStatusKey = 'success' | 'failed' | 'pending' | 'warning' | 'info';
274
+ declare const ACTION_STATUS_KEYS: readonly ActionStatusKey[];
275
+ declare const actionStatusLabels: Record<SupportedLocale, Record<ActionStatusKey, string>>;
276
+ /**
277
+ * Locale-aware relative time label producer. Used by ActionTimeline and any
278
+ * other component that wants trilingual "n minutes ago" strings. For absolute
279
+ * formatting see `formatAbsoluteTime`/`formatJalaliDate` in lib/utils.ts.
280
+ */
281
+ declare function formatRelativeLocaleTime(date: Date | string | number, locale: SupportedLocale): string;
282
+ /**
283
+ * Locale-aware "time remaining" label — forward-looking companion to
284
+ * `formatRelativeLocaleTime`. Used by RateLimitBanner and any countdown UI.
285
+ *
286
+ * Input can be a Date, ISO string, or epoch ms. Past/zero remaining returns
287
+ * the locale-specific "now" / "any moment" marker.
288
+ */
289
+ declare function formatTimeRemaining(target: Date | string | number, locale: SupportedLocale): string;
290
+ /**
291
+ * Stage status — for multi-stage pipeline visualizations (StatusFlow).
292
+ *
293
+ * Distinct from `JobStatusKey`: a job has ONE status; a pipeline of stages has
294
+ * a status PER stage. A `running` stage means that stage is currently active;
295
+ * a `warning` stage completed but with caveats; `skipped` means it was bypassed.
296
+ */
297
+ type StageStatusKey = 'pending' | 'running' | 'completed' | 'failed' | 'skipped' | 'warning' | 'paused';
298
+ declare const STAGE_STATUS_KEYS: readonly StageStatusKey[];
299
+ declare const stageStatusLabels: Record<SupportedLocale, Record<StageStatusKey, string>>;
300
+ /**
301
+ * Action type — canonical set of social-media actions a worker/user can
302
+ * execute. Maps 1:1 to a CSS token family (`--action-type-*`) so each action
303
+ * has a distinct recognizable colour + icon across activity feeds, audit
304
+ * timelines, and rate-limit dashboards.
305
+ *
306
+ * The 7 canonical keys cover current افکارسنجی + Booster + future SRR use:
307
+ * - `like` / `comment` / `save` / `follow` / `unfollow` — Booster OPERATION_TYPES
308
+ * - `dm` — direct message (future bulk-DM, notification replies)
309
+ * - `share` — cross-post / retweet (future multi-platform)
310
+ */
311
+ type ActionTypeKey = 'like' | 'comment' | 'save' | 'follow' | 'unfollow' | 'dm' | 'share';
312
+ declare const ACTION_TYPE_KEYS: readonly ActionTypeKey[];
313
+ declare const actionTypeLabels: Record<SupportedLocale, Record<ActionTypeKey, string>>;
314
+ /**
315
+ * Short-form verb labels for past-tense activity phrasing ("worker X پسندید Y").
316
+ * When composing "subject action object" sentences in ActivityFeed / ActionTimeline,
317
+ * prefer these over `actionTypeLabels` which are noun-form.
318
+ */
319
+ declare const actionTypeVerbs: Record<SupportedLocale, Record<ActionTypeKey, string>>;
320
+ /**
321
+ * Entity health — 6-tier severity narrative for long-lived entities like
322
+ * workers, tracked pages, data sources, monitored feeds. Ordered most-critical
323
+ * to most-positive so components can sort "worst first" deterministically.
324
+ *
325
+ * `banned` — entity is permanently disabled / blocked upstream.
326
+ * `pending` — not yet evaluated (new, awaiting verification, in setup).
327
+ * `at-risk` — immediate intervention needed (failed checks, violations).
328
+ * `warning` — degrading signals, needs monitoring.
329
+ * `growing` — improving trajectory but not yet healthy.
330
+ * `healthy` — stable, all checks pass.
331
+ *
332
+ * Distinct from `StatusKey` (critical/warning/normal — short-lived operational)
333
+ * and `SeverityKey` (urgent/high/medium/low — urgency of an action item).
334
+ */
335
+ type EntityHealthKey = 'banned' | 'pending' | 'at-risk' | 'warning' | 'growing' | 'healthy';
336
+ declare const ENTITY_HEALTH_KEYS: readonly EntityHealthKey[];
337
+ declare const entityHealthLabels: Record<SupportedLocale, Record<EntityHealthKey, string>>;
338
+ /**
339
+ * Priority rank of each entity health state — higher number = more severe.
340
+ * Use to sort entity lists "worst first" without ad-hoc comparisons.
341
+ */
342
+ declare const entityHealthPriority: Record<EntityHealthKey, number>;
343
+ /** True iff the entity needs immediate human attention. */
344
+ declare function isCriticalEntityHealth(s: EntityHealthKey): boolean;
233
345
  /**
234
346
  * Default UI strings for components that need localized text.
235
347
  * Persian (fa) is the default locale for backward compatibility.
@@ -264,6 +376,11 @@ declare const UI_STRINGS: {
264
376
  readonly stepPending: "در انتظار";
265
377
  readonly clearFilters: "پاک کردن فیلترها";
266
378
  readonly activeFilters: "فیلترهای فعال";
379
+ readonly filters: "فیلترها";
380
+ readonly applyFilters: "اعمال";
381
+ readonly resetFilters: "پیش‌فرض";
382
+ readonly noFiltersActive: "فیلتر فعالی نیست";
383
+ readonly clearSection: "پاک کردن این بخش";
267
384
  readonly goBack: "بازگشت";
268
385
  readonly gridView: "نمای شبکه‌ای";
269
386
  readonly listView: "نمای لیستی";
@@ -321,6 +438,11 @@ declare const UI_STRINGS: {
321
438
  readonly stepPending: "قيد الانتظار";
322
439
  readonly clearFilters: "مسح الفلاتر";
323
440
  readonly activeFilters: "الفلاتر النشطة";
441
+ readonly filters: "الفلاتر";
442
+ readonly applyFilters: "تطبيق";
443
+ readonly resetFilters: "الافتراضي";
444
+ readonly noFiltersActive: "لا توجد فلاتر نشطة";
445
+ readonly clearSection: "مسح هذا القسم";
324
446
  readonly goBack: "رجوع";
325
447
  readonly gridView: "عرض شبكي";
326
448
  readonly listView: "عرض قائمة";
@@ -378,6 +500,11 @@ declare const UI_STRINGS: {
378
500
  readonly stepPending: "Pending";
379
501
  readonly clearFilters: "Clear filters";
380
502
  readonly activeFilters: "Active filters";
503
+ readonly filters: "Filters";
504
+ readonly applyFilters: "Apply";
505
+ readonly resetFilters: "Reset";
506
+ readonly noFiltersActive: "No active filters";
507
+ readonly clearSection: "Clear this section";
381
508
  readonly goBack: "Go back";
382
509
  readonly gridView: "Grid view";
383
510
  readonly listView: "List view";
@@ -465,8 +592,87 @@ declare namespace AccordionContent {
465
592
  var displayName: string;
466
593
  }
467
594
 
595
+ interface ActionTimelineItemData {
596
+ /** Stable identifier */
597
+ id: string;
598
+ /** Outcome of the action. Drives the marker colour/icon when `leading` isn't set. @default "info" */
599
+ status?: ActionStatusKey;
600
+ /** Primary text — actor + verb + target. */
601
+ title: React$1.ReactNode;
602
+ /** Optional one-line description under the title. */
603
+ description?: React$1.ReactNode;
604
+ /** Optional preview (comment text, error message, diff snippet). Rendered in a muted box. */
605
+ preview?: React$1.ReactNode;
606
+ /** Optional small tag next to the timestamp (e.g. "Instagram", "AI", "System"). */
607
+ tag?: React$1.ReactNode;
608
+ /** Optional trailing actions (buttons, dropdown). */
609
+ actions?: React$1.ReactNode;
610
+ /** When this action happened. Accepts Date | ISO string | epoch ms. */
611
+ timestamp: Date | string | number;
612
+ /** Override the leading marker — pass an `<Avatar />`, custom icon, etc. */
613
+ leading?: React$1.ReactNode;
614
+ }
615
+ type ActionTimelineDensity = 'compact' | 'default' | 'spacious';
616
+ type ActionTimelineGroupBy = 'none' | 'day';
617
+ interface ActionTimelineProps extends Omit<React$1.OlHTMLAttributes<HTMLOListElement>, 'children'> {
618
+ /** Data-driven item list. Mutually exclusive with `children`. */
619
+ items?: ActionTimelineItemData[];
620
+ /** Composition API — pass `<ActionTimelineItem>` children. */
621
+ children?: React$1.ReactNode;
622
+ /** Visual density @default "default" */
623
+ density?: ActionTimelineDensity;
624
+ /** Group adjacent items under sticky day headers */
625
+ groupBy?: ActionTimelineGroupBy;
626
+ /** Locale for timestamp formatting + status aria-labels @default "fa" */
627
+ locale?: SupportedLocale;
628
+ /** Hide the vertical connector line between items @default false */
629
+ hideConnector?: boolean;
630
+ /** Maximum items to render. When set and exceeded, caller is responsible for pagination UI. */
631
+ limit?: number;
632
+ /** Fires when an item is clicked (anywhere outside the `actions` slot) */
633
+ onItemSelect?: (item: ActionTimelineItemData, index: number) => void;
634
+ /** Empty state when items is empty / undefined and no children provided */
635
+ emptyState?: React$1.ReactNode;
636
+ }
637
+ interface ActionTimelineItemProps extends ActionTimelineItemData {
638
+ }
639
+ /**
640
+ * Optional composition wrapper. Use inside `<ActionTimeline>` instead of the
641
+ * `items` prop — ActionTimeline injects the position metadata automatically.
642
+ * Throws if rendered outside <ActionTimeline>.
643
+ */
644
+ declare function ActionTimelineItem(props: ActionTimelineItemProps): React$1.ReactElement;
645
+ declare const ActionTimeline: React$1.ForwardRefExoticComponent<ActionTimelineProps & React$1.RefAttributes<HTMLOListElement>>;
646
+
647
+ interface ActionTypeMeta {
648
+ /** CSS var fragment — read as `hsl(var(--action-type-foo))` */
649
+ token: string;
650
+ /** Lucide icon for the action */
651
+ icon: React$1.ComponentType<{
652
+ className?: string;
653
+ }>;
654
+ }
655
+ declare const ACTION_TYPE_META: Record<ActionTypeKey, ActionTypeMeta>;
656
+ declare const actionTypeChipVariants: (props?: ({
657
+ size?: "xs" | "sm" | "md" | "lg" | null | undefined;
658
+ variant?: "flat" | "soft" | "solid" | "outline" | null | undefined;
659
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
660
+ interface ActionTypeChipProps extends Omit<React$1.HTMLAttributes<HTMLSpanElement>, 'children'>, VariantProps<typeof actionTypeChipVariants> {
661
+ /** Which action the chip represents */
662
+ type: ActionTypeKey;
663
+ /** Show the localized label after the icon @default true */
664
+ showLabel?: boolean;
665
+ /** Show a counter next to the label (e.g., "Like ۴۲۵") */
666
+ count?: number;
667
+ /** Locale for default label + digit formatting @default "fa" */
668
+ locale?: SupportedLocale;
669
+ /** Override the label (otherwise uses `actionTypeLabels[locale][type]`) */
670
+ label?: React$1.ReactNode;
671
+ }
672
+ declare const ActionTypeChip: React$1.ForwardRefExoticComponent<ActionTypeChipProps & React$1.RefAttributes<HTMLSpanElement>>;
673
+
468
674
  declare const Alert: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
469
- variant?: "info" | "default" | "success" | "warning" | "destructive" | null | undefined;
675
+ variant?: "warning" | "success" | "info" | "default" | "destructive" | null | undefined;
470
676
  } & class_variance_authority_types.ClassProp) | undefined) => string> & React$1.RefAttributes<HTMLDivElement>>;
471
677
  declare const AlertTitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLHeadingElement> & React$1.RefAttributes<HTMLParagraphElement>>;
472
678
  declare const AlertDescription: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
@@ -483,6 +689,38 @@ declare function AlertDialogDescription({ className, ...props }: React$1.Compone
483
689
  declare const AlertDialogAction: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogActionProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
484
690
  declare const AlertDialogCancel: React$1.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
485
691
 
692
+ /**
693
+ * AlertRuleCard — saved alert-rule definition. Shows trigger summary,
694
+ * threshold, severity tag, target channels, and an active/inactive toggle.
695
+ *
696
+ * Designed for "Alert Rules" management pages — a list of these cards lets
697
+ * an analyst quickly scan + tweak which alerts are running.
698
+ */
699
+ type AlertChannel = 'email' | 'sms' | 'telegram' | 'in-app' | 'webhook';
700
+ interface AlertRuleCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
701
+ /** Rule name (e.g., "افزایش ناگهانی منفی") */
702
+ name: React$1.ReactNode;
703
+ /** Trigger description in plain language (e.g., "هرگاه نرخ منفی > ۲۰٪ شد") */
704
+ trigger: React$1.ReactNode;
705
+ /** Threshold value display (e.g., "≥ ۲۰٪", "> ۱۰۰۰ mentions") */
706
+ threshold?: React$1.ReactNode;
707
+ /** Severity that this alert raises */
708
+ severity?: SeverityKey;
709
+ /** Channels this rule fires through */
710
+ channels?: AlertChannel[];
711
+ /** Active state (master switch) */
712
+ active: boolean;
713
+ /** Called when the user toggles the switch */
714
+ onActiveChange: (next: boolean) => void;
715
+ /** Last-fired timestamp display (e.g., "۲ ساعت پیش") */
716
+ lastFired?: React$1.ReactNode;
717
+ /** Optional total fire count */
718
+ fireCount?: number;
719
+ /** Locale @default 'fa' */
720
+ locale?: SupportedLocale;
721
+ }
722
+ declare const AlertRuleCard: React$1.ForwardRefExoticComponent<AlertRuleCardProps & React$1.RefAttributes<HTMLDivElement>>;
723
+
486
724
  interface AutocompleteItem {
487
725
  value: string;
488
726
  label: string;
@@ -748,8 +986,8 @@ interface AvatarGroupProps extends React$1.HTMLAttributes<HTMLDivElement>, Varia
748
986
  declare const AvatarGroup: React$1.ForwardRefExoticComponent<AvatarGroupProps & React$1.RefAttributes<HTMLDivElement>>;
749
987
 
750
988
  declare const badgeVariants: (props?: ({
751
- variant?: "default" | "success" | "warning" | "destructive" | "secondary" | "outline" | "brand" | null | undefined;
752
- size?: "xs" | "sm" | "md" | "lg" | "small" | "tiny" | "large" | null | undefined;
989
+ variant?: "warning" | "success" | "default" | "outline" | "destructive" | "secondary" | "brand" | null | undefined;
990
+ size?: "xs" | "sm" | "md" | "lg" | "small" | "large" | "tiny" | null | undefined;
753
991
  dot?: boolean | null | undefined;
754
992
  } & class_variance_authority_types.ClassProp) | undefined) => string;
755
993
  interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {
@@ -759,7 +997,7 @@ interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement>, VariantPro
759
997
  declare const Badge: React$1.ForwardRefExoticComponent<BadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
760
998
 
761
999
  declare const bannerVariants: (props?: ({
762
- variant?: "info" | "success" | "warning" | "destructive" | "neutral" | null | undefined;
1000
+ variant?: "neutral" | "warning" | "success" | "info" | "destructive" | null | undefined;
763
1001
  } & class_variance_authority_types.ClassProp) | undefined) => string;
764
1002
  interface BannerProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof bannerVariants> {
765
1003
  /** Whether the banner can be dismissed */
@@ -806,7 +1044,7 @@ declare namespace BreadcrumbEllipsis {
806
1044
 
807
1045
  type ButtonVariantProps = VariantProps<typeof buttonVariants>;
808
1046
  declare const buttonVariants: (props?: ({
809
- variant?: "link" | "text" | "default" | "warning" | "destructive" | "primary" | "secondary" | "outline" | "dashed" | "danger" | "ghost" | null | undefined;
1047
+ variant?: "warning" | "link" | "text" | "default" | "outline" | "dashed" | "destructive" | "primary" | "secondary" | "danger" | "ghost" | null | undefined;
810
1048
  block?: boolean | null | undefined;
811
1049
  size?: "xs" | "sm" | "md" | "lg" | "xl" | "default" | "icon" | null | undefined;
812
1050
  disabled?: boolean | null | undefined;
@@ -814,7 +1052,7 @@ declare const buttonVariants: (props?: ({
814
1052
  } & class_variance_authority_types.ClassProp) | undefined) => string;
815
1053
  type LoadingVariantProps = VariantProps<typeof loadingVariants>;
816
1054
  declare const loadingVariants: (props?: ({
817
- variant?: "link" | "text" | "default" | "warning" | "destructive" | "primary" | "secondary" | "outline" | "dashed" | "danger" | "ghost" | null | undefined;
1055
+ variant?: "warning" | "link" | "text" | "default" | "outline" | "dashed" | "destructive" | "primary" | "secondary" | "danger" | "ghost" | null | undefined;
818
1056
  loading?: boolean | "default" | null | undefined;
819
1057
  } & class_variance_authority_types.ClassProp) | undefined) => string;
820
1058
  interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'>, Omit<ButtonVariantProps, 'disabled'>, Omit<LoadingVariantProps, 'variant'> {
@@ -1007,6 +1245,515 @@ declare namespace CommandShortcut {
1007
1245
  var displayName: string;
1008
1246
  }
1009
1247
 
1248
+ /**
1249
+ * Hotkey string grammar:
1250
+ *
1251
+ * <part>[+<part>]*
1252
+ *
1253
+ * where each <part> is one of:
1254
+ * mod — Cmd on macOS, Ctrl on everything else (recommended)
1255
+ * ctrl / cmd — explicit, cross-platform tokens
1256
+ * shift | alt | meta
1257
+ * <single key> — lowercase character, 'space', 'enter', 'escape', 'tab',
1258
+ * arrow{up,down,left,right}, 'slash', 'backspace', etc.
1259
+ *
1260
+ * Examples:
1261
+ * 'mod+k' — ⌘K on macOS, CtrlK elsewhere
1262
+ * 'mod+shift+p'
1263
+ * 'escape'
1264
+ * 'ctrl+k' — explicit Ctrl (no Cmd fallback on macOS)
1265
+ *
1266
+ * Passing an array of strings is treated as an OR — any combo fires the handler.
1267
+ */
1268
+ type HotkeyCombo = string | readonly string[];
1269
+ interface UseHotkeysOptions {
1270
+ /**
1271
+ * When true, `event.preventDefault()` is called on matched combos.
1272
+ * Default: true. Useful to allow the browser's native 'mod+k' (address bar)
1273
+ * to keep working — set to false if the handler only does something conditionally.
1274
+ */
1275
+ preventDefault?: boolean;
1276
+ /**
1277
+ * Skip the handler when focus is inside an editable control (input, textarea,
1278
+ * contenteditable). The exception: combos that include a modifier (mod/ctrl/
1279
+ * cmd/alt) still fire — they are unambiguous shortcuts, not typing.
1280
+ * Default: true.
1281
+ */
1282
+ ignoreWhenTyping?: boolean;
1283
+ /**
1284
+ * When false, the hook unregisters its listener. Useful for conditionally
1285
+ * enabling shortcuts (e.g., only while a panel is open).
1286
+ * Default: true.
1287
+ */
1288
+ enabled?: boolean;
1289
+ /**
1290
+ * DOM target. Defaults to `document`. Pass a ref for scoped shortcuts (e.g.,
1291
+ * only when a specific panel has focus within).
1292
+ */
1293
+ target?: React$1.RefObject<HTMLElement | null> | HTMLElement | Document | null;
1294
+ }
1295
+ /**
1296
+ * Register a keyboard shortcut. Handler fires when the combo matches, respecting
1297
+ * `ignoreWhenTyping` (default true) — except when a modifier is part of the combo,
1298
+ * which always wins. Returns nothing; cleanup is automatic.
1299
+ *
1300
+ * @example
1301
+ * useHotkeys('mod+k', () => setOpen((v) => !v))
1302
+ * useHotkeys(['escape', 'mod+w'], close, { enabled: open })
1303
+ */
1304
+ declare function useHotkeys(combo: HotkeyCombo, handler: (event: KeyboardEvent) => void, options?: UseHotkeysOptions): void;
1305
+ /**
1306
+ * Render-helper: returns a platform-appropriate display string for a combo.
1307
+ * 'mod+k' → '⌘K' on macOS, 'Ctrl+K' elsewhere. Useful for `<CommandShortcut>`.
1308
+ */
1309
+ declare function formatHotkey(combo: string): string;
1310
+
1311
+ interface CommandPaletteItem {
1312
+ /** Stable identifier. Used as the cmdk value and the recents key — MUST be unique across the whole items list. */
1313
+ id: string;
1314
+ /** Visible label. */
1315
+ label: string;
1316
+ /** Dimmer description shown under the label. */
1317
+ description?: string;
1318
+ /** Icon displayed at the start of the row. */
1319
+ icon?: LucideIcon | React$1.ComponentType<{
1320
+ className?: string;
1321
+ }>;
1322
+ /** Group heading under which this item appears. Items without a group are rendered in the root group. */
1323
+ group?: string;
1324
+ /**
1325
+ * Keyboard-shortcut display, using the same grammar as {@link HotkeyCombo}
1326
+ * (e.g. 'mod+d'). The palette only displays it — binding the global shortcut
1327
+ * is the caller's responsibility via {@link useHotkeys} at the host component.
1328
+ */
1329
+ shortcut?: string;
1330
+ /** Extra search tokens not visible in the label (e.g., English aliases, acronyms, tag words). */
1331
+ keywords?: string[];
1332
+ /** Callback when item is selected. Palette closes automatically afterwards. */
1333
+ onSelect: () => void;
1334
+ /** Prevents selection + dims the row. */
1335
+ disabled?: boolean;
1336
+ }
1337
+ interface CommandPaletteRecentsConfig {
1338
+ /** Persistence key. Default: `'parto:cmdk:recents'`. Namespace by app if you mount multiple palettes. */
1339
+ key?: string;
1340
+ /** Max items to remember. Default: 5. */
1341
+ max?: number;
1342
+ /** Header label for the recents group. Default: locale-appropriate ('اخیر'/'Recent'). */
1343
+ label?: string;
1344
+ }
1345
+ interface CommandPaletteProps {
1346
+ /** Controlled open state. If omitted, palette manages its own state. */
1347
+ open?: boolean;
1348
+ /** Fires on both open and close. */
1349
+ onOpenChange?: (open: boolean) => void;
1350
+ /** Items to display. Grouped by `item.group` in insertion order. */
1351
+ items: CommandPaletteItem[];
1352
+ /**
1353
+ * Global keyboard shortcut to toggle the palette. Default: `'mod+k'`.
1354
+ * Pass `false` to disable the global listener (useful when wiring your own).
1355
+ */
1356
+ shortcut?: HotkeyCombo | false;
1357
+ /** Placeholder for the input. Defaults to a locale-appropriate string. */
1358
+ placeholder?: string;
1359
+ /** Shown inside `<CommandEmpty>` when there are no matches. */
1360
+ emptyMessage?: string;
1361
+ /** Screen-reader title (visually hidden). */
1362
+ title?: string;
1363
+ /** Screen-reader description (visually hidden). */
1364
+ description?: string;
1365
+ /** Locale for default strings + Persian-aware fuzzy matching. */
1366
+ locale?: SupportedLocale;
1367
+ /**
1368
+ * Remember recently-selected items in localStorage and surface them as a top
1369
+ * group when the search input is empty. Pass `false` to disable. Default: on.
1370
+ */
1371
+ recents?: CommandPaletteRecentsConfig | false;
1372
+ /** Extra class for the dialog content. */
1373
+ className?: string;
1374
+ }
1375
+ declare function CommandPalette({ open: controlledOpen, onOpenChange, items, shortcut, placeholder, emptyMessage, title, description, locale, recents: recentsConfig, className, }: CommandPaletteProps): react_jsx_runtime.JSX.Element;
1376
+ declare namespace CommandPalette {
1377
+ var displayName: string;
1378
+ }
1379
+
1380
+ interface PartoRadarChartProps {
1381
+ /** Data: [{ subject: "سرعت", series1: 80, series2: 60 }] */
1382
+ data: Array<Record<string, any>>;
1383
+ /** Keys for each radar series */
1384
+ dataKeys: string[];
1385
+ /** Field name used for angle axis labels (default: 'subject') */
1386
+ indexBy?: string;
1387
+ /** Radar fill opacity */
1388
+ fillOpacity?: number;
1389
+ /** Radar stroke width */
1390
+ strokeWidth?: number;
1391
+ /** Show dots on vertices */
1392
+ showDots?: boolean;
1393
+ /** Dot radius */
1394
+ dotRadius?: number;
1395
+ /** Grid shape */
1396
+ gridType?: 'polygon' | 'circle';
1397
+ /** Chart margins */
1398
+ margin?: {
1399
+ top?: number;
1400
+ right?: number;
1401
+ bottom?: number;
1402
+ left?: number;
1403
+ };
1404
+ /** Custom tooltip formatter */
1405
+ tooltipFormatter?: (name: string, value: number) => React$1.ReactNode;
1406
+ className?: string;
1407
+ isLoading?: boolean;
1408
+ ariaLabel?: string;
1409
+ }
1410
+ declare const PartoRadarChart: React$1.ForwardRefExoticComponent<PartoRadarChartProps & React$1.RefAttributes<HTMLDivElement>>;
1411
+
1412
+ interface ComparisonMetric {
1413
+ /** Unique key — used to look up values in each entity. */
1414
+ key: string;
1415
+ /** Human-readable label shown on the radar axis + tooltip. */
1416
+ label: string;
1417
+ /**
1418
+ * True means a higher value is better (the default for most scores).
1419
+ * Set to false for inverted metrics like error rate or response time.
1420
+ * @default true
1421
+ */
1422
+ higherIsBetter?: boolean;
1423
+ /**
1424
+ * Informational — maximum expected value for this metric. Not used by the
1425
+ * radar geometry (auto-scaled); used by the tooltip for "x / max" display.
1426
+ */
1427
+ max?: number;
1428
+ }
1429
+ interface ComparisonEntity {
1430
+ /** Unique id — used as the `dataKey` for the radar series. */
1431
+ key: string;
1432
+ /** Display name in the legend. */
1433
+ label: string;
1434
+ /** Metric key → numeric value. Missing keys are treated as 0. */
1435
+ values: Record<string, number>;
1436
+ /** Optional custom color — defaults to the chart palette. */
1437
+ color?: string;
1438
+ }
1439
+ interface ComparisonWinner {
1440
+ /** Entity key (or null for a tie). */
1441
+ winnerKey: string | null;
1442
+ /** All entity keys tied at the top. Length >=1 when there is data; empty if no entities. */
1443
+ topKeys: string[];
1444
+ /** Top value for this metric (after higherIsBetter direction). */
1445
+ topValue: number;
1446
+ }
1447
+ /**
1448
+ * For each metric, compute the entity that "wins" (highest value, or lowest
1449
+ * if `higherIsBetter: false`). Ties return winnerKey=null.
1450
+ */
1451
+ declare function computeComparisonWinners(metrics: ComparisonMetric[], entities: ComparisonEntity[]): Record<string, ComparisonWinner>;
1452
+ /** Count outright wins (no ties) per entity. */
1453
+ declare function countComparisonWins(winners: Record<string, ComparisonWinner>): Record<string, number>;
1454
+ interface ComparisonRadarProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'title'> {
1455
+ /** Metric axes of the radar. Order matters — these render clockwise from the top. */
1456
+ metrics: ComparisonMetric[];
1457
+ /** Entities being compared (typically 2-5). */
1458
+ entities: ComparisonEntity[];
1459
+ /** Annotate axis labels with a crown for the winner @default true */
1460
+ showWinnerMarkers?: boolean;
1461
+ /** Show the rich legend with win counts above the chart @default true */
1462
+ showLegend?: boolean;
1463
+ /** Card title */
1464
+ title?: React$1.ReactNode;
1465
+ /** Short description below title */
1466
+ description?: React$1.ReactNode;
1467
+ /** Chart height in pixels @default 340 */
1468
+ chartHeight?: number;
1469
+ /** Loading state */
1470
+ isLoading?: boolean;
1471
+ /** Locale @default "fa" */
1472
+ locale?: SupportedLocale;
1473
+ /**
1474
+ * Custom radar props — pass-through to PartoRadarChart (margin, fillOpacity,
1475
+ * gridType, …). Avoid setting `data` / `dataKeys` / `indexBy` / `isLoading`.
1476
+ */
1477
+ radarProps?: Omit<React$1.ComponentProps<typeof PartoRadarChart>, 'data' | 'dataKeys' | 'indexBy' | 'isLoading'>;
1478
+ }
1479
+ declare const ComparisonRadar: React$1.ForwardRefExoticComponent<ComparisonRadarProps & React$1.RefAttributes<HTMLDivElement>>;
1480
+
1481
+ type NotificationSeverity = 'info' | 'warning' | 'destructive' | 'success' | 'critical';
1482
+ interface NotificationItem {
1483
+ /** Stable id — required for `onMarkRead` / `onDismiss` to target a specific item. */
1484
+ id: string;
1485
+ /** Short headline. Keep under ~60 chars to avoid wrapping beyond two lines. */
1486
+ title: string;
1487
+ /** Longer body text. Truncated to 3 lines by default. */
1488
+ body?: string;
1489
+ /** ISO date string, Date instance, or epoch ms. */
1490
+ timestamp: string | number | Date;
1491
+ /** Severity drives the side-border + dot color. Defaults to `'info'`. */
1492
+ severity?: NotificationSeverity;
1493
+ /** Optional icon — replaces the severity dot when supplied. */
1494
+ icon?: LucideIcon;
1495
+ /** `true` renders the item in a read/dim state (no unread dot, lower contrast). */
1496
+ read?: boolean;
1497
+ /**
1498
+ * Row-level callback — fires when the item body is clicked. Typical use:
1499
+ * navigate to the source. The palette closes afterwards.
1500
+ */
1501
+ onSelect?: () => void;
1502
+ /** Inline action button rendered inside the row (e.g., "Approve", "Open"). */
1503
+ action?: {
1504
+ label: string;
1505
+ onClick: () => void;
1506
+ };
1507
+ }
1508
+ interface NotificationFilter {
1509
+ /** Stable key for the tab. */
1510
+ key: string;
1511
+ /** Visible label. */
1512
+ label: string;
1513
+ /** Predicate — items returning `true` are shown when this filter is active. */
1514
+ predicate: (item: NotificationItem) => boolean;
1515
+ }
1516
+ interface NotificationCenterProps {
1517
+ /** Items to render. Consumer owns the array (mark-as-read / dismiss happen in your store). */
1518
+ items: NotificationItem[];
1519
+ /** Fires when user clicks an unread item, or the "mark read" action on it. */
1520
+ onMarkRead?: (id: string) => void;
1521
+ /** Fires when user clicks "mark all read". */
1522
+ onMarkAllRead?: () => void;
1523
+ /** Fires when user clicks the × on an item. If absent, dismiss is hidden. */
1524
+ onDismiss?: (id: string) => void;
1525
+ /** Optional tabs. First filter is active by default unless `defaultFilter` supplied. */
1526
+ filters?: NotificationFilter[];
1527
+ /** Key of the filter active on first render. */
1528
+ defaultFilter?: string;
1529
+ /** Optional per-filter active control. When set, tabs become controlled. */
1530
+ activeFilter?: string;
1531
+ onFilterChange?: (key: string) => void;
1532
+ /** Max CSS height of the scrollable list. Default `'420px'`. */
1533
+ maxHeight?: string;
1534
+ /** Locale for label strings + digit formatting. */
1535
+ locale?: SupportedLocale;
1536
+ /** Controlled open. */
1537
+ open?: boolean;
1538
+ onOpenChange?: (open: boolean) => void;
1539
+ /** Custom empty message. */
1540
+ emptyMessage?: string;
1541
+ /** Aria-label on the bell trigger. */
1542
+ triggerLabel?: string;
1543
+ /** Extra class on the trigger button. */
1544
+ triggerClassName?: string;
1545
+ /** Extra class on the popover content. */
1546
+ className?: string;
1547
+ /** Override relative-time formatter (default uses `formatRelativeTime` — Persian-biased). */
1548
+ formatTime?: (date: Date) => string;
1549
+ }
1550
+ declare function NotificationCenter({ items, onMarkRead, onMarkAllRead, onDismiss, filters, defaultFilter, activeFilter: controlledFilter, onFilterChange, maxHeight, locale, open: controlledOpen, onOpenChange, emptyMessage, triggerLabel, triggerClassName, className, formatTime, }: NotificationCenterProps): react_jsx_runtime.JSX.Element;
1551
+ declare namespace NotificationCenter {
1552
+ var displayName: string;
1553
+ }
1554
+
1555
+ declare const siteHeaderVariants: (props?: ({
1556
+ size?: "sm" | "md" | "lg" | null | undefined;
1557
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1558
+ interface SiteHeaderProps extends React$1.HTMLAttributes<HTMLElement>, VariantProps<typeof siteHeaderVariants> {
1559
+ }
1560
+ /**
1561
+ * Opinionated app-shell header for multi-screen dashboards. Compose with the
1562
+ * sub-components: `<SiteHeaderStart>` / `<SiteHeaderEnd>` plus the small
1563
+ * primitives (`Breadcrumb`, `SiteHeaderTitle`, `SiteHeaderSubtitle`,
1564
+ * `SiteHeaderActions`, `SiteHeaderSeparator`).
1565
+ *
1566
+ * For a low-level prop-based layout use {@link AppBar} instead.
1567
+ */
1568
+ declare const SiteHeader: React$1.ForwardRefExoticComponent<SiteHeaderProps & React$1.RefAttributes<HTMLElement>>;
1569
+ /** Inline-start slot. Holds breadcrumb + title stack. Grows to fill space. */
1570
+ declare const SiteHeaderStart: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
1571
+ /** Inline-end slot. Holds actions + notifications + user menu. Shrinks to content. */
1572
+ declare const SiteHeaderEnd: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
1573
+ /** Main page title. Single line, truncates. */
1574
+ declare const SiteHeaderTitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLHeadingElement> & React$1.RefAttributes<HTMLHeadingElement>>;
1575
+ /** Optional tagline under the title. Single line, truncates. */
1576
+ declare const SiteHeaderSubtitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
1577
+ /**
1578
+ * Stack helper — wraps breadcrumb / title / subtitle vertically. Use inside
1579
+ * `SiteHeaderStart` when you want a conventional "breadcrumb-above-title" layout.
1580
+ */
1581
+ declare const SiteHeaderTitleGroup: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
1582
+ /** Group container for icon-only action buttons. */
1583
+ declare const SiteHeaderActions: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
1584
+ /** Vertical separator between action clusters. */
1585
+ declare const SiteHeaderSeparator: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLSpanElement> & React$1.RefAttributes<HTMLSpanElement>>;
1586
+
1587
+ interface UserMenuUser {
1588
+ name: string;
1589
+ email?: string;
1590
+ avatar?: string;
1591
+ /** Fallback initials when the avatar image is missing or fails to load. */
1592
+ avatarFallback?: string;
1593
+ /** Optional role / org label shown under the name. */
1594
+ role?: string;
1595
+ }
1596
+ /** Discriminated item union for the dropdown body. */
1597
+ type UserMenuItem = {
1598
+ type?: 'item';
1599
+ label: string;
1600
+ icon?: React$1.ComponentType<{
1601
+ className?: string;
1602
+ }>;
1603
+ /** Hotkey string passed to `formatHotkey`, e.g. `'mod+,'`. */
1604
+ shortcut?: string;
1605
+ onSelect: () => void;
1606
+ destructive?: boolean;
1607
+ disabled?: boolean;
1608
+ } | {
1609
+ type: 'separator';
1610
+ } | {
1611
+ type: 'label';
1612
+ label: string;
1613
+ } | {
1614
+ type: 'submenu';
1615
+ label: string;
1616
+ icon?: React$1.ComponentType<{
1617
+ className?: string;
1618
+ }>;
1619
+ items: UserMenuItem[];
1620
+ };
1621
+ interface UserMenuProps {
1622
+ /** The current user shown in the dropdown header + trigger avatar. */
1623
+ user: UserMenuUser;
1624
+ /** Dropdown rows. Use the discriminated union for item / separator / label / submenu. */
1625
+ items: UserMenuItem[];
1626
+ /** Controlled open. */
1627
+ open?: boolean;
1628
+ onOpenChange?: (open: boolean) => void;
1629
+ /** Locale for default labels. Defaults to `'fa'`. */
1630
+ locale?: SupportedLocale;
1631
+ /** Show email + role block in the dropdown header. Default `true`. */
1632
+ showUserHeader?: boolean;
1633
+ /** Show the name next to the avatar on the trigger (hidden on mobile by default). Default `false`. */
1634
+ showNameInTrigger?: boolean;
1635
+ /** Trigger size. */
1636
+ size?: 'sm' | 'md';
1637
+ /** Extra class on the trigger button. */
1638
+ triggerClassName?: string;
1639
+ /** Extra class on the dropdown content. */
1640
+ className?: string;
1641
+ /** `data-slot` override (useful when nesting inside another component's analytics tree). */
1642
+ 'data-slot'?: string;
1643
+ }
1644
+ declare const UserMenu: React$1.ForwardRefExoticComponent<UserMenuProps & React$1.RefAttributes<HTMLButtonElement>>;
1645
+
1646
+ interface RouteProgressProps extends React$1.HTMLAttributes<HTMLDivElement> {
1647
+ /**
1648
+ * Controlled visibility. If omitted, the component stays mounted but hidden —
1649
+ * fire the `start`/`finish` methods on the ref instead.
1650
+ */
1651
+ active?: boolean;
1652
+ /** Progress value (0–1). Default: auto-trickle while active. */
1653
+ value?: number;
1654
+ /**
1655
+ * How long to trickle before the bar caps out near the end (matches
1656
+ * NProgress-style UX). Default: 800ms per step.
1657
+ */
1658
+ trickleInterval?: number;
1659
+ /**
1660
+ * Value the bar tops out at while waiting for `active=false` (so the page
1661
+ * change still feels snappy). Default: 0.9 — never completes automatically.
1662
+ */
1663
+ trickleCap?: number;
1664
+ /** Height in pixels. Default: 2. */
1665
+ height?: number;
1666
+ /** Position. `'top'` (default) sticks to the top edge; `'bottom'` for e.g. drawers. */
1667
+ position?: 'top' | 'bottom';
1668
+ }
1669
+ interface RouteProgressHandle {
1670
+ /** Reset + show the bar. */
1671
+ start: () => void;
1672
+ /** Snap to 100% then hide after a short fade-out. */
1673
+ finish: () => void;
1674
+ }
1675
+ /**
1676
+ * Thin gradient progress bar for route/page transitions. Three usage modes:
1677
+ *
1678
+ * 1. **Controlled** — pass `active={true/false}` and let the component trickle
1679
+ * automatically while `active` is true:
1680
+ * ```tsx
1681
+ * <RouteProgress active={isNavigating} />
1682
+ * ```
1683
+ *
1684
+ * 2. **Imperative** — call `start()` / `finish()` on the ref:
1685
+ * ```tsx
1686
+ * const ref = useRef<RouteProgressHandle>(null)
1687
+ * ref.current?.start()
1688
+ * // ... navigate ...
1689
+ * ref.current?.finish()
1690
+ * ```
1691
+ *
1692
+ * 3. **Fully controlled value** — pass a numeric `value` in `[0, 1]` and skip
1693
+ * `active` entirely. Useful for file uploads or long-running jobs.
1694
+ */
1695
+ declare const RouteProgress: React$1.ForwardRefExoticComponent<RouteProgressProps & React$1.RefAttributes<RouteProgressHandle>>;
1696
+
1697
+ type NavMatchStrategy = 'exact' | 'prefix';
1698
+ interface NavTreeContextValue {
1699
+ /** Current pathname — used to decide which `NavItem.href` is active. */
1700
+ activePath: string;
1701
+ /** Match strategy. Default `'prefix'` matches `/clusters` for both `/clusters` and `/clusters/42`. */
1702
+ matchStrategy: NavMatchStrategy;
1703
+ }
1704
+ declare function useNavTree(): NavTreeContextValue;
1705
+ interface NavTreeProviderProps {
1706
+ /** Current pathname. For Next.js, pass `usePathname()`. */
1707
+ activePath: string;
1708
+ /** How NavItem `href` matches `activePath`. Default: `'prefix'`. */
1709
+ matchStrategy?: NavMatchStrategy;
1710
+ children: React$1.ReactNode;
1711
+ }
1712
+ declare function NavTreeProvider({ activePath, matchStrategy, children }: NavTreeProviderProps): react_jsx_runtime.JSX.Element;
1713
+ /** Outer container. Mostly a semantic `<nav>` wrapper — accepts any children. */
1714
+ declare const NavTree: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLElement> & React$1.RefAttributes<HTMLElement>>;
1715
+ interface NavGroupProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'role'> {
1716
+ /** Visible group heading. Clickable if `collapsible` (default true). */
1717
+ heading?: React$1.ReactNode;
1718
+ /** Whether the header toggles visibility of children. Default `true` if `heading` is set. */
1719
+ collapsible?: boolean;
1720
+ /** Initial open state (uncontrolled). Default `true`. */
1721
+ defaultOpen?: boolean;
1722
+ /** Controlled open state. */
1723
+ open?: boolean;
1724
+ onOpenChange?: (open: boolean) => void;
1725
+ }
1726
+ declare const NavGroup: React$1.ForwardRefExoticComponent<NavGroupProps & React$1.RefAttributes<HTMLDivElement>>;
1727
+ declare const NavSeparator: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLHRElement> & React$1.RefAttributes<HTMLHRElement>>;
1728
+ declare const navItemVariants: (props?: ({
1729
+ size?: "sm" | "md" | null | undefined;
1730
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1731
+ interface NavItemBaseProps extends VariantProps<typeof navItemVariants> {
1732
+ /** Link target. If set, NavItem renders as `<a>`. */
1733
+ href?: string;
1734
+ /** Click handler. If set (and `href` not set), NavItem renders as `<button>`. */
1735
+ onClick?: React$1.MouseEventHandler<HTMLElement>;
1736
+ /** Leading icon. */
1737
+ icon?: React$1.ComponentType<{
1738
+ className?: string;
1739
+ }>;
1740
+ /** Optional trailing badge (count, "new", etc.). */
1741
+ badge?: React$1.ReactNode;
1742
+ /** Custom `data-active` override. Use to short-circuit path matching. */
1743
+ active?: boolean;
1744
+ /** Skip the active-cascade report to parent (useful for informational items). */
1745
+ skipActiveReport?: boolean;
1746
+ /** Render-as override — passes all props to the given component. */
1747
+ asChild?: boolean;
1748
+ /** Disables interaction + dims the row. */
1749
+ disabled?: boolean;
1750
+ /** External link hint — opens in a new tab with `rel="noopener noreferrer"`. */
1751
+ external?: boolean;
1752
+ }
1753
+ interface NavItemProps extends NavItemBaseProps, Omit<React$1.HTMLAttributes<HTMLElement>, 'onClick'> {
1754
+ }
1755
+ declare const NavItem: React$1.ForwardRefExoticComponent<NavItemProps & React$1.RefAttributes<HTMLElement>>;
1756
+
1010
1757
  interface CommentTag {
1011
1758
  title: string;
1012
1759
  probability: number;
@@ -1127,29 +1874,179 @@ declare namespace ContextMenuShortcut {
1127
1874
  var displayName: string;
1128
1875
  }
1129
1876
 
1130
- interface CopyButtonProps extends Omit<ButtonProps, 'onClick'> {
1131
- /** The text value to copy to clipboard */
1132
- value: string;
1133
- /** Duration in ms to show the "copied" state @default 2000 */
1134
- feedbackDuration?: number;
1135
- /** Locale for aria-label and tooltip text @default "fa" */
1877
+ type FlowData = Partial<Record<FlowKey, number>>;
1878
+ interface FlowDistributionProps extends React$1.HTMLAttributes<HTMLDivElement> {
1879
+ /** Flow counts (auto-normalized). Missing keys treated as 0. */
1880
+ data: FlowData;
1881
+ /** Display mode */
1882
+ variant?: 'bars' | 'stacked' | 'compact';
1883
+ /** Show numeric counts alongside percent */
1884
+ showCounts?: boolean;
1885
+ /** Show percentages */
1886
+ showPercent?: boolean;
1887
+ /** Locale */
1136
1888
  locale?: SupportedLocale;
1137
- /** Called after successful copy */
1138
- onCopy?: () => void;
1889
+ /** Loading skeleton */
1890
+ isLoading?: boolean;
1139
1891
  }
1140
- declare const CopyButton: React$1.ForwardRefExoticComponent<CopyButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
1892
+ declare const FlowDistribution: React$1.ForwardRefExoticComponent<FlowDistributionProps & React$1.RefAttributes<HTMLDivElement>>;
1141
1893
 
1142
- interface DatePickerProps {
1143
- /**
1144
- * The selected date range
1145
- */
1146
- value?: DateRange;
1147
- /**
1148
- * Callback when date range changes
1149
- */
1150
- onChange?: (date: DateRange | undefined) => void;
1151
- /**
1152
- * Use Persian/Jalali calendar
1894
+ interface SentimentData {
1895
+ positive: number;
1896
+ negative: number;
1897
+ neutral: number;
1898
+ mixed?: number;
1899
+ }
1900
+ interface SentimentDistributionProps extends React$1.HTMLAttributes<HTMLDivElement> {
1901
+ /** Sentiment counts (will be auto-normalized to 100%) */
1902
+ data: SentimentData;
1903
+ /** Display mode */
1904
+ variant?: 'bars' | 'stacked' | 'compact';
1905
+ /** Show numeric count labels */
1906
+ showCounts?: boolean;
1907
+ /** Show percentage labels */
1908
+ showPercent?: boolean;
1909
+ /** Locale for number/label formatting */
1910
+ locale?: SupportedLocale;
1911
+ /** Show loading skeleton */
1912
+ isLoading?: boolean;
1913
+ }
1914
+ declare const SentimentDistribution: React$1.ForwardRefExoticComponent<SentimentDistributionProps & React$1.RefAttributes<HTMLDivElement>>;
1915
+
1916
+ /**
1917
+ * ConceptCard — افکارسنجی-flavored headline tile for clustering dashboards.
1918
+ * Composes: status badge, severity badge, flow composition bar, sentiment
1919
+ * distribution, sparkline trend, AI summary snippet, optional comparison
1920
+ * checkbox. Built for government dashboards where each "concept" needs
1921
+ * to fit in a card grid with rich, comparable signals.
1922
+ */
1923
+ interface ConceptCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'title'> {
1924
+ /** Concept name (e.g., "افزایش قیمت بنزین") */
1925
+ title: React$1.ReactNode;
1926
+ /** Short subtitle (e.g., "خوشه ۴ — ۱۲۰ پست") */
1927
+ subtitle?: React$1.ReactNode;
1928
+ /** Operational status */
1929
+ status?: StatusKey;
1930
+ /** Criticality of the concept (urgent/high/medium/low) */
1931
+ severity?: SeverityKey;
1932
+ /** Flow composition breakdown (5-class political) */
1933
+ flow?: FlowData;
1934
+ /** Sentiment composition (3-class) */
1935
+ sentiment?: SentimentData;
1936
+ /** Trend sparkline values (e.g., last 14 days mention volume) */
1937
+ trend?: number[];
1938
+ /** AI-generated short summary (1-2 sentences) */
1939
+ aiSummary?: React$1.ReactNode;
1940
+ /** Total mentions / size — shown as a stat */
1941
+ totalCount?: number;
1942
+ /** Comparison checkbox state. When provided, renders the checkbox in the header */
1943
+ comparison?: {
1944
+ selected: boolean;
1945
+ onSelectionChange: (next: boolean) => void;
1946
+ label?: React$1.ReactNode;
1947
+ };
1948
+ /** Make the entire card clickable (cursor + hover/focus ring) */
1949
+ interactive?: boolean;
1950
+ /** Locale @default 'fa' */
1951
+ locale?: SupportedLocale;
1952
+ }
1953
+ declare const ConceptCard: React$1.ForwardRefExoticComponent<ConceptCardProps & React$1.RefAttributes<HTMLDivElement>>;
1954
+
1955
+ interface CopyButtonProps extends Omit<ButtonProps, 'onClick'> {
1956
+ /** The text value to copy to clipboard */
1957
+ value: string;
1958
+ /** Duration in ms to show the "copied" state @default 2000 */
1959
+ feedbackDuration?: number;
1960
+ /** Locale for aria-label and tooltip text @default "fa" */
1961
+ locale?: SupportedLocale;
1962
+ /** Called after successful copy */
1963
+ onCopy?: () => void;
1964
+ }
1965
+ declare const CopyButton: React$1.ForwardRefExoticComponent<CopyButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
1966
+
1967
+ type CriterionTierKey = 'excellent' | 'good' | 'moderate' | 'poor' | 'critical';
1968
+ declare const CRITERION_TIER_KEYS: readonly CriterionTierKey[];
1969
+ interface CriterionTierThresholds {
1970
+ /** Minimum score for "excellent" @default 80 */
1971
+ excellent: number;
1972
+ /** Minimum score for "good" @default 60 */
1973
+ good: number;
1974
+ /** Minimum score for "moderate" @default 40 */
1975
+ moderate: number;
1976
+ /** Minimum score for "poor" @default 20 (below → "critical") */
1977
+ poor: number;
1978
+ }
1979
+ declare const DEFAULT_CRITERION_THRESHOLDS: CriterionTierThresholds;
1980
+ /**
1981
+ * Auto-classify a score into one of the 5 canonical tiers based on thresholds.
1982
+ * Assumes score is normalized to [0, max]; will return a tier even if score
1983
+ * is out of range (clamped behaviour).
1984
+ */
1985
+ declare function getCriterionTier(score: number, max?: number, thresholds?: CriterionTierThresholds): CriterionTierKey;
1986
+ interface CriterionInputSpec {
1987
+ /** Short label for the input (e.g., "نرخ تعامل") */
1988
+ label?: React$1.ReactNode;
1989
+ /** Displayed value (e.g., "۳.۲٪", "+۱۲۰ فالوور", "۵۰۰ کلمه") */
1990
+ value: React$1.ReactNode;
1991
+ }
1992
+ interface CriterionTrend {
1993
+ /** Delta in points (not percent). Positive = higher score than baseline. */
1994
+ delta: number;
1995
+ /** Optional label describing the baseline (e.g., "نسبت به ماه قبل") */
1996
+ label?: React$1.ReactNode;
1997
+ }
1998
+ interface CriterionScoreCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
1999
+ /** Name of the criterion (e.g., "نرخ تعامل") */
2000
+ name: React$1.ReactNode;
2001
+ /** Short description of how the score is computed */
2002
+ description?: React$1.ReactNode;
2003
+ /** Computed score */
2004
+ score: number;
2005
+ /** Max of the score scale @default 100 */
2006
+ max?: number;
2007
+ /**
2008
+ * Weight in a composite score (0..1). Rendered as "۶۰٪" badge in the header.
2009
+ * When weight=0, the badge still renders — pass `undefined` to hide it.
2010
+ */
2011
+ weight?: number;
2012
+ /** Raw input that produced the score (for transparency) */
2013
+ input?: CriterionInputSpec;
2014
+ /** Change vs a baseline, shown next to the score */
2015
+ trend?: CriterionTrend;
2016
+ /**
2017
+ * Tier override. When omitted, auto-computed from `score` + `max` + thresholds.
2018
+ */
2019
+ tier?: CriterionTierKey;
2020
+ /** Show a small "≥80 عالی · ≥60 خوب · ..." hint row @default false */
2021
+ showThresholdHint?: boolean;
2022
+ /** Custom tier thresholds (expressed for 0-100; scaled to `max` internally) */
2023
+ tierThresholds?: CriterionTierThresholds;
2024
+ /** Visual size @default "md" */
2025
+ size?: 'sm' | 'md' | 'lg';
2026
+ /**
2027
+ * Layout orientation:
2028
+ * - `default` — header with name+weight, big score + trend, input/description/hint rows
2029
+ * - `compact` — single row name + score, for list/table usage
2030
+ */
2031
+ layout?: 'default' | 'compact';
2032
+ /** Locale for default strings + digits @default "fa" */
2033
+ locale?: SupportedLocale;
2034
+ /** Hide the horizontal progress bar @default false */
2035
+ hideBar?: boolean;
2036
+ }
2037
+ declare const CriterionScoreCard: React$1.ForwardRefExoticComponent<CriterionScoreCardProps & React$1.RefAttributes<HTMLDivElement>>;
2038
+
2039
+ interface DatePickerProps {
2040
+ /**
2041
+ * The selected date range
2042
+ */
2043
+ value?: DateRange;
2044
+ /**
2045
+ * Callback when date range changes
2046
+ */
2047
+ onChange?: (date: DateRange | undefined) => void;
2048
+ /**
2049
+ * Use Persian/Jalali calendar
1153
2050
  */
1154
2051
  usePersianCalendar?: boolean;
1155
2052
  /**
@@ -1448,6 +2345,85 @@ interface FilterBarActiveFiltersProps extends React$1.HTMLAttributes<HTMLDivElem
1448
2345
  }
1449
2346
  declare const FilterBarActiveFilters: React$1.ForwardRefExoticComponent<FilterBarActiveFiltersProps & React$1.RefAttributes<HTMLDivElement>>;
1450
2347
 
2348
+ interface FilterPanelProps extends React$1.HTMLAttributes<HTMLDivElement> {
2349
+ /** Locale for default strings and digit formatting @default "fa" */
2350
+ locale?: SupportedLocale;
2351
+ }
2352
+ declare const FilterPanel: React$1.ForwardRefExoticComponent<FilterPanelProps & React$1.RefAttributes<HTMLDivElement>>;
2353
+ declare const FilterPanelHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2354
+ interface FilterPanelTitleProps extends React$1.HTMLAttributes<HTMLHeadingElement> {
2355
+ /** Active filter count — when > 0, a pill is rendered next to the label */
2356
+ activeCount?: number;
2357
+ }
2358
+ declare const FilterPanelTitle: React$1.ForwardRefExoticComponent<FilterPanelTitleProps & React$1.RefAttributes<HTMLHeadingElement>>;
2359
+ interface FilterPanelClearAllProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, 'onClick'> {
2360
+ /** Callback when clear-all is clicked */
2361
+ onClear?: () => void;
2362
+ /** Also allow onClick (alias of onClear) to match native HTML semantics */
2363
+ onClick?: React$1.MouseEventHandler<HTMLButtonElement>;
2364
+ }
2365
+ declare const FilterPanelClearAll: React$1.ForwardRefExoticComponent<FilterPanelClearAllProps & React$1.RefAttributes<HTMLButtonElement>>;
2366
+ declare const FilterPanelBody: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2367
+ declare const FilterPanelFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2368
+ interface FilterSectionProps {
2369
+ /** Visible section title */
2370
+ title: React$1.ReactNode;
2371
+ /** Extra descriptive text below the title */
2372
+ description?: React$1.ReactNode;
2373
+ /** Number of active filters inside this section — shown as a pill next to the title */
2374
+ activeCount?: number;
2375
+ /** Initial open state for uncontrolled mode @default true */
2376
+ defaultOpen?: boolean;
2377
+ /** Controlled open state */
2378
+ open?: boolean;
2379
+ /** onOpenChange for controlled mode */
2380
+ onOpenChange?: (open: boolean) => void;
2381
+ /** When set, a "×" clear button appears in the header */
2382
+ onClear?: () => void;
2383
+ /** When true, the trigger is static (non-collapsible) — useful for single-field sections */
2384
+ collapsible?: boolean;
2385
+ /** Content (form fields) */
2386
+ children?: React$1.ReactNode;
2387
+ className?: string;
2388
+ /** Extra class for the inner content container */
2389
+ contentClassName?: string;
2390
+ /** Optional id for testing / aria */
2391
+ id?: string;
2392
+ }
2393
+ declare const FilterSection: React$1.ForwardRefExoticComponent<FilterSectionProps & React$1.RefAttributes<HTMLDivElement>>;
2394
+ interface FilterPanelTriggerProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
2395
+ /** Active filter count — renders a pill badge next to the label */
2396
+ activeCount?: number;
2397
+ /** Locale for digit formatting and default label @default inherited from FilterPanel context; falls back to "fa" */
2398
+ locale?: SupportedLocale;
2399
+ /** Custom icon element (defaults to SlidersHorizontal) */
2400
+ icon?: React$1.ReactNode;
2401
+ /** Render without icon */
2402
+ hideIcon?: boolean;
2403
+ /** Visual variant — passthrough to Button */
2404
+ variant?: React$1.ComponentProps<typeof Button>['variant'];
2405
+ /** Size — passthrough to Button */
2406
+ size?: React$1.ComponentProps<typeof Button>['size'];
2407
+ }
2408
+ declare const FilterPanelTrigger: React$1.ForwardRefExoticComponent<FilterPanelTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
2409
+ interface ActiveFiltersBarProps extends React$1.HTMLAttributes<HTMLDivElement> {
2410
+ /** Locale for default empty text */
2411
+ locale?: SupportedLocale;
2412
+ /** Label rendered before chips ("فیلترهای فعال:"). Pass `false` to hide it. */
2413
+ label?: React$1.ReactNode;
2414
+ /** Text when no children are provided */
2415
+ emptyText?: React$1.ReactNode;
2416
+ /** Hide the whole bar when there are no children (instead of showing emptyText) */
2417
+ hideWhenEmpty?: boolean;
2418
+ }
2419
+ declare const ActiveFiltersBar: React$1.ForwardRefExoticComponent<ActiveFiltersBarProps & React$1.RefAttributes<HTMLDivElement>>;
2420
+ interface ActiveFiltersClearAllProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, 'onClick'> {
2421
+ onClear?: () => void;
2422
+ onClick?: React$1.MouseEventHandler<HTMLButtonElement>;
2423
+ locale?: SupportedLocale;
2424
+ }
2425
+ declare const ActiveFiltersClearAll: React$1.ForwardRefExoticComponent<ActiveFiltersClearAllProps & React$1.RefAttributes<HTMLButtonElement>>;
2426
+
1451
2427
  declare const Form: <TFieldValues extends FieldValues, TContext = any, TTransformedValues = TFieldValues>(props: react_hook_form.FormProviderProps<TFieldValues, TContext, TTransformedValues>) => React$1.JSX.Element;
1452
2428
  declare const FormField: {
1453
2429
  <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ ...props }: ControllerProps<TFieldValues, TName>): react_jsx_runtime.JSX.Element;
@@ -1539,6 +2515,102 @@ declare const TagInput: React$1.ForwardRefExoticComponent<TagInputProps & React$
1539
2515
 
1540
2516
  declare const HashtagInput: React$1.ForwardRefExoticComponent<TagInputProps & React$1.RefAttributes<HTMLDivElement>>;
1541
2517
 
2518
+ type CardSize = 'sm' | 'md' | 'lg';
2519
+ interface EntityHealthCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
2520
+ /** Current health state — drives colour, icon, and default narrative framing */
2521
+ severity: EntityHealthKey;
2522
+ /** Compact row layout for list views @default "md" */
2523
+ size?: CardSize;
2524
+ /** Render as a clickable element (`role="button"` + focus ring). */
2525
+ interactive?: boolean;
2526
+ /** Locale for default strings + digit formatting @default "fa" */
2527
+ locale?: SupportedLocale;
2528
+ /** Render an accent-coloured left (logical-start) border tied to severity @default true */
2529
+ accentBorder?: boolean;
2530
+ }
2531
+ declare const EntityHealthCard: React$1.ForwardRefExoticComponent<EntityHealthCardProps & React$1.RefAttributes<HTMLDivElement>>;
2532
+ declare const EntityHealthCardHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2533
+ declare const EntityHealthCardHeaderText: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2534
+ interface EntityHealthCardTitleProps extends React$1.HTMLAttributes<HTMLHeadingElement> {
2535
+ /** Semantic heading level @default "h3" */
2536
+ as?: 'h2' | 'h3' | 'h4';
2537
+ }
2538
+ declare const EntityHealthCardTitle: React$1.ForwardRefExoticComponent<EntityHealthCardTitleProps & React$1.RefAttributes<HTMLHeadingElement>>;
2539
+ declare const EntityHealthCardSubtitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
2540
+ declare const EntityHealthCardHeaderEnd: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2541
+ interface EntityHealthCardSeverityBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
2542
+ /** Hide the text label — keeps the icon and aria-label only */
2543
+ iconOnly?: boolean;
2544
+ /** Size @default "sm" */
2545
+ size?: 'xs' | 'sm' | 'md';
2546
+ /** Override locale for just this badge */
2547
+ locale?: SupportedLocale;
2548
+ }
2549
+ declare const EntityHealthCardSeverityBadge: React$1.ForwardRefExoticComponent<EntityHealthCardSeverityBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
2550
+ interface EntityHealthCardScoreProps extends React$1.HTMLAttributes<HTMLDivElement> {
2551
+ /** Current score — clamped to [0, max]. */
2552
+ value: number;
2553
+ /** Max score @default 100 */
2554
+ max?: number;
2555
+ /** Leading label (e.g., "نمره سلامت") */
2556
+ label?: React$1.ReactNode;
2557
+ /** Optional delta vs previous period. Positive => up, negative => down. */
2558
+ delta?: number;
2559
+ /** Suffix rendered after the score (e.g., "٪", "/۱۰۰"). Omit for no suffix. */
2560
+ suffix?: React$1.ReactNode;
2561
+ /** Override auto suffix when `suffix` is not provided. Defaults to "/{max}" in localized digits. */
2562
+ showDenominator?: boolean;
2563
+ /** Override the accent colour. Accepts any CSS color. */
2564
+ color?: string;
2565
+ }
2566
+ declare const EntityHealthCardScore: React$1.ForwardRefExoticComponent<EntityHealthCardScoreProps & React$1.RefAttributes<HTMLDivElement>>;
2567
+ declare const EntityHealthCardNarrative: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
2568
+ interface EntityHealthCardTrustProps extends React$1.HTMLAttributes<HTMLDivElement> {
2569
+ /** Trust score @range 0..max */
2570
+ value: number;
2571
+ /** Max score @default 100 */
2572
+ max?: number;
2573
+ /** Leading label — defaults to "اعتماد" */
2574
+ label?: React$1.ReactNode;
2575
+ /** Hide the numeric value on the trailing side */
2576
+ hideValue?: boolean;
2577
+ /** Show 25 / 50 / 75 tick marks inside the bar @default true */
2578
+ showMarkers?: boolean;
2579
+ /** Size of the bar @default "sm" */
2580
+ barSize?: 'xs' | 'sm' | 'md';
2581
+ /** Override the bar fill colour */
2582
+ color?: string;
2583
+ }
2584
+ declare const EntityHealthCardTrust: React$1.ForwardRefExoticComponent<EntityHealthCardTrustProps & React$1.RefAttributes<HTMLDivElement>>;
2585
+ interface EntityHealthCardPhaseProps extends React$1.HTMLAttributes<HTMLDivElement> {
2586
+ /** Current day index (1-based). When provided with `total`, a progress bar renders. */
2587
+ day?: number;
2588
+ /** Total days in this phase */
2589
+ total?: number;
2590
+ /** Phase name */
2591
+ phase?: React$1.ReactNode;
2592
+ }
2593
+ declare const EntityHealthCardPhase: React$1.ForwardRefExoticComponent<EntityHealthCardPhaseProps & React$1.RefAttributes<HTMLDivElement>>;
2594
+ interface EntityHealthCardMetricsProps extends React$1.HTMLAttributes<HTMLDivElement> {
2595
+ /** Number of columns @default 2 */
2596
+ columns?: 1 | 2 | 3 | 4;
2597
+ }
2598
+ declare const EntityHealthCardMetrics: React$1.ForwardRefExoticComponent<EntityHealthCardMetricsProps & React$1.RefAttributes<HTMLDivElement>>;
2599
+ interface EntityHealthCardMetricProps extends React$1.HTMLAttributes<HTMLDivElement> {
2600
+ /** Metric label */
2601
+ label: React$1.ReactNode;
2602
+ /** Metric value — primary number or short string */
2603
+ value: React$1.ReactNode;
2604
+ /** Optional trend direction — affects trailing icon colour */
2605
+ trend?: 'up' | 'down' | 'flat';
2606
+ /** Optional trend magnitude shown after the arrow (e.g., "12%") */
2607
+ trendLabel?: React$1.ReactNode;
2608
+ }
2609
+ declare const EntityHealthCardMetric: React$1.ForwardRefExoticComponent<EntityHealthCardMetricProps & React$1.RefAttributes<HTMLDivElement>>;
2610
+ declare const EntityHealthCardFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2611
+ declare const EntityHealthCardActions: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2612
+ declare const EntityHealthCardMeta: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
2613
+
1542
2614
  interface InputGroupProps extends React$1.ComponentProps<'div'> {
1543
2615
  /**
1544
2616
  * Direction of the input group.
@@ -1599,69 +2671,109 @@ declare namespace InputOTPSeparator {
1599
2671
  var displayName: string;
1600
2672
  }
1601
2673
 
1602
- type MediaType = 'image' | 'video' | 'carousel';
1603
- type AspectRatioType = '16:9' | '9:16' | '1:1' | '4:5' | '5:4';
1604
- interface MediaItem {
1605
- type: 'image' | 'video';
1606
- url: string;
1607
- aspectRatio?: AspectRatioType;
2674
+ interface JobCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
2675
+ /** Current lifecycle status drives colour and badge */
2676
+ status: JobStatusKey;
2677
+ /** Compact single-row layout (for list views) @default false */
2678
+ compact?: boolean;
2679
+ /** When set, the card renders as a clickable element with hover + focus styles. Pure presentational — wire your own handler via onClick. */
2680
+ interactive?: boolean;
2681
+ /** Locale for default strings + digit formatting @default "fa" */
2682
+ locale?: SupportedLocale;
1608
2683
  }
1609
- interface PostStats {
1610
- likes?: number;
1611
- comments?: number;
1612
- views?: number;
1613
- shares?: number;
2684
+ declare const JobCard: React$1.ForwardRefExoticComponent<JobCardProps & React$1.RefAttributes<HTMLDivElement>>;
2685
+ declare const JobCardHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2686
+ interface JobCardThumbnailProps extends React$1.HTMLAttributes<HTMLDivElement> {
2687
+ /** Image URL. If omitted, `icon` or `fallback` is used. */
2688
+ src?: string;
2689
+ /** Alt text for the image */
2690
+ alt?: string;
2691
+ /** Lucide icon rendered in an outlined tile (used when no src) */
2692
+ icon?: React$1.ComponentType<{
2693
+ className?: string;
2694
+ }>;
2695
+ /** Arbitrary fallback node (letter, emoji, …) */
2696
+ fallback?: React$1.ReactNode;
1614
2697
  }
1615
- type NumberFormat = 'exact' | 'short';
1616
- type TimeFormat = 'absolute' | 'relative';
1617
- interface InstagramProfileInfo {
1618
- username: string;
1619
- fullName?: string;
1620
- profilePicture?: string;
1621
- avatarUrl?: string;
2698
+ declare const JobCardThumbnail: React$1.ForwardRefExoticComponent<JobCardThumbnailProps & React$1.RefAttributes<HTMLDivElement>>;
2699
+ declare const JobCardHeaderText: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2700
+ interface JobCardTitleProps extends React$1.HTMLAttributes<HTMLHeadingElement> {
2701
+ /** Semantic heading level @default "h3" */
2702
+ as?: 'h2' | 'h3' | 'h4';
2703
+ }
2704
+ declare const JobCardTitle: React$1.ForwardRefExoticComponent<JobCardTitleProps & React$1.RefAttributes<HTMLHeadingElement>>;
2705
+ declare const JobCardSubtitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
2706
+ declare const JobCardHeaderActions: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2707
+ interface JobCardStatusBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
2708
+ /** Hide the text label — keeps the icon and aria-label only */
2709
+ iconOnly?: boolean;
2710
+ /** Size @default "sm" */
2711
+ size?: 'xs' | 'sm' | 'md';
2712
+ /** Override locale for just this badge */
2713
+ locale?: SupportedLocale;
1622
2714
  }
1623
- interface InstagramPostProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof instagramPostVariants> {
1624
- dir?: 'rtl' | 'ltr';
1625
- media?: MediaItem[];
1626
- mediaType?: MediaType;
1627
- postType?: 'image' | 'video' | 'carousel';
1628
- caption?: string;
1629
- showCaption?: boolean;
1630
- stats?: PostStats;
1631
- numberFormat?: NumberFormat;
1632
- showLikes?: boolean;
1633
- showComments?: boolean;
1634
- showViews?: boolean;
1635
- showShares?: boolean;
1636
- publishTime?: Date | string | number;
1637
- timeFormat?: TimeFormat;
1638
- profile?: InstagramProfileInfo;
1639
- showProfile?: boolean;
1640
- avatarUrl?: string;
1641
- showActions?: boolean;
1642
- /** Show loading skeleton state */
1643
- isLoading?: boolean;
1644
- onCommentAnalyzer?: () => void;
1645
- onBooster?: () => void;
1646
- onAIAnalysis?: () => void;
1647
- onOpenInstagram?: () => void;
1648
- instagramUrl?: string;
1649
- disableCommentAnalyzer?: boolean;
1650
- disableBooster?: boolean;
1651
- disableAIAnalysis?: boolean;
1652
- disableOpenInstagram?: boolean;
1653
- placeholderText?: string;
1654
- /** Locale for UI strings @default 'fa' */
2715
+ declare const JobCardStatusBadge: React$1.ForwardRefExoticComponent<JobCardStatusBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
2716
+ /**
2717
+ * Wrapper for action buttons. If the parent `<JobCard interactive>` is
2718
+ * clickable, child button clicks would otherwise bubble up and trigger
2719
+ * the card's handler. Wrap your buttons here and we add role="group"
2720
+ * semantics; stop event propagation at the Button's own onClick when
2721
+ * needed to avoid conflicting with card activation.
2722
+ */
2723
+ declare const JobCardActions: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2724
+ interface JobCardProgressProps extends React$1.HTMLAttributes<HTMLDivElement> {
2725
+ /** Current value — if omitted (and not indeterminate), renders a 0% bar */
2726
+ value?: number;
2727
+ /** Max value @default 100 */
2728
+ max?: number;
2729
+ /** Render an animated indeterminate shimmer. Overrides `value`. */
2730
+ indeterminate?: boolean;
2731
+ /** Leading text label */
2732
+ label?: React$1.ReactNode;
2733
+ /** Force-hide the percentage text on the trailing end */
2734
+ hideValueText?: boolean;
2735
+ /** Override the bar colour (e.g. for `paused` state). Accepts a CSS value. */
2736
+ color?: string;
2737
+ /** Size of the bar @default "sm" */
2738
+ size?: 'xs' | 'sm' | 'md';
2739
+ }
2740
+ declare const JobCardProgress: React$1.ForwardRefExoticComponent<JobCardProgressProps & React$1.RefAttributes<HTMLDivElement>>;
2741
+ declare const JobCardMeta: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDListElement> & React$1.RefAttributes<HTMLDListElement>>;
2742
+ interface JobCardMetaItemProps {
2743
+ /** Lucide icon — usually Calendar, Clock, User, … */
2744
+ icon?: React$1.ComponentType<{
2745
+ className?: string;
2746
+ }>;
2747
+ /** Field label */
2748
+ label: React$1.ReactNode;
2749
+ /** Field value */
2750
+ value: React$1.ReactNode;
2751
+ /** Use `<time dateTime={...}>` for value (screen readers + copy behaviour) */
2752
+ dateTime?: string;
2753
+ className?: string;
2754
+ }
2755
+ declare const JobCardMetaItem: React$1.ForwardRefExoticComponent<JobCardMetaItemProps & React$1.RefAttributes<HTMLDivElement>>;
2756
+ interface JobCardStatsProps extends React$1.HTMLAttributes<HTMLDivElement> {
2757
+ /** Layout columns @default auto */
2758
+ columns?: 2 | 3 | 4 | 'auto';
2759
+ }
2760
+ declare const JobCardStats: React$1.ForwardRefExoticComponent<JobCardStatsProps & React$1.RefAttributes<HTMLDivElement>>;
2761
+ interface JobCardStatProps {
2762
+ label: React$1.ReactNode;
2763
+ /** Current value */
2764
+ value: number;
2765
+ /** Total — renders as "value / total" when provided */
2766
+ total?: number;
2767
+ /** Value formatting locale. Defaults to JobCard context. */
1655
2768
  locale?: SupportedLocale;
1656
- /** Text for "show more" button @default "بیشتر" */
1657
- showMoreText?: string;
1658
- /** Text for "show less" button @default "کمتر" */
1659
- showLessText?: string;
2769
+ /** Semantic tone applied to the value */
2770
+ variant?: 'default' | 'positive' | 'warning' | 'destructive' | 'muted';
2771
+ /** Pre-formatted override bypasses number formatting */
2772
+ formatted?: React$1.ReactNode;
2773
+ className?: string;
1660
2774
  }
1661
- declare const instagramPostVariants: (props?: ({
1662
- variant?: "horizontal" | "vertical" | null | undefined;
1663
- } & class_variance_authority_types.ClassProp) | undefined) => string;
1664
- declare const InstagramPost: React$1.ForwardRefExoticComponent<InstagramPostProps & React$1.RefAttributes<HTMLDivElement>>;
2775
+ declare const JobCardStat: React$1.ForwardRefExoticComponent<JobCardStatProps & React$1.RefAttributes<HTMLDivElement>>;
2776
+ declare const JobCardError: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
1665
2777
 
1666
2778
  declare function Kbd({ className, ...props }: React$1.ComponentProps<'kbd'>): react_jsx_runtime.JSX.Element;
1667
2779
  declare namespace Kbd {
@@ -1852,6 +2964,100 @@ declare namespace NavigationMenuIndicator {
1852
2964
  var displayName: string;
1853
2965
  }
1854
2966
 
2967
+ type SocialPlatform = 'instagram' | 'twitter' | 'tiktok' | 'youtube' | 'linkedin' | 'telegram' | 'threads';
2968
+ interface SocialPlatformBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
2969
+ /** The social media platform to display */
2970
+ platform: SocialPlatform;
2971
+ /** Size of the badge */
2972
+ size?: 'xs' | 'sm' | 'md' | 'lg';
2973
+ /** Show the platform name label */
2974
+ showLabel?: boolean;
2975
+ /** Visual style of the badge */
2976
+ variant?: 'flat' | 'badge';
2977
+ }
2978
+ declare const socialPlatformBadgeVariants: (props?: ({
2979
+ size?: "xs" | "sm" | "md" | "lg" | null | undefined;
2980
+ variant?: "flat" | "badge" | null | undefined;
2981
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
2982
+ declare const SocialPlatformBadge: React$1.ForwardRefExoticComponent<SocialPlatformBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
2983
+
2984
+ type BotDetectionKey = 'real' | 'suspicious' | 'bot';
2985
+ interface BotDetectionData {
2986
+ /** Confirmed real / human accounts */
2987
+ real: number;
2988
+ /** Suspicious — insufficient signal, possibly bot */
2989
+ suspicious: number;
2990
+ /** Confirmed bot / automated */
2991
+ bot: number;
2992
+ }
2993
+ interface BotDetectionMeterProps extends React$1.HTMLAttributes<HTMLDivElement> {
2994
+ /** Counts — auto-normalised to percentages that sum to exactly 100 */
2995
+ data: BotDetectionData;
2996
+ /** Display mode @default "stacked" */
2997
+ variant?: 'stacked' | 'bars' | 'compact';
2998
+ /** Show numeric count labels */
2999
+ showCounts?: boolean;
3000
+ /** Show percentage labels @default true */
3001
+ showPercent?: boolean;
3002
+ /** Show the top "Real-account rate" summary line (stacked variant only) @default true */
3003
+ showSummary?: boolean;
3004
+ /** Size of the stacked bar or individual bars */
3005
+ size?: 'sm' | 'md' | 'lg';
3006
+ /** Locale for digits + default labels @default "fa" */
3007
+ locale?: SupportedLocale;
3008
+ }
3009
+ declare const BotDetectionMeter: React$1.ForwardRefExoticComponent<BotDetectionMeterProps & React$1.RefAttributes<HTMLDivElement>>;
3010
+
3011
+ /**
3012
+ * PageCard (government-flavor) — tracked-account tile for افکارسنجی pages
3013
+ * dashboards. Composes: avatar + handle + platform badge, status (healthy/
3014
+ * degrading/at-risk via StatusKey), follower trend sparkline, engagement
3015
+ * stats, content-type mix, bot-detection percentages.
3016
+ *
3017
+ * Distinct from `ProfileCard` which is influencer-flavored (focus on
3018
+ * engagement tier, follower count, avatar). PageCard is for **tracked
3019
+ * accounts** in monitoring — health and trust signals matter most.
3020
+ */
3021
+ interface PageCardContentMix {
3022
+ /** Photo posts in window (count or %) */
3023
+ photo?: number;
3024
+ /** Video posts in window */
3025
+ video?: number;
3026
+ /** Carousel posts */
3027
+ carousel?: number;
3028
+ /** Story / reel count */
3029
+ story?: number;
3030
+ }
3031
+ interface PageCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
3032
+ /** Account handle / display name (e.g., "@news_agency") */
3033
+ handle: React$1.ReactNode;
3034
+ /** Optional secondary subtitle (e.g., page category) */
3035
+ subtitle?: React$1.ReactNode;
3036
+ /** Avatar URL */
3037
+ avatarSrc?: string;
3038
+ /** Platform — drives the platform badge */
3039
+ platform?: SocialPlatform;
3040
+ /** Operational status (healthy/degrading/at-risk) — uses StatusKey */
3041
+ status?: StatusKey;
3042
+ /** Total followers (current snapshot) */
3043
+ followers?: number;
3044
+ /** Follower-trend sparkline values */
3045
+ followerTrend?: number[];
3046
+ /** Engagement rate (%) */
3047
+ engagementRate?: number;
3048
+ /** Posts per week (recent average) */
3049
+ postsPerWeek?: number;
3050
+ /** Content-type mix (counts or percents) */
3051
+ contentMix?: PageCardContentMix;
3052
+ /** Bot-detection breakdown (real / suspicious / bot) */
3053
+ botDetection?: BotDetectionData;
3054
+ /** Make the entire card clickable */
3055
+ interactive?: boolean;
3056
+ /** Locale @default 'fa' */
3057
+ locale?: SupportedLocale;
3058
+ }
3059
+ declare const PageCard: React$1.ForwardRefExoticComponent<PageCardProps & React$1.RefAttributes<HTMLDivElement>>;
3060
+
1855
3061
  interface PageHeaderProps extends React$1.HTMLAttributes<HTMLDivElement> {
1856
3062
  /** Page title */
1857
3063
  title: string;
@@ -1962,47 +3168,513 @@ declare const PopoverTrigger: React$1.ForwardRefExoticComponent<PopoverPrimitive
1962
3168
  declare const PopoverAnchor: React$1.ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & React$1.RefAttributes<HTMLDivElement>>;
1963
3169
  declare const PopoverContent: React$1.ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
1964
3170
 
1965
- declare const profileCardVariants: (props?: ({
1966
- variant?: "default" | "transparent" | "dark" | null | undefined;
1967
- size?: "sm" | "md" | "lg" | null | undefined;
1968
- } & class_variance_authority_types.ClassProp) | undefined) => string;
1969
- interface ProfileCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
1970
- /**
1971
- * نام کامل کاربر
1972
- */
1973
- name: string;
1974
- /**
1975
- * نام کاربری (username)
1976
- */
1977
- username: string;
1978
- /**
1979
- * آدرس تصویر پروفایل
1980
- */
1981
- avatarSrc?: string;
1982
- /**
1983
- * متن جایگزین برای تصویر
1984
- */
1985
- avatarAlt?: string;
3171
+ /**
3172
+ * PartoHeatMap brand-tinted heatmap with rounded cells, clean axis,
3173
+ * glassmorphic tooltip, and locale-aware formatting.
3174
+ * Built with Visx scales + raw SVG for full control.
3175
+ */
3176
+ interface HeatMapDatum {
3177
+ x: string | number;
3178
+ y: number;
3179
+ }
3180
+ interface HeatMapRow {
3181
+ id: string;
3182
+ data: HeatMapDatum[];
3183
+ }
3184
+ interface PartoHeatMapProps {
3185
+ data: HeatMapRow[];
3186
+ locale?: 'fa' | 'en';
3187
+ className?: string;
3188
+ isLoading?: boolean;
3189
+ ariaLabel?: string;
3190
+ margin?: {
3191
+ top: number;
3192
+ right: number;
3193
+ bottom: number;
3194
+ left: number;
3195
+ };
3196
+ /** Custom color function: receives value and max → returns CSS color */
3197
+ colorScale?: (value: number, max: number) => string;
3198
+ /** Cell border radius */
3199
+ cellRadius?: number;
3200
+ /** Gap between cells */
3201
+ cellGap?: number;
3202
+ /** Custom tooltip content */
3203
+ renderTooltip?: (cell: {
3204
+ rowId: string;
3205
+ x: string | number;
3206
+ value: number;
3207
+ color: string;
3208
+ }) => React$1.ReactNode;
3209
+ /** X axis label */
3210
+ xAxisLabel?: string;
3211
+ /** Y axis label */
3212
+ yAxisLabel?: string;
3213
+ /** Filter which x-axis ticks to show */
3214
+ xTickFilter?: (value: string | number, index: number) => boolean;
3215
+ }
3216
+ declare const PartoHeatMap: React$1.ForwardRefExoticComponent<PartoHeatMapProps & React$1.RefAttributes<HTMLDivElement>>;
3217
+
3218
+ type PostingWeekStart = 'saturday' | 'sunday' | 'monday';
3219
+ interface PostingFrequencyCell {
3220
+ /** Day of week — 0-6. What "0" means depends on `weekStart`. */
3221
+ dayOfWeek: number;
3222
+ /** Hour of day — 0-23 in the display timezone. */
3223
+ hour: number;
3224
+ /** Metric value (typically post count, can also be comments/likes avg). */
3225
+ value: number;
3226
+ }
3227
+ interface PostingFrequencySummary {
3228
+ /** 0–100 composite consistency score (activeDaysRatio + regularity + gap-penalty). */
3229
+ consistencyScore?: number;
3230
+ /** Longest inactivity gap, expressed in **days**. */
3231
+ maxGapDays?: number;
3232
+ /** 0–100 % of days that contain ≥1 post in the analysis window. */
3233
+ activeDaysRatio?: number;
3234
+ /** Total posts in the window (optional, for context in the header). */
3235
+ totalPosts?: number;
3236
+ }
3237
+ /**
3238
+ * Normalize a sparse `PostingFrequencyCell[]` into a full 7×24 grid of
3239
+ * `HeatMapRow`s ordered by `weekStart`. Missing cells are filled with value=0.
3240
+ * Each row's `id` is the English weekday name, matching PartoHeatMap's
3241
+ * internal weekday mapping.
3242
+ */
3243
+ declare function buildPostingFrequencyRows(data: PostingFrequencyCell[], weekStart?: PostingWeekStart): HeatMapRow[];
3244
+ interface PostingFrequencyHeatmapProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'title'> {
3245
+ /** Per-cell activity. Sparse input is fine — missing cells render as 0. */
3246
+ data: PostingFrequencyCell[];
3247
+ /** Which day logically occupies row 0. @default "saturday" for fa/ar, "sunday" for en. */
3248
+ weekStart?: PostingWeekStart;
3249
+ /** Optional summary stats shown in the header row. */
3250
+ summary?: PostingFrequencySummary;
3251
+ /** Card title. */
3252
+ title?: React$1.ReactNode;
3253
+ /** Short description below title. */
3254
+ description?: React$1.ReactNode;
1986
3255
  /**
1987
- * حروف اولیه برای fallback (اختیاری)
3256
+ * Metric label for the tooltip (e.g., "پست", "نظر", "لایک"). Default uses
3257
+ * the locale-specific "Posts" label.
1988
3258
  */
1989
- initials?: string;
3259
+ metricLabel?: React$1.ReactNode;
3260
+ /** Show the summary row @default true (when `summary` is provided) */
3261
+ showSummary?: boolean;
3262
+ /** Height of the heatmap chart in px @default 240 */
3263
+ chartHeight?: number;
3264
+ /** Loading state */
3265
+ isLoading?: boolean;
3266
+ /** Locale @default "fa" */
3267
+ locale?: SupportedLocale;
1990
3268
  /**
1991
- * تعداد فالوورها
3269
+ * Custom PartoHeatMap props to pass through (e.g., colorScale override,
3270
+ * margin). Avoid setting `data` / `locale` here; use the outer props.
1992
3271
  */
3272
+ heatmapProps?: Omit<PartoHeatMapProps, 'data' | 'locale' | 'isLoading' | 'renderTooltip'>;
3273
+ }
3274
+ declare const PostingFrequencyHeatmap: React$1.ForwardRefExoticComponent<PostingFrequencyHeatmapProps & React$1.RefAttributes<HTMLDivElement>>;
3275
+
3276
+ /**
3277
+ * Platform sources supported by `<PostCard>`. Extends the existing `SocialPlatform`
3278
+ * for Phase 1; additional sources (`facebook`, `news`, `tv`, `radio`) land in Phase 2
3279
+ * together with the `SocialPlatformBadge` extension.
3280
+ */
3281
+ type PostPlatform = SocialPlatform;
3282
+ type PostDensity = 'compact' | 'comfortable';
3283
+ type PostSentiment = 'positive' | 'negative' | 'neutral' | 'mixed';
3284
+ interface PostAuthor {
3285
+ name: string;
3286
+ handle?: string;
3287
+ avatarUrl?: string;
3288
+ verified?: boolean;
3289
+ /** Optional follower / subscriber count — used in PostDetailsModal sidebar. */
1993
3290
  followers?: number;
1994
- /**
1995
- * آیکون فالوور
1996
- */
1997
- followersIcon?: React$1.ReactNode;
1998
- /**
1999
- * تابع کلیک روی کارت
2000
- */
2001
- onCardClick?: () => void;
2002
- /**
2003
- * استایل حاشیه آواتار
2004
- */
2005
- avatarBorderVariant?: 'gold' | 'primary' | 'none';
3291
+ }
3292
+ interface PostMetrics {
3293
+ views?: number;
3294
+ likes?: number;
3295
+ comments?: number;
3296
+ shares?: number;
3297
+ /** Estimated reach / potential audience. */
3298
+ reach?: number;
3299
+ /** Engagement rate as a 0..1 decimal (e.g. 0.034 = 3.4%). */
3300
+ engagementRate?: number;
3301
+ }
3302
+ interface PostTag {
3303
+ id: string;
3304
+ label: string;
3305
+ /** Optional CSS var (e.g. `--chart-1`) or hex color. Auto-assigned from label if omitted. */
3306
+ color?: string;
3307
+ }
3308
+ /**
3309
+ * Flags indicate which enrichments the product has attached to this post.
3310
+ * Consumers set these to show the matching chip in `<PostHeader>`.
3311
+ */
3312
+ interface PostEnrichmentFlags {
3313
+ ocr?: boolean;
3314
+ transcript?: boolean;
3315
+ aiAnalysis?: boolean;
3316
+ commentCount?: number;
3317
+ }
3318
+ interface PostMediaItem {
3319
+ url: string;
3320
+ thumbnailUrl?: string;
3321
+ /** Natural aspect ratio (width / height). If omitted, defaults to 1. */
3322
+ aspectRatio?: number;
3323
+ alt?: string;
3324
+ type?: 'image' | 'video';
3325
+ /** Duration in seconds for video. */
3326
+ duration?: number;
3327
+ }
3328
+ type PostBodyData = {
3329
+ type: 'text';
3330
+ text: string;
3331
+ } | {
3332
+ type: 'media-single';
3333
+ media: PostMediaItem;
3334
+ caption?: string;
3335
+ } | {
3336
+ type: 'media-carousel';
3337
+ items: PostMediaItem[];
3338
+ caption?: string;
3339
+ } | {
3340
+ type: 'video';
3341
+ media: PostMediaItem;
3342
+ caption?: string;
3343
+ } | {
3344
+ type: 'missing-media';
3345
+ caption?: string;
3346
+ reason?: string;
3347
+ };
3348
+ interface PostData {
3349
+ id: string;
3350
+ source: PostPlatform;
3351
+ author: PostAuthor;
3352
+ /** Post creation time. Accepts Date, ISO string, or unix ms. */
3353
+ timestamp: Date | string | number;
3354
+ body: PostBodyData;
3355
+ metrics?: PostMetrics;
3356
+ sentiment?: PostSentiment;
3357
+ enrichments?: PostEnrichmentFlags;
3358
+ /** User-defined category tags (topic, campaign, issue type). */
3359
+ tags?: PostTag[];
3360
+ /** Authority / influence score 0..100 — used to flag high-impact mentions. */
3361
+ authorityScore?: number;
3362
+ /** ISO language code detected for the post. */
3363
+ language?: string;
3364
+ /** URL to the post at the source platform (used by default "view at source" action). */
3365
+ sourceUrl?: string;
3366
+ }
3367
+ interface PostAction {
3368
+ id: string;
3369
+ label: string;
3370
+ icon: LucideIcon;
3371
+ variant?: 'default' | 'danger';
3372
+ onClick: (post: PostData) => void;
3373
+ disabled?: boolean;
3374
+ hidden?: boolean;
3375
+ }
3376
+ interface PostCommentAuthor {
3377
+ name: string;
3378
+ handle?: string;
3379
+ avatarUrl?: string;
3380
+ verified?: boolean;
3381
+ }
3382
+ interface PostComment {
3383
+ id: string;
3384
+ author: PostCommentAuthor;
3385
+ text: string;
3386
+ timestamp: Date | string | number;
3387
+ sentiment?: PostSentiment;
3388
+ likes?: number;
3389
+ replies?: PostComment[];
3390
+ /** Pinned by post author (Instagram, YouTube). */
3391
+ pinned?: boolean;
3392
+ /** Indicates this is a reply from the original post author. */
3393
+ authorReply?: boolean;
3394
+ }
3395
+ type PostEmotion = 'anger' | 'anticipation' | 'joy' | 'trust' | 'fear' | 'surprise' | 'sadness' | 'disgust' | 'neutral';
3396
+ type PostIntent = 'complaint' | 'praise' | 'question' | 'announcement' | 'comparison' | 'opinion' | 'info';
3397
+ interface PostAiEntity {
3398
+ text: string;
3399
+ type: 'person' | 'brand' | 'place' | 'product' | 'event' | 'organization';
3400
+ }
3401
+ interface PostAiAnalysis {
3402
+ /** Auto-generated summary of the post. */
3403
+ summary?: string;
3404
+ /** Key topics mentioned in the post. */
3405
+ topics?: string[];
3406
+ /** Named entities detected. */
3407
+ entities?: PostAiEntity[];
3408
+ /** Primary intent classification. */
3409
+ intent?: PostIntent;
3410
+ /** 9-class emotion distribution (raw counts or normalized). */
3411
+ emotions?: Partial<Record<PostEmotion, number>>;
3412
+ /** Flagged risks / sensitive content categories. */
3413
+ risks?: string[];
3414
+ /** Influence tier estimate for the author. */
3415
+ influenceTier?: 'nano' | 'micro' | 'macro' | 'mega';
3416
+ /** Model confidence 0..1 for overall analysis. */
3417
+ confidence?: number;
3418
+ /** Analysis generation timestamp. */
3419
+ generatedAt?: Date | string | number;
3420
+ }
3421
+ /** Platform-specific metadata, discriminated by `platform` (matches `PostData.source`). */
3422
+ type PlatformMetadata = {
3423
+ platform: 'instagram';
3424
+ postType?: 'feed' | 'reel' | 'story' | 'carousel' | 'igtv';
3425
+ location?: string;
3426
+ music?: {
3427
+ title: string;
3428
+ artist?: string;
3429
+ };
3430
+ saveCount?: number;
3431
+ collaborators?: string[];
3432
+ /** Hashtags used in the post. */
3433
+ hashtags?: string[];
3434
+ } | {
3435
+ platform: 'twitter';
3436
+ tweetType?: 'original' | 'retweet' | 'quote' | 'reply';
3437
+ quotedTweetUrl?: string;
3438
+ inReplyTo?: string;
3439
+ retweetCount?: number;
3440
+ quoteCount?: number;
3441
+ bookmarkCount?: number;
3442
+ isThread?: boolean;
3443
+ /** Count of additional posts in the thread. */
3444
+ threadLength?: number;
3445
+ } | {
3446
+ platform: 'youtube';
3447
+ videoType?: 'video' | 'short' | 'live' | 'premiere';
3448
+ channelSubscribers?: number;
3449
+ dislikes?: number;
3450
+ category?: string;
3451
+ tags?: string[];
3452
+ } | {
3453
+ platform: 'telegram';
3454
+ channelName?: string;
3455
+ channelSubscribers?: number;
3456
+ forwardCount?: number;
3457
+ isChannel?: boolean;
3458
+ /** Map of emoji → count, e.g. { '👍': 42, '❤️': 12 }. */
3459
+ reactionCounts?: Record<string, number>;
3460
+ } | {
3461
+ platform: 'tiktok';
3462
+ videoType?: 'video' | 'duet' | 'stitch' | 'live';
3463
+ music?: {
3464
+ title: string;
3465
+ artist?: string;
3466
+ };
3467
+ duetWith?: string;
3468
+ saveCount?: number;
3469
+ effects?: string[];
3470
+ } | {
3471
+ platform: 'linkedin';
3472
+ postType?: 'post' | 'article' | 'poll' | 'document';
3473
+ reactions?: {
3474
+ like?: number;
3475
+ celebrate?: number;
3476
+ support?: number;
3477
+ love?: number;
3478
+ insightful?: number;
3479
+ funny?: number;
3480
+ };
3481
+ repostCount?: number;
3482
+ industry?: string;
3483
+ } | {
3484
+ platform: 'threads';
3485
+ replyControls?: 'anyone' | 'followed' | 'mentioned';
3486
+ repostCount?: number;
3487
+ quoteCount?: number;
3488
+ };
3489
+ /** Extended post details — optionally attached to PostData when fetching full view. */
3490
+ interface PostDetails {
3491
+ comments?: PostComment[];
3492
+ aiAnalysis?: PostAiAnalysis;
3493
+ /** Text extracted from images via OCR. */
3494
+ ocrText?: string;
3495
+ /** Transcript for audio / video content. */
3496
+ transcript?: string;
3497
+ /** Platform-specific metadata block. */
3498
+ platformMeta?: PlatformMetadata;
3499
+ }
3500
+
3501
+ declare const postCardVariants: (props?: ({
3502
+ density?: "compact" | "comfortable" | null | undefined;
3503
+ selected?: boolean | null | undefined;
3504
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
3505
+ interface PostCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'onSelect'>, VariantProps<typeof postCardVariants> {
3506
+ post: PostData;
3507
+ density?: PostDensity;
3508
+ selected?: boolean;
3509
+ read?: boolean;
3510
+ actions?: PostAction[];
3511
+ onOpen?: (post: PostData) => void;
3512
+ onSelect?: (post: PostData, selected: boolean) => void;
3513
+ selectable?: boolean;
3514
+ /** Fired when user clicks the details action (Maximize2 icon). Wires up the default details action. */
3515
+ onOpenDetails?: (post: PostData) => void;
3516
+ }
3517
+ declare function defaultActions(handlers?: {
3518
+ onOpenDetails?: (post: PostData) => void;
3519
+ }): PostAction[];
3520
+ declare const PostCard: React$1.ForwardRefExoticComponent<PostCardProps & React$1.RefAttributes<HTMLDivElement>>;
3521
+
3522
+ declare const postHeaderVariants: (props?: ({
3523
+ density?: "compact" | "comfortable" | null | undefined;
3524
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
3525
+ interface PostHeaderProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'children'>, VariantProps<typeof postHeaderVariants> {
3526
+ author: PostAuthor;
3527
+ platform: PostPlatform;
3528
+ timestamp: Date | string | number;
3529
+ sentiment?: PostSentiment;
3530
+ enrichments?: PostEnrichmentFlags;
3531
+ density?: PostDensity;
3532
+ /** Override avatar size. */
3533
+ avatarClassName?: string;
3534
+ }
3535
+ declare const PostHeader: React$1.ForwardRefExoticComponent<PostHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
3536
+
3537
+ /**
3538
+ * Aspect-ratio helpers for post media.
3539
+ *
3540
+ * Platforms deliver media in many ratios (1:1, 4:5, 9:16, 16:9, …). The post
3541
+ * component system normalizes aspect ratios per display context so a feed of
3542
+ * mixed content looks consistent without cropping away information.
3543
+ *
3544
+ * Rules (spec §Aspect-Ratio Handling):
3545
+ * - `compact` → always 1:1 thumbnail (center-crop via object-cover).
3546
+ * - `comfortable` → container clamps aspect to [4:5, 16:9]; media inside is
3547
+ * letterboxed via `object-contain` so nothing is cropped.
3548
+ * Callers typically render a blurred backdrop of the same
3549
+ * media behind the letterboxed image to fill empty space.
3550
+ * - `detail` → preserve natural ratio; cap max-h-[70vh] for tall portraits.
3551
+ */
3552
+ type AspectContext = 'compact' | 'comfortable' | 'detail';
3553
+
3554
+ interface PostBodyProps extends React$1.HTMLAttributes<HTMLDivElement> {
3555
+ body: PostBodyData;
3556
+ /** Display context — drives aspect handling + text clamping. */
3557
+ context: AspectContext;
3558
+ /** Compact mode shows only a thumbnail; body text is rendered by parent. */
3559
+ thumbnailOnly?: boolean;
3560
+ }
3561
+ declare const PostBody: React$1.ForwardRefExoticComponent<PostBodyProps & React$1.RefAttributes<HTMLDivElement>>;
3562
+
3563
+ interface PostActionsProps extends React$1.HTMLAttributes<HTMLDivElement> {
3564
+ post: PostData;
3565
+ actions: PostAction[];
3566
+ /** Number of primary (inline) actions to render. Remaining flow into the overflow menu. */
3567
+ primaryCount?: number;
3568
+ /** Compact layout hides inline labels, shows icon-only buttons. */
3569
+ compact?: boolean;
3570
+ }
3571
+ declare const PostActions: React$1.ForwardRefExoticComponent<PostActionsProps & React$1.RefAttributes<HTMLDivElement>>;
3572
+
3573
+ interface PostMetadataProps extends React$1.HTMLAttributes<HTMLDivElement> {
3574
+ metrics?: PostMetrics;
3575
+ sentiment?: PostSentiment;
3576
+ density?: PostDensity;
3577
+ /** Hide the sentiment badge (dot still rendered in header in compact mode). */
3578
+ hideSentiment?: boolean;
3579
+ }
3580
+ declare const PostMetadata: React$1.ForwardRefExoticComponent<PostMetadataProps & React$1.RefAttributes<HTMLDivElement>>;
3581
+
3582
+ interface PostListProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'onSelect'> {
3583
+ posts: PostData[];
3584
+ /** Controlled density. If omitted, the list manages its own state (persisted to localStorage). */
3585
+ density?: PostDensity;
3586
+ onDensityChange?: (density: PostDensity) => void;
3587
+ /** ID of the currently open/selected post (for URL deep-linking). */
3588
+ activeId?: string;
3589
+ /** IDs of posts that have been visited (visual "read" state). */
3590
+ readIds?: ReadonlyArray<string> | ReadonlySet<string>;
3591
+ /** IDs of selected posts for bulk actions. */
3592
+ selectedIds?: ReadonlyArray<string> | ReadonlySet<string>;
3593
+ onSelectedIdsChange?: (ids: string[]) => void;
3594
+ onOpen?: (post: PostData) => void;
3595
+ /** Fired when the user triggers the default "view details" action on any card. */
3596
+ onOpenDetails?: (post: PostData) => void;
3597
+ /** Per-post action set. If omitted, each card uses its defaults. */
3598
+ actions?: PostAction[];
3599
+ /** Render the density toggle in the toolbar. Defaults to true. */
3600
+ showToolbar?: boolean;
3601
+ /** Custom toolbar content rendered next to the density toggle. */
3602
+ toolbarExtra?: React$1.ReactNode;
3603
+ }
3604
+ declare const PostList: React$1.ForwardRefExoticComponent<PostListProps & React$1.RefAttributes<HTMLDivElement>>;
3605
+
3606
+ type PostDetailsTab = 'post' | 'comments' | 'analysis' | 'transcript';
3607
+ interface PostDetailsModalProps {
3608
+ /** Controls modal open state. */
3609
+ open: boolean;
3610
+ onOpenChange: (open: boolean) => void;
3611
+ /** The post being viewed. If null/undefined, the modal renders nothing. */
3612
+ post?: PostData | null;
3613
+ /** Extended details — comments, AI analysis, OCR, platform metadata. */
3614
+ details?: PostDetails;
3615
+ /** Callback when user opens the source. Falls back to `post.sourceUrl`. */
3616
+ onOpenSource?: (post: PostData) => void;
3617
+ /** Loading state — true while fetching extended details. */
3618
+ isLoading?: boolean;
3619
+ /** Error state — when set, renders an error panel with optional retry. */
3620
+ error?: string | Error | null;
3621
+ /** Fires when user clicks "retry" on the error panel. */
3622
+ onRetry?: () => void;
3623
+ /** Which tab to open first @default "post" */
3624
+ defaultTab?: PostDetailsTab;
3625
+ /** Dialog size. @default "lg" (~1024px) */
3626
+ size?: 'md' | 'lg' | 'xl';
3627
+ /** Show the bookmark toggle. When `onBookmark` is set, the button appears. */
3628
+ bookmarked?: boolean;
3629
+ onBookmark?: (post: PostData, next: boolean) => void;
3630
+ /** Override default clipboard writer. */
3631
+ onCopyLink?: (post: PostData, url: string) => void;
3632
+ /** Extra action slot (rendered at logical-end of the top action bar — e.g. a dropdown/"more" menu). */
3633
+ headerActions?: React$1.ReactNode;
3634
+ }
3635
+ declare const PostDetailsModal: React$1.FC<PostDetailsModalProps>;
3636
+
3637
+ declare const profileCardVariants: (props?: ({
3638
+ variant?: "default" | "transparent" | "dark" | null | undefined;
3639
+ size?: "sm" | "md" | "lg" | null | undefined;
3640
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
3641
+ interface ProfileCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
3642
+ /**
3643
+ * نام کامل کاربر
3644
+ */
3645
+ name: string;
3646
+ /**
3647
+ * نام کاربری (username)
3648
+ */
3649
+ username: string;
3650
+ /**
3651
+ * آدرس تصویر پروفایل
3652
+ */
3653
+ avatarSrc?: string;
3654
+ /**
3655
+ * متن جایگزین برای تصویر
3656
+ */
3657
+ avatarAlt?: string;
3658
+ /**
3659
+ * حروف اولیه برای fallback (اختیاری)
3660
+ */
3661
+ initials?: string;
3662
+ /**
3663
+ * تعداد فالوورها
3664
+ */
3665
+ followers?: number;
3666
+ /**
3667
+ * آیکون فالوور
3668
+ */
3669
+ followersIcon?: React$1.ReactNode;
3670
+ /**
3671
+ * تابع کلیک روی کارت
3672
+ */
3673
+ onCardClick?: () => void;
3674
+ /**
3675
+ * استایل حاشیه آواتار
3676
+ */
3677
+ avatarBorderVariant?: 'gold' | 'primary' | 'none';
2006
3678
  /**
2007
3679
  * اندازه کامپوننت
2008
3680
  */
@@ -2111,6 +3783,71 @@ interface EngagementRateProps extends React$1.HTMLAttributes<HTMLDivElement> {
2111
3783
  }
2112
3784
  declare const EngagementRate: React$1.ForwardRefExoticComponent<EngagementRateProps & React$1.RefAttributes<HTMLDivElement>>;
2113
3785
 
3786
+ interface BenchmarkTier {
3787
+ /** Optional label shown below the segment (e.g., "عالی"). */
3788
+ label?: React$1.ReactNode;
3789
+ /** Inclusive upper bound of this tier. Use Infinity for the last tier. */
3790
+ max: number;
3791
+ /** CSS color — accepts any CSS value, including `hsl(var(--token))`. */
3792
+ color: string;
3793
+ }
3794
+ interface BenchmarkMarker {
3795
+ /** Position on the scale. Clamped to [min, max]. */
3796
+ value: number;
3797
+ /** Optional label shown above the marker (e.g., "میانگین صنعت"). */
3798
+ label?: React$1.ReactNode;
3799
+ /** Override the marker colour @default foreground */
3800
+ color?: string;
3801
+ }
3802
+ /**
3803
+ * Default 4-tier benchmark for engagement rate (percent). Thresholds picked
3804
+ * for general social media (Instagram/Twitter/YouTube) — override with
3805
+ * `getEngagementRateBenchmarkTiers` for follower-tiered thresholds.
3806
+ *
3807
+ * - 0–1% → poor
3808
+ * - 1–2.5% → moderate
3809
+ * - 2.5–5% → good
3810
+ * - >5% → excellent
3811
+ */
3812
+ declare function getEngagementRateBenchmarkTiers(locale?: SupportedLocale): BenchmarkTier[];
3813
+ /**
3814
+ * Default 4-tier for a 0-100 score scale (e.g., Page Evaluation overall score).
3815
+ * Thresholds: <40 poor, 40-60 moderate, 60-80 good, >=80 excellent.
3816
+ */
3817
+ declare function getScoreBenchmarkTiers(locale?: SupportedLocale): BenchmarkTier[];
3818
+ /** Find which tier index contains value `v`. */
3819
+ declare function findTierIndex(value: number, tiers: BenchmarkTier[]): number;
3820
+ interface EngagementRateBenchmarkProps extends React$1.HTMLAttributes<HTMLDivElement> {
3821
+ /** The value to mark on the scale (typically engagement rate in %). */
3822
+ value: number;
3823
+ /** Scale start @default 0 */
3824
+ min?: number;
3825
+ /** Scale end @default 10 (engagement rate %) */
3826
+ max?: number;
3827
+ /** Tier segments. Must be ordered by ascending `max`. @default getEngagementRateBenchmarkTiers(locale) */
3828
+ tiers?: BenchmarkTier[];
3829
+ /** Optional comparison markers (industry average, target, …) */
3830
+ benchmarks?: BenchmarkMarker[];
3831
+ /**
3832
+ * Label for the primary value marker. If omitted, renders the value with
3833
+ * localized digits + "٪" (fa/ar) or "%" (en).
3834
+ */
3835
+ valueLabel?: React$1.ReactNode;
3836
+ /** Show the numeric min/max under the bar @default true */
3837
+ showScale?: boolean;
3838
+ /** Show tier labels below each segment @default false */
3839
+ showTierLabels?: boolean;
3840
+ /** Bar height @default "md" */
3841
+ size?: 'sm' | 'md' | 'lg';
3842
+ /** Hide the primary value marker (e.g., when rendering multiple benchmarks only) */
3843
+ hideValueMarker?: boolean;
3844
+ /** Locale for digit + default label formatting @default "fa" */
3845
+ locale?: SupportedLocale;
3846
+ /** Number of decimals for scale labels @default 0 or 1 depending on max */
3847
+ scaleDecimals?: number;
3848
+ }
3849
+ declare const EngagementRateBenchmark: React$1.ForwardRefExoticComponent<EngagementRateBenchmarkProps & React$1.RefAttributes<HTMLDivElement>>;
3850
+
2114
3851
  interface EngagementRateBarProps extends React$1.HTMLAttributes<HTMLDivElement> {
2115
3852
  /**
2116
3853
  * نرخ تعامل فعلی (به صورت عدد اعشاری، مثلاً 0.05710 برای 5.710%)
@@ -2147,7 +3884,7 @@ declare const progressVariants: (props?: ({
2147
3884
  size?: "sm" | "md" | "lg" | null | undefined;
2148
3885
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2149
3886
  declare const progressIndicatorVariants: (props?: ({
2150
- variant?: "success" | "warning" | "destructive" | "primary" | "secondary" | null | undefined;
3887
+ variant?: "warning" | "success" | "destructive" | "primary" | "secondary" | null | undefined;
2151
3888
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2152
3889
  interface ProgressProps extends React$1.ComponentProps<typeof ProgressPrimitive.Root>, VariantProps<typeof progressVariants>, VariantProps<typeof progressIndicatorVariants> {
2153
3890
  label?: string;
@@ -2155,9 +3892,82 @@ interface ProgressProps extends React$1.ComponentProps<typeof ProgressPrimitive.
2155
3892
  }
2156
3893
  declare const Progress: React$1.ForwardRefExoticComponent<Omit<ProgressProps, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
2157
3894
 
3895
+ interface QuotaThresholds {
3896
+ /** Ratio (0..1) at which bar turns amber. @default 0.7 */
3897
+ amber: number;
3898
+ /** Ratio (0..1) at which bar turns orange. @default 0.9 */
3899
+ orange: number;
3900
+ /** Ratio (0..1) at which bar turns destructive. @default 1 */
3901
+ red: number;
3902
+ }
3903
+ declare const DEFAULT_THRESHOLDS: QuotaThresholds;
3904
+ type QuotaLevel = 'ok' | 'amber' | 'orange' | 'red';
3905
+ declare function resolveLevel(ratio: number, thresholds: QuotaThresholds): QuotaLevel;
3906
+ interface QuotaProgressBarProps extends React$1.HTMLAttributes<HTMLDivElement> {
3907
+ /** Units consumed so far (clamped to >= 0). */
3908
+ used: number;
3909
+ /** Total units allowed. Must be > 0. */
3910
+ limit: number;
3911
+ /** Optional label shown before the bar (e.g., "لایک روزانه") */
3912
+ label?: React$1.ReactNode;
3913
+ /**
3914
+ * When set, renders a colour-coded dot + default label ("پسندیدن"/"Like"/…).
3915
+ * Convenience for quota-by-action-type display; skip for generic quotas.
3916
+ */
3917
+ actionType?: ActionTypeKey;
3918
+ /** Show `used / limit` text on trailing end @default true */
3919
+ showCount?: boolean;
3920
+ /** Show percentage next to count @default false */
3921
+ showPercent?: boolean;
3922
+ /** Show ⚠ icon when the bar is at `orange` or `red` level @default true */
3923
+ showWarningIcon?: boolean;
3924
+ /** Bar height @default "sm" */
3925
+ size?: 'xs' | 'sm' | 'md' | 'lg';
3926
+ /**
3927
+ * Override colour thresholds. Ratios are `used / limit`. Defaults:
3928
+ * - amber: 0.7, orange: 0.9, red: 1.
3929
+ */
3930
+ thresholds?: Partial<QuotaThresholds>;
3931
+ /** Locale for digit + default label formatting @default "fa" */
3932
+ locale?: SupportedLocale;
3933
+ /**
3934
+ * Allow the bar to visually extend past 100% when quota is over-consumed.
3935
+ * When `true`, the fill stays at 100% of the track but a repeating stripe
3936
+ * pattern + red glow signals overflow. @default false (clamp to 100%)
3937
+ */
3938
+ showOverflow?: boolean;
3939
+ }
3940
+ declare const QuotaProgressBar: React$1.ForwardRefExoticComponent<QuotaProgressBarProps & React$1.RefAttributes<HTMLDivElement>>;
3941
+
2158
3942
  declare const RadioGroup: React$1.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
2159
3943
  declare const RadioGroupItem: React$1.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupItemProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
2160
3944
 
3945
+ interface RateLimitBannerProps extends Omit<BannerProps, 'variant' | 'icon' | 'action' | 'children'> {
3946
+ /** When the cooldown ends — Date, ISO string, or epoch ms */
3947
+ resumeAt: Date | string | number;
3948
+ /** Which action is rate-limited — renders in the title (e.g., «پسندیدن متوقف شده») */
3949
+ actionType?: ActionTypeKey;
3950
+ /** Short explanation (1-2 sentences). Falls back to a locale-specific generic. */
3951
+ reason?: React$1.ReactNode;
3952
+ /**
3953
+ * Whether to re-render every second so the countdown ticks live.
3954
+ * @default true
3955
+ */
3956
+ live?: boolean;
3957
+ /** Visual tone @default "destructive" */
3958
+ variant?: 'destructive' | 'warning';
3959
+ /**
3960
+ * Callback to retry the operation now (ignores cooldown). Rendered as an
3961
+ * action button when provided.
3962
+ */
3963
+ onRetryNow?: () => void;
3964
+ /** Override label for the retry button */
3965
+ retryLabel?: React$1.ReactNode;
3966
+ /** Locale for default strings + countdown @default "fa" */
3967
+ locale?: SupportedLocale;
3968
+ }
3969
+ declare const RateLimitBanner: React$1.ForwardRefExoticComponent<RateLimitBannerProps & React$1.RefAttributes<HTMLDivElement>>;
3970
+
2161
3971
  declare const RadioCards: React$1.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
2162
3972
  columns?: number;
2163
3973
  dir?: "rtl" | "ltr";
@@ -2269,12 +4079,23 @@ type SidebarContextProps = {
2269
4079
  setOpenMobile: (open: boolean) => void;
2270
4080
  isMobile: boolean;
2271
4081
  toggleSidebar: () => void;
4082
+ /**
4083
+ * When true, the sidebar is positioned absolutely within its parent wrapper
4084
+ * instead of fixed to the viewport. Use inside bounded previews, cards,
4085
+ * or anywhere the sidebar should not escape its container.
4086
+ */
4087
+ contained: boolean;
2272
4088
  };
2273
4089
  declare function useSidebar(): SidebarContextProps;
2274
- declare function SidebarProvider({ defaultOpen, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }: React$1.ComponentProps<'div'> & {
4090
+ declare function SidebarProvider({ defaultOpen, open: openProp, onOpenChange: setOpenProp, contained, className, style, children, ...props }: React$1.ComponentProps<'div'> & {
2275
4091
  defaultOpen?: boolean;
2276
4092
  open?: boolean;
2277
4093
  onOpenChange?: (open: boolean) => void;
4094
+ /**
4095
+ * When true, the sidebar is positioned absolutely within this provider
4096
+ * instead of fixed to the viewport. Use inside bounded previews or cards.
4097
+ */
4098
+ contained?: boolean;
2278
4099
  }): react_jsx_runtime.JSX.Element;
2279
4100
  declare function Sidebar({ side, variant, collapsible, className, children, ...props }: React$1.ComponentProps<'div'> & {
2280
4101
  side?: 'left' | 'right';
@@ -2410,6 +4231,85 @@ declare function TableSkeleton({ rows, className }: TableSkeletonProps): react_j
2410
4231
  declare namespace TableSkeleton {
2411
4232
  var displayName: string;
2412
4233
  }
4234
+ interface TableRowSkeletonProps {
4235
+ /** Number of cells in the row */
4236
+ cells?: number;
4237
+ className?: string;
4238
+ }
4239
+ declare function TableRowSkeleton({ cells, className }: TableRowSkeletonProps): react_jsx_runtime.JSX.Element;
4240
+ declare namespace TableRowSkeleton {
4241
+ var displayName: string;
4242
+ }
4243
+ interface CardSkeletonProps {
4244
+ /** Show a leading image/thumbnail block @default false */
4245
+ withImage?: boolean;
4246
+ /** Aspect ratio of the image (when withImage) @default 'video' */
4247
+ imageAspect?: 'video' | 'square' | 'wide';
4248
+ /** Number of body lines @default 2 */
4249
+ bodyLines?: number;
4250
+ /** Show a footer row (button-shaped placeholder) @default false */
4251
+ withFooter?: boolean;
4252
+ className?: string;
4253
+ }
4254
+ declare function CardSkeleton({ withImage, imageAspect, bodyLines, withFooter, className, }: CardSkeletonProps): react_jsx_runtime.JSX.Element;
4255
+ declare namespace CardSkeleton {
4256
+ var displayName: string;
4257
+ }
4258
+ interface AvatarTextSkeletonProps {
4259
+ /** Avatar size @default 'md' */
4260
+ size?: 'sm' | 'md' | 'lg';
4261
+ /** Number of text lines beside the avatar @default 2 */
4262
+ lines?: number;
4263
+ className?: string;
4264
+ }
4265
+ declare function AvatarTextSkeleton({ size, lines, className }: AvatarTextSkeletonProps): react_jsx_runtime.JSX.Element;
4266
+ declare namespace AvatarTextSkeleton {
4267
+ var displayName: string;
4268
+ }
4269
+ interface FormRowSkeletonProps {
4270
+ /** Field shape — 'input' (one-line), 'textarea' (3-line), 'select' (input + chevron) */
4271
+ field?: 'input' | 'textarea' | 'select';
4272
+ /** Show help text line below input @default false */
4273
+ withHelp?: boolean;
4274
+ className?: string;
4275
+ }
4276
+ declare function FormRowSkeleton({ field, withHelp, className }: FormRowSkeletonProps): react_jsx_runtime.JSX.Element;
4277
+ declare namespace FormRowSkeleton {
4278
+ var displayName: string;
4279
+ }
4280
+
4281
+ type SparklineTrend = 'up' | 'down' | 'neutral' | 'auto';
4282
+ type SparklineVariant = 'line' | 'area' | 'bars';
4283
+ interface SparklineProps extends React$1.HTMLAttributes<HTMLDivElement> {
4284
+ /** Array of numeric data points. Must have at least 2 items to render line/area. */
4285
+ data: number[];
4286
+ /** Visual style @default "line" */
4287
+ variant?: SparklineVariant;
4288
+ /**
4289
+ * Trend colour. `"auto"` compares first and last point:
4290
+ * last > first → up, last < first → down, equal → neutral.
4291
+ * Pass an explicit value to override.
4292
+ * @default "auto"
4293
+ */
4294
+ trend?: SparklineTrend;
4295
+ /** Width in px. Also used as SVG viewBox width — output scales to parent when CSS overrides. @default 80 */
4296
+ width?: number;
4297
+ /** Height in px @default 24 */
4298
+ height?: number;
4299
+ /** Line / bar stroke width @default 1.5 */
4300
+ strokeWidth?: number;
4301
+ /** Show a filled dot at the last point */
4302
+ showEndDot?: boolean;
4303
+ /** Padding inside the viewBox so strokes/dots are not clipped @default 2 */
4304
+ padding?: number;
4305
+ /** Override color with any CSS value (e.g. `"hsl(var(--brand))"`). Takes precedence over `trend`. */
4306
+ color?: string;
4307
+ /** For bars variant — gap between bars in user units @default 1 */
4308
+ barGap?: number;
4309
+ /** aria-label for screen readers — describe the trend / metric */
4310
+ 'aria-label'?: string;
4311
+ }
4312
+ declare const Sparkline: React$1.ForwardRefExoticComponent<SparklineProps & React$1.RefAttributes<HTMLDivElement>>;
2413
4313
 
2414
4314
  declare function Slider({ className, defaultValue, value, min, max, dir, ...props }: React$1.ComponentProps<typeof SliderPrimitive.Root>): react_jsx_runtime.JSX.Element;
2415
4315
  declare namespace Slider {
@@ -2432,7 +4332,7 @@ interface SpinnerProps extends React$1.HTMLAttributes<HTMLSpanElement>, VariantP
2432
4332
  declare const Spinner: React$1.ForwardRefExoticComponent<SpinnerProps & React$1.RefAttributes<HTMLSpanElement>>;
2433
4333
 
2434
4334
  declare const switchRootVariants: (props?: ({
2435
- size?: "sm" | "md" | "lg" | "small" | "medium" | "large" | null | undefined;
4335
+ size?: "medium" | "sm" | "md" | "lg" | "small" | "large" | null | undefined;
2436
4336
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2437
4337
  interface SwitchProps extends React$1.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>, VariantProps<typeof switchRootVariants> {
2438
4338
  }
@@ -2626,6 +4526,188 @@ interface StepProps extends React$1.HTMLAttributes<HTMLDivElement> {
2626
4526
  declare const Stepper: React$1.ForwardRefExoticComponent<StepperProps & React$1.RefAttributes<HTMLDivElement>>;
2627
4527
  declare const Step: React$1.ForwardRefExoticComponent<StepProps & React$1.RefAttributes<HTMLDivElement>>;
2628
4528
 
4529
+ interface StatusFlowStageData {
4530
+ /** Stable identifier */
4531
+ id: string;
4532
+ /** Display label */
4533
+ label: React$1.ReactNode;
4534
+ /** Optional one-line description under the label */
4535
+ description?: React$1.ReactNode;
4536
+ /** Optional trailing meta (duration, count, …) shown next to the label */
4537
+ meta?: React$1.ReactNode;
4538
+ /** Status of this stage */
4539
+ status: StageStatusKey;
4540
+ /** Progress 0-100 within this stage. Rendered only when `status === "running"`. */
4541
+ progress?: number;
4542
+ }
4543
+ type StatusFlowOrientation = 'horizontal' | 'vertical';
4544
+ type StatusFlowSize = 'sm' | 'md' | 'lg';
4545
+ interface StatusFlowProps extends Omit<React$1.OlHTMLAttributes<HTMLOListElement>, 'children'> {
4546
+ /** Data-driven stage list. Mutually exclusive with `children`. */
4547
+ stages?: StatusFlowStageData[];
4548
+ /** Composition API — an array of `<StatusFlowStage>` children. */
4549
+ children?: React$1.ReactNode;
4550
+ /** Layout @default "horizontal" */
4551
+ orientation?: StatusFlowOrientation;
4552
+ /** Size @default "md" */
4553
+ size?: StatusFlowSize;
4554
+ /** Whether labels below/beside markers are shown. @default true */
4555
+ showLabels?: boolean;
4556
+ /** Locale for digits + accessible announcements @default "fa" */
4557
+ locale?: SupportedLocale;
4558
+ /** Fires when a stage marker is clicked. When set, markers become buttons. */
4559
+ onStageSelect?: (stage: StatusFlowStageData, index: number) => void;
4560
+ }
4561
+ interface StatusFlowStageProps extends Omit<StatusFlowStageData, 'id'> {
4562
+ id?: string;
4563
+ }
4564
+ /**
4565
+ * Optional composition wrapper. Use this or the `stages` prop on
4566
+ * `<StatusFlow>` — not both. StatusFlow injects position metadata as
4567
+ * internal props; StatusFlowStage should not be rendered outside.
4568
+ */
4569
+ declare function StatusFlowStage(props: StatusFlowStageProps): React$1.ReactElement;
4570
+ declare const StatusFlow: React$1.ForwardRefExoticComponent<StatusFlowProps & React$1.RefAttributes<HTMLOListElement>>;
4571
+
4572
+ interface JobWizardStep {
4573
+ /** Stable identifier — referenced by `validateStep`, `goToStep`, etc. */
4574
+ id: string;
4575
+ /** Step title (shown in stepper + header when this step is active) */
4576
+ title: string;
4577
+ /** Optional one-line description under the title */
4578
+ description?: string;
4579
+ /** Mark step as optional — a "Skip" button appears. @default false */
4580
+ optional?: boolean;
4581
+ }
4582
+ /** Result of a validator — `null`/`undefined` = pass, `string` = single error, `Record<field, message>` = field errors */
4583
+ type JobWizardValidationResult = string | Record<string, string> | null | undefined;
4584
+ type JobWizardSubmitState = 'idle' | 'submitting' | 'success' | 'error';
4585
+ interface UseJobWizardOptions<TData extends Record<string, unknown>> {
4586
+ /** Ordered list of steps. Pass a new array reference when the step list should change dynamically (e.g. branching). */
4587
+ steps: JobWizardStep[];
4588
+ /** Initial form data */
4589
+ initialData?: Partial<TData>;
4590
+ /**
4591
+ * Validator fired before navigating to the next step. Also runs for each step
4592
+ * on submit if `validateAllOnSubmit` is true.
4593
+ *
4594
+ * Return `null`/`undefined` to pass, or an error (string or field-map) to block navigation.
4595
+ */
4596
+ validateStep?: (stepId: string, data: Partial<TData>) => JobWizardValidationResult | Promise<JobWizardValidationResult>;
4597
+ /** Called when the user confirms the last step. May return a Promise. */
4598
+ onSubmit: (data: TData) => Promise<unknown> | unknown;
4599
+ /** Called when the user clicks Cancel */
4600
+ onCancel?: () => void;
4601
+ /** When set, drafts are persisted to localStorage under this key. */
4602
+ draftKey?: string;
4603
+ /** Debounce (ms) for draft save. @default 300 */
4604
+ draftDebounceMs?: number;
4605
+ /** Validate all steps (in order) on submit. Default false — only the current step is validated before submit. */
4606
+ validateAllOnSubmit?: boolean;
4607
+ }
4608
+ interface JobWizardApi<TData extends Record<string, unknown>> {
4609
+ /** Current step (resolved from `steps[currentIndex]`). */
4610
+ readonly currentStep: JobWizardStep;
4611
+ readonly currentIndex: number;
4612
+ readonly isFirst: boolean;
4613
+ readonly isLast: boolean;
4614
+ readonly steps: JobWizardStep[];
4615
+ /** Mutable form data (merged across all steps). */
4616
+ readonly data: Partial<TData>;
4617
+ /** Replace the data object. */
4618
+ setData: React$1.Dispatch<React$1.SetStateAction<Partial<TData>>>;
4619
+ /** Shallow-merge the given patch into `data`. */
4620
+ update: (patch: Partial<TData>) => void;
4621
+ /** Current error. String = whole-step error, Record = per-field errors. */
4622
+ readonly error: string | Record<string, string> | null;
4623
+ /** Clear the current error. */
4624
+ clearError: () => void;
4625
+ /** Submit state lifecycle. */
4626
+ readonly submitState: JobWizardSubmitState;
4627
+ readonly submitResult: unknown;
4628
+ readonly submitError: Error | null;
4629
+ /** Advance to the next step. Runs validation first. Returns true if navigated. */
4630
+ next: () => Promise<boolean>;
4631
+ /** Go back to the previous step. */
4632
+ back: () => void;
4633
+ /** Jump to a specific step by id. Does NOT validate. */
4634
+ goToStep: (id: string) => void;
4635
+ /** Fire onSubmit. Runs validation first (current step only, unless `validateAllOnSubmit`). */
4636
+ submit: () => Promise<void>;
4637
+ /** Fire onCancel if provided. */
4638
+ cancel: () => void;
4639
+ /** Reset wizard to first step + `initialData` + idle state. Also clears draft. */
4640
+ reset: () => void;
4641
+ /** Remove the saved draft from localStorage (if `draftKey` set). */
4642
+ clearDraft: () => void;
4643
+ /** True iff the step at this id has been visited. */
4644
+ isStepVisited: (id: string) => boolean;
4645
+ /** Resolved stage status for the StatusFlow stepper. */
4646
+ stageStatus: (step: JobWizardStep, index: number) => StageStatusKey;
4647
+ }
4648
+ declare function useJobWizard<TData extends Record<string, unknown>>(options: UseJobWizardOptions<TData>): JobWizardApi<TData>;
4649
+ /** Hook to access the wizard from within nested components. */
4650
+ declare function useJobWizardState<TData extends Record<string, unknown> = Record<string, unknown>>(): JobWizardApi<TData>;
4651
+ interface JobWizardProps extends React$1.HTMLAttributes<HTMLDivElement> {
4652
+ /** Wizard API from `useJobWizard`. */
4653
+ wizard: JobWizardApi<Record<string, unknown>>;
4654
+ /** Locale @default "fa" */
4655
+ locale?: SupportedLocale;
4656
+ }
4657
+ declare const JobWizard: React$1.ForwardRefExoticComponent<JobWizardProps & React$1.RefAttributes<HTMLDivElement>>;
4658
+ interface JobWizardHeaderProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'title'> {
4659
+ /** Main title of the wizard (persistent across steps). If omitted, shows the current step's title. */
4660
+ title?: React$1.ReactNode;
4661
+ /** Short description / context line under the title. */
4662
+ description?: React$1.ReactNode;
4663
+ /** Trailing slot (e.g. a close button). */
4664
+ trailing?: React$1.ReactNode;
4665
+ }
4666
+ declare const JobWizardHeader: React$1.ForwardRefExoticComponent<JobWizardHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
4667
+ interface JobWizardStepperProps {
4668
+ /** Orientation @default "horizontal" */
4669
+ orientation?: 'horizontal' | 'vertical';
4670
+ /** Size @default "md" */
4671
+ size?: 'sm' | 'md' | 'lg';
4672
+ /** Allow clicking visited steps to jump back. @default true */
4673
+ allowJump?: boolean;
4674
+ className?: string;
4675
+ }
4676
+ declare const JobWizardStepper: React$1.FC<JobWizardStepperProps>;
4677
+ declare const JobWizardBody: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
4678
+ declare const JobWizardError: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
4679
+ declare const JobWizardFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
4680
+ /** Invisible flex spacer — pushes following buttons to the logical end. */
4681
+ declare const JobWizardSpacer: React$1.FC;
4682
+ interface JobWizardBackProps extends Omit<React$1.ComponentProps<typeof Button>, 'onClick'> {
4683
+ /** Override label */
4684
+ children?: React$1.ReactNode;
4685
+ }
4686
+ declare const JobWizardBack: React$1.ForwardRefExoticComponent<Omit<JobWizardBackProps, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
4687
+ interface JobWizardNextProps extends Omit<React$1.ComponentProps<typeof Button>, 'onClick'> {
4688
+ /** Override label (not applied when on last step — uses `submitLabel` then) */
4689
+ children?: React$1.ReactNode;
4690
+ /** Label for the submit button when on the last step */
4691
+ submitLabel?: React$1.ReactNode;
4692
+ }
4693
+ declare const JobWizardNext: React$1.ForwardRefExoticComponent<Omit<JobWizardNextProps, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
4694
+ interface JobWizardCancelProps extends Omit<React$1.ComponentProps<typeof Button>, 'onClick'> {
4695
+ children?: React$1.ReactNode;
4696
+ }
4697
+ declare const JobWizardCancel: React$1.ForwardRefExoticComponent<Omit<JobWizardCancelProps, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
4698
+ interface JobWizardSkipProps extends Omit<React$1.ComponentProps<typeof Button>, 'onClick'> {
4699
+ children?: React$1.ReactNode;
4700
+ }
4701
+ declare const JobWizardSkip: React$1.ForwardRefExoticComponent<Omit<JobWizardSkipProps, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
4702
+ interface JobWizardSuccessProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'title'> {
4703
+ title?: React$1.ReactNode;
4704
+ description?: React$1.ReactNode;
4705
+ actions?: React$1.ReactNode;
4706
+ /** Only render children when submitState === 'success' @default true */
4707
+ autoShow?: boolean;
4708
+ }
4709
+ declare const JobWizardSuccess: React$1.ForwardRefExoticComponent<JobWizardSuccessProps & React$1.RefAttributes<HTMLDivElement>>;
4710
+
2629
4711
  interface SentimentBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
2630
4712
  /** Sentiment type */
2631
4713
  sentiment: 'positive' | 'negative' | 'neutral' | 'mixed';
@@ -2640,6 +4722,89 @@ interface SentimentBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
2640
4722
  }
2641
4723
  declare const SentimentBadge: React$1.ForwardRefExoticComponent<SentimentBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
2642
4724
 
4725
+ interface EmotionBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
4726
+ /** Emotion (9-class advanced sentiment scale) */
4727
+ emotion: EmotionKey;
4728
+ /** Optional count — shown alongside the label */
4729
+ count?: number;
4730
+ /** Size variant */
4731
+ size?: 'sm' | 'md';
4732
+ /** Show the text label. When false, renders an icon-only chip (aria-label kept). */
4733
+ showLabel?: boolean;
4734
+ /** Locale for label + digit formatting */
4735
+ locale?: SupportedLocale;
4736
+ }
4737
+ declare const EmotionBadge: React$1.ForwardRefExoticComponent<EmotionBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
4738
+
4739
+ type EmotionData = Partial<Record<EmotionKey, number>>;
4740
+ interface EmotionDistributionProps extends React$1.HTMLAttributes<HTMLDivElement> {
4741
+ /** Emotion counts (auto-normalized to 100%). Missing keys are treated as 0. */
4742
+ data: EmotionData;
4743
+ /** Display mode */
4744
+ variant?: 'bars' | 'stacked' | 'compact';
4745
+ /**
4746
+ * For 'compact' and 'bars': limit to the top-N emotions by value. Leftover
4747
+ * contributions roll up into a muted "بقیه" chip so totals still make sense.
4748
+ * Default 5 — matches the canonical تحلیل افکار summary density.
4749
+ */
4750
+ topN?: number;
4751
+ /** Show numeric count labels (in addition to percent). */
4752
+ showCounts?: boolean;
4753
+ /** Show percentage labels. */
4754
+ showPercent?: boolean;
4755
+ /** Locale for label + digit formatting */
4756
+ locale?: SupportedLocale;
4757
+ /** Loading skeleton */
4758
+ isLoading?: boolean;
4759
+ }
4760
+ declare const EmotionDistribution: React$1.ForwardRefExoticComponent<EmotionDistributionProps & React$1.RefAttributes<HTMLDivElement>>;
4761
+
4762
+ interface FlowBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
4763
+ /** Flow classification */
4764
+ flow: FlowKey;
4765
+ /** Optional count shown alongside the label */
4766
+ count?: number;
4767
+ /** Size */
4768
+ size?: 'sm' | 'md';
4769
+ /** Whether to render the text label (keeps aria-label when false) */
4770
+ showLabel?: boolean;
4771
+ /** Locale for label + digit formatting */
4772
+ locale?: SupportedLocale;
4773
+ }
4774
+ declare const FlowBadge: React$1.ForwardRefExoticComponent<FlowBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
4775
+
4776
+ interface StatusBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
4777
+ /** Operational status */
4778
+ status: StatusKey;
4779
+ /** Size */
4780
+ size?: 'sm' | 'md';
4781
+ /** Show text label (keeps aria-label when false) */
4782
+ showLabel?: boolean;
4783
+ /** Locale */
4784
+ locale?: SupportedLocale;
4785
+ /**
4786
+ * Explicitly enable/disable the pulse animation on the indicator dot.
4787
+ * Default: animated only for `status="critical"`. Pair with
4788
+ * `prefers-reduced-motion` (already honoured globally in globals.css).
4789
+ */
4790
+ animated?: boolean;
4791
+ }
4792
+ declare const StatusBadge: React$1.ForwardRefExoticComponent<StatusBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
4793
+
4794
+ interface SeverityBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
4795
+ /** Urgency level — independent from operational status */
4796
+ severity: SeverityKey;
4797
+ /** Size */
4798
+ size?: 'sm' | 'md';
4799
+ /** Show text label */
4800
+ showLabel?: boolean;
4801
+ /** Render as a solid chip instead of the soft tinted pill (for high-contrast lists) */
4802
+ variant?: 'soft' | 'solid';
4803
+ /** Locale */
4804
+ locale?: SupportedLocale;
4805
+ }
4806
+ declare const SeverityBadge: React$1.ForwardRefExoticComponent<SeverityBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
4807
+
2643
4808
  interface MultiSelectOption {
2644
4809
  value: string;
2645
4810
  label: string;
@@ -2696,23 +4861,6 @@ interface PeriodSelectorProps {
2696
4861
  }
2697
4862
  declare const PeriodSelector: React$1.ForwardRefExoticComponent<PeriodSelectorProps & React$1.RefAttributes<HTMLDivElement>>;
2698
4863
 
2699
- type SocialPlatform = 'instagram' | 'twitter' | 'tiktok' | 'youtube' | 'linkedin' | 'telegram' | 'threads';
2700
- interface SocialPlatformBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
2701
- /** The social media platform to display */
2702
- platform: SocialPlatform;
2703
- /** Size of the badge */
2704
- size?: 'xs' | 'sm' | 'md' | 'lg';
2705
- /** Show the platform name label */
2706
- showLabel?: boolean;
2707
- /** Visual style of the badge */
2708
- variant?: 'flat' | 'badge';
2709
- }
2710
- declare const socialPlatformBadgeVariants: (props?: ({
2711
- size?: "xs" | "sm" | "md" | "lg" | null | undefined;
2712
- variant?: "flat" | "badge" | null | undefined;
2713
- } & class_variance_authority_types.ClassProp) | undefined) => string;
2714
- declare const SocialPlatformBadge: React$1.ForwardRefExoticComponent<SocialPlatformBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
2715
-
2716
4864
  interface SearchInputProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, 'size'>, VariantProps<typeof InputVariants> {
2717
4865
  /** Locale for placeholder and aria labels */
2718
4866
  locale?: SupportedLocale;
@@ -2731,28 +4879,6 @@ interface SearchInputProps extends Omit<React$1.InputHTMLAttributes<HTMLInputEle
2731
4879
  }
2732
4880
  declare const SearchInput: React$1.ForwardRefExoticComponent<SearchInputProps & React$1.RefAttributes<HTMLInputElement>>;
2733
4881
 
2734
- interface SentimentData {
2735
- positive: number;
2736
- negative: number;
2737
- neutral: number;
2738
- mixed?: number;
2739
- }
2740
- interface SentimentDistributionProps extends React$1.HTMLAttributes<HTMLDivElement> {
2741
- /** Sentiment counts (will be auto-normalized to 100%) */
2742
- data: SentimentData;
2743
- /** Display mode */
2744
- variant?: 'bars' | 'stacked' | 'compact';
2745
- /** Show numeric count labels */
2746
- showCounts?: boolean;
2747
- /** Show percentage labels */
2748
- showPercent?: boolean;
2749
- /** Locale for number/label formatting */
2750
- locale?: SupportedLocale;
2751
- /** Show loading skeleton */
2752
- isLoading?: boolean;
2753
- }
2754
- declare const SentimentDistribution: React$1.ForwardRefExoticComponent<SentimentDistributionProps & React$1.RefAttributes<HTMLDivElement>>;
2755
-
2756
4882
  interface ComparisonCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
2757
4883
  /** Card title */
2758
4884
  title: string;
@@ -2799,6 +4925,30 @@ interface DataTableColumn<TData> {
2799
4925
  className?: string;
2800
4926
  /** Column alignment */
2801
4927
  align?: 'start' | 'center' | 'end';
4928
+ /**
4929
+ * Pin the column to the start (logical, RTL-aware) or end of the visible
4930
+ * area. Pinned columns stay visible while horizontal scrolling. The
4931
+ * selection / expansion gutter columns are pinned automatically.
4932
+ */
4933
+ pinned?: 'start' | 'end';
4934
+ /** Optional fixed pixel width (used for pinning offset calculation) */
4935
+ width?: number;
4936
+ /** When false, this column is hidden via the columnVisibility map */
4937
+ defaultVisible?: boolean;
4938
+ }
4939
+ interface DataTableColumnVisibility {
4940
+ /** Map of column id → visible. Missing keys default to true. */
4941
+ visible: Record<string, boolean>;
4942
+ /** Called when a column toggle changes. */
4943
+ onVisibilityChange: (next: Record<string, boolean>) => void;
4944
+ }
4945
+ interface DataTableExpansion<TData> {
4946
+ /** Set of expanded row keys. */
4947
+ expandedRows: Set<number>;
4948
+ /** Called when expansion toggles. */
4949
+ onExpandedRowsChange: (next: Set<number>) => void;
4950
+ /** Render function for the expanded content (full-width row below). */
4951
+ renderExpandedRow: (row: TData, rowIndex: number) => React$1.ReactNode;
2802
4952
  }
2803
4953
  interface DataTablePagination {
2804
4954
  currentPage: number;
@@ -2835,6 +4985,25 @@ interface DataTableProps<TData> {
2835
4985
  sort?: DataTableSort;
2836
4986
  /** Row selection configuration */
2837
4987
  selection?: DataTableSelection<TData>;
4988
+ /** Column visibility configuration (for show/hide column toggle) */
4989
+ columnVisibility?: DataTableColumnVisibility;
4990
+ /** Expansion configuration (for inline detail row) */
4991
+ expansion?: DataTableExpansion<TData>;
4992
+ /**
4993
+ * Opt-in row virtualization for very long lists (1000+ rows). When set,
4994
+ * the table is wrapped in a scroll container of `viewportHeight` and only
4995
+ * rows in the visible window + `overscan` are rendered. Rows must have a
4996
+ * predictable `rowHeight`; expanded rows + dynamic content are NOT
4997
+ * supported in virtualized mode.
4998
+ */
4999
+ virtualize?: {
5000
+ /** Pixel height of each row (must be uniform). */
5001
+ rowHeight: number;
5002
+ /** Container scroll-area height in px. @default 480 */
5003
+ viewportHeight?: number;
5004
+ /** Extra rows rendered above and below the viewport. @default 6 */
5005
+ overscan?: number;
5006
+ };
2838
5007
  /** Zebra-striped rows */
2839
5008
  striped?: boolean;
2840
5009
  /** Bordered cells */
@@ -2854,6 +5023,198 @@ declare const DataTable: <TData>(props: DataTableProps<TData> & {
2854
5023
  ref?: React$1.ForwardedRef<HTMLDivElement>;
2855
5024
  }) => React$1.ReactElement;
2856
5025
 
5026
+ /**
5027
+ * data-table-cells — opinionated thin wrappers around DS primitives, sized
5028
+ * and styled for use as `DataTableColumn.cell` values. Each cell renderer
5029
+ * gives a consistent inline footprint (no margin/padding chrome) and pairs
5030
+ * a chart/badge with optional numeric value text.
5031
+ *
5032
+ * Usage:
5033
+ * columns={[
5034
+ * {
5035
+ * id: 'engagement',
5036
+ * header: 'تعامل',
5037
+ * cell: (row) => <SparklineCell data={row.history} value={row.eRate} suffix="٪" />,
5038
+ * },
5039
+ * ...
5040
+ * ]}
5041
+ */
5042
+ interface SparklineCellProps {
5043
+ /** History values (typically 6-12 points) */
5044
+ data: number[];
5045
+ /** Optional numeric value shown after the sparkline */
5046
+ value?: number;
5047
+ /** Suffix appended to value (e.g., '٪') */
5048
+ suffix?: React$1.ReactNode;
5049
+ /** Sparkline width in px @default 64 */
5050
+ width?: number;
5051
+ /** Sparkline height in px @default 18 */
5052
+ height?: number;
5053
+ /** Sparkline visual variant @default 'line' */
5054
+ variant?: 'line' | 'area' | 'bars';
5055
+ /** Override trend color (auto-detected from first vs last) */
5056
+ trend?: 'up' | 'down' | 'neutral';
5057
+ /** Locale @default 'fa' */
5058
+ locale?: SupportedLocale;
5059
+ /** Decimal places for value @default 0 */
5060
+ decimals?: number;
5061
+ className?: string;
5062
+ }
5063
+ declare const SparklineCell: React$1.ForwardRefExoticComponent<SparklineCellProps & React$1.RefAttributes<HTMLDivElement>>;
5064
+ interface TrendCellProps {
5065
+ /** Numeric delta. Positive=up, negative=down, zero=flat. */
5066
+ value: number;
5067
+ /** Suffix (e.g., '٪'). */
5068
+ suffix?: React$1.ReactNode;
5069
+ /** Show the absolute value text alongside the arrow @default true */
5070
+ showValue?: boolean;
5071
+ /** Inverted trend (lower=better) — colours flip */
5072
+ invert?: boolean;
5073
+ /** Locale @default 'fa' */
5074
+ locale?: SupportedLocale;
5075
+ className?: string;
5076
+ }
5077
+ declare const TrendCell: React$1.ForwardRefExoticComponent<TrendCellProps & React$1.RefAttributes<HTMLSpanElement>>;
5078
+ interface StatusPulseCellProps {
5079
+ status: StatusKey;
5080
+ /** Optional label after the dot (omit for ultra-compact rows) */
5081
+ label?: React$1.ReactNode;
5082
+ /** Locale (forwarded to StatusBadge for default labels) */
5083
+ locale?: SupportedLocale;
5084
+ className?: string;
5085
+ }
5086
+ declare const StatusPulseCell: React$1.ForwardRefExoticComponent<StatusPulseCellProps & React$1.RefAttributes<HTMLSpanElement>>;
5087
+ interface SentimentCellProps {
5088
+ /** Sentiment counts. */
5089
+ data: SentimentData;
5090
+ /** Visual mode @default 'stacked' */
5091
+ variant?: 'stacked' | 'bars' | 'compact';
5092
+ /** Width of the inline bar @default 80 */
5093
+ width?: number;
5094
+ /** Locale */
5095
+ locale?: SupportedLocale;
5096
+ className?: string;
5097
+ }
5098
+ declare const SentimentCell: React$1.ForwardRefExoticComponent<SentimentCellProps & React$1.RefAttributes<HTMLDivElement>>;
5099
+ interface FlowCellProps {
5100
+ /** Flow counts. */
5101
+ data: FlowData;
5102
+ /** Visual mode @default 'stacked' */
5103
+ variant?: 'stacked' | 'bars' | 'compact';
5104
+ /** Width of the inline bar @default 96 */
5105
+ width?: number;
5106
+ /** Locale */
5107
+ locale?: SupportedLocale;
5108
+ className?: string;
5109
+ }
5110
+ declare const FlowCell: React$1.ForwardRefExoticComponent<FlowCellProps & React$1.RefAttributes<HTMLDivElement>>;
5111
+ interface ProgressCellProps {
5112
+ /** Progress 0–100 */
5113
+ value: number;
5114
+ /** Show value text after the bar @default true */
5115
+ showValue?: boolean;
5116
+ /** Suffix on value (e.g., '٪'). Defaults to locale-appropriate %. */
5117
+ suffix?: React$1.ReactNode;
5118
+ /** Variant for color */
5119
+ variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'destructive';
5120
+ /** Bar width @default 80 */
5121
+ width?: number;
5122
+ /** Locale @default 'fa' */
5123
+ locale?: SupportedLocale;
5124
+ className?: string;
5125
+ }
5126
+ declare const ProgressCell: React$1.ForwardRefExoticComponent<ProgressCellProps & React$1.RefAttributes<HTMLDivElement>>;
5127
+ interface StatDeltaCellProps {
5128
+ /** Primary value (e.g., 1240) */
5129
+ value: number | string;
5130
+ /** Delta (positive=up). Hidden if undefined. */
5131
+ delta?: number;
5132
+ /** Format the value with locale digits @default true (when value is number) */
5133
+ formatValue?: boolean;
5134
+ /** Suffix on value */
5135
+ valueSuffix?: React$1.ReactNode;
5136
+ /** Suffix on delta */
5137
+ deltaSuffix?: React$1.ReactNode;
5138
+ /** Inverted trend (lower=better) */
5139
+ invertDelta?: boolean;
5140
+ /** Locale */
5141
+ locale?: SupportedLocale;
5142
+ className?: string;
5143
+ }
5144
+ declare const StatDeltaCell: React$1.ForwardRefExoticComponent<StatDeltaCellProps & React$1.RefAttributes<HTMLSpanElement>>;
5145
+
5146
+ interface DataTableColumnVisibilityToggleProps<TData> {
5147
+ columns: DataTableColumn<TData>[];
5148
+ visibility: DataTableColumnVisibility;
5149
+ /** Locale @default 'fa' */
5150
+ locale?: SupportedLocale;
5151
+ /** Custom trigger label (defaults to "ستون‌ها") */
5152
+ label?: React$1.ReactNode;
5153
+ /** Custom Button class */
5154
+ className?: string;
5155
+ /** Override Button size */
5156
+ size?: 'xs' | 'sm' | 'default';
5157
+ /** Override Button variant */
5158
+ variant?: 'default' | 'outline' | 'ghost' | 'secondary';
5159
+ }
5160
+ declare function DataTableColumnVisibilityToggle<TData>({ columns, visibility, locale, label, className, size, variant, }: DataTableColumnVisibilityToggleProps<TData>): react_jsx_runtime.JSX.Element;
5161
+ /**
5162
+ * Convert column definitions + row data into a CSV string. Each cell is
5163
+ * stringified by calling its `cell` render and extracting plain text — for
5164
+ * complex React nodes pass an `exportValue: (row) => string` on the column.
5165
+ */
5166
+ interface ExportableColumn<TData> extends DataTableColumn<TData> {
5167
+ /** Override how this column's value is serialized for export. */
5168
+ exportValue?: (row: TData, index: number) => string | number | boolean | null | undefined;
5169
+ }
5170
+ /**
5171
+ * Build a CSV string from columns + rows. Header row uses each column's
5172
+ * `header` (if string) or its `id` as fallback.
5173
+ */
5174
+ declare function buildCsv<TData>(columns: ExportableColumn<TData>[], data: TData[]): string;
5175
+ /** Build a TSV string (tab-separated) — useful for "paste into spreadsheet". */
5176
+ declare function buildTsv<TData>(columns: ExportableColumn<TData>[], data: TData[]): string;
5177
+ /** Trigger a browser download of `content` with the given filename + mime. */
5178
+ declare function downloadFile(filename: string, content: string, mime?: string): void;
5179
+ interface DataTableExportButtonProps<TData> {
5180
+ columns: ExportableColumn<TData>[];
5181
+ data: TData[];
5182
+ /** Output filename (default: data-<timestamp>.csv) */
5183
+ filename?: string;
5184
+ /** Locale @default 'fa' */
5185
+ locale?: SupportedLocale;
5186
+ /** Override label */
5187
+ label?: React$1.ReactNode;
5188
+ /** Hide TSV-copy entry @default false */
5189
+ hideTsv?: boolean;
5190
+ /** Custom Button class */
5191
+ className?: string;
5192
+ /** Override Button size */
5193
+ size?: 'xs' | 'sm' | 'default';
5194
+ /** Override Button variant */
5195
+ variant?: 'default' | 'outline' | 'ghost' | 'secondary';
5196
+ }
5197
+ declare function DataTableExportButton<TData>({ columns, data, filename, locale, label, hideTsv, className, size, variant, }: DataTableExportButtonProps<TData>): react_jsx_runtime.JSX.Element;
5198
+
5199
+ interface TableComparisonViewProps<TData> {
5200
+ /** Original DataTable column definitions — `cell()` is reused for rendering. */
5201
+ columns: DataTableColumn<TData>[];
5202
+ /** Rows being compared. Recommended 2-4. */
5203
+ rows: TData[];
5204
+ /** Optional label for each row column header (e.g., name). Falls back to `Row N`. */
5205
+ rowLabel?: (row: TData, index: number) => React$1.ReactNode;
5206
+ /** Callback for the column "remove" button. When omitted, no remove button shows. */
5207
+ onRemoveRow?: (row: TData, index: number) => void;
5208
+ /** Highlight cells whose value differs across rows @default true */
5209
+ highlightDifferences?: boolean;
5210
+ /** Locale @default 'fa' */
5211
+ locale?: SupportedLocale;
5212
+ /** Empty state when no rows are passed */
5213
+ emptyState?: React$1.ReactNode;
5214
+ className?: string;
5215
+ }
5216
+ declare const TableComparisonView: <TData>(props: TableComparisonViewProps<TData>) => React$1.ReactElement;
5217
+
2857
5218
  interface DirectionalBoxProps extends React$1.HTMLAttributes<HTMLDivElement> {
2858
5219
  /**
2859
5220
  * Override the detected document direction.
@@ -2917,8 +5278,94 @@ interface SafeImageProps extends React$1.ImgHTMLAttributes<HTMLImageElement> {
2917
5278
  }
2918
5279
  declare const SafeImage: React$1.ForwardRefExoticComponent<SafeImageProps & React$1.RefAttributes<HTMLImageElement>>;
2919
5280
 
5281
+ /**
5282
+ * SavedQueryCard — saved-search tile for analyst dashboards. Shows query
5283
+ * description + filter summary chips, run count, last-run timestamp, and a
5284
+ * one-click "run again" action button. Optional star/favorite toggle.
5285
+ */
5286
+ interface SavedQueryFilter {
5287
+ /** Filter label (e.g., "احساس") */
5288
+ label: React$1.ReactNode;
5289
+ /** Filter value (e.g., "منفی") */
5290
+ value: React$1.ReactNode;
5291
+ }
5292
+ interface SavedQueryCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
5293
+ /** Saved query name */
5294
+ name: React$1.ReactNode;
5295
+ /** Optional 1-line description */
5296
+ description?: React$1.ReactNode;
5297
+ /** Filter chips (label + value pairs) */
5298
+ filters?: SavedQueryFilter[];
5299
+ /** Total run count */
5300
+ runCount?: number;
5301
+ /** Last-run display (e.g., "۲ روز پیش") */
5302
+ lastRun?: React$1.ReactNode;
5303
+ /** Run-now callback */
5304
+ onRun?: () => void;
5305
+ /** Run button label override */
5306
+ runLabel?: React$1.ReactNode;
5307
+ /** Favorite/star state. When set, renders the star toggle */
5308
+ favorite?: {
5309
+ starred: boolean;
5310
+ onChange: (next: boolean) => void;
5311
+ };
5312
+ /** Locale @default 'fa' */
5313
+ locale?: SupportedLocale;
5314
+ }
5315
+ declare const SavedQueryCard: React$1.ForwardRefExoticComponent<SavedQueryCardProps & React$1.RefAttributes<HTMLDivElement>>;
5316
+
5317
+ interface ReportComposerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'title'> {
5318
+ /** Report title (e.g., "بولتن هفتگی — هفته ۱۴") */
5319
+ title?: React$1.ReactNode;
5320
+ /** Subtitle / metadata */
5321
+ description?: React$1.ReactNode;
5322
+ /** Top-right header actions (Save, Export, …) */
5323
+ headerActions?: React$1.ReactNode;
5324
+ /** Locale @default 'fa' */
5325
+ locale?: SupportedLocale;
5326
+ }
5327
+ declare const ReportComposer: React$1.ForwardRefExoticComponent<ReportComposerProps & React$1.RefAttributes<HTMLDivElement>>;
5328
+ interface ReportSectionProps extends Omit<React$1.HTMLAttributes<HTMLElement>, 'title'> {
5329
+ /** Section title */
5330
+ title: React$1.ReactNode;
5331
+ /** Optional secondary text */
5332
+ description?: React$1.ReactNode;
5333
+ /** Whether the section is enabled (in the bulletin output) */
5334
+ enabled?: boolean;
5335
+ /** Callback when the enable switch is toggled. When omitted, switch is hidden. */
5336
+ onEnabledChange?: (next: boolean) => void;
5337
+ /** Whether the section is collapsed (only the header visible) */
5338
+ collapsed?: boolean;
5339
+ /** Callback when collapse toggles. When omitted, collapse button is hidden. */
5340
+ onCollapsedChange?: (next: boolean) => void;
5341
+ /** Show drag handle (consumer wires the drag interaction) */
5342
+ draggable?: boolean;
5343
+ /** drag-handle pointerDown — set when wiring native or react-dnd */
5344
+ onDragHandlePointerDown?: (e: React$1.PointerEvent<HTMLButtonElement>) => void;
5345
+ /** Render a settings button (e.g., to open a popover). When omitted, hidden. */
5346
+ onSettingsClick?: () => void;
5347
+ /** Custom header actions (extra buttons beside settings) */
5348
+ headerActions?: React$1.ReactNode;
5349
+ }
5350
+ declare const ReportSection: React$1.ForwardRefExoticComponent<ReportSectionProps & React$1.RefAttributes<HTMLElement>>;
5351
+ interface BulletinViewerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'title'> {
5352
+ /** Bulletin title (h1) */
5353
+ title: React$1.ReactNode;
5354
+ /** Author / source line */
5355
+ author?: React$1.ReactNode;
5356
+ /** Publish date display */
5357
+ publishedAt?: React$1.ReactNode;
5358
+ /** Optional list of subtitle lines (volume, edition, etc.) */
5359
+ meta?: React$1.ReactNode[];
5360
+ /** Action buttons in the header (Print, Download PDF, Share). Hidden when printing via @media print. */
5361
+ headerActions?: React$1.ReactNode;
5362
+ /** Locale @default 'fa' */
5363
+ locale?: SupportedLocale;
5364
+ }
5365
+ declare const BulletinViewer: React$1.ForwardRefExoticComponent<BulletinViewerProps & React$1.RefAttributes<HTMLDivElement>>;
5366
+
2920
5367
  declare const calloutVariants: (props?: ({
2921
- variant?: "info" | "success" | "warning" | "destructive" | "neutral" | null | undefined;
5368
+ variant?: "neutral" | "warning" | "success" | "info" | "destructive" | null | undefined;
2922
5369
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2923
5370
  interface CalloutProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof calloutVariants> {
2924
5371
  /** Custom icon. Set to `null` to hide the icon. */
@@ -3077,53 +5524,6 @@ interface PartoPieChartProps {
3077
5524
  }
3078
5525
  declare const PartoPieChart: React$1.ForwardRefExoticComponent<PartoPieChartProps & React$1.RefAttributes<HTMLDivElement>>;
3079
5526
 
3080
- /**
3081
- * PartoHeatMap — brand-tinted heatmap with rounded cells, clean axis,
3082
- * glassmorphic tooltip, and locale-aware formatting.
3083
- * Built with Visx scales + raw SVG for full control.
3084
- */
3085
- interface HeatMapDatum {
3086
- x: string | number;
3087
- y: number;
3088
- }
3089
- interface HeatMapRow {
3090
- id: string;
3091
- data: HeatMapDatum[];
3092
- }
3093
- interface PartoHeatMapProps {
3094
- data: HeatMapRow[];
3095
- locale?: 'fa' | 'en';
3096
- className?: string;
3097
- isLoading?: boolean;
3098
- ariaLabel?: string;
3099
- margin?: {
3100
- top: number;
3101
- right: number;
3102
- bottom: number;
3103
- left: number;
3104
- };
3105
- /** Custom color function: receives value and max → returns CSS color */
3106
- colorScale?: (value: number, max: number) => string;
3107
- /** Cell border radius */
3108
- cellRadius?: number;
3109
- /** Gap between cells */
3110
- cellGap?: number;
3111
- /** Custom tooltip content */
3112
- renderTooltip?: (cell: {
3113
- rowId: string;
3114
- x: string | number;
3115
- value: number;
3116
- color: string;
3117
- }) => React$1.ReactNode;
3118
- /** X axis label */
3119
- xAxisLabel?: string;
3120
- /** Y axis label */
3121
- yAxisLabel?: string;
3122
- /** Filter which x-axis ticks to show */
3123
- xTickFilter?: (value: string | number, index: number) => boolean;
3124
- }
3125
- declare const PartoHeatMap: React$1.ForwardRefExoticComponent<PartoHeatMapProps & React$1.RefAttributes<HTMLDivElement>>;
3126
-
3127
5527
  /**
3128
5528
  * PartoWordCloud — modern word cloud with smooth hover transitions,
3129
5529
  * glassmorphic tooltip, and brand-harmonious coloring.
@@ -3198,23 +5598,46 @@ interface PartoAreaChartProps {
3198
5598
  }
3199
5599
  declare const PartoAreaChart: React$1.ForwardRefExoticComponent<PartoAreaChartProps & React$1.RefAttributes<HTMLDivElement>>;
3200
5600
 
3201
- interface PartoRadarChartProps {
3202
- /** Data: [{ subject: "سرعت", series1: 80, series2: 60 }] */
5601
+ /**
5602
+ * PartoScatterChart x/y scatter with optional bubble sizing (z) and
5603
+ * per-point color override. Wraps Recharts ScatterChart with theme-aware
5604
+ * styles, RTL-safe margins, and Persian number formatting.
5605
+ *
5606
+ * @example
5607
+ * <PartoScatterChart
5608
+ * data={[
5609
+ * { x: 10, y: 30, z: 200, label: 'پیج A' },
5610
+ * { x: 40, y: 50, z: 120, label: 'پیج B' },
5611
+ * ]}
5612
+ * xKey="x" yKey="y" zKey="z" labelKey="label"
5613
+ * xLabel="تعامل (٪)" yLabel="رشد (٪)"
5614
+ * />
5615
+ */
5616
+ interface PartoScatterChartProps {
5617
+ /** Row-oriented data. Each row contains x, y, and optional z (size) + label. */
3203
5618
  data: Array<Record<string, any>>;
3204
- /** Keys for each radar series */
3205
- dataKeys: string[];
3206
- /** Field name used for angle axis labels (default: 'subject') */
3207
- indexBy?: string;
3208
- /** Radar fill opacity */
3209
- fillOpacity?: number;
3210
- /** Radar stroke width */
3211
- strokeWidth?: number;
3212
- /** Show dots on vertices */
3213
- showDots?: boolean;
3214
- /** Dot radius */
3215
- dotRadius?: number;
3216
- /** Grid shape */
3217
- gridType?: 'polygon' | 'circle';
5619
+ /** Field name for X axis value */
5620
+ xKey: string;
5621
+ /** Field name for Y axis value */
5622
+ yKey: string;
5623
+ /** Optional field for bubble size (z). When provided, becomes a bubble chart. */
5624
+ zKey?: string;
5625
+ /** Optional field for per-point label (shown in tooltip). */
5626
+ labelKey?: string;
5627
+ /** Optional field for color classification (per-point). Values are mapped to palette. */
5628
+ groupKey?: string;
5629
+ /** Min/max bubble radius (px) when zKey is set. Default [40, 400]. */
5630
+ zRange?: [number, number];
5631
+ /** Axis range [min, max] for X @default 'dataMin'..'dataMax' */
5632
+ xDomain?: [number | 'dataMin' | 'auto', number | 'dataMax' | 'auto'];
5633
+ /** Axis range [min, max] for Y */
5634
+ yDomain?: [number | 'dataMin' | 'auto', number | 'dataMax' | 'auto'];
5635
+ /** Axis labels */
5636
+ xLabel?: string;
5637
+ yLabel?: string;
5638
+ /** Unit suffix appended to tick labels (e.g., '٪') */
5639
+ xUnit?: string;
5640
+ yUnit?: string;
3218
5641
  /** Chart margins */
3219
5642
  margin?: {
3220
5643
  top?: number;
@@ -3222,13 +5645,232 @@ interface PartoRadarChartProps {
3222
5645
  bottom?: number;
3223
5646
  left?: number;
3224
5647
  };
3225
- /** Custom tooltip formatter */
5648
+ /** Show grid @default true */
5649
+ enableGrid?: boolean;
5650
+ /** Series name for tooltip header @default 'Scatter' */
5651
+ seriesName?: string;
5652
+ /** Locale for digit formatting @default 'fa' */
5653
+ locale?: SupportedLocale;
5654
+ /** Custom tooltip formatter (name, value) */
3226
5655
  tooltipFormatter?: (name: string, value: number) => React$1.ReactNode;
3227
5656
  className?: string;
3228
5657
  isLoading?: boolean;
3229
5658
  ariaLabel?: string;
3230
5659
  }
3231
- declare const PartoRadarChart: React$1.ForwardRefExoticComponent<PartoRadarChartProps & React$1.RefAttributes<HTMLDivElement>>;
5660
+ declare const PartoScatterChart: React$1.ForwardRefExoticComponent<PartoScatterChartProps & React$1.RefAttributes<HTMLDivElement>>;
5661
+
5662
+ /**
5663
+ * PartoSankeyChart — flow visualization between nodes (source → target).
5664
+ * Uses Recharts' Sankey primitive. Wraps for theme-aware colors, Persian
5665
+ * number formatting, empty state, and a simpler API.
5666
+ *
5667
+ * @example
5668
+ * <PartoSankeyChart
5669
+ * nodes={[{ name: 'ورودی' }, { name: 'فرآیند' }, { name: 'خروجی' }]}
5670
+ * links={[
5671
+ * { source: 0, target: 1, value: 50 },
5672
+ * { source: 1, target: 2, value: 50 },
5673
+ * ]}
5674
+ * />
5675
+ */
5676
+ interface SankeyNode {
5677
+ /** Displayed label for the node. */
5678
+ name: string;
5679
+ /** Optional explicit color override (CSS color or `hsl(var(--token))`). */
5680
+ color?: string;
5681
+ }
5682
+ interface SankeyLink {
5683
+ /** Zero-based index of the source node in `nodes`. */
5684
+ source: number;
5685
+ /** Zero-based index of the target node in `nodes`. */
5686
+ target: number;
5687
+ /** Flow magnitude — drives link thickness. */
5688
+ value: number;
5689
+ }
5690
+ interface PartoSankeyChartProps {
5691
+ nodes: SankeyNode[];
5692
+ links: SankeyLink[];
5693
+ /** Chart margins */
5694
+ margin?: {
5695
+ top?: number;
5696
+ right?: number;
5697
+ bottom?: number;
5698
+ left?: number;
5699
+ };
5700
+ /** Horizontal gap between node columns in pixels */
5701
+ nodePadding?: number;
5702
+ /** Node rectangle width in pixels */
5703
+ nodeWidth?: number;
5704
+ /** Sort nodes alphabetically within a column @default false (preserve input order) */
5705
+ iterations?: number;
5706
+ /** Locale for digit formatting in tooltip @default 'fa' */
5707
+ locale?: SupportedLocale;
5708
+ /** Custom tooltip formatter (receives link.source/target names + value) */
5709
+ tooltipFormatter?: (label: string, value: number) => React$1.ReactNode;
5710
+ className?: string;
5711
+ isLoading?: boolean;
5712
+ ariaLabel?: string;
5713
+ }
5714
+ declare const PartoSankeyChart: React$1.ForwardRefExoticComponent<PartoSankeyChartProps & React$1.RefAttributes<HTMLDivElement>>;
5715
+
5716
+ /**
5717
+ * ConceptPulseChart — افکارسنجی-flavored bubble chart where each data point
5718
+ * is a "concept" rendered as a center dot surrounded by **composition arcs**.
5719
+ * Built on Recharts ScatterChart but overrides the scatter shape with a
5720
+ * custom SVG renderer that draws the central bubble + concentric pie arcs
5721
+ * showing the composition breakdown (flow / emotion / sentiment).
5722
+ *
5723
+ * Heart-of-dashboard chart in the prototype — replaces a flat scatter when
5724
+ * "what's this concept made of?" matters as much as where it sits.
5725
+ *
5726
+ * @example
5727
+ * <ConceptPulseChart
5728
+ * data={[{
5729
+ * x: 30, y: 50, z: 200,
5730
+ * label: 'افزایش قیمت بنزین',
5731
+ * composition: { 'pro-gov': 20, 'internal-critic': 60, 'external-opponent': 20 },
5732
+ * }]}
5733
+ * compositionScale="flow"
5734
+ * />
5735
+ */
5736
+ type CompositionScale = 'flow' | 'emotion' | 'custom';
5737
+ type ConceptComposition = Partial<Record<string, number>>;
5738
+ interface ConceptPoint {
5739
+ /** X coordinate. */
5740
+ x: number;
5741
+ /** Y coordinate. */
5742
+ y: number;
5743
+ /** Optional bubble size value (drives center radius). */
5744
+ z?: number;
5745
+ /** Concept label — shown in tooltip and aria. */
5746
+ label: string;
5747
+ /**
5748
+ * Composition breakdown — keys must match the chosen `compositionScale`:
5749
+ * - flow: 'pro-gov' | 'internal-critic' | 'internal-opponent' | 'external-opponent' | 'grey'
5750
+ * - emotion: 'anger' | 'joy' | 'fear' | … (9 emotion keys)
5751
+ * - custom: any keys, paired with `compositionTokens` prop
5752
+ */
5753
+ composition: ConceptComposition;
5754
+ }
5755
+ interface ConceptPulseChartProps {
5756
+ data: ConceptPoint[];
5757
+ /** Which token family the composition keys map to @default "flow" */
5758
+ compositionScale?: CompositionScale;
5759
+ /**
5760
+ * For `compositionScale="custom"`, supply a key → CSS-color map
5761
+ * (e.g., `{ a: 'hsl(var(--brand-default))', b: 'red' }`).
5762
+ */
5763
+ compositionTokens?: Record<string, string>;
5764
+ /** Per-key labels for tooltip (custom scale only) */
5765
+ compositionLabels?: Record<string, string>;
5766
+ /** Optional bubble size range (px area) when z is provided @default [80, 600] */
5767
+ zRange?: [number, number];
5768
+ /** Center bubble radius when z is omitted @default 14 */
5769
+ centerRadius?: number;
5770
+ /** Outer arc radius offset (added to centerRadius) @default 8 */
5771
+ arcThickness?: number;
5772
+ /** Show concept label below the bubble @default false (use tooltip instead) */
5773
+ showLabels?: boolean;
5774
+ /** Axis configuration */
5775
+ xLabel?: string;
5776
+ yLabel?: string;
5777
+ xUnit?: string;
5778
+ yUnit?: string;
5779
+ xDomain?: [number | 'dataMin' | 'auto', number | 'dataMax' | 'auto'];
5780
+ yDomain?: [number | 'dataMin' | 'auto', number | 'dataMax' | 'auto'];
5781
+ margin?: {
5782
+ top?: number;
5783
+ right?: number;
5784
+ bottom?: number;
5785
+ left?: number;
5786
+ };
5787
+ enableGrid?: boolean;
5788
+ locale?: SupportedLocale;
5789
+ className?: string;
5790
+ isLoading?: boolean;
5791
+ ariaLabel?: string;
5792
+ }
5793
+ declare const ConceptPulseChart: React$1.ForwardRefExoticComponent<ConceptPulseChartProps & React$1.RefAttributes<HTMLDivElement>>;
5794
+
5795
+ /**
5796
+ * PartoNetworkChart — force-directed node/link graph. Uses a lightweight
5797
+ * custom force-simulation (no d3-force dep) — repulsion + link attraction +
5798
+ * centering — to lay out nodes in a stable position inside the container.
5799
+ *
5800
+ * Consumers who want non-force layouts (circular, radial, manual x/y) can
5801
+ * pass nodes with explicit `x`/`y` to skip the simulation.
5802
+ */
5803
+ interface NetworkNode {
5804
+ /** Unique id — used by links for source/target. */
5805
+ id: string;
5806
+ /** Displayed label. */
5807
+ label?: string;
5808
+ /** Optional numeric weight — drives node radius (larger = more important). */
5809
+ weight?: number;
5810
+ /** Category key — maps to a stable palette color. */
5811
+ group?: string;
5812
+ /** Fixed X (skip simulation for this node) */
5813
+ fx?: number;
5814
+ /** Fixed Y */
5815
+ fy?: number;
5816
+ /** Explicit color override */
5817
+ color?: string;
5818
+ }
5819
+ interface NetworkLink {
5820
+ /** Source node id. */
5821
+ source: string;
5822
+ /** Target node id. */
5823
+ target: string;
5824
+ /** Optional numeric weight — drives stroke width. */
5825
+ value?: number;
5826
+ }
5827
+ interface PartoNetworkChartProps {
5828
+ nodes: NetworkNode[];
5829
+ links: NetworkLink[];
5830
+ /** Base node radius in px @default 12 */
5831
+ nodeRadius?: number;
5832
+ /** Max node radius (when scaling by weight) @default 24 */
5833
+ maxNodeRadius?: number;
5834
+ /** Link base stroke width @default 1.5 */
5835
+ linkStrokeWidth?: number;
5836
+ /** Max link stroke width (when scaling by value) @default 6 */
5837
+ maxLinkStrokeWidth?: number;
5838
+ /** Number of simulation ticks @default 250 */
5839
+ iterations?: number;
5840
+ /** Show node labels @default true */
5841
+ showLabels?: boolean;
5842
+ /** Locale for labels + digits @default 'fa' */
5843
+ locale?: SupportedLocale;
5844
+ /** Tooltip formatter (node hover) */
5845
+ nodeTooltip?: (node: NetworkNode) => React$1.ReactNode;
5846
+ /** Callback when a node is clicked */
5847
+ onNodeClick?: (node: NetworkNode) => void;
5848
+ className?: string;
5849
+ isLoading?: boolean;
5850
+ ariaLabel?: string;
5851
+ }
5852
+ declare const PartoNetworkChart: React$1.ForwardRefExoticComponent<PartoNetworkChartProps & React$1.RefAttributes<HTMLDivElement>>;
5853
+
5854
+ /**
5855
+ * Chart-shaped empty state — a lightweight placeholder for charts with no data.
5856
+ * Designed to be drop-in compatible with `PartoBarChart`, `PartoLineChart`, etc.
5857
+ * Sits inside `ChartContainer` consumers, so it accepts the same wrapper
5858
+ * `className` and fills 100% of the parent's bounds.
5859
+ */
5860
+ type EmptyChartShape = 'bar' | 'line' | 'pie' | 'network' | 'generic';
5861
+ interface EmptyChartProps extends React$1.HTMLAttributes<HTMLDivElement> {
5862
+ /** Visual shape hint for the icon @default "generic" */
5863
+ shape?: EmptyChartShape;
5864
+ /** Primary message. Defaults to a locale-specific "no data" string. */
5865
+ message?: React$1.ReactNode;
5866
+ /** Secondary helper text below the message */
5867
+ hint?: React$1.ReactNode;
5868
+ /** Optional action (button, link) shown under the text */
5869
+ action?: React$1.ReactNode;
5870
+ /** Locale @default "fa" */
5871
+ locale?: SupportedLocale;
5872
+ }
5873
+ declare const EmptyChart: React$1.ForwardRefExoticComponent<EmptyChartProps & React$1.RefAttributes<HTMLDivElement>>;
3232
5874
 
3233
5875
  type Direction = 'ltr' | 'rtl';
3234
5876
  declare function useDocumentDirection(): Direction;
@@ -3377,4 +6019,113 @@ declare function transformNivoLineData(nivoData: Array<{
3377
6019
  */
3378
6020
  declare function useScrollLock(locked: boolean): void;
3379
6021
 
3380
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AnimatedNumber, type AnimatedNumberProps, AppBar, type AppBarProps, AppLayout, AppLayoutContent, AspectRatio, type AspectRatioType, Autocomplete, type AutocompleteItem, type AutocompleteProps, Avatar, AvatarFallback, AvatarGroup, type AvatarGroupItem, type AvatarGroupProps, AvatarImage, Badge, type BadgeProps, Banner, type BannerProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonProps, type ButtonVariantProps, CHART_FONT_FAMILY, Calendar, type CalendarProps, Callout, CalloutDescription, type CalloutProps, CalloutTitle, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardProps, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLoadingSkeleton, ChartSkeleton, type ChartSkeletonProps$1 as ChartSkeletonProps, ChartTooltip, Checkbox, CircularProgress, type CircularProgressProps, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, CommentCard, type CommentCardProps, type CommentTag, ComparisonCard, type ComparisonCardProps, ConfirmDialog, type ConfirmDialogProps, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, type CopyButtonProps, DEFAULT_PERIODS, DataTable, type DataTableColumn, type DataTablePagination, type DataTableProps, type DataTableSelection, type DataTableSort, DatePicker, type DatePickerProps, DateRangePicker, DateRangePickerInline, type DateRangePickerProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, type Direction, DirectionalBox, type DirectionalBoxProps, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, ENGAGEMENT_RANGES, Empty, EmptyAction, EmptyDescription, EmptyIcon, EmptyTitle, type EngagementRange, type EngagementRangeWithDisplay, EngagementRate, EngagementRateBar, type EngagementRateBarProps, type EngagementRateProps, type EngagementTier, ErrorBoundary, type ErrorBoundaryProps, ErrorState, type ErrorStateProps, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, FilterBar, FilterBarActions, type FilterBarActionsProps, FilterBarActiveFilters, type FilterBarActiveFiltersProps, FilterBarClear, type FilterBarClearProps, type FilterBarProps, FilterBarRow, type FilterBarRowProps, FilterChip, FilterChipGroup, type FilterChipProps, type FollowerGroup, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, GROUP_LABELS, HashtagInput, type TagInputProps as HashtagInputProps, type HeatMapDatum, type HeatMapRow, HoverCard, HoverCardContent, HoverCardTrigger, type Icon, Icons, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, type InputProps, InputVariants, InputWithIcon, type InputWithIconProps, InstagramPost, type InstagramPostProps, type InstagramProfileInfo, Kbd, KbdGroup, Label, type LegacySize, type LoadingVariantProps, type Locale, type MediaItem, type MediaType, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MetricCard, MetricCardContent, MetricCardDifferential, MetricCardHeader, MetricCardLabel, MetricCardSkeleton, type MetricCardSkeletonProps, MetricCardSparkline, MetricCardValue, MultiSelect, type MultiSelectOption, type MultiSelectProps, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavPanel, NavPanelContent, NavPanelFooter, NavPanelHeader, NavRail, NavRailContent, NavRailFooter, NavRailHeader, NavRailItem, NavRailProvider, NavRailSeparator, NavRailTrigger, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, type NumberFormat, PERSIAN_MONTHS, PERSIAN_MONTHS_SHORT, PERSIAN_WEEKDAYS, PERSIAN_WEEKDAYS_SHORT, PageHeader, type PageHeaderProps, PageLoader, type PageLoaderProps, Pagination, PaginationContent, PaginationControlled, type PaginationControlledProps, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PartoAreaChart, type PartoAreaChartProps, PartoBarChart, type PartoBarChartProps, PartoHeatMap, type PartoHeatMapProps, PartoLineChart, type PartoLineChartProps, PartoPieChart, type PartoPieChartProps, PartoRadarChart, type PartoRadarChartProps, type PartoToasterProps, PartoWordCloud, type PartoWordCloudProps, type PeriodOption, PeriodSelector, type PeriodSelectorProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, type PostStats, ProfileCard, type ProfileCardProps, ProfileInfo, type ProfileInfoProps, Progress, type ProgressProps, RadioCardDescription, RadioCardItem, RadioCardTitle, RadioCards, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, SONNER_DEFAULT_DURATION, SafeImage, type SafeImageProps, ScrollArea, ScrollBar, SearchInput, type SearchInputProps, type SectionItem, SectionNavigator, type SectionNavigatorProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectTriggerVariants, SelectValue, SentimentBadge, type SentimentBadgeProps, type SentimentData, SentimentDistribution, type SentimentDistributionProps, Separator, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, type SizeWithLegacy, Skeleton, type SkeletonProps, Slider, type SocialPlatform, SocialPlatformBadge, type SocialPlatformBadgeProps, type SortDirection, Spinner, type SpinnerProps, type StandardSize, StatDisplay, type StatDisplayProps, Step, type StepProps, Stepper, type StepperProps, type SupportedLocale, Switch, type SwitchProps, TIER_LABELS, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, TableSkeleton, type TableSkeletonProps, TableSortHeader, Tabs, TabsContent, TabsList, TabsTrigger, TagInput, type TagInputProps, Textarea, type TimeFormat, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TrendIndicator, type TrendIndicatorProps, type UIStringKeys, type UIStrings, UI_STRINGS, type UseInfiniteScrollOptions, type UseInfiniteScrollReturn, UserAutocomplete, type UserAutocompleteProps, type UserItem, type ViewMode, ViewToggle, type ViewToggleProps, type WordData, appBarVariants, avatarGroupVariants, badgeVariants, bannerVariants, buttonGroupVariants, buttonVariants, calloutVariants, cardVariants, cn, convertToLocalNumbers, engagementUiTranslations, formatAbsoluteTime, formatJalaliDate, formatLargeNumber, formatNumber, formatPersianDateRange, formatRelativeTime, getCurrentRangeIndex, getEngagementRanges, getFollowerGroup, getPersianDay, getPersianMonth, getPersianMonthName, getPersianMonthNameShort, getPersianMonthsForDropdown, getPersianWeekdayName, getPersianYear, getPersianYearsForDropdown, getUIStrings, tagInputVariants as hashtagInputVariants, inputVariants, instagramPostVariants, isRTL, jalaliToGregorian, navigationMenuTriggerStyle, normalizeSize, pageLoaderVariants, profileCardVariants, sentimentLabels, socialPlatformBadgeVariants, spinnerVariants, statDisplayVariants, tagInputVariants, toEnglishDigits, toPersianDigits, toggleVariants, transformNivoLineData, useChartTheme, useDebounce, useDocumentDirection, useFormField, useInfiniteScroll, useIsMobile, useLocalStorage, useNavRail, useRootStyles, useScrollLock, useSidebar };
6022
+ /**
6023
+ * Fires `handler` whenever a pointer event lands outside the referenced
6024
+ * element. Use for closing dropdowns, popovers, dismissable cards, etc.
6025
+ *
6026
+ * @example
6027
+ * const ref = useRef<HTMLDivElement>(null)
6028
+ * useOutsideClick(ref, () => setOpen(false), { when: open })
6029
+ *
6030
+ * @param ref - Ref to the inside element. Clicks inside (or on descendants) are ignored.
6031
+ * @param handler - Called when an outside click is detected.
6032
+ * @param options.when - When false, the listener is detached (avoid stale closures).
6033
+ * @param options.events - Which events to listen for. Default: ['mousedown', 'touchstart'].
6034
+ * Using 'mousedown' (instead of 'click') closes the menu before any click handler
6035
+ * inside fires — matches Radix/Headless UI behaviour.
6036
+ */
6037
+ declare function useOutsideClick<T extends HTMLElement = HTMLElement>(ref: React$1.RefObject<T | null>, handler: (event: MouseEvent | TouchEvent) => void, options?: {
6038
+ when?: boolean;
6039
+ events?: Array<'mousedown' | 'mouseup' | 'click' | 'touchstart' | 'touchend'>;
6040
+ }): void;
6041
+
6042
+ /**
6043
+ * Subscribes to a CSS media query and returns its current match state.
6044
+ * SSR-safe: returns `undefined` on the server and on the initial client
6045
+ * render (consumers must handle the `undefined` case).
6046
+ *
6047
+ * @example
6048
+ * const isLarge = useMediaQuery('(min-width: 1024px)')
6049
+ * if (isLarge) ... // narrow to true|false
6050
+ *
6051
+ * @example presets
6052
+ * const prefersDark = useMediaQuery('(prefers-color-scheme: dark)')
6053
+ * const reducedMotion = useMediaQuery('(prefers-reduced-motion: reduce)')
6054
+ */
6055
+ declare function useMediaQuery(query: string): boolean | undefined;
6056
+ /** Common breakpoint helper. Returns `undefined` until hydrated. */
6057
+ declare function useBreakpoint(breakpoint: 'sm' | 'md' | 'lg' | 'xl' | '2xl'): boolean | undefined;
6058
+
6059
+ interface UseClipboardOptions {
6060
+ /** Reset `copied` back to false after this many ms. @default 2000 */
6061
+ resetAfter?: number | false;
6062
+ }
6063
+ interface UseClipboardReturn {
6064
+ /** True for `resetAfter` ms after a successful copy. */
6065
+ copied: boolean;
6066
+ /** True if the last copy attempt threw. */
6067
+ error: Error | null;
6068
+ /**
6069
+ * Copy a string to clipboard. Returns a promise that resolves to `true` on
6070
+ * success, `false` if the API isn't available, and rejects on permission
6071
+ * denial (caught and exposed via `error`).
6072
+ */
6073
+ copy: (value: string) => Promise<boolean>;
6074
+ /** Manually reset `copied` and `error` state. */
6075
+ reset: () => void;
6076
+ }
6077
+ /**
6078
+ * useClipboard — copy text to the system clipboard with a transient `copied`
6079
+ * flag suitable for "Copied!" affordances. Uses the modern Clipboard API
6080
+ * with a `document.execCommand('copy')` fallback for older browsers.
6081
+ *
6082
+ * @example
6083
+ * const { copied, copy } = useClipboard()
6084
+ * <button onClick={() => copy('hello')}>{copied ? 'کپی شد' : 'کپی'}</button>
6085
+ */
6086
+ declare function useClipboard(options?: UseClipboardOptions): UseClipboardReturn;
6087
+
6088
+ /**
6089
+ * Returns the value from the previous render. Useful for diffing props,
6090
+ * detecting transitions, and triggering effects on specific value changes.
6091
+ *
6092
+ * @example
6093
+ * const prevId = usePrevious(currentId)
6094
+ * useEffect(() => {
6095
+ * if (prevId !== currentId) trackNavigation(prevId, currentId)
6096
+ * }, [prevId, currentId])
6097
+ *
6098
+ * @returns `undefined` on first render, then the value from the previous render.
6099
+ */
6100
+ declare function usePrevious<T>(value: T): T | undefined;
6101
+
6102
+ /**
6103
+ * Lightweight async-state hook for one-shot fetches without bringing in
6104
+ * TanStack Query. Tracks loading / data / error and exposes a stable
6105
+ * `run` function plus a `reset`. For request deduplication, caching,
6106
+ * retry, mutation, optimistic updates, etc. **prefer TanStack Query** —
6107
+ * this hook intentionally stays tiny.
6108
+ *
6109
+ * @example
6110
+ * const { data, error, status, run } = useAsync<User>()
6111
+ * useEffect(() => { run(() => fetch(`/api/users/${id}`).then(r => r.json())) }, [id, run])
6112
+ * if (status === 'loading') return <Skeleton />
6113
+ * if (status === 'error') return <ErrorState onRetry={run} />
6114
+ * return <UserCard user={data!} />
6115
+ */
6116
+ type AsyncStatus = 'idle' | 'loading' | 'success' | 'error';
6117
+ interface UseAsyncReturn<T> {
6118
+ data: T | null;
6119
+ error: unknown;
6120
+ status: AsyncStatus;
6121
+ isIdle: boolean;
6122
+ isLoading: boolean;
6123
+ isSuccess: boolean;
6124
+ isError: boolean;
6125
+ /** Run an async operation. Cancels the previous in-flight result. */
6126
+ run: (operation: () => Promise<T>) => Promise<T | undefined>;
6127
+ reset: () => void;
6128
+ }
6129
+ declare function useAsync<T = unknown>(initialData?: T | null): UseAsyncReturn<T>;
6130
+
6131
+ export { ACTION_STATUS_KEYS, ACTION_TYPE_KEYS, ACTION_TYPE_META, Accordion, AccordionContent, AccordionItem, AccordionTrigger, type ActionStatusKey, ActionTimeline, type ActionTimelineDensity, type ActionTimelineGroupBy, ActionTimelineItem, type ActionTimelineItemData, type ActionTimelineItemProps, type ActionTimelineProps, ActionTypeChip, type ActionTypeChipProps, type ActionTypeKey, ActiveFiltersBar, type ActiveFiltersBarProps, ActiveFiltersClearAll, type ActiveFiltersClearAllProps, Alert, type AlertChannel, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertRuleCard, type AlertRuleCardProps, AlertTitle, AnimatedNumber, type AnimatedNumberProps, AppBar, type AppBarProps, AppLayout, AppLayoutContent, AspectRatio, type AsyncStatus, Autocomplete, type AutocompleteItem, type AutocompleteProps, Avatar, AvatarFallback, AvatarGroup, type AvatarGroupItem, type AvatarGroupProps, AvatarImage, AvatarTextSkeleton, type AvatarTextSkeletonProps, Badge, type BadgeProps, Banner, type BannerProps, type BenchmarkMarker, type BenchmarkTier, type BotDetectionData, type BotDetectionKey, BotDetectionMeter, type BotDetectionMeterProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BulletinViewer, type BulletinViewerProps, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonProps, type ButtonVariantProps, CHART_FONT_FAMILY, CRITERION_TIER_KEYS, Calendar, type CalendarProps, Callout, CalloutDescription, type CalloutProps, CalloutTitle, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardProps, CardSkeleton, type CardSkeletonProps, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLoadingSkeleton, ChartSkeleton, type ChartSkeletonProps$1 as ChartSkeletonProps, ChartTooltip, Checkbox, CircularProgress, type CircularProgressProps, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandPalette, type CommandPaletteItem, type CommandPaletteProps, type CommandPaletteRecentsConfig, CommandSeparator, CommandShortcut, CommentCard, type CommentCardProps, type CommentTag, ComparisonCard, type ComparisonCardProps, type ComparisonEntity, type ComparisonMetric, ComparisonRadar, type ComparisonRadarProps, type ComparisonWinner, type CompositionScale, ConceptCard, type ConceptCardProps, type ConceptComposition, type ConceptPoint, ConceptPulseChart, type ConceptPulseChartProps, ConfirmDialog, type ConfirmDialogProps, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, type CopyButtonProps, type CriterionInputSpec, CriterionScoreCard, type CriterionScoreCardProps, type CriterionTierKey, type CriterionTierThresholds, type CriterionTrend, DEFAULT_CRITERION_THRESHOLDS, DEFAULT_PERIODS, DEFAULT_THRESHOLDS, DataTable, type DataTableColumn, type DataTableColumnVisibility, DataTableColumnVisibilityToggle, type DataTableColumnVisibilityToggleProps, type DataTableExpansion, DataTableExportButton, type DataTableExportButtonProps, type DataTablePagination, type DataTableProps, type DataTableSelection, type DataTableSort, DatePicker, type DatePickerProps, DateRangePicker, DateRangePickerInline, type DateRangePickerProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, type Direction, DirectionalBox, type DirectionalBoxProps, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EMOTION_KEYS, ENGAGEMENT_RANGES, ENTITY_HEALTH_KEYS, EmotionBadge, type EmotionBadgeProps, type EmotionData, EmotionDistribution, type EmotionDistributionProps, type EmotionKey, Empty, EmptyAction, EmptyChart, type EmptyChartProps, type EmptyChartShape, EmptyDescription, EmptyIcon, EmptyTitle, type EngagementRange, type EngagementRangeWithDisplay, EngagementRate, EngagementRateBar, type EngagementRateBarProps, EngagementRateBenchmark, type EngagementRateBenchmarkProps, type EngagementRateProps, type EngagementTier, EntityHealthCard, EntityHealthCardActions, EntityHealthCardFooter, EntityHealthCardHeader, EntityHealthCardHeaderEnd, EntityHealthCardHeaderText, EntityHealthCardMeta, EntityHealthCardMetric, type EntityHealthCardMetricProps, EntityHealthCardMetrics, type EntityHealthCardMetricsProps, EntityHealthCardNarrative, EntityHealthCardPhase, type EntityHealthCardPhaseProps, type EntityHealthCardProps, EntityHealthCardScore, type EntityHealthCardScoreProps, EntityHealthCardSeverityBadge, type EntityHealthCardSeverityBadgeProps, EntityHealthCardSubtitle, EntityHealthCardTitle, type EntityHealthCardTitleProps, EntityHealthCardTrust, type EntityHealthCardTrustProps, type EntityHealthKey, ErrorBoundary, type ErrorBoundaryProps, ErrorState, type ErrorStateProps, type ExportableColumn, FLOW_KEYS, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, FilterBar, FilterBarActions, type FilterBarActionsProps, FilterBarActiveFilters, type FilterBarActiveFiltersProps, FilterBarClear, type FilterBarClearProps, type FilterBarProps, FilterBarRow, type FilterBarRowProps, FilterChip, FilterChipGroup, type FilterChipProps, FilterPanel, FilterPanelBody, FilterPanelClearAll, type FilterPanelClearAllProps, FilterPanelFooter, FilterPanelHeader, type FilterPanelProps, FilterPanelTitle, type FilterPanelTitleProps, FilterPanelTrigger, type FilterPanelTriggerProps, FilterSection, type FilterSectionProps, FlowBadge, type FlowBadgeProps, FlowCell, type FlowCellProps, type FlowData, FlowDistribution, type FlowDistributionProps, type FlowKey, type FollowerGroup, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, FormRowSkeleton, type FormRowSkeletonProps, GROUP_LABELS, HashtagInput, type TagInputProps as HashtagInputProps, type HeatMapDatum, type HeatMapRow, type HotkeyCombo, HoverCard, HoverCardContent, HoverCardTrigger, type Icon, Icons, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, type InputProps, InputVariants, InputWithIcon, type InputWithIconProps, JOB_STATUS_KEYS, JobCard, JobCardActions, JobCardError, JobCardHeader, JobCardHeaderActions, JobCardHeaderText, JobCardMeta, JobCardMetaItem, type JobCardMetaItemProps, JobCardProgress, type JobCardProgressProps, type JobCardProps, JobCardStat, type JobCardStatProps, JobCardStats, type JobCardStatsProps, JobCardStatusBadge, type JobCardStatusBadgeProps, JobCardSubtitle, JobCardThumbnail, type JobCardThumbnailProps, JobCardTitle, type JobCardTitleProps, type JobStatusKey, JobWizard, type JobWizardApi, JobWizardBack, type JobWizardBackProps, JobWizardBody, JobWizardCancel, type JobWizardCancelProps, JobWizardError, JobWizardFooter, JobWizardHeader, type JobWizardHeaderProps, JobWizardNext, type JobWizardNextProps, type JobWizardProps, JobWizardSkip, type JobWizardSkipProps, JobWizardSpacer, type JobWizardStep, JobWizardStepper, type JobWizardStepperProps, type JobWizardSubmitState, JobWizardSuccess, type JobWizardSuccessProps, type JobWizardValidationResult, Kbd, KbdGroup, Label, type LegacySize, type LoadingVariantProps, type Locale, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MetricCard, MetricCardContent, MetricCardDifferential, MetricCardHeader, MetricCardLabel, MetricCardSkeleton, type MetricCardSkeletonProps, MetricCardSparkline, MetricCardValue, MultiSelect, type MultiSelectOption, type MultiSelectProps, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavGroup, type NavGroupProps, NavItem, type NavItemBaseProps, type NavItemProps, type NavMatchStrategy, NavPanel, NavPanelContent, NavPanelFooter, NavPanelHeader, NavRail, NavRailContent, NavRailFooter, NavRailHeader, NavRailItem, NavRailProvider, NavRailSeparator, NavRailTrigger, NavSeparator, NavTree, type NavTreeContextValue, NavTreeProvider, type NavTreeProviderProps, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, type NetworkLink, type NetworkNode, NotificationCenter, type NotificationCenterProps, type NotificationFilter, type NotificationItem, type NotificationSeverity, PERSIAN_MONTHS, PERSIAN_MONTHS_SHORT, PERSIAN_WEEKDAYS, PERSIAN_WEEKDAYS_SHORT, PageCard, type PageCardContentMix, type PageCardProps, PageHeader, type PageHeaderProps, PageLoader, type PageLoaderProps, Pagination, PaginationContent, PaginationControlled, type PaginationControlledProps, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PartoAreaChart, type PartoAreaChartProps, PartoBarChart, type PartoBarChartProps, PartoHeatMap, type PartoHeatMapProps, PartoLineChart, type PartoLineChartProps, PartoNetworkChart, type PartoNetworkChartProps, PartoPieChart, type PartoPieChartProps, PartoRadarChart, type PartoRadarChartProps, PartoSankeyChart, type PartoSankeyChartProps, PartoScatterChart, type PartoScatterChartProps, type PartoToasterProps, PartoWordCloud, type PartoWordCloudProps, type PeriodOption, PeriodSelector, type PeriodSelectorProps, type PlatformMetadata, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, type PostAction, PostActions, type PostActionsProps, type PostAiAnalysis, type PostAiEntity, type PostAuthor, PostBody, type PostBodyData, type PostBodyProps, PostCard, type PostCardProps, type PostComment, type PostCommentAuthor, type PostData, type PostDensity, type PostDetails, PostDetailsModal, type PostDetailsModalProps, type PostDetailsTab, type PostEmotion, type PostEnrichmentFlags, PostHeader, type PostHeaderProps, type PostIntent, PostList, type PostListProps, type PostMediaItem, PostMetadata, type PostMetadataProps, type PostMetrics, type PostPlatform, type PostSentiment, type PostingFrequencyCell, PostingFrequencyHeatmap, type PostingFrequencyHeatmapProps, type PostingFrequencySummary, type PostingWeekStart, ProfileCard, type ProfileCardProps, ProfileInfo, type ProfileInfoProps, Progress, ProgressCell, type ProgressCellProps, type ProgressProps, type QuotaLevel, QuotaProgressBar, type QuotaProgressBarProps, type QuotaThresholds, RadioCardDescription, RadioCardItem, RadioCardTitle, RadioCards, RadioGroup, RadioGroupItem, RateLimitBanner, type RateLimitBannerProps, ReportComposer, type ReportComposerProps, ReportSection, type ReportSectionProps, ResizableHandle, ResizablePanel, ResizablePanelGroup, RouteProgress, type RouteProgressHandle, type RouteProgressProps, SONNER_DEFAULT_DURATION, STAGE_STATUS_KEYS, SafeImage, type SafeImageProps, type SankeyLink, type SankeyNode, SavedQueryCard, type SavedQueryCardProps, type SavedQueryFilter, ScrollArea, ScrollBar, SearchInput, type SearchInputProps, type SectionItem, SectionNavigator, type SectionNavigatorProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectTriggerVariants, SelectValue, SentimentBadge, type SentimentBadgeProps, SentimentCell, type SentimentCellProps, type SentimentData, SentimentDistribution, type SentimentDistributionProps, Separator, SeverityBadge, type SeverityBadgeProps, type SeverityKey, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, SiteHeader, SiteHeaderActions, SiteHeaderEnd, type SiteHeaderProps, SiteHeaderSeparator, SiteHeaderStart, SiteHeaderSubtitle, SiteHeaderTitle, SiteHeaderTitleGroup, type SizeWithLegacy, Skeleton, type SkeletonProps, Slider, type SocialPlatform, SocialPlatformBadge, type SocialPlatformBadgeProps, type SortDirection, Sparkline, SparklineCell, type SparklineCellProps, type SparklineProps, type SparklineTrend, type SparklineVariant, Spinner, type SpinnerProps, type StageStatusKey, type StandardSize, StatDeltaCell, type StatDeltaCellProps, StatDisplay, type StatDisplayProps, StatusBadge, type StatusBadgeProps, StatusFlow, type StatusFlowOrientation, type StatusFlowProps, type StatusFlowSize, StatusFlowStage, type StatusFlowStageData, type StatusFlowStageProps, type StatusKey, StatusPulseCell, type StatusPulseCellProps, Step, type StepProps, Stepper, type StepperProps, type SupportedLocale, Switch, type SwitchProps, TIER_LABELS, Table, TableBody, TableCaption, TableCell, TableComparisonView, type TableComparisonViewProps, TableFooter, TableHead, TableHeader, TableRow, TableRowSkeleton, type TableRowSkeletonProps, TableSkeleton, type TableSkeletonProps, TableSortHeader, Tabs, TabsContent, TabsList, TabsTrigger, TagInput, type TagInputProps, Textarea, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TrendCell, type TrendCellProps, TrendIndicator, type TrendIndicatorProps, type UIStringKeys, type UIStrings, UI_STRINGS, type UseAsyncReturn, type UseClipboardOptions, type UseClipboardReturn, type UseHotkeysOptions, type UseInfiniteScrollOptions, type UseInfiniteScrollReturn, type UseJobWizardOptions, UserAutocomplete, type UserAutocompleteProps, type UserItem, UserMenu, type UserMenuItem, type UserMenuProps, type UserMenuUser, type ViewMode, ViewToggle, type ViewToggleProps, type WordData, actionStatusLabels, actionTypeChipVariants, actionTypeLabels, actionTypeVerbs, appBarVariants, avatarGroupVariants, badgeVariants, bannerVariants, buildCsv, buildPostingFrequencyRows, buildTsv, buttonGroupVariants, buttonVariants, calloutVariants, cardVariants, cn, computeComparisonWinners, convertToLocalNumbers, countComparisonWins, defaultActions as defaultPostActions, downloadFile, emotionLabels, engagementUiTranslations, entityHealthLabels, entityHealthPriority, findTierIndex, flowLabels, formatAbsoluteTime, formatHotkey, formatJalaliDate, formatLargeNumber, formatNumber, formatPersianDateRange, formatRelativeLocaleTime, formatRelativeTime, formatTimeRemaining, getCriterionTier, getCurrentRangeIndex, getEngagementRanges, getEngagementRateBenchmarkTiers, getFollowerGroup, getPersianDay, getPersianMonth, getPersianMonthName, getPersianMonthNameShort, getPersianMonthsForDropdown, getPersianWeekdayName, getPersianYear, getPersianYearsForDropdown, getScoreBenchmarkTiers, getUIStrings, tagInputVariants as hashtagInputVariants, inputVariants, isActiveJobStatus, isCriticalEntityHealth, isRTL, jalaliToGregorian, jobStatusLabels, navItemVariants, navigationMenuTriggerStyle, normalizeSize, pageLoaderVariants, postCardVariants, postHeaderVariants, profileCardVariants, resolveLevel, sentimentLabels, severityLabels, siteHeaderVariants, socialPlatformBadgeVariants, spinnerVariants, stageStatusLabels, statDisplayVariants, statusLabels, tagInputVariants, toEnglishDigits, toPersianDigits, toggleVariants, transformNivoLineData, useAsync, useBreakpoint, useChartTheme, useClipboard, useDebounce, useDocumentDirection, useFormField, useHotkeys, useInfiniteScroll, useIsMobile, useJobWizard, useJobWizardState, useLocalStorage, useMediaQuery, useNavRail, useNavTree, useOutsideClick, usePrevious, useRootStyles, useScrollLock, useSidebar };