@wavemaker-ai/react-codegen 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 (386) hide show
  1. package/build-react-web.js +149 -0
  2. package/build-react-web.js.map +1 -0
  3. package/command.js +106 -0
  4. package/command.js.map +1 -0
  5. package/dist/transpiler/index.d.mts +62 -0
  6. package/dist/transpiler/index.mjs +47857 -0
  7. package/dist/transpiler/index.mjs.map +1 -0
  8. package/dist/transpiler/wm-styles.css +1502 -0
  9. package/index.js +122 -0
  10. package/index.js.map +1 -0
  11. package/package-lock.json +5243 -0
  12. package/package.json +104 -0
  13. package/src/app.generator.js +1274 -0
  14. package/src/app.generator.js.map +1 -0
  15. package/src/download-packages.js +193 -0
  16. package/src/download-packages.js.map +1 -0
  17. package/src/fomatter.js +20 -0
  18. package/src/fomatter.js.map +1 -0
  19. package/src/gen-app-override-css.js +379 -0
  20. package/src/gen-app-override-css.js.map +1 -0
  21. package/src/genappoverridecssold-file.js +311 -0
  22. package/src/genappoverridecssold-file.js.map +1 -0
  23. package/src/handlebar-helpers.js +51 -0
  24. package/src/handlebar-helpers.js.map +1 -0
  25. package/src/increment-builder.js +85 -0
  26. package/src/increment-builder.js.map +1 -0
  27. package/src/profiles/profile.js +24 -0
  28. package/src/profiles/profile.js.map +1 -0
  29. package/src/profiles/web-preview.profile.js +15 -0
  30. package/src/profiles/web-preview.profile.js.map +1 -0
  31. package/src/project.service.js +314 -0
  32. package/src/project.service.js.map +1 -0
  33. package/src/transpile/bind.ex.transformer.js +232 -0
  34. package/src/transpile/bind.ex.transformer.js.map +1 -0
  35. package/src/transpile/components/advanced/carousel-template.transformer.js +16 -0
  36. package/src/transpile/components/advanced/carousel-template.transformer.js.map +1 -0
  37. package/src/transpile/components/advanced/carousel.transformer.js +54 -0
  38. package/src/transpile/components/advanced/carousel.transformer.js.map +1 -0
  39. package/src/transpile/components/advanced/login.transformer.js +25 -0
  40. package/src/transpile/components/advanced/login.transformer.js.map +1 -0
  41. package/src/transpile/components/advanced/marquee.transformer.js +16 -0
  42. package/src/transpile/components/advanced/marquee.transformer.js.map +1 -0
  43. package/src/transpile/components/basic/anchor.transformer.js +13 -0
  44. package/src/transpile/components/basic/anchor.transformer.js.map +1 -0
  45. package/src/transpile/components/basic/audio.transformer.js +16 -0
  46. package/src/transpile/components/basic/audio.transformer.js.map +1 -0
  47. package/src/transpile/components/basic/html.transformer.js +15 -0
  48. package/src/transpile/components/basic/html.transformer.js.map +1 -0
  49. package/src/transpile/components/basic/icon.transformer.js +16 -0
  50. package/src/transpile/components/basic/icon.transformer.js.map +1 -0
  51. package/src/transpile/components/basic/iframe.transformer.js +16 -0
  52. package/src/transpile/components/basic/iframe.transformer.js.map +1 -0
  53. package/src/transpile/components/basic/label.transformer.js +16 -0
  54. package/src/transpile/components/basic/label.transformer.js.map +1 -0
  55. package/src/transpile/components/basic/message.transformer.js +16 -0
  56. package/src/transpile/components/basic/message.transformer.js.map +1 -0
  57. package/src/transpile/components/basic/picture.transformer.js +22 -0
  58. package/src/transpile/components/basic/picture.transformer.js.map +1 -0
  59. package/src/transpile/components/basic/progress-bar.transformer.js +18 -0
  60. package/src/transpile/components/basic/progress-bar.transformer.js.map +1 -0
  61. package/src/transpile/components/basic/progress-circle.transformer.js +16 -0
  62. package/src/transpile/components/basic/progress-circle.transformer.js.map +1 -0
  63. package/src/transpile/components/basic/richtexteditor.transformer.js +21 -0
  64. package/src/transpile/components/basic/richtexteditor.transformer.js.map +1 -0
  65. package/src/transpile/components/basic/search.transformer.js +68 -0
  66. package/src/transpile/components/basic/search.transformer.js.map +1 -0
  67. package/src/transpile/components/basic/spinner.transformer.js +16 -0
  68. package/src/transpile/components/basic/spinner.transformer.js.map +1 -0
  69. package/src/transpile/components/basic/tree.transformer.js +16 -0
  70. package/src/transpile/components/basic/tree.transformer.js.map +1 -0
  71. package/src/transpile/components/basic/video.transformer.js +16 -0
  72. package/src/transpile/components/basic/video.transformer.js.map +1 -0
  73. package/src/transpile/components/chart/chart.transformer.js +13 -0
  74. package/src/transpile/components/chart/chart.transformer.js.map +1 -0
  75. package/src/transpile/components/container/accordion-pane.transformer.js +44 -0
  76. package/src/transpile/components/container/accordion-pane.transformer.js.map +1 -0
  77. package/src/transpile/components/container/accordion.transformer.js +48 -0
  78. package/src/transpile/components/container/accordion.transformer.js.map +1 -0
  79. package/src/transpile/components/container/container.transformer.js +39 -0
  80. package/src/transpile/components/container/container.transformer.js.map +1 -0
  81. package/src/transpile/components/container/layout-grid/grid-column.transformer.js +16 -0
  82. package/src/transpile/components/container/layout-grid/grid-column.transformer.js.map +1 -0
  83. package/src/transpile/components/container/layout-grid/grid-row.transformer.js +16 -0
  84. package/src/transpile/components/container/layout-grid/grid-row.transformer.js.map +1 -0
  85. package/src/transpile/components/container/layout-grid/grid.transformer.js +16 -0
  86. package/src/transpile/components/container/layout-grid/grid.transformer.js.map +1 -0
  87. package/src/transpile/components/container/linear-layout/linear-layout-item.js +16 -0
  88. package/src/transpile/components/container/linear-layout/linear-layout-item.js.map +1 -0
  89. package/src/transpile/components/container/linear-layout/linear-layout.js +16 -0
  90. package/src/transpile/components/container/linear-layout/linear-layout.js.map +1 -0
  91. package/src/transpile/components/container/panel-content.transformer.js +16 -0
  92. package/src/transpile/components/container/panel-content.transformer.js.map +1 -0
  93. package/src/transpile/components/container/panel-footer.transformer.js +11 -0
  94. package/src/transpile/components/container/panel-footer.transformer.js.map +1 -0
  95. package/src/transpile/components/container/panel.transformer.js +36 -0
  96. package/src/transpile/components/container/panel.transformer.js.map +1 -0
  97. package/src/transpile/components/container/repeat-template.transformer.js +16 -0
  98. package/src/transpile/components/container/repeat-template.transformer.js.map +1 -0
  99. package/src/transpile/components/container/tabheader.transformer.js +13 -0
  100. package/src/transpile/components/container/tabheader.transformer.js.map +1 -0
  101. package/src/transpile/components/container/tabpane.transformer.js +48 -0
  102. package/src/transpile/components/container/tabpane.transformer.js.map +1 -0
  103. package/src/transpile/components/container/tabs.transformer.js +71 -0
  104. package/src/transpile/components/container/tabs.transformer.js.map +1 -0
  105. package/src/transpile/components/container/tile.transformer.js +16 -0
  106. package/src/transpile/components/container/tile.transformer.js.map +1 -0
  107. package/src/transpile/components/container/wizard.transformer.js +80 -0
  108. package/src/transpile/components/container/wizard.transformer.js.map +1 -0
  109. package/src/transpile/components/container/wizardaction.transformer.js +120 -0
  110. package/src/transpile/components/container/wizardaction.transformer.js.map +1 -0
  111. package/src/transpile/components/container/wizardstep.transformer.js +99 -0
  112. package/src/transpile/components/container/wizardstep.transformer.js.map +1 -0
  113. package/src/transpile/components/data/card/card-actions.transformer.js +13 -0
  114. package/src/transpile/components/data/card/card-actions.transformer.js.map +1 -0
  115. package/src/transpile/components/data/card/card-content.transformer.js +33 -0
  116. package/src/transpile/components/data/card/card-content.transformer.js.map +1 -0
  117. package/src/transpile/components/data/card/card-footer.transformer.js +13 -0
  118. package/src/transpile/components/data/card/card-footer.transformer.js.map +1 -0
  119. package/src/transpile/components/data/card/card.transformer.js +13 -0
  120. package/src/transpile/components/data/card/card.transformer.js.map +1 -0
  121. package/src/transpile/components/data/form/dynamic-fields.transformer.js +24 -0
  122. package/src/transpile/components/data/form/dynamic-fields.transformer.js.map +1 -0
  123. package/src/transpile/components/data/form/form-action.transformer.js +145 -0
  124. package/src/transpile/components/data/form/form-action.transformer.js.map +1 -0
  125. package/src/transpile/components/data/form/form-body.transformer.js +16 -0
  126. package/src/transpile/components/data/form/form-body.transformer.js.map +1 -0
  127. package/src/transpile/components/data/form/form-field.transformer.js +442 -0
  128. package/src/transpile/components/data/form/form-field.transformer.js.map +1 -0
  129. package/src/transpile/components/data/form/form-footer.transformer.js +16 -0
  130. package/src/transpile/components/data/form/form-footer.transformer.js.map +1 -0
  131. package/src/transpile/components/data/form/form.transformer.js +166 -0
  132. package/src/transpile/components/data/form/form.transformer.js.map +1 -0
  133. package/src/transpile/components/data/form/util.js +70 -0
  134. package/src/transpile/components/data/form/util.js.map +1 -0
  135. package/src/transpile/components/data/list/list-content.transformer.js +35 -0
  136. package/src/transpile/components/data/list/list-content.transformer.js.map +1 -0
  137. package/src/transpile/components/data/list/list-template-transformer.js +22 -0
  138. package/src/transpile/components/data/list/list-template-transformer.js.map +1 -0
  139. package/src/transpile/components/data/list/list-transformer.js +287 -0
  140. package/src/transpile/components/data/list/list-transformer.js.map +1 -0
  141. package/src/transpile/components/data/live-filter-field.transformer.js +436 -0
  142. package/src/transpile/components/data/live-filter-field.transformer.js.map +1 -0
  143. package/src/transpile/components/data/livefilter.transformer.js +140 -0
  144. package/src/transpile/components/data/livefilter.transformer.js.map +1 -0
  145. package/src/transpile/components/data/liveform.transformer.js +159 -0
  146. package/src/transpile/components/data/liveform.transformer.js.map +1 -0
  147. package/src/transpile/components/data/table/live-table.transformer.js +15 -0
  148. package/src/transpile/components/data/table/live-table.transformer.js.map +1 -0
  149. package/src/transpile/components/data/table/table-action.transformer.js +29 -0
  150. package/src/transpile/components/data/table/table-action.transformer.js.map +1 -0
  151. package/src/transpile/components/data/table/table-column.transformer.js +121 -0
  152. package/src/transpile/components/data/table/table-column.transformer.js.map +1 -0
  153. package/src/transpile/components/data/table/table-group.transformer.js +16 -0
  154. package/src/transpile/components/data/table/table-group.transformer.js.map +1 -0
  155. package/src/transpile/components/data/table/table-row-action.transformer.js +34 -0
  156. package/src/transpile/components/data/table/table-row-action.transformer.js.map +1 -0
  157. package/src/transpile/components/data/table/table-row.transformer.js +46 -0
  158. package/src/transpile/components/data/table/table-row.transformer.js.map +1 -0
  159. package/src/transpile/components/data/table/table.transformer.js +64 -0
  160. package/src/transpile/components/data/table/table.transformer.js.map +1 -0
  161. package/src/transpile/components/data/table/utils.js +89 -0
  162. package/src/transpile/components/data/table/utils.js.map +1 -0
  163. package/src/transpile/components/dialogs/alert-dialog.transformer.js +16 -0
  164. package/src/transpile/components/dialogs/alert-dialog.transformer.js.map +1 -0
  165. package/src/transpile/components/dialogs/confirm-dialog.transformer.js +16 -0
  166. package/src/transpile/components/dialogs/confirm-dialog.transformer.js.map +1 -0
  167. package/src/transpile/components/dialogs/dialog-actions.transformer.js +56 -0
  168. package/src/transpile/components/dialogs/dialog-actions.transformer.js.map +1 -0
  169. package/src/transpile/components/dialogs/dialog-body.transformer.js +13 -0
  170. package/src/transpile/components/dialogs/dialog-body.transformer.js.map +1 -0
  171. package/src/transpile/components/dialogs/dialog.transformer.js +26 -0
  172. package/src/transpile/components/dialogs/dialog.transformer.js.map +1 -0
  173. package/src/transpile/components/dialogs/iframe-dialog.transformer.js +16 -0
  174. package/src/transpile/components/dialogs/iframe-dialog.transformer.js.map +1 -0
  175. package/src/transpile/components/dialogs/login-dialog.transformer.js +44 -0
  176. package/src/transpile/components/dialogs/login-dialog.transformer.js.map +1 -0
  177. package/src/transpile/components/dialogs/page-dialog.transformer.js +16 -0
  178. package/src/transpile/components/dialogs/page-dialog.transformer.js.map +1 -0
  179. package/src/transpile/components/element/html-transformer.js +9 -0
  180. package/src/transpile/components/element/html-transformer.js.map +1 -0
  181. package/src/transpile/components/form/button-group.transformer.js +16 -0
  182. package/src/transpile/components/form/button-group.transformer.js.map +1 -0
  183. package/src/transpile/components/form/button.transformer.js +27 -0
  184. package/src/transpile/components/form/button.transformer.js.map +1 -0
  185. package/src/transpile/components/form/rating.transformer.js +19 -0
  186. package/src/transpile/components/form/rating.transformer.js.map +1 -0
  187. package/src/transpile/components/input/calendar.transformer.js +13 -0
  188. package/src/transpile/components/input/calendar.transformer.js.map +1 -0
  189. package/src/transpile/components/input/checkbox-set.transformer.js +29 -0
  190. package/src/transpile/components/input/checkbox-set.transformer.js.map +1 -0
  191. package/src/transpile/components/input/checkbox.transformer.js +47 -0
  192. package/src/transpile/components/input/checkbox.transformer.js.map +1 -0
  193. package/src/transpile/components/input/chips.transformer.js +22 -0
  194. package/src/transpile/components/input/chips.transformer.js.map +1 -0
  195. package/src/transpile/components/input/color-picker.transformer.js +19 -0
  196. package/src/transpile/components/input/color-picker.transformer.js.map +1 -0
  197. package/src/transpile/components/input/composite.transformer.js +16 -0
  198. package/src/transpile/components/input/composite.transformer.js.map +1 -0
  199. package/src/transpile/components/input/currency.transformer.js +21 -0
  200. package/src/transpile/components/input/currency.transformer.js.map +1 -0
  201. package/src/transpile/components/input/epoch/date.transformer.js +16 -0
  202. package/src/transpile/components/input/epoch/date.transformer.js.map +1 -0
  203. package/src/transpile/components/input/epoch/datetime.transformer.js +16 -0
  204. package/src/transpile/components/input/epoch/datetime.transformer.js.map +1 -0
  205. package/src/transpile/components/input/epoch/time.transformer.js +16 -0
  206. package/src/transpile/components/input/epoch/time.transformer.js.map +1 -0
  207. package/src/transpile/components/input/file-upload.transformer.js +32 -0
  208. package/src/transpile/components/input/file-upload.transformer.js.map +1 -0
  209. package/src/transpile/components/input/number.transformer.js +20 -0
  210. package/src/transpile/components/input/number.transformer.js.map +1 -0
  211. package/src/transpile/components/input/radio-set.transformer.js +25 -0
  212. package/src/transpile/components/input/radio-set.transformer.js.map +1 -0
  213. package/src/transpile/components/input/rating.transformer.js +20 -0
  214. package/src/transpile/components/input/rating.transformer.js.map +1 -0
  215. package/src/transpile/components/input/select.transformer.js +57 -0
  216. package/src/transpile/components/input/select.transformer.js.map +1 -0
  217. package/src/transpile/components/input/slider.transformer.js +28 -0
  218. package/src/transpile/components/input/slider.transformer.js.map +1 -0
  219. package/src/transpile/components/input/switch.transformer.js +21 -0
  220. package/src/transpile/components/input/switch.transformer.js.map +1 -0
  221. package/src/transpile/components/input/text.transformer.js +21 -0
  222. package/src/transpile/components/input/text.transformer.js.map +1 -0
  223. package/src/transpile/components/input/textarea.transformer.js +19 -0
  224. package/src/transpile/components/input/textarea.transformer.js.map +1 -0
  225. package/src/transpile/components/input/upload.transformer.js +19 -0
  226. package/src/transpile/components/input/upload.transformer.js.map +1 -0
  227. package/src/transpile/components/layout/footer.transformer.js +48 -0
  228. package/src/transpile/components/layout/footer.transformer.js.map +1 -0
  229. package/src/transpile/components/layout/header.transformer.js +48 -0
  230. package/src/transpile/components/layout/header.transformer.js.map +1 -0
  231. package/src/transpile/components/layout/leftnav.transformer.js +48 -0
  232. package/src/transpile/components/layout/leftnav.transformer.js.map +1 -0
  233. package/src/transpile/components/layout/rightnav.transformer.js +48 -0
  234. package/src/transpile/components/layout/rightnav.transformer.js.map +1 -0
  235. package/src/transpile/components/layout/topnav.transformer.js +48 -0
  236. package/src/transpile/components/layout/topnav.transformer.js.map +1 -0
  237. package/src/transpile/components/nav/nav-item.transformer.js +24 -0
  238. package/src/transpile/components/nav/nav-item.transformer.js.map +1 -0
  239. package/src/transpile/components/nav/nav.transformer.js +68 -0
  240. package/src/transpile/components/nav/nav.transformer.js.map +1 -0
  241. package/src/transpile/components/nav/navbar.transformer.js +120 -0
  242. package/src/transpile/components/nav/navbar.transformer.js.map +1 -0
  243. package/src/transpile/components/navigation/breadcrumb.transformer.js +16 -0
  244. package/src/transpile/components/navigation/breadcrumb.transformer.js.map +1 -0
  245. package/src/transpile/components/navigation/menu.transformer.js +36 -0
  246. package/src/transpile/components/navigation/menu.transformer.js.map +1 -0
  247. package/src/transpile/components/navigation/popover.transformer.js +39 -0
  248. package/src/transpile/components/navigation/popover.transformer.js.map +1 -0
  249. package/src/transpile/components/page/content.transformer.js +17 -0
  250. package/src/transpile/components/page/content.transformer.js.map +1 -0
  251. package/src/transpile/components/page/page-content.transformer.js +17 -0
  252. package/src/transpile/components/page/page-content.transformer.js.map +1 -0
  253. package/src/transpile/components/page/page.transformer.js +50 -0
  254. package/src/transpile/components/page/page.transformer.js.map +1 -0
  255. package/src/transpile/components/page/partial-container.transformer.js +61 -0
  256. package/src/transpile/components/page/partial-container.transformer.js.map +1 -0
  257. package/src/transpile/components/page/partial.transformer.js +19 -0
  258. package/src/transpile/components/page/partial.transformer.js.map +1 -0
  259. package/src/transpile/components/partial/partial-content.transformer.js +56 -0
  260. package/src/transpile/components/partial/partial-content.transformer.js.map +1 -0
  261. package/src/transpile/components/prefab/prefab-container.transformer.js +32 -0
  262. package/src/transpile/components/prefab/prefab-container.transformer.js.map +1 -0
  263. package/src/transpile/components/prefab/prefab.transformer.js +91 -0
  264. package/src/transpile/components/prefab/prefab.transformer.js.map +1 -0
  265. package/src/transpile/components/transform-register.js +247 -0
  266. package/src/transpile/components/transform-register.js.map +1 -0
  267. package/src/transpile/components/utils.js +371 -0
  268. package/src/transpile/components/utils.js.map +1 -0
  269. package/src/transpile/components/wmx-component/wmx-component.transformer.js +35 -0
  270. package/src/transpile/components/wmx-component/wmx-component.transformer.js.map +1 -0
  271. package/src/transpile/id-generator.js +87 -0
  272. package/src/transpile/id-generator.js.map +1 -0
  273. package/src/transpile/index.js +65 -0
  274. package/src/transpile/index.js.map +1 -0
  275. package/src/transpile/property/base-parser.js +13 -0
  276. package/src/transpile/property/base-parser.js.map +1 -0
  277. package/src/transpile/property/property-parser.js +277 -0
  278. package/src/transpile/property/property-parser.js.map +1 -0
  279. package/src/transpile/property/show-in-device.parser.js +17 -0
  280. package/src/transpile/property/show-in-device.parser.js.map +1 -0
  281. package/src/transpile/serialize-variables.js +322 -0
  282. package/src/transpile/serialize-variables.js.map +1 -0
  283. package/src/transpile/style/background-image.parser.js +20 -0
  284. package/src/transpile/style/background-image.parser.js.map +1 -0
  285. package/src/transpile/style/border-width.parser.js +20 -0
  286. package/src/transpile/style/border-width.parser.js.map +1 -0
  287. package/src/transpile/style/dimension-style.parser.js +70 -0
  288. package/src/transpile/style/dimension-style.parser.js.map +1 -0
  289. package/src/transpile/style/horizontal-align.parser.js +24 -0
  290. package/src/transpile/style/horizontal-align.parser.js.map +1 -0
  291. package/src/transpile/style/margin.parser.js +20 -0
  292. package/src/transpile/style/margin.parser.js.map +1 -0
  293. package/src/transpile/style/multi-dimension-style.parser.js +29 -0
  294. package/src/transpile/style/multi-dimension-style.parser.js.map +1 -0
  295. package/src/transpile/style/numeric-style.parser.js +18 -0
  296. package/src/transpile/style/numeric-style.parser.js.map +1 -0
  297. package/src/transpile/style/padding.parser.js +20 -0
  298. package/src/transpile/style/padding.parser.js.map +1 -0
  299. package/src/transpile/style/split-css-shorthand.js +60 -0
  300. package/src/transpile/style/split-css-shorthand.js.map +1 -0
  301. package/src/transpile/style/style.parser.js +15 -0
  302. package/src/transpile/style/style.parser.js.map +1 -0
  303. package/src/transpile/style.transformer.js +124 -0
  304. package/src/transpile/style.transformer.js.map +1 -0
  305. package/src/transpile/transform-markup.js +283 -0
  306. package/src/transpile/transform-markup.js.map +1 -0
  307. package/src/transpile/transpile-variables.js +35 -0
  308. package/src/transpile/transpile-variables.js.map +1 -0
  309. package/src/transpile/transpile.js +1098 -0
  310. package/src/transpile/transpile.js.map +1 -0
  311. package/src/transpile/transpiler.js +26 -0
  312. package/src/transpile/transpiler.js.map +1 -0
  313. package/src/transpile/variables-template-source.js +6 -0
  314. package/src/transpile/variables-template-source.js.map +1 -0
  315. package/src/transpile/variables-template.js +15 -0
  316. package/src/transpile/variables-template.js.map +1 -0
  317. package/src/transpile/widget-inline-style-constants.js +200 -0
  318. package/src/transpile/widget-inline-style-constants.js.map +1 -0
  319. package/src/transpile/widget-inline-style-processor.js +684 -0
  320. package/src/transpile/widget-inline-style-processor.js.map +1 -0
  321. package/src/types/index.js +6 -0
  322. package/src/types/index.js.map +1 -0
  323. package/src/utils/grouping-util.js +500 -0
  324. package/src/utils/grouping-util.js.map +1 -0
  325. package/src/utils.browser.js +853 -0
  326. package/src/utils.browser.js.map +1 -0
  327. package/src/utils.js +988 -0
  328. package/src/utils.js.map +1 -0
  329. package/src/variables/variable.transformer.js +690 -0
  330. package/src/variables/variable.transformer.js.map +1 -0
  331. package/src/wmx.generator.js +216 -0
  332. package/src/wmx.generator.js.map +1 -0
  333. package/templates/.DS_Store +0 -0
  334. package/templates/app.style.template +3 -0
  335. package/templates/app.variables.template +1 -0
  336. package/templates/component/app.libs.hbs +38 -0
  337. package/templates/component/app.script.hbs +8 -0
  338. package/templates/component/app.template.hbs +47 -0
  339. package/templates/component/component.hbs +79 -0
  340. package/templates/component/component.props.template +1 -0
  341. package/templates/component/formatter.hbs +8 -0
  342. package/templates/component/layout.hbs +32 -0
  343. package/templates/component/page.hbs +16 -0
  344. package/templates/component/partial.hbs +69 -0
  345. package/templates/component/script.template +6 -0
  346. package/templates/component/style-def.template +18 -0
  347. package/templates/component/style.template +1 -0
  348. package/templates/entity-provider.template +21 -0
  349. package/templates/foundation/layout.tsx +30 -0
  350. package/templates/pages-config.template +12 -0
  351. package/templates/partial-config.template +58 -0
  352. package/templates/project/.DS_Store +0 -0
  353. package/templates/project/.env +1 -0
  354. package/templates/project/.gitignore +2 -0
  355. package/templates/project/.prettierrc +8 -0
  356. package/templates/project/README.md +60 -0
  357. package/templates/project/app/autoLayout.css +133 -0
  358. package/templates/project/app/client.layout.tsx +193 -0
  359. package/templates/project/app/components.css +182 -0
  360. package/templates/project/app/error.tsx +27 -0
  361. package/templates/project/app/globals.css +5 -0
  362. package/templates/project/app/layout.tsx +40 -0
  363. package/templates/project/app/loading.tsx +6 -0
  364. package/templates/project/app/page.tsx +3 -0
  365. package/templates/project/app/widgetInlineStylesOverride.css +1027 -0
  366. package/templates/project/app/wm-globals.css +152 -0
  367. package/templates/project/app/wm-styles.css +4 -0
  368. package/templates/project/hooks/usePageEvents.tsx +45 -0
  369. package/templates/project/libs/appConfig.ts +14 -0
  370. package/templates/project/next-env.d.ts +5 -0
  371. package/templates/project/next.config.ts +17 -0
  372. package/templates/project/package-lock.json +5397 -0
  373. package/templates/project/package.json +41 -0
  374. package/templates/project/public/error-fallback.svg +89 -0
  375. package/templates/project/public/file.svg +1 -0
  376. package/templates/project/public/globe.svg +1 -0
  377. package/templates/project/public/next.svg +1 -0
  378. package/templates/project/public/vercel.svg +1 -0
  379. package/templates/project/public/window.svg +1 -0
  380. package/templates/project/scripts/app-custom-server.js +44 -0
  381. package/templates/project/scripts/getlibs.js +53 -0
  382. package/templates/project/tsconfig.json +36 -0
  383. package/templates/project/types/runtime-config.d.ts +9 -0
  384. package/templates/resource.resolver.template +20 -0
  385. package/templates/service.defs.template +3 -0
  386. package/templates/variables.template +252 -0
@@ -0,0 +1,1098 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createExpression = exports.transformDollarBracketSyntax = exports.decodeHTMLEntities = exports.transpileElement = exports.processTextContentForJSX = exports.addFragmentOptionalChaining = exports.createComponent = exports.preTranspile = exports.transformAttrs = exports.transpileMarkup = exports.registerTransformer = exports.TranspilationContext = exports.HTMLElementClass = exports.isHTMLElement = exports.NodeType = exports.parse = exports.generateRandomString = void 0;
40
+ const lodash_1 = require("lodash");
41
+ const node_html_parser_1 = __importStar(require("node-html-parser"));
42
+ const fomatter_1 = require("../fomatter");
43
+ const bind_ex_transformer_1 = __importStar(require("./bind.ex.transformer"));
44
+ const style_transformer_1 = __importDefault(require("./style.transformer"));
45
+ const property_parser_1 = require("./property/property-parser");
46
+ const utils_browser_1 = require("../utils.browser");
47
+ const id_generator_1 = require("./id-generator");
48
+ const widget_inline_style_processor_1 = require("./widget-inline-style-processor");
49
+ const generateRandomString = (length = 10) => Math.random().toString(20).substr(2, length);
50
+ exports.generateRandomString = generateRandomString;
51
+ const EVENT_NAME_MAP = {
52
+ "on-dblclick": "on-doubleClick",
53
+ "on-mouseenter": "on-mouseEnter",
54
+ "on-mouseleave": "on-mouseLeave",
55
+ "on-mouseover": "on-mouseOver",
56
+ "on-mouseout": "on-mouseOut",
57
+ "on-beforesubmit": "on-BeforeSubmit",
58
+ "on-dragstart": "on-dragStart",
59
+ "on-dragend": "on-dragEnd",
60
+ "on-dragover": "on-dragOver",
61
+ "on-dragenter": "on-dragEnter",
62
+ "on-dragleave": "on-dragLeave",
63
+ };
64
+ /**
65
+ * Processes text content for JSX compatibility
66
+ * If content is only special characters (like > or <), wraps them in React expressions
67
+ * @param textContent The raw text content from the node
68
+ * @returns Processed text content safe for JSX, or empty string if no valid content
69
+ */
70
+ const processTextContentForJSX = (textContent) => {
71
+ const trimmedContent = textContent.trim();
72
+ if (!trimmedContent) {
73
+ return "";
74
+ }
75
+ // If content is only special characters (like > or <), wrap in React expression
76
+ if (/^[<>&]+$/.test(trimmedContent)) {
77
+ // Convert each special character to React expression
78
+ return trimmedContent
79
+ .split("")
80
+ .map(char => `{'${char}'}`)
81
+ .join("");
82
+ }
83
+ return textContent;
84
+ };
85
+ exports.processTextContentForJSX = processTextContentForJSX;
86
+ // node-html-parser ESM wrapper bug: when bundlers use default interop, named exports (parse, NodeType, HTMLElement) are undefined
87
+ exports.parse = typeof node_html_parser_1.default === "function"
88
+ ? node_html_parser_1.default
89
+ : node_html_parser_1.default.parse;
90
+ // Use standard DOM node type constants (1, 3) - NodeType named export breaks under Turbopack/Next bundling
91
+ exports.NodeType = {
92
+ ELEMENT_NODE: 1,
93
+ TEXT_NODE: 3,
94
+ };
95
+ /** Prefer over `instanceof HTMLElement` when the constructor may not match (e.g. bundlers). */
96
+ const isHTMLElement = (node) => node != null && node.nodeType === exports.NodeType.ELEMENT_NODE;
97
+ exports.isHTMLElement = isHTMLElement;
98
+ // HTMLElement constructor - fallback for when named export is undefined (Turbopack/Next bundling)
99
+ function getHTMLElementClass() {
100
+ var _a, _b, _c;
101
+ const fromModule = (_a = node_html_parser_1.default.HTMLElement) !== null && _a !== void 0 ? _a : node_html_parser_1.HTMLElement;
102
+ if (fromModule)
103
+ return fromModule;
104
+ // Fallback: get from parsed node (parse creates HTMLElement instances)
105
+ const parsed = (0, exports.parse)("<div></div>");
106
+ const firstEl = (_b = parsed.childNodes) === null || _b === void 0 ? void 0 : _b.find((c) => (c === null || c === void 0 ? void 0 : c.nodeType) === 1);
107
+ return ((_c = firstEl === null || firstEl === void 0 ? void 0 : firstEl.constructor) !== null && _c !== void 0 ? _c : (() => {
108
+ throw new Error("node-html-parser HTMLElement not available");
109
+ })());
110
+ }
111
+ exports.HTMLElementClass = getHTMLElementClass();
112
+ // Input widgets that should inherit required/floating-label behavior from wm-composite
113
+ const COMPOSITE_INPUT_TAGS = new Set([
114
+ "wm-text",
115
+ "wm-number",
116
+ "wm-currency",
117
+ "wm-date",
118
+ "wm-time",
119
+ "wm-datetime",
120
+ "wm-textarea",
121
+ "wm-select",
122
+ "wm-radioset",
123
+ "wm-checkbox",
124
+ "wm-checkboxset",
125
+ "wm-switch",
126
+ "wm-slider",
127
+ "wm-fileupload",
128
+ "wm-rating",
129
+ "wm-colorpicker",
130
+ "wm-search",
131
+ ]);
132
+ /**
133
+ * Adds optional chaining to fragment expressions and fallback values
134
+ * Converts fragment.Variables.wsGetActiveTheme.dataSet.content[0].themeId
135
+ * to (fragment?.Variables?.wsGetActiveTheme?.dataSet?.content?.[0]?.themeId || "")
136
+ *
137
+ * Note: Does not add fallback for expressions containing function calls to preserve syntax
138
+ */
139
+ const addFragmentOptionalChaining = (expression, addFallback = false) => {
140
+ const chainingObj = {
141
+ targetPattern: /fragment(?:\.[a-zA-Z_$][a-zA-Z0-9_$]*|\[[^\]]+\])*/g,
142
+ addFallback: addFallback,
143
+ detectFunctionCalls: true,
144
+ ...(addFallback && { fallbackValue: '""' }),
145
+ };
146
+ return (0, utils_browser_1.addOptionalChaining)(expression);
147
+ };
148
+ exports.addFragmentOptionalChaining = addFragmentOptionalChaining;
149
+ class TranspilationContext {
150
+ constructor(args) {
151
+ this.result = args.result;
152
+ this.transformer = args.transformer;
153
+ this.isPartOfPrefab = args.isPartOfPrefab;
154
+ this.listener = args.listener;
155
+ this.props = args.props;
156
+ this.data = (0, lodash_1.assign)({}, args.data);
157
+ }
158
+ get(key) {
159
+ return this.data && this.data[key];
160
+ }
161
+ set(key, value) {
162
+ this.data[key] = value;
163
+ }
164
+ }
165
+ exports.TranspilationContext = TranspilationContext;
166
+ class Transpiler {
167
+ constructor() {
168
+ this.transformers = new Map();
169
+ this.componentNamesList = [];
170
+ this.transpile = (e, isPartOfPrefab, splitCode = true, oldContext) => {
171
+ var _a;
172
+ const isHtmlElement = utils_browser_1.htmlElements.includes(e.tagName.toLowerCase());
173
+ const ignoreElements = ["wm-filter-action", "wm-form-action"];
174
+ const transformer = this.transformers.get(e && e.tagName.toLowerCase());
175
+ let result = {
176
+ markup: "",
177
+ components: {},
178
+ attrs: {},
179
+ imports: [],
180
+ partials: [],
181
+ prefabs: [],
182
+ wmxcomponents: [],
183
+ };
184
+ // Skip name auto-generation for elements inside table column or explicitly ignored elements
185
+ if (!e.getAttribute("name") &&
186
+ !ignoreElements.includes(e.tagName.toLowerCase()) &&
187
+ !((_a = oldContext === null || oldContext === void 0 ? void 0 : oldContext.data) === null || _a === void 0 ? void 0 : _a.isInsideTableColumn)) {
188
+ e.setAttribute("name", `${e.tagName.toLowerCase().replace(/-/g, "_")}_${(0, exports.generateRandomString)()}`);
189
+ }
190
+ // for every new page, initially context is empty. Hence clearing the prev page componentNamesList array.
191
+ if (!oldContext) {
192
+ this.componentNamesList = [];
193
+ }
194
+ if (isHtmlElement) {
195
+ result.markup = preTranspileHtmlElement(e);
196
+ e.childNodes.forEach(c => {
197
+ if (c && c.nodeType == exports.NodeType.ELEMENT_NODE) {
198
+ const cResult = this.transpile(c, isPartOfPrefab, splitCode);
199
+ (0, lodash_1.assignIn)(result.components, cResult.components);
200
+ result.markup += cResult.markup;
201
+ result.imports.push(...cResult.imports);
202
+ result.prefabs.push(...cResult.prefabs);
203
+ result.partials.push(...cResult.partials);
204
+ result.components = { ...result.components, ...cResult.components };
205
+ if (cResult.pageEvents)
206
+ result.pageEvents = cResult.pageEvents;
207
+ }
208
+ else if (c && c.nodeType == exports.NodeType.TEXT_NODE) {
209
+ // Preserve text nodes
210
+ const processedContent = processTextContentForJSX(c.text);
211
+ if (processedContent) {
212
+ result.markup += processedContent;
213
+ }
214
+ }
215
+ });
216
+ result.markup += postTranspileHtmlElement(e);
217
+ }
218
+ else if (transformer != null) {
219
+ const context = new TranspilationContext({
220
+ result: result,
221
+ isPartOfPrefab: isPartOfPrefab,
222
+ transformer: transformer,
223
+ listener: oldContext === null || oldContext === void 0 ? void 0 : oldContext.listener,
224
+ props: (oldContext === null || oldContext === void 0 ? void 0 : oldContext.props) || [],
225
+ data: oldContext === null || oldContext === void 0 ? void 0 : oldContext.data,
226
+ });
227
+ result.imports.push(...transformer.imports(e, context));
228
+ result.markup +=
229
+ transformer.pre(e, context).replace(new RegExp(bind_ex_transformer_1.FORMAT_CONTEXT, "g"), "") +
230
+ (e.childNodes.length > 0 ? "\n" : "");
231
+ e.childNodes.forEach(c => {
232
+ if (c && c.nodeType == exports.NodeType.ELEMENT_NODE) {
233
+ const cResult = this.transpile(c, isPartOfPrefab, splitCode, context);
234
+ (0, lodash_1.assignIn)(result.components, cResult.components);
235
+ result.markup += cResult.markup;
236
+ result.imports.push(...cResult.imports);
237
+ result.prefabs.push(...cResult.prefabs);
238
+ result.wmxcomponents.push(...cResult.wmxcomponents);
239
+ result.partials.push(...cResult.partials);
240
+ result.components = { ...result.components, ...cResult.components };
241
+ if (cResult.pageEvents)
242
+ result.pageEvents = cResult.pageEvents;
243
+ }
244
+ else if (c && c.nodeType == exports.NodeType.TEXT_NODE) {
245
+ // Handle text nodes for custom elements
246
+ const processedContent = processTextContentForJSX(c.text);
247
+ if (processedContent) {
248
+ result.markup += processedContent;
249
+ }
250
+ }
251
+ });
252
+ transformer.partials && result.partials.push(...transformer.partials(e, context));
253
+ transformer.prefabs && result.prefabs.push(...transformer.prefabs(e, context));
254
+ transformer.wmxcomponents &&
255
+ result.wmxcomponents.push(...transformer.wmxcomponents(e, context));
256
+ result.markup += transformer.post(e, context).replace(new RegExp(bind_ex_transformer_1.FORMAT_CONTEXT, "g"), "");
257
+ // splitCode && transformer.createComponent && transformer.createComponent(e, context);
258
+ const accessRole = e.attrs["accessroles"];
259
+ if (accessRole) {
260
+ result.markup = `{fragment.appConfig.SecurityService.hasAccessToWidget('${accessRole}') ? (${result.markup}): null}`;
261
+ }
262
+ result.markup = (0, fomatter_1.prependSpace)(result.markup, 2) + "\n";
263
+ }
264
+ return result;
265
+ };
266
+ }
267
+ /**
268
+ * Transforms $[...] syntax to fragment.property for use with Angular parser
269
+ * Examples:
270
+ * $[location] -> fragment.location
271
+ * $[data[$i].locationDesc] -> fragment.locationDesc (removes data[$i]. prefix)
272
+ */
273
+ transformDollarBracketForFragmentContext(expression) {
274
+ // First, remove data[$i]. prefixes from within $[...] brackets
275
+ expression = expression.replace(/\$\[data\[\$i\]\./g, "$[");
276
+ // Transform $[property.path] to fragment.property.path
277
+ expression = expression.replace(/\$\[([^\]]+)\]/g, (match, property) => {
278
+ // Remove any remaining data[index]. patterns
279
+ property = property.replace(/data\[\d+\]\./g, "");
280
+ return `${property}`;
281
+ });
282
+ return expression;
283
+ }
284
+ /**
285
+ * Checks if a parent element has a dataset that matches the base path of the current dataset.
286
+ * This is used to determine if [$i] should be handled by parent's $item transformation.
287
+ * Example: child has "Variables.list.dataSet[$i].Features", parent has "Variables.list.dataSet"
288
+ */
289
+ hasParentWithMatchingDataset(element, basePath) {
290
+ var _a;
291
+ let parent = element.parentNode;
292
+ while (parent) {
293
+ const parentDataset = (_a = parent.getAttribute) === null || _a === void 0 ? void 0 : _a.call(parent, "dataset");
294
+ if (parentDataset) {
295
+ // Remove bind: prefix if present
296
+ const parentDatasetValue = parentDataset.startsWith("bind:")
297
+ ? parentDataset.substring(5)
298
+ : parentDataset;
299
+ // Check if parent dataset matches the base path (the array being iterated)
300
+ if (parentDatasetValue === basePath || parentDatasetValue === `fragment.${basePath}`) {
301
+ return true;
302
+ }
303
+ }
304
+ parent = parent.parentNode;
305
+ }
306
+ return false;
307
+ }
308
+ /**
309
+ * Transforms dataset expressions containing [$i] into a map function.
310
+ * Handles two cases:
311
+ * 1. Expression case: path[$i] inside a broader expression (e.g. function calls, pipes)
312
+ * Example: (calculateLoanMetric(Variables.CustomerLoansData.dataSet[$i], 'percentagePaid')) | suffix: '%'
313
+ * 2. Simple path case: path-like structure with optional nested [$i]
314
+ * Example: Variables.A[$i].children[$i].name
315
+ */
316
+ transformDatasetWithIndex(value) {
317
+ // Check if there are any [$i] patterns
318
+ if (!value.includes("[$i]")) {
319
+ return "bind:" + (0, bind_ex_transformer_1.default)(value, "fragment", "attr");
320
+ }
321
+ const segments = value.split("[$i]");
322
+ if (segments.length < 2) {
323
+ return "bind:" + (0, bind_ex_transformer_1.default)(value, "fragment", "attr");
324
+ }
325
+ // Detect expression case: second segment contains expression syntax (parens, pipes, commas)
326
+ // e.g. ", 'percentagePaid')) | suffix: '%'" vs simple path ".children.name"
327
+ const secondSegment = segments[1].trim();
328
+ const isSimplePathSegment = /^\.?[a-zA-Z0-9_.]*$/.test(secondSegment);
329
+ if (!isSimplePathSegment) {
330
+ // Expression case: replace path[$i] with item, transform inner expr, wrap in map
331
+ const pathIndexMatch = value.match(/([a-zA-Z_$][a-zA-Z0-9_$]*(?:\.[a-zA-Z_$][a-zA-Z0-9_$]*)*)\[\$i\]/);
332
+ if (!pathIndexMatch) {
333
+ return "bind:" + (0, bind_ex_transformer_1.default)(value, "fragment", "attr");
334
+ }
335
+ const basePath = pathIndexMatch[1];
336
+ const pathWithIndex = `${basePath}[$i]`;
337
+ const innerExpression = value.replace(pathWithIndex, "item");
338
+ value = this.transformDollarBracketForFragmentContext(innerExpression);
339
+ let transformedInner = (0, bind_ex_transformer_1.default)(value, "fragment", "attr");
340
+ // transformEx treats bare 'item' as fragment.item; fix for map callback param
341
+ transformedInner = transformedInner
342
+ .replace(/fragment\?\.item\b/g, "item")
343
+ .replace(/fragment\.item\b/g, "item");
344
+ const transformedBase = (0, utils_browser_1.addOptionalChaining)(`fragment.${basePath}`);
345
+ const mapExpression = `${transformedBase}?.map((item) => ${transformedInner})`;
346
+ return `mapfn:() => ${mapExpression}`;
347
+ }
348
+ // Simple path case: use nested map logic
349
+ const basePath = segments[0];
350
+ const transformedBase = (0, utils_browser_1.addOptionalChaining)(`fragment.${basePath}`);
351
+ const buildNestedMap = (segmentIndex, itemVar) => {
352
+ const segment = segments[segmentIndex];
353
+ let cleanSegment = segment.startsWith(".") ? segment.substring(1) : segment;
354
+ cleanSegment = cleanSegment.trim();
355
+ const isLastSegment = segmentIndex === segments.length - 1;
356
+ if (isLastSegment) {
357
+ if (cleanSegment) {
358
+ return (0, utils_browser_1.addOptionalChaining)(`${itemVar}.${cleanSegment}`);
359
+ }
360
+ return itemVar;
361
+ }
362
+ else {
363
+ const nextItemVar = segmentIndex === 1 ? "child" : `item${segmentIndex}`;
364
+ const nextExpression = buildNestedMap(segmentIndex + 1, nextItemVar);
365
+ if (cleanSegment) {
366
+ const propertyAccess = (0, utils_browser_1.addOptionalChaining)(`${itemVar}.${cleanSegment}`);
367
+ return `${propertyAccess}?.map(${nextItemVar} => ${nextExpression})`;
368
+ }
369
+ return `${itemVar}?.map(${nextItemVar} => ${nextExpression})`;
370
+ }
371
+ };
372
+ const mapExpression = `${transformedBase}?.map(item => ${buildNestedMap(1, "item")}) || []`;
373
+ return `mapfn:() => ${mapExpression}`;
374
+ }
375
+ preTranspile(e) {
376
+ // remove variant attribute from element
377
+ // because it's not required in JSX
378
+ e === null || e === void 0 ? void 0 : e.removeAttribute("variant");
379
+ Object.keys(e.attributes).forEach(name => {
380
+ let value = e.attributes[name];
381
+ if (value.startsWith("bind:")) {
382
+ value = value.substring(5).trim();
383
+ // Remove trailing semicolons (common in WaveMaker expressions but invalid in JSX)
384
+ value = value.replace(/;+$/, "");
385
+ // Check if this is a simple single $[...] expression that can be simplified
386
+ const simpleSinglePattern = /^\$\[([^\]]+)\]$/;
387
+ const match = value.match(simpleSinglePattern);
388
+ if (match) {
389
+ // Extract property path and remove data[$i]. prefix if present
390
+ let propertyPath = match[1];
391
+ propertyPath = propertyPath.replace(/^data\[\$i\]\./, "");
392
+ propertyPath = propertyPath.replace(/^data\[\d+\]\./, "");
393
+ e.setAttribute(name, propertyPath);
394
+ }
395
+ else if (name === "dataset" && value.includes("[$i]")) {
396
+ // Check if this [$i] should be handled by a parent's $item transformation
397
+ // Extract base path (everything before [$i])
398
+ const basePathMatch = value.match(/^(.+?)\[\$i\]/);
399
+ const basePath = basePathMatch ? basePathMatch[1] : null;
400
+ if (basePath && this.hasParentWithMatchingDataset(e, basePath)) {
401
+ // Parent has matching dataset - let transformRepeatChildData handle [$i] → $item
402
+ // Transform $[...] syntax before passing to Angular parser
403
+ value = this.transformDollarBracketForFragmentContext(value);
404
+ let transformedValue = (0, bind_ex_transformer_1.default)(value, "fragment", "attr");
405
+ e.setAttribute(name, "bind:" + transformedValue);
406
+ }
407
+ else {
408
+ // No parent with matching dataset - generate map function
409
+ const datasetMapResult = this.transformDatasetWithIndex(value);
410
+ e.setAttribute(name, datasetMapResult);
411
+ }
412
+ }
413
+ else {
414
+ // Transform $[...] syntax before passing to Angular parser
415
+ value = this.transformDollarBracketForFragmentContext(value);
416
+ let transformedValue = (0, bind_ex_transformer_1.default)(value, "fragment", "attr");
417
+ // Apply optional chaining with fallback only for backgroundimage
418
+ if (name === "backgroundimage") {
419
+ transformedValue = addFragmentOptionalChaining(transformedValue, true);
420
+ }
421
+ e.setAttribute(name, "bind:" + transformedValue);
422
+ }
423
+ }
424
+ else if (name === "groupby" && value.includes("(")) {
425
+ e.setAttribute(name, (0, bind_ex_transformer_1.default)(value, "fragment", "event"));
426
+ }
427
+ else if (name.startsWith("on-")) {
428
+ //on-tap to onclick conversion
429
+ if (name === "on-tap") {
430
+ if (e.getAttribute("on-click")) {
431
+ e.removeAttribute("on-tap");
432
+ return;
433
+ }
434
+ const tapValue = value;
435
+ e.removeAttribute("on-tap");
436
+ name = "on-click";
437
+ value = tapValue;
438
+ }
439
+ const mappedName = EVENT_NAME_MAP[name];
440
+ if (mappedName) {
441
+ e.removeAttribute(name);
442
+ name = mappedName;
443
+ }
444
+ let transformedValue = (0, bind_ex_transformer_1.default)(value, "fragment", "event");
445
+ // Apply optional chaining for event handlers
446
+ transformedValue = addFragmentOptionalChaining(transformedValue, false);
447
+ e.setAttribute(name, transformedValue + ";");
448
+ }
449
+ });
450
+ e.childNodes.forEach(c => {
451
+ if ((0, exports.isHTMLElement)(c)) {
452
+ this.preTranspile(c);
453
+ }
454
+ });
455
+ }
456
+ transformStyles(e, context) {
457
+ // WaveMaker source markup may carry a `styles` attr with raw CSS (e.g. "cursor:pointer;").
458
+ // Parse it into a JS style object and remove the raw attr so it doesn't leak into output.
459
+ let rawStylesObj = {};
460
+ const rawStyles = e.getAttribute("styles");
461
+ if (rawStyles && !rawStyles.startsWith("bind:") && !rawStyles.startsWith("{")) {
462
+ rawStyles.split(";").forEach(rule => {
463
+ const colonIdx = rule.indexOf(":");
464
+ if (colonIdx > 0) {
465
+ const prop = rule.substring(0, colonIdx).trim();
466
+ const val = rule.substring(colonIdx + 1).trim();
467
+ if (prop && val) {
468
+ const camelProp = prop.replace(/-([a-z])/g, (_, l) => l.toUpperCase());
469
+ rawStylesObj[camelProp] = val;
470
+ }
471
+ }
472
+ });
473
+ e.removeAttribute("styles");
474
+ }
475
+ const hasConditionalStyles = e.getAttribute("conditionalstyle");
476
+ if (hasConditionalStyles) {
477
+ // add optional chaining to the conditional styles
478
+ e.setAttribute("conditionalstyle", addFragmentOptionalChaining(hasConditionalStyles, true));
479
+ }
480
+ const styleObj = (0, style_transformer_1.default)(e, (propName) => {
481
+ const transformer = context.transformer;
482
+ if (transformer && transformer.isStyleProperty) {
483
+ return transformer.isStyleProperty(propName, e, context);
484
+ }
485
+ return true;
486
+ }) || {};
487
+ // Merge raw CSS properties from `styles` attr into the style object
488
+ if (Object.keys(rawStylesObj).length > 0) {
489
+ (0, lodash_1.merge)(styleObj, rawStylesObj);
490
+ }
491
+ let classes = e.getAttribute("class") || "";
492
+ let isStatic = true;
493
+ let styles = styleObj;
494
+ let style = {};
495
+ const styleAttr = e.getAttribute("style");
496
+ if (styleAttr) {
497
+ style =
498
+ (0, style_transformer_1.default)(e, (propName) => {
499
+ const transformer = context.transformer;
500
+ if (transformer && transformer.isStyleProperty) {
501
+ return transformer.isStyleProperty(propName, e, context);
502
+ }
503
+ return true;
504
+ }) || {};
505
+ styles = (0, lodash_1.merge)(style, styleObj);
506
+ }
507
+ if (styles) {
508
+ Object.keys(styleObj).forEach(i => {
509
+ const styleProp = styleObj[i];
510
+ if ((0, lodash_1.isString)(styleProp) && styleProp.startsWith("bind:")) {
511
+ isStatic = false;
512
+ const bindExpr = styleProp.substring(5);
513
+ styleObj[i] = `{___${(0, utils_browser_1.addOptionalChaining)(bindExpr)}___}`;
514
+ }
515
+ });
516
+ if (styles.background) {
517
+ styles.root = styles.root || {};
518
+ styles.root._background = styles.background;
519
+ delete styles.background;
520
+ }
521
+ styles = JSON.stringify(styleObj).replace(/\\"/g, '"');
522
+ if (!isStatic) {
523
+ styles = styles.replace(/"\{___/g, "");
524
+ styles = styles.replace(/___\}"/g, "");
525
+ }
526
+ }
527
+ let conditionalClasses = e.getAttribute("conditionalclass") || e.getAttribute("ngclass");
528
+ if (classes.startsWith("bind:")) {
529
+ classes = `{${classes.substring(5)}}`;
530
+ }
531
+ if (conditionalClasses) {
532
+ conditionalClasses = conditionalClasses.startsWith("bind:")
533
+ ? `${conditionalClasses.substring(5)}`
534
+ : conditionalClasses;
535
+ if (conditionalClasses.startsWith("{") && conditionalClasses.endsWith("}")) {
536
+ conditionalClasses = conditionalClasses.slice(1, -1);
537
+ let expressions = conditionalClasses.split(",").map(expression => {
538
+ const [className, condition] = expression.split(":");
539
+ // If no condition is provided (no colon), wrap the class in quotes
540
+ if (!condition) {
541
+ return `'${className.trim()}'`;
542
+ }
543
+ return `(${(0, utils_browser_1.addOptionalChaining)(condition.trim())} ? ${className.replace(/'$/, " '")} : '')`;
544
+ });
545
+ conditionalClasses = expressions.join("+");
546
+ }
547
+ else if (!conditionalClasses.includes(":") &&
548
+ !conditionalClasses.includes("&&") &&
549
+ !conditionalClasses.includes("||") &&
550
+ !conditionalClasses.includes("$formField")) {
551
+ conditionalClasses = `${conditionalClasses}`;
552
+ }
553
+ else {
554
+ conditionalClasses = (0, utils_browser_1.addOptionalChaining)(conditionalClasses);
555
+ }
556
+ if (classes === null || classes === void 0 ? void 0 : classes.startsWith("{")) {
557
+ classes = classes.substring(0, classes.length - 1);
558
+ classes = `${classes} + ' ' + ${conditionalClasses}}`;
559
+ }
560
+ else if (classes) {
561
+ classes = `{'${classes} ' + ${conditionalClasses}}`;
562
+ }
563
+ else {
564
+ classes = `{${conditionalClasses}}`;
565
+ }
566
+ }
567
+ else if (!!classes && !classes.startsWith("{")) {
568
+ classes = `'${classes}'`;
569
+ }
570
+ e.removeAttribute("conditionalclass");
571
+ e.removeAttribute("ngclass");
572
+ e.removeAttribute("class");
573
+ e.removeAttribute("style");
574
+ return {
575
+ styles: styles,
576
+ className: (0, utils_browser_1.addOptionalChaining)(classes),
577
+ };
578
+ }
579
+ findArgs(str, context) {
580
+ var _a;
581
+ let argStr = "";
582
+ let maxSplits = 0;
583
+ (_a = str.match(/\([^;]*\)/g)) === null || _a === void 0 ? void 0 : _a.forEach(s => {
584
+ const c = s.split(",").length;
585
+ if (maxSplits < c) {
586
+ maxSplits = c;
587
+ argStr = s;
588
+ }
589
+ });
590
+ argStr = argStr.replace(/\(|\)/g, "");
591
+ if (context === null || context === void 0 ? void 0 : context.get("isInsideList")) {
592
+ argStr = argStr
593
+ .split(",")
594
+ // List row context: omit loop-scoped proxies from synthesized handler params (`$item` from outer closure)
595
+ .filter(s => !(0, lodash_1.includes)(["$item", "currentItemWidgets"], s.trim()))
596
+ .join(",");
597
+ }
598
+ // Parse arguments properly, handling commas inside object literals and arrays
599
+ const parseArguments = (argString) => {
600
+ const args = [];
601
+ let currentArg = "";
602
+ let braceCount = 0;
603
+ let bracketCount = 0;
604
+ for (let i = 0; i < argString.length; i++) {
605
+ const char = argString[i];
606
+ // Track object literals (curly braces) and arrays (square brackets)
607
+ if (char === "{")
608
+ braceCount++;
609
+ else if (char === "}")
610
+ braceCount--;
611
+ else if (char === "[")
612
+ bracketCount++;
613
+ else if (char === "]")
614
+ bracketCount--;
615
+ // If we encounter a comma at the top level (not inside an object or array), it's an argument separator
616
+ if (char === "," && braceCount === 0 && bracketCount === 0) {
617
+ if (currentArg.trim()) {
618
+ args.push(currentArg.trim());
619
+ }
620
+ currentArg = "";
621
+ continue;
622
+ }
623
+ currentArg += char;
624
+ }
625
+ // Add the last argument
626
+ if (currentArg.trim()) {
627
+ args.push(currentArg.trim());
628
+ }
629
+ return args;
630
+ };
631
+ // Droping literal arguments like strings, numbers, booleans, null/undefined
632
+ const isLiteral = (s) => {
633
+ const v = s.trim();
634
+ return (/^(['"]).*\1$/.test(v) ||
635
+ /^-?\d+(?:\.\d+)?$/.test(v) ||
636
+ /^(true|false|null|undefined)$/i.test(v));
637
+ };
638
+ // Arithmetic/binary expressions (e.g. "0-5", "0+3") are not valid parameter names.
639
+ // The Angular parser converts unary negatives like -5 into binary (0-5).
640
+ const isArithmeticExpression = (s) => {
641
+ const v = s.trim();
642
+ return /^\d+\s*[-+*/%]\s*\d+/.test(v);
643
+ };
644
+ // Check if argument contains a dot (property access), which makes it an expression, not a valid parameter name
645
+ const isPropertyAccess = (s) => {
646
+ return s.trim().includes(".");
647
+ };
648
+ // Object literals should not be extracted as function parameters
649
+ const isObjectLiteral = (s) => {
650
+ const trimmed = s.trim();
651
+ // Check if it starts with { and contains at least one : (key-value pair)
652
+ if (trimmed.startsWith("{") && trimmed.includes(":")) {
653
+ // Verify it's a balanced object literal
654
+ let braceCount = 0;
655
+ let inString = false;
656
+ let stringChar = "";
657
+ for (let i = 0; i < trimmed.length; i++) {
658
+ const char = trimmed[i];
659
+ if ((char === '"' || char === "'") && (i === 0 || trimmed[i - 1] !== "\\")) {
660
+ if (!inString) {
661
+ inString = true;
662
+ stringChar = char;
663
+ }
664
+ else if (char === stringChar) {
665
+ inString = false;
666
+ }
667
+ }
668
+ else if (!inString) {
669
+ if (char === "{")
670
+ braceCount++;
671
+ else if (char === "}")
672
+ braceCount--;
673
+ }
674
+ }
675
+ // If braces are balanced and it ends with }, it's an object literal
676
+ return braceCount === 0 && trimmed.endsWith("}");
677
+ }
678
+ return false;
679
+ };
680
+ // Array literals should not be extracted as function parameters
681
+ const isArrayLiteral = (s) => {
682
+ const trimmed = s.trim();
683
+ // Check if it starts with [ and ends with ]
684
+ if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
685
+ // Verify it's a balanced array literal
686
+ let bracketCount = 0;
687
+ let inString = false;
688
+ let stringChar = "";
689
+ for (let i = 0; i < trimmed.length; i++) {
690
+ const char = trimmed[i];
691
+ if ((char === '"' || char === "'") && (i === 0 || trimmed[i - 1] !== "\\")) {
692
+ if (!inString) {
693
+ inString = true;
694
+ stringChar = char;
695
+ }
696
+ else if (char === stringChar) {
697
+ inString = false;
698
+ }
699
+ }
700
+ else if (!inString) {
701
+ if (char === "[")
702
+ bracketCount++;
703
+ else if (char === "]")
704
+ bracketCount--;
705
+ }
706
+ }
707
+ // If brackets are balanced, it's an array literal
708
+ return bracketCount === 0;
709
+ }
710
+ return false;
711
+ };
712
+ const parsedArgs = parseArguments(argStr);
713
+ const args = parsedArgs
714
+ .filter(Boolean)
715
+ .filter(s => !isLiteral(s))
716
+ .filter(s => !isArithmeticExpression(s))
717
+ .filter(s => !isPropertyAccess(s))
718
+ .filter(s => !isObjectLiteral(s))
719
+ .filter(s => !isArrayLiteral(s));
720
+ const usesBareEvent = /\$event\b/.test(str);
721
+ const hasEventParam = args.some(a => a.trim() === "$event");
722
+ if (usesBareEvent && !hasEventParam) {
723
+ return args.length > 0 ? `(${args.join(", ")}, $event)` : `($event)`;
724
+ }
725
+ return `(${args.join(", ")})`;
726
+ }
727
+ quoteAttr(v) {
728
+ return ("" + v) /* Forces the conversion to string. */
729
+ .replace(/&/g, "&amp;") /* This MUST be the 1st replacement. */
730
+ .replace(/'/g, "&apos;") /* The 4 other predefined entities, required. */
731
+ .replace(/"/g, "&quot;")
732
+ .replace(/</g, "&lt;")
733
+ .replace(/>/g, "&gt;");
734
+ }
735
+ /**
736
+ * Converts ternary expressions that return string literals "true"/"false" to actual boolean values
737
+ * Example: (condition?"true":"false") -> (condition?true:false)
738
+ * Handles cases like: (condition?"true":"false"), (condition? "true" : "false"), etc.
739
+ */
740
+ convertStringBooleanTernary(exp) {
741
+ return exp.replace(/\?\s*["'](true|false)["']\s*:\s*["'](true|false)["']/g, (_, g1, g2) => `?${g1}:${g2}`);
742
+ }
743
+ shouldTrimUrlAttribute(name) {
744
+ const attrName = name.toLowerCase();
745
+ return attrName.endsWith("url") || attrName.endsWith("src");
746
+ }
747
+ transformAttr(tagName, name, value, context, tx) {
748
+ if (name === "styles" || name === "style" || name === "className") {
749
+ // continue
750
+ }
751
+ else if (name === "groupby" && value.includes("(")) {
752
+ value = `${this.findArgs(value, context)} => ${value}`;
753
+ value = `{${value}}`;
754
+ }
755
+ else if (name.startsWith("on-")) {
756
+ name = "on" + name.charAt(3).toUpperCase() + name.substr(4);
757
+ value = value.replace(/item,/g, "$item,");
758
+ value = value.replace(/item\./g, "$item.");
759
+ value = value.replace(/item\)/g, "$item)");
760
+ // List preprocessors strip `?.` via removeOptionChaining before dataset replace — restore
761
+ // fragment/Variables optional chaining for the emitted handler body.
762
+ if (context === null || context === void 0 ? void 0 : context.get("isInsideList")) {
763
+ value = value.replace(/;+\s*$/, "").trim();
764
+ value = addFragmentOptionalChaining(value, false);
765
+ }
766
+ const args = this.findArgs(value, context);
767
+ if (context === null || context === void 0 ? void 0 : context.get("isInsideTableColumn")) {
768
+ value = value.replace(/\brow\b/g, "rowData");
769
+ }
770
+ value = `${args} => {${value}}`;
771
+ value = `{${value}}`;
772
+ }
773
+ else if (name === "datasource" || name === "deletedatasource") {
774
+ if (value.startsWith("fragment")) {
775
+ value = `{${value}}`;
776
+ }
777
+ }
778
+ else if (value.startsWith("mapfn:")) {
779
+ // Handle dataset with $i - wrapped as a function
780
+ const exp = value.substring(6); // Remove "mapfn:" prefix
781
+ value = `{${exp}}`;
782
+ }
783
+ else if (value.startsWith("bind:")) {
784
+ let exp = `${value.substring(5)}`;
785
+ exp = exp.replace("fragment.Page", "fragment");
786
+ const isProgressCircleDatavalue = tagName === "wm-progress-circle" && name === "datavalue";
787
+ exp = (0, utils_browser_1.modifyExpression)(exp);
788
+ exp = this.convertStringBooleanTernary(exp);
789
+ // If expression is empty after transformation, use empty string instead of empty braces
790
+ if (!exp) {
791
+ exp = '""';
792
+ }
793
+ if (isProgressCircleDatavalue) {
794
+ value = `{(${exp} || 0)}`; // for progress circle datavalue, we need to set the value to 0 if it is null or undefined
795
+ }
796
+ else {
797
+ value = name === "show" ? `{(${exp} || false)}` : `{${exp}}`;
798
+ }
799
+ if (name === "conditionalclass") {
800
+ return "";
801
+ }
802
+ }
803
+ else if (name === "width" || name === "height") {
804
+ let exp = `${value.substring(5)}`;
805
+ value = `{${value}}`;
806
+ }
807
+ else {
808
+ if (this.shouldTrimUrlAttribute(name)) {
809
+ value = value.trim();
810
+ }
811
+ value = this.quoteAttr(value);
812
+ value = (0, property_parser_1.parseProperty)(value, name, tagName);
813
+ }
814
+ if (tx) {
815
+ const rvalue = tx(name, value);
816
+ if (!(0, lodash_1.isNil)(rvalue)) {
817
+ value = rvalue;
818
+ }
819
+ }
820
+ return (0, lodash_1.isNil)(value) || (0, lodash_1.isEmpty)(value) ? "" : `${name}=${value}`;
821
+ }
822
+ transformAttrs(e, context, tx) {
823
+ var _a, _b, _c;
824
+ const autolayout = (_a = context.data) === null || _a === void 0 ? void 0 : _a.autolayoutCodegen;
825
+ const autoLayoutResult = (_b = autolayout === null || autolayout === void 0 ? void 0 : autolayout.processElement(e)) !== null && _b !== void 0 ? _b : null;
826
+ e.setAttribute("data-widget-id", (0, id_generator_1.generateWidgetId)());
827
+ const { styles, className } = this.transformStyles(e, context);
828
+ const tagName = e.tagName.toLowerCase();
829
+ if (!(0, lodash_1.isEmpty)(styles) && styles != "{}") {
830
+ e.setAttribute("styles", `{${styles}}`);
831
+ }
832
+ if (!(0, lodash_1.isEmpty)(className) && className) {
833
+ e.setAttribute("className", className);
834
+ }
835
+ if (tagName === "wm-composite" &&
836
+ (e.getAttribute("captionposition") === "floating" || e.getAttribute("required") === "true")) {
837
+ const labelNode = e.childNodes.find((node) => { var _a; return node.tagName && ((_a = node.tagName) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === "wm-label"; });
838
+ const isRequired = e.getAttribute("required") === "true";
839
+ const floatingLabel = e.getAttribute("captionposition") === "floating";
840
+ const labelCaption = (labelNode === null || labelNode === void 0 ? void 0 : labelNode.getAttribute("caption")) || "";
841
+ const containerNode = e.childNodes.find((node) => { var _a; return node.tagName && ((_a = node.tagName) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === "wm-container"; });
842
+ const searchNodes = (containerNode === null || containerNode === void 0 ? void 0 : containerNode.childNodes) || e.childNodes || [];
843
+ const foundInputs = searchNodes.filter((node) => { var _a, _b; return COMPOSITE_INPUT_TAGS.has(((_b = (_a = node.tagName) === null || _a === void 0 ? void 0 : _a.toLowerCase) === null || _b === void 0 ? void 0 : _b.call(_a)) || ""); });
844
+ if (foundInputs.length && floatingLabel) {
845
+ foundInputs[0].setAttribute("floatinglabel", labelCaption);
846
+ labelNode && labelNode.remove();
847
+ }
848
+ if (isRequired) {
849
+ labelNode && labelNode.setAttribute("required", "true");
850
+ const name = (_c = foundInputs[0]) === null || _c === void 0 ? void 0 : _c.getAttribute("name");
851
+ labelNode && name && labelNode.setAttribute("htmlFor", name);
852
+ foundInputs.forEach(n => n.setAttribute("required", "true"));
853
+ }
854
+ }
855
+ let str = Object.keys(e.attributes)
856
+ .map(name => {
857
+ return this.transformAttr(tagName, name, e.attributes[name], context, tx);
858
+ })
859
+ .join(" ");
860
+ // Append layoutClassName as a separate attribute, bypassing setAttribute to avoid HTML-entity encoding
861
+ if (autoLayoutResult && autolayout) {
862
+ const layoutClassNameValue = autolayout.buildLayoutClassNameAttr(autoLayoutResult);
863
+ str += ` layoutClassName=${layoutClassNameValue}`;
864
+ }
865
+ return str;
866
+ }
867
+ createUniqueComponentName(components, name, counter = 0) {
868
+ name = name + counter;
869
+ if (components[name]) {
870
+ return this.createUniqueComponentName(components, name, counter++);
871
+ }
872
+ return name;
873
+ }
874
+ createComponent(e, context) {
875
+ const result = context.result;
876
+ let widgetName = "PC_" + (0, lodash_1.capitalize)(e.attrs["name"]);
877
+ widgetName = (0, lodash_1.replace)(widgetName, /[^a-zA-Z0-9]/g, "_");
878
+ if (this.componentNamesList.indexOf(widgetName) !== -1) {
879
+ widgetName = this.createUniqueComponentName(result.components, widgetName);
880
+ }
881
+ this.componentNamesList.push(widgetName);
882
+ const props = ["fragment", ...context.props];
883
+ result.components[widgetName] = `({${props.join(",")}}) => {
884
+ return (${result.markup});
885
+ }`;
886
+ result.markup = `<${widgetName} ${props.map(p => `${p}={${p}}`).join(" ")}/>`;
887
+ return result;
888
+ }
889
+ registerTransformer(tagName, transformer) {
890
+ transpiler.transformers.set(tagName, transformer);
891
+ }
892
+ }
893
+ const transpiler = new Transpiler();
894
+ exports.registerTransformer = transpiler.registerTransformer.bind(transpiler);
895
+ const transpileMarkup = (markup, isPartOfPrefab, splitCode, variables, preview) => {
896
+ const parsed = (0, exports.parse)(markup, {
897
+ blockTextElements: {},
898
+ });
899
+ let finalResult = {
900
+ markup: "",
901
+ components: {},
902
+ partials: [],
903
+ wmxcomponents: [],
904
+ prefabs: [],
905
+ imports: [],
906
+ };
907
+ // Create a map of ModelVariables (wm.Variable category) with twoWayBinding: true
908
+ // Only ModelVariables support twoWayBinding, other variable types don't
909
+ const twoWayBindingVariables = new Set();
910
+ if (variables) {
911
+ Object.values(variables).forEach((v) => {
912
+ // Only check twoWayBinding for ModelVariables (category === "wm.Variable")
913
+ // These are the only variables that support two-way binding
914
+ if (v.category === "wm.Variable" && v.twoWayBinding === true && v.name) {
915
+ twoWayBindingVariables.add(v.name);
916
+ }
917
+ });
918
+ }
919
+ const autolayoutCodegen = new widget_inline_style_processor_1.AutolayoutCodegen();
920
+ // Create initial context with twoWayBinding variables info to pass down the tree
921
+ const initialContext = new TranspilationContext({
922
+ result: finalResult,
923
+ isPartOfPrefab: isPartOfPrefab,
924
+ transformer: {},
925
+ props: [],
926
+ data: {
927
+ twoWayBindingVariables: twoWayBindingVariables,
928
+ autolayoutCodegen,
929
+ preview: preview === true,
930
+ },
931
+ });
932
+ // Process all child nodes (including text nodes that come before the main element)
933
+ parsed.childNodes.forEach((node) => {
934
+ if (node.nodeType === exports.NodeType.TEXT_NODE) {
935
+ const textContent = node.text;
936
+ if (textContent.trim()) {
937
+ finalResult.markup += `{"${textContent.trim()}"} \n`;
938
+ }
939
+ }
940
+ else if (node.nodeType === exports.NodeType.ELEMENT_NODE) {
941
+ transpiler.preTranspile(node);
942
+ const result = transpiler.transpile(node, isPartOfPrefab, splitCode, initialContext);
943
+ finalResult.markup += result.markup;
944
+ finalResult.components = { ...finalResult.components, ...result.components };
945
+ finalResult.partials.push(...result.partials);
946
+ finalResult.prefabs.push(...result.prefabs);
947
+ finalResult.wmxcomponents.push(...result.wmxcomponents);
948
+ finalResult.imports.push(...result.imports);
949
+ if (result.pageEvents)
950
+ finalResult.pageEvents = result.pageEvents;
951
+ }
952
+ });
953
+ finalResult.autolayoutCss = autolayoutCodegen.getDynamicCssRules();
954
+ return finalResult;
955
+ };
956
+ exports.transpileMarkup = transpileMarkup;
957
+ exports.transformAttrs = transpiler.transformAttrs.bind(transpiler);
958
+ exports.preTranspile = transpiler.preTranspile.bind(transpiler);
959
+ exports.createComponent = transpiler.createComponent.bind(transpiler);
960
+ const transpileElement = (element, isPartOfPrefab, splitCode = true, oldContext) => {
961
+ return transpiler.transpile(element, isPartOfPrefab, splitCode, oldContext);
962
+ };
963
+ exports.transpileElement = transpileElement;
964
+ /**
965
+ * Decodes HTML entities in a string
966
+ * Handles common entities like &quot;, &amp;, &lt;, &gt;, &apos;
967
+ */
968
+ const decodeHTMLEntities = (text) => {
969
+ const entities = {
970
+ "&quot;": '"',
971
+ "&amp;": "&",
972
+ "&lt;": "<",
973
+ "&gt;": ">",
974
+ "&apos;": "'",
975
+ };
976
+ return text.replace(/&[a-z]+;/g, entity => entities[entity] || entity);
977
+ };
978
+ exports.decodeHTMLEntities = decodeHTMLEntities;
979
+ /**
980
+ * Transforms $[...] syntax to proper property access
981
+ * Examples:
982
+ * $[location] -> $item.location
983
+ * $[data[$i].locationDesc] -> $item.locationDesc (removes data[$i]. prefix)
984
+ * $[fragment.assetType] -> $item.assetType (removes fragment. prefix)
985
+ */
986
+ const transformDollarBracketSyntax = (expression) => {
987
+ // First, remove data[$i]. prefixes from within $[...] brackets
988
+ expression = expression.replace(/\$\[data\[\$i\]\./g, "$[");
989
+ // Transform $[property.path] to $item.property.path
990
+ expression = expression.replace(/\$\[([^\]]+)\]/g, (match, property) => {
991
+ // Remove data[index]. and fragment. prefixes
992
+ property = property.replace(/data\[\d+\]\./g, "").replace(/^fragment\./, "");
993
+ return `$item.${property}`;
994
+ });
995
+ return expression;
996
+ };
997
+ exports.transformDollarBracketSyntax = transformDollarBracketSyntax;
998
+ const createExpression = (element, attrName) => {
999
+ let displayexpression = element.attrs[attrName];
1000
+ if (displayexpression === null || displayexpression === void 0 ? void 0 : displayexpression.startsWith("bind:")) {
1001
+ displayexpression = displayexpression.substring(5).trim();
1002
+ // Remove trailing semicolons (common in WaveMaker expressions but invalid in JSX)
1003
+ displayexpression = displayexpression.replace(/;+$/, "");
1004
+ // Decode HTML entities like &quot; to "
1005
+ displayexpression = (0, exports.decodeHTMLEntities)(displayexpression);
1006
+ // Transform $[...] syntax to proper property access
1007
+ displayexpression = (0, exports.transformDollarBracketSyntax)(displayexpression);
1008
+ // Replace fragment references with $item
1009
+ displayexpression = displayexpression.replace(/fragment\.\$item/g, "$item");
1010
+ displayexpression = displayexpression.replace(/fragment\.\$index/g, "$index");
1011
+ displayexpression = displayexpression.replace(/fragment\.\$length/g, "$length");
1012
+ displayexpression = displayexpression.replace(/fragment\.\$/g, "$item");
1013
+ displayexpression = displayexpression.replace(/\$item\['fragment.(.*?)'\]/g, "$item['$1']");
1014
+ displayexpression = displayexpression.replace(/\$item\[fragment.(.*?)\]/g, "$item['$1']");
1015
+ displayexpression = displayexpression.replace(/\$item\['(.*?)'\]/g, "_get($item, '$1')");
1016
+ displayexpression = displayexpression.replace(/fragment.index/g, "$index");
1017
+ if (displayexpression.indexOf("fragment.formatters.") >= 0) {
1018
+ displayexpression = displayexpression.replace(new RegExp(bind_ex_transformer_1.FORMAT_CONTEXT, "g"), "$item");
1019
+ }
1020
+ // Transform fragment.name -> $item.name for arrow functions with $item
1021
+ displayexpression = displayexpression.replace(/fragment\.([a-zA-Z_$][a-zA-Z0-9_$]*)/g, "$item.$1");
1022
+ // Add optional chaining for all property access (e.g., $item.App.appLocale -> $item?.App?.appLocale)
1023
+ // Use negative lookbehind to avoid double optional chaining (??)
1024
+ displayexpression = displayexpression.replace(/(?<!\?)\.([a-zA-Z_$][a-zA-Z0-9_$]*)/g, "?.$1");
1025
+ displayexpression = displayexpression.replace(/([a-zA-Z0-9_$\]])\[/g, "$1?.[");
1026
+ const exp = (0, lodash_1.includes)(displayexpression, "(") ? `${displayexpression}` : displayexpression;
1027
+ if (displayexpression.indexOf("$index") >= 0) {
1028
+ return `{($item, $index, $length) => (${exp})}`;
1029
+ }
1030
+ return `{($item) => (${exp})}`;
1031
+ }
1032
+ if ((0, utils_browser_1.isJSExpression)(displayexpression)) {
1033
+ const transformedExp = (0, bind_ex_transformer_1.default)(displayexpression, "$item");
1034
+ return `{($item) => (${transformedExp})}`;
1035
+ }
1036
+ };
1037
+ exports.createExpression = createExpression;
1038
+ const preTranspileHtmlElement = (e) => {
1039
+ // Process style properties using style transformer
1040
+ const styleObj = (0, style_transformer_1.default)(e, (propName) => {
1041
+ return true; // Process all style properties
1042
+ }) || {};
1043
+ // Get all attributes except name (which is added by transpiler) and convert class to className
1044
+ const attrs = Object.keys(e.attributes)
1045
+ .filter(attr => attr !== "name")
1046
+ .map(attr => {
1047
+ const value = e.getAttribute(attr);
1048
+ if (!value)
1049
+ return `${attr}=""`;
1050
+ // Convert HTML 'class' attribute to JSX 'className'
1051
+ if (attr === "class") {
1052
+ return `className="${value}"`;
1053
+ }
1054
+ // Convert HTML 'style' attribute to JSX style object
1055
+ else if (attr === "style") {
1056
+ const styleObject = convertStyleStringToObject(value);
1057
+ return `style={${styleObject}}`;
1058
+ }
1059
+ return `${attr}="${value}"`;
1060
+ })
1061
+ .join(" ");
1062
+ // Add processed styles if any were found
1063
+ let styleAttr = "";
1064
+ if (styleObj && Object.keys(styleObj).length > 0) {
1065
+ styleAttr = ` style={${JSON.stringify(styleObj)}}`;
1066
+ }
1067
+ const attrsStr = attrs ? ` ${attrs}` : "";
1068
+ return `<${e.tagName.toLowerCase()}${attrsStr}${styleAttr}>`;
1069
+ };
1070
+ /**
1071
+ * Converts CSS style string to React style object format
1072
+ * Example: "color:#ffffff; font-size:14px" -> {color:"#ffffff",fontSize:"14px"}
1073
+ */
1074
+ const convertStyleStringToObject = (styleString) => {
1075
+ if (!styleString || styleString.trim() === "") {
1076
+ return "{}";
1077
+ }
1078
+ const styleObject = {};
1079
+ // Split by semicolon and process each style property
1080
+ styleString.split(";").forEach(rule => {
1081
+ const colonIndex = rule.indexOf(":");
1082
+ if (colonIndex > 0) {
1083
+ const property = rule.substring(0, colonIndex).trim();
1084
+ const value = rule.substring(colonIndex + 1).trim();
1085
+ if (property && value) {
1086
+ // Convert kebab-case to camelCase (e.g., font-size -> fontSize)
1087
+ const camelCaseProperty = property.replace(/-([a-z])/g, (match, letter) => letter.toUpperCase());
1088
+ styleObject[camelCaseProperty] = value;
1089
+ }
1090
+ }
1091
+ });
1092
+ // Convert to JSON string and return
1093
+ return JSON.stringify(styleObject);
1094
+ };
1095
+ const postTranspileHtmlElement = (e) => {
1096
+ return `</${e.tagName.toLowerCase()}>`;
1097
+ };
1098
+ //# sourceMappingURL=transpile.js.map