@colijnit/corecomponents_v12 12.2.26 → 12.2.27

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 (438) hide show
  1. package/bundles/colijnit-corecomponents_v12.umd.js +13684 -13680
  2. package/bundles/colijnit-corecomponents_v12.umd.js.map +1 -1
  3. package/colijnit-corecomponents_v12.d.ts +43 -43
  4. package/colijnit-corecomponents_v12.metadata.json +1 -1
  5. package/esm2015/colijnit-corecomponents_v12.js +43 -43
  6. package/esm2015/lib/components/article-tile/article-tile.component.js +49 -49
  7. package/esm2015/lib/components/article-tile/article-tile.module.js +34 -34
  8. package/esm2015/lib/components/base/base-input.component.js +833 -833
  9. package/esm2015/lib/components/base/base.module.js +21 -21
  10. package/esm2015/lib/components/base/commit-buttons/commit-buttons.component.js +85 -85
  11. package/esm2015/lib/components/base/commit-buttons/commit-buttons.module.js +20 -20
  12. package/esm2015/lib/components/base/dialog-base.component.js +5 -5
  13. package/esm2015/lib/components/base-input-date-picker/base-input-date-picker.directive.js +24 -24
  14. package/esm2015/lib/components/button/button.component.js +73 -73
  15. package/esm2015/lib/components/button/button.module.js +18 -18
  16. package/esm2015/lib/components/calendar/calendar-template.component.js +281 -281
  17. package/esm2015/lib/components/calendar/calendar.component.js +32 -32
  18. package/esm2015/lib/components/calendar/calendar.module.js +27 -27
  19. package/esm2015/lib/components/card/card.component.js +50 -50
  20. package/esm2015/lib/components/card/card.module.js +34 -34
  21. package/esm2015/lib/components/carousel/carousel.component.js +109 -109
  22. package/esm2015/lib/components/carousel/carousel.module.js +31 -31
  23. package/esm2015/lib/components/carousel-3d/carousel-3d.component.js +293 -293
  24. package/esm2015/lib/components/carousel-3d/carousel-3d.module.js +18 -18
  25. package/esm2015/lib/components/carousel-3d/carouselItem.js +53 -53
  26. package/esm2015/lib/components/checkmark-overlay/checkmark-overlay.component.js +72 -72
  27. package/esm2015/lib/components/checkmark-overlay/checkmark-overlay.module.js +18 -18
  28. package/esm2015/lib/components/co-dialog/co-dialog.component.js +91 -91
  29. package/esm2015/lib/components/co-dialog/co-dialog.module.js +18 -18
  30. package/esm2015/lib/components/co-dialog-wizard/co-dialog-wizard.component.js +35 -35
  31. package/esm2015/lib/components/co-dialog-wizard/co-dialog-wizard.module.js +16 -16
  32. package/esm2015/lib/components/collapsible/collapsible.component.js +67 -67
  33. package/esm2015/lib/components/collapsible/collapsible.module.js +18 -18
  34. package/esm2015/lib/components/color-picker/color-picker.component.js +33 -33
  35. package/esm2015/lib/components/color-picker/color-picker.module.js +20 -20
  36. package/esm2015/lib/components/core-dialog/confirmation-dialog/confirmation-dialog.component.js +46 -46
  37. package/esm2015/lib/components/core-dialog/core-dialog.module.js +38 -38
  38. package/esm2015/lib/components/core-dialog/core-dialog.service.js +66 -66
  39. package/esm2015/lib/components/core-dialog/core-dynamic-component.service.js +92 -92
  40. package/esm2015/lib/components/double-calendar/double-calendar.component.js +62 -62
  41. package/esm2015/lib/components/double-calendar/double-calendar.module.js +24 -24
  42. package/esm2015/lib/components/filter-item/filter-item-viewmodel.js +12 -12
  43. package/esm2015/lib/components/filter-item/filter-item.component.js +496 -496
  44. package/esm2015/lib/components/filter-item/filter-item.module.js +42 -42
  45. package/esm2015/lib/components/filter-item/filter-viewmodel.js +10 -10
  46. package/esm2015/lib/components/form/form.component.js +181 -181
  47. package/esm2015/lib/components/form/form.module.js +22 -22
  48. package/esm2015/lib/components/grid-toolbar/grid-toolbar.component.js +48 -48
  49. package/esm2015/lib/components/grid-toolbar/grid-toolbar.module.js +22 -22
  50. package/esm2015/lib/components/grid-toolbar-button/grid-toolbar-button.component.js +23 -23
  51. package/esm2015/lib/components/grid-toolbar-button/grid-toolbar-button.module.js +18 -18
  52. package/esm2015/lib/components/icon/icon-cache.service.js +51 -51
  53. package/esm2015/lib/components/icon/icon.component.js +47 -47
  54. package/esm2015/lib/components/icon/icon.module.js +24 -24
  55. package/esm2015/lib/components/icon-collapse-handle/icon-collapse-handle.component.js +56 -56
  56. package/esm2015/lib/components/icon-collapse-handle/icon-collapse-handle.module.js +22 -22
  57. package/esm2015/lib/components/image/image.component.js +31 -31
  58. package/esm2015/lib/components/image/image.module.js +13 -13
  59. package/esm2015/lib/components/input-checkbox/input-checkbox.component.js +71 -71
  60. package/esm2015/lib/components/input-checkbox/input-checkbox.module.js +18 -18
  61. package/esm2015/lib/components/input-date-picker/input-date-picker.component.js +74 -74
  62. package/esm2015/lib/components/input-date-picker/input-date-picker.module.js +25 -25
  63. package/esm2015/lib/components/input-date-range-picker/input-date-range-picker.component.js +107 -107
  64. package/esm2015/lib/components/input-date-range-picker/input-date-range-picker.module.js +26 -26
  65. package/esm2015/lib/components/input-number-picker/input-number-picker.component.js +285 -285
  66. package/esm2015/lib/components/input-number-picker/input-number-picker.module.js +22 -22
  67. package/esm2015/lib/components/input-radio-button/input-radio-button.component.js +77 -77
  68. package/esm2015/lib/components/input-radio-button/input-radio-button.module.js +18 -18
  69. package/esm2015/lib/components/input-scanner/bar-code-scanner.js +22 -22
  70. package/esm2015/lib/components/input-scanner/input-scanner.component.js +56 -56
  71. package/esm2015/lib/components/input-scanner/input-scanner.module.js +20 -20
  72. package/esm2015/lib/components/input-scanner/scanner.service.js +27 -27
  73. package/esm2015/lib/components/input-search/input-search.component.js +67 -63
  74. package/esm2015/lib/components/input-search/input-search.module.js +20 -20
  75. package/esm2015/lib/components/input-text/input-text.component.js +192 -192
  76. package/esm2015/lib/components/input-text/input-text.module.js +32 -32
  77. package/esm2015/lib/components/input-textarea/input-textarea.component.js +55 -55
  78. package/esm2015/lib/components/input-textarea/input-textarea.module.js +26 -26
  79. package/esm2015/lib/components/level-indicator/level-indicator-level.enum.js +6 -6
  80. package/esm2015/lib/components/level-indicator/level-indicator.component.js +29 -29
  81. package/esm2015/lib/components/level-indicator/level-indicator.module.js +14 -14
  82. package/esm2015/lib/components/list-of-values/list-of-values-multiselect-popup.component.js +87 -87
  83. package/esm2015/lib/components/list-of-values/list-of-values-popup.component.js +218 -218
  84. package/esm2015/lib/components/list-of-values/list-of-values.component.js +199 -199
  85. package/esm2015/lib/components/list-of-values/list-of-values.module.js +37 -37
  86. package/esm2015/lib/components/loader/loader.component.js +16 -16
  87. package/esm2015/lib/components/loader/loader.module.js +18 -18
  88. package/esm2015/lib/components/pagination/paginate.pipe.js +98 -98
  89. package/esm2015/lib/components/pagination/pagination-instance.js +1 -1
  90. package/esm2015/lib/components/pagination/pagination.component.js +107 -107
  91. package/esm2015/lib/components/pagination/pagination.module.js +27 -27
  92. package/esm2015/lib/components/pagination/pagination.service.js +87 -87
  93. package/esm2015/lib/components/pagination-bar/pagination-bar.component.js +136 -136
  94. package/esm2015/lib/components/pagination-bar/pagination-bar.module.js +18 -18
  95. package/esm2015/lib/components/popup/const/popup-window-token.js +2 -2
  96. package/esm2015/lib/components/popup/interface/popup-button.js +7 -7
  97. package/esm2015/lib/components/popup/interface/popup-close-event.js +1 -1
  98. package/esm2015/lib/components/popup/interface/popup-settings.js +41 -41
  99. package/esm2015/lib/components/popup/interface/popup.js +1 -1
  100. package/esm2015/lib/components/popup/model/popup-button-globals.js +10 -10
  101. package/esm2015/lib/components/popup/model/popup-window.js +37 -37
  102. package/esm2015/lib/components/popup/popup-buttons.component.js +42 -42
  103. package/esm2015/lib/components/popup/popup-message-display.component.js +37 -37
  104. package/esm2015/lib/components/popup/popup-window-shell.component.js +141 -141
  105. package/esm2015/lib/components/popup/popup.module.js +48 -48
  106. package/esm2015/lib/components/popup/service/popup-shower.service.js +89 -89
  107. package/esm2015/lib/components/popup/service/prompt.service.js +126 -126
  108. package/esm2015/lib/components/popup/text-input-popup.component.js +33 -33
  109. package/esm2015/lib/components/responsive-text/responsive-text.component.js +17 -17
  110. package/esm2015/lib/components/responsive-text/responsive-text.module.js +18 -18
  111. package/esm2015/lib/components/simple-grid/base-simple-grid.component.js +163 -163
  112. package/esm2015/lib/components/simple-grid/simple-grid-cell.component.js +141 -141
  113. package/esm2015/lib/components/simple-grid/simple-grid-column.directive.js +110 -110
  114. package/esm2015/lib/components/simple-grid/simple-grid.component.js +378 -378
  115. package/esm2015/lib/components/simple-grid/simple-grid.module.js +40 -40
  116. package/esm2015/lib/components/tile/tile.component.js +44 -44
  117. package/esm2015/lib/components/tile/tile.module.js +22 -22
  118. package/esm2015/lib/components/tile-select/tile-select.component.js +26 -26
  119. package/esm2015/lib/components/tile-select/tile-select.module.js +20 -20
  120. package/esm2015/lib/components/tooltip/tooltip.component.js +74 -74
  121. package/esm2015/lib/components/tooltip/tooltip.module.js +18 -18
  122. package/esm2015/lib/components/validation-error/validation-error.component.js +30 -30
  123. package/esm2015/lib/components/validation-error/validation-error.module.js +24 -24
  124. package/esm2015/lib/components/view-mode-buttons/content-view-mode.enum.js +10 -10
  125. package/esm2015/lib/components/view-mode-buttons/view-mode-buttons.component.js +41 -41
  126. package/esm2015/lib/components/view-mode-buttons/view-mode-buttons.module.js +20 -20
  127. package/esm2015/lib/core/constant/default-upper-bound-for-range-components.js +3 -3
  128. package/esm2015/lib/core/constant/java-max-int.js +1 -1
  129. package/esm2015/lib/core/constant/number-inputs-key-down-white-list.js +44 -44
  130. package/esm2015/lib/core/decorator/input-boolean.decorator.js +33 -33
  131. package/esm2015/lib/core/enum/co-direction.js +8 -8
  132. package/esm2015/lib/core/enum/co-document-image-display-kind.enum.js +6 -6
  133. package/esm2015/lib/core/enum/co-document-type.enum.js +10 -10
  134. package/esm2015/lib/core/enum/co-orientation.js +16 -16
  135. package/esm2015/lib/core/enum/core-components-icon.enum.js +299 -299
  136. package/esm2015/lib/core/enum/file-type-internal.enum.js +16 -16
  137. package/esm2015/lib/core/enum/file-type.enum.js +10 -10
  138. package/esm2015/lib/core/enum/filterItem-mode.enum.js +42 -42
  139. package/esm2015/lib/core/enum/input-number-picker-show-mode.enum.js +7 -7
  140. package/esm2015/lib/core/enum/keyboard-code.enum.js +73 -73
  141. package/esm2015/lib/core/enum/keyboard-key.enum.js +75 -75
  142. package/esm2015/lib/core/enum/object-right-type.enum.js +6 -6
  143. package/esm2015/lib/core/enum/popup-button-type.enum.js +11 -11
  144. package/esm2015/lib/core/enum/popup-type.enum.js +10 -10
  145. package/esm2015/lib/core/enum/table-name.enum.js +80 -80
  146. package/esm2015/lib/core/function/any-nill.function.js +5 -5
  147. package/esm2015/lib/core/function/is-nill.function.js +4 -4
  148. package/esm2015/lib/core/function/none-nill.function.js +16 -16
  149. package/esm2015/lib/core/function/not-nill.function.js +4 -4
  150. package/esm2015/lib/core/model/bounds-constrained-number-value.js +170 -170
  151. package/esm2015/lib/core/model/check-precision-and-scale-result.js +1 -1
  152. package/esm2015/lib/core/model/check-within-stepped-bounds-result.js +1 -1
  153. package/esm2015/lib/core/model/co-document-right.bo.js +2 -2
  154. package/esm2015/lib/core/model/co-document.bo.js +120 -120
  155. package/esm2015/lib/core/model/core-components-icon-svg.js +298 -298
  156. package/esm2015/lib/core/model/element-position.js +9 -9
  157. package/esm2015/lib/core/model/event/string-prompt-result-event.js +7 -7
  158. package/esm2015/lib/core/service/form-input-user-change-listener.service.js +24 -24
  159. package/esm2015/lib/core/service/form-master.service.js +101 -101
  160. package/esm2015/lib/core/service/ng-zone-wrapper.service.js +19 -19
  161. package/esm2015/lib/core/utils/array-utils.js +263 -263
  162. package/esm2015/lib/core/utils/browser-utils.js +99 -99
  163. package/esm2015/lib/core/utils/direction-enum-utils.js +13 -13
  164. package/esm2015/lib/core/utils/event-utils.js +52 -52
  165. package/esm2015/lib/core/utils/file-utils.js +266 -266
  166. package/esm2015/lib/core/utils/number-utils.js +308 -308
  167. package/esm2015/lib/core/utils/object-utils.js +185 -185
  168. package/esm2015/lib/core/utils/string-utils.js +93 -93
  169. package/esm2015/lib/core/validator/email.validator.js +5 -5
  170. package/esm2015/lib/core/validator/equal.validator.js +10 -10
  171. package/esm2015/lib/core/validator/max-string-length.validator.js +9 -9
  172. package/esm2015/lib/core/validator/password.validator.js +30 -30
  173. package/esm2015/lib/core/validator/precision-scale.validator.js +10 -10
  174. package/esm2015/lib/core/validator/required.validator.js +4 -4
  175. package/esm2015/lib/directives/clickoutside/click-outside-master.service.js +56 -56
  176. package/esm2015/lib/directives/clickoutside/click-outside.directive.js +70 -70
  177. package/esm2015/lib/directives/clickoutside/clickoutside.module.js +18 -18
  178. package/esm2015/lib/directives/observe-visibility/observe-visibility.directive.js +52 -52
  179. package/esm2015/lib/directives/observe-visibility/observe-visibility.module.js +14 -14
  180. package/esm2015/lib/directives/overlay/overlay-parent.directive.js +18 -18
  181. package/esm2015/lib/directives/overlay/overlay.directive.js +160 -160
  182. package/esm2015/lib/directives/overlay/overlay.module.js +17 -17
  183. package/esm2015/lib/directives/ripple/ripple-ref.js +25 -25
  184. package/esm2015/lib/directives/ripple/ripple-renderer.js +159 -159
  185. package/esm2015/lib/directives/ripple/ripple.directive.js +79 -79
  186. package/esm2015/lib/directives/ripple/ripple.module.js +23 -23
  187. package/esm2015/lib/directives/ripple/scroll-dispatcher.service.js +107 -107
  188. package/esm2015/lib/directives/ripple/scrollable.directive.js +39 -39
  189. package/esm2015/lib/directives/ripple/viewport-ruler.service.js +72 -72
  190. package/esm2015/lib/directives/screen-configuration/screen-configuration.directive.js +157 -157
  191. package/esm2015/lib/directives/screen-configuration/screen-configuration.module.js +18 -18
  192. package/esm2015/lib/directives/stopclick/stop-click.directive.js +37 -37
  193. package/esm2015/lib/directives/stopclick/stop-click.module.js +14 -14
  194. package/esm2015/lib/directives/template-wrapper/template-wrapper.directive.js +67 -67
  195. package/esm2015/lib/directives/template-wrapper/template-wrapper.module.js +14 -14
  196. package/esm2015/lib/directives/tooltip/tooltip-directive.module.js +18 -18
  197. package/esm2015/lib/directives/tooltip/tooltip.directive.js +77 -77
  198. package/esm2015/lib/interfaces/dialog-response.interface.js +1 -1
  199. package/esm2015/lib/interfaces/scanner-input.interface.js +1 -1
  200. package/esm2015/lib/interfaces/screen-config-adapter-component-interface-name.js +3 -3
  201. package/esm2015/lib/interfaces/screen-config-adapter.component.interface.js +1 -1
  202. package/esm2015/lib/model/enum/app-button-type.enum.js +10 -10
  203. package/esm2015/lib/model/enum/app-popup-type.enum.js +7 -7
  204. package/esm2015/lib/pipes/append.pipe.js +16 -16
  205. package/esm2015/lib/pipes/append.pipe.module.js +14 -14
  206. package/esm2015/lib/pipes/filter.pipe.js +15 -15
  207. package/esm2015/lib/pipes/filter.pipe.module.js +14 -14
  208. package/esm2015/lib/pipes/prepend.pipe.js +16 -16
  209. package/esm2015/lib/pipes/prepend.pipe.module.js +14 -14
  210. package/esm2015/lib/pipes/price-display-pipe.module.js +14 -14
  211. package/esm2015/lib/pipes/price-display.pipe.js +19 -19
  212. package/esm2015/lib/service/base-module-screen-config.service.js +204 -204
  213. package/esm2015/lib/service/base-module.service.js +41 -41
  214. package/esm2015/lib/service/color-sequence.service.js +22 -22
  215. package/esm2015/lib/service/overlay.service.js +72 -72
  216. package/esm2015/lib/translation/core-components-translation.module.js +28 -28
  217. package/esm2015/lib/translation/core-components-translation.service.js +16 -16
  218. package/esm2015/lib/translation/core-dictionary.service.js +28 -28
  219. package/esm2015/lib/translation/core-localize.pipe.js +25 -25
  220. package/esm2015/public-api.js +129 -129
  221. package/fesm2015/colijnit-corecomponents_v12.js +12090 -12086
  222. package/fesm2015/colijnit-corecomponents_v12.js.map +1 -1
  223. package/lib/components/article-tile/article-tile.component.d.ts +22 -22
  224. package/lib/components/article-tile/article-tile.module.d.ts +2 -2
  225. package/lib/components/base/base-input.component.d.ts +182 -182
  226. package/lib/components/base/base.module.d.ts +2 -2
  227. package/lib/components/base/commit-buttons/commit-buttons.component.d.ts +21 -21
  228. package/lib/components/base/commit-buttons/commit-buttons.module.d.ts +2 -2
  229. package/lib/components/base/dialog-base.component.d.ts +4 -4
  230. package/lib/components/base-input-date-picker/base-input-date-picker.directive.d.ts +15 -15
  231. package/lib/components/button/button.component.d.ts +29 -29
  232. package/lib/components/button/button.module.d.ts +2 -2
  233. package/lib/components/calendar/calendar-template.component.d.ts +60 -60
  234. package/lib/components/calendar/calendar.component.d.ts +13 -13
  235. package/lib/components/calendar/calendar.module.d.ts +2 -2
  236. package/lib/components/card/card.component.d.ts +23 -23
  237. package/lib/components/card/card.module.d.ts +2 -2
  238. package/lib/components/carousel/carousel.component.d.ts +23 -23
  239. package/lib/components/carousel/carousel.module.d.ts +6 -6
  240. package/lib/components/carousel-3d/carousel-3d.component.d.ts +55 -55
  241. package/lib/components/carousel-3d/carousel-3d.module.d.ts +2 -2
  242. package/lib/components/carousel-3d/carouselItem.d.ts +13 -13
  243. package/lib/components/checkmark-overlay/checkmark-overlay.component.d.ts +17 -17
  244. package/lib/components/checkmark-overlay/checkmark-overlay.module.d.ts +2 -2
  245. package/lib/components/co-dialog/co-dialog.component.d.ts +23 -23
  246. package/lib/components/co-dialog/co-dialog.module.d.ts +2 -2
  247. package/lib/components/co-dialog-wizard/co-dialog-wizard.component.d.ts +9 -9
  248. package/lib/components/co-dialog-wizard/co-dialog-wizard.module.d.ts +2 -2
  249. package/lib/components/collapsible/collapsible.component.d.ts +22 -22
  250. package/lib/components/collapsible/collapsible.module.d.ts +2 -2
  251. package/lib/components/color-picker/color-picker.component.d.ts +6 -6
  252. package/lib/components/color-picker/color-picker.module.d.ts +2 -2
  253. package/lib/components/core-dialog/confirmation-dialog/confirmation-dialog.component.d.ts +20 -20
  254. package/lib/components/core-dialog/core-dialog.module.d.ts +4 -4
  255. package/lib/components/core-dialog/core-dialog.service.d.ts +15 -15
  256. package/lib/components/core-dialog/core-dynamic-component.service.d.ts +12 -12
  257. package/lib/components/double-calendar/double-calendar.component.d.ts +18 -18
  258. package/lib/components/double-calendar/double-calendar.module.d.ts +2 -2
  259. package/lib/components/filter-item/filter-item-viewmodel.d.ts +9 -9
  260. package/lib/components/filter-item/filter-item.component.d.ts +80 -80
  261. package/lib/components/filter-item/filter-item.module.d.ts +2 -2
  262. package/lib/components/filter-item/filter-viewmodel.d.ts +8 -8
  263. package/lib/components/form/form.component.d.ts +39 -39
  264. package/lib/components/form/form.module.d.ts +2 -2
  265. package/lib/components/grid-toolbar/grid-toolbar.component.d.ts +19 -19
  266. package/lib/components/grid-toolbar/grid-toolbar.module.d.ts +2 -2
  267. package/lib/components/grid-toolbar-button/grid-toolbar-button.component.d.ts +8 -8
  268. package/lib/components/grid-toolbar-button/grid-toolbar-button.module.d.ts +2 -2
  269. package/lib/components/icon/icon-cache.service.d.ts +20 -20
  270. package/lib/components/icon/icon.component.d.ts +17 -17
  271. package/lib/components/icon/icon.module.d.ts +2 -2
  272. package/lib/components/icon-collapse-handle/icon-collapse-handle.component.d.ts +21 -21
  273. package/lib/components/icon-collapse-handle/icon-collapse-handle.module.d.ts +2 -2
  274. package/lib/components/image/image.component.d.ts +20 -20
  275. package/lib/components/image/image.module.d.ts +2 -2
  276. package/lib/components/input-checkbox/input-checkbox.component.d.ts +24 -24
  277. package/lib/components/input-checkbox/input-checkbox.module.d.ts +2 -2
  278. package/lib/components/input-date-picker/input-date-picker.component.d.ts +12 -12
  279. package/lib/components/input-date-picker/input-date-picker.module.d.ts +2 -2
  280. package/lib/components/input-date-range-picker/input-date-range-picker.component.d.ts +20 -20
  281. package/lib/components/input-date-range-picker/input-date-range-picker.module.d.ts +2 -2
  282. package/lib/components/input-number-picker/input-number-picker.component.d.ts +73 -73
  283. package/lib/components/input-number-picker/input-number-picker.module.d.ts +2 -2
  284. package/lib/components/input-radio-button/input-radio-button.component.d.ts +19 -19
  285. package/lib/components/input-radio-button/input-radio-button.module.d.ts +2 -2
  286. package/lib/components/input-scanner/bar-code-scanner.d.ts +7 -7
  287. package/lib/components/input-scanner/input-scanner.component.d.ts +24 -24
  288. package/lib/components/input-scanner/input-scanner.module.d.ts +2 -2
  289. package/lib/components/input-scanner/scanner.service.d.ts +11 -11
  290. package/lib/components/input-search/input-search.component.d.ts +20 -19
  291. package/lib/components/input-search/input-search.module.d.ts +2 -2
  292. package/lib/components/input-text/input-text.component.d.ts +65 -65
  293. package/lib/components/input-text/input-text.module.d.ts +2 -2
  294. package/lib/components/input-textarea/input-textarea.component.d.ts +19 -19
  295. package/lib/components/input-textarea/input-textarea.module.d.ts +2 -2
  296. package/lib/components/level-indicator/level-indicator-level.enum.d.ts +5 -5
  297. package/lib/components/level-indicator/level-indicator.component.d.ts +10 -10
  298. package/lib/components/level-indicator/level-indicator.module.d.ts +2 -2
  299. package/lib/components/list-of-values/list-of-values-multiselect-popup.component.d.ts +25 -25
  300. package/lib/components/list-of-values/list-of-values-popup.component.d.ts +47 -47
  301. package/lib/components/list-of-values/list-of-values.component.d.ts +37 -37
  302. package/lib/components/list-of-values/list-of-values.module.d.ts +2 -2
  303. package/lib/components/loader/loader.component.d.ts +3 -3
  304. package/lib/components/loader/loader.module.d.ts +2 -2
  305. package/lib/components/pagination/paginate.pipe.d.ts +15 -15
  306. package/lib/components/pagination/pagination-instance.d.ts +14 -14
  307. package/lib/components/pagination/pagination.component.d.ts +38 -38
  308. package/lib/components/pagination/pagination.module.d.ts +2 -2
  309. package/lib/components/pagination/pagination.service.d.ts +24 -24
  310. package/lib/components/pagination-bar/pagination-bar.component.d.ts +33 -33
  311. package/lib/components/pagination-bar/pagination-bar.module.d.ts +2 -2
  312. package/lib/components/popup/const/popup-window-token.d.ts +3 -3
  313. package/lib/components/popup/interface/popup-button.d.ts +8 -8
  314. package/lib/components/popup/interface/popup-close-event.d.ts +5 -5
  315. package/lib/components/popup/interface/popup-settings.d.ts +21 -21
  316. package/lib/components/popup/interface/popup.d.ts +9 -9
  317. package/lib/components/popup/model/popup-button-globals.d.ts +9 -9
  318. package/lib/components/popup/model/popup-window.d.ts +21 -21
  319. package/lib/components/popup/popup-buttons.component.d.ts +13 -13
  320. package/lib/components/popup/popup-message-display.component.d.ts +12 -12
  321. package/lib/components/popup/popup-window-shell.component.d.ts +42 -42
  322. package/lib/components/popup/popup.module.d.ts +4 -4
  323. package/lib/components/popup/service/popup-shower.service.d.ts +17 -17
  324. package/lib/components/popup/service/prompt.service.d.ts +17 -17
  325. package/lib/components/popup/text-input-popup.component.d.ts +12 -12
  326. package/lib/components/responsive-text/responsive-text.component.d.ts +4 -4
  327. package/lib/components/responsive-text/responsive-text.module.d.ts +2 -2
  328. package/lib/components/simple-grid/base-simple-grid.component.d.ts +52 -52
  329. package/lib/components/simple-grid/simple-grid-cell.component.d.ts +30 -30
  330. package/lib/components/simple-grid/simple-grid-column.directive.d.ts +42 -42
  331. package/lib/components/simple-grid/simple-grid.component.d.ts +64 -64
  332. package/lib/components/simple-grid/simple-grid.module.d.ts +2 -2
  333. package/lib/components/tile/tile.component.d.ts +16 -16
  334. package/lib/components/tile/tile.module.d.ts +2 -2
  335. package/lib/components/tile-select/tile-select.component.d.ts +8 -8
  336. package/lib/components/tile-select/tile-select.module.d.ts +2 -2
  337. package/lib/components/tooltip/tooltip.component.d.ts +18 -18
  338. package/lib/components/tooltip/tooltip.module.d.ts +2 -2
  339. package/lib/components/validation-error/validation-error.component.d.ts +12 -12
  340. package/lib/components/validation-error/validation-error.module.d.ts +2 -2
  341. package/lib/components/view-mode-buttons/content-view-mode.enum.d.ts +8 -8
  342. package/lib/components/view-mode-buttons/view-mode-buttons.component.d.ts +17 -17
  343. package/lib/components/view-mode-buttons/view-mode-buttons.module.d.ts +2 -2
  344. package/lib/core/constant/default-upper-bound-for-range-components.d.ts +2 -2
  345. package/lib/core/constant/java-max-int.d.ts +1 -1
  346. package/lib/core/constant/number-inputs-key-down-white-list.d.ts +2 -2
  347. package/lib/core/decorator/input-boolean.decorator.d.ts +8 -8
  348. package/lib/core/enum/co-direction.d.ts +6 -6
  349. package/lib/core/enum/co-document-image-display-kind.enum.d.ts +5 -5
  350. package/lib/core/enum/co-document-type.enum.d.ts +5 -5
  351. package/lib/core/enum/co-orientation.d.ts +6 -6
  352. package/lib/core/enum/core-components-icon.enum.d.ts +298 -298
  353. package/lib/core/enum/file-type-internal.enum.d.ts +15 -15
  354. package/lib/core/enum/file-type.enum.d.ts +5 -5
  355. package/lib/core/enum/filterItem-mode.enum.d.ts +15 -15
  356. package/lib/core/enum/input-number-picker-show-mode.enum.d.ts +5 -5
  357. package/lib/core/enum/keyboard-code.enum.d.ts +71 -71
  358. package/lib/core/enum/keyboard-key.enum.d.ts +70 -70
  359. package/lib/core/enum/object-right-type.enum.d.ts +5 -5
  360. package/lib/core/enum/popup-button-type.enum.d.ts +9 -9
  361. package/lib/core/enum/popup-type.enum.d.ts +9 -9
  362. package/lib/core/enum/table-name.enum.d.ts +79 -79
  363. package/lib/core/function/any-nill.function.d.ts +1 -1
  364. package/lib/core/function/is-nill.function.d.ts +1 -1
  365. package/lib/core/function/none-nill.function.d.ts +1 -1
  366. package/lib/core/function/not-nill.function.d.ts +1 -1
  367. package/lib/core/model/bounds-constrained-number-value.d.ts +46 -46
  368. package/lib/core/model/check-precision-and-scale-result.d.ts +4 -4
  369. package/lib/core/model/check-within-stepped-bounds-result.d.ts +8 -8
  370. package/lib/core/model/co-document-right.bo.d.ts +6 -6
  371. package/lib/core/model/co-document.bo.d.ts +61 -61
  372. package/lib/core/model/core-components-icon-svg.d.ts +4 -4
  373. package/lib/core/model/element-position.d.ts +7 -7
  374. package/lib/core/model/event/string-prompt-result-event.d.ts +6 -6
  375. package/lib/core/service/form-input-user-change-listener.service.d.ts +10 -10
  376. package/lib/core/service/form-master.service.d.ts +26 -26
  377. package/lib/core/service/ng-zone-wrapper.service.d.ts +6 -6
  378. package/lib/core/utils/array-utils.d.ts +85 -85
  379. package/lib/core/utils/browser-utils.d.ts +15 -15
  380. package/lib/core/utils/direction-enum-utils.d.ts +5 -5
  381. package/lib/core/utils/event-utils.d.ts +12 -12
  382. package/lib/core/utils/file-utils.d.ts +29 -29
  383. package/lib/core/utils/number-utils.d.ts +89 -89
  384. package/lib/core/utils/object-utils.d.ts +31 -31
  385. package/lib/core/utils/string-utils.d.ts +25 -25
  386. package/lib/core/validator/email.validator.d.ts +2 -2
  387. package/lib/core/validator/equal.validator.d.ts +2 -2
  388. package/lib/core/validator/max-string-length.validator.d.ts +2 -2
  389. package/lib/core/validator/password.validator.d.ts +3 -3
  390. package/lib/core/validator/precision-scale.validator.d.ts +2 -2
  391. package/lib/core/validator/required.validator.d.ts +2 -2
  392. package/lib/directives/clickoutside/click-outside-master.service.d.ts +15 -15
  393. package/lib/directives/clickoutside/click-outside.directive.d.ts +18 -18
  394. package/lib/directives/clickoutside/clickoutside.module.d.ts +2 -2
  395. package/lib/directives/observe-visibility/observe-visibility.directive.d.ts +14 -14
  396. package/lib/directives/observe-visibility/observe-visibility.module.d.ts +2 -2
  397. package/lib/directives/overlay/overlay-parent.directive.d.ts +6 -6
  398. package/lib/directives/overlay/overlay.directive.d.ts +25 -25
  399. package/lib/directives/overlay/overlay.module.d.ts +2 -2
  400. package/lib/directives/ripple/ripple-ref.d.ts +21 -21
  401. package/lib/directives/ripple/ripple-renderer.d.ts +56 -56
  402. package/lib/directives/ripple/ripple.directive.d.ts +56 -56
  403. package/lib/directives/ripple/ripple.module.d.ts +2 -2
  404. package/lib/directives/ripple/scroll-dispatcher.service.d.ts +51 -51
  405. package/lib/directives/ripple/scrollable.directive.d.ts +20 -20
  406. package/lib/directives/ripple/viewport-ruler.service.d.ts +29 -29
  407. package/lib/directives/screen-configuration/screen-configuration.directive.d.ts +32 -32
  408. package/lib/directives/screen-configuration/screen-configuration.module.d.ts +2 -2
  409. package/lib/directives/stopclick/stop-click.directive.d.ts +10 -10
  410. package/lib/directives/stopclick/stop-click.module.d.ts +2 -2
  411. package/lib/directives/template-wrapper/template-wrapper.directive.d.ts +13 -13
  412. package/lib/directives/template-wrapper/template-wrapper.module.d.ts +2 -2
  413. package/lib/directives/tooltip/tooltip-directive.module.d.ts +2 -2
  414. package/lib/directives/tooltip/tooltip.directive.d.ts +20 -20
  415. package/lib/interfaces/dialog-response.interface.d.ts +6 -6
  416. package/lib/interfaces/scanner-input.interface.d.ts +3 -3
  417. package/lib/interfaces/screen-config-adapter-component-interface-name.d.ts +3 -3
  418. package/lib/interfaces/screen-config-adapter.component.interface.d.ts +10 -10
  419. package/lib/model/enum/app-button-type.enum.d.ts +9 -9
  420. package/lib/model/enum/app-popup-type.enum.d.ts +6 -6
  421. package/lib/pipes/append.pipe.d.ts +4 -4
  422. package/lib/pipes/append.pipe.module.d.ts +2 -2
  423. package/lib/pipes/filter.pipe.d.ts +4 -4
  424. package/lib/pipes/filter.pipe.module.d.ts +2 -2
  425. package/lib/pipes/prepend.pipe.d.ts +4 -4
  426. package/lib/pipes/prepend.pipe.module.d.ts +2 -2
  427. package/lib/pipes/price-display-pipe.module.d.ts +2 -2
  428. package/lib/pipes/price-display.pipe.d.ts +4 -4
  429. package/lib/service/base-module-screen-config.service.d.ts +47 -47
  430. package/lib/service/base-module.service.d.ts +22 -22
  431. package/lib/service/color-sequence.service.d.ts +4 -4
  432. package/lib/service/overlay.service.d.ts +13 -13
  433. package/lib/translation/core-components-translation.module.d.ts +4 -4
  434. package/lib/translation/core-components-translation.service.d.ts +6 -6
  435. package/lib/translation/core-dictionary.service.d.ts +12 -12
  436. package/lib/translation/core-localize.pipe.d.ts +7 -7
  437. package/package.json +1 -1
  438. package/public-api.d.ts +126 -126
@@ -1,267 +1,267 @@
1
- import { __awaiter } from "tslib";
2
- import { FileTypeInternal } from '../enum/file-type-internal.enum';
3
- import { CoDocument } from '../model/co-document.bo';
4
- import { CoDocumentType } from '../enum/co-document-type.enum';
5
- import { FileType } from '../enum/file-type.enum';
6
- import { StringUtils } from './string-utils';
7
- import { NumberUtils } from './number-utils';
8
- const MaxUploadSize = 3145728; // 3Mb
9
- // @dynamic
10
- export class FileUtils {
11
- // Returns MaxUploadSize in Megabytes.
12
- static get MaxUploadSizeInMb() {
13
- return MaxUploadSize / 1024 / 1024;
14
- }
15
- static DocumentBodyToDataUri(documentBody, mimeType) {
16
- return StringUtils.IsStringWithLength(documentBody) ? "data:" + mimeType + ";base64," + documentBody : "";
17
- }
18
- // Returns the file type of the given file, by looking at its extension. Returns FileType.Undefined if not recognised.
19
- static FileNameToFileTypeInternal(fileName) {
20
- if (!fileName) {
21
- return FileTypeInternal.Undefined;
22
- }
23
- const stringParts = fileName.split(".");
24
- const extension = stringParts[stringParts.length - 1];
25
- switch (extension.toLowerCase()) {
26
- case "pdn":
27
- case "bmp":
28
- case "gif":
29
- case "jpg":
30
- case "jpeg":
31
- case "jpe":
32
- case "jfif":
33
- case "png":
34
- case "tif":
35
- case "tiff":
36
- case "tga":
37
- case "dds":
38
- return FileTypeInternal.Image;
39
- case "swf":
40
- return FileTypeInternal.Swf;
41
- case "xls":
42
- case "xlsx":
43
- return FileTypeInternal.ExcelSheet;
44
- case "doc":
45
- case "docx":
46
- return FileTypeInternal.WordDocument;
47
- case "pdf":
48
- return FileTypeInternal.Pdf;
49
- case "txt":
50
- return FileTypeInternal.TextFile;
51
- case "exe":
52
- return FileTypeInternal.Executable;
53
- default:
54
- return FileTypeInternal.Undefined;
55
- }
56
- }
57
- // Checks if filetype of given file is of type image. Possible filetypes: image/png, image/bmp, image/jpeg, etc.
58
- static IsImageFile(file) {
59
- if (!file) {
60
- return false;
61
- }
62
- let fileName;
63
- let mimeType;
64
- if (file instanceof CoDocument) {
65
- fileName = file.fileName;
66
- mimeType = file.mimeTypeInternal;
67
- }
68
- else {
69
- fileName = file.name;
70
- mimeType = file.type;
71
- }
72
- if (mimeType !== "") {
73
- return mimeType.startsWith('image/');
74
- }
75
- else {
76
- return (FileUtils.FileNameToFileTypeInternal(fileName) === FileTypeInternal.Image);
77
- }
78
- }
79
- // Try to determine the file type of given document. First attempt is by filetype, second by file name.
80
- static GetGlobalFileType(document) {
81
- if (!document) {
82
- return FileTypeInternal.Undefined;
83
- }
84
- if (document.mimeType !== "") {
85
- switch (document.mimeType) {
86
- case "application/pdf":
87
- return FileTypeInternal.Pdf;
88
- case "application/msword":
89
- return FileTypeInternal.WordDocument;
90
- case "application/excel":
91
- case "application/vnd.ms-excel":
92
- case "application/x-excel":
93
- case "application/x-msexcel":
94
- return FileTypeInternal.ExcelSheet;
95
- case "text/plain":
96
- case "application/plain":
97
- return FileTypeInternal.TextFile;
98
- default:
99
- return FileTypeInternal.Undefined;
100
- }
101
- }
102
- else {
103
- return FileUtils.FileNameToFileTypeInternal(document.fileName);
104
- }
105
- }
106
- // Checks filesize of given file and returns false if size exceeds maximum upload size.
107
- static CheckMaxUploadSize(file) {
108
- let fileSize = 0;
109
- if (file instanceof CoDocument) {
110
- fileSize = NumberUtils.ParseInt(file.fileSize);
111
- }
112
- else {
113
- fileSize = file.size;
114
- }
115
- return (fileSize <= MaxUploadSize);
116
- }
117
- static ConvertFileToDataUri(file) {
118
- return __awaiter(this, void 0, void 0, function* () {
119
- if (file) {
120
- return new Promise((resolve) => {
121
- const fileReader = new FileReader();
122
- fileReader.onload = () => {
123
- resolve(fileReader.result);
124
- };
125
- fileReader.readAsDataURL(file);
126
- });
127
- }
128
- });
129
- }
130
- // Returns the given dataUri string stripped of the mimetype part.
131
- static StripMimeStringFromDataUri(dataUri) {
132
- if (!dataUri) {
133
- return "";
134
- }
135
- const mimeString = this.GetMimeStringFromDataUri(dataUri);
136
- return dataUri.substr(mimeString.length + 1);
137
- }
138
- static GetMimeStringFromDataUri(dataUri) {
139
- if (!dataUri) {
140
- return "";
141
- }
142
- return dataUri.split(',')[0];
143
- }
144
- // Converts given string data to an ArrayBuffer.
145
- static ConvertStringToArrayBuffer(stringData) {
146
- if (!stringData) {
147
- return undefined;
148
- }
149
- const arrayBuffer = new ArrayBuffer(stringData.length);
150
- const bufView = new Uint8Array(arrayBuffer);
151
- for (let i = 0, len = stringData.length; i < len; i++) {
152
- bufView[i] = stringData.charCodeAt(i);
153
- }
154
- return bufView;
155
- }
156
- static ConvertByteArrayToString(byteArray) {
157
- let str = "";
158
- if (byteArray) {
159
- for (let i = 0, len = byteArray.length; i < len; i++) {
160
- str += String.fromCharCode(byteArray[i]);
161
- }
162
- }
163
- return str;
164
- }
165
- // Returns true if given string contains a data-uri/base64.
166
- static StringContainsDataUri(str) {
167
- if (!str) {
168
- return false;
169
- }
170
- const mimeString = str.split(',')[0];
171
- return mimeString.indexOf('base64') > -1;
172
- }
173
- /**
174
- * There is some discrepancy regarding locations of h3d objects
175
- * Therefor we need to (temporarily?!) fix the content url
176
- * Also we need to change some additionals
177
- */
178
- static FixAssetUrl(assetUrl) {
179
- if (!assetUrl) {
180
- return "";
181
- }
182
- let fixedUrl;
183
- if (assetUrl.indexOf('_webplayer') === -1) {
184
- fixedUrl = assetUrl.replace('.unity3d', '_webplayer.ione3d');
185
- }
186
- else {
187
- fixedUrl = assetUrl.replace('_webplayer.unity3d', '_webplayer.ione3d');
188
- }
189
- fixedUrl = fixedUrl.replace('content/', 'content43/');
190
- if (!fixedUrl.endsWith('.gz')) {
191
- fixedUrl = fixedUrl.concat('.gz');
192
- }
193
- return fixedUrl;
194
- }
195
- // Return the mimetype of the given filename.
196
- static MimeTypeFromFilename(fileName) {
197
- const regEx = /(?:\.([^.]+))?$/; // regex to find extension
198
- const extension = regEx.exec(fileName)[1];
199
- switch (extension) {
200
- case "jpg":
201
- case "jpeg":
202
- return "image/jpeg";
203
- case "png":
204
- return "image/png";
205
- case "bmp":
206
- return "image/bmp";
207
- }
208
- }
209
- static DownloadFile(fileName, content, mimeType = "text/plain") {
210
- const element = document.createElement('a');
211
- element.setAttribute("href", "data:" + mimeType + ";charset=utf-8," + encodeURIComponent(content));
212
- element.setAttribute("download", fileName);
213
- element.style.display = "none";
214
- document.body.appendChild(element);
215
- element.click();
216
- document.body.removeChild(element);
217
- }
218
- // Returns the contents of given file as a text string.
219
- static ReadAsText(file) {
220
- return new Promise((resolve) => {
221
- const reader = new FileReader();
222
- reader.readAsText(file);
223
- reader.onloadend = (event) => {
224
- if (event.target.readyState === 2) {
225
- resolve(event.target.result);
226
- }
227
- };
228
- });
229
- }
230
- static ReadFileAsNewCoDocument(file) {
231
- return new Promise((resolve) => {
232
- const reader = new FileReader();
233
- reader.readAsDataURL(file);
234
- reader.onloadend = (event) => {
235
- if (event.target.readyState === 2) {
236
- const coDocument = new CoDocument();
237
- coDocument.fileSize = file.size.toString();
238
- coDocument.mimeTypeInternal = file.type;
239
- coDocument.mimeType = file.type;
240
- coDocument.fileName = file.name;
241
- coDocument.documentType = CoDocumentType.SaveAsDocument;
242
- coDocument.fileType = FileUtils.IsImageFile(file) ? FileType.Image : FileType.Document;
243
- coDocument.description = file.name;
244
- coDocument.documentBody = FileUtils.StripMimeStringFromDataUri(event.target.result);
245
- resolve(coDocument);
246
- }
247
- };
248
- });
249
- }
250
- static GetExtensionFromDataUri(dataUri) {
251
- const data = dataUri;
252
- return data.replace(/(data:image\/)(.*?)(;base64.*)/gi, '$2');
253
- }
254
- static CreateDownloadFileNameFromBase64(dataUri) {
255
- const ext = this.GetExtensionFromDataUri(dataUri);
256
- return 'preview.' + ext;
257
- }
258
- static DownloadFromDataUri(dataUri, fileName) {
259
- const link = document.createElement("a");
260
- link.download = fileName;
261
- link.href = dataUri;
262
- document.body.appendChild(link);
263
- link.click();
264
- document.body.removeChild(link);
265
- }
266
- }
1
+ import { __awaiter } from "tslib";
2
+ import { FileTypeInternal } from '../enum/file-type-internal.enum';
3
+ import { CoDocument } from '../model/co-document.bo';
4
+ import { CoDocumentType } from '../enum/co-document-type.enum';
5
+ import { FileType } from '../enum/file-type.enum';
6
+ import { StringUtils } from './string-utils';
7
+ import { NumberUtils } from './number-utils';
8
+ const MaxUploadSize = 3145728; // 3Mb
9
+ // @dynamic
10
+ export class FileUtils {
11
+ // Returns MaxUploadSize in Megabytes.
12
+ static get MaxUploadSizeInMb() {
13
+ return MaxUploadSize / 1024 / 1024;
14
+ }
15
+ static DocumentBodyToDataUri(documentBody, mimeType) {
16
+ return StringUtils.IsStringWithLength(documentBody) ? "data:" + mimeType + ";base64," + documentBody : "";
17
+ }
18
+ // Returns the file type of the given file, by looking at its extension. Returns FileType.Undefined if not recognised.
19
+ static FileNameToFileTypeInternal(fileName) {
20
+ if (!fileName) {
21
+ return FileTypeInternal.Undefined;
22
+ }
23
+ const stringParts = fileName.split(".");
24
+ const extension = stringParts[stringParts.length - 1];
25
+ switch (extension.toLowerCase()) {
26
+ case "pdn":
27
+ case "bmp":
28
+ case "gif":
29
+ case "jpg":
30
+ case "jpeg":
31
+ case "jpe":
32
+ case "jfif":
33
+ case "png":
34
+ case "tif":
35
+ case "tiff":
36
+ case "tga":
37
+ case "dds":
38
+ return FileTypeInternal.Image;
39
+ case "swf":
40
+ return FileTypeInternal.Swf;
41
+ case "xls":
42
+ case "xlsx":
43
+ return FileTypeInternal.ExcelSheet;
44
+ case "doc":
45
+ case "docx":
46
+ return FileTypeInternal.WordDocument;
47
+ case "pdf":
48
+ return FileTypeInternal.Pdf;
49
+ case "txt":
50
+ return FileTypeInternal.TextFile;
51
+ case "exe":
52
+ return FileTypeInternal.Executable;
53
+ default:
54
+ return FileTypeInternal.Undefined;
55
+ }
56
+ }
57
+ // Checks if filetype of given file is of type image. Possible filetypes: image/png, image/bmp, image/jpeg, etc.
58
+ static IsImageFile(file) {
59
+ if (!file) {
60
+ return false;
61
+ }
62
+ let fileName;
63
+ let mimeType;
64
+ if (file instanceof CoDocument) {
65
+ fileName = file.fileName;
66
+ mimeType = file.mimeTypeInternal;
67
+ }
68
+ else {
69
+ fileName = file.name;
70
+ mimeType = file.type;
71
+ }
72
+ if (mimeType !== "") {
73
+ return mimeType.startsWith('image/');
74
+ }
75
+ else {
76
+ return (FileUtils.FileNameToFileTypeInternal(fileName) === FileTypeInternal.Image);
77
+ }
78
+ }
79
+ // Try to determine the file type of given document. First attempt is by filetype, second by file name.
80
+ static GetGlobalFileType(document) {
81
+ if (!document) {
82
+ return FileTypeInternal.Undefined;
83
+ }
84
+ if (document.mimeType !== "") {
85
+ switch (document.mimeType) {
86
+ case "application/pdf":
87
+ return FileTypeInternal.Pdf;
88
+ case "application/msword":
89
+ return FileTypeInternal.WordDocument;
90
+ case "application/excel":
91
+ case "application/vnd.ms-excel":
92
+ case "application/x-excel":
93
+ case "application/x-msexcel":
94
+ return FileTypeInternal.ExcelSheet;
95
+ case "text/plain":
96
+ case "application/plain":
97
+ return FileTypeInternal.TextFile;
98
+ default:
99
+ return FileTypeInternal.Undefined;
100
+ }
101
+ }
102
+ else {
103
+ return FileUtils.FileNameToFileTypeInternal(document.fileName);
104
+ }
105
+ }
106
+ // Checks filesize of given file and returns false if size exceeds maximum upload size.
107
+ static CheckMaxUploadSize(file) {
108
+ let fileSize = 0;
109
+ if (file instanceof CoDocument) {
110
+ fileSize = NumberUtils.ParseInt(file.fileSize);
111
+ }
112
+ else {
113
+ fileSize = file.size;
114
+ }
115
+ return (fileSize <= MaxUploadSize);
116
+ }
117
+ static ConvertFileToDataUri(file) {
118
+ return __awaiter(this, void 0, void 0, function* () {
119
+ if (file) {
120
+ return new Promise((resolve) => {
121
+ const fileReader = new FileReader();
122
+ fileReader.onload = () => {
123
+ resolve(fileReader.result);
124
+ };
125
+ fileReader.readAsDataURL(file);
126
+ });
127
+ }
128
+ });
129
+ }
130
+ // Returns the given dataUri string stripped of the mimetype part.
131
+ static StripMimeStringFromDataUri(dataUri) {
132
+ if (!dataUri) {
133
+ return "";
134
+ }
135
+ const mimeString = this.GetMimeStringFromDataUri(dataUri);
136
+ return dataUri.substr(mimeString.length + 1);
137
+ }
138
+ static GetMimeStringFromDataUri(dataUri) {
139
+ if (!dataUri) {
140
+ return "";
141
+ }
142
+ return dataUri.split(',')[0];
143
+ }
144
+ // Converts given string data to an ArrayBuffer.
145
+ static ConvertStringToArrayBuffer(stringData) {
146
+ if (!stringData) {
147
+ return undefined;
148
+ }
149
+ const arrayBuffer = new ArrayBuffer(stringData.length);
150
+ const bufView = new Uint8Array(arrayBuffer);
151
+ for (let i = 0, len = stringData.length; i < len; i++) {
152
+ bufView[i] = stringData.charCodeAt(i);
153
+ }
154
+ return bufView;
155
+ }
156
+ static ConvertByteArrayToString(byteArray) {
157
+ let str = "";
158
+ if (byteArray) {
159
+ for (let i = 0, len = byteArray.length; i < len; i++) {
160
+ str += String.fromCharCode(byteArray[i]);
161
+ }
162
+ }
163
+ return str;
164
+ }
165
+ // Returns true if given string contains a data-uri/base64.
166
+ static StringContainsDataUri(str) {
167
+ if (!str) {
168
+ return false;
169
+ }
170
+ const mimeString = str.split(',')[0];
171
+ return mimeString.indexOf('base64') > -1;
172
+ }
173
+ /**
174
+ * There is some discrepancy regarding locations of h3d objects
175
+ * Therefor we need to (temporarily?!) fix the content url
176
+ * Also we need to change some additionals
177
+ */
178
+ static FixAssetUrl(assetUrl) {
179
+ if (!assetUrl) {
180
+ return "";
181
+ }
182
+ let fixedUrl;
183
+ if (assetUrl.indexOf('_webplayer') === -1) {
184
+ fixedUrl = assetUrl.replace('.unity3d', '_webplayer.ione3d');
185
+ }
186
+ else {
187
+ fixedUrl = assetUrl.replace('_webplayer.unity3d', '_webplayer.ione3d');
188
+ }
189
+ fixedUrl = fixedUrl.replace('content/', 'content43/');
190
+ if (!fixedUrl.endsWith('.gz')) {
191
+ fixedUrl = fixedUrl.concat('.gz');
192
+ }
193
+ return fixedUrl;
194
+ }
195
+ // Return the mimetype of the given filename.
196
+ static MimeTypeFromFilename(fileName) {
197
+ const regEx = /(?:\.([^.]+))?$/; // regex to find extension
198
+ const extension = regEx.exec(fileName)[1];
199
+ switch (extension) {
200
+ case "jpg":
201
+ case "jpeg":
202
+ return "image/jpeg";
203
+ case "png":
204
+ return "image/png";
205
+ case "bmp":
206
+ return "image/bmp";
207
+ }
208
+ }
209
+ static DownloadFile(fileName, content, mimeType = "text/plain") {
210
+ const element = document.createElement('a');
211
+ element.setAttribute("href", "data:" + mimeType + ";charset=utf-8," + encodeURIComponent(content));
212
+ element.setAttribute("download", fileName);
213
+ element.style.display = "none";
214
+ document.body.appendChild(element);
215
+ element.click();
216
+ document.body.removeChild(element);
217
+ }
218
+ // Returns the contents of given file as a text string.
219
+ static ReadAsText(file) {
220
+ return new Promise((resolve) => {
221
+ const reader = new FileReader();
222
+ reader.readAsText(file);
223
+ reader.onloadend = (event) => {
224
+ if (event.target.readyState === 2) {
225
+ resolve(event.target.result);
226
+ }
227
+ };
228
+ });
229
+ }
230
+ static ReadFileAsNewCoDocument(file) {
231
+ return new Promise((resolve) => {
232
+ const reader = new FileReader();
233
+ reader.readAsDataURL(file);
234
+ reader.onloadend = (event) => {
235
+ if (event.target.readyState === 2) {
236
+ const coDocument = new CoDocument();
237
+ coDocument.fileSize = file.size.toString();
238
+ coDocument.mimeTypeInternal = file.type;
239
+ coDocument.mimeType = file.type;
240
+ coDocument.fileName = file.name;
241
+ coDocument.documentType = CoDocumentType.SaveAsDocument;
242
+ coDocument.fileType = FileUtils.IsImageFile(file) ? FileType.Image : FileType.Document;
243
+ coDocument.description = file.name;
244
+ coDocument.documentBody = FileUtils.StripMimeStringFromDataUri(event.target.result);
245
+ resolve(coDocument);
246
+ }
247
+ };
248
+ });
249
+ }
250
+ static GetExtensionFromDataUri(dataUri) {
251
+ const data = dataUri;
252
+ return data.replace(/(data:image\/)(.*?)(;base64.*)/gi, '$2');
253
+ }
254
+ static CreateDownloadFileNameFromBase64(dataUri) {
255
+ const ext = this.GetExtensionFromDataUri(dataUri);
256
+ return 'preview.' + ext;
257
+ }
258
+ static DownloadFromDataUri(dataUri, fileName) {
259
+ const link = document.createElement("a");
260
+ link.download = fileName;
261
+ link.href = dataUri;
262
+ document.body.appendChild(link);
263
+ link.click();
264
+ document.body.removeChild(link);
265
+ }
266
+ }
267
267
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmVjb21wb25lbnRzL3NyYy9saWIvY29yZS91dGlscy9maWxlLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE1BQU0sYUFBYSxHQUFXLE9BQU8sQ0FBQyxDQUFDLE1BQU07QUFFN0MsV0FBVztBQUNYLE1BQU0sT0FBTyxTQUFTO0lBRWxCLHNDQUFzQztJQUMvQixNQUFNLEtBQUssaUJBQWlCO1FBQy9CLE9BQU8sYUFBYSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7SUFDdkMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxZQUFvQixFQUFFLFFBQWdCO1FBQ3RFLE9BQU8sV0FBVyxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsUUFBUSxHQUFHLFVBQVUsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5RyxDQUFDO0lBRUQsc0hBQXNIO0lBQy9HLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxRQUFnQjtRQUNyRCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7U0FDckM7UUFDRCxNQUFNLFdBQVcsR0FBYSxRQUFRLENBQUMsS0FB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LENBQUMsTUFBTSxDQUFDLENBQUM7b0JBRXBGLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDdkI7WUFDTCxDQUFDLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxNQUFNLENBQUMsdUJBQXVCLENBQUMsT0FBZTtRQUNqRCxNQUFNLElBQUksR0FBVyxPQUFPLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTSxNQUFNLENBQUMsZ0NBQWdDLENBQUMsT0FBZTtRQUMxRCxNQUFNLEdBQUcsR0FBVyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUQsT0FBTyxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQzVCLENBQUM7SUFFTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBZSxFQUFFLFFBQWdCO1FBQy9ELE1BQU0sSUFBSSxHQUFRLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7UUFDcEIsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmlsZVR5cGVJbnRlcm5hbCB9IGZyb20gJy4uL2VudW0vZmlsZS10eXBlLWludGVybmFsLmVudW0nO1xyXG5pbXBvcnQgeyBDb0RvY3VtZW50IH0gZnJvbSAnLi4vbW9kZWwvY28tZG9jdW1lbnQuYm8nO1xyXG5pbXBvcnQgeyBDb0RvY3VtZW50VHlwZSB9IGZyb20gJy4uL2VudW0vY28tZG9jdW1lbnQtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgRmlsZVR5cGUgfSBmcm9tICcuLi9lbnVtL2ZpbGUtdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgU3RyaW5nVXRpbHMgfSBmcm9tICcuL3N0cmluZy11dGlscyc7XHJcbmltcG9ydCB7IE51bWJlclV0aWxzIH0gZnJvbSAnLi9udW1iZXItdXRpbHMnO1xyXG5cclxuY29uc3QgTWF4VXBsb2FkU2l6ZTogbnVtYmVyID0gMzE0NTcyODsgLy8gM01iXHJcblxyXG4vLyBAZHluYW1pY1xyXG5leHBvcnQgY2xhc3MgRmlsZVV0aWxzIHtcclxuXHJcbiAgICAvLyBSZXR1cm5zIE1heFVwbG9hZFNpemUgaW4gTWVnYWJ5dGVzLlxyXG4gICAgcHVibGljIHN0YXRpYyBnZXQgTWF4VXBsb2FkU2l6ZUluTWIoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gTWF4VXBsb2FkU2l6ZSAvIDEwMjQgLyAxMDI0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgRG9jdW1lbnRCb2R5VG9EYXRhVXJpKGRvY3VtZW50Qm9keTogc3RyaW5nLCBtaW1lVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gU3RyaW5nVXRpbHMuSXNTdHJpbmdXaXRoTGVuZ3RoKGRvY3VtZW50Qm9keSkgPyBcImRhdGE6XCIgKyBtaW1lVHlwZSArIFwiO2Jhc2U2NCxcIiArIGRvY3VtZW50Qm9keSA6IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmV0dXJucyB0aGUgZmlsZSB0eXBlIG9mIHRoZSBnaXZlbiBmaWxlLCBieSBsb29raW5nIGF0IGl0cyBleHRlbnNpb24uIFJldHVybnMgRmlsZVR5cGUuVW5kZWZpbmVkIGlmIG5vdCByZWNvZ25pc2VkLlxyXG4gICAgcHVibGljIHN0YXRpYyBGaWxlTmFtZVRvRmlsZVR5cGVJbnRlcm5hbChmaWxlTmFtZTogc3RyaW5nKTogRmlsZVR5cGVJbnRlcm5hbCB7XHJcbiAgICAgICAgaWYgKCFmaWxlTmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gRmlsZVR5cGVJbnRlcm5hbC5VbmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN0cmluZ1BhcnRzOiBzdHJpbmdbXSA9IGZpbGVOYW1lLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICBjb25zdCBleHRlbnNpb246IHN0cmluZyA9IHN0cmluZ1BhcnRzW3N0cmluZ1BhcnRzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIHN3aXRjaCAoZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY2FzZSBcInBkblwiOlxyXG4gICAgICAgICAgICBjYXNlIFwiYm1wXCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJnaWZcIjpcclxuICAgICAgICAgICAgY2FzZSBcImpwZ1wiOlxyXG4gICAgICAgICAgICBjYXNlIFwianBlZ1wiOlxyXG4gICAgICAgICAgICBjYXNlIFwianBlXCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJqZmlmXCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJwbmdcIjpcclxuICAgICAgICAgICAgY2FzZSBcInRpZlwiOlxyXG4gICAgICAgICAgICBjYXNlIFwidGlmZlwiOlxyXG4gICAgICAgICAgICBjYXNlIFwidGdhXCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJkZHNcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBGaWxlVHlwZUludGVybmFsLkltYWdlO1xyXG4gICAgICAgICAgICBjYXNlIFwic3dmXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsZVR5cGVJbnRlcm5hbC5Td2Y7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ4bHNcIjpcclxuICAgICAgICAgICAgY2FzZSBcInhsc3hcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBGaWxlVHlwZUludGVybmFsLkV4Y2VsU2hlZXQ7XHJcbiAgICAgICAgICAgIGNhc2UgXCJkb2NcIjpcclxuICAgICAgICAgICAgY2FzZSBcImRvY3hcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBGaWxlVHlwZUludGVybmFsLldvcmREb2N1bWVudDtcclxuICAgICAgICAgICAgY2FzZSBcInBkZlwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbGVUeXBlSW50ZXJuYWwuUGRmO1xyXG4gICAgICAgICAgICBjYXNlIFwidHh0XCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRmlsZVR5cGVJbnRlcm5hbC5UZXh0RmlsZTtcclxuICAgICAgICAgICAgY2FzZSBcImV4ZVwiOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEZpbGVUeXBlSW50ZXJuYWwuRXhlY3V0YWJsZTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBGaWxlVHlwZUludGVybmFsLlVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tzIGlmIGZpbGV0eXBlIG9mIGdpdmVuIGZpbGUgaXMgb2YgdHlwZSBpbWFnZS4gUG9zc2libGUgZmlsZXR5cGVzOiBpbWFnZS9wbmcsIGltYWdlL2JtcCwgaW1hZ2UvanBlZywgZXRjLlxyXG4gICAgcHVibGljIHN0YXRpYyBJc0ltYWdlRmlsZShmaWxlOiBGaWxlIHwgQ29Eb2N1bWVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghZmlsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBmaWxlTmFtZTogc3RyaW5nO1xyXG4gICAgICAgIGxldCBtaW1lVHlwZTogc3RyaW5nO1xyXG4gICAgICAgIGlmIChmaWxlIGluc3RhbmNlb2YgQ29Eb2N1bWVudCkge1xyXG4gICAgICAgICAgICBmaWxlTmFtZSA9IGZpbGUuZmlsZU5hbWU7XHJcbiAgICAgICAgICAgIG1pbWVUeXBlID0gZmlsZS5taW1lVHlwZUludGVybmFsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZS5uYW1lO1xyXG4gICAgICAgICAgICBtaW1lVHlwZSA9IGZpbGUudHlwZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1pbWVUeXBlICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtaW1lVHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gKEZpbGVVdGlscy5GaWxlTmFtZVRvRmlsZVR5cGVJbnRlcm5hbChmaWxlTmFtZSkgPT09IEZpbGVUeXBlSW50ZXJuYWwuSW1hZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBUcnkgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlIHR5cGUgb2YgZ2l2ZW4gZG9jdW1lbnQuIEZpcnN0IGF0dGVtcHQgaXMgYnkgZmlsZXR5cGUsIHNlY29uZCBieSBmaWxlIG5hbWUuXHJcbiAgICBwdWJsaWMgc3RhdGljIEdldEdsb2JhbEZpbGVUeXBlKGRvY3VtZW50OiBDb0RvY3VtZW50KTogRmlsZVR5cGVJbnRlcm5hbCB7XHJcbiAgICAgICAgaWYgKCFkb2N1bWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm4gRmlsZVR5cGVJbnRlcm5hbC5VbmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkb2N1bWVudC5taW1lVHlwZSAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGRvY3VtZW50Lm1pbWVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiYXBwbGljYXRpb24vcGRmXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZpbGVUeXBlSW50ZXJuYWwuUGRmO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImFwcGxpY2F0aW9uL21zd29yZFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBGaWxlVHlwZUludGVybmFsLldvcmREb2N1bWVudDtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJhcHBsaWNhdGlvbi9leGNlbFwiOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbFwiOlxyXG4gICAgICAgICAgICAgICAgY2FzZSBcImFwcGxpY2F0aW9uL3gtZXhjZWxcIjpcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJhcHBsaWNhdGlvbi94LW1zZXhjZWxcIjpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmlsZVR5cGVJbnRlcm5hbC5FeGNlbFNoZWV0O1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcInRleHQvcGxhaW5cIjpcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJhcHBsaWNhdGlvbi9wbGFpblwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBGaWxlVHlwZUludGVybmFsLlRleHRGaWxlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmlsZVR5cGVJbnRlcm5hbC5VbmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gRmlsZVV0aWxzLkZpbGVOYW1lVG9GaWxlVHlwZUludGVybmFsKGRvY3VtZW50LmZpbGVOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2tzIGZpbGVzaXplIG9mIGdpdmVuIGZpbGUgYW5kIHJldHVybnMgZmFsc2UgaWYgc2l6ZSBleGNlZWRzIG1heGltdW0gdXBsb2FkIHNpemUuXHJcbiAgICBwdWJsaWMgc3RhdGljIENoZWNrTWF4VXBsb2FkU2l6ZShmaWxlOiBDb0RvY3VtZW50IHwgRmlsZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBmaWxlU2l6ZTogbnVtYmVyID0gMDtcclxuICAgICAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIENvRG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgZmlsZVNpemUgPSBOdW1iZXJVdGlscy5QYXJzZUludChmaWxlLmZpbGVTaXplKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWxlU2l6ZSA9IGZpbGUuc2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChmaWxlU2l6ZSA8PSBNYXhVcGxvYWRTaXplKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGFzeW5jIENvbnZlcnRGaWxlVG9EYXRhVXJpKGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGlmIChmaWxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlUmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoPHN0cmluZz4gZmlsZVJlYWRlci5yZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFJldHVybnMgdGhlIGdpdmVuIGRhdGFVcmkgc3RyaW5nIHN0cmlwcGVkIG9mIHRoZSBtaW1ldHlwZSBwYXJ0LlxyXG4gICAgcHVibGljIHN0YXRpYyBTdHJpcE1pbWVTdHJpbmdGcm9tRGF0YVVyaShkYXRhVXJpOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghZGF0YVVyaSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1pbWVTdHJpbmc6IHN0cmluZyA9IHRoaXMuR2V0TWltZVN0cmluZ0Zyb21EYXRhVXJpKGRhdGFVcmkpO1xyXG4gICAgICAgIHJldHVybiBkYXRhVXJpLnN1YnN0cihtaW1lU3RyaW5nLmxlbmd0aCArIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgR2V0TWltZVN0cmluZ0Zyb21EYXRhVXJpKGRhdGFVcmk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCFkYXRhVXJpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGRhdGFVcmkuc3BsaXQoJywnKVswXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDb252ZXJ0cyBnaXZlbiBzdHJpbmcgZGF0YSB0byBhbiBBcnJheUJ1ZmZlci5cclxuICAgIHB1YmxpYyBzdGF0aWMgQ29udmVydFN0cmluZ1RvQXJyYXlCdWZmZXIoc3RyaW5nRGF0YTogc3RyaW5nKTogVWludDhBcnJheSB7XHJcbiAgICAgICAgaWYgKCFzdHJpbmdEYXRhKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzdHJpbmdEYXRhLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgYnVmVmlldzogVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtcclxuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwLCBsZW46IG51bWJlciA9IHN0cmluZ0RhdGEubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgYnVmVmlld1tpXSA9IHN0cmluZ0RhdGEuY2hhckNvZGVBdChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJ1ZlZpZXc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBDb252ZXJ0Qnl0ZUFycmF5VG9TdHJpbmcoYnl0ZUFycmF5OiBudW1iZXJbXSk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHN0cjogc3RyaW5nID0gXCJcIjtcclxuICAgICAgICBpZiAoYnl0ZUFycmF5KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDAsIGxlbjogbnVtYmVyID0gYnl0ZUFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlQXJyYXlbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmV0dXJucyB0cnVlIGlmIGdpdmVuIHN0cmluZyBjb250YWlucyBhIGRhdGEtdXJpL2Jhc2U2NC5cclxuICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nQ29udGFpbnNEYXRhVXJpKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCFzdHIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtaW1lU3RyaW5nOiBzdHJpbmcgPSBzdHIuc3BsaXQoJywnKVswXTtcclxuICAgICAgICByZXR1cm4gbWltZVN0cmluZy5pbmRleE9mKCdiYXNlNjQnKSA+IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlcmUgaXMgc29tZSBkaXNjcmVwYW5jeSByZWdhcmRpbmcgbG9jYXRpb25zIG9mIGgzZCBvYmplY3RzXHJcbiAgICAgKiBUaGVyZWZvciB3ZSBuZWVkIHRvICh0ZW1wb3JhcmlseT8hKSBmaXggdGhlIGNvbnRlbnQgdXJsXHJcbiAgICAgKiBBbHNvIHdlIG5lZWQgdG8gY2hhbmdlIHNvbWUgYWRkaXRpb25hbHNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBGaXhBc3NldFVybChhc3NldFVybDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIWFzc2V0VXJsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZml4ZWRVcmw6IHN0cmluZztcclxuICAgICAgICBpZiAoYXNzZXRVcmwuaW5kZXhPZignX3dlYnBsYXllcicpID09PSAtMSkge1xyXG4gICAgICAgICAgICBmaXhlZFVybCA9IGFzc2V0VXJsLnJlcGxhY2UoJy51bml0eTNkJywgJ193ZWJwbGF5ZXIuaW9uZTNkJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZml4ZWRVcmwgPSBhc3NldFVybC5yZXBsYWNlKCdfd2VicGxheWVyLnVuaXR5M2QnLCAnX3dlYnBsYXllci5pb25lM2QnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZml4ZWRVcmwgPSBmaXhlZFVybC5yZXBsYWNlKCdjb250ZW50LycsICdjb250ZW50NDMvJyk7XHJcbiAgICAgICAgaWYgKCFmaXhlZFVybC5lbmRzV2l0aCgnLmd6JykpIHtcclxuICAgICAgICAgICAgZml4ZWRVcmwgPSBmaXhlZFVybC5jb25jYXQoJy5neicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZml4ZWRVcmw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmV0dXJuIHRoZSBtaW1ldHlwZSBvZiB0aGUgZ2l2ZW4gZmlsZW5hbWUuXHJcbiAgICBwdWJsaWMgc3RhdGljIE1pbWVUeXBlRnJvbUZpbGVuYW1lKGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHJlZ0V4OiBSZWdFeHAgPSAvKD86XFwuKFteLl0rKSk/JC87IC8vIHJlZ2V4IHRvIGZpbmQgZXh0ZW5zaW9uXHJcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uOiBhbnkgPSByZWdFeC5leGVjKGZpbGVOYW1lKVsxXTtcclxuICAgICAgICBzd2l0Y2ggKGV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICBjYXNlIFwianBnXCI6XHJcbiAgICAgICAgICAgIGNhc2UgXCJqcGVnXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJpbWFnZS9qcGVnXCI7XHJcbiAgICAgICAgICAgIGNhc2UgXCJwbmdcIjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImltYWdlL3BuZ1wiO1xyXG4gICAgICAgICAgICBjYXNlIFwiYm1wXCI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJpbWFnZS9ibXBcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBEb3dubG9hZEZpbGUoXHJcbiAgICAgICAgZmlsZU5hbWU6IHN0cmluZyxcclxuICAgICAgICBjb250ZW50OiBzdHJpbmcsXHJcbiAgICAgICAgbWltZVR5cGU6IHN0cmluZyA9IFwidGV4dC9wbGFpblwiXHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50OiBIVE1MQW5jaG9yRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImhyZWZcIiwgXCJkYXRhOlwiICsgbWltZVR5cGUgKyBcIjtjaGFyc2V0PXV0Zi04LFwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGNvbnRlbnQpKTtcclxuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIGZpbGVOYW1lKTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50KTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5jbGljaygpO1xyXG5cclxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJldHVybnMgdGhlIGNvbnRlbnRzIG9mIGdpdmVuIGZpbGUgYXMgYSB0ZXh0IHN0cmluZy5cclxuICAgIHB1YmxpYyBzdGF0aWMgUmVhZEFzVGV4dChmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XHJcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldC5yZWFkeVN0YXRlID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShldmVudC50YXJnZXQucmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIFJlYWRGaWxlQXNOZXdDb0RvY3VtZW50KGZpbGU6IEZpbGUpOiBQcm9taXNlPENvRG9jdW1lbnQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8Q29Eb2N1bWVudD4oKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQucmVhZHlTdGF0ZSA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvRG9jdW1lbnQ6IENvRG9jdW1lbnQgPSBuZXcgQ29Eb2N1bWVudCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb0RvY3VtZW50LmZpbGVTaXplID0gZmlsZS5zaXplLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29Eb2N1bWVudC5taW1lVHlwZUludGVybmFsID0gZmlsZS50eXBlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvRG9jdW1lbnQubWltZVR5cGUgPSBmaWxlLnR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29Eb2N1bWVudC5maWxlTmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBjb0RvY3VtZW50LmRvY3VtZW50VHlwZSA9IENvRG9jdW1lbnRUeXBlLlNhdmVBc0RvY3VtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvRG9jdW1lbnQuZmlsZVR5cGUgPSBGaWxlVXRpbHMuSXNJbWFnZUZpbGUoZmlsZSkgPyBGaWxlVHlwZS5JbWFnZSA6IEZpbGVUeXBlLkRvY3VtZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvRG9jdW1lbnQuZGVzY3JpcHRpb24gPSBmaWxlLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29Eb2N1bWVudC5kb2N1bWVudEJvZHkgPSBGaWxlVXRpbHMuU3RyaXBNaW1lU3RyaW5nRnJvbURhdGFVcmkoZXZlbnQudGFyZ2V0LnJlc3VsdCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY29Eb2N1bWVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBHZXRFeHRlbnNpb25Gcm9tRGF0YVVyaShkYXRhVXJpOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IHN0cmluZyA9IGRhdGFVcmk7XHJcbiAgICAgICAgcmV0dXJuIGRhdGEucmVwbGFjZSgvKGRhdGE6aW1hZ2VcXC8pKC4qPykoO2Jhc2U2NC4qKS9naSwgJyQyJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBDcmVhdGVEb3dubG9hZEZpbGVOYW1lRnJvbUJhc2U2NChkYXRhVXJpOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGV4dDogc3RyaW5nID0gdGhpcy5HZXRFeHRlbnNpb25Gcm9tRGF0YVVyaShkYXRhVXJpKTtcclxuICAgICAgICByZXR1cm4gJ3ByZXZpZXcuJyArIGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIERvd25sb2FkRnJvbURhdGFVcmkoZGF0YVVyaTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbGluazogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lO1xyXG4gICAgICAgIGxpbmsuaHJlZiA9IGRhdGFVcmk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgICAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICAgIH1cclxufVxyXG4iXX0=