@fragments-sdk/ui 0.13.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 (656) 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 +7 -3
  11. package/dist/components/Accordion/index.cjs.map +1 -1
  12. package/dist/components/Accordion/index.d.ts +24 -11
  13. package/dist/components/Accordion/index.d.ts.map +1 -1
  14. package/dist/components/Accordion/index.js +7 -3
  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/Combobox/Combobox.module.scss.cjs +15 -15
  110. package/dist/components/Combobox/Combobox.module.scss.js +15 -15
  111. package/dist/components/Combobox/index.cjs +68 -18
  112. package/dist/components/Combobox/index.cjs.map +1 -1
  113. package/dist/components/Combobox/index.d.ts +32 -11
  114. package/dist/components/Combobox/index.d.ts.map +1 -1
  115. package/dist/components/Combobox/index.js +68 -18
  116. package/dist/components/Combobox/index.js.map +1 -1
  117. package/dist/components/Command/Command.module.scss.cjs +11 -11
  118. package/dist/components/Command/Command.module.scss.js +11 -11
  119. package/dist/components/Command/index.cjs +4 -4
  120. package/dist/components/Command/index.cjs.map +1 -1
  121. package/dist/components/Command/index.d.ts +1 -1
  122. package/dist/components/Command/index.d.ts.map +1 -1
  123. package/dist/components/Command/index.js +4 -4
  124. package/dist/components/Command/index.js.map +1 -1
  125. package/dist/components/ConversationList/ConversationList.module.scss.cjs +10 -10
  126. package/dist/components/ConversationList/ConversationList.module.scss.js +10 -10
  127. package/dist/components/ConversationList/index.cjs +6 -3
  128. package/dist/components/ConversationList/index.cjs.map +1 -1
  129. package/dist/components/ConversationList/index.d.ts +1 -1
  130. package/dist/components/ConversationList/index.d.ts.map +1 -1
  131. package/dist/components/ConversationList/index.js +6 -3
  132. package/dist/components/ConversationList/index.js.map +1 -1
  133. package/dist/components/DataTable/DataTable.module.scss.cjs +26 -26
  134. package/dist/components/DataTable/DataTable.module.scss.js +26 -26
  135. package/dist/components/DataTable/index.cjs +13 -4
  136. package/dist/components/DataTable/index.cjs.map +1 -1
  137. package/dist/components/DataTable/index.d.ts +7 -2
  138. package/dist/components/DataTable/index.d.ts.map +1 -1
  139. package/dist/components/DataTable/index.js +13 -4
  140. package/dist/components/DataTable/index.js.map +1 -1
  141. package/dist/components/DatePicker/DatePicker.module.scss.cjs +26 -26
  142. package/dist/components/DatePicker/DatePicker.module.scss.js +26 -26
  143. package/dist/components/DatePicker/index.d.ts +2 -2
  144. package/dist/components/DatePicker/index.d.ts.map +1 -1
  145. package/dist/components/Dialog/Dialog.module.scss.cjs +14 -14
  146. package/dist/components/Dialog/Dialog.module.scss.js +14 -14
  147. package/dist/components/Dialog/index.cjs +2 -1
  148. package/dist/components/Dialog/index.cjs.map +1 -1
  149. package/dist/components/Dialog/index.d.ts +20 -7
  150. package/dist/components/Dialog/index.d.ts.map +1 -1
  151. package/dist/components/Dialog/index.js +2 -1
  152. package/dist/components/Dialog/index.js.map +1 -1
  153. package/dist/components/Drawer/Drawer.module.scss.cjs +26 -26
  154. package/dist/components/Drawer/Drawer.module.scss.js +26 -26
  155. package/dist/components/Drawer/index.cjs +30 -3
  156. package/dist/components/Drawer/index.cjs.map +1 -1
  157. package/dist/components/Drawer/index.d.ts +3 -1
  158. package/dist/components/Drawer/index.d.ts.map +1 -1
  159. package/dist/components/Drawer/index.js +13 -3
  160. package/dist/components/Drawer/index.js.map +1 -1
  161. package/dist/components/Editor/Editor.module.scss.cjs +17 -17
  162. package/dist/components/Editor/Editor.module.scss.js +17 -17
  163. package/dist/components/Editor/index.cjs +32 -7
  164. package/dist/components/Editor/index.cjs.map +1 -1
  165. package/dist/components/Editor/index.d.ts +16 -3
  166. package/dist/components/Editor/index.d.ts.map +1 -1
  167. package/dist/components/Editor/index.js +32 -7
  168. package/dist/components/Editor/index.js.map +1 -1
  169. package/dist/components/EmptyState/EmptyState.module.scss.cjs +8 -8
  170. package/dist/components/EmptyState/EmptyState.module.scss.js +8 -8
  171. package/dist/components/EmptyState/index.cjs +12 -8
  172. package/dist/components/EmptyState/index.cjs.map +1 -1
  173. package/dist/components/EmptyState/index.d.ts +8 -12
  174. package/dist/components/EmptyState/index.d.ts.map +1 -1
  175. package/dist/components/EmptyState/index.js +12 -8
  176. package/dist/components/EmptyState/index.js.map +1 -1
  177. package/dist/components/Fieldset/index.cjs +2 -2
  178. package/dist/components/Fieldset/index.cjs.map +1 -1
  179. package/dist/components/Fieldset/index.d.ts +2 -3
  180. package/dist/components/Fieldset/index.d.ts.map +1 -1
  181. package/dist/components/Fieldset/index.js +2 -2
  182. package/dist/components/Fieldset/index.js.map +1 -1
  183. package/dist/components/Form/index.cjs +13 -13
  184. package/dist/components/Form/index.cjs.map +1 -1
  185. package/dist/components/Form/index.d.ts +5 -2
  186. package/dist/components/Form/index.d.ts.map +1 -1
  187. package/dist/components/Form/index.js +13 -13
  188. package/dist/components/Form/index.js.map +1 -1
  189. package/dist/components/Grid/Grid.module.scss.cjs +57 -57
  190. package/dist/components/Grid/Grid.module.scss.js +57 -57
  191. package/dist/components/Grid/index.cjs +7 -4
  192. package/dist/components/Grid/index.cjs.map +1 -1
  193. package/dist/components/Grid/index.d.ts +5 -3
  194. package/dist/components/Grid/index.d.ts.map +1 -1
  195. package/dist/components/Grid/index.js +7 -4
  196. package/dist/components/Grid/index.js.map +1 -1
  197. package/dist/components/Header/Header.module.scss.cjs +21 -21
  198. package/dist/components/Header/Header.module.scss.js +21 -21
  199. package/dist/components/Header/index.cjs +61 -23
  200. package/dist/components/Header/index.cjs.map +1 -1
  201. package/dist/components/Header/index.d.ts +27 -34
  202. package/dist/components/Header/index.d.ts.map +1 -1
  203. package/dist/components/Header/index.js +61 -23
  204. package/dist/components/Header/index.js.map +1 -1
  205. package/dist/components/Icon/index.cjs +11 -1
  206. package/dist/components/Icon/index.cjs.map +1 -1
  207. package/dist/components/Icon/index.d.ts +28 -9
  208. package/dist/components/Icon/index.d.ts.map +1 -1
  209. package/dist/components/Icon/index.js +11 -1
  210. package/dist/components/Icon/index.js.map +1 -1
  211. package/dist/components/Image/index.cjs +15 -4
  212. package/dist/components/Image/index.cjs.map +1 -1
  213. package/dist/components/Image/index.d.ts +7 -1
  214. package/dist/components/Image/index.d.ts.map +1 -1
  215. package/dist/components/Image/index.js +15 -4
  216. package/dist/components/Image/index.js.map +1 -1
  217. package/dist/components/Input/Input.module.scss.cjs +13 -13
  218. package/dist/components/Input/Input.module.scss.js +13 -13
  219. package/dist/components/Input/index.cjs +79 -31
  220. package/dist/components/Input/index.cjs.map +1 -1
  221. package/dist/components/Input/index.d.ts +17 -3
  222. package/dist/components/Input/index.d.ts.map +1 -1
  223. package/dist/components/Input/index.js +79 -31
  224. package/dist/components/Input/index.js.map +1 -1
  225. package/dist/components/Link/index.cjs +17 -0
  226. package/dist/components/Link/index.cjs.map +1 -1
  227. package/dist/components/Link/index.d.ts.map +1 -1
  228. package/dist/components/Link/index.js +17 -0
  229. package/dist/components/Link/index.js.map +1 -1
  230. package/dist/components/Listbox/Listbox.module.scss.cjs +8 -8
  231. package/dist/components/Listbox/Listbox.module.scss.js +8 -8
  232. package/dist/components/Listbox/index.cjs +10 -6
  233. package/dist/components/Listbox/index.cjs.map +1 -1
  234. package/dist/components/Listbox/index.d.ts +2 -2
  235. package/dist/components/Listbox/index.d.ts.map +1 -1
  236. package/dist/components/Listbox/index.js +10 -6
  237. package/dist/components/Listbox/index.js.map +1 -1
  238. package/dist/components/Markdown/Markdown.module.scss.cjs +1 -1
  239. package/dist/components/Markdown/Markdown.module.scss.js +1 -1
  240. package/dist/components/Markdown/index.d.ts +4 -2
  241. package/dist/components/Markdown/index.d.ts.map +1 -1
  242. package/dist/components/Menu/Menu.module.scss.cjs +13 -13
  243. package/dist/components/Menu/Menu.module.scss.js +13 -13
  244. package/dist/components/Menu/index.cjs +12 -1
  245. package/dist/components/Menu/index.cjs.map +1 -1
  246. package/dist/components/Menu/index.d.ts +9 -4
  247. package/dist/components/Menu/index.d.ts.map +1 -1
  248. package/dist/components/Menu/index.js +12 -1
  249. package/dist/components/Menu/index.js.map +1 -1
  250. package/dist/components/Message/Message.module.scss.cjs +18 -18
  251. package/dist/components/Message/Message.module.scss.js +18 -18
  252. package/dist/components/NavigationMenu/NavigationMenu.module.scss.cjs +28 -28
  253. package/dist/components/NavigationMenu/NavigationMenu.module.scss.js +28 -28
  254. package/dist/components/NavigationMenu/NavigationMenuContext.cjs.map +1 -1
  255. package/dist/components/NavigationMenu/NavigationMenuContext.d.ts +8 -0
  256. package/dist/components/NavigationMenu/NavigationMenuContext.d.ts.map +1 -1
  257. package/dist/components/NavigationMenu/NavigationMenuContext.js.map +1 -1
  258. package/dist/components/NavigationMenu/index.cjs +49 -10
  259. package/dist/components/NavigationMenu/index.cjs.map +1 -1
  260. package/dist/components/NavigationMenu/index.d.ts +5 -1
  261. package/dist/components/NavigationMenu/index.d.ts.map +1 -1
  262. package/dist/components/NavigationMenu/index.js +49 -10
  263. package/dist/components/NavigationMenu/index.js.map +1 -1
  264. package/dist/components/Pagination/index.cjs +37 -9
  265. package/dist/components/Pagination/index.cjs.map +1 -1
  266. package/dist/components/Pagination/index.d.ts +2 -3
  267. package/dist/components/Pagination/index.d.ts.map +1 -1
  268. package/dist/components/Pagination/index.js +37 -9
  269. package/dist/components/Pagination/index.js.map +1 -1
  270. package/dist/components/Popover/Popover.module.scss.cjs +10 -10
  271. package/dist/components/Popover/Popover.module.scss.js +10 -10
  272. package/dist/components/Popover/index.cjs +43 -2
  273. package/dist/components/Popover/index.cjs.map +1 -1
  274. package/dist/components/Popover/index.d.ts +16 -6
  275. package/dist/components/Popover/index.d.ts.map +1 -1
  276. package/dist/components/Popover/index.js +26 -2
  277. package/dist/components/Popover/index.js.map +1 -1
  278. package/dist/components/Progress/index.cjs +3 -1
  279. package/dist/components/Progress/index.cjs.map +1 -1
  280. package/dist/components/Progress/index.d.ts.map +1 -1
  281. package/dist/components/Progress/index.js +3 -1
  282. package/dist/components/Progress/index.js.map +1 -1
  283. package/dist/components/Prompt/Prompt.module.scss.cjs +14 -14
  284. package/dist/components/Prompt/Prompt.module.scss.js +14 -14
  285. package/dist/components/Prompt/index.cjs +14 -2
  286. package/dist/components/Prompt/index.cjs.map +1 -1
  287. package/dist/components/Prompt/index.d.ts +8 -5
  288. package/dist/components/Prompt/index.d.ts.map +1 -1
  289. package/dist/components/Prompt/index.js +14 -2
  290. package/dist/components/Prompt/index.js.map +1 -1
  291. package/dist/components/RadioGroup/index.cjs +14 -6
  292. package/dist/components/RadioGroup/index.cjs.map +1 -1
  293. package/dist/components/RadioGroup/index.d.ts +12 -2
  294. package/dist/components/RadioGroup/index.d.ts.map +1 -1
  295. package/dist/components/RadioGroup/index.js +14 -6
  296. package/dist/components/RadioGroup/index.js.map +1 -1
  297. package/dist/components/Select/Select.module.scss.cjs +10 -10
  298. package/dist/components/Select/Select.module.scss.js +10 -10
  299. package/dist/components/Select/index.cjs +37 -24
  300. package/dist/components/Select/index.cjs.map +1 -1
  301. package/dist/components/Select/index.d.ts +6 -2
  302. package/dist/components/Select/index.d.ts.map +1 -1
  303. package/dist/components/Select/index.js +37 -24
  304. package/dist/components/Select/index.js.map +1 -1
  305. package/dist/components/Sidebar/Sidebar.module.scss.cjs +42 -42
  306. package/dist/components/Sidebar/Sidebar.module.scss.js +42 -42
  307. package/dist/components/Sidebar/index.cjs +2 -2
  308. package/dist/components/Sidebar/index.cjs.map +1 -1
  309. package/dist/components/Sidebar/index.d.ts +3 -3
  310. package/dist/components/Sidebar/index.d.ts.map +1 -1
  311. package/dist/components/Sidebar/index.js +2 -2
  312. package/dist/components/Sidebar/index.js.map +1 -1
  313. package/dist/components/Skeleton/index.cjs +6 -3
  314. package/dist/components/Skeleton/index.cjs.map +1 -1
  315. package/dist/components/Skeleton/index.d.ts +3 -7
  316. package/dist/components/Skeleton/index.d.ts.map +1 -1
  317. package/dist/components/Skeleton/index.js +6 -3
  318. package/dist/components/Skeleton/index.js.map +1 -1
  319. package/dist/components/Slider/Slider.module.scss.cjs +13 -10
  320. package/dist/components/Slider/Slider.module.scss.cjs.map +1 -1
  321. package/dist/components/Slider/Slider.module.scss.js +13 -10
  322. package/dist/components/Slider/Slider.module.scss.js.map +1 -1
  323. package/dist/components/Slider/index.cjs +33 -1
  324. package/dist/components/Slider/index.cjs.map +1 -1
  325. package/dist/components/Slider/index.d.ts +2 -0
  326. package/dist/components/Slider/index.d.ts.map +1 -1
  327. package/dist/components/Slider/index.js +33 -1
  328. package/dist/components/Slider/index.js.map +1 -1
  329. package/dist/components/Stack/index.cjs +12 -2
  330. package/dist/components/Stack/index.cjs.map +1 -1
  331. package/dist/components/Stack/index.d.ts +3 -2
  332. package/dist/components/Stack/index.d.ts.map +1 -1
  333. package/dist/components/Stack/index.js +12 -2
  334. package/dist/components/Stack/index.js.map +1 -1
  335. package/dist/components/Table/Table.module.scss.cjs +16 -16
  336. package/dist/components/Table/Table.module.scss.js +16 -16
  337. package/dist/components/Table/index.d.ts +10 -4
  338. package/dist/components/Table/index.d.ts.map +1 -1
  339. package/dist/components/TableOfContents/index.cjs +8 -5
  340. package/dist/components/TableOfContents/index.cjs.map +1 -1
  341. package/dist/components/TableOfContents/index.d.ts +2 -2
  342. package/dist/components/TableOfContents/index.d.ts.map +1 -1
  343. package/dist/components/TableOfContents/index.js +8 -5
  344. package/dist/components/TableOfContents/index.js.map +1 -1
  345. package/dist/components/Tabs/Tabs.module.scss.cjs +9 -9
  346. package/dist/components/Tabs/Tabs.module.scss.js +9 -9
  347. package/dist/components/Tabs/index.cjs +9 -6
  348. package/dist/components/Tabs/index.cjs.map +1 -1
  349. package/dist/components/Tabs/index.d.ts +4 -1
  350. package/dist/components/Tabs/index.d.ts.map +1 -1
  351. package/dist/components/Tabs/index.js +9 -6
  352. package/dist/components/Tabs/index.js.map +1 -1
  353. package/dist/components/Textarea/index.cjs +61 -43
  354. package/dist/components/Textarea/index.cjs.map +1 -1
  355. package/dist/components/Textarea/index.d.ts +9 -1
  356. package/dist/components/Textarea/index.d.ts.map +1 -1
  357. package/dist/components/Textarea/index.js +61 -43
  358. package/dist/components/Textarea/index.js.map +1 -1
  359. package/dist/components/Theme/index.cjs +3 -1
  360. package/dist/components/Theme/index.cjs.map +1 -1
  361. package/dist/components/Theme/index.d.ts +2 -4
  362. package/dist/components/Theme/index.d.ts.map +1 -1
  363. package/dist/components/Theme/index.js +3 -1
  364. package/dist/components/Theme/index.js.map +1 -1
  365. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.cjs +22 -22
  366. package/dist/components/ThinkingIndicator/ThinkingIndicator.module.scss.js +22 -22
  367. package/dist/components/Toast/Toast.module.scss.cjs +20 -20
  368. package/dist/components/Toast/Toast.module.scss.js +20 -20
  369. package/dist/components/Toast/index.cjs +15 -14
  370. package/dist/components/Toast/index.cjs.map +1 -1
  371. package/dist/components/Toast/index.d.ts +9 -5
  372. package/dist/components/Toast/index.d.ts.map +1 -1
  373. package/dist/components/Toast/index.js +15 -14
  374. package/dist/components/Toast/index.js.map +1 -1
  375. package/dist/components/Toggle/Toggle.module.scss.cjs +11 -11
  376. package/dist/components/Toggle/Toggle.module.scss.js +11 -11
  377. package/dist/components/Toggle/index.cjs +1 -1
  378. package/dist/components/Toggle/index.cjs.map +1 -1
  379. package/dist/components/Toggle/index.js +1 -1
  380. package/dist/components/Toggle/index.js.map +1 -1
  381. package/dist/components/ToggleGroup/ToggleGroup.module.scss.cjs +17 -17
  382. package/dist/components/ToggleGroup/ToggleGroup.module.scss.js +17 -17
  383. package/dist/components/ToggleGroup/index.cjs +27 -8
  384. package/dist/components/ToggleGroup/index.cjs.map +1 -1
  385. package/dist/components/ToggleGroup/index.d.ts +8 -3
  386. package/dist/components/ToggleGroup/index.d.ts.map +1 -1
  387. package/dist/components/ToggleGroup/index.js +27 -8
  388. package/dist/components/ToggleGroup/index.js.map +1 -1
  389. package/dist/components/Tooltip/Tooltip.module.scss.cjs +3 -3
  390. package/dist/components/Tooltip/Tooltip.module.scss.js +3 -3
  391. package/dist/components/Tooltip/index.cjs +20 -4
  392. package/dist/components/Tooltip/index.cjs.map +1 -1
  393. package/dist/components/Tooltip/index.d.ts +3 -1
  394. package/dist/components/Tooltip/index.d.ts.map +1 -1
  395. package/dist/components/Tooltip/index.js +20 -4
  396. package/dist/components/Tooltip/index.js.map +1 -1
  397. package/dist/components/VisuallyHidden/index.cjs +10 -2
  398. package/dist/components/VisuallyHidden/index.cjs.map +1 -1
  399. package/dist/components/VisuallyHidden/index.d.ts +1 -1
  400. package/dist/components/VisuallyHidden/index.d.ts.map +1 -1
  401. package/dist/components/VisuallyHidden/index.js +10 -2
  402. package/dist/components/VisuallyHidden/index.js.map +1 -1
  403. package/dist/datepicker.cjs +8 -1
  404. package/dist/datepicker.cjs.map +1 -1
  405. package/dist/datepicker.js +8 -1
  406. package/dist/datepicker.js.map +1 -1
  407. package/dist/index.cjs.map +1 -1
  408. package/dist/index.d.ts +2 -1
  409. package/dist/index.d.ts.map +1 -1
  410. package/dist/index.js.map +1 -1
  411. package/dist/markdown.cjs +5 -5
  412. package/dist/markdown.cjs.map +1 -1
  413. package/dist/markdown.js +5 -5
  414. package/dist/markdown.js.map +1 -1
  415. package/dist/table.cjs +19 -3
  416. package/dist/table.cjs.map +1 -1
  417. package/dist/table.js +19 -3
  418. package/dist/table.js.map +1 -1
  419. package/fragments.json +1 -1
  420. package/package.json +2 -2
  421. package/src/blocks/AccountSettings.block.ts +1 -1
  422. package/src/blocks/ActivityFeed.block.ts +1 -1
  423. package/src/blocks/ActivityFeedSkeleton.block.ts +1 -1
  424. package/src/blocks/BlogEditor.block.ts +1 -1
  425. package/src/blocks/ChatInterface.block.ts +1 -1
  426. package/src/blocks/ChatMessages.block.ts +1 -1
  427. package/src/blocks/CheckoutForm.block.ts +1 -1
  428. package/src/blocks/CommandPalette.block.ts +1 -1
  429. package/src/blocks/ContactForm.block.ts +1 -1
  430. package/src/blocks/DashboardLayout.block.ts +1 -1
  431. package/src/blocks/DashboardPage.block.ts +1 -1
  432. package/src/blocks/DashboardSkeleton.block.ts +1 -1
  433. package/src/blocks/DataTable.block.ts +1 -1
  434. package/src/blocks/EmptyState.block.ts +1 -1
  435. package/src/blocks/FAQSection.block.ts +1 -1
  436. package/src/blocks/FeatureGrid.block.ts +1 -1
  437. package/src/blocks/HeroSection.block.ts +1 -1
  438. package/src/blocks/LoginForm.block.ts +1 -1
  439. package/src/blocks/NavigationHeader.block.ts +1 -1
  440. package/src/blocks/PaginatedTable.block.ts +1 -1
  441. package/src/blocks/PricingComparison.block.ts +1 -1
  442. package/src/blocks/ProductCard.block.ts +1 -1
  443. package/src/blocks/RegistrationForm.block.ts +1 -1
  444. package/src/blocks/SettingsDrawer.block.ts +1 -1
  445. package/src/blocks/SettingsPanel.block.ts +1 -1
  446. package/src/blocks/ShoppingCart.block.ts +1 -1
  447. package/src/blocks/StatsCard.block.ts +1 -1
  448. package/src/blocks/StatsCardSkeleton.block.ts +1 -1
  449. package/src/blocks/TableSkeleton.block.ts +1 -1
  450. package/src/blocks/ThinkingStates.block.ts +1 -1
  451. package/src/components/Accordion/Accordion.fragment.tsx +7 -7
  452. package/src/components/Accordion/Accordion.module.scss +2 -2
  453. package/src/components/Accordion/Accordion.test.tsx +8 -5
  454. package/src/components/Accordion/index.tsx +33 -13
  455. package/src/components/Alert/Alert.fragment.tsx +5 -1
  456. package/src/components/Alert/Alert.module.scss +1 -1
  457. package/src/components/Alert/Alert.test.tsx +25 -0
  458. package/src/components/Alert/index.tsx +49 -30
  459. package/src/components/AppShell/AppShell.fragment.tsx +1 -1
  460. package/src/components/AppShell/AppShell.module.scss +5 -5
  461. package/src/components/AppShell/AppShell.test.tsx +12 -0
  462. package/src/components/AppShell/index.tsx +2 -0
  463. package/src/components/Avatar/Avatar.fragment.tsx +7 -1
  464. package/src/components/Avatar/Avatar.test.tsx +24 -2
  465. package/src/components/Avatar/index.tsx +13 -1
  466. package/src/components/Badge/Badge.fragment.tsx +16 -1
  467. package/src/components/Badge/Badge.test.tsx +8 -1
  468. package/src/components/Badge/index.tsx +7 -2
  469. package/src/components/BentoGrid/BentoGrid.fragment.tsx +3 -1
  470. package/src/components/BentoGrid/BentoGrid.module.scss +52 -16
  471. package/src/components/BentoGrid/BentoGrid.test.tsx +20 -0
  472. package/src/components/BentoGrid/index.tsx +9 -12
  473. package/src/components/Box/Box.fragment.tsx +3 -1
  474. package/src/components/Box/Box.test.tsx +14 -0
  475. package/src/components/Box/index.tsx +8 -2
  476. package/src/components/Breadcrumbs/Breadcrumbs.fragment.tsx +19 -1
  477. package/src/components/Breadcrumbs/Breadcrumbs.test.tsx +13 -0
  478. package/src/components/Breadcrumbs/index.tsx +5 -1
  479. package/src/components/Button/Button.fragment.tsx +28 -6
  480. package/src/components/Button/Button.module.scss +3 -3
  481. package/src/components/Button/Button.test.tsx +11 -0
  482. package/src/components/Button/index.tsx +16 -6
  483. package/src/components/ButtonGroup/ButtonGroup.fragment.tsx +4 -2
  484. package/src/components/ButtonGroup/ButtonGroup.test.tsx +10 -0
  485. package/src/components/ButtonGroup/index.tsx +3 -3
  486. package/src/components/Card/Card.fragment.tsx +24 -9
  487. package/src/components/Card/Card.module.scss +8 -8
  488. package/src/components/Card/Card.test.tsx +4 -5
  489. package/src/components/Card/index.tsx +8 -38
  490. package/src/components/Chart/Chart.fragment.tsx +5 -3
  491. package/src/components/Chart/Chart.module.scss +1 -1
  492. package/src/components/Chart/index.tsx +12 -10
  493. package/src/components/Checkbox/Checkbox.fragment.tsx +27 -1
  494. package/src/components/Checkbox/Checkbox.module.scss +3 -3
  495. package/src/components/Checkbox/index.tsx +16 -3
  496. package/src/components/Chip/Chip.fragment.tsx +20 -3
  497. package/src/components/Chip/Chip.test.tsx +28 -0
  498. package/src/components/Chip/index.tsx +14 -6
  499. package/src/components/CodeBlock/CodeBlock.fragment.tsx +3 -1
  500. package/src/components/CodeBlock/CodeBlock.module.scss +9 -9
  501. package/src/components/CodeBlock/CodeBlock.test.tsx +21 -0
  502. package/src/components/CodeBlock/index.tsx +23 -9
  503. package/src/components/Collapsible/Collapsible.fragment.tsx +1 -1
  504. package/src/components/Collapsible/Collapsible.module.scss +1 -1
  505. package/src/components/ColorPicker/ColorPicker.fragment.tsx +1 -1
  506. package/src/components/Combobox/Combobox.fragment.tsx +63 -9
  507. package/src/components/Combobox/Combobox.module.scss +4 -7
  508. package/src/components/Combobox/Combobox.test.tsx +24 -3
  509. package/src/components/Combobox/index.tsx +117 -34
  510. package/src/components/Command/Command.fragment.tsx +3 -3
  511. package/src/components/Command/Command.module.scss +5 -5
  512. package/src/components/Command/Command.test.tsx +17 -0
  513. package/src/components/Command/index.tsx +8 -5
  514. package/src/components/ConversationList/ConversationList.fragment.tsx +4 -3
  515. package/src/components/ConversationList/ConversationList.module.scss +5 -5
  516. package/src/components/ConversationList/ConversationList.test.tsx +21 -0
  517. package/src/components/ConversationList/index.tsx +8 -4
  518. package/src/components/DataTable/DataTable.fragment.tsx +12 -2
  519. package/src/components/DataTable/DataTable.module.scss +3 -3
  520. package/src/components/DataTable/DataTable.test.tsx +23 -2
  521. package/src/components/DataTable/index.tsx +23 -5
  522. package/src/components/DatePicker/DatePicker.fragment.tsx +3 -1
  523. package/src/components/DatePicker/DatePicker.module.scss +1 -1
  524. package/src/components/DatePicker/DatePicker.test.tsx +17 -0
  525. package/src/components/DatePicker/index.tsx +9 -2
  526. package/src/components/Dialog/Dialog.fragment.tsx +28 -1
  527. package/src/components/Dialog/Dialog.module.scss +6 -6
  528. package/src/components/Dialog/index.tsx +25 -7
  529. package/src/components/Drawer/Drawer.fragment.tsx +4 -1
  530. package/src/components/Drawer/Drawer.module.scss +3 -3
  531. package/src/components/Drawer/Drawer.test.tsx +8 -0
  532. package/src/components/Drawer/index.tsx +15 -3
  533. package/src/components/Editor/Editor.fragment.tsx +10 -3
  534. package/src/components/Editor/Editor.module.scss +4 -4
  535. package/src/components/Editor/Editor.test.tsx +68 -1
  536. package/src/components/Editor/index.tsx +60 -9
  537. package/src/components/EmptyState/EmptyState.fragment.tsx +3 -1
  538. package/src/components/EmptyState/EmptyState.module.scss +3 -3
  539. package/src/components/EmptyState/EmptyState.test.tsx +18 -0
  540. package/src/components/EmptyState/index.tsx +16 -16
  541. package/src/components/Field/Field.fragment.tsx +1 -1
  542. package/src/components/Fieldset/Fieldset.fragment.tsx +3 -1
  543. package/src/components/Fieldset/Fieldset.test.tsx +14 -0
  544. package/src/components/Fieldset/index.tsx +3 -4
  545. package/src/components/Form/Form.fragment.tsx +12 -7
  546. package/src/components/Form/index.tsx +13 -17
  547. package/src/components/Grid/Grid.fragment.tsx +4 -3
  548. package/src/components/Grid/Grid.module.scss +3 -3
  549. package/src/components/Grid/index.tsx +11 -6
  550. package/src/components/Header/Header.fragment.tsx +31 -1
  551. package/src/components/Header/Header.module.scss +6 -6
  552. package/src/components/Header/Header.test.tsx +95 -1
  553. package/src/components/Header/index.tsx +95 -46
  554. package/src/components/Icon/Icon.fragment.tsx +21 -8
  555. package/src/components/Icon/Icon.test.tsx +27 -3
  556. package/src/components/Icon/index.tsx +39 -15
  557. package/src/components/Image/Image.fragment.tsx +15 -1
  558. package/src/components/Image/Image.test.tsx +32 -1
  559. package/src/components/Image/index.tsx +24 -4
  560. package/src/components/Input/Input.fragment.tsx +49 -1
  561. package/src/components/Input/Input.module.scss +4 -2
  562. package/src/components/Input/Input.test.tsx +3 -3
  563. package/src/components/Input/index.tsx +103 -37
  564. package/src/components/Link/Link.fragment.tsx +7 -6
  565. package/src/components/Link/Link.test.tsx +17 -1
  566. package/src/components/Link/index.tsx +22 -0
  567. package/src/components/List/List.fragment.tsx +1 -1
  568. package/src/components/Listbox/Listbox.fragment.tsx +3 -3
  569. package/src/components/Listbox/Listbox.module.scss +4 -4
  570. package/src/components/Listbox/Listbox.test.tsx +14 -0
  571. package/src/components/Listbox/index.tsx +12 -2
  572. package/src/components/Loading/Loading.fragment.tsx +1 -1
  573. package/src/components/Markdown/Markdown.fragment.tsx +5 -3
  574. package/src/components/Markdown/Markdown.module.scss +5 -5
  575. package/src/components/Markdown/Markdown.test.tsx +6 -0
  576. package/src/components/Markdown/index.tsx +12 -9
  577. package/src/components/Menu/Menu.fragment.tsx +19 -1
  578. package/src/components/Menu/Menu.module.scss +11 -11
  579. package/src/components/Menu/index.tsx +19 -7
  580. package/src/components/Message/Message.fragment.tsx +1 -1
  581. package/src/components/Message/Message.module.scss +3 -3
  582. package/src/components/NavigationMenu/NavigationMenu.fragment.tsx +9 -1
  583. package/src/components/NavigationMenu/NavigationMenu.module.scss +7 -7
  584. package/src/components/NavigationMenu/NavigationMenu.test.tsx +48 -0
  585. package/src/components/NavigationMenu/NavigationMenuContext.ts +14 -0
  586. package/src/components/NavigationMenu/index.tsx +70 -7
  587. package/src/components/Pagination/Pagination.fragment.tsx +4 -1
  588. package/src/components/Pagination/Pagination.test.tsx +39 -0
  589. package/src/components/Pagination/index.tsx +36 -10
  590. package/src/components/Popover/Popover.fragment.tsx +18 -1
  591. package/src/components/Popover/Popover.module.scss +13 -13
  592. package/src/components/Popover/index.tsx +33 -8
  593. package/src/components/Progress/Progress.fragment.tsx +3 -1
  594. package/src/components/Progress/Progress.test.tsx +8 -0
  595. package/src/components/Progress/index.tsx +9 -1
  596. package/src/components/Prompt/Prompt.fragment.tsx +4 -1
  597. package/src/components/Prompt/Prompt.module.scss +3 -3
  598. package/src/components/Prompt/Prompt.test.tsx +19 -0
  599. package/src/components/Prompt/index.tsx +24 -6
  600. package/src/components/RadioGroup/RadioGroup.fragment.tsx +31 -1
  601. package/src/components/RadioGroup/index.tsx +22 -3
  602. package/src/components/ScrollArea/ScrollArea.fragment.tsx +1 -1
  603. package/src/components/Select/Select.fragment.tsx +30 -3
  604. package/src/components/Select/Select.module.scss +3 -3
  605. package/src/components/Select/index.tsx +46 -33
  606. package/src/components/Separator/Separator.fragment.tsx +1 -1
  607. package/src/components/Sidebar/Sidebar.fragment.tsx +3 -1
  608. package/src/components/Sidebar/Sidebar.module.scss +20 -20
  609. package/src/components/Sidebar/Sidebar.test.tsx +25 -0
  610. package/src/components/Sidebar/index.tsx +7 -7
  611. package/src/components/Skeleton/Skeleton.fragment.tsx +3 -1
  612. package/src/components/Skeleton/Skeleton.test.tsx +12 -0
  613. package/src/components/Skeleton/index.tsx +6 -7
  614. package/src/components/Slider/Slider.fragment.tsx +21 -1
  615. package/src/components/Slider/Slider.module.scss +31 -0
  616. package/src/components/Slider/Slider.test.tsx +16 -0
  617. package/src/components/Slider/index.tsx +40 -1
  618. package/src/components/Stack/Stack.fragment.tsx +3 -1
  619. package/src/components/Stack/index.tsx +13 -6
  620. package/src/components/Table/Table.fragment.tsx +43 -2
  621. package/src/components/Table/Table.module.scss +2 -2
  622. package/src/components/Table/index.tsx +23 -5
  623. package/src/components/TableOfContents/TableOfContents.fragment.tsx +4 -2
  624. package/src/components/TableOfContents/TableOfContents.test.tsx +34 -9
  625. package/src/components/TableOfContents/index.tsx +9 -5
  626. package/src/components/Tabs/Tabs.fragment.tsx +33 -8
  627. package/src/components/Tabs/Tabs.module.scss +8 -8
  628. package/src/components/Tabs/index.tsx +22 -14
  629. package/src/components/Text/Text.fragment.tsx +1 -1
  630. package/src/components/Textarea/Textarea.fragment.tsx +27 -1
  631. package/src/components/Textarea/index.tsx +39 -14
  632. package/src/components/Theme/Theme.fragment.tsx +3 -1
  633. package/src/components/Theme/Theme.test.tsx +11 -0
  634. package/src/components/Theme/index.tsx +3 -3
  635. package/src/components/ThinkingIndicator/ThinkingIndicator.fragment.tsx +1 -1
  636. package/src/components/ThinkingIndicator/ThinkingIndicator.module.scss +1 -1
  637. package/src/components/Toast/Toast.fragment.tsx +6 -3
  638. package/src/components/Toast/Toast.module.scss +8 -6
  639. package/src/components/Toast/index.tsx +24 -20
  640. package/src/components/Toggle/Toggle.fragment.tsx +1 -1
  641. package/src/components/Toggle/Toggle.module.scss +61 -21
  642. package/src/components/Toggle/index.tsx +3 -3
  643. package/src/components/ToggleGroup/ToggleGroup.fragment.tsx +33 -8
  644. package/src/components/ToggleGroup/ToggleGroup.module.scss +3 -3
  645. package/src/components/ToggleGroup/index.tsx +29 -9
  646. package/src/components/Tooltip/Tooltip.fragment.tsx +16 -1
  647. package/src/components/Tooltip/Tooltip.module.scss +1 -1
  648. package/src/components/Tooltip/index.tsx +16 -1
  649. package/src/components/VisuallyHidden/VisuallyHidden.fragment.tsx +3 -1
  650. package/src/components/VisuallyHidden/VisuallyHidden.test.tsx +12 -0
  651. package/src/components/VisuallyHidden/index.tsx +7 -3
  652. package/src/index.ts +3 -2
  653. package/src/tokens/_computed.scss +1 -19
  654. package/src/tokens/_density.scss +0 -42
  655. package/src/tokens/_mixins.scss +4 -0
  656. package/src/tokens/_variables.scss +12 -114
@@ -1 +1 @@
1
- {"version":3,"file":"codeblock.js","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":["_a","CodeBlock"],"mappings":"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"}
1
+ {"version":3,"file":"codeblock.js","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":["_a","CodeBlock"],"mappings":"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"}
@@ -1,13 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const accordion = "_accordion_1p05d_1";
4
- const item = "_item_1p05d_12";
5
- const heading = "_heading_1p05d_17";
6
- const trigger = "_trigger_1p05d_23";
7
- const triggerContent = "_triggerContent_1p05d_67";
8
- const chevron = "_chevron_1p05d_71";
9
- const content = "_content_1p05d_80";
10
- const contentInner = "_contentInner_1p05d_93";
3
+ const accordion = "_accordion_c9ujp_1";
4
+ const item = "_item_c9ujp_12";
5
+ const heading = "_heading_c9ujp_17";
6
+ const trigger = "_trigger_c9ujp_23";
7
+ const triggerContent = "_triggerContent_c9ujp_67";
8
+ const chevron = "_chevron_c9ujp_71";
9
+ const content = "_content_c9ujp_80";
10
+ const contentInner = "_contentInner_c9ujp_93";
11
11
  const styles = {
12
12
  accordion,
13
13
  item,
@@ -1,11 +1,11 @@
1
- const accordion = "_accordion_1p05d_1";
2
- const item = "_item_1p05d_12";
3
- const heading = "_heading_1p05d_17";
4
- const trigger = "_trigger_1p05d_23";
5
- const triggerContent = "_triggerContent_1p05d_67";
6
- const chevron = "_chevron_1p05d_71";
7
- const content = "_content_1p05d_80";
8
- const contentInner = "_contentInner_1p05d_93";
1
+ const accordion = "_accordion_c9ujp_1";
2
+ const item = "_item_c9ujp_12";
3
+ const heading = "_heading_c9ujp_17";
4
+ const trigger = "_trigger_c9ujp_23";
5
+ const triggerContent = "_triggerContent_c9ujp_67";
6
+ const chevron = "_chevron_c9ujp_71";
7
+ const content = "_content_c9ujp_80";
8
+ const contentInner = "_contentInner_c9ujp_93";
9
9
  const styles = {
10
10
  accordion,
11
11
  item,
@@ -74,12 +74,14 @@ function AccordionRoot({
74
74
  if (controlledOpenItems === void 0) {
75
75
  setOpenItems(newItems);
76
76
  }
77
- if (onValueChange) {
78
- onValueChange(type === "single" ? newItems[0] : newItems);
77
+ if (type === "single") {
78
+ onValueChange == null ? void 0 : onValueChange(newItems[0]);
79
+ } else {
80
+ onValueChange == null ? void 0 : onValueChange(newItems);
79
81
  }
80
82
  }, [type, currentOpenItems, collapsible2, controlledOpenItems, onValueChange]);
81
83
  const classes = [Accordion_module.default.accordion, className].filter(Boolean).join(" ");
82
- return /* @__PURE__ */ jsxRuntime.jsx(AccordionContext.Provider, { value: { type, openItems: currentOpenItems, toggle, collapsible: collapsible2, headingLevel }, children: /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlProps, className: classes, "data-orientation": "vertical", role: "region", children }) });
84
+ return /* @__PURE__ */ jsxRuntime.jsx(AccordionContext.Provider, { value: { type, openItems: currentOpenItems, toggle, collapsible: collapsible2, headingLevel }, children: /* @__PURE__ */ jsxRuntime.jsx("div", { ...htmlProps, className: classes, "data-orientation": "vertical", children }) });
83
85
  }
84
86
  function AccordionItem({
85
87
  children,
@@ -104,6 +106,7 @@ function AccordionItem({
104
106
  function AccordionTrigger({
105
107
  children,
106
108
  className,
109
+ type: buttonType,
107
110
  onClick,
108
111
  ...htmlProps
109
112
  }) {
@@ -122,6 +125,7 @@ function AccordionTrigger({
122
125
  collapsible.Collapsible.Trigger,
123
126
  {
124
127
  ...htmlProps,
128
+ type: buttonType ?? "button",
125
129
  id: triggerId,
126
130
  className: classes,
127
131
  onClick: handleClick,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/components/Accordion/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Collapsible as BaseCollapsible } from '@base-ui/react/collapsible';\nimport styles from './Accordion.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport type AccordionValue = string | string[];\n\nexport interface AccordionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue'> {\n children: React.ReactNode;\n /** Allow multiple items to be open at once */\n type?: 'single' | 'multiple';\n /** Controlled value - string for single, string[] for multiple */\n value?: AccordionValue;\n /** Default value for uncontrolled usage */\n defaultValue?: AccordionValue;\n /** Callback when value changes */\n onValueChange?: (value: AccordionValue | undefined) => void;\n /** Whether items can be fully collapsed (only for type=\"single\") */\n collapsible?: boolean;\n /**\n * Heading level for accordion triggers (for semantic HTML).\n * The trigger will be wrapped in an <h{level}> element.\n * @default 3\n */\n headingLevel?: 2 | 3 | 4 | 5 | 6;\n}\n\nexport interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n /** Unique value for this item */\n value: string;\n /** Disable this item */\n disabled?: boolean;\n}\n\nexport interface AccordionTriggerProps extends React.HTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n}\n\nexport interface AccordionContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\n// ============================================\n// Context\n// ============================================\n\ninterface AccordionContextValue {\n type: 'single' | 'multiple';\n openItems: string[];\n toggle: (value: string) => void;\n collapsible: boolean;\n headingLevel: 2 | 3 | 4 | 5 | 6;\n}\n\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\ninterface AccordionItemContextValue {\n value: string;\n isOpen: boolean;\n disabled: boolean;\n triggerId: string;\n contentId: string;\n}\n\nconst AccordionItemContext = React.createContext<AccordionItemContextValue | null>(null);\n\nfunction useAccordionContext() {\n const context = React.useContext(AccordionContext);\n if (!context) {\n throw new Error('Accordion components must be used within an Accordion');\n }\n return context;\n}\n\nfunction useAccordionItemContext() {\n const context = React.useContext(AccordionItemContext);\n if (!context) {\n throw new Error('Accordion.Trigger/Content must be used within an Accordion.Item');\n }\n return context;\n}\n\n// ============================================\n// Components\n// ============================================\n\nfunction AccordionRoot({\n children,\n type = 'single',\n value,\n defaultValue,\n onValueChange,\n collapsible = false,\n headingLevel = 3,\n className,\n ...htmlProps\n}: AccordionProps) {\n // Normalize value to array for internal handling\n const normalizeValue = (val: AccordionValue | undefined): string[] => {\n if (val === undefined) return [];\n return Array.isArray(val) ? val : [val];\n };\n\n const [openItems, setOpenItems] = React.useState<string[]>(() =>\n normalizeValue(defaultValue)\n );\n\n // Use controlled value if provided\n const controlledOpenItems = value !== undefined ? normalizeValue(value) : undefined;\n const currentOpenItems = controlledOpenItems ?? openItems;\n\n const toggle = React.useCallback((itemValue: string) => {\n const newItems = (() => {\n if (type === 'single') {\n // For single, toggle or set new item\n if (currentOpenItems.includes(itemValue)) {\n return collapsible ? [] : currentOpenItems;\n }\n return [itemValue];\n } else {\n // For multiple, toggle item in array\n if (currentOpenItems.includes(itemValue)) {\n return currentOpenItems.filter(v => v !== itemValue);\n }\n return [...currentOpenItems, itemValue];\n }\n })();\n\n if (controlledOpenItems === undefined) {\n setOpenItems(newItems);\n }\n\n if (onValueChange) {\n onValueChange(type === 'single' ? newItems[0] : newItems);\n }\n }, [type, currentOpenItems, collapsible, controlledOpenItems, onValueChange]);\n\n const classes = [styles.accordion, className].filter(Boolean).join(' ');\n\n return (\n <AccordionContext.Provider value={{ type, openItems: currentOpenItems, toggle, collapsible, headingLevel }}>\n <div {...htmlProps} className={classes} data-orientation=\"vertical\" role=\"region\">\n {children}\n </div>\n </AccordionContext.Provider>\n );\n}\n\nfunction AccordionItem({\n children,\n value,\n disabled = false,\n className,\n ...htmlProps\n}: AccordionItemProps) {\n const { openItems } = useAccordionContext();\n const isOpen = openItems.includes(value);\n const baseId = React.useId();\n const triggerId = `accordion-trigger-${baseId}`;\n const contentId = `accordion-content-${baseId}`;\n\n const classes = [\n styles.item,\n isOpen && styles.itemOpen,\n disabled && styles.itemDisabled,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <AccordionItemContext.Provider value={{ value, isOpen, disabled, triggerId, contentId }}>\n <BaseCollapsible.Root open={isOpen} disabled={disabled}>\n <div {...htmlProps} className={classes} data-state={isOpen ? 'open' : 'closed'} data-disabled={disabled || undefined}>\n {children}\n </div>\n </BaseCollapsible.Root>\n </AccordionItemContext.Provider>\n );\n}\n\nfunction AccordionTrigger({\n children,\n className,\n onClick,\n ...htmlProps\n}: AccordionTriggerProps) {\n const { toggle, headingLevel } = useAccordionContext();\n const { value, isOpen, disabled, triggerId, contentId } = useAccordionItemContext();\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n if (!disabled) {\n toggle(value);\n }\n };\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n // Create the heading element dynamically based on headingLevel\n const HeadingTag = `h${headingLevel}` as 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\n return (\n <HeadingTag className={styles.heading}>\n <BaseCollapsible.Trigger\n {...htmlProps}\n id={triggerId}\n className={classes}\n onClick={handleClick}\n aria-expanded={isOpen}\n aria-controls={contentId}\n data-state={isOpen ? 'open' : 'closed'}\n disabled={disabled}\n >\n <span className={styles.triggerContent}>{children}</span>\n <svg\n className={styles.chevron}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </BaseCollapsible.Trigger>\n </HeadingTag>\n );\n}\n\nfunction AccordionContent({\n children,\n className,\n ...htmlProps\n}: AccordionContentProps) {\n const { isOpen, triggerId, contentId } = useAccordionItemContext();\n\n const classes = [styles.content, className].filter(Boolean).join(' ');\n\n return (\n <BaseCollapsible.Panel\n {...htmlProps}\n id={contentId}\n className={classes}\n data-state={isOpen ? 'open' : 'closed'}\n role=\"region\"\n aria-labelledby={triggerId}\n >\n <div className={styles.contentInner}>\n {children}\n </div>\n </BaseCollapsible.Panel>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Accordion = Object.assign(AccordionRoot, {\n Item: AccordionItem,\n Trigger: AccordionTrigger,\n Content: AccordionContent,\n});\n\nexport { AccordionRoot, AccordionItem, AccordionTrigger, AccordionContent };\n"],"names":["React","collapsible","styles","jsx","BaseCollapsible","jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/Accordion/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Collapsible as BaseCollapsible } from '@base-ui/react/collapsible';\nimport styles from './Accordion.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport type AccordionValue = string | string[];\n\ninterface AccordionSharedProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue'> {\n children: React.ReactNode;\n /** Whether items can be fully collapsed (only for type=\"single\") */\n collapsible?: boolean;\n /**\n * Heading level for accordion triggers (for semantic HTML).\n * The trigger will be wrapped in an <h{level}> element.\n * @default 3\n */\n headingLevel?: 2 | 3 | 4 | 5 | 6;\n}\n\nexport interface AccordionSingleProps extends AccordionSharedProps {\n /** Allow multiple items to be open at once */\n type?: 'single';\n /** Controlled value for single mode */\n value?: string;\n /** Default value for uncontrolled usage */\n defaultValue?: string;\n /** Callback when value changes */\n onValueChange?: (value: string | undefined) => void;\n}\n\nexport interface AccordionMultipleProps extends AccordionSharedProps {\n /** Allow multiple items to be open at once */\n type: 'multiple';\n /** Controlled values for multiple mode */\n value?: string[];\n /** Default values for uncontrolled usage */\n defaultValue?: string[];\n /** Callback when value changes */\n onValueChange?: (value: string[]) => void;\n}\n\nexport type AccordionProps = AccordionSingleProps | AccordionMultipleProps;\n\nexport interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n /** Unique value for this item */\n value: string;\n /** Disable this item */\n disabled?: boolean;\n}\n\nexport interface AccordionTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n}\n\nexport interface AccordionContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\n// ============================================\n// Context\n// ============================================\n\ninterface AccordionContextValue {\n type: 'single' | 'multiple';\n openItems: string[];\n toggle: (value: string) => void;\n collapsible: boolean;\n headingLevel: 2 | 3 | 4 | 5 | 6;\n}\n\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\ninterface AccordionItemContextValue {\n value: string;\n isOpen: boolean;\n disabled: boolean;\n triggerId: string;\n contentId: string;\n}\n\nconst AccordionItemContext = React.createContext<AccordionItemContextValue | null>(null);\n\nfunction useAccordionContext() {\n const context = React.useContext(AccordionContext);\n if (!context) {\n throw new Error('Accordion components must be used within an Accordion');\n }\n return context;\n}\n\nfunction useAccordionItemContext() {\n const context = React.useContext(AccordionItemContext);\n if (!context) {\n throw new Error('Accordion.Trigger/Content must be used within an Accordion.Item');\n }\n return context;\n}\n\n// ============================================\n// Components\n// ============================================\n\nfunction AccordionRoot({\n children,\n type = 'single',\n value,\n defaultValue,\n onValueChange,\n collapsible = false,\n headingLevel = 3,\n className,\n ...htmlProps\n}: AccordionProps) {\n // Normalize value to array for internal handling\n const normalizeValue = (val: AccordionValue | undefined): string[] => {\n if (val === undefined) return [];\n return Array.isArray(val) ? val : [val];\n };\n\n const [openItems, setOpenItems] = React.useState<string[]>(() =>\n normalizeValue(defaultValue)\n );\n\n // Use controlled value if provided\n const controlledOpenItems = value !== undefined ? normalizeValue(value) : undefined;\n const currentOpenItems = controlledOpenItems ?? openItems;\n\n const toggle = React.useCallback((itemValue: string) => {\n const newItems = (() => {\n if (type === 'single') {\n // For single, toggle or set new item\n if (currentOpenItems.includes(itemValue)) {\n return collapsible ? [] : currentOpenItems;\n }\n return [itemValue];\n } else {\n // For multiple, toggle item in array\n if (currentOpenItems.includes(itemValue)) {\n return currentOpenItems.filter(v => v !== itemValue);\n }\n return [...currentOpenItems, itemValue];\n }\n })();\n\n if (controlledOpenItems === undefined) {\n setOpenItems(newItems);\n }\n\n if (type === 'single') {\n (onValueChange as AccordionSingleProps['onValueChange'] | undefined)?.(newItems[0]);\n } else {\n (onValueChange as AccordionMultipleProps['onValueChange'] | undefined)?.(newItems);\n }\n }, [type, currentOpenItems, collapsible, controlledOpenItems, onValueChange]);\n\n const classes = [styles.accordion, className].filter(Boolean).join(' ');\n\n return (\n <AccordionContext.Provider value={{ type, openItems: currentOpenItems, toggle, collapsible, headingLevel }}>\n <div {...htmlProps} className={classes} data-orientation=\"vertical\">\n {children}\n </div>\n </AccordionContext.Provider>\n );\n}\n\nfunction AccordionItem({\n children,\n value,\n disabled = false,\n className,\n ...htmlProps\n}: AccordionItemProps) {\n const { openItems } = useAccordionContext();\n const isOpen = openItems.includes(value);\n const baseId = React.useId();\n const triggerId = `accordion-trigger-${baseId}`;\n const contentId = `accordion-content-${baseId}`;\n\n const classes = [\n styles.item,\n isOpen && styles.itemOpen,\n disabled && styles.itemDisabled,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <AccordionItemContext.Provider value={{ value, isOpen, disabled, triggerId, contentId }}>\n <BaseCollapsible.Root open={isOpen} disabled={disabled}>\n <div {...htmlProps} className={classes} data-state={isOpen ? 'open' : 'closed'} data-disabled={disabled || undefined}>\n {children}\n </div>\n </BaseCollapsible.Root>\n </AccordionItemContext.Provider>\n );\n}\n\nfunction AccordionTrigger({\n children,\n className,\n type: buttonType,\n onClick,\n ...htmlProps\n}: AccordionTriggerProps) {\n const { toggle, headingLevel } = useAccordionContext();\n const { value, isOpen, disabled, triggerId, contentId } = useAccordionItemContext();\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n if (!disabled) {\n toggle(value);\n }\n };\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n // Create the heading element dynamically based on headingLevel\n const HeadingTag = `h${headingLevel}` as 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\n return (\n <HeadingTag className={styles.heading}>\n <BaseCollapsible.Trigger\n {...htmlProps}\n type={buttonType ?? 'button'}\n id={triggerId}\n className={classes}\n onClick={handleClick}\n aria-expanded={isOpen}\n aria-controls={contentId}\n data-state={isOpen ? 'open' : 'closed'}\n disabled={disabled}\n >\n <span className={styles.triggerContent}>{children}</span>\n <svg\n className={styles.chevron}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </BaseCollapsible.Trigger>\n </HeadingTag>\n );\n}\n\nfunction AccordionContent({\n children,\n className,\n ...htmlProps\n}: AccordionContentProps) {\n const { isOpen, triggerId, contentId } = useAccordionItemContext();\n\n const classes = [styles.content, className].filter(Boolean).join(' ');\n\n return (\n <BaseCollapsible.Panel\n {...htmlProps}\n id={contentId}\n className={classes}\n data-state={isOpen ? 'open' : 'closed'}\n role=\"region\"\n aria-labelledby={triggerId}\n >\n <div className={styles.contentInner}>\n {children}\n </div>\n </BaseCollapsible.Panel>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Accordion = Object.assign(AccordionRoot, {\n Item: AccordionItem,\n Trigger: AccordionTrigger,\n Content: AccordionContent,\n});\n\nexport { AccordionRoot, AccordionItem, AccordionTrigger, AccordionContent };\n"],"names":["React","collapsible","styles","jsx","BaseCollapsible","jsxs"],"mappings":"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"}
@@ -1,15 +1,7 @@
1
1
  import * as React from 'react';
2
2
  export type AccordionValue = string | string[];
3
- export interface AccordionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue'> {
3
+ interface AccordionSharedProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue'> {
4
4
  children: React.ReactNode;
5
- /** Allow multiple items to be open at once */
6
- type?: 'single' | 'multiple';
7
- /** Controlled value - string for single, string[] for multiple */
8
- value?: AccordionValue;
9
- /** Default value for uncontrolled usage */
10
- defaultValue?: AccordionValue;
11
- /** Callback when value changes */
12
- onValueChange?: (value: AccordionValue | undefined) => void;
13
5
  /** Whether items can be fully collapsed (only for type="single") */
14
6
  collapsible?: boolean;
15
7
  /**
@@ -19,6 +11,27 @@ export interface AccordionProps extends Omit<React.HTMLAttributes<HTMLDivElement
19
11
  */
20
12
  headingLevel?: 2 | 3 | 4 | 5 | 6;
21
13
  }
14
+ export interface AccordionSingleProps extends AccordionSharedProps {
15
+ /** Allow multiple items to be open at once */
16
+ type?: 'single';
17
+ /** Controlled value for single mode */
18
+ value?: string;
19
+ /** Default value for uncontrolled usage */
20
+ defaultValue?: string;
21
+ /** Callback when value changes */
22
+ onValueChange?: (value: string | undefined) => void;
23
+ }
24
+ export interface AccordionMultipleProps extends AccordionSharedProps {
25
+ /** Allow multiple items to be open at once */
26
+ type: 'multiple';
27
+ /** Controlled values for multiple mode */
28
+ value?: string[];
29
+ /** Default values for uncontrolled usage */
30
+ defaultValue?: string[];
31
+ /** Callback when value changes */
32
+ onValueChange?: (value: string[]) => void;
33
+ }
34
+ export type AccordionProps = AccordionSingleProps | AccordionMultipleProps;
22
35
  export interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement> {
23
36
  children: React.ReactNode;
24
37
  /** Unique value for this item */
@@ -26,7 +39,7 @@ export interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement>
26
39
  /** Disable this item */
27
40
  disabled?: boolean;
28
41
  }
29
- export interface AccordionTriggerProps extends React.HTMLAttributes<HTMLButtonElement> {
42
+ export interface AccordionTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
30
43
  children: React.ReactNode;
31
44
  }
32
45
  export interface AccordionContentProps extends React.HTMLAttributes<HTMLDivElement> {
@@ -34,7 +47,7 @@ export interface AccordionContentProps extends React.HTMLAttributes<HTMLDivEleme
34
47
  }
35
48
  declare function AccordionRoot({ children, type, value, defaultValue, onValueChange, collapsible, headingLevel, className, ...htmlProps }: AccordionProps): import("react/jsx-runtime").JSX.Element;
36
49
  declare function AccordionItem({ children, value, disabled, className, ...htmlProps }: AccordionItemProps): import("react/jsx-runtime").JSX.Element;
37
- declare function AccordionTrigger({ children, className, onClick, ...htmlProps }: AccordionTriggerProps): import("react/jsx-runtime").JSX.Element;
50
+ declare function AccordionTrigger({ children, className, type: buttonType, onClick, ...htmlProps }: AccordionTriggerProps): import("react/jsx-runtime").JSX.Element;
38
51
  declare function AccordionContent({ children, className, ...htmlProps }: AccordionContentProps): import("react/jsx-runtime").JSX.Element;
39
52
  export declare const Accordion: typeof AccordionRoot & {
40
53
  Item: typeof AccordionItem;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Accordion/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAE/C,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChG,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,8CAA8C;IAC9C,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC7B,kEAAkE;IAClE,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,kCAAkC;IAClC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,KAAK,IAAI,CAAC;IAC5D,oEAAoE;IACpE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,kBAAmB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC9E,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,iBAAiB,CAAC;IACpF,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACjF,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AA8CD,iBAAS,aAAa,CAAC,EACrB,QAAQ,EACR,IAAe,EACf,KAAK,EACL,YAAY,EACZ,aAAa,EACb,WAAmB,EACnB,YAAgB,EAChB,SAAS,EACT,GAAG,SAAS,EACb,EAAE,cAAc,2CAkDhB;AAED,iBAAS,aAAa,CAAC,EACrB,QAAQ,EACR,KAAK,EACL,QAAgB,EAChB,SAAS,EACT,GAAG,SAAS,EACb,EAAE,kBAAkB,2CAuBpB;AAED,iBAAS,gBAAgB,CAAC,EACxB,QAAQ,EACR,SAAS,EACT,OAAO,EACP,GAAG,SAAS,EACb,EAAE,qBAAqB,2CAiDvB;AAED,iBAAS,gBAAgB,CAAC,EACxB,QAAQ,EACR,SAAS,EACT,GAAG,SAAS,EACb,EAAE,qBAAqB,2CAmBvB;AAMD,eAAO,MAAM,SAAS;;;;CAIpB,CAAC;AAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Accordion/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAE/C,UAAU,oBAAqB,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAC/F,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,oEAAoE;IACpE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,oBAAqB,SAAQ,oBAAoB;IAChE,8CAA8C;IAC9C,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CACrD;AAED,MAAM,WAAW,sBAAuB,SAAQ,oBAAoB;IAClE,8CAA8C;IAC9C,IAAI,EAAE,UAAU,CAAC;IACjB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,kCAAkC;IAClC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAC3C;AAED,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,sBAAsB,CAAC;AAE3E,MAAM,WAAW,kBAAmB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC9E,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,wBAAwB;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;IAC1F,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACjF,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AA8CD,iBAAS,aAAa,CAAC,EACrB,QAAQ,EACR,IAAe,EACf,KAAK,EACL,YAAY,EACZ,aAAa,EACb,WAAmB,EACnB,YAAgB,EAChB,SAAS,EACT,GAAG,SAAS,EACb,EAAE,cAAc,2CAoDhB;AAED,iBAAS,aAAa,CAAC,EACrB,QAAQ,EACR,KAAK,EACL,QAAgB,EAChB,SAAS,EACT,GAAG,SAAS,EACb,EAAE,kBAAkB,2CAuBpB;AAED,iBAAS,gBAAgB,CAAC,EACxB,QAAQ,EACR,SAAS,EACT,IAAI,EAAE,UAAU,EAChB,OAAO,EACP,GAAG,SAAS,EACb,EAAE,qBAAqB,2CAkDvB;AAED,iBAAS,gBAAgB,CAAC,EACxB,QAAQ,EACR,SAAS,EACT,GAAG,SAAS,EACb,EAAE,qBAAqB,2CAmBvB;AAMD,eAAO,MAAM,SAAS;;;;CAIpB,CAAC;AAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
@@ -55,12 +55,14 @@ function AccordionRoot({
55
55
  if (controlledOpenItems === void 0) {
56
56
  setOpenItems(newItems);
57
57
  }
58
- if (onValueChange) {
59
- onValueChange(type === "single" ? newItems[0] : newItems);
58
+ if (type === "single") {
59
+ onValueChange == null ? void 0 : onValueChange(newItems[0]);
60
+ } else {
61
+ onValueChange == null ? void 0 : onValueChange(newItems);
60
62
  }
61
63
  }, [type, currentOpenItems, collapsible, controlledOpenItems, onValueChange]);
62
64
  const classes = [styles.accordion, className].filter(Boolean).join(" ");
63
- return /* @__PURE__ */ jsx(AccordionContext.Provider, { value: { type, openItems: currentOpenItems, toggle, collapsible, headingLevel }, children: /* @__PURE__ */ jsx("div", { ...htmlProps, className: classes, "data-orientation": "vertical", role: "region", children }) });
65
+ return /* @__PURE__ */ jsx(AccordionContext.Provider, { value: { type, openItems: currentOpenItems, toggle, collapsible, headingLevel }, children: /* @__PURE__ */ jsx("div", { ...htmlProps, className: classes, "data-orientation": "vertical", children }) });
64
66
  }
65
67
  function AccordionItem({
66
68
  children,
@@ -85,6 +87,7 @@ function AccordionItem({
85
87
  function AccordionTrigger({
86
88
  children,
87
89
  className,
90
+ type: buttonType,
88
91
  onClick,
89
92
  ...htmlProps
90
93
  }) {
@@ -103,6 +106,7 @@ function AccordionTrigger({
103
106
  Collapsible.Trigger,
104
107
  {
105
108
  ...htmlProps,
109
+ type: buttonType ?? "button",
106
110
  id: triggerId,
107
111
  className: classes,
108
112
  onClick: handleClick,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/Accordion/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Collapsible as BaseCollapsible } from '@base-ui/react/collapsible';\nimport styles from './Accordion.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport type AccordionValue = string | string[];\n\nexport interface AccordionProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue'> {\n children: React.ReactNode;\n /** Allow multiple items to be open at once */\n type?: 'single' | 'multiple';\n /** Controlled value - string for single, string[] for multiple */\n value?: AccordionValue;\n /** Default value for uncontrolled usage */\n defaultValue?: AccordionValue;\n /** Callback when value changes */\n onValueChange?: (value: AccordionValue | undefined) => void;\n /** Whether items can be fully collapsed (only for type=\"single\") */\n collapsible?: boolean;\n /**\n * Heading level for accordion triggers (for semantic HTML).\n * The trigger will be wrapped in an <h{level}> element.\n * @default 3\n */\n headingLevel?: 2 | 3 | 4 | 5 | 6;\n}\n\nexport interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n /** Unique value for this item */\n value: string;\n /** Disable this item */\n disabled?: boolean;\n}\n\nexport interface AccordionTriggerProps extends React.HTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n}\n\nexport interface AccordionContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\n// ============================================\n// Context\n// ============================================\n\ninterface AccordionContextValue {\n type: 'single' | 'multiple';\n openItems: string[];\n toggle: (value: string) => void;\n collapsible: boolean;\n headingLevel: 2 | 3 | 4 | 5 | 6;\n}\n\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\ninterface AccordionItemContextValue {\n value: string;\n isOpen: boolean;\n disabled: boolean;\n triggerId: string;\n contentId: string;\n}\n\nconst AccordionItemContext = React.createContext<AccordionItemContextValue | null>(null);\n\nfunction useAccordionContext() {\n const context = React.useContext(AccordionContext);\n if (!context) {\n throw new Error('Accordion components must be used within an Accordion');\n }\n return context;\n}\n\nfunction useAccordionItemContext() {\n const context = React.useContext(AccordionItemContext);\n if (!context) {\n throw new Error('Accordion.Trigger/Content must be used within an Accordion.Item');\n }\n return context;\n}\n\n// ============================================\n// Components\n// ============================================\n\nfunction AccordionRoot({\n children,\n type = 'single',\n value,\n defaultValue,\n onValueChange,\n collapsible = false,\n headingLevel = 3,\n className,\n ...htmlProps\n}: AccordionProps) {\n // Normalize value to array for internal handling\n const normalizeValue = (val: AccordionValue | undefined): string[] => {\n if (val === undefined) return [];\n return Array.isArray(val) ? val : [val];\n };\n\n const [openItems, setOpenItems] = React.useState<string[]>(() =>\n normalizeValue(defaultValue)\n );\n\n // Use controlled value if provided\n const controlledOpenItems = value !== undefined ? normalizeValue(value) : undefined;\n const currentOpenItems = controlledOpenItems ?? openItems;\n\n const toggle = React.useCallback((itemValue: string) => {\n const newItems = (() => {\n if (type === 'single') {\n // For single, toggle or set new item\n if (currentOpenItems.includes(itemValue)) {\n return collapsible ? [] : currentOpenItems;\n }\n return [itemValue];\n } else {\n // For multiple, toggle item in array\n if (currentOpenItems.includes(itemValue)) {\n return currentOpenItems.filter(v => v !== itemValue);\n }\n return [...currentOpenItems, itemValue];\n }\n })();\n\n if (controlledOpenItems === undefined) {\n setOpenItems(newItems);\n }\n\n if (onValueChange) {\n onValueChange(type === 'single' ? newItems[0] : newItems);\n }\n }, [type, currentOpenItems, collapsible, controlledOpenItems, onValueChange]);\n\n const classes = [styles.accordion, className].filter(Boolean).join(' ');\n\n return (\n <AccordionContext.Provider value={{ type, openItems: currentOpenItems, toggle, collapsible, headingLevel }}>\n <div {...htmlProps} className={classes} data-orientation=\"vertical\" role=\"region\">\n {children}\n </div>\n </AccordionContext.Provider>\n );\n}\n\nfunction AccordionItem({\n children,\n value,\n disabled = false,\n className,\n ...htmlProps\n}: AccordionItemProps) {\n const { openItems } = useAccordionContext();\n const isOpen = openItems.includes(value);\n const baseId = React.useId();\n const triggerId = `accordion-trigger-${baseId}`;\n const contentId = `accordion-content-${baseId}`;\n\n const classes = [\n styles.item,\n isOpen && styles.itemOpen,\n disabled && styles.itemDisabled,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <AccordionItemContext.Provider value={{ value, isOpen, disabled, triggerId, contentId }}>\n <BaseCollapsible.Root open={isOpen} disabled={disabled}>\n <div {...htmlProps} className={classes} data-state={isOpen ? 'open' : 'closed'} data-disabled={disabled || undefined}>\n {children}\n </div>\n </BaseCollapsible.Root>\n </AccordionItemContext.Provider>\n );\n}\n\nfunction AccordionTrigger({\n children,\n className,\n onClick,\n ...htmlProps\n}: AccordionTriggerProps) {\n const { toggle, headingLevel } = useAccordionContext();\n const { value, isOpen, disabled, triggerId, contentId } = useAccordionItemContext();\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n if (!disabled) {\n toggle(value);\n }\n };\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n // Create the heading element dynamically based on headingLevel\n const HeadingTag = `h${headingLevel}` as 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\n return (\n <HeadingTag className={styles.heading}>\n <BaseCollapsible.Trigger\n {...htmlProps}\n id={triggerId}\n className={classes}\n onClick={handleClick}\n aria-expanded={isOpen}\n aria-controls={contentId}\n data-state={isOpen ? 'open' : 'closed'}\n disabled={disabled}\n >\n <span className={styles.triggerContent}>{children}</span>\n <svg\n className={styles.chevron}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </BaseCollapsible.Trigger>\n </HeadingTag>\n );\n}\n\nfunction AccordionContent({\n children,\n className,\n ...htmlProps\n}: AccordionContentProps) {\n const { isOpen, triggerId, contentId } = useAccordionItemContext();\n\n const classes = [styles.content, className].filter(Boolean).join(' ');\n\n return (\n <BaseCollapsible.Panel\n {...htmlProps}\n id={contentId}\n className={classes}\n data-state={isOpen ? 'open' : 'closed'}\n role=\"region\"\n aria-labelledby={triggerId}\n >\n <div className={styles.contentInner}>\n {children}\n </div>\n </BaseCollapsible.Panel>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Accordion = Object.assign(AccordionRoot, {\n Item: AccordionItem,\n Trigger: AccordionTrigger,\n Content: AccordionContent,\n});\n\nexport { AccordionRoot, AccordionItem, AccordionTrigger, AccordionContent };\n"],"names":["BaseCollapsible"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/Accordion/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Collapsible as BaseCollapsible } from '@base-ui/react/collapsible';\nimport styles from './Accordion.module.scss';\n\n// ============================================\n// Types\n// ============================================\n\nexport type AccordionValue = string | string[];\n\ninterface AccordionSharedProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue'> {\n children: React.ReactNode;\n /** Whether items can be fully collapsed (only for type=\"single\") */\n collapsible?: boolean;\n /**\n * Heading level for accordion triggers (for semantic HTML).\n * The trigger will be wrapped in an <h{level}> element.\n * @default 3\n */\n headingLevel?: 2 | 3 | 4 | 5 | 6;\n}\n\nexport interface AccordionSingleProps extends AccordionSharedProps {\n /** Allow multiple items to be open at once */\n type?: 'single';\n /** Controlled value for single mode */\n value?: string;\n /** Default value for uncontrolled usage */\n defaultValue?: string;\n /** Callback when value changes */\n onValueChange?: (value: string | undefined) => void;\n}\n\nexport interface AccordionMultipleProps extends AccordionSharedProps {\n /** Allow multiple items to be open at once */\n type: 'multiple';\n /** Controlled values for multiple mode */\n value?: string[];\n /** Default values for uncontrolled usage */\n defaultValue?: string[];\n /** Callback when value changes */\n onValueChange?: (value: string[]) => void;\n}\n\nexport type AccordionProps = AccordionSingleProps | AccordionMultipleProps;\n\nexport interface AccordionItemProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n /** Unique value for this item */\n value: string;\n /** Disable this item */\n disabled?: boolean;\n}\n\nexport interface AccordionTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n}\n\nexport interface AccordionContentProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\n// ============================================\n// Context\n// ============================================\n\ninterface AccordionContextValue {\n type: 'single' | 'multiple';\n openItems: string[];\n toggle: (value: string) => void;\n collapsible: boolean;\n headingLevel: 2 | 3 | 4 | 5 | 6;\n}\n\nconst AccordionContext = React.createContext<AccordionContextValue | null>(null);\n\ninterface AccordionItemContextValue {\n value: string;\n isOpen: boolean;\n disabled: boolean;\n triggerId: string;\n contentId: string;\n}\n\nconst AccordionItemContext = React.createContext<AccordionItemContextValue | null>(null);\n\nfunction useAccordionContext() {\n const context = React.useContext(AccordionContext);\n if (!context) {\n throw new Error('Accordion components must be used within an Accordion');\n }\n return context;\n}\n\nfunction useAccordionItemContext() {\n const context = React.useContext(AccordionItemContext);\n if (!context) {\n throw new Error('Accordion.Trigger/Content must be used within an Accordion.Item');\n }\n return context;\n}\n\n// ============================================\n// Components\n// ============================================\n\nfunction AccordionRoot({\n children,\n type = 'single',\n value,\n defaultValue,\n onValueChange,\n collapsible = false,\n headingLevel = 3,\n className,\n ...htmlProps\n}: AccordionProps) {\n // Normalize value to array for internal handling\n const normalizeValue = (val: AccordionValue | undefined): string[] => {\n if (val === undefined) return [];\n return Array.isArray(val) ? val : [val];\n };\n\n const [openItems, setOpenItems] = React.useState<string[]>(() =>\n normalizeValue(defaultValue)\n );\n\n // Use controlled value if provided\n const controlledOpenItems = value !== undefined ? normalizeValue(value) : undefined;\n const currentOpenItems = controlledOpenItems ?? openItems;\n\n const toggle = React.useCallback((itemValue: string) => {\n const newItems = (() => {\n if (type === 'single') {\n // For single, toggle or set new item\n if (currentOpenItems.includes(itemValue)) {\n return collapsible ? [] : currentOpenItems;\n }\n return [itemValue];\n } else {\n // For multiple, toggle item in array\n if (currentOpenItems.includes(itemValue)) {\n return currentOpenItems.filter(v => v !== itemValue);\n }\n return [...currentOpenItems, itemValue];\n }\n })();\n\n if (controlledOpenItems === undefined) {\n setOpenItems(newItems);\n }\n\n if (type === 'single') {\n (onValueChange as AccordionSingleProps['onValueChange'] | undefined)?.(newItems[0]);\n } else {\n (onValueChange as AccordionMultipleProps['onValueChange'] | undefined)?.(newItems);\n }\n }, [type, currentOpenItems, collapsible, controlledOpenItems, onValueChange]);\n\n const classes = [styles.accordion, className].filter(Boolean).join(' ');\n\n return (\n <AccordionContext.Provider value={{ type, openItems: currentOpenItems, toggle, collapsible, headingLevel }}>\n <div {...htmlProps} className={classes} data-orientation=\"vertical\">\n {children}\n </div>\n </AccordionContext.Provider>\n );\n}\n\nfunction AccordionItem({\n children,\n value,\n disabled = false,\n className,\n ...htmlProps\n}: AccordionItemProps) {\n const { openItems } = useAccordionContext();\n const isOpen = openItems.includes(value);\n const baseId = React.useId();\n const triggerId = `accordion-trigger-${baseId}`;\n const contentId = `accordion-content-${baseId}`;\n\n const classes = [\n styles.item,\n isOpen && styles.itemOpen,\n disabled && styles.itemDisabled,\n className,\n ].filter(Boolean).join(' ');\n\n return (\n <AccordionItemContext.Provider value={{ value, isOpen, disabled, triggerId, contentId }}>\n <BaseCollapsible.Root open={isOpen} disabled={disabled}>\n <div {...htmlProps} className={classes} data-state={isOpen ? 'open' : 'closed'} data-disabled={disabled || undefined}>\n {children}\n </div>\n </BaseCollapsible.Root>\n </AccordionItemContext.Provider>\n );\n}\n\nfunction AccordionTrigger({\n children,\n className,\n type: buttonType,\n onClick,\n ...htmlProps\n}: AccordionTriggerProps) {\n const { toggle, headingLevel } = useAccordionContext();\n const { value, isOpen, disabled, triggerId, contentId } = useAccordionItemContext();\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n if (!disabled) {\n toggle(value);\n }\n };\n\n const classes = [styles.trigger, className].filter(Boolean).join(' ');\n\n // Create the heading element dynamically based on headingLevel\n const HeadingTag = `h${headingLevel}` as 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\n return (\n <HeadingTag className={styles.heading}>\n <BaseCollapsible.Trigger\n {...htmlProps}\n type={buttonType ?? 'button'}\n id={triggerId}\n className={classes}\n onClick={handleClick}\n aria-expanded={isOpen}\n aria-controls={contentId}\n data-state={isOpen ? 'open' : 'closed'}\n disabled={disabled}\n >\n <span className={styles.triggerContent}>{children}</span>\n <svg\n className={styles.chevron}\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </BaseCollapsible.Trigger>\n </HeadingTag>\n );\n}\n\nfunction AccordionContent({\n children,\n className,\n ...htmlProps\n}: AccordionContentProps) {\n const { isOpen, triggerId, contentId } = useAccordionItemContext();\n\n const classes = [styles.content, className].filter(Boolean).join(' ');\n\n return (\n <BaseCollapsible.Panel\n {...htmlProps}\n id={contentId}\n className={classes}\n data-state={isOpen ? 'open' : 'closed'}\n role=\"region\"\n aria-labelledby={triggerId}\n >\n <div className={styles.contentInner}>\n {children}\n </div>\n </BaseCollapsible.Panel>\n );\n}\n\n// ============================================\n// Export compound component\n// ============================================\n\nexport const Accordion = Object.assign(AccordionRoot, {\n Item: AccordionItem,\n Trigger: AccordionTrigger,\n Content: AccordionContent,\n});\n\nexport { AccordionRoot, AccordionItem, AccordionTrigger, AccordionContent };\n"],"names":["BaseCollapsible"],"mappings":"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"}
@@ -1,17 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
- const alert = "_alert_1d3ko_1";
4
- const info = "_info_1d3ko_12";
5
- const success = "_success_1d3ko_18";
6
- const warning = "_warning_1d3ko_24";
7
- const error = "_error_1d3ko_30";
8
- const icon = "_icon_1d3ko_36";
9
- const body = "_body_1d3ko_66";
10
- const title = "_title_1d3ko_71";
11
- const content = "_content_1d3ko_76";
12
- const actions = "_actions_1d3ko_80";
13
- const close = "_close_1d3ko_86";
14
- const action = "_action_1d3ko_80";
3
+ const alert = "_alert_2yjq3_1";
4
+ const info = "_info_2yjq3_12";
5
+ const success = "_success_2yjq3_18";
6
+ const warning = "_warning_2yjq3_24";
7
+ const error = "_error_2yjq3_30";
8
+ const icon = "_icon_2yjq3_36";
9
+ const body = "_body_2yjq3_66";
10
+ const title = "_title_2yjq3_71";
11
+ const content = "_content_2yjq3_76";
12
+ const actions = "_actions_2yjq3_80";
13
+ const close = "_close_2yjq3_86";
14
+ const action = "_action_2yjq3_80";
15
15
  const styles = {
16
16
  alert,
17
17
  info,
@@ -1,15 +1,15 @@
1
- const alert = "_alert_1d3ko_1";
2
- const info = "_info_1d3ko_12";
3
- const success = "_success_1d3ko_18";
4
- const warning = "_warning_1d3ko_24";
5
- const error = "_error_1d3ko_30";
6
- const icon = "_icon_1d3ko_36";
7
- const body = "_body_1d3ko_66";
8
- const title = "_title_1d3ko_71";
9
- const content = "_content_1d3ko_76";
10
- const actions = "_actions_1d3ko_80";
11
- const close = "_close_1d3ko_86";
12
- const action = "_action_1d3ko_80";
1
+ const alert = "_alert_2yjq3_1";
2
+ const info = "_info_2yjq3_12";
3
+ const success = "_success_2yjq3_18";
4
+ const warning = "_warning_2yjq3_24";
5
+ const error = "_error_2yjq3_30";
6
+ const icon = "_icon_2yjq3_36";
7
+ const body = "_body_2yjq3_66";
8
+ const title = "_title_2yjq3_71";
9
+ const content = "_content_2yjq3_76";
10
+ const actions = "_actions_2yjq3_80";
11
+ const close = "_close_2yjq3_86";
12
+ const action = "_action_2yjq3_80";
13
13
  const styles = {
14
14
  alert,
15
15
  info,