@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/accordion.js CHANGED
@@ -2,14 +2,14 @@
2
2
 
3
3
  import {
4
4
  ContentSkeleton
5
- } from "./chunk-V7KDUUV6.js";
5
+ } from "./chunk-RMNV2CE2.js";
6
6
  import {
7
7
  SkeletonBlock
8
- } from "./chunk-NPM7IDYV.js";
9
- import "./chunk-XUKVQO6M.js";
8
+ } from "./chunk-TSFAAREV.js";
9
+ import "./chunk-6CSUVVFG.js";
10
10
  import {
11
11
  skeletonBoxProps
12
- } from "./chunk-54HHEXXD.js";
12
+ } from "./chunk-VKN374SD.js";
13
13
 
14
14
  // src/accordion/Accordion.tsx
15
15
  import { useEffect, useId, useRef, useState } from "react";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/accordion/Accordion.tsx","../src/accordion/utils.ts"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useId, useRef, useState } from \"react\";\nimport { ChevronDownIcon, ChevronRightIcon } from \"lucide-react\";\nimport { cn, useControllableState, type Size } from \"@mari-ui/core\";\nimport { ContentSkeleton } from \"../lib/ContentSkeleton\";\nimport { skeletonBoxProps } from \"../lib/skeleton\";\nimport { SkeletonBlock } from \"../skeleton\";\nimport type { AccordionItem, AccordionProps, AccordionVariant } from \"./types\";\nimport { getHeaderTarget, toggleKey, toKeys } from \"./utils\";\n\nexport type { AccordionProps, AccordionItem, AccordionVariant };\n\nconst EXIT_MS = 200;\n\n/** ant.design: sm 8·12, md 12·16, lg 16·24px; lg'de başlık 16px. */\nconst HEADER_PAD: Record<Size, string> = { sm: \"px-3 py-2\", md: \"px-4 py-3\", lg: \"px-6 py-4 text-base\" };\nconst BODY_PAD: Record<Size, string> = { sm: \"px-3 py-2\", md: \"p-4\", lg: \"px-6 py-4\" };\n/** Tonsuz varyantlarda gövde başlığın devamı — üst dolgu küçülür. */\nconst BODY_PAD_FLUSH: Record<Size, string> = { sm: \"px-3 pb-2\", md: \"px-4 pb-4\", lg: \"px-6 pb-4\" };\n/** İkon kutusu = başlığın satır yüksekliği → ok ilk satırla hizalı kalır. */\nconst ICON_BOX: Record<Size, string> = { sm: \"h-5\", md: \"h-5\", lg: \"h-6\" };\n\nconst ROOT: Record<AccordionVariant, string> = {\n bordered: \"overflow-hidden rounded-lg border border-mari-border bg-mari-surface-alt\",\n borderless: \"overflow-hidden rounded-lg bg-mari-surface-alt\",\n ghost: \"\",\n separated: \"flex flex-col gap-2\",\n};\n\nconst ITEM: Record<AccordionVariant, string> = {\n bordered: \"border-b border-mari-border last:border-b-0\",\n borderless: \"border-b border-mari-border last:border-b-0\",\n ghost: \"\",\n separated: \"overflow-hidden rounded-lg border border-mari-border bg-mari-surface\",\n};\n\ninterface PanelProps {\n item: AccordionItem;\n open: boolean;\n onToggle: () => void;\n variant: AccordionVariant;\n size: Size;\n iconPlacement: \"start\" | \"end\";\n expandIcon?: (open: boolean) => React.ReactNode;\n headingLevel: 2 | 3 | 4 | 5 | 6;\n destroyOnHidden: boolean;\n region: boolean;\n skeleton: boolean;\n}\n\n/** İçerik ilk açılışta mount edilir; `destroyOnHidden`da kapanış animasyonundan sonra kaldırılır. */\nfunction useRenderedContent(open: boolean, forceRender: boolean, destroyOnHidden: boolean): boolean {\n const [rendered, setRendered] = useState(open || forceRender);\n useEffect(() => {\n if (open) {\n setRendered(true);\n return;\n }\n if (!destroyOnHidden || forceRender) return;\n const timer = setTimeout(() => setRendered(false), EXIT_MS);\n return () => clearTimeout(timer);\n }, [open, forceRender, destroyOnHidden]);\n return open || rendered;\n}\n\nfunction ExpandIcon({ open, size, placement, disabled, skeleton, custom }: Readonly<{ open: boolean; size: Size; placement: \"start\" | \"end\"; disabled?: boolean; skeleton: boolean; custom?: (open: boolean) => React.ReactNode }>) {\n const Chevron = placement === \"end\" ? ChevronDownIcon : ChevronRightIcon;\n let content: React.ReactNode;\n if (skeleton) content = <span {...skeletonBoxProps(\"size-3.5 rounded-sm\")} />;\n else\n content = custom?.(open) ?? (\n <Chevron\n size={size === \"lg\" ? 18 : 16}\n className={cn(\"transition-transform duration-200 motion-reduce:transition-none\", open && (placement === \"end\" ? \"rotate-180\" : \"rotate-90\"))}\n />\n );\n return (\n <span aria-hidden className={cn(\"flex shrink-0 items-center\", ICON_BOX[size], disabled ? \"text-mari-muted/60\" : \"text-mari-muted\", placement === \"end\" && \"order-last\")}>\n {content}\n </span>\n );\n}\n\ntype HeaderRowProps = Pick<PanelProps, \"item\" | \"open\" | \"onToggle\" | \"variant\" | \"size\" | \"iconPlacement\" | \"expandIcon\" | \"skeleton\"> & {\n Heading: \"h3\";\n headerId: string;\n panelId: string;\n};\n\n/**\n * Başlık satırı: düğme `after:inset-0` ile tüm satırı tıklanabilir yapar (ant:\n * başlığın her yeri açar), `extra` üstte (`z-10`) ve düğmenin DIŞINDA — içindeki\n * bağlantı/düğme iç içe etkileşimli öğe olmaz. İskelette satır erişilebilirlik\n * ağacından çıkar (etiket yer tutucuya döndüğü için düğme adsız kalırdı).\n */\nfunction HeaderRow({ item, open, onToggle, variant, size, iconPlacement, expandIcon, skeleton, Heading, headerId, panelId }: HeaderRowProps) {\n const disabled = item.disabled || skeleton;\n return (\n <div\n aria-hidden={skeleton || undefined}\n className={cn(\n \"relative flex items-start gap-3\",\n HEADER_PAD[size],\n !disabled && \"cursor-pointer\",\n !disabled && variant !== \"bordered\" && \"hover:bg-mari-surface-alt/60\",\n \"has-[[data-accordion-trigger]:focus-visible]:outline-2 has-[[data-accordion-trigger]:focus-visible]:-outline-offset-2 has-[[data-accordion-trigger]:focus-visible]:outline-mari-ring\",\n variant === \"ghost\" && \"rounded-md\"\n )}\n >\n {item.showArrow !== false && <ExpandIcon open={open} size={size} placement={iconPlacement} disabled={item.disabled} skeleton={skeleton} custom={expandIcon} />}\n <Heading className=\"m-0 min-w-0 flex-1 text-inherit font-medium\">\n <button\n type=\"button\"\n id={headerId}\n data-accordion-trigger=\"\"\n aria-expanded={open}\n aria-controls={panelId}\n disabled={disabled}\n onClick={onToggle}\n className={cn(\n \"w-full cursor-[inherit] text-left outline-none after:absolute after:inset-0\",\n size === \"lg\" ? \"leading-6\" : \"leading-5\",\n item.disabled ? \"text-mari-muted\" : \"text-mari-foreground\",\n disabled && \"cursor-not-allowed\"\n )}\n >\n {skeleton ? <span {...skeletonBoxProps(\"rounded-sm\")}>{item.label}</span> : item.label}\n </button>\n </Heading>\n {item.extra && <div className={cn(\"relative z-10 flex shrink-0 items-center\", ICON_BOX[size], skeleton && \"invisible\")}>{item.extra}</div>}\n </div>\n );\n}\n\nfunction Panel({ item, open, onToggle, variant, size, iconPlacement, expandIcon, headingLevel, destroyOnHidden, region, skeleton }: Readonly<PanelProps>) {\n const id = useId();\n const headerId = `${id}-header`;\n const panelId = `${id}-panel`;\n const rendered = useRenderedContent(open, Boolean(item.forceRender), destroyOnHidden);\n const Heading = `h${headingLevel}` as \"h3\";\n const tinted = variant === \"bordered\";\n\n return (\n <div className={ITEM[variant]}>\n <HeaderRow\n item={item}\n open={open}\n onToggle={onToggle}\n variant={variant}\n size={size}\n iconPlacement={iconPlacement}\n expandIcon={expandIcon}\n Heading={Heading}\n headerId={headerId}\n panelId={panelId}\n skeleton={skeleton}\n />\n <div\n className={cn(\n \"grid transition-[grid-template-rows] duration-200 ease-out motion-reduce:transition-none\",\n open ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\"\n )}\n >\n <div\n id={panelId}\n role={region ? \"region\" : undefined}\n aria-labelledby={region ? headerId : undefined}\n // Kapalıyken odaklanamaz ve erişilebilirlik ağacında yok (görsel olarak da 0 yükseklik).\n inert={!open || undefined}\n className=\"min-h-0 overflow-hidden\"\n >\n {rendered && (\n <div className={cn(tinted ? cn(\"border-t border-mari-border bg-mari-surface\", BODY_PAD[size]) : BODY_PAD_FLUSH[size], \"text-mari-foreground\")}>\n <ContentSkeleton on={skeleton} fallback={<SkeletonBlock active width=\"80%\" height=\"0.75rem\" radius=\"sm\" />}>\n {item.children}\n </ContentSkeleton>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Faz 16.3 — yapı ant.design Collapse'tan (tüm başlık açar, ok başta ya da\n * sonda, `extra`, tekli mod, dört görünüm, üç boyut, ilk açılışta mount +\n * `destroyOnHidden`), görünüm kendi token'larımızdan. Aç/kapa yüksekliği\n * `grid-template-rows` 0fr↔1fr ile canlandırılır (sabit `max-height` yok).\n *\n * Erişilebilirlik (WAI-ARIA APG Accordion): her başlık `<hN><button\n * aria-expanded aria-controls>`; gövde `role=\"region\"` + `aria-labelledby`\n * (6'dan fazla bölümde landmark kalabalığı olmasın diye region verilmez).\n * Kapalı gövde `inert`. ↑/↓ başlıklar arası (döngülü), Home/End ilk/son.\n */\nexport function Accordion({\n items,\n activeKey,\n defaultActiveKey,\n onChange,\n single = false,\n variant = \"bordered\",\n size = \"md\",\n iconPlacement = \"start\",\n expandIcon,\n headingLevel = 3,\n destroyOnHidden = false,\n className,\n skeleton = false,\n}: Readonly<AccordionProps>) {\n const [active, setActive] = useControllableState<string[]>({\n value: toKeys(activeKey),\n defaultValue: toKeys(defaultActiveKey) ?? [],\n onChange,\n });\n const rootRef = useRef<HTMLDivElement>(null);\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n const target = event.target as HTMLElement;\n if (!target.matches(\"[data-accordion-trigger]\")) return;\n const headers = Array.from(rootRef.current?.querySelectorAll<HTMLElement>(\"[data-accordion-trigger]:not(:disabled)\") ?? []).filter(\n // İç içe Accordion'un başlıkları bu listeye girmez.\n (el) => el.closest(\"[data-accordion-root]\") === rootRef.current\n );\n const next = getHeaderTarget(headers, target, event.key);\n if (!next) return;\n event.preventDefault();\n next.focus();\n };\n\n return (\n // Tuşlar başlık düğmelerinden kabarcıklanır; kök etkileşimli değil.\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n ref={rootRef}\n data-accordion-root=\"\"\n aria-busy={skeleton || undefined}\n onKeyDown={onKeyDown}\n className={cn(\"text-sm text-mari-foreground\", ROOT[variant], className)}\n >\n {items.map((item) => (\n <Panel\n key={item.key}\n item={item}\n open={active.includes(item.key)}\n onToggle={() => setActive(toggleKey(active, item.key, single))}\n variant={variant}\n size={size}\n iconPlacement={iconPlacement}\n expandIcon={expandIcon}\n headingLevel={headingLevel}\n destroyOnHidden={destroyOnHidden}\n region={items.length <= 6}\n skeleton={skeleton}\n />\n ))}\n </div>\n );\n}\n","/** `activeKey` tek anahtar ya da dizi olabilir → her zaman dizi. */\nexport function toKeys(value: string | string[] | undefined): string[] | undefined {\n if (value === undefined) return undefined;\n return Array.isArray(value) ? value : [value];\n}\n\n/** Bir bölümü aç/kapat. Tekli modda açılan bölüm diğerlerini kapatır. */\nexport function toggleKey(active: string[], key: string, single: boolean): string[] {\n if (active.includes(key)) return active.filter((k) => k !== key);\n return single ? [key] : [...active, key];\n}\n\n/**\n * APG accordion klavyesi: başlıklar arasında ↑/↓ (döngülü), Home/End.\n * Devre dışı başlıklar listeye verilmez. Diğer tuşlarda `null`.\n */\nexport function getHeaderTarget(headers: HTMLElement[], current: Element | null, key: string): HTMLElement | null {\n if (headers.length === 0) return null;\n const index = current ? headers.indexOf(current as HTMLElement) : -1;\n switch (key) {\n case \"ArrowDown\":\n return headers[(index + 1) % headers.length] ?? null;\n case \"ArrowUp\":\n return headers[index <= 0 ? headers.length - 1 : index - 1] ?? null;\n case \"Home\":\n return headers[0] ?? null;\n case \"End\":\n return headers[headers.length - 1] ?? null;\n default:\n return null;\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/accordion/Accordion.tsx","../src/accordion/utils.ts"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useId, useRef, useState } from \"react\";\nimport { ChevronDownIcon, ChevronRightIcon } from \"lucide-react\";\nimport { cn, useControllableState, type Size } from \"@mari-ui/core\";\nimport { ContentSkeleton } from \"../lib/ContentSkeleton\";\nimport { skeletonBoxProps } from \"../lib/skeleton\";\nimport { SkeletonBlock } from \"../skeleton\";\nimport type { AccordionItem, AccordionProps, AccordionVariant } from \"./types\";\nimport { getHeaderTarget, toggleKey, toKeys } from \"./utils\";\n\nexport type { AccordionProps, AccordionItem, AccordionVariant };\n\nconst EXIT_MS = 200;\n\n/*\n * ant.design: sm 8·12, md 12·16, lg 16·24px; lg'de başlık 16px.\n */\nconst HEADER_PAD: Record<Size, string> = { sm: \"px-3 py-2\", md: \"px-4 py-3\", lg: \"px-6 py-4 text-base\" };\nconst BODY_PAD: Record<Size, string> = { sm: \"px-3 py-2\", md: \"p-4\", lg: \"px-6 py-4\" };\n/** Tonsuz varyantlarda gövde başlığın devamı — üst dolgu küçülür. */\nconst BODY_PAD_FLUSH: Record<Size, string> = { sm: \"px-3 pb-2\", md: \"px-4 pb-4\", lg: \"px-6 pb-4\" };\n/** İkon kutusu = başlığın satır yüksekliği → ok ilk satırla hizalı kalır. */\nconst ICON_BOX: Record<Size, string> = { sm: \"h-5\", md: \"h-5\", lg: \"h-6\" };\n\nconst ROOT: Record<AccordionVariant, string> = {\n bordered: \"overflow-hidden rounded-lg border border-mari-border bg-mari-surface-alt\",\n borderless: \"overflow-hidden rounded-lg bg-mari-surface-alt\",\n ghost: \"\",\n separated: \"flex flex-col gap-2\",\n};\n\nconst ITEM: Record<AccordionVariant, string> = {\n bordered: \"border-b border-mari-border last:border-b-0\",\n borderless: \"border-b border-mari-border last:border-b-0\",\n ghost: \"\",\n separated: \"overflow-hidden rounded-lg border border-mari-border bg-mari-surface\",\n};\n\ninterface PanelProps {\n item: AccordionItem;\n open: boolean;\n onToggle: () => void;\n variant: AccordionVariant;\n size: Size;\n iconPlacement: \"start\" | \"end\";\n expandIcon?: (open: boolean) => React.ReactNode;\n headingLevel: 2 | 3 | 4 | 5 | 6;\n destroyOnHidden: boolean;\n region: boolean;\n skeleton: boolean;\n}\n\n/** İçerik ilk açılışta mount edilir; `destroyOnHidden`da kapanış animasyonundan sonra kaldırılır. */\nfunction useRenderedContent(open: boolean, forceRender: boolean, destroyOnHidden: boolean): boolean {\n const [rendered, setRendered] = useState(open || forceRender);\n useEffect(() => {\n if (open) {\n setRendered(true);\n return;\n }\n if (!destroyOnHidden || forceRender) return;\n const timer = setTimeout(() => setRendered(false), EXIT_MS);\n return () => clearTimeout(timer);\n }, [open, forceRender, destroyOnHidden]);\n return open || rendered;\n}\n\nfunction ExpandIcon({ open, size, placement, disabled, skeleton, custom }: Readonly<{ open: boolean; size: Size; placement: \"start\" | \"end\"; disabled?: boolean; skeleton: boolean; custom?: (open: boolean) => React.ReactNode }>) {\n const Chevron = placement === \"end\" ? ChevronDownIcon : ChevronRightIcon;\n let content: React.ReactNode;\n if (skeleton) content = <span {...skeletonBoxProps(\"size-3.5 rounded-sm\")} />;\n else\n content = custom?.(open) ?? (\n <Chevron\n size={size === \"lg\" ? 18 : 16}\n className={cn(\"transition-transform duration-200 motion-reduce:transition-none\", open && (placement === \"end\" ? \"rotate-180\" : \"rotate-90\"))}\n />\n );\n return (\n <span aria-hidden className={cn(\"flex shrink-0 items-center\", ICON_BOX[size], disabled ? \"text-mari-muted/60\" : \"text-mari-muted\", placement === \"end\" && \"order-last\")}>\n {content}\n </span>\n );\n}\n\ntype HeaderRowProps = Pick<PanelProps, \"item\" | \"open\" | \"onToggle\" | \"variant\" | \"size\" | \"iconPlacement\" | \"expandIcon\" | \"skeleton\"> & {\n Heading: \"h3\";\n headerId: string;\n panelId: string;\n};\n\n/**\n * Başlık satırı: düğme `after:inset-0` ile tüm satırı tıklanabilir yapar (ant:\n * başlığın her yeri açar), `extra` üstte (`z-10`) ve düğmenin DIŞINDA — içindeki\n * bağlantı/düğme iç içe etkileşimli öğe olmaz. İskelette satır erişilebilirlik\n * ağacından çıkar (etiket yer tutucuya döndüğü için düğme adsız kalırdı).\n */\nfunction HeaderRow({ item, open, onToggle, variant, size, iconPlacement, expandIcon, skeleton, Heading, headerId, panelId }: HeaderRowProps) {\n const disabled = item.disabled || skeleton;\n return (\n <div\n aria-hidden={skeleton || undefined}\n className={cn(\n \"relative flex items-start gap-3\",\n HEADER_PAD[size],\n !disabled && \"cursor-pointer\",\n !disabled && variant !== \"bordered\" && \"hover:bg-mari-surface-alt/60\",\n \"has-[[data-accordion-trigger]:focus-visible]:outline-2 has-[[data-accordion-trigger]:focus-visible]:-outline-offset-2 has-[[data-accordion-trigger]:focus-visible]:outline-mari-ring\",\n variant === \"ghost\" && \"rounded-md\"\n )}\n >\n {item.showArrow !== false && <ExpandIcon open={open} size={size} placement={iconPlacement} disabled={item.disabled} skeleton={skeleton} custom={expandIcon} />}\n <Heading className=\"m-0 min-w-0 flex-1 text-inherit font-medium\">\n <button\n type=\"button\"\n id={headerId}\n data-accordion-trigger=\"\"\n aria-expanded={open}\n aria-controls={panelId}\n disabled={disabled}\n onClick={onToggle}\n className={cn(\n \"w-full cursor-[inherit] text-left outline-none after:absolute after:inset-0\",\n size === \"lg\" ? \"leading-6\" : \"leading-5\",\n item.disabled ? \"text-mari-muted\" : \"text-mari-foreground\",\n disabled && \"cursor-not-allowed\"\n )}\n >\n {skeleton ? <span {...skeletonBoxProps(\"rounded-sm\")}>{item.label}</span> : item.label}\n </button>\n </Heading>\n {item.extra && <div className={cn(\"relative z-10 flex shrink-0 items-center\", ICON_BOX[size], skeleton && \"invisible\")}>{item.extra}</div>}\n </div>\n );\n}\n\nfunction Panel({ item, open, onToggle, variant, size, iconPlacement, expandIcon, headingLevel, destroyOnHidden, region, skeleton }: Readonly<PanelProps>) {\n const id = useId();\n const headerId = `${id}-header`;\n const panelId = `${id}-panel`;\n const rendered = useRenderedContent(open, Boolean(item.forceRender), destroyOnHidden);\n const Heading = `h${headingLevel}` as \"h3\";\n const tinted = variant === \"bordered\";\n\n return (\n <div className={ITEM[variant]}>\n <HeaderRow\n item={item}\n open={open}\n onToggle={onToggle}\n variant={variant}\n size={size}\n iconPlacement={iconPlacement}\n expandIcon={expandIcon}\n Heading={Heading}\n headerId={headerId}\n panelId={panelId}\n skeleton={skeleton}\n />\n <div\n className={cn(\n \"grid transition-[grid-template-rows] duration-200 ease-out motion-reduce:transition-none\",\n open ? \"grid-rows-[1fr]\" : \"grid-rows-[0fr]\"\n )}\n >\n <div\n id={panelId}\n role={region ? \"region\" : undefined}\n aria-labelledby={region ? headerId : undefined}\n // Kapalıyken odaklanamaz ve erişilebilirlik ağacında yok (görsel olarak da 0 yükseklik).\n inert={!open || undefined}\n className=\"min-h-0 overflow-hidden\"\n >\n {rendered && (\n <div className={cn(tinted ? cn(\"border-t border-mari-border bg-mari-surface\", BODY_PAD[size]) : BODY_PAD_FLUSH[size], \"text-mari-foreground\")}>\n <ContentSkeleton on={skeleton} fallback={<SkeletonBlock active width=\"80%\" height=\"0.75rem\" radius=\"sm\" />}>\n {item.children}\n </ContentSkeleton>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Aç/kapa yüksekliği\n * `grid-template-rows` 0fr↔1fr ile canlandırılır (sabit `max-height` yok).\n *\n * Erişilebilirlik (WAI-ARIA APG Accordion): her başlık `<hN><button\n * aria-expanded aria-controls>`; gövde `role=\"region\"` + `aria-labelledby`\n * (6'dan fazla bölümde landmark kalabalığı olmasın diye region verilmez).\n * Kapalı gövde `inert`. ↑/↓ başlıklar arası (döngülü), Home/End ilk/son.\n */\nexport function Accordion({\n items,\n activeKey,\n defaultActiveKey,\n onChange,\n single = false,\n variant = \"bordered\",\n size = \"md\",\n iconPlacement = \"start\",\n expandIcon,\n headingLevel = 3,\n destroyOnHidden = false,\n className,\n skeleton = false,\n}: Readonly<AccordionProps>) {\n const [active, setActive] = useControllableState<string[]>({\n value: toKeys(activeKey),\n defaultValue: toKeys(defaultActiveKey) ?? [],\n onChange,\n });\n const rootRef = useRef<HTMLDivElement>(null);\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n const target = event.target as HTMLElement;\n if (!target.matches(\"[data-accordion-trigger]\")) return;\n const headers = Array.from(rootRef.current?.querySelectorAll<HTMLElement>(\"[data-accordion-trigger]:not(:disabled)\") ?? []).filter(\n // İç içe Accordion'un başlıkları bu listeye girmez.\n (el) => el.closest(\"[data-accordion-root]\") === rootRef.current\n );\n const next = getHeaderTarget(headers, target, event.key);\n if (!next) return;\n event.preventDefault();\n next.focus();\n };\n\n return (\n // Tuşlar başlık düğmelerinden kabarcıklanır; kök etkileşimli değil.\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\n <div\n ref={rootRef}\n data-accordion-root=\"\"\n aria-busy={skeleton || undefined}\n onKeyDown={onKeyDown}\n className={cn(\"text-sm text-mari-foreground\", ROOT[variant], className)}\n >\n {items.map((item) => (\n <Panel\n key={item.key}\n item={item}\n open={active.includes(item.key)}\n onToggle={() => setActive(toggleKey(active, item.key, single))}\n variant={variant}\n size={size}\n iconPlacement={iconPlacement}\n expandIcon={expandIcon}\n headingLevel={headingLevel}\n destroyOnHidden={destroyOnHidden}\n region={items.length <= 6}\n skeleton={skeleton}\n />\n ))}\n </div>\n );\n}\n","/** `activeKey` tek anahtar ya da dizi olabilir → her zaman dizi. */\nexport function toKeys(value: string | string[] | undefined): string[] | undefined {\n if (value === undefined) return undefined;\n return Array.isArray(value) ? value : [value];\n}\n\n/** Bir bölümü aç/kapat. Tekli modda açılan bölüm diğerlerini kapatır. */\nexport function toggleKey(active: string[], key: string, single: boolean): string[] {\n if (active.includes(key)) return active.filter((k) => k !== key);\n return single ? [key] : [...active, key];\n}\n\n/**\n * APG accordion klavyesi: başlıklar arasında ↑/↓ (döngülü), Home/End.\n * Devre dışı başlıklar listeye verilmez. Diğer tuşlarda `null`.\n */\nexport function getHeaderTarget(headers: HTMLElement[], current: Element | null, key: string): HTMLElement | null {\n if (headers.length === 0) return null;\n const index = current ? headers.indexOf(current as HTMLElement) : -1;\n switch (key) {\n case \"ArrowDown\":\n return headers[(index + 1) % headers.length] ?? null;\n case \"ArrowUp\":\n return headers[index <= 0 ? headers.length - 1 : index - 1] ?? null;\n case \"Home\":\n return headers[0] ?? null;\n case \"End\":\n return headers[headers.length - 1] ?? null;\n default:\n return null;\n }\n}\n"],"mappings":"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","names":[]}
package/dist/alert.js CHANGED
@@ -2,17 +2,17 @@
2
2
 
3
3
  import {
4
4
  ContentSkeleton
5
- } from "./chunk-V7KDUUV6.js";
5
+ } from "./chunk-RMNV2CE2.js";
6
6
  import {
7
7
  SkeletonBlock
8
- } from "./chunk-NPM7IDYV.js";
9
- import "./chunk-XUKVQO6M.js";
8
+ } from "./chunk-TSFAAREV.js";
9
+ import "./chunk-6CSUVVFG.js";
10
10
  import {
11
11
  bgSubtleClass,
12
12
  borderColorClass,
13
13
  textClass
14
- } from "./chunk-IP2J3BWY.js";
15
- import "./chunk-54HHEXXD.js";
14
+ } from "./chunk-6AMBZXZJ.js";
15
+ import "./chunk-VKN374SD.js";
16
16
 
17
17
  // src/alert/Alert.tsx
18
18
  import { useState } from "react";
package/dist/alert.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/alert/Alert.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState } from \"react\";\nimport { CircleAlertIcon, CircleCheckIcon, CircleXIcon, InfoIcon, SparklesIcon, XIcon } from \"lucide-react\";\nimport { cn, type ColorRole } from \"@mari-ui/core\";\nimport { bgSubtleClass, borderColorClass, textClass } from \"../lib/colorClasses\";\nimport { ContentSkeleton } from \"../lib/ContentSkeleton\";\nimport { SkeletonBlock } from \"../skeleton\";\nimport type { AlertProps } from \"./types\";\n\nexport type { AlertProps };\n\nconst EXIT_MS = 200;\n\nconst ICON: Record<ColorRole, React.ComponentType<{ size?: number; className?: string; \"aria-hidden\"?: boolean }>> = {\n success: CircleCheckIcon,\n info: InfoIcon,\n warning: CircleAlertIcon,\n error: CircleXIcon,\n primary: InfoIcon,\n accent: SparklesIcon,\n neutral: InfoIcon,\n};\n\nconst PLACEHOLDER = (\n <div className=\"flex flex-col gap-2 py-0.5\">\n <SkeletonBlock active width=\"40%\" height=\"0.875rem\" radius=\"sm\" />\n <SkeletonBlock active width=\"75%\" height=\"0.75rem\" radius=\"sm\" />\n </div>\n);\n\nfunction resolveRole(role: AlertProps[\"role\"], color: ColorRole): \"alert\" | \"status\" | undefined {\n if (role === \"none\") return undefined;\n if (role) return role;\n return color === \"error\" || color === \"warning\" ? \"alert\" : \"status\";\n}\n\nfunction renderIcon(icon: AlertProps[\"icon\"], color: ColorRole): React.ReactNode {\n if (icon === false) return null;\n if (icon !== true && icon !== undefined) return icon;\n const Icon = ICON[color];\n return <Icon size={18} aria-hidden />;\n}\n\n/**\n * Faz 16.2 — yapı ant.design Alert'ten, görünüm kendi token'larımızdan\n * (tonlu zemin + rol renginde ince kenarlık ve ikon; metin gövde renginde —\n * renkli uzun metin okunmaz). Eylem sağda, dar ekranda metnin altına iner.\n *\n * Erişilebilirlik: `error`/`warning` `role=\"alert\"` (hemen duyurulur), diğerleri\n * `role=\"status\"`. İkon görsel — anlam başlık/metinde. Kapat düğmesi\n * adlandırılmış, 44px dokunma hedefi; kapanınca kısa bir solma ile kalkar.\n */\nexport function Alert({\n title,\n description,\n color = \"info\",\n icon = true,\n action,\n closable = false,\n onClose,\n closeLabel = \"Uyarıyı kapat\",\n banner = false,\n role,\n className,\n skeleton = false,\n}: Readonly<AlertProps>) {\n const [closing, setClosing] = useState(false);\n const [closed, setClosed] = useState(false);\n if (closed) return null;\n\n const close = () => {\n setClosing(true);\n onClose?.();\n setTimeout(() => setClosed(true), EXIT_MS);\n };\n\n const iconNode = renderIcon(icon, color);\n\n return (\n <div\n role={skeleton ? undefined : resolveRole(role, color)}\n aria-busy={skeleton || undefined}\n className={cn(\n \"flex items-start gap-3 text-sm text-mari-foreground transition-opacity duration-200 motion-reduce:transition-none\",\n bgSubtleClass[color],\n banner ? \"border-b px-4 py-2.5\" : \"rounded-lg border p-3.5\",\n borderColorClass[color],\n closing && \"opacity-0\",\n className\n )}\n >\n <ContentSkeleton on={skeleton} fallback={PLACEHOLDER} className=\"min-w-0 flex-1\">\n <div className=\"flex min-w-0 flex-1 flex-wrap items-start gap-x-3 gap-y-2\">\n {iconNode && <span className={cn(\"flex shrink-0 items-center pt-px\", textClass[color])}>{iconNode}</span>}\n <div className=\"min-w-0 flex-1 basis-48\">\n {title && <p className=\"font-semibold leading-5\">{title}</p>}\n {description && <div className={cn(\"leading-5\", title && \"mt-0.5 text-mari-muted\")}>{description}</div>}\n </div>\n {action && <div className=\"flex shrink-0 items-center gap-2\">{action}</div>}\n </div>\n </ContentSkeleton>\n {closable && (\n <button\n type=\"button\"\n onClick={close}\n aria-label={closeLabel}\n className={cn(\n \"relative -m-1 inline-flex size-7 shrink-0 cursor-pointer items-center justify-center rounded-md text-mari-muted transition-colors\",\n \"hover:bg-mari-foreground/5 hover:text-mari-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-mari-ring\",\n // 28px → 44px (her yönde 8px).\n \"pointer-coarse:before:absolute pointer-coarse:before:-inset-2\"\n )}\n >\n <XIcon size={16} aria-hidden />\n </button>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAEA,SAAgB,gBAAgB;AAChC,SAAS,iBAAiB,iBAAiB,aAAa,UAAU,cAAc,aAAa;AAC7F,SAAS,UAA0B;AAqBjC,SACE,KADF;AAbF,IAAM,UAAU;AAEhB,IAAM,OAA+G;AAAA,EACnH,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AACX;AAEA,IAAM,cACJ,qBAAC,SAAI,WAAU,8BACb;AAAA,sBAAC,iBAAc,QAAM,MAAC,OAAM,OAAM,QAAO,YAAW,QAAO,MAAK;AAAA,EAChE,oBAAC,iBAAc,QAAM,MAAC,OAAM,OAAM,QAAO,WAAU,QAAO,MAAK;AAAA,GACjE;AAGF,SAAS,YAAY,MAA0B,OAAkD;AAC/F,MAAI,SAAS,OAAQ,QAAO;AAC5B,MAAI,KAAM,QAAO;AACjB,SAAO,UAAU,WAAW,UAAU,YAAY,UAAU;AAC9D;AAEA,SAAS,WAAW,MAA0B,OAAmC;AAC/E,MAAI,SAAS,MAAO,QAAO;AAC3B,MAAI,SAAS,QAAQ,SAAS,OAAW,QAAO;AAChD,QAAM,OAAO,KAAK,KAAK;AACvB,SAAO,oBAAC,QAAK,MAAM,IAAI,eAAW,MAAC;AACrC;AAWO,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,aAAa;AAAA,EACb,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAyB;AACvB,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAC1C,MAAI,OAAQ,QAAO;AAEnB,QAAM,QAAQ,MAAM;AAClB,eAAW,IAAI;AACf,cAAU;AACV,eAAW,MAAM,UAAU,IAAI,GAAG,OAAO;AAAA,EAC3C;AAEA,QAAM,WAAW,WAAW,MAAM,KAAK;AAEvC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,WAAW,SAAY,YAAY,MAAM,KAAK;AAAA,MACpD,aAAW,YAAY;AAAA,MACvB,WAAW;AAAA,QACT;AAAA,QACA,cAAc,KAAK;AAAA,QACnB,SAAS,yBAAyB;AAAA,QAClC,iBAAiB,KAAK;AAAA,QACtB,WAAW;AAAA,QACX;AAAA,MACF;AAAA,MAEA;AAAA,4BAAC,mBAAgB,IAAI,UAAU,UAAU,aAAa,WAAU,kBAC9D,+BAAC,SAAI,WAAU,6DACZ;AAAA,sBAAY,oBAAC,UAAK,WAAW,GAAG,oCAAoC,UAAU,KAAK,CAAC,GAAI,oBAAS;AAAA,UAClG,qBAAC,SAAI,WAAU,2BACZ;AAAA,qBAAS,oBAAC,OAAE,WAAU,2BAA2B,iBAAM;AAAA,YACvD,eAAe,oBAAC,SAAI,WAAW,GAAG,aAAa,SAAS,wBAAwB,GAAI,uBAAY;AAAA,aACnG;AAAA,UACC,UAAU,oBAAC,SAAI,WAAU,oCAAoC,kBAAO;AAAA,WACvE,GACF;AAAA,QACC,YACC;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS;AAAA,YACT,cAAY;AAAA,YACZ,WAAW;AAAA,cACT;AAAA,cACA;AAAA;AAAA,cAEA;AAAA,YACF;AAAA,YAEA,8BAAC,SAAM,MAAM,IAAI,eAAW,MAAC;AAAA;AAAA,QAC/B;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../src/alert/Alert.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState } from \"react\";\nimport { CircleAlertIcon, CircleCheckIcon, CircleXIcon, InfoIcon, SparklesIcon, XIcon } from \"lucide-react\";\nimport { cn, type ColorRole } from \"@mari-ui/core\";\nimport { bgSubtleClass, borderColorClass, textClass } from \"../lib/colorClasses\";\nimport { ContentSkeleton } from \"../lib/ContentSkeleton\";\nimport { SkeletonBlock } from \"../skeleton\";\nimport type { AlertProps } from \"./types\";\n\nexport type { AlertProps };\n\nconst EXIT_MS = 200;\n\nconst ICON: Record<ColorRole, React.ComponentType<{ size?: number; className?: string; \"aria-hidden\"?: boolean }>> = {\n success: CircleCheckIcon,\n info: InfoIcon,\n warning: CircleAlertIcon,\n error: CircleXIcon,\n primary: InfoIcon,\n accent: SparklesIcon,\n neutral: InfoIcon,\n};\n\nconst PLACEHOLDER = (\n <div className=\"flex flex-col gap-2 py-0.5\">\n <SkeletonBlock active width=\"40%\" height=\"0.875rem\" radius=\"sm\" />\n <SkeletonBlock active width=\"75%\" height=\"0.75rem\" radius=\"sm\" />\n </div>\n);\n\nfunction resolveRole(role: AlertProps[\"role\"], color: ColorRole): \"alert\" | \"status\" | undefined {\n if (role === \"none\") return undefined;\n if (role) return role;\n return color === \"error\" || color === \"warning\" ? \"alert\" : \"status\";\n}\n\nfunction renderIcon(icon: AlertProps[\"icon\"], color: ColorRole): React.ReactNode {\n if (icon === false) return null;\n if (icon !== true && icon !== undefined) return icon;\n const Icon = ICON[color];\n return <Icon size={18} aria-hidden />;\n}\n\n/**\n * (tonlu zemin + rol renginde ince kenarlık ve ikon; metin gövde renginde —\n * renkli uzun metin okunmaz). Eylem sağda, dar ekranda metnin altına iner.\n *\n * Erişilebilirlik: `error`/`warning` `role=\"alert\"` (hemen duyurulur), diğerleri\n * `role=\"status\"`. İkon görsel — anlam başlık/metinde. Kapat düğmesi\n * adlandırılmış, 44px dokunma hedefi; kapanınca kısa bir solma ile kalkar.\n */\nexport function Alert({\n title,\n description,\n color = \"info\",\n icon = true,\n action,\n closable = false,\n onClose,\n closeLabel = \"Uyarıyı kapat\",\n banner = false,\n role,\n className,\n skeleton = false,\n}: Readonly<AlertProps>) {\n const [closing, setClosing] = useState(false);\n const [closed, setClosed] = useState(false);\n if (closed) return null;\n\n const close = () => {\n setClosing(true);\n onClose?.();\n setTimeout(() => setClosed(true), EXIT_MS);\n };\n\n const iconNode = renderIcon(icon, color);\n\n return (\n <div\n role={skeleton ? undefined : resolveRole(role, color)}\n aria-busy={skeleton || undefined}\n className={cn(\n \"flex items-start gap-3 text-sm text-mari-foreground transition-opacity duration-200 motion-reduce:transition-none\",\n bgSubtleClass[color],\n banner ? \"border-b px-4 py-2.5\" : \"rounded-lg border p-3.5\",\n borderColorClass[color],\n closing && \"opacity-0\",\n className\n )}\n >\n <ContentSkeleton on={skeleton} fallback={PLACEHOLDER} className=\"min-w-0 flex-1\">\n <div className=\"flex min-w-0 flex-1 flex-wrap items-start gap-x-3 gap-y-2\">\n {iconNode && <span className={cn(\"flex shrink-0 items-center pt-px\", textClass[color])}>{iconNode}</span>}\n <div className=\"min-w-0 flex-1 basis-48\">\n {title && <p className=\"font-semibold leading-5\">{title}</p>}\n {description && <div className={cn(\"leading-5\", title && \"mt-0.5 text-mari-muted\")}>{description}</div>}\n </div>\n {action && <div className=\"flex shrink-0 items-center gap-2\">{action}</div>}\n </div>\n </ContentSkeleton>\n {closable && (\n <button\n type=\"button\"\n onClick={close}\n aria-label={closeLabel}\n className={cn(\n \"relative -m-1 inline-flex size-7 shrink-0 cursor-pointer items-center justify-center rounded-md text-mari-muted transition-colors\",\n \"hover:bg-mari-foreground/5 hover:text-mari-foreground focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-mari-ring\",\n // 28px → 44px (her yönde 8px).\n \"pointer-coarse:before:absolute pointer-coarse:before:-inset-2\"\n )}\n >\n <XIcon size={16} aria-hidden />\n </button>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAEA,SAAgB,gBAAgB;AAChC,SAAS,iBAAiB,iBAAiB,aAAa,UAAU,cAAc,aAAa;AAC7F,SAAS,UAA0B;AAqBjC,SACE,KADF;AAbF,IAAM,UAAU;AAEhB,IAAM,OAA+G;AAAA,EACnH,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AACX;AAEA,IAAM,cACJ,qBAAC,SAAI,WAAU,8BACb;AAAA,sBAAC,iBAAc,QAAM,MAAC,OAAM,OAAM,QAAO,YAAW,QAAO,MAAK;AAAA,EAChE,oBAAC,iBAAc,QAAM,MAAC,OAAM,OAAM,QAAO,WAAU,QAAO,MAAK;AAAA,GACjE;AAGF,SAAS,YAAY,MAA0B,OAAkD;AAC/F,MAAI,SAAS,OAAQ,QAAO;AAC5B,MAAI,KAAM,QAAO;AACjB,SAAO,UAAU,WAAW,UAAU,YAAY,UAAU;AAC9D;AAEA,SAAS,WAAW,MAA0B,OAAmC;AAC/E,MAAI,SAAS,MAAO,QAAO;AAC3B,MAAI,SAAS,QAAQ,SAAS,OAAW,QAAO;AAChD,QAAM,OAAO,KAAK,KAAK;AACvB,SAAO,oBAAC,QAAK,MAAM,IAAI,eAAW,MAAC;AACrC;AAUO,SAAS,MAAM;AAAA,EACpB;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,aAAa;AAAA,EACb,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAyB;AACvB,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAC1C,MAAI,OAAQ,QAAO;AAEnB,QAAM,QAAQ,MAAM;AAClB,eAAW,IAAI;AACf,cAAU;AACV,eAAW,MAAM,UAAU,IAAI,GAAG,OAAO;AAAA,EAC3C;AAEA,QAAM,WAAW,WAAW,MAAM,KAAK;AAEvC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,WAAW,SAAY,YAAY,MAAM,KAAK;AAAA,MACpD,aAAW,YAAY;AAAA,MACvB,WAAW;AAAA,QACT;AAAA,QACA,cAAc,KAAK;AAAA,QACnB,SAAS,yBAAyB;AAAA,QAClC,iBAAiB,KAAK;AAAA,QACtB,WAAW;AAAA,QACX;AAAA,MACF;AAAA,MAEA;AAAA,4BAAC,mBAAgB,IAAI,UAAU,UAAU,aAAa,WAAU,kBAC9D,+BAAC,SAAI,WAAU,6DACZ;AAAA,sBAAY,oBAAC,UAAK,WAAW,GAAG,oCAAoC,UAAU,KAAK,CAAC,GAAI,oBAAS;AAAA,UAClG,qBAAC,SAAI,WAAU,2BACZ;AAAA,qBAAS,oBAAC,OAAE,WAAU,2BAA2B,iBAAM;AAAA,YACvD,eAAe,oBAAC,SAAI,WAAW,GAAG,aAAa,SAAS,wBAAwB,GAAI,uBAAY;AAAA,aACnG;AAAA,UACC,UAAU,oBAAC,SAAI,WAAU,oCAAoC,kBAAO;AAAA,WACvE,GACF;AAAA,QACC,YACC;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS;AAAA,YACT,cAAY;AAAA,YACZ,WAAW;AAAA,cACT;AAAA,cACA;AAAA;AAAA,cAEA;AAAA,YACF;AAAA,YAEA,8BAAC,SAAM,MAAM,IAAI,eAAW,MAAC;AAAA;AAAA,QAC/B;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
@@ -2,20 +2,20 @@
2
2
 
3
3
  import {
4
4
  Input
5
- } from "./chunk-P7Z5BREP.js";
5
+ } from "./chunk-L6DBWUAB.js";
6
6
  import {
7
7
  getFilteredOption,
8
8
  splitMatch
9
- } from "./chunk-YZ7MDC6B.js";
9
+ } from "./chunk-LNL4TCGL.js";
10
10
  import "./chunk-KSPM2Z3T.js";
11
- import "./chunk-DUCIAQGR.js";
12
- import "./chunk-LBQMEHK6.js";
11
+ import "./chunk-NENNFQEY.js";
12
+ import "./chunk-NPFMPRII.js";
13
13
  import {
14
14
  elevationClass
15
- } from "./chunk-TCYDVNSU.js";
16
- import "./chunk-FFXRFQSU.js";
17
- import "./chunk-IP2J3BWY.js";
18
- import "./chunk-54HHEXXD.js";
15
+ } from "./chunk-MT4VH7QV.js";
16
+ import "./chunk-POBOJBNJ.js";
17
+ import "./chunk-6AMBZXZJ.js";
18
+ import "./chunk-VKN374SD.js";
19
19
 
20
20
  // src/autocomplete/AutoComplete.tsx
21
21
  import { useEffect, useId, useRef, useState } from "react";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/autocomplete/AutoComplete.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useId, useRef, useState } from \"react\";\nimport { cn, useControllableState } from \"@mari-ui/core\";\nimport { Input } from \"../input\";\nimport { elevationClass } from \"../lib/elevationClass\";\nimport type { AutoCompleteProps } from \"./types\";\nimport { getFilteredOption, splitMatch } from \"./utils\";\n\nexport type { AutoCompleteProps };\n\nfunction HighlightedValue({ value, searchText }: Readonly<{ value: string; searchText: string }>) {\n const parts = splitMatch(value, searchText);\n if (!parts) return <>{value}</>;\n return (\n <>\n {parts[0]}\n <mark className=\"bg-transparent font-semibold text-mari-foreground\">{parts[1]}</mark>\n {parts[2]}\n </>\n );\n}\n\n/**\n * ARIA \"combobox\" deseni (Faz 13): `role=\"combobox\"`/`listbox`/`option` +\n * Ok tuşları/Enter/Escape.\n *\n * Faz 15: temizleme bir `<svg onClick>` idi — buton değildi, klavyeyle\n * erişilemiyordu ve alan boşken de görünüyordu → Input'un etiketli\n * `allowClear`'ı. Liste yükseklik sınırı yoktu (100 seçenek sayfayı uzatırdı);\n * klavyeyle gezinirken aktif seçenek görünür alana kaydırılır. Eşleşen kısım\n * kalın. Türkçe/aksansız arama (`foldForSearch`). `size`/`color`/`disabled`\n * artık geçirilebilir.\n */\nexport function AutoComplete({\n options,\n value,\n defaultValue = \"\",\n onSearch,\n onSelect,\n placeholder = \"Ara\",\n closeOnBlur = true,\n notFoundContent,\n size,\n color,\n disabled,\n id,\n name,\n \"aria-label\": ariaLabel,\n className,\n skeleton = false,\n}: Readonly<AutoCompleteProps>) {\n const [searchText, setSearchText] = useControllableState<string>({ value, defaultValue, onChange: onSearch });\n const [isFocused, setIsFocused] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const listboxId = useId();\n const listRef = useRef<HTMLUListElement>(null);\n\n const filteredOptions = getFilteredOption(options, searchText);\n const showNotFound = filteredOptions.length === 0 && notFoundContent !== undefined && searchText.trim() !== \"\";\n const isOpen = isFocused && (filteredOptions.length > 0 || showNotFound);\n const activeOption = activeIndex >= 0 ? filteredOptions[activeIndex] : undefined;\n const optionId = (optId: number) => `${listboxId}-option-${optId}`;\n\n useEffect(() => {\n if (!activeOption) return;\n document.getElementById(optionId(activeOption.id))?.scrollIntoView?.({ block: \"nearest\" });\n // eslint-disable-next-line react-hooks/exhaustive-deps -- yalnızca aktif seçenek değişince\n }, [activeOption?.id]);\n\n if (skeleton) return <Input skeleton size={size} className={className} />;\n\n const handleSelect = (optionValue: string) => {\n setSearchText(optionValue);\n onSelect?.(optionValue);\n setIsFocused(false);\n setActiveIndex(-1);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setIsFocused(true);\n setActiveIndex((i) => Math.min(i + 1, filteredOptions.length - 1));\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActiveIndex((i) => Math.max(i - 1, 0));\n } else if (e.key === \"Enter\" && activeOption) {\n e.preventDefault();\n handleSelect(activeOption.value);\n } else if (e.key === \"Escape\") {\n setIsFocused(false);\n setActiveIndex(-1);\n }\n };\n\n return (\n <div className={cn(\"relative\", className)}>\n <Input\n id={id}\n name={name}\n value={searchText}\n placeholder={placeholder}\n size={size}\n color={color}\n disabled={disabled}\n allowClear\n onClear={() => {\n setSearchText(\"\");\n setActiveIndex(-1);\n }}\n onChange={(e) => {\n setSearchText(e.target.value);\n setActiveIndex(-1);\n }}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsFocused(true)}\n onBlur={closeOnBlur ? () => setIsFocused(false) : undefined}\n role=\"combobox\"\n // `placeholder` bir accessible name SAYILMAZ — tüketici `aria-label`\n // vermediyse placeholder'dan türetilir.\n aria-label={ariaLabel ?? placeholder}\n aria-autocomplete=\"list\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-activedescendant={activeOption ? optionId(activeOption.id) : undefined}\n autoComplete=\"off\"\n />\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n className={cn(\n \"absolute left-0 top-full z-mari-dropdown mt-1 max-h-64 w-full overflow-y-auto overscroll-contain rounded-lg bg-mari-surface p-1 text-sm transition-[opacity,translate] duration-150\",\n elevationClass.md,\n isOpen ? \"pointer-events-auto translate-y-0 opacity-100\" : \"pointer-events-none -translate-y-1 opacity-0\"\n )}\n >\n {filteredOptions.map((option, i) => (\n <li key={option.id} role=\"presentation\">\n <button\n id={optionId(option.id)}\n role=\"option\"\n aria-selected={i === activeIndex}\n type=\"button\"\n tabIndex={-1}\n // onMouseDown (blur'dan ÖNCE) — aksi halde Input'un onBlur'u\n // listeyi gizleyip tıklamayı iptal ederdi.\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => handleSelect(option.value)}\n className={cn(\n \"flex min-h-8 w-full cursor-pointer items-center rounded-md px-2.5 py-1.5 text-left text-mari-muted hover:bg-mari-surface-alt pointer-coarse:min-h-11\",\n i === activeIndex && \"bg-mari-surface-alt text-mari-foreground\"\n )}\n >\n <span className=\"truncate\">\n <HighlightedValue value={option.value} searchText={searchText} />\n </span>\n </button>\n </li>\n ))}\n {showNotFound && (\n <li role=\"presentation\" className=\"px-2.5 py-2 text-mari-muted\">\n {notFoundContent}\n </li>\n )}\n </ul>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/autocomplete/AutoComplete.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useId, useRef, useState } from \"react\";\nimport { cn, useControllableState } from \"@mari-ui/core\";\nimport { Input } from \"../input\";\nimport { elevationClass } from \"../lib/elevationClass\";\nimport type { AutoCompleteProps } from \"./types\";\nimport { getFilteredOption, splitMatch } from \"./utils\";\n\nexport type { AutoCompleteProps };\n\nfunction HighlightedValue({ value, searchText }: Readonly<{ value: string; searchText: string }>) {\n const parts = splitMatch(value, searchText);\n if (!parts) return <>{value}</>;\n return (\n <>\n {parts[0]}\n <mark className=\"bg-transparent font-semibold text-mari-foreground\">{parts[1]}</mark>\n {parts[2]}\n </>\n );\n}\n\n/**\n * ARIA \"combobox\" deseni: `role=\"combobox\"`/`listbox`/`option` +\n * Ok tuşları/Enter/Escape.\n *\n * Temizleme bir `<svg onClick>` idi — buton değildi, klavyeyle\n * erişilemiyordu ve alan boşken de görünüyordu → Input'un etiketli\n * `allowClear`'ı. Liste yükseklik sınırı yoktu (100 seçenek sayfayı uzatırdı);\n * klavyeyle gezinirken aktif seçenek görünür alana kaydırılır. Eşleşen kısım\n * kalın. Türkçe/aksansız arama (`foldForSearch`). `size`/`color`/`disabled`\n * artık geçirilebilir.\n */\nexport function AutoComplete({\n options,\n value,\n defaultValue = \"\",\n onSearch,\n onSelect,\n placeholder = \"Ara\",\n closeOnBlur = true,\n notFoundContent,\n size,\n color,\n disabled,\n id,\n name,\n \"aria-label\": ariaLabel,\n className,\n skeleton = false,\n}: Readonly<AutoCompleteProps>) {\n const [searchText, setSearchText] = useControllableState<string>({ value, defaultValue, onChange: onSearch });\n const [isFocused, setIsFocused] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const listboxId = useId();\n const listRef = useRef<HTMLUListElement>(null);\n\n const filteredOptions = getFilteredOption(options, searchText);\n const showNotFound = filteredOptions.length === 0 && notFoundContent !== undefined && searchText.trim() !== \"\";\n const isOpen = isFocused && (filteredOptions.length > 0 || showNotFound);\n const activeOption = activeIndex >= 0 ? filteredOptions[activeIndex] : undefined;\n const optionId = (optId: number) => `${listboxId}-option-${optId}`;\n\n useEffect(() => {\n if (!activeOption) return;\n document.getElementById(optionId(activeOption.id))?.scrollIntoView?.({ block: \"nearest\" });\n // eslint-disable-next-line react-hooks/exhaustive-deps -- yalnızca aktif seçenek değişince\n }, [activeOption?.id]);\n\n if (skeleton) return <Input skeleton size={size} className={className} />;\n\n const handleSelect = (optionValue: string) => {\n setSearchText(optionValue);\n onSelect?.(optionValue);\n setIsFocused(false);\n setActiveIndex(-1);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setIsFocused(true);\n setActiveIndex((i) => Math.min(i + 1, filteredOptions.length - 1));\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActiveIndex((i) => Math.max(i - 1, 0));\n } else if (e.key === \"Enter\" && activeOption) {\n e.preventDefault();\n handleSelect(activeOption.value);\n } else if (e.key === \"Escape\") {\n setIsFocused(false);\n setActiveIndex(-1);\n }\n };\n\n return (\n <div className={cn(\"relative\", className)}>\n <Input\n id={id}\n name={name}\n value={searchText}\n placeholder={placeholder}\n size={size}\n color={color}\n disabled={disabled}\n allowClear\n onClear={() => {\n setSearchText(\"\");\n setActiveIndex(-1);\n }}\n onChange={(e) => {\n setSearchText(e.target.value);\n setActiveIndex(-1);\n }}\n onKeyDown={handleKeyDown}\n onFocus={() => setIsFocused(true)}\n onBlur={closeOnBlur ? () => setIsFocused(false) : undefined}\n role=\"combobox\"\n // `placeholder` bir accessible name SAYILMAZ — tüketici `aria-label`\n // vermediyse placeholder'dan türetilir.\n aria-label={ariaLabel ?? placeholder}\n aria-autocomplete=\"list\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-activedescendant={activeOption ? optionId(activeOption.id) : undefined}\n autoComplete=\"off\"\n />\n <ul\n ref={listRef}\n id={listboxId}\n role=\"listbox\"\n className={cn(\n \"absolute left-0 top-full z-mari-dropdown mt-1 max-h-64 w-full overflow-y-auto overscroll-contain rounded-lg bg-mari-surface p-1 text-sm transition-[opacity,translate] duration-150\",\n elevationClass.md,\n isOpen ? \"pointer-events-auto translate-y-0 opacity-100\" : \"pointer-events-none -translate-y-1 opacity-0\"\n )}\n >\n {filteredOptions.map((option, i) => (\n <li key={option.id} role=\"presentation\">\n <button\n id={optionId(option.id)}\n role=\"option\"\n aria-selected={i === activeIndex}\n type=\"button\"\n tabIndex={-1}\n // onMouseDown (blur'dan ÖNCE) — aksi halde Input'un onBlur'u\n // listeyi gizleyip tıklamayı iptal ederdi.\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => handleSelect(option.value)}\n className={cn(\n \"flex min-h-8 w-full cursor-pointer items-center rounded-md px-2.5 py-1.5 text-left text-mari-muted hover:bg-mari-surface-alt pointer-coarse:min-h-11\",\n i === activeIndex && \"bg-mari-surface-alt text-mari-foreground\"\n )}\n >\n <span className=\"truncate\">\n <HighlightedValue value={option.value} searchText={searchText} />\n </span>\n </button>\n </li>\n ))}\n {showNotFound && (\n <li role=\"presentation\" className=\"px-2.5 py-2 text-mari-muted\">\n {notFoundContent}\n </li>\n )}\n </ul>\n </div>\n );\n}\n"],"mappings":"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","names":[]}
package/dist/avatar.js CHANGED
@@ -5,13 +5,13 @@ import {
5
5
  getInitials,
6
6
  getShapeClasses,
7
7
  getSizeStyle
8
- } from "./chunk-XUKVQO6M.js";
8
+ } from "./chunk-6CSUVVFG.js";
9
9
  import {
10
10
  colorVariantToClassName
11
- } from "./chunk-IP2J3BWY.js";
11
+ } from "./chunk-6AMBZXZJ.js";
12
12
  import {
13
13
  skeletonBoxProps
14
- } from "./chunk-54HHEXXD.js";
14
+ } from "./chunk-VKN374SD.js";
15
15
 
16
16
  // src/avatar/Avatar.tsx
17
17
  import { Children, cloneElement, isValidElement, useState } from "react";
package/dist/badge.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  Badge,
3
3
  StatusBadge
4
- } from "./chunk-ZXYQ2ZPR.js";
5
- import "./chunk-IP2J3BWY.js";
6
- import "./chunk-54HHEXXD.js";
4
+ } from "./chunk-TEMTIMAH.js";
5
+ import "./chunk-6AMBZXZJ.js";
6
+ import "./chunk-VKN374SD.js";
7
7
  export {
8
8
  Badge,
9
9
  StatusBadge
@@ -7,21 +7,21 @@ import {
7
7
  DropdownTrigger,
8
8
  NewTabHint,
9
9
  getLinkAttrs
10
- } from "./chunk-FNJHS5KQ.js";
10
+ } from "./chunk-E5JTEQ4V.js";
11
11
  import {
12
12
  SkeletonSlot
13
- } from "./chunk-DKENCYHA.js";
14
- import "./chunk-S66GKX2W.js";
15
- import "./chunk-3ABWBQCS.js";
16
- import "./chunk-NS7FKOFI.js";
17
- import "./chunk-TCYDVNSU.js";
13
+ } from "./chunk-MXGY2ENX.js";
14
+ import "./chunk-OAWUZIIN.js";
15
+ import "./chunk-GTNCXOUL.js";
16
+ import "./chunk-NYXU5EFE.js";
17
+ import "./chunk-MT4VH7QV.js";
18
18
  import {
19
19
  touchTargetClass
20
- } from "./chunk-FFXRFQSU.js";
21
- import "./chunk-IP2J3BWY.js";
20
+ } from "./chunk-POBOJBNJ.js";
21
+ import "./chunk-6AMBZXZJ.js";
22
22
  import {
23
23
  skeletonFill
24
- } from "./chunk-54HHEXXD.js";
24
+ } from "./chunk-VKN374SD.js";
25
25
 
26
26
  // src/breadcrumb/Breadcrumb.tsx
27
27
  import { useState } from "react";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/breadcrumb/Breadcrumb.tsx","../src/breadcrumb/utils.ts"],"sourcesContent":["\"use client\";\n\nimport React, { useState } from \"react\";\nimport { ChevronDownIcon } from \"lucide-react\";\nimport { cn } from \"@mari-ui/core\";\nimport { Dropdown, DropdownContent, DropdownItem, DropdownTrigger } from \"../dropdown\";\nimport { skeletonFill } from \"../lib/skeleton\";\nimport { SkeletonSlot } from \"../lib/SkeletonSlot\";\nimport { NewTabHint, getLinkAttrs } from \"../lib/linkBehavior\";\nimport type { BreadcrumbItemType, BreadcrumbProps } from \"./types\";\nimport {\n getInteractiveClass,\n getNavClass,\n getPathsByIndex,\n getStaticClass,\n getVisibleIndexes,\n itemClass,\n listClass,\n separatorClass,\n} from \"./utils\";\n\nexport type { BreadcrumbProps };\n\n/**\n * Faz 13.5 kullanıcı bulgusu (plan denetiminde de not edilmişti): son öğede\n * `aria-current=\"page\"` YOKTU — ekran okuyucu kullanıcıları hiyerarşideki\n * geçerli konumu bilemiyordu. Yapı da düz `<span>` sarmalayıcılardan\n * ant.design'ın gerçek Breadcrumb'ıyla (DOM incelemesi, ant.design/\n * components/breadcrumb) aynı semantik `<nav><ol><li>` listesine çevrildi;\n * ayırıcı artık `aria-hidden` (ekran okuyucu her öğe arasında \"/\" okumasın\n * diye). Ayrıca `onClick` VAR ama `href` YOK olan öğeler eskiden `<span\n * role=\"none\">` idi — tıklanabilirdi ama klavyeyle ASLA erişilemiyordu\n * (AutoComplete/Rate/Switch/Tooltip'te bulunanlarla aynı sınıf gerçek bug);\n * artık gerçek bir `<button>`.\n *\n * Faz 15.5: ikon, öğe başına açılır menü (`menu`, Dropdown ile), `maxItems`\n * katlama (\"…\" düğmesi), satır kırılması (375px'te yatay taşma yok), dokunma\n * hedefi, son öğe ön plan renginde ve `skeleton`.\n */\nexport function Breadcrumb({\n items = [],\n separator = \"/\",\n className,\n itemRender,\n params = {},\n maxItems,\n skeleton = false,\n \"aria-label\": ariaLabel = \"Gezinme yolu\",\n}: Readonly<BreadcrumbProps>) {\n const [expanded, setExpanded] = useState(false);\n const pathsByIndex = getPathsByIndex(items);\n const visible = getVisibleIndexes(items.length, maxItems, expanded);\n const lastIndex = items.length - 1;\n\n const renderContent = (item: BreadcrumbItemType, index: number) => {\n const isCurrent = index === lastIndex;\n const ariaCurrent = isCurrent ? (\"page\" as const) : undefined;\n if (itemRender) return itemRender(item, params, items, pathsByIndex[index] ?? []);\n\n const inner = (\n <>\n {item.icon && <span aria-hidden=\"true\" className=\"inline-flex\">{item.icon}</span>}\n {item.title}\n </>\n );\n\n if (item.menu) {\n return (\n <Dropdown className=\"inline-flex self-auto\">\n <DropdownTrigger className={cn(\"group\", getInteractiveClass(isCurrent, item.className))}>\n {inner}\n <ChevronDownIcon aria-hidden=\"true\" className=\"transition-transform duration-200 group-aria-expanded:rotate-180\" />\n </DropdownTrigger>\n <DropdownContent placement=\"bottom-start\">\n {item.menu.items.map((sub, i) => (\n <DropdownItem key={sub.key ?? sub.href ?? i} href={sub.href} target={sub.target} icon={sub.icon} onClick={sub.onClick}>\n {sub.title}\n </DropdownItem>\n ))}\n </DropdownContent>\n </Dropdown>\n );\n }\n if (item.href) {\n return (\n <a href={item.href} {...getLinkAttrs(item.target)} className={getInteractiveClass(isCurrent, item.className)} onClick={item.onClick} aria-current={ariaCurrent}>\n {inner}\n <NewTabHint target={item.target} />\n </a>\n );\n }\n if (item.onClick) {\n return (\n <button type=\"button\" className={getInteractiveClass(isCurrent, item.className)} onClick={item.onClick} aria-current={ariaCurrent}>\n {inner}\n </button>\n );\n }\n return (\n <span className={getStaticClass(isCurrent, item.className)} aria-current={ariaCurrent}>\n {inner}\n </span>\n );\n };\n\n return (\n <nav className={getNavClass(className)} aria-label={ariaLabel}>\n <ol className={listClass}>\n {visible.map((index, position) => {\n const isLastShown = position === visible.length - 1;\n const sep = !isLastShown && (\n <span className={separatorClass} aria-hidden=\"true\">\n {separator}\n </span>\n );\n\n if (index === null) {\n return (\n <li key=\"collapsed\" className={itemClass}>\n <SkeletonSlot on={skeleton} placeholder={<span className={cn(\"block h-[1lh] rounded-sm\", skeletonFill(true))} />}>\n <button\n type=\"button\"\n className={getInteractiveClass(false)}\n aria-label={`${items.length - visible.length + 1} gizli yolu göster`}\n onClick={() => setExpanded(true)}\n >\n …\n </button>\n </SkeletonSlot>\n {sep}\n </li>\n );\n }\n\n const item = items[index];\n if (!item) return null;\n return (\n <li key={item.path ?? item.href ?? index} className={itemClass}>\n <SkeletonSlot on={skeleton} className=\"min-w-0\" placeholder={<span className={cn(\"block h-[1lh] rounded-sm\", skeletonFill(true))} />}>\n {renderContent(item, index)}\n </SkeletonSlot>\n {sep}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n","import { cn } from \"@mari-ui/core\";\nimport { touchTargetClass } from \"../lib/sizeClasses\";\n\n/**\n * Faz 15.5 — yapı ant.design Breadcrumb'dan (ölçüldü): 14px / 22px satır,\n * öğeler arası 8px ayırıcı boşluğu, bağlantılar soluk, son öğe (geçerli sayfa)\n * ön plan renginde; bağlantı hover'da 4px yarıçaplı hafif bir zemin alır\n * (`px-1 -mx-1`: zemin metnin iki yanına taşar, hizalama bozulmaz). Uzun\n * yollar alt satıra kırılır (`flex-wrap`), yatay taşma olmaz.\n */\nexport function getNavClass(className?: string): string {\n return cn(\"text-sm leading-[1.375rem] text-mari-muted\", className);\n}\n\nexport const listClass = \"flex flex-wrap items-center gap-y-1\";\n\nexport const itemClass = \"flex min-w-0 items-center\";\n\nexport const separatorClass = \"mx-2 inline-flex items-center [&_svg]:size-3.5\";\n\n/** Metin + ikon kutusu; bağlantı olmayan öğeler (span) de aynı kutuyu kullanır ki hizalar tutsun. */\nconst contentBaseClass = \"inline-flex min-w-0 items-center gap-1 break-words [&_svg]:size-3.5 [&_svg]:shrink-0\";\n\n/** Etkileşimli öğeler (link, button, menü tetikleyicisi): hover zemini + odak halkası + dokunma hedefi. */\nexport function getInteractiveClass(isCurrent: boolean, itemClassName?: string): string {\n return cn(\n contentBaseClass,\n \"relative -mx-1 cursor-pointer rounded-sm px-1 transition-colors duration-200\",\n \"hover:bg-mari-foreground/[0.06] hover:text-mari-foreground\",\n \"focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-mari-ring\",\n touchTargetClass.xs,\n isCurrent && \"text-mari-foreground\",\n itemClassName\n );\n}\n\n/** Etkileşimsiz öğe (href/onClick yok) — genelde geçerli sayfa. */\nexport function getStaticClass(isCurrent: boolean, itemClassName?: string): string {\n return cn(contentBaseClass, isCurrent && \"text-mari-foreground\", itemClassName);\n}\n\n/**\n * `maxItems` aşılınca görünecek öğelerin indeksleri; `null` katlanmış\n * aralığın yerini (\"…\" düğmesi) işaretler. İlk öğe + son `maxItems - 1` öğe.\n */\nexport function getVisibleIndexes(count: number, maxItems: number | undefined, expanded: boolean): (number | null)[] {\n const all = Array.from({ length: count }, (_, i) => i);\n if (expanded || !maxItems || count <= maxItems) return all;\n const tail = Math.max(1, maxItems - 1);\n return [0, null, ...all.slice(count - tail)];\n}\n\n/** Her öğe için `itemRender`a verilen birikimli `path` listesi (katlanan öğeler de sayılır). */\nexport function getPathsByIndex(items: { path?: string }[]): string[][] {\n const acc: string[] = [];\n return items.map((item) => {\n if (item.path) acc.push(item.path);\n return [...acc];\n });\n}\n"],"mappings":"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","names":["cn","cn"]}
1
+ {"version":3,"sources":["../src/breadcrumb/Breadcrumb.tsx","../src/breadcrumb/utils.ts"],"sourcesContent":["\"use client\";\n\nimport React, { useState } from \"react\";\nimport { ChevronDownIcon } from \"lucide-react\";\nimport { cn } from \"@mari-ui/core\";\nimport { Dropdown, DropdownContent, DropdownItem, DropdownTrigger } from \"../dropdown\";\nimport { skeletonFill } from \"../lib/skeleton\";\nimport { SkeletonSlot } from \"../lib/SkeletonSlot\";\nimport { NewTabHint, getLinkAttrs } from \"../lib/linkBehavior\";\nimport type { BreadcrumbItemType, BreadcrumbProps } from \"./types\";\nimport {\n getInteractiveClass,\n getNavClass,\n getPathsByIndex,\n getStaticClass,\n getVisibleIndexes,\n itemClass,\n listClass,\n separatorClass,\n} from \"./utils\";\n\nexport type { BreadcrumbProps };\n\n/*\n * Faz 13.5 kullanıcı bulgusu (plan denetiminde de not edilmişti): son öğede\n * `aria-current=\"page\"` YOKTU — ekran okuyucu kullanıcıları hiyerarşideki\n * geçerli konumu bilemiyordu. Yapı da düz `<span>` sarmalayıcılardan\n * ant.design'ın gerçek Breadcrumb'ıyla aynı semantik `<nav><ol><li>` listesine çevrildi;\n * ayırıcı artık `aria-hidden` (ekran okuyucu her öğe arasında \"/\" okumasın\n * diye). Ayrıca `onClick` VAR ama `href` YOK olan öğeler eskiden `<span\n * role=\"none\">` idi — tıklanabilirdi ama klavyeyle ASLA erişilemiyordu\n * (AutoComplete/Rate/Switch/Tooltip'te bulunanlarla aynı sınıf gerçek bug);\n * artık gerçek bir `<button>`.\n */\n/**\n * İkon, öğe başına açılır menü (`menu`, Dropdown ile), `maxItems`\n * katlama (\"…\" düğmesi), satır kırılması (375px'te yatay taşma yok), dokunma\n * hedefi, son öğe ön plan renginde ve `skeleton`.\n */\nexport function Breadcrumb({\n items = [],\n separator = \"/\",\n className,\n itemRender,\n params = {},\n maxItems,\n skeleton = false,\n \"aria-label\": ariaLabel = \"Gezinme yolu\",\n}: Readonly<BreadcrumbProps>) {\n const [expanded, setExpanded] = useState(false);\n const pathsByIndex = getPathsByIndex(items);\n const visible = getVisibleIndexes(items.length, maxItems, expanded);\n const lastIndex = items.length - 1;\n\n const renderContent = (item: BreadcrumbItemType, index: number) => {\n const isCurrent = index === lastIndex;\n const ariaCurrent = isCurrent ? (\"page\" as const) : undefined;\n if (itemRender) return itemRender(item, params, items, pathsByIndex[index] ?? []);\n\n const inner = (\n <>\n {item.icon && <span aria-hidden=\"true\" className=\"inline-flex\">{item.icon}</span>}\n {item.title}\n </>\n );\n\n if (item.menu) {\n return (\n <Dropdown className=\"inline-flex self-auto\">\n <DropdownTrigger className={cn(\"group\", getInteractiveClass(isCurrent, item.className))}>\n {inner}\n <ChevronDownIcon aria-hidden=\"true\" className=\"transition-transform duration-200 group-aria-expanded:rotate-180\" />\n </DropdownTrigger>\n <DropdownContent placement=\"bottom-start\">\n {item.menu.items.map((sub, i) => (\n <DropdownItem key={sub.key ?? sub.href ?? i} href={sub.href} target={sub.target} icon={sub.icon} onClick={sub.onClick}>\n {sub.title}\n </DropdownItem>\n ))}\n </DropdownContent>\n </Dropdown>\n );\n }\n if (item.href) {\n return (\n <a href={item.href} {...getLinkAttrs(item.target)} className={getInteractiveClass(isCurrent, item.className)} onClick={item.onClick} aria-current={ariaCurrent}>\n {inner}\n <NewTabHint target={item.target} />\n </a>\n );\n }\n if (item.onClick) {\n return (\n <button type=\"button\" className={getInteractiveClass(isCurrent, item.className)} onClick={item.onClick} aria-current={ariaCurrent}>\n {inner}\n </button>\n );\n }\n return (\n <span className={getStaticClass(isCurrent, item.className)} aria-current={ariaCurrent}>\n {inner}\n </span>\n );\n };\n\n return (\n <nav className={getNavClass(className)} aria-label={ariaLabel}>\n <ol className={listClass}>\n {visible.map((index, position) => {\n const isLastShown = position === visible.length - 1;\n const sep = !isLastShown && (\n <span className={separatorClass} aria-hidden=\"true\">\n {separator}\n </span>\n );\n\n if (index === null) {\n return (\n <li key=\"collapsed\" className={itemClass}>\n <SkeletonSlot on={skeleton} placeholder={<span className={cn(\"block h-[1lh] rounded-sm\", skeletonFill(true))} />}>\n <button\n type=\"button\"\n className={getInteractiveClass(false)}\n aria-label={`${items.length - visible.length + 1} gizli yolu göster`}\n onClick={() => setExpanded(true)}\n >\n …\n </button>\n </SkeletonSlot>\n {sep}\n </li>\n );\n }\n\n const item = items[index];\n if (!item) return null;\n return (\n <li key={item.path ?? item.href ?? index} className={itemClass}>\n <SkeletonSlot on={skeleton} className=\"min-w-0\" placeholder={<span className={cn(\"block h-[1lh] rounded-sm\", skeletonFill(true))} />}>\n {renderContent(item, index)}\n </SkeletonSlot>\n {sep}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n}\n","import { cn } from \"@mari-ui/core\";\nimport { touchTargetClass } from \"../lib/sizeClasses\";\n\n/*\n * yapı ant.design Breadcrumb'dan (ölçüldü): 14px / 22px satır,\n * öğeler arası 8px ayırıcı boşluğu, bağlantılar soluk, son öğe (geçerli sayfa)\n * ön plan renginde; bağlantı hover'da 4px yarıçaplı hafif bir zemin alır\n * (`px-1 -mx-1`: zemin metnin iki yanına taşar, hizalama bozulmaz). Uzun\n * yollar alt satıra kırılır (`flex-wrap`), yatay taşma olmaz.\n */\nexport function getNavClass(className?: string): string {\n return cn(\"text-sm leading-[1.375rem] text-mari-muted\", className);\n}\n\nexport const listClass = \"flex flex-wrap items-center gap-y-1\";\n\nexport const itemClass = \"flex min-w-0 items-center\";\n\nexport const separatorClass = \"mx-2 inline-flex items-center [&_svg]:size-3.5\";\n\n/** Metin + ikon kutusu; bağlantı olmayan öğeler (span) de aynı kutuyu kullanır ki hizalar tutsun. */\nconst contentBaseClass = \"inline-flex min-w-0 items-center gap-1 break-words [&_svg]:size-3.5 [&_svg]:shrink-0\";\n\n/** Etkileşimli öğeler (link, button, menü tetikleyicisi): hover zemini + odak halkası + dokunma hedefi. */\nexport function getInteractiveClass(isCurrent: boolean, itemClassName?: string): string {\n return cn(\n contentBaseClass,\n \"relative -mx-1 cursor-pointer rounded-sm px-1 transition-colors duration-200\",\n \"hover:bg-mari-foreground/[0.06] hover:text-mari-foreground\",\n \"focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-mari-ring\",\n touchTargetClass.xs,\n isCurrent && \"text-mari-foreground\",\n itemClassName\n );\n}\n\n/** Etkileşimsiz öğe (href/onClick yok) — genelde geçerli sayfa. */\nexport function getStaticClass(isCurrent: boolean, itemClassName?: string): string {\n return cn(contentBaseClass, isCurrent && \"text-mari-foreground\", itemClassName);\n}\n\n/**\n * `maxItems` aşılınca görünecek öğelerin indeksleri; `null` katlanmış\n * aralığın yerini (\"…\" düğmesi) işaretler. İlk öğe + son `maxItems - 1` öğe.\n */\nexport function getVisibleIndexes(count: number, maxItems: number | undefined, expanded: boolean): (number | null)[] {\n const all = Array.from({ length: count }, (_, i) => i);\n if (expanded || !maxItems || count <= maxItems) return all;\n const tail = Math.max(1, maxItems - 1);\n return [0, null, ...all.slice(count - tail)];\n}\n\n/** Her öğe için `itemRender`a verilen birikimli `path` listesi (katlanan öğeler de sayılır). */\nexport function getPathsByIndex(items: { path?: string }[]): string[][] {\n const acc: string[] = [];\n return items.map((item) => {\n if (item.path) acc.push(item.path);\n return [...acc];\n });\n}\n"],"mappings":"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","names":["cn","cn"]}
package/dist/button.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  Button
3
- } from "./chunk-2IEXY3OZ.js";
4
- import "./chunk-FFXRFQSU.js";
5
- import "./chunk-IP2J3BWY.js";
6
- import "./chunk-54HHEXXD.js";
3
+ } from "./chunk-CVKAGR3D.js";
4
+ import "./chunk-POBOJBNJ.js";
5
+ import "./chunk-6AMBZXZJ.js";
6
+ import "./chunk-VKN374SD.js";
7
7
  export {
8
8
  Button
9
9
  };
package/dist/calendar.js CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  import {
4
4
  Select
5
- } from "./chunk-IO4346TF.js";
6
- import "./chunk-ZLPAXPDI.js";
5
+ } from "./chunk-FC7T3INX.js";
6
+ import "./chunk-GVJ4M63W.js";
7
7
  import {
8
8
  Segmented
9
- } from "./chunk-LEOIKO7C.js";
9
+ } from "./chunk-RLWP6NJU.js";
10
10
  import {
11
11
  CellGrid,
12
12
  DayGrid,
@@ -16,22 +16,22 @@ import {
16
16
  isWithin,
17
17
  monthNames,
18
18
  startOfDay
19
- } from "./chunk-CYLXW66E.js";
20
- import "./chunk-YZ7MDC6B.js";
19
+ } from "./chunk-C3QWJFSE.js";
20
+ import "./chunk-LNL4TCGL.js";
21
21
  import "./chunk-KSPM2Z3T.js";
22
- import "./chunk-DUCIAQGR.js";
23
- import "./chunk-LBQMEHK6.js";
24
- import "./chunk-3ABWBQCS.js";
25
- import "./chunk-NS7FKOFI.js";
26
- import "./chunk-TCYDVNSU.js";
22
+ import "./chunk-NENNFQEY.js";
23
+ import "./chunk-NPFMPRII.js";
24
+ import "./chunk-GTNCXOUL.js";
25
+ import "./chunk-NYXU5EFE.js";
26
+ import "./chunk-MT4VH7QV.js";
27
27
  import {
28
28
  Button
29
- } from "./chunk-2IEXY3OZ.js";
30
- import "./chunk-FFXRFQSU.js";
31
- import "./chunk-IP2J3BWY.js";
29
+ } from "./chunk-CVKAGR3D.js";
30
+ import "./chunk-POBOJBNJ.js";
31
+ import "./chunk-6AMBZXZJ.js";
32
32
  import {
33
33
  skeletonBoxProps
34
- } from "./chunk-54HHEXXD.js";
34
+ } from "./chunk-VKN374SD.js";
35
35
 
36
36
  // src/calendar/Calendar.tsx
37
37
  import { useState } from "react";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/calendar/Calendar.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState } from \"react\";\nimport { cn, useControllableState } from \"@mari-ui/core\";\nimport { Button } from \"../button\";\nimport { addMonths, isSameDay, isSameMonth, isWithin, monthNames, startOfDay } from \"../lib/date\";\nimport { skeletonBoxProps } from \"../lib/skeleton\";\nimport { Segmented } from \"../segmented\";\nimport { Select } from \"../select\";\nimport { CellGrid } from \"./_components/CellGrid\";\nimport { DayGrid, type DayCellInfo } from \"./_components/DayGrid\";\nimport type { CalendarMode, CalendarProps } from \"./types\";\n\nexport type { CalendarProps };\n\nconst YEAR_SPAN = 10;\n\nfunction yearOptions(year: number, range?: [Date, Date]) {\n const from = range ? range[0].getFullYear() : year - YEAR_SPAN;\n const to = range ? range[1].getFullYear() : year + YEAR_SPAN;\n return Array.from({ length: to - from + 1 }, (_, i) => ({ value: from + i, label: String(from + i) }));\n}\n\n/**\n * Faz 16.5 — yapı ant.design Calendar'dan: başlıkta yıl + ay seçici ve\n * Ay/Yıl modu; `fullscreen` (varsayılan) büyük hücreler ve `cellRender`\n * içeriği (etkinlik takvimi), `fullscreen={false}` kompakt kart. Gün\n * ızgarası DatePicker ile ortak (APG date grid, klavye).\n */\nexport function Calendar({\n value,\n defaultValue,\n onChange,\n onSelect,\n onPanelChange,\n mode: modeProp,\n defaultMode = \"month\",\n fullscreen = true,\n disabledDate,\n validRange,\n cellRender,\n weekStart = 1,\n showWeek = false,\n locale,\n \"aria-label\": ariaLabel = \"Takvim\",\n className,\n skeleton = false,\n}: Readonly<CalendarProps>) {\n const [selected, setSelected] = useControllableState<Date | null>({ value, defaultValue: defaultValue ?? null });\n const [mode, setMode] = useControllableState<CalendarMode>({ value: modeProp, defaultValue: defaultMode });\n const [view, setView] = useState(() => selected ?? startOfDay(new Date()));\n // Kontrollü değer dışarıdan değişince görünen dönem de oraya gitsin.\n const [lastValue, setLastValue] = useState(selected);\n if (selected !== lastValue) {\n setLastValue(selected);\n if (selected && !isSameMonth(selected, view)) setView(selected);\n }\n\n const today = startOfDay(new Date());\n const isDisabled = disabledChecker(validRange, disabledDate);\n const long = monthNames(locale, \"long\");\n\n /** Gezinme (yıl/ay seçici, ay dışına klavye) değeri de taşır — ant.design davranışı. */\n const navigate = (next: Date, nextMode: CalendarMode = mode) => {\n setView(next);\n onPanelChange?.(next, nextMode);\n };\n\n const choose = (date: Date, source: \"date\" | \"month\" | \"year\" | \"today\") => {\n if (isDisabled(date)) return;\n setSelected(date);\n onChange?.(date);\n onSelect?.(date, { source });\n if (!isSameMonth(date, view)) navigate(date);\n };\n\n const header = (\n <CalendarHeader\n fullscreen={fullscreen}\n mode={mode}\n view={view}\n locale={locale}\n validRange={validRange}\n onNavigate={navigate}\n onModeChange={(m) => {\n setMode(m);\n onPanelChange?.(view, m);\n }}\n onToday={() => choose(today, \"today\")}\n todayDisabled={isDisabled(today)}\n skeleton={skeleton}\n />\n );\n\n const body =\n mode === \"month\" ? (\n <DayGrid\n view={view}\n focused={selected && isSameMonth(selected, view) ? selected : view}\n onFocusChange={(d) => {\n if (!isSameMonth(d, view)) navigate(d);\n else setView(d);\n }}\n isSelected={(d) => isSameDay(d, selected)}\n isDisabled={isDisabled}\n onSelect={(d) => choose(d, \"date\")}\n weekStart={weekStart}\n locale={locale}\n showWeek={showWeek}\n variant={fullscreen ? \"full\" : \"compact\"}\n label={`${long[view.getMonth()]} ${view.getFullYear()}`}\n cellRender={adaptDayRender(cellRender)}\n skeleton={skeleton}\n />\n ) : (\n <YearBody view={view} selected={selected} today={today} fullscreen={fullscreen} locale={locale} validRange={validRange} cellRender={skeleton ? undefined : cellRender} onNavigate={navigate} onPick={(d) => choose(d, \"month\")} skeleton={skeleton} />\n );\n\n return (\n <section aria-label={ariaLabel} aria-busy={skeleton || undefined} className={cn(\"text-mari-foreground\", !fullscreen && \"w-full max-w-80 pointer-coarse:max-w-[21rem] rounded-lg border border-mari-border bg-mari-surface\", className)}>\n {header}\n <div className={cn(!fullscreen && \"p-2\")}>{body}</div>\n </section>\n );\n}\n\n/** `validRange` dışı ya da `disabledDate` → devre dışı. */\nfunction disabledChecker(validRange: CalendarProps[\"validRange\"], disabledDate: CalendarProps[\"disabledDate\"]) {\n return (d: Date) => (validRange ? !isWithin(d, validRange[0], validRange[1]) : false) || !!disabledDate?.(d);\n}\n\nfunction adaptDayRender(cellRender: CalendarProps[\"cellRender\"]): ((info: DayCellInfo) => React.ReactNode) | undefined {\n if (!cellRender) return undefined;\n return (info) => cellRender(info.date, { type: \"date\", selected: info.selected, today: info.today, disabled: info.disabled, outside: info.outside });\n}\n\nconst startOfMonthOf = (d: Date) => new Date(d.getFullYear(), d.getMonth(), 1);\n\ninterface HeaderProps {\n fullscreen: boolean;\n mode: CalendarMode;\n view: Date;\n locale?: string;\n validRange?: [Date, Date];\n onNavigate: (date: Date) => void;\n onModeChange: (mode: CalendarMode) => void;\n onToday: () => void;\n todayDisabled: boolean;\n skeleton: boolean;\n}\n\n/** Başlık: (tam ekranda) dönem adı, yıl ve ay seçicileri, Ay/Yıl modu, Bugün. */\nfunction CalendarHeader({ fullscreen, mode, view, locale, validRange, onNavigate, onModeChange, onToday, todayDisabled, skeleton }: Readonly<HeaderProps>) {\n const long = monthNames(locale, \"long\");\n const short = monthNames(locale, \"short\");\n const keepDay = (y: number, m: number) => new Date(y, m, Math.min(view.getDate(), 28));\n return (\n <div className={cn(\"flex flex-wrap items-center justify-end gap-2\", fullscreen ? \"pb-3\" : \"border-b border-mari-border p-2\")}>\n {fullscreen && (\n <h2 aria-live=\"polite\" className=\"mr-auto text-lg font-semibold text-mari-foreground\">\n <span {...(skeleton ? skeletonBoxProps(\"rounded-sm\") : {})}>{mode === \"month\" ? `${long[view.getMonth()]} ${view.getFullYear()}` : view.getFullYear()}</span>\n </h2>\n )}\n <Select skeleton={skeleton} size=\"sm\" aria-label=\"Yıl\" options={yearOptions(view.getFullYear(), validRange)} value={view.getFullYear()} onChange={(y) => onNavigate(keepDay(Number(y), view.getMonth()))} className=\"w-24\" />\n {mode === \"month\" && (\n <Select\n skeleton={skeleton}\n size=\"sm\"\n aria-label=\"Ay\"\n options={long.map((m, i) => ({ value: i, label: fullscreen ? m : short[i] }))}\n value={view.getMonth()}\n onChange={(m) => onNavigate(keepDay(view.getFullYear(), Number(m)))}\n className={fullscreen ? \"w-32\" : \"w-24\"}\n />\n )}\n <Segmented\n skeleton={skeleton}\n size=\"sm\"\n aria-label=\"Görünüm\"\n options={[\n { value: \"month\", label: \"Ay\" },\n { value: \"year\", label: \"Yıl\" },\n ]}\n value={mode}\n onChange={(m) => onModeChange(m as CalendarMode)}\n />\n {fullscreen && (\n <Button skeleton={skeleton} size=\"sm\" variant=\"outline\" color=\"neutral\" onClick={onToday} disabled={todayDisabled}>\n Bugün\n </Button>\n )}\n </div>\n );\n}\n\ninterface YearBodyProps {\n view: Date;\n selected: Date | null;\n today: Date;\n fullscreen: boolean;\n locale?: string;\n validRange?: [Date, Date];\n cellRender?: Exclude<CalendarProps[\"cellRender\"], undefined>;\n onNavigate: (date: Date) => void;\n onPick: (date: Date) => void;\n skeleton: boolean;\n}\n\n/** Yıl modu: 12 ay (3×4 ızgara). */\nfunction YearBody({ view, selected, today, fullscreen, locale, validRange, cellRender, onNavigate, onPick, skeleton }: Readonly<YearBodyProps>) {\n const long = monthNames(locale, \"long\");\n const short = monthNames(locale, \"short\");\n const year = view.getFullYear();\n const info = (first: Date) => ({ type: \"month\" as const, selected: isSameMonth(first, selected), today: isSameMonth(first, today), disabled: false, outside: false });\n return (\n <CellGrid\n variant={fullscreen ? \"full\" : \"compact\"}\n label={`${year} ayları`}\n cells={long.map((m, i) => {\n const first = new Date(year, i, 1);\n return {\n key: String(i),\n label: fullscreen ? m : short[i],\n fullLabel: `${m} ${year}`,\n selected: isSameMonth(first, selected),\n current: isSameMonth(first, today),\n disabled: validRange ? !isWithin(first, startOfMonthOf(validRange[0]), validRange[1]) : false,\n };\n })}\n focusedIndex={view.getMonth()}\n onFocusIndex={(i) => onNavigate(addMonths(view, i - view.getMonth()))}\n onPage={(d) => onNavigate(addMonths(view, d * 12))}\n onSelect={(i) => onPick(new Date(year, i, 1))}\n cellRender={cellRender ? (i) => cellRender(new Date(year, i, 1), info(new Date(year, i, 1))) : undefined}\n skeleton={skeleton}\n />\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/calendar/Calendar.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useState } from \"react\";\nimport { cn, useControllableState } from \"@mari-ui/core\";\nimport { Button } from \"../button\";\nimport { addMonths, isSameDay, isSameMonth, isWithin, monthNames, startOfDay } from \"../lib/date\";\nimport { skeletonBoxProps } from \"../lib/skeleton\";\nimport { Segmented } from \"../segmented\";\nimport { Select } from \"../select\";\nimport { CellGrid } from \"./_components/CellGrid\";\nimport { DayGrid, type DayCellInfo } from \"./_components/DayGrid\";\nimport type { CalendarMode, CalendarProps } from \"./types\";\n\nexport type { CalendarProps };\n\nconst YEAR_SPAN = 10;\n\nfunction yearOptions(year: number, range?: [Date, Date]) {\n const from = range ? range[0].getFullYear() : year - YEAR_SPAN;\n const to = range ? range[1].getFullYear() : year + YEAR_SPAN;\n return Array.from({ length: to - from + 1 }, (_, i) => ({ value: from + i, label: String(from + i) }));\n}\n\n/*\n * yapı ant.design Calendar'dan: başlıkta yıl + ay seçici ve\n * Ay/Yıl modu; `fullscreen` (varsayılan) büyük hücreler ve `cellRender`\n * içeriği (etkinlik takvimi), `fullscreen={false}` kompakt kart. Gün\n * ızgarası DatePicker ile ortak (APG date grid, klavye).\n */\n/**\n * Ay ya da yıl görünümlü takvim; başlıkta yıl ve ay seçici. `fullscreen` (varsayılan) büyük\n * hücreli etkinlik takvimi (`cellRender`), `fullscreen={false}` kompakt kart. Gün\n * ızgarasında klavyeyle gezinilir.\n */\nexport function Calendar({\n value,\n defaultValue,\n onChange,\n onSelect,\n onPanelChange,\n mode: modeProp,\n defaultMode = \"month\",\n fullscreen = true,\n disabledDate,\n validRange,\n cellRender,\n weekStart = 1,\n showWeek = false,\n locale,\n \"aria-label\": ariaLabel = \"Takvim\",\n className,\n skeleton = false,\n}: Readonly<CalendarProps>) {\n const [selected, setSelected] = useControllableState<Date | null>({ value, defaultValue: defaultValue ?? null });\n const [mode, setMode] = useControllableState<CalendarMode>({ value: modeProp, defaultValue: defaultMode });\n const [view, setView] = useState(() => selected ?? startOfDay(new Date()));\n // Kontrollü değer dışarıdan değişince görünen dönem de oraya gitsin.\n const [lastValue, setLastValue] = useState(selected);\n if (selected !== lastValue) {\n setLastValue(selected);\n if (selected && !isSameMonth(selected, view)) setView(selected);\n }\n\n const today = startOfDay(new Date());\n const isDisabled = disabledChecker(validRange, disabledDate);\n const long = monthNames(locale, \"long\");\n\n /*\n * Gezinme (yıl/ay seçici, ay dışına klavye) değeri de taşır — ant.design davranışı.\n */\n const navigate = (next: Date, nextMode: CalendarMode = mode) => {\n setView(next);\n onPanelChange?.(next, nextMode);\n };\n\n const choose = (date: Date, source: \"date\" | \"month\" | \"year\" | \"today\") => {\n if (isDisabled(date)) return;\n setSelected(date);\n onChange?.(date);\n onSelect?.(date, { source });\n if (!isSameMonth(date, view)) navigate(date);\n };\n\n const header = (\n <CalendarHeader\n fullscreen={fullscreen}\n mode={mode}\n view={view}\n locale={locale}\n validRange={validRange}\n onNavigate={navigate}\n onModeChange={(m) => {\n setMode(m);\n onPanelChange?.(view, m);\n }}\n onToday={() => choose(today, \"today\")}\n todayDisabled={isDisabled(today)}\n skeleton={skeleton}\n />\n );\n\n const body =\n mode === \"month\" ? (\n <DayGrid\n view={view}\n focused={selected && isSameMonth(selected, view) ? selected : view}\n onFocusChange={(d) => {\n if (!isSameMonth(d, view)) navigate(d);\n else setView(d);\n }}\n isSelected={(d) => isSameDay(d, selected)}\n isDisabled={isDisabled}\n onSelect={(d) => choose(d, \"date\")}\n weekStart={weekStart}\n locale={locale}\n showWeek={showWeek}\n variant={fullscreen ? \"full\" : \"compact\"}\n label={`${long[view.getMonth()]} ${view.getFullYear()}`}\n cellRender={adaptDayRender(cellRender)}\n skeleton={skeleton}\n />\n ) : (\n <YearBody view={view} selected={selected} today={today} fullscreen={fullscreen} locale={locale} validRange={validRange} cellRender={skeleton ? undefined : cellRender} onNavigate={navigate} onPick={(d) => choose(d, \"month\")} skeleton={skeleton} />\n );\n\n return (\n <section aria-label={ariaLabel} aria-busy={skeleton || undefined} className={cn(\"text-mari-foreground\", !fullscreen && \"w-full max-w-80 pointer-coarse:max-w-[21rem] rounded-lg border border-mari-border bg-mari-surface\", className)}>\n {header}\n <div className={cn(!fullscreen && \"p-2\")}>{body}</div>\n </section>\n );\n}\n\n/** `validRange` dışı ya da `disabledDate` → devre dışı. */\nfunction disabledChecker(validRange: CalendarProps[\"validRange\"], disabledDate: CalendarProps[\"disabledDate\"]) {\n return (d: Date) => (validRange ? !isWithin(d, validRange[0], validRange[1]) : false) || !!disabledDate?.(d);\n}\n\nfunction adaptDayRender(cellRender: CalendarProps[\"cellRender\"]): ((info: DayCellInfo) => React.ReactNode) | undefined {\n if (!cellRender) return undefined;\n return (info) => cellRender(info.date, { type: \"date\", selected: info.selected, today: info.today, disabled: info.disabled, outside: info.outside });\n}\n\nconst startOfMonthOf = (d: Date) => new Date(d.getFullYear(), d.getMonth(), 1);\n\ninterface HeaderProps {\n fullscreen: boolean;\n mode: CalendarMode;\n view: Date;\n locale?: string;\n validRange?: [Date, Date];\n onNavigate: (date: Date) => void;\n onModeChange: (mode: CalendarMode) => void;\n onToday: () => void;\n todayDisabled: boolean;\n skeleton: boolean;\n}\n\n/** Başlık: (tam ekranda) dönem adı, yıl ve ay seçicileri, Ay/Yıl modu, Bugün. */\nfunction CalendarHeader({ fullscreen, mode, view, locale, validRange, onNavigate, onModeChange, onToday, todayDisabled, skeleton }: Readonly<HeaderProps>) {\n const long = monthNames(locale, \"long\");\n const short = monthNames(locale, \"short\");\n const keepDay = (y: number, m: number) => new Date(y, m, Math.min(view.getDate(), 28));\n return (\n <div className={cn(\"flex flex-wrap items-center justify-end gap-2\", fullscreen ? \"pb-3\" : \"border-b border-mari-border p-2\")}>\n {fullscreen && (\n <h2 aria-live=\"polite\" className=\"mr-auto text-lg font-semibold text-mari-foreground\">\n <span {...(skeleton ? skeletonBoxProps(\"rounded-sm\") : {})}>{mode === \"month\" ? `${long[view.getMonth()]} ${view.getFullYear()}` : view.getFullYear()}</span>\n </h2>\n )}\n <Select skeleton={skeleton} size=\"sm\" aria-label=\"Yıl\" options={yearOptions(view.getFullYear(), validRange)} value={view.getFullYear()} onChange={(y) => onNavigate(keepDay(Number(y), view.getMonth()))} className=\"w-24\" />\n {mode === \"month\" && (\n <Select\n skeleton={skeleton}\n size=\"sm\"\n aria-label=\"Ay\"\n options={long.map((m, i) => ({ value: i, label: fullscreen ? m : short[i] }))}\n value={view.getMonth()}\n onChange={(m) => onNavigate(keepDay(view.getFullYear(), Number(m)))}\n className={fullscreen ? \"w-32\" : \"w-24\"}\n />\n )}\n <Segmented\n skeleton={skeleton}\n size=\"sm\"\n aria-label=\"Görünüm\"\n options={[\n { value: \"month\", label: \"Ay\" },\n { value: \"year\", label: \"Yıl\" },\n ]}\n value={mode}\n onChange={(m) => onModeChange(m as CalendarMode)}\n />\n {fullscreen && (\n <Button skeleton={skeleton} size=\"sm\" variant=\"outline\" color=\"neutral\" onClick={onToday} disabled={todayDisabled}>\n Bugün\n </Button>\n )}\n </div>\n );\n}\n\ninterface YearBodyProps {\n view: Date;\n selected: Date | null;\n today: Date;\n fullscreen: boolean;\n locale?: string;\n validRange?: [Date, Date];\n cellRender?: Exclude<CalendarProps[\"cellRender\"], undefined>;\n onNavigate: (date: Date) => void;\n onPick: (date: Date) => void;\n skeleton: boolean;\n}\n\n/** Yıl modu: 12 ay (3×4 ızgara). */\nfunction YearBody({ view, selected, today, fullscreen, locale, validRange, cellRender, onNavigate, onPick, skeleton }: Readonly<YearBodyProps>) {\n const long = monthNames(locale, \"long\");\n const short = monthNames(locale, \"short\");\n const year = view.getFullYear();\n const info = (first: Date) => ({ type: \"month\" as const, selected: isSameMonth(first, selected), today: isSameMonth(first, today), disabled: false, outside: false });\n return (\n <CellGrid\n variant={fullscreen ? \"full\" : \"compact\"}\n label={`${year} ayları`}\n cells={long.map((m, i) => {\n const first = new Date(year, i, 1);\n return {\n key: String(i),\n label: fullscreen ? m : short[i],\n fullLabel: `${m} ${year}`,\n selected: isSameMonth(first, selected),\n current: isSameMonth(first, today),\n disabled: validRange ? !isWithin(first, startOfMonthOf(validRange[0]), validRange[1]) : false,\n };\n })}\n focusedIndex={view.getMonth()}\n onFocusIndex={(i) => onNavigate(addMonths(view, i - view.getMonth()))}\n onPage={(d) => onNavigate(addMonths(view, d * 12))}\n onSelect={(i) => onPick(new Date(year, i, 1))}\n cellRender={cellRender ? (i) => cellRender(new Date(year, i, 1), info(new Date(year, i, 1))) : undefined}\n skeleton={skeleton}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,SAAgB,gBAAgB;AAChC,SAAS,IAAI,4BAA4B;AAiFrC,cA0CA,YA1CA;AArEJ,IAAM,YAAY;AAElB,SAAS,YAAY,MAAc,OAAsB;AACvD,QAAM,OAAO,QAAQ,MAAM,CAAC,EAAE,YAAY,IAAI,OAAO;AACrD,QAAM,KAAK,QAAQ,MAAM,CAAC,EAAE,YAAY,IAAI,OAAO;AACnD,SAAO,MAAM,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,GAAG,CAAC,GAAG,OAAO,EAAE,OAAO,OAAO,GAAG,OAAO,OAAO,OAAO,CAAC,EAAE,EAAE;AACvG;AAaO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAM;AAAA,EACN,cAAc;AAAA,EACd,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,WAAW;AAAA,EACX;AAAA,EACA,cAAc,YAAY;AAAA,EAC1B;AAAA,EACA,WAAW;AACb,GAA4B;AAC1B,QAAM,CAAC,UAAU,WAAW,IAAI,qBAAkC,EAAE,OAAO,cAAc,gBAAgB,KAAK,CAAC;AAC/G,QAAM,CAAC,MAAM,OAAO,IAAI,qBAAmC,EAAE,OAAO,UAAU,cAAc,YAAY,CAAC;AACzG,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,MAAM,YAAY,WAAW,oBAAI,KAAK,CAAC,CAAC;AAEzE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,QAAQ;AACnD,MAAI,aAAa,WAAW;AAC1B,iBAAa,QAAQ;AACrB,QAAI,YAAY,CAAC,YAAY,UAAU,IAAI,EAAG,SAAQ,QAAQ;AAAA,EAChE;AAEA,QAAM,QAAQ,WAAW,oBAAI,KAAK,CAAC;AACnC,QAAM,aAAa,gBAAgB,YAAY,YAAY;AAC3D,QAAM,OAAO,WAAW,QAAQ,MAAM;AAKtC,QAAM,WAAW,CAAC,MAAY,WAAyB,SAAS;AAC9D,YAAQ,IAAI;AACZ,oBAAgB,MAAM,QAAQ;AAAA,EAChC;AAEA,QAAM,SAAS,CAAC,MAAY,WAAgD;AAC1E,QAAI,WAAW,IAAI,EAAG;AACtB,gBAAY,IAAI;AAChB,eAAW,IAAI;AACf,eAAW,MAAM,EAAE,OAAO,CAAC;AAC3B,QAAI,CAAC,YAAY,MAAM,IAAI,EAAG,UAAS,IAAI;AAAA,EAC7C;AAEA,QAAM,SACJ;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY;AAAA,MACZ,cAAc,CAAC,MAAM;AACnB,gBAAQ,CAAC;AACT,wBAAgB,MAAM,CAAC;AAAA,MACzB;AAAA,MACA,SAAS,MAAM,OAAO,OAAO,OAAO;AAAA,MACpC,eAAe,WAAW,KAAK;AAAA,MAC/B;AAAA;AAAA,EACF;AAGF,QAAM,OACJ,SAAS,UACP;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,SAAS,YAAY,YAAY,UAAU,IAAI,IAAI,WAAW;AAAA,MAC9D,eAAe,CAAC,MAAM;AACpB,YAAI,CAAC,YAAY,GAAG,IAAI,EAAG,UAAS,CAAC;AAAA,YAChC,SAAQ,CAAC;AAAA,MAChB;AAAA,MACA,YAAY,CAAC,MAAM,UAAU,GAAG,QAAQ;AAAA,MACxC;AAAA,MACA,UAAU,CAAC,MAAM,OAAO,GAAG,MAAM;AAAA,MACjC;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,aAAa,SAAS;AAAA,MAC/B,OAAO,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;AAAA,MACrD,YAAY,eAAe,UAAU;AAAA,MACrC;AAAA;AAAA,EACF,IAEA,oBAAC,YAAS,MAAY,UAAoB,OAAc,YAAwB,QAAgB,YAAwB,YAAY,WAAW,SAAY,YAAY,YAAY,UAAU,QAAQ,CAAC,MAAM,OAAO,GAAG,OAAO,GAAG,UAAoB;AAGxP,SACE,qBAAC,aAAQ,cAAY,WAAW,aAAW,YAAY,QAAW,WAAW,GAAG,wBAAwB,CAAC,cAAc,qGAAqG,SAAS,GAClO;AAAA;AAAA,IACD,oBAAC,SAAI,WAAW,GAAG,CAAC,cAAc,KAAK,GAAI,gBAAK;AAAA,KAClD;AAEJ;AAGA,SAAS,gBAAgB,YAAyC,cAA6C;AAC7G,SAAO,CAAC,OAAa,aAAa,CAAC,SAAS,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,eAAe,CAAC;AAC7G;AAEA,SAAS,eAAe,YAA+F;AACrH,MAAI,CAAC,WAAY,QAAO;AACxB,SAAO,CAAC,SAAS,WAAW,KAAK,MAAM,EAAE,MAAM,QAAQ,UAAU,KAAK,UAAU,OAAO,KAAK,OAAO,UAAU,KAAK,UAAU,SAAS,KAAK,QAAQ,CAAC;AACrJ;AAEA,IAAM,iBAAiB,CAAC,MAAY,IAAI,KAAK,EAAE,YAAY,GAAG,EAAE,SAAS,GAAG,CAAC;AAgB7E,SAAS,eAAe,EAAE,YAAY,MAAM,MAAM,QAAQ,YAAY,YAAY,cAAc,SAAS,eAAe,SAAS,GAA0B;AACzJ,QAAM,OAAO,WAAW,QAAQ,MAAM;AACtC,QAAM,QAAQ,WAAW,QAAQ,OAAO;AACxC,QAAM,UAAU,CAAC,GAAW,MAAc,IAAI,KAAK,GAAG,GAAG,KAAK,IAAI,KAAK,QAAQ,GAAG,EAAE,CAAC;AACrF,SACE,qBAAC,SAAI,WAAW,GAAG,iDAAiD,aAAa,SAAS,iCAAiC,GACxH;AAAA,kBACC,oBAAC,QAAG,aAAU,UAAS,WAAU,sDAC/B,8BAAC,UAAM,GAAI,WAAW,iBAAiB,YAAY,IAAI,CAAC,GAAK,mBAAS,UAAU,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,KAAK,YAAY,GAAE,GACxJ;AAAA,IAEF,oBAAC,UAAO,UAAoB,MAAK,MAAK,cAAW,YAAM,SAAS,YAAY,KAAK,YAAY,GAAG,UAAU,GAAG,OAAO,KAAK,YAAY,GAAG,UAAU,CAAC,MAAM,WAAW,QAAQ,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,GAAG,WAAU,QAAO;AAAA,IAC1N,SAAS,WACR;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,cAAW;AAAA,QACX,SAAS,KAAK,IAAI,CAAC,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,aAAa,IAAI,MAAM,CAAC,EAAE,EAAE;AAAA,QAC5E,OAAO,KAAK,SAAS;AAAA,QACrB,UAAU,CAAC,MAAM,WAAW,QAAQ,KAAK,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC;AAAA,QAClE,WAAW,aAAa,SAAS;AAAA;AAAA,IACnC;AAAA,IAEF;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,cAAW;AAAA,QACX,SAAS;AAAA,UACP,EAAE,OAAO,SAAS,OAAO,KAAK;AAAA,UAC9B,EAAE,OAAO,QAAQ,OAAO,WAAM;AAAA,QAChC;AAAA,QACA,OAAO;AAAA,QACP,UAAU,CAAC,MAAM,aAAa,CAAiB;AAAA;AAAA,IACjD;AAAA,IACC,cACC,oBAAC,UAAO,UAAoB,MAAK,MAAK,SAAQ,WAAU,OAAM,WAAU,SAAS,SAAS,UAAU,eAAe,sBAEnH;AAAA,KAEJ;AAEJ;AAgBA,SAAS,SAAS,EAAE,MAAM,UAAU,OAAO,YAAY,QAAQ,YAAY,YAAY,YAAY,QAAQ,SAAS,GAA4B;AAC9I,QAAM,OAAO,WAAW,QAAQ,MAAM;AACtC,QAAM,QAAQ,WAAW,QAAQ,OAAO;AACxC,QAAM,OAAO,KAAK,YAAY;AAC9B,QAAM,OAAO,CAAC,WAAiB,EAAE,MAAM,SAAkB,UAAU,YAAY,OAAO,QAAQ,GAAG,OAAO,YAAY,OAAO,KAAK,GAAG,UAAU,OAAO,SAAS,MAAM;AACnK,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,aAAa,SAAS;AAAA,MAC/B,OAAO,GAAG,IAAI;AAAA,MACd,OAAO,KAAK,IAAI,CAAC,GAAG,MAAM;AACxB,cAAM,QAAQ,IAAI,KAAK,MAAM,GAAG,CAAC;AACjC,eAAO;AAAA,UACL,KAAK,OAAO,CAAC;AAAA,UACb,OAAO,aAAa,IAAI,MAAM,CAAC;AAAA,UAC/B,WAAW,GAAG,CAAC,IAAI,IAAI;AAAA,UACvB,UAAU,YAAY,OAAO,QAAQ;AAAA,UACrC,SAAS,YAAY,OAAO,KAAK;AAAA,UACjC,UAAU,aAAa,CAAC,SAAS,OAAO,eAAe,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI;AAAA,QAC1F;AAAA,MACF,CAAC;AAAA,MACD,cAAc,KAAK,SAAS;AAAA,MAC5B,cAAc,CAAC,MAAM,WAAW,UAAU,MAAM,IAAI,KAAK,SAAS,CAAC,CAAC;AAAA,MACpE,QAAQ,CAAC,MAAM,WAAW,UAAU,MAAM,IAAI,EAAE,CAAC;AAAA,MACjD,UAAU,CAAC,MAAM,OAAO,IAAI,KAAK,MAAM,GAAG,CAAC,CAAC;AAAA,MAC5C,YAAY,aAAa,CAAC,MAAM,WAAW,IAAI,KAAK,MAAM,GAAG,CAAC,GAAG,KAAK,IAAI,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI;AAAA,MAC/F;AAAA;AAAA,EACF;AAEJ;","names":[]}
package/dist/card.js CHANGED
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  Skeleton,
3
3
  SkeletonBlock
4
- } from "./chunk-NPM7IDYV.js";
5
- import "./chunk-XUKVQO6M.js";
4
+ } from "./chunk-TSFAAREV.js";
5
+ import "./chunk-6CSUVVFG.js";
6
6
  import {
7
7
  SkeletonSlot
8
- } from "./chunk-DKENCYHA.js";
8
+ } from "./chunk-MXGY2ENX.js";
9
9
  import {
10
10
  skeletonFill
11
- } from "./chunk-54HHEXXD.js";
11
+ } from "./chunk-VKN374SD.js";
12
12
 
13
13
  // src/card/Card.tsx
14
14
  import { forwardRef } from "react";
package/dist/card.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/card/Card.tsx","../src/card/utils.ts"],"sourcesContent":["import React, { forwardRef } from \"react\";\nimport { cn } from \"@mari-ui/core\";\nimport { Skeleton, SkeletonBlock } from \"../skeleton\";\nimport { skeletonFill } from \"../lib/skeleton\";\nimport { SkeletonSlot } from \"../lib/SkeletonSlot\";\nimport type { CardMetaProps, CardProps } from \"./types\";\nimport { cardPadding, getBaseClassname } from \"./utils\";\n\nexport type { CardProps, CardMetaProps };\n\n/**\n * Faz 13.6 — yapı ant.design Card'ından, görünüm kendi token'larımızdan.\n * Eski sürümdeki sorunlar:\n * - `hoverable` gölgeyi her zaman veriyordu (üzerine gelince değil).\n * - Kapak kartın yuvarlak köşelerinden taşıyor, altına keyfi `mb-4` boşluk\n * ekleniyordu. Artık kenardan kenara, üst köşeler karttan miras.\n * - Başlık uzun olunca `extra`'yı itiyordu; artık başlık kesilir (`truncate`).\n * - Gövde `flex-1` değildi — ızgarada eşit yükseklikli kartların alt\n * kısımları (footer/actions) hizalanmıyordu.\n * - `lg` `md` ile aynıydı; yükleme iskeleti iki gri çizgiden ibaretti.\n * Yeni: `actions`, `href` (link kart), `CardMeta`.\n *\n * Hook yok — sunucu bileşeni olarak render edilebilir.\n */\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n (\n {\n children,\n title,\n extra,\n cover,\n footer,\n actions,\n bordered = true,\n hoverable,\n skeleton = false,\n size = \"md\",\n inset,\n href,\n target,\n className,\n classNames,\n onClick,\n },\n ref\n ) => {\n // İskeletteyken kart gezinmez/tıklanmaz: henüz var olmayan bir kaydın\n // sayfasına gitmek ya da onClick'i veri yokken çağırmak yanlış.\n const isLink = !skeleton && Boolean(href);\n const isButton = !skeleton && !isLink && Boolean(onClick);\n const base = getBaseClassname({\n bordered,\n hoverable: !skeleton && (hoverable ?? isLink),\n interactive: isLink || isButton,\n size,\n inset,\n className,\n });\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onClick?.();\n }\n };\n\n const content = (\n <>\n {cover && (\n // Üst köşeleri karttan miras al — görsel yuvarlak kenardan taşmasın.\n // İskelette kapak kendi kutusunu (en-boy oranı) korur, içi parıltı olur.\n <div\n className={cn(\n \"overflow-hidden rounded-t-[inherit] [&_img]:block [&_img]:w-full [&_img]:object-cover\",\n skeleton && skeletonFill(true),\n classNames?.cover\n )}\n aria-hidden={skeleton || undefined}\n >\n {skeleton ? <div className=\"invisible\">{cover}</div> : cover}\n </div>\n )}\n\n {(title || extra) && (\n <div className={cn(\"flex items-center gap-3 border-b border-mari-border\", cardPadding.header(size), classNames?.header)}>\n {title && (\n <div className=\"min-w-0 flex-1 truncate font-heading font-semibold\">\n <SkeletonSlot on={skeleton} className=\"items-center\" placeholder={<SkeletonBlock active width=\"40%\" height=\"1rem\" radius=\"sm\" />}>\n {title}\n </SkeletonSlot>\n </div>\n )}\n {extra && (\n <div className=\"ml-auto flex shrink-0 items-center text-sm\">\n <SkeletonSlot on={skeleton} flow=\"flex\" className=\"items-center justify-items-end\" placeholder={<SkeletonBlock active width=\"3rem\" height=\"0.75rem\" radius=\"sm\" />}>\n {extra}\n </SkeletonSlot>\n </div>\n )}\n </div>\n )}\n\n <div className={cn(\"flex-1\", cardPadding.body(size), classNames?.body)}>\n <SkeletonSlot on={skeleton} placeholder={<Skeleton active title={false} paragraph={{ rows: 3 }} />}>\n {children}\n </SkeletonSlot>\n </div>\n\n {footer && (\n <div className={cn(\"border-t border-mari-border\", cardPadding.footer(size), classNames?.footer)}>\n <SkeletonSlot on={skeleton} className=\"items-center\" placeholder={<SkeletonBlock active width=\"45%\" height=\"0.75rem\" radius=\"sm\" />}>\n {footer}\n </SkeletonSlot>\n </div>\n )}\n\n {actions && actions.length > 0 && (\n <ul className={cn(\"flex divide-x divide-mari-border border-t border-mari-border\", classNames?.actions)}>\n {actions.map((action, i) => (\n <li key={i} className={cn(\"flex min-w-0 flex-1 items-center justify-center\", cardPadding.action(size))}>\n <SkeletonSlot on={skeleton} flow=\"flex\" className=\"place-items-center\" placeholder={<SkeletonBlock active width=\"2.5rem\" height=\"0.75rem\" radius=\"full\" />}>\n {action}\n </SkeletonSlot>\n </li>\n ))}\n </ul>\n )}\n </>\n );\n\n if (isLink) {\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n target={target}\n rel={target === \"_blank\" ? \"noopener noreferrer\" : undefined}\n className={cn(base, \"no-underline\")}\n >\n {content}\n </a>\n );\n }\n\n return (\n <div\n ref={ref}\n className={base}\n onClick={onClick}\n onKeyDown={isButton ? handleKeyDown : undefined}\n role={isButton ? \"button\" : undefined}\n tabIndex={isButton ? 0 : undefined}\n >\n {content}\n </div>\n );\n }\n);\n\nCard.displayName = \"Card\";\n\n/** ant.design `Card.Meta`: avatar + başlık + açıklama. */\nexport function CardMeta({ avatar, title, description, className }: Readonly<CardMetaProps>) {\n return (\n <div className={cn(\"flex min-w-0 gap-4\", className)}>\n {avatar && <div className=\"shrink-0\">{avatar}</div>}\n <div className=\"min-w-0 flex-1\">\n {title && <div className=\"truncate text-base font-semibold text-mari-foreground\">{title}</div>}\n {description && <div className=\"mt-1 text-sm text-mari-muted\">{description}</div>}\n </div>\n </div>\n );\n}\n","import { cn, type Size } from \"@mari-ui/core\";\n\n/**\n * Yapı ant.design Card'ından (başlık: min-height + yatay dolgu, 16px/600;\n * small: 38px başlık + 12px dolgu; default: 56px + 24px), görünüm kendi\n * token'larımızdan. Eskiden `lg` `md` ile birebir aynıydı — artık 32px.\n */\nconst BODY_PADDING: Record<Size, string> = { sm: \"p-3\", md: \"p-6\", lg: \"p-8\" };\nconst HEADER: Record<Size, string> = {\n sm: \"min-h-[2.375rem] px-3 text-sm\",\n md: \"min-h-14 px-6 text-base\",\n lg: \"min-h-16 px-8 text-lg\",\n};\nconst FOOTER_PADDING: Record<Size, string> = { sm: \"px-3 py-2\", md: \"px-6 py-4\", lg: \"px-8 py-5\" };\nconst ACTION_PADDING: Record<Size, string> = { sm: \"py-1.5\", md: \"py-3\", lg: \"py-3.5\" };\nconst RADIUS: Record<Size, string> = { sm: \"rounded-lg\", md: \"rounded-xl\", lg: \"rounded-xl\" };\n\nexport interface CardBaseClassOptions {\n bordered?: boolean;\n hoverable?: boolean;\n interactive?: boolean;\n size?: Size;\n inset?: boolean;\n className?: string;\n}\n\nexport function getBaseClassname({ bordered = true, hoverable, interactive, size = \"md\", inset, className }: CardBaseClassOptions): string {\n return cn(\n \"relative flex min-w-0 flex-col text-left text-mari-foreground\",\n RADIUS[size],\n inset ? \"bg-mari-surface-alt\" : \"bg-mari-surface\",\n (bordered || inset) && \"border border-mari-border\",\n // Eskiden `hoverable` gölgeyi HER ZAMAN veriyordu (`hover:` öneki yoktu).\n hoverable &&\n \"transition-[box-shadow,translate,border-color] duration-200 hover:shadow-mari-md motion-safe:hover:-translate-y-0.5\",\n interactive && \"cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-mari-ring\",\n className\n );\n}\n\nexport const cardPadding = {\n body: (size: Size = \"md\") => BODY_PADDING[size],\n header: (size: Size = \"md\") => HEADER[size],\n footer: (size: Size = \"md\") => FOOTER_PADDING[size],\n action: (size: Size = \"md\") => ACTION_PADDING[size],\n};\n"],"mappings":"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","names":["cn","cn"]}
1
+ {"version":3,"sources":["../src/card/Card.tsx","../src/card/utils.ts"],"sourcesContent":["import React, { forwardRef } from \"react\";\nimport { cn } from \"@mari-ui/core\";\nimport { Skeleton, SkeletonBlock } from \"../skeleton\";\nimport { skeletonFill } from \"../lib/skeleton\";\nimport { SkeletonSlot } from \"../lib/SkeletonSlot\";\nimport type { CardMetaProps, CardProps } from \"./types\";\nimport { cardPadding, getBaseClassname } from \"./utils\";\n\nexport type { CardProps, CardMetaProps };\n\n/**\n * Eski sürümdeki sorunlar:\n * - `hoverable` gölgeyi her zaman veriyordu (üzerine gelince değil).\n * - Kapak kartın yuvarlak köşelerinden taşıyor, altına keyfi `mb-4` boşluk\n * ekleniyordu. Artık kenardan kenara, üst köşeler karttan miras.\n * - Başlık uzun olunca `extra`'yı itiyordu; artık başlık kesilir (`truncate`).\n * - Gövde `flex-1` değildi — ızgarada eşit yükseklikli kartların alt\n * kısımları (footer/actions) hizalanmıyordu.\n * - `lg` `md` ile aynıydı; yükleme iskeleti iki gri çizgiden ibaretti.\n * Yeni: `actions`, `href` (link kart), `CardMeta`.\n *\n * Hook yok — sunucu bileşeni olarak render edilebilir.\n */\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n (\n {\n children,\n title,\n extra,\n cover,\n footer,\n actions,\n bordered = true,\n hoverable,\n skeleton = false,\n size = \"md\",\n inset,\n href,\n target,\n className,\n classNames,\n onClick,\n },\n ref\n ) => {\n // İskeletteyken kart gezinmez/tıklanmaz: henüz var olmayan bir kaydın\n // sayfasına gitmek ya da onClick'i veri yokken çağırmak yanlış.\n const isLink = !skeleton && Boolean(href);\n const isButton = !skeleton && !isLink && Boolean(onClick);\n const base = getBaseClassname({\n bordered,\n hoverable: !skeleton && (hoverable ?? isLink),\n interactive: isLink || isButton,\n size,\n inset,\n className,\n });\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n onClick?.();\n }\n };\n\n const content = (\n <>\n {cover && (\n // Üst köşeleri karttan miras al — görsel yuvarlak kenardan taşmasın.\n // İskelette kapak kendi kutusunu (en-boy oranı) korur, içi parıltı olur.\n <div\n className={cn(\n \"overflow-hidden rounded-t-[inherit] [&_img]:block [&_img]:w-full [&_img]:object-cover\",\n skeleton && skeletonFill(true),\n classNames?.cover\n )}\n aria-hidden={skeleton || undefined}\n >\n {skeleton ? <div className=\"invisible\">{cover}</div> : cover}\n </div>\n )}\n\n {(title || extra) && (\n <div className={cn(\"flex items-center gap-3 border-b border-mari-border\", cardPadding.header(size), classNames?.header)}>\n {title && (\n <div className=\"min-w-0 flex-1 truncate font-heading font-semibold\">\n <SkeletonSlot on={skeleton} className=\"items-center\" placeholder={<SkeletonBlock active width=\"40%\" height=\"1rem\" radius=\"sm\" />}>\n {title}\n </SkeletonSlot>\n </div>\n )}\n {extra && (\n <div className=\"ml-auto flex shrink-0 items-center text-sm\">\n <SkeletonSlot on={skeleton} flow=\"flex\" className=\"items-center justify-items-end\" placeholder={<SkeletonBlock active width=\"3rem\" height=\"0.75rem\" radius=\"sm\" />}>\n {extra}\n </SkeletonSlot>\n </div>\n )}\n </div>\n )}\n\n <div className={cn(\"flex-1\", cardPadding.body(size), classNames?.body)}>\n <SkeletonSlot on={skeleton} placeholder={<Skeleton active title={false} paragraph={{ rows: 3 }} />}>\n {children}\n </SkeletonSlot>\n </div>\n\n {footer && (\n <div className={cn(\"border-t border-mari-border\", cardPadding.footer(size), classNames?.footer)}>\n <SkeletonSlot on={skeleton} className=\"items-center\" placeholder={<SkeletonBlock active width=\"45%\" height=\"0.75rem\" radius=\"sm\" />}>\n {footer}\n </SkeletonSlot>\n </div>\n )}\n\n {actions && actions.length > 0 && (\n <ul className={cn(\"flex divide-x divide-mari-border border-t border-mari-border\", classNames?.actions)}>\n {actions.map((action, i) => (\n <li key={i} className={cn(\"flex min-w-0 flex-1 items-center justify-center\", cardPadding.action(size))}>\n <SkeletonSlot on={skeleton} flow=\"flex\" className=\"place-items-center\" placeholder={<SkeletonBlock active width=\"2.5rem\" height=\"0.75rem\" radius=\"full\" />}>\n {action}\n </SkeletonSlot>\n </li>\n ))}\n </ul>\n )}\n </>\n );\n\n if (isLink) {\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n target={target}\n rel={target === \"_blank\" ? \"noopener noreferrer\" : undefined}\n className={cn(base, \"no-underline\")}\n >\n {content}\n </a>\n );\n }\n\n return (\n <div\n ref={ref}\n className={base}\n onClick={onClick}\n onKeyDown={isButton ? handleKeyDown : undefined}\n role={isButton ? \"button\" : undefined}\n tabIndex={isButton ? 0 : undefined}\n >\n {content}\n </div>\n );\n }\n);\n\nCard.displayName = \"Card\";\n\n/*\n * ant.design `Card.Meta`: avatar + başlık + açıklama.\n */\n/** Kart içinde avatar, başlık ve açıklamadan oluşan satır. */\nexport function CardMeta({ avatar, title, description, className }: Readonly<CardMetaProps>) {\n return (\n <div className={cn(\"flex min-w-0 gap-4\", className)}>\n {avatar && <div className=\"shrink-0\">{avatar}</div>}\n <div className=\"min-w-0 flex-1\">\n {title && <div className=\"truncate text-base font-semibold text-mari-foreground\">{title}</div>}\n {description && <div className=\"mt-1 text-sm text-mari-muted\">{description}</div>}\n </div>\n </div>\n );\n}\n","import { cn, type Size } from \"@mari-ui/core\";\n\n/*\n * Yapı ant.design Card'ından (başlık: min-height + yatay dolgu, 16px/600;\n * small: 38px başlık + 12px dolgu; default: 56px + 24px), görünüm kendi\n * token'larımızdan. Eskiden `lg` `md` ile birebir aynıydı — artık 32px.\n */\nconst BODY_PADDING: Record<Size, string> = { sm: \"p-3\", md: \"p-6\", lg: \"p-8\" };\nconst HEADER: Record<Size, string> = {\n sm: \"min-h-[2.375rem] px-3 text-sm\",\n md: \"min-h-14 px-6 text-base\",\n lg: \"min-h-16 px-8 text-lg\",\n};\nconst FOOTER_PADDING: Record<Size, string> = { sm: \"px-3 py-2\", md: \"px-6 py-4\", lg: \"px-8 py-5\" };\nconst ACTION_PADDING: Record<Size, string> = { sm: \"py-1.5\", md: \"py-3\", lg: \"py-3.5\" };\nconst RADIUS: Record<Size, string> = { sm: \"rounded-lg\", md: \"rounded-xl\", lg: \"rounded-xl\" };\n\nexport interface CardBaseClassOptions {\n bordered?: boolean;\n hoverable?: boolean;\n interactive?: boolean;\n size?: Size;\n inset?: boolean;\n className?: string;\n}\n\nexport function getBaseClassname({ bordered = true, hoverable, interactive, size = \"md\", inset, className }: CardBaseClassOptions): string {\n return cn(\n \"relative flex min-w-0 flex-col text-left text-mari-foreground\",\n RADIUS[size],\n inset ? \"bg-mari-surface-alt\" : \"bg-mari-surface\",\n (bordered || inset) && \"border border-mari-border\",\n // Eskiden `hoverable` gölgeyi HER ZAMAN veriyordu (`hover:` öneki yoktu).\n hoverable &&\n \"transition-[box-shadow,translate,border-color] duration-200 hover:shadow-mari-md motion-safe:hover:-translate-y-0.5\",\n interactive && \"cursor-pointer focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-mari-ring\",\n className\n );\n}\n\nexport const cardPadding = {\n body: (size: Size = \"md\") => BODY_PADDING[size],\n header: (size: Size = \"md\") => HEADER[size],\n footer: (size: Size = \"md\") => FOOTER_PADDING[size],\n action: (size: Size = \"md\") => ACTION_PADDING[size],\n};\n"],"mappings":"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","names":["cn","cn"]}