valtech-components 2.0.404 → 2.0.406

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 (280) hide show
  1. package/README.md +71 -0
  2. package/esm2022/lib/components/atoms/avatar/avatar.component.mjs +4 -4
  3. package/esm2022/lib/components/atoms/avatar/types.mjs +1 -1
  4. package/esm2022/lib/components/atoms/box/box.component.mjs +4 -4
  5. package/esm2022/lib/components/atoms/box/types.mjs +1 -1
  6. package/esm2022/lib/components/atoms/button/button.component.mjs +4 -4
  7. package/esm2022/lib/components/atoms/button/factory.mjs +1 -1
  8. package/esm2022/lib/components/atoms/countdown/countdown.component.mjs +343 -0
  9. package/esm2022/lib/components/atoms/countdown/types.mjs +27 -0
  10. package/esm2022/lib/components/atoms/display/display.component.mjs +4 -4
  11. package/esm2022/lib/components/atoms/display/types.mjs +1 -1
  12. package/esm2022/lib/components/atoms/divider/divider.component.mjs +4 -4
  13. package/esm2022/lib/components/atoms/divider/types.mjs +1 -1
  14. package/esm2022/lib/components/atoms/fab/fab.component.mjs +152 -0
  15. package/esm2022/lib/components/atoms/fab/types.mjs +2 -0
  16. package/esm2022/lib/components/atoms/href/href.component.mjs +4 -4
  17. package/esm2022/lib/components/atoms/href/types.mjs +1 -1
  18. package/esm2022/lib/components/atoms/icon/icon.component.mjs +4 -4
  19. package/esm2022/lib/components/atoms/icon/types.mjs +1 -1
  20. package/esm2022/lib/components/atoms/image/image.component.mjs +6 -6
  21. package/esm2022/lib/components/atoms/image/types.mjs +1 -1
  22. package/esm2022/lib/components/atoms/price-tag/price-tag.component.mjs +245 -0
  23. package/esm2022/lib/components/atoms/price-tag/types.mjs +15 -0
  24. package/esm2022/lib/components/atoms/progress-bar/progress-bar.component.mjs +4 -4
  25. package/esm2022/lib/components/atoms/progress-bar/types.mjs +1 -1
  26. package/esm2022/lib/components/atoms/progress-ring/progress-ring.component.mjs +149 -0
  27. package/esm2022/lib/components/atoms/progress-ring/types.mjs +2 -0
  28. package/esm2022/lib/components/atoms/qr-code/qr-code.component.mjs +417 -0
  29. package/esm2022/lib/components/atoms/qr-code/types.mjs +2 -0
  30. package/esm2022/lib/components/atoms/skeleton/skeleton.component.mjs +193 -0
  31. package/esm2022/lib/components/atoms/skeleton/types.mjs +13 -0
  32. package/esm2022/lib/components/atoms/text/text.component.mjs +4 -4
  33. package/esm2022/lib/components/atoms/text/types.mjs +1 -1
  34. package/esm2022/lib/components/atoms/title/title.component.mjs +4 -4
  35. package/esm2022/lib/components/atoms/title/types.mjs +1 -1
  36. package/esm2022/lib/components/molecules/accordion/accordion.component.mjs +139 -0
  37. package/esm2022/lib/components/molecules/accordion/types.mjs +2 -0
  38. package/esm2022/lib/components/molecules/action-header/action-header.component.mjs +4 -4
  39. package/esm2022/lib/components/molecules/action-header/types.mjs +1 -1
  40. package/esm2022/lib/components/molecules/alert-box/alert-box.component.mjs +4 -4
  41. package/esm2022/lib/components/molecules/alert-box/types.mjs +1 -1
  42. package/esm2022/lib/components/molecules/breadcrumb/breadcrumb.component.mjs +137 -0
  43. package/esm2022/lib/components/molecules/breadcrumb/types.mjs +2 -0
  44. package/esm2022/lib/components/molecules/button-group/button-group.component.mjs +4 -4
  45. package/esm2022/lib/components/molecules/button-group/types.mjs +1 -1
  46. package/esm2022/lib/components/molecules/card/card.component.mjs +5 -5
  47. package/esm2022/lib/components/molecules/card/types.mjs +1 -1
  48. package/esm2022/lib/components/molecules/check-input/check-input.component.mjs +4 -4
  49. package/esm2022/lib/components/molecules/chip-group/chip-group.component.mjs +174 -0
  50. package/esm2022/lib/components/molecules/chip-group/types.mjs +2 -0
  51. package/esm2022/lib/components/molecules/code-display/code-display.component.mjs +4 -4
  52. package/esm2022/lib/components/molecules/code-display/types.mjs +1 -1
  53. package/esm2022/lib/components/molecules/command-display/command-display.component.mjs +4 -4
  54. package/esm2022/lib/components/molecules/command-display/types.mjs +1 -1
  55. package/esm2022/lib/components/molecules/comment/comment.component.mjs +634 -0
  56. package/esm2022/lib/components/molecules/comment/types.mjs +2 -0
  57. package/esm2022/lib/components/molecules/comment-input/comment-input.component.mjs +4 -4
  58. package/esm2022/lib/components/molecules/content-loader/content-loader.component.mjs +4 -4
  59. package/esm2022/lib/components/molecules/content-loader/types.mjs +1 -1
  60. package/esm2022/lib/components/molecules/currency-input/currency-input.component.mjs +368 -0
  61. package/esm2022/lib/components/molecules/currency-input/types.mjs +18 -0
  62. package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +5 -5
  63. package/esm2022/lib/components/molecules/date-range-input/date-range-input.component.mjs +418 -0
  64. package/esm2022/lib/components/molecules/date-range-input/types.mjs +2 -0
  65. package/esm2022/lib/components/molecules/email-input/email-input.component.mjs +4 -4
  66. package/esm2022/lib/components/molecules/expandable-text/expandable-text.component.mjs +4 -4
  67. package/esm2022/lib/components/molecules/expandable-text/types.mjs +1 -1
  68. package/esm2022/lib/components/molecules/file-input/file-input.component.mjs +4 -4
  69. package/esm2022/lib/components/molecules/glow-card/glow-card.component.mjs +279 -0
  70. package/esm2022/lib/components/molecules/glow-card/types.mjs +11 -0
  71. package/esm2022/lib/components/molecules/hint/hint.component.mjs +4 -4
  72. package/esm2022/lib/components/molecules/hour-input/hour-input.component.mjs +4 -4
  73. package/esm2022/lib/components/molecules/info/info.component.mjs +4 -4
  74. package/esm2022/lib/components/molecules/info/types.mjs +1 -1
  75. package/esm2022/lib/components/molecules/language-selector/language-selector.component.mjs +4 -4
  76. package/esm2022/lib/components/molecules/language-selector/types.mjs +1 -1
  77. package/esm2022/lib/components/molecules/layered-card/layered-card.component.mjs +4 -4
  78. package/esm2022/lib/components/molecules/layered-card/types.mjs +1 -1
  79. package/esm2022/lib/components/molecules/link/link.component.mjs +4 -4
  80. package/esm2022/lib/components/molecules/link/types.mjs +1 -1
  81. package/esm2022/lib/components/molecules/links-cake/links-cake.component.mjs +4 -4
  82. package/esm2022/lib/components/molecules/links-cake/types.mjs +1 -1
  83. package/esm2022/lib/components/molecules/multi-select-search/multi-select-search.component.mjs +5 -5
  84. package/esm2022/lib/components/molecules/notes-box/notes-box.component.mjs +4 -4
  85. package/esm2022/lib/components/molecules/notes-box/types.mjs +1 -1
  86. package/esm2022/lib/components/molecules/number-from-to/number-from-to.component.mjs +4 -4
  87. package/esm2022/lib/components/molecules/number-input/number-input.component.mjs +4 -4
  88. package/esm2022/lib/components/molecules/number-stepper/number-stepper.component.mjs +377 -0
  89. package/esm2022/lib/components/molecules/number-stepper/types.mjs +2 -0
  90. package/esm2022/lib/components/molecules/pagination/pagination.component.mjs +253 -0
  91. package/esm2022/lib/components/molecules/pagination/types.mjs +2 -0
  92. package/esm2022/lib/components/molecules/participant-card/participant-card.component.mjs +486 -0
  93. package/esm2022/lib/components/molecules/participant-card/types.mjs +21 -0
  94. package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +4 -4
  95. package/esm2022/lib/components/molecules/phone-input/phone-input.component.mjs +336 -0
  96. package/esm2022/lib/components/molecules/phone-input/types.mjs +19 -0
  97. package/esm2022/lib/components/molecules/pill/pill.component.mjs +4 -4
  98. package/esm2022/lib/components/molecules/pill/types.mjs +1 -1
  99. package/esm2022/lib/components/molecules/pin-input/pin-input.component.mjs +4 -4
  100. package/esm2022/lib/components/molecules/plain-code-box/plain-code-box.component.mjs +4 -4
  101. package/esm2022/lib/components/molecules/plain-code-box/types.mjs +1 -1
  102. package/esm2022/lib/components/molecules/popover-selector/popover-selector.component.mjs +5 -5
  103. package/esm2022/lib/components/molecules/popover-selector/types.mjs +1 -1
  104. package/esm2022/lib/components/molecules/progress-status/progress-status.component.mjs +4 -4
  105. package/esm2022/lib/components/molecules/progress-status/types.mjs +1 -1
  106. package/esm2022/lib/components/molecules/prompter/prompter.component.mjs +4 -4
  107. package/esm2022/lib/components/molecules/prompter/types.mjs +1 -1
  108. package/esm2022/lib/components/molecules/quote-box/quote-box.component.mjs +155 -0
  109. package/esm2022/lib/components/molecules/radio-input/radio-input.component.mjs +5 -5
  110. package/esm2022/lib/components/molecules/raffle-status-card/raffle-status-card.component.mjs +484 -0
  111. package/esm2022/lib/components/molecules/raffle-status-card/types.mjs +23 -0
  112. package/esm2022/lib/components/molecules/range-input/range-input.component.mjs +148 -0
  113. package/esm2022/lib/components/molecules/range-input/types.mjs +2 -0
  114. package/esm2022/lib/components/molecules/rating/rating.component.mjs +149 -0
  115. package/esm2022/lib/components/molecules/rating/types.mjs +2 -0
  116. package/esm2022/lib/components/molecules/searchbar/searchbar.component.mjs +4 -4
  117. package/esm2022/lib/components/molecules/segment-control/segment-control.component.mjs +145 -0
  118. package/esm2022/lib/components/molecules/segment-control/types.mjs +2 -0
  119. package/esm2022/lib/components/molecules/select-input/select-input.component.mjs +5 -5
  120. package/esm2022/lib/components/molecules/select-search/select-search.component.mjs +5 -5
  121. package/esm2022/lib/components/molecules/share-buttons/share-buttons.component.mjs +277 -0
  122. package/esm2022/lib/components/molecules/share-buttons/types.mjs +88 -0
  123. package/esm2022/lib/components/molecules/stats-card/stats-card.component.mjs +165 -0
  124. package/esm2022/lib/components/molecules/stats-card/types.mjs +2 -0
  125. package/esm2022/lib/components/molecules/stepper/stepper.component.mjs +239 -0
  126. package/esm2022/lib/components/molecules/stepper/types.mjs +2 -0
  127. package/esm2022/lib/components/molecules/tabs/tabs.component.mjs +135 -0
  128. package/esm2022/lib/components/molecules/tabs/types.mjs +2 -0
  129. package/esm2022/lib/components/molecules/text-input/text-input.component.mjs +4 -4
  130. package/esm2022/lib/components/molecules/textarea-input/textarea-input.component.mjs +204 -0
  131. package/esm2022/lib/components/molecules/textarea-input/types.mjs +2 -0
  132. package/esm2022/lib/components/molecules/ticket-grid/ticket-grid.component.mjs +497 -0
  133. package/esm2022/lib/components/molecules/ticket-grid/types.mjs +11 -0
  134. package/esm2022/lib/components/molecules/timeline/timeline.component.mjs +140 -0
  135. package/esm2022/lib/components/molecules/timeline/types.mjs +2 -0
  136. package/esm2022/lib/components/molecules/title-block/title-block.component.mjs +4 -4
  137. package/esm2022/lib/components/molecules/title-block/types.mjs +1 -1
  138. package/esm2022/lib/components/molecules/toggle-input/toggle-input.component.mjs +89 -0
  139. package/esm2022/lib/components/molecules/toggle-input/types.mjs +2 -0
  140. package/esm2022/lib/components/molecules/winner-display/types.mjs +9 -0
  141. package/esm2022/lib/components/molecules/winner-display/winner-display.component.mjs +370 -0
  142. package/esm2022/lib/components/organisms/article/article.component.mjs +4 -4
  143. package/esm2022/lib/components/organisms/article/types.mjs +1 -1
  144. package/esm2022/lib/components/organisms/banner/banner.component.mjs +4 -4
  145. package/esm2022/lib/components/organisms/banner/types.mjs +1 -1
  146. package/esm2022/lib/components/organisms/comment-section/comment-section.component.mjs +578 -0
  147. package/esm2022/lib/components/organisms/comment-section/types.mjs +2 -0
  148. package/esm2022/lib/components/organisms/data-table/data-table.component.mjs +853 -0
  149. package/esm2022/lib/components/organisms/data-table/types.mjs +13 -0
  150. package/esm2022/lib/components/organisms/footer/footer.component.mjs +4 -4
  151. package/esm2022/lib/components/organisms/footer/types.mjs +1 -1
  152. package/esm2022/lib/components/organisms/form/factory.mjs +1 -1
  153. package/esm2022/lib/components/organisms/form/form-footer/form-footer.component.mjs +4 -4
  154. package/esm2022/lib/components/organisms/form/form.component.mjs +4 -4
  155. package/esm2022/lib/components/organisms/header/header.component.mjs +4 -4
  156. package/esm2022/lib/components/organisms/header/types.mjs +1 -1
  157. package/esm2022/lib/components/organisms/item-list/item-list.component.mjs +4 -4
  158. package/esm2022/lib/components/organisms/item-list/types.mjs +1 -1
  159. package/esm2022/lib/components/organisms/no-content/no-content.component.mjs +4 -4
  160. package/esm2022/lib/components/organisms/no-content/types.mjs +1 -1
  161. package/esm2022/lib/components/organisms/toolbar/toolbar.component.mjs +4 -4
  162. package/esm2022/lib/components/organisms/toolbar/types.mjs +1 -1
  163. package/esm2022/lib/components/organisms/wizard/types.mjs +1 -1
  164. package/esm2022/lib/components/organisms/wizard/wizard-footer/wizard-footer.component.mjs +4 -4
  165. package/esm2022/lib/components/organisms/wizard/wizard.component.mjs +4 -4
  166. package/esm2022/lib/components/templates/layout/layout.component.mjs +4 -4
  167. package/esm2022/lib/components/templates/simple/simple.component.mjs +5 -5
  168. package/esm2022/lib/components/templates/simple/types.mjs +1 -1
  169. package/esm2022/lib/components/types.mjs +22 -16
  170. package/esm2022/lib/services/confirmation-dialog/confirmation-dialog.service.mjs +180 -0
  171. package/esm2022/lib/services/confirmation-dialog/types.mjs +14 -0
  172. package/esm2022/lib/services/download.service.mjs +4 -4
  173. package/esm2022/lib/services/icons.service.mjs +4 -4
  174. package/esm2022/lib/services/in-app-browser.service.mjs +4 -4
  175. package/esm2022/lib/services/lang-provider/components/lang-settings.mjs +1 -1
  176. package/esm2022/lib/services/lang-provider/content.mjs +1 -1
  177. package/esm2022/lib/services/lang-provider/lang-provider.service.mjs +4 -4
  178. package/esm2022/lib/services/lang-provider/types.mjs +1 -1
  179. package/esm2022/lib/services/link-processor.service.mjs +4 -4
  180. package/esm2022/lib/services/local-storage.service.mjs +1 -1
  181. package/esm2022/lib/services/modal/modal.service.mjs +213 -0
  182. package/esm2022/lib/services/modal/simple-modal-content.component.mjs +133 -0
  183. package/esm2022/lib/services/modal/types.mjs +26 -0
  184. package/esm2022/lib/services/navigation.service.mjs +4 -4
  185. package/esm2022/lib/services/qr-generator/qr-generator.service.mjs +341 -0
  186. package/esm2022/lib/services/qr-generator/types.mjs +46 -0
  187. package/esm2022/lib/services/theme.service.mjs +4 -4
  188. package/esm2022/lib/services/toast.service.mjs +4 -4
  189. package/esm2022/lib/services/types.mjs +1 -1
  190. package/esm2022/lib/shared/constants/storage.mjs +1 -1
  191. package/esm2022/lib/shared/pipes/process-links.pipe.mjs +4 -4
  192. package/esm2022/lib/shared/utils/content.mjs +1 -1
  193. package/esm2022/lib/shared/utils/dom.mjs +1 -1
  194. package/esm2022/lib/shared/utils/form-defaults.mjs +1 -1
  195. package/esm2022/lib/shared/utils/simple-content.mjs +1 -1
  196. package/esm2022/lib/shared/utils/styles.mjs +1 -1
  197. package/esm2022/lib/shared/utils/text.mjs +1 -1
  198. package/esm2022/public-api.mjs +73 -3
  199. package/esm2022/valtech-components.mjs +1 -1
  200. package/fesm2022/valtech-components-simple-modal-content.component-DQhEgUmS.mjs +136 -0
  201. package/fesm2022/valtech-components-simple-modal-content.component-DQhEgUmS.mjs.map +1 -0
  202. package/fesm2022/valtech-components.mjs +14847 -4292
  203. package/fesm2022/valtech-components.mjs.map +1 -1
  204. package/lib/components/atoms/countdown/countdown.component.d.ts +38 -0
  205. package/lib/components/atoms/countdown/types.d.ts +108 -0
  206. package/lib/components/atoms/fab/fab.component.d.ts +16 -0
  207. package/lib/components/atoms/fab/types.d.ts +45 -0
  208. package/lib/components/atoms/price-tag/price-tag.component.d.ts +16 -0
  209. package/lib/components/atoms/price-tag/types.d.ts +59 -0
  210. package/lib/components/atoms/progress-ring/progress-ring.component.d.ts +20 -0
  211. package/lib/components/atoms/progress-ring/types.d.ts +24 -0
  212. package/lib/components/atoms/qr-code/qr-code.component.d.ts +36 -0
  213. package/lib/components/atoms/qr-code/types.d.ts +124 -0
  214. package/lib/components/atoms/skeleton/skeleton.component.d.ts +12 -0
  215. package/lib/components/atoms/skeleton/types.d.ts +29 -0
  216. package/lib/components/molecules/accordion/accordion.component.d.ts +19 -0
  217. package/lib/components/molecules/accordion/types.d.ts +47 -0
  218. package/lib/components/molecules/breadcrumb/breadcrumb.component.d.ts +22 -0
  219. package/lib/components/molecules/breadcrumb/types.d.ts +45 -0
  220. package/lib/components/molecules/chip-group/chip-group.component.d.ts +22 -0
  221. package/lib/components/molecules/chip-group/types.d.ts +65 -0
  222. package/lib/components/molecules/comment/comment.component.d.ts +42 -0
  223. package/lib/components/molecules/comment/types.d.ts +171 -0
  224. package/lib/components/molecules/currency-input/currency-input.component.d.ts +43 -0
  225. package/lib/components/molecules/currency-input/types.d.ts +96 -0
  226. package/lib/components/molecules/date-range-input/date-range-input.component.d.ts +42 -0
  227. package/lib/components/molecules/date-range-input/types.d.ts +109 -0
  228. package/lib/components/molecules/glow-card/glow-card.component.d.ts +51 -0
  229. package/lib/components/molecules/glow-card/types.d.ts +92 -0
  230. package/lib/components/molecules/number-stepper/number-stepper.component.d.ts +34 -0
  231. package/lib/components/molecules/number-stepper/types.d.ts +88 -0
  232. package/lib/components/molecules/pagination/pagination.component.d.ts +15 -0
  233. package/lib/components/molecules/pagination/types.d.ts +41 -0
  234. package/lib/components/molecules/participant-card/participant-card.component.d.ts +26 -0
  235. package/lib/components/molecules/participant-card/types.d.ts +132 -0
  236. package/lib/components/molecules/phone-input/phone-input.component.d.ts +38 -0
  237. package/lib/components/molecules/phone-input/types.d.ts +98 -0
  238. package/lib/components/molecules/quote-box/quote-box.component.d.ts +26 -0
  239. package/lib/components/molecules/raffle-status-card/raffle-status-card.component.d.ts +22 -0
  240. package/lib/components/molecules/raffle-status-card/types.d.ts +108 -0
  241. package/lib/components/molecules/range-input/range-input.component.d.ts +30 -0
  242. package/lib/components/molecules/range-input/types.d.ts +59 -0
  243. package/lib/components/molecules/rating/rating.component.d.ts +17 -0
  244. package/lib/components/molecules/rating/types.d.ts +41 -0
  245. package/lib/components/molecules/segment-control/segment-control.component.d.ts +30 -0
  246. package/lib/components/molecules/segment-control/types.d.ts +46 -0
  247. package/lib/components/molecules/share-buttons/share-buttons.component.d.ts +22 -0
  248. package/lib/components/molecules/share-buttons/types.d.ts +108 -0
  249. package/lib/components/molecules/stats-card/stats-card.component.d.ts +14 -0
  250. package/lib/components/molecules/stats-card/types.d.ts +41 -0
  251. package/lib/components/molecules/stepper/stepper.component.d.ts +21 -0
  252. package/lib/components/molecules/stepper/types.d.ts +66 -0
  253. package/lib/components/molecules/tabs/tabs.component.d.ts +17 -0
  254. package/lib/components/molecules/tabs/types.d.ts +45 -0
  255. package/lib/components/molecules/textarea-input/textarea-input.component.d.ts +27 -0
  256. package/lib/components/molecules/textarea-input/types.d.ts +74 -0
  257. package/lib/components/molecules/ticket-grid/ticket-grid.component.d.ts +41 -0
  258. package/lib/components/molecules/ticket-grid/types.d.ts +122 -0
  259. package/lib/components/molecules/timeline/timeline.component.d.ts +14 -0
  260. package/lib/components/molecules/timeline/types.d.ts +39 -0
  261. package/lib/components/molecules/toggle-input/toggle-input.component.d.ts +24 -0
  262. package/lib/components/molecules/toggle-input/types.d.ts +30 -0
  263. package/lib/components/molecules/winner-display/types.d.ts +103 -0
  264. package/lib/components/molecules/winner-display/winner-display.component.d.ts +37 -0
  265. package/lib/components/organisms/article/article.component.d.ts +1 -1
  266. package/lib/components/organisms/comment-section/comment-section.component.d.ts +52 -0
  267. package/lib/components/organisms/comment-section/types.d.ts +144 -0
  268. package/lib/components/organisms/data-table/data-table.component.d.ts +46 -0
  269. package/lib/components/organisms/data-table/types.d.ts +205 -0
  270. package/lib/components/types.d.ts +21 -15
  271. package/lib/services/confirmation-dialog/confirmation-dialog.service.d.ts +71 -0
  272. package/lib/services/confirmation-dialog/types.d.ts +61 -0
  273. package/lib/services/modal/modal.service.d.ts +98 -0
  274. package/lib/services/modal/simple-modal-content.component.d.ts +19 -0
  275. package/lib/services/modal/types.d.ts +155 -0
  276. package/lib/services/qr-generator/qr-generator.service.d.ts +115 -0
  277. package/lib/services/qr-generator/types.d.ts +141 -0
  278. package/package.json +9 -2
  279. package/public-api.d.ts +72 -2
  280. package/LICENSE +0 -21
@@ -0,0 +1,417 @@
1
+ import { Component, Input, Output, EventEmitter, inject } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { IonButton, IonIcon, IonSpinner } from '@ionic/angular/standalone';
4
+ import { addIcons } from 'ionicons';
5
+ import { downloadOutline, copyOutline, shareOutline } from 'ionicons/icons';
6
+ import { QrGeneratorService } from '../../../services/qr-generator/qr-generator.service';
7
+ import { LangService } from '../../../services/lang-provider/lang-provider.service';
8
+ import * as i0 from "@angular/core";
9
+ addIcons({ downloadOutline, copyOutline, shareOutline });
10
+ /**
11
+ * val-qr-code
12
+ *
13
+ * A component to display QR codes generated by QrGeneratorService.
14
+ * Provides optional action buttons for download, copy, and share.
15
+ *
16
+ * @example Basic usage
17
+ * ```typescript
18
+ * qr = await this.qrService.generate({ data: 'https://example.com' });
19
+ * ```
20
+ * ```html
21
+ * <val-qr-code [props]="{ qr: qr }"></val-qr-code>
22
+ * ```
23
+ *
24
+ * @example With actions
25
+ * ```html
26
+ * <val-qr-code
27
+ * [props]="{
28
+ * qr: qr,
29
+ * showDownload: true,
30
+ * showCopy: true,
31
+ * showShare: true,
32
+ * displaySize: 200,
33
+ * showBorder: true,
34
+ * borderRadius: 12
35
+ * }"
36
+ * (actionComplete)="onAction($event)"
37
+ * ></val-qr-code>
38
+ * ```
39
+ *
40
+ * @input props: QrCodeMetadata - Configuration for the QR display
41
+ * @output actionComplete - Emits when an action (download/copy/share) completes
42
+ * @output imageLoad - Emits when the QR image loads
43
+ * @output imageError - Emits when the QR image fails to load
44
+ */
45
+ export class QrCodeComponent {
46
+ constructor() {
47
+ this.actionComplete = new EventEmitter();
48
+ this.imageLoad = new EventEmitter();
49
+ this.imageError = new EventEmitter();
50
+ this.canShare = false;
51
+ this.canCopy = false;
52
+ this.langSubscription = null;
53
+ this.langService = inject(LangService);
54
+ this.qrService = inject(QrGeneratorService);
55
+ }
56
+ ngOnInit() {
57
+ this.canShare = this.qrService.canShare();
58
+ this.canCopy = this.qrService.canCopyToClipboard();
59
+ if (this.hasReactiveContent()) {
60
+ this.langSubscription = this.langService.currentLang$.subscribe(() => {
61
+ // Trigger change detection for labels
62
+ });
63
+ }
64
+ }
65
+ ngOnDestroy() {
66
+ this.langSubscription?.unsubscribe();
67
+ }
68
+ hasReactiveContent() {
69
+ return !!((this.props.downloadLabelContentKey && this.props.contentClass) ||
70
+ (this.props.copyLabelContentKey && this.props.contentClass) ||
71
+ (this.props.shareLabelContentKey && this.props.contentClass));
72
+ }
73
+ getDisplaySize() {
74
+ if (this.props.displaySize) {
75
+ return `${this.props.displaySize}px`;
76
+ }
77
+ return `${this.props.qr.config.width || 300}px`;
78
+ }
79
+ getBorderRadius() {
80
+ return this.props.borderRadius ? `${this.props.borderRadius}px` : '0';
81
+ }
82
+ getPadding() {
83
+ return this.props.padding ? `${this.props.padding}px` : '0';
84
+ }
85
+ getQrBorderRadius() {
86
+ return this.props.qrBorderRadius ? `${this.props.qrBorderRadius}px` : '0';
87
+ }
88
+ getContainerClasses() {
89
+ const classes = [];
90
+ if (this.props.cssClass)
91
+ classes.push(this.props.cssClass);
92
+ if (this.props.showBorder)
93
+ classes.push('with-border');
94
+ if (this.props.loading)
95
+ classes.push('loading');
96
+ if (this.props.theme)
97
+ classes.push(`theme--${this.props.theme}`);
98
+ if (this.props.pulseOnHover)
99
+ classes.push('pulse-on-hover');
100
+ if (this.props.scaleOnHover)
101
+ classes.push('scale-on-hover');
102
+ if (this.props.gradient)
103
+ classes.push('has-gradient');
104
+ return classes.join(' ');
105
+ }
106
+ getContainerBackground() {
107
+ if (this.props.gradient) {
108
+ const { from, to, via, direction = 'to-bottom' } = this.props.gradient;
109
+ const cssDirection = direction.replace(/-/g, ' ');
110
+ if (via) {
111
+ return `linear-gradient(${cssDirection}, ${from}, ${via}, ${to})`;
112
+ }
113
+ return `linear-gradient(${cssDirection}, ${from}, ${to})`;
114
+ }
115
+ return this.props.containerBackground || 'transparent';
116
+ }
117
+ getShadow() {
118
+ const shadowMap = {
119
+ none: 'none',
120
+ sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)',
121
+ md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',
122
+ lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',
123
+ xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)',
124
+ };
125
+ if (!this.props.shadow)
126
+ return 'none';
127
+ return shadowMap[this.props.shadow] || this.props.shadow;
128
+ }
129
+ getLabelFontSize() {
130
+ return this.props.label?.fontSize ? `${this.props.label.fontSize}px` : '14px';
131
+ }
132
+ hasActions() {
133
+ return !!(this.props.showDownload || this.props.showCopy || this.props.showShare);
134
+ }
135
+ getDownloadLabel() {
136
+ if (this.props.downloadLabelContentKey && this.props.contentClass) {
137
+ return this.langService.getText(this.props.contentClass, this.props.downloadLabelContentKey, this.props.downloadLabel || 'Download');
138
+ }
139
+ return this.props.downloadLabel || 'Download';
140
+ }
141
+ getCopyLabel() {
142
+ if (this.props.copyLabelContentKey && this.props.contentClass) {
143
+ return this.langService.getText(this.props.contentClass, this.props.copyLabelContentKey, this.props.copyLabel || 'Copy');
144
+ }
145
+ return this.props.copyLabel || 'Copy';
146
+ }
147
+ getShareLabel() {
148
+ if (this.props.shareLabelContentKey && this.props.contentClass) {
149
+ return this.langService.getText(this.props.contentClass, this.props.shareLabelContentKey, this.props.shareLabel || 'Share');
150
+ }
151
+ return this.props.shareLabel || 'Share';
152
+ }
153
+ async onDownload() {
154
+ try {
155
+ const options = this.props.downloadFilename
156
+ ? { filename: this.props.downloadFilename }
157
+ : undefined;
158
+ await this.qrService.download(this.props.qr, options);
159
+ this.actionComplete.emit({
160
+ action: 'download',
161
+ success: true,
162
+ qr: this.props.qr,
163
+ });
164
+ }
165
+ catch (error) {
166
+ this.actionComplete.emit({
167
+ action: 'download',
168
+ success: false,
169
+ qr: this.props.qr,
170
+ error: error,
171
+ });
172
+ }
173
+ }
174
+ async onCopy() {
175
+ try {
176
+ const success = await this.qrService.copyToClipboard(this.props.qr);
177
+ this.actionComplete.emit({
178
+ action: 'copy',
179
+ success,
180
+ qr: this.props.qr,
181
+ });
182
+ }
183
+ catch (error) {
184
+ this.actionComplete.emit({
185
+ action: 'copy',
186
+ success: false,
187
+ qr: this.props.qr,
188
+ error: error,
189
+ });
190
+ }
191
+ }
192
+ async onShare() {
193
+ try {
194
+ const options = {};
195
+ if (this.props.shareTitle)
196
+ options.title = this.props.shareTitle;
197
+ if (this.props.shareText)
198
+ options.text = this.props.shareText;
199
+ if (this.props.shareFilename)
200
+ options.filename = this.props.shareFilename;
201
+ const success = await this.qrService.share(this.props.qr, Object.keys(options).length > 0 ? options : undefined);
202
+ this.actionComplete.emit({
203
+ action: 'share',
204
+ success,
205
+ qr: this.props.qr,
206
+ });
207
+ }
208
+ catch (error) {
209
+ this.actionComplete.emit({
210
+ action: 'share',
211
+ success: false,
212
+ qr: this.props.qr,
213
+ error: error,
214
+ });
215
+ }
216
+ }
217
+ onImageLoad() {
218
+ this.imageLoad.emit();
219
+ }
220
+ onImageError(_event) {
221
+ const error = new Error('Failed to load QR code image');
222
+ this.imageError.emit(error);
223
+ }
224
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: QrCodeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
225
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: QrCodeComponent, isStandalone: true, selector: "val-qr-code", inputs: { props: "props" }, outputs: { actionComplete: "actionComplete", imageLoad: "imageLoad", imageError: "imageError" }, ngImport: i0, template: `
226
+ <div
227
+ class="qr-code-container"
228
+ [class]="getContainerClasses()"
229
+ [style.--border-radius]="getBorderRadius()"
230
+ [style.--padding]="getPadding()"
231
+ [style.--container-bg]="getContainerBackground()"
232
+ [style.--border-color]="props.borderColor || 'var(--ion-color-light-shade)'"
233
+ [style.--shadow]="getShadow()"
234
+ [style.--glow-color]="props.glowColor || '#8b5cf6'"
235
+ [style.--qr-border-radius]="getQrBorderRadius()"
236
+ >
237
+ @if (props.loading) {
238
+ <div class="loading-overlay">
239
+ <ion-spinner name="crescent"></ion-spinner>
240
+ </div>
241
+ }
242
+
243
+ @if (props.label && props.label.position === 'top') {
244
+ <div class="qr-label qr-label--top" [style.--label-color]="props.label.color || 'inherit'" [style.--label-size]="getLabelFontSize()">
245
+ @if (props.label.icon && props.label.iconPosition !== 'end') {
246
+ <ion-icon [name]="props.label.icon"></ion-icon>
247
+ }
248
+ <span [class]="'font-weight--' + (props.label.fontWeight || 'medium')">{{ props.label.text }}</span>
249
+ @if (props.label.icon && props.label.iconPosition === 'end') {
250
+ <ion-icon [name]="props.label.icon"></ion-icon>
251
+ }
252
+ </div>
253
+ }
254
+
255
+ <div class="qr-image-wrapper" [style.--size]="getDisplaySize()">
256
+ <img
257
+ [src]="props.qr.dataUrl"
258
+ [alt]="props.alt || 'QR Code'"
259
+ class="qr-image"
260
+ (load)="onImageLoad()"
261
+ (error)="onImageError($event)"
262
+ />
263
+ </div>
264
+
265
+ @if (props.label && props.label.position !== 'top') {
266
+ <div class="qr-label qr-label--bottom" [style.--label-color]="props.label.color || 'inherit'" [style.--label-size]="getLabelFontSize()">
267
+ @if (props.label.icon && props.label.iconPosition !== 'end') {
268
+ <ion-icon [name]="props.label.icon"></ion-icon>
269
+ }
270
+ <span [class]="'font-weight--' + (props.label.fontWeight || 'medium')">{{ props.label.text }}</span>
271
+ @if (props.label.icon && props.label.iconPosition === 'end') {
272
+ <ion-icon [name]="props.label.icon"></ion-icon>
273
+ }
274
+ </div>
275
+ }
276
+
277
+ @if (hasActions()) {
278
+ <div class="qr-actions">
279
+ @if (props.showDownload) {
280
+ <ion-button
281
+ fill="clear"
282
+ size="small"
283
+ (click)="onDownload()"
284
+ [title]="getDownloadLabel()"
285
+ >
286
+ <ion-icon name="download-outline" slot="icon-only"></ion-icon>
287
+ </ion-button>
288
+ }
289
+
290
+ @if (props.showCopy && canCopy) {
291
+ <ion-button
292
+ fill="clear"
293
+ size="small"
294
+ (click)="onCopy()"
295
+ [title]="getCopyLabel()"
296
+ >
297
+ <ion-icon name="copy-outline" slot="icon-only"></ion-icon>
298
+ </ion-button>
299
+ }
300
+
301
+ @if (props.showShare && canShare) {
302
+ <ion-button
303
+ fill="clear"
304
+ size="small"
305
+ (click)="onShare()"
306
+ [title]="getShareLabel()"
307
+ >
308
+ <ion-icon name="share-outline" slot="icon-only"></ion-icon>
309
+ </ion-button>
310
+ }
311
+ </div>
312
+ }
313
+ </div>
314
+ `, isInline: true, styles: [":host{display:inline-block}.qr-code-container{display:inline-flex;flex-direction:column;align-items:center;gap:12px;padding:var(--padding);background:var(--container-bg);border-radius:var(--border-radius);box-shadow:var(--shadow);position:relative;transition:transform .2s ease,box-shadow .2s ease}.qr-code-container.with-border{border:1px solid var(--border-color)}.qr-code-container.loading .qr-image-wrapper{opacity:.5}.qr-code-container.scale-on-hover:hover{transform:scale(1.02)}.qr-code-container.pulse-on-hover:hover{animation:pulse 1.5s infinite}.qr-label{display:flex;align-items:center;gap:6px;color:var(--label-color);font-size:var(--label-size)}.qr-label ion-icon{font-size:1.1em}.qr-label .font-weight--normal{font-weight:400}.qr-label .font-weight--medium{font-weight:500}.qr-label .font-weight--semibold{font-weight:600}.qr-label .font-weight--bold{font-weight:700}.qr-label--top{margin-bottom:4px}.qr-label--bottom{margin-top:4px}.loading-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background-color:#ffffffb3;border-radius:var(--border-radius);z-index:1}.loading-overlay ion-spinner{width:32px;height:32px}.qr-image-wrapper{width:var(--size);height:var(--size);display:flex;align-items:center;justify-content:center;transition:opacity .2s}.qr-image{width:100%;height:100%;object-fit:contain;display:block;border-radius:var(--qr-border-radius)}.qr-actions{display:flex;align-items:center;justify-content:center;gap:4px}.qr-actions ion-button{--padding-start: 8px;--padding-end: 8px;--color: var(--ion-color-medium)}.qr-actions ion-button:hover{--color: var(--ion-color-primary)}.qr-actions ion-button ion-icon{font-size:20px}.theme--minimal{background:transparent!important;padding:0!important;box-shadow:none!important;border:none!important}.theme--gradient-purple{background:linear-gradient(135deg,#667eea,#764ba2)!important;padding:20px!important;border-radius:16px!important}.theme--gradient-purple .qr-image{border-radius:8px}.theme--gradient-purple .qr-label{color:#fff}.theme--gradient-purple .qr-actions ion-button{--color: rgba(255, 255, 255, .8)}.theme--gradient-purple .qr-actions ion-button:hover{--color: white}.theme--gradient-blue{background:linear-gradient(135deg,#4facfe,#00f2fe)!important;padding:20px!important;border-radius:16px!important}.theme--gradient-blue .qr-image{border-radius:8px}.theme--gradient-blue .qr-label{color:#fff}.theme--gradient-blue .qr-actions ion-button{--color: rgba(255, 255, 255, .8)}.theme--gradient-blue .qr-actions ion-button:hover{--color: white}.theme--gradient-sunset{background:linear-gradient(135deg,#fa709a,#fee140)!important;padding:20px!important;border-radius:16px!important}.theme--gradient-sunset .qr-image{border-radius:8px}.theme--gradient-sunset .qr-label{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.1)}.theme--gradient-sunset .qr-actions ion-button{--color: rgba(255, 255, 255, .9)}.theme--gradient-sunset .qr-actions ion-button:hover{--color: white}.theme--gradient-mint{background:linear-gradient(135deg,#11998e,#38ef7d)!important;padding:20px!important;border-radius:16px!important}.theme--gradient-mint .qr-image{border-radius:8px}.theme--gradient-mint .qr-label{color:#fff}.theme--gradient-mint .qr-actions ion-button{--color: rgba(255, 255, 255, .8)}.theme--gradient-mint .qr-actions ion-button:hover{--color: white}.theme--dark{background:linear-gradient(145deg,#1a1a2e,#16213e)!important;padding:20px!important;border-radius:16px!important;border:1px solid rgba(255,255,255,.1)!important}.theme--dark .qr-image{border-radius:8px;filter:invert(1)}.theme--dark .qr-label{color:#e0e0e0}.theme--dark .qr-actions ion-button{--color: rgba(255, 255, 255, .6)}.theme--dark .qr-actions ion-button:hover{--color: white}.theme--neon{background:#0a0a0a!important;padding:20px!important;border-radius:16px!important;border:2px solid var(--glow-color)!important;box-shadow:0 0 20px var(--glow-color),inset 0 0 20px #8b5cf61a!important}.theme--neon .qr-image{border-radius:8px;filter:drop-shadow(0 0 8px var(--glow-color))}.theme--neon .qr-label{color:var(--glow-color);text-shadow:0 0 10px var(--glow-color)}.theme--neon .qr-actions ion-button{--color: var(--glow-color)}.theme--neon .qr-actions ion-button:hover{--color: white}:host(.compact) .qr-actions{position:absolute;bottom:8px;left:50%;transform:translate(-50%);opacity:0;transition:opacity .2s;background-color:#ffffffe6;border-radius:8px;padding:4px}:host(.compact) .qr-code-container:hover .qr-actions{opacity:1}:host(.card) .qr-code-container{background-color:var(--ion-background-color, white);box-shadow:0 2px 8px #0000001a;padding:16px;border-radius:12px}@keyframes pulse{0%{box-shadow:var(--shadow),0 0 #6366f166}70%{box-shadow:var(--shadow),0 0 0 10px #6366f100}to{box-shadow:var(--shadow),0 0 #6366f100}}@media (prefers-color-scheme: dark){.loading-overlay{background-color:#000000b3}:host(.compact) .qr-actions{background-color:#000000e6}.theme--default .qr-image{filter:invert(1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }] }); }
315
+ }
316
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: QrCodeComponent, decorators: [{
317
+ type: Component,
318
+ args: [{ selector: 'val-qr-code', standalone: true, imports: [CommonModule, IonButton, IonIcon, IonSpinner], template: `
319
+ <div
320
+ class="qr-code-container"
321
+ [class]="getContainerClasses()"
322
+ [style.--border-radius]="getBorderRadius()"
323
+ [style.--padding]="getPadding()"
324
+ [style.--container-bg]="getContainerBackground()"
325
+ [style.--border-color]="props.borderColor || 'var(--ion-color-light-shade)'"
326
+ [style.--shadow]="getShadow()"
327
+ [style.--glow-color]="props.glowColor || '#8b5cf6'"
328
+ [style.--qr-border-radius]="getQrBorderRadius()"
329
+ >
330
+ @if (props.loading) {
331
+ <div class="loading-overlay">
332
+ <ion-spinner name="crescent"></ion-spinner>
333
+ </div>
334
+ }
335
+
336
+ @if (props.label && props.label.position === 'top') {
337
+ <div class="qr-label qr-label--top" [style.--label-color]="props.label.color || 'inherit'" [style.--label-size]="getLabelFontSize()">
338
+ @if (props.label.icon && props.label.iconPosition !== 'end') {
339
+ <ion-icon [name]="props.label.icon"></ion-icon>
340
+ }
341
+ <span [class]="'font-weight--' + (props.label.fontWeight || 'medium')">{{ props.label.text }}</span>
342
+ @if (props.label.icon && props.label.iconPosition === 'end') {
343
+ <ion-icon [name]="props.label.icon"></ion-icon>
344
+ }
345
+ </div>
346
+ }
347
+
348
+ <div class="qr-image-wrapper" [style.--size]="getDisplaySize()">
349
+ <img
350
+ [src]="props.qr.dataUrl"
351
+ [alt]="props.alt || 'QR Code'"
352
+ class="qr-image"
353
+ (load)="onImageLoad()"
354
+ (error)="onImageError($event)"
355
+ />
356
+ </div>
357
+
358
+ @if (props.label && props.label.position !== 'top') {
359
+ <div class="qr-label qr-label--bottom" [style.--label-color]="props.label.color || 'inherit'" [style.--label-size]="getLabelFontSize()">
360
+ @if (props.label.icon && props.label.iconPosition !== 'end') {
361
+ <ion-icon [name]="props.label.icon"></ion-icon>
362
+ }
363
+ <span [class]="'font-weight--' + (props.label.fontWeight || 'medium')">{{ props.label.text }}</span>
364
+ @if (props.label.icon && props.label.iconPosition === 'end') {
365
+ <ion-icon [name]="props.label.icon"></ion-icon>
366
+ }
367
+ </div>
368
+ }
369
+
370
+ @if (hasActions()) {
371
+ <div class="qr-actions">
372
+ @if (props.showDownload) {
373
+ <ion-button
374
+ fill="clear"
375
+ size="small"
376
+ (click)="onDownload()"
377
+ [title]="getDownloadLabel()"
378
+ >
379
+ <ion-icon name="download-outline" slot="icon-only"></ion-icon>
380
+ </ion-button>
381
+ }
382
+
383
+ @if (props.showCopy && canCopy) {
384
+ <ion-button
385
+ fill="clear"
386
+ size="small"
387
+ (click)="onCopy()"
388
+ [title]="getCopyLabel()"
389
+ >
390
+ <ion-icon name="copy-outline" slot="icon-only"></ion-icon>
391
+ </ion-button>
392
+ }
393
+
394
+ @if (props.showShare && canShare) {
395
+ <ion-button
396
+ fill="clear"
397
+ size="small"
398
+ (click)="onShare()"
399
+ [title]="getShareLabel()"
400
+ >
401
+ <ion-icon name="share-outline" slot="icon-only"></ion-icon>
402
+ </ion-button>
403
+ }
404
+ </div>
405
+ }
406
+ </div>
407
+ `, styles: [":host{display:inline-block}.qr-code-container{display:inline-flex;flex-direction:column;align-items:center;gap:12px;padding:var(--padding);background:var(--container-bg);border-radius:var(--border-radius);box-shadow:var(--shadow);position:relative;transition:transform .2s ease,box-shadow .2s ease}.qr-code-container.with-border{border:1px solid var(--border-color)}.qr-code-container.loading .qr-image-wrapper{opacity:.5}.qr-code-container.scale-on-hover:hover{transform:scale(1.02)}.qr-code-container.pulse-on-hover:hover{animation:pulse 1.5s infinite}.qr-label{display:flex;align-items:center;gap:6px;color:var(--label-color);font-size:var(--label-size)}.qr-label ion-icon{font-size:1.1em}.qr-label .font-weight--normal{font-weight:400}.qr-label .font-weight--medium{font-weight:500}.qr-label .font-weight--semibold{font-weight:600}.qr-label .font-weight--bold{font-weight:700}.qr-label--top{margin-bottom:4px}.qr-label--bottom{margin-top:4px}.loading-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background-color:#ffffffb3;border-radius:var(--border-radius);z-index:1}.loading-overlay ion-spinner{width:32px;height:32px}.qr-image-wrapper{width:var(--size);height:var(--size);display:flex;align-items:center;justify-content:center;transition:opacity .2s}.qr-image{width:100%;height:100%;object-fit:contain;display:block;border-radius:var(--qr-border-radius)}.qr-actions{display:flex;align-items:center;justify-content:center;gap:4px}.qr-actions ion-button{--padding-start: 8px;--padding-end: 8px;--color: var(--ion-color-medium)}.qr-actions ion-button:hover{--color: var(--ion-color-primary)}.qr-actions ion-button ion-icon{font-size:20px}.theme--minimal{background:transparent!important;padding:0!important;box-shadow:none!important;border:none!important}.theme--gradient-purple{background:linear-gradient(135deg,#667eea,#764ba2)!important;padding:20px!important;border-radius:16px!important}.theme--gradient-purple .qr-image{border-radius:8px}.theme--gradient-purple .qr-label{color:#fff}.theme--gradient-purple .qr-actions ion-button{--color: rgba(255, 255, 255, .8)}.theme--gradient-purple .qr-actions ion-button:hover{--color: white}.theme--gradient-blue{background:linear-gradient(135deg,#4facfe,#00f2fe)!important;padding:20px!important;border-radius:16px!important}.theme--gradient-blue .qr-image{border-radius:8px}.theme--gradient-blue .qr-label{color:#fff}.theme--gradient-blue .qr-actions ion-button{--color: rgba(255, 255, 255, .8)}.theme--gradient-blue .qr-actions ion-button:hover{--color: white}.theme--gradient-sunset{background:linear-gradient(135deg,#fa709a,#fee140)!important;padding:20px!important;border-radius:16px!important}.theme--gradient-sunset .qr-image{border-radius:8px}.theme--gradient-sunset .qr-label{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.1)}.theme--gradient-sunset .qr-actions ion-button{--color: rgba(255, 255, 255, .9)}.theme--gradient-sunset .qr-actions ion-button:hover{--color: white}.theme--gradient-mint{background:linear-gradient(135deg,#11998e,#38ef7d)!important;padding:20px!important;border-radius:16px!important}.theme--gradient-mint .qr-image{border-radius:8px}.theme--gradient-mint .qr-label{color:#fff}.theme--gradient-mint .qr-actions ion-button{--color: rgba(255, 255, 255, .8)}.theme--gradient-mint .qr-actions ion-button:hover{--color: white}.theme--dark{background:linear-gradient(145deg,#1a1a2e,#16213e)!important;padding:20px!important;border-radius:16px!important;border:1px solid rgba(255,255,255,.1)!important}.theme--dark .qr-image{border-radius:8px;filter:invert(1)}.theme--dark .qr-label{color:#e0e0e0}.theme--dark .qr-actions ion-button{--color: rgba(255, 255, 255, .6)}.theme--dark .qr-actions ion-button:hover{--color: white}.theme--neon{background:#0a0a0a!important;padding:20px!important;border-radius:16px!important;border:2px solid var(--glow-color)!important;box-shadow:0 0 20px var(--glow-color),inset 0 0 20px #8b5cf61a!important}.theme--neon .qr-image{border-radius:8px;filter:drop-shadow(0 0 8px var(--glow-color))}.theme--neon .qr-label{color:var(--glow-color);text-shadow:0 0 10px var(--glow-color)}.theme--neon .qr-actions ion-button{--color: var(--glow-color)}.theme--neon .qr-actions ion-button:hover{--color: white}:host(.compact) .qr-actions{position:absolute;bottom:8px;left:50%;transform:translate(-50%);opacity:0;transition:opacity .2s;background-color:#ffffffe6;border-radius:8px;padding:4px}:host(.compact) .qr-code-container:hover .qr-actions{opacity:1}:host(.card) .qr-code-container{background-color:var(--ion-background-color, white);box-shadow:0 2px 8px #0000001a;padding:16px;border-radius:12px}@keyframes pulse{0%{box-shadow:var(--shadow),0 0 #6366f166}70%{box-shadow:var(--shadow),0 0 0 10px #6366f100}to{box-shadow:var(--shadow),0 0 #6366f100}}@media (prefers-color-scheme: dark){.loading-overlay{background-color:#000000b3}:host(.compact) .qr-actions{background-color:#000000e6}.theme--default .qr-image{filter:invert(1)}}\n"] }]
408
+ }], propDecorators: { props: [{
409
+ type: Input
410
+ }], actionComplete: [{
411
+ type: Output
412
+ }], imageLoad: [{
413
+ type: Output
414
+ }], imageError: [{
415
+ type: Output
416
+ }] } });
417
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXItY29kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvYXRvbXMvcXItY29kZS9xci1jb2RlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTNFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVEQUF1RCxDQUFDOztBQUVwRixRQUFRLENBQUMsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7QUFrR3pEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFuSTVCO1FBc0lZLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFDdkQsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDckMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7UUFFakQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRVIscUJBQWdCLEdBQXdCLElBQUksQ0FBQztRQUM3QyxnQkFBVyxHQUFHLE1BQU0sQ0FB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M0MsZUFBZTtrQkFuSTNCLFNBQVM7K0JBQ0UsYUFBYSxjQUNYLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxZQUM3Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5RlQ7OEJBdUNRLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uRGVzdHJveSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uLCBJb25TcGlubmVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgZG93bmxvYWRPdXRsaW5lLCBjb3B5T3V0bGluZSwgc2hhcmVPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5pbXBvcnQgeyBRckNvZGVNZXRhZGF0YSwgUXJDb2RlQWN0aW9uRXZlbnQsIFFyRGlzcGxheVRoZW1lIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBRckdlbmVyYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9xci1nZW5lcmF0b3IvcXItZ2VuZXJhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGFuZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sYW5nLXByb3ZpZGVyL2xhbmctcHJvdmlkZXIuc2VydmljZSc7XG5cbmFkZEljb25zKHsgZG93bmxvYWRPdXRsaW5lLCBjb3B5T3V0bGluZSwgc2hhcmVPdXRsaW5lIH0pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtcXItY29kZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElvbkJ1dHRvbiwgSW9uSWNvbiwgSW9uU3Bpbm5lcl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJxci1jb2RlLWNvbnRhaW5lclwiXG4gICAgICBbY2xhc3NdPVwiZ2V0Q29udGFpbmVyQ2xhc3NlcygpXCJcbiAgICAgIFtzdHlsZS4tLWJvcmRlci1yYWRpdXNdPVwiZ2V0Qm9yZGVyUmFkaXVzKClcIlxuICAgICAgW3N0eWxlLi0tcGFkZGluZ109XCJnZXRQYWRkaW5nKClcIlxuICAgICAgW3N0eWxlLi0tY29udGFpbmVyLWJnXT1cImdldENvbnRhaW5lckJhY2tncm91bmQoKVwiXG4gICAgICBbc3R5bGUuLS1ib3JkZXItY29sb3JdPVwicHJvcHMuYm9yZGVyQ29sb3IgfHwgJ3ZhcigtLWlvbi1jb2xvci1saWdodC1zaGFkZSknXCJcbiAgICAgIFtzdHlsZS4tLXNoYWRvd109XCJnZXRTaGFkb3coKVwiXG4gICAgICBbc3R5bGUuLS1nbG93LWNvbG9yXT1cInByb3BzLmdsb3dDb2xvciB8fCAnIzhiNWNmNidcIlxuICAgICAgW3N0eWxlLi0tcXItYm9yZGVyLXJhZGl1c109XCJnZXRRckJvcmRlclJhZGl1cygpXCJcbiAgICA+XG4gICAgICBAaWYgKHByb3BzLmxvYWRpbmcpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmctb3ZlcmxheVwiPlxuICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgQGlmIChwcm9wcy5sYWJlbCAmJiBwcm9wcy5sYWJlbC5wb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInFyLWxhYmVsIHFyLWxhYmVsLS10b3BcIiBbc3R5bGUuLS1sYWJlbC1jb2xvcl09XCJwcm9wcy5sYWJlbC5jb2xvciB8fCAnaW5oZXJpdCdcIiBbc3R5bGUuLS1sYWJlbC1zaXplXT1cImdldExhYmVsRm9udFNpemUoKVwiPlxuICAgICAgICAgIEBpZiAocHJvcHMubGFiZWwuaWNvbiAmJiBwcm9wcy5sYWJlbC5pY29uUG9zaXRpb24gIT09ICdlbmQnKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwicHJvcHMubGFiZWwuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxzcGFuIFtjbGFzc109XCInZm9udC13ZWlnaHQtLScgKyAocHJvcHMubGFiZWwuZm9udFdlaWdodCB8fCAnbWVkaXVtJylcIj57eyBwcm9wcy5sYWJlbC50ZXh0IH19PC9zcGFuPlxuICAgICAgICAgIEBpZiAocHJvcHMubGFiZWwuaWNvbiAmJiBwcm9wcy5sYWJlbC5pY29uUG9zaXRpb24gPT09ICdlbmQnKSB7XG4gICAgICAgICAgICA8aW9uLWljb24gW25hbWVdPVwicHJvcHMubGFiZWwuaWNvblwiPjwvaW9uLWljb24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgPGRpdiBjbGFzcz1cInFyLWltYWdlLXdyYXBwZXJcIiBbc3R5bGUuLS1zaXplXT1cImdldERpc3BsYXlTaXplKClcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIFtzcmNdPVwicHJvcHMucXIuZGF0YVVybFwiXG4gICAgICAgICAgW2FsdF09XCJwcm9wcy5hbHQgfHwgJ1FSIENvZGUnXCJcbiAgICAgICAgICBjbGFzcz1cInFyLWltYWdlXCJcbiAgICAgICAgICAobG9hZCk9XCJvbkltYWdlTG9hZCgpXCJcbiAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUVycm9yKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIEBpZiAocHJvcHMubGFiZWwgJiYgcHJvcHMubGFiZWwucG9zaXRpb24gIT09ICd0b3AnKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJxci1sYWJlbCBxci1sYWJlbC0tYm90dG9tXCIgW3N0eWxlLi0tbGFiZWwtY29sb3JdPVwicHJvcHMubGFiZWwuY29sb3IgfHwgJ2luaGVyaXQnXCIgW3N0eWxlLi0tbGFiZWwtc2l6ZV09XCJnZXRMYWJlbEZvbnRTaXplKClcIj5cbiAgICAgICAgICBAaWYgKHByb3BzLmxhYmVsLmljb24gJiYgcHJvcHMubGFiZWwuaWNvblBvc2l0aW9uICE9PSAnZW5kJykge1xuICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cInByb3BzLmxhYmVsLmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiJ2ZvbnQtd2VpZ2h0LS0nICsgKHByb3BzLmxhYmVsLmZvbnRXZWlnaHQgfHwgJ21lZGl1bScpXCI+e3sgcHJvcHMubGFiZWwudGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICBAaWYgKHByb3BzLmxhYmVsLmljb24gJiYgcHJvcHMubGFiZWwuaWNvblBvc2l0aW9uID09PSAnZW5kJykge1xuICAgICAgICAgICAgPGlvbi1pY29uIFtuYW1lXT1cInByb3BzLmxhYmVsLmljb25cIj48L2lvbi1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoaGFzQWN0aW9ucygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJxci1hY3Rpb25zXCI+XG4gICAgICAgICAgQGlmIChwcm9wcy5zaG93RG93bmxvYWQpIHtcbiAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkRvd25sb2FkKClcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiZ2V0RG93bmxvYWRMYWJlbCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJkb3dubG9hZC1vdXRsaW5lXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgQGlmIChwcm9wcy5zaG93Q29weSAmJiBjYW5Db3B5KSB7XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25Db3B5KClcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiZ2V0Q29weUxhYmVsKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNvcHktb3V0bGluZVwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAocHJvcHMuc2hvd1NoYXJlICYmIGNhblNoYXJlKSB7XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25TaGFyZSgpXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cImdldFNoYXJlTGFiZWwoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwic2hhcmUtb3V0bGluZVwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL3FyLWNvZGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG4vKipcbiAqIHZhbC1xci1jb2RlXG4gKlxuICogQSBjb21wb25lbnQgdG8gZGlzcGxheSBRUiBjb2RlcyBnZW5lcmF0ZWQgYnkgUXJHZW5lcmF0b3JTZXJ2aWNlLlxuICogUHJvdmlkZXMgb3B0aW9uYWwgYWN0aW9uIGJ1dHRvbnMgZm9yIGRvd25sb2FkLCBjb3B5LCBhbmQgc2hhcmUuXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2VcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHFyID0gYXdhaXQgdGhpcy5xclNlcnZpY2UuZ2VuZXJhdGUoeyBkYXRhOiAnaHR0cHM6Ly9leGFtcGxlLmNvbScgfSk7XG4gKiBgYGBcbiAqIGBgYGh0bWxcbiAqIDx2YWwtcXItY29kZSBbcHJvcHNdPVwieyBxcjogcXIgfVwiPjwvdmFsLXFyLWNvZGU+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBXaXRoIGFjdGlvbnNcbiAqIGBgYGh0bWxcbiAqIDx2YWwtcXItY29kZVxuICogICBbcHJvcHNdPVwie1xuICogICAgIHFyOiBxcixcbiAqICAgICBzaG93RG93bmxvYWQ6IHRydWUsXG4gKiAgICAgc2hvd0NvcHk6IHRydWUsXG4gKiAgICAgc2hvd1NoYXJlOiB0cnVlLFxuICogICAgIGRpc3BsYXlTaXplOiAyMDAsXG4gKiAgICAgc2hvd0JvcmRlcjogdHJ1ZSxcbiAqICAgICBib3JkZXJSYWRpdXM6IDEyXG4gKiAgIH1cIlxuICogICAoYWN0aW9uQ29tcGxldGUpPVwib25BY3Rpb24oJGV2ZW50KVwiXG4gKiA+PC92YWwtcXItY29kZT5cbiAqIGBgYFxuICpcbiAqIEBpbnB1dCBwcm9wczogUXJDb2RlTWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgUVIgZGlzcGxheVxuICogQG91dHB1dCBhY3Rpb25Db21wbGV0ZSAtIEVtaXRzIHdoZW4gYW4gYWN0aW9uIChkb3dubG9hZC9jb3B5L3NoYXJlKSBjb21wbGV0ZXNcbiAqIEBvdXRwdXQgaW1hZ2VMb2FkIC0gRW1pdHMgd2hlbiB0aGUgUVIgaW1hZ2UgbG9hZHNcbiAqIEBvdXRwdXQgaW1hZ2VFcnJvciAtIEVtaXRzIHdoZW4gdGhlIFFSIGltYWdlIGZhaWxzIHRvIGxvYWRcbiAqL1xuZXhwb3J0IGNsYXNzIFFyQ29kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcHJvcHM6IFFyQ29kZU1ldGFkYXRhO1xuXG4gIEBPdXRwdXQoKSBhY3Rpb25Db21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8UXJDb2RlQWN0aW9uRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBpbWFnZUxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBpbWFnZUVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxFcnJvcj4oKTtcblxuICBjYW5TaGFyZSA9IGZhbHNlO1xuICBjYW5Db3B5ID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBsYW5nU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsYW5nU2VydmljZSA9IGluamVjdChMYW5nU2VydmljZSk7XG4gIHByaXZhdGUgcXJTZXJ2aWNlID0gaW5qZWN0KFFyR2VuZXJhdG9yU2VydmljZSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5TaGFyZSA9IHRoaXMucXJTZXJ2aWNlLmNhblNoYXJlKCk7XG4gICAgdGhpcy5jYW5Db3B5ID0gdGhpcy5xclNlcnZpY2UuY2FuQ29weVRvQ2xpcGJvYXJkKCk7XG5cbiAgICBpZiAodGhpcy5oYXNSZWFjdGl2ZUNvbnRlbnQoKSkge1xuICAgICAgdGhpcy5sYW5nU3Vic2NyaXB0aW9uID0gdGhpcy5sYW5nU2VydmljZS5jdXJyZW50TGFuZyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgLy8gVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uIGZvciBsYWJlbHNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubGFuZ1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzUmVhY3RpdmVDb250ZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShcbiAgICAgICh0aGlzLnByb3BzLmRvd25sb2FkTGFiZWxDb250ZW50S2V5ICYmIHRoaXMucHJvcHMuY29udGVudENsYXNzKSB8fFxuICAgICAgKHRoaXMucHJvcHMuY29weUxhYmVsQ29udGVudEtleSAmJiB0aGlzLnByb3BzLmNvbnRlbnRDbGFzcykgfHxcbiAgICAgICh0aGlzLnByb3BzLnNoYXJlTGFiZWxDb250ZW50S2V5ICYmIHRoaXMucHJvcHMuY29udGVudENsYXNzKVxuICAgICk7XG4gIH1cblxuICBnZXREaXNwbGF5U2l6ZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BzLmRpc3BsYXlTaXplKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wcm9wcy5kaXNwbGF5U2l6ZX1weGA7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLnByb3BzLnFyLmNvbmZpZy53aWR0aCB8fCAzMDB9cHhgO1xuICB9XG5cbiAgZ2V0Qm9yZGVyUmFkaXVzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuYm9yZGVyUmFkaXVzID8gYCR7dGhpcy5wcm9wcy5ib3JkZXJSYWRpdXN9cHhgIDogJzAnO1xuICB9XG5cbiAgZ2V0UGFkZGluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnBhZGRpbmcgPyBgJHt0aGlzLnByb3BzLnBhZGRpbmd9cHhgIDogJzAnO1xuICB9XG5cbiAgZ2V0UXJCb3JkZXJSYWRpdXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xckJvcmRlclJhZGl1cyA/IGAke3RoaXMucHJvcHMucXJCb3JkZXJSYWRpdXN9cHhgIDogJzAnO1xuICB9XG5cbiAgZ2V0Q29udGFpbmVyQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsYXNzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodGhpcy5wcm9wcy5jc3NDbGFzcykgY2xhc3Nlcy5wdXNoKHRoaXMucHJvcHMuY3NzQ2xhc3MpO1xuICAgIGlmICh0aGlzLnByb3BzLnNob3dCb3JkZXIpIGNsYXNzZXMucHVzaCgnd2l0aC1ib3JkZXInKTtcbiAgICBpZiAodGhpcy5wcm9wcy5sb2FkaW5nKSBjbGFzc2VzLnB1c2goJ2xvYWRpbmcnKTtcbiAgICBpZiAodGhpcy5wcm9wcy50aGVtZSkgY2xhc3Nlcy5wdXNoKGB0aGVtZS0tJHt0aGlzLnByb3BzLnRoZW1lfWApO1xuICAgIGlmICh0aGlzLnByb3BzLnB1bHNlT25Ib3ZlcikgY2xhc3Nlcy5wdXNoKCdwdWxzZS1vbi1ob3ZlcicpO1xuICAgIGlmICh0aGlzLnByb3BzLnNjYWxlT25Ib3ZlcikgY2xhc3Nlcy5wdXNoKCdzY2FsZS1vbi1ob3ZlcicpO1xuICAgIGlmICh0aGlzLnByb3BzLmdyYWRpZW50KSBjbGFzc2VzLnB1c2goJ2hhcy1ncmFkaWVudCcpO1xuXG4gICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuICB9XG5cbiAgZ2V0Q29udGFpbmVyQmFja2dyb3VuZCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BzLmdyYWRpZW50KSB7XG4gICAgICBjb25zdCB7IGZyb20sIHRvLCB2aWEsIGRpcmVjdGlvbiA9ICd0by1ib3R0b20nIH0gPSB0aGlzLnByb3BzLmdyYWRpZW50O1xuICAgICAgY29uc3QgY3NzRGlyZWN0aW9uID0gZGlyZWN0aW9uLnJlcGxhY2UoLy0vZywgJyAnKTtcbiAgICAgIGlmICh2aWEpIHtcbiAgICAgICAgcmV0dXJuIGBsaW5lYXItZ3JhZGllbnQoJHtjc3NEaXJlY3Rpb259LCAke2Zyb219LCAke3ZpYX0sICR7dG99KWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYGxpbmVhci1ncmFkaWVudCgke2Nzc0RpcmVjdGlvbn0sICR7ZnJvbX0sICR7dG99KWA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByb3BzLmNvbnRhaW5lckJhY2tncm91bmQgfHwgJ3RyYW5zcGFyZW50JztcbiAgfVxuXG4gIGdldFNoYWRvdygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNoYWRvd01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIG5vbmU6ICdub25lJyxcbiAgICAgIHNtOiAnMCAxcHggMnB4IDAgcmdiYSgwLCAwLCAwLCAwLjA1KScsXG4gICAgICBtZDogJzAgNHB4IDZweCAtMXB4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAycHggNHB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjA2KScsXG4gICAgICBsZzogJzAgMTBweCAxNXB4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDRweCA2cHggLTJweCByZ2JhKDAsIDAsIDAsIDAuMDUpJyxcbiAgICAgIHhsOiAnMCAyMHB4IDI1cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMTBweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjA0KScsXG4gICAgfTtcblxuICAgIGlmICghdGhpcy5wcm9wcy5zaGFkb3cpIHJldHVybiAnbm9uZSc7XG4gICAgcmV0dXJuIHNoYWRvd01hcFt0aGlzLnByb3BzLnNoYWRvd10gfHwgdGhpcy5wcm9wcy5zaGFkb3c7XG4gIH1cblxuICBnZXRMYWJlbEZvbnRTaXplKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMubGFiZWw/LmZvbnRTaXplID8gYCR7dGhpcy5wcm9wcy5sYWJlbC5mb250U2l6ZX1weGAgOiAnMTRweCc7XG4gIH1cblxuICBoYXNBY3Rpb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLnByb3BzLnNob3dEb3dubG9hZCB8fCB0aGlzLnByb3BzLnNob3dDb3B5IHx8IHRoaXMucHJvcHMuc2hvd1NoYXJlKTtcbiAgfVxuXG4gIGdldERvd25sb2FkTGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5wcm9wcy5kb3dubG9hZExhYmVsQ29udGVudEtleSAmJiB0aGlzLnByb3BzLmNvbnRlbnRDbGFzcykge1xuICAgICAgcmV0dXJuIHRoaXMubGFuZ1NlcnZpY2UuZ2V0VGV4dChcbiAgICAgICAgdGhpcy5wcm9wcy5jb250ZW50Q2xhc3MsXG4gICAgICAgIHRoaXMucHJvcHMuZG93bmxvYWRMYWJlbENvbnRlbnRLZXksXG4gICAgICAgIHRoaXMucHJvcHMuZG93bmxvYWRMYWJlbCB8fCAnRG93bmxvYWQnXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kb3dubG9hZExhYmVsIHx8ICdEb3dubG9hZCc7XG4gIH1cblxuICBnZXRDb3B5TGFiZWwoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5wcm9wcy5jb3B5TGFiZWxDb250ZW50S2V5ICYmIHRoaXMucHJvcHMuY29udGVudENsYXNzKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYW5nU2VydmljZS5nZXRUZXh0KFxuICAgICAgICB0aGlzLnByb3BzLmNvbnRlbnRDbGFzcyxcbiAgICAgICAgdGhpcy5wcm9wcy5jb3B5TGFiZWxDb250ZW50S2V5LFxuICAgICAgICB0aGlzLnByb3BzLmNvcHlMYWJlbCB8fCAnQ29weSdcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByb3BzLmNvcHlMYWJlbCB8fCAnQ29weSc7XG4gIH1cblxuICBnZXRTaGFyZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucHJvcHMuc2hhcmVMYWJlbENvbnRlbnRLZXkgJiYgdGhpcy5wcm9wcy5jb250ZW50Q2xhc3MpIHtcbiAgICAgIHJldHVybiB0aGlzLmxhbmdTZXJ2aWNlLmdldFRleHQoXG4gICAgICAgIHRoaXMucHJvcHMuY29udGVudENsYXNzLFxuICAgICAgICB0aGlzLnByb3BzLnNoYXJlTGFiZWxDb250ZW50S2V5LFxuICAgICAgICB0aGlzLnByb3BzLnNoYXJlTGFiZWwgfHwgJ1NoYXJlJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc2hhcmVMYWJlbCB8fCAnU2hhcmUnO1xuICB9XG5cbiAgYXN5bmMgb25Eb3dubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMucHJvcHMuZG93bmxvYWRGaWxlbmFtZVxuICAgICAgICA/IHsgZmlsZW5hbWU6IHRoaXMucHJvcHMuZG93bmxvYWRGaWxlbmFtZSB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgYXdhaXQgdGhpcy5xclNlcnZpY2UuZG93bmxvYWQodGhpcy5wcm9wcy5xciwgb3B0aW9ucyk7XG4gICAgICB0aGlzLmFjdGlvbkNvbXBsZXRlLmVtaXQoe1xuICAgICAgICBhY3Rpb246ICdkb3dubG9hZCcsXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIHFyOiB0aGlzLnByb3BzLnFyLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuYWN0aW9uQ29tcGxldGUuZW1pdCh7XG4gICAgICAgIGFjdGlvbjogJ2Rvd25sb2FkJyxcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIHFyOiB0aGlzLnByb3BzLnFyLFxuICAgICAgICBlcnJvcjogZXJyb3IgYXMgRXJyb3IsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvbkNvcHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnFyU2VydmljZS5jb3B5VG9DbGlwYm9hcmQodGhpcy5wcm9wcy5xcik7XG4gICAgICB0aGlzLmFjdGlvbkNvbXBsZXRlLmVtaXQoe1xuICAgICAgICBhY3Rpb246ICdjb3B5JyxcbiAgICAgICAgc3VjY2VzcyxcbiAgICAgICAgcXI6IHRoaXMucHJvcHMucXIsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5hY3Rpb25Db21wbGV0ZS5lbWl0KHtcbiAgICAgICAgYWN0aW9uOiAnY29weScsXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBxcjogdGhpcy5wcm9wcy5xcixcbiAgICAgICAgZXJyb3I6IGVycm9yIGFzIEVycm9yLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25TaGFyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3B0aW9uczogeyB0aXRsZT86IHN0cmluZzsgdGV4dD86IHN0cmluZzsgZmlsZW5hbWU/OiBzdHJpbmcgfSA9IHt9O1xuICAgICAgaWYgKHRoaXMucHJvcHMuc2hhcmVUaXRsZSkgb3B0aW9ucy50aXRsZSA9IHRoaXMucHJvcHMuc2hhcmVUaXRsZTtcbiAgICAgIGlmICh0aGlzLnByb3BzLnNoYXJlVGV4dCkgb3B0aW9ucy50ZXh0ID0gdGhpcy5wcm9wcy5zaGFyZVRleHQ7XG4gICAgICBpZiAodGhpcy5wcm9wcy5zaGFyZUZpbGVuYW1lKSBvcHRpb25zLmZpbGVuYW1lID0gdGhpcy5wcm9wcy5zaGFyZUZpbGVuYW1lO1xuXG4gICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgdGhpcy5xclNlcnZpY2Uuc2hhcmUoXG4gICAgICAgIHRoaXMucHJvcHMucXIsXG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCA+IDAgPyBvcHRpb25zIDogdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgdGhpcy5hY3Rpb25Db21wbGV0ZS5lbWl0KHtcbiAgICAgICAgYWN0aW9uOiAnc2hhcmUnLFxuICAgICAgICBzdWNjZXNzLFxuICAgICAgICBxcjogdGhpcy5wcm9wcy5xcixcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFjdGlvbkNvbXBsZXRlLmVtaXQoe1xuICAgICAgICBhY3Rpb246ICdzaGFyZScsXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBxcjogdGhpcy5wcm9wcy5xcixcbiAgICAgICAgZXJyb3I6IGVycm9yIGFzIEVycm9yLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25JbWFnZUxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5pbWFnZUxvYWQuZW1pdCgpO1xuICB9XG5cbiAgb25JbWFnZUVycm9yKF9ldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgUVIgY29kZSBpbWFnZScpO1xuICAgIHRoaXMuaW1hZ2VFcnJvci5lbWl0KGVycm9yKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvYXRvbXMvcXItY29kZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUXJSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9xci1nZW5lcmF0b3IvdHlwZXMnO1xuXG4vKipcbiAqIFRoZW1lIHByZXNldHMgZm9yIHF1aWNrIHN0eWxpbmcuXG4gKi9cbmV4cG9ydCB0eXBlIFFyRGlzcGxheVRoZW1lID1cbiAgfCAnZGVmYXVsdCdcbiAgfCAnbWluaW1hbCdcbiAgfCAnZ3JhZGllbnQtcHVycGxlJ1xuICB8ICdncmFkaWVudC1ibHVlJ1xuICB8ICdncmFkaWVudC1zdW5zZXQnXG4gIHwgJ2dyYWRpZW50LW1pbnQnXG4gIHwgJ2RhcmsnXG4gIHwgJ25lb24nO1xuXG4vKipcbiAqIExhYmVsIHBvc2l0aW9uIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIFFyTGFiZWxQb3NpdGlvbiA9ICd0b3AnIHwgJ2JvdHRvbSc7XG5cbi8qKlxuICogR3JhZGllbnQgZGlyZWN0aW9uIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIFFyR3JhZGllbnREaXJlY3Rpb24gPVxuICB8ICd0by1yaWdodCdcbiAgfCAndG8tbGVmdCdcbiAgfCAndG8tYm90dG9tJ1xuICB8ICd0by10b3AnXG4gIHwgJ3RvLWJvdHRvbS1yaWdodCdcbiAgfCAndG8tYm90dG9tLWxlZnQnXG4gIHwgJ3RvLXRvcC1yaWdodCdcbiAgfCAndG8tdG9wLWxlZnQnO1xuXG4vKipcbiAqIEdyYWRpZW50IGNvbmZpZ3VyYXRpb24gZm9yIGJhY2tncm91bmRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFFyRGlzcGxheUdyYWRpZW50IHtcbiAgLyoqIFN0YXJ0IGNvbG9yICovXG4gIGZyb206IHN0cmluZztcbiAgLyoqIEVuZCBjb2xvciAqL1xuICB0bzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgbWlkZGxlIGNvbG9yICovXG4gIHZpYT86IHN0cmluZztcbiAgLyoqIEdyYWRpZW50IGRpcmVjdGlvbiAqL1xuICBkaXJlY3Rpb24/OiBRckdyYWRpZW50RGlyZWN0aW9uO1xufVxuXG4vKipcbiAqIExhYmVsIGNvbmZpZ3VyYXRpb24gZm9yIFFSIGRpc3BsYXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXJMYWJlbENvbmZpZyB7XG4gIC8qKiBMYWJlbCB0ZXh0ICovXG4gIHRleHQ6IHN0cmluZztcbiAgLyoqIFBvc2l0aW9uICh0b3Agb3IgYm90dG9tKSAqL1xuICBwb3NpdGlvbj86IFFyTGFiZWxQb3NpdGlvbjtcbiAgLyoqIFRleHQgY29sb3IgKi9cbiAgY29sb3I/OiBzdHJpbmc7XG4gIC8qKiBGb250IHNpemUgaW4gcGl4ZWxzICovXG4gIGZvbnRTaXplPzogbnVtYmVyO1xuICAvKiogRm9udCB3ZWlnaHQgKi9cbiAgZm9udFdlaWdodD86ICdub3JtYWwnIHwgJ21lZGl1bScgfCAnc2VtaWJvbGQnIHwgJ2JvbGQnO1xuICAvKiogSWNvbiBuYW1lIChpb25pY29uKSB0byBzaG93IHdpdGggbGFiZWwgKi9cbiAgaWNvbj86IHN0cmluZztcbiAgLyoqIEljb24gcG9zaXRpb24gKi9cbiAgaWNvblBvc2l0aW9uPzogJ3N0YXJ0JyB8ICdlbmQnO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhIGZvciB0aGUgUVIgY29kZSBkaXNwbGF5IGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRckNvZGVNZXRhZGF0YSB7XG4gIC8qKiBRUiByZXN1bHQgZnJvbSBRckdlbmVyYXRvclNlcnZpY2UgKi9cbiAgcXI6IFFyUmVzdWx0O1xuXG4gIC8qKiBBbHQgdGV4dCBmb3IgYWNjZXNzaWJpbGl0eSAqL1xuICBhbHQ/OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyBkb3dubG9hZCBidXR0b24gKi9cbiAgc2hvd0Rvd25sb2FkPzogYm9vbGVhbjtcbiAgLyoqIERvd25sb2FkIGJ1dHRvbiBsYWJlbCAqL1xuICBkb3dubG9hZExhYmVsPzogc3RyaW5nO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgY29weSBidXR0b24gKi9cbiAgc2hvd0NvcHk/OiBib29sZWFuO1xuICAvKiogQ29weSBidXR0b24gbGFiZWwgKi9cbiAgY29weUxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgc2hhcmUgYnV0dG9uICovXG4gIHNob3dTaGFyZT86IGJvb2xlYW47XG4gIC8qKiBTaGFyZSBidXR0b24gbGFiZWwgKi9cbiAgc2hhcmVMYWJlbD86IHN0cmluZztcblxuICAvKiogQ3VzdG9tIENTUyBjbGFzcyAqL1xuICBjc3NDbGFzcz86IHN0cmluZztcblxuICAvKiogU2l6ZSBvdmVycmlkZSAod2lsbCBzY2FsZSB0aGUgaW1hZ2UpICovXG4gIGRpc3BsYXlTaXplPzogbnVtYmVyO1xuXG4gIC8qKiBCb3JkZXIgcmFkaXVzIGZvciB0aGUgY29udGFpbmVyICovXG4gIGJvcmRlclJhZGl1cz86IG51bWJlcjtcblxuICAvKiogU2hvdyBib3JkZXIgYXJvdW5kIFFSICovXG4gIHNob3dCb3JkZXI/OiBib29sZWFuO1xuICAvKiogQm9yZGVyIGNvbG9yICovXG4gIGJvcmRlckNvbG9yPzogc3RyaW5nO1xuXG4gIC8qKiBQYWRkaW5nIGFyb3VuZCB0aGUgUVIgY29kZSAqL1xuICBwYWRkaW5nPzogbnVtYmVyO1xuXG4gIC8qKiBCYWNrZ3JvdW5kIGNvbG9yIGZvciBjb250YWluZXIgKi9cbiAgY29udGFpbmVyQmFja2dyb3VuZD86IHN0cmluZztcblxuICAvKiogTG9hZGluZyBzdGF0ZSAqL1xuICBsb2FkaW5nPzogYm9vbGVhbjtcblxuICAvKiogQ3VzdG9tIGZpbGVuYW1lIGZvciBkb3dubG9hZCAod2l0aG91dCBleHRlbnNpb24pICovXG4gIGRvd25sb2FkRmlsZW5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqIFNoYXJlIHRpdGxlICovXG4gIHNoYXJlVGl0bGU/OiBzdHJpbmc7XG5cbiAgLyoqIFNoYXJlIHRleHQvZGVzY3JpcHRpb24gKi9cbiAgc2hhcmVUZXh0Pzogc3RyaW5nO1xuXG4gIC8qKiBDdXN0b20gZmlsZW5hbWUgZm9yIHNoYXJlICovXG4gIHNoYXJlRmlsZW5hbWU/OiBzdHJpbmc7XG5cbiAgLy8gPT09IFZpc3VhbCBDdXN0b21pemF0aW9uID09PVxuXG4gIC8qKiBUaGVtZSBwcmVzZXQgZm9yIHF1aWNrIHN0eWxpbmcgKi9cbiAgdGhlbWU/OiBRckRpc3BsYXlUaGVtZTtcblxuICAvKiogTGFiZWwvY2FwdGlvbiBjb25maWd1cmF0aW9uICovXG4gIGxhYmVsPzogUXJMYWJlbENvbmZpZztcblxuICAvKiogR3JhZGllbnQgYmFja2dyb3VuZCAob3ZlcnJpZGVzIGNvbnRhaW5lckJhY2tncm91bmQpICovXG4gIGdyYWRpZW50PzogUXJEaXNwbGF5R3JhZGllbnQ7XG5cbiAgLyoqIEJveCBzaGFkb3cgKGUuZy4sICdzbScsICdtZCcsICdsZycsICd4bCcsIG9yIGN1c3RvbSBDU1MpICovXG4gIHNoYWRvdz86ICdub25lJyB8ICdzbScgfCAnbWQnIHwgJ2xnJyB8ICd4bCcgfCBzdHJpbmc7XG5cbiAgLyoqIEdsb3cgZWZmZWN0IGNvbG9yIChmb3IgbmVvbiB0aGVtZSkgKi9cbiAgZ2xvd0NvbG9yPzogc3RyaW5nO1xuXG4gIC8qKiBFbmFibGUgcHVsc2UgYW5pbWF0aW9uIG9uIGhvdmVyICovXG4gIHB1bHNlT25Ib3Zlcj86IGJvb2xlYW47XG5cbiAgLyoqIEVuYWJsZSBzY2FsZSBhbmltYXRpb24gb24gaG92ZXIgKi9cbiAgc2NhbGVPbkhvdmVyPzogYm9vbGVhbjtcblxuICAvKiogUVIgaW1hZ2UgYm9yZGVyIHJhZGl1cyAodG8gcm91bmQgdGhlIFFSIGl0c2VsZikgKi9cbiAgcXJCb3JkZXJSYWRpdXM/OiBudW1iZXI7XG5cbiAgLyoqIFJlYWN0aXZlIGNvbnRlbnQga2V5cyAqL1xuICBkb3dubG9hZExhYmVsQ29udGVudEtleT86IHN0cmluZztcbiAgY29weUxhYmVsQ29udGVudEtleT86IHN0cmluZztcbiAgc2hhcmVMYWJlbENvbnRlbnRLZXk/OiBzdHJpbmc7XG4gIGNvbnRlbnRDbGFzcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBlbWl0dGVkIGFmdGVyIFFSIGNvZGUgYWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFFyQ29kZUFjdGlvbkV2ZW50IHtcbiAgLyoqIEFjdGlvbiB0eXBlICovXG4gIGFjdGlvbjogJ2Rvd25sb2FkJyB8ICdjb3B5JyB8ICdzaGFyZSc7XG4gIC8qKiBXaGV0aGVyIGFjdGlvbiB3YXMgc3VjY2Vzc2Z1bCAqL1xuICBzdWNjZXNzOiBib29sZWFuO1xuICAvKiogUVIgcmVzdWx0ICovXG4gIHFyOiBRclJlc3VsdDtcbiAgLyoqIEVycm9yIGlmIGFjdGlvbiBmYWlsZWQgKi9cbiAgZXJyb3I/OiBFcnJvcjtcbn1cbiJdfQ==