@yelon/util 12.0.18 → 13.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (313) hide show
  1. package/{date-time/yelon-util-date-time.d.ts → array/array.d.ts} +1 -0
  2. package/array/array.service.d.ts +3 -0
  3. package/array/package.json +6 -7
  4. package/browser/browser.d.ts +1 -0
  5. package/browser/cookie.service.d.ts +3 -0
  6. package/browser/copy.d.ts +1 -1
  7. package/browser/package.json +5 -6
  8. package/browser/scroll.service.d.ts +3 -0
  9. package/config/abc/pdf.type.d.ts +1 -1
  10. package/config/abc/qr.type.d.ts +1 -1
  11. package/config/config.d.ts +5 -0
  12. package/config/config.service.d.ts +3 -0
  13. package/config/package.json +6 -7
  14. package/date-time/date-time.d.ts +5 -0
  15. package/date-time/package.json +6 -7
  16. package/decorator/decorator.d.ts +5 -0
  17. package/decorator/package.json +6 -7
  18. package/{esm2015/array/array-type.service.js → esm2020/array/array-type.service.mjs} +0 -0
  19. package/esm2020/array/array.mjs +5 -0
  20. package/esm2020/array/array.service.mjs +278 -0
  21. package/{esm2015/array/index.js → esm2020/array/index.mjs} +0 -0
  22. package/{esm2015/browser/browser.js → esm2020/browser/browser.mjs} +0 -0
  23. package/esm2020/browser/cookie.service.mjs +103 -0
  24. package/esm2020/browser/copy.mjs +9 -0
  25. package/{esm2015/browser/index.js → esm2020/browser/index.mjs} +0 -0
  26. package/{esm2015/browser/is-empty.js → esm2020/browser/is-empty.mjs} +0 -0
  27. package/esm2020/browser/scroll.service.mjs +88 -0
  28. package/{esm2015/browser/style.js → esm2020/browser/style.mjs} +2 -2
  29. package/{esm2015/config/abc/date-picker.type.js → esm2020/config/abc/date-picker.type.mjs} +0 -0
  30. package/{esm2015/config/abc/error-collect.type.js → esm2020/config/abc/error-collect.type.mjs} +0 -0
  31. package/{esm2015/config/abc/image.type.js → esm2020/config/abc/image.type.mjs} +0 -0
  32. package/{esm2015/config/abc/index.js → esm2020/config/abc/index.mjs} +0 -0
  33. package/{esm2015/config/abc/loading.type.js → esm2020/config/abc/loading.type.mjs} +0 -0
  34. package/{esm2015/config/abc/lodop.type.js → esm2020/config/abc/lodop.type.mjs} +0 -0
  35. package/{esm2015/config/abc/media.type.js → esm2020/config/abc/media.type.mjs} +0 -0
  36. package/{esm2015/config/abc/onboarding.type.js → esm2020/config/abc/onboarding.type.mjs} +0 -0
  37. package/{esm2015/config/abc/page-header.type.js → esm2020/config/abc/page-header.type.mjs} +0 -0
  38. package/esm2020/config/abc/pdf.type.mjs +2 -0
  39. package/esm2020/config/abc/qr.type.mjs +2 -0
  40. package/{esm2015/config/abc/se.type.js → esm2020/config/abc/se.type.mjs} +0 -0
  41. package/{esm2015/config/abc/sg.type.js → esm2020/config/abc/sg.type.mjs} +0 -0
  42. package/{esm2015/config/abc/st.type.js → esm2020/config/abc/st.type.mjs} +0 -0
  43. package/{esm2015/config/abc/sv.type.js → esm2020/config/abc/sv.type.mjs} +0 -0
  44. package/{esm2015/config/abc/xlsx.type.js → esm2020/config/abc/xlsx.type.mjs} +0 -0
  45. package/{esm2015/config/abc/zip.type.js → esm2020/config/abc/zip.type.mjs} +0 -0
  46. package/{esm2015/config/acl/acl.type.js → esm2020/config/acl/acl.type.mjs} +0 -0
  47. package/{esm2015/config/auth/auth.type.js → esm2020/config/auth/auth.type.mjs} +0 -0
  48. package/{esm2015/config/bis/bis.type.js → esm2020/config/bis/bis.type.mjs} +0 -0
  49. package/{esm2015/config/cache/cache.type.js → esm2020/config/cache/cache.type.mjs} +0 -0
  50. package/{esm2015/config/chart/chart.type.js → esm2020/config/chart/chart.type.mjs} +0 -0
  51. package/esm2020/config/config.mjs +5 -0
  52. package/esm2020/config/config.service.mjs +37 -0
  53. package/{esm2015/config/config.types.js → esm2020/config/config.types.mjs} +0 -0
  54. package/{esm2015/config/index.js → esm2020/config/index.mjs} +0 -0
  55. package/{esm2015/config/mock/mock.type.js → esm2020/config/mock/mock.type.mjs} +0 -0
  56. package/{esm2015/config/sf/sf.type.js → esm2020/config/sf/sf.type.mjs} +0 -0
  57. package/{esm2015/config/stomp/stomp.type.js → esm2020/config/stomp/stomp.type.mjs} +0 -0
  58. package/{esm2015/config/theme/http.type.js → esm2020/config/theme/http.type.mjs} +0 -0
  59. package/{esm2015/config/theme/i18n.type.js → esm2020/config/theme/i18n.type.mjs} +0 -0
  60. package/{esm2015/config/theme/index.js → esm2020/config/theme/index.mjs} +0 -0
  61. package/{esm2015/config/theme/responsive.type.js → esm2020/config/theme/responsive.type.mjs} +0 -0
  62. package/{esm2015/config/util/array.type.js → esm2020/config/util/array.type.mjs} +0 -0
  63. package/{esm2015/config/util/currency.type.js → esm2020/config/util/currency.type.mjs} +0 -0
  64. package/esm2020/date-time/date-time.mjs +5 -0
  65. package/{esm2015/date-time/index.js → esm2020/date-time/index.mjs} +0 -0
  66. package/esm2020/date-time/picker.mjs +116 -0
  67. package/{esm2015/date-time/time.js → esm2020/date-time/time.mjs} +6 -2
  68. package/esm2020/decorator/convert.mjs +58 -0
  69. package/esm2020/decorator/decorator.mjs +5 -0
  70. package/{esm2015/decorator/index.js → esm2020/decorator/index.mjs} +0 -0
  71. package/esm2020/decorator/zone-outside.mjs +57 -0
  72. package/esm2020/form/form.mjs +5 -0
  73. package/{esm2015/form/index.js → esm2020/form/index.mjs} +0 -0
  74. package/{esm2015/form/match-control.js → esm2020/form/match-control.mjs} +0 -0
  75. package/{esm2015/form/validators.js → esm2020/form/validators.mjs} +0 -0
  76. package/esm2020/format/currency.service.mjs +238 -0
  77. package/{esm2015/format/currency.types.js → esm2020/format/currency.types.mjs} +0 -0
  78. package/esm2020/format/format.mjs +5 -0
  79. package/{esm2015/format/index.js → esm2020/format/index.mjs} +0 -0
  80. package/esm2020/format/string.mjs +85 -0
  81. package/{esm2015/format/validate.js → esm2020/format/validate.mjs} +0 -0
  82. package/{esm2015/index.js → esm2020/index.mjs} +0 -0
  83. package/{esm2015/math/in-range.js → esm2020/math/in-range.mjs} +0 -0
  84. package/{esm2015/math/index.js → esm2020/math/index.mjs} +0 -0
  85. package/esm2020/math/math.mjs +5 -0
  86. package/{esm2015/math/round.js → esm2020/math/round.mjs} +0 -0
  87. package/{esm2015/other/assert.js → esm2020/other/assert.mjs} +0 -0
  88. package/{esm2015/other/deep.js → esm2020/other/deep.mjs} +0 -0
  89. package/{esm2015/other/index.js → esm2020/other/index.mjs} +3 -1
  90. package/esm2020/other/lazy.service.mjs +104 -0
  91. package/{esm2015/other/logger.js → esm2020/other/logger.mjs} +0 -0
  92. package/esm2020/other/other.mjs +5 -0
  93. package/esm2020/other/resize.mjs +4 -0
  94. package/esm2020/other/url.mjs +13 -0
  95. package/esm2020/pipes/currency/cny.pipe.mjs +23 -0
  96. package/{esm2015/pipes/currency/index.js → esm2020/pipes/currency/index.mjs} +2 -1
  97. package/esm2020/pipes/currency/mega.pipe.mjs +29 -0
  98. package/esm2020/pipes/currency/module.mjs +19 -0
  99. package/esm2020/pipes/currency/pipe-currency.mjs +5 -0
  100. package/esm2020/pipes/currency/price.pipe.mjs +27 -0
  101. package/esm2020/pipes/filter/filter.pipe.mjs +19 -0
  102. package/{esm2015/pipes/filter/index.js → esm2020/pipes/filter/index.mjs} +0 -0
  103. package/esm2020/pipes/filter/module.mjs +17 -0
  104. package/{esm2015/other/yelon-util-other.js → esm2020/pipes/filter/pipe-filter.mjs} +1 -1
  105. package/{esm2015/pipes/format/index.js → esm2020/pipes/format/index.mjs} +0 -0
  106. package/esm2020/pipes/format/mask.pipe.mjs +34 -0
  107. package/esm2020/pipes/format/module.mjs +17 -0
  108. package/{esm2015/array/yelon-util-array.js → esm2020/pipes/format/pipe-format.mjs} +1 -1
  109. package/{esm2015/pipes/index.js → esm2020/pipes/index.mjs} +0 -0
  110. package/esm2020/pipes/pipes.mjs +5 -0
  111. package/{esm2015/token/index.js → esm2020/token/index.mjs} +0 -0
  112. package/{esm2015/token/page-visibility.js → esm2020/token/page-visibility.mjs} +0 -0
  113. package/esm2020/token/token.mjs +5 -0
  114. package/{esm2015/token/window.js → esm2020/token/window.mjs} +0 -0
  115. package/{esm2015/yelon-util.js → esm2020/yelon-util.mjs} +0 -0
  116. package/fesm2015/{yelon-util-array.js → array.mjs} +8 -10
  117. package/fesm2015/array.mjs.map +1 -0
  118. package/fesm2015/{browser.js → browser.mjs} +28 -42
  119. package/fesm2015/browser.mjs.map +1 -0
  120. package/fesm2015/{yelon-util-config.js → config.mjs} +14 -8
  121. package/fesm2015/config.mjs.map +1 -0
  122. package/fesm2015/{yelon-util-date-time.js → date-time.mjs} +1 -1
  123. package/fesm2015/date-time.mjs.map +1 -0
  124. package/fesm2015/{yelon-util-decorator.js → decorator.mjs} +8 -4
  125. package/fesm2015/decorator.mjs.map +1 -0
  126. package/fesm2015/{yelon-util-form.js → form.mjs} +1 -1
  127. package/fesm2015/form.mjs.map +1 -0
  128. package/fesm2015/{yelon-util-format.js → format.mjs} +18 -14
  129. package/fesm2015/format.mjs.map +1 -0
  130. package/fesm2015/{yelon-util-math.js → math.mjs} +1 -1
  131. package/fesm2015/math.mjs.map +1 -0
  132. package/fesm2015/{yelon-util-other.js → other.mjs} +35 -30
  133. package/fesm2015/other.mjs.map +1 -0
  134. package/fesm2015/pipe-currency.mjs +96 -0
  135. package/fesm2015/pipe-currency.mjs.map +1 -0
  136. package/fesm2015/pipe-filter.mjs +40 -0
  137. package/fesm2015/pipe-filter.mjs.map +1 -0
  138. package/fesm2015/pipe-format.mjs +55 -0
  139. package/fesm2015/pipe-format.mjs.map +1 -0
  140. package/fesm2015/{yelon-util-pipes.js → pipes.mjs} +1 -1
  141. package/fesm2015/pipes.mjs.map +1 -0
  142. package/fesm2015/{yelon-util-token.js → token.mjs} +1 -1
  143. package/fesm2015/token.mjs.map +1 -0
  144. package/fesm2015/{yelon-util.js → yelon-util.mjs} +1 -1
  145. package/fesm2015/yelon-util.mjs.map +1 -0
  146. package/fesm2020/array.mjs +285 -0
  147. package/fesm2020/array.mjs.map +1 -0
  148. package/fesm2020/browser.mjs +260 -0
  149. package/fesm2020/browser.mjs.map +1 -0
  150. package/fesm2020/config.mjs +54 -0
  151. package/fesm2020/config.mjs.map +1 -0
  152. package/fesm2020/date-time.mjs +210 -0
  153. package/fesm2020/date-time.mjs.map +1 -0
  154. package/fesm2020/decorator.mjs +121 -0
  155. package/fesm2020/decorator.mjs.map +1 -0
  156. package/fesm2020/form.mjs +118 -0
  157. package/fesm2020/form.mjs.map +1 -0
  158. package/fesm2020/format.mjs +431 -0
  159. package/fesm2020/format.mjs.map +1 -0
  160. package/fesm2020/math.mjs +85 -0
  161. package/fesm2020/math.mjs.map +1 -0
  162. package/fesm2020/other.mjs +303 -0
  163. package/fesm2020/other.mjs.map +1 -0
  164. package/fesm2020/pipe-currency.mjs +94 -0
  165. package/fesm2020/pipe-currency.mjs.map +1 -0
  166. package/fesm2020/pipe-filter.mjs +40 -0
  167. package/fesm2020/pipe-filter.mjs.map +1 -0
  168. package/fesm2020/pipe-format.mjs +55 -0
  169. package/fesm2020/pipe-format.mjs.map +1 -0
  170. package/fesm2020/pipes.mjs +8 -0
  171. package/fesm2020/pipes.mjs.map +1 -0
  172. package/fesm2020/token.mjs +38 -0
  173. package/fesm2020/token.mjs.map +1 -0
  174. package/fesm2020/yelon-util.mjs +16 -0
  175. package/fesm2020/yelon-util.mjs.map +1 -0
  176. package/{array/yelon-util-array.d.ts → form/form.d.ts} +1 -0
  177. package/form/package.json +6 -7
  178. package/format/currency.service.d.ts +3 -0
  179. package/format/format.d.ts +5 -0
  180. package/format/package.json +6 -7
  181. package/{config/yelon-util-config.d.ts → math/math.d.ts} +1 -0
  182. package/math/package.json +6 -7
  183. package/other/index.d.ts +2 -0
  184. package/other/lazy.service.d.ts +3 -0
  185. package/{decorator/yelon-util-decorator.d.ts → other/other.d.ts} +1 -0
  186. package/other/package.json +6 -7
  187. package/other/resize.d.ts +1 -0
  188. package/other/url.d.ts +2 -0
  189. package/package.json +132 -8
  190. package/pipes/currency/cny.pipe.d.ts +3 -0
  191. package/pipes/currency/index.d.ts +1 -0
  192. package/pipes/currency/mega.pipe.d.ts +3 -0
  193. package/pipes/currency/module.d.ts +7 -0
  194. package/pipes/currency/package.json +6 -7
  195. package/pipes/currency/pipe-currency.d.ts +5 -0
  196. package/pipes/currency/price.pipe.d.ts +3 -0
  197. package/pipes/filter/filter.pipe.d.ts +3 -0
  198. package/pipes/filter/module.d.ts +5 -0
  199. package/pipes/filter/package.json +6 -7
  200. package/pipes/filter/pipe-filter.d.ts +5 -0
  201. package/pipes/format/mask.pipe.d.ts +3 -0
  202. package/pipes/format/module.d.ts +5 -0
  203. package/pipes/format/package.json +6 -7
  204. package/pipes/format/pipe-format.d.ts +5 -0
  205. package/pipes/package.json +6 -7
  206. package/pipes/pipes.d.ts +5 -0
  207. package/token/package.json +6 -7
  208. package/token/token.d.ts +5 -0
  209. package/yelon-util.d.ts +1 -0
  210. package/array/yelon-util-array.metadata.json +0 -1
  211. package/browser/browser.metadata.json +0 -1
  212. package/bundles/browser.umd.js +0 -325
  213. package/bundles/browser.umd.js.map +0 -1
  214. package/bundles/yelon-util-array.umd.js +0 -641
  215. package/bundles/yelon-util-array.umd.js.map +0 -1
  216. package/bundles/yelon-util-config.umd.js +0 -411
  217. package/bundles/yelon-util-config.umd.js.map +0 -1
  218. package/bundles/yelon-util-date-time.umd.js +0 -238
  219. package/bundles/yelon-util-date-time.umd.js.map +0 -1
  220. package/bundles/yelon-util-decorator.umd.js +0 -462
  221. package/bundles/yelon-util-decorator.umd.js.map +0 -1
  222. package/bundles/yelon-util-form.umd.js +0 -135
  223. package/bundles/yelon-util-form.umd.js.map +0 -1
  224. package/bundles/yelon-util-format.umd.js +0 -785
  225. package/bundles/yelon-util-format.umd.js.map +0 -1
  226. package/bundles/yelon-util-math.umd.js +0 -104
  227. package/bundles/yelon-util-math.umd.js.map +0 -1
  228. package/bundles/yelon-util-other.umd.js +0 -714
  229. package/bundles/yelon-util-other.umd.js.map +0 -1
  230. package/bundles/yelon-util-pipes-currency.umd.js +0 -108
  231. package/bundles/yelon-util-pipes-currency.umd.js.map +0 -1
  232. package/bundles/yelon-util-pipes-filter.umd.js +0 -374
  233. package/bundles/yelon-util-pipes-filter.umd.js.map +0 -1
  234. package/bundles/yelon-util-pipes-format.umd.js +0 -66
  235. package/bundles/yelon-util-pipes-format.umd.js.map +0 -1
  236. package/bundles/yelon-util-pipes.umd.js +0 -38
  237. package/bundles/yelon-util-pipes.umd.js.map +0 -1
  238. package/bundles/yelon-util-token.umd.js +0 -49
  239. package/bundles/yelon-util-token.umd.js.map +0 -1
  240. package/bundles/yelon-util.umd.js +0 -86
  241. package/bundles/yelon-util.umd.js.map +0 -1
  242. package/config/yelon-util-config.metadata.json +0 -1
  243. package/date-time/yelon-util-date-time.metadata.json +0 -1
  244. package/decorator/yelon-util-decorator.metadata.json +0 -1
  245. package/esm2015/array/array.service.js +0 -250
  246. package/esm2015/browser/cookie.service.js +0 -104
  247. package/esm2015/browser/copy.js +0 -27
  248. package/esm2015/browser/scroll.service.js +0 -89
  249. package/esm2015/config/abc/pdf.type.js +0 -2
  250. package/esm2015/config/abc/qr.type.js +0 -2
  251. package/esm2015/config/config.service.js +0 -34
  252. package/esm2015/config/yelon-util-config.js +0 -5
  253. package/esm2015/date-time/picker.js +0 -116
  254. package/esm2015/date-time/yelon-util-date-time.js +0 -5
  255. package/esm2015/decorator/convert.js +0 -56
  256. package/esm2015/decorator/yelon-util-decorator.js +0 -5
  257. package/esm2015/decorator/zone-outside.js +0 -55
  258. package/esm2015/form/yelon-util-form.js +0 -5
  259. package/esm2015/format/currency.service.js +0 -225
  260. package/esm2015/format/string.js +0 -76
  261. package/esm2015/format/yelon-util-format.js +0 -5
  262. package/esm2015/math/yelon-util-math.js +0 -5
  263. package/esm2015/other/lazy.service.js +0 -118
  264. package/esm2015/pipes/currency/cny.pipe.js +0 -22
  265. package/esm2015/pipes/currency/mega.pipe.js +0 -26
  266. package/esm2015/pipes/currency/module.js +0 -14
  267. package/esm2015/pipes/currency/price.pipe.js +0 -26
  268. package/esm2015/pipes/currency/yelon-util-pipes-currency.js +0 -6
  269. package/esm2015/pipes/filter/filter.pipe.js +0 -15
  270. package/esm2015/pipes/filter/module.js +0 -12
  271. package/esm2015/pipes/filter/yelon-util-pipes-filter.js +0 -5
  272. package/esm2015/pipes/format/mask.pipe.js +0 -30
  273. package/esm2015/pipes/format/module.js +0 -12
  274. package/esm2015/pipes/format/yelon-util-pipes-format.js +0 -5
  275. package/esm2015/pipes/yelon-util-pipes.js +0 -5
  276. package/esm2015/token/yelon-util-token.js +0 -5
  277. package/fesm2015/browser.js.map +0 -1
  278. package/fesm2015/yelon-util-array.js.map +0 -1
  279. package/fesm2015/yelon-util-config.js.map +0 -1
  280. package/fesm2015/yelon-util-date-time.js.map +0 -1
  281. package/fesm2015/yelon-util-decorator.js.map +0 -1
  282. package/fesm2015/yelon-util-form.js.map +0 -1
  283. package/fesm2015/yelon-util-format.js.map +0 -1
  284. package/fesm2015/yelon-util-math.js.map +0 -1
  285. package/fesm2015/yelon-util-other.js.map +0 -1
  286. package/fesm2015/yelon-util-pipes-currency.js +0 -87
  287. package/fesm2015/yelon-util-pipes-currency.js.map +0 -1
  288. package/fesm2015/yelon-util-pipes-filter.js +0 -32
  289. package/fesm2015/yelon-util-pipes-filter.js.map +0 -1
  290. package/fesm2015/yelon-util-pipes-format.js +0 -47
  291. package/fesm2015/yelon-util-pipes-format.js.map +0 -1
  292. package/fesm2015/yelon-util-pipes.js.map +0 -1
  293. package/fesm2015/yelon-util-token.js.map +0 -1
  294. package/fesm2015/yelon-util.js.map +0 -1
  295. package/form/yelon-util-form.d.ts +0 -4
  296. package/form/yelon-util-form.metadata.json +0 -1
  297. package/format/yelon-util-format.d.ts +0 -4
  298. package/format/yelon-util-format.metadata.json +0 -1
  299. package/math/yelon-util-math.d.ts +0 -4
  300. package/math/yelon-util-math.metadata.json +0 -1
  301. package/other/yelon-util-other.d.ts +0 -4
  302. package/other/yelon-util-other.metadata.json +0 -1
  303. package/pipes/currency/yelon-util-pipes-currency.d.ts +0 -5
  304. package/pipes/currency/yelon-util-pipes-currency.metadata.json +0 -1
  305. package/pipes/filter/yelon-util-pipes-filter.d.ts +0 -4
  306. package/pipes/filter/yelon-util-pipes-filter.metadata.json +0 -1
  307. package/pipes/format/yelon-util-pipes-format.d.ts +0 -4
  308. package/pipes/format/yelon-util-pipes-format.metadata.json +0 -1
  309. package/pipes/yelon-util-pipes.d.ts +0 -4
  310. package/pipes/yelon-util-pipes.metadata.json +0 -1
  311. package/token/yelon-util-token.d.ts +0 -4
  312. package/token/yelon-util-token.metadata.json +0 -1
  313. package/yelon-util.metadata.json +0 -1
@@ -0,0 +1,121 @@
1
+ import { warn } from '@yelon/util/other';
2
+
3
+ function propDecoratorFactory(name, fallback, defaultValue) {
4
+ function propDecorator(target, propName, originalDescriptor) {
5
+ const privatePropName = `$$__${propName}`;
6
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
7
+ if (Object.prototype.hasOwnProperty.call(target, privatePropName)) {
8
+ warn(`The prop "${privatePropName}" is already exist, it will be overrided by ${name} decorator.`);
9
+ }
10
+ }
11
+ Object.defineProperty(target, privatePropName, {
12
+ configurable: true,
13
+ writable: true
14
+ });
15
+ return {
16
+ get() {
17
+ return originalDescriptor && originalDescriptor.get
18
+ ? originalDescriptor.get.bind(this)()
19
+ : this[privatePropName];
20
+ },
21
+ set(value) {
22
+ if (originalDescriptor && originalDescriptor.set) {
23
+ originalDescriptor.set.bind(this)(fallback(value, defaultValue));
24
+ }
25
+ this[privatePropName] = fallback(value, defaultValue);
26
+ }
27
+ };
28
+ }
29
+ return propDecorator;
30
+ }
31
+ function toBoolean(value, defaultValue = false) {
32
+ return value == null ? defaultValue : `${value}` !== 'false';
33
+ }
34
+ /**
35
+ * Input decorator that handle a prop to do get/set automatically with toBoolean
36
+ *
37
+ * ```ts
38
+ * {AT}Input() {AT}InputBoolean() visible: boolean = false;
39
+ * {AT}Input() {AT}InputBoolean(null) visible: boolean = false;
40
+ * ```
41
+ */
42
+ function InputBoolean(defaultValue = false) {
43
+ return propDecoratorFactory('InputBoolean', toBoolean, defaultValue);
44
+ }
45
+ function toNumber(value, fallbackValue = 0) {
46
+ return !isNaN(parseFloat(value)) && !isNaN(Number(value)) ? Number(value) : fallbackValue;
47
+ }
48
+ /**
49
+ * Input decorator that handle a prop to do get/set automatically with toNumber
50
+ *
51
+ * ```ts
52
+ * {AT}Input() {AT}InputNumber() visible: number = 1;
53
+ * {AT}Input() {AT}InputNumber(null) visible: number = 2;
54
+ * ```
55
+ */
56
+ function InputNumber(defaultValue = 0) {
57
+ return propDecoratorFactory('InputNumber', toNumber, defaultValue);
58
+ }
59
+
60
+ function makeFn(type, options) {
61
+ return (_, __, descriptor) => {
62
+ const source = descriptor.value;
63
+ descriptor.value = function (...data) {
64
+ const that = this;
65
+ const ngZone = that[options?.ngZoneName || 'ngZone'];
66
+ if (!ngZone) {
67
+ if (typeof ngDevMode === 'undefined' || ngDevMode) {
68
+ warn(`ZoneOutside: Decorator should have 'ngZone' property with 'NgZone' class.`);
69
+ }
70
+ return source.call(this, ...data);
71
+ }
72
+ let res;
73
+ ngZone[type](() => {
74
+ res = source.call(this, ...data);
75
+ });
76
+ return res;
77
+ };
78
+ return descriptor;
79
+ };
80
+ }
81
+ /**
82
+ * The decoration method runs in `runOutsideAngular`
83
+ *
84
+ * 装饰方法运行在 `runOutsideAngular` 内
85
+ *
86
+ * ```ts
87
+ * class MockClass {
88
+ * constructor(public ngZone: NgZone) {}
89
+ *
90
+ * {AT}ZoneOutside()
91
+ * runOutsideAngular(): void {}
92
+ * }
93
+ * ```
94
+ */
95
+ function ZoneOutside(options) {
96
+ return makeFn('runOutsideAngular', options);
97
+ }
98
+ /**
99
+ * The decoration method runs in `run`
100
+ *
101
+ * 装饰方法运行在 `run` 内
102
+ *
103
+ * ```ts
104
+ * class MockClass {
105
+ * constructor(public ngZone: NgZone) {}
106
+ *
107
+ * {AT}ZoneRun()
108
+ * run(): void {}
109
+ * }
110
+ * ```
111
+ */
112
+ function ZoneRun(options) {
113
+ return makeFn('run', options);
114
+ }
115
+
116
+ /**
117
+ * Generated bundle index. Do not edit.
118
+ */
119
+
120
+ export { InputBoolean, InputNumber, ZoneOutside, ZoneRun, toBoolean, toNumber };
121
+ //# sourceMappingURL=decorator.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorator.mjs","sources":["../../../../packages/util/decorator/convert.ts","../../../../packages/util/decorator/zone-outside.ts","../../../../packages/util/decorator/decorator.ts"],"sourcesContent":["import { warn } from '@yelon/util/other';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nexport type BooleanInput = boolean | string | undefined | null;\nexport type NumberInput = number | string | undefined | null;\n\nfunction propDecoratorFactory<T, D>(\n name: string,\n fallback: (v: T, defaultValue: D) => D,\n defaultValue: NzSafeAny\n): (target: NzSafeAny, propName: string) => void {\n function propDecorator(\n target: NzSafeAny,\n propName: string,\n originalDescriptor?: TypedPropertyDescriptor<NzSafeAny>\n ): NzSafeAny {\n const privatePropName = `$$__${propName}`;\n\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n if (Object.prototype.hasOwnProperty.call(target, privatePropName)) {\n warn(`The prop \"${privatePropName}\" is already exist, it will be overrided by ${name} decorator.`);\n }\n }\n\n Object.defineProperty(target, privatePropName, {\n configurable: true,\n writable: true\n });\n\n return {\n get(): string {\n return originalDescriptor && originalDescriptor.get\n ? originalDescriptor.get.bind(this)()\n : this[privatePropName];\n },\n set(value: T): void {\n if (originalDescriptor && originalDescriptor.set) {\n originalDescriptor.set.bind(this)(fallback(value, defaultValue));\n }\n this[privatePropName] = fallback(value, defaultValue);\n }\n };\n }\n\n return propDecorator;\n}\n\nexport function toBoolean(\n value: unknown,\n defaultValue: boolean | null | undefined = false\n): boolean | null | undefined {\n return value == null ? defaultValue : `${value}` !== 'false';\n}\n\n/**\n * Input decorator that handle a prop to do get/set automatically with toBoolean\n *\n * ```ts\n * {AT}Input() {AT}InputBoolean() visible: boolean = false;\n * {AT}Input() {AT}InputBoolean(null) visible: boolean = false;\n * ```\n */\nexport function InputBoolean(defaultValue: boolean | null = false): NzSafeAny {\n return propDecoratorFactory('InputBoolean', toBoolean, defaultValue);\n}\n\nexport function toNumber(value: unknown): number;\nexport function toNumber<D>(value: unknown, fallback: D): number | D;\nexport function toNumber(value: unknown, fallbackValue: number = 0): number {\n return !isNaN(parseFloat(value as NzSafeAny)) && !isNaN(Number(value)) ? Number(value) : fallbackValue;\n}\n\n/**\n * Input decorator that handle a prop to do get/set automatically with toNumber\n *\n * ```ts\n * {AT}Input() {AT}InputNumber() visible: number = 1;\n * {AT}Input() {AT}InputNumber(null) visible: number = 2;\n * ```\n */\nexport function InputNumber(defaultValue: number | null = 0): NzSafeAny {\n return propDecoratorFactory('InputNumber', toNumber, defaultValue);\n}\n","import { warn } from '@yelon/util/other';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nexport interface ZoneOptions {\n ngZoneName?: string;\n}\n\ntype DecoratorType = (target: unknown, fn: string, descriptor: PropertyDescriptor) => PropertyDescriptor;\n\nfunction makeFn(type: 'runOutsideAngular' | 'run', options?: ZoneOptions): DecoratorType {\n return (_, __, descriptor) => {\n const source = descriptor.value;\n descriptor.value = function (...data: NzSafeAny[]): () => void {\n const that = this as NzSafeAny;\n const ngZone = that[options?.ngZoneName || 'ngZone'];\n if (!ngZone) {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n warn(`ZoneOutside: Decorator should have 'ngZone' property with 'NgZone' class.`);\n }\n return source.call(this, ...data);\n }\n let res: NzSafeAny;\n ngZone[type](() => {\n res = source.call(this, ...data);\n });\n return res;\n };\n\n return descriptor;\n };\n}\n\n/**\n * The decoration method runs in `runOutsideAngular`\n *\n * 装饰方法运行在 `runOutsideAngular` 内\n *\n * ```ts\n * class MockClass {\n * constructor(public ngZone: NgZone) {}\n *\n * {AT}ZoneOutside()\n * runOutsideAngular(): void {}\n * }\n * ```\n */\nexport function ZoneOutside(options?: ZoneOptions): DecoratorType {\n return makeFn('runOutsideAngular', options);\n}\n\n/**\n * The decoration method runs in `run`\n *\n * 装饰方法运行在 `run` 内\n *\n * ```ts\n * class MockClass {\n * constructor(public ngZone: NgZone) {}\n *\n * {AT}ZoneRun()\n * run(): void {}\n * }\n * ```\n */\nexport function ZoneRun(options?: ZoneOptions): DecoratorType {\n return makeFn('run', options);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ import { isNum, isInt, isDecimal, isIdCard, isMobile, isUrl, isIp, isColor, isChinese } from '@yelon/util/format';
2
+
3
+ /**
4
+ * A set of validators for reactive forms
5
+ *
6
+ * 一套用于响应式表单的验证器
7
+ */
8
+ class _Validators {
9
+ /**
10
+ * Wheter is number
11
+ *
12
+ * 是否为数字
13
+ */
14
+ static num(control) {
15
+ return isNum(control.value) ? null : { num: true };
16
+ }
17
+ /**
18
+ * Wheter is integer
19
+ *
20
+ * 是否为整数
21
+ */
22
+ static int(control) {
23
+ return isInt(control.value) ? null : { int: true };
24
+ }
25
+ /**
26
+ * Wheter is decimal
27
+ *
28
+ * 是否为小数点数值
29
+ */
30
+ static decimal(control) {
31
+ return isDecimal(control.value) ? null : { decimal: true };
32
+ }
33
+ /**
34
+ * Wheter is People's Republic of China identity card
35
+ *
36
+ * 是否为中华人民共和国居民身份证
37
+ */
38
+ static idCard(control) {
39
+ return isIdCard(control.value) ? null : { idCard: true };
40
+ }
41
+ /**
42
+ * Wheter is china mobile (China)
43
+ *
44
+ * 是否为手机号(中国)
45
+ */
46
+ static mobile(control) {
47
+ return isMobile(control.value) ? null : { mobile: true };
48
+ }
49
+ /**
50
+ * Wheter is url address
51
+ *
52
+ * 是否URL地址
53
+ */
54
+ static url(control) {
55
+ return isUrl(control.value) ? null : { url: true };
56
+ }
57
+ /**
58
+ * Wheter is IPv4 address (Support v4, v6)
59
+ *
60
+ * 是否IP4地址(支持v4、v6)
61
+ */
62
+ static ip(control) {
63
+ return isIp(control.value) ? null : { ip: true };
64
+ }
65
+ /**
66
+ * Wheter is color
67
+ *
68
+ * 是否颜色代码值
69
+ */
70
+ static color(control) {
71
+ return isColor(control.value) ? null : { color: true };
72
+ }
73
+ /**
74
+ * Wheter is chinese
75
+ *
76
+ * 是否中文
77
+ */
78
+ static chinese(control) {
79
+ return isChinese(control.value) ? null : { chinese: true };
80
+ }
81
+ }
82
+
83
+ /**
84
+ * Match two control values
85
+ *
86
+ * 匹配两个控件值
87
+ * ```ts
88
+ * this.form = new FormGroup({
89
+ * pwd: new FormControl(''),
90
+ * repwd: new FormControl(''),
91
+ * }, {
92
+ * validators: MatchControl('pwd', 'repwd'),
93
+ * });
94
+ * ```
95
+ */
96
+ function MatchControl(controlName, matchingControlName) {
97
+ return (formGroup) => {
98
+ const control = formGroup.get(controlName);
99
+ const matchingControl = formGroup.get(matchingControlName);
100
+ if (matchingControl.errors && !matchingControl.errors.matchControl) {
101
+ return null;
102
+ }
103
+ if (control.value !== matchingControl.value) {
104
+ matchingControl.setErrors({ matchControl: true });
105
+ }
106
+ else {
107
+ matchingControl.setErrors(null);
108
+ }
109
+ return null;
110
+ };
111
+ }
112
+
113
+ /**
114
+ * Generated bundle index. Do not edit.
115
+ */
116
+
117
+ export { MatchControl, _Validators };
118
+ //# sourceMappingURL=form.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form.mjs","sources":["../../../../packages/util/form/validators.ts","../../../../packages/util/form/match-control.ts","../../../../packages/util/form/form.ts"],"sourcesContent":["import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { isChinese, isColor, isDecimal, isIdCard, isInt, isIp, isMobile, isNum, isUrl } from '@yelon/util/format';\n\n/**\n * A set of validators for reactive forms\n *\n * 一套用于响应式表单的验证器\n */\nexport class _Validators {\n /**\n * Wheter is number\n *\n * 是否为数字\n */\n static num(control: AbstractControl): ValidationErrors | null {\n return isNum(control.value) ? null : { num: true };\n }\n\n /**\n * Wheter is integer\n *\n * 是否为整数\n */\n static int(control: AbstractControl): ValidationErrors | null {\n return isInt(control.value) ? null : { int: true };\n }\n\n /**\n * Wheter is decimal\n *\n * 是否为小数点数值\n */\n static decimal(control: AbstractControl): ValidationErrors | null {\n return isDecimal(control.value) ? null : { decimal: true };\n }\n\n /**\n * Wheter is People's Republic of China identity card\n *\n * 是否为中华人民共和国居民身份证\n */\n static idCard(control: AbstractControl): ValidationErrors | null {\n return isIdCard(control.value) ? null : { idCard: true };\n }\n\n /**\n * Wheter is china mobile (China)\n *\n * 是否为手机号(中国)\n */\n static mobile(control: AbstractControl): ValidationErrors | null {\n return isMobile(control.value) ? null : { mobile: true };\n }\n\n /**\n * Wheter is url address\n *\n * 是否URL地址\n */\n static url(control: AbstractControl): ValidationErrors | null {\n return isUrl(control.value) ? null : { url: true };\n }\n\n /**\n * Wheter is IPv4 address (Support v4, v6)\n *\n * 是否IP4地址(支持v4、v6)\n */\n static ip(control: AbstractControl): ValidationErrors | null {\n return isIp(control.value) ? null : { ip: true };\n }\n\n /**\n * Wheter is color\n *\n * 是否颜色代码值\n */\n static color(control: AbstractControl): ValidationErrors | null {\n return isColor(control.value) ? null : { color: true };\n }\n\n /**\n * Wheter is chinese\n *\n * 是否中文\n */\n static chinese(control: AbstractControl): ValidationErrors | null {\n return isChinese(control.value) ? null : { chinese: true };\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\n/**\n * Match two control values\n *\n * 匹配两个控件值\n * ```ts\n * this.form = new FormGroup({\n * pwd: new FormControl(''),\n * repwd: new FormControl(''),\n * }, {\n * validators: MatchControl('pwd', 'repwd'),\n * });\n * ```\n */\nexport function MatchControl(controlName: string, matchingControlName: string): ValidatorFn {\n return (formGroup: AbstractControl) => {\n const control = formGroup.get(controlName)!;\n const matchingControl = formGroup.get(matchingControlName)!;\n if (matchingControl.errors && !matchingControl.errors.matchControl) {\n return null;\n }\n if (control.value !== matchingControl.value) {\n matchingControl.setErrors({ matchControl: true });\n } else {\n matchingControl.setErrors(null);\n }\n return null;\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAIA;;;;;MAKa,WAAW;;;;;;IAMtB,OAAO,GAAG,CAAC,OAAwB;QACjC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;KACpD;;;;;;IAOD,OAAO,GAAG,CAAC,OAAwB;QACjC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;KACpD;;;;;;IAOD,OAAO,OAAO,CAAC,OAAwB;QACrC,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KAC5D;;;;;;IAOD,OAAO,MAAM,CAAC,OAAwB;QACpC,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAC1D;;;;;;IAOD,OAAO,MAAM,CAAC,OAAwB;QACpC,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAC1D;;;;;;IAOD,OAAO,GAAG,CAAC,OAAwB;QACjC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;KACpD;;;;;;IAOD,OAAO,EAAE,CAAC,OAAwB;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;KAClD;;;;;;IAOD,OAAO,KAAK,CAAC,OAAwB;QACnC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KACxD;;;;;;IAOD,OAAO,OAAO,CAAC,OAAwB;QACrC,OAAO,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KAC5D;;;ACvFH;;;;;;;;;;;;;SAagB,YAAY,CAAC,WAAmB,EAAE,mBAA2B;IAC3E,OAAO,CAAC,SAA0B;QAChC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,CAAE,CAAC;QAC5C,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAE,CAAC;QAC5D,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,EAAE;YAClE,OAAO,IAAI,CAAC;SACb;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,eAAe,CAAC,KAAK,EAAE;YAC3C,eAAe,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;SACnD;aAAM;YACL,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SACjC;QACD,OAAO,IAAI,CAAC;KACb,CAAC;AACJ;;AC7BA;;;;;;"}