shad-m 1.0.2 → 1.0.3

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 (613) hide show
  1. package/dist/assets/Animation/index.js +180 -0
  2. package/dist/assets/Animation/index.js.map +1 -0
  3. package/dist/assets/Animation/index.mjs +79 -0
  4. package/dist/assets/Animation/index.mjs.map +1 -0
  5. package/dist/assets/Icon/index.js +2102 -0
  6. package/dist/assets/Icon/index.js.map +1 -0
  7. package/dist/assets/Icon/index.mjs +421 -0
  8. package/dist/assets/Icon/index.mjs.map +1 -0
  9. package/dist/assets/Image/index.js +755 -0
  10. package/dist/assets/Image/index.js.map +1 -0
  11. package/dist/assets/Image/index.mjs +150 -0
  12. package/dist/assets/Image/index.mjs.map +1 -0
  13. package/dist/common/display/countdown.js +68 -0
  14. package/dist/common/display/countdown.js.map +1 -0
  15. package/dist/common/display/countdown.mjs +46 -0
  16. package/dist/common/display/countdown.mjs.map +1 -0
  17. package/dist/common/display/display-field-group.js +91 -0
  18. package/dist/common/display/display-field-group.js.map +1 -0
  19. package/dist/common/display/display-field-group.mjs +89 -0
  20. package/dist/common/display/display-field-group.mjs.map +1 -0
  21. package/dist/common/display/display-field.js +46 -0
  22. package/dist/common/display/display-field.js.map +1 -0
  23. package/dist/common/display/display-field.mjs +40 -0
  24. package/dist/common/display/display-field.mjs.map +1 -0
  25. package/dist/common/display/display-html-string.js +52 -0
  26. package/dist/common/display/display-html-string.js.map +1 -0
  27. package/dist/common/display/display-html-string.mjs +30 -0
  28. package/dist/common/display/display-html-string.mjs.map +1 -0
  29. package/dist/common/display/index.js +59 -0
  30. package/dist/common/display/index.js.map +1 -0
  31. package/dist/common/display/index.mjs +10 -0
  32. package/dist/common/display/index.mjs.map +1 -0
  33. package/dist/common/display/page-breadcrumb.js +43 -0
  34. package/dist/common/display/page-breadcrumb.js.map +1 -0
  35. package/dist/common/display/page-breadcrumb.mjs +37 -0
  36. package/dist/common/display/page-breadcrumb.mjs.map +1 -0
  37. package/dist/common/display/page-v2.js +58 -0
  38. package/dist/common/display/page-v2.js.map +1 -0
  39. package/dist/common/display/page-v2.mjs +20 -0
  40. package/dist/common/display/page-v2.mjs.map +1 -0
  41. package/dist/common/display/page.js +155 -0
  42. package/dist/common/display/page.js.map +1 -0
  43. package/dist/common/display/page.mjs +138 -0
  44. package/dist/common/display/page.mjs.map +1 -0
  45. package/dist/common/display/score-meter.js +161 -0
  46. package/dist/common/display/score-meter.js.map +1 -0
  47. package/dist/common/display/score-meter.mjs +140 -0
  48. package/dist/common/display/score-meter.mjs.map +1 -0
  49. package/dist/common/display/sidebar/app-sidebar.js +114 -0
  50. package/dist/common/display/sidebar/app-sidebar.js.map +1 -0
  51. package/dist/common/display/sidebar/app-sidebar.mjs +92 -0
  52. package/dist/common/display/sidebar/app-sidebar.mjs.map +1 -0
  53. package/dist/common/display/sidebar/index.js +89 -0
  54. package/dist/common/display/sidebar/index.js.map +1 -0
  55. package/dist/common/display/sidebar/index.mjs +81 -0
  56. package/dist/common/display/sidebar/index.mjs.map +1 -0
  57. package/dist/common/display/sidebar/nav-main.js +406 -0
  58. package/dist/common/display/sidebar/nav-main.js.map +1 -0
  59. package/dist/common/display/sidebar/nav-main.mjs +400 -0
  60. package/dist/common/display/sidebar/nav-main.mjs.map +1 -0
  61. package/dist/common/display/sidebar/sidebar-sheet.js +140 -0
  62. package/dist/common/display/sidebar/sidebar-sheet.js.map +1 -0
  63. package/dist/common/display/sidebar/sidebar-sheet.mjs +118 -0
  64. package/dist/common/display/sidebar/sidebar-sheet.mjs.map +1 -0
  65. package/dist/common/display/sidebar/types.js +4 -0
  66. package/dist/common/display/sidebar/types.js.map +1 -0
  67. package/dist/common/display/sidebar/types.mjs +3 -0
  68. package/dist/common/display/sidebar/types.mjs.map +1 -0
  69. package/dist/common/display/status-state.js +97 -0
  70. package/dist/common/display/status-state.js.map +1 -0
  71. package/dist/common/display/status-state.mjs +88 -0
  72. package/dist/common/display/status-state.mjs.map +1 -0
  73. package/dist/common/forms/auto-form.js +101 -0
  74. package/dist/common/forms/auto-form.js.map +1 -0
  75. package/dist/common/forms/auto-form.mjs +78 -0
  76. package/dist/common/forms/auto-form.mjs.map +1 -0
  77. package/dist/common/forms/form-field.js +58 -0
  78. package/dist/common/forms/form-field.js.map +1 -0
  79. package/dist/common/forms/form-field.mjs +56 -0
  80. package/dist/common/forms/form-field.mjs.map +1 -0
  81. package/dist/common/forms/form-input-field.js +64 -0
  82. package/dist/common/forms/form-input-field.js.map +1 -0
  83. package/dist/common/forms/form-input-field.mjs +62 -0
  84. package/dist/common/forms/form-input-field.mjs.map +1 -0
  85. package/dist/common/forms/index.js +22 -0
  86. package/dist/common/forms/index.js.map +1 -0
  87. package/dist/common/forms/index.mjs +5 -0
  88. package/dist/common/forms/index.mjs.map +1 -0
  89. package/dist/common/forms/switch-field.js +106 -0
  90. package/dist/common/forms/switch-field.js.map +1 -0
  91. package/dist/common/forms/switch-field.mjs +104 -0
  92. package/dist/common/forms/switch-field.mjs.map +1 -0
  93. package/dist/common/interactive/alert-dialog-wrapper.js +141 -0
  94. package/dist/common/interactive/alert-dialog-wrapper.js.map +1 -0
  95. package/dist/common/interactive/alert-dialog-wrapper.mjs +119 -0
  96. package/dist/common/interactive/alert-dialog-wrapper.mjs.map +1 -0
  97. package/dist/common/interactive/autocomplete.js +178 -0
  98. package/dist/common/interactive/autocomplete.js.map +1 -0
  99. package/dist/common/interactive/autocomplete.mjs +157 -0
  100. package/dist/common/interactive/autocomplete.mjs.map +1 -0
  101. package/dist/common/interactive/copy-tooltip.js +152 -0
  102. package/dist/common/interactive/copy-tooltip.js.map +1 -0
  103. package/dist/common/interactive/copy-tooltip.mjs +143 -0
  104. package/dist/common/interactive/copy-tooltip.mjs.map +1 -0
  105. package/dist/common/interactive/date-field.js +303 -0
  106. package/dist/common/interactive/date-field.js.map +1 -0
  107. package/dist/common/interactive/date-field.mjs +281 -0
  108. package/dist/common/interactive/date-field.mjs.map +1 -0
  109. package/dist/common/interactive/date-input/date-input.js +68 -0
  110. package/dist/common/interactive/date-input/date-input.js.map +1 -0
  111. package/dist/common/interactive/date-input/date-input.mjs +62 -0
  112. package/dist/common/interactive/date-input/date-input.mjs.map +1 -0
  113. package/dist/common/interactive/date-input/index.js +17 -0
  114. package/dist/common/interactive/date-input/index.js.map +1 -0
  115. package/dist/common/interactive/date-input/index.mjs +4 -0
  116. package/dist/common/interactive/date-input/index.mjs.map +1 -0
  117. package/dist/common/interactive/date-input/types.js +4 -0
  118. package/dist/common/interactive/date-input/types.js.map +1 -0
  119. package/dist/common/interactive/date-input/types.mjs +3 -0
  120. package/dist/common/interactive/date-input/types.mjs.map +1 -0
  121. package/dist/common/interactive/date-input/use-typed-date.js +478 -0
  122. package/dist/common/interactive/date-input/use-typed-date.js.map +1 -0
  123. package/dist/common/interactive/date-input/use-typed-date.mjs +476 -0
  124. package/dist/common/interactive/date-input/use-typed-date.mjs.map +1 -0
  125. package/dist/common/interactive/date-input/utils.js +34 -0
  126. package/dist/common/interactive/date-input/utils.js.map +1 -0
  127. package/dist/common/interactive/date-input/utils.mjs +29 -0
  128. package/dist/common/interactive/date-input/utils.mjs.map +1 -0
  129. package/dist/common/interactive/date-picker.js +616 -0
  130. package/dist/common/interactive/date-picker.js.map +1 -0
  131. package/dist/common/interactive/date-picker.mjs +594 -0
  132. package/dist/common/interactive/date-picker.mjs.map +1 -0
  133. package/dist/common/interactive/date-range-input/date-range-input.js +82 -0
  134. package/dist/common/interactive/date-range-input/date-range-input.js.map +1 -0
  135. package/dist/common/interactive/date-range-input/date-range-input.mjs +76 -0
  136. package/dist/common/interactive/date-range-input/date-range-input.mjs.map +1 -0
  137. package/dist/common/interactive/date-range-input/index.js +12 -0
  138. package/dist/common/interactive/date-range-input/index.js.map +1 -0
  139. package/dist/common/interactive/date-range-input/index.mjs +3 -0
  140. package/dist/common/interactive/date-range-input/index.mjs.map +1 -0
  141. package/dist/common/interactive/date-range-input/types.js +4 -0
  142. package/dist/common/interactive/date-range-input/types.js.map +1 -0
  143. package/dist/common/interactive/date-range-input/types.mjs +3 -0
  144. package/dist/common/interactive/date-range-input/types.mjs.map +1 -0
  145. package/dist/common/interactive/date-range-input/use-typed-date-range.js +602 -0
  146. package/dist/common/interactive/date-range-input/use-typed-date-range.js.map +1 -0
  147. package/dist/common/interactive/date-range-input/use-typed-date-range.mjs +600 -0
  148. package/dist/common/interactive/date-range-input/use-typed-date-range.mjs.map +1 -0
  149. package/dist/common/interactive/date-time-picker.js +215 -0
  150. package/dist/common/interactive/date-time-picker.js.map +1 -0
  151. package/dist/common/interactive/date-time-picker.mjs +213 -0
  152. package/dist/common/interactive/date-time-picker.mjs.map +1 -0
  153. package/dist/common/interactive/dialog-wrapper.js +124 -0
  154. package/dist/common/interactive/dialog-wrapper.js.map +1 -0
  155. package/dist/common/interactive/dialog-wrapper.mjs +102 -0
  156. package/dist/common/interactive/dialog-wrapper.mjs.map +1 -0
  157. package/dist/common/interactive/filter.js +287 -0
  158. package/dist/common/interactive/filter.js.map +1 -0
  159. package/dist/common/interactive/filter.mjs +280 -0
  160. package/dist/common/interactive/filter.mjs.map +1 -0
  161. package/dist/common/interactive/index.js +235 -0
  162. package/dist/common/interactive/index.js.map +1 -0
  163. package/dist/common/interactive/index.mjs +24 -0
  164. package/dist/common/interactive/index.mjs.map +1 -0
  165. package/dist/common/interactive/list.js +160 -0
  166. package/dist/common/interactive/list.js.map +1 -0
  167. package/dist/common/interactive/list.mjs +134 -0
  168. package/dist/common/interactive/list.mjs.map +1 -0
  169. package/dist/common/interactive/otp-dialog/index.js +35 -0
  170. package/dist/common/interactive/otp-dialog/index.js.map +1 -0
  171. package/dist/common/interactive/otp-dialog/index.mjs +6 -0
  172. package/dist/common/interactive/otp-dialog/index.mjs.map +1 -0
  173. package/dist/common/interactive/otp-dialog/otp-dialog.js +325 -0
  174. package/dist/common/interactive/otp-dialog/otp-dialog.js.map +1 -0
  175. package/dist/common/interactive/otp-dialog/otp-dialog.mjs +303 -0
  176. package/dist/common/interactive/otp-dialog/otp-dialog.mjs.map +1 -0
  177. package/dist/common/interactive/otp-dialog/reducer.js +40 -0
  178. package/dist/common/interactive/otp-dialog/reducer.js.map +1 -0
  179. package/dist/common/interactive/otp-dialog/reducer.mjs +37 -0
  180. package/dist/common/interactive/otp-dialog/reducer.mjs.map +1 -0
  181. package/dist/common/interactive/otp-dialog/types.js +15 -0
  182. package/dist/common/interactive/otp-dialog/types.js.map +1 -0
  183. package/dist/common/interactive/otp-dialog/types.mjs +13 -0
  184. package/dist/common/interactive/otp-dialog/types.mjs.map +1 -0
  185. package/dist/common/interactive/otp-dialog/utils.js +24 -0
  186. package/dist/common/interactive/otp-dialog/utils.js.map +1 -0
  187. package/dist/common/interactive/otp-dialog/utils.mjs +21 -0
  188. package/dist/common/interactive/otp-dialog/utils.mjs.map +1 -0
  189. package/dist/common/interactive/pagination/PaginationSkeleton.js +51 -0
  190. package/dist/common/interactive/pagination/PaginationSkeleton.js.map +1 -0
  191. package/dist/common/interactive/pagination/PaginationSkeleton.mjs +49 -0
  192. package/dist/common/interactive/pagination/PaginationSkeleton.mjs.map +1 -0
  193. package/dist/common/interactive/pagination/index.js +235 -0
  194. package/dist/common/interactive/pagination/index.js.map +1 -0
  195. package/dist/common/interactive/pagination/index.mjs +223 -0
  196. package/dist/common/interactive/pagination/index.mjs.map +1 -0
  197. package/dist/common/interactive/pagination/usePagination.js +28 -0
  198. package/dist/common/interactive/pagination/usePagination.js.map +1 -0
  199. package/dist/common/interactive/pagination/usePagination.mjs +25 -0
  200. package/dist/common/interactive/pagination/usePagination.mjs.map +1 -0
  201. package/dist/common/interactive/popover-wrapper.js +138 -0
  202. package/dist/common/interactive/popover-wrapper.js.map +1 -0
  203. package/dist/common/interactive/popover-wrapper.mjs +116 -0
  204. package/dist/common/interactive/popover-wrapper.mjs.map +1 -0
  205. package/dist/common/interactive/pressable.js +84 -0
  206. package/dist/common/interactive/pressable.js.map +1 -0
  207. package/dist/common/interactive/pressable.mjs +62 -0
  208. package/dist/common/interactive/pressable.mjs.map +1 -0
  209. package/dist/common/interactive/select/context.js +38 -0
  210. package/dist/common/interactive/select/context.js.map +1 -0
  211. package/dist/common/interactive/select/context.mjs +14 -0
  212. package/dist/common/interactive/select/context.mjs.map +1 -0
  213. package/dist/common/interactive/select/index.js +123 -0
  214. package/dist/common/interactive/select/index.js.map +1 -0
  215. package/dist/common/interactive/select/index.mjs +18 -0
  216. package/dist/common/interactive/select/index.mjs.map +1 -0
  217. package/dist/common/interactive/select/select-body.js +89 -0
  218. package/dist/common/interactive/select/select-body.js.map +1 -0
  219. package/dist/common/interactive/select/select-body.mjs +67 -0
  220. package/dist/common/interactive/select/select-body.mjs.map +1 -0
  221. package/dist/common/interactive/select/select-close.js +38 -0
  222. package/dist/common/interactive/select/select-close.js.map +1 -0
  223. package/dist/common/interactive/select/select-close.mjs +16 -0
  224. package/dist/common/interactive/select/select-close.mjs.map +1 -0
  225. package/dist/common/interactive/select/select-content-auto-layout.js +221 -0
  226. package/dist/common/interactive/select/select-content-auto-layout.js.map +1 -0
  227. package/dist/common/interactive/select/select-content-auto-layout.mjs +199 -0
  228. package/dist/common/interactive/select/select-content-auto-layout.mjs.map +1 -0
  229. package/dist/common/interactive/select/select-content-group-auto-layout.js +411 -0
  230. package/dist/common/interactive/select/select-content-group-auto-layout.js.map +1 -0
  231. package/dist/common/interactive/select/select-content-group-auto-layout.mjs +389 -0
  232. package/dist/common/interactive/select/select-content-group-auto-layout.mjs.map +1 -0
  233. package/dist/common/interactive/select/select-content.js +187 -0
  234. package/dist/common/interactive/select/select-content.js.map +1 -0
  235. package/dist/common/interactive/select/select-content.mjs +165 -0
  236. package/dist/common/interactive/select/select-content.mjs.map +1 -0
  237. package/dist/common/interactive/select/select-footer.js +82 -0
  238. package/dist/common/interactive/select/select-footer.js.map +1 -0
  239. package/dist/common/interactive/select/select-footer.mjs +60 -0
  240. package/dist/common/interactive/select/select-footer.mjs.map +1 -0
  241. package/dist/common/interactive/select/select-item.js +214 -0
  242. package/dist/common/interactive/select/select-item.js.map +1 -0
  243. package/dist/common/interactive/select/select-item.mjs +191 -0
  244. package/dist/common/interactive/select/select-item.mjs.map +1 -0
  245. package/dist/common/interactive/select/select-layout.js +66 -0
  246. package/dist/common/interactive/select/select-layout.js.map +1 -0
  247. package/dist/common/interactive/select/select-layout.mjs +41 -0
  248. package/dist/common/interactive/select/select-layout.mjs.map +1 -0
  249. package/dist/common/interactive/select/select-search.js +55 -0
  250. package/dist/common/interactive/select/select-search.js.map +1 -0
  251. package/dist/common/interactive/select/select-search.mjs +33 -0
  252. package/dist/common/interactive/select/select-search.mjs.map +1 -0
  253. package/dist/common/interactive/select/select-states.js +57 -0
  254. package/dist/common/interactive/select/select-states.js.map +1 -0
  255. package/dist/common/interactive/select/select-states.mjs +34 -0
  256. package/dist/common/interactive/select/select-states.mjs.map +1 -0
  257. package/dist/common/interactive/select/select-trigger.js +310 -0
  258. package/dist/common/interactive/select/select-trigger.js.map +1 -0
  259. package/dist/common/interactive/select/select-trigger.mjs +286 -0
  260. package/dist/common/interactive/select/select-trigger.mjs.map +1 -0
  261. package/dist/common/interactive/select/select-value.js +52 -0
  262. package/dist/common/interactive/select/select-value.js.map +1 -0
  263. package/dist/common/interactive/select/select-value.mjs +30 -0
  264. package/dist/common/interactive/select/select-value.mjs.map +1 -0
  265. package/dist/common/interactive/select/select.js +184 -0
  266. package/dist/common/interactive/select/select.js.map +1 -0
  267. package/dist/common/interactive/select/select.mjs +162 -0
  268. package/dist/common/interactive/select/select.mjs.map +1 -0
  269. package/dist/common/interactive/select/types.js +4 -0
  270. package/dist/common/interactive/select/types.js.map +1 -0
  271. package/dist/common/interactive/select/types.mjs +3 -0
  272. package/dist/common/interactive/select/types.mjs.map +1 -0
  273. package/dist/common/interactive/select/utils.js +31 -0
  274. package/dist/common/interactive/select/utils.js.map +1 -0
  275. package/dist/common/interactive/select/utils.mjs +28 -0
  276. package/dist/common/interactive/select/utils.mjs.map +1 -0
  277. package/dist/common/interactive/select/variants.js +27 -0
  278. package/dist/common/interactive/select/variants.js.map +1 -0
  279. package/dist/common/interactive/select/variants.mjs +25 -0
  280. package/dist/common/interactive/select/variants.mjs.map +1 -0
  281. package/dist/common/interactive/select-chip.js +76 -0
  282. package/dist/common/interactive/select-chip.js.map +1 -0
  283. package/dist/common/interactive/select-chip.mjs +74 -0
  284. package/dist/common/interactive/select-chip.mjs.map +1 -0
  285. package/dist/common/interactive/select-level.js +236 -0
  286. package/dist/common/interactive/select-level.js.map +1 -0
  287. package/dist/common/interactive/select-level.mjs +230 -0
  288. package/dist/common/interactive/select-level.mjs.map +1 -0
  289. package/dist/common/interactive/select-range.js +211 -0
  290. package/dist/common/interactive/select-range.js.map +1 -0
  291. package/dist/common/interactive/select-range.mjs +209 -0
  292. package/dist/common/interactive/select-range.mjs.map +1 -0
  293. package/dist/common/interactive/select-with-api.js +767 -0
  294. package/dist/common/interactive/select-with-api.js.map +1 -0
  295. package/dist/common/interactive/select-with-api.mjs +758 -0
  296. package/dist/common/interactive/select-with-api.mjs.map +1 -0
  297. package/dist/common/interactive/select.js +15 -0
  298. package/dist/common/interactive/select.js.map +1 -0
  299. package/dist/common/interactive/select.mjs +4 -0
  300. package/dist/common/interactive/select.mjs.map +1 -0
  301. package/dist/common/interactive/sheet-wrapper.js +105 -0
  302. package/dist/common/interactive/sheet-wrapper.js.map +1 -0
  303. package/dist/common/interactive/sheet-wrapper.mjs +83 -0
  304. package/dist/common/interactive/sheet-wrapper.mjs.map +1 -0
  305. package/dist/common/interactive/table/enhanced-table.js +390 -0
  306. package/dist/common/interactive/table/enhanced-table.js.map +1 -0
  307. package/dist/common/interactive/table/enhanced-table.mjs +388 -0
  308. package/dist/common/interactive/table/enhanced-table.mjs.map +1 -0
  309. package/dist/common/interactive/table/index.js +83 -0
  310. package/dist/common/interactive/table/index.js.map +1 -0
  311. package/dist/common/interactive/table/index.mjs +68 -0
  312. package/dist/common/interactive/table/index.mjs.map +1 -0
  313. package/dist/common/interactive/table/table-pagination.js +12 -0
  314. package/dist/common/interactive/table/table-pagination.js.map +1 -0
  315. package/dist/common/interactive/table/table-pagination.mjs +10 -0
  316. package/dist/common/interactive/table/table-pagination.mjs.map +1 -0
  317. package/dist/common/interactive/table/types.js +4 -0
  318. package/dist/common/interactive/table/types.js.map +1 -0
  319. package/dist/common/interactive/table/types.mjs +3 -0
  320. package/dist/common/interactive/table/types.mjs.map +1 -0
  321. package/dist/common/interactive/time-picker.js +313 -0
  322. package/dist/common/interactive/time-picker.js.map +1 -0
  323. package/dist/common/interactive/time-picker.mjs +307 -0
  324. package/dist/common/interactive/time-picker.mjs.map +1 -0
  325. package/dist/common/interactive/types.js +4 -0
  326. package/dist/common/interactive/types.js.map +1 -0
  327. package/dist/common/interactive/types.mjs +3 -0
  328. package/dist/common/interactive/types.mjs.map +1 -0
  329. package/dist/common/pages/page-404.js +16 -0
  330. package/dist/common/pages/page-404.js.map +1 -0
  331. package/dist/common/pages/page-404.mjs +11 -0
  332. package/dist/common/pages/page-404.mjs.map +1 -0
  333. package/dist/common/pages/page-500.js +30 -0
  334. package/dist/common/pages/page-500.js.map +1 -0
  335. package/dist/common/pages/page-500.mjs +25 -0
  336. package/dist/common/pages/page-500.mjs.map +1 -0
  337. package/dist/components/accordion.js +65 -0
  338. package/dist/components/accordion.js.map +1 -0
  339. package/dist/components/accordion.mjs +39 -0
  340. package/dist/components/accordion.mjs.map +1 -0
  341. package/dist/components/alert-dialog.js +231 -0
  342. package/dist/components/alert-dialog.js.map +1 -0
  343. package/dist/components/alert-dialog.mjs +197 -0
  344. package/dist/components/alert-dialog.mjs.map +1 -0
  345. package/dist/components/alert.js +97 -0
  346. package/dist/components/alert.js.map +1 -0
  347. package/dist/components/alert.mjs +72 -0
  348. package/dist/components/alert.mjs.map +1 -0
  349. package/dist/components/aspect-ratio.js +29 -0
  350. package/dist/components/aspect-ratio.js.map +1 -0
  351. package/dist/components/aspect-ratio.mjs +7 -0
  352. package/dist/components/aspect-ratio.mjs.map +1 -0
  353. package/dist/components/avatar.js +64 -0
  354. package/dist/components/avatar.js.map +1 -0
  355. package/dist/components/avatar.mjs +39 -0
  356. package/dist/components/avatar.mjs.map +1 -0
  357. package/dist/components/badge.js +72 -0
  358. package/dist/components/badge.js.map +1 -0
  359. package/dist/components/badge.mjs +69 -0
  360. package/dist/components/badge.mjs.map +1 -0
  361. package/dist/components/breadcrumb.js +109 -0
  362. package/dist/components/breadcrumb.js.map +1 -0
  363. package/dist/components/breadcrumb.mjs +81 -0
  364. package/dist/components/breadcrumb.mjs.map +1 -0
  365. package/dist/components/button.js +250 -0
  366. package/dist/components/button.js.map +1 -0
  367. package/dist/components/button.mjs +226 -0
  368. package/dist/components/button.mjs.map +1 -0
  369. package/dist/components/calendar.js +681 -0
  370. package/dist/components/calendar.js.map +1 -0
  371. package/dist/components/calendar.mjs +659 -0
  372. package/dist/components/calendar.mjs.map +1 -0
  373. package/dist/components/card.js +98 -0
  374. package/dist/components/card.js.map +1 -0
  375. package/dist/components/card.mjs +71 -0
  376. package/dist/components/card.mjs.map +1 -0
  377. package/dist/components/carousel.js +237 -0
  378. package/dist/components/carousel.js.map +1 -0
  379. package/dist/components/carousel.mjs +208 -0
  380. package/dist/components/carousel.mjs.map +1 -0
  381. package/dist/components/chart.js +252 -0
  382. package/dist/components/chart.js.map +1 -0
  383. package/dist/components/chart.mjs +224 -0
  384. package/dist/components/chart.mjs.map +1 -0
  385. package/dist/components/checkbox.js +97 -0
  386. package/dist/components/checkbox.js.map +1 -0
  387. package/dist/components/checkbox.mjs +74 -0
  388. package/dist/components/checkbox.mjs.map +1 -0
  389. package/dist/components/chip.js +88 -0
  390. package/dist/components/chip.js.map +1 -0
  391. package/dist/components/chip.mjs +82 -0
  392. package/dist/components/chip.mjs.map +1 -0
  393. package/dist/components/collapsible.js +33 -0
  394. package/dist/components/collapsible.js.map +1 -0
  395. package/dist/components/collapsible.mjs +9 -0
  396. package/dist/components/collapsible.mjs.map +1 -0
  397. package/dist/components/command.js +125 -0
  398. package/dist/components/command.js.map +1 -0
  399. package/dist/components/command.mjs +95 -0
  400. package/dist/components/command.mjs.map +1 -0
  401. package/dist/components/context-menu.js +168 -0
  402. package/dist/components/context-menu.js.map +1 -0
  403. package/dist/components/context-menu.mjs +131 -0
  404. package/dist/components/context-menu.mjs.map +1 -0
  405. package/dist/components/dialog.js +192 -0
  406. package/dist/components/dialog.js.map +1 -0
  407. package/dist/components/dialog.mjs +159 -0
  408. package/dist/components/dialog.mjs.map +1 -0
  409. package/dist/components/drawer.js +98 -0
  410. package/dist/components/drawer.js.map +1 -0
  411. package/dist/components/drawer.mjs +67 -0
  412. package/dist/components/drawer.mjs.map +1 -0
  413. package/dist/components/dropdown-menu.js +163 -0
  414. package/dist/components/dropdown-menu.js.map +1 -0
  415. package/dist/components/dropdown-menu.mjs +126 -0
  416. package/dist/components/dropdown-menu.mjs.map +1 -0
  417. package/dist/components/form.js +123 -0
  418. package/dist/components/form.js.map +1 -0
  419. package/dist/components/form.mjs +94 -0
  420. package/dist/components/form.mjs.map +1 -0
  421. package/dist/components/hover-card.js +50 -0
  422. package/dist/components/hover-card.js.map +1 -0
  423. package/dist/components/hover-card.mjs +25 -0
  424. package/dist/components/hover-card.mjs.map +1 -0
  425. package/dist/components/input-otp.js +84 -0
  426. package/dist/components/input-otp.js.map +1 -0
  427. package/dist/components/input-otp.mjs +59 -0
  428. package/dist/components/input-otp.mjs.map +1 -0
  429. package/dist/components/input.js +858 -0
  430. package/dist/components/input.js.map +1 -0
  431. package/dist/components/input.mjs +831 -0
  432. package/dist/components/input.mjs.map +1 -0
  433. package/dist/components/label.js +38 -0
  434. package/dist/components/label.js.map +1 -0
  435. package/dist/components/label.mjs +15 -0
  436. package/dist/components/label.mjs.map +1 -0
  437. package/dist/components/lottie.js +59 -0
  438. package/dist/components/lottie.js.map +1 -0
  439. package/dist/components/lottie.mjs +49 -0
  440. package/dist/components/lottie.mjs.map +1 -0
  441. package/dist/components/menubar.js +195 -0
  442. package/dist/components/menubar.js.map +1 -0
  443. package/dist/components/menubar.mjs +157 -0
  444. package/dist/components/menubar.mjs.map +1 -0
  445. package/dist/components/navigation-menu.js +126 -0
  446. package/dist/components/navigation-menu.js.map +1 -0
  447. package/dist/components/navigation-menu.mjs +95 -0
  448. package/dist/components/navigation-menu.mjs.map +1 -0
  449. package/dist/components/pagination.js +112 -0
  450. package/dist/components/pagination.js.map +1 -0
  451. package/dist/components/pagination.mjs +84 -0
  452. package/dist/components/pagination.mjs.map +1 -0
  453. package/dist/components/popover.js +63 -0
  454. package/dist/components/popover.js.map +1 -0
  455. package/dist/components/popover.mjs +38 -0
  456. package/dist/components/popover.mjs.map +1 -0
  457. package/dist/components/progress.js +50 -0
  458. package/dist/components/progress.js.map +1 -0
  459. package/dist/components/progress.mjs +27 -0
  460. package/dist/components/progress.mjs.map +1 -0
  461. package/dist/components/radio-group.js +91 -0
  462. package/dist/components/radio-group.js.map +1 -0
  463. package/dist/components/radio-group.mjs +67 -0
  464. package/dist/components/radio-group.mjs.map +1 -0
  465. package/dist/components/resizable.js +59 -0
  466. package/dist/components/resizable.js.map +1 -0
  467. package/dist/components/resizable.mjs +35 -0
  468. package/dist/components/resizable.mjs.map +1 -0
  469. package/dist/components/responsive-popover.js +74 -0
  470. package/dist/components/responsive-popover.js.map +1 -0
  471. package/dist/components/responsive-popover.mjs +50 -0
  472. package/dist/components/responsive-popover.mjs.map +1 -0
  473. package/dist/components/scroll-area.js +63 -0
  474. package/dist/components/scroll-area.js.map +1 -0
  475. package/dist/components/scroll-area.mjs +39 -0
  476. package/dist/components/scroll-area.mjs.map +1 -0
  477. package/dist/components/separator.js +47 -0
  478. package/dist/components/separator.js.map +1 -0
  479. package/dist/components/separator.mjs +24 -0
  480. package/dist/components/separator.mjs.map +1 -0
  481. package/dist/components/sheet.js +239 -0
  482. package/dist/components/sheet.js.map +1 -0
  483. package/dist/components/sheet.mjs +206 -0
  484. package/dist/components/sheet.mjs.map +1 -0
  485. package/dist/components/sidebar.js +888 -0
  486. package/dist/components/sidebar.js.map +1 -0
  487. package/dist/components/sidebar.mjs +842 -0
  488. package/dist/components/sidebar.mjs.map +1 -0
  489. package/dist/components/skeleton.js +153 -0
  490. package/dist/components/skeleton.js.map +1 -0
  491. package/dist/components/skeleton.mjs +127 -0
  492. package/dist/components/skeleton.mjs.map +1 -0
  493. package/dist/components/slider.js +45 -0
  494. package/dist/components/slider.js.map +1 -0
  495. package/dist/components/slider.mjs +22 -0
  496. package/dist/components/slider.mjs.map +1 -0
  497. package/dist/components/sonner.js +76 -0
  498. package/dist/components/sonner.js.map +1 -0
  499. package/dist/components/sonner.mjs +71 -0
  500. package/dist/components/sonner.mjs.map +1 -0
  501. package/dist/components/spinner.js +59 -0
  502. package/dist/components/spinner.js.map +1 -0
  503. package/dist/components/spinner.mjs +36 -0
  504. package/dist/components/spinner.mjs.map +1 -0
  505. package/dist/components/stepper.js +726 -0
  506. package/dist/components/stepper.js.map +1 -0
  507. package/dist/components/stepper.mjs +702 -0
  508. package/dist/components/stepper.mjs.map +1 -0
  509. package/dist/components/switch.js +85 -0
  510. package/dist/components/switch.js.map +1 -0
  511. package/dist/components/switch.mjs +62 -0
  512. package/dist/components/switch.mjs.map +1 -0
  513. package/dist/components/table.js +91 -0
  514. package/dist/components/table.js.map +1 -0
  515. package/dist/components/table.mjs +62 -0
  516. package/dist/components/table.mjs.map +1 -0
  517. package/dist/components/tabs.js +287 -0
  518. package/dist/components/tabs.js.map +1 -0
  519. package/dist/components/tabs.mjs +261 -0
  520. package/dist/components/tabs.mjs.map +1 -0
  521. package/dist/components/textarea.js +200 -0
  522. package/dist/components/textarea.js.map +1 -0
  523. package/dist/components/textarea.mjs +174 -0
  524. package/dist/components/textarea.mjs.map +1 -0
  525. package/dist/components/toggle-group.js +67 -0
  526. package/dist/components/toggle-group.js.map +1 -0
  527. package/dist/components/toggle-group.mjs +43 -0
  528. package/dist/components/toggle-group.mjs.map +1 -0
  529. package/dist/components/toggle.js +63 -0
  530. package/dist/components/toggle.js.map +1 -0
  531. package/dist/components/toggle.mjs +39 -0
  532. package/dist/components/toggle.mjs.map +1 -0
  533. package/dist/components/tooltip.js +172 -0
  534. package/dist/components/tooltip.js.map +1 -0
  535. package/dist/components/tooltip.mjs +145 -0
  536. package/dist/components/tooltip.mjs.map +1 -0
  537. package/dist/hooks/index.js +27 -0
  538. package/dist/hooks/index.js.map +1 -0
  539. package/dist/hooks/index.mjs +6 -0
  540. package/dist/hooks/index.mjs.map +1 -0
  541. package/dist/hooks/useCopyToClipboard.js +59 -0
  542. package/dist/hooks/useCopyToClipboard.js.map +1 -0
  543. package/dist/hooks/useCopyToClipboard.mjs +57 -0
  544. package/dist/hooks/useCopyToClipboard.mjs.map +1 -0
  545. package/dist/hooks/useDevice.js +20 -0
  546. package/dist/hooks/useDevice.js.map +1 -0
  547. package/dist/hooks/useDevice.mjs +14 -0
  548. package/dist/hooks/useDevice.mjs.map +1 -0
  549. package/dist/hooks/useDialogTracking.js +113 -0
  550. package/dist/hooks/useDialogTracking.js.map +1 -0
  551. package/dist/hooks/useDialogTracking.mjs +91 -0
  552. package/dist/hooks/useDialogTracking.mjs.map +1 -0
  553. package/dist/hooks/useIsMounted.js +15 -0
  554. package/dist/hooks/useIsMounted.js.map +1 -0
  555. package/dist/hooks/useIsMounted.mjs +13 -0
  556. package/dist/hooks/useIsMounted.mjs.map +1 -0
  557. package/dist/hooks/usePathname.js +85 -0
  558. package/dist/hooks/usePathname.js.map +1 -0
  559. package/dist/hooks/usePathname.mjs +83 -0
  560. package/dist/hooks/usePathname.mjs.map +1 -0
  561. package/dist/icons.js +14 -0
  562. package/dist/icons.js.map +1 -0
  563. package/dist/icons.mjs +3 -0
  564. package/dist/icons.mjs.map +1 -0
  565. package/dist/index.d.ts +4 -0
  566. package/dist/index.d.ts.map +1 -1
  567. package/dist/index.js +403 -8151
  568. package/dist/index.js.map +1 -1
  569. package/dist/index.mjs +62 -7844
  570. package/dist/index.mjs.map +1 -1
  571. package/dist/lib/formatCurrency.js +187 -0
  572. package/dist/lib/formatCurrency.js.map +1 -0
  573. package/dist/lib/formatCurrency.mjs +185 -0
  574. package/dist/lib/formatCurrency.mjs.map +1 -0
  575. package/dist/lib/helpers.js +171 -0
  576. package/dist/lib/helpers.js.map +1 -0
  577. package/dist/lib/helpers.mjs +157 -0
  578. package/dist/lib/helpers.mjs.map +1 -0
  579. package/dist/lib/index.js +33 -0
  580. package/dist/lib/index.js.map +1 -0
  581. package/dist/lib/index.mjs +6 -0
  582. package/dist/lib/index.mjs.map +1 -0
  583. package/dist/lib/types.js +11 -0
  584. package/dist/lib/types.js.map +1 -0
  585. package/dist/lib/types.mjs +9 -0
  586. package/dist/lib/types.mjs.map +1 -0
  587. package/dist/lib/utils.js +24 -0
  588. package/dist/lib/utils.js.map +1 -0
  589. package/dist/lib/utils.mjs +19 -0
  590. package/dist/lib/utils.mjs.map +1 -0
  591. package/dist/providers/DeviceSizeWatcher/index.js +72 -0
  592. package/dist/providers/DeviceSizeWatcher/index.js.map +1 -0
  593. package/dist/providers/DeviceSizeWatcher/index.mjs +47 -0
  594. package/dist/providers/DeviceSizeWatcher/index.mjs.map +1 -0
  595. package/dist/providers/DeviceSizeWatcher/useDeviceSizeStore.js +22 -0
  596. package/dist/providers/DeviceSizeWatcher/useDeviceSizeStore.js.map +1 -0
  597. package/dist/providers/DeviceSizeWatcher/useDeviceSizeStore.mjs +20 -0
  598. package/dist/providers/DeviceSizeWatcher/useDeviceSizeStore.mjs.map +1 -0
  599. package/dist/providers/UISystemProvider.js +197 -0
  600. package/dist/providers/UISystemProvider.js.map +1 -0
  601. package/dist/providers/UISystemProvider.mjs +188 -0
  602. package/dist/providers/UISystemProvider.mjs.map +1 -0
  603. package/dist/providers/index.js +24 -0
  604. package/dist/providers/index.js.map +1 -0
  605. package/dist/providers/index.mjs +3 -0
  606. package/dist/providers/index.mjs.map +1 -0
  607. package/dist/theme.js +333 -0
  608. package/dist/theme.js.map +1 -0
  609. package/dist/theme.mjs +327 -0
  610. package/dist/theme.mjs.map +1 -0
  611. package/package.json +1 -1
  612. package/dist/index.css +0 -43
  613. package/dist/index.css.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/common/interactive/otp-dialog/otp-dialog.tsx"],"names":[],"mappings":"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","file":"otp-dialog.mjs","sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Button } from '../../../components/button';\nimport { InputOTP, InputOTPGroup, InputOTPSlot } from '../../../components/input-otp';\nimport { Spinner } from '../../../components/spinner';\nimport { debounce } from '../../../lib/helpers';\nimport { Countdown } from '../../display/countdown';\nimport { AlertDialogWrapper } from '../alert-dialog-wrapper';\nimport { initialOtpDialogState, otpDialogReducer } from './reducer';\nimport { OtpDialogActionType, type OtpDialogProps } from './types';\nimport { maskPhoneNumber, normalizeErrorMessage } from './utils';\nimport { cn } from '@/lib';\n\n/**\n * OtpDialog - A reusable OTP verification dialog component\n *\n * @example\n * // Controlled pattern (with external state)\n * const [open, setOpen] = useState(false);\n * <OtpDialog\n * open={open}\n * onOpenChange={setOpen}\n * onVerifyOtp={async (otp) => {\n * try {\n * await verifyApi(otp);\n * return { success: true };\n * } catch (error) {\n * return { success: false, error: 'Invalid OTP' };\n * }\n * }}\n * />\n *\n * @example\n * // Uncontrolled pattern (with trigger button)\n * <OtpDialog\n * trigger={<Button>Verify Phone</Button>}\n * onVerifyOtp={async (otp) => {\n * await verifyApi(otp); // throws on error\n * }}\n * />\n */\n\nconst OtpDialog: React.FC<OtpDialogProps> = ({\n trigger,\n triggerAsChild,\n triggerClassName,\n open,\n onOpenChange,\n defaultOpen,\n title = 'Nhập mã OTP',\n description,\n size = 'lg',\n hasCloseButton,\n contentClassName,\n phoneNumber,\n needToMaskPhoneNumber = true,\n countdownDuration = 300,\n onVerifyOtp,\n onResendOtp,\n isVerifying = false,\n isResending = false,\n error,\n onSuccess,\n onError,\n verifyButtonText = 'Xác nhận',\n resendButtonText = 'Gửi lại OTP',\n phonePromptText = 'OTP được gửi qua số điện thoại',\n customInstructions,\n otpLength = 6,\n otpPattern = '^[0-9]+$',\n autoFocus = true,\n autoSubmit = true, // Default to auto-submit\n trackingNameView,\n trackingNameClose,\n trackingData,\n trackingIndex,\n}) => {\n const [state, dispatch] = React.useReducer(otpDialogReducer, initialOtpDialogState);\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n const isVerifyingRef = React.useRef(false); // Prevent double submission\n\n // Use external error if provided, otherwise use internal error\n const displayError = error || state.internalError;\n\n // Mask phone number for display\n const maskedPhone = React.useMemo(\n () => (needToMaskPhoneNumber ? maskPhoneNumber(phoneNumber) : phoneNumber),\n [phoneNumber, needToMaskPhoneNumber],\n );\n\n // Reset state when dialog opens/closes and handle auto-focus\n React.useEffect(() => {\n if (open) {\n dispatch({ type: OtpDialogActionType.RESET });\n isVerifyingRef.current = false; // Reset verifying flag\n\n if (autoFocus) {\n // Focus input after dialog animation completes\n // Using requestAnimationFrame + setTimeout for better timing\n let rafId: number;\n let timerId: NodeJS.Timeout;\n\n rafId = requestAnimationFrame(() => {\n timerId = setTimeout(() => {\n const otpInput = document.querySelector('[data-input-otp]');\n if (otpInput instanceof HTMLInputElement) {\n otpInput.focus();\n }\n }, 150);\n });\n\n return () => {\n cancelAnimationFrame(rafId);\n clearTimeout(timerId);\n };\n }\n }\n }, [open, autoFocus]);\n\n const handleResendOtp = async () => {\n if (!onResendOtp) return;\n\n try {\n dispatch({ type: OtpDialogActionType.SET_ERROR, payload: null });\n await onResendOtp();\n\n // Reset countdown and OTP input on successful resend\n dispatch({ type: OtpDialogActionType.SET_COUNTDOWN_ACTIVE, payload: true });\n dispatch({ type: OtpDialogActionType.INCREMENT_COUNTDOWN_KEY });\n dispatch({ type: OtpDialogActionType.SET_OTP, payload: '' });\n } catch (err: any) {\n const errorMessage = normalizeErrorMessage(err) || 'Gửi lại OTP thất bại';\n dispatch({ type: OtpDialogActionType.SET_ERROR, payload: errorMessage });\n if (onError) {\n onError(errorMessage);\n }\n }\n };\n\n const handleVerifyOtp = React.useCallback(\n async (otpValue?: string) => {\n const otpToVerify = otpValue || state.otp;\n\n // Prevent double submission - use both ref and state check\n if (isVerifyingRef.current || state.isVerifying) {\n console.warn('[OTP] Verification already in progress, skipping');\n return;\n }\n\n if (otpToVerify.length !== otpLength) {\n const errorMessage = `Vui lòng nhập đủ ${otpLength} số OTP`;\n dispatch({ type: OtpDialogActionType.SET_ERROR, payload: errorMessage });\n if (onError) {\n onError(errorMessage);\n }\n return;\n }\n\n try {\n // Set both ref and state to prevent any race conditions\n isVerifyingRef.current = true;\n dispatch({ type: OtpDialogActionType.SET_IS_VERIFYING, payload: true });\n dispatch({ type: OtpDialogActionType.SET_ERROR, payload: null });\n\n console.log('[OTP] Starting verification with value:', otpToVerify);\n\n // Call onVerifyOtp and handle both return value and thrown errors\n const result = await onVerifyOtp(otpToVerify);\n\n console.log('[OTP] Verification result:', result);\n\n // IMPORTANT: Only close dialog if explicitly returns { success: true }\n // Any other return value is treated as failure to keep dialog open\n if (result?.success === true) {\n // Verification successful - execute success callback and close dialog\n if (onSuccess) {\n await onSuccess();\n }\n\n // Close dialog after all success handlers complete\n if (onOpenChange) {\n onOpenChange(false);\n }\n } else {\n // Verification failed or returned non-success - keep dialog open\n const errorMessage = result?.error || 'Mã OTP không đúng hoặc hết hạn';\n dispatch({ type: OtpDialogActionType.SET_ERROR, payload: errorMessage });\n dispatch({ type: OtpDialogActionType.SET_OTP, payload: '' }); // Clear OTP for retry\n\n if (onError) {\n onError(errorMessage);\n }\n\n // Re-focus input after clearing OTP\n setTimeout(() => {\n const otpInput = document.querySelector('[data-input-otp]');\n if (otpInput instanceof HTMLInputElement) {\n otpInput.focus();\n }\n }, 100);\n }\n } catch (err: any) {\n // Thrown error - treat as verification failure\n console.error('[OTP] Verification error:', err);\n const errorMessage = normalizeErrorMessage(err);\n dispatch({ type: OtpDialogActionType.SET_ERROR, payload: errorMessage });\n dispatch({ type: OtpDialogActionType.SET_OTP, payload: '' }); // Clear OTP for retry\n\n if (onError) {\n onError(errorMessage);\n }\n\n // Re-focus input after clearing OTP\n setTimeout(() => {\n const otpInput = document.querySelector('[data-input-otp]');\n if (otpInput instanceof HTMLInputElement) {\n otpInput.focus();\n }\n }, 100);\n } finally {\n // CRITICAL: Always reset both ref and state in finally block\n // This ensures cleanup even if there's an early return or exception\n console.log('[OTP] Verification complete, resetting flags');\n isVerifyingRef.current = false;\n dispatch({ type: OtpDialogActionType.SET_IS_VERIFYING, payload: false });\n }\n },\n // Include state.otp to ensure fresh value is captured in closure\n // Even though we prefer passed otpValue, state.otp is used as fallback\n [otpLength, onVerifyOtp, onSuccess, onOpenChange, onError, state.otp],\n );\n\n const handleCountdownComplete = () => {\n dispatch({ type: OtpDialogActionType.SET_COUNTDOWN_ACTIVE, payload: false });\n };\n\n // Debounced auto-submit function with longer delay to prevent race conditions\n // Using 300ms to ensure user has finished typing and to give enough time\n // for any pending state updates to complete before submission\n //\n // FIXED: Store debounce instance in ref, but pass fresh handleVerifyOtp on each call\n // to avoid stale closure issues while maintaining stable debounce timer\n const debouncedAutoSubmitRef = React.useRef(\n debounce(async (otpValue: string) => {\n // Additional check: only submit if not currently verifying\n if (isVerifyingRef.current) {\n console.warn('[OTP] Skipping auto-submit, verification in progress');\n return;\n }\n\n console.log('[OTP] Auto-submitting OTP:', otpValue);\n // Don't pass verifyFn as param - will be accessed via closure from latest render\n }, 300),\n );\n\n // Cancel debounce when dialog closes or component unmounts\n React.useEffect(() => {\n if (!open) {\n // Cancel any pending debounced calls when dialog closes\n debouncedAutoSubmitRef.current.cancel();\n }\n\n return () => {\n // Cleanup on unmount\n debouncedAutoSubmitRef.current.cancel();\n };\n }, [open]); // Re-run when dialog open state changes\n\n const handleOtpChange = (value: string) => {\n // Prevent input changes when verifying or resending\n if (state.isVerifying || isResending) {\n console.warn('[OTP] Input locked during verification/resend');\n return;\n }\n\n console.log('[OTP] Value changed:', value, 'Length:', value.length);\n dispatch({ type: OtpDialogActionType.SET_OTP, payload: value });\n // Clear errors when user starts typing\n dispatch({ type: OtpDialogActionType.SET_ERROR, payload: null });\n\n // Auto-submit when OTP is complete\n if (autoSubmit && value.length === otpLength) {\n console.log('[OTP] Auto-submit triggered for complete OTP');\n // Debounce the submission, then call latest handleVerifyOtp\n // This ensures we always use the most recent handleVerifyOtp reference\n debouncedAutoSubmitRef\n .current(value)\n .then(() => {\n // After debounce completes, call the current handleVerifyOtp\n // This avoids stale closure by accessing handleVerifyOtp at execution time\n return handleVerifyOtp(value);\n })\n .catch((err) => {\n // Error is already handled in handleVerifyOtp\n console.error('[OTP] Auto-submit error:', err);\n });\n }\n };\n\n const renderCountdownComp = React.useCallback(() => {\n return (\n <Countdown\n key={state.countdownKey}\n duration={countdownDuration}\n className=\"text-primary\"\n active={state.isCountdownActive}\n onComplete={handleCountdownComplete}\n formatTime={(minutes: number, seconds: number) =>\n `(${minutes}:${seconds.toString().padStart(2, '0')})`\n }\n />\n );\n }, [countdownDuration, state.isCountdownActive, state.countdownKey]);\n\n return (\n <AlertDialogWrapper\n trigger={trigger}\n triggerAsChild={triggerAsChild}\n triggerClassName={triggerClassName}\n open={open}\n onOpenChange={onOpenChange}\n defaultOpen={defaultOpen}\n title={title}\n description={description}\n hasCloseButton={hasCloseButton}\n contentClassName={contentClassName}\n showDefaultActions={false}\n size={size}\n autoHeight\n childrenClassName=\"h-full p-4 pt-0\"\n showFooter={!autoSubmit}\n trackingNameView={trackingNameView}\n trackingNameClose={trackingNameClose}\n trackingData={trackingData}\n trackingIndex={trackingIndex}\n footerContent={\n <div className=\"flex w-full flex-col gap-3\">\n <Button\n onClick={() => handleVerifyOtp()}\n disabled={state.otp.length !== otpLength || isVerifying}\n loading={isVerifying}\n className=\"w-full\"\n >\n {verifyButtonText}\n </Button>\n </div>\n }\n >\n <div className=\"flex h-full flex-col items-center justify-center gap-4\">\n {/* Phone number info */}\n {phoneNumber && (\n <div className=\"text-center\">\n <p className=\"text-ink-500s font-medium\">\n {phonePromptText} <span className=\"font-medium\">{maskedPhone}</span>\n </p>\n </div>\n )}\n\n {/* Custom instructions */}\n {customInstructions && <div className=\"text-center\">{customInstructions}</div>}\n\n {/* OTP Input */}\n <div className=\"flex justify-center\">\n <InputOTP\n ref={inputRef}\n maxLength={otpLength}\n value={state.otp}\n onChange={handleOtpChange}\n pattern={otpPattern}\n error={!!displayError}\n disabled={state.isVerifying || isResending}\n >\n <InputOTPGroup>\n {Array.from({ length: otpLength }, (_, index) => (\n <InputOTPSlot key={index} index={index} />\n ))}\n </InputOTPGroup>\n </InputOTP>\n </div>\n\n {/* Error message */}\n {displayError && (\n <div className=\"text-center\">\n <p className=\"text-red-500\">{displayError}</p>\n </div>\n )}\n\n {/* Countdown and resend */}\n {onResendOtp && (\n <div className=\"text-ink-400s flex items-center justify-center gap-1\">\n {state.isVerifying && (\n <>\n <span>Đang xác minh</span>\n <Spinner size=\"sm\" />\n </>\n )}\n <div\n className={cn({\n hidden: !state.isCountdownActive || state.isVerifying,\n })}\n >\n {resendButtonText} {renderCountdownComp()}\n </div>\n\n {!state.isVerifying && !state.isCountdownActive && (\n <Button\n variant=\"plain\"\n size=\"sm\"\n onClick={handleResendOtp}\n disabled={isResending}\n loading={isResending}\n >\n {resendButtonText}\n </Button>\n )}\n </div>\n )}\n </div>\n </AlertDialogWrapper>\n );\n};\n\nexport { OtpDialog };\nexport type { OtpDialogProps };\n"]}
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ var types = require('./types');
4
+
5
+ const otpDialogReducer = (state, action) => {
6
+ switch (action.type) {
7
+ case types.OtpDialogActionType.SET_OTP:
8
+ return { ...state, otp: action.payload };
9
+ case types.OtpDialogActionType.SET_ERROR:
10
+ return { ...state, internalError: action.payload };
11
+ case types.OtpDialogActionType.SET_COUNTDOWN_ACTIVE:
12
+ return { ...state, isCountdownActive: action.payload };
13
+ case types.OtpDialogActionType.INCREMENT_COUNTDOWN_KEY:
14
+ return { ...state, countdownKey: state.countdownKey + 1 };
15
+ case types.OtpDialogActionType.SET_IS_VERIFYING:
16
+ return { ...state, isVerifying: action.payload };
17
+ case types.OtpDialogActionType.RESET:
18
+ return {
19
+ otp: "",
20
+ isCountdownActive: true,
21
+ countdownKey: state.countdownKey + 1,
22
+ internalError: null,
23
+ isVerifying: false
24
+ };
25
+ default:
26
+ return state;
27
+ }
28
+ };
29
+ const initialOtpDialogState = {
30
+ otp: "",
31
+ isCountdownActive: true,
32
+ countdownKey: 0,
33
+ internalError: null,
34
+ isVerifying: false
35
+ };
36
+
37
+ exports.initialOtpDialogState = initialOtpDialogState;
38
+ exports.otpDialogReducer = otpDialogReducer;
39
+ //# sourceMappingURL=reducer.js.map
40
+ //# sourceMappingURL=reducer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/common/interactive/otp-dialog/reducer.ts"],"names":["OtpDialogActionType"],"mappings":";;;;AAMO,MAAM,gBAAA,GAAmB,CAC9B,KAAA,EACA,MAAA,KACmB;AACnB,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAKA,yBAAA,CAAoB,OAAA;AACvB,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,GAAA,EAAK,OAAO,OAAA,EAAQ;AAAA,IAEzC,KAAKA,yBAAA,CAAoB,SAAA;AACvB,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,OAAO,OAAA,EAAQ;AAAA,IAEnD,KAAKA,yBAAA,CAAoB,oBAAA;AACvB,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,iBAAA,EAAmB,OAAO,OAAA,EAAQ;AAAA,IAEvD,KAAKA,yBAAA,CAAoB,uBAAA;AACvB,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,YAAA,EAAc,KAAA,CAAM,eAAe,CAAA,EAAE;AAAA,IAE1D,KAAKA,yBAAA,CAAoB,gBAAA;AACvB,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,WAAA,EAAa,OAAO,OAAA,EAAQ;AAAA,IAEjD,KAAKA,yBAAA,CAAoB,KAAA;AACvB,MAAA,OAAO;AAAA,QACL,GAAA,EAAK,EAAA;AAAA,QACL,iBAAA,EAAmB,IAAA;AAAA,QACnB,YAAA,EAAc,MAAM,YAAA,GAAe,CAAA;AAAA,QACnC,aAAA,EAAe,IAAA;AAAA,QACf,WAAA,EAAa;AAAA,OACf;AAAA,IAEF;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAKO,MAAM,qBAAA,GAAwC;AAAA,EACnD,GAAA,EAAK,EAAA;AAAA,EACL,iBAAA,EAAmB,IAAA;AAAA,EACnB,YAAA,EAAc,CAAA;AAAA,EACd,aAAA,EAAe,IAAA;AAAA,EACf,WAAA,EAAa;AACf","file":"reducer.js","sourcesContent":["import { OtpDialogActionType, type OtpDialogState, type OtpDialogAction } from './types';\n\n/**\n * OTP Dialog Reducer\n * Manages state transitions for the OTP dialog component\n */\nexport const otpDialogReducer = (\n state: OtpDialogState,\n action: OtpDialogAction,\n): OtpDialogState => {\n switch (action.type) {\n case OtpDialogActionType.SET_OTP:\n return { ...state, otp: action.payload };\n\n case OtpDialogActionType.SET_ERROR:\n return { ...state, internalError: action.payload };\n\n case OtpDialogActionType.SET_COUNTDOWN_ACTIVE:\n return { ...state, isCountdownActive: action.payload };\n\n case OtpDialogActionType.INCREMENT_COUNTDOWN_KEY:\n return { ...state, countdownKey: state.countdownKey + 1 };\n\n case OtpDialogActionType.SET_IS_VERIFYING:\n return { ...state, isVerifying: action.payload };\n\n case OtpDialogActionType.RESET:\n return {\n otp: '',\n isCountdownActive: true,\n countdownKey: state.countdownKey + 1,\n internalError: null,\n isVerifying: false,\n };\n\n default:\n return state;\n }\n};\n\n/**\n * Initial state for OTP dialog\n */\nexport const initialOtpDialogState: OtpDialogState = {\n otp: '',\n isCountdownActive: true,\n countdownKey: 0,\n internalError: null,\n isVerifying: false,\n};\n"]}
@@ -0,0 +1,37 @@
1
+ import { OtpDialogActionType } from './types';
2
+
3
+ const otpDialogReducer = (state, action) => {
4
+ switch (action.type) {
5
+ case OtpDialogActionType.SET_OTP:
6
+ return { ...state, otp: action.payload };
7
+ case OtpDialogActionType.SET_ERROR:
8
+ return { ...state, internalError: action.payload };
9
+ case OtpDialogActionType.SET_COUNTDOWN_ACTIVE:
10
+ return { ...state, isCountdownActive: action.payload };
11
+ case OtpDialogActionType.INCREMENT_COUNTDOWN_KEY:
12
+ return { ...state, countdownKey: state.countdownKey + 1 };
13
+ case OtpDialogActionType.SET_IS_VERIFYING:
14
+ return { ...state, isVerifying: action.payload };
15
+ case OtpDialogActionType.RESET:
16
+ return {
17
+ otp: "",
18
+ isCountdownActive: true,
19
+ countdownKey: state.countdownKey + 1,
20
+ internalError: null,
21
+ isVerifying: false
22
+ };
23
+ default:
24
+ return state;
25
+ }
26
+ };
27
+ const initialOtpDialogState = {
28
+ otp: "",
29
+ isCountdownActive: true,
30
+ countdownKey: 0,
31
+ internalError: null,
32
+ isVerifying: false
33
+ };
34
+
35
+ export { initialOtpDialogState, otpDialogReducer };
36
+ //# sourceMappingURL=reducer.mjs.map
37
+ //# sourceMappingURL=reducer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/common/interactive/otp-dialog/reducer.ts"],"names":[],"mappings":";;AAMO,MAAM,gBAAA,GAAmB,CAC9B,KAAA,EACA,MAAA,KACmB;AACnB,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,mBAAA,CAAoB,OAAA;AACvB,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,GAAA,EAAK,OAAO,OAAA,EAAQ;AAAA,IAEzC,KAAK,mBAAA,CAAoB,SAAA;AACvB,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,aAAA,EAAe,OAAO,OAAA,EAAQ;AAAA,IAEnD,KAAK,mBAAA,CAAoB,oBAAA;AACvB,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,iBAAA,EAAmB,OAAO,OAAA,EAAQ;AAAA,IAEvD,KAAK,mBAAA,CAAoB,uBAAA;AACvB,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,YAAA,EAAc,KAAA,CAAM,eAAe,CAAA,EAAE;AAAA,IAE1D,KAAK,mBAAA,CAAoB,gBAAA;AACvB,MAAA,OAAO,EAAE,GAAG,KAAA,EAAO,WAAA,EAAa,OAAO,OAAA,EAAQ;AAAA,IAEjD,KAAK,mBAAA,CAAoB,KAAA;AACvB,MAAA,OAAO;AAAA,QACL,GAAA,EAAK,EAAA;AAAA,QACL,iBAAA,EAAmB,IAAA;AAAA,QACnB,YAAA,EAAc,MAAM,YAAA,GAAe,CAAA;AAAA,QACnC,aAAA,EAAe,IAAA;AAAA,QACf,WAAA,EAAa;AAAA,OACf;AAAA,IAEF;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAKO,MAAM,qBAAA,GAAwC;AAAA,EACnD,GAAA,EAAK,EAAA;AAAA,EACL,iBAAA,EAAmB,IAAA;AAAA,EACnB,YAAA,EAAc,CAAA;AAAA,EACd,aAAA,EAAe,IAAA;AAAA,EACf,WAAA,EAAa;AACf","file":"reducer.mjs","sourcesContent":["import { OtpDialogActionType, type OtpDialogState, type OtpDialogAction } from './types';\n\n/**\n * OTP Dialog Reducer\n * Manages state transitions for the OTP dialog component\n */\nexport const otpDialogReducer = (\n state: OtpDialogState,\n action: OtpDialogAction,\n): OtpDialogState => {\n switch (action.type) {\n case OtpDialogActionType.SET_OTP:\n return { ...state, otp: action.payload };\n\n case OtpDialogActionType.SET_ERROR:\n return { ...state, internalError: action.payload };\n\n case OtpDialogActionType.SET_COUNTDOWN_ACTIVE:\n return { ...state, isCountdownActive: action.payload };\n\n case OtpDialogActionType.INCREMENT_COUNTDOWN_KEY:\n return { ...state, countdownKey: state.countdownKey + 1 };\n\n case OtpDialogActionType.SET_IS_VERIFYING:\n return { ...state, isVerifying: action.payload };\n\n case OtpDialogActionType.RESET:\n return {\n otp: '',\n isCountdownActive: true,\n countdownKey: state.countdownKey + 1,\n internalError: null,\n isVerifying: false,\n };\n\n default:\n return state;\n }\n};\n\n/**\n * Initial state for OTP dialog\n */\nexport const initialOtpDialogState: OtpDialogState = {\n otp: '',\n isCountdownActive: true,\n countdownKey: 0,\n internalError: null,\n isVerifying: false,\n};\n"]}
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ var OtpDialogActionType = /* @__PURE__ */ ((OtpDialogActionType2) => {
4
+ OtpDialogActionType2["SET_OTP"] = "SET_OTP";
5
+ OtpDialogActionType2["SET_ERROR"] = "SET_ERROR";
6
+ OtpDialogActionType2["SET_COUNTDOWN_ACTIVE"] = "SET_COUNTDOWN_ACTIVE";
7
+ OtpDialogActionType2["INCREMENT_COUNTDOWN_KEY"] = "INCREMENT_COUNTDOWN_KEY";
8
+ OtpDialogActionType2["SET_IS_VERIFYING"] = "SET_IS_VERIFYING";
9
+ OtpDialogActionType2["RESET"] = "RESET";
10
+ return OtpDialogActionType2;
11
+ })(OtpDialogActionType || {});
12
+
13
+ exports.OtpDialogActionType = OtpDialogActionType;
14
+ //# sourceMappingURL=types.js.map
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/common/interactive/otp-dialog/types.ts"],"names":["OtpDialogActionType"],"mappings":";;AAMO,IAAK,mBAAA,qBAAAA,oBAAAA,KAAL;AACL,EAAAA,qBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,qBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,qBAAA,sBAAA,CAAA,GAAuB,sBAAA;AACvB,EAAAA,qBAAA,yBAAA,CAAA,GAA0B,yBAAA;AAC1B,EAAAA,qBAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,qBAAA,OAAA,CAAA,GAAQ,OAAA;AANE,EAAA,OAAAA,oBAAAA;AAAA,CAAA,EAAA,mBAAA,IAAA,EAAA","file":"types.js","sourcesContent":["/**\n * OTP Dialog Types\n */\n\nimport * as React from 'react';\n\nexport enum OtpDialogActionType {\n SET_OTP = 'SET_OTP',\n SET_ERROR = 'SET_ERROR',\n SET_COUNTDOWN_ACTIVE = 'SET_COUNTDOWN_ACTIVE',\n INCREMENT_COUNTDOWN_KEY = 'INCREMENT_COUNTDOWN_KEY',\n SET_IS_VERIFYING = 'SET_IS_VERIFYING',\n RESET = 'RESET',\n}\n\nexport type OtpDialogState = {\n otp: string;\n isCountdownActive: boolean;\n countdownKey: number;\n internalError: string | null;\n isVerifying: boolean;\n};\n\nexport type OtpDialogAction =\n | { type: OtpDialogActionType.SET_OTP; payload: string }\n | { type: OtpDialogActionType.SET_ERROR; payload: string | null }\n | { type: OtpDialogActionType.SET_COUNTDOWN_ACTIVE; payload: boolean }\n | { type: OtpDialogActionType.INCREMENT_COUNTDOWN_KEY }\n | { type: OtpDialogActionType.SET_IS_VERIFYING; payload: boolean }\n | { type: OtpDialogActionType.RESET };\n\nexport interface OtpDialogProps {\n // Dialog control - supports both controlled and uncontrolled patterns\n trigger?: React.ReactNode; // Optional trigger button (uncontrolled)\n triggerAsChild?: boolean; // Whether trigger should be rendered as child\n triggerClassName?: string; // Custom className for trigger\n open?: boolean; // For controlled usage\n onOpenChange?: (open: boolean) => void; // For controlled usage\n defaultOpen?: boolean; // For uncontrolled usage with trigger\n\n // Dialog customization\n title?: string;\n description?: string; // Additional description under title\n size?: 'sm' | 'md' | 'lg' | 'xl';\n hasCloseButton?: boolean; // Show/hide close button (X)\n contentClassName?: string; // Custom className for dialog content\n\n // OTP specific props\n phoneNumber?: string;\n countdownDuration?: number; // in seconds, default 300 (5 minutes)\n needToMaskPhoneNumber?: boolean; // Whether to mask phone number, default true\n /**\n * Verify OTP function\n * Should return:\n * - { success: true } on successful verification\n * - { success: false, error: string } on failed verification\n * - Or throw error (will be caught and treated as failure)\n */\n onVerifyOtp: (otp: string) => Promise<{ success: boolean; error?: string } | void>;\n onResendOtp?: () => Promise<void>;\n isVerifying?: boolean;\n isResending?: boolean;\n error?: string | null;\n onSuccess?: () => void | Promise<void>;\n onError?: (error: string) => void;\n\n // Customization props\n verifyButtonText?: string;\n resendButtonText?: string;\n phonePromptText?: string;\n customInstructions?: React.ReactNode;\n\n // OTP input customization\n otpLength?: number;\n otpPattern?: string;\n autoFocus?: boolean;\n\n // Auto-submit behavior\n autoSubmit?: boolean; // Default true - auto verify when OTP is complete\n\n // Tracking props (from AlertDialogWrapper)\n trackingNameView?: string;\n trackingNameClose?: string;\n trackingData?: Record<string, any>;\n trackingIndex?: number;\n}\n"]}
@@ -0,0 +1,13 @@
1
+ var OtpDialogActionType = /* @__PURE__ */ ((OtpDialogActionType2) => {
2
+ OtpDialogActionType2["SET_OTP"] = "SET_OTP";
3
+ OtpDialogActionType2["SET_ERROR"] = "SET_ERROR";
4
+ OtpDialogActionType2["SET_COUNTDOWN_ACTIVE"] = "SET_COUNTDOWN_ACTIVE";
5
+ OtpDialogActionType2["INCREMENT_COUNTDOWN_KEY"] = "INCREMENT_COUNTDOWN_KEY";
6
+ OtpDialogActionType2["SET_IS_VERIFYING"] = "SET_IS_VERIFYING";
7
+ OtpDialogActionType2["RESET"] = "RESET";
8
+ return OtpDialogActionType2;
9
+ })(OtpDialogActionType || {});
10
+
11
+ export { OtpDialogActionType };
12
+ //# sourceMappingURL=types.mjs.map
13
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/common/interactive/otp-dialog/types.ts"],"names":["OtpDialogActionType"],"mappings":"AAMO,IAAK,mBAAA,qBAAAA,oBAAAA,KAAL;AACL,EAAAA,qBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,qBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,qBAAA,sBAAA,CAAA,GAAuB,sBAAA;AACvB,EAAAA,qBAAA,yBAAA,CAAA,GAA0B,yBAAA;AAC1B,EAAAA,qBAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,qBAAA,OAAA,CAAA,GAAQ,OAAA;AANE,EAAA,OAAAA,oBAAAA;AAAA,CAAA,EAAA,mBAAA,IAAA,EAAA","file":"types.mjs","sourcesContent":["/**\n * OTP Dialog Types\n */\n\nimport * as React from 'react';\n\nexport enum OtpDialogActionType {\n SET_OTP = 'SET_OTP',\n SET_ERROR = 'SET_ERROR',\n SET_COUNTDOWN_ACTIVE = 'SET_COUNTDOWN_ACTIVE',\n INCREMENT_COUNTDOWN_KEY = 'INCREMENT_COUNTDOWN_KEY',\n SET_IS_VERIFYING = 'SET_IS_VERIFYING',\n RESET = 'RESET',\n}\n\nexport type OtpDialogState = {\n otp: string;\n isCountdownActive: boolean;\n countdownKey: number;\n internalError: string | null;\n isVerifying: boolean;\n};\n\nexport type OtpDialogAction =\n | { type: OtpDialogActionType.SET_OTP; payload: string }\n | { type: OtpDialogActionType.SET_ERROR; payload: string | null }\n | { type: OtpDialogActionType.SET_COUNTDOWN_ACTIVE; payload: boolean }\n | { type: OtpDialogActionType.INCREMENT_COUNTDOWN_KEY }\n | { type: OtpDialogActionType.SET_IS_VERIFYING; payload: boolean }\n | { type: OtpDialogActionType.RESET };\n\nexport interface OtpDialogProps {\n // Dialog control - supports both controlled and uncontrolled patterns\n trigger?: React.ReactNode; // Optional trigger button (uncontrolled)\n triggerAsChild?: boolean; // Whether trigger should be rendered as child\n triggerClassName?: string; // Custom className for trigger\n open?: boolean; // For controlled usage\n onOpenChange?: (open: boolean) => void; // For controlled usage\n defaultOpen?: boolean; // For uncontrolled usage with trigger\n\n // Dialog customization\n title?: string;\n description?: string; // Additional description under title\n size?: 'sm' | 'md' | 'lg' | 'xl';\n hasCloseButton?: boolean; // Show/hide close button (X)\n contentClassName?: string; // Custom className for dialog content\n\n // OTP specific props\n phoneNumber?: string;\n countdownDuration?: number; // in seconds, default 300 (5 minutes)\n needToMaskPhoneNumber?: boolean; // Whether to mask phone number, default true\n /**\n * Verify OTP function\n * Should return:\n * - { success: true } on successful verification\n * - { success: false, error: string } on failed verification\n * - Or throw error (will be caught and treated as failure)\n */\n onVerifyOtp: (otp: string) => Promise<{ success: boolean; error?: string } | void>;\n onResendOtp?: () => Promise<void>;\n isVerifying?: boolean;\n isResending?: boolean;\n error?: string | null;\n onSuccess?: () => void | Promise<void>;\n onError?: (error: string) => void;\n\n // Customization props\n verifyButtonText?: string;\n resendButtonText?: string;\n phonePromptText?: string;\n customInstructions?: React.ReactNode;\n\n // OTP input customization\n otpLength?: number;\n otpPattern?: string;\n autoFocus?: boolean;\n\n // Auto-submit behavior\n autoSubmit?: boolean; // Default true - auto verify when OTP is complete\n\n // Tracking props (from AlertDialogWrapper)\n trackingNameView?: string;\n trackingNameClose?: string;\n trackingData?: Record<string, any>;\n trackingIndex?: number;\n}\n"]}
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ const maskPhoneNumber = (phoneNumber) => {
4
+ if (!phoneNumber) return "";
5
+ const cleanPhone = phoneNumber.replace(/[^\d]/g, "");
6
+ if (cleanPhone.length >= 10) {
7
+ return cleanPhone.replace(/(\d{4})(\d+)(\d{3})/, "$1***$3");
8
+ } else if (cleanPhone.length >= 7) {
9
+ return cleanPhone.replace(/(\d{3})(\d+)(\d{2})/, "$1***$3");
10
+ }
11
+ return phoneNumber;
12
+ };
13
+ const normalizeErrorMessage = (err) => {
14
+ const errorMessage = err?.message || err?.meta?.message || "";
15
+ if (errorMessage.toLowerCase().includes("invalid") || errorMessage.toLowerCase().includes("wrong") || errorMessage.toLowerCase().includes("expired")) {
16
+ return "M\xE3 OTP kh\xF4ng \u0111\xFAng ho\u1EB7c h\u1EBFt h\u1EA1n";
17
+ }
18
+ return errorMessage || "\u0110\xE3 c\xF3 l\u1ED7i x\u1EA3y ra";
19
+ };
20
+
21
+ exports.maskPhoneNumber = maskPhoneNumber;
22
+ exports.normalizeErrorMessage = normalizeErrorMessage;
23
+ //# sourceMappingURL=utils.js.map
24
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/common/interactive/otp-dialog/utils.ts"],"names":[],"mappings":";;AASO,MAAM,eAAA,GAAkB,CAAC,WAAA,KAAiC;AAC/D,EAAA,IAAI,CAAC,aAAa,OAAO,EAAA;AAGzB,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAEnD,EAAA,IAAI,UAAA,CAAW,UAAU,EAAA,EAAI;AAE3B,IAAA,OAAO,UAAA,CAAW,OAAA,CAAQ,qBAAA,EAAuB,SAAS,CAAA;AAAA,EAC5D,CAAA,MAAA,IAAW,UAAA,CAAW,MAAA,IAAU,CAAA,EAAG;AAEjC,IAAA,OAAO,UAAA,CAAW,OAAA,CAAQ,qBAAA,EAAuB,SAAS,CAAA;AAAA,EAC5D;AAEA,EAAA,OAAO,WAAA;AACT;AAQO,MAAM,qBAAA,GAAwB,CAAC,GAAA,KAAqB;AACzD,EAAA,MAAM,YAAA,GAAe,GAAA,EAAK,OAAA,IAAW,GAAA,EAAK,MAAM,OAAA,IAAW,EAAA;AAG3D,EAAA,IACE,aAAa,WAAA,EAAY,CAAE,QAAA,CAAS,SAAS,KAC7C,YAAA,CAAa,WAAA,EAAY,CAAE,QAAA,CAAS,OAAO,CAAA,IAC3C,YAAA,CAAa,aAAY,CAAE,QAAA,CAAS,SAAS,CAAA,EAC7C;AACA,IAAA,OAAO,6DAAA;AAAA,EACT;AAGA,EAAA,OAAO,YAAA,IAAgB,uCAAA;AACzB","file":"utils.js","sourcesContent":["/**\n * OTP Dialog Utilities\n */\n\n/**\n * Mask phone number for display\n * @param phoneNumber - Phone number to mask\n * @returns Masked phone number (e.g., \"0987***222\")\n */\nexport const maskPhoneNumber = (phoneNumber?: string): string => {\n if (!phoneNumber) return '';\n\n // Handle different phone number formats\n const cleanPhone = phoneNumber.replace(/[^\\d]/g, '');\n\n if (cleanPhone.length >= 10) {\n // For 10+ digit numbers: show first 4 and last 3 digits\n return cleanPhone.replace(/(\\d{4})(\\d+)(\\d{3})/, '$1***$3');\n } else if (cleanPhone.length >= 7) {\n // For 7-9 digit numbers: show first 3 and last 2 digits\n return cleanPhone.replace(/(\\d{3})(\\d+)(\\d{2})/, '$1***$3');\n }\n\n return phoneNumber; // Return as-is if too short\n};\n\n/**\n * Normalize error messages for better UX\n * Converts various error messages to user-friendly Vietnamese\n * @param err - Error object\n * @returns Normalized error message\n */\nexport const normalizeErrorMessage = (err: any): string => {\n const errorMessage = err?.message || err?.meta?.message || '';\n\n // Check for OTP validation errors\n if (\n errorMessage.toLowerCase().includes('invalid') ||\n errorMessage.toLowerCase().includes('wrong') ||\n errorMessage.toLowerCase().includes('expired')\n ) {\n return 'Mã OTP không đúng hoặc hết hạn';\n }\n\n // Default messages\n return errorMessage || 'Đã có lỗi xảy ra';\n};\n"]}
@@ -0,0 +1,21 @@
1
+ const maskPhoneNumber = (phoneNumber) => {
2
+ if (!phoneNumber) return "";
3
+ const cleanPhone = phoneNumber.replace(/[^\d]/g, "");
4
+ if (cleanPhone.length >= 10) {
5
+ return cleanPhone.replace(/(\d{4})(\d+)(\d{3})/, "$1***$3");
6
+ } else if (cleanPhone.length >= 7) {
7
+ return cleanPhone.replace(/(\d{3})(\d+)(\d{2})/, "$1***$3");
8
+ }
9
+ return phoneNumber;
10
+ };
11
+ const normalizeErrorMessage = (err) => {
12
+ const errorMessage = err?.message || err?.meta?.message || "";
13
+ if (errorMessage.toLowerCase().includes("invalid") || errorMessage.toLowerCase().includes("wrong") || errorMessage.toLowerCase().includes("expired")) {
14
+ return "M\xE3 OTP kh\xF4ng \u0111\xFAng ho\u1EB7c h\u1EBFt h\u1EA1n";
15
+ }
16
+ return errorMessage || "\u0110\xE3 c\xF3 l\u1ED7i x\u1EA3y ra";
17
+ };
18
+
19
+ export { maskPhoneNumber, normalizeErrorMessage };
20
+ //# sourceMappingURL=utils.mjs.map
21
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/common/interactive/otp-dialog/utils.ts"],"names":[],"mappings":"AASO,MAAM,eAAA,GAAkB,CAAC,WAAA,KAAiC;AAC/D,EAAA,IAAI,CAAC,aAAa,OAAO,EAAA;AAGzB,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAEnD,EAAA,IAAI,UAAA,CAAW,UAAU,EAAA,EAAI;AAE3B,IAAA,OAAO,UAAA,CAAW,OAAA,CAAQ,qBAAA,EAAuB,SAAS,CAAA;AAAA,EAC5D,CAAA,MAAA,IAAW,UAAA,CAAW,MAAA,IAAU,CAAA,EAAG;AAEjC,IAAA,OAAO,UAAA,CAAW,OAAA,CAAQ,qBAAA,EAAuB,SAAS,CAAA;AAAA,EAC5D;AAEA,EAAA,OAAO,WAAA;AACT;AAQO,MAAM,qBAAA,GAAwB,CAAC,GAAA,KAAqB;AACzD,EAAA,MAAM,YAAA,GAAe,GAAA,EAAK,OAAA,IAAW,GAAA,EAAK,MAAM,OAAA,IAAW,EAAA;AAG3D,EAAA,IACE,aAAa,WAAA,EAAY,CAAE,QAAA,CAAS,SAAS,KAC7C,YAAA,CAAa,WAAA,EAAY,CAAE,QAAA,CAAS,OAAO,CAAA,IAC3C,YAAA,CAAa,aAAY,CAAE,QAAA,CAAS,SAAS,CAAA,EAC7C;AACA,IAAA,OAAO,6DAAA;AAAA,EACT;AAGA,EAAA,OAAO,YAAA,IAAgB,uCAAA;AACzB","file":"utils.mjs","sourcesContent":["/**\n * OTP Dialog Utilities\n */\n\n/**\n * Mask phone number for display\n * @param phoneNumber - Phone number to mask\n * @returns Masked phone number (e.g., \"0987***222\")\n */\nexport const maskPhoneNumber = (phoneNumber?: string): string => {\n if (!phoneNumber) return '';\n\n // Handle different phone number formats\n const cleanPhone = phoneNumber.replace(/[^\\d]/g, '');\n\n if (cleanPhone.length >= 10) {\n // For 10+ digit numbers: show first 4 and last 3 digits\n return cleanPhone.replace(/(\\d{4})(\\d+)(\\d{3})/, '$1***$3');\n } else if (cleanPhone.length >= 7) {\n // For 7-9 digit numbers: show first 3 and last 2 digits\n return cleanPhone.replace(/(\\d{3})(\\d+)(\\d{2})/, '$1***$3');\n }\n\n return phoneNumber; // Return as-is if too short\n};\n\n/**\n * Normalize error messages for better UX\n * Converts various error messages to user-friendly Vietnamese\n * @param err - Error object\n * @returns Normalized error message\n */\nexport const normalizeErrorMessage = (err: any): string => {\n const errorMessage = err?.message || err?.meta?.message || '';\n\n // Check for OTP validation errors\n if (\n errorMessage.toLowerCase().includes('invalid') ||\n errorMessage.toLowerCase().includes('wrong') ||\n errorMessage.toLowerCase().includes('expired')\n ) {\n return 'Mã OTP không đúng hoặc hết hạn';\n }\n\n // Default messages\n return errorMessage || 'Đã có lỗi xảy ra';\n};\n"]}
@@ -0,0 +1,51 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var skeleton = require('../../../components/skeleton');
5
+ var utils = require('../../../lib/utils');
6
+
7
+ function PaginationSkeleton({ className }) {
8
+ return /* @__PURE__ */ jsxRuntime.jsxs(
9
+ "div",
10
+ {
11
+ className: utils.cn(
12
+ "flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between",
13
+ className
14
+ ),
15
+ children: [
16
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "hidden lg:block", children: /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-5 w-48" }) }),
17
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full items-center justify-center gap-1 sm:gap-2 lg:flex-1 lg:gap-3", children: [
18
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-9 w-9" }),
19
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1 sm:gap-2 lg:hidden", children: [
20
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-9 w-10" }),
21
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-9 w-10" }),
22
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-9 w-10" }),
23
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-9 w-9" })
24
+ ] }),
25
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "hidden items-center gap-3 lg:flex", children: [
26
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-9 w-10" }),
27
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-9 w-10" }),
28
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-9 w-10" }),
29
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-9 w-10" }),
30
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-9 w-10" }),
31
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-9 w-9" }),
32
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-9 w-10" })
33
+ ] }),
34
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-9 w-9" })
35
+ ] }),
36
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-1 lg:hidden", children: [
37
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-5 w-32" }),
38
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-5 w-12" })
39
+ ] }),
40
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "hidden shrink-0 items-center gap-1 lg:flex", children: [
41
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-5 w-32" }),
42
+ /* @__PURE__ */ jsxRuntime.jsx(skeleton.Skeleton, { className: "h-5 w-12" })
43
+ ] })
44
+ ]
45
+ }
46
+ );
47
+ }
48
+
49
+ exports.PaginationSkeleton = PaginationSkeleton;
50
+ //# sourceMappingURL=PaginationSkeleton.js.map
51
+ //# sourceMappingURL=PaginationSkeleton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/common/interactive/pagination/PaginationSkeleton.tsx"],"names":["jsxs","cn","jsx","Skeleton"],"mappings":";;;;;;AAOO,SAAS,kBAAA,CAAmB,EAAE,SAAA,EAAU,EAA4B;AACzE,EAAA,uBACEA,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,QAAA;AAAA,QACT,oEAAA;AAAA,QACA;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,SAAI,SAAA,EAAU,iBAAA,EACb,yCAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,YAAW,CAAA,EACjC,CAAA;AAAA,wBAGAH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2EAAA,EAEb,QAAA,EAAA;AAAA,0BAAAE,cAAA,CAACC,iBAAA,EAAA,EAAS,WAAU,SAAA,EAAU,CAAA;AAAA,0BAG9BH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACb,QAAA,EAAA;AAAA,4BAAAE,cAAA,CAACC,iBAAA,EAAA,EAAS,WAAU,UAAA,EAAW,CAAA;AAAA,4BAC/BD,cAAA,CAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,4BAC/BD,cAAA,CAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,4BAC/BD,cAAA,CAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,SAAA,EAAU;AAAA,WAAA,EAChC,CAAA;AAAA,0BAGAH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,4BAAAE,cAAA,CAACC,iBAAA,EAAA,EAAS,WAAU,UAAA,EAAW,CAAA;AAAA,4BAC/BD,cAAA,CAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,4BAC/BD,cAAA,CAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,4BAC/BD,cAAA,CAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,4BAC/BD,cAAA,CAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,4BAC/BD,cAAA,CAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,4BAC9BD,cAAA,CAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW;AAAA,WAAA,EACjC,CAAA;AAAA,0BAGAD,cAAA,CAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,SAAA,EAAU;AAAA,SAAA,EAChC,CAAA;AAAA,wBAGAH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EACb,QAAA,EAAA;AAAA,0BAAAE,cAAA,CAACC,iBAAA,EAAA,EAAS,WAAU,UAAA,EAAW,CAAA;AAAA,0BAC/BD,cAAA,CAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW;AAAA,SAAA,EACjC,CAAA;AAAA,wBAGAH,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACb,QAAA,EAAA;AAAA,0BAAAE,cAAA,CAACC,iBAAA,EAAA,EAAS,WAAU,UAAA,EAAW,CAAA;AAAA,0BAC/BD,cAAA,CAACC,iBAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW;AAAA,SAAA,EACjC;AAAA;AAAA;AAAA,GACF;AAEJ","file":"PaginationSkeleton.js","sourcesContent":["import { Skeleton } from '../../../components/skeleton';\nimport { cn } from '../../../lib/utils';\n\ninterface PaginationSkeletonProps {\n className?: string;\n}\n\nexport function PaginationSkeleton({ className }: PaginationSkeletonProps) {\n return (\n <div\n className={cn(\n 'flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between',\n className,\n )}\n >\n {/* Info text skeleton - hidden on mobile, shown on desktop */}\n <div className=\"hidden lg:block\">\n <Skeleton className=\"h-5 w-48\" />\n </div>\n\n {/* Pagination controls skeleton */}\n <div className=\"flex w-full items-center justify-center gap-1 sm:gap-2 lg:flex-1 lg:gap-3\">\n {/* Previous button */}\n <Skeleton className=\"h-9 w-9\" />\n\n {/* Mobile: 3 page buttons + ellipsis */}\n <div className=\"flex items-center gap-1 sm:gap-2 lg:hidden\">\n <Skeleton className=\"h-9 w-10\" />\n <Skeleton className=\"h-9 w-10\" />\n <Skeleton className=\"h-9 w-10\" />\n <Skeleton className=\"h-9 w-9\" />\n </div>\n\n {/* Desktop: More page buttons */}\n <div className=\"hidden items-center gap-3 lg:flex\">\n <Skeleton className=\"h-9 w-10\" />\n <Skeleton className=\"h-9 w-10\" />\n <Skeleton className=\"h-9 w-10\" />\n <Skeleton className=\"h-9 w-10\" />\n <Skeleton className=\"h-9 w-10\" />\n <Skeleton className=\"h-9 w-9\" />\n <Skeleton className=\"h-9 w-10\" />\n </div>\n\n {/* Next button */}\n <Skeleton className=\"h-9 w-9\" />\n </div>\n\n {/* Mobile: Page size selector skeleton */}\n <div className=\"flex items-center justify-end gap-1 lg:hidden\">\n <Skeleton className=\"h-5 w-32\" />\n <Skeleton className=\"h-5 w-12\" />\n </div>\n\n {/* Desktop: Page size selector skeleton */}\n <div className=\"hidden shrink-0 items-center gap-1 lg:flex\">\n <Skeleton className=\"h-5 w-32\" />\n <Skeleton className=\"h-5 w-12\" />\n </div>\n </div>\n );\n}\n"]}
@@ -0,0 +1,49 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { Skeleton } from '../../../components/skeleton';
3
+ import { cn } from '../../../lib/utils';
4
+
5
+ function PaginationSkeleton({ className }) {
6
+ return /* @__PURE__ */ jsxs(
7
+ "div",
8
+ {
9
+ className: cn(
10
+ "flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between",
11
+ className
12
+ ),
13
+ children: [
14
+ /* @__PURE__ */ jsx("div", { className: "hidden lg:block", children: /* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-48" }) }),
15
+ /* @__PURE__ */ jsxs("div", { className: "flex w-full items-center justify-center gap-1 sm:gap-2 lg:flex-1 lg:gap-3", children: [
16
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-9" }),
17
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1 sm:gap-2 lg:hidden", children: [
18
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-10" }),
19
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-10" }),
20
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-10" }),
21
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-9" })
22
+ ] }),
23
+ /* @__PURE__ */ jsxs("div", { className: "hidden items-center gap-3 lg:flex", children: [
24
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-10" }),
25
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-10" }),
26
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-10" }),
27
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-10" }),
28
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-10" }),
29
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-9" }),
30
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-10" })
31
+ ] }),
32
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-9" })
33
+ ] }),
34
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-1 lg:hidden", children: [
35
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-32" }),
36
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-12" })
37
+ ] }),
38
+ /* @__PURE__ */ jsxs("div", { className: "hidden shrink-0 items-center gap-1 lg:flex", children: [
39
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-32" }),
40
+ /* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-12" })
41
+ ] })
42
+ ]
43
+ }
44
+ );
45
+ }
46
+
47
+ export { PaginationSkeleton };
48
+ //# sourceMappingURL=PaginationSkeleton.mjs.map
49
+ //# sourceMappingURL=PaginationSkeleton.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/common/interactive/pagination/PaginationSkeleton.tsx"],"names":[],"mappings":";;;;AAOO,SAAS,kBAAA,CAAmB,EAAE,SAAA,EAAU,EAA4B;AACzE,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,oEAAA;AAAA,QACA;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAI,SAAA,EAAU,iBAAA,EACb,8BAAC,QAAA,EAAA,EAAS,SAAA,EAAU,YAAW,CAAA,EACjC,CAAA;AAAA,wBAGA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2EAAA,EAEb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,SAAA,EAAU,CAAA;AAAA,0BAG9B,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,UAAA,EAAW,CAAA;AAAA,4BAC/B,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,4BAC/B,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,4BAC/B,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,SAAA,EAAU;AAAA,WAAA,EAChC,CAAA;AAAA,0BAGA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,UAAA,EAAW,CAAA;AAAA,4BAC/B,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,4BAC/B,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,4BAC/B,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,4BAC/B,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW,CAAA;AAAA,4BAC/B,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,4BAC9B,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW;AAAA,WAAA,EACjC,CAAA;AAAA,0BAGA,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,SAAA,EAAU;AAAA,SAAA,EAChC,CAAA;AAAA,wBAGA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,UAAA,EAAW,CAAA;AAAA,0BAC/B,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW;AAAA,SAAA,EACjC,CAAA;AAAA,wBAGA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,WAAU,UAAA,EAAW,CAAA;AAAA,0BAC/B,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,UAAA,EAAW;AAAA,SAAA,EACjC;AAAA;AAAA;AAAA,GACF;AAEJ","file":"PaginationSkeleton.mjs","sourcesContent":["import { Skeleton } from '../../../components/skeleton';\nimport { cn } from '../../../lib/utils';\n\ninterface PaginationSkeletonProps {\n className?: string;\n}\n\nexport function PaginationSkeleton({ className }: PaginationSkeletonProps) {\n return (\n <div\n className={cn(\n 'flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between',\n className,\n )}\n >\n {/* Info text skeleton - hidden on mobile, shown on desktop */}\n <div className=\"hidden lg:block\">\n <Skeleton className=\"h-5 w-48\" />\n </div>\n\n {/* Pagination controls skeleton */}\n <div className=\"flex w-full items-center justify-center gap-1 sm:gap-2 lg:flex-1 lg:gap-3\">\n {/* Previous button */}\n <Skeleton className=\"h-9 w-9\" />\n\n {/* Mobile: 3 page buttons + ellipsis */}\n <div className=\"flex items-center gap-1 sm:gap-2 lg:hidden\">\n <Skeleton className=\"h-9 w-10\" />\n <Skeleton className=\"h-9 w-10\" />\n <Skeleton className=\"h-9 w-10\" />\n <Skeleton className=\"h-9 w-9\" />\n </div>\n\n {/* Desktop: More page buttons */}\n <div className=\"hidden items-center gap-3 lg:flex\">\n <Skeleton className=\"h-9 w-10\" />\n <Skeleton className=\"h-9 w-10\" />\n <Skeleton className=\"h-9 w-10\" />\n <Skeleton className=\"h-9 w-10\" />\n <Skeleton className=\"h-9 w-10\" />\n <Skeleton className=\"h-9 w-9\" />\n <Skeleton className=\"h-9 w-10\" />\n </div>\n\n {/* Next button */}\n <Skeleton className=\"h-9 w-9\" />\n </div>\n\n {/* Mobile: Page size selector skeleton */}\n <div className=\"flex items-center justify-end gap-1 lg:hidden\">\n <Skeleton className=\"h-5 w-32\" />\n <Skeleton className=\"h-5 w-12\" />\n </div>\n\n {/* Desktop: Page size selector skeleton */}\n <div className=\"hidden shrink-0 items-center gap-1 lg:flex\">\n <Skeleton className=\"h-5 w-32\" />\n <Skeleton className=\"h-5 w-12\" />\n </div>\n </div>\n );\n}\n"]}
@@ -0,0 +1,235 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var lucideReact = require('lucide-react');
5
+ var react = require('react');
6
+ var button = require('../../../components/button');
7
+ var pagination = require('../../../components/pagination');
8
+ var utils = require('../../../lib/utils');
9
+ var select = require('../select');
10
+ var usePagination = require('./usePagination');
11
+ var PaginationSkeleton = require('./PaginationSkeleton');
12
+
13
+ const Pagination = ({
14
+ current = 1,
15
+ pageSize = 20,
16
+ total = 0,
17
+ onChange,
18
+ loading,
19
+ className,
20
+ showInfo = true,
21
+ showPageSizeSelector = true
22
+ }) => {
23
+ const [paginationOptions, setPaginationOptions] = react.useState([
24
+ { value: "10", name: "10" },
25
+ { value: "20", name: "20" },
26
+ { value: "30", name: "30" },
27
+ { value: "50", name: "50" },
28
+ { value: "100", name: "100" }
29
+ ]);
30
+ react.useEffect(() => {
31
+ setPaginationOptions((prev) => {
32
+ const options = [...prev];
33
+ const pageSizeStr = String(pageSize);
34
+ const pageSizeExists = options.some((option) => option.value === pageSizeStr);
35
+ if (!pageSizeExists && pageSize) {
36
+ options.unshift({ value: pageSizeStr, name: pageSizeStr });
37
+ }
38
+ options.sort((a, b) => Number(a.value) - Number(b.value));
39
+ return options;
40
+ });
41
+ }, [pageSize]);
42
+ const totalPages = Math.ceil(total / pageSize);
43
+ const onPageChange = (page) => {
44
+ if (typeof page === "number" && page >= 1 && page <= totalPages && page !== current) {
45
+ onChange?.(page, pageSize);
46
+ }
47
+ };
48
+ const onNext = () => {
49
+ if (current < totalPages) {
50
+ onPageChange(current + 1);
51
+ }
52
+ };
53
+ const onPrevious = () => {
54
+ if (current > 1) {
55
+ onPageChange(current - 1);
56
+ }
57
+ };
58
+ const range = (start, end) => {
59
+ const length = end - start + 1;
60
+ return Array.from({ length }, (_, idx) => idx + start);
61
+ };
62
+ const startIndex = (current - 1) * pageSize + 1;
63
+ const endIndex = Math.min(current * pageSize, total);
64
+ const paginationRange = usePagination.usePagination({
65
+ current,
66
+ total,
67
+ pageSize,
68
+ siblingCount: 1
69
+ // Bạn có thể tùy chỉnh số trang hiển thị bên cạnh trang hiện tại
70
+ });
71
+ const mobilePaginationRange = react.useMemo(() => {
72
+ if (totalPages <= 3) {
73
+ return range(1, totalPages);
74
+ }
75
+ return [1, 2, 3, usePagination.DOTS];
76
+ }, [totalPages]);
77
+ if (loading) {
78
+ return /* @__PURE__ */ jsxRuntime.jsx(PaginationSkeleton.PaginationSkeleton, { className });
79
+ }
80
+ return /* @__PURE__ */ jsxRuntime.jsxs(
81
+ "div",
82
+ {
83
+ className: utils.cn(
84
+ "flex flex-col gap-4 lg:flex-row lg:items-center lg:justify-between",
85
+ className
86
+ ),
87
+ children: [
88
+ showInfo && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-t14m text-muted-foreground hidden text-nowrap lg:block", children: total > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
89
+ "Hi\u1EC3n th\u1ECB ",
90
+ startIndex,
91
+ " - ",
92
+ endIndex,
93
+ " trong t\u1ED5ng s\u1ED1 ",
94
+ total
95
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: "Hi\u1EC3n th\u1ECB 0 - 0 trong t\u1ED5ng s\u1ED1 0" }) }),
96
+ /* @__PURE__ */ jsxRuntime.jsx(pagination.Pagination, { className: "w-full justify-center lg:flex-1", children: /* @__PURE__ */ jsxRuntime.jsxs(pagination.PaginationContent, { className: "gap-1 sm:gap-2 lg:gap-3", children: [
97
+ /* @__PURE__ */ jsxRuntime.jsx(
98
+ button.Button,
99
+ {
100
+ variant: "outline",
101
+ size: "sm",
102
+ className: "px-2",
103
+ onClick: (e) => {
104
+ e.preventDefault();
105
+ onPrevious();
106
+ },
107
+ disabled: current <= 1,
108
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeftIcon, { className: "text-ink-400s !size-4 sm:!size-6" })
109
+ }
110
+ ),
111
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "contents lg:hidden", children: mobilePaginationRange.map((pageNumber, index) => {
112
+ if (pageNumber === usePagination.DOTS) {
113
+ return /* @__PURE__ */ jsxRuntime.jsx(
114
+ pagination.PaginationItem,
115
+ {
116
+ className: "text-t14m text-foreground",
117
+ children: /* @__PURE__ */ jsxRuntime.jsx(pagination.PaginationEllipsis, {})
118
+ },
119
+ `dots-mobile-${index}`
120
+ );
121
+ }
122
+ return /* @__PURE__ */ jsxRuntime.jsx(pagination.PaginationItem, { className: "text-t14m text-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(
123
+ button.Button,
124
+ {
125
+ size: "sm",
126
+ variant: pageNumber === current ? "soft-info" : "ghost",
127
+ className: utils.cn("text-t14m !min-w-[40px] border-none"),
128
+ onClick: (e) => {
129
+ e.preventDefault();
130
+ onPageChange(pageNumber);
131
+ },
132
+ loading: pageNumber === current ? loading : false,
133
+ children: !(loading && pageNumber === current) && pageNumber
134
+ }
135
+ ) }, pageNumber);
136
+ }) }),
137
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "hidden lg:contents", children: paginationRange.map((pageNumber, index) => {
138
+ if (pageNumber === usePagination.DOTS) {
139
+ return /* @__PURE__ */ jsxRuntime.jsx(
140
+ pagination.PaginationItem,
141
+ {
142
+ className: "text-t14m text-foreground",
143
+ children: /* @__PURE__ */ jsxRuntime.jsx(pagination.PaginationEllipsis, {})
144
+ },
145
+ `dots-desktop-${index}`
146
+ );
147
+ }
148
+ return /* @__PURE__ */ jsxRuntime.jsx(pagination.PaginationItem, { className: "text-t14m text-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(
149
+ button.Button,
150
+ {
151
+ size: "sm",
152
+ variant: pageNumber === current ? "soft-info" : "ghost",
153
+ className: utils.cn("text-t14m !min-w-[40px] border-none"),
154
+ onClick: (e) => {
155
+ e.preventDefault();
156
+ onPageChange(pageNumber);
157
+ },
158
+ loading: pageNumber === current ? loading : false,
159
+ children: !(loading && pageNumber === current) && pageNumber
160
+ }
161
+ ) }, `desktop-${pageNumber}`);
162
+ }) }),
163
+ /* @__PURE__ */ jsxRuntime.jsx(
164
+ button.Button,
165
+ {
166
+ variant: "outline",
167
+ size: "sm",
168
+ className: "px-2",
169
+ onClick: (e) => {
170
+ e.preventDefault();
171
+ onNext();
172
+ },
173
+ disabled: current >= totalPages,
174
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "text-ink-400s !size-4 sm:!size-6" })
175
+ }
176
+ )
177
+ ] }) }),
178
+ showPageSizeSelector && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-1 lg:hidden", children: [
179
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground text-t14m text-nowrap", children: "S\u1ED1 m\u1EE5c m\u1ED7i trang:" }),
180
+ /* @__PURE__ */ jsxRuntime.jsxs(
181
+ select.Select,
182
+ {
183
+ value: [{ value: pageSize.toString(), name: pageSize.toString() }],
184
+ onValueChange: (values) => {
185
+ values.length > 0 && onChange?.(1, parseInt(values?.[0]?.value ?? "0", 10));
186
+ },
187
+ children: [
188
+ /* @__PURE__ */ jsxRuntime.jsx(select.SelectTrigger, { isCustomMode: true, asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex cursor-pointer items-center gap-1", children: [
189
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-blue-500", children: pageSize }),
190
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 text-blue-500" })
191
+ ] }) }),
192
+ /* @__PURE__ */ jsxRuntime.jsx(select.SelectBody, { align: "end", children: /* @__PURE__ */ jsxRuntime.jsx(select.SelectContentAutoLayout, { options: paginationOptions }) })
193
+ ]
194
+ }
195
+ )
196
+ ] }),
197
+ showPageSizeSelector && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "hidden shrink-0 items-center gap-1 lg:flex", children: [
198
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-muted-foreground text-t14m text-nowrap", children: "S\u1ED1 m\u1EE5c m\u1ED7i trang:" }),
199
+ /* @__PURE__ */ jsxRuntime.jsxs(
200
+ select.Select,
201
+ {
202
+ value: [{ value: pageSize.toString(), name: pageSize.toString() }],
203
+ onValueChange: (values) => {
204
+ values.length > 0 && onChange?.(1, parseInt(values?.[0]?.value ?? "0", 10));
205
+ },
206
+ children: [
207
+ /* @__PURE__ */ jsxRuntime.jsx(select.SelectTrigger, { isCustomMode: true, asChild: true, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex cursor-pointer items-center gap-1", children: [
208
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-blue-500", children: pageSize }),
209
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "h-4 w-4 text-blue-500" })
210
+ ] }) }),
211
+ /* @__PURE__ */ jsxRuntime.jsx(select.SelectBody, { align: "end", side: "bottom", className: "ml-0 min-w-[120px]", children: /* @__PURE__ */ jsxRuntime.jsx(select.SelectContentAutoLayout, { options: paginationOptions }) })
212
+ ]
213
+ }
214
+ )
215
+ ] })
216
+ ]
217
+ }
218
+ );
219
+ };
220
+
221
+ Object.defineProperty(exports, "DOTS", {
222
+ enumerable: true,
223
+ get: function () { return usePagination.DOTS; }
224
+ });
225
+ Object.defineProperty(exports, "usePagination", {
226
+ enumerable: true,
227
+ get: function () { return usePagination.usePagination; }
228
+ });
229
+ Object.defineProperty(exports, "PaginationSkeleton", {
230
+ enumerable: true,
231
+ get: function () { return PaginationSkeleton.PaginationSkeleton; }
232
+ });
233
+ exports.Pagination = Pagination;
234
+ //# sourceMappingURL=index.js.map
235
+ //# sourceMappingURL=index.js.map