@parto-system-design/ui 1.1.7 → 1.1.9

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.
Files changed (122) hide show
  1. package/dist/{chunk-HEYMLQOV.cjs → chunk-2ACKKPWA.cjs} +22 -4
  2. package/dist/chunk-2ACKKPWA.cjs.map +1 -0
  3. package/dist/{chunk-RA5KZNG5.js → chunk-3QYYPPFJ.js} +8 -8
  4. package/dist/chunk-3QYYPPFJ.js.map +1 -0
  5. package/dist/{chunk-OEVMKFFL.cjs → chunk-4WONHORR.cjs} +47 -35
  6. package/dist/chunk-4WONHORR.cjs.map +1 -0
  7. package/dist/{chunk-NEML6RCV.js → chunk-5HCXH6GS.js} +6 -2
  8. package/dist/chunk-5HCXH6GS.js.map +1 -0
  9. package/dist/{chunk-53QY4PD3.js → chunk-GCZ6YATL.js} +38 -6
  10. package/dist/chunk-GCZ6YATL.js.map +1 -0
  11. package/dist/{chunk-GDHRYKVM.js → chunk-GPYJ66CG.js} +4 -4
  12. package/dist/chunk-GPYJ66CG.js.map +1 -0
  13. package/dist/{chunk-SCGW2BH4.cjs → chunk-HS3XI3CC.cjs} +5 -5
  14. package/dist/chunk-HS3XI3CC.cjs.map +1 -0
  15. package/dist/chunk-JCJLN437.js +108 -0
  16. package/dist/chunk-JCJLN437.js.map +1 -0
  17. package/dist/{chunk-MQGQVI3W.cjs → chunk-JMKNNH63.cjs} +39 -7
  18. package/dist/chunk-JMKNNH63.cjs.map +1 -0
  19. package/dist/{chunk-34JUCX2G.cjs → chunk-K6G63EED.cjs} +2 -4
  20. package/dist/chunk-K6G63EED.cjs.map +1 -0
  21. package/dist/{chunk-3AIJKXBV.cjs → chunk-KYM7NIJO.cjs} +200 -9
  22. package/dist/chunk-KYM7NIJO.cjs.map +1 -0
  23. package/dist/{chunk-ZZFNJR2E.js → chunk-MEKWH3GS.js} +22 -4
  24. package/dist/chunk-MEKWH3GS.js.map +1 -0
  25. package/dist/{chunk-YE477L2H.cjs → chunk-MMC6M35Q.cjs} +10 -10
  26. package/dist/chunk-MMC6M35Q.cjs.map +1 -0
  27. package/dist/{chunk-LZMCMZZF.js → chunk-NMH43BDC.js} +44 -32
  28. package/dist/chunk-NMH43BDC.js.map +1 -0
  29. package/dist/chunk-NORDUD2T.cjs +135 -0
  30. package/dist/chunk-NORDUD2T.cjs.map +1 -0
  31. package/dist/{chunk-SCX6AR53.cjs → chunk-OQB6HIUL.cjs} +5 -5
  32. package/dist/{chunk-SCX6AR53.cjs.map → chunk-OQB6HIUL.cjs.map} +1 -1
  33. package/dist/{chunk-IQHKJ4SS.js → chunk-PYURPUTV.js} +195 -6
  34. package/dist/chunk-PYURPUTV.js.map +1 -0
  35. package/dist/{chunk-AXAY64KL.js → chunk-S3T2L6NA.js} +3 -4
  36. package/dist/chunk-S3T2L6NA.js.map +1 -0
  37. package/dist/{chunk-MBCTRNTG.js → chunk-SXWSOU3Y.js} +3 -3
  38. package/dist/{chunk-MBCTRNTG.js.map → chunk-SXWSOU3Y.js.map} +1 -1
  39. package/dist/chunk-TWJXOV4C.js +145 -0
  40. package/dist/chunk-TWJXOV4C.js.map +1 -0
  41. package/dist/{chunk-P5XHPNJG.cjs → chunk-U3ADRIVO.cjs} +6 -2
  42. package/dist/chunk-U3ADRIVO.cjs.map +1 -0
  43. package/dist/chunk-UOZN45G4.cjs +130 -0
  44. package/dist/chunk-UOZN45G4.cjs.map +1 -0
  45. package/dist/chunk-VHLDOG74.cjs +167 -0
  46. package/dist/chunk-VHLDOG74.cjs.map +1 -0
  47. package/dist/{chunk-VO3B75F6.cjs → chunk-YENXXYUV.cjs} +4 -4
  48. package/dist/{chunk-VO3B75F6.cjs.map → chunk-YENXXYUV.cjs.map} +1 -1
  49. package/dist/chunk-YFQWC2PW.js +113 -0
  50. package/dist/chunk-YFQWC2PW.js.map +1 -0
  51. package/dist/{chunk-YAJWTNOX.js → chunk-ZBZDR4ZC.js} +3 -3
  52. package/dist/{chunk-YAJWTNOX.js.map → chunk-ZBZDR4ZC.js.map} +1 -1
  53. package/dist/components/charts/PartoAreaChart.cjs +3 -3
  54. package/dist/components/charts/PartoAreaChart.d.cts +2 -0
  55. package/dist/components/charts/PartoAreaChart.d.ts +2 -0
  56. package/dist/components/charts/PartoAreaChart.js +2 -2
  57. package/dist/components/charts/PartoBarChart.cjs +3 -3
  58. package/dist/components/charts/PartoBarChart.d.cts +6 -0
  59. package/dist/components/charts/PartoBarChart.d.ts +6 -0
  60. package/dist/components/charts/PartoBarChart.js +2 -2
  61. package/dist/components/charts/PartoLineChart.cjs +3 -3
  62. package/dist/components/charts/PartoLineChart.d.cts +8 -0
  63. package/dist/components/charts/PartoLineChart.d.ts +8 -0
  64. package/dist/components/charts/PartoLineChart.js +2 -2
  65. package/dist/components/charts/PartoPieChart.cjs +3 -3
  66. package/dist/components/charts/PartoPieChart.d.cts +8 -0
  67. package/dist/components/charts/PartoPieChart.d.ts +8 -0
  68. package/dist/components/charts/PartoPieChart.js +2 -2
  69. package/dist/components/ui/badge.cjs +3 -3
  70. package/dist/components/ui/badge.js +1 -1
  71. package/dist/components/ui/button.cjs +4 -4
  72. package/dist/components/ui/button.js +2 -2
  73. package/dist/components/ui/calendar.cjs +4 -4
  74. package/dist/components/ui/calendar.js +3 -3
  75. package/dist/components/ui/data-table.cjs +4 -4
  76. package/dist/components/ui/data-table.js +3 -3
  77. package/dist/components/ui/input.cjs +5 -5
  78. package/dist/components/ui/input.js +2 -2
  79. package/dist/components/ui/page-card.cjs +2 -2
  80. package/dist/components/ui/page-card.d.cts +1 -1
  81. package/dist/components/ui/page-card.d.ts +1 -1
  82. package/dist/components/ui/page-card.js +1 -1
  83. package/dist/components/ui/saved-query-card.cjs +4 -4
  84. package/dist/components/ui/saved-query-card.js +3 -3
  85. package/dist/index.cjs +5349 -3558
  86. package/dist/index.cjs.map +1 -1
  87. package/dist/index.css +357 -92
  88. package/dist/index.d.cts +956 -197
  89. package/dist/index.d.ts +956 -197
  90. package/dist/index.js +5165 -3409
  91. package/dist/index.js.map +1 -1
  92. package/dist/{page-card-DOl50DqJ.d.cts → page-card-CmShVqG-.d.cts} +1 -1
  93. package/dist/{page-card-CO92oXkc.d.ts → page-card-HBn-cy4J.d.ts} +1 -1
  94. package/package.json +1 -1
  95. package/dist/chunk-34JUCX2G.cjs.map +0 -1
  96. package/dist/chunk-3AIJKXBV.cjs.map +0 -1
  97. package/dist/chunk-53QY4PD3.js.map +0 -1
  98. package/dist/chunk-7Y4V3R3Y.cjs +0 -120
  99. package/dist/chunk-7Y4V3R3Y.cjs.map +0 -1
  100. package/dist/chunk-AXAY64KL.js.map +0 -1
  101. package/dist/chunk-D5XCQDFS.js +0 -92
  102. package/dist/chunk-D5XCQDFS.js.map +0 -1
  103. package/dist/chunk-GDHRYKVM.js.map +0 -1
  104. package/dist/chunk-HEYMLQOV.cjs.map +0 -1
  105. package/dist/chunk-IQHKJ4SS.js.map +0 -1
  106. package/dist/chunk-LLJR7FV3.js +0 -135
  107. package/dist/chunk-LLJR7FV3.js.map +0 -1
  108. package/dist/chunk-LZMCMZZF.js.map +0 -1
  109. package/dist/chunk-MKYVQQBV.cjs +0 -114
  110. package/dist/chunk-MKYVQQBV.cjs.map +0 -1
  111. package/dist/chunk-MQGQVI3W.cjs.map +0 -1
  112. package/dist/chunk-NEFZJHE4.cjs +0 -157
  113. package/dist/chunk-NEFZJHE4.cjs.map +0 -1
  114. package/dist/chunk-NEML6RCV.js.map +0 -1
  115. package/dist/chunk-OEVMKFFL.cjs.map +0 -1
  116. package/dist/chunk-P5XHPNJG.cjs.map +0 -1
  117. package/dist/chunk-QJ7UB2ZQ.js +0 -98
  118. package/dist/chunk-QJ7UB2ZQ.js.map +0 -1
  119. package/dist/chunk-RA5KZNG5.js.map +0 -1
  120. package/dist/chunk-SCGW2BH4.cjs.map +0 -1
  121. package/dist/chunk-YE477L2H.cjs.map +0 -1
  122. package/dist/chunk-ZZFNJR2E.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { S as SupportedLocale } from './utils-DlXWmDZ-.js';
2
2
  export { c as cn, a as convertToLocalNumbers, e as formatAbsoluteTime, f as formatLargeNumber, b as formatNumber, d as formatRelativeTime } from './utils-DlXWmDZ-.js';
3
- import { A as ActionStatusKey, a as ActionTypeKey, E as EntityHealthKey, J as JobStatusKey, S as StageStatusKey, b as EmotionKey, F as FlowKey, c as StatusKey, d as SeverityKey } from './i18n-ArS3mqj0.js';
3
+ import { A as ActionStatusKey, a as ActionTypeKey, E as EntityHealthKey, J as JobStatusKey, b as EmotionKey, F as FlowKey, S as StageStatusKey, c as StatusKey, d as SeverityKey } from './i18n-ArS3mqj0.js';
4
4
  export { p as ACTION_STATUS_KEYS, w as ACTION_TYPE_KEYS, f as EMOTION_KEYS, z as ENTITY_HEALTH_KEYS, h as FLOW_KEYS, m as JOB_STATUS_KEYS, L as Locale, u as STAGE_STATUS_KEYS, G as UIStringKeys, H as UIStrings, U as UI_STRINGS, q as actionStatusLabels, x as actionTypeLabels, y as actionTypeVerbs, g as emotionLabels, e as engagementUiTranslations, B as entityHealthLabels, C as entityHealthPriority, j as flowLabels, r as formatRelativeLocaleTime, t as formatTimeRemaining, I as getUIStrings, o as isActiveJobStatus, D as isCriticalEntityHealth, i as isRTL, n as jobStatusLabels, s as sentimentLabels, l as severityLabels, v as stageStatusLabels, k as statusLabels } from './i18n-ArS3mqj0.js';
5
5
  import * as React$1 from 'react';
6
6
  import { LucideIcon } from 'lucide-react';
@@ -45,8 +45,8 @@ export { IranProvinceCell, IranProvinceHeat, IranProvinceHeatProps, IranProvince
45
45
  import { OTPInput } from 'input-otp';
46
46
  import * as MenubarPrimitive from '@radix-ui/react-menubar';
47
47
  import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
48
- import { S as SocialPlatform } from './page-card-CO92oXkc.js';
49
- export { f as BotDetectionData, e as BotDetectionKey, B as BotDetectionMeter, g as BotDetectionMeterProps, P as PageCard, a as PageCardContentMix, b as PageCardProps, c as SocialPlatformBadge, d as SocialPlatformBadgeProps, s as socialPlatformBadgeVariants } from './page-card-CO92oXkc.js';
48
+ import { S as SocialPlatform } from './page-card-HBn-cy4J.js';
49
+ export { f as BotDetectionData, e as BotDetectionKey, B as BotDetectionMeter, g as BotDetectionMeterProps, P as PageCard, a as PageCardContentMix, b as PageCardProps, c as SocialPlatformBadge, d as SocialPlatformBadgeProps, s as socialPlatformBadgeVariants } from './page-card-HBn-cy4J.js';
50
50
  export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from './components/ui/popover.js';
51
51
  import * as ProgressPrimitive from '@radix-ui/react-progress';
52
52
  import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
@@ -941,6 +941,12 @@ interface PartoRadarChartProps {
941
941
  className?: string;
942
942
  isLoading?: boolean;
943
943
  ariaLabel?: string;
944
+ /**
945
+ * Render a legend below the radar that names each series. Recommended when
946
+ * more than one Radar fill is drawn — overlapping color-only fills are
947
+ * unreadable for colorblind users (WCAG 1.4.1). @default `false`
948
+ */
949
+ legend?: boolean;
944
950
  }
945
951
  declare const PartoRadarChart: React$1.ForwardRefExoticComponent<PartoRadarChartProps & React$1.RefAttributes<HTMLDivElement>>;
946
952
 
@@ -1643,7 +1649,7 @@ declare namespace DrawerDescription {
1643
1649
  var displayName: string;
1644
1650
  }
1645
1651
 
1646
- declare function DropdownMenu({ ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.Root>): react_jsx_runtime.JSX.Element;
1652
+ declare function DropdownMenu({ dir, ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.Root>): react_jsx_runtime.JSX.Element;
1647
1653
  declare namespace DropdownMenu {
1648
1654
  var displayName: string;
1649
1655
  }
@@ -1665,7 +1671,7 @@ declare namespace DropdownMenuGroup {
1665
1671
  }
1666
1672
  declare function DropdownMenuItem({ className, inset, variant, ...props }: React$1.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
1667
1673
  inset?: boolean;
1668
- variant?: "default" | "destructive";
1674
+ variant?: 'default' | 'destructive';
1669
1675
  }): react_jsx_runtime.JSX.Element;
1670
1676
  declare namespace DropdownMenuItem {
1671
1677
  var displayName: string;
@@ -1692,7 +1698,7 @@ declare function DropdownMenuSeparator({ className, ...props }: React$1.Componen
1692
1698
  declare namespace DropdownMenuSeparator {
1693
1699
  var displayName: string;
1694
1700
  }
1695
- declare function DropdownMenuShortcut({ className, ...props }: React$1.ComponentProps<"span">): react_jsx_runtime.JSX.Element;
1701
+ declare function DropdownMenuShortcut({ className, ...props }: React$1.ComponentProps<'span'>): react_jsx_runtime.JSX.Element;
1696
1702
  declare namespace DropdownMenuShortcut {
1697
1703
  var displayName: string;
1698
1704
  }
@@ -2025,6 +2031,10 @@ interface TagInputProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'on
2025
2031
  prefix?: string;
2026
2032
  /** Locale for sr-only remove label @default "fa" */
2027
2033
  locale?: SupportedLocale;
2034
+ /** Form `name` attribute forwarded to the inner `<input>` (for React Hook Form / native forms). */
2035
+ name?: string;
2036
+ /** HTML5 `required` attribute forwarded to the inner `<input>`. */
2037
+ required?: boolean;
2028
2038
  }
2029
2039
  declare const TagInput: React$1.ForwardRefExoticComponent<TagInputProps & React$1.RefAttributes<HTMLDivElement>>;
2030
2040
 
@@ -2538,7 +2548,7 @@ interface CountryPickerProps {
2538
2548
  */
2539
2549
  declare const CountryPicker: React$1.ForwardRefExoticComponent<CountryPickerProps & React$1.RefAttributes<HTMLDivElement>>;
2540
2550
 
2541
- declare function Menubar({ className, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Root>): react_jsx_runtime.JSX.Element;
2551
+ declare function Menubar({ className, dir, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Root>): react_jsx_runtime.JSX.Element;
2542
2552
  declare namespace Menubar {
2543
2553
  var displayName: string;
2544
2554
  }
@@ -2682,7 +2692,7 @@ declare namespace NativeSelectOptGroup {
2682
2692
  var displayName: string;
2683
2693
  }
2684
2694
 
2685
- declare function NavigationMenu({ className, children, viewport, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Root> & {
2695
+ declare function NavigationMenu({ className, children, viewport, dir, ...props }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Root> & {
2686
2696
  viewport?: boolean;
2687
2697
  }): react_jsx_runtime.JSX.Element;
2688
2698
  declare namespace NavigationMenu {
@@ -2867,6 +2877,15 @@ interface PartoHeatMapProps {
2867
2877
  yAxisLabel?: string;
2868
2878
  /** Filter which x-axis ticks to show */
2869
2879
  xTickFilter?: (value: string | number, index: number) => boolean;
2880
+ /**
2881
+ * Render a continuous-gradient legend below the heatmap that maps the
2882
+ * color intensity to a [min, max] value range. The bar uses the same
2883
+ * `colorScale` the cells use, so the gradient matches the data exactly.
2884
+ * @default `false`
2885
+ */
2886
+ legend?: boolean;
2887
+ /** Caption shown above the gradient bar when `legend` is on (e.g. "تراکم انتشار"). */
2888
+ legendCaption?: React$1.ReactNode;
2870
2889
  }
2871
2890
  declare const PartoHeatMap: React$1.ForwardRefExoticComponent<PartoHeatMapProps & React$1.RefAttributes<HTMLDivElement>>;
2872
2891
 
@@ -2929,64 +2948,168 @@ interface PostingFrequencyHeatmapProps extends Omit<React$1.HTMLAttributes<HTMLD
2929
2948
  declare const PostingFrequencyHeatmap: React$1.ForwardRefExoticComponent<PostingFrequencyHeatmapProps & React$1.RefAttributes<HTMLDivElement>>;
2930
2949
 
2931
2950
  /**
2932
- * Platform sources supported by `<PostCard>`. Extends the existing `SocialPlatform`
2933
- * for Phase 1; additional sources (`facebook`, `news`, `tv`, `radio`) land in Phase 2
2934
- * together with the `SocialPlatformBadge` extension.
2951
+ * The full set of sources a post can originate from in Parto's social-listening +
2952
+ * افکارسنجی pipeline. Extends `SocialPlatform` (7 social networks) with broadcast
2953
+ * (tv, radio) and editorial (press, web) sources.
2954
+ */
2955
+ type PostSource = SocialPlatform | 'tv' | 'radio' | 'press' | 'web';
2956
+ /** High-level grouping that drives header layout and default metric ordering. */
2957
+ type PostSourceCategory = 'social' | 'broadcast' | 'editorial';
2958
+ /**
2959
+ * Derive the source category from a `PostSource` value.
2960
+ * Used internally by `<PostHeader>`, metric label helpers, and default-actions config.
2961
+ */
2962
+ declare function sourceCategory(source: PostSource): PostSourceCategory;
2963
+ /**
2964
+ * @deprecated Use {@link PostSource} for new code. `PostPlatform` is retained with its
2965
+ * historical meaning (the 7 social networks only) so existing components that target
2966
+ * social-specific APIs (e.g. `<SocialPlatformBadge>`) keep their narrow contract.
2967
+ * `PostSource` is the expanded superset (adds tv / radio / press / web).
2935
2968
  */
2936
2969
  type PostPlatform = SocialPlatform;
2970
+ /**
2971
+ * `view` is the canonical PostList render mode. `compact` and `comfortable` are the
2972
+ * pre-existing densities; `grid` is the new magazine/visual layout.
2973
+ */
2974
+ type PostView = 'compact' | 'comfortable' | 'grid';
2975
+ /**
2976
+ * @deprecated Use {@link PostView} instead. `density` is the legacy two-value alias
2977
+ * (compact | comfortable) kept for backward compatibility with PostCard / PostList.
2978
+ */
2937
2979
  type PostDensity = 'compact' | 'comfortable';
2938
2980
  type PostSentiment = 'positive' | 'negative' | 'neutral' | 'mixed';
2981
+ type PostEmotion = 'anger' | 'anticipation' | 'joy' | 'trust' | 'fear' | 'surprise' | 'sadness' | 'disgust' | 'neutral';
2982
+ /** Political flow classification — see CLAUDE.md domain concepts. */
2983
+ type PostFlow = 'pro-gov' | 'internal-critic' | 'internal-opponent' | 'external-opponent' | 'grey';
2984
+ type PostSeverity = 'low' | 'medium' | 'high' | 'critical';
2985
+ type PostStatus = 'normal' | 'warning' | 'critical';
2986
+ type PostAuthorityTier = 'nano' | 'micro' | 'macro' | 'mega';
2939
2987
  interface PostAuthor {
2940
2988
  name: string;
2941
2989
  handle?: string;
2942
2990
  avatarUrl?: string;
2943
2991
  verified?: boolean;
2944
- /** Optional follower / subscriber count — used in PostDetailsModal sidebar. */
2992
+ /** Optional follower / subscriber count. */
2945
2993
  followers?: number;
2946
- }
2947
- interface PostMetrics {
2948
- views?: number;
2949
- likes?: number;
2950
- comments?: number;
2951
- shares?: number;
2952
- /** Estimated reach / potential audience. */
2953
- reach?: number;
2954
- /** Engagement rate as a 0..1 decimal (e.g. 0.034 = 3.4%). */
2955
- engagementRate?: number;
2956
- }
2957
- interface PostTag {
2958
- id: string;
2959
- label: string;
2960
- /** Optional CSS var (e.g. `--chart-1`) or hex color. Auto-assigned from label if omitted. */
2961
- color?: string;
2994
+ /** Optional following / friends count — rendered in the author HoverCard. */
2995
+ following?: number;
2996
+ /** Optional total post count — rendered in the author HoverCard. */
2997
+ postCount?: number;
2998
+ /** Short bio / description from the author's profile (1-2 sentences). */
2999
+ bio?: string;
3000
+ /** Influence score 0..100 used to render the authority chip on the card. */
3001
+ authorityScore?: number;
3002
+ /** Categorical author tier inferred from follower count + engagement. */
3003
+ authorityTier?: PostAuthorityTier;
2962
3004
  }
2963
3005
  /**
2964
- * Flags indicate which enrichments the product has attached to this post.
2965
- * Consumers set these to show the matching chip in `<PostHeader>`.
3006
+ * Editorial / broadcast actor. Used when the post originates from press, web, tv, radio
3007
+ * instead of an individual social-platform account.
2966
3008
  */
2967
- interface PostEnrichmentFlags {
2968
- ocr?: boolean;
2969
- transcript?: boolean;
2970
- aiAnalysis?: boolean;
2971
- commentCount?: number;
3009
+ interface PostOutlet {
3010
+ name: string;
3011
+ logoUrl?: string;
3012
+ /** Editorial only: web domain ("hamshahrionline.ir"). */
3013
+ domain?: string;
3014
+ /** Editorial only: 0..100 SEO/credibility signal. */
3015
+ domainAuthority?: number;
3016
+ /** Broadcast only: TV channel or radio station ("شبکه ۱", "رادیو پیام"). */
3017
+ channel?: string;
3018
+ /** Broadcast only: program / show name. */
3019
+ program?: string;
3020
+ /** Editorial only: byline / journalist name. */
3021
+ reporterName?: string;
2972
3022
  }
3023
+ /**
3024
+ * Per-item ingestion status. Drives how `<PostMedia>` renders each item:
3025
+ * - `ready`: image/video/audio is downloaded and viewable.
3026
+ * - `loading`: the panel is fetching the media right now — render a shimmer.
3027
+ * - `failed`: download failed — render retry placeholder.
3028
+ * - `unavailable`: source has media but we never captured it — render "ذخیره نشده" placeholder.
3029
+ */
3030
+ type PostMediaStatus = 'ready' | 'loading' | 'failed' | 'unavailable';
3031
+ /** Sensitive-content classifications. Used at media-level and post-level. */
3032
+ type PostMediaSensitivity = 'nsfw' | 'graphic' | 'spoiler';
2973
3033
  interface PostMediaItem {
2974
3034
  url: string;
2975
3035
  thumbnailUrl?: string;
2976
- /** Natural aspect ratio (width / height). If omitted, defaults to 1. */
3036
+ /** Natural aspect ratio (width / height). Defaults to 1. */
2977
3037
  aspectRatio?: number;
2978
3038
  alt?: string;
2979
- type?: 'image' | 'video';
2980
- /** Duration in seconds for video. */
3039
+ type?: 'image' | 'video' | 'audio';
3040
+ /** Duration in seconds for video / audio. */
2981
3041
  duration?: number;
3042
+ /** Ingestion status. Defaults to 'ready'. */
3043
+ status?: PostMediaStatus;
3044
+ /** Sensitivity tag — if set, the renderer blurs the media until revealed. */
3045
+ sensitivity?: PostMediaSensitivity;
3046
+ /** Audio only: URL of a waveform peaks file or a pre-rendered SVG / inline data URI. */
3047
+ waveformUrl?: string;
3048
+ }
3049
+ /** Open Graph–style URL preview embedded inside a text body. */
3050
+ interface PostUrlPreview$1 {
3051
+ url: string;
3052
+ domain: string;
3053
+ title?: string;
3054
+ description?: string;
3055
+ thumbnailUrl?: string;
3056
+ }
3057
+ /**
3058
+ * Sticker overlays found on Instagram stories (mentions, polls, location, music, etc.).
3059
+ * Captured to preserve story context after crawling. Coordinates are normalized 0..1.
3060
+ */
3061
+ interface StoryStickerOverlay {
3062
+ /** Type of sticker — drives the icon and label in `<PostMediaStory>`. */
3063
+ type: 'mention' | 'location' | 'hashtag' | 'music' | 'poll' | 'question' | 'time' | 'link' | 'other';
3064
+ /** Human-readable label (e.g. "@digikala", "Tehran", "#خرید_آنلاین"). */
3065
+ label: string;
3066
+ /** Optional secondary text — for polls/questions, the question text. */
3067
+ secondaryText?: string;
3068
+ /** Normalized x/y position on the story canvas (0..1). */
3069
+ x?: number;
3070
+ y?: number;
3071
+ }
3072
+ /** Per-story metadata extracted at crawl time. */
3073
+ interface StoryItem {
3074
+ /** The captured media (image or video). */
3075
+ media: PostMediaItem;
3076
+ /** OCR-extracted text from the story canvas (visible Persian/English text). */
3077
+ ocrText?: string;
3078
+ /** Transcript for video stories. */
3079
+ transcript?: string;
3080
+ /** Story sticker overlays (mentions, polls, location, etc.). */
3081
+ stickers?: StoryStickerOverlay[];
3082
+ /** Story publication time — distinct from the post wrapper's timestamp. */
3083
+ publishedAt?: Date | string | number;
3084
+ /** Outbound "swipe up" / link sticker URL. */
3085
+ swipeUpUrl?: string;
3086
+ /** Story view count (Stories use viewers, not likes). */
3087
+ viewCount?: number;
2982
3088
  }
3089
+ /**
3090
+ * Discriminated union of body shapes. The renderer in `<PostBody>` switches on `type`.
3091
+ *
3092
+ * Story-related variants:
3093
+ * - `story` — single ephemeral story (9:16, OCR text overlay, optional swipe-up link)
3094
+ * - `highlight` — saved-story collection under a titled cover; renders as a strip of stories
3095
+ * Other social media coverage:
3096
+ * - `media-grid`, `media-carousel`, `video`, `audio`, `text` — generic
3097
+ * Failure states:
3098
+ * - `missing-media`, `source-removed`
3099
+ */
2983
3100
  type PostBodyData = {
2984
3101
  type: 'text';
2985
3102
  text: string;
3103
+ urlPreview?: PostUrlPreview$1;
2986
3104
  } | {
2987
3105
  type: 'media-single';
2988
3106
  media: PostMediaItem;
2989
3107
  caption?: string;
3108
+ urlPreview?: PostUrlPreview$1;
3109
+ } | {
3110
+ type: 'media-grid';
3111
+ items: PostMediaItem[];
3112
+ caption?: string;
2990
3113
  } | {
2991
3114
  type: 'media-carousel';
2992
3115
  items: PostMediaItem[];
@@ -2995,85 +3118,141 @@ type PostBodyData = {
2995
3118
  type: 'video';
2996
3119
  media: PostMediaItem;
2997
3120
  caption?: string;
3121
+ } | {
3122
+ type: 'audio';
3123
+ media: PostMediaItem;
3124
+ caption?: string;
3125
+ } | {
3126
+ type: 'story';
3127
+ story: StoryItem;
3128
+ caption?: string;
3129
+ } | {
3130
+ type: 'highlight';
3131
+ title: string;
3132
+ coverUrl?: string;
3133
+ stories: StoryItem[];
3134
+ caption?: string;
2998
3135
  } | {
2999
3136
  type: 'missing-media';
3000
3137
  caption?: string;
3001
3138
  reason?: string;
3139
+ } | {
3140
+ type: 'source-removed';
3141
+ archivedAt?: Date | string | number;
3142
+ archiveUrl?: string;
3143
+ caption?: string;
3002
3144
  };
3003
- interface PostData {
3004
- id: string;
3005
- source: PostPlatform;
3006
- author: PostAuthor;
3007
- /** Post creation time. Accepts Date, ISO string, or unix ms. */
3008
- timestamp: Date | string | number;
3009
- body: PostBodyData;
3010
- metrics?: PostMetrics;
3011
- sentiment?: PostSentiment;
3012
- enrichments?: PostEnrichmentFlags;
3013
- /** User-defined category tags (topic, campaign, issue type). */
3014
- tags?: PostTag[];
3015
- /** Authority / influence score 0..100 used to flag high-impact mentions. */
3016
- authorityScore?: number;
3017
- /** ISO language code detected for the post. */
3018
- language?: string;
3019
- /** URL to the post at the source platform (used by default "view at source" action). */
3020
- sourceUrl?: string;
3145
+ /**
3146
+ * Unified metric envelope. Labels are platform-aware via `getMetricLabel(source, key, locale)`;
3147
+ * the same `views` field is rendered as "بازدید" (Instagram/YouTube), "تماشا" (TikTok),
3148
+ * "نمایش" (X), "بیننده" (TV), "شنونده" (Radio) depending on the post's source.
3149
+ */
3150
+ interface PostMetrics {
3151
+ /** Generic "consumption" metric — viewers / impressions / plays / page-views. */
3152
+ views?: number;
3153
+ likes?: number;
3154
+ comments?: number;
3155
+ /** Generic share count. */
3156
+ shares?: number;
3157
+ /** Reposts: X retweets, Threads reposts, Telegram forwards. */
3158
+ reposts?: number;
3159
+ /** Quote-with-comment: X quote-tweets, Threads quotes. */
3160
+ quotes?: number;
3161
+ /** Saves/bookmarks: IG, TikTok, LinkedIn. */
3162
+ saves?: number;
3163
+ /** Estimated reach / potential audience. */
3164
+ reach?: number;
3165
+ /** Engagement rate as 0..1 decimal (e.g. 0.034 = 3.4%). */
3166
+ engagementRate?: number;
3167
+ /** Broadcast: TV viewers / Radio listeners. Editorial: readers. One field, label per source. */
3168
+ audience?: number;
3169
+ /** Editorial: actual page-views distinct from `views`. */
3170
+ reads?: number;
3171
+ /** Editorial: SEO domain authority signal — also surfaced via `PostOutlet.domainAuthority`. */
3172
+ domainAuthority?: number;
3173
+ /** Reaction breakdown (Telegram emoji, LinkedIn 7-type, Facebook-style). */
3174
+ reactions?: ReactionBreakdown;
3021
3175
  }
3022
- interface PostAction {
3176
+ /**
3177
+ * Typed reaction breakdown. Sparse — only platforms that emit a given reaction fill it.
3178
+ * LinkedIn fills like/celebrate/support/love/insightful/funny.
3179
+ * Facebook fills like/love/care/haha/wow/sad/angry.
3180
+ * Telegram fills `emoji` with the raw map.
3181
+ */
3182
+ interface ReactionBreakdown {
3183
+ like?: number;
3184
+ love?: number;
3185
+ celebrate?: number;
3186
+ support?: number;
3187
+ insightful?: number;
3188
+ funny?: number;
3189
+ /** Facebook-only — empathy reaction. */
3190
+ care?: number;
3191
+ /** Facebook-only — laughing reaction. */
3192
+ haha?: number;
3193
+ /** Facebook-only — surprised reaction. */
3194
+ wow?: number;
3195
+ /** Facebook-only — sad reaction. */
3196
+ sad?: number;
3197
+ /** Facebook-only — anger reaction. */
3198
+ angry?: number;
3199
+ /** Raw emoji → count map (Telegram channel reactions). */
3200
+ emoji?: Record<string, number>;
3201
+ }
3202
+ interface PostTag {
3023
3203
  id: string;
3024
3204
  label: string;
3025
- icon: LucideIcon;
3026
- variant?: 'default' | 'danger';
3027
- onClick: (post: PostData) => void;
3028
- disabled?: boolean;
3029
- hidden?: boolean;
3205
+ /** Optional CSS var (e.g. `--chart-1`) or hex color. Auto-assigned from label if omitted. */
3206
+ color?: string;
3030
3207
  }
3031
- interface PostCommentAuthor {
3032
- name: string;
3033
- handle?: string;
3034
- avatarUrl?: string;
3035
- verified?: boolean;
3208
+ /**
3209
+ * Flags indicate which enrichments the product has attached to this post.
3210
+ * Consumers set these to show the matching chip in `<PostHeader>`.
3211
+ */
3212
+ interface PostEnrichmentFlags {
3213
+ ocr?: boolean;
3214
+ transcript?: boolean;
3215
+ aiAnalysis?: boolean;
3216
+ commentCount?: number;
3036
3217
  }
3037
- interface PostComment {
3038
- id: string;
3039
- author: PostCommentAuthor;
3040
- text: string;
3041
- timestamp: Date | string | number;
3042
- sentiment?: PostSentiment;
3043
- likes?: number;
3044
- replies?: PostComment[];
3045
- /** Pinned by post author (Instagram, YouTube). */
3218
+ /**
3219
+ * Contextual flags surfaced as chips or banners on the card. Independent of media-level status.
3220
+ */
3221
+ interface PostFlags {
3046
3222
  pinned?: boolean;
3047
- /** Indicates this is a reply from the original post author. */
3048
- authorReply?: boolean;
3049
- }
3050
- type PostEmotion = 'anger' | 'anticipation' | 'joy' | 'trust' | 'fear' | 'surprise' | 'sadness' | 'disgust' | 'neutral';
3051
- type PostIntent = 'complaint' | 'praise' | 'question' | 'announcement' | 'comparison' | 'opinion' | 'info';
3052
- interface PostAiEntity {
3053
- text: string;
3054
- type: 'person' | 'brand' | 'place' | 'product' | 'event' | 'organization';
3055
- }
3056
- interface PostAiAnalysis {
3057
- /** Auto-generated summary of the post. */
3058
- summary?: string;
3059
- /** Key topics mentioned in the post. */
3060
- topics?: string[];
3061
- /** Named entities detected. */
3062
- entities?: PostAiEntity[];
3063
- /** Primary intent classification. */
3064
- intent?: PostIntent;
3065
- /** 9-class emotion distribution (raw counts or normalized). */
3066
- emotions?: Partial<Record<PostEmotion, number>>;
3067
- /** Flagged risks / sensitive content categories. */
3068
- risks?: string[];
3069
- /** Influence tier estimate for the author. */
3070
- influenceTier?: 'nano' | 'micro' | 'macro' | 'mega';
3071
- /** Model confidence 0..1 for overall analysis. */
3072
- confidence?: number;
3073
- /** Analysis generation timestamp. */
3074
- generatedAt?: Date | string | number;
3223
+ edited?: boolean;
3224
+ /** Optional edit count, surfaced in tooltip. */
3225
+ editCount?: number;
3226
+ sponsored?: boolean;
3227
+ /** Post was deleted at source after we ingested it. */
3228
+ deletedAtSource?: boolean;
3229
+ /** Snapshot URL to our archived copy. */
3230
+ archivedSnapshotUrl?: string;
3231
+ /** Post-level sensitivity (distinct from per-media `sensitivity`). */
3232
+ sensitive?: PostMediaSensitivity;
3233
+ }
3234
+ /** Cluster / topic membership — links the post to a parent analytical grouping. */
3235
+ interface PostCluster {
3236
+ id: string;
3237
+ label: string;
3238
+ tone?: 'brand' | 'neutral' | 'warning';
3239
+ }
3240
+ /** "X reposted at Y" wrapper info. */
3241
+ interface PostRepostInfo {
3242
+ by: PostAuthor;
3243
+ at: Date | string | number;
3244
+ /** Optional retweet-with-comment / Telegram forward note. */
3245
+ comment?: string;
3246
+ }
3247
+ /** Position info when a post belongs to a multi-post thread. */
3248
+ interface PostThreadInfo {
3249
+ threadId: string;
3250
+ /** 1-indexed position in the thread. */
3251
+ position: number;
3252
+ total: number;
3253
+ /** Optional id of the next thread post — used to draw the connector to the next visible card. */
3254
+ nextId?: string;
3075
3255
  }
3076
- /** Platform-specific metadata, discriminated by `platform` (matches `PostData.source`). */
3077
3256
  type PlatformMetadata = {
3078
3257
  platform: 'instagram';
3079
3258
  postType?: 'feed' | 'reel' | 'story' | 'carousel' | 'igtv';
@@ -3084,7 +3263,6 @@ type PlatformMetadata = {
3084
3263
  };
3085
3264
  saveCount?: number;
3086
3265
  collaborators?: string[];
3087
- /** Hashtags used in the post. */
3088
3266
  hashtags?: string[];
3089
3267
  } | {
3090
3268
  platform: 'twitter';
@@ -3095,7 +3273,6 @@ type PlatformMetadata = {
3095
3273
  quoteCount?: number;
3096
3274
  bookmarkCount?: number;
3097
3275
  isThread?: boolean;
3098
- /** Count of additional posts in the thread. */
3099
3276
  threadLength?: number;
3100
3277
  } | {
3101
3278
  platform: 'youtube';
@@ -3140,7 +3317,184 @@ type PlatformMetadata = {
3140
3317
  replyControls?: 'anyone' | 'followed' | 'mentioned';
3141
3318
  repostCount?: number;
3142
3319
  quoteCount?: number;
3320
+ } | {
3321
+ platform: 'facebook';
3322
+ postType?: 'post' | 'photo' | 'video' | 'reel' | 'story' | 'event' | 'shared';
3323
+ reactions?: {
3324
+ like?: number;
3325
+ love?: number;
3326
+ care?: number;
3327
+ haha?: number;
3328
+ wow?: number;
3329
+ sad?: number;
3330
+ angry?: number;
3331
+ };
3332
+ shareCount?: number;
3333
+ /** Page name if posted on behalf of a page (vs personal profile). */
3334
+ pageName?: string;
3335
+ pageFollowers?: number;
3336
+ } | {
3337
+ platform: 'tv';
3338
+ airDate?: Date | string | number;
3339
+ durationSec?: number;
3340
+ programType?: 'news' | 'talk-show' | 'documentary' | 'interview' | 'live' | 'other';
3341
+ viewers?: number;
3342
+ replays?: number;
3343
+ } | {
3344
+ platform: 'radio';
3345
+ airDate?: Date | string | number;
3346
+ durationSec?: number;
3347
+ programType?: 'news' | 'talk-show' | 'music' | 'interview' | 'live' | 'other';
3348
+ listeners?: number;
3349
+ } | {
3350
+ platform: 'press';
3351
+ printedAt?: Date | string | number;
3352
+ /** Print edition: issue / page reference. */
3353
+ issue?: string;
3354
+ pageNumber?: number;
3355
+ /** Optional AVE (Ad Value Equivalent) — common press metric. */
3356
+ adValueEquivalent?: number;
3357
+ hashtags?: string[];
3358
+ } | {
3359
+ platform: 'web';
3360
+ contentType?: 'blog' | 'forum' | 'news' | 'review' | 'comment' | 'other';
3361
+ /** Reference to a parent thread / discussion if part of one. */
3362
+ threadUrl?: string;
3363
+ hashtags?: string[];
3143
3364
  };
3365
+ interface PostData {
3366
+ id: string;
3367
+ /**
3368
+ * Source platform — full 11-source taxonomy (social + broadcast + editorial).
3369
+ * Header layout and metric labels dispatch on this value via `sourceCategory(source)`.
3370
+ */
3371
+ source: PostSource;
3372
+ /** Headline (editorial), program/segment (broadcast), video title (YouTube). */
3373
+ title?: string;
3374
+ /** Present for social posts; optional for editorial/broadcast where `outlet` is the actor. */
3375
+ author?: PostAuthor;
3376
+ /** Editorial/broadcast outlet — used for press, web, tv, radio header variants. */
3377
+ outlet?: PostOutlet;
3378
+ body: PostBodyData;
3379
+ /** Post creation / publish / air time. Accepts Date, ISO string, or unix ms. */
3380
+ timestamp: Date | string | number;
3381
+ metrics?: PostMetrics;
3382
+ sentiment?: PostSentiment;
3383
+ /** Dominant emotion (9-class) — surfaced as a chip on the card. */
3384
+ emotion?: PostEmotion;
3385
+ /** Political flow classification — surfaced as a chip on the card. */
3386
+ flow?: PostFlow;
3387
+ severity?: PostSeverity;
3388
+ enrichments?: PostEnrichmentFlags;
3389
+ flags?: PostFlags;
3390
+ cluster?: PostCluster;
3391
+ /** User-defined category tags. */
3392
+ tags?: PostTag[];
3393
+ /** @deprecated Use `author.authorityScore` instead. Kept for backward compat. */
3394
+ authorityScore?: number;
3395
+ /** ISO language code detected for the post. */
3396
+ language?: string;
3397
+ /** URL to the post at the source platform. */
3398
+ sourceUrl?: string;
3399
+ /** Quoted/embedded post (X quote-tweets, Threads quotes, Telegram forwards-with-comment). */
3400
+ quoted?: PostData;
3401
+ /** Parent post when this is a reply. */
3402
+ parent?: PostData;
3403
+ /** Repost wrapper info — when present, render "X reposted" header strip above the card. */
3404
+ reposted?: PostRepostInfo;
3405
+ /** Thread position info — when present, draw the thread-connector hairline. */
3406
+ thread?: PostThreadInfo;
3407
+ /** Platform-specific metadata block (discriminated by source). */
3408
+ platformMeta?: PlatformMetadata;
3409
+ }
3410
+ interface PostAction {
3411
+ id: string;
3412
+ label: string;
3413
+ icon: LucideIcon;
3414
+ variant?: 'default' | 'danger';
3415
+ onClick: (post: PostData) => void;
3416
+ disabled?: boolean;
3417
+ hidden?: boolean;
3418
+ }
3419
+ /** Bulk action surfaced in the floating bottom bar when posts are selected. */
3420
+ interface PostBulkAction {
3421
+ id: string;
3422
+ label: string;
3423
+ icon: LucideIcon;
3424
+ variant?: 'default' | 'danger' | 'brand';
3425
+ /** Optional sub-options — rendered as dropdown menu when present. */
3426
+ options?: Array<{
3427
+ id: string;
3428
+ label: string;
3429
+ icon?: LucideIcon;
3430
+ }>;
3431
+ onClick: (selectedIds: string[], optionId?: string) => void;
3432
+ disabled?: boolean;
3433
+ hidden?: boolean;
3434
+ }
3435
+ interface PostCommentAuthor {
3436
+ name: string;
3437
+ handle?: string;
3438
+ avatarUrl?: string;
3439
+ verified?: boolean;
3440
+ /** Optional badge: "Moderator", "Subscriber", "Author", etc. — surfaced as a chip next to the name. */
3441
+ badge?: string;
3442
+ }
3443
+ interface PostComment {
3444
+ id: string;
3445
+ author: PostCommentAuthor;
3446
+ text: string;
3447
+ timestamp: Date | string | number;
3448
+ sentiment?: PostSentiment;
3449
+ likes?: number;
3450
+ replies?: PostComment[];
3451
+ /**
3452
+ * Total reply count (may exceed `replies.length` if pagination caps the nested
3453
+ * replies). Drives the "نمایش ۲۳ پاسخ" affordance.
3454
+ */
3455
+ replyCount?: number;
3456
+ /** Pinned by post author (Instagram, YouTube). */
3457
+ pinned?: boolean;
3458
+ /** Indicates this is a reply from the original post author. */
3459
+ authorReply?: boolean;
3460
+ /** Comment was edited at source — show ویرایش‌شده chip. */
3461
+ edited?: boolean;
3462
+ /** ISO language code; enables translation toggle when different from current locale. */
3463
+ language?: string;
3464
+ /** Hidden by source moderator / shadow-banned. */
3465
+ hiddenByModerator?: boolean;
3466
+ /** Typed reaction breakdown (Facebook 7-type, LinkedIn 7-type, YouTube hearts, etc.). */
3467
+ reactions?: ReactionBreakdown;
3468
+ /** AI-detected toxicity / hate-speech / spam score (0..1). Surfaces a flag chip when set. */
3469
+ toxicityScore?: number;
3470
+ /** Pre-translated body (if cached). */
3471
+ translatedText?: string;
3472
+ }
3473
+ type PostIntent = 'complaint' | 'praise' | 'question' | 'announcement' | 'comparison' | 'opinion' | 'info';
3474
+ interface PostAiEntity {
3475
+ text: string;
3476
+ type: 'person' | 'brand' | 'place' | 'product' | 'event' | 'organization';
3477
+ }
3478
+ interface PostAiAnalysis {
3479
+ /** Auto-generated summary of the post. */
3480
+ summary?: string;
3481
+ /** Key topics mentioned in the post. */
3482
+ topics?: string[];
3483
+ /** Named entities detected. */
3484
+ entities?: PostAiEntity[];
3485
+ /** Primary intent classification. */
3486
+ intent?: PostIntent;
3487
+ /** 9-class emotion distribution (raw counts or normalized). */
3488
+ emotions?: Partial<Record<PostEmotion, number>>;
3489
+ /** Flagged risks / sensitive content categories. */
3490
+ risks?: string[];
3491
+ /** Influence tier estimate for the author. */
3492
+ influenceTier?: PostAuthorityTier;
3493
+ /** Model confidence 0..1 for overall analysis. */
3494
+ confidence?: number;
3495
+ /** Analysis generation timestamp. */
3496
+ generatedAt?: Date | string | number;
3497
+ }
3144
3498
  /** Extended post details — optionally attached to PostData when fetching full view. */
3145
3499
  interface PostDetails {
3146
3500
  comments?: PostComment[];
@@ -3153,25 +3507,44 @@ interface PostDetails {
3153
3507
  platformMeta?: PlatformMetadata;
3154
3508
  }
3155
3509
 
3510
+ declare function defaultActions(handlers?: {
3511
+ onOpenDetails?: (post: PostData) => void;
3512
+ }): PostAction[];
3156
3513
  declare const postCardVariants: (props?: ({
3157
- density?: "compact" | "comfortable" | null | undefined;
3514
+ view?: "grid" | "compact" | "comfortable" | null | undefined;
3158
3515
  selected?: boolean | null | undefined;
3516
+ active?: boolean | null | undefined;
3159
3517
  } & class_variance_authority_types.ClassProp) | undefined) => string;
3160
3518
  interface PostCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'onSelect'>, VariantProps<typeof postCardVariants> {
3161
3519
  post: PostData;
3520
+ /** Layout mode. Replaces the legacy `density` prop. */
3521
+ view?: PostView;
3522
+ /** @deprecated Use `view` instead. */
3162
3523
  density?: PostDensity;
3163
3524
  selected?: boolean;
3525
+ /** True when the card represents the post currently open in the details drawer. */
3526
+ active?: boolean;
3164
3527
  read?: boolean;
3165
3528
  actions?: PostAction[];
3529
+ selectable?: boolean;
3166
3530
  onOpen?: (post: PostData) => void;
3167
3531
  onSelect?: (post: PostData, selected: boolean) => void;
3168
- selectable?: boolean;
3169
- /** Fired when user clicks the details action (Maximize2 icon). Wires up the default details action. */
3170
3532
  onOpenDetails?: (post: PostData) => void;
3533
+ onOpenQuoted?: (post: PostData) => void;
3534
+ onRetryMedia?: (item: PostMediaItem) => void;
3535
+ onClusterClick?: (cluster: NonNullable<PostData['cluster']>) => void;
3536
+ onAuthorClick?: (authorId: string | undefined) => void;
3537
+ /** When set, the author HoverCard surfaces a primary "مشاهده اطلاعات صفحه" button
3538
+ * that routes to the author's product profile page. */
3539
+ onAuthorProfile?: (author: NonNullable<PostData['author']>) => void;
3540
+ /** When set, the author HoverCard surfaces a secondary "صفحه‌ی تحلیل پروفایل"
3541
+ * button that routes to the deeper analytics dashboard for the author. */
3542
+ onAuthorAnalytics?: (author: NonNullable<PostData['author']>) => void;
3543
+ /** Optional translation handler — when provided AND `post.language !== 'fa'`,
3544
+ * the card surfaces a "ترجمه به فارسی" button above the body. Return the
3545
+ * translated text (may return a Promise for async LLM calls). */
3546
+ onTranslate?: (post: PostData) => Promise<string> | string;
3171
3547
  }
3172
- declare function defaultActions(handlers?: {
3173
- onOpenDetails?: (post: PostData) => void;
3174
- }): PostAction[];
3175
3548
  declare const PostCard: React$1.ForwardRefExoticComponent<PostCardProps & React$1.RefAttributes<HTMLDivElement>>;
3176
3549
 
3177
3550
  declare const postHeaderVariants: (props?: ({
@@ -3181,14 +3554,50 @@ interface PostHeaderProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, '
3181
3554
  author: PostAuthor;
3182
3555
  platform: PostPlatform;
3183
3556
  timestamp: Date | string | number;
3557
+ /**
3558
+ * @deprecated Sentiment is now shown only in the `PostSignals` chip row to avoid
3559
+ * doubling the signal. The prop is accepted for backward compatibility but no
3560
+ * longer rendered as a dot next to the handle.
3561
+ */
3184
3562
  sentiment?: PostSentiment;
3185
3563
  enrichments?: PostEnrichmentFlags;
3186
3564
  density?: PostDensity;
3187
3565
  /** Override avatar size. */
3188
3566
  avatarClassName?: string;
3567
+ /**
3568
+ * Optional handler — when set, the author HoverCard renders a primary action
3569
+ * button "مشاهده اطلاعات صفحه" that routes to the author's dedicated profile
3570
+ * page in your product.
3571
+ */
3572
+ onAuthorProfile?: (author: PostAuthor) => void;
3573
+ /**
3574
+ * Optional handler — when set, the author HoverCard renders a secondary action
3575
+ * button "صفحه‌ی تحلیل پروفایل" that routes to the deeper analytics dashboard
3576
+ * for the author (separate from their profile page).
3577
+ */
3578
+ onAuthorAnalytics?: (author: PostAuthor) => void;
3189
3579
  }
3190
3580
  declare const PostHeader: React$1.ForwardRefExoticComponent<PostHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
3191
3581
 
3582
+ interface PostHeaderBroadcastProps extends React$1.HTMLAttributes<HTMLDivElement> {
3583
+ source: 'tv' | 'radio';
3584
+ outlet: PostOutlet;
3585
+ timestamp: Date | string | number;
3586
+ enrichments?: PostEnrichmentFlags;
3587
+ density?: PostDensity;
3588
+ }
3589
+ declare const PostHeaderBroadcast: React$1.ForwardRefExoticComponent<PostHeaderBroadcastProps & React$1.RefAttributes<HTMLDivElement>>;
3590
+ interface PostHeaderEditorialProps extends React$1.HTMLAttributes<HTMLDivElement> {
3591
+ source: 'press' | 'web';
3592
+ outlet: PostOutlet;
3593
+ timestamp: Date | string | number;
3594
+ enrichments?: PostEnrichmentFlags;
3595
+ density?: PostDensity;
3596
+ /** Optional author byline (for press articles authored by an individual journalist). */
3597
+ byline?: PostAuthor;
3598
+ }
3599
+ declare const PostHeaderEditorial: React$1.ForwardRefExoticComponent<PostHeaderEditorialProps & React$1.RefAttributes<HTMLDivElement>>;
3600
+
3192
3601
  /**
3193
3602
  * Aspect-ratio helpers for post media.
3194
3603
  *
@@ -3215,6 +3624,98 @@ interface PostBodyProps extends React$1.HTMLAttributes<HTMLDivElement> {
3215
3624
  }
3216
3625
  declare const PostBody: React$1.ForwardRefExoticComponent<PostBodyProps & React$1.RefAttributes<HTMLDivElement>>;
3217
3626
 
3627
+ /**
3628
+ * Rule: never vertically center an `<img>` with `mx-auto` + `h-full`. `<img>` is
3629
+ * `display: inline` by default so `mx-auto` is a no-op and the image rests on the
3630
+ * text baseline. Use the centered-container pattern below.
3631
+ */
3632
+ declare const CENTERED_CONTAINER_CLS = "relative w-full overflow-hidden rounded-md bg-muted flex items-center justify-center";
3633
+ /**
3634
+ * Foreground image classes. `block` removes the baseline inline behavior;
3635
+ * `max-*` + `w-auto h-auto` + `object-contain` fit naturally inside the container.
3636
+ */
3637
+ declare const FOREGROUND_IMG_CLS = "relative block max-h-full max-w-full w-auto h-auto object-contain";
3638
+ declare const BlurBackdrop: React$1.FC<{
3639
+ src?: string;
3640
+ }>;
3641
+ type PostMediaPlaceholderVariant = 'loading' | 'failed' | 'unavailable';
3642
+ interface PostMediaPlaceholderProps {
3643
+ variant: PostMediaPlaceholderVariant;
3644
+ /** Optional reason / human note. */
3645
+ reason?: string;
3646
+ /** CSS aspect ratio for the placeholder box (e.g. `"4 / 5"`). Defaults to `"4 / 5"`. */
3647
+ aspectRatio?: string;
3648
+ /** Optional cap. */
3649
+ maxHeight?: string;
3650
+ /** Retry handler — only rendered when `variant === 'failed'`. */
3651
+ onRetry?: () => void;
3652
+ className?: string;
3653
+ }
3654
+ declare const PostMediaPlaceholder: React$1.ForwardRefExoticComponent<PostMediaPlaceholderProps & React$1.RefAttributes<HTMLDivElement>>;
3655
+ interface PostMediaSourceRemovedProps {
3656
+ /** Optional URL to our archive snapshot. */
3657
+ archiveUrl?: string;
3658
+ /** Optional date the snapshot was taken. */
3659
+ archivedAt?: Date | string | number;
3660
+ className?: string;
3661
+ }
3662
+ declare const PostMediaSourceRemoved: React$1.ForwardRefExoticComponent<PostMediaSourceRemovedProps & React$1.RefAttributes<HTMLDivElement>>;
3663
+ declare const SENSITIVITY_LABEL: Record<string, string>;
3664
+ declare const PostMediaSensitiveOverlay: React$1.FC<{
3665
+ sensitivity: NonNullable<PostMediaItem['sensitivity']>;
3666
+ onReveal: () => void;
3667
+ }>;
3668
+ declare const PostMediaSingle: React$1.FC<{
3669
+ item: PostMediaItem;
3670
+ context: AspectContext;
3671
+ onRetry?: (item: PostMediaItem) => void;
3672
+ className?: string;
3673
+ }>;
3674
+ declare const PostMediaGrid: React$1.FC<{
3675
+ items: PostMediaItem[];
3676
+ context: AspectContext;
3677
+ onRetry?: (item: PostMediaItem) => void;
3678
+ className?: string;
3679
+ }>;
3680
+ declare const PostMediaCarousel: React$1.FC<{
3681
+ items: PostMediaItem[];
3682
+ context: AspectContext;
3683
+ onRetry?: (item: PostMediaItem) => void;
3684
+ className?: string;
3685
+ }>;
3686
+ declare const PostMediaVideo: React$1.FC<{
3687
+ item: PostMediaItem;
3688
+ context: AspectContext;
3689
+ onRetry?: (item: PostMediaItem) => void;
3690
+ className?: string;
3691
+ }>;
3692
+ declare const PostMediaAudio: React$1.FC<{
3693
+ item: PostMediaItem;
3694
+ context: AspectContext;
3695
+ className?: string;
3696
+ }>;
3697
+ declare const PostMediaStory: React$1.FC<{
3698
+ story: StoryItem;
3699
+ context: AspectContext;
3700
+ /** When true, no fixed 9:16 frame — used inside Highlight strip cells. */
3701
+ fillCell?: boolean;
3702
+ className?: string;
3703
+ }>;
3704
+ declare const PostMediaHighlight: React$1.FC<{
3705
+ title: string;
3706
+ coverUrl?: string;
3707
+ stories: StoryItem[];
3708
+ context: AspectContext;
3709
+ className?: string;
3710
+ }>;
3711
+ interface PostMediaProps extends React$1.HTMLAttributes<HTMLDivElement> {
3712
+ body: PostBodyData;
3713
+ context: AspectContext;
3714
+ /** Retry callback for failed media items. */
3715
+ onRetry?: (item: PostMediaItem) => void;
3716
+ }
3717
+ declare const PostMedia: React$1.ForwardRefExoticComponent<PostMediaProps & React$1.RefAttributes<HTMLDivElement>>;
3718
+
3218
3719
  interface PostActionsProps extends React$1.HTMLAttributes<HTMLDivElement> {
3219
3720
  post: PostData;
3220
3721
  actions: PostAction[];
@@ -3234,10 +3735,103 @@ interface PostMetadataProps extends React$1.HTMLAttributes<HTMLDivElement> {
3234
3735
  }
3235
3736
  declare const PostMetadata: React$1.ForwardRefExoticComponent<PostMetadataProps & React$1.RefAttributes<HTMLDivElement>>;
3236
3737
 
3738
+ interface PostSignalsProps extends React$1.HTMLAttributes<HTMLDivElement> {
3739
+ sentiment?: PostSentiment;
3740
+ emotion?: EmotionKey;
3741
+ flow?: FlowKey;
3742
+ severity?: PostSeverity;
3743
+ cluster?: PostCluster;
3744
+ /** ISO language code (rendered as uppercase chip when not 'fa'). */
3745
+ language?: string;
3746
+ /** When true, hide emotion + flow + cluster + language to keep the row scannable in compact density. */
3747
+ compact?: boolean;
3748
+ /** Click handler on the cluster chip — typically filters the list. */
3749
+ onClusterClick?: (cluster: PostCluster) => void;
3750
+ }
3751
+ /**
3752
+ * Domain-signal chip row: sentiment, emotion, flow, severity, cluster, language.
3753
+ * Rendered in the `<PostCard>` footer. Designed to wrap when narrow.
3754
+ */
3755
+ declare const PostSignals: React$1.ForwardRefExoticComponent<PostSignalsProps & React$1.RefAttributes<HTMLDivElement>>;
3756
+
3757
+ interface PostRepostHeaderProps extends React$1.HTMLAttributes<HTMLDivElement> {
3758
+ reposted: PostRepostInfo;
3759
+ /** Optional click handler on the reposter chip — typically opens the reposter's profile. */
3760
+ onAuthorClick?: (authorId: string | undefined) => void;
3761
+ }
3762
+ /**
3763
+ * Slim wrapper strip rendered above a `<PostCard>` when the post is surfaced through
3764
+ * a repost / retweet / forward. Matches the X, Threads, Telegram-channel-forward UX.
3765
+ */
3766
+ declare const PostRepostHeader: React$1.ForwardRefExoticComponent<PostRepostHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
3767
+
3768
+ interface PostQuotedEmbedProps extends React$1.HTMLAttributes<HTMLDivElement> {
3769
+ /** The post being quoted / referenced. */
3770
+ post: PostData;
3771
+ /** Click handler — typically navigates to the quoted post's details surface. */
3772
+ onOpen?: (post: PostData) => void;
3773
+ }
3774
+ /**
3775
+ * Nested compact card rendered inside a `<PostCard>` body when the post quotes,
3776
+ * embeds, or replies to another post. Read-only — no metrics, no action buttons,
3777
+ * no recursive embeds. Matches the X quote-tweet stacking pattern.
3778
+ *
3779
+ * RTL: indented from the inline-start via `ms-*` (visually right-indent in RTL).
3780
+ */
3781
+ declare const PostQuotedEmbed: React$1.ForwardRefExoticComponent<PostQuotedEmbedProps & React$1.RefAttributes<HTMLDivElement>>;
3782
+
3783
+ interface PostThreadConnectorProps extends React$1.HTMLAttributes<HTMLDivElement> {
3784
+ thread: PostThreadInfo;
3785
+ /** When true, draws the connecting hairline that visually links this card to the next thread post. */
3786
+ showLine?: boolean;
3787
+ }
3788
+ /**
3789
+ * Renders the thread-position chip and the optional vertical hairline that connects
3790
+ * consecutive posts in the same thread. The hairline is positioned on the inline-start
3791
+ * edge of the card (right edge in RTL) and is purely visual — no interaction.
3792
+ *
3793
+ * The parent `<PostCard>` is responsible for rendering this in a `relative` container
3794
+ * so the absolute hairline can anchor to the card's full height.
3795
+ */
3796
+ declare const PostThreadConnector: React$1.ForwardRefExoticComponent<PostThreadConnectorProps & React$1.RefAttributes<HTMLDivElement>>;
3797
+
3798
+ interface PostCrisisBannerProps extends React$1.HTMLAttributes<HTMLDivElement> {
3799
+ severity: PostSeverity;
3800
+ /** Optional override label — defaults to the Persian severity name. */
3801
+ label?: string;
3802
+ }
3803
+ /**
3804
+ * Slim banner strip rendered at the top of a `<PostCard>` to call attention to a
3805
+ * crisis / high-severity mention. Animates a pulse dot for `critical`. Subtle
3806
+ * by design — not a full-card red bleed, so the post stays scannable.
3807
+ */
3808
+ declare const PostCrisisBanner: React$1.ForwardRefExoticComponent<PostCrisisBannerProps & React$1.RefAttributes<HTMLDivElement>>;
3809
+
3810
+ interface PostUrlPreviewProps extends React$1.HTMLAttributes<HTMLAnchorElement> {
3811
+ preview: PostUrlPreview$1;
3812
+ /** Compact layout (no description, smaller thumbnail). */
3813
+ compact?: boolean;
3814
+ }
3815
+ /**
3816
+ * Open-Graph–style URL preview card rendered inside a `<PostBody>` when the post
3817
+ * text contains a notable link. Acts as an anchor — opens in a new tab.
3818
+ *
3819
+ * Layout: thumbnail (when present) on inline-end, text block on inline-start.
3820
+ * In RTL that lines up so the image sits to the visual right — mirrors Slack /
3821
+ * Discord / Twitter preview cards.
3822
+ */
3823
+ declare const PostUrlPreview: React$1.ForwardRefExoticComponent<PostUrlPreviewProps & React$1.RefAttributes<HTMLAnchorElement>>;
3824
+
3825
+ type PostGroupBy = 'none' | 'platform' | 'sentiment' | 'date';
3826
+ type PostSortBy = 'newest' | 'oldest' | 'engagement' | 'authority' | 'severity';
3237
3827
  interface PostListProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'onSelect'> {
3238
3828
  posts: PostData[];
3239
- /** Controlled density. If omitted, the list manages its own state (persisted to localStorage). */
3829
+ /** Controlled view. If omitted, the list manages its own state (persisted to localStorage). */
3830
+ view?: PostView;
3831
+ onViewChange?: (view: PostView) => void;
3832
+ /** @deprecated Use `view` instead. */
3240
3833
  density?: PostDensity;
3834
+ /** @deprecated Use `onViewChange` instead. */
3241
3835
  onDensityChange?: (density: PostDensity) => void;
3242
3836
  /** ID of the currently open/selected post (for URL deep-linking). */
3243
3837
  activeId?: string;
@@ -3249,100 +3843,154 @@ interface PostListProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'on
3249
3843
  onOpen?: (post: PostData) => void;
3250
3844
  /** Fired when the user triggers the default "view details" action on any card. */
3251
3845
  onOpenDetails?: (post: PostData) => void;
3846
+ onOpenQuoted?: (post: PostData) => void;
3847
+ onRetryMedia?: (item: PostMediaItem) => void;
3848
+ onClusterClick?: (cluster: NonNullable<PostData['cluster']>) => void;
3849
+ /** Forwarded to each PostCard — drives the hover-card "go to analytics page" link. */
3850
+ onAuthorAnalytics?: (author: NonNullable<PostData['author']>) => void;
3851
+ /** Forwarded to each PostCard — drives the hover-card "view profile page" link. */
3852
+ onAuthorProfile?: (author: NonNullable<PostData['author']>) => void;
3853
+ /** Forwarded to each PostCard — drives the "ترجمه به فارسی" button on non-Persian posts. */
3854
+ onTranslate?: (post: PostData) => Promise<string> | string;
3252
3855
  /** Per-post action set. If omitted, each card uses its defaults. */
3253
3856
  actions?: PostAction[];
3254
- /** Render the density toggle in the toolbar. Defaults to true. */
3857
+ /** Bulk actions surfaced in the floating bar when posts are selected. */
3858
+ bulkActions?: PostBulkAction[];
3859
+ /** Group rendering: split the list into sticky-header sections. */
3860
+ groupBy?: PostGroupBy;
3861
+ /** Client-side sort applied to `posts` before render. */
3862
+ sortBy?: PostSortBy;
3863
+ /** Soft search filter — matches body text or title (case-insensitive). */
3864
+ searchQuery?: string;
3865
+ /** Render the toolbar (view toggle + extras). Defaults to true. */
3255
3866
  showToolbar?: boolean;
3256
- /** Custom toolbar content rendered next to the density toggle. */
3867
+ /** Custom toolbar content rendered next to the view toggle. */
3257
3868
  toolbarExtra?: React$1.ReactNode;
3869
+ /** Loading state — replaces list with skeleton or custom node. */
3870
+ isLoading?: boolean;
3871
+ loadingState?: React$1.ReactNode;
3872
+ /** Error state — replaces list when set. */
3873
+ error?: unknown;
3874
+ errorState?: React$1.ReactNode;
3875
+ /** Empty state — shown when `posts.length === 0` after filtering. */
3876
+ emptyState?: React$1.ReactNode;
3877
+ /** Hide the floating bulk action bar even when posts are selected. */
3878
+ hideBulkBar?: boolean;
3258
3879
  }
3259
3880
  declare const PostList: React$1.ForwardRefExoticComponent<PostListProps & React$1.RefAttributes<HTMLDivElement>>;
3260
3881
 
3882
+ interface PostBulkActionBarProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'onClick'> {
3883
+ selectedCount: number;
3884
+ selectedIds: string[];
3885
+ actions?: PostBulkAction[];
3886
+ onClear?: () => void;
3887
+ }
3261
3888
  /**
3262
- * Extended platform set: social media + government broadcast/print sources
3263
- * (TV, Radio, Press). Use this for cross-platform feeds where a tracked
3264
- * topic surfaces in both an Instagram post AND a TV broadcast.
3265
- */
3266
- type ExtendedPlatform = SocialPlatform | 'tv' | 'radio' | 'press';
3267
- /**
3268
- * Metrics shape varies by platform — social posts have likes/comments,
3269
- * TV/radio clips have viewers/listeners, news articles often just have
3270
- * a share count or comment-thread total. All optional.
3889
+ * Floating bulk-action bar appears at the bottom of the viewport when one or
3890
+ * more posts are selected in `<PostList>`. Matches the Gmail / Linear / Notion
3891
+ * selection bar pattern. Dismiss with Esc or by clicking the clear button.
3271
3892
  */
3272
- interface MultiPlatformMetrics {
3273
- likes?: number;
3274
- comments?: number;
3275
- shares?: number;
3276
- views?: number;
3277
- /** TV viewers OR radio listeners (different display label, same number type) */
3278
- audience?: number;
3279
- }
3280
- interface MultiPlatformPostData {
3281
- /** Stable id for keys + analytics */
3282
- id: string;
3283
- platform: ExtendedPlatform;
3284
- /** Outlet/account display name (e.g. "BBC فارسی", "@news_ir", "صدا و سیما"). */
3285
- sourceName: string;
3286
- /** Optional headline — typical for news + TV/radio segments, often absent on social. */
3287
- title?: React$1.ReactNode;
3288
- /** Body text or transcript excerpt. */
3289
- body: React$1.ReactNode;
3290
- /** Publication / broadcast time. Date or ISO string. */
3291
- publishedAt: Date | string;
3292
- /** Optional thumbnail (post image, article hero, video still). */
3293
- thumbnailUrl?: string;
3294
- /**
3295
- * Optional clip duration in **seconds** — only meaningful for TV / radio /
3296
- * video. Rendered as `MM:SS` or `HH:MM:SS`.
3297
- */
3298
- durationSec?: number;
3299
- metrics?: MultiPlatformMetrics;
3300
- /** Optional URL to the source. When set, the card gains an "open at source" affordance. */
3301
- sourceUrl?: string;
3302
- /** Optional language tag for the body. Renders a small chip when set. */
3303
- language?: string;
3304
- }
3305
- interface MultiPlatformPostCardProps extends Omit<React$1.HTMLAttributes<HTMLElement>, 'onClick'> {
3306
- post: MultiPlatformPostData;
3307
- /** Make the entire card clickable (opens sourceUrl in new tab if not custom) */
3308
- onCardClick?: (post: MultiPlatformPostData) => void;
3309
- /** Compact density hides body excerpt + thumbnail */
3310
- density?: 'compact' | 'comfortable';
3311
- /** Locale for labels + relative-time formatting */
3312
- locale?: SupportedLocale;
3313
- }
3314
- declare const MultiPlatformPostCard: React$1.ForwardRefExoticComponent<MultiPlatformPostCardProps & React$1.RefAttributes<HTMLElement>>;
3893
+ declare const PostBulkActionBar: React$1.ForwardRefExoticComponent<PostBulkActionBarProps & React$1.RefAttributes<HTMLDivElement>>;
3315
3894
 
3316
3895
  type PostDetailsTab = 'post' | 'comments' | 'analysis' | 'transcript';
3317
- interface PostDetailsModalProps {
3318
- /** Controls modal open state. */
3319
- open: boolean;
3320
- onOpenChange: (open: boolean) => void;
3321
- /** The post being viewed. If null/undefined, the modal renders nothing. */
3322
- post?: PostData | null;
3323
- /** Extended details — comments, AI analysis, OCR, platform metadata. */
3896
+ interface PostDetailsDrawerProps {
3897
+ open?: boolean;
3898
+ onOpenChange?: (open: boolean) => void;
3899
+ post: PostData;
3324
3900
  details?: PostDetails;
3325
- /** Callback when user opens the source. Falls back to `post.sourceUrl`. */
3326
- onOpenSource?: (post: PostData) => void;
3327
- /** Loading state — true while fetching extended details. */
3328
- isLoading?: boolean;
3329
- /** Error state — when set, renders an error panel with optional retry. */
3330
- error?: string | Error | null;
3331
- /** Fires when user clicks "retry" on the error panel. */
3332
- onRetry?: () => void;
3333
- /** Which tab to open first @default "post" */
3334
- defaultTab?: PostDetailsTab;
3335
- /** Dialog size. @default "lg" (~1024px) */
3336
- size?: 'md' | 'lg' | 'xl';
3337
- /** Show the bookmark toggle. When `onBookmark` is set, the button appears. */
3901
+ /** Details are being fetched asynchronously show loading state in tabs. */
3902
+ isLoadingDetails?: boolean;
3338
3903
  bookmarked?: boolean;
3339
3904
  onBookmark?: (post: PostData, next: boolean) => void;
3340
- /** Override default clipboard writer. */
3341
3905
  onCopyLink?: (post: PostData, url: string) => void;
3342
- /** Extra action slot (rendered at logical-end of the top action bar — e.g. a dropdown/"more" menu). */
3343
- headerActions?: React$1.ReactNode;
3906
+ onOpenSource?: (post: PostData) => void;
3907
+ onRetryMedia?: (item: PostMediaItem) => void;
3908
+ /** Navigate to the next post in the parent list (fires when j is pressed). */
3909
+ onNext?: () => void;
3910
+ /** Navigate to the previous post in the parent list (fires when k is pressed). */
3911
+ onPrevious?: () => void;
3912
+ defaultTab?: PostDetailsTab;
3913
+ /** Custom action node rendered next to the default header actions. */
3914
+ extraActions?: React$1.ReactNode;
3915
+ /** Optional translation handler. When provided, a "نمایش ترجمه" toggle appears on the post tab. */
3916
+ onTranslate?: (post: PostData) => Promise<string> | string;
3917
+ /** Optional like-comment handler. */
3918
+ onLikeComment?: (commentId: string) => void;
3919
+ /**
3920
+ * Optional translation handler for a comment. When provided AND the comment's
3921
+ * `language !== 'fa'`, an inline "ترجمه" button appears under the comment body.
3922
+ * If the comment already has a `translatedText` cached, the toggle uses that
3923
+ * cached value and never calls this handler.
3924
+ */
3925
+ onTranslateComment?: (comment: PostComment) => Promise<string> | string;
3344
3926
  }
3345
- declare const PostDetailsModal: React$1.FC<PostDetailsModalProps>;
3927
+ /**
3928
+ * Right-aligned side panel for inspecting a post in depth. The single canonical
3929
+ * detail surface (Sheet handles its own mobile bottom-sheet fallback via the
3930
+ * `useIsMobile` hook inside Radix).
3931
+ *
3932
+ * Keyboard:
3933
+ * - Esc → close (handled by Sheet)
3934
+ * - j / ArrowDown → onNext
3935
+ * - k / ArrowUp → onPrevious
3936
+ */
3937
+ declare const PostDetailsDrawer: React$1.ForwardRefExoticComponent<PostDetailsDrawerProps & React$1.RefAttributes<HTMLDivElement>>;
3938
+
3939
+ type SupportedMetricLocale = 'fa' | 'en';
3940
+ type MetricKey = keyof PostMetrics;
3941
+ /**
3942
+ * Resolve a metric label for a given source + key + locale.
3943
+ *
3944
+ * Lookup order:
3945
+ * 1. Source-specific override (e.g. tiktok.views → "تماشا")
3946
+ * 2. Default for that locale (e.g. views → "بازدید")
3947
+ *
3948
+ * Never returns `undefined` — falls back to default labels.
3949
+ */
3950
+ declare function getMetricLabel(source: PostSource, key: MetricKey, locale?: SupportedMetricLocale): string;
3951
+
3952
+ /**
3953
+ * Per-source metadata used by `<PostHeader>`, `<PostMetrics>`, badges, and the source-aware
3954
+ * default actions. This is the single source of truth — adding a new platform = adding
3955
+ * one entry here + one CSS var + one label entry in `post-metric-labels.ts`.
3956
+ *
3957
+ * Brand colors are referenced as CSS variables (`--social-platform-*`) and resolved at
3958
+ * runtime so the dark/light theme can adapt where needed (twitter, threads, press, web).
3959
+ */
3960
+ type SourceIconSource =
3961
+ /** Icon comes from the brand-SVG set in `<SocialPlatformBadge>` (7 social platforms). */
3962
+ {
3963
+ kind: 'social-brand';
3964
+ }
3965
+ /** Icon is a generic Lucide glyph (broadcast / editorial sources). */
3966
+ | {
3967
+ kind: 'lucide';
3968
+ icon: LucideIcon;
3969
+ };
3970
+ interface PostSourceConfig {
3971
+ /** English label, displayed when `showLabel` is on. */
3972
+ label: string;
3973
+ /** Persian (fa) label, for fa-locale headers and tooltips. */
3974
+ labelFa: string;
3975
+ /** Category: drives header layout switch. */
3976
+ category: PostSourceCategory;
3977
+ /** CSS variable name (without the `var()` wrapper). */
3978
+ colorVar: string;
3979
+ /** How to render the icon for this source. */
3980
+ icon: SourceIconSource;
3981
+ /**
3982
+ * Default metric order — which metric keys to show by default and in what order.
3983
+ * Consumers can override per-card via PostMetadata's `metricsOrder` prop.
3984
+ */
3985
+ defaultMetrics: ReadonlyArray<keyof PostMetrics>;
3986
+ }
3987
+ /** Look up the per-source config block. */
3988
+ declare function getPostSourceConfig(source: PostSource): PostSourceConfig;
3989
+ /**
3990
+ * Convenience: read the brand color CSS variable for a source.
3991
+ * Use as: `style={{ color: getSourceColorVar('instagram') }}` → `var(--social-platform-instagram)`.
3992
+ */
3993
+ declare function getSourceColorVar(source: PostSource): string;
3346
3994
 
3347
3995
  declare const profileCardVariants: (props?: ({
3348
3996
  variant?: "default" | "transparent" | "dark" | null | undefined;
@@ -3710,7 +4358,10 @@ declare namespace ScrollBar {
3710
4358
  var displayName: string;
3711
4359
  }
3712
4360
 
3713
- declare const Select: React$1.FC<SelectPrimitive.SelectProps>;
4361
+ declare const Select: {
4362
+ ({ dir, ...props }: React$1.ComponentProps<typeof SelectPrimitive.Root>): react_jsx_runtime.JSX.Element;
4363
+ displayName: string;
4364
+ };
3714
4365
  declare const SelectGroup: React$1.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React$1.RefAttributes<HTMLDivElement>>;
3715
4366
  declare const SelectValue: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectValueProps & React$1.RefAttributes<HTMLSpanElement>, "ref"> & VariantProps<(props?: ({
3716
4367
  size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
@@ -3936,7 +4587,7 @@ declare namespace FormRowSkeleton {
3936
4587
  var displayName: string;
3937
4588
  }
3938
4589
 
3939
- declare function Slider({ className, defaultValue, value, min, max, dir, ...props }: React$1.ComponentProps<typeof SliderPrimitive.Root>): react_jsx_runtime.JSX.Element;
4590
+ declare function Slider({ className, defaultValue, value, min, max, dir, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, ...props }: React$1.ComponentProps<typeof SliderPrimitive.Root>): react_jsx_runtime.JSX.Element;
3940
4591
  declare namespace Slider {
3941
4592
  var displayName: string;
3942
4593
  }
@@ -4018,7 +4669,7 @@ declare namespace TableSortHeader {
4018
4669
  var displayName: string;
4019
4670
  }
4020
4671
 
4021
- declare const Tabs: React$1.ForwardRefExoticComponent<TabsPrimitive.TabsProps & React$1.RefAttributes<HTMLDivElement>>;
4672
+ declare const Tabs: React$1.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
4022
4673
  interface TabsListProps extends React$1.ComponentPropsWithoutRef<typeof TabsPrimitive.List> {
4023
4674
  /** Visual variant */
4024
4675
  variant?: 'default' | 'underline' | 'outline';
@@ -4469,6 +5120,16 @@ interface MultiSelectProps {
4469
5120
  emptyMessage?: string;
4470
5121
  /** Search placeholder */
4471
5122
  searchPlaceholder?: string;
5123
+ /** Accessible label. Falls back to the resolved placeholder when omitted. */
5124
+ 'aria-label'?: string;
5125
+ /** id of an external label element that names this control. */
5126
+ 'aria-labelledby'?: string;
5127
+ /** Marks the trigger as invalid (e.g. when wired through `<FormControl>`). */
5128
+ 'aria-invalid'?: boolean | 'true' | 'false';
5129
+ /** id(s) of element(s) describing the trigger (typically a `<FormMessage>`). */
5130
+ 'aria-describedby'?: string;
5131
+ /** id of the trigger element — set by `<FormControl>` to wire `<FormLabel htmlFor>`. */
5132
+ id?: string;
4472
5133
  }
4473
5134
  declare const MultiSelect: React$1.ForwardRefExoticComponent<MultiSelectProps & React$1.RefAttributes<HTMLDivElement>>;
4474
5135
 
@@ -5030,8 +5691,16 @@ interface PartoWordCloudProps {
5030
5691
  isLoading?: boolean;
5031
5692
  /** Accessible label describing the chart content */
5032
5693
  ariaLabel?: string;
5694
+ /** Locale for the empty-state message @default 'fa' */
5695
+ locale?: SupportedLocale;
5696
+ /**
5697
+ * Render a small caption below the cloud explaining that word size
5698
+ * encodes frequency. Helps colorblind / sighted-but-confused users —
5699
+ * word color is decorative (palette rotation), not semantic. @default `false`
5700
+ */
5701
+ legend?: boolean;
5033
5702
  }
5034
- declare function PartoWordCloud({ words, width: widthProp, height: heightProp, className, minFontSize, maxFontSize, padding, spiral, rotate, random, fontWeight, onWordClick, isLoading, ariaLabel, }: PartoWordCloudProps): react_jsx_runtime.JSX.Element;
5703
+ declare function PartoWordCloud({ words, width: widthProp, height: heightProp, className, minFontSize, maxFontSize, padding, spiral, rotate, random, fontWeight, onWordClick, isLoading, ariaLabel, locale, legend, }: PartoWordCloudProps): react_jsx_runtime.JSX.Element;
5035
5704
  declare namespace PartoWordCloud {
5036
5705
  var displayName: string;
5037
5706
  }
@@ -5094,6 +5763,11 @@ interface PartoScatterChartProps {
5094
5763
  className?: string;
5095
5764
  isLoading?: boolean;
5096
5765
  ariaLabel?: string;
5766
+ /**
5767
+ * Render a legend below the chart. Only meaningful when `groupKey` is set —
5768
+ * the legend lists each group with its assigned color. @default `false`
5769
+ */
5770
+ legend?: boolean;
5097
5771
  }
5098
5772
  declare const PartoScatterChart: React$1.ForwardRefExoticComponent<PartoScatterChartProps & React$1.RefAttributes<HTMLDivElement>>;
5099
5773
 
@@ -5148,6 +5822,12 @@ interface PartoSankeyChartProps {
5148
5822
  className?: string;
5149
5823
  isLoading?: boolean;
5150
5824
  ariaLabel?: string;
5825
+ /**
5826
+ * Render a legend listing each node with its color. Useful for flows
5827
+ * where node names aren't always visible (small column widths). The
5828
+ * legend shows the same color the node rectangle uses. @default `false`
5829
+ */
5830
+ legend?: boolean;
5151
5831
  }
5152
5832
  declare const PartoSankeyChart: React$1.ForwardRefExoticComponent<PartoSankeyChartProps & React$1.RefAttributes<HTMLDivElement>>;
5153
5833
 
@@ -5227,6 +5907,16 @@ interface ConceptPulseChartProps {
5227
5907
  className?: string;
5228
5908
  isLoading?: boolean;
5229
5909
  ariaLabel?: string;
5910
+ /**
5911
+ * Render a legend below the chart that maps composition arc colors to
5912
+ * their category names (flow/emotion/custom). Only categories that
5913
+ * appear in at least one bubble's composition are listed.
5914
+ *
5915
+ * Without a legend, the arc colors are decipherable only via hover —
5916
+ * which fails WCAG 1.4.1 for the core "what is this composition?"
5917
+ * question. @default `false`
5918
+ */
5919
+ legend?: boolean;
5230
5920
  }
5231
5921
  declare const ConceptPulseChart: React$1.ForwardRefExoticComponent<ConceptPulseChartProps & React$1.RefAttributes<HTMLDivElement>>;
5232
5922
 
@@ -5286,6 +5976,12 @@ interface PartoNetworkChartProps {
5286
5976
  className?: string;
5287
5977
  isLoading?: boolean;
5288
5978
  ariaLabel?: string;
5979
+ /**
5980
+ * Render a legend listing each node group with its assigned color.
5981
+ * Pulled from the unique `group` values across `nodes`. When no node
5982
+ * has a `group`, the legend silently renders nothing. @default `false`
5983
+ */
5984
+ legend?: boolean;
5289
5985
  }
5290
5986
  declare const PartoNetworkChart: React$1.ForwardRefExoticComponent<PartoNetworkChartProps & React$1.RefAttributes<HTMLDivElement>>;
5291
5987
 
@@ -5446,6 +6142,69 @@ declare function localeAwareNumberTick(locale: SupportedLocale): (value: unknown
5446
6142
  * letters. Use on date/time axes whose labels carry digits.
5447
6143
  */
5448
6144
  declare function localeAwareCategoryTick(locale: SupportedLocale): (value: unknown) => string;
6145
+ interface ChartLegendItem {
6146
+ /** Unique identifier — typically the dataKey or series id. */
6147
+ key: string;
6148
+ /** Display label. Strings preferred so AT can read it. */
6149
+ label: React$1.ReactNode;
6150
+ /** Marker color. Pass the resolved value (hsl, hex, or `var(--token)`). */
6151
+ color: string;
6152
+ /**
6153
+ * Marker shape. `dot` for categorical (Bar/Pie), `line` for series (Line/Area),
6154
+ * `bar` for stacked distributions. @default `dot`
6155
+ */
6156
+ shape?: 'dot' | 'line' | 'bar';
6157
+ /**
6158
+ * Optional stroke pattern when `shape="line"`. Lets color-blind users
6159
+ * distinguish series by texture in addition to color. WCAG 1.4.1
6160
+ * (Use of Color) recommends adding a non-color signal.
6161
+ */
6162
+ pattern?: 'solid' | 'dashed' | 'dotted' | 'dash-dot';
6163
+ /** Optional trailing value (count, percent, etc.). */
6164
+ value?: React$1.ReactNode;
6165
+ }
6166
+ interface ChartLegendProps extends React$1.HTMLAttributes<HTMLDivElement> {
6167
+ /** Series to enumerate. */
6168
+ items: ChartLegendItem[];
6169
+ /** Layout — `horizontal` wraps, `vertical` stacks. @default `horizontal` */
6170
+ orientation?: 'horizontal' | 'vertical';
6171
+ /** Marker square/dot edge length in px. @default `10` */
6172
+ swatchSize?: number;
6173
+ }
6174
+ /**
6175
+ * Reusable chart legend. Pair with `PartoLineChart`, `PartoBarChart`, etc. by
6176
+ * passing `legend={[…]}` or rendering `<ChartLegend>` next to the chart. Each
6177
+ * line-shape entry can carry a stroke pattern so colorblind users can read
6178
+ * series identity without relying on color alone.
6179
+ *
6180
+ * The legend has no chart-aware behavior on its own — pass the same colors
6181
+ * (resolved via `useChartTheme`) you handed to the chart's `Cell`/series.
6182
+ */
6183
+ declare const ChartLegend: React$1.ForwardRefExoticComponent<ChartLegendProps & React$1.RefAttributes<HTMLDivElement>>;
6184
+ interface ChartGradientLegendProps extends React$1.HTMLAttributes<HTMLDivElement> {
6185
+ /** Color at the low end of the scale (e.g. background-muted). */
6186
+ startColor: string;
6187
+ /** Color at the high end (e.g. brand). */
6188
+ endColor: string;
6189
+ /** Optional left/start label (typically the minimum value). */
6190
+ startLabel?: React$1.ReactNode;
6191
+ /** Optional right/end label (typically the maximum value). */
6192
+ endLabel?: React$1.ReactNode;
6193
+ /** Optional caption above the bar (e.g. "تراکم انتشار"). */
6194
+ caption?: React$1.ReactNode;
6195
+ /** Bar width in px @default 160 */
6196
+ width?: number;
6197
+ /** Bar height in px @default 8 */
6198
+ height?: number;
6199
+ }
6200
+ /**
6201
+ * Continuous-scale legend for charts whose data is encoded as color intensity
6202
+ * (HeatMap, choropleth, gradient density). Renders a horizontal gradient bar
6203
+ * with start/end labels, captioned for AT via `role="img"` + `aria-label`.
6204
+ *
6205
+ * For discrete categorical legends (Line/Bar/Pie), use `<ChartLegend>` instead.
6206
+ */
6207
+ declare const ChartGradientLegend: React$1.ForwardRefExoticComponent<ChartGradientLegendProps & React$1.RefAttributes<HTMLDivElement>>;
5449
6208
  /**
5450
6209
  * Transforms Nivo line/area data format to Recharts row-oriented format.
5451
6210
  * Useful for consumers migrating from Nivo data shape.
@@ -5710,4 +6469,4 @@ interface UseFilterPresetsReturn<T extends FilterStateShape> {
5710
6469
  */
5711
6470
  declare function useFilterPresets<T extends FilterStateShape>(options: UseFilterPresetsOptions): UseFilterPresetsReturn<T>;
5712
6471
 
5713
- export { ACTION_TYPE_META, Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActionStatusKey, ActionTimeline, type ActionTimelineDensity, type ActionTimelineGroupBy, ActionTimelineItem, type ActionTimelineItemData, type ActionTimelineItemProps, type ActionTimelineProps, ActionTypeChip, type ActionTypeChipProps, ActionTypeKey, ActiveFiltersBar, type ActiveFiltersBarProps, ActiveFiltersClearAll, type ActiveFiltersClearAllProps, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AnimatedNumber, type AnimatedNumberProps, AppBar, type AppBarProps, AppLayout, AppLayoutContent, AspectRatio, type AsyncStatus, Autocomplete, type AutocompleteItem, type AutocompleteProps, AvatarGroup, type AvatarGroupItem, type AvatarGroupProps, AvatarTextSkeleton, type AvatarTextSkeletonProps, Banner, type BannerProps, type BenchmarkMarker, type BenchmarkTier, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BulletinViewer, type BulletinViewerProps, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, ButtonProps, CHART_FONT_FAMILY, COUNTRIES, CRITERION_TIER_KEYS, Callout, CalloutDescription, type CalloutProps, CalloutTitle, CardSkeleton, type CardSkeletonProps, 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, 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 Country, type CountryCode, CountryPicker, type CountryPickerProps, type CriterionInputSpec, CriterionScoreCard, type CriterionScoreCardProps, type CriterionTierKey, type CriterionTierThresholds, type CriterionTrend, DEFAULT_CRITERION_THRESHOLDS, DEFAULT_PERIODS, DEFAULT_THRESHOLDS, DataTableColumn, DataTableColumnVisibility, DataTableColumnVisibilityToggle, type DataTableColumnVisibilityToggleProps, DataTableExportButton, type DataTableExportButtonProps, DatePicker, type DatePickerProps, DateRangePicker, DateRangePickerInline, type DateRangePickerProps, Dialog, 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, EmotionBadge, type EmotionBadgeProps, type EmotionData, EmotionDistribution, type EmotionDistributionProps, 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, EntityHealthKey, ErrorBoundary, type ErrorBoundaryProps, ErrorIllustration, ErrorState, type ErrorStateProps, type ExecutiveSummaryMetric, ExecutiveSummarySection, type ExecutiveSummarySectionProps, type ExportableColumn, type ExtendedPlatform, 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, type FilterPreset, FilterSection, type FilterSectionProps, FilterStateShape, FirstRunIllustration, FlowBadge, type FlowBadgeProps, FlowCell, type FlowCellProps, FlowData, FlowDistributionSection, type FlowDistributionSectionProps, FlowKey, type FollowerGroup, ForbiddenIllustration, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, FormRowSkeleton, type FormRowSkeletonProps, GROUP_LABELS, HashtagInput, type TagInputProps as HashtagInputProps, type HashtagPerformanceData, HashtagPerformanceRow, type HashtagPerformanceRowProps, type HeatMapDatum, type HeatMapRow, HotkeyCombo, HoverCard, HoverCardContent, HoverCardTrigger, IRAN_PROVINCES, type Icon, Icons, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InputProps, InputVariants, InputWithIcon, type InputWithIconProps, type IranProvince, type IranProvinceSlug, 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, 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, LabelChip, type LabelChipProps, LabelEditDialog, type LabelEditDialogProps, type LegacySize, MarkdownRenderer, type MarkdownRendererProps, 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, type MultiPlatformMetrics, MultiPlatformPostCard, type MultiPlatformPostCardProps, type MultiPlatformPostData, 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, NoDataIllustration, NoResultsIllustration, NotificationCenter, type NotificationCenterProps, type NotificationFilter, type NotificationItem, type NotificationSeverity, NumberInputLocale, type NumberInputLocaleProps, 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, PartoHeatMap, type PartoHeatMapProps, PartoNetworkChart, type PartoNetworkChartProps, PartoRadarChart, type PartoRadarChartProps, PartoSankeyChart, type PartoSankeyChartProps, PartoScatterChart, type PartoScatterChartProps, type PartoToasterProps, PartoWordCloud, type PartoWordCloudProps, type PeriodOption, PeriodSelector, type PeriodSelectorProps, type PlatformMetadata, 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, RegionPicker, type RegionPickerKey, type RegionPickerProps, RegisteredHotkey, ReportComposer, type ReportComposerProps, ReportSection, type ReportSectionProps, ResizableHandle, ResizablePanel, ResizablePanelGroup, RouteProgress, type RouteProgressHandle, type RouteProgressProps, SONNER_DEFAULT_DURATION, SafeImage, type SafeImageProps, type SankeyLink, type SankeyNode, ScrollArea, ScrollBar, SearchInput, type SearchInputProps, type SectionItem, SectionNavigator, type SectionNavigatorProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectTriggerVariants, SelectValue, SentimentBadge, type SentimentBadgeProps, SentimentBreakdownSection, type SentimentBreakdownSectionProps, SentimentCell, type SentimentCellProps, SentimentData, Separator, SeverityBadge, type SeverityBadgeProps, SeverityKey, ShortcutsCheatsheet, type ShortcutsCheatsheetProps, 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, SocialPlatform, type SourceBreakdownEntry, SourceBreakdownSection, type SourceBreakdownSectionProps, SparklineCell, type SparklineCellProps, Spinner, type SpinnerProps, StageStatusKey, type StandardSize, StatDeltaCell, type StatDeltaCellProps, StatDisplay, type StatDisplayProps, StatusBadge, type StatusBadgeProps, StatusFlow, type StatusFlowOrientation, type StatusFlowProps, type StatusFlowSize, StatusFlowStage, type StatusFlowStageData, type StatusFlowStageProps, StatusKey, StatusPulseCell, type StatusPulseCellProps, Step, type StepProps, Stepper, type StepperProps, 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, TaskList, type TaskListGroup, type TaskListProps, Textarea, TimelineSection, type TimelineSectionProps, Toaster, Toggle, ToggleGroup, ToggleGroupItem, TooltipContent, TopPostsSection, type TopPostsSectionProps, TrendCell, type TrendCellProps, TrendIndicator, type TrendIndicatorProps, type UseAsyncReturn, type UseClipboardOptions, type UseClipboardReturn, type UseFilterParamsOptions, type UseFilterPresetsOptions, type UseFilterPresetsReturn, 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, actionTypeChipVariants, appBarVariants, avatarGroupVariants, bannerVariants, buildCsv, buildPostingFrequencyRows, buildTsv, buttonGroupVariants, calloutVariants, computeComparisonWinners, countComparisonWins, countryFlag, defaultActions as defaultPostActions, downloadFile, findCountry, findProvince, findTierIndex, formatJalaliDate, formatPersianDateRange, getCountryLabel, getCriterionTier, getCurrentRangeIndex, getEngagementRanges, getEngagementRateBenchmarkTiers, getFollowerGroup, getPersianDay, getPersianMonth, getPersianMonthName, getPersianMonthNameShort, getPersianMonthsForDropdown, getPersianWeekdayName, getPersianYear, getPersianYearsForDropdown, getProvinceLabel, getScoreBenchmarkTiers, tagInputVariants as hashtagInputVariants, jalaliToGregorian, labelChipVariants, localeAwareCategoryTick, localeAwareNumberTick, navItemVariants, navigationMenuTriggerStyle, normalizeSize, normalizeUrlDigits, pageLoaderVariants, postCardVariants, postHeaderVariants, profileCardVariants, resolveLevel, siteHeaderVariants, spinnerVariants, statDisplayVariants, tagInputVariants, toEnglishDigits, toPersianDigits, toggleVariants, transformNivoLineData, useAsync, useBreakpoint, useChartTheme, useClipboard, useDebounce, useDocumentDirection, useFilterParams, useFilterPresets, useFormField, useInfiniteScroll, useIsMobile, useJobWizard, useJobWizardState, useLocalStorage, useMediaQuery, useNavRail, useNavTree, useOutsideClick, usePrevious, useRootStyles, useScrollLock, useSidebar };
6472
+ export { ACTION_TYPE_META, Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActionStatusKey, ActionTimeline, type ActionTimelineDensity, type ActionTimelineGroupBy, ActionTimelineItem, type ActionTimelineItemData, type ActionTimelineItemProps, type ActionTimelineProps, ActionTypeChip, type ActionTypeChipProps, ActionTypeKey, ActiveFiltersBar, type ActiveFiltersBarProps, ActiveFiltersClearAll, type ActiveFiltersClearAllProps, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AnimatedNumber, type AnimatedNumberProps, AppBar, type AppBarProps, AppLayout, AppLayoutContent, AspectRatio, type AsyncStatus, Autocomplete, type AutocompleteItem, type AutocompleteProps, AvatarGroup, type AvatarGroupItem, type AvatarGroupProps, AvatarTextSkeleton, type AvatarTextSkeletonProps, Banner, type BannerProps, type BenchmarkMarker, type BenchmarkTier, BlurBackdrop, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BulletinViewer, type BulletinViewerProps, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, ButtonProps, CENTERED_CONTAINER_CLS, CHART_FONT_FAMILY, COUNTRIES, CRITERION_TIER_KEYS, Callout, CalloutDescription, type CalloutProps, CalloutTitle, CardSkeleton, type CardSkeletonProps, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartGradientLegend, type ChartGradientLegendProps, ChartLegend, type ChartLegendItem, type ChartLegendProps, 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, 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 Country, type CountryCode, CountryPicker, type CountryPickerProps, type CriterionInputSpec, CriterionScoreCard, type CriterionScoreCardProps, type CriterionTierKey, type CriterionTierThresholds, type CriterionTrend, DEFAULT_CRITERION_THRESHOLDS, DEFAULT_PERIODS, DEFAULT_THRESHOLDS, DataTableColumn, DataTableColumnVisibility, DataTableColumnVisibilityToggle, type DataTableColumnVisibilityToggleProps, DataTableExportButton, type DataTableExportButtonProps, DatePicker, type DatePickerProps, DateRangePicker, DateRangePickerInline, type DateRangePickerProps, Dialog, 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, EmotionBadge, type EmotionBadgeProps, type EmotionData, EmotionDistribution, type EmotionDistributionProps, 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, EntityHealthKey, ErrorBoundary, type ErrorBoundaryProps, ErrorIllustration, ErrorState, type ErrorStateProps, type ExecutiveSummaryMetric, ExecutiveSummarySection, type ExecutiveSummarySectionProps, type ExportableColumn, FOREGROUND_IMG_CLS, 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, type FilterPreset, FilterSection, type FilterSectionProps, FilterStateShape, FirstRunIllustration, FlowBadge, type FlowBadgeProps, FlowCell, type FlowCellProps, FlowData, FlowDistributionSection, type FlowDistributionSectionProps, FlowKey, type FollowerGroup, ForbiddenIllustration, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, FormRowSkeleton, type FormRowSkeletonProps, GROUP_LABELS, HashtagInput, type TagInputProps as HashtagInputProps, type HashtagPerformanceData, HashtagPerformanceRow, type HashtagPerformanceRowProps, type HeatMapDatum, type HeatMapRow, HotkeyCombo, HoverCard, HoverCardContent, HoverCardTrigger, IRAN_PROVINCES, type Icon, Icons, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InputProps, InputVariants, InputWithIcon, type InputWithIconProps, type IranProvince, type IranProvinceSlug, 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, 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, LabelChip, type LabelChipProps, LabelEditDialog, type LabelEditDialogProps, type LegacySize, MarkdownRenderer, type MarkdownRendererProps, 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, NoDataIllustration, NoResultsIllustration, NotificationCenter, type NotificationCenterProps, type NotificationFilter, type NotificationItem, type NotificationSeverity, NumberInputLocale, type NumberInputLocaleProps, 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, PartoHeatMap, type PartoHeatMapProps, PartoNetworkChart, type PartoNetworkChartProps, PartoRadarChart, type PartoRadarChartProps, PartoSankeyChart, type PartoSankeyChartProps, PartoScatterChart, type PartoScatterChartProps, type PartoToasterProps, PartoWordCloud, type PartoWordCloudProps, type PeriodOption, PeriodSelector, type PeriodSelectorProps, type PlatformMetadata, type PostAction, PostActions, type PostActionsProps, type PostAiAnalysis, type PostAiEntity, type PostAuthor, type PostAuthorityTier, PostBody, type PostBodyData, type PostBodyProps, type PostBulkAction, PostBulkActionBar, type PostBulkActionBarProps, PostCard, type PostCardProps, type PostCluster, type PostComment, type PostCommentAuthor, PostCrisisBanner, type PostCrisisBannerProps, type PostData, type PostDensity, type PostDetails, PostDetailsDrawer, type PostDetailsDrawerProps, type PostDetailsTab, type PostEmotion, type PostEnrichmentFlags, type PostFlags, type PostFlow, type PostGroupBy, PostHeader, PostHeaderBroadcast, type PostHeaderBroadcastProps, PostHeaderEditorial, type PostHeaderEditorialProps, type PostHeaderProps, type PostIntent, PostList, type PostListProps, PostMedia, PostMediaAudio, PostMediaCarousel, PostMediaGrid, PostMediaHighlight, type PostMediaItem, PostMediaPlaceholder, type PostMediaPlaceholderProps, type PostMediaPlaceholderVariant, type PostMediaProps, PostMediaSensitiveOverlay, type PostMediaSensitivity, PostMediaSingle, PostMediaSourceRemoved, type PostMediaSourceRemovedProps, type PostMediaStatus, PostMediaStory, PostMediaVideo, PostMetadata, type PostMetadataProps, type PostMetrics, type PostOutlet, type PostPlatform, PostQuotedEmbed, type PostQuotedEmbedProps, PostRepostHeader, type PostRepostHeaderProps, type PostRepostInfo, type PostSentiment, type PostSeverity, PostSignals, type PostSignalsProps, type PostSortBy, type PostSource, type PostSourceCategory, type PostStatus, PostThreadConnector, type PostThreadConnectorProps, type PostThreadInfo, PostUrlPreview, type PostUrlPreview$1 as PostUrlPreviewData, type PostUrlPreviewProps, type PostUrlPreview$1 as PostUrlPreviewSnapshot, type PostView, 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, type ReactionBreakdown, RegionPicker, type RegionPickerKey, type RegionPickerProps, RegisteredHotkey, ReportComposer, type ReportComposerProps, ReportSection, type ReportSectionProps, ResizableHandle, ResizablePanel, ResizablePanelGroup, RouteProgress, type RouteProgressHandle, type RouteProgressProps, SENSITIVITY_LABEL, SONNER_DEFAULT_DURATION, SafeImage, type SafeImageProps, type SankeyLink, type SankeyNode, ScrollArea, ScrollBar, SearchInput, type SearchInputProps, type SectionItem, SectionNavigator, type SectionNavigatorProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectTriggerVariants, SelectValue, SentimentBadge, type SentimentBadgeProps, SentimentBreakdownSection, type SentimentBreakdownSectionProps, SentimentCell, type SentimentCellProps, SentimentData, Separator, SeverityBadge, type SeverityBadgeProps, SeverityKey, ShortcutsCheatsheet, type ShortcutsCheatsheetProps, 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, SocialPlatform, type SourceBreakdownEntry, SourceBreakdownSection, type SourceBreakdownSectionProps, SparklineCell, type SparklineCellProps, Spinner, type SpinnerProps, StageStatusKey, type StandardSize, StatDeltaCell, type StatDeltaCellProps, StatDisplay, type StatDisplayProps, StatusBadge, type StatusBadgeProps, StatusFlow, type StatusFlowOrientation, type StatusFlowProps, type StatusFlowSize, StatusFlowStage, type StatusFlowStageData, type StatusFlowStageProps, StatusKey, StatusPulseCell, type StatusPulseCellProps, Step, type StepProps, Stepper, type StepperProps, 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, TaskList, type TaskListGroup, type TaskListProps, Textarea, TimelineSection, type TimelineSectionProps, Toaster, Toggle, ToggleGroup, ToggleGroupItem, TooltipContent, TopPostsSection, type TopPostsSectionProps, TrendCell, type TrendCellProps, TrendIndicator, type TrendIndicatorProps, type UseAsyncReturn, type UseClipboardOptions, type UseClipboardReturn, type UseFilterParamsOptions, type UseFilterPresetsOptions, type UseFilterPresetsReturn, 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, actionTypeChipVariants, appBarVariants, avatarGroupVariants, bannerVariants, buildCsv, buildPostingFrequencyRows, buildTsv, buttonGroupVariants, calloutVariants, computeComparisonWinners, countComparisonWins, countryFlag, defaultActions as defaultPostActions, downloadFile, findCountry, findProvince, findTierIndex, formatJalaliDate, formatPersianDateRange, getCountryLabel, getCriterionTier, getCurrentRangeIndex, getEngagementRanges, getEngagementRateBenchmarkTiers, getFollowerGroup, getMetricLabel, getPersianDay, getPersianMonth, getPersianMonthName, getPersianMonthNameShort, getPersianMonthsForDropdown, getPersianWeekdayName, getPersianYear, getPersianYearsForDropdown, getPostSourceConfig, getProvinceLabel, getScoreBenchmarkTiers, getSourceColorVar, tagInputVariants as hashtagInputVariants, jalaliToGregorian, labelChipVariants, localeAwareCategoryTick, localeAwareNumberTick, navItemVariants, navigationMenuTriggerStyle, normalizeSize, normalizeUrlDigits, pageLoaderVariants, postCardVariants, postHeaderVariants, profileCardVariants, resolveLevel, siteHeaderVariants, sourceCategory, spinnerVariants, statDisplayVariants, tagInputVariants, toEnglishDigits, toPersianDigits, toggleVariants, transformNivoLineData, useAsync, useBreakpoint, useChartTheme, useClipboard, useDebounce, useDocumentDirection, useFilterParams, useFilterPresets, useFormField, useInfiniteScroll, useIsMobile, useJobWizard, useJobWizardState, useLocalStorage, useMediaQuery, useNavRail, useNavTree, useOutsideClick, usePrevious, useRootStyles, useScrollLock, useSidebar };