@protonradio/proton-ui 0.11.34 → 0.12.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 (678) hide show
  1. package/README.md +1 -1
  2. package/dist/_virtual/{react-jsx-runtime.production.min.cjs.js → react-jsx-runtime.production.cjs.js} +1 -1
  3. package/dist/_virtual/react-jsx-runtime.production.cjs.js.map +1 -0
  4. package/dist/_virtual/react-jsx-runtime.production.es.js +5 -0
  5. package/dist/_virtual/react-jsx-runtime.production.es.js.map +1 -0
  6. package/dist/components/ActionMenu/ActionMenu.cjs.js +1 -1
  7. package/dist/components/ActionMenu/ActionMenu.cjs.js.map +1 -1
  8. package/dist/components/ActionMenu/ActionMenu.es.js +87 -88
  9. package/dist/components/ActionMenu/ActionMenu.es.js.map +1 -1
  10. package/dist/components/Badge/Badge.cjs.js +1 -1
  11. package/dist/components/Badge/Badge.cjs.js.map +1 -1
  12. package/dist/components/Badge/Badge.es.js +6 -2
  13. package/dist/components/Badge/Badge.es.js.map +1 -1
  14. package/dist/components/Banner/Banner.cjs.js +1 -1
  15. package/dist/components/Banner/Banner.cjs.js.map +1 -1
  16. package/dist/components/Banner/Banner.es.js +4 -4
  17. package/dist/components/Banner/Banner.es.js.map +1 -1
  18. package/dist/components/Button/Button.cjs.js +1 -1
  19. package/dist/components/Button/Button.cjs.js.map +1 -1
  20. package/dist/components/Button/Button.es.js.map +1 -1
  21. package/dist/components/ButtonGroup/ButtonGroup.cjs.js +1 -1
  22. package/dist/components/ButtonGroup/ButtonGroup.cjs.js.map +1 -1
  23. package/dist/components/ButtonGroup/ButtonGroup.es.js +28 -38
  24. package/dist/components/ButtonGroup/ButtonGroup.es.js.map +1 -1
  25. package/dist/components/ButtonWithSelect/ButtonWithSelect.cjs.js +1 -1
  26. package/dist/components/ButtonWithSelect/ButtonWithSelect.cjs.js.map +1 -1
  27. package/dist/components/ButtonWithSelect/ButtonWithSelect.es.js +12 -12
  28. package/dist/components/ButtonWithSelect/ButtonWithSelect.es.js.map +1 -1
  29. package/dist/components/Checkbox/CheckboxIndicator.cjs.js +2 -0
  30. package/dist/components/Checkbox/CheckboxIndicator.cjs.js.map +1 -0
  31. package/dist/components/Checkbox/CheckboxIndicator.es.js +44 -0
  32. package/dist/components/Checkbox/CheckboxIndicator.es.js.map +1 -0
  33. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.cjs.js +1 -1
  34. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.cjs.js.map +1 -1
  35. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.es.js +60 -56
  36. package/dist/components/Checkbox/CheckboxInput/CheckboxInput.es.js.map +1 -1
  37. package/dist/components/Checkbox/CheckboxRadioGroup/CheckboxRadioGroup.cjs.js +1 -1
  38. package/dist/components/Checkbox/CheckboxRadioGroup/CheckboxRadioGroup.cjs.js.map +1 -1
  39. package/dist/components/Checkbox/CheckboxRadioGroup/CheckboxRadioGroup.es.js +41 -31
  40. package/dist/components/Checkbox/CheckboxRadioGroup/CheckboxRadioGroup.es.js.map +1 -1
  41. package/dist/components/Elevation/Elevation.cjs.js +1 -1
  42. package/dist/components/Elevation/Elevation.cjs.js.map +1 -1
  43. package/dist/components/Elevation/Elevation.es.js +11 -10
  44. package/dist/components/Elevation/Elevation.es.js.map +1 -1
  45. package/dist/components/Icon/IconComponents/AlertCircle.cjs.js +1 -1
  46. package/dist/components/Icon/IconComponents/AlertCircle.cjs.js.map +1 -1
  47. package/dist/components/Icon/IconComponents/AlertCircle.es.js +9 -9
  48. package/dist/components/Icon/IconComponents/AlertCircle.es.js.map +1 -1
  49. package/dist/components/Icon/IconComponents/AmazonMusicLogo.cjs.js +1 -1
  50. package/dist/components/Icon/IconComponents/AmazonMusicLogo.cjs.js.map +1 -1
  51. package/dist/components/Icon/IconComponents/AmazonMusicLogo.es.js +10 -10
  52. package/dist/components/Icon/IconComponents/AmazonMusicLogo.es.js.map +1 -1
  53. package/dist/components/Icon/IconComponents/AppleMusicLogo.cjs.js +1 -1
  54. package/dist/components/Icon/IconComponents/AppleMusicLogo.cjs.js.map +1 -1
  55. package/dist/components/Icon/IconComponents/AppleMusicLogo.es.js +10 -10
  56. package/dist/components/Icon/IconComponents/AppleMusicLogo.es.js.map +1 -1
  57. package/dist/components/Icon/IconComponents/ArrowLeft.cjs.js +1 -1
  58. package/dist/components/Icon/IconComponents/ArrowLeft.cjs.js.map +1 -1
  59. package/dist/components/Icon/IconComponents/ArrowLeft.es.js +11 -11
  60. package/dist/components/Icon/IconComponents/ArrowLeft.es.js.map +1 -1
  61. package/dist/components/Icon/IconComponents/BandcampLogo.cjs.js +1 -1
  62. package/dist/components/Icon/IconComponents/BandcampLogo.cjs.js.map +1 -1
  63. package/dist/components/Icon/IconComponents/BandcampLogo.es.js +16 -16
  64. package/dist/components/Icon/IconComponents/BandcampLogo.es.js.map +1 -1
  65. package/dist/components/Icon/IconComponents/BeatportLogo.cjs.js +1 -1
  66. package/dist/components/Icon/IconComponents/BeatportLogo.cjs.js.map +1 -1
  67. package/dist/components/Icon/IconComponents/BeatportLogo.es.js +15 -15
  68. package/dist/components/Icon/IconComponents/BeatportLogo.es.js.map +1 -1
  69. package/dist/components/Icon/IconComponents/Bell.cjs.js +1 -1
  70. package/dist/components/Icon/IconComponents/Bell.cjs.js.map +1 -1
  71. package/dist/components/Icon/IconComponents/Bell.es.js +8 -8
  72. package/dist/components/Icon/IconComponents/Bell.es.js.map +1 -1
  73. package/dist/components/Icon/IconComponents/CaretDown.cjs.js +1 -1
  74. package/dist/components/Icon/IconComponents/CaretDown.cjs.js.map +1 -1
  75. package/dist/components/Icon/IconComponents/CaretDown.es.js +14 -14
  76. package/dist/components/Icon/IconComponents/CaretDown.es.js.map +1 -1
  77. package/dist/components/Icon/IconComponents/CaretRight.cjs.js +1 -1
  78. package/dist/components/Icon/IconComponents/CaretRight.cjs.js.map +1 -1
  79. package/dist/components/Icon/IconComponents/CaretRight.es.js +14 -14
  80. package/dist/components/Icon/IconComponents/CaretRight.es.js.map +1 -1
  81. package/dist/components/Icon/IconComponents/Chart.cjs.js +1 -1
  82. package/dist/components/Icon/IconComponents/Chart.cjs.js.map +1 -1
  83. package/dist/components/Icon/IconComponents/Chart.es.js +14 -14
  84. package/dist/components/Icon/IconComponents/Chart.es.js.map +1 -1
  85. package/dist/components/Icon/IconComponents/CheckCircle.cjs.js +1 -1
  86. package/dist/components/Icon/IconComponents/CheckCircle.cjs.js.map +1 -1
  87. package/dist/components/Icon/IconComponents/CheckCircle.es.js +9 -9
  88. package/dist/components/Icon/IconComponents/CheckCircle.es.js.map +1 -1
  89. package/dist/components/Icon/IconComponents/ChevronDown.cjs.js +1 -1
  90. package/dist/components/Icon/IconComponents/ChevronDown.cjs.js.map +1 -1
  91. package/dist/components/Icon/IconComponents/ChevronDown.es.js +13 -9
  92. package/dist/components/Icon/IconComponents/ChevronDown.es.js.map +1 -1
  93. package/dist/components/Icon/IconComponents/ChevronLeft.cjs.js +1 -1
  94. package/dist/components/Icon/IconComponents/ChevronLeft.cjs.js.map +1 -1
  95. package/dist/components/Icon/IconComponents/ChevronLeft.es.js +12 -8
  96. package/dist/components/Icon/IconComponents/ChevronLeft.es.js.map +1 -1
  97. package/dist/components/Icon/IconComponents/ChevronRight.cjs.js +1 -1
  98. package/dist/components/Icon/IconComponents/ChevronRight.cjs.js.map +1 -1
  99. package/dist/components/Icon/IconComponents/ChevronRight.es.js +14 -14
  100. package/dist/components/Icon/IconComponents/ChevronRight.es.js.map +1 -1
  101. package/dist/components/Icon/IconComponents/ChevronSquareDown.cjs.js +1 -1
  102. package/dist/components/Icon/IconComponents/ChevronSquareDown.cjs.js.map +1 -1
  103. package/dist/components/Icon/IconComponents/ChevronSquareDown.es.js +17 -17
  104. package/dist/components/Icon/IconComponents/ChevronSquareDown.es.js.map +1 -1
  105. package/dist/components/Icon/IconComponents/ChevronUp.cjs.js +1 -1
  106. package/dist/components/Icon/IconComponents/ChevronUp.cjs.js.map +1 -1
  107. package/dist/components/Icon/IconComponents/ChevronUp.es.js +14 -14
  108. package/dist/components/Icon/IconComponents/ChevronUp.es.js.map +1 -1
  109. package/dist/components/Icon/IconComponents/Close.cjs.js +1 -1
  110. package/dist/components/Icon/IconComponents/Close.cjs.js.map +1 -1
  111. package/dist/components/Icon/IconComponents/Close.es.js +14 -14
  112. package/dist/components/Icon/IconComponents/Close.es.js.map +1 -1
  113. package/dist/components/Icon/IconComponents/Cog.cjs.js +1 -1
  114. package/dist/components/Icon/IconComponents/Cog.cjs.js.map +1 -1
  115. package/dist/components/Icon/IconComponents/Cog.es.js +15 -11
  116. package/dist/components/Icon/IconComponents/Cog.es.js.map +1 -1
  117. package/dist/components/Icon/IconComponents/Copy.cjs.js +1 -1
  118. package/dist/components/Icon/IconComponents/Copy.cjs.js.map +1 -1
  119. package/dist/components/Icon/IconComponents/Copy.es.js +11 -11
  120. package/dist/components/Icon/IconComponents/Copy.es.js.map +1 -1
  121. package/dist/components/Icon/IconComponents/DangerCircle.cjs.js +1 -1
  122. package/dist/components/Icon/IconComponents/DangerCircle.cjs.js.map +1 -1
  123. package/dist/components/Icon/IconComponents/DangerCircle.es.js +11 -11
  124. package/dist/components/Icon/IconComponents/DangerCircle.es.js.map +1 -1
  125. package/dist/components/Icon/IconComponents/Dashboard.cjs.js +1 -1
  126. package/dist/components/Icon/IconComponents/Dashboard.cjs.js.map +1 -1
  127. package/dist/components/Icon/IconComponents/Dashboard.es.js +15 -11
  128. package/dist/components/Icon/IconComponents/Dashboard.es.js.map +1 -1
  129. package/dist/components/Icon/IconComponents/DeezerLogo.cjs.js +1 -1
  130. package/dist/components/Icon/IconComponents/DeezerLogo.cjs.js.map +1 -1
  131. package/dist/components/Icon/IconComponents/DeezerLogo.es.js +10 -10
  132. package/dist/components/Icon/IconComponents/DeezerLogo.es.js.map +1 -1
  133. package/dist/components/Icon/IconComponents/Download.cjs.js +1 -1
  134. package/dist/components/Icon/IconComponents/Download.cjs.js.map +1 -1
  135. package/dist/components/Icon/IconComponents/Download.es.js +13 -9
  136. package/dist/components/Icon/IconComponents/Download.es.js.map +1 -1
  137. package/dist/components/Icon/IconComponents/DragHandle.cjs.js +1 -1
  138. package/dist/components/Icon/IconComponents/DragHandle.cjs.js.map +1 -1
  139. package/dist/components/Icon/IconComponents/DragHandle.es.js +12 -8
  140. package/dist/components/Icon/IconComponents/DragHandle.es.js.map +1 -1
  141. package/dist/components/Icon/IconComponents/Edit.cjs.js +1 -1
  142. package/dist/components/Icon/IconComponents/Edit.cjs.js.map +1 -1
  143. package/dist/components/Icon/IconComponents/Edit.es.js +13 -9
  144. package/dist/components/Icon/IconComponents/Edit.es.js.map +1 -1
  145. package/dist/components/Icon/IconComponents/Ellipsis.cjs.js +1 -1
  146. package/dist/components/Icon/IconComponents/Ellipsis.cjs.js.map +1 -1
  147. package/dist/components/Icon/IconComponents/Ellipsis.es.js +14 -10
  148. package/dist/components/Icon/IconComponents/Ellipsis.es.js.map +1 -1
  149. package/dist/components/Icon/IconComponents/EmailThick.cjs.js +1 -1
  150. package/dist/components/Icon/IconComponents/EmailThick.cjs.js.map +1 -1
  151. package/dist/components/Icon/IconComponents/EmailThick.es.js +15 -11
  152. package/dist/components/Icon/IconComponents/EmailThick.es.js.map +1 -1
  153. package/dist/components/Icon/IconComponents/EmailThin.cjs.js +1 -1
  154. package/dist/components/Icon/IconComponents/EmailThin.cjs.js.map +1 -1
  155. package/dist/components/Icon/IconComponents/EmailThin.es.js +15 -11
  156. package/dist/components/Icon/IconComponents/EmailThin.es.js.map +1 -1
  157. package/dist/components/Icon/IconComponents/ExternalLink.cjs.js +1 -1
  158. package/dist/components/Icon/IconComponents/ExternalLink.cjs.js.map +1 -1
  159. package/dist/components/Icon/IconComponents/ExternalLink.es.js +18 -14
  160. package/dist/components/Icon/IconComponents/ExternalLink.es.js.map +1 -1
  161. package/dist/components/Icon/IconComponents/FacebookLogo.cjs.js +1 -1
  162. package/dist/components/Icon/IconComponents/FacebookLogo.cjs.js.map +1 -1
  163. package/dist/components/Icon/IconComponents/FacebookLogo.es.js +10 -10
  164. package/dist/components/Icon/IconComponents/FacebookLogo.es.js.map +1 -1
  165. package/dist/components/Icon/IconComponents/Globe.cjs.js +1 -1
  166. package/dist/components/Icon/IconComponents/Globe.cjs.js.map +1 -1
  167. package/dist/components/Icon/IconComponents/Globe.es.js +12 -8
  168. package/dist/components/Icon/IconComponents/Globe.es.js.map +1 -1
  169. package/dist/components/Icon/IconComponents/Hamburger.cjs.js +1 -1
  170. package/dist/components/Icon/IconComponents/Hamburger.cjs.js.map +1 -1
  171. package/dist/components/Icon/IconComponents/Hamburger.es.js +16 -12
  172. package/dist/components/Icon/IconComponents/Hamburger.es.js.map +1 -1
  173. package/dist/components/Icon/IconComponents/Heartbeat.cjs.js +1 -1
  174. package/dist/components/Icon/IconComponents/Heartbeat.cjs.js.map +1 -1
  175. package/dist/components/Icon/IconComponents/Heartbeat.es.js +16 -12
  176. package/dist/components/Icon/IconComponents/Heartbeat.es.js.map +1 -1
  177. package/dist/components/Icon/IconComponents/Info.cjs.js +1 -1
  178. package/dist/components/Icon/IconComponents/Info.cjs.js.map +1 -1
  179. package/dist/components/Icon/IconComponents/Info.es.js +9 -9
  180. package/dist/components/Icon/IconComponents/Info.es.js.map +1 -1
  181. package/dist/components/Icon/IconComponents/InfoOutline.cjs.js +1 -1
  182. package/dist/components/Icon/IconComponents/InfoOutline.cjs.js.map +1 -1
  183. package/dist/components/Icon/IconComponents/InfoOutline.es.js +15 -11
  184. package/dist/components/Icon/IconComponents/InfoOutline.es.js.map +1 -1
  185. package/dist/components/Icon/IconComponents/InstagramLogo.cjs.js +1 -1
  186. package/dist/components/Icon/IconComponents/InstagramLogo.cjs.js.map +1 -1
  187. package/dist/components/Icon/IconComponents/InstagramLogo.es.js +10 -10
  188. package/dist/components/Icon/IconComponents/InstagramLogo.es.js.map +1 -1
  189. package/dist/components/Icon/IconComponents/IntercomLogo.cjs.js +1 -1
  190. package/dist/components/Icon/IconComponents/IntercomLogo.cjs.js.map +1 -1
  191. package/dist/components/Icon/IconComponents/IntercomLogo.es.js +10 -10
  192. package/dist/components/Icon/IconComponents/IntercomLogo.es.js.map +1 -1
  193. package/dist/components/Icon/IconComponents/Lightning.cjs.js +1 -1
  194. package/dist/components/Icon/IconComponents/Lightning.cjs.js.map +1 -1
  195. package/dist/components/Icon/IconComponents/Lightning.es.js +16 -12
  196. package/dist/components/Icon/IconComponents/Lightning.es.js.map +1 -1
  197. package/dist/components/Icon/IconComponents/Link.cjs.js +1 -1
  198. package/dist/components/Icon/IconComponents/Link.cjs.js.map +1 -1
  199. package/dist/components/Icon/IconComponents/Link.es.js +12 -8
  200. package/dist/components/Icon/IconComponents/Link.es.js.map +1 -1
  201. package/dist/components/Icon/IconComponents/MessengerLogo.cjs.js +1 -1
  202. package/dist/components/Icon/IconComponents/MessengerLogo.cjs.js.map +1 -1
  203. package/dist/components/Icon/IconComponents/MessengerLogo.es.js +9 -9
  204. package/dist/components/Icon/IconComponents/MessengerLogo.es.js.map +1 -1
  205. package/dist/components/Icon/IconComponents/MusicNote.cjs.js +1 -1
  206. package/dist/components/Icon/IconComponents/MusicNote.cjs.js.map +1 -1
  207. package/dist/components/Icon/IconComponents/MusicNote.es.js +15 -11
  208. package/dist/components/Icon/IconComponents/MusicNote.es.js.map +1 -1
  209. package/dist/components/Icon/IconComponents/Pause.cjs.js +1 -1
  210. package/dist/components/Icon/IconComponents/Pause.cjs.js.map +1 -1
  211. package/dist/components/Icon/IconComponents/Pause.es.js +17 -13
  212. package/dist/components/Icon/IconComponents/Pause.es.js.map +1 -1
  213. package/dist/components/Icon/IconComponents/Pencil.cjs.js +1 -1
  214. package/dist/components/Icon/IconComponents/Pencil.cjs.js.map +1 -1
  215. package/dist/components/Icon/IconComponents/Pencil.es.js +15 -11
  216. package/dist/components/Icon/IconComponents/Pencil.es.js.map +1 -1
  217. package/dist/components/Icon/IconComponents/PhoneThick.cjs.js +1 -1
  218. package/dist/components/Icon/IconComponents/PhoneThick.cjs.js.map +1 -1
  219. package/dist/components/Icon/IconComponents/PhoneThick.es.js +17 -13
  220. package/dist/components/Icon/IconComponents/PhoneThick.es.js.map +1 -1
  221. package/dist/components/Icon/IconComponents/PhoneThin.cjs.js +1 -1
  222. package/dist/components/Icon/IconComponents/PhoneThin.cjs.js.map +1 -1
  223. package/dist/components/Icon/IconComponents/PhoneThin.es.js +17 -13
  224. package/dist/components/Icon/IconComponents/PhoneThin.es.js.map +1 -1
  225. package/dist/components/Icon/IconComponents/Play.cjs.js +1 -1
  226. package/dist/components/Icon/IconComponents/Play.cjs.js.map +1 -1
  227. package/dist/components/Icon/IconComponents/Play.es.js +13 -9
  228. package/dist/components/Icon/IconComponents/Play.es.js.map +1 -1
  229. package/dist/components/Icon/IconComponents/ProtonLogo.cjs.js +1 -1
  230. package/dist/components/Icon/IconComponents/ProtonLogo.cjs.js.map +1 -1
  231. package/dist/components/Icon/IconComponents/ProtonLogo.es.js +10 -10
  232. package/dist/components/Icon/IconComponents/ProtonLogo.es.js.map +1 -1
  233. package/dist/components/Icon/IconComponents/Quote.cjs.js +1 -1
  234. package/dist/components/Icon/IconComponents/Quote.cjs.js.map +1 -1
  235. package/dist/components/Icon/IconComponents/Quote.es.js +18 -14
  236. package/dist/components/Icon/IconComponents/Quote.es.js.map +1 -1
  237. package/dist/components/Icon/IconComponents/Search.cjs.js +1 -1
  238. package/dist/components/Icon/IconComponents/Search.cjs.js.map +1 -1
  239. package/dist/components/Icon/IconComponents/Search.es.js +14 -14
  240. package/dist/components/Icon/IconComponents/Search.es.js.map +1 -1
  241. package/dist/components/Icon/IconComponents/Share.cjs.js +1 -1
  242. package/dist/components/Icon/IconComponents/Share.cjs.js.map +1 -1
  243. package/dist/components/Icon/IconComponents/Share.es.js +13 -9
  244. package/dist/components/Icon/IconComponents/Share.es.js.map +1 -1
  245. package/dist/components/Icon/IconComponents/SignOut.cjs.js +1 -1
  246. package/dist/components/Icon/IconComponents/SignOut.cjs.js.map +1 -1
  247. package/dist/components/Icon/IconComponents/SignOut.es.js +15 -11
  248. package/dist/components/Icon/IconComponents/SignOut.es.js.map +1 -1
  249. package/dist/components/Icon/IconComponents/SoundcloudLogo.cjs.js +1 -1
  250. package/dist/components/Icon/IconComponents/SoundcloudLogo.cjs.js.map +1 -1
  251. package/dist/components/Icon/IconComponents/SoundcloudLogo.es.js +10 -10
  252. package/dist/components/Icon/IconComponents/SoundcloudLogo.es.js.map +1 -1
  253. package/dist/components/Icon/IconComponents/SpotifyLogo.cjs.js +1 -1
  254. package/dist/components/Icon/IconComponents/SpotifyLogo.cjs.js.map +1 -1
  255. package/dist/components/Icon/IconComponents/SpotifyLogo.es.js +10 -10
  256. package/dist/components/Icon/IconComponents/SpotifyLogo.es.js.map +1 -1
  257. package/dist/components/Icon/IconComponents/Spy.cjs.js +1 -1
  258. package/dist/components/Icon/IconComponents/Spy.cjs.js.map +1 -1
  259. package/dist/components/Icon/IconComponents/Spy.es.js +13 -9
  260. package/dist/components/Icon/IconComponents/Spy.es.js.map +1 -1
  261. package/dist/components/Icon/IconComponents/SuccessCircle.cjs.js +1 -1
  262. package/dist/components/Icon/IconComponents/SuccessCircle.cjs.js.map +1 -1
  263. package/dist/components/Icon/IconComponents/SuccessCircle.es.js +9 -9
  264. package/dist/components/Icon/IconComponents/SuccessCircle.es.js.map +1 -1
  265. package/dist/components/Icon/IconComponents/TelegramLogo.cjs.js +1 -1
  266. package/dist/components/Icon/IconComponents/TelegramLogo.cjs.js.map +1 -1
  267. package/dist/components/Icon/IconComponents/TelegramLogo.es.js +14 -14
  268. package/dist/components/Icon/IconComponents/TelegramLogo.es.js.map +1 -1
  269. package/dist/components/Icon/IconComponents/TiktokLogo.cjs.js +1 -1
  270. package/dist/components/Icon/IconComponents/TiktokLogo.cjs.js.map +1 -1
  271. package/dist/components/Icon/IconComponents/TiktokLogo.es.js +10 -10
  272. package/dist/components/Icon/IconComponents/TiktokLogo.es.js.map +1 -1
  273. package/dist/components/Icon/IconComponents/Tracklist.cjs.js +1 -1
  274. package/dist/components/Icon/IconComponents/Tracklist.cjs.js.map +1 -1
  275. package/dist/components/Icon/IconComponents/Tracklist.es.js +16 -12
  276. package/dist/components/Icon/IconComponents/Tracklist.es.js.map +1 -1
  277. package/dist/components/Icon/IconComponents/TrashCan.cjs.js +1 -1
  278. package/dist/components/Icon/IconComponents/TrashCan.cjs.js.map +1 -1
  279. package/dist/components/Icon/IconComponents/TrashCan.es.js +13 -9
  280. package/dist/components/Icon/IconComponents/TrashCan.es.js.map +1 -1
  281. package/dist/components/Icon/IconComponents/TraxsourceLogo.cjs.js +1 -1
  282. package/dist/components/Icon/IconComponents/TraxsourceLogo.cjs.js.map +1 -1
  283. package/dist/components/Icon/IconComponents/TraxsourceLogo.es.js +14 -14
  284. package/dist/components/Icon/IconComponents/TraxsourceLogo.es.js.map +1 -1
  285. package/dist/components/Icon/IconComponents/User.cjs.js +1 -1
  286. package/dist/components/Icon/IconComponents/User.cjs.js.map +1 -1
  287. package/dist/components/Icon/IconComponents/User.es.js +9 -9
  288. package/dist/components/Icon/IconComponents/User.es.js.map +1 -1
  289. package/dist/components/Icon/IconComponents/Users.cjs.js +1 -1
  290. package/dist/components/Icon/IconComponents/Users.cjs.js.map +1 -1
  291. package/dist/components/Icon/IconComponents/Users.es.js +12 -8
  292. package/dist/components/Icon/IconComponents/Users.es.js.map +1 -1
  293. package/dist/components/Icon/IconComponents/WarningTriangle.cjs.js +1 -1
  294. package/dist/components/Icon/IconComponents/WarningTriangle.cjs.js.map +1 -1
  295. package/dist/components/Icon/IconComponents/WarningTriangle.es.js +13 -13
  296. package/dist/components/Icon/IconComponents/WarningTriangle.es.js.map +1 -1
  297. package/dist/components/Icon/IconComponents/WhatsappLogoThick.cjs.js +1 -1
  298. package/dist/components/Icon/IconComponents/WhatsappLogoThick.cjs.js.map +1 -1
  299. package/dist/components/Icon/IconComponents/WhatsappLogoThick.es.js +14 -14
  300. package/dist/components/Icon/IconComponents/WhatsappLogoThick.es.js.map +1 -1
  301. package/dist/components/Icon/IconComponents/WhatsappLogoThin.cjs.js +1 -1
  302. package/dist/components/Icon/IconComponents/WhatsappLogoThin.cjs.js.map +1 -1
  303. package/dist/components/Icon/IconComponents/WhatsappLogoThin.es.js +10 -10
  304. package/dist/components/Icon/IconComponents/WhatsappLogoThin.es.js.map +1 -1
  305. package/dist/components/Icon/IconComponents/XTwitterLogo.cjs.js +1 -1
  306. package/dist/components/Icon/IconComponents/XTwitterLogo.cjs.js.map +1 -1
  307. package/dist/components/Icon/IconComponents/XTwitterLogo.es.js +9 -9
  308. package/dist/components/Icon/IconComponents/XTwitterLogo.es.js.map +1 -1
  309. package/dist/components/Icon/IconComponents/YandexLogo.cjs.js +1 -1
  310. package/dist/components/Icon/IconComponents/YandexLogo.cjs.js.map +1 -1
  311. package/dist/components/Icon/IconComponents/YandexLogo.es.js +14 -14
  312. package/dist/components/Icon/IconComponents/YandexLogo.es.js.map +1 -1
  313. package/dist/components/Icon/IconComponents/YoutubeLogo.cjs.js +1 -1
  314. package/dist/components/Icon/IconComponents/YoutubeLogo.cjs.js.map +1 -1
  315. package/dist/components/Icon/IconComponents/YoutubeLogo.es.js +10 -10
  316. package/dist/components/Icon/IconComponents/YoutubeLogo.es.js.map +1 -1
  317. package/dist/components/Icon/IconProps.cjs.js +1 -1
  318. package/dist/components/Icon/IconProps.cjs.js.map +1 -1
  319. package/dist/components/Icon/IconProps.es.js +11 -7
  320. package/dist/components/Icon/IconProps.es.js.map +1 -1
  321. package/dist/components/ImageBackground/ImageBackground.cjs.js +1 -1
  322. package/dist/components/ImageBackground/ImageBackground.cjs.js.map +1 -1
  323. package/dist/components/ImageBackground/ImageBackground.es.js +5 -5
  324. package/dist/components/ImageBackground/ImageBackground.es.js.map +1 -1
  325. package/dist/components/Input/BaseInput/Input.cjs.js +1 -1
  326. package/dist/components/Input/BaseInput/Input.cjs.js.map +1 -1
  327. package/dist/components/Input/BaseInput/Input.es.js +36 -35
  328. package/dist/components/Input/BaseInput/Input.es.js.map +1 -1
  329. package/dist/components/Input/CopyInput/CopyInput.cjs.js +1 -1
  330. package/dist/components/Input/CopyInput/CopyInput.cjs.js.map +1 -1
  331. package/dist/components/Input/CopyInput/CopyInput.es.js +5 -2
  332. package/dist/components/Input/CopyInput/CopyInput.es.js.map +1 -1
  333. package/dist/components/Input/OTPInput/OTPInput.cjs.js +1 -1
  334. package/dist/components/Input/OTPInput/OTPInput.cjs.js.map +1 -1
  335. package/dist/components/Input/OTPInput/OTPInput.es.js.map +1 -1
  336. package/dist/components/Input/SearchInput/SearchInput.cjs.js.map +1 -1
  337. package/dist/components/Input/SearchInput/SearchInput.es.js.map +1 -1
  338. package/dist/components/Menu/MenuTrigger.cjs.js +1 -1
  339. package/dist/components/Menu/MenuTrigger.cjs.js.map +1 -1
  340. package/dist/components/Menu/MenuTrigger.es.js.map +1 -1
  341. package/dist/components/Menu/PopoverMenu.cjs.js +1 -1
  342. package/dist/components/Menu/PopoverMenu.cjs.js.map +1 -1
  343. package/dist/components/Menu/PopoverMenu.es.js +31 -30
  344. package/dist/components/Menu/PopoverMenu.es.js.map +1 -1
  345. package/dist/components/Modal/Modal.cjs.js +1 -1
  346. package/dist/components/Modal/Modal.cjs.js.map +1 -1
  347. package/dist/components/Modal/Modal.es.js +46 -41
  348. package/dist/components/Modal/Modal.es.js.map +1 -1
  349. package/dist/components/Overlay/Overlay.cjs.js +2 -0
  350. package/dist/components/Overlay/Overlay.cjs.js.map +1 -0
  351. package/dist/components/Overlay/Overlay.es.js +25 -0
  352. package/dist/components/Overlay/Overlay.es.js.map +1 -0
  353. package/dist/components/Popover/Popover.cjs.js +1 -1
  354. package/dist/components/Popover/Popover.cjs.js.map +1 -1
  355. package/dist/components/Popover/Popover.es.js +35 -29
  356. package/dist/components/Popover/Popover.es.js.map +1 -1
  357. package/dist/components/ScreenOverlay/ScreenOverlay.cjs.js +1 -1
  358. package/dist/components/ScreenOverlay/ScreenOverlay.cjs.js.map +1 -1
  359. package/dist/components/ScreenOverlay/ScreenOverlay.es.js.map +1 -1
  360. package/dist/components/Select/Select.cjs.js +1 -1
  361. package/dist/components/Select/Select.cjs.js.map +1 -1
  362. package/dist/components/Select/Select.es.js +101 -114
  363. package/dist/components/Select/Select.es.js.map +1 -1
  364. package/dist/components/Switch/Switch.cjs.js +1 -1
  365. package/dist/components/Switch/Switch.cjs.js.map +1 -1
  366. package/dist/components/Switch/Switch.es.js +38 -26
  367. package/dist/components/Switch/Switch.es.js.map +1 -1
  368. package/dist/components/Table/BaseTable/Collection/CompoundComponents.cjs.js.map +1 -1
  369. package/dist/components/Table/BaseTable/Collection/CompoundComponents.es.js.map +1 -1
  370. package/dist/components/Table/BaseTable/Collection/collectionParser.cjs.js +1 -1
  371. package/dist/components/Table/BaseTable/Collection/collectionParser.cjs.js.map +1 -1
  372. package/dist/components/Table/BaseTable/Collection/collectionParser.es.js.map +1 -1
  373. package/dist/components/Table/BaseTable/Collection/useTableCollection.cjs.js.map +1 -1
  374. package/dist/components/Table/BaseTable/Collection/useTableCollection.es.js.map +1 -1
  375. package/dist/components/Table/BaseTable/Table.cjs.js +1 -1
  376. package/dist/components/Table/BaseTable/Table.cjs.js.map +1 -1
  377. package/dist/components/Table/BaseTable/Table.es.js +5 -5
  378. package/dist/components/Table/BaseTable/Table.es.js.map +1 -1
  379. package/dist/components/Table/BaseTable/elements/TableBody.cjs.js.map +1 -1
  380. package/dist/components/Table/BaseTable/elements/TableBody.es.js.map +1 -1
  381. package/dist/components/Table/BaseTable/elements/TableCell.cjs.js.map +1 -1
  382. package/dist/components/Table/BaseTable/elements/TableCell.es.js.map +1 -1
  383. package/dist/components/Table/BaseTable/elements/TableHeader.cjs.js.map +1 -1
  384. package/dist/components/Table/BaseTable/elements/TableHeader.es.js.map +1 -1
  385. package/dist/components/Table/BaseTable/elements/TableHeaderCell.cjs.js.map +1 -1
  386. package/dist/components/Table/BaseTable/elements/TableHeaderCell.es.js.map +1 -1
  387. package/dist/components/Table/BaseTable/elements/TableHeaderRow.cjs.js.map +1 -1
  388. package/dist/components/Table/BaseTable/elements/TableHeaderRow.es.js.map +1 -1
  389. package/dist/components/Table/BaseTable/elements/TableRoot.cjs.js.map +1 -1
  390. package/dist/components/Table/BaseTable/elements/TableRoot.es.js.map +1 -1
  391. package/dist/components/Table/BaseTable/elements/TableRow.cjs.js.map +1 -1
  392. package/dist/components/Table/BaseTable/elements/TableRow.es.js.map +1 -1
  393. package/dist/components/Table/DataTable/DataTable.cjs.js +1 -1
  394. package/dist/components/Table/DataTable/DataTable.cjs.js.map +1 -1
  395. package/dist/components/Table/DataTable/DataTable.es.js +26 -26
  396. package/dist/components/Table/DataTable/DataTable.es.js.map +1 -1
  397. package/dist/components/Table/DataTable/DataTableRow.cjs.js +1 -1
  398. package/dist/components/Table/DataTable/DataTableRow.cjs.js.map +1 -1
  399. package/dist/components/Table/DataTable/DataTableRow.es.js +23 -17
  400. package/dist/components/Table/DataTable/DataTableRow.es.js.map +1 -1
  401. package/dist/components/Text/TextCountdown/TextCountdown.cjs.js +1 -1
  402. package/dist/components/Text/TextCountdown/TextCountdown.cjs.js.map +1 -1
  403. package/dist/components/Text/TextCountdown/TextCountdown.es.js.map +1 -1
  404. package/dist/components/Text/TextEllipsis/TextEllipsis.cjs.js.map +1 -1
  405. package/dist/components/Text/TextEllipsis/TextEllipsis.es.js.map +1 -1
  406. package/dist/components/Text/TextEmphasis/TextEmphasis.cjs.js.map +1 -1
  407. package/dist/components/Text/TextEmphasis/TextEmphasis.es.js.map +1 -1
  408. package/dist/components/ThemeProvider.cjs.js +1 -1
  409. package/dist/components/ThemeProvider.cjs.js.map +1 -1
  410. package/dist/components/ThemeProvider.es.js +4 -4
  411. package/dist/components/ThemeProvider.es.js.map +1 -1
  412. package/dist/components/Tombstone/Tombstone.cjs.js.map +1 -1
  413. package/dist/components/Tombstone/Tombstone.es.js.map +1 -1
  414. package/dist/components/Tooltip/ResponsiveTooltip.cjs.js +1 -1
  415. package/dist/components/Tooltip/ResponsiveTooltip.cjs.js.map +1 -1
  416. package/dist/components/Tooltip/ResponsiveTooltip.es.js +48 -46
  417. package/dist/components/Tooltip/ResponsiveTooltip.es.js.map +1 -1
  418. package/dist/components/Tooltip/Tooltip.cjs.js +1 -1
  419. package/dist/components/Tooltip/Tooltip.cjs.js.map +1 -1
  420. package/dist/components/Tooltip/Tooltip.es.js +57 -52
  421. package/dist/components/Tooltip/Tooltip.es.js.map +1 -1
  422. package/dist/components/Waveform/Waveform.cjs.js +1 -1
  423. package/dist/components/Waveform/Waveform.cjs.js.map +1 -1
  424. package/dist/components/Waveform/Waveform.es.js +1 -1
  425. package/dist/components/Waveform/Waveform.es.js.map +1 -1
  426. package/dist/components/Waveform/WaveformBar.cjs.js.map +1 -1
  427. package/dist/components/Waveform/WaveformBar.es.js.map +1 -1
  428. package/dist/constants.cjs.js +1 -1
  429. package/dist/constants.d.ts +0 -4
  430. package/dist/constants.es.js +2 -4
  431. package/dist/constants.es.js.map +1 -1
  432. package/dist/dark.d.ts +3 -3
  433. package/dist/design/colors.cjs.js.map +1 -1
  434. package/dist/design/colors.es.js.map +1 -1
  435. package/dist/design/darkTheme/colors.cjs.js +1 -1
  436. package/dist/design/darkTheme/colors.cjs.js.map +1 -1
  437. package/dist/design/darkTheme/colors.es.js +12 -12
  438. package/dist/design/darkTheme/colors.es.js.map +1 -1
  439. package/dist/design/darkTheme/stylesheet.cjs.js +1 -1
  440. package/dist/design/darkTheme/stylesheet.cjs.js.map +1 -1
  441. package/dist/design/darkTheme/stylesheet.es.js +17 -14
  442. package/dist/design/darkTheme/stylesheet.es.js.map +1 -1
  443. package/dist/design/generateStylesheet.cjs.js.map +1 -1
  444. package/dist/design/generateStylesheet.es.js.map +1 -1
  445. package/dist/design/lightTheme/colors.cjs.js.map +1 -1
  446. package/dist/design/lightTheme/colors.es.js +3 -3
  447. package/dist/design/lightTheme/stylesheet.cjs.js +1 -1
  448. package/dist/design/lightTheme/stylesheet.cjs.js.map +1 -1
  449. package/dist/design/lightTheme/stylesheet.es.js +17 -17
  450. package/dist/design/lightTheme/stylesheet.es.js.map +1 -1
  451. package/dist/hooks/useBreakpoint.cjs.js +1 -1
  452. package/dist/hooks/useBreakpoint.cjs.js.map +1 -1
  453. package/dist/hooks/useBreakpoint.es.js +13 -12
  454. package/dist/hooks/useBreakpoint.es.js.map +1 -1
  455. package/dist/hooks/useIsClosing.cjs.js +1 -1
  456. package/dist/hooks/useIsClosing.cjs.js.map +1 -1
  457. package/dist/hooks/useIsClosing.es.js.map +1 -1
  458. package/dist/hooks/useLockBodyScroll.cjs.js.map +1 -1
  459. package/dist/hooks/useLockBodyScroll.es.js.map +1 -1
  460. package/dist/hooks/useMergedRef.cjs.js +2 -0
  461. package/dist/hooks/useMergedRef.cjs.js.map +1 -0
  462. package/dist/hooks/useMergedRef.es.js +13 -0
  463. package/dist/hooks/useMergedRef.es.js.map +1 -0
  464. package/dist/hooks/usePalette.cjs.js +1 -1
  465. package/dist/hooks/usePalette.cjs.js.map +1 -1
  466. package/dist/hooks/usePalette.es.js.map +1 -1
  467. package/dist/hooks.cjs.js +1 -1
  468. package/dist/hooks.d.ts +12 -1
  469. package/dist/hooks.es.js +6 -4
  470. package/dist/hooks.es.js.map +1 -1
  471. package/dist/icons.d.ts +79 -74
  472. package/dist/index.cjs.js +1 -1
  473. package/dist/index.d.ts +119 -145
  474. package/dist/index.es.js +20 -20
  475. package/dist/light.d.ts +1 -1
  476. package/dist/node_modules/color2k/dist/index.exports.import.es.cjs.js.map +1 -1
  477. package/dist/node_modules/color2k/dist/index.exports.import.es.es.js.map +1 -1
  478. package/dist/node_modules/react/cjs/react-jsx-runtime.development.cjs.js +4 -12
  479. package/dist/node_modules/react/cjs/react-jsx-runtime.development.cjs.js.map +1 -1
  480. package/dist/node_modules/react/cjs/react-jsx-runtime.development.es.js +193 -557
  481. package/dist/node_modules/react/cjs/react-jsx-runtime.development.es.js.map +1 -1
  482. package/dist/node_modules/react/cjs/react-jsx-runtime.production.cjs.js +10 -0
  483. package/dist/node_modules/react/cjs/react-jsx-runtime.production.cjs.js.map +1 -0
  484. package/dist/node_modules/react/cjs/react-jsx-runtime.production.es.js +36 -0
  485. package/dist/node_modules/react/cjs/react-jsx-runtime.production.es.js.map +1 -0
  486. package/dist/node_modules/react/jsx-runtime.cjs.js +1 -1
  487. package/dist/node_modules/react/jsx-runtime.cjs.js.map +1 -1
  488. package/dist/node_modules/react/jsx-runtime.es.js +1 -1
  489. package/dist/node_modules/react/jsx-runtime.es.js.map +1 -1
  490. package/dist/style.css +1 -1
  491. package/dist/theme.d.ts +20 -4
  492. package/dist/utils/color2k.cjs.js.map +1 -1
  493. package/dist/utils/color2k.es.js +2 -2
  494. package/dist/utils/color2k.es.js.map +1 -1
  495. package/dist/utils/copy.cjs.js +1 -1
  496. package/dist/utils/copy.cjs.js.map +1 -1
  497. package/dist/utils/copy.es.js +12 -11
  498. package/dist/utils/copy.es.js.map +1 -1
  499. package/dist/utils/deepEqual.cjs.js.map +1 -1
  500. package/dist/utils/deepEqual.es.js.map +1 -1
  501. package/dist/utils/image.cjs.js +1 -1
  502. package/dist/utils/image.cjs.js.map +1 -1
  503. package/dist/utils/image.es.js +15 -14
  504. package/dist/utils/image.es.js.map +1 -1
  505. package/dist/utils/navigation.cjs.js.map +1 -1
  506. package/dist/utils/navigation.es.js.map +1 -1
  507. package/dist/utils/palette.cjs.js +1 -1
  508. package/dist/utils/palette.cjs.js.map +1 -1
  509. package/dist/utils/palette.es.js +40 -34
  510. package/dist/utils/palette.es.js.map +1 -1
  511. package/package.json +20 -27
  512. package/dist/_virtual/react-jsx-runtime.production.min.cjs.js.map +0 -1
  513. package/dist/_virtual/react-jsx-runtime.production.min.es.js +0 -5
  514. package/dist/_virtual/react-jsx-runtime.production.min.es.js.map +0 -1
  515. package/dist/components/Dialog/Dialog.cjs.js +0 -2
  516. package/dist/components/Dialog/Dialog.cjs.js.map +0 -1
  517. package/dist/components/Dialog/Dialog.es.js +0 -15
  518. package/dist/components/Dialog/Dialog.es.js.map +0 -1
  519. package/dist/constants/placement.cjs.js +0 -2
  520. package/dist/constants/placement.cjs.js.map +0 -1
  521. package/dist/constants/placement.es.js +0 -28
  522. package/dist/constants/placement.es.js.map +0 -1
  523. package/dist/node_modules/@react-aria/dialog/dist/useDialog.cjs.js +0 -2
  524. package/dist/node_modules/@react-aria/dialog/dist/useDialog.cjs.js.map +0 -1
  525. package/dist/node_modules/@react-aria/dialog/dist/useDialog.es.js +0 -44
  526. package/dist/node_modules/@react-aria/dialog/dist/useDialog.es.js.map +0 -1
  527. package/dist/node_modules/@react-aria/focus/dist/FocusScope.cjs.js +0 -2
  528. package/dist/node_modules/@react-aria/focus/dist/FocusScope.cjs.js.map +0 -1
  529. package/dist/node_modules/@react-aria/focus/dist/FocusScope.es.js +0 -88
  530. package/dist/node_modules/@react-aria/focus/dist/FocusScope.es.js.map +0 -1
  531. package/dist/node_modules/@react-aria/form/dist/useFormValidation.cjs.js +0 -2
  532. package/dist/node_modules/@react-aria/form/dist/useFormValidation.cjs.js.map +0 -1
  533. package/dist/node_modules/@react-aria/form/dist/useFormValidation.es.js +0 -78
  534. package/dist/node_modules/@react-aria/form/dist/useFormValidation.es.js.map +0 -1
  535. package/dist/node_modules/@react-aria/i18n/dist/context.cjs.js +0 -2
  536. package/dist/node_modules/@react-aria/i18n/dist/context.cjs.js.map +0 -1
  537. package/dist/node_modules/@react-aria/i18n/dist/context.es.js +0 -11
  538. package/dist/node_modules/@react-aria/i18n/dist/context.es.js.map +0 -1
  539. package/dist/node_modules/@react-aria/i18n/dist/useDefaultLocale.cjs.js +0 -2
  540. package/dist/node_modules/@react-aria/i18n/dist/useDefaultLocale.cjs.js.map +0 -1
  541. package/dist/node_modules/@react-aria/i18n/dist/useDefaultLocale.es.js +0 -30
  542. package/dist/node_modules/@react-aria/i18n/dist/useDefaultLocale.es.js.map +0 -1
  543. package/dist/node_modules/@react-aria/i18n/dist/utils.cjs.js +0 -2
  544. package/dist/node_modules/@react-aria/i18n/dist/utils.cjs.js.map +0 -1
  545. package/dist/node_modules/@react-aria/i18n/dist/utils.es.js +0 -45
  546. package/dist/node_modules/@react-aria/i18n/dist/utils.es.js.map +0 -1
  547. package/dist/node_modules/@react-aria/interactions/dist/context.cjs.js +0 -2
  548. package/dist/node_modules/@react-aria/interactions/dist/context.cjs.js.map +0 -1
  549. package/dist/node_modules/@react-aria/interactions/dist/context.es.js +0 -10
  550. package/dist/node_modules/@react-aria/interactions/dist/context.es.js.map +0 -1
  551. package/dist/node_modules/@react-aria/interactions/dist/createEventHandler.cjs.js +0 -2
  552. package/dist/node_modules/@react-aria/interactions/dist/createEventHandler.cjs.js.map +0 -1
  553. package/dist/node_modules/@react-aria/interactions/dist/createEventHandler.es.js +0 -29
  554. package/dist/node_modules/@react-aria/interactions/dist/createEventHandler.es.js.map +0 -1
  555. package/dist/node_modules/@react-aria/interactions/dist/focusSafely.cjs.js +0 -2
  556. package/dist/node_modules/@react-aria/interactions/dist/focusSafely.cjs.js.map +0 -1
  557. package/dist/node_modules/@react-aria/interactions/dist/focusSafely.es.js +0 -15
  558. package/dist/node_modules/@react-aria/interactions/dist/focusSafely.es.js.map +0 -1
  559. package/dist/node_modules/@react-aria/interactions/dist/textSelection.cjs.js +0 -2
  560. package/dist/node_modules/@react-aria/interactions/dist/textSelection.cjs.js.map +0 -1
  561. package/dist/node_modules/@react-aria/interactions/dist/textSelection.es.js +0 -35
  562. package/dist/node_modules/@react-aria/interactions/dist/textSelection.es.js.map +0 -1
  563. package/dist/node_modules/@react-aria/interactions/dist/useFocus.cjs.js +0 -2
  564. package/dist/node_modules/@react-aria/interactions/dist/useFocus.cjs.js.map +0 -1
  565. package/dist/node_modules/@react-aria/interactions/dist/useFocus.es.js +0 -30
  566. package/dist/node_modules/@react-aria/interactions/dist/useFocus.es.js.map +0 -1
  567. package/dist/node_modules/@react-aria/interactions/dist/useFocusVisible.cjs.js +0 -2
  568. package/dist/node_modules/@react-aria/interactions/dist/useFocusVisible.cjs.js.map +0 -1
  569. package/dist/node_modules/@react-aria/interactions/dist/useFocusVisible.es.js +0 -63
  570. package/dist/node_modules/@react-aria/interactions/dist/useFocusVisible.es.js.map +0 -1
  571. package/dist/node_modules/@react-aria/interactions/dist/useFocusWithin.cjs.js +0 -2
  572. package/dist/node_modules/@react-aria/interactions/dist/useFocusWithin.cjs.js.map +0 -1
  573. package/dist/node_modules/@react-aria/interactions/dist/useFocusWithin.es.js +0 -56
  574. package/dist/node_modules/@react-aria/interactions/dist/useFocusWithin.es.js.map +0 -1
  575. package/dist/node_modules/@react-aria/interactions/dist/useFocusable.cjs.js +0 -2
  576. package/dist/node_modules/@react-aria/interactions/dist/useFocusable.cjs.js.map +0 -1
  577. package/dist/node_modules/@react-aria/interactions/dist/useFocusable.es.js +0 -32
  578. package/dist/node_modules/@react-aria/interactions/dist/useFocusable.es.js.map +0 -1
  579. package/dist/node_modules/@react-aria/interactions/dist/useKeyboard.cjs.js +0 -2
  580. package/dist/node_modules/@react-aria/interactions/dist/useKeyboard.cjs.js.map +0 -1
  581. package/dist/node_modules/@react-aria/interactions/dist/useKeyboard.es.js +0 -13
  582. package/dist/node_modules/@react-aria/interactions/dist/useKeyboard.es.js.map +0 -1
  583. package/dist/node_modules/@react-aria/interactions/dist/usePress.cjs.js +0 -8
  584. package/dist/node_modules/@react-aria/interactions/dist/usePress.cjs.js.map +0 -1
  585. package/dist/node_modules/@react-aria/interactions/dist/usePress.es.js +0 -386
  586. package/dist/node_modules/@react-aria/interactions/dist/usePress.es.js.map +0 -1
  587. package/dist/node_modules/@react-aria/interactions/dist/utils.cjs.js +0 -2
  588. package/dist/node_modules/@react-aria/interactions/dist/utils.cjs.js.map +0 -1
  589. package/dist/node_modules/@react-aria/interactions/dist/utils.es.js +0 -92
  590. package/dist/node_modules/@react-aria/interactions/dist/utils.es.js.map +0 -1
  591. package/dist/node_modules/@react-aria/label/dist/useField.cjs.js +0 -2
  592. package/dist/node_modules/@react-aria/label/dist/useField.cjs.js.map +0 -1
  593. package/dist/node_modules/@react-aria/label/dist/useField.es.js +0 -36
  594. package/dist/node_modules/@react-aria/label/dist/useField.es.js.map +0 -1
  595. package/dist/node_modules/@react-aria/label/dist/useLabel.cjs.js +0 -2
  596. package/dist/node_modules/@react-aria/label/dist/useLabel.cjs.js.map +0 -1
  597. package/dist/node_modules/@react-aria/label/dist/useLabel.es.js +0 -23
  598. package/dist/node_modules/@react-aria/label/dist/useLabel.es.js.map +0 -1
  599. package/dist/node_modules/@react-aria/overlays/dist/Overlay.cjs.js +0 -2
  600. package/dist/node_modules/@react-aria/overlays/dist/Overlay.cjs.js.map +0 -1
  601. package/dist/node_modules/@react-aria/overlays/dist/Overlay.es.js +0 -16
  602. package/dist/node_modules/@react-aria/overlays/dist/Overlay.es.js.map +0 -1
  603. package/dist/node_modules/@react-aria/radio/dist/useRadio.cjs.js +0 -2
  604. package/dist/node_modules/@react-aria/radio/dist/useRadio.cjs.js.map +0 -1
  605. package/dist/node_modules/@react-aria/radio/dist/useRadio.es.js +0 -70
  606. package/dist/node_modules/@react-aria/radio/dist/useRadio.es.js.map +0 -1
  607. package/dist/node_modules/@react-aria/radio/dist/useRadioGroup.cjs.js +0 -2
  608. package/dist/node_modules/@react-aria/radio/dist/useRadioGroup.cjs.js.map +0 -1
  609. package/dist/node_modules/@react-aria/radio/dist/useRadioGroup.es.js +0 -80
  610. package/dist/node_modules/@react-aria/radio/dist/useRadioGroup.es.js.map +0 -1
  611. package/dist/node_modules/@react-aria/radio/dist/utils.cjs.js +0 -2
  612. package/dist/node_modules/@react-aria/radio/dist/utils.cjs.js.map +0 -1
  613. package/dist/node_modules/@react-aria/radio/dist/utils.es.js +0 -5
  614. package/dist/node_modules/@react-aria/radio/dist/utils.es.js.map +0 -1
  615. package/dist/node_modules/@react-aria/ssr/dist/SSRProvider.cjs.js +0 -2
  616. package/dist/node_modules/@react-aria/ssr/dist/SSRProvider.cjs.js.map +0 -1
  617. package/dist/node_modules/@react-aria/ssr/dist/SSRProvider.es.js +0 -19
  618. package/dist/node_modules/@react-aria/ssr/dist/SSRProvider.es.js.map +0 -1
  619. package/dist/node_modules/@react-aria/switch/dist/useSwitch.cjs.js +0 -2
  620. package/dist/node_modules/@react-aria/switch/dist/useSwitch.cjs.js.map +0 -1
  621. package/dist/node_modules/@react-aria/switch/dist/useSwitch.es.js +0 -20
  622. package/dist/node_modules/@react-aria/switch/dist/useSwitch.es.js.map +0 -1
  623. package/dist/node_modules/@react-aria/toggle/dist/useToggle.cjs.js +0 -2
  624. package/dist/node_modules/@react-aria/toggle/dist/useToggle.cjs.js.map +0 -1
  625. package/dist/node_modules/@react-aria/toggle/dist/useToggle.es.js +0 -60
  626. package/dist/node_modules/@react-aria/toggle/dist/useToggle.es.js.map +0 -1
  627. package/dist/node_modules/@react-aria/visually-hidden/dist/VisuallyHidden.cjs.js +0 -2
  628. package/dist/node_modules/@react-aria/visually-hidden/dist/VisuallyHidden.cjs.js.map +0 -1
  629. package/dist/node_modules/@react-aria/visually-hidden/dist/VisuallyHidden.es.js +0 -41
  630. package/dist/node_modules/@react-aria/visually-hidden/dist/VisuallyHidden.es.js.map +0 -1
  631. package/dist/node_modules/@react-stately/form/dist/useFormValidationState.cjs.js +0 -2
  632. package/dist/node_modules/@react-stately/form/dist/useFormValidationState.cjs.js.map +0 -1
  633. package/dist/node_modules/@react-stately/form/dist/useFormValidationState.es.js +0 -110
  634. package/dist/node_modules/@react-stately/form/dist/useFormValidationState.es.js.map +0 -1
  635. package/dist/node_modules/@react-stately/radio/dist/useRadioGroupState.cjs.js +0 -2
  636. package/dist/node_modules/@react-stately/radio/dist/useRadioGroupState.cjs.js.map +0 -1
  637. package/dist/node_modules/@react-stately/radio/dist/useRadioGroupState.es.js +0 -35
  638. package/dist/node_modules/@react-stately/radio/dist/useRadioGroupState.es.js.map +0 -1
  639. package/dist/node_modules/@react-stately/toggle/dist/useToggleState.cjs.js +0 -2
  640. package/dist/node_modules/@react-stately/toggle/dist/useToggleState.cjs.js.map +0 -1
  641. package/dist/node_modules/@react-stately/toggle/dist/useToggleState.es.js +0 -22
  642. package/dist/node_modules/@react-stately/toggle/dist/useToggleState.es.js.map +0 -1
  643. package/dist/node_modules/@react-stately/utils/dist/useControlledState.cjs.js +0 -2
  644. package/dist/node_modules/@react-stately/utils/dist/useControlledState.cjs.js.map +0 -1
  645. package/dist/node_modules/@react-stately/utils/dist/useControlledState.es.js +0 -31
  646. package/dist/node_modules/@react-stately/utils/dist/useControlledState.es.js.map +0 -1
  647. package/dist/node_modules/@swc/helpers/esm/_check_private_redeclaration.cjs.js +0 -2
  648. package/dist/node_modules/@swc/helpers/esm/_check_private_redeclaration.cjs.js.map +0 -1
  649. package/dist/node_modules/@swc/helpers/esm/_check_private_redeclaration.es.js +0 -9
  650. package/dist/node_modules/@swc/helpers/esm/_check_private_redeclaration.es.js.map +0 -1
  651. package/dist/node_modules/@swc/helpers/esm/_class_apply_descriptor_get.cjs.js +0 -2
  652. package/dist/node_modules/@swc/helpers/esm/_class_apply_descriptor_get.cjs.js.map +0 -1
  653. package/dist/node_modules/@swc/helpers/esm/_class_apply_descriptor_get.es.js +0 -8
  654. package/dist/node_modules/@swc/helpers/esm/_class_apply_descriptor_get.es.js.map +0 -1
  655. package/dist/node_modules/@swc/helpers/esm/_class_apply_descriptor_set.cjs.js +0 -2
  656. package/dist/node_modules/@swc/helpers/esm/_class_apply_descriptor_set.cjs.js.map +0 -1
  657. package/dist/node_modules/@swc/helpers/esm/_class_apply_descriptor_set.es.js +0 -13
  658. package/dist/node_modules/@swc/helpers/esm/_class_apply_descriptor_set.es.js.map +0 -1
  659. package/dist/node_modules/@swc/helpers/esm/_class_extract_field_descriptor.cjs.js +0 -2
  660. package/dist/node_modules/@swc/helpers/esm/_class_extract_field_descriptor.cjs.js.map +0 -1
  661. package/dist/node_modules/@swc/helpers/esm/_class_extract_field_descriptor.es.js +0 -9
  662. package/dist/node_modules/@swc/helpers/esm/_class_extract_field_descriptor.es.js.map +0 -1
  663. package/dist/node_modules/@swc/helpers/esm/_class_private_field_get.cjs.js +0 -2
  664. package/dist/node_modules/@swc/helpers/esm/_class_private_field_get.cjs.js.map +0 -1
  665. package/dist/node_modules/@swc/helpers/esm/_class_private_field_get.es.js +0 -11
  666. package/dist/node_modules/@swc/helpers/esm/_class_private_field_get.es.js.map +0 -1
  667. package/dist/node_modules/@swc/helpers/esm/_class_private_field_init.cjs.js +0 -2
  668. package/dist/node_modules/@swc/helpers/esm/_class_private_field_init.cjs.js.map +0 -1
  669. package/dist/node_modules/@swc/helpers/esm/_class_private_field_init.es.js +0 -9
  670. package/dist/node_modules/@swc/helpers/esm/_class_private_field_init.es.js.map +0 -1
  671. package/dist/node_modules/@swc/helpers/esm/_class_private_field_set.cjs.js +0 -2
  672. package/dist/node_modules/@swc/helpers/esm/_class_private_field_set.cjs.js.map +0 -1
  673. package/dist/node_modules/@swc/helpers/esm/_class_private_field_set.es.js +0 -11
  674. package/dist/node_modules/@swc/helpers/esm/_class_private_field_set.es.js.map +0 -1
  675. package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.cjs.js +0 -10
  676. package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.cjs.js.map +0 -1
  677. package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.es.js +0 -29
  678. package/dist/node_modules/react/cjs/react-jsx-runtime.production.min.es.js.map +0 -1
@@ -1,33 +1,34 @@
1
1
  import { j as n } from "../../../node_modules/react/jsx-runtime.es.js";
2
- import { forwardRef as K, useRef as x, useEffect as S } from "react";
3
- import { useTheme as U } from "../../ThemeProvider.es.js";
2
+ import { forwardRef as B, useRef as x, useEffect as K } from "react";
3
+ import { useMergedRef as M } from "../../../hooks/useMergedRef.es.js";
4
+ import { useTheme as S } from "../../ThemeProvider.es.js";
4
5
  /* empty css */
5
- import { copyTextToClipboard as g } from "../../../utils/copy.es.js";
6
+ import { copyTextToClipboard as U } from "../../../utils/copy.es.js";
6
7
  import { csx as o } from "../../../utils/string.es.js";
7
- const G = K(
8
+ const G = B(
8
9
  ({
9
- prefix: l,
10
+ prefix: f,
10
11
  suffix: d,
11
12
  description: s,
12
13
  descriptionPosition: W = "top",
13
14
  isDisabled: y,
14
15
  error: i,
15
- onChange: _,
16
- label: f,
16
+ onChange: m,
17
+ label: l,
17
18
  name: a,
18
19
  placeholder: k,
19
20
  type: A = "text",
20
21
  value: b,
21
22
  autoFocus: P,
22
23
  autoComplete: T,
23
- isRequired: m = !1,
24
+ isRequired: _ = !1,
24
25
  isReadOnly: j = !1,
25
26
  onSubmit: N,
26
27
  onClear: w,
27
28
  "data-testid": D
28
29
  }, O) => {
29
- const $ = x(null), c = x(null), p = x(null), r = x(null), { className: q } = U(), B = O || $;
30
- S(() => {
30
+ const R = x(null), p = x(null), c = x(null), r = x(null), { className: g } = S(), q = M(R, O);
31
+ K(() => {
31
32
  if (!r.current) return;
32
33
  const t = {
33
34
  containerWidth: 200,
@@ -46,15 +47,15 @@ const G = K(
46
47
  `${e}px`
47
48
  ), t.containerWidth = e);
48
49
  }
49
- if (c.current) {
50
- const e = c.current.offsetWidth || t.prefixWidth;
50
+ if (p.current) {
51
+ const e = p.current.offsetWidth || t.prefixWidth;
51
52
  e !== t.prefixWidth && ((E = r.current) == null || E.style.setProperty(
52
53
  "--prefix-width",
53
54
  `${e}px`
54
55
  ), t.prefixWidth = e);
55
56
  }
56
- if (p.current) {
57
- const e = p.current.offsetWidth || t.suffixWidth;
57
+ if (c.current) {
58
+ const e = c.current.offsetWidth || t.suffixWidth;
58
59
  e !== t.suffixWidth && ((F = r.current) == null || F.style.setProperty(
59
60
  "--suffix-width",
60
61
  `${e}px`
@@ -65,11 +66,11 @@ const G = K(
65
66
  };
66
67
  z();
67
68
  const h = new ResizeObserver(z);
68
- return r.current && h.observe(r.current), c.current && h.observe(c.current), p.current && h.observe(p.current), () => {
69
+ return r.current && h.observe(r.current), p.current && h.observe(p.current), c.current && h.observe(c.current), () => {
69
70
  u !== null && cancelAnimationFrame(u), h.disconnect();
70
71
  };
71
- }, [l, d]);
72
- const R = `${a}-input`, I = `${a}-error`, v = `${a}-description`;
72
+ }, [f, d]);
73
+ const $ = `${a}-input`, I = `${a}-error`, v = `${a}-description`;
73
74
  return /* @__PURE__ */ n.jsxs("div", { ref: r, className: "proton-Input__container", children: [
74
75
  s && W === "top" && /* @__PURE__ */ n.jsx(
75
76
  "div",
@@ -85,30 +86,30 @@ const G = K(
85
86
  {
86
87
  className: o(
87
88
  "proton-Input__container-inner",
88
- l && "proton-Input__has-prefix",
89
+ f && "proton-Input__has-prefix",
89
90
  d && "proton-Input__has-suffix"
90
91
  ),
91
92
  children: [
92
- l && /* @__PURE__ */ n.jsx(
93
+ f && /* @__PURE__ */ n.jsx(
93
94
  "div",
94
95
  {
95
- ref: c,
96
+ ref: p,
96
97
  className: o(
97
98
  "proton-Input__descriptor",
98
99
  "proton-Input__prefix"
99
100
  ),
100
- children: l
101
+ children: f
101
102
  }
102
103
  ),
103
104
  /* @__PURE__ */ n.jsx(
104
105
  "input",
105
106
  {
106
- id: R,
107
+ id: $,
107
108
  name: a,
108
109
  type: A,
109
110
  value: b,
110
111
  onChange: (t) => {
111
- _ == null || _(t.target.value);
112
+ m == null || m(t.target.value);
112
113
  },
113
114
  onKeyDown: (t) => {
114
115
  switch (t.key) {
@@ -122,49 +123,49 @@ const G = K(
122
123
  },
123
124
  onCopy: async () => {
124
125
  var t;
125
- return await g((t = $.current) == null ? void 0 : t.value);
126
+ return await U(((t = R.current) == null ? void 0 : t.value) || "");
126
127
  },
127
128
  disabled: y,
128
129
  readOnly: j,
129
- required: m,
130
+ required: _,
130
131
  autoFocus: P,
131
132
  autoComplete: T ? "on" : "off",
132
- placeholder: f ? void 0 : k,
133
- "aria-label": f || a,
133
+ placeholder: l ? void 0 : k,
134
+ "aria-label": l || a,
134
135
  "aria-invalid": !!i,
135
136
  "aria-errormessage": typeof i == "string" ? i : I,
136
- "aria-required": m,
137
+ "aria-required": _,
137
138
  "aria-readonly": j,
138
139
  "aria-describedby": i ? I : s ? v : void 0,
139
140
  "aria-disabled": y,
140
141
  "data-testid": D,
141
- ref: B,
142
+ ref: q,
142
143
  className: o(
143
144
  "proton-Input",
144
145
  i && "proton-Input--error",
145
- f && "proton-Input__label-top",
146
- q
146
+ l && "proton-Input__label-top",
147
+ g
147
148
  )
148
149
  }
149
150
  ),
150
151
  /* @__PURE__ */ n.jsxs(
151
152
  "label",
152
153
  {
153
- htmlFor: R,
154
+ htmlFor: $,
154
155
  className: o(
155
156
  "proton-Input__label",
156
157
  b && "proton-Input__label--filled"
157
158
  ),
158
159
  children: [
159
- f,
160
- m && /* @__PURE__ */ n.jsx("span", { "aria-hidden": "true", children: " *" })
160
+ l,
161
+ _ && /* @__PURE__ */ n.jsx("span", { "aria-hidden": "true", children: " *" })
161
162
  ]
162
163
  }
163
164
  ),
164
165
  d && /* @__PURE__ */ n.jsx(
165
166
  "div",
166
167
  {
167
- ref: p,
168
+ ref: c,
168
169
  className: o(
169
170
  "proton-Input__descriptor",
170
171
  "proton-Input__suffix"
@@ -1 +1 @@
1
- {"version":3,"file":"Input.es.js","sources":["../../../../src/components/Input/BaseInput/Input.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { forwardRef, useEffect, useRef } from \"react\";\n\nimport { useTheme } from \"../../ThemeProvider\";\nimport { csx } from \"../../../utils\";\nimport \"./Input.css\";\nimport { copyTextToClipboard } from \"../../../utils/copy\";\n\nexport interface BaseInputProps {\n /**\n * onChange handler for the input\n */\n onChange?: (value: string) => void;\n\n /** Whether the input is disabled. */\n isDisabled?: boolean;\n\n /** Description text shown above the input. */\n description?: React.ReactNode | string;\n\n /**\n * The position of the description text.\n * @default \"top\"\n */\n descriptionPosition?: \"top\" | \"bottom\";\n\n /** Error state that changes the input's visual style and displays an error message. */\n error?: React.ReactNode | string;\n\n /**\n * Label for the input element.\n * @note When a label is provided, the input will have extra padding, and the label will float above the text input when focused or filled.\n */\n label?: string;\n\n /** Test ID for the component. */\n \"data-testid\"?: string;\n\n /** Content to display before the input. Typically used for icons. */\n prefix?: React.ReactNode;\n\n /** Content to display after the input. Typically used for icons. */\n suffix?: React.ReactNode;\n\n /**\n * Should the browser's autocomplete be enabled?\n * @external https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete\n */\n autoComplete?: boolean;\n\n /**\n * Should the input be autofocused?\n * @external https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autofocus\n */\n autoFocus?: boolean;\n\n /**\n * The name attribute of the input element.\n * @external https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/name\n */\n name: string;\n\n /**\n * The placeholder text to display when the input is empty.\n * @note label takes precedence over placeholder, if both are provided.\n * @external https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/placeholder\n */\n placeholder?: string;\n\n /**\n * The type attribute of the input element.\n * @external https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/type\n * @default \"text\"\n */\n type?: string;\n\n /**\n * The value of the input.\n * @external https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#value\n */\n value?: string;\n\n /**\n * Whether the input is required.\n * @default false\n */\n isRequired?: boolean;\n\n /**\n * Whether the input is read-only.\n * @default false\n */\n isReadOnly?: boolean;\n\n /**\n * Called when the input is submitted (e.g. by pressing Enter).\n */\n onSubmit?: React.FormEventHandler<HTMLInputElement>;\n\n /**\n * Called when the input is cleared (e.g. by pressing Escape).\n */\n onClear?: () => void;\n}\n\n/**\n * A controlled and customizable input component with support for labels, prefixes, suffixes, and error states.\n *\n * API:\n * - {@link BaseInputProps}\n */\nexport const Input = forwardRef<HTMLInputElement, BaseInputProps>(\n (\n {\n prefix,\n suffix,\n description,\n descriptionPosition = \"top\",\n isDisabled,\n error,\n onChange,\n label,\n name,\n placeholder,\n type = \"text\",\n value,\n autoFocus,\n autoComplete,\n isRequired = false,\n isReadOnly = false,\n onSubmit,\n onClear,\n \"data-testid\": testId,\n },\n forwardedRef: React.RefObject<HTMLInputElement>\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const prefixRef = useRef<HTMLDivElement>(null);\n const suffixRef = useRef<HTMLDivElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const { className } = useTheme();\n const ref = forwardedRef || inputRef;\n\n // Control dynamic prefix and suffix widths using ResizeObserver\n useEffect(() => {\n if (!containerRef.current) return;\n\n const prevSizes = {\n containerWidth: 200,\n prefixWidth: 32,\n suffixWidth: 32,\n };\n\n let rafId: number | null = null;\n\n const updateSizes = () => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n rafId = requestAnimationFrame(() => {\n if (!containerRef.current) return;\n\n if (containerRef.current) {\n const containerWidth =\n containerRef.current.offsetWidth || prevSizes.containerWidth;\n\n if (containerWidth !== prevSizes.containerWidth) {\n containerRef.current.style.setProperty(\n \"--container-width\",\n `${containerWidth}px`\n );\n prevSizes.containerWidth = containerWidth;\n }\n }\n\n if (prefixRef.current) {\n const prefixWidth =\n prefixRef.current.offsetWidth || prevSizes.prefixWidth;\n\n if (prefixWidth !== prevSizes.prefixWidth) {\n containerRef.current?.style.setProperty(\n \"--prefix-width\",\n `${prefixWidth}px`\n );\n prevSizes.prefixWidth = prefixWidth;\n }\n }\n\n if (suffixRef.current) {\n const suffixWidth =\n suffixRef.current.offsetWidth || prevSizes.suffixWidth;\n\n if (suffixWidth !== prevSizes.suffixWidth) {\n containerRef.current?.style.setProperty(\n \"--suffix-width\",\n `${suffixWidth}px`\n );\n prevSizes.suffixWidth = suffixWidth;\n }\n }\n });\n };\n\n updateSizes();\n\n const resizeObserver = new ResizeObserver(updateSizes);\n\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n }\n if (prefixRef.current) {\n resizeObserver.observe(prefixRef.current);\n }\n if (suffixRef.current) {\n resizeObserver.observe(suffixRef.current);\n }\n\n return () => {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n resizeObserver.disconnect();\n };\n }, [prefix, suffix]);\n\n const inputId = `${name}-input`;\n const errorId = `${name}-error`;\n const descriptionId = `${name}-description`;\n\n return (\n <div ref={containerRef} className=\"proton-Input__container\">\n {description && descriptionPosition === \"top\" && (\n <div\n id={descriptionId}\n className=\"proton-Input__text\"\n aria-live=\"polite\"\n >\n {description}\n </div>\n )}\n <div\n className={csx(\n \"proton-Input__container-inner\",\n prefix && \"proton-Input__has-prefix\",\n suffix && \"proton-Input__has-suffix\"\n )}\n >\n {prefix && (\n <div\n ref={prefixRef}\n className={csx(\n \"proton-Input__descriptor\",\n \"proton-Input__prefix\"\n )}\n >\n {prefix}\n </div>\n )}\n\n <input\n id={inputId}\n name={name}\n type={type}\n value={value}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n }}\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n switch (e.key) {\n case \"Enter\":\n if (onSubmit) {\n e.preventDefault();\n onSubmit(e);\n }\n break;\n case \"Escape\":\n if (onClear) {\n e.preventDefault();\n onClear();\n }\n break;\n }\n }}\n onCopy={async () =>\n await copyTextToClipboard(inputRef.current?.value)\n }\n disabled={isDisabled}\n readOnly={isReadOnly}\n required={isRequired}\n autoFocus={autoFocus}\n autoComplete={autoComplete ? \"on\" : \"off\"}\n placeholder={label ? undefined : placeholder}\n aria-label={label || name}\n aria-invalid={Boolean(error)}\n aria-errormessage={typeof error === \"string\" ? error : errorId}\n aria-required={isRequired}\n aria-readonly={isReadOnly}\n aria-describedby={\n error ? errorId : description ? descriptionId : undefined\n }\n aria-disabled={isDisabled}\n data-testid={testId}\n ref={ref}\n className={csx(\n \"proton-Input\",\n error && \"proton-Input--error\",\n label && \"proton-Input__label-top\",\n className\n )}\n />\n\n <label\n htmlFor={inputId}\n className={csx(\n \"proton-Input__label\",\n value && \"proton-Input__label--filled\"\n )}\n >\n {label}\n {isRequired && <span aria-hidden=\"true\"> *</span>}\n </label>\n\n {suffix && (\n <div\n ref={suffixRef}\n className={csx(\n \"proton-Input__descriptor\",\n \"proton-Input__suffix\"\n )}\n >\n {suffix}\n </div>\n )}\n </div>\n\n {error ? (\n <div\n role=\"alert\"\n className={csx(\"proton-Input__error\", \"proton-Input__text\")}\n id={errorId}\n >\n {error}\n </div>\n ) : description && descriptionPosition === \"bottom\" ? (\n <div\n id={descriptionId}\n className=\"proton-Input__text\"\n aria-live=\"polite\"\n >\n {description}\n </div>\n ) : null}\n </div>\n );\n }\n);\n\nInput.displayName = \"ProtonUIInput\";\n"],"names":["Input","forwardRef","prefix","suffix","description","descriptionPosition","isDisabled","error","onChange","label","name","placeholder","type","value","autoFocus","autoComplete","isRequired","isReadOnly","onSubmit","onClear","testId","forwardedRef","inputRef","useRef","prefixRef","suffixRef","containerRef","className","useTheme","ref","useEffect","prevSizes","rafId","updateSizes","containerWidth","prefixWidth","_a","suffixWidth","_b","resizeObserver","inputId","errorId","descriptionId","jsxs","jsx","csx","e","copyTextToClipboard"],"mappings":"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"}
1
+ {"version":3,"file":"Input.es.js","sources":["../../../../src/components/Input/BaseInput/Input.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { forwardRef, useEffect, useRef, type ForwardedRef } from \"react\";\n\nimport { useMergedRef } from \"../../../hooks/useMergedRef\";\nimport { useTheme } from \"../../ThemeProvider\";\nimport { csx } from \"../../../utils\";\nimport \"./Input.css\";\nimport { copyTextToClipboard } from \"../../../utils/copy\";\n\nexport interface BaseInputProps {\n /**\n * onChange handler for the input\n */\n onChange?: (value: string) => void;\n\n /** Whether the input is disabled. */\n isDisabled?: boolean;\n\n /** Description text shown above the input. */\n description?: React.ReactNode | string;\n\n /**\n * The position of the description text.\n * @default \"top\"\n */\n descriptionPosition?: \"top\" | \"bottom\";\n\n /** Error state that changes the input's visual style and displays an error message. */\n error?: React.ReactNode | string;\n\n /**\n * Label for the input element.\n * @note When a label is provided, the input will have extra padding, and the label will float above the text input when focused or filled.\n */\n label?: string;\n\n /** Test ID for the component. */\n \"data-testid\"?: string;\n\n /** Content to display before the input. Typically used for icons. */\n prefix?: React.ReactNode;\n\n /** Content to display after the input. Typically used for icons. */\n suffix?: React.ReactNode;\n\n /**\n * Should the browser's autocomplete be enabled?\n * @external https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete\n */\n autoComplete?: boolean;\n\n /**\n * Should the input be autofocused?\n * @external https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autofocus\n */\n autoFocus?: boolean;\n\n /**\n * The name attribute of the input element.\n * @external https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/name\n */\n name: string;\n\n /**\n * The placeholder text to display when the input is empty.\n * @note label takes precedence over placeholder, if both are provided.\n * @external https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/placeholder\n */\n placeholder?: string;\n\n /**\n * The type attribute of the input element.\n * @external https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/type\n * @default \"text\"\n */\n type?: string;\n\n /**\n * The value of the input.\n * @external https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#value\n */\n value?: string;\n\n /**\n * Whether the input is required.\n * @default false\n */\n isRequired?: boolean;\n\n /**\n * Whether the input is read-only.\n * @default false\n */\n isReadOnly?: boolean;\n\n /**\n * Called when the input is submitted (e.g. by pressing Enter).\n */\n onSubmit?: React.FormEventHandler<HTMLInputElement>;\n\n /**\n * Called when the input is cleared (e.g. by pressing Escape).\n */\n onClear?: () => void;\n}\n\n/**\n * A controlled and customizable input component with support for labels, prefixes, suffixes, and error states.\n *\n * API:\n * - {@link BaseInputProps}\n */\nexport const Input = forwardRef<HTMLInputElement, BaseInputProps>(\n (\n {\n prefix,\n suffix,\n description,\n descriptionPosition = \"top\",\n isDisabled,\n error,\n onChange,\n label,\n name,\n placeholder,\n type = \"text\",\n value,\n autoFocus,\n autoComplete,\n isRequired = false,\n isReadOnly = false,\n onSubmit,\n onClear,\n \"data-testid\": testId,\n },\n forwardedRef: ForwardedRef<HTMLInputElement>,\n ) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const prefixRef = useRef<HTMLDivElement>(null);\n const suffixRef = useRef<HTMLDivElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const { className } = useTheme();\n const setInputRef = useMergedRef(inputRef, forwardedRef);\n\n // Control dynamic prefix and suffix widths using ResizeObserver\n useEffect(() => {\n if (!containerRef.current) return;\n\n const prevSizes = {\n containerWidth: 200,\n prefixWidth: 32,\n suffixWidth: 32,\n };\n\n let rafId: number | null = null;\n\n const updateSizes = () => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n\n rafId = requestAnimationFrame(() => {\n if (!containerRef.current) return;\n\n if (containerRef.current) {\n const containerWidth =\n containerRef.current.offsetWidth || prevSizes.containerWidth;\n\n if (containerWidth !== prevSizes.containerWidth) {\n containerRef.current.style.setProperty(\n \"--container-width\",\n `${containerWidth}px`\n );\n prevSizes.containerWidth = containerWidth;\n }\n }\n\n if (prefixRef.current) {\n const prefixWidth =\n prefixRef.current.offsetWidth || prevSizes.prefixWidth;\n\n if (prefixWidth !== prevSizes.prefixWidth) {\n containerRef.current?.style.setProperty(\n \"--prefix-width\",\n `${prefixWidth}px`\n );\n prevSizes.prefixWidth = prefixWidth;\n }\n }\n\n if (suffixRef.current) {\n const suffixWidth =\n suffixRef.current.offsetWidth || prevSizes.suffixWidth;\n\n if (suffixWidth !== prevSizes.suffixWidth) {\n containerRef.current?.style.setProperty(\n \"--suffix-width\",\n `${suffixWidth}px`\n );\n prevSizes.suffixWidth = suffixWidth;\n }\n }\n });\n };\n\n updateSizes();\n\n const resizeObserver = new ResizeObserver(updateSizes);\n\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n }\n if (prefixRef.current) {\n resizeObserver.observe(prefixRef.current);\n }\n if (suffixRef.current) {\n resizeObserver.observe(suffixRef.current);\n }\n\n return () => {\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n }\n resizeObserver.disconnect();\n };\n }, [prefix, suffix]);\n\n const inputId = `${name}-input`;\n const errorId = `${name}-error`;\n const descriptionId = `${name}-description`;\n\n return (\n <div ref={containerRef} className=\"proton-Input__container\">\n {description && descriptionPosition === \"top\" && (\n <div\n id={descriptionId}\n className=\"proton-Input__text\"\n aria-live=\"polite\"\n >\n {description}\n </div>\n )}\n <div\n className={csx(\n \"proton-Input__container-inner\",\n prefix && \"proton-Input__has-prefix\",\n suffix && \"proton-Input__has-suffix\"\n )}\n >\n {prefix && (\n <div\n ref={prefixRef}\n className={csx(\n \"proton-Input__descriptor\",\n \"proton-Input__prefix\"\n )}\n >\n {prefix}\n </div>\n )}\n\n <input\n id={inputId}\n name={name}\n type={type}\n value={value}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n }}\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n switch (e.key) {\n case \"Enter\":\n if (onSubmit) {\n e.preventDefault();\n onSubmit(e);\n }\n break;\n case \"Escape\":\n if (onClear) {\n e.preventDefault();\n onClear();\n }\n break;\n }\n }}\n onCopy={async () =>\n await copyTextToClipboard(inputRef.current?.value || \"\")\n }\n disabled={isDisabled}\n readOnly={isReadOnly}\n required={isRequired}\n autoFocus={autoFocus}\n autoComplete={autoComplete ? \"on\" : \"off\"}\n placeholder={label ? undefined : placeholder}\n aria-label={label || name}\n aria-invalid={Boolean(error)}\n aria-errormessage={typeof error === \"string\" ? error : errorId}\n aria-required={isRequired}\n aria-readonly={isReadOnly}\n aria-describedby={\n error ? errorId : description ? descriptionId : undefined\n }\n aria-disabled={isDisabled}\n data-testid={testId}\n ref={setInputRef}\n className={csx(\n \"proton-Input\",\n error && \"proton-Input--error\",\n label && \"proton-Input__label-top\",\n className\n )}\n />\n\n <label\n htmlFor={inputId}\n className={csx(\n \"proton-Input__label\",\n value && \"proton-Input__label--filled\"\n )}\n >\n {label}\n {isRequired && <span aria-hidden=\"true\"> *</span>}\n </label>\n\n {suffix && (\n <div\n ref={suffixRef}\n className={csx(\n \"proton-Input__descriptor\",\n \"proton-Input__suffix\"\n )}\n >\n {suffix}\n </div>\n )}\n </div>\n\n {error ? (\n <div\n role=\"alert\"\n className={csx(\"proton-Input__error\", \"proton-Input__text\")}\n id={errorId}\n >\n {error}\n </div>\n ) : description && descriptionPosition === \"bottom\" ? (\n <div\n id={descriptionId}\n className=\"proton-Input__text\"\n aria-live=\"polite\"\n >\n {description}\n </div>\n ) : null}\n </div>\n );\n }\n);\n\nInput.displayName = \"ProtonUIInput\";\n"],"names":["Input","forwardRef","prefix","suffix","description","descriptionPosition","isDisabled","error","onChange","label","name","placeholder","type","value","autoFocus","autoComplete","isRequired","isReadOnly","onSubmit","onClear","testId","forwardedRef","inputRef","useRef","prefixRef","suffixRef","containerRef","className","useTheme","setInputRef","useMergedRef","useEffect","prevSizes","rafId","updateSizes","containerWidth","prefixWidth","_a","suffixWidth","_b","resizeObserver","inputId","errorId","descriptionId","jsxs","jsx","csx","e","copyTextToClipboard"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../../../node_modules/react/jsx-runtime.cjs.js"),c=require("react"),x=require("../../../utils/copy.cjs.js"),a=require("../BaseInput/Input.cjs.js");;/* empty css */const p=require("../../../utils/string.cjs.js"),y=require("../../Icon/IconComponents/Copy.cjs.js");function C({name:t,value:e,isDisabled:s,onError:u,onSuccess:n}){const[i,r]=c.useState(!1);return o.jsxRuntimeExports.jsx(a.Input,{name:t,value:e,isDisabled:s,suffix:o.jsxRuntimeExports.jsx(l,{isCopied:i,onClick:async()=>{await x.copyTextToClipboard(e,u)&&(r(!0),n==null||n(),setTimeout(()=>r(!1),5e3))}})})}const l=({isCopied:t,onClick:e})=>o.jsxRuntimeExports.jsxs("button",{"data-testid":"COPY_BUTTON",className:p.csx("proton-CopyInput-button",t&&"proton-CopyInput-button--copied"),onClick:e,type:"button","aria-label":t?"Copied":"Copy to clipboard",children:[o.jsxRuntimeExports.jsx(y.Copy,{size:12}),o.jsxRuntimeExports.jsx("span",{className:p.csx("proton-CopyInput-button-text",t&&"proton-CopyInput-button-text--copied"),children:t?"Copied!":"Copy"})]});exports.CopyInput=C;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../../../node_modules/react/jsx-runtime.cjs.js"),c=require("react"),x=require("../../../utils/copy.cjs.js"),a=require("../BaseInput/Input.cjs.js");;/* empty css */const y=require("../../Icon/IconComponents/Copy.cjs.js"),p=require("../../../utils/string.cjs.js");function C({name:t,value:e,isDisabled:s,onError:u,onSuccess:n}){const[i,r]=c.useState(!1);return o.jsxRuntimeExports.jsx(a.Input,{name:t,value:e,isDisabled:s,suffix:o.jsxRuntimeExports.jsx(l,{isCopied:i,onClick:async()=>{await x.copyTextToClipboard(e,u)&&(r(!0),n==null||n(),setTimeout(()=>r(!1),5e3))}})})}const l=({isCopied:t,onClick:e})=>o.jsxRuntimeExports.jsxs("button",{"data-testid":"COPY_BUTTON",className:p.csx("proton-CopyInput-button",t&&"proton-CopyInput-button--copied"),onClick:e,type:"button","aria-label":t?"Copied":"Copy to clipboard",children:[o.jsxRuntimeExports.jsx(y.Copy,{size:12}),o.jsxRuntimeExports.jsx("span",{className:p.csx("proton-CopyInput-button-text",t&&"proton-CopyInput-button-text--copied"),children:t?"Copied!":"Copy"})]});exports.CopyInput=C;
2
2
  //# sourceMappingURL=CopyInput.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CopyInput.cjs.js","sources":["../../../../src/components/Input/CopyInput/CopyInput.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { csx } from \"../../../utils\";\nimport { copyTextToClipboard } from \"../../../utils/copy\";\nimport { Copy as CopyIcon } from \"../../Icon\";\nimport { Input } from \"../BaseInput/Input\";\nimport \"./CopyInput.css\";\n\nexport interface CopyInputProps {\n /** The name of the input field */\n name: string;\n\n /** The value to display in the input and copy to clipboard */\n value: string;\n\n /** Whether the input is disabled */\n isDisabled?: boolean;\n\n /** Optional callback when copy fails, receives the error object */\n onError?: (error: Error) => void;\n\n /** Optional callback when copy succeeds */\n onSuccess?: () => void;\n}\n\n/**\n * Input with a button to copy value to the clipboard.\n *\n * API:\n * - {@link CopyInputProps}\n */\nexport function CopyInput({\n name,\n value,\n isDisabled,\n onError,\n onSuccess,\n}: CopyInputProps) {\n const [isCopied, setCopied] = useState(false);\n\n return (\n <Input\n name={name}\n value={value}\n isDisabled={isDisabled}\n suffix={\n <CopyButton\n isCopied={isCopied}\n onClick={async () => {\n const copySuccess = await copyTextToClipboard(value, onError);\n if (!copySuccess) return;\n\n setCopied(true);\n onSuccess?.();\n setTimeout(() => setCopied(false), 5000);\n }}\n />\n }\n />\n );\n}\n\nconst CopyButton = ({ isCopied, onClick }) => {\n return (\n <button\n data-testid=\"COPY_BUTTON\"\n className={csx(\n \"proton-CopyInput-button\",\n isCopied && \"proton-CopyInput-button--copied\",\n )}\n onClick={onClick}\n type=\"button\"\n aria-label={isCopied ? \"Copied\" : \"Copy to clipboard\"}\n >\n <CopyIcon size={12} />\n <span\n className={csx(\n \"proton-CopyInput-button-text\",\n isCopied && \"proton-CopyInput-button-text--copied\",\n )}\n >\n {isCopied ? \"Copied!\" : \"Copy\"}\n </span>\n </button>\n );\n};\n"],"names":["CopyInput","name","value","isDisabled","onError","onSuccess","isCopied","setCopied","useState","jsx","Input","CopyButton","copyTextToClipboard","onClick","jsxs","csx","CopyIcon"],"mappings":"yXA8BO,SAASA,EAAU,CACxB,KAAAC,EACA,MAAAC,EACA,WAAAC,EACA,QAAAC,EACA,UAAAC,CACF,EAAmB,CACjB,KAAM,CAACC,EAAUC,CAAS,EAAIC,WAAS,EAAK,EAG1C,OAAAC,EAAA,kBAAA,IAACC,EAAA,MAAA,CACC,KAAAT,EACA,MAAAC,EACA,WAAAC,EACA,OACEM,EAAA,kBAAA,IAACE,EAAA,CACC,SAAAL,EACA,QAAS,SAAY,CACC,MAAMM,EAAAA,oBAAoBV,EAAOE,CAAO,IAG5DG,EAAU,EAAI,EACFF,GAAA,MAAAA,IACZ,WAAW,IAAME,EAAU,EAAK,EAAG,GAAI,EACzC,CAAA,CACF,CAAA,CAAA,CAIR,CAEA,MAAMI,EAAa,CAAC,CAAE,SAAAL,EAAU,QAAAO,KAE5BC,EAAA,kBAAA,KAAC,SAAA,CACC,cAAY,cACZ,UAAWC,EAAA,IACT,0BACAT,GAAY,iCACd,EACA,QAAAO,EACA,KAAK,SACL,aAAYP,EAAW,SAAW,oBAElC,SAAA,CAACG,EAAAA,kBAAAA,IAAAO,EAAA,KAAA,CAAS,KAAM,EAAI,CAAA,EACpBP,EAAA,kBAAA,IAAC,OAAA,CACC,UAAWM,EAAA,IACT,+BACAT,GAAY,sCACd,EAEC,WAAW,UAAY,MAAA,CAC1B,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"CopyInput.cjs.js","sources":["../../../../src/components/Input/CopyInput/CopyInput.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { csx } from \"../../../utils\";\nimport { copyTextToClipboard } from \"../../../utils/copy\";\nimport { Copy as CopyIcon } from \"../../Icon\";\nimport { Input } from \"../BaseInput/Input\";\nimport \"./CopyInput.css\";\n\nexport interface CopyInputProps {\n /** The name of the input field */\n name: string;\n\n /** The value to display in the input and copy to clipboard */\n value: string;\n\n /** Whether the input is disabled */\n isDisabled?: boolean;\n\n /** Optional callback when copy fails, receives the error object */\n onError?: (error: Error) => void;\n\n /** Optional callback when copy succeeds */\n onSuccess?: () => void;\n}\n\n/**\n * Input with a button to copy value to the clipboard.\n *\n * API:\n * - {@link CopyInputProps}\n */\nexport function CopyInput({\n name,\n value,\n isDisabled,\n onError,\n onSuccess,\n}: CopyInputProps) {\n const [isCopied, setCopied] = useState(false);\n\n return (\n <Input\n name={name}\n value={value}\n isDisabled={isDisabled}\n suffix={\n <CopyButton\n isCopied={isCopied}\n onClick={async () => {\n const copySuccess = await copyTextToClipboard(value, onError);\n if (!copySuccess) return;\n\n setCopied(true);\n onSuccess?.();\n setTimeout(() => setCopied(false), 5000);\n }}\n />\n }\n />\n );\n}\n\nconst CopyButton = ({\n isCopied,\n onClick,\n}: {\n isCopied: boolean;\n onClick: () => void | Promise<void>;\n}) => {\n return (\n <button\n data-testid=\"COPY_BUTTON\"\n className={csx(\n \"proton-CopyInput-button\",\n isCopied && \"proton-CopyInput-button--copied\",\n )}\n onClick={onClick}\n type=\"button\"\n aria-label={isCopied ? \"Copied\" : \"Copy to clipboard\"}\n >\n <CopyIcon size={12} />\n <span\n className={csx(\n \"proton-CopyInput-button-text\",\n isCopied && \"proton-CopyInput-button-text--copied\",\n )}\n >\n {isCopied ? \"Copied!\" : \"Copy\"}\n </span>\n </button>\n );\n};\n"],"names":["CopyInput","name","value","isDisabled","onError","onSuccess","isCopied","setCopied","useState","jsx","Input","CopyButton","copyTextToClipboard","onClick","jsxs","csx","CopyIcon"],"mappings":"yXA8BO,SAASA,EAAU,CACxB,KAAAC,EACA,MAAAC,EACA,WAAAC,EACA,QAAAC,EACA,UAAAC,CACF,EAAmB,CACjB,KAAM,CAACC,EAAUC,CAAS,EAAIC,EAAAA,SAAS,EAAK,EAE5C,OACEC,EAAAA,kBAAAA,IAACC,EAAAA,MAAA,CACC,KAAAT,EACA,MAAAC,EACA,WAAAC,EACA,OACEM,EAAAA,kBAAAA,IAACE,EAAA,CACC,SAAAL,EACA,QAAS,SAAY,CACC,MAAMM,sBAAoBV,EAAOE,CAAO,IAG5DG,EAAU,EAAI,EACdF,GAAA,MAAAA,IACA,WAAW,IAAME,EAAU,EAAK,EAAG,GAAI,EACzC,CAAA,CAAA,CACF,CAAA,CAIR,CAEA,MAAMI,EAAa,CAAC,CAClB,SAAAL,EACA,QAAAO,CACF,IAKIC,EAAAA,kBAAAA,KAAC,SAAA,CACC,cAAY,cACZ,UAAWC,EAAAA,IACT,0BACAT,GAAY,iCAAA,EAEd,QAAAO,EACA,KAAK,SACL,aAAYP,EAAW,SAAW,oBAElC,SAAA,CAAAG,EAAAA,kBAAAA,IAACO,EAAAA,KAAA,CAAS,KAAM,EAAA,CAAI,EACpBP,EAAAA,kBAAAA,IAAC,OAAA,CACC,UAAWM,EAAAA,IACT,+BACAT,GAAY,sCAAA,EAGb,WAAW,UAAY,MAAA,CAAA,CAC1B,CAAA,CAAA"}
@@ -3,8 +3,8 @@ import { useState as a } from "react";
3
3
  import { copyTextToClipboard as m } from "../../../utils/copy.es.js";
4
4
  import { Input as y } from "../BaseInput/Input.es.js";
5
5
  /* empty css */
6
- import { csx as e } from "../../../utils/string.es.js";
7
6
  import { Copy as c } from "../../Icon/IconComponents/Copy.es.js";
7
+ import { csx as e } from "../../../utils/string.es.js";
8
8
  function N({
9
9
  name: t,
10
10
  value: p,
@@ -31,7 +31,10 @@ function N({
31
31
  }
32
32
  );
33
33
  }
34
- const x = ({ isCopied: t, onClick: p }) => /* @__PURE__ */ o.jsxs(
34
+ const x = ({
35
+ isCopied: t,
36
+ onClick: p
37
+ }) => /* @__PURE__ */ o.jsxs(
35
38
  "button",
36
39
  {
37
40
  "data-testid": "COPY_BUTTON",
@@ -1 +1 @@
1
- {"version":3,"file":"CopyInput.es.js","sources":["../../../../src/components/Input/CopyInput/CopyInput.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { csx } from \"../../../utils\";\nimport { copyTextToClipboard } from \"../../../utils/copy\";\nimport { Copy as CopyIcon } from \"../../Icon\";\nimport { Input } from \"../BaseInput/Input\";\nimport \"./CopyInput.css\";\n\nexport interface CopyInputProps {\n /** The name of the input field */\n name: string;\n\n /** The value to display in the input and copy to clipboard */\n value: string;\n\n /** Whether the input is disabled */\n isDisabled?: boolean;\n\n /** Optional callback when copy fails, receives the error object */\n onError?: (error: Error) => void;\n\n /** Optional callback when copy succeeds */\n onSuccess?: () => void;\n}\n\n/**\n * Input with a button to copy value to the clipboard.\n *\n * API:\n * - {@link CopyInputProps}\n */\nexport function CopyInput({\n name,\n value,\n isDisabled,\n onError,\n onSuccess,\n}: CopyInputProps) {\n const [isCopied, setCopied] = useState(false);\n\n return (\n <Input\n name={name}\n value={value}\n isDisabled={isDisabled}\n suffix={\n <CopyButton\n isCopied={isCopied}\n onClick={async () => {\n const copySuccess = await copyTextToClipboard(value, onError);\n if (!copySuccess) return;\n\n setCopied(true);\n onSuccess?.();\n setTimeout(() => setCopied(false), 5000);\n }}\n />\n }\n />\n );\n}\n\nconst CopyButton = ({ isCopied, onClick }) => {\n return (\n <button\n data-testid=\"COPY_BUTTON\"\n className={csx(\n \"proton-CopyInput-button\",\n isCopied && \"proton-CopyInput-button--copied\",\n )}\n onClick={onClick}\n type=\"button\"\n aria-label={isCopied ? \"Copied\" : \"Copy to clipboard\"}\n >\n <CopyIcon size={12} />\n <span\n className={csx(\n \"proton-CopyInput-button-text\",\n isCopied && \"proton-CopyInput-button-text--copied\",\n )}\n >\n {isCopied ? \"Copied!\" : \"Copy\"}\n </span>\n </button>\n );\n};\n"],"names":["CopyInput","name","value","isDisabled","onError","onSuccess","isCopied","setCopied","useState","jsx","Input","CopyButton","copyTextToClipboard","onClick","jsxs","csx","CopyIcon"],"mappings":";;;;;;;AA8BO,SAASA,EAAU;AAAA,EACxB,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AACF,GAAmB;AACjB,QAAM,CAACC,GAAUC,CAAS,IAAIC,EAAS,EAAK;AAG1C,SAAAC,gBAAAA,EAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAT;AAAA,MACA,OAAAC;AAAA,MACA,YAAAC;AAAA,MACA,QACEM,gBAAAA,EAAA;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,UAAAL;AAAA,UACA,SAAS,YAAY;AAEnB,YADoB,MAAMM,EAAoBV,GAAOE,CAAO,MAG5DG,EAAU,EAAI,GACFF,KAAA,QAAAA,KACZ,WAAW,MAAME,EAAU,EAAK,GAAG,GAAI;AAAA,UACzC;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAIR;AAEA,MAAMI,IAAa,CAAC,EAAE,UAAAL,GAAU,SAAAO,QAE5BC,gBAAAA,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAY;AAAA,IACZ,WAAWC;AAAA,MACT;AAAA,MACAT,KAAY;AAAA,IACd;AAAA,IACA,SAAAO;AAAA,IACA,MAAK;AAAA,IACL,cAAYP,IAAW,WAAW;AAAA,IAElC,UAAA;AAAA,MAACG,gBAAAA,EAAAA,IAAAO,GAAA,EAAS,MAAM,GAAI,CAAA;AAAA,MACpBP,gBAAAA,EAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWM;AAAA,YACT;AAAA,YACAT,KAAY;AAAA,UACd;AAAA,UAEC,cAAW,YAAY;AAAA,QAAA;AAAA,MAC1B;AAAA,IAAA;AAAA,EAAA;AAAA;"}
1
+ {"version":3,"file":"CopyInput.es.js","sources":["../../../../src/components/Input/CopyInput/CopyInput.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { csx } from \"../../../utils\";\nimport { copyTextToClipboard } from \"../../../utils/copy\";\nimport { Copy as CopyIcon } from \"../../Icon\";\nimport { Input } from \"../BaseInput/Input\";\nimport \"./CopyInput.css\";\n\nexport interface CopyInputProps {\n /** The name of the input field */\n name: string;\n\n /** The value to display in the input and copy to clipboard */\n value: string;\n\n /** Whether the input is disabled */\n isDisabled?: boolean;\n\n /** Optional callback when copy fails, receives the error object */\n onError?: (error: Error) => void;\n\n /** Optional callback when copy succeeds */\n onSuccess?: () => void;\n}\n\n/**\n * Input with a button to copy value to the clipboard.\n *\n * API:\n * - {@link CopyInputProps}\n */\nexport function CopyInput({\n name,\n value,\n isDisabled,\n onError,\n onSuccess,\n}: CopyInputProps) {\n const [isCopied, setCopied] = useState(false);\n\n return (\n <Input\n name={name}\n value={value}\n isDisabled={isDisabled}\n suffix={\n <CopyButton\n isCopied={isCopied}\n onClick={async () => {\n const copySuccess = await copyTextToClipboard(value, onError);\n if (!copySuccess) return;\n\n setCopied(true);\n onSuccess?.();\n setTimeout(() => setCopied(false), 5000);\n }}\n />\n }\n />\n );\n}\n\nconst CopyButton = ({\n isCopied,\n onClick,\n}: {\n isCopied: boolean;\n onClick: () => void | Promise<void>;\n}) => {\n return (\n <button\n data-testid=\"COPY_BUTTON\"\n className={csx(\n \"proton-CopyInput-button\",\n isCopied && \"proton-CopyInput-button--copied\",\n )}\n onClick={onClick}\n type=\"button\"\n aria-label={isCopied ? \"Copied\" : \"Copy to clipboard\"}\n >\n <CopyIcon size={12} />\n <span\n className={csx(\n \"proton-CopyInput-button-text\",\n isCopied && \"proton-CopyInput-button-text--copied\",\n )}\n >\n {isCopied ? \"Copied!\" : \"Copy\"}\n </span>\n </button>\n );\n};\n"],"names":["CopyInput","name","value","isDisabled","onError","onSuccess","isCopied","setCopied","useState","jsx","Input","CopyButton","copyTextToClipboard","onClick","jsxs","csx","CopyIcon"],"mappings":";;;;;;;AA8BO,SAASA,EAAU;AAAA,EACxB,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AACF,GAAmB;AACjB,QAAM,CAACC,GAAUC,CAAS,IAAIC,EAAS,EAAK;AAE5C,SACEC,gBAAAA,EAAAA;AAAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAT;AAAA,MACA,OAAAC;AAAA,MACA,YAAAC;AAAA,MACA,QACEM,gBAAAA,EAAAA;AAAAA,QAACE;AAAA,QAAA;AAAA,UACC,UAAAL;AAAA,UACA,SAAS,YAAY;AAEnB,YADoB,MAAMM,EAAoBV,GAAOE,CAAO,MAG5DG,EAAU,EAAI,GACdF,KAAA,QAAAA,KACA,WAAW,MAAME,EAAU,EAAK,GAAG,GAAI;AAAA,UACzC;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAIR;AAEA,MAAMI,IAAa,CAAC;AAAA,EAClB,UAAAL;AAAA,EACA,SAAAO;AACF,MAKIC,gBAAAA,EAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAY;AAAA,IACZ,WAAWC;AAAA,MACT;AAAA,MACAT,KAAY;AAAA,IAAA;AAAA,IAEd,SAAAO;AAAA,IACA,MAAK;AAAA,IACL,cAAYP,IAAW,WAAW;AAAA,IAElC,UAAA;AAAA,MAAAG,gBAAAA,EAAAA,IAACO,GAAA,EAAS,MAAM,GAAA,CAAI;AAAA,MACpBP,gBAAAA,EAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWM;AAAA,YACT;AAAA,YACAT,KAAY;AAAA,UAAA;AAAA,UAGb,cAAW,YAAY;AAAA,QAAA;AAAA,MAAA;AAAA,IAC1B;AAAA,EAAA;AAAA;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("../../../node_modules/react/jsx-runtime.cjs.js"),o=require("react");;/* empty css */const q=require("../../../utils/string.cjs.js"),R=s=>/^[0-9]+$/.test(s),T=(s,u)=>{const d=s.replace(/\D/g,"").split("").slice(0,u);return Array.from({length:u},(v,p)=>d[p]||"")},y=o.forwardRef(({length:s=6,isError:u=!1,errorMessage:d,isDisabled:v=!1,onChange:p,onComplete:j,showSeparator:$=!0,value:f,defaultValue:E,"data-testid":O="otp-input"},I)=>{s=s>0?s:0;const[i,_]=o.useState(()=>T(f??E??"",s)),n=o.useRef([]);n.current=n.current.slice(0,s),o.useEffect(()=>{f!==void 0&&_(T(f,s))},[f,s]),o.useEffect(()=>{var a;(a=n.current[0])==null||a.focus()},[]);const l=a=>{var t;(t=n.current[a])==null||t.focus()},m=a=>{_(a);const t=a.join("");p==null||p(t),t.length===s&&(j==null||j(t))},b=(a,t)=>{const e=a.target.value;if(R(e)){const r=[...i];r[t]=e,m(r),t<s-1&&l(t+1)}else if(e===""&&i[t]){const r=[...i];r[t]="",m(r),t>0&&l(t-1)}else a.target.value=i[t]||""},g=(a,t)=>{if(a.key==="Backspace"&&!i[t]&&t>0){const e=t-1,r=[...i];r[e]="",m(r),l(e)}},D=(a,t)=>{a.preventDefault();const e=a.clipboardData.getData("text").trim();if(!R(e))return;const r=s-t,P=e.slice(0,r).split(""),N=[...i.slice(0,t),...P,...i.slice(t+P.length)];m(N),setTimeout(()=>{l(Math.min(t+P.length,s-1))},0)};return c.jsxRuntimeExports.jsxs("div",{ref:I,role:"group","aria-label":"One-time password","data-testid":O,children:[u&&d&&c.jsxRuntimeExports.jsx("div",{className:"proton-OTPInput__error",children:d}),c.jsxRuntimeExports.jsx("div",{className:"proton-OTPInput__digits",children:i.map((a,t)=>c.jsxRuntimeExports.jsxs(o.Fragment,{children:[$&&s%2===0&&t===s/2&&c.jsxRuntimeExports.jsx("span",{className:"proton-OTPInput__separator","aria-hidden":"true",children:"-"}),c.jsxRuntimeExports.jsx("input",{ref:e=>{n.current[t]=e},id:`digit-${t+1}`,"data-testid":`${O}-digit-${t+1}`,type:"text",inputMode:"numeric",pattern:"[0-9]*",autoComplete:"one-time-code",maxLength:1,value:a,disabled:v,onChange:e=>b(e,t),onKeyUp:e=>g(e,t),onPaste:e=>D(e,t),className:q.csx("proton-OTPInput__digit",u&&"proton-OTPInput__digit--error"),"aria-label":`Digit ${t+1} of ${s}`,"aria-invalid":u})]},t))})]})});y.displayName="ProtonUIOTPInput";exports.OTPInput=y;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("../../../node_modules/react/jsx-runtime.cjs.js"),o=require("react");;/* empty css */const N=require("../../../utils/string.cjs.js"),R=s=>/^[0-9]+$/.test(s),T=(s,u)=>{const d=s.replace(/\D/g,"").split("").slice(0,u);return Array.from({length:u},(v,p)=>d[p]||"")},y=o.forwardRef(({length:s=6,isError:u=!1,errorMessage:d,isDisabled:v=!1,onChange:p,onComplete:j,showSeparator:$=!0,value:f,defaultValue:E,"data-testid":O="otp-input"},I)=>{s=s>0?s:0;const[i,_]=o.useState(()=>T(f??E??"",s)),n=o.useRef([]);n.current=n.current.slice(0,s),o.useEffect(()=>{f!==void 0&&_(T(f,s))},[f,s]),o.useEffect(()=>{var e;(e=n.current[0])==null||e.focus()},[]);const l=e=>{var t;(t=n.current[e])==null||t.focus()},m=e=>{_(e);const t=e.join("");p==null||p(t),t.length===s&&(j==null||j(t))},b=(e,t)=>{const a=e.target.value;if(R(a)){const r=[...i];r[t]=a,m(r),t<s-1&&l(t+1)}else if(a===""&&i[t]){const r=[...i];r[t]="",m(r),t>0&&l(t-1)}else e.target.value=i[t]||""},g=(e,t)=>{if(e.key==="Backspace"&&!i[t]&&t>0){const a=t-1,r=[...i];r[a]="",m(r),l(a)}},q=(e,t)=>{e.preventDefault();const a=e.clipboardData.getData("text").trim();if(!R(a))return;const r=s-t,P=a.slice(0,r).split(""),D=[...i.slice(0,t),...P,...i.slice(t+P.length)];m(D),setTimeout(()=>{l(Math.min(t+P.length,s-1))},0)};return c.jsxRuntimeExports.jsxs("div",{ref:I,role:"group","aria-label":"One-time password","data-testid":O,children:[u&&d&&c.jsxRuntimeExports.jsx("div",{className:"proton-OTPInput__error",children:d}),c.jsxRuntimeExports.jsx("div",{className:"proton-OTPInput__digits",children:i.map((e,t)=>c.jsxRuntimeExports.jsxs(o.Fragment,{children:[$&&s%2===0&&t===s/2&&c.jsxRuntimeExports.jsx("span",{className:"proton-OTPInput__separator","aria-hidden":"true",children:"-"}),c.jsxRuntimeExports.jsx("input",{ref:a=>{n.current[t]=a},id:`digit-${t+1}`,"data-testid":`${O}-digit-${t+1}`,type:"text",inputMode:"numeric",pattern:"[0-9]*",autoComplete:"one-time-code",maxLength:1,value:e,disabled:v,onChange:a=>b(a,t),onKeyUp:a=>g(a,t),onPaste:a=>q(a,t),className:N.csx("proton-OTPInput__digit",u&&"proton-OTPInput__digit--error"),"aria-label":`Digit ${t+1} of ${s}`,"aria-invalid":u})]},t))})]})});y.displayName="ProtonUIOTPInput";exports.OTPInput=y;
2
2
  //# sourceMappingURL=OTPInput.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OTPInput.cjs.js","sources":["../../../../src/components/Input/OTPInput/OTPInput.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, useEffect, useRef, useState, Fragment } from \"react\";\nimport type { ClipboardEvent, KeyboardEvent, ChangeEvent } from \"react\";\n\nimport { csx } from \"../../../utils\";\nimport \"./OTPInput.css\";\n\nconst isValidEntry = (key: string) => /^[0-9]+$/.test(key);\n\nconst stringToValues = (s: string, length: number): string[] => {\n const digits = s.replace(/\\D/g, \"\").split(\"\").slice(0, length);\n return Array.from({ length }, (_, i) => digits[i] || \"\");\n};\n\nexport interface OTPInputProps {\n /** Test ID for digit inputs */\n \"data-testid\"?: string;\n /** Default value when uncontrolled. */\n defaultValue?: string;\n /** Whether the input is disabled. */\n isDisabled?: boolean;\n /** Whether the input is in an error state. */\n isError?: boolean;\n /** Error message to display when the input is in an error state. */\n errorMessage?: string;\n /** Number of digit inputs to render.\n * @default 6\n */\n length?: number;\n /** Called when the value changes. */\n onChange?: (value: string) => void;\n /** Called when all digits are filled. */\n onComplete?: (value: string) => void;\n /** Whether to show a separator dash in the middle (when length is even).\n * @default true\n */\n showSeparator?: boolean;\n /** Current value (controlled mode). */\n value?: string;\n}\n\n/**\n * Numeric OTP number input with individual digit cells. Supports paste, keyboard navigation, and auto-focus.\n *\n * API:\n * - {@link OTPInputProps}\n */\nexport const OTPInput = forwardRef<HTMLDivElement, OTPInputProps>(\n (\n {\n length = 6,\n isError = false,\n errorMessage,\n isDisabled = false,\n onChange,\n onComplete,\n showSeparator = true,\n value: controlledValue,\n defaultValue,\n \"data-testid\": dataTestId = \"otp-input\",\n },\n ref,\n ) => {\n length = length > 0 ? length : 0;\n const [values, setValues] = useState<string[]>(() =>\n stringToValues(controlledValue ?? defaultValue ?? \"\", length),\n );\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n inputRefs.current = inputRefs.current.slice(0, length);\n\n useEffect(() => {\n if (controlledValue !== undefined) {\n setValues(stringToValues(controlledValue, length));\n }\n }, [controlledValue, length]);\n\n useEffect(() => {\n inputRefs.current[0]?.focus();\n }, []);\n\n const focusOnInput = (index: number) => {\n inputRefs.current[index]?.focus();\n };\n\n const updateValues = (next: string[]) => {\n setValues(next);\n const joined = next.join(\"\");\n onChange?.(joined);\n if (joined.length === length) {\n onComplete?.(joined);\n }\n };\n\n const handleChange = (\n event: ChangeEvent<HTMLInputElement>,\n index: number,\n ) => {\n const val = event.target.value;\n\n if (isValidEntry(val)) {\n const updated = [...values];\n updated[index] = val;\n updateValues(updated);\n if (index < length - 1) focusOnInput(index + 1);\n } else if (val === \"\" && values[index]) {\n const updated = [...values];\n updated[index] = \"\";\n updateValues(updated);\n if (index > 0) focusOnInput(index - 1);\n } else {\n event.target.value = values[index] || \"\";\n }\n };\n\n const handleKeyUp = (\n event: KeyboardEvent<HTMLInputElement>,\n index: number,\n ) => {\n if (event.key === \"Backspace\" && !values[index] && index > 0) {\n const prevIndex = index - 1;\n const updated = [...values];\n updated[prevIndex] = \"\";\n updateValues(updated);\n focusOnInput(prevIndex);\n }\n };\n\n const handlePaste = (\n event: ClipboardEvent<HTMLInputElement>,\n currentIndex: number,\n ) => {\n event.preventDefault();\n const pasted = event.clipboardData.getData(\"text\").trim();\n if (!isValidEntry(pasted)) return;\n\n const remaining = length - currentIndex;\n const chars = pasted.slice(0, remaining).split(\"\");\n const updated = [\n ...values.slice(0, currentIndex),\n ...chars,\n ...values.slice(currentIndex + chars.length),\n ];\n updateValues(updated);\n setTimeout(() => {\n focusOnInput(Math.min(currentIndex + chars.length, length - 1));\n }, 0);\n };\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label=\"One-time password\"\n data-testid={dataTestId}\n >\n {isError && errorMessage && (\n <div className=\"proton-OTPInput__error\">{errorMessage}</div>\n )}\n\n <div className=\"proton-OTPInput__digits\">\n {values.map((value, index) => (\n <Fragment key={index}>\n {showSeparator && length % 2 === 0 && index === length / 2 && (\n <span className=\"proton-OTPInput__separator\" aria-hidden=\"true\">\n -\n </span>\n )}\n <input\n ref={(el) => {\n inputRefs.current[index] = el;\n }}\n id={`digit-${index + 1}`}\n data-testid={`${dataTestId}-digit-${index + 1}`}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n autoComplete=\"one-time-code\"\n maxLength={1}\n value={value}\n disabled={isDisabled}\n onChange={(e) => handleChange(e, index)}\n onKeyUp={(e) => handleKeyUp(e, index)}\n onPaste={(e) => handlePaste(e, index)}\n className={csx(\n \"proton-OTPInput__digit\",\n isError && \"proton-OTPInput__digit--error\",\n )}\n aria-label={`Digit ${index + 1} of ${length}`}\n aria-invalid={isError}\n />\n </Fragment>\n ))}\n </div>\n </div>\n );\n },\n);\n\nOTPInput.displayName = \"ProtonUIOTPInput\";\n"],"names":["isValidEntry","key","stringToValues","length","digits","_","i","OTPInput","forwardRef","isError","errorMessage","isDisabled","onChange","onComplete","showSeparator","controlledValue","defaultValue","dataTestId","ref","values","setValues","useState","inputRefs","useRef","useEffect","_a","focusOnInput","index","updateValues","next","joined","handleChange","event","val","updated","handleKeyUp","prevIndex","handlePaste","currentIndex","pasted","remaining","chars","jsxs","jsx","value","Fragment","el","csx"],"mappings":"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"}
1
+ {"version":3,"file":"OTPInput.cjs.js","sources":["../../../../src/components/Input/OTPInput/OTPInput.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, useEffect, useRef, useState, Fragment } from \"react\";\nimport type { ClipboardEvent, KeyboardEvent, ChangeEvent } from \"react\";\n\nimport { csx } from \"../../../utils\";\nimport \"./OTPInput.css\";\n\nconst isValidEntry = (key: string) => /^[0-9]+$/.test(key);\n\nconst stringToValues = (s: string, length: number): string[] => {\n const digits = s.replace(/\\D/g, \"\").split(\"\").slice(0, length);\n return Array.from({ length }, (_, i) => digits[i] || \"\");\n};\n\nexport interface OTPInputProps {\n /** Test ID for digit inputs */\n \"data-testid\"?: string;\n /** Default value when uncontrolled. */\n defaultValue?: string;\n /** Whether the input is disabled. */\n isDisabled?: boolean;\n /** Whether the input is in an error state. */\n isError?: boolean;\n /** Error message to display when the input is in an error state. */\n errorMessage?: string;\n /** Number of digit inputs to render.\n * @default 6\n */\n length?: number;\n /** Called when the value changes. */\n onChange?: (value: string) => void;\n /** Called when all digits are filled. */\n onComplete?: (value: string) => void;\n /** Whether to show a separator dash in the middle (when length is even).\n * @default true\n */\n showSeparator?: boolean;\n /** Current value (controlled mode). */\n value?: string;\n}\n\n/**\n * Numeric OTP number input with individual digit cells. Supports paste, keyboard navigation, and auto-focus.\n *\n * API:\n * - {@link OTPInputProps}\n */\nexport const OTPInput = forwardRef<HTMLDivElement, OTPInputProps>(\n (\n {\n length = 6,\n isError = false,\n errorMessage,\n isDisabled = false,\n onChange,\n onComplete,\n showSeparator = true,\n value: controlledValue,\n defaultValue,\n \"data-testid\": dataTestId = \"otp-input\",\n },\n ref,\n ) => {\n length = length > 0 ? length : 0;\n const [values, setValues] = useState<string[]>(() =>\n stringToValues(controlledValue ?? defaultValue ?? \"\", length),\n );\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n inputRefs.current = inputRefs.current.slice(0, length);\n\n useEffect(() => {\n if (controlledValue !== undefined) {\n setValues(stringToValues(controlledValue, length));\n }\n }, [controlledValue, length]);\n\n useEffect(() => {\n inputRefs.current[0]?.focus();\n }, []);\n\n const focusOnInput = (index: number) => {\n inputRefs.current[index]?.focus();\n };\n\n const updateValues = (next: string[]) => {\n setValues(next);\n const joined = next.join(\"\");\n onChange?.(joined);\n if (joined.length === length) {\n onComplete?.(joined);\n }\n };\n\n const handleChange = (\n event: ChangeEvent<HTMLInputElement>,\n index: number,\n ) => {\n const val = event.target.value;\n\n if (isValidEntry(val)) {\n const updated = [...values];\n updated[index] = val;\n updateValues(updated);\n if (index < length - 1) focusOnInput(index + 1);\n } else if (val === \"\" && values[index]) {\n const updated = [...values];\n updated[index] = \"\";\n updateValues(updated);\n if (index > 0) focusOnInput(index - 1);\n } else {\n event.target.value = values[index] || \"\";\n }\n };\n\n const handleKeyUp = (\n event: KeyboardEvent<HTMLInputElement>,\n index: number,\n ) => {\n if (event.key === \"Backspace\" && !values[index] && index > 0) {\n const prevIndex = index - 1;\n const updated = [...values];\n updated[prevIndex] = \"\";\n updateValues(updated);\n focusOnInput(prevIndex);\n }\n };\n\n const handlePaste = (\n event: ClipboardEvent<HTMLInputElement>,\n currentIndex: number,\n ) => {\n event.preventDefault();\n const pasted = event.clipboardData.getData(\"text\").trim();\n if (!isValidEntry(pasted)) return;\n\n const remaining = length - currentIndex;\n const chars = pasted.slice(0, remaining).split(\"\");\n const updated = [\n ...values.slice(0, currentIndex),\n ...chars,\n ...values.slice(currentIndex + chars.length),\n ];\n updateValues(updated);\n setTimeout(() => {\n focusOnInput(Math.min(currentIndex + chars.length, length - 1));\n }, 0);\n };\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label=\"One-time password\"\n data-testid={dataTestId}\n >\n {isError && errorMessage && (\n <div className=\"proton-OTPInput__error\">{errorMessage}</div>\n )}\n\n <div className=\"proton-OTPInput__digits\">\n {values.map((value, index) => (\n <Fragment key={index}>\n {showSeparator && length % 2 === 0 && index === length / 2 && (\n <span className=\"proton-OTPInput__separator\" aria-hidden=\"true\">\n -\n </span>\n )}\n <input\n ref={(el) => {\n inputRefs.current[index] = el;\n }}\n id={`digit-${index + 1}`}\n data-testid={`${dataTestId}-digit-${index + 1}`}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n autoComplete=\"one-time-code\"\n maxLength={1}\n value={value}\n disabled={isDisabled}\n onChange={(e) => handleChange(e, index)}\n onKeyUp={(e) => handleKeyUp(e, index)}\n onPaste={(e) => handlePaste(e, index)}\n className={csx(\n \"proton-OTPInput__digit\",\n isError && \"proton-OTPInput__digit--error\",\n )}\n aria-label={`Digit ${index + 1} of ${length}`}\n aria-invalid={isError}\n />\n </Fragment>\n ))}\n </div>\n </div>\n );\n },\n);\n\nOTPInput.displayName = \"ProtonUIOTPInput\";\n"],"names":["isValidEntry","key","stringToValues","length","digits","_","i","OTPInput","forwardRef","isError","errorMessage","isDisabled","onChange","onComplete","showSeparator","controlledValue","defaultValue","dataTestId","ref","values","setValues","useState","inputRefs","useRef","useEffect","_a","focusOnInput","index","updateValues","next","joined","handleChange","event","val","updated","handleKeyUp","prevIndex","handlePaste","currentIndex","pasted","remaining","chars","jsxs","jsx","value","Fragment","el","e","csx"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"OTPInput.es.js","sources":["../../../../src/components/Input/OTPInput/OTPInput.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, useEffect, useRef, useState, Fragment } from \"react\";\nimport type { ClipboardEvent, KeyboardEvent, ChangeEvent } from \"react\";\n\nimport { csx } from \"../../../utils\";\nimport \"./OTPInput.css\";\n\nconst isValidEntry = (key: string) => /^[0-9]+$/.test(key);\n\nconst stringToValues = (s: string, length: number): string[] => {\n const digits = s.replace(/\\D/g, \"\").split(\"\").slice(0, length);\n return Array.from({ length }, (_, i) => digits[i] || \"\");\n};\n\nexport interface OTPInputProps {\n /** Test ID for digit inputs */\n \"data-testid\"?: string;\n /** Default value when uncontrolled. */\n defaultValue?: string;\n /** Whether the input is disabled. */\n isDisabled?: boolean;\n /** Whether the input is in an error state. */\n isError?: boolean;\n /** Error message to display when the input is in an error state. */\n errorMessage?: string;\n /** Number of digit inputs to render.\n * @default 6\n */\n length?: number;\n /** Called when the value changes. */\n onChange?: (value: string) => void;\n /** Called when all digits are filled. */\n onComplete?: (value: string) => void;\n /** Whether to show a separator dash in the middle (when length is even).\n * @default true\n */\n showSeparator?: boolean;\n /** Current value (controlled mode). */\n value?: string;\n}\n\n/**\n * Numeric OTP number input with individual digit cells. Supports paste, keyboard navigation, and auto-focus.\n *\n * API:\n * - {@link OTPInputProps}\n */\nexport const OTPInput = forwardRef<HTMLDivElement, OTPInputProps>(\n (\n {\n length = 6,\n isError = false,\n errorMessage,\n isDisabled = false,\n onChange,\n onComplete,\n showSeparator = true,\n value: controlledValue,\n defaultValue,\n \"data-testid\": dataTestId = \"otp-input\",\n },\n ref,\n ) => {\n length = length > 0 ? length : 0;\n const [values, setValues] = useState<string[]>(() =>\n stringToValues(controlledValue ?? defaultValue ?? \"\", length),\n );\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n inputRefs.current = inputRefs.current.slice(0, length);\n\n useEffect(() => {\n if (controlledValue !== undefined) {\n setValues(stringToValues(controlledValue, length));\n }\n }, [controlledValue, length]);\n\n useEffect(() => {\n inputRefs.current[0]?.focus();\n }, []);\n\n const focusOnInput = (index: number) => {\n inputRefs.current[index]?.focus();\n };\n\n const updateValues = (next: string[]) => {\n setValues(next);\n const joined = next.join(\"\");\n onChange?.(joined);\n if (joined.length === length) {\n onComplete?.(joined);\n }\n };\n\n const handleChange = (\n event: ChangeEvent<HTMLInputElement>,\n index: number,\n ) => {\n const val = event.target.value;\n\n if (isValidEntry(val)) {\n const updated = [...values];\n updated[index] = val;\n updateValues(updated);\n if (index < length - 1) focusOnInput(index + 1);\n } else if (val === \"\" && values[index]) {\n const updated = [...values];\n updated[index] = \"\";\n updateValues(updated);\n if (index > 0) focusOnInput(index - 1);\n } else {\n event.target.value = values[index] || \"\";\n }\n };\n\n const handleKeyUp = (\n event: KeyboardEvent<HTMLInputElement>,\n index: number,\n ) => {\n if (event.key === \"Backspace\" && !values[index] && index > 0) {\n const prevIndex = index - 1;\n const updated = [...values];\n updated[prevIndex] = \"\";\n updateValues(updated);\n focusOnInput(prevIndex);\n }\n };\n\n const handlePaste = (\n event: ClipboardEvent<HTMLInputElement>,\n currentIndex: number,\n ) => {\n event.preventDefault();\n const pasted = event.clipboardData.getData(\"text\").trim();\n if (!isValidEntry(pasted)) return;\n\n const remaining = length - currentIndex;\n const chars = pasted.slice(0, remaining).split(\"\");\n const updated = [\n ...values.slice(0, currentIndex),\n ...chars,\n ...values.slice(currentIndex + chars.length),\n ];\n updateValues(updated);\n setTimeout(() => {\n focusOnInput(Math.min(currentIndex + chars.length, length - 1));\n }, 0);\n };\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label=\"One-time password\"\n data-testid={dataTestId}\n >\n {isError && errorMessage && (\n <div className=\"proton-OTPInput__error\">{errorMessage}</div>\n )}\n\n <div className=\"proton-OTPInput__digits\">\n {values.map((value, index) => (\n <Fragment key={index}>\n {showSeparator && length % 2 === 0 && index === length / 2 && (\n <span className=\"proton-OTPInput__separator\" aria-hidden=\"true\">\n -\n </span>\n )}\n <input\n ref={(el) => {\n inputRefs.current[index] = el;\n }}\n id={`digit-${index + 1}`}\n data-testid={`${dataTestId}-digit-${index + 1}`}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n autoComplete=\"one-time-code\"\n maxLength={1}\n value={value}\n disabled={isDisabled}\n onChange={(e) => handleChange(e, index)}\n onKeyUp={(e) => handleKeyUp(e, index)}\n onPaste={(e) => handlePaste(e, index)}\n className={csx(\n \"proton-OTPInput__digit\",\n isError && \"proton-OTPInput__digit--error\",\n )}\n aria-label={`Digit ${index + 1} of ${length}`}\n aria-invalid={isError}\n />\n </Fragment>\n ))}\n </div>\n </div>\n );\n },\n);\n\nOTPInput.displayName = \"ProtonUIOTPInput\";\n"],"names":["isValidEntry","key","stringToValues","length","digits","_","i","OTPInput","forwardRef","isError","errorMessage","isDisabled","onChange","onComplete","showSeparator","controlledValue","defaultValue","dataTestId","ref","values","setValues","useState","inputRefs","useRef","useEffect","_a","focusOnInput","index","updateValues","next","joined","handleChange","event","val","updated","handleKeyUp","prevIndex","handlePaste","currentIndex","pasted","remaining","chars","jsxs","jsx","value","Fragment","el","e","csx"],"mappings":"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"}
1
+ {"version":3,"file":"OTPInput.es.js","sources":["../../../../src/components/Input/OTPInput/OTPInput.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, useEffect, useRef, useState, Fragment } from \"react\";\nimport type { ClipboardEvent, KeyboardEvent, ChangeEvent } from \"react\";\n\nimport { csx } from \"../../../utils\";\nimport \"./OTPInput.css\";\n\nconst isValidEntry = (key: string) => /^[0-9]+$/.test(key);\n\nconst stringToValues = (s: string, length: number): string[] => {\n const digits = s.replace(/\\D/g, \"\").split(\"\").slice(0, length);\n return Array.from({ length }, (_, i) => digits[i] || \"\");\n};\n\nexport interface OTPInputProps {\n /** Test ID for digit inputs */\n \"data-testid\"?: string;\n /** Default value when uncontrolled. */\n defaultValue?: string;\n /** Whether the input is disabled. */\n isDisabled?: boolean;\n /** Whether the input is in an error state. */\n isError?: boolean;\n /** Error message to display when the input is in an error state. */\n errorMessage?: string;\n /** Number of digit inputs to render.\n * @default 6\n */\n length?: number;\n /** Called when the value changes. */\n onChange?: (value: string) => void;\n /** Called when all digits are filled. */\n onComplete?: (value: string) => void;\n /** Whether to show a separator dash in the middle (when length is even).\n * @default true\n */\n showSeparator?: boolean;\n /** Current value (controlled mode). */\n value?: string;\n}\n\n/**\n * Numeric OTP number input with individual digit cells. Supports paste, keyboard navigation, and auto-focus.\n *\n * API:\n * - {@link OTPInputProps}\n */\nexport const OTPInput = forwardRef<HTMLDivElement, OTPInputProps>(\n (\n {\n length = 6,\n isError = false,\n errorMessage,\n isDisabled = false,\n onChange,\n onComplete,\n showSeparator = true,\n value: controlledValue,\n defaultValue,\n \"data-testid\": dataTestId = \"otp-input\",\n },\n ref,\n ) => {\n length = length > 0 ? length : 0;\n const [values, setValues] = useState<string[]>(() =>\n stringToValues(controlledValue ?? defaultValue ?? \"\", length),\n );\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n inputRefs.current = inputRefs.current.slice(0, length);\n\n useEffect(() => {\n if (controlledValue !== undefined) {\n setValues(stringToValues(controlledValue, length));\n }\n }, [controlledValue, length]);\n\n useEffect(() => {\n inputRefs.current[0]?.focus();\n }, []);\n\n const focusOnInput = (index: number) => {\n inputRefs.current[index]?.focus();\n };\n\n const updateValues = (next: string[]) => {\n setValues(next);\n const joined = next.join(\"\");\n onChange?.(joined);\n if (joined.length === length) {\n onComplete?.(joined);\n }\n };\n\n const handleChange = (\n event: ChangeEvent<HTMLInputElement>,\n index: number,\n ) => {\n const val = event.target.value;\n\n if (isValidEntry(val)) {\n const updated = [...values];\n updated[index] = val;\n updateValues(updated);\n if (index < length - 1) focusOnInput(index + 1);\n } else if (val === \"\" && values[index]) {\n const updated = [...values];\n updated[index] = \"\";\n updateValues(updated);\n if (index > 0) focusOnInput(index - 1);\n } else {\n event.target.value = values[index] || \"\";\n }\n };\n\n const handleKeyUp = (\n event: KeyboardEvent<HTMLInputElement>,\n index: number,\n ) => {\n if (event.key === \"Backspace\" && !values[index] && index > 0) {\n const prevIndex = index - 1;\n const updated = [...values];\n updated[prevIndex] = \"\";\n updateValues(updated);\n focusOnInput(prevIndex);\n }\n };\n\n const handlePaste = (\n event: ClipboardEvent<HTMLInputElement>,\n currentIndex: number,\n ) => {\n event.preventDefault();\n const pasted = event.clipboardData.getData(\"text\").trim();\n if (!isValidEntry(pasted)) return;\n\n const remaining = length - currentIndex;\n const chars = pasted.slice(0, remaining).split(\"\");\n const updated = [\n ...values.slice(0, currentIndex),\n ...chars,\n ...values.slice(currentIndex + chars.length),\n ];\n updateValues(updated);\n setTimeout(() => {\n focusOnInput(Math.min(currentIndex + chars.length, length - 1));\n }, 0);\n };\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label=\"One-time password\"\n data-testid={dataTestId}\n >\n {isError && errorMessage && (\n <div className=\"proton-OTPInput__error\">{errorMessage}</div>\n )}\n\n <div className=\"proton-OTPInput__digits\">\n {values.map((value, index) => (\n <Fragment key={index}>\n {showSeparator && length % 2 === 0 && index === length / 2 && (\n <span className=\"proton-OTPInput__separator\" aria-hidden=\"true\">\n -\n </span>\n )}\n <input\n ref={(el) => {\n inputRefs.current[index] = el;\n }}\n id={`digit-${index + 1}`}\n data-testid={`${dataTestId}-digit-${index + 1}`}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n autoComplete=\"one-time-code\"\n maxLength={1}\n value={value}\n disabled={isDisabled}\n onChange={(e) => handleChange(e, index)}\n onKeyUp={(e) => handleKeyUp(e, index)}\n onPaste={(e) => handlePaste(e, index)}\n className={csx(\n \"proton-OTPInput__digit\",\n isError && \"proton-OTPInput__digit--error\",\n )}\n aria-label={`Digit ${index + 1} of ${length}`}\n aria-invalid={isError}\n />\n </Fragment>\n ))}\n </div>\n </div>\n );\n },\n);\n\nOTPInput.displayName = \"ProtonUIOTPInput\";\n"],"names":["isValidEntry","key","stringToValues","length","digits","_","i","OTPInput","forwardRef","isError","errorMessage","isDisabled","onChange","onComplete","showSeparator","controlledValue","defaultValue","dataTestId","ref","values","setValues","useState","inputRefs","useRef","useEffect","_a","focusOnInput","index","updateValues","next","joined","handleChange","event","val","updated","handleKeyUp","prevIndex","handlePaste","currentIndex","pasted","remaining","chars","jsxs","jsx","value","Fragment","el","e","csx"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.cjs.js","sources":["../../../../src/components/Input/SearchInput/SearchInput.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport \"./SearchInput.css\";\nimport { csx } from \"../../../utils\";\nimport { Search as SearchIcon } from \"../../Icon\";\nimport { Input, type BaseInputProps } from \"../BaseInput/Input\";\n\nexport interface SearchInputProps\n extends Omit<\n BaseInputProps,\n | \"prefix\"\n | \"suffix\"\n | \"value\"\n | \"onChange\"\n | \"description\"\n | \"descriptionPosition\"\n | \"label\"\n > {\n /** The initial value of the input. */\n defaultValue?: string;\n\n /** Should the clear button be shown when there is text? */\n isClearable?: boolean;\n\n /** Called when the input value changes. */\n onChange?: (value: string) => void;\n\n /** Called when the clear button is clicked. */\n onClear?: () => void;\n\n /** The current value of the input (for controlled usage) */\n value?: string;\n}\n\n/**\n * A search input component with optional clear functionality and URL parameter sync.\n *\n * API:\n * - {@link SearchInputProps}\n * - extends {@link BaseInputProps}\n */\nexport const SearchInput = ({\n name = \"search\",\n placeholder = \"Search...\",\n autoComplete,\n isClearable = true,\n isDisabled = false,\n error,\n defaultValue,\n value: controlledValue,\n \"data-testid\": testId = \"proton-SearchInput\",\n onChange,\n onClear,\n}: SearchInputProps) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [value, setValue] = useState(controlledValue ?? defaultValue ?? \"\");\n\n // Sync with controlled value\n useEffect(() => {\n if (controlledValue !== undefined) {\n setValue(controlledValue);\n }\n }, [controlledValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n onChange?.(newValue);\n };\n\n const handleClear = () => {\n setValue(\"\");\n onChange?.(\"\");\n onClear?.();\n inputRef.current?.focus();\n };\n\n return (\n <div\n className=\"proton-SearchInput__wrapper\"\n data-testid={testId}\n role=\"search\"\n >\n <Input\n type=\"search\"\n onChange={handleChange}\n value={value}\n name={name}\n placeholder={placeholder}\n autoComplete={autoComplete}\n error={error}\n ref={inputRef}\n isDisabled={isDisabled}\n prefix={\n <svg\n aria-hidden=\"true\"\n width=\"2.8em\"\n height=\"1.6em\"\n viewBox=\"0 0 24 24\"\n onClick={() => inputRef.current?.focus()}\n >\n <title>Magnifying Glass</title>\n <path\n fill=\"currentColor\"\n d=\"M10.5 18.5a8 8 0 1 1 0-16 8 8 0 0 1 0 16Zm0-1a7 7 0 1 0 0-14 7 7 0 0 0 0 14Zm5.25-.75 4.5 4.5-1.25 1.25-4.5-4.5 1.25-1.25Z\"\n />\n </svg>\n }\n suffix={\n isClearable && value.length > 0 ? (\n <button\n type=\"button\"\n className={csx(\n \"proton-SearchInput__button\",\n \"proton-Input__descriptor\",\n \"proton-Input__suffix\",\n )}\n data-testid={`${testId}-clear`}\n onClick={handleClear}\n aria-label=\"Clear search\"\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 50 50\"\n width=\"2.2em\"\n height=\"1.2em\"\n >\n <title>Clear</title>\n <path\n fill=\"currentColor\"\n d=\"m37.304 11.282l1.414 1.414l-26.022 26.02l-1.414-1.413z\"\n />\n <path\n fill=\"currentColor\"\n d=\"m12.696 11.282l26.022 26.02l-1.414 1.415l-26.022-26.02z\"\n />\n </svg>\n </button>\n ) : null\n }\n />\n </div>\n );\n};\n"],"names":["SearchInput","name","placeholder","autoComplete","isClearable","isDisabled","error","defaultValue","controlledValue","testId","onChange","onClear","inputRef","useRef","value","setValue","useState","useEffect","handleChange","newValue","handleClear","_a","jsx","Input","jsxs","csx"],"mappings":"gSA0CaA,EAAc,CAAC,CAC1B,KAAAC,EAAO,SACP,YAAAC,EAAc,YACd,aAAAC,EACA,YAAAC,EAAc,GACd,WAAAC,EAAa,GACb,MAAAC,EACA,aAAAC,EACA,MAAOC,EACP,cAAeC,EAAS,qBACxB,SAAAC,EACA,QAAAC,CACF,IAAwB,CAChB,MAAAC,EAAWC,SAAyB,IAAI,EACxC,CAACC,EAAOC,CAAQ,EAAIC,EAAS,SAAAR,GAAmBD,GAAgB,EAAE,EAGxEU,EAAAA,UAAU,IAAM,CACVT,IAAoB,QACtBO,EAASP,CAAe,CAC1B,EACC,CAACA,CAAe,CAAC,EAEd,MAAAU,EAAgBC,GAAqB,CACzCJ,EAASI,CAAQ,EACjBT,GAAA,MAAAA,EAAWS,EAAQ,EAGfC,EAAc,IAAM,OACxBL,EAAS,EAAE,EACXL,GAAA,MAAAA,EAAW,IACDC,GAAA,MAAAA,KACVU,EAAAT,EAAS,UAAT,MAAAS,EAAkB,OAAM,EAIxB,OAAAC,EAAA,kBAAA,IAAC,MAAA,CACC,UAAU,8BACV,cAAab,EACb,KAAK,SAEL,SAAAa,EAAA,kBAAA,IAACC,EAAA,MAAA,CACC,KAAK,SACL,SAAUL,EACV,MAAAJ,EACA,KAAAb,EACA,YAAAC,EACA,aAAAC,EACA,MAAAG,EACA,IAAKM,EACL,WAAAP,EACA,OACEmB,EAAA,kBAAA,KAAC,MAAA,CACC,cAAY,OACZ,MAAM,QACN,OAAO,QACP,QAAQ,YACR,QAAS,IAAM,OAAA,OAAAH,EAAAT,EAAS,UAAT,YAAAS,EAAkB,SAEjC,SAAA,CAAAC,EAAAA,kBAAAA,IAAC,SAAM,SAAgB,kBAAA,CAAA,EACvBA,EAAA,kBAAA,IAAC,OAAA,CACC,KAAK,eACL,EAAE,4HAAA,CACJ,CAAA,CAAA,CACF,EAEF,OACElB,GAAeU,EAAM,OAAS,EAC5BQ,EAAA,kBAAA,IAAC,SAAA,CACC,KAAK,SACL,UAAWG,EAAA,IACT,6BACA,2BACA,sBACF,EACA,cAAa,GAAGhB,CAAM,SACtB,QAASW,EACT,aAAW,eAEX,SAAAI,EAAA,kBAAA,KAAC,MAAA,CACC,cAAY,OACZ,QAAQ,YACR,MAAM,QACN,OAAO,QAEP,SAAA,CAAAF,EAAAA,kBAAAA,IAAC,SAAM,SAAK,OAAA,CAAA,EACZA,EAAA,kBAAA,IAAC,OAAA,CACC,KAAK,eACL,EAAE,wDAAA,CACJ,EACAA,EAAA,kBAAA,IAAC,OAAA,CACC,KAAK,eACL,EAAE,yDAAA,CACJ,CAAA,CAAA,CACF,CAAA,CAAA,EAEA,IAAA,CAER,CAAA,CAAA,CAGN"}
1
+ {"version":3,"file":"SearchInput.cjs.js","sources":["../../../../src/components/Input/SearchInput/SearchInput.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport \"./SearchInput.css\";\nimport { csx } from \"../../../utils\";\nimport { Search as SearchIcon } from \"../../Icon\";\nimport { Input, type BaseInputProps } from \"../BaseInput/Input\";\n\nexport interface SearchInputProps\n extends Omit<\n BaseInputProps,\n | \"prefix\"\n | \"suffix\"\n | \"value\"\n | \"onChange\"\n | \"description\"\n | \"descriptionPosition\"\n | \"label\"\n > {\n /** The initial value of the input. */\n defaultValue?: string;\n\n /** Should the clear button be shown when there is text? */\n isClearable?: boolean;\n\n /** Called when the input value changes. */\n onChange?: (value: string) => void;\n\n /** Called when the clear button is clicked. */\n onClear?: () => void;\n\n /** The current value of the input (for controlled usage) */\n value?: string;\n}\n\n/**\n * A search input component with optional clear functionality and URL parameter sync.\n *\n * API:\n * - {@link SearchInputProps}\n * - extends {@link BaseInputProps}\n */\nexport const SearchInput = ({\n name = \"search\",\n placeholder = \"Search...\",\n autoComplete,\n isClearable = true,\n isDisabled = false,\n error,\n defaultValue,\n value: controlledValue,\n \"data-testid\": testId = \"proton-SearchInput\",\n onChange,\n onClear,\n}: SearchInputProps) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [value, setValue] = useState(controlledValue ?? defaultValue ?? \"\");\n\n // Sync with controlled value\n useEffect(() => {\n if (controlledValue !== undefined) {\n setValue(controlledValue);\n }\n }, [controlledValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n onChange?.(newValue);\n };\n\n const handleClear = () => {\n setValue(\"\");\n onChange?.(\"\");\n onClear?.();\n inputRef.current?.focus();\n };\n\n return (\n <div\n className=\"proton-SearchInput__wrapper\"\n data-testid={testId}\n role=\"search\"\n >\n <Input\n type=\"search\"\n onChange={handleChange}\n value={value}\n name={name}\n placeholder={placeholder}\n autoComplete={autoComplete}\n error={error}\n ref={inputRef}\n isDisabled={isDisabled}\n prefix={\n <svg\n aria-hidden=\"true\"\n width=\"2.8em\"\n height=\"1.6em\"\n viewBox=\"0 0 24 24\"\n onClick={() => inputRef.current?.focus()}\n >\n <title>Magnifying Glass</title>\n <path\n fill=\"currentColor\"\n d=\"M10.5 18.5a8 8 0 1 1 0-16 8 8 0 0 1 0 16Zm0-1a7 7 0 1 0 0-14 7 7 0 0 0 0 14Zm5.25-.75 4.5 4.5-1.25 1.25-4.5-4.5 1.25-1.25Z\"\n />\n </svg>\n }\n suffix={\n isClearable && value.length > 0 ? (\n <button\n type=\"button\"\n className={csx(\n \"proton-SearchInput__button\",\n \"proton-Input__descriptor\",\n \"proton-Input__suffix\",\n )}\n data-testid={`${testId}-clear`}\n onClick={handleClear}\n aria-label=\"Clear search\"\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 50 50\"\n width=\"2.2em\"\n height=\"1.2em\"\n >\n <title>Clear</title>\n <path\n fill=\"currentColor\"\n d=\"m37.304 11.282l1.414 1.414l-26.022 26.02l-1.414-1.413z\"\n />\n <path\n fill=\"currentColor\"\n d=\"m12.696 11.282l26.022 26.02l-1.414 1.415l-26.022-26.02z\"\n />\n </svg>\n </button>\n ) : null\n }\n />\n </div>\n );\n};\n"],"names":["SearchInput","name","placeholder","autoComplete","isClearable","isDisabled","error","defaultValue","controlledValue","testId","onChange","onClear","inputRef","useRef","value","setValue","useState","useEffect","handleChange","newValue","handleClear","_a","jsx","Input","jsxs","csx"],"mappings":"gSA0CaA,EAAc,CAAC,CAC1B,KAAAC,EAAO,SACP,YAAAC,EAAc,YACd,aAAAC,EACA,YAAAC,EAAc,GACd,WAAAC,EAAa,GACb,MAAAC,EACA,aAAAC,EACA,MAAOC,EACP,cAAeC,EAAS,qBACxB,SAAAC,EACA,QAAAC,CACF,IAAwB,CACtB,MAAMC,EAAWC,EAAAA,OAAyB,IAAI,EACxC,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAASR,GAAmBD,GAAgB,EAAE,EAGxEU,EAAAA,UAAU,IAAM,CACVT,IAAoB,QACtBO,EAASP,CAAe,CAE5B,EAAG,CAACA,CAAe,CAAC,EAEpB,MAAMU,EAAgBC,GAAqB,CACzCJ,EAASI,CAAQ,EACjBT,GAAA,MAAAA,EAAWS,EACb,EAEMC,EAAc,IAAM,OACxBL,EAAS,EAAE,EACXL,GAAA,MAAAA,EAAW,IACXC,GAAA,MAAAA,KACAU,EAAAT,EAAS,UAAT,MAAAS,EAAkB,OACpB,EAEA,OACEC,EAAAA,kBAAAA,IAAC,MAAA,CACC,UAAU,8BACV,cAAab,EACb,KAAK,SAEL,SAAAa,EAAAA,kBAAAA,IAACC,EAAAA,MAAA,CACC,KAAK,SACL,SAAUL,EACV,MAAAJ,EACA,KAAAb,EACA,YAAAC,EACA,aAAAC,EACA,MAAAG,EACA,IAAKM,EACL,WAAAP,EACA,OACEmB,EAAAA,kBAAAA,KAAC,MAAA,CACC,cAAY,OACZ,MAAM,QACN,OAAO,QACP,QAAQ,YACR,QAAS,IAAA,OAAM,OAAAH,EAAAT,EAAS,UAAT,YAAAS,EAAkB,SAEjC,SAAA,CAAAC,EAAAA,kBAAAA,IAAC,SAAM,SAAA,kBAAA,CAAgB,EACvBA,EAAAA,kBAAAA,IAAC,OAAA,CACC,KAAK,eACL,EAAE,4HAAA,CAAA,CACJ,CAAA,CAAA,EAGJ,OACElB,GAAeU,EAAM,OAAS,EAC5BQ,EAAAA,kBAAAA,IAAC,SAAA,CACC,KAAK,SACL,UAAWG,EAAAA,IACT,6BACA,2BACA,sBAAA,EAEF,cAAa,GAAGhB,CAAM,SACtB,QAASW,EACT,aAAW,eAEX,SAAAI,EAAAA,kBAAAA,KAAC,MAAA,CACC,cAAY,OACZ,QAAQ,YACR,MAAM,QACN,OAAO,QAEP,SAAA,CAAAF,EAAAA,kBAAAA,IAAC,SAAM,SAAA,OAAA,CAAK,EACZA,EAAAA,kBAAAA,IAAC,OAAA,CACC,KAAK,eACL,EAAE,wDAAA,CAAA,EAEJA,EAAAA,kBAAAA,IAAC,OAAA,CACC,KAAK,eACL,EAAE,yDAAA,CAAA,CACJ,CAAA,CAAA,CACF,CAAA,EAEA,IAAA,CAAA,CAER,CAAA,CAGN"}
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.es.js","sources":["../../../../src/components/Input/SearchInput/SearchInput.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport \"./SearchInput.css\";\nimport { csx } from \"../../../utils\";\nimport { Search as SearchIcon } from \"../../Icon\";\nimport { Input, type BaseInputProps } from \"../BaseInput/Input\";\n\nexport interface SearchInputProps\n extends Omit<\n BaseInputProps,\n | \"prefix\"\n | \"suffix\"\n | \"value\"\n | \"onChange\"\n | \"description\"\n | \"descriptionPosition\"\n | \"label\"\n > {\n /** The initial value of the input. */\n defaultValue?: string;\n\n /** Should the clear button be shown when there is text? */\n isClearable?: boolean;\n\n /** Called when the input value changes. */\n onChange?: (value: string) => void;\n\n /** Called when the clear button is clicked. */\n onClear?: () => void;\n\n /** The current value of the input (for controlled usage) */\n value?: string;\n}\n\n/**\n * A search input component with optional clear functionality and URL parameter sync.\n *\n * API:\n * - {@link SearchInputProps}\n * - extends {@link BaseInputProps}\n */\nexport const SearchInput = ({\n name = \"search\",\n placeholder = \"Search...\",\n autoComplete,\n isClearable = true,\n isDisabled = false,\n error,\n defaultValue,\n value: controlledValue,\n \"data-testid\": testId = \"proton-SearchInput\",\n onChange,\n onClear,\n}: SearchInputProps) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [value, setValue] = useState(controlledValue ?? defaultValue ?? \"\");\n\n // Sync with controlled value\n useEffect(() => {\n if (controlledValue !== undefined) {\n setValue(controlledValue);\n }\n }, [controlledValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n onChange?.(newValue);\n };\n\n const handleClear = () => {\n setValue(\"\");\n onChange?.(\"\");\n onClear?.();\n inputRef.current?.focus();\n };\n\n return (\n <div\n className=\"proton-SearchInput__wrapper\"\n data-testid={testId}\n role=\"search\"\n >\n <Input\n type=\"search\"\n onChange={handleChange}\n value={value}\n name={name}\n placeholder={placeholder}\n autoComplete={autoComplete}\n error={error}\n ref={inputRef}\n isDisabled={isDisabled}\n prefix={\n <svg\n aria-hidden=\"true\"\n width=\"2.8em\"\n height=\"1.6em\"\n viewBox=\"0 0 24 24\"\n onClick={() => inputRef.current?.focus()}\n >\n <title>Magnifying Glass</title>\n <path\n fill=\"currentColor\"\n d=\"M10.5 18.5a8 8 0 1 1 0-16 8 8 0 0 1 0 16Zm0-1a7 7 0 1 0 0-14 7 7 0 0 0 0 14Zm5.25-.75 4.5 4.5-1.25 1.25-4.5-4.5 1.25-1.25Z\"\n />\n </svg>\n }\n suffix={\n isClearable && value.length > 0 ? (\n <button\n type=\"button\"\n className={csx(\n \"proton-SearchInput__button\",\n \"proton-Input__descriptor\",\n \"proton-Input__suffix\",\n )}\n data-testid={`${testId}-clear`}\n onClick={handleClear}\n aria-label=\"Clear search\"\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 50 50\"\n width=\"2.2em\"\n height=\"1.2em\"\n >\n <title>Clear</title>\n <path\n fill=\"currentColor\"\n d=\"m37.304 11.282l1.414 1.414l-26.022 26.02l-1.414-1.413z\"\n />\n <path\n fill=\"currentColor\"\n d=\"m12.696 11.282l26.022 26.02l-1.414 1.415l-26.022-26.02z\"\n />\n </svg>\n </button>\n ) : null\n }\n />\n </div>\n );\n};\n"],"names":["SearchInput","name","placeholder","autoComplete","isClearable","isDisabled","error","defaultValue","controlledValue","testId","onChange","onClear","inputRef","useRef","value","setValue","useState","useEffect","handleChange","newValue","handleClear","_a","jsx","Input","jsxs","csx"],"mappings":";;;;;AA0CO,MAAMA,IAAc,CAAC;AAAA,EAC1B,MAAAC,IAAO;AAAA,EACP,aAAAC,IAAc;AAAA,EACd,cAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,YAAAC,IAAa;AAAA,EACb,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,OAAOC;AAAA,EACP,eAAeC,IAAS;AAAA,EACxB,UAAAC;AAAA,EACA,SAAAC;AACF,MAAwB;AAChB,QAAAC,IAAWC,EAAyB,IAAI,GACxC,CAACC,GAAOC,CAAQ,IAAIC,EAASR,KAAmBD,KAAgB,EAAE;AAGxE,EAAAU,EAAU,MAAM;AACd,IAAIT,MAAoB,UACtBO,EAASP,CAAe;AAAA,EAC1B,GACC,CAACA,CAAe,CAAC;AAEd,QAAAU,IAAe,CAACC,MAAqB;AACzC,IAAAJ,EAASI,CAAQ,GACjBT,KAAA,QAAAA,EAAWS;AAAA,EAAQ,GAGfC,IAAc,MAAM;;AACxB,IAAAL,EAAS,EAAE,GACXL,KAAA,QAAAA,EAAW,KACDC,KAAA,QAAAA,MACVU,IAAAT,EAAS,YAAT,QAAAS,EAAkB;AAAA,EAAM;AAIxB,SAAAC,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,eAAab;AAAA,MACb,MAAK;AAAA,MAEL,UAAAa,gBAAAA,EAAA;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAUL;AAAA,UACV,OAAAJ;AAAA,UACA,MAAAb;AAAA,UACA,aAAAC;AAAA,UACA,cAAAC;AAAA,UACA,OAAAG;AAAA,UACA,KAAKM;AAAA,UACL,YAAAP;AAAA,UACA,QACEmB,gBAAAA,EAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAY;AAAA,cACZ,OAAM;AAAA,cACN,QAAO;AAAA,cACP,SAAQ;AAAA,cACR,SAAS,MAAM;;AAAA,wBAAAH,IAAAT,EAAS,YAAT,gBAAAS,EAAkB;AAAA;AAAA,cAEjC,UAAA;AAAA,gBAAAC,gBAAAA,EAAAA,IAAC,WAAM,UAAgB,mBAAA,CAAA;AAAA,gBACvBA,gBAAAA,EAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,GAAE;AAAA,kBAAA;AAAA,gBACJ;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,UAEF,QACElB,KAAeU,EAAM,SAAS,IAC5BQ,gBAAAA,EAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAWG;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,cACA,eAAa,GAAGhB,CAAM;AAAA,cACtB,SAASW;AAAA,cACT,cAAW;AAAA,cAEX,UAAAI,gBAAAA,EAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,eAAY;AAAA,kBACZ,SAAQ;AAAA,kBACR,OAAM;AAAA,kBACN,QAAO;AAAA,kBAEP,UAAA;AAAA,oBAAAF,gBAAAA,EAAAA,IAAC,WAAM,UAAK,QAAA,CAAA;AAAA,oBACZA,gBAAAA,EAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,GAAE;AAAA,sBAAA;AAAA,oBACJ;AAAA,oBACAA,gBAAAA,EAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,GAAE;AAAA,sBAAA;AAAA,oBACJ;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACF;AAAA,YAAA;AAAA,UAAA,IAEA;AAAA,QAAA;AAAA,MAER;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"SearchInput.es.js","sources":["../../../../src/components/Input/SearchInput/SearchInput.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport \"./SearchInput.css\";\nimport { csx } from \"../../../utils\";\nimport { Search as SearchIcon } from \"../../Icon\";\nimport { Input, type BaseInputProps } from \"../BaseInput/Input\";\n\nexport interface SearchInputProps\n extends Omit<\n BaseInputProps,\n | \"prefix\"\n | \"suffix\"\n | \"value\"\n | \"onChange\"\n | \"description\"\n | \"descriptionPosition\"\n | \"label\"\n > {\n /** The initial value of the input. */\n defaultValue?: string;\n\n /** Should the clear button be shown when there is text? */\n isClearable?: boolean;\n\n /** Called when the input value changes. */\n onChange?: (value: string) => void;\n\n /** Called when the clear button is clicked. */\n onClear?: () => void;\n\n /** The current value of the input (for controlled usage) */\n value?: string;\n}\n\n/**\n * A search input component with optional clear functionality and URL parameter sync.\n *\n * API:\n * - {@link SearchInputProps}\n * - extends {@link BaseInputProps}\n */\nexport const SearchInput = ({\n name = \"search\",\n placeholder = \"Search...\",\n autoComplete,\n isClearable = true,\n isDisabled = false,\n error,\n defaultValue,\n value: controlledValue,\n \"data-testid\": testId = \"proton-SearchInput\",\n onChange,\n onClear,\n}: SearchInputProps) => {\n const inputRef = useRef<HTMLInputElement>(null);\n const [value, setValue] = useState(controlledValue ?? defaultValue ?? \"\");\n\n // Sync with controlled value\n useEffect(() => {\n if (controlledValue !== undefined) {\n setValue(controlledValue);\n }\n }, [controlledValue]);\n\n const handleChange = (newValue: string) => {\n setValue(newValue);\n onChange?.(newValue);\n };\n\n const handleClear = () => {\n setValue(\"\");\n onChange?.(\"\");\n onClear?.();\n inputRef.current?.focus();\n };\n\n return (\n <div\n className=\"proton-SearchInput__wrapper\"\n data-testid={testId}\n role=\"search\"\n >\n <Input\n type=\"search\"\n onChange={handleChange}\n value={value}\n name={name}\n placeholder={placeholder}\n autoComplete={autoComplete}\n error={error}\n ref={inputRef}\n isDisabled={isDisabled}\n prefix={\n <svg\n aria-hidden=\"true\"\n width=\"2.8em\"\n height=\"1.6em\"\n viewBox=\"0 0 24 24\"\n onClick={() => inputRef.current?.focus()}\n >\n <title>Magnifying Glass</title>\n <path\n fill=\"currentColor\"\n d=\"M10.5 18.5a8 8 0 1 1 0-16 8 8 0 0 1 0 16Zm0-1a7 7 0 1 0 0-14 7 7 0 0 0 0 14Zm5.25-.75 4.5 4.5-1.25 1.25-4.5-4.5 1.25-1.25Z\"\n />\n </svg>\n }\n suffix={\n isClearable && value.length > 0 ? (\n <button\n type=\"button\"\n className={csx(\n \"proton-SearchInput__button\",\n \"proton-Input__descriptor\",\n \"proton-Input__suffix\",\n )}\n data-testid={`${testId}-clear`}\n onClick={handleClear}\n aria-label=\"Clear search\"\n >\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 50 50\"\n width=\"2.2em\"\n height=\"1.2em\"\n >\n <title>Clear</title>\n <path\n fill=\"currentColor\"\n d=\"m37.304 11.282l1.414 1.414l-26.022 26.02l-1.414-1.413z\"\n />\n <path\n fill=\"currentColor\"\n d=\"m12.696 11.282l26.022 26.02l-1.414 1.415l-26.022-26.02z\"\n />\n </svg>\n </button>\n ) : null\n }\n />\n </div>\n );\n};\n"],"names":["SearchInput","name","placeholder","autoComplete","isClearable","isDisabled","error","defaultValue","controlledValue","testId","onChange","onClear","inputRef","useRef","value","setValue","useState","useEffect","handleChange","newValue","handleClear","_a","jsx","Input","jsxs","csx"],"mappings":";;;;;AA0CO,MAAMA,IAAc,CAAC;AAAA,EAC1B,MAAAC,IAAO;AAAA,EACP,aAAAC,IAAc;AAAA,EACd,cAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,YAAAC,IAAa;AAAA,EACb,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,OAAOC;AAAA,EACP,eAAeC,IAAS;AAAA,EACxB,UAAAC;AAAA,EACA,SAAAC;AACF,MAAwB;AACtB,QAAMC,IAAWC,EAAyB,IAAI,GACxC,CAACC,GAAOC,CAAQ,IAAIC,EAASR,KAAmBD,KAAgB,EAAE;AAGxE,EAAAU,EAAU,MAAM;AACd,IAAIT,MAAoB,UACtBO,EAASP,CAAe;AAAA,EAE5B,GAAG,CAACA,CAAe,CAAC;AAEpB,QAAMU,IAAe,CAACC,MAAqB;AACzC,IAAAJ,EAASI,CAAQ,GACjBT,KAAA,QAAAA,EAAWS;AAAA,EACb,GAEMC,IAAc,MAAM;;AACxB,IAAAL,EAAS,EAAE,GACXL,KAAA,QAAAA,EAAW,KACXC,KAAA,QAAAA,MACAU,IAAAT,EAAS,YAAT,QAAAS,EAAkB;AAAA,EACpB;AAEA,SACEC,gBAAAA,EAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,eAAab;AAAA,MACb,MAAK;AAAA,MAEL,UAAAa,gBAAAA,EAAAA;AAAAA,QAACC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAUL;AAAA,UACV,OAAAJ;AAAA,UACA,MAAAb;AAAA,UACA,aAAAC;AAAA,UACA,cAAAC;AAAA,UACA,OAAAG;AAAA,UACA,KAAKM;AAAA,UACL,YAAAP;AAAA,UACA,QACEmB,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,eAAY;AAAA,cACZ,OAAM;AAAA,cACN,QAAO;AAAA,cACP,SAAQ;AAAA,cACR,SAAS,MAAA;;AAAM,wBAAAH,IAAAT,EAAS,YAAT,gBAAAS,EAAkB;AAAA;AAAA,cAEjC,UAAA;AAAA,gBAAAC,gBAAAA,EAAAA,IAAC,WAAM,UAAA,mBAAA,CAAgB;AAAA,gBACvBA,gBAAAA,EAAAA;AAAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,GAAE;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACJ;AAAA,YAAA;AAAA,UAAA;AAAA,UAGJ,QACElB,KAAeU,EAAM,SAAS,IAC5BQ,gBAAAA,EAAAA;AAAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAWG;AAAA,gBACT;AAAA,gBACA;AAAA,gBACA;AAAA,cAAA;AAAA,cAEF,eAAa,GAAGhB,CAAM;AAAA,cACtB,SAASW;AAAA,cACT,cAAW;AAAA,cAEX,UAAAI,gBAAAA,EAAAA;AAAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,eAAY;AAAA,kBACZ,SAAQ;AAAA,kBACR,OAAM;AAAA,kBACN,QAAO;AAAA,kBAEP,UAAA;AAAA,oBAAAF,gBAAAA,EAAAA,IAAC,WAAM,UAAA,QAAA,CAAK;AAAA,oBACZA,gBAAAA,EAAAA;AAAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,GAAE;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAEJA,gBAAAA,EAAAA;AAAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,GAAE;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACJ;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF;AAAA,UAAA,IAEA;AAAA,QAAA;AAAA,MAAA;AAAA,IAER;AAAA,EAAA;AAGN;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../../node_modules/react/jsx-runtime.cjs.js"),o=require("react"),b=require("../../hooks/useBreakpoint.cjs.js"),O=require("../ActionMenu/ActionMenu.cjs.js"),k=require("./PopoverMenu.cjs.js");;/* empty css */;/* empty css */const y=require("../Icon/IconComponents/Ellipsis.cjs.js"),A=require("../../constants/breakpoint.cjs.js");function f({renderTrigger:a,size:R=24,title:c,items:p,disabled:g,onClose:s,triggerTestId:d="MenuTrigger-Trigger",menuTestId:q,onSelectionChange:i,selectedKey:u,disabledKeys:x}){const E=b.useBreakpoint(A.BREAKPOINTS.SMALL),[e,n]=o.useState(!1),T=o.useRef(null),l=o.useMemo(()=>p.map(t=>({...t,id:t.key})),[p]),m=t=>{i==null||i(t),n(!1)},M=a?a({isOpen:e,disabled:g,setIsOpen:n}):r.jsxRuntimeExports.jsx("button",{"data-testid":d,disabled:g,className:"proton-MenuTrigger__button",ref:T,onClick:()=>n(!e),type:"button","aria-label":"Open menu","aria-expanded":e,children:r.jsxRuntimeExports.jsx(y.Ellipsis,{size:R})});return E?r.jsxRuntimeExports.jsxs(r.jsxRuntimeExports.Fragment,{children:[M,e&&r.jsxRuntimeExports.jsx(O.ActionMenu,{actions:l,title:c,isOpen:e,onClose:()=>{n(!1),s==null||s()},showCancel:!0,"data-testid":q,selectionMode:"single",onSelectionChange:t=>{const j=Array.from(t)[0];j&&m(j)},selectedKeys:u?[u]:void 0,disabledKeys:x})]}):r.jsxRuntimeExports.jsx(k.PopoverMenu,{trigger:M,items:l,isOpen:e,onOpenChange:n,selectedKey:u,onSelectionChange:m,disabledKeys:x,title:c})}f.displayName="ProtonUIMenuTrigger";exports.MenuTrigger=f;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../../node_modules/react/jsx-runtime.cjs.js"),o=require("react"),b=require("../../hooks/useBreakpoint.cjs.js"),O=require("../ActionMenu/ActionMenu.cjs.js"),k=require("./PopoverMenu.cjs.js");;/* empty css */;/* empty css */const y=require("../Icon/IconComponents/Ellipsis.cjs.js"),A=require("../../constants/breakpoint.cjs.js");function f({renderTrigger:a,size:q=24,title:c,items:p,disabled:g,onClose:s,triggerTestId:R="MenuTrigger-Trigger",menuTestId:d,onSelectionChange:i,selectedKey:u,disabledKeys:x}){const E=b.useBreakpoint(A.BREAKPOINTS.SMALL),[e,n]=o.useState(!1),T=o.useRef(null),l=o.useMemo(()=>p.map(r=>({...r,id:r.key})),[p]),m=r=>{i==null||i(r),n(!1)},M=a?a({isOpen:e,disabled:g,setIsOpen:n}):t.jsxRuntimeExports.jsx("button",{"data-testid":R,disabled:g,className:"proton-MenuTrigger__button",ref:T,onClick:()=>n(!e),type:"button","aria-label":"Open menu","aria-expanded":e,children:t.jsxRuntimeExports.jsx(y.Ellipsis,{size:q})});return E?t.jsxRuntimeExports.jsxs(t.jsxRuntimeExports.Fragment,{children:[M,e&&t.jsxRuntimeExports.jsx(O.ActionMenu,{actions:l,title:c,isOpen:e,onClose:()=>{n(!1),s==null||s()},showCancel:!0,"data-testid":d,selectionMode:"single",onSelectionChange:r=>{const j=Array.from(r)[0];j&&m(j)},selectedKeys:u?[u]:void 0,disabledKeys:x})]}):t.jsxRuntimeExports.jsx(k.PopoverMenu,{trigger:M,items:l,isOpen:e,onOpenChange:n,selectedKey:u,onSelectionChange:m,disabledKeys:x,title:c})}f.displayName="ProtonUIMenuTrigger";exports.MenuTrigger=f;
2
2
  //# sourceMappingURL=MenuTrigger.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MenuTrigger.cjs.js","sources":["../../../src/components/Menu/MenuTrigger.tsx"],"sourcesContent":["\"use client\";\n\nimport { ReactNode, useMemo, useRef, useState } from \"react\";\n\nimport { BREAKPOINTS } from \"../../constants\";\nimport { useBreakpoint } from \"../../hooks/useBreakpoint\";\nimport { ActionMenu, ActionMenuAction } from \"../ActionMenu/ActionMenu\";\nimport { Ellipsis as EllipsisIcon } from \"../Icon\";\nimport { PopoverMenu } from \"./PopoverMenu\";\n\nimport \"./MenuTrigger.css\";\nimport \"./Menu.css\";\n\nexport interface MenuTriggerProps {\n disabled?: boolean;\n isOpen?: boolean;\n setIsOpen: (isOpen: boolean) => void;\n}\n\nexport interface MenuProps {\n /** Custom trigger component. If not provided, defaults to ellipsis icon.\n * - @prop triggerProps {@link TriggerProps}\n */\n renderTrigger?: (triggerProps: MenuTriggerProps) => ReactNode;\n\n /** Size of the trigger icon\n * @default 24\n */\n size?: number;\n\n /** Title of the parent menu */\n title?: string;\n\n /** Array of menu actions/items to display\n * - type {@link ActionMenuAction}[]\n */\n items: ActionMenuAction[];\n\n /** Whether the menu is disabled\n * @default false\n */\n disabled?: boolean;\n\n /** Callback when the menu closes */\n onClose?: () => void;\n\n /** Test ID for the trigger button */\n triggerTestId?: string;\n\n /** Test ID for the menu */\n menuTestId?: string;\n\n /** Callback when the selection changes */\n onSelectionChange?: (key: string) => void;\n\n /** The key of the selected item */\n selectedKey?: string;\n\n /** The keys of the disabled items */\n disabledKeys?: string[];\n}\n\n/**\n * An uncontrolled component that displays either a popover menu or an action menu\n * depending on device capabilities (touch detection and screen size) when the menu trigger is pressed.\n *\n * API:\n * - {@link MenuProps}\n */\nexport function MenuTrigger({\n renderTrigger,\n size = 24,\n title,\n items,\n disabled,\n onClose,\n triggerTestId = \"MenuTrigger-Trigger\",\n menuTestId,\n onSelectionChange,\n selectedKey,\n disabledKeys,\n}: MenuProps) {\n const isMobile = useBreakpoint(BREAKPOINTS.SMALL);\n const [isOpen, setIsOpen] = useState(false);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const menuItems = useMemo(\n () => items.map((item) => ({ ...item, id: item.key })),\n [items],\n );\n\n const handleSelectionChange = (key: string) => {\n onSelectionChange?.(key);\n setIsOpen(false);\n };\n\n const triggerButton = renderTrigger ? (\n renderTrigger({\n isOpen,\n disabled,\n setIsOpen,\n })\n ) : (\n <button\n data-testid={triggerTestId}\n disabled={disabled}\n className=\"proton-MenuTrigger__button\"\n ref={triggerRef}\n onClick={() => setIsOpen(!isOpen)}\n type=\"button\"\n aria-label=\"Open menu\"\n aria-expanded={isOpen}\n >\n <EllipsisIcon size={size} />\n </button>\n );\n\n if (isMobile) {\n return (\n <>\n {triggerButton}\n {isOpen && (\n <ActionMenu\n actions={menuItems}\n title={title}\n isOpen={isOpen}\n onClose={() => {\n setIsOpen(false);\n onClose?.();\n }}\n showCancel\n data-testid={menuTestId}\n selectionMode=\"single\"\n onSelectionChange={(keys) => {\n const nextKey = Array.from(keys)[0];\n if (nextKey) handleSelectionChange(nextKey as string);\n }}\n selectedKeys={selectedKey ? [selectedKey] : undefined}\n disabledKeys={disabledKeys}\n />\n )}\n </>\n );\n }\n\n return (\n <PopoverMenu\n trigger={triggerButton}\n items={menuItems}\n isOpen={isOpen}\n onOpenChange={setIsOpen}\n selectedKey={selectedKey}\n onSelectionChange={handleSelectionChange}\n disabledKeys={disabledKeys}\n title={title}\n />\n );\n}\n\nMenuTrigger.displayName = \"ProtonUIMenuTrigger\";\n"],"names":["MenuTrigger","renderTrigger","size","title","items","disabled","onClose","triggerTestId","menuTestId","onSelectionChange","selectedKey","disabledKeys","isMobile","useBreakpoint","BREAKPOINTS","isOpen","setIsOpen","useState","triggerRef","useRef","menuItems","useMemo","item","handleSelectionChange","key","triggerButton","jsx","EllipsisIcon","jsxs","Fragment","ActionMenu","keys","nextKey","PopoverMenu"],"mappings":"ycAqEO,SAASA,EAAY,CAC1B,cAAAC,EACA,KAAAC,EAAO,GACP,MAAAC,EACA,MAAAC,EACA,SAAAC,EACA,QAAAC,EACA,cAAAC,EAAgB,sBAChB,WAAAC,EACA,kBAAAC,EACA,YAAAC,EACA,aAAAC,CACF,EAAc,CACN,MAAAC,EAAWC,EAAAA,cAAcC,EAAA,YAAY,KAAK,EAC1C,CAACC,EAAQC,CAAS,EAAIC,WAAS,EAAK,EACpCC,EAAaC,SAA0B,IAAI,EAE3CC,EAAYC,EAAA,QAChB,IAAMjB,EAAM,IAAKkB,IAAU,CAAE,GAAGA,EAAM,GAAIA,EAAK,GAAA,EAAM,EACrD,CAAClB,CAAK,CAAA,EAGFmB,EAAyBC,GAAgB,CAC7Cf,GAAA,MAAAA,EAAoBe,GACpBR,EAAU,EAAK,CAAA,EAGXS,EAAgBxB,EACpBA,EAAc,CACZ,OAAAc,EACA,SAAAV,EACA,UAAAW,CACD,CAAA,EAEDU,EAAA,kBAAA,IAAC,SAAA,CACC,cAAanB,EACb,SAAAF,EACA,UAAU,6BACV,IAAKa,EACL,QAAS,IAAMF,EAAU,CAACD,CAAM,EAChC,KAAK,SACL,aAAW,YACX,gBAAeA,EAEf,SAAAW,EAAA,kBAAA,IAACC,YAAa,KAAAzB,CAAY,CAAA,CAAA,CAAA,EAI9B,OAAIU,EAGGgB,EAAA,kBAAA,KAAAC,6BAAA,CAAA,SAAA,CAAAJ,EACAV,GACCW,EAAA,kBAAA,IAACI,EAAA,WAAA,CACC,QAASV,EACT,MAAAjB,EACA,OAAAY,EACA,QAAS,IAAM,CACbC,EAAU,EAAK,EACLV,GAAA,MAAAA,GACZ,EACA,WAAU,GACV,cAAaE,EACb,cAAc,SACd,kBAAoBuB,GAAS,CAC3B,MAAMC,EAAU,MAAM,KAAKD,CAAI,EAAE,CAAC,EAC9BC,KAA+BA,CAAiB,CACtD,EACA,aAActB,EAAc,CAACA,CAAW,EAAI,OAC5C,aAAAC,CAAA,CACF,CAEJ,CAAA,CAAA,EAKFe,EAAA,kBAAA,IAACO,EAAA,YAAA,CACC,QAASR,EACT,MAAOL,EACP,OAAAL,EACA,aAAcC,EACd,YAAAN,EACA,kBAAmBa,EACnB,aAAAZ,EACA,MAAAR,CAAA,CAAA,CAGN,CAEAH,EAAY,YAAc"}
1
+ {"version":3,"file":"MenuTrigger.cjs.js","sources":["../../../src/components/Menu/MenuTrigger.tsx"],"sourcesContent":["\"use client\";\n\nimport { ReactNode, useMemo, useRef, useState } from \"react\";\n\nimport { BREAKPOINTS } from \"../../constants\";\nimport { useBreakpoint } from \"../../hooks/useBreakpoint\";\nimport { ActionMenu, ActionMenuAction } from \"../ActionMenu/ActionMenu\";\nimport { Ellipsis as EllipsisIcon } from \"../Icon\";\nimport { PopoverMenu } from \"./PopoverMenu\";\n\nimport \"./MenuTrigger.css\";\nimport \"./Menu.css\";\n\nexport interface MenuTriggerProps {\n disabled?: boolean;\n isOpen?: boolean;\n setIsOpen: (isOpen: boolean) => void;\n}\n\nexport interface MenuProps {\n /** Custom trigger component. If not provided, defaults to ellipsis icon.\n * - @prop triggerProps {@link TriggerProps}\n */\n renderTrigger?: (triggerProps: MenuTriggerProps) => ReactNode;\n\n /** Size of the trigger icon\n * @default 24\n */\n size?: number;\n\n /** Title of the parent menu */\n title?: string;\n\n /** Array of menu actions/items to display\n * - type {@link ActionMenuAction}[]\n */\n items: ActionMenuAction[];\n\n /** Whether the menu is disabled\n * @default false\n */\n disabled?: boolean;\n\n /** Callback when the menu closes */\n onClose?: () => void;\n\n /** Test ID for the trigger button */\n triggerTestId?: string;\n\n /** Test ID for the menu */\n menuTestId?: string;\n\n /** Callback when the selection changes */\n onSelectionChange?: (key: string) => void;\n\n /** The key of the selected item */\n selectedKey?: string;\n\n /** The keys of the disabled items */\n disabledKeys?: string[];\n}\n\n/**\n * An uncontrolled component that displays either a popover menu or an action menu\n * depending on device capabilities (touch detection and screen size) when the menu trigger is pressed.\n *\n * API:\n * - {@link MenuProps}\n */\nexport function MenuTrigger({\n renderTrigger,\n size = 24,\n title,\n items,\n disabled,\n onClose,\n triggerTestId = \"MenuTrigger-Trigger\",\n menuTestId,\n onSelectionChange,\n selectedKey,\n disabledKeys,\n}: MenuProps) {\n const isMobile = useBreakpoint(BREAKPOINTS.SMALL);\n const [isOpen, setIsOpen] = useState(false);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const menuItems = useMemo(\n () => items.map((item) => ({ ...item, id: item.key })),\n [items],\n );\n\n const handleSelectionChange = (key: string) => {\n onSelectionChange?.(key);\n setIsOpen(false);\n };\n\n const triggerButton = renderTrigger ? (\n renderTrigger({\n isOpen,\n disabled,\n setIsOpen,\n })\n ) : (\n <button\n data-testid={triggerTestId}\n disabled={disabled}\n className=\"proton-MenuTrigger__button\"\n ref={triggerRef}\n onClick={() => setIsOpen(!isOpen)}\n type=\"button\"\n aria-label=\"Open menu\"\n aria-expanded={isOpen}\n >\n <EllipsisIcon size={size} />\n </button>\n );\n\n if (isMobile) {\n return (\n <>\n {triggerButton}\n {isOpen && (\n <ActionMenu\n actions={menuItems}\n title={title}\n isOpen={isOpen}\n onClose={() => {\n setIsOpen(false);\n onClose?.();\n }}\n showCancel\n data-testid={menuTestId}\n selectionMode=\"single\"\n onSelectionChange={(keys) => {\n const nextKey = Array.from(keys)[0];\n if (nextKey) handleSelectionChange(nextKey as string);\n }}\n selectedKeys={selectedKey ? [selectedKey] : undefined}\n disabledKeys={disabledKeys}\n />\n )}\n </>\n );\n }\n\n return (\n <PopoverMenu\n trigger={triggerButton}\n items={menuItems}\n isOpen={isOpen}\n onOpenChange={setIsOpen}\n selectedKey={selectedKey}\n onSelectionChange={handleSelectionChange}\n disabledKeys={disabledKeys}\n title={title}\n />\n );\n}\n\nMenuTrigger.displayName = \"ProtonUIMenuTrigger\";\n"],"names":["MenuTrigger","renderTrigger","size","title","items","disabled","onClose","triggerTestId","menuTestId","onSelectionChange","selectedKey","disabledKeys","isMobile","useBreakpoint","BREAKPOINTS","isOpen","setIsOpen","useState","triggerRef","useRef","menuItems","useMemo","item","handleSelectionChange","key","triggerButton","jsx","EllipsisIcon","jsxs","Fragment","ActionMenu","keys","nextKey","PopoverMenu"],"mappings":"ycAqEO,SAASA,EAAY,CAC1B,cAAAC,EACA,KAAAC,EAAO,GACP,MAAAC,EACA,MAAAC,EACA,SAAAC,EACA,QAAAC,EACA,cAAAC,EAAgB,sBAChB,WAAAC,EACA,kBAAAC,EACA,YAAAC,EACA,aAAAC,CACF,EAAc,CACZ,MAAMC,EAAWC,EAAAA,cAAcC,EAAAA,YAAY,KAAK,EAC1C,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAK,EACpCC,EAAaC,EAAAA,OAA0B,IAAI,EAE3CC,EAAYC,EAAAA,QAChB,IAAMjB,EAAM,IAAKkB,IAAU,CAAE,GAAGA,EAAM,GAAIA,EAAK,GAAA,EAAM,EACrD,CAAClB,CAAK,CAAA,EAGFmB,EAAyBC,GAAgB,CAC7Cf,GAAA,MAAAA,EAAoBe,GACpBR,EAAU,EAAK,CACjB,EAEMS,EAAgBxB,EACpBA,EAAc,CACZ,OAAAc,EACA,SAAAV,EACA,UAAAW,CAAA,CACD,EAEDU,EAAAA,kBAAAA,IAAC,SAAA,CACC,cAAanB,EACb,SAAAF,EACA,UAAU,6BACV,IAAKa,EACL,QAAS,IAAMF,EAAU,CAACD,CAAM,EAChC,KAAK,SACL,aAAW,YACX,gBAAeA,EAEf,SAAAW,EAAAA,kBAAAA,IAACC,YAAa,KAAAzB,CAAA,CAAY,CAAA,CAAA,EAI9B,OAAIU,EAEAgB,EAAAA,kBAAAA,KAAAC,6BAAA,CACG,SAAA,CAAAJ,EACAV,GACCW,EAAAA,kBAAAA,IAACI,EAAAA,WAAA,CACC,QAASV,EACT,MAAAjB,EACA,OAAAY,EACA,QAAS,IAAM,CACbC,EAAU,EAAK,EACfV,GAAA,MAAAA,GACF,EACA,WAAU,GACV,cAAaE,EACb,cAAc,SACd,kBAAoBuB,GAAS,CAC3B,MAAMC,EAAU,MAAM,KAAKD,CAAI,EAAE,CAAC,EAC9BC,KAA+BA,CAAiB,CACtD,EACA,aAActB,EAAc,CAACA,CAAW,EAAI,OAC5C,aAAAC,CAAA,CAAA,CACF,EAEJ,EAKFe,EAAAA,kBAAAA,IAACO,EAAAA,YAAA,CACC,QAASR,EACT,MAAOL,EACP,OAAAL,EACA,aAAcC,EACd,YAAAN,EACA,kBAAmBa,EACnB,aAAAZ,EACA,MAAAR,CAAA,CAAA,CAGN,CAEAH,EAAY,YAAc"}