@eturnity/eturnity_reusable_components 7.33.4-EPDM-11313.0 → 7.33.4-EPDM-11205.1

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 (494) hide show
  1. package/.eslintrc.js +181 -181
  2. package/.prettierrc +9 -9
  3. package/.storybook/main.js +17 -17
  4. package/.storybook/preview.js +46 -46
  5. package/README.md +29 -29
  6. package/babel.config.js +18 -18
  7. package/coverage/base.css +224 -224
  8. package/coverage/block-navigation.js +87 -87
  9. package/coverage/index.html +985 -985
  10. package/coverage/prettify.css +1 -1
  11. package/coverage/prettify.js +2 -2
  12. package/coverage/sorter.js +196 -196
  13. package/coverage/src/App.vue.html +174 -174
  14. package/coverage/src/Test.vue.html +420 -420
  15. package/coverage/src/assets/index.html +115 -115
  16. package/coverage/src/assets/tests/helpers.js.html +120 -120
  17. package/coverage/src/assets/tests/index.html +115 -115
  18. package/coverage/src/assets/theme.js.html +207 -207
  19. package/coverage/src/components/addNewButton/AddNewButton.stories.js.html +156 -156
  20. package/coverage/src/components/addNewButton/index.html +130 -130
  21. package/coverage/src/components/addNewButton/index.vue.html +267 -267
  22. package/coverage/src/components/banner/actionBanner/index.html +115 -115
  23. package/coverage/src/components/banner/actionBanner/index.vue.html +276 -276
  24. package/coverage/src/components/banner/banner/banner.stories.js.html +177 -177
  25. package/coverage/src/components/banner/banner/index.html +130 -130
  26. package/coverage/src/components/banner/banner/index.vue.html +648 -648
  27. package/coverage/src/components/banner/infoBanner/index.html +115 -115
  28. package/coverage/src/components/banner/infoBanner/index.vue.html +255 -255
  29. package/coverage/src/components/buttons/buttonIcon/index.html +115 -115
  30. package/coverage/src/components/buttons/buttonIcon/index.vue.html +519 -519
  31. package/coverage/src/components/buttons/closeButton/CloseButton.stories.js.html +171 -171
  32. package/coverage/src/components/buttons/closeButton/index.html +130 -130
  33. package/coverage/src/components/buttons/closeButton/index.vue.html +267 -267
  34. package/coverage/src/components/buttons/mainButton/index.html +115 -115
  35. package/coverage/src/components/buttons/mainButton/index.vue.html +504 -504
  36. package/coverage/src/components/card/index.html +115 -115
  37. package/coverage/src/components/card/index.vue.html +372 -372
  38. package/coverage/src/components/collapsableInfoText/index.html +115 -115
  39. package/coverage/src/components/collapsableInfoText/index.vue.html +465 -465
  40. package/coverage/src/components/deleteIcon/DeleteIcon.stories.js.html +171 -171
  41. package/coverage/src/components/deleteIcon/index.html +130 -130
  42. package/coverage/src/components/deleteIcon/index.vue.html +318 -318
  43. package/coverage/src/components/draggableInputHandle/index.html +115 -115
  44. package/coverage/src/components/draggableInputHandle/index.vue.html +222 -222
  45. package/coverage/src/components/dropdown/Dropdown.stories.js.html +243 -243
  46. package/coverage/src/components/dropdown/index.html +130 -130
  47. package/coverage/src/components/dropdown/index.vue.html +498 -498
  48. package/coverage/src/components/errorMessage/index.html +115 -115
  49. package/coverage/src/components/errorMessage/index.vue.html +276 -276
  50. package/coverage/src/components/filter/filterSettings.vue.html +2001 -2001
  51. package/coverage/src/components/filter/index.html +145 -145
  52. package/coverage/src/components/filter/index.vue.html +546 -546
  53. package/coverage/src/components/filter/parentDropdown.vue.html +357 -357
  54. package/coverage/src/components/icon/Icons.stories.js.html +207 -207
  55. package/coverage/src/components/icon/iconCollection.vue.html +288 -288
  56. package/coverage/src/components/icon/index.html +145 -145
  57. package/coverage/src/components/icon/index.vue.html +504 -504
  58. package/coverage/src/components/iconWrapper/index.html +115 -115
  59. package/coverage/src/components/iconWrapper/index.vue.html +621 -621
  60. package/coverage/src/components/infoCard/index.html +115 -115
  61. package/coverage/src/components/infoCard/index.vue.html +204 -204
  62. package/coverage/src/components/infoText/index.html +115 -115
  63. package/coverage/src/components/infoText/index.vue.html +594 -594
  64. package/coverage/src/components/inputs/checkbox/Checkbox.stories.js.html +255 -255
  65. package/coverage/src/components/inputs/checkbox/index.html +130 -130
  66. package/coverage/src/components/inputs/checkbox/index.vue.html +756 -756
  67. package/coverage/src/components/inputs/inputNumber/InputNumber.stories.js.html +534 -534
  68. package/coverage/src/components/inputs/inputNumber/index.html +130 -130
  69. package/coverage/src/components/inputs/inputNumber/index.vue.html +2451 -2451
  70. package/coverage/src/components/inputs/inputNumberQuestion/index.html +115 -115
  71. package/coverage/src/components/inputs/inputNumberQuestion/index.vue.html +738 -738
  72. package/coverage/src/components/inputs/inputText/InputText.stories.js.html +309 -309
  73. package/coverage/src/components/inputs/inputText/index.html +130 -130
  74. package/coverage/src/components/inputs/inputText/index.vue.html +1212 -1212
  75. package/coverage/src/components/inputs/radioButton/RadioButton.stories.js.html +258 -258
  76. package/coverage/src/components/inputs/radioButton/index.html +130 -130
  77. package/coverage/src/components/inputs/radioButton/index.vue.html +903 -903
  78. package/coverage/src/components/inputs/searchInput/SearchInput.stories.js.html +204 -204
  79. package/coverage/src/components/inputs/searchInput/index.html +130 -130
  80. package/coverage/src/components/inputs/searchInput/index.vue.html +537 -537
  81. package/coverage/src/components/inputs/select/index.html +130 -130
  82. package/coverage/src/components/inputs/select/index.vue.html +2808 -2808
  83. package/coverage/src/components/inputs/select/option/index.html +115 -115
  84. package/coverage/src/components/inputs/select/option/index.vue.html +528 -528
  85. package/coverage/src/components/inputs/select/select.stories.js.html +258 -258
  86. package/coverage/src/components/inputs/slider/index.html +115 -115
  87. package/coverage/src/components/inputs/slider/index.vue.html +462 -462
  88. package/coverage/src/components/inputs/switchField/index.html +115 -115
  89. package/coverage/src/components/inputs/switchField/index.vue.html +846 -846
  90. package/coverage/src/components/inputs/textAreaInput/TextAreaInput.stories.js.html +465 -465
  91. package/coverage/src/components/inputs/textAreaInput/index.html +130 -130
  92. package/coverage/src/components/inputs/textAreaInput/index.vue.html +678 -678
  93. package/coverage/src/components/inputs/toggle/Toggle.stories.js.html +315 -315
  94. package/coverage/src/components/inputs/toggle/index.html +130 -130
  95. package/coverage/src/components/inputs/toggle/index.vue.html +1035 -1035
  96. package/coverage/src/components/label/index.html +115 -115
  97. package/coverage/src/components/label/index.vue.html +381 -381
  98. package/coverage/src/components/markerItem/index.html +115 -115
  99. package/coverage/src/components/markerItem/index.vue.html +348 -348
  100. package/coverage/src/components/modals/actionModal/index.html +115 -115
  101. package/coverage/src/components/modals/actionModal/index.vue.html +276 -276
  102. package/coverage/src/components/modals/infoModal/index.html +115 -115
  103. package/coverage/src/components/modals/infoModal/index.vue.html +240 -240
  104. package/coverage/src/components/modals/modal/index.html +130 -130
  105. package/coverage/src/components/modals/modal/index.vue.html +648 -648
  106. package/coverage/src/components/modals/modal/modal.stories.js.html +177 -177
  107. package/coverage/src/components/navigationTabs/index.html +115 -115
  108. package/coverage/src/components/navigationTabs/index.vue.html +426 -426
  109. package/coverage/src/components/pageSubtitle/index.html +115 -115
  110. package/coverage/src/components/pageSubtitle/index.vue.html +285 -285
  111. package/coverage/src/components/pageTitle/index.html +115 -115
  112. package/coverage/src/components/pageTitle/index.vue.html +288 -288
  113. package/coverage/src/components/pagination/index.html +115 -115
  114. package/coverage/src/components/pagination/index.vue.html +528 -528
  115. package/coverage/src/components/progressBar/index.html +115 -115
  116. package/coverage/src/components/progressBar/index.vue.html +459 -459
  117. package/coverage/src/components/projectMarker/index.html +115 -115
  118. package/coverage/src/components/projectMarker/index.vue.html +984 -984
  119. package/coverage/src/components/rangeSlider/Slider.vue.html +1803 -1803
  120. package/coverage/src/components/rangeSlider/index.html +130 -130
  121. package/coverage/src/components/rangeSlider/index.vue.html +1635 -1635
  122. package/coverage/src/components/rangeSlider/utils/dom.js.html +231 -231
  123. package/coverage/src/components/rangeSlider/utils/fns.js.html +162 -162
  124. package/coverage/src/components/rangeSlider/utils/index.html +130 -130
  125. package/coverage/src/components/selectedOptions/index.html +115 -115
  126. package/coverage/src/components/selectedOptions/index.vue.html +519 -519
  127. package/coverage/src/components/sideMenu/index.html +115 -115
  128. package/coverage/src/components/sideMenu/index.vue.html +894 -894
  129. package/coverage/src/components/spinner/index.html +115 -115
  130. package/coverage/src/components/spinner/index.vue.html +288 -288
  131. package/coverage/src/components/tableDropdown/index.html +115 -115
  132. package/coverage/src/components/tableDropdown/index.vue.html +1998 -1998
  133. package/coverage/src/components/tables/mainTable/exampleNested.vue.html +1068 -1068
  134. package/coverage/src/components/tables/mainTable/index.html +130 -130
  135. package/coverage/src/components/tables/mainTable/index.vue.html +1614 -1614
  136. package/coverage/src/components/tables/viewTable/index.html +115 -115
  137. package/coverage/src/components/tables/viewTable/index.vue.html +669 -669
  138. package/coverage/src/components/tabsHeader/index.html +115 -115
  139. package/coverage/src/components/tabsHeader/index.vue.html +333 -333
  140. package/coverage/src/components/threeDots/index.html +115 -115
  141. package/coverage/src/components/threeDots/index.vue.html +1323 -1323
  142. package/coverage/src/components/videoThumbnail/index.html +130 -130
  143. package/coverage/src/components/videoThumbnail/index.vue.html +393 -393
  144. package/coverage/src/components/videoThumbnail/videoThumbnail.stories.js.html +183 -183
  145. package/coverage/src/helpers/currencyMapping.js.html +168 -168
  146. package/coverage/src/helpers/index.html +145 -145
  147. package/coverage/src/helpers/numberConverter.js.html +393 -393
  148. package/coverage/src/helpers/translateLang.js.html +468 -468
  149. package/coverage/src/index.html +130 -130
  150. package/coverage/src/mixins/index.html +115 -115
  151. package/coverage/src/mixins/inputValidations.js.html +375 -375
  152. package/coverage/src/router/dynamicRoutes.js.html +153 -153
  153. package/coverage/src/router/index.html +115 -115
  154. package/coverage/src/utils/index.html +115 -115
  155. package/coverage/src/utils/index.js.html +120 -120
  156. package/jest.config.js +22 -22
  157. package/package.json +76 -76
  158. package/postcss.config.js +6 -6
  159. package/src/App.vue +30 -30
  160. package/src/Test.vue +112 -112
  161. package/src/assets/icons/arrow_down.svg +3 -3
  162. package/src/assets/icons/arrow_up_red.svg +3 -3
  163. package/src/assets/icons/black_spinner.svg +35 -35
  164. package/src/assets/icons/delete_icon.svg +11 -11
  165. package/src/assets/icons/delete_icon_gray.svg +11 -11
  166. package/src/assets/icons/drag_icon.svg +8 -8
  167. package/src/assets/icons/external_icon.svg +6 -6
  168. package/src/assets/icons/language_icon.svg +6 -6
  169. package/src/assets/icons/pdf_icon.svg +6 -6
  170. package/src/assets/icons/plus_button.svg +4 -4
  171. package/src/assets/icons/search_icon_black.svg +3 -3
  172. package/src/assets/icons/subposition_icon.svg +3 -3
  173. package/src/assets/icons/subposition_marker.svg +3 -3
  174. package/src/assets/icons/warning_icon.svg +3 -3
  175. package/src/assets/svgIcons/2d_active.svg +7 -7
  176. package/src/assets/svgIcons/2d_inactive.svg +8 -8
  177. package/src/assets/svgIcons/3d_active.svg +7 -7
  178. package/src/assets/svgIcons/3d_inactive.svg +8 -8
  179. package/src/assets/svgIcons/_readme.md +7 -7
  180. package/src/assets/svgIcons/accept.svg +5 -5
  181. package/src/assets/svgIcons/activate_panels_active.svg +22 -22
  182. package/src/assets/svgIcons/activate_panels_inactive.svg +20 -20
  183. package/src/assets/svgIcons/add_icon-1.svg +3 -3
  184. package/src/assets/svgIcons/add_icon.svg +4 -4
  185. package/src/assets/svgIcons/address_book.svg +3 -3
  186. package/src/assets/svgIcons/after_sale_as_a_service.svg +6 -6
  187. package/src/assets/svgIcons/all_good.svg +3 -3
  188. package/src/assets/svgIcons/angle_active.svg +5 -5
  189. package/src/assets/svgIcons/angle_inactive.svg +4 -4
  190. package/src/assets/svgIcons/area_active.svg +11 -11
  191. package/src/assets/svgIcons/area_inactive.svg +26 -26
  192. package/src/assets/svgIcons/areas_tool.svg +14 -14
  193. package/src/assets/svgIcons/arrow_down.svg +3 -3
  194. package/src/assets/svgIcons/arrow_left.svg +4 -4
  195. package/src/assets/svgIcons/arrow_right.svg +4 -4
  196. package/src/assets/svgIcons/arrow_up.svg +3 -3
  197. package/src/assets/svgIcons/attachment.svg +3 -3
  198. package/src/assets/svgIcons/base_layer.svg +3 -3
  199. package/src/assets/svgIcons/battery.svg +3 -3
  200. package/src/assets/svgIcons/bell.svg +3 -3
  201. package/src/assets/svgIcons/bexio.svg +4 -4
  202. package/src/assets/svgIcons/bold.svg +3 -3
  203. package/src/assets/svgIcons/bom.svg +3 -3
  204. package/src/assets/svgIcons/bom_generation.svg +10 -10
  205. package/src/assets/svgIcons/bookmaker.svg +3 -3
  206. package/src/assets/svgIcons/bubble.svg +3 -3
  207. package/src/assets/svgIcons/bug.svg +5 -5
  208. package/src/assets/svgIcons/buildings.svg +55 -0
  209. package/src/assets/svgIcons/bullet_list.svg +8 -8
  210. package/src/assets/svgIcons/calendar.svg +7 -7
  211. package/src/assets/svgIcons/calendar_icon.svg +7 -7
  212. package/src/assets/svgIcons/call.svg +3 -3
  213. package/src/assets/svgIcons/camera.svg +3 -3
  214. package/src/assets/svgIcons/car.svg +3 -3
  215. package/src/assets/svgIcons/cart.svg +3 -3
  216. package/src/assets/svgIcons/charger_icon_white.svg +44 -44
  217. package/src/assets/svgIcons/checkbox.svg +3 -3
  218. package/src/assets/svgIcons/clear_formatting.svg +7 -7
  219. package/src/assets/svgIcons/clickable_info.svg +4 -4
  220. package/src/assets/svgIcons/clip.svg +3 -3
  221. package/src/assets/svgIcons/clock.svg +17 -17
  222. package/src/assets/svgIcons/clock_full.svg +3 -3
  223. package/src/assets/svgIcons/close_for_modals,_tool_tips.svg +4 -4
  224. package/src/assets/svgIcons/co_branding.svg +5 -5
  225. package/src/assets/svgIcons/collapse.svg +4 -4
  226. package/src/assets/svgIcons/collections.svg +3 -3
  227. package/src/assets/svgIcons/component_library.svg +7 -7
  228. package/src/assets/svgIcons/consumption_tariffs.svg +43 -43
  229. package/src/assets/svgIcons/context_menu-1.svg +6 -6
  230. package/src/assets/svgIcons/context_menu-2.svg +5 -5
  231. package/src/assets/svgIcons/context_menu.svg +5 -5
  232. package/src/assets/svgIcons/context_menu_tabs.svg +5 -5
  233. package/src/assets/svgIcons/cross.svg +4 -4
  234. package/src/assets/svgIcons/current_variant.svg +4 -4
  235. package/src/assets/svgIcons/dashboard.svg +3 -3
  236. package/src/assets/svgIcons/data_transfer.svg +3 -3
  237. package/src/assets/svgIcons/deadline.svg +4 -4
  238. package/src/assets/svgIcons/deal_flow.svg +5 -5
  239. package/src/assets/svgIcons/delete.svg +4 -4
  240. package/src/assets/svgIcons/delete_area_active.svg +16 -16
  241. package/src/assets/svgIcons/delete_area_inactive.svg +15 -15
  242. package/src/assets/svgIcons/direction_active-1.svg +12 -12
  243. package/src/assets/svgIcons/direction_active.svg +5 -5
  244. package/src/assets/svgIcons/direction_arrow.svg +4 -4
  245. package/src/assets/svgIcons/direction_inactive.svg +4 -4
  246. package/src/assets/svgIcons/dislike.svg +3 -3
  247. package/src/assets/svgIcons/distance_tool.svg +8 -8
  248. package/src/assets/svgIcons/distances_active.svg +9 -9
  249. package/src/assets/svgIcons/distances_inactive.svg +8 -8
  250. package/src/assets/svgIcons/distort_tool.svg +10 -10
  251. package/src/assets/svgIcons/distort_tool2.svg +16 -16
  252. package/src/assets/svgIcons/document.svg +3 -3
  253. package/src/assets/svgIcons/documents.svg +4 -4
  254. package/src/assets/svgIcons/downarrow.svg +3 -3
  255. package/src/assets/svgIcons/download.svg +4 -4
  256. package/src/assets/svgIcons/drag_icon.svg +8 -8
  257. package/src/assets/svgIcons/draggable_corner.svg +5 -5
  258. package/src/assets/svgIcons/draw_tool.svg +3 -3
  259. package/src/assets/svgIcons/duplicate-1.svg +8 -8
  260. package/src/assets/svgIcons/duplicate-2.svg +5 -5
  261. package/src/assets/svgIcons/duplicate.svg +4 -4
  262. package/src/assets/svgIcons/e-mobility_configurator.svg +6 -6
  263. package/src/assets/svgIcons/e_signature.svg +5 -5
  264. package/src/assets/svgIcons/edit_button.svg +3 -3
  265. package/src/assets/svgIcons/electricity_tariff.svg +3 -3
  266. package/src/assets/svgIcons/email.svg +3 -3
  267. package/src/assets/svgIcons/ems-1.svg +3 -3
  268. package/src/assets/svgIcons/ems.svg +3 -3
  269. package/src/assets/svgIcons/end_of_the_list.svg +5 -5
  270. package/src/assets/svgIcons/erase.svg +4 -4
  271. package/src/assets/svgIcons/external_icon.svg +5 -5
  272. package/src/assets/svgIcons/fav_icon.svg +4 -4
  273. package/src/assets/svgIcons/finance.svg +3 -3
  274. package/src/assets/svgIcons/financing_for_pv-1.svg +5 -5
  275. package/src/assets/svgIcons/financing_for_pv-2.svg +3 -3
  276. package/src/assets/svgIcons/financing_for_pv.svg +6 -6
  277. package/src/assets/svgIcons/finish-1.svg +4 -4
  278. package/src/assets/svgIcons/finish.svg +3 -3
  279. package/src/assets/svgIcons/flatten.svg +11 -11
  280. package/src/assets/svgIcons/flatten_roof.svg +20 -20
  281. package/src/assets/svgIcons/folder.svg +3 -3
  282. package/src/assets/svgIcons/free_technology.svg +5 -5
  283. package/src/assets/svgIcons/handle.svg +5 -5
  284. package/src/assets/svgIcons/heat_calc.svg +7 -7
  285. package/src/assets/svgIcons/height_equalize.svg +3 -3
  286. package/src/assets/svgIcons/height_snap.svg +3 -3
  287. package/src/assets/svgIcons/house.svg +3 -3
  288. package/src/assets/svgIcons/house_3d-1.svg +7 -7
  289. package/src/assets/svgIcons/house_3d.svg +7 -7
  290. package/src/assets/svgIcons/inclination.svg +2 -2
  291. package/src/assets/svgIcons/info.svg +3 -3
  292. package/src/assets/svgIcons/initial_situation.svg +3 -3
  293. package/src/assets/svgIcons/integrations.svg +3 -3
  294. package/src/assets/svgIcons/intro-tour-1.svg +3 -3
  295. package/src/assets/svgIcons/intro-tour.svg +3 -3
  296. package/src/assets/svgIcons/inverter-1.svg +5 -5
  297. package/src/assets/svgIcons/inverter.svg +3 -3
  298. package/src/assets/svgIcons/italic.svg +3 -3
  299. package/src/assets/svgIcons/key.svg +3 -3
  300. package/src/assets/svgIcons/lake.svg +29 -0
  301. package/src/assets/svgIcons/layers_close.svg +4 -4
  302. package/src/assets/svgIcons/layers_open.svg +4 -4
  303. package/src/assets/svgIcons/lead_marketplace.svg +6 -6
  304. package/src/assets/svgIcons/lead_provider.svg +4 -4
  305. package/src/assets/svgIcons/length_2d.svg +2 -2
  306. package/src/assets/svgIcons/length_3d.svg +4 -4
  307. package/src/assets/svgIcons/length_calculator.svg +2 -2
  308. package/src/assets/svgIcons/length_in_2d_active.svg +12 -12
  309. package/src/assets/svgIcons/length_in_2d_inctive.svg +13 -13
  310. package/src/assets/svgIcons/light_bulb.svg +3 -3
  311. package/src/assets/svgIcons/like.svg +3 -3
  312. package/src/assets/svgIcons/line_graph.svg +3 -3
  313. package/src/assets/svgIcons/local_subsidies.svg +18 -18
  314. package/src/assets/svgIcons/location.svg +3 -3
  315. package/src/assets/svgIcons/lock.svg +3 -3
  316. package/src/assets/svgIcons/logout.svg +3 -3
  317. package/src/assets/svgIcons/loop.svg +3 -3
  318. package/src/assets/svgIcons/low-vegetation.svg +37 -0
  319. package/src/assets/svgIcons/lunch.svg +4 -4
  320. package/src/assets/svgIcons/magic_tool.svg +6 -6
  321. package/src/assets/svgIcons/map_icon.svg +5 -5
  322. package/src/assets/svgIcons/map_settings.svg +3 -3
  323. package/src/assets/svgIcons/margin_tool.svg +4 -4
  324. package/src/assets/svgIcons/meeting.svg +6 -6
  325. package/src/assets/svgIcons/move_copy.svg +4 -4
  326. package/src/assets/svgIcons/new_area_inactive.svg +11 -11
  327. package/src/assets/svgIcons/next.svg +4 -4
  328. package/src/assets/svgIcons/normal-tg.svg +30 -0
  329. package/src/assets/svgIcons/normal-vegetation.svg +53 -0
  330. package/src/assets/svgIcons/not_equal_to.svg +3 -3
  331. package/src/assets/svgIcons/numbered_list.svg +6 -6
  332. package/src/assets/svgIcons/obstacle_tool.svg +9 -9
  333. package/src/assets/svgIcons/obstacle_tool_origin.svg +3 -3
  334. package/src/assets/svgIcons/offset_tool.svg +8 -8
  335. package/src/assets/svgIcons/open-tg.svg +21 -0
  336. package/src/assets/svgIcons/outline_tool.svg +11 -11
  337. package/src/assets/svgIcons/pan_tool.svg +12 -12
  338. package/src/assets/svgIcons/panels_tool.svg +8 -8
  339. package/src/assets/svgIcons/pen_tool.svg +4 -4
  340. package/src/assets/svgIcons/picker_tool.svg +4 -4
  341. package/src/assets/svgIcons/picture.svg +3 -3
  342. package/src/assets/svgIcons/pin.svg +5 -5
  343. package/src/assets/svgIcons/presentation.svg +3 -3
  344. package/src/assets/svgIcons/previous.svg +4 -4
  345. package/src/assets/svgIcons/profile-1.svg +4 -4
  346. package/src/assets/svgIcons/profile.svg +4 -4
  347. package/src/assets/svgIcons/profitability.svg +3 -3
  348. package/src/assets/svgIcons/project_analysis.svg +4 -4
  349. package/src/assets/svgIcons/project_settings.svg +4 -4
  350. package/src/assets/svgIcons/protected-tg.svg +47 -0
  351. package/src/assets/svgIcons/pv.svg +3 -3
  352. package/src/assets/svgIcons/quotations.svg +6 -6
  353. package/src/assets/svgIcons/redo.svg +6 -6
  354. package/src/assets/svgIcons/resizer.svg +5 -5
  355. package/src/assets/svgIcons/roof_layer.svg +3 -3
  356. package/src/assets/svgIcons/rotate_tool.svg +3 -3
  357. package/src/assets/svgIcons/rotate_view.svg +5 -5
  358. package/src/assets/svgIcons/ruler_tool.svg +3 -3
  359. package/src/assets/svgIcons/run_simulation.svg +3 -3
  360. package/src/assets/svgIcons/save.svg +3 -3
  361. package/src/assets/svgIcons/scaling_tool.svg +8 -8
  362. package/src/assets/svgIcons/sea.svg +34 -0
  363. package/src/assets/svgIcons/search.svg +3 -3
  364. package/src/assets/svgIcons/security.svg +3 -3
  365. package/src/assets/svgIcons/settings.svg +3 -3
  366. package/src/assets/svgIcons/show_in_a_new_tab.svg +12 -12
  367. package/src/assets/svgIcons/smartphone.svg +4 -4
  368. package/src/assets/svgIcons/solar_calc.svg +13 -13
  369. package/src/assets/svgIcons/sorting.svg +4 -4
  370. package/src/assets/svgIcons/split.svg +12 -12
  371. package/src/assets/svgIcons/start_of_the_list.svg +5 -5
  372. package/src/assets/svgIcons/strikethrough.svg +4 -4
  373. package/src/assets/svgIcons/subscriptions.svg +3 -3
  374. package/src/assets/svgIcons/subsidies-1.svg +5 -5
  375. package/src/assets/svgIcons/subsidies-2.svg +3 -3
  376. package/src/assets/svgIcons/subsidies.svg +3 -3
  377. package/src/assets/svgIcons/subtract_icon.svg +3 -3
  378. package/src/assets/svgIcons/suitcase.svg +3 -3
  379. package/src/assets/svgIcons/summer.svg +3 -3
  380. package/src/assets/svgIcons/template_icon_not_clickable.svg +6 -6
  381. package/src/assets/svgIcons/transfer.svg +4 -4
  382. package/src/assets/svgIcons/trim_tool.svg +4 -4
  383. package/src/assets/svgIcons/truck.svg +3 -3
  384. package/src/assets/svgIcons/underlined.svg +3 -3
  385. package/src/assets/svgIcons/undo.svg +6 -6
  386. package/src/assets/svgIcons/uparrow.svg +3 -3
  387. package/src/assets/svgIcons/update.svg +3 -3
  388. package/src/assets/svgIcons/upload_avatar-1.svg +12 -12
  389. package/src/assets/svgIcons/upload_avatar.svg +5 -5
  390. package/src/assets/svgIcons/upload_image.svg +8 -8
  391. package/src/assets/svgIcons/upload_image_tool.svg +7 -7
  392. package/src/assets/svgIcons/variants.svg +6 -6
  393. package/src/assets/svgIcons/vertical_tool.svg +3 -3
  394. package/src/assets/svgIcons/virtual_storage.svg +4 -4
  395. package/src/assets/svgIcons/warning.svg +4 -4
  396. package/src/assets/svgIcons/way.svg +5 -5
  397. package/src/assets/svgIcons/wifi.svg +3 -3
  398. package/src/assets/svgIcons/winter.svg +3 -3
  399. package/src/assets/svgIcons/workflow_template.svg +11 -11
  400. package/src/assets/tests/__mocks__/iconCache.js +1 -1
  401. package/src/assets/tests/helpers.js +12 -12
  402. package/src/assets/theme.js +41 -41
  403. package/src/components/addNewButton/AddNewButton.stories.js +24 -24
  404. package/src/components/addNewButton/index.vue +61 -61
  405. package/src/components/banner/actionBanner/index.vue +64 -64
  406. package/src/components/banner/banner/index.vue +188 -188
  407. package/src/components/banner/infoBanner/index.vue +57 -57
  408. package/src/components/buttons/buttonIcon/index.vue +145 -145
  409. package/src/components/buttons/closeButton/CloseButton.stories.js +26 -26
  410. package/src/components/buttons/closeButton/index.vue +62 -62
  411. package/src/components/buttons/mainButton/index.vue +140 -144
  412. package/src/components/card/index.vue +96 -96
  413. package/src/components/collapsableInfoText/index.vue +127 -127
  414. package/src/components/deleteIcon/DeleteIcon.stories.js +29 -29
  415. package/src/components/deleteIcon/index.vue +78 -78
  416. package/src/components/draggableInputHandle/index.vue +46 -46
  417. package/src/components/dropdown/Dropdown.stories.js +53 -53
  418. package/src/components/dropdown/index.vue +138 -138
  419. package/src/components/errorMessage/index.vue +64 -64
  420. package/src/components/filter/filterSettings.vue +639 -639
  421. package/src/components/filter/index.vue +154 -154
  422. package/src/components/filter/parentDropdown.vue +91 -91
  423. package/src/components/icon/Icons.stories.js +41 -41
  424. package/src/components/icon/iconCache.mjs +23 -23
  425. package/src/components/icon/iconCollection.vue +68 -68
  426. package/src/components/icon/index.vue +140 -140
  427. package/src/components/iconWrapper/index.vue +179 -179
  428. package/src/components/infoCard/index.vue +40 -40
  429. package/src/components/infoText/index.vue +170 -170
  430. package/src/components/inputs/checkbox/Checkbox.stories.js +57 -57
  431. package/src/components/inputs/checkbox/index.vue +224 -224
  432. package/src/components/inputs/inputNumber/InputNumber.stories.js +150 -150
  433. package/src/components/inputs/inputNumber/index.vue +789 -789
  434. package/src/components/inputs/inputNumberQuestion/index.vue +218 -218
  435. package/src/components/inputs/inputText/InputText.stories.js +75 -75
  436. package/src/components/inputs/inputText/index.vue +376 -376
  437. package/src/components/inputs/radioButton/RadioButton.stories.js +58 -58
  438. package/src/components/inputs/radioButton/index.vue +273 -273
  439. package/src/components/inputs/searchInput/SearchInput.stories.js +40 -40
  440. package/src/components/inputs/searchInput/index.vue +151 -151
  441. package/src/components/inputs/select/index.vue +910 -908
  442. package/src/components/inputs/select/option/index.vue +148 -148
  443. package/src/components/inputs/select/select.stories.js +58 -58
  444. package/src/components/inputs/slider/index.vue +126 -126
  445. package/src/components/inputs/switchField/index.vue +254 -254
  446. package/src/components/inputs/textAreaInput/TextAreaInput.stories.js +127 -127
  447. package/src/components/inputs/textAreaInput/index.vue +198 -198
  448. package/src/components/inputs/toggle/Toggle.stories.js +77 -77
  449. package/src/components/inputs/toggle/index.vue +317 -317
  450. package/src/components/inputs/toggle/toggle.spec.js +102 -102
  451. package/src/components/label/index.vue +99 -99
  452. package/src/components/markerItem/index.vue +88 -88
  453. package/src/components/modals/actionModal/index.vue +64 -64
  454. package/src/components/modals/infoModal/index.vue +52 -52
  455. package/src/components/modals/modal/index.vue +188 -188
  456. package/src/components/modals/modal/modal.stories.js +31 -31
  457. package/src/components/navigationTabs/index.vue +114 -114
  458. package/src/components/pageSubtitle/index.vue +67 -67
  459. package/src/components/pageTitle/index.vue +68 -68
  460. package/src/components/pagination/index.vue +148 -148
  461. package/src/components/progressBar/index.vue +125 -125
  462. package/src/components/projectMarker/index.vue +300 -300
  463. package/src/components/rangeSlider/Slider.vue +573 -573
  464. package/src/components/rangeSlider/index.vue +517 -517
  465. package/src/components/rangeSlider/utils/dom.js +49 -49
  466. package/src/components/rangeSlider/utils/fns.js +26 -26
  467. package/src/components/selectedOptions/index.vue +145 -145
  468. package/src/components/sideMenu/index.vue +270 -270
  469. package/src/components/spinner/index.vue +68 -68
  470. package/src/components/tableDropdown/index.vue +638 -638
  471. package/src/components/tables/mainTable/exampleNested.vue +328 -328
  472. package/src/components/tables/mainTable/index.vue +510 -510
  473. package/src/components/tables/viewTable/index.vue +195 -195
  474. package/src/components/tabsHeader/index.vue +83 -83
  475. package/src/components/threeDots/index.vue +413 -413
  476. package/src/components/videoThumbnail/index.vue +103 -103
  477. package/src/components/videoThumbnail/videoThumbnail.stories.js +33 -33
  478. package/src/helpers/currencyMapping.js +28 -28
  479. package/src/helpers/numberConverter.js +103 -103
  480. package/src/helpers/translateLang.js +128 -128
  481. package/src/main.js +7 -7
  482. package/src/mixins/inputValidations.js +97 -97
  483. package/src/router/dynamicRoutes.js +23 -23
  484. package/src/stories/Button.stories.js +48 -48
  485. package/src/stories/Button.vue +52 -52
  486. package/src/stories/Configure.mdx +364 -364
  487. package/src/stories/Header.stories.js +41 -41
  488. package/src/stories/Header.vue +59 -59
  489. package/src/stories/Page.stories.js +30 -30
  490. package/src/stories/Page.vue +83 -83
  491. package/src/stories/button.css +30 -30
  492. package/src/stories/header.css +32 -32
  493. package/src/stories/page.css +69 -69
  494. package/src/utils/index.js +12 -12
@@ -1,789 +1,789 @@
1
- <template>
2
- <Container :align-items="alignItems" :input-width="inputWidth">
3
- <LabelSlotWrapper
4
- v-if="hasLabelSlot"
5
- :align-items="alignItems"
6
- :border-color="borderColor"
7
- :is-error="isError"
8
- :is-interactive="isInteractive"
9
- :no-border="noBorder"
10
- @mousedown="initInteraction"
11
- >
12
- <slot name="label"></slot>
13
- </LabelSlotWrapper>
14
-
15
- <LabelWrapper v-if="labelText">
16
- <LabelText :data-id="labelDataId" :label-font-color="labelFontColor">
17
- {{ labelText }}
18
- </LabelText>
19
-
20
- <InfoText
21
- v-if="labelInfoText"
22
- :align-arrow="labelInfoAlign"
23
- :text="labelInfoText"
24
- />
25
- </LabelWrapper>
26
- <InputWrapper>
27
- <InputContainer
28
- v-bind="$attrs"
29
- ref="inputField1"
30
- :align-items="alignItems"
31
- :background-color="backgroundColor"
32
- :border-color="borderColor"
33
- :data-id="inputDataId"
34
- :disabled="disabled"
35
- :font-color="fontColor"
36
- :font-size="fontSize"
37
- :has-label-slot="hasLabelSlot"
38
- :has-slot="hasSlot"
39
- :has-unit="unitName && !!unitName.length"
40
- :input-height="inputHeight"
41
- :is-disabled="disabled"
42
- :is-error="isError"
43
- :is-interactive="isInteractive"
44
- :min-width="minWidth"
45
- :no-border="noBorder"
46
- :placeholder="displayedPlaceholder"
47
- :show-linear-unit-name="showLinearUnitName"
48
- :slot-size="slotSize"
49
- :text-align="textAlign"
50
- :value="formatWithCurrency(value)"
51
- @blur="onInputBlur($event)"
52
- @focus="focusInput()"
53
- @input="onInput($event)"
54
- @keyup.enter="onEnterPress"
55
- />
56
- <SlotContainer v-if="hasSlot" :is-error="isError" :slot-size="slotSize">
57
- <slot></slot>
58
- </SlotContainer>
59
-
60
- <UnitContainer
61
- v-if="unitName && showLinearUnitName && !hasSlot"
62
- :has-length="!!textInput.length"
63
- :is-error="isError"
64
- >{{ unitName }}</UnitContainer
65
- >
66
- <IconWrapper
67
- v-if="isError && !showLinearUnitName"
68
- :margin-right="showSelect ? selectWidth : 0"
69
- size="16px"
70
- >
71
- <Icon cursor="default" name="warning" size="16px" />
72
- </IconWrapper>
73
- <SelectWrapper v-if="showSelect">
74
- <Divider />
75
- <RCSelect
76
- :disabled="isSelectDisabled"
77
- :select-width="`${selectWidth}px`"
78
- :show-border="false"
79
- @input-change="$emit('select-change', $event)"
80
- >
81
- <template #selector>
82
- <SelectText>{{ getSelectValue }}</SelectText>
83
- </template>
84
- <template #dropdown>
85
- <RCOption
86
- v-for="item in selectOptions"
87
- :key="item.value"
88
- :value="item.value"
89
- >
90
- {{ item.label }}
91
- </RCOption>
92
- </template>
93
- </RCSelect>
94
- </SelectWrapper>
95
- </InputWrapper>
96
- <ErrorMessage v-if="isError">{{ errorMessage }}</ErrorMessage>
97
- </Container>
98
- </template>
99
-
100
- <script>
101
- // import InputNumber from "@eturnity/eturnity_reusable_components/src/components/inputs/inputNumber"
102
- //This component should be used for questions with input fields only
103
- //How to use:
104
- // <input-number
105
- // placeholder="Enter distance"
106
- // :isError="false" //default is false
107
- // inputWidth="150px" //by default, this is 100%
108
- // minWidth="100px"
109
- // :numberPrecision="3"
110
- // minDecimals="2"
111
- // unitName="pc"
112
- // :value="inputValue" //required -- String
113
- // @input-change="onInputChange($event)" //required
114
- // @on-enter-click="onInputSubmit()"
115
- // :errorMessage="Enter a number between 1 and 10"
116
- // :disabled="false"
117
- // :noBorder="true"
118
- // textAlign="left" // "left, right, center"
119
- // :showLinearUnitName="true"
120
- // fontSize="13px"
121
- // labelText="Number of Modules"
122
- // labelInfoText="Here is some information for you..."
123
- // labelInfoAlign="left"
124
- // :minNumber="0"
125
- // fontColor="blue"
126
- // >
127
- //<template name=label><img>....</template>
128
- //</inputNumber>
129
- import styled from 'vue3-styled-components'
130
- import {
131
- stringToNumber,
132
- numberToString,
133
- } from '../../../helpers/numberConverter'
134
- import InfoText from '../../infoText'
135
- import ErrorMessage from '../../errorMessage'
136
- import RCSelect from '../select'
137
- import RCOption from '../select/option'
138
- import warningIcon from '../../../assets/icons/error_icon.png'
139
- import Icon from '../../icon'
140
-
141
- const inputProps = {
142
- isError: Boolean,
143
- hasUnit: Boolean,
144
- inputWidth: String,
145
- minWidth: String,
146
- isDisabled: Boolean,
147
- noBorder: Boolean,
148
- textAlign: String,
149
- fontSize: String,
150
- fontColor: String,
151
- backgroundColor: String,
152
- hasSlot: Boolean,
153
- hasLabelSlot: Boolean,
154
- slotSize: String,
155
- inputHeight: String,
156
- isInteractive: Boolean,
157
- alignItems: String,
158
- labelFontColor: String,
159
- borderColor: String,
160
- showLinearUnitName: Boolean,
161
- }
162
-
163
- const Container = styled('div', inputProps)`
164
- width: ${(props) => (props.inputWidth ? props.inputWidth : '100%')};
165
- position: relative;
166
- display: grid;
167
- grid-template-columns: ${(props) =>
168
- props.alignItems === 'vertical' ? '1fr' : 'auto 1fr'};
169
- `
170
-
171
- const InputContainer = styled('input', inputProps)`
172
- border: ${(props) =>
173
- props.isError
174
- ? '1px solid ' + props.theme.colors.red
175
- : props.noBorder
176
- ? 'none'
177
- : props.borderColor
178
- ? props.theme.colors[props.borderColor]
179
- ? '1px solid ' + props.theme.colors[props.borderColor]
180
- : '1px solid ' + props.borderColor
181
- : '1px solid ' + props.theme.colors.grey4};
182
- height: ${(props) => props.inputHeight};
183
- max-height: ${(props) => props.inputHeight};
184
- padding: 0 10px;
185
- padding-right: ${({ slotSize, isError, showLinearUnitName }) =>
186
- slotSize
187
- ? isError && !showLinearUnitName
188
- ? 'calc(' + slotSize + ' + 24px)'
189
- : 'calc(' + slotSize + ' + 10px)'
190
- : isError && !showLinearUnitName
191
- ? '24px'
192
- : '5px'};
193
- border-radius: ${(props) =>
194
- props.isInteractive && props.alignItems != 'vertical'
195
- ? '0 4px 4px 0'
196
- : '4px'};
197
- text-align: ${(props) => props.textAlign};
198
- cursor: ${(props) => (props.isDisabled ? 'not-allowed' : 'auto')};
199
- font-size: ${(props) => (props.fontSize ? props.fontSize : '13px')};
200
- color: ${(props) =>
201
- props.isError
202
- ? props.theme.colors.grey6
203
- : props.isDisabled
204
- ? props.theme.colors.grey2
205
- : props.fontColor
206
- ? props.fontColor + ' !important'
207
- : props.theme.colors.black};
208
- background-color: ${(props) =>
209
- props.backgroundColor
210
- ? props.backgroundColor + ' !important'
211
- : props.theme.colors.white};
212
- width: ${(props) =>
213
- props.inputWidth && !props.hasLabelSlot ? props.inputWidth : '100%'};
214
- min-width: ${(props) => (props.minWidth ? props.minWidth : 'unset')};
215
- background-color: ${(props) =>
216
- props.isDisabled ? props.theme.colors.grey5 : '#fff'};
217
- box-sizing: border-box;
218
-
219
- &::placeholder {
220
- color: ${(props) => props.theme.colors.grey2};
221
- }
222
-
223
- &:focus {
224
- outline: none;
225
- }
226
- `
227
-
228
- const InputWrapper = styled.span`
229
- position: relative;
230
- `
231
-
232
- const UnitContainer = styled('span', inputProps)`
233
- border-left: 1px solid
234
- ${(props) =>
235
- props.isError
236
- ? props.theme.colors.red
237
- : props.hasLength
238
- ? props.theme.colors.black
239
- : props.theme.colors.mediumGray};
240
- position: absolute;
241
- right: 10px;
242
- top: 10px;
243
- padding-left: 10px;
244
- text-align: right;
245
- color: ${(props) =>
246
- props.isError
247
- ? props.theme.colors.red
248
- : props.hasLength
249
- ? props.theme.colors.black
250
- : props.theme.colors.mediumGray};
251
- `
252
-
253
- const SlotContainer = styled('span', inputProps)`
254
- text-align: right;
255
- border-left: 1px solid
256
- ${(props) =>
257
- props.isError
258
- ? props.theme.colors.red
259
- : props.hasLength
260
- ? props.theme.colors.black
261
- : props.theme.colors.mediumGray};
262
- position: absolute;
263
- width: ${(props) =>
264
- props.slotSize ? 'calc(' + props.slotSize + ' - 10px)' : 'fit-content'};
265
- right: 10px;
266
- top: 10px;
267
- padding-left: 10px;
268
- color: ${(props) =>
269
- props.isError
270
- ? props.theme.colors.red
271
- : props.hasLength
272
- ? props.theme.colors.black
273
- : props.theme.colors.mediumGray};
274
- `
275
-
276
- const LabelWrapper = styled('div', inputProps)`
277
- display: flex;
278
- align-items: center;
279
- gap: 10px;
280
- margin-bottom: 8px;
281
- cursor: ${(props) => (props.isInteractive ? 'ew-resize' : 'auto')};
282
- `
283
- const LabelSlotWrapper = styled('div', inputProps)`
284
- display: flex;
285
- gap: 10px;
286
- align-items: center;
287
- cursor: ${(props) => (props.isInteractive ? 'ew-resize' : 'auto')};
288
- border: ${(props) =>
289
- props.alignItems == 'vertical'
290
- ? 'none'
291
- : props.isError
292
- ? '1px solid ' + props.theme.colors.red
293
- : props.noBorder
294
- ? 'none'
295
- : props.borderColor
296
- ? props.theme.colors[props.borderColor]
297
- ? '1px solid ' + props.theme.colors[props.borderColor]
298
- : '1px solid ' + props.borderColor
299
- : '1px solid ' + props.theme.colors.grey4};
300
- border-radius: 4px 0 0 4px;
301
- border-right: none;
302
- `
303
-
304
- const LabelText = styled('div', inputProps)`
305
- font-size: 13px;
306
- color: ${(props) =>
307
- props.theme.colors[props.labelFontColor]
308
- ? props.theme.colors[props.labelFontColor]
309
- : props.labelFontColor};
310
- font-weight: 700;
311
- `
312
-
313
- const IconAttrs = { size: String, marginRight: Number }
314
- const IconWrapper = styled('div', IconAttrs)`
315
- position: absolute;
316
- top: 0;
317
- bottom: 0;
318
- margin: auto;
319
- right: ${(props) => props.marginRight + 10}px;
320
- height: ${(props) => (props.size ? props.size : 'auto')};
321
- `
322
-
323
- const SelectText = styled.div`
324
- font-size: 13px;
325
- `
326
-
327
- const SelectWrapper = styled.div`
328
- position: absolute;
329
- top: 2px;
330
- right: 2px;
331
- display: flex;
332
- height: 100%;
333
- `
334
-
335
- const Divider = styled.div`
336
- margin-top: 6px;
337
- height: calc(100% - 16px);
338
- width: 1px;
339
- background-color: ${({ theme }) => theme.colors.grey4};
340
- `
341
-
342
- export default {
343
- name: 'InputNumber',
344
- components: {
345
- Container,
346
- InputContainer,
347
- InputWrapper,
348
- UnitContainer,
349
- ErrorMessage,
350
- LabelWrapper,
351
- LabelSlotWrapper,
352
- LabelText,
353
- InfoText,
354
- Icon,
355
- SlotContainer,
356
- IconWrapper,
357
- RCSelect,
358
- RCOption,
359
- SelectWrapper,
360
- SelectText,
361
- Divider,
362
- },
363
- inheritAttrs: false,
364
- props: {
365
- placeholder: {
366
- required: false,
367
- default: '',
368
- },
369
- isError: {
370
- required: false,
371
- default: false,
372
- },
373
- inputWidth: {
374
- required: false,
375
- default: null,
376
- },
377
- minWidth: {
378
- required: false,
379
- default: null,
380
- },
381
- inputHeight: {
382
- required: false,
383
- default: '40px',
384
- },
385
- value: {
386
- required: true,
387
- default: null,
388
- },
389
- clearInput: {
390
- required: false,
391
- default: false,
392
- },
393
- alignItems: {
394
- required: false,
395
- default: 'vertical',
396
- },
397
- errorMessage: {
398
- required: false,
399
- default: 'Please insert a correct number',
400
- },
401
- numberPrecision: {
402
- required: false,
403
- default: 0,
404
- },
405
- minDecimals: {
406
- required: false,
407
- default: 0,
408
- },
409
- unitName: {
410
- required: false,
411
- default: '',
412
- },
413
- showLinearUnitName: {
414
- required: false,
415
- default: false,
416
- },
417
- disabled: {
418
- required: false,
419
- default: false,
420
- },
421
- noBorder: {
422
- required: false,
423
- default: false,
424
- },
425
- borderColor: {
426
- required: false,
427
- },
428
- textAlign: {
429
- required: false,
430
- default: 'left',
431
- },
432
- fontSize: {
433
- required: false,
434
- default: '13px',
435
- },
436
- isInteractive: {
437
- required: false,
438
- default: false,
439
- },
440
- interactionStep: {
441
- required: false,
442
- default: 1,
443
- },
444
- labelText: {
445
- required: false,
446
- default: null,
447
- },
448
- labelInfoText: {
449
- required: false,
450
- default: null,
451
- },
452
- labelInfoAlign: {
453
- required: false,
454
- default: 'left',
455
- },
456
- defaultNumber: {
457
- required: false,
458
- default: null,
459
- },
460
- minNumber: {
461
- required: false,
462
- default: null,
463
- },
464
- fontColor: {
465
- required: false,
466
- default: null,
467
- },
468
- backgroundColor: {
469
- required: false,
470
- default: null,
471
- },
472
- numberToStringEnabled: {
473
- required: false,
474
- default: true,
475
- },
476
- allowNegative: {
477
- required: false,
478
- default: true,
479
- },
480
- slotSize: {
481
- required: false,
482
- },
483
- labelFontColor: {
484
- required: false,
485
- default: 'eturnityGrey',
486
- },
487
- focus: {
488
- required: false,
489
- default: false,
490
- },
491
- labelDataId: {
492
- required: false,
493
- default: '',
494
- },
495
- inputDataId: {
496
- required: false,
497
- default: '',
498
- },
499
- showSelect: {
500
- type: Boolean,
501
- default: false,
502
- },
503
- selectWidth: {
504
- type: Number,
505
- default: 70,
506
- },
507
- selectOptions: {
508
- type: Array,
509
- default: () => [],
510
- },
511
- selectValue: {
512
- type: [String, Number],
513
- default: null,
514
- },
515
- isSelectDisabled: {
516
- type: Boolean,
517
- default: false,
518
- },
519
- },
520
- data() {
521
- return {
522
- textInput: '',
523
- isFocused: false,
524
- warningIcon: warningIcon,
525
- }
526
- },
527
- computed: {
528
- displayedPlaceholder() {
529
- if (this.placeholder) return this.placeholder
530
- if (this.defaultNumber)
531
- return `${this.defaultNumber} ${this.unitName ? this.unitName : ''}`
532
- return `${this.minNumber || 0} ${this.unitName ? this.unitName : ''}`
533
- },
534
- hasSlot() {
535
- return !!this.$slots.default
536
- },
537
- hasLabelSlot() {
538
- return !!this.$slots.label
539
- },
540
- getSelectValue() {
541
- const item = this.selectOptions.find(
542
- ({ value }) => value === this.selectValue
543
- )
544
-
545
- return item ? item.label : '-'
546
- },
547
- },
548
- watch: {
549
- focus(value) {
550
- if (value) {
551
- this.focusInput()
552
- }
553
- },
554
- clearInput: function (value) {
555
- if (value) {
556
- // If the value is typed, then we should clear the textInput on Continue
557
- this.textInput = ''
558
- }
559
- },
560
- },
561
- created() {
562
- if (this.value) {
563
- this.textInput = numberToString({
564
- value: this.value,
565
- numberPrecision: this.numberPrecision,
566
- minDecimals: this.minDecimals,
567
- })
568
- } else if (this.defaultNumber !== null) {
569
- this.textInput = numberToString({
570
- value: this.defaultNumber,
571
- numberPrecision: this.numberPrecision,
572
- minDecimals: this.minDecimals,
573
- })
574
- } else if (this.minNumber !== null) {
575
- this.textInput = numberToString({
576
- value: this.minNumber,
577
- numberPrecision: this.numberPrecision,
578
- minDecimals: this.minDecimals,
579
- })
580
- }
581
- },
582
- mounted() {
583
- if (this.focus) {
584
- this.focusInput()
585
- }
586
- },
587
- methods: {
588
- onEnterPress() {
589
- this.$emit('on-enter-click')
590
- this.$refs.inputField1.$el.blur()
591
- },
592
- onChangeHandler(event) {
593
- if (isNaN(event) || event === '') {
594
- event = this.defaultNumber
595
- ? this.defaultNumber
596
- : this.minNumber || this.minNumber === 0
597
- ? this.minNumber
598
- : event
599
- }
600
- if (!this.allowNegative) {
601
- event = Math.abs(event)
602
- }
603
- event = parseFloat(event)
604
- // Need to return an integer rather than a string
605
- this.$emit('input-change', event)
606
- },
607
- onEvaluateCode(event) {
608
- // function to perform math on the code
609
- // filter the string in case of any malicious content
610
- const val = event.target.value
611
- let filtered = val.replace('(auto)', '').replace(/[^-()\d/*+.,]/g, '')
612
- filtered = filtered.split(/([-+*/()])/)
613
- let formatted = filtered.map((item) => {
614
- if (
615
- item === '+' ||
616
- item === '-' ||
617
- item === '*' ||
618
- item === '/' ||
619
- item === '(' ||
620
- item === ')' ||
621
- item === ''
622
- ) {
623
- return item
624
- } else {
625
- let num = stringToNumber({
626
- value: item,
627
- numberPrecision: false,
628
- minDecimals: this.minDecimals,
629
- })
630
- return num
631
- }
632
- })
633
- let evaluated
634
- formatted = this.removeStringItemsAfterLastNumber(formatted)
635
- evaluated = eval(formatted.join(' '))
636
- if (typeof evaluated === 'string') {
637
- evaluated = stringToNumber({
638
- value: evaluated,
639
- numberPrecision: this.numberPrecision,
640
- minDecimals: this.minDecimals,
641
- })
642
- } else if (typeof evaluated === 'number') {
643
- evaluated = evaluated.toFixed(this.numberPrecision)
644
- }
645
- return evaluated
646
- },
647
- removeStringItemsAfterLastNumber(array) {
648
- // fixed in EPDM-6487, in order to prevent 'Unexpected end of input'
649
- let lastNumberIndex = -1
650
- // Find the index of the last number in the array
651
- for (let i = array.length - 1; i >= 0; i--) {
652
- if (typeof array[i] === 'number') {
653
- lastNumberIndex = i
654
- break
655
- }
656
- }
657
- // if there are no numbers, return an empty array
658
- if (lastNumberIndex === -1) {
659
- return []
660
- }
661
- // Remove non-numeric items after the last number
662
- if (lastNumberIndex !== -1) {
663
- const newArray = array.slice(0, lastNumberIndex + 1)
664
- return newArray
665
- }
666
- return array
667
- },
668
- onInput(event) {
669
- if (!this.isFocused) {
670
- return
671
- }
672
- if (event.target.value === '') {
673
- this.$emit('on-input', '')
674
- }
675
- let evaluatedVal
676
- try {
677
- evaluatedVal = this.onEvaluateCode(event)
678
- } finally {
679
- if (evaluatedVal && this.value != evaluatedVal) {
680
- this.$emit('on-input', evaluatedVal)
681
- }
682
- }
683
- },
684
- onInputBlur(e) {
685
- this.isFocused = false
686
- let value = e.target.value
687
- let evaluatedInput = this.onEvaluateCode(e)
688
- this.onChangeHandler(evaluatedInput ? evaluatedInput : value)
689
- if ((evaluatedInput && value.length) || this.minNumber !== null) {
690
- this.textInput = numberToString({
691
- value:
692
- evaluatedInput && value.length
693
- ? evaluatedInput
694
- : this.defaultNumber
695
- ? this.defaultNumber
696
- : this.minNumber,
697
- numberPrecision: this.numberPrecision,
698
- minDecimals: this.minDecimals,
699
- })
700
- }
701
- let adjustedMinValue =
702
- evaluatedInput && evaluatedInput.length
703
- ? evaluatedInput
704
- : this.defaultNumber
705
- ? this.defaultNumber
706
- : this.minNumber || this.minNumber === 0
707
- ? this.minNumber
708
- : ''
709
- this.$emit('input-blur', adjustedMinValue)
710
- },
711
- focusInput() {
712
- if (this.disabled) {
713
- return
714
- }
715
- this.isFocused = true
716
- this.$nextTick(() => {
717
- this.$refs.inputField1.$el.select()
718
- })
719
- this.$emit('input-focus')
720
- },
721
- blurInput() {
722
- if (this.disabled) {
723
- return
724
- }
725
- this.isFocused = false
726
- this.$nextTick(() => {
727
- this.$refs.inputField1.$el.blur()
728
- })
729
- },
730
- formatWithCurrency(value) {
731
- let adjustedMinValue =
732
- value || value === 0
733
- ? value
734
- : this.defaultNumber
735
- ? this.defaultNumber
736
- : this.minNumber || this.minNumber === 0
737
- ? this.minNumber
738
- : ''
739
- if ((adjustedMinValue || adjustedMinValue === 0) && !this.isFocused) {
740
- let input = this.numberToStringEnabled
741
- ? numberToString({
742
- value: adjustedMinValue,
743
- numberPrecision: this.numberPrecision,
744
- minDecimals: this.minDecimals,
745
- })
746
- : adjustedMinValue
747
- let unit = this.showLinearUnitName ? '' : this.unitName
748
- //return input + ' ' + unit
749
- return input + ' ' + unit
750
- } else if (!adjustedMinValue && adjustedMinValue !== 0) {
751
- return ''
752
- } else {
753
- return this.numberToStringEnabled
754
- ? numberToString({
755
- value: adjustedMinValue,
756
- numberPrecision: this.numberPrecision,
757
- minDecimals: this.minDecimals,
758
- })
759
- : adjustedMinValue
760
- }
761
- },
762
- initInteraction(e) {
763
- this.focusInput()
764
- e.preventDefault()
765
- window.addEventListener('mousemove', this.interact, false)
766
- window.addEventListener('mouseup', this.stopInteract, false)
767
- },
768
- interact(e) {
769
- e.preventDefault()
770
- let value = parseFloat(this.value || 0)
771
- value += parseFloat(this.interactionStep) * parseInt(e.movementX)
772
- this.$emit('on-input-drag', value)
773
-
774
- this.textInput = numberToString({
775
- value: value && value.length ? value : this.minNumber,
776
- numberPrecision: this.numberPrecision,
777
- minDecimals: this.minDecimals,
778
- })
779
- //this.value=value
780
- },
781
- stopInteract(e) {
782
- e.preventDefault()
783
- window.removeEventListener('mousemove', this.interact, false)
784
- window.removeEventListener('mouseup', this.stopInteract, false)
785
- this.blurInput()
786
- },
787
- },
788
- }
789
- </script>
1
+ <template>
2
+ <Container :align-items="alignItems" :input-width="inputWidth">
3
+ <LabelSlotWrapper
4
+ v-if="hasLabelSlot"
5
+ :align-items="alignItems"
6
+ :border-color="borderColor"
7
+ :is-error="isError"
8
+ :is-interactive="isInteractive"
9
+ :no-border="noBorder"
10
+ @mousedown="initInteraction"
11
+ >
12
+ <slot name="label"></slot>
13
+ </LabelSlotWrapper>
14
+
15
+ <LabelWrapper v-if="labelText">
16
+ <LabelText :data-id="labelDataId" :label-font-color="labelFontColor">
17
+ {{ labelText }}
18
+ </LabelText>
19
+
20
+ <InfoText
21
+ v-if="labelInfoText"
22
+ :align-arrow="labelInfoAlign"
23
+ :text="labelInfoText"
24
+ />
25
+ </LabelWrapper>
26
+ <InputWrapper>
27
+ <InputContainer
28
+ v-bind="$attrs"
29
+ ref="inputField1"
30
+ :align-items="alignItems"
31
+ :background-color="backgroundColor"
32
+ :border-color="borderColor"
33
+ :data-id="inputDataId"
34
+ :disabled="disabled"
35
+ :font-color="fontColor"
36
+ :font-size="fontSize"
37
+ :has-label-slot="hasLabelSlot"
38
+ :has-slot="hasSlot"
39
+ :has-unit="unitName && !!unitName.length"
40
+ :input-height="inputHeight"
41
+ :is-disabled="disabled"
42
+ :is-error="isError"
43
+ :is-interactive="isInteractive"
44
+ :min-width="minWidth"
45
+ :no-border="noBorder"
46
+ :placeholder="displayedPlaceholder"
47
+ :show-linear-unit-name="showLinearUnitName"
48
+ :slot-size="slotSize"
49
+ :text-align="textAlign"
50
+ :value="formatWithCurrency(value)"
51
+ @blur="onInputBlur($event)"
52
+ @focus="focusInput()"
53
+ @input="onInput($event)"
54
+ @keyup.enter="onEnterPress"
55
+ />
56
+ <SlotContainer v-if="hasSlot" :is-error="isError" :slot-size="slotSize">
57
+ <slot></slot>
58
+ </SlotContainer>
59
+
60
+ <UnitContainer
61
+ v-if="unitName && showLinearUnitName && !hasSlot"
62
+ :has-length="!!textInput.length"
63
+ :is-error="isError"
64
+ >{{ unitName }}</UnitContainer
65
+ >
66
+ <IconWrapper
67
+ v-if="isError && !showLinearUnitName"
68
+ :margin-right="showSelect ? selectWidth : 0"
69
+ size="16px"
70
+ >
71
+ <Icon cursor="default" name="warning" size="16px" />
72
+ </IconWrapper>
73
+ <SelectWrapper v-if="showSelect">
74
+ <Divider />
75
+ <RCSelect
76
+ :disabled="isSelectDisabled"
77
+ :select-width="`${selectWidth}px`"
78
+ :show-border="false"
79
+ @input-change="$emit('select-change', $event)"
80
+ >
81
+ <template #selector>
82
+ <SelectText>{{ getSelectValue }}</SelectText>
83
+ </template>
84
+ <template #dropdown>
85
+ <RCOption
86
+ v-for="item in selectOptions"
87
+ :key="item.value"
88
+ :value="item.value"
89
+ >
90
+ {{ item.label }}
91
+ </RCOption>
92
+ </template>
93
+ </RCSelect>
94
+ </SelectWrapper>
95
+ </InputWrapper>
96
+ <ErrorMessage v-if="isError">{{ errorMessage }}</ErrorMessage>
97
+ </Container>
98
+ </template>
99
+
100
+ <script>
101
+ // import InputNumber from "@eturnity/eturnity_reusable_components/src/components/inputs/inputNumber"
102
+ //This component should be used for questions with input fields only
103
+ //How to use:
104
+ // <input-number
105
+ // placeholder="Enter distance"
106
+ // :isError="false" //default is false
107
+ // inputWidth="150px" //by default, this is 100%
108
+ // minWidth="100px"
109
+ // :numberPrecision="3"
110
+ // minDecimals="2"
111
+ // unitName="pc"
112
+ // :value="inputValue" //required -- String
113
+ // @input-change="onInputChange($event)" //required
114
+ // @on-enter-click="onInputSubmit()"
115
+ // :errorMessage="Enter a number between 1 and 10"
116
+ // :disabled="false"
117
+ // :noBorder="true"
118
+ // textAlign="left" // "left, right, center"
119
+ // :showLinearUnitName="true"
120
+ // fontSize="13px"
121
+ // labelText="Number of Modules"
122
+ // labelInfoText="Here is some information for you..."
123
+ // labelInfoAlign="left"
124
+ // :minNumber="0"
125
+ // fontColor="blue"
126
+ // >
127
+ //<template name=label><img>....</template>
128
+ //</inputNumber>
129
+ import styled from 'vue3-styled-components'
130
+ import {
131
+ stringToNumber,
132
+ numberToString,
133
+ } from '../../../helpers/numberConverter'
134
+ import InfoText from '../../infoText'
135
+ import ErrorMessage from '../../errorMessage'
136
+ import RCSelect from '../select'
137
+ import RCOption from '../select/option'
138
+ import warningIcon from '../../../assets/icons/error_icon.png'
139
+ import Icon from '../../icon'
140
+
141
+ const inputProps = {
142
+ isError: Boolean,
143
+ hasUnit: Boolean,
144
+ inputWidth: String,
145
+ minWidth: String,
146
+ isDisabled: Boolean,
147
+ noBorder: Boolean,
148
+ textAlign: String,
149
+ fontSize: String,
150
+ fontColor: String,
151
+ backgroundColor: String,
152
+ hasSlot: Boolean,
153
+ hasLabelSlot: Boolean,
154
+ slotSize: String,
155
+ inputHeight: String,
156
+ isInteractive: Boolean,
157
+ alignItems: String,
158
+ labelFontColor: String,
159
+ borderColor: String,
160
+ showLinearUnitName: Boolean,
161
+ }
162
+
163
+ const Container = styled('div', inputProps)`
164
+ width: ${(props) => (props.inputWidth ? props.inputWidth : '100%')};
165
+ position: relative;
166
+ display: grid;
167
+ grid-template-columns: ${(props) =>
168
+ props.alignItems === 'vertical' ? '1fr' : 'auto 1fr'};
169
+ `
170
+
171
+ const InputContainer = styled('input', inputProps)`
172
+ border: ${(props) =>
173
+ props.isError
174
+ ? '1px solid ' + props.theme.colors.red
175
+ : props.noBorder
176
+ ? 'none'
177
+ : props.borderColor
178
+ ? props.theme.colors[props.borderColor]
179
+ ? '1px solid ' + props.theme.colors[props.borderColor]
180
+ : '1px solid ' + props.borderColor
181
+ : '1px solid ' + props.theme.colors.grey4};
182
+ height: ${(props) => props.inputHeight};
183
+ max-height: ${(props) => props.inputHeight};
184
+ padding: 0 10px;
185
+ padding-right: ${({ slotSize, isError, showLinearUnitName }) =>
186
+ slotSize
187
+ ? isError && !showLinearUnitName
188
+ ? 'calc(' + slotSize + ' + 24px)'
189
+ : 'calc(' + slotSize + ' + 10px)'
190
+ : isError && !showLinearUnitName
191
+ ? '24px'
192
+ : '5px'};
193
+ border-radius: ${(props) =>
194
+ props.isInteractive && props.alignItems != 'vertical'
195
+ ? '0 4px 4px 0'
196
+ : '4px'};
197
+ text-align: ${(props) => props.textAlign};
198
+ cursor: ${(props) => (props.isDisabled ? 'not-allowed' : 'auto')};
199
+ font-size: ${(props) => (props.fontSize ? props.fontSize : '13px')};
200
+ color: ${(props) =>
201
+ props.isError
202
+ ? props.theme.colors.grey6
203
+ : props.isDisabled
204
+ ? props.theme.colors.grey2
205
+ : props.fontColor
206
+ ? props.fontColor + ' !important'
207
+ : props.theme.colors.black};
208
+ background-color: ${(props) =>
209
+ props.backgroundColor
210
+ ? props.backgroundColor + ' !important'
211
+ : props.theme.colors.white};
212
+ width: ${(props) =>
213
+ props.inputWidth && !props.hasLabelSlot ? props.inputWidth : '100%'};
214
+ min-width: ${(props) => (props.minWidth ? props.minWidth : 'unset')};
215
+ background-color: ${(props) =>
216
+ props.isDisabled ? props.theme.colors.grey5 : '#fff'};
217
+ box-sizing: border-box;
218
+
219
+ &::placeholder {
220
+ color: ${(props) => props.theme.colors.grey2};
221
+ }
222
+
223
+ &:focus {
224
+ outline: none;
225
+ }
226
+ `
227
+
228
+ const InputWrapper = styled.span`
229
+ position: relative;
230
+ `
231
+
232
+ const UnitContainer = styled('span', inputProps)`
233
+ border-left: 1px solid
234
+ ${(props) =>
235
+ props.isError
236
+ ? props.theme.colors.red
237
+ : props.hasLength
238
+ ? props.theme.colors.black
239
+ : props.theme.colors.mediumGray};
240
+ position: absolute;
241
+ right: 10px;
242
+ top: 10px;
243
+ padding-left: 10px;
244
+ text-align: right;
245
+ color: ${(props) =>
246
+ props.isError
247
+ ? props.theme.colors.red
248
+ : props.hasLength
249
+ ? props.theme.colors.black
250
+ : props.theme.colors.mediumGray};
251
+ `
252
+
253
+ const SlotContainer = styled('span', inputProps)`
254
+ text-align: right;
255
+ border-left: 1px solid
256
+ ${(props) =>
257
+ props.isError
258
+ ? props.theme.colors.red
259
+ : props.hasLength
260
+ ? props.theme.colors.black
261
+ : props.theme.colors.mediumGray};
262
+ position: absolute;
263
+ width: ${(props) =>
264
+ props.slotSize ? 'calc(' + props.slotSize + ' - 10px)' : 'fit-content'};
265
+ right: 10px;
266
+ top: 10px;
267
+ padding-left: 10px;
268
+ color: ${(props) =>
269
+ props.isError
270
+ ? props.theme.colors.red
271
+ : props.hasLength
272
+ ? props.theme.colors.black
273
+ : props.theme.colors.mediumGray};
274
+ `
275
+
276
+ const LabelWrapper = styled('div', inputProps)`
277
+ display: flex;
278
+ align-items: center;
279
+ gap: 10px;
280
+ margin-bottom: 8px;
281
+ cursor: ${(props) => (props.isInteractive ? 'ew-resize' : 'auto')};
282
+ `
283
+ const LabelSlotWrapper = styled('div', inputProps)`
284
+ display: flex;
285
+ gap: 10px;
286
+ align-items: center;
287
+ cursor: ${(props) => (props.isInteractive ? 'ew-resize' : 'auto')};
288
+ border: ${(props) =>
289
+ props.alignItems == 'vertical'
290
+ ? 'none'
291
+ : props.isError
292
+ ? '1px solid ' + props.theme.colors.red
293
+ : props.noBorder
294
+ ? 'none'
295
+ : props.borderColor
296
+ ? props.theme.colors[props.borderColor]
297
+ ? '1px solid ' + props.theme.colors[props.borderColor]
298
+ : '1px solid ' + props.borderColor
299
+ : '1px solid ' + props.theme.colors.grey4};
300
+ border-radius: 4px 0 0 4px;
301
+ border-right: none;
302
+ `
303
+
304
+ const LabelText = styled('div', inputProps)`
305
+ font-size: 13px;
306
+ color: ${(props) =>
307
+ props.theme.colors[props.labelFontColor]
308
+ ? props.theme.colors[props.labelFontColor]
309
+ : props.labelFontColor};
310
+ font-weight: 700;
311
+ `
312
+
313
+ const IconAttrs = { size: String, marginRight: Number }
314
+ const IconWrapper = styled('div', IconAttrs)`
315
+ position: absolute;
316
+ top: 0;
317
+ bottom: 0;
318
+ margin: auto;
319
+ right: ${(props) => props.marginRight + 10}px;
320
+ height: ${(props) => (props.size ? props.size : 'auto')};
321
+ `
322
+
323
+ const SelectText = styled.div`
324
+ font-size: 13px;
325
+ `
326
+
327
+ const SelectWrapper = styled.div`
328
+ position: absolute;
329
+ top: 2px;
330
+ right: 2px;
331
+ display: flex;
332
+ height: 100%;
333
+ `
334
+
335
+ const Divider = styled.div`
336
+ margin-top: 6px;
337
+ height: calc(100% - 16px);
338
+ width: 1px;
339
+ background-color: ${({ theme }) => theme.colors.grey4};
340
+ `
341
+
342
+ export default {
343
+ name: 'InputNumber',
344
+ components: {
345
+ Container,
346
+ InputContainer,
347
+ InputWrapper,
348
+ UnitContainer,
349
+ ErrorMessage,
350
+ LabelWrapper,
351
+ LabelSlotWrapper,
352
+ LabelText,
353
+ InfoText,
354
+ Icon,
355
+ SlotContainer,
356
+ IconWrapper,
357
+ RCSelect,
358
+ RCOption,
359
+ SelectWrapper,
360
+ SelectText,
361
+ Divider,
362
+ },
363
+ inheritAttrs: false,
364
+ props: {
365
+ placeholder: {
366
+ required: false,
367
+ default: '',
368
+ },
369
+ isError: {
370
+ required: false,
371
+ default: false,
372
+ },
373
+ inputWidth: {
374
+ required: false,
375
+ default: null,
376
+ },
377
+ minWidth: {
378
+ required: false,
379
+ default: null,
380
+ },
381
+ inputHeight: {
382
+ required: false,
383
+ default: '40px',
384
+ },
385
+ value: {
386
+ required: true,
387
+ default: null,
388
+ },
389
+ clearInput: {
390
+ required: false,
391
+ default: false,
392
+ },
393
+ alignItems: {
394
+ required: false,
395
+ default: 'vertical',
396
+ },
397
+ errorMessage: {
398
+ required: false,
399
+ default: 'Please insert a correct number',
400
+ },
401
+ numberPrecision: {
402
+ required: false,
403
+ default: 0,
404
+ },
405
+ minDecimals: {
406
+ required: false,
407
+ default: 0,
408
+ },
409
+ unitName: {
410
+ required: false,
411
+ default: '',
412
+ },
413
+ showLinearUnitName: {
414
+ required: false,
415
+ default: false,
416
+ },
417
+ disabled: {
418
+ required: false,
419
+ default: false,
420
+ },
421
+ noBorder: {
422
+ required: false,
423
+ default: false,
424
+ },
425
+ borderColor: {
426
+ required: false,
427
+ },
428
+ textAlign: {
429
+ required: false,
430
+ default: 'left',
431
+ },
432
+ fontSize: {
433
+ required: false,
434
+ default: '13px',
435
+ },
436
+ isInteractive: {
437
+ required: false,
438
+ default: false,
439
+ },
440
+ interactionStep: {
441
+ required: false,
442
+ default: 1,
443
+ },
444
+ labelText: {
445
+ required: false,
446
+ default: null,
447
+ },
448
+ labelInfoText: {
449
+ required: false,
450
+ default: null,
451
+ },
452
+ labelInfoAlign: {
453
+ required: false,
454
+ default: 'left',
455
+ },
456
+ defaultNumber: {
457
+ required: false,
458
+ default: null,
459
+ },
460
+ minNumber: {
461
+ required: false,
462
+ default: null,
463
+ },
464
+ fontColor: {
465
+ required: false,
466
+ default: null,
467
+ },
468
+ backgroundColor: {
469
+ required: false,
470
+ default: null,
471
+ },
472
+ numberToStringEnabled: {
473
+ required: false,
474
+ default: true,
475
+ },
476
+ allowNegative: {
477
+ required: false,
478
+ default: true,
479
+ },
480
+ slotSize: {
481
+ required: false,
482
+ },
483
+ labelFontColor: {
484
+ required: false,
485
+ default: 'eturnityGrey',
486
+ },
487
+ focus: {
488
+ required: false,
489
+ default: false,
490
+ },
491
+ labelDataId: {
492
+ required: false,
493
+ default: '',
494
+ },
495
+ inputDataId: {
496
+ required: false,
497
+ default: '',
498
+ },
499
+ showSelect: {
500
+ type: Boolean,
501
+ default: false,
502
+ },
503
+ selectWidth: {
504
+ type: Number,
505
+ default: 70,
506
+ },
507
+ selectOptions: {
508
+ type: Array,
509
+ default: () => [],
510
+ },
511
+ selectValue: {
512
+ type: [String, Number],
513
+ default: null,
514
+ },
515
+ isSelectDisabled: {
516
+ type: Boolean,
517
+ default: false,
518
+ },
519
+ },
520
+ data() {
521
+ return {
522
+ textInput: '',
523
+ isFocused: false,
524
+ warningIcon: warningIcon,
525
+ }
526
+ },
527
+ computed: {
528
+ displayedPlaceholder() {
529
+ if (this.placeholder) return this.placeholder
530
+ if (this.defaultNumber)
531
+ return `${this.defaultNumber} ${this.unitName ? this.unitName : ''}`
532
+ return `${this.minNumber || 0} ${this.unitName ? this.unitName : ''}`
533
+ },
534
+ hasSlot() {
535
+ return !!this.$slots.default
536
+ },
537
+ hasLabelSlot() {
538
+ return !!this.$slots.label
539
+ },
540
+ getSelectValue() {
541
+ const item = this.selectOptions.find(
542
+ ({ value }) => value === this.selectValue
543
+ )
544
+
545
+ return item ? item.label : '-'
546
+ },
547
+ },
548
+ watch: {
549
+ focus(value) {
550
+ if (value) {
551
+ this.focusInput()
552
+ }
553
+ },
554
+ clearInput: function (value) {
555
+ if (value) {
556
+ // If the value is typed, then we should clear the textInput on Continue
557
+ this.textInput = ''
558
+ }
559
+ },
560
+ },
561
+ created() {
562
+ if (this.value) {
563
+ this.textInput = numberToString({
564
+ value: this.value,
565
+ numberPrecision: this.numberPrecision,
566
+ minDecimals: this.minDecimals,
567
+ })
568
+ } else if (this.defaultNumber !== null) {
569
+ this.textInput = numberToString({
570
+ value: this.defaultNumber,
571
+ numberPrecision: this.numberPrecision,
572
+ minDecimals: this.minDecimals,
573
+ })
574
+ } else if (this.minNumber !== null) {
575
+ this.textInput = numberToString({
576
+ value: this.minNumber,
577
+ numberPrecision: this.numberPrecision,
578
+ minDecimals: this.minDecimals,
579
+ })
580
+ }
581
+ },
582
+ mounted() {
583
+ if (this.focus) {
584
+ this.focusInput()
585
+ }
586
+ },
587
+ methods: {
588
+ onEnterPress() {
589
+ this.$emit('on-enter-click')
590
+ this.$refs.inputField1.$el.blur()
591
+ },
592
+ onChangeHandler(event) {
593
+ if (isNaN(event) || event === '') {
594
+ event = this.defaultNumber
595
+ ? this.defaultNumber
596
+ : this.minNumber || this.minNumber === 0
597
+ ? this.minNumber
598
+ : event
599
+ }
600
+ if (!this.allowNegative) {
601
+ event = Math.abs(event)
602
+ }
603
+ event = parseFloat(event)
604
+ // Need to return an integer rather than a string
605
+ this.$emit('input-change', event)
606
+ },
607
+ onEvaluateCode(event) {
608
+ // function to perform math on the code
609
+ // filter the string in case of any malicious content
610
+ const val = event.target.value
611
+ let filtered = val.replace('(auto)', '').replace(/[^-()\d/*+.,]/g, '')
612
+ filtered = filtered.split(/([-+*/()])/)
613
+ let formatted = filtered.map((item) => {
614
+ if (
615
+ item === '+' ||
616
+ item === '-' ||
617
+ item === '*' ||
618
+ item === '/' ||
619
+ item === '(' ||
620
+ item === ')' ||
621
+ item === ''
622
+ ) {
623
+ return item
624
+ } else {
625
+ let num = stringToNumber({
626
+ value: item,
627
+ numberPrecision: false,
628
+ minDecimals: this.minDecimals,
629
+ })
630
+ return num
631
+ }
632
+ })
633
+ let evaluated
634
+ formatted = this.removeStringItemsAfterLastNumber(formatted)
635
+ evaluated = eval(formatted.join(' '))
636
+ if (typeof evaluated === 'string') {
637
+ evaluated = stringToNumber({
638
+ value: evaluated,
639
+ numberPrecision: this.numberPrecision,
640
+ minDecimals: this.minDecimals,
641
+ })
642
+ } else if (typeof evaluated === 'number') {
643
+ evaluated = evaluated.toFixed(this.numberPrecision)
644
+ }
645
+ return evaluated
646
+ },
647
+ removeStringItemsAfterLastNumber(array) {
648
+ // fixed in EPDM-6487, in order to prevent 'Unexpected end of input'
649
+ let lastNumberIndex = -1
650
+ // Find the index of the last number in the array
651
+ for (let i = array.length - 1; i >= 0; i--) {
652
+ if (typeof array[i] === 'number') {
653
+ lastNumberIndex = i
654
+ break
655
+ }
656
+ }
657
+ // if there are no numbers, return an empty array
658
+ if (lastNumberIndex === -1) {
659
+ return []
660
+ }
661
+ // Remove non-numeric items after the last number
662
+ if (lastNumberIndex !== -1) {
663
+ const newArray = array.slice(0, lastNumberIndex + 1)
664
+ return newArray
665
+ }
666
+ return array
667
+ },
668
+ onInput(event) {
669
+ if (!this.isFocused) {
670
+ return
671
+ }
672
+ if (event.target.value === '') {
673
+ this.$emit('on-input', '')
674
+ }
675
+ let evaluatedVal
676
+ try {
677
+ evaluatedVal = this.onEvaluateCode(event)
678
+ } finally {
679
+ if (evaluatedVal && this.value != evaluatedVal) {
680
+ this.$emit('on-input', evaluatedVal)
681
+ }
682
+ }
683
+ },
684
+ onInputBlur(e) {
685
+ this.isFocused = false
686
+ let value = e.target.value
687
+ let evaluatedInput = this.onEvaluateCode(e)
688
+ this.onChangeHandler(evaluatedInput ? evaluatedInput : value)
689
+ if ((evaluatedInput && value.length) || this.minNumber !== null) {
690
+ this.textInput = numberToString({
691
+ value:
692
+ evaluatedInput && value.length
693
+ ? evaluatedInput
694
+ : this.defaultNumber
695
+ ? this.defaultNumber
696
+ : this.minNumber,
697
+ numberPrecision: this.numberPrecision,
698
+ minDecimals: this.minDecimals,
699
+ })
700
+ }
701
+ let adjustedMinValue =
702
+ evaluatedInput && evaluatedInput.length
703
+ ? evaluatedInput
704
+ : this.defaultNumber
705
+ ? this.defaultNumber
706
+ : this.minNumber || this.minNumber === 0
707
+ ? this.minNumber
708
+ : ''
709
+ this.$emit('input-blur', adjustedMinValue)
710
+ },
711
+ focusInput() {
712
+ if (this.disabled) {
713
+ return
714
+ }
715
+ this.isFocused = true
716
+ this.$nextTick(() => {
717
+ this.$refs.inputField1.$el.select()
718
+ })
719
+ this.$emit('input-focus')
720
+ },
721
+ blurInput() {
722
+ if (this.disabled) {
723
+ return
724
+ }
725
+ this.isFocused = false
726
+ this.$nextTick(() => {
727
+ this.$refs.inputField1.$el.blur()
728
+ })
729
+ },
730
+ formatWithCurrency(value) {
731
+ let adjustedMinValue =
732
+ value || value === 0
733
+ ? value
734
+ : this.defaultNumber
735
+ ? this.defaultNumber
736
+ : this.minNumber || this.minNumber === 0
737
+ ? this.minNumber
738
+ : ''
739
+ if ((adjustedMinValue || adjustedMinValue === 0) && !this.isFocused) {
740
+ let input = this.numberToStringEnabled
741
+ ? numberToString({
742
+ value: adjustedMinValue,
743
+ numberPrecision: this.numberPrecision,
744
+ minDecimals: this.minDecimals,
745
+ })
746
+ : adjustedMinValue
747
+ let unit = this.showLinearUnitName ? '' : this.unitName
748
+ //return input + ' ' + unit
749
+ return input + ' ' + unit
750
+ } else if (!adjustedMinValue && adjustedMinValue !== 0) {
751
+ return ''
752
+ } else {
753
+ return this.numberToStringEnabled
754
+ ? numberToString({
755
+ value: adjustedMinValue,
756
+ numberPrecision: this.numberPrecision,
757
+ minDecimals: this.minDecimals,
758
+ })
759
+ : adjustedMinValue
760
+ }
761
+ },
762
+ initInteraction(e) {
763
+ this.focusInput()
764
+ e.preventDefault()
765
+ window.addEventListener('mousemove', this.interact, false)
766
+ window.addEventListener('mouseup', this.stopInteract, false)
767
+ },
768
+ interact(e) {
769
+ e.preventDefault()
770
+ let value = parseFloat(this.value || 0)
771
+ value += parseFloat(this.interactionStep) * parseInt(e.movementX)
772
+ this.$emit('on-input-drag', value)
773
+
774
+ this.textInput = numberToString({
775
+ value: value && value.length ? value : this.minNumber,
776
+ numberPrecision: this.numberPrecision,
777
+ minDecimals: this.minDecimals,
778
+ })
779
+ //this.value=value
780
+ },
781
+ stopInteract(e) {
782
+ e.preventDefault()
783
+ window.removeEventListener('mousemove', this.interact, false)
784
+ window.removeEventListener('mouseup', this.stopInteract, false)
785
+ this.blurInput()
786
+ },
787
+ },
788
+ }
789
+ </script>