@mari-ui/components 0.1.1 → 0.2.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 (459) hide show
  1. package/dist/accordion.js +4 -4
  2. package/dist/accordion.js.map +1 -1
  3. package/dist/alert.js +5 -5
  4. package/dist/alert.js.map +1 -1
  5. package/dist/autocomplete.js +8 -8
  6. package/dist/autocomplete.js.map +1 -1
  7. package/dist/avatar.js +3 -3
  8. package/dist/badge.js +3 -3
  9. package/dist/breadcrumb.js +9 -9
  10. package/dist/breadcrumb.js.map +1 -1
  11. package/dist/button.js +4 -4
  12. package/dist/calendar.js +14 -14
  13. package/dist/calendar.js.map +1 -1
  14. package/dist/card.js +4 -4
  15. package/dist/card.js.map +1 -1
  16. package/dist/carousel.js +4 -4
  17. package/dist/carousel.js.map +1 -1
  18. package/dist/chart.js +5 -5
  19. package/dist/chart.js.map +1 -1
  20. package/dist/checkbox.js +4 -4
  21. package/dist/{chunk-BDV4GOEN.js → chunk-5GILG5AK.js} +1 -1
  22. package/dist/chunk-5GILG5AK.js.map +1 -0
  23. package/dist/{chunk-IP2J3BWY.js → chunk-6AMBZXZJ.js} +1 -1
  24. package/dist/chunk-6AMBZXZJ.js.map +1 -0
  25. package/dist/{chunk-XUKVQO6M.js → chunk-6CSUVVFG.js} +1 -1
  26. package/dist/chunk-6CSUVVFG.js.map +1 -0
  27. package/dist/{chunk-ELHESRRH.js → chunk-7FQQRTPX.js} +5 -5
  28. package/dist/chunk-7FQQRTPX.js.map +1 -0
  29. package/dist/{chunk-QNOHFHVL.js → chunk-7WB4CDWX.js} +4 -4
  30. package/dist/chunk-7WB4CDWX.js.map +1 -0
  31. package/dist/{chunk-47FHUOLT.js → chunk-BLFY5UAL.js} +1 -1
  32. package/dist/chunk-BLFY5UAL.js.map +1 -0
  33. package/dist/{chunk-CYLXW66E.js → chunk-C3QWJFSE.js} +2 -2
  34. package/dist/chunk-C3QWJFSE.js.map +1 -0
  35. package/dist/{chunk-QDFDMWXD.js → chunk-CNWRDTEW.js} +7 -7
  36. package/dist/chunk-CNWRDTEW.js.map +1 -0
  37. package/dist/{chunk-2IEXY3OZ.js → chunk-CVKAGR3D.js} +4 -4
  38. package/dist/{chunk-LZHERDNB.js → chunk-CXIWRNSP.js} +5 -5
  39. package/dist/chunk-CXIWRNSP.js.map +1 -0
  40. package/dist/{chunk-FNJHS5KQ.js → chunk-E5JTEQ4V.js} +6 -6
  41. package/dist/chunk-E5JTEQ4V.js.map +1 -0
  42. package/dist/{chunk-IO4346TF.js → chunk-FC7T3INX.js} +8 -8
  43. package/dist/chunk-FC7T3INX.js.map +1 -0
  44. package/dist/{chunk-KCYM2JXP.js → chunk-FWSMUUZ5.js} +5 -5
  45. package/dist/chunk-FWSMUUZ5.js.map +1 -0
  46. package/dist/{chunk-3ABWBQCS.js → chunk-GTNCXOUL.js} +2 -2
  47. package/dist/chunk-GTNCXOUL.js.map +1 -0
  48. package/dist/{chunk-ZLPAXPDI.js → chunk-GVJ4M63W.js} +3 -3
  49. package/dist/{chunk-ZLPAXPDI.js.map → chunk-GVJ4M63W.js.map} +1 -1
  50. package/dist/{chunk-LBXIPDAB.js → chunk-JXD5DW6E.js} +3 -3
  51. package/dist/chunk-JXD5DW6E.js.map +1 -0
  52. package/dist/{chunk-P7Z5BREP.js → chunk-L6DBWUAB.js} +6 -6
  53. package/dist/chunk-L6DBWUAB.js.map +1 -0
  54. package/dist/{chunk-YZ7MDC6B.js → chunk-LNL4TCGL.js} +2 -2
  55. package/dist/chunk-LNL4TCGL.js.map +1 -0
  56. package/dist/{chunk-TCYDVNSU.js → chunk-MT4VH7QV.js} +1 -1
  57. package/dist/chunk-MT4VH7QV.js.map +1 -0
  58. package/dist/{chunk-DKENCYHA.js → chunk-MXGY2ENX.js} +1 -1
  59. package/dist/chunk-MXGY2ENX.js.map +1 -0
  60. package/dist/{chunk-DUCIAQGR.js → chunk-NENNFQEY.js} +3 -3
  61. package/dist/chunk-NENNFQEY.js.map +1 -0
  62. package/dist/{chunk-LBQMEHK6.js → chunk-NPFMPRII.js} +1 -1
  63. package/dist/chunk-NPFMPRII.js.map +1 -0
  64. package/dist/{chunk-NS7FKOFI.js → chunk-NYXU5EFE.js} +1 -1
  65. package/dist/chunk-NYXU5EFE.js.map +1 -0
  66. package/dist/{chunk-S66GKX2W.js → chunk-OAWUZIIN.js} +1 -1
  67. package/dist/chunk-OAWUZIIN.js.map +1 -0
  68. package/dist/{chunk-JNZODUXP.js → chunk-OYDG6C54.js} +1 -1
  69. package/dist/chunk-OYDG6C54.js.map +1 -0
  70. package/dist/{chunk-FFXRFQSU.js → chunk-POBOJBNJ.js} +1 -1
  71. package/dist/chunk-POBOJBNJ.js.map +1 -0
  72. package/dist/{chunk-RIBB5OJV.js → chunk-PR2MCHU4.js} +4 -4
  73. package/dist/chunk-PR2MCHU4.js.map +1 -0
  74. package/dist/{chunk-LEOIKO7C.js → chunk-RLWP6NJU.js} +4 -4
  75. package/dist/chunk-RLWP6NJU.js.map +1 -0
  76. package/dist/{chunk-V7KDUUV6.js → chunk-RMNV2CE2.js} +2 -2
  77. package/dist/chunk-RMNV2CE2.js.map +1 -0
  78. package/dist/{chunk-ZXYQ2ZPR.js → chunk-TEMTIMAH.js} +3 -3
  79. package/dist/chunk-TEMTIMAH.js.map +1 -0
  80. package/dist/{chunk-NPM7IDYV.js → chunk-TSFAAREV.js} +3 -3
  81. package/dist/chunk-TSFAAREV.js.map +1 -0
  82. package/dist/{chunk-54HHEXXD.js → chunk-VKN374SD.js} +1 -1
  83. package/dist/chunk-VKN374SD.js.map +1 -0
  84. package/dist/{chunk-ZMA7BT2L.js → chunk-XWBJPA3D.js} +4 -4
  85. package/dist/{chunk-ZMA7BT2L.js.map → chunk-XWBJPA3D.js.map} +1 -1
  86. package/dist/{chunk-QZRBO7BE.js → chunk-Z4KFHRDW.js} +9 -9
  87. package/dist/chunk-Z4KFHRDW.js.map +1 -0
  88. package/dist/{chunk-TXRQCHOR.js → chunk-ZAR3SCPV.js} +5 -5
  89. package/dist/chunk-ZAR3SCPV.js.map +1 -0
  90. package/dist/color-picker.js +19 -19
  91. package/dist/date-picker.js +10 -10
  92. package/dist/date-picker.js.map +1 -1
  93. package/dist/divider.js +2 -2
  94. package/dist/divider.js.map +1 -1
  95. package/dist/drawer.js +7 -7
  96. package/dist/dropdown.js +7 -7
  97. package/dist/empty.js +5 -5
  98. package/dist/field.js +2 -2
  99. package/dist/field.js.map +1 -1
  100. package/dist/float-button.js +6 -6
  101. package/dist/float-button.js.map +1 -1
  102. package/dist/image.js +8 -8
  103. package/dist/image.js.map +1 -1
  104. package/dist/input-number.js +6 -6
  105. package/dist/input.js +8 -8
  106. package/dist/list.js +12 -12
  107. package/dist/list.js.map +1 -1
  108. package/dist/loading.js +1 -1
  109. package/dist/logo.js.map +1 -1
  110. package/dist/mari.css +8 -2
  111. package/dist/masonry.js +5 -5
  112. package/dist/masonry.js.map +1 -1
  113. package/dist/menu.js +10 -10
  114. package/dist/menu.js.map +1 -1
  115. package/dist/modal.js +8 -8
  116. package/dist/modal.js.map +1 -1
  117. package/dist/pagination.js +5 -5
  118. package/dist/popconfirm.js +13 -13
  119. package/dist/popconfirm.js.map +1 -1
  120. package/dist/popover.js +10 -10
  121. package/dist/progress.js +2 -2
  122. package/dist/progress.js.map +1 -1
  123. package/dist/qrcode.js +1 -1
  124. package/dist/qrcode.js.map +1 -1
  125. package/dist/radio.js +4 -4
  126. package/dist/radio.js.map +1 -1
  127. package/dist/rate.js +2 -2
  128. package/dist/rate.js.map +1 -1
  129. package/dist/segmented.js +4 -4
  130. package/dist/select.js +11 -11
  131. package/dist/skeleton.js +3 -3
  132. package/dist/slider.js +8 -8
  133. package/dist/slider.js.map +1 -1
  134. package/dist/splitter.js.map +1 -1
  135. package/dist/statistic.js +7 -7
  136. package/dist/statistic.js.map +1 -1
  137. package/dist/steps.js +4 -4
  138. package/dist/steps.js.map +1 -1
  139. package/dist/styles.css +1 -1
  140. package/dist/switch.js +2 -2
  141. package/dist/switch.js.map +1 -1
  142. package/dist/table.js +19 -19
  143. package/dist/table.js.map +1 -1
  144. package/dist/tabs.js +2 -2
  145. package/dist/tabs.js.map +1 -1
  146. package/dist/tag.js +3 -3
  147. package/dist/theme-customizer.js +19 -19
  148. package/dist/theme-customizer.js.map +1 -1
  149. package/dist/timeline.js +5 -5
  150. package/dist/timeline.js.map +1 -1
  151. package/dist/toast.js +7 -7
  152. package/dist/tooltip.js +4 -4
  153. package/dist/tour.js +12 -12
  154. package/dist/tour.js.map +1 -1
  155. package/dist/transfer.js +11 -11
  156. package/dist/transfer.js.map +1 -1
  157. package/dist/tree-select.js +12 -12
  158. package/dist/tree-select.js.map +1 -1
  159. package/dist/tree.js +5 -5
  160. package/dist/types/accordion/Accordion.d.ts +1 -3
  161. package/dist/types/accordion/Accordion.d.ts.map +1 -1
  162. package/dist/types/alert/Alert.d.ts +0 -1
  163. package/dist/types/alert/Alert.d.ts.map +1 -1
  164. package/dist/types/autocomplete/AutoComplete.d.ts +2 -2
  165. package/dist/types/autocomplete/utils.d.ts +0 -8
  166. package/dist/types/autocomplete/utils.d.ts.map +1 -1
  167. package/dist/types/avatar/utils.d.ts +1 -1
  168. package/dist/types/badge/Badge.d.ts +0 -3
  169. package/dist/types/badge/Badge.d.ts.map +1 -1
  170. package/dist/types/breadcrumb/Breadcrumb.d.ts +1 -12
  171. package/dist/types/breadcrumb/Breadcrumb.d.ts.map +1 -1
  172. package/dist/types/breadcrumb/utils.d.ts +0 -7
  173. package/dist/types/breadcrumb/utils.d.ts.map +1 -1
  174. package/dist/types/button/types.d.ts +1 -9
  175. package/dist/types/button/types.d.ts.map +1 -1
  176. package/dist/types/calendar/Calendar.d.ts +3 -4
  177. package/dist/types/calendar/Calendar.d.ts.map +1 -1
  178. package/dist/types/calendar/_components/CalendarPanel.d.ts +1 -2
  179. package/dist/types/calendar/_components/CalendarPanel.d.ts.map +1 -1
  180. package/dist/types/calendar/_components/DayGrid.d.ts +1 -1
  181. package/dist/types/calendar/types.d.ts +1 -1
  182. package/dist/types/calendar/types.d.ts.map +1 -1
  183. package/dist/types/card/Card.d.ts +3 -4
  184. package/dist/types/card/Card.d.ts.map +1 -1
  185. package/dist/types/card/types.d.ts +1 -1
  186. package/dist/types/carousel/types.d.ts +4 -10
  187. package/dist/types/carousel/types.d.ts.map +1 -1
  188. package/dist/types/carousel/utils.d.ts +0 -11
  189. package/dist/types/carousel/utils.d.ts.map +1 -1
  190. package/dist/types/chart/_shared/paths.d.ts +1 -1
  191. package/dist/types/chart/_shared/scale.d.ts +1 -2
  192. package/dist/types/chart/_shared/scale.d.ts.map +1 -1
  193. package/dist/types/chart/bar-chart/BarChart.d.ts +1 -1
  194. package/dist/types/chart/gauge/Gauge.d.ts +1 -1
  195. package/dist/types/chart/line-chart/LineChart.d.ts +2 -2
  196. package/dist/types/chart/pie-chart/PieChart.d.ts +1 -1
  197. package/dist/types/chart/sparkline/Sparkline.d.ts +1 -1
  198. package/dist/types/checkbox/utils.d.ts.map +1 -1
  199. package/dist/types/color-picker/ColorPicker.d.ts +0 -6
  200. package/dist/types/color-picker/ColorPicker.d.ts.map +1 -1
  201. package/dist/types/color-picker/_components/ColorPresets.d.ts +1 -1
  202. package/dist/types/color-picker/_components/ColorPresets.d.ts.map +1 -1
  203. package/dist/types/color-picker/utils.d.ts +1 -1
  204. package/dist/types/date-picker/DatePicker.d.ts +0 -6
  205. package/dist/types/date-picker/DatePicker.d.ts.map +1 -1
  206. package/dist/types/date-picker/TimePicker.d.ts +1 -1
  207. package/dist/types/date-picker/_components/TimePanel.d.ts.map +1 -1
  208. package/dist/types/date-picker/utils.d.ts +1 -1
  209. package/dist/types/date-picker/utils.d.ts.map +1 -1
  210. package/dist/types/divider/Divider.d.ts +1 -1
  211. package/dist/types/divider/types.d.ts +2 -4
  212. package/dist/types/divider/types.d.ts.map +1 -1
  213. package/dist/types/drawer/Drawer.d.ts +5 -6
  214. package/dist/types/drawer/Drawer.d.ts.map +1 -1
  215. package/dist/types/dropdown/_components/DropdownContent.d.ts +1 -1
  216. package/dist/types/dropdown/_components/DropdownItem.d.ts +0 -5
  217. package/dist/types/dropdown/_components/DropdownItem.d.ts.map +1 -1
  218. package/dist/types/dropdown/types.d.ts +1 -1
  219. package/dist/types/dropdown/useDropdown.d.ts +0 -16
  220. package/dist/types/dropdown/useDropdown.d.ts.map +1 -1
  221. package/dist/types/dropdown/utils.d.ts +1 -1
  222. package/dist/types/empty/Empty.d.ts +1 -6
  223. package/dist/types/empty/Empty.d.ts.map +1 -1
  224. package/dist/types/field/Field.d.ts +1 -5
  225. package/dist/types/field/Field.d.ts.map +1 -1
  226. package/dist/types/float-button/BackTop.d.ts +1 -1
  227. package/dist/types/float-button/FloatButton.d.ts +0 -5
  228. package/dist/types/float-button/FloatButton.d.ts.map +1 -1
  229. package/dist/types/float-button/FloatButtonGroup.d.ts +1 -1
  230. package/dist/types/float-button/utils.d.ts +1 -1
  231. package/dist/types/foundations/usePersonaTheme.d.ts +1 -1
  232. package/dist/types/image/Image.d.ts +0 -6
  233. package/dist/types/image/Image.d.ts.map +1 -1
  234. package/dist/types/image/ImageGallery.d.ts +1 -1
  235. package/dist/types/image/ImageViewer.d.ts +1 -1
  236. package/dist/types/image/galleryUtils.d.ts +1 -1
  237. package/dist/types/input/SearchInput.d.ts +1 -6
  238. package/dist/types/input/SearchInput.d.ts.map +1 -1
  239. package/dist/types/input/Textarea.d.ts +2 -6
  240. package/dist/types/input/Textarea.d.ts.map +1 -1
  241. package/dist/types/input/mention/types.d.ts +1 -2
  242. package/dist/types/input/mention/types.d.ts.map +1 -1
  243. package/dist/types/input/types.d.ts +3 -15
  244. package/dist/types/input/types.d.ts.map +1 -1
  245. package/dist/types/input/utils.d.ts +1 -26
  246. package/dist/types/input/utils.d.ts.map +1 -1
  247. package/dist/types/input-number/InputNumber.d.ts +0 -2
  248. package/dist/types/input-number/InputNumber.d.ts.map +1 -1
  249. package/dist/types/input-number/utils.d.ts +1 -1
  250. package/dist/types/lib/ContentSkeleton.d.ts +1 -1
  251. package/dist/types/lib/FloatingArrow.d.ts +0 -10
  252. package/dist/types/lib/FloatingArrow.d.ts.map +1 -1
  253. package/dist/types/lib/SkeletonDemo.d.ts +1 -1
  254. package/dist/types/lib/SkeletonSlot.d.ts +1 -1
  255. package/dist/types/lib/colorClasses.d.ts +1 -7
  256. package/dist/types/lib/colorClasses.d.ts.map +1 -1
  257. package/dist/types/lib/date/index.d.ts +1 -1
  258. package/dist/types/lib/elevationClass.d.ts +0 -8
  259. package/dist/types/lib/elevationClass.d.ts.map +1 -1
  260. package/dist/types/lib/fieldContext.d.ts +1 -1
  261. package/dist/types/lib/floating.d.ts +2 -7
  262. package/dist/types/lib/floating.d.ts.map +1 -1
  263. package/dist/types/lib/infiniteScroll.d.ts +1 -1
  264. package/dist/types/lib/linkBehavior.d.ts +1 -1
  265. package/dist/types/lib/overlay.d.ts +0 -7
  266. package/dist/types/lib/overlay.d.ts.map +1 -1
  267. package/dist/types/lib/sizeClasses.d.ts +2 -2
  268. package/dist/types/lib/skeleton.d.ts +1 -1
  269. package/dist/types/lib/storyMeta.d.ts +7 -28
  270. package/dist/types/lib/storyMeta.d.ts.map +1 -1
  271. package/dist/types/lib/storybookArgTypes.d.ts +1 -1
  272. package/dist/types/lib/useFloatingPosition.d.ts +1 -1
  273. package/dist/types/list/List.d.ts +0 -4
  274. package/dist/types/list/List.d.ts.map +1 -1
  275. package/dist/types/loading/Loading.d.ts.map +1 -1
  276. package/dist/types/loading/types.d.ts +2 -5
  277. package/dist/types/loading/types.d.ts.map +1 -1
  278. package/dist/types/loading/utils.d.ts +0 -5
  279. package/dist/types/loading/utils.d.ts.map +1 -1
  280. package/dist/types/masonry/Masonry.d.ts +0 -4
  281. package/dist/types/masonry/Masonry.d.ts.map +1 -1
  282. package/dist/types/menu/_shared/MenuLink.d.ts +0 -4
  283. package/dist/types/menu/_shared/MenuLink.d.ts.map +1 -1
  284. package/dist/types/menu/_shared/MobileNav.d.ts +0 -6
  285. package/dist/types/menu/_shared/MobileNav.d.ts.map +1 -1
  286. package/dist/types/menu/_shared/NavBar.d.ts +0 -8
  287. package/dist/types/menu/_shared/NavBar.d.ts.map +1 -1
  288. package/dist/types/menu/basic-menu/BasicMenu.d.ts +2 -16
  289. package/dist/types/menu/basic-menu/BasicMenu.d.ts.map +1 -1
  290. package/dist/types/menu/mega-menu/MegaMenu.d.ts +0 -8
  291. package/dist/types/menu/mega-menu/MegaMenu.d.ts.map +1 -1
  292. package/dist/types/menu/mega-menu/_components/MegaMenuItem.d.ts +0 -12
  293. package/dist/types/menu/mega-menu/_components/MegaMenuItem.d.ts.map +1 -1
  294. package/dist/types/menu/sidebar/Sidebar.d.ts +1 -16
  295. package/dist/types/menu/sidebar/Sidebar.d.ts.map +1 -1
  296. package/dist/types/menu/sidebar/_components/SidebarButton.d.ts +0 -6
  297. package/dist/types/menu/sidebar/_components/SidebarButton.d.ts.map +1 -1
  298. package/dist/types/menu/sidebar/_components/SidebarItem.d.ts +0 -10
  299. package/dist/types/menu/sidebar/_components/SidebarItem.d.ts.map +1 -1
  300. package/dist/types/menu/sidebar/_components/SidebarMenu.d.ts +0 -4
  301. package/dist/types/menu/sidebar/_components/SidebarMenu.d.ts.map +1 -1
  302. package/dist/types/menu/types.d.ts +2 -11
  303. package/dist/types/menu/types.d.ts.map +1 -1
  304. package/dist/types/menu/utils.d.ts +0 -22
  305. package/dist/types/menu/utils.d.ts.map +1 -1
  306. package/dist/types/modal/Modal.d.ts +1 -12
  307. package/dist/types/modal/Modal.d.ts.map +1 -1
  308. package/dist/types/modal/types.d.ts +3 -4
  309. package/dist/types/modal/types.d.ts.map +1 -1
  310. package/dist/types/modal/utils.d.ts +1 -5
  311. package/dist/types/modal/utils.d.ts.map +1 -1
  312. package/dist/types/pagination/Pagination.d.ts +2 -11
  313. package/dist/types/pagination/Pagination.d.ts.map +1 -1
  314. package/dist/types/pagination/types.d.ts +1 -1
  315. package/dist/types/pagination/types.d.ts.map +1 -1
  316. package/dist/types/pagination/utils.d.ts +5 -12
  317. package/dist/types/pagination/utils.d.ts.map +1 -1
  318. package/dist/types/popconfirm/Popconfirm.d.ts +0 -4
  319. package/dist/types/popconfirm/Popconfirm.d.ts.map +1 -1
  320. package/dist/types/popover/Popover.d.ts +0 -5
  321. package/dist/types/popover/Popover.d.ts.map +1 -1
  322. package/dist/types/progress/Progress.d.ts +0 -3
  323. package/dist/types/progress/Progress.d.ts.map +1 -1
  324. package/dist/types/qrcode/QRCode.d.ts +0 -6
  325. package/dist/types/qrcode/QRCode.d.ts.map +1 -1
  326. package/dist/types/radio/utils.d.ts +1 -1
  327. package/dist/types/segmented/Segmented.d.ts +0 -4
  328. package/dist/types/segmented/Segmented.d.ts.map +1 -1
  329. package/dist/types/select/Select.d.ts +0 -5
  330. package/dist/types/select/Select.d.ts.map +1 -1
  331. package/dist/types/select/_components/SelectPanel.d.ts +2 -3
  332. package/dist/types/select/_components/SelectPanel.d.ts.map +1 -1
  333. package/dist/types/select/types.d.ts +1 -1
  334. package/dist/types/select/types.d.ts.map +1 -1
  335. package/dist/types/skeleton/utils.d.ts.map +1 -1
  336. package/dist/types/slider/Slider.d.ts.map +1 -1
  337. package/dist/types/slider/utils.d.ts +0 -1
  338. package/dist/types/slider/utils.d.ts.map +1 -1
  339. package/dist/types/splitter/Splitter.d.ts +4 -4
  340. package/dist/types/statistic/Statistic.d.ts +1 -1
  341. package/dist/types/statistic/utils.d.ts +2 -4
  342. package/dist/types/statistic/utils.d.ts.map +1 -1
  343. package/dist/types/steps/Steps.d.ts.map +1 -1
  344. package/dist/types/steps/_components/StepsContent.d.ts +1 -10
  345. package/dist/types/steps/_components/StepsContent.d.ts.map +1 -1
  346. package/dist/types/steps/types.d.ts +1 -1
  347. package/dist/types/steps/types.d.ts.map +1 -1
  348. package/dist/types/steps/utils.d.ts +0 -9
  349. package/dist/types/steps/utils.d.ts.map +1 -1
  350. package/dist/types/switch/Switch.d.ts +1 -9
  351. package/dist/types/switch/Switch.d.ts.map +1 -1
  352. package/dist/types/switch/utils.d.ts.map +1 -1
  353. package/dist/types/table/Table.d.ts +7 -11
  354. package/dist/types/table/Table.d.ts.map +1 -1
  355. package/dist/types/table/_components/TableBody.d.ts.map +1 -1
  356. package/dist/types/table/_components/TableEditDrawer.d.ts +0 -8
  357. package/dist/types/table/_components/TableEditDrawer.d.ts.map +1 -1
  358. package/dist/types/table/_components/TableHeader.d.ts +0 -7
  359. package/dist/types/table/_components/TableHeader.d.ts.map +1 -1
  360. package/dist/types/table/_components/TableInfoValue.d.ts +0 -10
  361. package/dist/types/table/_components/TableInfoValue.d.ts.map +1 -1
  362. package/dist/types/table/_components/TablePagination.d.ts +0 -12
  363. package/dist/types/table/_components/TablePagination.d.ts.map +1 -1
  364. package/dist/types/table/_components/TableRowActions.d.ts +0 -6
  365. package/dist/types/table/_components/TableRowActions.d.ts.map +1 -1
  366. package/dist/types/table/types.d.ts +2 -18
  367. package/dist/types/table/types.d.ts.map +1 -1
  368. package/dist/types/table/utils.d.ts +1 -7
  369. package/dist/types/table/utils.d.ts.map +1 -1
  370. package/dist/types/tabs/Tabs.d.ts +0 -1
  371. package/dist/types/tabs/Tabs.d.ts.map +1 -1
  372. package/dist/types/tabs/_components/TabsContent.d.ts +0 -5
  373. package/dist/types/tabs/_components/TabsContent.d.ts.map +1 -1
  374. package/dist/types/tabs/_components/TabsList.d.ts +6 -6
  375. package/dist/types/tabs/_components/TabsTrigger.d.ts +1 -1
  376. package/dist/types/tabs/utils.d.ts +0 -5
  377. package/dist/types/tabs/utils.d.ts.map +1 -1
  378. package/dist/types/tag/utils.d.ts +0 -8
  379. package/dist/types/tag/utils.d.ts.map +1 -1
  380. package/dist/types/theme-customizer/ThemeCustomizer.d.ts +1 -1
  381. package/dist/types/timeline/Timeline.d.ts +1 -3
  382. package/dist/types/timeline/Timeline.d.ts.map +1 -1
  383. package/dist/types/toast/Toast.d.ts +2 -2
  384. package/dist/types/toast/useToast.d.ts +2 -4
  385. package/dist/types/toast/useToast.d.ts.map +1 -1
  386. package/dist/types/toast/utils.d.ts +0 -1
  387. package/dist/types/toast/utils.d.ts.map +1 -1
  388. package/dist/types/tooltip/Tooltip.d.ts.map +1 -1
  389. package/dist/types/tooltip/utils.d.ts +0 -6
  390. package/dist/types/tooltip/utils.d.ts.map +1 -1
  391. package/dist/types/tour/Tour.d.ts +0 -6
  392. package/dist/types/tour/Tour.d.ts.map +1 -1
  393. package/dist/types/tour/utils.d.ts +1 -1
  394. package/dist/types/tour/utils.d.ts.map +1 -1
  395. package/dist/types/transfer/Transfer.d.ts +0 -5
  396. package/dist/types/transfer/Transfer.d.ts.map +1 -1
  397. package/dist/types/transfer/utils.d.ts +1 -3
  398. package/dist/types/transfer/utils.d.ts.map +1 -1
  399. package/dist/types/tree/Tree.d.ts +0 -6
  400. package/dist/types/tree/Tree.d.ts.map +1 -1
  401. package/dist/types/tree/utils.d.ts +1 -1
  402. package/dist/types/tree-select/TreeSelect.d.ts +0 -6
  403. package/dist/types/tree-select/TreeSelect.d.ts.map +1 -1
  404. package/dist/types/tree-select/_components/TreeSelectPanel.d.ts +1 -1
  405. package/dist/types/tree-select/utils.d.ts +1 -1
  406. package/dist/types/typography/utils.d.ts.map +1 -1
  407. package/dist/types/upload/_components/List.d.ts +0 -7
  408. package/dist/types/upload/_components/List.d.ts.map +1 -1
  409. package/dist/types/upload/_components/ReviewList.d.ts +0 -8
  410. package/dist/types/upload/_components/ReviewList.d.ts.map +1 -1
  411. package/dist/types/upload/_components/UploadDragDropButton.d.ts +0 -8
  412. package/dist/types/upload/_components/UploadDragDropButton.d.ts.map +1 -1
  413. package/dist/types/upload/_components/UploadReviewButton.d.ts +0 -5
  414. package/dist/types/upload/_components/UploadReviewButton.d.ts.map +1 -1
  415. package/dist/types/upload/types.d.ts +5 -8
  416. package/dist/types/upload/types.d.ts.map +1 -1
  417. package/dist/types/upload/useUpload.d.ts +0 -10
  418. package/dist/types/upload/useUpload.d.ts.map +1 -1
  419. package/dist/types/upload/utils.d.ts +0 -4
  420. package/dist/types/upload/utils.d.ts.map +1 -1
  421. package/dist/typewriter.js +1 -1
  422. package/dist/typography.js +2 -2
  423. package/dist/typography.js.map +1 -1
  424. package/dist/upload.js +8 -8
  425. package/dist/upload.js.map +1 -1
  426. package/package.json +3 -3
  427. package/dist/chunk-3ABWBQCS.js.map +0 -1
  428. package/dist/chunk-47FHUOLT.js.map +0 -1
  429. package/dist/chunk-54HHEXXD.js.map +0 -1
  430. package/dist/chunk-BDV4GOEN.js.map +0 -1
  431. package/dist/chunk-CYLXW66E.js.map +0 -1
  432. package/dist/chunk-DKENCYHA.js.map +0 -1
  433. package/dist/chunk-DUCIAQGR.js.map +0 -1
  434. package/dist/chunk-ELHESRRH.js.map +0 -1
  435. package/dist/chunk-FFXRFQSU.js.map +0 -1
  436. package/dist/chunk-FNJHS5KQ.js.map +0 -1
  437. package/dist/chunk-IO4346TF.js.map +0 -1
  438. package/dist/chunk-IP2J3BWY.js.map +0 -1
  439. package/dist/chunk-JNZODUXP.js.map +0 -1
  440. package/dist/chunk-KCYM2JXP.js.map +0 -1
  441. package/dist/chunk-LBQMEHK6.js.map +0 -1
  442. package/dist/chunk-LBXIPDAB.js.map +0 -1
  443. package/dist/chunk-LEOIKO7C.js.map +0 -1
  444. package/dist/chunk-LZHERDNB.js.map +0 -1
  445. package/dist/chunk-NPM7IDYV.js.map +0 -1
  446. package/dist/chunk-NS7FKOFI.js.map +0 -1
  447. package/dist/chunk-P7Z5BREP.js.map +0 -1
  448. package/dist/chunk-QDFDMWXD.js.map +0 -1
  449. package/dist/chunk-QNOHFHVL.js.map +0 -1
  450. package/dist/chunk-QZRBO7BE.js.map +0 -1
  451. package/dist/chunk-RIBB5OJV.js.map +0 -1
  452. package/dist/chunk-S66GKX2W.js.map +0 -1
  453. package/dist/chunk-TCYDVNSU.js.map +0 -1
  454. package/dist/chunk-TXRQCHOR.js.map +0 -1
  455. package/dist/chunk-V7KDUUV6.js.map +0 -1
  456. package/dist/chunk-XUKVQO6M.js.map +0 -1
  457. package/dist/chunk-YZ7MDC6B.js.map +0 -1
  458. package/dist/chunk-ZXYQ2ZPR.js.map +0 -1
  459. /package/dist/{chunk-2IEXY3OZ.js.map → chunk-CVKAGR3D.js.map} +0 -0
package/dist/chart.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/chart/line-chart/LineChart.tsx","../src/chart/_shared/ChartFrame.tsx","../src/chart/_shared/ChartSkeleton.tsx","../src/chart/_shared/cartesian.tsx","../src/chart/_shared/format.ts","../src/chart/_shared/paths.ts","../src/chart/_shared/scale.ts","../src/chart/_shared/useChartSize.ts","../src/chart/_shared/animation.ts","../src/chart/bar-chart/BarChart.tsx","../src/chart/bar-chart/bars.ts","../src/chart/pie-chart/PieChart.tsx","../src/chart/sparkline/Sparkline.tsx","../src/chart/gauge/Gauge.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useId, useMemo, useState } from \"react\";\nimport type { CartesianChartProps } from \"../types\";\nimport { ChartFrame, nextIndex, type TooltipState } from \"../_shared/ChartFrame\";\nimport { YGrid, XLabels, labelStride, plotBox } from \"../_shared/cartesian\";\nimport { makeFormatters, seriesColor } from \"../_shared/format\";\nimport { areaPath, linePath, type Curve, type Point } from \"../_shared/paths\";\nimport { extent, linearScale, niceDomain } from \"../_shared/scale\";\nimport { useChartSize } from \"../_shared/useChartSize\";\nimport { CartesianSkeleton } from \"../_shared/ChartSkeleton\";\nimport { revealRectProps } from \"../_shared/animation\";\n\nexport interface LineChartProps<T> extends CartesianChartProps<T> {\n /** `\"smooth\"`: monoton eğri (veriyi aşan tepe çizmez). Varsayılan `\"linear\"`. */\n curve?: Curve;\n /** Çizginin altını serinin renginde hafif (%10) doldurur — Area grafiği. */\n area?: boolean;\n /**\n * y ekseni sıfırdan başlasın mı. Varsayılan: `area`da `true` (alan büyüklük\n * anlatır), çizgide `false` (değişim anlatır; sıfır eklemek eğilimi ezer).\n */\n includeZero?: boolean;\n}\n\nconst toNumber = (v: unknown): number | null => (typeof v === \"number\" && Number.isFinite(v) ? v : null);\n\n/**\n * Faz 16.9 — çizgi / alan grafiği. Zaman ya da sıralı kategori boyunca\n * değişim. 2px çizgi; üzerine gelince dikey kılavuz en yakın noktaya oturur ve\n * o noktadaki TÜM serileri tek tooltip'te gösterir. Klavye: odaklanıp ok\n * tuşlarıyla noktalar gezilir. Eksik (`null`) değer çizgiyi böler — uydurulmaz.\n */\nexport function LineChart<T>({\n data,\n xKey,\n series,\n label,\n curve = \"linear\",\n area = false,\n includeZero = area,\n xFormatter,\n valueFormatter,\n locale = \"tr-TR\",\n showGrid = true,\n showLegend,\n emptyText = \"Veri yok\",\n skeleton,\n animated = true,\n className,\n}: Readonly<LineChartProps<T>>) {\n const [plotRef, size] = useChartSize<HTMLDivElement>();\n const clipId = `mari-line-${useId().replace(/[^\\w-]/g, \"\")}`;\n const [active, setActive] = useState<number | null>(null);\n const fmt = useMemo(() => makeFormatters(locale, valueFormatter), [locale, valueFormatter]);\n\n const xLabels = data.map((row) => (xFormatter ? xFormatter(row[xKey], row) : String(row[xKey] ?? \"\")));\n const colors = series.map((s, i) => seriesColor(s.color, i));\n const values = series.flatMap((s) => data.map((row) => toNumber(row[s.key])));\n const [lo, hi] = extent(values);\n const domain = niceDomain(includeZero ? Math.min(0, lo) : lo, includeZero ? Math.max(0, hi) : hi);\n const box = plotBox(size.width, size.height, size.rem, domain.ticks.map(fmt.axis));\n const y = linearScale([domain.min, domain.max], [box.top + box.height, box.top]);\n const xAt = (i: number) => (data.length <= 1 ? box.left + box.width / 2 : box.left + (i * box.width) / (data.length - 1));\n const stride = labelStride(xLabels, box.width, size.rem);\n const baseY = y(Math.max(domain.min, Math.min(0, domain.max)));\n\n const legend = (showLegend ?? series.length > 1) ? series.map((s, i) => ({ name: s.name, color: colors[i]!, shape: area ? (\"rect\" as const) : (\"line\" as const) })) : undefined;\n\n const tooltipAt = (i: number): TooltipState => {\n const row = data[i]!;\n const ys = series.map((s) => toNumber(row[s.key])).filter((v): v is number => v !== null);\n return {\n x: xAt(i),\n y: ys.length ? y(Math.max(...ys)) : box.top + box.height / 2,\n title: xLabels[i],\n rows: series.map((s, si) => {\n const v = toNumber(row[s.key]);\n return { name: s.name, color: colors[si]!, shape: \"line\", value: v === null ? \"—\" : fmt.value(v) };\n }),\n };\n };\n\n const onPointerMove = (e: React.PointerEvent<SVGRectElement>) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const px = e.clientX - rect.left;\n const i = data.length <= 1 ? 0 : Math.round((px / rect.width) * (data.length - 1));\n setActive(Math.max(0, Math.min(data.length - 1, i)));\n };\n\n const ready = size.width > 0 && box.width > 0 && box.height > 0;\n\n return (\n <ChartFrame\n label={label}\n className={className}\n skeleton={skeleton}\n skeletonPlot={<CartesianSkeleton shape=\"line\" count={data.length || 6} />}\n skeletonLegend={legend?.length ?? 0}\n empty={data.length === 0 || series.length === 0}\n emptyText={emptyText}\n legend={legend}\n table={{\n columns: [String(xKey), ...series.map((s) => s.name)],\n rows: data.map((row, i) => [xLabels[i]!, ...series.map((s) => {\n const v = toNumber(row[s.key]);\n return v === null ? \"—\" : fmt.value(v);\n })]),\n }}\n tooltip={active !== null && data[active] ? tooltipAt(active) : null}\n plotRef={plotRef}\n plotWidth={size.width}\n onKeyDown={(e) => {\n const next = nextIndex(e.key, active, data.length);\n if (next === null) return;\n e.preventDefault();\n setActive(next);\n }}\n onBlur={() => setActive(null)}\n >\n {ready && (\n <svg aria-hidden width={size.width} height={size.height} className=\"absolute inset-0 overflow-visible\">\n <YGrid domain={domain} y={y} box={box} format={fmt.axis} showGrid={showGrid} zeroLine />\n <XLabels labels={xLabels} xAt={xAt} box={box} stride={stride} />\n {animated && (\n <defs>\n {/* Çizgi kalınlığı ve uç yuvarlağı kırpılmasın: kutunun her yanında pay. */}\n <clipPath id={clipId}>\n <rect x={box.left - 4} y={0} width={box.width + 8} height={size.height} {...revealRectProps(animated, box.left - 4)} />\n </clipPath>\n </defs>\n )}\n <g clipPath={animated ? `url(#${clipId})` : undefined}>\n {series.map((s, si) => {\n const pts: Array<Point | null> = data.map((row, i) => {\n const v = toNumber(row[s.key]);\n return v === null ? null : [xAt(i), y(v)];\n });\n return (\n <g key={s.key}>\n {area && <path d={areaPath(pts, baseY, curve)} fill={colors[si]} fillOpacity={0.1} />}\n <path d={linePath(pts, curve)} fill=\"none\" stroke={colors[si]} strokeWidth={2} strokeLinejoin=\"round\" strokeLinecap=\"round\" />\n </g>\n );\n })}\n </g>\n {active !== null && (\n <g>\n <line x1={xAt(active)} x2={xAt(active)} y1={box.top} y2={box.top + box.height} className=\"stroke-mari-muted/50\" strokeWidth={1} />\n {series.map((s, si) => {\n const v = toNumber(data[active]?.[s.key]);\n return v === null ? null : (\n <circle key={s.key} cx={xAt(active)} cy={y(v)} r={4} fill={colors[si]} className=\"stroke-mari-surface\" strokeWidth={2} />\n );\n })}\n </g>\n )}\n {/* Tüm çizim alanı vuruş hedefi: okuyucu tarihe nişan alır, 2px çizgiye değil. */}\n <rect\n x={box.left}\n y={box.top}\n width={box.width}\n height={box.height}\n fill=\"transparent\"\n onPointerMove={onPointerMove}\n onPointerLeave={() => setActive(null)}\n />\n </svg>\n )}\n </ChartFrame>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { cn } from \"@mari-ui/core\";\nimport { Empty } from \"../../empty\";\nimport { ChartEmpty, LegendSkeleton } from \"./ChartSkeleton\";\n\nexport interface LegendItem {\n name: string;\n color: string;\n /** Lejant işareti işaretlediği şekle benzer: çubuk/alan/dilim → kare, çizgi → kısa çizgi. */\n shape: \"rect\" | \"line\";\n}\n\nexport interface TooltipRow extends LegendItem {\n value: string;\n}\n\nexport interface TooltipState {\n /** Grafik alanı içindeki piksel konumu. */\n x: number;\n y: number;\n title?: string;\n rows: TooltipRow[];\n}\n\nexport interface TableModel {\n columns: string[];\n rows: Array<Array<string>>;\n}\n\nfunction Swatch({ color, shape }: Pick<LegendItem, \"color\" | \"shape\">) {\n return shape === \"line\" ? (\n <span aria-hidden className=\"h-0.5 w-3 shrink-0 rounded-full\" style={{ backgroundColor: color }} />\n ) : (\n <span aria-hidden className=\"size-2.5 shrink-0 rounded-sm\" style={{ backgroundColor: color }} />\n );\n}\n\nexport function ChartLegend({ items }: Readonly<{ items: LegendItem[] }>) {\n return (\n <ul className=\"flex flex-wrap gap-x-4 gap-y-1 text-xs text-mari-muted\">\n {items.map((item) => (\n <li key={item.name} className=\"flex items-center gap-1.5\">\n <Swatch color={item.color} shape={item.shape} />\n {item.name}\n </li>\n ))}\n </ul>\n );\n}\n\n/**\n * Tek tooltip, o noktadaki TÜM seriler. Değer önde ve güçlü, seri adı ikincil\n * (lejantın tersi: okuyucu seriyi biliyor, sayıyı istiyor). Görsel kolaylık —\n * değerlere tablo ile de ulaşılır, bu yüzden ekran okuyucudan gizli.\n */\nfunction ChartTooltip({ state, width }: Readonly<{ state: TooltipState; width: number }>) {\n const flip = state.x > width / 2;\n return (\n <div\n aria-hidden\n className=\"pointer-events-none absolute z-mari-tooltip min-w-32 rounded-md border border-mari-border bg-mari-surface px-3 py-2 text-xs shadow-mari-md\"\n style={{\n left: state.x,\n top: state.y,\n transform: `translate(${flip ? \"calc(-100% - 0.75rem)\" : \"0.75rem\"}, -50%)`,\n }}\n >\n {state.title && <p className=\"mb-1 text-mari-muted\">{state.title}</p>}\n <ul className=\"flex flex-col gap-1\">\n {state.rows.map((row) => (\n <li key={row.name} className=\"flex items-center gap-2\">\n <Swatch color={row.color} shape=\"line\" />\n <span className=\"font-semibold tabular-nums text-mari-foreground\">{row.value}</span>\n <span className=\"text-mari-muted\">{row.name}</span>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\nexport interface ChartFrameProps {\n label: string;\n className?: string;\n skeleton?: boolean;\n empty: boolean;\n emptyText: string;\n legend?: LegendItem[];\n table: TableModel;\n tooltip: TooltipState | null;\n plotRef: React.Ref<HTMLDivElement>;\n plotWidth: number;\n /** Klavye: ok tuşlarıyla odak noktasını gezdirmek için (grafik türü işler). */\n onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;\n onBlur?: () => void;\n children: React.ReactNode;\n /** Lejant konumu. Varsayılan üstte (okuyucu önce neyin ne olduğunu görsün). */\n legendPosition?: \"top\" | \"bottom\";\n /** İskelette çizim alanı — grafiğin kendi şekli (`ChartSkeleton`). */\n skeletonPlot: React.ReactNode;\n /** İskelette lejant öğesi sayısı (0 → lejant yok); yüklü halle aynı yerde. */\n skeletonLegend?: number;\n}\n\n/**\n * Tüm grafiklerin ortak kabuğu: lejant, ölçülen çizim alanı, tooltip, boş ve\n * iskelet hali, ekran okuyucu tablosu. Değerler tooltip'e kapanmaz — aynı veri\n * görünmez bir `<table>`da da var (renk tek başına kimlik taşımaz kuralı).\n */\nexport function ChartFrame({\n label,\n className,\n skeleton,\n empty,\n emptyText,\n legend,\n table,\n tooltip,\n plotRef,\n plotWidth,\n onKeyDown,\n onBlur,\n children,\n legendPosition = \"top\",\n skeletonPlot,\n skeletonLegend = 0,\n}: Readonly<ChartFrameProps>) {\n if (skeleton) {\n const legendStub = skeletonLegend > 0 ? <LegendSkeleton count={skeletonLegend} /> : null;\n return (\n <div aria-hidden data-skeleton=\"\" className={cn(\"pointer-events-none flex h-64 w-full min-w-0 flex-col gap-3\", className)}>\n {legendPosition === \"top\" && legendStub}\n <div className=\"relative min-h-0 flex-1\">{skeletonPlot}</div>\n {legendPosition === \"bottom\" && legendStub}\n </div>\n );\n }\n\n const interactive = !empty && Boolean(onKeyDown);\n const legendNode = legend && legend.length > 0 && !empty ? <ChartLegend items={legend} /> : null;\n\n return (\n <figure aria-label={label} className={cn(\"flex h-64 w-full min-w-0 flex-col gap-3\", className)}>\n {legendPosition === \"top\" && legendNode}\n <div\n ref={plotRef}\n className=\"relative min-h-0 flex-1 rounded-sm focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-mari-ring\"\n {...(interactive\n ? { role: \"group\", tabIndex: 0, \"aria-label\": `${label}. Değerleri ok tuşlarıyla gezin.`, onKeyDown, onBlur }\n : {})}\n >\n {empty ? (\n <ChartEmpty plot={skeletonPlot}>\n <Empty size=\"sm\" title={emptyText} />\n </ChartEmpty>\n ) : (\n children\n )}\n {tooltip && <ChartTooltip state={tooltip} width={plotWidth} />}\n </div>\n {legendPosition === \"bottom\" && legendNode}\n {!empty && (\n <table className=\"sr-only\">\n <caption>{label}</caption>\n <thead>\n <tr>\n {table.columns.map((c) => (\n <th key={c} scope=\"col\">\n {c}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {table.rows.map((row, i) => (\n <tr key={i}>\n {row.map((cell, j) => (j === 0 ? <th key={j} scope=\"row\">{cell}</th> : <td key={j}>{cell}</td>))}\n </tr>\n ))}\n </tbody>\n </table>\n )}\n </figure>\n );\n}\n\n/** Ok/Home/End ile 0…count-1 arasında gezinme; diğer tuşlarda `null`. */\nexport function nextIndex(key: string, current: number | null, count: number): number | null {\n if (count === 0) return null;\n switch (key) {\n case \"ArrowRight\":\n case \"ArrowDown\":\n return current === null ? 0 : Math.min(current + 1, count - 1);\n case \"ArrowLeft\":\n case \"ArrowUp\":\n return current === null ? count - 1 : Math.max(current - 1, 0);\n case \"Home\":\n return 0;\n case \"End\":\n return count - 1;\n default:\n return null;\n }\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { cn } from \"@mari-ui/core\";\nimport { skeletonFill } from \"../../lib/skeleton\";\n\n/**\n * Grafik iskeletleri — tek düz kutu yerine grafiğin KENDİ şekli (çubuklar,\n * çizgi, dilim halkası, gösterge yayı) ve yüklü haldeki yerleşim (eksen\n * etiketleri, lejant). Yüklenince hiçbir şey kaymaz; okuyucu ne geleceğini\n * şekilden anlar. Parıltı ortak `skeletonFill` — SVG şekiller için dolgu bir\n * `<div>`e verilip şekil CSS maskesiyle kesilir (SVG'de gradyan kaydırmak\n * yerine aynı parıltı).\n */\n\n/** SVG işaretlemesini maske görseline çevirir (kutuya gerilir). */\nexport function svgMask(svg: string): React.CSSProperties {\n const url = `url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`;\n return { maskImage: url, WebkitMaskImage: url, maskSize: \"100% 100%\", WebkitMaskSize: \"100% 100%\", maskRepeat: \"no-repeat\", WebkitMaskRepeat: \"no-repeat\" };\n}\n\n/** Kutuya gerilen dalga; çizgi kalınlığı gerilmez (`non-scaling-stroke`). */\nexport function waveMask(strokeWidth: number): React.CSSProperties {\n return svgMask(\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"none\"><path d=\"M1 72 C 12 70, 16 48, 27 52 S 42 74, 53 58 S 68 22, 80 30 S 94 40, 99 18\" fill=\"none\" stroke=\"black\" stroke-width=\"${strokeWidth}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" vector-effect=\"non-scaling-stroke\"/></svg>`\n );\n}\n\n/** Metin satırı yer tutucusu: kutu bir satır yüksekliğinde, çubuk yazı gövdesi kadar. */\nfunction TextStub({ className }: Readonly<{ className?: string }>) {\n return <span aria-hidden className={cn(\"block h-2 rounded-sm\", skeletonFill(true), className)} />;\n}\n\n/** Ad yer tutucuları dönüşümlü iki uzunlukta — tek tip çubuk dizisi gibi görünmesin. */\nconst categoryStubWidth = (i: number) => (i % 2 ? \"w-10\" : \"w-14\");\n\nexport function LegendSkeleton({ count }: Readonly<{ count: number }>) {\n return (\n <div className=\"flex flex-wrap gap-x-4 gap-y-1\">\n {Array.from({ length: count }, (_, i) => (\n <span key={i} className=\"flex h-4 items-center gap-1.5\">\n <span className={cn(\"size-2.5 rounded-sm\", skeletonFill(true))} />\n <TextStub className={categoryStubWidth(i)} />\n </span>\n ))}\n </div>\n );\n}\n\n/** Çubuk boyları — sabit, rastgele değil (her render aynı; SSR ile uyumlu). */\nconst BAR_HEIGHTS = [0.55, 0.8, 0.4, 0.95, 0.65, 0.75, 0.5, 0.85, 0.6, 0.7, 0.45, 0.9];\n\nexport type CartesianSkeletonShape = \"bar\" | \"barHorizontal\" | \"line\";\n\n/**\n * Kartezyen iskelet: `plotBox` ile aynı boşluklar (sol değer etiketleri,\n * alt kategori etiketleri; üst 0.5rem, sağ 0.75rem, alt 1.75rem).\n */\nexport function CartesianSkeleton({ shape, count }: Readonly<{ shape: CartesianSkeletonShape; count: number }>) {\n const n = Math.max(3, Math.min(12, count));\n const horizontal = shape === \"barHorizontal\";\n return (\n <div className=\"absolute inset-0\">\n {/* Sol etiketler: dikeyde değerler (kısa), yatayda kategori adları (uzun). */}\n <div className={cn(\"absolute top-2 bottom-7 left-0 flex flex-col items-end\", horizontal ? \"w-16 justify-around\" : \"w-8 justify-between\")}>\n {Array.from({ length: horizontal ? n : 4 }, (_, i) => (\n <TextStub key={i} className={horizontal ? categoryStubWidth(i) : \"w-6\"} />\n ))}\n </div>\n <div className={cn(\"absolute top-2 right-3 bottom-7\", horizontal ? \"left-18\" : \"left-10\")}>\n {!horizontal && (\n <div className=\"absolute inset-0 flex flex-col justify-between\">\n {Array.from({ length: 4 }, (_, i) => (\n <span key={i} className=\"h-px bg-mari-border/70\" />\n ))}\n </div>\n )}\n {shape === \"line\" && <div className={cn(\"absolute inset-0\", skeletonFill(true))} style={waveMask(2)} />}\n {shape === \"bar\" && (\n <div className=\"absolute inset-0 flex items-end justify-around\">\n {Array.from({ length: n }, (_, i) => (\n <span key={i} className={cn(\"w-[min(1.5rem,6%)] rounded-t-sm\", skeletonFill(true))} style={{ height: `${BAR_HEIGHTS[i % BAR_HEIGHTS.length]! * 100}%` }} />\n ))}\n </div>\n )}\n {horizontal && (\n <div className=\"absolute inset-0 flex flex-col justify-around border-l border-mari-border/70\">\n {Array.from({ length: n }, (_, i) => (\n <span key={i} className={cn(\"rounded-r-sm\", skeletonFill(true))} style={{ width: `${BAR_HEIGHTS[i % BAR_HEIGHTS.length]! * 100}%`, height: `min(1.5rem, ${60 / n}%)` }} />\n ))}\n </div>\n )}\n </div>\n {/* Alt etiketler: dikeyde kategoriler, yatayda değerler. */}\n <div className={cn(\"absolute right-3 bottom-0 flex h-5 items-center justify-around\", horizontal ? \"left-18\" : \"left-10\")}>\n {Array.from({ length: horizontal ? 4 : Math.min(n, 6) }, (_, i) => (\n <TextStub key={i} className=\"w-8\" />\n ))}\n </div>\n </div>\n );\n}\n\n/**\n * Boş durum — tüm grafiklerde aynı: arkada grafiğin iskelet şekli (aynı\n * eksenler/işaretler) bulanık ve SABİT (parıltı yok: yüklenmiyor, veri yok),\n * önde uyarı. Okuyucu burada ne tür bir grafik olacağını görür; düz bir\n * \"Veri yok\" kutusu gibi alan boş kalmaz.\n */\nexport function ChartEmpty({ plot, children, compact = false }: Readonly<{ plot: React.ReactNode; children: React.ReactNode; compact?: boolean }>) {\n return (\n <div className=\"absolute inset-0\">\n {/* Küçük (Sparkline) şekilde ince çizgi fazla bulanıklıkta kaybolur. */}\n <div aria-hidden className={cn(\"absolute inset-0 [&_*]:animate-none\", compact ? \"blur-[1px]\" : \"blur-[2px]\")}>\n {plot}\n </div>\n <div className=\"absolute inset-0 grid place-items-center\">{children}</div>\n </div>\n );\n}\n\n/** Pasta / halka: çizim alanına sığan en büyük daire (grafikteki `outer` gibi 6px pay). */\nexport function PieSkeleton({ donut }: Readonly<{ donut: boolean }>) {\n return (\n <div className=\"absolute inset-1.5 grid place-items-center\">\n <div\n className={cn(\"aspect-square h-full max-w-full rounded-full\", skeletonFill(true))}\n // Halka: iç yarıçap dış yarıçapın %62'si (PieChart ile aynı).\n style={donut ? { maskImage: \"radial-gradient(circle closest-side, transparent 61.5%, black 62%)\", WebkitMaskImage: \"radial-gradient(circle closest-side, transparent 61.5%, black 62%)\" } : undefined}\n />\n </div>\n );\n}\n","import type { NiceDomain } from \"./scale\";\n\n/** Ortalama karakter genişliği ≈ 0.6em; eksen yazısı `text-xs` = 0.75rem. */\nexport const approxTextWidth = (text: string, rem: number, sizeRem = 0.75) => text.length * sizeRem * rem * 0.6;\n\nexport interface PlotBox {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n}\n\n/**\n * Çizim alanı: sol boşluk en uzun y etiketine göre, alt boşluk x etiketlerine.\n * Hepsi rem'e bağlı — büyük ekran ölçeğinde orantılı büyür.\n */\nexport function plotBox(width: number, height: number, rem: number, leftLabels: string[], hasBottomLabels = true): PlotBox {\n const left = Math.ceil(Math.max(0, ...leftLabels.map((l) => approxTextWidth(l, rem))) + rem * 0.5);\n const right = Math.ceil(rem * 0.75);\n const top = Math.ceil(rem * 0.5);\n const bottom = hasBottomLabels ? Math.ceil(rem * 1.75) : Math.ceil(rem * 0.5);\n return { left, right, top, bottom, width: Math.max(0, width - left - right), height: Math.max(0, height - top - bottom) };\n}\n\n/** Sığmayan x etiketlerini seyreltir: her `k`'ıncıyı gösterir (ilk ve son korunur). */\nexport function labelStride(labels: string[], available: number, rem: number): number {\n if (labels.length <= 1 || available <= 0) return 1;\n const widest = Math.max(...labels.map((l) => approxTextWidth(l, rem))) + rem;\n return Math.max(1, Math.ceil((widest * labels.length) / available));\n}\n\n/** Yatay kılavuz çizgileri + y ekseni değerleri. Kılavuz saç teli, düz, geri planda. */\nexport function YGrid({\n domain,\n y,\n box,\n format,\n showGrid,\n zeroLine,\n}: Readonly<{\n domain: NiceDomain;\n y: (v: number) => number;\n box: PlotBox;\n format: (v: number) => string;\n showGrid: boolean;\n zeroLine: boolean;\n}>) {\n return (\n <g aria-hidden>\n {domain.ticks.map((t) => (\n <g key={t}>\n {showGrid && (\n <line x1={box.left} x2={box.left + box.width} y1={y(t)} y2={y(t)} className=\"stroke-mari-border\" strokeWidth={1} shapeRendering=\"crispEdges\" />\n )}\n <text x={box.left - 8} y={y(t)} dy=\"0.32em\" textAnchor=\"end\" className=\"fill-mari-muted text-xs tabular-nums\">\n {format(t)}\n </text>\n </g>\n ))}\n {zeroLine && domain.min < 0 && domain.max > 0 && (\n <line x1={box.left} x2={box.left + box.width} y1={y(0)} y2={y(0)} className=\"stroke-mari-muted/60\" strokeWidth={1} shapeRendering=\"crispEdges\" />\n )}\n </g>\n );\n}\n\n/** Dikey kılavuz + x değerleri (yatay çubuk grafiğinin değer ekseni). */\nexport function XValueGrid({ domain, x, box, format, showGrid }: Readonly<{ domain: NiceDomain; x: (v: number) => number; box: PlotBox; format: (v: number) => string; showGrid: boolean }>) {\n return (\n <g aria-hidden>\n {domain.ticks.map((t) => (\n <g key={t}>\n {showGrid && <line y1={box.top} y2={box.top + box.height} x1={x(t)} x2={x(t)} className=\"stroke-mari-border\" strokeWidth={1} shapeRendering=\"crispEdges\" />}\n <text x={x(t)} y={box.top + box.height + 8} dy=\"0.71em\" textAnchor=\"middle\" className=\"fill-mari-muted text-xs tabular-nums\">\n {format(t)}\n </text>\n </g>\n ))}\n </g>\n );\n}\n\n/** Gösterilecek x etiketi indeksleri: her `stride`'ıncı; son etiket öncekine yeterince uzaksa o da. */\nexport function visibleLabelIndexes(count: number, stride: number): number[] {\n const shown: number[] = [];\n for (let i = 0; i < count; i += stride) shown.push(i);\n const last = count - 1;\n const prev = shown[shown.length - 1] ?? 0;\n if (last > prev && last - prev >= stride * 0.6) shown.push(last);\n return shown;\n}\n\n/** Kategori etiketleri (alt eksen). */\nexport function XLabels({ labels, xAt, box, stride }: Readonly<{ labels: string[]; xAt: (i: number) => number; box: PlotBox; stride: number }>) {\n return (\n <g aria-hidden>\n {visibleLabelIndexes(labels.length, stride).map((i) => (\n <text key={i} x={xAt(i)} y={box.top + box.height + 8} dy=\"0.71em\" textAnchor=\"middle\" className=\"fill-mari-muted text-xs\">\n {labels[i]}\n </text>\n ))}\n </g>\n );\n}\n\n/**\n * Çubuk: veri ucunda 4px yuvarlak, taban tarafında köşeli (tabandan büyür).\n * `end`: veri ucunun yönü.\n */\nexport function barPath(x: number, y: number, w: number, h: number, radius: number, end: \"top\" | \"bottom\" | \"right\" | \"left\"): string {\n if (w <= 0 || h <= 0) return \"\";\n const r = Math.min(radius, (end === \"top\" || end === \"bottom\" ? w : h) / 2, end === \"top\" || end === \"bottom\" ? h : w);\n const f = (n: number) => Number(n.toFixed(2));\n const [x0, y0, x1, y1] = [f(x), f(y), f(x + w), f(y + h)];\n if (r <= 0) return `M${x0},${y0}H${x1}V${y1}H${x0}Z`;\n switch (end) {\n case \"top\":\n return `M${x0},${y1}V${f(y + r)}Q${x0},${y0},${f(x + r)},${y0}H${f(x + w - r)}Q${x1},${y0},${x1},${f(y + r)}V${y1}Z`;\n case \"bottom\":\n return `M${x0},${y0}H${x1}V${f(y + h - r)}Q${x1},${y1},${f(x + w - r)},${y1}H${f(x + r)}Q${x0},${y1},${x0},${f(y + h - r)}Z`;\n case \"right\":\n return `M${x0},${y0}H${f(x + w - r)}Q${x1},${y0},${x1},${f(y + r)}V${f(y + h - r)}Q${x1},${y1},${f(x + w - r)},${y1}H${x0}Z`;\n case \"left\":\n return `M${x1},${y0}V${y1}H${f(x + r)}Q${x0},${y1},${x0},${f(y + h - r)}V${f(y + r)}Q${x0},${y0},${f(x + r)},${y0}Z`;\n }\n}\n","import type { ChartColor } from \"../types\";\n\n/** Seri rengi → CSS değeri. Palet sırası: verilmezse `index`ten (8'den sonra başa dönmez, son renkte kalır). */\nexport function seriesColor(color: ChartColor | undefined, index: number): string {\n if (typeof color === \"string\") return `var(--mari-color-${color}-solid)`;\n const slot = color ?? Math.min(index + 1, 8);\n return `var(--mari-color-chart-${slot})`;\n}\n\nexport function makeFormatters(locale: string, valueFormatter?: (value: number) => string) {\n const full = new Intl.NumberFormat(locale, { maximumFractionDigits: 2 });\n const compact = new Intl.NumberFormat(locale, { notation: \"compact\", maximumFractionDigits: 1 });\n return {\n /** Tooltip ve tablo: tam değer. */\n value: valueFormatter ?? ((v: number) => full.format(v)),\n /** Eksen: kısaltılmış (12,5 B) — özel biçim verildiyse o. */\n axis: valueFormatter ?? ((v: number) => (Math.abs(v) >= 10_000 ? compact.format(v) : full.format(v))),\n };\n}\n","/**\n * Faz 16.9 — SVG `d` yolları (d3-shape'in ihtiyaç duyduğumuz kısmı):\n * düz/yumuşak çizgi, alan, pasta/halka dilimi, yay.\n */\n\nexport type Point = [number, number];\nexport type Curve = \"linear\" | \"smooth\";\n\nconst f = (n: number) => Number(n.toFixed(2));\n\nfunction linearSegments(points: Point[]): string {\n return points.map(([x, y], i) => `${i === 0 ? \"M\" : \"L\"}${f(x)},${f(y)}`).join(\"\");\n}\n\n/**\n * Monoton kübik eğri (Fritsch–Carlson; d3 `curveMonotoneX` ile aynı fikir):\n * noktalardan geçer, iki nokta arasında taşma YAPMAZ — veri 0 ile 10\n * arasındaysa çizgi 11'e çıkmaz, yanıltıcı tepe çizmez.\n */\nfunction monotoneSegments(points: Point[]): string {\n const n = points.length;\n if (n < 3) return linearSegments(points);\n const dx: number[] = [];\n const slope: number[] = [];\n for (let i = 0; i < n - 1; i++) {\n dx.push(points[i + 1]![0] - points[i]![0]);\n slope.push((points[i + 1]![1] - points[i]![1]) / (dx[i] || 1));\n }\n const tangent: number[] = [slope[0]!];\n for (let i = 1; i < n - 1; i++) {\n const a = slope[i - 1]!;\n const b = slope[i]!;\n if (a * b <= 0) tangent.push(0);\n else {\n const w1 = 2 * dx[i]! + dx[i - 1]!;\n const w2 = dx[i]! + 2 * dx[i - 1]!;\n tangent.push((w1 + w2) / (w1 / a + w2 / b));\n }\n }\n tangent.push(slope[n - 2]!);\n\n let d = `M${f(points[0]![0])},${f(points[0]![1])}`;\n for (let i = 0; i < n - 1; i++) {\n const [x0, y0] = points[i]!;\n const [x1, y1] = points[i + 1]!;\n const h = dx[i]! / 3;\n d += `C${f(x0 + h)},${f(y0 + tangent[i]! * h)},${f(x1 - h)},${f(y1 - tangent[i + 1]! * h)},${f(x1)},${f(y1)}`;\n }\n return d;\n}\n\n/** Çizgi yolu. Boş/eksik (`null`) değerler çizgiyi böler — veri yokken çizgi uydurulmaz. */\nexport function linePath(points: Array<Point | null>, curve: Curve = \"linear\"): string {\n const segments: Point[][] = [[]];\n for (const p of points) {\n if (p) segments[segments.length - 1]!.push(p);\n else if (segments[segments.length - 1]!.length) segments.push([]);\n }\n const draw = curve === \"smooth\" ? monotoneSegments : linearSegments;\n return segments.filter((s) => s.length).map(draw).join(\"\");\n}\n\n/** Alan yolu: çizgi + taban çizgisine (`baseY`) kapanış. Her kesintisiz parça ayrı kapanır. */\nexport function areaPath(points: Array<Point | null>, baseY: number, curve: Curve = \"linear\"): string {\n const segments: Point[][] = [[]];\n for (const p of points) {\n if (p) segments[segments.length - 1]!.push(p);\n else if (segments[segments.length - 1]!.length) segments.push([]);\n }\n return segments\n .filter((s) => s.length > 1)\n .map((s) => {\n const top = curve === \"smooth\" ? monotoneSegments(s) : linearSegments(s);\n return `${top}L${f(s[s.length - 1]![0])},${f(baseY)}L${f(s[0]![0])},${f(baseY)}Z`;\n })\n .join(\"\");\n}\n\n/** Açı (radyan, 0 = saat 12 yönü, saat yönünde artar) → nokta. */\nexport function polar(cx: number, cy: number, r: number, angle: number): Point {\n return [cx + r * Math.sin(angle), cy - r * Math.cos(angle)];\n}\n\n/**\n * Pasta/halka dilimi. `inner` 0 → pasta dilimi, > 0 → halka dilimi.\n * Tam tur (2π) iki yarım yayla çizilir (tek yay SVG'de sıfır uzunluk olur).\n */\nexport function arcPath(cx: number, cy: number, outer: number, inner: number, start: number, end: number): string {\n const sweep = end - start;\n if (sweep <= 0) return \"\";\n if (sweep >= Math.PI * 2 - 1e-6) {\n const mid = start + Math.PI;\n return arcPath(cx, cy, outer, inner, start, mid) + arcPath(cx, cy, outer, inner, mid, start + Math.PI * 2);\n }\n const large = sweep > Math.PI ? 1 : 0;\n const [x0, y0] = polar(cx, cy, outer, start);\n const [x1, y1] = polar(cx, cy, outer, end);\n if (inner <= 0) {\n return `M${f(cx)},${f(cy)}L${f(x0)},${f(y0)}A${f(outer)},${f(outer)},0,${large},1,${f(x1)},${f(y1)}Z`;\n }\n const [x2, y2] = polar(cx, cy, inner, end);\n const [x3, y3] = polar(cx, cy, inner, start);\n return `M${f(x0)},${f(y0)}A${f(outer)},${f(outer)},0,${large},1,${f(x1)},${f(y1)}L${f(x2)},${f(y2)}A${f(inner)},${f(inner)},0,${large},0,${f(x3)},${f(y3)}Z`;\n}\n\n/** Açık yay (Gauge izi ve dolgusu — `stroke` ile çizilir). */\nexport function strokeArcPath(cx: number, cy: number, r: number, start: number, end: number): string {\n if (end - start <= 0) return \"\";\n const [x0, y0] = polar(cx, cy, r, start);\n const [x1, y1] = polar(cx, cy, r, end);\n return `M${f(x0)},${f(y0)}A${f(r)},${f(r)},0,${end - start > Math.PI ? 1 : 0},1,${f(x1)},${f(y1)}`;\n}\n","/**\n * Faz 16.9 — grafiklerin saf matematiği (paket yok — kullanıcı kararı:\n * \"paket bağımlılığı istemiyorum\"). d3-scale'in ihtiyaç duyduğumuz küçük\n * kısmı: yuvarlak eksen değerleri, doğrusal ve bant ölçek.\n */\n\n/** 1, 2, 5 × 10ⁿ adımlarından `count`a en yakın olanı (d3 `tickStep` ile aynı eşikler). */\nexport function tickStep(min: number, max: number, count: number): number {\n const raw = Math.abs(max - min) / Math.max(1, count);\n if (raw === 0 || !Number.isFinite(raw)) return 1;\n const power = Math.floor(Math.log10(raw));\n const base = 10 ** power;\n const error = raw / base;\n if (error >= Math.SQRT2 * 5) return 10 * base;\n if (error >= Math.sqrt(10)) return 5 * base;\n if (error >= Math.SQRT2) return 2 * base;\n return base;\n}\n\n/** Kayan nokta artığını (0.30000000000000004) temizler. */\nconst clean = (n: number) => Number.parseFloat(n.toPrecision(12));\n\nexport interface NiceDomain {\n min: number;\n max: number;\n ticks: number[];\n}\n\n/**\n * Veri aralığını yuvarlak sınırlara genişletir ve eksen değerlerini üretir:\n * (3, 97) → 0…100, [0, 20, 40, 60, 80, 100]. Tüm değerler eşitse aralık\n * yapay olarak açılır (düz çizgi eksenin ortasında durur).\n */\nexport function niceDomain(min: number, max: number, count = 5): NiceDomain {\n let lo = Math.min(min, max);\n let hi = Math.max(min, max);\n if (lo === hi) {\n const pad = lo === 0 ? 1 : Math.abs(lo) * 0.5;\n lo -= pad;\n hi += pad;\n }\n const step = tickStep(lo, hi, count);\n const niceMin = clean(Math.floor(lo / step) * step);\n const niceMax = clean(Math.ceil(hi / step) * step);\n const ticks: number[] = [];\n for (let v = niceMin; v <= niceMax + step / 2; v += step) ticks.push(clean(v));\n return { min: niceMin, max: niceMax, ticks };\n}\n\n/** Doğrusal ölçek: `domain` → `range` (ters de olabilir — SVG'de y aşağı büyür). */\nexport function linearScale([d0, d1]: [number, number], [r0, r1]: [number, number]) {\n const span = d1 - d0 || 1;\n return (value: number) => r0 + ((value - d0) / span) * (r1 - r0);\n}\n\nexport interface BandScale {\n (index: number): number;\n /** Bir bandın genişliği (iç boşluk düşülmüş). */\n bandwidth: number;\n /** Bandın merkezi. */\n center: (index: number) => number;\n}\n\n/**\n * Kategorik eksen: `count` eşit bant, aralarında `paddingRatio` oranında boşluk.\n * Çubuk grafiğinde x (dikey çubuk) ya da y (yatay çubuk) ekseni.\n */\nexport function bandScale(count: number, [r0, r1]: [number, number], paddingRatio = 0.3): BandScale {\n const step = (r1 - r0) / Math.max(1, count);\n const bandwidth = step * (1 - paddingRatio);\n const offset = (step - bandwidth) / 2;\n const scale = ((index: number) => r0 + index * step + offset) as BandScale;\n scale.bandwidth = bandwidth;\n scale.center = (index) => r0 + index * step + step / 2;\n return scale;\n}\n\n/** Sayı dizisinin [min, max]ı; boşsa [0, 0]. NaN/undefined atlanır. */\nexport function extent(values: Iterable<number | null | undefined>): [number, number] {\n let lo = Infinity;\n let hi = -Infinity;\n for (const v of values) {\n if (v == null || Number.isNaN(v)) continue;\n if (v < lo) lo = v;\n if (v > hi) hi = v;\n }\n return lo === Infinity ? [0, 0] : [lo, hi];\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nexport interface ChartSize {\n width: number;\n height: number;\n /** Kök yazı boyutu (px) — eksen boşlukları ve etiket genişliği tahmini rem'e göre ölçeklensin. */\n rem: number;\n}\n\n/**\n * Kapsayıcının gerçek boyutu. Grafik SVG'si koordinatlarını buna göre kurar\n * (viewBox germe yok → yazılar ve çizgi kalınlıkları bozulmaz). Sunucuda ve\n * ilk ölçümden önce 0 — grafik o an yalnız kutuyu çizer.\n *\n * Geri çağrılı ref: ölçülen öğe SONRADAN da DOM'a girebilir (iskelet → yüklü\n * geçişinde çizim alanı ilk render'da yoktur). Nesne ref + tek seferlik efekt\n * o durumda hiç ölçmüyordu → grafik boş kalıyordu.\n */\nexport function useChartSize<T extends HTMLElement>() {\n const [el, setEl] = useState<T | null>(null);\n const [size, setSize] = useState<ChartSize>({ width: 0, height: 0, rem: 16 });\n const ref = useCallback((node: T | null) => setEl(node), []);\n\n useEffect(() => {\n if (!el) return;\n const measure = () => {\n const rem = Number.parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;\n setSize((prev) =>\n prev.width === el.clientWidth && prev.height === el.clientHeight && prev.rem === rem\n ? prev\n : { width: el.clientWidth, height: el.clientHeight, rem }\n );\n };\n measure();\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(measure);\n observer.observe(el);\n return () => observer.disconnect();\n }, [el]);\n\n return [ref, size] as const;\n}\n","import type React from \"react\";\n\n/**\n * Giriş animasyonu (`animated`): grafik ilk çizildiğinde — iskeletten yüklü\n * hale geçerken de — işaretler büyür/çizilir. Varsayılan açık (`animated={false}`\n * ile kapatılır). Yalnız CSS: başlangıç hali `both` dolgu kipiyle animasyonun\n * içinde; `motion-reduce:animate-none` ile hareket azaltma tercihinde\n * animasyon hiç çalışmaz ve işaret doğrudan son halinde görünür.\n * Keyframe'ler `styles.css`te (`mari-chart-*`).\n */\nexport const CHART_ANIMATION_MS = 700;\n\n/** Tailwind derleme tarayıcısı için literal sınıflar. */\nconst GROW_Y = \"animate-[mari-chart-grow-y_700ms_var(--mari-easing-decelerate)_both] motion-reduce:animate-none\";\nconst GROW_X = \"animate-[mari-chart-grow-x_700ms_var(--mari-easing-decelerate)_both] motion-reduce:animate-none\";\nconst DRAW = \"animate-[mari-chart-draw_900ms_var(--mari-easing-decelerate)_both] motion-reduce:animate-none\";\nconst FADE = \"animate-[mari-fade-in_300ms_ease-out_both] motion-reduce:animate-none\";\n\n/** Ardışık işaretler arasında küçük gecikme — toplamda en fazla ~0.4 sn. */\nconst stagger = (index: number, count: number) => `${Math.round((Math.min(index, count) * 400) / Math.max(count, 1))}ms`;\n\n/**\n * Çubuk: sıfır çizgisinden büyür. SVG öğelerinde `transform-origin` kullanıcı\n * biriminde (görünüm kutusu) çalışır → kökeni sıfır çizgisine koyarız; negatif\n * çubuklar da aynı çizgiden aşağı/sola büyür.\n */\nexport function growProps(animated: boolean | undefined, horizontal: boolean, zero: number, index: number, count: number): { className?: string; style?: React.CSSProperties } {\n if (!animated) return {};\n return {\n className: horizontal ? GROW_X : GROW_Y,\n style: { transformOrigin: horizontal ? `${zero}px 0px` : `0px ${zero}px`, animationDelay: stagger(index, count) },\n };\n}\n\n/**\n * Çizgi/alan: soldan sağa açılan kırpma dikdörtgeni (`clipPath`). Boşluklu\n * (eksik veri) çizgiler ve alan dolgusu da aynı hareketle açılır.\n */\nexport function revealRectProps(animated: boolean | undefined, left: number): { className?: string; style?: React.CSSProperties } {\n if (!animated) return {};\n return { className: GROW_X, style: { transformOrigin: `${left}px 0px` } };\n}\n\n/** Yay/dilim süpürmesi: `pathLength=1` yolda `stroke-dashoffset` 1 → 0. */\nexport function drawProps(animated: boolean | undefined): { className?: string; pathLength?: number; strokeDasharray?: string } {\n if (!animated) return {};\n return { className: DRAW, pathLength: 1, strokeDasharray: \"1 1\" };\n}\n\n/** İşaretlerden sonra beliren öğeler (son nokta, merkez yazısı). */\nexport function fadeAfterProps(animated: boolean | undefined, delayMs = CHART_ANIMATION_MS): { className?: string; style?: React.CSSProperties } {\n if (!animated) return {};\n return { className: FADE, style: { animationDelay: `${delayMs}ms` } };\n}\n","\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport type { CartesianChartProps } from \"../types\";\nimport { ChartFrame, nextIndex, type TooltipState } from \"../_shared/ChartFrame\";\nimport { XLabels, XValueGrid, YGrid, labelStride, plotBox, type PlotBox } from \"../_shared/cartesian\";\nimport { makeFormatters, seriesColor } from \"../_shared/format\";\nimport { bandScale, linearScale, niceDomain } from \"../_shared/scale\";\nimport { useChartSize } from \"../_shared/useChartSize\";\nimport { CartesianSkeleton } from \"../_shared/ChartSkeleton\";\nimport { growProps } from \"../_shared/animation\";\n\nexport interface BarChartProps<T> extends CartesianChartProps<T> {\n /** `\"vertical\"` (varsayılan): sütunlar. `\"horizontal\"`: yatay çubuklar — uzun kategori adları ve sıralamalar için. */\n layout?: \"vertical\" | \"horizontal\";\n /** Serileri üst üste yığar (parça–bütün). Varsayılan: yan yana gruplu. */\n stacked?: boolean;\n}\n\nimport { GAP, buildBars, num, valueExtent } from \"./bars\";\n\n/**\n * Faz 16.9 — çubuk grafiği. Kategoriler arası büyüklük karşılaştırması.\n * Çubuklar tek tabandan büyür, veri ucu 4px yuvarlak, kalınlık en fazla\n * 1.5rem (bant boşluğu nefes payı kalır). Vuruş hedefi tüm kategori bandı;\n * tooltip o kategorideki tüm serileri gösterir. Negatif değerler sıfır\n * çizgisinin altına iner.\n */\nexport function BarChart<T>({\n data,\n xKey,\n series,\n label,\n layout = \"vertical\",\n stacked = false,\n xFormatter,\n valueFormatter,\n locale = \"tr-TR\",\n showGrid = true,\n showLegend,\n emptyText = \"Veri yok\",\n skeleton,\n animated = true,\n className,\n}: Readonly<BarChartProps<T>>) {\n const [plotRef, size] = useChartSize<HTMLDivElement>();\n const [active, setActive] = useState<number | null>(null);\n const fmt = useMemo(() => makeFormatters(locale, valueFormatter), [locale, valueFormatter]);\n const horizontal = layout === \"horizontal\";\n\n const categories = data.map((row) => (xFormatter ? xFormatter(row[xKey], row) : String(row[xKey] ?? \"\")));\n const colors = series.map((s, i) => seriesColor(s.color, i));\n\n const matrix = data.map((row) => series.map((s) => num(row[s.key])));\n const domain = niceDomain(...valueExtent(matrix, stacked));\n\n // Yatayda sol boşluk kategori adlarına, dikeyde değer etiketlerine göre.\n const box: PlotBox = plotBox(size.width, size.height, size.rem, horizontal ? categories : domain.ticks.map(fmt.axis));\n // Yatayda değer ekseni etiketleri altta; kategori etiketleri solda (plotBox sol boşluğu onlara göre).\n const value = horizontal ? linearScale([domain.min, domain.max], [box.left, box.left + box.width]) : linearScale([domain.min, domain.max], [box.top + box.height, box.top]);\n const band = horizontal ? bandScale(data.length, [box.top, box.top + box.height], 0.3) : bandScale(data.length, [box.left, box.left + box.width], 0.3);\n const maxThickness = size.rem * 1.5;\n const groupCount = stacked ? 1 : series.length;\n const thickness = Math.max(1, Math.min(maxThickness, (band.bandwidth - GAP * (groupCount - 1)) / groupCount));\n const zero = value(0);\n const bars = buildBars(matrix, { horizontal, stacked, band, value, thickness });\n\n const legend = (showLegend ?? series.length > 1) ? series.map((s, i) => ({ name: s.name, color: colors[i]!, shape: \"rect\" as const })) : undefined;\n\n const tooltipAt = (i: number): TooltipState => {\n const row = data[i]!;\n const total = series.reduce((acc, s) => acc + num(row[s.key]), 0);\n const tip = value(stacked ? total : Math.max(...series.map((s) => num(row[s.key])), 0));\n return {\n x: horizontal ? tip : band.center(i),\n y: horizontal ? band.center(i) : tip,\n title: categories[i],\n rows: series.map((s, si) => ({ name: s.name, color: colors[si]!, shape: \"rect\", value: fmt.value(num(row[s.key])) })),\n };\n };\n\n const stride = horizontal ? 1 : labelStride(categories, box.width, size.rem);\n const ready = size.width > 0 && box.width > 0 && box.height > 0;\n const axisLength = horizontal ? box.height : box.width;\n const step = data.length ? axisLength / data.length : 0;\n\n return (\n <ChartFrame\n label={label}\n className={className}\n skeleton={skeleton}\n skeletonPlot={<CartesianSkeleton shape={horizontal ? \"barHorizontal\" : \"bar\"} count={data.length || 6} />}\n skeletonLegend={legend?.length ?? 0}\n empty={data.length === 0 || series.length === 0}\n emptyText={emptyText}\n legend={legend}\n table={{\n columns: [String(xKey), ...series.map((s) => s.name)],\n rows: data.map((row, i) => [categories[i]!, ...series.map((s) => fmt.value(num(row[s.key])))]),\n }}\n tooltip={active !== null && data[active] ? tooltipAt(active) : null}\n plotRef={plotRef}\n plotWidth={size.width}\n onKeyDown={(e) => {\n const next = nextIndex(e.key, active, data.length);\n if (next === null) return;\n e.preventDefault();\n setActive(next);\n }}\n onBlur={() => setActive(null)}\n >\n {ready && (\n <svg aria-hidden width={size.width} height={size.height} className=\"absolute inset-0 overflow-visible\">\n {/* Etkin kategori bandı: hafif yüzey tonu — işaret tepki verdiğini gösterir. */}\n {active !== null &&\n (horizontal ? (\n <rect x={box.left} y={box.top + active * step} width={box.width} height={step} className=\"fill-mari-surface-alt\" />\n ) : (\n <rect x={box.left + active * step} y={box.top} width={step} height={box.height} className=\"fill-mari-surface-alt\" />\n ))}\n {horizontal ? (\n <>\n <XValueGrid domain={domain} x={value} box={box} format={fmt.axis} showGrid={showGrid} />\n <g aria-hidden>\n {categories.map((c, i) => (\n <text key={i} x={box.left - 8} y={band.center(i)} dy=\"0.32em\" textAnchor=\"end\" className=\"fill-mari-muted text-xs\">\n {c}\n </text>\n ))}\n </g>\n <line x1={zero} x2={zero} y1={box.top} y2={box.top + box.height} className=\"stroke-mari-muted/60\" strokeWidth={1} shapeRendering=\"crispEdges\" />\n </>\n ) : (\n <>\n <YGrid domain={domain} y={value} box={box} format={fmt.axis} showGrid={showGrid} zeroLine={false} />\n <XLabels labels={categories} xAt={(i) => band.center(i)} box={box} stride={stride} />\n <line x1={box.left} x2={box.left + box.width} y1={zero} y2={zero} className=\"stroke-mari-muted/60\" strokeWidth={1} shapeRendering=\"crispEdges\" />\n </>\n )}\n {bars.map((bar) => (\n <path key={`${bar.row}-${bar.series}`} d={bar.d} fill={colors[bar.series]} {...growProps(animated, horizontal, zero, bar.row, data.length)} />\n ))}\n {/* Vuruş hedefi: tüm kategori bandı (işaretten büyük). */}\n {data.map((_, i) =>\n horizontal ? (\n <rect key={i} x={box.left} y={box.top + i * step} width={box.width} height={step} fill=\"transparent\" onPointerEnter={() => setActive(i)} onPointerLeave={() => setActive(null)} />\n ) : (\n <rect key={i} x={box.left + i * step} y={box.top} width={step} height={box.height} fill=\"transparent\" onPointerEnter={() => setActive(i)} onPointerLeave={() => setActive(null)} />\n )\n )}\n </svg>\n )}\n </ChartFrame>\n );\n}\n","import { barPath } from \"../_shared/cartesian\";\nimport type { BandScale } from \"../_shared/scale\";\n\n/** Çubuklar arası yüzey boşluğu (px) — dokunan işaretleri çizgi değil boşluk ayırır. */\nexport const GAP = 2;\n\nexport const num = (v: unknown) => (typeof v === \"number\" && Number.isFinite(v) ? v : 0);\n\n/** Değer aralığı; sıfır her zaman dahil (çubuk tabandan büyür). Yığında pozitif/negatif toplamlar ayrı. */\nexport function valueExtent(rows: number[][], stacked: boolean): [number, number] {\n let lo = 0;\n let hi = 0;\n for (const values of rows) {\n if (stacked) {\n hi = Math.max(hi, values.filter((v) => v > 0).reduce((a, v) => a + v, 0));\n lo = Math.min(lo, values.filter((v) => v < 0).reduce((a, v) => a + v, 0));\n } else {\n hi = Math.max(hi, ...values);\n lo = Math.min(lo, ...values);\n }\n }\n return [lo, hi];\n}\n\nexport interface BarGeometry {\n horizontal: boolean;\n stacked: boolean;\n band: BandScale;\n value: (v: number) => number;\n thickness: number;\n}\n\nexport interface BarShape {\n row: number;\n series: number;\n d: string;\n}\n\n/** Tek parça: tabandan `from`→`to`; veri ucu yuvarlak, yığında taban tarafı 2px kırpılır. */\nfunction segment(g: BarGeometry, offset: number, from: number, to: number, roundEnd: boolean): string {\n const a = g.value(from);\n const b = g.value(to);\n const radius = roundEnd ? 4 : 0;\n const gap = g.stacked && from !== 0 ? GAP : 0;\n const positive = to >= from;\n const lo = Math.min(a, b);\n const len = Math.abs(b - a) - gap;\n if (g.horizontal) {\n return positive ? barPath(lo + gap, offset, len, g.thickness, radius, \"right\") : barPath(lo, offset, len, g.thickness, radius, \"left\");\n }\n return positive ? barPath(offset, lo, g.thickness, len, radius, \"top\") : barPath(offset, lo + gap, g.thickness, len, radius, \"bottom\");\n}\n\n/** Son pozitif ve son negatif parçanın indeksi — yığında yalnız en dıştaki uç yuvarlanır. */\nfunction outerIndexes(values: number[]): { pos: number; neg: number } {\n let pos = -1;\n let neg = -1;\n values.forEach((v, i) => {\n if (v > 0) pos = i;\n if (v < 0) neg = i;\n });\n return { pos, neg };\n}\n\n/** Tüm çubukların yolları. `rows[i][s]`: i. kategori, s. serinin değeri. */\nexport function buildBars(rows: number[][], g: BarGeometry): BarShape[] {\n const groupCount = g.stacked ? 1 : (rows[0]?.length ?? 1);\n const span = g.thickness * groupCount + GAP * (groupCount - 1);\n const shapes: BarShape[] = [];\n rows.forEach((values, i) => {\n const start = g.band.center(i) - span / 2;\n const outer = outerIndexes(values);\n let pos = 0;\n let neg = 0;\n values.forEach((v, s) => {\n if (v === 0) return;\n if (!g.stacked) {\n shapes.push({ row: i, series: s, d: segment(g, start + s * (g.thickness + GAP), 0, v, true) });\n return;\n }\n const from = v > 0 ? pos : neg;\n if (v > 0) pos += v;\n else neg += v;\n shapes.push({ row: i, series: s, d: segment(g, start, from, from + v, s === (v > 0 ? outer.pos : outer.neg)) });\n });\n });\n return shapes;\n}\n","\"use client\";\n\nimport React, { useId, useMemo, useState } from \"react\";\nimport { cn } from \"@mari-ui/core\";\nimport type { ChartBaseProps, ChartColor } from \"../types\";\nimport { ChartFrame, nextIndex } from \"../_shared/ChartFrame\";\nimport { makeFormatters, seriesColor } from \"../_shared/format\";\nimport { arcPath, polar } from \"../_shared/paths\";\nimport { useChartSize } from \"../_shared/useChartSize\";\nimport { PieSkeleton } from \"../_shared/ChartSkeleton\";\nimport { drawProps, fadeAfterProps } from \"../_shared/animation\";\n\nexport interface PieDatum {\n name: string;\n value: number;\n color?: ChartColor;\n}\n\nexport interface PieChartProps extends ChartBaseProps {\n data: PieDatum[];\n /** Halka (donut). Ortada toplam (ya da `centerLabel`/`centerValue`) gösterilir. Varsayılan `false`. */\n donut?: boolean;\n /** Halkanın ortasındaki başlık. Varsayılan \"Toplam\". */\n centerLabel?: React.ReactNode;\n /** Halkanın ortasındaki değer. Varsayılan: biçimlenmiş toplam. */\n centerValue?: React.ReactNode;\n /**\n * Bu sayıdan fazla dilim \"Diğer\"de toplanır (palet 8 renk; döngüye girmez).\n * Varsayılan 6 — pasta 5–6 dilimden sonra okunmaz, çubuk grafik düşünün.\n */\n maxSlices?: number;\n /** \"Diğer\" diliminin adı. */\n otherLabel?: string;\n /** Lejantta yüzde. Varsayılan `true`. */\n showPercent?: boolean;\n}\n\n/**\n * Faz 16.9 — pasta / halka grafiği. Bir bütünün az sayıda parçası. Dilimler\n * arasında 2px yüzey boşluğu; üzerine gelince dilim hafifçe dışa çıkar ve\n * tooltip ad, değer, yüzde gösterir. Lejant her zaman var (kimlik yalnız\n * renge kalmaz); yüzdeler lejantta. Sıfır ve negatif değerler çizilmez.\n */\nexport function PieChart({\n data,\n label,\n donut = false,\n centerLabel = \"Toplam\",\n centerValue,\n maxSlices = 6,\n otherLabel = \"Diğer\",\n showPercent = true,\n valueFormatter,\n locale = \"tr-TR\",\n emptyText = \"Veri yok\",\n skeleton,\n animated = true,\n className,\n}: Readonly<PieChartProps>) {\n const [plotRef, size] = useChartSize<HTMLDivElement>();\n const maskId = `mari-pie-${useId().replace(/[^\\w-]/g, \"\")}`;\n const [active, setActive] = useState<number | null>(null);\n const fmt = useMemo(() => makeFormatters(locale, valueFormatter), [locale, valueFormatter]);\n const percent = useMemo(() => new Intl.NumberFormat(locale, { style: \"percent\", maximumFractionDigits: 1 }), [locale]);\n\n const slices = useMemo(() => {\n const positive = data.filter((d) => Number.isFinite(d.value) && d.value > 0);\n if (positive.length <= maxSlices) return positive;\n const kept = positive.slice(0, maxSlices - 1);\n const rest = positive.slice(maxSlices - 1).reduce((sum, d) => sum + d.value, 0);\n return [...kept, { name: otherLabel, value: rest }];\n }, [data, maxSlices, otherLabel]);\n\n const total = slices.reduce((sum, d) => sum + d.value, 0);\n const colors = slices.map((d, i) => seriesColor(d.color, i));\n const cx = size.width / 2;\n const cy = size.height / 2;\n const outer = Math.max(0, Math.min(size.width, size.height) / 2 - 6);\n const inner = donut ? outer * 0.62 : 0;\n\n let angle = 0;\n const arcs = slices.map((d, i) => {\n const start = angle;\n angle += (d.value / total) * Math.PI * 2;\n return { ...d, start, end: angle, color: colors[i]! };\n });\n\n const legend = arcs.map((a) => ({\n name: showPercent ? `${a.name} · ${percent.format(a.value / total)}` : a.name,\n color: a.color,\n shape: \"rect\" as const,\n }));\n\n const activeArc = active !== null ? arcs[active] : undefined;\n const tooltip = activeArc\n ? (() => {\n const [x, y] = polar(cx, cy, (outer + inner) / 2 || outer * 0.6, (activeArc.start + activeArc.end) / 2);\n return {\n x,\n y,\n rows: [{ name: `${activeArc.name} · ${percent.format(activeArc.value / total)}`, color: activeArc.color, shape: \"rect\" as const, value: fmt.value(activeArc.value) }],\n };\n })()\n : null;\n\n return (\n <ChartFrame\n label={label}\n className={className}\n skeleton={skeleton}\n skeletonPlot={<PieSkeleton donut={donut} />}\n skeletonLegend={Math.min(data.length || 4, maxSlices)}\n empty={slices.length === 0}\n emptyText={emptyText}\n legend={legend}\n legendPosition=\"bottom\"\n table={{ columns: [\"Dilim\", \"Değer\", \"Oran\"], rows: arcs.map((a) => [a.name, fmt.value(a.value), percent.format(a.value / total)]) }}\n tooltip={tooltip}\n plotRef={plotRef}\n plotWidth={size.width}\n onKeyDown={(e) => {\n const next = nextIndex(e.key, active, arcs.length);\n if (next === null) return;\n e.preventDefault();\n setActive(next);\n }}\n onBlur={() => setActive(null)}\n >\n {outer > 0 && (\n <svg aria-hidden width={size.width} height={size.height} className=\"absolute inset-0 overflow-visible\">\n {animated && (\n <defs>\n {/* Süpürme: saat 12'den saat yönünde açılan maske. Kalın çizgili daire tüm diski\n (üzerine gelince büyüyen dilim dahil) kaplar; daire yolu saat 3'ten başladığı için -90°. */}\n <mask id={maskId} maskUnits=\"userSpaceOnUse\">\n <circle\n cx={cx}\n cy={cy}\n r={(outer + 6) / 2}\n fill=\"none\"\n stroke=\"white\"\n strokeWidth={outer + 6}\n transform={`rotate(-90 ${cx} ${cy})`}\n {...drawProps(animated)}\n />\n </mask>\n </defs>\n )}\n <g mask={animated ? `url(#${maskId})` : undefined}>\n {arcs.map((a, i) => (\n <path\n key={a.name}\n d={arcPath(cx, cy, i === active ? outer + 4 : outer, inner, a.start, a.end)}\n fill={a.color}\n // Dilimler arası 2px yüzey boşluğu (çizgi değil, yüzey rengi).\n className=\"stroke-mari-surface transition-[d] duration-150 motion-reduce:transition-none\"\n strokeWidth={arcs.length > 1 ? 2 : 0}\n strokeLinejoin=\"round\"\n onPointerEnter={() => setActive(i)}\n onPointerLeave={() => setActive(null)}\n />\n ))}\n </g>\n {donut && (\n <g className={cn(\"pointer-events-none\", fadeAfterProps(animated, 600).className)} style={fadeAfterProps(animated, 600).style}>\n <text x={cx} y={cy} dy=\"-0.35em\" textAnchor=\"middle\" className=\"fill-mari-muted text-xs\">\n {centerLabel}\n </text>\n <text x={cx} y={cy} dy=\"1em\" textAnchor=\"middle\" className=\"fill-mari-foreground text-lg font-semibold\">\n {centerValue ?? fmt.value(total)}\n </text>\n </g>\n )}\n </svg>\n )}\n </ChartFrame>\n );\n}\n","\"use client\";\n\nimport React, { useId } from \"react\";\nimport { InboxIcon } from \"lucide-react\";\nimport { cn } from \"@mari-ui/core\";\nimport type { ChartColor } from \"../types\";\nimport { seriesColor } from \"../_shared/format\";\nimport { areaPath, linePath, type Curve, type Point } from \"../_shared/paths\";\nimport { extent, linearScale } from \"../_shared/scale\";\nimport { useChartSize } from \"../_shared/useChartSize\";\nimport { skeletonFill, type SkeletonableProps } from \"../../lib/skeleton\";\nimport { ChartEmpty, waveMask } from \"../_shared/ChartSkeleton\";\nimport { fadeAfterProps, revealRectProps } from \"../_shared/animation\";\n\nexport interface SparklineProps extends SkeletonableProps {\n data: Array<number | null>;\n /**\n * Ekran okuyucu için eğilimi anlatan metin (ör. \"Son 12 ay, yükselişte\").\n * Verilmezse grafik dekoratif sayılır (`aria-hidden`) — yanındaki değer zaten okunuyor.\n */\n label?: string;\n /** Varsayılan: soluk (`muted`) çizgi + vurgulu son nokta — kartın değeri öne çıksın. */\n color?: ChartColor | \"muted\";\n /** Son noktanın rengi. Varsayılan `primary`. */\n endColor?: ChartColor;\n area?: boolean;\n curve?: Curve;\n /** Boyut. Varsayılan `h-8 w-full`. */\n className?: string;\n /** Değer yokken bulanık çizginin önünde görünen metin. Varsayılan \"Veri yok\". */\n emptyText?: string;\n /** Giriş animasyonu: çizgi soldan açılır, son nokta ardından belirir. Varsayılan açık. */\n animated?: boolean;\n}\n\n/**\n * Faz 16.9 — eksensiz mini çizgi. Statistic kartlarında, tablo hücrelerinde\n * eğilimi göstermek için. Değer okutmaz (değeri yanındaki sayı taşır); ekseni,\n * tooltip'i yoktur.\n */\nexport function Sparkline({ data, label, color = \"muted\", endColor = \"primary\", area = false, curve = \"smooth\", skeleton, animated = true, emptyText = \"Veri yok\", className }: Readonly<SparklineProps>) {\n const [ref, size] = useChartSize<HTMLDivElement>();\n const clipId = `mari-spark-${useId().replace(/[^\\w-]/g, \"\")}`;\n // İskelet: aynı kutuda ince dalga (çizginin kendisi) — düz blok değil.\n if (skeleton) return <span aria-hidden data-skeleton=\"\" className={cn(\"pointer-events-none block h-8 w-full\", skeletonFill(true), className)} style={waveMask(1.5)} />;\n\n const stroke = color === \"muted\" ? \"var(--mari-color-muted)\" : seriesColor(color, 0);\n const pad = 3;\n const [lo, hi] = extent(data);\n const flat = lo === hi;\n const y = linearScale(flat ? [lo - 1, hi + 1] : [lo, hi], [size.height - pad, pad]);\n const x = (i: number) => (data.length <= 1 ? size.width / 2 : pad + (i * (size.width - pad * 2)) / (data.length - 1));\n const pts: Array<Point | null> = data.map((v, i) => (v == null ? null : [x(i), y(v)]));\n let lastIndex = -1;\n for (let i = data.length - 1; i >= 0; i--) {\n if (data[i] != null) {\n lastIndex = i;\n break;\n }\n }\n const last = lastIndex >= 0 ? pts[lastIndex] : null;\n\n // Boş: diğer grafiklerle aynı desen — bulanık sabit dalga, önde kısa uyarı.\n if (!last) {\n return (\n <div role=\"img\" aria-label={emptyText} className={cn(\"relative h-8 w-full\", className)}>\n <ChartEmpty compact plot={<span className={cn(\"absolute inset-0\", skeletonFill(false))} style={waveMask(1.5)} />}>\n {/* Empty ile aynı ikon; 2rem'lik satıra sığsın diye ikon + metin yan yana. */}\n <span className=\"flex items-center gap-1.5 text-xs text-mari-muted\">\n <InboxIcon aria-hidden className=\"size-3.5 shrink-0\" />\n {emptyText}\n </span>\n </ChartEmpty>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(\"h-8 w-full\", className)}\n role={label ? \"img\" : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n >\n {size.width > 0 && (\n <svg width={size.width} height={size.height} aria-hidden className=\"block overflow-visible\">\n {animated && (\n <defs>\n <clipPath id={clipId}>\n <rect x={-2} y={-2} width={size.width + 4} height={size.height + 4} {...revealRectProps(animated, -2)} />\n </clipPath>\n </defs>\n )}\n <g clipPath={animated ? `url(#${clipId})` : undefined}>\n {area && <path d={areaPath(pts, size.height, curve)} fill={stroke} fillOpacity={0.1} />}\n <path d={linePath(pts, curve)} fill=\"none\" stroke={stroke} strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </g>\n {last && <circle cx={last[0]} cy={last[1]} r={3} fill={seriesColor(endColor, 0)} className={cn(\"stroke-mari-surface\", fadeAfterProps(animated).className)} style={fadeAfterProps(animated).style} strokeWidth={1.5} />}\n </svg>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { InboxIcon } from \"lucide-react\";\nimport { cn } from \"@mari-ui/core\";\nimport type { ChartColor } from \"../types\";\nimport { seriesColor } from \"../_shared/format\";\nimport { polar, strokeArcPath } from \"../_shared/paths\";\nimport { skeletonFill, type SkeletonableProps } from \"../../lib/skeleton\";\nimport { ChartEmpty, svgMask } from \"../_shared/ChartSkeleton\";\nimport { drawProps } from \"../_shared/animation\";\n\nexport interface GaugeSegment {\n /** Bu eşiğe KADAR (dahil) olan değerler bu rengi alır. */\n upTo: number;\n color: ChartColor;\n /** Erişilebilir durum adı (ör. \"Kritik\") — `aria-valuetext`e eklenir. */\n label?: string;\n}\n\nexport interface GaugeProps extends SkeletonableProps {\n /** `null`/`undefined` → boş hal (ör. henüz ölçüm yok): bulanık gösterge + `emptyText`. */\n value: number | null | undefined;\n /** Değer yokken yayın ortasında görünen metin. Varsayılan \"Veri yok\". */\n emptyText?: string;\n min?: number;\n max?: number;\n /** Ad — ekran okuyucu (`role=\"meter\"`) ve göstergenin altındaki metin. */\n label: string;\n /** Altta görünen adı gizle (yine okunur). */\n hideLabel?: boolean;\n /** Tek renk. Varsayılan `primary`. `segments` verilirse yok sayılır. */\n color?: ChartColor;\n /**\n * Eşiklere göre renk (ör. doluluk: 70'e kadar yeşil, 90'a kadar sarı, sonra\n * kırmızı). Durum rengi tek başına anlam taşımasın: `label` verin.\n */\n segments?: GaugeSegment[];\n valueFormatter?: (value: number) => string;\n locale?: string;\n /** Boyut. Varsayılan `w-48`; yükseklik genişlikten türer. */\n className?: string;\n /** Giriş animasyonu: dolgu yayı izin başından değere kadar süpürülür. Varsayılan açık; hareket azaltma tercihinde çalışmaz. */\n animated?: boolean;\n}\n\nconst START = -Math.PI * 0.75;\nconst END = Math.PI * 0.75;\n\n// viewBox sabit: yay, kalınlık ve yazı birlikte ölçeklenir (göstergenin kendisi bir figür).\nconst R = 80;\nconst CX = 100;\nconst CY = 96;\nconst STROKE = 14;\n\n/**\n * İskelet: göstergenin kendi geometrisi — iz yayı, ortadaki değer ve iki uç\n * etiketi, aynı viewBox'ta. Parıltılı dolgu bu şekille maskelenir.\n */\nfunction gaugeMask(withValue: boolean): React.CSSProperties {\n const [minX, minY] = polar(CX, CY, R, START);\n const [maxX] = polar(CX, CY, R, END);\n const stub = (x: number, y: number, w: number, h: number) => `<rect x=\"${x - w / 2}\" y=\"${y - h / 2}\" width=\"${w}\" height=\"${h}\" rx=\"3\" fill=\"black\"/>`;\n return svgMask(\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 184\">` +\n `<path d=\"${strokeArcPath(CX, CY, R, START, END)}\" fill=\"none\" stroke=\"black\" stroke-width=\"${STROKE}\" stroke-linecap=\"round\"/>` +\n (withValue ? stub(CX, CY, 64, 26) : \"\") +\n stub(minX, minY + 21, 16, 10) +\n stub(maxX, minY + 21, 24, 10) +\n `</svg>`\n );\n}\n\nconst SKELETON_MASK = gaugeMask(true);\n/** Boş hal: ortadaki değer yerine uyarı durduğu için değer çubuğu yok. */\nconst EMPTY_MASK = gaugeMask(false);\n\n/**\n * Faz 16.9 — gösterge (270° yay). Tek bir değerin aralıktaki yeri: doluluk,\n * hedefe ulaşma, skor. Dolgu durum rengini taşır; iz, aynı rengin soluk hali.\n * `role=\"meter\"`. Birden çok değer için Bar, zaman içinde değişim için Line.\n */\nexport function Gauge({\n value,\n min = 0,\n max = 100,\n label,\n hideLabel = false,\n color = \"primary\",\n segments,\n valueFormatter,\n locale = \"tr-TR\",\n emptyText = \"Veri yok\",\n skeleton,\n animated = true,\n className,\n}: Readonly<GaugeProps>) {\n const format = useMemo(() => valueFormatter ?? ((v: number) => new Intl.NumberFormat(locale, { maximumFractionDigits: 1 }).format(v)), [valueFormatter, locale]);\n if (skeleton) {\n return (\n <div aria-hidden data-skeleton=\"\" className={cn(\"pointer-events-none inline-flex w-48 flex-col items-center\", className)}>\n <div className={cn(\"aspect-[200/184] w-full\", skeletonFill(true))} style={SKELETON_MASK} />\n {!hideLabel && (\n <span className=\"-mt-2 flex h-5 items-center\">\n <span className={cn(\"block h-2.5 w-24 rounded-sm\", skeletonFill(true))} />\n </span>\n )}\n </div>\n );\n }\n\n // Boş (değer yok — ör. henüz ölçüm gelmedi): diğer grafiklerle aynı desen —\n // arkada bulanık sabit iskelet, değerin yerinde uyarı. \"0\" göstermek yanlış\n // olurdu (0 bir ölçümdür); ad altta kalır ki neyin boş olduğu bilinsin.\n if (value == null || !Number.isFinite(value)) {\n return (\n <div role=\"img\" aria-label={`${label}: ${emptyText}`} className={cn(\"inline-flex w-48 flex-col items-center\", className)}>\n <div className=\"relative aspect-[200/184] w-full\">\n <ChartEmpty plot={<div className={cn(\"absolute inset-0\", skeletonFill(false))} style={EMPTY_MASK} />}>\n {/* Değer yazısının yeri: yay merkezi (viewBox y=96 / 184). */}\n <span className=\"absolute top-[52%] left-1/2 flex -translate-x-1/2 -translate-y-1/2 flex-col items-center gap-1 text-xs text-mari-muted\">\n <InboxIcon aria-hidden className=\"size-5\" />\n <span className=\"whitespace-nowrap\">{emptyText}</span>\n </span>\n </ChartEmpty>\n </div>\n {!hideLabel && <span className=\"-mt-2 text-sm text-mari-muted\">{label}</span>}\n </div>\n );\n }\n\n const clamped = Math.min(max, Math.max(min, value));\n const ratio = max === min ? 0 : (clamped - min) / (max - min);\n const segment = segments?.slice().sort((a, b) => a.upTo - b.upTo).find((s) => clamped <= s.upTo) ?? segments?.[segments.length - 1];\n const fill = seriesColor(segment?.color ?? color, 0);\n\n const r = R;\n const cx = CX;\n const cy = CY;\n const stroke = STROKE;\n const valueText = format(value);\n // Uç etiketleri yayın iki ucunun altında. Yazılar kullanıcı birimiyle (fontSize) — figürle birlikte ölçeklensin.\n const [minX, minY] = polar(cx, cy, r, START);\n const [maxX, maxY] = polar(cx, cy, r, END);\n\n return (\n <div\n role=\"meter\"\n aria-label={label}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={clamped}\n aria-valuetext={segment?.label ? `${valueText}, ${segment.label}` : valueText}\n className={cn(\"inline-flex w-48 flex-col items-center\", className)}\n >\n <svg viewBox=\"0 0 200 184\" aria-hidden className=\"block w-full overflow-visible\">\n <path d={strokeArcPath(cx, cy, r, START, END)} fill=\"none\" stroke={fill} strokeOpacity={0.15} strokeWidth={stroke} strokeLinecap=\"round\" />\n {ratio > 0 && (\n <path d={strokeArcPath(cx, cy, r, START, START + (END - START) * ratio)} fill=\"none\" stroke={fill} strokeWidth={stroke} strokeLinecap=\"round\" {...drawProps(animated)} />\n )}\n <text x={cx} y={cy} dy=\"0.35em\" textAnchor=\"middle\" fontSize={36} className=\"fill-mari-foreground font-semibold\">\n {valueText}\n </text>\n <text x={minX} y={minY + 26} textAnchor=\"middle\" fontSize={14} className=\"fill-mari-muted tabular-nums\">\n {format(min)}\n </text>\n <text x={maxX} y={maxY + 26} textAnchor=\"middle\" fontSize={14} className=\"fill-mari-muted tabular-nums\">\n {format(max)}\n </text>\n </svg>\n {!hideLabel && <span className=\"-mt-2 text-sm text-mari-muted\">{label}</span>}\n {segment?.label && <span className=\"text-xs font-medium text-mari-foreground\">{segment.label}</span>}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;AAEA,SAAgB,OAAO,SAAS,YAAAA,iBAAgB;;;ACChD,SAAS,MAAAC,WAAU;;;ACAnB,SAAS,UAAU;AA2BV,cAUD,YAVC;AAdF,SAAS,QAAQ,KAAkC;AACxD,QAAM,MAAM,gCAAgC,mBAAmB,GAAG,CAAC;AACnE,SAAO,EAAE,WAAW,KAAK,iBAAiB,KAAK,UAAU,aAAa,gBAAgB,aAAa,YAAY,aAAa,kBAAkB,YAAY;AAC5J;AAGO,SAAS,SAAS,aAA0C;AACjE,SAAO;AAAA,IACL,wNAAwN,WAAW;AAAA,EACrO;AACF;AAGA,SAAS,SAAS,EAAE,UAAU,GAAqC;AACjE,SAAO,oBAAC,UAAK,eAAW,MAAC,WAAW,GAAG,wBAAwB,aAAa,IAAI,GAAG,SAAS,GAAG;AACjG;AAGA,IAAM,oBAAoB,CAAC,MAAe,IAAI,IAAI,SAAS;AAEpD,SAAS,eAAe,EAAE,MAAM,GAAgC;AACrE,SACE,oBAAC,SAAI,WAAU,kCACZ,gBAAM,KAAK,EAAE,QAAQ,MAAM,GAAG,CAAC,GAAG,MACjC,qBAAC,UAAa,WAAU,iCACtB;AAAA,wBAAC,UAAK,WAAW,GAAG,uBAAuB,aAAa,IAAI,CAAC,GAAG;AAAA,IAChE,oBAAC,YAAS,WAAW,kBAAkB,CAAC,GAAG;AAAA,OAFlC,CAGX,CACD,GACH;AAEJ;AAGA,IAAM,cAAc,CAAC,MAAM,KAAK,KAAK,MAAM,MAAM,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,GAAG;AAQ9E,SAAS,kBAAkB,EAAE,OAAO,MAAM,GAA+D;AAC9G,QAAM,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC;AACzC,QAAM,aAAa,UAAU;AAC7B,SACE,qBAAC,SAAI,WAAU,oBAEb;AAAA,wBAAC,SAAI,WAAW,GAAG,0DAA0D,aAAa,wBAAwB,qBAAqB,GACpI,gBAAM,KAAK,EAAE,QAAQ,aAAa,IAAI,EAAE,GAAG,CAAC,GAAG,MAC9C,oBAAC,YAAiB,WAAW,aAAa,kBAAkB,CAAC,IAAI,SAAlD,CAAyD,CACzE,GACH;AAAA,IACA,qBAAC,SAAI,WAAW,GAAG,mCAAmC,aAAa,YAAY,SAAS,GACrF;AAAA,OAAC,cACA,oBAAC,SAAI,WAAU,kDACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,MAC7B,oBAAC,UAAa,WAAU,4BAAb,CAAsC,CAClD,GACH;AAAA,MAED,UAAU,UAAU,oBAAC,SAAI,WAAW,GAAG,oBAAoB,aAAa,IAAI,CAAC,GAAG,OAAO,SAAS,CAAC,GAAG;AAAA,MACpG,UAAU,SACT,oBAAC,SAAI,WAAU,kDACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,MAC7B,oBAAC,UAAa,WAAW,GAAG,mCAAmC,aAAa,IAAI,CAAC,GAAG,OAAO,EAAE,QAAQ,GAAG,YAAY,IAAI,YAAY,MAAM,IAAK,GAAG,IAAI,KAA3I,CAA8I,CAC1J,GACH;AAAA,MAED,cACC,oBAAC,SAAI,WAAU,gFACZ,gBAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,MAC7B,oBAAC,UAAa,WAAW,GAAG,gBAAgB,aAAa,IAAI,CAAC,GAAG,OAAO,EAAE,OAAO,GAAG,YAAY,IAAI,YAAY,MAAM,IAAK,GAAG,KAAK,QAAQ,eAAe,KAAK,CAAC,KAAK,KAA1J,CAA6J,CACzK,GACH;AAAA,OAEJ;AAAA,IAEA,oBAAC,SAAI,WAAW,GAAG,kEAAkE,aAAa,YAAY,SAAS,GACpH,gBAAM,KAAK,EAAE,QAAQ,aAAa,IAAI,KAAK,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,MAC3D,oBAAC,YAAiB,WAAU,SAAb,CAAmB,CACnC,GACH;AAAA,KACF;AAEJ;AAQO,SAAS,WAAW,EAAE,MAAM,UAAU,UAAU,MAAM,GAAsF;AACjJ,SACE,qBAAC,SAAI,WAAU,oBAEb;AAAA,wBAAC,SAAI,eAAW,MAAC,WAAW,GAAG,uCAAuC,UAAU,eAAe,YAAY,GACxG,gBACH;AAAA,IACA,oBAAC,SAAI,WAAU,4CAA4C,UAAS;AAAA,KACtE;AAEJ;AAGO,SAAS,YAAY,EAAE,MAAM,GAAiC;AACnE,SACE,oBAAC,SAAI,WAAU,8CACb;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,gDAAgD,aAAa,IAAI,CAAC;AAAA,MAEhF,OAAO,QAAQ,EAAE,WAAW,sEAAsE,iBAAiB,qEAAqE,IAAI;AAAA;AAAA,EAC9L,GACF;AAEJ;;;ADnGI,gBAAAC,MAUI,QAAAC,aAVJ;AAFJ,SAAS,OAAO,EAAE,OAAO,MAAM,GAAwC;AACrE,SAAO,UAAU,SACf,gBAAAD,KAAC,UAAK,eAAW,MAAC,WAAU,mCAAkC,OAAO,EAAE,iBAAiB,MAAM,GAAG,IAEjG,gBAAAA,KAAC,UAAK,eAAW,MAAC,WAAU,gCAA+B,OAAO,EAAE,iBAAiB,MAAM,GAAG;AAElG;AAEO,SAAS,YAAY,EAAE,MAAM,GAAsC;AACxE,SACE,gBAAAA,KAAC,QAAG,WAAU,0DACX,gBAAM,IAAI,CAAC,SACV,gBAAAC,MAAC,QAAmB,WAAU,6BAC5B;AAAA,oBAAAD,KAAC,UAAO,OAAO,KAAK,OAAO,OAAO,KAAK,OAAO;AAAA,IAC7C,KAAK;AAAA,OAFC,KAAK,IAGd,CACD,GACH;AAEJ;AAOA,SAAS,aAAa,EAAE,OAAO,MAAM,GAAqD;AACxF,QAAM,OAAO,MAAM,IAAI,QAAQ;AAC/B,SACE,gBAAAC;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,MACX,WAAU;AAAA,MACV,OAAO;AAAA,QACL,MAAM,MAAM;AAAA,QACZ,KAAK,MAAM;AAAA,QACX,WAAW,aAAa,OAAO,0BAA0B,SAAS;AAAA,MACpE;AAAA,MAEC;AAAA,cAAM,SAAS,gBAAAD,KAAC,OAAE,WAAU,wBAAwB,gBAAM,OAAM;AAAA,QACjE,gBAAAA,KAAC,QAAG,WAAU,uBACX,gBAAM,KAAK,IAAI,CAAC,QACf,gBAAAC,MAAC,QAAkB,WAAU,2BAC3B;AAAA,0BAAAD,KAAC,UAAO,OAAO,IAAI,OAAO,OAAM,QAAO;AAAA,UACvC,gBAAAA,KAAC,UAAK,WAAU,mDAAmD,cAAI,OAAM;AAAA,UAC7E,gBAAAA,KAAC,UAAK,WAAU,mBAAmB,cAAI,MAAK;AAAA,aAHrC,IAAI,IAIb,CACD,GACH;AAAA;AAAA;AAAA,EACF;AAEJ;AA8BO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB;AAAA,EACA,iBAAiB;AACnB,GAA8B;AAC5B,MAAI,UAAU;AACZ,UAAM,aAAa,iBAAiB,IAAI,gBAAAA,KAAC,kBAAe,OAAO,gBAAgB,IAAK;AACpF,WACE,gBAAAC,MAAC,SAAI,eAAW,MAAC,iBAAc,IAAG,WAAWC,IAAG,+DAA+D,SAAS,GACrH;AAAA,yBAAmB,SAAS;AAAA,MAC7B,gBAAAF,KAAC,SAAI,WAAU,2BAA2B,wBAAa;AAAA,MACtD,mBAAmB,YAAY;AAAA,OAClC;AAAA,EAEJ;AAEA,QAAM,cAAc,CAAC,SAAS,QAAQ,SAAS;AAC/C,QAAM,aAAa,UAAU,OAAO,SAAS,KAAK,CAAC,QAAQ,gBAAAA,KAAC,eAAY,OAAO,QAAQ,IAAK;AAE5F,SACE,gBAAAC,MAAC,YAAO,cAAY,OAAO,WAAWC,IAAG,2CAA2C,SAAS,GAC1F;AAAA,uBAAmB,SAAS;AAAA,IAC7B,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,WAAU;AAAA,QACT,GAAI,cACD,EAAE,MAAM,SAAS,UAAU,GAAG,cAAc,GAAG,KAAK,mDAAoC,WAAW,OAAO,IAC1G,CAAC;AAAA,QAEJ;AAAA,kBACC,gBAAAD,KAAC,cAAW,MAAM,cAChB,0BAAAA,KAAC,SAAM,MAAK,MAAK,OAAO,WAAW,GACrC,IAEA;AAAA,UAED,WAAW,gBAAAA,KAAC,gBAAa,OAAO,SAAS,OAAO,WAAW;AAAA;AAAA;AAAA,IAC9D;AAAA,IACC,mBAAmB,YAAY;AAAA,IAC/B,CAAC,SACA,gBAAAC,MAAC,WAAM,WAAU,WACf;AAAA,sBAAAD,KAAC,aAAS,iBAAM;AAAA,MAChB,gBAAAA,KAAC,WACC,0BAAAA,KAAC,QACE,gBAAM,QAAQ,IAAI,CAAC,MAClB,gBAAAA,KAAC,QAAW,OAAM,OACf,eADM,CAET,CACD,GACH,GACF;AAAA,MACA,gBAAAA,KAAC,WACE,gBAAM,KAAK,IAAI,CAAC,KAAK,MACpB,gBAAAA,KAAC,QACE,cAAI,IAAI,CAAC,MAAM,MAAO,MAAM,IAAI,gBAAAA,KAAC,QAAW,OAAM,OAAO,kBAAhB,CAAqB,IAAQ,gBAAAA,KAAC,QAAY,kBAAJ,CAAS,CAAM,KADxF,CAET,CACD,GACH;AAAA,OACF;AAAA,KAEJ;AAEJ;AAGO,SAAS,UAAU,KAAa,SAAwB,OAA8B;AAC3F,MAAI,UAAU,EAAG,QAAO;AACxB,UAAQ,KAAK;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AACH,aAAO,YAAY,OAAO,IAAI,KAAK,IAAI,UAAU,GAAG,QAAQ,CAAC;AAAA,IAC/D,KAAK;AAAA,IACL,KAAK;AACH,aAAO,YAAY,OAAO,QAAQ,IAAI,KAAK,IAAI,UAAU,GAAG,CAAC;AAAA,IAC/D,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO,QAAQ;AAAA,IACjB;AACE,aAAO;AAAA,EACX;AACF;;;AEzJQ,SAEI,OAAAG,MAFJ,QAAAC,aAAA;AAjDD,IAAM,kBAAkB,CAAC,MAAc,KAAa,UAAU,SAAS,KAAK,SAAS,UAAU,MAAM;AAerG,SAAS,QAAQ,OAAe,QAAgB,KAAa,YAAsB,kBAAkB,MAAe;AACzH,QAAM,OAAO,KAAK,KAAK,KAAK,IAAI,GAAG,GAAG,WAAW,IAAI,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC,CAAC,IAAI,MAAM,GAAG;AACjG,QAAM,QAAQ,KAAK,KAAK,MAAM,IAAI;AAClC,QAAM,MAAM,KAAK,KAAK,MAAM,GAAG;AAC/B,QAAM,SAAS,kBAAkB,KAAK,KAAK,MAAM,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG;AAC5E,SAAO,EAAE,MAAM,OAAO,KAAK,QAAQ,OAAO,KAAK,IAAI,GAAG,QAAQ,OAAO,KAAK,GAAG,QAAQ,KAAK,IAAI,GAAG,SAAS,MAAM,MAAM,EAAE;AAC1H;AAGO,SAAS,YAAY,QAAkB,WAAmB,KAAqB;AACpF,MAAI,OAAO,UAAU,KAAK,aAAa,EAAG,QAAO;AACjD,QAAM,SAAS,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC,CAAC,IAAI;AACzE,SAAO,KAAK,IAAI,GAAG,KAAK,KAAM,SAAS,OAAO,SAAU,SAAS,CAAC;AACpE;AAGO,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAOI;AACF,SACE,gBAAAA,MAAC,OAAE,eAAW,MACX;AAAA,WAAO,MAAM,IAAI,CAAC,MACjB,gBAAAA,MAAC,OACE;AAAA,kBACC,gBAAAD,KAAC,UAAK,IAAI,IAAI,MAAM,IAAI,IAAI,OAAO,IAAI,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,WAAU,sBAAqB,aAAa,GAAG,gBAAe,cAAa;AAAA,MAE/I,gBAAAA,KAAC,UAAK,GAAG,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC,GAAG,IAAG,UAAS,YAAW,OAAM,WAAU,wCACpE,iBAAO,CAAC,GACX;AAAA,SANM,CAOR,CACD;AAAA,IACA,YAAY,OAAO,MAAM,KAAK,OAAO,MAAM,KAC1C,gBAAAA,KAAC,UAAK,IAAI,IAAI,MAAM,IAAI,IAAI,OAAO,IAAI,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,WAAU,wBAAuB,aAAa,GAAG,gBAAe,cAAa;AAAA,KAEnJ;AAEJ;AAGO,SAAS,WAAW,EAAE,QAAQ,GAAG,KAAK,QAAQ,SAAS,GAA+H;AAC3L,SACE,gBAAAA,KAAC,OAAE,eAAW,MACX,iBAAO,MAAM,IAAI,CAAC,MACjB,gBAAAC,MAAC,OACE;AAAA,gBAAY,gBAAAD,KAAC,UAAK,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI,QAAQ,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,WAAU,sBAAqB,aAAa,GAAG,gBAAe,cAAa;AAAA,IACzJ,gBAAAA,KAAC,UAAK,GAAG,EAAE,CAAC,GAAG,GAAG,IAAI,MAAM,IAAI,SAAS,GAAG,IAAG,UAAS,YAAW,UAAS,WAAU,wCACnF,iBAAO,CAAC,GACX;AAAA,OAJM,CAKR,CACD,GACH;AAEJ;AAGO,SAAS,oBAAoB,OAAe,QAA0B;AAC3E,QAAM,QAAkB,CAAC;AACzB,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK,OAAQ,OAAM,KAAK,CAAC;AACpD,QAAM,OAAO,QAAQ;AACrB,QAAM,OAAO,MAAM,MAAM,SAAS,CAAC,KAAK;AACxC,MAAI,OAAO,QAAQ,OAAO,QAAQ,SAAS,IAAK,OAAM,KAAK,IAAI;AAC/D,SAAO;AACT;AAGO,SAAS,QAAQ,EAAE,QAAQ,KAAK,KAAK,OAAO,GAA6F;AAC9I,SACE,gBAAAA,KAAC,OAAE,eAAW,MACX,8BAAoB,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC,MAC/C,gBAAAA,KAAC,UAAa,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,MAAM,IAAI,SAAS,GAAG,IAAG,UAAS,YAAW,UAAS,WAAU,2BAC7F,iBAAO,CAAC,KADA,CAEX,CACD,GACH;AAEJ;AAMO,SAAS,QAAQ,GAAW,GAAW,GAAW,GAAW,QAAgB,KAAkD;AACpI,MAAI,KAAK,KAAK,KAAK,EAAG,QAAO;AAC7B,QAAM,IAAI,KAAK,IAAI,SAAS,QAAQ,SAAS,QAAQ,WAAW,IAAI,KAAK,GAAG,QAAQ,SAAS,QAAQ,WAAW,IAAI,CAAC;AACrH,QAAME,KAAI,CAAC,MAAc,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC5C,QAAM,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,CAACA,GAAE,CAAC,GAAGA,GAAE,CAAC,GAAGA,GAAE,IAAI,CAAC,GAAGA,GAAE,IAAI,CAAC,CAAC;AACxD,MAAI,KAAK,EAAG,QAAO,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AACjD,UAAQ,KAAK;AAAA,IACX,KAAK;AACH,aAAO,IAAI,EAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAIA,GAAE,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,CAAC,CAAC,IAAI,EAAE;AAAA,IACnH,KAAK;AACH,aAAO,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAIA,GAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,IAAI,CAAC,CAAC;AAAA,IAC3H,KAAK;AACH,aAAO,IAAI,EAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,CAAC,CAAC,IAAIA,GAAE,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE;AAAA,IAC3H,KAAK;AACH,aAAO,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,IAAI,CAAC,CAAC,IAAIA,GAAE,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAIA,GAAE,IAAI,CAAC,CAAC,IAAI,EAAE;AAAA,EACrH;AACF;;;AC5HO,SAAS,YAAY,OAA+B,OAAuB;AAChF,MAAI,OAAO,UAAU,SAAU,QAAO,oBAAoB,KAAK;AAC/D,QAAM,OAAO,SAAS,KAAK,IAAI,QAAQ,GAAG,CAAC;AAC3C,SAAO,0BAA0B,IAAI;AACvC;AAEO,SAAS,eAAe,QAAgB,gBAA4C;AACzF,QAAM,OAAO,IAAI,KAAK,aAAa,QAAQ,EAAE,uBAAuB,EAAE,CAAC;AACvE,QAAM,UAAU,IAAI,KAAK,aAAa,QAAQ,EAAE,UAAU,WAAW,uBAAuB,EAAE,CAAC;AAC/F,SAAO;AAAA;AAAA,IAEL,OAAO,mBAAmB,CAAC,MAAc,KAAK,OAAO,CAAC;AAAA;AAAA,IAEtD,MAAM,mBAAmB,CAAC,MAAe,KAAK,IAAI,CAAC,KAAK,MAAS,QAAQ,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC;AAAA,EACpG;AACF;;;ACVA,IAAM,IAAI,CAAC,MAAc,OAAO,EAAE,QAAQ,CAAC,CAAC;AAE5C,SAAS,eAAe,QAAyB;AAC/C,SAAO,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE;AACnF;AAOA,SAAS,iBAAiB,QAAyB;AACjD,QAAM,IAAI,OAAO;AACjB,MAAI,IAAI,EAAG,QAAO,eAAe,MAAM;AACvC,QAAM,KAAe,CAAC;AACtB,QAAM,QAAkB,CAAC;AACzB,WAAS,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;AAC9B,OAAG,KAAK,OAAO,IAAI,CAAC,EAAG,CAAC,IAAI,OAAO,CAAC,EAAG,CAAC,CAAC;AACzC,UAAM,MAAM,OAAO,IAAI,CAAC,EAAG,CAAC,IAAI,OAAO,CAAC,EAAG,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE;AAAA,EAC/D;AACA,QAAM,UAAoB,CAAC,MAAM,CAAC,CAAE;AACpC,WAAS,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;AAC9B,UAAM,IAAI,MAAM,IAAI,CAAC;AACrB,UAAM,IAAI,MAAM,CAAC;AACjB,QAAI,IAAI,KAAK,EAAG,SAAQ,KAAK,CAAC;AAAA,SACzB;AACH,YAAM,KAAK,IAAI,GAAG,CAAC,IAAK,GAAG,IAAI,CAAC;AAChC,YAAM,KAAK,GAAG,CAAC,IAAK,IAAI,GAAG,IAAI,CAAC;AAChC,cAAQ,MAAM,KAAK,OAAO,KAAK,IAAI,KAAK,EAAE;AAAA,IAC5C;AAAA,EACF;AACA,UAAQ,KAAK,MAAM,IAAI,CAAC,CAAE;AAE1B,MAAI,IAAI,IAAI,EAAE,OAAO,CAAC,EAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAG,CAAC,CAAC,CAAC;AAChD,WAAS,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK;AAC9B,UAAM,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC;AACzB,UAAM,CAAC,IAAI,EAAE,IAAI,OAAO,IAAI,CAAC;AAC7B,UAAM,IAAI,GAAG,CAAC,IAAK;AACnB,SAAK,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,QAAQ,CAAC,IAAK,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,QAAQ,IAAI,CAAC,IAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;AAAA,EAC7G;AACA,SAAO;AACT;AAGO,SAAS,SAAS,QAA6B,QAAe,UAAkB;AACrF,QAAM,WAAsB,CAAC,CAAC,CAAC;AAC/B,aAAW,KAAK,QAAQ;AACtB,QAAI,EAAG,UAAS,SAAS,SAAS,CAAC,EAAG,KAAK,CAAC;AAAA,aACnC,SAAS,SAAS,SAAS,CAAC,EAAG,OAAQ,UAAS,KAAK,CAAC,CAAC;AAAA,EAClE;AACA,QAAM,OAAO,UAAU,WAAW,mBAAmB;AACrD,SAAO,SAAS,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE,KAAK,EAAE;AAC3D;AAGO,SAAS,SAAS,QAA6B,OAAe,QAAe,UAAkB;AACpG,QAAM,WAAsB,CAAC,CAAC,CAAC;AAC/B,aAAW,KAAK,QAAQ;AACtB,QAAI,EAAG,UAAS,SAAS,SAAS,CAAC,EAAG,KAAK,CAAC;AAAA,aACnC,SAAS,SAAS,SAAS,CAAC,EAAG,OAAQ,UAAS,KAAK,CAAC,CAAC;AAAA,EAClE;AACA,SAAO,SACJ,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,EAC1B,IAAI,CAAC,MAAM;AACV,UAAM,MAAM,UAAU,WAAW,iBAAiB,CAAC,IAAI,eAAe,CAAC;AACvE,WAAO,GAAG,GAAG,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC,EAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,EAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC;AAAA,EAChF,CAAC,EACA,KAAK,EAAE;AACZ;AAGO,SAAS,MAAM,IAAY,IAAY,GAAW,OAAsB;AAC7E,SAAO,CAAC,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;AAC5D;AAMO,SAAS,QAAQ,IAAY,IAAY,OAAe,OAAe,OAAe,KAAqB;AAChH,QAAM,QAAQ,MAAM;AACpB,MAAI,SAAS,EAAG,QAAO;AACvB,MAAI,SAAS,KAAK,KAAK,IAAI,MAAM;AAC/B,UAAM,MAAM,QAAQ,KAAK;AACzB,WAAO,QAAQ,IAAI,IAAI,OAAO,OAAO,OAAO,GAAG,IAAI,QAAQ,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,KAAK,KAAK,CAAC;AAAA,EAC3G;AACA,QAAM,QAAQ,QAAQ,KAAK,KAAK,IAAI;AACpC,QAAM,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,IAAI,OAAO,KAAK;AAC3C,QAAM,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,IAAI,OAAO,GAAG;AACzC,MAAI,SAAS,GAAG;AACd,WAAO,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;AAAA,EACpG;AACA,QAAM,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,IAAI,OAAO,GAAG;AACzC,QAAM,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,IAAI,OAAO,KAAK;AAC3C,SAAO,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,KAAK,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;AAC3J;AAGO,SAAS,cAAc,IAAY,IAAY,GAAW,OAAe,KAAqB;AACnG,MAAI,MAAM,SAAS,EAAG,QAAO;AAC7B,QAAM,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,IAAI,GAAG,KAAK;AACvC,QAAM,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,IAAI,GAAG,GAAG;AACrC,SAAO,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,QAAQ,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;AAClG;;;ACxGO,SAAS,SAAS,KAAa,KAAa,OAAuB;AACxE,QAAM,MAAM,KAAK,IAAI,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,KAAK;AACnD,MAAI,QAAQ,KAAK,CAAC,OAAO,SAAS,GAAG,EAAG,QAAO;AAC/C,QAAM,QAAQ,KAAK,MAAM,KAAK,MAAM,GAAG,CAAC;AACxC,QAAM,OAAO,MAAM;AACnB,QAAM,QAAQ,MAAM;AACpB,MAAI,SAAS,KAAK,QAAQ,EAAG,QAAO,KAAK;AACzC,MAAI,SAAS,KAAK,KAAK,EAAE,EAAG,QAAO,IAAI;AACvC,MAAI,SAAS,KAAK,MAAO,QAAO,IAAI;AACpC,SAAO;AACT;AAGA,IAAM,QAAQ,CAAC,MAAc,OAAO,WAAW,EAAE,YAAY,EAAE,CAAC;AAazD,SAAS,WAAW,KAAa,KAAa,QAAQ,GAAe;AAC1E,MAAI,KAAK,KAAK,IAAI,KAAK,GAAG;AAC1B,MAAI,KAAK,KAAK,IAAI,KAAK,GAAG;AAC1B,MAAI,OAAO,IAAI;AACb,UAAM,MAAM,OAAO,IAAI,IAAI,KAAK,IAAI,EAAE,IAAI;AAC1C,UAAM;AACN,UAAM;AAAA,EACR;AACA,QAAM,OAAO,SAAS,IAAI,IAAI,KAAK;AACnC,QAAM,UAAU,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,IAAI;AAClD,QAAM,UAAU,MAAM,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI;AACjD,QAAM,QAAkB,CAAC;AACzB,WAAS,IAAI,SAAS,KAAK,UAAU,OAAO,GAAG,KAAK,KAAM,OAAM,KAAK,MAAM,CAAC,CAAC;AAC7E,SAAO,EAAE,KAAK,SAAS,KAAK,SAAS,MAAM;AAC7C;AAGO,SAAS,YAAY,CAAC,IAAI,EAAE,GAAqB,CAAC,IAAI,EAAE,GAAqB;AAClF,QAAM,OAAO,KAAK,MAAM;AACxB,SAAO,CAAC,UAAkB,MAAO,QAAQ,MAAM,QAAS,KAAK;AAC/D;AAcO,SAAS,UAAU,OAAe,CAAC,IAAI,EAAE,GAAqB,eAAe,KAAgB;AAClG,QAAM,QAAQ,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK;AAC1C,QAAM,YAAY,QAAQ,IAAI;AAC9B,QAAM,UAAU,OAAO,aAAa;AACpC,QAAM,SAAS,CAAC,UAAkB,KAAK,QAAQ,OAAO;AACtD,QAAM,YAAY;AAClB,QAAM,SAAS,CAAC,UAAU,KAAK,QAAQ,OAAO,OAAO;AACrD,SAAO;AACT;AAGO,SAAS,OAAO,QAA+D;AACpF,MAAI,KAAK;AACT,MAAI,KAAK;AACT,aAAW,KAAK,QAAQ;AACtB,QAAI,KAAK,QAAQ,OAAO,MAAM,CAAC,EAAG;AAClC,QAAI,IAAI,GAAI,MAAK;AACjB,QAAI,IAAI,GAAI,MAAK;AAAA,EACnB;AACA,SAAO,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;AAC3C;;;ACrFA,SAAS,aAAa,WAAW,gBAAgB;AAkB1C,SAAS,eAAsC;AACpD,QAAM,CAAC,IAAI,KAAK,IAAI,SAAmB,IAAI;AAC3C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAoB,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,CAAC;AAC5E,QAAM,MAAM,YAAY,CAAC,SAAmB,MAAM,IAAI,GAAG,CAAC,CAAC;AAE3D,YAAU,MAAM;AACd,QAAI,CAAC,GAAI;AACT,UAAM,UAAU,MAAM;AACpB,YAAM,MAAM,OAAO,WAAW,iBAAiB,SAAS,eAAe,EAAE,QAAQ,KAAK;AACtF;AAAA,QAAQ,CAAC,SACP,KAAK,UAAU,GAAG,eAAe,KAAK,WAAW,GAAG,gBAAgB,KAAK,QAAQ,MAC7E,OACA,EAAE,OAAO,GAAG,aAAa,QAAQ,GAAG,cAAc,IAAI;AAAA,MAC5D;AAAA,IACF;AACA,YAAQ;AACR,QAAI,OAAO,mBAAmB,YAAa;AAC3C,UAAM,WAAW,IAAI,eAAe,OAAO;AAC3C,aAAS,QAAQ,EAAE;AACnB,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG,CAAC,EAAE,CAAC;AAEP,SAAO,CAAC,KAAK,IAAI;AACnB;;;ACjCO,IAAM,qBAAqB;AAGlC,IAAM,SAAS;AACf,IAAM,SAAS;AACf,IAAM,OAAO;AACb,IAAM,OAAO;AAGb,IAAM,UAAU,CAAC,OAAe,UAAkB,GAAG,KAAK,MAAO,KAAK,IAAI,OAAO,KAAK,IAAI,MAAO,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC;AAO7G,SAAS,UAAU,UAA+B,YAAqB,MAAc,OAAe,OAAoE;AAC7K,MAAI,CAAC,SAAU,QAAO,CAAC;AACvB,SAAO;AAAA,IACL,WAAW,aAAa,SAAS;AAAA,IACjC,OAAO,EAAE,iBAAiB,aAAa,GAAG,IAAI,WAAW,OAAO,IAAI,MAAM,gBAAgB,QAAQ,OAAO,KAAK,EAAE;AAAA,EAClH;AACF;AAMO,SAAS,gBAAgB,UAA+B,MAAmE;AAChI,MAAI,CAAC,SAAU,QAAO,CAAC;AACvB,SAAO,EAAE,WAAW,QAAQ,OAAO,EAAE,iBAAiB,GAAG,IAAI,SAAS,EAAE;AAC1E;AAGO,SAAS,UAAU,UAAsG;AAC9H,MAAI,CAAC,SAAU,QAAO,CAAC;AACvB,SAAO,EAAE,WAAW,MAAM,YAAY,GAAG,iBAAiB,MAAM;AAClE;AAGO,SAAS,eAAe,UAA+B,UAAU,oBAAyE;AAC/I,MAAI,CAAC,SAAU,QAAO,CAAC;AACvB,SAAO,EAAE,WAAW,MAAM,OAAO,EAAE,gBAAgB,GAAG,OAAO,KAAK,EAAE;AACtE;;;AR4CoB,gBAAAC,MA0CN,QAAAC,aA1CM;AAxEpB,IAAM,WAAW,CAAC,MAA+B,OAAO,MAAM,YAAY,OAAO,SAAS,CAAC,IAAI,IAAI;AAQ5F,SAAS,UAAa;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,WAAW;AAAA,EACX;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,WAAW;AAAA,EACX;AACF,GAAgC;AAC9B,QAAM,CAAC,SAAS,IAAI,IAAI,aAA6B;AACrD,QAAM,SAAS,aAAa,MAAM,EAAE,QAAQ,WAAW,EAAE,CAAC;AAC1D,QAAM,CAAC,QAAQ,SAAS,IAAIC,UAAwB,IAAI;AACxD,QAAM,MAAM,QAAQ,MAAM,eAAe,QAAQ,cAAc,GAAG,CAAC,QAAQ,cAAc,CAAC;AAE1F,QAAM,UAAU,KAAK,IAAI,CAAC,QAAS,aAAa,WAAW,IAAI,IAAI,GAAG,GAAG,IAAI,OAAO,IAAI,IAAI,KAAK,EAAE,CAAE;AACrG,QAAM,SAAS,OAAO,IAAI,CAAC,GAAG,MAAM,YAAY,EAAE,OAAO,CAAC,CAAC;AAC3D,QAAM,SAAS,OAAO,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ,SAAS,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAC5E,QAAM,CAAC,IAAI,EAAE,IAAI,OAAO,MAAM;AAC9B,QAAM,SAAS,WAAW,cAAc,KAAK,IAAI,GAAG,EAAE,IAAI,IAAI,cAAc,KAAK,IAAI,GAAG,EAAE,IAAI,EAAE;AAChG,QAAM,MAAM,QAAQ,KAAK,OAAO,KAAK,QAAQ,KAAK,KAAK,OAAO,MAAM,IAAI,IAAI,IAAI,CAAC;AACjF,QAAM,IAAI,YAAY,CAAC,OAAO,KAAK,OAAO,GAAG,GAAG,CAAC,IAAI,MAAM,IAAI,QAAQ,IAAI,GAAG,CAAC;AAC/E,QAAM,MAAM,CAAC,MAAe,KAAK,UAAU,IAAI,IAAI,OAAO,IAAI,QAAQ,IAAI,IAAI,OAAQ,IAAI,IAAI,SAAU,KAAK,SAAS;AACtH,QAAM,SAAS,YAAY,SAAS,IAAI,OAAO,KAAK,GAAG;AACvD,QAAM,QAAQ,EAAE,KAAK,IAAI,OAAO,KAAK,KAAK,IAAI,GAAG,OAAO,GAAG,CAAC,CAAC;AAE7D,QAAM,SAAU,cAAc,OAAO,SAAS,IAAK,OAAO,IAAI,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,OAAO,CAAC,GAAI,OAAO,OAAQ,SAAoB,OAAiB,EAAE,IAAI;AAEtK,QAAM,YAAY,CAAC,MAA4B;AAC7C,UAAM,MAAM,KAAK,CAAC;AAClB,UAAM,KAAK,OAAO,IAAI,CAAC,MAAM,SAAS,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAmB,MAAM,IAAI;AACxF,WAAO;AAAA,MACL,GAAG,IAAI,CAAC;AAAA,MACR,GAAG,GAAG,SAAS,EAAE,KAAK,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,SAAS;AAAA,MAC3D,OAAO,QAAQ,CAAC;AAAA,MAChB,MAAM,OAAO,IAAI,CAAC,GAAG,OAAO;AAC1B,cAAM,IAAI,SAAS,IAAI,EAAE,GAAG,CAAC;AAC7B,eAAO,EAAE,MAAM,EAAE,MAAM,OAAO,OAAO,EAAE,GAAI,OAAO,QAAQ,OAAO,MAAM,OAAO,WAAM,IAAI,MAAM,CAAC,EAAE;AAAA,MACnG,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,gBAAgB,CAAC,MAA0C;AAC/D,UAAM,OAAO,EAAE,cAAc,sBAAsB;AACnD,UAAM,KAAK,EAAE,UAAU,KAAK;AAC5B,UAAM,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,MAAO,KAAK,KAAK,SAAU,KAAK,SAAS,EAAE;AACjF,cAAU,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,SAAS,GAAG,CAAC,CAAC,CAAC;AAAA,EACrD;AAEA,QAAM,QAAQ,KAAK,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,SAAS;AAE9D,SACE,gBAAAF;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,gBAAAA,KAAC,qBAAkB,OAAM,QAAO,OAAO,KAAK,UAAU,GAAG;AAAA,MACvE,gBAAgB,QAAQ,UAAU;AAAA,MAClC,OAAO,KAAK,WAAW,KAAK,OAAO,WAAW;AAAA,MAC9C;AAAA,MACA;AAAA,MACA,OAAO;AAAA,QACL,SAAS,CAAC,OAAO,IAAI,GAAG,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAAA,QACpD,MAAM,KAAK,IAAI,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,GAAI,GAAG,OAAO,IAAI,CAAC,MAAM;AAC5D,gBAAM,IAAI,SAAS,IAAI,EAAE,GAAG,CAAC;AAC7B,iBAAO,MAAM,OAAO,WAAM,IAAI,MAAM,CAAC;AAAA,QACvC,CAAC,CAAC,CAAC;AAAA,MACL;AAAA,MACA,SAAS,WAAW,QAAQ,KAAK,MAAM,IAAI,UAAU,MAAM,IAAI;AAAA,MAC/D;AAAA,MACA,WAAW,KAAK;AAAA,MAChB,WAAW,CAAC,MAAM;AAChB,cAAM,OAAO,UAAU,EAAE,KAAK,QAAQ,KAAK,MAAM;AACjD,YAAI,SAAS,KAAM;AACnB,UAAE,eAAe;AACjB,kBAAU,IAAI;AAAA,MAChB;AAAA,MACA,QAAQ,MAAM,UAAU,IAAI;AAAA,MAE3B,mBACC,gBAAAC,MAAC,SAAI,eAAW,MAAC,OAAO,KAAK,OAAO,QAAQ,KAAK,QAAQ,WAAU,qCACjE;AAAA,wBAAAD,KAAC,SAAM,QAAgB,GAAM,KAAU,QAAQ,IAAI,MAAM,UAAoB,UAAQ,MAAC;AAAA,QACtF,gBAAAA,KAAC,WAAQ,QAAQ,SAAS,KAAU,KAAU,QAAgB;AAAA,QAC7D,YACC,gBAAAA,KAAC,UAEC,0BAAAA,KAAC,cAAS,IAAI,QACZ,0BAAAA,KAAC,UAAK,GAAG,IAAI,OAAO,GAAG,GAAG,GAAG,OAAO,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAS,GAAG,gBAAgB,UAAU,IAAI,OAAO,CAAC,GAAG,GACvH,GACF;AAAA,QAEF,gBAAAA,KAAC,OAAE,UAAU,WAAW,QAAQ,MAAM,MAAM,QAC3C,iBAAO,IAAI,CAAC,GAAG,OAAO;AACrB,gBAAM,MAA2B,KAAK,IAAI,CAAC,KAAK,MAAM;AACpD,kBAAM,IAAI,SAAS,IAAI,EAAE,GAAG,CAAC;AAC7B,mBAAO,MAAM,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAAA,UAC1C,CAAC;AACD,iBACE,gBAAAC,MAAC,OACE;AAAA,oBAAQ,gBAAAD,KAAC,UAAK,GAAG,SAAS,KAAK,OAAO,KAAK,GAAG,MAAM,OAAO,EAAE,GAAG,aAAa,KAAK;AAAA,YACnF,gBAAAA,KAAC,UAAK,GAAG,SAAS,KAAK,KAAK,GAAG,MAAK,QAAO,QAAQ,OAAO,EAAE,GAAG,aAAa,GAAG,gBAAe,SAAQ,eAAc,SAAQ;AAAA,eAFtH,EAAE,GAGV;AAAA,QAEJ,CAAC,GACD;AAAA,QACC,WAAW,QACV,gBAAAC,MAAC,OACC;AAAA,0BAAAD,KAAC,UAAK,IAAI,IAAI,MAAM,GAAG,IAAI,IAAI,MAAM,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI,QAAQ,WAAU,wBAAuB,aAAa,GAAG;AAAA,UAC/H,OAAO,IAAI,CAAC,GAAG,OAAO;AACrB,kBAAM,IAAI,SAAS,KAAK,MAAM,IAAI,EAAE,GAAG,CAAC;AACxC,mBAAO,MAAM,OAAO,OAClB,gBAAAA,KAAC,YAAmB,IAAI,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC,GAAG,GAAG,GAAG,MAAM,OAAO,EAAE,GAAG,WAAU,uBAAsB,aAAa,KAAvG,EAAE,GAAwG;AAAA,UAE3H,CAAC;AAAA,WACH;AAAA,QAGF,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,GAAG,IAAI;AAAA,YACP,GAAG,IAAI;AAAA,YACP,OAAO,IAAI;AAAA,YACX,QAAQ,IAAI;AAAA,YACZ,MAAK;AAAA,YACL;AAAA,YACA,gBAAgB,MAAM,UAAU,IAAI;AAAA;AAAA,QACtC;AAAA,SACF;AAAA;AAAA,EAEJ;AAEJ;;;ASzKA,SAAgB,WAAAG,UAAS,YAAAC,iBAAgB;;;ACElC,IAAM,MAAM;AAEZ,IAAM,MAAM,CAAC,MAAgB,OAAO,MAAM,YAAY,OAAO,SAAS,CAAC,IAAI,IAAI;AAG/E,SAAS,YAAY,MAAkB,SAAoC;AAChF,MAAI,KAAK;AACT,MAAI,KAAK;AACT,aAAW,UAAU,MAAM;AACzB,QAAI,SAAS;AACX,WAAK,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,CAAC;AACxE,WAAK,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,CAAC;AAAA,IAC1E,OAAO;AACL,WAAK,KAAK,IAAI,IAAI,GAAG,MAAM;AAC3B,WAAK,KAAK,IAAI,IAAI,GAAG,MAAM;AAAA,IAC7B;AAAA,EACF;AACA,SAAO,CAAC,IAAI,EAAE;AAChB;AAiBA,SAAS,QAAQ,GAAgB,QAAgB,MAAc,IAAY,UAA2B;AACpG,QAAM,IAAI,EAAE,MAAM,IAAI;AACtB,QAAM,IAAI,EAAE,MAAM,EAAE;AACpB,QAAM,SAAS,WAAW,IAAI;AAC9B,QAAM,MAAM,EAAE,WAAW,SAAS,IAAI,MAAM;AAC5C,QAAM,WAAW,MAAM;AACvB,QAAM,KAAK,KAAK,IAAI,GAAG,CAAC;AACxB,QAAM,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI;AAC9B,MAAI,EAAE,YAAY;AAChB,WAAO,WAAW,QAAQ,KAAK,KAAK,QAAQ,KAAK,EAAE,WAAW,QAAQ,OAAO,IAAI,QAAQ,IAAI,QAAQ,KAAK,EAAE,WAAW,QAAQ,MAAM;AAAA,EACvI;AACA,SAAO,WAAW,QAAQ,QAAQ,IAAI,EAAE,WAAW,KAAK,QAAQ,KAAK,IAAI,QAAQ,QAAQ,KAAK,KAAK,EAAE,WAAW,KAAK,QAAQ,QAAQ;AACvI;AAGA,SAAS,aAAa,QAAgD;AACpE,MAAI,MAAM;AACV,MAAI,MAAM;AACV,SAAO,QAAQ,CAAC,GAAG,MAAM;AACvB,QAAI,IAAI,EAAG,OAAM;AACjB,QAAI,IAAI,EAAG,OAAM;AAAA,EACnB,CAAC;AACD,SAAO,EAAE,KAAK,IAAI;AACpB;AAGO,SAAS,UAAU,MAAkB,GAA4B;AACtE,QAAM,aAAa,EAAE,UAAU,IAAK,KAAK,CAAC,GAAG,UAAU;AACvD,QAAM,OAAO,EAAE,YAAY,aAAa,OAAO,aAAa;AAC5D,QAAM,SAAqB,CAAC;AAC5B,OAAK,QAAQ,CAAC,QAAQ,MAAM;AAC1B,UAAM,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,OAAO;AACxC,UAAM,QAAQ,aAAa,MAAM;AACjC,QAAI,MAAM;AACV,QAAI,MAAM;AACV,WAAO,QAAQ,CAAC,GAAG,MAAM;AACvB,UAAI,MAAM,EAAG;AACb,UAAI,CAAC,EAAE,SAAS;AACd,eAAO,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,GAAG,QAAQ,GAAG,QAAQ,KAAK,EAAE,YAAY,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC;AAC7F;AAAA,MACF;AACA,YAAM,OAAO,IAAI,IAAI,MAAM;AAC3B,UAAI,IAAI,EAAG,QAAO;AAAA,UACb,QAAO;AACZ,aAAO,KAAK,EAAE,KAAK,GAAG,QAAQ,GAAG,GAAG,QAAQ,GAAG,OAAO,MAAM,OAAO,GAAG,OAAO,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,EAAE,CAAC;AAAA,IAChH,CAAC;AAAA,EACH,CAAC;AACD,SAAO;AACT;;;ADIoB,SA8BR,UA9BQ,OAAAC,MA8BR,QAAAC,aA9BQ;AA/Db,SAAS,SAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,WAAW;AAAA,EACX;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,WAAW;AAAA,EACX;AACF,GAA+B;AAC7B,QAAM,CAAC,SAAS,IAAI,IAAI,aAA6B;AACrD,QAAM,CAAC,QAAQ,SAAS,IAAIC,UAAwB,IAAI;AACxD,QAAM,MAAMC,SAAQ,MAAM,eAAe,QAAQ,cAAc,GAAG,CAAC,QAAQ,cAAc,CAAC;AAC1F,QAAM,aAAa,WAAW;AAE9B,QAAM,aAAa,KAAK,IAAI,CAAC,QAAS,aAAa,WAAW,IAAI,IAAI,GAAG,GAAG,IAAI,OAAO,IAAI,IAAI,KAAK,EAAE,CAAE;AACxG,QAAM,SAAS,OAAO,IAAI,CAAC,GAAG,MAAM,YAAY,EAAE,OAAO,CAAC,CAAC;AAE3D,QAAM,SAAS,KAAK,IAAI,CAAC,QAAQ,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AACnE,QAAM,SAAS,WAAW,GAAG,YAAY,QAAQ,OAAO,CAAC;AAGzD,QAAM,MAAe,QAAQ,KAAK,OAAO,KAAK,QAAQ,KAAK,KAAK,aAAa,aAAa,OAAO,MAAM,IAAI,IAAI,IAAI,CAAC;AAEpH,QAAM,QAAQ,aAAa,YAAY,CAAC,OAAO,KAAK,OAAO,GAAG,GAAG,CAAC,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,CAAC,IAAI,YAAY,CAAC,OAAO,KAAK,OAAO,GAAG,GAAG,CAAC,IAAI,MAAM,IAAI,QAAQ,IAAI,GAAG,CAAC;AAC1K,QAAM,OAAO,aAAa,UAAU,KAAK,QAAQ,CAAC,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,GAAG,GAAG,IAAI,UAAU,KAAK,QAAQ,CAAC,IAAI,MAAM,IAAI,OAAO,IAAI,KAAK,GAAG,GAAG;AACrJ,QAAM,eAAe,KAAK,MAAM;AAChC,QAAM,aAAa,UAAU,IAAI,OAAO;AACxC,QAAM,YAAY,KAAK,IAAI,GAAG,KAAK,IAAI,eAAe,KAAK,YAAY,OAAO,aAAa,MAAM,UAAU,CAAC;AAC5G,QAAM,OAAO,MAAM,CAAC;AACpB,QAAM,OAAO,UAAU,QAAQ,EAAE,YAAY,SAAS,MAAM,OAAO,UAAU,CAAC;AAE9E,QAAM,SAAU,cAAc,OAAO,SAAS,IAAK,OAAO,IAAI,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,OAAO,CAAC,GAAI,OAAO,OAAgB,EAAE,IAAI;AAEzI,QAAM,YAAY,CAAC,MAA4B;AAC7C,UAAM,MAAM,KAAK,CAAC;AAClB,UAAM,QAAQ,OAAO,OAAO,CAAC,KAAK,MAAM,MAAM,IAAI,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC;AAChE,UAAM,MAAM,MAAM,UAAU,QAAQ,KAAK,IAAI,GAAG,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACtF,WAAO;AAAA,MACL,GAAG,aAAa,MAAM,KAAK,OAAO,CAAC;AAAA,MACnC,GAAG,aAAa,KAAK,OAAO,CAAC,IAAI;AAAA,MACjC,OAAO,WAAW,CAAC;AAAA,MACnB,MAAM,OAAO,IAAI,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,MAAM,OAAO,OAAO,EAAE,GAAI,OAAO,QAAQ,OAAO,IAAI,MAAM,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE;AAAA,IACtH;AAAA,EACF;AAEA,QAAM,SAAS,aAAa,IAAI,YAAY,YAAY,IAAI,OAAO,KAAK,GAAG;AAC3E,QAAM,QAAQ,KAAK,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,SAAS;AAC9D,QAAM,aAAa,aAAa,IAAI,SAAS,IAAI;AACjD,QAAM,OAAO,KAAK,SAAS,aAAa,KAAK,SAAS;AAEtD,SACE,gBAAAH;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,gBAAAA,KAAC,qBAAkB,OAAO,aAAa,kBAAkB,OAAO,OAAO,KAAK,UAAU,GAAG;AAAA,MACvG,gBAAgB,QAAQ,UAAU;AAAA,MAClC,OAAO,KAAK,WAAW,KAAK,OAAO,WAAW;AAAA,MAC9C;AAAA,MACA;AAAA,MACA,OAAO;AAAA,QACL,SAAS,CAAC,OAAO,IAAI,GAAG,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAAA,QACpD,MAAM,KAAK,IAAI,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,GAAI,GAAG,OAAO,IAAI,CAAC,MAAM,IAAI,MAAM,IAAI,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA,MAC/F;AAAA,MACA,SAAS,WAAW,QAAQ,KAAK,MAAM,IAAI,UAAU,MAAM,IAAI;AAAA,MAC/D;AAAA,MACA,WAAW,KAAK;AAAA,MAChB,WAAW,CAAC,MAAM;AAChB,cAAM,OAAO,UAAU,EAAE,KAAK,QAAQ,KAAK,MAAM;AACjD,YAAI,SAAS,KAAM;AACnB,UAAE,eAAe;AACjB,kBAAU,IAAI;AAAA,MAChB;AAAA,MACA,QAAQ,MAAM,UAAU,IAAI;AAAA,MAE3B,mBACC,gBAAAC,MAAC,SAAI,eAAW,MAAC,OAAO,KAAK,OAAO,QAAQ,KAAK,QAAQ,WAAU,qCAEhE;AAAA,mBAAW,SACT,aACC,gBAAAD,KAAC,UAAK,GAAG,IAAI,MAAM,GAAG,IAAI,MAAM,SAAS,MAAM,OAAO,IAAI,OAAO,QAAQ,MAAM,WAAU,yBAAwB,IAEjH,gBAAAA,KAAC,UAAK,GAAG,IAAI,OAAO,SAAS,MAAM,GAAG,IAAI,KAAK,OAAO,MAAM,QAAQ,IAAI,QAAQ,WAAU,yBAAwB;AAAA,QAErH,aACC,gBAAAC,MAAA,YACE;AAAA,0BAAAD,KAAC,cAAW,QAAgB,GAAG,OAAO,KAAU,QAAQ,IAAI,MAAM,UAAoB;AAAA,UACtF,gBAAAA,KAAC,OAAE,eAAW,MACX,qBAAW,IAAI,CAAC,GAAG,MAClB,gBAAAA,KAAC,UAAa,GAAG,IAAI,OAAO,GAAG,GAAG,KAAK,OAAO,CAAC,GAAG,IAAG,UAAS,YAAW,OAAM,WAAU,2BACtF,eADQ,CAEX,CACD,GACH;AAAA,UACA,gBAAAA,KAAC,UAAK,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI,QAAQ,WAAU,wBAAuB,aAAa,GAAG,gBAAe,cAAa;AAAA,WAChJ,IAEA,gBAAAC,MAAA,YACE;AAAA,0BAAAD,KAAC,SAAM,QAAgB,GAAG,OAAO,KAAU,QAAQ,IAAI,MAAM,UAAoB,UAAU,OAAO;AAAA,UAClG,gBAAAA,KAAC,WAAQ,QAAQ,YAAY,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,GAAG,KAAU,QAAgB;AAAA,UACnF,gBAAAA,KAAC,UAAK,IAAI,IAAI,MAAM,IAAI,IAAI,OAAO,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,WAAU,wBAAuB,aAAa,GAAG,gBAAe,cAAa;AAAA,WACjJ;AAAA,QAED,KAAK,IAAI,CAAC,QACT,gBAAAA,KAAC,UAAsC,GAAG,IAAI,GAAG,MAAM,OAAO,IAAI,MAAM,GAAI,GAAG,UAAU,UAAU,YAAY,MAAM,IAAI,KAAK,KAAK,MAAM,KAA9H,GAAG,IAAI,GAAG,IAAI,IAAI,MAAM,EAAyG,CAC7I;AAAA,QAEA,KAAK;AAAA,UAAI,CAAC,GAAG,MACZ,aACE,gBAAAA,KAAC,UAAa,GAAG,IAAI,MAAM,GAAG,IAAI,MAAM,IAAI,MAAM,OAAO,IAAI,OAAO,QAAQ,MAAM,MAAK,eAAc,gBAAgB,MAAM,UAAU,CAAC,GAAG,gBAAgB,MAAM,UAAU,IAAI,KAAlK,CAAqK,IAEhL,gBAAAA,KAAC,UAAa,GAAG,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,KAAK,OAAO,MAAM,QAAQ,IAAI,QAAQ,MAAK,eAAc,gBAAgB,MAAM,UAAU,CAAC,GAAG,gBAAgB,MAAM,UAAU,IAAI,KAAnK,CAAsK;AAAA,QAErL;AAAA,SACF;AAAA;AAAA,EAEJ;AAEJ;;;AExJA,SAAgB,SAAAI,QAAO,WAAAC,UAAS,YAAAC,iBAAgB;AAChD,SAAS,MAAAC,WAAU;AA2GC,gBAAAC,MAsDR,QAAAC,aAtDQ;AAnEb,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,cAAc;AAAA,EACd;AAAA,EACA,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,cAAc;AAAA,EACd;AAAA,EACA,SAAS;AAAA,EACT,YAAY;AAAA,EACZ;AAAA,EACA,WAAW;AAAA,EACX;AACF,GAA4B;AAC1B,QAAM,CAAC,SAAS,IAAI,IAAI,aAA6B;AACrD,QAAM,SAAS,YAAYC,OAAM,EAAE,QAAQ,WAAW,EAAE,CAAC;AACzD,QAAM,CAAC,QAAQ,SAAS,IAAIC,UAAwB,IAAI;AACxD,QAAM,MAAMC,SAAQ,MAAM,eAAe,QAAQ,cAAc,GAAG,CAAC,QAAQ,cAAc,CAAC;AAC1F,QAAM,UAAUA,SAAQ,MAAM,IAAI,KAAK,aAAa,QAAQ,EAAE,OAAO,WAAW,uBAAuB,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;AAErH,QAAM,SAASA,SAAQ,MAAM;AAC3B,UAAM,WAAW,KAAK,OAAO,CAAC,MAAM,OAAO,SAAS,EAAE,KAAK,KAAK,EAAE,QAAQ,CAAC;AAC3E,QAAI,SAAS,UAAU,UAAW,QAAO;AACzC,UAAM,OAAO,SAAS,MAAM,GAAG,YAAY,CAAC;AAC5C,UAAM,OAAO,SAAS,MAAM,YAAY,CAAC,EAAE,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,OAAO,CAAC;AAC9E,WAAO,CAAC,GAAG,MAAM,EAAE,MAAM,YAAY,OAAO,KAAK,CAAC;AAAA,EACpD,GAAG,CAAC,MAAM,WAAW,UAAU,CAAC;AAEhC,QAAM,QAAQ,OAAO,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,OAAO,CAAC;AACxD,QAAM,SAAS,OAAO,IAAI,CAAC,GAAG,MAAM,YAAY,EAAE,OAAO,CAAC,CAAC;AAC3D,QAAM,KAAK,KAAK,QAAQ;AACxB,QAAM,KAAK,KAAK,SAAS;AACzB,QAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC;AACnE,QAAM,QAAQ,QAAQ,QAAQ,OAAO;AAErC,MAAI,QAAQ;AACZ,QAAM,OAAO,OAAO,IAAI,CAAC,GAAG,MAAM;AAChC,UAAM,QAAQ;AACd,aAAU,EAAE,QAAQ,QAAS,KAAK,KAAK;AACvC,WAAO,EAAE,GAAG,GAAG,OAAO,KAAK,OAAO,OAAO,OAAO,CAAC,EAAG;AAAA,EACtD,CAAC;AAED,QAAM,SAAS,KAAK,IAAI,CAAC,OAAO;AAAA,IAC9B,MAAM,cAAc,GAAG,EAAE,IAAI,SAAM,QAAQ,OAAO,EAAE,QAAQ,KAAK,CAAC,KAAK,EAAE;AAAA,IACzE,OAAO,EAAE;AAAA,IACT,OAAO;AAAA,EACT,EAAE;AAEF,QAAM,YAAY,WAAW,OAAO,KAAK,MAAM,IAAI;AACnD,QAAM,UAAU,aACX,MAAM;AACL,UAAM,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,KAAK,QAAQ,SAAS,KAAK,QAAQ,MAAM,UAAU,QAAQ,UAAU,OAAO,CAAC;AACtG,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,IAAI,SAAM,QAAQ,OAAO,UAAU,QAAQ,KAAK,CAAC,IAAI,OAAO,UAAU,OAAO,OAAO,QAAiB,OAAO,IAAI,MAAM,UAAU,KAAK,EAAE,CAAC;AAAA,IACtK;AAAA,EACF,GAAG,IACH;AAEJ,SACE,gBAAAJ;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,gBAAAA,KAAC,eAAY,OAAc;AAAA,MACzC,gBAAgB,KAAK,IAAI,KAAK,UAAU,GAAG,SAAS;AAAA,MACpD,OAAO,OAAO,WAAW;AAAA,MACzB;AAAA,MACA;AAAA,MACA,gBAAe;AAAA,MACf,OAAO,EAAE,SAAS,CAAC,SAAS,cAAS,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,MAAM,EAAE,KAAK,GAAG,QAAQ,OAAO,EAAE,QAAQ,KAAK,CAAC,CAAC,EAAE;AAAA,MACnI;AAAA,MACA;AAAA,MACA,WAAW,KAAK;AAAA,MAChB,WAAW,CAAC,MAAM;AAChB,cAAM,OAAO,UAAU,EAAE,KAAK,QAAQ,KAAK,MAAM;AACjD,YAAI,SAAS,KAAM;AACnB,UAAE,eAAe;AACjB,kBAAU,IAAI;AAAA,MAChB;AAAA,MACA,QAAQ,MAAM,UAAU,IAAI;AAAA,MAE3B,kBAAQ,KACP,gBAAAC,MAAC,SAAI,eAAW,MAAC,OAAO,KAAK,OAAO,QAAQ,KAAK,QAAQ,WAAU,qCAChE;AAAA,oBACC,gBAAAD,KAAC,UAGC,0BAAAA,KAAC,UAAK,IAAI,QAAQ,WAAU,kBAC1B,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA,IAAI,QAAQ,KAAK;AAAA,YACjB,MAAK;AAAA,YACL,QAAO;AAAA,YACP,aAAa,QAAQ;AAAA,YACrB,WAAW,cAAc,EAAE,IAAI,EAAE;AAAA,YAChC,GAAG,UAAU,QAAQ;AAAA;AAAA,QACxB,GACF,GACF;AAAA,QAEF,gBAAAA,KAAC,OAAE,MAAM,WAAW,QAAQ,MAAM,MAAM,QACvC,eAAK,IAAI,CAAC,GAAG,MACZ,gBAAAA;AAAA,UAAC;AAAA;AAAA,YAEC,GAAG,QAAQ,IAAI,IAAI,MAAM,SAAS,QAAQ,IAAI,OAAO,OAAO,EAAE,OAAO,EAAE,GAAG;AAAA,YAC1E,MAAM,EAAE;AAAA,YAER,WAAU;AAAA,YACV,aAAa,KAAK,SAAS,IAAI,IAAI;AAAA,YACnC,gBAAe;AAAA,YACf,gBAAgB,MAAM,UAAU,CAAC;AAAA,YACjC,gBAAgB,MAAM,UAAU,IAAI;AAAA;AAAA,UAR/B,EAAE;AAAA,QAST,CACD,GACD;AAAA,QACC,SACC,gBAAAC,MAAC,OAAE,WAAWI,IAAG,uBAAuB,eAAe,UAAU,GAAG,EAAE,SAAS,GAAG,OAAO,eAAe,UAAU,GAAG,EAAE,OACrH;AAAA,0BAAAL,KAAC,UAAK,GAAG,IAAI,GAAG,IAAI,IAAG,WAAU,YAAW,UAAS,WAAU,2BAC5D,uBACH;AAAA,UACA,gBAAAA,KAAC,UAAK,GAAG,IAAI,GAAG,IAAI,IAAG,OAAM,YAAW,UAAS,WAAU,8CACxD,yBAAe,IAAI,MAAM,KAAK,GACjC;AAAA,WACF;AAAA,SAEJ;AAAA;AAAA,EAEJ;AAEJ;;;AC/KA,SAAgB,SAAAM,cAAa;AAC7B,SAAS,iBAAiB;AAC1B,SAAS,MAAAC,WAAU;AAwCI,gBAAAC,MAwBb,QAAAC,aAxBa;AAJhB,SAAS,UAAU,EAAE,MAAM,OAAO,QAAQ,SAAS,WAAW,WAAW,OAAO,OAAO,QAAQ,UAAU,UAAU,WAAW,MAAM,YAAY,YAAY,UAAU,GAA6B;AACxM,QAAM,CAAC,KAAK,IAAI,IAAI,aAA6B;AACjD,QAAM,SAAS,cAAcC,OAAM,EAAE,QAAQ,WAAW,EAAE,CAAC;AAE3D,MAAI,SAAU,QAAO,gBAAAF,KAAC,UAAK,eAAW,MAAC,iBAAc,IAAG,WAAWG,IAAG,wCAAwC,aAAa,IAAI,GAAG,SAAS,GAAG,OAAO,SAAS,GAAG,GAAG;AAEpK,QAAM,SAAS,UAAU,UAAU,4BAA4B,YAAY,OAAO,CAAC;AACnF,QAAM,MAAM;AACZ,QAAM,CAAC,IAAI,EAAE,IAAI,OAAO,IAAI;AAC5B,QAAM,OAAO,OAAO;AACpB,QAAM,IAAI,YAAY,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,SAAS,KAAK,GAAG,CAAC;AAClF,QAAM,IAAI,CAAC,MAAe,KAAK,UAAU,IAAI,KAAK,QAAQ,IAAI,MAAO,KAAK,KAAK,QAAQ,MAAM,MAAO,KAAK,SAAS;AAClH,QAAM,MAA2B,KAAK,IAAI,CAAC,GAAG,MAAO,KAAK,OAAO,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAE;AACrF,MAAI,YAAY;AAChB,WAAS,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AACzC,QAAI,KAAK,CAAC,KAAK,MAAM;AACnB,kBAAY;AACZ;AAAA,IACF;AAAA,EACF;AACA,QAAM,OAAO,aAAa,IAAI,IAAI,SAAS,IAAI;AAG/C,MAAI,CAAC,MAAM;AACT,WACE,gBAAAH,KAAC,SAAI,MAAK,OAAM,cAAY,WAAW,WAAWG,IAAG,uBAAuB,SAAS,GACnF,0BAAAH,KAAC,cAAW,SAAO,MAAC,MAAM,gBAAAA,KAAC,UAAK,WAAWG,IAAG,oBAAoB,aAAa,KAAK,CAAC,GAAG,OAAO,SAAS,GAAG,GAAG,GAE5G,0BAAAF,MAAC,UAAK,WAAU,qDACd;AAAA,sBAAAD,KAAC,aAAU,eAAW,MAAC,WAAU,qBAAoB;AAAA,MACpD;AAAA,OACH,GACF,GACF;AAAA,EAEJ;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAWG,IAAG,cAAc,SAAS;AAAA,MACrC,MAAM,QAAQ,QAAQ;AAAA,MACtB,cAAY;AAAA,MACZ,eAAa,QAAQ,SAAY;AAAA,MAEhC,eAAK,QAAQ,KACZ,gBAAAF,MAAC,SAAI,OAAO,KAAK,OAAO,QAAQ,KAAK,QAAQ,eAAW,MAAC,WAAU,0BAChE;AAAA,oBACC,gBAAAD,KAAC,UACC,0BAAAA,KAAC,cAAS,IAAI,QACZ,0BAAAA,KAAC,UAAK,GAAG,IAAI,GAAG,IAAI,OAAO,KAAK,QAAQ,GAAG,QAAQ,KAAK,SAAS,GAAI,GAAG,gBAAgB,UAAU,EAAE,GAAG,GACzG,GACF;AAAA,QAEF,gBAAAC,MAAC,OAAE,UAAU,WAAW,QAAQ,MAAM,MAAM,QACzC;AAAA,kBAAQ,gBAAAD,KAAC,UAAK,GAAG,SAAS,KAAK,KAAK,QAAQ,KAAK,GAAG,MAAM,QAAQ,aAAa,KAAK;AAAA,UACrF,gBAAAA,KAAC,UAAK,GAAG,SAAS,KAAK,KAAK,GAAG,MAAK,QAAO,QAAgB,aAAa,KAAK,eAAc,SAAQ,gBAAe,SAAQ;AAAA,WAC5H;AAAA,QACC,QAAQ,gBAAAA,KAAC,YAAO,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,GAAG,MAAM,YAAY,UAAU,CAAC,GAAG,WAAWG,IAAG,uBAAuB,eAAe,QAAQ,EAAE,SAAS,GAAG,OAAO,eAAe,QAAQ,EAAE,OAAO,aAAa,KAAK;AAAA,SACtN;AAAA;AAAA,EAEJ;AAEJ;;;ACrGA,SAAgB,WAAAC,gBAAe;AAC/B,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,MAAAC,WAAU;AAgGb,SACE,OAAAC,MADF,QAAAC,aAAA;AAtDN,IAAM,QAAQ,CAAC,KAAK,KAAK;AACzB,IAAM,MAAM,KAAK,KAAK;AAGtB,IAAM,IAAI;AACV,IAAM,KAAK;AACX,IAAM,KAAK;AACX,IAAM,SAAS;AAMf,SAAS,UAAU,WAAyC;AAC1D,QAAM,CAAC,MAAM,IAAI,IAAI,MAAM,IAAI,IAAI,GAAG,KAAK;AAC3C,QAAM,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,GAAG,GAAG;AACnC,QAAM,OAAO,CAAC,GAAW,GAAW,GAAW,MAAc,YAAY,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;AAC9H,SAAO;AAAA,IACL,0EACc,cAAc,IAAI,IAAI,GAAG,OAAO,GAAG,CAAC,8CAA8C,MAAM,gCACnG,YAAY,KAAK,IAAI,IAAI,IAAI,EAAE,IAAI,MACpC,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,IAC5B,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,IAC5B;AAAA,EACJ;AACF;AAEA,IAAM,gBAAgB,UAAU,IAAI;AAEpC,IAAM,aAAa,UAAU,KAAK;AAO3B,SAAS,MAAM;AAAA,EACpB;AAAA,EACA,MAAM;AAAA,EACN,MAAM;AAAA,EACN;AAAA,EACA,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,YAAY;AAAA,EACZ;AAAA,EACA,WAAW;AAAA,EACX;AACF,GAAyB;AACvB,QAAM,SAASC,SAAQ,MAAM,mBAAmB,CAAC,MAAc,IAAI,KAAK,aAAa,QAAQ,EAAE,uBAAuB,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,MAAM,CAAC;AAC/J,MAAI,UAAU;AACZ,WACE,gBAAAD,MAAC,SAAI,eAAW,MAAC,iBAAc,IAAG,WAAWE,IAAG,8DAA8D,SAAS,GACrH;AAAA,sBAAAH,KAAC,SAAI,WAAWG,IAAG,2BAA2B,aAAa,IAAI,CAAC,GAAG,OAAO,eAAe;AAAA,MACxF,CAAC,aACA,gBAAAH,KAAC,UAAK,WAAU,+BACd,0BAAAA,KAAC,UAAK,WAAWG,IAAG,+BAA+B,aAAa,IAAI,CAAC,GAAG,GAC1E;AAAA,OAEJ;AAAA,EAEJ;AAKA,MAAI,SAAS,QAAQ,CAAC,OAAO,SAAS,KAAK,GAAG;AAC5C,WACE,gBAAAF,MAAC,SAAI,MAAK,OAAM,cAAY,GAAG,KAAK,KAAK,SAAS,IAAI,WAAWE,IAAG,0CAA0C,SAAS,GACrH;AAAA,sBAAAH,KAAC,SAAI,WAAU,oCACb,0BAAAA,KAAC,cAAW,MAAM,gBAAAA,KAAC,SAAI,WAAWG,IAAG,oBAAoB,aAAa,KAAK,CAAC,GAAG,OAAO,YAAY,GAEhG,0BAAAF,MAAC,UAAK,WAAU,0HACd;AAAA,wBAAAD,KAACI,YAAA,EAAU,eAAW,MAAC,WAAU,UAAS;AAAA,QAC1C,gBAAAJ,KAAC,UAAK,WAAU,qBAAqB,qBAAU;AAAA,SACjD,GACF,GACF;AAAA,MACC,CAAC,aAAa,gBAAAA,KAAC,UAAK,WAAU,iCAAiC,iBAAM;AAAA,OACxE;AAAA,EAEJ;AAEA,QAAM,UAAU,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAClD,QAAM,QAAQ,QAAQ,MAAM,KAAK,UAAU,QAAQ,MAAM;AACzD,QAAMK,WAAU,UAAU,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,WAAW,EAAE,IAAI,KAAK,WAAW,SAAS,SAAS,CAAC;AAClI,QAAM,OAAO,YAAYA,UAAS,SAAS,OAAO,CAAC;AAEnD,QAAM,IAAI;AACV,QAAM,KAAK;AACX,QAAM,KAAK;AACX,QAAM,SAAS;AACf,QAAM,YAAY,OAAO,KAAK;AAE9B,QAAM,CAAC,MAAM,IAAI,IAAI,MAAM,IAAI,IAAI,GAAG,KAAK;AAC3C,QAAM,CAAC,MAAM,IAAI,IAAI,MAAM,IAAI,IAAI,GAAG,GAAG;AAEzC,SACE,gBAAAJ;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,kBAAgBI,UAAS,QAAQ,GAAG,SAAS,KAAKA,SAAQ,KAAK,KAAK;AAAA,MACpE,WAAWF,IAAG,0CAA0C,SAAS;AAAA,MAEjE;AAAA,wBAAAF,MAAC,SAAI,SAAQ,eAAc,eAAW,MAAC,WAAU,iCAC/C;AAAA,0BAAAD,KAAC,UAAK,GAAG,cAAc,IAAI,IAAI,GAAG,OAAO,GAAG,GAAG,MAAK,QAAO,QAAQ,MAAM,eAAe,MAAM,aAAa,QAAQ,eAAc,SAAQ;AAAA,UACxI,QAAQ,KACP,gBAAAA,KAAC,UAAK,GAAG,cAAc,IAAI,IAAI,GAAG,OAAO,SAAS,MAAM,SAAS,KAAK,GAAG,MAAK,QAAO,QAAQ,MAAM,aAAa,QAAQ,eAAc,SAAS,GAAG,UAAU,QAAQ,GAAG;AAAA,UAEzK,gBAAAA,KAAC,UAAK,GAAG,IAAI,GAAG,IAAI,IAAG,UAAS,YAAW,UAAS,UAAU,IAAI,WAAU,sCACzE,qBACH;AAAA,UACA,gBAAAA,KAAC,UAAK,GAAG,MAAM,GAAG,OAAO,IAAI,YAAW,UAAS,UAAU,IAAI,WAAU,gCACtE,iBAAO,GAAG,GACb;AAAA,UACA,gBAAAA,KAAC,UAAK,GAAG,MAAM,GAAG,OAAO,IAAI,YAAW,UAAS,UAAU,IAAI,WAAU,gCACtE,iBAAO,GAAG,GACb;AAAA,WACF;AAAA,QACC,CAAC,aAAa,gBAAAA,KAAC,UAAK,WAAU,iCAAiC,iBAAM;AAAA,QACrEK,UAAS,SAAS,gBAAAL,KAAC,UAAK,WAAU,4CAA4C,UAAAK,SAAQ,OAAM;AAAA;AAAA;AAAA,EAC/F;AAEJ;","names":["useState","cn","jsx","jsxs","cn","jsx","jsxs","f","jsx","jsxs","useState","useMemo","useState","jsx","jsxs","useState","useMemo","useId","useMemo","useState","cn","jsx","jsxs","useId","useState","useMemo","cn","useId","cn","jsx","jsxs","useId","cn","useMemo","InboxIcon","cn","jsx","jsxs","useMemo","cn","InboxIcon","segment"]}
1
+ {"version":3,"sources":["../src/chart/line-chart/LineChart.tsx","../src/chart/_shared/ChartFrame.tsx","../src/chart/_shared/ChartSkeleton.tsx","../src/chart/_shared/cartesian.tsx","../src/chart/_shared/format.ts","../src/chart/_shared/paths.ts","../src/chart/_shared/scale.ts","../src/chart/_shared/useChartSize.ts","../src/chart/_shared/animation.ts","../src/chart/bar-chart/BarChart.tsx","../src/chart/bar-chart/bars.ts","../src/chart/pie-chart/PieChart.tsx","../src/chart/sparkline/Sparkline.tsx","../src/chart/gauge/Gauge.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useId, useMemo, useState } from \"react\";\nimport type { CartesianChartProps } from \"../types\";\nimport { ChartFrame, nextIndex, type TooltipState } from \"../_shared/ChartFrame\";\nimport { YGrid, XLabels, labelStride, plotBox } from \"../_shared/cartesian\";\nimport { makeFormatters, seriesColor } from \"../_shared/format\";\nimport { areaPath, linePath, type Curve, type Point } from \"../_shared/paths\";\nimport { extent, linearScale, niceDomain } from \"../_shared/scale\";\nimport { useChartSize } from \"../_shared/useChartSize\";\nimport { CartesianSkeleton } from \"../_shared/ChartSkeleton\";\nimport { revealRectProps } from \"../_shared/animation\";\n\nexport interface LineChartProps<T> extends CartesianChartProps<T> {\n /** `\"smooth\"`: monoton eğri (veriyi aşan tepe çizmez). Varsayılan `\"linear\"`. */\n curve?: Curve;\n /** Çizginin altını serinin renginde hafif (%10) doldurur — Area grafiği. */\n area?: boolean;\n /**\n * Y ekseni sıfırdan başlasın mı. Varsayılan: `area`da `true` (alan büyüklük\n * anlatır), çizgide `false` (değişim anlatır; sıfır eklemek eğilimi ezer).\n */\n includeZero?: boolean;\n}\n\nconst toNumber = (v: unknown): number | null => (typeof v === \"number\" && Number.isFinite(v) ? v : null);\n\n/**\n * Çizgi / alan grafiği. Zaman ya da sıralı kategori boyunca\n * değişim. 2px çizgi; üzerine gelince dikey kılavuz en yakın noktaya oturur ve\n * o noktadaki TÜM serileri tek tooltip'te gösterir. Klavye: odaklanıp ok\n * tuşlarıyla noktalar gezilir. Eksik (`null`) değer çizgiyi böler — uydurulmaz.\n */\nexport function LineChart<T>({\n data,\n xKey,\n series,\n label,\n curve = \"linear\",\n area = false,\n includeZero = area,\n xFormatter,\n valueFormatter,\n locale = \"tr-TR\",\n showGrid = true,\n showLegend,\n emptyText = \"Veri yok\",\n skeleton,\n animated = true,\n className,\n}: Readonly<LineChartProps<T>>) {\n const [plotRef, size] = useChartSize<HTMLDivElement>();\n const clipId = `mari-line-${useId().replace(/[^\\w-]/g, \"\")}`;\n const [active, setActive] = useState<number | null>(null);\n const fmt = useMemo(() => makeFormatters(locale, valueFormatter), [locale, valueFormatter]);\n\n const xLabels = data.map((row) => (xFormatter ? xFormatter(row[xKey], row) : String(row[xKey] ?? \"\")));\n const colors = series.map((s, i) => seriesColor(s.color, i));\n const values = series.flatMap((s) => data.map((row) => toNumber(row[s.key])));\n const [lo, hi] = extent(values);\n const domain = niceDomain(includeZero ? Math.min(0, lo) : lo, includeZero ? Math.max(0, hi) : hi);\n const box = plotBox(size.width, size.height, size.rem, domain.ticks.map(fmt.axis));\n const y = linearScale([domain.min, domain.max], [box.top + box.height, box.top]);\n const xAt = (i: number) => (data.length <= 1 ? box.left + box.width / 2 : box.left + (i * box.width) / (data.length - 1));\n const stride = labelStride(xLabels, box.width, size.rem);\n const baseY = y(Math.max(domain.min, Math.min(0, domain.max)));\n\n const legend = (showLegend ?? series.length > 1) ? series.map((s, i) => ({ name: s.name, color: colors[i]!, shape: area ? (\"rect\" as const) : (\"line\" as const) })) : undefined;\n\n const tooltipAt = (i: number): TooltipState => {\n const row = data[i]!;\n const ys = series.map((s) => toNumber(row[s.key])).filter((v): v is number => v !== null);\n return {\n x: xAt(i),\n y: ys.length ? y(Math.max(...ys)) : box.top + box.height / 2,\n title: xLabels[i],\n rows: series.map((s, si) => {\n const v = toNumber(row[s.key]);\n return { name: s.name, color: colors[si]!, shape: \"line\", value: v === null ? \"—\" : fmt.value(v) };\n }),\n };\n };\n\n const onPointerMove = (e: React.PointerEvent<SVGRectElement>) => {\n const rect = e.currentTarget.getBoundingClientRect();\n const px = e.clientX - rect.left;\n const i = data.length <= 1 ? 0 : Math.round((px / rect.width) * (data.length - 1));\n setActive(Math.max(0, Math.min(data.length - 1, i)));\n };\n\n const ready = size.width > 0 && box.width > 0 && box.height > 0;\n\n return (\n <ChartFrame\n label={label}\n className={className}\n skeleton={skeleton}\n skeletonPlot={<CartesianSkeleton shape=\"line\" count={data.length || 6} />}\n skeletonLegend={legend?.length ?? 0}\n empty={data.length === 0 || series.length === 0}\n emptyText={emptyText}\n legend={legend}\n table={{\n columns: [String(xKey), ...series.map((s) => s.name)],\n rows: data.map((row, i) => [xLabels[i]!, ...series.map((s) => {\n const v = toNumber(row[s.key]);\n return v === null ? \"—\" : fmt.value(v);\n })]),\n }}\n tooltip={active !== null && data[active] ? tooltipAt(active) : null}\n plotRef={plotRef}\n plotWidth={size.width}\n onKeyDown={(e) => {\n const next = nextIndex(e.key, active, data.length);\n if (next === null) return;\n e.preventDefault();\n setActive(next);\n }}\n onBlur={() => setActive(null)}\n >\n {ready && (\n <svg aria-hidden width={size.width} height={size.height} className=\"absolute inset-0 overflow-visible\">\n <YGrid domain={domain} y={y} box={box} format={fmt.axis} showGrid={showGrid} zeroLine />\n <XLabels labels={xLabels} xAt={xAt} box={box} stride={stride} />\n {animated && (\n <defs>\n {/* Çizgi kalınlığı ve uç yuvarlağı kırpılmasın: kutunun her yanında pay. */}\n <clipPath id={clipId}>\n <rect x={box.left - 4} y={0} width={box.width + 8} height={size.height} {...revealRectProps(animated, box.left - 4)} />\n </clipPath>\n </defs>\n )}\n <g clipPath={animated ? `url(#${clipId})` : undefined}>\n {series.map((s, si) => {\n const pts: Array<Point | null> = data.map((row, i) => {\n const v = toNumber(row[s.key]);\n return v === null ? null : [xAt(i), y(v)];\n });\n return (\n <g key={s.key}>\n {area && <path d={areaPath(pts, baseY, curve)} fill={colors[si]} fillOpacity={0.1} />}\n <path d={linePath(pts, curve)} fill=\"none\" stroke={colors[si]} strokeWidth={2} strokeLinejoin=\"round\" strokeLinecap=\"round\" />\n </g>\n );\n })}\n </g>\n {active !== null && (\n <g>\n <line x1={xAt(active)} x2={xAt(active)} y1={box.top} y2={box.top + box.height} className=\"stroke-mari-muted/50\" strokeWidth={1} />\n {series.map((s, si) => {\n const v = toNumber(data[active]?.[s.key]);\n return v === null ? null : (\n <circle key={s.key} cx={xAt(active)} cy={y(v)} r={4} fill={colors[si]} className=\"stroke-mari-surface\" strokeWidth={2} />\n );\n })}\n </g>\n )}\n {/* Tüm çizim alanı vuruş hedefi: okuyucu tarihe nişan alır, 2px çizgiye değil. */}\n <rect\n x={box.left}\n y={box.top}\n width={box.width}\n height={box.height}\n fill=\"transparent\"\n onPointerMove={onPointerMove}\n onPointerLeave={() => setActive(null)}\n />\n </svg>\n )}\n </ChartFrame>\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { cn } from \"@mari-ui/core\";\nimport { Empty } from \"../../empty\";\nimport { ChartEmpty, LegendSkeleton } from \"./ChartSkeleton\";\n\nexport interface LegendItem {\n name: string;\n color: string;\n /** Lejant işareti işaretlediği şekle benzer: çubuk/alan/dilim → kare, çizgi → kısa çizgi. */\n shape: \"rect\" | \"line\";\n}\n\nexport interface TooltipRow extends LegendItem {\n value: string;\n}\n\nexport interface TooltipState {\n /** Grafik alanı içindeki piksel konumu. */\n x: number;\n y: number;\n title?: string;\n rows: TooltipRow[];\n}\n\nexport interface TableModel {\n columns: string[];\n rows: Array<Array<string>>;\n}\n\nfunction Swatch({ color, shape }: Pick<LegendItem, \"color\" | \"shape\">) {\n return shape === \"line\" ? (\n <span aria-hidden className=\"h-0.5 w-3 shrink-0 rounded-full\" style={{ backgroundColor: color }} />\n ) : (\n <span aria-hidden className=\"size-2.5 shrink-0 rounded-sm\" style={{ backgroundColor: color }} />\n );\n}\n\nexport function ChartLegend({ items }: Readonly<{ items: LegendItem[] }>) {\n return (\n <ul className=\"flex flex-wrap gap-x-4 gap-y-1 text-xs text-mari-muted\">\n {items.map((item) => (\n <li key={item.name} className=\"flex items-center gap-1.5\">\n <Swatch color={item.color} shape={item.shape} />\n {item.name}\n </li>\n ))}\n </ul>\n );\n}\n\n/**\n * Tek tooltip, o noktadaki TÜM seriler. Değer önde ve güçlü, seri adı ikincil\n * (lejantın tersi: okuyucu seriyi biliyor, sayıyı istiyor). Görsel kolaylık —\n * değerlere tablo ile de ulaşılır, bu yüzden ekran okuyucudan gizli.\n */\nfunction ChartTooltip({ state, width }: Readonly<{ state: TooltipState; width: number }>) {\n const flip = state.x > width / 2;\n return (\n <div\n aria-hidden\n className=\"pointer-events-none absolute z-mari-tooltip min-w-32 rounded-md border border-mari-border bg-mari-surface px-3 py-2 text-xs shadow-mari-md\"\n style={{\n left: state.x,\n top: state.y,\n transform: `translate(${flip ? \"calc(-100% - 0.75rem)\" : \"0.75rem\"}, -50%)`,\n }}\n >\n {state.title && <p className=\"mb-1 text-mari-muted\">{state.title}</p>}\n <ul className=\"flex flex-col gap-1\">\n {state.rows.map((row) => (\n <li key={row.name} className=\"flex items-center gap-2\">\n <Swatch color={row.color} shape=\"line\" />\n <span className=\"font-semibold tabular-nums text-mari-foreground\">{row.value}</span>\n <span className=\"text-mari-muted\">{row.name}</span>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\nexport interface ChartFrameProps {\n label: string;\n className?: string;\n skeleton?: boolean;\n empty: boolean;\n emptyText: string;\n legend?: LegendItem[];\n table: TableModel;\n tooltip: TooltipState | null;\n plotRef: React.Ref<HTMLDivElement>;\n plotWidth: number;\n /** Klavye: ok tuşlarıyla odak noktasını gezdirmek için (grafik türü işler). */\n onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;\n onBlur?: () => void;\n children: React.ReactNode;\n /** Lejant konumu. Varsayılan üstte (okuyucu önce neyin ne olduğunu görsün). */\n legendPosition?: \"top\" | \"bottom\";\n /** İskelette çizim alanı — grafiğin kendi şekli (`ChartSkeleton`). */\n skeletonPlot: React.ReactNode;\n /** İskelette lejant öğesi sayısı (0 → lejant yok); yüklü halle aynı yerde. */\n skeletonLegend?: number;\n}\n\n/**\n * Tüm grafiklerin ortak kabuğu: lejant, ölçülen çizim alanı, tooltip, boş ve\n * iskelet hali, ekran okuyucu tablosu. Değerler tooltip'e kapanmaz — aynı veri\n * görünmez bir `<table>`da da var (renk tek başına kimlik taşımaz kuralı).\n */\nexport function ChartFrame({\n label,\n className,\n skeleton,\n empty,\n emptyText,\n legend,\n table,\n tooltip,\n plotRef,\n plotWidth,\n onKeyDown,\n onBlur,\n children,\n legendPosition = \"top\",\n skeletonPlot,\n skeletonLegend = 0,\n}: Readonly<ChartFrameProps>) {\n if (skeleton) {\n const legendStub = skeletonLegend > 0 ? <LegendSkeleton count={skeletonLegend} /> : null;\n return (\n <div aria-hidden data-skeleton=\"\" className={cn(\"pointer-events-none flex h-64 w-full min-w-0 flex-col gap-3\", className)}>\n {legendPosition === \"top\" && legendStub}\n <div className=\"relative min-h-0 flex-1\">{skeletonPlot}</div>\n {legendPosition === \"bottom\" && legendStub}\n </div>\n );\n }\n\n const interactive = !empty && Boolean(onKeyDown);\n const legendNode = legend && legend.length > 0 && !empty ? <ChartLegend items={legend} /> : null;\n\n return (\n <figure aria-label={label} className={cn(\"flex h-64 w-full min-w-0 flex-col gap-3\", className)}>\n {legendPosition === \"top\" && legendNode}\n <div\n ref={plotRef}\n className=\"relative min-h-0 flex-1 rounded-sm focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-mari-ring\"\n {...(interactive\n ? { role: \"group\", tabIndex: 0, \"aria-label\": `${label}. Değerleri ok tuşlarıyla gezin.`, onKeyDown, onBlur }\n : {})}\n >\n {empty ? (\n <ChartEmpty plot={skeletonPlot}>\n <Empty size=\"sm\" title={emptyText} />\n </ChartEmpty>\n ) : (\n children\n )}\n {tooltip && <ChartTooltip state={tooltip} width={plotWidth} />}\n </div>\n {legendPosition === \"bottom\" && legendNode}\n {!empty && (\n <table className=\"sr-only\">\n <caption>{label}</caption>\n <thead>\n <tr>\n {table.columns.map((c) => (\n <th key={c} scope=\"col\">\n {c}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {table.rows.map((row, i) => (\n <tr key={i}>\n {row.map((cell, j) => (j === 0 ? <th key={j} scope=\"row\">{cell}</th> : <td key={j}>{cell}</td>))}\n </tr>\n ))}\n </tbody>\n </table>\n )}\n </figure>\n );\n}\n\n/** Ok/Home/End ile 0…count-1 arasında gezinme; diğer tuşlarda `null`. */\nexport function nextIndex(key: string, current: number | null, count: number): number | null {\n if (count === 0) return null;\n switch (key) {\n case \"ArrowRight\":\n case \"ArrowDown\":\n return current === null ? 0 : Math.min(current + 1, count - 1);\n case \"ArrowLeft\":\n case \"ArrowUp\":\n return current === null ? count - 1 : Math.max(current - 1, 0);\n case \"Home\":\n return 0;\n case \"End\":\n return count - 1;\n default:\n return null;\n }\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { cn } from \"@mari-ui/core\";\nimport { skeletonFill } from \"../../lib/skeleton\";\n\n/**\n * Grafik iskeletleri — tek düz kutu yerine grafiğin KENDİ şekli (çubuklar,\n * çizgi, dilim halkası, gösterge yayı) ve yüklü haldeki yerleşim (eksen\n * etiketleri, lejant). Yüklenince hiçbir şey kaymaz; okuyucu ne geleceğini\n * şekilden anlar. Parıltı ortak `skeletonFill` — SVG şekiller için dolgu bir\n * `<div>`e verilip şekil CSS maskesiyle kesilir (SVG'de gradyan kaydırmak\n * yerine aynı parıltı).\n */\n\n/** SVG işaretlemesini maske görseline çevirir (kutuya gerilir). */\nexport function svgMask(svg: string): React.CSSProperties {\n const url = `url(\"data:image/svg+xml;utf8,${encodeURIComponent(svg)}\")`;\n return { maskImage: url, WebkitMaskImage: url, maskSize: \"100% 100%\", WebkitMaskSize: \"100% 100%\", maskRepeat: \"no-repeat\", WebkitMaskRepeat: \"no-repeat\" };\n}\n\n/** Kutuya gerilen dalga; çizgi kalınlığı gerilmez (`non-scaling-stroke`). */\nexport function waveMask(strokeWidth: number): React.CSSProperties {\n return svgMask(\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\" preserveAspectRatio=\"none\"><path d=\"M1 72 C 12 70, 16 48, 27 52 S 42 74, 53 58 S 68 22, 80 30 S 94 40, 99 18\" fill=\"none\" stroke=\"black\" stroke-width=\"${strokeWidth}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" vector-effect=\"non-scaling-stroke\"/></svg>`\n );\n}\n\n/** Metin satırı yer tutucusu: kutu bir satır yüksekliğinde, çubuk yazı gövdesi kadar. */\nfunction TextStub({ className }: Readonly<{ className?: string }>) {\n return <span aria-hidden className={cn(\"block h-2 rounded-sm\", skeletonFill(true), className)} />;\n}\n\n/** Ad yer tutucuları dönüşümlü iki uzunlukta — tek tip çubuk dizisi gibi görünmesin. */\nconst categoryStubWidth = (i: number) => (i % 2 ? \"w-10\" : \"w-14\");\n\nexport function LegendSkeleton({ count }: Readonly<{ count: number }>) {\n return (\n <div className=\"flex flex-wrap gap-x-4 gap-y-1\">\n {Array.from({ length: count }, (_, i) => (\n <span key={i} className=\"flex h-4 items-center gap-1.5\">\n <span className={cn(\"size-2.5 rounded-sm\", skeletonFill(true))} />\n <TextStub className={categoryStubWidth(i)} />\n </span>\n ))}\n </div>\n );\n}\n\n/** Çubuk boyları — sabit, rastgele değil (her render aynı; SSR ile uyumlu). */\nconst BAR_HEIGHTS = [0.55, 0.8, 0.4, 0.95, 0.65, 0.75, 0.5, 0.85, 0.6, 0.7, 0.45, 0.9];\n\nexport type CartesianSkeletonShape = \"bar\" | \"barHorizontal\" | \"line\";\n\n/**\n * Kartezyen iskelet: `plotBox` ile aynı boşluklar (sol değer etiketleri,\n * alt kategori etiketleri; üst 0.5rem, sağ 0.75rem, alt 1.75rem).\n */\nexport function CartesianSkeleton({ shape, count }: Readonly<{ shape: CartesianSkeletonShape; count: number }>) {\n const n = Math.max(3, Math.min(12, count));\n const horizontal = shape === \"barHorizontal\";\n return (\n <div className=\"absolute inset-0\">\n {/* Sol etiketler: dikeyde değerler (kısa), yatayda kategori adları (uzun). */}\n <div className={cn(\"absolute top-2 bottom-7 left-0 flex flex-col items-end\", horizontal ? \"w-16 justify-around\" : \"w-8 justify-between\")}>\n {Array.from({ length: horizontal ? n : 4 }, (_, i) => (\n <TextStub key={i} className={horizontal ? categoryStubWidth(i) : \"w-6\"} />\n ))}\n </div>\n <div className={cn(\"absolute top-2 right-3 bottom-7\", horizontal ? \"left-18\" : \"left-10\")}>\n {!horizontal && (\n <div className=\"absolute inset-0 flex flex-col justify-between\">\n {Array.from({ length: 4 }, (_, i) => (\n <span key={i} className=\"h-px bg-mari-border/70\" />\n ))}\n </div>\n )}\n {shape === \"line\" && <div className={cn(\"absolute inset-0\", skeletonFill(true))} style={waveMask(2)} />}\n {shape === \"bar\" && (\n <div className=\"absolute inset-0 flex items-end justify-around\">\n {Array.from({ length: n }, (_, i) => (\n <span key={i} className={cn(\"w-[min(1.5rem,6%)] rounded-t-sm\", skeletonFill(true))} style={{ height: `${BAR_HEIGHTS[i % BAR_HEIGHTS.length]! * 100}%` }} />\n ))}\n </div>\n )}\n {horizontal && (\n <div className=\"absolute inset-0 flex flex-col justify-around border-l border-mari-border/70\">\n {Array.from({ length: n }, (_, i) => (\n <span key={i} className={cn(\"rounded-r-sm\", skeletonFill(true))} style={{ width: `${BAR_HEIGHTS[i % BAR_HEIGHTS.length]! * 100}%`, height: `min(1.5rem, ${60 / n}%)` }} />\n ))}\n </div>\n )}\n </div>\n {/* Alt etiketler: dikeyde kategoriler, yatayda değerler. */}\n <div className={cn(\"absolute right-3 bottom-0 flex h-5 items-center justify-around\", horizontal ? \"left-18\" : \"left-10\")}>\n {Array.from({ length: horizontal ? 4 : Math.min(n, 6) }, (_, i) => (\n <TextStub key={i} className=\"w-8\" />\n ))}\n </div>\n </div>\n );\n}\n\n/**\n * Boş durum — tüm grafiklerde aynı: arkada grafiğin iskelet şekli (aynı\n * eksenler/işaretler) bulanık ve SABİT (parıltı yok: yüklenmiyor, veri yok),\n * önde uyarı. Okuyucu burada ne tür bir grafik olacağını görür; düz bir\n * \"Veri yok\" kutusu gibi alan boş kalmaz.\n */\nexport function ChartEmpty({ plot, children, compact = false }: Readonly<{ plot: React.ReactNode; children: React.ReactNode; compact?: boolean }>) {\n return (\n <div className=\"absolute inset-0\">\n {/* Küçük (Sparkline) şekilde ince çizgi fazla bulanıklıkta kaybolur. */}\n <div aria-hidden className={cn(\"absolute inset-0 [&_*]:animate-none\", compact ? \"blur-[1px]\" : \"blur-[2px]\")}>\n {plot}\n </div>\n <div className=\"absolute inset-0 grid place-items-center\">{children}</div>\n </div>\n );\n}\n\n/** Pasta / halka: çizim alanına sığan en büyük daire (grafikteki `outer` gibi 6px pay). */\nexport function PieSkeleton({ donut }: Readonly<{ donut: boolean }>) {\n return (\n <div className=\"absolute inset-1.5 grid place-items-center\">\n <div\n className={cn(\"aspect-square h-full max-w-full rounded-full\", skeletonFill(true))}\n // Halka: iç yarıçap dış yarıçapın %62'si (PieChart ile aynı).\n style={donut ? { maskImage: \"radial-gradient(circle closest-side, transparent 61.5%, black 62%)\", WebkitMaskImage: \"radial-gradient(circle closest-side, transparent 61.5%, black 62%)\" } : undefined}\n />\n </div>\n );\n}\n","import type { NiceDomain } from \"./scale\";\n\n/** Ortalama karakter genişliği ≈ 0.6em; eksen yazısı `text-xs` = 0.75rem. */\nexport const approxTextWidth = (text: string, rem: number, sizeRem = 0.75) => text.length * sizeRem * rem * 0.6;\n\nexport interface PlotBox {\n left: number;\n right: number;\n top: number;\n bottom: number;\n width: number;\n height: number;\n}\n\n/**\n * Çizim alanı: sol boşluk en uzun y etiketine göre, alt boşluk x etiketlerine.\n * Hepsi rem'e bağlı — büyük ekran ölçeğinde orantılı büyür.\n */\nexport function plotBox(width: number, height: number, rem: number, leftLabels: string[], hasBottomLabels = true): PlotBox {\n const left = Math.ceil(Math.max(0, ...leftLabels.map((l) => approxTextWidth(l, rem))) + rem * 0.5);\n const right = Math.ceil(rem * 0.75);\n const top = Math.ceil(rem * 0.5);\n const bottom = hasBottomLabels ? Math.ceil(rem * 1.75) : Math.ceil(rem * 0.5);\n return { left, right, top, bottom, width: Math.max(0, width - left - right), height: Math.max(0, height - top - bottom) };\n}\n\n/** Sığmayan x etiketlerini seyreltir: her `k`'ıncıyı gösterir (ilk ve son korunur). */\nexport function labelStride(labels: string[], available: number, rem: number): number {\n if (labels.length <= 1 || available <= 0) return 1;\n const widest = Math.max(...labels.map((l) => approxTextWidth(l, rem))) + rem;\n return Math.max(1, Math.ceil((widest * labels.length) / available));\n}\n\n/** Yatay kılavuz çizgileri + y ekseni değerleri. Kılavuz saç teli, düz, geri planda. */\nexport function YGrid({\n domain,\n y,\n box,\n format,\n showGrid,\n zeroLine,\n}: Readonly<{\n domain: NiceDomain;\n y: (v: number) => number;\n box: PlotBox;\n format: (v: number) => string;\n showGrid: boolean;\n zeroLine: boolean;\n}>) {\n return (\n <g aria-hidden>\n {domain.ticks.map((t) => (\n <g key={t}>\n {showGrid && (\n <line x1={box.left} x2={box.left + box.width} y1={y(t)} y2={y(t)} className=\"stroke-mari-border\" strokeWidth={1} shapeRendering=\"crispEdges\" />\n )}\n <text x={box.left - 8} y={y(t)} dy=\"0.32em\" textAnchor=\"end\" className=\"fill-mari-muted text-xs tabular-nums\">\n {format(t)}\n </text>\n </g>\n ))}\n {zeroLine && domain.min < 0 && domain.max > 0 && (\n <line x1={box.left} x2={box.left + box.width} y1={y(0)} y2={y(0)} className=\"stroke-mari-muted/60\" strokeWidth={1} shapeRendering=\"crispEdges\" />\n )}\n </g>\n );\n}\n\n/** Dikey kılavuz + x değerleri (yatay çubuk grafiğinin değer ekseni). */\nexport function XValueGrid({ domain, x, box, format, showGrid }: Readonly<{ domain: NiceDomain; x: (v: number) => number; box: PlotBox; format: (v: number) => string; showGrid: boolean }>) {\n return (\n <g aria-hidden>\n {domain.ticks.map((t) => (\n <g key={t}>\n {showGrid && <line y1={box.top} y2={box.top + box.height} x1={x(t)} x2={x(t)} className=\"stroke-mari-border\" strokeWidth={1} shapeRendering=\"crispEdges\" />}\n <text x={x(t)} y={box.top + box.height + 8} dy=\"0.71em\" textAnchor=\"middle\" className=\"fill-mari-muted text-xs tabular-nums\">\n {format(t)}\n </text>\n </g>\n ))}\n </g>\n );\n}\n\n/** Gösterilecek x etiketi indeksleri: her `stride`'ıncı; son etiket öncekine yeterince uzaksa o da. */\nexport function visibleLabelIndexes(count: number, stride: number): number[] {\n const shown: number[] = [];\n for (let i = 0; i < count; i += stride) shown.push(i);\n const last = count - 1;\n const prev = shown[shown.length - 1] ?? 0;\n if (last > prev && last - prev >= stride * 0.6) shown.push(last);\n return shown;\n}\n\n/** Kategori etiketleri (alt eksen). */\nexport function XLabels({ labels, xAt, box, stride }: Readonly<{ labels: string[]; xAt: (i: number) => number; box: PlotBox; stride: number }>) {\n return (\n <g aria-hidden>\n {visibleLabelIndexes(labels.length, stride).map((i) => (\n <text key={i} x={xAt(i)} y={box.top + box.height + 8} dy=\"0.71em\" textAnchor=\"middle\" className=\"fill-mari-muted text-xs\">\n {labels[i]}\n </text>\n ))}\n </g>\n );\n}\n\n/**\n * Çubuk: veri ucunda 4px yuvarlak, taban tarafında köşeli (tabandan büyür).\n * `end`: veri ucunun yönü.\n */\nexport function barPath(x: number, y: number, w: number, h: number, radius: number, end: \"top\" | \"bottom\" | \"right\" | \"left\"): string {\n if (w <= 0 || h <= 0) return \"\";\n const r = Math.min(radius, (end === \"top\" || end === \"bottom\" ? w : h) / 2, end === \"top\" || end === \"bottom\" ? h : w);\n const f = (n: number) => Number(n.toFixed(2));\n const [x0, y0, x1, y1] = [f(x), f(y), f(x + w), f(y + h)];\n if (r <= 0) return `M${x0},${y0}H${x1}V${y1}H${x0}Z`;\n switch (end) {\n case \"top\":\n return `M${x0},${y1}V${f(y + r)}Q${x0},${y0},${f(x + r)},${y0}H${f(x + w - r)}Q${x1},${y0},${x1},${f(y + r)}V${y1}Z`;\n case \"bottom\":\n return `M${x0},${y0}H${x1}V${f(y + h - r)}Q${x1},${y1},${f(x + w - r)},${y1}H${f(x + r)}Q${x0},${y1},${x0},${f(y + h - r)}Z`;\n case \"right\":\n return `M${x0},${y0}H${f(x + w - r)}Q${x1},${y0},${x1},${f(y + r)}V${f(y + h - r)}Q${x1},${y1},${f(x + w - r)},${y1}H${x0}Z`;\n case \"left\":\n return `M${x1},${y0}V${y1}H${f(x + r)}Q${x0},${y1},${x0},${f(y + h - r)}V${f(y + r)}Q${x0},${y0},${f(x + r)},${y0}Z`;\n }\n}\n","import type { ChartColor } from \"../types\";\n\n/** Seri rengi → CSS değeri. Palet sırası: verilmezse `index`ten (8'den sonra başa dönmez, son renkte kalır). */\nexport function seriesColor(color: ChartColor | undefined, index: number): string {\n if (typeof color === \"string\") return `var(--mari-color-${color}-solid)`;\n const slot = color ?? Math.min(index + 1, 8);\n return `var(--mari-color-chart-${slot})`;\n}\n\nexport function makeFormatters(locale: string, valueFormatter?: (value: number) => string) {\n const full = new Intl.NumberFormat(locale, { maximumFractionDigits: 2 });\n const compact = new Intl.NumberFormat(locale, { notation: \"compact\", maximumFractionDigits: 1 });\n return {\n /** Tooltip ve tablo: tam değer. */\n value: valueFormatter ?? ((v: number) => full.format(v)),\n /** Eksen: kısaltılmış (12,5 B) — özel biçim verildiyse o. */\n axis: valueFormatter ?? ((v: number) => (Math.abs(v) >= 10_000 ? compact.format(v) : full.format(v))),\n };\n}\n","/**\n * SVG `d` yolları (d3-shape'in ihtiyaç duyduğumuz kısmı):\n * düz/yumuşak çizgi, alan, pasta/halka dilimi, yay.\n */\n\nexport type Point = [number, number];\nexport type Curve = \"linear\" | \"smooth\";\n\nconst f = (n: number) => Number(n.toFixed(2));\n\nfunction linearSegments(points: Point[]): string {\n return points.map(([x, y], i) => `${i === 0 ? \"M\" : \"L\"}${f(x)},${f(y)}`).join(\"\");\n}\n\n/**\n * Monoton kübik eğri (Fritsch–Carlson; d3 `curveMonotoneX` ile aynı fikir):\n * noktalardan geçer, iki nokta arasında taşma YAPMAZ — veri 0 ile 10\n * arasındaysa çizgi 11'e çıkmaz, yanıltıcı tepe çizmez.\n */\nfunction monotoneSegments(points: Point[]): string {\n const n = points.length;\n if (n < 3) return linearSegments(points);\n const dx: number[] = [];\n const slope: number[] = [];\n for (let i = 0; i < n - 1; i++) {\n dx.push(points[i + 1]![0] - points[i]![0]);\n slope.push((points[i + 1]![1] - points[i]![1]) / (dx[i] || 1));\n }\n const tangent: number[] = [slope[0]!];\n for (let i = 1; i < n - 1; i++) {\n const a = slope[i - 1]!;\n const b = slope[i]!;\n if (a * b <= 0) tangent.push(0);\n else {\n const w1 = 2 * dx[i]! + dx[i - 1]!;\n const w2 = dx[i]! + 2 * dx[i - 1]!;\n tangent.push((w1 + w2) / (w1 / a + w2 / b));\n }\n }\n tangent.push(slope[n - 2]!);\n\n let d = `M${f(points[0]![0])},${f(points[0]![1])}`;\n for (let i = 0; i < n - 1; i++) {\n const [x0, y0] = points[i]!;\n const [x1, y1] = points[i + 1]!;\n const h = dx[i]! / 3;\n d += `C${f(x0 + h)},${f(y0 + tangent[i]! * h)},${f(x1 - h)},${f(y1 - tangent[i + 1]! * h)},${f(x1)},${f(y1)}`;\n }\n return d;\n}\n\n/** Çizgi yolu. Boş/eksik (`null`) değerler çizgiyi böler — veri yokken çizgi uydurulmaz. */\nexport function linePath(points: Array<Point | null>, curve: Curve = \"linear\"): string {\n const segments: Point[][] = [[]];\n for (const p of points) {\n if (p) segments[segments.length - 1]!.push(p);\n else if (segments[segments.length - 1]!.length) segments.push([]);\n }\n const draw = curve === \"smooth\" ? monotoneSegments : linearSegments;\n return segments.filter((s) => s.length).map(draw).join(\"\");\n}\n\n/** Alan yolu: çizgi + taban çizgisine (`baseY`) kapanış. Her kesintisiz parça ayrı kapanır. */\nexport function areaPath(points: Array<Point | null>, baseY: number, curve: Curve = \"linear\"): string {\n const segments: Point[][] = [[]];\n for (const p of points) {\n if (p) segments[segments.length - 1]!.push(p);\n else if (segments[segments.length - 1]!.length) segments.push([]);\n }\n return segments\n .filter((s) => s.length > 1)\n .map((s) => {\n const top = curve === \"smooth\" ? monotoneSegments(s) : linearSegments(s);\n return `${top}L${f(s[s.length - 1]![0])},${f(baseY)}L${f(s[0]![0])},${f(baseY)}Z`;\n })\n .join(\"\");\n}\n\n/** Açı (radyan, 0 = saat 12 yönü, saat yönünde artar) → nokta. */\nexport function polar(cx: number, cy: number, r: number, angle: number): Point {\n return [cx + r * Math.sin(angle), cy - r * Math.cos(angle)];\n}\n\n/**\n * Pasta/halka dilimi. `inner` 0 → pasta dilimi, > 0 → halka dilimi.\n * Tam tur (2π) iki yarım yayla çizilir (tek yay SVG'de sıfır uzunluk olur).\n */\nexport function arcPath(cx: number, cy: number, outer: number, inner: number, start: number, end: number): string {\n const sweep = end - start;\n if (sweep <= 0) return \"\";\n if (sweep >= Math.PI * 2 - 1e-6) {\n const mid = start + Math.PI;\n return arcPath(cx, cy, outer, inner, start, mid) + arcPath(cx, cy, outer, inner, mid, start + Math.PI * 2);\n }\n const large = sweep > Math.PI ? 1 : 0;\n const [x0, y0] = polar(cx, cy, outer, start);\n const [x1, y1] = polar(cx, cy, outer, end);\n if (inner <= 0) {\n return `M${f(cx)},${f(cy)}L${f(x0)},${f(y0)}A${f(outer)},${f(outer)},0,${large},1,${f(x1)},${f(y1)}Z`;\n }\n const [x2, y2] = polar(cx, cy, inner, end);\n const [x3, y3] = polar(cx, cy, inner, start);\n return `M${f(x0)},${f(y0)}A${f(outer)},${f(outer)},0,${large},1,${f(x1)},${f(y1)}L${f(x2)},${f(y2)}A${f(inner)},${f(inner)},0,${large},0,${f(x3)},${f(y3)}Z`;\n}\n\n/** Açık yay (Gauge izi ve dolgusu — `stroke` ile çizilir). */\nexport function strokeArcPath(cx: number, cy: number, r: number, start: number, end: number): string {\n if (end - start <= 0) return \"\";\n const [x0, y0] = polar(cx, cy, r, start);\n const [x1, y1] = polar(cx, cy, r, end);\n return `M${f(x0)},${f(y0)}A${f(r)},${f(r)},0,${end - start > Math.PI ? 1 : 0},1,${f(x1)},${f(y1)}`;\n}\n","/**\n * Grafiklerin saf matematiği. d3-scale'in ihtiyaç duyduğumuz küçük\n * kısmı: yuvarlak eksen değerleri, doğrusal ve bant ölçek.\n */\n\n/** 1, 2, 5 × 10ⁿ adımlarından `count`a en yakın olanı (d3 `tickStep` ile aynı eşikler). */\nexport function tickStep(min: number, max: number, count: number): number {\n const raw = Math.abs(max - min) / Math.max(1, count);\n if (raw === 0 || !Number.isFinite(raw)) return 1;\n const power = Math.floor(Math.log10(raw));\n const base = 10 ** power;\n const error = raw / base;\n if (error >= Math.SQRT2 * 5) return 10 * base;\n if (error >= Math.sqrt(10)) return 5 * base;\n if (error >= Math.SQRT2) return 2 * base;\n return base;\n}\n\n/** Kayan nokta artığını (0.30000000000000004) temizler. */\nconst clean = (n: number) => Number.parseFloat(n.toPrecision(12));\n\nexport interface NiceDomain {\n min: number;\n max: number;\n ticks: number[];\n}\n\n/**\n * Veri aralığını yuvarlak sınırlara genişletir ve eksen değerlerini üretir:\n * (3, 97) → 0…100, [0, 20, 40, 60, 80, 100]. Tüm değerler eşitse aralık\n * yapay olarak açılır (düz çizgi eksenin ortasında durur).\n */\nexport function niceDomain(min: number, max: number, count = 5): NiceDomain {\n let lo = Math.min(min, max);\n let hi = Math.max(min, max);\n if (lo === hi) {\n const pad = lo === 0 ? 1 : Math.abs(lo) * 0.5;\n lo -= pad;\n hi += pad;\n }\n const step = tickStep(lo, hi, count);\n const niceMin = clean(Math.floor(lo / step) * step);\n const niceMax = clean(Math.ceil(hi / step) * step);\n const ticks: number[] = [];\n for (let v = niceMin; v <= niceMax + step / 2; v += step) ticks.push(clean(v));\n return { min: niceMin, max: niceMax, ticks };\n}\n\n/** Doğrusal ölçek: `domain` → `range` (ters de olabilir — SVG'de y aşağı büyür). */\nexport function linearScale([d0, d1]: [number, number], [r0, r1]: [number, number]) {\n const span = d1 - d0 || 1;\n return (value: number) => r0 + ((value - d0) / span) * (r1 - r0);\n}\n\nexport interface BandScale {\n (index: number): number;\n /** Bir bandın genişliği (iç boşluk düşülmüş). */\n bandwidth: number;\n /** Bandın merkezi. */\n center: (index: number) => number;\n}\n\n/**\n * Kategorik eksen: `count` eşit bant, aralarında `paddingRatio` oranında boşluk.\n * Çubuk grafiğinde x (dikey çubuk) ya da y (yatay çubuk) ekseni.\n */\nexport function bandScale(count: number, [r0, r1]: [number, number], paddingRatio = 0.3): BandScale {\n const step = (r1 - r0) / Math.max(1, count);\n const bandwidth = step * (1 - paddingRatio);\n const offset = (step - bandwidth) / 2;\n const scale = ((index: number) => r0 + index * step + offset) as BandScale;\n scale.bandwidth = bandwidth;\n scale.center = (index) => r0 + index * step + step / 2;\n return scale;\n}\n\n/** Sayı dizisinin [min, max]ı; boşsa [0, 0]. NaN/undefined atlanır. */\nexport function extent(values: Iterable<number | null | undefined>): [number, number] {\n let lo = Infinity;\n let hi = -Infinity;\n for (const v of values) {\n if (v == null || Number.isNaN(v)) continue;\n if (v < lo) lo = v;\n if (v > hi) hi = v;\n }\n return lo === Infinity ? [0, 0] : [lo, hi];\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useState } from \"react\";\n\nexport interface ChartSize {\n width: number;\n height: number;\n /** Kök yazı boyutu (px) — eksen boşlukları ve etiket genişliği tahmini rem'e göre ölçeklensin. */\n rem: number;\n}\n\n/**\n * Kapsayıcının gerçek boyutu. Grafik SVG'si koordinatlarını buna göre kurar\n * (viewBox germe yok → yazılar ve çizgi kalınlıkları bozulmaz). Sunucuda ve\n * ilk ölçümden önce 0 — grafik o an yalnız kutuyu çizer.\n *\n * Geri çağrılı ref: ölçülen öğe SONRADAN da DOM'a girebilir (iskelet → yüklü\n * geçişinde çizim alanı ilk render'da yoktur). Nesne ref + tek seferlik efekt\n * o durumda hiç ölçmüyordu → grafik boş kalıyordu.\n */\nexport function useChartSize<T extends HTMLElement>() {\n const [el, setEl] = useState<T | null>(null);\n const [size, setSize] = useState<ChartSize>({ width: 0, height: 0, rem: 16 });\n const ref = useCallback((node: T | null) => setEl(node), []);\n\n useEffect(() => {\n if (!el) return;\n const measure = () => {\n const rem = Number.parseFloat(getComputedStyle(document.documentElement).fontSize) || 16;\n setSize((prev) =>\n prev.width === el.clientWidth && prev.height === el.clientHeight && prev.rem === rem\n ? prev\n : { width: el.clientWidth, height: el.clientHeight, rem }\n );\n };\n measure();\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(measure);\n observer.observe(el);\n return () => observer.disconnect();\n }, [el]);\n\n return [ref, size] as const;\n}\n","import type React from \"react\";\n\n/**\n * Giriş animasyonu (`animated`): grafik ilk çizildiğinde — iskeletten yüklü\n * hale geçerken de — işaretler büyür/çizilir. Varsayılan açık (`animated={false}`\n * ile kapatılır). Yalnız CSS: başlangıç hali `both` dolgu kipiyle animasyonun\n * içinde; `motion-reduce:animate-none` ile hareket azaltma tercihinde\n * animasyon hiç çalışmaz ve işaret doğrudan son halinde görünür.\n * Keyframe'ler `styles.css`te (`mari-chart-*`).\n */\nexport const CHART_ANIMATION_MS = 700;\n\n/** Tailwind derleme tarayıcısı için literal sınıflar. */\nconst GROW_Y = \"animate-[mari-chart-grow-y_700ms_var(--mari-easing-decelerate)_both] motion-reduce:animate-none\";\nconst GROW_X = \"animate-[mari-chart-grow-x_700ms_var(--mari-easing-decelerate)_both] motion-reduce:animate-none\";\nconst DRAW = \"animate-[mari-chart-draw_900ms_var(--mari-easing-decelerate)_both] motion-reduce:animate-none\";\nconst FADE = \"animate-[mari-fade-in_300ms_ease-out_both] motion-reduce:animate-none\";\n\n/** Ardışık işaretler arasında küçük gecikme — toplamda en fazla ~0.4 sn. */\nconst stagger = (index: number, count: number) => `${Math.round((Math.min(index, count) * 400) / Math.max(count, 1))}ms`;\n\n/**\n * Çubuk: sıfır çizgisinden büyür. SVG öğelerinde `transform-origin` kullanıcı\n * biriminde (görünüm kutusu) çalışır → kökeni sıfır çizgisine koyarız; negatif\n * çubuklar da aynı çizgiden aşağı/sola büyür.\n */\nexport function growProps(animated: boolean | undefined, horizontal: boolean, zero: number, index: number, count: number): { className?: string; style?: React.CSSProperties } {\n if (!animated) return {};\n return {\n className: horizontal ? GROW_X : GROW_Y,\n style: { transformOrigin: horizontal ? `${zero}px 0px` : `0px ${zero}px`, animationDelay: stagger(index, count) },\n };\n}\n\n/**\n * Çizgi/alan: soldan sağa açılan kırpma dikdörtgeni (`clipPath`). Boşluklu\n * (eksik veri) çizgiler ve alan dolgusu da aynı hareketle açılır.\n */\nexport function revealRectProps(animated: boolean | undefined, left: number): { className?: string; style?: React.CSSProperties } {\n if (!animated) return {};\n return { className: GROW_X, style: { transformOrigin: `${left}px 0px` } };\n}\n\n/** Yay/dilim süpürmesi: `pathLength=1` yolda `stroke-dashoffset` 1 → 0. */\nexport function drawProps(animated: boolean | undefined): { className?: string; pathLength?: number; strokeDasharray?: string } {\n if (!animated) return {};\n return { className: DRAW, pathLength: 1, strokeDasharray: \"1 1\" };\n}\n\n/** İşaretlerden sonra beliren öğeler (son nokta, merkez yazısı). */\nexport function fadeAfterProps(animated: boolean | undefined, delayMs = CHART_ANIMATION_MS): { className?: string; style?: React.CSSProperties } {\n if (!animated) return {};\n return { className: FADE, style: { animationDelay: `${delayMs}ms` } };\n}\n","\"use client\";\n\nimport React, { useMemo, useState } from \"react\";\nimport type { CartesianChartProps } from \"../types\";\nimport { ChartFrame, nextIndex, type TooltipState } from \"../_shared/ChartFrame\";\nimport { XLabels, XValueGrid, YGrid, labelStride, plotBox, type PlotBox } from \"../_shared/cartesian\";\nimport { makeFormatters, seriesColor } from \"../_shared/format\";\nimport { bandScale, linearScale, niceDomain } from \"../_shared/scale\";\nimport { useChartSize } from \"../_shared/useChartSize\";\nimport { CartesianSkeleton } from \"../_shared/ChartSkeleton\";\nimport { growProps } from \"../_shared/animation\";\n\nexport interface BarChartProps<T> extends CartesianChartProps<T> {\n /** `\"vertical\"` (varsayılan): sütunlar. `\"horizontal\"`: yatay çubuklar — uzun kategori adları ve sıralamalar için. */\n layout?: \"vertical\" | \"horizontal\";\n /** Serileri üst üste yığar (parça–bütün). Varsayılan: yan yana gruplu. */\n stacked?: boolean;\n}\n\nimport { GAP, buildBars, num, valueExtent } from \"./bars\";\n\n/**\n * Çubuk grafiği. Kategoriler arası büyüklük karşılaştırması.\n * Çubuklar tek tabandan büyür, veri ucu 4px yuvarlak, kalınlık en fazla\n * 1.5rem (bant boşluğu nefes payı kalır). Vuruş hedefi tüm kategori bandı;\n * tooltip o kategorideki tüm serileri gösterir. Negatif değerler sıfır\n * çizgisinin altına iner.\n */\nexport function BarChart<T>({\n data,\n xKey,\n series,\n label,\n layout = \"vertical\",\n stacked = false,\n xFormatter,\n valueFormatter,\n locale = \"tr-TR\",\n showGrid = true,\n showLegend,\n emptyText = \"Veri yok\",\n skeleton,\n animated = true,\n className,\n}: Readonly<BarChartProps<T>>) {\n const [plotRef, size] = useChartSize<HTMLDivElement>();\n const [active, setActive] = useState<number | null>(null);\n const fmt = useMemo(() => makeFormatters(locale, valueFormatter), [locale, valueFormatter]);\n const horizontal = layout === \"horizontal\";\n\n const categories = data.map((row) => (xFormatter ? xFormatter(row[xKey], row) : String(row[xKey] ?? \"\")));\n const colors = series.map((s, i) => seriesColor(s.color, i));\n\n const matrix = data.map((row) => series.map((s) => num(row[s.key])));\n const domain = niceDomain(...valueExtent(matrix, stacked));\n\n // Yatayda sol boşluk kategori adlarına, dikeyde değer etiketlerine göre.\n const box: PlotBox = plotBox(size.width, size.height, size.rem, horizontal ? categories : domain.ticks.map(fmt.axis));\n // Yatayda değer ekseni etiketleri altta; kategori etiketleri solda (plotBox sol boşluğu onlara göre).\n const value = horizontal ? linearScale([domain.min, domain.max], [box.left, box.left + box.width]) : linearScale([domain.min, domain.max], [box.top + box.height, box.top]);\n const band = horizontal ? bandScale(data.length, [box.top, box.top + box.height], 0.3) : bandScale(data.length, [box.left, box.left + box.width], 0.3);\n const maxThickness = size.rem * 1.5;\n const groupCount = stacked ? 1 : series.length;\n const thickness = Math.max(1, Math.min(maxThickness, (band.bandwidth - GAP * (groupCount - 1)) / groupCount));\n const zero = value(0);\n const bars = buildBars(matrix, { horizontal, stacked, band, value, thickness });\n\n const legend = (showLegend ?? series.length > 1) ? series.map((s, i) => ({ name: s.name, color: colors[i]!, shape: \"rect\" as const })) : undefined;\n\n const tooltipAt = (i: number): TooltipState => {\n const row = data[i]!;\n const total = series.reduce((acc, s) => acc + num(row[s.key]), 0);\n const tip = value(stacked ? total : Math.max(...series.map((s) => num(row[s.key])), 0));\n return {\n x: horizontal ? tip : band.center(i),\n y: horizontal ? band.center(i) : tip,\n title: categories[i],\n rows: series.map((s, si) => ({ name: s.name, color: colors[si]!, shape: \"rect\", value: fmt.value(num(row[s.key])) })),\n };\n };\n\n const stride = horizontal ? 1 : labelStride(categories, box.width, size.rem);\n const ready = size.width > 0 && box.width > 0 && box.height > 0;\n const axisLength = horizontal ? box.height : box.width;\n const step = data.length ? axisLength / data.length : 0;\n\n return (\n <ChartFrame\n label={label}\n className={className}\n skeleton={skeleton}\n skeletonPlot={<CartesianSkeleton shape={horizontal ? \"barHorizontal\" : \"bar\"} count={data.length || 6} />}\n skeletonLegend={legend?.length ?? 0}\n empty={data.length === 0 || series.length === 0}\n emptyText={emptyText}\n legend={legend}\n table={{\n columns: [String(xKey), ...series.map((s) => s.name)],\n rows: data.map((row, i) => [categories[i]!, ...series.map((s) => fmt.value(num(row[s.key])))]),\n }}\n tooltip={active !== null && data[active] ? tooltipAt(active) : null}\n plotRef={plotRef}\n plotWidth={size.width}\n onKeyDown={(e) => {\n const next = nextIndex(e.key, active, data.length);\n if (next === null) return;\n e.preventDefault();\n setActive(next);\n }}\n onBlur={() => setActive(null)}\n >\n {ready && (\n <svg aria-hidden width={size.width} height={size.height} className=\"absolute inset-0 overflow-visible\">\n {/* Etkin kategori bandı: hafif yüzey tonu — işaret tepki verdiğini gösterir. */}\n {active !== null &&\n (horizontal ? (\n <rect x={box.left} y={box.top + active * step} width={box.width} height={step} className=\"fill-mari-surface-alt\" />\n ) : (\n <rect x={box.left + active * step} y={box.top} width={step} height={box.height} className=\"fill-mari-surface-alt\" />\n ))}\n {horizontal ? (\n <>\n <XValueGrid domain={domain} x={value} box={box} format={fmt.axis} showGrid={showGrid} />\n <g aria-hidden>\n {categories.map((c, i) => (\n <text key={i} x={box.left - 8} y={band.center(i)} dy=\"0.32em\" textAnchor=\"end\" className=\"fill-mari-muted text-xs\">\n {c}\n </text>\n ))}\n </g>\n <line x1={zero} x2={zero} y1={box.top} y2={box.top + box.height} className=\"stroke-mari-muted/60\" strokeWidth={1} shapeRendering=\"crispEdges\" />\n </>\n ) : (\n <>\n <YGrid domain={domain} y={value} box={box} format={fmt.axis} showGrid={showGrid} zeroLine={false} />\n <XLabels labels={categories} xAt={(i) => band.center(i)} box={box} stride={stride} />\n <line x1={box.left} x2={box.left + box.width} y1={zero} y2={zero} className=\"stroke-mari-muted/60\" strokeWidth={1} shapeRendering=\"crispEdges\" />\n </>\n )}\n {bars.map((bar) => (\n <path key={`${bar.row}-${bar.series}`} d={bar.d} fill={colors[bar.series]} {...growProps(animated, horizontal, zero, bar.row, data.length)} />\n ))}\n {/* Vuruş hedefi: tüm kategori bandı (işaretten büyük). */}\n {data.map((_, i) =>\n horizontal ? (\n <rect key={i} x={box.left} y={box.top + i * step} width={box.width} height={step} fill=\"transparent\" onPointerEnter={() => setActive(i)} onPointerLeave={() => setActive(null)} />\n ) : (\n <rect key={i} x={box.left + i * step} y={box.top} width={step} height={box.height} fill=\"transparent\" onPointerEnter={() => setActive(i)} onPointerLeave={() => setActive(null)} />\n )\n )}\n </svg>\n )}\n </ChartFrame>\n );\n}\n","import { barPath } from \"../_shared/cartesian\";\nimport type { BandScale } from \"../_shared/scale\";\n\n/** Çubuklar arası yüzey boşluğu (px) — dokunan işaretleri çizgi değil boşluk ayırır. */\nexport const GAP = 2;\n\nexport const num = (v: unknown) => (typeof v === \"number\" && Number.isFinite(v) ? v : 0);\n\n/** Değer aralığı; sıfır her zaman dahil (çubuk tabandan büyür). Yığında pozitif/negatif toplamlar ayrı. */\nexport function valueExtent(rows: number[][], stacked: boolean): [number, number] {\n let lo = 0;\n let hi = 0;\n for (const values of rows) {\n if (stacked) {\n hi = Math.max(hi, values.filter((v) => v > 0).reduce((a, v) => a + v, 0));\n lo = Math.min(lo, values.filter((v) => v < 0).reduce((a, v) => a + v, 0));\n } else {\n hi = Math.max(hi, ...values);\n lo = Math.min(lo, ...values);\n }\n }\n return [lo, hi];\n}\n\nexport interface BarGeometry {\n horizontal: boolean;\n stacked: boolean;\n band: BandScale;\n value: (v: number) => number;\n thickness: number;\n}\n\nexport interface BarShape {\n row: number;\n series: number;\n d: string;\n}\n\n/** Tek parça: tabandan `from`→`to`; veri ucu yuvarlak, yığında taban tarafı 2px kırpılır. */\nfunction segment(g: BarGeometry, offset: number, from: number, to: number, roundEnd: boolean): string {\n const a = g.value(from);\n const b = g.value(to);\n const radius = roundEnd ? 4 : 0;\n const gap = g.stacked && from !== 0 ? GAP : 0;\n const positive = to >= from;\n const lo = Math.min(a, b);\n const len = Math.abs(b - a) - gap;\n if (g.horizontal) {\n return positive ? barPath(lo + gap, offset, len, g.thickness, radius, \"right\") : barPath(lo, offset, len, g.thickness, radius, \"left\");\n }\n return positive ? barPath(offset, lo, g.thickness, len, radius, \"top\") : barPath(offset, lo + gap, g.thickness, len, radius, \"bottom\");\n}\n\n/** Son pozitif ve son negatif parçanın indeksi — yığında yalnız en dıştaki uç yuvarlanır. */\nfunction outerIndexes(values: number[]): { pos: number; neg: number } {\n let pos = -1;\n let neg = -1;\n values.forEach((v, i) => {\n if (v > 0) pos = i;\n if (v < 0) neg = i;\n });\n return { pos, neg };\n}\n\n/** Tüm çubukların yolları. `rows[i][s]`: i. kategori, s. serinin değeri. */\nexport function buildBars(rows: number[][], g: BarGeometry): BarShape[] {\n const groupCount = g.stacked ? 1 : (rows[0]?.length ?? 1);\n const span = g.thickness * groupCount + GAP * (groupCount - 1);\n const shapes: BarShape[] = [];\n rows.forEach((values, i) => {\n const start = g.band.center(i) - span / 2;\n const outer = outerIndexes(values);\n let pos = 0;\n let neg = 0;\n values.forEach((v, s) => {\n if (v === 0) return;\n if (!g.stacked) {\n shapes.push({ row: i, series: s, d: segment(g, start + s * (g.thickness + GAP), 0, v, true) });\n return;\n }\n const from = v > 0 ? pos : neg;\n if (v > 0) pos += v;\n else neg += v;\n shapes.push({ row: i, series: s, d: segment(g, start, from, from + v, s === (v > 0 ? outer.pos : outer.neg)) });\n });\n });\n return shapes;\n}\n","\"use client\";\n\nimport React, { useId, useMemo, useState } from \"react\";\nimport { cn } from \"@mari-ui/core\";\nimport type { ChartBaseProps, ChartColor } from \"../types\";\nimport { ChartFrame, nextIndex } from \"../_shared/ChartFrame\";\nimport { makeFormatters, seriesColor } from \"../_shared/format\";\nimport { arcPath, polar } from \"../_shared/paths\";\nimport { useChartSize } from \"../_shared/useChartSize\";\nimport { PieSkeleton } from \"../_shared/ChartSkeleton\";\nimport { drawProps, fadeAfterProps } from \"../_shared/animation\";\n\nexport interface PieDatum {\n name: string;\n value: number;\n color?: ChartColor;\n}\n\nexport interface PieChartProps extends ChartBaseProps {\n data: PieDatum[];\n /** Halka (donut). Ortada toplam (ya da `centerLabel`/`centerValue`) gösterilir. Varsayılan `false`. */\n donut?: boolean;\n /** Halkanın ortasındaki başlık. Varsayılan \"Toplam\". */\n centerLabel?: React.ReactNode;\n /** Halkanın ortasındaki değer. Varsayılan: biçimlenmiş toplam. */\n centerValue?: React.ReactNode;\n /**\n * Bu sayıdan fazla dilim \"Diğer\"de toplanır (palet 8 renk; döngüye girmez).\n * Varsayılan 6 — pasta 5–6 dilimden sonra okunmaz, çubuk grafik düşünün.\n */\n maxSlices?: number;\n /** \"Diğer\" diliminin adı. */\n otherLabel?: string;\n /** Lejantta yüzde. Varsayılan `true`. */\n showPercent?: boolean;\n}\n\n/**\n * Pasta / halka grafiği. Bir bütünün az sayıda parçası. Dilimler\n * arasında 2px yüzey boşluğu; üzerine gelince dilim hafifçe dışa çıkar ve\n * tooltip ad, değer, yüzde gösterir. Lejant her zaman var (kimlik yalnız\n * renge kalmaz); yüzdeler lejantta. Sıfır ve negatif değerler çizilmez.\n */\nexport function PieChart({\n data,\n label,\n donut = false,\n centerLabel = \"Toplam\",\n centerValue,\n maxSlices = 6,\n otherLabel = \"Diğer\",\n showPercent = true,\n valueFormatter,\n locale = \"tr-TR\",\n emptyText = \"Veri yok\",\n skeleton,\n animated = true,\n className,\n}: Readonly<PieChartProps>) {\n const [plotRef, size] = useChartSize<HTMLDivElement>();\n const maskId = `mari-pie-${useId().replace(/[^\\w-]/g, \"\")}`;\n const [active, setActive] = useState<number | null>(null);\n const fmt = useMemo(() => makeFormatters(locale, valueFormatter), [locale, valueFormatter]);\n const percent = useMemo(() => new Intl.NumberFormat(locale, { style: \"percent\", maximumFractionDigits: 1 }), [locale]);\n\n const slices = useMemo(() => {\n const positive = data.filter((d) => Number.isFinite(d.value) && d.value > 0);\n if (positive.length <= maxSlices) return positive;\n const kept = positive.slice(0, maxSlices - 1);\n const rest = positive.slice(maxSlices - 1).reduce((sum, d) => sum + d.value, 0);\n return [...kept, { name: otherLabel, value: rest }];\n }, [data, maxSlices, otherLabel]);\n\n const total = slices.reduce((sum, d) => sum + d.value, 0);\n const colors = slices.map((d, i) => seriesColor(d.color, i));\n const cx = size.width / 2;\n const cy = size.height / 2;\n const outer = Math.max(0, Math.min(size.width, size.height) / 2 - 6);\n const inner = donut ? outer * 0.62 : 0;\n\n let angle = 0;\n const arcs = slices.map((d, i) => {\n const start = angle;\n angle += (d.value / total) * Math.PI * 2;\n return { ...d, start, end: angle, color: colors[i]! };\n });\n\n const legend = arcs.map((a) => ({\n name: showPercent ? `${a.name} · ${percent.format(a.value / total)}` : a.name,\n color: a.color,\n shape: \"rect\" as const,\n }));\n\n const activeArc = active !== null ? arcs[active] : undefined;\n const tooltip = activeArc\n ? (() => {\n const [x, y] = polar(cx, cy, (outer + inner) / 2 || outer * 0.6, (activeArc.start + activeArc.end) / 2);\n return {\n x,\n y,\n rows: [{ name: `${activeArc.name} · ${percent.format(activeArc.value / total)}`, color: activeArc.color, shape: \"rect\" as const, value: fmt.value(activeArc.value) }],\n };\n })()\n : null;\n\n return (\n <ChartFrame\n label={label}\n className={className}\n skeleton={skeleton}\n skeletonPlot={<PieSkeleton donut={donut} />}\n skeletonLegend={Math.min(data.length || 4, maxSlices)}\n empty={slices.length === 0}\n emptyText={emptyText}\n legend={legend}\n legendPosition=\"bottom\"\n table={{ columns: [\"Dilim\", \"Değer\", \"Oran\"], rows: arcs.map((a) => [a.name, fmt.value(a.value), percent.format(a.value / total)]) }}\n tooltip={tooltip}\n plotRef={plotRef}\n plotWidth={size.width}\n onKeyDown={(e) => {\n const next = nextIndex(e.key, active, arcs.length);\n if (next === null) return;\n e.preventDefault();\n setActive(next);\n }}\n onBlur={() => setActive(null)}\n >\n {outer > 0 && (\n <svg aria-hidden width={size.width} height={size.height} className=\"absolute inset-0 overflow-visible\">\n {animated && (\n <defs>\n {/* Süpürme: saat 12'den saat yönünde açılan maske. Kalın çizgili daire tüm diski\n (üzerine gelince büyüyen dilim dahil) kaplar; daire yolu saat 3'ten başladığı için -90°. */}\n <mask id={maskId} maskUnits=\"userSpaceOnUse\">\n <circle\n cx={cx}\n cy={cy}\n r={(outer + 6) / 2}\n fill=\"none\"\n stroke=\"white\"\n strokeWidth={outer + 6}\n transform={`rotate(-90 ${cx} ${cy})`}\n {...drawProps(animated)}\n />\n </mask>\n </defs>\n )}\n <g mask={animated ? `url(#${maskId})` : undefined}>\n {arcs.map((a, i) => (\n <path\n key={a.name}\n d={arcPath(cx, cy, i === active ? outer + 4 : outer, inner, a.start, a.end)}\n fill={a.color}\n // Dilimler arası 2px yüzey boşluğu (çizgi değil, yüzey rengi).\n className=\"stroke-mari-surface transition-[d] duration-150 motion-reduce:transition-none\"\n strokeWidth={arcs.length > 1 ? 2 : 0}\n strokeLinejoin=\"round\"\n onPointerEnter={() => setActive(i)}\n onPointerLeave={() => setActive(null)}\n />\n ))}\n </g>\n {donut && (\n <g className={cn(\"pointer-events-none\", fadeAfterProps(animated, 600).className)} style={fadeAfterProps(animated, 600).style}>\n <text x={cx} y={cy} dy=\"-0.35em\" textAnchor=\"middle\" className=\"fill-mari-muted text-xs\">\n {centerLabel}\n </text>\n <text x={cx} y={cy} dy=\"1em\" textAnchor=\"middle\" className=\"fill-mari-foreground text-lg font-semibold\">\n {centerValue ?? fmt.value(total)}\n </text>\n </g>\n )}\n </svg>\n )}\n </ChartFrame>\n );\n}\n","\"use client\";\n\nimport React, { useId } from \"react\";\nimport { InboxIcon } from \"lucide-react\";\nimport { cn } from \"@mari-ui/core\";\nimport type { ChartColor } from \"../types\";\nimport { seriesColor } from \"../_shared/format\";\nimport { areaPath, linePath, type Curve, type Point } from \"../_shared/paths\";\nimport { extent, linearScale } from \"../_shared/scale\";\nimport { useChartSize } from \"../_shared/useChartSize\";\nimport { skeletonFill, type SkeletonableProps } from \"../../lib/skeleton\";\nimport { ChartEmpty, waveMask } from \"../_shared/ChartSkeleton\";\nimport { fadeAfterProps, revealRectProps } from \"../_shared/animation\";\n\nexport interface SparklineProps extends SkeletonableProps {\n data: Array<number | null>;\n /**\n * Ekran okuyucu için eğilimi anlatan metin (ör. \"Son 12 ay, yükselişte\").\n * Verilmezse grafik dekoratif sayılır (`aria-hidden`) — yanındaki değer zaten okunuyor.\n */\n label?: string;\n /** Varsayılan: soluk (`muted`) çizgi + vurgulu son nokta — kartın değeri öne çıksın. */\n color?: ChartColor | \"muted\";\n /** Son noktanın rengi. Varsayılan `primary`. */\n endColor?: ChartColor;\n area?: boolean;\n curve?: Curve;\n /** Boyut. Varsayılan `h-8 w-full`. */\n className?: string;\n /** Değer yokken bulanık çizginin önünde görünen metin. Varsayılan \"Veri yok\". */\n emptyText?: string;\n /** Giriş animasyonu: çizgi soldan açılır, son nokta ardından belirir. Varsayılan açık. */\n animated?: boolean;\n}\n\n/**\n * Eksensiz mini çizgi. Statistic kartlarında, tablo hücrelerinde\n * eğilimi göstermek için. Değer okutmaz (değeri yanındaki sayı taşır); ekseni,\n * tooltip'i yoktur.\n */\nexport function Sparkline({ data, label, color = \"muted\", endColor = \"primary\", area = false, curve = \"smooth\", skeleton, animated = true, emptyText = \"Veri yok\", className }: Readonly<SparklineProps>) {\n const [ref, size] = useChartSize<HTMLDivElement>();\n const clipId = `mari-spark-${useId().replace(/[^\\w-]/g, \"\")}`;\n // İskelet: aynı kutuda ince dalga (çizginin kendisi) — düz blok değil.\n if (skeleton) return <span aria-hidden data-skeleton=\"\" className={cn(\"pointer-events-none block h-8 w-full\", skeletonFill(true), className)} style={waveMask(1.5)} />;\n\n const stroke = color === \"muted\" ? \"var(--mari-color-muted)\" : seriesColor(color, 0);\n const pad = 3;\n const [lo, hi] = extent(data);\n const flat = lo === hi;\n const y = linearScale(flat ? [lo - 1, hi + 1] : [lo, hi], [size.height - pad, pad]);\n const x = (i: number) => (data.length <= 1 ? size.width / 2 : pad + (i * (size.width - pad * 2)) / (data.length - 1));\n const pts: Array<Point | null> = data.map((v, i) => (v == null ? null : [x(i), y(v)]));\n let lastIndex = -1;\n for (let i = data.length - 1; i >= 0; i--) {\n if (data[i] != null) {\n lastIndex = i;\n break;\n }\n }\n const last = lastIndex >= 0 ? pts[lastIndex] : null;\n\n // Boş: diğer grafiklerle aynı desen — bulanık sabit dalga, önde kısa uyarı.\n if (!last) {\n return (\n <div role=\"img\" aria-label={emptyText} className={cn(\"relative h-8 w-full\", className)}>\n <ChartEmpty compact plot={<span className={cn(\"absolute inset-0\", skeletonFill(false))} style={waveMask(1.5)} />}>\n {/* Empty ile aynı ikon; 2rem'lik satıra sığsın diye ikon + metin yan yana. */}\n <span className=\"flex items-center gap-1.5 text-xs text-mari-muted\">\n <InboxIcon aria-hidden className=\"size-3.5 shrink-0\" />\n {emptyText}\n </span>\n </ChartEmpty>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(\"h-8 w-full\", className)}\n role={label ? \"img\" : undefined}\n aria-label={label}\n aria-hidden={label ? undefined : true}\n >\n {size.width > 0 && (\n <svg width={size.width} height={size.height} aria-hidden className=\"block overflow-visible\">\n {animated && (\n <defs>\n <clipPath id={clipId}>\n <rect x={-2} y={-2} width={size.width + 4} height={size.height + 4} {...revealRectProps(animated, -2)} />\n </clipPath>\n </defs>\n )}\n <g clipPath={animated ? `url(#${clipId})` : undefined}>\n {area && <path d={areaPath(pts, size.height, curve)} fill={stroke} fillOpacity={0.1} />}\n <path d={linePath(pts, curve)} fill=\"none\" stroke={stroke} strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </g>\n {last && <circle cx={last[0]} cy={last[1]} r={3} fill={seriesColor(endColor, 0)} className={cn(\"stroke-mari-surface\", fadeAfterProps(animated).className)} style={fadeAfterProps(animated).style} strokeWidth={1.5} />}\n </svg>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useMemo } from \"react\";\nimport { InboxIcon } from \"lucide-react\";\nimport { cn } from \"@mari-ui/core\";\nimport type { ChartColor } from \"../types\";\nimport { seriesColor } from \"../_shared/format\";\nimport { polar, strokeArcPath } from \"../_shared/paths\";\nimport { skeletonFill, type SkeletonableProps } from \"../../lib/skeleton\";\nimport { ChartEmpty, svgMask } from \"../_shared/ChartSkeleton\";\nimport { drawProps } from \"../_shared/animation\";\n\nexport interface GaugeSegment {\n /** Bu eşiğe KADAR (dahil) olan değerler bu rengi alır. */\n upTo: number;\n color: ChartColor;\n /** Erişilebilir durum adı (ör. \"Kritik\") — `aria-valuetext`e eklenir. */\n label?: string;\n}\n\nexport interface GaugeProps extends SkeletonableProps {\n /** `null`/`undefined` → boş hal (ör. henüz ölçüm yok): bulanık gösterge + `emptyText`. */\n value: number | null | undefined;\n /** Değer yokken yayın ortasında görünen metin. Varsayılan \"Veri yok\". */\n emptyText?: string;\n min?: number;\n max?: number;\n /** Ad — ekran okuyucu (`role=\"meter\"`) ve göstergenin altındaki metin. */\n label: string;\n /** Altta görünen adı gizle (yine okunur). */\n hideLabel?: boolean;\n /** Tek renk. Varsayılan `primary`. `segments` verilirse yok sayılır. */\n color?: ChartColor;\n /**\n * Eşiklere göre renk (ör. doluluk: 70'e kadar yeşil, 90'a kadar sarı, sonra\n * kırmızı). Durum rengi tek başına anlam taşımasın: `label` verin.\n */\n segments?: GaugeSegment[];\n valueFormatter?: (value: number) => string;\n locale?: string;\n /** Boyut. Varsayılan `w-48`; yükseklik genişlikten türer. */\n className?: string;\n /** Giriş animasyonu: dolgu yayı izin başından değere kadar süpürülür. Varsayılan açık; hareket azaltma tercihinde çalışmaz. */\n animated?: boolean;\n}\n\nconst START = -Math.PI * 0.75;\nconst END = Math.PI * 0.75;\n\n// viewBox sabit: yay, kalınlık ve yazı birlikte ölçeklenir (göstergenin kendisi bir figür).\nconst R = 80;\nconst CX = 100;\nconst CY = 96;\nconst STROKE = 14;\n\n/**\n * İskelet: göstergenin kendi geometrisi — iz yayı, ortadaki değer ve iki uç\n * etiketi, aynı viewBox'ta. Parıltılı dolgu bu şekille maskelenir.\n */\nfunction gaugeMask(withValue: boolean): React.CSSProperties {\n const [minX, minY] = polar(CX, CY, R, START);\n const [maxX] = polar(CX, CY, R, END);\n const stub = (x: number, y: number, w: number, h: number) => `<rect x=\"${x - w / 2}\" y=\"${y - h / 2}\" width=\"${w}\" height=\"${h}\" rx=\"3\" fill=\"black\"/>`;\n return svgMask(\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 184\">` +\n `<path d=\"${strokeArcPath(CX, CY, R, START, END)}\" fill=\"none\" stroke=\"black\" stroke-width=\"${STROKE}\" stroke-linecap=\"round\"/>` +\n (withValue ? stub(CX, CY, 64, 26) : \"\") +\n stub(minX, minY + 21, 16, 10) +\n stub(maxX, minY + 21, 24, 10) +\n `</svg>`\n );\n}\n\nconst SKELETON_MASK = gaugeMask(true);\n/** Boş hal: ortadaki değer yerine uyarı durduğu için değer çubuğu yok. */\nconst EMPTY_MASK = gaugeMask(false);\n\n/**\n * Gösterge (270° yay). Tek bir değerin aralıktaki yeri: doluluk,\n * hedefe ulaşma, skor. Dolgu durum rengini taşır; iz, aynı rengin soluk hali.\n * `role=\"meter\"`. Birden çok değer için Bar, zaman içinde değişim için Line.\n */\nexport function Gauge({\n value,\n min = 0,\n max = 100,\n label,\n hideLabel = false,\n color = \"primary\",\n segments,\n valueFormatter,\n locale = \"tr-TR\",\n emptyText = \"Veri yok\",\n skeleton,\n animated = true,\n className,\n}: Readonly<GaugeProps>) {\n const format = useMemo(() => valueFormatter ?? ((v: number) => new Intl.NumberFormat(locale, { maximumFractionDigits: 1 }).format(v)), [valueFormatter, locale]);\n if (skeleton) {\n return (\n <div aria-hidden data-skeleton=\"\" className={cn(\"pointer-events-none inline-flex w-48 flex-col items-center\", className)}>\n <div className={cn(\"aspect-[200/184] w-full\", skeletonFill(true))} style={SKELETON_MASK} />\n {!hideLabel && (\n <span className=\"-mt-2 flex h-5 items-center\">\n <span className={cn(\"block h-2.5 w-24 rounded-sm\", skeletonFill(true))} />\n </span>\n )}\n </div>\n );\n }\n\n // Boş (değer yok — ör. henüz ölçüm gelmedi): diğer grafiklerle aynı desen —\n // arkada bulanık sabit iskelet, değerin yerinde uyarı. \"0\" göstermek yanlış\n // olurdu (0 bir ölçümdür); ad altta kalır ki neyin boş olduğu bilinsin.\n if (value == null || !Number.isFinite(value)) {\n return (\n <div role=\"img\" aria-label={`${label}: ${emptyText}`} className={cn(\"inline-flex w-48 flex-col items-center\", className)}>\n <div className=\"relative aspect-[200/184] w-full\">\n <ChartEmpty plot={<div className={cn(\"absolute inset-0\", skeletonFill(false))} style={EMPTY_MASK} />}>\n {/* Değer yazısının yeri: yay merkezi (viewBox y=96 / 184). */}\n <span className=\"absolute top-[52%] left-1/2 flex -translate-x-1/2 -translate-y-1/2 flex-col items-center gap-1 text-xs text-mari-muted\">\n <InboxIcon aria-hidden className=\"size-5\" />\n <span className=\"whitespace-nowrap\">{emptyText}</span>\n </span>\n </ChartEmpty>\n </div>\n {!hideLabel && <span className=\"-mt-2 text-sm text-mari-muted\">{label}</span>}\n </div>\n );\n }\n\n const clamped = Math.min(max, Math.max(min, value));\n const ratio = max === min ? 0 : (clamped - min) / (max - min);\n const segment = segments?.slice().sort((a, b) => a.upTo - b.upTo).find((s) => clamped <= s.upTo) ?? segments?.[segments.length - 1];\n const fill = seriesColor(segment?.color ?? color, 0);\n\n const r = R;\n const cx = CX;\n const cy = CY;\n const stroke = STROKE;\n const valueText = format(value);\n // Uç etiketleri yayın iki ucunun altında. Yazılar kullanıcı birimiyle (fontSize) — figürle birlikte ölçeklensin.\n const [minX, minY] = polar(cx, cy, r, START);\n const [maxX, maxY] = polar(cx, cy, r, END);\n\n return (\n <div\n role=\"meter\"\n aria-label={label}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={clamped}\n aria-valuetext={segment?.label ? `${valueText}, ${segment.label}` : valueText}\n className={cn(\"inline-flex w-48 flex-col items-center\", className)}\n >\n <svg viewBox=\"0 0 200 184\" aria-hidden className=\"block w-full overflow-visible\">\n <path d={strokeArcPath(cx, cy, r, START, END)} fill=\"none\" stroke={fill} strokeOpacity={0.15} strokeWidth={stroke} strokeLinecap=\"round\" />\n {ratio > 0 && (\n <path d={strokeArcPath(cx, cy, r, START, START + (END - START) * ratio)} fill=\"none\" stroke={fill} strokeWidth={stroke} strokeLinecap=\"round\" {...drawProps(animated)} />\n )}\n <text x={cx} y={cy} dy=\"0.35em\" textAnchor=\"middle\" fontSize={36} className=\"fill-mari-foreground font-semibold\">\n {valueText}\n </text>\n <text x={minX} y={minY + 26} textAnchor=\"middle\" fontSize={14} className=\"fill-mari-muted tabular-nums\">\n {format(min)}\n </text>\n <text x={maxX} y={maxY + 26} textAnchor=\"middle\" fontSize={14} className=\"fill-mari-muted tabular-nums\">\n {format(max)}\n </text>\n </svg>\n {!hideLabel && <span className=\"-mt-2 text-sm text-mari-muted\">{label}</span>}\n {segment?.label && <span className=\"text-xs font-medium text-mari-foreground\">{segment.label}</span>}\n </div>\n );\n}\n"],"mappings":"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","names":["useState","cn","jsx","jsxs","cn","jsx","jsxs","f","jsx","jsxs","useState","useMemo","useState","jsx","jsxs","useState","useMemo","useId","useMemo","useState","cn","jsx","jsxs","useId","useState","useMemo","cn","useId","cn","jsx","jsxs","useId","cn","useMemo","InboxIcon","cn","jsx","jsxs","useMemo","cn","InboxIcon","segment"]}
package/dist/checkbox.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  Checkbox
3
- } from "./chunk-RIBB5OJV.js";
4
- import "./chunk-FFXRFQSU.js";
5
- import "./chunk-IP2J3BWY.js";
6
- import "./chunk-54HHEXXD.js";
3
+ } from "./chunk-PR2MCHU4.js";
4
+ import "./chunk-POBOJBNJ.js";
5
+ import "./chunk-6AMBZXZJ.js";
6
+ import "./chunk-VKN374SD.js";
7
7
  export {
8
8
  Checkbox
9
9
  };
@@ -50,4 +50,4 @@ function InfiniteScrollFooter({ options, className }) {
50
50
  export {
51
51
  InfiniteScrollFooter
52
52
  };
53
- //# sourceMappingURL=chunk-BDV4GOEN.js.map
53
+ //# sourceMappingURL=chunk-5GILG5AK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/infiniteScroll.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useRef } from \"react\";\nimport { Loader2Icon } from \"lucide-react\";\nimport { cn } from \"@mari-ui/core\";\n\n/**\n * List ve Masonry'nin ortak sonsuz kaydırma sözleşmesi.\n *\n * Erişilebilirlik: yalnız kaydırmaya bağlı yükleme klavye kullanıcısını\n * sayfa sonuna (alt bilgiye) hiç ulaştırmayabilir. Bu yüzden işaretçinin\n * yanında her zaman odaklanabilir bir \"Daha fazla yükle\" düğmesi de olur\n * (fare kullanıcısı için kendiliğinden, klavye için düğmeyle). Yükleme ve\n * \"hepsi bu kadar\" durumu `role=\"status\"` ile duyurulur.\n */\nexport interface InfiniteScrollOptions {\n /** Yüklenecek kayıt kaldı mı. `false` olunca işaretçi kalkar, `endMessage` görünür. */\n hasMore: boolean;\n /** Sonraki sayfa yüklenirken `true` verin — bu sırada yeni istek tetiklenmez. */\n loading?: boolean;\n /** Liste sonu görünüme girince (ya da düğmeyle) çağrılır. */\n onLoadMore: () => void;\n /** İşaretçinin görünüme ne kadar erken sayılacağı. Varsayılan: `\"200px\"` (sona gelmeden yükler). */\n rootMargin?: string;\n /** Tüm kayıtlar yüklenince. Varsayılan: \"Hepsi bu kadar\". `null` gizler. */\n endMessage?: React.ReactNode;\n /** Düğme metni. Varsayılan: \"Daha fazla yükle\". */\n loadMoreLabel?: string;\n}\n\n/**\n * İşaretçi görünüme girince `onLoadMore`. Yükleme bitip işaretçi hâlâ\n * görünürse (içerik ekranı doldurmadıysa) gözlem yeniden kurulur ve bir\n * sonraki sayfa da istenir — ekran dolana kadar.\n */\nexport function useInfiniteScroll(sentinel: React.RefObject<HTMLElement | null>, { hasMore, loading = false, onLoadMore, rootMargin = \"200px\" }: InfiniteScrollOptions) {\n const callback = useRef(onLoadMore);\n callback.current = onLoadMore;\n\n useEffect(() => {\n const el = sentinel.current;\n if (!el || !hasMore || loading || typeof IntersectionObserver === \"undefined\") return;\n // `root: null` yine de kaydırılan ata kaplarının kırpmasını hesaba katar → hem sayfa hem iç kaydırma alanında çalışır.\n const observer = new IntersectionObserver((entries) => {\n if (entries.some((e) => e.isIntersecting)) callback.current();\n }, { rootMargin });\n observer.observe(el);\n return () => observer.disconnect();\n }, [sentinel, hasMore, loading, rootMargin]);\n}\n\n/** Liste sonu: gözlenen işaretçi + durum + klavye için düğme. */\nexport function InfiniteScrollFooter({ options, className }: Readonly<{ options: InfiniteScrollOptions; className?: string }>) {\n const sentinel = useRef<HTMLDivElement>(null);\n useInfiniteScroll(sentinel, options);\n const { hasMore, loading = false, onLoadMore, endMessage = \"Hepsi bu kadar\", loadMoreLabel = \"Daha fazla yükle\" } = options;\n\n return (\n // `relative`: içindeki sr-only düğme konumlanmamış bir kaydırma kabından kaçıp sayfayı genişletmesin.\n <div className={cn(\"relative flex flex-col items-center gap-2 py-3 text-sm text-mari-muted\", className)}>\n <div ref={sentinel} aria-hidden className=\"h-px w-full\" />\n <div role=\"status\" className=\"flex min-h-5 items-center gap-2\">\n {loading && (\n <>\n <Loader2Icon size={16} aria-hidden className=\"animate-spin motion-reduce:animate-none\" />\n Yükleniyor…\n </>\n )}\n {!loading && !hasMore && endMessage}\n </div>\n {hasMore && !loading && (\n // Fare kullanıcısında görünmez (kaydırma yetiyor); klavyeyle odaklanınca belirir.\n <button\n type=\"button\"\n onClick={onLoadMore}\n className=\"sr-only rounded-md px-3 py-1.5 font-medium text-mari-primary focus-visible:not-sr-only focus-visible:outline-2 focus-visible:outline-mari-ring\"\n >\n {loadMoreLabel}\n </button>\n )}\n </div>\n );\n}\n"],"mappings":";AAEA,SAAgB,WAAW,cAAc;AACzC,SAAS,mBAAmB;AAC5B,SAAS,UAAU;AAwDb,SAGI,UAHJ,KAGI,YAHJ;AAzBC,SAAS,kBAAkB,UAA+C,EAAE,SAAS,UAAU,OAAO,YAAY,aAAa,QAAQ,GAA0B;AACtK,QAAM,WAAW,OAAO,UAAU;AAClC,WAAS,UAAU;AAEnB,YAAU,MAAM;AACd,UAAM,KAAK,SAAS;AACpB,QAAI,CAAC,MAAM,CAAC,WAAW,WAAW,OAAO,yBAAyB,YAAa;AAE/E,UAAM,WAAW,IAAI,qBAAqB,CAAC,YAAY;AACrD,UAAI,QAAQ,KAAK,CAAC,MAAM,EAAE,cAAc,EAAG,UAAS,QAAQ;AAAA,IAC9D,GAAG,EAAE,WAAW,CAAC;AACjB,aAAS,QAAQ,EAAE;AACnB,WAAO,MAAM,SAAS,WAAW;AAAA,EACnC,GAAG,CAAC,UAAU,SAAS,SAAS,UAAU,CAAC;AAC7C;AAGO,SAAS,qBAAqB,EAAE,SAAS,UAAU,GAAqE;AAC7H,QAAM,WAAW,OAAuB,IAAI;AAC5C,oBAAkB,UAAU,OAAO;AACnC,QAAM,EAAE,SAAS,UAAU,OAAO,YAAY,aAAa,kBAAkB,gBAAgB,sBAAmB,IAAI;AAEpH;AAAA;AAAA,IAEE,qBAAC,SAAI,WAAW,GAAG,0EAA0E,SAAS,GACpG;AAAA,0BAAC,SAAI,KAAK,UAAU,eAAW,MAAC,WAAU,eAAc;AAAA,MACxD,qBAAC,SAAI,MAAK,UAAS,WAAU,mCAC1B;AAAA,mBACC,iCACE;AAAA,8BAAC,eAAY,MAAM,IAAI,eAAW,MAAC,WAAU,2CAA0C;AAAA,UAAE;AAAA,WAE3F;AAAA,QAED,CAAC,WAAW,CAAC,WAAW;AAAA,SAC3B;AAAA,MACC,WAAW,CAAC;AAAA,MAEX;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS;AAAA,UACT,WAAU;AAAA,UAET;AAAA;AAAA,MACH;AAAA,OAEJ;AAAA;AAEJ;","names":[]}
@@ -182,4 +182,4 @@ export {
182
182
  checkedBorderSolidClass,
183
183
  checkedBorderStrongClass
184
184
  };
185
- //# sourceMappingURL=chunk-IP2J3BWY.js.map
185
+ //# sourceMappingURL=chunk-6AMBZXZJ.js.map