@parto-system-design/ui 1.1.4 → 1.1.7

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 (302) hide show
  1. package/AGENTS.md +233 -0
  2. package/LICENSE +21 -0
  3. package/README.md +96 -43
  4. package/dist/chunk-2UD3LGVX.cjs +316 -0
  5. package/dist/chunk-2UD3LGVX.cjs.map +1 -0
  6. package/dist/chunk-34JUCX2G.cjs +43 -0
  7. package/dist/chunk-34JUCX2G.cjs.map +1 -0
  8. package/dist/chunk-3AIJKXBV.cjs +242 -0
  9. package/dist/chunk-3AIJKXBV.cjs.map +1 -0
  10. package/dist/chunk-4SVQNEVH.js +173 -0
  11. package/dist/chunk-4SVQNEVH.js.map +1 -0
  12. package/dist/chunk-53QY4PD3.js +908 -0
  13. package/dist/chunk-53QY4PD3.js.map +1 -0
  14. package/dist/chunk-5JJSRGJD.js +31 -0
  15. package/dist/chunk-5JJSRGJD.js.map +1 -0
  16. package/dist/chunk-5K6E4ZSW.cjs +77 -0
  17. package/dist/chunk-5K6E4ZSW.cjs.map +1 -0
  18. package/dist/chunk-5NY26ULO.js +89 -0
  19. package/dist/chunk-5NY26ULO.js.map +1 -0
  20. package/dist/chunk-7RVPG3LE.cjs +231 -0
  21. package/dist/chunk-7RVPG3LE.cjs.map +1 -0
  22. package/dist/chunk-7Y4V3R3Y.cjs +120 -0
  23. package/dist/chunk-7Y4V3R3Y.cjs.map +1 -0
  24. package/dist/chunk-AXAY64KL.js +39 -0
  25. package/dist/chunk-AXAY64KL.js.map +1 -0
  26. package/dist/chunk-AYEK3WOM.js +207 -0
  27. package/dist/chunk-AYEK3WOM.js.map +1 -0
  28. package/dist/chunk-BRMBLIQG.js +53 -0
  29. package/dist/chunk-BRMBLIQG.js.map +1 -0
  30. package/dist/chunk-CAJKSTXX.cjs +54 -0
  31. package/dist/chunk-CAJKSTXX.cjs.map +1 -0
  32. package/dist/chunk-CKFWMHQU.js +401 -0
  33. package/dist/chunk-CKFWMHQU.js.map +1 -0
  34. package/dist/chunk-CV3N3HVK.js +672 -0
  35. package/dist/chunk-CV3N3HVK.js.map +1 -0
  36. package/dist/chunk-D2EBLE2B.cjs +220 -0
  37. package/dist/chunk-D2EBLE2B.cjs.map +1 -0
  38. package/dist/chunk-D5XCQDFS.js +92 -0
  39. package/dist/chunk-D5XCQDFS.js.map +1 -0
  40. package/dist/chunk-GDHRYKVM.js +45 -0
  41. package/dist/chunk-GDHRYKVM.js.map +1 -0
  42. package/dist/chunk-GKRAZGDI.cjs +84 -0
  43. package/dist/chunk-GKRAZGDI.cjs.map +1 -0
  44. package/dist/chunk-HEYMLQOV.cjs +94 -0
  45. package/dist/chunk-HEYMLQOV.cjs.map +1 -0
  46. package/dist/chunk-HF6XU5NI.js +84 -0
  47. package/dist/chunk-HF6XU5NI.js.map +1 -0
  48. package/dist/chunk-HJPDZOMJ.cjs +87 -0
  49. package/dist/chunk-HJPDZOMJ.cjs.map +1 -0
  50. package/dist/chunk-HUCC3QH5.cjs +53 -0
  51. package/dist/chunk-HUCC3QH5.cjs.map +1 -0
  52. package/dist/chunk-HYZ6BQPS.cjs +425 -0
  53. package/dist/chunk-HYZ6BQPS.cjs.map +1 -0
  54. package/dist/chunk-IQHKJ4SS.js +213 -0
  55. package/dist/chunk-IQHKJ4SS.js.map +1 -0
  56. package/dist/chunk-ISCSZMYW.cjs +106 -0
  57. package/dist/chunk-ISCSZMYW.cjs.map +1 -0
  58. package/dist/chunk-IXFEFIDO.js +82 -0
  59. package/dist/chunk-IXFEFIDO.js.map +1 -0
  60. package/dist/chunk-JUBHQAA2.js +53 -0
  61. package/dist/chunk-JUBHQAA2.js.map +1 -0
  62. package/dist/chunk-KCWRCSI7.js +62 -0
  63. package/dist/chunk-KCWRCSI7.js.map +1 -0
  64. package/dist/chunk-L2L5CKC2.js +291 -0
  65. package/dist/chunk-L2L5CKC2.js.map +1 -0
  66. package/dist/chunk-LLJR7FV3.js +135 -0
  67. package/dist/chunk-LLJR7FV3.js.map +1 -0
  68. package/dist/chunk-LZMCMZZF.js +118 -0
  69. package/dist/chunk-LZMCMZZF.js.map +1 -0
  70. package/dist/chunk-M5CHZ5BA.js +124 -0
  71. package/dist/chunk-M5CHZ5BA.js.map +1 -0
  72. package/dist/chunk-MBCTRNTG.js +89 -0
  73. package/dist/chunk-MBCTRNTG.js.map +1 -0
  74. package/dist/chunk-MEK4RSGC.js +65 -0
  75. package/dist/chunk-MEK4RSGC.js.map +1 -0
  76. package/dist/chunk-MFTX2DDQ.js +27 -0
  77. package/dist/chunk-MFTX2DDQ.js.map +1 -0
  78. package/dist/chunk-MKYVQQBV.cjs +114 -0
  79. package/dist/chunk-MKYVQQBV.cjs.map +1 -0
  80. package/dist/chunk-MQGQVI3W.cjs +950 -0
  81. package/dist/chunk-MQGQVI3W.cjs.map +1 -0
  82. package/dist/chunk-NEFZJHE4.cjs +157 -0
  83. package/dist/chunk-NEFZJHE4.cjs.map +1 -0
  84. package/dist/chunk-NEML6RCV.js +405 -0
  85. package/dist/chunk-NEML6RCV.js.map +1 -0
  86. package/dist/chunk-NV4JOKWL.cjs +197 -0
  87. package/dist/chunk-NV4JOKWL.cjs.map +1 -0
  88. package/dist/chunk-O2JG7WY5.cjs +121 -0
  89. package/dist/chunk-O2JG7WY5.cjs.map +1 -0
  90. package/dist/chunk-OEVMKFFL.cjs +140 -0
  91. package/dist/chunk-OEVMKFFL.cjs.map +1 -0
  92. package/dist/chunk-ONO2FTV4.cjs +68 -0
  93. package/dist/chunk-ONO2FTV4.cjs.map +1 -0
  94. package/dist/chunk-OS6CMYAS.cjs +79 -0
  95. package/dist/chunk-OS6CMYAS.cjs.map +1 -0
  96. package/dist/chunk-P5XHPNJG.cjs +430 -0
  97. package/dist/chunk-P5XHPNJG.cjs.map +1 -0
  98. package/dist/chunk-QJ7UB2ZQ.js +98 -0
  99. package/dist/chunk-QJ7UB2ZQ.js.map +1 -0
  100. package/dist/chunk-RA5KZNG5.js +269 -0
  101. package/dist/chunk-RA5KZNG5.js.map +1 -0
  102. package/dist/chunk-RJ3HYZ7S.js +44 -0
  103. package/dist/chunk-RJ3HYZ7S.js.map +1 -0
  104. package/dist/chunk-RZNRIOLT.js +128 -0
  105. package/dist/chunk-RZNRIOLT.js.map +1 -0
  106. package/dist/chunk-S5IPJQZ3.cjs +161 -0
  107. package/dist/chunk-S5IPJQZ3.cjs.map +1 -0
  108. package/dist/chunk-SB5DSYR5.js +211 -0
  109. package/dist/chunk-SB5DSYR5.js.map +1 -0
  110. package/dist/chunk-SCGW2BH4.cjs +69 -0
  111. package/dist/chunk-SCGW2BH4.cjs.map +1 -0
  112. package/dist/chunk-SCX6AR53.cjs +108 -0
  113. package/dist/chunk-SCX6AR53.cjs.map +1 -0
  114. package/dist/chunk-SFXV2DUH.js +106 -0
  115. package/dist/chunk-SFXV2DUH.js.map +1 -0
  116. package/dist/chunk-SXEPGD4Z.cjs +152 -0
  117. package/dist/chunk-SXEPGD4Z.cjs.map +1 -0
  118. package/dist/chunk-SZMVOHT7.cjs +107 -0
  119. package/dist/chunk-SZMVOHT7.cjs.map +1 -0
  120. package/dist/chunk-U5FLLCGC.cjs +151 -0
  121. package/dist/chunk-U5FLLCGC.cjs.map +1 -0
  122. package/dist/chunk-VO3B75F6.cjs +111 -0
  123. package/dist/chunk-VO3B75F6.cjs.map +1 -0
  124. package/dist/chunk-YAJWTNOX.js +106 -0
  125. package/dist/chunk-YAJWTNOX.js.map +1 -0
  126. package/dist/chunk-YC5KLN6I.js +139 -0
  127. package/dist/chunk-YC5KLN6I.js.map +1 -0
  128. package/dist/chunk-YE477L2H.cjs +272 -0
  129. package/dist/chunk-YE477L2H.cjs.map +1 -0
  130. package/dist/chunk-Z2TY4A75.cjs +700 -0
  131. package/dist/chunk-Z2TY4A75.cjs.map +1 -0
  132. package/dist/chunk-Z56O7UEU.cjs +136 -0
  133. package/dist/chunk-Z56O7UEU.cjs.map +1 -0
  134. package/dist/chunk-ZZFNJR2E.js +71 -0
  135. package/dist/chunk-ZZFNJR2E.js.map +1 -0
  136. package/dist/components/charts/PartoAreaChart.cjs +15 -0
  137. package/dist/components/charts/PartoAreaChart.cjs.map +1 -0
  138. package/dist/components/charts/PartoAreaChart.d.cts +51 -0
  139. package/dist/components/charts/PartoAreaChart.d.ts +51 -0
  140. package/dist/components/charts/PartoAreaChart.js +6 -0
  141. package/dist/components/charts/PartoAreaChart.js.map +1 -0
  142. package/dist/components/charts/PartoBarChart.cjs +15 -0
  143. package/dist/components/charts/PartoBarChart.cjs.map +1 -0
  144. package/dist/components/charts/PartoBarChart.d.cts +55 -0
  145. package/dist/components/charts/PartoBarChart.d.ts +55 -0
  146. package/dist/components/charts/PartoBarChart.js +6 -0
  147. package/dist/components/charts/PartoBarChart.js.map +1 -0
  148. package/dist/components/charts/PartoLineChart.cjs +15 -0
  149. package/dist/components/charts/PartoLineChart.cjs.map +1 -0
  150. package/dist/components/charts/PartoLineChart.d.cts +49 -0
  151. package/dist/components/charts/PartoLineChart.d.ts +49 -0
  152. package/dist/components/charts/PartoLineChart.js +6 -0
  153. package/dist/components/charts/PartoLineChart.js.map +1 -0
  154. package/dist/components/charts/PartoPieChart.cjs +15 -0
  155. package/dist/components/charts/PartoPieChart.cjs.map +1 -0
  156. package/dist/components/charts/PartoPieChart.d.cts +44 -0
  157. package/dist/components/charts/PartoPieChart.d.ts +44 -0
  158. package/dist/components/charts/PartoPieChart.js +6 -0
  159. package/dist/components/charts/PartoPieChart.js.map +1 -0
  160. package/dist/components/ui/alert-rule-card.cjs +15 -0
  161. package/dist/components/ui/alert-rule-card.cjs.map +1 -0
  162. package/dist/components/ui/alert-rule-card.d.cts +38 -0
  163. package/dist/components/ui/alert-rule-card.d.ts +38 -0
  164. package/dist/components/ui/alert-rule-card.js +6 -0
  165. package/dist/components/ui/alert-rule-card.js.map +1 -0
  166. package/dist/components/ui/avatar.cjs +21 -0
  167. package/dist/components/ui/avatar.cjs.map +1 -0
  168. package/dist/components/ui/avatar.d.cts +18 -0
  169. package/dist/components/ui/avatar.d.ts +18 -0
  170. package/dist/components/ui/avatar.js +4 -0
  171. package/dist/components/ui/avatar.js.map +1 -0
  172. package/dist/components/ui/badge.cjs +17 -0
  173. package/dist/components/ui/badge.cjs.map +1 -0
  174. package/dist/components/ui/badge.d.cts +16 -0
  175. package/dist/components/ui/badge.d.ts +16 -0
  176. package/dist/components/ui/badge.js +4 -0
  177. package/dist/components/ui/badge.js.map +1 -0
  178. package/dist/components/ui/button.cjs +18 -0
  179. package/dist/components/ui/button.cjs.map +1 -0
  180. package/dist/components/ui/button.d.cts +37 -0
  181. package/dist/components/ui/button.d.ts +37 -0
  182. package/dist/components/ui/button.js +5 -0
  183. package/dist/components/ui/button.js.map +1 -0
  184. package/dist/components/ui/calendar.cjs +15 -0
  185. package/dist/components/ui/calendar.cjs.map +1 -0
  186. package/dist/components/ui/calendar.d.cts +17 -0
  187. package/dist/components/ui/calendar.d.ts +17 -0
  188. package/dist/components/ui/calendar.js +6 -0
  189. package/dist/components/ui/calendar.js.map +1 -0
  190. package/dist/components/ui/card.cjs +37 -0
  191. package/dist/components/ui/card.cjs.map +1 -0
  192. package/dist/components/ui/card.d.cts +18 -0
  193. package/dist/components/ui/card.d.ts +18 -0
  194. package/dist/components/ui/card.js +4 -0
  195. package/dist/components/ui/card.js.map +1 -0
  196. package/dist/components/ui/concept-card.cjs +18 -0
  197. package/dist/components/ui/concept-card.cjs.map +1 -0
  198. package/dist/components/ui/concept-card.d.cts +5 -0
  199. package/dist/components/ui/concept-card.d.ts +5 -0
  200. package/dist/components/ui/concept-card.js +9 -0
  201. package/dist/components/ui/concept-card.js.map +1 -0
  202. package/dist/components/ui/data-table.cjs +18 -0
  203. package/dist/components/ui/data-table.cjs.map +1 -0
  204. package/dist/components/ui/data-table.d.cts +181 -0
  205. package/dist/components/ui/data-table.d.ts +181 -0
  206. package/dist/components/ui/data-table.js +9 -0
  207. package/dist/components/ui/data-table.js.map +1 -0
  208. package/dist/components/ui/dialog.cjs +49 -0
  209. package/dist/components/ui/dialog.cjs.map +1 -0
  210. package/dist/components/ui/dialog.d.cts +22 -0
  211. package/dist/components/ui/dialog.d.ts +22 -0
  212. package/dist/components/ui/dialog.js +4 -0
  213. package/dist/components/ui/dialog.js.map +1 -0
  214. package/dist/components/ui/filter-provider.cjs +20 -0
  215. package/dist/components/ui/filter-provider.cjs.map +1 -0
  216. package/dist/components/ui/filter-provider.d.cts +49 -0
  217. package/dist/components/ui/filter-provider.d.ts +49 -0
  218. package/dist/components/ui/filter-provider.js +3 -0
  219. package/dist/components/ui/filter-provider.js.map +1 -0
  220. package/dist/components/ui/input.cjs +22 -0
  221. package/dist/components/ui/input.cjs.map +1 -0
  222. package/dist/components/ui/input.d.cts +16 -0
  223. package/dist/components/ui/input.d.ts +16 -0
  224. package/dist/components/ui/input.js +5 -0
  225. package/dist/components/ui/input.js.map +1 -0
  226. package/dist/components/ui/iran-province-heat.cjs +13 -0
  227. package/dist/components/ui/iran-province-heat.cjs.map +1 -0
  228. package/dist/components/ui/iran-province-heat.d.cts +64 -0
  229. package/dist/components/ui/iran-province-heat.d.ts +64 -0
  230. package/dist/components/ui/iran-province-heat.js +4 -0
  231. package/dist/components/ui/iran-province-heat.js.map +1 -0
  232. package/dist/components/ui/page-card.cjs +16 -0
  233. package/dist/components/ui/page-card.cjs.map +1 -0
  234. package/dist/components/ui/page-card.d.cts +6 -0
  235. package/dist/components/ui/page-card.d.ts +6 -0
  236. package/dist/components/ui/page-card.js +7 -0
  237. package/dist/components/ui/page-card.js.map +1 -0
  238. package/dist/components/ui/popover.cjs +25 -0
  239. package/dist/components/ui/popover.cjs.map +1 -0
  240. package/dist/components/ui/popover.d.cts +9 -0
  241. package/dist/components/ui/popover.d.ts +9 -0
  242. package/dist/components/ui/popover.js +4 -0
  243. package/dist/components/ui/popover.js.map +1 -0
  244. package/dist/components/ui/saved-query-card.cjs +15 -0
  245. package/dist/components/ui/saved-query-card.cjs.map +1 -0
  246. package/dist/components/ui/saved-query-card.d.cts +41 -0
  247. package/dist/components/ui/saved-query-card.d.ts +41 -0
  248. package/dist/components/ui/saved-query-card.js +6 -0
  249. package/dist/components/ui/saved-query-card.js.map +1 -0
  250. package/dist/components/ui/separator.cjs +13 -0
  251. package/dist/components/ui/separator.cjs.map +1 -0
  252. package/dist/components/ui/separator.d.cts +9 -0
  253. package/dist/components/ui/separator.d.ts +9 -0
  254. package/dist/components/ui/separator.js +4 -0
  255. package/dist/components/ui/separator.js.map +1 -0
  256. package/dist/components/ui/sheet.cjs +45 -0
  257. package/dist/components/ui/sheet.cjs.map +1 -0
  258. package/dist/components/ui/sheet.d.cts +44 -0
  259. package/dist/components/ui/sheet.d.ts +44 -0
  260. package/dist/components/ui/sheet.js +4 -0
  261. package/dist/components/ui/sheet.js.map +1 -0
  262. package/dist/components/ui/sparkline.cjs +13 -0
  263. package/dist/components/ui/sparkline.cjs.map +1 -0
  264. package/dist/components/ui/sparkline.d.cts +36 -0
  265. package/dist/components/ui/sparkline.d.ts +36 -0
  266. package/dist/components/ui/sparkline.js +4 -0
  267. package/dist/components/ui/sparkline.js.map +1 -0
  268. package/dist/components/ui/tooltip.cjs +25 -0
  269. package/dist/components/ui/tooltip.cjs.map +1 -0
  270. package/dist/components/ui/tooltip.d.cts +17 -0
  271. package/dist/components/ui/tooltip.d.ts +17 -0
  272. package/dist/components/ui/tooltip.js +4 -0
  273. package/dist/components/ui/tooltip.js.map +1 -0
  274. package/dist/concept-card-CcOBb2Nz.d.ts +83 -0
  275. package/dist/concept-card-RwPbqJ06.d.cts +83 -0
  276. package/dist/hooks/use-hotkey-registry.cjs +21 -0
  277. package/dist/hooks/use-hotkey-registry.cjs.map +1 -0
  278. package/dist/hooks/use-hotkey-registry.d.cts +65 -0
  279. package/dist/hooks/use-hotkey-registry.d.ts +65 -0
  280. package/dist/hooks/use-hotkey-registry.js +4 -0
  281. package/dist/hooks/use-hotkey-registry.js.map +1 -0
  282. package/dist/hooks/use-hotkeys.cjs +16 -0
  283. package/dist/hooks/use-hotkeys.cjs.map +1 -0
  284. package/dist/hooks/use-hotkeys.d.cts +66 -0
  285. package/dist/hooks/use-hotkeys.d.ts +66 -0
  286. package/dist/hooks/use-hotkeys.js +3 -0
  287. package/dist/hooks/use-hotkeys.js.map +1 -0
  288. package/dist/i18n-ArS3mqj0.d.ts +344 -0
  289. package/dist/i18n-CAd9wGOr.d.cts +344 -0
  290. package/dist/index.cjs +16630 -10326
  291. package/dist/index.cjs.map +1 -1
  292. package/dist/index.css +910 -119
  293. package/dist/index.d.cts +3177 -844
  294. package/dist/index.d.ts +3177 -844
  295. package/dist/index.js +14211 -8649
  296. package/dist/index.js.map +1 -1
  297. package/dist/page-card-CO92oXkc.d.ts +100 -0
  298. package/dist/page-card-DOl50DqJ.d.cts +100 -0
  299. package/dist/utils-DlXWmDZ-.d.cts +35 -0
  300. package/dist/utils-DlXWmDZ-.d.ts +35 -0
  301. package/package.json +160 -4
  302. package/tailwind.config.ts +61 -2
package/dist/index.d.ts CHANGED
@@ -1,4 +1,7 @@
1
- import { ClassValue } from 'clsx';
1
+ import { S as SupportedLocale } from './utils-DlXWmDZ-.js';
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';
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';
2
5
  import * as React$1 from 'react';
3
6
  import { LucideIcon } from 'lucide-react';
4
7
  import * as react_jsx_runtime from 'react/jsx-runtime';
@@ -6,34 +9,54 @@ import * as AccordionPrimitive from '@radix-ui/react-accordion';
6
9
  import * as class_variance_authority_types from 'class-variance-authority/types';
7
10
  import { VariantProps } from 'class-variance-authority';
8
11
  import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
12
+ export { AlertChannel, AlertRuleCard, AlertRuleCardProps } from './components/ui/alert-rule-card.js';
9
13
  import * as AspectRatioPrimitive from '@radix-ui/react-aspect-ratio';
10
- import * as AvatarPrimitive from '@radix-ui/react-avatar';
11
- import * as SeparatorPrimitive from '@radix-ui/react-separator';
12
- import { DayPicker, DateRange } from 'react-day-picker';
13
- import { DayPicker as DayPicker$1 } from 'react-day-picker/persian';
14
+ export { Avatar, AvatarFallback, AvatarImage } from './components/ui/avatar.js';
15
+ export { Badge, BadgeProps, badgeVariants } from './components/ui/badge.js';
16
+ import { Button, ButtonProps } from './components/ui/button.js';
17
+ export { ButtonVariantProps, LoadingVariantProps, buttonVariants } from './components/ui/button.js';
18
+ import { Separator } from './components/ui/separator.js';
19
+ export { Calendar, CalendarProps } from './components/ui/calendar.js';
20
+ export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardProps, CardTitle, cardVariants } from './components/ui/card.js';
14
21
  import useEmblaCarousel, { UseEmblaCarouselType } from 'embla-carousel-react';
15
22
  import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
16
23
  import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
17
24
  import { Command as Command$1 } from 'cmdk';
18
- import * as DialogPrimitive from '@radix-ui/react-dialog';
25
+ import { Dialog } from './components/ui/dialog.js';
26
+ export { DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from './components/ui/dialog.js';
27
+ import { HotkeyCombo } from './hooks/use-hotkeys.js';
28
+ export { UseHotkeysOptions, formatHotkey, useHotkeys } from './hooks/use-hotkeys.js';
19
29
  import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
30
+ import { S as SentimentData, F as FlowData } from './concept-card-CcOBb2Nz.js';
31
+ export { C as ConceptCard, a as ConceptCardProps, b as FlowDistribution, c as FlowDistributionProps, d as SentimentDistribution, e as SentimentDistributionProps } from './concept-card-CcOBb2Nz.js';
32
+ import { DateRange } from 'react-day-picker';
20
33
  import { Drawer as Drawer$1 } from 'vaul';
21
34
  import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
22
35
  import * as LabelPrimitive from '@radix-ui/react-label';
36
+ import { FilterStateShape } from './components/ui/filter-provider.js';
37
+ export { FilterContextValue, FilterProvider, FilterProviderProps, useFilterState, useFilterStateOptional } from './components/ui/filter-provider.js';
23
38
  import * as react_hook_form from 'react-hook-form';
24
39
  import { FieldValues, FieldPath, ControllerProps } from 'react-hook-form';
25
40
  import { Slot } from '@radix-ui/react-slot';
26
41
  import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
42
+ import { InputProps, Input, InputVariants } from './components/ui/input.js';
43
+ export { inputVariants } from './components/ui/input.js';
44
+ export { IranProvinceCell, IranProvinceHeat, IranProvinceHeatProps, IranProvinceHeatScale } from './components/ui/iran-province-heat.js';
27
45
  import { OTPInput } from 'input-otp';
28
46
  import * as MenubarPrimitive from '@radix-ui/react-menubar';
29
47
  import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu';
30
- import * as PopoverPrimitive from '@radix-ui/react-popover';
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';
50
+ export { Popover, PopoverAnchor, PopoverContent, PopoverTrigger } from './components/ui/popover.js';
31
51
  import * as ProgressPrimitive from '@radix-ui/react-progress';
32
52
  import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
33
53
  import * as ResizablePrimitive from 'react-resizable-panels';
34
54
  import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
35
55
  import * as SelectPrimitive from '@radix-ui/react-select';
36
- import * as TooltipPrimitive from '@radix-ui/react-tooltip';
56
+ export { Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger } from './components/ui/sheet.js';
57
+ import { TooltipContent } from './components/ui/tooltip.js';
58
+ export { Tooltip, TooltipProvider, TooltipTrigger } from './components/ui/tooltip.js';
59
+ export { Sparkline, SparklineProps, SparklineTrend, SparklineVariant } from './components/ui/sparkline.js';
37
60
  import * as SliderPrimitive from '@radix-ui/react-slider';
38
61
  import { ToasterProps } from 'sonner';
39
62
  export { toast } from 'sonner';
@@ -41,38 +64,22 @@ import * as SwitchPrimitive from '@radix-ui/react-switch';
41
64
  import * as TabsPrimitive from '@radix-ui/react-tabs';
42
65
  import * as TogglePrimitive from '@radix-ui/react-toggle';
43
66
  import * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';
44
-
45
- declare function cn(...inputs: ClassValue[]): string;
46
- type SupportedLocale = 'fa' | 'ar' | 'en';
47
- /**
48
- * Convert digits in a string to Persian/Arabic numerals based on locale.
49
- * @example convertToLocalNumbers('123', 'fa') => '۱۲۳'
50
- * @example convertToLocalNumbers('123', 'en') => '123'
51
- */
52
- declare function convertToLocalNumbers(text: string | number, locale: SupportedLocale): string;
53
- /**
54
- * Format large numbers with locale-aware suffixes (K/M/B).
55
- * @example formatLargeNumber(1500, 'fa') => '۱.۵ هزار'
56
- * @example formatLargeNumber(1500, 'en') => '1.5K'
57
- */
58
- declare function formatLargeNumber(num: number, locale: SupportedLocale): string;
59
- /**
60
- * Format number to Instagram-style short format (English only).
61
- * @example formatNumber(123456, 'short') => '123K'
62
- * @example formatNumber(123456, 'exact') => '123,456'
63
- */
64
- declare function formatNumber(num: number | undefined, format?: 'exact' | 'short'): string;
65
- /**
66
- * Format date to relative time with absolute on hover (Persian)
67
- * @example formatRelativeTime(new Date()) => '۲ ساعت پیش'
68
- */
69
- declare function formatRelativeTime(date: Date | string | number): string;
70
- /**
71
- * Format date to absolute format (Persian / Jalali)
72
- * Uses date-fns-jalali for accurate Jalali conversion.
73
- * @example formatAbsoluteTime(new Date()) => '۱۵ دی ۱۴۰۳، ۱۵:۳۰'
74
- */
75
- declare function formatAbsoluteTime(date: Date | string | number): string;
67
+ import { DataTableColumn, DataTableColumnVisibility } from './components/ui/data-table.js';
68
+ export { DataTable, DataTableExpansion, DataTableMultiSort, DataTablePagination, DataTableProps, DataTableSelection, DataTableSort, SortDirection, SortRule } from './components/ui/data-table.js';
69
+ export { SavedQueryCard, SavedQueryCardProps, SavedQueryFilter } from './components/ui/saved-query-card.js';
70
+ export { PartoLineChart, PartoLineChartProps } from './components/charts/PartoLineChart.js';
71
+ export { PartoBarChart, PartoBarChartProps } from './components/charts/PartoBarChart.js';
72
+ export { PartoPieChart, PartoPieChartProps } from './components/charts/PartoPieChart.js';
73
+ export { PartoAreaChart, PartoAreaChartProps } from './components/charts/PartoAreaChart.js';
74
+ import { RegisteredHotkey } from './hooks/use-hotkey-registry.js';
75
+ export { HotkeyProvider, HotkeyProviderProps, useHotkey, useHotkeyRegistry } from './hooks/use-hotkey-registry.js';
76
+ import 'clsx';
77
+ import '@radix-ui/react-avatar';
78
+ import '@radix-ui/react-separator';
79
+ import 'react-day-picker/persian';
80
+ import '@radix-ui/react-dialog';
81
+ import '@radix-ui/react-popover';
82
+ import '@radix-ui/react-tooltip';
76
83
 
77
84
  /**
78
85
  * Persian (Jalali / Solar Hijri) calendar utilities.
@@ -201,219 +208,66 @@ declare function getFollowerGroup(followers: number): FollowerGroup;
201
208
  declare function getEngagementRanges(followers: number, locale: SupportedLocale): EngagementRangeWithDisplay[];
202
209
  declare function getCurrentRangeIndex(currentRate: number, ranges: EngagementRange[]): number;
203
210
 
204
- type Locale = SupportedLocale;
205
- /**
206
- * Returns true for RTL locales (fa, ar).
207
- */
208
- declare function isRTL(locale: SupportedLocale): boolean;
209
211
  /**
210
- * UI string translations used by the EngagementRate component.
211
- * Centralised here to avoid duplication between components.
212
+ * Iran's 31 provinces with trilingual labels and ISO 3166-2 codes.
213
+ *
214
+ * Use as a stable identifier source for `IranProvinceHeat`, `RegionPicker`,
215
+ * and any public-opinion dashboard scoped by استان. The slug (`code`) is the
216
+ * canonical key — never rely on label string equality, since labels are
217
+ * locale-dependent and may evolve.
218
+ *
219
+ * Codes follow ISO 3166-2:IR (e.g. 'IR-07' for Tehran). The slug is the
220
+ * lowercased, hyphenated English name without diacritics, suitable for URLs
221
+ * and CSS selectors. Use `getProvinceLabel(code, locale)` to resolve a label.
212
222
  */
213
- declare const engagementUiTranslations: Record<SupportedLocale, {
214
- yourCategory: string;
215
- influencer: string;
216
- followers: string;
217
- over: string;
218
- to: string;
219
- and: string;
220
- lessThan: string;
221
- you: string;
222
- criteria: string;
223
- }>;
223
+
224
+ interface IranProvince {
225
+ /** Stable URL-safe slug. The canonical key for province lookups. */
226
+ slug: string;
227
+ /** ISO 3166-2:IR code (e.g. 'IR-07'). */
228
+ iso: string;
229
+ /** Trilingual labels — fa is the canonical/native form. */
230
+ labels: Record<SupportedLocale, string>;
231
+ }
232
+ declare const IRAN_PROVINCES: readonly IranProvince[];
233
+ type IranProvinceSlug = (typeof IRAN_PROVINCES)[number]['slug'];
234
+ /** Look up a province by slug or ISO code. Returns undefined for unknown codes. */
235
+ declare function findProvince(codeOrSlug: string): IranProvince | undefined;
224
236
  /**
225
- * Sentiment label translations used by the SentimentBadge component.
237
+ * Resolve the locale-appropriate label for a province slug or ISO code.
238
+ * Falls back to fa for unknown locales and to the slug itself for unknown
239
+ * provinces (so the row still renders something instead of crashing).
226
240
  */
227
- declare const sentimentLabels: Record<SupportedLocale, {
228
- positive: string;
229
- negative: string;
230
- neutral: string;
231
- mixed: string;
232
- }>;
233
- /**
234
- * Default UI strings for components that need localized text.
235
- * Persian (fa) is the default locale for backward compatibility.
236
- */
237
- declare const UI_STRINGS: {
238
- readonly fa: {
239
- readonly noResults: "نتیجه‌ای یافت نشد";
240
- readonly suggestions: "پیشنهادها";
241
- readonly select: "انتخاب کنید";
242
- readonly noOptionsFound: "موردی یافت نشد";
243
- readonly search: "جستجو...";
244
- readonly clearAll: "پاک کردن همه";
245
- readonly selectDate: "انتخاب تاریخ";
246
- readonly selectDateRange: "انتخاب بازه تاریخ";
247
- readonly errorLoadingData: "خطا در بارگذاری داده‌ها";
248
- readonly retry: "تلاش مجدد";
249
- readonly remove: "حذف";
250
- readonly noUsersFound: "کاربری یافت نشد";
251
- readonly goToPreviousPage: "رفتن به صفحه قبلی";
252
- readonly goToNextPage: "رفتن به صفحه بعدی";
253
- readonly previous: "قبلی";
254
- readonly next: "بعدی";
255
- readonly actions: "عملیات";
256
- readonly copy: "کپی";
257
- readonly copied: "کپی شد";
258
- readonly confirm: "تایید";
259
- readonly cancel: "انصراف";
260
- readonly areYouSure: "آیا مطمئن هستید؟";
261
- readonly stepperLabel: "مراحل";
262
- readonly stepCompleted: "تکمیل شده";
263
- readonly stepCurrent: "مرحله فعلی";
264
- readonly stepPending: "در انتظار";
265
- readonly clearFilters: "پاک کردن فیلترها";
266
- readonly activeFilters: "فیلترهای فعال";
267
- readonly goBack: "بازگشت";
268
- readonly gridView: "نمای شبکه‌ای";
269
- readonly listView: "نمای لیستی";
270
- readonly loading: "در حال بارگذاری...";
271
- readonly unexpectedError: "خطای غیرمنتظره‌ای رخ داد";
272
- readonly selectAll: "انتخاب همه";
273
- readonly selectRow: "انتخاب ردیف";
274
- readonly noDataToDisplay: "داده‌ای برای نمایش وجود ندارد";
275
- readonly likesCount: "تعداد لایک";
276
- readonly commentsCount: "تعداد کامنت";
277
- readonly viewsCount: "تعداد بازدید";
278
- readonly sharesCount: "تعداد اشتراک";
279
- readonly postTypeLabel: "نوع پست";
280
- readonly postTypePhoto: "عکس";
281
- readonly postTypeVideo: "ویدیو";
282
- readonly postTypeCarousel: "اسلاید";
283
- readonly showMore: "بیشتر";
284
- readonly showLess: "کمتر";
285
- readonly noMediaAvailable: "رسانه‌ای موجود نیست";
286
- readonly commentAnalysis: "تحلیل کامنت‌ها";
287
- readonly commentAnalysisDisabled: "تحلیل کامنت‌ها (غیرفعال)";
288
- readonly booster: "بوستر";
289
- readonly boosterDisabled: "بوستر (غیرفعال)";
290
- readonly aiAnalysis: "تحلیل هوش مصنوعی";
291
- readonly aiAnalysisDisabled: "تحلیل هوش مصنوعی (غیرفعال)";
292
- readonly openOnInstagram: "باز کردن در اینستاگرام";
293
- readonly openOnInstagramDisabled: "باز کردن در اینستاگرام (غیرفعال)";
294
- };
295
- readonly ar: {
296
- readonly noResults: "لم يتم العثور على نتائج";
297
- readonly suggestions: "اقتراحات";
298
- readonly select: "اختر";
299
- readonly noOptionsFound: "لم يتم العثور على خيارات";
300
- readonly search: "بحث...";
301
- readonly clearAll: "مسح الكل";
302
- readonly selectDate: "اختر تاريخ";
303
- readonly selectDateRange: "اختر نطاق التاريخ";
304
- readonly errorLoadingData: "خطأ في تحميل البيانات";
305
- readonly retry: "إعادة المحاولة";
306
- readonly remove: "حذف";
307
- readonly noUsersFound: "لم يتم العثور على مستخدمين";
308
- readonly goToPreviousPage: "الانتقال إلى الصفحة السابقة";
309
- readonly goToNextPage: "الانتقال إلى الصفحة التالية";
310
- readonly previous: "السابق";
311
- readonly next: "التالي";
312
- readonly actions: "إجراءات";
313
- readonly copy: "نسخ";
314
- readonly copied: "تم النسخ";
315
- readonly confirm: "تأكيد";
316
- readonly cancel: "إلغاء";
317
- readonly areYouSure: "هل أنت متأكد؟";
318
- readonly stepperLabel: "الخطوات";
319
- readonly stepCompleted: "مكتمل";
320
- readonly stepCurrent: "الخطوة الحالية";
321
- readonly stepPending: "قيد الانتظار";
322
- readonly clearFilters: "مسح الفلاتر";
323
- readonly activeFilters: "الفلاتر النشطة";
324
- readonly goBack: "رجوع";
325
- readonly gridView: "عرض شبكي";
326
- readonly listView: "عرض قائمة";
327
- readonly loading: "جارٍ التحميل...";
328
- readonly unexpectedError: "حدث خطأ غير متوقع";
329
- readonly selectAll: "تحديد الكل";
330
- readonly selectRow: "تحديد الصف";
331
- readonly noDataToDisplay: "لا توجد بيانات للعرض";
332
- readonly likesCount: "عدد الإعجابات";
333
- readonly commentsCount: "عدد التعليقات";
334
- readonly viewsCount: "عدد المشاهدات";
335
- readonly sharesCount: "عدد المشاركات";
336
- readonly postTypeLabel: "نوع المنشور";
337
- readonly postTypePhoto: "صورة";
338
- readonly postTypeVideo: "فيديو";
339
- readonly postTypeCarousel: "شرائح";
340
- readonly showMore: "المزيد";
341
- readonly showLess: "أقل";
342
- readonly noMediaAvailable: "لا توجد وسائط";
343
- readonly commentAnalysis: "تحليل التعليقات";
344
- readonly commentAnalysisDisabled: "تحليل التعليقات (معطل)";
345
- readonly booster: "تعزيز";
346
- readonly boosterDisabled: "تعزيز (معطل)";
347
- readonly aiAnalysis: "تحليل الذكاء الاصطناعي";
348
- readonly aiAnalysisDisabled: "تحليل الذكاء الاصطناعي (معطل)";
349
- readonly openOnInstagram: "فتح في إنستاجرام";
350
- readonly openOnInstagramDisabled: "فتح في إنستاجرام (معطل)";
351
- };
352
- readonly en: {
353
- readonly noResults: "No results found";
354
- readonly suggestions: "Suggestions";
355
- readonly select: "Select";
356
- readonly noOptionsFound: "No options found";
357
- readonly search: "Search...";
358
- readonly clearAll: "Clear all";
359
- readonly selectDate: "Select date";
360
- readonly selectDateRange: "Select date range";
361
- readonly errorLoadingData: "Error loading data";
362
- readonly retry: "Retry";
363
- readonly remove: "Remove";
364
- readonly noUsersFound: "No users found";
365
- readonly goToPreviousPage: "Go to previous page";
366
- readonly goToNextPage: "Go to next page";
367
- readonly previous: "Previous";
368
- readonly next: "Next";
369
- readonly actions: "Actions";
370
- readonly copy: "Copy";
371
- readonly copied: "Copied";
372
- readonly confirm: "Confirm";
373
- readonly cancel: "Cancel";
374
- readonly areYouSure: "Are you sure?";
375
- readonly stepperLabel: "Steps";
376
- readonly stepCompleted: "Completed";
377
- readonly stepCurrent: "Current step";
378
- readonly stepPending: "Pending";
379
- readonly clearFilters: "Clear filters";
380
- readonly activeFilters: "Active filters";
381
- readonly goBack: "Go back";
382
- readonly gridView: "Grid view";
383
- readonly listView: "List view";
384
- readonly loading: "Loading...";
385
- readonly unexpectedError: "An unexpected error occurred";
386
- readonly selectAll: "Select all";
387
- readonly selectRow: "Select row";
388
- readonly noDataToDisplay: "No data to display";
389
- readonly likesCount: "Likes";
390
- readonly commentsCount: "Comments";
391
- readonly viewsCount: "Views";
392
- readonly sharesCount: "Shares";
393
- readonly postTypeLabel: "Post type";
394
- readonly postTypePhoto: "Photo";
395
- readonly postTypeVideo: "Video";
396
- readonly postTypeCarousel: "Carousel";
397
- readonly showMore: "More";
398
- readonly showLess: "Less";
399
- readonly noMediaAvailable: "No media available";
400
- readonly commentAnalysis: "Comment Analysis";
401
- readonly commentAnalysisDisabled: "Comment Analysis (disabled)";
402
- readonly booster: "Booster";
403
- readonly boosterDisabled: "Booster (disabled)";
404
- readonly aiAnalysis: "AI Analysis";
405
- readonly aiAnalysisDisabled: "AI Analysis (disabled)";
406
- readonly openOnInstagram: "Open on Instagram";
407
- readonly openOnInstagramDisabled: "Open on Instagram (disabled)";
408
- };
409
- };
410
- type UIStringKeys = keyof (typeof UI_STRINGS)['fa'];
411
- type UIStrings = Record<UIStringKeys, string>;
241
+ declare function getProvinceLabel(codeOrSlug: string, locale?: SupportedLocale): string;
242
+
412
243
  /**
413
- * Get UI strings for a given locale.
414
- * Falls back to 'fa' for unknown locales.
244
+ * Curated country list with trilingual labels + flag emoji.
245
+ *
246
+ * Scope: ISO 3166-1 alpha-2 codes for ~80 countries that recur in افکارسنجی
247
+ * and influencer dashboards we serve — neighbors of Iran, the Gulf, MENA,
248
+ * major Western markets, and Asian/African markets relevant to Persian-
249
+ * speaking audiences. The flag emoji is the regional-indicator pair for the
250
+ * code; modern OS fonts render it as a flag.
251
+ *
252
+ * This is NOT an exhaustive ISO 3166 dataset — for country-level analytics
253
+ * outside this scope, consumers should pass their own list to `CountryPicker`
254
+ * via the `options` prop.
415
255
  */
416
- declare function getUIStrings(locale?: SupportedLocale): UIStrings;
256
+
257
+ interface Country {
258
+ /** ISO 3166-1 alpha-2 code (uppercase). The canonical key. */
259
+ code: string;
260
+ /** Trilingual labels — fa is the canonical/native form. */
261
+ labels: Record<SupportedLocale, string>;
262
+ }
263
+ /** Convert an ISO 3166-1 alpha-2 code to its flag-emoji pair. */
264
+ declare function countryFlag(code: string): string;
265
+ declare const COUNTRIES: readonly Country[];
266
+ type CountryCode = (typeof COUNTRIES)[number]['code'];
267
+ /** Look up a country by ISO 3166-1 alpha-2 code. Returns undefined for unknown codes. */
268
+ declare function findCountry(code: string): Country | undefined;
269
+ /** Resolve the locale-appropriate label for a country code. */
270
+ declare function getCountryLabel(code: string, locale: SupportedLocale): string;
417
271
 
418
272
  /**
419
273
  * Standard size scale used across the design system.
@@ -465,8 +319,87 @@ declare namespace AccordionContent {
465
319
  var displayName: string;
466
320
  }
467
321
 
322
+ interface ActionTimelineItemData {
323
+ /** Stable identifier */
324
+ id: string;
325
+ /** Outcome of the action. Drives the marker colour/icon when `leading` isn't set. @default "info" */
326
+ status?: ActionStatusKey;
327
+ /** Primary text — actor + verb + target. */
328
+ title: React$1.ReactNode;
329
+ /** Optional one-line description under the title. */
330
+ description?: React$1.ReactNode;
331
+ /** Optional preview (comment text, error message, diff snippet). Rendered in a muted box. */
332
+ preview?: React$1.ReactNode;
333
+ /** Optional small tag next to the timestamp (e.g. "Instagram", "AI", "System"). */
334
+ tag?: React$1.ReactNode;
335
+ /** Optional trailing actions (buttons, dropdown). */
336
+ actions?: React$1.ReactNode;
337
+ /** When this action happened. Accepts Date | ISO string | epoch ms. */
338
+ timestamp: Date | string | number;
339
+ /** Override the leading marker — pass an `<Avatar />`, custom icon, etc. */
340
+ leading?: React$1.ReactNode;
341
+ }
342
+ type ActionTimelineDensity = 'compact' | 'default' | 'spacious';
343
+ type ActionTimelineGroupBy = 'none' | 'day';
344
+ interface ActionTimelineProps extends Omit<React$1.OlHTMLAttributes<HTMLOListElement>, 'children'> {
345
+ /** Data-driven item list. Mutually exclusive with `children`. */
346
+ items?: ActionTimelineItemData[];
347
+ /** Composition API — pass `<ActionTimelineItem>` children. */
348
+ children?: React$1.ReactNode;
349
+ /** Visual density @default "default" */
350
+ density?: ActionTimelineDensity;
351
+ /** Group adjacent items under sticky day headers */
352
+ groupBy?: ActionTimelineGroupBy;
353
+ /** Locale for timestamp formatting + status aria-labels @default "fa" */
354
+ locale?: SupportedLocale;
355
+ /** Hide the vertical connector line between items @default false */
356
+ hideConnector?: boolean;
357
+ /** Maximum items to render. When set and exceeded, caller is responsible for pagination UI. */
358
+ limit?: number;
359
+ /** Fires when an item is clicked (anywhere outside the `actions` slot) */
360
+ onItemSelect?: (item: ActionTimelineItemData, index: number) => void;
361
+ /** Empty state when items is empty / undefined and no children provided */
362
+ emptyState?: React$1.ReactNode;
363
+ }
364
+ interface ActionTimelineItemProps extends ActionTimelineItemData {
365
+ }
366
+ /**
367
+ * Optional composition wrapper. Use inside `<ActionTimeline>` instead of the
368
+ * `items` prop — ActionTimeline injects the position metadata automatically.
369
+ * Throws if rendered outside <ActionTimeline>.
370
+ */
371
+ declare function ActionTimelineItem(props: ActionTimelineItemProps): React$1.ReactElement;
372
+ declare const ActionTimeline: React$1.ForwardRefExoticComponent<ActionTimelineProps & React$1.RefAttributes<HTMLOListElement>>;
373
+
374
+ interface ActionTypeMeta {
375
+ /** CSS var fragment — read as `hsl(var(--action-type-foo))` */
376
+ token: string;
377
+ /** Lucide icon for the action */
378
+ icon: React$1.ComponentType<{
379
+ className?: string;
380
+ }>;
381
+ }
382
+ declare const ACTION_TYPE_META: Record<ActionTypeKey, ActionTypeMeta>;
383
+ declare const actionTypeChipVariants: (props?: ({
384
+ size?: "xs" | "sm" | "md" | "lg" | null | undefined;
385
+ variant?: "flat" | "soft" | "solid" | "outline" | null | undefined;
386
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
387
+ interface ActionTypeChipProps extends Omit<React$1.HTMLAttributes<HTMLSpanElement>, 'children'>, VariantProps<typeof actionTypeChipVariants> {
388
+ /** Which action the chip represents */
389
+ type: ActionTypeKey;
390
+ /** Show the localized label after the icon @default true */
391
+ showLabel?: boolean;
392
+ /** Show a counter next to the label (e.g., "Like ۴۲۵") */
393
+ count?: number;
394
+ /** Locale for default label + digit formatting @default "fa" */
395
+ locale?: SupportedLocale;
396
+ /** Override the label (otherwise uses `actionTypeLabels[locale][type]`) */
397
+ label?: React$1.ReactNode;
398
+ }
399
+ declare const ActionTypeChip: React$1.ForwardRefExoticComponent<ActionTypeChipProps & React$1.RefAttributes<HTMLSpanElement>>;
400
+
468
401
  declare const Alert: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
469
- variant?: "info" | "default" | "success" | "warning" | "destructive" | null | undefined;
402
+ variant?: "warning" | "success" | "info" | "default" | "destructive" | null | undefined;
470
403
  } & class_variance_authority_types.ClassProp) | undefined) => string> & React$1.RefAttributes<HTMLDivElement>>;
471
404
  declare const AlertTitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLHeadingElement> & React$1.RefAttributes<HTMLParagraphElement>>;
472
405
  declare const AlertDescription: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
@@ -718,19 +651,6 @@ declare namespace AspectRatio {
718
651
  var displayName: string;
719
652
  }
720
653
 
721
- declare function Avatar({ className, ...props }: React$1.ComponentProps<typeof AvatarPrimitive.Root>): react_jsx_runtime.JSX.Element;
722
- declare namespace Avatar {
723
- var displayName: string;
724
- }
725
- declare function AvatarImage({ className, ...props }: React$1.ComponentProps<typeof AvatarPrimitive.Image>): react_jsx_runtime.JSX.Element;
726
- declare namespace AvatarImage {
727
- var displayName: string;
728
- }
729
- declare function AvatarFallback({ className, ...props }: React$1.ComponentProps<typeof AvatarPrimitive.Fallback>): react_jsx_runtime.JSX.Element;
730
- declare namespace AvatarFallback {
731
- var displayName: string;
732
- }
733
-
734
654
  declare const avatarGroupVariants: (props?: ({
735
655
  size?: "sm" | "md" | "lg" | null | undefined;
736
656
  } & class_variance_authority_types.ClassProp) | undefined) => string;
@@ -747,19 +667,8 @@ interface AvatarGroupProps extends React$1.HTMLAttributes<HTMLDivElement>, Varia
747
667
  }
748
668
  declare const AvatarGroup: React$1.ForwardRefExoticComponent<AvatarGroupProps & React$1.RefAttributes<HTMLDivElement>>;
749
669
 
750
- declare const badgeVariants: (props?: ({
751
- variant?: "default" | "success" | "warning" | "destructive" | "secondary" | "outline" | "brand" | null | undefined;
752
- size?: "xs" | "sm" | "md" | "lg" | "small" | "tiny" | "large" | null | undefined;
753
- dot?: boolean | null | undefined;
754
- } & class_variance_authority_types.ClassProp) | undefined) => string;
755
- interface BadgeProps extends React$1.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeVariants> {
756
- dot?: boolean;
757
- dotPosition?: 'start' | 'end';
758
- }
759
- declare const Badge: React$1.ForwardRefExoticComponent<BadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
760
-
761
670
  declare const bannerVariants: (props?: ({
762
- variant?: "info" | "success" | "warning" | "destructive" | "neutral" | null | undefined;
671
+ variant?: "neutral" | "warning" | "success" | "info" | "destructive" | null | undefined;
763
672
  } & class_variance_authority_types.ClassProp) | undefined) => string;
764
673
  interface BannerProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof bannerVariants> {
765
674
  /** Whether the banner can be dismissed */
@@ -804,43 +713,6 @@ declare namespace BreadcrumbEllipsis {
804
713
  var displayName: string;
805
714
  }
806
715
 
807
- type ButtonVariantProps = VariantProps<typeof buttonVariants>;
808
- declare const buttonVariants: (props?: ({
809
- variant?: "link" | "text" | "default" | "warning" | "destructive" | "primary" | "secondary" | "outline" | "dashed" | "danger" | "ghost" | null | undefined;
810
- block?: boolean | null | undefined;
811
- size?: "xs" | "sm" | "md" | "lg" | "xl" | "default" | "icon" | null | undefined;
812
- disabled?: boolean | null | undefined;
813
- rounded?: boolean | null | undefined;
814
- } & class_variance_authority_types.ClassProp) | undefined) => string;
815
- type LoadingVariantProps = VariantProps<typeof loadingVariants>;
816
- declare const loadingVariants: (props?: ({
817
- variant?: "link" | "text" | "default" | "warning" | "destructive" | "primary" | "secondary" | "outline" | "dashed" | "danger" | "ghost" | null | undefined;
818
- loading?: boolean | "default" | null | undefined;
819
- } & class_variance_authority_types.ClassProp) | undefined) => string;
820
- interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'>, Omit<ButtonVariantProps, 'disabled'>, Omit<LoadingVariantProps, 'variant'> {
821
- asChild?: boolean;
822
- type?: ButtonVariantProps['variant'] | React.ButtonHTMLAttributes<HTMLButtonElement>['type'];
823
- htmlType?: React.ButtonHTMLAttributes<HTMLButtonElement>['type'];
824
- icon?: React.ReactNode;
825
- iconStart?: React.ReactNode;
826
- iconEnd?: React.ReactNode;
827
- /** @deprecated Use iconStart instead */
828
- iconLeft?: React.ReactNode;
829
- /** @deprecated Use iconEnd instead */
830
- iconRight?: React.ReactNode;
831
- isLoading?: boolean;
832
- /** @deprecated Use `isLoading` instead */
833
- loading?: boolean;
834
- block?: boolean;
835
- rounded?: boolean;
836
- }
837
- declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
838
-
839
- interface SeparatorProps extends React$1.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root> {
840
- children?: React$1.ReactNode;
841
- }
842
- declare const Separator: React$1.ForwardRefExoticComponent<SeparatorProps & React$1.RefAttributes<HTMLDivElement>>;
843
-
844
716
  declare const buttonGroupVariants: (props?: ({
845
717
  orientation?: "horizontal" | "vertical" | null | undefined;
846
718
  } & class_variance_authority_types.ClassProp) | undefined) => string;
@@ -859,30 +731,6 @@ declare namespace ButtonGroupSeparator {
859
731
  var displayName: string;
860
732
  }
861
733
 
862
- type CalendarProps = {
863
- usePersianCalendar?: boolean;
864
- className?: string;
865
- classNames?: Partial<Record<string, string>>;
866
- showOutsideDays?: boolean;
867
- } & (React$1.ComponentProps<typeof DayPicker> | React$1.ComponentProps<typeof DayPicker$1>);
868
- declare function Calendar({ className, classNames, showOutsideDays, usePersianCalendar, ...props }: CalendarProps): react_jsx_runtime.JSX.Element;
869
- declare namespace Calendar {
870
- var displayName: string;
871
- }
872
-
873
- declare const cardVariants: (props?: ({
874
- variant?: "default" | "outlined" | "elevated" | "interactive" | "glass" | null | undefined;
875
- size?: "sm" | "md" | "lg" | null | undefined;
876
- } & class_variance_authority_types.ClassProp) | undefined) => string;
877
- interface CardProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {
878
- }
879
- declare const Card: React$1.ForwardRefExoticComponent<CardProps & React$1.RefAttributes<HTMLDivElement>>;
880
- declare const CardHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
881
- declare const CardTitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLHeadingElement> & React$1.RefAttributes<HTMLParagraphElement>>;
882
- declare const CardDescription: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
883
- declare const CardContent: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
884
- declare const CardFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
885
-
886
734
  type CarouselApi = UseEmblaCarouselType[1];
887
735
  type UseCarouselParameters = Parameters<typeof useEmblaCarousel>;
888
736
  type CarouselOptions = UseCarouselParameters[0];
@@ -949,23 +797,6 @@ declare namespace CollapsibleContent {
949
797
  var displayName: string;
950
798
  }
951
799
 
952
- declare const Dialog: React$1.FC<DialogPrimitive.DialogProps>;
953
- declare const DialogTrigger: React$1.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
954
- declare const DialogPortal: React$1.FC<DialogPrimitive.DialogPortalProps>;
955
- declare const DialogClose: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogCloseProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
956
- declare const DialogOverlay: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
957
- declare const DialogContent: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
958
- declare const DialogHeader: {
959
- ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
960
- displayName: string;
961
- };
962
- declare const DialogFooter: {
963
- ({ className, ...props }: React$1.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
964
- displayName: string;
965
- };
966
- declare const DialogTitle: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React$1.RefAttributes<HTMLHeadingElement>, "ref"> & React$1.RefAttributes<HTMLHeadingElement>>;
967
- declare const DialogDescription: React$1.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React$1.RefAttributes<HTMLParagraphElement>, "ref"> & React$1.RefAttributes<HTMLParagraphElement>>;
968
-
969
800
  declare function Command({ className, ...props }: React$1.ComponentProps<typeof Command$1>): react_jsx_runtime.JSX.Element;
970
801
  declare namespace Command {
971
802
  var displayName: string;
@@ -1007,6 +838,457 @@ declare namespace CommandShortcut {
1007
838
  var displayName: string;
1008
839
  }
1009
840
 
841
+ interface CommandPaletteItem {
842
+ /** Stable identifier. Used as the cmdk value and the recents key — MUST be unique across the whole items list. */
843
+ id: string;
844
+ /** Visible label. */
845
+ label: string;
846
+ /** Dimmer description shown under the label. */
847
+ description?: string;
848
+ /** Icon displayed at the start of the row. */
849
+ icon?: LucideIcon | React$1.ComponentType<{
850
+ className?: string;
851
+ }>;
852
+ /** Group heading under which this item appears. Items without a group are rendered in the root group. */
853
+ group?: string;
854
+ /**
855
+ * Keyboard-shortcut display, using the same grammar as {@link HotkeyCombo}
856
+ * (e.g. 'mod+d'). The palette only displays it — binding the global shortcut
857
+ * is the caller's responsibility via {@link useHotkeys} at the host component.
858
+ */
859
+ shortcut?: string;
860
+ /** Extra search tokens not visible in the label (e.g., English aliases, acronyms, tag words). */
861
+ keywords?: string[];
862
+ /** Callback when item is selected. Palette closes automatically afterwards. */
863
+ onSelect: () => void;
864
+ /** Prevents selection + dims the row. */
865
+ disabled?: boolean;
866
+ }
867
+ interface CommandPaletteRecentsConfig {
868
+ /** Persistence key. Default: `'parto:cmdk:recents'`. Namespace by app if you mount multiple palettes. */
869
+ key?: string;
870
+ /** Max items to remember. Default: 5. */
871
+ max?: number;
872
+ /** Header label for the recents group. Default: locale-appropriate ('اخیر'/'Recent'). */
873
+ label?: string;
874
+ }
875
+ interface CommandPaletteProps {
876
+ /** Controlled open state. If omitted, palette manages its own state. */
877
+ open?: boolean;
878
+ /** Fires on both open and close. */
879
+ onOpenChange?: (open: boolean) => void;
880
+ /** Items to display. Grouped by `item.group` in insertion order. */
881
+ items: CommandPaletteItem[];
882
+ /**
883
+ * Global keyboard shortcut to toggle the palette. Default: `'mod+k'`.
884
+ * Pass `false` to disable the global listener (useful when wiring your own).
885
+ */
886
+ shortcut?: HotkeyCombo | false;
887
+ /** Placeholder for the input. Defaults to a locale-appropriate string. */
888
+ placeholder?: string;
889
+ /** Shown inside `<CommandEmpty>` when there are no matches. */
890
+ emptyMessage?: string;
891
+ /** Screen-reader title (visually hidden). */
892
+ title?: string;
893
+ /** Screen-reader description (visually hidden). */
894
+ description?: string;
895
+ /** Locale for default strings + Persian-aware fuzzy matching. */
896
+ locale?: SupportedLocale;
897
+ /**
898
+ * Remember recently-selected items in localStorage and surface them as a top
899
+ * group when the search input is empty. Pass `false` to disable. Default: on.
900
+ */
901
+ recents?: CommandPaletteRecentsConfig | false;
902
+ /** Extra class for the dialog content. */
903
+ className?: string;
904
+ }
905
+ declare function CommandPalette({ open: controlledOpen, onOpenChange, items, shortcut, placeholder, emptyMessage, title, description, locale, recents: recentsConfig, className, }: CommandPaletteProps): react_jsx_runtime.JSX.Element;
906
+ declare namespace CommandPalette {
907
+ var displayName: string;
908
+ }
909
+
910
+ interface PartoRadarChartProps {
911
+ /** Data: [{ subject: "سرعت", series1: 80, series2: 60 }] */
912
+ data: Array<Record<string, any>>;
913
+ /** Keys for each radar series */
914
+ dataKeys: string[];
915
+ /** Field name used for angle axis labels (default: 'subject') */
916
+ indexBy?: string;
917
+ /** Radar fill opacity */
918
+ fillOpacity?: number;
919
+ /** Radar stroke width */
920
+ strokeWidth?: number;
921
+ /** Show dots on vertices */
922
+ showDots?: boolean;
923
+ /** Dot radius */
924
+ dotRadius?: number;
925
+ /** Grid shape */
926
+ gridType?: 'polygon' | 'circle';
927
+ /** Chart margins */
928
+ margin?: {
929
+ top?: number;
930
+ right?: number;
931
+ bottom?: number;
932
+ left?: number;
933
+ };
934
+ /** Custom tooltip formatter */
935
+ tooltipFormatter?: (name: string, value: number) => React$1.ReactNode;
936
+ /**
937
+ * Locale for digit formatting in tooltips and angle-axis labels. fa/ar
938
+ * convert embedded digits to Persian/Arabic; en uses Latin. Default: 'fa'.
939
+ */
940
+ locale?: SupportedLocale;
941
+ className?: string;
942
+ isLoading?: boolean;
943
+ ariaLabel?: string;
944
+ }
945
+ declare const PartoRadarChart: React$1.ForwardRefExoticComponent<PartoRadarChartProps & React$1.RefAttributes<HTMLDivElement>>;
946
+
947
+ interface ComparisonMetric {
948
+ /** Unique key — used to look up values in each entity. */
949
+ key: string;
950
+ /** Human-readable label shown on the radar axis + tooltip. */
951
+ label: string;
952
+ /**
953
+ * True means a higher value is better (the default for most scores).
954
+ * Set to false for inverted metrics like error rate or response time.
955
+ * @default true
956
+ */
957
+ higherIsBetter?: boolean;
958
+ /**
959
+ * Informational — maximum expected value for this metric. Not used by the
960
+ * radar geometry (auto-scaled); used by the tooltip for "x / max" display.
961
+ */
962
+ max?: number;
963
+ }
964
+ interface ComparisonEntity {
965
+ /** Unique id — used as the `dataKey` for the radar series. */
966
+ key: string;
967
+ /** Display name in the legend. */
968
+ label: string;
969
+ /** Metric key → numeric value. Missing keys are treated as 0. */
970
+ values: Record<string, number>;
971
+ /** Optional custom color — defaults to the chart palette. */
972
+ color?: string;
973
+ }
974
+ interface ComparisonWinner {
975
+ /** Entity key (or null for a tie). */
976
+ winnerKey: string | null;
977
+ /** All entity keys tied at the top. Length >=1 when there is data; empty if no entities. */
978
+ topKeys: string[];
979
+ /** Top value for this metric (after higherIsBetter direction). */
980
+ topValue: number;
981
+ }
982
+ /**
983
+ * For each metric, compute the entity that "wins" (highest value, or lowest
984
+ * if `higherIsBetter: false`). Ties return winnerKey=null.
985
+ */
986
+ declare function computeComparisonWinners(metrics: ComparisonMetric[], entities: ComparisonEntity[]): Record<string, ComparisonWinner>;
987
+ /** Count outright wins (no ties) per entity. */
988
+ declare function countComparisonWins(winners: Record<string, ComparisonWinner>): Record<string, number>;
989
+ interface ComparisonRadarProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'title'> {
990
+ /** Metric axes of the radar. Order matters — these render clockwise from the top. */
991
+ metrics: ComparisonMetric[];
992
+ /** Entities being compared (typically 2-5). */
993
+ entities: ComparisonEntity[];
994
+ /** Annotate axis labels with a crown for the winner @default true */
995
+ showWinnerMarkers?: boolean;
996
+ /** Show the rich legend with win counts above the chart @default true */
997
+ showLegend?: boolean;
998
+ /** Card title */
999
+ title?: React$1.ReactNode;
1000
+ /** Short description below title */
1001
+ description?: React$1.ReactNode;
1002
+ /** Chart height in pixels @default 340 */
1003
+ chartHeight?: number;
1004
+ /** Loading state */
1005
+ isLoading?: boolean;
1006
+ /** Locale @default "fa" */
1007
+ locale?: SupportedLocale;
1008
+ /**
1009
+ * Custom radar props — pass-through to PartoRadarChart (margin, fillOpacity,
1010
+ * gridType, …). Avoid setting `data` / `dataKeys` / `indexBy` / `isLoading`.
1011
+ */
1012
+ radarProps?: Omit<React$1.ComponentProps<typeof PartoRadarChart>, 'data' | 'dataKeys' | 'indexBy' | 'isLoading'>;
1013
+ }
1014
+ declare const ComparisonRadar: React$1.ForwardRefExoticComponent<ComparisonRadarProps & React$1.RefAttributes<HTMLDivElement>>;
1015
+
1016
+ type NotificationSeverity = 'info' | 'warning' | 'destructive' | 'success' | 'critical';
1017
+ interface NotificationItem {
1018
+ /** Stable id — required for `onMarkRead` / `onDismiss` to target a specific item. */
1019
+ id: string;
1020
+ /** Short headline. Keep under ~60 chars to avoid wrapping beyond two lines. */
1021
+ title: string;
1022
+ /** Longer body text. Truncated to 3 lines by default. */
1023
+ body?: string;
1024
+ /** ISO date string, Date instance, or epoch ms. */
1025
+ timestamp: string | number | Date;
1026
+ /** Severity drives the side-border + dot color. Defaults to `'info'`. */
1027
+ severity?: NotificationSeverity;
1028
+ /** Optional icon — replaces the severity dot when supplied. */
1029
+ icon?: LucideIcon;
1030
+ /** `true` renders the item in a read/dim state (no unread dot, lower contrast). */
1031
+ read?: boolean;
1032
+ /**
1033
+ * Row-level callback — fires when the item body is clicked. Typical use:
1034
+ * navigate to the source. The palette closes afterwards.
1035
+ */
1036
+ onSelect?: () => void;
1037
+ /** Inline action button rendered inside the row (e.g., "Approve", "Open"). */
1038
+ action?: {
1039
+ label: string;
1040
+ onClick: () => void;
1041
+ };
1042
+ }
1043
+ interface NotificationFilter {
1044
+ /** Stable key for the tab. */
1045
+ key: string;
1046
+ /** Visible label. */
1047
+ label: string;
1048
+ /** Predicate — items returning `true` are shown when this filter is active. */
1049
+ predicate: (item: NotificationItem) => boolean;
1050
+ }
1051
+ interface NotificationCenterProps {
1052
+ /** Items to render. Consumer owns the array (mark-as-read / dismiss happen in your store). */
1053
+ items: NotificationItem[];
1054
+ /** Fires when user clicks an unread item, or the "mark read" action on it. */
1055
+ onMarkRead?: (id: string) => void;
1056
+ /** Fires when user clicks "mark all read". */
1057
+ onMarkAllRead?: () => void;
1058
+ /** Fires when user clicks the × on an item. If absent, dismiss is hidden. */
1059
+ onDismiss?: (id: string) => void;
1060
+ /** Optional tabs. First filter is active by default unless `defaultFilter` supplied. */
1061
+ filters?: NotificationFilter[];
1062
+ /** Key of the filter active on first render. */
1063
+ defaultFilter?: string;
1064
+ /** Optional per-filter active control. When set, tabs become controlled. */
1065
+ activeFilter?: string;
1066
+ onFilterChange?: (key: string) => void;
1067
+ /** Max CSS height of the scrollable list. Default `'420px'`. */
1068
+ maxHeight?: string;
1069
+ /** Locale for label strings + digit formatting. */
1070
+ locale?: SupportedLocale;
1071
+ /** Controlled open. */
1072
+ open?: boolean;
1073
+ onOpenChange?: (open: boolean) => void;
1074
+ /** Custom empty message. */
1075
+ emptyMessage?: string;
1076
+ /** Aria-label on the bell trigger. */
1077
+ triggerLabel?: string;
1078
+ /** Extra class on the trigger button. */
1079
+ triggerClassName?: string;
1080
+ /** Extra class on the popover content. */
1081
+ className?: string;
1082
+ /** Override relative-time formatter (default uses `formatRelativeTime` — Persian-biased). */
1083
+ formatTime?: (date: Date) => string;
1084
+ }
1085
+ declare function NotificationCenter({ items, onMarkRead, onMarkAllRead, onDismiss, filters, defaultFilter, activeFilter: controlledFilter, onFilterChange, maxHeight, locale, open: controlledOpen, onOpenChange, emptyMessage, triggerLabel, triggerClassName, className, formatTime, }: NotificationCenterProps): react_jsx_runtime.JSX.Element;
1086
+ declare namespace NotificationCenter {
1087
+ var displayName: string;
1088
+ }
1089
+
1090
+ declare const siteHeaderVariants: (props?: ({
1091
+ size?: "sm" | "md" | "lg" | null | undefined;
1092
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1093
+ interface SiteHeaderProps extends React$1.HTMLAttributes<HTMLElement>, VariantProps<typeof siteHeaderVariants> {
1094
+ }
1095
+ /**
1096
+ * Opinionated app-shell header for multi-screen dashboards. Compose with the
1097
+ * sub-components: `<SiteHeaderStart>` / `<SiteHeaderEnd>` plus the small
1098
+ * primitives (`Breadcrumb`, `SiteHeaderTitle`, `SiteHeaderSubtitle`,
1099
+ * `SiteHeaderActions`, `SiteHeaderSeparator`).
1100
+ *
1101
+ * For a low-level prop-based layout use {@link AppBar} instead.
1102
+ */
1103
+ declare const SiteHeader: React$1.ForwardRefExoticComponent<SiteHeaderProps & React$1.RefAttributes<HTMLElement>>;
1104
+ /** Inline-start slot. Holds breadcrumb + title stack. Grows to fill space. */
1105
+ declare const SiteHeaderStart: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
1106
+ /** Inline-end slot. Holds actions + notifications + user menu. Shrinks to content. */
1107
+ declare const SiteHeaderEnd: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
1108
+ /** Main page title. Single line, truncates. */
1109
+ declare const SiteHeaderTitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLHeadingElement> & React$1.RefAttributes<HTMLHeadingElement>>;
1110
+ /** Optional tagline under the title. Single line, truncates. */
1111
+ declare const SiteHeaderSubtitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
1112
+ /**
1113
+ * Stack helper — wraps breadcrumb / title / subtitle vertically. Use inside
1114
+ * `SiteHeaderStart` when you want a conventional "breadcrumb-above-title" layout.
1115
+ */
1116
+ declare const SiteHeaderTitleGroup: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
1117
+ /** Group container for icon-only action buttons. */
1118
+ declare const SiteHeaderActions: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
1119
+ /** Vertical separator between action clusters. */
1120
+ declare const SiteHeaderSeparator: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLSpanElement> & React$1.RefAttributes<HTMLSpanElement>>;
1121
+
1122
+ interface UserMenuUser {
1123
+ name: string;
1124
+ email?: string;
1125
+ avatar?: string;
1126
+ /** Fallback initials when the avatar image is missing or fails to load. */
1127
+ avatarFallback?: string;
1128
+ /** Optional role / org label shown under the name. */
1129
+ role?: string;
1130
+ }
1131
+ /** Discriminated item union for the dropdown body. */
1132
+ type UserMenuItem = {
1133
+ type?: 'item';
1134
+ label: string;
1135
+ icon?: React$1.ComponentType<{
1136
+ className?: string;
1137
+ }>;
1138
+ /** Hotkey string passed to `formatHotkey`, e.g. `'mod+,'`. */
1139
+ shortcut?: string;
1140
+ onSelect: () => void;
1141
+ destructive?: boolean;
1142
+ disabled?: boolean;
1143
+ } | {
1144
+ type: 'separator';
1145
+ } | {
1146
+ type: 'label';
1147
+ label: string;
1148
+ } | {
1149
+ type: 'submenu';
1150
+ label: string;
1151
+ icon?: React$1.ComponentType<{
1152
+ className?: string;
1153
+ }>;
1154
+ items: UserMenuItem[];
1155
+ };
1156
+ interface UserMenuProps {
1157
+ /** The current user shown in the dropdown header + trigger avatar. */
1158
+ user: UserMenuUser;
1159
+ /** Dropdown rows. Use the discriminated union for item / separator / label / submenu. */
1160
+ items: UserMenuItem[];
1161
+ /** Controlled open. */
1162
+ open?: boolean;
1163
+ onOpenChange?: (open: boolean) => void;
1164
+ /** Locale for default labels. Defaults to `'fa'`. */
1165
+ locale?: SupportedLocale;
1166
+ /** Show email + role block in the dropdown header. Default `true`. */
1167
+ showUserHeader?: boolean;
1168
+ /** Show the name next to the avatar on the trigger (hidden on mobile by default). Default `false`. */
1169
+ showNameInTrigger?: boolean;
1170
+ /** Trigger size. */
1171
+ size?: 'sm' | 'md';
1172
+ /** Extra class on the trigger button. */
1173
+ triggerClassName?: string;
1174
+ /** Extra class on the dropdown content. */
1175
+ className?: string;
1176
+ /** `data-slot` override (useful when nesting inside another component's analytics tree). */
1177
+ 'data-slot'?: string;
1178
+ }
1179
+ declare const UserMenu: React$1.ForwardRefExoticComponent<UserMenuProps & React$1.RefAttributes<HTMLButtonElement>>;
1180
+
1181
+ interface RouteProgressProps extends React$1.HTMLAttributes<HTMLDivElement> {
1182
+ /**
1183
+ * Controlled visibility. If omitted, the component stays mounted but hidden —
1184
+ * fire the `start`/`finish` methods on the ref instead.
1185
+ */
1186
+ active?: boolean;
1187
+ /** Progress value (0–1). Default: auto-trickle while active. */
1188
+ value?: number;
1189
+ /**
1190
+ * How long to trickle before the bar caps out near the end (matches
1191
+ * NProgress-style UX). Default: 800ms per step.
1192
+ */
1193
+ trickleInterval?: number;
1194
+ /**
1195
+ * Value the bar tops out at while waiting for `active=false` (so the page
1196
+ * change still feels snappy). Default: 0.9 — never completes automatically.
1197
+ */
1198
+ trickleCap?: number;
1199
+ /** Height in pixels. Default: 2. */
1200
+ height?: number;
1201
+ /** Position. `'top'` (default) sticks to the top edge; `'bottom'` for e.g. drawers. */
1202
+ position?: 'top' | 'bottom';
1203
+ }
1204
+ interface RouteProgressHandle {
1205
+ /** Reset + show the bar. */
1206
+ start: () => void;
1207
+ /** Snap to 100% then hide after a short fade-out. */
1208
+ finish: () => void;
1209
+ }
1210
+ /**
1211
+ * Thin gradient progress bar for route/page transitions. Three usage modes:
1212
+ *
1213
+ * 1. **Controlled** — pass `active={true/false}` and let the component trickle
1214
+ * automatically while `active` is true:
1215
+ * ```tsx
1216
+ * <RouteProgress active={isNavigating} />
1217
+ * ```
1218
+ *
1219
+ * 2. **Imperative** — call `start()` / `finish()` on the ref:
1220
+ * ```tsx
1221
+ * const ref = useRef<RouteProgressHandle>(null)
1222
+ * ref.current?.start()
1223
+ * // ... navigate ...
1224
+ * ref.current?.finish()
1225
+ * ```
1226
+ *
1227
+ * 3. **Fully controlled value** — pass a numeric `value` in `[0, 1]` and skip
1228
+ * `active` entirely. Useful for file uploads or long-running jobs.
1229
+ */
1230
+ declare const RouteProgress: React$1.ForwardRefExoticComponent<RouteProgressProps & React$1.RefAttributes<RouteProgressHandle>>;
1231
+
1232
+ type NavMatchStrategy = 'exact' | 'prefix';
1233
+ interface NavTreeContextValue {
1234
+ /** Current pathname — used to decide which `NavItem.href` is active. */
1235
+ activePath: string;
1236
+ /** Match strategy. Default `'prefix'` matches `/clusters` for both `/clusters` and `/clusters/42`. */
1237
+ matchStrategy: NavMatchStrategy;
1238
+ }
1239
+ declare function useNavTree(): NavTreeContextValue;
1240
+ interface NavTreeProviderProps {
1241
+ /** Current pathname. For Next.js, pass `usePathname()`. */
1242
+ activePath: string;
1243
+ /** How NavItem `href` matches `activePath`. Default: `'prefix'`. */
1244
+ matchStrategy?: NavMatchStrategy;
1245
+ children: React$1.ReactNode;
1246
+ }
1247
+ declare function NavTreeProvider({ activePath, matchStrategy, children }: NavTreeProviderProps): react_jsx_runtime.JSX.Element;
1248
+ /** Outer container. Mostly a semantic `<nav>` wrapper — accepts any children. */
1249
+ declare const NavTree: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLElement> & React$1.RefAttributes<HTMLElement>>;
1250
+ interface NavGroupProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'role'> {
1251
+ /** Visible group heading. Clickable if `collapsible` (default true). */
1252
+ heading?: React$1.ReactNode;
1253
+ /** Whether the header toggles visibility of children. Default `true` if `heading` is set. */
1254
+ collapsible?: boolean;
1255
+ /** Initial open state (uncontrolled). Default `true`. */
1256
+ defaultOpen?: boolean;
1257
+ /** Controlled open state. */
1258
+ open?: boolean;
1259
+ onOpenChange?: (open: boolean) => void;
1260
+ }
1261
+ declare const NavGroup: React$1.ForwardRefExoticComponent<NavGroupProps & React$1.RefAttributes<HTMLDivElement>>;
1262
+ declare const NavSeparator: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLHRElement> & React$1.RefAttributes<HTMLHRElement>>;
1263
+ declare const navItemVariants: (props?: ({
1264
+ size?: "sm" | "md" | null | undefined;
1265
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
1266
+ interface NavItemBaseProps extends VariantProps<typeof navItemVariants> {
1267
+ /** Link target. If set, NavItem renders as `<a>`. */
1268
+ href?: string;
1269
+ /** Click handler. If set (and `href` not set), NavItem renders as `<button>`. */
1270
+ onClick?: React$1.MouseEventHandler<HTMLElement>;
1271
+ /** Leading icon. */
1272
+ icon?: React$1.ComponentType<{
1273
+ className?: string;
1274
+ }>;
1275
+ /** Optional trailing badge (count, "new", etc.). */
1276
+ badge?: React$1.ReactNode;
1277
+ /** Custom `data-active` override. Use to short-circuit path matching. */
1278
+ active?: boolean;
1279
+ /** Skip the active-cascade report to parent (useful for informational items). */
1280
+ skipActiveReport?: boolean;
1281
+ /** Render-as override — passes all props to the given component. */
1282
+ asChild?: boolean;
1283
+ /** Disables interaction + dims the row. */
1284
+ disabled?: boolean;
1285
+ /** External link hint — opens in a new tab with `rel="noopener noreferrer"`. */
1286
+ external?: boolean;
1287
+ }
1288
+ interface NavItemProps extends NavItemBaseProps, Omit<React$1.HTMLAttributes<HTMLElement>, 'onClick'> {
1289
+ }
1290
+ declare const NavItem: React$1.ForwardRefExoticComponent<NavItemProps & React$1.RefAttributes<HTMLElement>>;
1291
+
1010
1292
  interface CommentTag {
1011
1293
  title: string;
1012
1294
  probability: number;
@@ -1139,6 +1421,78 @@ interface CopyButtonProps extends Omit<ButtonProps, 'onClick'> {
1139
1421
  }
1140
1422
  declare const CopyButton: React$1.ForwardRefExoticComponent<CopyButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
1141
1423
 
1424
+ type CriterionTierKey = 'excellent' | 'good' | 'moderate' | 'poor' | 'critical';
1425
+ declare const CRITERION_TIER_KEYS: readonly CriterionTierKey[];
1426
+ interface CriterionTierThresholds {
1427
+ /** Minimum score for "excellent" @default 80 */
1428
+ excellent: number;
1429
+ /** Minimum score for "good" @default 60 */
1430
+ good: number;
1431
+ /** Minimum score for "moderate" @default 40 */
1432
+ moderate: number;
1433
+ /** Minimum score for "poor" @default 20 (below → "critical") */
1434
+ poor: number;
1435
+ }
1436
+ declare const DEFAULT_CRITERION_THRESHOLDS: CriterionTierThresholds;
1437
+ /**
1438
+ * Auto-classify a score into one of the 5 canonical tiers based on thresholds.
1439
+ * Assumes score is normalized to [0, max]; will return a tier even if score
1440
+ * is out of range (clamped behaviour).
1441
+ */
1442
+ declare function getCriterionTier(score: number, max?: number, thresholds?: CriterionTierThresholds): CriterionTierKey;
1443
+ interface CriterionInputSpec {
1444
+ /** Short label for the input (e.g., "نرخ تعامل") */
1445
+ label?: React$1.ReactNode;
1446
+ /** Displayed value (e.g., "۳.۲٪", "+۱۲۰ فالوور", "۵۰۰ کلمه") */
1447
+ value: React$1.ReactNode;
1448
+ }
1449
+ interface CriterionTrend {
1450
+ /** Delta in points (not percent). Positive = higher score than baseline. */
1451
+ delta: number;
1452
+ /** Optional label describing the baseline (e.g., "نسبت به ماه قبل") */
1453
+ label?: React$1.ReactNode;
1454
+ }
1455
+ interface CriterionScoreCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
1456
+ /** Name of the criterion (e.g., "نرخ تعامل") */
1457
+ name: React$1.ReactNode;
1458
+ /** Short description of how the score is computed */
1459
+ description?: React$1.ReactNode;
1460
+ /** Computed score */
1461
+ score: number;
1462
+ /** Max of the score scale @default 100 */
1463
+ max?: number;
1464
+ /**
1465
+ * Weight in a composite score (0..1). Rendered as "۶۰٪" badge in the header.
1466
+ * When weight=0, the badge still renders — pass `undefined` to hide it.
1467
+ */
1468
+ weight?: number;
1469
+ /** Raw input that produced the score (for transparency) */
1470
+ input?: CriterionInputSpec;
1471
+ /** Change vs a baseline, shown next to the score */
1472
+ trend?: CriterionTrend;
1473
+ /**
1474
+ * Tier override. When omitted, auto-computed from `score` + `max` + thresholds.
1475
+ */
1476
+ tier?: CriterionTierKey;
1477
+ /** Show a small "≥80 عالی · ≥60 خوب · ..." hint row @default false */
1478
+ showThresholdHint?: boolean;
1479
+ /** Custom tier thresholds (expressed for 0-100; scaled to `max` internally) */
1480
+ tierThresholds?: CriterionTierThresholds;
1481
+ /** Visual size @default "md" */
1482
+ size?: 'sm' | 'md' | 'lg';
1483
+ /**
1484
+ * Layout orientation:
1485
+ * - `default` — header with name+weight, big score + trend, input/description/hint rows
1486
+ * - `compact` — single row name + score, for list/table usage
1487
+ */
1488
+ layout?: 'default' | 'compact';
1489
+ /** Locale for default strings + digits @default "fa" */
1490
+ locale?: SupportedLocale;
1491
+ /** Hide the horizontal progress bar @default false */
1492
+ hideBar?: boolean;
1493
+ }
1494
+ declare const CriterionScoreCard: React$1.ForwardRefExoticComponent<CriterionScoreCardProps & React$1.RefAttributes<HTMLDivElement>>;
1495
+
1142
1496
  interface DatePickerProps {
1143
1497
  /**
1144
1498
  * The selected date range
@@ -1367,10 +1721,36 @@ declare const EmptyTitle: React$1.ForwardRefExoticComponent<Omit<React$1.Detaile
1367
1721
  declare const EmptyDescription: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, "ref"> & React$1.RefAttributes<HTMLParagraphElement>>;
1368
1722
  declare const EmptyAction: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
1369
1723
 
1370
- interface ErrorStateProps extends React$1.HTMLAttributes<HTMLDivElement> {
1371
- /** Error message displayed below the icon */
1372
- message?: string;
1373
- /** Callback to trigger a retry when provided, shows a retry button */
1724
+ /**
1725
+ * SVG illustrations for empty / error / forbidden / first-run / no-results
1726
+ * states. All use `currentColor` so consumers can color them via
1727
+ * `text-foreground-muted` (default) or any token class. RTL-safe no
1728
+ * directional cues built in.
1729
+ *
1730
+ * Usage with the Empty primitive:
1731
+ *
1732
+ * <Empty>
1733
+ * <NoResultsIllustration className="size-32 text-foreground-muted" />
1734
+ * <EmptyTitle>نتیجه‌ای یافت نشد</EmptyTitle>
1735
+ * <EmptyDescription>عبارت دیگری امتحان کنید یا فیلترها را پاک کنید</EmptyDescription>
1736
+ * </Empty>
1737
+ *
1738
+ * The illustrations sit at ~120×120 viewBox and scale with `size-*` classes.
1739
+ * Stroke-only line work keeps them theme-agnostic (no tinting needed for
1740
+ * dark mode) and tarball-cheap (each ~600 bytes after gzip).
1741
+ */
1742
+
1743
+ type SVGProps = React$1.SVGProps<SVGSVGElement>;
1744
+ declare const NoResultsIllustration: React$1.ForwardRefExoticComponent<Omit<SVGProps, "ref"> & React$1.RefAttributes<SVGSVGElement>>;
1745
+ declare const NoDataIllustration: React$1.ForwardRefExoticComponent<Omit<SVGProps, "ref"> & React$1.RefAttributes<SVGSVGElement>>;
1746
+ declare const FirstRunIllustration: React$1.ForwardRefExoticComponent<Omit<SVGProps, "ref"> & React$1.RefAttributes<SVGSVGElement>>;
1747
+ declare const ErrorIllustration: React$1.ForwardRefExoticComponent<Omit<SVGProps, "ref"> & React$1.RefAttributes<SVGSVGElement>>;
1748
+ declare const ForbiddenIllustration: React$1.ForwardRefExoticComponent<Omit<SVGProps, "ref"> & React$1.RefAttributes<SVGSVGElement>>;
1749
+
1750
+ interface ErrorStateProps extends React$1.HTMLAttributes<HTMLDivElement> {
1751
+ /** Error message displayed below the icon */
1752
+ message?: string;
1753
+ /** Callback to trigger a retry — when provided, shows a retry button */
1374
1754
  onRetry?: () => void;
1375
1755
  /** Retry button label */
1376
1756
  retryLabel?: string;
@@ -1448,6 +1828,85 @@ interface FilterBarActiveFiltersProps extends React$1.HTMLAttributes<HTMLDivElem
1448
1828
  }
1449
1829
  declare const FilterBarActiveFilters: React$1.ForwardRefExoticComponent<FilterBarActiveFiltersProps & React$1.RefAttributes<HTMLDivElement>>;
1450
1830
 
1831
+ interface FilterPanelProps extends React$1.HTMLAttributes<HTMLDivElement> {
1832
+ /** Locale for default strings and digit formatting @default "fa" */
1833
+ locale?: SupportedLocale;
1834
+ }
1835
+ declare const FilterPanel: React$1.ForwardRefExoticComponent<FilterPanelProps & React$1.RefAttributes<HTMLDivElement>>;
1836
+ declare const FilterPanelHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
1837
+ interface FilterPanelTitleProps extends React$1.HTMLAttributes<HTMLHeadingElement> {
1838
+ /** Active filter count — when > 0, a pill is rendered next to the label */
1839
+ activeCount?: number;
1840
+ }
1841
+ declare const FilterPanelTitle: React$1.ForwardRefExoticComponent<FilterPanelTitleProps & React$1.RefAttributes<HTMLHeadingElement>>;
1842
+ interface FilterPanelClearAllProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, 'onClick'> {
1843
+ /** Callback when clear-all is clicked */
1844
+ onClear?: () => void;
1845
+ /** Also allow onClick (alias of onClear) to match native HTML semantics */
1846
+ onClick?: React$1.MouseEventHandler<HTMLButtonElement>;
1847
+ }
1848
+ declare const FilterPanelClearAll: React$1.ForwardRefExoticComponent<FilterPanelClearAllProps & React$1.RefAttributes<HTMLButtonElement>>;
1849
+ declare const FilterPanelBody: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
1850
+ declare const FilterPanelFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
1851
+ interface FilterSectionProps {
1852
+ /** Visible section title */
1853
+ title: React$1.ReactNode;
1854
+ /** Extra descriptive text below the title */
1855
+ description?: React$1.ReactNode;
1856
+ /** Number of active filters inside this section — shown as a pill next to the title */
1857
+ activeCount?: number;
1858
+ /** Initial open state for uncontrolled mode @default true */
1859
+ defaultOpen?: boolean;
1860
+ /** Controlled open state */
1861
+ open?: boolean;
1862
+ /** onOpenChange for controlled mode */
1863
+ onOpenChange?: (open: boolean) => void;
1864
+ /** When set, a "×" clear button appears in the header */
1865
+ onClear?: () => void;
1866
+ /** When true, the trigger is static (non-collapsible) — useful for single-field sections */
1867
+ collapsible?: boolean;
1868
+ /** Content (form fields) */
1869
+ children?: React$1.ReactNode;
1870
+ className?: string;
1871
+ /** Extra class for the inner content container */
1872
+ contentClassName?: string;
1873
+ /** Optional id for testing / aria */
1874
+ id?: string;
1875
+ }
1876
+ declare const FilterSection: React$1.ForwardRefExoticComponent<FilterSectionProps & React$1.RefAttributes<HTMLDivElement>>;
1877
+ interface FilterPanelTriggerProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement> {
1878
+ /** Active filter count — renders a pill badge next to the label */
1879
+ activeCount?: number;
1880
+ /** Locale for digit formatting and default label @default inherited from FilterPanel context; falls back to "fa" */
1881
+ locale?: SupportedLocale;
1882
+ /** Custom icon element (defaults to SlidersHorizontal) */
1883
+ icon?: React$1.ReactNode;
1884
+ /** Render without icon */
1885
+ hideIcon?: boolean;
1886
+ /** Visual variant — passthrough to Button */
1887
+ variant?: React$1.ComponentProps<typeof Button>['variant'];
1888
+ /** Size — passthrough to Button */
1889
+ size?: React$1.ComponentProps<typeof Button>['size'];
1890
+ }
1891
+ declare const FilterPanelTrigger: React$1.ForwardRefExoticComponent<FilterPanelTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
1892
+ interface ActiveFiltersBarProps extends React$1.HTMLAttributes<HTMLDivElement> {
1893
+ /** Locale for default empty text */
1894
+ locale?: SupportedLocale;
1895
+ /** Label rendered before chips ("فیلترهای فعال:"). Pass `false` to hide it. */
1896
+ label?: React$1.ReactNode;
1897
+ /** Text when no children are provided */
1898
+ emptyText?: React$1.ReactNode;
1899
+ /** Hide the whole bar when there are no children (instead of showing emptyText) */
1900
+ hideWhenEmpty?: boolean;
1901
+ }
1902
+ declare const ActiveFiltersBar: React$1.ForwardRefExoticComponent<ActiveFiltersBarProps & React$1.RefAttributes<HTMLDivElement>>;
1903
+ interface ActiveFiltersClearAllProps extends Omit<React$1.ButtonHTMLAttributes<HTMLButtonElement>, 'onClick'> {
1904
+ onClear?: () => void;
1905
+ onClick?: React$1.MouseEventHandler<HTMLButtonElement>;
1906
+ locale?: SupportedLocale;
1907
+ }
1908
+ declare const ActiveFiltersClearAll: React$1.ForwardRefExoticComponent<ActiveFiltersClearAllProps & React$1.RefAttributes<HTMLButtonElement>>;
1909
+
1451
1910
  declare const Form: <TFieldValues extends FieldValues, TContext = any, TTransformedValues = TFieldValues>(props: react_hook_form.FormProviderProps<TFieldValues, TContext, TTransformedValues>) => React$1.JSX.Element;
1452
1911
  declare const FormField: {
1453
1912
  <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ ...props }: ControllerProps<TFieldValues, TName>): react_jsx_runtime.JSX.Element;
@@ -1499,16 +1958,48 @@ declare namespace HoverCardContent {
1499
1958
  var displayName: string;
1500
1959
  }
1501
1960
 
1502
- declare const inputVariants: (props?: ({
1503
- size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
1504
- } & class_variance_authority_types.ClassProp) | undefined) => string;
1505
- /** @deprecated Use inputVariants instead */
1506
- declare const InputVariants: (props?: ({
1507
- size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
1508
- } & class_variance_authority_types.ClassProp) | undefined) => string;
1509
- interface InputProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, 'size'>, VariantProps<typeof inputVariants> {
1961
+ interface NumberInputLocaleProps extends Omit<React$1.ComponentProps<'input'>, 'type' | 'value' | 'defaultValue' | 'onChange' | 'size'> {
1962
+ /** Current numeric value. Use `null` for empty. */
1963
+ value?: number | null;
1964
+ /** Initial value (uncontrolled). */
1965
+ defaultValue?: number | null;
1966
+ /** Called when the parsed numeric value changes. `null` means cleared. */
1967
+ onValueChange?: (next: number | null) => void;
1968
+ /**
1969
+ * Locale for digit display + parse. Persian/Arabic input is auto-normalised
1970
+ * to Latin before parsing; output digits match the locale.
1971
+ * @default 'fa'
1972
+ */
1973
+ locale?: SupportedLocale;
1974
+ /** Optional unit suffix shown on the inline-end side (e.g. "%", "تومان"). */
1975
+ unit?: React$1.ReactNode;
1976
+ /** Min value (inclusive). */
1977
+ min?: number;
1978
+ /** Max value (inclusive). */
1979
+ max?: number;
1980
+ /** Number of fractional digits. @default 0 (integer) */
1981
+ decimals?: number;
1982
+ /** Show grouping separator (1,234) in display. @default true */
1983
+ thousandSeparator?: boolean;
1984
+ /** Allow negative numbers. @default true */
1985
+ allowNegative?: boolean;
1510
1986
  }
1511
- declare const Input: React$1.ForwardRefExoticComponent<InputProps & React$1.RefAttributes<HTMLInputElement>>;
1987
+ /**
1988
+ * Locale-aware number input. Accepts Persian, Arabic, or Latin digits;
1989
+ * always emits a parsed JS `number` (or `null` for empty) via `onValueChange`.
1990
+ * Display digits match `locale` (Persian by default).
1991
+ *
1992
+ * - While the input is focused, the value renders as the user typed (raw
1993
+ * sanitized buffer), so editing mid-string doesn't snap the caret.
1994
+ * - On blur, value is re-formatted to the locale display (with thousand
1995
+ * separators + decimals padded to spec).
1996
+ * - `min`/`max` clamp on blur, never mid-edit.
1997
+ *
1998
+ * @example
1999
+ * const [n, setN] = useState<number | null>(null)
2000
+ * <NumberInputLocale value={n} onValueChange={setN} unit="تومان" thousandSeparator />
2001
+ */
2002
+ declare const NumberInputLocale: React$1.ForwardRefExoticComponent<Omit<NumberInputLocaleProps, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
1512
2003
 
1513
2004
  interface InputWithIconProps extends InputProps {
1514
2005
  /** Icon rendered at the start (inline-start, respects RTL) */
@@ -1539,6 +2030,141 @@ declare const TagInput: React$1.ForwardRefExoticComponent<TagInputProps & React$
1539
2030
 
1540
2031
  declare const HashtagInput: React$1.ForwardRefExoticComponent<TagInputProps & React$1.RefAttributes<HTMLDivElement>>;
1541
2032
 
2033
+ interface HashtagPerformanceData {
2034
+ /** Hashtag without the leading `#` — the component renders the marker. */
2035
+ tag: string;
2036
+ /** Mention frequency (count of posts using the tag). */
2037
+ frequency: number;
2038
+ /** Engagement rate (%) for posts that used this tag. */
2039
+ engagementRate?: number;
2040
+ /** Trend sparkline values (e.g. last 7-14 days frequency). */
2041
+ trend?: number[];
2042
+ /** Optional explicit delta (% vs previous period). When omitted, derived from `trend`. */
2043
+ delta?: number;
2044
+ }
2045
+ interface HashtagPerformanceRowProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'onClick'> {
2046
+ data: HashtagPerformanceData;
2047
+ /** Make the row clickable (opens an analytics drill-down on the consumer side). */
2048
+ onRowClick?: (data: HashtagPerformanceData) => void;
2049
+ /** Show ranking number at the start of the row (1, 2, 3, …). */
2050
+ rank?: number;
2051
+ /** Density compact (28px) vs comfortable (40px). @default 'comfortable' */
2052
+ density?: 'compact' | 'comfortable';
2053
+ /** Locale for digit + label formatting. @default 'fa' */
2054
+ locale?: SupportedLocale;
2055
+ }
2056
+ /**
2057
+ * Single row in a hashtag-performance table — hashtag + frequency +
2058
+ * engagement + sparkline trend + delta. Designed to drop straight into a
2059
+ * `<DataTable>` cell renderer or a vertical list of top hashtags.
2060
+ *
2061
+ * @example
2062
+ * <DataTable
2063
+ * columns={[{
2064
+ * id: 'hashtag', header: 'هشتگ',
2065
+ * cell: (row) => <HashtagPerformanceRow data={row} rank={row.rank} />,
2066
+ * }]}
2067
+ * data={hashtags}
2068
+ * />
2069
+ */
2070
+ declare const HashtagPerformanceRow: React$1.ForwardRefExoticComponent<HashtagPerformanceRowProps & React$1.RefAttributes<HTMLDivElement>>;
2071
+
2072
+ type CardSize = 'sm' | 'md' | 'lg';
2073
+ interface EntityHealthCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
2074
+ /** Current health state — drives colour, icon, and default narrative framing */
2075
+ severity: EntityHealthKey;
2076
+ /** Compact row layout for list views @default "md" */
2077
+ size?: CardSize;
2078
+ /** Render as a clickable element (`role="button"` + focus ring). */
2079
+ interactive?: boolean;
2080
+ /** Locale for default strings + digit formatting @default "fa" */
2081
+ locale?: SupportedLocale;
2082
+ /** Render an accent-coloured left (logical-start) border tied to severity @default true */
2083
+ accentBorder?: boolean;
2084
+ }
2085
+ declare const EntityHealthCard: React$1.ForwardRefExoticComponent<EntityHealthCardProps & React$1.RefAttributes<HTMLDivElement>>;
2086
+ declare const EntityHealthCardHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2087
+ declare const EntityHealthCardHeaderText: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2088
+ interface EntityHealthCardTitleProps extends React$1.HTMLAttributes<HTMLHeadingElement> {
2089
+ /** Semantic heading level @default "h3" */
2090
+ as?: 'h2' | 'h3' | 'h4';
2091
+ }
2092
+ declare const EntityHealthCardTitle: React$1.ForwardRefExoticComponent<EntityHealthCardTitleProps & React$1.RefAttributes<HTMLHeadingElement>>;
2093
+ declare const EntityHealthCardSubtitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
2094
+ declare const EntityHealthCardHeaderEnd: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2095
+ interface EntityHealthCardSeverityBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
2096
+ /** Hide the text label — keeps the icon and aria-label only */
2097
+ iconOnly?: boolean;
2098
+ /** Size @default "sm" */
2099
+ size?: 'xs' | 'sm' | 'md';
2100
+ /** Override locale for just this badge */
2101
+ locale?: SupportedLocale;
2102
+ }
2103
+ declare const EntityHealthCardSeverityBadge: React$1.ForwardRefExoticComponent<EntityHealthCardSeverityBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
2104
+ interface EntityHealthCardScoreProps extends React$1.HTMLAttributes<HTMLDivElement> {
2105
+ /** Current score — clamped to [0, max]. */
2106
+ value: number;
2107
+ /** Max score @default 100 */
2108
+ max?: number;
2109
+ /** Leading label (e.g., "نمره سلامت") */
2110
+ label?: React$1.ReactNode;
2111
+ /** Optional delta vs previous period. Positive => up, negative => down. */
2112
+ delta?: number;
2113
+ /** Suffix rendered after the score (e.g., "٪", "/۱۰۰"). Omit for no suffix. */
2114
+ suffix?: React$1.ReactNode;
2115
+ /** Override auto suffix when `suffix` is not provided. Defaults to "/{max}" in localized digits. */
2116
+ showDenominator?: boolean;
2117
+ /** Override the accent colour. Accepts any CSS color. */
2118
+ color?: string;
2119
+ }
2120
+ declare const EntityHealthCardScore: React$1.ForwardRefExoticComponent<EntityHealthCardScoreProps & React$1.RefAttributes<HTMLDivElement>>;
2121
+ declare const EntityHealthCardNarrative: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
2122
+ interface EntityHealthCardTrustProps extends React$1.HTMLAttributes<HTMLDivElement> {
2123
+ /** Trust score @range 0..max */
2124
+ value: number;
2125
+ /** Max score @default 100 */
2126
+ max?: number;
2127
+ /** Leading label — defaults to "اعتماد" */
2128
+ label?: React$1.ReactNode;
2129
+ /** Hide the numeric value on the trailing side */
2130
+ hideValue?: boolean;
2131
+ /** Show 25 / 50 / 75 tick marks inside the bar @default true */
2132
+ showMarkers?: boolean;
2133
+ /** Size of the bar @default "sm" */
2134
+ barSize?: 'xs' | 'sm' | 'md';
2135
+ /** Override the bar fill colour */
2136
+ color?: string;
2137
+ }
2138
+ declare const EntityHealthCardTrust: React$1.ForwardRefExoticComponent<EntityHealthCardTrustProps & React$1.RefAttributes<HTMLDivElement>>;
2139
+ interface EntityHealthCardPhaseProps extends React$1.HTMLAttributes<HTMLDivElement> {
2140
+ /** Current day index (1-based). When provided with `total`, a progress bar renders. */
2141
+ day?: number;
2142
+ /** Total days in this phase */
2143
+ total?: number;
2144
+ /** Phase name */
2145
+ phase?: React$1.ReactNode;
2146
+ }
2147
+ declare const EntityHealthCardPhase: React$1.ForwardRefExoticComponent<EntityHealthCardPhaseProps & React$1.RefAttributes<HTMLDivElement>>;
2148
+ interface EntityHealthCardMetricsProps extends React$1.HTMLAttributes<HTMLDivElement> {
2149
+ /** Number of columns @default 2 */
2150
+ columns?: 1 | 2 | 3 | 4;
2151
+ }
2152
+ declare const EntityHealthCardMetrics: React$1.ForwardRefExoticComponent<EntityHealthCardMetricsProps & React$1.RefAttributes<HTMLDivElement>>;
2153
+ interface EntityHealthCardMetricProps extends React$1.HTMLAttributes<HTMLDivElement> {
2154
+ /** Metric label */
2155
+ label: React$1.ReactNode;
2156
+ /** Metric value — primary number or short string */
2157
+ value: React$1.ReactNode;
2158
+ /** Optional trend direction — affects trailing icon colour */
2159
+ trend?: 'up' | 'down' | 'flat';
2160
+ /** Optional trend magnitude shown after the arrow (e.g., "12%") */
2161
+ trendLabel?: React$1.ReactNode;
2162
+ }
2163
+ declare const EntityHealthCardMetric: React$1.ForwardRefExoticComponent<EntityHealthCardMetricProps & React$1.RefAttributes<HTMLDivElement>>;
2164
+ declare const EntityHealthCardFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2165
+ declare const EntityHealthCardActions: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2166
+ declare const EntityHealthCardMeta: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
2167
+
1542
2168
  interface InputGroupProps extends React$1.ComponentProps<'div'> {
1543
2169
  /**
1544
2170
  * Direction of the input group.
@@ -1599,69 +2225,109 @@ declare namespace InputOTPSeparator {
1599
2225
  var displayName: string;
1600
2226
  }
1601
2227
 
1602
- type MediaType = 'image' | 'video' | 'carousel';
1603
- type AspectRatioType = '16:9' | '9:16' | '1:1' | '4:5' | '5:4';
1604
- interface MediaItem {
1605
- type: 'image' | 'video';
1606
- url: string;
1607
- aspectRatio?: AspectRatioType;
2228
+ interface JobCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
2229
+ /** Current lifecycle status drives colour and badge */
2230
+ status: JobStatusKey;
2231
+ /** Compact single-row layout (for list views) @default false */
2232
+ compact?: boolean;
2233
+ /** When set, the card renders as a clickable element with hover + focus styles. Pure presentational — wire your own handler via onClick. */
2234
+ interactive?: boolean;
2235
+ /** Locale for default strings + digit formatting @default "fa" */
2236
+ locale?: SupportedLocale;
1608
2237
  }
1609
- interface PostStats {
1610
- likes?: number;
1611
- comments?: number;
1612
- views?: number;
1613
- shares?: number;
2238
+ declare const JobCard: React$1.ForwardRefExoticComponent<JobCardProps & React$1.RefAttributes<HTMLDivElement>>;
2239
+ declare const JobCardHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2240
+ interface JobCardThumbnailProps extends React$1.HTMLAttributes<HTMLDivElement> {
2241
+ /** Image URL. If omitted, `icon` or `fallback` is used. */
2242
+ src?: string;
2243
+ /** Alt text for the image */
2244
+ alt?: string;
2245
+ /** Lucide icon rendered in an outlined tile (used when no src) */
2246
+ icon?: React$1.ComponentType<{
2247
+ className?: string;
2248
+ }>;
2249
+ /** Arbitrary fallback node (letter, emoji, …) */
2250
+ fallback?: React$1.ReactNode;
1614
2251
  }
1615
- type NumberFormat = 'exact' | 'short';
1616
- type TimeFormat = 'absolute' | 'relative';
1617
- interface InstagramProfileInfo {
1618
- username: string;
1619
- fullName?: string;
1620
- profilePicture?: string;
1621
- avatarUrl?: string;
2252
+ declare const JobCardThumbnail: React$1.ForwardRefExoticComponent<JobCardThumbnailProps & React$1.RefAttributes<HTMLDivElement>>;
2253
+ declare const JobCardHeaderText: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2254
+ interface JobCardTitleProps extends React$1.HTMLAttributes<HTMLHeadingElement> {
2255
+ /** Semantic heading level @default "h3" */
2256
+ as?: 'h2' | 'h3' | 'h4';
2257
+ }
2258
+ declare const JobCardTitle: React$1.ForwardRefExoticComponent<JobCardTitleProps & React$1.RefAttributes<HTMLHeadingElement>>;
2259
+ declare const JobCardSubtitle: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
2260
+ declare const JobCardHeaderActions: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2261
+ interface JobCardStatusBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
2262
+ /** Hide the text label — keeps the icon and aria-label only */
2263
+ iconOnly?: boolean;
2264
+ /** Size @default "sm" */
2265
+ size?: 'xs' | 'sm' | 'md';
2266
+ /** Override locale for just this badge */
2267
+ locale?: SupportedLocale;
1622
2268
  }
1623
- interface InstagramPostProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof instagramPostVariants> {
1624
- dir?: 'rtl' | 'ltr';
1625
- media?: MediaItem[];
1626
- mediaType?: MediaType;
1627
- postType?: 'image' | 'video' | 'carousel';
1628
- caption?: string;
1629
- showCaption?: boolean;
1630
- stats?: PostStats;
1631
- numberFormat?: NumberFormat;
1632
- showLikes?: boolean;
1633
- showComments?: boolean;
1634
- showViews?: boolean;
1635
- showShares?: boolean;
1636
- publishTime?: Date | string | number;
1637
- timeFormat?: TimeFormat;
1638
- profile?: InstagramProfileInfo;
1639
- showProfile?: boolean;
1640
- avatarUrl?: string;
1641
- showActions?: boolean;
1642
- /** Show loading skeleton state */
1643
- isLoading?: boolean;
1644
- onCommentAnalyzer?: () => void;
1645
- onBooster?: () => void;
1646
- onAIAnalysis?: () => void;
1647
- onOpenInstagram?: () => void;
1648
- instagramUrl?: string;
1649
- disableCommentAnalyzer?: boolean;
1650
- disableBooster?: boolean;
1651
- disableAIAnalysis?: boolean;
1652
- disableOpenInstagram?: boolean;
1653
- placeholderText?: string;
1654
- /** Locale for UI strings @default 'fa' */
1655
- locale?: SupportedLocale;
1656
- /** Text for "show more" button @default "بیشتر" */
1657
- showMoreText?: string;
1658
- /** Text for "show less" button @default "کمتر" */
1659
- showLessText?: string;
1660
- }
1661
- declare const instagramPostVariants: (props?: ({
1662
- variant?: "horizontal" | "vertical" | null | undefined;
1663
- } & class_variance_authority_types.ClassProp) | undefined) => string;
1664
- declare const InstagramPost: React$1.ForwardRefExoticComponent<InstagramPostProps & React$1.RefAttributes<HTMLDivElement>>;
2269
+ declare const JobCardStatusBadge: React$1.ForwardRefExoticComponent<JobCardStatusBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
2270
+ /**
2271
+ * Wrapper for action buttons. If the parent `<JobCard interactive>` is
2272
+ * clickable, child button clicks would otherwise bubble up and trigger
2273
+ * the card's handler. Wrap your buttons here and we add role="group"
2274
+ * semantics; stop event propagation at the Button's own onClick when
2275
+ * needed to avoid conflicting with card activation.
2276
+ */
2277
+ declare const JobCardActions: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
2278
+ interface JobCardProgressProps extends React$1.HTMLAttributes<HTMLDivElement> {
2279
+ /** Current value — if omitted (and not indeterminate), renders a 0% bar */
2280
+ value?: number;
2281
+ /** Max value @default 100 */
2282
+ max?: number;
2283
+ /** Render an animated indeterminate shimmer. Overrides `value`. */
2284
+ indeterminate?: boolean;
2285
+ /** Leading text label */
2286
+ label?: React$1.ReactNode;
2287
+ /** Force-hide the percentage text on the trailing end */
2288
+ hideValueText?: boolean;
2289
+ /** Override the bar colour (e.g. for `paused` state). Accepts a CSS value. */
2290
+ color?: string;
2291
+ /** Size of the bar @default "sm" */
2292
+ size?: 'xs' | 'sm' | 'md';
2293
+ }
2294
+ declare const JobCardProgress: React$1.ForwardRefExoticComponent<JobCardProgressProps & React$1.RefAttributes<HTMLDivElement>>;
2295
+ declare const JobCardMeta: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDListElement> & React$1.RefAttributes<HTMLDListElement>>;
2296
+ interface JobCardMetaItemProps {
2297
+ /** Lucide icon — usually Calendar, Clock, User, … */
2298
+ icon?: React$1.ComponentType<{
2299
+ className?: string;
2300
+ }>;
2301
+ /** Field label */
2302
+ label: React$1.ReactNode;
2303
+ /** Field value */
2304
+ value: React$1.ReactNode;
2305
+ /** Use `<time dateTime={...}>` for value (screen readers + copy behaviour) */
2306
+ dateTime?: string;
2307
+ className?: string;
2308
+ }
2309
+ declare const JobCardMetaItem: React$1.ForwardRefExoticComponent<JobCardMetaItemProps & React$1.RefAttributes<HTMLDivElement>>;
2310
+ interface JobCardStatsProps extends React$1.HTMLAttributes<HTMLDivElement> {
2311
+ /** Layout columns @default auto */
2312
+ columns?: 2 | 3 | 4 | 'auto';
2313
+ }
2314
+ declare const JobCardStats: React$1.ForwardRefExoticComponent<JobCardStatsProps & React$1.RefAttributes<HTMLDivElement>>;
2315
+ interface JobCardStatProps {
2316
+ label: React$1.ReactNode;
2317
+ /** Current value */
2318
+ value: number;
2319
+ /** Total — renders as "value / total" when provided */
2320
+ total?: number;
2321
+ /** Value formatting locale. Defaults to JobCard context. */
2322
+ locale?: SupportedLocale;
2323
+ /** Semantic tone applied to the value */
2324
+ variant?: 'default' | 'positive' | 'warning' | 'destructive' | 'muted';
2325
+ /** Pre-formatted override — bypasses number formatting */
2326
+ formatted?: React$1.ReactNode;
2327
+ className?: string;
2328
+ }
2329
+ declare const JobCardStat: React$1.ForwardRefExoticComponent<JobCardStatProps & React$1.RefAttributes<HTMLDivElement>>;
2330
+ declare const JobCardError: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
1665
2331
 
1666
2332
  declare function Kbd({ className, ...props }: React$1.ComponentProps<'kbd'>): react_jsx_runtime.JSX.Element;
1667
2333
  declare namespace Kbd {
@@ -1672,6 +2338,206 @@ declare namespace KbdGroup {
1672
2338
  var displayName: string;
1673
2339
  }
1674
2340
 
2341
+ declare const labelChipVariants: (props?: ({
2342
+ tone?: "neutral" | "warning" | "success" | "destructive" | "brand" | "ai" | null | undefined;
2343
+ size?: "sm" | "md" | null | undefined;
2344
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
2345
+ interface LabelChipProps extends Omit<React$1.HTMLAttributes<HTMLSpanElement>, 'onClick'>, VariantProps<typeof labelChipVariants> {
2346
+ /** Visible label text. */
2347
+ children: React$1.ReactNode;
2348
+ /** When set, renders an inline pencil button that opens an editor on consumer side. */
2349
+ onEdit?: () => void;
2350
+ /** When set, renders an inline ✕ button to dismiss/remove the label. */
2351
+ onRemove?: () => void;
2352
+ /**
2353
+ * Mark the chip as AI-generated — adds a subtle ✦ prefix and the `ai` tone
2354
+ * (unless tone is explicitly overridden). Used by AI-labeled clustering
2355
+ * dashboards to distinguish auto-tagged from human-curated labels.
2356
+ */
2357
+ aiGenerated?: boolean;
2358
+ /** Confidence (0–1) for AI labels — rendered as a small `(۸۰%)` suffix when set. */
2359
+ confidence?: number;
2360
+ /** Whole chip click handler — useful for filter-by-label flows. */
2361
+ onSelect?: () => void;
2362
+ }
2363
+ declare const LabelChip: React$1.ForwardRefExoticComponent<LabelChipProps & React$1.RefAttributes<HTMLSpanElement>>;
2364
+
2365
+ interface LabelEditDialogProps {
2366
+ /** Controlled open state. */
2367
+ open: boolean;
2368
+ onOpenChange: (open: boolean) => void;
2369
+ /** Initial value of the label being edited. */
2370
+ initialValue?: string;
2371
+ /** Whether this label was originally AI-generated (controls the AI-flag toggle default). */
2372
+ aiGenerated?: boolean;
2373
+ /** Existing labels — surfaced as quick-pick suggestions during edit. */
2374
+ suggestions?: string[];
2375
+ /** Save handler. Called with the new value + the AI-generated flag (consumer persists). */
2376
+ onSave: (value: string, aiGenerated: boolean) => void;
2377
+ /**
2378
+ * Optional handler for the "Delete label" destructive action. When set, a
2379
+ * `Button variant="destructive"` shows up in the footer; omit to hide.
2380
+ */
2381
+ onDelete?: () => void;
2382
+ /** Locale for default strings. @default 'fa' */
2383
+ locale?: SupportedLocale;
2384
+ }
2385
+ /**
2386
+ * Edit dialog for AI-labeled clustering. Pairs with `<LabelChip>` — when
2387
+ * users click the pencil affordance on a chip, this dialog opens with the
2388
+ * current value pre-filled, an AI-generated toggle, and a list of
2389
+ * suggestions (typically other labels already in use).
2390
+ *
2391
+ * Stateless wrt persistence: consumer wires `onSave` to whatever backend.
2392
+ */
2393
+ declare const LabelEditDialog: React$1.ForwardRefExoticComponent<LabelEditDialogProps & React$1.RefAttributes<HTMLDivElement>>;
2394
+
2395
+ interface MarkdownRendererProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'children'> {
2396
+ /** Raw markdown source. Safe by default — raw HTML is escaped, scripts are never executed. */
2397
+ children: string;
2398
+ /**
2399
+ * Enables permissive link schemes. By default only `http`, `https`, and `mailto` are kept;
2400
+ * everything else (including `javascript:`) is dropped.
2401
+ */
2402
+ allowedLinkSchemes?: ReadonlyArray<string>;
2403
+ /** Compact density tightens vertical rhythm — useful for inline AI summaries. */
2404
+ density?: 'compact' | 'comfortable';
2405
+ }
2406
+ /**
2407
+ * Lightweight, dependency-free markdown renderer for AI narratives, report
2408
+ * sections, and bulletin bodies. Safe by default — raw HTML in the source is
2409
+ * rendered as text (never injected), and `javascript:` links are dropped.
2410
+ *
2411
+ * Supports: ATX headings (`#`..`######`), paragraphs, **bold**, *italic*,
2412
+ * ~~strike~~, `inline code`, fenced ``` code blocks ```, blockquotes, ordered
2413
+ * + unordered lists (flat), `[links](url)`, horizontal rules, hard line breaks.
2414
+ *
2415
+ * Intentional non-features (v1): tables, nested lists, footnotes, images. If
2416
+ * you need any of those, lift to a heavier renderer (TipTap / react-markdown).
2417
+ */
2418
+ declare const MarkdownRenderer: React$1.ForwardRefExoticComponent<MarkdownRendererProps & React$1.RefAttributes<HTMLDivElement>>;
2419
+
2420
+ interface TaskListGroup {
2421
+ /** Stable group identifier — used to bucket items and as a React key. */
2422
+ id: string;
2423
+ /** Heading shown above the column / group section. */
2424
+ label: React$1.ReactNode;
2425
+ /** Optional accent token CSS variable (e.g. `--status-warning`) for the column rail. */
2426
+ accent?: string;
2427
+ /** Optional override for the empty state inside this group. */
2428
+ emptyState?: React$1.ReactNode;
2429
+ }
2430
+ interface TaskListProps<T> extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'children' | 'onSelect'> {
2431
+ /** Items to render. Order is preserved within each group. */
2432
+ items: ReadonlyArray<T>;
2433
+ /**
2434
+ * Layout — `kanban` renders one column per group with horizontal scroll;
2435
+ * `flat` renders a single ordered list with sticky group headings.
2436
+ * @default 'kanban'
2437
+ */
2438
+ variant?: 'kanban' | 'flat';
2439
+ /**
2440
+ * Explicit group definitions. When omitted, groups are auto-derived from the
2441
+ * unique `groupBy(item)` values in document order. Pass an array to control
2442
+ * column ordering, labels, or to render columns with no items today.
2443
+ */
2444
+ groups?: ReadonlyArray<TaskListGroup>;
2445
+ /** Function returning the group id for an item. */
2446
+ groupBy: (item: T) => string;
2447
+ /** Renders a single item card. Receives the resolved group for context. */
2448
+ renderItem: (item: T, group: TaskListGroup) => React$1.ReactNode;
2449
+ /** Stable React key per item. */
2450
+ getItemKey: (item: T, index: number) => React$1.Key;
2451
+ /** Default empty state when a group has no items. */
2452
+ emptyState?: React$1.ReactNode;
2453
+ /**
2454
+ * Show the item count next to each group heading. @default true.
2455
+ */
2456
+ showCounts?: boolean;
2457
+ /** Locale for default empty / count strings. @default 'fa' */
2458
+ locale?: SupportedLocale;
2459
+ }
2460
+ declare const TaskList: <T>(props: TaskListProps<T> & {
2461
+ ref?: React$1.ForwardedRef<HTMLDivElement>;
2462
+ }) => React$1.ReactElement;
2463
+
2464
+ type RegionPickerKey = 'slug' | 'iso';
2465
+ interface RegionPickerProps {
2466
+ /** Selected province identifiers (slug or iso, depending on `keyBy`). */
2467
+ value?: ReadonlyArray<string>;
2468
+ onValueChange?: (next: string[]) => void;
2469
+ /**
2470
+ * Which identifier to read/write — `slug` (e.g. `tehran`) is URL-friendly,
2471
+ * `iso` (`IR-07`) is the ISO 3166-2 standard. @default 'slug'
2472
+ */
2473
+ keyBy?: RegionPickerKey;
2474
+ /** Locale for province labels + UI strings. @default 'fa' */
2475
+ locale?: SupportedLocale;
2476
+ /** Restrict the choosable list (e.g. only show provinces with bureaus). */
2477
+ includeSlugs?: ReadonlyArray<IranProvinceSlug>;
2478
+ /** Excluded slugs — applied after `includeSlugs`. */
2479
+ excludeSlugs?: ReadonlyArray<IranProvinceSlug>;
2480
+ /** Trigger placeholder. */
2481
+ placeholder?: string;
2482
+ /** Search-input placeholder. */
2483
+ searchPlaceholder?: string;
2484
+ /** Empty-state message when search yields no results. */
2485
+ emptyMessage?: string;
2486
+ /** Cap on selections — e.g. `1` to make it a single-province picker. */
2487
+ maxSelected?: number;
2488
+ /** How many selected chips to render before collapsing into a "+N" badge. */
2489
+ maxDisplayed?: number;
2490
+ disabled?: boolean;
2491
+ className?: string;
2492
+ }
2493
+ /**
2494
+ * Multi-select picker over Iran's 31 provinces. Source of truth is
2495
+ * `IRAN_PROVINCES`; the picker projects it through the active locale and
2496
+ * surfaces it via `MultiSelect`.
2497
+ *
2498
+ * Pair with `IranProvinceHeat` for province-scoped افکارسنجی dashboards. A
2499
+ * proper SVG geomap selector is deferred (Phase 5.4).
2500
+ */
2501
+ declare const RegionPicker: React$1.ForwardRefExoticComponent<RegionPickerProps & React$1.RefAttributes<HTMLDivElement>>;
2502
+
2503
+ interface CountryPickerProps {
2504
+ /** Selected ISO 3166-1 alpha-2 codes (uppercase). */
2505
+ value?: ReadonlyArray<string>;
2506
+ onValueChange?: (next: string[]) => void;
2507
+ /**
2508
+ * Override the country list. Defaults to the curated 80-country roster in
2509
+ * `lib/countries.ts`. Pass your own when you need a fuller ISO 3166 set or
2510
+ * a sub-region (e.g. only EU members).
2511
+ */
2512
+ options?: ReadonlyArray<Country>;
2513
+ /** Restrict the curated default list to these codes. */
2514
+ includeCodes?: ReadonlyArray<string>;
2515
+ /** Excluded codes — applied after `includeCodes`. */
2516
+ excludeCodes?: ReadonlyArray<string>;
2517
+ /** Show flag emoji prefix on each option. @default true */
2518
+ showFlag?: boolean;
2519
+ /** Locale for labels + UI strings. @default 'fa' */
2520
+ locale?: SupportedLocale;
2521
+ placeholder?: string;
2522
+ searchPlaceholder?: string;
2523
+ emptyMessage?: string;
2524
+ /** Cap on selections — e.g. `1` for a single-country picker. */
2525
+ maxSelected?: number;
2526
+ /** Selected chips before collapsing into "+N" badge. */
2527
+ maxDisplayed?: number;
2528
+ disabled?: boolean;
2529
+ className?: string;
2530
+ }
2531
+ /**
2532
+ * Multi-select picker over a curated country list. Defaults to the 80
2533
+ * countries that recur in افکارسنجی + influencer dashboards we serve; pass
2534
+ * `options` to replace the dataset with your own.
2535
+ *
2536
+ * Returns ISO 3166-1 alpha-2 codes (uppercase). Pair with platform tokens +
2537
+ * the audience graph for influencer geographic breakdowns.
2538
+ */
2539
+ declare const CountryPicker: React$1.ForwardRefExoticComponent<CountryPickerProps & React$1.RefAttributes<HTMLDivElement>>;
2540
+
1675
2541
  declare function Menubar({ className, ...props }: React$1.ComponentProps<typeof MenubarPrimitive.Root>): react_jsx_runtime.JSX.Element;
1676
2542
  declare namespace Menubar {
1677
2543
  var displayName: string;
@@ -1957,47 +2823,563 @@ interface PaginationControlledProps {
1957
2823
  */
1958
2824
  declare const PaginationControlled: React$1.ForwardRefExoticComponent<PaginationControlledProps & React$1.RefAttributes<HTMLElement>>;
1959
2825
 
1960
- declare const Popover: React$1.FC<PopoverPrimitive.PopoverProps>;
1961
- declare const PopoverTrigger: React$1.ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
1962
- declare const PopoverAnchor: React$1.ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & React$1.RefAttributes<HTMLDivElement>>;
1963
- declare const PopoverContent: React$1.ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
2826
+ /**
2827
+ * PartoHeatMap brand-tinted heatmap with rounded cells, clean axis,
2828
+ * glassmorphic tooltip, and locale-aware formatting.
2829
+ * Built with Visx scales + raw SVG for full control.
2830
+ */
2831
+ interface HeatMapDatum {
2832
+ x: string | number;
2833
+ y: number;
2834
+ }
2835
+ interface HeatMapRow {
2836
+ id: string;
2837
+ data: HeatMapDatum[];
2838
+ }
2839
+ interface PartoHeatMapProps {
2840
+ data: HeatMapRow[];
2841
+ locale?: 'fa' | 'en';
2842
+ className?: string;
2843
+ isLoading?: boolean;
2844
+ ariaLabel?: string;
2845
+ margin?: {
2846
+ top: number;
2847
+ right: number;
2848
+ bottom: number;
2849
+ left: number;
2850
+ };
2851
+ /** Custom color function: receives value and max → returns CSS color */
2852
+ colorScale?: (value: number, max: number) => string;
2853
+ /** Cell border radius */
2854
+ cellRadius?: number;
2855
+ /** Gap between cells */
2856
+ cellGap?: number;
2857
+ /** Custom tooltip content */
2858
+ renderTooltip?: (cell: {
2859
+ rowId: string;
2860
+ x: string | number;
2861
+ value: number;
2862
+ color: string;
2863
+ }) => React$1.ReactNode;
2864
+ /** X axis label */
2865
+ xAxisLabel?: string;
2866
+ /** Y axis label */
2867
+ yAxisLabel?: string;
2868
+ /** Filter which x-axis ticks to show */
2869
+ xTickFilter?: (value: string | number, index: number) => boolean;
2870
+ }
2871
+ declare const PartoHeatMap: React$1.ForwardRefExoticComponent<PartoHeatMapProps & React$1.RefAttributes<HTMLDivElement>>;
1964
2872
 
1965
- declare const profileCardVariants: (props?: ({
1966
- variant?: "default" | "transparent" | "dark" | null | undefined;
1967
- size?: "sm" | "md" | "lg" | null | undefined;
1968
- } & class_variance_authority_types.ClassProp) | undefined) => string;
1969
- interface ProfileCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
1970
- /**
1971
- * نام کامل کاربر
1972
- */
1973
- name: string;
1974
- /**
1975
- * نام کاربری (username)
1976
- */
1977
- username: string;
1978
- /**
1979
- * آدرس تصویر پروفایل
1980
- */
1981
- avatarSrc?: string;
1982
- /**
1983
- * متن جایگزین برای تصویر
1984
- */
1985
- avatarAlt?: string;
2873
+ type PostingWeekStart = 'saturday' | 'sunday' | 'monday';
2874
+ interface PostingFrequencyCell {
2875
+ /** Day of week 0-6. What "0" means depends on `weekStart`. */
2876
+ dayOfWeek: number;
2877
+ /** Hour of day — 0-23 in the display timezone. */
2878
+ hour: number;
2879
+ /** Metric value (typically post count, can also be comments/likes avg). */
2880
+ value: number;
2881
+ }
2882
+ interface PostingFrequencySummary {
2883
+ /** 0–100 composite consistency score (activeDaysRatio + regularity + gap-penalty). */
2884
+ consistencyScore?: number;
2885
+ /** Longest inactivity gap, expressed in **days**. */
2886
+ maxGapDays?: number;
2887
+ /** 0–100 % of days that contain ≥1 post in the analysis window. */
2888
+ activeDaysRatio?: number;
2889
+ /** Total posts in the window (optional, for context in the header). */
2890
+ totalPosts?: number;
2891
+ }
2892
+ /**
2893
+ * Normalize a sparse `PostingFrequencyCell[]` into a full 7×24 grid of
2894
+ * `HeatMapRow`s ordered by `weekStart`. Missing cells are filled with value=0.
2895
+ * Each row's `id` is the English weekday name, matching PartoHeatMap's
2896
+ * internal weekday mapping.
2897
+ */
2898
+ declare function buildPostingFrequencyRows(data: PostingFrequencyCell[], weekStart?: PostingWeekStart): HeatMapRow[];
2899
+ interface PostingFrequencyHeatmapProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'title'> {
2900
+ /** Per-cell activity. Sparse input is fine — missing cells render as 0. */
2901
+ data: PostingFrequencyCell[];
2902
+ /** Which day logically occupies row 0. @default "saturday" for fa/ar, "sunday" for en. */
2903
+ weekStart?: PostingWeekStart;
2904
+ /** Optional summary stats shown in the header row. */
2905
+ summary?: PostingFrequencySummary;
2906
+ /** Card title. */
2907
+ title?: React$1.ReactNode;
2908
+ /** Short description below title. */
2909
+ description?: React$1.ReactNode;
1986
2910
  /**
1987
- * حروف اولیه برای fallback (اختیاری)
2911
+ * Metric label for the tooltip (e.g., "پست", "نظر", "لایک"). Default uses
2912
+ * the locale-specific "Posts" label.
1988
2913
  */
1989
- initials?: string;
2914
+ metricLabel?: React$1.ReactNode;
2915
+ /** Show the summary row @default true (when `summary` is provided) */
2916
+ showSummary?: boolean;
2917
+ /** Height of the heatmap chart in px @default 240 */
2918
+ chartHeight?: number;
2919
+ /** Loading state */
2920
+ isLoading?: boolean;
2921
+ /** Locale @default "fa" */
2922
+ locale?: SupportedLocale;
1990
2923
  /**
1991
- * تعداد فالوورها
2924
+ * Custom PartoHeatMap props to pass through (e.g., colorScale override,
2925
+ * margin). Avoid setting `data` / `locale` here; use the outer props.
1992
2926
  */
2927
+ heatmapProps?: Omit<PartoHeatMapProps, 'data' | 'locale' | 'isLoading' | 'renderTooltip'>;
2928
+ }
2929
+ declare const PostingFrequencyHeatmap: React$1.ForwardRefExoticComponent<PostingFrequencyHeatmapProps & React$1.RefAttributes<HTMLDivElement>>;
2930
+
2931
+ /**
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.
2935
+ */
2936
+ type PostPlatform = SocialPlatform;
2937
+ type PostDensity = 'compact' | 'comfortable';
2938
+ type PostSentiment = 'positive' | 'negative' | 'neutral' | 'mixed';
2939
+ interface PostAuthor {
2940
+ name: string;
2941
+ handle?: string;
2942
+ avatarUrl?: string;
2943
+ verified?: boolean;
2944
+ /** Optional follower / subscriber count — used in PostDetailsModal sidebar. */
1993
2945
  followers?: number;
1994
- /**
1995
- * آیکون فالوور
1996
- */
1997
- followersIcon?: React$1.ReactNode;
1998
- /**
1999
- * تابع کلیک روی کارت
2000
- */
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;
2962
+ }
2963
+ /**
2964
+ * Flags indicate which enrichments the product has attached to this post.
2965
+ * Consumers set these to show the matching chip in `<PostHeader>`.
2966
+ */
2967
+ interface PostEnrichmentFlags {
2968
+ ocr?: boolean;
2969
+ transcript?: boolean;
2970
+ aiAnalysis?: boolean;
2971
+ commentCount?: number;
2972
+ }
2973
+ interface PostMediaItem {
2974
+ url: string;
2975
+ thumbnailUrl?: string;
2976
+ /** Natural aspect ratio (width / height). If omitted, defaults to 1. */
2977
+ aspectRatio?: number;
2978
+ alt?: string;
2979
+ type?: 'image' | 'video';
2980
+ /** Duration in seconds for video. */
2981
+ duration?: number;
2982
+ }
2983
+ type PostBodyData = {
2984
+ type: 'text';
2985
+ text: string;
2986
+ } | {
2987
+ type: 'media-single';
2988
+ media: PostMediaItem;
2989
+ caption?: string;
2990
+ } | {
2991
+ type: 'media-carousel';
2992
+ items: PostMediaItem[];
2993
+ caption?: string;
2994
+ } | {
2995
+ type: 'video';
2996
+ media: PostMediaItem;
2997
+ caption?: string;
2998
+ } | {
2999
+ type: 'missing-media';
3000
+ caption?: string;
3001
+ reason?: string;
3002
+ };
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;
3021
+ }
3022
+ interface PostAction {
3023
+ id: string;
3024
+ label: string;
3025
+ icon: LucideIcon;
3026
+ variant?: 'default' | 'danger';
3027
+ onClick: (post: PostData) => void;
3028
+ disabled?: boolean;
3029
+ hidden?: boolean;
3030
+ }
3031
+ interface PostCommentAuthor {
3032
+ name: string;
3033
+ handle?: string;
3034
+ avatarUrl?: string;
3035
+ verified?: boolean;
3036
+ }
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). */
3046
+ 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;
3075
+ }
3076
+ /** Platform-specific metadata, discriminated by `platform` (matches `PostData.source`). */
3077
+ type PlatformMetadata = {
3078
+ platform: 'instagram';
3079
+ postType?: 'feed' | 'reel' | 'story' | 'carousel' | 'igtv';
3080
+ location?: string;
3081
+ music?: {
3082
+ title: string;
3083
+ artist?: string;
3084
+ };
3085
+ saveCount?: number;
3086
+ collaborators?: string[];
3087
+ /** Hashtags used in the post. */
3088
+ hashtags?: string[];
3089
+ } | {
3090
+ platform: 'twitter';
3091
+ tweetType?: 'original' | 'retweet' | 'quote' | 'reply';
3092
+ quotedTweetUrl?: string;
3093
+ inReplyTo?: string;
3094
+ retweetCount?: number;
3095
+ quoteCount?: number;
3096
+ bookmarkCount?: number;
3097
+ isThread?: boolean;
3098
+ /** Count of additional posts in the thread. */
3099
+ threadLength?: number;
3100
+ } | {
3101
+ platform: 'youtube';
3102
+ videoType?: 'video' | 'short' | 'live' | 'premiere';
3103
+ channelSubscribers?: number;
3104
+ dislikes?: number;
3105
+ category?: string;
3106
+ tags?: string[];
3107
+ } | {
3108
+ platform: 'telegram';
3109
+ channelName?: string;
3110
+ channelSubscribers?: number;
3111
+ forwardCount?: number;
3112
+ isChannel?: boolean;
3113
+ /** Map of emoji → count, e.g. { '👍': 42, '❤️': 12 }. */
3114
+ reactionCounts?: Record<string, number>;
3115
+ } | {
3116
+ platform: 'tiktok';
3117
+ videoType?: 'video' | 'duet' | 'stitch' | 'live';
3118
+ music?: {
3119
+ title: string;
3120
+ artist?: string;
3121
+ };
3122
+ duetWith?: string;
3123
+ saveCount?: number;
3124
+ effects?: string[];
3125
+ } | {
3126
+ platform: 'linkedin';
3127
+ postType?: 'post' | 'article' | 'poll' | 'document';
3128
+ reactions?: {
3129
+ like?: number;
3130
+ celebrate?: number;
3131
+ support?: number;
3132
+ love?: number;
3133
+ insightful?: number;
3134
+ funny?: number;
3135
+ };
3136
+ repostCount?: number;
3137
+ industry?: string;
3138
+ } | {
3139
+ platform: 'threads';
3140
+ replyControls?: 'anyone' | 'followed' | 'mentioned';
3141
+ repostCount?: number;
3142
+ quoteCount?: number;
3143
+ };
3144
+ /** Extended post details — optionally attached to PostData when fetching full view. */
3145
+ interface PostDetails {
3146
+ comments?: PostComment[];
3147
+ aiAnalysis?: PostAiAnalysis;
3148
+ /** Text extracted from images via OCR. */
3149
+ ocrText?: string;
3150
+ /** Transcript for audio / video content. */
3151
+ transcript?: string;
3152
+ /** Platform-specific metadata block. */
3153
+ platformMeta?: PlatformMetadata;
3154
+ }
3155
+
3156
+ declare const postCardVariants: (props?: ({
3157
+ density?: "compact" | "comfortable" | null | undefined;
3158
+ selected?: boolean | null | undefined;
3159
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
3160
+ interface PostCardProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'onSelect'>, VariantProps<typeof postCardVariants> {
3161
+ post: PostData;
3162
+ density?: PostDensity;
3163
+ selected?: boolean;
3164
+ read?: boolean;
3165
+ actions?: PostAction[];
3166
+ onOpen?: (post: PostData) => void;
3167
+ 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
+ onOpenDetails?: (post: PostData) => void;
3171
+ }
3172
+ declare function defaultActions(handlers?: {
3173
+ onOpenDetails?: (post: PostData) => void;
3174
+ }): PostAction[];
3175
+ declare const PostCard: React$1.ForwardRefExoticComponent<PostCardProps & React$1.RefAttributes<HTMLDivElement>>;
3176
+
3177
+ declare const postHeaderVariants: (props?: ({
3178
+ density?: "compact" | "comfortable" | null | undefined;
3179
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
3180
+ interface PostHeaderProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'children'>, VariantProps<typeof postHeaderVariants> {
3181
+ author: PostAuthor;
3182
+ platform: PostPlatform;
3183
+ timestamp: Date | string | number;
3184
+ sentiment?: PostSentiment;
3185
+ enrichments?: PostEnrichmentFlags;
3186
+ density?: PostDensity;
3187
+ /** Override avatar size. */
3188
+ avatarClassName?: string;
3189
+ }
3190
+ declare const PostHeader: React$1.ForwardRefExoticComponent<PostHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
3191
+
3192
+ /**
3193
+ * Aspect-ratio helpers for post media.
3194
+ *
3195
+ * Platforms deliver media in many ratios (1:1, 4:5, 9:16, 16:9, …). The post
3196
+ * component system normalizes aspect ratios per display context so a feed of
3197
+ * mixed content looks consistent without cropping away information.
3198
+ *
3199
+ * Rules (spec §Aspect-Ratio Handling):
3200
+ * - `compact` → always 1:1 thumbnail (center-crop via object-cover).
3201
+ * - `comfortable` → container clamps aspect to [4:5, 16:9]; media inside is
3202
+ * letterboxed via `object-contain` so nothing is cropped.
3203
+ * Callers typically render a blurred backdrop of the same
3204
+ * media behind the letterboxed image to fill empty space.
3205
+ * - `detail` → preserve natural ratio; cap max-h-[70vh] for tall portraits.
3206
+ */
3207
+ type AspectContext = 'compact' | 'comfortable' | 'detail';
3208
+
3209
+ interface PostBodyProps extends React$1.HTMLAttributes<HTMLDivElement> {
3210
+ body: PostBodyData;
3211
+ /** Display context — drives aspect handling + text clamping. */
3212
+ context: AspectContext;
3213
+ /** Compact mode shows only a thumbnail; body text is rendered by parent. */
3214
+ thumbnailOnly?: boolean;
3215
+ }
3216
+ declare const PostBody: React$1.ForwardRefExoticComponent<PostBodyProps & React$1.RefAttributes<HTMLDivElement>>;
3217
+
3218
+ interface PostActionsProps extends React$1.HTMLAttributes<HTMLDivElement> {
3219
+ post: PostData;
3220
+ actions: PostAction[];
3221
+ /** Number of primary (inline) actions to render. Remaining flow into the overflow menu. */
3222
+ primaryCount?: number;
3223
+ /** Compact layout hides inline labels, shows icon-only buttons. */
3224
+ compact?: boolean;
3225
+ }
3226
+ declare const PostActions: React$1.ForwardRefExoticComponent<PostActionsProps & React$1.RefAttributes<HTMLDivElement>>;
3227
+
3228
+ interface PostMetadataProps extends React$1.HTMLAttributes<HTMLDivElement> {
3229
+ metrics?: PostMetrics;
3230
+ sentiment?: PostSentiment;
3231
+ density?: PostDensity;
3232
+ /** Hide the sentiment badge (dot still rendered in header in compact mode). */
3233
+ hideSentiment?: boolean;
3234
+ }
3235
+ declare const PostMetadata: React$1.ForwardRefExoticComponent<PostMetadataProps & React$1.RefAttributes<HTMLDivElement>>;
3236
+
3237
+ interface PostListProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'onSelect'> {
3238
+ posts: PostData[];
3239
+ /** Controlled density. If omitted, the list manages its own state (persisted to localStorage). */
3240
+ density?: PostDensity;
3241
+ onDensityChange?: (density: PostDensity) => void;
3242
+ /** ID of the currently open/selected post (for URL deep-linking). */
3243
+ activeId?: string;
3244
+ /** IDs of posts that have been visited (visual "read" state). */
3245
+ readIds?: ReadonlyArray<string> | ReadonlySet<string>;
3246
+ /** IDs of selected posts for bulk actions. */
3247
+ selectedIds?: ReadonlyArray<string> | ReadonlySet<string>;
3248
+ onSelectedIdsChange?: (ids: string[]) => void;
3249
+ onOpen?: (post: PostData) => void;
3250
+ /** Fired when the user triggers the default "view details" action on any card. */
3251
+ onOpenDetails?: (post: PostData) => void;
3252
+ /** Per-post action set. If omitted, each card uses its defaults. */
3253
+ actions?: PostAction[];
3254
+ /** Render the density toggle in the toolbar. Defaults to true. */
3255
+ showToolbar?: boolean;
3256
+ /** Custom toolbar content rendered next to the density toggle. */
3257
+ toolbarExtra?: React$1.ReactNode;
3258
+ }
3259
+ declare const PostList: React$1.ForwardRefExoticComponent<PostListProps & React$1.RefAttributes<HTMLDivElement>>;
3260
+
3261
+ /**
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.
3271
+ */
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>>;
3315
+
3316
+ 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. */
3324
+ 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. */
3338
+ bookmarked?: boolean;
3339
+ onBookmark?: (post: PostData, next: boolean) => void;
3340
+ /** Override default clipboard writer. */
3341
+ 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;
3344
+ }
3345
+ declare const PostDetailsModal: React$1.FC<PostDetailsModalProps>;
3346
+
3347
+ declare const profileCardVariants: (props?: ({
3348
+ variant?: "default" | "transparent" | "dark" | null | undefined;
3349
+ size?: "sm" | "md" | "lg" | null | undefined;
3350
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
3351
+ interface ProfileCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
3352
+ /**
3353
+ * نام کامل کاربر
3354
+ */
3355
+ name: string;
3356
+ /**
3357
+ * نام کاربری (username)
3358
+ */
3359
+ username: string;
3360
+ /**
3361
+ * آدرس تصویر پروفایل
3362
+ */
3363
+ avatarSrc?: string;
3364
+ /**
3365
+ * متن جایگزین برای تصویر
3366
+ */
3367
+ avatarAlt?: string;
3368
+ /**
3369
+ * حروف اولیه برای fallback (اختیاری)
3370
+ */
3371
+ initials?: string;
3372
+ /**
3373
+ * تعداد فالوورها
3374
+ */
3375
+ followers?: number;
3376
+ /**
3377
+ * آیکون فالوور
3378
+ */
3379
+ followersIcon?: React$1.ReactNode;
3380
+ /**
3381
+ * تابع کلیک روی کارت
3382
+ */
2001
3383
  onCardClick?: () => void;
2002
3384
  /**
2003
3385
  * استایل حاشیه آواتار
@@ -2111,6 +3493,71 @@ interface EngagementRateProps extends React$1.HTMLAttributes<HTMLDivElement> {
2111
3493
  }
2112
3494
  declare const EngagementRate: React$1.ForwardRefExoticComponent<EngagementRateProps & React$1.RefAttributes<HTMLDivElement>>;
2113
3495
 
3496
+ interface BenchmarkTier {
3497
+ /** Optional label shown below the segment (e.g., "عالی"). */
3498
+ label?: React$1.ReactNode;
3499
+ /** Inclusive upper bound of this tier. Use Infinity for the last tier. */
3500
+ max: number;
3501
+ /** CSS color — accepts any CSS value, including `hsl(var(--token))`. */
3502
+ color: string;
3503
+ }
3504
+ interface BenchmarkMarker {
3505
+ /** Position on the scale. Clamped to [min, max]. */
3506
+ value: number;
3507
+ /** Optional label shown above the marker (e.g., "میانگین صنعت"). */
3508
+ label?: React$1.ReactNode;
3509
+ /** Override the marker colour @default foreground */
3510
+ color?: string;
3511
+ }
3512
+ /**
3513
+ * Default 4-tier benchmark for engagement rate (percent). Thresholds picked
3514
+ * for general social media (Instagram/Twitter/YouTube) — override with
3515
+ * `getEngagementRateBenchmarkTiers` for follower-tiered thresholds.
3516
+ *
3517
+ * - 0–1% → poor
3518
+ * - 1–2.5% → moderate
3519
+ * - 2.5–5% → good
3520
+ * - >5% → excellent
3521
+ */
3522
+ declare function getEngagementRateBenchmarkTiers(locale?: SupportedLocale): BenchmarkTier[];
3523
+ /**
3524
+ * Default 4-tier for a 0-100 score scale (e.g., Page Evaluation overall score).
3525
+ * Thresholds: <40 poor, 40-60 moderate, 60-80 good, >=80 excellent.
3526
+ */
3527
+ declare function getScoreBenchmarkTiers(locale?: SupportedLocale): BenchmarkTier[];
3528
+ /** Find which tier index contains value `v`. */
3529
+ declare function findTierIndex(value: number, tiers: BenchmarkTier[]): number;
3530
+ interface EngagementRateBenchmarkProps extends React$1.HTMLAttributes<HTMLDivElement> {
3531
+ /** The value to mark on the scale (typically engagement rate in %). */
3532
+ value: number;
3533
+ /** Scale start @default 0 */
3534
+ min?: number;
3535
+ /** Scale end @default 10 (engagement rate %) */
3536
+ max?: number;
3537
+ /** Tier segments. Must be ordered by ascending `max`. @default getEngagementRateBenchmarkTiers(locale) */
3538
+ tiers?: BenchmarkTier[];
3539
+ /** Optional comparison markers (industry average, target, …) */
3540
+ benchmarks?: BenchmarkMarker[];
3541
+ /**
3542
+ * Label for the primary value marker. If omitted, renders the value with
3543
+ * localized digits + "٪" (fa/ar) or "%" (en).
3544
+ */
3545
+ valueLabel?: React$1.ReactNode;
3546
+ /** Show the numeric min/max under the bar @default true */
3547
+ showScale?: boolean;
3548
+ /** Show tier labels below each segment @default false */
3549
+ showTierLabels?: boolean;
3550
+ /** Bar height @default "md" */
3551
+ size?: 'sm' | 'md' | 'lg';
3552
+ /** Hide the primary value marker (e.g., when rendering multiple benchmarks only) */
3553
+ hideValueMarker?: boolean;
3554
+ /** Locale for digit + default label formatting @default "fa" */
3555
+ locale?: SupportedLocale;
3556
+ /** Number of decimals for scale labels @default 0 or 1 depending on max */
3557
+ scaleDecimals?: number;
3558
+ }
3559
+ declare const EngagementRateBenchmark: React$1.ForwardRefExoticComponent<EngagementRateBenchmarkProps & React$1.RefAttributes<HTMLDivElement>>;
3560
+
2114
3561
  interface EngagementRateBarProps extends React$1.HTMLAttributes<HTMLDivElement> {
2115
3562
  /**
2116
3563
  * نرخ تعامل فعلی (به صورت عدد اعشاری، مثلاً 0.05710 برای 5.710%)
@@ -2147,7 +3594,7 @@ declare const progressVariants: (props?: ({
2147
3594
  size?: "sm" | "md" | "lg" | null | undefined;
2148
3595
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2149
3596
  declare const progressIndicatorVariants: (props?: ({
2150
- variant?: "success" | "warning" | "destructive" | "primary" | "secondary" | null | undefined;
3597
+ variant?: "warning" | "success" | "destructive" | "primary" | "secondary" | null | undefined;
2151
3598
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2152
3599
  interface ProgressProps extends React$1.ComponentProps<typeof ProgressPrimitive.Root>, VariantProps<typeof progressVariants>, VariantProps<typeof progressIndicatorVariants> {
2153
3600
  label?: string;
@@ -2155,9 +3602,82 @@ interface ProgressProps extends React$1.ComponentProps<typeof ProgressPrimitive.
2155
3602
  }
2156
3603
  declare const Progress: React$1.ForwardRefExoticComponent<Omit<ProgressProps, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
2157
3604
 
3605
+ interface QuotaThresholds {
3606
+ /** Ratio (0..1) at which bar turns amber. @default 0.7 */
3607
+ amber: number;
3608
+ /** Ratio (0..1) at which bar turns orange. @default 0.9 */
3609
+ orange: number;
3610
+ /** Ratio (0..1) at which bar turns destructive. @default 1 */
3611
+ red: number;
3612
+ }
3613
+ declare const DEFAULT_THRESHOLDS: QuotaThresholds;
3614
+ type QuotaLevel = 'ok' | 'amber' | 'orange' | 'red';
3615
+ declare function resolveLevel(ratio: number, thresholds: QuotaThresholds): QuotaLevel;
3616
+ interface QuotaProgressBarProps extends React$1.HTMLAttributes<HTMLDivElement> {
3617
+ /** Units consumed so far (clamped to >= 0). */
3618
+ used: number;
3619
+ /** Total units allowed. Must be > 0. */
3620
+ limit: number;
3621
+ /** Optional label shown before the bar (e.g., "لایک روزانه") */
3622
+ label?: React$1.ReactNode;
3623
+ /**
3624
+ * When set, renders a colour-coded dot + default label ("پسندیدن"/"Like"/…).
3625
+ * Convenience for quota-by-action-type display; skip for generic quotas.
3626
+ */
3627
+ actionType?: ActionTypeKey;
3628
+ /** Show `used / limit` text on trailing end @default true */
3629
+ showCount?: boolean;
3630
+ /** Show percentage next to count @default false */
3631
+ showPercent?: boolean;
3632
+ /** Show ⚠ icon when the bar is at `orange` or `red` level @default true */
3633
+ showWarningIcon?: boolean;
3634
+ /** Bar height @default "sm" */
3635
+ size?: 'xs' | 'sm' | 'md' | 'lg';
3636
+ /**
3637
+ * Override colour thresholds. Ratios are `used / limit`. Defaults:
3638
+ * - amber: 0.7, orange: 0.9, red: 1.
3639
+ */
3640
+ thresholds?: Partial<QuotaThresholds>;
3641
+ /** Locale for digit + default label formatting @default "fa" */
3642
+ locale?: SupportedLocale;
3643
+ /**
3644
+ * Allow the bar to visually extend past 100% when quota is over-consumed.
3645
+ * When `true`, the fill stays at 100% of the track but a repeating stripe
3646
+ * pattern + red glow signals overflow. @default false (clamp to 100%)
3647
+ */
3648
+ showOverflow?: boolean;
3649
+ }
3650
+ declare const QuotaProgressBar: React$1.ForwardRefExoticComponent<QuotaProgressBarProps & React$1.RefAttributes<HTMLDivElement>>;
3651
+
2158
3652
  declare const RadioGroup: React$1.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
2159
3653
  declare const RadioGroupItem: React$1.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupItemProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
2160
3654
 
3655
+ interface RateLimitBannerProps extends Omit<BannerProps, 'variant' | 'icon' | 'action' | 'children'> {
3656
+ /** When the cooldown ends — Date, ISO string, or epoch ms */
3657
+ resumeAt: Date | string | number;
3658
+ /** Which action is rate-limited — renders in the title (e.g., «پسندیدن متوقف شده») */
3659
+ actionType?: ActionTypeKey;
3660
+ /** Short explanation (1-2 sentences). Falls back to a locale-specific generic. */
3661
+ reason?: React$1.ReactNode;
3662
+ /**
3663
+ * Whether to re-render every second so the countdown ticks live.
3664
+ * @default true
3665
+ */
3666
+ live?: boolean;
3667
+ /** Visual tone @default "destructive" */
3668
+ variant?: 'destructive' | 'warning';
3669
+ /**
3670
+ * Callback to retry the operation now (ignores cooldown). Rendered as an
3671
+ * action button when provided.
3672
+ */
3673
+ onRetryNow?: () => void;
3674
+ /** Override label for the retry button */
3675
+ retryLabel?: React$1.ReactNode;
3676
+ /** Locale for default strings + countdown @default "fa" */
3677
+ locale?: SupportedLocale;
3678
+ }
3679
+ declare const RateLimitBanner: React$1.ForwardRefExoticComponent<RateLimitBannerProps & React$1.RefAttributes<HTMLDivElement>>;
3680
+
2161
3681
  declare const RadioCards: React$1.ForwardRefExoticComponent<Omit<RadioGroupPrimitive.RadioGroupProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & {
2162
3682
  columns?: number;
2163
3683
  dir?: "rtl" | "ltr";
@@ -2209,58 +3729,6 @@ declare const SelectLabel: React$1.ForwardRefExoticComponent<Omit<SelectPrimitiv
2209
3729
  declare const SelectItem: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
2210
3730
  declare const SelectSeparator: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
2211
3731
 
2212
- declare function Sheet({ ...props }: React$1.ComponentProps<typeof DialogPrimitive.Root>): react_jsx_runtime.JSX.Element;
2213
- declare namespace Sheet {
2214
- var displayName: string;
2215
- }
2216
- declare function SheetTrigger({ ...props }: React$1.ComponentProps<typeof DialogPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
2217
- declare namespace SheetTrigger {
2218
- var displayName: string;
2219
- }
2220
- declare function SheetClose({ ...props }: React$1.ComponentProps<typeof DialogPrimitive.Close>): react_jsx_runtime.JSX.Element;
2221
- declare namespace SheetClose {
2222
- var displayName: string;
2223
- }
2224
- declare function SheetContent({ className, children, side, ...props }: React$1.ComponentProps<typeof DialogPrimitive.Content> & {
2225
- side?: 'top' | 'right' | 'bottom' | 'left';
2226
- }): react_jsx_runtime.JSX.Element;
2227
- declare namespace SheetContent {
2228
- var displayName: string;
2229
- }
2230
- declare function SheetHeader({ className, ...props }: React$1.ComponentProps<'div'>): react_jsx_runtime.JSX.Element;
2231
- declare namespace SheetHeader {
2232
- var displayName: string;
2233
- }
2234
- declare function SheetBody({ className, ...props }: React$1.ComponentProps<'div'>): react_jsx_runtime.JSX.Element;
2235
- declare namespace SheetBody {
2236
- var displayName: string;
2237
- }
2238
- declare function SheetFooter({ className, ...props }: React$1.ComponentProps<'div'>): react_jsx_runtime.JSX.Element;
2239
- declare namespace SheetFooter {
2240
- var displayName: string;
2241
- }
2242
- declare function SheetTitle({ className, ...props }: React$1.ComponentProps<typeof DialogPrimitive.Title>): react_jsx_runtime.JSX.Element;
2243
- declare namespace SheetTitle {
2244
- var displayName: string;
2245
- }
2246
- declare function SheetDescription({ className, ...props }: React$1.ComponentProps<typeof DialogPrimitive.Description>): react_jsx_runtime.JSX.Element;
2247
- declare namespace SheetDescription {
2248
- var displayName: string;
2249
- }
2250
-
2251
- declare const TooltipProvider: React$1.FC<TooltipPrimitive.TooltipProviderProps>;
2252
- declare const Tooltip: React$1.FC<TooltipPrimitive.TooltipProps>;
2253
- declare const TooltipTrigger: React$1.ForwardRefExoticComponent<TooltipPrimitive.TooltipTriggerProps & React$1.RefAttributes<HTMLButtonElement>>;
2254
- interface TooltipContentProps extends React$1.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> {
2255
- /** Visual variant */
2256
- variant?: 'default' | 'light' | 'error';
2257
- /** Size */
2258
- size?: 'sm' | 'md';
2259
- /** Show arrow/caret pointing to trigger */
2260
- showArrow?: boolean;
2261
- }
2262
- declare const TooltipContent: React$1.ForwardRefExoticComponent<TooltipContentProps & React$1.RefAttributes<HTMLDivElement>>;
2263
-
2264
3732
  type SidebarContextProps = {
2265
3733
  state: 'expanded' | 'collapsed';
2266
3734
  open: boolean;
@@ -2269,12 +3737,23 @@ type SidebarContextProps = {
2269
3737
  setOpenMobile: (open: boolean) => void;
2270
3738
  isMobile: boolean;
2271
3739
  toggleSidebar: () => void;
3740
+ /**
3741
+ * When true, the sidebar is positioned absolutely within its parent wrapper
3742
+ * instead of fixed to the viewport. Use inside bounded previews, cards,
3743
+ * or anywhere the sidebar should not escape its container.
3744
+ */
3745
+ contained: boolean;
2272
3746
  };
2273
3747
  declare function useSidebar(): SidebarContextProps;
2274
- declare function SidebarProvider({ defaultOpen, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }: React$1.ComponentProps<'div'> & {
3748
+ declare function SidebarProvider({ defaultOpen, open: openProp, onOpenChange: setOpenProp, contained, className, style, children, ...props }: React$1.ComponentProps<'div'> & {
2275
3749
  defaultOpen?: boolean;
2276
3750
  open?: boolean;
2277
3751
  onOpenChange?: (open: boolean) => void;
3752
+ /**
3753
+ * When true, the sidebar is positioned absolutely within this provider
3754
+ * instead of fixed to the viewport. Use inside bounded previews or cards.
3755
+ */
3756
+ contained?: boolean;
2278
3757
  }): react_jsx_runtime.JSX.Element;
2279
3758
  declare function Sidebar({ side, variant, collapsible, className, children, ...props }: React$1.ComponentProps<'div'> & {
2280
3759
  side?: 'left' | 'right';
@@ -2410,6 +3889,52 @@ declare function TableSkeleton({ rows, className }: TableSkeletonProps): react_j
2410
3889
  declare namespace TableSkeleton {
2411
3890
  var displayName: string;
2412
3891
  }
3892
+ interface TableRowSkeletonProps {
3893
+ /** Number of cells in the row */
3894
+ cells?: number;
3895
+ className?: string;
3896
+ }
3897
+ declare function TableRowSkeleton({ cells, className }: TableRowSkeletonProps): react_jsx_runtime.JSX.Element;
3898
+ declare namespace TableRowSkeleton {
3899
+ var displayName: string;
3900
+ }
3901
+ interface CardSkeletonProps {
3902
+ /** Show a leading image/thumbnail block @default false */
3903
+ withImage?: boolean;
3904
+ /** Aspect ratio of the image (when withImage) @default 'video' */
3905
+ imageAspect?: 'video' | 'square' | 'wide';
3906
+ /** Number of body lines @default 2 */
3907
+ bodyLines?: number;
3908
+ /** Show a footer row (button-shaped placeholder) @default false */
3909
+ withFooter?: boolean;
3910
+ className?: string;
3911
+ }
3912
+ declare function CardSkeleton({ withImage, imageAspect, bodyLines, withFooter, className, }: CardSkeletonProps): react_jsx_runtime.JSX.Element;
3913
+ declare namespace CardSkeleton {
3914
+ var displayName: string;
3915
+ }
3916
+ interface AvatarTextSkeletonProps {
3917
+ /** Avatar size @default 'md' */
3918
+ size?: 'sm' | 'md' | 'lg';
3919
+ /** Number of text lines beside the avatar @default 2 */
3920
+ lines?: number;
3921
+ className?: string;
3922
+ }
3923
+ declare function AvatarTextSkeleton({ size, lines, className }: AvatarTextSkeletonProps): react_jsx_runtime.JSX.Element;
3924
+ declare namespace AvatarTextSkeleton {
3925
+ var displayName: string;
3926
+ }
3927
+ interface FormRowSkeletonProps {
3928
+ /** Field shape — 'input' (one-line), 'textarea' (3-line), 'select' (input + chevron) */
3929
+ field?: 'input' | 'textarea' | 'select';
3930
+ /** Show help text line below input @default false */
3931
+ withHelp?: boolean;
3932
+ className?: string;
3933
+ }
3934
+ declare function FormRowSkeleton({ field, withHelp, className }: FormRowSkeletonProps): react_jsx_runtime.JSX.Element;
3935
+ declare namespace FormRowSkeleton {
3936
+ var displayName: string;
3937
+ }
2413
3938
 
2414
3939
  declare function Slider({ className, defaultValue, value, min, max, dir, ...props }: React$1.ComponentProps<typeof SliderPrimitive.Root>): react_jsx_runtime.JSX.Element;
2415
3940
  declare namespace Slider {
@@ -2432,7 +3957,7 @@ interface SpinnerProps extends React$1.HTMLAttributes<HTMLSpanElement>, VariantP
2432
3957
  declare const Spinner: React$1.ForwardRefExoticComponent<SpinnerProps & React$1.RefAttributes<HTMLSpanElement>>;
2433
3958
 
2434
3959
  declare const switchRootVariants: (props?: ({
2435
- size?: "sm" | "md" | "lg" | "small" | "medium" | "large" | null | undefined;
3960
+ size?: "medium" | "sm" | "md" | "lg" | "small" | "large" | null | undefined;
2436
3961
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2437
3962
  interface SwitchProps extends React$1.ComponentPropsWithoutRef<typeof SwitchPrimitive.Root>, VariantProps<typeof switchRootVariants> {
2438
3963
  }
@@ -2626,6 +4151,197 @@ interface StepProps extends React$1.HTMLAttributes<HTMLDivElement> {
2626
4151
  declare const Stepper: React$1.ForwardRefExoticComponent<StepperProps & React$1.RefAttributes<HTMLDivElement>>;
2627
4152
  declare const Step: React$1.ForwardRefExoticComponent<StepProps & React$1.RefAttributes<HTMLDivElement>>;
2628
4153
 
4154
+ interface StatusFlowStageData {
4155
+ /** Stable identifier */
4156
+ id: string;
4157
+ /** Display label */
4158
+ label: React$1.ReactNode;
4159
+ /** Optional one-line description under the label */
4160
+ description?: React$1.ReactNode;
4161
+ /** Optional trailing meta (duration, count, …) shown next to the label */
4162
+ meta?: React$1.ReactNode;
4163
+ /** Status of this stage */
4164
+ status: StageStatusKey;
4165
+ /** Progress 0-100 within this stage. Rendered only when `status === "running"`. */
4166
+ progress?: number;
4167
+ }
4168
+ type StatusFlowOrientation = 'horizontal' | 'vertical';
4169
+ type StatusFlowSize = 'sm' | 'md' | 'lg';
4170
+ interface StatusFlowProps extends Omit<React$1.OlHTMLAttributes<HTMLOListElement>, 'children'> {
4171
+ /** Data-driven stage list. Mutually exclusive with `children`. */
4172
+ stages?: StatusFlowStageData[];
4173
+ /** Composition API — an array of `<StatusFlowStage>` children. */
4174
+ children?: React$1.ReactNode;
4175
+ /** Layout @default "horizontal" */
4176
+ orientation?: StatusFlowOrientation;
4177
+ /** Size @default "md" */
4178
+ size?: StatusFlowSize;
4179
+ /** Whether labels below/beside markers are shown. @default true */
4180
+ showLabels?: boolean;
4181
+ /** Locale for digits + accessible announcements @default "fa" */
4182
+ locale?: SupportedLocale;
4183
+ /** Fires when a stage marker is clicked. When set, markers become buttons. */
4184
+ onStageSelect?: (stage: StatusFlowStageData, index: number) => void;
4185
+ }
4186
+ interface StatusFlowStageProps extends Omit<StatusFlowStageData, 'id'> {
4187
+ id?: string;
4188
+ }
4189
+ /**
4190
+ * Optional composition wrapper. Use this or the `stages` prop on
4191
+ * `<StatusFlow>` — not both. StatusFlow injects position metadata as
4192
+ * internal props; StatusFlowStage should not be rendered outside.
4193
+ */
4194
+ declare function StatusFlowStage(props: StatusFlowStageProps): React$1.ReactElement;
4195
+ declare const StatusFlow: React$1.ForwardRefExoticComponent<StatusFlowProps & React$1.RefAttributes<HTMLOListElement>>;
4196
+
4197
+ interface JobWizardStep {
4198
+ /** Stable identifier — referenced by `validateStep`, `goToStep`, etc. */
4199
+ id: string;
4200
+ /** Step title (shown in stepper + header when this step is active) */
4201
+ title: string;
4202
+ /** Optional one-line description under the title */
4203
+ description?: string;
4204
+ /** Mark step as optional — a "Skip" button appears. @default false */
4205
+ optional?: boolean;
4206
+ /**
4207
+ * Branching: resolve the next step id based on current data. Returning a
4208
+ * known step id navigates there (skipping any steps in between); returning
4209
+ * `null` marks the wizard as terminal (the Next button submits); returning
4210
+ * `undefined` falls back to the natural linear `currentIndex + 1`.
4211
+ *
4212
+ * Cast `data` to your wizard's data shape inside the callback.
4213
+ */
4214
+ nextStep?: (data: Partial<Record<string, unknown>>) => string | null | undefined;
4215
+ }
4216
+ /** Result of a validator — `null`/`undefined` = pass, `string` = single error, `Record<field, message>` = field errors */
4217
+ type JobWizardValidationResult = string | Record<string, string> | null | undefined;
4218
+ type JobWizardSubmitState = 'idle' | 'submitting' | 'success' | 'error';
4219
+ interface UseJobWizardOptions<TData extends Record<string, unknown>> {
4220
+ /** Ordered list of steps. Pass a new array reference when the step list should change dynamically (e.g. branching). */
4221
+ steps: JobWizardStep[];
4222
+ /** Initial form data */
4223
+ initialData?: Partial<TData>;
4224
+ /**
4225
+ * Validator fired before navigating to the next step. Also runs for each step
4226
+ * on submit if `validateAllOnSubmit` is true.
4227
+ *
4228
+ * Return `null`/`undefined` to pass, or an error (string or field-map) to block navigation.
4229
+ */
4230
+ validateStep?: (stepId: string, data: Partial<TData>) => JobWizardValidationResult | Promise<JobWizardValidationResult>;
4231
+ /** Called when the user confirms the last step. May return a Promise. */
4232
+ onSubmit: (data: TData) => Promise<unknown> | unknown;
4233
+ /** Called when the user clicks Cancel */
4234
+ onCancel?: () => void;
4235
+ /** When set, drafts are persisted to localStorage under this key. */
4236
+ draftKey?: string;
4237
+ /** Debounce (ms) for draft save. @default 300 */
4238
+ draftDebounceMs?: number;
4239
+ /** Validate all steps (in order) on submit. Default false — only the current step is validated before submit. */
4240
+ validateAllOnSubmit?: boolean;
4241
+ }
4242
+ interface JobWizardApi<TData extends Record<string, unknown>> {
4243
+ /** Current step (resolved from `steps[currentIndex]`). */
4244
+ readonly currentStep: JobWizardStep;
4245
+ readonly currentIndex: number;
4246
+ readonly isFirst: boolean;
4247
+ readonly isLast: boolean;
4248
+ readonly steps: JobWizardStep[];
4249
+ /** Mutable form data (merged across all steps). */
4250
+ readonly data: Partial<TData>;
4251
+ /** Replace the data object. */
4252
+ setData: React$1.Dispatch<React$1.SetStateAction<Partial<TData>>>;
4253
+ /** Shallow-merge the given patch into `data`. */
4254
+ update: (patch: Partial<TData>) => void;
4255
+ /** Current error. String = whole-step error, Record = per-field errors. */
4256
+ readonly error: string | Record<string, string> | null;
4257
+ /** Clear the current error. */
4258
+ clearError: () => void;
4259
+ /** Submit state lifecycle. */
4260
+ readonly submitState: JobWizardSubmitState;
4261
+ readonly submitResult: unknown;
4262
+ readonly submitError: Error | null;
4263
+ /** Advance to the next step. Runs validation first. Returns true if navigated. */
4264
+ next: () => Promise<boolean>;
4265
+ /** Go back to the previous step. */
4266
+ back: () => void;
4267
+ /** Jump to a specific step by id. Does NOT validate. */
4268
+ goToStep: (id: string) => void;
4269
+ /** Fire onSubmit. Runs validation first (current step only, unless `validateAllOnSubmit`). */
4270
+ submit: () => Promise<void>;
4271
+ /** Fire onCancel if provided. */
4272
+ cancel: () => void;
4273
+ /** Reset wizard to first step + `initialData` + idle state. Also clears draft. */
4274
+ reset: () => void;
4275
+ /** Remove the saved draft from localStorage (if `draftKey` set). */
4276
+ clearDraft: () => void;
4277
+ /** True iff the step at this id has been visited. */
4278
+ isStepVisited: (id: string) => boolean;
4279
+ /** Resolved stage status for the StatusFlow stepper. */
4280
+ stageStatus: (step: JobWizardStep, index: number) => StageStatusKey;
4281
+ }
4282
+ declare function useJobWizard<TData extends Record<string, unknown>>(options: UseJobWizardOptions<TData>): JobWizardApi<TData>;
4283
+ /** Hook to access the wizard from within nested components. */
4284
+ declare function useJobWizardState<TData extends Record<string, unknown> = Record<string, unknown>>(): JobWizardApi<TData>;
4285
+ interface JobWizardProps extends React$1.HTMLAttributes<HTMLDivElement> {
4286
+ /** Wizard API from `useJobWizard`. */
4287
+ wizard: JobWizardApi<Record<string, unknown>>;
4288
+ /** Locale @default "fa" */
4289
+ locale?: SupportedLocale;
4290
+ }
4291
+ declare const JobWizard: React$1.ForwardRefExoticComponent<JobWizardProps & React$1.RefAttributes<HTMLDivElement>>;
4292
+ interface JobWizardHeaderProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'title'> {
4293
+ /** Main title of the wizard (persistent across steps). If omitted, shows the current step's title. */
4294
+ title?: React$1.ReactNode;
4295
+ /** Short description / context line under the title. */
4296
+ description?: React$1.ReactNode;
4297
+ /** Trailing slot (e.g. a close button). */
4298
+ trailing?: React$1.ReactNode;
4299
+ }
4300
+ declare const JobWizardHeader: React$1.ForwardRefExoticComponent<JobWizardHeaderProps & React$1.RefAttributes<HTMLDivElement>>;
4301
+ interface JobWizardStepperProps {
4302
+ /** Orientation @default "horizontal" */
4303
+ orientation?: 'horizontal' | 'vertical';
4304
+ /** Size @default "md" */
4305
+ size?: 'sm' | 'md' | 'lg';
4306
+ /** Allow clicking visited steps to jump back. @default true */
4307
+ allowJump?: boolean;
4308
+ className?: string;
4309
+ }
4310
+ declare const JobWizardStepper: React$1.FC<JobWizardStepperProps>;
4311
+ declare const JobWizardBody: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
4312
+ declare const JobWizardError: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
4313
+ declare const JobWizardFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
4314
+ /** Invisible flex spacer — pushes following buttons to the logical end. */
4315
+ declare const JobWizardSpacer: React$1.FC;
4316
+ interface JobWizardBackProps extends Omit<React$1.ComponentProps<typeof Button>, 'onClick'> {
4317
+ /** Override label */
4318
+ children?: React$1.ReactNode;
4319
+ }
4320
+ declare const JobWizardBack: React$1.ForwardRefExoticComponent<Omit<JobWizardBackProps, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
4321
+ interface JobWizardNextProps extends Omit<React$1.ComponentProps<typeof Button>, 'onClick'> {
4322
+ /** Override label (not applied when on last step — uses `submitLabel` then) */
4323
+ children?: React$1.ReactNode;
4324
+ /** Label for the submit button when on the last step */
4325
+ submitLabel?: React$1.ReactNode;
4326
+ }
4327
+ declare const JobWizardNext: React$1.ForwardRefExoticComponent<Omit<JobWizardNextProps, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
4328
+ interface JobWizardCancelProps extends Omit<React$1.ComponentProps<typeof Button>, 'onClick'> {
4329
+ children?: React$1.ReactNode;
4330
+ }
4331
+ declare const JobWizardCancel: React$1.ForwardRefExoticComponent<Omit<JobWizardCancelProps, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
4332
+ interface JobWizardSkipProps extends Omit<React$1.ComponentProps<typeof Button>, 'onClick'> {
4333
+ children?: React$1.ReactNode;
4334
+ }
4335
+ declare const JobWizardSkip: React$1.ForwardRefExoticComponent<Omit<JobWizardSkipProps, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
4336
+ interface JobWizardSuccessProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'title'> {
4337
+ title?: React$1.ReactNode;
4338
+ description?: React$1.ReactNode;
4339
+ actions?: React$1.ReactNode;
4340
+ /** Only render children when submitState === 'success' @default true */
4341
+ autoShow?: boolean;
4342
+ }
4343
+ declare const JobWizardSuccess: React$1.ForwardRefExoticComponent<JobWizardSuccessProps & React$1.RefAttributes<HTMLDivElement>>;
4344
+
2629
4345
  interface SentimentBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
2630
4346
  /** Sentiment type */
2631
4347
  sentiment: 'positive' | 'negative' | 'neutral' | 'mixed';
@@ -2640,28 +4356,111 @@ interface SentimentBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
2640
4356
  }
2641
4357
  declare const SentimentBadge: React$1.ForwardRefExoticComponent<SentimentBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
2642
4358
 
2643
- interface MultiSelectOption {
2644
- value: string;
2645
- label: string;
2646
- disabled?: boolean;
4359
+ interface EmotionBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
4360
+ /** Emotion (9-class advanced sentiment scale) */
4361
+ emotion: EmotionKey;
4362
+ /** Optional count — shown alongside the label */
4363
+ count?: number;
4364
+ /** Size variant */
4365
+ size?: 'sm' | 'md';
4366
+ /** Show the text label. When false, renders an icon-only chip (aria-label kept). */
4367
+ showLabel?: boolean;
4368
+ /** Locale for label + digit formatting */
4369
+ locale?: SupportedLocale;
2647
4370
  }
2648
- interface MultiSelectProps {
2649
- /** All available options */
2650
- options: MultiSelectOption[];
2651
- /** Currently selected values */
2652
- value?: string[];
2653
- /** Callback fired when selection changes */
2654
- onValueChange?: (value: string[]) => void;
2655
- /** Placeholder text when nothing is selected */
2656
- placeholder?: string;
2657
- /** Disables the entire control */
2658
- disabled?: boolean;
2659
- /** Shows loading skeleton in dropdown */
2660
- isLoading?: boolean;
2661
- /** Maximum number of items that can be selected */
2662
- maxSelected?: number;
2663
- /** How many selected chips to display before collapsing into a count badge */
2664
- maxDisplayed?: number;
4371
+ declare const EmotionBadge: React$1.ForwardRefExoticComponent<EmotionBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
4372
+
4373
+ type EmotionData = Partial<Record<EmotionKey, number>>;
4374
+ interface EmotionDistributionProps extends React$1.HTMLAttributes<HTMLDivElement> {
4375
+ /** Emotion counts (auto-normalized to 100%). Missing keys are treated as 0. */
4376
+ data: EmotionData;
4377
+ /** Display mode */
4378
+ variant?: 'bars' | 'stacked' | 'compact';
4379
+ /**
4380
+ * For 'compact' and 'bars': limit to the top-N emotions by value. Leftover
4381
+ * contributions roll up into a muted "بقیه" chip so totals still make sense.
4382
+ * Default 5 matches the canonical تحلیل افکار summary density.
4383
+ */
4384
+ topN?: number;
4385
+ /** Show numeric count labels (in addition to percent). */
4386
+ showCounts?: boolean;
4387
+ /** Show percentage labels. */
4388
+ showPercent?: boolean;
4389
+ /** Locale for label + digit formatting */
4390
+ locale?: SupportedLocale;
4391
+ /** Loading skeleton */
4392
+ isLoading?: boolean;
4393
+ }
4394
+ declare const EmotionDistribution: React$1.ForwardRefExoticComponent<EmotionDistributionProps & React$1.RefAttributes<HTMLDivElement>>;
4395
+
4396
+ interface FlowBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
4397
+ /** Flow classification */
4398
+ flow: FlowKey;
4399
+ /** Optional count shown alongside the label */
4400
+ count?: number;
4401
+ /** Size */
4402
+ size?: 'sm' | 'md';
4403
+ /** Whether to render the text label (keeps aria-label when false) */
4404
+ showLabel?: boolean;
4405
+ /** Locale for label + digit formatting */
4406
+ locale?: SupportedLocale;
4407
+ }
4408
+ declare const FlowBadge: React$1.ForwardRefExoticComponent<FlowBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
4409
+
4410
+ interface StatusBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
4411
+ /** Operational status */
4412
+ status: StatusKey;
4413
+ /** Size */
4414
+ size?: 'sm' | 'md';
4415
+ /** Show text label (keeps aria-label when false) */
4416
+ showLabel?: boolean;
4417
+ /** Locale */
4418
+ locale?: SupportedLocale;
4419
+ /**
4420
+ * Explicitly enable/disable the pulse animation on the indicator dot.
4421
+ * Default: animated only for `status="critical"`. Pair with
4422
+ * `prefers-reduced-motion` (already honoured globally in globals.css).
4423
+ */
4424
+ animated?: boolean;
4425
+ }
4426
+ declare const StatusBadge: React$1.ForwardRefExoticComponent<StatusBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
4427
+
4428
+ interface SeverityBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
4429
+ /** Urgency level — independent from operational status */
4430
+ severity: SeverityKey;
4431
+ /** Size */
4432
+ size?: 'sm' | 'md';
4433
+ /** Show text label */
4434
+ showLabel?: boolean;
4435
+ /** Render as a solid chip instead of the soft tinted pill (for high-contrast lists) */
4436
+ variant?: 'soft' | 'solid';
4437
+ /** Locale */
4438
+ locale?: SupportedLocale;
4439
+ }
4440
+ declare const SeverityBadge: React$1.ForwardRefExoticComponent<SeverityBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
4441
+
4442
+ interface MultiSelectOption {
4443
+ value: string;
4444
+ label: string;
4445
+ disabled?: boolean;
4446
+ }
4447
+ interface MultiSelectProps {
4448
+ /** All available options */
4449
+ options: MultiSelectOption[];
4450
+ /** Currently selected values */
4451
+ value?: string[];
4452
+ /** Callback fired when selection changes */
4453
+ onValueChange?: (value: string[]) => void;
4454
+ /** Placeholder text when nothing is selected */
4455
+ placeholder?: string;
4456
+ /** Disables the entire control */
4457
+ disabled?: boolean;
4458
+ /** Shows loading skeleton in dropdown */
4459
+ isLoading?: boolean;
4460
+ /** Maximum number of items that can be selected */
4461
+ maxSelected?: number;
4462
+ /** How many selected chips to display before collapsing into a count badge */
4463
+ maxDisplayed?: number;
2665
4464
  /** Locale for display and default strings */
2666
4465
  locale?: SupportedLocale;
2667
4466
  /** Additional className on the trigger */
@@ -2696,23 +4495,6 @@ interface PeriodSelectorProps {
2696
4495
  }
2697
4496
  declare const PeriodSelector: React$1.ForwardRefExoticComponent<PeriodSelectorProps & React$1.RefAttributes<HTMLDivElement>>;
2698
4497
 
2699
- type SocialPlatform = 'instagram' | 'twitter' | 'tiktok' | 'youtube' | 'linkedin' | 'telegram' | 'threads';
2700
- interface SocialPlatformBadgeProps extends React$1.HTMLAttributes<HTMLSpanElement> {
2701
- /** The social media platform to display */
2702
- platform: SocialPlatform;
2703
- /** Size of the badge */
2704
- size?: 'xs' | 'sm' | 'md' | 'lg';
2705
- /** Show the platform name label */
2706
- showLabel?: boolean;
2707
- /** Visual style of the badge */
2708
- variant?: 'flat' | 'badge';
2709
- }
2710
- declare const socialPlatformBadgeVariants: (props?: ({
2711
- size?: "xs" | "sm" | "md" | "lg" | null | undefined;
2712
- variant?: "flat" | "badge" | null | undefined;
2713
- } & class_variance_authority_types.ClassProp) | undefined) => string;
2714
- declare const SocialPlatformBadge: React$1.ForwardRefExoticComponent<SocialPlatformBadgeProps & React$1.RefAttributes<HTMLSpanElement>>;
2715
-
2716
4498
  interface SearchInputProps extends Omit<React$1.InputHTMLAttributes<HTMLInputElement>, 'size'>, VariantProps<typeof InputVariants> {
2717
4499
  /** Locale for placeholder and aria labels */
2718
4500
  locale?: SupportedLocale;
@@ -2731,28 +4513,6 @@ interface SearchInputProps extends Omit<React$1.InputHTMLAttributes<HTMLInputEle
2731
4513
  }
2732
4514
  declare const SearchInput: React$1.ForwardRefExoticComponent<SearchInputProps & React$1.RefAttributes<HTMLInputElement>>;
2733
4515
 
2734
- interface SentimentData {
2735
- positive: number;
2736
- negative: number;
2737
- neutral: number;
2738
- mixed?: number;
2739
- }
2740
- interface SentimentDistributionProps extends React$1.HTMLAttributes<HTMLDivElement> {
2741
- /** Sentiment counts (will be auto-normalized to 100%) */
2742
- data: SentimentData;
2743
- /** Display mode */
2744
- variant?: 'bars' | 'stacked' | 'compact';
2745
- /** Show numeric count labels */
2746
- showCounts?: boolean;
2747
- /** Show percentage labels */
2748
- showPercent?: boolean;
2749
- /** Locale for number/label formatting */
2750
- locale?: SupportedLocale;
2751
- /** Show loading skeleton */
2752
- isLoading?: boolean;
2753
- }
2754
- declare const SentimentDistribution: React$1.ForwardRefExoticComponent<SentimentDistributionProps & React$1.RefAttributes<HTMLDivElement>>;
2755
-
2756
4516
  interface ComparisonCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
2757
4517
  /** Card title */
2758
4518
  title: string;
@@ -2785,74 +4545,197 @@ interface ComparisonCardProps extends React$1.HTMLAttributes<HTMLDivElement> {
2785
4545
  }
2786
4546
  declare const ComparisonCard: React$1.ForwardRefExoticComponent<ComparisonCardProps & React$1.RefAttributes<HTMLDivElement>>;
2787
4547
 
2788
- type SortDirection = 'asc' | 'desc';
2789
- interface DataTableColumn<TData> {
2790
- /** Unique key identifying the column used for sort callbacks */
2791
- id: string;
2792
- /** Column header label */
2793
- header: React$1.ReactNode;
2794
- /** Render function for cell content */
2795
- cell: (row: TData, rowIndex: number) => React$1.ReactNode;
2796
- /** Whether this column is sortable */
2797
- sortable?: boolean;
2798
- /** Additional className for both <th> and <td> */
4548
+ /**
4549
+ * data-table-cells — opinionated thin wrappers around DS primitives, sized
4550
+ * and styled for use as `DataTableColumn.cell` values. Each cell renderer
4551
+ * gives a consistent inline footprint (no margin/padding chrome) and pairs
4552
+ * a chart/badge with optional numeric value text.
4553
+ *
4554
+ * Usage:
4555
+ * columns={[
4556
+ * {
4557
+ * id: 'engagement',
4558
+ * header: 'تعامل',
4559
+ * cell: (row) => <SparklineCell data={row.history} value={row.eRate} suffix="٪" />,
4560
+ * },
4561
+ * ...
4562
+ * ]}
4563
+ */
4564
+ interface SparklineCellProps {
4565
+ /** History values (typically 6-12 points) */
4566
+ data: number[];
4567
+ /** Optional numeric value shown after the sparkline */
4568
+ value?: number;
4569
+ /** Suffix appended to value (e.g., '٪') */
4570
+ suffix?: React$1.ReactNode;
4571
+ /** Sparkline width in px @default 64 */
4572
+ width?: number;
4573
+ /** Sparkline height in px @default 18 */
4574
+ height?: number;
4575
+ /** Sparkline visual variant @default 'line' */
4576
+ variant?: 'line' | 'area' | 'bars';
4577
+ /** Override trend color (auto-detected from first vs last) */
4578
+ trend?: 'up' | 'down' | 'neutral';
4579
+ /** Locale @default 'fa' */
4580
+ locale?: SupportedLocale;
4581
+ /** Decimal places for value @default 0 */
4582
+ decimals?: number;
2799
4583
  className?: string;
2800
- /** Column alignment */
2801
- align?: 'start' | 'center' | 'end';
2802
4584
  }
2803
- interface DataTablePagination {
2804
- currentPage: number;
2805
- totalPages: number;
2806
- onPageChange: (page: number) => void;
4585
+ declare const SparklineCell: React$1.ForwardRefExoticComponent<SparklineCellProps & React$1.RefAttributes<HTMLDivElement>>;
4586
+ interface TrendCellProps {
4587
+ /** Numeric delta. Positive=up, negative=down, zero=flat. */
4588
+ value: number;
4589
+ /** Suffix (e.g., '٪'). */
4590
+ suffix?: React$1.ReactNode;
4591
+ /** Show the absolute value text alongside the arrow @default true */
4592
+ showValue?: boolean;
4593
+ /** Inverted trend (lower=better) — colours flip */
4594
+ invert?: boolean;
4595
+ /** Locale @default 'fa' */
4596
+ locale?: SupportedLocale;
4597
+ className?: string;
2807
4598
  }
2808
- interface DataTableSort {
2809
- column: string | null;
2810
- direction: SortDirection | null;
2811
- onSort: (column: string, direction: SortDirection) => void;
4599
+ declare const TrendCell: React$1.ForwardRefExoticComponent<TrendCellProps & React$1.RefAttributes<HTMLSpanElement>>;
4600
+ interface StatusPulseCellProps {
4601
+ status: StatusKey;
4602
+ /** Optional label after the dot (omit for ultra-compact rows) */
4603
+ label?: React$1.ReactNode;
4604
+ /** Locale (forwarded to StatusBadge for default labels) */
4605
+ locale?: SupportedLocale;
4606
+ className?: string;
2812
4607
  }
2813
- interface DataTableSelection<TData> {
2814
- selectedRows: Set<number>;
2815
- onSelectionChange: (selectedRows: Set<number>) => void;
2816
- /** Function to get a unique key for each row (defaults to index) */
2817
- getRowKey?: (row: TData, index: number) => number;
4608
+ declare const StatusPulseCell: React$1.ForwardRefExoticComponent<StatusPulseCellProps & React$1.RefAttributes<HTMLSpanElement>>;
4609
+ interface SentimentCellProps {
4610
+ /** Sentiment counts. */
4611
+ data: SentimentData;
4612
+ /** Visual mode @default 'stacked' */
4613
+ variant?: 'stacked' | 'bars' | 'compact';
4614
+ /** Width of the inline bar @default 80 */
4615
+ width?: number;
4616
+ /** Locale */
4617
+ locale?: SupportedLocale;
4618
+ className?: string;
2818
4619
  }
2819
- interface DataTableProps<TData> {
2820
- /** Column definitions */
4620
+ declare const SentimentCell: React$1.ForwardRefExoticComponent<SentimentCellProps & React$1.RefAttributes<HTMLDivElement>>;
4621
+ interface FlowCellProps {
4622
+ /** Flow counts. */
4623
+ data: FlowData;
4624
+ /** Visual mode @default 'stacked' */
4625
+ variant?: 'stacked' | 'bars' | 'compact';
4626
+ /** Width of the inline bar @default 96 */
4627
+ width?: number;
4628
+ /** Locale */
4629
+ locale?: SupportedLocale;
4630
+ className?: string;
4631
+ }
4632
+ declare const FlowCell: React$1.ForwardRefExoticComponent<FlowCellProps & React$1.RefAttributes<HTMLDivElement>>;
4633
+ interface ProgressCellProps {
4634
+ /** Progress 0–100 */
4635
+ value: number;
4636
+ /** Show value text after the bar @default true */
4637
+ showValue?: boolean;
4638
+ /** Suffix on value (e.g., '٪'). Defaults to locale-appropriate %. */
4639
+ suffix?: React$1.ReactNode;
4640
+ /** Variant for color */
4641
+ variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'destructive';
4642
+ /** Bar width @default 80 */
4643
+ width?: number;
4644
+ /** Locale @default 'fa' */
4645
+ locale?: SupportedLocale;
4646
+ className?: string;
4647
+ }
4648
+ declare const ProgressCell: React$1.ForwardRefExoticComponent<ProgressCellProps & React$1.RefAttributes<HTMLDivElement>>;
4649
+ interface StatDeltaCellProps {
4650
+ /** Primary value (e.g., 1240) */
4651
+ value: number | string;
4652
+ /** Delta (positive=up). Hidden if undefined. */
4653
+ delta?: number;
4654
+ /** Format the value with locale digits @default true (when value is number) */
4655
+ formatValue?: boolean;
4656
+ /** Suffix on value */
4657
+ valueSuffix?: React$1.ReactNode;
4658
+ /** Suffix on delta */
4659
+ deltaSuffix?: React$1.ReactNode;
4660
+ /** Inverted trend (lower=better) */
4661
+ invertDelta?: boolean;
4662
+ /** Locale */
4663
+ locale?: SupportedLocale;
4664
+ className?: string;
4665
+ }
4666
+ declare const StatDeltaCell: React$1.ForwardRefExoticComponent<StatDeltaCellProps & React$1.RefAttributes<HTMLSpanElement>>;
4667
+
4668
+ interface DataTableColumnVisibilityToggleProps<TData> {
2821
4669
  columns: DataTableColumn<TData>[];
2822
- /** Data rows */
4670
+ visibility: DataTableColumnVisibility;
4671
+ /** Locale @default 'fa' */
4672
+ locale?: SupportedLocale;
4673
+ /** Custom trigger label (defaults to "ستون‌ها") */
4674
+ label?: React$1.ReactNode;
4675
+ /** Custom Button class */
4676
+ className?: string;
4677
+ /** Override Button size */
4678
+ size?: 'xs' | 'sm' | 'default';
4679
+ /** Override Button variant */
4680
+ variant?: 'default' | 'outline' | 'ghost' | 'secondary';
4681
+ }
4682
+ declare function DataTableColumnVisibilityToggle<TData>({ columns, visibility, locale, label, className, size, variant, }: DataTableColumnVisibilityToggleProps<TData>): react_jsx_runtime.JSX.Element;
4683
+ /**
4684
+ * Convert column definitions + row data into a CSV string. Each cell is
4685
+ * stringified by calling its `cell` render and extracting plain text — for
4686
+ * complex React nodes pass an `exportValue: (row) => string` on the column.
4687
+ */
4688
+ interface ExportableColumn<TData> extends DataTableColumn<TData> {
4689
+ /** Override how this column's value is serialized for export. */
4690
+ exportValue?: (row: TData, index: number) => string | number | boolean | null | undefined;
4691
+ }
4692
+ /**
4693
+ * Build a CSV string from columns + rows. Header row uses each column's
4694
+ * `header` (if string) or its `id` as fallback.
4695
+ */
4696
+ declare function buildCsv<TData>(columns: ExportableColumn<TData>[], data: TData[]): string;
4697
+ /** Build a TSV string (tab-separated) — useful for "paste into spreadsheet". */
4698
+ declare function buildTsv<TData>(columns: ExportableColumn<TData>[], data: TData[]): string;
4699
+ /** Trigger a browser download of `content` with the given filename + mime. */
4700
+ declare function downloadFile(filename: string, content: string, mime?: string): void;
4701
+ interface DataTableExportButtonProps<TData> {
4702
+ columns: ExportableColumn<TData>[];
2823
4703
  data: TData[];
2824
- /** Table size variant */
2825
- size?: 'sm' | 'md' | 'lg';
2826
- /** Show loading skeleton */
2827
- isLoading?: boolean;
2828
- /** Number of skeleton rows to show when loading */
2829
- loadingRows?: number;
2830
- /** Content to show when data is empty (not loading) */
2831
- emptyState?: React$1.ReactNode;
2832
- /** Pagination configuration */
2833
- pagination?: DataTablePagination;
2834
- /** Sort configuration */
2835
- sort?: DataTableSort;
2836
- /** Row selection configuration */
2837
- selection?: DataTableSelection<TData>;
2838
- /** Zebra-striped rows */
2839
- striped?: boolean;
2840
- /** Bordered cells */
2841
- bordered?: boolean;
2842
- /** Sticky header */
2843
- stickyHeader?: boolean;
2844
- /** Additional className for the root wrapper */
4704
+ /** Output filename (default: data-<timestamp>.csv) */
4705
+ filename?: string;
4706
+ /** Locale @default 'fa' */
4707
+ locale?: SupportedLocale;
4708
+ /** Override label */
4709
+ label?: React$1.ReactNode;
4710
+ /** Hide TSV-copy entry @default false */
4711
+ hideTsv?: boolean;
4712
+ /** Custom Button class */
2845
4713
  className?: string;
2846
- /** Caption text below the table */
2847
- caption?: string;
2848
- /** Total result count shown above table (e.g. "۲۴ نتیجه") */
2849
- resultCount?: React$1.ReactNode;
2850
- /** Locale for UI strings @default 'fa' */
4714
+ /** Override Button size */
4715
+ size?: 'xs' | 'sm' | 'default';
4716
+ /** Override Button variant */
4717
+ variant?: 'default' | 'outline' | 'ghost' | 'secondary';
4718
+ }
4719
+ declare function DataTableExportButton<TData>({ columns, data, filename, locale, label, hideTsv, className, size, variant, }: DataTableExportButtonProps<TData>): react_jsx_runtime.JSX.Element;
4720
+
4721
+ interface TableComparisonViewProps<TData> {
4722
+ /** Original DataTable column definitions — `cell()` is reused for rendering. */
4723
+ columns: DataTableColumn<TData>[];
4724
+ /** Rows being compared. Recommended 2-4. */
4725
+ rows: TData[];
4726
+ /** Optional label for each row column header (e.g., name). Falls back to `Row N`. */
4727
+ rowLabel?: (row: TData, index: number) => React$1.ReactNode;
4728
+ /** Callback for the column "remove" button. When omitted, no remove button shows. */
4729
+ onRemoveRow?: (row: TData, index: number) => void;
4730
+ /** Highlight cells whose value differs across rows @default true */
4731
+ highlightDifferences?: boolean;
4732
+ /** Locale @default 'fa' */
2851
4733
  locale?: SupportedLocale;
4734
+ /** Empty state when no rows are passed */
4735
+ emptyState?: React$1.ReactNode;
4736
+ className?: string;
2852
4737
  }
2853
- declare const DataTable: <TData>(props: DataTableProps<TData> & {
2854
- ref?: React$1.ForwardedRef<HTMLDivElement>;
2855
- }) => React$1.ReactElement;
4738
+ declare const TableComparisonView: <TData>(props: TableComparisonViewProps<TData>) => React$1.ReactElement;
2856
4739
 
2857
4740
  interface DirectionalBoxProps extends React$1.HTMLAttributes<HTMLDivElement> {
2858
4741
  /**
@@ -2917,8 +4800,166 @@ interface SafeImageProps extends React$1.ImgHTMLAttributes<HTMLImageElement> {
2917
4800
  }
2918
4801
  declare const SafeImage: React$1.ForwardRefExoticComponent<SafeImageProps & React$1.RefAttributes<HTMLImageElement>>;
2919
4802
 
4803
+ interface ReportComposerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'title'> {
4804
+ /** Report title (e.g., "بولتن هفتگی — هفته ۱۴") */
4805
+ title?: React$1.ReactNode;
4806
+ /** Subtitle / metadata */
4807
+ description?: React$1.ReactNode;
4808
+ /** Top-right header actions (Save, Export, …) */
4809
+ headerActions?: React$1.ReactNode;
4810
+ /** Locale @default 'fa' */
4811
+ locale?: SupportedLocale;
4812
+ }
4813
+ declare const ReportComposer: React$1.ForwardRefExoticComponent<ReportComposerProps & React$1.RefAttributes<HTMLDivElement>>;
4814
+ interface ReportSectionProps extends Omit<React$1.HTMLAttributes<HTMLElement>, 'title'> {
4815
+ /** Section title */
4816
+ title: React$1.ReactNode;
4817
+ /** Optional secondary text */
4818
+ description?: React$1.ReactNode;
4819
+ /** Whether the section is enabled (in the bulletin output) */
4820
+ enabled?: boolean;
4821
+ /** Callback when the enable switch is toggled. When omitted, switch is hidden. */
4822
+ onEnabledChange?: (next: boolean) => void;
4823
+ /** Whether the section is collapsed (only the header visible) */
4824
+ collapsed?: boolean;
4825
+ /** Callback when collapse toggles. When omitted, collapse button is hidden. */
4826
+ onCollapsedChange?: (next: boolean) => void;
4827
+ /** Show drag handle (consumer wires the drag interaction) */
4828
+ draggable?: boolean;
4829
+ /** drag-handle pointerDown — set when wiring native or react-dnd */
4830
+ onDragHandlePointerDown?: (e: React$1.PointerEvent<HTMLButtonElement>) => void;
4831
+ /** Render a settings button (e.g., to open a popover). When omitted, hidden. */
4832
+ onSettingsClick?: () => void;
4833
+ /** Custom header actions (extra buttons beside settings) */
4834
+ headerActions?: React$1.ReactNode;
4835
+ }
4836
+ declare const ReportSection: React$1.ForwardRefExoticComponent<ReportSectionProps & React$1.RefAttributes<HTMLElement>>;
4837
+ interface BulletinViewerProps extends Omit<React$1.HTMLAttributes<HTMLDivElement>, 'title'> {
4838
+ /** Bulletin title (h1) */
4839
+ title: React$1.ReactNode;
4840
+ /** Author / source line */
4841
+ author?: React$1.ReactNode;
4842
+ /** Publish date display */
4843
+ publishedAt?: React$1.ReactNode;
4844
+ /** Optional list of subtitle lines (volume, edition, etc.) */
4845
+ meta?: React$1.ReactNode[];
4846
+ /** Action buttons in the header (Print, Download PDF, Share). Hidden when printing via @media print. */
4847
+ headerActions?: React$1.ReactNode;
4848
+ /** Locale @default 'fa' */
4849
+ locale?: SupportedLocale;
4850
+ }
4851
+ declare const BulletinViewer: React$1.ForwardRefExoticComponent<BulletinViewerProps & React$1.RefAttributes<HTMLDivElement>>;
4852
+
4853
+ /**
4854
+ * Report section templates — thin compositions of existing primitives that
4855
+ * each render inside a `<ReportSection>` shell. They cover the 6 layouts
4856
+ * that recur across every افکارسنجی bulletin we've seen:
4857
+ *
4858
+ * 1. ExecutiveSummarySection — title + AI paragraph + tile metrics
4859
+ * 2. SentimentBreakdownSection — sentiment + optional 9-emotion side-by-side
4860
+ * 3. FlowDistributionSection — political-flow stacked bar
4861
+ * 4. TopPostsSection — compact PostList of N highlighted posts
4862
+ * 5. TimelineSection — line chart with optional sparkline summary
4863
+ * 6. SourceBreakdownSection — per-platform metric grid
4864
+ *
4865
+ * Each template is intentionally thin — props mirror the underlying
4866
+ * primitive when possible. Consumers compose these inside a
4867
+ * `<ReportComposer>`; for non-template sections, `<ReportSection>` is
4868
+ * still the building block.
4869
+ */
4870
+
4871
+ type ReportSectionShellProps = Pick<ReportSectionProps, 'enabled' | 'onEnabledChange' | 'collapsed' | 'onCollapsedChange' | 'draggable' | 'onDragHandlePointerDown' | 'onSettingsClick' | 'headerActions'>;
4872
+ interface ExecutiveSummaryMetric {
4873
+ label: string;
4874
+ value: number | string;
4875
+ /** Pre-formatted display value. When omitted, numeric `value` is locale-formatted via `formatLargeNumber`. */
4876
+ displayValue?: string;
4877
+ /** Optional delta (percent vs previous period). */
4878
+ delta?: number;
4879
+ /** Optional unit string appended to the value (e.g. ' %'). */
4880
+ unit?: string;
4881
+ }
4882
+ interface ExecutiveSummarySectionProps extends ReportSectionShellProps {
4883
+ /** Section title (e.g., "خلاصه اجرایی") */
4884
+ title?: React$1.ReactNode;
4885
+ description?: React$1.ReactNode;
4886
+ /** AI / analyst-written paragraph (1–4 sentences). */
4887
+ summary: React$1.ReactNode;
4888
+ /** Up to 4 KPIs rendered as a row of tiles. */
4889
+ metrics?: ExecutiveSummaryMetric[];
4890
+ locale?: SupportedLocale;
4891
+ }
4892
+ declare const ExecutiveSummarySection: React$1.ForwardRefExoticComponent<ExecutiveSummarySectionProps & React$1.RefAttributes<HTMLDivElement>>;
4893
+ interface SentimentBreakdownSectionProps extends ReportSectionShellProps {
4894
+ title?: React$1.ReactNode;
4895
+ description?: React$1.ReactNode;
4896
+ /** 3-class sentiment counts (auto-normalized). */
4897
+ sentiment: SentimentData;
4898
+ /** Optional 9-emotion breakdown rendered alongside. */
4899
+ emotions?: Partial<Record<EmotionKey, number>>;
4900
+ locale?: SupportedLocale;
4901
+ }
4902
+ declare const SentimentBreakdownSection: React$1.ForwardRefExoticComponent<SentimentBreakdownSectionProps & React$1.RefAttributes<HTMLDivElement>>;
4903
+ interface FlowDistributionSectionProps extends ReportSectionShellProps {
4904
+ title?: React$1.ReactNode;
4905
+ description?: React$1.ReactNode;
4906
+ /** Political-flow counts (5 keys). */
4907
+ flow: Partial<Record<FlowKey, number>>;
4908
+ locale?: SupportedLocale;
4909
+ }
4910
+ declare const FlowDistributionSection: React$1.ForwardRefExoticComponent<FlowDistributionSectionProps & React$1.RefAttributes<HTMLDivElement>>;
4911
+ interface TopPostsSectionProps extends ReportSectionShellProps {
4912
+ title?: React$1.ReactNode;
4913
+ description?: React$1.ReactNode;
4914
+ posts: PostData[];
4915
+ /** Render only the first N posts. @default 5 */
4916
+ topN?: number;
4917
+ /** Density passed through to PostList. @default 'compact' */
4918
+ density?: 'compact' | 'comfortable';
4919
+ locale?: SupportedLocale;
4920
+ }
4921
+ declare const TopPostsSection: React$1.ForwardRefExoticComponent<TopPostsSectionProps & React$1.RefAttributes<HTMLDivElement>>;
4922
+ interface TimelineSectionProps extends ReportSectionShellProps {
4923
+ title?: React$1.ReactNode;
4924
+ description?: React$1.ReactNode;
4925
+ /** Row-oriented timeline data: [{ name: '۱ فروردین', volume: 1240 }, …] */
4926
+ data: Array<Record<string, string | number>>;
4927
+ /** Series keys to plot. */
4928
+ dataKeys: string[];
4929
+ /** Pixel chart height. @default 240 */
4930
+ chartHeight?: number;
4931
+ /**
4932
+ * Optional one-line summary of the trend, rendered as a sparkline + delta
4933
+ * pair below the chart. Pass a single series name and a "from" / "to" pair
4934
+ * to highlight the period delta.
4935
+ */
4936
+ summary?: {
4937
+ seriesKey: string;
4938
+ from: number;
4939
+ to: number;
4940
+ };
4941
+ /** Custom axes (forwarded to PartoLineChart). */
4942
+ axisLeft?: Record<string, unknown>;
4943
+ axisBottom?: Record<string, unknown>;
4944
+ locale?: SupportedLocale;
4945
+ }
4946
+ declare const TimelineSection: React$1.ForwardRefExoticComponent<TimelineSectionProps & React$1.RefAttributes<HTMLDivElement>>;
4947
+ interface SourceBreakdownEntry {
4948
+ platform: SocialPlatform;
4949
+ count: number;
4950
+ /** Pre-computed share percent. When omitted, percent is computed across all entries. */
4951
+ percent?: number;
4952
+ }
4953
+ interface SourceBreakdownSectionProps extends ReportSectionShellProps {
4954
+ title?: React$1.ReactNode;
4955
+ description?: React$1.ReactNode;
4956
+ sources: SourceBreakdownEntry[];
4957
+ locale?: SupportedLocale;
4958
+ }
4959
+ declare const SourceBreakdownSection: React$1.ForwardRefExoticComponent<SourceBreakdownSectionProps & React$1.RefAttributes<HTMLDivElement>>;
4960
+
2920
4961
  declare const calloutVariants: (props?: ({
2921
- variant?: "info" | "success" | "warning" | "destructive" | "neutral" | null | undefined;
4962
+ variant?: "neutral" | "warning" | "success" | "info" | "destructive" | null | undefined;
2922
4963
  } & class_variance_authority_types.ClassProp) | undefined) => string;
2923
4964
  interface CalloutProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof calloutVariants> {
2924
4965
  /** Custom icon. Set to `null` to hide the icon. */
@@ -2961,169 +5002,6 @@ interface SectionNavigatorProps extends React$1.HTMLAttributes<HTMLElement> {
2961
5002
  }
2962
5003
  declare const SectionNavigator: React$1.ForwardRefExoticComponent<SectionNavigatorProps & React$1.RefAttributes<HTMLElement>>;
2963
5004
 
2964
- interface PartoLineChartProps {
2965
- /** Row-oriented data: [{ name: "فروردین", series1: 50, series2: 30 }] */
2966
- data: Array<Record<string, any>>;
2967
- /** Keys for each line series (e.g. ['فروش', 'سود']) */
2968
- dataKeys: string[];
2969
- /** Field name for X axis (default: 'name') */
2970
- xAxisKey?: string;
2971
- /** Curve type */
2972
- curve?: 'monotone' | 'linear' | 'natural' | 'step';
2973
- /** Line width */
2974
- strokeWidth?: number;
2975
- /** Show dots on data points */
2976
- showDots?: boolean;
2977
- /** Show horizontal grid lines */
2978
- enableGridY?: boolean;
2979
- /** Show vertical grid lines */
2980
- enableGridX?: boolean;
2981
- /** Chart margins */
2982
- margin?: {
2983
- top?: number;
2984
- right?: number;
2985
- bottom?: number;
2986
- left?: number;
2987
- };
2988
- /** Custom X axis config */
2989
- axisBottom?: Record<string, any> | null;
2990
- /** Custom Y axis config */
2991
- axisLeft?: Record<string, any> | null;
2992
- /** Custom tooltip formatter */
2993
- tooltipFormatter?: (name: string, value: number) => React$1.ReactNode;
2994
- className?: string;
2995
- isLoading?: boolean;
2996
- ariaLabel?: string;
2997
- /** Additional Recharts LineChart props */
2998
- chartProps?: Record<string, any>;
2999
- }
3000
- declare const PartoLineChart: React$1.ForwardRefExoticComponent<PartoLineChartProps & React$1.RefAttributes<HTMLDivElement>>;
3001
-
3002
- interface PartoBarChartProps {
3003
- /** Chart data — row-oriented array of objects */
3004
- data: Array<Record<string, any>>;
3005
- /** Data keys to render as bars (e.g. ['فروش', 'هزینه']) */
3006
- keys: string[];
3007
- /** Field name used for X axis categories (e.g. 'ماه') */
3008
- indexBy: string;
3009
- /** Stacked or grouped layout */
3010
- groupMode?: 'grouped' | 'stacked';
3011
- /** Bar layout direction */
3012
- layout?: 'vertical' | 'horizontal';
3013
- /** Chart margins */
3014
- margin?: {
3015
- top?: number;
3016
- right?: number;
3017
- bottom?: number;
3018
- left?: number;
3019
- };
3020
- /** Gap between category groups as percentage */
3021
- barCategoryGap?: string | number;
3022
- /** Gap between bars within a group */
3023
- barGap?: number;
3024
- /** Border radius for bar tops [topLeft, topRight, bottomRight, bottomLeft] */
3025
- radius?: [number, number, number, number];
3026
- /** Show horizontal grid lines */
3027
- enableGridY?: boolean;
3028
- /** Show vertical grid lines */
3029
- enableGridX?: boolean;
3030
- /** Show labels inside bars */
3031
- enableLabel?: boolean;
3032
- /** Custom X axis config */
3033
- axisBottom?: Record<string, any> | null;
3034
- /** Custom Y axis config */
3035
- axisLeft?: Record<string, any> | null;
3036
- /** Custom tooltip formatter */
3037
- tooltipFormatter?: (name: string, value: number) => React$1.ReactNode;
3038
- className?: string;
3039
- isLoading?: boolean;
3040
- ariaLabel?: string;
3041
- /** Additional Recharts BarChart props */
3042
- chartProps?: Record<string, any>;
3043
- }
3044
- declare const PartoBarChart: React$1.ForwardRefExoticComponent<PartoBarChartProps & React$1.RefAttributes<HTMLDivElement>>;
3045
-
3046
- interface PartoPieChartProps {
3047
- /** Data: [{ name: "محصول A", value: 40 }] */
3048
- data: Array<{
3049
- name: string;
3050
- value: number;
3051
- [key: string]: any;
3052
- }>;
3053
- /** Inner radius — 0 for full pie, "60%" for donut */
3054
- innerRadius?: number | string;
3055
- /** Outer radius */
3056
- outerRadius?: number | string;
3057
- /** Angle between slices in degrees */
3058
- paddingAngle?: number;
3059
- /** Corner radius of arc segments */
3060
- cornerRadius?: number;
3061
- /** Show arc link labels (lines from slices to text) */
3062
- showLabels?: boolean;
3063
- /** Skip labels for slices smaller than this angle */
3064
- labelSkipAngle?: number;
3065
- /** Chart margins */
3066
- margin?: {
3067
- top?: number;
3068
- right?: number;
3069
- bottom?: number;
3070
- left?: number;
3071
- };
3072
- /** Custom tooltip formatter */
3073
- tooltipFormatter?: (name: string, value: number) => React$1.ReactNode;
3074
- className?: string;
3075
- isLoading?: boolean;
3076
- ariaLabel?: string;
3077
- }
3078
- declare const PartoPieChart: React$1.ForwardRefExoticComponent<PartoPieChartProps & React$1.RefAttributes<HTMLDivElement>>;
3079
-
3080
- /**
3081
- * PartoHeatMap — brand-tinted heatmap with rounded cells, clean axis,
3082
- * glassmorphic tooltip, and locale-aware formatting.
3083
- * Built with Visx scales + raw SVG for full control.
3084
- */
3085
- interface HeatMapDatum {
3086
- x: string | number;
3087
- y: number;
3088
- }
3089
- interface HeatMapRow {
3090
- id: string;
3091
- data: HeatMapDatum[];
3092
- }
3093
- interface PartoHeatMapProps {
3094
- data: HeatMapRow[];
3095
- locale?: 'fa' | 'en';
3096
- className?: string;
3097
- isLoading?: boolean;
3098
- ariaLabel?: string;
3099
- margin?: {
3100
- top: number;
3101
- right: number;
3102
- bottom: number;
3103
- left: number;
3104
- };
3105
- /** Custom color function: receives value and max → returns CSS color */
3106
- colorScale?: (value: number, max: number) => string;
3107
- /** Cell border radius */
3108
- cellRadius?: number;
3109
- /** Gap between cells */
3110
- cellGap?: number;
3111
- /** Custom tooltip content */
3112
- renderTooltip?: (cell: {
3113
- rowId: string;
3114
- x: string | number;
3115
- value: number;
3116
- color: string;
3117
- }) => React$1.ReactNode;
3118
- /** X axis label */
3119
- xAxisLabel?: string;
3120
- /** Y axis label */
3121
- yAxisLabel?: string;
3122
- /** Filter which x-axis ticks to show */
3123
- xTickFilter?: (value: string | number, index: number) => boolean;
3124
- }
3125
- declare const PartoHeatMap: React$1.ForwardRefExoticComponent<PartoHeatMapProps & React$1.RefAttributes<HTMLDivElement>>;
3126
-
3127
5005
  /**
3128
5006
  * PartoWordCloud — modern word cloud with smooth hover transitions,
3129
5007
  * glassmorphic tooltip, and brand-harmonious coloring.
@@ -3158,25 +5036,46 @@ declare namespace PartoWordCloud {
3158
5036
  var displayName: string;
3159
5037
  }
3160
5038
 
3161
- interface PartoAreaChartProps {
3162
- /** Row-oriented data: [{ name: "فروردین", series1: 50, series2: 30 }] */
5039
+ /**
5040
+ * PartoScatterChart x/y scatter with optional bubble sizing (z) and
5041
+ * per-point color override. Wraps Recharts ScatterChart with theme-aware
5042
+ * styles, RTL-safe margins, and Persian number formatting.
5043
+ *
5044
+ * @example
5045
+ * <PartoScatterChart
5046
+ * data={[
5047
+ * { x: 10, y: 30, z: 200, label: 'پیج A' },
5048
+ * { x: 40, y: 50, z: 120, label: 'پیج B' },
5049
+ * ]}
5050
+ * xKey="x" yKey="y" zKey="z" labelKey="label"
5051
+ * xLabel="تعامل (٪)" yLabel="رشد (٪)"
5052
+ * />
5053
+ */
5054
+ interface PartoScatterChartProps {
5055
+ /** Row-oriented data. Each row contains x, y, and optional z (size) + label. */
3163
5056
  data: Array<Record<string, any>>;
3164
- /** Keys for each area series (e.g. ['فروش', 'سود']) */
3165
- dataKeys: string[];
3166
- /** Field name for X axis (default: 'name') */
3167
- xAxisKey?: string;
3168
- /** Curve type */
3169
- curve?: 'monotone' | 'linear' | 'natural' | 'step';
3170
- /** Line width */
3171
- strokeWidth?: number;
3172
- /** Area fill opacity */
3173
- fillOpacity?: number;
3174
- /** Show dots on data points */
3175
- showDots?: boolean;
3176
- /** Show horizontal grid lines */
3177
- enableGridY?: boolean;
3178
- /** Show vertical grid lines */
3179
- enableGridX?: boolean;
5057
+ /** Field name for X axis value */
5058
+ xKey: string;
5059
+ /** Field name for Y axis value */
5060
+ yKey: string;
5061
+ /** Optional field for bubble size (z). When provided, becomes a bubble chart. */
5062
+ zKey?: string;
5063
+ /** Optional field for per-point label (shown in tooltip). */
5064
+ labelKey?: string;
5065
+ /** Optional field for color classification (per-point). Values are mapped to palette. */
5066
+ groupKey?: string;
5067
+ /** Min/max bubble radius (px) when zKey is set. Default [40, 400]. */
5068
+ zRange?: [number, number];
5069
+ /** Axis range [min, max] for X @default 'dataMin'..'dataMax' */
5070
+ xDomain?: [number | 'dataMin' | 'auto', number | 'dataMax' | 'auto'];
5071
+ /** Axis range [min, max] for Y */
5072
+ yDomain?: [number | 'dataMin' | 'auto', number | 'dataMax' | 'auto'];
5073
+ /** Axis labels */
5074
+ xLabel?: string;
5075
+ yLabel?: string;
5076
+ /** Unit suffix appended to tick labels (e.g., '٪') */
5077
+ xUnit?: string;
5078
+ yUnit?: string;
3180
5079
  /** Chart margins */
3181
5080
  margin?: {
3182
5081
  top?: number;
@@ -3184,37 +5083,51 @@ interface PartoAreaChartProps {
3184
5083
  bottom?: number;
3185
5084
  left?: number;
3186
5085
  };
3187
- /** Custom X axis config */
3188
- axisBottom?: Record<string, any> | null;
3189
- /** Custom Y axis config */
3190
- axisLeft?: Record<string, any> | null;
3191
- /** Custom tooltip formatter */
5086
+ /** Show grid @default true */
5087
+ enableGrid?: boolean;
5088
+ /** Series name for tooltip header @default 'Scatter' */
5089
+ seriesName?: string;
5090
+ /** Locale for digit formatting @default 'fa' */
5091
+ locale?: SupportedLocale;
5092
+ /** Custom tooltip formatter (name, value) */
3192
5093
  tooltipFormatter?: (name: string, value: number) => React$1.ReactNode;
3193
5094
  className?: string;
3194
5095
  isLoading?: boolean;
3195
5096
  ariaLabel?: string;
3196
- /** Additional Recharts AreaChart props */
3197
- chartProps?: Record<string, any>;
3198
5097
  }
3199
- declare const PartoAreaChart: React$1.ForwardRefExoticComponent<PartoAreaChartProps & React$1.RefAttributes<HTMLDivElement>>;
5098
+ declare const PartoScatterChart: React$1.ForwardRefExoticComponent<PartoScatterChartProps & React$1.RefAttributes<HTMLDivElement>>;
3200
5099
 
3201
- interface PartoRadarChartProps {
3202
- /** Data: [{ subject: "سرعت", series1: 80, series2: 60 }] */
3203
- data: Array<Record<string, any>>;
3204
- /** Keys for each radar series */
3205
- dataKeys: string[];
3206
- /** Field name used for angle axis labels (default: 'subject') */
3207
- indexBy?: string;
3208
- /** Radar fill opacity */
3209
- fillOpacity?: number;
3210
- /** Radar stroke width */
3211
- strokeWidth?: number;
3212
- /** Show dots on vertices */
3213
- showDots?: boolean;
3214
- /** Dot radius */
3215
- dotRadius?: number;
3216
- /** Grid shape */
3217
- gridType?: 'polygon' | 'circle';
5100
+ /**
5101
+ * PartoSankeyChart flow visualization between nodes (source target).
5102
+ * Uses Recharts' Sankey primitive. Wraps for theme-aware colors, Persian
5103
+ * number formatting, empty state, and a simpler API.
5104
+ *
5105
+ * @example
5106
+ * <PartoSankeyChart
5107
+ * nodes={[{ name: 'ورودی' }, { name: 'فرآیند' }, { name: 'خروجی' }]}
5108
+ * links={[
5109
+ * { source: 0, target: 1, value: 50 },
5110
+ * { source: 1, target: 2, value: 50 },
5111
+ * ]}
5112
+ * />
5113
+ */
5114
+ interface SankeyNode {
5115
+ /** Displayed label for the node. */
5116
+ name: string;
5117
+ /** Optional explicit color override (CSS color or `hsl(var(--token))`). */
5118
+ color?: string;
5119
+ }
5120
+ interface SankeyLink {
5121
+ /** Zero-based index of the source node in `nodes`. */
5122
+ source: number;
5123
+ /** Zero-based index of the target node in `nodes`. */
5124
+ target: number;
5125
+ /** Flow magnitude — drives link thickness. */
5126
+ value: number;
5127
+ }
5128
+ interface PartoSankeyChartProps {
5129
+ nodes: SankeyNode[];
5130
+ links: SankeyLink[];
3218
5131
  /** Chart margins */
3219
5132
  margin?: {
3220
5133
  top?: number;
@@ -3222,13 +5135,180 @@ interface PartoRadarChartProps {
3222
5135
  bottom?: number;
3223
5136
  left?: number;
3224
5137
  };
3225
- /** Custom tooltip formatter */
3226
- tooltipFormatter?: (name: string, value: number) => React$1.ReactNode;
5138
+ /** Horizontal gap between node columns in pixels */
5139
+ nodePadding?: number;
5140
+ /** Node rectangle width in pixels */
5141
+ nodeWidth?: number;
5142
+ /** Sort nodes alphabetically within a column @default false (preserve input order) */
5143
+ iterations?: number;
5144
+ /** Locale for digit formatting in tooltip @default 'fa' */
5145
+ locale?: SupportedLocale;
5146
+ /** Custom tooltip formatter (receives link.source/target names + value) */
5147
+ tooltipFormatter?: (label: string, value: number) => React$1.ReactNode;
3227
5148
  className?: string;
3228
5149
  isLoading?: boolean;
3229
5150
  ariaLabel?: string;
3230
5151
  }
3231
- declare const PartoRadarChart: React$1.ForwardRefExoticComponent<PartoRadarChartProps & React$1.RefAttributes<HTMLDivElement>>;
5152
+ declare const PartoSankeyChart: React$1.ForwardRefExoticComponent<PartoSankeyChartProps & React$1.RefAttributes<HTMLDivElement>>;
5153
+
5154
+ /**
5155
+ * ConceptPulseChart — افکارسنجی-flavored bubble chart where each data point
5156
+ * is a "concept" rendered as a center dot surrounded by **composition arcs**.
5157
+ * Built on Recharts ScatterChart but overrides the scatter shape with a
5158
+ * custom SVG renderer that draws the central bubble + concentric pie arcs
5159
+ * showing the composition breakdown (flow / emotion / sentiment).
5160
+ *
5161
+ * Heart-of-dashboard chart in the prototype — replaces a flat scatter when
5162
+ * "what's this concept made of?" matters as much as where it sits.
5163
+ *
5164
+ * @example
5165
+ * <ConceptPulseChart
5166
+ * data={[{
5167
+ * x: 30, y: 50, z: 200,
5168
+ * label: 'افزایش قیمت بنزین',
5169
+ * composition: { 'pro-gov': 20, 'internal-critic': 60, 'external-opponent': 20 },
5170
+ * }]}
5171
+ * compositionScale="flow"
5172
+ * />
5173
+ */
5174
+ type CompositionScale = 'flow' | 'emotion' | 'custom';
5175
+ type ConceptComposition = Partial<Record<string, number>>;
5176
+ interface ConceptPoint {
5177
+ /** X coordinate. */
5178
+ x: number;
5179
+ /** Y coordinate. */
5180
+ y: number;
5181
+ /** Optional bubble size value (drives center radius). */
5182
+ z?: number;
5183
+ /** Concept label — shown in tooltip and aria. */
5184
+ label: string;
5185
+ /**
5186
+ * Composition breakdown — keys must match the chosen `compositionScale`:
5187
+ * - flow: 'pro-gov' | 'internal-critic' | 'internal-opponent' | 'external-opponent' | 'grey'
5188
+ * - emotion: 'anger' | 'joy' | 'fear' | … (9 emotion keys)
5189
+ * - custom: any keys, paired with `compositionTokens` prop
5190
+ */
5191
+ composition: ConceptComposition;
5192
+ }
5193
+ interface ConceptPulseChartProps {
5194
+ data: ConceptPoint[];
5195
+ /** Which token family the composition keys map to @default "flow" */
5196
+ compositionScale?: CompositionScale;
5197
+ /**
5198
+ * For `compositionScale="custom"`, supply a key → CSS-color map
5199
+ * (e.g., `{ a: 'hsl(var(--brand-default))', b: 'red' }`).
5200
+ */
5201
+ compositionTokens?: Record<string, string>;
5202
+ /** Per-key labels for tooltip (custom scale only) */
5203
+ compositionLabels?: Record<string, string>;
5204
+ /** Optional bubble size range (px area) when z is provided @default [80, 600] */
5205
+ zRange?: [number, number];
5206
+ /** Center bubble radius when z is omitted @default 14 */
5207
+ centerRadius?: number;
5208
+ /** Outer arc radius offset (added to centerRadius) @default 8 */
5209
+ arcThickness?: number;
5210
+ /** Show concept label below the bubble @default false (use tooltip instead) */
5211
+ showLabels?: boolean;
5212
+ /** Axis configuration */
5213
+ xLabel?: string;
5214
+ yLabel?: string;
5215
+ xUnit?: string;
5216
+ yUnit?: string;
5217
+ xDomain?: [number | 'dataMin' | 'auto', number | 'dataMax' | 'auto'];
5218
+ yDomain?: [number | 'dataMin' | 'auto', number | 'dataMax' | 'auto'];
5219
+ margin?: {
5220
+ top?: number;
5221
+ right?: number;
5222
+ bottom?: number;
5223
+ left?: number;
5224
+ };
5225
+ enableGrid?: boolean;
5226
+ locale?: SupportedLocale;
5227
+ className?: string;
5228
+ isLoading?: boolean;
5229
+ ariaLabel?: string;
5230
+ }
5231
+ declare const ConceptPulseChart: React$1.ForwardRefExoticComponent<ConceptPulseChartProps & React$1.RefAttributes<HTMLDivElement>>;
5232
+
5233
+ /**
5234
+ * PartoNetworkChart — force-directed node/link graph. Uses a lightweight
5235
+ * custom force-simulation (no d3-force dep) — repulsion + link attraction +
5236
+ * centering — to lay out nodes in a stable position inside the container.
5237
+ *
5238
+ * Consumers who want non-force layouts (circular, radial, manual x/y) can
5239
+ * pass nodes with explicit `x`/`y` to skip the simulation.
5240
+ */
5241
+ interface NetworkNode {
5242
+ /** Unique id — used by links for source/target. */
5243
+ id: string;
5244
+ /** Displayed label. */
5245
+ label?: string;
5246
+ /** Optional numeric weight — drives node radius (larger = more important). */
5247
+ weight?: number;
5248
+ /** Category key — maps to a stable palette color. */
5249
+ group?: string;
5250
+ /** Fixed X (skip simulation for this node) */
5251
+ fx?: number;
5252
+ /** Fixed Y */
5253
+ fy?: number;
5254
+ /** Explicit color override */
5255
+ color?: string;
5256
+ }
5257
+ interface NetworkLink {
5258
+ /** Source node id. */
5259
+ source: string;
5260
+ /** Target node id. */
5261
+ target: string;
5262
+ /** Optional numeric weight — drives stroke width. */
5263
+ value?: number;
5264
+ }
5265
+ interface PartoNetworkChartProps {
5266
+ nodes: NetworkNode[];
5267
+ links: NetworkLink[];
5268
+ /** Base node radius in px @default 12 */
5269
+ nodeRadius?: number;
5270
+ /** Max node radius (when scaling by weight) @default 24 */
5271
+ maxNodeRadius?: number;
5272
+ /** Link base stroke width @default 1.5 */
5273
+ linkStrokeWidth?: number;
5274
+ /** Max link stroke width (when scaling by value) @default 6 */
5275
+ maxLinkStrokeWidth?: number;
5276
+ /** Number of simulation ticks @default 250 */
5277
+ iterations?: number;
5278
+ /** Show node labels @default true */
5279
+ showLabels?: boolean;
5280
+ /** Locale for labels + digits @default 'fa' */
5281
+ locale?: SupportedLocale;
5282
+ /** Tooltip formatter (node hover) */
5283
+ nodeTooltip?: (node: NetworkNode) => React$1.ReactNode;
5284
+ /** Callback when a node is clicked */
5285
+ onNodeClick?: (node: NetworkNode) => void;
5286
+ className?: string;
5287
+ isLoading?: boolean;
5288
+ ariaLabel?: string;
5289
+ }
5290
+ declare const PartoNetworkChart: React$1.ForwardRefExoticComponent<PartoNetworkChartProps & React$1.RefAttributes<HTMLDivElement>>;
5291
+
5292
+ /**
5293
+ * Chart-shaped empty state — a lightweight placeholder for charts with no data.
5294
+ * Designed to be drop-in compatible with `PartoBarChart`, `PartoLineChart`, etc.
5295
+ * Sits inside `ChartContainer` consumers, so it accepts the same wrapper
5296
+ * `className` and fills 100% of the parent's bounds.
5297
+ */
5298
+ type EmptyChartShape = 'bar' | 'line' | 'pie' | 'network' | 'generic';
5299
+ interface EmptyChartProps extends React$1.HTMLAttributes<HTMLDivElement> {
5300
+ /** Visual shape hint for the icon @default "generic" */
5301
+ shape?: EmptyChartShape;
5302
+ /** Primary message. Defaults to a locale-specific "no data" string. */
5303
+ message?: React$1.ReactNode;
5304
+ /** Secondary helper text below the message */
5305
+ hint?: React$1.ReactNode;
5306
+ /** Optional action (button, link) shown under the text */
5307
+ action?: React$1.ReactNode;
5308
+ /** Locale @default "fa" */
5309
+ locale?: SupportedLocale;
5310
+ }
5311
+ declare const EmptyChart: React$1.ForwardRefExoticComponent<EmptyChartProps & React$1.RefAttributes<HTMLDivElement>>;
3232
5312
 
3233
5313
  type Direction = 'ltr' | 'rtl';
3234
5314
  declare function useDocumentDirection(): Direction;
@@ -3347,8 +5427,25 @@ interface ChartTooltipProps {
3347
5427
  label?: string;
3348
5428
  tooltipStyle: React$1.CSSProperties;
3349
5429
  formatter?: (name: string, value: number) => React$1.ReactNode;
5430
+ /** Locale for the default value formatter. fa/ar render Persian/Arabic digits with thousands separators; en uses Latin. */
5431
+ locale?: SupportedLocale;
3350
5432
  }
3351
- declare function ChartTooltip({ active, payload, label, tooltipStyle, formatter }: ChartTooltipProps): react_jsx_runtime.JSX.Element | null;
5433
+ declare function ChartTooltip({ active, payload, label, tooltipStyle, formatter, locale }: ChartTooltipProps): react_jsx_runtime.JSX.Element | null;
5434
+ /**
5435
+ * Default tickFormatter for numeric chart axes (Y axis on Line/Area/Bar, both
5436
+ * axes on Scatter, radial on Radar). Renders Persian/Arabic digits + locale
5437
+ * suffix ("۱.۵ هزار", "1.5K") for fa/ar, Latin K/M/B for en.
5438
+ *
5439
+ * Pass via `axisLeft={{ tickFormatter: localeAwareNumberTick('fa') }}`, or rely
5440
+ * on the chart wrapper's `locale` prop which wires this in by default.
5441
+ */
5442
+ declare function localeAwareNumberTick(locale: SupportedLocale): (value: unknown) => string;
5443
+ /**
5444
+ * Default tickFormatter for categorical chart axes — converts embedded digits
5445
+ * to the locale's numerals (e.g. "۱۴۰۳-۰۱" for "1403-01") without altering
5446
+ * letters. Use on date/time axes whose labels carry digits.
5447
+ */
5448
+ declare function localeAwareCategoryTick(locale: SupportedLocale): (value: unknown) => string;
3352
5449
  /**
3353
5450
  * Transforms Nivo line/area data format to Recharts row-oriented format.
3354
5451
  * Useful for consumers migrating from Nivo data shape.
@@ -3377,4 +5474,240 @@ declare function transformNivoLineData(nivoData: Array<{
3377
5474
  */
3378
5475
  declare function useScrollLock(locked: boolean): void;
3379
5476
 
3380
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AnimatedNumber, type AnimatedNumberProps, AppBar, type AppBarProps, AppLayout, AppLayoutContent, AspectRatio, type AspectRatioType, Autocomplete, type AutocompleteItem, type AutocompleteProps, Avatar, AvatarFallback, AvatarGroup, type AvatarGroupItem, type AvatarGroupProps, AvatarImage, Badge, type BadgeProps, Banner, type BannerProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonProps, type ButtonVariantProps, CHART_FONT_FAMILY, Calendar, type CalendarProps, Callout, CalloutDescription, type CalloutProps, CalloutTitle, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardProps, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLoadingSkeleton, ChartSkeleton, type ChartSkeletonProps$1 as ChartSkeletonProps, ChartTooltip, Checkbox, CircularProgress, type CircularProgressProps, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, CommentCard, type CommentCardProps, type CommentTag, ComparisonCard, type ComparisonCardProps, ConfirmDialog, type ConfirmDialogProps, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, type CopyButtonProps, DEFAULT_PERIODS, DataTable, type DataTableColumn, type DataTablePagination, type DataTableProps, type DataTableSelection, type DataTableSort, DatePicker, type DatePickerProps, DateRangePicker, DateRangePickerInline, type DateRangePickerProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, type Direction, DirectionalBox, type DirectionalBoxProps, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, ENGAGEMENT_RANGES, Empty, EmptyAction, EmptyDescription, EmptyIcon, EmptyTitle, type EngagementRange, type EngagementRangeWithDisplay, EngagementRate, EngagementRateBar, type EngagementRateBarProps, type EngagementRateProps, type EngagementTier, ErrorBoundary, type ErrorBoundaryProps, ErrorState, type ErrorStateProps, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, FilterBar, FilterBarActions, type FilterBarActionsProps, FilterBarActiveFilters, type FilterBarActiveFiltersProps, FilterBarClear, type FilterBarClearProps, type FilterBarProps, FilterBarRow, type FilterBarRowProps, FilterChip, FilterChipGroup, type FilterChipProps, type FollowerGroup, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, GROUP_LABELS, HashtagInput, type TagInputProps as HashtagInputProps, type HeatMapDatum, type HeatMapRow, HoverCard, HoverCardContent, HoverCardTrigger, type Icon, Icons, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, type InputProps, InputVariants, InputWithIcon, type InputWithIconProps, InstagramPost, type InstagramPostProps, type InstagramProfileInfo, Kbd, KbdGroup, Label, type LegacySize, type LoadingVariantProps, type Locale, type MediaItem, type MediaType, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, MetricCard, MetricCardContent, MetricCardDifferential, MetricCardHeader, MetricCardLabel, MetricCardSkeleton, type MetricCardSkeletonProps, MetricCardSparkline, MetricCardValue, MultiSelect, type MultiSelectOption, type MultiSelectProps, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavPanel, NavPanelContent, NavPanelFooter, NavPanelHeader, NavRail, NavRailContent, NavRailFooter, NavRailHeader, NavRailItem, NavRailProvider, NavRailSeparator, NavRailTrigger, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, type NumberFormat, PERSIAN_MONTHS, PERSIAN_MONTHS_SHORT, PERSIAN_WEEKDAYS, PERSIAN_WEEKDAYS_SHORT, PageHeader, type PageHeaderProps, PageLoader, type PageLoaderProps, Pagination, PaginationContent, PaginationControlled, type PaginationControlledProps, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, PartoAreaChart, type PartoAreaChartProps, PartoBarChart, type PartoBarChartProps, PartoHeatMap, type PartoHeatMapProps, PartoLineChart, type PartoLineChartProps, PartoPieChart, type PartoPieChartProps, PartoRadarChart, type PartoRadarChartProps, type PartoToasterProps, PartoWordCloud, type PartoWordCloudProps, type PeriodOption, PeriodSelector, type PeriodSelectorProps, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, type PostStats, ProfileCard, type ProfileCardProps, ProfileInfo, type ProfileInfoProps, Progress, type ProgressProps, RadioCardDescription, RadioCardItem, RadioCardTitle, RadioCards, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, SONNER_DEFAULT_DURATION, SafeImage, type SafeImageProps, ScrollArea, ScrollBar, SearchInput, type SearchInputProps, type SectionItem, SectionNavigator, type SectionNavigatorProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectTriggerVariants, SelectValue, SentimentBadge, type SentimentBadgeProps, type SentimentData, SentimentDistribution, type SentimentDistributionProps, Separator, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, type SizeWithLegacy, Skeleton, type SkeletonProps, Slider, type SocialPlatform, SocialPlatformBadge, type SocialPlatformBadgeProps, type SortDirection, Spinner, type SpinnerProps, type StandardSize, StatDisplay, type StatDisplayProps, Step, type StepProps, Stepper, type StepperProps, type SupportedLocale, Switch, type SwitchProps, TIER_LABELS, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, TableSkeleton, type TableSkeletonProps, TableSortHeader, Tabs, TabsContent, TabsList, TabsTrigger, TagInput, type TagInputProps, Textarea, type TimeFormat, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TrendIndicator, type TrendIndicatorProps, type UIStringKeys, type UIStrings, UI_STRINGS, type UseInfiniteScrollOptions, type UseInfiniteScrollReturn, UserAutocomplete, type UserAutocompleteProps, type UserItem, type ViewMode, ViewToggle, type ViewToggleProps, type WordData, appBarVariants, avatarGroupVariants, badgeVariants, bannerVariants, buttonGroupVariants, buttonVariants, calloutVariants, cardVariants, cn, convertToLocalNumbers, engagementUiTranslations, formatAbsoluteTime, formatJalaliDate, formatLargeNumber, formatNumber, formatPersianDateRange, formatRelativeTime, getCurrentRangeIndex, getEngagementRanges, getFollowerGroup, getPersianDay, getPersianMonth, getPersianMonthName, getPersianMonthNameShort, getPersianMonthsForDropdown, getPersianWeekdayName, getPersianYear, getPersianYearsForDropdown, getUIStrings, tagInputVariants as hashtagInputVariants, inputVariants, instagramPostVariants, isRTL, jalaliToGregorian, navigationMenuTriggerStyle, normalizeSize, pageLoaderVariants, profileCardVariants, sentimentLabels, socialPlatformBadgeVariants, spinnerVariants, statDisplayVariants, tagInputVariants, toEnglishDigits, toPersianDigits, toggleVariants, transformNivoLineData, useChartTheme, useDebounce, useDocumentDirection, useFormField, useInfiniteScroll, useIsMobile, useLocalStorage, useNavRail, useRootStyles, useScrollLock, useSidebar };
5477
+ interface ShortcutsCheatsheetProps {
5478
+ /** Controlled open state. If omitted, the cheatsheet manages its own open state. */
5479
+ open?: boolean;
5480
+ onOpenChange?: (open: boolean) => void;
5481
+ /**
5482
+ * Global keyboard shortcut to toggle the cheatsheet. Default: `'shift+?'`.
5483
+ * Pass `false` to disable the global listener (useful when wiring your own).
5484
+ */
5485
+ shortcut?: HotkeyCombo | false;
5486
+ /** Trigger node — when set, the cheatsheet opens on click. Otherwise opening is controlled or via shortcut. */
5487
+ trigger?: React$1.ReactNode;
5488
+ /** Custom title (defaults to a localized "Keyboard shortcuts"). */
5489
+ title?: React$1.ReactNode;
5490
+ /** Custom description shown under the title. */
5491
+ description?: React$1.ReactNode;
5492
+ /** Locale for default strings + sort tie-breaks. */
5493
+ locale?: SupportedLocale;
5494
+ /** Override which entries to show. Defaults to the active provider's full registry. */
5495
+ hotkeys?: RegisteredHotkey[];
5496
+ /** Optional empty-state customization when the registry is empty. */
5497
+ emptyState?: React$1.ReactNode;
5498
+ className?: string;
5499
+ }
5500
+ /**
5501
+ * Visual help overlay that lists every hotkey registered with the active
5502
+ * `<HotkeyProvider>`. Opens on `Shift+?` by default (configurable) or via a
5503
+ * trigger button. Renders nothing useful outside a HotkeyProvider — the
5504
+ * registry is empty and the empty state shows.
5505
+ *
5506
+ * @example
5507
+ * <HotkeyProvider>
5508
+ * <ShortcutsCheatsheet />
5509
+ * <App /> // descendants register via useHotkey()
5510
+ * </HotkeyProvider>
5511
+ *
5512
+ * Pair with `useHotkey('?', 'shift+?', () => setOpen(true))` if you prefer
5513
+ * to wire the toggle yourself; the built-in shortcut is just a convenience.
5514
+ */
5515
+ declare const ShortcutsCheatsheet: React$1.ForwardRefExoticComponent<ShortcutsCheatsheetProps & React$1.RefAttributes<HTMLDivElement>>;
5516
+
5517
+ /**
5518
+ * Fires `handler` whenever a pointer event lands outside the referenced
5519
+ * element. Use for closing dropdowns, popovers, dismissable cards, etc.
5520
+ *
5521
+ * @example
5522
+ * const ref = useRef<HTMLDivElement>(null)
5523
+ * useOutsideClick(ref, () => setOpen(false), { when: open })
5524
+ *
5525
+ * @param ref - Ref to the inside element. Clicks inside (or on descendants) are ignored.
5526
+ * @param handler - Called when an outside click is detected.
5527
+ * @param options.when - When false, the listener is detached (avoid stale closures).
5528
+ * @param options.events - Which events to listen for. Default: ['mousedown', 'touchstart'].
5529
+ * Using 'mousedown' (instead of 'click') closes the menu before any click handler
5530
+ * inside fires — matches Radix/Headless UI behaviour.
5531
+ */
5532
+ declare function useOutsideClick<T extends HTMLElement = HTMLElement>(ref: React$1.RefObject<T | null>, handler: (event: MouseEvent | TouchEvent) => void, options?: {
5533
+ when?: boolean;
5534
+ events?: Array<'mousedown' | 'mouseup' | 'click' | 'touchstart' | 'touchend'>;
5535
+ }): void;
5536
+
5537
+ /**
5538
+ * Subscribes to a CSS media query and returns its current match state.
5539
+ * SSR-safe: returns `undefined` on the server and on the initial client
5540
+ * render (consumers must handle the `undefined` case).
5541
+ *
5542
+ * @example
5543
+ * const isLarge = useMediaQuery('(min-width: 1024px)')
5544
+ * if (isLarge) ... // narrow to true|false
5545
+ *
5546
+ * @example presets
5547
+ * const prefersDark = useMediaQuery('(prefers-color-scheme: dark)')
5548
+ * const reducedMotion = useMediaQuery('(prefers-reduced-motion: reduce)')
5549
+ */
5550
+ declare function useMediaQuery(query: string): boolean | undefined;
5551
+ /** Common breakpoint helper. Returns `undefined` until hydrated. */
5552
+ declare function useBreakpoint(breakpoint: 'sm' | 'md' | 'lg' | 'xl' | '2xl'): boolean | undefined;
5553
+
5554
+ interface UseClipboardOptions {
5555
+ /** Reset `copied` back to false after this many ms. @default 2000 */
5556
+ resetAfter?: number | false;
5557
+ }
5558
+ interface UseClipboardReturn {
5559
+ /** True for `resetAfter` ms after a successful copy. */
5560
+ copied: boolean;
5561
+ /** True if the last copy attempt threw. */
5562
+ error: Error | null;
5563
+ /**
5564
+ * Copy a string to clipboard. Returns a promise that resolves to `true` on
5565
+ * success, `false` if the API isn't available, and rejects on permission
5566
+ * denial (caught and exposed via `error`).
5567
+ */
5568
+ copy: (value: string) => Promise<boolean>;
5569
+ /** Manually reset `copied` and `error` state. */
5570
+ reset: () => void;
5571
+ }
5572
+ /**
5573
+ * useClipboard — copy text to the system clipboard with a transient `copied`
5574
+ * flag suitable for "Copied!" affordances. Uses the modern Clipboard API
5575
+ * with a `document.execCommand('copy')` fallback for older browsers.
5576
+ *
5577
+ * @example
5578
+ * const { copied, copy } = useClipboard()
5579
+ * <button onClick={() => copy('hello')}>{copied ? 'کپی شد' : 'کپی'}</button>
5580
+ */
5581
+ declare function useClipboard(options?: UseClipboardOptions): UseClipboardReturn;
5582
+
5583
+ /**
5584
+ * Returns the value from the previous render. Useful for diffing props,
5585
+ * detecting transitions, and triggering effects on specific value changes.
5586
+ *
5587
+ * @example
5588
+ * const prevId = usePrevious(currentId)
5589
+ * useEffect(() => {
5590
+ * if (prevId !== currentId) trackNavigation(prevId, currentId)
5591
+ * }, [prevId, currentId])
5592
+ *
5593
+ * @returns `undefined` on first render, then the value from the previous render.
5594
+ */
5595
+ declare function usePrevious<T>(value: T): T | undefined;
5596
+
5597
+ /**
5598
+ * Lightweight async-state hook for one-shot fetches without bringing in
5599
+ * TanStack Query. Tracks loading / data / error and exposes a stable
5600
+ * `run` function plus a `reset`. For request deduplication, caching,
5601
+ * retry, mutation, optimistic updates, etc. **prefer TanStack Query** —
5602
+ * this hook intentionally stays tiny.
5603
+ *
5604
+ * @example
5605
+ * const { data, error, status, run } = useAsync<User>()
5606
+ * useEffect(() => { run(() => fetch(`/api/users/${id}`).then(r => r.json())) }, [id, run])
5607
+ * if (status === 'loading') return <Skeleton />
5608
+ * if (status === 'error') return <ErrorState onRetry={run} />
5609
+ * return <UserCard user={data!} />
5610
+ */
5611
+ type AsyncStatus = 'idle' | 'loading' | 'success' | 'error';
5612
+ interface UseAsyncReturn<T> {
5613
+ data: T | null;
5614
+ error: unknown;
5615
+ status: AsyncStatus;
5616
+ isIdle: boolean;
5617
+ isLoading: boolean;
5618
+ isSuccess: boolean;
5619
+ isError: boolean;
5620
+ /** Run an async operation. Cancels the previous in-flight result. */
5621
+ run: (operation: () => Promise<T>) => Promise<T | undefined>;
5622
+ reset: () => void;
5623
+ }
5624
+ declare function useAsync<T = unknown>(initialData?: T | null): UseAsyncReturn<T>;
5625
+
5626
+ interface UseFilterParamsOptions<T extends FilterStateShape> {
5627
+ /**
5628
+ * Convert a state object into a flat map of URL params. Return null/undefined
5629
+ * for entries you want to omit (e.g. defaults, empty arrays, null fields).
5630
+ */
5631
+ serialize: (state: T) => Record<string, string | undefined | null>;
5632
+ /**
5633
+ * Parse the current URL params back into a partial state. Called once on
5634
+ * mount to hydrate the FilterProvider, and on browser navigation events.
5635
+ */
5636
+ parse: (params: URLSearchParams) => Partial<T>;
5637
+ /**
5638
+ * Debounce window (ms) before pushing serialized state to the URL.
5639
+ * @default 200
5640
+ */
5641
+ debounceMs?: number;
5642
+ /**
5643
+ * Use `history.pushState` instead of `replaceState`. Default replace
5644
+ * keeps the back button useful for actual page navigation rather than
5645
+ * filter tweaks.
5646
+ * @default 'replace'
5647
+ */
5648
+ history?: 'push' | 'replace';
5649
+ /** Disable the hook (e.g. while a parent is loading server-side data). */
5650
+ disabled?: boolean;
5651
+ }
5652
+ declare function normalizeUrlDigits(input: string): string;
5653
+ /**
5654
+ * Two-way bind a `<FilterProvider>`'s state with `URLSearchParams`.
5655
+ *
5656
+ * - On mount, parses `window.location.search` and merges it onto the
5657
+ * provider's initial state via `patch`.
5658
+ * - On state change, runs `serialize` and writes the result to the URL
5659
+ * (debounced 200ms, replaceState by default).
5660
+ * - Persian/Arabic digits in incoming params are normalized to Latin.
5661
+ *
5662
+ * SSR-safe — does nothing on the server. Must be used inside a
5663
+ * `<FilterProvider>`. Throws otherwise to surface wiring mistakes early.
5664
+ */
5665
+ declare function useFilterParams<T extends FilterStateShape>(options: UseFilterParamsOptions<T>): void;
5666
+
5667
+ interface FilterPreset<T extends FilterStateShape = FilterStateShape> {
5668
+ /** Stable, locally-unique id (slug or random). */
5669
+ id: string;
5670
+ /** User-visible name. */
5671
+ name: string;
5672
+ /** Snapshot of the filter state. */
5673
+ state: T;
5674
+ /** Unix timestamp (ms) of creation. */
5675
+ createdAt: number;
5676
+ /** Unix timestamp (ms) of the most recent rename / overwrite. */
5677
+ updatedAt: number;
5678
+ }
5679
+ interface UseFilterPresetsOptions {
5680
+ /** localStorage namespace (must be unique per app section). */
5681
+ storageKey: string;
5682
+ /** Soft cap on total presets retained. Oldest is dropped on overflow. @default 20 */
5683
+ maxPresets?: number;
5684
+ }
5685
+ interface UseFilterPresetsReturn<T extends FilterStateShape> {
5686
+ /** Sorted list (newest first by `updatedAt`). */
5687
+ presets: FilterPreset<T>[];
5688
+ /** Save the FilterProvider's current state under a name. Returns the new preset's id. */
5689
+ save: (name: string) => string;
5690
+ /** Apply a preset's state to the FilterProvider via `set`. */
5691
+ load: (id: string) => boolean;
5692
+ /** Remove a preset. */
5693
+ remove: (id: string) => void;
5694
+ /** Update a preset's name. */
5695
+ rename: (id: string, name: string) => boolean;
5696
+ /** Overwrite a preset with the current state. */
5697
+ overwrite: (id: string) => boolean;
5698
+ /** Clear ALL presets in this namespace. */
5699
+ clear: () => void;
5700
+ }
5701
+ /**
5702
+ * Save / load / rename / delete named presets of a `<FilterProvider>`'s
5703
+ * state in localStorage.
5704
+ *
5705
+ * Storage shape: `localStorage[storageKey] = JSON.stringify(FilterPreset[])`.
5706
+ * Presets are sorted newest-first by `updatedAt`. Soft-capped at `maxPresets`
5707
+ * (default 20) — oldest is dropped on overflow at save time.
5708
+ *
5709
+ * SSR-safe: returns an empty list on the server, hydrates on first effect.
5710
+ */
5711
+ declare function useFilterPresets<T extends FilterStateShape>(options: UseFilterPresetsOptions): UseFilterPresetsReturn<T>;
5712
+
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 };