@configuratorware/configurator-frontendgui 1.27.3-beta.1 → 1.27.3-beta.5

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 (458) hide show
  1. package/App/Constant.js +73 -0
  2. package/App/Error/DevelopmentErrorPage/index.js +74 -0
  3. package/App/Error/ErrorBoundary.js +98 -0
  4. package/App/Error/ProductionErrorPage/Style.scss +47 -0
  5. package/App/Error/ProductionErrorPage/index.js +43 -0
  6. package/App/Error/ProductionErrorPage/index.story.js +13 -0
  7. package/App/Error/ProductionErrorPage/res/error_gears.png +0 -0
  8. package/App/Frame.js +95 -0
  9. package/App/Modules/Creator/Components/ConfigurationvariantItem/Styles.scss +33 -0
  10. package/App/Modules/Creator/Components/ConfigurationvariantItem/index.js +118 -0
  11. package/App/Modules/Creator/Components/ConfigurationvariantSelection/Styles.scss +47 -0
  12. package/App/Modules/Creator/Components/ConfigurationvariantSelection/index.js +130 -0
  13. package/App/Modules/Creator/Components/CustomTitleEditor/Styles.scss +43 -0
  14. package/App/Modules/Creator/Components/CustomTitleEditor/index.js +144 -0
  15. package/App/Modules/Creator/Components/ExternalVisualization/index.js +140 -0
  16. package/App/Modules/Creator/Components/FastConfiguration/SelectableRow.js +128 -0
  17. package/App/Modules/Creator/Components/FastConfiguration/Styles.scss +53 -0
  18. package/App/Modules/Creator/Components/FastConfiguration/index.js +280 -0
  19. package/App/Modules/Creator/Components/FastConfigurationRow/Styles.scss +45 -0
  20. package/App/Modules/Creator/Components/FastConfigurationRow/index.js +78 -0
  21. package/App/Modules/Creator/Components/FastConfigurationSelect/Styles.scss +35 -0
  22. package/App/Modules/Creator/Components/FastConfigurationSelect/index.js +251 -0
  23. package/App/Modules/Creator/Components/FormattedNumber/index.js +45 -0
  24. package/App/Modules/Creator/Components/FormattedPrice/index.js +57 -0
  25. package/App/Modules/Creator/Components/FullScreenView/FullScreenView.js +104 -0
  26. package/App/Modules/Creator/Components/Incompatibility/OptionRule/index.js +182 -0
  27. package/App/Modules/Creator/Components/Incompatibility/RuleComponent.js +88 -0
  28. package/App/Modules/Creator/Components/Incompatibility/index.js +251 -0
  29. package/App/Modules/Creator/Components/InvalidConfigurationNotice/index.js +164 -0
  30. package/App/Modules/Creator/Components/LoginForm/Styles.scss +9 -0
  31. package/App/Modules/Creator/Components/LoginForm/index.js +129 -0
  32. package/App/Modules/Creator/Components/Option/index.js +545 -0
  33. package/App/Modules/Creator/Components/Option/index.story.js +154 -0
  34. package/App/Modules/Creator/Components/OptionAmount/index.js +236 -0
  35. package/App/Modules/Creator/Components/OptionGroup/index.js +55 -0
  36. package/App/Modules/Creator/Components/Optiondetail/ZoomImage/index.js +173 -0
  37. package/App/Modules/Creator/Components/Optiondetail/index.js +497 -0
  38. package/App/Modules/Creator/Components/Optiondetail/index.story.js +117 -0
  39. package/App/Modules/Creator/Components/OptionsList/index.js +193 -0
  40. package/App/Modules/Creator/Components/Price/Styles.scss +3 -0
  41. package/App/Modules/Creator/Components/Price/index.js +79 -0
  42. package/App/Modules/Creator/Components/ProductPart/index.js +185 -0
  43. package/App/Modules/Creator/Components/ProductPart/index.story.js +88 -0
  44. package/App/Modules/Creator/Components/ProductPartsList/index.js +150 -0
  45. package/App/Modules/Creator/Components/ProductPartsList/index.story.js +101 -0
  46. package/App/Modules/Creator/Components/SavedConfiguration/Styles.scss +19 -0
  47. package/App/Modules/Creator/Components/SavedConfiguration/index.js +82 -0
  48. package/App/Modules/Creator/Components/ShareConfiguration/Styles.scss +23 -0
  49. package/App/Modules/Creator/Components/ShareConfiguration/index.js +224 -0
  50. package/App/Modules/Creator/Components/StockInformation/index.js +93 -0
  51. package/App/Modules/Creator/Components/StoreConfigurationForm/Styles.scss +5 -0
  52. package/App/Modules/Creator/Components/StoreConfigurationForm/index.js +123 -0
  53. package/App/Modules/Creator/Components/Tools/Styles.scss +44 -0
  54. package/App/Modules/Creator/Components/Tools/index.js +102 -0
  55. package/App/Modules/Creator/Components/ValidationResult/Styles.scss +45 -0
  56. package/App/Modules/Creator/Components/ValidationResult/index.js +165 -0
  57. package/App/Modules/Creator/Components/index.js +84 -0
  58. package/App/Modules/Creator/Containers/AmountPrice/index.js +26 -0
  59. package/App/Modules/Creator/Containers/ConfigurationvariantSelection/index.js +60 -0
  60. package/App/Modules/Creator/Containers/CustomTitleEditor/index.js +52 -0
  61. package/App/Modules/Creator/Containers/FastConfiguration/index.js +62 -0
  62. package/App/Modules/Creator/Containers/FormattedPrice/index.js +31 -0
  63. package/App/Modules/Creator/Containers/Incompatibility/index.js +40 -0
  64. package/App/Modules/Creator/Containers/InvalidConfigurationNotice/index.js +89 -0
  65. package/App/Modules/Creator/Containers/LoadingOverlay/index.js +26 -0
  66. package/App/Modules/Creator/Containers/Optiondetail/index.js +48 -0
  67. package/App/Modules/Creator/Containers/OptionsList/index.js +49 -0
  68. package/App/Modules/Creator/Containers/ProductPart/index.js +26 -0
  69. package/App/Modules/Creator/Containers/ProductPartsList/index.js +49 -0
  70. package/App/Modules/Creator/Containers/SavedConfigurationContainer/index.js +25 -0
  71. package/App/Modules/Creator/Containers/ShareConfiguration/index.js +42 -0
  72. package/App/Modules/Creator/Containers/StockInformation/index.js +33 -0
  73. package/App/Modules/Creator/Containers/Tools/index.js +44 -0
  74. package/App/Modules/Creator/Containers/ValidationResult/index.js +34 -0
  75. package/App/Modules/Creator/Containers/index.js +175 -0
  76. package/App/Modules/Creator/CreatorScreen.js +307 -0
  77. package/App/Modules/Creator/Layouts/DefaultLayout.js +260 -0
  78. package/App/Modules/Creator/Styles.scss +216 -0
  79. package/App/Modules/Designer/Components/AddGalleryImage/index.js +234 -0
  80. package/App/Modules/Designer/Components/AddGalleryImage/index.story.js +94 -0
  81. package/App/Modules/Designer/Components/AddGalleryImage/index.test.js +151 -0
  82. package/App/Modules/Designer/Components/AddVisualElement/Styles.scss +0 -0
  83. package/App/Modules/Designer/Components/AddVisualElement/index.js +278 -0
  84. package/App/Modules/Designer/Components/AddVisualElement/index.story.js +24 -0
  85. package/App/Modules/Designer/Components/AddVisualElement/index.test.js +47 -0
  86. package/App/Modules/Designer/Components/CloseDesignEditor/index.js +130 -0
  87. package/App/Modules/Designer/Components/CloseGraphicsEditorButton/index.js +54 -0
  88. package/App/Modules/Designer/Components/ColorPalettes/ColorPalettesSearch.js +175 -0
  89. package/App/Modules/Designer/Components/ColorPalettes/index.js +814 -0
  90. package/App/Modules/Designer/Components/ColorPalettes/index.story.js +158 -0
  91. package/App/Modules/Designer/Components/ColorPalettes/index.test.js +150 -0
  92. package/App/Modules/Designer/Components/DesignAreaControlbox/Styles.scss +0 -0
  93. package/App/Modules/Designer/Components/DesignAreaControlbox/index.js +460 -0
  94. package/App/Modules/Designer/Components/DesignAreaControlbox/index.story.js +272 -0
  95. package/App/Modules/Designer/Components/DesignAreaControlbox/index.test.js +164 -0
  96. package/App/Modules/Designer/Components/DesignerSelectionToolbox/CustomFontOverlay.js +162 -0
  97. package/App/Modules/Designer/Components/DesignerSelectionToolbox/DesignerSelectionToolbox.js +425 -0
  98. package/App/Modules/Designer/Components/DesignerSelectionToolbox/fontItemUtils.js +48 -0
  99. package/App/Modules/Designer/Components/Dialog/index.js +125 -0
  100. package/App/Modules/Designer/Components/EditDesignButton/index.js +128 -0
  101. package/App/Modules/Designer/Components/FeedbackNotice/index.js +110 -0
  102. package/App/Modules/Designer/Components/FeedbackNotice/index.test.js +16 -0
  103. package/App/Modules/Designer/Components/FullScreenView/FullScreenView.js +63 -0
  104. package/App/Modules/Designer/Components/ImageColorPicker/ImageColorPicker.dev.js +32 -0
  105. package/App/Modules/Designer/Components/ImageColorPicker/ImageColorPicker.js +430 -0
  106. package/App/Modules/Designer/Components/ImageColorize/index.js +636 -0
  107. package/App/Modules/Designer/Components/ImageColorize/index.story.js +73 -0
  108. package/App/Modules/Designer/Components/ImageControlbox/index.js +302 -0
  109. package/App/Modules/Designer/Components/ImageEditDialog/ImageThumbnail.js +171 -0
  110. package/App/Modules/Designer/Components/ImageEditDialog/ImageUpload.js +478 -0
  111. package/App/Modules/Designer/Components/ImageEditDialog/index.js +716 -0
  112. package/App/Modules/Designer/Components/ImageEditDialog/res/baseline_colorize_black_24dp.png +0 -0
  113. package/App/Modules/Designer/Components/ImageEditDialog/res/checkers_tile.png +0 -0
  114. package/App/Modules/Designer/Components/ImageLibraryFilter/index.js +179 -0
  115. package/App/Modules/Designer/Components/ImageLibraryThumbnail/Styles.scss +14 -0
  116. package/App/Modules/Designer/Components/ImageLibraryThumbnail/index.js +165 -0
  117. package/App/Modules/Designer/Components/ObjectTools/index.js +146 -0
  118. package/App/Modules/Designer/Components/Select/index.js +171 -0
  119. package/App/Modules/Designer/Components/TextControlbox/TextFormatIcon.js +48 -0
  120. package/App/Modules/Designer/Components/TextControlbox/index.js +656 -0
  121. package/App/Modules/Designer/Components/TextControlbox/index.story.js +109 -0
  122. package/App/Modules/Designer/Components/TextControlbox/index.test.js +172 -0
  123. package/App/Modules/Designer/Containers/AddGalleryImage.js +90 -0
  124. package/App/Modules/Designer/Containers/AddVisualElement.js +166 -0
  125. package/App/Modules/Designer/Containers/CloseDesignEditor.js +32 -0
  126. package/App/Modules/Designer/Containers/CloseGraphicsEditorButton.js +32 -0
  127. package/App/Modules/Designer/Containers/ColorPalettes.js +145 -0
  128. package/App/Modules/Designer/Containers/DesignAreaControlbox.js +54 -0
  129. package/App/Modules/Designer/Containers/Designer.js +37 -0
  130. package/App/Modules/Designer/Containers/DesignerSelectionToolbox.js +116 -0
  131. package/App/Modules/Designer/Containers/EditDesignButton.js +35 -0
  132. package/App/Modules/Designer/Containers/ImageEditDialog.js +1130 -0
  133. package/App/Modules/Designer/Designer.js +231 -0
  134. package/App/Modules/Designer/DesignerScreen.js +233 -0
  135. package/App/Modules/Designer/Layouts/DefaultLayout.js +196 -0
  136. package/App/Modules/Designer/Layouts/Mobile/TwoSideBottomBar.js +50 -0
  137. package/App/Modules/Designer/Layouts/PopupAreaProvider.js +186 -0
  138. package/App/Modules/Designer/Utils/FontFaceRepository.js +82 -0
  139. package/App/Modules/Designer/Utils/ImageEditUtils.js +104 -0
  140. package/App/Modules/Designer/Utils/Transformers.js +164 -0
  141. package/App/Modules/Designer/setupDesigner.js +182 -0
  142. package/App/Modules/Designer/withActiveCanvas.js +136 -0
  143. package/App/Modules/Visualization/AlignTargetContainer.js +55 -0
  144. package/App/Modules/Visualization/CreatorAlignTarget.js +41 -0
  145. package/App/Modules/Visualization/DefaultVisualizationProvider.js +105 -0
  146. package/App/Modules/Visualization/DesignerAlignTarget.js +45 -0
  147. package/App/Modules/Visualization/Utils/getFirstDataURLFromScreenshotsObj.js +20 -0
  148. package/App/Reducers/Actions.js +297 -0
  149. package/App/Reducers/ConfigurationMode/Actions.js +21 -0
  150. package/App/Reducers/ConfigurationMode/Reducer.js +80 -0
  151. package/App/Reducers/ConfigurationMode/Selectors.js +84 -0
  152. package/App/Reducers/Configurator/Actions.js +1417 -0
  153. package/App/Reducers/Configurator/AttributeSelectors.js +32 -0
  154. package/App/Reducers/Configurator/Modifiers.js +35 -0
  155. package/App/Reducers/Configurator/Reducer.js +639 -0
  156. package/App/Reducers/Configurator/Selectors.js +242 -0
  157. package/App/Reducers/Confirm/Actions.js +84 -0
  158. package/App/Reducers/Confirm/Reducer.js +30 -0
  159. package/App/Reducers/DesignArea/Actions.js +76 -0
  160. package/App/Reducers/DesignArea/DesignElementSelectors.js +114 -0
  161. package/App/Reducers/DesignArea/MaskSelectors.js +101 -0
  162. package/App/Reducers/DesignArea/Reducer.js +150 -0
  163. package/App/Reducers/DesignArea/Selectors.js +1314 -0
  164. package/App/Reducers/DesignArea/Transformers.js +333 -0
  165. package/App/Reducers/DesignData/Actions.js +232 -0
  166. package/App/Reducers/DesignData/Modifiers.js +328 -0
  167. package/App/Reducers/DesignData/Reducer.js +189 -0
  168. package/App/Reducers/DesignData/Selectors.js +94 -0
  169. package/App/Reducers/DesignData/Transformers.js +27 -0
  170. package/App/Reducers/DesignView/Actions.js +19 -0
  171. package/App/Reducers/DesignView/Reducer.js +165 -0
  172. package/App/Reducers/DesignView/Selectors.js +130 -0
  173. package/App/Reducers/DesignView/Transformers.js +32 -0
  174. package/App/Reducers/Device/Actions.js +16 -0
  175. package/App/Reducers/Device/Reducer.js +51 -0
  176. package/App/Reducers/Fonts/Actions.js +137 -0
  177. package/App/Reducers/Fonts/Reducer.js +39 -0
  178. package/App/Reducers/Fonts/Selectors.js +98 -0
  179. package/App/Reducers/GeneralActions.js +16 -0
  180. package/App/Reducers/ImageGallery/Actions.js +336 -0
  181. package/App/Reducers/ImageGallery/Modifiers.js +67 -0
  182. package/App/Reducers/ImageGallery/Reducer.js +320 -0
  183. package/App/Reducers/ImageGallery/Selectors.js +206 -0
  184. package/App/Reducers/Reducer.js +107 -0
  185. package/App/Reducers/UI/Actions.js +191 -0
  186. package/App/Reducers/UI/Reducer.js +98 -0
  187. package/App/Reducers/UI/Selectors.js +32 -0
  188. package/App/Reducers.js +48 -0
  189. package/App/Routing.js +168 -0
  190. package/App/Screens/Configurator/CalculationWidgetScreen.js +84 -0
  191. package/App/Screens/Configurator/Components/AmountSelection/Styles.scss +17 -0
  192. package/App/Screens/Configurator/Components/AmountSelection/index.js +170 -0
  193. package/App/Screens/Configurator/Components/AmountSelection/index.story.js +36 -0
  194. package/App/Screens/Configurator/Components/CalculationWidget/index.js +652 -0
  195. package/App/Screens/Configurator/Components/CalculationWidget/index.story.js +154 -0
  196. package/App/Screens/Configurator/Components/CalculationWidget/index.test.js +142 -0
  197. package/App/Screens/Configurator/Components/ConfigurationModeSwitch/ConfigurationModeSwitch.js +82 -0
  198. package/App/Screens/Configurator/Components/ConfigurationModeSwitch/index.js +15 -0
  199. package/App/Screens/Configurator/Components/Confirm/Styles.scss +0 -0
  200. package/App/Screens/Configurator/Components/Confirm/index.js +105 -0
  201. package/App/Screens/Configurator/Components/DesignApproval/index.js +76 -0
  202. package/App/Screens/Configurator/Components/DesignApproval/index.story.js +27 -0
  203. package/App/Screens/Configurator/Components/DesignApproval/index.test.js +31 -0
  204. package/App/Screens/Configurator/Components/Error/index.js +106 -0
  205. package/App/Screens/Configurator/Components/FallbackVisualization/FallbackVisualization.js +96 -0
  206. package/App/Screens/Configurator/Components/FileUpload/FileUploadBase.js +1 -0
  207. package/App/Screens/Configurator/Components/FullScreenView/index.js +303 -0
  208. package/App/Screens/Configurator/Components/FullScreenView/index.test.js +28 -0
  209. package/App/Screens/Configurator/Components/ImageLoader/ImageLoader.js +96 -0
  210. package/App/Screens/Configurator/Components/LandscapeInformation/index.js +75 -0
  211. package/App/Screens/Configurator/Components/NoVisualization/NoVisualization.js +35 -0
  212. package/App/Screens/Configurator/Components/PreviewPortal/index.js +246 -0
  213. package/App/Screens/Configurator/Components/Styles.scss +1 -0
  214. package/App/Screens/Configurator/Components/Thumbnail/index.js +394 -0
  215. package/App/Screens/Configurator/Components/Thumbnail/index.test.js +50 -0
  216. package/App/Screens/Configurator/Components/TotalPrice/TotalPrice.js +57 -0
  217. package/App/Screens/Configurator/Containers/AmountPrice.js +84 -0
  218. package/App/Screens/Configurator/Containers/CalculationWidget.js +278 -0
  219. package/App/Screens/Configurator/Containers/ConfigurationModeSwitch.js +81 -0
  220. package/App/Screens/Configurator/Containers/Confirm.js +37 -0
  221. package/App/Screens/Configurator/Containers/DesignApproval.js +129 -0
  222. package/App/Screens/Configurator/Containers/FallbackVisualization.js +32 -0
  223. package/App/Screens/Configurator/Containers/FullScreenView.js +46 -0
  224. package/App/Screens/Configurator/Containers/Thumbnail.js +41 -0
  225. package/App/Screens/Configurator/Containers/Visualization.js +13 -0
  226. package/App/Screens/Configurator/DesignerUI.js +215 -0
  227. package/App/Screens/Configurator/DynamicComponents.js +40 -0
  228. package/App/Screens/Configurator/Screen.js +236 -0
  229. package/App/Screens/Configurator/ScreenPropTypes.js +45 -0
  230. package/App/Screens/Configurator/ThemeProvider.js +298 -0
  231. package/App/Screens/DesignerProductPreview/Constants.js +12 -0
  232. package/App/Screens/DesignerProductPreview/DesignerProductPreviewManager.js +554 -0
  233. package/App/Screens/DesignerProductPreview/Screen.js +407 -0
  234. package/App/Screens.js +42 -0
  235. package/App/ServiceLocator.js +309 -0
  236. package/App/Services/AdminareaCommunicationService.js +149 -0
  237. package/App/Services/AnalyticsService.js +403 -0
  238. package/App/Services/ConfiguratorService.js +1122 -0
  239. package/App/Services/DesignDataService.js +3249 -0
  240. package/App/Services/DesignerService.js +496 -0
  241. package/App/Services/InteractionService.js +782 -0
  242. package/App/Services/UIService.js +129 -0
  243. package/App/Services/VisualizationService.js +842 -0
  244. package/App/Shared/Components/AcceptDesign/index.js +166 -0
  245. package/App/Shared/Components/AddToBasket/index.js +194 -0
  246. package/App/Shared/Components/AddToBasket/index.story.js +47 -0
  247. package/App/Shared/Components/AlertDialog/index.js +138 -0
  248. package/App/Shared/Components/AmountInput/Styles.scss +6 -0
  249. package/App/Shared/Components/AmountInput/index.js +296 -0
  250. package/App/Shared/Components/AmountInput/index.story.js +29 -0
  251. package/App/Shared/Components/AmountPrice/index.js +925 -0
  252. package/App/Shared/Components/AmountPrice/index.story.js +112 -0
  253. package/App/Shared/Components/AmountPrice/index.test.js +125 -0
  254. package/App/Shared/Components/Analytics/AnalyticsWrapper.js +49 -0
  255. package/App/Shared/Components/BulkNames/index.js +319 -0
  256. package/App/Shared/Components/CallToAction/index.js +220 -0
  257. package/App/Shared/Components/Header/Header.js +150 -0
  258. package/App/Shared/Components/Header/index.js +15 -0
  259. package/App/Shared/Components/Header/index.story.js +143 -0
  260. package/App/Shared/Components/InformationTag/InformationTag.js +155 -0
  261. package/App/Shared/Components/LicenseNotice/LicenseNotice.js +148 -0
  262. package/App/Shared/Components/LicenseNotice/index.js +15 -0
  263. package/App/Shared/Components/LoadConfiguration/index.js +218 -0
  264. package/App/Shared/Components/MessageBox/index.js +84 -0
  265. package/App/Shared/Components/MessageBox/index.story.js +49 -0
  266. package/App/Shared/Components/Notification/index.js +105 -0
  267. package/App/Shared/Components/Notification/index.story.js +55 -0
  268. package/App/Shared/Components/PdfDownload/index.js +150 -0
  269. package/App/Shared/Components/PlusMinusInput/index.js +118 -0
  270. package/App/Shared/Components/PriceList/index.js +237 -0
  271. package/App/Shared/Components/PriceList/index.story.js +114 -0
  272. package/App/Shared/Components/PriceOverview/index.js +177 -0
  273. package/App/Shared/Components/PriceOverview/index.story.js +215 -0
  274. package/App/Shared/Components/ProductVariant/Image.js +75 -0
  275. package/App/Shared/Components/ProductVariant/Styles.scss +11 -0
  276. package/App/Shared/Components/ProductVariant/index.js +477 -0
  277. package/App/Shared/Components/ProductVariant/index.story.js +283 -0
  278. package/App/Shared/Components/Progress/Progress.js +59 -0
  279. package/App/Shared/Components/ReceiveOfferForm/index.js +432 -0
  280. package/App/Shared/Components/ReceiveOfferForm/index.story.js +32 -0
  281. package/App/Shared/Components/ReceiveOfferForm/index.test.js +36 -0
  282. package/App/Shared/Components/SaveConfiguration/index.js +286 -0
  283. package/App/Shared/Components/SendEmail/index.js +103 -0
  284. package/App/Shared/Components/Stepper/index.js +136 -0
  285. package/App/Shared/Components/Stepper/index.story.js +38 -0
  286. package/App/Shared/Components/ToolbarList/index.js +231 -0
  287. package/App/Shared/Components/ToolbarList/index.story.js +33 -0
  288. package/App/Shared/Components/VariantChooser/index.js +270 -0
  289. package/App/Shared/Components/VariantChooser/index.story.js +100 -0
  290. package/App/Shared/Containers/AlertMessages.js +37 -0
  291. package/App/Shared/Containers/AmountPrice/AmountPriceAdminareaWrapper.js +40 -0
  292. package/App/Shared/Containers/AmountPrice/index.js +284 -0
  293. package/App/Shared/Containers/BulkNames.js +310 -0
  294. package/App/Shared/Containers/Error.js +37 -0
  295. package/App/Shared/Containers/GlobalLoader.js +25 -0
  296. package/App/Shared/Containers/Header/index.js +178 -0
  297. package/App/Shared/Containers/LicenseNotice/LicenseNotice.js +26 -0
  298. package/App/Shared/Containers/LicenseNotice/index.js +15 -0
  299. package/App/Shared/Containers/LoadConfiguration/LoadConfiguration.js +146 -0
  300. package/App/Shared/Containers/LoadConfiguration/index.js +15 -0
  301. package/App/Shared/Containers/PdfDownload/index.js +39 -0
  302. package/App/Shared/Containers/ProductVariant/ProductVariant.js +339 -0
  303. package/App/Shared/Containers/ProductVariant/index.js +15 -0
  304. package/App/Shared/Containers/SaveConfiguration.js +49 -0
  305. package/App/Shared/Containers/SendEmail/SendEmail.js +45 -0
  306. package/App/Shared/Containers/SendEmail/index.js +15 -0
  307. package/App/Shared/Providers/DefaultCanvasProvider.js +86 -0
  308. package/App/Storage.js +17 -0
  309. package/App/Store.js +87 -0
  310. package/App/Styles.scss +0 -0
  311. package/App/Translations.js +88 -0
  312. package/App/Utils/createMessageInterface.js +52 -0
  313. package/App/Utils/customClassName.js +12 -0
  314. package/App/Utils/getContrastText.js +27 -0
  315. package/App/Utils/getImageUrl.js +32 -0
  316. package/App/Variables.scss +84 -0
  317. package/App/configuration.js +421 -0
  318. package/App/index.js +52 -0
  319. package/App/initServices.js +67 -0
  320. package/App/setup.js +22 -0
  321. package/App/versionInfo.js +8 -0
  322. package/Framework/Api.js +178 -0
  323. package/Framework/ComponentContainer.js +165 -0
  324. package/Framework/Components/Carousel/Styles.scss +85 -0
  325. package/Framework/Components/Carousel/index.js +322 -0
  326. package/Framework/Components/Dialog/Style.scss +79 -0
  327. package/Framework/Components/Dialog/index.js +721 -0
  328. package/Framework/Components/DialogSelect/Styles.scss +53 -0
  329. package/Framework/Components/DialogSelect/index.js +331 -0
  330. package/Framework/Components/Input/index.js +147 -0
  331. package/Framework/Components/LoadingOverlay/Styles.scss +37 -0
  332. package/Framework/Components/LoadingOverlay/index.js +33 -0
  333. package/Framework/Components/Markdown/index.js +62 -0
  334. package/Framework/Components/Mobile/index.js +33 -0
  335. package/Framework/CustomError.js +51 -0
  336. package/Framework/Helpers/TransitionDetect.js +116 -0
  337. package/Framework/Helpers/isLandscapeMobile.js +14 -0
  338. package/Framework/Helpers/isMobileDevice.js +17 -0
  339. package/Framework/Helpers/isMobileSize.js +13 -0
  340. package/Framework/Mixins.scss +235 -0
  341. package/Framework/Services/AbstractAdminareaCommunicationService.js +48 -0
  342. package/Framework/Services/AbstractAsyncService.js +44 -0
  343. package/Framework/Services/AbstractConfiguratorService.js +47 -0
  344. package/Framework/Services/AbstractInteractionService.js +50 -0
  345. package/Framework/Services/AbstractStoreService.js +42 -0
  346. package/Framework/Services/AbstractUIService.js +53 -0
  347. package/Framework/Services/AbstractVisualizationService.js +47 -0
  348. package/Framework/Services/AsyncService.js +93 -0
  349. package/Framework/Services/StoreService.js +237 -0
  350. package/Framework/Variables.scss +22 -0
  351. package/Framework/bindDecorator.js +173 -0
  352. package/Framework/i18n.js +383 -0
  353. package/README.md +5 -26
  354. package/Resources/Icons/MaterialUI/Icons/AddCircle.js +13 -0
  355. package/Resources/Icons/MaterialUI/Icons/RemoveCircle.js +13 -0
  356. package/Resources/Icons/MaterialUI/fontFace.scss +37 -0
  357. package/Resources/Icons/MaterialUI/fonts/MaterialIcons-Regular.eot +0 -0
  358. package/Resources/Icons/MaterialUI/fonts/MaterialIcons-Regular.svg +2373 -0
  359. package/Resources/Icons/MaterialUI/fonts/MaterialIcons-Regular.ttf +0 -0
  360. package/Resources/Icons/MaterialUI/fonts/MaterialIcons-Regular.woff +0 -0
  361. package/Resources/Icons/MaterialUI/fonts/MaterialIcons-Regular.woff2 +0 -0
  362. package/Resources/Icons/fonts/ionicons.eot +0 -0
  363. package/Resources/Icons/fonts/ionicons.svg +2230 -0
  364. package/Resources/Icons/fonts/ionicons.ttf +0 -0
  365. package/Resources/Icons/fonts/ionicons.woff +0 -0
  366. package/Resources/Icons/ionicons.scss +1489 -0
  367. package/Resources/Icons/ioniconsExtend.scss +1469 -0
  368. package/Resources/Icons/v4/fontFace.scss +11 -0
  369. package/Resources/Icons/v4/fonts/ionicons.eot +0 -0
  370. package/Resources/Icons/v4/fonts/ionicons.svg +2090 -0
  371. package/Resources/Icons/v4/fonts/ionicons.ttf +0 -0
  372. package/Resources/Icons/v4/fonts/ionicons.woff +0 -0
  373. package/Resources/Icons/v4/fonts/ionicons.woff2 +0 -0
  374. package/Resources/Icons/v4/icons.scss +15 -0
  375. package/Resources/Icons/v4/iconsExtend.scss +7 -0
  376. package/Resources/Images/designer_placeholder_logo.svg +1 -0
  377. package/Resources/Masks/circle.svg +4 -0
  378. package/Shared/Components/CustomDialog.js +132 -0
  379. package/Shared/Components/CustomDialogSelect.js +161 -0
  380. package/Shared/Components/MainButton.js +81 -0
  381. package/Shared/ErrorTypes/DeferredError.js +51 -0
  382. package/Shared/HOCs/ResizeDetect/ResizeDetect.dev.js +60 -0
  383. package/Shared/HOCs/ResizeDetect/ResizeDetect.js +217 -0
  384. package/Shared/HOCs/getDisplayName.js +10 -0
  385. package/Shared/HOCs/withFixedChangeHandler.js +46 -0
  386. package/Shared/PropTypes/ReactComponent.js +13 -0
  387. package/Shared/Styles/absoluteCenter.js +17 -0
  388. package/Utils/Array/isIdentical.js +38 -0
  389. package/Utils/Async/AsyncManager.js +128 -0
  390. package/Utils/Async/Deferred.js +146 -0
  391. package/Utils/Async/ObjectLock.js +38 -0
  392. package/Utils/Decorators/Observable.js +130 -0
  393. package/Utils/Dev/HOCs/withFilePicker.js +101 -0
  394. package/Utils/Dev/isDev.js +21 -0
  395. package/Utils/Events/pointerEvent.js +199 -0
  396. package/Utils/Events/preventEventDoubling.js +23 -0
  397. package/Utils/Function/cached.js +64 -0
  398. package/Utils/Function/createDebounceManager.js +77 -0
  399. package/Utils/Function/createSelector.js +62 -0
  400. package/Utils/Function/memoize.js +46 -0
  401. package/Utils/Function/sendMessage.js +22 -0
  402. package/Utils/Helper/createSelectionRangeMemo.js +45 -0
  403. package/Utils/Immutable/set.js +81 -0
  404. package/Utils/Math/conversions.js +13 -0
  405. package/Utils/Math/isPositiveNumber.js +12 -0
  406. package/Utils/Redux/createActionWithGlobalState.js +23 -0
  407. package/Utils/Styles/combineMediaQueries.js +24 -0
  408. package/Utils/Styles/createCheckerBoardBackground.js +22 -0
  409. package/Utils/Test/CallOrderChecker.js +29 -0
  410. package/Utils/Test/createStoreProvider.js +33 -0
  411. package/Utils/Test/formDataToJSON.js +20 -0
  412. package/Utils/Test/mountWithState.js +40 -0
  413. package/index.js +8 -0
  414. package/package.json +20 -102
  415. package/scripts/cpPublic.js +3 -3
  416. package/scripts/getDefaultWebpackConfig.js +11 -10
  417. package/src/App/Error/ProductionErrorPage/Style.scss +1 -1
  418. package/src/App/Modules/Creator/Components/Option/index.js +1 -0
  419. package/src/App/Modules/Creator/Components/Option/index.test.js +1 -1
  420. package/src/App/Modules/Creator/Components/OptionAmount/index.test.js +1 -1
  421. package/src/App/Modules/Creator/Components/ProductPart/index.js +1 -0
  422. package/src/App/Modules/Creator/Components/ProductPart/index.test.js +1 -1
  423. package/src/App/Modules/Designer/Components/AddGalleryImage/index.story.js +1 -1
  424. package/src/App/Modules/Designer/Components/ColorPalettes/index.test.jsx +1 -1
  425. package/src/App/Modules/Designer/Components/DesignAreaControlbox/index.test.jsx +1 -1
  426. package/src/App/Modules/Designer/Components/TextControlbox/index.test.jsx +1 -1
  427. package/src/App/Reducers/Configurator/Actions.js +13 -3
  428. package/src/App/Reducers/DesignArea/Selectors.js +9 -7
  429. package/src/App/Reducers/DesignView/Actions.js +1 -2
  430. package/src/App/Reducers/DesignView/Reducer.js +2 -10
  431. package/src/App/Reducers/DesignView/__mocks__/designerViewData.js +0 -1
  432. package/src/App/Reducers/DesignView/__tests__/Reducer.test.js +0 -22
  433. package/src/App/Reducers/ImageGallery/Actions.js +1 -1
  434. package/src/App/Reducers/UI/Actions.js +8 -0
  435. package/src/App/Reducers/UI/Reducer.js +3 -1
  436. package/src/App/Screens/Configurator/Components/CalculationWidget/index.test.jsx +1 -1
  437. package/src/App/Screens/Configurator/Components/DesignApproval/index.test.jsx +1 -1
  438. package/src/App/Screens/Configurator/Components/FullScreenView/index.test.jsx +1 -1
  439. package/src/App/Screens/Configurator/Containers/AmountPrice.js +1 -1
  440. package/src/App/Screens/Configurator/Containers/Confirm.js +1 -1
  441. package/src/App/Screens/Configurator/Screen.js +1 -1
  442. package/src/App/Screens/Configurator/ThemeProvider.js +1 -0
  443. package/src/App/Services/__tests__/DesignDataService.selectViewForComponent.test.js +0 -53
  444. package/src/App/Shared/Containers/AlertMessages.js +1 -1
  445. package/src/App/Shared/Containers/AmountPrice/index.test.js +1 -1
  446. package/src/App/Shared/Containers/Error.js +1 -1
  447. package/src/App/Shared/Containers/SaveConfiguration.js +1 -1
  448. package/src/App/Translations.js +1 -1
  449. package/src/Framework/Components/Carousel/index.js +29 -8
  450. package/src/Framework/i18n.js +2 -3
  451. package/babel.config.js +0 -46
  452. package/public/ConfigurationMessagingDemo.html +0 -55
  453. package/scripts/cpPath.js +0 -135
  454. package/scripts/moveLibToPackageRoot.js +0 -40
  455. package/scripts/rmDir.js +0 -29
  456. package/scripts/updateLocalPackages.js +0 -68
  457. package/scripts/utils/process.js +0 -19
  458. package/tsconfig.json +0 -22
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.AmountPriceAdminareaWrapper = void 0;
7
+
8
+ var _react = _interopRequireDefault(require("react"));
9
+
10
+ var _reactRedux = require("react-redux");
11
+
12
+ var _configuration = require("../../../configuration");
13
+
14
+ var _Selectors = require("../../../Reducers/ConfigurationMode/Selectors");
15
+
16
+ var _excluded = ["AmountPriceComponent"];
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
19
+
20
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
21
+
22
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
23
+
24
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
25
+
26
+ var AmountPriceAdminareaWrapper = function AmountPriceAdminareaWrapper(_ref) {
27
+ var AmountPriceComponent = _ref.AmountPriceComponent,
28
+ props = _objectWithoutProperties(_ref, _excluded);
29
+
30
+ var configurationModeSwitchAvailable = (0, _reactRedux.useSelector)(_Selectors.isConfigurationModeSwitchAvailable);
31
+ var adminMode = (0, _configuration.getConf)('adminMode');
32
+ var extraProps = adminMode ? {
33
+ hidePieces: true,
34
+ hidePrices: true,
35
+ showCallToAction: false
36
+ } : {};
37
+ return (!adminMode || configurationModeSwitchAvailable) && /*#__PURE__*/_react["default"].createElement(AmountPriceComponent, _extends({}, props, extraProps)) || null;
38
+ };
39
+
40
+ exports.AmountPriceAdminareaWrapper = AmountPriceAdminareaWrapper;
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.showProductVariantsForItem = exports["default"] = exports.createPricePropsFromState = exports.createBulkNameErrors = exports.createAmountPropsFromState = void 0;
7
+
8
+ var _get = _interopRequireDefault(require("lodash/get"));
9
+
10
+ var _isArray = _interopRequireDefault(require("lodash/isArray"));
11
+
12
+ var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject"));
13
+
14
+ var _upperFirst = _interopRequireDefault(require("lodash/upperFirst"));
15
+
16
+ var _uniqBy = _interopRequireDefault(require("lodash/uniqBy"));
17
+
18
+ var _ComponentContainer = require("../../../../Framework/ComponentContainer");
19
+
20
+ var _i18n = require("../../../../Framework/i18n");
21
+
22
+ var _ServiceLocator = require("../../../ServiceLocator");
23
+
24
+ var _createSelector = _interopRequireDefault(require("../../../../Utils/Function/createSelector"));
25
+
26
+ var _Selectors = require("../../../Reducers/Configurator/Selectors");
27
+
28
+ var _Selectors2 = require("../../../Reducers/UI/Selectors");
29
+
30
+ var _configuration = require("../../../configuration");
31
+
32
+ var _Selectors3 = require("../../../Reducers/DesignArea/Selectors");
33
+
34
+ var _AmountPrice = _interopRequireDefault(require("../../Components/AmountPrice"));
35
+
36
+ var _AmountPriceAdminareaWrapper = require("./AmountPriceAdminareaWrapper");
37
+
38
+ var _Selectors4 = require("../../../Reducers/ConfigurationMode/Selectors");
39
+
40
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
41
+
42
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
43
+
44
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
45
+
46
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
47
+
48
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
49
+
50
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
51
+
52
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
53
+
54
+ var showProductVariantsForItem = (0, _createSelector["default"])(_Selectors.getItem, function (item) {
55
+ return (0, _Selectors.findMaxChildrenCount)(item) > 1;
56
+ });
57
+ exports.showProductVariantsForItem = showProductVariantsForItem;
58
+ var createAmountPropsFromState = (0, _createSelector["default"])(_Selectors.getItem, _Selectors.getSelectedAmounts, _Selectors.getClient, _Selectors.getBulkNames, function (item, selectedAmounts, client) {
59
+ var query = new URLSearchParams(location.search);
60
+ var props = {
61
+ title: item && item.title,
62
+ amount: 0,
63
+ hidePrices: query.has('_hide_prices') ? query.get('_hide_prices') === '1' : client && !!client.hidePrices
64
+ };
65
+
66
+ if ((0, _isPlainObject["default"])(selectedAmounts)) {
67
+ props.amount = Object.values(selectedAmounts).reduce(function (sum, amount) {
68
+ return sum + amount;
69
+ }, 0);
70
+ }
71
+
72
+ return props;
73
+ });
74
+ exports.createAmountPropsFromState = createAmountPropsFromState;
75
+ var createBulkNameErrors = (0, _createSelector["default"])(_Selectors.getItem, _Selectors.getSelectedAmounts, _Selectors.getBulkNames, function (item, selectedAmounts, bulkNames) {
76
+ var bulkNameErrors = [];
77
+ var children = (0, _get["default"])(item, 'itemGroup.children', []);
78
+
79
+ var _iterator = _createForOfIteratorHelper(children),
80
+ _step;
81
+
82
+ try {
83
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
84
+ var childItem = _step.value;
85
+
86
+ if (childItem.itemGroup && childItem.itemGroup.identifier === 'size') {
87
+ var _iterator2 = _createForOfIteratorHelper(childItem.itemGroup.children),
88
+ _step2;
89
+
90
+ try {
91
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
92
+ var sizeChildItem = _step2.value;
93
+ var selectedAmount = (0, _get["default"])(selectedAmounts, sizeChildItem.identifier, 0);
94
+ var childBulkNames = (0, _get["default"])(bulkNames, sizeChildItem.identifier, []);
95
+
96
+ if (selectedAmount > 0 && childBulkNames.length !== selectedAmount) {
97
+ bulkNameErrors.push((0, _i18n.t)('receiveOfferForm.checkBulkNamesInputs', {
98
+ item: item.title + ' / ' + (0, _upperFirst["default"])(childItem.itemgroupentryTitle) + ' / ' + sizeChildItem.itemgroupentryTitle
99
+ }));
100
+ }
101
+ }
102
+ } catch (err) {
103
+ _iterator2.e(err);
104
+ } finally {
105
+ _iterator2.f();
106
+ }
107
+ } else {
108
+ var _selectedAmount = (0, _get["default"])(selectedAmounts, childItem.identifier, 0);
109
+
110
+ var _childBulkNames = (0, _get["default"])(bulkNames, childItem.identifier, []);
111
+
112
+ if (_selectedAmount > 0 && _childBulkNames.length !== _selectedAmount) {
113
+ bulkNameErrors.push((0, _i18n.t)('receiveOfferForm.checkBulkNamesInputs', {
114
+ item: item.title + ' / ' + (0, _upperFirst["default"])(childItem.itemgroupentryTitle)
115
+ }));
116
+ }
117
+ }
118
+ }
119
+ } catch (err) {
120
+ _iterator.e(err);
121
+ } finally {
122
+ _iterator.f();
123
+ }
124
+
125
+ return bulkNameErrors;
126
+ });
127
+ exports.createBulkNameErrors = createBulkNameErrors;
128
+ var createPricePropsFromState = (0, _createSelector["default"])(_Selectors.getCalculation, _Selectors.getUserSelectedCalculation, function (calculation, userSelectedCalculation) {
129
+ var displayNetPrices = (0, _configuration.getConf)('displayNetPrices', false);
130
+ var props = {
131
+ priceList: [],
132
+ priceFormatted: displayNetPrices ? (0, _get["default"])(calculation, 'netTotalFormatted', '') : (0, _get["default"])(calculation, 'totalFormatted', ''),
133
+ error: null,
134
+ bulkSavings: [],
135
+ notifications: []
136
+ };
137
+ var positions = (0, _get["default"])(calculation, 'positions');
138
+
139
+ if ((0, _isArray["default"])(positions)) {
140
+ props.priceList = positions.map(function (p) {
141
+ return {
142
+ key: p.calculationTypeIdentifier,
143
+ selectable: p.selectableByUser,
144
+ selected: (0, _get["default"])(userSelectedCalculation, p.calculationTypeIdentifier, false),
145
+ label: p.title || (0, _i18n.t)("calculationTypes.".concat(p.calculationTypeIdentifier)),
146
+ price: displayNetPrices ? p.priceNetFormatted : p.priceFormatted
147
+ };
148
+ });
149
+ }
150
+
151
+ var bulkSavings = (0, _get["default"])(calculation, 'bulkSavings');
152
+
153
+ if ((0, _isArray["default"])(bulkSavings)) {
154
+ props.bulkSavings = bulkSavings.map(function (b) {
155
+ return {
156
+ key: b.itemIdentifier,
157
+ itemTitle: b.itemTitle,
158
+ savingsBulkAmount: b.savingsBulkAmount,
159
+ savingAmount: b.savingAmount
160
+ };
161
+ });
162
+ }
163
+
164
+ if (calculation && calculation.success === false) {
165
+ props.error = {
166
+ code: calculation.code,
167
+ errors: calculation.errors
168
+ };
169
+ }
170
+
171
+ if (props.error && props.error.errors.length) {
172
+ var uniqErrors = (0, _uniqBy["default"])(props.error.errors, 'itemIdentifier');
173
+
174
+ var _iterator3 = _createForOfIteratorHelper(uniqErrors),
175
+ _step3;
176
+
177
+ try {
178
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
179
+ var fieldError = _step3.value;
180
+ props.notifications.push({
181
+ message: (0, _i18n.t)('amountPrice.minimumAmountError', {
182
+ minimumAmount: fieldError.minimumAmount,
183
+ itemTitle: fieldError.itemTitle,
184
+ selectedAmount: fieldError.selectedAmount
185
+ }),
186
+ level: 'error',
187
+ color: 'error'
188
+ });
189
+ }
190
+ } catch (err) {
191
+ _iterator3.e(err);
192
+ } finally {
193
+ _iterator3.f();
194
+ }
195
+ }
196
+
197
+ props.bulkSavings.length > 0 && props.bulkSavings.map(function (bulkSaving) {
198
+ props.notifications.push({
199
+ message: (0, _i18n.t)('amountPrice.bulkSavings', {
200
+ itemTitle: bulkSaving.itemTitle,
201
+ savingsBulkAmount: bulkSaving.savingsBulkAmount,
202
+ savingAmount: bulkSaving.savingAmount
203
+ }),
204
+ level: 'info',
205
+ color: 'default'
206
+ });
207
+ });
208
+ return props;
209
+ });
210
+ exports.createPricePropsFromState = createPricePropsFromState;
211
+
212
+ var mapStateToProps = function mapStateToProps(_ref) {
213
+ var configurator = _ref.configurator,
214
+ configurationMode = _ref.configurationMode,
215
+ ui = _ref.ui;
216
+ var priceProps = createPricePropsFromState(configurator);
217
+
218
+ var _getAvailableConfigur = (0, _Selectors4.getAvailableConfigurationModes)({
219
+ configurationMode: configurationMode
220
+ }),
221
+ designerAvailable = _getAvailableConfigur.designer;
222
+
223
+ if (!designerAvailable) {
224
+ // remove user selectable designer global calculation post from priceList for only creator Product
225
+ priceProps = _objectSpread(_objectSpread({}, priceProps), {}, {
226
+ priceList: priceProps.priceList.filter(function (listItem) {
227
+ return !listItem.key.startsWith('global') && listItem.selectableByUser === true;
228
+ })
229
+ });
230
+ }
231
+
232
+ var query = new URLSearchParams(location.search);
233
+ return _objectSpread(_objectSpread(_objectSpread({
234
+ Component: _AmountPriceAdminareaWrapper.AmountPriceAdminareaWrapper,
235
+ AmountPriceComponent: _AmountPrice["default"],
236
+ vatNotice: !(0, _configuration.getConf)('displayNetPrices', false) ? (0, _i18n.t)('amountPrice.vatNotice') : (0, _i18n.t)('amountPrice.vatNoticeNet'),
237
+ boxed: true,
238
+ showProductVariants: true,
239
+ showReceiveOfferForm: query.has('_cta_element') ? query.get('_cta_element') === 'requestOffer' : (0, _Selectors.showReceiveOfferForm)(configurator),
240
+ showCallToAction: query.has('_cta_element') ? query.get('_cta_element') !== 'none' : (0, _Selectors.showCallToAction)(configurator),
241
+ displayAcceptDesign: !designerAvailable ? false : (0, _configuration.getConf)('displayAcceptDesign', true),
242
+ isBulkNamesSelected: (0, _Selectors3.isBulkNamesSelected)(configurator),
243
+ bulkNameErrors: (0, _Selectors3.isBulkNamesSelected)(configurator) ? createBulkNameErrors(configurator) : null
244
+ }, createAmountPropsFromState(configurator)), priceProps), {}, {
245
+ clientTexts: (0, _Selectors.getClientTexts)(configurator),
246
+ addToCartPopUpLoader: (0, _Selectors2.getVisibilityMapProperty)(ui, 'addToCartPopUpLoader'),
247
+ userComment: (0, _get["default"])(configurator, 'configuration.customdata.comment', '')
248
+ });
249
+ };
250
+
251
+ var mapDispatchToProps = function mapDispatchToProps() {
252
+ return {
253
+ onSelectableChanged: function onSelectableChanged(identifier, value) {
254
+ return _ServiceLocator.Services.configurator.setSelectedCalculation(identifier, value);
255
+ },
256
+ onClose: function onClose() {
257
+ _ServiceLocator.Services.configurator.resolveCalculationErrors();
258
+
259
+ _ServiceLocator.Services.visualization.abortScreenshotting();
260
+ },
261
+ onChangeAmount: function onChangeAmount(amount) {
262
+ return _ServiceLocator.Services.configurator.setSelectedAmount(false, amount);
263
+ },
264
+ sendReceiveOfferRequest: function sendReceiveOfferRequest(data) {
265
+ return _ServiceLocator.Services.interaction.sendReceiveOfferRequest(data);
266
+ },
267
+ setConfigurationComment: function setConfigurationComment(notice) {
268
+ return _ServiceLocator.Services.configurator.setConfigurationComment(notice);
269
+ },
270
+ onAddToBasket: function onAddToBasket() {
271
+ return _ServiceLocator.Services.interaction.addToCart();
272
+ },
273
+ onShowChange: function onShowChange(on) {
274
+ return _ServiceLocator.Services.configurator.setCalculationAutoResolveEnabled(!on);
275
+ },
276
+ validateConfiguration: function validateConfiguration() {
277
+ return (0, _configuration.getConf)('validateBeforeCTA') && _ServiceLocator.Services.configurator.validateConfiguration();
278
+ }
279
+ };
280
+ };
281
+
282
+ var _default = (0, _ComponentContainer.containerConnect)(mapStateToProps, mapDispatchToProps);
283
+
284
+ exports["default"] = _default;
@@ -0,0 +1,310 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _propTypes = _interopRequireDefault(require("prop-types"));
13
+
14
+ var _ComponentContainer = require("../../../Framework/ComponentContainer");
15
+
16
+ var _BulkNames = _interopRequireDefault(require("../Components/BulkNames"));
17
+
18
+ var _find = _interopRequireDefault(require("lodash/find"));
19
+
20
+ var _sumBy = _interopRequireDefault(require("lodash/sumBy"));
21
+
22
+ var _flatten = _interopRequireDefault(require("lodash/flatten"));
23
+
24
+ var _get = _interopRequireDefault(require("lodash/get"));
25
+
26
+ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
27
+
28
+ var _excluded = ["BulkNamesComponent", "activeSizeVariant"];
29
+
30
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
31
+
32
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
33
+
34
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
35
+
36
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
37
+
38
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
39
+
40
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
41
+
42
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
43
+
44
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
45
+
46
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
47
+
48
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
49
+
50
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
51
+
52
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
53
+
54
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
55
+
56
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
57
+
58
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
59
+
60
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
61
+
62
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
63
+
64
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
65
+
66
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
67
+
68
+ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
69
+
70
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
71
+
72
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
73
+
74
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
75
+
76
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
77
+
78
+ var BulkNamesContainer = /*#__PURE__*/function (_React$Component) {
79
+ _inherits(BulkNamesContainer, _React$Component);
80
+
81
+ var _super = _createSuper(BulkNamesContainer);
82
+
83
+ function BulkNamesContainer() {
84
+ var _this;
85
+
86
+ _classCallCheck(this, BulkNamesContainer);
87
+
88
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
89
+ args[_key] = arguments[_key];
90
+ }
91
+
92
+ _this = _super.call.apply(_super, [this].concat(args));
93
+
94
+ _defineProperty(_assertThisInitialized(_this), "initialState", {
95
+ textInputs: [{
96
+ text: '',
97
+ amount: 1
98
+ }]
99
+ });
100
+
101
+ _defineProperty(_assertThisInitialized(_this), "state", _this.initialState);
102
+
103
+ _defineProperty(_assertThisInitialized(_this), "totalAmount", function () {
104
+ var textInputs = _this.state.textInputs;
105
+ var filledBulkNameInputs = [];
106
+
107
+ var _iterator = _createForOfIteratorHelper(textInputs),
108
+ _step;
109
+
110
+ try {
111
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
112
+ var input = _step.value;
113
+
114
+ if (input.text !== '') {
115
+ if (input.amount === 0) {
116
+ input.amount = 1;
117
+ }
118
+
119
+ filledBulkNameInputs.push(input);
120
+ }
121
+ }
122
+ } catch (err) {
123
+ _iterator.e(err);
124
+ } finally {
125
+ _iterator.f();
126
+ }
127
+
128
+ return (0, _sumBy["default"])(filledBulkNameInputs, 'amount');
129
+ });
130
+
131
+ _defineProperty(_assertThisInitialized(_this), "saveBulkNamesConfiguration", function () {
132
+ var _this$props = _this.props,
133
+ selectedVariant = _this$props.selectedVariant,
134
+ activeSizeVariant = _this$props.activeSizeVariant,
135
+ handleChange = _this$props.handleChange,
136
+ handleSave = _this$props.handleSave,
137
+ onClose = _this$props.onClose;
138
+ var textInputs = _this.state.textInputs;
139
+
140
+ var summedAmount = _this.totalAmount();
141
+
142
+ handleChange(summedAmount);
143
+ var reformattedTextInputs = (0, _flatten["default"])(textInputs.map(function (input) {
144
+ var inputs = [];
145
+
146
+ if (input.text !== '') {
147
+ for (var i = 1; i <= input.amount; i++) {
148
+ inputs.push(input.text);
149
+ }
150
+ }
151
+
152
+ return inputs;
153
+ }));
154
+
155
+ if (selectedVariant.sizes.length > 0) {
156
+ var sizeVariant = (0, _find["default"])(selectedVariant.sizes, {
157
+ identifier: activeSizeVariant.identifier
158
+ });
159
+ handleSave(sizeVariant.identifier, reformattedTextInputs);
160
+ } else {
161
+ handleSave(selectedVariant.identifier, reformattedTextInputs);
162
+ }
163
+
164
+ onClose();
165
+ });
166
+
167
+ _defineProperty(_assertThisInitialized(_this), "handleText", function (text, i) {
168
+ return function (e) {
169
+ var textInputs = _toConsumableArray(_this.state.textInputs);
170
+
171
+ if (text === 'text') {
172
+ textInputs[i].text = e.target.value;
173
+ } else {
174
+ textInputs[i].amount = e;
175
+ }
176
+
177
+ _this.setState({
178
+ textInputs: textInputs
179
+ });
180
+ };
181
+ });
182
+
183
+ _defineProperty(_assertThisInitialized(_this), "addTextField", function (e) {
184
+ e.preventDefault();
185
+
186
+ var textInputs = _this.state.textInputs.concat({
187
+ text: '',
188
+ amount: 1
189
+ });
190
+
191
+ _this.setState({
192
+ textInputs: textInputs
193
+ });
194
+ });
195
+
196
+ _defineProperty(_assertThisInitialized(_this), "handleDelete", function (i) {
197
+ return function (e) {
198
+ e.preventDefault();
199
+ var textInputs = [].concat(_toConsumableArray(_this.state.textInputs.slice(0, i)), _toConsumableArray(_this.state.textInputs.slice(i + 1)));
200
+
201
+ _this.setState({
202
+ textInputs: textInputs
203
+ });
204
+ };
205
+ });
206
+
207
+ return _this;
208
+ }
209
+
210
+ _createClass(BulkNamesContainer, [{
211
+ key: "componentDidMount",
212
+ value: function componentDidMount() {
213
+ var _this$props2 = this.props,
214
+ selectedVariant = _this$props2.selectedVariant,
215
+ activeSizeVariant = _this$props2.activeSizeVariant;
216
+
217
+ if (selectedVariant.sizes.length > 0) {
218
+ var sizeVariant = (0, _find["default"])(selectedVariant.sizes, {
219
+ identifier: activeSizeVariant.identifier
220
+ });
221
+ var bulkNamesSizes = sizeVariant.bulkNames;
222
+ var bulkNamesInputs = Object.values(bulkNamesSizes.reduce(function (indexedNames, text) {
223
+ var amount = (0, _get["default"])(indexedNames, "".concat(text, ".amount"), 0) + 1;
224
+ indexedNames = _objectSpread(_objectSpread({}, indexedNames), {}, _defineProperty({}, text, {
225
+ text: text,
226
+ amount: amount
227
+ }));
228
+ return indexedNames;
229
+ }, {}));
230
+
231
+ if (bulkNamesSizes.length > 0) {
232
+ this.setState({
233
+ textInputs: bulkNamesInputs
234
+ });
235
+ }
236
+ } else {
237
+ var bulkNames = selectedVariant.bulkNames;
238
+
239
+ var _bulkNamesInputs = Object.values(bulkNames.reduce(function (indexedNames, text) {
240
+ var amount = (0, _get["default"])(indexedNames, "".concat(text, ".amount"), 0) + 1;
241
+ indexedNames = _objectSpread(_objectSpread({}, indexedNames), {}, _defineProperty({}, text, {
242
+ text: text,
243
+ amount: amount
244
+ }));
245
+ return indexedNames;
246
+ }, {}));
247
+
248
+ if (bulkNames.length > 0) {
249
+ this.setState({
250
+ textInputs: _bulkNamesInputs
251
+ });
252
+ }
253
+ }
254
+ }
255
+ }, {
256
+ key: "render",
257
+ value: function render() {
258
+ var _this2 = this;
259
+
260
+ var textInputs = this.state.textInputs;
261
+
262
+ var _this$props3 = this.props,
263
+ BulkNamesComponent = _this$props3.BulkNamesComponent,
264
+ activeSizeVariant = _this$props3.activeSizeVariant,
265
+ props = _objectWithoutProperties(_this$props3, _excluded);
266
+
267
+ var size = !(0, _isEmpty["default"])(activeSizeVariant) && activeSizeVariant.size.split(' ').pop();
268
+ return /*#__PURE__*/_react["default"].createElement(BulkNamesComponent, _extends({
269
+ handleDelete: this.handleDelete,
270
+ addTextField: this.addTextField,
271
+ textInputs: textInputs,
272
+ handleText: this.handleText,
273
+ saveConfigurationBulkNames: function saveConfigurationBulkNames() {
274
+ return _this2.saveBulkNamesConfiguration();
275
+ },
276
+ totalAmount: this.totalAmount,
277
+ size: size,
278
+ activeSizeVariant: activeSizeVariant
279
+ }, props));
280
+ }
281
+ }]);
282
+
283
+ return BulkNamesContainer;
284
+ }(_react["default"].Component);
285
+
286
+ _defineProperty(BulkNamesContainer, "propTypes", {
287
+ textInputs: _propTypes["default"].array,
288
+ totalAmount: _propTypes["default"].func,
289
+ handleDelete: _propTypes["default"].func,
290
+ saveConfigurationBulkNames: _propTypes["default"].func,
291
+ handleText: _propTypes["default"].func,
292
+ handleChange: _propTypes["default"].func,
293
+ handleSave: _propTypes["default"].func,
294
+ onClose: _propTypes["default"].func,
295
+ addTextField: _propTypes["default"].func,
296
+ activeSizeVariant: _propTypes["default"].object,
297
+ selectedVariant: _propTypes["default"].object,
298
+ BulkNamesComponent: _propTypes["default"].func
299
+ });
300
+
301
+ var mapStateToProps = function mapStateToProps() {
302
+ return {
303
+ Component: BulkNamesContainer,
304
+ BulkNamesComponent: _BulkNames["default"]
305
+ };
306
+ };
307
+
308
+ var _default = (0, _ComponentContainer.containerConnect)(mapStateToProps);
309
+
310
+ exports["default"] = _default;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+
8
+ var _ComponentContainer = require("../../../Framework/ComponentContainer");
9
+
10
+ var _AlertDialog = _interopRequireDefault(require("../Components/AlertDialog"));
11
+
12
+ var _ServiceLocator = require("../../ServiceLocator");
13
+
14
+ var _i18n = require("../../../Framework/i18n");
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
17
+
18
+ var mapStateToProps = function mapStateToProps(_ref) {
19
+ var error = _ref.ui.error;
20
+ return {
21
+ Component: _AlertDialog["default"],
22
+ message: error && (error.message || error.type && (0, _i18n.t)("errorTypes.".concat(error.type)) || (0, _i18n.t)('errorTypes.unknown')),
23
+ title: (0, _i18n.t)('errorDialogTitle')
24
+ };
25
+ };
26
+
27
+ var mapDispatchToProps = function mapDispatchToProps() {
28
+ return {
29
+ dismissMessage: function dismissMessage() {
30
+ return _ServiceLocator.Services.ui.dismissError();
31
+ }
32
+ };
33
+ };
34
+
35
+ var _default = (0, _ComponentContainer.containerConnect)(mapStateToProps, mapDispatchToProps);
36
+
37
+ exports["default"] = _default;