@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 +0,0 @@
1
- {"version":3,"sources":["../src/input/Input.tsx","../src/input/mention/useMention.tsx","../src/input/mention/caret.ts","../src/input/mention/utils.ts","../src/input/Textarea.tsx","../src/input/OtpInput.tsx","../src/input/_components/OtpSingleField.tsx","../src/input/SearchInput.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { forwardRef, useState } from \"react\";\nimport { InputMask } from \"@react-input/mask\";\nimport { skeletonBoxProps } from \"../lib/skeleton\";\nimport { touchTargetClass } from \"../lib/sizeClasses\";\nimport { cn, useControllableState } from \"@mari-ui/core\";\nimport { useFieldControl } from \"../lib/fieldContext\";\nimport type { InputProps } from \"./types\";\nimport { useMention } from \"./mention/useMention\";\nimport { ClearButton, clearIconOf, PasswordToggle } from \"./_components/FieldAdornments\";\nimport {\n FIELD_BASE_CLASS,\n FIELD_DISABLED_CLASS,\n FIELD_MOBILE_TEXT_CLASS,\n getShapeClasses,\n getSizeClasses,\n getVariantClasses,\n clearNativeValue,\n isClearable,\n} from \"./utils\";\n\nexport type { InputProps };\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>((outerProps, ref) => {\n // Field içindeyse id / aria-describedby / hata / required / disabled oradan tamamlanır.\n return <InputInner {...useFieldControl(outerProps)} forwardedRef={ref} />;\n});\n\nInput.displayName = \"Input\";\n\nconst InputInner = (\n {\n forwardedRef: ref,\n placeholder,\n allowClear = false,\n clearLabel = \"Temizle\",\n skeleton = false,\n classNames = {},\n className = \"\",\n style,\n count,\n defaultValue = \"\",\n disabled = false,\n id,\n maxLength,\n icon,\n iconPosition = \"start\",\n showCount,\n color,\n size = \"md\",\n shape = \"default\",\n type = \"text\",\n value,\n variant = \"outline\",\n onChange,\n onPressEnter,\n onClear,\n onFocus,\n onBlur,\n onKeyDown,\n onInput,\n onPaste,\n mask,\n replacement = { _: /\\d/ },\n visibilityToggle,\n visibilityIconRender,\n max,\n min,\n mentions,\n ...nativeProps\n }: InputProps & { forwardedRef: React.ForwardedRef<HTMLInputElement> }\n ) => {\n const innerRef = React.useRef<HTMLInputElement | null>(null);\n const setRefs = (el: HTMLInputElement | null) => {\n innerRef.current = el;\n if (typeof ref === \"function\") ref(el);\n else if (ref) ref.current = el;\n };\n // `color` varsayılansız: verilmezse dinlenmede nötr, odakta primary (bkz. `getVariantClasses`).\n // `error` rengi aynı zamanda gerçek bir doğrulama durumudur — ekran\n // okuyucuya da bildirilsin diye `aria-invalid` otomatik eklenir\n // (tüketici zaten kendi `aria-invalid`'ini verdiyse o kazanır).\n const ariaInvalid = nativeProps[\"aria-invalid\"] ?? (color === \"error\" || undefined);\n // `onChange` burada hook'a geçirilmiyor — tam ChangeEvent'i tüketiciye\n // iletmek için `handleChange` içinde ayrıca çağrılıyor.\n const [currentValue, setCurrentValue] = useControllableState<string>({ value, defaultValue });\n const [passwordVisible, setPasswordVisible] = useState(false);\n\n const showPasswordToggle = type === \"password\" && visibilityToggle !== false;\n\n // İç içe ternary yerine ayrık if — SonarJS'in `no-nested-conditional`\n // kuralı bunu okunurluk için haklı olarak istiyordu (Faz 8).\n let inputType = type;\n if (showPasswordToggle) inputType = passwordVisible ? \"text\" : \"password\";\n const charCount = currentValue.length;\n // Ayrık değişken — iç içe template literal yerine (Faz 8, SonarJS `no-nested-template-literals`).\n const countLabel = maxLength ? `${charCount} / ${maxLength}` : `${charCount}`;\n const showClear = isClearable(allowClear) && Boolean(currentValue) && !disabled;\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setCurrentValue(e.target.value);\n onChange?.(e);\n };\n\n // Maskeli alanda bahsetme yok (maske metni yeniden biçimlendirir).\n const mention = useMention(mask ? undefined : mentions, innerRef, currentValue, \"input\");\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n // Açık öneri listesinde Enter bir öneri seçer — formu göndermesin / onPressEnter tetiklenmesin.\n const handledByMention = mention.handleKeyDown(e);\n if (e.key === \"Enter\" && !handledByMention) onPressEnter?.(e);\n onKeyDown?.(e);\n };\n\n // Temizledikten sonra odak alana döner — kullanıcı hemen yeniden yazabilsin\n // (buton kaybolduğu için odak aksi halde <body>'ye düşüyordu).\n const handleClear = () => {\n // onChange'i gerçek olayla tetikler (handleChange → iç state + tüketici).\n clearNativeValue(innerRef.current);\n onClear?.();\n innerRef.current?.focus();\n };\n\n // Geometri iskeletle ORTAK (boyut + şekil) — yüklenince kutu zıplamaz.\n const geometryClass = cn(\"flex w-full items-center gap-2\", getSizeClasses(size), getShapeClasses(shape, variant));\n\n if (skeleton) {\n return <div {...skeletonBoxProps(cn(geometryClass, classNames.wrapper, className))} style={style} />;\n }\n\n const wrapperClass = cn(\n geometryClass,\n \"group relative cursor-text\",\n touchTargetClass[size],\n FIELD_BASE_CLASS,\n getVariantClasses(variant, color),\n disabled && FIELD_DISABLED_CLASS,\n classNames.wrapper,\n className\n );\n const adornmentClass = \"flex shrink-0 items-center text-mari-muted\";\n\n // Kutunun input DIŞINDAKİ alanına (dolgu, ikon, dokunmatikte genişletilmiş\n // alan) tıklamak da alanı odaklar — eskiden sadece metin satırının kendisi\n // tıklanabilirdi. İç butonlar (temizle, şifre) kendi işini yapar.\n const handleWrapperMouseDown = (e: React.MouseEvent<HTMLDivElement>) => {\n const target = e.target as HTMLElement;\n if (disabled || innerRef.current?.contains(target) || target.closest(\"button\")) return;\n e.preventDefault();\n innerRef.current?.focus();\n };\n\n // `w-full min-w-0`: native <input>'un tarayıcı varsayılanı ~20 karakterlik\n // bir içsel genişliktir (≈250px) ve bu, kapsayıcının min-content boyutuna\n // katkı olarak sızıp dar grid kolonlarını (mobil form) taşırıyordu —\n // `min-w-0` tek başına yetmez, yüzdelik genişlik bu katkıyı sıfırlar\n // (Faz 13.6 Steps mobil incelemesinde bulundu).\n const inputClass = cn(\"w-full min-w-0 flex-grow bg-transparent placeholder:text-mari-muted focus:outline-none disabled:cursor-not-allowed\", FIELD_MOBILE_TEXT_CLASS, classNames.input);\n\n return (\n <>\n {/* Fare kısayolu; klavye kullanıcısı zaten doğrudan <input>'a sekmeyle gelir. */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div className={wrapperClass} style={style} onMouseDown={handleWrapperMouseDown}>\n {/* Boşluk wrapper'ın `gap-*`'ından gelir — eskiden ayrıca `mr-2` vardı, ikon ile metin arası 2 katıydı. */}\n {icon && iconPosition === \"start\" && <span className={cn(adornmentClass, classNames.icon)}>{icon}</span>}\n\n {mask ? (\n <InputMask\n ref={setRefs}\n id={id}\n mask={mask}\n replacement={replacement}\n disabled={disabled}\n type={inputType}\n maxLength={maxLength}\n placeholder={placeholder}\n value={currentValue}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n onInput={onInput}\n onPaste={onPaste}\n className={inputClass}\n {...nativeProps}\n aria-invalid={ariaInvalid}\n />\n ) : (\n <input\n ref={setRefs}\n id={id}\n disabled={disabled}\n type={inputType}\n maxLength={maxLength}\n placeholder={placeholder}\n value={currentValue}\n {...mention.controlProps}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={onFocus}\n onBlur={(e) => {\n mention.close();\n onBlur?.(e);\n }}\n onInput={onInput}\n onPaste={onPaste}\n className={inputClass}\n max={max}\n min={min}\n {...nativeProps}\n aria-invalid={ariaInvalid}\n />\n )}\n\n {allowClear && <ClearButton visible={showClear} label={clearLabel} icon={clearIconOf(allowClear)} onClear={handleClear} className={classNames.clear} />}\n\n {(showCount || count?.formatter) && (\n <span className={cn(\"flex flex-none items-center text-xs tabular-nums text-mari-muted\", classNames.count)}>\n {count?.formatter ? count.formatter({ value: currentValue, count: charCount, maxLength }) : countLabel}\n </span>\n )}\n\n {icon && iconPosition === \"end\" && <span className={cn(adornmentClass, classNames.icon)}>{icon}</span>}\n\n {showPasswordToggle && (\n <PasswordToggle visible={passwordVisible} disabled={disabled} onToggle={() => setPasswordVisible((prev) => !prev)} iconRender={visibilityIconRender} />\n )}\n </div>\n {mention.panel}\n </>\n );\n };\n","\"use client\";\n\nimport type React from \"react\";\nimport { useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport type { FloatingCoords } from \"../../lib/useFloatingPosition\";\nimport { optionDomId, SelectPanel } from \"../../select/_components/SelectPanel\";\nimport type { SelectOption } from \"../../select/types\";\nimport type { MentionOption, MentionsConfig } from \"./types\";\nimport { getCaretRect } from \"./caret\";\nimport { filterMentionOptions, findMention, insertMention, type MentionMatch } from \"./utils\";\n\ntype Field = HTMLInputElement | HTMLTextAreaElement;\n\nconst GAP_PX = 4;\nconst EDGE_PX = 8;\n/** Panel genişliği (rem) — kök yazı boyutuyla ölçeklenir. */\nconst PANEL_WIDTH_REM = 16;\n\nconst toSelectOption = (o: MentionOption): SelectOption => ({ value: o.value, label: o.label ?? o.value, icon: o.icon, description: o.description, disabled: o.disabled });\n\n/** React'in kontrollü alanına değeri \"kullanıcı yazmış gibi\" verir → bileşenin onChange'i gerçek olayla çalışır. */\nfunction setNativeValue(el: Field, text: string) {\n const proto = el instanceof HTMLTextAreaElement ? HTMLTextAreaElement.prototype : HTMLInputElement.prototype;\n Object.getOwnPropertyDescriptor(proto, \"value\")?.set?.call(el, text);\n el.dispatchEvent(new Event(\"input\", { bubbles: true }));\n}\n\nfunction nextEnabled(options: MentionOption[], from: number, step: 1 | -1): number {\n const n = options.length;\n for (let i = 1; i <= n; i++) {\n const idx = (((from + step * i) % n) + n) % n;\n if (!options[idx]!.disabled) return idx;\n }\n return -1;\n}\n\n/** Eşleşmenin tetiğine göre liste, sorguya göre süzülmüş. */\nfunction resolveOptions(config: MentionsConfig | undefined, match: MentionMatch | null): MentionOption[] {\n if (!config || !match) return [];\n const all = typeof config.options === \"function\" ? config.options(match.prefix) : config.options;\n return filterMentionOptions(all, match.query, config.filterOption);\n}\n\n/** Panel konumu: imlecin altında; sığmazsa üstünde; yatayda ekrana sığdırılır. */\nfunction useCaretPosition(open: boolean, elRef: React.RefObject<Field | null>, panelRef: React.RefObject<HTMLDivElement | null>, match: MentionMatch | null, deps: unknown) {\n const [coords, setCoords] = useState<FloatingCoords | null>(null);\n useLayoutEffect(() => {\n if (!open || !match) {\n setCoords(null);\n return;\n }\n const measure = () => {\n const el = elRef.current;\n const panel = panelRef.current;\n if (!el) return;\n const caret = getCaretRect(el, match.start);\n const width = panel?.offsetWidth ?? 0;\n const height = panel?.offsetHeight ?? 0;\n let top = caret.top + caret.height + GAP_PX;\n if (top + height > window.innerHeight - EDGE_PX && caret.top - GAP_PX - height > EDGE_PX) top = caret.top - GAP_PX - height;\n const left = Math.max(EDGE_PX, Math.min(caret.left, window.innerWidth - width - EDGE_PX));\n setCoords({ top, left, side: \"bottom\", arrowOffset: 0, anchorWidth: PANEL_WIDTH_REM * Number.parseFloat(getComputedStyle(document.documentElement).fontSize) });\n };\n measure();\n // İlk ölçümde panel henüz boyutsuz olabilir; bir kare sonra gerçek boyutla yeniden.\n const raf = requestAnimationFrame(measure);\n window.addEventListener(\"scroll\", measure, true);\n window.addEventListener(\"resize\", measure);\n return () => {\n cancelAnimationFrame(raf);\n window.removeEventListener(\"scroll\", measure, true);\n window.removeEventListener(\"resize\", measure);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- `deps`: liste uzunluğu değişince yeniden ölç\n }, [open, match?.start, match?.prefix, deps]);\n return coords;\n}\n\n/**\n * Input ve Textarea'nın ortak `mentions` davranışı. Döndürdüğü `controlProps`\n * alana yayılır (ARIA + klavye + imleç izleme), `panel` alanın yanına çizilir.\n * Odak hep alanda kalır; aktif öneri `aria-activedescendant` (APG combobox).\n */\nexport function useMention(config: MentionsConfig | undefined, elRef: React.RefObject<Field | null>, value: string, kind: \"input\" | \"textarea\") {\n const enabled = config !== undefined;\n const prefixes = useMemo(() => {\n const p = config?.prefix ?? \"@\";\n return Array.isArray(p) ? p : [p];\n }, [config?.prefix]);\n const split = config?.split ?? \" \";\n const [match, setMatch] = useState<MentionMatch | null>(null);\n const [dismissedAt, setDismissedAt] = useState<number | null>(null);\n const [activeIndex, setActiveIndex] = useState(0);\n const panelRef = useRef<HTMLDivElement>(null);\n const listboxId = useId();\n const lastQuery = useRef<string | null>(null);\n\n const options = useMemo(() => resolveOptions(config, match), [config, match]);\n const notFound = config?.notFoundContent === undefined ? \"Sonuç bulunamadı\" : config.notFoundContent;\n const open = enabled && match !== null && dismissedAt !== match.start && (options.length > 0 || !!config?.loading || notFound !== null);\n // SelectPanel aktif satırı nesne kimliğiyle bulur — iki listeye AYNI dizi verilmeli.\n const selectOptions = useMemo(() => options.map(toSelectOption), [options]);\n const coords = useCaretPosition(open, elRef, panelRef, match, options.length);\n\n /** İmlece göre eşleşmeyi yeniden hesapla (yazınca, imleç oynayınca, odakta). */\n const sync = () => {\n const el = elRef.current;\n if (!enabled || !el) return;\n const caret = el.selectionStart;\n const next = caret !== null && caret === el.selectionEnd ? findMention(el.value, caret, prefixes) : null;\n setMatch((prev) => (prev?.start === next?.start && prev?.query === next?.query && prev?.prefix === next?.prefix ? prev : next));\n if (!next) setDismissedAt(null);\n };\n\n // Değer değişince (yazma, yapıştırma, dışarıdan) eşleşmeyi güncelle.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(sync, [value, enabled]);\n\n // Sorgu değişince: aktif satır başa, sunucu araması bildirimi.\n useEffect(() => {\n setActiveIndex(0);\n const key = match ? `${match.prefix}${match.start}:${match.query}` : null;\n if (match && key !== lastQuery.current) config?.onSearch?.(match.query, match.prefix);\n lastQuery.current = key;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [match]);\n\n // Klavyeyle gezinirken aktif öneri listenin görünür alanında kalsın (Select ile aynı).\n const activeId = open && options[activeIndex] ? optionDomId(listboxId, selectOptions[activeIndex]!) : undefined;\n useEffect(() => {\n if (activeId) document.getElementById(activeId)?.scrollIntoView?.({ block: \"nearest\" });\n }, [activeId]);\n\n const choose = (option: MentionOption) => {\n const el = elRef.current;\n if (!el || !match || option.disabled) return;\n const caret = el.selectionStart ?? el.value.length;\n const result = insertMention(el.value, match, caret, option.value, split);\n setNativeValue(el, result.text);\n el.setSelectionRange(result.caret, result.caret);\n // Kontrollü alanda React yeniden çizince imleç sona kaçmasın.\n requestAnimationFrame(() => el.setSelectionRange(result.caret, result.caret));\n setMatch(null);\n config?.onSelect?.(option, match.prefix);\n };\n\n /** `true` → tuş mention tarafından işlendi (bileşen kendi Enter davranışını çalıştırmasın). */\n const handleKeyDown = (e: React.KeyboardEvent): boolean => {\n if (!open || !match) return false;\n const active = options[activeIndex];\n switch (e.key) {\n case \"ArrowDown\":\n case \"ArrowUp\": {\n e.preventDefault();\n if (options.length) setActiveIndex((i) => Math.max(0, nextEnabled(options, i, e.key === \"ArrowDown\" ? 1 : -1)));\n return true;\n }\n case \"Enter\":\n case \"Tab\":\n if (!active || active.disabled) return false;\n e.preventDefault();\n choose(active);\n return true;\n case \"Escape\":\n // Modal/Drawer içinde Escape önce listeyi kapatsın, pencereyi değil.\n e.preventDefault();\n e.stopPropagation();\n setDismissedAt(match.start);\n return true;\n default:\n return false;\n }\n };\n\n const controlProps = enabled\n ? {\n ...(kind === \"input\" ? { role: \"combobox\" as const, \"aria-expanded\": open } : {}),\n \"aria-autocomplete\": \"list\" as const,\n \"aria-controls\": open ? listboxId : undefined,\n \"aria-activedescendant\": activeId,\n onKeyUp: (e: React.KeyboardEvent) => {\n if ([\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(e.key)) sync();\n },\n onClick: sync,\n }\n : {};\n\n const panel = open ? (\n <SelectPanel\n ref={panelRef}\n listboxId={listboxId}\n coords={coords}\n sections={[{ key: \"mentions\", options: selectOptions }]}\n flatOptions={selectOptions}\n activeIndex={activeIndex}\n isSelected={() => false}\n multiple={false}\n loading={!!config?.loading}\n notFoundContent={notFound}\n listHeight={config?.listHeight ?? \"14rem\"}\n label={config?.listLabel ?? \"Öneriler\"}\n onPick={(o) => {\n const option = options.find((m) => m.value === o.value);\n if (option) choose(option);\n }}\n onHover={setActiveIndex}\n />\n ) : null;\n\n return { controlProps, panel, handleKeyDown, close: () => setMatch(null) };\n}\n","\"use client\";\n\nconst MIRROR_PROPS = [\n \"boxSizing\", \"width\", \"height\", \"overflowX\", \"overflowY\",\n \"borderTopWidth\", \"borderRightWidth\", \"borderBottomWidth\", \"borderLeftWidth\",\n \"paddingTop\", \"paddingRight\", \"paddingBottom\", \"paddingLeft\",\n \"fontStyle\", \"fontVariant\", \"fontWeight\", \"fontStretch\", \"fontSize\", \"lineHeight\", \"fontFamily\",\n \"textAlign\", \"textTransform\", \"textIndent\", \"letterSpacing\", \"wordSpacing\", \"tabSize\",\n] as const;\n\n/**\n * İmlecin ekrandaki konumu (viewport koordinatı). Alanın stilini kopyalayan\n * görünmez bir \"ayna\" kutuda imlece kadar olan metin yazılır, ardından gelen\n * işaretçinin konumu ölçülür — tarayıcılar textarea imlecinin konumunu\n * doğrudan vermiyor.\n */\nexport function getCaretRect(el: HTMLInputElement | HTMLTextAreaElement, position: number): { top: number; left: number; height: number } {\n const style = getComputedStyle(el);\n const mirror = document.createElement(\"div\");\n const isInput = el.nodeName === \"INPUT\";\n for (const prop of MIRROR_PROPS) mirror.style[prop] = style[prop];\n Object.assign(mirror.style, {\n position: \"absolute\",\n visibility: \"hidden\",\n top: \"0\",\n left: \"-9999px\",\n whiteSpace: isInput ? \"pre\" : \"pre-wrap\",\n overflowWrap: \"break-word\",\n overflow: \"hidden\",\n });\n mirror.textContent = el.value.slice(0, position);\n const marker = document.createElement(\"span\");\n marker.textContent = el.value.slice(position) || \".\";\n mirror.appendChild(marker);\n document.body.appendChild(mirror);\n const rect = el.getBoundingClientRect();\n const lineHeight = Number.parseFloat(style.lineHeight) || Number.parseFloat(style.fontSize) * 1.25;\n const top = rect.top + marker.offsetTop + Number.parseFloat(style.borderTopWidth) - el.scrollTop;\n const left = rect.left + marker.offsetLeft + Number.parseFloat(style.borderLeftWidth) - el.scrollLeft;\n mirror.remove();\n return { top, left: Math.min(left, rect.right), height: lineHeight };\n}\n","import { foldForSearch } from \"../../autocomplete/utils\";\nimport type { MentionOption } from \"./types\";\n\nexport interface MentionMatch {\n prefix: string;\n /** Tetik karakterinin metindeki konumu. */\n start: number;\n /** Tetik ile imleç arası. */\n query: string;\n}\n\nconst isSpace = (ch: string | undefined) => ch !== undefined && /\\s/.test(ch);\n\n/**\n * İmleçten geriye: en yakın tetik karakteri, öncesi satır başı/boşluk ve\n * tetik ile imleç arasında boşluk yoksa eşleşme. (`e-posta@alan` gibi kelime\n * içi `@` tetiklemez.)\n */\nexport function findMention(text: string, caret: number, prefixes: readonly string[]): MentionMatch | null {\n const before = text.slice(0, caret);\n let best: MentionMatch | null = null;\n for (const prefix of prefixes) {\n const start = before.lastIndexOf(prefix);\n if (start === -1) continue;\n if (start > 0 && !isSpace(before[start - 1])) continue;\n const query = before.slice(start + prefix.length);\n if (/\\s/.test(query)) continue;\n if (!best || start > best.start) best = { prefix, start, query };\n }\n return best;\n}\n\n/** `@sor` → `@ayse.demir ` ; imleç ayraçtan sonra. Ayraç zaten varsa ikincisi eklenmez. */\nexport function insertMention(text: string, match: MentionMatch, caret: number, value: string, split: string): { text: string; caret: number } {\n const head = text.slice(0, match.start) + match.prefix + value;\n const tail = text.slice(caret);\n const sep = split && !tail.startsWith(split) ? split : \"\";\n return { text: head + sep + tail, caret: head.length + (split ? split.length : 0) };\n}\n\nexport function mentionText(option: MentionOption): string {\n if (option.searchText !== undefined) return option.searchText;\n const label = typeof option.label === \"string\" ? option.label : \"\";\n return `${option.value} ${label}`;\n}\n\nexport function filterMentionOptions(\n options: readonly MentionOption[],\n query: string,\n filterOption?: false | ((query: string, option: MentionOption) => boolean)\n): MentionOption[] {\n if (filterOption === false) return [...options];\n if (filterOption) return options.filter((o) => filterOption(query, o));\n const q = foldForSearch(query);\n return q ? options.filter((o) => foldForSearch(mentionText(o)).includes(q)) : [...options];\n}\n","\"use client\";\n\nimport React, { forwardRef, useEffect, useImperativeHandle, useRef } from \"react\";\nimport { cn, useControllableState } from \"@mari-ui/core\";\nimport { ClearButton, clearIconOf } from \"./_components/FieldAdornments\";\nimport type { InputClassNames, InputShape, InputVariant, InputCountConfig, TextareaAutoSize } from \"./types\";\nimport type { ColorRole, Size } from \"@mari-ui/core\";\nimport { skeletonBoxProps, type SkeletonableProps } from \"../lib/skeleton\";\nimport { useFieldControl } from \"../lib/fieldContext\";\nimport {\n FIELD_BASE_CLASS,\n FIELD_DISABLED_CLASS,\n FIELD_MOBILE_TEXT_CLASS,\n getShapeClasses,\n getTextareaSizeClasses,\n getVariantClasses,\n clearNativeValue,\n isClearable,\n} from \"./utils\";\nimport type { MentionsConfig } from \"./mention/types\";\nimport { useMention } from \"./mention/useMention\";\n\nexport interface TextareaProps extends SkeletonableProps {\n placeholder?: string;\n value?: string;\n defaultValue?: string;\n onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n onClear?: () => void;\n onFocus?: (e: React.FocusEvent<HTMLTextAreaElement>) => void;\n onBlur?: (e: React.FocusEvent<HTMLTextAreaElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n allowClear?: boolean | { clearIcon?: React.ReactNode };\n /** Temizle butonunun erişilebilir adı. Varsayılan: `\"Temizle\"`. */\n clearLabel?: string;\n readOnly?: boolean;\n disabled?: boolean;\n name?: string;\n required?: boolean;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n /** İpucu/hata metnine bağlantı (Field içindeyse otomatik). */\n \"aria-describedby\"?: string;\n \"aria-invalid\"?: boolean | \"true\" | \"false\";\n size?: Size;\n shape?: InputShape;\n variant?: InputVariant;\n color?: ColorRole;\n maxLength?: number;\n showCount?: boolean;\n count?: InputCountConfig;\n id?: string;\n classNames?: InputClassNames;\n className?: string;\n /**\n * `true`: içerik kadar uzar. `{ minRows, maxRows }`: en az/en çok bu kadar\n * satır; `maxRows` aşılınca kaydırma çubuğu çıkar. `autoSize` verilince\n * elle yeniden boyutlandırma kapalıdır.\n */\n autoSize?: TextareaAutoSize;\n /** Başlangıç yüksekliği (satır). `autoSize` yoksa elle dikey büyütülebilir. Varsayılan: 3. */\n rows?: number;\n /** `@` ile bahsetme — Input'taki `mentions` ile aynı. */\n mentions?: MentionsConfig;\n}\n\n/**\n * `autoSize` yüksekliği: içerik yüksekliğini satır yüksekliği × min/max'a\n * kıstırır. Eskiden `{ minRows, maxRows }` tipte vardı ama HİÇ uygulanmıyordu —\n * alan sınırsız uzuyordu.\n */\nfunction fitHeight(el: HTMLTextAreaElement, autoSize: TextareaAutoSize) {\n const style = window.getComputedStyle(el);\n const lineHeight = Number.parseFloat(style.lineHeight) || 20;\n const padding = Number.parseFloat(style.paddingTop) + Number.parseFloat(style.paddingBottom);\n const { minRows, maxRows } = typeof autoSize === \"object\" ? autoSize : {};\n el.style.height = \"auto\";\n let height = el.scrollHeight;\n if (minRows) height = Math.max(height, minRows * lineHeight + padding);\n if (maxRows) height = Math.min(height, maxRows * lineHeight + padding);\n el.style.height = `${height}px`;\n el.style.overflowY = maxRows && el.scrollHeight > height ? \"auto\" : \"hidden\";\n}\n\n/**\n * Eskiden `TextareaProps = Omit<InputProps, ...>` ile `Input`tan türetiliyordu\n * ama `onBlur`/`onFocus` Omit listesinde YOKTU — `InputProps.onBlur`'un tipi\n * `FormEvent<HTMLInputElement>` idi ve `{...rest}` ile `<textarea>`'ya\n * yayıldığında (`FocusEventHandler<HTMLTextAreaElement>` beklenen yerde)\n * gerçek bir TS hatasıydı (bkz. plan denetimi). Artık Textarea kendi tam\n * tip setini tanımlıyor, `Input`tan miras almıyor.\n */\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>((outerProps, ref) => {\n // Field içindeyse id / aria-describedby / hata / required / disabled oradan tamamlanır.\n return <TextareaInner {...useFieldControl(outerProps)} forwardedRef={ref} />;\n});\n\nTextarea.displayName = \"Textarea\";\n\nconst TextareaInner = (\n {\n forwardedRef: ref,\n placeholder,\n allowClear = false,\n clearLabel = \"Temizle\",\n skeleton = false,\n rows = 3,\n readOnly,\n onKeyDown,\n classNames = {},\n className = \"\",\n count,\n defaultValue = \"\",\n disabled = false,\n id,\n maxLength,\n showCount,\n color,\n size = \"md\",\n shape = \"default\",\n variant = \"outline\",\n value,\n onChange,\n onClear,\n onFocus,\n onBlur,\n autoSize = false,\n name,\n required,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalidProp,\n mentions,\n }: TextareaProps & { forwardedRef: React.ForwardedRef<HTMLTextAreaElement> }\n ) => {\n // `color` varsayılansız: verilmezse dinlenmede nötr, odakta primary (bkz. `getVariantClasses`).\n const ariaInvalid = ariaInvalidProp ?? (color === \"error\" || undefined);\n const innerRef = useRef<HTMLTextAreaElement>(null);\n useImperativeHandle(ref, () => innerRef.current as HTMLTextAreaElement);\n\n const [currentValue, setCurrentValue] = useControllableState<string>({ value, defaultValue });\n const charCount = currentValue.length;\n // Ayrık değişken — iç içe template literal yerine (Faz 8, SonarJS `no-nested-template-literals`).\n const countLabel = maxLength ? `${charCount} / ${maxLength}` : `${charCount}`;\n const showClear = isClearable(allowClear) && Boolean(currentValue) && !disabled;\n\n const mention = useMention(mentions, innerRef, currentValue, \"textarea\");\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setCurrentValue(e.target.value);\n onChange?.(e);\n };\n\n const handleClear = () => {\n // onChange'i gerçek olayla tetikler (handleChange → iç state + tüketici).\n clearNativeValue(innerRef.current);\n onClear?.();\n innerRef.current?.focus();\n };\n\n const initialRows = typeof autoSize === \"object\" && autoSize.minRows ? autoSize.minRows : rows;\n const autoSizeKey = typeof autoSize === \"object\" ? `${autoSize.minRows}-${autoSize.maxRows}` : String(autoSize);\n useEffect(() => {\n if (autoSize && innerRef.current) fitHeight(innerRef.current, autoSize);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- autoSizeKey, obje kimliği yerine değerleri izler\n }, [currentValue, autoSizeKey]);\n\n const geometryClass = cn(\"flex w-full items-start gap-2\", getTextareaSizeClasses(size), getShapeClasses(shape, variant));\n const textareaClass = cn(\n \"w-full bg-transparent placeholder:text-mari-muted focus:outline-none disabled:cursor-not-allowed\",\n autoSize ? \"resize-none\" : \"resize-y\",\n FIELD_MOBILE_TEXT_CLASS,\n classNames.input\n );\n\n if (skeleton) {\n // Şeffaf, erişilemez bir <textarea> kutuya GERÇEK yüksekliğini verir\n // (satır sayısı × satır yüksekliği + dolgu) — tahmin yok, zıplama yok.\n return (\n <div {...skeletonBoxProps(cn(geometryClass, classNames.wrapper, className))}>\n <textarea tabIndex={-1} rows={initialRows} className={cn(textareaClass, \"invisible resize-none\")} />\n </div>\n );\n }\n\n const wrapperClass = cn(\n geometryClass,\n FIELD_BASE_CLASS,\n getVariantClasses(variant, color),\n disabled && FIELD_DISABLED_CLASS,\n classNames.wrapper,\n className\n );\n\n return (\n // `w-full`: Input gibi kapsayıcısını doldurur — `items-start`lı bir flex sütununda (Field) büzülüyordu.\n <div className=\"flex w-full flex-col gap-2\">\n <div className={wrapperClass}>\n <textarea\n id={id}\n ref={innerRef}\n value={currentValue}\n onChange={handleChange}\n {...mention.controlProps}\n onFocus={onFocus}\n onBlur={(e) => {\n mention.close();\n onBlur?.(e);\n }}\n onKeyDown={(e) => {\n mention.handleKeyDown(e);\n onKeyDown?.(e);\n }}\n readOnly={readOnly}\n rows={initialRows}\n placeholder={placeholder}\n maxLength={maxLength}\n disabled={disabled}\n name={name}\n required={required}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n aria-invalid={ariaInvalid}\n className={textareaClass}\n />\n {allowClear && <ClearButton visible={showClear} label={clearLabel} icon={clearIconOf(allowClear)} onClear={handleClear} className={classNames.clear} />}\n </div>\n {(showCount || count?.formatter) && (\n <span className={cn(\"flex flex-none items-center justify-end text-xs tabular-nums\", maxLength && charCount >= maxLength ? \"text-mari-error\" : \"text-mari-muted\", classNames.count)}>\n {count?.formatter ? count.formatter({ value: currentValue, count: charCount, maxLength }) : countLabel}\n </span>\n )}\n {mention.panel}\n </div>\n );\n };\n","\"use client\";\n\nimport React, { useContext, useEffect, useRef, useState } from \"react\";\nimport { cn, type ColorRole, type Size } from \"@mari-ui/core\";\nimport { FieldContext, useFieldControl, useFieldGroup, useFieldSkeleton } from \"../lib/fieldContext\";\nimport type { SkeletonableProps } from \"../lib/skeleton\";\nimport { Input } from \"./Input\";\nimport { OtpSingleField } from \"./_components/OtpSingleField\";\nimport type { InputShape, InputVariant } from \"./types\";\n\nexport interface OtpInputProps extends SkeletonableProps {\n length?: number;\n value?: string;\n defaultValue?: string;\n disabled?: boolean;\n size?: Size;\n shape?: InputShape;\n variant?: InputVariant;\n color?: ColorRole;\n onChange?: (value: string) => void;\n onInput?: (value: string[]) => void;\n mask?: boolean;\n formatter?: (val: string) => string;\n separator?: React.ReactNode | ((i: number) => React.ReactNode);\n className?: string;\n /** Grubun erişilebilir adı. Varsayılan: `\"Doğrulama kodu\"`. */\n \"aria-label\"?: string;\n /**\n * Mobil klavye. Varsayılan `\"numeric\"` (SMS/e-posta kodları rakamdır);\n * harf içeren kodlar için `\"text\"`.\n */\n inputMode?: \"numeric\" | \"text\";\n /**\n * `separated` (varsayılan): her hane ayrı bir kutucuk. `single`: tek bir\n * alan içinde hane yuvaları — arkada tek bir gerçek `<input>` (yapıştırma,\n * SMS otomatik doldurma, ekran okuyucu için en sade yapı).\n */\n layout?: \"separated\" | \"single\";\n /**\n * Yalnızca `layout=\"single\"`: yuva çizgisinin yeri. `center` (varsayılan):\n * boş yuvada dikeyde ortalı çizgi, hane girilince kaybolur. `bottom`:\n * hanenin altında, dolu yuvada da kalan alt çizgi.\n */\n linePosition?: \"center\" | \"bottom\";\n}\n\nconst WIDTH_CLASS: Record<Size, string> = { sm: \"w-6 p-0\", md: \"w-8 p-0\", lg: \"w-10 p-0\" };\n\n/** İç içe ternary yerine ayrık fonksiyon (Faz 8, SonarJS `no-nested-conditional`). */\nfunction resolveDisplayValue(rawValue: string, formatter: ((val: string) => string) | undefined, mask: boolean): string {\n if (formatter) return formatter(rawValue);\n if (mask && rawValue) return \"•\";\n return rawValue;\n}\n\nexport function OtpInput({\n length = 6,\n value,\n defaultValue = \"\",\n disabled = false,\n size = \"md\",\n shape = \"default\",\n variant = \"outline\",\n color,\n onChange,\n onInput,\n mask = false,\n formatter,\n separator,\n className,\n \"aria-label\": ariaLabelProp,\n inputMode = \"numeric\",\n skeleton: ownSkeleton,\n layout = \"separated\",\n linePosition = \"center\",\n}: Readonly<OtpInputProps>) {\n // Field içinde: kutucuklu düzen bir GRUP (etiket grubun adı), tek kutu düzeni tek bir ALAN (label htmlFor).\n // Varsayılan \"Doğrulama kodu\" adı yalnız hiç ad yoksa — Field'ın etiketini ezmesin.\n const inField = useContext(FieldContext) !== null;\n const group = useFieldGroup({ \"aria-label\": ariaLabelProp, disabled }, layout === \"separated\");\n const skeleton = useFieldSkeleton(ownSkeleton);\n const control = useFieldControl({ disabled, color });\n const ariaLabel = ariaLabelProp ?? (inField ? undefined : \"Doğrulama kodu\");\n const [otpValues, setOtpValues] = useState<string[]>(Array.from({ length }, (_, i) => value?.[i] ?? defaultValue[i] ?? \"\"));\n const inputsRef = useRef<Array<HTMLInputElement | null>>([]);\n\n const focusInput = (index: number) => {\n const input = inputsRef.current[index];\n if (input) {\n input.focus();\n input.select();\n }\n };\n\n /**\n * Faz 15: hücrelerde artık `maxLength=1` YOK — o, 6 haneli bir kodun\n * yapıştırılmasını VE iOS/Android'in SMS kodunu otomatik doldurmasını\n * (`autocomplete=\"one-time-code\"`, kodun tamamını ilk hücreye yazar) tek\n * haneye kırpıyordu. Uzun giriş buradan hücrelere dağıtılır; dolu bir\n * hücrede imleç sondayken yazılan tek karakter ise eskisinin YERİNE geçer.\n */\n const handleInput = (i: number, rawValue: string) => {\n const shown = resolveDisplayValue(otpValues[i] ?? \"\", formatter, mask);\n let text = rawValue.replace(/\\s/g, \"\");\n if (shown && text.length === shown.length + 1) text = text.startsWith(shown) ? text.slice(shown.length) : text.slice(0, 1);\n const chars = text.split(\"\");\n const updated = [...otpValues];\n for (let j = 0; j < chars.length; j++) {\n if (i + j < length) updated[i + j] = chars[j] ?? \"\";\n }\n setOtpValues(updated);\n onInput?.(updated);\n if (!updated.includes(\"\")) onChange?.(updated.join(\"\"));\n focusInput(Math.min(i + chars.length, length - 1));\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>, i: number) => {\n const input = e.currentTarget;\n const cursorAtStart = input.selectionStart === 0;\n const cursorAtEnd = input.selectionStart === input.value.length;\n\n if (e.key === \"Backspace\") {\n e.preventDefault();\n const updated = [...otpValues];\n if (otpValues[i]) {\n updated[i] = \"\";\n setOtpValues(updated);\n onInput?.(updated);\n focusInput(i);\n } else if (i > 0) {\n updated[i - 1] = \"\";\n setOtpValues(updated);\n onInput?.(updated);\n focusInput(i - 1);\n }\n }\n if (e.key === \"ArrowLeft\" && cursorAtStart && i > 0) {\n e.preventDefault();\n focusInput(i - 1);\n }\n if (e.key === \"ArrowRight\" && cursorAtEnd && i < length - 1) {\n e.preventDefault();\n focusInput(i + 1);\n }\n };\n\n useEffect(() => {\n if (value !== undefined) {\n const split = value.split(\"\").slice(0, length);\n setOtpValues((prev) => Array.from({ length }, (_, i) => split[i] ?? prev[i] ?? \"\"));\n }\n }, [value, length]);\n\n // Faz 13 gözden geçirmesi: `ghost` Input'ta (\"kenarlıksız, arka planı\n // saydam\") bir metin alanının içinde/etrafında bağlam olduğu için anlamlı\n // — ama OTP'de her kutucuk TEK BAŞINA bir hücre, çevresinde hiçbir görsel\n // referans yok. `ghost` seçilince kutucuklar TAMAMEN görünmez oluyordu,\n // kullanıcı nereye yazacağını göremiyordu. OTP için `ghost`, `underlined`e\n // (en azından bir alt çizgi kalır) düşürülür.\n const resolvedVariant = variant === \"ghost\" ? \"underlined\" : variant;\n\n if (layout === \"single\") {\n return (\n <OtpSingleField\n length={length}\n value={value}\n defaultValue={defaultValue}\n disabled={!!control.disabled}\n size={size}\n shape={shape}\n variant={resolvedVariant}\n color={control.color}\n id={control.id}\n describedBy={control[\"aria-describedby\"]}\n required={control.required}\n onChange={onChange}\n onInput={onInput}\n display={(raw) => resolveDisplayValue(raw, formatter, mask)}\n separator={separator}\n className={className}\n ariaLabel={ariaLabel}\n inputMode={inputMode}\n skeleton={skeleton}\n linePosition={linePosition}\n />\n );\n }\n\n const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>, i: number) => {\n e.preventDefault();\n handleInput(i, e.clipboardData.getData(\"text\"));\n };\n\n if (skeleton) {\n return (\n <div aria-hidden className=\"flex items-center gap-2\">\n {Array.from({ length }, (_, i) => (\n <Input key={i} skeleton size={size} shape={shape} className={cn(WIDTH_CLASS[size], className)} />\n ))}\n </div>\n );\n }\n\n return (\n <div\n role=\"group\"\n aria-label={group[\"aria-labelledby\"] ? undefined : (ariaLabel ?? \"Doğrulama kodu\")}\n aria-labelledby={group[\"aria-labelledby\"]}\n aria-describedby={group[\"aria-describedby\"]}\n className=\"flex items-center gap-2\"\n >\n {/* Hücreler Field'ın bağlantılarını ALMAZ — hepsi aynı id'yi alırdı; bağlantılar gruptadır. */}\n <FieldContext.Provider value={null}>\n {Array.from({ length }).map((_, i) => {\n const rawValue = otpValues[i] ?? \"\";\n const displayValue = resolveDisplayValue(rawValue, formatter, mask);\n\n return (\n <React.Fragment key={`otp-${i}`}>\n <Input\n ref={(el) => {\n inputsRef.current[i] = el;\n }}\n value={displayValue}\n onInput={(e) => handleInput(i, (e.target as HTMLInputElement).value)}\n onKeyDown={(e) => handleKeyDown(e, i)}\n onPaste={(e) => handlePaste(e, i)}\n onFocus={(e) => e.currentTarget.select()}\n aria-label={`Hane ${i + 1} / ${length}`}\n inputMode={inputMode}\n // SMS kodunu klavye önerisi olarak sunar — sadece ilk hücrede.\n autoComplete={i === 0 ? \"one-time-code\" : \"off\"}\n disabled={!!group.disabled}\n size={size}\n shape={shape}\n variant={resolvedVariant}\n color={group[\"aria-invalid\"] ? (color ?? \"error\") : color}\n className={cn(WIDTH_CLASS[size], className)}\n classNames={{ input: \"w-full text-center font-medium\" }}\n />\n {separator && i < length - 1 && (\n <span aria-hidden className=\"text-mari-muted\">\n {typeof separator === \"function\" ? separator(i) : separator}\n </span>\n )}\n </React.Fragment>\n );\n })}\n </FieldContext.Provider>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useRef, useState } from \"react\";\nimport { cn, useControllableState, type ColorRole, type Size } from \"@mari-ui/core\";\nimport { skeletonBoxProps } from \"../../lib/skeleton\";\nimport { touchTargetClass } from \"../../lib/sizeClasses\";\nimport type { InputShape, InputVariant } from \"../types\";\nimport { FIELD_BASE_CLASS, FIELD_DISABLED_CLASS, getShapeClasses, getVariantClasses } from \"../utils\";\n\nexport interface OtpSingleFieldProps {\n length: number;\n value?: string;\n defaultValue: string;\n disabled: boolean;\n size: Size;\n shape: InputShape;\n variant: InputVariant;\n color?: ColorRole;\n onChange?: (value: string) => void;\n onInput?: (value: string[]) => void;\n display: (raw: string) => string;\n separator?: React.ReactNode | ((i: number) => React.ReactNode);\n className?: string;\n /** Field içinde `undefined` — ad `<label htmlFor>`dan gelir. */\n ariaLabel?: string;\n /** Field bağlantıları. */\n id?: string;\n describedBy?: string;\n required?: boolean;\n inputMode: \"numeric\" | \"text\";\n skeleton: boolean;\n linePosition: \"center\" | \"bottom\";\n}\n\n/** Kutu yüksekliği + yatay dolgu; yuva genişliği ve rakam boyutu. */\nconst BOX_CLASS: Record<Size, string> = { sm: \"h-8 px-2.5 gap-1\", md: \"h-10 px-3 gap-1.5\", lg: \"h-12 px-4 gap-2\" };\nconst SLOT_CLASS: Record<Size, string> = { sm: \"w-4 text-sm\", md: \"w-5 text-base\", lg: \"w-6 text-xl\" };\n\n/**\n * Tek kutu görünümlü OTP (`layout=\"single\"`). Kutucuklar yerine TEK bir alan\n * içinde eşit aralıklı hane yuvaları çizilir; arkada ise TEK bir gerçek\n * `<input>` vardır (metni ve imleci şeffaf, kutuyu tamamen kaplar). Bu yapı:\n * yapıştırma ve SMS otomatik doldurma kendiliğinden çalışır (kodun tamamı tek\n * alana gelir), ekran okuyucu tek bir adlandırılmış alan görür (6 ayrı\n * \"hane\" değil), mobil klavye bir kez açılır. Yuvalar yalnızca görseldir\n * (`aria-hidden`).\n */\nexport function OtpSingleField({\n length,\n value,\n defaultValue,\n disabled,\n size,\n shape,\n variant,\n color,\n onChange,\n onInput,\n display,\n separator,\n className,\n ariaLabel,\n id,\n describedBy,\n required,\n inputMode,\n skeleton,\n linePosition,\n}: Readonly<OtpSingleFieldProps>) {\n const [code, setCode] = useControllableState<string>({ value, defaultValue: defaultValue.slice(0, length) });\n const [focused, setFocused] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const boxClass = cn(\"relative inline-flex w-fit max-w-full items-center\", BOX_CLASS[size], getShapeClasses(shape, variant));\n\n if (skeleton) {\n return (\n <div {...skeletonBoxProps(cn(boxClass, className))}>\n {Array.from({ length }, (_, i) => (\n <span key={i} className={SLOT_CLASS[size]} />\n ))}\n </div>\n );\n }\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n let next = e.target.value.replace(/\\s/g, \"\");\n if (inputMode === \"numeric\") next = next.replace(/\\D/g, \"\");\n next = next.slice(0, length);\n setCode(next);\n onInput?.(Array.from({ length }, (_, i) => next[i] ?? \"\"));\n if (next.length === length) onChange?.(next);\n };\n\n // İmleç hep sonda: yuvalar ortada bir konuma tıklamayı göstermediği için\n // seçim/imleç taşınırsa kullanıcı nereye yazdığını göremezdi.\n const keepCaretAtEnd = (e: React.SyntheticEvent<HTMLInputElement>) => {\n const el = e.currentTarget;\n const end = el.value.length;\n if (el.selectionStart !== end || el.selectionEnd !== end) el.setSelectionRange(end, end);\n };\n\n const activeIndex = Math.min(code.length, length - 1);\n\n return (\n <div\n className={cn(\n boxClass,\n FIELD_BASE_CLASS,\n getVariantClasses(variant, color),\n touchTargetClass[size],\n disabled && FIELD_DISABLED_CLASS,\n className\n )}\n >\n {Array.from({ length }, (_, i) => {\n const char = code[i];\n const isActive = focused && i === activeIndex;\n // `center`: yalnızca BOŞ yuvada ortada çizgi (dolu hanenin üstünü çizmesin).\n // `bottom`: hanenin altında, dolu olsa da kalan alt çizgi.\n // Aktif boş yuvada `center` çizgisi imleçle kesişip \"+\" çiziyordu — orada imleç yeterli.\n const showLine = linePosition === \"bottom\" || (!char && !isActive);\n return (\n <React.Fragment key={i}>\n <span\n aria-hidden\n className={cn(\n \"relative flex h-full items-center justify-center font-medium tabular-nums text-mari-foreground\",\n SLOT_CLASS[size],\n showLine && \"after:absolute after:inset-x-0.5 after:h-px after:bg-mari-input\",\n showLine && (linePosition === \"bottom\" ? \"after:bottom-[18%]\" : \"after:top-1/2 after:-translate-y-1/2\"),\n showLine && isActive && \"after:bg-mari-primary\"\n )}\n >\n {char ? display(char) : null}\n {isActive && code.length < length && (\n // `key`: her yazışta animasyon baştan başlar — yazarken imleç\n // hep görünür, durunca yanıp söner (gerçek imleç davranışı).\n <span\n key={code.length}\n className=\"absolute h-[45%] w-px bg-mari-foreground animate-[mari-caret-blink_1.06s_step-end_infinite] motion-reduce:animate-none\"\n />\n )}\n </span>\n {separator && i < length - 1 && (\n <span aria-hidden className=\"px-0.5 text-mari-muted\">\n {typeof separator === \"function\" ? separator(i) : separator}\n </span>\n )}\n </React.Fragment>\n );\n })}\n <input\n ref={inputRef}\n value={code}\n onChange={handleChange}\n onFocus={(e) => {\n setFocused(true);\n keepCaretAtEnd(e);\n }}\n onBlur={() => setFocused(false)}\n onSelect={keepCaretAtEnd}\n // `maxLength` YOK: tarayıcı yapıştırılan \"482 913\" gibi biçimli bir kodu\n // temizlemeden ÖNCE kırpıp \"482 91\" bırakırdı. Uzunluk `handleChange`de.\n disabled={disabled}\n id={id}\n required={required}\n aria-label={ariaLabel}\n aria-describedby={describedBy}\n aria-invalid={color === \"error\" || undefined}\n inputMode={inputMode}\n autoComplete=\"one-time-code\"\n spellCheck={false}\n // Metin ve imleç şeffaf — görünen haneler yuvalardır. `text-base`:\n // iOS 16px altındaki alanda odakta sayfayı yakınlaştırır.\n className=\"absolute inset-0 h-full w-full cursor-text bg-transparent text-base text-transparent caret-transparent outline-none selection:bg-transparent disabled:cursor-not-allowed\"\n />\n </div>\n );\n}\n","\"use client\";\n\nimport React, { forwardRef, useImperativeHandle, useRef } from \"react\";\nimport { Loader2Icon, SearchIcon } from \"lucide-react\";\nimport { Input } from \"./Input\";\nimport type { InputProps } from \"./types\";\n\nexport type SearchInputProps = InputProps & {\n /** Enter'a basılınca VE ara butonuna tıklanınca, alanın o anki değeriyle çağrılır. */\n onSearch?: (value: string) => void;\n /** Arama sürüyor — ara ikonu yerine dönen gösterge. Alan yazılabilir kalır. */\n loading?: boolean;\n /** Ara butonunun erişilebilir adı. Varsayılan: `\"Ara\"`. */\n searchLabel?: string;\n};\n\n/**\n * Faz 15: `onSearch` eskiden YALNIZCA butona tıklanınca çağrılıyordu — Enter\n * sadece `onPressEnter`'ı tetikliyordu, klavyeyle arama yapan kullanıcı sonuç\n * alamıyordu. Butonun erişilebilir adı yoktu. Mobil klavyede Enter tuşu artık\n * \"Ara\" etiketli (`enterKeyHint=\"search\"`).\n */\nexport const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n ({ icon, iconPosition = \"end\", onSearch, onPressEnter, loading = false, searchLabel = \"Ara\", ...rest }, ref) => {\n const inputRef = useRef<HTMLInputElement>(null);\n useImperativeHandle(ref, () => inputRef.current!, []);\n\n const search = () => onSearch?.(inputRef.current?.value ?? \"\");\n\n const handlePressEnter = (e: React.KeyboardEvent<HTMLInputElement>) => {\n search();\n onPressEnter?.(e);\n };\n\n const searchButton = (\n <button\n type=\"button\"\n aria-label={searchLabel}\n onClick={search}\n disabled={rest.disabled}\n className=\"flex size-6 cursor-pointer select-none items-center justify-center rounded-sm hover:text-mari-foreground focus-visible:outline-2 focus-visible:outline-mari-ring\"\n >\n {loading ? <Loader2Icon size={16} className=\"animate-spin\" aria-hidden /> : <SearchIcon size={16} aria-hidden />}\n </button>\n );\n\n return (\n <Input\n ref={inputRef}\n icon={icon ?? searchButton}\n iconPosition={iconPosition}\n onPressEnter={handlePressEnter}\n enterKeyHint=\"search\"\n aria-busy={loading || undefined}\n {...rest}\n />\n );\n }\n);\n\nSearchInput.displayName = \"SearchInput\";\n"],"mappings":"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","names":["useState","jsx","useState","forwardRef","useEffect","useRef","cn","useControllableState","jsx","jsxs","forwardRef","useRef","useControllableState","useEffect","cn","React","useEffect","useRef","useState","cn","React","useRef","useState","cn","useControllableState","jsx","jsxs","useControllableState","useState","useRef","cn","React","jsx","jsxs","useState","useRef","useEffect","cn","React","forwardRef","useImperativeHandle","useRef","jsx","forwardRef","useRef","useImperativeHandle"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/popover/Popover.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { isValidElement, useEffect, useId, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn, useControllableState } from \"@mari-ui/core\";\nimport { ContentSkeleton } from \"../lib/ContentSkeleton\";\nimport { elevationClass } from \"../lib/elevationClass\";\nimport { FLOATING_ARROW_GAP_PX, FLOATING_ARROW_INSET_PX, FLOATING_EDGE_PX, FLOATING_GAP_PX, FloatingArrow } from \"../lib/FloatingArrow\";\nimport { findAutofocus, firstFocusable, getFocusables } from \"../lib/overlay\";\nimport { useFloatingPosition } from \"../lib/useFloatingPosition\";\nimport { SkeletonBlock } from \"../skeleton\";\nimport type { PopoverProps } from \"./types\";\n\nexport type { PopoverProps };\n\nconst HOVER_OPEN_MS = 100;\nconst HOVER_CLOSE_MS = 150;\n\nconst PLACEHOLDER = (\n <div className=\"flex flex-col gap-2 py-0.5\">\n <SkeletonBlock active width=\"10rem\" height=\"0.875rem\" radius=\"sm\" />\n <SkeletonBlock active width=\"14rem\" height=\"0.75rem\" radius=\"sm\" />\n </div>\n);\n\ntype ElRef = React.RefObject<HTMLElement | null>;\n\n/** Sarmalayıcının içindeki gerçek tetikleyici (odak buraya döner). */\nconst triggerEl = (anchor: HTMLElement | null) => (anchor ? (firstFocusable(anchor) ?? anchor) : null);\n\n/**\n * Kapatma yolları: Escape (odak tetikleyiciye döner), dışarı tıklama (odağa\n * dokunmaz — kullanıcı başka bir yere tıkladı), panelin kenarından Tab ile\n * çıkma (odak tetikleyiciye döner, Tab doğal akışla SONRAKİ öğeye geçer;\n * Shift+Tab tetikleyicide kalır).\n */\nfunction useDismiss(open: boolean, anchorRef: ElRef, panelRef: ElRef, close: () => void) {\n const closeRef = useRef(close);\n closeRef.current = close;\n useEffect(() => {\n if (!open) return;\n const onPointerDown = (e: PointerEvent) => {\n const target = e.target as Node;\n if (anchorRef.current?.contains(target) || panelRef.current?.contains(target)) return;\n closeRef.current();\n };\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n // Modal içinde: yalnız Popover kapansın (Modal `defaultPrevented`ı görür).\n e.preventDefault();\n const focusWasInside = panelRef.current?.contains(document.activeElement) || anchorRef.current?.contains(document.activeElement);\n closeRef.current();\n if (focusWasInside) triggerEl(anchorRef.current)?.focus();\n return;\n }\n const panel = panelRef.current;\n if (e.key !== \"Tab\" || !panel?.contains(document.activeElement)) return;\n const items = getFocusables(panel);\n const atEnd = e.shiftKey ? document.activeElement === (items[0] ?? null) || items.length === 0 : document.activeElement === (items.at(-1) ?? null) || items.length === 0;\n if (!atEnd) return;\n // Panel body'ye portal edildiğinden DOM sırası tetikleyiciden sonra değil: önce tetikleyiciye dön.\n triggerEl(anchorRef.current)?.focus();\n if (e.shiftKey) e.preventDefault();\n closeRef.current();\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown, true);\n return () => {\n document.removeEventListener(\"pointerdown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown, true);\n };\n }, [open, anchorRef, panelRef]);\n}\n\n/** Tıklamayla açılınca odak panele: `data-autofocus` → ilk odaklanabilir → panelin kendisi. Konum ölçülene kadar beklenir (görünmez öğeye odak verilemez). */\nfunction useFocusOnOpen(open: boolean, positioned: boolean, moveFocus: boolean, panelRef: ElRef) {\n const done = useRef(false);\n useEffect(() => {\n if (!open) {\n done.current = false;\n return;\n }\n if (!moveFocus || !positioned || done.current) return;\n done.current = true;\n const panel = panelRef.current;\n if (panel) (findAutofocus(panel) ?? firstFocusable(panel) ?? panel).focus();\n }, [open, positioned, moveFocus, panelRef]);\n}\n\n/**\n * Panel, odak İÇİNDEYKEN kapanırsa (içindeki \"Vazgeç\"/\"Uygula\" gibi bir\n * düğmeyle ya da kontrollü `open` ile) odak tetikleyiciye döner — panel DOM'dan\n * kalkınca odak aksi halde `<body>`ye düşüyordu. Dışarı tıklamada odak zaten\n * tıklanan yere geçtiği için dokunulmaz.\n */\nfunction useReturnFocus(open: boolean, anchorRef: ElRef) {\n const focusInside = useRef(false);\n useEffect(() => {\n if (open || !focusInside.current) return;\n focusInside.current = false;\n triggerEl(anchorRef.current)?.focus();\n }, [open, anchorRef]);\n return {\n onFocus: () => (focusInside.current = true),\n onBlur: (e: React.FocusEvent) => {\n if (!e.currentTarget.contains(e.relatedTarget as Node)) focusInside.current = false;\n },\n };\n}\n\n/** Üzerine gelme niyeti: açarken kısa gecikme, kapatırken tetikleyiciden panele geçecek kadar süre. */\nfunction useHoverIntent(setOpen: (open: boolean) => void) {\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => () => clearTimeout(timer.current), []);\n const schedule = (next: boolean, ms: number) => {\n clearTimeout(timer.current);\n timer.current = setTimeout(() => setOpen(next), ms);\n };\n return { enter: () => schedule(true, HOVER_OPEN_MS), leave: () => schedule(false, HOVER_CLOSE_MS), cancel: () => clearTimeout(timer.current) };\n}\n\n/**\n * Faz 16.2 — yapı ant.design Popover'dan: başlık + etkileşimli içerik taşıyan\n * yüzen panel. Tooltip'ten farkı: içinde düğme/form olabilir, bu yüzden\n * gerçek bir (modal olmayan) dialog. Panel, konum ve ok Dropdown ile ortak\n * (`useFloatingPosition`, `FloatingArrow`).\n *\n * Erişilebilirlik: tetikleyici `aria-expanded` + `aria-haspopup=\"dialog\"` +\n * (açıkken) `aria-controls`; panel `role=\"dialog\"`, başlık adıdır. Tıklamayla\n * açılınca odak panele geçer; Escape/dışarı tıklama/kenardan Tab kapatır.\n * `hover` modunda klavye odağı da açar (yalnız fareyle erişilen içerik olmasın).\n */\nexport function Popover({\n title,\n content,\n children,\n trigger = \"click\",\n placement = \"top\",\n arrow = true,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n role = \"dialog\",\n className,\n skeleton = false,\n}: Readonly<PopoverProps>) {\n const [open, setOpen] = useControllableState<boolean>({ value: openProp, defaultValue: defaultOpen, onChange: onOpenChange });\n const anchorRef = useRef<HTMLSpanElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const panelId = useId();\n const titleId = useId();\n const coords = useFloatingPosition(open, anchorRef, panelRef, {\n placement,\n gap: arrow ? FLOATING_ARROW_GAP_PX : FLOATING_GAP_PX,\n edge: FLOATING_EDGE_PX,\n arrow: arrow ? { inset: FLOATING_ARROW_INSET_PX, pointAtCenter: false } : undefined,\n });\n const hover = useHoverIntent(setOpen);\n\n useDismiss(open, anchorRef, panelRef, () => setOpen(false));\n useFocusOnOpen(open, coords !== null, trigger === \"click\", panelRef);\n const trackFocus = useReturnFocus(open, anchorRef);\n\n const decorated = isValidElement<Record<string, unknown>>(children)\n ? React.cloneElement(children, {\n \"aria-expanded\": open,\n \"aria-haspopup\": \"dialog\",\n \"aria-controls\": open ? panelId : undefined,\n })\n : children;\n\n const triggerHandlers = {\n click: { onClick: () => setOpen(!open) },\n hover: { onMouseEnter: hover.enter, onMouseLeave: hover.leave, onFocus: () => setOpen(true), onBlur: (e: React.FocusEvent) => !panelRef.current?.contains(e.relatedTarget as Node) && hover.leave() },\n focus: { onFocus: () => setOpen(true), onBlur: (e: React.FocusEvent) => !panelRef.current?.contains(e.relatedTarget as Node) && setOpen(false) },\n }[trigger];\n\n return (\n <>\n {/* Sarmalayıcı etkileşimli değil — olaylar içindeki gerçek tetikleyiciden kabarır. */}\n <span ref={anchorRef} className=\"inline-flex\" {...triggerHandlers}>\n {decorated}\n </span>\n {open && (\n <PopoverPanel\n panelRef={panelRef}\n id={panelId}\n titleId={titleId}\n title={title}\n content={content}\n ariaLabel={ariaLabel}\n ariaLabelledBy={ariaLabelledBy}\n ariaDescribedBy={ariaDescribedBy}\n role={role}\n focusTracking={trackFocus}\n coords={coords}\n arrow={arrow}\n skeleton={skeleton}\n hover={trigger === \"hover\" ? hover : undefined}\n className={className}\n />\n )}\n </>\n );\n}\n\ninterface PopoverPanelProps {\n panelRef: React.RefObject<HTMLDivElement | null>;\n id: string;\n titleId: string;\n title: React.ReactNode;\n content: React.ReactNode;\n ariaLabel?: string;\n ariaLabelledBy?: string;\n ariaDescribedBy?: string;\n role: \"dialog\" | \"alertdialog\";\n focusTracking: ReturnType<typeof useReturnFocus>;\n coords: ReturnType<typeof useFloatingPosition>;\n arrow: boolean;\n skeleton: boolean;\n /** Yalnız `hover` modunda: panelin üstüne gelmek kapanmayı iptal eder. */\n hover?: ReturnType<typeof useHoverIntent>;\n className?: string;\n}\n\nfunction PopoverPanel({\n panelRef,\n id,\n titleId,\n title,\n content,\n ariaLabel,\n ariaLabelledBy,\n ariaDescribedBy,\n role,\n focusTracking,\n coords,\n arrow,\n skeleton,\n hover,\n className,\n}: PopoverPanelProps) {\n if (typeof document === \"undefined\") return null;\n const labelledBy = ariaLabelledBy ?? (title ? titleId : undefined);\n return createPortal(\n <div\n ref={panelRef}\n id={id}\n role={role}\n tabIndex={-1}\n aria-labelledby={labelledBy}\n aria-label={labelledBy ? undefined : ariaLabel}\n aria-describedby={ariaDescribedBy}\n aria-busy={skeleton || undefined}\n onFocus={focusTracking.onFocus}\n onBlur={focusTracking.onBlur}\n onMouseEnter={hover?.cancel}\n onMouseLeave={hover?.leave}\n className={cn(\n \"fixed z-mari-dropdown w-max max-w-[min(22rem,calc(100vw-1rem))] rounded-lg bg-mari-surface p-3 text-sm text-mari-foreground outline-none\",\n \"transition-opacity duration-150 starting:opacity-0 motion-reduce:transition-none\",\n elevationClass.md,\n !coords && \"invisible\",\n className\n )}\n style={{ top: coords?.top ?? 0, left: coords?.left ?? 0 }}\n >\n {arrow && coords && <FloatingArrow side={coords.side} offset={coords.arrowOffset} />}\n <ContentSkeleton on={skeleton} fallback={PLACEHOLDER}>\n <div>\n {title && (\n <p id={titleId} className=\"mb-1 font-semibold\">\n {title}\n </p>\n )}\n {content}\n </div>\n </ContentSkeleton>\n </div>,\n document.body\n );\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/tree/utils.ts","../src/tree/Tree.tsx"],"sourcesContent":["import type { TreeCheckInfo, TreeNode } from \"./types\";\n\n/**\n * Faz 16.3 — Tree'nin saf mantığı (DOM/React yok). TreeSelect (16.4) aynı\n * fonksiyonları kullanacak: indeks, görünür düğümler, işaret yayılımı, arama.\n */\n\nexport interface TreeEntry {\n node: TreeNode;\n parentKey: string | null;\n /** 1 tabanlı derinlik (`aria-level`). */\n level: number;\n childKeys: string[];\n}\n\nexport type TreeIndex = Map<string, TreeEntry>;\n\n/** DFS sırasıyla (Map ekleme sırası korunur) anahtar → konum. */\nexport function buildIndex(data: TreeNode[]): TreeIndex {\n const index: TreeIndex = new Map();\n const walk = (nodes: TreeNode[], parentKey: string | null, level: number) => {\n for (const node of nodes) {\n index.set(node.key, { node, parentKey, level, childKeys: (node.children ?? []).map((c) => c.key) });\n if (node.children) walk(node.children, node.key, level + 1);\n }\n };\n walk(data, null, 1);\n return index;\n}\n\n/** Çocuğu olan (ya da tembel yüklenecek) düğüm açılabilir. */\nexport function isExpandable(node: TreeNode, lazy: boolean): boolean {\n if (node.children && node.children.length > 0) return true;\n return lazy && !node.isLeaf && node.children === undefined;\n}\n\n/** `defaultExpandAll` için: çocuğu olan tüm düğümler. */\nexport function getParentKeys(index: TreeIndex): string[] {\n return [...index.values()].filter((e) => e.childKeys.length > 0).map((e) => e.node.key);\n}\n\nexport function getAncestorKeys(index: TreeIndex, key: string): string[] {\n const out: string[] = [];\n let parent = index.get(key)?.parentKey ?? null;\n while (parent !== null) {\n out.push(parent);\n parent = index.get(parent)?.parentKey ?? null;\n }\n return out;\n}\n\nexport interface VisibleNode {\n node: TreeNode;\n level: number;\n /** Görünür kardeşler arasındaki sıra ve sayı (`aria-posinset`/`aria-setsize`). */\n posinset: number;\n setsize: number;\n parentKey: string | null;\n}\n\n/** Açık düğümlere göre ekranda görünen düğümler, sırasıyla. `filter` verilirse yalnız onlar. */\nexport function flattenVisible(data: TreeNode[], expanded: ReadonlySet<string>, filter?: ReadonlySet<string>): VisibleNode[] {\n const out: VisibleNode[] = [];\n const walk = (nodes: TreeNode[], parentKey: string | null, level: number) => {\n const shown = filter ? nodes.filter((n) => filter.has(n.key)) : nodes;\n shown.forEach((node, i) => {\n out.push({ node, level, posinset: i + 1, setsize: shown.length, parentKey });\n if (node.children && expanded.has(node.key)) walk(node.children, node.key, level + 1);\n });\n };\n walk(data, null, 1);\n return out;\n}\n\n/* ─────────────────────────── İşaret yayılımı ─────────────────────────── */\n\n/** Devre dışı / onay kutusu kapalı düğümler yayılıma katılmaz (ant ile aynı). */\nexport function isCheckEligible(node: TreeNode): boolean {\n return !node.disabled && !node.disableCheckbox && node.checkable !== false;\n}\n\nfunction addDescendants(index: TreeIndex, key: string, set: Set<string>) {\n for (const childKey of index.get(key)?.childKeys ?? []) {\n const child = index.get(childKey);\n if (!child || !isCheckEligible(child.node)) continue;\n set.add(childKey);\n addDescendants(index, childKey, set);\n }\n}\n\n/** Devre dışı düğümlerin (ve altlarının) işaret durumuna dokunulmaz. */\nfunction removeDescendants(index: TreeIndex, key: string, set: Set<string>) {\n for (const childKey of index.get(key)?.childKeys ?? []) {\n const child = index.get(childKey);\n if (!child || !isCheckEligible(child.node)) continue;\n set.delete(childKey);\n removeDescendants(index, childKey, set);\n }\n}\n\n/** Alttan üste: uygun çocuklarının hepsi işaretliyse işaretli, bazısıysa kısmi. */\nfunction conductUp(index: TreeIndex, set: Set<string>): TreeCheckInfo {\n const half = new Set<string>();\n const entries = [...index.values()].reverse(); // çocuklar ebeveynden önce\n for (const entry of entries) {\n const eligibleChildren = entry.childKeys.map((k) => index.get(k)!).filter((c) => isCheckEligible(c.node));\n if (eligibleChildren.length === 0) continue;\n const checkedCount = eligibleChildren.filter((c) => set.has(c.node.key)).length;\n const anyHalf = eligibleChildren.some((c) => half.has(c.node.key));\n if (!isCheckEligible(entry.node)) continue;\n if (checkedCount === eligibleChildren.length) {\n set.add(entry.node.key);\n } else {\n set.delete(entry.node.key);\n if (checkedCount > 0 || anyHalf) half.add(entry.node.key);\n }\n }\n const order = [...index.keys()];\n return { checked: order.filter((k) => set.has(k)), halfChecked: order.filter((k) => half.has(k)) };\n}\n\n/** Dışarıdan gelen işaretleri tutarlı hâle getirir: işaretli üstün altı işaretlenir, üstler hesaplanır. */\nexport function conductCheck(keys: readonly string[], index: TreeIndex): TreeCheckInfo {\n const set = new Set<string>();\n for (const key of keys) {\n const entry = index.get(key);\n if (!entry) continue;\n set.add(key);\n if (isCheckEligible(entry.node)) addDescendants(index, key, set);\n }\n return conductUp(index, set);\n}\n\n/** Bir düğümü işaretle/kaldır. `strict`te yayılım yok. */\nexport function toggleCheck(current: readonly string[], key: string, checked: boolean, index: TreeIndex, strict: boolean): TreeCheckInfo {\n if (strict) {\n const next = checked ? [...new Set([...current, key])] : current.filter((k) => k !== key);\n return { checked: next, halfChecked: [] };\n }\n const set = new Set(current);\n if (checked) {\n set.add(key);\n addDescendants(index, key, set);\n } else {\n set.delete(key);\n removeDescendants(index, key, set);\n for (const ancestor of getAncestorKeys(index, key)) {\n if (isCheckEligible(index.get(ancestor)!.node)) set.delete(ancestor);\n }\n }\n return conductUp(index, set);\n}\n\n/* ─────────────────────────── Arama ─────────────────────────── */\n\nexport function nodeText(node: TreeNode): string {\n if (node.searchText !== undefined) return node.searchText;\n return typeof node.title === \"string\" || typeof node.title === \"number\" ? String(node.title) : \"\";\n}\n\n/**\n * Arama için harf katlama. `toLocaleLowerCase(\"tr\")` Latin \"I\"yı \"ı\" yapar\n * (\"API\" → \"apı\") ve \"api.ts\"yi bulamaz; en-US ise \"İ\"yi iki karaktere böler.\n * tr ile küçültüp ı→i katlanır: \"API\", \"İstanbul\", \"ılık\" hepsi bulunur, uzunluk değişmez.\n */\nconst normalize = (s: string) => s.toLocaleLowerCase(\"tr\").replace(/ı/g, \"i\");\n\nexport interface TreeSearchResult {\n /** Eşleşen düğümler. */\n matches: Set<string>;\n /** Gösterilecekler: eşleşenler, ataları ve eşleşen düğümlerin alt ağaçları. */\n visible: Set<string>;\n /** Kendiliğinden açılacaklar: eşleşenlerin ataları. */\n expand: Set<string>;\n}\n\nexport function searchTree(index: TreeIndex, value: string): TreeSearchResult | null {\n const query = normalize(value.trim());\n if (!query) return null;\n const matches = new Set<string>();\n const visible = new Set<string>();\n const expand = new Set<string>();\n for (const [key, entry] of index) {\n if (!normalize(nodeText(entry.node)).includes(query)) continue;\n matches.add(key);\n visible.add(key);\n for (const ancestor of getAncestorKeys(index, key)) {\n visible.add(ancestor);\n expand.add(ancestor);\n }\n const stack = [...entry.childKeys];\n while (stack.length) {\n const k = stack.pop()!;\n visible.add(k);\n stack.push(...(index.get(k)?.childKeys ?? []));\n }\n }\n return { matches, visible, expand };\n}\n\n/** Metni eşleşen/eşleşmeyen parçalara böler (Türkçe harf duyarsız, orijinal harfler korunur). */\nexport function splitMatch(text: string, value: string): { text: string; match: boolean }[] {\n const query = normalize(value.trim());\n if (!query) return [{ text, match: false }];\n const lower = normalize(text);\n // `toLocaleLowerCase(\"tr\")` uzunluğu değiştirmez (İ→i tek karakter), indeksler aynı kalır.\n const parts: { text: string; match: boolean }[] = [];\n let from = 0;\n let at = lower.indexOf(query, from);\n while (at !== -1) {\n if (at > from) parts.push({ text: text.slice(from, at), match: false });\n parts.push({ text: text.slice(at, at + query.length), match: true });\n from = at + query.length;\n at = lower.indexOf(query, from);\n }\n if (from < text.length) parts.push({ text: text.slice(from), match: false });\n return parts;\n}\n\n/* ─────────────────────────── Klavye ─────────────────────────── */\n\nexport type TreeKeyAction =\n | { type: \"focus\"; key: string }\n | { type: \"expand\"; key: string }\n | { type: \"collapse\"; key: string }\n | { type: \"expandSiblings\"; keys: string[] }\n | null;\n\n/**\n * WAI-ARIA APG Tree View tuşları: ↑/↓ görünür düğümler, → aç ya da ilk\n * çocuğa in, ← kapa ya da ebeveyne çık, Home/End, `*` kardeşleri aç, harf ile\n * ada göre atla. Enter/Space bileşende (seçim/işaret) ele alınır.\n */\nconst focusTo = (entry: VisibleNode | undefined): TreeKeyAction => (entry ? { type: \"focus\", key: entry.node.key } : null);\n\n/** Harfle atlama: bulunduğu düğümden sonra, adı o harfle başlayan ilk görünür düğüm (döngülü). */\nfunction typeahead(visible: VisibleNode[], i: number, key: string): TreeKeyAction {\n if (key.length !== 1 || key === \" \") return null;\n const char = normalize(key);\n for (let step = 1; step <= visible.length; step++) {\n const candidate = visible[(i + step) % visible.length]!;\n if (normalize(nodeText(candidate.node)).startsWith(char)) return focusTo(candidate);\n }\n return null;\n}\n\nexport function getKeyAction(\n visible: VisibleNode[],\n currentKey: string,\n key: string,\n isOpen: (k: string) => boolean,\n canExpand: (node: TreeNode) => boolean\n): TreeKeyAction {\n const i = visible.findIndex((v) => v.node.key === currentKey);\n const current = visible[i];\n if (!current) return null;\n const open = canExpand(current.node) && isOpen(current.node.key);\n switch (key) {\n case \"ArrowDown\":\n return focusTo(visible[i + 1]);\n case \"ArrowUp\":\n return focusTo(visible[i - 1]);\n case \"Home\":\n return focusTo(visible[0]);\n case \"End\":\n return focusTo(visible[visible.length - 1]);\n case \"ArrowRight\":\n if (!canExpand(current.node)) return null;\n if (!open) return { type: \"expand\", key: current.node.key };\n return visible[i + 1]?.parentKey === current.node.key ? focusTo(visible[i + 1]) : null;\n case \"ArrowLeft\":\n if (open) return { type: \"collapse\", key: current.node.key };\n return current.parentKey === null ? null : { type: \"focus\", key: current.parentKey };\n case \"*\": {\n const siblings = visible.filter((v) => v.parentKey === current.parentKey && canExpand(v.node) && !isOpen(v.node.key)).map((v) => v.node.key);\n return siblings.length ? { type: \"expandSiblings\", keys: siblings } : null;\n }\n default:\n return typeahead(visible, i, key);\n }\n}\n","\"use client\";\n\nimport React, { useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { CheckIcon, ChevronRightIcon, Loader2Icon, MinusIcon } from \"lucide-react\";\nimport { cn, useControllableState } from \"@mari-ui/core\";\nimport { bgSolidClass, textSolidContrastClass } from \"../lib/colorClasses\";\nimport { skeletonBoxProps } from \"../lib/skeleton\";\nimport { SkeletonBlock } from \"../skeleton\";\nimport type { TreeNode, TreeProps } from \"./types\";\nimport {\n buildIndex,\n conductCheck,\n flattenVisible,\n getKeyAction,\n getParentKeys,\n isExpandable,\n searchTree,\n splitMatch,\n toggleCheck,\n type TreeIndex,\n type VisibleNode,\n} from \"./utils\";\n\nexport type { TreeProps, TreeNode };\n\nexport type CheckState = \"checked\" | \"mixed\" | \"unchecked\";\n\n/** TreeSelect de kullanır (aynı görsel kutu). */\nexport function CheckboxBox({ state, disabled, onClick }: Readonly<{ state: CheckState; disabled: boolean; onClick: (e: React.MouseEvent) => void }>) {\n const on = state !== \"unchecked\";\n return (\n // Görsel kutu: durum treeitem'in `aria-checked`ında; tıklama fare içindir, klavyede Space.\n <span\n aria-hidden\n onClick={disabled ? undefined : onClick}\n className={cn(\n \"mr-1 flex size-4 shrink-0 items-center justify-center rounded-sm border transition-colors\",\n on ? cn(\"border-transparent\", bgSolidClass.primary, textSolidContrastClass.primary) : \"border-mari-input bg-mari-surface\",\n disabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\"\n )}\n >\n {state === \"checked\" && <CheckIcon size={12} strokeWidth={3.5} />}\n {state === \"mixed\" && <MinusIcon size={12} strokeWidth={3.5} />}\n </span>\n );\n}\n\n/** Başlık + arama vurgusu — TreeSelect de kullanır. */\nexport function Title({ node, searchValue, titleRender }: Readonly<{ node: TreeNode; searchValue?: string; titleRender?: Exclude<TreeProps[\"titleRender\"], undefined> }>) {\n if (titleRender) return <>{titleRender(node)}</>;\n if (!searchValue || typeof node.title !== \"string\") return <>{node.title}</>;\n return (\n <>\n {splitMatch(node.title, searchValue).map((part, i) =>\n part.match ? (\n // Parçalar sabit sırada, yeniden sıralanmaz.\n <mark key={i} className=\"rounded-sm bg-mari-warning-subtle text-inherit\">\n {part.text}\n </mark>\n ) : (\n <React.Fragment key={i}>{part.text}</React.Fragment>\n )\n )}\n </>\n );\n}\n\ninterface RowProps {\n entry: VisibleNode;\n id: string;\n focused: boolean;\n open: boolean;\n expandable: boolean;\n loading: boolean;\n selected: boolean;\n selectable: boolean;\n checkState: CheckState | null;\n showLine: boolean;\n blockNode: boolean;\n searchValue?: string;\n titleRender?: Exclude<TreeProps[\"titleRender\"], undefined>;\n onToggle: () => void;\n onCheck: () => void;\n onActivate: () => void;\n onDoubleActivate: () => void;\n onFocus: () => void;\n skeleton: boolean;\n}\n\n/** treeitem ARIA özellikleri; iskelette hiçbiri (satır erişilebilirlik ağacında değil). */\nfunction treeitemAria({ entry, focused, open, expandable, loading, selected, selectable, checkState, skeleton }: RowProps) {\n if (skeleton) return {};\n let checked: boolean | \"mixed\" | undefined;\n if (checkState === \"mixed\") checked = \"mixed\";\n else if (checkState) checked = checkState === \"checked\";\n return {\n role: \"treeitem\",\n tabIndex: focused ? 0 : -1,\n \"aria-level\": entry.level,\n \"aria-posinset\": entry.posinset,\n \"aria-setsize\": entry.setsize,\n \"aria-expanded\": expandable ? open : undefined,\n \"aria-selected\": selectable ? selected : undefined,\n \"aria-checked\": checked,\n \"aria-disabled\": entry.node.disabled || undefined,\n \"aria-busy\": loading || undefined,\n } as const;\n}\n\nexport function Switcher({ open, expandable, loading, skeleton, onToggle }: Readonly<Pick<RowProps, \"open\" | \"expandable\" | \"loading\" | \"skeleton\" | \"onToggle\">>) {\n let icon: React.ReactNode = null;\n if (loading) icon = <Loader2Icon size={14} className=\"animate-spin text-mari-muted motion-reduce:animate-none\" />;\n else if (expandable && skeleton) icon = <span {...skeletonBoxProps(\"size-3 rounded-sm\")} />;\n else if (expandable)\n icon = <ChevronRightIcon size={14} className={cn(\"text-mari-muted transition-transform duration-150 motion-reduce:transition-none\", open && \"rotate-90\")} />;\n return (\n // Fare için açma düğmesi; klavyede ←/→ (görsel, aria-hidden).\n <span\n aria-hidden\n onClick={(e) => {\n e.stopPropagation();\n if (expandable) onToggle();\n }}\n className={cn(\"mr-1 flex h-6 w-6 shrink-0 items-center justify-center self-center rounded-md\", expandable && \"cursor-pointer hover:bg-mari-surface-alt\")}\n >\n {icon}\n </span>\n );\n}\n\nexport function Indent({ level, showLine }: Readonly<{ level: number; showLine: boolean }>) {\n return (\n <>\n {Array.from({ length: level - 1 }, (_, i) => (\n <span\n // Girinti birimleri konumsal, sabit.\n key={i}\n aria-hidden\n className={cn(\n \"relative w-6 shrink-0\",\n // Kılavuz çizgisi satır aralığını da (py) kapsar → çizgiler kesintisiz.\n showLine && \"before:absolute before:-inset-y-0.5 before:left-1/2 before:border-l before:border-mari-border pointer-coarse:before:-inset-y-2.5\"\n )}\n />\n ))}\n </>\n );\n}\n\nfunction Row(props: Readonly<RowProps>) {\n const { entry, id, selected, checkState, showLine, blockNode, skeleton } = props;\n const { node, level } = entry;\n const disabled = Boolean(node.disabled);\n\n return (\n <div\n {...treeitemAria(props)}\n id={id}\n data-key={node.key}\n onFocus={props.onFocus}\n className=\"group relative flex items-stretch py-0.5 text-mari-foreground outline-none pointer-coarse:py-2.5\"\n >\n <Indent level={level} showLine={showLine} />\n <Switcher open={props.open} expandable={props.expandable} loading={props.loading} skeleton={skeleton} onToggle={props.onToggle} />\n {checkState && (\n <span className=\"flex items-center\">\n {skeleton ? (\n <span {...skeletonBoxProps(\"mr-1 size-4 rounded-sm\")} />\n ) : (\n <CheckboxBox\n state={checkState}\n disabled={disabled || Boolean(node.disableCheckbox)}\n onClick={(e) => {\n e.stopPropagation();\n props.onCheck();\n }}\n />\n )}\n </span>\n )}\n {/* Klavye karşılığı ağacın onKeyDown'unda (Enter/Space) — odak treeitem'de. */}\n {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events */}\n <span\n onClick={disabled ? undefined : props.onActivate}\n onDoubleClick={disabled ? undefined : props.onDoubleActivate}\n className={cn(\n \"flex min-h-6 min-w-0 items-center gap-1.5 self-center rounded-md px-2 leading-6 transition-colors\",\n blockNode && \"flex-1\",\n disabled ? \"cursor-not-allowed text-mari-muted\" : \"cursor-pointer\",\n selected ? \"bg-mari-primary-subtle\" : !disabled && \"hover:bg-mari-surface-alt\",\n \"group-focus-visible:outline-2 group-focus-visible:outline-offset-0 group-focus-visible:outline-mari-ring\"\n )}\n >\n {node.icon && (\n <span aria-hidden className={cn(\"flex shrink-0 items-center [&_svg]:size-4\", !disabled && \"text-mari-muted\", skeleton && \"invisible\")}>\n {node.icon}\n </span>\n )}\n {skeleton ? (\n <span {...skeletonBoxProps(\"rounded-sm leading-4\")}>{typeof node.title === \"string\" ? node.title : \"…………\"}</span>\n ) : (\n <span className=\"min-w-0 break-words\">\n <Title node={node} searchValue={props.searchValue} titleRender={props.titleRender} />\n </span>\n )}\n </span>\n </div>\n );\n}\n\nconst PLACEHOLDER_LEVELS = [1, 2, 2, 2, 1, 1];\n\nfunction Placeholders() {\n return (\n <div aria-hidden data-skeleton=\"\" className=\"flex flex-col\">\n {PLACEHOLDER_LEVELS.map((level, i) => (\n <div key={i} className=\"flex h-7 items-center gap-1 pointer-coarse:h-11\" style={{ paddingInlineStart: `${(level - 1) * 1.5}rem` }}>\n <SkeletonBlock active width=\"1rem\" height=\"0.75rem\" radius=\"sm\" className=\"mx-1\" />\n <SkeletonBlock active width={`${40 + ((i * 23) % 50)}%`} height=\"0.875rem\" radius=\"sm\" />\n </div>\n ))}\n </div>\n );\n}\n\n/**\n * Tab durağı olan düğüm. Odaklı düğüm görünmez olduysa (ebeveyni kapandı,\n * arama) en yakın görünür atası; hiç odak yoksa ilk görünür seçili, o da yoksa ilk düğüm.\n */\nfunction resolveActiveKey(focusKey: string | null, visible: VisibleNode[], index: TreeIndex, selected: string[]): string | null {\n const visibleKeys = new Set(visible.map((v) => v.node.key));\n let key = focusKey;\n while (key !== null && !visibleKeys.has(key)) key = index.get(key)?.parentKey ?? null;\n return key ?? selected.find((k) => visibleKeys.has(k)) ?? visible[0]?.node.key ?? null;\n}\n\nfunction getCheckState(key: string, checked: ReadonlySet<string>, half: ReadonlySet<string>): CheckState {\n if (checked.has(key)) return \"checked\";\n return half.has(key) ? \"mixed\" : \"unchecked\";\n}\n\nfunction useTreeState(props: TreeProps) {\n const { treeData, checkStrictly = false } = props;\n const index = useMemo(() => buildIndex(treeData), [treeData]);\n const [expanded, setExpanded] = useControllableState<string[]>({\n value: props.expandedKeys,\n defaultValue: props.defaultExpandAll ? getParentKeys(buildIndex(treeData)) : (props.defaultExpandedKeys ?? []),\n });\n const [selected, setSelected] = useControllableState<string[]>({ value: props.selectedKeys, defaultValue: props.defaultSelectedKeys ?? [] });\n const [rawChecked, setRawChecked] = useControllableState<string[]>({ value: props.checkedKeys, defaultValue: props.defaultCheckedKeys ?? [] });\n const checkInfo = useMemo(() => (checkStrictly ? { checked: rawChecked, halfChecked: [] } : conductCheck(rawChecked, index)), [rawChecked, index, checkStrictly]);\n const search = useMemo(() => (props.searchValue ? searchTree(index, props.searchValue) : null), [index, props.searchValue]);\n const expandedSet = useMemo(() => new Set([...expanded, ...(search?.expand ?? [])]), [expanded, search]);\n const visible = useMemo(() => flattenVisible(treeData, expandedSet, search?.visible), [treeData, expandedSet, search]);\n return { index, expanded, setExpanded, selected, setSelected, checkInfo, setRawChecked, expandedSet, visible };\n}\n\n/**\n * Faz 16.3 — yapı ant.design Tree'den (açma düğmesi, onay kutuları + üst/alt\n * yayılım + kısmi durum, `checkStrictly`, tekli/çoklu seçim, tembel yükleme,\n * kılavuz çizgileri, `blockNode`, arama + vurgu, `titleRender`), görünüm kendi\n * token'larımızdan. Düz (flat) çizim: görünür düğümler tek dizi — klavye ve\n * iskelet bunun üzerinde çalışır. Saf mantık `utils.ts`te (TreeSelect de kullanır).\n *\n * Erişilebilirlik (WAI-ARIA APG Tree View): `role=\"tree\"` + `treeitem`\n * (`aria-level`/`aria-posinset`/`aria-setsize`, açılabilirse `aria-expanded`,\n * seçilebilirse `aria-selected`, işaretlenebilirse `aria-checked` true/false/\n * mixed). Tek Tab durağı (roving tabindex). ↑/↓, →/←, Home/End, `*`, harfle\n * atlama; Enter seçer, Space (onay kutulu ağaçta) işaretler. Dokunmatikte\n * satırlar 44px.\n */\nexport function Tree(props: Readonly<TreeProps>) {\n const {\n selectable = true,\n multiple = false,\n checkable = false,\n checkStrictly = false,\n loadData,\n expandAction = false,\n showLine = false,\n blockNode = false,\n searchValue,\n titleRender,\n notFoundContent = \"Sonuç bulunamadı\",\n className,\n skeleton = false,\n } = props;\n const baseId = useId();\n const state = useTreeState(props);\n const { index, visible, expandedSet } = state;\n const [loadingKeys, setLoadingKeys] = useState<ReadonlySet<string>>(new Set());\n const [focusKey, setFocusKey] = useState<string | null>(null);\n const moveFocus = useRef(false);\n\n const lazy = Boolean(loadData);\n const canExpand = (node: TreeNode) => isExpandable(node, lazy);\n const domId = (key: string) => `${baseId}-${key}`;\n\n const activeKey = resolveActiveKey(focusKey, visible, index, state.selected);\n\n useEffect(() => {\n if (!moveFocus.current || !activeKey) return;\n moveFocus.current = false;\n document.getElementById(domId(activeKey))?.focus();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeKey]);\n\n const focusNode = (key: string) => {\n moveFocus.current = true;\n setFocusKey(key);\n };\n\n const setOpen = (node: TreeNode, open: boolean) => {\n const next = open ? [...new Set([...state.expanded, node.key])] : state.expanded.filter((k) => k !== node.key);\n state.setExpanded(next);\n props.onExpand?.(next, { node, expanded: open });\n if (open && loadData && node.children === undefined && !node.isLeaf && !loadingKeys.has(node.key)) {\n setLoadingKeys((s) => new Set(s).add(node.key));\n loadData(node)\n .catch(() => state.setExpanded(state.expanded.filter((k) => k !== node.key)))\n .finally(() =>\n setLoadingKeys((s) => {\n const n = new Set(s);\n n.delete(node.key);\n return n;\n })\n );\n }\n };\n\n const toggleOpen = (node: TreeNode) => setOpen(node, !expandedSet.has(node.key));\n\n const nodeSelectable = (node: TreeNode) => selectable && node.selectable !== false && !node.disabled;\n const nodeCheckable = (node: TreeNode) => checkable && node.checkable !== false;\n\n const select = (node: TreeNode) => {\n if (!nodeSelectable(node)) return;\n const isSelected = state.selected.includes(node.key);\n let next: string[];\n if (multiple) next = isSelected ? state.selected.filter((k) => k !== node.key) : [...state.selected, node.key];\n else next = isSelected ? [] : [node.key];\n state.setSelected(next);\n props.onSelect?.(next, { node, selected: !isSelected });\n };\n\n const check = (node: TreeNode) => {\n if (!nodeCheckable(node) || node.disabled || node.disableCheckbox) return;\n const checked = !state.checkInfo.checked.includes(node.key);\n const info = toggleCheck(state.checkInfo.checked, node.key, checked, index, checkStrictly);\n state.setRawChecked(info.checked);\n props.onCheck?.(info.checked, { node, checked, halfCheckedKeys: info.halfChecked });\n };\n\n const activate = (node: TreeNode) => {\n if (nodeSelectable(node)) select(node);\n else if (nodeCheckable(node)) check(node);\n if (expandAction === \"click\" && canExpand(node)) toggleOpen(node);\n };\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n // Durumdaki odak değil, olayın geldiği düğüm: odak ve tuş aynı karede gelirse state henüz güncellenmemiş olabilir.\n const currentKey = (event.target as HTMLElement).closest<HTMLElement>(\"[role=treeitem]\")?.dataset.key ?? activeKey;\n const node = currentKey ? index.get(currentKey)?.node : undefined;\n if (!currentKey || !node) return;\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n if (event.key === \" \" && nodeCheckable(node)) check(node);\n else if (!node.disabled) activate(node);\n return;\n }\n const action = getKeyAction(visible, currentKey, event.key, (k) => expandedSet.has(k), canExpand);\n if (!action) return;\n event.preventDefault();\n if (action.type === \"focus\") focusNode(action.key);\n else if (action.type === \"expand\") setOpen(node, true);\n else if (action.type === \"collapse\") setOpen(node, false);\n else {\n const next = [...new Set([...state.expanded, ...action.keys])];\n state.setExpanded(next);\n props.onExpand?.(next, { node, expanded: true });\n }\n };\n\n const checkedSet = new Set(state.checkInfo.checked);\n const halfSet = new Set(state.checkInfo.halfChecked);\n\n if (skeleton && props.treeData.length === 0) return <Placeholders />;\n if (visible.length === 0) {\n return <div className={cn(\"px-2 py-3 text-sm text-mari-muted\", className)}>{searchValue ? notFoundContent : null}</div>;\n }\n\n return (\n // Tuşlar treeitem'lerden kabarcıklanır (APG: odak treeitem'de).\n <div\n role={skeleton ? undefined : \"tree\"}\n aria-label={skeleton ? undefined : props[\"aria-label\"]}\n aria-labelledby={skeleton ? undefined : props[\"aria-labelledby\"]}\n aria-multiselectable={!skeleton && selectable && multiple ? true : undefined}\n aria-hidden={skeleton || undefined}\n aria-busy={skeleton || undefined}\n data-skeleton={skeleton ? \"\" : undefined}\n onKeyDown={skeleton ? undefined : onKeyDown}\n className={cn(\"flex flex-col text-sm\", skeleton && \"pointer-events-none select-none\", className)}\n >\n {visible.map((entry) => {\n const { node } = entry;\n const checkState = nodeCheckable(node) ? getCheckState(node.key, checkedSet, halfSet) : null;\n return (\n <Row\n key={node.key}\n entry={entry}\n id={domId(node.key)}\n focused={node.key === activeKey}\n open={expandedSet.has(node.key)}\n expandable={canExpand(node)}\n loading={loadingKeys.has(node.key)}\n selected={state.selected.includes(node.key)}\n selectable={selectable && node.selectable !== false}\n checkState={checkState}\n showLine={showLine}\n blockNode={blockNode}\n searchValue={searchValue}\n titleRender={titleRender}\n skeleton={skeleton}\n onToggle={() => {\n focusNode(node.key);\n toggleOpen(node);\n }}\n onCheck={() => {\n focusNode(node.key);\n check(node);\n }}\n onActivate={() => {\n focusNode(node.key);\n activate(node);\n }}\n onDoubleActivate={() => {\n if (expandAction === \"doubleClick\" && canExpand(node)) toggleOpen(node);\n }}\n onFocus={() => setFocusKey(node.key)}\n />\n );\n })}\n </div>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
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 * Faz 16.4 — 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 * 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 * Faz 16.4 — 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 (ant.design gibi). 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 (ant.design'ın \"temizlendi\" işareti). */\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"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/checkbox/Checkbox.tsx","../src/checkbox/utils.ts"],"sourcesContent":["\"use client\";\n\nimport React, { forwardRef, useEffect, useId, useImperativeHandle, useRef } from \"react\";\nimport { CheckIcon } from \"lucide-react\";\nimport { cn, useControllableState } from \"@mari-ui/core\";\nimport { bgSolidContrastClass, textSolidContrastClass } from \"../lib/colorClasses\";\nimport { skeletonBoxProps } from \"../lib/skeleton\";\nimport { checkableTouchTargetClass, fontSizeClass } from \"../lib/sizeClasses\";\nimport type { CheckboxChangeEvent, CheckboxProps } from \"./types\";\nimport { getCheckIconClass, getIndeterminateSizeClasses, getShapeClasses, getSizeClasses, getVariantClasses } from \"./utils\";\n\nexport type { CheckboxProps };\n\n/**\n * `useControllableState` ile controlled/uncontrolled ayrımı artık burada\n * elle yazılmıyor (eskiden `useState(defaultChecked ?? checked ?? false)`\n * ile başlatılıp `checked={typeof checked === \"boolean\" ? checked :\n * isChecked}` şeklinde ayrıca kontrol ediliyordu — iki yerde aynı mantık).\n */\nconst DESCRIPTION_INDENT_CLASS = { sm: \"pl-5\", md: \"pl-6\", lg: \"pl-7\" } as const;\n\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n autoFocus = false,\n checked,\n defaultChecked = false,\n disabled = false,\n indeterminate = false,\n onChange,\n onBlur,\n onFocus,\n className,\n classNames = {},\n label,\n description,\n variant = \"outline\",\n color,\n size = \"md\",\n shape = \"default\",\n id,\n name,\n value,\n required,\n skeleton = false,\n },\n ref\n ) => {\n // `color` varsayılansız: \"renk açıkça verilmedi\" ile \"primary seçildi\"\n // ayrımı dinlenme halindeki kenarlığın nötr mü renkli mi olacağını\n // belirler (Faz 13 — checked OLMAYAN kutucuk mavi görünmemeli).\n // İşaretliyken çentiğin/açıklamanın rengi — renk verilmediyse `primary`.\n const fillColor = color ?? \"primary\";\n const [isChecked, setIsChecked] = useControllableState<boolean>({ value: checked, defaultValue: defaultChecked });\n\n const inputRef = useRef<HTMLInputElement>(null);\n const descriptionId = useId();\n useImperativeHandle(ref, () => inputRef.current!, []);\n\n const handleChange = (e: CheckboxChangeEvent) => {\n setIsChecked(e.target.checked);\n onChange?.(e);\n };\n\n useEffect(() => {\n if (inputRef.current) inputRef.current.indeterminate = indeterminate;\n }, [indeterminate]);\n\n if (skeleton) {\n return (\n <span aria-hidden className={cn(\"inline-flex items-center gap-2\", classNames.wrapper)}>\n <span {...skeletonBoxProps(cn(\"shrink-0\", getSizeClasses(size), getShapeClasses(shape)))} />\n {label && <span {...skeletonBoxProps(cn(\"rounded-sm\", fontSizeClass[size]))}>{label}</span>}\n </span>\n );\n }\n\n const baseClasses = cn(\n \"shrink-0 cursor-pointer appearance-none border transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-mari-ring\",\n getSizeClasses(size),\n getShapeClasses(shape),\n getVariantClasses(variant, color, indeterminate),\n disabled && \"opacity-50 cursor-not-allowed\",\n classNames.checkbox,\n className\n );\n\n return (\n <label className={cn(\"inline-flex flex-col gap-1 cursor-pointer\", disabled && \"cursor-not-allowed\", classNames.wrapper)}>\n <span className={cn(\"relative inline-flex items-center gap-2\", checkableTouchTargetClass[size])}>\n <input\n ref={inputRef}\n id={id}\n type=\"checkbox\"\n // eslint-disable-next-line jsx-a11y/no-autofocus -- pass-through: kütüphane autofocus'u ZORLAMIYOR, tüketicinin verdiği prop'u iletiyor.\n autoFocus={autoFocus}\n checked={isChecked}\n disabled={disabled}\n name={name}\n value={value}\n required={required}\n aria-describedby={description ? descriptionId : undefined}\n onChange={handleChange}\n onBlur={onBlur}\n onFocus={onFocus}\n className={baseClasses}\n />\n {(indeterminate || isChecked) && (\n <span className={cn(\"absolute pointer-events-none\", getSizeClasses(size), \"flex items-center justify-center\")}>\n {indeterminate ? (\n <span className={cn(\"rounded-full\", bgSolidContrastClass[fillColor], getIndeterminateSizeClasses(size))} />\n ) : (\n <CheckIcon className={cn(textSolidContrastClass[fillColor], getCheckIconClass(size))} strokeWidth={3.5} />\n )}\n </span>\n )}\n {label && (\n <span className={cn(\"select-none text-mari-foreground\", fontSizeClass[size], disabled && \"text-mari-disabled\", classNames.label)}>\n {label}\n </span>\n )}\n </span>\n {description && (\n // Etiket hizasında başlar (kutu genişliği + gap): sm 12+8, md 16+8, lg 20+8px.\n <span id={descriptionId} className={cn(\"text-xs text-mari-muted\", DESCRIPTION_INDENT_CLASS[size])}>\n {description}\n </span>\n )}\n </label>\n );\n }\n);\n\nCheckbox.displayName = \"Checkbox\";\n","import { cn, type ColorRole, type Size, type Variant } from \"@mari-ui/core\";\nimport {\n bgSolidClass,\n borderStrongColorClass,\n checkedBgSolidClass,\n checkedBgSolidHoverClass,\n checkedBorderSolidClass,\n textSolidContrastClass,\n} from \"../lib/colorClasses\";\nimport type { CheckboxShape } from \"./types\";\n\nconst SIZE_CLASS: Record<Size, string> = {\n sm: \"h-3 w-3 text-xs\",\n md: \"h-4 w-4 text-sm\",\n lg: \"h-5 w-5 text-base\",\n};\n\n/** Çentik ikonu kutuyla orantılı — eskiden her boyutta sabit 16px'ti (sm'nin 12px kutusundan taşıyordu). */\nconst CHECK_ICON_CLASS: Record<Size, string> = {\n sm: \"size-2.5\",\n md: \"size-3\",\n lg: \"size-3.5\",\n};\n\n/** Belirsiz (indeterminate) hal: dolu kutunun ortasında yatay bir çizgi. */\nconst INDETERMINATE_SIZE_CLASS: Record<Size, string> = {\n sm: \"h-0.5 w-1.5\",\n md: \"h-0.5 w-2\",\n lg: \"h-0.5 w-2.5\",\n};\n\nexport function getSizeClasses(size: Size): string {\n return SIZE_CLASS[size];\n}\n\nexport function getIndeterminateSizeClasses(size: Size): string {\n return INDETERMINATE_SIZE_CLASS[size];\n}\n\nexport function getCheckIconClass(size: Size): string {\n return CHECK_ICON_CLASS[size];\n}\n\nexport function getShapeClasses(shape: CheckboxShape): string {\n // `pill` eskiden `px-4` da taşıyordu — 16px'lik kutu 34px'lik bir ovale dönüşüyordu.\n // Kutu köşesi, kontrol ölçeğinde (`rounded-sm`), radius preset'ini izler.\n return { square: \"rounded-none\", pill: \"rounded-full\", default: \"rounded-sm\" }[shape];\n}\n\n/**\n * `color` verilmediyse (yani gerçek bir doğrulama durumu YOKSA) dinlenme\n * halindeki (işaretsiz) kenarlık nötr/gri (`border-mari-input`) — sadece\n * işaretlenince `primary`e (veya AÇIKÇA verilen renge) bürünür. `color`\n * AÇIKÇA verildiyse (örn. `error`) o renk işaretli/işaretsiz HER ZAMAN\n * kalıcıdır (bkz. `input/utils.ts`'teki aynı desen).\n */\nexport function getVariantClasses(variant: Extract<Variant, \"solid\" | \"outline\">, color: ColorRole | undefined, indeterminate = false): string {\n const fillColor = color ?? \"primary\";\n // Belirsiz hal native `checked` DEĞİL — eskiden hiçbir dolgu almıyordu, iç\n // çubuk da yüzey renginde olduğu için kutu BOŞ görünüyordu.\n const indeterminateClass = indeterminate && cn(bgSolidClass[fillColor], \"border-transparent\");\n if (variant === \"solid\") {\n return cn(\"border-transparent bg-mari-surface-alt\", checkedBgSolidClass[fillColor], checkedBgSolidHoverClass[fillColor], indeterminateClass);\n }\n // Açıkça verilen renk (doğrulama durumu) dinlenmede de rol renginde (≥3:1).\n const restBorderClass = color ? borderStrongColorClass[color] : \"border-mari-input\";\n return cn(\"bg-mari-surface\", restBorderClass, checkedBgSolidClass[fillColor], checkedBorderSolidClass[fillColor], textSolidContrastClass[fillColor], indeterminateClass);\n}\n"],"mappings":"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","names":["cn","cn"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/FloatingArrow.tsx"],"sourcesContent":["import React from \"react\";\nimport type { Side } from \"./floating\";\n\n/**\n * Yüzey renkli yüzen panellerin (Dropdown, Popover, Popconfirm) ortak ölçüleri\n * ve oku — Faz 16.2'de DropdownContent'ten taşındı.\n *\n * Yapısal ölçüler ant.design'ın canlı Dropdown sayfasından `getComputedStyle`\n * ile alındı: ok yokken tetikleyiciyle panel arasında 4px, okluyken 12px\n * (8px'lik ok kutusu + 4px); ok, panelin hizalandığı kenardan 12px içeride\n * başlayan 16px'lik bir kutu, yani ORTASI kenardan 20px. GÖRÜNÜM (gölge,\n * kenarlık, renk) ant'tan değil kendi token'larımızdan gelir.\n */\nexport const FLOATING_GAP_PX = 4;\nexport const FLOATING_ARROW_GAP_PX = 12;\nexport const FLOATING_ARROW_INSET_PX = 20;\n/** Panel viewport kenarına YAPIŞMASIN diye bırakılan minimum boşluk. */\nexport const FLOATING_EDGE_PX = 8;\n\n/** ant.design okunun birebir `clip-path`i: 16×8, ucu yuvarlak, taban köşeleri panele yumuşakça karışan üçgen. */\nconst ARROW_FILL_PATH = \"M 0 8 A 4 4 0 0 0 2.82843 6.82843 L 6.58579 3.07107 A 2 2 0 0 1 9.41421 3.07107 L 13.1716 6.82843 A 4 4 0 0 0 16 8 Z\";\n/** Aynı yol KAPATILMADAN — kenarlık rengiyle sadece eğik kenarlar çizilir; taban çizgisi panelin kenarlığının üstünden geçmesin diye (dolgu o kısmı örter). */\nconst ARROW_STROKE_PATH = \"M 0 8 A 4 4 0 0 0 2.82843 6.82843 L 6.58579 3.07107 A 2 2 0 0 1 9.41421 3.07107 L 13.1716 6.82843 A 4 4 0 0 0 16 8\";\n\nconst ARROW_LONG_PX = 16;\nconst ARROW_SHORT_PX = 8;\n/** Panelin kenarlığı: mutlak konumlu ok padding kutusuna göre konumlanır, bu yüzden çapraz eksende 1px düzeltilir. */\nconst BORDER_PX = 1;\n\n/** `side` panelin tetikleyiciye GÖRE konumu; ok panelin tetikleyiciye bakan kenarında durur ve tetikleyiciyi gösterir. */\nfunction getArrowBox(side: Side, offset: number): { style: React.CSSProperties; rotation: number } {\n const half = ARROW_LONG_PX / 2 + BORDER_PX;\n switch (side) {\n case \"bottom\":\n return { style: { left: offset - half, top: -ARROW_SHORT_PX, width: ARROW_LONG_PX, height: ARROW_SHORT_PX }, rotation: 0 };\n case \"top\":\n return { style: { left: offset - half, top: \"100%\", width: ARROW_LONG_PX, height: ARROW_SHORT_PX }, rotation: 180 };\n case \"right\":\n return { style: { left: -ARROW_SHORT_PX, top: offset - half, width: ARROW_SHORT_PX, height: ARROW_LONG_PX }, rotation: -90 };\n default:\n return { style: { left: \"100%\", top: offset - half, width: ARROW_SHORT_PX, height: ARROW_LONG_PX }, rotation: 90 };\n }\n}\n\nexport function FloatingArrow({ side, offset }: Readonly<{ side: Side; offset: number }>) {\n const { style, rotation } = getArrowBox(side, offset);\n return (\n <span aria-hidden=\"true\" className=\"pointer-events-none absolute\" style={style}>\n <svg\n width={ARROW_LONG_PX}\n height={ARROW_SHORT_PX}\n viewBox=\"0 0 16 8\"\n className=\"absolute left-1/2 top-1/2 overflow-visible\"\n style={{ transform: `translate(-50%, -50%) rotate(${rotation}deg)` }}\n >\n <path d={ARROW_FILL_PATH} className=\"fill-mari-surface\" />\n {/* Taban ucu panelin 1px kenarlığının TAM ortasına otursun diye yarım piksel yukarı: aksi halde çizgi kenarlığın 0.5px dışına/altına taşıp çıkıntı bırakır. */}\n <path d={ARROW_STROKE_PATH} fill=\"none\" transform=\"translate(0 -0.5)\" className=\"stroke-mari-border\" />\n </svg>\n </span>\n );\n}\n"],"mappings":";AAgDM,SAOE,KAPF;AAnCC,IAAM,kBAAkB;AACxB,IAAM,wBAAwB;AAC9B,IAAM,0BAA0B;AAEhC,IAAM,mBAAmB;AAGhC,IAAM,kBAAkB;AAExB,IAAM,oBAAoB;AAE1B,IAAM,gBAAgB;AACtB,IAAM,iBAAiB;AAEvB,IAAM,YAAY;AAGlB,SAAS,YAAY,MAAY,QAAkE;AACjG,QAAM,OAAO,gBAAgB,IAAI;AACjC,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,EAAE,OAAO,EAAE,MAAM,SAAS,MAAM,KAAK,CAAC,gBAAgB,OAAO,eAAe,QAAQ,eAAe,GAAG,UAAU,EAAE;AAAA,IAC3H,KAAK;AACH,aAAO,EAAE,OAAO,EAAE,MAAM,SAAS,MAAM,KAAK,QAAQ,OAAO,eAAe,QAAQ,eAAe,GAAG,UAAU,IAAI;AAAA,IACpH,KAAK;AACH,aAAO,EAAE,OAAO,EAAE,MAAM,CAAC,gBAAgB,KAAK,SAAS,MAAM,OAAO,gBAAgB,QAAQ,cAAc,GAAG,UAAU,IAAI;AAAA,IAC7H;AACE,aAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,KAAK,SAAS,MAAM,OAAO,gBAAgB,QAAQ,cAAc,GAAG,UAAU,GAAG;AAAA,EACrH;AACF;AAEO,SAAS,cAAc,EAAE,MAAM,OAAO,GAA6C;AACxF,QAAM,EAAE,OAAO,SAAS,IAAI,YAAY,MAAM,MAAM;AACpD,SACE,oBAAC,UAAK,eAAY,QAAO,WAAU,gCAA+B,OAChE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAQ;AAAA,MACR,WAAU;AAAA,MACV,OAAO,EAAE,WAAW,gCAAgC,QAAQ,OAAO;AAAA,MAEnE;AAAA,4BAAC,UAAK,GAAG,iBAAiB,WAAU,qBAAoB;AAAA,QAExD,oBAAC,UAAK,GAAG,mBAAmB,MAAK,QAAO,WAAU,qBAAoB,WAAU,sBAAqB;AAAA;AAAA;AAAA,EACvG,GACF;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/elevationClass.ts"],"sourcesContent":["import { cn } from \"@mari-ui/core\";\n\n/**\n * `foundations/Elevation.mdx`'te vaat edilen tablo: `shadow-mari-*` + ince\n * `border-mari-border` kombinasyonu birlikte kullanılır. Koyu temada saf\n * siyah-alfa gölge tek başına neredeyse görünmez — yükseklik hissi asıl\n * kenarlıktan gelir, gölge sadece üstüne biner. Faz 13 öncesi component'ler\n * (Card, Carousel) `shadow-md`/`shadow` gibi tokensız Tailwind built-in'lerini\n * kullanıyordu; bu tablo onların yerini alır.\n */\nexport const elevationClass: Record<\"sm\" | \"md\" | \"lg\" | \"xl\", string> = {\n sm: cn(\"shadow-mari-sm\", \"border border-mari-border\"),\n md: cn(\"shadow-mari-md\", \"border border-mari-border\"),\n lg: cn(\"shadow-mari-lg\", \"border border-mari-border\"),\n xl: cn(\"shadow-mari-xl\", \"border border-mari-border\"),\n};\n"],"mappings":";AAAA,SAAS,UAAU;AAUZ,IAAM,iBAA4D;AAAA,EACvE,IAAI,GAAG,kBAAkB,2BAA2B;AAAA,EACpD,IAAI,GAAG,kBAAkB,2BAA2B;AAAA,EACpD,IAAI,GAAG,kBAAkB,2BAA2B;AAAA,EACpD,IAAI,GAAG,kBAAkB,2BAA2B;AACtD;","names":[]}