@wavemaker-ai/app-ng-runtime 1.0.0-next.27766

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 (1846) hide show
  1. package/build-task/.npmignore +2 -0
  2. package/build-task/bundles/index.umd.js +3078 -0
  3. package/build-task/fesm2022/index.mjs +2966 -0
  4. package/build-task/fesm2022/index.mjs.map +1 -0
  5. package/build-task/index.d.ts +882 -0
  6. package/build-task/package.json +23 -0
  7. package/components/advanced/carousel/.npmignore +2 -0
  8. package/components/advanced/carousel/bundles/index.umd.js +352 -0
  9. package/components/advanced/carousel/fesm2022/index.mjs +335 -0
  10. package/components/advanced/carousel/fesm2022/index.mjs.map +1 -0
  11. package/components/advanced/carousel/index.d.ts +89 -0
  12. package/components/advanced/carousel/package.json +18 -0
  13. package/components/advanced/custom/.npmignore +2 -0
  14. package/components/advanced/custom/bundles/index.umd.js +258 -0
  15. package/components/advanced/custom/fesm2022/index.mjs +244 -0
  16. package/components/advanced/custom/fesm2022/index.mjs.map +1 -0
  17. package/components/advanced/custom/index.d.ts +50 -0
  18. package/components/advanced/custom/package.json +18 -0
  19. package/components/advanced/login/.npmignore +2 -0
  20. package/components/advanced/login/bundles/index.umd.js +135 -0
  21. package/components/advanced/login/fesm2022/index.mjs +120 -0
  22. package/components/advanced/login/fesm2022/index.mjs.map +1 -0
  23. package/components/advanced/login/index.d.ts +34 -0
  24. package/components/advanced/login/package.json +18 -0
  25. package/components/advanced/marquee/.npmignore +2 -0
  26. package/components/advanced/marquee/bundles/index.umd.js +71 -0
  27. package/components/advanced/marquee/fesm2022/index.mjs +53 -0
  28. package/components/advanced/marquee/fesm2022/index.mjs.map +1 -0
  29. package/components/advanced/marquee/index.d.ts +12 -0
  30. package/components/advanced/marquee/package.json +18 -0
  31. package/components/base/.npmignore +2 -0
  32. package/components/base/bundles/index.umd.js +6360 -0
  33. package/components/base/fesm2022/index.mjs +6235 -0
  34. package/components/base/fesm2022/index.mjs.map +1 -0
  35. package/components/base/index.d.ts +1544 -0
  36. package/components/base/package.json +26 -0
  37. package/components/basic/anchor/.npmignore +2 -0
  38. package/components/basic/anchor/bundles/index.umd.js +203 -0
  39. package/components/basic/anchor/fesm2022/index.mjs +186 -0
  40. package/components/basic/anchor/fesm2022/index.mjs.map +1 -0
  41. package/components/basic/anchor/index.d.ts +41 -0
  42. package/components/basic/anchor/package.json +18 -0
  43. package/components/basic/audio/.npmignore +2 -0
  44. package/components/basic/audio/bundles/index.umd.js +83 -0
  45. package/components/basic/audio/fesm2022/index.mjs +65 -0
  46. package/components/basic/audio/fesm2022/index.mjs.map +1 -0
  47. package/components/basic/audio/index.d.ts +23 -0
  48. package/components/basic/audio/package.json +18 -0
  49. package/components/basic/html/.npmignore +2 -0
  50. package/components/basic/html/bundles/index.umd.js +122 -0
  51. package/components/basic/html/fesm2022/index.mjs +105 -0
  52. package/components/basic/html/fesm2022/index.mjs.map +1 -0
  53. package/components/basic/html/index.d.ts +17 -0
  54. package/components/basic/html/package.json +18 -0
  55. package/components/basic/icon/.npmignore +2 -0
  56. package/components/basic/icon/bundles/index.umd.js +80 -0
  57. package/components/basic/icon/fesm2022/index.mjs +62 -0
  58. package/components/basic/icon/fesm2022/index.mjs.map +1 -0
  59. package/components/basic/icon/index.d.ts +19 -0
  60. package/components/basic/icon/package.json +18 -0
  61. package/components/basic/iframe/.npmignore +2 -0
  62. package/components/basic/iframe/bundles/index.umd.js +101 -0
  63. package/components/basic/iframe/fesm2022/index.mjs +84 -0
  64. package/components/basic/iframe/fesm2022/index.mjs.map +1 -0
  65. package/components/basic/iframe/index.d.ts +29 -0
  66. package/components/basic/iframe/package.json +18 -0
  67. package/components/basic/label/.npmignore +2 -0
  68. package/components/basic/label/bundles/index.umd.js +129 -0
  69. package/components/basic/label/fesm2022/index.mjs +113 -0
  70. package/components/basic/label/fesm2022/index.mjs.map +1 -0
  71. package/components/basic/label/index.d.ts +15 -0
  72. package/components/basic/label/package.json +18 -0
  73. package/components/basic/picture/.npmignore +2 -0
  74. package/components/basic/picture/bundles/index.umd.js +138 -0
  75. package/components/basic/picture/fesm2022/index.mjs +121 -0
  76. package/components/basic/picture/fesm2022/index.mjs.map +1 -0
  77. package/components/basic/picture/index.d.ts +22 -0
  78. package/components/basic/picture/package.json +18 -0
  79. package/components/basic/progress/progress-bar/.npmignore +2 -0
  80. package/components/basic/progress/progress-bar/bundles/index.umd.js +170 -0
  81. package/components/basic/progress/progress-bar/fesm2022/index.mjs +154 -0
  82. package/components/basic/progress/progress-bar/fesm2022/index.mjs.map +1 -0
  83. package/components/basic/progress/progress-bar/index.d.ts +45 -0
  84. package/components/basic/progress/progress-bar/package.json +18 -0
  85. package/components/basic/progress/progress-circle/.npmignore +2 -0
  86. package/components/basic/progress/progress-circle/bundles/index.umd.js +171 -0
  87. package/components/basic/progress/progress-circle/fesm2022/index.mjs +155 -0
  88. package/components/basic/progress/progress-circle/fesm2022/index.mjs.map +1 -0
  89. package/components/basic/progress/progress-circle/index.d.ts +43 -0
  90. package/components/basic/progress/progress-circle/package.json +18 -0
  91. package/components/basic/progress/progress-utils/.npmignore +2 -0
  92. package/components/basic/progress/progress-utils/bundles/index.umd.js +35 -0
  93. package/components/basic/progress/progress-utils/fesm2022/index.mjs +32 -0
  94. package/components/basic/progress/progress-utils/fesm2022/index.mjs.map +1 -0
  95. package/components/basic/progress/progress-utils/index.d.ts +5 -0
  96. package/components/basic/progress/progress-utils/package.json +18 -0
  97. package/components/basic/rich-text-editor/.npmignore +2 -0
  98. package/components/basic/rich-text-editor/bundles/index.umd.js +236 -0
  99. package/components/basic/rich-text-editor/fesm2022/index.mjs +222 -0
  100. package/components/basic/rich-text-editor/fesm2022/index.mjs.map +1 -0
  101. package/components/basic/rich-text-editor/index.d.ts +58 -0
  102. package/components/basic/rich-text-editor/package.json +18 -0
  103. package/components/basic/search/.npmignore +2 -0
  104. package/components/basic/search/bundles/index.umd.js +1094 -0
  105. package/components/basic/search/fesm2022/index.mjs +1083 -0
  106. package/components/basic/search/fesm2022/index.mjs.map +1 -0
  107. package/components/basic/search/index.d.ts +128 -0
  108. package/components/basic/search/package.json +18 -0
  109. package/components/basic/spinner/.npmignore +2 -0
  110. package/components/basic/spinner/bundles/index.umd.js +128 -0
  111. package/components/basic/spinner/fesm2022/index.mjs +113 -0
  112. package/components/basic/spinner/fesm2022/index.mjs.map +1 -0
  113. package/components/basic/spinner/index.d.ts +31 -0
  114. package/components/basic/spinner/package.json +18 -0
  115. package/components/basic/tree/.npmignore +2 -0
  116. package/components/basic/tree/bundles/index.umd.js +767 -0
  117. package/components/basic/tree/fesm2022/index.mjs +751 -0
  118. package/components/basic/tree/fesm2022/index.mjs.map +1 -0
  119. package/components/basic/tree/index.d.ts +97 -0
  120. package/components/basic/tree/package.json +18 -0
  121. package/components/basic/video/.npmignore +2 -0
  122. package/components/basic/video/bundles/index.umd.js +116 -0
  123. package/components/basic/video/fesm2022/index.mjs +99 -0
  124. package/components/basic/video/fesm2022/index.mjs.map +1 -0
  125. package/components/basic/video/index.d.ts +30 -0
  126. package/components/basic/video/package.json +18 -0
  127. package/components/chart/.npmignore +2 -0
  128. package/components/chart/bundles/index.umd.js +1748 -0
  129. package/components/chart/fesm2022/index.mjs +1775 -0
  130. package/components/chart/fesm2022/index.mjs.map +1 -0
  131. package/components/chart/index.d.ts +104 -0
  132. package/components/chart/package.json +18 -0
  133. package/components/containers/accordion/.npmignore +2 -0
  134. package/components/containers/accordion/bundles/index.umd.js +501 -0
  135. package/components/containers/accordion/fesm2022/index.mjs +487 -0
  136. package/components/containers/accordion/fesm2022/index.mjs.map +1 -0
  137. package/components/containers/accordion/index.d.ts +115 -0
  138. package/components/containers/accordion/package.json +18 -0
  139. package/components/containers/layout-grid/.npmignore +2 -0
  140. package/components/containers/layout-grid/bundles/index.umd.js +172 -0
  141. package/components/containers/layout-grid/fesm2022/index.mjs +153 -0
  142. package/components/containers/layout-grid/fesm2022/index.mjs.map +1 -0
  143. package/components/containers/layout-grid/index.d.ts +29 -0
  144. package/components/containers/layout-grid/package.json +18 -0
  145. package/components/containers/linear-layout/.npmignore +2 -0
  146. package/components/containers/linear-layout/bundles/index.umd.js +186 -0
  147. package/components/containers/linear-layout/fesm2022/index.mjs +167 -0
  148. package/components/containers/linear-layout/fesm2022/index.mjs.map +1 -0
  149. package/components/containers/linear-layout/index.d.ts +27 -0
  150. package/components/containers/linear-layout/package.json +18 -0
  151. package/components/containers/panel/.npmignore +2 -0
  152. package/components/containers/panel/bundles/index.umd.js +223 -0
  153. package/components/containers/panel/fesm2022/index.mjs +210 -0
  154. package/components/containers/panel/fesm2022/index.mjs.map +1 -0
  155. package/components/containers/panel/index.d.ts +49 -0
  156. package/components/containers/panel/package.json +18 -0
  157. package/components/containers/tabs/.npmignore +2 -0
  158. package/components/containers/tabs/bundles/index.umd.js +789 -0
  159. package/components/containers/tabs/fesm2022/index.mjs +776 -0
  160. package/components/containers/tabs/fesm2022/index.mjs.map +1 -0
  161. package/components/containers/tabs/index.d.ts +127 -0
  162. package/components/containers/tabs/package.json +18 -0
  163. package/components/containers/tile/.npmignore +2 -0
  164. package/components/containers/tile/bundles/index.umd.js +68 -0
  165. package/components/containers/tile/fesm2022/index.mjs +50 -0
  166. package/components/containers/tile/fesm2022/index.mjs.map +1 -0
  167. package/components/containers/tile/index.d.ts +12 -0
  168. package/components/containers/tile/package.json +18 -0
  169. package/components/containers/wizard/.npmignore +2 -0
  170. package/components/containers/wizard/bundles/index.umd.js +1076 -0
  171. package/components/containers/wizard/fesm2022/index.mjs +1060 -0
  172. package/components/containers/wizard/fesm2022/index.mjs.map +1 -0
  173. package/components/containers/wizard/index.d.ts +259 -0
  174. package/components/containers/wizard/package.json +18 -0
  175. package/components/data/card/.npmignore +2 -0
  176. package/components/data/card/bundles/index.umd.js +237 -0
  177. package/components/data/card/fesm2022/index.mjs +220 -0
  178. package/components/data/card/fesm2022/index.mjs.map +1 -0
  179. package/components/data/card/index.d.ts +51 -0
  180. package/components/data/card/package.json +18 -0
  181. package/components/data/form/.npmignore +2 -0
  182. package/components/data/form/bundles/index.umd.js +3345 -0
  183. package/components/data/form/fesm2022/index.mjs +3333 -0
  184. package/components/data/form/fesm2022/index.mjs.map +1 -0
  185. package/components/data/form/index.d.ts +489 -0
  186. package/components/data/form/package.json +18 -0
  187. package/components/data/list/.npmignore +2 -0
  188. package/components/data/list/bundles/index.umd.js +1612 -0
  189. package/components/data/list/fesm2022/index.mjs +1604 -0
  190. package/components/data/list/fesm2022/index.mjs.map +1 -0
  191. package/components/data/list/index.d.ts +285 -0
  192. package/components/data/list/package.json +18 -0
  193. package/components/data/live-table/.npmignore +2 -0
  194. package/components/data/live-table/bundles/index.umd.js +283 -0
  195. package/components/data/live-table/fesm2022/index.mjs +268 -0
  196. package/components/data/live-table/fesm2022/index.mjs.map +1 -0
  197. package/components/data/live-table/index.d.ts +39 -0
  198. package/components/data/live-table/package.json +18 -0
  199. package/components/data/pagination/.npmignore +2 -0
  200. package/components/data/pagination/bundles/index.umd.js +888 -0
  201. package/components/data/pagination/fesm2022/index.mjs +883 -0
  202. package/components/data/pagination/fesm2022/index.mjs.map +1 -0
  203. package/components/data/pagination/index.d.ts +106 -0
  204. package/components/data/pagination/package.json +18 -0
  205. package/components/data/table/.npmignore +2 -0
  206. package/components/data/table/bundles/index.umd.js +5027 -0
  207. package/components/data/table/fesm2022/index.mjs +5014 -0
  208. package/components/data/table/fesm2022/index.mjs.map +1 -0
  209. package/components/data/table/index.d.ts +745 -0
  210. package/components/data/table/package.json +18 -0
  211. package/components/dialogs/alert-dialog/.npmignore +2 -0
  212. package/components/dialogs/alert-dialog/bundles/index.umd.js +126 -0
  213. package/components/dialogs/alert-dialog/fesm2022/index.mjs +114 -0
  214. package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -0
  215. package/components/dialogs/alert-dialog/index.d.ts +26 -0
  216. package/components/dialogs/alert-dialog/package.json +18 -0
  217. package/components/dialogs/confirm-dialog/.npmignore +2 -0
  218. package/components/dialogs/confirm-dialog/bundles/index.umd.js +129 -0
  219. package/components/dialogs/confirm-dialog/fesm2022/index.mjs +117 -0
  220. package/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -0
  221. package/components/dialogs/confirm-dialog/index.d.ts +29 -0
  222. package/components/dialogs/confirm-dialog/package.json +18 -0
  223. package/components/dialogs/default/.npmignore +2 -0
  224. package/components/dialogs/default/bundles/index.umd.js +380 -0
  225. package/components/dialogs/default/fesm2022/index.mjs +363 -0
  226. package/components/dialogs/default/fesm2022/index.mjs.map +1 -0
  227. package/components/dialogs/default/index.d.ts +89 -0
  228. package/components/dialogs/default/package.json +18 -0
  229. package/components/dialogs/design-dialog/.npmignore +2 -0
  230. package/components/dialogs/design-dialog/bundles/index.umd.js +150 -0
  231. package/components/dialogs/design-dialog/fesm2022/index.mjs +135 -0
  232. package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -0
  233. package/components/dialogs/design-dialog/index.d.ts +20 -0
  234. package/components/dialogs/design-dialog/package.json +18 -0
  235. package/components/dialogs/iframe-dialog/.npmignore +2 -0
  236. package/components/dialogs/iframe-dialog/bundles/index.umd.js +119 -0
  237. package/components/dialogs/iframe-dialog/fesm2022/index.mjs +108 -0
  238. package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -0
  239. package/components/dialogs/iframe-dialog/index.d.ts +22 -0
  240. package/components/dialogs/iframe-dialog/package.json +18 -0
  241. package/components/dialogs/login-dialog/.npmignore +2 -0
  242. package/components/dialogs/login-dialog/bundles/index.umd.js +114 -0
  243. package/components/dialogs/login-dialog/fesm2022/index.mjs +98 -0
  244. package/components/dialogs/login-dialog/fesm2022/index.mjs.map +1 -0
  245. package/components/dialogs/login-dialog/index.d.ts +26 -0
  246. package/components/dialogs/login-dialog/package.json +18 -0
  247. package/components/dialogs/partial-dialog/.npmignore +2 -0
  248. package/components/dialogs/partial-dialog/bundles/index.umd.js +157 -0
  249. package/components/dialogs/partial-dialog/fesm2022/index.mjs +146 -0
  250. package/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -0
  251. package/components/dialogs/partial-dialog/index.d.ts +32 -0
  252. package/components/dialogs/partial-dialog/package.json +18 -0
  253. package/components/input/base-form/.npmignore +2 -0
  254. package/components/input/base-form/bundles/index.umd.js +147 -0
  255. package/components/input/base-form/fesm2022/index.mjs +131 -0
  256. package/components/input/base-form/fesm2022/index.mjs.map +1 -0
  257. package/components/input/base-form/index.d.ts +29 -0
  258. package/components/input/base-form/package.json +18 -0
  259. package/components/input/base-form-custom/.npmignore +2 -0
  260. package/components/input/base-form-custom/bundles/index.umd.js +129 -0
  261. package/components/input/base-form-custom/fesm2022/index.mjs +112 -0
  262. package/components/input/base-form-custom/fesm2022/index.mjs.map +1 -0
  263. package/components/input/base-form-custom/index.d.ts +26 -0
  264. package/components/input/base-form-custom/package.json +18 -0
  265. package/components/input/button/.npmignore +2 -0
  266. package/components/input/button/bundles/index.umd.js +97 -0
  267. package/components/input/button/fesm2022/index.mjs +80 -0
  268. package/components/input/button/fesm2022/index.mjs.map +1 -0
  269. package/components/input/button/index.d.ts +25 -0
  270. package/components/input/button/package.json +18 -0
  271. package/components/input/button-group/.npmignore +2 -0
  272. package/components/input/button-group/bundles/index.umd.js +80 -0
  273. package/components/input/button-group/fesm2022/index.mjs +62 -0
  274. package/components/input/button-group/fesm2022/index.mjs.map +1 -0
  275. package/components/input/button-group/index.d.ts +14 -0
  276. package/components/input/button-group/package.json +18 -0
  277. package/components/input/calendar/.npmignore +2 -0
  278. package/components/input/calendar/bundles/index.umd.js +655 -0
  279. package/components/input/calendar/fesm2022/index.mjs +665 -0
  280. package/components/input/calendar/fesm2022/index.mjs.map +1 -0
  281. package/components/input/calendar/index.d.ts +131 -0
  282. package/components/input/calendar/package.json +18 -0
  283. package/components/input/caption-position/.npmignore +2 -0
  284. package/components/input/caption-position/bundles/index.umd.js +196 -0
  285. package/components/input/caption-position/fesm2022/index.mjs +178 -0
  286. package/components/input/caption-position/fesm2022/index.mjs.map +1 -0
  287. package/components/input/caption-position/index.d.ts +34 -0
  288. package/components/input/caption-position/package.json +18 -0
  289. package/components/input/checkbox/.npmignore +2 -0
  290. package/components/input/checkbox/bundles/index.umd.js +208 -0
  291. package/components/input/checkbox/fesm2022/index.mjs +193 -0
  292. package/components/input/checkbox/fesm2022/index.mjs.map +1 -0
  293. package/components/input/checkbox/index.d.ts +41 -0
  294. package/components/input/checkbox/package.json +18 -0
  295. package/components/input/checkboxset/.npmignore +2 -0
  296. package/components/input/checkboxset/bundles/index.umd.js +178 -0
  297. package/components/input/checkboxset/fesm2022/index.mjs +165 -0
  298. package/components/input/checkboxset/fesm2022/index.mjs.map +1 -0
  299. package/components/input/checkboxset/index.d.ts +27 -0
  300. package/components/input/checkboxset/package.json +18 -0
  301. package/components/input/chips/.npmignore +2 -0
  302. package/components/input/chips/bundles/index.umd.js +741 -0
  303. package/components/input/chips/fesm2022/index.mjs +729 -0
  304. package/components/input/chips/fesm2022/index.mjs.map +1 -0
  305. package/components/input/chips/index.d.ts +90 -0
  306. package/components/input/chips/package.json +18 -0
  307. package/components/input/color-picker/.npmignore +2 -0
  308. package/components/input/color-picker/bundles/index.umd.js +145 -0
  309. package/components/input/color-picker/fesm2022/index.mjs +132 -0
  310. package/components/input/color-picker/fesm2022/index.mjs.map +1 -0
  311. package/components/input/color-picker/index.d.ts +36 -0
  312. package/components/input/color-picker/package.json +18 -0
  313. package/components/input/composite/.npmignore +2 -0
  314. package/components/input/composite/bundles/index.umd.js +120 -0
  315. package/components/input/composite/fesm2022/index.mjs +103 -0
  316. package/components/input/composite/fesm2022/index.mjs.map +1 -0
  317. package/components/input/composite/index.d.ts +27 -0
  318. package/components/input/composite/package.json +18 -0
  319. package/components/input/currency/.npmignore +2 -0
  320. package/components/input/currency/bundles/index.umd.js +112 -0
  321. package/components/input/currency/fesm2022/index.mjs +97 -0
  322. package/components/input/currency/fesm2022/index.mjs.map +1 -0
  323. package/components/input/currency/index.d.ts +31 -0
  324. package/components/input/currency/package.json +18 -0
  325. package/components/input/dataset-aware-form/.npmignore +2 -0
  326. package/components/input/dataset-aware-form/bundles/index.umd.js +354 -0
  327. package/components/input/dataset-aware-form/fesm2022/index.mjs +340 -0
  328. package/components/input/dataset-aware-form/fesm2022/index.mjs.map +1 -0
  329. package/components/input/dataset-aware-form/index.d.ts +80 -0
  330. package/components/input/dataset-aware-form/package.json +18 -0
  331. package/components/input/epoch/base-date-time/.npmignore +2 -0
  332. package/components/input/epoch/base-date-time/bundles/index.umd.js +1093 -0
  333. package/components/input/epoch/base-date-time/fesm2022/index.mjs +1084 -0
  334. package/components/input/epoch/base-date-time/fesm2022/index.mjs.map +1 -0
  335. package/components/input/epoch/base-date-time/index.d.ts +249 -0
  336. package/components/input/epoch/base-date-time/package.json +18 -0
  337. package/components/input/epoch/date/.npmignore +2 -0
  338. package/components/input/epoch/date/bundles/index.umd.js +515 -0
  339. package/components/input/epoch/date/fesm2022/index.mjs +505 -0
  340. package/components/input/epoch/date/fesm2022/index.mjs.map +1 -0
  341. package/components/input/epoch/date/index.d.ts +64 -0
  342. package/components/input/epoch/date/package.json +18 -0
  343. package/components/input/epoch/date-time/.npmignore +2 -0
  344. package/components/input/epoch/date-time/bundles/index.umd.js +519 -0
  345. package/components/input/epoch/date-time/fesm2022/index.mjs +510 -0
  346. package/components/input/epoch/date-time/fesm2022/index.mjs.map +1 -0
  347. package/components/input/epoch/date-time/index.d.ts +112 -0
  348. package/components/input/epoch/date-time/package.json +18 -0
  349. package/components/input/epoch/date-time-picker/.npmignore +2 -0
  350. package/components/input/epoch/date-time-picker/bundles/index.umd.js +453 -0
  351. package/components/input/epoch/date-time-picker/fesm2022/index.mjs +439 -0
  352. package/components/input/epoch/date-time-picker/fesm2022/index.mjs.map +1 -0
  353. package/components/input/epoch/date-time-picker/index.d.ts +83 -0
  354. package/components/input/epoch/date-time-picker/package.json +18 -0
  355. package/components/input/epoch/picker/.npmignore +2 -0
  356. package/components/input/epoch/picker/bundles/index.umd.js +192 -0
  357. package/components/input/epoch/picker/fesm2022/index.mjs +172 -0
  358. package/components/input/epoch/picker/fesm2022/index.mjs.map +1 -0
  359. package/components/input/epoch/picker/index.d.ts +39 -0
  360. package/components/input/epoch/picker/package.json +18 -0
  361. package/components/input/epoch/time/.npmignore +2 -0
  362. package/components/input/epoch/time/bundles/index.umd.js +401 -0
  363. package/components/input/epoch/time/fesm2022/index.mjs +391 -0
  364. package/components/input/epoch/time/fesm2022/index.mjs.map +1 -0
  365. package/components/input/epoch/time/index.d.ts +108 -0
  366. package/components/input/epoch/time/package.json +18 -0
  367. package/components/input/file-upload/.npmignore +2 -0
  368. package/components/input/file-upload/bundles/index.umd.js +485 -0
  369. package/components/input/file-upload/fesm2022/index.mjs +471 -0
  370. package/components/input/file-upload/fesm2022/index.mjs.map +1 -0
  371. package/components/input/file-upload/index.d.ts +109 -0
  372. package/components/input/file-upload/package.json +18 -0
  373. package/components/input/number/.npmignore +2 -0
  374. package/components/input/number/bundles/index.umd.js +109 -0
  375. package/components/input/number/fesm2022/index.mjs +95 -0
  376. package/components/input/number/fesm2022/index.mjs.map +1 -0
  377. package/components/input/number/index.d.ts +29 -0
  378. package/components/input/number/package.json +18 -0
  379. package/components/input/radioset/.npmignore +2 -0
  380. package/components/input/radioset/bundles/index.umd.js +164 -0
  381. package/components/input/radioset/fesm2022/index.mjs +151 -0
  382. package/components/input/radioset/fesm2022/index.mjs.map +1 -0
  383. package/components/input/radioset/index.d.ts +26 -0
  384. package/components/input/radioset/package.json +18 -0
  385. package/components/input/rating/.npmignore +2 -0
  386. package/components/input/rating/bundles/index.umd.js +276 -0
  387. package/components/input/rating/fesm2022/index.mjs +263 -0
  388. package/components/input/rating/fesm2022/index.mjs.map +1 -0
  389. package/components/input/rating/index.d.ts +53 -0
  390. package/components/input/rating/package.json +18 -0
  391. package/components/input/select/.npmignore +2 -0
  392. package/components/input/select/bundles/index.umd.js +225 -0
  393. package/components/input/select/fesm2022/index.mjs +211 -0
  394. package/components/input/select/fesm2022/index.mjs.map +1 -0
  395. package/components/input/select/index.d.ts +39 -0
  396. package/components/input/select/package.json +18 -0
  397. package/components/input/slider/.npmignore +2 -0
  398. package/components/input/slider/bundles/index.umd.js +205 -0
  399. package/components/input/slider/fesm2022/index.mjs +191 -0
  400. package/components/input/slider/fesm2022/index.mjs.map +1 -0
  401. package/components/input/slider/index.d.ts +44 -0
  402. package/components/input/slider/package.json +18 -0
  403. package/components/input/switch/.npmignore +2 -0
  404. package/components/input/switch/bundles/index.umd.js +227 -0
  405. package/components/input/switch/fesm2022/index.mjs +214 -0
  406. package/components/input/switch/fesm2022/index.mjs.map +1 -0
  407. package/components/input/switch/index.d.ts +35 -0
  408. package/components/input/switch/package.json +18 -0
  409. package/components/input/text/.npmignore +2 -0
  410. package/components/input/text/bundles/index.umd.js +1132 -0
  411. package/components/input/text/fesm2022/index.mjs +1116 -0
  412. package/components/input/text/fesm2022/index.mjs.map +1 -0
  413. package/components/input/text/index.d.ts +318 -0
  414. package/components/input/text/package.json +18 -0
  415. package/components/input/textarea/.npmignore +2 -0
  416. package/components/input/textarea/bundles/index.umd.js +108 -0
  417. package/components/input/textarea/fesm2022/index.mjs +94 -0
  418. package/components/input/textarea/fesm2022/index.mjs.map +1 -0
  419. package/components/input/textarea/index.d.ts +33 -0
  420. package/components/input/textarea/package.json +18 -0
  421. package/components/navigation/breadcrumb/.npmignore +2 -0
  422. package/components/navigation/breadcrumb/bundles/index.umd.js +138 -0
  423. package/components/navigation/breadcrumb/fesm2022/index.mjs +121 -0
  424. package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -0
  425. package/components/navigation/breadcrumb/index.d.ts +28 -0
  426. package/components/navigation/breadcrumb/package.json +18 -0
  427. package/components/navigation/menu/.npmignore +2 -0
  428. package/components/navigation/menu/bundles/index.umd.js +948 -0
  429. package/components/navigation/menu/fesm2022/index.mjs +930 -0
  430. package/components/navigation/menu/fesm2022/index.mjs.map +1 -0
  431. package/components/navigation/menu/index.d.ts +190 -0
  432. package/components/navigation/menu/package.json +18 -0
  433. package/components/navigation/navbar/.npmignore +2 -0
  434. package/components/navigation/navbar/bundles/index.umd.js +87 -0
  435. package/components/navigation/navbar/fesm2022/index.mjs +70 -0
  436. package/components/navigation/navbar/fesm2022/index.mjs.map +1 -0
  437. package/components/navigation/navbar/index.d.ts +20 -0
  438. package/components/navigation/navbar/package.json +18 -0
  439. package/components/navigation/popover/.npmignore +2 -0
  440. package/components/navigation/popover/bundles/index.umd.js +527 -0
  441. package/components/navigation/popover/fesm2022/index.mjs +513 -0
  442. package/components/navigation/popover/fesm2022/index.mjs.map +1 -0
  443. package/components/navigation/popover/index.d.ts +86 -0
  444. package/components/navigation/popover/package.json +18 -0
  445. package/components/page/default/.npmignore +2 -0
  446. package/components/page/default/bundles/index.umd.js +459 -0
  447. package/components/page/default/fesm2022/index.mjs +439 -0
  448. package/components/page/default/fesm2022/index.mjs.map +1 -0
  449. package/components/page/default/index.d.ts +124 -0
  450. package/components/page/default/package.json +18 -0
  451. package/components/page/footer/.npmignore +2 -0
  452. package/components/page/footer/bundles/index.umd.js +71 -0
  453. package/components/page/footer/fesm2022/index.mjs +53 -0
  454. package/components/page/footer/fesm2022/index.mjs.map +1 -0
  455. package/components/page/footer/index.d.ts +12 -0
  456. package/components/page/footer/package.json +18 -0
  457. package/components/page/header/.npmignore +2 -0
  458. package/components/page/header/bundles/index.umd.js +67 -0
  459. package/components/page/header/fesm2022/index.mjs +49 -0
  460. package/components/page/header/fesm2022/index.mjs.map +1 -0
  461. package/components/page/header/index.d.ts +13 -0
  462. package/components/page/header/package.json +18 -0
  463. package/components/page/left-panel/.npmignore +2 -0
  464. package/components/page/left-panel/bundles/index.umd.js +415 -0
  465. package/components/page/left-panel/fesm2022/index.mjs +400 -0
  466. package/components/page/left-panel/fesm2022/index.mjs.map +1 -0
  467. package/components/page/left-panel/index.d.ts +41 -0
  468. package/components/page/left-panel/package.json +18 -0
  469. package/components/page/right-panel/.npmignore +2 -0
  470. package/components/page/right-panel/bundles/index.umd.js +86 -0
  471. package/components/page/right-panel/fesm2022/index.mjs +69 -0
  472. package/components/page/right-panel/fesm2022/index.mjs.map +1 -0
  473. package/components/page/right-panel/index.d.ts +13 -0
  474. package/components/page/right-panel/package.json +18 -0
  475. package/components/page/top-nav/.npmignore +2 -0
  476. package/components/page/top-nav/bundles/index.umd.js +68 -0
  477. package/components/page/top-nav/fesm2022/index.mjs +50 -0
  478. package/components/page/top-nav/fesm2022/index.mjs.map +1 -0
  479. package/components/page/top-nav/index.d.ts +12 -0
  480. package/components/page/top-nav/package.json +18 -0
  481. package/components/prefab/.npmignore +2 -0
  482. package/components/prefab/bundles/index.umd.js +176 -0
  483. package/components/prefab/fesm2022/index.mjs +159 -0
  484. package/components/prefab/fesm2022/index.mjs.map +1 -0
  485. package/components/prefab/index.d.ts +33 -0
  486. package/components/prefab/package.json +18 -0
  487. package/core/.npmignore +2 -0
  488. package/core/bundles/index.umd.js +5627 -0
  489. package/core/fesm2022/index.mjs +5475 -0
  490. package/core/fesm2022/index.mjs.map +1 -0
  491. package/core/index.d.ts +2143 -0
  492. package/core/package.json +24 -0
  493. package/http/.npmignore +2 -0
  494. package/http/bundles/index.umd.js +421 -0
  495. package/http/fesm2022/index.mjs +405 -0
  496. package/http/fesm2022/index.mjs.map +1 -0
  497. package/http/index.d.ts +120 -0
  498. package/http/package.json +23 -0
  499. package/locales/angular/af-na.js +17 -0
  500. package/locales/angular/af.js +17 -0
  501. package/locales/angular/agq.js +15 -0
  502. package/locales/angular/ak.js +17 -0
  503. package/locales/angular/am.js +17 -0
  504. package/locales/angular/ar-ae.js +25 -0
  505. package/locales/angular/ar-bh.js +25 -0
  506. package/locales/angular/ar-dj.js +25 -0
  507. package/locales/angular/ar-dz.js +25 -0
  508. package/locales/angular/ar-eg.js +25 -0
  509. package/locales/angular/ar-eh.js +25 -0
  510. package/locales/angular/ar-er.js +25 -0
  511. package/locales/angular/ar-il.js +25 -0
  512. package/locales/angular/ar-iq.js +25 -0
  513. package/locales/angular/ar-jo.js +25 -0
  514. package/locales/angular/ar-km.js +25 -0
  515. package/locales/angular/ar-kw.js +25 -0
  516. package/locales/angular/ar-lb.js +25 -0
  517. package/locales/angular/ar-ly.js +25 -0
  518. package/locales/angular/ar-ma.js +25 -0
  519. package/locales/angular/ar-mr.js +25 -0
  520. package/locales/angular/ar-om.js +25 -0
  521. package/locales/angular/ar-ps.js +25 -0
  522. package/locales/angular/ar-qa.js +25 -0
  523. package/locales/angular/ar-sa.js +25 -0
  524. package/locales/angular/ar-sd.js +25 -0
  525. package/locales/angular/ar-so.js +25 -0
  526. package/locales/angular/ar-ss.js +25 -0
  527. package/locales/angular/ar-sy.js +25 -0
  528. package/locales/angular/ar-td.js +25 -0
  529. package/locales/angular/ar-tn.js +25 -0
  530. package/locales/angular/ar-ye.js +25 -0
  531. package/locales/angular/ar.js +25 -0
  532. package/locales/angular/as.js +17 -0
  533. package/locales/angular/asa.js +17 -0
  534. package/locales/angular/ast.js +17 -0
  535. package/locales/angular/az-cyrl.js +15 -0
  536. package/locales/angular/az-latn.js +17 -0
  537. package/locales/angular/az.js +17 -0
  538. package/locales/angular/bas.js +15 -0
  539. package/locales/angular/be-tarask.js +21 -0
  540. package/locales/angular/be.js +21 -0
  541. package/locales/angular/bem.js +17 -0
  542. package/locales/angular/bez.js +17 -0
  543. package/locales/angular/bg.js +17 -0
  544. package/locales/angular/bm.js +15 -0
  545. package/locales/angular/bn-in.js +17 -0
  546. package/locales/angular/bn.js +17 -0
  547. package/locales/angular/bo-in.js +15 -0
  548. package/locales/angular/bo.js +15 -0
  549. package/locales/angular/br.js +23 -0
  550. package/locales/angular/brx.js +17 -0
  551. package/locales/angular/bs-cyrl.js +15 -0
  552. package/locales/angular/bs-latn.js +19 -0
  553. package/locales/angular/bs.js +19 -0
  554. package/locales/angular/ca-ad.js +17 -0
  555. package/locales/angular/ca-es-valencia.js +17 -0
  556. package/locales/angular/ca-fr.js +17 -0
  557. package/locales/angular/ca-it.js +17 -0
  558. package/locales/angular/ca.js +17 -0
  559. package/locales/angular/ccp-in.js +15 -0
  560. package/locales/angular/ccp.js +15 -0
  561. package/locales/angular/ce.js +17 -0
  562. package/locales/angular/ceb.js +17 -0
  563. package/locales/angular/cgg.js +17 -0
  564. package/locales/angular/chr.js +17 -0
  565. package/locales/angular/ckb-ir.js +17 -0
  566. package/locales/angular/ckb.js +17 -0
  567. package/locales/angular/cs.js +21 -0
  568. package/locales/angular/cy.js +25 -0
  569. package/locales/angular/da-gl.js +17 -0
  570. package/locales/angular/da.js +17 -0
  571. package/locales/angular/dav.js +15 -0
  572. package/locales/angular/de-at.js +17 -0
  573. package/locales/angular/de-be.js +17 -0
  574. package/locales/angular/de-ch.js +17 -0
  575. package/locales/angular/de-it.js +17 -0
  576. package/locales/angular/de-li.js +17 -0
  577. package/locales/angular/de-lu.js +17 -0
  578. package/locales/angular/de.js +17 -0
  579. package/locales/angular/dje.js +15 -0
  580. package/locales/angular/doi.js +17 -0
  581. package/locales/angular/dsb.js +21 -0
  582. package/locales/angular/dua.js +15 -0
  583. package/locales/angular/dyo.js +15 -0
  584. package/locales/angular/dz.js +15 -0
  585. package/locales/angular/ebu.js +15 -0
  586. package/locales/angular/ee-tg.js +17 -0
  587. package/locales/angular/ee.js +17 -0
  588. package/locales/angular/el-cy.js +17 -0
  589. package/locales/angular/el.js +17 -0
  590. package/locales/angular/en-001.js +17 -0
  591. package/locales/angular/en-150.js +17 -0
  592. package/locales/angular/en-ae.js +17 -0
  593. package/locales/angular/en-ag.js +17 -0
  594. package/locales/angular/en-ai.js +17 -0
  595. package/locales/angular/en-as.js +17 -0
  596. package/locales/angular/en-at.js +17 -0
  597. package/locales/angular/en-au.js +17 -0
  598. package/locales/angular/en-bb.js +17 -0
  599. package/locales/angular/en-be.js +17 -0
  600. package/locales/angular/en-bi.js +17 -0
  601. package/locales/angular/en-bm.js +17 -0
  602. package/locales/angular/en-bs.js +17 -0
  603. package/locales/angular/en-bw.js +17 -0
  604. package/locales/angular/en-bz.js +17 -0
  605. package/locales/angular/en-ca.js +17 -0
  606. package/locales/angular/en-cc.js +17 -0
  607. package/locales/angular/en-ch.js +17 -0
  608. package/locales/angular/en-ck.js +17 -0
  609. package/locales/angular/en-cm.js +17 -0
  610. package/locales/angular/en-cx.js +17 -0
  611. package/locales/angular/en-cy.js +17 -0
  612. package/locales/angular/en-de.js +17 -0
  613. package/locales/angular/en-dg.js +17 -0
  614. package/locales/angular/en-dk.js +17 -0
  615. package/locales/angular/en-dm.js +17 -0
  616. package/locales/angular/en-er.js +17 -0
  617. package/locales/angular/en-fi.js +17 -0
  618. package/locales/angular/en-fj.js +17 -0
  619. package/locales/angular/en-fk.js +17 -0
  620. package/locales/angular/en-fm.js +17 -0
  621. package/locales/angular/en-gb.js +17 -0
  622. package/locales/angular/en-gd.js +17 -0
  623. package/locales/angular/en-gg.js +17 -0
  624. package/locales/angular/en-gh.js +17 -0
  625. package/locales/angular/en-gi.js +17 -0
  626. package/locales/angular/en-gm.js +17 -0
  627. package/locales/angular/en-gu.js +17 -0
  628. package/locales/angular/en-gy.js +17 -0
  629. package/locales/angular/en-hk.js +17 -0
  630. package/locales/angular/en-ie.js +17 -0
  631. package/locales/angular/en-il.js +17 -0
  632. package/locales/angular/en-im.js +17 -0
  633. package/locales/angular/en-in.js +17 -0
  634. package/locales/angular/en-io.js +17 -0
  635. package/locales/angular/en-je.js +17 -0
  636. package/locales/angular/en-jm.js +17 -0
  637. package/locales/angular/en-ke.js +17 -0
  638. package/locales/angular/en-ki.js +17 -0
  639. package/locales/angular/en-kn.js +17 -0
  640. package/locales/angular/en-ky.js +17 -0
  641. package/locales/angular/en-lc.js +17 -0
  642. package/locales/angular/en-lr.js +17 -0
  643. package/locales/angular/en-ls.js +17 -0
  644. package/locales/angular/en-mg.js +17 -0
  645. package/locales/angular/en-mh.js +17 -0
  646. package/locales/angular/en-mo.js +17 -0
  647. package/locales/angular/en-mp.js +17 -0
  648. package/locales/angular/en-ms.js +17 -0
  649. package/locales/angular/en-mt.js +17 -0
  650. package/locales/angular/en-mu.js +17 -0
  651. package/locales/angular/en-mv.js +17 -0
  652. package/locales/angular/en-mw.js +17 -0
  653. package/locales/angular/en-my.js +17 -0
  654. package/locales/angular/en-na.js +17 -0
  655. package/locales/angular/en-nf.js +17 -0
  656. package/locales/angular/en-ng.js +17 -0
  657. package/locales/angular/en-nl.js +17 -0
  658. package/locales/angular/en-nr.js +17 -0
  659. package/locales/angular/en-nu.js +17 -0
  660. package/locales/angular/en-nz.js +17 -0
  661. package/locales/angular/en-pg.js +17 -0
  662. package/locales/angular/en-ph.js +17 -0
  663. package/locales/angular/en-pk.js +17 -0
  664. package/locales/angular/en-pn.js +17 -0
  665. package/locales/angular/en-pr.js +17 -0
  666. package/locales/angular/en-pw.js +17 -0
  667. package/locales/angular/en-rw.js +17 -0
  668. package/locales/angular/en-sb.js +17 -0
  669. package/locales/angular/en-sc.js +17 -0
  670. package/locales/angular/en-sd.js +17 -0
  671. package/locales/angular/en-se.js +17 -0
  672. package/locales/angular/en-sg.js +17 -0
  673. package/locales/angular/en-sh.js +17 -0
  674. package/locales/angular/en-si.js +17 -0
  675. package/locales/angular/en-sl.js +17 -0
  676. package/locales/angular/en-ss.js +17 -0
  677. package/locales/angular/en-sx.js +17 -0
  678. package/locales/angular/en-sz.js +17 -0
  679. package/locales/angular/en-tc.js +17 -0
  680. package/locales/angular/en-tk.js +17 -0
  681. package/locales/angular/en-to.js +17 -0
  682. package/locales/angular/en-tt.js +17 -0
  683. package/locales/angular/en-tv.js +17 -0
  684. package/locales/angular/en-tz.js +17 -0
  685. package/locales/angular/en-ug.js +17 -0
  686. package/locales/angular/en-um.js +17 -0
  687. package/locales/angular/en-vc.js +17 -0
  688. package/locales/angular/en-vg.js +17 -0
  689. package/locales/angular/en-vi.js +17 -0
  690. package/locales/angular/en-vu.js +17 -0
  691. package/locales/angular/en-ws.js +17 -0
  692. package/locales/angular/en-za.js +17 -0
  693. package/locales/angular/en-zm.js +17 -0
  694. package/locales/angular/en-zw.js +17 -0
  695. package/locales/angular/en.js +17 -0
  696. package/locales/angular/eo.js +17 -0
  697. package/locales/angular/es-419.js +19 -0
  698. package/locales/angular/es-ar.js +19 -0
  699. package/locales/angular/es-bo.js +19 -0
  700. package/locales/angular/es-br.js +19 -0
  701. package/locales/angular/es-bz.js +19 -0
  702. package/locales/angular/es-cl.js +19 -0
  703. package/locales/angular/es-co.js +19 -0
  704. package/locales/angular/es-cr.js +19 -0
  705. package/locales/angular/es-cu.js +19 -0
  706. package/locales/angular/es-do.js +19 -0
  707. package/locales/angular/es-ea.js +19 -0
  708. package/locales/angular/es-ec.js +19 -0
  709. package/locales/angular/es-gq.js +19 -0
  710. package/locales/angular/es-gt.js +19 -0
  711. package/locales/angular/es-hn.js +19 -0
  712. package/locales/angular/es-ic.js +19 -0
  713. package/locales/angular/es-mx.js +19 -0
  714. package/locales/angular/es-ni.js +19 -0
  715. package/locales/angular/es-pa.js +19 -0
  716. package/locales/angular/es-pe.js +19 -0
  717. package/locales/angular/es-ph.js +19 -0
  718. package/locales/angular/es-pr.js +19 -0
  719. package/locales/angular/es-py.js +19 -0
  720. package/locales/angular/es-sv.js +19 -0
  721. package/locales/angular/es-us.js +19 -0
  722. package/locales/angular/es-uy.js +19 -0
  723. package/locales/angular/es-ve.js +19 -0
  724. package/locales/angular/es.js +19 -0
  725. package/locales/angular/et.js +17 -0
  726. package/locales/angular/eu.js +17 -0
  727. package/locales/angular/ewo.js +15 -0
  728. package/locales/angular/fa-af.js +17 -0
  729. package/locales/angular/fa.js +17 -0
  730. package/locales/angular/ff-adlm-bf.js +15 -0
  731. package/locales/angular/ff-adlm-cm.js +15 -0
  732. package/locales/angular/ff-adlm-gh.js +15 -0
  733. package/locales/angular/ff-adlm-gm.js +15 -0
  734. package/locales/angular/ff-adlm-gw.js +15 -0
  735. package/locales/angular/ff-adlm-lr.js +15 -0
  736. package/locales/angular/ff-adlm-mr.js +15 -0
  737. package/locales/angular/ff-adlm-ne.js +15 -0
  738. package/locales/angular/ff-adlm-ng.js +15 -0
  739. package/locales/angular/ff-adlm-sl.js +15 -0
  740. package/locales/angular/ff-adlm-sn.js +15 -0
  741. package/locales/angular/ff-adlm.js +15 -0
  742. package/locales/angular/ff-cm.js +64 -0
  743. package/locales/angular/ff-gn.js +64 -0
  744. package/locales/angular/ff-latn-bf.js +17 -0
  745. package/locales/angular/ff-latn-cm.js +17 -0
  746. package/locales/angular/ff-latn-gh.js +17 -0
  747. package/locales/angular/ff-latn-gm.js +17 -0
  748. package/locales/angular/ff-latn-gn.js +17 -0
  749. package/locales/angular/ff-latn-gw.js +17 -0
  750. package/locales/angular/ff-latn-lr.js +17 -0
  751. package/locales/angular/ff-latn-mr.js +17 -0
  752. package/locales/angular/ff-latn-ne.js +17 -0
  753. package/locales/angular/ff-latn-ng.js +17 -0
  754. package/locales/angular/ff-latn-sl.js +17 -0
  755. package/locales/angular/ff-latn.js +17 -0
  756. package/locales/angular/ff-mr.js +64 -0
  757. package/locales/angular/ff.js +17 -0
  758. package/locales/angular/fi.js +17 -0
  759. package/locales/angular/fil.js +17 -0
  760. package/locales/angular/fo-dk.js +17 -0
  761. package/locales/angular/fo.js +17 -0
  762. package/locales/angular/fr-be.js +19 -0
  763. package/locales/angular/fr-bf.js +19 -0
  764. package/locales/angular/fr-bi.js +19 -0
  765. package/locales/angular/fr-bj.js +19 -0
  766. package/locales/angular/fr-bl.js +19 -0
  767. package/locales/angular/fr-ca.js +19 -0
  768. package/locales/angular/fr-cd.js +19 -0
  769. package/locales/angular/fr-cf.js +19 -0
  770. package/locales/angular/fr-cg.js +19 -0
  771. package/locales/angular/fr-ch.js +19 -0
  772. package/locales/angular/fr-ci.js +19 -0
  773. package/locales/angular/fr-cm.js +19 -0
  774. package/locales/angular/fr-dj.js +19 -0
  775. package/locales/angular/fr-dz.js +19 -0
  776. package/locales/angular/fr-ga.js +19 -0
  777. package/locales/angular/fr-gf.js +19 -0
  778. package/locales/angular/fr-gn.js +19 -0
  779. package/locales/angular/fr-gp.js +19 -0
  780. package/locales/angular/fr-gq.js +19 -0
  781. package/locales/angular/fr-ht.js +19 -0
  782. package/locales/angular/fr-km.js +19 -0
  783. package/locales/angular/fr-lu.js +19 -0
  784. package/locales/angular/fr-ma.js +19 -0
  785. package/locales/angular/fr-mc.js +19 -0
  786. package/locales/angular/fr-mf.js +19 -0
  787. package/locales/angular/fr-mg.js +19 -0
  788. package/locales/angular/fr-ml.js +19 -0
  789. package/locales/angular/fr-mq.js +19 -0
  790. package/locales/angular/fr-mr.js +19 -0
  791. package/locales/angular/fr-mu.js +19 -0
  792. package/locales/angular/fr-nc.js +19 -0
  793. package/locales/angular/fr-ne.js +19 -0
  794. package/locales/angular/fr-pf.js +19 -0
  795. package/locales/angular/fr-pm.js +19 -0
  796. package/locales/angular/fr-re.js +19 -0
  797. package/locales/angular/fr-rw.js +19 -0
  798. package/locales/angular/fr-sc.js +19 -0
  799. package/locales/angular/fr-sn.js +19 -0
  800. package/locales/angular/fr-sy.js +19 -0
  801. package/locales/angular/fr-td.js +19 -0
  802. package/locales/angular/fr-tg.js +19 -0
  803. package/locales/angular/fr-tn.js +19 -0
  804. package/locales/angular/fr-vu.js +19 -0
  805. package/locales/angular/fr-wf.js +19 -0
  806. package/locales/angular/fr-yt.js +19 -0
  807. package/locales/angular/fr.js +19 -0
  808. package/locales/angular/fur.js +17 -0
  809. package/locales/angular/fy.js +17 -0
  810. package/locales/angular/ga-gb.js +23 -0
  811. package/locales/angular/ga.js +23 -0
  812. package/locales/angular/gd.js +21 -0
  813. package/locales/angular/gl.js +17 -0
  814. package/locales/angular/global/af-na.js +24 -0
  815. package/locales/angular/global/af.js +24 -0
  816. package/locales/angular/global/agq.js +22 -0
  817. package/locales/angular/global/ak.js +24 -0
  818. package/locales/angular/global/am.js +24 -0
  819. package/locales/angular/global/ar-ae.js +32 -0
  820. package/locales/angular/global/ar-bh.js +32 -0
  821. package/locales/angular/global/ar-dj.js +32 -0
  822. package/locales/angular/global/ar-dz.js +32 -0
  823. package/locales/angular/global/ar-eg.js +32 -0
  824. package/locales/angular/global/ar-eh.js +32 -0
  825. package/locales/angular/global/ar-er.js +32 -0
  826. package/locales/angular/global/ar-il.js +32 -0
  827. package/locales/angular/global/ar-iq.js +32 -0
  828. package/locales/angular/global/ar-jo.js +32 -0
  829. package/locales/angular/global/ar-km.js +32 -0
  830. package/locales/angular/global/ar-kw.js +32 -0
  831. package/locales/angular/global/ar-lb.js +32 -0
  832. package/locales/angular/global/ar-ly.js +32 -0
  833. package/locales/angular/global/ar-ma.js +32 -0
  834. package/locales/angular/global/ar-mr.js +32 -0
  835. package/locales/angular/global/ar-om.js +32 -0
  836. package/locales/angular/global/ar-ps.js +32 -0
  837. package/locales/angular/global/ar-qa.js +32 -0
  838. package/locales/angular/global/ar-sa.js +32 -0
  839. package/locales/angular/global/ar-sd.js +32 -0
  840. package/locales/angular/global/ar-so.js +32 -0
  841. package/locales/angular/global/ar-ss.js +32 -0
  842. package/locales/angular/global/ar-sy.js +32 -0
  843. package/locales/angular/global/ar-td.js +32 -0
  844. package/locales/angular/global/ar-tn.js +32 -0
  845. package/locales/angular/global/ar-ye.js +32 -0
  846. package/locales/angular/global/ar.js +32 -0
  847. package/locales/angular/global/as.js +24 -0
  848. package/locales/angular/global/asa.js +24 -0
  849. package/locales/angular/global/ast.js +24 -0
  850. package/locales/angular/global/az-cyrl.js +22 -0
  851. package/locales/angular/global/az-latn.js +24 -0
  852. package/locales/angular/global/az.js +24 -0
  853. package/locales/angular/global/bas.js +22 -0
  854. package/locales/angular/global/be-tarask.js +28 -0
  855. package/locales/angular/global/be.js +28 -0
  856. package/locales/angular/global/bem.js +24 -0
  857. package/locales/angular/global/bez.js +24 -0
  858. package/locales/angular/global/bg.js +24 -0
  859. package/locales/angular/global/bm.js +22 -0
  860. package/locales/angular/global/bn-in.js +24 -0
  861. package/locales/angular/global/bn.js +24 -0
  862. package/locales/angular/global/bo-in.js +22 -0
  863. package/locales/angular/global/bo.js +22 -0
  864. package/locales/angular/global/br.js +30 -0
  865. package/locales/angular/global/brx.js +24 -0
  866. package/locales/angular/global/bs-cyrl.js +22 -0
  867. package/locales/angular/global/bs-latn.js +26 -0
  868. package/locales/angular/global/bs.js +26 -0
  869. package/locales/angular/global/ca-ad.js +24 -0
  870. package/locales/angular/global/ca-es-valencia.js +24 -0
  871. package/locales/angular/global/ca-fr.js +24 -0
  872. package/locales/angular/global/ca-it.js +24 -0
  873. package/locales/angular/global/ca.js +24 -0
  874. package/locales/angular/global/ccp-in.js +22 -0
  875. package/locales/angular/global/ccp.js +22 -0
  876. package/locales/angular/global/ce.js +24 -0
  877. package/locales/angular/global/ceb.js +24 -0
  878. package/locales/angular/global/cgg.js +24 -0
  879. package/locales/angular/global/chr.js +24 -0
  880. package/locales/angular/global/ckb-ir.js +24 -0
  881. package/locales/angular/global/ckb.js +24 -0
  882. package/locales/angular/global/cs.js +28 -0
  883. package/locales/angular/global/cy.js +32 -0
  884. package/locales/angular/global/da-gl.js +24 -0
  885. package/locales/angular/global/da.js +24 -0
  886. package/locales/angular/global/dav.js +22 -0
  887. package/locales/angular/global/de-at.js +24 -0
  888. package/locales/angular/global/de-be.js +24 -0
  889. package/locales/angular/global/de-ch.js +24 -0
  890. package/locales/angular/global/de-it.js +24 -0
  891. package/locales/angular/global/de-li.js +24 -0
  892. package/locales/angular/global/de-lu.js +24 -0
  893. package/locales/angular/global/de.js +24 -0
  894. package/locales/angular/global/dje.js +22 -0
  895. package/locales/angular/global/doi.js +24 -0
  896. package/locales/angular/global/dsb.js +28 -0
  897. package/locales/angular/global/dua.js +22 -0
  898. package/locales/angular/global/dyo.js +22 -0
  899. package/locales/angular/global/dz.js +22 -0
  900. package/locales/angular/global/ebu.js +22 -0
  901. package/locales/angular/global/ee-tg.js +24 -0
  902. package/locales/angular/global/ee.js +24 -0
  903. package/locales/angular/global/el-cy.js +24 -0
  904. package/locales/angular/global/el.js +24 -0
  905. package/locales/angular/global/en-001.js +24 -0
  906. package/locales/angular/global/en-150.js +24 -0
  907. package/locales/angular/global/en-ae.js +24 -0
  908. package/locales/angular/global/en-ag.js +24 -0
  909. package/locales/angular/global/en-ai.js +24 -0
  910. package/locales/angular/global/en-as.js +24 -0
  911. package/locales/angular/global/en-at.js +24 -0
  912. package/locales/angular/global/en-au.js +24 -0
  913. package/locales/angular/global/en-bb.js +24 -0
  914. package/locales/angular/global/en-be.js +24 -0
  915. package/locales/angular/global/en-bi.js +24 -0
  916. package/locales/angular/global/en-bm.js +24 -0
  917. package/locales/angular/global/en-bs.js +24 -0
  918. package/locales/angular/global/en-bw.js +24 -0
  919. package/locales/angular/global/en-bz.js +24 -0
  920. package/locales/angular/global/en-ca.js +24 -0
  921. package/locales/angular/global/en-cc.js +24 -0
  922. package/locales/angular/global/en-ch.js +24 -0
  923. package/locales/angular/global/en-ck.js +24 -0
  924. package/locales/angular/global/en-cm.js +24 -0
  925. package/locales/angular/global/en-cx.js +24 -0
  926. package/locales/angular/global/en-cy.js +24 -0
  927. package/locales/angular/global/en-de.js +24 -0
  928. package/locales/angular/global/en-dg.js +24 -0
  929. package/locales/angular/global/en-dk.js +24 -0
  930. package/locales/angular/global/en-dm.js +24 -0
  931. package/locales/angular/global/en-er.js +24 -0
  932. package/locales/angular/global/en-fi.js +24 -0
  933. package/locales/angular/global/en-fj.js +24 -0
  934. package/locales/angular/global/en-fk.js +24 -0
  935. package/locales/angular/global/en-fm.js +24 -0
  936. package/locales/angular/global/en-gb.js +24 -0
  937. package/locales/angular/global/en-gd.js +24 -0
  938. package/locales/angular/global/en-gg.js +24 -0
  939. package/locales/angular/global/en-gh.js +24 -0
  940. package/locales/angular/global/en-gi.js +24 -0
  941. package/locales/angular/global/en-gm.js +24 -0
  942. package/locales/angular/global/en-gu.js +24 -0
  943. package/locales/angular/global/en-gy.js +24 -0
  944. package/locales/angular/global/en-hk.js +24 -0
  945. package/locales/angular/global/en-ie.js +24 -0
  946. package/locales/angular/global/en-il.js +24 -0
  947. package/locales/angular/global/en-im.js +24 -0
  948. package/locales/angular/global/en-in.js +24 -0
  949. package/locales/angular/global/en-io.js +24 -0
  950. package/locales/angular/global/en-je.js +24 -0
  951. package/locales/angular/global/en-jm.js +24 -0
  952. package/locales/angular/global/en-ke.js +24 -0
  953. package/locales/angular/global/en-ki.js +24 -0
  954. package/locales/angular/global/en-kn.js +24 -0
  955. package/locales/angular/global/en-ky.js +24 -0
  956. package/locales/angular/global/en-lc.js +24 -0
  957. package/locales/angular/global/en-lr.js +24 -0
  958. package/locales/angular/global/en-ls.js +24 -0
  959. package/locales/angular/global/en-mg.js +24 -0
  960. package/locales/angular/global/en-mh.js +24 -0
  961. package/locales/angular/global/en-mo.js +24 -0
  962. package/locales/angular/global/en-mp.js +24 -0
  963. package/locales/angular/global/en-ms.js +24 -0
  964. package/locales/angular/global/en-mt.js +24 -0
  965. package/locales/angular/global/en-mu.js +24 -0
  966. package/locales/angular/global/en-mv.js +24 -0
  967. package/locales/angular/global/en-mw.js +24 -0
  968. package/locales/angular/global/en-my.js +24 -0
  969. package/locales/angular/global/en-na.js +24 -0
  970. package/locales/angular/global/en-nf.js +24 -0
  971. package/locales/angular/global/en-ng.js +24 -0
  972. package/locales/angular/global/en-nl.js +24 -0
  973. package/locales/angular/global/en-nr.js +24 -0
  974. package/locales/angular/global/en-nu.js +24 -0
  975. package/locales/angular/global/en-nz.js +24 -0
  976. package/locales/angular/global/en-pg.js +24 -0
  977. package/locales/angular/global/en-ph.js +24 -0
  978. package/locales/angular/global/en-pk.js +24 -0
  979. package/locales/angular/global/en-pn.js +24 -0
  980. package/locales/angular/global/en-pr.js +24 -0
  981. package/locales/angular/global/en-pw.js +24 -0
  982. package/locales/angular/global/en-rw.js +24 -0
  983. package/locales/angular/global/en-sb.js +24 -0
  984. package/locales/angular/global/en-sc.js +24 -0
  985. package/locales/angular/global/en-sd.js +24 -0
  986. package/locales/angular/global/en-se.js +24 -0
  987. package/locales/angular/global/en-sg.js +24 -0
  988. package/locales/angular/global/en-sh.js +24 -0
  989. package/locales/angular/global/en-si.js +24 -0
  990. package/locales/angular/global/en-sl.js +24 -0
  991. package/locales/angular/global/en-ss.js +24 -0
  992. package/locales/angular/global/en-sx.js +24 -0
  993. package/locales/angular/global/en-sz.js +24 -0
  994. package/locales/angular/global/en-tc.js +24 -0
  995. package/locales/angular/global/en-tk.js +24 -0
  996. package/locales/angular/global/en-to.js +24 -0
  997. package/locales/angular/global/en-tt.js +24 -0
  998. package/locales/angular/global/en-tv.js +24 -0
  999. package/locales/angular/global/en-tz.js +24 -0
  1000. package/locales/angular/global/en-ug.js +24 -0
  1001. package/locales/angular/global/en-um.js +24 -0
  1002. package/locales/angular/global/en-vc.js +24 -0
  1003. package/locales/angular/global/en-vg.js +24 -0
  1004. package/locales/angular/global/en-vi.js +24 -0
  1005. package/locales/angular/global/en-vu.js +24 -0
  1006. package/locales/angular/global/en-ws.js +24 -0
  1007. package/locales/angular/global/en-za.js +24 -0
  1008. package/locales/angular/global/en-zm.js +24 -0
  1009. package/locales/angular/global/en-zw.js +24 -0
  1010. package/locales/angular/global/en.js +24 -0
  1011. package/locales/angular/global/eo.js +24 -0
  1012. package/locales/angular/global/es-419.js +26 -0
  1013. package/locales/angular/global/es-ar.js +26 -0
  1014. package/locales/angular/global/es-bo.js +26 -0
  1015. package/locales/angular/global/es-br.js +26 -0
  1016. package/locales/angular/global/es-bz.js +26 -0
  1017. package/locales/angular/global/es-cl.js +26 -0
  1018. package/locales/angular/global/es-co.js +26 -0
  1019. package/locales/angular/global/es-cr.js +26 -0
  1020. package/locales/angular/global/es-cu.js +26 -0
  1021. package/locales/angular/global/es-do.js +26 -0
  1022. package/locales/angular/global/es-ea.js +26 -0
  1023. package/locales/angular/global/es-ec.js +26 -0
  1024. package/locales/angular/global/es-gq.js +26 -0
  1025. package/locales/angular/global/es-gt.js +26 -0
  1026. package/locales/angular/global/es-hn.js +26 -0
  1027. package/locales/angular/global/es-ic.js +26 -0
  1028. package/locales/angular/global/es-mx.js +26 -0
  1029. package/locales/angular/global/es-ni.js +26 -0
  1030. package/locales/angular/global/es-pa.js +26 -0
  1031. package/locales/angular/global/es-pe.js +26 -0
  1032. package/locales/angular/global/es-ph.js +26 -0
  1033. package/locales/angular/global/es-pr.js +26 -0
  1034. package/locales/angular/global/es-py.js +26 -0
  1035. package/locales/angular/global/es-sv.js +26 -0
  1036. package/locales/angular/global/es-us.js +26 -0
  1037. package/locales/angular/global/es-uy.js +26 -0
  1038. package/locales/angular/global/es-ve.js +26 -0
  1039. package/locales/angular/global/es.js +26 -0
  1040. package/locales/angular/global/et.js +24 -0
  1041. package/locales/angular/global/eu.js +24 -0
  1042. package/locales/angular/global/ewo.js +22 -0
  1043. package/locales/angular/global/fa-af.js +24 -0
  1044. package/locales/angular/global/fa.js +24 -0
  1045. package/locales/angular/global/ff-adlm-bf.js +22 -0
  1046. package/locales/angular/global/ff-adlm-cm.js +22 -0
  1047. package/locales/angular/global/ff-adlm-gh.js +22 -0
  1048. package/locales/angular/global/ff-adlm-gm.js +22 -0
  1049. package/locales/angular/global/ff-adlm-gw.js +22 -0
  1050. package/locales/angular/global/ff-adlm-lr.js +22 -0
  1051. package/locales/angular/global/ff-adlm-mr.js +22 -0
  1052. package/locales/angular/global/ff-adlm-ne.js +22 -0
  1053. package/locales/angular/global/ff-adlm-ng.js +22 -0
  1054. package/locales/angular/global/ff-adlm-sl.js +22 -0
  1055. package/locales/angular/global/ff-adlm-sn.js +22 -0
  1056. package/locales/angular/global/ff-adlm.js +22 -0
  1057. package/locales/angular/global/ff-cm.js +74 -0
  1058. package/locales/angular/global/ff-gn.js +74 -0
  1059. package/locales/angular/global/ff-latn-bf.js +24 -0
  1060. package/locales/angular/global/ff-latn-cm.js +24 -0
  1061. package/locales/angular/global/ff-latn-gh.js +24 -0
  1062. package/locales/angular/global/ff-latn-gm.js +24 -0
  1063. package/locales/angular/global/ff-latn-gn.js +24 -0
  1064. package/locales/angular/global/ff-latn-gw.js +24 -0
  1065. package/locales/angular/global/ff-latn-lr.js +24 -0
  1066. package/locales/angular/global/ff-latn-mr.js +24 -0
  1067. package/locales/angular/global/ff-latn-ne.js +24 -0
  1068. package/locales/angular/global/ff-latn-ng.js +24 -0
  1069. package/locales/angular/global/ff-latn-sl.js +24 -0
  1070. package/locales/angular/global/ff-latn.js +24 -0
  1071. package/locales/angular/global/ff-mr.js +74 -0
  1072. package/locales/angular/global/ff.js +24 -0
  1073. package/locales/angular/global/fi.js +24 -0
  1074. package/locales/angular/global/fil.js +24 -0
  1075. package/locales/angular/global/fo-dk.js +24 -0
  1076. package/locales/angular/global/fo.js +24 -0
  1077. package/locales/angular/global/fr-be.js +26 -0
  1078. package/locales/angular/global/fr-bf.js +26 -0
  1079. package/locales/angular/global/fr-bi.js +26 -0
  1080. package/locales/angular/global/fr-bj.js +26 -0
  1081. package/locales/angular/global/fr-bl.js +26 -0
  1082. package/locales/angular/global/fr-ca.js +26 -0
  1083. package/locales/angular/global/fr-cd.js +26 -0
  1084. package/locales/angular/global/fr-cf.js +26 -0
  1085. package/locales/angular/global/fr-cg.js +26 -0
  1086. package/locales/angular/global/fr-ch.js +26 -0
  1087. package/locales/angular/global/fr-ci.js +26 -0
  1088. package/locales/angular/global/fr-cm.js +26 -0
  1089. package/locales/angular/global/fr-dj.js +26 -0
  1090. package/locales/angular/global/fr-dz.js +26 -0
  1091. package/locales/angular/global/fr-ga.js +26 -0
  1092. package/locales/angular/global/fr-gf.js +26 -0
  1093. package/locales/angular/global/fr-gn.js +26 -0
  1094. package/locales/angular/global/fr-gp.js +26 -0
  1095. package/locales/angular/global/fr-gq.js +26 -0
  1096. package/locales/angular/global/fr-ht.js +26 -0
  1097. package/locales/angular/global/fr-km.js +26 -0
  1098. package/locales/angular/global/fr-lu.js +26 -0
  1099. package/locales/angular/global/fr-ma.js +26 -0
  1100. package/locales/angular/global/fr-mc.js +26 -0
  1101. package/locales/angular/global/fr-mf.js +26 -0
  1102. package/locales/angular/global/fr-mg.js +26 -0
  1103. package/locales/angular/global/fr-ml.js +26 -0
  1104. package/locales/angular/global/fr-mq.js +26 -0
  1105. package/locales/angular/global/fr-mr.js +26 -0
  1106. package/locales/angular/global/fr-mu.js +26 -0
  1107. package/locales/angular/global/fr-nc.js +26 -0
  1108. package/locales/angular/global/fr-ne.js +26 -0
  1109. package/locales/angular/global/fr-pf.js +26 -0
  1110. package/locales/angular/global/fr-pm.js +26 -0
  1111. package/locales/angular/global/fr-re.js +26 -0
  1112. package/locales/angular/global/fr-rw.js +26 -0
  1113. package/locales/angular/global/fr-sc.js +26 -0
  1114. package/locales/angular/global/fr-sn.js +26 -0
  1115. package/locales/angular/global/fr-sy.js +26 -0
  1116. package/locales/angular/global/fr-td.js +26 -0
  1117. package/locales/angular/global/fr-tg.js +26 -0
  1118. package/locales/angular/global/fr-tn.js +26 -0
  1119. package/locales/angular/global/fr-vu.js +26 -0
  1120. package/locales/angular/global/fr-wf.js +26 -0
  1121. package/locales/angular/global/fr-yt.js +26 -0
  1122. package/locales/angular/global/fr.js +26 -0
  1123. package/locales/angular/global/fur.js +24 -0
  1124. package/locales/angular/global/fy.js +24 -0
  1125. package/locales/angular/global/ga-gb.js +30 -0
  1126. package/locales/angular/global/ga.js +30 -0
  1127. package/locales/angular/global/gd.js +28 -0
  1128. package/locales/angular/global/gl.js +24 -0
  1129. package/locales/angular/global/gsw-fr.js +24 -0
  1130. package/locales/angular/global/gsw-li.js +24 -0
  1131. package/locales/angular/global/gsw.js +24 -0
  1132. package/locales/angular/global/gu.js +24 -0
  1133. package/locales/angular/global/guz.js +22 -0
  1134. package/locales/angular/global/gv.js +30 -0
  1135. package/locales/angular/global/ha-gh.js +24 -0
  1136. package/locales/angular/global/ha-ne.js +24 -0
  1137. package/locales/angular/global/ha.js +24 -0
  1138. package/locales/angular/global/haw.js +24 -0
  1139. package/locales/angular/global/he.js +28 -0
  1140. package/locales/angular/global/hi-latn.js +24 -0
  1141. package/locales/angular/global/hi.js +24 -0
  1142. package/locales/angular/global/hr-ba.js +26 -0
  1143. package/locales/angular/global/hr.js +26 -0
  1144. package/locales/angular/global/hsb.js +28 -0
  1145. package/locales/angular/global/hu.js +24 -0
  1146. package/locales/angular/global/hy.js +24 -0
  1147. package/locales/angular/global/ia.js +24 -0
  1148. package/locales/angular/global/id.js +22 -0
  1149. package/locales/angular/global/ig.js +22 -0
  1150. package/locales/angular/global/ii.js +22 -0
  1151. package/locales/angular/global/is.js +24 -0
  1152. package/locales/angular/global/it-ch.js +26 -0
  1153. package/locales/angular/global/it-sm.js +26 -0
  1154. package/locales/angular/global/it-va.js +26 -0
  1155. package/locales/angular/global/it.js +26 -0
  1156. package/locales/angular/global/ja.js +22 -0
  1157. package/locales/angular/global/jgo.js +24 -0
  1158. package/locales/angular/global/jmc.js +24 -0
  1159. package/locales/angular/global/jv.js +22 -0
  1160. package/locales/angular/global/ka.js +24 -0
  1161. package/locales/angular/global/kab.js +24 -0
  1162. package/locales/angular/global/kam.js +22 -0
  1163. package/locales/angular/global/kde.js +22 -0
  1164. package/locales/angular/global/kea.js +22 -0
  1165. package/locales/angular/global/kgp.js +22 -0
  1166. package/locales/angular/global/khq.js +22 -0
  1167. package/locales/angular/global/ki.js +22 -0
  1168. package/locales/angular/global/kk.js +24 -0
  1169. package/locales/angular/global/kkj.js +24 -0
  1170. package/locales/angular/global/kl.js +24 -0
  1171. package/locales/angular/global/kln.js +22 -0
  1172. package/locales/angular/global/km.js +22 -0
  1173. package/locales/angular/global/kn.js +24 -0
  1174. package/locales/angular/global/ko-kp.js +22 -0
  1175. package/locales/angular/global/ko.js +22 -0
  1176. package/locales/angular/global/kok.js +22 -0
  1177. package/locales/angular/global/ks-arab.js +24 -0
  1178. package/locales/angular/global/ks-deva.js +22 -0
  1179. package/locales/angular/global/ks.js +24 -0
  1180. package/locales/angular/global/ksb.js +24 -0
  1181. package/locales/angular/global/ksf.js +22 -0
  1182. package/locales/angular/global/ksh.js +26 -0
  1183. package/locales/angular/global/ku.js +24 -0
  1184. package/locales/angular/global/kw.js +32 -0
  1185. package/locales/angular/global/ky.js +24 -0
  1186. package/locales/angular/global/lag.js +26 -0
  1187. package/locales/angular/global/lb.js +24 -0
  1188. package/locales/angular/global/lg.js +24 -0
  1189. package/locales/angular/global/lkt.js +22 -0
  1190. package/locales/angular/global/ln-ao.js +24 -0
  1191. package/locales/angular/global/ln-cf.js +24 -0
  1192. package/locales/angular/global/ln-cg.js +24 -0
  1193. package/locales/angular/global/ln.js +24 -0
  1194. package/locales/angular/global/lo.js +22 -0
  1195. package/locales/angular/global/lrc-iq.js +22 -0
  1196. package/locales/angular/global/lrc.js +22 -0
  1197. package/locales/angular/global/lt.js +28 -0
  1198. package/locales/angular/global/lu.js +22 -0
  1199. package/locales/angular/global/luo.js +22 -0
  1200. package/locales/angular/global/luy.js +22 -0
  1201. package/locales/angular/global/lv.js +26 -0
  1202. package/locales/angular/global/mai.js +22 -0
  1203. package/locales/angular/global/mas-tz.js +24 -0
  1204. package/locales/angular/global/mas.js +24 -0
  1205. package/locales/angular/global/mer.js +22 -0
  1206. package/locales/angular/global/mfe.js +22 -0
  1207. package/locales/angular/global/mg.js +24 -0
  1208. package/locales/angular/global/mgh.js +22 -0
  1209. package/locales/angular/global/mgo.js +24 -0
  1210. package/locales/angular/global/mi.js +22 -0
  1211. package/locales/angular/global/mk.js +24 -0
  1212. package/locales/angular/global/ml.js +24 -0
  1213. package/locales/angular/global/mn.js +24 -0
  1214. package/locales/angular/global/mni-beng.js +22 -0
  1215. package/locales/angular/global/mni.js +22 -0
  1216. package/locales/angular/global/mr.js +24 -0
  1217. package/locales/angular/global/ms-bn.js +22 -0
  1218. package/locales/angular/global/ms-id.js +22 -0
  1219. package/locales/angular/global/ms-sg.js +22 -0
  1220. package/locales/angular/global/ms.js +22 -0
  1221. package/locales/angular/global/mt.js +28 -0
  1222. package/locales/angular/global/mua.js +22 -0
  1223. package/locales/angular/global/my.js +22 -0
  1224. package/locales/angular/global/mzn.js +22 -0
  1225. package/locales/angular/global/naq.js +26 -0
  1226. package/locales/angular/global/nb-sj.js +24 -0
  1227. package/locales/angular/global/nb.js +24 -0
  1228. package/locales/angular/global/nd.js +24 -0
  1229. package/locales/angular/global/nds-nl.js +22 -0
  1230. package/locales/angular/global/nds.js +22 -0
  1231. package/locales/angular/global/ne-in.js +24 -0
  1232. package/locales/angular/global/ne.js +24 -0
  1233. package/locales/angular/global/nl-aw.js +24 -0
  1234. package/locales/angular/global/nl-be.js +24 -0
  1235. package/locales/angular/global/nl-bq.js +24 -0
  1236. package/locales/angular/global/nl-cw.js +24 -0
  1237. package/locales/angular/global/nl-sr.js +24 -0
  1238. package/locales/angular/global/nl-sx.js +24 -0
  1239. package/locales/angular/global/nl.js +24 -0
  1240. package/locales/angular/global/nmg.js +22 -0
  1241. package/locales/angular/global/nn.js +24 -0
  1242. package/locales/angular/global/nnh.js +24 -0
  1243. package/locales/angular/global/no.js +24 -0
  1244. package/locales/angular/global/nus.js +22 -0
  1245. package/locales/angular/global/nyn.js +24 -0
  1246. package/locales/angular/global/om-ke.js +24 -0
  1247. package/locales/angular/global/om.js +24 -0
  1248. package/locales/angular/global/or.js +24 -0
  1249. package/locales/angular/global/os-ru.js +24 -0
  1250. package/locales/angular/global/os.js +24 -0
  1251. package/locales/angular/global/pa-arab.js +22 -0
  1252. package/locales/angular/global/pa-guru.js +24 -0
  1253. package/locales/angular/global/pa.js +24 -0
  1254. package/locales/angular/global/pcm.js +24 -0
  1255. package/locales/angular/global/pl.js +28 -0
  1256. package/locales/angular/global/ps-pk.js +24 -0
  1257. package/locales/angular/global/ps.js +24 -0
  1258. package/locales/angular/global/pt-ao.js +26 -0
  1259. package/locales/angular/global/pt-ch.js +26 -0
  1260. package/locales/angular/global/pt-cv.js +26 -0
  1261. package/locales/angular/global/pt-gq.js +26 -0
  1262. package/locales/angular/global/pt-gw.js +26 -0
  1263. package/locales/angular/global/pt-lu.js +26 -0
  1264. package/locales/angular/global/pt-mo.js +26 -0
  1265. package/locales/angular/global/pt-mz.js +26 -0
  1266. package/locales/angular/global/pt-pt.js +26 -0
  1267. package/locales/angular/global/pt-st.js +26 -0
  1268. package/locales/angular/global/pt-tl.js +26 -0
  1269. package/locales/angular/global/pt.js +26 -0
  1270. package/locales/angular/global/qu-bo.js +22 -0
  1271. package/locales/angular/global/qu-ec.js +22 -0
  1272. package/locales/angular/global/qu.js +22 -0
  1273. package/locales/angular/global/rm.js +24 -0
  1274. package/locales/angular/global/rn.js +22 -0
  1275. package/locales/angular/global/ro-md.js +26 -0
  1276. package/locales/angular/global/ro.js +26 -0
  1277. package/locales/angular/global/rof.js +24 -0
  1278. package/locales/angular/global/ru-by.js +28 -0
  1279. package/locales/angular/global/ru-kg.js +28 -0
  1280. package/locales/angular/global/ru-kz.js +28 -0
  1281. package/locales/angular/global/ru-md.js +28 -0
  1282. package/locales/angular/global/ru-ua.js +28 -0
  1283. package/locales/angular/global/ru.js +28 -0
  1284. package/locales/angular/global/rw.js +22 -0
  1285. package/locales/angular/global/rwk.js +24 -0
  1286. package/locales/angular/global/sa.js +22 -0
  1287. package/locales/angular/global/sah.js +22 -0
  1288. package/locales/angular/global/saq.js +24 -0
  1289. package/locales/angular/global/sat-olck.js +26 -0
  1290. package/locales/angular/global/sat.js +26 -0
  1291. package/locales/angular/global/sbp.js +22 -0
  1292. package/locales/angular/global/sc.js +24 -0
  1293. package/locales/angular/global/sd-arab.js +24 -0
  1294. package/locales/angular/global/sd-deva.js +22 -0
  1295. package/locales/angular/global/sd.js +24 -0
  1296. package/locales/angular/global/se-fi.js +26 -0
  1297. package/locales/angular/global/se-se.js +26 -0
  1298. package/locales/angular/global/se.js +26 -0
  1299. package/locales/angular/global/seh.js +24 -0
  1300. package/locales/angular/global/ses.js +22 -0
  1301. package/locales/angular/global/sg.js +22 -0
  1302. package/locales/angular/global/shi-latn.js +22 -0
  1303. package/locales/angular/global/shi-tfng.js +26 -0
  1304. package/locales/angular/global/shi.js +26 -0
  1305. package/locales/angular/global/si.js +24 -0
  1306. package/locales/angular/global/sk.js +28 -0
  1307. package/locales/angular/global/sl.js +28 -0
  1308. package/locales/angular/global/smn.js +26 -0
  1309. package/locales/angular/global/sn.js +24 -0
  1310. package/locales/angular/global/so-dj.js +24 -0
  1311. package/locales/angular/global/so-et.js +24 -0
  1312. package/locales/angular/global/so-ke.js +24 -0
  1313. package/locales/angular/global/so.js +24 -0
  1314. package/locales/angular/global/sq-mk.js +24 -0
  1315. package/locales/angular/global/sq-xk.js +24 -0
  1316. package/locales/angular/global/sq.js +24 -0
  1317. package/locales/angular/global/sr-cyrl-ba.js +26 -0
  1318. package/locales/angular/global/sr-cyrl-me.js +26 -0
  1319. package/locales/angular/global/sr-cyrl-xk.js +26 -0
  1320. package/locales/angular/global/sr-cyrl.js +26 -0
  1321. package/locales/angular/global/sr-latn-ba.js +22 -0
  1322. package/locales/angular/global/sr-latn-me.js +22 -0
  1323. package/locales/angular/global/sr-latn-xk.js +22 -0
  1324. package/locales/angular/global/sr-latn.js +22 -0
  1325. package/locales/angular/global/sr.js +26 -0
  1326. package/locales/angular/global/su-latn.js +22 -0
  1327. package/locales/angular/global/su.js +22 -0
  1328. package/locales/angular/global/sv-ax.js +24 -0
  1329. package/locales/angular/global/sv-fi.js +24 -0
  1330. package/locales/angular/global/sv.js +24 -0
  1331. package/locales/angular/global/sw-cd.js +24 -0
  1332. package/locales/angular/global/sw-ke.js +24 -0
  1333. package/locales/angular/global/sw-ug.js +24 -0
  1334. package/locales/angular/global/sw.js +24 -0
  1335. package/locales/angular/global/ta-lk.js +24 -0
  1336. package/locales/angular/global/ta-my.js +24 -0
  1337. package/locales/angular/global/ta-sg.js +24 -0
  1338. package/locales/angular/global/ta.js +24 -0
  1339. package/locales/angular/global/te.js +24 -0
  1340. package/locales/angular/global/teo-ke.js +24 -0
  1341. package/locales/angular/global/teo.js +24 -0
  1342. package/locales/angular/global/tg.js +22 -0
  1343. package/locales/angular/global/th.js +22 -0
  1344. package/locales/angular/global/ti-er.js +24 -0
  1345. package/locales/angular/global/ti.js +24 -0
  1346. package/locales/angular/global/tk.js +24 -0
  1347. package/locales/angular/global/to.js +22 -0
  1348. package/locales/angular/global/tr-cy.js +24 -0
  1349. package/locales/angular/global/tr.js +24 -0
  1350. package/locales/angular/global/tt.js +22 -0
  1351. package/locales/angular/global/twq.js +22 -0
  1352. package/locales/angular/global/tzm.js +24 -0
  1353. package/locales/angular/global/ug.js +24 -0
  1354. package/locales/angular/global/uk.js +28 -0
  1355. package/locales/angular/global/und.js +24 -0
  1356. package/locales/angular/global/ur-in.js +24 -0
  1357. package/locales/angular/global/ur.js +24 -0
  1358. package/locales/angular/global/uz-arab.js +22 -0
  1359. package/locales/angular/global/uz-cyrl.js +22 -0
  1360. package/locales/angular/global/uz-latn.js +24 -0
  1361. package/locales/angular/global/uz.js +24 -0
  1362. package/locales/angular/global/vai-latn.js +22 -0
  1363. package/locales/angular/global/vai-vaii.js +22 -0
  1364. package/locales/angular/global/vai.js +22 -0
  1365. package/locales/angular/global/vi.js +22 -0
  1366. package/locales/angular/global/vun.js +24 -0
  1367. package/locales/angular/global/wae.js +24 -0
  1368. package/locales/angular/global/wo.js +22 -0
  1369. package/locales/angular/global/xh.js +24 -0
  1370. package/locales/angular/global/xog.js +24 -0
  1371. package/locales/angular/global/yav.js +22 -0
  1372. package/locales/angular/global/yi.js +24 -0
  1373. package/locales/angular/global/yo-bj.js +22 -0
  1374. package/locales/angular/global/yo.js +22 -0
  1375. package/locales/angular/global/yrl-co.js +22 -0
  1376. package/locales/angular/global/yrl-ve.js +22 -0
  1377. package/locales/angular/global/yrl.js +22 -0
  1378. package/locales/angular/global/yue-hans.js +22 -0
  1379. package/locales/angular/global/yue-hant.js +22 -0
  1380. package/locales/angular/global/yue.js +22 -0
  1381. package/locales/angular/global/zgh.js +22 -0
  1382. package/locales/angular/global/zh-hans-hk.js +22 -0
  1383. package/locales/angular/global/zh-hans-mo.js +22 -0
  1384. package/locales/angular/global/zh-hans-sg.js +22 -0
  1385. package/locales/angular/global/zh-hans.js +22 -0
  1386. package/locales/angular/global/zh-hant-hk.js +22 -0
  1387. package/locales/angular/global/zh-hant-mo.js +22 -0
  1388. package/locales/angular/global/zh-hant.js +22 -0
  1389. package/locales/angular/global/zh.js +22 -0
  1390. package/locales/angular/global/zu.js +24 -0
  1391. package/locales/angular/gsw-fr.js +17 -0
  1392. package/locales/angular/gsw-li.js +17 -0
  1393. package/locales/angular/gsw.js +17 -0
  1394. package/locales/angular/gu.js +17 -0
  1395. package/locales/angular/guz.js +15 -0
  1396. package/locales/angular/gv.js +23 -0
  1397. package/locales/angular/ha-gh.js +17 -0
  1398. package/locales/angular/ha-ne.js +17 -0
  1399. package/locales/angular/ha.js +17 -0
  1400. package/locales/angular/haw.js +17 -0
  1401. package/locales/angular/he.js +21 -0
  1402. package/locales/angular/hi-latn.js +17 -0
  1403. package/locales/angular/hi.js +17 -0
  1404. package/locales/angular/hr-ba.js +19 -0
  1405. package/locales/angular/hr.js +19 -0
  1406. package/locales/angular/hsb.js +21 -0
  1407. package/locales/angular/hu.js +17 -0
  1408. package/locales/angular/hy.js +17 -0
  1409. package/locales/angular/ia.js +17 -0
  1410. package/locales/angular/id.js +15 -0
  1411. package/locales/angular/ig.js +15 -0
  1412. package/locales/angular/ii.js +15 -0
  1413. package/locales/angular/is.js +17 -0
  1414. package/locales/angular/it-ch.js +19 -0
  1415. package/locales/angular/it-sm.js +19 -0
  1416. package/locales/angular/it-va.js +19 -0
  1417. package/locales/angular/it.js +19 -0
  1418. package/locales/angular/ja.js +15 -0
  1419. package/locales/angular/jgo.js +17 -0
  1420. package/locales/angular/jmc.js +17 -0
  1421. package/locales/angular/jv.js +15 -0
  1422. package/locales/angular/ka.js +17 -0
  1423. package/locales/angular/kab.js +17 -0
  1424. package/locales/angular/kam.js +15 -0
  1425. package/locales/angular/kde.js +15 -0
  1426. package/locales/angular/kea.js +15 -0
  1427. package/locales/angular/kgp.js +15 -0
  1428. package/locales/angular/khq.js +15 -0
  1429. package/locales/angular/ki.js +15 -0
  1430. package/locales/angular/kk.js +17 -0
  1431. package/locales/angular/kkj.js +17 -0
  1432. package/locales/angular/kl.js +17 -0
  1433. package/locales/angular/kln.js +15 -0
  1434. package/locales/angular/km.js +15 -0
  1435. package/locales/angular/kn.js +17 -0
  1436. package/locales/angular/ko-kp.js +15 -0
  1437. package/locales/angular/ko.js +15 -0
  1438. package/locales/angular/kok.js +15 -0
  1439. package/locales/angular/ks-arab.js +17 -0
  1440. package/locales/angular/ks-deva.js +15 -0
  1441. package/locales/angular/ks.js +17 -0
  1442. package/locales/angular/ksb.js +17 -0
  1443. package/locales/angular/ksf.js +15 -0
  1444. package/locales/angular/ksh.js +19 -0
  1445. package/locales/angular/ku.js +17 -0
  1446. package/locales/angular/kw.js +25 -0
  1447. package/locales/angular/ky.js +17 -0
  1448. package/locales/angular/lag.js +19 -0
  1449. package/locales/angular/lb.js +17 -0
  1450. package/locales/angular/lg.js +17 -0
  1451. package/locales/angular/lkt.js +15 -0
  1452. package/locales/angular/ln-ao.js +17 -0
  1453. package/locales/angular/ln-cf.js +17 -0
  1454. package/locales/angular/ln-cg.js +17 -0
  1455. package/locales/angular/ln.js +17 -0
  1456. package/locales/angular/lo.js +15 -0
  1457. package/locales/angular/lrc-iq.js +15 -0
  1458. package/locales/angular/lrc.js +15 -0
  1459. package/locales/angular/lt.js +21 -0
  1460. package/locales/angular/lu.js +15 -0
  1461. package/locales/angular/luo.js +15 -0
  1462. package/locales/angular/luy.js +15 -0
  1463. package/locales/angular/lv.js +19 -0
  1464. package/locales/angular/mai.js +15 -0
  1465. package/locales/angular/mas-tz.js +17 -0
  1466. package/locales/angular/mas.js +17 -0
  1467. package/locales/angular/mer.js +15 -0
  1468. package/locales/angular/mfe.js +15 -0
  1469. package/locales/angular/mg.js +17 -0
  1470. package/locales/angular/mgh.js +15 -0
  1471. package/locales/angular/mgo.js +17 -0
  1472. package/locales/angular/mi.js +15 -0
  1473. package/locales/angular/mk.js +17 -0
  1474. package/locales/angular/ml.js +17 -0
  1475. package/locales/angular/mn.js +17 -0
  1476. package/locales/angular/mni-beng.js +15 -0
  1477. package/locales/angular/mni.js +15 -0
  1478. package/locales/angular/mr.js +17 -0
  1479. package/locales/angular/ms-bn.js +15 -0
  1480. package/locales/angular/ms-id.js +15 -0
  1481. package/locales/angular/ms-sg.js +15 -0
  1482. package/locales/angular/ms.js +15 -0
  1483. package/locales/angular/mt.js +21 -0
  1484. package/locales/angular/mua.js +15 -0
  1485. package/locales/angular/my.js +15 -0
  1486. package/locales/angular/mzn.js +15 -0
  1487. package/locales/angular/naq.js +19 -0
  1488. package/locales/angular/nb-sj.js +17 -0
  1489. package/locales/angular/nb.js +17 -0
  1490. package/locales/angular/nd.js +17 -0
  1491. package/locales/angular/nds-nl.js +15 -0
  1492. package/locales/angular/nds.js +15 -0
  1493. package/locales/angular/ne-in.js +17 -0
  1494. package/locales/angular/ne.js +17 -0
  1495. package/locales/angular/nl-aw.js +17 -0
  1496. package/locales/angular/nl-be.js +17 -0
  1497. package/locales/angular/nl-bq.js +17 -0
  1498. package/locales/angular/nl-cw.js +17 -0
  1499. package/locales/angular/nl-sr.js +17 -0
  1500. package/locales/angular/nl-sx.js +17 -0
  1501. package/locales/angular/nl.js +17 -0
  1502. package/locales/angular/nmg.js +15 -0
  1503. package/locales/angular/nn.js +17 -0
  1504. package/locales/angular/nnh.js +17 -0
  1505. package/locales/angular/no.js +17 -0
  1506. package/locales/angular/nus.js +15 -0
  1507. package/locales/angular/nyn.js +17 -0
  1508. package/locales/angular/om-ke.js +17 -0
  1509. package/locales/angular/om.js +17 -0
  1510. package/locales/angular/or.js +17 -0
  1511. package/locales/angular/os-ru.js +17 -0
  1512. package/locales/angular/os.js +17 -0
  1513. package/locales/angular/pa-arab.js +15 -0
  1514. package/locales/angular/pa-guru.js +17 -0
  1515. package/locales/angular/pa.js +17 -0
  1516. package/locales/angular/pcm.js +17 -0
  1517. package/locales/angular/pl.js +21 -0
  1518. package/locales/angular/ps-pk.js +17 -0
  1519. package/locales/angular/ps.js +17 -0
  1520. package/locales/angular/pt-ao.js +19 -0
  1521. package/locales/angular/pt-ch.js +19 -0
  1522. package/locales/angular/pt-cv.js +19 -0
  1523. package/locales/angular/pt-gq.js +19 -0
  1524. package/locales/angular/pt-gw.js +19 -0
  1525. package/locales/angular/pt-lu.js +19 -0
  1526. package/locales/angular/pt-mo.js +19 -0
  1527. package/locales/angular/pt-mz.js +19 -0
  1528. package/locales/angular/pt-pt.js +19 -0
  1529. package/locales/angular/pt-st.js +19 -0
  1530. package/locales/angular/pt-tl.js +19 -0
  1531. package/locales/angular/pt.js +19 -0
  1532. package/locales/angular/qu-bo.js +15 -0
  1533. package/locales/angular/qu-ec.js +15 -0
  1534. package/locales/angular/qu.js +15 -0
  1535. package/locales/angular/rm.js +17 -0
  1536. package/locales/angular/rn.js +15 -0
  1537. package/locales/angular/ro-md.js +19 -0
  1538. package/locales/angular/ro.js +19 -0
  1539. package/locales/angular/rof.js +17 -0
  1540. package/locales/angular/ru-by.js +21 -0
  1541. package/locales/angular/ru-kg.js +21 -0
  1542. package/locales/angular/ru-kz.js +21 -0
  1543. package/locales/angular/ru-md.js +21 -0
  1544. package/locales/angular/ru-ua.js +21 -0
  1545. package/locales/angular/ru.js +21 -0
  1546. package/locales/angular/rw.js +15 -0
  1547. package/locales/angular/rwk.js +17 -0
  1548. package/locales/angular/sa.js +15 -0
  1549. package/locales/angular/sah.js +15 -0
  1550. package/locales/angular/saq.js +17 -0
  1551. package/locales/angular/sat-olck.js +19 -0
  1552. package/locales/angular/sat.js +19 -0
  1553. package/locales/angular/sbp.js +15 -0
  1554. package/locales/angular/sc.js +17 -0
  1555. package/locales/angular/sd-arab.js +17 -0
  1556. package/locales/angular/sd-deva.js +15 -0
  1557. package/locales/angular/sd.js +17 -0
  1558. package/locales/angular/se-fi.js +19 -0
  1559. package/locales/angular/se-se.js +19 -0
  1560. package/locales/angular/se.js +19 -0
  1561. package/locales/angular/seh.js +17 -0
  1562. package/locales/angular/ses.js +15 -0
  1563. package/locales/angular/sg.js +15 -0
  1564. package/locales/angular/shi-latn.js +15 -0
  1565. package/locales/angular/shi-tfng.js +19 -0
  1566. package/locales/angular/shi.js +19 -0
  1567. package/locales/angular/si.js +17 -0
  1568. package/locales/angular/sk.js +21 -0
  1569. package/locales/angular/sl.js +21 -0
  1570. package/locales/angular/smn.js +19 -0
  1571. package/locales/angular/sn.js +17 -0
  1572. package/locales/angular/so-dj.js +17 -0
  1573. package/locales/angular/so-et.js +17 -0
  1574. package/locales/angular/so-ke.js +17 -0
  1575. package/locales/angular/so.js +17 -0
  1576. package/locales/angular/sq-mk.js +17 -0
  1577. package/locales/angular/sq-xk.js +17 -0
  1578. package/locales/angular/sq.js +17 -0
  1579. package/locales/angular/sr-cyrl-ba.js +19 -0
  1580. package/locales/angular/sr-cyrl-me.js +19 -0
  1581. package/locales/angular/sr-cyrl-xk.js +19 -0
  1582. package/locales/angular/sr-cyrl.js +19 -0
  1583. package/locales/angular/sr-latn-ba.js +15 -0
  1584. package/locales/angular/sr-latn-me.js +15 -0
  1585. package/locales/angular/sr-latn-xk.js +15 -0
  1586. package/locales/angular/sr-latn.js +15 -0
  1587. package/locales/angular/sr.js +19 -0
  1588. package/locales/angular/su-latn.js +15 -0
  1589. package/locales/angular/su.js +15 -0
  1590. package/locales/angular/sv-ax.js +17 -0
  1591. package/locales/angular/sv-fi.js +17 -0
  1592. package/locales/angular/sv.js +17 -0
  1593. package/locales/angular/sw-cd.js +17 -0
  1594. package/locales/angular/sw-ke.js +17 -0
  1595. package/locales/angular/sw-ug.js +17 -0
  1596. package/locales/angular/sw.js +17 -0
  1597. package/locales/angular/ta-lk.js +17 -0
  1598. package/locales/angular/ta-my.js +17 -0
  1599. package/locales/angular/ta-sg.js +17 -0
  1600. package/locales/angular/ta.js +17 -0
  1601. package/locales/angular/te.js +17 -0
  1602. package/locales/angular/teo-ke.js +17 -0
  1603. package/locales/angular/teo.js +17 -0
  1604. package/locales/angular/tg.js +15 -0
  1605. package/locales/angular/th.js +15 -0
  1606. package/locales/angular/ti-er.js +17 -0
  1607. package/locales/angular/ti.js +17 -0
  1608. package/locales/angular/tk.js +17 -0
  1609. package/locales/angular/to.js +15 -0
  1610. package/locales/angular/tr-cy.js +17 -0
  1611. package/locales/angular/tr.js +17 -0
  1612. package/locales/angular/tt.js +15 -0
  1613. package/locales/angular/twq.js +15 -0
  1614. package/locales/angular/tzm.js +17 -0
  1615. package/locales/angular/ug.js +17 -0
  1616. package/locales/angular/uk.js +21 -0
  1617. package/locales/angular/und.js +17 -0
  1618. package/locales/angular/ur-in.js +17 -0
  1619. package/locales/angular/ur.js +17 -0
  1620. package/locales/angular/uz-arab.js +15 -0
  1621. package/locales/angular/uz-cyrl.js +15 -0
  1622. package/locales/angular/uz-latn.js +17 -0
  1623. package/locales/angular/uz.js +17 -0
  1624. package/locales/angular/vai-latn.js +15 -0
  1625. package/locales/angular/vai-vaii.js +15 -0
  1626. package/locales/angular/vai.js +15 -0
  1627. package/locales/angular/vi.js +15 -0
  1628. package/locales/angular/vun.js +17 -0
  1629. package/locales/angular/wae.js +17 -0
  1630. package/locales/angular/wo.js +15 -0
  1631. package/locales/angular/xh.js +17 -0
  1632. package/locales/angular/xog.js +17 -0
  1633. package/locales/angular/yav.js +15 -0
  1634. package/locales/angular/yi.js +17 -0
  1635. package/locales/angular/yo-bj.js +15 -0
  1636. package/locales/angular/yo.js +15 -0
  1637. package/locales/angular/yrl-co.js +15 -0
  1638. package/locales/angular/yrl-ve.js +15 -0
  1639. package/locales/angular/yrl.js +15 -0
  1640. package/locales/angular/yue-hans.js +15 -0
  1641. package/locales/angular/yue-hant.js +15 -0
  1642. package/locales/angular/yue.js +15 -0
  1643. package/locales/angular/zgh.js +15 -0
  1644. package/locales/angular/zh-hans-hk.js +15 -0
  1645. package/locales/angular/zh-hans-mo.js +15 -0
  1646. package/locales/angular/zh-hans-sg.js +15 -0
  1647. package/locales/angular/zh-hans.js +15 -0
  1648. package/locales/angular/zh-hant-hk.js +15 -0
  1649. package/locales/angular/zh-hant-mo.js +15 -0
  1650. package/locales/angular/zh-hant.js +15 -0
  1651. package/locales/angular/zh.js +15 -0
  1652. package/locales/angular/zu.js +17 -0
  1653. package/locales/moment/af.js +82 -0
  1654. package/locales/moment/ar-dz.js +167 -0
  1655. package/locales/moment/ar-kw.js +66 -0
  1656. package/locales/moment/ar-ly.js +182 -0
  1657. package/locales/moment/ar-ma.js +67 -0
  1658. package/locales/moment/ar-ps.js +123 -0
  1659. package/locales/moment/ar-sa.js +116 -0
  1660. package/locales/moment/ar-tn.js +66 -0
  1661. package/locales/moment/ar.js +200 -0
  1662. package/locales/moment/az.js +113 -0
  1663. package/locales/moment/be.js +153 -0
  1664. package/locales/moment/bg.js +98 -0
  1665. package/locales/moment/bm.js +62 -0
  1666. package/locales/moment/bn-bd.js +140 -0
  1667. package/locales/moment/bn.js +130 -0
  1668. package/locales/moment/bo.js +135 -0
  1669. package/locales/moment/br.js +179 -0
  1670. package/locales/moment/bs.js +171 -0
  1671. package/locales/moment/ca.js +111 -0
  1672. package/locales/moment/cs.js +192 -0
  1673. package/locales/moment/cv.js +74 -0
  1674. package/locales/moment/cy.js +109 -0
  1675. package/locales/moment/da.js +64 -0
  1676. package/locales/moment/de-at.js +90 -0
  1677. package/locales/moment/de-ch.js +87 -0
  1678. package/locales/moment/de.js +89 -0
  1679. package/locales/moment/dv.js +101 -0
  1680. package/locales/moment/el.js +117 -0
  1681. package/locales/moment/en-au.js +79 -0
  1682. package/locales/moment/en-ca.js +75 -0
  1683. package/locales/moment/en-gb.js +79 -0
  1684. package/locales/moment/en-ie.js +79 -0
  1685. package/locales/moment/en-il.js +75 -0
  1686. package/locales/moment/en-in.js +79 -0
  1687. package/locales/moment/en-nz.js +79 -0
  1688. package/locales/moment/en-sg.js +79 -0
  1689. package/locales/moment/eo.js +79 -0
  1690. package/locales/moment/es-do.js +119 -0
  1691. package/locales/moment/es-mx.js +121 -0
  1692. package/locales/moment/es-us.js +121 -0
  1693. package/locales/moment/es.js +121 -0
  1694. package/locales/moment/et.js +89 -0
  1695. package/locales/moment/eu.js +76 -0
  1696. package/locales/moment/fa.js +124 -0
  1697. package/locales/moment/fi.js +135 -0
  1698. package/locales/moment/fil.js +69 -0
  1699. package/locales/moment/fo.js +68 -0
  1700. package/locales/moment/fr-ca.js +81 -0
  1701. package/locales/moment/fr-ch.js +85 -0
  1702. package/locales/moment/fr.js +119 -0
  1703. package/locales/moment/fy.js +86 -0
  1704. package/locales/moment/ga.js +106 -0
  1705. package/locales/moment/gd.js +106 -0
  1706. package/locales/moment/gl.js +86 -0
  1707. package/locales/moment/gom-deva.js +137 -0
  1708. package/locales/moment/gom-latn.js +135 -0
  1709. package/locales/moment/gu.js +133 -0
  1710. package/locales/moment/he.js +105 -0
  1711. package/locales/moment/hi.js +179 -0
  1712. package/locales/moment/hr.js +167 -0
  1713. package/locales/moment/hu.js +129 -0
  1714. package/locales/moment/hy-am.js +105 -0
  1715. package/locales/moment/id.js +87 -0
  1716. package/locales/moment/is.js +151 -0
  1717. package/locales/moment/it-ch.js +75 -0
  1718. package/locales/moment/it.js +117 -0
  1719. package/locales/moment/ja.js +159 -0
  1720. package/locales/moment/jv.js +87 -0
  1721. package/locales/moment/ka.js +103 -0
  1722. package/locales/moment/kk.js +93 -0
  1723. package/locales/moment/km.js +114 -0
  1724. package/locales/moment/kn.js +135 -0
  1725. package/locales/moment/ko.js +86 -0
  1726. package/locales/moment/ku-kmr.js +125 -0
  1727. package/locales/moment/ku.js +129 -0
  1728. package/locales/moment/ky.js +95 -0
  1729. package/locales/moment/lb.js +148 -0
  1730. package/locales/moment/lo.js +77 -0
  1731. package/locales/moment/lt.js +136 -0
  1732. package/locales/moment/lv.js +105 -0
  1733. package/locales/moment/me.js +128 -0
  1734. package/locales/moment/mi.js +71 -0
  1735. package/locales/moment/mk.js +97 -0
  1736. package/locales/moment/ml.js +93 -0
  1737. package/locales/moment/mn.js +111 -0
  1738. package/locales/moment/mr.js +214 -0
  1739. package/locales/moment/ms-my.js +87 -0
  1740. package/locales/moment/ms.js +86 -0
  1741. package/locales/moment/mt.js +67 -0
  1742. package/locales/moment/my.js +102 -0
  1743. package/locales/moment/nb.js +71 -0
  1744. package/locales/moment/ne.js +132 -0
  1745. package/locales/moment/nl-be.js +113 -0
  1746. package/locales/moment/nl.js +115 -0
  1747. package/locales/moment/nn.js +70 -0
  1748. package/locales/moment/oc-lnc.js +96 -0
  1749. package/locales/moment/pa-in.js +133 -0
  1750. package/locales/moment/pl.js +151 -0
  1751. package/locales/moment/pt-br.js +69 -0
  1752. package/locales/moment/pt.js +74 -0
  1753. package/locales/moment/ro.js +87 -0
  1754. package/locales/moment/ru.js +224 -0
  1755. package/locales/moment/sd.js +92 -0
  1756. package/locales/moment/se.js +68 -0
  1757. package/locales/moment/si.js +80 -0
  1758. package/locales/moment/sk.js +156 -0
  1759. package/locales/moment/sl.js +182 -0
  1760. package/locales/moment/sq.js +76 -0
  1761. package/locales/moment/sr-cyrl.js +138 -0
  1762. package/locales/moment/sr.js +140 -0
  1763. package/locales/moment/ss.js +95 -0
  1764. package/locales/moment/sv.js +79 -0
  1765. package/locales/moment/sw.js +66 -0
  1766. package/locales/moment/ta.js +142 -0
  1767. package/locales/moment/te.js +99 -0
  1768. package/locales/moment/tet.js +79 -0
  1769. package/locales/moment/tg.js +128 -0
  1770. package/locales/moment/th.js +76 -0
  1771. package/locales/moment/tk.js +102 -0
  1772. package/locales/moment/tl-ph.js +68 -0
  1773. package/locales/moment/tlh.js +135 -0
  1774. package/locales/moment/tr.js +117 -0
  1775. package/locales/moment/tzl.js +100 -0
  1776. package/locales/moment/tzm-latn.js +65 -0
  1777. package/locales/moment/tzm.js +65 -0
  1778. package/locales/moment/ug-cn.js +122 -0
  1779. package/locales/moment/uk.js +178 -0
  1780. package/locales/moment/ur.js +93 -0
  1781. package/locales/moment/uz-latn.js +65 -0
  1782. package/locales/moment/uz.js +62 -0
  1783. package/locales/moment/vi.js +91 -0
  1784. package/locales/moment/x-pseudo.js +84 -0
  1785. package/locales/moment/yo.js +64 -0
  1786. package/locales/moment/zh-cn.js +131 -0
  1787. package/locales/moment/zh-hk.js +112 -0
  1788. package/locales/moment/zh-mo.js +111 -0
  1789. package/locales/moment/zh-tw.js +110 -0
  1790. package/locales/moment-timezone/moment-timezone-with-data.js +1582 -0
  1791. package/npm-shrinkwrap.json +17 -0
  1792. package/oAuth/.npmignore +2 -0
  1793. package/oAuth/bundles/index.umd.js +495 -0
  1794. package/oAuth/fesm2022/index.mjs +478 -0
  1795. package/oAuth/fesm2022/index.mjs.map +1 -0
  1796. package/oAuth/index.d.ts +43 -0
  1797. package/oAuth/package.json +23 -0
  1798. package/package-lock.json +17 -0
  1799. package/package.json +16 -0
  1800. package/runtime/base/.npmignore +2 -0
  1801. package/runtime/base/bundles/index.umd.js +6180 -0
  1802. package/runtime/base/fesm2022/index.mjs +6216 -0
  1803. package/runtime/base/fesm2022/index.mjs.map +1 -0
  1804. package/runtime/base/index.d.ts +1431 -0
  1805. package/runtime/base/package.json +23 -0
  1806. package/runtime/dynamic/.npmignore +2 -0
  1807. package/runtime/dynamic/bundles/index.umd.js +887 -0
  1808. package/runtime/dynamic/fesm2022/index.mjs +950 -0
  1809. package/runtime/dynamic/fesm2022/index.mjs.map +1 -0
  1810. package/runtime/dynamic/index.d.ts +164 -0
  1811. package/runtime/dynamic/package.json +23 -0
  1812. package/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -0
  1813. package/scripts/d3/d3.min.js +2 -0
  1814. package/scripts/datatable/datatable.js +3796 -0
  1815. package/scripts/iscroll/build/iscroll.js +2091 -0
  1816. package/scripts/jquery-ui/ui/widgets/droppable.js +503 -0
  1817. package/scripts/jquery-ui/ui/widgets/resizable.js +1275 -0
  1818. package/scripts/jquery-ui/ui/widgets/sortable.js +1608 -0
  1819. package/scripts/jquery.ui.touch-punch/jquery.ui.touch-punch.min.js +11 -0
  1820. package/scripts/summernote/dist/summernote-lite.min.js +2 -0
  1821. package/scripts/swipey/swipey.jquery.plugin.js +799 -0
  1822. package/scripts/tree-keyboard-navigation/keyboard-navigation.js +251 -0
  1823. package/security/.npmignore +2 -0
  1824. package/security/bundles/index.umd.js +446 -0
  1825. package/security/fesm2022/index.mjs +444 -0
  1826. package/security/fesm2022/index.mjs.map +1 -0
  1827. package/security/index.d.ts +130 -0
  1828. package/security/package.json +23 -0
  1829. package/swipey/.npmignore +2 -0
  1830. package/swipey/bundles/index.umd.js +54 -0
  1831. package/swipey/fesm2022/index.mjs +51 -0
  1832. package/swipey/fesm2022/index.mjs.map +1 -0
  1833. package/swipey/index.d.ts +21 -0
  1834. package/swipey/package.json +23 -0
  1835. package/transpiler/.npmignore +2 -0
  1836. package/transpiler/bundles/index.umd.js +819 -0
  1837. package/transpiler/fesm2022/index.mjs +813 -0
  1838. package/transpiler/fesm2022/index.mjs.map +1 -0
  1839. package/transpiler/index.d.ts +47 -0
  1840. package/transpiler/package.json +24 -0
  1841. package/variables/.npmignore +2 -0
  1842. package/variables/bundles/index.umd.js +3174 -0
  1843. package/variables/fesm2022/index.mjs +3236 -0
  1844. package/variables/fesm2022/index.mjs.map +1 -0
  1845. package/variables/index.d.ts +468 -0
  1846. package/variables/package.json +23 -0
@@ -0,0 +1,3333 @@
1
+ import * as i6 from '@angular/common';
2
+ import { CommonModule } from '@angular/common';
3
+ import { AnchorComponent } from '@wm/components/basic/anchor';
4
+ import { ButtonComponent } from '@wm/components/input/button';
5
+ import * as i0 from '@angular/core';
6
+ import { ViewContainerRef, HostListener, HostBinding, ContentChildren, ViewChild, Optional, SkipSelf, Attribute, Inject, Component, Self, Directive, ContentChild } from '@angular/core';
7
+ import * as i1 from '@angular/forms';
8
+ import { FormArray, NG_VALUE_ACCESSOR } from '@angular/forms';
9
+ import * as i1$1 from '@wm/core';
10
+ import { removeClass, isDefined, debounce as debounce$1, removeAttr, DataSource, $appDigest, setListClass, isElementInViewport, scrollToElement, getFiles, DataType, getClonedObject, $invokeWatchers, getValidJSON, extendProto, $parseEvent, FormWidgetType, noop as noop$1, isMobile, isDateTimeType, addForIdAttributes, triggerFn, isEmptyObject, getValidDateObject } from '@wm/core';
11
+ import * as i5 from '@wm/components/base';
12
+ import { PROP_BOOLEAN, PROP_STRING, PROP_ANY, PROP_NUMBER, register, StylableComponent, styler, getFieldLayoutConfig, Live_Operations, performDataOperation, parseValueByType, MessageComponent, WmAppIconComponent, FilterPipe, WidgetRef, provideAsWidgetRef, BaseComponent, getWidgetPropsByType, getEvaluatedData, BaseFieldValidations, getDefaultViewModeWidget, Context, provideAs, fetchDistinctValues, applyFilterOnField, isDataSetWidget, getDistinctValuesForField, getRangeFieldValue, getRangeMatchMode, getEnableEmptyFilter, getEmptyMatchMode, fetchRelatedFieldData, ALLFIELDS } from '@wm/components/base';
13
+ import * as i4 from '@wm/components/prefab';
14
+ import * as i3 from '@wm/components/data/list';
15
+ import { ListComponent } from '@wm/components/data/list';
16
+ import { forEach, debounce, get, last, keys, isEmpty, isEqual, isArray, find, set, filter, includes, split, some, isUndefined, findIndex, isObject, join, isString, fromPairs, map } from 'lodash-es';
17
+ import { TableComponent } from '@wm/components/data/table';
18
+ import { debounceTime } from 'rxjs/operators';
19
+ import * as i1$2 from '@wm/components/data/live-table';
20
+
21
+ const propsMap = new Map([
22
+ ['autocomplete', { value: false, ...PROP_BOOLEAN }],
23
+ ['captionalign', { value: 'left', ...PROP_STRING }],
24
+ ['captionposition', { value: 'left', ...PROP_STRING }],
25
+ ['captionsize', PROP_STRING],
26
+ ['captionwidth', { value: 'xs-12 sm-3 md-3 lg-3', ...PROP_STRING }],
27
+ ['class', PROP_STRING],
28
+ ['collapsible', PROP_BOOLEAN],
29
+ ['dataset', PROP_ANY],
30
+ ['datasource', PROP_STRING],
31
+ ['expanded', { value: true, ...PROP_BOOLEAN }],
32
+ ['formdatasource', PROP_STRING],
33
+ ['name', PROP_STRING],
34
+ ['numberOfFields', PROP_NUMBER],
35
+ ['show', { value: true, ...PROP_BOOLEAN }],
36
+ ['showindevice', { displayType: 'inline-block', value: 'all', ...PROP_STRING }],
37
+ ['subheading', PROP_STRING],
38
+ ['tabindex', { value: 0, ...PROP_NUMBER }],
39
+ ['title', PROP_STRING],
40
+ ['itemsperrow', PROP_STRING],
41
+ ]);
42
+ const registerFormProps = () => {
43
+ const formMap = new Map(propsMap);
44
+ formMap.set('action', PROP_STRING);
45
+ formMap.set('defaultmode', { value: 'Edit', ...PROP_STRING });
46
+ formMap.set('metadata', PROP_STRING);
47
+ formMap.set('method', PROP_STRING);
48
+ formMap.set('postmessage', { value: 'Data posted successfully', ...PROP_STRING });
49
+ formMap.set('target', PROP_STRING);
50
+ formMap.set('enctype', PROP_STRING);
51
+ formMap.set('errormessage', { value: 'An error occured. Please try again!', ...PROP_STRING });
52
+ formMap.set('messagelayout', { value: 'Inline', ...PROP_STRING });
53
+ formMap.set('formdata', PROP_STRING);
54
+ formMap.set('novalidate', PROP_BOOLEAN);
55
+ formMap.set('validationtype', { value: 'default', ...PROP_STRING });
56
+ formMap.set('iconclass', PROP_STRING);
57
+ formMap.set('iconurl', PROP_STRING);
58
+ formMap.set('readonly', { value: false, ...PROP_BOOLEAN });
59
+ register('wm-form', formMap);
60
+ };
61
+ const registerLiveFormProps = () => {
62
+ const liveFormMap = new Map(propsMap);
63
+ liveFormMap.set('defaultmode', { value: 'View', ...PROP_STRING });
64
+ liveFormMap.set('formlayout', { value: 'inline', ...PROP_STRING });
65
+ liveFormMap.set('insertmessage', { value: 'Record added successfully', ...PROP_STRING });
66
+ liveFormMap.set('updatemessage', { value: 'Record updated successfully', ...PROP_STRING });
67
+ liveFormMap.set('deletemessage', { value: 'Record deleted successfully', ...PROP_STRING });
68
+ liveFormMap.set('errormessage', { value: 'An error occured. Please try again!', ...PROP_STRING });
69
+ liveFormMap.set('messagelayout', { value: 'Toaster', ...PROP_STRING });
70
+ liveFormMap.set('formdata', PROP_STRING);
71
+ liveFormMap.set('novalidate', PROP_BOOLEAN);
72
+ liveFormMap.set('validationtype', { value: 'default', ...PROP_STRING });
73
+ liveFormMap.set('iconclass', PROP_STRING);
74
+ liveFormMap.set('iconurl', PROP_STRING);
75
+ register('wm-liveform', liveFormMap);
76
+ };
77
+ const registerLiveFilterProps = () => {
78
+ const liveFilterMap = new Map(propsMap);
79
+ liveFilterMap.set('autoupdate', PROP_BOOLEAN);
80
+ liveFilterMap.set('enableemptyfilter', { value: ' ', ...PROP_STRING });
81
+ liveFilterMap.set('pagesize', { value: 20, ...PROP_NUMBER });
82
+ liveFilterMap.set('iconclass', { value: 'wi wi-filter-list', ...PROP_STRING });
83
+ liveFilterMap.set('iconurl', PROP_STRING);
84
+ register('wm-livefilter', liveFilterMap);
85
+ };
86
+
87
+ const WIDGET_CONFIG$1 = { widgetType: 'wm-form', hostClass: 'panel app-panel app-form' };
88
+ const LOGIN_FORM_CONFIG = { widgetType: 'wm-form', hostClass: 'app-form app-login-form' };
89
+ const LIVE_FORM_CONFIG = { widgetType: 'wm-liveform', hostClass: 'panel app-panel app-liveform liveform-inline' };
90
+ const LIVE_FILTER_CONFIG = { widgetType: 'wm-livefilter', hostClass: 'panel app-panel app-livefilter clearfix liveform-inline' };
91
+ const getWidgetConfig = (isLiveForm, isLiveFilter, role) => {
92
+ let config = WIDGET_CONFIG$1;
93
+ if (isLiveForm !== null) {
94
+ config = LIVE_FORM_CONFIG;
95
+ }
96
+ else if (isLiveFilter !== null) {
97
+ config = LIVE_FILTER_CONFIG;
98
+ }
99
+ else if (role === 'app-login') {
100
+ config = LOGIN_FORM_CONFIG;
101
+ }
102
+ return config;
103
+ };
104
+ // Generate the form field with given field definition. Add a grid column wrapper around the form field.
105
+ const setMarkupForFormField = (field, columnWidth) => {
106
+ let propsTmpl = '';
107
+ forEach(field, (value, key) => {
108
+ propsTmpl = `${propsTmpl} ${key}="${value}"`;
109
+ });
110
+ return `<wm-gridcolumn columnwidth="${columnWidth}">
111
+ <wm-form-field ${propsTmpl}></wm-form-field>
112
+ </wm-gridcolumn>`;
113
+ };
114
+ // Function to find out the first invalid element in form
115
+ const findInvalidElement = ($formEle, ngForm) => {
116
+ const $ele = $formEle.find('form.ng-invalid:visible, [formControlName].ng-invalid:visible').first();
117
+ let formObj = ngForm;
118
+ // If element is form, find out the first invalid element in this form
119
+ if ($ele.is('form')) {
120
+ formObj = ngForm && ngForm.controls[$ele.attr('formControlName') || $ele.attr('name')];
121
+ if (formObj) {
122
+ return findInvalidElement($ele, formObj);
123
+ }
124
+ }
125
+ return {
126
+ ngForm: formObj,
127
+ $ele: $ele
128
+ };
129
+ };
130
+ // Function to get the active element markup based on widget type
131
+ const getActiveElement = (element) => {
132
+ const widgetType = element.getAttribute('widgettype');
133
+ switch (widgetType) {
134
+ case 'select':
135
+ return element.querySelector('select');
136
+ break;
137
+ case 'textarea':
138
+ return element.querySelector('textarea');
139
+ break;
140
+ default:
141
+ return element.querySelector('input');
142
+ }
143
+ };
144
+ const setTouchedState = (self, ngForm, fieldName) => {
145
+ if (ngForm.valid) {
146
+ return;
147
+ }
148
+ if (ngForm.controls) {
149
+ forEach(ngForm.controls, (ctrl, fieldName) => {
150
+ setTouchedState(self, ctrl, fieldName);
151
+ });
152
+ }
153
+ else {
154
+ let element = self.$element.find(`[wmformfield][key="${fieldName}"]`);
155
+ if (!element.length) {
156
+ element = self.$element.find(`[wmformfield][name="${fieldName}"]`);
157
+ }
158
+ element[0].setAttribute('__errormsg', element[0].getAttribute('__validationId'));
159
+ const activeElement = getActiveElement(element[0]);
160
+ activeElement?.setAttribute('aria-invalid', ngForm.invalid);
161
+ activeElement?.setAttribute('aria-describedby', element[0].getAttribute('__validationId'));
162
+ ngForm.markAsTouched();
163
+ }
164
+ };
165
+ class FormComponent extends StylableComponent {
166
+ static { this.initializeProps = registerFormProps(); }
167
+ set isLayoutDialog(nv) {
168
+ if (nv) {
169
+ removeClass(this.nativeElement, 'panel app-panel liveform-inline');
170
+ }
171
+ this._isLayoutDialog = nv;
172
+ }
173
+ get isLayoutDialog() {
174
+ return this._isLayoutDialog;
175
+ }
176
+ set isUpdateMode(nv) {
177
+ this._isUpdateMode = nv;
178
+ this.formFields.forEach(field => {
179
+ field.setReadOnlyState(nv);
180
+ });
181
+ }
182
+ get isUpdateMode() {
183
+ return this._isUpdateMode;
184
+ }
185
+ submit($event) {
186
+ this._debouncedSubmitForm($event);
187
+ }
188
+ onReset() {
189
+ this.reset();
190
+ }
191
+ onKeydownHandler(event) {
192
+ this._triggeredByUser = true;
193
+ }
194
+ // returns the formArray control on the parentForm.
195
+ get parentFormArray() {
196
+ return this.parentForm && this.isParentList && this.parentForm.ngform.get(this.parentList.name);
197
+ }
198
+ // returns true only when closest livelist is the immediate parent of the form.
199
+ // checks for livelist having any form elements with parentForm name.
200
+ // If livelist is not containing any parentForm elements then it returns true.
201
+ get isParentList() {
202
+ if (this.parentList && this.parentForm && !isDefined(this._formIsInList)) {
203
+ const formEle = this.$element;
204
+ const listEle = formEle.closest('.app-livelist[name="' + this.parentList.name + '"]');
205
+ if (listEle.length) {
206
+ this._formIsInList = !(listEle.find('form[widget-id="' + this.parentForm.widgetId + '"]')).length;
207
+ }
208
+ }
209
+ return isDefined(this._formIsInList) ? this._formIsInList : this.parentList;
210
+ }
211
+ constructor(inj, envInjector, fb, app, dialogService, dynamicComponentProvider, ngZone, parentList, parentForm, parentPrefab, parentPartial, onBeforeSubmitEvt, onSubmitEvt, onBeforeRenderEvt, binddataset, bindformdata, isLiveForm, isLiveFilter, role, key, name, explicitContext) {
212
+ super(inj, getWidgetConfig(isLiveForm, isLiveFilter, role), explicitContext);
213
+ this.envInjector = envInjector;
214
+ this.fb = fb;
215
+ this.app = app;
216
+ this.dialogService = dialogService;
217
+ this.dynamicComponentProvider = dynamicComponentProvider;
218
+ this.ngZone = ngZone;
219
+ this.parentList = parentList;
220
+ this.parentForm = parentForm;
221
+ this.parentPrefab = parentPrefab;
222
+ this.parentPartial = parentPartial;
223
+ this.onBeforeSubmitEvt = onBeforeSubmitEvt;
224
+ this.onSubmitEvt = onSubmitEvt;
225
+ this.onBeforeRenderEvt = onBeforeRenderEvt;
226
+ this.binddataset = binddataset;
227
+ this.bindformdata = bindformdata;
228
+ this._widgetClass = '';
229
+ this._captionClass = '';
230
+ this.formFields = [];
231
+ this.formfields = {};
232
+ this.formWidgets = {};
233
+ this.filterWidgets = {};
234
+ this.buttonArray = [];
235
+ this.dataoutput = {};
236
+ this.formdata = {};
237
+ this.statusMessage = {
238
+ caption: '',
239
+ type: ''
240
+ };
241
+ this.primaryKey = [];
242
+ this._debouncedUpdateFieldSource = debounce(this.updateFieldSource, 350);
243
+ this.validationMessages = [];
244
+ this._debouncedSubmitForm = debounce$1(($event) => {
245
+ // calling submit event in ngZone as change detection is not triggered post the submit callback and actions like notification are not shown
246
+ this.ngZone.run(() => {
247
+ this.submitForm($event);
248
+ });
249
+ }, 250);
250
+ styler(this.nativeElement, this);
251
+ // remove title property as attribute as it is causing unnecessary tooltip
252
+ removeAttr(this.nativeElement, 'title');
253
+ this.isUpdateMode = true;
254
+ this.dialogId = this.nativeElement.getAttribute('dialogId');
255
+ this.ngform = fb.group({});
256
+ this.bindingValue = key || name;
257
+ // On value change in form, update the dataoutput
258
+ const onValueChangeSubscription = this.ngform.valueChanges
259
+ .subscribe(this.updateDataOutput.bind(this));
260
+ this.registerDestroyListener(() => onValueChangeSubscription.unsubscribe());
261
+ this.elScope = this;
262
+ this.addEventsToContext(this.context);
263
+ }
264
+ ngAfterContentInit() {
265
+ setTimeout(() => {
266
+ this.componentRefs.forEach(componentRef => {
267
+ if (componentRef.name) {
268
+ // Register widgets inside form with formWidgets
269
+ this.formWidgets[componentRef.name] = componentRef;
270
+ }
271
+ });
272
+ }, 250);
273
+ }
274
+ ngAfterViewInit() {
275
+ if (this.parentForm && this.parentForm.ngform && this.isParentList) {
276
+ // setting formArray control on ngform.
277
+ if (!get(this.parentForm.ngform.controls, this.parentList.name)) {
278
+ this.parentForm.ngform.setControl(this.parentList.name, new FormArray([]));
279
+ }
280
+ // pushing the ngform to formArray.
281
+ this.parentFormArray.push(this.ngform);
282
+ this.formArrayIndex = this.parentFormArray.length - 1;
283
+ }
284
+ this.addInnerNgFormToForm(this.bindingValue);
285
+ setTimeout(() => {
286
+ $(this.nativeElement).find('div[data-role="form-field"], div[data-role="filter-field"]').addClass(this.itemsPerRowClass);
287
+ });
288
+ }
289
+ findOperationType() { }
290
+ addInnerNgFormToForm(binding) {
291
+ if (this.parentForm && this.parentForm.ngform) {
292
+ // handling as formArray when parent is list. Hence returning here from adding to parentForm again.
293
+ if (this.isParentList) {
294
+ return;
295
+ }
296
+ // assigning the control name of the form inside the prefab with the prefab name.
297
+ // This will happen only when there is only one form inside prefab.
298
+ // We do not support changing this when multiple forms are inside prefab.
299
+ // This scenario has to be handled by end user by changing form names in prefab according to the datamodel binding.
300
+ const parentContainer = this.parentPrefab || this.parentPartial;
301
+ if (parentContainer) {
302
+ let parentContentEl;
303
+ if (this.parentPrefab) {
304
+ parentContentEl = parentContainer.$element.find('[wmprefabcontainer]');
305
+ }
306
+ else {
307
+ parentContentEl = parentContainer.$element;
308
+ }
309
+ /**
310
+ * assigning the form name to the parentContainer name i.e. partial name or perfab name by following
311
+ * 1. retrieving all the forms in the parentContainer
312
+ * 2. consider the first form
313
+ * 3. if this form is inside list i.e. also find if this list is also inside the parentContainer (prefab / partial)
314
+ * 4. then do not change the form name when form is inside list and also when there are siblings to the form
315
+ * 5. this means form name change applies only when there is single form (immediate child) inside the parentContainer.
316
+ */
317
+ const prefabInnerForm = parentContentEl.find('form').first();
318
+ if (get(prefabInnerForm[0], 'widget.widgetId') === this.widgetId) {
319
+ // check whether form inside prefab container is inside the list. If true, do not change the name.
320
+ if (!prefabInnerForm.isParentList && !prefabInnerForm.siblings('form').length) {
321
+ binding = get(parentContainer, 'name');
322
+ }
323
+ }
324
+ }
325
+ let counter = 1;
326
+ let innerBinding = binding;
327
+ // Inner forms may have same names. If same name is present, append unqiue identifier
328
+ while (this.parentForm.ngform.controls.hasOwnProperty(innerBinding)) {
329
+ innerBinding = `${binding}_${counter}`;
330
+ counter++;
331
+ }
332
+ this.formGroupName = innerBinding;
333
+ // If parent form is present, add the current form as as formGroup for parent form
334
+ this.parentForm.ngform.addControl(innerBinding, this.ngform);
335
+ }
336
+ }
337
+ // Expose the events on context so that they can be accessed by form actions
338
+ addEventsToContext(context) {
339
+ context.cancel = () => this.cancel();
340
+ context.reset = () => this.reset();
341
+ context.save = evt => this.save(evt);
342
+ context.saveAndNew = () => this.saveAndNew();
343
+ context.saveAndView = () => this.saveAndView();
344
+ context.delete = () => this.delete();
345
+ context.new = () => this.new();
346
+ context.edit = () => this.edit();
347
+ context.highlightInvalidFields = () => this.highlightInvalidFields();
348
+ context.filter = () => this.filter();
349
+ context.clearFilter = () => this.clearFilter();
350
+ context.submit = evt => this.submit(evt);
351
+ }
352
+ // This method gets all the inner forms and validates each form.
353
+ setValidationOnInnerForms(validateTouch) {
354
+ const formEle = this.getNativeElement();
355
+ const formObjs = formEle.querySelectorAll('.app-form');
356
+ const validationMsgs = [];
357
+ forEach(formObjs, e => {
358
+ const formInstance = e.widget;
359
+ // differentiating the validationMessages prefix based on the formGroupName
360
+ // as the formName's are same when forms are in list
361
+ let formName = get(formInstance, 'formGroupName') || formInstance.name;
362
+ if (isDefined(formInstance.formArrayIndex)) {
363
+ formName = formName + '[' + formInstance.formArrayIndex + ']';
364
+ }
365
+ let current = formInstance;
366
+ while (get(current, 'parentForm')) {
367
+ let parentName = current.parentForm.formGroupName || current.parentForm.name;
368
+ if (current.parentForm.parentFormArray) {
369
+ parentName = parentName + '[' + current.parentForm.formArrayIndex + ']';
370
+ }
371
+ formName = parentName + '.' + formName;
372
+ current = current.parentForm;
373
+ }
374
+ this.setValidationOnFields(formInstance, formName, validateTouch);
375
+ });
376
+ }
377
+ /**
378
+ * This method sets validation on formFields.
379
+ * Applies to innerform and also sets innerform validation on parent form.
380
+ * @param prefix contains the form name, which also includes its parents form name
381
+ * @param {boolean} validateTouch
382
+ */
383
+ setValidationOnFields(form, prefix, validateTouch) {
384
+ const controls = form.ngform.controls;
385
+ const formFields = form.formFields;
386
+ if (!formFields) {
387
+ return;
388
+ }
389
+ forEach(controls, (v, k) => {
390
+ const field = formFields.find(e => e.key === k);
391
+ if (!field || (validateTouch && !v.touched)) {
392
+ return;
393
+ }
394
+ field.nativeElement.querySelector('input')?.setAttribute('aria-invalid', v.invalid);
395
+ // invoking the prepareValidation on both parent form and current form.
396
+ this.prepareValidationObj(v, k, field, prefix);
397
+ this.prepareValidationObj.call(form, v, k, field, prefix);
398
+ });
399
+ }
400
+ // Assigns / updates validationMessages based on angular errors on field
401
+ prepareValidationObj(v, k, field, prefix) {
402
+ const index = this.validationMessages.findIndex(e => (e.field === k && e.fullyQualifiedFormName === prefix));
403
+ if (v.invalid) {
404
+ if (index === -1) {
405
+ /**
406
+ * field contains the fieldName
407
+ * value contains the field value
408
+ * errorType contains the list of errors
409
+ * message contains the validation message
410
+ * getElement returns the element having focus-target
411
+ * formName returns the name of the form
412
+ */
413
+ this.validationMessages.push({
414
+ field: k,
415
+ value: field.value,
416
+ errorType: keys(v.errors),
417
+ message: field.validationmessage || '',
418
+ getElement: () => {
419
+ return field.$element.find('[focus-target]');
420
+ },
421
+ formName: last(prefix.split('.')),
422
+ fullyQualifiedFormName: prefix
423
+ });
424
+ }
425
+ else {
426
+ this.validationMessages[index].value = field.value;
427
+ this.validationMessages[index].errorType = keys(v.errors);
428
+ }
429
+ }
430
+ else if (v.valid && index > -1) {
431
+ this.validationMessages.splice(index, 1);
432
+ }
433
+ }
434
+ // This will return a object containing the error details from the list of formFields that are invalid
435
+ setValidationMsgs(validateTouch) {
436
+ if (!this.formFields.length && isEmpty(this.ngform.controls)) {
437
+ return;
438
+ }
439
+ this.setValidationOnFields(this, this.name, validateTouch);
440
+ this.setValidationOnInnerForms(validateTouch);
441
+ }
442
+ // change and blur events are added from the template
443
+ handleEvent(node, eventName, callback, locals) {
444
+ if (eventName !== 'submit') {
445
+ super.handleEvent(this.nativeElement, eventName, callback, locals);
446
+ }
447
+ }
448
+ updateFieldSource() {
449
+ if (this.formdatasource && this.formdatasource.execute(DataSource.Operation.IS_API_AWARE)) {
450
+ return;
451
+ }
452
+ else if (this.formdatasource && !this.formdatasource.twoWayBinding) {
453
+ return;
454
+ }
455
+ this.formFields.forEach(formField => {
456
+ formField.setFormWidget('datavaluesource', this.formdatasource);
457
+ formField.setFormWidget('binddatavalue', `${this.bindformdata}.${formField.key}`);
458
+ });
459
+ }
460
+ // This method loops through the form fields and highlights the invalid fields by setting state to touched
461
+ highlightInvalidFields() {
462
+ setTouchedState(this, this.ngform, '');
463
+ }
464
+ // Disable the form submit if form is in invalid state. Highlight all the invalid fields if validation type is default
465
+ validateFieldsOnSubmit() {
466
+ this.setValidationMsgs();
467
+ // Disable the form submit if form is in invalid state. For delete operation, do not check the validation.
468
+ if (this.operationType !== 'delete' && (this.validationtype === 'html' || this.validationtype === 'default')
469
+ && this.ngform && this.ngform.invalid) {
470
+ if (this.ngform.invalid) {
471
+ if (this.validationtype === 'default') {
472
+ this.highlightInvalidFields();
473
+ }
474
+ // Find the first invalid untoched element and set it to touched.
475
+ // Safari does not form validations. this will ensure that error is shown for user
476
+ const eleForm = findInvalidElement(this.$element, this.ngform);
477
+ const $invalidForm = eleForm.ngForm;
478
+ let $invalidEle = eleForm.$ele;
479
+ $invalidEle = $invalidEle.parent().find('[focus-target]');
480
+ const $target = eleForm?.$ele?.parent()?.find('input[type=checkbox], input[type=radio], input[type=file]')?.first();
481
+ if ($invalidEle.length) {
482
+ // on save click in page layout liveform, focus of autocomplete widget opens full-screen search.
483
+ if (!$invalidEle.hasClass('app-search-input')) {
484
+ $invalidEle.focus();
485
+ }
486
+ const ngEle = $invalidForm && $invalidForm.controls[$invalidEle.attr('formControlName') || $invalidEle.attr('name')];
487
+ if (ngEle && ngEle.markAsTouched) {
488
+ ngEle.markAsTouched();
489
+ }
490
+ $appDigest();
491
+ return true;
492
+ }
493
+ else if ($target && $target.length) {
494
+ $target.focus();
495
+ }
496
+ return true;
497
+ }
498
+ return false;
499
+ }
500
+ return false;
501
+ }
502
+ onPropertyChange(key, nv, ov) {
503
+ switch (key) {
504
+ case 'captionalign':
505
+ this.captionAlignClass = 'align-' + nv;
506
+ break;
507
+ case 'captionposition':
508
+ this.setLayoutConfig();
509
+ break;
510
+ case 'captionwidth':
511
+ this.setLayoutConfig();
512
+ break;
513
+ case 'captionsize':
514
+ this.captionsize = nv;
515
+ break;
516
+ case 'novalidate':
517
+ // Set validation type based on the novalidate property
518
+ this.widget.validationtype = (nv === true || nv === 'true') ? 'none' : 'default';
519
+ break;
520
+ case 'formdata':
521
+ // For livelist when multiselect is enabled, formdata will be array of objects. In this case consider the last object as formdata.
522
+ if (isEqual(nv, ov)) {
523
+ break;
524
+ }
525
+ isArray(nv) ? this.setFormData(last(nv)) : this.setFormData(nv);
526
+ // if dataset on the formFields are not set as the datasourceChange is triggered before the formFields are registered.
527
+ if (!this.isDataSourceUpdated && this.datasource) {
528
+ this.onDataSourceChange();
529
+ }
530
+ break;
531
+ case 'defaultmode':
532
+ if (!this.isLayoutDialog) {
533
+ if (nv && nv === 'Edit') {
534
+ this.updateMode = true;
535
+ }
536
+ else {
537
+ this.updateMode = false;
538
+ }
539
+ this.isUpdateMode = this.updateMode;
540
+ }
541
+ break;
542
+ case 'datasource':
543
+ this.onDataSourceChange();
544
+ break;
545
+ case 'formdatasource':
546
+ this.onFormDataSourceChange();
547
+ break;
548
+ case 'metadata':
549
+ this.generateFormFields();
550
+ break;
551
+ case 'dataset':
552
+ const formFields = this.getFormFields();
553
+ formFields.forEach(field => {
554
+ // notifying the dataset change to the form-field widget.
555
+ if (!field.isDataSetBound && get(field.formWidget, 'dataset$')) {
556
+ field.formWidget.dataset$.next();
557
+ }
558
+ });
559
+ break;
560
+ case 'readonly':
561
+ this.setReadonlyFields();
562
+ if (nv) {
563
+ this?.buttonArray?.forEach((button) => button.disabled = true);
564
+ }
565
+ else if (this.formWidgets) {
566
+ Object.values(this.formWidgets).forEach(widget => {
567
+ const w = widget;
568
+ if (w.widgetType === 'wm-form-action' && w.buttonDef) {
569
+ w.buttonDef.disabled = w.disabled ?? false;
570
+ }
571
+ });
572
+ }
573
+ break;
574
+ case 'itemsperrow':
575
+ setListClass(this);
576
+ break;
577
+ default:
578
+ super.onPropertyChange(key, nv, ov);
579
+ }
580
+ }
581
+ // Event callbacks on success/error
582
+ onResultCb(data, status, event) {
583
+ const params = { $event: event, $data: data, $operation: this.operationType };
584
+ // whether service call success or failure call this method
585
+ this.invokeEventCallback('result', params);
586
+ if (status) {
587
+ // if service call is success call this method
588
+ this.invokeEventCallback('success', params);
589
+ }
590
+ else {
591
+ // if service call fails call this method
592
+ this.invokeEventCallback('error', params);
593
+ }
594
+ }
595
+ // Display or hide the inline message/ toaster
596
+ toggleMessage(show, msg, type, header) {
597
+ let template;
598
+ if (show && msg) {
599
+ template = (type === 'error' && this.errormessage) ? this.errormessage : msg;
600
+ if (this.messagelayout === 'Inline') {
601
+ template = this.checkAppServiceErrorMsg(type) || template;
602
+ this.statusMessage = { 'caption': template || '', type: type };
603
+ if (this.messageRef) {
604
+ this.messageRef.showMessage(this.statusMessage.caption, this.statusMessage.type);
605
+ }
606
+ // when message layout is inline on save, scroll the view to top of the form to see the status of the operation
607
+ if (!isElementInViewport(this.$element[0])) {
608
+ scrollToElement(this.$element[0]);
609
+ }
610
+ }
611
+ else {
612
+ this.app.notifyApp(template, type, header);
613
+ }
614
+ }
615
+ else {
616
+ this.statusMessage.caption = '';
617
+ }
618
+ }
619
+ // if there is an App.onServiceError handler for the app, that message should be used instead of server returned error message
620
+ checkAppServiceErrorMsg(type) {
621
+ const notificationAction = get(this.app, 'Actions.appNotification');
622
+ if (notificationAction && type === 'error') {
623
+ return notificationAction.getMessage();
624
+ }
625
+ return;
626
+ }
627
+ // Hide the inline message/ toaster
628
+ clearMessage() {
629
+ this.toggleMessage(false);
630
+ }
631
+ // Set the classes on the form based on the captionposition and captionwidth properties
632
+ setLayoutConfig() {
633
+ let layoutConfig;
634
+ layoutConfig = getFieldLayoutConfig(this.captionwidth, this.captionposition, get(this.app.selectedViewPort, 'os'));
635
+ this._widgetClass = layoutConfig.widgetCls;
636
+ this._captionClass = layoutConfig.captionCls;
637
+ $appDigest();
638
+ }
639
+ registerFormWidget(widget) {
640
+ const name = widget.name || widget.key;
641
+ this.formWidgets[name] = widget;
642
+ }
643
+ registerFormFields(formField) {
644
+ const fieldCount = this.formFields.push(formField);
645
+ this.formfields[formField.key] = formField;
646
+ this.registerFormWidget(formField);
647
+ this._debouncedUpdateFieldSource();
648
+ if (this.parentForm) {
649
+ this.parentForm.formFields.push(formField);
650
+ this.parentForm.formfields[formField.key] = formField;
651
+ // inner formfields are pushed to parentForm, passing current innerForm's formdata to set innerFormdata to these innerFormFields
652
+ this.parentForm.setFormData(this.parentForm.formdata, this.formFields, this.formdata || {});
653
+ }
654
+ // WMS-18967: Applying formadata after formfields are ready
655
+ if (fieldCount === this.numberOfFields && !isEmpty(this.formdata)) {
656
+ this.onDataSourceChange();
657
+ isArray(this.formdata) ? this.setFormData(last(this.formdata)) : this.setFormData(this.formdata);
658
+ }
659
+ }
660
+ registerActions(formAction) {
661
+ this.buttonArray.push(formAction);
662
+ }
663
+ // Update the dataoutput whenever there is a change in inside form widget value
664
+ updateFormDataOutput(dataObject) {
665
+ // Set the values of the widgets inside the live form (other than form fields) in form data
666
+ forEach(this.ngform.value, (val, key) => {
667
+ if (!find(this.formFields, { key })) {
668
+ dataObject[key] = val;
669
+ }
670
+ });
671
+ this.dataoutput = dataObject;
672
+ }
673
+ // Construct the data object merging the form fields and custom widgets data
674
+ constructDataObject() {
675
+ const formData = {};
676
+ const formFields = this.getFormFields();
677
+ // Get all form fields and prepare form data as key value pairs
678
+ formFields.forEach(field => {
679
+ let fieldName, fieldValue;
680
+ fieldValue = field.datavalue || field._control.value;
681
+ fieldValue = (fieldValue === null || fieldValue === '') ? undefined : fieldValue;
682
+ if (field.type === 'file') {
683
+ fieldValue = getFiles(this.name, field.key + '_formWidget', field.multiple);
684
+ }
685
+ fieldName = field.key || field.target || field.name;
686
+ // on current Form, when field is innerForm field then we group these fields under new object using formGroupName as key
687
+ // For suppose, applicantName, applicantID are formfields in currentForm
688
+ // This form is having innerform i.e. address, these fields are listed as
689
+ // {"applicantName": "", "applicantID": "", "address": {"street": ""}}
690
+ if (field.form.widgetId !== this.widgetId && field.form.formGroupName) {
691
+ const fd = get(formData, field.form.formGroupName, {});
692
+ fd[fieldName] = fieldValue;
693
+ set(formData, field.form.formGroupName, fd);
694
+ }
695
+ else if ((typeof field.form.formArrayIndex === 'number') && field.form.isParentList && !this.parentForm) { // Fix for [WMS-25806]: use formArrayIndex only if form has a parent form
696
+ // setting formdata based on formArrayIndex
697
+ const fd = get(formData, field.form.parentList.name, []);
698
+ fd[field.form.formArrayIndex] = fd[field.form.formArrayIndex] || {};
699
+ fd[field.form.formArrayIndex][fieldName] = fieldValue;
700
+ set(formData, field.form.parentList.name, fd);
701
+ }
702
+ else {
703
+ // In case of update the field will be already present in form data
704
+ set(formData, fieldName, fieldValue);
705
+ }
706
+ });
707
+ this.updateFormDataOutput(formData);
708
+ return this.dataoutput;
709
+ }
710
+ updateDataOutput() {
711
+ this.constructDataObject();
712
+ if (this.ngform.touched) {
713
+ this.setValidationMsgs(true);
714
+ }
715
+ }
716
+ // FormFields will contain all the fields in parent and inner form also.
717
+ // This returns the formFields in the form based on the form name.
718
+ getFormFields() {
719
+ return filter(this.formFields, formField => {
720
+ return formField.form.name === this.name;
721
+ });
722
+ }
723
+ setFieldValue(field, data, innerFormdata) {
724
+ const key = field.key || field.name;
725
+ // if customfield param value is not in the formdata then do not assign field value
726
+ // as it can contain default value which will again be overridden by undefined.
727
+ const fd = innerFormdata ? innerFormdata : data;
728
+ if (fd) {
729
+ // Fix for [WMS-31245]: when child form has no formdata and if its field has default value,
730
+ // then use default value instead of parent data
731
+ const isInnerFormField = field.form.parentForm?.name == this.name;
732
+ if (isInnerFormField && isEmpty(innerFormdata)) {
733
+ field.value = field.defaultvalue;
734
+ }
735
+ else if (fd.hasOwnProperty(key)) {
736
+ field.value = get(fd, key);
737
+ }
738
+ else if (includes(key, '.')) {
739
+ // key contains '.' when mapping the fields to child reference i.e. childCol is having key as "parent.childCol"
740
+ if (fd.hasOwnProperty(split(key, '.')[0])) {
741
+ field.value = get(fd, key);
742
+ }
743
+ }
744
+ // WMS-18906: For default value, do not mark the form as dirty.
745
+ if (this.dirty && !this._triggeredByUser) {
746
+ this.markAsPristine();
747
+ }
748
+ }
749
+ const formGroupName = field.form.formGroupName;
750
+ /**
751
+ * if formGroupName is defined which means field is inside the inner form
752
+ * then set the formdata on the field's form using formGroupName
753
+ */
754
+ if (formGroupName && get(data, formGroupName)) {
755
+ this.setFormData.call(field.form, data[formGroupName]);
756
+ }
757
+ // if formdata is assigned later then on propertyChangeHandler, even inner forms data also needs to be updated.
758
+ if (get(field.form, 'parentFormArray')) {
759
+ this.setFormDataFromParentFormData.call(field.form, data);
760
+ }
761
+ }
762
+ setFormData(data, innerFormFields, innerFormdata) {
763
+ // whereas formFields explicitly passed can contain innerform fields also.
764
+ const formFields = innerFormFields || this.formFields;
765
+ formFields.forEach(field => {
766
+ this.setFieldValue(field, data, innerFormdata);
767
+ if (field.fieldValidations) {
768
+ field.fieldValidations.setCustomValidationMessage();
769
+ }
770
+ });
771
+ this.constructDataObject();
772
+ }
773
+ resetFormState() {
774
+ // clearing the validationMessages on reset.
775
+ if (this.validationMessages.length) {
776
+ this.validationMessages = [];
777
+ }
778
+ if (!this.ngform) {
779
+ return;
780
+ }
781
+ this.ngform.markAsUntouched();
782
+ this.ngform.markAsPristine();
783
+ }
784
+ reset() {
785
+ this.resetFormState();
786
+ this.formFields.forEach(field => {
787
+ field.value = '';
788
+ if (field.widgettype === 'upload' || field.type === DataType.BLOB) {
789
+ this.resetFileUploadWidget(field, true);
790
+ }
791
+ else if (field.widgettype === 'slider') {
792
+ this.resetSliderWidget(field);
793
+ }
794
+ field.nativeElement.querySelector('input')?.removeAttribute('aria-invalid');
795
+ });
796
+ this.constructDataObject();
797
+ this.clearMessage();
798
+ }
799
+ resetSliderWidget(field) {
800
+ const $formEle = this.$element;
801
+ const slider = $formEle.find('[name="' + field.key + '_formWidget"]').closest('.slider-control');
802
+ if (slider.length) {
803
+ slider.css('--end', `50%`);
804
+ }
805
+ }
806
+ savePrevformFields() {
807
+ this.prevformFields = getClonedObject(this.formFields.map(field => {
808
+ return {
809
+ 'key': field.key,
810
+ 'type': field.type,
811
+ 'widgettype': field.widgettype,
812
+ 'outputformat': field.outputformat,
813
+ 'value': field.value
814
+ };
815
+ }));
816
+ }
817
+ savePrevDataValues() {
818
+ this.prevDataValues = this.formFields.map((obj) => {
819
+ return { 'key': obj.key, 'value': obj.value };
820
+ });
821
+ }
822
+ setReadonlyFields() {
823
+ this.formFields.forEach(field => {
824
+ field.setReadOnlyState();
825
+ });
826
+ }
827
+ resetFileUploadWidget(field, skipValueSet) {
828
+ const $formEle = this.$element;
829
+ $formEle.find('[name="' + field.key + '_formWidget"]').val('');
830
+ field._control.reset();
831
+ if (!skipValueSet) {
832
+ field.href = '';
833
+ field.value = null;
834
+ }
835
+ }
836
+ emptyDataModel() {
837
+ this.formFields.forEach(field => {
838
+ if (isDefined(field)) {
839
+ if (field.type === DataType.BLOB) {
840
+ this.resetFileUploadWidget(field);
841
+ }
842
+ else {
843
+ field.datavalue = '';
844
+ }
845
+ }
846
+ });
847
+ }
848
+ setDefaultValues() {
849
+ this.formFields.forEach(field => {
850
+ this.onFieldDefaultValueChange(field, field.defaultvalue);
851
+ });
852
+ }
853
+ setOperationType(mode) {
854
+ this.operationType = mode || 'insert';
855
+ }
856
+ new() {
857
+ this.resetFormState();
858
+ this.operationType = Live_Operations.INSERT;
859
+ this.clearMessage();
860
+ if (this.isSelected) {
861
+ this.savePrevformFields();
862
+ }
863
+ this.emptyDataModel();
864
+ setTimeout(() => {
865
+ this.setDefaultValues();
866
+ this.savePrevDataValues();
867
+ this.constructDataObject();
868
+ });
869
+ this.isUpdateMode = true;
870
+ }
871
+ edit() {
872
+ this.resetFormState();
873
+ this.clearMessage();
874
+ this.operationType = Live_Operations.UPDATE;
875
+ if (this.isSelected) {
876
+ this.savePrevformFields();
877
+ this.savePrevDataValues();
878
+ }
879
+ this.prevDataObject = getClonedObject(this.formdata || {});
880
+ this.setReadonlyFields();
881
+ this.isUpdateMode = true;
882
+ $appDigest();
883
+ }
884
+ triggerWMEvent(eventName) {
885
+ const tableId = this.nativeElement.getAttribute('dependsontable');
886
+ if (!tableId) {
887
+ return;
888
+ }
889
+ $invokeWatchers(true);
890
+ this.app.notify('wm-event', { eventName, widgetName: tableId });
891
+ }
892
+ submitForm($event) {
893
+ let template, formData, result;
894
+ const dataSource = this.datasource;
895
+ // Disable the form submit if form is in invalid state.
896
+ if (this.validateFieldsOnSubmit()) {
897
+ return;
898
+ }
899
+ formData = getClonedObject(this.constructDataObject());
900
+ const getParams = () => {
901
+ return { $event, $formData: formData, $data: formData };
902
+ };
903
+ if (this.onBeforeSubmitEvt) {
904
+ if (this.invokeEventCallback('beforesubmit', getParams()) === false) {
905
+ return;
906
+ }
907
+ else {
908
+ this.resetFormState();
909
+ }
910
+ }
911
+ else {
912
+ this.resetFormState();
913
+ }
914
+ if (this.onSubmitEvt || dataSource) {
915
+ // If on submit is there execute it and if it returns true do service variable invoke else return
916
+ // If its a service variable call setInput and assign form data and invoke the service
917
+ if (dataSource) {
918
+ const currentPageNum = dataSource.pagination && dataSource.pagination.number + 1;
919
+ const operationType = this.operationType ? this.operationType : 'insert';
920
+ performDataOperation(dataSource, formData, { operationType: operationType })
921
+ .then((data) => {
922
+ if (dataSource.category === 'wm.CrudVariable') {
923
+ this.triggerWMEvent('resetEditMode');
924
+ this.datasource.execute(DataSource.Operation.LIST_RECORDS, {
925
+ 'skipToggleState': true,
926
+ 'operation': 'list',
927
+ 'page': currentPageNum,
928
+ 'preventMissingOpMsg': true
929
+ });
930
+ if (this.dialogId) {
931
+ this.closeDialog();
932
+ }
933
+ }
934
+ if (isDefined(data.body)) {
935
+ result = getValidJSON(data.body);
936
+ result = isDefined(result) ? result : data.body;
937
+ }
938
+ else {
939
+ result = data;
940
+ }
941
+ return {
942
+ 'result': result,
943
+ 'status': true,
944
+ 'message': this.postmessage,
945
+ 'type': 'success'
946
+ };
947
+ }, (error) => {
948
+ template = this.errormessage || error.error || error;
949
+ $appDigest();
950
+ return {
951
+ 'result': get(error, 'error') || error,
952
+ 'status': false,
953
+ 'message': template,
954
+ 'type': 'error'
955
+ };
956
+ }).then(response => {
957
+ if ((response.type === 'error' && !this.onError) || (response.type === 'success' && !this.onSuccess)) {
958
+ this.toggleMessage(true, response.message, response.type);
959
+ }
960
+ this.invokeEventCallback('submit', getParams());
961
+ this.onResultCb(response.result, response.status, $event);
962
+ });
963
+ }
964
+ else {
965
+ this.invokeEventCallback('submit', getParams());
966
+ this.onResultCb({}, true, $event);
967
+ }
968
+ }
969
+ else {
970
+ this.onResultCb({}, true, $event);
971
+ }
972
+ }
973
+ closeDialog() {
974
+ this.dialogService.close(this.dialogId);
975
+ }
976
+ // Method to show/hide the panel header or footer based on the buttons
977
+ showButtons(position) {
978
+ return some(this.buttonArray, btn => {
979
+ return includes(btn.position, position) && btn.updateMode === this.isUpdateMode;
980
+ });
981
+ }
982
+ // Expand or collapse the panel
983
+ expandCollapsePanel() {
984
+ if (this.collapsible) {
985
+ // flip the active flag
986
+ this.expanded = !this.expanded;
987
+ }
988
+ }
989
+ onDataSourceUpdate(response, newForm, updateMode) {
990
+ if (newForm) {
991
+ this.new();
992
+ }
993
+ else {
994
+ this.setFormData(response);
995
+ this.closeDialog();
996
+ }
997
+ this.isUpdateMode = isDefined(updateMode) ? updateMode : true;
998
+ }
999
+ /**
1000
+ * This method tranverses through the parent containing formdata and returns the parent formdata.
1001
+ * @param form, represents the current form instance
1002
+ * @returns {any}
1003
+ */
1004
+ getNearestParentFormData(form) {
1005
+ if (!form.parentForm) {
1006
+ return {};
1007
+ }
1008
+ if (!form.bindformdata && get(form.parentForm, 'formdata') && !isEmpty(form.parentForm.formdata)) {
1009
+ return form.parentForm.formdata;
1010
+ }
1011
+ return this.getNearestParentFormData(form.parentForm);
1012
+ }
1013
+ setFormDataFromParentFormData(formdata) {
1014
+ if (isEmpty(this.formdata) && this.parentForm && formdata) {
1015
+ /**
1016
+ * If form is inside list,
1017
+ * 1. directly applying the formdata to the formArray to update the formdata on list of forms using patchValue.
1018
+ * 2. and also setting individual formdata to the form inside each item based on formArrayIndex, when form is not bound to formdata.
1019
+ * 3. explicitly invoking formdata as formFields will contain all the formfields including innerForm's fields
1020
+ * (if we do not invoke explicitly then formFields will just contain the fields inside current form and not inner form fields)
1021
+ * 4. if childFormArrayData is not available we will check for inner form data using "formGroupName" and will set the innerform data
1022
+ * If not inside list, just set the formdata on all the formfields including innerForm fields
1023
+ */
1024
+ if (this.parentFormArray) {
1025
+ let childFormArrayData = get(formdata, this.parentList.name);
1026
+ if (childFormArrayData) {
1027
+ if (!isArray(childFormArrayData)) {
1028
+ childFormArrayData = [childFormArrayData];
1029
+ }
1030
+ this.parentFormArray.patchValue(childFormArrayData);
1031
+ if (!this.bindformdata) {
1032
+ this.formdata = childFormArrayData[this.formArrayIndex];
1033
+ }
1034
+ this.setFormData(this.formdata);
1035
+ }
1036
+ else if (this.isParentList && this.parentForm.formGroupName) {
1037
+ const parentFormData = get(formdata, this.parentForm.formGroupName);
1038
+ this.setFormDataFromParentFormData(parentFormData);
1039
+ }
1040
+ }
1041
+ else {
1042
+ this.setFormData(formdata);
1043
+ }
1044
+ }
1045
+ }
1046
+ // On form data source change. This method is overridden by live form and live filter
1047
+ onDataSourceChange() {
1048
+ if (get(this.formFields, 'length') && !this.bindformdata) {
1049
+ this.isDataSourceUpdated = true;
1050
+ /**
1051
+ * formdata on the parent form will be set before the inner forms are rendered.
1052
+ * Hence handling formdata on the innerForms, which might be rendered slowly (suppose prefab with form)
1053
+ * setting inner form's formdata obtained from parent formdata
1054
+ * this applies only when formdata is not given on the inner form.
1055
+ */
1056
+ const formdata = this.getNearestParentFormData(this);
1057
+ this.setFormDataFromParentFormData(formdata);
1058
+ }
1059
+ }
1060
+ // On form data source change. This method is overridden by live form and live filter
1061
+ onFormDataSourceChange() {
1062
+ this.updateFieldSource();
1063
+ }
1064
+ // On form field default value change. This method is overridden by live form and live filter
1065
+ onFieldDefaultValueChange(field, nv) {
1066
+ field.value = parseValueByType(nv, undefined, field.widgettype, field.trailingzero);
1067
+ // WMS-22434: For default value set on individual form fields, do not mark the form as dirty.
1068
+ if (this.dirty && !this._triggeredByUser) {
1069
+ this.markAsPristine();
1070
+ }
1071
+ }
1072
+ // On form field value change. This method is overridden by live form and live filter
1073
+ onFieldValueChange() {
1074
+ }
1075
+ // Function to generate and compile the form fields from the metadata
1076
+ async generateFormFields() {
1077
+ let noOfColumns;
1078
+ let $gridLayout;
1079
+ // Check if grid layout is present or not for first time
1080
+ if (isUndefined(this._isGridLayoutPresent)) {
1081
+ this._isGridLayoutPresent = this.$element.find('.panel-body [wmlayoutgrid]').length > 0;
1082
+ }
1083
+ if (this._isGridLayoutPresent) {
1084
+ $gridLayout = this.$element.find('.form-elements [wmlayoutgrid]').first();
1085
+ noOfColumns = Number($gridLayout.attr('columns')) || 1;
1086
+ }
1087
+ else {
1088
+ $gridLayout = this.$element.find('.form-elements .dynamic-form-container');
1089
+ if (!$gridLayout.length) {
1090
+ this.$element.find('.form-elements').prepend('<div class="dynamic-form-container"></div>');
1091
+ $gridLayout = this.$element.find('.form-elements .dynamic-form-container');
1092
+ }
1093
+ noOfColumns = 1;
1094
+ }
1095
+ const columnWidth = 12 / noOfColumns;
1096
+ let fieldTemplate = '';
1097
+ let colCount = 0;
1098
+ let index;
1099
+ let userFields;
1100
+ let fields = this.metadata ? this.metadata.data || this.metadata : [];
1101
+ this.formFields = []; // empty the form fields
1102
+ if (isEmpty(fields)) {
1103
+ return;
1104
+ }
1105
+ if (this.onBeforeRenderEvt) {
1106
+ userFields = this.invokeEventCallback('beforerender', { $metadata: fields });
1107
+ if (userFields) {
1108
+ fields = userFields;
1109
+ }
1110
+ }
1111
+ if (!isArray(fields)) {
1112
+ return;
1113
+ }
1114
+ while (fields[colCount]) {
1115
+ let colTmpl = '';
1116
+ for (index = 0; index < noOfColumns; index++) {
1117
+ if (fields[colCount]) {
1118
+ colTmpl += setMarkupForFormField(fields[colCount], columnWidth);
1119
+ }
1120
+ colCount++;
1121
+ }
1122
+ fieldTemplate += `<wm-gridrow>${colTmpl}</wm-gridrow>`;
1123
+ }
1124
+ if (!this._isGridLayoutPresent) {
1125
+ fieldTemplate = `<wm-layoutgrid>${fieldTemplate}</wm-layoutgrid>`;
1126
+ }
1127
+ this.dynamicFormRef.clear();
1128
+ // Setup dynamic context for the form component
1129
+ if (!this._dynamicContext) {
1130
+ this._dynamicContext = Object.create(this.viewParent);
1131
+ this._dynamicContext.form = this;
1132
+ }
1133
+ try {
1134
+ // Generate unique component selector for this dynamic form instance
1135
+ const componentSelector = `app-form-dynamic-${this.widgetId}`;
1136
+ // Get the dynamically compiled form component class
1137
+ const DynamicFormComponentClass = await this.dynamicComponentProvider.getComponentFactoryRef(componentSelector, fieldTemplate, {
1138
+ noCache: true,
1139
+ transpile: true
1140
+ });
1141
+ if (!DynamicFormComponentClass) {
1142
+ console.error(`Failed to create dynamic form component: ${componentSelector}`);
1143
+ return;
1144
+ }
1145
+ // Create component with both environmentInjector (for standalone imports/providers)
1146
+ // and injector (for element-level dependencies)
1147
+ const componentRef = this.dynamicFormRef.createComponent(DynamicFormComponentClass, {
1148
+ index: 0,
1149
+ environmentInjector: this.envInjector,
1150
+ injector: this.inj
1151
+ });
1152
+ // Extend component instance with dynamic context
1153
+ extendProto(componentRef.instance, this._dynamicContext);
1154
+ // Append to DOM
1155
+ if ($gridLayout[0]) {
1156
+ $gridLayout[0].appendChild(componentRef.location.nativeElement);
1157
+ }
1158
+ else {
1159
+ console.error('Form grid layout element not found');
1160
+ }
1161
+ // Set form data after component creation
1162
+ this.setFormData(this.formdata);
1163
+ }
1164
+ catch (error) {
1165
+ console.error('Error creating dynamic form component:', error);
1166
+ }
1167
+ }
1168
+ get mode() {
1169
+ return this.operationType || this.findOperationType();
1170
+ }
1171
+ get dirty() {
1172
+ return this.ngform && this.ngform.dirty;
1173
+ }
1174
+ /**
1175
+ * This method sets the form state to pristine by internally calling angular markAsPristine method on the form
1176
+ * @param value, When true, mark only this control. When false or not supplied, marks all direct ancestors. Default is false
1177
+ * @returns {void}
1178
+ */
1179
+ markAsPristine(value = false) {
1180
+ this.ngform.markAsPristine({ onlySelf: value });
1181
+ }
1182
+ /**
1183
+ * This method sets the form state to dirty by internally calling angular markAsDirty method on the form
1184
+ * @param value, When true, mark only this control. When false or not supplied, marks all direct ancestors. Default is false
1185
+ * @returns {void}
1186
+ */
1187
+ markAsDirty(value = false) {
1188
+ this.ngform.markAsDirty({ onlySelf: value });
1189
+ }
1190
+ get invalid() {
1191
+ return this.ngform && this.ngform.invalid;
1192
+ }
1193
+ get touched() {
1194
+ return this.ngform && this.ngform.touched;
1195
+ }
1196
+ get valid() {
1197
+ return this.ngform && this.ngform.valid;
1198
+ }
1199
+ get pristine() {
1200
+ return this.ngform && this.ngform.pristine;
1201
+ }
1202
+ /**
1203
+ * This method sets the form state to touched by internally calling angular markAsTouched method on the form
1204
+ * @param value, When true, mark only this control. When false or not supplied, marks all direct ancestors. Default is false
1205
+ * @returns {void}
1206
+ */
1207
+ markAsTouched(value = false) {
1208
+ this.ngform.markAsTouched({ onlySelf: value });
1209
+ }
1210
+ /**
1211
+ * This method sets the form state to untouched by internally calling angular markAsUntouched method on the form
1212
+ * @param value, When true, mark only this control. When false or not supplied, marks all direct ancestors. Default is false
1213
+ * @returns {void}
1214
+ */
1215
+ markAsUntouched(value = false) {
1216
+ this.ngform.markAsUntouched({ onlySelf: value });
1217
+ }
1218
+ invokeActionEvent($event, expression) {
1219
+ const fn = $parseEvent(expression);
1220
+ fn(this.viewParent, Object.assign(this.context, { $event }));
1221
+ }
1222
+ ngOnDestroy() {
1223
+ // on form destroy, removing this form from the parentForm too.
1224
+ const controls = this.parentForm && get(this.parentForm, 'ngform.controls');
1225
+ if (controls) {
1226
+ // when current form is inside the list (i.e. incase of formArray).
1227
+ if (get(this.parentList, 'name') && controls.hasOwnProperty(this.parentList.name)) {
1228
+ //get the index of current form in the list and remove the FormControl from FormArray
1229
+ const index = findIndex(this.parentList.getWidgets(this.name), { widgetId: this.widgetId });
1230
+ this.parentForm.ngform.controls[this.parentList.name].removeAt(index);
1231
+ }
1232
+ // when we have formGroupName set i.e. multiple formInstance with counter appended to formName
1233
+ if (this.formGroupName && controls.hasOwnProperty(this.formGroupName)) {
1234
+ this.parentForm.ngform.removeControl(this.formGroupName);
1235
+ }
1236
+ else {
1237
+ this.parentForm.ngform.removeControl(this.name);
1238
+ }
1239
+ }
1240
+ // MEMORY LEAK FIX: Clear ViewContainerRef for dynamically generated form fields
1241
+ if (this.dynamicFormRef) {
1242
+ this.dynamicFormRef.clear();
1243
+ }
1244
+ // MEMORY LEAK FIX: Clear dynamic context object
1245
+ if (this._dynamicContext) {
1246
+ Object.keys(this._dynamicContext).forEach(key => {
1247
+ delete this._dynamicContext[key];
1248
+ });
1249
+ this._dynamicContext = null;
1250
+ }
1251
+ // MEMORY LEAK FIX: Clear all data arrays and objects
1252
+ this.formFields = [];
1253
+ this.formWidgets = {};
1254
+ this.filterWidgets = {};
1255
+ this.buttonArray = [];
1256
+ this.validationMessages = [];
1257
+ this.formdata = {};
1258
+ this.dataoutput = {};
1259
+ this.formfields = {};
1260
+ this.prevDataValues = null;
1261
+ this.prevDataObject = null;
1262
+ this.prevformFields = null;
1263
+ // MEMORY LEAK FIX: Nullify debounced function closures
1264
+ this._debouncedUpdateFieldSource = null;
1265
+ this._debouncedSubmitForm = null;
1266
+ super.ngOnDestroy();
1267
+ }
1268
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormComponent, deps: [{ token: i0.Injector }, { token: i0.EnvironmentInjector }, { token: i1.FormBuilder }, { token: i1$1.App }, { token: i1$1.AbstractDialogService }, { token: i1$1.DynamicComponentRefProvider }, { token: i0.NgZone }, { token: i3.ListComponent, optional: true }, { token: FormComponent, optional: true, skipSelf: true }, { token: i4.PrefabDirective, optional: true, skipSelf: true }, { token: i5.PartialDirective, optional: true, skipSelf: true }, { token: 'beforesubmit.event', attribute: true }, { token: 'submit.event', attribute: true }, { token: 'beforerender.event', attribute: true }, { token: 'dataset.bind', attribute: true }, { token: 'formdata.bind', attribute: true }, { token: 'wmLiveForm', attribute: true }, { token: 'wmLiveFilter', attribute: true }, { token: 'data-role', attribute: true }, { token: 'key', attribute: true }, { token: 'name', attribute: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
1269
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: FormComponent, isStandalone: true, selector: "form[wmForm]", host: { listeners: { "submit": "submit($event)", "reset": "onReset()", "keydown": "onKeydownHandler($event)" }, properties: { "action": "this.action" } }, providers: [
1270
+ provideAsWidgetRef(FormComponent)
1271
+ ], queries: [{ propertyName: "componentRefs", predicate: WidgetRef, descendants: true }], viewQueries: [{ propertyName: "dynamicFormRef", first: true, predicate: ["dynamicForm"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "messageRef", first: true, predicate: MessageComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #content><ng-content></ng-content></ng-template>\n\n@if (formlayout === 'page') {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n} @else {\n @if (!isLayoutDialog && (title || subheading || iconclass || iconurl || showButtons('header'))) {\n <div class=\"panel-heading\">\n <h3 class=\"panel-title\">\n <div class=\"pull-left\">\n @if (iconclass || iconurl) {\n <wm-app-icon [iconclass]=\"iconclass\" [iconurl]=\"iconurl\" [iconClasses]=\"iconurl ? 'panel-image-icon' : 'panel-icon'\" alt=\"Form icon\"></wm-app-icon>\n }\n </div>\n <div class=\"pull-left\">\n <div class=\"heading\" [innerHTML]=\"title\"></div>\n <div class=\"description\" [innerHTML]=\"subheading\"></div>\n </div>\n <div class=\"form-action panel-actions basic-btn-grp\">\n @for (btn of buttonArray | filter : 'position' : 'header'; track btn; let index = $index) {\n <ng-container\n [ngTemplateOutlet]=\"btn.widgetType === 'button' ? buttonRef : anchorRef\"\n [ngTemplateOutletContext]=\"{btn:btn}\"\n [ngTemplateOutletInjector]=\"createCustomInjector('action_header_' + index, {btn:btn})\">\n </ng-container>\n }\n @if (collapsible) {\n <button type=\"button\" class=\"app-icon wi panel-action\" [title]=\"expanded? (appLocale?.LABEL_COLLAPSE||'Collapse'):(appLocale?.LABEL_EXPAND||'Expand')\"\n [ngClass]=\"expanded ? 'wi-minus': 'wi-plus'\" (click)=\"expandCollapsePanel();\"></button>\n }\n </div>\n </h3>\n </div>\n }\n <div class=\"panel-body\" [ngClass]=\"{'form-elements': isLayoutDialog, 'form-body': !isLayoutDialog}\" [class.hidden]=\"!expanded\">\n @if (!!statusMessage.caption) {\n <p wmMessage [attr.aria-hidden]=\"!statusMessage.caption\" [attr.aria-label]=\"statusMessage.caption\" caption.bind=\"statusMessage.caption\" type.bind=\"statusMessage.type\"></p>\n }\n <div [ngClass]=\"{'form-elements': !isLayoutDialog, 'form-content': isLayoutDialog}\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n <div class=\"basic-btn-grp form-action panel-footer clearfix\" [ngClass]=\"{'modal-footer': isLayoutDialog}\" [class.hidden]=\"!expanded || !showButtons('footer')\">\n @for (btn of buttonArray | filter : 'position' : 'footer'; track btn; let index = $index) {\n <ng-container\n [ngTemplateOutlet]=\"btn.widgetType === 'button' ? buttonRef : anchorRef\"\n [ngTemplateOutletContext]=\"{btn:btn}\"\n [ngTemplateOutletInjector]=\"createCustomInjector('action_footer_' + index, {btn:btn})\">\n </ng-container>\n }\n </div>\n </div>\n}\n\n\n\n<ng-template #buttonRef let-btn=\"btn\">\n <button wmButton name=\"{{btn.key}}\" caption.bind=\"btn.displayName\" class.bind=\"btn.class\" iconclass.bind=\"btn.iconclass\" show.bind=\"btn.show\"\n (click)=\"invokeActionEvent($event, btn.action)\" type.bind=\"btn.type\" hint.bind=\"btn.title\" shortcutkey.bind=\"btn.shortcutkey\" disabled.bind=\"ngform.status === 'PENDING' || btn.disabled\"\n tabindex.bind=\"btn.tabindex\" [attr.aria-label]=\"btn.displayName\" [class.hidden]=\"btn.updateMode ? !isUpdateMode : isUpdateMode\"></button>\n</ng-template>\n\n<ng-template #anchorRef let-btn=\"btn\">\n <a wmAnchor name=\"{{btn.key}}\" caption.bind=\"btn.displayName\" class.bind=\"btn.class\" iconclass.bind=\"btn.iconclass\" show.bind=\"btn.show\"\n (click)=\"invokeActionEvent($event, btn.action)\" hint.bind=\"btn.title\" shortcutkey.bind=\"btn.shortcutkey\"\n hyperlink.bind=\"btn.hyperlink\" target.bind=\"btn.target\"\n tabindex.bind=\"btn.tabindex\" [class.hidden]=\"btn.updateMode ? !isUpdateMode : isUpdateMode\"></a>\n</ng-template>\n\n<ng-container #dynamicForm></ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AnchorComponent, selector: "a[wmAnchor]", exportAs: ["wmAnchor"] }, { kind: "component", type: ButtonComponent, selector: "button[wmButton]", exportAs: ["wmButton"] }, { kind: "component", type: MessageComponent, selector: "[wmMessage]", exportAs: ["wmMessage"] }, { kind: "component", type: WmAppIconComponent, selector: "wm-app-icon", inputs: ["icon", "iconclass", "iconurl", "defaultIconClass", "defaultClasses", "iconStyle", "alt"] }, { kind: "pipe", type: FilterPipe, name: "filter" }] }); }
1272
+ }
1273
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormComponent, decorators: [{
1274
+ type: Component,
1275
+ args: [{ standalone: true, imports: [CommonModule, FilterPipe, AnchorComponent, ButtonComponent, MessageComponent, WmAppIconComponent], selector: 'form[wmForm]', providers: [
1276
+ provideAsWidgetRef(FormComponent)
1277
+ ], template: "<ng-template #content><ng-content></ng-content></ng-template>\n\n@if (formlayout === 'page') {\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n} @else {\n @if (!isLayoutDialog && (title || subheading || iconclass || iconurl || showButtons('header'))) {\n <div class=\"panel-heading\">\n <h3 class=\"panel-title\">\n <div class=\"pull-left\">\n @if (iconclass || iconurl) {\n <wm-app-icon [iconclass]=\"iconclass\" [iconurl]=\"iconurl\" [iconClasses]=\"iconurl ? 'panel-image-icon' : 'panel-icon'\" alt=\"Form icon\"></wm-app-icon>\n }\n </div>\n <div class=\"pull-left\">\n <div class=\"heading\" [innerHTML]=\"title\"></div>\n <div class=\"description\" [innerHTML]=\"subheading\"></div>\n </div>\n <div class=\"form-action panel-actions basic-btn-grp\">\n @for (btn of buttonArray | filter : 'position' : 'header'; track btn; let index = $index) {\n <ng-container\n [ngTemplateOutlet]=\"btn.widgetType === 'button' ? buttonRef : anchorRef\"\n [ngTemplateOutletContext]=\"{btn:btn}\"\n [ngTemplateOutletInjector]=\"createCustomInjector('action_header_' + index, {btn:btn})\">\n </ng-container>\n }\n @if (collapsible) {\n <button type=\"button\" class=\"app-icon wi panel-action\" [title]=\"expanded? (appLocale?.LABEL_COLLAPSE||'Collapse'):(appLocale?.LABEL_EXPAND||'Expand')\"\n [ngClass]=\"expanded ? 'wi-minus': 'wi-plus'\" (click)=\"expandCollapsePanel();\"></button>\n }\n </div>\n </h3>\n </div>\n }\n <div class=\"panel-body\" [ngClass]=\"{'form-elements': isLayoutDialog, 'form-body': !isLayoutDialog}\" [class.hidden]=\"!expanded\">\n @if (!!statusMessage.caption) {\n <p wmMessage [attr.aria-hidden]=\"!statusMessage.caption\" [attr.aria-label]=\"statusMessage.caption\" caption.bind=\"statusMessage.caption\" type.bind=\"statusMessage.type\"></p>\n }\n <div [ngClass]=\"{'form-elements': !isLayoutDialog, 'form-content': isLayoutDialog}\">\n <ng-container *ngTemplateOutlet=\"content\"></ng-container>\n </div>\n <div class=\"basic-btn-grp form-action panel-footer clearfix\" [ngClass]=\"{'modal-footer': isLayoutDialog}\" [class.hidden]=\"!expanded || !showButtons('footer')\">\n @for (btn of buttonArray | filter : 'position' : 'footer'; track btn; let index = $index) {\n <ng-container\n [ngTemplateOutlet]=\"btn.widgetType === 'button' ? buttonRef : anchorRef\"\n [ngTemplateOutletContext]=\"{btn:btn}\"\n [ngTemplateOutletInjector]=\"createCustomInjector('action_footer_' + index, {btn:btn})\">\n </ng-container>\n }\n </div>\n </div>\n}\n\n\n\n<ng-template #buttonRef let-btn=\"btn\">\n <button wmButton name=\"{{btn.key}}\" caption.bind=\"btn.displayName\" class.bind=\"btn.class\" iconclass.bind=\"btn.iconclass\" show.bind=\"btn.show\"\n (click)=\"invokeActionEvent($event, btn.action)\" type.bind=\"btn.type\" hint.bind=\"btn.title\" shortcutkey.bind=\"btn.shortcutkey\" disabled.bind=\"ngform.status === 'PENDING' || btn.disabled\"\n tabindex.bind=\"btn.tabindex\" [attr.aria-label]=\"btn.displayName\" [class.hidden]=\"btn.updateMode ? !isUpdateMode : isUpdateMode\"></button>\n</ng-template>\n\n<ng-template #anchorRef let-btn=\"btn\">\n <a wmAnchor name=\"{{btn.key}}\" caption.bind=\"btn.displayName\" class.bind=\"btn.class\" iconclass.bind=\"btn.iconclass\" show.bind=\"btn.show\"\n (click)=\"invokeActionEvent($event, btn.action)\" hint.bind=\"btn.title\" shortcutkey.bind=\"btn.shortcutkey\"\n hyperlink.bind=\"btn.hyperlink\" target.bind=\"btn.target\"\n tabindex.bind=\"btn.tabindex\" [class.hidden]=\"btn.updateMode ? !isUpdateMode : isUpdateMode\"></a>\n</ng-template>\n\n<ng-container #dynamicForm></ng-container>\n" }]
1278
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: i0.EnvironmentInjector }, { type: i1.FormBuilder }, { type: i1$1.App }, { type: i1$1.AbstractDialogService }, { type: i1$1.DynamicComponentRefProvider }, { type: i0.NgZone }, { type: i3.ListComponent, decorators: [{
1279
+ type: Optional
1280
+ }] }, { type: FormComponent, decorators: [{
1281
+ type: SkipSelf
1282
+ }, {
1283
+ type: Optional
1284
+ }] }, { type: i4.PrefabDirective, decorators: [{
1285
+ type: SkipSelf
1286
+ }, {
1287
+ type: Optional
1288
+ }] }, { type: i5.PartialDirective, decorators: [{
1289
+ type: SkipSelf
1290
+ }, {
1291
+ type: Optional
1292
+ }] }, { type: undefined, decorators: [{
1293
+ type: Attribute,
1294
+ args: ['beforesubmit.event']
1295
+ }] }, { type: undefined, decorators: [{
1296
+ type: Attribute,
1297
+ args: ['submit.event']
1298
+ }] }, { type: undefined, decorators: [{
1299
+ type: Attribute,
1300
+ args: ['beforerender.event']
1301
+ }] }, { type: undefined, decorators: [{
1302
+ type: Attribute,
1303
+ args: ['dataset.bind']
1304
+ }] }, { type: undefined, decorators: [{
1305
+ type: Attribute,
1306
+ args: ['formdata.bind']
1307
+ }] }, { type: undefined, decorators: [{
1308
+ type: Attribute,
1309
+ args: ['wmLiveForm']
1310
+ }] }, { type: undefined, decorators: [{
1311
+ type: Attribute,
1312
+ args: ['wmLiveFilter']
1313
+ }] }, { type: undefined, decorators: [{
1314
+ type: Attribute,
1315
+ args: ['data-role']
1316
+ }] }, { type: undefined, decorators: [{
1317
+ type: Attribute,
1318
+ args: ['key']
1319
+ }] }, { type: undefined, decorators: [{
1320
+ type: Attribute,
1321
+ args: ['name']
1322
+ }] }, { type: undefined, decorators: [{
1323
+ type: Inject,
1324
+ args: ['EXPLICIT_CONTEXT']
1325
+ }, {
1326
+ type: Optional
1327
+ }] }], propDecorators: { dynamicFormRef: [{
1328
+ type: ViewChild,
1329
+ args: ['dynamicForm', { static: true, read: ViewContainerRef }]
1330
+ }], messageRef: [{
1331
+ type: ViewChild,
1332
+ args: [MessageComponent]
1333
+ }], componentRefs: [{
1334
+ type: ContentChildren,
1335
+ args: [WidgetRef, { descendants: true }]
1336
+ }], action: [{
1337
+ type: HostBinding,
1338
+ args: ['action']
1339
+ }], submit: [{
1340
+ type: HostListener,
1341
+ args: ['submit', ['$event']]
1342
+ }], onReset: [{
1343
+ type: HostListener,
1344
+ args: ['reset']
1345
+ }], onKeydownHandler: [{
1346
+ type: HostListener,
1347
+ args: ['keydown', ['$event']]
1348
+ }] } });
1349
+
1350
+ class FormWidgetDirective {
1351
+ constructor(form, table, componentInstance, fb, name, key) {
1352
+ this.componentInstance = componentInstance;
1353
+ this.name = name;
1354
+ this.key = key;
1355
+ this.fb = fb;
1356
+ this.parent = form || table;
1357
+ this.ngform = this.parent.ngform;
1358
+ this.componentInstance.registerPropertyChangeListener((k, nv) => {
1359
+ if (k === 'datavalue' && this._control) {
1360
+ this._control.setValue(nv);
1361
+ }
1362
+ else if (k === 'name' && !this._control) {
1363
+ this.addControl(this.key || nv);
1364
+ }
1365
+ });
1366
+ }
1367
+ get _control() {
1368
+ const fieldName = this.key || this.name;
1369
+ if (!fieldName) {
1370
+ return undefined;
1371
+ }
1372
+ return this.ngform && this.ngform.controls[fieldName];
1373
+ }
1374
+ addControl(fieldName) {
1375
+ this.ngform.addControl(fieldName, this.createControl());
1376
+ }
1377
+ createControl() {
1378
+ return this.fb.control(this.componentInstance.datavalue);
1379
+ }
1380
+ ngOnInit() {
1381
+ const fieldName = this.key || this.name;
1382
+ if (fieldName && !this._control) {
1383
+ this.addControl(fieldName);
1384
+ this.parent.registerFormWidget(this.componentInstance);
1385
+ }
1386
+ }
1387
+ ngOnDestroy() {
1388
+ // MEMORY LEAK FIX: Clear all references
1389
+ this.ngform = null;
1390
+ this.fb = null;
1391
+ this.parent = null;
1392
+ this.componentInstance = null;
1393
+ }
1394
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormWidgetDirective, deps: [{ token: FormComponent, optional: true }, { token: TableComponent, optional: true }, { token: WidgetRef, self: true }, { token: i1.FormBuilder }, { token: 'name', attribute: true }, { token: 'key', attribute: true }], target: i0.ɵɵFactoryTarget.Directive }); }
1395
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.19", type: FormWidgetDirective, isStandalone: true, selector: "[wmFormWidget]", ngImport: i0 }); }
1396
+ }
1397
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormWidgetDirective, decorators: [{
1398
+ type: Directive,
1399
+ args: [{
1400
+ standalone: true,
1401
+ selector: '[wmFormWidget]'
1402
+ }]
1403
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
1404
+ type: Optional
1405
+ }, {
1406
+ type: Inject,
1407
+ args: [FormComponent]
1408
+ }] }, { type: undefined, decorators: [{
1409
+ type: Optional
1410
+ }, {
1411
+ type: Inject,
1412
+ args: [TableComponent]
1413
+ }] }, { type: undefined, decorators: [{
1414
+ type: Self
1415
+ }, {
1416
+ type: Inject,
1417
+ args: [WidgetRef]
1418
+ }] }, { type: i1.FormBuilder }, { type: undefined, decorators: [{
1419
+ type: Attribute,
1420
+ args: ['name']
1421
+ }] }, { type: undefined, decorators: [{
1422
+ type: Attribute,
1423
+ args: ['key']
1424
+ }] }] });
1425
+
1426
+ const registerProps$1 = () => {
1427
+ register('wm-form-action', new Map([
1428
+ ['accessroles', PROP_STRING],
1429
+ ['action', PROP_STRING],
1430
+ ['class', PROP_STRING],
1431
+ ['binding', PROP_STRING],
1432
+ ['disabled', PROP_BOOLEAN],
1433
+ ['display-name', PROP_STRING],
1434
+ ['hyperlink', PROP_STRING],
1435
+ ['iconclass', PROP_STRING],
1436
+ ['iconname', PROP_STRING],
1437
+ ['key', PROP_STRING],
1438
+ ['position', { value: 'footer', ...PROP_STRING }],
1439
+ ['shortcutkey', PROP_STRING],
1440
+ ['show', { value: true, ...PROP_BOOLEAN }],
1441
+ ['tabindex', { value: 0, ...PROP_NUMBER }],
1442
+ ['target', PROP_STRING],
1443
+ ['title', PROP_STRING],
1444
+ ['type', { value: 'button', ...PROP_STRING }],
1445
+ ['update-mode', { value: true, ...PROP_BOOLEAN }],
1446
+ ['widget-type', { value: 'button', ...PROP_STRING }]
1447
+ ]));
1448
+ };
1449
+
1450
+ const WIDGET_CONFIG = { widgetType: 'wm-form-action', hostClass: '' };
1451
+ class FormActionDirective extends BaseComponent {
1452
+ static { this.initializeProps = registerProps$1(); }
1453
+ constructor(inj, form, explicitContext) {
1454
+ super(inj, WIDGET_CONFIG, explicitContext);
1455
+ this.form = form;
1456
+ }
1457
+ populateAction() {
1458
+ this.buttonDef = {
1459
+ key: this.key || this.binding,
1460
+ displayName: this['display-name'],
1461
+ show: this.show,
1462
+ class: this.class ? this.class : (this['widget-type'] === 'button' ? 'btn-secondary' : ''),
1463
+ iconclass: this.iconclass || '',
1464
+ title: isUndefined(this.title) ? (this['display-name'] || '') : this.title,
1465
+ action: this.action,
1466
+ accessroles: this.accessroles,
1467
+ shortcutkey: this.shortcutkey,
1468
+ disabled: this.disabled || this.form.readonly,
1469
+ tabindex: this.tabindex,
1470
+ iconname: this.iconname,
1471
+ type: this.type,
1472
+ updateMode: this['update-mode'],
1473
+ position: this.position,
1474
+ widgetType: this['widget-type'],
1475
+ hyperlink: this.hyperlink,
1476
+ target: this.target
1477
+ };
1478
+ this._propsInitialized = true;
1479
+ }
1480
+ ngOnInit() {
1481
+ super.ngOnInit();
1482
+ this.populateAction();
1483
+ this.form.registerActions(this.buttonDef);
1484
+ }
1485
+ onPropertyChange(key, nv, ov) {
1486
+ if (!this._propsInitialized) {
1487
+ return;
1488
+ }
1489
+ switch (key) {
1490
+ case 'disabled':
1491
+ this.buttonDef[key] = nv || this.form.readonly;
1492
+ break;
1493
+ case 'display-name':
1494
+ this.buttonDef.displayName = nv;
1495
+ default:
1496
+ this.buttonDef[key] = nv;
1497
+ break;
1498
+ }
1499
+ }
1500
+ ngOnDestroy() {
1501
+ // MEMORY LEAK FIX: Clear references
1502
+ this.form = null;
1503
+ this.buttonDef = null;
1504
+ super.ngOnDestroy();
1505
+ }
1506
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormActionDirective, deps: [{ token: i0.Injector }, { token: FormComponent, optional: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
1507
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.19", type: FormActionDirective, isStandalone: true, selector: "[wmFormAction]", providers: [
1508
+ provideAsWidgetRef(FormActionDirective)
1509
+ ], usesInheritance: true, ngImport: i0 }); }
1510
+ }
1511
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormActionDirective, decorators: [{
1512
+ type: Directive,
1513
+ args: [{
1514
+ standalone: true,
1515
+ selector: '[wmFormAction]',
1516
+ providers: [
1517
+ provideAsWidgetRef(FormActionDirective)
1518
+ ]
1519
+ }]
1520
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: FormComponent, decorators: [{
1521
+ type: Optional
1522
+ }] }, { type: undefined, decorators: [{
1523
+ type: Inject,
1524
+ args: ['EXPLICIT_CONTEXT']
1525
+ }, {
1526
+ type: Optional
1527
+ }] }] });
1528
+
1529
+ const registerProps = () => {
1530
+ const formFieldMap = new Map([
1531
+ ['dataentrymode', { value: 'default', ...PROP_STRING }],
1532
+ ['debouncetime', { value: 250, ...PROP_NUMBER }],
1533
+ ['defaultvalue', PROP_STRING],
1534
+ ['displayname', PROP_STRING],
1535
+ ['display-name', PROP_STRING],
1536
+ ['field', PROP_STRING],
1537
+ ['filterexpressions', PROP_STRING],
1538
+ ['filter-on', PROP_STRING],
1539
+ ['generator', PROP_STRING],
1540
+ ['hint', PROP_STRING],
1541
+ ['inputtype', PROP_STRING],
1542
+ ['is-primary-key', PROP_BOOLEAN],
1543
+ ['is-range', PROP_BOOLEAN],
1544
+ ['is-related', PROP_BOOLEAN],
1545
+ ['isformfield', { value: true }],
1546
+ ['key', PROP_STRING],
1547
+ ['limit', PROP_NUMBER],
1548
+ ['lookup-type', PROP_STRING],
1549
+ ['lookup-field', PROP_STRING],
1550
+ ['name', PROP_STRING],
1551
+ ['matchmode', PROP_STRING],
1552
+ ['maxdefaultvalue', PROP_STRING],
1553
+ ['maxplaceholder', PROP_STRING],
1554
+ ['mobile-display', { value: true, ...PROP_BOOLEAN }],
1555
+ ['period', PROP_BOOLEAN],
1556
+ ['pc-display', { value: true, ...PROP_BOOLEAN }],
1557
+ ['placeholder', PROP_STRING],
1558
+ ['primary-key', PROP_BOOLEAN],
1559
+ ['related-entity-name', PROP_STRING],
1560
+ ['required', PROP_BOOLEAN],
1561
+ ['show', { value: true, ...PROP_BOOLEAN }],
1562
+ ['tablet-display', { value: true, ...PROP_BOOLEAN }],
1563
+ ['type', PROP_STRING],
1564
+ ['validationmessage', PROP_STRING],
1565
+ ['viewmodewidget', PROP_STRING],
1566
+ ['widgettype', PROP_STRING]
1567
+ ]);
1568
+ for (const key in FormWidgetType) {
1569
+ const widgetName = 'wm-form-field-' + FormWidgetType[key];
1570
+ const widgetProps = getWidgetPropsByType(widgetName);
1571
+ formFieldMap.forEach((v, k) => {
1572
+ if (widgetProps.get(k) == undefined) {
1573
+ widgetProps.set(k, v);
1574
+ }
1575
+ });
1576
+ }
1577
+ };
1578
+
1579
+ // Custom validator to show validation error, if setValidationMessage method is used
1580
+ const customValidatorFn = () => {
1581
+ return { custom: true };
1582
+ };
1583
+ const FILE_TYPES = {
1584
+ 'image': 'image/*',
1585
+ 'video': 'video/*',
1586
+ 'audio': 'audio/*'
1587
+ };
1588
+ class FormFieldDirective extends StylableComponent {
1589
+ static { this.initializeProps = registerProps(); }
1590
+ onKeydownHandler(event) {
1591
+ this._triggeredByUser = true;
1592
+ }
1593
+ handleClick(event) {
1594
+ this._clicktriggeredByUser = true;
1595
+ }
1596
+ constructor(inj, form, fb, viewport, app, parentList, bindChipclass, binddataset, binddisplayexpression, binddisplaylabel, _widgetType, name, binddisplayimagesrc, key, isRange, pcDisplay, mobileDisplay, tabletDisplay, contexts, explicitContext) {
1597
+ const WIDGET_CONFIG = {
1598
+ widgetType: 'wm-form-field',
1599
+ hostClass: '',
1600
+ widgetSubType: 'wm-form-field-' + (_widgetType || FormWidgetType.TEXT).trim()
1601
+ };
1602
+ let resolveFn = noop$1;
1603
+ super(inj, WIDGET_CONFIG, explicitContext, new Promise(res => resolveFn = res));
1604
+ this._initPropsRes = resolveFn;
1605
+ this.app = app;
1606
+ this.fieldDefConfig = {};
1607
+ this.class = '';
1608
+ this.binddataset = binddataset;
1609
+ this.binddisplayimagesrc = binddisplayimagesrc;
1610
+ this.binddisplayexpression = binddisplayexpression;
1611
+ this.bindChipclass = bindChipclass;
1612
+ this.binddisplaylabel = binddisplaylabel;
1613
+ this.form = form;
1614
+ this.fb = fb;
1615
+ this.viewport = viewport;
1616
+ this._fieldName = key || name;
1617
+ this.isRange = isRange;
1618
+ this.excludeProps = new Set(['type', 'name']);
1619
+ this.widgettype = _widgetType;
1620
+ this.parentList = parentList;
1621
+ this.notifyForFields = [];
1622
+ if (this.binddataset || this.$element.attr('dataset')) {
1623
+ this.isDataSetBound = true;
1624
+ }
1625
+ contexts[0]._onFocusField = this._onFocusField.bind(this);
1626
+ contexts[0]._onBlurField = this._onBlurField.bind(this);
1627
+ this._debounceSetUpValidators = debounce$1(() => this.setUpValidators(), 500);
1628
+ }
1629
+ _onFocusField($evt) {
1630
+ this._activeField = true;
1631
+ $($evt.target).closest('.live-field').addClass('active');
1632
+ }
1633
+ // Function to get the active element markup based on widget type
1634
+ getActiveElement() {
1635
+ const widgetType = this.nativeElement.getAttribute('widgettype');
1636
+ switch (widgetType) {
1637
+ case 'select':
1638
+ return this.nativeElement.querySelector('select');
1639
+ case 'textarea':
1640
+ return this.nativeElement.querySelector('textarea');
1641
+ default:
1642
+ return this.nativeElement.querySelector('input');
1643
+ }
1644
+ }
1645
+ setAriaAttributes() {
1646
+ const element = this.getActiveElement();
1647
+ if (this.ngform.controls[this._fieldName].invalid && this.ngform.controls[this._fieldName].touched && this.form.isUpdateMode) {
1648
+ this.nativeElement.setAttribute('__errormsg', `${this.nativeElement.getAttribute('__validationId')}`);
1649
+ element?.setAttribute('aria-invalid', `${this.ngform.controls[this._fieldName].invalid}`);
1650
+ element?.setAttribute('aria-describedby', `${this.nativeElement.getAttribute('__validationId')}`);
1651
+ }
1652
+ else {
1653
+ this.nativeElement.removeAttribute('__errormsg');
1654
+ element?.removeAttribute('aria-invalid');
1655
+ element?.removeAttribute('aria-describedby');
1656
+ }
1657
+ }
1658
+ _onBlurField($evt) {
1659
+ $($evt.target).closest('.live-field').removeClass('active');
1660
+ const ele = this.nativeElement.querySelector('p.text-danger');
1661
+ // Fix for [WMS-23959]: ADA issue - adding aria-describedby, aria-invalid, __errormsg attributes only when the form field is invalid , else removing the attributes
1662
+ this.setAriaAttributes();
1663
+ this._activeField = false;
1664
+ this._triggeredByUser = false;
1665
+ this._clicktriggeredByUser = false;
1666
+ }
1667
+ // Expression to be evaluated in view mode of form field
1668
+ evaluateExpr(object, displayField, displayExpr) {
1669
+ if (!displayExpr || !displayField) {
1670
+ displayField = Object.keys(object)[0];
1671
+ // If dataset is not ready, display expression will not be defined
1672
+ if (!displayField) {
1673
+ return;
1674
+ }
1675
+ }
1676
+ return getEvaluatedData(object, {
1677
+ field: displayField,
1678
+ expression: displayExpr
1679
+ }, this.viewParent);
1680
+ }
1681
+ // Expression to be evaluated in view mode of form field
1682
+ getDisplayExpr() {
1683
+ const caption = [];
1684
+ const value = this.value;
1685
+ const displayField = this.displayfield || this.displaylabel;
1686
+ const displayExpr = this.displayexpression;
1687
+ if (isObject(value)) {
1688
+ if (isArray(value)) {
1689
+ forEach(value, obj => {
1690
+ if (isObject(obj)) {
1691
+ caption.push(this.evaluateExpr(obj, displayField, displayExpr));
1692
+ }
1693
+ });
1694
+ }
1695
+ else {
1696
+ caption.push(this.evaluateExpr(value, displayField, displayExpr));
1697
+ }
1698
+ return join(caption, ',');
1699
+ }
1700
+ return (value === undefined || value === null) ? '' : this.value;
1701
+ }
1702
+ getCaption() {
1703
+ return (this.value === undefined || this.value === null) ? (get(this.form.dataoutput, this._fieldName) || '') : this.value;
1704
+ }
1705
+ // Notifies changes to observing validation fields
1706
+ notifyChanges() {
1707
+ forEach(this.notifyForFields, field => {
1708
+ field.fieldValidations.validate();
1709
+ });
1710
+ }
1711
+ // Registers observer of validation fields
1712
+ observeOn(fields) {
1713
+ this.fieldValidations.observeOn(fields, 'formfields');
1714
+ }
1715
+ // Method to setup validators for reactive form control
1716
+ setUpValidators(customValidator) {
1717
+ this.fieldValidations.setUpValidators(customValidator);
1718
+ }
1719
+ // sets the custom async validation on the form field
1720
+ setAsyncValidators(validators) {
1721
+ this.fieldValidations.setAsyncValidators(validators);
1722
+ }
1723
+ // sets the default and custom sync validation on the form field
1724
+ setValidators(validators) {
1725
+ this.fieldValidations.setValidators(validators);
1726
+ }
1727
+ // Method to set the properties on inner form widget
1728
+ setFormWidget(key, val) {
1729
+ if (this.formWidget && this.formWidget.widget) {
1730
+ if (key === 'inputtype' && this.widgettype === FormWidgetType.TEXT) {
1731
+ key = 'type';
1732
+ }
1733
+ this.formWidget.widget[key] = val;
1734
+ }
1735
+ }
1736
+ boundFn(fn) {
1737
+ return fn();
1738
+ }
1739
+ // Method to set the properties on inner max form widget (when range is selected)
1740
+ setMaxFormWidget(key, val) {
1741
+ if (this.formWidgetMax) {
1742
+ this.formWidgetMax.widget[key] = val;
1743
+ }
1744
+ }
1745
+ onPropertyChange(key, nv, ov) {
1746
+ const isFormDirty = this.form.dirty;
1747
+ if (key !== 'tabindex') {
1748
+ super.onPropertyChange(key, nv, ov);
1749
+ }
1750
+ if (this.excludeProps.has(key)) {
1751
+ return;
1752
+ }
1753
+ // As upload widget is an HTML widget, only required property is setup
1754
+ if (this.widgettype === FormWidgetType.UPLOAD) {
1755
+ if (key === 'required') {
1756
+ this._debounceSetUpValidators();
1757
+ }
1758
+ super.onPropertyChange(key, nv, ov);
1759
+ return;
1760
+ }
1761
+ this.setFormWidget(key, nv);
1762
+ // Placeholder should not be setup on max widget
1763
+ if (key !== 'placeholder') {
1764
+ this.setMaxFormWidget(key, nv);
1765
+ }
1766
+ switch (key) {
1767
+ case 'defaultvalue':
1768
+ this.form.onFieldDefaultValueChange(this, nv);
1769
+ break;
1770
+ case 'maxdefaultvalue':
1771
+ this.maxValue = nv;
1772
+ this.setMaxFormWidget('datavalue', nv);
1773
+ this.form.onMaxDefaultValueChange();
1774
+ break;
1775
+ case 'maxplaceholder':
1776
+ this.setMaxFormWidget('placeholder', nv);
1777
+ break;
1778
+ case 'required':
1779
+ // WMS-18906 : Do not make form as dirty during required prop initialization
1780
+ if (isFormDirty !== this.form.dirty) {
1781
+ this.form.markAsPristine();
1782
+ }
1783
+ case 'maxchars':
1784
+ case 'minvalue':
1785
+ case 'maxvalue':
1786
+ case 'regexp':
1787
+ case 'show':
1788
+ this._debounceSetUpValidators();
1789
+ break;
1790
+ case 'primary-key':
1791
+ if (nv) {
1792
+ this.form.setPrimaryKey(this._fieldName);
1793
+ }
1794
+ break;
1795
+ case 'display-name':
1796
+ this.displayname = nv;
1797
+ break;
1798
+ case 'readonly':
1799
+ this.setReadOnlyState();
1800
+ break;
1801
+ }
1802
+ }
1803
+ onStyleChange(key, nv, ov) {
1804
+ if (key === "width") {
1805
+ this.$element.css("width", nv);
1806
+ }
1807
+ this.setFormWidget(key, nv);
1808
+ this.setMaxFormWidget(key, nv);
1809
+ super.onStyleChange(key, nv, ov);
1810
+ }
1811
+ get datavalue() {
1812
+ return this.formWidget && this.formWidget.datavalue;
1813
+ }
1814
+ set datavalue(val) {
1815
+ if (this._control && this.widgettype !== FormWidgetType.UPLOAD) {
1816
+ this._control.setValue(val);
1817
+ }
1818
+ }
1819
+ get value() {
1820
+ return this.datavalue;
1821
+ }
1822
+ set value(val) {
1823
+ this.datavalue = val;
1824
+ }
1825
+ get maxValue() {
1826
+ return this.formWidgetMax && this.formWidgetMax.datavalue;
1827
+ }
1828
+ set maxValue(val) {
1829
+ if (this._maxControl) {
1830
+ this._maxControl.setValue(val);
1831
+ }
1832
+ }
1833
+ get minValue() {
1834
+ return this.value;
1835
+ }
1836
+ set minValue(val) {
1837
+ this.value = val;
1838
+ }
1839
+ // Get the reactive form control
1840
+ get _control() {
1841
+ return this.ngform && this.ngform.controls[this._fieldName];
1842
+ }
1843
+ // Get the reactive max form control
1844
+ get _maxControl() {
1845
+ return this.ngform && this.ngform.controls[this._fieldName + '_max'];
1846
+ }
1847
+ // Get the displayValue
1848
+ get displayValue() {
1849
+ return this.formWidget && this.formWidget.displayValue;
1850
+ }
1851
+ //Get the timestamp
1852
+ get timestamp() {
1853
+ return this.formWidget && this.formWidget.timestamp;
1854
+ }
1855
+ //Get the charlength
1856
+ get charlength() {
1857
+ return this.formWidget && this.formWidget.charlength;
1858
+ }
1859
+ // Create the reactive form control
1860
+ createControl() {
1861
+ return this.fb.control(undefined, {
1862
+ validators: this._validators
1863
+ });
1864
+ }
1865
+ // On field value change, propagate event to parent form
1866
+ onValueChange(val) {
1867
+ if (!this.isDestroyed) {
1868
+ const captionEl = $(this.nativeElement).find('.caption-floating');
1869
+ if (captionEl.length > 0) {
1870
+ // hasValue check whether form-field has a value from passed val attribute
1871
+ // Added sanity check on val to support values liked 0, false etc as input val - WMS-20084
1872
+ // explicitly checking for input value or -webkit-autofill to see whether there are any autofilled fields - WMS-20141
1873
+ const hasValue = ((isDefined(val) && val !== '' && val !== null) || captionEl.find('input').val()) || captionEl.find('input:-webkit-autofill').length;
1874
+ this.app.notify('captionPositionAnimate', {
1875
+ displayVal: hasValue,
1876
+ nativeEl: captionEl,
1877
+ isSelectMultiple: this.formWidget && this.formWidget.multiple,
1878
+ isFocused: this._activeField
1879
+ });
1880
+ }
1881
+ // Fix for [WMS-23959]: ADA issue - adding aria-describedby, aria-invalid, __errormsg attributes only when the form field is invalid , else removing the attributes
1882
+ this.setAriaAttributes();
1883
+ this.form.onFieldValueChange(this, val);
1884
+ this.notifyChanges();
1885
+ // Do mark as touched, only incase when user has entered an input but not through the script. Hence added mousedown event check
1886
+ // active class checks whether user is on the current field, if so marking the field as touched. And form field validation happens once a field is touched
1887
+ // _triggeredByUser checks whether the field is touched by the user or triggered from external script
1888
+ // WMS-22456: _clicktriggeredByUser checks when user selects datetimetype from picker, mark the field as touched to show validation errors in mobile
1889
+ if (this.$element.find('.active').length > 0 || this.form.touched) {
1890
+ if (this._triggeredByUser || (isMobile() && this._clicktriggeredByUser && isDateTimeType(this.widgettype))) {
1891
+ this.ngform.controls[this._fieldName].markAsTouched();
1892
+ }
1893
+ this.fieldValidations.setCustomValidationMessage();
1894
+ }
1895
+ }
1896
+ }
1897
+ onStatusChange(status) {
1898
+ if (!this.isDestroyed) {
1899
+ this.showPendingSpinner = (status === 'PENDING');
1900
+ // while running validation, widget is disabled and spinner is shown
1901
+ // otherwise formWidget disabled state is reset to the state of the formField.
1902
+ if (status === 'PENDING') {
1903
+ this.formWidget.disabled = true;
1904
+ }
1905
+ else if (this.formWidget.disabled !== this.disabled) {
1906
+ this.formWidget.disabled = this.disabled;
1907
+ }
1908
+ }
1909
+ }
1910
+ // Method to expose validation message and set control to invalid
1911
+ setValidationMessage(val) {
1912
+ setTimeout(() => {
1913
+ this.validationmessage = val;
1914
+ this.setUpValidators(customValidatorFn);
1915
+ });
1916
+ }
1917
+ setReadOnlyState() {
1918
+ let readOnly;
1919
+ if (this.form.isUpdateMode) {
1920
+ if (this['primary-key'] && !this['is-related'] && !this.period) {
1921
+ /*If the field is primary but is assigned set readonly false.
1922
+ Assigned is where the user inputs the value while a new entry.
1923
+ This is not editable(in update mode) once entry is successful*/
1924
+ readOnly = !(this.generator === 'assigned' && this.form.operationType !== 'update');
1925
+ }
1926
+ else {
1927
+ readOnly = this.readonly;
1928
+ }
1929
+ }
1930
+ else {
1931
+ // In view mode, set widget state to readonly always
1932
+ readOnly = true;
1933
+ }
1934
+ readOnly = readOnly || this.form.readonly;
1935
+ this.setFormWidget('readonly', readOnly);
1936
+ }
1937
+ resetDisplayInput() {
1938
+ if ((!isDefined(this.value) || this.value === '')) {
1939
+ this.formWidget && this.formWidget.resetDisplayInput && this.formWidget.resetDisplayInput();
1940
+ }
1941
+ }
1942
+ reset() {
1943
+ if (this._control)
1944
+ this._control.reset();
1945
+ }
1946
+ triggerUploadEvent($event, eventName) {
1947
+ const params = { $event };
1948
+ if (eventName === 'change') {
1949
+ params.newVal = $event.target.files;
1950
+ params.oldVal = this._oldUploadVal;
1951
+ this._oldUploadVal = params.newVal;
1952
+ }
1953
+ this.invokeEventCallback(eventName, params);
1954
+ }
1955
+ registerFormField() {
1956
+ const fieldName = this._fieldName;
1957
+ if (this.parentList && !(this.form.parentList === this.parentList)) {
1958
+ let counter = 1;
1959
+ let _fieldName = fieldName;
1960
+ while (this.ngform.controls.hasOwnProperty(_fieldName)) {
1961
+ _fieldName = `${fieldName}_${counter}`;
1962
+ counter++;
1963
+ }
1964
+ this.ngform.addControl(_fieldName, this.createControl());
1965
+ this._fieldName = _fieldName;
1966
+ }
1967
+ else {
1968
+ this.ngform.addControl(fieldName, this.createControl());
1969
+ }
1970
+ const onValueChangeSubscription = this._control.valueChanges
1971
+ .pipe(debounceTime(200))
1972
+ .subscribe(this.onValueChange.bind(this));
1973
+ this.registerDestroyListener(() => onValueChangeSubscription.unsubscribe());
1974
+ const onStatusChangeSubscription = this._control.statusChanges
1975
+ .pipe(debounceTime(100))
1976
+ .subscribe(this.onStatusChange.bind(this));
1977
+ this.registerDestroyListener(() => onStatusChangeSubscription.unsubscribe());
1978
+ if (this.isRange === 'true') {
1979
+ this.ngform.addControl(fieldName + '_max', this.createControl());
1980
+ // registering for valueChanges on MaxformWidget
1981
+ const onMaxValueChangeSubscription = this._maxControl.valueChanges
1982
+ .pipe(debounceTime(200))
1983
+ .subscribe(this.onValueChange.bind(this));
1984
+ this.registerDestroyListener(() => onMaxValueChangeSubscription.unsubscribe());
1985
+ }
1986
+ this.value = get(this.form.formdata, this._fieldName);
1987
+ }
1988
+ ngOnInit() {
1989
+ this.ngform = this.form.ngform;
1990
+ this.registerFormField();
1991
+ // Instantiate custom validators class for form field
1992
+ this.fieldValidations = new BaseFieldValidations(this, this.formWidget, this.widgettype, this._control, this.form);
1993
+ super.ngOnInit();
1994
+ }
1995
+ prepareFormWidget() {
1996
+ this._initPropsRes();
1997
+ // setting displayExpressions on the formwidget explicitly as expr was evaluated to "".
1998
+ this.setFormWidget('binddisplaylabel', this.binddisplaylabel);
1999
+ this.setFormWidget('binddisplayexpression', this.binddisplayexpression);
2000
+ this.setFormWidget('binddisplayimagesrc', this.binddisplayimagesrc);
2001
+ this.setFormWidget('bindChipclass', this.bindChipclass);
2002
+ this.setFormWidget('binddataset', this.binddataset);
2003
+ this.registerReadyStateListener(() => {
2004
+ this.key = this._fieldName || this.target || this.binding;
2005
+ this.viewmodewidget = this.viewmodewidget || getDefaultViewModeWidget(this.widgettype);
2006
+ // For upload widget, generate the permitted field
2007
+ if (this.widgettype === FormWidgetType.UPLOAD) {
2008
+ let fileType;
2009
+ // Create the accepts string from file type and extensions
2010
+ fileType = this.filetype ? FILE_TYPES[this.filetype] : '';
2011
+ this.permitted = fileType + (this.extensions ? (fileType ? ',' : '') + this.extensions : '');
2012
+ }
2013
+ if (isMobile() && this.viewport.isMobileType) {
2014
+ if (!this['mobile-display']) {
2015
+ this.widget.show = false;
2016
+ }
2017
+ }
2018
+ else if (this.viewport.isTabletType) {
2019
+ if (!this['tablet-display']) {
2020
+ this.widget.show = false;
2021
+ }
2022
+ }
2023
+ else {
2024
+ if (!this['pc-display']) {
2025
+ this.widget.show = false;
2026
+ }
2027
+ }
2028
+ this.fieldDefConfig.displaname = this.displayname;
2029
+ this.fieldDefConfig.show = this.show;
2030
+ this.fieldDefConfig.isRelated = this['is-related'];
2031
+ this.fieldDefConfig.inputtype = this.inputtype;
2032
+ this.fieldDefConfig.generator = this.generator;
2033
+ this.fieldDefConfig.placeholder = this.placeholder;
2034
+ this.fieldDefConfig.primaryKey = this['primary-key'];
2035
+ this.fieldDefConfig.required = this.required;
2036
+ this.fieldDefConfig._readonly = this.readonly;
2037
+ this.fieldDefConfig.regexp = this.regexp;
2038
+ this.fieldDefConfig.type = this.type;
2039
+ this.fieldDefConfig.key = this.key;
2040
+ this.fieldDefConfig.mobileDisplay = this['mobile-display'];
2041
+ this.fieldDefConfig.name = this.name;
2042
+ this.fieldDefConfig.pcDisplay = this['pc-display'];
2043
+ this.fieldDefConfig.tabletDisplay = this['tablet-display'];
2044
+ this.fieldDefConfig.validationmessage = this.validationmessage;
2045
+ this.fieldDefConfig.viewmodewidget = this.viewmodewidget;
2046
+ this.fieldDefConfig.widget = this.widgettype;
2047
+ // Register the form field with parent form
2048
+ this.form.registerFormFields(this.widget);
2049
+ addForIdAttributes(this.nativeElement);
2050
+ this.setReadOnlyState();
2051
+ });
2052
+ }
2053
+ ngAfterContentInit() {
2054
+ super.ngAfterContentInit();
2055
+ if (this.widgetSubType === "wm-form-field-custom-widget" && this.formWidget.nativeElement)
2056
+ this.formWidget = this.formWidget.nativeElement.widget;
2057
+ if (this.formWidget) {
2058
+ if (this.widgetSubType === "wm-form-field-custom-widget") {
2059
+ this.formWidget.configSubject.asObservable().subscribe(() => {
2060
+ this.prepareFormWidget();
2061
+ });
2062
+ }
2063
+ else {
2064
+ this.prepareFormWidget();
2065
+ }
2066
+ }
2067
+ }
2068
+ ngOnDestroy() {
2069
+ // MEMORY LEAK FIX: Destroy BaseFieldValidations instance
2070
+ if (this.fieldValidations) {
2071
+ try {
2072
+ this.fieldValidations.destroy();
2073
+ }
2074
+ catch (e) {
2075
+ // Silently handle cleanup errors
2076
+ }
2077
+ this.fieldValidations = null;
2078
+ }
2079
+ // MEMORY LEAK FIX: Clear notifyForFields array
2080
+ if (this.notifyForFields) {
2081
+ this.notifyForFields = [];
2082
+ }
2083
+ // MEMORY LEAK FIX: Nullify debounced function closure
2084
+ this._debounceSetUpValidators = null;
2085
+ // MEMORY LEAK FIX: Clear form widget references
2086
+ this.formWidget = null;
2087
+ this.formWidgetMax = null;
2088
+ // MEMORY LEAK FIX: Clear field definition config
2089
+ if (this.fieldDefConfig) {
2090
+ this.fieldDefConfig = {};
2091
+ }
2092
+ // Call parent ngOnDestroy (StylableComponent extends BaseComponent which has cleanup)
2093
+ super.ngOnDestroy();
2094
+ }
2095
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormFieldDirective, deps: [{ token: i0.Injector }, { token: FormComponent }, { token: i1.FormBuilder }, { token: i1$1.Viewport }, { token: i1$1.App }, { token: i3.ListComponent, optional: true }, { token: 'chipclass.bind', attribute: true }, { token: 'dataset.bind', attribute: true }, { token: 'displayexpression.bind', attribute: true }, { token: 'displaylabel.bind', attribute: true }, { token: 'widgettype', attribute: true }, { token: 'name', attribute: true }, { token: 'displayimagesrc.bind', attribute: true }, { token: 'key', attribute: true }, { token: 'is-range', attribute: true }, { token: 'pc-display', attribute: true }, { token: 'mobile-display', attribute: true }, { token: 'tablet-display', attribute: true }, { token: Context, self: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
2096
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.19", type: FormFieldDirective, isStandalone: true, selector: "[wmFormField]", host: { listeners: { "keydown": "onKeydownHandler($event)", "click": "handleClick($event)" } }, providers: [
2097
+ provideAsWidgetRef(FormFieldDirective),
2098
+ provideAs(FormFieldDirective, NG_VALUE_ACCESSOR, true),
2099
+ { provide: Context, useFactory: () => { return {}; }, multi: true }
2100
+ ], queries: [{ propertyName: "formWidget", first: true, predicate: ["formWidget"], descendants: true, static: true }, { propertyName: "formWidgetMax", first: true, predicate: ["formWidgetMax"], descendants: true }], exportAs: ["wmFormField"], usesInheritance: true, ngImport: i0 }); }
2101
+ }
2102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: FormFieldDirective, decorators: [{
2103
+ type: Directive,
2104
+ args: [{
2105
+ standalone: true,
2106
+ selector: '[wmFormField]',
2107
+ exportAs: 'wmFormField',
2108
+ providers: [
2109
+ provideAsWidgetRef(FormFieldDirective),
2110
+ provideAs(FormFieldDirective, NG_VALUE_ACCESSOR, true),
2111
+ { provide: Context, useFactory: () => { return {}; }, multi: true }
2112
+ ]
2113
+ }]
2114
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: FormComponent }, { type: i1.FormBuilder }, { type: i1$1.Viewport }, { type: i1$1.App }, { type: i3.ListComponent, decorators: [{
2115
+ type: Optional
2116
+ }] }, { type: undefined, decorators: [{
2117
+ type: Attribute,
2118
+ args: ['chipclass.bind']
2119
+ }] }, { type: undefined, decorators: [{
2120
+ type: Attribute,
2121
+ args: ['dataset.bind']
2122
+ }] }, { type: undefined, decorators: [{
2123
+ type: Attribute,
2124
+ args: ['displayexpression.bind']
2125
+ }] }, { type: undefined, decorators: [{
2126
+ type: Attribute,
2127
+ args: ['displaylabel.bind']
2128
+ }] }, { type: undefined, decorators: [{
2129
+ type: Attribute,
2130
+ args: ['widgettype']
2131
+ }] }, { type: undefined, decorators: [{
2132
+ type: Attribute,
2133
+ args: ['name']
2134
+ }] }, { type: String, decorators: [{
2135
+ type: Attribute,
2136
+ args: ['displayimagesrc.bind']
2137
+ }] }, { type: undefined, decorators: [{
2138
+ type: Attribute,
2139
+ args: ['key']
2140
+ }] }, { type: undefined, decorators: [{
2141
+ type: Attribute,
2142
+ args: ['is-range']
2143
+ }] }, { type: undefined, decorators: [{
2144
+ type: Attribute,
2145
+ args: ['pc-display']
2146
+ }] }, { type: undefined, decorators: [{
2147
+ type: Attribute,
2148
+ args: ['mobile-display']
2149
+ }] }, { type: undefined, decorators: [{
2150
+ type: Attribute,
2151
+ args: ['tablet-display']
2152
+ }] }, { type: Array, decorators: [{
2153
+ type: Self
2154
+ }, {
2155
+ type: Inject,
2156
+ args: [Context]
2157
+ }] }, { type: undefined, decorators: [{
2158
+ type: Inject,
2159
+ args: ['EXPLICIT_CONTEXT']
2160
+ }, {
2161
+ type: Optional
2162
+ }] }], propDecorators: { formWidget: [{
2163
+ type: ContentChild,
2164
+ args: ['formWidget', { static: true }]
2165
+ }], formWidgetMax: [{
2166
+ type: ContentChild,
2167
+ args: ['formWidgetMax']
2168
+ }], onKeydownHandler: [{
2169
+ type: HostListener,
2170
+ args: ['keydown', ['$event']]
2171
+ }], handleClick: [{
2172
+ type: HostListener,
2173
+ args: ['click', ['$event']]
2174
+ }] } });
2175
+
2176
+ class LiveActionsDirective {
2177
+ constructor(subscribedWidget, app, dialogService) {
2178
+ this.subscribedWidget = subscribedWidget;
2179
+ this.app = app;
2180
+ this.dialogService = dialogService;
2181
+ subscribedWidget.addRow = this.addRow.bind(this);
2182
+ subscribedWidget.updateRow = this.updateRow.bind(this);
2183
+ subscribedWidget.deleteRow = this.deleteRow.bind(this);
2184
+ subscribedWidget.call = this.call.bind(this);
2185
+ }
2186
+ addRow() {
2187
+ this.app.notify('wm-event', { eventName: Live_Operations.INSERT, widgetName: this.subscribedWidget.name, row: this.subscribedWidget.selecteditem });
2188
+ }
2189
+ updateRow() {
2190
+ this.app.notify('wm-event', { eventName: Live_Operations.UPDATE, widgetName: this.subscribedWidget.name, row: this.subscribedWidget.selecteditem });
2191
+ }
2192
+ deleteRow() {
2193
+ this.app.notify('wm-event', { eventName: Live_Operations.DELETE, widgetName: this.subscribedWidget.name, row: this.subscribedWidget.selecteditem });
2194
+ }
2195
+ successHandler(options, response) {
2196
+ triggerFn(options.success, response);
2197
+ }
2198
+ errorHandler(options, error) {
2199
+ this.app.notifyApp(error, 'error', 'ERROR');
2200
+ triggerFn(options.error, error);
2201
+ }
2202
+ getRecords(options, operation) {
2203
+ let index;
2204
+ let dataNavigator;
2205
+ if (this.subscribedWidget.navigation !== 'None' && this.subscribedWidget.dataNavigator) {
2206
+ dataNavigator = this.subscribedWidget.dataNavigator;
2207
+ // If operation is delete, decrease the data size and check if navigation to previous page is required
2208
+ if (operation === Live_Operations.DELETE) {
2209
+ dataNavigator.dataSize -= 1;
2210
+ dataNavigator.calculatePagingValues();
2211
+ index = dataNavigator.pageCount < dataNavigator.dn.currentPage ? 'prev' : undefined;
2212
+ }
2213
+ else {
2214
+ // If operation is insert, go to last page. If update operation, stay on current page
2215
+ index = operation === Live_Operations.INSERT ? 'last' : 'current';
2216
+ if (index === 'last') {
2217
+ dataNavigator.dataSize += 1;
2218
+ }
2219
+ dataNavigator.calculatePagingValues();
2220
+ }
2221
+ dataNavigator.navigatePage(index, null, true, response => {
2222
+ this.successHandler(options, response);
2223
+ });
2224
+ }
2225
+ else {
2226
+ this.subscribedWidget.datasource.execute(DataSource.Operation.LIST_RECORDS, {
2227
+ 'skipToggleState': true
2228
+ }).then(response => {
2229
+ this.successHandler(options, response);
2230
+ }, err => {
2231
+ this.errorHandler(options, err);
2232
+ });
2233
+ }
2234
+ }
2235
+ performCUDOperation(requestData, operation, options) {
2236
+ performDataOperation(this.subscribedWidget.datasource, requestData, {
2237
+ operationType: operation
2238
+ }).then(response => {
2239
+ if (response.error) {
2240
+ this.errorHandler(options, response.error);
2241
+ return;
2242
+ }
2243
+ if (this.subscribedWidget.datasource.category === 'wm.CrudVariable' && operation === 'delete') {
2244
+ this.subscribedWidget.datasource.execute(DataSource.Operation.LIST_RECORDS, {
2245
+ 'skipToggleState': true
2246
+ }).then(response => {
2247
+ this.successHandler(options, response);
2248
+ }, err => {
2249
+ this.errorHandler(options, err);
2250
+ });
2251
+ }
2252
+ else {
2253
+ this.getRecords(options, operation);
2254
+ }
2255
+ // show delete success toaster
2256
+ if (operation === 'delete') {
2257
+ this.app.notifyApp(this.app.appLocale.MESSAGE_DELETE_RECORD_SUCCESS, 'success');
2258
+ }
2259
+ }, (error) => {
2260
+ this.errorHandler(options, error);
2261
+ });
2262
+ }
2263
+ insertRecord(requestData, operation, options) {
2264
+ this.performCUDOperation(requestData, operation, options);
2265
+ }
2266
+ updateRecord(requestData, operation, options) {
2267
+ this.performCUDOperation(requestData, operation, options);
2268
+ }
2269
+ deleteRecord(requestData, operation, options) {
2270
+ // Show the delete confirmation dialog. On Ok, delete the record.
2271
+ this.dialogService.showAppConfirmDialog({
2272
+ title: this.app.appLocale.MESSAGE_DELETE_RECORD || 'Delete Record',
2273
+ iconclass: 'wi wi-delete fa-lg',
2274
+ message: this.subscribedWidget.confirmdelete || 'Are you sure you want to delete this?',
2275
+ oktext: this.subscribedWidget.deleteoktext || 'Ok',
2276
+ canceltext: this.subscribedWidget.deletecanceltext || 'Cancel',
2277
+ onOk: () => {
2278
+ this.performCUDOperation(requestData, operation, options);
2279
+ this.dialogService.closeAppConfirmDialog();
2280
+ },
2281
+ onCancel: () => {
2282
+ triggerFn(options.cancelDeleteCallback);
2283
+ this.dialogService.closeAppConfirmDialog();
2284
+ }
2285
+ });
2286
+ }
2287
+ performOperation(operation, options) {
2288
+ const requestData = {
2289
+ row: options.row,
2290
+ prevData: {},
2291
+ rowData: {},
2292
+ transform: true,
2293
+ skipNotification: true
2294
+ };
2295
+ if (operation === Live_Operations.UPDATE) {
2296
+ requestData.rowData = options.rowData;
2297
+ requestData.prevData = options.prevData;
2298
+ }
2299
+ /* decide routine based on CRUD operation to be performed */
2300
+ switch (operation) {
2301
+ case Live_Operations.INSERT:
2302
+ this.insertRecord(requestData, operation, options);
2303
+ break;
2304
+ case Live_Operations.UPDATE:
2305
+ this.updateRecord(requestData, operation, options);
2306
+ break;
2307
+ case Live_Operations.DELETE:
2308
+ this.deleteRecord(requestData, operation, options);
2309
+ break;
2310
+ case Live_Operations.READ:
2311
+ this.getRecords(options, operation);
2312
+ break;
2313
+ }
2314
+ }
2315
+ // API exposed to make CRUD operations
2316
+ call(operation, options, success, error) {
2317
+ options.success = success;
2318
+ options.error = error;
2319
+ this.performOperation(operation, options);
2320
+ }
2321
+ ngOnDestroy() {
2322
+ // MEMORY LEAK FIX: Clear references
2323
+ this.subscribedWidget = null;
2324
+ this.app = null;
2325
+ this.dialogService = null;
2326
+ }
2327
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: LiveActionsDirective, deps: [{ token: ListComponent, self: true }, { token: i1$1.App }, { token: i1$1.AbstractDialogService }], target: i0.ɵɵFactoryTarget.Directive }); }
2328
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.19", type: LiveActionsDirective, isStandalone: true, selector: "[wmLiveActions]", ngImport: i0 }); }
2329
+ }
2330
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: LiveActionsDirective, decorators: [{
2331
+ type: Directive,
2332
+ args: [{
2333
+ standalone: true,
2334
+ selector: '[wmLiveActions]'
2335
+ }]
2336
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
2337
+ type: Self
2338
+ }, {
2339
+ type: Inject,
2340
+ args: [ListComponent]
2341
+ }] }, { type: i1$1.App }, { type: i1$1.AbstractDialogService }] });
2342
+
2343
+ class DependsonDirective {
2344
+ constructor(dialogId, dependson, dialogService, app) {
2345
+ this.dialogService = dialogService;
2346
+ this.app = app;
2347
+ // If dialogId is present, form is in dialog mode
2348
+ if (dialogId) {
2349
+ this.isLayoutDialog = true;
2350
+ this.dialogId = dialogId;
2351
+ }
2352
+ this.dependson = dependson;
2353
+ // Listen to the wm-event called from subscribed widgets
2354
+ this.eventSubscription = this.app.subscribe('wm-event', this.handleEvent.bind(this));
2355
+ }
2356
+ openFormDialog() {
2357
+ this.dialogService.open(this.dialogId);
2358
+ }
2359
+ onUpdate(newValue, table, editClicked) {
2360
+ this.editMode = editClicked || this.editMode;
2361
+ this.form.operationType = Live_Operations.UPDATE;
2362
+ this.form.isSelected = true;
2363
+ let rowData = this.currentFormData;
2364
+ if (newValue && table) {
2365
+ if (table.multiselect) {
2366
+ rowData = newValue[0];
2367
+ }
2368
+ else {
2369
+ rowData = newValue[newValue.length - 1];
2370
+ }
2371
+ }
2372
+ this.form.setFormData(rowData);
2373
+ this.form.edit();
2374
+ if (!this.editMode) {
2375
+ this.form.isUpdateMode = false;
2376
+ }
2377
+ }
2378
+ onInsert() {
2379
+ this.form.operationType = Live_Operations.INSERT;
2380
+ this.form.isSelected = true;
2381
+ this.form.setFormData({});
2382
+ this.form.new();
2383
+ }
2384
+ handleEvent(options) {
2385
+ if (this.dependson !== options.widgetName) {
2386
+ return;
2387
+ }
2388
+ this.currentOp = options.eventName;
2389
+ switch (options.eventName) {
2390
+ case Live_Operations.UPDATE:
2391
+ this.currentFormData = options.row;
2392
+ if (this.isLayoutDialog) {
2393
+ this.openFormDialog();
2394
+ }
2395
+ else {
2396
+ this.onUpdate(undefined, undefined, true);
2397
+ }
2398
+ break;
2399
+ case Live_Operations.INSERT:
2400
+ if (this.isLayoutDialog) {
2401
+ this.openFormDialog();
2402
+ }
2403
+ else {
2404
+ this.onInsert();
2405
+ }
2406
+ break;
2407
+ case Live_Operations.DELETE:
2408
+ this.app.Widgets[this.dependson].call('delete', { row: options.row });
2409
+ break;
2410
+ case Live_Operations.READ:
2411
+ if (!this.isLayoutDialog) {
2412
+ this.form.isUpdateMode = false;
2413
+ }
2414
+ break;
2415
+ case 'rerender':
2416
+ if (options.dataSource) {
2417
+ options.dataSource.execute(DataSource.Operation.LIST_RECORDS, {
2418
+ 'skipToggleState': true,
2419
+ 'operation': 'list'
2420
+ });
2421
+ }
2422
+ break;
2423
+ case 'selectedItemChange':
2424
+ if (options.table) {
2425
+ this.onUpdate(options.row, options.table);
2426
+ }
2427
+ break;
2428
+ case 'resetEditMode':
2429
+ this.editMode = false;
2430
+ }
2431
+ }
2432
+ onFormRender() {
2433
+ // On opening the form in dialog mode, complete the pending operations
2434
+ if (this.form && this.isLayoutDialog) {
2435
+ this.form.isLayoutDialog = true;
2436
+ setTimeout(() => {
2437
+ if (this.currentOp === Live_Operations.UPDATE) {
2438
+ this.onUpdate(undefined, undefined, true);
2439
+ }
2440
+ else if (this.currentOp === Live_Operations.INSERT) {
2441
+ this.onInsert();
2442
+ }
2443
+ }, 250);
2444
+ }
2445
+ }
2446
+ ngAfterContentInit() {
2447
+ // If form instance is present, form is in inline mode. Else, it is in dialog mode and listen to form instance changes
2448
+ if (this.formChildren.first) {
2449
+ this.form = this.formChildren.first;
2450
+ }
2451
+ else {
2452
+ this.formSubscription = this.formChildren.changes.subscribe((val) => {
2453
+ this.form = val.first;
2454
+ this.onFormRender();
2455
+ });
2456
+ }
2457
+ // find the dependent widget (table/list)
2458
+ this.app.notify('setup-cud-listener', this.dependson);
2459
+ }
2460
+ ngOnDestroy() {
2461
+ if (this.formSubscription) {
2462
+ this.formSubscription.unsubscribe();
2463
+ }
2464
+ if (this.eventSubscription) {
2465
+ this.eventSubscription();
2466
+ }
2467
+ }
2468
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: DependsonDirective, deps: [{ token: 'dialogid', attribute: true }, { token: 'dependson', attribute: true }, { token: i1$1.AbstractDialogService }, { token: i1$1.App }], target: i0.ɵɵFactoryTarget.Directive }); }
2469
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.19", type: DependsonDirective, isStandalone: true, selector: "[dependson]", queries: [{ propertyName: "formChildren", predicate: FormComponent, descendants: true }], ngImport: i0 }); }
2470
+ }
2471
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: DependsonDirective, decorators: [{
2472
+ type: Directive,
2473
+ args: [{
2474
+ standalone: true,
2475
+ selector: '[dependson]'
2476
+ }]
2477
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
2478
+ type: Attribute,
2479
+ args: ['dialogid']
2480
+ }] }, { type: undefined, decorators: [{
2481
+ type: Attribute,
2482
+ args: ['dependson']
2483
+ }] }, { type: i1$1.AbstractDialogService }, { type: i1$1.App }], propDecorators: { formChildren: [{
2484
+ type: ContentChildren,
2485
+ args: [FormComponent, { descendants: true }]
2486
+ }] } });
2487
+
2488
+ const FILTER_CONSTANTS = {
2489
+ 'EMPTY_KEY': 'EMPTY_NULL_FILTER'
2490
+ };
2491
+ const noop = () => { };
2492
+ class LiveFilterDirective {
2493
+ static { this.initializeProps = registerLiveFilterProps(); }
2494
+ constructor(form) {
2495
+ this.form = form;
2496
+ // debounce the filter function. If multiple filter calls are made at same time, calls will be delayed and last call is fired
2497
+ this._filter = debounce$1(options => {
2498
+ this.filter(options);
2499
+ }, 250);
2500
+ form.clearFilter = this.clearFilter.bind(this);
2501
+ form.applyFilter = this.applyFilter.bind(this);
2502
+ form.filter = this.filter.bind(this);
2503
+ form.filterOnDefault = this.filterOnDefault.bind(this);
2504
+ form.execute = this.execute.bind(this);
2505
+ form.onFieldDefaultValueChange = this.onFieldDefaultValueChange.bind(this);
2506
+ form.onMaxDefaultValueChange = this.onMaxDefaultValueChange.bind(this);
2507
+ form.onDataSourceChange = this.onDataSourceChange.bind(this);
2508
+ form.onFieldValueChange = this.onFieldValueChange.bind(this);
2509
+ form.submitForm = this.submitForm.bind(this);
2510
+ form.registerFormWidget = this.registerFormWidget.bind(this);
2511
+ }
2512
+ execute(operation, options) {
2513
+ if (operation === DataSource.Operation.LIST_RECORDS || operation === DataSource.Operation.DOWNLOAD) {
2514
+ return this.applyFilter(options);
2515
+ }
2516
+ if (operation === DataSource.Operation.GET_OPTIONS) {
2517
+ return this._options || {};
2518
+ }
2519
+ if (operation === DataSource.Operation.GET_PAGING_OPTIONS) {
2520
+ return this.form.pagination;
2521
+ }
2522
+ if (!this.form.datasource) {
2523
+ return {};
2524
+ }
2525
+ if (operation === DataSource.Operation.FETCH_DISTINCT_VALUES) {
2526
+ return fetchDistinctValues(this.form.datasource, this.form.formFields, {
2527
+ widget: 'widgettype',
2528
+ enableemptyfilter: this.form.enableemptyfilter,
2529
+ EMPTY_VALUE: this.form.appLocale.LABEL_NO_VALUE
2530
+ });
2531
+ }
2532
+ return this.form.datasource.execute(operation, options);
2533
+ }
2534
+ onFieldDefaultValueChange(field, nv) {
2535
+ field.minValue = nv;
2536
+ field.value = nv;
2537
+ this.filterOnDefault();
2538
+ }
2539
+ onFieldValueChange(field, nv) {
2540
+ applyFilterOnField(this.form.datasource, field.widget, this.form.formFields, nv, {
2541
+ EMPTY_VALUE: this.form.appLocale.LABEL_NO_VALUE
2542
+ });
2543
+ if (this.form.autoupdate && isDefined(nv)) {
2544
+ this._filter();
2545
+ }
2546
+ }
2547
+ onMaxDefaultValueChange() {
2548
+ setTimeout(() => {
2549
+ this.filterOnDefault();
2550
+ });
2551
+ }
2552
+ onDataSourceChange() {
2553
+ const dataSource = this.form.datasource;
2554
+ if (!dataSource) {
2555
+ return;
2556
+ }
2557
+ this.form.formFields.forEach(field => {
2558
+ if (isDataSetWidget(field.widgettype)) {
2559
+ getDistinctValuesForField(dataSource, field.widget, {
2560
+ widget: 'widgettype',
2561
+ enableemptyfilter: this.form.enableemptyfilter,
2562
+ EMPTY_VALUE: this.form.appLocale.LABEL_NO_VALUE
2563
+ });
2564
+ applyFilterOnField(dataSource, field.widget, this.form.formFields, field.value, {
2565
+ isFirst: true,
2566
+ EMPTY_VALUE: this.form.appLocale.LABEL_NO_VALUE
2567
+ });
2568
+ }
2569
+ });
2570
+ // On load check if default value exists and apply filter, Call the filter with the result options
2571
+ this._filter(this._options);
2572
+ }
2573
+ clearFilter() {
2574
+ this.form.resetFormState();
2575
+ this.form.formFields.forEach(filterField => {
2576
+ // Added check for range field
2577
+ if (!filterField.readonly && filterField.show) {
2578
+ if (filterField.widgettype === FormWidgetType.AUTOCOMPLETE || filterField.widgettype === FormWidgetType.TYPEAHEAD) {
2579
+ this.form.$element.find('div[name=' + filterField.name + '] input').val('');
2580
+ }
2581
+ if (filterField['is-range']) {
2582
+ filterField.minValue = '';
2583
+ filterField.maxValue = '';
2584
+ }
2585
+ else {
2586
+ filterField.value = '';
2587
+ filterField.resetDisplayInput();
2588
+ }
2589
+ }
2590
+ });
2591
+ // If variable has any bindings, wait for the bindings to be updated
2592
+ setTimeout(() => {
2593
+ // Setting result to the default data
2594
+ this._filter();
2595
+ });
2596
+ }
2597
+ submitForm() {
2598
+ this.filter();
2599
+ }
2600
+ applyFilter(options) {
2601
+ options = options ? (options.data || options) : {};
2602
+ options.page = options.page || 1;
2603
+ options.orderBy = isDefined(options.orderBy) ? options.orderBy : this.orderBy;
2604
+ return this.filter(options);
2605
+ }
2606
+ filter(options) {
2607
+ if (!this.form.datasource) {
2608
+ return;
2609
+ }
2610
+ const filterFields = {};
2611
+ const dataModel = {};
2612
+ let page = 1, orderBy, isValid;
2613
+ options = options || {};
2614
+ page = options.page || page;
2615
+ orderBy = isDefined(options.orderBy) ? options.orderBy : (this.orderBy || '');
2616
+ this.orderBy = orderBy; // Store the order by in scope. This can be used to retain the sort after filtering
2617
+ // Copy the values to be sent to the user as '$data' before servicecall
2618
+ this.form.formFields.forEach(field => {
2619
+ const fieldSelector = 'div[name=' + field.name + '] input';
2620
+ const $el = this.form.$element;
2621
+ let fieldEle;
2622
+ if ((field.widgettype === FormWidgetType.AUTOCOMPLETE || field.widgettype === FormWidgetType.TYPEAHEAD) && $el) {
2623
+ fieldEle = $el.find(fieldSelector);
2624
+ if (!field['is-range']) {
2625
+ dataModel[field.field] = {
2626
+ 'value': isDefined(field.value) ? field.value : fieldEle.val() // For autocomplete, set the datavalue. If not present, set query value
2627
+ };
2628
+ }
2629
+ else {
2630
+ dataModel[field.field] = {
2631
+ 'minValue': isDefined(field.minValue) ? field.minValue : fieldEle.first().val(),
2632
+ 'maxValue': isDefined(field.maxValue) ? field.maxValue : fieldEle.last().val()
2633
+ };
2634
+ }
2635
+ return;
2636
+ }
2637
+ if (!field['is-range']) {
2638
+ dataModel[field.field] = {
2639
+ 'value': field.value
2640
+ };
2641
+ }
2642
+ else {
2643
+ dataModel[field.field] = {
2644
+ 'minValue': field.minValue,
2645
+ 'maxValue': field.maxValue
2646
+ };
2647
+ }
2648
+ });
2649
+ /*Perform this function for the event onBeforeservicecall*/
2650
+ try {
2651
+ isValid = this.form.invokeEventCallback('beforeservicecall', { $data: dataModel });
2652
+ if (isValid === false) {
2653
+ return;
2654
+ }
2655
+ if (isValid && isValid.error) {
2656
+ this.form.toggleMessage(true, isValid.error, 'error', 'ERROR');
2657
+ return;
2658
+ }
2659
+ /*Update these values in the formFields with new reference, inorder to maintain the UI values*/
2660
+ this.form.formFields.forEach(filterField => {
2661
+ if (!filterField['is-range']) {
2662
+ filterField._value = dataModel[filterField.field].value;
2663
+ }
2664
+ else {
2665
+ filterField._minValue = dataModel[filterField.field].minValue;
2666
+ filterField._maxValue = dataModel[filterField.field].maxValue;
2667
+ }
2668
+ });
2669
+ }
2670
+ catch (err) {
2671
+ if (err.message === 'Abort') {
2672
+ return;
2673
+ }
2674
+ }
2675
+ /* Construct the formFields Variable to send it to the queryBuilder */
2676
+ this.form.formFields.forEach(filterField => {
2677
+ let fieldValue;
2678
+ let matchMode;
2679
+ let colName = filterField.field;
2680
+ const minValue = filterField._minValue;
2681
+ const maxvalue = filterField._maxValue;
2682
+ /* if field is part of a related entity, column name will be 'entity.fieldName' */
2683
+ if (filterField['is-related']) {
2684
+ colName += '.' + filterField['lookup-field'];
2685
+ }
2686
+ if (filterField['is-range']) {
2687
+ /*Based on the min and max values, decide the matchmode condition*/
2688
+ fieldValue = getRangeFieldValue(minValue, maxvalue);
2689
+ matchMode = getRangeMatchMode(minValue, maxvalue);
2690
+ if (isDefined(fieldValue)) {
2691
+ filterFields[colName] = {
2692
+ 'value': fieldValue,
2693
+ 'matchMode': matchMode,
2694
+ 'logicalOp': 'AND'
2695
+ };
2696
+ }
2697
+ }
2698
+ else {
2699
+ switch (filterField.widgettype) {
2700
+ case FormWidgetType.SELECT:
2701
+ case FormWidgetType.RADIOSET:
2702
+ if (getEnableEmptyFilter(this.form.enableemptyfilter) && filterField._value === FILTER_CONSTANTS.EMPTY_KEY) {
2703
+ matchMode = getEmptyMatchMode(this.form.enableemptyfilter);
2704
+ fieldValue = filterField._value;
2705
+ }
2706
+ else {
2707
+ if (filterField.type === DataType.BOOLEAN) {
2708
+ if (isDefined(filterField._value) && filterField._value !== '') {
2709
+ fieldValue = JSON.parse(filterField._value);
2710
+ }
2711
+ }
2712
+ else {
2713
+ fieldValue = filterField._value;
2714
+ }
2715
+ }
2716
+ break;
2717
+ case FormWidgetType.CHECKBOXSET:
2718
+ case FormWidgetType.CHIPS:
2719
+ if (filterField._value && filterField._value.length) {
2720
+ fieldValue = filterField._value;
2721
+ }
2722
+ break;
2723
+ case FormWidgetType.CHECKBOX:
2724
+ case FormWidgetType.TOGGLE:
2725
+ case FormWidgetType.ICONBUTTONTOGGLE:
2726
+ if (isDefined(filterField._value) && filterField._value !== '') {
2727
+ fieldValue = filterField.type === DataType.BOOLEAN ? JSON.parse(filterField._value) : filterField._value;
2728
+ }
2729
+ break;
2730
+ default:
2731
+ fieldValue = filterField._value;
2732
+ break;
2733
+ }
2734
+ if (isDefined(fieldValue) && fieldValue !== '' && fieldValue !== null) {
2735
+ filterFields[colName] = {};
2736
+ if (matchMode) {
2737
+ filterFields[colName].matchMode = matchMode;
2738
+ fieldValue = undefined;
2739
+ }
2740
+ else if (filterField.type === DataType.STRING || filterField.isRelated) { // Only for string types and related fields, custom match modes are enabled.
2741
+ filterFields[colName].matchMode = matchMode || filterField.matchmode ||
2742
+ this.form.datasource.execute(DataSource.Operation.GET_MATCH_MODE);
2743
+ }
2744
+ filterFields[colName].value = fieldValue;
2745
+ filterFields[colName].logicalOp = 'AND';
2746
+ filterFields[colName].type = filterField.type;
2747
+ }
2748
+ }
2749
+ });
2750
+ if (options.exportType) {
2751
+ return this.form.datasource.execute(DataSource.Operation.DOWNLOAD, {
2752
+ data: {
2753
+ matchMode: 'anywhereignorecase',
2754
+ filterFields: filterFields,
2755
+ orderBy: orderBy,
2756
+ exportType: options.exportType,
2757
+ logicalOp: 'AND',
2758
+ exportSize: options.exportSize,
2759
+ fields: options.fields,
2760
+ fileName: options.fileName
2761
+ }
2762
+ });
2763
+ }
2764
+ return this.form.datasource.execute(DataSource.Operation.LIST_RECORDS, {
2765
+ filterFields: filterFields,
2766
+ orderBy: orderBy,
2767
+ page: page,
2768
+ pagesize: this.form.pagesize || 20,
2769
+ skipDataSetUpdate: true, // dont update the actual variable dataset,
2770
+ inFlightBehavior: 'executeAll'
2771
+ }).then(response => {
2772
+ const data = response.data;
2773
+ this.form.pagination = response.pagination;
2774
+ if (data.error) {
2775
+ // disable readonly and show the appropriate error
2776
+ this.form.toggleMessage(true, data.error, 'error', 'ERROR');
2777
+ this.form.onResultCb(data, false);
2778
+ }
2779
+ else {
2780
+ this._options = {
2781
+ 'page': page,
2782
+ 'orderBy': orderBy
2783
+ };
2784
+ this.form.result = getClonedObject(data);
2785
+ this.form.onResultCb(data, true);
2786
+ }
2787
+ $appDigest();
2788
+ return this.form.result;
2789
+ }, error => {
2790
+ this.form.toggleMessage(true, error, 'error', 'ERROR');
2791
+ this.form.onResultCb(error, false);
2792
+ return error;
2793
+ });
2794
+ }
2795
+ // Calls the filter function if default values are present
2796
+ filterOnDefault() {
2797
+ /*Check if default value is present for any filter field*/
2798
+ const defaultObj = find(this.form.formFields, obj => {
2799
+ return isDefined(obj.value) || isDefined(obj.minValue) || isDefined(obj.maxValue);
2800
+ });
2801
+ /*If default value exists and data is loaded, apply the filter*/
2802
+ if (defaultObj) {
2803
+ this._filter(this._options);
2804
+ }
2805
+ }
2806
+ registerFormWidget(widget) {
2807
+ const name = widget.key || widget.name;
2808
+ this.form.filterWidgets[name] = widget;
2809
+ }
2810
+ ngOnDestroy() {
2811
+ // MEMORY LEAK FIX: Cancel debounced function
2812
+ if (this._filter && this._filter.cancel) {
2813
+ this._filter.cancel();
2814
+ this._filter = null;
2815
+ }
2816
+ // MEMORY LEAK FIX: Clear form reference
2817
+ this.form = null;
2818
+ this._options = null;
2819
+ this.orderBy = null;
2820
+ }
2821
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: LiveFilterDirective, deps: [{ token: FormComponent, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
2822
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.19", type: LiveFilterDirective, isStandalone: true, selector: "[wmLiveFilter]", ngImport: i0 }); }
2823
+ }
2824
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: LiveFilterDirective, decorators: [{
2825
+ type: Directive,
2826
+ args: [{
2827
+ standalone: true,
2828
+ selector: '[wmLiveFilter]'
2829
+ }]
2830
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
2831
+ type: Self
2832
+ }, {
2833
+ type: Inject,
2834
+ args: [FormComponent]
2835
+ }] }] });
2836
+
2837
+ const isTimeType = field => field.widgettype === DataType.TIME || (field.type === DataType.TIME && !field.widgettype);
2838
+ const getValidTime = val => {
2839
+ if (val) {
2840
+ const date = (new Date()).toDateString();
2841
+ return (new Date(`${date} ${val}`)).getTime();
2842
+ }
2843
+ return undefined;
2844
+ };
2845
+ class LiveFormDirective {
2846
+ static { this.initializeProps = registerLiveFormProps(); }
2847
+ onKeydownHandler(event) {
2848
+ this._triggeredByUser = true;
2849
+ }
2850
+ constructor(form, liveTable, datePipe, dialogService, formlayout) {
2851
+ this.form = form;
2852
+ this.datePipe = datePipe;
2853
+ this.dialogService = dialogService;
2854
+ this._debouncedSavePrevDataValues = debounce$1(() => {
2855
+ this.savePrevDataValues();
2856
+ }, 250);
2857
+ // If parent live table is present and this form is first child of live table, set this form instance on livetable
2858
+ if (liveTable) {
2859
+ if (!this.form.parentForm) {
2860
+ this.form._liveTableParent = liveTable;
2861
+ }
2862
+ this.form.isLayoutDialog = liveTable.isLayoutDialog;
2863
+ liveTable.onFormReady(this.form);
2864
+ }
2865
+ else {
2866
+ this.form.isLayoutDialog = formlayout === 'dialog';
2867
+ }
2868
+ // CUD operations
2869
+ form.cancel = this.cancel.bind(this);
2870
+ form.reset = this.reset.bind(this);
2871
+ form.delete = this.delete.bind(this);
2872
+ form.save = this.save.bind(this);
2873
+ form.saveAndNew = this.saveAndNew.bind(this);
2874
+ form.saveAndView = this.saveAndView.bind(this);
2875
+ form.setPrimaryKey = this.setPrimaryKey.bind(this);
2876
+ form.constructDataObject = this.constructDataObject.bind(this);
2877
+ form.changeDataObject = this.setFormData.bind(this);
2878
+ form.setFormData = this.setFormData.bind(this);
2879
+ form.findOperationType = this.findOperationType.bind(this);
2880
+ form.clearData = this.clearData.bind(this);
2881
+ form.onFieldDefaultValueChange = this.onFieldDefaultValueChange.bind(this);
2882
+ form.onDataSourceChange = this.onDataSourceChange.bind(this);
2883
+ form.onFieldValueChange = this.onFieldValueChange.bind(this);
2884
+ form.submitForm = this.submitForm.bind(this);
2885
+ form.form_registerFormFields = form.registerFormFields;
2886
+ form.registerFormFields = this.registerFormFields.bind(this);
2887
+ }
2888
+ /*
2889
+ WMS:18583
2890
+ Overriding 'registerFormFields' for liveForms,
2891
+ On Each field added, check if the dataSource is updated or not
2892
+ if the field is added after the dataSource is updated at LiveForm, retrigger
2893
+ */
2894
+ registerFormFields(formField) {
2895
+ const formFields = this.form.getFormFields();
2896
+ this.form.form_registerFormFields(formField);
2897
+ if (this.form.isDataSourceUpdated) {
2898
+ this._updateFieldOnDataSourceChange(formField, formFields);
2899
+ }
2900
+ }
2901
+ _updateFieldOnDataSourceChange(field, formFields) {
2902
+ if (!field.isDataSetBound && isDataSetWidget(field.widgettype)) {
2903
+ if (field['is-related']) {
2904
+ field.isDataSetBound = true;
2905
+ fetchRelatedFieldData(this.form.datasource, field.widget, {
2906
+ relatedField: field.key,
2907
+ datafield: ALLFIELDS,
2908
+ widget: 'widgettype',
2909
+ });
2910
+ }
2911
+ else {
2912
+ getDistinctValuesForField(this.form.datasource, field.widget, {
2913
+ widget: 'widgettype',
2914
+ enableemptyfilter: this.form.enableemptyfilter
2915
+ });
2916
+ applyFilterOnField(this.form.datasource, field.widget, formFields, field.value, { isFirst: true });
2917
+ }
2918
+ }
2919
+ }
2920
+ onDataSourceChange() {
2921
+ if (get(this.form.formFields, 'length')) {
2922
+ this.form.isDataSourceUpdated = true;
2923
+ }
2924
+ const formFields = this.form.getFormFields();
2925
+ formFields.forEach(field => {
2926
+ this._updateFieldOnDataSourceChange(field, formFields);
2927
+ });
2928
+ }
2929
+ onFieldDefaultValueChange(field, nv) {
2930
+ // In Edit, do not set default values
2931
+ if (this.form.operationType === 'update') {
2932
+ return;
2933
+ }
2934
+ // Set the default value only if it exists.
2935
+ if (isDefined(nv) && nv !== null && nv !== '' && nv !== 'null') {
2936
+ field.value = parseValueByType(nv, field.type, field.widgettype, field.trailingzero);
2937
+ }
2938
+ else {
2939
+ field.value = undefined;
2940
+ }
2941
+ // WMS-22434: For default value set on individual form fields, do not mark the form as dirty.
2942
+ if (this.form.dirty && !this._triggeredByUser) {
2943
+ this.form.markAsPristine();
2944
+ }
2945
+ this._debouncedSavePrevDataValues();
2946
+ }
2947
+ onFieldValueChange(field, nv) {
2948
+ applyFilterOnField(this.form.datasource, field.widget, this.form.formFields, nv);
2949
+ }
2950
+ getBlobURL(dataObj, key, value) {
2951
+ let href = '';
2952
+ let primaryKeys;
2953
+ let primaryKey;
2954
+ if (value === null || value === undefined || !this.form.datasource) {
2955
+ return href;
2956
+ }
2957
+ primaryKeys = this.form.datasource.execute(DataSource.Operation.GET_PRIMARY_KEY) || [];
2958
+ primaryKey = dataObj[primaryKeys[0]];
2959
+ href += this.form.datasource.execute(DataSource.Operation.GET_BLOB_URL, {
2960
+ primaryValue: primaryKey,
2961
+ columnName: key
2962
+ });
2963
+ href += '?' + Math.random();
2964
+ return href;
2965
+ }
2966
+ setFormData(dataObj, formFields, formData) {
2967
+ if (!dataObj) {
2968
+ return;
2969
+ }
2970
+ formFields = formFields || this.form.formFields;
2971
+ formFields.forEach(field => {
2972
+ const value = get(dataObj, field.key || field.name);
2973
+ if (isTimeType(field)) {
2974
+ field.value = getValidTime(value);
2975
+ }
2976
+ else if (field.type === DataType.BLOB) {
2977
+ this.form.resetFileUploadWidget(field, true);
2978
+ field.href = this.getBlobURL(dataObj, field.key, value);
2979
+ field.value = isString(value) ? '' : value;
2980
+ }
2981
+ else {
2982
+ this.form.setFieldValue(field, dataObj, formData);
2983
+ }
2984
+ });
2985
+ this.savePrevDataValues();
2986
+ this.form.constructDataObject();
2987
+ }
2988
+ onDataSourceUpdate(response, newForm, updateMode) {
2989
+ if (newForm) {
2990
+ this.form.new();
2991
+ }
2992
+ else {
2993
+ this.form.setFormData(response);
2994
+ this.closeDialog();
2995
+ }
2996
+ this.form.isUpdateMode = isDefined(updateMode) ? updateMode : true;
2997
+ }
2998
+ savePrevformFields() {
2999
+ this.form.prevformFields = getClonedObject(this.form.formFields.map(field => {
3000
+ return {
3001
+ 'key': field.key,
3002
+ 'type': field.type,
3003
+ 'widgettype': field.widgettype,
3004
+ 'outputformat': field.outputformat,
3005
+ 'value': field.value
3006
+ };
3007
+ }));
3008
+ }
3009
+ getPrevformFields() {
3010
+ this.form.formFields.map(field => {
3011
+ const prevField = this.form.prevformFields.find(pField => pField.key === field.key);
3012
+ field.value = prevField.value;
3013
+ });
3014
+ }
3015
+ getDataObject() {
3016
+ if (this.form.operationType === Live_Operations.INSERT) {
3017
+ return {};
3018
+ }
3019
+ if (isDefined(this.form.prevDataObject) && !isEmptyObject(this.form.prevDataObject)) {
3020
+ return getClonedObject(this.form.prevDataObject);
3021
+ }
3022
+ return getClonedObject(this.form.formdata || {});
3023
+ }
3024
+ constructDataObject(isPreviousData) {
3025
+ const dataObject = this.getDataObject();
3026
+ const formName = this.form.name;
3027
+ let formFields;
3028
+ formFields = isPreviousData ? this.form.prevformFields : this.form.getFormFields();
3029
+ formFields.forEach(field => {
3030
+ let dateTime, fieldValue;
3031
+ const fieldTarget = split(field.key, '.');
3032
+ const fieldName = fieldTarget[0] || field.key;
3033
+ /*collect the values from the fields and construct the object*/
3034
+ /*Format the output of date time widgets to the given output format*/
3035
+ if ((field.widgettype && isDateTimeType(field.widgettype)) || isDateTimeType(field.type)) {
3036
+ if (field.value) {
3037
+ dateTime = getValidDateObject(field.value);
3038
+ if (field.outputformat === DataType.TIMESTAMP || field.type === DataType.TIMESTAMP) {
3039
+ fieldValue = field.value ? dateTime : null;
3040
+ }
3041
+ else if (field.outputformat) {
3042
+ fieldValue = this.datePipe.transform(dateTime, field.outputformat);
3043
+ }
3044
+ else {
3045
+ fieldValue = field.value;
3046
+ }
3047
+ }
3048
+ else {
3049
+ fieldValue = undefined;
3050
+ }
3051
+ }
3052
+ else if (field.type === DataType.BLOB) {
3053
+ fieldValue = getFiles(formName, fieldName + '_formWidget', field.multiple);
3054
+ }
3055
+ else if (field.type === DataType.LIST) {
3056
+ fieldValue = field.value || undefined;
3057
+ }
3058
+ else {
3059
+ fieldValue = (field.value === null || field.value === '') ? undefined : field.value;
3060
+ }
3061
+ if (fieldTarget.length === 1) {
3062
+ dataObject[fieldName] = fieldValue;
3063
+ }
3064
+ else {
3065
+ dataObject[fieldName] = dataObject[fieldName] || {};
3066
+ dataObject[fieldName][fieldTarget[1]] = fieldValue;
3067
+ }
3068
+ });
3069
+ if (!isPreviousData) {
3070
+ this.form.updateFormDataOutput(dataObject);
3071
+ return this.form.dataoutput;
3072
+ }
3073
+ return dataObject;
3074
+ }
3075
+ setPrimaryKey(fieldName) {
3076
+ /*Store the primary key of data*/
3077
+ this.form.primaryKey = this.form.primaryKey || [];
3078
+ if (this.form.primaryKey.indexOf(fieldName) === -1) {
3079
+ this.form.primaryKey.push(fieldName);
3080
+ }
3081
+ }
3082
+ findOperationType() {
3083
+ let operation;
3084
+ let isPrimary = false;
3085
+ const sourceOperation = this.form.datasource && this.form.datasource.execute(DataSource.Operation.GET_OPERATION_TYPE);
3086
+ if (sourceOperation && sourceOperation !== 'read') {
3087
+ return sourceOperation;
3088
+ }
3089
+ /*If OperationType is not set then based on the formdata object return the operation type,
3090
+ this case occurs only if the form is outside a livegrid*/
3091
+ /*If the formdata object has primary key value then return update else insert*/
3092
+ if (this.form.primaryKey && !isEmpty(this.form.formdata)) {
3093
+ /*If only one column is primary key*/
3094
+ if (this.form.primaryKey.length === 1) {
3095
+ if (this.form.formdata[this.form.primaryKey[0]]) {
3096
+ operation = Live_Operations.UPDATE;
3097
+ }
3098
+ /*If only no column is primary key*/
3099
+ }
3100
+ else if (this.form.primaryKey.length === 0) {
3101
+ forEach(this.form.formdata, (value) => {
3102
+ if (value) {
3103
+ isPrimary = true;
3104
+ }
3105
+ });
3106
+ if (isPrimary) {
3107
+ operation = Live_Operations.UPDATE;
3108
+ }
3109
+ /*If multiple columns are primary key*/
3110
+ }
3111
+ else {
3112
+ isPrimary = some(this.form.primaryKey, (primaryKey) => {
3113
+ if (this.form.formdata[primaryKey]) {
3114
+ return true;
3115
+ }
3116
+ });
3117
+ if (isPrimary) {
3118
+ operation = Live_Operations.UPDATE;
3119
+ }
3120
+ }
3121
+ }
3122
+ return operation || Live_Operations.INSERT;
3123
+ }
3124
+ getPrevDataValues() {
3125
+ const prevDataValues = fromPairs(map(this.form.prevDataValues, (item) => {
3126
+ return [item.key, item.value];
3127
+ })); // Convert of array of values to an object
3128
+ this.form.formFields.forEach(field => {
3129
+ field.value = prevDataValues[field.key] || '';
3130
+ field.resetDisplayInput();
3131
+ });
3132
+ return prevDataValues;
3133
+ }
3134
+ savePrevDataValues() {
3135
+ this.form.prevDataValues = this.form.formFields.map((obj) => {
3136
+ return { 'key': obj.key, 'value': obj.value };
3137
+ });
3138
+ }
3139
+ clearData() {
3140
+ this.form.toggleMessage(false);
3141
+ this.form.emptyDataModel();
3142
+ }
3143
+ setReadonlyFields() {
3144
+ this.form.formFields.forEach(field => {
3145
+ field.setReadOnlyState();
3146
+ });
3147
+ }
3148
+ reset() {
3149
+ let prevDataValues;
3150
+ this.form.resetFormState();
3151
+ prevDataValues = this.getPrevDataValues();
3152
+ this.form.formFields.forEach(field => {
3153
+ if (field.type === DataType.BLOB || field.widgettype === 'upload') {
3154
+ this.form.resetFileUploadWidget(field, true);
3155
+ field.href = this.getBlobURL(prevDataValues, field.key, field.value);
3156
+ }
3157
+ field.nativeElement.querySelector('input')?.removeAttribute('aria-invalid');
3158
+ });
3159
+ this.form.constructDataObject();
3160
+ }
3161
+ closeDialog() {
3162
+ if (this.form.isLayoutDialog) {
3163
+ this.dialogService.close(this.form.dialogId);
3164
+ }
3165
+ }
3166
+ cancel() {
3167
+ this.form.clearMessage();
3168
+ this.form.isUpdateMode = false;
3169
+ this.form.reset();
3170
+ /*Show the previous selected data*/
3171
+ if (this.form.isSelected) {
3172
+ this.getPrevformFields();
3173
+ }
3174
+ this.form.isUpdateMode = false;
3175
+ if (this.form._liveTableParent) {
3176
+ this.form._liveTableParent.onCancel();
3177
+ }
3178
+ else {
3179
+ /*
3180
+ WMS-18759: dialog close is calling twice and dialog onHidden subscription is calling once from the library
3181
+ due to this if we have another dialog inside liveform and if we click on cancel of second dialog the library
3182
+ subscription is calling for both the dialogs.
3183
+ */
3184
+ this.closeDialog();
3185
+ }
3186
+ $appDigest();
3187
+ }
3188
+ delete(callBackFn) {
3189
+ this.form.resetFormState();
3190
+ this.form.operationType = Live_Operations.DELETE;
3191
+ this.form.prevDataObject = getClonedObject(this.form.formdata || {});
3192
+ this.form.save(undefined, undefined, undefined, callBackFn);
3193
+ }
3194
+ // Function use to save the form and open new form after save
3195
+ saveAndNew() {
3196
+ this.save(undefined, true, true);
3197
+ }
3198
+ // Function use to save the form and open new form after save
3199
+ saveAndView() {
3200
+ this.save(undefined, false);
3201
+ }
3202
+ submitForm($event) {
3203
+ this.save($event);
3204
+ }
3205
+ save(event, updateMode, newForm) {
3206
+ if (!this.form.datasource) {
3207
+ return;
3208
+ }
3209
+ let data, prevData, operationType, isValid;
3210
+ const requestData = {};
3211
+ operationType = this.form.operationType = this.form.operationType || this.findOperationType();
3212
+ // Disable the form submit if form is in invalid state.
3213
+ if (this.form.validateFieldsOnSubmit()) {
3214
+ return;
3215
+ }
3216
+ data = getClonedObject(this.form.constructDataObject());
3217
+ prevData = this.form.prevformFields ? this.form.constructDataObject(true) : data;
3218
+ try {
3219
+ isValid = this.form.invokeEventCallback('beforeservicecall', { $event: event, $operation: this.form.operationType, $data: data, options: requestData });
3220
+ if (isValid === false) {
3221
+ return;
3222
+ }
3223
+ if (isValid && isValid.error) {
3224
+ this.form.toggleMessage(true, isValid.error, 'error');
3225
+ return;
3226
+ }
3227
+ }
3228
+ catch (err) {
3229
+ if (err.message === 'Abort') {
3230
+ return;
3231
+ }
3232
+ }
3233
+ // If operation is update, form is not touched and current data and previous data is same, Show no changes detected message
3234
+ if (this.form.operationType === Live_Operations.UPDATE && this.form.ngform && this.form.ngform.pristine &&
3235
+ (this.form.isSelected && isEqual(data, prevData))) {
3236
+ this.form.toggleMessage(true, this.form.appLocale.MESSAGE_NO_CHANGES, 'info', '');
3237
+ $appDigest();
3238
+ return;
3239
+ }
3240
+ requestData.row = data;
3241
+ requestData.transform = true;
3242
+ requestData.skipNotification = true;
3243
+ if (operationType === Live_Operations.UPDATE) {
3244
+ requestData.rowData = this.form.formdata;
3245
+ requestData.prevData = prevData;
3246
+ }
3247
+ performDataOperation(this.form.datasource, requestData, {
3248
+ operationType: operationType
3249
+ }).then((response) => {
3250
+ const msg = operationType === Live_Operations.INSERT ? this.form.insertmessage : (operationType === Live_Operations.UPDATE ?
3251
+ this.form.updatemessage : this.form.deletemessage);
3252
+ let result;
3253
+ if (operationType === Live_Operations.DELETE) {
3254
+ result = requestData.row;
3255
+ this.form.emptyDataModel();
3256
+ this.form.prevDataValues = [];
3257
+ this.form.isSelected = false;
3258
+ }
3259
+ else {
3260
+ result = response;
3261
+ }
3262
+ if (!this.form.onSuccess) {
3263
+ this.form.toggleMessage(true, msg, 'success');
3264
+ }
3265
+ if (this.form._liveTableParent) {
3266
+ // highlight the current updated row
3267
+ this.form._liveTableParent.onResult(operationType, response, newForm, updateMode);
3268
+ }
3269
+ else {
3270
+ /*get updated data without refreshing page*/
3271
+ this.form.datasource.execute(DataSource.Operation.LIST_RECORDS, {
3272
+ 'skipToggleState': true
3273
+ });
3274
+ this.onDataSourceUpdate(response, newForm, updateMode);
3275
+ }
3276
+ return {
3277
+ 'result': result,
3278
+ 'status': true
3279
+ };
3280
+ }, (error) => {
3281
+ if (!this.form.onError) {
3282
+ this.form.toggleMessage(true, error, 'error');
3283
+ }
3284
+ $appDigest();
3285
+ return {
3286
+ 'result': error,
3287
+ 'status': false
3288
+ };
3289
+ }).then(response => {
3290
+ // reset the form to pristine state
3291
+ this.form.resetFormState();
3292
+ this.form.onResultCb(response.result, response.status, event);
3293
+ });
3294
+ }
3295
+ ngOnDestroy() {
3296
+ // MEMORY LEAK FIX: Cancel debounced function
3297
+ if (this._debouncedSavePrevDataValues && this._debouncedSavePrevDataValues.cancel) {
3298
+ this._debouncedSavePrevDataValues.cancel();
3299
+ this._debouncedSavePrevDataValues = null;
3300
+ }
3301
+ // MEMORY LEAK FIX: Clear form reference
3302
+ this.form = null;
3303
+ }
3304
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: LiveFormDirective, deps: [{ token: FormComponent, self: true }, { token: i1$2.LiveTableComponent, optional: true }, { token: i5.ToDatePipe }, { token: i1$1.AbstractDialogService }, { token: 'formlayout', attribute: true }], target: i0.ɵɵFactoryTarget.Directive }); }
3305
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.19", type: LiveFormDirective, isStandalone: true, selector: "[wmLiveForm]", host: { listeners: { "keydown": "onKeydownHandler($event)" } }, ngImport: i0 }); }
3306
+ }
3307
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: LiveFormDirective, decorators: [{
3308
+ type: Directive,
3309
+ args: [{
3310
+ standalone: true,
3311
+ selector: '[wmLiveForm]'
3312
+ }]
3313
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
3314
+ type: Self
3315
+ }, {
3316
+ type: Inject,
3317
+ args: [FormComponent]
3318
+ }] }, { type: i1$2.LiveTableComponent, decorators: [{
3319
+ type: Optional
3320
+ }] }, { type: i5.ToDatePipe }, { type: i1$1.AbstractDialogService }, { type: undefined, decorators: [{
3321
+ type: Attribute,
3322
+ args: ['formlayout']
3323
+ }] }], propDecorators: { onKeydownHandler: [{
3324
+ type: HostListener,
3325
+ args: ['keydown', ['$event']]
3326
+ }] } });
3327
+
3328
+ /**
3329
+ * Generated bundle index. Do not edit.
3330
+ */
3331
+
3332
+ export { DependsonDirective, FormActionDirective, FormComponent, FormFieldDirective, FormWidgetDirective, LiveActionsDirective, LiveFilterDirective, LiveFormDirective };
3333
+ //# sourceMappingURL=index.mjs.map