@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
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  bgSolidClass,
3
3
  textSolidContrastClass
4
- } from "./chunk-IP2J3BWY.js";
4
+ } from "./chunk-6AMBZXZJ.js";
5
5
  import {
6
6
  skeletonFill
7
- } from "./chunk-54HHEXXD.js";
7
+ } from "./chunk-VKN374SD.js";
8
8
 
9
9
  // src/badge/Badge.tsx
10
10
  import { cn } from "@mari-ui/core";
@@ -76,4 +76,4 @@ export {
76
76
  Badge,
77
77
  StatusBadge
78
78
  };
79
- //# sourceMappingURL=chunk-ZXYQ2ZPR.js.map
79
+ //# sourceMappingURL=chunk-TEMTIMAH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/badge/Badge.tsx"],"sourcesContent":["import React from \"react\";\nimport { cn, type ColorRole } from \"@mari-ui/core\";\nimport { bgSolidClass, textSolidContrastClass } from \"../lib/colorClasses\";\nimport { skeletonFill } from \"../lib/skeleton\";\nimport type { BadgeProps, StatusBadgeProps } from \"./types\";\n\nexport type { BadgeProps, StatusBadgeProps };\n\n/** Kabarcık boyutu rem (px yasak kuralı): sm 16 / md 20px, metin 10 / 12px. */\nconst BUBBLE_SIZE = { sm: \"h-4 min-w-4 px-1 text-[0.625rem]\", md: \"h-5 min-w-5 px-1.5 text-xs\" } as const;\nconst DOT_SIZE = { sm: \"size-1.5\", md: \"size-2\" } as const;\n\nconst toLength = (v: number | string) => (typeof v === \"number\" ? `${v}px` : v);\n\nfunction displayCount(count: BadgeProps[\"count\"], overflowCount: number): string | null {\n if (count == null || count === \"\") return null;\n if (typeof count === \"number\") return count > overflowCount ? `${overflowCount}+` : String(count);\n return count;\n}\n\n/*\n * yapı ant.design Badge'den. Bir öğenin (bildirim zili, avatar)\n * köşesinde sayı ya da nokta; `children` yoksa satır içinde tek başına.\n */\n/**\n * Erişilebilirlik: kabarcık görseldir (`aria-hidden`) — sarılan düğmenin\n * yanında ayrı bir \"3\" okunması anlamsız olurdu. Sayı ya `label` ile gizli\n * metin olarak verilir ya da (daha iyisi) düğmenin kendi adına katılır.\n * Kabarcığın etrafında yüzey renginde halka: avatarın/ikonun üstünde ayrışsın.\n */\nexport function Badge({\n count,\n overflowCount = 99,\n showZero = false,\n dot = false,\n color = \"error\",\n size = \"md\",\n label,\n offset,\n children,\n className,\n skeleton = false,\n}: Readonly<BadgeProps>) {\n const text = displayCount(count, overflowCount);\n const hidden = !dot && (text === null || (count === 0 && !showZero));\n const standalone = children === undefined;\n\n const bubble = hidden ? null : (\n <span\n aria-hidden\n data-badge=\"\"\n className={cn(\n \"inline-flex shrink-0 items-center justify-center rounded-full font-semibold leading-none tabular-nums whitespace-nowrap\",\n dot ? DOT_SIZE[size] : BUBBLE_SIZE[size],\n skeleton ? cn(skeletonFill(true), \"text-transparent\") : cn(bgSolidClass[color], textSolidContrastClass[color]),\n !standalone && \"absolute right-0 top-0 z-10 translate-x-1/2 -translate-y-1/2 ring-2 ring-mari-surface\"\n )}\n style={offset ? { marginRight: `calc(${toLength(offset[0])} * -1)`, marginTop: toLength(offset[1]) } : undefined}\n >\n {dot ? null : text}\n </span>\n );\n\n const srText = label && !hidden && !skeleton ? <span className=\"sr-only\">{label}</span> : null;\n\n if (standalone) {\n return (\n <span className={cn(\"inline-flex\", className)}>\n {bubble}\n {srText}\n </span>\n );\n }\n return (\n <span className={cn(\"relative inline-flex\", className)}>\n {children}\n {bubble}\n {srText}\n </span>\n );\n}\n\nconst STATUS_DOT: Record<ColorRole, string> = bgSolidClass;\n\n/**\n * Durum rozeti: renkli nokta + metin (tablo satırında \"Aktif\", \"Beklemede\").\n * Renk tek başına anlam taşımaz (renk körlüğü) — metin her zaman görünür.\n */\nexport function StatusBadge({ color = \"neutral\", children, processing = false, className, skeleton = false }: Readonly<StatusBadgeProps>) {\n return (\n <span className={cn(\"inline-flex items-center gap-2 text-sm text-mari-foreground\", className)} aria-hidden={skeleton || undefined}>\n <span className=\"relative flex size-2 shrink-0\">\n {processing && !skeleton && (\n <span aria-hidden className={cn(\"absolute inset-0 animate-ping rounded-full opacity-60 motion-reduce:hidden\", STATUS_DOT[color])} />\n )}\n <span aria-hidden className={cn(\"relative size-2 rounded-full\", skeleton ? skeletonFill(true) : STATUS_DOT[color])} />\n </span>\n <span className={cn(skeleton && cn(\"rounded-sm text-transparent\", skeletonFill(true)))}>{children}</span>\n </span>\n );\n}\n"],"mappings":";;;;;;;;;AACA,SAAS,UAA0B;AA+C/B,cAmBE,YAnBF;AAvCJ,IAAM,cAAc,EAAE,IAAI,oCAAoC,IAAI,6BAA6B;AAC/F,IAAM,WAAW,EAAE,IAAI,YAAY,IAAI,SAAS;AAEhD,IAAM,WAAW,CAAC,MAAwB,OAAO,MAAM,WAAW,GAAG,CAAC,OAAO;AAE7E,SAAS,aAAa,OAA4B,eAAsC;AACtF,MAAI,SAAS,QAAQ,UAAU,GAAI,QAAO;AAC1C,MAAI,OAAO,UAAU,SAAU,QAAO,QAAQ,gBAAgB,GAAG,aAAa,MAAM,OAAO,KAAK;AAChG,SAAO;AACT;AAYO,SAAS,MAAM;AAAA,EACpB;AAAA,EACA,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AACb,GAAyB;AACvB,QAAM,OAAO,aAAa,OAAO,aAAa;AAC9C,QAAM,SAAS,CAAC,QAAQ,SAAS,QAAS,UAAU,KAAK,CAAC;AAC1D,QAAM,aAAa,aAAa;AAEhC,QAAM,SAAS,SAAS,OACtB;AAAA,IAAC;AAAA;AAAA,MACC,eAAW;AAAA,MACX,cAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA,MAAM,SAAS,IAAI,IAAI,YAAY,IAAI;AAAA,QACvC,WAAW,GAAG,aAAa,IAAI,GAAG,kBAAkB,IAAI,GAAG,aAAa,KAAK,GAAG,uBAAuB,KAAK,CAAC;AAAA,QAC7G,CAAC,cAAc;AAAA,MACjB;AAAA,MACA,OAAO,SAAS,EAAE,aAAa,QAAQ,SAAS,OAAO,CAAC,CAAC,CAAC,UAAU,WAAW,SAAS,OAAO,CAAC,CAAC,EAAE,IAAI;AAAA,MAEtG,gBAAM,OAAO;AAAA;AAAA,EAChB;AAGF,QAAM,SAAS,SAAS,CAAC,UAAU,CAAC,WAAW,oBAAC,UAAK,WAAU,WAAW,iBAAM,IAAU;AAE1F,MAAI,YAAY;AACd,WACE,qBAAC,UAAK,WAAW,GAAG,eAAe,SAAS,GACzC;AAAA;AAAA,MACA;AAAA,OACH;AAAA,EAEJ;AACA,SACE,qBAAC,UAAK,WAAW,GAAG,wBAAwB,SAAS,GAClD;AAAA;AAAA,IACA;AAAA,IACA;AAAA,KACH;AAEJ;AAEA,IAAM,aAAwC;AAMvC,SAAS,YAAY,EAAE,QAAQ,WAAW,UAAU,aAAa,OAAO,WAAW,WAAW,MAAM,GAA+B;AACxI,SACE,qBAAC,UAAK,WAAW,GAAG,+DAA+D,SAAS,GAAG,eAAa,YAAY,QACtH;AAAA,yBAAC,UAAK,WAAU,iCACb;AAAA,oBAAc,CAAC,YACd,oBAAC,UAAK,eAAW,MAAC,WAAW,GAAG,8EAA8E,WAAW,KAAK,CAAC,GAAG;AAAA,MAEpI,oBAAC,UAAK,eAAW,MAAC,WAAW,GAAG,gCAAgC,WAAW,aAAa,IAAI,IAAI,WAAW,KAAK,CAAC,GAAG;AAAA,OACtH;AAAA,IACA,oBAAC,UAAK,WAAW,GAAG,YAAY,GAAG,+BAA+B,aAAa,IAAI,CAAC,CAAC,GAAI,UAAS;AAAA,KACpG;AAEJ;","names":[]}
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  getShapeClasses,
3
3
  getSizeStyle
4
- } from "./chunk-XUKVQO6M.js";
4
+ } from "./chunk-6CSUVVFG.js";
5
5
  import {
6
6
  skeletonFill
7
- } from "./chunk-54HHEXXD.js";
7
+ } from "./chunk-VKN374SD.js";
8
8
 
9
9
  // src/skeleton/Skeleton.tsx
10
10
  import { cn as cn2 } from "@mari-ui/core";
@@ -142,4 +142,4 @@ export {
142
142
  SkeletonButton,
143
143
  SkeletonInput
144
144
  };
145
- //# sourceMappingURL=chunk-NPM7IDYV.js.map
145
+ //# sourceMappingURL=chunk-TSFAAREV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/skeleton/Skeleton.tsx","../src/skeleton/utils.ts","../src/skeleton/SkeletonButton.tsx","../src/skeleton/SkeletonInput.tsx"],"sourcesContent":["import React from \"react\";\nimport { cn } from \"@mari-ui/core\";\nimport type { SkeletonAvatarProps, SkeletonBlockProps, SkeletonParagraphProps, SkeletonProps, SkeletonTitleProps } from \"./types\";\nimport { getAvatarShapeClasses, getAvatarSizeStyle, getLineClass, skeletonFill, widthToStyle } from \"./utils\";\n\nexport type { SkeletonProps };\n\n/** İç içe ternary yerine ayrık fonksiyon. */\nfunction resolveParagraphWidths(width: SkeletonParagraphProps[\"width\"], rows: number): (string | number | undefined)[] {\n if (Array.isArray(width)) return width;\n if (width !== undefined) return [...Array(rows - 1).fill(undefined), width];\n return [];\n}\n\n/** İç içe ternary yerine ayrık fonksiyon. */\nfunction resolveFallbackWidthClass(explicitWidth: string | number | undefined, isLastRow: boolean): string | undefined {\n if (explicitWidth !== undefined) return undefined;\n return isLastRow ? \"w-3/5\" : \"w-full\";\n}\n\n// Hook yok, browser API yok — saf sunum, \"use client\" gerekmiyor.\nexport function Skeleton({\n active = false,\n label,\n avatar = false,\n loading,\n paragraph = true,\n round = false,\n title = true,\n className,\n children,\n}: Readonly<SkeletonProps>) {\n if (loading === false) return <>{children}</>;\n\n const avatarProps: SkeletonAvatarProps = typeof avatar === \"boolean\" ? {} : avatar;\n const titleProps: SkeletonTitleProps = typeof title === \"boolean\" ? {} : title;\n const paragraphProps: SkeletonParagraphProps = typeof paragraph === \"boolean\" ? {} : paragraph;\n\n const rows = paragraphProps.rows ?? 3;\n const paragraphWidths = resolveParagraphWidths(paragraphProps.width, rows);\n\n const avatarSize = avatarProps.size ?? \"md\";\n\n return (\n // Faz 13.6: eskiden `animate-pulse` `active`ten bağımsız HER ZAMAN vardı.\n <div\n className={className}\n {...(label ? { role: \"status\", \"aria-label\": label, \"aria-busy\": true } : { \"aria-hidden\": true })}\n >\n <div className=\"flex gap-4\">\n {avatar && (\n <div\n className={cn(getAvatarShapeClasses(avatarProps.shape ?? \"circle\", avatarSize), skeletonFill(avatarProps.active ?? active))}\n style={getAvatarSizeStyle(avatarSize)}\n />\n )}\n <div className=\"min-w-0 flex-1\">\n {title && (\n <div\n className={getLineClass(round, cn(\"h-4\", titleProps.width === undefined && \"w-2/5\"), active)}\n style={widthToStyle(titleProps.width)}\n />\n )}\n {paragraph && (\n <div className={cn(\"space-y-2.5\", title && \"mt-4\")}>\n {Array.from({ length: rows }).map((_, i) => {\n const explicitWidth = paragraphWidths[i];\n const fallbackWidthClass = resolveFallbackWidthClass(explicitWidth, i === rows - 1);\n return (\n <div\n key={i}\n className={getLineClass(round, cn(\"h-3\", fallbackWidthClass), active)}\n style={widthToStyle(explicitWidth)}\n />\n );\n })}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\n/**\n * Serbest şekilli iskelet parçası — kendi yerleşiminizi (kart ızgarası, tablo\n * satırı) gerçek bileşenin ölçüleriyle kurmak için. Görsel; `aria-hidden`.\n */\nexport function SkeletonBlock({ width, height = \"1rem\", radius = \"md\", active = false, className }: Readonly<SkeletonBlockProps>) {\n const radiusClass = { none: \"rounded-none\", sm: \"rounded-sm\", md: \"rounded-md\", lg: \"rounded-lg\", xl: \"rounded-xl\", full: \"rounded-full\" }[radius];\n return (\n <div\n aria-hidden\n className={cn(\"shrink-0\", skeletonFill(active), radiusClass, width === undefined && \"w-full\", className)}\n style={{ width: typeof width === \"number\" ? `${width}px` : width, height: typeof height === \"number\" ? `${height}px` : height }}\n />\n );\n}\n","import type React from \"react\";\nimport { cn, type Size } from \"@mari-ui/core\";\nimport type { SkeletonButtonShape } from \"./types\";\nimport { skeletonFill } from \"../lib/skeleton\";\n\nexport { getShapeClasses as getAvatarShapeClasses, getSizeStyle as getAvatarSizeStyle } from \"../avatar/utils\";\n\n/*\n * iskelet parçalarının geometrisi GERÇEK bileşenlerden gelir ki\n * yüklenince zıplamasın. Eskiden kendi tabloları vardı ve kaymıştı:\n * - Avatar iskeleti 32/48/64px, varsayılanı yuvarlatılmış kareydi; Avatar\n * 24/32/40px ve varsayılanı daire → artık `avatar/utils`'in kendisi.\n * - Button/Input `sm` iskeleti `rounded-md`, gerçeği `rounded-sm` (lib\n * `sizeClass`).\n * - `SkeletonButton shape=\"circle\"` 80×32 bir hap çiziyordu; Button'ın\n * `circle`'ı kare-daire.\n */\n/**\n * Sabit enum olmayan (tüketici verisi) genişlikler class değil inline stil —\n * Tailwind derleme zamanında olası her değeri üretemez.\n */\n\n/** Lib `sizeClass` ile aynı yükseklik + radius (Button, Input). */\nconst CONTROL_BOX_CLASS: Record<Size, string> = {\n sm: \"h-6 rounded-sm\",\n md: \"h-8 rounded-md\",\n lg: \"h-10 rounded-md\",\n};\n\nexport const INPUT_SIZE_CLASS: Record<Size, string> = {\n sm: cn(CONTROL_BOX_CLASS.sm, \"w-full\"),\n md: cn(CONTROL_BOX_CLASS.md, \"w-full\"),\n lg: cn(CONTROL_BOX_CLASS.lg, \"w-full\"),\n};\n\nconst BUTTON_WIDTH_CLASS: Record<Size, string> = { sm: \"w-16\", md: \"w-20\", lg: \"w-24\" };\n/** Button `circle` = kare-daire: genişlik = yükseklik. */\nconst CIRCLE_SIZE_CLASS: Record<Size, string> = { sm: \"size-6\", md: \"size-8\", lg: \"size-10\" };\n\n/** Button'ın `getShapeClasses`'ıyla aynı şekiller (`round` = eski ad, `pill`). */\nexport function getButtonSkeletonClass(size: Size, shape: SkeletonButtonShape, block: boolean): string {\n if (shape === \"circle\") return cn(CIRCLE_SIZE_CLASS[size], \"rounded-full\");\n return cn(\n CONTROL_BOX_CLASS[size],\n block ? \"w-full\" : BUTTON_WIDTH_CLASS[size],\n (shape === \"pill\" || shape === \"round\") && \"rounded-full\",\n shape === \"square\" && \"rounded-none\"\n );\n}\n\nexport function widthToStyle(width: number | string | undefined): React.CSSProperties | undefined {\n if (width === undefined) return undefined;\n return { width: typeof width === \"number\" ? `${width}px` : width };\n}\n\nexport { skeletonFill };\n\nexport function getLineClass(round: boolean | undefined, extra?: string, active?: boolean): string {\n return cn(skeletonFill(active), round ? \"rounded-full\" : \"rounded-md\", extra);\n}\n","import React from \"react\";\nimport { cn, type Size } from \"@mari-ui/core\";\nimport type { SkeletonButtonShape } from \"./types\";\nimport { getButtonSkeletonClass, skeletonFill } from \"./utils\";\n\nexport interface SkeletonButtonProps {\n active?: boolean;\n block?: boolean;\n /** Button'ın `shape`'iyle aynı: `default` / `pill` / `circle` / `square` (`round` = `pill`'in eski adı). */\n shape?: SkeletonButtonShape;\n size?: Size;\n className?: string;\n}\n\n// Hook yok, browser API yok — saf sunum, \"use client\" gerekmiyor.\nexport function SkeletonButton({ active = false, block = false, shape = \"default\", size = \"md\", className }: Readonly<SkeletonButtonProps>) {\n return <div aria-hidden className={cn(skeletonFill(active), getButtonSkeletonClass(size, shape, block), className)} />;\n}\n","import React from \"react\";\nimport { cn, type Size } from \"@mari-ui/core\";\nimport { INPUT_SIZE_CLASS, skeletonFill } from \"./utils\";\n\nexport interface SkeletonInputProps {\n active?: boolean;\n size?: Size;\n className?: string;\n}\n\n// Hook yok, browser API yok — saf sunum, \"use client\" gerekmiyor.\nexport function SkeletonInput({ active = false, size = \"md\", className }: Readonly<SkeletonInputProps>) {\n return (\n <div aria-hidden className={cn(skeletonFill(active), INPUT_SIZE_CLASS[size], className)} />\n );\n}\n"],"mappings":"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","names":["cn","cn","cn","jsx","cn","cn","jsx","cn"]}
@@ -17,4 +17,4 @@ export {
17
17
  skeletonFill,
18
18
  skeletonBoxProps
19
19
  };
20
- //# sourceMappingURL=chunk-54HHEXXD.js.map
20
+ //# sourceMappingURL=chunk-VKN374SD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/skeleton.ts"],"sourcesContent":["import { cn } from \"@mari-ui/core\";\n\n/**\n * Component'lerin ortak `skeleton` sözleşmesi.\n *\n * `loading` ≠ `skeleton`: `loading` = bir EYLEM sürüyor (Button spinner'ı,\n * component etkileşimli kalır ya da disabled olur). `skeleton` = VERİ henüz\n * yok; component kendi geometrisinde (aynı boyut + radius sınıfları) içeriksiz\n * bir yer tutucu çizer → yüklenince layout zıplamaz.\n *\n * Yer tutucu ekran okuyucudan gizlidir; \"yükleniyor\" duyurusu tüketicinin\n * işidir (yüklenen bölgeye `aria-busy`, ya da tek bir `<Skeleton label>`).\n */\nexport interface SkeletonableProps {\n /** Veri gelene kadar component'in kendi boyutunda iskelet çizer. */\n skeleton?: boolean;\n}\n\n/**\n * Tek kaynak dolgu: `active` → parıltı (gradyan kayar), değilse düz.\n * `prefers-reduced-motion`da parıltı durur.\n */\nexport function skeletonFill(active: boolean | undefined): string {\n return active\n ? \"bg-linear-to-r from-mari-border/70 via-mari-surface-alt to-mari-border/70 bg-[length:400%_100%] animate-[mari-skeleton-shimmer_1.4s_ease_infinite] motion-reduce:animate-none\"\n : \"bg-mari-border/70\";\n}\n\n/**\n * Bir component'in `skeleton` dalında kök elemana yayılacak prop'lar.\n * `className`e component'in GERÇEK boyut/radius sınıflarını verin (örn.\n * `sizeClass[size]`) ki iskelet ile yüklenmiş hali birebir aynı kutuyu kaplasın.\n */\nexport function skeletonBoxProps(className?: string) {\n return {\n \"aria-hidden\": true as const,\n \"data-skeleton\": \"\",\n // Dolgu ve şeffaf metin SONDA: `className` bir metin rengi (ör. Typography'nin\n // `text-mari-foreground`'u) taşısa bile twMerge onları ezmesin.\n className: cn(\"pointer-events-none select-none\", className, skeletonFill(true), \"text-transparent\"),\n };\n}\n"],"mappings":";AAAA,SAAS,UAAU;AAsBZ,SAAS,aAAa,QAAqC;AAChE,SAAO,SACH,kLACA;AACN;AAOO,SAAS,iBAAiB,WAAoB;AACnD,SAAO;AAAA,IACL,eAAe;AAAA,IACf,iBAAiB;AAAA;AAAA;AAAA,IAGjB,WAAW,GAAG,mCAAmC,WAAW,aAAa,IAAI,GAAG,kBAAkB;AAAA,EACpG;AACF;","names":[]}
@@ -2,16 +2,16 @@
2
2
 
3
3
  import {
4
4
  computePanelPosition
5
- } from "./chunk-NS7FKOFI.js";
5
+ } from "./chunk-NYXU5EFE.js";
6
6
  import {
7
7
  bgSolidClass,
8
8
  bgSubtleClass,
9
9
  textSolidContrastClass,
10
10
  textSubtleContrastClass
11
- } from "./chunk-IP2J3BWY.js";
11
+ } from "./chunk-6AMBZXZJ.js";
12
12
  import {
13
13
  skeletonFill
14
- } from "./chunk-54HHEXXD.js";
14
+ } from "./chunk-VKN374SD.js";
15
15
 
16
16
  // src/tooltip/Tooltip.tsx
17
17
  import React, { isValidElement, useCallback, useEffect, useId, useLayoutEffect, useRef, useState } from "react";
@@ -220,4 +220,4 @@ function Tooltip({
220
220
  export {
221
221
  Tooltip
222
222
  };
223
- //# sourceMappingURL=chunk-ZMA7BT2L.js.map
223
+ //# sourceMappingURL=chunk-XWBJPA3D.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tooltip/Tooltip.tsx","../src/tooltip/utils.ts"],"sourcesContent":["\"use client\";\n\nimport React, { isValidElement, useCallback, useEffect, useId, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"@mari-ui/core\";\nimport { computePanelPosition, type Side } from \"../lib/floating\";\nimport { skeletonFill } from \"../lib/skeleton\";\nimport type { TooltipProps } from \"./types\";\nimport { getArrowClasses, getVariantClasses } from \"./utils\";\n\nexport type { TooltipProps };\n\n/** Tetikleyiciyle balon arası (px) ve balonun ekran kenarından en az uzaklığı. */\nconst GAP_PX = 8;\nconst EDGE_PX = 8;\n/** Balondan/tetikleyiciden çıkınca kapanma gecikmesi — fare aradaki boşluğu geçebilsin. */\nconst CLOSE_DELAY_MS = 120;\n/** Ok, balonun hizalandığı kenardan bu kadar içeride durur (radius'a binmesin). */\nconst ARROW_INSET_PX = 12;\n\nconst ARROW_SIDE_CLASS: Record<Side, string> = {\n top: \"top-full -translate-x-1/2 -translate-y-1/2\",\n bottom: \"bottom-full -translate-x-1/2 translate-y-1/2\",\n left: \"left-full -translate-x-1/2 -translate-y-1/2\",\n right: \"right-full translate-x-1/2 -translate-y-1/2\",\n};\n\ninterface Position {\n top: number;\n left: number;\n side: Side;\n arrowOffset: number;\n}\n\n/**\n * Faz 15 (yeniden yazım):\n * - Konum `lib/floating`'deki `computePanelPosition` ile (Dropdown'la ORTAK):\n * 12 yerleşim, yer yoksa karşı yöne döner, ekran içinde kıstırılır. Eskiden\n * 4 sabit yön + kıstırma yoktu: mobilde 672px'e kadar genişleyen balon\n * ekrandan taşıyor, üstteki bir tetikleyicide ekranın dışına çıkıyordu.\n * - Balonun ÜZERİNE gelinebilir (WCAG 1.4.13): fare tetikleyiciden balona\n * geçerken kapanmaz; kısa bir kapanma gecikmesi aradaki boşluğu köprüler.\n * - Fareyle açılış `openDelay` kadar gecikir (üzerinden geçerken titremesin);\n * odakla açılış anlık.\n *\n * Önceki kararlar korunur: `document.body`'e portal + `fixed` (kaydırılabilir\n * kapsayıcıda kırpılmaz), `role=\"tooltip\"` + tetikleyiciye `aria-describedby`,\n * Escape kapatır, sarmalayıcı `self-start` (flex'te gerilmesin).\n */\ntype ElRef = React.RefObject<HTMLSpanElement | null>;\n\n/** Açık/kapalı durumu: fare gecikmeleri (hover) ya da dışarı tıklama (click). */\nfunction useVisibility(alwaysVisible: boolean | undefined, openOn: \"hover\" | \"click\", wrapperRef: ElRef, bubbleRef: ElRef) {\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const [visible, setVisible] = useState(alwaysVisible ?? false);\n\n const clearTimer = () => clearTimeout(timerRef.current);\n const open = useCallback((delay: number) => {\n clearTimeout(timerRef.current);\n if (delay <= 0) setVisible(true);\n else timerRef.current = setTimeout(() => setVisible(true), delay);\n }, []);\n const close = useCallback(() => {\n clearTimeout(timerRef.current);\n if (!alwaysVisible) timerRef.current = setTimeout(() => setVisible(false), CLOSE_DELAY_MS);\n }, [alwaysVisible]);\n const closeNow = () => {\n clearTimer();\n if (!alwaysVisible) setVisible(false);\n };\n\n useEffect(() => () => clearTimeout(timerRef.current), []);\n\n // `openOn=\"click\"`: dışarı tıklamak kapatır (tetikleyici ve balon hariç).\n useEffect(() => {\n if (openOn !== \"click\" || !visible) return;\n const onPointerDown = (event: PointerEvent) => {\n const target = event.target as Node;\n if (wrapperRef.current?.contains(target) || bubbleRef.current?.contains(target)) return;\n setVisible(false);\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n return () => document.removeEventListener(\"pointerdown\", onPointerDown);\n }, [openOn, visible, wrapperRef, bubbleRef]);\n\n return { visible, setVisible, open, close, closeNow, clearTimer };\n}\n\n/** Görünürken balonun sayfa konumunu her karede takip eder. */\nfunction useTrackedPosition(showTooltip: boolean, wrapperRef: ElRef, bubbleRef: ElRef, placement: TooltipProps[\"placement\"] & string) {\n const [position, setPosition] = useState<Position | null>(null);\n // Konum: balon önce görünmez çizilir, boyutu ölçülür, sonra yerleştirilir.\n const updatePosition = useCallback(() => {\n const anchor = wrapperRef.current?.getBoundingClientRect();\n const bubble = bubbleRef.current;\n if (!anchor || !bubble) return;\n // Tetikleyici görünür alanın DIŞINDAYSA balon gizlenir. Aksi halde kıstırma\n // onu ekran kenarına yapıştırıyor, tetikleyiciden kopuk havada asılı\n // kalıyordu (Storybook docs'ta aşağıdaki `alwaysVisible` story'ler).\n const offscreen = anchor.bottom < 0 || anchor.top > window.innerHeight || anchor.right < 0 || anchor.left > window.innerWidth;\n if (offscreen) {\n setPosition(null);\n return;\n }\n const next = computePanelPosition(\n { top: anchor.top, left: anchor.left, width: anchor.width, height: anchor.height },\n { width: bubble.offsetWidth, height: bubble.offsetHeight },\n placement,\n { width: window.innerWidth, height: window.innerHeight },\n GAP_PX,\n EDGE_PX,\n { inset: ARROW_INSET_PX, pointAtCenter: true }\n );\n // SAYFA koordinatı (`absolute`): pencere kaydırılınca balonu tarayıcı\n // kendisi taşır. Eskiden `fixed` + her karede JS ile yeniden konum vardı —\n // bir kare geriden geldiği için kaydırırken balonlar titriyor, komşu\n // satırlara biniyordu (kullanıcı bulgusu, docs sayfası).\n const pageTop = next.top + window.scrollY;\n const pageLeft = next.left + window.scrollX;\n setPosition((prev) =>\n prev && prev.top === pageTop && prev.left === pageLeft && prev.side === next.side && prev.arrowOffset === next.arrowOffset\n ? prev\n : { ...next, top: pageTop, left: pageLeft }\n );\n }, [placement, wrapperRef, bubbleRef]);\n\n useLayoutEffect(() => {\n if (!showTooltip) {\n setPosition(null);\n return;\n }\n // Görünür olduğu sürece HER KAREDE takip: yalnızca scroll/resize dinlemek\n // yetmiyordu — sayfa düzeni sonradan değişince (ör. Storybook docs'ta\n // story'ler geç yerleşince) `alwaysVisible` balonlar eski koordinatta\n // asılı kalıyordu. Konum değişmediyse state güncellenmez (render yok).\n let frame = 0;\n const tick = () => {\n updatePosition();\n frame = requestAnimationFrame(tick);\n };\n tick();\n return () => cancelAnimationFrame(frame);\n }, [showTooltip, updatePosition]);\n\n return position;\n}\n\n/** Tetikleyiciye `aria-describedby` (açıkken) ve tıklamalı modda `aria-expanded` ekler. */\nfunction decorateTrigger(trigger: React.ReactNode, showTooltip: boolean, tooltipId: string, isClick: boolean): React.ReactNode {\n if (!isValidElement<{ \"aria-describedby\"?: string; \"aria-expanded\"?: boolean }>(trigger)) return trigger;\n const extra: Record<string, unknown> = {};\n if (showTooltip) extra[\"aria-describedby\"] = [trigger.props[\"aria-describedby\"], tooltipId].filter(Boolean).join(\" \");\n // Tıklamalı modda tetikleyici bir aç/kapa düğmesidir — durumunu duyurur.\n if (isClick) extra[\"aria-expanded\"] = showTooltip;\n return React.cloneElement(trigger, extra);\n}\n\ninterface TooltipBubbleProps {\n bubbleRef: ElRef;\n id: string;\n position: Position | null;\n skeleton: boolean;\n content: React.ReactNode;\n color: NonNullable<TooltipProps[\"color\"]>;\n variant: NonNullable<TooltipProps[\"variant\"]>;\n className?: string;\n style?: React.CSSProperties;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n}\n\nfunction TooltipBubble({ bubbleRef, id, position, skeleton, content, color, variant, className, style, onMouseEnter, onMouseLeave }: Readonly<TooltipBubbleProps>) {\n const side = position?.side ?? \"top\";\n const vertical = side === \"top\" || side === \"bottom\";\n return (\n <span\n ref={bubbleRef}\n role=\"tooltip\"\n id={id}\n aria-busy={skeleton || undefined}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n className={cn(\n // Boyutlar ant.design'ın gerçek Tooltip'inden: padding 6px 8px,\n // radius 6px, line-height 22px. Genişlik en çok 20rem ve HİÇBİR ZAMAN\n // ekran genişliği − 2×kenar payından fazla değil (mobilde taşmaz).\n \"absolute z-mari-tooltip w-max max-w-[min(20rem,calc(100vw-1rem))] rounded-md px-2 py-1.5 text-sm leading-[1.375rem] text-wrap\",\n // Yalnızca solma: ölçek animasyonu oku da kaydırıyordu (kullanıcı bulgusu).\n \"transition-opacity duration-150 starting:opacity-0 motion-reduce:transition-none\",\n getVariantClasses(color, variant),\n className\n )}\n // Ölçülene kadar görünmez (yanlış yerde bir kare parlamasın).\n style={{ top: position?.top ?? 0, left: position?.left ?? 0, visibility: position ? undefined : \"hidden\", ...style }}\n >\n {skeleton ? (\n <span className=\"flex flex-col gap-1.5 py-1\" aria-hidden>\n <span className={cn(\"block h-2.5 w-32 rounded-sm opacity-60\", skeletonFill(true))} />\n <span className={cn(\"block h-2.5 w-20 rounded-sm opacity-60\", skeletonFill(true))} />\n </span>\n ) : (\n content\n )}\n {/* Ok: balonla aynı renkte döndürülmüş kare; tetikleyicinin ortasını gösterir. */}\n <span\n aria-hidden\n className={cn(\"absolute size-2 rotate-45\", ARROW_SIDE_CLASS[side], getArrowClasses(color, variant))}\n style={vertical ? { left: position?.arrowOffset } : { top: position?.arrowOffset }}\n />\n </span>\n );\n}\n\nexport function Tooltip({\n content,\n trigger,\n placement = \"top\",\n color = \"neutral\",\n variant = \"solid\",\n className,\n style,\n alwaysVisible,\n disabled = false,\n triggerClassName,\n openDelay = 100,\n openOn = \"hover\",\n skeleton = false,\n}: Readonly<TooltipProps>) {\n const wrapperRef = useRef<HTMLSpanElement>(null);\n const bubbleRef = useRef<HTMLSpanElement>(null);\n const { visible, setVisible, open, close, closeNow, clearTimer } = useVisibility(alwaysVisible, openOn, wrapperRef, bubbleRef);\n const tooltipId = useId();\n const showTooltip = (visible || Boolean(alwaysVisible)) && !disabled;\n const position = useTrackedPosition(showTooltip, wrapperRef, bubbleRef, placement);\n\n const isClick = openOn === \"click\";\n const decoratedTrigger = decorateTrigger(trigger, showTooltip, tooltipId, isClick);\n const hoverHandlers = isClick\n ? { onClick: () => setVisible((v) => !v) }\n : { onMouseEnter: () => open(openDelay), onMouseLeave: close, onFocus: () => open(0), onBlur: closeNow };\n\n const bubble = showTooltip ? (\n <TooltipBubble\n bubbleRef={bubbleRef}\n id={tooltipId}\n position={position}\n skeleton={skeleton}\n content={content}\n color={color}\n variant={variant}\n className={className}\n style={style}\n // Fare takibi yalnızca \"üzerine gelinebilirlik\" (WCAG 1.4.13) için; tıklamalı modda yok.\n onMouseEnter={isClick ? undefined : clearTimer}\n onMouseLeave={isClick ? undefined : close}\n />\n ) : null;\n\n return (\n <>\n {/* Sarmalayıcı KENDİSİ interaktif değil — hover/focus bölgesi. Gerçek\n etkileşim `trigger`da; `onKeyDown` yalnızca Escape için (odak\n trigger'da, olay buraya bubble eder). */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <span\n ref={wrapperRef}\n className={cn(\"inline-block self-start\", triggerClassName)}\n {...hoverHandlers}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") {\n clearTimer();\n if (!alwaysVisible) setVisible(false);\n }\n }}\n >\n {decoratedTrigger}\n </span>\n {bubble && typeof document !== \"undefined\" && createPortal(bubble, document.body)}\n </>\n );\n}\n","import { cn, type ColorRole } from \"@mari-ui/core\";\nimport { bgSolidClass, bgSubtleClass, textSolidContrastClass, textSubtleContrastClass } from \"../lib/colorClasses\";\nimport type { TooltipVariant } from \"./types\";\n\n/**\n * Balon STATİK: dolgu + üzerindeki kontrast metin, hover durumu YOK. Eskiden\n * butonlar için olan renk varyantı (`resolveColorVariant`) kullanılıyordu —\n * `hover:` arka planı taşıyordu; fare balonun üzerine gelince balon koyulaşıyor,\n * ayrı bir öğe olan ok ise eski renkte kalıyordu (kullanıcı bulgusu).\n */\nexport function getVariantClasses(color: ColorRole, variant: TooltipVariant): string {\n return variant === \"soft\" ? cn(bgSubtleClass[color], textSubtleContrastClass[color]) : cn(bgSolidClass[color], textSolidContrastClass[color]);\n}\n\n/** Ok balonun dolgusuyla birebir aynı sınıf. */\nexport function getArrowClasses(color: ColorRole, variant: TooltipVariant): string {\n return variant === \"soft\" ? bgSubtleClass[color] : bgSolidClass[color];\n}\n"],"mappings":"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","names":["cn","cn"]}
1
+ {"version":3,"sources":["../src/tooltip/Tooltip.tsx","../src/tooltip/utils.ts"],"sourcesContent":["\"use client\";\n\nimport React, { isValidElement, useCallback, useEffect, useId, useLayoutEffect, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"@mari-ui/core\";\nimport { computePanelPosition, type Side } from \"../lib/floating\";\nimport { skeletonFill } from \"../lib/skeleton\";\nimport type { TooltipProps } from \"./types\";\nimport { getArrowClasses, getVariantClasses } from \"./utils\";\n\nexport type { TooltipProps };\n\n/** Tetikleyiciyle balon arası (px) ve balonun ekran kenarından en az uzaklığı. */\nconst GAP_PX = 8;\nconst EDGE_PX = 8;\n/** Balondan/tetikleyiciden çıkınca kapanma gecikmesi — fare aradaki boşluğu geçebilsin. */\nconst CLOSE_DELAY_MS = 120;\n/** Ok, balonun hizalandığı kenardan bu kadar içeride durur (radius'a binmesin). */\nconst ARROW_INSET_PX = 12;\n\nconst ARROW_SIDE_CLASS: Record<Side, string> = {\n top: \"top-full -translate-x-1/2 -translate-y-1/2\",\n bottom: \"bottom-full -translate-x-1/2 translate-y-1/2\",\n left: \"left-full -translate-x-1/2 -translate-y-1/2\",\n right: \"right-full translate-x-1/2 -translate-y-1/2\",\n};\n\ninterface Position {\n top: number;\n left: number;\n side: Side;\n arrowOffset: number;\n}\n\n/*\n * Faz 15 (yeniden yazım):\n * - Konum `lib/floating`'deki `computePanelPosition` ile (Dropdown'la ORTAK):\n * 12 yerleşim, yer yoksa karşı yöne döner, ekran içinde kıstırılır. Eskiden\n * 4 sabit yön + kıstırma yoktu: mobilde 672px'e kadar genişleyen balon\n * ekrandan taşıyor, üstteki bir tetikleyicide ekranın dışına çıkıyordu.\n * - Balonun ÜZERİNE gelinebilir (WCAG 1.4.13): fare tetikleyiciden balona\n * geçerken kapanmaz; kısa bir kapanma gecikmesi aradaki boşluğu köprüler.\n * - Fareyle açılış `openDelay` kadar gecikir (üzerinden geçerken titremesin);\n * odakla açılış anlık.\n */\n/**\n * Önceki kararlar korunur: `document.body`'e portal + `fixed` (kaydırılabilir\n * kapsayıcıda kırpılmaz), `role=\"tooltip\"` + tetikleyiciye `aria-describedby`,\n * Escape kapatır, sarmalayıcı `self-start` (flex'te gerilmesin).\n */\ntype ElRef = React.RefObject<HTMLSpanElement | null>;\n\n/** Açık/kapalı durumu: fare gecikmeleri (hover) ya da dışarı tıklama (click). */\nfunction useVisibility(alwaysVisible: boolean | undefined, openOn: \"hover\" | \"click\", wrapperRef: ElRef, bubbleRef: ElRef) {\n const timerRef = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const [visible, setVisible] = useState(alwaysVisible ?? false);\n\n const clearTimer = () => clearTimeout(timerRef.current);\n const open = useCallback((delay: number) => {\n clearTimeout(timerRef.current);\n if (delay <= 0) setVisible(true);\n else timerRef.current = setTimeout(() => setVisible(true), delay);\n }, []);\n const close = useCallback(() => {\n clearTimeout(timerRef.current);\n if (!alwaysVisible) timerRef.current = setTimeout(() => setVisible(false), CLOSE_DELAY_MS);\n }, [alwaysVisible]);\n const closeNow = () => {\n clearTimer();\n if (!alwaysVisible) setVisible(false);\n };\n\n useEffect(() => () => clearTimeout(timerRef.current), []);\n\n // `openOn=\"click\"`: dışarı tıklamak kapatır (tetikleyici ve balon hariç).\n useEffect(() => {\n if (openOn !== \"click\" || !visible) return;\n const onPointerDown = (event: PointerEvent) => {\n const target = event.target as Node;\n if (wrapperRef.current?.contains(target) || bubbleRef.current?.contains(target)) return;\n setVisible(false);\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n return () => document.removeEventListener(\"pointerdown\", onPointerDown);\n }, [openOn, visible, wrapperRef, bubbleRef]);\n\n return { visible, setVisible, open, close, closeNow, clearTimer };\n}\n\n/** Görünürken balonun sayfa konumunu her karede takip eder. */\nfunction useTrackedPosition(showTooltip: boolean, wrapperRef: ElRef, bubbleRef: ElRef, placement: TooltipProps[\"placement\"] & string) {\n const [position, setPosition] = useState<Position | null>(null);\n // Konum: balon önce görünmez çizilir, boyutu ölçülür, sonra yerleştirilir.\n const updatePosition = useCallback(() => {\n const anchor = wrapperRef.current?.getBoundingClientRect();\n const bubble = bubbleRef.current;\n if (!anchor || !bubble) return;\n // Tetikleyici görünür alanın DIŞINDAYSA balon gizlenir. Aksi halde kıstırma\n // onu ekran kenarına yapıştırıyor, tetikleyiciden kopuk havada asılı\n // kalıyordu (Storybook docs'ta aşağıdaki `alwaysVisible` story'ler).\n const offscreen = anchor.bottom < 0 || anchor.top > window.innerHeight || anchor.right < 0 || anchor.left > window.innerWidth;\n if (offscreen) {\n setPosition(null);\n return;\n }\n const next = computePanelPosition(\n { top: anchor.top, left: anchor.left, width: anchor.width, height: anchor.height },\n { width: bubble.offsetWidth, height: bubble.offsetHeight },\n placement,\n { width: window.innerWidth, height: window.innerHeight },\n GAP_PX,\n EDGE_PX,\n { inset: ARROW_INSET_PX, pointAtCenter: true }\n );\n // SAYFA koordinatı (`absolute`): pencere kaydırılınca balonu tarayıcı\n // kendisi taşır. Eskiden `fixed` + her karede JS ile yeniden konum vardı —\n // bir kare geriden geldiği için kaydırırken balonlar titriyor, komşu\n // satırlara biniyordu (kullanıcı bulgusu, docs sayfası).\n const pageTop = next.top + window.scrollY;\n const pageLeft = next.left + window.scrollX;\n setPosition((prev) =>\n prev && prev.top === pageTop && prev.left === pageLeft && prev.side === next.side && prev.arrowOffset === next.arrowOffset\n ? prev\n : { ...next, top: pageTop, left: pageLeft }\n );\n }, [placement, wrapperRef, bubbleRef]);\n\n useLayoutEffect(() => {\n if (!showTooltip) {\n setPosition(null);\n return;\n }\n // Görünür olduğu sürece HER KAREDE takip: yalnızca scroll/resize dinlemek\n // yetmiyordu — sayfa düzeni sonradan değişince (ör. Storybook docs'ta\n // story'ler geç yerleşince) `alwaysVisible` balonlar eski koordinatta\n // asılı kalıyordu. Konum değişmediyse state güncellenmez (render yok).\n let frame = 0;\n const tick = () => {\n updatePosition();\n frame = requestAnimationFrame(tick);\n };\n tick();\n return () => cancelAnimationFrame(frame);\n }, [showTooltip, updatePosition]);\n\n return position;\n}\n\n/** Tetikleyiciye `aria-describedby` (açıkken) ve tıklamalı modda `aria-expanded` ekler. */\nfunction decorateTrigger(trigger: React.ReactNode, showTooltip: boolean, tooltipId: string, isClick: boolean): React.ReactNode {\n if (!isValidElement<{ \"aria-describedby\"?: string; \"aria-expanded\"?: boolean }>(trigger)) return trigger;\n const extra: Record<string, unknown> = {};\n if (showTooltip) extra[\"aria-describedby\"] = [trigger.props[\"aria-describedby\"], tooltipId].filter(Boolean).join(\" \");\n // Tıklamalı modda tetikleyici bir aç/kapa düğmesidir — durumunu duyurur.\n if (isClick) extra[\"aria-expanded\"] = showTooltip;\n return React.cloneElement(trigger, extra);\n}\n\ninterface TooltipBubbleProps {\n bubbleRef: ElRef;\n id: string;\n position: Position | null;\n skeleton: boolean;\n content: React.ReactNode;\n color: NonNullable<TooltipProps[\"color\"]>;\n variant: NonNullable<TooltipProps[\"variant\"]>;\n className?: string;\n style?: React.CSSProperties;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n}\n\nfunction TooltipBubble({ bubbleRef, id, position, skeleton, content, color, variant, className, style, onMouseEnter, onMouseLeave }: Readonly<TooltipBubbleProps>) {\n const side = position?.side ?? \"top\";\n const vertical = side === \"top\" || side === \"bottom\";\n return (\n <span\n ref={bubbleRef}\n role=\"tooltip\"\n id={id}\n aria-busy={skeleton || undefined}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n className={cn(\n // Boyutlar ant.design'ın gerçek Tooltip'inden: padding 6px 8px,\n // radius 6px, line-height 22px. Genişlik en çok 20rem ve HİÇBİR ZAMAN\n // ekran genişliği − 2×kenar payından fazla değil (mobilde taşmaz).\n \"absolute z-mari-tooltip w-max max-w-[min(20rem,calc(100vw-1rem))] rounded-md px-2 py-1.5 text-sm leading-[1.375rem] text-wrap\",\n // Yalnızca solma: ölçek animasyonu oku da kaydırıyordu (kullanıcı bulgusu).\n \"transition-opacity duration-150 starting:opacity-0 motion-reduce:transition-none\",\n getVariantClasses(color, variant),\n className\n )}\n // Ölçülene kadar görünmez (yanlış yerde bir kare parlamasın).\n style={{ top: position?.top ?? 0, left: position?.left ?? 0, visibility: position ? undefined : \"hidden\", ...style }}\n >\n {skeleton ? (\n <span className=\"flex flex-col gap-1.5 py-1\" aria-hidden>\n <span className={cn(\"block h-2.5 w-32 rounded-sm opacity-60\", skeletonFill(true))} />\n <span className={cn(\"block h-2.5 w-20 rounded-sm opacity-60\", skeletonFill(true))} />\n </span>\n ) : (\n content\n )}\n {/* Ok: balonla aynı renkte döndürülmüş kare; tetikleyicinin ortasını gösterir. */}\n <span\n aria-hidden\n className={cn(\"absolute size-2 rotate-45\", ARROW_SIDE_CLASS[side], getArrowClasses(color, variant))}\n style={vertical ? { left: position?.arrowOffset } : { top: position?.arrowOffset }}\n />\n </span>\n );\n}\n\nexport function Tooltip({\n content,\n trigger,\n placement = \"top\",\n color = \"neutral\",\n variant = \"solid\",\n className,\n style,\n alwaysVisible,\n disabled = false,\n triggerClassName,\n openDelay = 100,\n openOn = \"hover\",\n skeleton = false,\n}: Readonly<TooltipProps>) {\n const wrapperRef = useRef<HTMLSpanElement>(null);\n const bubbleRef = useRef<HTMLSpanElement>(null);\n const { visible, setVisible, open, close, closeNow, clearTimer } = useVisibility(alwaysVisible, openOn, wrapperRef, bubbleRef);\n const tooltipId = useId();\n const showTooltip = (visible || Boolean(alwaysVisible)) && !disabled;\n const position = useTrackedPosition(showTooltip, wrapperRef, bubbleRef, placement);\n\n const isClick = openOn === \"click\";\n const decoratedTrigger = decorateTrigger(trigger, showTooltip, tooltipId, isClick);\n const hoverHandlers = isClick\n ? { onClick: () => setVisible((v) => !v) }\n : { onMouseEnter: () => open(openDelay), onMouseLeave: close, onFocus: () => open(0), onBlur: closeNow };\n\n const bubble = showTooltip ? (\n <TooltipBubble\n bubbleRef={bubbleRef}\n id={tooltipId}\n position={position}\n skeleton={skeleton}\n content={content}\n color={color}\n variant={variant}\n className={className}\n style={style}\n // Fare takibi yalnızca \"üzerine gelinebilirlik\" (WCAG 1.4.13) için; tıklamalı modda yok.\n onMouseEnter={isClick ? undefined : clearTimer}\n onMouseLeave={isClick ? undefined : close}\n />\n ) : null;\n\n return (\n <>\n {/* Sarmalayıcı KENDİSİ interaktif değil — hover/focus bölgesi. Gerçek\n etkileşim `trigger`da; `onKeyDown` yalnızca Escape için (odak\n trigger'da, olay buraya bubble eder). */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <span\n ref={wrapperRef}\n className={cn(\"inline-block self-start\", triggerClassName)}\n {...hoverHandlers}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") {\n clearTimer();\n if (!alwaysVisible) setVisible(false);\n }\n }}\n >\n {decoratedTrigger}\n </span>\n {bubble && typeof document !== \"undefined\" && createPortal(bubble, document.body)}\n </>\n );\n}\n","import { cn, type ColorRole } from \"@mari-ui/core\";\nimport { bgSolidClass, bgSubtleClass, textSolidContrastClass, textSubtleContrastClass } from \"../lib/colorClasses\";\nimport type { TooltipVariant } from \"./types\";\n\n/*\n * Balon STATİK: dolgu + üzerindeki kontrast metin, hover durumu YOK. Eskiden\n * butonlar için olan renk varyantı (`resolveColorVariant`) kullanılıyordu —\n * `hover:` arka planı taşıyordu; fare balonun üzerine gelince balon koyulaşıyor,\n * ayrı bir öğe olan ok ise eski renkte kalıyordu.\n */\nexport function getVariantClasses(color: ColorRole, variant: TooltipVariant): string {\n return variant === \"soft\" ? cn(bgSubtleClass[color], textSubtleContrastClass[color]) : cn(bgSolidClass[color], textSolidContrastClass[color]);\n}\n\n/** Ok balonun dolgusuyla birebir aynı sınıf. */\nexport function getArrowClasses(color: ColorRole, variant: TooltipVariant): string {\n return variant === \"soft\" ? bgSubtleClass[color] : bgSolidClass[color];\n}\n"],"mappings":"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","names":["cn","cn"]}
@@ -2,31 +2,31 @@
2
2
 
3
3
  import {
4
4
  Popover
5
- } from "./chunk-QDFDMWXD.js";
5
+ } from "./chunk-CNWRDTEW.js";
6
6
  import {
7
7
  InputNumber
8
- } from "./chunk-LZHERDNB.js";
8
+ } from "./chunk-CXIWRNSP.js";
9
9
  import {
10
10
  Input
11
- } from "./chunk-P7Z5BREP.js";
11
+ } from "./chunk-L6DBWUAB.js";
12
12
  import {
13
13
  Segmented
14
- } from "./chunk-LEOIKO7C.js";
14
+ } from "./chunk-RLWP6NJU.js";
15
15
  import {
16
16
  FIELD_BASE_CLASS,
17
17
  FIELD_DISABLED_CLASS,
18
18
  getVariantClasses
19
- } from "./chunk-DUCIAQGR.js";
19
+ } from "./chunk-NENNFQEY.js";
20
20
  import {
21
21
  FieldContext,
22
22
  useFieldControl
23
- } from "./chunk-LBQMEHK6.js";
23
+ } from "./chunk-NPFMPRII.js";
24
24
  import {
25
25
  touchTargetClass
26
- } from "./chunk-FFXRFQSU.js";
26
+ } from "./chunk-POBOJBNJ.js";
27
27
  import {
28
28
  skeletonBoxProps
29
- } from "./chunk-54HHEXXD.js";
29
+ } from "./chunk-VKN374SD.js";
30
30
 
31
31
  // src/color-picker/ColorPicker.tsx
32
32
  import { useContext, useEffect as useEffect2, useId as useId2, useRef as useRef2, useState as useState3 } from "react";
@@ -681,4 +681,4 @@ export {
681
681
  formatColor,
682
682
  ColorPicker
683
683
  };
684
- //# sourceMappingURL=chunk-QZRBO7BE.js.map
684
+ //# sourceMappingURL=chunk-Z4KFHRDW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/color-picker/ColorPicker.tsx","../src/color-picker/_components/ColorArea.tsx","../src/color-picker/utils.ts","../src/color-picker/_components/usePointerDrag.ts","../src/color-picker/_components/ColorInputs.tsx","../src/color-picker/_components/ColorPresets.tsx","../src/color-picker/_components/Swatch.tsx","../src/color-picker/_components/ColorSlider.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useContext, useEffect, useId, useRef, useState } from \"react\";\nimport { cn, useControllableState, type Size } from \"@mari-ui/core\";\nimport { FIELD_BASE_CLASS, FIELD_DISABLED_CLASS, getVariantClasses } from \"../input/utils\";\nimport { FieldContext, useFieldControl } from \"../lib/fieldContext\";\nimport { skeletonBoxProps } from \"../lib/skeleton\";\nimport { touchTargetClass } from \"../lib/sizeClasses\";\nimport { Popover } from \"../popover\";\nimport { ColorArea } from \"./_components/ColorArea\";\nimport { ColorInputs } from \"./_components/ColorInputs\";\nimport { ColorPresets } from \"./_components/ColorPresets\";\nimport { ColorSlider, HUE_GRADIENT } from \"./_components/ColorSlider\";\nimport { Swatch } from \"./_components/Swatch\";\nimport type { ColorFormat, ColorInfo, ColorPickerProps, Hsba } from \"./types\";\nimport { colorInfo, describeColor, formatColor, parseColor } from \"./utils\";\n\nexport type { ColorPickerProps };\n\n/** Hiç renk yokken panelin başladığı renk (primary ailesine yakın bir mavi). */\nconst FALLBACK: Hsba = { h: 212, s: 71, b: 64, a: 1 };\n\n/** Yükseklik Input/Select ile aynı; renk kutusu her boyutta 3px iç boşlukla oturur. */\nconst TRIGGER_CLASS: Record<Size, string> = {\n sm: \"h-6 text-xs gap-1 rounded-sm\",\n md: \"h-8 text-sm gap-2 rounded-md\",\n lg: \"h-10 text-base gap-2 rounded-md\",\n};\nconst SQUARE_CLASS: Record<Size, string> = { sm: \"w-6\", md: \"w-8\", lg: \"w-10\" };\nconst TEXT_PAD_CLASS: Record<Size, string> = { sm: \"pr-2\", md: \"pr-3\", lg: \"pr-4\" };\nconst SWATCH_CLASS: Record<Size, string> = { sm: \"size-4 rounded-sm\", md: \"size-6 rounded-sm\", lg: \"size-8 rounded-sm\" };\n\n/**\n * Kontrollü/kontrolsüz renk durumu. İç model HSB — dışarıya `format`taki metin\n * verilir. Kontrollü `value` yalnız BİZİM bildirdiğimizden farklıysa yeniden\n * ayrıştırılır; böylece gri bir renkte (ton bilgisi yok) sürüklerken seçilen\n * ton kaybolmaz.\n */\nfunction useColorState(props: ColorPickerProps, format: ColorFormat) {\n const { value, defaultValue, onChange, onChangeComplete, disabledAlpha = false } = props;\n const controlled = value !== undefined;\n const normalize = (c: Hsba | null) => (c && disabledAlpha ? { ...c, a: 1 } : c);\n const [color, setColor] = useState<Hsba | null>(() => normalize(parseColor(controlled ? value : defaultValue)));\n const emitted = useRef<string | null | undefined>(controlled ? value : undefined);\n const current = useRef(color);\n current.current = color;\n // Renk temizlense de panel son rengi göstermeye devam eder.\n const lastColor = useRef<Hsba>(color ?? FALLBACK);\n\n useEffect(() => {\n if (!controlled || value === emitted.current) return;\n emitted.current = value;\n const parsed = normalize(parseColor(value));\n setColor(parsed);\n if (parsed) lastColor.current = parsed;\n // normalize yalnız disabledAlpha'ya bağlı; value değişince yeterli.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [controlled, value]);\n\n const toOutput = (c: Hsba | null): [string | null, ColorInfo | null] => (c ? [formatColor(c, format), colorInfo(c)] : [null, null]);\n\n const set = (next: Hsba | null, complete: boolean) => {\n const c = normalize(next);\n setColor(c);\n current.current = c;\n if (c) lastColor.current = c;\n const [text, info] = toOutput(c);\n emitted.current = text;\n onChange?.(text, info);\n if (complete) onChangeComplete?.(text, info);\n };\n\n return {\n color,\n draft: color ?? lastColor.current,\n set,\n /** Sürükleme bitti: son değeri kesinleştir. */\n complete: () => onChangeComplete?.(...toOutput(current.current)),\n };\n}\n\ninterface PanelProps {\n state: ReturnType<typeof useColorState>;\n format: ColorFormat;\n setFormat: (f: ColorFormat) => void;\n props: ColorPickerProps;\n}\n\nfunction ColorPanel({ state, format, setFormat, props }: Readonly<PanelProps>) {\n const { allowClear = false, disabledAlpha = false, presets } = props;\n const { color, draft, set, complete } = state;\n const opaque = colorInfo({ ...draft, a: 1 }).hex;\n\n return (\n <div className=\"flex flex-col gap-3\">\n {allowClear && (\n <button\n type=\"button\"\n aria-pressed={color === null}\n onClick={() => set(null, true)}\n className=\"flex items-center gap-2 self-start rounded-sm text-xs text-mari-muted outline-none pointer-coarse:py-3 hover:text-mari-foreground focus-visible:ring-2 focus-visible:ring-mari-ring\"\n >\n <Swatch color={null} className=\"size-4 rounded-sm\" />\n Renk yok\n </button>\n )}\n <ColorArea color={draft} onChange={(s, b) => set({ ...draft, s, b }, false)} onChangeEnd={complete} />\n <div className=\"flex items-center gap-2\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <ColorSlider\n label=\"Ton\"\n value={Math.round(draft.h)}\n min={0}\n max={360}\n valueText={`${Math.round(draft.h)} derece`}\n background={HUE_GRADIENT}\n thumbColor={colorInfo({ h: draft.h, s: 100, b: 100, a: 1 }).hex}\n onChange={(h) => set({ ...draft, h }, false)}\n onChangeEnd={complete}\n />\n {!disabledAlpha && (\n <ColorSlider\n label=\"Opaklık\"\n value={Math.round(draft.a * 100)}\n min={0}\n max={100}\n valueText={`%${Math.round(draft.a * 100)}`}\n background={`linear-gradient(to right, transparent, ${opaque})`}\n checker\n thumbColor={colorInfo(draft).rgb}\n onChange={(a) => set({ ...draft, a: a / 100 }, false)}\n onChangeEnd={complete}\n />\n )}\n </div>\n <Swatch color={color} className=\"size-7 rounded-md\" />\n </div>\n <ColorInputs color={draft} format={format} onFormatChange={setFormat} disabledAlpha={disabledAlpha} onChange={(c) => set(c, true)} />\n {presets && presets.length > 0 && <ColorPresets presets={presets} current={color} onPick={(c) => set(c, true)} />}\n </div>\n );\n}\n\nfunction triggerText(showText: ColorPickerProps[\"showText\"], color: Hsba | null, format: ColorFormat): React.ReactNode {\n if (!showText) return null;\n if (typeof showText === \"function\") return showText(color ? colorInfo(color) : null);\n if (!color) return <span className=\"text-mari-muted\">Renk yok</span>;\n const text = formatColor(color, format);\n return format === \"hex\" ? text.toUpperCase() : text;\n}\n\n/*\n * yapı ant.design ColorPicker'dan: renk kutulu tetikleyici + panel\n * (doygunluk/parlaklık alanı, ton ve opaklık kaydırıcıları, HEX/RGB/HSB\n * girişleri, hazır renk grupları, \"renk yok\"). Panel Popover üstünde (konum,\n * kapanma, odak yönetimi ortak); tetikleyici Input/Select ile aynı yükseklik\n * ve kenarlık.\n */\n/**\n * Erişilebilirlik: tetikleyici `aria-haspopup=\"dialog\"` + `aria-expanded`,\n * seçili renk açıklamada (`aria-describedby`) okunur. Açılınca odak 2B alana\n * geçer; alan ve kaydırıcılar `role=\"slider\"` ile ok tuşlarıyla kullanılır,\n * her değer metin girişiyle de verilebilir. Escape kapatır, odak geri döner.\n */\nexport function ColorPicker(outerProps: Readonly<ColorPickerProps>) {\n const props = useFieldControl(outerProps) as ColorPickerProps;\n const {\n defaultFormat = \"hex\",\n showText = false,\n trigger = \"click\",\n placement = \"bottom-start\",\n size = \"md\",\n color: statusColor,\n disabled = false,\n id,\n name,\n className,\n skeleton = false,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n } = props;\n const inField = useContext(FieldContext) !== null;\n const [format, setFormat] = useControllableState<ColorFormat>({ value: props.format, defaultValue: defaultFormat, onChange: props.onFormatChange });\n const [open, setOpen] = useControllableState<boolean>({ value: props.open, defaultValue: props.defaultOpen ?? false, onChange: props.onOpenChange });\n const state = useColorState(props, format);\n const valueId = useId();\n\n const text = triggerText(showText, state.color, format);\n const geometry = cn(\"inline-flex shrink-0 items-center pl-[0.1875rem]\", TRIGGER_CLASS[size], text ? TEXT_PAD_CLASS[size] : cn(SQUARE_CLASS[size], \"justify-center pl-0\"));\n // İskelet gerçek içeriği (renk kutusu + metin) şeffaf çizer: genişlik metne göre birebir, yüklenince kayma yok.\n if (skeleton) {\n return (\n <span {...skeletonBoxProps(cn(geometry, \"border border-transparent\", className))}>\n <span className={cn(\"block shrink-0\", SWATCH_CLASS[size])} />\n {text && <span className=\"truncate\">{text}</span>}\n </span>\n );\n }\n\n const button = (\n <button\n type=\"button\"\n id={id}\n disabled={disabled}\n // Field içindeyse ad `<label htmlFor>`dan gelir; aria-label onu ezerdi.\n aria-label={ariaLabelledBy || inField ? ariaLabel : (ariaLabel ?? \"Renk seç\")}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={[valueId, ariaDescribedBy].filter(Boolean).join(\" \")}\n aria-invalid={statusColor === \"error\" || undefined}\n className={cn(\n geometry,\n \"relative cursor-pointer border text-mari-foreground outline-none\",\n touchTargetClass[size],\n FIELD_BASE_CLASS,\n getVariantClasses(\"outline\", statusColor),\n disabled && FIELD_DISABLED_CLASS,\n className\n )}\n >\n <Swatch color={state.color} className={SWATCH_CLASS[size]} />\n {text && <span className=\"truncate\">{text}</span>}\n <span id={valueId} className=\"sr-only\">\n {describeColor(state.color)}\n </span>\n </button>\n );\n\n const hidden = name ? <input type=\"hidden\" name={name} value={state.color ? formatColor(state.color, format) : \"\"} /> : null;\n\n if (disabled) {\n return (\n <>\n {button}\n {hidden}\n </>\n );\n }\n\n return (\n <>\n <Popover\n trigger={trigger}\n placement={placement}\n arrow={false}\n open={open}\n onOpenChange={setOpen}\n aria-label=\"Renk seçici\"\n className=\"w-60 max-w-[calc(100vw-1rem)] pointer-coarse:w-72\"\n content={<ColorPanel state={state} format={format} setFormat={setFormat} props={props} />}\n >\n {button}\n </Popover>\n {hidden}\n </>\n );\n}\n","\"use client\";\n\nimport type React from \"react\";\nimport { cn } from \"@mari-ui/core\";\nimport type { Hsba } from \"../types\";\nimport { areaKeyStep, colorInfo, hueColor, isLight } from \"../utils\";\nimport { usePointerDrag } from \"./usePointerDrag\";\n\ninterface ColorAreaProps {\n color: Hsba;\n disabled?: boolean;\n onChange: (s: number, b: number) => void;\n onChangeEnd: () => void;\n}\n\n/**\n * Doygunluk (yatay) × parlaklık (dikey) alanı. Zemin saf ton; üstüne beyazdan\n * saydama (soldan sağa) ve saydamdan siyaha (yukarıdan aşağı) iki katman.\n *\n * Erişilebilirlik: ARIA'da 2B kaydırıcı rolü yok — tek odaklanabilir bir\n * `slider` (değer = doygunluk), `aria-valuetext` iki ekseni birden söyler,\n * `aria-roledescription` yönü açıklar. ←/→ doygunluk, ↑/↓ parlaklık.\n */\nexport function ColorArea({ color, disabled, onChange, onChangeEnd }: Readonly<ColorAreaProps>) {\n const drag = usePointerDrag(({ x, y }) => onChange(Math.round(x * 100), Math.round((1 - y) * 100)), onChangeEnd);\n const s = Math.round(color.s);\n const b = Math.round(color.b);\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n const next = areaKeyStep(e.key, e.shiftKey, s, b);\n if (!next) return;\n e.preventDefault();\n onChange(next.s, next.b);\n onChangeEnd();\n };\n\n return (\n <div\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n data-autofocus\n aria-label=\"Doygunluk ve parlaklık\"\n aria-roledescription=\"iki boyutlu kaydırıcı\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={s}\n aria-valuetext={`Doygunluk %${s}, parlaklık %${b}`}\n aria-disabled={disabled || undefined}\n onKeyDown={disabled ? undefined : onKeyDown}\n {...(disabled ? {} : drag)}\n className={cn(\n \"relative h-36 w-full cursor-crosshair touch-none rounded-md outline-none select-none\",\n \"focus-visible:ring-2 focus-visible:ring-mari-ring focus-visible:ring-offset-2 focus-visible:ring-offset-mari-surface\"\n )}\n style={{ backgroundColor: hueColor(color.h) }}\n >\n <div aria-hidden className=\"absolute inset-0 rounded-md bg-linear-to-r from-white to-transparent\" />\n <div aria-hidden className=\"absolute inset-0 rounded-md bg-linear-to-b from-transparent to-black\" />\n <span\n aria-hidden\n className={cn(\"pointer-events-none absolute size-3.5 -translate-1/2 rounded-full border-2 shadow-mari-sm\", isLight({ ...color, a: 1 }) ? \"border-mari-neutral-solid\" : \"border-white\")}\n style={{ left: `${s}%`, top: `${100 - b}%`, backgroundColor: colorInfo({ ...color, a: 1 }).hex }}\n />\n </div>\n );\n}\n","import type { ColorFormat, ColorInfo, Hsba, Rgba } from \"./types\";\n\n/**\n * ColorPicker'ın saf renk mantığı. İç model HSB(+alfa): 2B alan\n * doygunluk × parlaklık, kaydırıcılar ton ve alfa. Hex/RGB yalnız giriş ve\n * çıkışta hesaplanır — RGB'ye gidip gelmek tonu kaybettirir (ör. siyahta\n * ton 0'a düşer, kullanıcının seçtiği ton kaybolurdu).\n */\n\nexport const clamp = (n: number, min: number, max: number) => Math.min(max, Math.max(min, n));\nconst round = (n: number, digits = 0) => {\n const f = 10 ** digits;\n return Math.round(n * f) / f;\n};\n\nexport function hsbToRgb({ h, s, b, a }: Hsba): Rgba {\n const sat = s / 100;\n const val = b / 100;\n const f = (n: number) => {\n const k = (n + h / 60) % 6;\n return val - val * sat * Math.max(0, Math.min(k, 4 - k, 1));\n };\n return { r: Math.round(f(5) * 255), g: Math.round(f(3) * 255), b: Math.round(f(1) * 255), a };\n}\n\nfunction hueOf(r: number, g: number, b: number, max: number, d: number): number {\n if (d === 0) return 0;\n let h: number;\n if (max === r) h = ((g - b) / d) % 6;\n else if (max === g) h = (b - r) / d + 2;\n else h = (r - g) / d + 4;\n return (h * 60 + 360) % 360;\n}\n\nexport function rgbToHsb({ r, g, b, a }: Rgba): Hsba {\n const [rn, gn, bn] = [r / 255, g / 255, b / 255];\n const max = Math.max(rn, gn, bn);\n const d = max - Math.min(rn, gn, bn);\n return { h: hueOf(rn, gn, bn, max, d), s: max === 0 ? 0 : (d / max) * 100, b: max * 100, a };\n}\n\nfunction hslToHsb(h: number, s: number, l: number, a: number): Hsba {\n // b = l + s·min(l, 1−l); s_b = 2(1 − l/b)\n const sl = s / 100;\n const ll = l / 100;\n const b = ll + sl * Math.min(ll, 1 - ll);\n return { h, s: b === 0 ? 0 : 2 * (1 - ll / b) * 100, b: b * 100, a };\n}\n\nconst hex2 = (n: number) => Math.round(n).toString(16).padStart(2, \"0\");\n\nexport function toHex({ r, g, b, a }: Rgba): string {\n return `#${hex2(r)}${hex2(g)}${hex2(b)}${a < 1 ? hex2(a * 255) : \"\"}`;\n}\n\nexport function toRgbString({ r, g, b, a }: Rgba): string {\n return a < 1 ? `rgba(${r}, ${g}, ${b}, ${round(a, 2)})` : `rgb(${r}, ${g}, ${b})`;\n}\n\nexport function toHsbString({ h, s, b, a }: Hsba): string {\n const body = `${Math.round(h)}, ${Math.round(s)}%, ${Math.round(b)}%`;\n return a < 1 ? `hsba(${body}, ${round(a, 2)})` : `hsb(${body})`;\n}\n\nfunction parseHex(input: string): Rgba | null {\n const m = /^#?([\\da-f]{3,4}|[\\da-f]{6}|[\\da-f]{8})$/i.exec(input);\n if (!m) return null;\n let digits = m[1]!;\n if (digits.length <= 4) digits = [...digits].map((c) => c + c).join(\"\");\n const n = (i: number) => Number.parseInt(digits.slice(i, i + 2), 16);\n return { r: n(0), g: n(2), b: n(4), a: digits.length === 8 ? round(n(6) / 255, 3) : 1 };\n}\n\n/** `0.5`, `50%` → 0.5; yoksa 1. */\nfunction parseAlpha(part: string | undefined): number {\n if (part === undefined) return 1;\n const v = Number.parseFloat(part);\n if (Number.isNaN(v)) return 1;\n return clamp(part.trim().endsWith(\"%\") ? v / 100 : v, 0, 1);\n}\n\nconst FUNC_RE = /^(rgba?|hsba?|hsva?|hsla?)\\(([^)]*)\\)$/i;\n\nfunction parseFunc(input: string): Hsba | null {\n const m = FUNC_RE.exec(input);\n if (!m) return null;\n const kind = m[1]!.toLowerCase().slice(0, 3);\n // Virgüllü (`rgb(1, 2, 3)`) ve modern boşluklu (`rgb(1 2 3 / 50%)`) yazım.\n const parts = m[2]!.replace(/[,/]/g, \" \").trim().split(/\\s+/);\n if (parts.length < 3) return null;\n const [x, y, z] = parts.slice(0, 3).map((p) => Number.parseFloat(p)) as [number, number, number];\n if ([x, y, z].some(Number.isNaN)) return null;\n const a = parseAlpha(parts[3]);\n if (kind === \"rgb\") {\n const ch = (p: string, v: number) => clamp(Math.round(p.endsWith(\"%\") ? (v / 100) * 255 : v), 0, 255);\n return rgbToHsb({ r: ch(parts[0]!, x), g: ch(parts[1]!, y), b: ch(parts[2]!, z), a });\n }\n const h = ((x % 360) + 360) % 360;\n if (kind === \"hsl\") return hslToHsb(h, clamp(y, 0, 100), clamp(z, 0, 100), a);\n // hsb() olduğu gibi — RGB'ye gidip gelmek tonu yuvarlar.\n return { h, s: clamp(y, 0, 100), b: clamp(z, 0, 100), a };\n}\n\n/** Hex (3/4/6/8 hane, `#` isteğe bağlı), `rgb[a]()`, `hsb[a]()`/`hsv()`, `hsl[a]()`. Tanınmazsa `null`. */\nexport function parseColor(input: string | null | undefined): Hsba | null {\n if (!input) return null;\n const text = input.trim();\n const fn = parseFunc(text);\n if (fn) return fn;\n const hex = parseHex(text);\n return hex ? rgbToHsb(hex) : null;\n}\n\nexport function colorInfo(hsba: Hsba): ColorInfo {\n const rgba = hsbToRgb(hsba);\n return { hsba, rgba, hex: toHex(rgba), rgb: toRgbString(rgba), hsb: toHsbString(hsba) };\n}\n\nexport function formatColor(hsba: Hsba, format: ColorFormat): string {\n return colorInfo(hsba)[format];\n}\n\n/** İki renk görsel olarak aynı mı (8 bit RGB + 2 hane alfa) — preset seçili göstergesi için. */\nexport function sameColor(a: Hsba | null, b: Hsba | null): boolean {\n if (!a || !b) return a === b;\n return toHex(hsbToRgb(a)) === toHex(hsbToRgb(b));\n}\n\n/** Saf ton (s=b=100) — 2B alanın arka planı. */\nexport const hueColor = (h: number) => `hsl(${h} 100% 50%)`;\n\n/**\n * Rengin üstünde okunacak işaretçi/metin rengi: açık zeminde koyu, koyu zeminde\n * açık. Alfa düşükse (zemin dama deseni, açık) koyu.\n */\nexport function isLight(hsba: Hsba): boolean {\n if (hsba.a < 0.5) return true;\n const { r, g, b } = hsbToRgb(hsba);\n const lin = (c: number) => {\n const v = c / 255;\n return v <= 0.04045 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4;\n };\n return 0.2126 * lin(r) + 0.7152 * lin(g) + 0.0722 * lin(b) > 0.4;\n}\n\n/** Ekran okuyucu için kısa açıklama: \"#1677ff, opaklık %50\". */\nexport function describeColor(hsba: Hsba | null, empty = \"Renk yok\"): string {\n if (!hsba) return empty;\n const { hex } = colorInfo({ ...hsba, a: 1 });\n return hsba.a < 1 ? `${hex}, opaklık %${Math.round(hsba.a * 100)}` : hex;\n}\n\nexport type AreaKey = \"ArrowLeft\" | \"ArrowRight\" | \"ArrowUp\" | \"ArrowDown\" | \"Home\" | \"End\" | \"PageUp\" | \"PageDown\";\n\n/**\n * 2B alanın klavyesi: ←/→ doygunluk, ↑/↓ parlaklık (1, Shift ile 10);\n * Home/End doygunluk 0/100, PageUp/PageDown parlaklık 100/0.\n */\nexport function areaKeyStep(key: string, shift: boolean, s: number, b: number): { s: number; b: number } | null {\n const step = shift ? 10 : 1;\n const map: Record<AreaKey, () => { s: number; b: number }> = {\n ArrowLeft: () => ({ s: s - step, b }),\n ArrowRight: () => ({ s: s + step, b }),\n ArrowUp: () => ({ s, b: b + step }),\n ArrowDown: () => ({ s, b: b - step }),\n Home: () => ({ s: 0, b }),\n End: () => ({ s: 100, b }),\n PageUp: () => ({ s, b: 100 }),\n PageDown: () => ({ s, b: 0 }),\n };\n const fn = map[key as AreaKey];\n if (!fn) return null;\n const next = fn();\n return { s: clamp(next.s, 0, 100), b: clamp(next.b, 0, 100) };\n}\n\n/** Tek eksenli kaydırıcı (ton, alfa) klavyesi. Tanınmayan tuş → `null`. */\nexport function sliderKeyStep(key: string, shift: boolean, value: number, min: number, max: number, step: number): number | null {\n const big = step * 10;\n const delta: Record<string, number> = {\n ArrowRight: shift ? big : step,\n ArrowUp: shift ? big : step,\n ArrowLeft: shift ? -big : -step,\n ArrowDown: shift ? -big : -step,\n PageUp: big,\n PageDown: -big,\n };\n if (key === \"Home\") return min;\n if (key === \"End\") return max;\n const d = delta[key];\n return d === undefined ? null : clamp(value + d, min, max);\n}\n\n/** İşaretçi konumundan 0–1 oran (öğenin kutusuna göre, sınırlarda kesilir). */\nexport function ratioFromPointer(clientX: number, clientY: number, rect: { left: number; top: number; width: number; height: number }) {\n return {\n x: rect.width ? clamp((clientX - rect.left) / rect.width, 0, 1) : 0,\n y: rect.height ? clamp((clientY - rect.top) / rect.height, 0, 1) : 0,\n };\n}\n","\"use client\";\n\nimport type React from \"react\";\nimport { useRef } from \"react\";\nimport { ratioFromPointer } from \"../utils\";\n\ntype Ratio = { x: number; y: number };\n\n/**\n * Alan/kaydırıcı sürükleme: basınca konuma atlar, işaretçi yakalanır (öğenin\n * dışına taşsa da izlenir), bırakınca `onEnd`. Dokunmatikte sayfa kaymasın\n * diye öğeye `touch-none` verilmeli.\n */\nexport function usePointerDrag(onMove: (ratio: Ratio) => void, onEnd: () => void) {\n const dragging = useRef(false);\n const update = (e: React.PointerEvent<HTMLElement>) => onMove(ratioFromPointer(e.clientX, e.clientY, e.currentTarget.getBoundingClientRect()));\n return {\n onPointerDown: (e: React.PointerEvent<HTMLElement>) => {\n if (e.button !== 0) return;\n dragging.current = true;\n e.currentTarget.setPointerCapture?.(e.pointerId);\n e.currentTarget.focus();\n e.preventDefault();\n update(e);\n },\n onPointerMove: (e: React.PointerEvent<HTMLElement>) => {\n if (dragging.current) update(e);\n },\n onPointerUp: (e: React.PointerEvent<HTMLElement>) => {\n if (!dragging.current) return;\n dragging.current = false;\n e.currentTarget.releasePointerCapture?.(e.pointerId);\n onEnd();\n },\n onLostPointerCapture: () => {\n if (!dragging.current) return;\n dragging.current = false;\n onEnd();\n },\n };\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { Input } from \"../../input\";\nimport { InputNumber } from \"../../input-number\";\nimport { Segmented } from \"../../segmented\";\nimport type { ColorFormat, Hsba } from \"../types\";\nimport { clamp, colorInfo, hsbToRgb, parseColor, rgbToHsb } from \"../utils\";\n\nconst FORMAT_OPTIONS = [\n { value: \"hex\", label: \"HEX\" },\n { value: \"rgb\", label: \"RGB\" },\n { value: \"hsb\", label: \"HSB\" },\n];\n\ninterface ColorInputsProps {\n color: Hsba;\n format: ColorFormat;\n onFormatChange: (format: ColorFormat) => void;\n disabledAlpha: boolean;\n disabled?: boolean;\n /** Girişten gelen değer kesin bir değerdir — `onChangeComplete` de tetiklenir. */\n onChange: (color: Hsba) => void;\n}\n\n/** Hex: 6/8 hane yazılınca anında, 3/4 hane alandan çıkınca/Enter'da uygulanır; geçersizse eski değere döner. */\nfunction HexInput({ color, disabled, onChange }: Readonly<{ color: Hsba; disabled?: boolean; onChange: (c: Hsba) => void }>) {\n const hex = colorInfo(color).hex.slice(1);\n const [text, setText] = useState(hex);\n // Dışarıdan (alan/kaydırıcı) değişince metni eşitle.\n useEffect(() => setText(hex), [hex]);\n\n const commit = (value: string) => {\n const parsed = parseColor(`#${value}`);\n // Hex'te ton bilgisi yoksa (gri) mevcut tonu koru.\n if (parsed) onChange(parsed.s === 0 ? { ...parsed, h: color.h } : parsed);\n else setText(hex);\n };\n\n return (\n <Input\n size=\"sm\"\n aria-label=\"Hex renk kodu\"\n icon={<span className=\"text-mari-muted\">#</span>}\n value={text}\n maxLength={8}\n autoComplete=\"off\"\n disabled={disabled}\n className=\"min-w-0 flex-1 font-mono uppercase\"\n onChange={(e) => {\n const next = e.target.value.replace(/[^\\da-f]/gi, \"\");\n setText(next);\n if (next.length === 6 || next.length === 8) commit(next);\n }}\n onBlur={() => commit(text)}\n onPressEnter={() => commit(text)}\n />\n );\n}\n\ninterface ChannelProps {\n label: string;\n value: number;\n max: number;\n disabled?: boolean;\n onChange: (value: number) => void;\n}\n\nfunction Channel({ label, value, max, disabled, onChange }: Readonly<ChannelProps>) {\n return (\n <InputNumber\n size=\"sm\"\n aria-label={label}\n value={Math.round(value)}\n min={0}\n max={max}\n controls={false}\n grouping={false}\n disabled={disabled}\n className=\"min-w-0 flex-1\"\n onChange={(v) => v !== null && onChange(clamp(v, 0, max))}\n />\n );\n}\n\nfunction ChannelInputs({ color, format, disabled, onChange }: Readonly<{ color: Hsba; format: \"rgb\" | \"hsb\"; disabled?: boolean; onChange: (c: Hsba) => void }>) {\n if (format === \"hsb\") {\n return (\n <>\n <Channel label=\"Ton\" value={color.h} max={360} disabled={disabled} onChange={(h) => onChange({ ...color, h })} />\n <Channel label=\"Doygunluk\" value={color.s} max={100} disabled={disabled} onChange={(s) => onChange({ ...color, s })} />\n <Channel label=\"Parlaklık\" value={color.b} max={100} disabled={disabled} onChange={(b) => onChange({ ...color, b })} />\n </>\n );\n }\n const rgba = hsbToRgb(color);\n const set = (patch: Partial<typeof rgba>) => {\n const next = rgbToHsb({ ...rgba, ...patch });\n onChange(next.s === 0 ? { ...next, h: color.h } : next);\n };\n return (\n <>\n <Channel label=\"Kırmızı\" value={rgba.r} max={255} disabled={disabled} onChange={(r) => set({ r })} />\n <Channel label=\"Yeşil\" value={rgba.g} max={255} disabled={disabled} onChange={(g) => set({ g })} />\n <Channel label=\"Mavi\" value={rgba.b} max={255} disabled={disabled} onChange={(b) => set({ b })} />\n </>\n );\n}\n\n/** Biçim seçimi (HEX/RGB/HSB) + o biçimin alanları + saydamlık yüzdesi. */\nexport function ColorInputs({ color, format, onFormatChange, disabledAlpha, disabled, onChange }: Readonly<ColorInputsProps>) {\n return (\n <div className=\"flex flex-col gap-2\">\n <Segmented size=\"sm\" block aria-label=\"Renk biçimi\" options={FORMAT_OPTIONS} value={format} disabled={disabled} onChange={(v) => onFormatChange(v as ColorFormat)} />\n <div className=\"flex items-center gap-1\">\n {format === \"hex\" ? (\n <HexInput color={color} disabled={disabled} onChange={onChange} />\n ) : (\n <ChannelInputs color={color} format={format} disabled={disabled} onChange={onChange} />\n )}\n {!disabledAlpha && (\n <InputNumber\n size=\"sm\"\n aria-label=\"Opaklık\"\n value={Math.round(color.a * 100)}\n min={0}\n max={100}\n suffix=\"%\"\n controls={false}\n disabled={disabled}\n className=\"w-16 shrink-0\"\n onChange={(v) => v !== null && onChange({ ...color, a: clamp(v, 0, 100) / 100 })}\n />\n )}\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport { useId, useState } from \"react\";\nimport { CheckIcon, ChevronRightIcon } from \"lucide-react\";\nimport { cn } from \"@mari-ui/core\";\nimport type { ColorPreset, Hsba } from \"../types\";\nimport { describeColor, isLight, parseColor, sameColor } from \"../utils\";\nimport { Swatch } from \"./Swatch\";\n\ninterface PresetGroupProps {\n preset: ColorPreset;\n current: Hsba | null;\n disabled?: boolean;\n onPick: (color: Hsba) => void;\n}\n\nfunction PresetGroup({ preset, current, disabled, onPick }: Readonly<PresetGroupProps>) {\n const [open, setOpen] = useState(preset.defaultOpen ?? true);\n const listId = useId();\n const colors = preset.colors.map((text) => ({ text, hsba: parseColor(text) })).filter((c): c is { text: string; hsba: Hsba } => c.hsba !== null);\n\n return (\n <div>\n <button\n type=\"button\"\n aria-expanded={open}\n aria-controls={listId}\n onClick={() => setOpen(!open)}\n className=\"flex w-full items-center gap-1 rounded-sm py-0.5 pointer-coarse:py-3 text-left text-xs text-mari-muted outline-none hover:text-mari-foreground focus-visible:ring-2 focus-visible:ring-mari-ring\"\n >\n <ChevronRightIcon aria-hidden size={14} className={cn(\"transition-transform duration-150 motion-reduce:transition-none\", open && \"rotate-90\")} />\n {preset.label}\n </button>\n <ul id={listId} hidden={!open} className=\"mt-1.5 grid grid-cols-10 gap-1.5 pointer-coarse:grid-cols-5\">\n {colors.map(({ text, hsba }) => {\n const selected = sameColor(current, hsba);\n return (\n <li key={text} className=\"flex\">\n <button\n type=\"button\"\n aria-label={describeColor(hsba)}\n aria-pressed={selected}\n disabled={disabled}\n onClick={() => onPick(hsba)}\n className=\"relative aspect-square w-full rounded-sm outline-none focus-visible:ring-2 focus-visible:ring-mari-ring focus-visible:ring-offset-1 focus-visible:ring-offset-mari-surface disabled:cursor-not-allowed\"\n >\n <Swatch color={hsba} className=\"size-full rounded-sm\" />\n {selected && (\n <CheckIcon\n aria-hidden\n size={12}\n strokeWidth={3}\n className={cn(\"absolute inset-0 m-auto\", isLight(hsba) ? \"text-mari-neutral-solid\" : \"text-white\")}\n />\n )}\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n\n/** Hazır renk grupları; her grup başlığı açılır/kapanır. Seçili renk ✓ ve `aria-pressed`. */\nexport function ColorPresets({ presets, current, disabled, onPick }: Readonly<{ presets: ColorPreset[]; current: Hsba | null; disabled?: boolean; onPick: (color: Hsba) => void }>) {\n return (\n <div className=\"flex flex-col gap-2 border-t border-mari-border pt-2\">\n {presets.map((preset, i) => (\n // Başlık ReactNode olabilir — sıra anahtarı.\n <PresetGroup key={i} preset={preset} current={current} disabled={disabled} onPick={onPick} />\n ))}\n </div>\n );\n}\n","import { cn } from \"@mari-ui/core\";\nimport type { Hsba } from \"../types\";\nimport { colorInfo } from \"../utils\";\n\n/**\n * Saydamlığı gösteren dama deseni — tema token'larından (açık/koyu temada\n * zeminle uyumlu), boyutu rem.\n */\nexport const CHECKER_CLASS =\n \"bg-[conic-gradient(var(--mari-color-border)_25%,var(--mari-color-surface)_0_50%,var(--mari-color-border)_0_75%,var(--mari-color-surface)_0)] bg-[length:0.5rem_0.5rem]\";\n\n/** Renk yok: zemin + köşeden köşeye kırmızı çizgi. */\nconst EMPTY_CLASS = \"bg-mari-surface bg-[linear-gradient(to_top_right,transparent_calc(50%-1px),var(--mari-color-error)_calc(50%-1px)_calc(50%+1px),transparent_calc(50%+1px))]\";\n\ninterface SwatchProps {\n color: Hsba | null;\n className?: string;\n}\n\n/** Rengi dama deseni üstünde gösteren kutu; içi dolu, kenarında ince çizgi (beyaz rengi zeminden ayırır). */\nexport function Swatch({ color, className }: Readonly<SwatchProps>) {\n if (!color) return <span aria-hidden className={cn(\"block shrink-0 border border-mari-border\", EMPTY_CLASS, className)} />;\n return (\n <span aria-hidden className={cn(\"relative block shrink-0 overflow-hidden border border-mari-border\", CHECKER_CLASS, className)}>\n <span className=\"absolute inset-0\" style={{ backgroundColor: colorInfo(color).rgb }} />\n </span>\n );\n}\n","\"use client\";\n\nimport type React from \"react\";\nimport { cn } from \"@mari-ui/core\";\nimport { sliderKeyStep } from \"../utils\";\nimport { CHECKER_CLASS } from \"./Swatch\";\nimport { usePointerDrag } from \"./usePointerDrag\";\n\n/** Gökkuşağı (ton) şeridi: 0–360 arası saf tonlar. */\nexport const HUE_GRADIENT = \"linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%)\";\n\ninterface ColorSliderProps {\n label: string;\n value: number;\n min: number;\n max: number;\n step?: number;\n valueText: string;\n /** Şeridin CSS arka planı. */\n background: string;\n /** Saydamlık şeridi: arkada dama deseni. */\n checker?: boolean;\n /** Tutamacın iç rengi. */\n thumbColor: string;\n disabled?: boolean;\n onChange: (value: number) => void;\n onChangeEnd: () => void;\n}\n\n/** Ton ve saydamlık için yatay kaydırıcı (`role=\"slider\"`; ←/→ ↑/↓, Shift ile 10×, PageUp/Down, Home/End). */\nexport function ColorSlider({ label, value, min, max, step = 1, valueText, background, checker, thumbColor, disabled, onChange, onChangeEnd }: Readonly<ColorSliderProps>) {\n const drag = usePointerDrag(({ x }) => onChange(Math.round((min + x * (max - min)) / step) * step), onChangeEnd);\n const ratio = (value - min) / (max - min);\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n const next = sliderKeyStep(e.key, e.shiftKey, value, min, max, step);\n if (next === null) return;\n e.preventDefault();\n onChange(next);\n onChangeEnd();\n };\n\n return (\n <div\n role=\"slider\"\n tabIndex={disabled ? -1 : 0}\n aria-label={label}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-valuetext={valueText}\n aria-orientation=\"horizontal\"\n aria-disabled={disabled || undefined}\n onKeyDown={disabled ? undefined : onKeyDown}\n {...(disabled ? {} : drag)}\n // Dikey dolgu: tutamaç şeritten büyük, tıklama alanı da onu kapsasın.\n className=\"group relative w-full cursor-pointer touch-none py-1 outline-none select-none pointer-coarse:py-[1.125rem]\"\n >\n <div aria-hidden className={cn(\"relative h-2 overflow-hidden rounded-full\", checker && CHECKER_CLASS)}>\n <div className=\"absolute inset-0\" style={{ background }} />\n </div>\n <span\n aria-hidden\n className={cn(\n \"pointer-events-none absolute top-1/2 size-3.5 -translate-1/2 rounded-full border-2 border-white shadow-mari-sm ring-1 ring-mari-border\",\n \"group-focus-visible:ring-2 group-focus-visible:ring-mari-ring\"\n )}\n // Tutamaç şeridin dışına taşmasın: merkezi yarıçap kadar içeriden başlar.\n style={{ left: `calc(0.4375rem + ${ratio} * (100% - 0.875rem))`, backgroundColor: thumbColor }}\n />\n </div>\n );\n}\n"],"mappings":"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","names":["useEffect","useId","useRef","useState","cn","jsx","jsxs","useState","cn","cn","jsx","cn","jsx","jsxs","useState","cn","cn","jsx","jsxs","cn","Fragment","jsx","jsxs","useState","useRef","useEffect","useId","cn"]}
@@ -2,10 +2,10 @@
2
2
 
3
3
  import {
4
4
  SkeletonSlot
5
- } from "./chunk-DKENCYHA.js";
5
+ } from "./chunk-MXGY2ENX.js";
6
6
  import {
7
7
  touchTargetClass
8
- } from "./chunk-FFXRFQSU.js";
8
+ } from "./chunk-POBOJBNJ.js";
9
9
  import {
10
10
  bgSolidClass,
11
11
  bgSubtleClass,
@@ -13,10 +13,10 @@ import {
13
13
  textClass,
14
14
  textSolidContrastClass,
15
15
  textSubtleContrastClass
16
- } from "./chunk-IP2J3BWY.js";
16
+ } from "./chunk-6AMBZXZJ.js";
17
17
  import {
18
18
  skeletonFill
19
- } from "./chunk-54HHEXXD.js";
19
+ } from "./chunk-VKN374SD.js";
20
20
 
21
21
  // src/pagination/Pagination.tsx
22
22
  import { useEffect, useRef, useState } from "react";
@@ -398,4 +398,4 @@ function SimplePageInput({
398
398
  export {
399
399
  Pagination
400
400
  };
401
- //# sourceMappingURL=chunk-TXRQCHOR.js.map
401
+ //# sourceMappingURL=chunk-ZAR3SCPV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pagination/Pagination.tsx","../src/pagination/utils.ts"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronsLeftIcon, ChevronsRightIcon, MoreHorizontalIcon } from \"lucide-react\";\nimport { cn, useControllableState, type ColorRole, type Size } from \"@mari-ui/core\";\nimport {\n bgSolidClass,\n bgSubtleClass,\n borderStrongColorClass,\n textClass,\n textSolidContrastClass,\n textSubtleContrastClass,\n} from \"../lib/colorClasses\";\nimport { touchTargetClass } from \"../lib/sizeClasses\";\nimport { skeletonFill } from \"../lib/skeleton\";\nimport { SkeletonSlot } from \"../lib/SkeletonSlot\";\nimport type { PaginationAlign, PaginationProps, PaginationVariant } from \"./types\";\nimport { clampPage, fitSiblingCount, getItemRange, getJumpSize, getPageAfterSizeChange, getPageItems, getTotalPages, resolvePageClickTarget } from \"./utils\";\n\n/**\n * Kapsayıcı genişliğini izleyip sığan komşu sayısını seçer (`-1` → `simple`).\n * Slot genişliği gerçek DOM'dan ölçülür (iki/üç basamaklı sayılar kareyi\n * genişletir) ve saklanır — `simple`e geçildiğinde de yeniden hesap yapılabilsin.\n * `ResizeObserver` yoksa (SSR, jsdom) istenen `siblingCount` aynen kullanılır.\n */\nfunction useFittedSiblings(rootRef: React.RefObject<HTMLDivElement | null>, navRef: React.RefObject<HTMLElement | null>, totalPages: number, siblingCount: number, size: Size): number {\n const [fitted, setFitted] = useState(siblingCount);\n const slotRef = useRef<{ width: number; gap: number } | null>(null);\n\n useEffect(() => {\n // Boyut değişince eski ölçü geçersiz.\n slotRef.current = null;\n setFitted(siblingCount);\n }, [siblingCount, size]);\n\n useEffect(() => {\n const root = rootRef.current;\n if (!root || typeof ResizeObserver === \"undefined\") return;\n const measure = () => {\n const list = navRef.current?.querySelector(\"ul\");\n if (list && list.children.length > 0) {\n const gap = Number.parseFloat(getComputedStyle(list).columnGap) || 0;\n slotRef.current = { width: (list.scrollWidth + gap) / list.children.length - gap, gap };\n }\n const slot = slotRef.current;\n if (!slot) return;\n setFitted(fitSiblingCount(root.clientWidth, slot.width, slot.gap, totalPages, siblingCount));\n };\n measure();\n const observer = new ResizeObserver(measure);\n observer.observe(root);\n return () => observer.disconnect();\n }, [rootRef, navRef, totalPages, siblingCount, size]);\n\n return fitted;\n}\n\nexport type { PaginationProps };\n\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100, 1000];\n\n/**\n * Öğeler `Button` yerine yerel bir `<button>` — Button'ın `px-*` dolgusu\n * sayı düğmelerini genişliğe göre farklı boyutlara itiyordu; burada her\n * öğe `min-w` = yükseklik olan bir karedir, iki basamaklı sayılar büyür.\n */\nconst itemSizeClass: Record<Size, string> = {\n sm: \"h-6 min-w-6 px-1 text-xs rounded-sm\",\n md: \"h-8 min-w-8 px-1.5 text-sm rounded-md\",\n lg: \"h-10 min-w-10 px-2 text-base rounded-md\",\n};\n\nconst gapClass: Record<Size, string> = {\n sm: \"gap-1\",\n md: \"gap-2\",\n lg: \"gap-2\",\n};\n\nconst textSizeClass: Record<Size, string> = {\n sm: \"text-xs\",\n md: \"text-sm\",\n lg: \"text-base\",\n};\n\nconst iconSize: Record<Size, number> = { sm: 14, md: 16, lg: 18 };\n\nconst alignClass: Record<PaginationAlign, string> = {\n start: \"justify-start\",\n center: \"justify-center\",\n end: \"justify-end\",\n between: \"justify-between\",\n};\n\nfunction activeClasses(color: ColorRole, variant: PaginationVariant): string {\n switch (variant) {\n case \"solid\":\n return cn(\"border-transparent\", bgSolidClass[color], textSolidContrastClass[color]);\n case \"soft\":\n return cn(\"border-transparent\", bgSubtleClass[color], textSubtleContrastClass[color]);\n default:\n return cn(\"bg-mari-surface\", borderStrongColorClass[color], textClass[color]);\n }\n}\n\nconst itemBaseClass =\n \"relative inline-flex shrink-0 items-center justify-center border tabular-nums select-none \" +\n \"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-mari-ring\";\n/**\n * Dokunmatikte yalnızca DİKEY genişleme: öğeler arası 8px boşluk yatayda\n * 44px'e tamamlamaya yetmiyor, kare genişleme komşunun alanına binerdi.\n */\nconst itemTouchClass: Record<Size, string> = {\n sm: touchTargetClass.sm,\n md: touchTargetClass.md,\n lg: touchTargetClass.lg,\n};\n/** İskelette düğme: kendi kare kutusunda dolgu, içerik görünmez, etkileşimsiz. */\nconst skeletonItemClass = cn(\"pointer-events-none border-transparent text-transparent [&_svg]:invisible\", skeletonFill(true));\nconst idleItemClass = \"border-transparent text-mari-foreground hover:bg-mari-neutral-subtle cursor-pointer\";\n// Sadece ok/\"…\" düğmelerinde hover geçişi. Sayfa numaralarında BİLİNÇLİ\n// OLARAK geçiş yok: aktif vurgu bir slottan diğerine geçerken 150ms'lik\n// solma, eski kutu kaybolurken yenisinin geç belirmesi olarak görünüyordu.\nconst hoverTransitionClass = \"transition-colors duration-150\";\n// `disabled` yerine `aria-disabled`: son sayfaya ulaşınca \"Sonraki\" düğmesi\n// gerçekten `disabled` olursa odak `<body>`'ye düşer, klavye kullanıcısı\n// yerini kaybeder. `aria-disabled` odağı korur, tıklama no-op olur.\nconst disabledItemClass = \"aria-disabled:opacity-40 aria-disabled:cursor-not-allowed aria-disabled:hover:bg-transparent\";\n\nconst fieldClass =\n \"border border-mari-input bg-mari-surface text-mari-foreground transition-colors hover:border-mari-primary \" +\n \"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-mari-ring\";\n\n/*\n * Faz 13.5'ten beri `TablePagination` bu component'i sarmalıyor — tek gerçek\n * sayfa-listesi mantığı burada (bkz. `utils.ts`).\n *\n * Faz 13.6:\n * - Sayfa listesi artık SABİT sayıda slot üretir; genişlik zıplamaz.\n * - \"…\" asla tek bir sayfayı gizlemez.\n * - Sayfa aralık dışına düşerse (toplam azaldı, sayfa boyutu büyüdü) son\n * geçerli sayfaya çekilir; eskiden \"901-247 / 247 kayıt\" yazıyordu.\n * - Kayıt yokken \"Sonraki\" düğmesi `onPageChange(0)` çağırabiliyordu.\n * - Aktif sayfaya tekrar tıklamak `onPageChange`'i çağırmaz (gereksiz fetch).\n * - Controlled + uncontrolled (`defaultPage`/`defaultPageSize`).\n */\n/**\n * Sayfalama: önceki/sonraki, sayfa numaraları (uzun listede `…` ile kısaltılır), isteğe\n * bağlı sayfa boyutu seçici ve sayfaya atlama; `simple` ile sade görünüm.\n */\nexport function Pagination({\n currentPage,\n defaultPage = 1,\n pageSize: pageSizeProp,\n defaultPageSize = 10,\n totalItems,\n onPageChange,\n onPageSizeChange,\n showSizeChanger,\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n showTotal = false,\n showQuickJumper = false,\n simple = false,\n siblingCount = 1,\n size = \"md\",\n color = \"primary\",\n variant = \"outline\",\n disabled = false,\n hideOnSinglePage = false,\n align = \"between\",\n className,\n \"aria-label\": ariaLabel = \"Sayfalama\",\n skeleton = false,\n}: Readonly<PaginationProps>) {\n const [rawPage, setRawPage] = useControllableState<number>({ value: currentPage, defaultValue: defaultPage });\n const [pageSize, setPageSize] = useControllableState<number>({ value: pageSizeProp, defaultValue: defaultPageSize });\n\n const totalPages = getTotalPages(totalItems, pageSize);\n const page = clampPage(rawPage, totalPages);\n const rootRef = useRef<HTMLDivElement>(null);\n const navRef = useRef<HTMLElement>(null);\n // Dar kapsayıcıda komşu sayısı azalır; 0 komşu bile sığmazsa `simple` görünüme geçilir.\n const fitted = useFittedSiblings(rootRef, navRef, totalPages, siblingCount, size);\n const siblings = Math.max(0, fitted);\n const compact = simple || fitted < 0;\n\n const goTo = (target: number, nextPageSize = pageSize) => {\n // İskelette toplam henüz gerçek değil — hiçbir yol (programatik tıklama dahil) sayfa değiştirmez.\n if (skeleton) return;\n const next = clampPage(target, getTotalPages(totalItems, nextPageSize));\n if (next === page && nextPageSize === pageSize) return;\n setRawPage(next);\n onPageChange?.(next, nextPageSize);\n };\n\n // Toplam kayıt azalınca (filtre, silme) mevcut sayfa aralık dışına\n // düşebilir. Ekranda zaten `clampPage` ile düzeltilmiş sayfa gösteriliyor;\n // burada tüketiciye de bildiriyoruz ki verisini o sayfaya göre getirsin.\n useEffect(() => {\n if (rawPage !== page) {\n setRawPage(page);\n onPageChange?.(page, pageSize);\n }\n // `onPageChange`/`setRawPage` her render'da yeni referans olabilir —\n // sadece sayfa gerçekten aralık dışına düştüğünde çalışsın.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rawPage, page]);\n\n const handlePageSizeChange = (nextSize: number) => {\n const nextPage = getPageAfterSizeChange(page, pageSize, nextSize, totalItems);\n setPageSize(nextSize);\n // Önce sayfa, sonra boyut: `onPageSizeChange` içinde `setPage(1)` yapan\n // eski tüketicilerin açık tercihi son sözü söylesin.\n if (nextPage !== page) {\n setRawPage(nextPage);\n onPageChange?.(nextPage, nextSize);\n }\n onPageSizeChange?.(nextSize, nextPage);\n };\n\n if (hideOnSinglePage && totalPages <= 1) return null;\n\n const range = getItemRange(page, pageSize, totalItems);\n const isFirst = page <= 1;\n const isLast = page >= totalPages;\n const sizeChangerVisible = showSizeChanger ?? onPageSizeChange !== undefined;\n const icon = iconSize[size];\n // İskelette düğmeler yerinde kalır (aynı kare kutu) ama dolgu olur, Tab sırasından çıkar.\n const itemClass = (stateClass: string) => cn(itemBaseClass, itemSizeClass[size], itemTouchClass[size], skeleton ? skeletonItemClass : stateClass);\n const skeletonTab = skeleton ? -1 : undefined;\n const barPlaceholder = <span className={cn(\"block size-full min-h-[1lh] rounded-md\", skeletonFill(true))} />;\n\n const navButton = (direction: \"prev\" | \"next\") => {\n const isEdge = direction === \"prev\" ? isFirst : isLast;\n const Icon = direction === \"prev\" ? ChevronLeftIcon : ChevronRightIcon;\n return (\n <button\n type=\"button\"\n tabIndex={skeletonTab}\n className={itemClass(cn(hoverTransitionClass, idleItemClass, disabledItemClass))}\n aria-label={direction === \"prev\" ? \"Önceki sayfa\" : \"Sonraki sayfa\"}\n aria-disabled={isEdge || disabled || undefined}\n onClick={() => {\n if (!isEdge && !disabled) goTo(direction === \"prev\" ? page - 1 : page + 1);\n }}\n >\n <Icon size={icon} aria-hidden />\n </button>\n );\n };\n\n const totalNode =\n showTotal === false ? null : (\n // Slot da metnin yazı boyutunu taşır: yer tutucunun `1lh`'si o satır yüksekliğine eşit olsun (yoksa 2px kayar).\n <SkeletonSlot on={skeleton} placeholder={barPlaceholder} className={textSizeClass[size]}>\n <p className={cn(\"text-mari-muted tabular-nums\", textSizeClass[size])}>\n {typeof showTotal === \"function\" ? showTotal(totalItems, range) : `${range[0]}-${range[1]} / ${totalItems} kayıt`}\n </p>\n </SkeletonSlot>\n );\n\n const pager = compact ? (\n <nav ref={navRef} aria-label={ariaLabel} aria-hidden={skeleton || undefined} className={cn(\"flex items-center\", gapClass[size])}>\n {navButton(\"prev\")}\n <SkeletonSlot on={skeleton} placeholder={barPlaceholder}>\n <SimplePageInput page={page} totalPages={totalPages} size={size} disabled={disabled} onCommit={goTo} />\n </SkeletonSlot>\n {navButton(\"next\")}\n </nav>\n ) : (\n <nav ref={navRef} aria-label={ariaLabel} aria-hidden={skeleton || undefined}>\n <ul className={cn(\"flex items-center\", gapClass[size])}>\n <li>{navButton(\"prev\")}</li>\n {/*\n Anahtar = SLOT SIRASI (sayfa numarası değil). Slot sayısı sabit\n olduğu için ortadaki aktif slot aynı DOM düğmesi kalır, sadece\n metni değişir. Eskiden anahtar sayfa numarasıydı: \"Sonraki\"ye\n basınca React \"6\" düğmesini bir slot sola TAŞIYOR, \"7\"yi ortaya\n getiriyordu — numaralar kayıyor, vurgu sönüp yeniden yanıyordu\n (Faz 13.6 kullanıcı bulgusu: \"next/prev'de kayıyor gibi\").\n */}\n {getPageItems(totalPages, page, siblings).map((item, slot) => {\n if (typeof item === \"object\") {\n const jump = getJumpSize(siblings);\n const JumpIcon = item.direction === \"left\" ? ChevronsLeftIcon : ChevronsRightIcon;\n return (\n <li key={slot}>\n <button\n type=\"button\"\n tabIndex={skeletonTab}\n className={itemClass(cn(hoverTransitionClass, idleItemClass, \"group text-mari-muted hover:text-mari-primary focus-visible:text-mari-primary\"))}\n aria-label={item.direction === \"left\" ? `${jump} sayfa geri` : `${jump} sayfa ileri`}\n title={item.direction === \"left\" ? `Önceki ${jump} sayfa` : `Sonraki ${jump} sayfa`}\n aria-disabled={disabled || undefined}\n onClick={() => !disabled && goTo(resolvePageClickTarget(item, page, totalPages, siblings))}\n >\n <MoreHorizontalIcon size={icon} aria-hidden className=\"group-hover:hidden group-focus-visible:hidden\" />\n <JumpIcon size={icon} aria-hidden className=\"hidden group-hover:block group-focus-visible:block\" />\n </button>\n </li>\n );\n }\n\n const isActive = item === page;\n return (\n <li key={slot}>\n <button\n type=\"button\"\n tabIndex={skeletonTab}\n className={itemClass(isActive ? cn(\"font-semibold cursor-default\", activeClasses(color, variant)) : idleItemClass)}\n aria-label={`${item}. sayfa`}\n aria-current={isActive ? \"page\" : undefined}\n aria-disabled={disabled || undefined}\n onClick={() => !disabled && goTo(item)}\n >\n {item}\n </button>\n </li>\n );\n })}\n <li>{navButton(\"next\")}</li>\n </ul>\n </nav>\n );\n\n const controls = (\n <div className={cn(\"flex flex-wrap items-center gap-x-4 gap-y-2\", align !== \"between\" && alignClass[align])}>\n {pager}\n {!simple && sizeChangerVisible && (\n <SkeletonSlot on={skeleton} placeholder={barPlaceholder}>\n <SizeChanger value={pageSize} options={pageSizeOptions} size={size} disabled={disabled} onChange={handlePageSizeChange} />\n </SkeletonSlot>\n )}\n {!simple && showQuickJumper && (\n <SkeletonSlot on={skeleton} placeholder={barPlaceholder}>\n <QuickJumper totalPages={totalPages} size={size} disabled={disabled} onCommit={goTo} />\n </SkeletonSlot>\n )}\n </div>\n );\n\n return (\n <div\n ref={rootRef}\n aria-busy={skeleton || undefined}\n className={cn(\n \"flex flex-wrap items-center gap-x-4 gap-y-2\",\n alignClass[align],\n disabled && \"pointer-events-none opacity-60\",\n className\n )}\n >\n {totalNode}\n {controls}\n </div>\n );\n}\n\nconst fieldHeightClass: Record<Size, string> = {\n sm: \"h-6 rounded-sm text-xs\",\n md: \"h-8 rounded-md text-sm\",\n lg: \"h-10 rounded-md text-base\",\n};\n\nfunction SizeChanger({\n value,\n options,\n size,\n disabled,\n onChange,\n}: Readonly<{\n value: number;\n options: number[];\n size: Size;\n disabled: boolean;\n onChange: (size: number) => void;\n}>) {\n // Mevcut boyut listede yoksa (ör. controlled `pageSize={15}`) yine de\n // seçili görünsün — native `<select>` aksi halde ilk seçeneği gösterir.\n const allOptions = options.includes(value) ? options : [...options, value].sort((a, b) => a - b);\n return (\n <div className=\"relative inline-flex\">\n <select\n value={value}\n disabled={disabled}\n aria-label=\"Sayfa başına kayıt\"\n onChange={(e) => onChange(Number(e.target.value))}\n className={cn(fieldClass, fieldHeightClass[size], \"cursor-pointer appearance-none pl-3 pr-8 tabular-nums\")}\n >\n {allOptions.map((option) => (\n <option key={option} value={option}>\n {option} / sayfa\n </option>\n ))}\n </select>\n <ChevronDownIcon size={iconSize[size] - 2} aria-hidden className=\"pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-mari-muted\" />\n </div>\n );\n}\n\n/** Sadece rakam kabul eden, Enter/blur'da atlayan küçük alan. */\nfunction usePageDraft(onCommit: (page: number) => void, initial = \"\") {\n const [draft, setDraft] = useState(initial);\n const commit = () => {\n const parsed = Number.parseInt(draft, 10);\n if (Number.isFinite(parsed)) onCommit(parsed);\n return parsed;\n };\n return { draft, setDraft, commit };\n}\n\nfunction QuickJumper({ totalPages, size, disabled, onCommit }: Readonly<{ totalPages: number; size: Size; disabled: boolean; onCommit: (page: number) => void }>) {\n const { draft, setDraft, commit } = usePageDraft(onCommit);\n const submit = () => {\n commit();\n setDraft(\"\");\n };\n return (\n <label className={cn(\"flex items-center gap-2 text-mari-muted\", textSizeClass[size])}>\n Git\n <input\n type=\"text\"\n inputMode=\"numeric\"\n value={draft}\n disabled={disabled}\n aria-label={`Sayfaya git (1-${totalPages})`}\n onChange={(e) => setDraft(e.target.value.replace(/\\D/g, \"\"))}\n onKeyDown={(e) => e.key === \"Enter\" && submit()}\n onBlur={submit}\n className={cn(fieldClass, fieldHeightClass[size], \"w-14 px-2 text-center tabular-nums\")}\n />\n </label>\n );\n}\n\nfunction SimplePageInput({\n page,\n totalPages,\n size,\n disabled,\n onCommit,\n}: Readonly<{\n page: number;\n totalPages: number;\n size: Size;\n disabled: boolean;\n onCommit: (page: number) => void;\n}>) {\n const { draft, setDraft, commit } = usePageDraft(onCommit, String(page));\n // Dışarıdan (ok düğmeleri, controlled prop) sayfa değişince alanı eşitle.\n useEffect(() => setDraft(String(page)), [page, setDraft]);\n const submit = () => {\n commit();\n // Geçersiz/aralık dışı girişte gerçek sayfaya geri dön.\n setDraft(String(page));\n };\n return (\n <span className={cn(\"flex items-center gap-2 text-mari-muted tabular-nums\", textSizeClass[size])}>\n <input\n type=\"text\"\n inputMode=\"numeric\"\n value={draft}\n disabled={disabled}\n aria-label={`Sayfa (1-${totalPages})`}\n onChange={(e) => setDraft(e.target.value.replace(/\\D/g, \"\"))}\n onKeyDown={(e) => e.key === \"Enter\" && submit()}\n onBlur={submit}\n className={cn(fieldClass, fieldHeightClass[size], \"w-12 px-1 text-center\")}\n />\n <span aria-hidden>/</span>\n <span>{totalPages}</span>\n </span>\n );\n}\n","import type { PageItem } from \"./types\";\n\n/** Toplam sayfa sayısı. Hiç kayıt yokken bile 1 döner — \"0. sayfa\" diye bir durum yoktur. */\nexport function getTotalPages(totalItems: number, pageSize: number): number {\n if (pageSize <= 0) return 1;\n return Math.max(1, Math.ceil(totalItems / pageSize));\n}\n\nexport function clampPage(page: number, totalPages: number): number {\n if (!Number.isFinite(page)) return 1;\n return Math.min(Math.max(1, Math.trunc(page)), Math.max(1, totalPages));\n}\n\n/**\n * Görünür sayfa listesini üretir. Eski algoritma (`current ± 2`) iki soruna\n * yol açıyordu:\n *\n * 1. Düğme sayısı sayfadan sayfaya DEĞİŞİYORDU (1. sayfada 5, 5. sayfada 9\n * öğe) — tüm bileşenin genişliği her tıklamada zıplıyor, tıklanan\n * düğmeler imlecin altından kayıyordu.\n * 2. \"…\" bazen TEK bir sayfayı gizliyordu (10 sayfada 5. sayfa: `1 … 3`) —\n * o slota doğrudan \"2\" yazmak aynı yeri kaplar ve bir tıklama kazandırır.\n *\n * Yeni algoritma sabit sayıda slot üretir (`siblingCount * 2 + 5`): ilk ve\n * son sayfa her zaman görünür, aktif sayfanın iki yanında `siblingCount`\n * komşu, aradaki boşluklar ya \"…\" ya da (tek sayfa gizleyecekse) o sayfanın\n * kendisidir.\n */\nexport function getPageItems(totalPages: number, currentPage: number, siblingCount = 1): PageItem[] {\n const siblings = Math.max(0, Math.trunc(siblingCount));\n const totalSlots = siblings * 2 + 5;\n\n if (totalPages <= totalSlots) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const current = clampPage(currentPage, totalPages);\n // Kenarlara yakınken pencere kaydırılır — slot sayısı sabit kalsın diye.\n const windowStart = Math.max(Math.min(current - siblings, totalPages - siblings * 2 - 2), 3);\n const windowEnd = Math.min(Math.max(current + siblings, siblings * 2 + 3), totalPages - 2);\n\n const items: PageItem[] = [1];\n items.push(windowStart > 3 ? { type: \"ellipsis\", direction: \"left\" } : 2);\n for (let page = windowStart; page <= windowEnd; page++) items.push(page);\n items.push(windowEnd < totalPages - 2 ? { type: \"ellipsis\", direction: \"right\" } : totalPages - 1);\n items.push(totalPages);\n\n return items;\n}\n\n/**\n * Dar kapsayıcıda (375px telefon) sayfa listesi taşıyordu. Verilen\n * genişliğe sığan en büyük komşu sayısını (`maxSiblings`'ten 0'a) döner;\n * 0 komşu bile sığmıyorsa `-1` (→ `simple` görünüm). Slot sayısı\n * `getPageItems` ile aynı: `min(toplam, 2s+5)` + önceki/sonraki okları.\n */\nexport function fitSiblingCount(available: number, slotWidth: number, gap: number, totalPages: number, maxSiblings: number): number {\n for (let siblings = Math.max(0, Math.trunc(maxSiblings)); siblings >= 0; siblings--) {\n const slots = Math.min(totalPages, siblings * 2 + 5) + 2;\n if (slots * slotWidth + (slots - 1) * gap <= available) return siblings;\n }\n return -1;\n}\n\n/** \"…\" düğmesinin kaç sayfa atlayacağı — görünür pencere genişliği kadar. */\nexport function getJumpSize(siblingCount = 1): number {\n return Math.max(0, Math.trunc(siblingCount)) * 2 + 3;\n}\n\nexport function resolvePageClickTarget(page: PageItem, currentPage: number, totalPages: number, siblingCount = 1): number {\n if (typeof page === \"number\") return clampPage(page, totalPages);\n const jump = getJumpSize(siblingCount);\n return clampPage(page.direction === \"left\" ? currentPage - jump : currentPage + jump, totalPages);\n}\n\n/*\n * Sayfa boyutu değiştiğinde kullanıcının baktığı İLK kaydı görünür tutan\n * sayfayı bulur. Eskiden sayfa numarası olduğu gibi kalıyordu — 10/sayfa'da\n * 10. sayfadayken 100/sayfa'ya geçince \"10. sayfa / 3 sayfa\" gibi aralık\n * dışı bir duruma düşülüyor, \"901-247 / 247 kayıt\" yazıyordu.\n */\nexport function getPageAfterSizeChange(currentPage: number, oldPageSize: number, newPageSize: number, totalItems: number): number {\n const firstItemIndex = (Math.max(1, currentPage) - 1) * oldPageSize;\n return clampPage(Math.floor(firstItemIndex / newPageSize) + 1, getTotalPages(totalItems, newPageSize));\n}\n\n/** `[başlangıç, bitiş]` — 1 tabanlı, kapsayıcı. Kayıt yoksa `[0, 0]`. */\nexport function getItemRange(currentPage: number, pageSize: number, totalItems: number): [number, number] {\n if (totalItems <= 0) return [0, 0];\n return [(currentPage - 1) * pageSize + 1, Math.min(currentPage * pageSize, totalItems)];\n}\n"],"mappings":"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","names":[]}
@@ -3,26 +3,26 @@ import {
3
3
  colorInfo,
4
4
  formatColor,
5
5
  parseColor
6
- } from "./chunk-QZRBO7BE.js";
7
- import "./chunk-QDFDMWXD.js";
8
- import "./chunk-LZHERDNB.js";
9
- import "./chunk-JNZODUXP.js";
10
- import "./chunk-V7KDUUV6.js";
11
- import "./chunk-NPM7IDYV.js";
12
- import "./chunk-P7Z5BREP.js";
13
- import "./chunk-XUKVQO6M.js";
14
- import "./chunk-S66GKX2W.js";
15
- import "./chunk-LEOIKO7C.js";
16
- import "./chunk-YZ7MDC6B.js";
6
+ } from "./chunk-Z4KFHRDW.js";
7
+ import "./chunk-CNWRDTEW.js";
8
+ import "./chunk-CXIWRNSP.js";
9
+ import "./chunk-OYDG6C54.js";
10
+ import "./chunk-RMNV2CE2.js";
11
+ import "./chunk-TSFAAREV.js";
12
+ import "./chunk-L6DBWUAB.js";
13
+ import "./chunk-6CSUVVFG.js";
14
+ import "./chunk-OAWUZIIN.js";
15
+ import "./chunk-RLWP6NJU.js";
16
+ import "./chunk-LNL4TCGL.js";
17
17
  import "./chunk-KSPM2Z3T.js";
18
- import "./chunk-DUCIAQGR.js";
19
- import "./chunk-LBQMEHK6.js";
20
- import "./chunk-3ABWBQCS.js";
21
- import "./chunk-NS7FKOFI.js";
22
- import "./chunk-TCYDVNSU.js";
23
- import "./chunk-FFXRFQSU.js";
24
- import "./chunk-IP2J3BWY.js";
25
- import "./chunk-54HHEXXD.js";
18
+ import "./chunk-NENNFQEY.js";
19
+ import "./chunk-NPFMPRII.js";
20
+ import "./chunk-GTNCXOUL.js";
21
+ import "./chunk-NYXU5EFE.js";
22
+ import "./chunk-MT4VH7QV.js";
23
+ import "./chunk-POBOJBNJ.js";
24
+ import "./chunk-6AMBZXZJ.js";
25
+ import "./chunk-VKN374SD.js";
26
26
  export {
27
27
  ColorPicker,
28
28
  colorInfo,