@fragments-sdk/ui 0.12.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (675) hide show
  1. package/dist/assets/ui.css +1642 -1679
  2. package/dist/chart.cjs.map +1 -1
  3. package/dist/chart.js.map +1 -1
  4. package/dist/codeblock.cjs +26 -18
  5. package/dist/codeblock.cjs.map +1 -1
  6. package/dist/codeblock.js +26 -18
  7. package/dist/codeblock.js.map +1 -1
  8. package/dist/components/Accordion/Accordion.module.scss.cjs +8 -8
  9. package/dist/components/Accordion/Accordion.module.scss.js +8 -8
  10. package/dist/components/Accordion/index.cjs +17 -6
  11. package/dist/components/Accordion/index.cjs.map +1 -1
  12. package/dist/components/Accordion/index.d.ts +25 -12
  13. package/dist/components/Accordion/index.d.ts.map +1 -1
  14. package/dist/components/Accordion/index.js +17 -6
  15. package/dist/components/Accordion/index.js.map +1 -1
  16. package/dist/components/Alert/Alert.module.scss.cjs +12 -12
  17. package/dist/components/Alert/Alert.module.scss.js +12 -12
  18. package/dist/components/Alert/index.cjs +37 -15
  19. package/dist/components/Alert/index.cjs.map +1 -1
  20. package/dist/components/Alert/index.d.ts +15 -22
  21. package/dist/components/Alert/index.d.ts.map +1 -1
  22. package/dist/components/Alert/index.js +37 -15
  23. package/dist/components/Alert/index.js.map +1 -1
  24. package/dist/components/AppShell/AppShell.module.scss.cjs +14 -14
  25. package/dist/components/AppShell/AppShell.module.scss.js +14 -14
  26. package/dist/components/AppShell/index.cjs +3 -1
  27. package/dist/components/AppShell/index.cjs.map +1 -1
  28. package/dist/components/AppShell/index.d.ts.map +1 -1
  29. package/dist/components/AppShell/index.js +3 -1
  30. package/dist/components/AppShell/index.js.map +1 -1
  31. package/dist/components/Avatar/index.cjs +9 -1
  32. package/dist/components/Avatar/index.cjs.map +1 -1
  33. package/dist/components/Avatar/index.d.ts +2 -0
  34. package/dist/components/Avatar/index.d.ts.map +1 -1
  35. package/dist/components/Avatar/index.js +9 -1
  36. package/dist/components/Avatar/index.js.map +1 -1
  37. package/dist/components/Badge/index.cjs +4 -2
  38. package/dist/components/Badge/index.cjs.map +1 -1
  39. package/dist/components/Badge/index.d.ts +3 -0
  40. package/dist/components/Badge/index.d.ts.map +1 -1
  41. package/dist/components/Badge/index.js +4 -2
  42. package/dist/components/Badge/index.js.map +1 -1
  43. package/dist/components/BentoGrid/BentoGrid.module.scss.cjs +11 -11
  44. package/dist/components/BentoGrid/BentoGrid.module.scss.js +11 -11
  45. package/dist/components/BentoGrid/index.cjs +8 -5
  46. package/dist/components/BentoGrid/index.cjs.map +1 -1
  47. package/dist/components/BentoGrid/index.d.ts +2 -8
  48. package/dist/components/BentoGrid/index.d.ts.map +1 -1
  49. package/dist/components/BentoGrid/index.js +8 -5
  50. package/dist/components/BentoGrid/index.js.map +1 -1
  51. package/dist/components/Box/index.cjs +12 -2
  52. package/dist/components/Box/index.cjs.map +1 -1
  53. package/dist/components/Box/index.d.ts +1 -1
  54. package/dist/components/Box/index.d.ts.map +1 -1
  55. package/dist/components/Box/index.js +12 -2
  56. package/dist/components/Box/index.js.map +1 -1
  57. package/dist/components/Breadcrumbs/index.cjs +3 -1
  58. package/dist/components/Breadcrumbs/index.cjs.map +1 -1
  59. package/dist/components/Breadcrumbs/index.d.ts +3 -1
  60. package/dist/components/Breadcrumbs/index.d.ts.map +1 -1
  61. package/dist/components/Breadcrumbs/index.js +3 -1
  62. package/dist/components/Breadcrumbs/index.js.map +1 -1
  63. package/dist/components/Button/Button.module.scss.cjs +11 -11
  64. package/dist/components/Button/Button.module.scss.js +11 -11
  65. package/dist/components/Button/index.cjs +5 -2
  66. package/dist/components/Button/index.cjs.map +1 -1
  67. package/dist/components/Button/index.d.ts +3 -3
  68. package/dist/components/Button/index.d.ts.map +1 -1
  69. package/dist/components/Button/index.js +5 -2
  70. package/dist/components/Button/index.js.map +1 -1
  71. package/dist/components/ButtonGroup/index.cjs +3 -2
  72. package/dist/components/ButtonGroup/index.cjs.map +1 -1
  73. package/dist/components/ButtonGroup/index.d.ts +1 -2
  74. package/dist/components/ButtonGroup/index.d.ts.map +1 -1
  75. package/dist/components/ButtonGroup/index.js +3 -2
  76. package/dist/components/ButtonGroup/index.js.map +1 -1
  77. package/dist/components/Card/Card.module.scss.cjs +14 -14
  78. package/dist/components/Card/Card.module.scss.js +14 -14
  79. package/dist/components/Card/index.cjs +3 -22
  80. package/dist/components/Card/index.cjs.map +1 -1
  81. package/dist/components/Card/index.d.ts +6 -11
  82. package/dist/components/Card/index.d.ts.map +1 -1
  83. package/dist/components/Card/index.js +3 -22
  84. package/dist/components/Card/index.js.map +1 -1
  85. package/dist/components/Chart/Chart.module.scss.cjs +15 -15
  86. package/dist/components/Chart/Chart.module.scss.js +15 -15
  87. package/dist/components/Chart/index.d.ts +3 -3
  88. package/dist/components/Chart/index.d.ts.map +1 -1
  89. package/dist/components/Checkbox/Checkbox.module.scss.cjs +10 -10
  90. package/dist/components/Checkbox/Checkbox.module.scss.js +10 -10
  91. package/dist/components/Checkbox/index.cjs +11 -4
  92. package/dist/components/Checkbox/index.cjs.map +1 -1
  93. package/dist/components/Checkbox/index.d.ts +6 -0
  94. package/dist/components/Checkbox/index.d.ts.map +1 -1
  95. package/dist/components/Checkbox/index.js +11 -4
  96. package/dist/components/Checkbox/index.js.map +1 -1
  97. package/dist/components/Chip/index.cjs +11 -3
  98. package/dist/components/Chip/index.cjs.map +1 -1
  99. package/dist/components/Chip/index.d.ts +1 -2
  100. package/dist/components/Chip/index.d.ts.map +1 -1
  101. package/dist/components/Chip/index.js +11 -3
  102. package/dist/components/Chip/index.js.map +1 -1
  103. package/dist/components/CodeBlock/CodeBlock.module.scss.cjs +20 -20
  104. package/dist/components/CodeBlock/CodeBlock.module.scss.js +20 -20
  105. package/dist/components/CodeBlock/index.d.ts +8 -2
  106. package/dist/components/CodeBlock/index.d.ts.map +1 -1
  107. package/dist/components/Collapsible/Collapsible.module.scss.cjs +10 -10
  108. package/dist/components/Collapsible/Collapsible.module.scss.js +10 -10
  109. package/dist/components/Collapsible/index.cjs +45 -10
  110. package/dist/components/Collapsible/index.cjs.map +1 -1
  111. package/dist/components/Collapsible/index.d.ts +6 -12
  112. package/dist/components/Collapsible/index.d.ts.map +1 -1
  113. package/dist/components/Collapsible/index.js +45 -10
  114. package/dist/components/Collapsible/index.js.map +1 -1
  115. package/dist/components/Combobox/Combobox.module.scss.cjs +15 -15
  116. package/dist/components/Combobox/Combobox.module.scss.js +15 -15
  117. package/dist/components/Combobox/index.cjs +86 -27
  118. package/dist/components/Combobox/index.cjs.map +1 -1
  119. package/dist/components/Combobox/index.d.ts +40 -23
  120. package/dist/components/Combobox/index.d.ts.map +1 -1
  121. package/dist/components/Combobox/index.js +86 -27
  122. package/dist/components/Combobox/index.js.map +1 -1
  123. package/dist/components/Command/Command.module.scss.cjs +11 -11
  124. package/dist/components/Command/Command.module.scss.js +11 -11
  125. package/dist/components/Command/index.cjs +55 -22
  126. package/dist/components/Command/index.cjs.map +1 -1
  127. package/dist/components/Command/index.d.ts +3 -3
  128. package/dist/components/Command/index.d.ts.map +1 -1
  129. package/dist/components/Command/index.js +55 -22
  130. package/dist/components/Command/index.js.map +1 -1
  131. package/dist/components/ConversationList/ConversationList.module.scss.cjs +10 -10
  132. package/dist/components/ConversationList/ConversationList.module.scss.js +10 -10
  133. package/dist/components/ConversationList/index.cjs +6 -3
  134. package/dist/components/ConversationList/index.cjs.map +1 -1
  135. package/dist/components/ConversationList/index.d.ts +1 -1
  136. package/dist/components/ConversationList/index.d.ts.map +1 -1
  137. package/dist/components/ConversationList/index.js +6 -3
  138. package/dist/components/ConversationList/index.js.map +1 -1
  139. package/dist/components/DataTable/DataTable.module.scss.cjs +26 -26
  140. package/dist/components/DataTable/DataTable.module.scss.js +26 -26
  141. package/dist/components/DataTable/index.cjs +25 -4
  142. package/dist/components/DataTable/index.cjs.map +1 -1
  143. package/dist/components/DataTable/index.d.ts +7 -2
  144. package/dist/components/DataTable/index.d.ts.map +1 -1
  145. package/dist/components/DataTable/index.js +25 -4
  146. package/dist/components/DataTable/index.js.map +1 -1
  147. package/dist/components/DatePicker/DatePicker.module.scss.cjs +26 -26
  148. package/dist/components/DatePicker/DatePicker.module.scss.js +26 -26
  149. package/dist/components/DatePicker/index.d.ts +4 -5
  150. package/dist/components/DatePicker/index.d.ts.map +1 -1
  151. package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
  152. package/dist/components/Dialog/Dialog.module.scss.js +14 -14
  153. package/dist/components/Dialog/index.cjs +14 -10
  154. package/dist/components/Dialog/index.cjs.map +1 -1
  155. package/dist/components/Dialog/index.d.ts +26 -17
  156. package/dist/components/Dialog/index.d.ts.map +1 -1
  157. package/dist/components/Dialog/index.js +14 -10
  158. package/dist/components/Dialog/index.js.map +1 -1
  159. package/dist/components/Drawer/Drawer.module.scss.cjs +26 -26
  160. package/dist/components/Drawer/Drawer.module.scss.js +26 -26
  161. package/dist/components/Drawer/index.cjs +41 -11
  162. package/dist/components/Drawer/index.cjs.map +1 -1
  163. package/dist/components/Drawer/index.d.ts +11 -13
  164. package/dist/components/Drawer/index.d.ts.map +1 -1
  165. package/dist/components/Drawer/index.js +24 -11
  166. package/dist/components/Drawer/index.js.map +1 -1
  167. package/dist/components/Editor/Editor.module.scss.cjs +17 -17
  168. package/dist/components/Editor/Editor.module.scss.js +17 -17
  169. package/dist/components/Editor/index.cjs +32 -7
  170. package/dist/components/Editor/index.cjs.map +1 -1
  171. package/dist/components/Editor/index.d.ts +16 -3
  172. package/dist/components/Editor/index.d.ts.map +1 -1
  173. package/dist/components/Editor/index.js +32 -7
  174. package/dist/components/Editor/index.js.map +1 -1
  175. package/dist/components/EmptyState/EmptyState.module.scss.cjs +8 -8
  176. package/dist/components/EmptyState/EmptyState.module.scss.js +8 -8
  177. package/dist/components/EmptyState/index.cjs +12 -8
  178. package/dist/components/EmptyState/index.cjs.map +1 -1
  179. package/dist/components/EmptyState/index.d.ts +8 -12
  180. package/dist/components/EmptyState/index.d.ts.map +1 -1
  181. package/dist/components/EmptyState/index.js +12 -8
  182. package/dist/components/EmptyState/index.js.map +1 -1
  183. package/dist/components/Fieldset/index.cjs +2 -2
  184. package/dist/components/Fieldset/index.cjs.map +1 -1
  185. package/dist/components/Fieldset/index.d.ts +2 -3
  186. package/dist/components/Fieldset/index.d.ts.map +1 -1
  187. package/dist/components/Fieldset/index.js +2 -2
  188. package/dist/components/Fieldset/index.js.map +1 -1
  189. package/dist/components/Form/index.cjs +13 -13
  190. package/dist/components/Form/index.cjs.map +1 -1
  191. package/dist/components/Form/index.d.ts +5 -2
  192. package/dist/components/Form/index.d.ts.map +1 -1
  193. package/dist/components/Form/index.js +13 -13
  194. package/dist/components/Form/index.js.map +1 -1
  195. package/dist/components/Grid/Grid.module.scss.cjs +57 -57
  196. package/dist/components/Grid/Grid.module.scss.js +57 -57
  197. package/dist/components/Grid/index.cjs +7 -4
  198. package/dist/components/Grid/index.cjs.map +1 -1
  199. package/dist/components/Grid/index.d.ts +5 -3
  200. package/dist/components/Grid/index.d.ts.map +1 -1
  201. package/dist/components/Grid/index.js +7 -4
  202. package/dist/components/Grid/index.js.map +1 -1
  203. package/dist/components/Header/Header.module.scss.cjs +21 -21
  204. package/dist/components/Header/Header.module.scss.js +21 -21
  205. package/dist/components/Header/index.cjs +61 -23
  206. package/dist/components/Header/index.cjs.map +1 -1
  207. package/dist/components/Header/index.d.ts +27 -34
  208. package/dist/components/Header/index.d.ts.map +1 -1
  209. package/dist/components/Header/index.js +61 -23
  210. package/dist/components/Header/index.js.map +1 -1
  211. package/dist/components/Icon/index.cjs +11 -1
  212. package/dist/components/Icon/index.cjs.map +1 -1
  213. package/dist/components/Icon/index.d.ts +28 -9
  214. package/dist/components/Icon/index.d.ts.map +1 -1
  215. package/dist/components/Icon/index.js +11 -1
  216. package/dist/components/Icon/index.js.map +1 -1
  217. package/dist/components/Image/index.cjs +15 -4
  218. package/dist/components/Image/index.cjs.map +1 -1
  219. package/dist/components/Image/index.d.ts +7 -1
  220. package/dist/components/Image/index.d.ts.map +1 -1
  221. package/dist/components/Image/index.js +15 -4
  222. package/dist/components/Image/index.js.map +1 -1
  223. package/dist/components/Input/Input.module.scss.cjs +13 -13
  224. package/dist/components/Input/Input.module.scss.js +13 -13
  225. package/dist/components/Input/index.cjs +79 -31
  226. package/dist/components/Input/index.cjs.map +1 -1
  227. package/dist/components/Input/index.d.ts +17 -3
  228. package/dist/components/Input/index.d.ts.map +1 -1
  229. package/dist/components/Input/index.js +79 -31
  230. package/dist/components/Input/index.js.map +1 -1
  231. package/dist/components/Link/index.cjs +17 -0
  232. package/dist/components/Link/index.cjs.map +1 -1
  233. package/dist/components/Link/index.d.ts.map +1 -1
  234. package/dist/components/Link/index.js +17 -0
  235. package/dist/components/Link/index.js.map +1 -1
  236. package/dist/components/Listbox/Listbox.module.scss.cjs +8 -8
  237. package/dist/components/Listbox/Listbox.module.scss.js +8 -8
  238. package/dist/components/Listbox/index.cjs +10 -6
  239. package/dist/components/Listbox/index.cjs.map +1 -1
  240. package/dist/components/Listbox/index.d.ts +2 -2
  241. package/dist/components/Listbox/index.d.ts.map +1 -1
  242. package/dist/components/Listbox/index.js +10 -6
  243. package/dist/components/Listbox/index.js.map +1 -1
  244. package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
  245. package/dist/components/Markdown/Markdown.module.scss.js +1 -1
  246. package/dist/components/Markdown/index.d.ts +4 -2
  247. package/dist/components/Markdown/index.d.ts.map +1 -1
  248. package/dist/components/Menu/Menu.module.scss.cjs +13 -13
  249. package/dist/components/Menu/Menu.module.scss.js +13 -13
  250. package/dist/components/Menu/index.cjs +41 -16
  251. package/dist/components/Menu/index.cjs.map +1 -1
  252. package/dist/components/Menu/index.d.ts +24 -27
  253. package/dist/components/Menu/index.d.ts.map +1 -1
  254. package/dist/components/Menu/index.js +41 -16
  255. package/dist/components/Menu/index.js.map +1 -1
  256. package/dist/components/Message/Message.module.scss.cjs +18 -18
  257. package/dist/components/Message/Message.module.scss.js +18 -18
  258. package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +28 -28
  259. package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +28 -28
  260. package/dist/components/NavigationMenu/NavigationMenuContext.cjs.map +1 -1
  261. package/dist/components/NavigationMenu/NavigationMenuContext.d.ts +9 -0
  262. package/dist/components/NavigationMenu/NavigationMenuContext.d.ts.map +1 -1
  263. package/dist/components/NavigationMenu/NavigationMenuContext.js.map +1 -1
  264. package/dist/components/NavigationMenu/index.cjs +92 -21
  265. package/dist/components/NavigationMenu/index.cjs.map +1 -1
  266. package/dist/components/NavigationMenu/index.d.ts +5 -1
  267. package/dist/components/NavigationMenu/index.d.ts.map +1 -1
  268. package/dist/components/NavigationMenu/index.js +92 -21
  269. package/dist/components/NavigationMenu/index.js.map +1 -1
  270. package/dist/components/NavigationMenu/useNavigationMenu.cjs +2 -0
  271. package/dist/components/NavigationMenu/useNavigationMenu.cjs.map +1 -1
  272. package/dist/components/NavigationMenu/useNavigationMenu.d.ts +1 -0
  273. package/dist/components/NavigationMenu/useNavigationMenu.d.ts.map +1 -1
  274. package/dist/components/NavigationMenu/useNavigationMenu.js +2 -0
  275. package/dist/components/NavigationMenu/useNavigationMenu.js.map +1 -1
  276. package/dist/components/Pagination/index.cjs +37 -9
  277. package/dist/components/Pagination/index.cjs.map +1 -1
  278. package/dist/components/Pagination/index.d.ts +2 -3
  279. package/dist/components/Pagination/index.d.ts.map +1 -1
  280. package/dist/components/Pagination/index.js +37 -9
  281. package/dist/components/Pagination/index.js.map +1 -1
  282. package/dist/components/Popover/Popover.module.scss.cjs +10 -10
  283. package/dist/components/Popover/Popover.module.scss.js +10 -10
  284. package/dist/components/Popover/index.cjs +52 -10
  285. package/dist/components/Popover/index.cjs.map +1 -1
  286. package/dist/components/Popover/index.d.ts +22 -16
  287. package/dist/components/Popover/index.d.ts.map +1 -1
  288. package/dist/components/Popover/index.js +35 -10
  289. package/dist/components/Popover/index.js.map +1 -1
  290. package/dist/components/Progress/index.cjs +3 -1
  291. package/dist/components/Progress/index.cjs.map +1 -1
  292. package/dist/components/Progress/index.d.ts.map +1 -1
  293. package/dist/components/Progress/index.js +3 -1
  294. package/dist/components/Progress/index.js.map +1 -1
  295. package/dist/components/Prompt/Prompt.module.scss.cjs +14 -14
  296. package/dist/components/Prompt/Prompt.module.scss.js +14 -14
  297. package/dist/components/Prompt/index.cjs +14 -2
  298. package/dist/components/Prompt/index.cjs.map +1 -1
  299. package/dist/components/Prompt/index.d.ts +8 -5
  300. package/dist/components/Prompt/index.d.ts.map +1 -1
  301. package/dist/components/Prompt/index.js +14 -2
  302. package/dist/components/Prompt/index.js.map +1 -1
  303. package/dist/components/RadioGroup/index.cjs +14 -6
  304. package/dist/components/RadioGroup/index.cjs.map +1 -1
  305. package/dist/components/RadioGroup/index.d.ts +12 -2
  306. package/dist/components/RadioGroup/index.d.ts.map +1 -1
  307. package/dist/components/RadioGroup/index.js +14 -6
  308. package/dist/components/RadioGroup/index.js.map +1 -1
  309. package/dist/components/Select/Select.module.scss.cjs +10 -10
  310. package/dist/components/Select/Select.module.scss.js +10 -10
  311. package/dist/components/Select/index.cjs +43 -29
  312. package/dist/components/Select/index.cjs.map +1 -1
  313. package/dist/components/Select/index.d.ts +12 -11
  314. package/dist/components/Select/index.d.ts.map +1 -1
  315. package/dist/components/Select/index.js +43 -29
  316. package/dist/components/Select/index.js.map +1 -1
  317. package/dist/components/Sidebar/Sidebar.module.scss.cjs +42 -42
  318. package/dist/components/Sidebar/Sidebar.module.scss.js +42 -42
  319. package/dist/components/Sidebar/index.cjs +73 -26
  320. package/dist/components/Sidebar/index.cjs.map +1 -1
  321. package/dist/components/Sidebar/index.d.ts +23 -35
  322. package/dist/components/Sidebar/index.d.ts.map +1 -1
  323. package/dist/components/Sidebar/index.js +73 -26
  324. package/dist/components/Sidebar/index.js.map +1 -1
  325. package/dist/components/Skeleton/index.cjs +6 -3
  326. package/dist/components/Skeleton/index.cjs.map +1 -1
  327. package/dist/components/Skeleton/index.d.ts +3 -7
  328. package/dist/components/Skeleton/index.d.ts.map +1 -1
  329. package/dist/components/Skeleton/index.js +6 -3
  330. package/dist/components/Skeleton/index.js.map +1 -1
  331. package/dist/components/Slider/Slider.module.scss.cjs +13 -10
  332. package/dist/components/Slider/Slider.module.scss.cjs.map +1 -1
  333. package/dist/components/Slider/Slider.module.scss.js +13 -10
  334. package/dist/components/Slider/Slider.module.scss.js.map +1 -1
  335. package/dist/components/Slider/index.cjs +33 -1
  336. package/dist/components/Slider/index.cjs.map +1 -1
  337. package/dist/components/Slider/index.d.ts +2 -0
  338. package/dist/components/Slider/index.d.ts.map +1 -1
  339. package/dist/components/Slider/index.js +33 -1
  340. package/dist/components/Slider/index.js.map +1 -1
  341. package/dist/components/Stack/index.cjs +12 -2
  342. package/dist/components/Stack/index.cjs.map +1 -1
  343. package/dist/components/Stack/index.d.ts +3 -2
  344. package/dist/components/Stack/index.d.ts.map +1 -1
  345. package/dist/components/Stack/index.js +12 -2
  346. package/dist/components/Stack/index.js.map +1 -1
  347. package/dist/components/Table/Table.module.scss.cjs +16 -16
  348. package/dist/components/Table/Table.module.scss.js +16 -16
  349. package/dist/components/Table/index.d.ts +10 -4
  350. package/dist/components/Table/index.d.ts.map +1 -1
  351. package/dist/components/TableOfContents/index.cjs +8 -5
  352. package/dist/components/TableOfContents/index.cjs.map +1 -1
  353. package/dist/components/TableOfContents/index.d.ts +2 -2
  354. package/dist/components/TableOfContents/index.d.ts.map +1 -1
  355. package/dist/components/TableOfContents/index.js +8 -5
  356. package/dist/components/TableOfContents/index.js.map +1 -1
  357. package/dist/components/Tabs/Tabs.module.scss.cjs +9 -9
  358. package/dist/components/Tabs/Tabs.module.scss.js +9 -9
  359. package/dist/components/Tabs/index.cjs +9 -6
  360. package/dist/components/Tabs/index.cjs.map +1 -1
  361. package/dist/components/Tabs/index.d.ts +4 -1
  362. package/dist/components/Tabs/index.d.ts.map +1 -1
  363. package/dist/components/Tabs/index.js +9 -6
  364. package/dist/components/Tabs/index.js.map +1 -1
  365. package/dist/components/Textarea/index.cjs +61 -43
  366. package/dist/components/Textarea/index.cjs.map +1 -1
  367. package/dist/components/Textarea/index.d.ts +9 -1
  368. package/dist/components/Textarea/index.d.ts.map +1 -1
  369. package/dist/components/Textarea/index.js +61 -43
  370. package/dist/components/Textarea/index.js.map +1 -1
  371. package/dist/components/Theme/index.cjs +3 -1
  372. package/dist/components/Theme/index.cjs.map +1 -1
  373. package/dist/components/Theme/index.d.ts +2 -4
  374. package/dist/components/Theme/index.d.ts.map +1 -1
  375. package/dist/components/Theme/index.js +3 -1
  376. package/dist/components/Theme/index.js.map +1 -1
  377. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +22 -22
  378. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +22 -22
  379. package/dist/components/Toast/Toast.module.scss.cjs +20 -20
  380. package/dist/components/Toast/Toast.module.scss.js +20 -20
  381. package/dist/components/Toast/index.cjs +15 -14
  382. package/dist/components/Toast/index.cjs.map +1 -1
  383. package/dist/components/Toast/index.d.ts +9 -5
  384. package/dist/components/Toast/index.d.ts.map +1 -1
  385. package/dist/components/Toast/index.js +15 -14
  386. package/dist/components/Toast/index.js.map +1 -1
  387. package/dist/components/Toggle/Toggle.module.scss.cjs +11 -11
  388. package/dist/components/Toggle/Toggle.module.scss.js +11 -11
  389. package/dist/components/Toggle/index.cjs +1 -1
  390. package/dist/components/Toggle/index.cjs.map +1 -1
  391. package/dist/components/Toggle/index.js +1 -1
  392. package/dist/components/Toggle/index.js.map +1 -1
  393. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +17 -17
  394. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +17 -17
  395. package/dist/components/ToggleGroup/index.cjs +27 -8
  396. package/dist/components/ToggleGroup/index.cjs.map +1 -1
  397. package/dist/components/ToggleGroup/index.d.ts +8 -3
  398. package/dist/components/ToggleGroup/index.d.ts.map +1 -1
  399. package/dist/components/ToggleGroup/index.js +27 -8
  400. package/dist/components/ToggleGroup/index.js.map +1 -1
  401. package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
  402. package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
  403. package/dist/components/Tooltip/index.cjs +32 -10
  404. package/dist/components/Tooltip/index.cjs.map +1 -1
  405. package/dist/components/Tooltip/index.d.ts +3 -1
  406. package/dist/components/Tooltip/index.d.ts.map +1 -1
  407. package/dist/components/Tooltip/index.js +32 -10
  408. package/dist/components/Tooltip/index.js.map +1 -1
  409. package/dist/components/VisuallyHidden/index.cjs +10 -2
  410. package/dist/components/VisuallyHidden/index.cjs.map +1 -1
  411. package/dist/components/VisuallyHidden/index.d.ts +1 -1
  412. package/dist/components/VisuallyHidden/index.d.ts.map +1 -1
  413. package/dist/components/VisuallyHidden/index.js +10 -2
  414. package/dist/components/VisuallyHidden/index.js.map +1 -1
  415. package/dist/datepicker.cjs +32 -11
  416. package/dist/datepicker.cjs.map +1 -1
  417. package/dist/datepicker.js +32 -11
  418. package/dist/datepicker.js.map +1 -1
  419. package/dist/index.cjs.map +1 -1
  420. package/dist/index.d.ts +2 -1
  421. package/dist/index.d.ts.map +1 -1
  422. package/dist/index.js.map +1 -1
  423. package/dist/markdown.cjs +5 -5
  424. package/dist/markdown.cjs.map +1 -1
  425. package/dist/markdown.js +5 -5
  426. package/dist/markdown.js.map +1 -1
  427. package/dist/table.cjs +19 -3
  428. package/dist/table.cjs.map +1 -1
  429. package/dist/table.js +19 -3
  430. package/dist/table.js.map +1 -1
  431. package/fragments.json +1 -1
  432. package/package.json +2 -2
  433. package/src/blocks/AccountSettings.block.ts +1 -1
  434. package/src/blocks/ActivityFeed.block.ts +1 -1
  435. package/src/blocks/ActivityFeedSkeleton.block.ts +1 -1
  436. package/src/blocks/BlogEditor.block.ts +1 -1
  437. package/src/blocks/ChatInterface.block.ts +1 -1
  438. package/src/blocks/ChatMessages.block.ts +1 -1
  439. package/src/blocks/CheckoutForm.block.ts +1 -1
  440. package/src/blocks/CommandPalette.block.ts +1 -1
  441. package/src/blocks/ContactForm.block.ts +1 -1
  442. package/src/blocks/DashboardLayout.block.ts +1 -1
  443. package/src/blocks/DashboardPage.block.ts +1 -1
  444. package/src/blocks/DashboardSkeleton.block.ts +1 -1
  445. package/src/blocks/DataTable.block.ts +1 -1
  446. package/src/blocks/EmptyState.block.ts +1 -1
  447. package/src/blocks/FAQSection.block.ts +1 -1
  448. package/src/blocks/FeatureGrid.block.ts +1 -1
  449. package/src/blocks/HeroSection.block.ts +1 -1
  450. package/src/blocks/LoginForm.block.ts +1 -1
  451. package/src/blocks/NavigationHeader.block.ts +1 -1
  452. package/src/blocks/PaginatedTable.block.ts +1 -1
  453. package/src/blocks/PricingComparison.block.ts +1 -1
  454. package/src/blocks/ProductCard.block.ts +1 -1
  455. package/src/blocks/RegistrationForm.block.ts +1 -1
  456. package/src/blocks/SettingsDrawer.block.ts +1 -1
  457. package/src/blocks/SettingsPanel.block.ts +1 -1
  458. package/src/blocks/ShoppingCart.block.ts +1 -1
  459. package/src/blocks/StatsCard.block.ts +1 -1
  460. package/src/blocks/StatsCardSkeleton.block.ts +1 -1
  461. package/src/blocks/TableSkeleton.block.ts +1 -1
  462. package/src/blocks/ThinkingStates.block.ts +1 -1
  463. package/src/components/Accordion/Accordion.fragment.tsx +7 -7
  464. package/src/components/Accordion/Accordion.module.scss +2 -2
  465. package/src/components/Accordion/Accordion.test.tsx +41 -5
  466. package/src/components/Accordion/index.tsx +41 -14
  467. package/src/components/Alert/Alert.fragment.tsx +5 -1
  468. package/src/components/Alert/Alert.module.scss +1 -1
  469. package/src/components/Alert/Alert.test.tsx +25 -0
  470. package/src/components/Alert/index.tsx +49 -30
  471. package/src/components/AppShell/AppShell.fragment.tsx +1 -1
  472. package/src/components/AppShell/AppShell.module.scss +5 -5
  473. package/src/components/AppShell/AppShell.test.tsx +12 -0
  474. package/src/components/AppShell/index.tsx +2 -0
  475. package/src/components/Avatar/Avatar.fragment.tsx +7 -1
  476. package/src/components/Avatar/Avatar.test.tsx +24 -2
  477. package/src/components/Avatar/index.tsx +13 -1
  478. package/src/components/Badge/Badge.fragment.tsx +16 -1
  479. package/src/components/Badge/Badge.test.tsx +8 -1
  480. package/src/components/Badge/index.tsx +7 -2
  481. package/src/components/BentoGrid/BentoGrid.fragment.tsx +3 -1
  482. package/src/components/BentoGrid/BentoGrid.module.scss +52 -16
  483. package/src/components/BentoGrid/BentoGrid.test.tsx +20 -0
  484. package/src/components/BentoGrid/index.tsx +9 -12
  485. package/src/components/Box/Box.fragment.tsx +3 -1
  486. package/src/components/Box/Box.test.tsx +14 -0
  487. package/src/components/Box/index.tsx +8 -2
  488. package/src/components/Breadcrumbs/Breadcrumbs.fragment.tsx +19 -1
  489. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +13 -0
  490. package/src/components/Breadcrumbs/index.tsx +5 -1
  491. package/src/components/Button/Button.fragment.tsx +28 -6
  492. package/src/components/Button/Button.module.scss +3 -3
  493. package/src/components/Button/Button.test.tsx +11 -0
  494. package/src/components/Button/index.tsx +16 -6
  495. package/src/components/ButtonGroup/ButtonGroup.fragment.tsx +4 -2
  496. package/src/components/ButtonGroup/ButtonGroup.test.tsx +10 -0
  497. package/src/components/ButtonGroup/index.tsx +3 -3
  498. package/src/components/Card/Card.fragment.tsx +24 -9
  499. package/src/components/Card/Card.module.scss +8 -8
  500. package/src/components/Card/Card.test.tsx +4 -5
  501. package/src/components/Card/index.tsx +8 -38
  502. package/src/components/Chart/Chart.fragment.tsx +5 -3
  503. package/src/components/Chart/Chart.module.scss +1 -1
  504. package/src/components/Chart/index.tsx +12 -10
  505. package/src/components/Checkbox/Checkbox.fragment.tsx +27 -1
  506. package/src/components/Checkbox/Checkbox.module.scss +3 -3
  507. package/src/components/Checkbox/index.tsx +16 -3
  508. package/src/components/Chip/Chip.fragment.tsx +20 -3
  509. package/src/components/Chip/Chip.test.tsx +28 -0
  510. package/src/components/Chip/index.tsx +14 -6
  511. package/src/components/CodeBlock/CodeBlock.fragment.tsx +3 -1
  512. package/src/components/CodeBlock/CodeBlock.module.scss +9 -9
  513. package/src/components/CodeBlock/CodeBlock.test.tsx +21 -0
  514. package/src/components/CodeBlock/index.tsx +23 -9
  515. package/src/components/Collapsible/Collapsible.fragment.tsx +1 -1
  516. package/src/components/Collapsible/Collapsible.module.scss +1 -1
  517. package/src/components/Collapsible/Collapsible.test.tsx +41 -0
  518. package/src/components/Collapsible/index.tsx +53 -16
  519. package/src/components/ColorPicker/ColorPicker.fragment.tsx +1 -1
  520. package/src/components/Combobox/Combobox.fragment.tsx +63 -9
  521. package/src/components/Combobox/Combobox.module.scss +4 -7
  522. package/src/components/Combobox/Combobox.test.tsx +79 -3
  523. package/src/components/Combobox/index.tsx +140 -51
  524. package/src/components/Command/Command.fragment.tsx +3 -3
  525. package/src/components/Command/Command.module.scss +5 -5
  526. package/src/components/Command/Command.test.tsx +110 -0
  527. package/src/components/Command/index.tsx +66 -20
  528. package/src/components/ConversationList/ConversationList.fragment.tsx +4 -3
  529. package/src/components/ConversationList/ConversationList.module.scss +5 -5
  530. package/src/components/ConversationList/ConversationList.test.tsx +21 -0
  531. package/src/components/ConversationList/index.tsx +8 -4
  532. package/src/components/DataTable/DataTable.fragment.tsx +12 -2
  533. package/src/components/DataTable/DataTable.module.scss +3 -3
  534. package/src/components/DataTable/DataTable.test.tsx +34 -4
  535. package/src/components/DataTable/index.tsx +44 -6
  536. package/src/components/DatePicker/DatePicker.fragment.tsx +3 -1
  537. package/src/components/DatePicker/DatePicker.module.scss +1 -1
  538. package/src/components/DatePicker/DatePicker.test.tsx +96 -0
  539. package/src/components/DatePicker/index.tsx +38 -16
  540. package/src/components/Dialog/Dialog.fragment.tsx +28 -1
  541. package/src/components/Dialog/Dialog.module.scss +6 -6
  542. package/src/components/Dialog/Dialog.test.tsx +23 -0
  543. package/src/components/Dialog/index.tsx +38 -21
  544. package/src/components/Drawer/Drawer.fragment.tsx +4 -1
  545. package/src/components/Drawer/Drawer.module.scss +3 -3
  546. package/src/components/Drawer/Drawer.test.tsx +35 -0
  547. package/src/components/Drawer/index.tsx +29 -18
  548. package/src/components/Editor/Editor.fragment.tsx +10 -3
  549. package/src/components/Editor/Editor.module.scss +4 -4
  550. package/src/components/Editor/Editor.test.tsx +68 -1
  551. package/src/components/Editor/index.tsx +60 -9
  552. package/src/components/EmptyState/EmptyState.fragment.tsx +3 -1
  553. package/src/components/EmptyState/EmptyState.module.scss +3 -3
  554. package/src/components/EmptyState/EmptyState.test.tsx +18 -0
  555. package/src/components/EmptyState/index.tsx +16 -16
  556. package/src/components/Field/Field.fragment.tsx +1 -1
  557. package/src/components/Fieldset/Fieldset.fragment.tsx +3 -1
  558. package/src/components/Fieldset/Fieldset.test.tsx +14 -0
  559. package/src/components/Fieldset/index.tsx +3 -4
  560. package/src/components/Form/Form.fragment.tsx +12 -7
  561. package/src/components/Form/index.tsx +13 -17
  562. package/src/components/Grid/Grid.fragment.tsx +4 -3
  563. package/src/components/Grid/Grid.module.scss +3 -3
  564. package/src/components/Grid/index.tsx +11 -6
  565. package/src/components/Header/Header.fragment.tsx +31 -1
  566. package/src/components/Header/Header.module.scss +6 -6
  567. package/src/components/Header/Header.test.tsx +95 -1
  568. package/src/components/Header/index.tsx +95 -46
  569. package/src/components/Icon/Icon.fragment.tsx +21 -8
  570. package/src/components/Icon/Icon.test.tsx +27 -3
  571. package/src/components/Icon/index.tsx +39 -15
  572. package/src/components/Image/Image.fragment.tsx +15 -1
  573. package/src/components/Image/Image.test.tsx +32 -1
  574. package/src/components/Image/index.tsx +24 -4
  575. package/src/components/Input/Input.fragment.tsx +49 -1
  576. package/src/components/Input/Input.module.scss +4 -2
  577. package/src/components/Input/Input.test.tsx +3 -3
  578. package/src/components/Input/index.tsx +103 -37
  579. package/src/components/Link/Link.fragment.tsx +7 -6
  580. package/src/components/Link/Link.test.tsx +17 -1
  581. package/src/components/Link/index.tsx +22 -0
  582. package/src/components/List/List.fragment.tsx +1 -1
  583. package/src/components/Listbox/Listbox.fragment.tsx +3 -3
  584. package/src/components/Listbox/Listbox.module.scss +4 -4
  585. package/src/components/Listbox/Listbox.test.tsx +14 -0
  586. package/src/components/Listbox/index.tsx +12 -2
  587. package/src/components/Loading/Loading.fragment.tsx +1 -1
  588. package/src/components/Markdown/Markdown.fragment.tsx +5 -3
  589. package/src/components/Markdown/Markdown.module.scss +5 -5
  590. package/src/components/Markdown/Markdown.test.tsx +6 -0
  591. package/src/components/Markdown/index.tsx +12 -9
  592. package/src/components/Menu/Menu.fragment.tsx +19 -1
  593. package/src/components/Menu/Menu.module.scss +11 -11
  594. package/src/components/Menu/index.tsx +50 -33
  595. package/src/components/Message/Message.fragment.tsx +1 -1
  596. package/src/components/Message/Message.module.scss +3 -3
  597. package/src/components/NavigationMenu/NavigationMenu.fragment.tsx +10 -2
  598. package/src/components/NavigationMenu/NavigationMenu.module.scss +7 -7
  599. package/src/components/NavigationMenu/NavigationMenu.test.tsx +88 -4
  600. package/src/components/NavigationMenu/NavigationMenuContext.ts +17 -0
  601. package/src/components/NavigationMenu/index.tsx +119 -20
  602. package/src/components/NavigationMenu/useNavigationMenu.ts +4 -0
  603. package/src/components/Pagination/Pagination.fragment.tsx +4 -1
  604. package/src/components/Pagination/Pagination.test.tsx +39 -0
  605. package/src/components/Pagination/index.tsx +36 -10
  606. package/src/components/Popover/Popover.fragment.tsx +18 -1
  607. package/src/components/Popover/Popover.module.scss +13 -13
  608. package/src/components/Popover/Popover.test.tsx +23 -0
  609. package/src/components/Popover/index.tsx +44 -22
  610. package/src/components/Progress/Progress.fragment.tsx +3 -1
  611. package/src/components/Progress/Progress.test.tsx +8 -0
  612. package/src/components/Progress/index.tsx +9 -1
  613. package/src/components/Prompt/Prompt.fragment.tsx +4 -1
  614. package/src/components/Prompt/Prompt.module.scss +3 -3
  615. package/src/components/Prompt/Prompt.test.tsx +19 -0
  616. package/src/components/Prompt/index.tsx +24 -6
  617. package/src/components/RadioGroup/RadioGroup.fragment.tsx +31 -1
  618. package/src/components/RadioGroup/index.tsx +22 -3
  619. package/src/components/ScrollArea/ScrollArea.fragment.tsx +1 -1
  620. package/src/components/Select/Select.fragment.tsx +30 -3
  621. package/src/components/Select/Select.module.scss +3 -3
  622. package/src/components/Select/Select.test.tsx +41 -0
  623. package/src/components/Select/index.tsx +55 -44
  624. package/src/components/Separator/Separator.fragment.tsx +1 -1
  625. package/src/components/Sidebar/Sidebar.fragment.tsx +3 -1
  626. package/src/components/Sidebar/Sidebar.module.scss +20 -20
  627. package/src/components/Sidebar/Sidebar.test.tsx +108 -4
  628. package/src/components/Sidebar/index.tsx +93 -51
  629. package/src/components/Skeleton/Skeleton.fragment.tsx +3 -1
  630. package/src/components/Skeleton/Skeleton.test.tsx +12 -0
  631. package/src/components/Skeleton/index.tsx +6 -7
  632. package/src/components/Slider/Slider.fragment.tsx +21 -1
  633. package/src/components/Slider/Slider.module.scss +31 -0
  634. package/src/components/Slider/Slider.test.tsx +16 -0
  635. package/src/components/Slider/index.tsx +40 -1
  636. package/src/components/Stack/Stack.fragment.tsx +3 -1
  637. package/src/components/Stack/index.tsx +13 -6
  638. package/src/components/Table/Table.fragment.tsx +43 -2
  639. package/src/components/Table/Table.module.scss +2 -2
  640. package/src/components/Table/index.tsx +23 -5
  641. package/src/components/TableOfContents/TableOfContents.fragment.tsx +4 -2
  642. package/src/components/TableOfContents/TableOfContents.test.tsx +34 -9
  643. package/src/components/TableOfContents/index.tsx +9 -5
  644. package/src/components/Tabs/Tabs.fragment.tsx +33 -8
  645. package/src/components/Tabs/Tabs.module.scss +8 -8
  646. package/src/components/Tabs/index.tsx +22 -14
  647. package/src/components/Text/Text.fragment.tsx +1 -1
  648. package/src/components/Textarea/Textarea.fragment.tsx +27 -1
  649. package/src/components/Textarea/index.tsx +39 -14
  650. package/src/components/Theme/Theme.fragment.tsx +3 -1
  651. package/src/components/Theme/Theme.test.tsx +11 -0
  652. package/src/components/Theme/index.tsx +3 -3
  653. package/src/components/ThinkingIndicator/ThinkingIndicator.fragment.tsx +1 -1
  654. package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +1 -1
  655. package/src/components/Toast/Toast.fragment.tsx +6 -3
  656. package/src/components/Toast/Toast.module.scss +8 -6
  657. package/src/components/Toast/index.tsx +24 -20
  658. package/src/components/Toggle/Toggle.fragment.tsx +1 -1
  659. package/src/components/Toggle/Toggle.module.scss +61 -21
  660. package/src/components/Toggle/index.tsx +3 -3
  661. package/src/components/ToggleGroup/ToggleGroup.fragment.tsx +33 -8
  662. package/src/components/ToggleGroup/ToggleGroup.module.scss +3 -3
  663. package/src/components/ToggleGroup/index.tsx +29 -9
  664. package/src/components/Tooltip/Tooltip.fragment.tsx +16 -1
  665. package/src/components/Tooltip/Tooltip.module.scss +1 -1
  666. package/src/components/Tooltip/Tooltip.test.tsx +17 -0
  667. package/src/components/Tooltip/index.tsx +60 -31
  668. package/src/components/VisuallyHidden/VisuallyHidden.fragment.tsx +3 -1
  669. package/src/components/VisuallyHidden/VisuallyHidden.test.tsx +12 -0
  670. package/src/components/VisuallyHidden/index.tsx +7 -3
  671. package/src/index.ts +3 -2
  672. package/src/tokens/_computed.scss +1 -19
  673. package/src/tokens/_density.scss +0 -42
  674. package/src/tokens/_mixins.scss +4 -0
  675. package/src/tokens/_variables.scss +12 -114
@@ -1 +1 @@
1
- {"version":3,"file":"chart.cjs","sources":["../src/components/Chart/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport styles from './Chart.module.scss';\nimport '../../styles/globals.scss';\n\n// ============================================\n// Types (self-owned — no external dependency for types)\n// ============================================\n\nexport type ChartConfig = Record<\n string,\n {\n label: string;\n color: string;\n icon?: React.ComponentType;\n }\n>;\n\nexport interface ChartContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n config: ChartConfig;\n children: React.ReactElement;\n /** Non-visual summary announced to assistive technology users */\n summary?: string;\n /** Optional accessible data table or textual fallback */\n dataTable?: React.ReactNode;\n}\n\nexport interface ChartTooltipContentProps {\n active?: boolean;\n payload?: readonly {\n name?: string;\n value?: number | string;\n dataKey?: string | number;\n color?: string;\n payload?: Record<string, unknown>;\n }[];\n label?: string;\n indicator?: 'dot' | 'line' | 'dashed';\n hideLabel?: boolean;\n hideIndicator?: boolean;\n labelFormatter?: (label: string, payload: ChartTooltipContentProps['payload']) => React.ReactNode;\n valueFormatter?: (value: number | string) => string;\n}\n\nexport interface ChartLegendContentProps {\n payload?: readonly {\n value?: string;\n dataKey?: string | number;\n color?: string;\n }[];\n}\n\n// Internal-only type for recharts Legend props\ntype RechartsLegendProps = Record<string, unknown>;\n\n// ============================================\n// Lazy-loaded dependencies (recharts)\n// ============================================\n\nlet _RechartsTooltip: any = null;\nlet _RechartsLegend: any = null;\nlet _chartLoaded = false;\nlet _chartFailed = false;\n\nfunction loadChartDeps() {\n if (_chartLoaded) return;\n _chartLoaded = true;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const rc = require('recharts');\n _RechartsTooltip = rc.Tooltip;\n _RechartsLegend = rc.Legend;\n } catch {\n _chartFailed = true;\n }\n}\n\nfunction mergeAriaIds(...ids: Array<string | undefined>): string | undefined {\n const merged = ids.filter(Boolean).join(' ').trim();\n return merged.length > 0 ? merged : undefined;\n}\n\n// ============================================\n// Context\n// ============================================\n\nconst ChartConfigContext = React.createContext<ChartConfig | null>(null);\n\nexport function useChartConfig() {\n const ctx = React.useContext(ChartConfigContext);\n if (!ctx) {\n throw new Error('useChartConfig must be used within a <ChartContainer>');\n }\n return ctx;\n}\n\n// ============================================\n// ChartContainer\n// ============================================\n\nexport function ChartContainer({\n config,\n children,\n className,\n style,\n summary,\n dataTable,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n ...htmlProps\n}: ChartContainerProps) {\n const chartId = React.useId();\n const summaryId = summary ? `chart-summary-${chartId}` : undefined;\n const dataTableId = dataTable ? `chart-data-${chartId}` : undefined;\n\n // Build CSS custom properties from config (--chart-<key>)\n const cssVars = React.useMemo(() => {\n const vars: Record<string, string> = {};\n Object.entries(config).forEach(([key, val]) => {\n vars[`--chart-${key}`] = val.color;\n });\n return vars;\n }, [config]);\n\n const rootClasses = [styles.container, className].filter(Boolean).join(' ');\n\n // Inject sizing props into the chart child (recharts API).\n // Only pass `responsive` for custom component types to avoid leaking the\n // prop to intrinsic DOM nodes in test/demo usage.\n const chartChildProps: Record<string, unknown> = {\n width: '100%',\n height: '100%',\n };\n\n if (typeof children.type !== 'string') {\n chartChildProps.responsive = true;\n }\n\n const chartChild = React.cloneElement(\n children as React.ReactElement<Record<string, unknown>>,\n chartChildProps\n );\n\n return (\n <ChartConfigContext.Provider value={config}>\n <div\n {...htmlProps}\n className={rootClasses}\n style={{ ...cssVars, ...style }}\n role=\"img\"\n aria-label={ariaLabel || 'Chart'}\n aria-describedby={mergeAriaIds(\n ariaDescribedBy,\n summaryId,\n dataTableId\n )}\n >\n {chartChild}\n {summaryId && (\n <span id={summaryId} className={styles.srOnly}>\n {summary}\n </span>\n )}\n {dataTableId && (\n <div id={dataTableId} className={styles.srOnly}>\n {dataTable}\n </div>\n )}\n </div>\n </ChartConfigContext.Provider>\n );\n}\n\n// ============================================\n// ChartTooltipContent\n// ============================================\n\nexport function ChartTooltipContent({\n active,\n payload,\n label,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n labelFormatter,\n valueFormatter,\n}: ChartTooltipContentProps) {\n const config = React.useContext(ChartConfigContext);\n\n if (!active || !payload?.length) return null;\n\n const formattedLabel = labelFormatter\n ? labelFormatter(String(label), payload)\n : label;\n\n return (\n <div className={styles.tooltip}>\n {!hideLabel && formattedLabel && (\n <div className={styles.tooltipLabel}>{formattedLabel}</div>\n )}\n <div className={styles.tooltipItems}>\n {payload.map((entry, i) => {\n const key = String(entry.dataKey ?? entry.name ?? i);\n const configEntry = config?.[key];\n const displayLabel = configEntry?.label ?? entry.name ?? key;\n const color = entry.color ?? configEntry?.color;\n const displayValue = valueFormatter\n ? valueFormatter(entry.value ?? 0)\n : String(entry.value ?? '');\n\n const indicatorClass = [\n styles.tooltipIndicator,\n indicator === 'line' && styles.tooltipIndicatorLine,\n indicator === 'dashed' && styles.tooltipIndicatorDashed,\n ].filter(Boolean).join(' ');\n\n return (\n <div key={key} className={styles.tooltipItem}>\n {!hideIndicator && (\n <span\n className={indicatorClass}\n style={{ backgroundColor: indicator === 'dashed' ? undefined : color, borderColor: color }}\n />\n )}\n <span className={styles.tooltipItemLabel}>{displayLabel}</span>\n <span className={styles.tooltipItemValue}>{displayValue}</span>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\n// ============================================\n// ChartTooltip (thin wrapper)\n// ============================================\n\ntype ChartTooltipProps = {\n indicator?: 'dot' | 'line' | 'dashed';\n hideLabel?: boolean;\n hideIndicator?: boolean;\n labelFormatter?: ChartTooltipContentProps['labelFormatter'];\n valueFormatter?: ChartTooltipContentProps['valueFormatter'];\n content?: any;\n [key: string]: unknown;\n};\n\nexport function ChartTooltip({\n indicator,\n hideLabel,\n hideIndicator,\n labelFormatter,\n valueFormatter,\n content,\n ...props\n}: ChartTooltipProps) {\n loadChartDeps();\n\n const defaultContent = React.useCallback(\n\n (tooltipProps: any) => (\n <ChartTooltipContent\n {...tooltipProps}\n indicator={indicator}\n hideLabel={hideLabel}\n hideIndicator={hideIndicator}\n labelFormatter={labelFormatter}\n valueFormatter={valueFormatter}\n />\n ),\n [indicator, hideLabel, hideIndicator, labelFormatter, valueFormatter],\n );\n\n if (_chartFailed || !_RechartsTooltip) {\n if (_chartFailed && process.env.NODE_ENV === 'development') {\n console.warn(\n '[@fragments-sdk/ui] Chart: recharts is not installed. ' +\n 'Install it with: npm install recharts'\n );\n }\n return null;\n }\n\n const RechartsTooltipComponent = _RechartsTooltip;\n\n return (\n <RechartsTooltipComponent\n cursor={{ stroke: 'var(--fui-border)' }}\n content={content ?? defaultContent}\n {...props}\n />\n );\n}\n\n// ============================================\n// ChartLegendContent\n// ============================================\n\nexport function ChartLegendContent({ payload }: ChartLegendContentProps) {\n const config = React.useContext(ChartConfigContext);\n\n if (!payload?.length) return null;\n\n return (\n <div className={styles.legend}>\n {payload.map((entry) => {\n const key = String(entry.dataKey ?? entry.value ?? '');\n const configEntry = config?.[key];\n const label = configEntry?.label ?? entry.value ?? key;\n const color = entry.color ?? configEntry?.color;\n\n return (\n <div key={key} className={styles.legendItem}>\n <span\n className={styles.legendDot}\n style={{ backgroundColor: color }}\n />\n <span className={styles.legendLabel}>{label}</span>\n </div>\n );\n })}\n </div>\n );\n}\n\n// ============================================\n// ChartLegend (thin wrapper)\n// ============================================\n\ntype ChartLegendProps = RechartsLegendProps & {\n content?: any;\n};\n\nexport function ChartLegend({ content, ...props }: ChartLegendProps) {\n loadChartDeps();\n\n const defaultContent = (legendProps: any) => <ChartLegendContent {...legendProps} />;\n\n if (_chartFailed || !_RechartsLegend) {\n if (_chartFailed && process.env.NODE_ENV === 'development') {\n console.warn(\n '[@fragments-sdk/ui] Chart: recharts is not installed. ' +\n 'Install it with: npm install recharts'\n );\n }\n return null;\n }\n\n const RechartsLegendComponent = _RechartsLegend;\n\n return (\n <RechartsLegendComponent\n content={content ?? defaultContent}\n {...props}\n />\n );\n}\n\nexport const Chart = Object.assign(ChartContainer, {\n Root: ChartContainer,\n Tooltip: ChartTooltip,\n TooltipContent: ChartTooltipContent,\n Legend: ChartLegend,\n LegendContent: ChartLegendContent,\n});\n"],"names":["React","styles","jsx","jsxs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA4DA,IAAI,mBAAwB;AAC5B,IAAI,kBAAuB;AAC3B,IAAI,eAAe;AACnB,IAAI,eAAe;AAEnB,SAAS,gBAAgB;AACvB,MAAI,aAAc;AAClB,iBAAe;AACf,MAAI;AAEF,UAAM,KAAK,QAAQ,UAAU;AAC7B,uBAAmB,GAAG;AACtB,sBAAkB,GAAG;AAAA,EACvB,QAAQ;AACN,mBAAe;AAAA,EACjB;AACF;AAEA,SAAS,gBAAgB,KAAoD;AAC3E,QAAM,SAAS,IAAI,OAAO,OAAO,EAAE,KAAK,GAAG,EAAE,KAAA;AAC7C,SAAO,OAAO,SAAS,IAAI,SAAS;AACtC;AAMA,MAAM,qBAAqBA,iBAAM,cAAkC,IAAI;AAEhE,SAAS,iBAAiB;AAC/B,QAAM,MAAMA,iBAAM,WAAW,kBAAkB;AAC/C,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,uDAAuD;AAAA,EACzE;AACA,SAAO;AACT;AAMO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,GAAG;AACL,GAAwB;AACtB,QAAM,UAAUA,iBAAM,MAAA;AACtB,QAAM,YAAY,UAAU,iBAAiB,OAAO,KAAK;AACzD,QAAM,cAAc,YAAY,cAAc,OAAO,KAAK;AAG1D,QAAM,UAAUA,iBAAM,QAAQ,MAAM;AAClC,UAAM,OAA+B,CAAA;AACrC,WAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,GAAG,MAAM;AAC7C,WAAK,WAAW,GAAG,EAAE,IAAI,IAAI;AAAA,IAC/B,CAAC;AACD,WAAO;AAAA,EACT,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,cAAc,CAACC,aAAAA,QAAO,WAAW,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAK1E,QAAM,kBAA2C;AAAA,IAC/C,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAGV,MAAI,OAAO,SAAS,SAAS,UAAU;AACrC,oBAAgB,aAAa;AAAA,EAC/B;AAEA,QAAM,aAAaD,iBAAM;AAAA,IACvB;AAAA,IACA;AAAA,EAAA;AAGF,SACEE,2BAAAA,IAAC,mBAAmB,UAAnB,EAA4B,OAAO,QAClC,UAAAC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,WAAW;AAAA,MACX,OAAO,EAAE,GAAG,SAAS,GAAG,MAAA;AAAA,MACxB,MAAK;AAAA,MACL,cAAY,aAAa;AAAA,MACzB,oBAAkB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA;AAAA,QACA,4CACE,QAAA,EAAK,IAAI,WAAW,WAAWF,qBAAO,QACpC,UAAA,QAAA,CACH;AAAA,QAED,8CACE,OAAA,EAAI,IAAI,aAAa,WAAWA,qBAAO,QACrC,UAAA,UAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAGN;AAEJ;AAMO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB;AAAA,EACA;AACF,GAA6B;AAC3B,QAAM,SAASD,iBAAM,WAAW,kBAAkB;AAElD,MAAI,CAAC,UAAU,EAAC,mCAAS,QAAQ,QAAO;AAExC,QAAM,iBAAiB,iBACnB,eAAe,OAAO,KAAK,GAAG,OAAO,IACrC;AAEJ,SACEG,2BAAAA,KAAC,OAAA,EAAI,WAAWF,aAAAA,QAAO,SACpB,UAAA;AAAA,IAAA,CAAC,aAAa,kBACbC,2BAAAA,IAAC,SAAI,WAAWD,aAAAA,QAAO,cAAe,UAAA,gBAAe;AAAA,IAEvDC,2BAAAA,IAAC,SAAI,WAAWD,qBAAO,cACpB,UAAA,QAAQ,IAAI,CAAC,OAAO,MAAM;AACzB,YAAM,MAAM,OAAO,MAAM,WAAW,MAAM,QAAQ,CAAC;AACnD,YAAM,cAAc,iCAAS;AAC7B,YAAM,gBAAe,2CAAa,UAAS,MAAM,QAAQ;AACzD,YAAM,QAAQ,MAAM,UAAS,2CAAa;AAC1C,YAAM,eAAe,iBACjB,eAAe,MAAM,SAAS,CAAC,IAC/B,OAAO,MAAM,SAAS,EAAE;AAE5B,YAAM,iBAAiB;AAAA,QACrBA,aAAAA,QAAO;AAAA,QACP,cAAc,UAAUA,aAAAA,QAAO;AAAA,QAC/B,cAAc,YAAYA,qBAAO;AAAA,MAAA,EACjC,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,aACEE,2BAAAA,KAAC,OAAA,EAAc,WAAWF,aAAAA,QAAO,aAC9B,UAAA;AAAA,QAAA,CAAC,iBACAC,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW;AAAA,YACX,OAAO,EAAE,iBAAiB,cAAc,WAAW,SAAY,OAAO,aAAa,MAAA;AAAA,UAAM;AAAA,QAAA;AAAA,QAG7FA,2BAAAA,IAAC,QAAA,EAAK,WAAWD,aAAAA,QAAO,kBAAmB,UAAA,cAAa;AAAA,QACxDC,2BAAAA,IAAC,QAAA,EAAK,WAAWD,aAAAA,QAAO,kBAAmB,UAAA,aAAA,CAAa;AAAA,MAAA,EAAA,GARhD,GASV;AAAA,IAEJ,CAAC,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;AAgBO,SAAS,aAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAsB;AACpB,gBAAA;AAEA,QAAM,iBAAiBD,iBAAM;AAAA,IAE3B,CAAC,iBACCE,2BAAAA;AAAAA,MAAC;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJ,CAAC,WAAW,WAAW,eAAe,gBAAgB,cAAc;AAAA,EAAA;AAGtE,MAAI,gBAAgB,CAAC,kBAAkB;AACrC,QAAI,gBAAgB,QAAQ,IAAI,aAAa,eAAe;AAC1D,cAAQ;AAAA,QACN;AAAA,MAAA;AAAA,IAGJ;AACA,WAAO;AAAA,EACT;AAEA,QAAM,2BAA2B;AAEjC,SACEA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,QAAQ,EAAE,QAAQ,oBAAA;AAAA,MAClB,SAAS,WAAW;AAAA,MACnB,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAMO,SAAS,mBAAmB,EAAE,WAAoC;AACvE,QAAM,SAASF,iBAAM,WAAW,kBAAkB;AAElD,MAAI,EAAC,mCAAS,QAAQ,QAAO;AAE7B,SACEE,+BAAC,SAAI,WAAWD,aAAAA,QAAO,QACpB,UAAA,QAAQ,IAAI,CAAC,UAAU;AACtB,UAAM,MAAM,OAAO,MAAM,WAAW,MAAM,SAAS,EAAE;AACrD,UAAM,cAAc,iCAAS;AAC7B,UAAM,SAAQ,2CAAa,UAAS,MAAM,SAAS;AACnD,UAAM,QAAQ,MAAM,UAAS,2CAAa;AAE1C,WACEE,2BAAAA,KAAC,OAAA,EAAc,WAAWF,aAAAA,QAAO,YAC/B,UAAA;AAAA,MAAAC,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWD,aAAAA,QAAO;AAAA,UAClB,OAAO,EAAE,iBAAiB,MAAA;AAAA,QAAM;AAAA,MAAA;AAAA,MAElCC,2BAAAA,IAAC,QAAA,EAAK,WAAWD,aAAAA,QAAO,aAAc,UAAA,MAAA,CAAM;AAAA,IAAA,EAAA,GALpC,GAMV;AAAA,EAEJ,CAAC,EAAA,CACH;AAEJ;AAUO,SAAS,YAAY,EAAE,SAAS,GAAG,SAA2B;AACnE,gBAAA;AAEA,QAAM,iBAAiB,CAAC,gBAAqBC,2BAAAA,IAAC,oBAAA,EAAoB,GAAG,aAAa;AAElF,MAAI,gBAAgB,CAAC,iBAAiB;AACpC,QAAI,gBAAgB,QAAQ,IAAI,aAAa,eAAe;AAC1D,cAAQ;AAAA,QACN;AAAA,MAAA;AAAA,IAGJ;AACA,WAAO;AAAA,EACT;AAEA,QAAM,0BAA0B;AAEhC,SACEA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAS,WAAW;AAAA,MACnB,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEO,MAAM,QAAQ,OAAO,OAAO,gBAAgB;AAAA,EACjD,MAAM;AAAA,EACN,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,QAAQ;AAAA,EACR,eAAe;AACjB,CAAC;;;;;;;;"}
1
+ {"version":3,"file":"chart.cjs","sources":["../src/components/Chart/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport styles from './Chart.module.scss';\nimport '../../styles/globals.scss';\n\n// ============================================\n// Types (self-owned — no external dependency for types)\n// ============================================\n\nexport type ChartConfig = Record<\n string,\n {\n label: string;\n color: string;\n icon?: React.ComponentType<Record<string, unknown>>;\n }\n>;\n\nexport interface ChartContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n config: ChartConfig;\n children: React.ReactElement;\n /** Non-visual summary announced to assistive technology users */\n summary?: string;\n /** Optional accessible data table or textual fallback */\n dataTable?: React.ReactNode;\n}\n\nexport interface ChartTooltipContentProps {\n active?: boolean;\n payload?: readonly {\n name?: string;\n value?: number | string;\n dataKey?: string | number;\n color?: string;\n payload?: Record<string, unknown>;\n }[];\n label?: string;\n indicator?: 'dot' | 'line' | 'dashed';\n hideLabel?: boolean;\n hideIndicator?: boolean;\n labelFormatter?: (label: string, payload: ChartTooltipContentProps['payload']) => React.ReactNode;\n valueFormatter?: (value: number | string) => string;\n}\n\nexport interface ChartLegendContentProps {\n payload?: readonly {\n value?: string;\n dataKey?: string | number;\n color?: string;\n }[];\n}\n\n// Internal-only type for recharts Legend props\ntype RechartsLegendProps = Record<string, unknown>;\n\n// ============================================\n// Lazy-loaded dependencies (recharts)\n// ============================================\n\nlet _RechartsTooltip: React.ComponentType<Record<string, unknown>> | null = null;\nlet _RechartsLegend: React.ComponentType<Record<string, unknown>> | null = null;\nlet _chartLoaded = false;\nlet _chartFailed = false;\n\nfunction loadChartDeps() {\n if (_chartLoaded) return;\n _chartLoaded = true;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const rc = require('recharts');\n _RechartsTooltip = rc.Tooltip as React.ComponentType<Record<string, unknown>>;\n _RechartsLegend = rc.Legend as React.ComponentType<Record<string, unknown>>;\n } catch {\n _chartFailed = true;\n }\n}\n\nfunction mergeAriaIds(...ids: Array<string | undefined>): string | undefined {\n const merged = ids.filter(Boolean).join(' ').trim();\n return merged.length > 0 ? merged : undefined;\n}\n\n// ============================================\n// Context\n// ============================================\n\nconst ChartConfigContext = React.createContext<ChartConfig | null>(null);\n\nexport function useChartConfig() {\n const ctx = React.useContext(ChartConfigContext);\n if (!ctx) {\n throw new Error('useChartConfig must be used within a <ChartContainer>');\n }\n return ctx;\n}\n\n// ============================================\n// ChartContainer\n// ============================================\n\nexport function ChartContainer({\n config,\n children,\n className,\n style,\n summary,\n dataTable,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n ...htmlProps\n}: ChartContainerProps) {\n const chartId = React.useId();\n const summaryId = summary ? `chart-summary-${chartId}` : undefined;\n const dataTableId = dataTable ? `chart-data-${chartId}` : undefined;\n\n // Build CSS custom properties from config (--chart-<key>)\n const cssVars = React.useMemo(() => {\n const vars: Record<string, string> = {};\n Object.entries(config).forEach(([key, val]) => {\n vars[`--chart-${key}`] = val.color;\n });\n return vars;\n }, [config]);\n\n const rootClasses = [styles.container, className].filter(Boolean).join(' ');\n\n // Inject sizing props into the chart child (recharts API).\n // Only pass `responsive` for custom component types to avoid leaking the\n // prop to intrinsic DOM nodes in test/demo usage.\n const chartChildProps: Record<string, unknown> = {\n width: '100%',\n height: '100%',\n };\n\n if (typeof children.type !== 'string') {\n chartChildProps.responsive = true;\n }\n\n const chartChild = React.cloneElement(\n children as React.ReactElement<Record<string, unknown>>,\n chartChildProps\n );\n\n return (\n <ChartConfigContext.Provider value={config}>\n <div\n {...htmlProps}\n className={rootClasses}\n style={{ ...cssVars, ...style }}\n role=\"img\"\n aria-label={ariaLabel || 'Chart'}\n aria-describedby={mergeAriaIds(\n ariaDescribedBy,\n summaryId,\n dataTableId\n )}\n >\n {chartChild}\n {summaryId && (\n <span id={summaryId} className={styles.srOnly}>\n {summary}\n </span>\n )}\n {dataTableId && (\n <div id={dataTableId} className={styles.srOnly}>\n {dataTable}\n </div>\n )}\n </div>\n </ChartConfigContext.Provider>\n );\n}\n\n// ============================================\n// ChartTooltipContent\n// ============================================\n\nexport function ChartTooltipContent({\n active,\n payload,\n label,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n labelFormatter,\n valueFormatter,\n}: ChartTooltipContentProps) {\n const config = React.useContext(ChartConfigContext);\n\n if (!active || !payload?.length) return null;\n\n const formattedLabel = labelFormatter\n ? labelFormatter(String(label), payload)\n : label;\n\n return (\n <div className={styles.tooltip}>\n {!hideLabel && formattedLabel && (\n <div className={styles.tooltipLabel}>{formattedLabel}</div>\n )}\n <div className={styles.tooltipItems}>\n {payload.map((entry, i) => {\n const key = String(entry.dataKey ?? entry.name ?? i);\n const configEntry = config?.[key];\n const displayLabel = configEntry?.label ?? entry.name ?? key;\n const color = entry.color ?? configEntry?.color;\n const displayValue = valueFormatter\n ? valueFormatter(entry.value ?? 0)\n : String(entry.value ?? '');\n\n const indicatorClass = [\n styles.tooltipIndicator,\n indicator === 'line' && styles.tooltipIndicatorLine,\n indicator === 'dashed' && styles.tooltipIndicatorDashed,\n ].filter(Boolean).join(' ');\n\n return (\n <div key={key} className={styles.tooltipItem}>\n {!hideIndicator && (\n <span\n className={indicatorClass}\n style={{ backgroundColor: indicator === 'dashed' ? undefined : color, borderColor: color }}\n />\n )}\n <span className={styles.tooltipItemLabel}>{displayLabel}</span>\n <span className={styles.tooltipItemValue}>{displayValue}</span>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\n// ============================================\n// ChartTooltip (thin wrapper)\n// ============================================\n\ntype ChartTooltipProps = {\n indicator?: 'dot' | 'line' | 'dashed';\n hideLabel?: boolean;\n hideIndicator?: boolean;\n labelFormatter?: ChartTooltipContentProps['labelFormatter'];\n valueFormatter?: ChartTooltipContentProps['valueFormatter'];\n content?: React.ReactNode | ((tooltipProps: Record<string, unknown>) => React.ReactNode);\n [key: string]: unknown;\n};\n\nexport function ChartTooltip({\n indicator,\n hideLabel,\n hideIndicator,\n labelFormatter,\n valueFormatter,\n content,\n ...props\n}: ChartTooltipProps) {\n loadChartDeps();\n\n const defaultContent = React.useCallback(\n\n (tooltipProps: Record<string, unknown>) => (\n <ChartTooltipContent\n {...(tooltipProps as ChartTooltipContentProps)}\n indicator={indicator}\n hideLabel={hideLabel}\n hideIndicator={hideIndicator}\n labelFormatter={labelFormatter}\n valueFormatter={valueFormatter}\n />\n ),\n [indicator, hideLabel, hideIndicator, labelFormatter, valueFormatter],\n );\n\n if (_chartFailed || !_RechartsTooltip) {\n if (_chartFailed && process.env.NODE_ENV === 'development') {\n console.warn(\n '[@fragments-sdk/ui] Chart: recharts is not installed. ' +\n 'Install it with: npm install recharts'\n );\n }\n return null;\n }\n\n const RechartsTooltipComponent = _RechartsTooltip;\n\n return (\n <RechartsTooltipComponent\n cursor={{ stroke: 'var(--fui-border)' }}\n content={content ?? defaultContent}\n {...props}\n />\n );\n}\n\n// ============================================\n// ChartLegendContent\n// ============================================\n\nexport function ChartLegendContent({ payload }: ChartLegendContentProps) {\n const config = React.useContext(ChartConfigContext);\n\n if (!payload?.length) return null;\n\n return (\n <div className={styles.legend}>\n {payload.map((entry) => {\n const key = String(entry.dataKey ?? entry.value ?? '');\n const configEntry = config?.[key];\n const label = configEntry?.label ?? entry.value ?? key;\n const color = entry.color ?? configEntry?.color;\n\n return (\n <div key={key} className={styles.legendItem}>\n <span\n className={styles.legendDot}\n style={{ backgroundColor: color }}\n />\n <span className={styles.legendLabel}>{label}</span>\n </div>\n );\n })}\n </div>\n );\n}\n\n// ============================================\n// ChartLegend (thin wrapper)\n// ============================================\n\ntype ChartLegendProps = RechartsLegendProps & {\n content?: React.ReactNode | ((legendProps: Record<string, unknown>) => React.ReactNode);\n};\n\nexport function ChartLegend({ content, ...props }: ChartLegendProps) {\n loadChartDeps();\n\n const defaultContent = (legendProps: Record<string, unknown>) => (\n <ChartLegendContent {...(legendProps as ChartLegendContentProps)} />\n );\n\n if (_chartFailed || !_RechartsLegend) {\n if (_chartFailed && process.env.NODE_ENV === 'development') {\n console.warn(\n '[@fragments-sdk/ui] Chart: recharts is not installed. ' +\n 'Install it with: npm install recharts'\n );\n }\n return null;\n }\n\n const RechartsLegendComponent = _RechartsLegend;\n\n return (\n <RechartsLegendComponent\n content={content ?? defaultContent}\n {...props}\n />\n );\n}\n\nexport const Chart = Object.assign(ChartContainer, {\n Root: ChartContainer,\n Tooltip: ChartTooltip,\n TooltipContent: ChartTooltipContent,\n Legend: ChartLegend,\n LegendContent: ChartLegendContent,\n});\n"],"names":["React","styles","jsx","jsxs"],"mappings":"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"}
package/dist/chart.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"chart.js","sources":["../src/components/Chart/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport styles from './Chart.module.scss';\nimport '../../styles/globals.scss';\n\n// ============================================\n// Types (self-owned — no external dependency for types)\n// ============================================\n\nexport type ChartConfig = Record<\n string,\n {\n label: string;\n color: string;\n icon?: React.ComponentType;\n }\n>;\n\nexport interface ChartContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n config: ChartConfig;\n children: React.ReactElement;\n /** Non-visual summary announced to assistive technology users */\n summary?: string;\n /** Optional accessible data table or textual fallback */\n dataTable?: React.ReactNode;\n}\n\nexport interface ChartTooltipContentProps {\n active?: boolean;\n payload?: readonly {\n name?: string;\n value?: number | string;\n dataKey?: string | number;\n color?: string;\n payload?: Record<string, unknown>;\n }[];\n label?: string;\n indicator?: 'dot' | 'line' | 'dashed';\n hideLabel?: boolean;\n hideIndicator?: boolean;\n labelFormatter?: (label: string, payload: ChartTooltipContentProps['payload']) => React.ReactNode;\n valueFormatter?: (value: number | string) => string;\n}\n\nexport interface ChartLegendContentProps {\n payload?: readonly {\n value?: string;\n dataKey?: string | number;\n color?: string;\n }[];\n}\n\n// Internal-only type for recharts Legend props\ntype RechartsLegendProps = Record<string, unknown>;\n\n// ============================================\n// Lazy-loaded dependencies (recharts)\n// ============================================\n\nlet _RechartsTooltip: any = null;\nlet _RechartsLegend: any = null;\nlet _chartLoaded = false;\nlet _chartFailed = false;\n\nfunction loadChartDeps() {\n if (_chartLoaded) return;\n _chartLoaded = true;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const rc = require('recharts');\n _RechartsTooltip = rc.Tooltip;\n _RechartsLegend = rc.Legend;\n } catch {\n _chartFailed = true;\n }\n}\n\nfunction mergeAriaIds(...ids: Array<string | undefined>): string | undefined {\n const merged = ids.filter(Boolean).join(' ').trim();\n return merged.length > 0 ? merged : undefined;\n}\n\n// ============================================\n// Context\n// ============================================\n\nconst ChartConfigContext = React.createContext<ChartConfig | null>(null);\n\nexport function useChartConfig() {\n const ctx = React.useContext(ChartConfigContext);\n if (!ctx) {\n throw new Error('useChartConfig must be used within a <ChartContainer>');\n }\n return ctx;\n}\n\n// ============================================\n// ChartContainer\n// ============================================\n\nexport function ChartContainer({\n config,\n children,\n className,\n style,\n summary,\n dataTable,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n ...htmlProps\n}: ChartContainerProps) {\n const chartId = React.useId();\n const summaryId = summary ? `chart-summary-${chartId}` : undefined;\n const dataTableId = dataTable ? `chart-data-${chartId}` : undefined;\n\n // Build CSS custom properties from config (--chart-<key>)\n const cssVars = React.useMemo(() => {\n const vars: Record<string, string> = {};\n Object.entries(config).forEach(([key, val]) => {\n vars[`--chart-${key}`] = val.color;\n });\n return vars;\n }, [config]);\n\n const rootClasses = [styles.container, className].filter(Boolean).join(' ');\n\n // Inject sizing props into the chart child (recharts API).\n // Only pass `responsive` for custom component types to avoid leaking the\n // prop to intrinsic DOM nodes in test/demo usage.\n const chartChildProps: Record<string, unknown> = {\n width: '100%',\n height: '100%',\n };\n\n if (typeof children.type !== 'string') {\n chartChildProps.responsive = true;\n }\n\n const chartChild = React.cloneElement(\n children as React.ReactElement<Record<string, unknown>>,\n chartChildProps\n );\n\n return (\n <ChartConfigContext.Provider value={config}>\n <div\n {...htmlProps}\n className={rootClasses}\n style={{ ...cssVars, ...style }}\n role=\"img\"\n aria-label={ariaLabel || 'Chart'}\n aria-describedby={mergeAriaIds(\n ariaDescribedBy,\n summaryId,\n dataTableId\n )}\n >\n {chartChild}\n {summaryId && (\n <span id={summaryId} className={styles.srOnly}>\n {summary}\n </span>\n )}\n {dataTableId && (\n <div id={dataTableId} className={styles.srOnly}>\n {dataTable}\n </div>\n )}\n </div>\n </ChartConfigContext.Provider>\n );\n}\n\n// ============================================\n// ChartTooltipContent\n// ============================================\n\nexport function ChartTooltipContent({\n active,\n payload,\n label,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n labelFormatter,\n valueFormatter,\n}: ChartTooltipContentProps) {\n const config = React.useContext(ChartConfigContext);\n\n if (!active || !payload?.length) return null;\n\n const formattedLabel = labelFormatter\n ? labelFormatter(String(label), payload)\n : label;\n\n return (\n <div className={styles.tooltip}>\n {!hideLabel && formattedLabel && (\n <div className={styles.tooltipLabel}>{formattedLabel}</div>\n )}\n <div className={styles.tooltipItems}>\n {payload.map((entry, i) => {\n const key = String(entry.dataKey ?? entry.name ?? i);\n const configEntry = config?.[key];\n const displayLabel = configEntry?.label ?? entry.name ?? key;\n const color = entry.color ?? configEntry?.color;\n const displayValue = valueFormatter\n ? valueFormatter(entry.value ?? 0)\n : String(entry.value ?? '');\n\n const indicatorClass = [\n styles.tooltipIndicator,\n indicator === 'line' && styles.tooltipIndicatorLine,\n indicator === 'dashed' && styles.tooltipIndicatorDashed,\n ].filter(Boolean).join(' ');\n\n return (\n <div key={key} className={styles.tooltipItem}>\n {!hideIndicator && (\n <span\n className={indicatorClass}\n style={{ backgroundColor: indicator === 'dashed' ? undefined : color, borderColor: color }}\n />\n )}\n <span className={styles.tooltipItemLabel}>{displayLabel}</span>\n <span className={styles.tooltipItemValue}>{displayValue}</span>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\n// ============================================\n// ChartTooltip (thin wrapper)\n// ============================================\n\ntype ChartTooltipProps = {\n indicator?: 'dot' | 'line' | 'dashed';\n hideLabel?: boolean;\n hideIndicator?: boolean;\n labelFormatter?: ChartTooltipContentProps['labelFormatter'];\n valueFormatter?: ChartTooltipContentProps['valueFormatter'];\n content?: any;\n [key: string]: unknown;\n};\n\nexport function ChartTooltip({\n indicator,\n hideLabel,\n hideIndicator,\n labelFormatter,\n valueFormatter,\n content,\n ...props\n}: ChartTooltipProps) {\n loadChartDeps();\n\n const defaultContent = React.useCallback(\n\n (tooltipProps: any) => (\n <ChartTooltipContent\n {...tooltipProps}\n indicator={indicator}\n hideLabel={hideLabel}\n hideIndicator={hideIndicator}\n labelFormatter={labelFormatter}\n valueFormatter={valueFormatter}\n />\n ),\n [indicator, hideLabel, hideIndicator, labelFormatter, valueFormatter],\n );\n\n if (_chartFailed || !_RechartsTooltip) {\n if (_chartFailed && process.env.NODE_ENV === 'development') {\n console.warn(\n '[@fragments-sdk/ui] Chart: recharts is not installed. ' +\n 'Install it with: npm install recharts'\n );\n }\n return null;\n }\n\n const RechartsTooltipComponent = _RechartsTooltip;\n\n return (\n <RechartsTooltipComponent\n cursor={{ stroke: 'var(--fui-border)' }}\n content={content ?? defaultContent}\n {...props}\n />\n );\n}\n\n// ============================================\n// ChartLegendContent\n// ============================================\n\nexport function ChartLegendContent({ payload }: ChartLegendContentProps) {\n const config = React.useContext(ChartConfigContext);\n\n if (!payload?.length) return null;\n\n return (\n <div className={styles.legend}>\n {payload.map((entry) => {\n const key = String(entry.dataKey ?? entry.value ?? '');\n const configEntry = config?.[key];\n const label = configEntry?.label ?? entry.value ?? key;\n const color = entry.color ?? configEntry?.color;\n\n return (\n <div key={key} className={styles.legendItem}>\n <span\n className={styles.legendDot}\n style={{ backgroundColor: color }}\n />\n <span className={styles.legendLabel}>{label}</span>\n </div>\n );\n })}\n </div>\n );\n}\n\n// ============================================\n// ChartLegend (thin wrapper)\n// ============================================\n\ntype ChartLegendProps = RechartsLegendProps & {\n content?: any;\n};\n\nexport function ChartLegend({ content, ...props }: ChartLegendProps) {\n loadChartDeps();\n\n const defaultContent = (legendProps: any) => <ChartLegendContent {...legendProps} />;\n\n if (_chartFailed || !_RechartsLegend) {\n if (_chartFailed && process.env.NODE_ENV === 'development') {\n console.warn(\n '[@fragments-sdk/ui] Chart: recharts is not installed. ' +\n 'Install it with: npm install recharts'\n );\n }\n return null;\n }\n\n const RechartsLegendComponent = _RechartsLegend;\n\n return (\n <RechartsLegendComponent\n content={content ?? defaultContent}\n {...props}\n />\n );\n}\n\nexport const Chart = Object.assign(ChartContainer, {\n Root: ChartContainer,\n Tooltip: ChartTooltip,\n TooltipContent: ChartTooltipContent,\n Legend: ChartLegend,\n LegendContent: ChartLegendContent,\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chart.js","sources":["../src/components/Chart/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport styles from './Chart.module.scss';\nimport '../../styles/globals.scss';\n\n// ============================================\n// Types (self-owned — no external dependency for types)\n// ============================================\n\nexport type ChartConfig = Record<\n string,\n {\n label: string;\n color: string;\n icon?: React.ComponentType<Record<string, unknown>>;\n }\n>;\n\nexport interface ChartContainerProps extends React.HTMLAttributes<HTMLDivElement> {\n config: ChartConfig;\n children: React.ReactElement;\n /** Non-visual summary announced to assistive technology users */\n summary?: string;\n /** Optional accessible data table or textual fallback */\n dataTable?: React.ReactNode;\n}\n\nexport interface ChartTooltipContentProps {\n active?: boolean;\n payload?: readonly {\n name?: string;\n value?: number | string;\n dataKey?: string | number;\n color?: string;\n payload?: Record<string, unknown>;\n }[];\n label?: string;\n indicator?: 'dot' | 'line' | 'dashed';\n hideLabel?: boolean;\n hideIndicator?: boolean;\n labelFormatter?: (label: string, payload: ChartTooltipContentProps['payload']) => React.ReactNode;\n valueFormatter?: (value: number | string) => string;\n}\n\nexport interface ChartLegendContentProps {\n payload?: readonly {\n value?: string;\n dataKey?: string | number;\n color?: string;\n }[];\n}\n\n// Internal-only type for recharts Legend props\ntype RechartsLegendProps = Record<string, unknown>;\n\n// ============================================\n// Lazy-loaded dependencies (recharts)\n// ============================================\n\nlet _RechartsTooltip: React.ComponentType<Record<string, unknown>> | null = null;\nlet _RechartsLegend: React.ComponentType<Record<string, unknown>> | null = null;\nlet _chartLoaded = false;\nlet _chartFailed = false;\n\nfunction loadChartDeps() {\n if (_chartLoaded) return;\n _chartLoaded = true;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const rc = require('recharts');\n _RechartsTooltip = rc.Tooltip as React.ComponentType<Record<string, unknown>>;\n _RechartsLegend = rc.Legend as React.ComponentType<Record<string, unknown>>;\n } catch {\n _chartFailed = true;\n }\n}\n\nfunction mergeAriaIds(...ids: Array<string | undefined>): string | undefined {\n const merged = ids.filter(Boolean).join(' ').trim();\n return merged.length > 0 ? merged : undefined;\n}\n\n// ============================================\n// Context\n// ============================================\n\nconst ChartConfigContext = React.createContext<ChartConfig | null>(null);\n\nexport function useChartConfig() {\n const ctx = React.useContext(ChartConfigContext);\n if (!ctx) {\n throw new Error('useChartConfig must be used within a <ChartContainer>');\n }\n return ctx;\n}\n\n// ============================================\n// ChartContainer\n// ============================================\n\nexport function ChartContainer({\n config,\n children,\n className,\n style,\n summary,\n dataTable,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n ...htmlProps\n}: ChartContainerProps) {\n const chartId = React.useId();\n const summaryId = summary ? `chart-summary-${chartId}` : undefined;\n const dataTableId = dataTable ? `chart-data-${chartId}` : undefined;\n\n // Build CSS custom properties from config (--chart-<key>)\n const cssVars = React.useMemo(() => {\n const vars: Record<string, string> = {};\n Object.entries(config).forEach(([key, val]) => {\n vars[`--chart-${key}`] = val.color;\n });\n return vars;\n }, [config]);\n\n const rootClasses = [styles.container, className].filter(Boolean).join(' ');\n\n // Inject sizing props into the chart child (recharts API).\n // Only pass `responsive` for custom component types to avoid leaking the\n // prop to intrinsic DOM nodes in test/demo usage.\n const chartChildProps: Record<string, unknown> = {\n width: '100%',\n height: '100%',\n };\n\n if (typeof children.type !== 'string') {\n chartChildProps.responsive = true;\n }\n\n const chartChild = React.cloneElement(\n children as React.ReactElement<Record<string, unknown>>,\n chartChildProps\n );\n\n return (\n <ChartConfigContext.Provider value={config}>\n <div\n {...htmlProps}\n className={rootClasses}\n style={{ ...cssVars, ...style }}\n role=\"img\"\n aria-label={ariaLabel || 'Chart'}\n aria-describedby={mergeAriaIds(\n ariaDescribedBy,\n summaryId,\n dataTableId\n )}\n >\n {chartChild}\n {summaryId && (\n <span id={summaryId} className={styles.srOnly}>\n {summary}\n </span>\n )}\n {dataTableId && (\n <div id={dataTableId} className={styles.srOnly}>\n {dataTable}\n </div>\n )}\n </div>\n </ChartConfigContext.Provider>\n );\n}\n\n// ============================================\n// ChartTooltipContent\n// ============================================\n\nexport function ChartTooltipContent({\n active,\n payload,\n label,\n indicator = 'dot',\n hideLabel = false,\n hideIndicator = false,\n labelFormatter,\n valueFormatter,\n}: ChartTooltipContentProps) {\n const config = React.useContext(ChartConfigContext);\n\n if (!active || !payload?.length) return null;\n\n const formattedLabel = labelFormatter\n ? labelFormatter(String(label), payload)\n : label;\n\n return (\n <div className={styles.tooltip}>\n {!hideLabel && formattedLabel && (\n <div className={styles.tooltipLabel}>{formattedLabel}</div>\n )}\n <div className={styles.tooltipItems}>\n {payload.map((entry, i) => {\n const key = String(entry.dataKey ?? entry.name ?? i);\n const configEntry = config?.[key];\n const displayLabel = configEntry?.label ?? entry.name ?? key;\n const color = entry.color ?? configEntry?.color;\n const displayValue = valueFormatter\n ? valueFormatter(entry.value ?? 0)\n : String(entry.value ?? '');\n\n const indicatorClass = [\n styles.tooltipIndicator,\n indicator === 'line' && styles.tooltipIndicatorLine,\n indicator === 'dashed' && styles.tooltipIndicatorDashed,\n ].filter(Boolean).join(' ');\n\n return (\n <div key={key} className={styles.tooltipItem}>\n {!hideIndicator && (\n <span\n className={indicatorClass}\n style={{ backgroundColor: indicator === 'dashed' ? undefined : color, borderColor: color }}\n />\n )}\n <span className={styles.tooltipItemLabel}>{displayLabel}</span>\n <span className={styles.tooltipItemValue}>{displayValue}</span>\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\n// ============================================\n// ChartTooltip (thin wrapper)\n// ============================================\n\ntype ChartTooltipProps = {\n indicator?: 'dot' | 'line' | 'dashed';\n hideLabel?: boolean;\n hideIndicator?: boolean;\n labelFormatter?: ChartTooltipContentProps['labelFormatter'];\n valueFormatter?: ChartTooltipContentProps['valueFormatter'];\n content?: React.ReactNode | ((tooltipProps: Record<string, unknown>) => React.ReactNode);\n [key: string]: unknown;\n};\n\nexport function ChartTooltip({\n indicator,\n hideLabel,\n hideIndicator,\n labelFormatter,\n valueFormatter,\n content,\n ...props\n}: ChartTooltipProps) {\n loadChartDeps();\n\n const defaultContent = React.useCallback(\n\n (tooltipProps: Record<string, unknown>) => (\n <ChartTooltipContent\n {...(tooltipProps as ChartTooltipContentProps)}\n indicator={indicator}\n hideLabel={hideLabel}\n hideIndicator={hideIndicator}\n labelFormatter={labelFormatter}\n valueFormatter={valueFormatter}\n />\n ),\n [indicator, hideLabel, hideIndicator, labelFormatter, valueFormatter],\n );\n\n if (_chartFailed || !_RechartsTooltip) {\n if (_chartFailed && process.env.NODE_ENV === 'development') {\n console.warn(\n '[@fragments-sdk/ui] Chart: recharts is not installed. ' +\n 'Install it with: npm install recharts'\n );\n }\n return null;\n }\n\n const RechartsTooltipComponent = _RechartsTooltip;\n\n return (\n <RechartsTooltipComponent\n cursor={{ stroke: 'var(--fui-border)' }}\n content={content ?? defaultContent}\n {...props}\n />\n );\n}\n\n// ============================================\n// ChartLegendContent\n// ============================================\n\nexport function ChartLegendContent({ payload }: ChartLegendContentProps) {\n const config = React.useContext(ChartConfigContext);\n\n if (!payload?.length) return null;\n\n return (\n <div className={styles.legend}>\n {payload.map((entry) => {\n const key = String(entry.dataKey ?? entry.value ?? '');\n const configEntry = config?.[key];\n const label = configEntry?.label ?? entry.value ?? key;\n const color = entry.color ?? configEntry?.color;\n\n return (\n <div key={key} className={styles.legendItem}>\n <span\n className={styles.legendDot}\n style={{ backgroundColor: color }}\n />\n <span className={styles.legendLabel}>{label}</span>\n </div>\n );\n })}\n </div>\n );\n}\n\n// ============================================\n// ChartLegend (thin wrapper)\n// ============================================\n\ntype ChartLegendProps = RechartsLegendProps & {\n content?: React.ReactNode | ((legendProps: Record<string, unknown>) => React.ReactNode);\n};\n\nexport function ChartLegend({ content, ...props }: ChartLegendProps) {\n loadChartDeps();\n\n const defaultContent = (legendProps: Record<string, unknown>) => (\n <ChartLegendContent {...(legendProps as ChartLegendContentProps)} />\n );\n\n if (_chartFailed || !_RechartsLegend) {\n if (_chartFailed && process.env.NODE_ENV === 'development') {\n console.warn(\n '[@fragments-sdk/ui] Chart: recharts is not installed. ' +\n 'Install it with: npm install recharts'\n );\n }\n return null;\n }\n\n const RechartsLegendComponent = _RechartsLegend;\n\n return (\n <RechartsLegendComponent\n content={content ?? defaultContent}\n {...props}\n />\n );\n}\n\nexport const Chart = Object.assign(ChartContainer, {\n Root: ChartContainer,\n Tooltip: ChartTooltip,\n TooltipContent: ChartTooltipContent,\n Legend: ChartLegend,\n LegendContent: ChartLegendContent,\n});\n"],"names":[],"mappings":"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"}
@@ -553,6 +553,8 @@ const CodeBlockBase = React__namespace.forwardRef(function CodeBlock2({
553
553
  function TabbedCodeBlock({
554
554
  tabs,
555
555
  defaultTab,
556
+ value,
557
+ onValueChange,
556
558
  showCopy = true,
557
559
  copyPlacement = "auto",
558
560
  showLineNumbers = false,
@@ -563,24 +565,30 @@ function TabbedCodeBlock({
563
565
  className,
564
566
  onCopy
565
567
  }) {
566
- var _a;
567
- const defaultValue = defaultTab || ((_a = tabs[0]) == null ? void 0 : _a.label) || "";
568
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className, children: /* @__PURE__ */ jsxRuntime.jsxs(index.TabsRoot, { defaultValue, children: [
569
- /* @__PURE__ */ jsxRuntime.jsx(index.TabsList, { variant: tabsVariant, children: tabs.map((tab) => /* @__PURE__ */ jsxRuntime.jsx(index.Tab, { value: tab.label, children: tab.label }, tab.label)) }),
570
- tabs.map((tab) => /* @__PURE__ */ jsxRuntime.jsx(index.TabsPanel, { value: tab.label, flush: true, className: CodeBlock_module.default.tabbedPanel, children: /* @__PURE__ */ jsxRuntime.jsx(
571
- CodeBlockBase,
572
- {
573
- code: tab.code,
574
- language: tab.language,
575
- theme,
576
- showCopy,
577
- copyPlacement,
578
- showLineNumbers,
579
- wordWrap,
580
- maxHeight,
581
- onCopy: onCopy ? () => onCopy(tab.label) : void 0
582
- }
583
- ) }, tab.label))
568
+ var _a, _b;
569
+ const defaultValue = defaultTab || ((_a = tabs[0]) == null ? void 0 : _a.value) || ((_b = tabs[0]) == null ? void 0 : _b.label) || "";
570
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className, children: /* @__PURE__ */ jsxRuntime.jsxs(index.TabsRoot, { defaultValue, value, onValueChange, children: [
571
+ /* @__PURE__ */ jsxRuntime.jsx(index.TabsList, { variant: tabsVariant, children: tabs.map((tab, index$1) => {
572
+ const tabValue = tab.value ?? tab.label;
573
+ return /* @__PURE__ */ jsxRuntime.jsx(index.Tab, { value: tabValue, children: tab.label }, `${tabValue}-${index$1}`);
574
+ }) }),
575
+ tabs.map((tab, index$1) => {
576
+ const tabValue = tab.value ?? tab.label;
577
+ return /* @__PURE__ */ jsxRuntime.jsx(index.TabsPanel, { value: tabValue, flush: true, className: CodeBlock_module.default.tabbedPanel, children: /* @__PURE__ */ jsxRuntime.jsx(
578
+ CodeBlockBase,
579
+ {
580
+ code: tab.code,
581
+ language: tab.language,
582
+ theme,
583
+ showCopy,
584
+ copyPlacement,
585
+ showLineNumbers,
586
+ wordWrap,
587
+ maxHeight,
588
+ onCopy: onCopy ? () => onCopy(tab.label) : void 0
589
+ }
590
+ ) }, `${tabValue}-panel-${index$1}`);
591
+ })
584
592
  ] }) });
585
593
  }
586
594
  const CodeBlock = Object.assign(CodeBlockBase, {
@@ -1 +1 @@
1
- {"version":3,"file":"codeblock.cjs","sources":["../src/components/CodeBlock/index.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { useState, useCallback, useEffect, useMemo } from \"react\";\n// ============================================\n// Lazy-loaded dependency (shiki)\n// ============================================\n\nlet _codeToHtml:\n | ((code: string, options: { lang: string; theme: string }) => Promise<string>)\n | null = null;\nlet _shikiLoadPromise: Promise<void> | null = null;\nlet _shikiFailed = false;\n\nasync function loadShikiDeps() {\n if (_codeToHtml) return;\n if (_shikiFailed) return;\n if (!_shikiLoadPromise) {\n _shikiLoadPromise = (async () => {\n try {\n const shiki = await import(\"shiki\");\n _codeToHtml = shiki.codeToHtml;\n } catch {\n _shikiFailed = true;\n }\n })();\n }\n await _shikiLoadPromise;\n}\nimport { TabsRoot, TabsList, Tab, TabsPanel } from \"../Tabs\";\nimport { Button } from \"../Button\";\nimport styles from \"./CodeBlock.module.scss\";\nimport \"../../styles/globals.scss\";\n\nexport type CodeBlockLanguage =\n | \"tsx\"\n | \"typescript\"\n | \"ts\"\n | \"javascript\"\n | \"js\"\n | \"jsx\"\n | \"bash\"\n | \"shell\"\n | \"css\"\n | \"scss\"\n | \"sass\"\n | \"json\"\n | \"html\"\n | \"xml\"\n | \"markdown\"\n | \"md\"\n | \"yaml\"\n | \"yml\"\n | \"python\"\n | \"py\"\n | \"ruby\"\n | \"go\"\n | \"rust\"\n | \"java\"\n | \"kotlin\"\n | \"swift\"\n | \"c\"\n | \"cpp\"\n | \"csharp\"\n | \"php\"\n | \"sql\"\n | \"graphql\"\n | \"diff\"\n | \"plaintext\"\n | \"text\";\n\n/** Resolves language aliases to their canonical Shiki names */\nconst LANGUAGE_ALIASES: Partial<Record<CodeBlockLanguage, string>> = {\n ts: \"typescript\",\n js: \"javascript\",\n text: \"plaintext\",\n};\n\n/** Available syntax highlighting themes */\nexport type CodeBlockTheme =\n | \"synthwave-84\"\n | \"github-dark\"\n | \"github-light\"\n | \"one-dark-pro\"\n | \"dracula\"\n | \"nord\"\n | \"monokai\"\n | \"vitesse-dark\"\n | \"vitesse-light\"\n | \"min-dark\"\n | \"min-light\";\n\nexport type CodeBlockCopyPlacement = \"auto\" | \"header\" | \"overlay\";\n\nexport interface CodeBlockProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Code string to display */\n code: string;\n /** Programming language for syntax highlighting */\n language?: CodeBlockLanguage;\n /** Syntax highlighting theme */\n theme?: CodeBlockTheme;\n /** Show copy button */\n showCopy?: boolean;\n /** Optional title above code block (external label) */\n title?: string;\n /** Optional filename shown in header bar inside code block */\n filename?: string;\n /** Optional caption below code block */\n caption?: string;\n /** Show line numbers */\n showLineNumbers?: boolean;\n /** Starting line number (default: 1) */\n startLineNumber?: number;\n /** Highlight specific lines (e.g., [1, 3, '5-7']) */\n highlightLines?: (number | string)[];\n /** Lines marked as added in diff view */\n addedLines?: (number | string)[];\n /** Lines marked as removed in diff view */\n removedLines?: (number | string)[];\n /** Enable word wrapping for long lines */\n wordWrap?: boolean;\n /** Maximum height in pixels (enables scrolling) */\n maxHeight?: number;\n /** Allow collapsing/expanding the code block */\n collapsible?: boolean;\n /** Initial collapsed state (only applies when collapsible is true) */\n defaultCollapsed?: boolean;\n /** Number of lines to show when collapsed */\n collapsedLines?: number;\n /** Compact mode with reduced padding */\n compact?: boolean;\n /** Show a persistent copy button (always visible, uses Button component) */\n persistentCopy?: boolean;\n /** Placement of copy button when not using persistent copy */\n copyPlacement?: CodeBlockCopyPlacement;\n /** Callback fired when the copy button is clicked and copy succeeds */\n onCopy?: () => void;\n}\n\nfunction CopyIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n );\n}\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nfunction ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nfunction ChevronUpIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n );\n}\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#039;\");\n}\n\n/**\n * Remove common leading whitespace from all lines (dedent).\n * This handles template literals that have extra indentation from code formatting.\n */\nfunction dedent(str: string): string {\n const lines = str.split(\"\\n\");\n\n // Find the minimum indentation (ignoring empty lines)\n let minIndent = Infinity;\n for (const line of lines) {\n if (line.trim() === \"\") continue;\n const match = line.match(/^(\\s*)/);\n if (match) {\n minIndent = Math.min(minIndent, match[1].length);\n }\n }\n\n // If no indentation found, return as-is\n if (minIndent === Infinity || minIndent === 0) {\n return str;\n }\n\n // Remove the common indentation from all lines\n return lines.map((line) => line.slice(minIndent)).join(\"\\n\");\n}\n\n/**\n * Normalize indentation while handling JSX where first line is already at column 0.\n */\nfunction normalizeIndentation(str: string): string {\n const lines = str.split(\"\\n\");\n if (lines.length <= 1) return str;\n\n let minIndent = Infinity;\n const firstLineIndent = lines[0].match(/^(\\s*)/)?.[1].length ?? 0;\n\n for (let i = 1; i < lines.length; i += 1) {\n const line = lines[i];\n if (line.trim().length === 0) continue;\n const indent = line.match(/^(\\s*)/)?.[1].length ?? 0;\n minIndent = Math.min(minIndent, indent);\n }\n\n if (firstLineIndent > 0) {\n minIndent = Math.min(minIndent, firstLineIndent);\n }\n\n if (minIndent === Infinity || minIndent === 0) return str;\n\n return lines\n .map((line) => line.slice(Math.min(minIndent, line.match(/^(\\s*)/)?.[1].length ?? 0)))\n .join(\"\\n\");\n}\n\nfunction trimTrailingWhitespace(str: string): string {\n return str\n .split(\"\\n\")\n .map((line) => line.replace(/[ \\t]+$/g, \"\"))\n .join(\"\\n\");\n}\n\nfunction findTagEnd(line: string): number {\n let quote: '\"' | \"'\" | \"`\" | null = null;\n let escaped = false;\n let braceDepth = 0;\n let bracketDepth = 0;\n let parenDepth = 0;\n\n for (let i = 1; i < line.length; i += 1) {\n const char = line[i];\n\n if (quote) {\n if (char === \"\\\\\" && !escaped) {\n escaped = true;\n continue;\n }\n if (char === quote && !escaped) {\n quote = null;\n }\n escaped = false;\n continue;\n }\n\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n\n if (char === \"{\") braceDepth += 1;\n else if (char === \"}\") braceDepth = Math.max(0, braceDepth - 1);\n else if (char === \"[\") bracketDepth += 1;\n else if (char === \"]\") bracketDepth = Math.max(0, bracketDepth - 1);\n else if (char === \"(\") parenDepth += 1;\n else if (char === \")\") parenDepth = Math.max(0, parenDepth - 1);\n else if (char === \">\" && braceDepth === 0 && bracketDepth === 0 && parenDepth === 0) {\n return i;\n }\n }\n\n return -1;\n}\n\nfunction splitJsxAttributes(attrs: string): string[] {\n const parts: string[] = [];\n let current = \"\";\n let quote: '\"' | \"'\" | \"`\" | null = null;\n let escaped = false;\n let braceDepth = 0;\n let bracketDepth = 0;\n let parenDepth = 0;\n\n for (const char of attrs) {\n if (quote) {\n current += char;\n if (char === \"\\\\\" && !escaped) {\n escaped = true;\n continue;\n }\n if (char === quote && !escaped) {\n quote = null;\n }\n escaped = false;\n continue;\n }\n\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n current += char;\n continue;\n }\n\n if (char === \"{\") braceDepth += 1;\n else if (char === \"}\") braceDepth = Math.max(0, braceDepth - 1);\n else if (char === \"[\") bracketDepth += 1;\n else if (char === \"]\") bracketDepth = Math.max(0, bracketDepth - 1);\n else if (char === \"(\") parenDepth += 1;\n else if (char === \")\") parenDepth = Math.max(0, parenDepth - 1);\n\n if (/\\s/.test(char) && braceDepth === 0 && bracketDepth === 0 && parenDepth === 0) {\n if (current.trim().length > 0) {\n parts.push(current.trim());\n current = \"\";\n }\n continue;\n }\n\n current += char;\n }\n\n if (current.trim().length > 0) {\n parts.push(current.trim());\n }\n\n return parts;\n}\n\nfunction formatLongJsxTagLine(line: string): string {\n const maxInlineLength = 110;\n if (line.length <= maxInlineLength) return line;\n\n const indent = line.match(/^(\\s*)/)?.[1] ?? \"\";\n const trimmed = line.trimStart();\n\n if (\n !trimmed.startsWith(\"<\") ||\n trimmed.startsWith(\"</\") ||\n trimmed.startsWith(\"<!\") ||\n trimmed.startsWith(\"<?\")\n ) {\n return line;\n }\n\n const tagEnd = findTagEnd(trimmed);\n if (tagEnd === -1) return line;\n if (trimmed.slice(tagEnd + 1).trim().length > 0) return line;\n\n const rawTagBody = trimmed.slice(1, tagEnd).trim();\n const isSelfClosing = rawTagBody.endsWith(\"/\");\n const tagBody = isSelfClosing ? rawTagBody.slice(0, -1).trimEnd() : rawTagBody;\n const firstSpace = tagBody.search(/\\s/);\n if (firstSpace === -1) return line;\n\n const tagName = tagBody.slice(0, firstSpace);\n if (!/^[A-Za-z][\\w.:-]*$/.test(tagName)) return line;\n\n const attrsSource = tagBody.slice(firstSpace).trim();\n if (!attrsSource.includes(\"=\") && !attrsSource.includes(\"{...\")) return line;\n\n const attrs = splitJsxAttributes(attrsSource);\n if (attrs.length === 0) return line;\n\n const attrIndent = `${indent} `;\n const close = isSelfClosing ? \"/>\" : \">\";\n\n return [\n `${indent}<${tagName}`,\n ...attrs.map((attr) => `${attrIndent}${attr}`),\n `${indent}${close}`,\n ].join(\"\\n\");\n}\n\nfunction formatLongJsxTags(code: string): string {\n return code\n .split(\"\\n\")\n .flatMap((line) => formatLongJsxTagLine(line).split(\"\\n\"))\n .join(\"\\n\");\n}\n\nfunction normalizeCode(code: string): string {\n const trimmed = code.trim();\n if (trimmed.length === 0) return \"\";\n\n const normalized = normalizeIndentation(trimmed);\n const dedented = dedent(normalized);\n const withoutTrailingWhitespace = trimTrailingWhitespace(dedented);\n return formatLongJsxTags(withoutTrailingWhitespace);\n}\n\n/**\n * Parse line specification into a Set of line numbers.\n * Supports: [1, 3, '5-7'] -> Set {1, 3, 5, 6, 7}\n */\nfunction parseLineSpec(spec?: (number | string)[]): Set<number> {\n const lines = new Set<number>();\n if (!spec) return lines;\n\n for (const item of spec) {\n if (typeof item === \"number\") {\n lines.add(item);\n } else if (typeof item === \"string\") {\n const rangeMatch = item.match(/^(\\d+)-(\\d+)$/);\n if (rangeMatch) {\n const start = parseInt(rangeMatch[1], 10);\n const end = parseInt(rangeMatch[2], 10);\n for (let i = start; i <= end; i++) {\n lines.add(i);\n }\n } else {\n const num = parseInt(item, 10);\n if (!isNaN(num)) {\n lines.add(num);\n }\n }\n }\n }\n\n return lines;\n}\n\ninterface ProcessOptions {\n showLineNumbers: boolean;\n startLineNumber: number;\n highlightLines: Set<number>;\n addedLines: Set<number>;\n removedLines: Set<number>;\n}\n\n/**\n * Add line numbers, highlight classes, and diff markers to Shiki HTML output.\n */\nfunction processShikiHtml(html: string, options: ProcessOptions): string {\n const { showLineNumbers, startLineNumber, highlightLines, addedLines, removedLines } = options;\n const hasDiff = addedLines.size > 0 || removedLines.size > 0;\n\n if (!showLineNumbers && highlightLines.size === 0 && !hasDiff) {\n return html;\n }\n\n // Extract the code content from Shiki output\n // Shiki outputs: <pre class=\"shiki ...\"><code>...lines...</code></pre>\n const codeMatch = html.match(/<code[^>]*>([\\s\\S]*?)<\\/code>/);\n if (!codeMatch) return html;\n\n const codeContent = codeMatch[1];\n const lines = codeContent.split(\"\\n\");\n\n // Process each line\n const processedLines = lines.map((line, index) => {\n const lineNum = index + 1;\n const displayLineNum = startLineNumber + index;\n const isHighlighted = highlightLines.has(lineNum);\n const isAdded = addedLines.has(lineNum);\n const isRemoved = removedLines.has(lineNum);\n\n const lineClasses = [\"line\"];\n if (isHighlighted) lineClasses.push(\"highlighted\");\n if (isAdded) lineClasses.push(\"diff-added\");\n if (isRemoved) lineClasses.push(\"diff-removed\");\n\n const lineClass = lineClasses.join(\" \");\n const diffMarker = isAdded ? \"+\" : isRemoved ? \"-\" : \" \";\n\n if (showLineNumbers || hasDiff) {\n const lineNumHtml = showLineNumbers\n ? `<span class=\"line-number\">${displayLineNum}</span>`\n : \"\";\n const diffMarkerHtml = hasDiff ? `<span class=\"diff-marker\">${diffMarker}</span>` : \"\";\n return `<span class=\"${lineClass}\">${lineNumHtml}${diffMarkerHtml}${line}</span>`;\n }\n return `<span class=\"${lineClass}\">${line}</span>`;\n });\n\n // Reconstruct the HTML\n return html.replace(/<code[^>]*>[\\s\\S]*?<\\/code>/, `<code>${processedLines.join(\"\\n\")}</code>`);\n}\n\nconst CodeBlockBase = React.forwardRef<HTMLDivElement, CodeBlockProps>(function CodeBlock(\n {\n code,\n language = \"tsx\",\n theme = \"one-dark-pro\",\n showCopy = true,\n title,\n filename,\n caption,\n showLineNumbers = false,\n startLineNumber = 1,\n highlightLines,\n addedLines,\n removedLines,\n wordWrap = false,\n maxHeight,\n collapsible = false,\n defaultCollapsed = false,\n collapsedLines = 5,\n compact = false,\n persistentCopy = false,\n copyPlacement = \"auto\",\n onCopy,\n className,\n ...htmlProps\n },\n ref\n) {\n const [copied, setCopied] = useState(false);\n const [highlight, setHighlight] = useState<{ html: string; loading: boolean }>({ html: '', loading: true });\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n\n const trimmedCode = useMemo(() => normalizeCode(code), [code]);\n const codeLines = trimmedCode.split(\"\\n\");\n const totalLines = codeLines.length;\n const shouldShowCollapse = collapsible && totalLines > collapsedLines;\n\n // Compute visible code when collapsed\n const visibleCode =\n shouldShowCollapse && isCollapsed ? codeLines.slice(0, collapsedLines).join(\"\\n\") : trimmedCode;\n\n const highlightSet = useMemo(() => parseLineSpec(highlightLines), [highlightLines]);\n const addedSet = useMemo(() => parseLineSpec(addedLines), [addedLines]);\n const removedSet = useMemo(() => parseLineSpec(removedLines), [removedLines]);\n const hasDiff = addedSet.size > 0 || removedSet.size > 0;\n const resolvedCopyPlacement =\n copyPlacement === \"auto\" ? (filename ? \"header\" : \"overlay\") : copyPlacement;\n const shouldShowHeaderCopy = showCopy && !persistentCopy && resolvedCopyPlacement === \"header\";\n const shouldShowOverlayCopy = showCopy && !persistentCopy && resolvedCopyPlacement === \"overlay\";\n const shouldRenderHeader = Boolean(filename) || shouldShowHeaderCopy;\n\n // Apply syntax highlighting\n useEffect(() => {\n let cancelled = false;\n setHighlight((prev) => ({ ...prev, loading: true }));\n\n const run = async () => {\n await loadShikiDeps();\n\n const fallbackHtml = `<pre class=\"shiki\"><code>${escapeHtml(visibleCode)}</code></pre>`;\n\n if (_shikiFailed || !_codeToHtml) {\n if (_shikiFailed && process.env.NODE_ENV === \"development\") {\n console.warn(\n \"[@fragments-sdk/ui] CodeBlock: shiki is not installed. \" +\n \"Install it with: npm install shiki\"\n );\n }\n return fallbackHtml;\n }\n\n try {\n const resolvedLang = LANGUAGE_ALIASES[language] || language;\n const html = await _codeToHtml(visibleCode, { lang: resolvedLang, theme });\n return processShikiHtml(html, {\n showLineNumbers,\n startLineNumber,\n highlightLines: highlightSet,\n addedLines: addedSet,\n removedLines: removedSet,\n });\n } catch (err) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\"Syntax highlighting failed:\", err);\n }\n return fallbackHtml;\n }\n };\n\n run().then((html) => {\n if (!cancelled) {\n setHighlight({ html, loading: false });\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [\n visibleCode,\n language,\n theme,\n showLineNumbers,\n startLineNumber,\n highlightSet,\n addedSet,\n removedSet,\n ]);\n\n const handleCopy = useCallback(async () => {\n try {\n // Always copy the full code, even when collapsed\n await navigator.clipboard.writeText(trimmedCode);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n onCopy?.();\n } catch (err) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\"Failed to copy:\", err);\n }\n }\n }, [trimmedCode, onCopy]);\n\n const toggleCollapsed = useCallback(() => {\n setIsCollapsed((prev) => !prev);\n }, []);\n\n const classNames = [\n styles.container,\n showLineNumbers && styles.withLineNumbers,\n hasDiff && styles.withDiff,\n wordWrap && styles.wordWrap,\n compact && styles.compact,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const wrapperClasses = [\n styles.wrapper,\n persistentCopy && styles.persistentCopyWrapper,\n shouldShowOverlayCopy && styles.withCopyOverlay,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const codeContainerStyle: React.CSSProperties = maxHeight ? { maxHeight, overflow: \"auto\" } : {};\n\n return (\n <div ref={ref} {...htmlProps} className={classNames} data-theme=\"dark\">\n {title && <div className={styles.title}>{title}</div>}\n <div className={wrapperClasses}>\n {shouldRenderHeader && (\n <div className={styles.header}>\n <span className={styles.filename}>{filename ?? \"\"}</span>\n {shouldShowHeaderCopy && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className={`${styles.copyButton} ${copied ? styles.copied : \"\"}`}\n aria-label={copied ? \"Copied!\" : \"Copy code\"}\n >\n {copied ? (\n <CheckIcon className={styles.icon} />\n ) : (\n <CopyIcon className={styles.icon} />\n )}\n </button>\n )}\n </div>\n )}\n {shouldShowOverlayCopy && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className={`${styles.copyButton} ${styles.copyOverlay} ${copied ? styles.copied : \"\"}`}\n aria-label={copied ? \"Copied!\" : \"Copy code\"}\n >\n {copied ? <CheckIcon className={styles.icon} /> : <CopyIcon className={styles.icon} />}\n </button>\n )}\n {highlight.loading ? (\n <div className={styles.loading} style={codeContainerStyle}>\n <pre>\n <code>{visibleCode}</code>\n </pre>\n </div>\n ) : (\n <div\n className={styles.codeContainer}\n style={codeContainerStyle}\n dangerouslySetInnerHTML={{ __html: highlight.html }}\n />\n )}\n {persistentCopy && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className={`${styles.persistentCopy} ${styles.copyButton} ${styles.copyOverlay} ${copied ? styles.copied : \"\"}`}\n aria-label={copied ? \"Copied!\" : \"Copy code\"}\n >\n {copied ? <CheckIcon className={styles.icon} /> : <CopyIcon className={styles.icon} />}\n </button>\n )}\n {shouldShowCollapse && (\n <button\n type=\"button\"\n onClick={toggleCollapsed}\n className={styles.collapseButton}\n aria-expanded={!isCollapsed}\n aria-label={isCollapsed ? \"Expand code\" : \"Collapse code\"}\n >\n {isCollapsed ? (\n <>\n <ChevronDownIcon className={styles.icon} />\n <span>Show {totalLines - collapsedLines} more lines</span>\n </>\n ) : (\n <>\n <ChevronUpIcon className={styles.icon} />\n <span>Show less</span>\n </>\n )}\n </button>\n )}\n </div>\n {caption && <div className={styles.caption}>{caption}</div>}\n </div>\n );\n});\n\n// ============================================\n// Tabbed Code Block\n// ============================================\n\nexport interface CodeBlockTab {\n /** Label shown in the tab */\n label: string;\n /** Code string to display */\n code: string;\n /** Programming language for syntax highlighting */\n language?: CodeBlockLanguage;\n}\n\nexport interface TabbedCodeBlockProps {\n /** Array of code tabs */\n tabs: CodeBlockTab[];\n /** Default selected tab (by label) */\n defaultTab?: string;\n /** Show copy button */\n showCopy?: boolean;\n /** Placement of copy button when not using persistent copy */\n copyPlacement?: CodeBlockCopyPlacement;\n /** Show line numbers */\n showLineNumbers?: boolean;\n /** Syntax highlighting theme (applies to all tabs) */\n theme?: CodeBlockTheme;\n /** Tab list visual style */\n tabsVariant?: \"underline\" | \"pills\";\n /** Enable word wrapping for long lines */\n wordWrap?: boolean;\n /** Maximum height in pixels (enables scrolling) */\n maxHeight?: number;\n /** Additional class name */\n className?: string;\n /** Callback fired when a tab's copy button is clicked. Receives the tab label. */\n onCopy?: (tabLabel: string) => void;\n}\n\nfunction TabbedCodeBlock({\n tabs,\n defaultTab,\n showCopy = true,\n copyPlacement = \"auto\",\n showLineNumbers = false,\n theme,\n tabsVariant = \"pills\",\n wordWrap,\n maxHeight,\n className,\n onCopy,\n}: TabbedCodeBlockProps) {\n const defaultValue = defaultTab || tabs[0]?.label || \"\";\n\n return (\n <div className={className}>\n <TabsRoot defaultValue={defaultValue}>\n <TabsList variant={tabsVariant}>\n {tabs.map((tab) => (\n <Tab key={tab.label} value={tab.label}>\n {tab.label}\n </Tab>\n ))}\n </TabsList>\n {tabs.map((tab) => (\n <TabsPanel key={tab.label} value={tab.label} flush className={styles.tabbedPanel}>\n <CodeBlockBase\n code={tab.code}\n language={tab.language}\n theme={theme}\n showCopy={showCopy}\n copyPlacement={copyPlacement}\n showLineNumbers={showLineNumbers}\n wordWrap={wordWrap}\n maxHeight={maxHeight}\n onCopy={onCopy ? () => onCopy(tab.label) : undefined}\n />\n </TabsPanel>\n ))}\n </TabsRoot>\n </div>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const CodeBlock = Object.assign(CodeBlockBase, {\n Tabbed: TabbedCodeBlock,\n});\n\nexport { TabbedCodeBlock };\n"],"names":["jsxs","jsx","_a","index","React","CodeBlock","useState","useMemo","useEffect","useCallback","styles","Fragment","TabsRoot","TabsList","Tab","TabsPanel"],"mappings":"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"}
1
+ {"version":3,"file":"codeblock.cjs","sources":["../src/components/CodeBlock/index.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { useState, useCallback, useEffect, useMemo } from \"react\";\n// ============================================\n// Lazy-loaded dependency (shiki)\n// ============================================\n\nlet _codeToHtml:\n | ((code: string, options: { lang: string; theme: string }) => Promise<string>)\n | null = null;\nlet _shikiLoadPromise: Promise<void> | null = null;\nlet _shikiFailed = false;\n\nasync function loadShikiDeps() {\n if (_codeToHtml) return;\n if (_shikiFailed) return;\n if (!_shikiLoadPromise) {\n _shikiLoadPromise = (async () => {\n try {\n const shiki = await import(\"shiki\");\n _codeToHtml = shiki.codeToHtml;\n } catch {\n _shikiFailed = true;\n }\n })();\n }\n await _shikiLoadPromise;\n}\nimport { TabsRoot, TabsList, Tab, TabsPanel } from \"../Tabs\";\nimport { Button } from \"../Button\";\nimport styles from \"./CodeBlock.module.scss\";\nimport \"../../styles/globals.scss\";\n\nexport type CodeBlockLanguage =\n | \"tsx\"\n | \"typescript\"\n | \"ts\"\n | \"javascript\"\n | \"js\"\n | \"jsx\"\n | \"bash\"\n | \"shell\"\n | \"css\"\n | \"scss\"\n | \"sass\"\n | \"json\"\n | \"html\"\n | \"xml\"\n | \"markdown\"\n | \"md\"\n | \"yaml\"\n | \"yml\"\n | \"python\"\n | \"py\"\n | \"ruby\"\n | \"go\"\n | \"rust\"\n | \"java\"\n | \"kotlin\"\n | \"swift\"\n | \"c\"\n | \"cpp\"\n | \"csharp\"\n | \"php\"\n | \"sql\"\n | \"graphql\"\n | \"diff\"\n | \"plaintext\"\n | \"text\";\n\n/** Resolves language aliases to their canonical Shiki names */\nconst LANGUAGE_ALIASES: Partial<Record<CodeBlockLanguage, string>> = {\n ts: \"typescript\",\n js: \"javascript\",\n text: \"plaintext\",\n};\n\n/** Available syntax highlighting themes */\nexport type CodeBlockTheme =\n | \"synthwave-84\"\n | \"github-dark\"\n | \"github-light\"\n | \"one-dark-pro\"\n | \"dracula\"\n | \"nord\"\n | \"monokai\"\n | \"vitesse-dark\"\n | \"vitesse-light\"\n | \"min-dark\"\n | \"min-light\";\n\nexport type CodeBlockCopyPlacement = \"auto\" | \"header\" | \"overlay\";\n\nexport interface CodeBlockProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Code string to display */\n code: string;\n /** Programming language for syntax highlighting */\n language?: CodeBlockLanguage;\n /** Syntax highlighting theme */\n theme?: CodeBlockTheme;\n /** Show copy button */\n showCopy?: boolean;\n /** Optional title above code block (external label) */\n title?: string;\n /** Optional filename shown in header bar inside code block */\n filename?: string;\n /** Optional caption below code block */\n caption?: string;\n /** Show line numbers */\n showLineNumbers?: boolean;\n /** Starting line number (default: 1) */\n startLineNumber?: number;\n /** Highlight specific lines (e.g., [1, 3, '5-7']) */\n highlightLines?: (number | string)[];\n /** Lines marked as added in diff view */\n addedLines?: (number | string)[];\n /** Lines marked as removed in diff view */\n removedLines?: (number | string)[];\n /** Enable word wrapping for long lines */\n wordWrap?: boolean;\n /** Maximum height in pixels (enables scrolling) */\n maxHeight?: number;\n /** Allow collapsing/expanding the code block */\n collapsible?: boolean;\n /** Initial collapsed state (only applies when collapsible is true) */\n defaultCollapsed?: boolean;\n /** Number of lines to show when collapsed */\n collapsedLines?: number;\n /** Compact mode with reduced padding */\n compact?: boolean;\n /** Show a persistent copy button (always visible, uses Button component) */\n persistentCopy?: boolean;\n /** Placement of copy button when not using persistent copy */\n copyPlacement?: CodeBlockCopyPlacement;\n /** Callback fired when the copy button is clicked and copy succeeds */\n onCopy?: () => void;\n}\n\nfunction CopyIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n );\n}\n\nfunction CheckIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n );\n}\n\nfunction ChevronDownIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n\nfunction ChevronUpIcon({ className }: { className?: string }) {\n return (\n <svg\n className={className}\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"18 15 12 9 6 15\" />\n </svg>\n );\n}\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\")\n .replace(/'/g, \"&#039;\");\n}\n\n/**\n * Remove common leading whitespace from all lines (dedent).\n * This handles template literals that have extra indentation from code formatting.\n */\nfunction dedent(str: string): string {\n const lines = str.split(\"\\n\");\n\n // Find the minimum indentation (ignoring empty lines)\n let minIndent = Infinity;\n for (const line of lines) {\n if (line.trim() === \"\") continue;\n const match = line.match(/^(\\s*)/);\n if (match) {\n minIndent = Math.min(minIndent, match[1].length);\n }\n }\n\n // If no indentation found, return as-is\n if (minIndent === Infinity || minIndent === 0) {\n return str;\n }\n\n // Remove the common indentation from all lines\n return lines.map((line) => line.slice(minIndent)).join(\"\\n\");\n}\n\n/**\n * Normalize indentation while handling JSX where first line is already at column 0.\n */\nfunction normalizeIndentation(str: string): string {\n const lines = str.split(\"\\n\");\n if (lines.length <= 1) return str;\n\n let minIndent = Infinity;\n const firstLineIndent = lines[0].match(/^(\\s*)/)?.[1].length ?? 0;\n\n for (let i = 1; i < lines.length; i += 1) {\n const line = lines[i];\n if (line.trim().length === 0) continue;\n const indent = line.match(/^(\\s*)/)?.[1].length ?? 0;\n minIndent = Math.min(minIndent, indent);\n }\n\n if (firstLineIndent > 0) {\n minIndent = Math.min(minIndent, firstLineIndent);\n }\n\n if (minIndent === Infinity || minIndent === 0) return str;\n\n return lines\n .map((line) => line.slice(Math.min(minIndent, line.match(/^(\\s*)/)?.[1].length ?? 0)))\n .join(\"\\n\");\n}\n\nfunction trimTrailingWhitespace(str: string): string {\n return str\n .split(\"\\n\")\n .map((line) => line.replace(/[ \\t]+$/g, \"\"))\n .join(\"\\n\");\n}\n\nfunction findTagEnd(line: string): number {\n let quote: '\"' | \"'\" | \"`\" | null = null;\n let escaped = false;\n let braceDepth = 0;\n let bracketDepth = 0;\n let parenDepth = 0;\n\n for (let i = 1; i < line.length; i += 1) {\n const char = line[i];\n\n if (quote) {\n if (char === \"\\\\\" && !escaped) {\n escaped = true;\n continue;\n }\n if (char === quote && !escaped) {\n quote = null;\n }\n escaped = false;\n continue;\n }\n\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n\n if (char === \"{\") braceDepth += 1;\n else if (char === \"}\") braceDepth = Math.max(0, braceDepth - 1);\n else if (char === \"[\") bracketDepth += 1;\n else if (char === \"]\") bracketDepth = Math.max(0, bracketDepth - 1);\n else if (char === \"(\") parenDepth += 1;\n else if (char === \")\") parenDepth = Math.max(0, parenDepth - 1);\n else if (char === \">\" && braceDepth === 0 && bracketDepth === 0 && parenDepth === 0) {\n return i;\n }\n }\n\n return -1;\n}\n\nfunction splitJsxAttributes(attrs: string): string[] {\n const parts: string[] = [];\n let current = \"\";\n let quote: '\"' | \"'\" | \"`\" | null = null;\n let escaped = false;\n let braceDepth = 0;\n let bracketDepth = 0;\n let parenDepth = 0;\n\n for (const char of attrs) {\n if (quote) {\n current += char;\n if (char === \"\\\\\" && !escaped) {\n escaped = true;\n continue;\n }\n if (char === quote && !escaped) {\n quote = null;\n }\n escaped = false;\n continue;\n }\n\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n current += char;\n continue;\n }\n\n if (char === \"{\") braceDepth += 1;\n else if (char === \"}\") braceDepth = Math.max(0, braceDepth - 1);\n else if (char === \"[\") bracketDepth += 1;\n else if (char === \"]\") bracketDepth = Math.max(0, bracketDepth - 1);\n else if (char === \"(\") parenDepth += 1;\n else if (char === \")\") parenDepth = Math.max(0, parenDepth - 1);\n\n if (/\\s/.test(char) && braceDepth === 0 && bracketDepth === 0 && parenDepth === 0) {\n if (current.trim().length > 0) {\n parts.push(current.trim());\n current = \"\";\n }\n continue;\n }\n\n current += char;\n }\n\n if (current.trim().length > 0) {\n parts.push(current.trim());\n }\n\n return parts;\n}\n\nfunction formatLongJsxTagLine(line: string): string {\n const maxInlineLength = 110;\n if (line.length <= maxInlineLength) return line;\n\n const indent = line.match(/^(\\s*)/)?.[1] ?? \"\";\n const trimmed = line.trimStart();\n\n if (\n !trimmed.startsWith(\"<\") ||\n trimmed.startsWith(\"</\") ||\n trimmed.startsWith(\"<!\") ||\n trimmed.startsWith(\"<?\")\n ) {\n return line;\n }\n\n const tagEnd = findTagEnd(trimmed);\n if (tagEnd === -1) return line;\n if (trimmed.slice(tagEnd + 1).trim().length > 0) return line;\n\n const rawTagBody = trimmed.slice(1, tagEnd).trim();\n const isSelfClosing = rawTagBody.endsWith(\"/\");\n const tagBody = isSelfClosing ? rawTagBody.slice(0, -1).trimEnd() : rawTagBody;\n const firstSpace = tagBody.search(/\\s/);\n if (firstSpace === -1) return line;\n\n const tagName = tagBody.slice(0, firstSpace);\n if (!/^[A-Za-z][\\w.:-]*$/.test(tagName)) return line;\n\n const attrsSource = tagBody.slice(firstSpace).trim();\n if (!attrsSource.includes(\"=\") && !attrsSource.includes(\"{...\")) return line;\n\n const attrs = splitJsxAttributes(attrsSource);\n if (attrs.length === 0) return line;\n\n const attrIndent = `${indent} `;\n const close = isSelfClosing ? \"/>\" : \">\";\n\n return [\n `${indent}<${tagName}`,\n ...attrs.map((attr) => `${attrIndent}${attr}`),\n `${indent}${close}`,\n ].join(\"\\n\");\n}\n\nfunction formatLongJsxTags(code: string): string {\n return code\n .split(\"\\n\")\n .flatMap((line) => formatLongJsxTagLine(line).split(\"\\n\"))\n .join(\"\\n\");\n}\n\nfunction normalizeCode(code: string): string {\n const trimmed = code.trim();\n if (trimmed.length === 0) return \"\";\n\n const normalized = normalizeIndentation(trimmed);\n const dedented = dedent(normalized);\n const withoutTrailingWhitespace = trimTrailingWhitespace(dedented);\n return formatLongJsxTags(withoutTrailingWhitespace);\n}\n\n/**\n * Parse line specification into a Set of line numbers.\n * Supports: [1, 3, '5-7'] -> Set {1, 3, 5, 6, 7}\n */\nfunction parseLineSpec(spec?: (number | string)[]): Set<number> {\n const lines = new Set<number>();\n if (!spec) return lines;\n\n for (const item of spec) {\n if (typeof item === \"number\") {\n lines.add(item);\n } else if (typeof item === \"string\") {\n const rangeMatch = item.match(/^(\\d+)-(\\d+)$/);\n if (rangeMatch) {\n const start = parseInt(rangeMatch[1], 10);\n const end = parseInt(rangeMatch[2], 10);\n for (let i = start; i <= end; i++) {\n lines.add(i);\n }\n } else {\n const num = parseInt(item, 10);\n if (!isNaN(num)) {\n lines.add(num);\n }\n }\n }\n }\n\n return lines;\n}\n\ninterface ProcessOptions {\n showLineNumbers: boolean;\n startLineNumber: number;\n highlightLines: Set<number>;\n addedLines: Set<number>;\n removedLines: Set<number>;\n}\n\n/**\n * Add line numbers, highlight classes, and diff markers to Shiki HTML output.\n */\nfunction processShikiHtml(html: string, options: ProcessOptions): string {\n const { showLineNumbers, startLineNumber, highlightLines, addedLines, removedLines } = options;\n const hasDiff = addedLines.size > 0 || removedLines.size > 0;\n\n if (!showLineNumbers && highlightLines.size === 0 && !hasDiff) {\n return html;\n }\n\n // Extract the code content from Shiki output\n // Shiki outputs: <pre class=\"shiki ...\"><code>...lines...</code></pre>\n const codeMatch = html.match(/<code[^>]*>([\\s\\S]*?)<\\/code>/);\n if (!codeMatch) return html;\n\n const codeContent = codeMatch[1];\n const lines = codeContent.split(\"\\n\");\n\n // Process each line\n const processedLines = lines.map((line, index) => {\n const lineNum = index + 1;\n const displayLineNum = startLineNumber + index;\n const isHighlighted = highlightLines.has(lineNum);\n const isAdded = addedLines.has(lineNum);\n const isRemoved = removedLines.has(lineNum);\n\n const lineClasses = [\"line\"];\n if (isHighlighted) lineClasses.push(\"highlighted\");\n if (isAdded) lineClasses.push(\"diff-added\");\n if (isRemoved) lineClasses.push(\"diff-removed\");\n\n const lineClass = lineClasses.join(\" \");\n const diffMarker = isAdded ? \"+\" : isRemoved ? \"-\" : \" \";\n\n if (showLineNumbers || hasDiff) {\n const lineNumHtml = showLineNumbers\n ? `<span class=\"line-number\">${displayLineNum}</span>`\n : \"\";\n const diffMarkerHtml = hasDiff ? `<span class=\"diff-marker\">${diffMarker}</span>` : \"\";\n return `<span class=\"${lineClass}\">${lineNumHtml}${diffMarkerHtml}${line}</span>`;\n }\n return `<span class=\"${lineClass}\">${line}</span>`;\n });\n\n // Reconstruct the HTML\n return html.replace(/<code[^>]*>[\\s\\S]*?<\\/code>/, `<code>${processedLines.join(\"\\n\")}</code>`);\n}\n\nconst CodeBlockBase = React.forwardRef<HTMLDivElement, CodeBlockProps>(function CodeBlock(\n {\n code,\n language = \"tsx\",\n theme = \"one-dark-pro\",\n showCopy = true,\n title,\n filename,\n caption,\n showLineNumbers = false,\n startLineNumber = 1,\n highlightLines,\n addedLines,\n removedLines,\n wordWrap = false,\n maxHeight,\n collapsible = false,\n defaultCollapsed = false,\n collapsedLines = 5,\n compact = false,\n persistentCopy = false,\n copyPlacement = \"auto\",\n onCopy,\n className,\n ...htmlProps\n },\n ref\n) {\n const [copied, setCopied] = useState(false);\n const [highlight, setHighlight] = useState<{ html: string; loading: boolean }>({ html: '', loading: true });\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n\n const trimmedCode = useMemo(() => normalizeCode(code), [code]);\n const codeLines = trimmedCode.split(\"\\n\");\n const totalLines = codeLines.length;\n const shouldShowCollapse = collapsible && totalLines > collapsedLines;\n\n // Compute visible code when collapsed\n const visibleCode =\n shouldShowCollapse && isCollapsed ? codeLines.slice(0, collapsedLines).join(\"\\n\") : trimmedCode;\n\n const highlightSet = useMemo(() => parseLineSpec(highlightLines), [highlightLines]);\n const addedSet = useMemo(() => parseLineSpec(addedLines), [addedLines]);\n const removedSet = useMemo(() => parseLineSpec(removedLines), [removedLines]);\n const hasDiff = addedSet.size > 0 || removedSet.size > 0;\n const resolvedCopyPlacement =\n copyPlacement === \"auto\" ? (filename ? \"header\" : \"overlay\") : copyPlacement;\n const shouldShowHeaderCopy = showCopy && !persistentCopy && resolvedCopyPlacement === \"header\";\n const shouldShowOverlayCopy = showCopy && !persistentCopy && resolvedCopyPlacement === \"overlay\";\n const shouldRenderHeader = Boolean(filename) || shouldShowHeaderCopy;\n\n // Apply syntax highlighting\n useEffect(() => {\n let cancelled = false;\n setHighlight((prev) => ({ ...prev, loading: true }));\n\n const run = async () => {\n await loadShikiDeps();\n\n const fallbackHtml = `<pre class=\"shiki\"><code>${escapeHtml(visibleCode)}</code></pre>`;\n\n if (_shikiFailed || !_codeToHtml) {\n if (_shikiFailed && process.env.NODE_ENV === \"development\") {\n console.warn(\n \"[@fragments-sdk/ui] CodeBlock: shiki is not installed. \" +\n \"Install it with: npm install shiki\"\n );\n }\n return fallbackHtml;\n }\n\n try {\n const resolvedLang = LANGUAGE_ALIASES[language] || language;\n const html = await _codeToHtml(visibleCode, { lang: resolvedLang, theme });\n return processShikiHtml(html, {\n showLineNumbers,\n startLineNumber,\n highlightLines: highlightSet,\n addedLines: addedSet,\n removedLines: removedSet,\n });\n } catch (err) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\"Syntax highlighting failed:\", err);\n }\n return fallbackHtml;\n }\n };\n\n run().then((html) => {\n if (!cancelled) {\n setHighlight({ html, loading: false });\n }\n });\n\n return () => {\n cancelled = true;\n };\n }, [\n visibleCode,\n language,\n theme,\n showLineNumbers,\n startLineNumber,\n highlightSet,\n addedSet,\n removedSet,\n ]);\n\n const handleCopy = useCallback(async () => {\n try {\n // Always copy the full code, even when collapsed\n await navigator.clipboard.writeText(trimmedCode);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n onCopy?.();\n } catch (err) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\"Failed to copy:\", err);\n }\n }\n }, [trimmedCode, onCopy]);\n\n const toggleCollapsed = useCallback(() => {\n setIsCollapsed((prev) => !prev);\n }, []);\n\n const classNames = [\n styles.container,\n showLineNumbers && styles.withLineNumbers,\n hasDiff && styles.withDiff,\n wordWrap && styles.wordWrap,\n compact && styles.compact,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const wrapperClasses = [\n styles.wrapper,\n persistentCopy && styles.persistentCopyWrapper,\n shouldShowOverlayCopy && styles.withCopyOverlay,\n ]\n .filter(Boolean)\n .join(\" \");\n\n const codeContainerStyle: React.CSSProperties = maxHeight ? { maxHeight, overflow: \"auto\" } : {};\n\n return (\n <div ref={ref} {...htmlProps} className={classNames} data-theme=\"dark\">\n {title && <div className={styles.title}>{title}</div>}\n <div className={wrapperClasses}>\n {shouldRenderHeader && (\n <div className={styles.header}>\n <span className={styles.filename}>{filename ?? \"\"}</span>\n {shouldShowHeaderCopy && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className={`${styles.copyButton} ${copied ? styles.copied : \"\"}`}\n aria-label={copied ? \"Copied!\" : \"Copy code\"}\n >\n {copied ? (\n <CheckIcon className={styles.icon} />\n ) : (\n <CopyIcon className={styles.icon} />\n )}\n </button>\n )}\n </div>\n )}\n {shouldShowOverlayCopy && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className={`${styles.copyButton} ${styles.copyOverlay} ${copied ? styles.copied : \"\"}`}\n aria-label={copied ? \"Copied!\" : \"Copy code\"}\n >\n {copied ? <CheckIcon className={styles.icon} /> : <CopyIcon className={styles.icon} />}\n </button>\n )}\n {highlight.loading ? (\n <div className={styles.loading} style={codeContainerStyle}>\n <pre>\n <code>{visibleCode}</code>\n </pre>\n </div>\n ) : (\n <div\n className={styles.codeContainer}\n style={codeContainerStyle}\n dangerouslySetInnerHTML={{ __html: highlight.html }}\n />\n )}\n {persistentCopy && (\n <button\n type=\"button\"\n onClick={handleCopy}\n className={`${styles.persistentCopy} ${styles.copyButton} ${styles.copyOverlay} ${copied ? styles.copied : \"\"}`}\n aria-label={copied ? \"Copied!\" : \"Copy code\"}\n >\n {copied ? <CheckIcon className={styles.icon} /> : <CopyIcon className={styles.icon} />}\n </button>\n )}\n {shouldShowCollapse && (\n <button\n type=\"button\"\n onClick={toggleCollapsed}\n className={styles.collapseButton}\n aria-expanded={!isCollapsed}\n aria-label={isCollapsed ? \"Expand code\" : \"Collapse code\"}\n >\n {isCollapsed ? (\n <>\n <ChevronDownIcon className={styles.icon} />\n <span>Show {totalLines - collapsedLines} more lines</span>\n </>\n ) : (\n <>\n <ChevronUpIcon className={styles.icon} />\n <span>Show less</span>\n </>\n )}\n </button>\n )}\n </div>\n {caption && <div className={styles.caption}>{caption}</div>}\n </div>\n );\n});\n\n// ============================================\n// Tabbed Code Block\n// ============================================\n\nexport interface CodeBlockTab {\n /** Label shown in the tab */\n label: string;\n /** Stable tab value (defaults to label) */\n value?: string;\n /** Code string to display */\n code: string;\n /** Programming language for syntax highlighting */\n language?: CodeBlockLanguage;\n}\n\nexport interface TabbedCodeBlockProps {\n /** Array of code tabs */\n tabs: CodeBlockTab[];\n /** Default selected tab (by tab value, or label when value is omitted) */\n defaultTab?: string;\n /** Controlled selected tab value */\n value?: string;\n /** Called when the selected tab changes */\n onValueChange?: (value: string) => void;\n /** Show copy button */\n showCopy?: boolean;\n /** Placement of copy button when not using persistent copy */\n copyPlacement?: CodeBlockCopyPlacement;\n /** Show line numbers */\n showLineNumbers?: boolean;\n /** Syntax highlighting theme (applies to all tabs) */\n theme?: CodeBlockTheme;\n /** Tab list visual style */\n tabsVariant?: \"underline\" | \"pills\";\n /** Enable word wrapping for long lines */\n wordWrap?: boolean;\n /** Maximum height in pixels (enables scrolling) */\n maxHeight?: number;\n /** Additional class name */\n className?: string;\n /** Callback fired when a tab's copy button is clicked. Receives the tab label. */\n onCopy?: (tabLabel: string) => void;\n}\n\nfunction TabbedCodeBlock({\n tabs,\n defaultTab,\n value,\n onValueChange,\n showCopy = true,\n copyPlacement = \"auto\",\n showLineNumbers = false,\n theme,\n tabsVariant = \"pills\",\n wordWrap,\n maxHeight,\n className,\n onCopy,\n}: TabbedCodeBlockProps) {\n const defaultValue = defaultTab || tabs[0]?.value || tabs[0]?.label || \"\";\n\n return (\n <div className={className}>\n <TabsRoot defaultValue={defaultValue} value={value} onValueChange={onValueChange}>\n <TabsList variant={tabsVariant}>\n {tabs.map((tab, index) => {\n const tabValue = tab.value ?? tab.label;\n return (\n <Tab key={`${tabValue}-${index}`} value={tabValue}>\n {tab.label}\n </Tab>\n );\n })}\n </TabsList>\n {tabs.map((tab, index) => {\n const tabValue = tab.value ?? tab.label;\n return (\n <TabsPanel key={`${tabValue}-panel-${index}`} value={tabValue} flush className={styles.tabbedPanel}>\n <CodeBlockBase\n code={tab.code}\n language={tab.language}\n theme={theme}\n showCopy={showCopy}\n copyPlacement={copyPlacement}\n showLineNumbers={showLineNumbers}\n wordWrap={wordWrap}\n maxHeight={maxHeight}\n onCopy={onCopy ? () => onCopy(tab.label) : undefined}\n />\n </TabsPanel>\n );\n })}\n </TabsRoot>\n </div>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const CodeBlock = Object.assign(CodeBlockBase, {\n Tabbed: TabbedCodeBlock,\n});\n\nexport { TabbedCodeBlock };\n"],"names":["jsxs","jsx","_a","index","React","CodeBlock","useState","useMemo","useEffect","useCallback","styles","Fragment","TabsRoot","TabsList","Tab","TabsPanel"],"mappings":"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"}
package/dist/codeblock.js CHANGED
@@ -513,6 +513,8 @@ const CodeBlockBase = React.forwardRef(function CodeBlock2({
513
513
  function TabbedCodeBlock({
514
514
  tabs,
515
515
  defaultTab,
516
+ value,
517
+ onValueChange,
516
518
  showCopy = true,
517
519
  copyPlacement = "auto",
518
520
  showLineNumbers = false,
@@ -523,24 +525,30 @@ function TabbedCodeBlock({
523
525
  className,
524
526
  onCopy
525
527
  }) {
526
- var _a;
527
- const defaultValue = defaultTab || ((_a = tabs[0]) == null ? void 0 : _a.label) || "";
528
- return /* @__PURE__ */ jsx("div", { className, children: /* @__PURE__ */ jsxs(TabsRoot, { defaultValue, children: [
529
- /* @__PURE__ */ jsx(TabsList, { variant: tabsVariant, children: tabs.map((tab) => /* @__PURE__ */ jsx(Tab, { value: tab.label, children: tab.label }, tab.label)) }),
530
- tabs.map((tab) => /* @__PURE__ */ jsx(TabsPanel, { value: tab.label, flush: true, className: styles.tabbedPanel, children: /* @__PURE__ */ jsx(
531
- CodeBlockBase,
532
- {
533
- code: tab.code,
534
- language: tab.language,
535
- theme,
536
- showCopy,
537
- copyPlacement,
538
- showLineNumbers,
539
- wordWrap,
540
- maxHeight,
541
- onCopy: onCopy ? () => onCopy(tab.label) : void 0
542
- }
543
- ) }, tab.label))
528
+ var _a, _b;
529
+ const defaultValue = defaultTab || ((_a = tabs[0]) == null ? void 0 : _a.value) || ((_b = tabs[0]) == null ? void 0 : _b.label) || "";
530
+ return /* @__PURE__ */ jsx("div", { className, children: /* @__PURE__ */ jsxs(TabsRoot, { defaultValue, value, onValueChange, children: [
531
+ /* @__PURE__ */ jsx(TabsList, { variant: tabsVariant, children: tabs.map((tab, index) => {
532
+ const tabValue = tab.value ?? tab.label;
533
+ return /* @__PURE__ */ jsx(Tab, { value: tabValue, children: tab.label }, `${tabValue}-${index}`);
534
+ }) }),
535
+ tabs.map((tab, index) => {
536
+ const tabValue = tab.value ?? tab.label;
537
+ return /* @__PURE__ */ jsx(TabsPanel, { value: tabValue, flush: true, className: styles.tabbedPanel, children: /* @__PURE__ */ jsx(
538
+ CodeBlockBase,
539
+ {
540
+ code: tab.code,
541
+ language: tab.language,
542
+ theme,
543
+ showCopy,
544
+ copyPlacement,
545
+ showLineNumbers,
546
+ wordWrap,
547
+ maxHeight,
548
+ onCopy: onCopy ? () => onCopy(tab.label) : void 0
549
+ }
550
+ ) }, `${tabValue}-panel-${index}`);
551
+ })
544
552
  ] }) });
545
553
  }
546
554
  const CodeBlock = Object.assign(CodeBlockBase, {