@handijit/ui 0.0.0-stage → 1.0.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 (658) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +872 -2
  3. package/build/base.css +1 -0
  4. package/build/charts.cjs +2 -0
  5. package/build/charts.cjs.map +1 -0
  6. package/build/charts.css +1 -0
  7. package/build/charts.js +1865 -0
  8. package/build/charts.js.map +1 -0
  9. package/build/chat.cjs +4 -0
  10. package/build/chat.cjs.map +1 -0
  11. package/build/chat.css +1 -0
  12. package/build/chat.js +1120 -0
  13. package/build/chat.js.map +1 -0
  14. package/build/components/Accordion/index.cjs +2 -0
  15. package/build/components/Accordion/index.cjs.map +1 -0
  16. package/build/components/Accordion/index.d.ts +29 -0
  17. package/build/components/Accordion/index.js +42 -0
  18. package/build/components/Accordion/index.js.map +1 -0
  19. package/build/components/Accordion/style.css +1 -0
  20. package/build/components/Alert/index.cjs +2 -0
  21. package/build/components/Alert/index.cjs.map +1 -0
  22. package/build/components/Alert/index.d.ts +15 -0
  23. package/build/components/Alert/index.js +30 -0
  24. package/build/components/Alert/index.js.map +1 -0
  25. package/build/components/Alert/style.css +1 -0
  26. package/build/components/Avatar/index.cjs +2 -0
  27. package/build/components/Avatar/index.cjs.map +1 -0
  28. package/build/components/Avatar/index.d.ts +26 -0
  29. package/build/components/Avatar/index.js +57 -0
  30. package/build/components/Avatar/index.js.map +1 -0
  31. package/build/components/Avatar/style.css +1 -0
  32. package/build/components/Badge/index.cjs +2 -0
  33. package/build/components/Badge/index.cjs.map +1 -0
  34. package/build/components/Badge/index.d.ts +26 -0
  35. package/build/components/Badge/index.js +26 -0
  36. package/build/components/Badge/index.js.map +1 -0
  37. package/build/components/Badge/style.css +1 -0
  38. package/build/components/BottomSheet/index.cjs +2 -0
  39. package/build/components/BottomSheet/index.cjs.map +1 -0
  40. package/build/components/BottomSheet/index.d.ts +21 -0
  41. package/build/components/BottomSheet/index.js +85 -0
  42. package/build/components/BottomSheet/index.js.map +1 -0
  43. package/build/components/BottomSheet/style.css +1 -0
  44. package/build/components/Breadcrumb/index.cjs +2 -0
  45. package/build/components/Breadcrumb/index.cjs.map +1 -0
  46. package/build/components/Breadcrumb/index.d.ts +20 -0
  47. package/build/components/Breadcrumb/index.js +31 -0
  48. package/build/components/Breadcrumb/index.js.map +1 -0
  49. package/build/components/Breadcrumb/style.css +1 -0
  50. package/build/components/Button/index.cjs +2 -0
  51. package/build/components/Button/index.cjs.map +1 -0
  52. package/build/components/Button/index.d.ts +32 -0
  53. package/build/components/Button/index.js +88 -0
  54. package/build/components/Button/index.js.map +1 -0
  55. package/build/components/Button/style.css +1 -0
  56. package/build/components/Card/index.cjs +2 -0
  57. package/build/components/Card/index.cjs.map +1 -0
  58. package/build/components/Card/index.d.ts +51 -0
  59. package/build/components/Card/index.js +58 -0
  60. package/build/components/Card/index.js.map +1 -0
  61. package/build/components/Card/style.css +1 -0
  62. package/build/components/Carousel/index.cjs +2 -0
  63. package/build/components/Carousel/index.cjs.map +1 -0
  64. package/build/components/Carousel/index.d.ts +24 -0
  65. package/build/components/Carousel/index.js +111 -0
  66. package/build/components/Carousel/index.js.map +1 -0
  67. package/build/components/Carousel/style.css +1 -0
  68. package/build/components/Checkbox/index.cjs +2 -0
  69. package/build/components/Checkbox/index.cjs.map +1 -0
  70. package/build/components/Checkbox/index.d.ts +10 -0
  71. package/build/components/Checkbox/index.js +33 -0
  72. package/build/components/Checkbox/index.js.map +1 -0
  73. package/build/components/Checkbox/style.css +1 -0
  74. package/build/components/Chip/index.cjs +2 -0
  75. package/build/components/Chip/index.cjs.map +1 -0
  76. package/build/components/Chip/index.d.ts +27 -0
  77. package/build/components/Chip/index.js +67 -0
  78. package/build/components/Chip/index.js.map +1 -0
  79. package/build/components/Chip/style.css +1 -0
  80. package/build/components/ChipGroup/index.cjs +2 -0
  81. package/build/components/ChipGroup/index.cjs.map +1 -0
  82. package/build/components/ChipGroup/index.d.ts +34 -0
  83. package/build/components/ChipGroup/index.js +64 -0
  84. package/build/components/ChipGroup/index.js.map +1 -0
  85. package/build/components/ChipGroup/style.css +1 -0
  86. package/build/components/CodeBadge/index.cjs +2 -0
  87. package/build/components/CodeBadge/index.cjs.map +1 -0
  88. package/build/components/CodeBadge/index.d.ts +36 -0
  89. package/build/components/CodeBadge/index.js +62 -0
  90. package/build/components/CodeBadge/index.js.map +1 -0
  91. package/build/components/CodeBadge/style.css +1 -0
  92. package/build/components/Combobox/index.cjs +2 -0
  93. package/build/components/Combobox/index.cjs.map +1 -0
  94. package/build/components/Combobox/index.d.ts +6 -0
  95. package/build/components/Combobox/index.js +302 -0
  96. package/build/components/Combobox/index.js.map +1 -0
  97. package/build/components/Combobox/style.css +1 -0
  98. package/build/components/CommandPalette/index.cjs +2 -0
  99. package/build/components/CommandPalette/index.cjs.map +1 -0
  100. package/build/components/CommandPalette/index.d.ts +37 -0
  101. package/build/components/CommandPalette/index.js +181 -0
  102. package/build/components/CommandPalette/index.js.map +1 -0
  103. package/build/components/CommandPalette/style.css +1 -0
  104. package/build/components/ConfirmDialog/index.cjs +2 -0
  105. package/build/components/ConfirmDialog/index.cjs.map +1 -0
  106. package/build/components/ConfirmDialog/index.d.ts +34 -0
  107. package/build/components/ConfirmDialog/index.js +85 -0
  108. package/build/components/ConfirmDialog/index.js.map +1 -0
  109. package/build/components/CopyField/index.cjs +2 -0
  110. package/build/components/CopyField/index.cjs.map +1 -0
  111. package/build/components/CopyField/index.d.ts +20 -0
  112. package/build/components/CopyField/index.js +44 -0
  113. package/build/components/CopyField/index.js.map +1 -0
  114. package/build/components/CopyField/style.css +1 -0
  115. package/build/components/DataTable/index.cjs +2 -0
  116. package/build/components/DataTable/index.cjs.map +1 -0
  117. package/build/components/DataTable/index.d.ts +60 -0
  118. package/build/components/DataTable/index.js +109 -0
  119. package/build/components/DataTable/index.js.map +1 -0
  120. package/build/components/DataTable/style.css +1 -0
  121. package/build/components/DateField/index.cjs +2 -0
  122. package/build/components/DateField/index.cjs.map +1 -0
  123. package/build/components/DateField/index.d.ts +44 -0
  124. package/build/components/DateField/index.js +79 -0
  125. package/build/components/DateField/index.js.map +1 -0
  126. package/build/components/DateField/style.css +1 -0
  127. package/build/components/Directory/index.cjs +2 -0
  128. package/build/components/Directory/index.cjs.map +1 -0
  129. package/build/components/Directory/index.d.ts +51 -0
  130. package/build/components/Directory/index.js +46 -0
  131. package/build/components/Directory/index.js.map +1 -0
  132. package/build/components/Directory/style.css +1 -0
  133. package/build/components/Disclosure/index.cjs +2 -0
  134. package/build/components/Disclosure/index.cjs.map +1 -0
  135. package/build/components/Disclosure/index.d.ts +34 -0
  136. package/build/components/Disclosure/index.js +64 -0
  137. package/build/components/Disclosure/index.js.map +1 -0
  138. package/build/components/Disclosure/style.css +1 -0
  139. package/build/components/Divider/index.cjs +2 -0
  140. package/build/components/Divider/index.cjs.map +1 -0
  141. package/build/components/Divider/index.d.ts +10 -0
  142. package/build/components/Divider/index.js +24 -0
  143. package/build/components/Divider/index.js.map +1 -0
  144. package/build/components/Divider/style.css +1 -0
  145. package/build/components/Drawer/index.cjs +2 -0
  146. package/build/components/Drawer/index.cjs.map +1 -0
  147. package/build/components/Drawer/index.d.ts +22 -0
  148. package/build/components/Drawer/index.js +88 -0
  149. package/build/components/Drawer/index.js.map +1 -0
  150. package/build/components/Drawer/style.css +1 -0
  151. package/build/components/EmptyState/index.cjs +2 -0
  152. package/build/components/EmptyState/index.cjs.map +1 -0
  153. package/build/components/EmptyState/index.d.ts +19 -0
  154. package/build/components/EmptyState/index.js +35 -0
  155. package/build/components/EmptyState/index.js.map +1 -0
  156. package/build/components/EmptyState/style.css +1 -0
  157. package/build/components/Field/index.cjs +2 -0
  158. package/build/components/Field/index.cjs.map +1 -0
  159. package/build/components/Field/index.d.ts +31 -0
  160. package/build/components/Field/index.js +52 -0
  161. package/build/components/Field/index.js.map +1 -0
  162. package/build/components/Field/style.css +1 -0
  163. package/build/components/FileUpload/index.cjs +2 -0
  164. package/build/components/FileUpload/index.cjs.map +1 -0
  165. package/build/components/FileUpload/index.d.ts +42 -0
  166. package/build/components/FileUpload/index.js +145 -0
  167. package/build/components/FileUpload/index.js.map +1 -0
  168. package/build/components/FileUpload/style.css +1 -0
  169. package/build/components/FilterBar/index.cjs +2 -0
  170. package/build/components/FilterBar/index.cjs.map +1 -0
  171. package/build/components/FilterBar/index.d.ts +28 -0
  172. package/build/components/FilterBar/index.js +35 -0
  173. package/build/components/FilterBar/index.js.map +1 -0
  174. package/build/components/FilterBar/style.css +1 -0
  175. package/build/components/IconButton/index.cjs +2 -0
  176. package/build/components/IconButton/index.cjs.map +1 -0
  177. package/build/components/IconButton/index.d.ts +22 -0
  178. package/build/components/IconButton/index.js +61 -0
  179. package/build/components/IconButton/index.js.map +1 -0
  180. package/build/components/IconButton/style.css +1 -0
  181. package/build/components/Input/index.cjs +2 -0
  182. package/build/components/Input/index.cjs.map +1 -0
  183. package/build/components/Input/index.d.ts +15 -0
  184. package/build/components/Input/index.js +52 -0
  185. package/build/components/Input/index.js.map +1 -0
  186. package/build/components/Input/style.css +1 -0
  187. package/build/components/Kbd/index.cjs +2 -0
  188. package/build/components/Kbd/index.cjs.map +1 -0
  189. package/build/components/Kbd/index.d.ts +12 -0
  190. package/build/components/Kbd/index.js +13 -0
  191. package/build/components/Kbd/index.js.map +1 -0
  192. package/build/components/Kbd/style.css +1 -0
  193. package/build/components/Link/index.cjs +2 -0
  194. package/build/components/Link/index.cjs.map +1 -0
  195. package/build/components/Link/index.d.ts +5 -0
  196. package/build/components/Link/index.js +11 -0
  197. package/build/components/Link/index.js.map +1 -0
  198. package/build/components/Menu/index.cjs +2 -0
  199. package/build/components/Menu/index.cjs.map +1 -0
  200. package/build/components/Menu/index.d.ts +46 -0
  201. package/build/components/Menu/index.js +241 -0
  202. package/build/components/Menu/index.js.map +1 -0
  203. package/build/components/Menu/style.css +1 -0
  204. package/build/components/Modal/index.cjs +2 -0
  205. package/build/components/Modal/index.cjs.map +1 -0
  206. package/build/components/Modal/index.d.ts +28 -0
  207. package/build/components/Modal/index.js +92 -0
  208. package/build/components/Modal/index.js.map +1 -0
  209. package/build/components/Modal/style.css +1 -0
  210. package/build/components/PageHeader/index.cjs +2 -0
  211. package/build/components/PageHeader/index.cjs.map +1 -0
  212. package/build/components/PageHeader/index.d.ts +24 -0
  213. package/build/components/PageHeader/index.js +34 -0
  214. package/build/components/PageHeader/index.js.map +1 -0
  215. package/build/components/PageHeader/style.css +1 -0
  216. package/build/components/Pagination/index.cjs +2 -0
  217. package/build/components/Pagination/index.cjs.map +1 -0
  218. package/build/components/Pagination/index.d.ts +39 -0
  219. package/build/components/Pagination/index.js +128 -0
  220. package/build/components/Pagination/index.js.map +1 -0
  221. package/build/components/Pagination/style.css +1 -0
  222. package/build/components/Panel/index.cjs +2 -0
  223. package/build/components/Panel/index.cjs.map +1 -0
  224. package/build/components/Panel/index.d.ts +43 -0
  225. package/build/components/Panel/index.js +55 -0
  226. package/build/components/Panel/index.js.map +1 -0
  227. package/build/components/Panel/style.css +1 -0
  228. package/build/components/PasswordInput/index.cjs +2 -0
  229. package/build/components/PasswordInput/index.cjs.map +1 -0
  230. package/build/components/PasswordInput/index.d.ts +14 -0
  231. package/build/components/PasswordInput/index.js +40 -0
  232. package/build/components/PasswordInput/index.js.map +1 -0
  233. package/build/components/PasswordInput/style.css +1 -0
  234. package/build/components/Popover/index.cjs +2 -0
  235. package/build/components/Popover/index.cjs.map +1 -0
  236. package/build/components/Popover/index.d.ts +20 -0
  237. package/build/components/Popover/index.js +91 -0
  238. package/build/components/Popover/index.js.map +1 -0
  239. package/build/components/Popover/style.css +1 -0
  240. package/build/components/Price/index.cjs +2 -0
  241. package/build/components/Price/index.cjs.map +1 -0
  242. package/build/components/Price/index.d.ts +22 -0
  243. package/build/components/Price/index.js +46 -0
  244. package/build/components/Price/index.js.map +1 -0
  245. package/build/components/Price/style.css +1 -0
  246. package/build/components/Progress/index.cjs +2 -0
  247. package/build/components/Progress/index.cjs.map +1 -0
  248. package/build/components/Progress/index.d.ts +49 -0
  249. package/build/components/Progress/index.js +120 -0
  250. package/build/components/Progress/index.js.map +1 -0
  251. package/build/components/Progress/style.css +1 -0
  252. package/build/components/PromptDialog/index.cjs +2 -0
  253. package/build/components/PromptDialog/index.cjs.map +1 -0
  254. package/build/components/PromptDialog/index.d.ts +36 -0
  255. package/build/components/PromptDialog/index.js +119 -0
  256. package/build/components/PromptDialog/index.js.map +1 -0
  257. package/build/components/PromptDialog/style.css +1 -0
  258. package/build/components/QuantityStepper/index.cjs +2 -0
  259. package/build/components/QuantityStepper/index.cjs.map +1 -0
  260. package/build/components/QuantityStepper/index.d.ts +21 -0
  261. package/build/components/QuantityStepper/index.js +106 -0
  262. package/build/components/QuantityStepper/index.js.map +1 -0
  263. package/build/components/QuantityStepper/style.css +1 -0
  264. package/build/components/Radio/index.cjs +2 -0
  265. package/build/components/Radio/index.cjs.map +1 -0
  266. package/build/components/Radio/index.d.ts +12 -0
  267. package/build/components/Radio/index.js +35 -0
  268. package/build/components/Radio/index.js.map +1 -0
  269. package/build/components/Radio/style.css +1 -0
  270. package/build/components/RadioCard/index.cjs +2 -0
  271. package/build/components/RadioCard/index.cjs.map +1 -0
  272. package/build/components/RadioCard/index.d.ts +16 -0
  273. package/build/components/RadioCard/index.js +48 -0
  274. package/build/components/RadioCard/index.js.map +1 -0
  275. package/build/components/RadioCard/style.css +1 -0
  276. package/build/components/RangeSlider/index.cjs +2 -0
  277. package/build/components/RangeSlider/index.cjs.map +1 -0
  278. package/build/components/RangeSlider/index.d.ts +26 -0
  279. package/build/components/RangeSlider/index.js +102 -0
  280. package/build/components/RangeSlider/index.js.map +1 -0
  281. package/build/components/RangeSlider/style.css +1 -0
  282. package/build/components/Rating/index.cjs +2 -0
  283. package/build/components/Rating/index.cjs.map +1 -0
  284. package/build/components/Rating/index.d.ts +16 -0
  285. package/build/components/Rating/index.js +29 -0
  286. package/build/components/Rating/index.js.map +1 -0
  287. package/build/components/Rating/style.css +1 -0
  288. package/build/components/RatingInput/index.cjs +2 -0
  289. package/build/components/RatingInput/index.cjs.map +1 -0
  290. package/build/components/RatingInput/index.d.ts +21 -0
  291. package/build/components/RatingInput/index.js +75 -0
  292. package/build/components/RatingInput/index.js.map +1 -0
  293. package/build/components/RatingInput/style.css +1 -0
  294. package/build/components/ScrollArea/index.cjs +2 -0
  295. package/build/components/ScrollArea/index.cjs.map +1 -0
  296. package/build/components/ScrollArea/index.d.ts +23 -0
  297. package/build/components/ScrollArea/index.js +65 -0
  298. package/build/components/ScrollArea/index.js.map +1 -0
  299. package/build/components/ScrollArea/style.css +1 -0
  300. package/build/components/SectionHeader/index.cjs +2 -0
  301. package/build/components/SectionHeader/index.cjs.map +1 -0
  302. package/build/components/SectionHeader/index.d.ts +17 -0
  303. package/build/components/SectionHeader/index.js +25 -0
  304. package/build/components/SectionHeader/index.js.map +1 -0
  305. package/build/components/SectionHeader/style.css +1 -0
  306. package/build/components/SegmentedControl/index.cjs +2 -0
  307. package/build/components/SegmentedControl/index.cjs.map +1 -0
  308. package/build/components/SegmentedControl/index.d.ts +24 -0
  309. package/build/components/SegmentedControl/index.js +69 -0
  310. package/build/components/SegmentedControl/index.js.map +1 -0
  311. package/build/components/SegmentedControl/style.css +1 -0
  312. package/build/components/Select/index.cjs +2 -0
  313. package/build/components/Select/index.cjs.map +1 -0
  314. package/build/components/Select/index.d.ts +39 -0
  315. package/build/components/Select/index.js +179 -0
  316. package/build/components/Select/index.js.map +1 -0
  317. package/build/components/Select/style.css +1 -0
  318. package/build/components/Skeleton/index.cjs +2 -0
  319. package/build/components/Skeleton/index.cjs.map +1 -0
  320. package/build/components/Skeleton/index.d.ts +25 -0
  321. package/build/components/Skeleton/index.js +50 -0
  322. package/build/components/Skeleton/index.js.map +1 -0
  323. package/build/components/Skeleton/style.css +1 -0
  324. package/build/components/Spinner/index.cjs +2 -0
  325. package/build/components/Spinner/index.cjs.map +1 -0
  326. package/build/components/Spinner/index.d.ts +11 -0
  327. package/build/components/Spinner/index.js +15 -0
  328. package/build/components/Spinner/index.js.map +1 -0
  329. package/build/components/Spinner/style.css +1 -0
  330. package/build/components/Stat/index.cjs +2 -0
  331. package/build/components/Stat/index.cjs.map +1 -0
  332. package/build/components/Stat/index.d.ts +34 -0
  333. package/build/components/Stat/index.js +72 -0
  334. package/build/components/Stat/index.js.map +1 -0
  335. package/build/components/Stat/style.css +1 -0
  336. package/build/components/StatusDot/index.cjs +2 -0
  337. package/build/components/StatusDot/index.cjs.map +1 -0
  338. package/build/components/StatusDot/index.d.ts +23 -0
  339. package/build/components/StatusDot/index.js +23 -0
  340. package/build/components/StatusDot/index.js.map +1 -0
  341. package/build/components/StatusDot/style.css +1 -0
  342. package/build/components/Steps/index.cjs +2 -0
  343. package/build/components/Steps/index.cjs.map +1 -0
  344. package/build/components/Steps/index.d.ts +23 -0
  345. package/build/components/Steps/index.js +69 -0
  346. package/build/components/Steps/index.js.map +1 -0
  347. package/build/components/Steps/style.css +1 -0
  348. package/build/components/SummaryCard/index.cjs +2 -0
  349. package/build/components/SummaryCard/index.cjs.map +1 -0
  350. package/build/components/SummaryCard/index.d.ts +24 -0
  351. package/build/components/SummaryCard/index.js +33 -0
  352. package/build/components/SummaryCard/index.js.map +1 -0
  353. package/build/components/SummaryCard/style.css +1 -0
  354. package/build/components/Switch/index.cjs +2 -0
  355. package/build/components/Switch/index.cjs.map +1 -0
  356. package/build/components/Switch/index.d.ts +16 -0
  357. package/build/components/Switch/index.js +42 -0
  358. package/build/components/Switch/index.js.map +1 -0
  359. package/build/components/Switch/style.css +1 -0
  360. package/build/components/Table/index.cjs +2 -0
  361. package/build/components/Table/index.cjs.map +1 -0
  362. package/build/components/Table/index.d.ts +28 -0
  363. package/build/components/Table/index.js +58 -0
  364. package/build/components/Table/index.js.map +1 -0
  365. package/build/components/Table/style.css +1 -0
  366. package/build/components/TableCheckbox/index.cjs +2 -0
  367. package/build/components/TableCheckbox/index.cjs.map +1 -0
  368. package/build/components/TableCheckbox/index.d.ts +15 -0
  369. package/build/components/TableCheckbox/index.js +31 -0
  370. package/build/components/TableCheckbox/index.js.map +1 -0
  371. package/build/components/TableCheckbox/style.css +1 -0
  372. package/build/components/Tabs/index.cjs +2 -0
  373. package/build/components/Tabs/index.cjs.map +1 -0
  374. package/build/components/Tabs/index.d.ts +27 -0
  375. package/build/components/Tabs/index.js +102 -0
  376. package/build/components/Tabs/index.js.map +1 -0
  377. package/build/components/Tabs/style.css +1 -0
  378. package/build/components/TagInput/index.cjs +2 -0
  379. package/build/components/TagInput/index.cjs.map +1 -0
  380. package/build/components/TagInput/index.d.ts +25 -0
  381. package/build/components/TagInput/index.js +124 -0
  382. package/build/components/TagInput/index.js.map +1 -0
  383. package/build/components/TagInput/style.css +1 -0
  384. package/build/components/TextLink/index.cjs +2 -0
  385. package/build/components/TextLink/index.cjs.map +1 -0
  386. package/build/components/TextLink/index.d.ts +16 -0
  387. package/build/components/TextLink/index.js +32 -0
  388. package/build/components/TextLink/index.js.map +1 -0
  389. package/build/components/TextLink/style.css +1 -0
  390. package/build/components/Textarea/index.cjs +2 -0
  391. package/build/components/Textarea/index.cjs.map +1 -0
  392. package/build/components/Textarea/index.d.ts +20 -0
  393. package/build/components/Textarea/index.js +68 -0
  394. package/build/components/Textarea/index.js.map +1 -0
  395. package/build/components/Textarea/style.css +1 -0
  396. package/build/components/Tile/index.cjs +2 -0
  397. package/build/components/Tile/index.cjs.map +1 -0
  398. package/build/components/Tile/index.d.ts +19 -0
  399. package/build/components/Tile/index.js +24 -0
  400. package/build/components/Tile/index.js.map +1 -0
  401. package/build/components/Tile/style.css +1 -0
  402. package/build/components/Timeline/index.cjs +2 -0
  403. package/build/components/Timeline/index.cjs.map +1 -0
  404. package/build/components/Timeline/index.d.ts +24 -0
  405. package/build/components/Timeline/index.js +56 -0
  406. package/build/components/Timeline/index.js.map +1 -0
  407. package/build/components/Timeline/style.css +1 -0
  408. package/build/components/Toast/index.cjs +2 -0
  409. package/build/components/Toast/index.cjs.map +1 -0
  410. package/build/components/Toast/index.d.ts +43 -0
  411. package/build/components/Toast/index.js +136 -0
  412. package/build/components/Toast/index.js.map +1 -0
  413. package/build/components/Toast/style.css +1 -0
  414. package/build/components/ToastPortal/index.cjs +2 -0
  415. package/build/components/ToastPortal/index.cjs.map +1 -0
  416. package/build/components/ToastPortal/index.d.ts +8 -0
  417. package/build/components/ToastPortal/index.js +15 -0
  418. package/build/components/ToastPortal/index.js.map +1 -0
  419. package/build/components/Tooltip/index.cjs +2 -0
  420. package/build/components/Tooltip/index.cjs.map +1 -0
  421. package/build/components/Tooltip/index.d.ts +23 -0
  422. package/build/components/Tooltip/index.js +116 -0
  423. package/build/components/Tooltip/index.js.map +1 -0
  424. package/build/components/Tooltip/style.css +1 -0
  425. package/build/constants/breakpoint.constants.cjs +2 -0
  426. package/build/constants/breakpoint.constants.cjs.map +1 -0
  427. package/build/constants/breakpoint.constants.d.ts +8 -0
  428. package/build/constants/breakpoint.constants.js +9 -0
  429. package/build/constants/breakpoint.constants.js.map +1 -0
  430. package/build/constants/combobox.constants.cjs +2 -0
  431. package/build/constants/combobox.constants.cjs.map +1 -0
  432. package/build/constants/combobox.constants.d.ts +11 -0
  433. package/build/constants/combobox.constants.js +7 -0
  434. package/build/constants/combobox.constants.js.map +1 -0
  435. package/build/constants/scroll.constants.cjs +2 -0
  436. package/build/constants/scroll.constants.cjs.map +1 -0
  437. package/build/constants/scroll.constants.d.ts +7 -0
  438. package/build/constants/scroll.constants.js +5 -0
  439. package/build/constants/scroll.constants.js.map +1 -0
  440. package/build/enums/ui-size.enum.cjs +2 -0
  441. package/build/enums/ui-size.enum.cjs.map +1 -0
  442. package/build/enums/ui-size.enum.d.ts +9 -0
  443. package/build/enums/ui-size.enum.js +5 -0
  444. package/build/enums/ui-size.enum.js.map +1 -0
  445. package/build/enums/ui-variant.enum.cjs +2 -0
  446. package/build/enums/ui-variant.enum.cjs.map +1 -0
  447. package/build/enums/ui-variant.enum.d.ts +20 -0
  448. package/build/enums/ui-variant.enum.js +5 -0
  449. package/build/enums/ui-variant.enum.js.map +1 -0
  450. package/build/helpers/class-name.helper.cjs +2 -0
  451. package/build/helpers/class-name.helper.cjs.map +1 -0
  452. package/build/helpers/class-name.helper.d.ts +3 -0
  453. package/build/helpers/class-name.helper.js +10 -0
  454. package/build/helpers/class-name.helper.js.map +1 -0
  455. package/build/helpers/component.helper.cjs +2 -0
  456. package/build/helpers/component.helper.cjs.map +1 -0
  457. package/build/helpers/component.helper.d.ts +13 -0
  458. package/build/helpers/component.helper.js +5 -0
  459. package/build/helpers/component.helper.js.map +1 -0
  460. package/build/helpers/focus.helper.cjs +2 -0
  461. package/build/helpers/focus.helper.cjs.map +1 -0
  462. package/build/helpers/focus.helper.d.ts +42 -0
  463. package/build/helpers/focus.helper.js +65 -0
  464. package/build/helpers/focus.helper.js.map +1 -0
  465. package/build/helpers/label.helper.cjs +2 -0
  466. package/build/helpers/label.helper.cjs.map +1 -0
  467. package/build/helpers/label.helper.d.ts +11 -0
  468. package/build/helpers/label.helper.js +11 -0
  469. package/build/helpers/label.helper.js.map +1 -0
  470. package/build/helpers/portal.helper.cjs +2 -0
  471. package/build/helpers/portal.helper.cjs.map +1 -0
  472. package/build/helpers/portal.helper.d.ts +28 -0
  473. package/build/helpers/portal.helper.js +36 -0
  474. package/build/helpers/portal.helper.js.map +1 -0
  475. package/build/helpers/scroll.helper.cjs +2 -0
  476. package/build/helpers/scroll.helper.cjs.map +1 -0
  477. package/build/helpers/scroll.helper.d.ts +8 -0
  478. package/build/helpers/scroll.helper.js +11 -0
  479. package/build/helpers/scroll.helper.js.map +1 -0
  480. package/build/helpers/text.helper.cjs +2 -0
  481. package/build/helpers/text.helper.cjs.map +1 -0
  482. package/build/helpers/text.helper.d.ts +5 -0
  483. package/build/helpers/text.helper.js +6 -0
  484. package/build/helpers/text.helper.js.map +1 -0
  485. package/build/helpers/theme.helper.cjs +24 -0
  486. package/build/helpers/theme.helper.cjs.map +1 -0
  487. package/build/helpers/theme.helper.d.ts +49 -0
  488. package/build/helpers/theme.helper.js +75 -0
  489. package/build/helpers/theme.helper.js.map +1 -0
  490. package/build/hooks/useAnnounce.cjs +2 -0
  491. package/build/hooks/useAnnounce.cjs.map +1 -0
  492. package/build/hooks/useAnnounce.d.ts +4 -0
  493. package/build/hooks/useAnnounce.js +23 -0
  494. package/build/hooks/useAnnounce.js.map +1 -0
  495. package/build/hooks/useAsyncSearch.cjs +2 -0
  496. package/build/hooks/useAsyncSearch.cjs.map +1 -0
  497. package/build/hooks/useAsyncSearch.d.ts +11 -0
  498. package/build/hooks/useAsyncSearch.js +17 -0
  499. package/build/hooks/useAsyncSearch.js.map +1 -0
  500. package/build/hooks/useCopyFeedback.cjs +2 -0
  501. package/build/hooks/useCopyFeedback.cjs.map +1 -0
  502. package/build/hooks/useCopyFeedback.d.ts +10 -0
  503. package/build/hooks/useCopyFeedback.js +25 -0
  504. package/build/hooks/useCopyFeedback.js.map +1 -0
  505. package/build/hooks/useDismissOnEscape.cjs +2 -0
  506. package/build/hooks/useDismissOnEscape.cjs.map +1 -0
  507. package/build/hooks/useDismissOnEscape.d.ts +12 -0
  508. package/build/hooks/useDismissOnEscape.js +18 -0
  509. package/build/hooks/useDismissOnEscape.js.map +1 -0
  510. package/build/hooks/useListboxNavigation.cjs +2 -0
  511. package/build/hooks/useListboxNavigation.cjs.map +1 -0
  512. package/build/hooks/useListboxNavigation.d.ts +7 -0
  513. package/build/hooks/useListboxNavigation.js +53 -0
  514. package/build/hooks/useListboxNavigation.js.map +1 -0
  515. package/build/hooks/usePortalSurface.cjs +2 -0
  516. package/build/hooks/usePortalSurface.cjs.map +1 -0
  517. package/build/hooks/usePortalSurface.d.ts +25 -0
  518. package/build/hooks/usePortalSurface.js +19 -0
  519. package/build/hooks/usePortalSurface.js.map +1 -0
  520. package/build/hooks/usePositioning.cjs +2 -0
  521. package/build/hooks/usePositioning.cjs.map +1 -0
  522. package/build/hooks/usePositioning.d.ts +13 -0
  523. package/build/hooks/usePositioning.js +74 -0
  524. package/build/hooks/usePositioning.js.map +1 -0
  525. package/build/hooks/useScrollLock.cjs +2 -0
  526. package/build/hooks/useScrollLock.cjs.map +1 -0
  527. package/build/hooks/useScrollLock.d.ts +2 -0
  528. package/build/hooks/useScrollLock.js +34 -0
  529. package/build/hooks/useScrollLock.js.map +1 -0
  530. package/build/hooks/useSheetViewport.cjs +2 -0
  531. package/build/hooks/useSheetViewport.cjs.map +1 -0
  532. package/build/hooks/useSheetViewport.d.ts +6 -0
  533. package/build/hooks/useSheetViewport.js +29 -0
  534. package/build/hooks/useSheetViewport.js.map +1 -0
  535. package/build/hooks/useStickToBottom.cjs +2 -0
  536. package/build/hooks/useStickToBottom.cjs.map +1 -0
  537. package/build/hooks/useStickToBottom.d.ts +12 -0
  538. package/build/hooks/useStickToBottom.js +39 -0
  539. package/build/hooks/useStickToBottom.js.map +1 -0
  540. package/build/hooks/useUiTheme.cjs +2 -0
  541. package/build/hooks/useUiTheme.cjs.map +1 -0
  542. package/build/hooks/useUiTheme.d.ts +7 -0
  543. package/build/hooks/useUiTheme.js +36 -0
  544. package/build/hooks/useUiTheme.js.map +1 -0
  545. package/build/hooks/useUiTokens.cjs +2 -0
  546. package/build/hooks/useUiTokens.cjs.map +1 -0
  547. package/build/hooks/useUiTokens.d.ts +11 -0
  548. package/build/hooks/useUiTokens.js +39 -0
  549. package/build/hooks/useUiTokens.js.map +1 -0
  550. package/build/hooks/useVirtualList.cjs +2 -0
  551. package/build/hooks/useVirtualList.cjs.map +1 -0
  552. package/build/hooks/useVirtualList.d.ts +13 -0
  553. package/build/hooks/useVirtualList.js +41 -0
  554. package/build/hooks/useVirtualList.js.map +1 -0
  555. package/build/index.cjs +2 -0
  556. package/build/index.cjs.map +1 -0
  557. package/build/index.d.ts +95 -0
  558. package/build/index.js +207 -0
  559. package/build/index.js.map +1 -0
  560. package/build/scss/_colors.generated.scss +119 -0
  561. package/build/scss/_index.scss +6 -0
  562. package/build/scss/_metrics.generated.scss +49 -0
  563. package/build/scss/_mixins.scss +710 -0
  564. package/build/scss/_variables.scss +51 -0
  565. package/build/styles/base.d.ts +0 -0
  566. package/build/styles.css +133 -0
  567. package/build/theme/UiProvider.cjs +2 -0
  568. package/build/theme/UiProvider.cjs.map +1 -0
  569. package/build/theme/UiProvider.d.ts +22 -0
  570. package/build/theme/UiProvider.js +30 -0
  571. package/build/theme/UiProvider.js.map +1 -0
  572. package/build/theme/UiThemeScript.cjs +2 -0
  573. package/build/theme/UiThemeScript.cjs.map +1 -0
  574. package/build/theme/UiThemeScript.d.ts +19 -0
  575. package/build/theme/UiThemeScript.js +8 -0
  576. package/build/theme/UiThemeScript.js.map +1 -0
  577. package/build/theme/context.cjs +2 -0
  578. package/build/theme/context.cjs.map +1 -0
  579. package/build/theme/context.d.ts +5 -0
  580. package/build/theme/context.js +8 -0
  581. package/build/theme/context.js.map +1 -0
  582. package/build/theme/initUi.cjs +2 -0
  583. package/build/theme/initUi.cjs.map +1 -0
  584. package/build/theme/initUi.d.ts +7 -0
  585. package/build/theme/initUi.js +10 -0
  586. package/build/theme/initUi.js.map +1 -0
  587. package/build/theme/palette.cjs +2 -0
  588. package/build/theme/palette.cjs.map +1 -0
  589. package/build/theme/palette.d.ts +219 -0
  590. package/build/theme/palette.js +148 -0
  591. package/build/theme/palette.js.map +1 -0
  592. package/build/theme/tokens.cjs +2 -0
  593. package/build/theme/tokens.cjs.map +1 -0
  594. package/build/theme/tokens.d.ts +225 -0
  595. package/build/theme/tokens.js +384 -0
  596. package/build/theme/tokens.js.map +1 -0
  597. package/build/types/charts/AreaChart/index.d.ts +14 -0
  598. package/build/types/charts/BarChart/index.d.ts +16 -0
  599. package/build/types/charts/BoxPlot/index.d.ts +43 -0
  600. package/build/types/charts/ComposedChart/index.d.ts +16 -0
  601. package/build/types/charts/Heatmap/index.d.ts +30 -0
  602. package/build/types/charts/Histogram/index.d.ts +29 -0
  603. package/build/types/charts/LineChart/index.d.ts +14 -0
  604. package/build/types/charts/PieChart/index.d.ts +36 -0
  605. package/build/types/charts/RadarChart/index.d.ts +40 -0
  606. package/build/types/charts/ScatterPlot/index.d.ts +41 -0
  607. package/build/types/charts/core/CartesianChart.d.ts +43 -0
  608. package/build/types/charts/core/ChartFrame.d.ts +55 -0
  609. package/build/types/charts/core/axes.d.ts +37 -0
  610. package/build/types/charts/core/cartesian.d.ts +80 -0
  611. package/build/types/charts/core/format.d.ts +19 -0
  612. package/build/types/charts/core/margins.d.ts +9 -0
  613. package/build/types/charts/core/palette.d.ts +13 -0
  614. package/build/types/charts/core/path.d.ts +24 -0
  615. package/build/types/charts/core/scale.d.ts +40 -0
  616. package/build/types/charts/core/series.d.ts +11 -0
  617. package/build/types/charts/core/spatial.d.ts +12 -0
  618. package/build/types/charts/core/stats.d.ts +34 -0
  619. package/build/types/charts/core/types.d.ts +31 -0
  620. package/build/types/charts/core/useChartWidth.d.ts +7 -0
  621. package/build/types/charts/index.d.ts +21 -0
  622. package/build/types/chat/ActionList/index.d.ts +46 -0
  623. package/build/types/chat/AppBar/index.d.ts +21 -0
  624. package/build/types/chat/ChatMessage/index.d.ts +24 -0
  625. package/build/types/chat/ChatThread/index.d.ts +24 -0
  626. package/build/types/chat/Citation/index.d.ts +15 -0
  627. package/build/types/chat/CodeBlock/format.d.ts +7 -0
  628. package/build/types/chat/CodeBlock/grammars.d.ts +44 -0
  629. package/build/types/chat/CodeBlock/highlight.d.ts +22 -0
  630. package/build/types/chat/CodeBlock/index.d.ts +33 -0
  631. package/build/types/chat/DescriptionList/index.d.ts +16 -0
  632. package/build/types/chat/Legend/index.d.ts +20 -0
  633. package/build/types/chat/MessageActions/index.d.ts +21 -0
  634. package/build/types/chat/PromptInput/index.d.ts +47 -0
  635. package/build/types/chat/PromptSuggestions/index.d.ts +25 -0
  636. package/build/types/chat/Prose/index.d.ts +15 -0
  637. package/build/types/chat/ReasoningBlock/index.d.ts +24 -0
  638. package/build/types/chat/ReasoningText/index.d.ts +14 -0
  639. package/build/types/chat/SegmentBar/index.d.ts +46 -0
  640. package/build/types/chat/SourceList/index.d.ts +25 -0
  641. package/build/types/chat/TerminalOutput/index.d.ts +25 -0
  642. package/build/types/chat/ToolCall/index.d.ts +41 -0
  643. package/build/types/chat/index.d.ts +26 -0
  644. package/build/types/combobox.type.d.ts +49 -0
  645. package/build/types/common-element-props.type.d.ts +8 -0
  646. package/build/types/helpers/class-name.helper.d.ts +3 -0
  647. package/build/types/helpers/component.helper.d.ts +13 -0
  648. package/build/types/helpers/label.helper.d.ts +12 -0
  649. package/build/types/hook.type.d.ts +36 -0
  650. package/build/types/link.type.d.ts +14 -0
  651. package/build/types/positioning.type.d.ts +38 -0
  652. package/build/types/theme/palette.d.ts +219 -0
  653. package/build/types/theme/tokens.d.ts +225 -0
  654. package/build/types/theme.type.d.ts +223 -0
  655. package/build/types/types/common-element-props.type.d.ts +8 -0
  656. package/build/types/types/link.type.d.ts +14 -0
  657. package/build/types/types/theme.type.d.ts +223 -0
  658. package/package.json +487 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/Popover/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n cloneElement,\n isValidElement,\n memo,\n type ReactElement,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\nimport useDismissOnEscape from '../../hooks/useDismissOnEscape';\nimport { captureFocus, focusFirstMeaningful } from '../../helpers/focus.helper';\nimport usePortalSurface from '../../hooks/usePortalSurface';\nimport usePositioning from '../../hooks/usePositioning';\n\nimport styles from './index.module.scss';\nimport type { PositionAlign, PositionSide } from '@/types/positioning.type';\n\ntype Props = {\n /** Tetikleyici. */\n trigger: ReactElement;\n children: ReactNode;\n /** Yüzeyin erişilebilir adı. */\n label: string;\n side?: PositionSide;\n align?: PositionAlign;\n /** Kontrollü kullanım. */\n isOpen?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n className?: string;\n testId?: string;\n};\n\n/** Popover — eylem taşıyabilen, odaklanabilir yüzey. */\nconst Popover = ({\n trigger,\n children,\n label,\n side = 'bottom',\n align = 'start',\n isOpen: controlledOpen,\n onOpenChange,\n className,\n testId,\n}: Props) => {\n const id = useId();\n const anchorRef = useRef<HTMLElement>(null);\n const surfaceRef = useRef<HTMLDivElement>(null);\n const restoreRef = useRef<(() => void) | null>(null);\n\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : uncontrolledOpen;\n\n const positioning = usePositioning(anchorRef, surfaceRef, { side, align, isOpen });\n\n const portal = usePortalSurface(isOpen, anchorRef, surfaceRef);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n /* Acilista odak ICERI girer, kapanista TETIKLEYICIYE doner. */\n useEffect(() => {\n if (!isOpen) return;\n\n restoreRef.current = captureFocus();\n const surface = surfaceRef.current;\n if (surface) focusFirstMeaningful(surface);\n\n return () => {\n restoreRef.current?.();\n restoreRef.current = null;\n };\n }, [isOpen]);\n\n const close = useCallback(() => setOpen(false), [setOpen]);\n useDismissOnEscape(isOpen, close);\n\n /*\n * DISARI tiklama da belge duzeyinde: odak yuzeyin icinde olmayabilir (fareyle acilmis bir\n * popover).\n */\n useEffect(() => {\n if (!isOpen) return;\n\n const handlePointerDown = (event: globalThis.MouseEvent) => {\n const target = event.target as Node;\n if (surfaceRef.current?.contains(target)) return;\n if (anchorRef.current?.contains(target)) return;\n setOpen(false);\n };\n\n /* `mousedown`: `click` beklerken kullanici surukleyerek secim yaparsa yuzey kapanmiyordu. */\n document.addEventListener('mousedown', handlePointerDown);\n\n return () => document.removeEventListener('mousedown', handlePointerDown);\n }, [isOpen, setOpen]);\n\n if (!isValidElement(trigger)) return null;\n\n const triggerProps = trigger.props as Record<string, unknown>;\n\n const anchor = cloneElement(trigger as ReactElement<Record<string, unknown>>, {\n ref: anchorRef,\n 'aria-expanded': isOpen,\n 'aria-haspopup': 'dialog',\n 'aria-controls': isOpen ? id : undefined,\n onClick: (event: React.MouseEvent) => {\n (triggerProps.onClick as ((event: React.MouseEvent) => void) | undefined)?.(event);\n setOpen(!isOpen);\n },\n });\n\n return (\n <>\n {anchor}\n\n {isOpen &&\n portal.container &&\n createPortal(\n <div\n ref={surfaceRef}\n id={id}\n /* ⚠ Modal içinden açıldığında üst katman ZORUNLU — `portal.helper`. */\n {...portal.attributes}\n /*\n * `role=\"dialog\"` ama `aria-modal` YOK: yuzey kipsel degil ve `aria-modal=\"true\"`\n * yazmak ekran okuyucuya sayfanin geri kalaninin erisilemez oldugunu…\n */\n role=\"dialog\"\n aria-label={label}\n className={cx(styles.popover, styles[`popover--${positioning.side}`], className)}\n style={{\n ...positioning.style,\n ...portal.style,\n visibility: positioning.isPositioned ? 'visible' : 'hidden',\n }}\n data-testid={testId}\n /*\n * Odak yuzeyin DISINA ciktiginda kapanir: kipsel olmayan bir yuzeyde odagi hapsetmek\n * kullaniciyi sayfadan koparirdi.\n * ⚠ AMA \"DISI\" DOM AGACIYLA OLCULEMEZ.\n */\n onBlur={event => {\n const next = event.relatedTarget as HTMLElement | null;\n if (!next) return;\n if (event.currentTarget.contains(next)) return;\n if (anchorRef.current?.contains(next)) return;\n\n /*\n * Bu yuzeyden PORTALLANMIS bir katman mi? `Menu`/`Select`/ `Combobox` panelleri\n * `aria-controls`/`id` zinciriyle degil, acildiklari an odagi tasiyarak…\n */\n if (next.closest('[role=\"listbox\"],[role=\"menu\"],[role=\"dialog\"]')) return;\n\n setOpen(false);\n }}\n >\n {children}\n </div>,\n portal.container,\n )}\n </>\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Popover, 'Popover')) as typeof Popover;\n"],"names":["Popover","trigger","children","label","side","align","controlledOpen","onOpenChange","className","testId","id","useId","anchorRef","useRef","surfaceRef","restoreRef","uncontrolledOpen","setUncontrolledOpen","useState","isControlled","isOpen","positioning","usePositioning","portal","usePortalSurface","setOpen","useCallback","next","useEffect","captureFocus","surface","_a","close","useDismissOnEscape","handlePointerDown","event","target","_b","isValidElement","triggerProps","anchor","cloneElement","jsxs","Fragment","createPortal","jsx","cx","styles","index","memo","named"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { ReactElement, ReactNode } from 'react';
2
+ import { PositionAlign, PositionSide } from '../../types/positioning.type';
3
+ type Props = {
4
+ /** Tetikleyici. */
5
+ trigger: ReactElement;
6
+ children: ReactNode;
7
+ /** Yüzeyin erişilebilir adı. */
8
+ label: string;
9
+ side?: PositionSide;
10
+ align?: PositionAlign;
11
+ /** Kontrollü kullanım. */
12
+ isOpen?: boolean;
13
+ onOpenChange?: (isOpen: boolean) => void;
14
+ className?: string;
15
+ testId?: string;
16
+ };
17
+ /** Popover — eylem taşıyabilen, odaklanabilir yüzey. */
18
+ declare const Popover: ({ trigger, children, label, side, align, isOpen: controlledOpen, onOpenChange, className, testId, }: Props) => import("react").JSX.Element | null;
19
+ declare const _default: typeof Popover;
20
+ export default _default;
@@ -0,0 +1,91 @@
1
+ "use client";
2
+ import { jsxs as I, Fragment as M, jsx as N } from "react/jsx-runtime";
3
+ import { memo as U, useId as V, useRef as p, useState as $, useCallback as P, useEffect as y, isValidElement as g, cloneElement as q } from "react";
4
+ import { createPortal as z } from "react-dom";
5
+ import { cx as A } from "../../helpers/class-name.helper.js";
6
+ import { named as G } from "../../helpers/component.helper.js";
7
+ import H from "../../hooks/useDismissOnEscape.js";
8
+ import { captureFocus as J, focusFirstMeaningful as K } from "../../helpers/focus.helper.js";
9
+ import O from "../../hooks/usePortalSurface.js";
10
+ import Q from "../../hooks/usePositioning.js";
11
+ const k = {"popover":"ui-popover-VxgiK","popover--top":"ui-popover--top-OUYwo","popover--bottom":"ui-popover--bottom-Q1K4X","popover--left":"ui-popover--left-9Rsjx","popover--right":"ui-popover--right-0TJeo"};
12
+ const W = ({
13
+ trigger: u,
14
+ children: w,
15
+ label: F,
16
+ side: j = "bottom",
17
+ align: D = "start",
18
+ isOpen: v,
19
+ onOpenChange: l,
20
+ className: L,
21
+ testId: R
22
+ }) => {
23
+ const b = V(), n = p(null), s = p(null), i = p(null), [S, T] = $(!1), f = v !== void 0, r = f ? v : S, m = Q(n, s, { side: j, align: D, isOpen: r }), a = O(r, n, s), o = P(
24
+ (t) => {
25
+ f || T(t), l == null || l(t);
26
+ },
27
+ [f, l]
28
+ );
29
+ y(() => {
30
+ if (!r) return;
31
+ i.current = J();
32
+ const t = s.current;
33
+ return t && K(t), () => {
34
+ var e;
35
+ (e = i.current) == null || e.call(i), i.current = null;
36
+ };
37
+ }, [r]);
38
+ const h = P(() => o(!1), [o]);
39
+ if (H(r, h), y(() => {
40
+ if (!r) return;
41
+ const t = (e) => {
42
+ var x, E;
43
+ const c = e.target;
44
+ (x = s.current) != null && x.contains(c) || (E = n.current) != null && E.contains(c) || o(!1);
45
+ };
46
+ return document.addEventListener("mousedown", t), () => document.removeEventListener("mousedown", t);
47
+ }, [r, o]), !g(u)) return null;
48
+ const d = u.props, B = q(u, {
49
+ ref: n,
50
+ "aria-expanded": r,
51
+ "aria-haspopup": "dialog",
52
+ "aria-controls": r ? b : void 0,
53
+ onClick: (t) => {
54
+ var e;
55
+ (e = d.onClick) == null || e.call(d, t), o(!r);
56
+ }
57
+ });
58
+ return /* @__PURE__ */ I(M, { children: [
59
+ B,
60
+ r && a.container && z(
61
+ /* @__PURE__ */ N(
62
+ "div",
63
+ {
64
+ ref: s,
65
+ id: b,
66
+ ...a.attributes,
67
+ role: "dialog",
68
+ "aria-label": F,
69
+ className: A(k.popover, k[`popover--${m.side}`], L),
70
+ style: {
71
+ ...m.style,
72
+ ...a.style,
73
+ visibility: m.isPositioned ? "visible" : "hidden"
74
+ },
75
+ "data-testid": R,
76
+ onBlur: (t) => {
77
+ var c;
78
+ const e = t.relatedTarget;
79
+ e && (t.currentTarget.contains(e) || (c = n.current) != null && c.contains(e) || e.closest('[role="listbox"],[role="menu"],[role="dialog"]') || o(!1));
80
+ },
81
+ children: w
82
+ }
83
+ ),
84
+ a.container
85
+ )
86
+ ] });
87
+ }, st = /* @__PURE__ */ U(/* @__PURE__ */ G(W, "Popover"));
88
+ export {
89
+ st as default
90
+ };
91
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/Popover/index.tsx"],"sourcesContent":["'use client';\n\nimport {\n cloneElement,\n isValidElement,\n memo,\n type ReactElement,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\nimport useDismissOnEscape from '../../hooks/useDismissOnEscape';\nimport { captureFocus, focusFirstMeaningful } from '../../helpers/focus.helper';\nimport usePortalSurface from '../../hooks/usePortalSurface';\nimport usePositioning from '../../hooks/usePositioning';\n\nimport styles from './index.module.scss';\nimport type { PositionAlign, PositionSide } from '@/types/positioning.type';\n\ntype Props = {\n /** Tetikleyici. */\n trigger: ReactElement;\n children: ReactNode;\n /** Yüzeyin erişilebilir adı. */\n label: string;\n side?: PositionSide;\n align?: PositionAlign;\n /** Kontrollü kullanım. */\n isOpen?: boolean;\n onOpenChange?: (isOpen: boolean) => void;\n className?: string;\n testId?: string;\n};\n\n/** Popover — eylem taşıyabilen, odaklanabilir yüzey. */\nconst Popover = ({\n trigger,\n children,\n label,\n side = 'bottom',\n align = 'start',\n isOpen: controlledOpen,\n onOpenChange,\n className,\n testId,\n}: Props) => {\n const id = useId();\n const anchorRef = useRef<HTMLElement>(null);\n const surfaceRef = useRef<HTMLDivElement>(null);\n const restoreRef = useRef<(() => void) | null>(null);\n\n const [uncontrolledOpen, setUncontrolledOpen] = useState(false);\n const isControlled = controlledOpen !== undefined;\n const isOpen = isControlled ? controlledOpen : uncontrolledOpen;\n\n const positioning = usePositioning(anchorRef, surfaceRef, { side, align, isOpen });\n\n const portal = usePortalSurface(isOpen, anchorRef, surfaceRef);\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n /* Acilista odak ICERI girer, kapanista TETIKLEYICIYE doner. */\n useEffect(() => {\n if (!isOpen) return;\n\n restoreRef.current = captureFocus();\n const surface = surfaceRef.current;\n if (surface) focusFirstMeaningful(surface);\n\n return () => {\n restoreRef.current?.();\n restoreRef.current = null;\n };\n }, [isOpen]);\n\n const close = useCallback(() => setOpen(false), [setOpen]);\n useDismissOnEscape(isOpen, close);\n\n /*\n * DISARI tiklama da belge duzeyinde: odak yuzeyin icinde olmayabilir (fareyle acilmis bir\n * popover).\n */\n useEffect(() => {\n if (!isOpen) return;\n\n const handlePointerDown = (event: globalThis.MouseEvent) => {\n const target = event.target as Node;\n if (surfaceRef.current?.contains(target)) return;\n if (anchorRef.current?.contains(target)) return;\n setOpen(false);\n };\n\n /* `mousedown`: `click` beklerken kullanici surukleyerek secim yaparsa yuzey kapanmiyordu. */\n document.addEventListener('mousedown', handlePointerDown);\n\n return () => document.removeEventListener('mousedown', handlePointerDown);\n }, [isOpen, setOpen]);\n\n if (!isValidElement(trigger)) return null;\n\n const triggerProps = trigger.props as Record<string, unknown>;\n\n const anchor = cloneElement(trigger as ReactElement<Record<string, unknown>>, {\n ref: anchorRef,\n 'aria-expanded': isOpen,\n 'aria-haspopup': 'dialog',\n 'aria-controls': isOpen ? id : undefined,\n onClick: (event: React.MouseEvent) => {\n (triggerProps.onClick as ((event: React.MouseEvent) => void) | undefined)?.(event);\n setOpen(!isOpen);\n },\n });\n\n return (\n <>\n {anchor}\n\n {isOpen &&\n portal.container &&\n createPortal(\n <div\n ref={surfaceRef}\n id={id}\n /* ⚠ Modal içinden açıldığında üst katman ZORUNLU — `portal.helper`. */\n {...portal.attributes}\n /*\n * `role=\"dialog\"` ama `aria-modal` YOK: yuzey kipsel degil ve `aria-modal=\"true\"`\n * yazmak ekran okuyucuya sayfanin geri kalaninin erisilemez oldugunu…\n */\n role=\"dialog\"\n aria-label={label}\n className={cx(styles.popover, styles[`popover--${positioning.side}`], className)}\n style={{\n ...positioning.style,\n ...portal.style,\n visibility: positioning.isPositioned ? 'visible' : 'hidden',\n }}\n data-testid={testId}\n /*\n * Odak yuzeyin DISINA ciktiginda kapanir: kipsel olmayan bir yuzeyde odagi hapsetmek\n * kullaniciyi sayfadan koparirdi.\n * ⚠ AMA \"DISI\" DOM AGACIYLA OLCULEMEZ.\n */\n onBlur={event => {\n const next = event.relatedTarget as HTMLElement | null;\n if (!next) return;\n if (event.currentTarget.contains(next)) return;\n if (anchorRef.current?.contains(next)) return;\n\n /*\n * Bu yuzeyden PORTALLANMIS bir katman mi? `Menu`/`Select`/ `Combobox` panelleri\n * `aria-controls`/`id` zinciriyle degil, acildiklari an odagi tasiyarak…\n */\n if (next.closest('[role=\"listbox\"],[role=\"menu\"],[role=\"dialog\"]')) return;\n\n setOpen(false);\n }}\n >\n {children}\n </div>,\n portal.container,\n )}\n </>\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Popover, 'Popover')) as typeof Popover;\n"],"names":["Popover","trigger","children","label","side","align","controlledOpen","onOpenChange","className","testId","id","useId","anchorRef","useRef","surfaceRef","restoreRef","uncontrolledOpen","setUncontrolledOpen","useState","isControlled","isOpen","positioning","usePositioning","portal","usePortalSurface","setOpen","useCallback","next","useEffect","captureFocus","surface","_a","close","useDismissOnEscape","handlePointerDown","event","target","_b","isValidElement","triggerProps","anchor","cloneElement","jsxs","Fragment","createPortal","jsx","cx","styles","index","memo","named"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ @layer ui{.ui-popover-VxgiK{z-index:200;min-width:200px;max-width:min(360px,100vw - var(--ui-space-6));padding:var(--ui-space-3);border-radius:var(--ui-radius-lg);background-color:var(--ui-surface);border:1px solid var(--ui-border);box-shadow:var(--ui-shadow-lg);color:var(--ui-text);font-size:var(--ui-font-size-sm);line-height:var(--ui-leading-normal);text-align:start}.ui-popover--top-OUYwo{animation:var(--ui-anim-fade-in-up) var(--ui-duration-fast) var(--ui-ease-out)}.ui-popover--bottom-Q1K4X{animation:var(--ui-anim-fade-in-down) var(--ui-duration-fast) var(--ui-ease-out)}.ui-popover--left-9Rsjx,.ui-popover--right-0TJeo{animation:var(--ui-anim-fade-in) var(--ui-duration-fast) var(--ui-ease-out)}@media (prefers-reduced-motion: reduce){.ui-popover-VxgiK{animation:none}}@media (forced-colors: active){.ui-popover-VxgiK{border-color:CanvasText}}}
@@ -0,0 +1,2 @@
1
+ "use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),x=require("react"),N=require("../../helpers/class-name.helper.cjs"),h=require("../../helpers/label.helper.cjs"),j=require("../../theme/context.cjs"),r={default:{"price":"ui-price-Oc5Nr","price__current":"ui-price__current-2Xup2","price__currency":"ui-price__currency-32NLN","price__list":"ui-price__list-MlQgT","price__discount":"ui-price__discount-5Yc6W","price--sm":"ui-price--sm-Hd8Oe","price--md":"ui-price--md-JMxlK","price--lg":"ui-price--lg-TFqIF","price--xl":"ui-price--xl-EJBYq"}},y=({value:a,currency:o,listValue:n,discountPercent:t,formatDiscount:d=e=>`%${e}`,isFormatted:m,size:p="md",className:_,testId:f})=>{const{labels:e}=j.useUi(),i=h.resolveLabel("Price.currency",o,e==null?void 0:e.currency),u=c=>{if(!m||!(e!=null&&e.locale)||!/\d/.test(c))return c;const l=Number(c.replace(/[^\d.,-]/g,"").replace(/\.(?=\d{3}\b)/g,"").replace(",","."));if(!Number.isFinite(l))return c;try{return new Intl.NumberFormat(e.locale).format(l)}catch{return c}};return s.jsxs("span",{className:N.cx(r.default.price,r.default[`price--${p}`],_),"data-testid":f,children:[s.jsxs("span",{className:r.default.price__current,children:[u(a),s.jsx("span",{className:r.default.price__currency,children:i})]}),n&&s.jsxs("s",{className:r.default.price__list,children:[u(n),s.jsx("span",{className:r.default.price__currency,children:i})]}),t!==void 0&&t>0&&s.jsx("span",{className:r.default.price__discount,children:d(t)})]})},b=x.memo(y);exports.default=b;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/Price/index.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, memo } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n /** BİÇİMLENMİŞ tutar: \"1.299,90\". */\n value: string;\n /** Para birimi simgesi ya da kodu. */\n currency?: string;\n /** Değeri `Intl.NumberFormat` ile biçimlendirir. */\n isFormatted?: boolean;\n /** Üstü çizili liste fiyatı; indirim varsa verilir (biçimlenmiş). */\n listValue?: string;\n /** İndirim oranı (tam sayı yüzde). */\n discountPercent?: number;\n /** İndirim rozetinin metnini üretir (\"%20\", \"-20%\"). */\n formatDiscount?: (percent: number) => string;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n className?: string;\n testId?: string;\n};\n\n/** Tutar gösterimi. */\nconst Price: FC<Props> = ({\n value,\n currency,\n listValue,\n discountPercent,\n formatDiscount = percent => `%${percent}`,\n isFormatted,\n size = 'md',\n className,\n testId,\n}) => {\n const { labels } = useUi();\n const symbol = resolveLabel('Price.currency', currency, labels?.currency);\n\n /* BICIMLENDIRME OPSIYONEL ve yerel ayara BAGLI. */\n const format = (raw: string): string => {\n if (!isFormatted || !labels?.locale) return raw;\n\n /* RAKAM ICERMEYEN deger biciMLENDIRILMEZ. */\n if (!/\\d/.test(raw)) return raw;\n\n const numeric = Number(\n raw\n .replace(/[^\\d.,-]/g, '')\n .replace(/\\.(?=\\d{3}\\b)/g, '')\n .replace(',', '.'),\n );\n if (!Number.isFinite(numeric)) return raw;\n\n try {\n return new Intl.NumberFormat(labels.locale).format(numeric);\n } catch {\n return raw;\n }\n };\n\n return (\n <span className={cx(styles.price, styles[`price--${size}`], className)} data-testid={testId}>\n <span className={styles.price__current}>\n {format(value)}\n <span className={styles.price__currency}>{symbol}</span>\n </span>\n\n {listValue && (\n <s className={styles.price__list}>\n {format(listValue)}\n <span className={styles.price__currency}>{symbol}</span>\n </s>\n )}\n\n {/* `isDefined` DEGIL acik karsilastirma: handy-utils'in koruyucusu\n `Exclude<any, …>` donuyor ve TypeScript'te daraltma uretmiyor. */}\n {discountPercent !== undefined && discountPercent > 0 && (\n <span className={styles.price__discount}>{formatDiscount(discountPercent)}</span>\n )}\n </span>\n );\n};\n\nexport default /*#__PURE__*/ memo(Price) as typeof Price;\n"],"names":["Price","value","currency","listValue","discountPercent","formatDiscount","percent","isFormatted","size","className","testId","labels","useUi","symbol","resolveLabel","format","raw","numeric","jsxs","cx","styles","jsx","index"],"mappings":"wVA4BMA,EAAmB,CAAC,CACxB,MAAAC,EACA,SAAAC,EACA,UAAAC,EACA,gBAAAC,EACA,eAAAC,EAAiBC,GAAW,IAAIA,CAAO,GACvC,YAAAC,EACA,KAAAC,EAAO,KACP,UAAAC,EACA,OAAAC,CACF,IAAM,CACJ,KAAM,CAAE,OAAAC,CAAA,EAAWC,QAAA,EACbC,EAASC,EAAAA,aAAa,iBAAkBZ,EAAUS,GAAA,YAAAA,EAAQ,QAAQ,EAGlEI,EAAUC,GAAwB,CAItC,GAHI,CAACT,GAAe,EAACI,GAAA,MAAAA,EAAQ,SAGzB,CAAC,KAAK,KAAKK,CAAG,EAAG,OAAOA,EAE5B,MAAMC,EAAU,OACdD,EACG,QAAQ,YAAa,EAAE,EACvB,QAAQ,iBAAkB,EAAE,EAC5B,QAAQ,IAAK,GAAG,CAAA,EAErB,GAAI,CAAC,OAAO,SAASC,CAAO,EAAG,OAAOD,EAEtC,GAAI,CACF,OAAO,IAAI,KAAK,aAAaL,EAAO,MAAM,EAAE,OAAOM,CAAO,CAC5D,MAAQ,CACN,OAAOD,CACT,CACF,EAEA,OACEE,EAAAA,KAAC,OAAA,CAAK,UAAWC,EAAAA,GAAGC,EAAAA,QAAO,MAAOA,EAAAA,QAAO,UAAUZ,CAAI,EAAE,EAAGC,CAAS,EAAG,cAAaC,EACnF,SAAA,CAAAQ,EAAAA,KAAC,OAAA,CAAK,UAAWE,EAAAA,QAAO,eACrB,SAAA,CAAAL,EAAOd,CAAK,EACboB,EAAAA,IAAC,OAAA,CAAK,UAAWD,EAAAA,QAAO,gBAAkB,SAAAP,CAAA,CAAO,CAAA,EACnD,EAECV,GACCe,EAAAA,KAAC,IAAA,CAAE,UAAWE,EAAAA,QAAO,YAClB,SAAA,CAAAL,EAAOZ,CAAS,EACjBkB,EAAAA,IAAC,OAAA,CAAK,UAAWD,EAAAA,QAAO,gBAAkB,SAAAP,CAAA,CAAO,CAAA,EACnD,EAKDT,IAAoB,QAAaA,EAAkB,GAClDiB,EAAAA,IAAC,OAAA,CAAK,UAAWD,EAAAA,QAAO,gBAAkB,SAAAf,EAAeD,CAAe,CAAA,CAAE,CAAA,EAE9E,CAEJ,EAEAkB,SAAkCtB,CAAK"}
@@ -0,0 +1,22 @@
1
+ import { FC } from 'react';
2
+ type Props = {
3
+ /** BİÇİMLENMİŞ tutar: "1.299,90". */
4
+ value: string;
5
+ /** Para birimi simgesi ya da kodu. */
6
+ currency?: string;
7
+ /** Değeri `Intl.NumberFormat` ile biçimlendirir. */
8
+ isFormatted?: boolean;
9
+ /** Üstü çizili liste fiyatı; indirim varsa verilir (biçimlenmiş). */
10
+ listValue?: string;
11
+ /** İndirim oranı (tam sayı yüzde). */
12
+ discountPercent?: number;
13
+ /** İndirim rozetinin metnini üretir ("%20", "-20%"). */
14
+ formatDiscount?: (percent: number) => string;
15
+ size?: 'sm' | 'md' | 'lg' | 'xl';
16
+ className?: string;
17
+ testId?: string;
18
+ };
19
+ /** Tutar gösterimi. */
20
+ declare const Price: FC<Props>;
21
+ declare const _default: typeof Price;
22
+ export default _default;
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ import { jsxs as i, jsx as t } from "react/jsx-runtime";
3
+ import { memo as h } from "react";
4
+ import { cx as y } from "../../helpers/class-name.helper.js";
5
+ import { resolveLabel as x } from "../../helpers/label.helper.js";
6
+ import { useUi as b } from "../../theme/context.js";
7
+ const e = {"price":"ui-price-Oc5Nr","price__current":"ui-price__current-2Xup2","price__currency":"ui-price__currency-32NLN","price__list":"ui-price__list-MlQgT","price__discount":"ui-price__discount-5Yc6W","price--sm":"ui-price--sm-Hd8Oe","price--md":"ui-price--md-JMxlK","price--lg":"ui-price--lg-TFqIF","price--xl":"ui-price--xl-EJBYq"};
8
+ const g = ({
9
+ value: p,
10
+ currency: l,
11
+ listValue: n,
12
+ discountPercent: s,
13
+ formatDiscount: u = (r) => `%${r}`,
14
+ isFormatted: d,
15
+ size: f = "md",
16
+ className: _,
17
+ testId: N
18
+ }) => {
19
+ const { labels: r } = b(), m = x("Price.currency", l, r == null ? void 0 : r.currency), o = (c) => {
20
+ if (!d || !(r != null && r.locale) || !/\d/.test(c)) return c;
21
+ const a = Number(
22
+ c.replace(/[^\d.,-]/g, "").replace(/\.(?=\d{3}\b)/g, "").replace(",", ".")
23
+ );
24
+ if (!Number.isFinite(a)) return c;
25
+ try {
26
+ return new Intl.NumberFormat(r.locale).format(a);
27
+ } catch {
28
+ return c;
29
+ }
30
+ };
31
+ return /* @__PURE__ */ i("span", { className: y(e.price, e[`price--${f}`], _), "data-testid": N, children: [
32
+ /* @__PURE__ */ i("span", { className: e.price__current, children: [
33
+ o(p),
34
+ /* @__PURE__ */ t("span", { className: e.price__currency, children: m })
35
+ ] }),
36
+ n && /* @__PURE__ */ i("s", { className: e.price__list, children: [
37
+ o(n),
38
+ /* @__PURE__ */ t("span", { className: e.price__currency, children: m })
39
+ ] }),
40
+ s !== void 0 && s > 0 && /* @__PURE__ */ t("span", { className: e.price__discount, children: u(s) })
41
+ ] });
42
+ }, U = /* @__PURE__ */ h(g);
43
+ export {
44
+ U as default
45
+ };
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/Price/index.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, memo } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n /** BİÇİMLENMİŞ tutar: \"1.299,90\". */\n value: string;\n /** Para birimi simgesi ya da kodu. */\n currency?: string;\n /** Değeri `Intl.NumberFormat` ile biçimlendirir. */\n isFormatted?: boolean;\n /** Üstü çizili liste fiyatı; indirim varsa verilir (biçimlenmiş). */\n listValue?: string;\n /** İndirim oranı (tam sayı yüzde). */\n discountPercent?: number;\n /** İndirim rozetinin metnini üretir (\"%20\", \"-20%\"). */\n formatDiscount?: (percent: number) => string;\n size?: 'sm' | 'md' | 'lg' | 'xl';\n className?: string;\n testId?: string;\n};\n\n/** Tutar gösterimi. */\nconst Price: FC<Props> = ({\n value,\n currency,\n listValue,\n discountPercent,\n formatDiscount = percent => `%${percent}`,\n isFormatted,\n size = 'md',\n className,\n testId,\n}) => {\n const { labels } = useUi();\n const symbol = resolveLabel('Price.currency', currency, labels?.currency);\n\n /* BICIMLENDIRME OPSIYONEL ve yerel ayara BAGLI. */\n const format = (raw: string): string => {\n if (!isFormatted || !labels?.locale) return raw;\n\n /* RAKAM ICERMEYEN deger biciMLENDIRILMEZ. */\n if (!/\\d/.test(raw)) return raw;\n\n const numeric = Number(\n raw\n .replace(/[^\\d.,-]/g, '')\n .replace(/\\.(?=\\d{3}\\b)/g, '')\n .replace(',', '.'),\n );\n if (!Number.isFinite(numeric)) return raw;\n\n try {\n return new Intl.NumberFormat(labels.locale).format(numeric);\n } catch {\n return raw;\n }\n };\n\n return (\n <span className={cx(styles.price, styles[`price--${size}`], className)} data-testid={testId}>\n <span className={styles.price__current}>\n {format(value)}\n <span className={styles.price__currency}>{symbol}</span>\n </span>\n\n {listValue && (\n <s className={styles.price__list}>\n {format(listValue)}\n <span className={styles.price__currency}>{symbol}</span>\n </s>\n )}\n\n {/* `isDefined` DEGIL acik karsilastirma: handy-utils'in koruyucusu\n `Exclude<any, …>` donuyor ve TypeScript'te daraltma uretmiyor. */}\n {discountPercent !== undefined && discountPercent > 0 && (\n <span className={styles.price__discount}>{formatDiscount(discountPercent)}</span>\n )}\n </span>\n );\n};\n\nexport default /*#__PURE__*/ memo(Price) as typeof Price;\n"],"names":["Price","value","currency","listValue","discountPercent","formatDiscount","percent","isFormatted","size","className","testId","labels","useUi","symbol","resolveLabel","format","raw","numeric","jsxs","cx","styles","jsx","index"],"mappings":";;;;;;;AA4BA,MAAMA,IAAmB,CAAC;AAAA,EACxB,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,gBAAAC,IAAiB,CAAAC,MAAW,IAAIA,CAAO;AAAA,EACvC,aAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,WAAAC;AAAA,EACA,QAAAC;AACF,MAAM;AACJ,QAAM,EAAE,QAAAC,EAAA,IAAWC,EAAA,GACbC,IAASC,EAAa,kBAAkBZ,GAAUS,KAAA,gBAAAA,EAAQ,QAAQ,GAGlEI,IAAS,CAACC,MAAwB;AAItC,QAHI,CAACT,KAAe,EAACI,KAAA,QAAAA,EAAQ,WAGzB,CAAC,KAAK,KAAKK,CAAG,EAAG,QAAOA;AAE5B,UAAMC,IAAU;AAAA,MACdD,EACG,QAAQ,aAAa,EAAE,EACvB,QAAQ,kBAAkB,EAAE,EAC5B,QAAQ,KAAK,GAAG;AAAA,IAAA;AAErB,QAAI,CAAC,OAAO,SAASC,CAAO,EAAG,QAAOD;AAEtC,QAAI;AACF,aAAO,IAAI,KAAK,aAAaL,EAAO,MAAM,EAAE,OAAOM,CAAO;AAAA,IAC5D,QAAQ;AACN,aAAOD;AAAA,IACT;AAAA,EACF;AAEA,SACE,gBAAAE,EAAC,QAAA,EAAK,WAAWC,EAAGC,EAAO,OAAOA,EAAO,UAAUZ,CAAI,EAAE,GAAGC,CAAS,GAAG,eAAaC,GACnF,UAAA;AAAA,IAAA,gBAAAQ,EAAC,QAAA,EAAK,WAAWE,EAAO,gBACrB,UAAA;AAAA,MAAAL,EAAOd,CAAK;AAAA,MACb,gBAAAoB,EAAC,QAAA,EAAK,WAAWD,EAAO,iBAAkB,UAAAP,EAAA,CAAO;AAAA,IAAA,GACnD;AAAA,IAECV,KACC,gBAAAe,EAAC,KAAA,EAAE,WAAWE,EAAO,aAClB,UAAA;AAAA,MAAAL,EAAOZ,CAAS;AAAA,MACjB,gBAAAkB,EAAC,QAAA,EAAK,WAAWD,EAAO,iBAAkB,UAAAP,EAAA,CAAO;AAAA,IAAA,GACnD;AAAA,IAKDT,MAAoB,UAAaA,IAAkB,KAClD,gBAAAiB,EAAC,QAAA,EAAK,WAAWD,EAAO,iBAAkB,UAAAf,EAAeD,CAAe,EAAA,CAAE;AAAA,EAAA,GAE9E;AAEJ,GAEAkB,sBAAkCtB,CAAK;"}
@@ -0,0 +1 @@
1
+ @layer ui{.ui-price-Oc5Nr{display:inline-flex;align-items:baseline;flex-wrap:wrap;gap:var(--ui-space-2)}.ui-price__current-2Xup2{font-family:var(--ui-font-heading);font-size:var(--ui-font-size-lg);font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.022em;white-space:nowrap;color:var(--ui-text)}.ui-price__currency-32NLN{font-size:.75em;font-weight:600;margin-inline-start:2px}.ui-price__list-MlQgT{font-size:var(--ui-font-size-sm);color:var(--ui-text-3);font-variant-numeric:tabular-nums;text-decoration-thickness:1px}.ui-price__discount-5Yc6W{font-size:var(--ui-font-size-xs);font-weight:700;color:var(--ui-sale-fg);background-color:var(--ui-sale-bg);border-radius:var(--ui-radius-xs);padding:2px var(--ui-space-1);line-height:var(--ui-leading-none)}.ui-price--sm-Hd8Oe .ui-price__current-2Xup2{font-size:var(--ui-font-size-base)}.ui-price--md-JMxlK .ui-price__current-2Xup2{font-size:var(--ui-font-size-lg)}.ui-price--lg-TFqIF .ui-price__current-2Xup2{font-size:var(--ui-font-size-2xl)}.ui-price--xl-EJBYq .ui-price__current-2Xup2{font-size:var(--ui-font-size-3xl)}}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),g=require("react"),o=require("../../helpers/class-name.helper.cjs"),x=require("../../helpers/component.helper.cjs"),a={default:{"progress":"ui-progress-99MrX","progress__track":"ui-progress__track-Qbp9t","progress__track--xs":"ui-progress__track--xs-CgHUU","progress__track--sm":"ui-progress__track--sm-dbHZq","progress__track--md":"ui-progress__track--md-v1GdW","progress__track--indeterminate":"ui-progress__track--indeterminate-8fMxl","progress__fill":"ui-progress__fill-Bam55","progress__fill--success":"ui-progress__fill--success-IFuI5","progress__fill--warning":"ui-progress__fill--warning-wIhgi","progress__fill--danger":"ui-progress__fill--danger-cuqj0","progress__value":"ui-progress__value-3FYxj","circle":"ui-circle-9cn2w","circle__svg":"ui-circle__svg-0IwkR","circle__track":"ui-circle__track-zY2qc","circle__fill":"ui-circle__fill-Jbde6","circle__fill--success":"ui-circle__fill--success-HTr0m","circle__fill--warning":"ui-circle__fill--warning-Fkgj2","circle__fill--danger":"ui-circle__fill--danger-4E3Z8","circle--indeterminate":"ui-circle--indeterminate-cITY6","circle__label":"ui-circle__label-A3nJB"}},p=(t,i)=>!Number.isFinite(t)||!Number.isFinite(i)||i<=0?0:Math.min(100,Math.max(0,t/i*100)),N=({value:t,max:i=100,label:n,valueText:c,isValueVisible:d,tone:u="brand",size:r="md",className:m,testId:h})=>{const e=t===void 0,l=e?0:p(t,i);return s.jsxs("div",{className:o.cx(a.default.progress,m),"data-testid":h,children:[s.jsx("div",{role:"progressbar","aria-label":n,"aria-valuenow":e?void 0:Math.round(l),"aria-valuemin":e?void 0:0,"aria-valuemax":e?void 0:100,"aria-valuetext":e?void 0:c,className:o.cx(a.default.progress__track,a.default[`progress__track--${r}`],e&&a.default["progress__track--indeterminate"]),children:s.jsx("span",{className:o.cx(a.default.progress__fill,a.default[`progress__fill--${u}`]),style:e?void 0:{inlineSize:`${l}%`}})}),d&&!e&&s.jsx("span",{className:a.default.progress__value,"aria-hidden":!0,children:c??`%${Math.round(l)}`})]})},b=g.memo(x.named(N,"Progress")),j=({value:t,max:i=100,label:n,valueText:c,isValueVisible:d,tone:u="brand",size:r=44,className:m,testId:h})=>{const e=t===void 0,l=e?25:p(t,i),_=Math.max(3,Math.round(r*.1)),f=(r-_)/2,v=2*Math.PI*f;return s.jsxs("div",{className:o.cx(a.default.circle,e&&a.default["circle--indeterminate"],m),style:{width:r,height:r},"data-testid":h,children:[s.jsxs("svg",{className:a.default.circle__svg,width:r,height:r,viewBox:`0 0 ${r} ${r}`,role:"progressbar","aria-label":n,"aria-valuenow":e?void 0:Math.round(l),"aria-valuemin":e?void 0:0,"aria-valuemax":e?void 0:100,"aria-valuetext":e?void 0:c,children:[s.jsx("circle",{className:a.default.circle__track,cx:r/2,cy:r/2,r:f,fill:"none",strokeWidth:_}),s.jsx("circle",{className:o.cx(a.default.circle__fill,a.default[`circle__fill--${u}`]),cx:r/2,cy:r/2,r:f,fill:"none",strokeWidth:_,strokeDasharray:v,strokeDashoffset:v*(1-l/100)})]}),d&&!e&&s.jsx("span",{className:a.default.circle__label,"aria-hidden":!0,children:c??`%${Math.round(l)}`})]})},M=x.named(g.memo(j),"ProgressCircle");exports.ProgressCircle=M;exports.default=b;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/Progress/index.tsx"],"sourcesContent":["import { memo } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\n\nimport styles from './index.module.scss';\n\n/** Yüzdeyi 0-100 aralığına kırpar; ölçek sıfır genişlikteyse 0 döner. */\nconst toPercent = (value: number, max: number): number => {\n if (!Number.isFinite(value) || !Number.isFinite(max) || max <= 0) return 0;\n return Math.min(100, Math.max(0, (value / max) * 100));\n};\n\ntype Props = {\n /**\n * Tamamlanan miktar. `undefined` → BELİRSİZ ilerleme (sonu bilinmiyor); çubuk kendi kendine akar.\n */\n value?: number;\n /** Ölçeğin üst ucu. */\n max?: number;\n /** Çubuğun erişilebilir adı (\"Yükleme\", \"Ödeme adımı\"). */\n label: string;\n /** Ekran okuyucuya okunan METİN karşılığı (\"3 / 5 dosya\"). */\n valueText?: string;\n /** Yüzdeyi çubuğun yanında GÖRÜNÜR olarak yazar. */\n isValueVisible?: boolean;\n /**\n * ⚠ `brand` 5.0'dan beri MÜREKKEP çizer (`selected` — ilerleme bir seçim göstergesi), yeşil\n * DEĞİL: yeşil yalnızca eylem, bağlantı ve odakta. Ad 4.x'ten kaldı; değiştirmek her çağrıyı\n * kırardı ve kazancı yalnızca isim olurdu.\n */\n tone?: 'brand' | 'success' | 'warning' | 'danger';\n /** `xs` 2 px — satır içi gösterge (bağlam doluluğu); etiket yanında okunur. */\n size?: 'xs' | 'sm' | 'md';\n className?: string;\n testId?: string;\n};\n\n/** İlerleme çubuğu — ölçülebilir bekleme. */\nconst Progress = ({\n value,\n max = 100,\n label,\n valueText,\n isValueVisible,\n tone = 'brand',\n size = 'md',\n className,\n testId,\n}: Props) => {\n const isIndeterminate = value === undefined;\n const percent = isIndeterminate ? 0 : toPercent(value, max);\n\n return (\n <div className={cx(styles.progress, className)} data-testid={testId}>\n <div\n role=\"progressbar\"\n aria-label={label}\n /* BELIRSIZ kipte `aria-valuenow` YAZILMAZ. */\n aria-valuenow={isIndeterminate ? undefined : Math.round(percent)}\n aria-valuemin={isIndeterminate ? undefined : 0}\n aria-valuemax={isIndeterminate ? undefined : 100}\n aria-valuetext={isIndeterminate ? undefined : valueText}\n className={cx(\n styles.progress__track,\n styles[`progress__track--${size}`],\n isIndeterminate && styles['progress__track--indeterminate'],\n )}\n >\n <span\n className={cx(styles.progress__fill, styles[`progress__fill--${tone}`])}\n style={isIndeterminate ? undefined : { inlineSize: `${percent}%` }}\n />\n </div>\n\n {isValueVisible && !isIndeterminate && (\n /*\n * Gorsel yuzde `aria-hidden`: ayni bilgi zaten `progressbar`in degerinde ve iki kez\n * duyurulmasi gurultu.\n */\n <span className={styles.progress__value} aria-hidden>\n {valueText ?? `%${Math.round(percent)}`}\n </span>\n )}\n </div>\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Progress, 'Progress')) as typeof Progress;\n\ntype CircleProps = {\n /** Tamamlanan miktar. `undefined` → BELİRSİZ; çember döner. */\n value?: number;\n max?: number;\n /** Erişilebilir ad. */\n label: string;\n valueText?: string;\n /** Yüzdeyi çemberin ortasına yazar. */\n isValueVisible?: boolean;\n /**\n * ⚠ `brand` 5.0'dan beri MÜREKKEP çizer (`selected` — ilerleme bir seçim göstergesi), yeşil\n * DEĞİL: yeşil yalnızca eylem, bağlantı ve odakta. Ad 4.x'ten kaldı; değiştirmek her çağrıyı\n * kırardı ve kazancı yalnızca isim olurdu.\n */\n tone?: 'brand' | 'success' | 'warning' | 'danger';\n /** Dış çap (px). */\n size?: number;\n className?: string;\n testId?: string;\n};\n\n/** Dairesel ilerleme. */\nconst ProgressCircleBase = ({\n value,\n max = 100,\n label,\n valueText,\n isValueVisible,\n tone = 'brand',\n size = 44,\n className,\n testId,\n}: CircleProps) => {\n const isIndeterminate = value === undefined;\n const percent = isIndeterminate ? 25 : toPercent(value, max);\n\n /*\n * Cizgi kalinligi capin ~%10'u: sabit bir kalinlik kucuk cemberde kutuyu dolduruyor, buyugunde\n * sac teline donuyordu.\n */\n const stroke = Math.max(3, Math.round(size * 0.1));\n const radius = (size - stroke) / 2;\n const circumference = 2 * Math.PI * radius;\n\n return (\n <div\n className={cx(styles.circle, isIndeterminate && styles['circle--indeterminate'], className)}\n style={{ width: size, height: size }}\n data-testid={testId}\n >\n <svg\n className={styles.circle__svg}\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n role=\"progressbar\"\n aria-label={label}\n aria-valuenow={isIndeterminate ? undefined : Math.round(percent)}\n aria-valuemin={isIndeterminate ? undefined : 0}\n aria-valuemax={isIndeterminate ? undefined : 100}\n aria-valuetext={isIndeterminate ? undefined : valueText}\n >\n <circle\n className={styles.circle__track}\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n />\n <circle\n className={cx(styles.circle__fill, styles[`circle__fill--${tone}`])}\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n strokeDasharray={circumference}\n strokeDashoffset={circumference * (1 - percent / 100)}\n />\n </svg>\n\n {isValueVisible && !isIndeterminate && (\n <span className={styles.circle__label} aria-hidden>\n {valueText ?? `%${Math.round(percent)}`}\n </span>\n )}\n </div>\n );\n};\n\nexport const ProgressCircle = /*#__PURE__*/ named(\n /*#__PURE__*/ memo(ProgressCircleBase),\n 'ProgressCircle',\n);\n"],"names":["toPercent","value","max","Progress","label","valueText","isValueVisible","tone","size","className","testId","isIndeterminate","percent","jsxs","cx","styles","jsx","memo","named","ProgressCircleBase","stroke","radius","circumference","ProgressCircle"],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ type Props = {
2
+ /**
3
+ * Tamamlanan miktar. `undefined` → BELİRSİZ ilerleme (sonu bilinmiyor); çubuk kendi kendine akar.
4
+ */
5
+ value?: number;
6
+ /** Ölçeğin üst ucu. */
7
+ max?: number;
8
+ /** Çubuğun erişilebilir adı ("Yükleme", "Ödeme adımı"). */
9
+ label: string;
10
+ /** Ekran okuyucuya okunan METİN karşılığı ("3 / 5 dosya"). */
11
+ valueText?: string;
12
+ /** Yüzdeyi çubuğun yanında GÖRÜNÜR olarak yazar. */
13
+ isValueVisible?: boolean;
14
+ /**
15
+ * ⚠ `brand` 5.0'dan beri MÜREKKEP çizer (`selected` — ilerleme bir seçim göstergesi), yeşil
16
+ * DEĞİL: yeşil yalnızca eylem, bağlantı ve odakta. Ad 4.x'ten kaldı; değiştirmek her çağrıyı
17
+ * kırardı ve kazancı yalnızca isim olurdu.
18
+ */
19
+ tone?: 'brand' | 'success' | 'warning' | 'danger';
20
+ /** `xs` 2 px — satır içi gösterge (bağlam doluluğu); etiket yanında okunur. */
21
+ size?: 'xs' | 'sm' | 'md';
22
+ className?: string;
23
+ testId?: string;
24
+ };
25
+ /** İlerleme çubuğu — ölçülebilir bekleme. */
26
+ declare const Progress: ({ value, max, label, valueText, isValueVisible, tone, size, className, testId, }: Props) => import("react").JSX.Element;
27
+ declare const _default: typeof Progress;
28
+ export default _default;
29
+ type CircleProps = {
30
+ /** Tamamlanan miktar. `undefined` → BELİRSİZ; çember döner. */
31
+ value?: number;
32
+ max?: number;
33
+ /** Erişilebilir ad. */
34
+ label: string;
35
+ valueText?: string;
36
+ /** Yüzdeyi çemberin ortasına yazar. */
37
+ isValueVisible?: boolean;
38
+ /**
39
+ * ⚠ `brand` 5.0'dan beri MÜREKKEP çizer (`selected` — ilerleme bir seçim göstergesi), yeşil
40
+ * DEĞİL: yeşil yalnızca eylem, bağlantı ve odakta. Ad 4.x'ten kaldı; değiştirmek her çağrıyı
41
+ * kırardı ve kazancı yalnızca isim olurdu.
42
+ */
43
+ tone?: 'brand' | 'success' | 'warning' | 'danger';
44
+ /** Dış çap (px). */
45
+ size?: number;
46
+ className?: string;
47
+ testId?: string;
48
+ };
49
+ export declare const ProgressCircle: import('react').MemoExoticComponent<({ value, max, label, valueText, isValueVisible, tone, size, className, testId, }: CircleProps) => import("react").JSX.Element>;
@@ -0,0 +1,120 @@
1
+ import { jsxs as u, jsx as o } from "react/jsx-runtime";
2
+ import { memo as f } from "react";
3
+ import { cx as n } from "../../helpers/class-name.helper.js";
4
+ import { named as N } from "../../helpers/component.helper.js";
5
+ const a = {"progress":"ui-progress-99MrX","progress__track":"ui-progress__track-Qbp9t","progress__track--xs":"ui-progress__track--xs-CgHUU","progress__track--sm":"ui-progress__track--sm-dbHZq","progress__track--md":"ui-progress__track--md-v1GdW","progress__track--indeterminate":"ui-progress__track--indeterminate-8fMxl","progress__fill":"ui-progress__fill-Bam55","progress__fill--success":"ui-progress__fill--success-IFuI5","progress__fill--warning":"ui-progress__fill--warning-wIhgi","progress__fill--danger":"ui-progress__fill--danger-cuqj0","progress__value":"ui-progress__value-3FYxj","circle":"ui-circle-9cn2w","circle__svg":"ui-circle__svg-0IwkR","circle__track":"ui-circle__track-zY2qc","circle__fill":"ui-circle__fill-Jbde6","circle__fill--success":"ui-circle__fill--success-HTr0m","circle__fill--warning":"ui-circle__fill--warning-Fkgj2","circle__fill--danger":"ui-circle__fill--danger-4E3Z8","circle--indeterminate":"ui-circle--indeterminate-cITY6","circle__label":"ui-circle__label-A3nJB"};
6
+ const b = (i, s) => !Number.isFinite(i) || !Number.isFinite(s) || s <= 0 ? 0 : Math.min(100, Math.max(0, i / s * 100)), k = ({
7
+ value: i,
8
+ max: s = 100,
9
+ label: l,
10
+ valueText: c,
11
+ isValueVisible: d,
12
+ tone: m = "brand",
13
+ size: e = "md",
14
+ className: h,
15
+ testId: _
16
+ }) => {
17
+ const r = i === void 0, t = r ? 0 : b(i, s);
18
+ return /* @__PURE__ */ u("div", { className: n(a.progress, h), "data-testid": _, children: [
19
+ /* @__PURE__ */ o(
20
+ "div",
21
+ {
22
+ role: "progressbar",
23
+ "aria-label": l,
24
+ "aria-valuenow": r ? void 0 : Math.round(t),
25
+ "aria-valuemin": r ? void 0 : 0,
26
+ "aria-valuemax": r ? void 0 : 100,
27
+ "aria-valuetext": r ? void 0 : c,
28
+ className: n(
29
+ a.progress__track,
30
+ a[`progress__track--${e}`],
31
+ r && a["progress__track--indeterminate"]
32
+ ),
33
+ children: /* @__PURE__ */ o(
34
+ "span",
35
+ {
36
+ className: n(a.progress__fill, a[`progress__fill--${m}`]),
37
+ style: r ? void 0 : { inlineSize: `${t}%` }
38
+ }
39
+ )
40
+ }
41
+ ),
42
+ d && !r && /*
43
+ * Gorsel yuzde `aria-hidden`: ayni bilgi zaten `progressbar`in degerinde ve iki kez
44
+ * duyurulmasi gurultu.
45
+ */
46
+ /* @__PURE__ */ o("span", { className: a.progress__value, "aria-hidden": !0, children: c ?? `%${Math.round(t)}` })
47
+ ] });
48
+ }, C = /* @__PURE__ */ f(/* @__PURE__ */ N(k, "Progress")), x = ({
49
+ value: i,
50
+ max: s = 100,
51
+ label: l,
52
+ valueText: c,
53
+ isValueVisible: d,
54
+ tone: m = "brand",
55
+ size: e = 44,
56
+ className: h,
57
+ testId: _
58
+ }) => {
59
+ const r = i === void 0, t = r ? 25 : b(i, s), v = Math.max(3, Math.round(e * 0.1)), p = (e - v) / 2, g = 2 * Math.PI * p;
60
+ return /* @__PURE__ */ u(
61
+ "div",
62
+ {
63
+ className: n(a.circle, r && a["circle--indeterminate"], h),
64
+ style: { width: e, height: e },
65
+ "data-testid": _,
66
+ children: [
67
+ /* @__PURE__ */ u(
68
+ "svg",
69
+ {
70
+ className: a.circle__svg,
71
+ width: e,
72
+ height: e,
73
+ viewBox: `0 0 ${e} ${e}`,
74
+ role: "progressbar",
75
+ "aria-label": l,
76
+ "aria-valuenow": r ? void 0 : Math.round(t),
77
+ "aria-valuemin": r ? void 0 : 0,
78
+ "aria-valuemax": r ? void 0 : 100,
79
+ "aria-valuetext": r ? void 0 : c,
80
+ children: [
81
+ /* @__PURE__ */ o(
82
+ "circle",
83
+ {
84
+ className: a.circle__track,
85
+ cx: e / 2,
86
+ cy: e / 2,
87
+ r: p,
88
+ fill: "none",
89
+ strokeWidth: v
90
+ }
91
+ ),
92
+ /* @__PURE__ */ o(
93
+ "circle",
94
+ {
95
+ className: n(a.circle__fill, a[`circle__fill--${m}`]),
96
+ cx: e / 2,
97
+ cy: e / 2,
98
+ r: p,
99
+ fill: "none",
100
+ strokeWidth: v,
101
+ strokeDasharray: g,
102
+ strokeDashoffset: g * (1 - t / 100)
103
+ }
104
+ )
105
+ ]
106
+ }
107
+ ),
108
+ d && !r && /* @__PURE__ */ o("span", { className: a.circle__label, "aria-hidden": !0, children: c ?? `%${Math.round(t)}` })
109
+ ]
110
+ }
111
+ );
112
+ }, I = /* @__PURE__ */ N(
113
+ /* @__PURE__ */ f(x),
114
+ "ProgressCircle"
115
+ );
116
+ export {
117
+ I as ProgressCircle,
118
+ C as default
119
+ };
120
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/Progress/index.tsx"],"sourcesContent":["import { memo } from 'react';\n\nimport { cx } from '../../helpers/class-name.helper';\nimport { named } from '../../helpers/component.helper';\n\nimport styles from './index.module.scss';\n\n/** Yüzdeyi 0-100 aralığına kırpar; ölçek sıfır genişlikteyse 0 döner. */\nconst toPercent = (value: number, max: number): number => {\n if (!Number.isFinite(value) || !Number.isFinite(max) || max <= 0) return 0;\n return Math.min(100, Math.max(0, (value / max) * 100));\n};\n\ntype Props = {\n /**\n * Tamamlanan miktar. `undefined` → BELİRSİZ ilerleme (sonu bilinmiyor); çubuk kendi kendine akar.\n */\n value?: number;\n /** Ölçeğin üst ucu. */\n max?: number;\n /** Çubuğun erişilebilir adı (\"Yükleme\", \"Ödeme adımı\"). */\n label: string;\n /** Ekran okuyucuya okunan METİN karşılığı (\"3 / 5 dosya\"). */\n valueText?: string;\n /** Yüzdeyi çubuğun yanında GÖRÜNÜR olarak yazar. */\n isValueVisible?: boolean;\n /**\n * ⚠ `brand` 5.0'dan beri MÜREKKEP çizer (`selected` — ilerleme bir seçim göstergesi), yeşil\n * DEĞİL: yeşil yalnızca eylem, bağlantı ve odakta. Ad 4.x'ten kaldı; değiştirmek her çağrıyı\n * kırardı ve kazancı yalnızca isim olurdu.\n */\n tone?: 'brand' | 'success' | 'warning' | 'danger';\n /** `xs` 2 px — satır içi gösterge (bağlam doluluğu); etiket yanında okunur. */\n size?: 'xs' | 'sm' | 'md';\n className?: string;\n testId?: string;\n};\n\n/** İlerleme çubuğu — ölçülebilir bekleme. */\nconst Progress = ({\n value,\n max = 100,\n label,\n valueText,\n isValueVisible,\n tone = 'brand',\n size = 'md',\n className,\n testId,\n}: Props) => {\n const isIndeterminate = value === undefined;\n const percent = isIndeterminate ? 0 : toPercent(value, max);\n\n return (\n <div className={cx(styles.progress, className)} data-testid={testId}>\n <div\n role=\"progressbar\"\n aria-label={label}\n /* BELIRSIZ kipte `aria-valuenow` YAZILMAZ. */\n aria-valuenow={isIndeterminate ? undefined : Math.round(percent)}\n aria-valuemin={isIndeterminate ? undefined : 0}\n aria-valuemax={isIndeterminate ? undefined : 100}\n aria-valuetext={isIndeterminate ? undefined : valueText}\n className={cx(\n styles.progress__track,\n styles[`progress__track--${size}`],\n isIndeterminate && styles['progress__track--indeterminate'],\n )}\n >\n <span\n className={cx(styles.progress__fill, styles[`progress__fill--${tone}`])}\n style={isIndeterminate ? undefined : { inlineSize: `${percent}%` }}\n />\n </div>\n\n {isValueVisible && !isIndeterminate && (\n /*\n * Gorsel yuzde `aria-hidden`: ayni bilgi zaten `progressbar`in degerinde ve iki kez\n * duyurulmasi gurultu.\n */\n <span className={styles.progress__value} aria-hidden>\n {valueText ?? `%${Math.round(percent)}`}\n </span>\n )}\n </div>\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Progress, 'Progress')) as typeof Progress;\n\ntype CircleProps = {\n /** Tamamlanan miktar. `undefined` → BELİRSİZ; çember döner. */\n value?: number;\n max?: number;\n /** Erişilebilir ad. */\n label: string;\n valueText?: string;\n /** Yüzdeyi çemberin ortasına yazar. */\n isValueVisible?: boolean;\n /**\n * ⚠ `brand` 5.0'dan beri MÜREKKEP çizer (`selected` — ilerleme bir seçim göstergesi), yeşil\n * DEĞİL: yeşil yalnızca eylem, bağlantı ve odakta. Ad 4.x'ten kaldı; değiştirmek her çağrıyı\n * kırardı ve kazancı yalnızca isim olurdu.\n */\n tone?: 'brand' | 'success' | 'warning' | 'danger';\n /** Dış çap (px). */\n size?: number;\n className?: string;\n testId?: string;\n};\n\n/** Dairesel ilerleme. */\nconst ProgressCircleBase = ({\n value,\n max = 100,\n label,\n valueText,\n isValueVisible,\n tone = 'brand',\n size = 44,\n className,\n testId,\n}: CircleProps) => {\n const isIndeterminate = value === undefined;\n const percent = isIndeterminate ? 25 : toPercent(value, max);\n\n /*\n * Cizgi kalinligi capin ~%10'u: sabit bir kalinlik kucuk cemberde kutuyu dolduruyor, buyugunde\n * sac teline donuyordu.\n */\n const stroke = Math.max(3, Math.round(size * 0.1));\n const radius = (size - stroke) / 2;\n const circumference = 2 * Math.PI * radius;\n\n return (\n <div\n className={cx(styles.circle, isIndeterminate && styles['circle--indeterminate'], className)}\n style={{ width: size, height: size }}\n data-testid={testId}\n >\n <svg\n className={styles.circle__svg}\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n role=\"progressbar\"\n aria-label={label}\n aria-valuenow={isIndeterminate ? undefined : Math.round(percent)}\n aria-valuemin={isIndeterminate ? undefined : 0}\n aria-valuemax={isIndeterminate ? undefined : 100}\n aria-valuetext={isIndeterminate ? undefined : valueText}\n >\n <circle\n className={styles.circle__track}\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n />\n <circle\n className={cx(styles.circle__fill, styles[`circle__fill--${tone}`])}\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={stroke}\n strokeDasharray={circumference}\n strokeDashoffset={circumference * (1 - percent / 100)}\n />\n </svg>\n\n {isValueVisible && !isIndeterminate && (\n <span className={styles.circle__label} aria-hidden>\n {valueText ?? `%${Math.round(percent)}`}\n </span>\n )}\n </div>\n );\n};\n\nexport const ProgressCircle = /*#__PURE__*/ named(\n /*#__PURE__*/ memo(ProgressCircleBase),\n 'ProgressCircle',\n);\n"],"names":["toPercent","value","max","Progress","label","valueText","isValueVisible","tone","size","className","testId","isIndeterminate","percent","jsxs","cx","styles","jsx","Progress$1","memo","named","ProgressCircleBase","stroke","radius","circumference","ProgressCircle"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ @layer ui{.ui-progress-99MrX{display:flex;align-items:center;gap:var(--ui-space-3);width:100%}.ui-progress__track-Qbp9t{position:relative;flex:1;min-width:0;border-radius:var(--ui-radius-pill);background-color:var(--ui-track);overflow:hidden}.ui-progress__track--xs-CgHUU{height:2px}.ui-progress__track--sm-dbHZq{height:4px}.ui-progress__track--md-v1GdW{height:8px}.ui-progress__track--indeterminate-8fMxl .ui-progress__fill-Bam55{inline-size:40%;animation:var(--ui-anim-progress-slide) var(--ui-duration-shimmer) var(--ui-ease-in-out) infinite}@media (prefers-reduced-motion: reduce){.ui-progress__track--indeterminate-8fMxl .ui-progress__fill-Bam55{animation:none;inline-size:50%}}.ui-progress__fill-Bam55{display:block;height:100%;border-radius:var(--ui-radius-pill);background-color:var(--ui-selected);transition:inline-size var(--ui-duration-normal) var(--ui-ease-out)}.ui-progress__fill--success-IFuI5{background-color:var(--ui-green-accent)}.ui-progress__fill--warning-wIhgi{background-color:var(--ui-star)}.ui-progress__fill--danger-cuqj0{background-color:var(--ui-danger-solid)}@media (prefers-reduced-motion: reduce){.ui-progress__fill-Bam55{transition:none}}@media (forced-colors: active){.ui-progress__fill-Bam55{background-color:Highlight;forced-color-adjust:none}}.ui-progress__value-3FYxj{font-family:var(--ui-font-mono);font-size:var(--ui-font-size-xs);letter-spacing:.02em;flex-shrink:0;color:var(--ui-text-2);font-variant-numeric:tabular-nums}.ui-circle-9cn2w{display:inline-flex;position:relative;flex-shrink:0}.ui-circle__svg-0IwkR{rotate:-90deg}.ui-circle__track-zY2qc{stroke:var(--ui-track)}.ui-circle__fill-Jbde6{stroke:var(--ui-selected);stroke-linecap:round;transition:stroke-dashoffset var(--ui-duration-normal) var(--ui-ease-out)}.ui-circle__fill--success-HTr0m{stroke:var(--ui-green-accent)}.ui-circle__fill--warning-Fkgj2{stroke:var(--ui-star)}.ui-circle__fill--danger-4E3Z8{stroke:var(--ui-danger-solid)}@media (prefers-reduced-motion: reduce){.ui-circle__fill-Jbde6{transition:none}}@media (forced-colors: active){.ui-circle__fill-Jbde6{stroke:Highlight;forced-color-adjust:none}}.ui-circle--indeterminate-cITY6 .ui-circle__svg-0IwkR{animation:var(--ui-anim-spin) var(--ui-duration-spin) linear infinite}@media (prefers-reduced-motion: reduce){.ui-circle--indeterminate-cITY6 .ui-circle__svg-0IwkR{animation:none}}.ui-circle__label-A3nJB{font-family:var(--ui-font-mono);font-size:var(--ui-font-size-xs);letter-spacing:.02em;position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:var(--ui-text);font-variant-numeric:tabular-nums}}
@@ -0,0 +1,2 @@
1
+ "use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),r=require("react"),h=require("../../helpers/label.helper.cjs"),p=require("../../theme/context.cjs"),D=require("../../enums/ui-size.enum.cjs"),S=require("../../enums/ui-variant.enum.cjs"),y=require("../Button/index.cjs"),w=require("../Field/index.cjs"),A=require("../Input/index.cjs"),N=require("../Modal/index.cjs"),Y=require("../Textarea/index.cjs"),k={default:{"form":"ui-form-zpZn4"}},F=({isOpen:s,onClose:u,onSubmit:I,title:M,label:_,submitLabel:L,cancelLabel:P,closeLabel:R,description:$,hint:z,placeholder:d,defaultValue:a="",isRequired:m,requiredLabel:E,inputMode:f="text",maxLength:x,rows:B=4})=>{const{labels:e}=p.useUi(),b=r.useId(),[o,c]=r.useState(a),[i,q]=r.useState(!1),g=r.useRef(!1);r.useEffect(()=>{s&&!g.current&&c(a),g.current=s},[s,a]);const j=o.trim(),v=!!m&&j==="",C=n=>f==="multiline"?t.jsx(Y.default,{...n,value:o,onChange:l=>c(l.target.value),placeholder:d,maxLength:x,rows:B}):t.jsx(A.default,{...n,type:f==="number"?"number":"text",value:o,onChange:l=>c(l.target.value),placeholder:d,maxLength:x}),U=async()=>{if(!(v||i)){q(!0);try{await I(j),u()}catch{}finally{q(!1)}}};return t.jsx(N.default,{isOpen:s,onClose:u,title:M,closeLabel:R??(e==null?void 0:e.close),description:$,size:"sm",isDismissable:!i,footer:t.jsxs(t.Fragment,{children:[t.jsx(y.default,{variant:S.default.SECONDARY,size:D.default.MEDIUM,onClick:u,disabled:i,children:h.resolveLabel("PromptDialog.cancelLabel",P,e==null?void 0:e.cancel)}),t.jsx(y.default,{type:"submit",form:b,variant:S.default.PRIMARY,size:D.default.MEDIUM,disabled:v,isLoading:i,children:h.resolveLabel("PromptDialog.submitLabel",L,e==null?void 0:e.submit)})]}),children:t.jsx("form",{id:b,className:k.default.form,onSubmit:n=>{n.preventDefault(),U()},children:t.jsx(w.default,{label:_,hint:z,isRequired:m,requiredLabel:E,children:C})})})},T=r.memo(F);exports.default=T;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/PromptDialog/index.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, memo, type ReactNode, useEffect, useId, useRef, useState } from 'react';\n\nimport { resolveLabel } from '../../helpers/label.helper';\nimport { useUi } from '../../theme/context';\nimport UISize from '../../enums/ui-size.enum';\nimport UIVariant from '../../enums/ui-variant.enum';\nimport Button from '../Button';\nimport Field, { type FieldChildProps } from '../Field';\nimport Input from '../Input';\nimport Modal from '../Modal';\nimport Textarea from '../Textarea';\n\nimport styles from './index.module.scss';\n\ntype BaseProps = {\n isOpen: boolean;\n /** Vazgeçme ve perde/Escape kapanışı. */\n onClose: () => void;\n /** Girilen değerle çalışır (değer kırpılmış gönderilir). */\n onSubmit: (value: string) => void | Promise<void>;\n title: string;\n /** Girdi alanının etiketi. */\n label: string;\n /** Verilmezse `labels.submit`. */\n submitLabel?: string;\n /** Verilmezse `labels.cancel`. */\n cancelLabel?: string;\n /** Kapatma düğmesinin erişilebilir adı. */\n closeLabel?: string;\n /** Başlığın altındaki bir cümlelik bağlam. */\n description?: ReactNode;\n hint?: string;\n placeholder?: string;\n defaultValue?: string;\n /** `text` tek satır, `multiline` gerekçe gibi uzun metin, `number` adet/fark gibi sayılar. */\n inputMode?: 'text' | 'multiline' | 'number';\n maxLength?: number;\n rows?: number;\n};\n\ntype Props = BaseProps & {\n /** Boş (yalnızca boşluk dahil) değer gönderilemez. */\n isRequired?: boolean;\n /** Zorunluluk yıldızının ekran okuyucu karşılığı (\"(zorunlu)\"). */\n requiredLabel?: string;\n};\n\n/** Metin isteyen pencere — `window.prompt()` yerine. */\nconst PromptDialog: FC<Props> = ({\n isOpen,\n onClose,\n onSubmit,\n title,\n label,\n submitLabel,\n cancelLabel,\n closeLabel,\n description,\n hint,\n placeholder,\n defaultValue = '',\n isRequired,\n requiredLabel,\n inputMode = 'text',\n maxLength,\n rows = 4,\n}) => {\n const { labels } = useUi();\n const formId = useId();\n const [value, setValue] = useState(defaultValue);\n const [isBusy, setIsBusy] = useState(false);\n\n /*\n * Deger yalnizca ACILIS kenarinda tazelenir. `isOpen`'a bagli duz bir etki, pencere acikken gelen\n * her ust render'da yazilani ezebilirdi\n */\n const wasOpenRef = useRef(false);\n useEffect(() => {\n if (isOpen && !wasOpenRef.current) setValue(defaultValue);\n wasOpenRef.current = isOpen;\n }, [isOpen, defaultValue]);\n\n const trimmed = value.trim();\n const isSubmitDisabled = Boolean(isRequired) && trimmed === '';\n\n /** Girdi, `Field`in urettigi erisilebilirlik baglariyla cizilir. */\n const renderControl = (props: FieldChildProps) =>\n inputMode === 'multiline' ? (\n <Textarea\n {...props}\n value={value}\n onChange={event => setValue(event.target.value)}\n placeholder={placeholder}\n maxLength={maxLength}\n rows={rows}\n />\n ) : (\n <Input\n {...props}\n type={inputMode === 'number' ? 'number' : 'text'}\n value={value}\n onChange={event => setValue(event.target.value)}\n placeholder={placeholder}\n maxLength={maxLength}\n />\n );\n\n const handleSubmit = async () => {\n if (isSubmitDisabled || isBusy) return;\n\n setIsBusy(true);\n try {\n await onSubmit(trimmed);\n // Yalnizca basarida: hata durumunda pencere acik, metin yerinde kalir.\n onClose();\n } catch {\n // Bildirim cagiranin isi; burada yalnizca pencere acik tutulur.\n } finally {\n setIsBusy(false);\n }\n };\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n closeLabel={closeLabel ?? labels?.close}\n description={description}\n size=\"sm\"\n // Istek surerken kapanmaz: kapanis \"islem iptal oldu\" gibi gorunuyordu.\n isDismissable={!isBusy}\n footer={\n <>\n <Button\n variant={UIVariant.SECONDARY}\n size={UISize.MEDIUM}\n onClick={onClose}\n disabled={isBusy}\n >\n {resolveLabel('PromptDialog.cancelLabel', cancelLabel, labels?.cancel)}\n </Button>\n <Button\n type=\"submit\"\n form={formId}\n variant={UIVariant.PRIMARY}\n size={UISize.MEDIUM}\n disabled={isSubmitDisabled}\n isLoading={isBusy}\n >\n {resolveLabel('PromptDialog.submitLabel', submitLabel, labels?.submit)}\n </Button>\n </>\n }\n >\n <form\n id={formId}\n className={styles.form}\n onSubmit={event => {\n event.preventDefault();\n handleSubmit();\n }}\n >\n <Field label={label} hint={hint} isRequired={isRequired} requiredLabel={requiredLabel}>\n {renderControl}\n </Field>\n </form>\n </Modal>\n );\n};\n\nexport default /*#__PURE__*/ memo(PromptDialog) as typeof PromptDialog;\n"],"names":["PromptDialog","isOpen","onClose","onSubmit","title","label","submitLabel","cancelLabel","closeLabel","description","hint","placeholder","defaultValue","isRequired","requiredLabel","inputMode","maxLength","rows","labels","useUi","formId","useId","value","setValue","useState","isBusy","setIsBusy","wasOpenRef","useRef","useEffect","trimmed","isSubmitDisabled","renderControl","props","jsx","Textarea","event","Input","handleSubmit","Modal","jsxs","Fragment","Button","UIVariant","UISize","resolveLabel","styles","Field","index"],"mappings":"kiBAiDMA,EAA0B,CAAC,CAC/B,OAAAC,EACA,QAAAC,EACA,SAAAC,EACA,MAAAC,EACA,MAAAC,EACA,YAAAC,EACA,YAAAC,EACA,WAAAC,EACA,YAAAC,EACA,KAAAC,EACA,YAAAC,EACA,aAAAC,EAAe,GACf,WAAAC,EACA,cAAAC,EACA,UAAAC,EAAY,OACZ,UAAAC,EACA,KAAAC,EAAO,CACT,IAAM,CACJ,KAAM,CAAE,OAAAC,CAAA,EAAWC,QAAA,EACbC,EAASC,EAAAA,MAAA,EACT,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAASZ,CAAY,EACzC,CAACa,EAAQC,CAAS,EAAIF,EAAAA,SAAS,EAAK,EAMpCG,EAAaC,EAAAA,OAAO,EAAK,EAC/BC,EAAAA,UAAU,IAAM,CACV5B,GAAU,CAAC0B,EAAW,WAAkBf,CAAY,EACxDe,EAAW,QAAU1B,CACvB,EAAG,CAACA,EAAQW,CAAY,CAAC,EAEzB,MAAMkB,EAAUR,EAAM,KAAA,EAChBS,EAAmB,EAAQlB,GAAeiB,IAAY,GAGtDE,EAAiBC,GACrBlB,IAAc,YACZmB,EAAAA,IAACC,EAAAA,QAAA,CACE,GAAGF,EACJ,MAAAX,EACA,SAAUc,GAASb,EAASa,EAAM,OAAO,KAAK,EAC9C,YAAAzB,EACA,UAAAK,EACA,KAAAC,CAAA,CAAA,EAGFiB,EAAAA,IAACG,EAAAA,QAAA,CACE,GAAGJ,EACJ,KAAMlB,IAAc,SAAW,SAAW,OAC1C,MAAAO,EACA,SAAUc,GAASb,EAASa,EAAM,OAAO,KAAK,EAC9C,YAAAzB,EACA,UAAAK,CAAA,CAAA,EAIAsB,EAAe,SAAY,CAC/B,GAAI,EAAAP,GAAoBN,GAExB,CAAAC,EAAU,EAAI,EACd,GAAI,CACF,MAAMvB,EAAS2B,CAAO,EAEtB5B,EAAA,CACF,MAAQ,CAER,QAAA,CACEwB,EAAU,EAAK,CACjB,EACF,EAEA,OACEQ,EAAAA,IAACK,EAAAA,QAAA,CACC,OAAAtC,EACA,QAAAC,EACA,MAAAE,EACA,WAAYI,IAAcU,GAAA,YAAAA,EAAQ,OAClC,YAAAT,EACA,KAAK,KAEL,cAAe,CAACgB,EAChB,OACEe,EAAAA,KAAAC,WAAA,CACE,SAAA,CAAAP,EAAAA,IAACQ,EAAAA,QAAA,CACC,QAASC,EAAAA,QAAU,UACnB,KAAMC,EAAAA,QAAO,OACb,QAAS1C,EACT,SAAUuB,EAET,SAAAoB,EAAAA,aAAa,2BAA4BtC,EAAaW,GAAA,YAAAA,EAAQ,MAAM,CAAA,CAAA,EAEvEgB,EAAAA,IAACQ,EAAAA,QAAA,CACC,KAAK,SACL,KAAMtB,EACN,QAASuB,EAAAA,QAAU,QACnB,KAAMC,EAAAA,QAAO,OACb,SAAUb,EACV,UAAWN,EAEV,SAAAoB,EAAAA,aAAa,2BAA4BvC,EAAaY,GAAA,YAAAA,EAAQ,MAAM,CAAA,CAAA,CACvE,EACF,EAGF,SAAAgB,EAAAA,IAAC,OAAA,CACC,GAAId,EACJ,UAAW0B,EAAAA,QAAO,KAClB,SAAUV,GAAS,CACjBA,EAAM,eAAA,EACNE,EAAA,CACF,EAEA,eAACS,EAAAA,QAAA,CAAM,MAAA1C,EAAc,KAAAK,EAAY,WAAAG,EAAwB,cAAAC,EACtD,SAAAkB,CAAA,CACH,CAAA,CAAA,CACF,CAAA,CAGN,EAEAgB,SAAkChD,CAAY"}
@@ -0,0 +1,36 @@
1
+ import { FC, ReactNode } from 'react';
2
+ type BaseProps = {
3
+ isOpen: boolean;
4
+ /** Vazgeçme ve perde/Escape kapanışı. */
5
+ onClose: () => void;
6
+ /** Girilen değerle çalışır (değer kırpılmış gönderilir). */
7
+ onSubmit: (value: string) => void | Promise<void>;
8
+ title: string;
9
+ /** Girdi alanının etiketi. */
10
+ label: string;
11
+ /** Verilmezse `labels.submit`. */
12
+ submitLabel?: string;
13
+ /** Verilmezse `labels.cancel`. */
14
+ cancelLabel?: string;
15
+ /** Kapatma düğmesinin erişilebilir adı. */
16
+ closeLabel?: string;
17
+ /** Başlığın altındaki bir cümlelik bağlam. */
18
+ description?: ReactNode;
19
+ hint?: string;
20
+ placeholder?: string;
21
+ defaultValue?: string;
22
+ /** `text` tek satır, `multiline` gerekçe gibi uzun metin, `number` adet/fark gibi sayılar. */
23
+ inputMode?: 'text' | 'multiline' | 'number';
24
+ maxLength?: number;
25
+ rows?: number;
26
+ };
27
+ type Props = BaseProps & {
28
+ /** Boş (yalnızca boşluk dahil) değer gönderilemez. */
29
+ isRequired?: boolean;
30
+ /** Zorunluluk yıldızının ekran okuyucu karşılığı ("(zorunlu)"). */
31
+ requiredLabel?: string;
32
+ };
33
+ /** Metin isteyen pencere — `window.prompt()` yerine. */
34
+ declare const PromptDialog: FC<Props>;
35
+ declare const _default: typeof PromptDialog;
36
+ export default _default;