se-design 1.0.75 → 1.0.76-dev1

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 (483) hide show
  1. package/dist/assets/style.css +1 -1
  2. package/dist/components/AccessibleDiv/index.d.ts +24 -0
  3. package/dist/components/Checkbox/index.d.ts +12 -0
  4. package/dist/components/CustomAccordion/index.d.ts +1 -0
  5. package/dist/components/CustomModal/index.d.ts +15 -12
  6. package/dist/components/DatePicker/useDatePickerA11y.d.ts +50 -0
  7. package/dist/components/Dropdown/index.d.ts +13 -0
  8. package/dist/components/Icon/index.d.ts +8 -2
  9. package/dist/components/InputWithIcon/index.d.ts +9 -1
  10. package/dist/components/LabelChip/index.d.ts +1 -0
  11. package/dist/components/Modal/index.d.ts +1 -0
  12. package/dist/components/PhoneInput/index.d.ts +13 -5
  13. package/dist/components/Popover/index.d.ts +2 -0
  14. package/dist/components/SidebarOverlay/index.d.ts +8 -0
  15. package/dist/components/index.d.ts +1 -0
  16. package/dist/index.js +144 -133
  17. package/dist/index.js.map +1 -1
  18. package/dist/index10.js +23 -59
  19. package/dist/index10.js.map +1 -1
  20. package/dist/index100.js +1 -1
  21. package/dist/index100.js.map +1 -1
  22. package/dist/index101.js +1 -1
  23. package/dist/index101.js.map +1 -1
  24. package/dist/index102.js +2 -2
  25. package/dist/index102.js.map +1 -1
  26. package/dist/index103.js +2 -2
  27. package/dist/index103.js.map +1 -1
  28. package/dist/index104.js +1 -1
  29. package/dist/index104.js.map +1 -1
  30. package/dist/index105.js +1 -1
  31. package/dist/index105.js.map +1 -1
  32. package/dist/index106.js +1 -1
  33. package/dist/index106.js.map +1 -1
  34. package/dist/index107.js +2 -2
  35. package/dist/index107.js.map +1 -1
  36. package/dist/index108.js +2 -2
  37. package/dist/index108.js.map +1 -1
  38. package/dist/index109.js +2 -2
  39. package/dist/index109.js.map +1 -1
  40. package/dist/index11.js +70 -63
  41. package/dist/index11.js.map +1 -1
  42. package/dist/index110.js +2 -2
  43. package/dist/index110.js.map +1 -1
  44. package/dist/index111.js +1 -1
  45. package/dist/index111.js.map +1 -1
  46. package/dist/index112.js +1 -1
  47. package/dist/index112.js.map +1 -1
  48. package/dist/index113.js +2 -2
  49. package/dist/index113.js.map +1 -1
  50. package/dist/index114.js +2 -2
  51. package/dist/index114.js.map +1 -1
  52. package/dist/index115.js +1 -1
  53. package/dist/index115.js.map +1 -1
  54. package/dist/index116.js +1 -1
  55. package/dist/index116.js.map +1 -1
  56. package/dist/index117.js +1 -1
  57. package/dist/index117.js.map +1 -1
  58. package/dist/index118.js +2 -2
  59. package/dist/index118.js.map +1 -1
  60. package/dist/index119.js +1 -1
  61. package/dist/index119.js.map +1 -1
  62. package/dist/index12.js +71 -34
  63. package/dist/index12.js.map +1 -1
  64. package/dist/index120.js +2 -2
  65. package/dist/index120.js.map +1 -1
  66. package/dist/index121.js +2 -2
  67. package/dist/index121.js.map +1 -1
  68. package/dist/index122.js +2 -2
  69. package/dist/index122.js.map +1 -1
  70. package/dist/index123.js +2 -2
  71. package/dist/index123.js.map +1 -1
  72. package/dist/index124.js +2 -2
  73. package/dist/index124.js.map +1 -1
  74. package/dist/index125.js +2 -2
  75. package/dist/index125.js.map +1 -1
  76. package/dist/index126.js +1 -1
  77. package/dist/index126.js.map +1 -1
  78. package/dist/index127.js +1 -1
  79. package/dist/index127.js.map +1 -1
  80. package/dist/index128.js +1 -1
  81. package/dist/index128.js.map +1 -1
  82. package/dist/index129.js +1 -1
  83. package/dist/index129.js.map +1 -1
  84. package/dist/index13.js +50 -14
  85. package/dist/index13.js.map +1 -1
  86. package/dist/index130.js +2 -2
  87. package/dist/index130.js.map +1 -1
  88. package/dist/index131.js +2 -2
  89. package/dist/index131.js.map +1 -1
  90. package/dist/index132.js +1 -1
  91. package/dist/index132.js.map +1 -1
  92. package/dist/index133.js +1 -1
  93. package/dist/index133.js.map +1 -1
  94. package/dist/index134.js +2 -2
  95. package/dist/index134.js.map +1 -1
  96. package/dist/index135.js +1 -1
  97. package/dist/index135.js.map +1 -1
  98. package/dist/index136.js +1 -1
  99. package/dist/index136.js.map +1 -1
  100. package/dist/index137.js +1 -1
  101. package/dist/index137.js.map +1 -1
  102. package/dist/index138.js +1 -1
  103. package/dist/index138.js.map +1 -1
  104. package/dist/index139.js +1 -1
  105. package/dist/index139.js.map +1 -1
  106. package/dist/index14.js +15 -9
  107. package/dist/index14.js.map +1 -1
  108. package/dist/index140.js +1 -1
  109. package/dist/index140.js.map +1 -1
  110. package/dist/index141.js +2 -2
  111. package/dist/index141.js.map +1 -1
  112. package/dist/index142.js +1 -1
  113. package/dist/index142.js.map +1 -1
  114. package/dist/index143.js +2 -2
  115. package/dist/index143.js.map +1 -1
  116. package/dist/index144.js +2 -2
  117. package/dist/index144.js.map +1 -1
  118. package/dist/index145.js +1 -1
  119. package/dist/index145.js.map +1 -1
  120. package/dist/index146.js +2 -2
  121. package/dist/index146.js.map +1 -1
  122. package/dist/index147.js +2 -2
  123. package/dist/index147.js.map +1 -1
  124. package/dist/index148.js +1 -1
  125. package/dist/index148.js.map +1 -1
  126. package/dist/index149.js +1 -1
  127. package/dist/index149.js.map +1 -1
  128. package/dist/index15.js +10 -218
  129. package/dist/index15.js.map +1 -1
  130. package/dist/index150.js +2 -2
  131. package/dist/index150.js.map +1 -1
  132. package/dist/index151.js +2 -2
  133. package/dist/index151.js.map +1 -1
  134. package/dist/index152.js +1 -1
  135. package/dist/index152.js.map +1 -1
  136. package/dist/index153.js +2 -2
  137. package/dist/index153.js.map +1 -1
  138. package/dist/index154.js +2 -2
  139. package/dist/index154.js.map +1 -1
  140. package/dist/index155.js +1 -1
  141. package/dist/index155.js.map +1 -1
  142. package/dist/index156.js +1 -1
  143. package/dist/index156.js.map +1 -1
  144. package/dist/index157.js +1 -1
  145. package/dist/index157.js.map +1 -1
  146. package/dist/index158.js +1 -1
  147. package/dist/index158.js.map +1 -1
  148. package/dist/index159.js +1 -1
  149. package/dist/index159.js.map +1 -1
  150. package/dist/index16.js +220 -60
  151. package/dist/index16.js.map +1 -1
  152. package/dist/index160.js +1 -1
  153. package/dist/index160.js.map +1 -1
  154. package/dist/index161.js +1 -1
  155. package/dist/index161.js.map +1 -1
  156. package/dist/index162.js +1 -1
  157. package/dist/index162.js.map +1 -1
  158. package/dist/index163.js +1 -1
  159. package/dist/index163.js.map +1 -1
  160. package/dist/index164.js +1 -1
  161. package/dist/index164.js.map +1 -1
  162. package/dist/index165.js +1 -1
  163. package/dist/index165.js.map +1 -1
  164. package/dist/index166.js +1 -1
  165. package/dist/index166.js.map +1 -1
  166. package/dist/index167.js +1 -1
  167. package/dist/index167.js.map +1 -1
  168. package/dist/index168.js +1 -1
  169. package/dist/index168.js.map +1 -1
  170. package/dist/index169.js +1 -1
  171. package/dist/index169.js.map +1 -1
  172. package/dist/index17.js +60 -99
  173. package/dist/index17.js.map +1 -1
  174. package/dist/index170.js +1 -1
  175. package/dist/index170.js.map +1 -1
  176. package/dist/index171.js +1 -1
  177. package/dist/index171.js.map +1 -1
  178. package/dist/index172.js +1 -1
  179. package/dist/index172.js.map +1 -1
  180. package/dist/index173.js +2 -2
  181. package/dist/index173.js.map +1 -1
  182. package/dist/index174.js +1 -1
  183. package/dist/index174.js.map +1 -1
  184. package/dist/index175.js +1 -1
  185. package/dist/index175.js.map +1 -1
  186. package/dist/index176.js +1 -1
  187. package/dist/index176.js.map +1 -1
  188. package/dist/index177.js +2 -2
  189. package/dist/index177.js.map +1 -1
  190. package/dist/index178.js +1 -1
  191. package/dist/index178.js.map +1 -1
  192. package/dist/index179.js +1 -1
  193. package/dist/index179.js.map +1 -1
  194. package/dist/index18.js +95 -282
  195. package/dist/index18.js.map +1 -1
  196. package/dist/index180.js +2 -2
  197. package/dist/index180.js.map +1 -1
  198. package/dist/index181.js +1 -1
  199. package/dist/index181.js.map +1 -1
  200. package/dist/index182.js +1 -1
  201. package/dist/index182.js.map +1 -1
  202. package/dist/index183.js +1 -1
  203. package/dist/index183.js.map +1 -1
  204. package/dist/index184.js +2 -2
  205. package/dist/index184.js.map +1 -1
  206. package/dist/index185.js +1 -1
  207. package/dist/index185.js.map +1 -1
  208. package/dist/index186.js +1 -1
  209. package/dist/index186.js.map +1 -1
  210. package/dist/index187.js +2 -2
  211. package/dist/index187.js.map +1 -1
  212. package/dist/index188.js +1 -1
  213. package/dist/index188.js.map +1 -1
  214. package/dist/index189.js +2 -2
  215. package/dist/index189.js.map +1 -1
  216. package/dist/index19.js +317 -16
  217. package/dist/index19.js.map +1 -1
  218. package/dist/index190.js +2 -149
  219. package/dist/index190.js.map +1 -1
  220. package/dist/index191.js +2 -9
  221. package/dist/index191.js.map +1 -1
  222. package/dist/index192.js +2 -6
  223. package/dist/index192.js.map +1 -1
  224. package/dist/index193.js +2 -5
  225. package/dist/index193.js.map +1 -1
  226. package/dist/index194.js +2 -40
  227. package/dist/index194.js.map +1 -1
  228. package/dist/index195.js +2 -59
  229. package/dist/index195.js.map +1 -1
  230. package/dist/index196.js +2 -23
  231. package/dist/index196.js.map +1 -1
  232. package/dist/index197.js +152 -0
  233. package/dist/index197.js.map +1 -0
  234. package/dist/index198.js +12 -0
  235. package/dist/index198.js.map +1 -0
  236. package/dist/index199.js +5 -23
  237. package/dist/index199.js.map +1 -1
  238. package/dist/index20.js +15 -31
  239. package/dist/index20.js.map +1 -1
  240. package/dist/index200.js +8 -0
  241. package/dist/index200.js.map +1 -0
  242. package/dist/index201.js +36 -80
  243. package/dist/index201.js.map +1 -1
  244. package/dist/index206.js +26 -0
  245. package/dist/index206.js.map +1 -0
  246. package/dist/index207.js +71 -0
  247. package/dist/index207.js.map +1 -0
  248. package/dist/index21.js +33 -61
  249. package/dist/index21.js.map +1 -1
  250. package/dist/{index210.js → index215.js} +1 -1
  251. package/dist/{index210.js.map → index215.js.map} +1 -1
  252. package/dist/index22.js +57 -76
  253. package/dist/index22.js.map +1 -1
  254. package/dist/{index218.js → index223.js} +1 -1
  255. package/dist/{index218.js.map → index223.js.map} +1 -1
  256. package/dist/{index221.js → index226.js} +2 -2
  257. package/dist/{index221.js.map → index226.js.map} +1 -1
  258. package/dist/index23.js +83 -21
  259. package/dist/index23.js.map +1 -1
  260. package/dist/index235.js +171 -8
  261. package/dist/index235.js.map +1 -1
  262. package/dist/index236.js +3 -9
  263. package/dist/index236.js.map +1 -1
  264. package/dist/index238.js +18 -169
  265. package/dist/index238.js.map +1 -1
  266. package/dist/index239.js +10 -11
  267. package/dist/index239.js.map +1 -1
  268. package/dist/index24.js +20 -222
  269. package/dist/index24.js.map +1 -1
  270. package/dist/index240.js +8 -4
  271. package/dist/index240.js.map +1 -1
  272. package/dist/index241.js +4 -5
  273. package/dist/index241.js.map +1 -1
  274. package/dist/index242.js +168 -36
  275. package/dist/index242.js.map +1 -1
  276. package/dist/index243.js +11 -2
  277. package/dist/index243.js.map +1 -1
  278. package/dist/index244.js +5 -7
  279. package/dist/index244.js.map +1 -1
  280. package/dist/index245.js +5 -326
  281. package/dist/index245.js.map +1 -1
  282. package/dist/index246.js +36 -48
  283. package/dist/index246.js.map +1 -1
  284. package/dist/index247.js +2 -2
  285. package/dist/index248.js +7 -75
  286. package/dist/index248.js.map +1 -1
  287. package/dist/index249.js +308 -74
  288. package/dist/index249.js.map +1 -1
  289. package/dist/index25.js +289 -43
  290. package/dist/index25.js.map +1 -1
  291. package/dist/index250.js +45 -47
  292. package/dist/index250.js.map +1 -1
  293. package/dist/index251.js +2 -8
  294. package/dist/index251.js.map +1 -1
  295. package/dist/index252.js +75 -4
  296. package/dist/index252.js.map +1 -1
  297. package/dist/index253.js +89 -48
  298. package/dist/index253.js.map +1 -1
  299. package/dist/index254.js +52 -2
  300. package/dist/index254.js.map +1 -1
  301. package/dist/index255.js +8 -2
  302. package/dist/index255.js.map +1 -1
  303. package/dist/index256.js +8 -0
  304. package/dist/index256.js.map +1 -0
  305. package/dist/index257.js +55 -0
  306. package/dist/index257.js.map +1 -0
  307. package/dist/index258.js +5 -0
  308. package/dist/index258.js.map +1 -0
  309. package/dist/index259.js +5 -0
  310. package/dist/index259.js.map +1 -0
  311. package/dist/index26.js +48 -23
  312. package/dist/index26.js.map +1 -1
  313. package/dist/index27.js +21 -81
  314. package/dist/index27.js.map +1 -1
  315. package/dist/index28.js +101 -138
  316. package/dist/index28.js.map +1 -1
  317. package/dist/index29.js +139 -128
  318. package/dist/index29.js.map +1 -1
  319. package/dist/index3.js +57 -98
  320. package/dist/index3.js.map +1 -1
  321. package/dist/index30.js +133 -69
  322. package/dist/index30.js.map +1 -1
  323. package/dist/index31.js +67 -96
  324. package/dist/index31.js.map +1 -1
  325. package/dist/index32.js +96 -71
  326. package/dist/index32.js.map +1 -1
  327. package/dist/index33.js +70 -38
  328. package/dist/index33.js.map +1 -1
  329. package/dist/index34.js +40 -71
  330. package/dist/index34.js.map +1 -1
  331. package/dist/index35.js +67 -82
  332. package/dist/index35.js.map +1 -1
  333. package/dist/index36.js +99 -54
  334. package/dist/index36.js.map +1 -1
  335. package/dist/index37.js +53 -280
  336. package/dist/index37.js.map +1 -1
  337. package/dist/index38.js +281 -70
  338. package/dist/index38.js.map +1 -1
  339. package/dist/index39.js +69 -80
  340. package/dist/index39.js.map +1 -1
  341. package/dist/index4.js +102 -42
  342. package/dist/index4.js.map +1 -1
  343. package/dist/index40.js +82 -32
  344. package/dist/index40.js.map +1 -1
  345. package/dist/index41.js +26 -44
  346. package/dist/index41.js.map +1 -1
  347. package/dist/index42.js +45 -67
  348. package/dist/index42.js.map +1 -1
  349. package/dist/index43.js +65 -49
  350. package/dist/index43.js.map +1 -1
  351. package/dist/index44.js +53 -139
  352. package/dist/index44.js.map +1 -1
  353. package/dist/index45.js +132 -179
  354. package/dist/index45.js.map +1 -1
  355. package/dist/index46.js +194 -35
  356. package/dist/index46.js.map +1 -1
  357. package/dist/index47.js +34 -29
  358. package/dist/index47.js.map +1 -1
  359. package/dist/index48.js +31 -145
  360. package/dist/index48.js.map +1 -1
  361. package/dist/index49.js +131 -70
  362. package/dist/index49.js.map +1 -1
  363. package/dist/index5.js +40 -315
  364. package/dist/index5.js.map +1 -1
  365. package/dist/index50.js +80 -371
  366. package/dist/index50.js.map +1 -1
  367. package/dist/index51.js +451 -91
  368. package/dist/index51.js.map +1 -1
  369. package/dist/index52.js +98 -38
  370. package/dist/index52.js.map +1 -1
  371. package/dist/index53.js +35 -35
  372. package/dist/index53.js.map +1 -1
  373. package/dist/index54.js +35 -90
  374. package/dist/index54.js.map +1 -1
  375. package/dist/index55.js +89 -159
  376. package/dist/index55.js.map +1 -1
  377. package/dist/index56.js +157 -143
  378. package/dist/index56.js.map +1 -1
  379. package/dist/index57.js +149 -33
  380. package/dist/index57.js.map +1 -1
  381. package/dist/index58.js +33 -86
  382. package/dist/index58.js.map +1 -1
  383. package/dist/index59.js +80 -113
  384. package/dist/index59.js.map +1 -1
  385. package/dist/index6.js +323 -43
  386. package/dist/index6.js.map +1 -1
  387. package/dist/index60.js +114 -62
  388. package/dist/index60.js.map +1 -1
  389. package/dist/index61.js +62 -147
  390. package/dist/index61.js.map +1 -1
  391. package/dist/index62.js +146 -312
  392. package/dist/index62.js.map +1 -1
  393. package/dist/index63.js +317 -44
  394. package/dist/index63.js.map +1 -1
  395. package/dist/index64.js +44 -143
  396. package/dist/index64.js.map +1 -1
  397. package/dist/index65.js +145 -12
  398. package/dist/index65.js.map +1 -1
  399. package/dist/index66.js +10 -44
  400. package/dist/index66.js.map +1 -1
  401. package/dist/index67.js +42 -15
  402. package/dist/index67.js.map +1 -1
  403. package/dist/index68.js +76 -48
  404. package/dist/index68.js.map +1 -1
  405. package/dist/index69.js +18 -58
  406. package/dist/index69.js.map +1 -1
  407. package/dist/index7.js +44 -51
  408. package/dist/index7.js.map +1 -1
  409. package/dist/index70.js +66 -5
  410. package/dist/index70.js.map +1 -1
  411. package/dist/index71.js +25 -7
  412. package/dist/index71.js.map +1 -1
  413. package/dist/index72.js +105 -0
  414. package/dist/index72.js.map +1 -0
  415. package/dist/index73.js +62 -2
  416. package/dist/index73.js.map +1 -1
  417. package/dist/index74.js +21 -2
  418. package/dist/index74.js.map +1 -1
  419. package/dist/index75.js +5 -2
  420. package/dist/index75.js.map +1 -1
  421. package/dist/index76.js +54 -2
  422. package/dist/index76.js.map +1 -1
  423. package/dist/index77.js +24 -2
  424. package/dist/index77.js.map +1 -1
  425. package/dist/index78.js +9 -2
  426. package/dist/index78.js.map +1 -1
  427. package/dist/index8.js +48 -85
  428. package/dist/index8.js.map +1 -1
  429. package/dist/index80.js +2 -2
  430. package/dist/index80.js.map +1 -1
  431. package/dist/index81.js +2 -2
  432. package/dist/index81.js.map +1 -1
  433. package/dist/index82.js +1 -1
  434. package/dist/index82.js.map +1 -1
  435. package/dist/index83.js +2 -2
  436. package/dist/index83.js.map +1 -1
  437. package/dist/index84.js +1 -1
  438. package/dist/index84.js.map +1 -1
  439. package/dist/index85.js +1 -1
  440. package/dist/index85.js.map +1 -1
  441. package/dist/index86.js +1 -1
  442. package/dist/index86.js.map +1 -1
  443. package/dist/index87.js +1 -1
  444. package/dist/index87.js.map +1 -1
  445. package/dist/index88.js +1 -1
  446. package/dist/index88.js.map +1 -1
  447. package/dist/index89.js +1 -1
  448. package/dist/index89.js.map +1 -1
  449. package/dist/index9.js +91 -27
  450. package/dist/index9.js.map +1 -1
  451. package/dist/index90.js +1 -1
  452. package/dist/index90.js.map +1 -1
  453. package/dist/index91.js +1 -1
  454. package/dist/index91.js.map +1 -1
  455. package/dist/index92.js +1 -1
  456. package/dist/index92.js.map +1 -1
  457. package/dist/index93.js +1 -1
  458. package/dist/index93.js.map +1 -1
  459. package/dist/index94.js +1 -1
  460. package/dist/index94.js.map +1 -1
  461. package/dist/index95.js +1 -1
  462. package/dist/index95.js.map +1 -1
  463. package/dist/index96.js +1 -1
  464. package/dist/index96.js.map +1 -1
  465. package/dist/index97.js +1 -1
  466. package/dist/index97.js.map +1 -1
  467. package/dist/index98.js +1 -1
  468. package/dist/index98.js.map +1 -1
  469. package/dist/index99.js +1 -1
  470. package/dist/index99.js.map +1 -1
  471. package/package.json +1 -1
  472. package/dist/index230.js +0 -7
  473. package/dist/index230.js.map +0 -1
  474. package/dist/index232.js +0 -25
  475. package/dist/index232.js.map +0 -1
  476. package/dist/index233.js +0 -57
  477. package/dist/index233.js.map +0 -1
  478. package/dist/index234.js +0 -22
  479. package/dist/index234.js.map +0 -1
  480. package/dist/index237.js +0 -8
  481. package/dist/index237.js.map +0 -1
  482. package/dist/index79.js +0 -5
  483. package/dist/index79.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index56.js","sources":["../src/components/OTPInput/index.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, KeyboardEvent, ChangeEvent, ClipboardEvent, FC } from 'react';\nimport { useStableId } from '../../utils/useStableId';\nimport './style.scss';\n\nexport interface OTPInputProps {\n length?: number;\n onChange?: (value: string) => void;\n onComplete?: (value: string) => void;\n label?: string;\n disabled?: boolean;\n className?: string;\n autoFocus?: boolean;\n error?: boolean;\n errorMessage?: string;\n validateOnBlur?: boolean;\n onValidate?: (value: string) => boolean | string;\n id?: string;\n}\n\nexport const OTPInput: FC<OTPInputProps> = ({\n length = 6,\n onChange,\n onComplete,\n label,\n disabled = false,\n className = '',\n autoFocus = true,\n error = false,\n errorMessage,\n validateOnBlur = false,\n onValidate,\n id\n}) => {\n const [values, setValues] = useState<string[]>(Array(length).fill(''));\n const [internalError, setInternalError] = useState<string | null>(null);\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n const isBackspacePressed = useRef<boolean>(false);\n \n // Generate stable IDs for ARIA attributes\n const baseId = useStableId(id, 'se-otp-input');\n const labelId = `${baseId}-label`;\n const errorId = `${baseId}-error`;\n\n // Helper: Check if a string is a single digit\n const isDigit = (char: string): boolean => /^\\d$/.test(char);\n\n // Helper: Check if OTP is complete\n const isComplete = (otpValue: string): boolean => {\n return otpValue.length === length && values.every((val) => val !== '');\n };\n\n // Helper: Update value at specific index\n const updateValue = (index: number, value: string, shouldFocusNext = false) => {\n const newValues = [...values];\n newValues[index] = value;\n setValues(newValues);\n\n if (shouldFocusNext && value && index < length - 1) {\n focusInput(index + 1);\n }\n };\n\n // Helper: Clear value at specific index\n const clearValue = (index: number) => {\n updateValue(index, '');\n };\n\n // Helper: Focus input at index\n const focusInput = (index: number) => {\n inputRefs.current[index]?.focus();\n };\n\n useEffect(() => {\n if (autoFocus && inputRefs.current[0] && !disabled) {\n focusInput(0);\n }\n }, [autoFocus, disabled]);\n\n // Internal validation\n const validateOTP = (otpValue: string): string | null => {\n // Empty validation\n if (otpValue.length === 0) {\n return errorMessage || 'Please enter the verification code';\n }\n\n // Incomplete validation\n if (otpValue.length < length || !isComplete(otpValue)) {\n return errorMessage || 'Please enter all digits';\n }\n\n // Custom validation\n if (onValidate) {\n const validationResult = onValidate(otpValue);\n if (validationResult === false) {\n return errorMessage || 'Invalid verification code';\n }\n if (typeof validationResult === 'string') {\n return validationResult;\n }\n }\n\n return null;\n };\n\n useEffect(() => {\n const otpValue = values.join('');\n onChange?.(otpValue);\n\n // Clear error when user starts typing\n if (internalError && otpValue.length > 0) {\n setInternalError(null);\n }\n\n if (isComplete(otpValue)) {\n // Validate on complete\n if (onValidate) {\n const validationResult = onValidate(otpValue);\n if (validationResult === false || typeof validationResult === 'string') {\n const errorMsg =\n typeof validationResult === 'string' ? validationResult : errorMessage || 'Invalid verification code';\n setInternalError(errorMsg);\n } else {\n setInternalError(null);\n }\n }\n onComplete?.(otpValue);\n }\n }, [values, length, onChange, onComplete, onValidate, errorMessage]);\n\n const handleChange = (index: number, value: string) => {\n // Only allow single digit or empty\n if (value && !isDigit(value)) {\n return;\n }\n\n updateValue(index, value, true);\n };\n\n const handleKeyDown = (index: number, e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n const currentValue = values[index];\n\n // Handle backspace\n if (e.key === 'Backspace') {\n isBackspacePressed.current = true;\n if (currentValue) {\n clearValue(index);\n } else if (index > 0) {\n clearValue(index - 1);\n focusInput(index - 1);\n }\n // Reset backspace flag after a short delay\n setTimeout(() => {\n isBackspacePressed.current = false;\n }, 100);\n e.preventDefault();\n return;\n }\n\n // Handle delete\n if (e.key === 'Delete') {\n isBackspacePressed.current = true;\n clearValue(index);\n // Reset backspace flag after a short delay\n setTimeout(() => {\n isBackspacePressed.current = false;\n }, 100);\n e.preventDefault();\n return;\n }\n\n // Handle navigation keys\n const navigationHandlers: Record<string, () => void> = {\n ArrowLeft: () => index > 0 && focusInput(index - 1),\n ArrowRight: () => index < length - 1 && focusInput(index + 1),\n Home: () => focusInput(0),\n End: () => focusInput(length - 1)\n };\n\n if (navigationHandlers[e.key]) {\n navigationHandlers[e.key]();\n e.preventDefault();\n return;\n }\n\n // Allow digits, but prevent if already filled\n if (isDigit(e.key)) {\n if (currentValue) {\n updateValue(index, e.key, true);\n }\n }\n };\n\n const handlePaste = (e: ClipboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n e.preventDefault();\n const pastedData = e.clipboardData.getData('text/plain').trim();\n\n // Extract only digits\n const digits = pastedData.replace(/\\D/g, '').slice(0, length);\n\n if (digits.length > 0) {\n const newValues = [...values];\n\n // Fill inputs starting from the current index\n const startIndex = inputRefs.current.findIndex((ref) => ref === document.activeElement);\n const actualStartIndex = startIndex >= 0 ? startIndex : 0;\n\n for (let i = 0; i < digits.length && actualStartIndex + i < length; i++) {\n newValues[actualStartIndex + i] = digits[i];\n }\n\n setValues(newValues);\n\n // Focus the next empty input or the last input\n const nextEmptyIndex = newValues.findIndex((val, idx) => idx >= actualStartIndex && val === '');\n const focusIndex = nextEmptyIndex >= 0 ? nextEmptyIndex : Math.min(actualStartIndex + digits.length, length - 1);\n focusInput(focusIndex);\n }\n };\n\n const handleFocus = (index: number) => {\n inputRefs.current[index]?.select();\n };\n\n const handleBlur = () => {\n // Don't validate on blur if backspace/delete was just pressed\n if (validateOnBlur && !isBackspacePressed.current) {\n const otpValue = values.join('');\n const validationError = validateOTP(otpValue);\n setInternalError(validationError);\n }\n };\n\n const hasError = error || !!internalError;\n // Priority: errorMessage prop > internalError\n const displayError = hasError && (errorMessage || internalError);\n \n const ariaDescribedByError = displayError ? errorId : undefined;\n\n return (\n <div className={`se-design-otp-input ${className || ''}`} data-automation-id=\"otp-input-container\">\n {label && <div id={labelId} className=\"se-design-otp-input-label\">{label}</div>}\n <div className=\"flex items-center gap-[12px]\" role=\"group\" aria-labelledby={label ? labelId : undefined}>\n {values.map((value, index) => (\n <input\n key={index}\n ref={(el) => {\n inputRefs.current[index] = el;\n }}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={1}\n value={value}\n onChange={(e: ChangeEvent<HTMLInputElement>) => handleChange(index, e.target.value)}\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) => handleKeyDown(index, e)}\n onPaste={handlePaste}\n onFocus={() => handleFocus(index)}\n onBlur={handleBlur}\n disabled={disabled}\n className={`\n w-12 h-12 \n flex flex-col items-start \n text-center text-lg font-medium\n border rounded-md\n outline-none\n transition-colors\n disabled:bg-gray-50 disabled:cursor-not-allowed\n ${\n disabled\n ? 'border-[var(--color-gray-300)] text-gray-400'\n : hasError\n ? 'border-[var(--color-red-500)] text-gray-900 focus:border-[var(--color-red-500)] focus:ring-1 focus:ring-[var(--color-red-500)]'\n : 'border-[var(--color-gray-600)] text-gray-900 focus:border-[var(--color-blue-500)] focus:ring-1 focus:ring-[var(--color-blue-500)]'\n }\n `}\n style={{\n gap: 'var(--Spacer-6px, 6px)'\n }}\n aria-label={`OTP digit ${index + 1} of ${length}`}\n aria-invalid={hasError}\n aria-describedby={ariaDescribedByError}\n data-automation-id={`otp-input-${index}`}\n />\n ))}\n </div>\n {displayError && <div id={errorId} className=\"se-design-otp-input-error\" role=\"alert\">{displayError}</div>}\n </div>\n );\n};\n"],"names":["OTPInput","length","onChange","onComplete","label","disabled","className","autoFocus","error","errorMessage","validateOnBlur","onValidate","id","values","setValues","useState","Array","fill","internalError","setInternalError","inputRefs","useRef","isBackspacePressed","baseId","useStableId","labelId","errorId","isDigit","char","test","isComplete","otpValue","every","val","updateValue","index","value","shouldFocusNext","newValues","focusInput","clearValue","current","focus","useEffect","validateOTP","validationResult","join","handleChange","handleKeyDown","e","currentValue","key","setTimeout","preventDefault","navigationHandlers","ArrowLeft","ArrowRight","Home","End","handlePaste","digits","clipboardData","getData","trim","replace","slice","startIndex","findIndex","ref","document","activeElement","actualStartIndex","i","nextEmptyIndex","idx","focusIndex","Math","min","handleFocus","select","handleBlur","validationError","hasError","displayError","ariaDescribedByError","undefined","React","createElement","role","map","el","type","inputMode","maxLength","target","onKeyDown","onPaste","onFocus","onBlur","style","gap"],"mappings":"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"}
1
+ {"version":3,"file":"index56.js","sources":["../src/components/SnackBar/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { Icon, IconProps } from '../Icon';\nimport { ProgressBar } from '../ProgressBar';\nimport './style.scss';\n\nexport type SnackbarPosition =\n | 'top-right'\n | 'top-left'\n | 'bottom-right'\n | 'bottom-left'\n | 'top-center'\n | 'bottom-center';\n\nexport type SnackbarVariant = 'default' | 'success' | 'warning' | 'error' | 'info';\n\nexport type SnackbarAction = {\n label: string;\n onClick: () => void;\n variant?: 'primary' | 'secondary';\n};\n\nexport type SnackbarItem = {\n id: string | number;\n name: string;\n type: 'file' | 'folder';\n fileType?: 'doc' | 'pdf' | 'image' | 'other';\n icon?: string;\n onClick?: () => void;\n};\n\nexport interface SnackbarProps {\n /** Whether the snackbar is open */\n open: boolean;\n /** Function to close the snackbar */\n onClose: () => void;\n /** Title text displayed prominently */\n title?: string;\n /** Description text displayed below title */\n description?: string;\n /** Position of the snackbar on screen */\n position?: SnackbarPosition;\n /** Visual variant of the snackbar */\n variant?: SnackbarVariant;\n /** Auto-hide duration in milliseconds (0 = no auto-hide) */\n autoHideDuration?: number;\n /** Whether to show close button */\n showCloseButton?: boolean;\n /** Optional action button */\n action?: SnackbarAction;\n /** Custom className for additional styling */\n className?: string;\n /** Custom styles */\n style?: React.CSSProperties;\n /** Whether to show progress indicator */\n showProgress?: boolean;\n /** Progress value (0-100) */\n progress?: number;\n /** Icon props object (name, fill, stroke, rotation, size, etc.) */\n iconProps?: Omit<IconProps, 'className'>;\n /** List of items to display in expandable section */\n items?: SnackbarItem[];\n /** Whether items list is expanded by default */\n defaultExpanded?: boolean;\n /** Compact mode - renders a simple inline notification with just icon and title */\n compact?: boolean;\n /** Automation ID for testing */\n automationId?: string;\n}\n\nexport const Snackbar: React.FC<SnackbarProps> = ({\n open,\n onClose,\n title,\n description,\n position = 'bottom-right',\n variant = 'default',\n autoHideDuration = 6000,\n showCloseButton = true,\n action,\n className = '',\n style,\n showProgress = false,\n progress = 0,\n iconProps,\n items,\n defaultExpanded = false,\n compact = false,\n automationId = ''\n}) => {\n const [isVisible, setIsVisible] = useState(false);\n const [isExiting, setIsExiting] = useState(false);\n const [isExpanded, setIsExpanded] = useState(defaultExpanded);\n\n useEffect(() => {\n if (open) {\n setIsVisible(true);\n setIsExiting(false);\n\n // Auto-hide functionality\n if (autoHideDuration > 0) {\n const timer = setTimeout(() => {\n handleClose();\n }, autoHideDuration);\n\n return () => clearTimeout(timer);\n }\n }\n }, [open, autoHideDuration]);\n\n const handleClose = () => {\n setIsExiting(true);\n setTimeout(() => {\n setIsVisible(false);\n setIsExiting(false);\n onClose();\n }, 300); // Animation duration\n };\n\n const handleToggleExpanded = () => {\n setIsExpanded(!isExpanded);\n };\n\n const getFileIcon = (item: SnackbarItem) => {\n if (item.icon) return item.icon;\n\n if (item.type === 'folder') return 'folder-empty';\n if (item.type === 'file') return 'file-empty';\n\n return 'file-empty';\n\n // switch (item.fileType) {\n // case 'doc':\n // return 'docFile';\n // case 'pdf':\n // return 'pdf-file';\n // case 'image':\n // return 'file-empty';\n // default:\n // return 'file-empty';\n // }\n };\n\n if (!isVisible) return null;\n\n const getPositionClasses = () => {\n const positionMap = {\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'top-center': 'top-4 snackbar-center',\n 'bottom-center': 'bottom-4 snackbar-center'\n };\n return positionMap[position];\n };\n\n const getVariantClasses = () => {\n const variantMap = {\n default: 'snackbar-default',\n success: 'snackbar-success',\n warning: 'snackbar-warning',\n error: 'snackbar-error',\n info: 'snackbar-info'\n };\n return variantMap[variant];\n };\n\n const getContainerStyle = (): React.CSSProperties => {\n const baseStyle = style || {};\n\n if (position === 'top-center' || position === 'bottom-center') {\n return {\n ...baseStyle,\n left: '50%',\n // Initial transform for center - animation will override but preserve translateX(-50%)\n transform: 'translateX(-50%)'\n };\n }\n\n return baseStyle;\n };\n\n return (\n <div className=\"snackbar-backdrop fixed inset-0 z-[1000] pointer-events-none\">\n <div\n className={`\n snackbar-container\n ${getPositionClasses()}\n ${getVariantClasses()}\n ${isExiting ? 'snackbar-exit' : 'snackbar-enter'}\n ${compact ? 'snackbar-compact' : ''}\n ${className}\n `}\n style={getContainerStyle()}\n role=\"alert\"\n aria-live=\"polite\"\n data-automation-id={automationId}\n >\n {compact ? (\n // Compact mode - simple inline notification\n <div className=\"snackbar-compact-content\">\n {iconProps?.name && <Icon {...iconProps} size={iconProps.size ?? 16} className=\"snackbar-compact-icon\" />}\n {title && <span className=\"snackbar-compact-title\">{title}</span>}\n </div>\n ) : (\n // Full mode - standard snackbar with all features\n <div className=\"snackbar-content\">\n {/* Header with icon, title, expand/collapse, and close button */}\n <div className=\"snackbar-header\">\n <div className=\"snackbar-title-section\">\n {iconProps?.name && <Icon {...iconProps} size={iconProps.size ?? 20} className=\"snackbar-icon\" />}\n {title && <h4 className=\"snackbar-title\">{title}</h4>}\n </div>\n <div className=\"snackbar-header-actions\">\n {items && items.length > 0 && (\n <Icon\n name=\"chevron\"\n size={16}\n stroke=\"var(--color-gray-100)\"\n rotation={isExpanded ? '0' : '180'}\n className=\"snackbar-expand-icon\"\n onClick={handleToggleExpanded}\n />\n )}\n {showCloseButton && !showProgress && (\n <Icon\n name=\"close\"\n size={16}\n fill=\"var(--color-gray-600)\"\n className=\"snackbar-close-icon\"\n onClick={handleClose}\n />\n )}\n </div>\n </div>\n\n {/* Description */}\n {description && <div className=\"snackbar-description\">{description}</div>}\n\n {/* Progress bar */}\n {showProgress && (\n <div className=\"snackbar-progress-container\">\n {progress === -1 ? (\n <div className=\"snackbar-indeterminate-progress\">\n <div className=\"snackbar-progress-gradient\"></div>\n </div>\n ) : (\n <ProgressBar\n totalTasks={100}\n completedTasks={progress}\n needPercentageCompleted={false}\n progressBarColor=\"var(--color-green-500)\"\n />\n )}\n </div>\n )}\n\n {/* Expandable Items List */}\n {items && items.length > 0 && (\n <div\n className={`snackbar-items-container ${\n isExpanded ? 'snackbar-items-expanded' : 'snackbar-items-collapsed'\n }`}\n >\n <div className=\"snackbar-items-list\">\n {items.map((item) => (\n <div key={item.id} className=\"snackbar-item\" onClick={item.onClick}>\n <div className=\"snackbar-item-content\">\n <Icon name={getFileIcon(item)} size={16} className=\"snackbar-item-icon\" />\n <span className=\"snackbar-item-name\">{item.name}</span>\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Action button */}\n {action && (\n <div className=\"snackbar-actions\">\n <button\n className={`snackbar-action-button snackbar-action-${action.variant || 'primary'}`}\n onClick={action.onClick}\n >\n {action.label}\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n};\n"],"names":["Snackbar","open","onClose","title","description","position","variant","autoHideDuration","showCloseButton","action","className","style","showProgress","progress","iconProps","items","defaultExpanded","compact","automationId","isVisible","setIsVisible","useState","isExiting","setIsExiting","isExpanded","setIsExpanded","useEffect","timer","setTimeout","handleClose","clearTimeout","handleToggleExpanded","getFileIcon","item","icon","type","getPositionClasses","getVariantClasses","default","success","warning","error","info","getContainerStyle","baseStyle","left","transform","React","createElement","role","name","Icon","_extends","size","length","stroke","rotation","onClick","fill","ProgressBar","totalTasks","completedTasks","needPercentageCompleted","progressBarColor","map","key","id","label"],"mappings":"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"}
package/dist/index57.js CHANGED
@@ -1,36 +1,152 @@
1
- import e from "react";
2
- import { Icon as c } from "./index5.js";
3
- const i = ({
4
- className: a = "",
5
- message: t = "",
6
- backgroundColor: l = "var(--color-yellow-50)",
7
- textColor: r = "var(--color-yellow-800)",
8
- borderColor: o = "var(--color-yellow-200)",
9
- actionJSX: n = () => /* @__PURE__ */ e.createElement(e.Fragment, null)
10
- }) => /* @__PURE__ */ e.createElement("div", {
11
- className: `se-design-info-bar ${a} px-3 py-2 border rounded-[6px]`,
12
- style: {
13
- backgroundColor: l,
14
- borderColor: o,
15
- color: r
16
- }
17
- }, /* @__PURE__ */ e.createElement("div", {
18
- className: "info-bar-message flex items-center gap-2"
19
- }, /* @__PURE__ */ e.createElement("div", {
20
- style: {
21
- transform: "rotate(180deg)"
22
- }
23
- }, /* @__PURE__ */ e.createElement(c, {
24
- name: "info",
25
- stroke: r
26
- })), /* @__PURE__ */ e.createElement("span", {
27
- style: {
28
- color: r
29
- }
30
- }, t)), /* @__PURE__ */ e.createElement("div", {
31
- className: "info-bar-action ml-[22px]"
32
- }, n()));
1
+ import p, { useState as A, useRef as O, useEffect as j } from "react";
2
+ import { useStableId as W } from "./index199.js";
3
+ /* empty css */
4
+ const M = ({
5
+ length: n = 6,
6
+ onChange: h,
7
+ onComplete: k,
8
+ label: y,
9
+ disabled: i = !1,
10
+ className: H = "",
11
+ autoFocus: w = !0,
12
+ error: K = !1,
13
+ errorMessage: l,
14
+ validateOnBlur: L = !1,
15
+ onValidate: u,
16
+ id: _
17
+ }) => {
18
+ const [s, P] = A(Array(n).fill("")), [g, m] = A(null), f = O([]), d = O(!1), $ = W(_, "se-otp-input"), R = `${$}-label`, B = `${$}-error`, N = (t) => /^\d$/.test(t), T = (t) => t.length === n && s.every((e) => e !== ""), b = (t, e, r = !1) => {
19
+ const o = [...s];
20
+ o[t] = e, P(o), r && e && t < n - 1 && c(t + 1);
21
+ }, E = (t) => {
22
+ b(t, "");
23
+ }, c = (t) => {
24
+ f.current[t]?.focus();
25
+ };
26
+ j(() => {
27
+ w && f.current[0] && !i && c(0);
28
+ }, [w, i]);
29
+ const C = (t) => {
30
+ if (t.length === 0)
31
+ return l || "Please enter the verification code";
32
+ if (t.length < n || !T(t))
33
+ return l || "Please enter all digits";
34
+ if (u) {
35
+ const e = u(t);
36
+ if (e === !1)
37
+ return l || "Invalid verification code";
38
+ if (typeof e == "string")
39
+ return e;
40
+ }
41
+ return null;
42
+ };
43
+ j(() => {
44
+ const t = s.join("");
45
+ if (h?.(t), g && t.length > 0 && m(null), T(t)) {
46
+ if (u) {
47
+ const e = u(t);
48
+ m(e === !1 || typeof e == "string" ? typeof e == "string" ? e : l || "Invalid verification code" : null);
49
+ }
50
+ k?.(t);
51
+ }
52
+ }, [s, n, h, k, u, l]);
53
+ const F = (t, e) => {
54
+ e && !N(e) || b(t, e, !0);
55
+ }, V = (t, e) => {
56
+ if (i) return;
57
+ const r = s[t];
58
+ if (e.key === "Backspace") {
59
+ d.current = !0, r ? E(t) : t > 0 && (E(t - 1), c(t - 1)), setTimeout(() => {
60
+ d.current = !1;
61
+ }, 100), e.preventDefault();
62
+ return;
63
+ }
64
+ if (e.key === "Delete") {
65
+ d.current = !0, E(t), setTimeout(() => {
66
+ d.current = !1;
67
+ }, 100), e.preventDefault();
68
+ return;
69
+ }
70
+ const o = {
71
+ ArrowLeft: () => t > 0 && c(t - 1),
72
+ ArrowRight: () => t < n - 1 && c(t + 1),
73
+ Home: () => c(0),
74
+ End: () => c(n - 1)
75
+ };
76
+ if (o[e.key]) {
77
+ o[e.key](), e.preventDefault();
78
+ return;
79
+ }
80
+ N(e.key) && r && b(t, e.key, !0);
81
+ }, q = (t) => {
82
+ if (i) return;
83
+ t.preventDefault();
84
+ const r = t.clipboardData.getData("text/plain").trim().replace(/\D/g, "").slice(0, n);
85
+ if (r.length > 0) {
86
+ const o = [...s], x = f.current.findIndex((a) => a === document.activeElement), v = x >= 0 ? x : 0;
87
+ for (let a = 0; a < r.length && v + a < n; a++)
88
+ o[v + a] = r[a];
89
+ P(o);
90
+ const S = o.findIndex((a, U) => U >= v && a === ""), Q = S >= 0 ? S : Math.min(v + r.length, n - 1);
91
+ c(Q);
92
+ }
93
+ }, z = (t) => {
94
+ f.current[t]?.select();
95
+ }, G = () => {
96
+ if (L && !d.current) {
97
+ const t = s.join(""), e = C(t);
98
+ m(e);
99
+ }
100
+ }, I = K || !!g, D = I && (l || g), J = D ? B : void 0;
101
+ return /* @__PURE__ */ p.createElement("div", {
102
+ className: `se-design-otp-input ${H || ""}`,
103
+ "data-automation-id": "otp-input-container"
104
+ }, y && /* @__PURE__ */ p.createElement("div", {
105
+ id: R,
106
+ className: "se-design-otp-input-label"
107
+ }, y), /* @__PURE__ */ p.createElement("div", {
108
+ className: "flex items-center gap-[12px]",
109
+ role: "group",
110
+ "aria-labelledby": y ? R : void 0
111
+ }, s.map((t, e) => /* @__PURE__ */ p.createElement("input", {
112
+ key: e,
113
+ ref: (r) => {
114
+ f.current[e] = r;
115
+ },
116
+ type: "text",
117
+ inputMode: "numeric",
118
+ maxLength: 1,
119
+ value: t,
120
+ onChange: (r) => F(e, r.target.value),
121
+ onKeyDown: (r) => V(e, r),
122
+ onPaste: q,
123
+ onFocus: () => z(e),
124
+ onBlur: G,
125
+ disabled: i,
126
+ className: `
127
+ w-12 h-12
128
+ flex flex-col items-start
129
+ text-center text-lg font-medium
130
+ border rounded-md
131
+ outline-none
132
+ transition-colors
133
+ disabled:bg-gray-50 disabled:cursor-not-allowed
134
+ ${i ? "border-[var(--color-gray-300)] text-gray-400" : I ? "border-[var(--color-red-500)] text-gray-900 focus:border-[var(--color-red-500)] focus:ring-1 focus:ring-[var(--color-red-500)]" : "border-[var(--color-gray-600)] text-gray-900 focus:border-[var(--color-blue-500)] focus:ring-1 focus:ring-[var(--color-blue-500)]"}
135
+ `,
136
+ style: {
137
+ gap: "var(--Spacer-6px, 6px)"
138
+ },
139
+ "aria-label": `OTP digit ${e + 1} of ${n}`,
140
+ "aria-invalid": I,
141
+ "aria-describedby": J,
142
+ "data-automation-id": `otp-input-${e}`
143
+ }))), D && /* @__PURE__ */ p.createElement("div", {
144
+ id: B,
145
+ className: "se-design-otp-input-error",
146
+ role: "alert"
147
+ }, D));
148
+ };
33
149
  export {
34
- i as InfoBar
150
+ M as OTPInput
35
151
  };
36
152
  //# sourceMappingURL=index57.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index57.js","sources":["../src/components/InfoBar/index.tsx"],"sourcesContent":["import React, { FC } from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface InfoBarProps {\n className?: string;\n message: string;\n backgroundColor?: string;\n textColor?: string;\n borderColor?: string;\n actionJSX?: () => React.ReactNode;\n}\n\nexport const InfoBar: FC<InfoBarProps> = ({\n className = \"\",\n message = \"\",\n backgroundColor = 'var(--color-yellow-50)',\n textColor = 'var(--color-yellow-800)',\n borderColor = 'var(--color-yellow-200)',\n actionJSX = () => <></>\n}) => {\n\n return (\n <div\n className={`se-design-info-bar ${className} px-3 py-2 border rounded-[6px]`}\n style={{ backgroundColor, borderColor, color: textColor }}\n >\n <div className={`info-bar-message flex items-center gap-2`}>\n <div style={{ transform: 'rotate(180deg)' }}><Icon name=\"info\" stroke={textColor} /></div>\n <span style={{ color: textColor }}>{message}</span>\n </div>\n <div className={`info-bar-action ml-[22px]`}>\n {actionJSX()}\n </div>\n </div>\n );\n};"],"names":["InfoBar","className","message","backgroundColor","textColor","borderColor","actionJSX","React","createElement","Fragment","style","color","transform","Icon","name","stroke"],"mappings":";;AAYO,MAAMA,IAA4BA,CAAC;AAAA,EACxCC,WAAAA,IAAY;AAAA,EACZC,SAAAA,IAAU;AAAA,EACVC,iBAAAA,IAAkB;AAAA,EAClBC,WAAAA,IAAY;AAAA,EACZC,aAAAA,IAAc;AAAA,EACdC,WAAAA,IAAYA,MAAMC,gBAAAA,EAAAC,cAAAD,EAAAE,UAAI,IAAA;AACxB,MAGIF,gBAAAA,EAAAC,cAAA,OAAA;AAAA,EACEP,WAAW,sBAAsBA,CAAS;AAAA,EAC1CS,OAAO;AAAA,IAAEP,iBAAAA;AAAAA,IAAiBE,aAAAA;AAAAA,IAAaM,OAAOP;AAAAA,EAAU;AAAA,GAExDI,gBAAAA,EAAAA,cAAA,OAAA;AAAA,EAAKP,WAAW;AAAA,GACdO,gBAAAA,EAAAA,cAAA,OAAA;AAAA,EAAKE,OAAO;AAAA,IAAEE,WAAW;AAAA,EAAiB;AAAA,GAAGJ,gBAAAA,EAAAA,cAACK,GAAI;AAAA,EAACC,MAAK;AAAA,EAAOC,QAAQX;AAAY,CAAA,CAAM,GACzFG,gBAAAA,EAAAC,cAAA,QAAA;AAAA,EAAME,OAAO;AAAA,IAAEC,OAAOP;AAAAA,EAAU;GAAIF,CAAc,CAC/C,GACLK,gBAAAA,EAAAC,cAAA,OAAA;AAAA,EAAKP,WAAW;AAAA,GACbK,EACE,CAAA,CACF;"}
1
+ {"version":3,"file":"index57.js","sources":["../src/components/OTPInput/index.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, KeyboardEvent, ChangeEvent, ClipboardEvent, FC } from 'react';\nimport { useStableId } from '../../utils/useStableId';\nimport './style.scss';\n\nexport interface OTPInputProps {\n length?: number;\n onChange?: (value: string) => void;\n onComplete?: (value: string) => void;\n label?: string;\n disabled?: boolean;\n className?: string;\n autoFocus?: boolean;\n error?: boolean;\n errorMessage?: string;\n validateOnBlur?: boolean;\n onValidate?: (value: string) => boolean | string;\n id?: string;\n}\n\nexport const OTPInput: FC<OTPInputProps> = ({\n length = 6,\n onChange,\n onComplete,\n label,\n disabled = false,\n className = '',\n autoFocus = true,\n error = false,\n errorMessage,\n validateOnBlur = false,\n onValidate,\n id\n}) => {\n const [values, setValues] = useState<string[]>(Array(length).fill(''));\n const [internalError, setInternalError] = useState<string | null>(null);\n const inputRefs = useRef<(HTMLInputElement | null)[]>([]);\n const isBackspacePressed = useRef<boolean>(false);\n \n // Generate stable IDs for ARIA attributes\n const baseId = useStableId(id, 'se-otp-input');\n const labelId = `${baseId}-label`;\n const errorId = `${baseId}-error`;\n\n // Helper: Check if a string is a single digit\n const isDigit = (char: string): boolean => /^\\d$/.test(char);\n\n // Helper: Check if OTP is complete\n const isComplete = (otpValue: string): boolean => {\n return otpValue.length === length && values.every((val) => val !== '');\n };\n\n // Helper: Update value at specific index\n const updateValue = (index: number, value: string, shouldFocusNext = false) => {\n const newValues = [...values];\n newValues[index] = value;\n setValues(newValues);\n\n if (shouldFocusNext && value && index < length - 1) {\n focusInput(index + 1);\n }\n };\n\n // Helper: Clear value at specific index\n const clearValue = (index: number) => {\n updateValue(index, '');\n };\n\n // Helper: Focus input at index\n const focusInput = (index: number) => {\n inputRefs.current[index]?.focus();\n };\n\n useEffect(() => {\n if (autoFocus && inputRefs.current[0] && !disabled) {\n focusInput(0);\n }\n }, [autoFocus, disabled]);\n\n // Internal validation\n const validateOTP = (otpValue: string): string | null => {\n // Empty validation\n if (otpValue.length === 0) {\n return errorMessage || 'Please enter the verification code';\n }\n\n // Incomplete validation\n if (otpValue.length < length || !isComplete(otpValue)) {\n return errorMessage || 'Please enter all digits';\n }\n\n // Custom validation\n if (onValidate) {\n const validationResult = onValidate(otpValue);\n if (validationResult === false) {\n return errorMessage || 'Invalid verification code';\n }\n if (typeof validationResult === 'string') {\n return validationResult;\n }\n }\n\n return null;\n };\n\n useEffect(() => {\n const otpValue = values.join('');\n onChange?.(otpValue);\n\n // Clear error when user starts typing\n if (internalError && otpValue.length > 0) {\n setInternalError(null);\n }\n\n if (isComplete(otpValue)) {\n // Validate on complete\n if (onValidate) {\n const validationResult = onValidate(otpValue);\n if (validationResult === false || typeof validationResult === 'string') {\n const errorMsg =\n typeof validationResult === 'string' ? validationResult : errorMessage || 'Invalid verification code';\n setInternalError(errorMsg);\n } else {\n setInternalError(null);\n }\n }\n onComplete?.(otpValue);\n }\n }, [values, length, onChange, onComplete, onValidate, errorMessage]);\n\n const handleChange = (index: number, value: string) => {\n // Only allow single digit or empty\n if (value && !isDigit(value)) {\n return;\n }\n\n updateValue(index, value, true);\n };\n\n const handleKeyDown = (index: number, e: KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n const currentValue = values[index];\n\n // Handle backspace\n if (e.key === 'Backspace') {\n isBackspacePressed.current = true;\n if (currentValue) {\n clearValue(index);\n } else if (index > 0) {\n clearValue(index - 1);\n focusInput(index - 1);\n }\n // Reset backspace flag after a short delay\n setTimeout(() => {\n isBackspacePressed.current = false;\n }, 100);\n e.preventDefault();\n return;\n }\n\n // Handle delete\n if (e.key === 'Delete') {\n isBackspacePressed.current = true;\n clearValue(index);\n // Reset backspace flag after a short delay\n setTimeout(() => {\n isBackspacePressed.current = false;\n }, 100);\n e.preventDefault();\n return;\n }\n\n // Handle navigation keys\n const navigationHandlers: Record<string, () => void> = {\n ArrowLeft: () => index > 0 && focusInput(index - 1),\n ArrowRight: () => index < length - 1 && focusInput(index + 1),\n Home: () => focusInput(0),\n End: () => focusInput(length - 1)\n };\n\n if (navigationHandlers[e.key]) {\n navigationHandlers[e.key]();\n e.preventDefault();\n return;\n }\n\n // Allow digits, but prevent if already filled\n if (isDigit(e.key)) {\n if (currentValue) {\n updateValue(index, e.key, true);\n }\n }\n };\n\n const handlePaste = (e: ClipboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n e.preventDefault();\n const pastedData = e.clipboardData.getData('text/plain').trim();\n\n // Extract only digits\n const digits = pastedData.replace(/\\D/g, '').slice(0, length);\n\n if (digits.length > 0) {\n const newValues = [...values];\n\n // Fill inputs starting from the current index\n const startIndex = inputRefs.current.findIndex((ref) => ref === document.activeElement);\n const actualStartIndex = startIndex >= 0 ? startIndex : 0;\n\n for (let i = 0; i < digits.length && actualStartIndex + i < length; i++) {\n newValues[actualStartIndex + i] = digits[i];\n }\n\n setValues(newValues);\n\n // Focus the next empty input or the last input\n const nextEmptyIndex = newValues.findIndex((val, idx) => idx >= actualStartIndex && val === '');\n const focusIndex = nextEmptyIndex >= 0 ? nextEmptyIndex : Math.min(actualStartIndex + digits.length, length - 1);\n focusInput(focusIndex);\n }\n };\n\n const handleFocus = (index: number) => {\n inputRefs.current[index]?.select();\n };\n\n const handleBlur = () => {\n // Don't validate on blur if backspace/delete was just pressed\n if (validateOnBlur && !isBackspacePressed.current) {\n const otpValue = values.join('');\n const validationError = validateOTP(otpValue);\n setInternalError(validationError);\n }\n };\n\n const hasError = error || !!internalError;\n // Priority: errorMessage prop > internalError\n const displayError = hasError && (errorMessage || internalError);\n \n const ariaDescribedByError = displayError ? errorId : undefined;\n\n return (\n <div className={`se-design-otp-input ${className || ''}`} data-automation-id=\"otp-input-container\">\n {label && <div id={labelId} className=\"se-design-otp-input-label\">{label}</div>}\n <div className=\"flex items-center gap-[12px]\" role=\"group\" aria-labelledby={label ? labelId : undefined}>\n {values.map((value, index) => (\n <input\n key={index}\n ref={(el) => {\n inputRefs.current[index] = el;\n }}\n type=\"text\"\n inputMode=\"numeric\"\n maxLength={1}\n value={value}\n onChange={(e: ChangeEvent<HTMLInputElement>) => handleChange(index, e.target.value)}\n onKeyDown={(e: KeyboardEvent<HTMLInputElement>) => handleKeyDown(index, e)}\n onPaste={handlePaste}\n onFocus={() => handleFocus(index)}\n onBlur={handleBlur}\n disabled={disabled}\n className={`\n w-12 h-12 \n flex flex-col items-start \n text-center text-lg font-medium\n border rounded-md\n outline-none\n transition-colors\n disabled:bg-gray-50 disabled:cursor-not-allowed\n ${\n disabled\n ? 'border-[var(--color-gray-300)] text-gray-400'\n : hasError\n ? 'border-[var(--color-red-500)] text-gray-900 focus:border-[var(--color-red-500)] focus:ring-1 focus:ring-[var(--color-red-500)]'\n : 'border-[var(--color-gray-600)] text-gray-900 focus:border-[var(--color-blue-500)] focus:ring-1 focus:ring-[var(--color-blue-500)]'\n }\n `}\n style={{\n gap: 'var(--Spacer-6px, 6px)'\n }}\n aria-label={`OTP digit ${index + 1} of ${length}`}\n aria-invalid={hasError}\n aria-describedby={ariaDescribedByError}\n data-automation-id={`otp-input-${index}`}\n />\n ))}\n </div>\n {displayError && <div id={errorId} className=\"se-design-otp-input-error\" role=\"alert\">{displayError}</div>}\n </div>\n );\n};\n"],"names":["OTPInput","length","onChange","onComplete","label","disabled","className","autoFocus","error","errorMessage","validateOnBlur","onValidate","id","values","setValues","useState","Array","fill","internalError","setInternalError","inputRefs","useRef","isBackspacePressed","baseId","useStableId","labelId","errorId","isDigit","char","test","isComplete","otpValue","every","val","updateValue","index","value","shouldFocusNext","newValues","focusInput","clearValue","current","focus","useEffect","validateOTP","validationResult","join","handleChange","handleKeyDown","e","currentValue","key","setTimeout","preventDefault","navigationHandlers","ArrowLeft","ArrowRight","Home","End","handlePaste","digits","clipboardData","getData","trim","replace","slice","startIndex","findIndex","ref","document","activeElement","actualStartIndex","i","nextEmptyIndex","idx","focusIndex","Math","min","handleFocus","select","handleBlur","validationError","hasError","displayError","ariaDescribedByError","undefined","React","createElement","role","map","el","type","inputMode","maxLength","target","onKeyDown","onPaste","onFocus","onBlur","style","gap"],"mappings":"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"}
package/dist/index58.js CHANGED
@@ -1,89 +1,36 @@
1
- import e, { useRef as S, useState as f } from "react";
2
- import { CustomModal as T } from "./index12.js";
3
- import { Icon as v } from "./index5.js";
4
- /* empty css */
5
- const C = ({
6
- children: c = null,
7
- title: n = "",
8
- onClose: s = () => {
9
- },
10
- showCloseIcon: l = !1,
11
- showBackButton: a = !1,
12
- onBack: m = () => {
13
- },
14
- className: i = "",
15
- automationId: r = "",
16
- minHeight: u = "auto"
17
- }) => {
18
- const t = S(null), [g, p] = f(0), [E, h] = f(0), [b, Y] = f(!1), k = (o) => {
19
- p(o.touches[0].clientY), h(o.touches[0].clientY), Y(!0);
20
- }, N = (o) => {
21
- if (!b) return;
22
- const d = o.touches[0].clientY, x = d - g;
23
- x > 0 && (h(d), t.current && (t.current.style.transform = `translateY(${x}px)`));
24
- }, y = () => {
25
- if (!b) return;
26
- E - g > 60 ? s() : t.current && (t.current.style.transform = "translateY(0)"), Y(!1), p(0), h(0);
27
- };
28
- return /* @__PURE__ */ e.createElement("div", {
29
- ref: t,
30
- className: `se-design-bottom-sheet relative h-max max-h-[98vh] rounded-t-2xl flex flex-col pt-5 ${i}`,
31
- onClick: (o) => o.stopPropagation(),
32
- onTouchStart: k,
33
- onTouchMove: N,
34
- onTouchEnd: y,
35
- "data-automation-id": r,
36
- style: {
37
- minHeight: u
38
- }
39
- }, (n || a) && /* @__PURE__ */ e.createElement("div", {
40
- className: "se-design-bottom-sheet-header flex items-center justify-left gap-3 mr-6 px-4"
41
- }, a && /* @__PURE__ */ e.createElement(v, {
42
- name: "back",
43
- stroke: "var(--color-gray-700)",
44
- onClick: m,
45
- className: "se-design-bottom-sheet-back-icon cursor-pointer",
46
- automationId: `${r}-back-icon`
47
- }), n && /* @__PURE__ */ e.createElement("div", {
48
- className: "se-design-bottom-sheet-title text-lg font-semibold"
49
- }, n)), l && /* @__PURE__ */ e.createElement(v, {
50
- name: "close",
51
- onClick: s,
52
- className: "se-design-bottom-sheet-close-icon absolute top-6 right-4 cursor-pointer z-10",
53
- automationId: `${r}-close-icon`
54
- }), /* @__PURE__ */ e.createElement("div", {
55
- className: "se-design-bottom-sheet-content px-4 pb-5 flex-1 min-h-0 overflow-y-auto"
56
- }, c));
57
- }, I = ({
58
- isOpen: c = !1,
59
- title: n = "",
60
- onClose: s = () => {
61
- },
62
- children: l = null,
63
- showCloseIcon: a = !0,
64
- showBackButton: m = !1,
65
- onBack: i = () => {
66
- },
67
- className: r = "",
68
- automationId: u = "bottomsheet",
69
- minHeight: t = ""
70
- }) => /* @__PURE__ */ e.createElement(T, {
71
- isOpen: c,
72
- onClose: s,
73
- onModalClick: s,
74
- className: "custom-bottom-sheet",
75
- renderModalContent: () => /* @__PURE__ */ e.createElement(C, {
76
- title: n,
77
- onClose: s,
78
- showCloseIcon: a,
79
- showBackButton: m,
80
- onBack: i,
81
- className: r,
82
- automationId: u,
83
- minHeight: t
84
- }, l)
85
- });
1
+ import e from "react";
2
+ import { Icon as c } from "./index6.js";
3
+ const i = ({
4
+ className: a = "",
5
+ message: t = "",
6
+ backgroundColor: l = "var(--color-yellow-50)",
7
+ textColor: r = "var(--color-yellow-800)",
8
+ borderColor: o = "var(--color-yellow-200)",
9
+ actionJSX: n = () => /* @__PURE__ */ e.createElement(e.Fragment, null)
10
+ }) => /* @__PURE__ */ e.createElement("div", {
11
+ className: `se-design-info-bar ${a} px-3 py-2 border rounded-[6px]`,
12
+ style: {
13
+ backgroundColor: l,
14
+ borderColor: o,
15
+ color: r
16
+ }
17
+ }, /* @__PURE__ */ e.createElement("div", {
18
+ className: "info-bar-message flex items-center gap-2"
19
+ }, /* @__PURE__ */ e.createElement("div", {
20
+ style: {
21
+ transform: "rotate(180deg)"
22
+ }
23
+ }, /* @__PURE__ */ e.createElement(c, {
24
+ name: "info",
25
+ stroke: r
26
+ })), /* @__PURE__ */ e.createElement("span", {
27
+ style: {
28
+ color: r
29
+ }
30
+ }, t)), /* @__PURE__ */ e.createElement("div", {
31
+ className: "info-bar-action ml-[22px]"
32
+ }, n()));
86
33
  export {
87
- I as BottomSheet
34
+ i as InfoBar
88
35
  };
89
36
  //# sourceMappingURL=index58.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index58.js","sources":["../src/components/BottomSheet/index.tsx"],"sourcesContent":["import React, { FC, useState, useRef } from 'react';\nimport { CustomModal } from '../CustomModal';\nimport { Icon } from '../Icon';\n\nimport './style.scss';\n\nexport interface BottomSheetProps {\n isOpen: boolean;\n title?: string;\n onClose: () => void;\n showCloseIcon?: boolean;\n showBackButton?: boolean;\n onBack?: () => void;\n children: React.ReactNode;\n className?: string;\n automationId?: string;\n minHeight?: string;\n}\n\ninterface BottomSheetContentProps {\n title?: string;\n onClose: () => void;\n showCloseIcon?: boolean;\n showBackButton?: boolean;\n onBack?: () => void;\n children: React.ReactNode;\n className?: string;\n automationId?: string;\n minHeight?: string;\n}\n\nconst BottomSheetContent: FC<BottomSheetContentProps> = ({\n children = null,\n title = '',\n onClose = () => {},\n showCloseIcon = false,\n showBackButton = false,\n onBack = () => {},\n className = '',\n automationId = '',\n minHeight = 'auto'\n}) => {\n const contentRef = useRef<HTMLDivElement>(null);\n const [startY, setStartY] = useState<number>(0);\n const [currentY, setCurrentY] = useState<number>(0);\n const [isDragging, setIsDragging] = useState<boolean>(false);\n\n const handleTouchStart = (e: React.TouchEvent) => {\n setStartY(e.touches[0].clientY);\n setCurrentY(e.touches[0].clientY);\n setIsDragging(true);\n };\n\n const handleTouchMove = (e: React.TouchEvent) => {\n if (!isDragging) return;\n\n const touchY = e.touches[0].clientY;\n const deltaY = touchY - startY;\n\n // Only allow dragging down\n if (deltaY > 0) {\n setCurrentY(touchY);\n if (contentRef.current) {\n contentRef.current.style.transform = `translateY(${deltaY}px)`;\n }\n }\n };\n\n const handleTouchEnd = () => {\n if (!isDragging) return;\n\n const deltaY = currentY - startY;\n const threshold = 60; // pixels to swipe down to trigger close\n\n if (deltaY > threshold) {\n // Trigger close\n onClose();\n } else {\n // Reset position\n if (contentRef.current) {\n contentRef.current.style.transform = 'translateY(0)';\n }\n }\n\n setIsDragging(false);\n setStartY(0);\n setCurrentY(0);\n };\n\n return (\n <div\n ref={contentRef}\n className={`se-design-bottom-sheet relative h-max max-h-[98vh] rounded-t-2xl flex flex-col pt-5 ${className}`}\n onClick={(e) => e.stopPropagation()}\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n data-automation-id={automationId}\n style={{ minHeight }}\n >\n {(title || showBackButton) && (\n <div className=\"se-design-bottom-sheet-header flex items-center justify-left gap-3 mr-6 px-4\">\n {showBackButton && (\n <Icon\n name=\"back\"\n stroke=\"var(--color-gray-700)\"\n onClick={onBack}\n className=\"se-design-bottom-sheet-back-icon cursor-pointer\"\n automationId={`${automationId}-back-icon`}\n />\n )}\n {title && <div className=\"se-design-bottom-sheet-title text-lg font-semibold\">{title}</div>}\n </div>\n )}\n {showCloseIcon && (\n <Icon\n name=\"close\"\n onClick={onClose}\n className=\"se-design-bottom-sheet-close-icon absolute top-6 right-4 cursor-pointer z-10\"\n automationId={`${automationId}-close-icon`}\n />\n )}\n <div className=\"se-design-bottom-sheet-content px-4 pb-5 flex-1 min-h-0 overflow-y-auto\">{children}</div>\n </div>\n );\n};\n\nexport const BottomSheet: FC<BottomSheetProps> = ({\n isOpen = false,\n title = '',\n onClose = () => {},\n children = null,\n showCloseIcon = true,\n showBackButton = false,\n onBack = () => {},\n className = '',\n automationId = 'bottomsheet',\n minHeight = ''\n}) => {\n return (\n <CustomModal\n isOpen={isOpen}\n onClose={onClose}\n onModalClick={onClose}\n className=\"custom-bottom-sheet\"\n renderModalContent={() => (\n <BottomSheetContent\n title={title}\n onClose={onClose}\n showCloseIcon={showCloseIcon}\n showBackButton={showBackButton}\n onBack={onBack}\n className={className}\n automationId={automationId}\n minHeight={minHeight}\n >\n {children}\n </BottomSheetContent>\n )}\n />\n );\n};\n"],"names":["BottomSheetContent","children","title","onClose","showCloseIcon","showBackButton","onBack","className","automationId","minHeight","contentRef","useRef","startY","setStartY","useState","currentY","setCurrentY","isDragging","setIsDragging","handleTouchStart","e","touches","clientY","handleTouchMove","touchY","deltaY","current","style","transform","handleTouchEnd","React","createElement","ref","onClick","stopPropagation","onTouchStart","onTouchMove","onTouchEnd","Icon","name","stroke","BottomSheet","isOpen","CustomModal","onModalClick","renderModalContent"],"mappings":"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"}
1
+ {"version":3,"file":"index58.js","sources":["../src/components/InfoBar/index.tsx"],"sourcesContent":["import React, { FC } from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface InfoBarProps {\n className?: string;\n message: string;\n backgroundColor?: string;\n textColor?: string;\n borderColor?: string;\n actionJSX?: () => React.ReactNode;\n}\n\nexport const InfoBar: FC<InfoBarProps> = ({\n className = \"\",\n message = \"\",\n backgroundColor = 'var(--color-yellow-50)',\n textColor = 'var(--color-yellow-800)',\n borderColor = 'var(--color-yellow-200)',\n actionJSX = () => <></>\n}) => {\n\n return (\n <div\n className={`se-design-info-bar ${className} px-3 py-2 border rounded-[6px]`}\n style={{ backgroundColor, borderColor, color: textColor }}\n >\n <div className={`info-bar-message flex items-center gap-2`}>\n <div style={{ transform: 'rotate(180deg)' }}><Icon name=\"info\" stroke={textColor} /></div>\n <span style={{ color: textColor }}>{message}</span>\n </div>\n <div className={`info-bar-action ml-[22px]`}>\n {actionJSX()}\n </div>\n </div>\n );\n};"],"names":["InfoBar","className","message","backgroundColor","textColor","borderColor","actionJSX","React","createElement","Fragment","style","color","transform","Icon","name","stroke"],"mappings":";;AAYO,MAAMA,IAA4BA,CAAC;AAAA,EACxCC,WAAAA,IAAY;AAAA,EACZC,SAAAA,IAAU;AAAA,EACVC,iBAAAA,IAAkB;AAAA,EAClBC,WAAAA,IAAY;AAAA,EACZC,aAAAA,IAAc;AAAA,EACdC,WAAAA,IAAYA,MAAMC,gBAAAA,EAAAC,cAAAD,EAAAE,UAAA,IAAI;AACxB,MAGIF,gBAAAA,EAAAC,cAAA,OAAA;AAAA,EACEP,WAAW,sBAAsBA,CAAS;AAAA,EAC1CS,OAAO;AAAA,IAAEP,iBAAAA;AAAAA,IAAiBE,aAAAA;AAAAA,IAAaM,OAAOP;AAAAA,EAAAA;AAAU,GAExDG,gBAAAA,EAAAC,cAAA,OAAA;AAAA,EAAKP,WAAW;AAAA,GACdM,gBAAAA,EAAAC,cAAA,OAAA;AAAA,EAAKE,OAAO;AAAA,IAAEE,WAAW;AAAA,EAAA;AAAiB,GAAGL,gBAAAA,EAAAC,cAACK,GAAI;AAAA,EAACC,MAAK;AAAA,EAAOC,QAAQX;AAAAA,CAAY,CAAM,GACzFG,gBAAAA,EAAAC,cAAA,QAAA;AAAA,EAAME,OAAO;AAAA,IAAEC,OAAOP;AAAAA,EAAAA;AAAU,GAAIF,CAAc,CAC/C,GACLK,gBAAAA,EAAAC,cAAA,OAAA;AAAA,EAAKP,WAAW;AAAA,GACbK,EAAAA,CACE,CACF;"}