@temboplus/frontend-core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +72 -0
  3. package/esm/_dnt.test_shims.d.ts.map +1 -0
  4. package/esm/deps/deno.land/std@0.217.0/assert/_constants.d.ts.map +1 -0
  5. package/esm/deps/deno.land/std@0.217.0/assert/_diff.d.ts.map +1 -0
  6. package/esm/deps/deno.land/std@0.217.0/assert/_format.d.ts.map +1 -0
  7. package/esm/deps/deno.land/std@0.217.0/assert/assert.d.ts.map +1 -0
  8. package/esm/deps/deno.land/std@0.217.0/assert/assert_almost_equals.d.ts.map +1 -0
  9. package/esm/deps/deno.land/std@0.217.0/assert/assert_array_includes.d.ts.map +1 -0
  10. package/esm/deps/deno.land/std@0.217.0/assert/assert_equals.d.ts.map +1 -0
  11. package/esm/deps/deno.land/std@0.217.0/assert/assert_exists.d.ts.map +1 -0
  12. package/esm/deps/deno.land/std@0.217.0/assert/assert_false.d.ts.map +1 -0
  13. package/esm/deps/deno.land/std@0.217.0/assert/assert_greater.d.ts.map +1 -0
  14. package/esm/deps/deno.land/std@0.217.0/assert/assert_greater_or_equal.d.ts.map +1 -0
  15. package/esm/deps/deno.land/std@0.217.0/assert/assert_instance_of.d.ts.map +1 -0
  16. package/esm/deps/deno.land/std@0.217.0/assert/assert_is_error.d.ts.map +1 -0
  17. package/esm/deps/deno.land/std@0.217.0/assert/assert_less.d.ts.map +1 -0
  18. package/esm/deps/deno.land/std@0.217.0/assert/assert_less_or_equal.d.ts.map +1 -0
  19. package/esm/deps/deno.land/std@0.217.0/assert/assert_match.d.ts.map +1 -0
  20. package/esm/deps/deno.land/std@0.217.0/assert/assert_not_equals.d.ts.map +1 -0
  21. package/esm/deps/deno.land/std@0.217.0/assert/assert_not_instance_of.d.ts.map +1 -0
  22. package/esm/deps/deno.land/std@0.217.0/assert/assert_not_match.d.ts.map +1 -0
  23. package/esm/deps/deno.land/std@0.217.0/assert/assert_not_strict_equals.d.ts.map +1 -0
  24. package/esm/deps/deno.land/std@0.217.0/assert/assert_object_match.d.ts.map +1 -0
  25. package/esm/deps/deno.land/std@0.217.0/assert/assert_rejects.d.ts.map +1 -0
  26. package/esm/deps/deno.land/std@0.217.0/assert/assert_strict_equals.d.ts.map +1 -0
  27. package/esm/deps/deno.land/std@0.217.0/assert/assert_string_includes.d.ts.map +1 -0
  28. package/esm/deps/deno.land/std@0.217.0/assert/assert_throws.d.ts.map +1 -0
  29. package/esm/deps/deno.land/std@0.217.0/assert/assertion_error.d.ts.map +1 -0
  30. package/esm/deps/deno.land/std@0.217.0/assert/equal.d.ts.map +1 -0
  31. package/esm/deps/deno.land/std@0.217.0/assert/fail.d.ts.map +1 -0
  32. package/esm/deps/deno.land/std@0.217.0/assert/mod.d.ts.map +1 -0
  33. package/esm/deps/deno.land/std@0.217.0/assert/unimplemented.d.ts.map +1 -0
  34. package/esm/deps/deno.land/std@0.217.0/assert/unreachable.d.ts.map +1 -0
  35. package/esm/deps/deno.land/std@0.217.0/fmt/colors.d.ts.map +1 -0
  36. package/esm/deps/jsr.io/@std/assert/1.0.10/almost_equals.d.ts.map +1 -0
  37. package/esm/deps/jsr.io/@std/assert/1.0.10/array_includes.d.ts.map +1 -0
  38. package/esm/deps/jsr.io/@std/assert/1.0.10/assert.d.ts.map +1 -0
  39. package/esm/deps/jsr.io/@std/assert/1.0.10/assertion_error.d.ts.map +1 -0
  40. package/esm/deps/jsr.io/@std/assert/1.0.10/equal.d.ts.map +1 -0
  41. package/esm/deps/jsr.io/@std/assert/1.0.10/equals.d.ts.map +1 -0
  42. package/esm/deps/jsr.io/@std/assert/1.0.10/exists.d.ts.map +1 -0
  43. package/esm/deps/jsr.io/@std/assert/1.0.10/fail.d.ts.map +1 -0
  44. package/esm/deps/jsr.io/@std/assert/1.0.10/false.d.ts.map +1 -0
  45. package/esm/deps/jsr.io/@std/assert/1.0.10/greater.d.ts.map +1 -0
  46. package/esm/deps/jsr.io/@std/assert/1.0.10/greater_or_equal.d.ts.map +1 -0
  47. package/esm/deps/jsr.io/@std/assert/1.0.10/instance_of.d.ts.map +1 -0
  48. package/esm/deps/jsr.io/@std/assert/1.0.10/is_error.d.ts.map +1 -0
  49. package/esm/deps/jsr.io/@std/assert/1.0.10/less.d.ts.map +1 -0
  50. package/esm/deps/jsr.io/@std/assert/1.0.10/less_or_equal.d.ts.map +1 -0
  51. package/esm/deps/jsr.io/@std/assert/1.0.10/match.d.ts.map +1 -0
  52. package/esm/deps/jsr.io/@std/assert/1.0.10/mod.d.ts.map +1 -0
  53. package/esm/deps/jsr.io/@std/assert/1.0.10/not_equals.d.ts.map +1 -0
  54. package/esm/deps/jsr.io/@std/assert/1.0.10/not_instance_of.d.ts.map +1 -0
  55. package/esm/deps/jsr.io/@std/assert/1.0.10/not_match.d.ts.map +1 -0
  56. package/esm/deps/jsr.io/@std/assert/1.0.10/not_strict_equals.d.ts.map +1 -0
  57. package/esm/deps/jsr.io/@std/assert/1.0.10/object_match.d.ts.map +1 -0
  58. package/esm/deps/jsr.io/@std/assert/1.0.10/rejects.d.ts.map +1 -0
  59. package/esm/deps/jsr.io/@std/assert/1.0.10/strict_equals.d.ts.map +1 -0
  60. package/esm/deps/jsr.io/@std/assert/1.0.10/string_includes.d.ts.map +1 -0
  61. package/esm/deps/jsr.io/@std/assert/1.0.10/throws.d.ts.map +1 -0
  62. package/esm/deps/jsr.io/@std/assert/1.0.10/unimplemented.d.ts.map +1 -0
  63. package/esm/deps/jsr.io/@std/assert/1.0.10/unreachable.d.ts.map +1 -0
  64. package/esm/deps/jsr.io/@std/internal/1.0.5/build_message.d.ts.map +1 -0
  65. package/esm/deps/jsr.io/@std/internal/1.0.5/diff.d.ts.map +1 -0
  66. package/esm/deps/jsr.io/@std/internal/1.0.5/diff_str.d.ts.map +1 -0
  67. package/esm/deps/jsr.io/@std/internal/1.0.5/format.d.ts.map +1 -0
  68. package/esm/deps/jsr.io/@std/internal/1.0.5/styles.d.ts.map +1 -0
  69. package/esm/deps/jsr.io/@std/internal/1.0.5/types.d.ts.map +1 -0
  70. package/esm/mod.d.ts +3 -0
  71. package/esm/mod.d.ts.map +1 -0
  72. package/esm/mod.js +2 -0
  73. package/esm/package.json +3 -0
  74. package/esm/src/models/amount/amount.d.ts +55 -0
  75. package/esm/src/models/amount/amount.d.ts.map +1 -0
  76. package/esm/src/models/amount/amount.js +229 -0
  77. package/esm/src/models/amount/amount.test.d.ts.map +1 -0
  78. package/esm/src/models/amount/antd_validator.d.ts +40 -0
  79. package/esm/src/models/amount/antd_validator.d.ts.map +1 -0
  80. package/esm/src/models/amount/antd_validator.js +58 -0
  81. package/esm/src/models/amount/antd_validator.test.d.ts.map +1 -0
  82. package/esm/src/models/amount/index.d.ts +3 -0
  83. package/esm/src/models/amount/index.d.ts.map +1 -0
  84. package/esm/src/models/amount/index.js +2 -0
  85. package/esm/src/models/bank/antd_validator.d.ts +11 -0
  86. package/esm/src/models/bank/antd_validator.d.ts.map +1 -0
  87. package/esm/src/models/bank/antd_validator.js +26 -0
  88. package/esm/src/models/bank/antd_validator.test.d.ts.map +1 -0
  89. package/esm/src/models/bank/bank.d.ts +125 -0
  90. package/esm/src/models/bank/bank.d.ts.map +1 -0
  91. package/esm/src/models/bank/bank.js +229 -0
  92. package/esm/src/models/bank/bank.test.d.ts.map +1 -0
  93. package/esm/src/models/bank/banks.d.ts +7 -0
  94. package/esm/src/models/bank/banks.d.ts.map +1 -0
  95. package/esm/src/models/bank/banks.js +197 -0
  96. package/esm/src/models/bank/index.d.ts +4 -0
  97. package/esm/src/models/bank/index.d.ts.map +1 -0
  98. package/esm/src/models/bank/index.js +3 -0
  99. package/esm/src/models/bank/utils.d.ts +25 -0
  100. package/esm/src/models/bank/utils.d.ts.map +1 -0
  101. package/esm/src/models/bank/utils.js +35 -0
  102. package/esm/src/models/index.d.ts +4 -0
  103. package/esm/src/models/index.d.ts.map +1 -0
  104. package/esm/src/models/index.js +3 -0
  105. package/esm/src/models/phone_number/antd_validator.d.ts +77 -0
  106. package/esm/src/models/phone_number/antd_validator.d.ts.map +1 -0
  107. package/esm/src/models/phone_number/antd_validator.js +90 -0
  108. package/esm/src/models/phone_number/antdvalidator.test.d.ts.map +1 -0
  109. package/esm/src/models/phone_number/index.d.ts +4 -0
  110. package/esm/src/models/phone_number/index.d.ts.map +1 -0
  111. package/esm/src/models/phone_number/index.js +3 -0
  112. package/esm/src/models/phone_number/phone_number.d.ts +117 -0
  113. package/esm/src/models/phone_number/phone_number.d.ts.map +1 -0
  114. package/esm/src/models/phone_number/phone_number.js +231 -0
  115. package/esm/src/models/phone_number/phone_number.test.d.ts.map +1 -0
  116. package/esm/src/models/phone_number/telecom.d.ts +25 -0
  117. package/esm/src/models/phone_number/telecom.d.ts.map +1 -0
  118. package/esm/src/models/phone_number/telecom.js +44 -0
  119. package/esm/src/utils/id.d.ts +12 -0
  120. package/esm/src/utils/id.d.ts.map +1 -0
  121. package/esm/src/utils/id.js +19 -0
  122. package/esm/src/utils/index.d.ts +4 -0
  123. package/esm/src/utils/index.d.ts.map +1 -0
  124. package/esm/src/utils/index.js +3 -0
  125. package/esm/src/utils/text.d.ts +32 -0
  126. package/esm/src/utils/text.d.ts.map +1 -0
  127. package/esm/src/utils/text.js +68 -0
  128. package/esm/src/utils/text.test.d.ts.map +1 -0
  129. package/esm/src/utils/time.d.ts +21 -0
  130. package/esm/src/utils/time.d.ts.map +1 -0
  131. package/esm/src/utils/time.js +34 -0
  132. package/package.json +35 -0
  133. package/script/_dnt.test_shims.d.ts.map +1 -0
  134. package/script/deps/deno.land/std@0.217.0/assert/_constants.d.ts.map +1 -0
  135. package/script/deps/deno.land/std@0.217.0/assert/_diff.d.ts.map +1 -0
  136. package/script/deps/deno.land/std@0.217.0/assert/_format.d.ts.map +1 -0
  137. package/script/deps/deno.land/std@0.217.0/assert/assert.d.ts.map +1 -0
  138. package/script/deps/deno.land/std@0.217.0/assert/assert_almost_equals.d.ts.map +1 -0
  139. package/script/deps/deno.land/std@0.217.0/assert/assert_array_includes.d.ts.map +1 -0
  140. package/script/deps/deno.land/std@0.217.0/assert/assert_equals.d.ts.map +1 -0
  141. package/script/deps/deno.land/std@0.217.0/assert/assert_exists.d.ts.map +1 -0
  142. package/script/deps/deno.land/std@0.217.0/assert/assert_false.d.ts.map +1 -0
  143. package/script/deps/deno.land/std@0.217.0/assert/assert_greater.d.ts.map +1 -0
  144. package/script/deps/deno.land/std@0.217.0/assert/assert_greater_or_equal.d.ts.map +1 -0
  145. package/script/deps/deno.land/std@0.217.0/assert/assert_instance_of.d.ts.map +1 -0
  146. package/script/deps/deno.land/std@0.217.0/assert/assert_is_error.d.ts.map +1 -0
  147. package/script/deps/deno.land/std@0.217.0/assert/assert_less.d.ts.map +1 -0
  148. package/script/deps/deno.land/std@0.217.0/assert/assert_less_or_equal.d.ts.map +1 -0
  149. package/script/deps/deno.land/std@0.217.0/assert/assert_match.d.ts.map +1 -0
  150. package/script/deps/deno.land/std@0.217.0/assert/assert_not_equals.d.ts.map +1 -0
  151. package/script/deps/deno.land/std@0.217.0/assert/assert_not_instance_of.d.ts.map +1 -0
  152. package/script/deps/deno.land/std@0.217.0/assert/assert_not_match.d.ts.map +1 -0
  153. package/script/deps/deno.land/std@0.217.0/assert/assert_not_strict_equals.d.ts.map +1 -0
  154. package/script/deps/deno.land/std@0.217.0/assert/assert_object_match.d.ts.map +1 -0
  155. package/script/deps/deno.land/std@0.217.0/assert/assert_rejects.d.ts.map +1 -0
  156. package/script/deps/deno.land/std@0.217.0/assert/assert_strict_equals.d.ts.map +1 -0
  157. package/script/deps/deno.land/std@0.217.0/assert/assert_string_includes.d.ts.map +1 -0
  158. package/script/deps/deno.land/std@0.217.0/assert/assert_throws.d.ts.map +1 -0
  159. package/script/deps/deno.land/std@0.217.0/assert/assertion_error.d.ts.map +1 -0
  160. package/script/deps/deno.land/std@0.217.0/assert/equal.d.ts.map +1 -0
  161. package/script/deps/deno.land/std@0.217.0/assert/fail.d.ts.map +1 -0
  162. package/script/deps/deno.land/std@0.217.0/assert/mod.d.ts.map +1 -0
  163. package/script/deps/deno.land/std@0.217.0/assert/unimplemented.d.ts.map +1 -0
  164. package/script/deps/deno.land/std@0.217.0/assert/unreachable.d.ts.map +1 -0
  165. package/script/deps/deno.land/std@0.217.0/fmt/colors.d.ts.map +1 -0
  166. package/script/deps/jsr.io/@std/assert/1.0.10/almost_equals.d.ts.map +1 -0
  167. package/script/deps/jsr.io/@std/assert/1.0.10/array_includes.d.ts.map +1 -0
  168. package/script/deps/jsr.io/@std/assert/1.0.10/assert.d.ts.map +1 -0
  169. package/script/deps/jsr.io/@std/assert/1.0.10/assertion_error.d.ts.map +1 -0
  170. package/script/deps/jsr.io/@std/assert/1.0.10/equal.d.ts.map +1 -0
  171. package/script/deps/jsr.io/@std/assert/1.0.10/equals.d.ts.map +1 -0
  172. package/script/deps/jsr.io/@std/assert/1.0.10/exists.d.ts.map +1 -0
  173. package/script/deps/jsr.io/@std/assert/1.0.10/fail.d.ts.map +1 -0
  174. package/script/deps/jsr.io/@std/assert/1.0.10/false.d.ts.map +1 -0
  175. package/script/deps/jsr.io/@std/assert/1.0.10/greater.d.ts.map +1 -0
  176. package/script/deps/jsr.io/@std/assert/1.0.10/greater_or_equal.d.ts.map +1 -0
  177. package/script/deps/jsr.io/@std/assert/1.0.10/instance_of.d.ts.map +1 -0
  178. package/script/deps/jsr.io/@std/assert/1.0.10/is_error.d.ts.map +1 -0
  179. package/script/deps/jsr.io/@std/assert/1.0.10/less.d.ts.map +1 -0
  180. package/script/deps/jsr.io/@std/assert/1.0.10/less_or_equal.d.ts.map +1 -0
  181. package/script/deps/jsr.io/@std/assert/1.0.10/match.d.ts.map +1 -0
  182. package/script/deps/jsr.io/@std/assert/1.0.10/mod.d.ts.map +1 -0
  183. package/script/deps/jsr.io/@std/assert/1.0.10/not_equals.d.ts.map +1 -0
  184. package/script/deps/jsr.io/@std/assert/1.0.10/not_instance_of.d.ts.map +1 -0
  185. package/script/deps/jsr.io/@std/assert/1.0.10/not_match.d.ts.map +1 -0
  186. package/script/deps/jsr.io/@std/assert/1.0.10/not_strict_equals.d.ts.map +1 -0
  187. package/script/deps/jsr.io/@std/assert/1.0.10/object_match.d.ts.map +1 -0
  188. package/script/deps/jsr.io/@std/assert/1.0.10/rejects.d.ts.map +1 -0
  189. package/script/deps/jsr.io/@std/assert/1.0.10/strict_equals.d.ts.map +1 -0
  190. package/script/deps/jsr.io/@std/assert/1.0.10/string_includes.d.ts.map +1 -0
  191. package/script/deps/jsr.io/@std/assert/1.0.10/throws.d.ts.map +1 -0
  192. package/script/deps/jsr.io/@std/assert/1.0.10/unimplemented.d.ts.map +1 -0
  193. package/script/deps/jsr.io/@std/assert/1.0.10/unreachable.d.ts.map +1 -0
  194. package/script/deps/jsr.io/@std/internal/1.0.5/build_message.d.ts.map +1 -0
  195. package/script/deps/jsr.io/@std/internal/1.0.5/diff.d.ts.map +1 -0
  196. package/script/deps/jsr.io/@std/internal/1.0.5/diff_str.d.ts.map +1 -0
  197. package/script/deps/jsr.io/@std/internal/1.0.5/format.d.ts.map +1 -0
  198. package/script/deps/jsr.io/@std/internal/1.0.5/styles.d.ts.map +1 -0
  199. package/script/deps/jsr.io/@std/internal/1.0.5/types.d.ts.map +1 -0
  200. package/script/mod.d.ts +3 -0
  201. package/script/mod.d.ts.map +1 -0
  202. package/script/mod.js +18 -0
  203. package/script/package.json +3 -0
  204. package/script/src/models/amount/amount.d.ts +55 -0
  205. package/script/src/models/amount/amount.d.ts.map +1 -0
  206. package/script/src/models/amount/amount.js +233 -0
  207. package/script/src/models/amount/amount.test.d.ts.map +1 -0
  208. package/script/src/models/amount/antd_validator.d.ts +40 -0
  209. package/script/src/models/amount/antd_validator.d.ts.map +1 -0
  210. package/script/src/models/amount/antd_validator.js +62 -0
  211. package/script/src/models/amount/antd_validator.test.d.ts.map +1 -0
  212. package/script/src/models/amount/index.d.ts +3 -0
  213. package/script/src/models/amount/index.d.ts.map +1 -0
  214. package/script/src/models/amount/index.js +18 -0
  215. package/script/src/models/bank/antd_validator.d.ts +11 -0
  216. package/script/src/models/bank/antd_validator.d.ts.map +1 -0
  217. package/script/src/models/bank/antd_validator.js +30 -0
  218. package/script/src/models/bank/antd_validator.test.d.ts.map +1 -0
  219. package/script/src/models/bank/bank.d.ts +125 -0
  220. package/script/src/models/bank/bank.d.ts.map +1 -0
  221. package/script/src/models/bank/bank.js +236 -0
  222. package/script/src/models/bank/bank.test.d.ts.map +1 -0
  223. package/script/src/models/bank/banks.d.ts +7 -0
  224. package/script/src/models/bank/banks.d.ts.map +1 -0
  225. package/script/src/models/bank/banks.js +199 -0
  226. package/script/src/models/bank/index.d.ts +4 -0
  227. package/script/src/models/bank/index.d.ts.map +1 -0
  228. package/script/src/models/bank/index.js +19 -0
  229. package/script/src/models/bank/utils.d.ts +25 -0
  230. package/script/src/models/bank/utils.d.ts.map +1 -0
  231. package/script/src/models/bank/utils.js +41 -0
  232. package/script/src/models/index.d.ts +4 -0
  233. package/script/src/models/index.d.ts.map +1 -0
  234. package/script/src/models/index.js +19 -0
  235. package/script/src/models/phone_number/antd_validator.d.ts +77 -0
  236. package/script/src/models/phone_number/antd_validator.d.ts.map +1 -0
  237. package/script/src/models/phone_number/antd_validator.js +94 -0
  238. package/script/src/models/phone_number/antdvalidator.test.d.ts.map +1 -0
  239. package/script/src/models/phone_number/index.d.ts +4 -0
  240. package/script/src/models/phone_number/index.d.ts.map +1 -0
  241. package/script/src/models/phone_number/index.js +19 -0
  242. package/script/src/models/phone_number/phone_number.d.ts +117 -0
  243. package/script/src/models/phone_number/phone_number.d.ts.map +1 -0
  244. package/script/src/models/phone_number/phone_number.js +235 -0
  245. package/script/src/models/phone_number/phone_number.test.d.ts.map +1 -0
  246. package/script/src/models/phone_number/telecom.d.ts +25 -0
  247. package/script/src/models/phone_number/telecom.d.ts.map +1 -0
  248. package/script/src/models/phone_number/telecom.js +47 -0
  249. package/script/src/utils/id.d.ts +12 -0
  250. package/script/src/utils/id.d.ts.map +1 -0
  251. package/script/src/utils/id.js +23 -0
  252. package/script/src/utils/index.d.ts +4 -0
  253. package/script/src/utils/index.d.ts.map +1 -0
  254. package/script/src/utils/index.js +19 -0
  255. package/script/src/utils/text.d.ts +32 -0
  256. package/script/src/utils/text.d.ts.map +1 -0
  257. package/script/src/utils/text.js +75 -0
  258. package/script/src/utils/text.test.d.ts.map +1 -0
  259. package/script/src/utils/time.d.ts +21 -0
  260. package/script/src/utils/time.d.ts.map +1 -0
  261. package/script/src/utils/time.js +39 -0
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AMOUNT_REGEX = exports.Amount = void 0;
4
+ // Regex explanation:
5
+ // ^(?:\d{1,3}(?:,\d{3})*|\d+) - Either grouped digits with commas OR just digits
6
+ // (?:\.\d+)?$ - Optional decimal part with any number of digits
7
+ const AMOUNT_REGEX = /^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$/;
8
+ exports.AMOUNT_REGEX = AMOUNT_REGEX;
9
+ class Amount {
10
+ constructor(value, text) {
11
+ Object.defineProperty(this, "value", {
12
+ enumerable: true,
13
+ configurable: true,
14
+ writable: true,
15
+ value: void 0
16
+ });
17
+ Object.defineProperty(this, "text", {
18
+ enumerable: true,
19
+ configurable: true,
20
+ writable: true,
21
+ value: void 0
22
+ });
23
+ this.value = value;
24
+ this.text = text;
25
+ }
26
+ /**
27
+ * Creates an Amount instance from a string or number input
28
+ * Returns undefined if input is invalid or negative
29
+ * @param input - The input value (string or number)
30
+ * @returns Amount instance or undefined if validation fails
31
+ */
32
+ static from(input) {
33
+ let amountText = input.toString().trim();
34
+ console.log(amountText);
35
+ if (hasComma(amountText)) {
36
+ if (!hasValidCommaPlacement(amountText))
37
+ return undefined;
38
+ }
39
+ amountText = removeCommasAndCurrency(amountText);
40
+ // Handle string input
41
+ if (!AMOUNT_REGEX.test(amountText))
42
+ return undefined;
43
+ // Convert string to number, removing commas
44
+ const value = Number(amountText.replace(/,/g, ""));
45
+ if (!Number.isFinite(value) || value < 0)
46
+ return undefined;
47
+ // Round to 2 decimal places and format the text representation
48
+ const roundedValue = Number(value.toFixed(2));
49
+ const text = roundedValue.toLocaleString("en-US", {
50
+ minimumFractionDigits: 2,
51
+ maximumFractionDigits: 2,
52
+ });
53
+ return new Amount(roundedValue, text);
54
+ }
55
+ /**
56
+ * Returns the formatted string representation of the amount with TZS prefix
57
+ */
58
+ get label() {
59
+ return `TZS ${this.text}`;
60
+ }
61
+ /**
62
+ * Returns the numeric value of the amount
63
+ */
64
+ get numericValue() {
65
+ return this.value;
66
+ }
67
+ /**
68
+ * Returns the formatted numeric value of the amount
69
+ */
70
+ get formattedNumericValue() {
71
+ return this.numericValue.toLocaleString("en-US", {
72
+ minimumFractionDigits: 2,
73
+ maximumFractionDigits: 2,
74
+ });
75
+ }
76
+ /**
77
+ * Checks if the amount is valid
78
+ * @param input amount to be checked for validity
79
+ * @returns true if the amount is valid, false otherwise
80
+ */
81
+ static canConstruct(input) {
82
+ /// (!input) alone does not work since input could 0 and (!input) return true for this case
83
+ if (input === undefined || input === null)
84
+ return false;
85
+ const amount = Amount.from(input);
86
+ if (!amount)
87
+ return false;
88
+ return true;
89
+ }
90
+ /**
91
+ * Checks if an unknown value is an Amount instance.
92
+ * Validates the structural integrity of an amount object.
93
+ *
94
+ * @param {unknown} obj - The value to validate
95
+ * @returns {obj is Amount} Type predicate indicating if the value is a valid Amount
96
+ *
97
+ * @example
98
+ * const maybeAmount = JSON.parse(someData);
99
+ * if (Amount.is(maybeAmount)) {
100
+ * console.log(maybeAmount.label); // maybeAmount is typed as Amount
101
+ * }
102
+ *
103
+ * @see {@link Amount.canConstruct} for validating raw amount values
104
+ * @see {@link Amount.from} for constructing new instances
105
+ */
106
+ static is(obj) {
107
+ if (!obj || typeof obj !== "object")
108
+ return false;
109
+ const maybeAmount = obj;
110
+ // Check required properties exist with correct types
111
+ if (typeof maybeAmount.value !== "number")
112
+ return false;
113
+ if (typeof maybeAmount.text !== "string")
114
+ return false;
115
+ const value = maybeAmount.value;
116
+ const text = maybeAmount.text;
117
+ // Validate numeric constraints
118
+ if (!Number.isFinite(value) || value < 0)
119
+ return false;
120
+ const canConstruct = Amount.canConstruct(value);
121
+ if (!canConstruct)
122
+ return false;
123
+ const amount = Amount.from(value);
124
+ return amount != undefined && amount.value === value &&
125
+ amount.text === text;
126
+ }
127
+ /**
128
+ * Checks the validity of the amount data
129
+ * @returns true if the amount data is available and valid
130
+ */
131
+ validate() {
132
+ try {
133
+ return Amount.canConstruct(this.value);
134
+ }
135
+ catch (_) {
136
+ return false;
137
+ }
138
+ }
139
+ }
140
+ exports.Amount = Amount;
141
+ /**
142
+ * Removes commas and "TZS" symbol (if present) from a string.
143
+ * Handles both prefixed and suffixed "TZS" symbols, with or without spaces.
144
+ *
145
+ * @param {string} text - The input string to clean
146
+ * @returns {string} A string with commas and "TZS" symbol removed
147
+ *
148
+ * @example
149
+ * removeCommasAndCurrency("1,234.56"); // Returns: "1234.56"
150
+ * removeCommasAndCurrency("TZS 1,234.56"); // Returns: "1234.56"
151
+ * removeCommasAndCurrency("1,234.56 TZS"); // Returns: "1234.56"
152
+ * removeCommasAndCurrency("TZS1,234.56"); // Returns: "1234.56"
153
+ * removeCommasAndCurrency("1234.56"); // Returns: "1234.56"
154
+ * removeCommasAndCurrency(""); // Returns: ""
155
+ *
156
+ * @remarks
157
+ * - Case insensitive for "TZS" symbol
158
+ * - Removes all commas regardless of position
159
+ * - Handles optional spaces around the currency symbol
160
+ * - Returns empty string if input is empty
161
+ */
162
+ function removeCommasAndCurrency(text) {
163
+ return text
164
+ .replace(/TZS\s*|\s*TZS/gi, "") // Remove TZS with optional spaces
165
+ .replace(/,/g, ""); // Remove all commas
166
+ }
167
+ /**
168
+ * Checks if commas in a numeric string are correctly placed to separate groups of three digits.
169
+ * Only validates the part before the decimal point if one exists.
170
+ *
171
+ * @param {string} text - The input string to validate
172
+ * @returns {boolean} True if commas are correctly placed or if there are no commas, false otherwise
173
+ *
174
+ * @example
175
+ * hasValidCommaPlacement("1,234,567.89"); // Returns: true
176
+ * hasValidCommaPlacement("1234567.89"); // Returns: true (no commas)
177
+ * hasValidCommaPlacement("1,234.56"); // Returns: true
178
+ * hasValidCommaPlacement("1,23,456"); // Returns: false (incorrect grouping)
179
+ * hasValidCommaPlacement("1,2345"); // Returns: false (incorrect grouping)
180
+ * hasValidCommaPlacement(",123"); // Returns: false (leading comma)
181
+ * hasValidCommaPlacement("1,234,"); // Returns: false (trailing comma)
182
+ * hasValidCommaPlacement("1,,234"); // Returns: false (consecutive commas)
183
+ *
184
+ * @remarks
185
+ * - Validates comma placement in the whole number part only
186
+ * - Each group after the first must be exactly 3 digits
187
+ * - First group can be 1-3 digits
188
+ * - Returns true if the string contains no commas
189
+ * - Does not validate the decimal part if present
190
+ */
191
+ function hasValidCommaPlacement(text) {
192
+ // Split at decimal point if it exists and take the whole number part
193
+ const wholeNumberPart = text.split(".")[0];
194
+ // If no commas, it's valid
195
+ if (!wholeNumberPart.includes(",")) {
196
+ return true;
197
+ }
198
+ // Split the whole number by commas
199
+ const groups = wholeNumberPart.split(",");
200
+ // Check for invalid cases:
201
+ // - Empty string before/after comma (e.g. ",123" or "123,")
202
+ // - More than one empty group (consecutive commas)
203
+ if (groups.some((group) => group.length === 0)) {
204
+ return false;
205
+ }
206
+ // First group can be 1-3 digits
207
+ if (groups[0].length > 3 || groups[0].length < 1) {
208
+ return false;
209
+ }
210
+ // All other groups must be exactly 3 digits
211
+ return groups.slice(1).every((group) => group.length === 3);
212
+ }
213
+ /**
214
+ * Checks if a string contains a comma character.
215
+ *
216
+ * @param {string} text - The input string to check
217
+ * @returns {boolean} True if the string contains at least one comma, false otherwise
218
+ *
219
+ * @example
220
+ * hasComma("1,234.56"); // Returns: true
221
+ * hasComma("1234.56"); // Returns: false
222
+ * hasComma("hello,world"); // Returns: true
223
+ * hasComma(""); // Returns: false
224
+ * hasComma(","); // Returns: true
225
+ *
226
+ * @remarks
227
+ * - Returns false for empty strings
228
+ * - Returns true if one or more commas are present
229
+ * - Position of the comma doesn't matter
230
+ */
231
+ function hasComma(text) {
232
+ return text.includes(",");
233
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amount.test.d.ts","sourceRoot":"","sources":["../../../../src/src/models/amount/amount.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import type { RuleObject } from "antd/es/form";
2
+ import { Amount } from "./index.js";
3
+ /**
4
+ * Validates a monetary amount according to specified business rules.
5
+ * This validator is designed for Ant Design Form components and performs the following validations:
6
+ * 1. Required field validation (if specified in rules)
7
+ * 2. Format validation using AMOUNT_REGEX pattern for valid numeric format
8
+ * 3. Minimum amount threshold of TZS 1,000
9
+ *
10
+ * @param {RuleObject} rule - Ant Design rule object containing validation rules
11
+ * @param {string | number | undefined} value - The amount to validate
12
+ * @returns {Promise<void>} Resolves if validation passes, rejects with Error if validation fails
13
+ * @throws {Error} Throws an error with a descriptive message for validation failures:
14
+ * - "Amount is required." - When field is required but empty/undefined
15
+ * - "Invalid amount format." - When value doesn't match expected numeric format
16
+ * - "Invalid numeric value." - When value can't be parsed to a valid number
17
+ * - "Amount must not be less than TZS 1000." - When value is below minimum threshold
18
+ *
19
+ * @example
20
+ * // Usage in Ant Design form rules:
21
+ * const rules = [
22
+ * {
23
+ * required: true,
24
+ * validator: AMOUNT_VALIDATOR
25
+ * }
26
+ * ];
27
+ *
28
+ * // Valid inputs:
29
+ * // "1,000" -> Valid format, meets minimum
30
+ * // "1500.50" -> Valid decimal
31
+ * // 2000 -> Valid number
32
+ *
33
+ * // Invalid inputs:
34
+ * // "abc" -> Invalid format
35
+ * // "500" -> Below minimum
36
+ * // "" -> Empty when required
37
+ * // undefined -> Missing when required
38
+ */
39
+ export declare const AMOUNT_VALIDATOR: (rule: RuleObject, value: string | number | null | undefined) => Promise<Amount | undefined>;
40
+ //# sourceMappingURL=antd_validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antd_validator.d.ts","sourceRoot":"","sources":["../../../../src/src/models/amount/antd_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,gBAAgB,SACrB,UAAU,SACT,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,KACxC,OAAO,CAAC,MAAM,GAAG,SAAS,CA0B5B,CAAC"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AMOUNT_VALIDATOR = void 0;
4
+ const index_js_1 = require("./index.js");
5
+ /**
6
+ * Validates a monetary amount according to specified business rules.
7
+ * This validator is designed for Ant Design Form components and performs the following validations:
8
+ * 1. Required field validation (if specified in rules)
9
+ * 2. Format validation using AMOUNT_REGEX pattern for valid numeric format
10
+ * 3. Minimum amount threshold of TZS 1,000
11
+ *
12
+ * @param {RuleObject} rule - Ant Design rule object containing validation rules
13
+ * @param {string | number | undefined} value - The amount to validate
14
+ * @returns {Promise<void>} Resolves if validation passes, rejects with Error if validation fails
15
+ * @throws {Error} Throws an error with a descriptive message for validation failures:
16
+ * - "Amount is required." - When field is required but empty/undefined
17
+ * - "Invalid amount format." - When value doesn't match expected numeric format
18
+ * - "Invalid numeric value." - When value can't be parsed to a valid number
19
+ * - "Amount must not be less than TZS 1000." - When value is below minimum threshold
20
+ *
21
+ * @example
22
+ * // Usage in Ant Design form rules:
23
+ * const rules = [
24
+ * {
25
+ * required: true,
26
+ * validator: AMOUNT_VALIDATOR
27
+ * }
28
+ * ];
29
+ *
30
+ * // Valid inputs:
31
+ * // "1,000" -> Valid format, meets minimum
32
+ * // "1500.50" -> Valid decimal
33
+ * // 2000 -> Valid number
34
+ *
35
+ * // Invalid inputs:
36
+ * // "abc" -> Invalid format
37
+ * // "500" -> Below minimum
38
+ * // "" -> Empty when required
39
+ * // undefined -> Missing when required
40
+ */
41
+ const AMOUNT_VALIDATOR = (rule, value) => {
42
+ // Convert value to string and remove whitespace
43
+ const amountString = value?.toString().trim();
44
+ // If field is empty/undefined/null
45
+ if (!amountString) {
46
+ // Only throw if the field is required
47
+ if (rule.required) {
48
+ return Promise.reject(new Error("Amount is required."));
49
+ }
50
+ // If field is not required and empty, validation passes
51
+ return Promise.resolve(undefined);
52
+ }
53
+ const amount = index_js_1.Amount.from(amountString);
54
+ if (!amount) {
55
+ return Promise.reject(new Error("Invalid amount format."));
56
+ }
57
+ if (amount.numericValue < 1000) {
58
+ return Promise.reject(new Error("Amount must not be less than TZS 1000."));
59
+ }
60
+ return Promise.resolve(amount);
61
+ };
62
+ exports.AMOUNT_VALIDATOR = AMOUNT_VALIDATOR;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antd_validator.test.d.ts","sourceRoot":"","sources":["../../../../src/src/models/amount/antd_validator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from "./antd_validator.js";
2
+ export * from "./amount.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/src/models/amount/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./antd_validator.js"), exports);
18
+ __exportStar(require("./amount.js"), exports);
@@ -0,0 +1,11 @@
1
+ import type { RuleObject } from "antd/es/form";
2
+ import { Bank } from "./bank.js";
3
+ /**
4
+ * Validator for SWIFT code field.
5
+ * Ensures the SWIFT code follows the correct format and is recognized in the list of valid codes.
6
+ * @param {RuleObject} rule The rule object for validation
7
+ * @param {string} value The value to validate.
8
+ * @throws Will throw an error if validation fails.
9
+ */
10
+ export declare const SWIFT_CODE_VALIDATOR: (rule: RuleObject, value: string | null | undefined) => Promise<Bank | undefined>;
11
+ //# sourceMappingURL=antd_validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antd_validator.d.ts","sourceRoot":"","sources":["../../../../src/src/models/bank/antd_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,SACzB,UAAU,SACT,MAAM,GAAG,IAAI,GAAG,SAAS,KAC/B,OAAO,CAAC,IAAI,GAAG,SAAS,CAoB1B,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SWIFT_CODE_VALIDATOR = void 0;
4
+ const bank_js_1 = require("./bank.js");
5
+ /**
6
+ * Validator for SWIFT code field.
7
+ * Ensures the SWIFT code follows the correct format and is recognized in the list of valid codes.
8
+ * @param {RuleObject} rule The rule object for validation
9
+ * @param {string} value The value to validate.
10
+ * @throws Will throw an error if validation fails.
11
+ */
12
+ const SWIFT_CODE_VALIDATOR = (rule, value) => {
13
+ const code = value?.toString().trim().toUpperCase();
14
+ // If field is empty/undefined/null
15
+ if (!code) {
16
+ // Only throw if the field is required
17
+ if (rule.required) {
18
+ return Promise.reject(new Error("SWIFT code is required."));
19
+ }
20
+ // If field is not required and empty, validation passes
21
+ return Promise.resolve(undefined);
22
+ }
23
+ const bank = bank_js_1.Bank.fromSWIFTCode(code);
24
+ if (!bank) {
25
+ const error = new Error("SWIFT code is not recognized.");
26
+ return Promise.reject(error);
27
+ }
28
+ return Promise.resolve(bank);
29
+ };
30
+ exports.SWIFT_CODE_VALIDATOR = SWIFT_CODE_VALIDATOR;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"antd_validator.test.d.ts","sourceRoot":"","sources":["../../../../src/src/models/bank/antd_validator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Represents a bank with essential details.
3
+ * @class Bank
4
+ */
5
+ export declare class Bank {
6
+ private readonly _fullName;
7
+ private readonly _shortName;
8
+ private readonly _swiftCode;
9
+ /**
10
+ * Creates a new Bank instance.
11
+ * @param {string} _fullName - The full name of the bank
12
+ * @param {string} _shortName - The short name or abbreviated name of the bank
13
+ * @param {string} _swiftCode - The SWIFT code associated with the bank
14
+ */
15
+ constructor(_fullName: string, _shortName: string, _swiftCode: string);
16
+ /**
17
+ * Gets the full name of the bank.
18
+ * @returns {string} The full name of the bank
19
+ */
20
+ get fullName(): string;
21
+ /**
22
+ * Gets the short name of the bank.
23
+ * @returns {string} The short name of the bank
24
+ */
25
+ get shortName(): string;
26
+ /**
27
+ * Gets the SWIFT code of the bank.
28
+ * @returns {string} The SWIFT code of the bank
29
+ */
30
+ get swiftCode(): string;
31
+ /**
32
+ * Creates a string representation of the bank.
33
+ * @returns {string} String representation of the bank
34
+ */
35
+ toString(): string;
36
+ /**
37
+ * Retrieves a bank by its SWIFT code.
38
+ * @param {string} swiftCode The SWIFT code of the bank.
39
+ * @returns {Bank | undefined} The bank corresponding to the SWIFT code or `undefined` if not found.
40
+ */
41
+ static fromSWIFTCode(swiftCode: string): Bank | undefined;
42
+ /**
43
+ * Retrieves a bank by its short or full name.
44
+ * @param {string} bankName The full name of the bank.
45
+ * @returns {Bank | undefined} The bank corresponding to the full name or `undefined` if not found.
46
+ */
47
+ static fromBankName(bankName: string): Bank | undefined;
48
+ /**
49
+ * Validates if a given SWIFT/BIC (Bank Identifier Code) is valid
50
+ *
51
+ * @param {string | null | undefined} swiftCode - The SWIFT/BIC code to validate.
52
+ * Should be in the format of 8 or 11 characters (e.g., 'NMIBTZTZ' or 'CRDBTZTZXXX').
53
+ *
54
+ * @returns {boolean} Returns true if:
55
+ * - The SWIFT code is not null/undefined
56
+ * - The SWIFT code successfully creates a valid Bank instance
57
+ * Returns false otherwise.
58
+ */
59
+ static isValidSwiftCode(swiftCode?: string | null): boolean;
60
+ /**
61
+ * Validates if a given bank name is valid
62
+ *
63
+ * @param {string | null | undefined} bankName - The bank name to validate.
64
+ * Should be either 'CRDB' or 'NMB'.
65
+ *
66
+ * @returns {boolean} Returns true if:
67
+ * - The bank name is not null/undefined
68
+ * - The bank name successfully creates a valid Bank instance
69
+ * Returns false otherwise.
70
+ */
71
+ static isValidBankName(bankName?: string | null): boolean;
72
+ /**
73
+ * Gets all banks from the JSON data.
74
+ * @returns {Bank[]} Array of all banks
75
+ */
76
+ static getAll(): Bank[];
77
+ /**
78
+ * Checks the validity of the bank data
79
+ * @returns true if the bank information is available and valid
80
+ */
81
+ validate(): boolean;
82
+ /**
83
+ * Attempts to create a Bank instance from a bank name or SWIFT code
84
+ * First tries to create from bank name, then from SWIFT code if bank name fails
85
+ *
86
+ * @param {string} input - The bank name or SWIFT code
87
+ * @returns {Bank | undefined} A Bank instance if valid input, undefined otherwise
88
+ *
89
+ * @example
90
+ * const bank = Bank.from('CORUTZTZ'); // From SWIFT code
91
+ * const sameBank = Bank.from('CRDB'); // From bank name
92
+ */
93
+ static from(input: string): Bank | undefined;
94
+ /**
95
+ * Validates if the input can be used to construct a valid Bank instance
96
+ * Checks if the input resolves to the same bank via both name and SWIFT code
97
+ *
98
+ * @param {string | null | undefined} input - The bank name or SWIFT code to validate
99
+ * @returns {boolean} True if input can construct a valid bank, false otherwise
100
+ *
101
+ * @example
102
+ * Bank.canConstruct('CORUTZTZ'); // true
103
+ * Bank.canConstruct(''); // false
104
+ * Bank.canConstruct(null); // false
105
+ */
106
+ static canConstruct(input?: string | null): boolean;
107
+ /**
108
+ * Checks if an unknown value is a Bank instance.
109
+ * Validates the structural integrity of a bank object.
110
+ *
111
+ * @param {unknown} obj - The value to validate
112
+ * @returns {obj is Bank} Type predicate indicating if the value is a valid Bank
113
+ *
114
+ * @example
115
+ * const maybeBank = JSON.parse(someData);
116
+ * if (Bank.is(maybeBank)) {
117
+ * console.log(maybeBank.fullName); // maybeBank is typed as Bank
118
+ * }
119
+ *
120
+ * @see {@link Bank.fromSWIFTCode} for creating instances from SWIFT codes
121
+ * @see {@link Bank.fromBankName} for creating instances from bank names
122
+ */
123
+ static is(obj: unknown): obj is Bank;
124
+ }
125
+ //# sourceMappingURL=bank.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bank.d.ts","sourceRoot":"","sources":["../../../../src/src/models/bank/bank.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,IAAI;IAQb,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAT7B;;;;;OAKG;gBAEgB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM;IAGrC;;;OAGG;IACH,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;;OAGG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;;OAGG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAMzD;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAOvD;;;;;;;;;;OAUG;IACH,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAM3D;;;;;;;;;;OAUG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAMzD;;;OAGG;IACH,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE;IAWvB;;;OAGG;IACI,QAAQ,IAAI,OAAO;IAY1B;;;;;;;;;;OAUG;WACW,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAYnD;;;;;;;;;;;OAWG;WACW,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO;IAY1D;;;;;;;;;;;;;;;OAeG;WACW,EAAE,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,IAAI;CAwB5C"}