@wavemaker-ai/app-ng-runtime 1.0.0-rc.309

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