@nuraly/runtime 0.1.7 → 0.1.8

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 (349) hide show
  1. package/README.md +83 -765
  2. package/components/ui/components/Event/EventValue/EventValue.ts +13 -8
  3. package/components/ui/components/ToastContainer/ToastContainer.ts +1 -1
  4. package/components/ui/components/advanced/AIChat/AIChat.ts +1 -2
  5. package/components/ui/components/advanced/Collapse/Collapse.ts +5 -2
  6. package/components/ui/components/advanced/Collections/Collections.ts +2 -2
  7. package/components/ui/components/advanced/MicroApp/MicroApp.ts +3 -11
  8. package/components/ui/components/advanced/RefComponent/RefComponent.ts +2 -2
  9. package/components/ui/components/advanced/RichText/RichText.ts +5 -4
  10. package/components/ui/components/advanced/RichText/RichTextEditor.ts +0 -167
  11. package/components/ui/components/base/BaseElement/base-change-detection.ts +1 -5
  12. package/components/ui/components/base/BaseElement.ts +229 -610
  13. package/components/ui/components/base/FormRegisterable.ts +83 -0
  14. package/components/ui/components/base/controllers/DragDropController.ts +175 -0
  15. package/components/ui/components/base/controllers/ErrorController.ts +180 -0
  16. package/components/ui/components/base/controllers/EventController.ts +112 -0
  17. package/components/ui/components/base/controllers/InputHandlerController.ts +298 -0
  18. package/components/ui/components/base/controllers/SelectionController.ts +323 -0
  19. package/components/ui/components/base/controllers/StyleHandlerController.ts +286 -0
  20. package/components/ui/components/base/controllers/index.ts +11 -0
  21. package/components/ui/components/base/mixins/EditorModeMixin.ts +185 -0
  22. package/components/ui/components/base/mixins/index.ts +6 -0
  23. package/components/ui/components/base/types/base-element.types.ts +138 -0
  24. package/components/ui/components/base/types/index.ts +21 -0
  25. package/components/ui/components/base/utils/event-debouncer.ts +209 -0
  26. package/components/ui/components/base/utils/index.ts +11 -0
  27. package/components/ui/components/base/utils/style-cache.ts +94 -0
  28. package/components/ui/components/display/BoxModel/BoxModel.ts +177 -116
  29. package/components/ui/components/display/Code/Code.ts +40 -26
  30. package/components/ui/components/display/Divider/Divider.ts +2 -2
  31. package/components/ui/components/display/Icon/Icon.ts +2 -3
  32. package/components/ui/components/display/Image/Image.ts +72 -46
  33. package/components/ui/components/display/Tag/Tag.ts +2 -3
  34. package/components/ui/components/display/Video/Video.ts +91 -31
  35. package/components/ui/components/inputs/Button/Button.ts +2 -2
  36. package/components/ui/components/inputs/Checkbox/Checkbox.ts +14 -40
  37. package/components/ui/components/inputs/ColorPicker/colorpicker.ts +3 -4
  38. package/components/ui/components/inputs/DatePicker/DatePicker.ts +47 -25
  39. package/components/ui/components/inputs/Dropdown/Dropdown.ts +2 -2
  40. package/components/ui/components/inputs/Form/Form.style.ts +26 -0
  41. package/components/ui/components/inputs/Form/Form.ts +352 -0
  42. package/components/ui/components/inputs/IconPicker/IconPicker.ts +22 -18
  43. package/components/ui/components/inputs/InsertDropdown/InsertDropdown.ts +0 -20
  44. package/components/ui/components/inputs/NumberInput/NumberInput.ts +0 -4
  45. package/components/ui/components/inputs/RadioButton/Radio-button.ts +11 -13
  46. package/components/ui/components/inputs/Select/Select.ts +38 -24
  47. package/components/ui/components/inputs/TextInput/TextInput.ts +15 -9
  48. package/components/ui/components/inputs/Textarea/Textarea.ts +30 -30
  49. package/components/ui/components/inputs/UsersDropdown/UsersDropdown.ts +1 -1
  50. package/components/ui/components/layout/Card/Card.ts +112 -10
  51. package/components/ui/components/layout/Containers/Container.style.ts +18 -0
  52. package/components/ui/components/layout/Containers/Container.ts +11 -5
  53. package/components/ui/components/layout/Grid/Col.style.ts +27 -0
  54. package/components/ui/components/layout/Grid/Col.ts +209 -0
  55. package/components/ui/components/layout/Grid/Row.style.ts +73 -0
  56. package/components/ui/components/layout/Grid/Row.ts +166 -0
  57. package/components/ui/components/layout/Grid/index.ts +7 -0
  58. package/components/ui/components/layout/Panel/Panel.ts +2 -2
  59. package/components/ui/components/layout/Tabs/Tabs.ts +0 -1
  60. package/components/ui/components/navigation/EmbedURL/EmbedURL.ts +62 -26
  61. package/components/ui/components/navigation/Link/Link.ts +27 -16
  62. package/components/ui/components/navigation/Menu/Menu.ts +26 -48
  63. package/components/ui/components/runtime/MicroApp/MicroApp.ts +7 -147
  64. package/components/ui/components/runtime/MicroApp/MicroAppDataLoader.ts +6 -2
  65. package/components/ui/components/studio/FunctionsPanel/FunctionsPanel.ts +472 -0
  66. package/components/ui/components/studio/FunctionsPanel/index.ts +1 -0
  67. package/components/ui/components/utility/AccessRoles/AccessRoles.style.ts +242 -0
  68. package/components/ui/components/utility/AccessRoles/AccessRoles.ts +476 -0
  69. package/components/ui/components/utility/Border/Border.ts +0 -14
  70. package/components/ui/components/utility/BorderManager/BorderManager.style.ts +237 -0
  71. package/components/ui/components/utility/BorderManager/BorderManager.ts +503 -0
  72. package/components/ui/components/utility/BoxShadow/BoxShadow.ts +0 -16
  73. package/components/ui/components/utility/Document/Document.ts +54 -25
  74. package/components/ui/components/utility/Export-Import/Export-Import.ts +8 -7
  75. package/components/ui/components/utility/Handlers/Handlers.ts +14 -17
  76. package/components/ui/components/utility/ValidationRules/ValidationRules.ts +440 -0
  77. package/components/ui/components/wrappers/GenerikWrapper/DragWrapper/DragWrapper.ts +1 -0
  78. package/components/ui/components/wrappers/GenerikWrapper/GenerikWrapper.ts +1 -24
  79. package/components/ui/nuraly-ui/src/components/badge/badge.style.ts +4 -3
  80. package/components/ui/nuraly-ui/src/components/datepicker/datepicker.component.ts +2 -0
  81. package/components/ui/nuraly-ui/src/components/radio-group/radio-group.component.ts +12 -6
  82. package/components/ui/nuraly-ui/src/components/radio-group/radio-group.style.ts +23 -0
  83. package/dist/{index-B4yIOSMd.js → BaseElement-BNBn_IJk.js} +2920 -267
  84. package/dist/{CodeEditor-YsOapSut.js → CodeEditor-Bf4L2rO_.js} +84127 -76319
  85. package/dist/{CodeEditor-BiNku87K.js → CodeEditor-Cpph-xRc.js} +7 -7
  86. package/dist/{abap-B2diVmjb.js → abap-D0Neqhq6.js} +91 -1
  87. package/dist/{apex-3NuJ-nsI.js → apex-B5LhxkeG.js} +18 -1
  88. package/dist/assets/editor.worker-DcwbJ0PV.js +12 -0
  89. package/dist/assets/html.worker-BTMxskjR.js +461 -0
  90. package/dist/assets/json.worker-D3vTGdf_.js +49 -0
  91. package/dist/assets/ts.worker-BsM1BXac.js +51334 -0
  92. package/dist/{azcli-XGXuUsMB.js → azcli-BrBH0QTU.js} +1 -1
  93. package/dist/{bat-B8Vhm634.js → bat-BfzAov64.js} +12 -1
  94. package/dist/{bicep-Cc8X5S_k.js → bicep-C3bCSWel.js} +1 -1
  95. package/dist/{cameligo-Bo3wBh9T.js → cameligo-sFL5plcd.js} +13 -1
  96. package/dist/{clojure-CPoQlpIK.js → clojure-CfeExRz0.js} +14 -1
  97. package/dist/{coffee-BxvTGz39.js → coffee-Xws5K0WL.js} +11 -1
  98. package/dist/{cpp-5RpEV7vC.js → cpp-CqOUEpxN.js} +28 -23
  99. package/dist/{csharp-slXXP3fo.js → csharp-DVLiBOZb.js} +13 -1
  100. package/dist/{csp-B98p6-gH.js → csp-DVFp9bw5.js} +3 -1
  101. package/dist/{css-BDsDSAin.js → css-DwARn2R6.js} +8 -1
  102. package/dist/cssMode-DMsdy1N0.js +1577 -0
  103. package/dist/{cypher-Dc4IMouD.js → cypher-uY0Mffat.js} +8 -1
  104. package/dist/{dart-LhvE3yD2.js → dart-D27H-mX_.js} +18 -1
  105. package/dist/{dockerfile-CwzplJeZ.js → dockerfile-CmV85WZK.js} +5 -1
  106. package/dist/{ecl-DxW3FiJi.js → ecl--fKn7yzB.js} +9 -1
  107. package/dist/{elixir-BI40g7TU.js → elixir-DUhH17ON.js} +87 -1
  108. package/dist/{flow9-tR2v0bGz.js → flow9-B3Dx2LLe.js} +8 -1
  109. package/dist/{freemarker2-Bfqhwyij.js → freemarker2-D51H9HYi.js} +359 -7
  110. package/dist/{fsharp-BLAma0OT.js → fsharp-SyqBfUAR.js} +14 -1
  111. package/dist/{go-nYcD3y4Z.js → go-BbMR2tdT.js} +17 -1
  112. package/dist/{graphql-Dp1cHWmP.js → graphql-DDJE6tIl.js} +17 -1
  113. package/dist/{handlebars-DCgKNBmn.js → handlebars-CF6gdAX4.js} +38 -4
  114. package/dist/{hcl-6NT8Kbna.js → hcl-YBvpaUqf.js} +13 -1
  115. package/dist/{html-C6wR7sMB.js → html-c2n_zkM3.js} +37 -4
  116. package/dist/htmlMode-9IJTuZUh.js +1587 -0
  117. package/dist/{ini-BZCOLrEc.js → ini-Ct73dBtM.js} +10 -1
  118. package/dist/{java-DAMcfJbX.js → java-C_jlkwoG.js} +18 -1
  119. package/dist/{javascript-D1L5MTmg.js → javascript-DhEEBMxD.js} +3 -2
  120. package/dist/jsonMode-CB6k-4rp.js +2002 -0
  121. package/dist/{julia-CQ46G71H.js → julia-D8WE5U1e.js} +22 -1
  122. package/dist/{kotlin-CEjVo_6E.js → kotlin-Zy9aq5yB.js} +15 -1
  123. package/dist/{less-DreV99nP.js → less-sZ0iHtE8.js} +1 -1
  124. package/dist/{lexon-DBVJhqLb.js → lexon-CsdNL29A.js} +13 -1
  125. package/dist/{liquid-D_pDYIs1.js → liquid-CwtPiwnW.js} +12 -4
  126. package/dist/{lua-Dcc_j6L-.js → lua-C2YJo0zw.js} +12 -1
  127. package/dist/{m3-B9SlZL4n.js → m3-CPLP40SG.js} +7 -1
  128. package/dist/{markdown-CuGw9_MP.js → markdown-B1mf5e0R.js} +34 -1
  129. package/dist/{mdx-CKsJ3cF4.js → mdx-LewPRYF8.js} +2 -2
  130. package/dist/{micro-app-entry-xdTX5-ut.js → micro-app-entry-C3RDIukG.js} +8082 -9628
  131. package/dist/micro-app.bundle.js +3 -3
  132. package/dist/micro-app.js +3585 -6759
  133. package/dist/{mips-BUWqP-OH.js → mips-DA33BZX1.js} +11 -1
  134. package/dist/{msdax-DtkouYCg.js → msdax-CCYFIQsP.js} +5 -1
  135. package/dist/{mysql-IkAsWSmF.js → mysql-hjmIjL-D.js} +11 -3
  136. package/dist/{objective-c-B2-ronfg.js → objective-c-RRCpEmqC.js} +2 -1
  137. package/dist/{pascal-Bsnz2eJA.js → pascal-CeV8XfxB.js} +13 -1
  138. package/dist/{pascaligo-D_sMUn0Q.js → pascaligo-IEEGVJAJ.js} +13 -1
  139. package/dist/{perl-BPzHt9SS.js → perl-B5-QbHq_.js} +34 -1
  140. package/dist/{pgsql-DlTJB0PD.js → pgsql-s6kqEJmi.js} +14 -4
  141. package/dist/{php-Dmq5OjwK.js → php-CWWqzOo8.js} +36 -1
  142. package/dist/{pla-HJcccrBy.js → pla-FSvb_YP_.js} +13 -1
  143. package/dist/{postiats-OQn6DKv-.js → postiats-DQdscQXO.js} +370 -1
  144. package/dist/{powerquery-DKaMYC8w.js → powerquery-CtA5JA1I.js} +7 -1
  145. package/dist/{powershell-DWeJHik1.js → powershell-DglEq96N.js} +13 -1
  146. package/dist/{protobuf-CBn_IseU.js → protobuf-BSepub3e.js} +5 -1
  147. package/dist/{pug-BoRpCINl.js → pug-B1847F4G.js} +16 -1
  148. package/dist/{python-zPpZYwLF.js → python-h5Z2g-yl.js} +59 -11
  149. package/dist/{qsharp-4rGyVZOw.js → qsharp-D4i0Nqg9.js} +28 -3
  150. package/dist/{r-DsgLhBOb.js → r-cdRigKxa.js} +5 -1
  151. package/dist/{razor-B_fCUeGX.js → razor-D5ep1Doy.js} +48 -4
  152. package/dist/{redis-B2fdL4Bg.js → redis-D9MFxvE8.js} +16 -6
  153. package/dist/{redshift-DoaeyCkH.js → redshift-CmCnsvL-.js} +13 -4
  154. package/dist/{restructuredtext-D-6OFBY9.js → restructuredtext-CWy8J51t.js} +19 -1
  155. package/dist/{ruby-D1DD6baV.js → ruby-WP-c36m5.js} +76 -3
  156. package/dist/runtime.js +34 -45
  157. package/dist/{rust-DssUV39M.js → rust-Q9FLdYpu.js} +13 -1
  158. package/dist/{sb-Dmb6tAdv.js → sb-C54-JBGT.js} +12 -1
  159. package/dist/{scala-Co3ETaym.js → scala-CzbFImc5.js} +24 -1
  160. package/dist/{scheme-CMrqXTty.js → scheme-BhfDmYN3.js} +1 -1
  161. package/dist/{scss-DkGudv8Q.js → scss-CEmiBXpS.js} +25 -1
  162. package/dist/{shell-BHN2BI4L.js → shell-Bmc1VhG0.js} +4 -1
  163. package/dist/{solidity-b-R-raGB.js → solidity-C9Q2I8Hh.js} +23 -1
  164. package/dist/{sophia-Y4GjyxNB.js → sophia-jWa1UyKz.js} +16 -1
  165. package/dist/{sparql-CDAPZb88.js → sparql-CM7jctbc.js} +15 -1
  166. package/dist/{sql-DkkpPiUq.js → sql-WzihTkbg.js} +42 -1
  167. package/dist/{st-CSPV91Ej.js → st-6y7_3aup.js} +8 -1
  168. package/dist/style.css +1 -1
  169. package/dist/{swift-DdSC5O48.js → swift-k-0zxG_D.js} +4 -1
  170. package/dist/{systemverilog-CI03XpAv.js → systemverilog-Pnr5_rIP.js} +29 -3
  171. package/dist/{tcl-B8DayMSI.js → tcl-fNPXval8.js} +7 -1
  172. package/dist/tsMode-B_6LiBE1.js +976 -0
  173. package/dist/{twig-B1AUPVB_.js → twig-L2MkztkV.js} +76 -1
  174. package/dist/{typescript-DrlYcCUn.js → typescript-BBG0jH4p.js} +23 -2
  175. package/dist/typespec-Cqqo-3Pt.js +123 -0
  176. package/dist/{vb-BIC7ccdG.js → vb-B5YC2xN9.js} +15 -1
  177. package/dist/{wgsl-C9yjop46.js → wgsl-D9BRtftY.js} +26 -1
  178. package/dist/{xml-BzP9D0eZ.js → xml-DgLB7rE6.js} +8 -2
  179. package/dist/{yaml-CT7GOvXu.js → yaml-DiI4HpSv.js} +30 -2
  180. package/handlers/compiler.ts +196 -16
  181. package/handlers/context-setup.ts +10 -5
  182. package/handlers/handler-api-factory.ts +358 -0
  183. package/handlers/handler-api.ts +379 -0
  184. package/handlers/handler-executor.ts +25 -5
  185. package/handlers/handler-scope.ts +398 -0
  186. package/handlers/index.ts +34 -2
  187. package/handlers/runtime-api/component-properties.ts +0 -8
  188. package/handlers/runtime-api/index.ts +1 -1
  189. package/handlers/runtime-api/toast.ts +1 -1
  190. package/index.ts +14 -115
  191. package/micro-app/README.md +10 -10
  192. package/micro-app/state/MicroAppRuntimeContext.ts +1 -28
  193. package/micro-app-entry.ts +0 -5
  194. package/package.json +19 -1
  195. package/redux/actions/application/index.ts +0 -1
  196. package/redux/actions/component/addComponentAction.ts +15 -4
  197. package/redux/actions/component/moveDraggedComponent.ts +1 -2
  198. package/redux/actions/component/update-component-name.ts +1 -1
  199. package/redux/actions/component/updateComponentAttributes.ts +7 -2
  200. package/redux/handlers/functions/build-function-handler.ts +11 -3
  201. package/redux/handlers/functions/deploy-function-handler.ts +11 -3
  202. package/redux/handlers/functions/invoke-function-handler.ts +11 -3
  203. package/redux/handlers/functions/load-functions-handler.ts +2 -1
  204. package/redux/handlers/functions/update-function-handler.ts +2 -1
  205. package/redux/store/component/component.interface.ts +8 -2
  206. package/redux/store/component/store.ts +1 -4
  207. package/state/runtime-context.ts +1 -23
  208. package/utils/RuntimeContextHelpers.ts +221 -90
  209. package/utils/change-detection.ts +125 -1
  210. package/utils/clipboard-utils.ts +18 -8
  211. package/utils/component-registry.ts +118 -0
  212. package/utils/index.ts +14 -1
  213. package/utils/naming-generator.ts +3 -1
  214. package/utils/randomness.ts +3 -1
  215. package/utils/register-components.ts +21 -29
  216. package/utils/render-util.ts +27 -48
  217. package/utils/toast.ts +97 -0
  218. package/vite.config.ts +29 -12
  219. package/components/ui/components/Event/EventAttribute/EventAttribute.style.ts +0 -11
  220. package/components/ui/components/Event/EventAttribute/EventAttribute.ts +0 -28
  221. package/components/ui/components/base/BaseElement/calculateStyles.ts +0 -31
  222. package/components/ui/components/base/BaseElement/drag-events.helpers.ts +0 -71
  223. package/components/ui/components/base/BaseElement/execute-event.helpers.ts +0 -45
  224. package/components/ui/components/base/BaseElement/interactions.helpers.ts +0 -14
  225. package/components/ui/components/wrappers/ComponentTitle/ComponentTitle.ts +0 -95
  226. package/components/ui/components/wrappers/GenerikWrapper/ResizeWrapper/ResizeWrapper.style.ts +0 -102
  227. package/components/ui/components/wrappers/GenerikWrapper/ResizeWrapper/ResizeWrapper.ts +0 -258
  228. package/components/ui/components/wrappers/PreviewWrapper.ts +0 -28
  229. package/components/ui/components/wrappers/RectangleSelection/RectangleSelection.ts +0 -154
  230. package/components/ui/nuraly-ui/packages/common/dist/constants/index.d.ts +0 -2
  231. package/components/ui/nuraly-ui/packages/common/dist/constants/index.js +0 -2
  232. package/components/ui/nuraly-ui/packages/common/dist/constants.d.ts +0 -17
  233. package/components/ui/nuraly-ui/packages/common/dist/constants.js +0 -7
  234. package/components/ui/nuraly-ui/packages/common/dist/controllers/index.d.ts +0 -2
  235. package/components/ui/nuraly-ui/packages/common/dist/controllers/index.js +0 -2
  236. package/components/ui/nuraly-ui/packages/common/dist/controllers.d.ts +0 -21
  237. package/components/ui/nuraly-ui/packages/common/dist/controllers.js +0 -22
  238. package/components/ui/nuraly-ui/packages/common/dist/index.d.ts +0 -25
  239. package/components/ui/nuraly-ui/packages/common/dist/index.js +0 -27
  240. package/components/ui/nuraly-ui/packages/common/dist/mixins/index.d.ts +0 -2
  241. package/components/ui/nuraly-ui/packages/common/dist/mixins/index.js +0 -3
  242. package/components/ui/nuraly-ui/packages/common/dist/mixins.d.ts +0 -26
  243. package/components/ui/nuraly-ui/packages/common/dist/mixins.js +0 -29
  244. package/components/ui/nuraly-ui/packages/common/dist/shared/base-mixin.d.ts +0 -42
  245. package/components/ui/nuraly-ui/packages/common/dist/shared/base-mixin.js +0 -38
  246. package/components/ui/nuraly-ui/packages/common/dist/shared/constants.d.ts +0 -1
  247. package/components/ui/nuraly-ui/packages/common/dist/shared/constants.js +0 -2
  248. package/components/ui/nuraly-ui/packages/common/dist/shared/controllers/dropdown.controller.d.ts +0 -77
  249. package/components/ui/nuraly-ui/packages/common/dist/shared/controllers/dropdown.controller.js +0 -341
  250. package/components/ui/nuraly-ui/packages/common/dist/shared/controllers/dropdown.interface.d.ts +0 -37
  251. package/components/ui/nuraly-ui/packages/common/dist/shared/controllers/dropdown.interface.js +0 -2
  252. package/components/ui/nuraly-ui/packages/common/dist/shared/controllers/index.d.ts +0 -4
  253. package/components/ui/nuraly-ui/packages/common/dist/shared/controllers/index.js +0 -4
  254. package/components/ui/nuraly-ui/packages/common/dist/shared/controllers/theme.controller.d.ts +0 -48
  255. package/components/ui/nuraly-ui/packages/common/dist/shared/controllers/theme.controller.js +0 -133
  256. package/components/ui/nuraly-ui/packages/common/dist/shared/dependency-mixin.d.ts +0 -37
  257. package/components/ui/nuraly-ui/packages/common/dist/shared/dependency-mixin.js +0 -141
  258. package/components/ui/nuraly-ui/packages/common/dist/shared/event-handler-mixin.d.ts +0 -64
  259. package/components/ui/nuraly-ui/packages/common/dist/shared/event-handler-mixin.js +0 -95
  260. package/components/ui/nuraly-ui/packages/common/dist/shared/index.d.ts +0 -13
  261. package/components/ui/nuraly-ui/packages/common/dist/shared/index.js +0 -17
  262. package/components/ui/nuraly-ui/packages/common/dist/shared/theme-mixin.d.ts +0 -78
  263. package/components/ui/nuraly-ui/packages/common/dist/shared/theme-mixin.js +0 -194
  264. package/components/ui/nuraly-ui/packages/common/dist/shared/themes.d.ts +0 -44
  265. package/components/ui/nuraly-ui/packages/common/dist/shared/themes.js +0 -85
  266. package/components/ui/nuraly-ui/packages/common/dist/shared/utils.d.ts +0 -60
  267. package/components/ui/nuraly-ui/packages/common/dist/shared/utils.js +0 -85
  268. package/components/ui/nuraly-ui/packages/common/dist/shared/validation.types.d.ts +0 -108
  269. package/components/ui/nuraly-ui/packages/common/dist/shared/validation.types.js +0 -17
  270. package/components/ui/nuraly-ui/packages/common/dist/themes/index.d.ts +0 -2
  271. package/components/ui/nuraly-ui/packages/common/dist/themes/index.js +0 -2
  272. package/components/ui/nuraly-ui/packages/common/dist/themes.d.ts +0 -22
  273. package/components/ui/nuraly-ui/packages/common/dist/themes.js +0 -23
  274. package/components/ui/nuraly-ui/packages/common/dist/utils/index.d.ts +0 -2
  275. package/components/ui/nuraly-ui/packages/common/dist/utils/index.js +0 -2
  276. package/components/ui/nuraly-ui/packages/common/dist/utils.d.ts +0 -21
  277. package/components/ui/nuraly-ui/packages/common/dist/utils.js +0 -22
  278. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/LICENSE +0 -15
  279. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/README.md +0 -294
  280. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/copy/copy-sync.js +0 -171
  281. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/copy/copy.js +0 -175
  282. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/copy/index.js +0 -7
  283. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/empty/index.js +0 -39
  284. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/ensure/file.js +0 -66
  285. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/ensure/index.js +0 -23
  286. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/ensure/link.js +0 -64
  287. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/ensure/symlink-paths.js +0 -101
  288. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/ensure/symlink-type.js +0 -34
  289. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/ensure/symlink.js +0 -67
  290. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/fs/index.js +0 -146
  291. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/index.js +0 -16
  292. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/json/index.js +0 -16
  293. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/json/jsonfile.js +0 -11
  294. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/json/output-json-sync.js +0 -12
  295. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/json/output-json.js +0 -12
  296. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/mkdirs/index.js +0 -14
  297. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/mkdirs/make-dir.js +0 -27
  298. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/mkdirs/utils.js +0 -21
  299. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/move/index.js +0 -7
  300. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/move/move-sync.js +0 -55
  301. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/move/move.js +0 -59
  302. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/output-file/index.js +0 -31
  303. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/path-exists/index.js +0 -12
  304. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/remove/index.js +0 -17
  305. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/util/async.js +0 -29
  306. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/util/stat.js +0 -159
  307. package/components/ui/nuraly-ui/packages/forms/node_modules/fs-extra/lib/util/utimes.js +0 -36
  308. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/LICENSE +0 -15
  309. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/README.md +0 -294
  310. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/copy/copy-sync.js +0 -171
  311. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/copy/copy.js +0 -175
  312. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/copy/index.js +0 -7
  313. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/empty/index.js +0 -39
  314. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/ensure/file.js +0 -66
  315. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/ensure/index.js +0 -23
  316. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/ensure/link.js +0 -64
  317. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/ensure/symlink-paths.js +0 -101
  318. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/ensure/symlink-type.js +0 -34
  319. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/ensure/symlink.js +0 -67
  320. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/fs/index.js +0 -146
  321. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/index.js +0 -16
  322. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/json/index.js +0 -16
  323. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/json/jsonfile.js +0 -11
  324. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/json/output-json-sync.js +0 -12
  325. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/json/output-json.js +0 -12
  326. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/mkdirs/index.js +0 -14
  327. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/mkdirs/make-dir.js +0 -27
  328. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/mkdirs/utils.js +0 -21
  329. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/move/index.js +0 -7
  330. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/move/move-sync.js +0 -55
  331. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/move/move.js +0 -59
  332. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/output-file/index.js +0 -31
  333. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/path-exists/index.js +0 -12
  334. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/remove/index.js +0 -17
  335. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/util/async.js +0 -29
  336. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/util/stat.js +0 -159
  337. package/components/ui/nuraly-ui/packages/layout/node_modules/fs-extra/lib/util/utimes.js +0 -36
  338. package/dist/SmartAttributeHandler-C4EliaG0.js +0 -153
  339. package/dist/SmartAttributeHandler-u-ZHGueR.js +0 -193
  340. package/dist/assets/editor.worker-C_S4Avdt.js +0 -11
  341. package/dist/assets/html.worker-DfuQASUV.js +0 -458
  342. package/dist/assets/json.worker-Cucz4wxY.js +0 -42
  343. package/dist/assets/ts.worker-Dme6S0YK.js +0 -37021
  344. package/dist/cssMode-CqMQ6Xsa.js +0 -1443
  345. package/dist/htmlMode-KglxyZXm.js +0 -1453
  346. package/dist/jsonMode-B3rqxD-b.js +0 -1863
  347. package/dist/tsMode-DEiq8fQ0.js +0 -800
  348. package/redux/actions/application/loadApplicationPermissionAction.ts +0 -10
  349. package/utils/styleUtil.ts +0 -7
@@ -0,0 +1,298 @@
1
+ /**
2
+ * @file InputHandlerController.ts
3
+ * @description Controller for processing component input handlers
4
+ * Handles dynamic input resolution, caching, and debouncing
5
+ */
6
+
7
+ import type { ReactiveController } from "lit";
8
+ import { Subscription } from "rxjs";
9
+ import { eventDispatcher } from "../../../../../utils/change-detection";
10
+ import { executeHandler } from "../../../../../handlers/handler-executor";
11
+ import Editor from "../../../../../state/editor";
12
+ import EditorInstance from "../../../../../state/editor";
13
+ import { RuntimeHelpers } from "../../../../../utils/runtime-helpers";
14
+ import { getNestedAttribute } from "../../../../../utils/object.utils";
15
+ import { isServer } from "../../../../../utils/envirement";
16
+ import { addlogDebug } from "../../../../../redux/actions/debug/store";
17
+ import type { InputHandlerHost, Disposable } from "../types/base-element.types";
18
+ import { EventDebouncer, ExecutionGuard, ChildRefreshBatcher } from "../utils/event-debouncer";
19
+
20
+ /**
21
+ * Controller responsible for processing input handlers
22
+ * Extracts input processing logic from BaseElement for better separation of concerns
23
+ */
24
+ export class InputHandlerController implements ReactiveController, Disposable {
25
+ private host: InputHandlerHost;
26
+ private subscription = new Subscription();
27
+ private debouncer = new EventDebouncer(16);
28
+ private executionGuard = new ExecutionGuard();
29
+ private childRefreshBatcher: ChildRefreshBatcher;
30
+ private isConnected = false;
31
+
32
+ constructor(host: InputHandlerHost) {
33
+ this.host = host;
34
+ host.addController(this);
35
+
36
+ // Set up child refresh batcher
37
+ this.childRefreshBatcher = new ChildRefreshBatcher((childId) => {
38
+ eventDispatcher.emit(`component:request:refresh:${childId}`);
39
+ });
40
+ }
41
+
42
+ hostConnected(): void {
43
+ this.isConnected = true;
44
+ this.setupEventListeners();
45
+ }
46
+
47
+ hostDisconnected(): void {
48
+ this.isConnected = false;
49
+ this.dispose();
50
+ }
51
+
52
+ /**
53
+ * Set up all event listeners for input refresh triggers
54
+ */
55
+ private setupEventListeners(): void {
56
+ const { component, uniqueUUID } = this.host;
57
+
58
+ // Platform change - reprocess all inputs
59
+ this.subscription.add(
60
+ eventDispatcher.on("Vars:currentPlatform", () => {
61
+ this.processInputsDebounced();
62
+ })
63
+ );
64
+
65
+ // Component-specific input refresh request
66
+ this.subscription.add(
67
+ eventDispatcher.on(
68
+ `component-input-refresh-request:${component.uuid}`,
69
+ () => {
70
+ this.processInputsDebounced();
71
+ }
72
+ )
73
+ );
74
+
75
+ // Value set events
76
+ this.subscription.add(
77
+ eventDispatcher.on(`component:value:set:${uniqueUUID}`, () => {
78
+ this.processInputsDebounced();
79
+ this.queueChildRefresh();
80
+ })
81
+ );
82
+
83
+ // Component request refresh
84
+ this.subscription.add(
85
+ eventDispatcher.on(`component:request:refresh:${component.uuid}`, () => {
86
+ this.processInputsDebounced();
87
+ this.queueChildRefresh();
88
+ })
89
+ );
90
+
91
+ // Property changed event
92
+ this.subscription.add(
93
+ eventDispatcher.on(
94
+ `component-property-changed:${String(component.name)}`,
95
+ () => {
96
+ this.processInputsDebounced();
97
+ this.queueChildRefresh();
98
+ }
99
+ )
100
+ );
101
+
102
+ // Component updated event
103
+ this.subscription.add(
104
+ eventDispatcher.on(`component-updated:${String(component.uuid)}`, () => {
105
+ this.debouncer.debounce("component-updated", () => {
106
+ this.processInputs();
107
+ }, 0); // Use setTimeout(0) to defer to next tick
108
+ })
109
+ );
110
+
111
+ // Editing mode change - re-run onInit
112
+ this.subscription.add(
113
+ eventDispatcher.on("Vars:currentEditingMode", () => {
114
+ this.executeOnInit();
115
+ })
116
+ );
117
+ }
118
+
119
+ /**
120
+ * Queue child refresh with batching to prevent event storms
121
+ */
122
+ private queueChildRefresh(): void {
123
+ const childIds = this.host.component.childrenIds;
124
+ if (childIds?.length) {
125
+ this.childRefreshBatcher.queueChildren(childIds);
126
+ }
127
+ }
128
+
129
+ /**
130
+ * Execute onInit handler if present
131
+ */
132
+ private executeOnInit(): void {
133
+ const code = getNestedAttribute(this.host.component, "event.onInit");
134
+ if (code) {
135
+ executeHandler(this.host.component, code, {}, { ...this.host.item });
136
+ }
137
+ }
138
+
139
+ /**
140
+ * Process inputs with debouncing
141
+ */
142
+ processInputsDebounced(): void {
143
+ this.debouncer.debounce("process-inputs", () => {
144
+ this.processInputs();
145
+ });
146
+ }
147
+
148
+ /**
149
+ * Process all component inputs
150
+ */
151
+ async processInputs(): Promise<void> {
152
+ if (isServer || !this.isConnected) return;
153
+
154
+ // Reset errors for this processing cycle
155
+ this.host.errors = {};
156
+
157
+ const inputs = Editor.getComponentBreakpointInputs(this.host.component);
158
+ if (!inputs) return;
159
+
160
+ // Process all inputs in parallel
161
+ await Promise.all(
162
+ Object.keys(inputs).map((name) =>
163
+ this.processInput(inputs[name], name)
164
+ )
165
+ );
166
+
167
+ // Log debug info
168
+ addlogDebug({
169
+ errors: {
170
+ component: {
171
+ ...this.host.component,
172
+ errors: { ...this.host.errors },
173
+ },
174
+ },
175
+ });
176
+
177
+ // Trigger re-render
178
+ this.host.requestUpdate();
179
+ }
180
+
181
+ /**
182
+ * Process a single input handler
183
+ */
184
+ private async processInput(input: any, inputName: string): Promise<void> {
185
+ if (!input) return;
186
+
187
+ const { component, item, inputHandlersValue, callbacks, errors, uniqueUUID } =
188
+ this.host;
189
+ const handlerKey = `${component.uuid || component.name}:${inputName}`;
190
+
191
+ // Use execution guard to prevent re-entrant execution
192
+ const result = await this.executionGuard.guard(handlerKey, async () => {
193
+ return this.executeInputHandler(input, inputName);
194
+ });
195
+
196
+ if (result === undefined) {
197
+ // Handler was already executing, skip
198
+ return;
199
+ }
200
+
201
+ // Update state if value changed
202
+ if (inputHandlersValue[inputName] !== result.value) {
203
+ inputHandlersValue[inputName] = result.value;
204
+
205
+ // Update properties proxy
206
+ const proxy =
207
+ (this.host.ExecuteInstance.PropertiesProxy[component.name] ??= {});
208
+ proxy[inputName] = result.value;
209
+
210
+ // Call registered callback
211
+ callbacks[inputName]?.(result.value);
212
+ }
213
+
214
+ // Track errors
215
+ if (result.error) {
216
+ errors[inputName] = { error: result.error.message };
217
+ }
218
+ }
219
+
220
+ /**
221
+ * Execute input handler and return result
222
+ */
223
+ private async executeInputHandler(
224
+ input: any,
225
+ inputName: string
226
+ ): Promise<{ value: any; error?: { message: string } }> {
227
+ const { component, item, uniqueUUID } = this.host;
228
+
229
+ // Execute handler if input type is "handler"
230
+ if (input.type === "handler") {
231
+ try {
232
+ const code = input.value;
233
+ if (code) {
234
+ const fn = executeHandler(
235
+ { ...component, uniqueUUID },
236
+ code,
237
+ undefined,
238
+ { ...item }
239
+ );
240
+ const result = RuntimeHelpers.isPromise(fn) ? await fn : fn;
241
+ return { value: result };
242
+ }
243
+ return { value: undefined };
244
+ } catch (error: any) {
245
+ this.logHandlerError(inputName, input.value, error, "input");
246
+ return { value: undefined, error: { message: error.message } };
247
+ }
248
+ }
249
+
250
+ // Static value
251
+ return { value: input.value };
252
+ }
253
+
254
+ /**
255
+ * Log handler execution error to console
256
+ */
257
+ private logHandlerError(
258
+ inputName: string,
259
+ code: string,
260
+ error: Error,
261
+ source: "inputHandlers" | "input"
262
+ ): void {
263
+ try {
264
+ const { component } = this.host;
265
+ EditorInstance.Console.log(
266
+ `<i style="cursor:pointer" data-uuid="${component.uuid}" data-application_uuid="${component.application_id}"><b>${component.name}</b></i> > ${source} > ${inputName} | component uuid > ${component.uuid}`
267
+ );
268
+ EditorInstance.Console.log(this.formatCodeWithError(code, error));
269
+ } catch (logError) {
270
+ console.error("Error logging handler error:", logError);
271
+ }
272
+ }
273
+
274
+ /**
275
+ * Format code with error highlighting
276
+ */
277
+ private formatCodeWithError(code: string, error: Error): string {
278
+ // Simplified error formatting - can be expanded
279
+ const lines = code?.split("\n") || [];
280
+ let result = "Code:\n";
281
+ lines.forEach((line, i) => {
282
+ result += `${(i + 1).toString().padStart(3, " ")}| ${line}\n`;
283
+ });
284
+ result += `\nError: ${error.name}: ${error.message}`;
285
+ return result;
286
+ }
287
+
288
+ /**
289
+ * Clean up all resources
290
+ */
291
+ dispose(): void {
292
+ this.subscription.unsubscribe();
293
+ this.subscription = new Subscription();
294
+ this.debouncer.cancelAll();
295
+ this.executionGuard.clear();
296
+ this.childRefreshBatcher.cancel();
297
+ }
298
+ }
@@ -0,0 +1,323 @@
1
+ /**
2
+ * @file SelectionController.ts
3
+ * @description Controller for handling component selection in editor mode
4
+ * Manages selection state, keyboard navigation, and hover interactions
5
+ */
6
+
7
+ import type { ReactiveController } from "lit";
8
+ import { Subscription } from "rxjs";
9
+ import { eventDispatcher } from "../../../../../utils/change-detection";
10
+ import { ExecuteInstance } from "../../../../../state/runtime-context";
11
+ import EditorInstance from "../../../../../state/editor";
12
+ import { RuntimeHelpers } from "../../../../../utils/runtime-helpers";
13
+ import { $hoveredComponent } from "../../../../../redux/store/component/store";
14
+ import { $resizing } from "../../../../../redux/store/apps";
15
+ import { setContextMenuEvent } from "../../../../../redux/actions/page/setContextMenuEvent";
16
+ import type { SelectionHost, Disposable, Activatable } from "../types/base-element.types";
17
+ import type { ComponentElement } from "../../../../../redux/store/component/component.interface";
18
+
19
+ /**
20
+ * Controller responsible for component selection and hover state
21
+ * Only active in editor mode (not view mode)
22
+ */
23
+ export class SelectionController implements ReactiveController, Disposable, Activatable {
24
+ private host: SelectionHost;
25
+ private subscription = new Subscription();
26
+ private isActive = false;
27
+ private hoveredComponent: ComponentElement | null = null;
28
+ private isEditable = false;
29
+
30
+ // Bound event handlers for proper cleanup
31
+ private boundMouseEnter: (e: MouseEvent) => void;
32
+ private boundMouseLeave: (e: MouseEvent) => void;
33
+ private boundClick: (e: MouseEvent) => void;
34
+ private boundContextMenu: (e: MouseEvent) => void;
35
+
36
+ constructor(host: SelectionHost) {
37
+ this.host = host;
38
+ host.addController(this);
39
+
40
+ // Bind handlers
41
+ this.boundMouseEnter = this.handleMouseEnter.bind(this);
42
+ this.boundMouseLeave = this.handleMouseLeave.bind(this);
43
+ this.boundClick = this.handleClick.bind(this);
44
+ this.boundContextMenu = this.handleContextMenu.bind(this);
45
+ }
46
+
47
+ hostConnected(): void {
48
+ // Controller is activated separately via activate()
49
+ }
50
+
51
+ hostDisconnected(): void {
52
+ this.deactivate();
53
+ }
54
+
55
+ /**
56
+ * Activate selection controller (editor mode only)
57
+ */
58
+ activate(): void {
59
+ if (this.isActive || this.host.isViewMode) return;
60
+ this.isActive = true;
61
+
62
+ // Add DOM event listeners
63
+ this.host.addEventListener("mouseenter", this.boundMouseEnter);
64
+ this.host.addEventListener("mouseleave", this.boundMouseLeave);
65
+ this.host.addEventListener("click", this.boundClick);
66
+ this.host.addEventListener("contextmenu", this.boundContextMenu);
67
+
68
+ // Subscribe to store changes
69
+ this.setupSubscriptions();
70
+ }
71
+
72
+ /**
73
+ * Deactivate selection controller
74
+ */
75
+ deactivate(): void {
76
+ if (!this.isActive) return;
77
+ this.isActive = false;
78
+
79
+ // Remove DOM event listeners
80
+ this.host.removeEventListener("mouseenter", this.boundMouseEnter);
81
+ this.host.removeEventListener("mouseleave", this.boundMouseLeave);
82
+ this.host.removeEventListener("click", this.boundClick);
83
+ this.host.removeEventListener("contextmenu", this.boundContextMenu);
84
+
85
+ // Clean up subscriptions
86
+ this.subscription.unsubscribe();
87
+ this.subscription = new Subscription();
88
+ }
89
+
90
+ /**
91
+ * Set up store subscriptions
92
+ */
93
+ private setupSubscriptions(): void {
94
+ // Hover component store
95
+ this.subscription.add(
96
+ RuntimeHelpers.createStoreObservable($hoveredComponent).subscribe(
97
+ (hoveredComponent) => {
98
+ this.hoveredComponent = hoveredComponent;
99
+ }
100
+ )
101
+ );
102
+
103
+ // Selection changes
104
+ this.subscription.add(
105
+ eventDispatcher.on("Vars:selectedComponents", () => {
106
+ this.handleSelectionChange();
107
+ })
108
+ );
109
+
110
+ // Keyboard events
111
+ this.subscription.add(
112
+ eventDispatcher.on("keydown", ({ key, selectedComponents }) => {
113
+ this.handleKeydown(key, selectedComponents);
114
+ })
115
+ );
116
+ }
117
+
118
+ /**
119
+ * Handle selection change events
120
+ */
121
+ private handleSelectionChange(): void {
122
+ const selectedComponents = ExecuteInstance.Vars.selectedComponents;
123
+ this.host.currentSelection = Array.from(selectedComponents).map(
124
+ (component: ComponentElement) => component.uuid
125
+ );
126
+ EditorInstance.currentSelection = this.host.currentSelection;
127
+
128
+ // Check if this component is selected
129
+ const isSelected =
130
+ selectedComponents.length === 1 &&
131
+ selectedComponents[0]?.uuid === this.host.component.uuid;
132
+
133
+ if (isSelected) {
134
+ this.scrollIntoViewIfNeeded();
135
+ this.emitSelectionEvent();
136
+ }
137
+ }
138
+
139
+ /**
140
+ * Scroll component into view if not visible
141
+ */
142
+ private scrollIntoViewIfNeeded(): void {
143
+ requestAnimationFrame(() => {
144
+ const element = this.host.inputRef.value;
145
+ if (!element) return;
146
+
147
+ const rect = element.getBoundingClientRect();
148
+ const isInViewport =
149
+ rect.top >= 0 &&
150
+ rect.left >= 0 &&
151
+ rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
152
+ rect.right <= (window.innerWidth || document.documentElement.clientWidth);
153
+
154
+ if (!isInViewport) {
155
+ element.scrollIntoView({
156
+ behavior: "smooth",
157
+ block: "center",
158
+ inline: "nearest",
159
+ });
160
+ }
161
+ });
162
+ }
163
+
164
+ /**
165
+ * Emit component selected custom event
166
+ */
167
+ private emitSelectionEvent(): void {
168
+ requestAnimationFrame(() => {
169
+ this.host.dispatchEvent(
170
+ new CustomEvent("component-selected", {
171
+ detail: {
172
+ component: this.host.component,
173
+ elementRef: this.host.inputRef,
174
+ },
175
+ bubbles: true,
176
+ composed: true,
177
+ })
178
+ );
179
+ });
180
+ }
181
+
182
+ /**
183
+ * Handle keydown events
184
+ */
185
+ private handleKeydown(key: string, selectedComponents: string[]): void {
186
+ if (
187
+ key === "Enter" &&
188
+ selectedComponents.length === 1 &&
189
+ this.host.component.uuid === selectedComponents[0]
190
+ ) {
191
+ this.isEditable = true;
192
+ }
193
+ }
194
+
195
+ /**
196
+ * Handle mouse enter event
197
+ */
198
+ private handleMouseEnter(_e: MouseEvent): void {
199
+ // Don't trigger hover when resizing
200
+ if ($resizing.get()) return;
201
+
202
+ // Emit hover event
203
+ this.host.dispatchEvent(
204
+ new CustomEvent("component-hovered", {
205
+ detail: {
206
+ component: this.host.component,
207
+ elementRef: this.host.inputRef,
208
+ },
209
+ bubbles: true,
210
+ composed: true,
211
+ })
212
+ );
213
+ }
214
+
215
+ /**
216
+ * Handle mouse leave event
217
+ */
218
+ private handleMouseLeave(_e: MouseEvent): void {
219
+ // Don't trigger hover clear when resizing
220
+ if ($resizing.get()) return;
221
+
222
+ // Emit hover clear event
223
+ this.host.dispatchEvent(
224
+ new CustomEvent("component-hovered", {
225
+ detail: {
226
+ component: null,
227
+ elementRef: null,
228
+ },
229
+ bubbles: true,
230
+ composed: true,
231
+ })
232
+ );
233
+ }
234
+
235
+ /**
236
+ * Handle click event for selection
237
+ */
238
+ private handleClick(e: MouseEvent): void {
239
+ e.preventDefault();
240
+ e.stopPropagation();
241
+ this.select(e);
242
+ }
243
+
244
+ /**
245
+ * Handle context menu event
246
+ */
247
+ private handleContextMenu(e: MouseEvent): void {
248
+ e.preventDefault();
249
+ e.stopPropagation();
250
+
251
+ this.select(e);
252
+
253
+ const rect = this.host.inputRef.value?.getBoundingClientRect();
254
+ if (rect) {
255
+ Object.assign(e, {
256
+ ComponentTop: rect.top,
257
+ ComponentLeft: rect.left,
258
+ ComponentBottom: rect.bottom,
259
+ ComponentHeight: rect.height,
260
+ });
261
+ setContextMenuEvent(e);
262
+ }
263
+ }
264
+
265
+ /**
266
+ * Select this component
267
+ */
268
+ select(_e?: Event): void {
269
+ const { component } = this.host;
270
+
271
+ // Update selection state
272
+ this.host.currentSelection = [component.uuid];
273
+ EditorInstance.currentSelection = [component.uuid];
274
+ ExecuteInstance.VarsProxy.selectedComponents = [component];
275
+
276
+ // Emit selection event
277
+ this.host.dispatchEvent(
278
+ new CustomEvent("component-selected", {
279
+ detail: {
280
+ component: component,
281
+ elementRef: this.host.inputRef,
282
+ },
283
+ bubbles: true,
284
+ composed: true,
285
+ })
286
+ );
287
+ }
288
+
289
+ /**
290
+ * Check if this component is currently selected
291
+ */
292
+ isSelected(): boolean {
293
+ return this.host.currentSelection.includes(this.host.component.uuid);
294
+ }
295
+
296
+ /**
297
+ * Check if this component is currently hovered
298
+ */
299
+ isHovered(): boolean {
300
+ return this.hoveredComponent?.uuid === this.host.component.uuid;
301
+ }
302
+
303
+ /**
304
+ * Check if component is in editable mode
305
+ */
306
+ getIsEditable(): boolean {
307
+ return this.isEditable;
308
+ }
309
+
310
+ /**
311
+ * Set editable mode
312
+ */
313
+ setEditable(editable: boolean): void {
314
+ this.isEditable = editable;
315
+ }
316
+
317
+ /**
318
+ * Clean up all resources
319
+ */
320
+ dispose(): void {
321
+ this.deactivate();
322
+ }
323
+ }