valtech-components 2.0.404 → 2.0.407

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 +6 -6
  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 +14848 -4293
  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 +11 -4
  279. package/public-api.d.ts +72 -2
  280. package/LICENSE +0 -21
@@ -0,0 +1,497 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, Input, Output, EventEmitter, inject } from '@angular/core';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { IonButton, IonIcon, IonSearchbar } from '@ionic/angular/standalone';
5
+ import { addIcons } from 'ionicons';
6
+ import { shuffleOutline } from 'ionicons/icons';
7
+ import { LangService } from '../../../services/lang-provider/lang-provider.service';
8
+ import { DEFAULT_LEGEND_LABELS, } from './types';
9
+ import * as i0 from "@angular/core";
10
+ addIcons({ shuffleOutline });
11
+ /**
12
+ * val-ticket-grid
13
+ *
14
+ * A grid for selecting ticket numbers, commonly used in raffles and lotteries.
15
+ *
16
+ * @example Basic usage
17
+ * ```html
18
+ * <val-ticket-grid
19
+ * [props]="{
20
+ * totalTickets: 100,
21
+ * soldTickets: [1, 5, 12, 23],
22
+ * selectionMode: 'multiple',
23
+ * maxSelection: 10
24
+ * }"
25
+ * (selectionChange)="onSelectionChange($event)"
26
+ * ></val-ticket-grid>
27
+ * ```
28
+ *
29
+ * @example With legend and search
30
+ * ```html
31
+ * <val-ticket-grid
32
+ * [props]="{
33
+ * totalTickets: 500,
34
+ * soldTickets: soldNumbers,
35
+ * reservedTickets: reservedNumbers,
36
+ * columns: 20,
37
+ * showLegend: true,
38
+ * showSearch: true,
39
+ * showRandomSelect: true,
40
+ * randomSelectCount: 5,
41
+ * maxSelection: 10
42
+ * }"
43
+ * ></val-ticket-grid>
44
+ * ```
45
+ */
46
+ export class TicketGridComponent {
47
+ constructor() {
48
+ this.selectionChange = new EventEmitter();
49
+ this.ticketClick = new EventEmitter();
50
+ this.tickets = [];
51
+ this.displayedTickets = [];
52
+ this.selectedTickets = [];
53
+ this.searchTerm = '';
54
+ this.highlightedNumbers = [];
55
+ this.langService = inject(LangService);
56
+ }
57
+ ngOnInit() {
58
+ this.buildTickets();
59
+ }
60
+ ngOnChanges(changes) {
61
+ if (changes['props']) {
62
+ this.buildTickets();
63
+ }
64
+ }
65
+ buildTickets() {
66
+ const start = this.props.startNumber ?? 1;
67
+ const total = this.props.totalTickets;
68
+ const soldSet = new Set(this.props.soldTickets || []);
69
+ const reservedSet = new Set(this.props.reservedTickets || []);
70
+ const disabledSet = new Set(this.props.disabledTickets || []);
71
+ const selectedSet = new Set(this.props.selectedTickets || []);
72
+ // Initialize selected tickets from props
73
+ this.selectedTickets = [...(this.props.selectedTickets || [])];
74
+ // Build ticket array
75
+ if (this.props.ticketData?.length) {
76
+ // Use custom ticket data
77
+ this.tickets = [...this.props.ticketData];
78
+ }
79
+ else {
80
+ // Generate from numbers
81
+ this.tickets = [];
82
+ for (let i = start; i < start + total; i++) {
83
+ let status = 'available';
84
+ if (disabledSet.has(i)) {
85
+ status = 'disabled';
86
+ }
87
+ else if (soldSet.has(i)) {
88
+ status = 'sold';
89
+ }
90
+ else if (reservedSet.has(i)) {
91
+ status = 'reserved';
92
+ }
93
+ else if (selectedSet.has(i)) {
94
+ status = 'selected';
95
+ }
96
+ this.tickets.push({ number: i, status });
97
+ }
98
+ }
99
+ this.applySearch();
100
+ }
101
+ applySearch() {
102
+ if (!this.searchTerm) {
103
+ this.displayedTickets = [...this.tickets];
104
+ this.highlightedNumbers = [];
105
+ }
106
+ else {
107
+ // Filter/highlight tickets matching search
108
+ const term = this.searchTerm.trim();
109
+ this.highlightedNumbers = this.tickets
110
+ .filter(t => this.formatNumber(t.number).includes(term))
111
+ .map(t => t.number);
112
+ this.displayedTickets = [...this.tickets];
113
+ }
114
+ }
115
+ onSearch(event) {
116
+ this.searchTerm = event.detail.value || '';
117
+ this.applySearch();
118
+ }
119
+ isHighlighted(number) {
120
+ return this.highlightedNumbers.includes(number);
121
+ }
122
+ isSelectable(ticket) {
123
+ if (this.props.selectionMode === 'none')
124
+ return false;
125
+ // Check if sold/reserved and admin override
126
+ if (ticket.status === 'sold' || ticket.status === 'reserved') {
127
+ return this.props.allowSelectSold === true;
128
+ }
129
+ if (ticket.status === 'disabled')
130
+ return false;
131
+ // Check max selection
132
+ if (ticket.status !== 'selected' &&
133
+ this.props.maxSelection &&
134
+ this.selectedTickets.length >= this.props.maxSelection) {
135
+ return false;
136
+ }
137
+ return true;
138
+ }
139
+ onTicketClick(ticket) {
140
+ const isSelected = this.selectedTickets.includes(ticket.number);
141
+ // Emit click event regardless
142
+ this.ticketClick.emit({
143
+ number: ticket.number,
144
+ status: ticket.status,
145
+ selected: this.isSelectable(ticket) ? !isSelected : null,
146
+ });
147
+ if (!this.isSelectable(ticket) && ticket.status !== 'selected') {
148
+ return;
149
+ }
150
+ // Handle selection
151
+ if (isSelected) {
152
+ // Deselect
153
+ this.selectedTickets = this.selectedTickets.filter(n => n !== ticket.number);
154
+ ticket.status = 'available';
155
+ this.selectionChange.emit({
156
+ selectedTickets: [...this.selectedTickets],
157
+ changedTicket: ticket.number,
158
+ action: 'deselect',
159
+ count: this.selectedTickets.length,
160
+ maxReached: false,
161
+ });
162
+ }
163
+ else {
164
+ // Select
165
+ if (this.props.selectionMode === 'single') {
166
+ // Deselect previous
167
+ this.selectedTickets.forEach(num => {
168
+ const t = this.tickets.find(x => x.number === num);
169
+ if (t)
170
+ t.status = 'available';
171
+ });
172
+ this.selectedTickets = [ticket.number];
173
+ }
174
+ else {
175
+ this.selectedTickets.push(ticket.number);
176
+ }
177
+ ticket.status = 'selected';
178
+ this.selectionChange.emit({
179
+ selectedTickets: [...this.selectedTickets],
180
+ changedTicket: ticket.number,
181
+ action: 'select',
182
+ count: this.selectedTickets.length,
183
+ maxReached: this.props.maxSelection
184
+ ? this.selectedTickets.length >= this.props.maxSelection
185
+ : false,
186
+ });
187
+ }
188
+ }
189
+ selectRandom() {
190
+ const count = this.props.randomSelectCount || 1;
191
+ const available = this.tickets.filter(t => t.status === 'available' && !this.selectedTickets.includes(t.number));
192
+ // Determine how many we can select
193
+ const maxCanSelect = this.props.maxSelection
194
+ ? Math.min(count, this.props.maxSelection - this.selectedTickets.length)
195
+ : count;
196
+ if (available.length === 0 || maxCanSelect <= 0)
197
+ return;
198
+ // Random shuffle and pick
199
+ const shuffled = [...available].sort(() => Math.random() - 0.5);
200
+ const toSelect = shuffled.slice(0, Math.min(maxCanSelect, available.length));
201
+ toSelect.forEach(ticket => {
202
+ ticket.status = 'selected';
203
+ this.selectedTickets.push(ticket.number);
204
+ });
205
+ this.selectionChange.emit({
206
+ selectedTickets: [...this.selectedTickets],
207
+ changedTicket: toSelect[toSelect.length - 1].number,
208
+ action: 'select',
209
+ count: this.selectedTickets.length,
210
+ maxReached: this.props.maxSelection
211
+ ? this.selectedTickets.length >= this.props.maxSelection
212
+ : false,
213
+ });
214
+ }
215
+ /**
216
+ * Clear all selections.
217
+ */
218
+ clearSelection() {
219
+ this.selectedTickets.forEach(num => {
220
+ const ticket = this.tickets.find(t => t.number === num);
221
+ if (ticket)
222
+ ticket.status = 'available';
223
+ });
224
+ this.selectedTickets = [];
225
+ }
226
+ /**
227
+ * Get selected ticket numbers.
228
+ */
229
+ getSelectedTickets() {
230
+ return [...this.selectedTickets];
231
+ }
232
+ get availableCount() {
233
+ return this.tickets.filter(t => t.status === 'available').length;
234
+ }
235
+ get soldCount() {
236
+ return this.tickets.filter(t => t.status === 'sold').length;
237
+ }
238
+ getLegendItems() {
239
+ if (this.props.legendItems) {
240
+ return this.props.legendItems;
241
+ }
242
+ const items = [
243
+ { status: 'available', label: DEFAULT_LEGEND_LABELS.available, count: this.availableCount },
244
+ { status: 'selected', label: DEFAULT_LEGEND_LABELS.selected, count: this.selectedTickets.length },
245
+ ];
246
+ if (this.props.soldTickets?.length) {
247
+ items.push({ status: 'sold', label: DEFAULT_LEGEND_LABELS.sold, count: this.soldCount });
248
+ }
249
+ if (this.props.reservedTickets?.length) {
250
+ items.push({
251
+ status: 'reserved',
252
+ label: DEFAULT_LEGEND_LABELS.reserved,
253
+ count: this.props.reservedTickets.length,
254
+ });
255
+ }
256
+ return items;
257
+ }
258
+ formatNumber(num) {
259
+ if (this.props.numberPadding) {
260
+ return String(num).padStart(this.props.numberPadding, '0');
261
+ }
262
+ return String(num);
263
+ }
264
+ getTicketAriaLabel(ticket) {
265
+ const statusLabel = DEFAULT_LEGEND_LABELS[ticket.status];
266
+ return `Boleto ${this.formatNumber(ticket.number)}, ${statusLabel}`;
267
+ }
268
+ getSearchPlaceholder() {
269
+ if (this.props.searchPlaceholderContentKey && this.props.contentClass) {
270
+ return this.langService.getText(this.props.contentClass, this.props.searchPlaceholderContentKey, this.props.searchPlaceholder || 'Buscar número...');
271
+ }
272
+ return this.props.searchPlaceholder || 'Buscar número...';
273
+ }
274
+ getRandomSelectLabel() {
275
+ if (this.props.randomSelectLabelContentKey && this.props.contentClass) {
276
+ return this.langService.getText(this.props.contentClass, this.props.randomSelectLabelContentKey, this.props.randomSelectLabel || 'Aleatorio');
277
+ }
278
+ return this.props.randomSelectLabel || 'Aleatorio';
279
+ }
280
+ getColor() {
281
+ if (this.props.color) {
282
+ return `var(--ion-color-${this.props.color})`;
283
+ }
284
+ return 'var(--ion-color-primary)';
285
+ }
286
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TicketGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
287
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TicketGridComponent, isStandalone: true, selector: "val-ticket-grid", inputs: { props: "props" }, outputs: { selectionChange: "selectionChange", ticketClick: "ticketClick" }, usesOnChanges: true, ngImport: i0, template: `
288
+ <div
289
+ class="ticket-grid-container"
290
+ [class]="props.cssClass"
291
+ [class.size-small]="props.ticketSize === 'small'"
292
+ [class.size-medium]="props.ticketSize === 'medium' || !props.ticketSize"
293
+ [class.size-large]="props.ticketSize === 'large'"
294
+ [style.--grid-columns]="props.columns || 10"
295
+ [style.--grid-gap]="(props.gap || 4) + 'px'"
296
+ [style.--selected-color]="getColor()"
297
+ >
298
+ <!-- Search and controls -->
299
+ @if (props.showSearch || props.showRandomSelect) {
300
+ <div class="grid-controls">
301
+ @if (props.showSearch) {
302
+ <ion-searchbar
303
+ [placeholder]="getSearchPlaceholder()"
304
+ [debounce]="300"
305
+ (ionInput)="onSearch($event)"
306
+ class="ticket-search"
307
+ ></ion-searchbar>
308
+ }
309
+
310
+ @if (props.showRandomSelect && props.selectionMode !== 'none') {
311
+ <ion-button
312
+ fill="outline"
313
+ [color]="props.color || 'primary'"
314
+ (click)="selectRandom()"
315
+ [disabled]="availableCount < (props.randomSelectCount || 1)"
316
+ >
317
+ <ion-icon slot="start" name="shuffle-outline"></ion-icon>
318
+ {{ getRandomSelectLabel() }}
319
+ </ion-button>
320
+ }
321
+ </div>
322
+ }
323
+
324
+ <!-- Legend (top) -->
325
+ @if (props.showLegend && props.legendPosition !== 'bottom') {
326
+ <div class="ticket-legend">
327
+ @for (item of getLegendItems(); track item.status) {
328
+ <div class="legend-item">
329
+ <span class="legend-color" [class]="'status-' + item.status"></span>
330
+ <span class="legend-label">{{ item.label }}</span>
331
+ @if (item.count !== undefined) {
332
+ <span class="legend-count">({{ item.count }})</span>
333
+ }
334
+ </div>
335
+ }
336
+ </div>
337
+ }
338
+
339
+ <!-- Summary -->
340
+ @if (props.showSummary) {
341
+ <div class="ticket-summary">
342
+ <span class="summary-item">
343
+ <strong>{{ selectedTickets.length }}</strong> seleccionado{{ selectedTickets.length !== 1 ? 's' : '' }}
344
+ </span>
345
+ @if (props.maxSelection) {
346
+ <span class="summary-item">
347
+ (máx: {{ props.maxSelection }})
348
+ </span>
349
+ }
350
+ </div>
351
+ }
352
+
353
+ <!-- Grid -->
354
+ <div class="ticket-grid" role="grid">
355
+ @for (ticket of displayedTickets; track ticket.number) {
356
+ <button
357
+ type="button"
358
+ class="ticket-cell"
359
+ [class]="'status-' + ticket.status"
360
+ [class.highlighted]="isHighlighted(ticket.number)"
361
+ [disabled]="!isSelectable(ticket)"
362
+ [attr.aria-label]="getTicketAriaLabel(ticket)"
363
+ [attr.aria-pressed]="ticket.status === 'selected'"
364
+ (click)="onTicketClick(ticket)"
365
+ >
366
+ {{ formatNumber(ticket.number) }}
367
+ </button>
368
+ }
369
+ </div>
370
+
371
+ <!-- Legend (bottom) -->
372
+ @if (props.showLegend && props.legendPosition === 'bottom') {
373
+ <div class="ticket-legend bottom">
374
+ @for (item of getLegendItems(); track item.status) {
375
+ <div class="legend-item">
376
+ <span class="legend-color" [class]="'status-' + item.status"></span>
377
+ <span class="legend-label">{{ item.label }}</span>
378
+ @if (item.count !== undefined) {
379
+ <span class="legend-count">({{ item.count }})</span>
380
+ }
381
+ </div>
382
+ }
383
+ </div>
384
+ }
385
+ </div>
386
+ `, isInline: true, styles: ["@charset \"UTF-8\";:host{display:block}.ticket-grid-container{--grid-columns: 10;--grid-gap: 4px;--selected-color: var(--ion-color-primary);display:flex;flex-direction:column;gap:16px}.grid-controls{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between}.ticket-search{flex:1;min-width:200px;max-width:300px;--border-radius: 8px}.ticket-legend{display:flex;flex-wrap:wrap;gap:16px;padding:8px 0}.ticket-legend.bottom{border-top:1px solid var(--ion-color-light-shade);padding-top:12px;margin-top:8px}.legend-item{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ion-color-medium-shade)}.legend-color{width:16px;height:16px;border-radius:4px;border:1px solid var(--ion-color-medium)}.legend-color.status-available{background:var(--ion-color-light);border-color:var(--ion-color-medium)}.legend-color.status-selected{background:var(--selected-color);border-color:var(--selected-color)}.legend-color.status-sold{background:var(--ion-color-medium);border-color:var(--ion-color-medium-shade)}.legend-color.status-reserved{background:var(--ion-color-warning-tint);border-color:var(--ion-color-warning)}.legend-color.status-disabled{background:var(--ion-color-light-shade);border-color:var(--ion-color-medium);opacity:.5}.legend-count{color:var(--ion-color-medium);font-size:11px}.ticket-summary{display:flex;gap:8px;align-items:center;font-size:14px;color:var(--ion-color-dark);padding:8px 12px;background:var(--ion-color-light);border-radius:8px}.summary-item:not(:last-child):after{content:\"\\2022\";margin-left:8px;color:var(--ion-color-medium)}.ticket-grid{display:grid;grid-template-columns:repeat(var(--grid-columns),1fr);gap:var(--grid-gap)}.ticket-cell{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border:1px solid var(--ion-color-medium);border-radius:4px;background:var(--ion-color-light);font-size:12px;font-weight:500;color:var(--ion-color-dark);cursor:pointer;transition:all .15s ease;padding:0;font-family:inherit}.ticket-cell:hover:not(:disabled){border-color:var(--selected-color);transform:scale(1.05);z-index:1}.ticket-cell:focus{outline:2px solid var(--selected-color);outline-offset:1px}.ticket-cell.status-available{background:var(--ion-color-light);border-color:var(--ion-color-medium)}.ticket-cell.status-available:hover:not(:disabled){background:var(--ion-color-light-shade)}.ticket-cell.status-selected{background:var(--selected-color);border-color:var(--selected-color);color:#fff;font-weight:600}.ticket-cell.status-sold{background:var(--ion-color-medium);border-color:var(--ion-color-medium-shade);color:var(--ion-color-medium-contrast);cursor:not-allowed;opacity:.7}.ticket-cell.status-reserved{background:var(--ion-color-warning-tint);border-color:var(--ion-color-warning);color:var(--ion-color-warning-shade);cursor:not-allowed}.ticket-cell.status-disabled{background:var(--ion-color-light-shade);border-color:var(--ion-color-medium);color:var(--ion-color-medium);cursor:not-allowed;opacity:.5}.ticket-cell.highlighted{box-shadow:0 0 0 2px var(--ion-color-tertiary);z-index:2}.ticket-cell:disabled{cursor:not-allowed}.size-small .ticket-grid{--grid-gap: 2px}.size-small .ticket-cell{font-size:10px;border-radius:2px}.size-small .ticket-legend{gap:12px}.size-small .legend-color{width:12px;height:12px}.size-small .legend-item{font-size:11px}.size-large .ticket-grid{--grid-gap: 6px}.size-large .ticket-cell{font-size:14px;border-radius:6px;font-weight:600}.size-large .ticket-legend{gap:20px}.size-large .legend-color{width:20px;height:20px}.size-large .legend-item{font-size:14px}@media (max-width: 576px){.grid-controls{flex-direction:column;align-items:stretch}.ticket-search{max-width:100%}.ticket-legend{justify-content:center}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { 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: IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "mode", "name", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }] }); }
387
+ }
388
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TicketGridComponent, decorators: [{
389
+ type: Component,
390
+ args: [{ selector: 'val-ticket-grid', standalone: true, imports: [CommonModule, FormsModule, IonButton, IonIcon, IonSearchbar], template: `
391
+ <div
392
+ class="ticket-grid-container"
393
+ [class]="props.cssClass"
394
+ [class.size-small]="props.ticketSize === 'small'"
395
+ [class.size-medium]="props.ticketSize === 'medium' || !props.ticketSize"
396
+ [class.size-large]="props.ticketSize === 'large'"
397
+ [style.--grid-columns]="props.columns || 10"
398
+ [style.--grid-gap]="(props.gap || 4) + 'px'"
399
+ [style.--selected-color]="getColor()"
400
+ >
401
+ <!-- Search and controls -->
402
+ @if (props.showSearch || props.showRandomSelect) {
403
+ <div class="grid-controls">
404
+ @if (props.showSearch) {
405
+ <ion-searchbar
406
+ [placeholder]="getSearchPlaceholder()"
407
+ [debounce]="300"
408
+ (ionInput)="onSearch($event)"
409
+ class="ticket-search"
410
+ ></ion-searchbar>
411
+ }
412
+
413
+ @if (props.showRandomSelect && props.selectionMode !== 'none') {
414
+ <ion-button
415
+ fill="outline"
416
+ [color]="props.color || 'primary'"
417
+ (click)="selectRandom()"
418
+ [disabled]="availableCount < (props.randomSelectCount || 1)"
419
+ >
420
+ <ion-icon slot="start" name="shuffle-outline"></ion-icon>
421
+ {{ getRandomSelectLabel() }}
422
+ </ion-button>
423
+ }
424
+ </div>
425
+ }
426
+
427
+ <!-- Legend (top) -->
428
+ @if (props.showLegend && props.legendPosition !== 'bottom') {
429
+ <div class="ticket-legend">
430
+ @for (item of getLegendItems(); track item.status) {
431
+ <div class="legend-item">
432
+ <span class="legend-color" [class]="'status-' + item.status"></span>
433
+ <span class="legend-label">{{ item.label }}</span>
434
+ @if (item.count !== undefined) {
435
+ <span class="legend-count">({{ item.count }})</span>
436
+ }
437
+ </div>
438
+ }
439
+ </div>
440
+ }
441
+
442
+ <!-- Summary -->
443
+ @if (props.showSummary) {
444
+ <div class="ticket-summary">
445
+ <span class="summary-item">
446
+ <strong>{{ selectedTickets.length }}</strong> seleccionado{{ selectedTickets.length !== 1 ? 's' : '' }}
447
+ </span>
448
+ @if (props.maxSelection) {
449
+ <span class="summary-item">
450
+ (máx: {{ props.maxSelection }})
451
+ </span>
452
+ }
453
+ </div>
454
+ }
455
+
456
+ <!-- Grid -->
457
+ <div class="ticket-grid" role="grid">
458
+ @for (ticket of displayedTickets; track ticket.number) {
459
+ <button
460
+ type="button"
461
+ class="ticket-cell"
462
+ [class]="'status-' + ticket.status"
463
+ [class.highlighted]="isHighlighted(ticket.number)"
464
+ [disabled]="!isSelectable(ticket)"
465
+ [attr.aria-label]="getTicketAriaLabel(ticket)"
466
+ [attr.aria-pressed]="ticket.status === 'selected'"
467
+ (click)="onTicketClick(ticket)"
468
+ >
469
+ {{ formatNumber(ticket.number) }}
470
+ </button>
471
+ }
472
+ </div>
473
+
474
+ <!-- Legend (bottom) -->
475
+ @if (props.showLegend && props.legendPosition === 'bottom') {
476
+ <div class="ticket-legend bottom">
477
+ @for (item of getLegendItems(); track item.status) {
478
+ <div class="legend-item">
479
+ <span class="legend-color" [class]="'status-' + item.status"></span>
480
+ <span class="legend-label">{{ item.label }}</span>
481
+ @if (item.count !== undefined) {
482
+ <span class="legend-count">({{ item.count }})</span>
483
+ }
484
+ </div>
485
+ }
486
+ </div>
487
+ }
488
+ </div>
489
+ `, styles: ["@charset \"UTF-8\";:host{display:block}.ticket-grid-container{--grid-columns: 10;--grid-gap: 4px;--selected-color: var(--ion-color-primary);display:flex;flex-direction:column;gap:16px}.grid-controls{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between}.ticket-search{flex:1;min-width:200px;max-width:300px;--border-radius: 8px}.ticket-legend{display:flex;flex-wrap:wrap;gap:16px;padding:8px 0}.ticket-legend.bottom{border-top:1px solid var(--ion-color-light-shade);padding-top:12px;margin-top:8px}.legend-item{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ion-color-medium-shade)}.legend-color{width:16px;height:16px;border-radius:4px;border:1px solid var(--ion-color-medium)}.legend-color.status-available{background:var(--ion-color-light);border-color:var(--ion-color-medium)}.legend-color.status-selected{background:var(--selected-color);border-color:var(--selected-color)}.legend-color.status-sold{background:var(--ion-color-medium);border-color:var(--ion-color-medium-shade)}.legend-color.status-reserved{background:var(--ion-color-warning-tint);border-color:var(--ion-color-warning)}.legend-color.status-disabled{background:var(--ion-color-light-shade);border-color:var(--ion-color-medium);opacity:.5}.legend-count{color:var(--ion-color-medium);font-size:11px}.ticket-summary{display:flex;gap:8px;align-items:center;font-size:14px;color:var(--ion-color-dark);padding:8px 12px;background:var(--ion-color-light);border-radius:8px}.summary-item:not(:last-child):after{content:\"\\2022\";margin-left:8px;color:var(--ion-color-medium)}.ticket-grid{display:grid;grid-template-columns:repeat(var(--grid-columns),1fr);gap:var(--grid-gap)}.ticket-cell{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border:1px solid var(--ion-color-medium);border-radius:4px;background:var(--ion-color-light);font-size:12px;font-weight:500;color:var(--ion-color-dark);cursor:pointer;transition:all .15s ease;padding:0;font-family:inherit}.ticket-cell:hover:not(:disabled){border-color:var(--selected-color);transform:scale(1.05);z-index:1}.ticket-cell:focus{outline:2px solid var(--selected-color);outline-offset:1px}.ticket-cell.status-available{background:var(--ion-color-light);border-color:var(--ion-color-medium)}.ticket-cell.status-available:hover:not(:disabled){background:var(--ion-color-light-shade)}.ticket-cell.status-selected{background:var(--selected-color);border-color:var(--selected-color);color:#fff;font-weight:600}.ticket-cell.status-sold{background:var(--ion-color-medium);border-color:var(--ion-color-medium-shade);color:var(--ion-color-medium-contrast);cursor:not-allowed;opacity:.7}.ticket-cell.status-reserved{background:var(--ion-color-warning-tint);border-color:var(--ion-color-warning);color:var(--ion-color-warning-shade);cursor:not-allowed}.ticket-cell.status-disabled{background:var(--ion-color-light-shade);border-color:var(--ion-color-medium);color:var(--ion-color-medium);cursor:not-allowed;opacity:.5}.ticket-cell.highlighted{box-shadow:0 0 0 2px var(--ion-color-tertiary);z-index:2}.ticket-cell:disabled{cursor:not-allowed}.size-small .ticket-grid{--grid-gap: 2px}.size-small .ticket-cell{font-size:10px;border-radius:2px}.size-small .ticket-legend{gap:12px}.size-small .legend-color{width:12px;height:12px}.size-small .legend-item{font-size:11px}.size-large .ticket-grid{--grid-gap: 6px}.size-large .ticket-cell{font-size:14px;border-radius:6px;font-weight:600}.size-large .ticket-legend{gap:20px}.size-large .legend-color{width:20px;height:20px}.size-large .legend-item{font-size:14px}@media (max-width: 576px){.grid-controls{flex-direction:column;align-items:stretch}.ticket-search{max-width:100%}.ticket-legend{justify-content:center}}\n"] }]
490
+ }], propDecorators: { props: [{
491
+ type: Input
492
+ }], selectionChange: [{
493
+ type: Output
494
+ }], ticketClick: [{
495
+ type: Output
496
+ }] } });
497
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlja2V0LWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy90aWNrZXQtZ3JpZC90aWNrZXQtZ3JpZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQW9DLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ3BGLE9BQU8sRUFPTCxxQkFBcUIsR0FDdEIsTUFBTSxTQUFTLENBQUM7O0FBRWpCLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7QUE0RzdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQTdJaEM7UUFnSlksb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBNEIsQ0FBQztRQUMvRCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUF3QixDQUFDO1FBRWpFLFlBQU8sR0FBaUIsRUFBRSxDQUFDO1FBQzNCLHFCQUFnQixHQUFpQixFQUFFLENBQUM7UUFDcEMsb0JBQWUsR0FBYSxFQUFFLENBQUM7UUFDL0IsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQix1QkFB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QUssQ0FBQyxZQUFZLEVBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEVBQ3RDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksV0FBVyxDQUM1QyxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxXQUFXLENBQUM7SUFDckQsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDckIsT0FBTyxtQkFBbUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTywwQkFBMEIsQ0FBQztJQUNwQyxDQUFDOytHQTVSVSxtQkFBbUI7bUdBQW5CLG1CQUFtQix5TUF6SXBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtR1QsOHRIQXBHUyxZQUFZLDhCQUFFLFdBQVcsK0JBQUUsU0FBUyxvUEFBRSxPQUFPLDJKQUFFLFlBQVk7OzRGQTBJMUQsbUJBQW1CO2tCQTdJL0IsU0FBUzsrQkFDRSxpQkFBaUIsY0FDZixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLFlBQzVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtR1Q7OEJBdUNRLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uLCBJb25TZWFyY2hiYXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgc2h1ZmZsZU91dGxpbmUgfSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5pbXBvcnQgeyBMYW5nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2xhbmctcHJvdmlkZXIvbGFuZy1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFRpY2tldEdyaWRNZXRhZGF0YSxcbiAgVGlja2V0R3JpZFNlbGVjdGlvbkV2ZW50LFxuICBUaWNrZXRHcmlkQ2xpY2tFdmVudCxcbiAgVGlja2V0U3RhdHVzLFxuICBUaWNrZXREYXRhLFxuICBUaWNrZXRHcmlkTGVnZW5kSXRlbSxcbiAgREVGQVVMVF9MRUdFTkRfTEFCRUxTLFxufSBmcm9tICcuL3R5cGVzJztcblxuYWRkSWNvbnMoeyBzaHVmZmxlT3V0bGluZSB9KTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXRpY2tldC1ncmlkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIElvbkJ1dHRvbiwgSW9uSWNvbiwgSW9uU2VhcmNoYmFyXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInRpY2tldC1ncmlkLWNvbnRhaW5lclwiXG4gICAgICBbY2xhc3NdPVwicHJvcHMuY3NzQ2xhc3NcIlxuICAgICAgW2NsYXNzLnNpemUtc21hbGxdPVwicHJvcHMudGlja2V0U2l6ZSA9PT0gJ3NtYWxsJ1wiXG4gICAgICBbY2xhc3Muc2l6ZS1tZWRpdW1dPVwicHJvcHMudGlja2V0U2l6ZSA9PT0gJ21lZGl1bScgfHwgIXByb3BzLnRpY2tldFNpemVcIlxuICAgICAgW2NsYXNzLnNpemUtbGFyZ2VdPVwicHJvcHMudGlja2V0U2l6ZSA9PT0gJ2xhcmdlJ1wiXG4gICAgICBbc3R5bGUuLS1ncmlkLWNvbHVtbnNdPVwicHJvcHMuY29sdW1ucyB8fCAxMFwiXG4gICAgICBbc3R5bGUuLS1ncmlkLWdhcF09XCIocHJvcHMuZ2FwIHx8IDQpICsgJ3B4J1wiXG4gICAgICBbc3R5bGUuLS1zZWxlY3RlZC1jb2xvcl09XCJnZXRDb2xvcigpXCJcbiAgICA+XG4gICAgICA8IS0tIFNlYXJjaCBhbmQgY29udHJvbHMgLS0+XG4gICAgICBAaWYgKHByb3BzLnNob3dTZWFyY2ggfHwgcHJvcHMuc2hvd1JhbmRvbVNlbGVjdCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jb250cm9sc1wiPlxuICAgICAgICAgIEBpZiAocHJvcHMuc2hvd1NlYXJjaCkge1xuICAgICAgICAgICAgPGlvbi1zZWFyY2hiYXJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdldFNlYXJjaFBsYWNlaG9sZGVyKClcIlxuICAgICAgICAgICAgICBbZGVib3VuY2VdPVwiMzAwXCJcbiAgICAgICAgICAgICAgKGlvbklucHV0KT1cIm9uU2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICBjbGFzcz1cInRpY2tldC1zZWFyY2hcIlxuICAgICAgICAgICAgPjwvaW9uLXNlYXJjaGJhcj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgKHByb3BzLnNob3dSYW5kb21TZWxlY3QgJiYgcHJvcHMuc2VsZWN0aW9uTW9kZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgICBmaWxsPVwib3V0bGluZVwiXG4gICAgICAgICAgICAgIFtjb2xvcl09XCJwcm9wcy5jb2xvciB8fCAncHJpbWFyeSdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UmFuZG9tKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYXZhaWxhYmxlQ291bnQgPCAocHJvcHMucmFuZG9tU2VsZWN0Q291bnQgfHwgMSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgbmFtZT1cInNodWZmbGUtb3V0bGluZVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgICAgIHt7IGdldFJhbmRvbVNlbGVjdExhYmVsKCkgfX1cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8IS0tIExlZ2VuZCAodG9wKSAtLT5cbiAgICAgIEBpZiAocHJvcHMuc2hvd0xlZ2VuZCAmJiBwcm9wcy5sZWdlbmRQb3NpdGlvbiAhPT0gJ2JvdHRvbScpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpY2tldC1sZWdlbmRcIj5cbiAgICAgICAgICBAZm9yIChpdGVtIG9mIGdldExlZ2VuZEl0ZW1zKCk7IHRyYWNrIGl0ZW0uc3RhdHVzKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsZWdlbmQtY29sb3JcIiBbY2xhc3NdPVwiJ3N0YXR1cy0nICsgaXRlbS5zdGF0dXNcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGVnZW5kLWxhYmVsXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgQGlmIChpdGVtLmNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxlZ2VuZC1jb3VudFwiPih7eyBpdGVtLmNvdW50IH19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgPCEtLSBTdW1tYXJ5IC0tPlxuICAgICAgQGlmIChwcm9wcy5zaG93U3VtbWFyeSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LXN1bW1hcnlcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktaXRlbVwiPlxuICAgICAgICAgICAgPHN0cm9uZz57eyBzZWxlY3RlZFRpY2tldHMubGVuZ3RoIH19PC9zdHJvbmc+IHNlbGVjY2lvbmFkb3t7IHNlbGVjdGVkVGlja2V0cy5sZW5ndGggIT09IDEgPyAncycgOiAnJyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICBAaWYgKHByb3BzLm1heFNlbGVjdGlvbikge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdW1tYXJ5LWl0ZW1cIj5cbiAgICAgICAgICAgICAgKG3DoXg6IHt7IHByb3BzLm1heFNlbGVjdGlvbiB9fSlcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8IS0tIEdyaWQgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWdyaWRcIiByb2xlPVwiZ3JpZFwiPlxuICAgICAgICBAZm9yICh0aWNrZXQgb2YgZGlzcGxheWVkVGlja2V0czsgdHJhY2sgdGlja2V0Lm51bWJlcikge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJ0aWNrZXQtY2VsbFwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiJ3N0YXR1cy0nICsgdGlja2V0LnN0YXR1c1wiXG4gICAgICAgICAgICBbY2xhc3MuaGlnaGxpZ2h0ZWRdPVwiaXNIaWdobGlnaHRlZCh0aWNrZXQubnVtYmVyKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzU2VsZWN0YWJsZSh0aWNrZXQpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ2V0VGlja2V0QXJpYUxhYmVsKHRpY2tldClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1wcmVzc2VkXT1cInRpY2tldC5zdGF0dXMgPT09ICdzZWxlY3RlZCdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uVGlja2V0Q2xpY2sodGlja2V0KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgZm9ybWF0TnVtYmVyKHRpY2tldC5udW1iZXIpIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIExlZ2VuZCAoYm90dG9tKSAtLT5cbiAgICAgIEBpZiAocHJvcHMuc2hvd0xlZ2VuZCAmJiBwcm9wcy5sZWdlbmRQb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInRpY2tldC1sZWdlbmQgYm90dG9tXCI+XG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBnZXRMZWdlbmRJdGVtcygpOyB0cmFjayBpdGVtLnN0YXR1cykge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGVnZW5kLWNvbG9yXCIgW2NsYXNzXT1cIidzdGF0dXMtJyArIGl0ZW0uc3RhdHVzXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxlZ2VuZC1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgIEBpZiAoaXRlbS5jb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsZWdlbmQtY291bnRcIj4oe3sgaXRlbS5jb3VudCB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL3RpY2tldC1ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtdGlja2V0LWdyaWRcbiAqXG4gKiBBIGdyaWQgZm9yIHNlbGVjdGluZyB0aWNrZXQgbnVtYmVycywgY29tbW9ubHkgdXNlZCBpbiByYWZmbGVzIGFuZCBsb3R0ZXJpZXMuXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2VcbiAqIGBgYGh0bWxcbiAqIDx2YWwtdGlja2V0LWdyaWRcbiAqICAgW3Byb3BzXT1cIntcbiAqICAgICB0b3RhbFRpY2tldHM6IDEwMCxcbiAqICAgICBzb2xkVGlja2V0czogWzEsIDUsIDEyLCAyM10sXG4gKiAgICAgc2VsZWN0aW9uTW9kZTogJ211bHRpcGxlJyxcbiAqICAgICBtYXhTZWxlY3Rpb246IDEwXG4gKiAgIH1cIlxuICogICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICogPjwvdmFsLXRpY2tldC1ncmlkPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgV2l0aCBsZWdlbmQgYW5kIHNlYXJjaFxuICogYGBgaHRtbFxuICogPHZhbC10aWNrZXQtZ3JpZFxuICogICBbcHJvcHNdPVwie1xuICogICAgIHRvdGFsVGlja2V0czogNTAwLFxuICogICAgIHNvbGRUaWNrZXRzOiBzb2xkTnVtYmVycyxcbiAqICAgICByZXNlcnZlZFRpY2tldHM6IHJlc2VydmVkTnVtYmVycyxcbiAqICAgICBjb2x1bW5zOiAyMCxcbiAqICAgICBzaG93TGVnZW5kOiB0cnVlLFxuICogICAgIHNob3dTZWFyY2g6IHRydWUsXG4gKiAgICAgc2hvd1JhbmRvbVNlbGVjdDogdHJ1ZSxcbiAqICAgICByYW5kb21TZWxlY3RDb3VudDogNSxcbiAqICAgICBtYXhTZWxlY3Rpb246IDEwXG4gKiAgIH1cIlxuICogPjwvdmFsLXRpY2tldC1ncmlkPlxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBUaWNrZXRHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBwcm9wczogVGlja2V0R3JpZE1ldGFkYXRhO1xuXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRpY2tldEdyaWRTZWxlY3Rpb25FdmVudD4oKTtcbiAgQE91dHB1dCgpIHRpY2tldENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxUaWNrZXRHcmlkQ2xpY2tFdmVudD4oKTtcblxuICB0aWNrZXRzOiBUaWNrZXREYXRhW10gPSBbXTtcbiAgZGlzcGxheWVkVGlja2V0czogVGlja2V0RGF0YVtdID0gW107XG4gIHNlbGVjdGVkVGlja2V0czogbnVtYmVyW10gPSBbXTtcbiAgc2VhcmNoVGVybSA9ICcnO1xuICBoaWdobGlnaHRlZE51bWJlcnM6IG51bWJlcltdID0gW107XG5cbiAgcHJpdmF0ZSBsYW5nU2VydmljZSA9IGluamVjdChMYW5nU2VydmljZSk7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5idWlsZFRpY2tldHMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sncHJvcHMnXSkge1xuICAgICAgdGhpcy5idWlsZFRpY2tldHMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVGlja2V0cygpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMucHJvcHMuc3RhcnROdW1iZXIgPz8gMTtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMucHJvcHMudG90YWxUaWNrZXRzO1xuICAgIGNvbnN0IHNvbGRTZXQgPSBuZXcgU2V0KHRoaXMucHJvcHMuc29sZFRpY2tldHMgfHwgW10pO1xuICAgIGNvbnN0IHJlc2VydmVkU2V0ID0gbmV3IFNldCh0aGlzLnByb3BzLnJlc2VydmVkVGlja2V0cyB8fCBbXSk7XG4gICAgY29uc3QgZGlzYWJsZWRTZXQgPSBuZXcgU2V0KHRoaXMucHJvcHMuZGlzYWJsZWRUaWNrZXRzIHx8IFtdKTtcbiAgICBjb25zdCBzZWxlY3RlZFNldCA9IG5ldyBTZXQodGhpcy5wcm9wcy5zZWxlY3RlZFRpY2tldHMgfHwgW10pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzZWxlY3RlZCB0aWNrZXRzIGZyb20gcHJvcHNcbiAgICB0aGlzLnNlbGVjdGVkVGlja2V0cyA9IFsuLi4odGhpcy5wcm9wcy5zZWxlY3RlZFRpY2tldHMgfHwgW10pXTtcblxuICAgIC8vIEJ1aWxkIHRpY2tldCBhcnJheVxuICAgIGlmICh0aGlzLnByb3BzLnRpY2tldERhdGE/Lmxlbmd0aCkge1xuICAgICAgLy8gVXNlIGN1c3RvbSB0aWNrZXQgZGF0YVxuICAgICAgdGhpcy50aWNrZXRzID0gWy4uLnRoaXMucHJvcHMudGlja2V0RGF0YV07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEdlbmVyYXRlIGZyb20gbnVtYmVyc1xuICAgICAgdGhpcy50aWNrZXRzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBzdGFydCArIHRvdGFsOyBpKyspIHtcbiAgICAgICAgbGV0IHN0YXR1czogVGlja2V0U3RhdHVzID0gJ2F2YWlsYWJsZSc7XG5cbiAgICAgICAgaWYgKGRpc2FibGVkU2V0LmhhcyhpKSkge1xuICAgICAgICAgIHN0YXR1cyA9ICdkaXNhYmxlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAoc29sZFNldC5oYXMoaSkpIHtcbiAgICAgICAgICBzdGF0dXMgPSAnc29sZCc7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzZXJ2ZWRTZXQuaGFzKGkpKSB7XG4gICAgICAgICAgc3RhdHVzID0gJ3Jlc2VydmVkJztcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZFNldC5oYXMoaSkpIHtcbiAgICAgICAgICBzdGF0dXMgPSAnc2VsZWN0ZWQnO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aWNrZXRzLnB1c2goeyBudW1iZXI6IGksIHN0YXR1cyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFwcGx5U2VhcmNoKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2VhcmNoKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWFyY2hUZXJtKSB7XG4gICAgICB0aGlzLmRpc3BsYXllZFRpY2tldHMgPSBbLi4udGhpcy50aWNrZXRzXTtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWROdW1iZXJzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZpbHRlci9oaWdobGlnaHQgdGlja2V0cyBtYXRjaGluZyBzZWFyY2hcbiAgICAgIGNvbnN0IHRlcm0gPSB0aGlzLnNlYXJjaFRlcm0udHJpbSgpO1xuICAgICAgdGhpcy5oaWdobGlnaHRlZE51bWJlcnMgPSB0aGlzLnRpY2tldHNcbiAgICAgICAgLmZpbHRlcih0ID0+IHRoaXMuZm9ybWF0TnVtYmVyKHQubnVtYmVyKS5pbmNsdWRlcyh0ZXJtKSlcbiAgICAgICAgLm1hcCh0ID0+IHQubnVtYmVyKTtcbiAgICAgIHRoaXMuZGlzcGxheWVkVGlja2V0cyA9IFsuLi50aGlzLnRpY2tldHNdO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoKGV2ZW50OiBDdXN0b21FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2VhcmNoVGVybSA9IGV2ZW50LmRldGFpbC52YWx1ZSB8fCAnJztcbiAgICB0aGlzLmFwcGx5U2VhcmNoKCk7XG4gIH1cblxuICBpc0hpZ2hsaWdodGVkKG51bWJlcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZWROdW1iZXJzLmluY2x1ZGVzKG51bWJlcik7XG4gIH1cblxuICBpc1NlbGVjdGFibGUodGlja2V0OiBUaWNrZXREYXRhKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMucHJvcHMuc2VsZWN0aW9uTW9kZSA9PT0gJ25vbmUnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayBpZiBzb2xkL3Jlc2VydmVkIGFuZCBhZG1pbiBvdmVycmlkZVxuICAgIGlmICh0aWNrZXQuc3RhdHVzID09PSAnc29sZCcgfHwgdGlja2V0LnN0YXR1cyA9PT0gJ3Jlc2VydmVkJykge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuYWxsb3dTZWxlY3RTb2xkID09PSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aWNrZXQuc3RhdHVzID09PSAnZGlzYWJsZWQnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayBtYXggc2VsZWN0aW9uXG4gICAgaWYgKFxuICAgICAgdGlja2V0LnN0YXR1cyAhPT0gJ3NlbGVjdGVkJyAmJlxuICAgICAgdGhpcy5wcm9wcy5tYXhTZWxlY3Rpb24gJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXRzLmxlbmd0aCA+PSB0aGlzLnByb3BzLm1heFNlbGVjdGlvblxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb25UaWNrZXRDbGljayh0aWNrZXQ6IFRpY2tldERhdGEpOiB2b2lkIHtcbiAgICBjb25zdCBpc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZFRpY2tldHMuaW5jbHVkZXModGlja2V0Lm51bWJlcik7XG5cbiAgICAvLyBFbWl0IGNsaWNrIGV2ZW50IHJlZ2FyZGxlc3NcbiAgICB0aGlzLnRpY2tldENsaWNrLmVtaXQoe1xuICAgICAgbnVtYmVyOiB0aWNrZXQubnVtYmVyLFxuICAgICAgc3RhdHVzOiB0aWNrZXQuc3RhdHVzLFxuICAgICAgc2VsZWN0ZWQ6IHRoaXMuaXNTZWxlY3RhYmxlKHRpY2tldCkgPyAhaXNTZWxlY3RlZCA6IG51bGwsXG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMuaXNTZWxlY3RhYmxlKHRpY2tldCkgJiYgdGlja2V0LnN0YXR1cyAhPT0gJ3NlbGVjdGVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBzZWxlY3Rpb25cbiAgICBpZiAoaXNTZWxlY3RlZCkge1xuICAgICAgLy8gRGVzZWxlY3RcbiAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXRzID0gdGhpcy5zZWxlY3RlZFRpY2tldHMuZmlsdGVyKG4gPT4gbiAhPT0gdGlja2V0Lm51bWJlcik7XG4gICAgICB0aWNrZXQuc3RhdHVzID0gJ2F2YWlsYWJsZSc7XG5cbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICBzZWxlY3RlZFRpY2tldHM6IFsuLi50aGlzLnNlbGVjdGVkVGlja2V0c10sXG4gICAgICAgIGNoYW5nZWRUaWNrZXQ6IHRpY2tldC5udW1iZXIsXG4gICAgICAgIGFjdGlvbjogJ2Rlc2VsZWN0JyxcbiAgICAgICAgY291bnQ6IHRoaXMuc2VsZWN0ZWRUaWNrZXRzLmxlbmd0aCxcbiAgICAgICAgbWF4UmVhY2hlZDogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2VsZWN0XG4gICAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAvLyBEZXNlbGVjdCBwcmV2aW91c1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0cy5mb3JFYWNoKG51bSA9PiB7XG4gICAgICAgICAgY29uc3QgdCA9IHRoaXMudGlja2V0cy5maW5kKHggPT4geC5udW1iZXIgPT09IG51bSk7XG4gICAgICAgICAgaWYgKHQpIHQuc3RhdHVzID0gJ2F2YWlsYWJsZSc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGlja2V0cyA9IFt0aWNrZXQubnVtYmVyXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXRzLnB1c2godGlja2V0Lm51bWJlcik7XG4gICAgICB9XG5cbiAgICAgIHRpY2tldC5zdGF0dXMgPSAnc2VsZWN0ZWQnO1xuXG4gICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHtcbiAgICAgICAgc2VsZWN0ZWRUaWNrZXRzOiBbLi4udGhpcy5zZWxlY3RlZFRpY2tldHNdLFxuICAgICAgICBjaGFuZ2VkVGlja2V0OiB0aWNrZXQubnVtYmVyLFxuICAgICAgICBhY3Rpb246ICdzZWxlY3QnLFxuICAgICAgICBjb3VudDogdGhpcy5zZWxlY3RlZFRpY2tldHMubGVuZ3RoLFxuICAgICAgICBtYXhSZWFjaGVkOiB0aGlzLnByb3BzLm1heFNlbGVjdGlvblxuICAgICAgICAgID8gdGhpcy5zZWxlY3RlZFRpY2tldHMubGVuZ3RoID49IHRoaXMucHJvcHMubWF4U2VsZWN0aW9uXG4gICAgICAgICAgOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFJhbmRvbSgpOiB2b2lkIHtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMucHJvcHMucmFuZG9tU2VsZWN0Q291bnQgfHwgMTtcbiAgICBjb25zdCBhdmFpbGFibGUgPSB0aGlzLnRpY2tldHMuZmlsdGVyKFxuICAgICAgdCA9PiB0LnN0YXR1cyA9PT0gJ2F2YWlsYWJsZScgJiYgIXRoaXMuc2VsZWN0ZWRUaWNrZXRzLmluY2x1ZGVzKHQubnVtYmVyKVxuICAgICk7XG5cbiAgICAvLyBEZXRlcm1pbmUgaG93IG1hbnkgd2UgY2FuIHNlbGVjdFxuICAgIGNvbnN0IG1heENhblNlbGVjdCA9IHRoaXMucHJvcHMubWF4U2VsZWN0aW9uXG4gICAgICA/IE1hdGgubWluKGNvdW50LCB0aGlzLnByb3BzLm1heFNlbGVjdGlvbiAtIHRoaXMuc2VsZWN0ZWRUaWNrZXRzLmxlbmd0aClcbiAgICAgIDogY291bnQ7XG5cbiAgICBpZiAoYXZhaWxhYmxlLmxlbmd0aCA9PT0gMCB8fCBtYXhDYW5TZWxlY3QgPD0gMCkgcmV0dXJuO1xuXG4gICAgLy8gUmFuZG9tIHNodWZmbGUgYW5kIHBpY2tcbiAgICBjb25zdCBzaHVmZmxlZCA9IFsuLi5hdmFpbGFibGVdLnNvcnQoKCkgPT4gTWF0aC5yYW5kb20oKSAtIDAuNSk7XG4gICAgY29uc3QgdG9TZWxlY3QgPSBzaHVmZmxlZC5zbGljZSgwLCBNYXRoLm1pbihtYXhDYW5TZWxlY3QsIGF2YWlsYWJsZS5sZW5ndGgpKTtcblxuICAgIHRvU2VsZWN0LmZvckVhY2godGlja2V0ID0+IHtcbiAgICAgIHRpY2tldC5zdGF0dXMgPSAnc2VsZWN0ZWQnO1xuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldHMucHVzaCh0aWNrZXQubnVtYmVyKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgc2VsZWN0ZWRUaWNrZXRzOiBbLi4udGhpcy5zZWxlY3RlZFRpY2tldHNdLFxuICAgICAgY2hhbmdlZFRpY2tldDogdG9TZWxlY3RbdG9TZWxlY3QubGVuZ3RoIC0gMV0ubnVtYmVyLFxuICAgICAgYWN0aW9uOiAnc2VsZWN0JyxcbiAgICAgIGNvdW50OiB0aGlzLnNlbGVjdGVkVGlja2V0cy5sZW5ndGgsXG4gICAgICBtYXhSZWFjaGVkOiB0aGlzLnByb3BzLm1heFNlbGVjdGlvblxuICAgICAgICA/IHRoaXMuc2VsZWN0ZWRUaWNrZXRzLmxlbmd0aCA+PSB0aGlzLnByb3BzLm1heFNlbGVjdGlvblxuICAgICAgICA6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBzZWxlY3Rpb25zLlxuICAgKi9cbiAgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFRpY2tldHMuZm9yRWFjaChudW0gPT4ge1xuICAgICAgY29uc3QgdGlja2V0ID0gdGhpcy50aWNrZXRzLmZpbmQodCA9PiB0Lm51bWJlciA9PT0gbnVtKTtcbiAgICAgIGlmICh0aWNrZXQpIHRpY2tldC5zdGF0dXMgPSAnYXZhaWxhYmxlJztcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkVGlja2V0cyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzZWxlY3RlZCB0aWNrZXQgbnVtYmVycy5cbiAgICovXG4gIGdldFNlbGVjdGVkVGlja2V0cygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnNlbGVjdGVkVGlja2V0c107XG4gIH1cblxuICBnZXQgYXZhaWxhYmxlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy50aWNrZXRzLmZpbHRlcih0ID0+IHQuc3RhdHVzID09PSAnYXZhaWxhYmxlJykubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHNvbGRDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRpY2tldHMuZmlsdGVyKHQgPT4gdC5zdGF0dXMgPT09ICdzb2xkJykubGVuZ3RoO1xuICB9XG5cbiAgZ2V0TGVnZW5kSXRlbXMoKTogVGlja2V0R3JpZExlZ2VuZEl0ZW1bXSB7XG4gICAgaWYgKHRoaXMucHJvcHMubGVnZW5kSXRlbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmxlZ2VuZEl0ZW1zO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1zOiBUaWNrZXRHcmlkTGVnZW5kSXRlbVtdID0gW1xuICAgICAgeyBzdGF0dXM6ICdhdmFpbGFibGUnLCBsYWJlbDogREVGQVVMVF9MRUdFTkRfTEFCRUxTLmF2YWlsYWJsZSwgY291bnQ6IHRoaXMuYXZhaWxhYmxlQ291bnQgfSxcbiAgICAgIHsgc3RhdHVzOiAnc2VsZWN0ZWQnLCBsYWJlbDogREVGQVVMVF9MRUdFTkRfTEFCRUxTLnNlbGVjdGVkLCBjb3VudDogdGhpcy5zZWxlY3RlZFRpY2tldHMubGVuZ3RoIH0sXG4gICAgXTtcblxuICAgIGlmICh0aGlzLnByb3BzLnNvbGRUaWNrZXRzPy5sZW5ndGgpIHtcbiAgICAgIGl0ZW1zLnB1c2goeyBzdGF0dXM6ICdzb2xkJywgbGFiZWw6IERFRkFVTFRfTEVHRU5EX0xBQkVMUy5zb2xkLCBjb3VudDogdGhpcy5zb2xkQ291bnQgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMucmVzZXJ2ZWRUaWNrZXRzPy5sZW5ndGgpIHtcbiAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICBzdGF0dXM6ICdyZXNlcnZlZCcsXG4gICAgICAgIGxhYmVsOiBERUZBVUxUX0xFR0VORF9MQUJFTFMucmVzZXJ2ZWQsXG4gICAgICAgIGNvdW50OiB0aGlzLnByb3BzLnJlc2VydmVkVGlja2V0cy5sZW5ndGgsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBmb3JtYXROdW1iZXIobnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BzLm51bWJlclBhZGRpbmcpIHtcbiAgICAgIHJldHVybiBTdHJpbmcobnVtKS5wYWRTdGFydCh0aGlzLnByb3BzLm51bWJlclBhZGRpbmcsICcwJyk7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcobnVtKTtcbiAgfVxuXG4gIGdldFRpY2tldEFyaWFMYWJlbCh0aWNrZXQ6IFRpY2tldERhdGEpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0YXR1c0xhYmVsID0gREVGQVVMVF9MRUdFTkRfTEFCRUxTW3RpY2tldC5zdGF0dXNdO1xuICAgIHJldHVybiBgQm9sZXRvICR7dGhpcy5mb3JtYXROdW1iZXIodGlja2V0Lm51bWJlcil9LCAke3N0YXR1c0xhYmVsfWA7XG4gIH1cblxuICBnZXRTZWFyY2hQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BzLnNlYXJjaFBsYWNlaG9sZGVyQ29udGVudEtleSAmJiB0aGlzLnByb3BzLmNvbnRlbnRDbGFzcykge1xuICAgICAgcmV0dXJuIHRoaXMubGFuZ1NlcnZpY2UuZ2V0VGV4dChcbiAgICAgICAgdGhpcy5wcm9wcy5jb250ZW50Q2xhc3MsXG4gICAgICAgIHRoaXMucHJvcHMuc2VhcmNoUGxhY2Vob2xkZXJDb250ZW50S2V5LFxuICAgICAgICB0aGlzLnByb3BzLnNlYXJjaFBsYWNlaG9sZGVyIHx8ICdCdXNjYXIgbsO6bWVyby4uLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByb3BzLnNlYXJjaFBsYWNlaG9sZGVyIHx8ICdCdXNjYXIgbsO6bWVyby4uLic7XG4gIH1cblxuICBnZXRSYW5kb21TZWxlY3RMYWJlbCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BzLnJhbmRvbVNlbGVjdExhYmVsQ29udGVudEtleSAmJiB0aGlzLnByb3BzLmNvbnRlbnRDbGFzcykge1xuICAgICAgcmV0dXJuIHRoaXMubGFuZ1NlcnZpY2UuZ2V0VGV4dChcbiAgICAgICAgdGhpcy5wcm9wcy5jb250ZW50Q2xhc3MsXG4gICAgICAgIHRoaXMucHJvcHMucmFuZG9tU2VsZWN0TGFiZWxDb250ZW50S2V5LFxuICAgICAgICB0aGlzLnByb3BzLnJhbmRvbVNlbGVjdExhYmVsIHx8ICdBbGVhdG9yaW8nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wcm9wcy5yYW5kb21TZWxlY3RMYWJlbCB8fCAnQWxlYXRvcmlvJztcbiAgfVxuXG4gIGdldENvbG9yKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucHJvcHMuY29sb3IpIHtcbiAgICAgIHJldHVybiBgdmFyKC0taW9uLWNvbG9yLSR7dGhpcy5wcm9wcy5jb2xvcn0pYDtcbiAgICB9XG4gICAgcmV0dXJuICd2YXIoLS1pb24tY29sb3ItcHJpbWFyeSknO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Default legend labels in Spanish.
3
+ */
4
+ export const DEFAULT_LEGEND_LABELS = {
5
+ available: 'Disponible',
6
+ sold: 'Vendido',
7
+ reserved: 'Reservado',
8
+ selected: 'Seleccionado',
9
+ disabled: 'No disponible',
10
+ };
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3RpY2tldC1ncmlkL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVJQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFpQztJQUNqRSxTQUFTLEVBQUUsWUFBWTtJQUN2QixJQUFJLEVBQUUsU0FBUztJQUNmLFFBQVEsRUFBRSxXQUFXO0lBQ3JCLFFBQVEsRUFBRSxjQUFjO0lBQ3hCLFFBQVEsRUFBRSxlQUFlO0NBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvciB9IGZyb20gJ0Bpb25pYy9jb3JlJztcblxuLyoqXG4gKiBUaWNrZXQgc3RhdHVzIGluIHRoZSBncmlkLlxuICovXG5leHBvcnQgdHlwZSBUaWNrZXRTdGF0dXMgPSAnYXZhaWxhYmxlJyB8ICdzb2xkJyB8ICdyZXNlcnZlZCcgfCAnc2VsZWN0ZWQnIHwgJ2Rpc2FibGVkJztcblxuLyoqXG4gKiBJbmRpdmlkdWFsIHRpY2tldCBkYXRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpY2tldERhdGEge1xuICAvKiogVGlja2V0IG51bWJlciAqL1xuICBudW1iZXI6IG51bWJlcjtcbiAgLyoqIFRpY2tldCBzdGF0dXMgKi9cbiAgc3RhdHVzOiBUaWNrZXRTdGF0dXM7XG4gIC8qKiBPcHRpb25hbCBvd25lciBuYW1lIChmb3Igc29sZCB0aWNrZXRzKSAqL1xuICBvd25lcj86IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIGN1c3RvbSBsYWJlbCAqL1xuICBsYWJlbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBMZWdlbmQgaXRlbSBmb3IgdGlja2V0IGdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGlja2V0R3JpZExlZ2VuZEl0ZW0ge1xuICAvKiogU3RhdHVzIHRoaXMgbGVnZW5kIHJlcHJlc2VudHMgKi9cbiAgc3RhdHVzOiBUaWNrZXRTdGF0dXM7XG4gIC8qKiBEaXNwbGF5IGxhYmVsICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBjb3VudCAqL1xuICBjb3VudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNZXRhZGF0YSBmb3IgdGhlIHRpY2tldCBncmlkIGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaWNrZXRHcmlkTWV0YWRhdGEge1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHRpY2tldHMgKi9cbiAgdG90YWxUaWNrZXRzOiBudW1iZXI7XG4gIC8qKiBTdGFydGluZyB0aWNrZXQgbnVtYmVyIChkZWZhdWx0OiAxKSAqL1xuICBzdGFydE51bWJlcj86IG51bWJlcjtcbiAgLyoqIE51bWJlcnMgb2Ygc29sZCB0aWNrZXRzICovXG4gIHNvbGRUaWNrZXRzPzogbnVtYmVyW107XG4gIC8qKiBOdW1iZXJzIG9mIHJlc2VydmVkIHRpY2tldHMgKi9cbiAgcmVzZXJ2ZWRUaWNrZXRzPzogbnVtYmVyW107XG4gIC8qKiBOdW1iZXJzIG9mIGRpc2FibGVkIHRpY2tldHMgKi9cbiAgZGlzYWJsZWRUaWNrZXRzPzogbnVtYmVyW107XG4gIC8qKiBDdXJyZW50bHkgc2VsZWN0ZWQgdGlja2V0cyAqL1xuICBzZWxlY3RlZFRpY2tldHM/OiBudW1iZXJbXTtcbiAgLyoqIEN1c3RvbSB0aWNrZXQgZGF0YSAob3ZlcnJpZGVzIGNvbXB1dGVkIHN0YXR1cykgKi9cbiAgdGlja2V0RGF0YT86IFRpY2tldERhdGFbXTtcblxuICAvLyA9PT0gU2VsZWN0aW9uID09PVxuICAvKiogU2VsZWN0aW9uIG1vZGUgKi9cbiAgc2VsZWN0aW9uTW9kZT86ICdzaW5nbGUnIHwgJ211bHRpcGxlJyB8ICdub25lJztcbiAgLyoqIE1heGltdW0gdGlja2V0cyB0aGF0IGNhbiBiZSBzZWxlY3RlZCAqL1xuICBtYXhTZWxlY3Rpb24/OiBudW1iZXI7XG4gIC8qKiBNaW5pbXVtIHRpY2tldHMgcmVxdWlyZWQgKi9cbiAgbWluU2VsZWN0aW9uPzogbnVtYmVyO1xuICAvKiogQWxsb3cgc2VsZWN0aW5nIHNvbGQvcmVzZXJ2ZWQgdGlja2V0cyAoZm9yIGFkbWluKSAqL1xuICBhbGxvd1NlbGVjdFNvbGQ/OiBib29sZWFuO1xuXG4gIC8vID09PSBEaXNwbGF5ID09PVxuICAvKiogTnVtYmVyIG9mIGNvbHVtbnMgKi9cbiAgY29sdW1ucz86IG51bWJlcjtcbiAgLyoqIFNob3cgbGVnZW5kICovXG4gIHNob3dMZWdlbmQ/OiBib29sZWFuO1xuICAvKiogTGVnZW5kIHBvc2l0aW9uICovXG4gIGxlZ2VuZFBvc2l0aW9uPzogJ3RvcCcgfCAnYm90dG9tJztcbiAgLyoqIEN1c3RvbSBsZWdlbmQgaXRlbXMgKi9cbiAgbGVnZW5kSXRlbXM/OiBUaWNrZXRHcmlkTGVnZW5kSXRlbVtdO1xuICAvKiogU2hvdyB0aWNrZXQgY291bnQgc3VtbWFyeSAqL1xuICBzaG93U3VtbWFyeT86IGJvb2xlYW47XG4gIC8qKiBTaG93IHNlYXJjaC9maWx0ZXIgaW5wdXQgKi9cbiAgc2hvd1NlYXJjaD86IGJvb2xlYW47XG4gIC8qKiBTZWFyY2ggcGxhY2Vob2xkZXIgKi9cbiAgc2VhcmNoUGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBUaWNrZXQgbnVtYmVyIHBhZGRpbmcgKGUuZy4sIDMgPSBcIjAwMVwiKSAqL1xuICBudW1iZXJQYWRkaW5nPzogbnVtYmVyO1xuXG4gIC8vID09PSBTdHlsaW5nID09PVxuICAvKiogQ29tcG9uZW50IGNvbG9yIGZvciBzZWxlY3RlZCBzdGF0ZSAqL1xuICBjb2xvcj86IENvbG9yO1xuICAvKiogVGlja2V0IHNpemUgKi9cbiAgdGlja2V0U2l6ZT86ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZSc7XG4gIC8qKiBHcmlkIGdhcCAqL1xuICBnYXA/OiBudW1iZXI7XG4gIC8qKiBDdXN0b20gQ1NTIGNsYXNzICovXG4gIGNzc0NsYXNzPzogc3RyaW5nO1xuXG4gIC8vID09PSBRdWljayBzZWxlY3QgPT09XG4gIC8qKiBTaG93IHJhbmRvbSBzZWxlY3Rpb24gYnV0dG9uICovXG4gIHNob3dSYW5kb21TZWxlY3Q/OiBib29sZWFuO1xuICAvKiogUmFuZG9tIHNlbGVjdGlvbiBjb3VudCAqL1xuICByYW5kb21TZWxlY3RDb3VudD86IG51bWJlcjtcbiAgLyoqIFJhbmRvbSBzZWxlY3QgYnV0dG9uIGxhYmVsICovXG4gIHJhbmRvbVNlbGVjdExhYmVsPzogc3RyaW5nO1xuXG4gIC8vID09PSBSZWFjdGl2ZSBjb250ZW50ID09PVxuICAvKiogQ29udGVudCBrZXkgZm9yIHNlYXJjaCBwbGFjZWhvbGRlciAqL1xuICBzZWFyY2hQbGFjZWhvbGRlckNvbnRlbnRLZXk/OiBzdHJpbmc7XG4gIC8qKiBDb250ZW50IGtleSBmb3IgcmFuZG9tIHNlbGVjdCBsYWJlbCAqL1xuICByYW5kb21TZWxlY3RMYWJlbENvbnRlbnRLZXk/OiBzdHJpbmc7XG4gIC8qKiBDb250ZW50IGNsYXNzIGZvciByZWFjdGl2ZSBjb250ZW50ICovXG4gIGNvbnRlbnRDbGFzcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBlbWl0dGVkIHdoZW4gc2VsZWN0aW9uIGNoYW5nZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGlja2V0R3JpZFNlbGVjdGlvbkV2ZW50IHtcbiAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCB0aWNrZXQgbnVtYmVycyAqL1xuICBzZWxlY3RlZFRpY2tldHM6IG51bWJlcltdO1xuICAvKiogTGFzdCBjaGFuZ2VkIHRpY2tldCBudW1iZXIgKi9cbiAgY2hhbmdlZFRpY2tldDogbnVtYmVyO1xuICAvKiogV2hldGhlciB0aGUgdGlja2V0IHdhcyBzZWxlY3RlZCBvciBkZXNlbGVjdGVkICovXG4gIGFjdGlvbjogJ3NlbGVjdCcgfCAnZGVzZWxlY3QnO1xuICAvKiogVG90YWwgY291bnQgb2Ygc2VsZWN0ZWQgdGlja2V0cyAqL1xuICBjb3VudDogbnVtYmVyO1xuICAvKiogV2hldGhlciBtYXggc2VsZWN0aW9uIHJlYWNoZWQgKi9cbiAgbWF4UmVhY2hlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBFdmVudCBlbWl0dGVkIHdoZW4gYSB0aWNrZXQgaXMgY2xpY2tlZCAocmVnYXJkbGVzcyBvZiBzZWxlY3Rpb24pLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpY2tldEdyaWRDbGlja0V2ZW50IHtcbiAgLyoqIFRpY2tldCBudW1iZXIgKi9cbiAgbnVtYmVyOiBudW1iZXI7XG4gIC8qKiBUaWNrZXQgc3RhdHVzICovXG4gIHN0YXR1czogVGlja2V0U3RhdHVzO1xuICAvKiogV2hldGhlciBpdCB3YXMgc2VsZWN0ZWQvZGVzZWxlY3RlZCAobnVsbCBpZiBub3Qgc2VsZWN0YWJsZSkgKi9cbiAgc2VsZWN0ZWQ6IGJvb2xlYW4gfCBudWxsO1xufVxuXG4vKipcbiAqIERlZmF1bHQgbGVnZW5kIGxhYmVscyBpbiBTcGFuaXNoLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9MRUdFTkRfTEFCRUxTOiBSZWNvcmQ8VGlja2V0U3RhdHVzLCBzdHJpbmc+ID0ge1xuICBhdmFpbGFibGU6ICdEaXNwb25pYmxlJyxcbiAgc29sZDogJ1ZlbmRpZG8nLFxuICByZXNlcnZlZDogJ1Jlc2VydmFkbycsXG4gIHNlbGVjdGVkOiAnU2VsZWNjaW9uYWRvJyxcbiAgZGlzYWJsZWQ6ICdObyBkaXNwb25pYmxlJyxcbn07XG4iXX0=