@3ddv/software-division-components 1.5.0 → 2.0.0

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 (704) hide show
  1. package/.postcssrc.json +5 -0
  2. package/.storybook/main.ts +78 -0
  3. package/.storybook/manager-head.html +1 -0
  4. package/.storybook/preview.ts +30 -0
  5. package/.storybook/tsconfig.json +25 -0
  6. package/.storybook/typings.d.ts +4 -0
  7. package/CHANGELOG.md +8 -0
  8. package/LICENSE.md +21 -0
  9. package/backoffice/checkbox/checkbox.component.css +193 -0
  10. package/backoffice/checkbox/checkbox.component.html +23 -0
  11. package/backoffice/checkbox/checkbox.component.ts +252 -0
  12. package/backoffice/checkbox/index.ts +1 -0
  13. package/backoffice/checkbox/ng-package.json +1 -0
  14. package/backoffice/checkbox/public-api.ts +1 -0
  15. package/backoffice/checkbox/story/checkbox.stories.ts +304 -0
  16. package/backoffice/datepicker/datepicker.component.css +262 -0
  17. package/backoffice/datepicker/datepicker.component.html +40 -0
  18. package/backoffice/datepicker/datepicker.component.ts +366 -0
  19. package/backoffice/datepicker/index.ts +1 -0
  20. package/backoffice/datepicker/ng-package.json +1 -0
  21. package/backoffice/datepicker/{public-api.d.ts → public-api.ts} +1 -1
  22. package/backoffice/datepicker/story/datepicker.stories.ts +32 -0
  23. package/backoffice/datepicker/ui/ui-calendar-helm/src/index.ts +14 -0
  24. package/backoffice/datepicker/ui/ui-calendar-helm/src/lib/hlm-calendar-multi.ts +183 -0
  25. package/backoffice/datepicker/ui/ui-calendar-helm/src/lib/hlm-calendar.ts +171 -0
  26. package/backoffice/datepicker/ui/ui-date-picker-helm/src/index.ts +16 -0
  27. package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker-multi.token.ts +43 -0
  28. package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker-multi.ts +177 -0
  29. package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker.token.ts +43 -0
  30. package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker.ts +167 -0
  31. package/backoffice/datepicker/ui/ui-icon-helm/src/index.ts +11 -0
  32. package/backoffice/datepicker/ui/ui-icon-helm/src/lib/hlm-icon.token.ts +20 -0
  33. package/backoffice/datepicker/ui/ui-icon-helm/src/lib/hlm-icon.ts +35 -0
  34. package/backoffice/datepicker/ui/ui-popover-helm/src/index.ts +15 -0
  35. package/backoffice/datepicker/ui/ui-popover-helm/src/lib/hlm-popover-close.ts +19 -0
  36. package/backoffice/datepicker/ui/ui-popover-helm/src/lib/hlm-popover-content.ts +30 -0
  37. package/backoffice/index.ts +1 -0
  38. package/backoffice/input/index.ts +1 -0
  39. package/backoffice/input/input.component.css +319 -0
  40. package/backoffice/input/input.component.html +51 -0
  41. package/backoffice/input/input.component.ts +497 -0
  42. package/backoffice/input/ng-package.json +1 -0
  43. package/backoffice/input/public-api.ts +2 -0
  44. package/backoffice/input/story/input.stories.ts +243 -0
  45. package/backoffice/radio/index.ts +1 -0
  46. package/backoffice/radio/ng-package.json +1 -0
  47. package/backoffice/radio/public-api.ts +1 -0
  48. package/backoffice/radio/radio.component.css +143 -0
  49. package/backoffice/radio/radio.component.html +15 -0
  50. package/backoffice/radio/radio.component.ts +154 -0
  51. package/backoffice/radio/story/radio.stories.ts +287 -0
  52. package/backoffice/table/_components/pagination/pagination.component.css +117 -0
  53. package/backoffice/table/_components/pagination/pagination.component.html +55 -0
  54. package/backoffice/table/_components/pagination/pagination.component.ts +79 -0
  55. package/backoffice/table/_components/selection-table-head/selection-table-head.component.css +0 -0
  56. package/backoffice/table/_components/selection-table-head/selection-table-head.component.html +6 -0
  57. package/backoffice/table/_components/selection-table-head/selection-table-head.component.ts +36 -0
  58. package/backoffice/table/_components/selection-table-row/selection-table-row.component.css +0 -0
  59. package/backoffice/table/_components/selection-table-row/selection-table-row.component.html +5 -0
  60. package/backoffice/table/_components/selection-table-row/selection-table-row.component.ts +12 -0
  61. package/backoffice/table/_components/sort-header-button/sort-header-button.component.css +14 -0
  62. package/backoffice/table/_components/sort-header-button/sort-header-button.component.html +11 -0
  63. package/backoffice/table/_components/sort-header-button/sort-header-button.component.ts +55 -0
  64. package/backoffice/table/index.ts +1 -0
  65. package/backoffice/table/ng-package.json +1 -0
  66. package/backoffice/table/public-api.ts +6 -0
  67. package/backoffice/table/story/table.stories.ts +364 -0
  68. package/backoffice/table/table.component.css +172 -0
  69. package/backoffice/table/table.component.html +53 -0
  70. package/backoffice/table/table.component.ts +347 -0
  71. package/backoffice/table/ui/ui-icon-helm/src/index.ts +11 -0
  72. package/backoffice/table/ui/ui-icon-helm/src/lib/hlm-icon.token.ts +20 -0
  73. package/backoffice/table/ui/ui-icon-helm/src/lib/hlm-icon.ts +35 -0
  74. package/backoffice/table/ui/ui-table-helm/src/index.ts +13 -0
  75. package/backoffice/table/ui/ui-table-helm/src/lib/hlm-table.ts +220 -0
  76. package/components.json +3 -0
  77. package/{README.md → dist/README.md} +11 -7
  78. package/dist/fesm2022/3ddv-software-division-components-backoffice-checkbox.mjs +208 -0
  79. package/dist/fesm2022/3ddv-software-division-components-backoffice-checkbox.mjs.map +1 -0
  80. package/dist/fesm2022/3ddv-software-division-components-backoffice-datepicker.mjs +1061 -0
  81. package/dist/fesm2022/3ddv-software-division-components-backoffice-datepicker.mjs.map +1 -0
  82. package/dist/fesm2022/3ddv-software-division-components-backoffice-input.mjs +411 -0
  83. package/dist/fesm2022/3ddv-software-division-components-backoffice-input.mjs.map +1 -0
  84. package/dist/fesm2022/3ddv-software-division-components-backoffice-radio.mjs +128 -0
  85. package/dist/fesm2022/3ddv-software-division-components-backoffice-radio.mjs.map +1 -0
  86. package/dist/fesm2022/3ddv-software-division-components-backoffice-table.mjs +658 -0
  87. package/dist/fesm2022/3ddv-software-division-components-backoffice-table.mjs.map +1 -0
  88. package/dist/fesm2022/3ddv-software-division-components-dvm-cart-item.mjs +34 -0
  89. package/dist/fesm2022/3ddv-software-division-components-dvm-cart-item.mjs.map +1 -0
  90. package/dist/fesm2022/3ddv-software-division-components-dvm-cart.mjs +101 -0
  91. package/dist/fesm2022/3ddv-software-division-components-dvm-cart.mjs.map +1 -0
  92. package/dist/fesm2022/3ddv-software-division-components-dvm-legend.mjs +77 -0
  93. package/dist/fesm2022/3ddv-software-division-components-dvm-legend.mjs.map +1 -0
  94. package/dist/fesm2022/3ddv-software-division-components-dvm-loader.mjs +34 -0
  95. package/dist/fesm2022/3ddv-software-division-components-dvm-loader.mjs.map +1 -0
  96. package/dist/fesm2022/3ddv-software-division-components-dvm-map-loader.mjs +161 -0
  97. package/dist/fesm2022/3ddv-software-division-components-dvm-map-loader.mjs.map +1 -0
  98. package/dist/fesm2022/3ddv-software-division-components-dvm-neighbors.mjs +204 -0
  99. package/dist/fesm2022/3ddv-software-division-components-dvm-neighbors.mjs.map +1 -0
  100. package/dist/fesm2022/3ddv-software-division-components-dvm-popover.mjs +1080 -0
  101. package/dist/fesm2022/3ddv-software-division-components-dvm-popover.mjs.map +1 -0
  102. package/dist/fesm2022/3ddv-software-division-components-dvm-stepper.mjs +94 -0
  103. package/dist/fesm2022/3ddv-software-division-components-dvm-stepper.mjs.map +1 -0
  104. package/dist/fesm2022/3ddv-software-division-components-dvm-ticket-info-item.mjs +34 -0
  105. package/dist/fesm2022/3ddv-software-division-components-dvm-ticket-info-item.mjs.map +1 -0
  106. package/dist/fesm2022/3ddv-software-division-components-generic-add-digital-wallet.mjs +46 -0
  107. package/dist/fesm2022/3ddv-software-division-components-generic-add-digital-wallet.mjs.map +1 -0
  108. package/dist/fesm2022/3ddv-software-division-components-generic-braintree.mjs +127 -0
  109. package/dist/fesm2022/3ddv-software-division-components-generic-braintree.mjs.map +1 -0
  110. package/dist/fesm2022/3ddv-software-division-components-generic-button.mjs +373 -0
  111. package/dist/fesm2022/3ddv-software-division-components-generic-button.mjs.map +1 -0
  112. package/dist/fesm2022/3ddv-software-division-components-generic-dialog.mjs +309 -0
  113. package/dist/fesm2022/3ddv-software-division-components-generic-dialog.mjs.map +1 -0
  114. package/dist/fesm2022/3ddv-software-division-components-generic-drawer.mjs +34 -0
  115. package/dist/fesm2022/3ddv-software-division-components-generic-drawer.mjs.map +1 -0
  116. package/dist/fesm2022/3ddv-software-division-components-generic-icon.mjs +130 -0
  117. package/dist/fesm2022/3ddv-software-division-components-generic-icon.mjs.map +1 -0
  118. package/dist/fesm2022/3ddv-software-division-components-generic-select.mjs +295 -0
  119. package/dist/fesm2022/3ddv-software-division-components-generic-select.mjs.map +1 -0
  120. package/dist/fesm2022/3ddv-software-division-components-shared.mjs +171 -0
  121. package/dist/fesm2022/3ddv-software-division-components-shared.mjs.map +1 -0
  122. package/dist/fesm2022/3ddv-software-division-components-utils.mjs +39 -0
  123. package/dist/fesm2022/3ddv-software-division-components-utils.mjs.map +1 -0
  124. package/dist/fesm2022/3ddv-software-division-components.mjs +18 -0
  125. package/dist/fesm2022/3ddv-software-division-components.mjs.map +1 -0
  126. package/dist/styles.css +2 -0
  127. package/dist/types/3ddv-software-division-components-backoffice-checkbox.d.ts +106 -0
  128. package/dist/types/3ddv-software-division-components-backoffice-datepicker.d.ts +153 -0
  129. package/dist/types/3ddv-software-division-components-backoffice-input.d.ts +203 -0
  130. package/dist/types/3ddv-software-division-components-backoffice-radio.d.ts +76 -0
  131. package/dist/types/3ddv-software-division-components-backoffice-table.d.ts +130 -0
  132. package/dist/types/3ddv-software-division-components-dvm-cart-item.d.ts +14 -0
  133. package/dist/types/3ddv-software-division-components-dvm-cart.d.ts +76 -0
  134. package/dist/types/3ddv-software-division-components-dvm-legend.d.ts +38 -0
  135. package/dist/types/3ddv-software-division-components-dvm-loader.d.ts +14 -0
  136. package/{dvm/map-loader/map-loader.component.d.ts → dist/types/3ddv-software-division-components-dvm-map-loader.d.ts} +16 -14
  137. package/dist/types/3ddv-software-division-components-dvm-neighbors.d.ts +57 -0
  138. package/dist/types/3ddv-software-division-components-dvm-popover.d.ts +456 -0
  139. package/dist/types/3ddv-software-division-components-dvm-stepper.d.ts +34 -0
  140. package/dist/types/3ddv-software-division-components-dvm-ticket-info-item.d.ts +14 -0
  141. package/dist/types/3ddv-software-division-components-generic-add-digital-wallet.d.ts +23 -0
  142. package/dist/types/3ddv-software-division-components-generic-braintree.d.ts +62 -0
  143. package/dist/types/3ddv-software-division-components-generic-button.d.ts +186 -0
  144. package/dist/types/3ddv-software-division-components-generic-dialog.d.ts +104 -0
  145. package/dist/types/3ddv-software-division-components-generic-drawer.d.ts +14 -0
  146. package/dist/types/3ddv-software-division-components-generic-icon.d.ts +38 -0
  147. package/dist/types/3ddv-software-division-components-generic-select.d.ts +110 -0
  148. package/dist/types/3ddv-software-division-components-shared.d.ts +69 -0
  149. package/dist/types/3ddv-software-division-components-utils.d.ts +3 -0
  150. package/dist/types/3ddv-software-division-components.d.ts +2 -0
  151. package/documentation.json +30473 -0
  152. package/dvm/cart/cart.component.css +103 -0
  153. package/dvm/cart/cart.component.html +31 -0
  154. package/dvm/cart/cart.component.ts +49 -0
  155. package/dvm/cart/cart.stories.ts +370 -0
  156. package/dvm/cart/cart.types.ts +8 -0
  157. package/dvm/cart/index.ts +2 -0
  158. package/dvm/cart/ng-package.json +1 -0
  159. package/dvm/cart/{public-api.d.ts → public-api.ts} +5 -1
  160. package/dvm/cart/seat-list.component.css +281 -0
  161. package/dvm/cart/seat-list.component.html +85 -0
  162. package/dvm/cart/seat-list.component.ts +76 -0
  163. package/dvm/cart/seat-list.stories.ts +337 -0
  164. package/dvm/cart-item/cart-item.component.html +1 -0
  165. package/dvm/cart-item/cart-item.component.ts +8 -0
  166. package/dvm/cart-item/cart-item.service.ts +8 -0
  167. package/dvm/cart-item/cart.stories.ts +31 -0
  168. package/dvm/cart-item/index.ts +1 -0
  169. package/dvm/cart-item/ng-package.json +1 -0
  170. package/dvm/cart-item/{public-api.d.ts → public-api.ts} +4 -1
  171. package/dvm/index.ts +1 -0
  172. package/dvm/legend/index.ts +1 -0
  173. package/dvm/legend/legend.component.css +49 -0
  174. package/dvm/legend/legend.component.html +8 -0
  175. package/dvm/legend/legend.component.ts +41 -0
  176. package/dvm/legend/legend.stories.ts +16 -0
  177. package/dvm/legend/ng-package.json +1 -0
  178. package/dvm/legend/{public-api.d.ts → public-api.ts} +4 -1
  179. package/dvm/legend/{types.d.ts → types.ts} +3 -3
  180. package/dvm/legend/ui/legend-elements/{index.d.ts → index.ts} +0 -1
  181. package/dvm/legend/ui/legend-elements/legend-elements.component.css +49 -0
  182. package/dvm/legend/ui/legend-elements/legend-elements.component.html +8 -0
  183. package/dvm/legend/ui/legend-elements/legend-elements.component.ts +41 -0
  184. package/dvm/loader/index.ts +1 -0
  185. package/dvm/loader/loader.component.html +1 -0
  186. package/dvm/loader/loader.component.ts +8 -0
  187. package/dvm/loader/loader.service.ts +8 -0
  188. package/dvm/loader/loader.stories.ts +31 -0
  189. package/dvm/loader/ng-package.json +1 -0
  190. package/dvm/loader/{public-api.d.ts → public-api.ts} +4 -1
  191. package/dvm/map-loader/index.ts +1 -0
  192. package/dvm/map-loader/map-loader.component.css +91 -0
  193. package/dvm/map-loader/map-loader.component.html +23 -0
  194. package/dvm/map-loader/map-loader.component.ts +187 -0
  195. package/dvm/map-loader/map-loader.stories.ts +16 -0
  196. package/dvm/map-loader/ng-package.json +1 -0
  197. package/dvm/map-loader/public-api.ts +5 -0
  198. package/dvm/neighbors/index.ts +1 -0
  199. package/dvm/neighbors/neighbors.component.css +158 -0
  200. package/dvm/neighbors/neighbors.component.html +45 -0
  201. package/dvm/neighbors/neighbors.component.ts +218 -0
  202. package/dvm/neighbors/ng-package.json +1 -0
  203. package/dvm/neighbors/public-api.ts +2 -0
  204. package/dvm/neighbors/story/arrow-left-black-icon.svg +3 -0
  205. package/dvm/neighbors/story/mock-data.ts +15 -0
  206. package/dvm/neighbors/story/neighbours.stories.css +12 -0
  207. package/dvm/neighbors/story/neighbours.stories.ts +117 -0
  208. package/dvm/neighbors/{types.d.ts → types.ts} +7 -7
  209. package/dvm/popover/base-popover.component.ts +70 -0
  210. package/dvm/popover/index.ts +1 -0
  211. package/dvm/popover/ng-package.json +1 -0
  212. package/dvm/popover/popover.component.css +227 -0
  213. package/dvm/popover/popover.component.html +27 -0
  214. package/dvm/popover/popover.component.ts +236 -0
  215. package/dvm/popover/popover.config.ts +30 -0
  216. package/dvm/popover/popover.service.ts +627 -0
  217. package/dvm/popover/popover.stories.ts +873 -0
  218. package/dvm/popover/{public-api.d.ts → public-api.ts} +4 -1
  219. package/dvm/popover/seat-popover/seat-popover.component.css +89 -0
  220. package/dvm/popover/seat-popover/seat-popover.component.html +40 -0
  221. package/dvm/popover/seat-popover/seat-popover.component.ts +74 -0
  222. package/dvm/popover/section-popover/section-popover.component.css +157 -0
  223. package/dvm/popover/section-popover/section-popover.component.html +58 -0
  224. package/dvm/popover/section-popover/section-popover.component.ts +106 -0
  225. package/dvm/popover/services/dvm-popover-positioner.service.ts +73 -0
  226. package/dvm/popover/services/popover-manager.service.ts +88 -0
  227. package/dvm/popover/transformers/base-popover-data-transformer.ts +36 -0
  228. package/dvm/popover/types.ts +104 -0
  229. package/dvm/stepper/index.ts +1 -0
  230. package/dvm/stepper/ng-package.json +1 -0
  231. package/dvm/stepper/public-api.ts +5 -0
  232. package/dvm/stepper/stepper.component.css +142 -0
  233. package/dvm/stepper/stepper.component.html +9 -0
  234. package/dvm/stepper/stepper.component.ts +101 -0
  235. package/dvm/stepper/{types.d.ts → types.ts} +3 -6
  236. package/dvm/ticket-info-item/index.ts +1 -0
  237. package/dvm/ticket-info-item/ng-package.json +1 -0
  238. package/dvm/ticket-info-item/{public-api.d.ts → public-api.ts} +4 -1
  239. package/dvm/ticket-info-item/ticket-info-item.component.html +1 -0
  240. package/dvm/ticket-info-item/ticket-info-item.component.ts +8 -0
  241. package/dvm/ticket-info-item/ticket-info-item.service.ts +8 -0
  242. package/dvm/ticket-info-item/ticket-info-item.stories.ts +31 -0
  243. package/generic/add-digital-wallet/add-digital-wallet.component.css +76 -0
  244. package/generic/add-digital-wallet/add-digital-wallet.component.html +46 -0
  245. package/generic/add-digital-wallet/add-digital-wallet.component.ts +44 -0
  246. package/generic/add-digital-wallet/index.ts +1 -0
  247. package/generic/add-digital-wallet/ng-package.json +1 -0
  248. package/generic/add-digital-wallet/{public-api.d.ts → public-api.ts} +0 -1
  249. package/generic/braintree/braintree.component.css +7 -0
  250. package/generic/braintree/braintree.component.ts +134 -0
  251. package/generic/braintree/index.ts +1 -0
  252. package/generic/braintree/ng-package.json +1 -0
  253. package/generic/braintree/{public-api.d.ts → public-api.ts} +4 -1
  254. package/generic/braintree/story/braintree.stories.css +3 -0
  255. package/generic/braintree/story/braintree.stories.ts +27 -0
  256. package/generic/braintree/types.ts +28 -0
  257. package/generic/button/button.component.css +305 -0
  258. package/generic/button/button.component.html +10 -0
  259. package/generic/button/button.component.ts +353 -0
  260. package/generic/button/index.ts +1 -0
  261. package/generic/button/ng-package.json +1 -0
  262. package/generic/button/public-api.ts +6 -0
  263. package/generic/button/story/button.stories.ts +384 -0
  264. package/generic/button/ui/ui-button-helm/src/index.ts +10 -0
  265. package/generic/button/ui/ui-button-helm/src/lib/hlm-button.token.ts +22 -0
  266. package/generic/button/ui/ui-button-helm/src/lib/hlm-button.ts +62 -0
  267. package/generic/carousel/carousel-item.component.ts +15 -0
  268. package/generic/carousel/carousel-item.directive.ts +14 -0
  269. package/generic/carousel/carousel.component.css +90 -0
  270. package/generic/carousel/carousel.component.html +13 -0
  271. package/generic/carousel/carousel.component.ts +44 -0
  272. package/generic/carousel/index.ts +1 -0
  273. package/generic/carousel/{public-api.d.ts → public-api.ts} +0 -1
  274. package/generic/carousel/ui/ui-carousel-helm/src/index.ts +29 -0
  275. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-content.ts +23 -0
  276. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-item.ts +25 -0
  277. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-next.ts +58 -0
  278. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-previous.ts +61 -0
  279. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-slide-display.ts +36 -0
  280. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel.ts +105 -0
  281. package/generic/dialog/dialog.component.css +5 -0
  282. package/generic/dialog/dialog.component.html +3 -0
  283. package/generic/dialog/dialog.component.ts +20 -0
  284. package/generic/dialog/dialog.stories.ts +14 -0
  285. package/generic/dialog/index.ts +1 -0
  286. package/generic/dialog/libs/ui-dialog-helm/src/{index.d.ts → index.ts} +20 -8
  287. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-close.ts +20 -0
  288. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-content.ts +56 -0
  289. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-description.ts +17 -0
  290. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-footer.ts +19 -0
  291. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-header.ts +19 -0
  292. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-overlay.ts +23 -0
  293. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-title.ts +19 -0
  294. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog.service.ts +59 -0
  295. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog.ts +31 -0
  296. package/generic/dialog/ng-package.json +1 -0
  297. package/generic/dialog/{public-api.d.ts → public-api.ts} +5 -1
  298. package/generic/dialog/tsconfig.json +7 -0
  299. package/generic/dialog/ui/dialog-close-button/dialog-close-button.component.css +0 -0
  300. package/generic/dialog/ui/dialog-close-button/dialog-close-button.component.html +1 -0
  301. package/generic/dialog/ui/dialog-close-button/dialog-close-button.component.ts +17 -0
  302. package/generic/dialog/ui/dialog-footer/dialog-footer.component.css +0 -0
  303. package/generic/dialog/ui/dialog-footer/dialog-footer.component.html +3 -0
  304. package/generic/dialog/ui/dialog-footer/dialog-footer.component.ts +11 -0
  305. package/generic/dialog/ui/dialog-header/dialog-header.component.css +0 -0
  306. package/generic/dialog/ui/dialog-header/dialog-header.component.html +8 -0
  307. package/generic/dialog/ui/dialog-header/dialog-header.component.ts +18 -0
  308. package/generic/drawer/drawer.component.html +1 -0
  309. package/generic/drawer/drawer.component.ts +8 -0
  310. package/generic/drawer/drawer.service.ts +8 -0
  311. package/generic/drawer/drawer.stories.ts +31 -0
  312. package/generic/drawer/index.ts +1 -0
  313. package/generic/drawer/ng-package.json +1 -0
  314. package/generic/drawer/{public-api.d.ts → public-api.ts} +4 -1
  315. package/generic/icon/icon.component.css +7 -0
  316. package/generic/icon/icon.component.html +3 -0
  317. package/generic/icon/icon.component.ts +86 -0
  318. package/generic/icon/icon.stories.ts +16 -0
  319. package/generic/icon/index.ts +1 -0
  320. package/generic/icon/lib/ui-icon-helm/src/index.ts +11 -0
  321. package/generic/icon/lib/ui-icon-helm/src/lib/hlm-icon.token.ts +20 -0
  322. package/generic/icon/lib/ui-icon-helm/src/lib/hlm-icon.ts +36 -0
  323. package/generic/icon/ng-package.json +1 -0
  324. package/generic/icon/public-api.ts +6 -0
  325. package/generic/icon/tsconfig.json +7 -0
  326. package/generic/index.ts +1 -0
  327. package/generic/select/index.ts +1 -0
  328. package/generic/select/lib/hlm-select-content.ts +29 -0
  329. package/generic/select/lib/hlm-select-group.ts +17 -0
  330. package/generic/select/lib/hlm-select-label.ts +26 -0
  331. package/generic/select/lib/hlm-select-option.ts +37 -0
  332. package/generic/select/lib/hlm-select-scroll-down.ts +24 -0
  333. package/generic/select/lib/hlm-select-scroll-up.ts +23 -0
  334. package/generic/select/lib/hlm-select-trigger.ts +53 -0
  335. package/generic/select/lib/hlm-select-value.ts +17 -0
  336. package/generic/select/lib/hlm-select.ts +15 -0
  337. package/generic/select/lib/index.ts +38 -0
  338. package/generic/select/ng-package.json +1 -0
  339. package/generic/select/{public-api.d.ts → public-api.ts} +1 -1
  340. package/generic/select/select.component.css +65 -0
  341. package/generic/select/select.component.html +19 -0
  342. package/generic/select/select.component.ts +25 -0
  343. package/generic/select/types.ts +4 -0
  344. package/ng-package.json +10 -0
  345. package/package.json +114 -100
  346. package/public/3ddv-logo.jpg +0 -0
  347. package/public/neighbours-after.png +0 -0
  348. package/public/neighbours-before.png +0 -0
  349. package/shared/apply-theme-variables/apply-theme-variables.ts +35 -0
  350. package/shared/apply-theme-variables/{index.d.ts → index.ts} +0 -1
  351. package/shared/format-value.pipe.ts +23 -0
  352. package/shared/index.ts +1 -0
  353. package/shared/lib-provider/config-token.ts +4 -0
  354. package/shared/lib-provider/index.ts +1 -0
  355. package/shared/lib-provider/provide-sdc.ts +24 -0
  356. package/shared/lib-provider/{public-api.d.ts → public-api.ts} +0 -1
  357. package/shared/ng-package.json +1 -0
  358. package/shared/public-api.ts +6 -0
  359. package/shared/screen-observer/{index.d.ts → index.ts} +0 -1
  360. package/shared/screen-observer/provide-screen-observer.ts +17 -0
  361. package/shared/screen-observer/screen-observer.ts +56 -0
  362. package/shared/screen-observer/sizable-base.ts +70 -0
  363. package/shared/theme-provider/generic-theme.ts +1 -0
  364. package/shared/theme-provider/index.ts +1 -0
  365. package/shared/theme-provider/public-api.ts +1 -0
  366. package/shared/theme-provider/theme-provider.directive.ts +17 -0
  367. package/shared/themes/sdc.css +153 -0
  368. package/shared/types.ts +18 -0
  369. package/src/private-exports.ts +1 -0
  370. package/src/public-api.ts +20 -0
  371. package/styles.css +46 -2
  372. package/tsconfig.json +50 -0
  373. package/tsconfig.lib.prod.json +6 -0
  374. package/tsconfig.spec.json +15 -0
  375. package/tsconfig.temp.json +1 -0
  376. package/utils/index.ts +1 -0
  377. package/utils/ng-package.json +1 -0
  378. package/utils/public-api.ts +1 -0
  379. package/utils/validate-styles-for-component.ts +39 -0
  380. package/3ddv-software-division-components.d.ts.map +0 -1
  381. package/backoffice/checkbox/checkbox.component.d.ts +0 -103
  382. package/backoffice/checkbox/checkbox.component.d.ts.map +0 -1
  383. package/backoffice/checkbox/index.d.ts +0 -2
  384. package/backoffice/checkbox/index.d.ts.map +0 -1
  385. package/backoffice/checkbox/public-api.d.ts +0 -2
  386. package/backoffice/checkbox/public-api.d.ts.map +0 -1
  387. package/backoffice/datepicker/datepicker.component.d.ts +0 -150
  388. package/backoffice/datepicker/datepicker.component.d.ts.map +0 -1
  389. package/backoffice/datepicker/index.d.ts +0 -2
  390. package/backoffice/datepicker/index.d.ts.map +0 -1
  391. package/backoffice/datepicker/public-api.d.ts.map +0 -1
  392. package/backoffice/datepicker/ui/ui-calendar-helm/src/index.d.ts +0 -14
  393. package/backoffice/datepicker/ui/ui-calendar-helm/src/index.d.ts.map +0 -1
  394. package/backoffice/datepicker/ui/ui-calendar-helm/src/lib/hlm-calendar-multi.d.ts +0 -38
  395. package/backoffice/datepicker/ui/ui-calendar-helm/src/lib/hlm-calendar-multi.d.ts.map +0 -1
  396. package/backoffice/datepicker/ui/ui-calendar-helm/src/lib/hlm-calendar.d.ts +0 -34
  397. package/backoffice/datepicker/ui/ui-calendar-helm/src/lib/hlm-calendar.d.ts.map +0 -1
  398. package/backoffice/datepicker/ui/ui-date-picker-helm/src/index.d.ts +0 -15
  399. package/backoffice/datepicker/ui/ui-date-picker-helm/src/index.d.ts.map +0 -1
  400. package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker-multi.d.ts +0 -53
  401. package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker-multi.d.ts.map +0 -1
  402. package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker-multi.token.d.ts +0 -24
  403. package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker-multi.token.d.ts.map +0 -1
  404. package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker.d.ts +0 -53
  405. package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker.d.ts.map +0 -1
  406. package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker.token.d.ts +0 -24
  407. package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker.token.d.ts.map +0 -1
  408. package/backoffice/datepicker/ui/ui-icon-helm/src/index.d.ts +0 -10
  409. package/backoffice/datepicker/ui/ui-icon-helm/src/index.d.ts.map +0 -1
  410. package/backoffice/datepicker/ui/ui-icon-helm/src/lib/hlm-icon.d.ts +0 -10
  411. package/backoffice/datepicker/ui/ui-icon-helm/src/lib/hlm-icon.d.ts.map +0 -1
  412. package/backoffice/datepicker/ui/ui-icon-helm/src/lib/hlm-icon.token.d.ts +0 -8
  413. package/backoffice/datepicker/ui/ui-icon-helm/src/lib/hlm-icon.token.d.ts.map +0 -1
  414. package/backoffice/datepicker/ui/ui-popover-helm/src/index.d.ts +0 -14
  415. package/backoffice/datepicker/ui/ui-popover-helm/src/index.d.ts.map +0 -1
  416. package/backoffice/datepicker/ui/ui-popover-helm/src/lib/hlm-popover-close.d.ts +0 -9
  417. package/backoffice/datepicker/ui/ui-popover-helm/src/lib/hlm-popover-close.d.ts.map +0 -1
  418. package/backoffice/datepicker/ui/ui-popover-helm/src/lib/hlm-popover-content.d.ts +0 -14
  419. package/backoffice/datepicker/ui/ui-popover-helm/src/lib/hlm-popover-content.d.ts.map +0 -1
  420. package/backoffice/index.d.ts +0 -2
  421. package/backoffice/index.d.ts.map +0 -1
  422. package/backoffice/input/index.d.ts +0 -2
  423. package/backoffice/input/index.d.ts.map +0 -1
  424. package/backoffice/input/input.component.d.ts +0 -200
  425. package/backoffice/input/input.component.d.ts.map +0 -1
  426. package/backoffice/input/public-api.d.ts +0 -2
  427. package/backoffice/input/public-api.d.ts.map +0 -1
  428. package/backoffice/public-api.d.ts +0 -6
  429. package/backoffice/public-api.d.ts.map +0 -1
  430. package/backoffice/radio/index.d.ts +0 -2
  431. package/backoffice/radio/index.d.ts.map +0 -1
  432. package/backoffice/radio/public-api.d.ts +0 -2
  433. package/backoffice/radio/public-api.d.ts.map +0 -1
  434. package/backoffice/radio/radio.component.d.ts +0 -73
  435. package/backoffice/radio/radio.component.d.ts.map +0 -1
  436. package/backoffice/table/_components/pagination/pagination.component.d.ts +0 -18
  437. package/backoffice/table/_components/pagination/pagination.component.d.ts.map +0 -1
  438. package/backoffice/table/_components/selection-table-head/selection-table-head.component.d.ts +0 -11
  439. package/backoffice/table/_components/selection-table-head/selection-table-head.component.d.ts.map +0 -1
  440. package/backoffice/table/_components/selection-table-row/selection-table-row.component.d.ts +0 -8
  441. package/backoffice/table/_components/selection-table-row/selection-table-row.component.d.ts.map +0 -1
  442. package/backoffice/table/_components/sort-header-button/sort-header-button.component.d.ts +0 -16
  443. package/backoffice/table/_components/sort-header-button/sort-header-button.component.d.ts.map +0 -1
  444. package/backoffice/table/index.d.ts +0 -2
  445. package/backoffice/table/index.d.ts.map +0 -1
  446. package/backoffice/table/public-api.d.ts +0 -3
  447. package/backoffice/table/public-api.d.ts.map +0 -1
  448. package/backoffice/table/table.component.d.ts +0 -111
  449. package/backoffice/table/table.component.d.ts.map +0 -1
  450. package/backoffice/table/ui/ui-icon-helm/src/index.d.ts +0 -10
  451. package/backoffice/table/ui/ui-icon-helm/src/index.d.ts.map +0 -1
  452. package/backoffice/table/ui/ui-icon-helm/src/lib/hlm-icon.d.ts +0 -10
  453. package/backoffice/table/ui/ui-icon-helm/src/lib/hlm-icon.d.ts.map +0 -1
  454. package/backoffice/table/ui/ui-icon-helm/src/lib/hlm-icon.token.d.ts +0 -8
  455. package/backoffice/table/ui/ui-icon-helm/src/lib/hlm-icon.token.d.ts.map +0 -1
  456. package/backoffice/table/ui/ui-table-helm/src/index.d.ts +0 -11
  457. package/backoffice/table/ui/ui-table-helm/src/index.d.ts.map +0 -1
  458. package/backoffice/table/ui/ui-table-helm/src/lib/hlm-table.d.ts +0 -112
  459. package/backoffice/table/ui/ui-table-helm/src/lib/hlm-table.d.ts.map +0 -1
  460. package/dvm/cart/cart.component.d.ts +0 -31
  461. package/dvm/cart/cart.component.d.ts.map +0 -1
  462. package/dvm/cart/cart.types.d.ts +0 -8
  463. package/dvm/cart/cart.types.d.ts.map +0 -1
  464. package/dvm/cart/index.d.ts +0 -2
  465. package/dvm/cart/index.d.ts.map +0 -1
  466. package/dvm/cart/public-api.d.ts.map +0 -1
  467. package/dvm/cart/seat-list.component.d.ts +0 -38
  468. package/dvm/cart/seat-list.component.d.ts.map +0 -1
  469. package/dvm/cart-item/cart-item.component.d.ts +0 -6
  470. package/dvm/cart-item/cart-item.component.d.ts.map +0 -1
  471. package/dvm/cart-item/cart-item.service.d.ts +0 -7
  472. package/dvm/cart-item/cart-item.service.d.ts.map +0 -1
  473. package/dvm/cart-item/index.d.ts +0 -2
  474. package/dvm/cart-item/index.d.ts.map +0 -1
  475. package/dvm/cart-item/public-api.d.ts.map +0 -1
  476. package/dvm/index.d.ts +0 -2
  477. package/dvm/index.d.ts.map +0 -1
  478. package/dvm/legend/index.d.ts +0 -2
  479. package/dvm/legend/index.d.ts.map +0 -1
  480. package/dvm/legend/legend.component.d.ts +0 -17
  481. package/dvm/legend/legend.component.d.ts.map +0 -1
  482. package/dvm/legend/public-api.d.ts.map +0 -1
  483. package/dvm/legend/types.d.ts.map +0 -1
  484. package/dvm/legend/ui/legend-elements/index.d.ts.map +0 -1
  485. package/dvm/legend/ui/legend-elements/legend-elements.component.d.ts +0 -16
  486. package/dvm/legend/ui/legend-elements/legend-elements.component.d.ts.map +0 -1
  487. package/dvm/loader/index.d.ts +0 -2
  488. package/dvm/loader/index.d.ts.map +0 -1
  489. package/dvm/loader/loader.component.d.ts +0 -6
  490. package/dvm/loader/loader.component.d.ts.map +0 -1
  491. package/dvm/loader/loader.service.d.ts +0 -7
  492. package/dvm/loader/loader.service.d.ts.map +0 -1
  493. package/dvm/loader/public-api.d.ts.map +0 -1
  494. package/dvm/map-loader/index.d.ts +0 -2
  495. package/dvm/map-loader/index.d.ts.map +0 -1
  496. package/dvm/map-loader/map-loader.component.d.ts.map +0 -1
  497. package/dvm/map-loader/public-api.d.ts +0 -2
  498. package/dvm/map-loader/public-api.d.ts.map +0 -1
  499. package/dvm/neighbors/index.d.ts +0 -2
  500. package/dvm/neighbors/index.d.ts.map +0 -1
  501. package/dvm/neighbors/neighbors.component.d.ts +0 -41
  502. package/dvm/neighbors/neighbors.component.d.ts.map +0 -1
  503. package/dvm/neighbors/public-api.d.ts +0 -3
  504. package/dvm/neighbors/public-api.d.ts.map +0 -1
  505. package/dvm/neighbors/types.d.ts.map +0 -1
  506. package/dvm/popover/base-popover.component.d.ts +0 -28
  507. package/dvm/popover/base-popover.component.d.ts.map +0 -1
  508. package/dvm/popover/index.d.ts +0 -2
  509. package/dvm/popover/index.d.ts.map +0 -1
  510. package/dvm/popover/popover.component.d.ts +0 -69
  511. package/dvm/popover/popover.component.d.ts.map +0 -1
  512. package/dvm/popover/popover.config.d.ts +0 -25
  513. package/dvm/popover/popover.config.d.ts.map +0 -1
  514. package/dvm/popover/popover.service.d.ts +0 -140
  515. package/dvm/popover/popover.service.d.ts.map +0 -1
  516. package/dvm/popover/public-api.d.ts.map +0 -1
  517. package/dvm/popover/seat-popover/seat-popover.component.d.ts +0 -21
  518. package/dvm/popover/seat-popover/seat-popover.component.d.ts.map +0 -1
  519. package/dvm/popover/section-popover/section-popover.component.d.ts +0 -32
  520. package/dvm/popover/section-popover/section-popover.component.d.ts.map +0 -1
  521. package/dvm/popover/services/dvm-popover-positioner.service.d.ts +0 -30
  522. package/dvm/popover/services/dvm-popover-positioner.service.d.ts.map +0 -1
  523. package/dvm/popover/services/popover-manager.service.d.ts +0 -29
  524. package/dvm/popover/services/popover-manager.service.d.ts.map +0 -1
  525. package/dvm/popover/transformers/base-popover-data-transformer.d.ts +0 -29
  526. package/dvm/popover/transformers/base-popover-data-transformer.d.ts.map +0 -1
  527. package/dvm/popover/types.d.ts +0 -79
  528. package/dvm/popover/types.d.ts.map +0 -1
  529. package/dvm/public-api.d.ts +0 -10
  530. package/dvm/public-api.d.ts.map +0 -1
  531. package/dvm/stepper/index.d.ts +0 -2
  532. package/dvm/stepper/index.d.ts.map +0 -1
  533. package/dvm/stepper/public-api.d.ts +0 -2
  534. package/dvm/stepper/public-api.d.ts.map +0 -1
  535. package/dvm/stepper/stepper.component.d.ts +0 -27
  536. package/dvm/stepper/stepper.component.d.ts.map +0 -1
  537. package/dvm/stepper/types.d.ts.map +0 -1
  538. package/dvm/ticket-info-item/index.d.ts +0 -2
  539. package/dvm/ticket-info-item/index.d.ts.map +0 -1
  540. package/dvm/ticket-info-item/public-api.d.ts.map +0 -1
  541. package/dvm/ticket-info-item/ticket-info-item.component.d.ts +0 -6
  542. package/dvm/ticket-info-item/ticket-info-item.component.d.ts.map +0 -1
  543. package/dvm/ticket-info-item/ticket-info-item.service.d.ts +0 -7
  544. package/dvm/ticket-info-item/ticket-info-item.service.d.ts.map +0 -1
  545. package/fesm2022/3ddv-software-division-components.mjs +0 -6568
  546. package/fesm2022/3ddv-software-division-components.mjs.map +0 -1
  547. package/generic/add-digital-wallet/add-digital-wallet.component.d.ts +0 -21
  548. package/generic/add-digital-wallet/add-digital-wallet.component.d.ts.map +0 -1
  549. package/generic/add-digital-wallet/index.d.ts +0 -2
  550. package/generic/add-digital-wallet/index.d.ts.map +0 -1
  551. package/generic/add-digital-wallet/public-api.d.ts.map +0 -1
  552. package/generic/braintree/braintree.component.d.ts +0 -33
  553. package/generic/braintree/braintree.component.d.ts.map +0 -1
  554. package/generic/braintree/index.d.ts +0 -2
  555. package/generic/braintree/index.d.ts.map +0 -1
  556. package/generic/braintree/public-api.d.ts.map +0 -1
  557. package/generic/braintree/types.d.ts +0 -27
  558. package/generic/braintree/types.d.ts.map +0 -1
  559. package/generic/button/button.component.d.ts +0 -152
  560. package/generic/button/button.component.d.ts.map +0 -1
  561. package/generic/button/index.d.ts +0 -2
  562. package/generic/button/index.d.ts.map +0 -1
  563. package/generic/button/public-api.d.ts +0 -2
  564. package/generic/button/public-api.d.ts.map +0 -1
  565. package/generic/button/ui/ui-button-helm/src/index.d.ts +0 -10
  566. package/generic/button/ui/ui-button-helm/src/index.d.ts.map +0 -1
  567. package/generic/button/ui/ui-button-helm/src/lib/hlm-button.d.ts +0 -20
  568. package/generic/button/ui/ui-button-helm/src/lib/hlm-button.d.ts.map +0 -1
  569. package/generic/button/ui/ui-button-helm/src/lib/hlm-button.token.d.ts +0 -9
  570. package/generic/button/ui/ui-button-helm/src/lib/hlm-button.token.d.ts.map +0 -1
  571. package/generic/carousel/carousel-item.component.d.ts +0 -8
  572. package/generic/carousel/carousel-item.component.d.ts.map +0 -1
  573. package/generic/carousel/carousel.component.d.ts +0 -20
  574. package/generic/carousel/carousel.component.d.ts.map +0 -1
  575. package/generic/carousel/index.d.ts +0 -2
  576. package/generic/carousel/index.d.ts.map +0 -1
  577. package/generic/carousel/public-api.d.ts.map +0 -1
  578. package/generic/carousel/ui/ui-carousel-helm/src/index.d.ts +0 -26
  579. package/generic/carousel/ui/ui-carousel-helm/src/index.d.ts.map +0 -1
  580. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-content.d.ts +0 -10
  581. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-content.d.ts.map +0 -1
  582. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-item.d.ts +0 -10
  583. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-item.d.ts.map +0 -1
  584. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-next.d.ts +0 -15
  585. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-next.d.ts.map +0 -1
  586. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-previous.d.ts +0 -15
  587. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-previous.d.ts.map +0 -1
  588. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-slide-display.d.ts +0 -16
  589. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-slide-display.d.ts.map +0 -1
  590. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel.d.ts +0 -28
  591. package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel.d.ts.map +0 -1
  592. package/generic/dialog/dialog.component.d.ts +0 -11
  593. package/generic/dialog/dialog.component.d.ts.map +0 -1
  594. package/generic/dialog/index.d.ts +0 -2
  595. package/generic/dialog/index.d.ts.map +0 -1
  596. package/generic/dialog/libs/ui-dialog-helm/src/index.d.ts.map +0 -1
  597. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-close.d.ts +0 -9
  598. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-close.d.ts.map +0 -1
  599. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-content.d.ts +0 -15
  600. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-content.d.ts.map +0 -1
  601. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-description.d.ts +0 -10
  602. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-description.d.ts.map +0 -1
  603. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-footer.d.ts +0 -9
  604. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-footer.d.ts.map +0 -1
  605. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-header.d.ts +0 -9
  606. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-header.d.ts.map +0 -1
  607. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-overlay.d.ts +0 -12
  608. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-overlay.d.ts.map +0 -1
  609. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-title.d.ts +0 -10
  610. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-title.d.ts.map +0 -1
  611. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog.d.ts +0 -7
  612. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog.d.ts.map +0 -1
  613. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog.service.d.ts +0 -21
  614. package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog.service.d.ts.map +0 -1
  615. package/generic/dialog/public-api.d.ts.map +0 -1
  616. package/generic/drawer/drawer.component.d.ts +0 -6
  617. package/generic/drawer/drawer.component.d.ts.map +0 -1
  618. package/generic/drawer/drawer.service.d.ts +0 -7
  619. package/generic/drawer/drawer.service.d.ts.map +0 -1
  620. package/generic/drawer/index.d.ts +0 -2
  621. package/generic/drawer/index.d.ts.map +0 -1
  622. package/generic/drawer/public-api.d.ts.map +0 -1
  623. package/generic/icon/icon.component.d.ts +0 -21
  624. package/generic/icon/icon.component.d.ts.map +0 -1
  625. package/generic/icon/index.d.ts +0 -2
  626. package/generic/icon/index.d.ts.map +0 -1
  627. package/generic/icon/lib/ui-icon-helm/src/index.d.ts +0 -10
  628. package/generic/icon/lib/ui-icon-helm/src/index.d.ts.map +0 -1
  629. package/generic/icon/lib/ui-icon-helm/src/lib/hlm-icon.d.ts +0 -10
  630. package/generic/icon/lib/ui-icon-helm/src/lib/hlm-icon.d.ts.map +0 -1
  631. package/generic/icon/lib/ui-icon-helm/src/lib/hlm-icon.token.d.ts +0 -8
  632. package/generic/icon/lib/ui-icon-helm/src/lib/hlm-icon.token.d.ts.map +0 -1
  633. package/generic/icon/public-api.d.ts +0 -2
  634. package/generic/icon/public-api.d.ts.map +0 -1
  635. package/generic/index.d.ts +0 -2
  636. package/generic/index.d.ts.map +0 -1
  637. package/generic/public-api.d.ts +0 -10
  638. package/generic/public-api.d.ts.map +0 -1
  639. package/generic/rich-text-editor/components/editor-toolbar/editor-toolbar.component.d.ts +0 -88
  640. package/generic/rich-text-editor/components/editor-toolbar/editor-toolbar.component.d.ts.map +0 -1
  641. package/generic/rich-text-editor/components/link-modal/link-modal.component.d.ts +0 -43
  642. package/generic/rich-text-editor/components/link-modal/link-modal.component.d.ts.map +0 -1
  643. package/generic/rich-text-editor/index.d.ts +0 -2
  644. package/generic/rich-text-editor/index.d.ts.map +0 -1
  645. package/generic/rich-text-editor/models/editor-config.model.d.ts +0 -46
  646. package/generic/rich-text-editor/models/editor-config.model.d.ts.map +0 -1
  647. package/generic/rich-text-editor/models/index.d.ts +0 -3
  648. package/generic/rich-text-editor/models/index.d.ts.map +0 -1
  649. package/generic/rich-text-editor/models/toolbar-config.model.d.ts +0 -63
  650. package/generic/rich-text-editor/models/toolbar-config.model.d.ts.map +0 -1
  651. package/generic/rich-text-editor/public-api.d.ts +0 -5
  652. package/generic/rich-text-editor/public-api.d.ts.map +0 -1
  653. package/generic/rich-text-editor/rich-text-editor.component.d.ts +0 -113
  654. package/generic/rich-text-editor/rich-text-editor.component.d.ts.map +0 -1
  655. package/generic/select/index.d.ts +0 -2
  656. package/generic/select/index.d.ts.map +0 -1
  657. package/generic/select/lib/hlm-select-content.d.ts +0 -13
  658. package/generic/select/lib/hlm-select-content.d.ts.map +0 -1
  659. package/generic/select/lib/hlm-select-group.d.ts +0 -10
  660. package/generic/select/lib/hlm-select-group.d.ts.map +0 -1
  661. package/generic/select/lib/hlm-select-label.d.ts +0 -12
  662. package/generic/select/lib/hlm-select-label.d.ts.map +0 -1
  663. package/generic/select/lib/hlm-select-option.d.ts +0 -12
  664. package/generic/select/lib/hlm-select-option.d.ts.map +0 -1
  665. package/generic/select/lib/hlm-select-scroll-down.d.ts +0 -9
  666. package/generic/select/lib/hlm-select-scroll-down.d.ts.map +0 -1
  667. package/generic/select/lib/hlm-select-scroll-up.d.ts +0 -9
  668. package/generic/select/lib/hlm-select-scroll-up.d.ts.map +0 -1
  669. package/generic/select/lib/hlm-select-trigger.d.ts +0 -17
  670. package/generic/select/lib/hlm-select-trigger.d.ts.map +0 -1
  671. package/generic/select/lib/hlm-select-value.d.ts +0 -9
  672. package/generic/select/lib/hlm-select-value.d.ts.map +0 -1
  673. package/generic/select/lib/hlm-select.d.ts +0 -9
  674. package/generic/select/lib/hlm-select.d.ts.map +0 -1
  675. package/generic/select/lib/index.d.ts +0 -35
  676. package/generic/select/lib/index.d.ts.map +0 -1
  677. package/generic/select/public-api.d.ts.map +0 -1
  678. package/generic/select/select.component.d.ts +0 -14
  679. package/generic/select/select.component.d.ts.map +0 -1
  680. package/generic/select/types.d.ts +0 -5
  681. package/generic/select/types.d.ts.map +0 -1
  682. package/index.d.ts +0 -6
  683. package/public-api.d.ts +0 -8
  684. package/public-api.d.ts.map +0 -1
  685. package/shared/apply-theme-variables/apply-theme-variables.d.ts +0 -4
  686. package/shared/apply-theme-variables/apply-theme-variables.d.ts.map +0 -1
  687. package/shared/apply-theme-variables/index.d.ts.map +0 -1
  688. package/shared/lib-provider/config-token.d.ts +0 -4
  689. package/shared/lib-provider/config-token.d.ts.map +0 -1
  690. package/shared/lib-provider/index.d.ts +0 -2
  691. package/shared/lib-provider/index.d.ts.map +0 -1
  692. package/shared/lib-provider/provide-sdc.d.ts +0 -10
  693. package/shared/lib-provider/provide-sdc.d.ts.map +0 -1
  694. package/shared/lib-provider/public-api.d.ts.map +0 -1
  695. package/shared/screen-observer/index.d.ts.map +0 -1
  696. package/shared/screen-observer/provide-screen-observer.d.ts +0 -5
  697. package/shared/screen-observer/provide-screen-observer.d.ts.map +0 -1
  698. package/shared/screen-observer/screen-observer.d.ts +0 -15
  699. package/shared/screen-observer/screen-observer.d.ts.map +0 -1
  700. package/shared/types.d.ts +0 -19
  701. package/shared/types.d.ts.map +0 -1
  702. package/tailwind.config.js +0 -19
  703. package/types/sizes.type.d.ts +0 -3
  704. package/types/sizes.type.d.ts.map +0 -1
@@ -0,0 +1,1080 @@
1
+ import * as i1 from '@angular/common';
2
+ import { DOCUMENT, CommonModule, CurrencyPipe } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { InjectionToken, inject, ApplicationRef, EnvironmentInjector, ElementRef, createEnvironmentInjector, createComponent, TemplateRef, Injectable, EventEmitter, ChangeDetectorRef, Output, Input, ChangeDetectionStrategy, Component, input, output, Inject } from '@angular/core';
5
+ import { of } from 'rxjs';
6
+ import { autoUpdate, arrow, computePosition, detectOverflow, inline, hide, autoPlacement, size, flip, shift, offset } from '@floating-ui/dom';
7
+ import { createPopper } from '@popperjs/core';
8
+
9
+ const DVM_FORMATTER = new InjectionToken('DvmFormatter');
10
+ const CONFIGURATION_SERVICE = new InjectionToken('ConfigurationService');
11
+ const DVM_SERVICE = new InjectionToken('DvmService');
12
+ const THUMBNAIL_PROVIDER = new InjectionToken('ThumbnailProvider');
13
+ const POPOVER_POSITIONER = new InjectionToken('PopoverPositioner');
14
+ const POPOVER_MANAGER = new InjectionToken('PopoverManager');
15
+
16
+ class PopoverService {
17
+ // SERVICES
18
+ appReference = inject(ApplicationRef);
19
+ envInjector = inject(EnvironmentInjector);
20
+ document = inject(DOCUMENT);
21
+ // POPOVER STATE
22
+ popoverInstances = new Map();
23
+ popoverOptions = {
24
+ placement: 'bottom',
25
+ strategy: 'absolute',
26
+ middleware: [],
27
+ };
28
+ popoverTimerTimeInMs = 300;
29
+ currentPopoverId = '';
30
+ popoverTimer = null;
31
+ popoverInstancesWithTimers = new Map();
32
+ // Default mock providers for when no custom providers are provided
33
+ defaultMockProviders = [
34
+ {
35
+ provide: CONFIGURATION_SERVICE,
36
+ useValue: {
37
+ configuration: {
38
+ dvmData: {
39
+ venueId: 'default-venue',
40
+ },
41
+ },
42
+ },
43
+ },
44
+ {
45
+ provide: DVM_FORMATTER,
46
+ useValue: {
47
+ transform: (value) => value.replace(/-/g, ' ').toUpperCase(),
48
+ },
49
+ },
50
+ {
51
+ provide: DVM_SERVICE,
52
+ useValue: {
53
+ viewer3dService: {
54
+ isInitialized: () => true,
55
+ getThumbnail: () => of('https://via.placeholder.com/275x124/1a1a1a/ffffff?text=Default+Thumbnail'),
56
+ },
57
+ },
58
+ },
59
+ ];
60
+ // METHODS
61
+ setTimer() {
62
+ const myId = this.currentPopoverId;
63
+ this.clearTimer();
64
+ this.popoverTimer = setTimeout(() => {
65
+ if (this.currentPopoverId !== myId) {
66
+ return;
67
+ }
68
+ this.destroyAllPopovers();
69
+ this.popoverTimer = null;
70
+ }, this.popoverTimerTimeInMs);
71
+ }
72
+ clearTimer() {
73
+ if (this.popoverTimer !== null) {
74
+ clearTimeout(this.popoverTimer);
75
+ this.popoverTimer = null;
76
+ }
77
+ }
78
+ /**
79
+ * Sets a timer for a specific popover instance to auto-hide it after the specified delay.
80
+ * @param popoverId - The ID of the popover to set timer for
81
+ * @param delayMs - Delay in milliseconds (optional, defaults to configured delay)
82
+ */
83
+ setPopoverTimer(popoverId, delayMs) {
84
+ this.clearPopoverTimer(popoverId);
85
+ const delay = delayMs ?? this.popoverTimerTimeInMs;
86
+ this.popoverTimer = setTimeout(() => {
87
+ this.destroyPopover(popoverId);
88
+ }, delay);
89
+ }
90
+ /**
91
+ * Clears the timer for a specific popover instance.
92
+ * @param popoverId - The ID of the popover to clear timer for
93
+ */
94
+ clearPopoverTimer(popoverId) {
95
+ if (this.popoverTimer !== null) {
96
+ clearTimeout(this.popoverTimer);
97
+ this.popoverTimer = null;
98
+ }
99
+ }
100
+ /**
101
+ * Configures the default timer delay for popovers.
102
+ * @param delayMs - Delay in milliseconds
103
+ */
104
+ setTimerDelay(delayMs) {
105
+ this.popoverTimerTimeInMs = delayMs;
106
+ }
107
+ /**
108
+ * Crea un popover y lo añade al DOM, usando un elemento de referencia y contenido HTML o string.
109
+ * Si ya existe un popover con el mismo ID, lo destruye antes de crear uno nuevo.
110
+ *
111
+ * @param popoverId Identificador único del popover.
112
+ * @param reference Elemento de referencia para posicionar el popover (HTMLElement, Element, VirtualElement o ElementRef).
113
+ * @param content Contenido del popover (HTMLElement o string HTML).
114
+ * @param options Opciones de configuración para el posicionamiento (placement, strategy, middleware, etc).
115
+ * @returns Instancia del popover creado.
116
+ */
117
+ createPopover(popoverId, reference, content, options = {}) {
118
+ this.clearTimer();
119
+ // Comprobamos si ya existe una instancia de Popover con el mismo ID
120
+ this.checkPopoverInstance(popoverId ?? '');
121
+ this.currentPopoverId = popoverId;
122
+ const id = popoverId ?? `popover-${Date.now()}`; // ID unico del popover, proporcionado o auto
123
+ const referenceElement = reference instanceof ElementRef ? reference.nativeElement : reference; // Elemento de referencia
124
+ const popoverElement = this.createPopoverElement(content); // Elemento Popover
125
+ const finalOptions = {
126
+ // Opciones finales de posicionamiento
127
+ placement: options.placement || this.popoverOptions.placement,
128
+ strategy: options.strategy || this.popoverOptions.strategy,
129
+ middleware: options.middleware ? this.setMiddlewares(options.middleware) : this.popoverOptions.middleware,
130
+ };
131
+ // Añadimos el Popover al DOM
132
+ this.document.body.append(popoverElement);
133
+ // Creamos la instancia del Popover
134
+ const instance = {
135
+ id,
136
+ element: popoverElement,
137
+ reference: referenceElement,
138
+ update: async () => this.calculatePosition(instance, finalOptions),
139
+ };
140
+ // Calculamos la posicion del Popover
141
+ void this.calculatePosition(instance, finalOptions);
142
+ // Añadimos la función de autoUpdate en la propiedad cleanup del Popover ( se llama al destruir el Popover )
143
+ instance.cleanup = autoUpdate(referenceElement, popoverElement, () => instance.update());
144
+ // Añadimos la instancia del Popover al mapa de instancias
145
+ this.popoverInstances.set(id, instance);
146
+ return instance;
147
+ }
148
+ /**
149
+ * Crea un popover que contiene un componente Angular con soporte para proyección de contenido.
150
+ * Si ya existe un popover con el mismo ID, lo destruye antes de crear uno nuevo.
151
+ *
152
+ * @param popoverId Identificador único del popover.
153
+ * @param reference Elemento de referencia para posicionar el popover (HTMLElement, Element, VirtualElement o ElementRef).
154
+ * @param component Clase del componente Angular a renderizar dentro del popover.
155
+ * @param inputs Propiedades de entrada para el componente.
156
+ * @param contentProjection Contenido proyectado para los slots del popover.
157
+ * @param options Opciones de configuración para el posicionamiento (placement, strategy, middleware, etc).
158
+ * @returns Instancia del popover creado, incluyendo la referencia al componente.
159
+ */
160
+ createPopoverComponentWithContent(popoverId, reference, component, inputs, contentProjection, options = {}, serviceOptions = {}) {
161
+ this.clearTimer();
162
+ // Comprobamos si ya existe una instancia de Popover con el mismo ID
163
+ this.checkPopoverInstance(popoverId ?? '');
164
+ this.currentPopoverId = popoverId;
165
+ const referenceElement = reference instanceof ElementRef ? reference.nativeElement : reference;
166
+ const popoverElement = this.createPopoverElement();
167
+ // Create a custom environment injector with the required providers
168
+ const providers = serviceOptions.providers || this.defaultMockProviders;
169
+ const customInjector = createEnvironmentInjector(providers, this.envInjector);
170
+ const componentReference = createComponent(component, {
171
+ environmentInjector: customInjector,
172
+ hostElement: popoverElement,
173
+ });
174
+ const finalOptions = {
175
+ placement: options.placement || this.popoverOptions.placement,
176
+ strategy: options.strategy || this.popoverOptions.strategy,
177
+ middleware: options.middleware ? this.setMiddlewares(options.middleware) : this.popoverOptions.middleware,
178
+ };
179
+ // Añadimos el Popover al DOM
180
+ this.document.body.append(popoverElement);
181
+ // Si tiene inputs, los asignamos al componente
182
+ if (inputs) {
183
+ for (const [key, value] of Object.entries(inputs)) {
184
+ componentReference.setInput(key, value);
185
+ }
186
+ }
187
+ // Procesamos la proyección de contenido
188
+ if (contentProjection) {
189
+ this.processContentProjection(componentReference, contentProjection);
190
+ }
191
+ // Encendemos el detectChanges del componente para que se renderice
192
+ componentReference.changeDetectorRef.detectChanges();
193
+ // Añadimos el componente al DOM
194
+ this.appReference.attachView(componentReference.hostView);
195
+ // Creamos la instancia del Popover
196
+ const instance = {
197
+ id: popoverId,
198
+ element: popoverElement,
199
+ reference: referenceElement,
200
+ componentRef: componentReference,
201
+ update: async () => this.calculatePosition(instance, finalOptions),
202
+ };
203
+ const arrowElement = document.querySelector('#arrow');
204
+ finalOptions.middleware?.push(arrow({ element: arrowElement }));
205
+ // Calculamos la posicion del Popover
206
+ void this.calculatePosition(instance, finalOptions);
207
+ // Proporcionamos la función de autoUpdate en la propiedad cleanup del Popover
208
+ instance.cleanup = autoUpdate(referenceElement, popoverElement, () => instance.update());
209
+ // Añadimos la instancia del Popover al mapa de instancias
210
+ this.popoverInstances.set(popoverId, instance);
211
+ return instance;
212
+ }
213
+ /**
214
+ * Crea un popover que contiene un componente Angular, lo añade al DOM y lo posiciona.
215
+ * Si ya existe un popover con el mismo ID, lo destruye antes de crear uno nuevo.
216
+ *
217
+ * @param popoverId Identificador único del popover.
218
+ * @param reference Elemento de referencia para posicionar el popover (HTMLElement, Element, VirtualElement o ElementRef).
219
+ * @param component Clase del componente Angular a renderizar dentro del popover.
220
+ * @param inputs Propiedades de entrada para el componente.
221
+ * @param options Opciones de configuración para el posicionamiento (placement, strategy, middleware, etc).
222
+ * @returns Instancia del popover creado, incluyendo la referencia al componente.
223
+ */
224
+ createPopoverComponent(popoverId, reference, component, inputs, options = {}, serviceOptions = {}) {
225
+ this.clearTimer();
226
+ // Comprobamos si ya existe una instancia de Popover con el mismo ID
227
+ this.checkPopoverInstance(popoverId ?? '');
228
+ this.currentPopoverId = popoverId;
229
+ const referenceElement = reference instanceof ElementRef ? reference.nativeElement : reference; // Elemento de referencia
230
+ const popoverElement = this.createPopoverElement(); // Elemento Popover
231
+ // Create a custom environment injector with the required providers
232
+ const providers = serviceOptions.providers || this.defaultMockProviders;
233
+ const customInjector = createEnvironmentInjector(providers, this.envInjector);
234
+ const componentReference = createComponent(component, {
235
+ environmentInjector: customInjector,
236
+ hostElement: popoverElement,
237
+ }); // Instancia del componente Popover
238
+ const finalOptions = {
239
+ // Opciones de posicionamiento
240
+ placement: options.placement || this.popoverOptions.placement,
241
+ strategy: options.strategy || this.popoverOptions.strategy,
242
+ middleware: options.middleware ? this.setMiddlewares(options.middleware) : this.popoverOptions.middleware,
243
+ };
244
+ // Añadimos el Popover al DOM
245
+ this.document.body.append(popoverElement);
246
+ // Si tiene inputs, los asignamos al componente
247
+ if (inputs) {
248
+ for (const [key, value] of Object.entries(inputs)) {
249
+ componentReference.setInput(key, value);
250
+ }
251
+ }
252
+ // Encendemos el detectChanges del componente para que se renderice
253
+ componentReference.changeDetectorRef.detectChanges();
254
+ // Añadimos el componente al DOM
255
+ this.appReference.attachView(componentReference.hostView);
256
+ // Creamos la instancia del Popover
257
+ const instance = {
258
+ id: popoverId,
259
+ element: popoverElement,
260
+ reference: referenceElement,
261
+ componentRef: componentReference,
262
+ update: async () => this.calculatePosition(instance, finalOptions),
263
+ };
264
+ const arrowElement = document.querySelector('#arrow');
265
+ finalOptions.middleware?.push(arrow({ element: arrowElement }));
266
+ // Calculamos la posicion del Popover
267
+ void this.calculatePosition(instance, finalOptions);
268
+ // Proporcionamos la función de autoUpdate en la propiedad cleanup del Popover ( se llama al destruir el Popover )
269
+ instance.cleanup = autoUpdate(referenceElement, popoverElement, () => instance.update());
270
+ // Añadimos la instancia del Popover al mapa de instancias
271
+ this.popoverInstances.set(popoverId, instance);
272
+ return instance;
273
+ }
274
+ /**
275
+ * Destruye un popover existente por su ID, eliminando su elemento del DOM y limpiando recursos.
276
+ *
277
+ * @param id Identificador del popover a destruir.
278
+ */
279
+ destroyPopover(id) {
280
+ // Comprobamos si existe la instancia del Popover
281
+ const instance = this.popoverInstances.get(id);
282
+ if (!instance) {
283
+ return;
284
+ }
285
+ // Llamamos a la función de cleanup para eliminar el autoUpdate
286
+ instance.cleanup?.();
287
+ // Si hay comoponente, lo eliminamos del DOM
288
+ if (instance.componentRef) {
289
+ this.appReference.detachView(instance.componentRef.hostView);
290
+ instance.componentRef.destroy();
291
+ }
292
+ // Si hay elemento, lo eliminamos del DOM
293
+ if (instance.element && instance.element.parentNode) {
294
+ instance.element.remove();
295
+ }
296
+ // Eliminamos instancia del mapa
297
+ this.popoverInstances.delete(id);
298
+ }
299
+ /**
300
+ * Destruye todos los popovers existentes, eliminando sus elementos del DOM y limpiando recursos.
301
+ */
302
+ destroyAllPopovers() {
303
+ for (const id of this.popoverInstances.keys()) {
304
+ this.destroyPopover(id);
305
+ }
306
+ }
307
+ /**
308
+ * Crea el elemento HTML base del popover, opcionalmente con contenido.
309
+ *
310
+ * @param content Contenido a insertar en el popover (string, HTMLElement o ElementRef).
311
+ * @returns Elemento HTML del popover.
312
+ */
313
+ createPopoverElement(content) {
314
+ // Creamos el elemento Popover
315
+ const popoverElement = this.document.createElement('div');
316
+ // Añadimos la clase Popover al elemento
317
+ popoverElement.classList.add('popover');
318
+ // Si se proporciona contenido, lo añadimos al Popover, si no, lo dejamos vacío
319
+ if (!content) {
320
+ return popoverElement;
321
+ }
322
+ if (typeof content === 'string') {
323
+ popoverElement.innerHTML = content;
324
+ }
325
+ else {
326
+ const element = content instanceof ElementRef ? content.nativeElement : content;
327
+ popoverElement.append(element);
328
+ }
329
+ return popoverElement;
330
+ }
331
+ /**
332
+ * Verifica si existe una instancia de popover con el ID dado y la destruye si es así.
333
+ *
334
+ * @param id Identificador del popover a comprobar.
335
+ */
336
+ checkPopoverInstance(id) {
337
+ if (this.popoverInstances.has(id)) {
338
+ this.destroyPopover(id);
339
+ }
340
+ }
341
+ /**
342
+ * Calcula y aplica la posición del popover respecto a su elemento de referencia,
343
+ * usando las opciones de Floating UI.
344
+ *
345
+ * @param instance Instancia del popover a posicionar.
346
+ * @param options Opciones de configuración para el posicionamiento.
347
+ */
348
+ async calculatePosition(instance, options = {}) {
349
+ // Desestructuramos las opciones
350
+ const { placement, strategy, middleware } = options;
351
+ try {
352
+ // Calculamos la posicion del Popover en base a la referencia y el elemento Popover y las opciones proporcionadas
353
+ const { x, y } = await computePosition(instance.reference, instance.element, {
354
+ placement,
355
+ strategy,
356
+ middleware,
357
+ });
358
+ // Asignamos la posicion al elemento Popover
359
+ Object.assign(instance.element.style, {
360
+ position: strategy,
361
+ top: `${y}px`,
362
+ left: `${x}px`,
363
+ });
364
+ }
365
+ catch (error) {
366
+ console.error('Error positioning popover', error);
367
+ }
368
+ }
369
+ /**
370
+ * Procesa la proyección de contenido para el componente popover.
371
+ *
372
+ * @param componentRef Referencia al componente creado
373
+ * @param contentProjection Contenido a proyectar en los slots
374
+ */
375
+ processContentProjection(componentRef, contentProjection) {
376
+ const componentInstance = componentRef.instance;
377
+ // Procesamos cada slot de contenido
378
+ if (contentProjection.thumbnail) {
379
+ this.setContentProjection(componentInstance, 'hasThumbnailProjection', contentProjection.thumbnail);
380
+ }
381
+ if (contentProjection.content) {
382
+ this.setContentProjection(componentInstance, 'hasContentProjection', contentProjection.content);
383
+ }
384
+ if (contentProjection.price) {
385
+ this.setContentProjection(componentInstance, 'hasPriceProjection', contentProjection.price);
386
+ }
387
+ }
388
+ /**
389
+ * Establece la proyección de contenido para un slot específico.
390
+ *
391
+ * @param componentInstance Instancia del componente
392
+ * @param projectionFlag Flag que indica si hay proyección
393
+ * @param content Contenido a proyectar
394
+ */
395
+ setContentProjection(componentInstance, projectionFlag, content) {
396
+ // Marcamos que hay proyección de contenido
397
+ componentInstance[projectionFlag] = true;
398
+ // Si es un TemplateRef, lo almacenamos para uso posterior
399
+ if (content instanceof TemplateRef) {
400
+ componentInstance[`${projectionFlag}Template`] = content;
401
+ }
402
+ else if (typeof content === 'string') {
403
+ // Si es string, lo almacenamos como HTML
404
+ componentInstance[`${projectionFlag}Html`] = content;
405
+ }
406
+ }
407
+ /**
408
+ * Set Middlewares
409
+ * Método que recibe un objeto de opciones de middleware y devuelve un array de middlewares cargados con sus opciones.
410
+ *
411
+ * Para ello, necesitamos establecer un orden de aplicación de los middlewares, ya que la computación de la posición
412
+ * depende del estado de los middlewares aplicados anteriormente. Además, como son funciones, hacemos switch para
413
+ * cargar el middleware correspondiente en cada caso a excepción de detectOverflow, que es un middleware especial
414
+ * que no se aplica directamente, sino que se ejecuta como una función asíncrona sobre el estado devuelto de los middlewares (si los hay).
415
+ *
416
+ * @param middleware
417
+ * @returns {Middleware[]}
418
+ */
419
+ setMiddlewares(middleware) {
420
+ // Array de Middlewares y orden de aplicación de los mismos
421
+ // https://floating-ui.com/docs/middleware#ordering
422
+ const middlewares = [];
423
+ const order = [
424
+ 'offset',
425
+ 'shift',
426
+ 'flip',
427
+ 'arrow',
428
+ 'size',
429
+ 'autoPlacement',
430
+ 'inline',
431
+ 'hide',
432
+ 'detectOverflow',
433
+ ];
434
+ // Recorremos el array de orden y aplicamos los middlewares en el orden indicado
435
+ for (const key of order) {
436
+ if (!middleware[key]) {
437
+ continue;
438
+ }
439
+ switch (key) {
440
+ case 'offset': {
441
+ middlewares.push(offset(middleware.offset));
442
+ break;
443
+ }
444
+ case 'shift': {
445
+ middlewares.push(shift(middleware.shift));
446
+ break;
447
+ }
448
+ case 'flip': {
449
+ middlewares.push(flip(middleware.flip));
450
+ break;
451
+ }
452
+ case 'arrow': {
453
+ middlewares.push(arrow(middleware.arrow));
454
+ break;
455
+ }
456
+ case 'size': {
457
+ middlewares.push(size(middleware.size));
458
+ break;
459
+ }
460
+ case 'autoPlacement': {
461
+ middlewares.push(autoPlacement(middleware.autoPlacement));
462
+ break;
463
+ }
464
+ case 'hide': {
465
+ middlewares.push(hide(middleware.hide));
466
+ break;
467
+ }
468
+ case 'inline': {
469
+ middlewares.push(inline(middleware.inline));
470
+ break;
471
+ }
472
+ case 'detectOverflow': {
473
+ const overflowMiddleware = {
474
+ name: 'detectOverflow',
475
+ async fn(state) {
476
+ await detectOverflow(state, middleware.detectOverflow);
477
+ return {};
478
+ },
479
+ };
480
+ middlewares.push(overflowMiddleware);
481
+ break;
482
+ }
483
+ }
484
+ }
485
+ return middlewares;
486
+ }
487
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: PopoverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
488
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: PopoverService, providedIn: 'root' });
489
+ }
490
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: PopoverService, decorators: [{
491
+ type: Injectable,
492
+ args: [{
493
+ providedIn: 'root',
494
+ }]
495
+ }] });
496
+
497
+ /**
498
+ * Base component for popovers that provides timer functionality.
499
+ * Extend this component to create timer-aware popovers.
500
+ */
501
+ class BasePopoverComponent {
502
+ popoverId = '';
503
+ autoHideDelay = 300; // milliseconds
504
+ enableAutoHide = true;
505
+ mouseEnter = new EventEmitter();
506
+ mouseLeave = new EventEmitter();
507
+ popoverHidden = new EventEmitter();
508
+ popoverService = inject(PopoverService);
509
+ cdr = inject(ChangeDetectorRef);
510
+ isMouseOver = false;
511
+ ngOnInit() {
512
+ if (this.enableAutoHide && this.popoverId) {
513
+ this.startAutoHideTimer();
514
+ }
515
+ }
516
+ ngOnDestroy() {
517
+ if (this.popoverId) {
518
+ this.popoverService.clearPopoverTimer(this.popoverId);
519
+ }
520
+ }
521
+ onMouseEnter(event) {
522
+ this.isMouseOver = true;
523
+ this.clearAutoHideTimer();
524
+ this.mouseEnter.emit(event);
525
+ }
526
+ onMouseLeave(event) {
527
+ this.isMouseOver = false;
528
+ if (this.enableAutoHide) {
529
+ this.startAutoHideTimer();
530
+ }
531
+ this.mouseLeave.emit(event);
532
+ }
533
+ hidePopover() {
534
+ if (this.popoverId) {
535
+ this.popoverService.destroyPopover(this.popoverId);
536
+ this.popoverHidden.emit();
537
+ }
538
+ }
539
+ startAutoHideTimer() {
540
+ if (this.popoverId && !this.isMouseOver) {
541
+ this.popoverService.setPopoverTimer(this.popoverId, this.autoHideDelay);
542
+ }
543
+ }
544
+ clearAutoHideTimer() {
545
+ if (this.popoverId) {
546
+ this.popoverService.clearPopoverTimer(this.popoverId);
547
+ }
548
+ }
549
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: BasePopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
550
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: BasePopoverComponent, isStandalone: true, selector: "ng-component", inputs: { popoverId: "popoverId", autoHideDelay: "autoHideDelay", enableAutoHide: "enableAutoHide" }, outputs: { mouseEnter: "mouseEnter", mouseLeave: "mouseLeave", popoverHidden: "popoverHidden" }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
551
+ }
552
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: BasePopoverComponent, decorators: [{
553
+ type: Component,
554
+ args: [{
555
+ template: '', // Abstract component
556
+ changeDetection: ChangeDetectionStrategy.OnPush,
557
+ }]
558
+ }], propDecorators: { popoverId: [{
559
+ type: Input
560
+ }], autoHideDelay: [{
561
+ type: Input
562
+ }], enableAutoHide: [{
563
+ type: Input
564
+ }], mouseEnter: [{
565
+ type: Output
566
+ }], mouseLeave: [{
567
+ type: Output
568
+ }], popoverHidden: [{
569
+ type: Output
570
+ }] } });
571
+
572
+ class SeatPopoverComponent extends BasePopoverComponent {
573
+ data;
574
+ showLoader = true;
575
+ thumbnailProvider = inject(THUMBNAIL_PROVIDER, { optional: true });
576
+ cdr = inject(ChangeDetectorRef);
577
+ thumbnail;
578
+ isLoadingThumbnail = true;
579
+ ngOnInit() {
580
+ super.ngOnInit(); // Initialize base component timer logic
581
+ if (this.data.thumbnail) {
582
+ this.thumbnail = this.data.thumbnail;
583
+ this.isLoadingThumbnail = false;
584
+ }
585
+ else if (this.thumbnailProvider && this.showLoader) {
586
+ this.loadThumbnail();
587
+ }
588
+ }
589
+ loadThumbnail() {
590
+ this.thumbnailProvider.getThumbnail(this.data.id).subscribe({
591
+ next: url => {
592
+ this.thumbnail = url;
593
+ this.isLoadingThumbnail = false;
594
+ this.cdr.markForCheck();
595
+ },
596
+ error: () => {
597
+ this.isLoadingThumbnail = false;
598
+ this.cdr.markForCheck();
599
+ },
600
+ });
601
+ }
602
+ get formattedSection() {
603
+ return this.data.section.includes('_') ? this.data.section.split('_')[1].split('-')[0] : this.data.section;
604
+ }
605
+ get formattedSeat() {
606
+ return this.data.seat.split('-')[2] || this.data.seat;
607
+ }
608
+ onEnter(event) {
609
+ this.onMouseEnter(event);
610
+ }
611
+ onLeave(event) {
612
+ this.onMouseLeave(event);
613
+ }
614
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: SeatPopoverComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
615
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: SeatPopoverComponent, isStandalone: true, selector: "sdc-seat-popover", inputs: { data: "data", showLoader: "showLoader" }, usesInheritance: true, ngImport: i0, template: "<div\n (mouseenter)=\"onEnter($event)\"\n (mouseleave)=\"onLeave($event)\"\n class=\"sdc-seat-popover\">\n <div class=\"sdc-popover-thumbnail\">\n @if (isLoadingThumbnail && showLoader) {\n <div class=\"sdc-popover-loader\">\n <div class=\"sdc-spinner\"></div>\n </div>\n }\n @if (thumbnail && !isLoadingThumbnail) {\n <div class=\"sdc-thumbnail-image\" [style.background-image]=\"'url(' + thumbnail + ')'\"></div>\n }\n </div>\n\n <div class=\"sdc-popover-content\">\n <div class=\"sdc-popover-grid\">\n <div class=\"sdc-popover-col-left\">\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Section:</span>\n {{ formattedSection }}\n </h5>\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Row:</span>\n {{ data.row }}\n </h5>\n </div>\n <div class=\"sdc-popover-col-right\">\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Seat:</span>\n {{ formattedSeat }}\n </h5>\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Price:</span>\n {{ data.price | currency: 'USD' }}\n </h5>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{display:block}.sdc-seat-popover{width:var(--sdc-popover-width, 20rem);height:auto;color:var(--sdc-popover-text-color, #ffffff);background-color:var(--sdc-popover-bg-color, #000000);border-radius:var(--sdc-popover-border-radius, .75rem);overflow:hidden}.sdc-popover-thumbnail{width:100%;height:var(--sdc-popover-thumbnail-height, 12rem);position:relative}.sdc-thumbnail-image{width:100%;height:100%;background-position:center;background-size:cover;background-repeat:no-repeat}.sdc-popover-loader{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.sdc-spinner{display:inline-block;width:80px;height:80px}.sdc-spinner:after{content:\" \";display:block;width:32px;height:32px;margin:16px 8px 8px 16px;border-radius:50%;border:3px solid var(--sdc-spinner-color, #fff);border-color:var(--sdc-spinner-color, #fff) transparent var(--sdc-spinner-color, #fff) transparent;animation:sdc-spinner-rotate 1.2s linear infinite}@keyframes sdc-spinner-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.sdc-popover-content{padding:.75rem}.sdc-popover-grid{display:flex;gap:1.25rem}.sdc-popover-col-left{flex:1}.sdc-popover-col-right{flex:1;text-align:right;min-width:max-content}.sdc-popover-label{margin:.25rem 0;font-size:var(--sdc-popover-label-font-size, .875rem);line-height:1.25rem;font-weight:var(--sdc-popover-label-font-weight, 700)}.sdc-popover-label-text{font-weight:var(--sdc-popover-label-text-font-weight, 400)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.CurrencyPipe, name: "currency" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
616
+ }
617
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: SeatPopoverComponent, decorators: [{
618
+ type: Component,
619
+ args: [{ selector: 'sdc-seat-popover', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, CurrencyPipe], template: "<div\n (mouseenter)=\"onEnter($event)\"\n (mouseleave)=\"onLeave($event)\"\n class=\"sdc-seat-popover\">\n <div class=\"sdc-popover-thumbnail\">\n @if (isLoadingThumbnail && showLoader) {\n <div class=\"sdc-popover-loader\">\n <div class=\"sdc-spinner\"></div>\n </div>\n }\n @if (thumbnail && !isLoadingThumbnail) {\n <div class=\"sdc-thumbnail-image\" [style.background-image]=\"'url(' + thumbnail + ')'\"></div>\n }\n </div>\n\n <div class=\"sdc-popover-content\">\n <div class=\"sdc-popover-grid\">\n <div class=\"sdc-popover-col-left\">\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Section:</span>\n {{ formattedSection }}\n </h5>\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Row:</span>\n {{ data.row }}\n </h5>\n </div>\n <div class=\"sdc-popover-col-right\">\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Seat:</span>\n {{ formattedSeat }}\n </h5>\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Price:</span>\n {{ data.price | currency: 'USD' }}\n </h5>\n </div>\n </div>\n </div>\n</div>\n", styles: [":host{display:block}.sdc-seat-popover{width:var(--sdc-popover-width, 20rem);height:auto;color:var(--sdc-popover-text-color, #ffffff);background-color:var(--sdc-popover-bg-color, #000000);border-radius:var(--sdc-popover-border-radius, .75rem);overflow:hidden}.sdc-popover-thumbnail{width:100%;height:var(--sdc-popover-thumbnail-height, 12rem);position:relative}.sdc-thumbnail-image{width:100%;height:100%;background-position:center;background-size:cover;background-repeat:no-repeat}.sdc-popover-loader{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.sdc-spinner{display:inline-block;width:80px;height:80px}.sdc-spinner:after{content:\" \";display:block;width:32px;height:32px;margin:16px 8px 8px 16px;border-radius:50%;border:3px solid var(--sdc-spinner-color, #fff);border-color:var(--sdc-spinner-color, #fff) transparent var(--sdc-spinner-color, #fff) transparent;animation:sdc-spinner-rotate 1.2s linear infinite}@keyframes sdc-spinner-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.sdc-popover-content{padding:.75rem}.sdc-popover-grid{display:flex;gap:1.25rem}.sdc-popover-col-left{flex:1}.sdc-popover-col-right{flex:1;text-align:right;min-width:max-content}.sdc-popover-label{margin:.25rem 0;font-size:var(--sdc-popover-label-font-size, .875rem);line-height:1.25rem;font-weight:var(--sdc-popover-label-font-weight, 700)}.sdc-popover-label-text{font-weight:var(--sdc-popover-label-text-font-weight, 400)}\n"] }]
620
+ }], propDecorators: { data: [{
621
+ type: Input
622
+ }], showLoader: [{
623
+ type: Input
624
+ }] } });
625
+
626
+ class SectionPopoverComponent extends BasePopoverComponent {
627
+ data;
628
+ showLoader = true;
629
+ showBestAvailable = false;
630
+ showOpenSeatMap = true;
631
+ excludeSeatMapSections = ['S_BLCHADA', 'S_Bleacher'];
632
+ isTicketFeeEnabled = false;
633
+ load3dView = new EventEmitter();
634
+ selectForBA = new EventEmitter();
635
+ openSeatMap = new EventEmitter();
636
+ thumbnailProvider = inject(THUMBNAIL_PROVIDER, { optional: true });
637
+ cdr = inject(ChangeDetectorRef);
638
+ thumbnail;
639
+ isLoadingThumbnail = true;
640
+ ngOnInit() {
641
+ super.ngOnInit(); // Initialize base component timer logic
642
+ if (this.data.thumbnail) {
643
+ this.thumbnail = this.data.thumbnail;
644
+ this.isLoadingThumbnail = false;
645
+ }
646
+ else if (this.thumbnailProvider && this.showLoader) {
647
+ this.loadThumbnail();
648
+ }
649
+ }
650
+ loadThumbnail() {
651
+ this.thumbnailProvider.getThumbnail(this.data.id).subscribe({
652
+ next: url => {
653
+ this.thumbnail = url;
654
+ this.isLoadingThumbnail = false;
655
+ this.cdr.markForCheck();
656
+ },
657
+ error: () => {
658
+ this.isLoadingThumbnail = false;
659
+ this.cdr.markForCheck();
660
+ },
661
+ });
662
+ }
663
+ get priceRangeDisplay() {
664
+ const { min, max } = this.data.priceRange;
665
+ return min === max ? min.toString() : `${min} - ${max}`;
666
+ }
667
+ get priceRangeWithFees() {
668
+ if (this.isTicketFeeEnabled && this.data.priceRangeWithFees) {
669
+ return this.data.priceRangeWithFees;
670
+ }
671
+ return undefined;
672
+ }
673
+ get shouldShowSeatMapButton() {
674
+ return (this.showOpenSeatMap &&
675
+ !this.excludeSeatMapSections.includes(this.data.section) &&
676
+ this.data.type !== 'general_admission');
677
+ }
678
+ onEnter(event) {
679
+ this.onMouseEnter(event);
680
+ }
681
+ onLeave(event) {
682
+ this.onMouseLeave(event);
683
+ }
684
+ onLoad3dView() {
685
+ this.load3dView.emit();
686
+ }
687
+ onSelectForBA() {
688
+ this.selectForBA.emit(!this.data.isSelectedForBA);
689
+ }
690
+ onOpenSeatMap() {
691
+ this.openSeatMap.emit();
692
+ }
693
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: SectionPopoverComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
694
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: SectionPopoverComponent, isStandalone: true, selector: "sdc-section-popover", inputs: { data: "data", showLoader: "showLoader", showBestAvailable: "showBestAvailable", showOpenSeatMap: "showOpenSeatMap", excludeSeatMapSections: "excludeSeatMapSections", isTicketFeeEnabled: "isTicketFeeEnabled" }, outputs: { load3dView: "load3dView", selectForBA: "selectForBA", openSeatMap: "openSeatMap" }, usesInheritance: true, ngImport: i0, template: "<div (mouseenter)=\"onEnter($event)\" (mouseleave)=\"onLeave($event)\" class=\"sdc-section-popover\">\n <div class=\"sdc-popover-thumbnail\">\n @if (isLoadingThumbnail && showLoader) {\n <div class=\"sdc-popover-loader\">\n <div class=\"sdc-spinner\"></div>\n </div>\n }\n @if (thumbnail && !isLoadingThumbnail) {\n <div\n class=\"sdc-thumbnail-image sdc-thumbnail-clickable\"\n [style.background-image]=\"'url(' + thumbnail + ')'\"\n (click)=\"onLoad3dView()\">\n <span class=\"sdc-thumbnail-overlay-text\">Click to open view</span>\n </div>\n }\n </div>\n\n <div class=\"sdc-popover-content\">\n <div class=\"sdc-popover-grid\">\n <div class=\"sdc-popover-col-left\">\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Section:</span>\n {{ data.section }}\n </h5>\n @if (isTicketFeeEnabled && priceRangeWithFees) {\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Price:</span> $ {{ priceRangeWithFees }}\n </h5>\n } @else {\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Price:</span> $ {{ priceRangeDisplay }}\n </h5>\n }\n </div>\n <div class=\"sdc-popover-col-right\">\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Available Seats:</span>\n {{ data.availableQuantity }}\n </h5>\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Available ADA Seats:</span>\n {{ data.adaQuantity }}\n </h5>\n </div>\n </div>\n\n <div class=\"sdc-popover-actions\">\n @if (showBestAvailable) {\n <button class=\"sdc-popover-btn sdc-popover-btn-primary sdc-popover-btn-mobile-only\" (click)=\"onSelectForBA()\">\n {{ data.isSelectedForBA ? 'Deselect' : 'Select' }}\n </button>\n }\n @if (shouldShowSeatMapButton) {\n <button class=\"sdc-popover-btn sdc-popover-btn-secondary\" (click)=\"onOpenSeatMap()\">Open Seat Map</button>\n }\n </div>\n </div>\n</div>\n", styles: [":host{display:block}.sdc-section-popover{width:var(--sdc-popover-width, 20rem);height:auto;color:var(--sdc-popover-text-color, #ffffff);background-color:var(--sdc-popover-bg-color, #000000);border-radius:var(--sdc-popover-border-radius, .75rem);overflow:hidden}.sdc-popover-thumbnail{width:100%;height:var(--sdc-popover-thumbnail-height, 12rem);position:relative}.sdc-thumbnail-image{width:100%;height:100%;background-position:center;background-size:cover;background-repeat:no-repeat}.sdc-thumbnail-clickable{cursor:pointer;display:flex;align-items:flex-end;justify-content:center;padding:8px}.sdc-thumbnail-overlay-text{font-size:var(--sdc-thumbnail-overlay-font-size, 12px);color:var(--sdc-thumbnail-overlay-color, #ffffff);background-color:var(--sdc-thumbnail-overlay-bg, rgba(0, 0, 0, .5));padding:4px 8px;border-radius:4px}.sdc-popover-loader{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.sdc-spinner{display:inline-block;width:80px;height:80px}.sdc-spinner:after{content:\" \";display:block;width:32px;height:32px;margin:16px 8px 8px 24px;border-radius:50%;border:3px solid var(--sdc-spinner-color, #fff);border-color:var(--sdc-spinner-color, #fff) transparent var(--sdc-spinner-color, #fff) transparent;animation:sdc-spinner-rotate 1.2s linear infinite}@keyframes sdc-spinner-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.sdc-popover-content{padding:.75rem}.sdc-popover-grid{display:flex;gap:1.25rem}.sdc-popover-col-left{flex:1}.sdc-popover-col-right{flex:1;text-align:right;min-width:max-content}.sdc-popover-label{margin:.25rem 0;font-size:var(--sdc-popover-label-font-size, .875rem);line-height:1.25rem;font-weight:var(--sdc-popover-label-font-weight, 700)}.sdc-popover-label-text{font-weight:var(--sdc-popover-label-text-font-weight, 400)}.sdc-popover-actions{padding:.5rem 0;display:flex;justify-content:center;gap:.5rem}.sdc-popover-btn{border:none;border-radius:var(--sdc-btn-border-radius, 4px);padding:.5rem 1rem;height:var(--sdc-btn-height, 2.25rem);font-size:var(--sdc-btn-font-size, .75rem);cursor:pointer;transition:transform .15s cubic-bezier(.4,0,.2,1)}.sdc-popover-btn:hover:not(:disabled){transform:scale(.95)}.sdc-popover-btn:disabled{opacity:.3;cursor:not-allowed}.sdc-popover-btn-primary{background-color:var(--sdc-btn-primary-bg, #007bff);color:var(--sdc-btn-primary-color, white);margin-right:.5rem}.sdc-popover-btn-secondary{background-color:var(--sdc-btn-secondary-bg, white);color:var(--sdc-btn-secondary-color, #007bff);border:1px solid var(--sdc-btn-secondary-border, #007bff)}.sdc-popover-btn-secondary:hover:not(:disabled){color:var(--sdc-btn-secondary-hover-color, #0056b3)}.sdc-popover-btn-mobile-only{display:block}@media(min-width:768px){.sdc-popover-btn-mobile-only{display:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
695
+ }
696
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: SectionPopoverComponent, decorators: [{
697
+ type: Component,
698
+ args: [{ selector: 'sdc-section-popover', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], template: "<div (mouseenter)=\"onEnter($event)\" (mouseleave)=\"onLeave($event)\" class=\"sdc-section-popover\">\n <div class=\"sdc-popover-thumbnail\">\n @if (isLoadingThumbnail && showLoader) {\n <div class=\"sdc-popover-loader\">\n <div class=\"sdc-spinner\"></div>\n </div>\n }\n @if (thumbnail && !isLoadingThumbnail) {\n <div\n class=\"sdc-thumbnail-image sdc-thumbnail-clickable\"\n [style.background-image]=\"'url(' + thumbnail + ')'\"\n (click)=\"onLoad3dView()\">\n <span class=\"sdc-thumbnail-overlay-text\">Click to open view</span>\n </div>\n }\n </div>\n\n <div class=\"sdc-popover-content\">\n <div class=\"sdc-popover-grid\">\n <div class=\"sdc-popover-col-left\">\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Section:</span>\n {{ data.section }}\n </h5>\n @if (isTicketFeeEnabled && priceRangeWithFees) {\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Price:</span> $ {{ priceRangeWithFees }}\n </h5>\n } @else {\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Price:</span> $ {{ priceRangeDisplay }}\n </h5>\n }\n </div>\n <div class=\"sdc-popover-col-right\">\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Available Seats:</span>\n {{ data.availableQuantity }}\n </h5>\n <h5 class=\"sdc-popover-label\">\n <span class=\"sdc-popover-label-text\">Available ADA Seats:</span>\n {{ data.adaQuantity }}\n </h5>\n </div>\n </div>\n\n <div class=\"sdc-popover-actions\">\n @if (showBestAvailable) {\n <button class=\"sdc-popover-btn sdc-popover-btn-primary sdc-popover-btn-mobile-only\" (click)=\"onSelectForBA()\">\n {{ data.isSelectedForBA ? 'Deselect' : 'Select' }}\n </button>\n }\n @if (shouldShowSeatMapButton) {\n <button class=\"sdc-popover-btn sdc-popover-btn-secondary\" (click)=\"onOpenSeatMap()\">Open Seat Map</button>\n }\n </div>\n </div>\n</div>\n", styles: [":host{display:block}.sdc-section-popover{width:var(--sdc-popover-width, 20rem);height:auto;color:var(--sdc-popover-text-color, #ffffff);background-color:var(--sdc-popover-bg-color, #000000);border-radius:var(--sdc-popover-border-radius, .75rem);overflow:hidden}.sdc-popover-thumbnail{width:100%;height:var(--sdc-popover-thumbnail-height, 12rem);position:relative}.sdc-thumbnail-image{width:100%;height:100%;background-position:center;background-size:cover;background-repeat:no-repeat}.sdc-thumbnail-clickable{cursor:pointer;display:flex;align-items:flex-end;justify-content:center;padding:8px}.sdc-thumbnail-overlay-text{font-size:var(--sdc-thumbnail-overlay-font-size, 12px);color:var(--sdc-thumbnail-overlay-color, #ffffff);background-color:var(--sdc-thumbnail-overlay-bg, rgba(0, 0, 0, .5));padding:4px 8px;border-radius:4px}.sdc-popover-loader{width:100%;height:100%;display:flex;justify-content:center;align-items:center}.sdc-spinner{display:inline-block;width:80px;height:80px}.sdc-spinner:after{content:\" \";display:block;width:32px;height:32px;margin:16px 8px 8px 24px;border-radius:50%;border:3px solid var(--sdc-spinner-color, #fff);border-color:var(--sdc-spinner-color, #fff) transparent var(--sdc-spinner-color, #fff) transparent;animation:sdc-spinner-rotate 1.2s linear infinite}@keyframes sdc-spinner-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.sdc-popover-content{padding:.75rem}.sdc-popover-grid{display:flex;gap:1.25rem}.sdc-popover-col-left{flex:1}.sdc-popover-col-right{flex:1;text-align:right;min-width:max-content}.sdc-popover-label{margin:.25rem 0;font-size:var(--sdc-popover-label-font-size, .875rem);line-height:1.25rem;font-weight:var(--sdc-popover-label-font-weight, 700)}.sdc-popover-label-text{font-weight:var(--sdc-popover-label-text-font-weight, 400)}.sdc-popover-actions{padding:.5rem 0;display:flex;justify-content:center;gap:.5rem}.sdc-popover-btn{border:none;border-radius:var(--sdc-btn-border-radius, 4px);padding:.5rem 1rem;height:var(--sdc-btn-height, 2.25rem);font-size:var(--sdc-btn-font-size, .75rem);cursor:pointer;transition:transform .15s cubic-bezier(.4,0,.2,1)}.sdc-popover-btn:hover:not(:disabled){transform:scale(.95)}.sdc-popover-btn:disabled{opacity:.3;cursor:not-allowed}.sdc-popover-btn-primary{background-color:var(--sdc-btn-primary-bg, #007bff);color:var(--sdc-btn-primary-color, white);margin-right:.5rem}.sdc-popover-btn-secondary{background-color:var(--sdc-btn-secondary-bg, white);color:var(--sdc-btn-secondary-color, #007bff);border:1px solid var(--sdc-btn-secondary-border, #007bff)}.sdc-popover-btn-secondary:hover:not(:disabled){color:var(--sdc-btn-secondary-hover-color, #0056b3)}.sdc-popover-btn-mobile-only{display:block}@media(min-width:768px){.sdc-popover-btn-mobile-only{display:none}}\n"] }]
699
+ }], propDecorators: { data: [{
700
+ type: Input
701
+ }], showLoader: [{
702
+ type: Input
703
+ }], showBestAvailable: [{
704
+ type: Input
705
+ }], showOpenSeatMap: [{
706
+ type: Input
707
+ }], excludeSeatMapSections: [{
708
+ type: Input
709
+ }], isTicketFeeEnabled: [{
710
+ type: Input
711
+ }], load3dView: [{
712
+ type: Output
713
+ }], selectForBA: [{
714
+ type: Output
715
+ }], openSeatMap: [{
716
+ type: Output
717
+ }] } });
718
+
719
+ var AppNodes;
720
+ (function (AppNodes) {
721
+ AppNodes["Section"] = "section";
722
+ AppNodes["Row"] = "row";
723
+ AppNodes["Seat"] = "seat";
724
+ AppNodes["Ga"] = "general_admission";
725
+ AppNodes["Vip"] = "vip";
726
+ })(AppNodes || (AppNodes = {}));
727
+
728
+ class PopoverComponent {
729
+ // INPUTS
730
+ /**
731
+ * The node to attach the popover to.
732
+ */
733
+ node;
734
+ /**
735
+ * The current theme applied to the component.
736
+ */
737
+ theme = input('theme-sdc', ...(ngDevMode ? [{ debugName: "theme" }] : []));
738
+ // OUTPUTS
739
+ /**
740
+ * Emitted when the 3D view should be loaded.
741
+ */
742
+ load3dView = output();
743
+ /**
744
+ * Emitted when a section should be selected/deselected for best available.
745
+ */
746
+ selectSectionForBA = output();
747
+ /**
748
+ * Emitted when the seat map should be opened.
749
+ */
750
+ openSeatMap = output();
751
+ // SERVICES
752
+ dvm = inject(DVM_SERVICE);
753
+ cdr = inject(ChangeDetectorRef);
754
+ format = inject(DVM_FORMATTER);
755
+ configurationService = inject(CONFIGURATION_SERVICE);
756
+ popoverService = inject(PopoverService);
757
+ // COMPONENT STATE
758
+ Nodes = AppNodes;
759
+ thumbnail;
760
+ section;
761
+ row;
762
+ seat;
763
+ prices;
764
+ // Section popover specific properties
765
+ availableQuantity = 0;
766
+ adaQuantity = 0;
767
+ includedSectionForBA = false;
768
+ // Transformed data for new components
769
+ get seatData() {
770
+ if (this.node?.type === AppNodes.Seat) {
771
+ return this.transformToSeatData();
772
+ }
773
+ return null;
774
+ }
775
+ get sectionData() {
776
+ if (this.node?.type === AppNodes.Section || this.node?.type === AppNodes.Ga) {
777
+ return this.transformToSectionData();
778
+ }
779
+ return null;
780
+ }
781
+ // LC METHODS
782
+ ngOnInit() {
783
+ this.initComponent();
784
+ }
785
+ onEnter(_) {
786
+ this.popoverService.clearTimer();
787
+ }
788
+ onLeave(_) {
789
+ this.popoverService.setTimer();
790
+ }
791
+ // GETTERS
792
+ get price() {
793
+ return this.prices // Existen precios?
794
+ ? this.prices.length > 1 // Existen precios, pero más de uno?
795
+ ? Math.min(...this.prices.map(price => Number.parseInt(price))).toString()
796
+ : this.prices[0] // Si lo hay, sacamos el minimo, si no seteamos el primero ( y unico xd )
797
+ : undefined; // No existen precios
798
+ }
799
+ get priceRange() {
800
+ if (!this.prices || this.prices.length === 0) {
801
+ return '';
802
+ }
803
+ let priceRange = this.prices[0];
804
+ if (this.prices.length > 1 && this.prices[0] !== this.prices[1]) {
805
+ priceRange = `${this.prices[0]} - ${this.prices[1]}`;
806
+ }
807
+ return priceRange;
808
+ }
809
+ // METHODS
810
+ initComponent() {
811
+ this.setTexts();
812
+ this.getThumbnail();
813
+ // this.getPrice();
814
+ }
815
+ setTexts() {
816
+ const nodeId = this.format.transform(this.node?.id).split(' ');
817
+ // const translated = this.translationData()[this.node().id.split('-')[0]];
818
+ this.section = nodeId[0];
819
+ this.row = nodeId[1] ?? null;
820
+ this.seat = nodeId[2] ?? null;
821
+ }
822
+ getThumbnail() {
823
+ const viewer3dService = this.dvm.viewer3dService;
824
+ const options = {
825
+ // eslint-disable-next-line camelcase
826
+ venue_id: this.configurationService.configuration.dvmData.venueId,
827
+ // eslint-disable-next-line camelcase
828
+ view_id: this.node?.id,
829
+ };
830
+ if (!viewer3dService?.isInitialized()) {
831
+ return;
832
+ }
833
+ viewer3dService.getThumbnail(options, true).subscribe((thumbnailUrl) => {
834
+ this.thumbnail = thumbnailUrl;
835
+ this.cdr.markForCheck();
836
+ });
837
+ }
838
+ // Section popover methods
839
+ onLoad3dView() {
840
+ this.load3dView.emit({
841
+ node: this.node,
842
+ section: this.section,
843
+ });
844
+ }
845
+ onSelectSectionForBA(selected) {
846
+ this.includedSectionForBA = selected;
847
+ this.selectSectionForBA.emit({
848
+ node: this.node,
849
+ section: this.section,
850
+ selected: this.includedSectionForBA,
851
+ });
852
+ }
853
+ onOpenSeatMap() {
854
+ this.openSeatMap.emit({
855
+ node: this.node,
856
+ section: this.section,
857
+ });
858
+ }
859
+ // Data transformation methods
860
+ transformToSeatData() {
861
+ const nodeId = this.format.transform(this.node?.id).split(' ');
862
+ const section = nodeId[0];
863
+ const row = nodeId[1] ?? '';
864
+ const seat = nodeId[2] ?? '';
865
+ return {
866
+ id: this.node.id,
867
+ section: section,
868
+ row: row,
869
+ seat: seat,
870
+ price: this.price ? Number.parseFloat(this.price) : 0,
871
+ thumbnail: this.thumbnail,
872
+ };
873
+ }
874
+ transformToSectionData() {
875
+ const nodeId = this.format.transform(this.node?.id).split(' ');
876
+ const section = nodeId[0];
877
+ // Parse price range from existing prices array
878
+ let priceRange = { min: 0, max: 0 };
879
+ if (this.prices && this.prices.length > 0) {
880
+ const minPrice = Number.parseFloat(this.prices[0]);
881
+ const maxPrice = this.prices.length > 1 ? Number.parseFloat(this.prices[1]) : minPrice;
882
+ priceRange = { min: minPrice, max: maxPrice };
883
+ }
884
+ return {
885
+ id: this.node.id,
886
+ section: section,
887
+ priceRange: priceRange,
888
+ availableQuantity: this.availableQuantity,
889
+ adaQuantity: this.adaQuantity,
890
+ thumbnail: this.thumbnail,
891
+ type: this.node.type === AppNodes.Ga ? 'general_admission' : 'section',
892
+ isSelectedForBA: this.includedSectionForBA,
893
+ };
894
+ }
895
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: PopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
896
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: PopoverComponent, isStandalone: true, selector: "sdc-map-popover", inputs: { node: { classPropertyName: "node", publicName: "node", isSignal: false, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { load3dView: "load3dView", selectSectionForBA: "selectSectionForBA", openSeatMap: "openSeatMap" }, ngImport: i0, template: "<!-- SECTION POPOVER -->\n@if (sectionData) {\n <sdc-section-popover\n [data]=\"sectionData\"\n id=\"pano-view\"\n [popoverId]=\"'popover-' + node.id\"\n [showBestAvailable]=\"true\"\n [showOpenSeatMap]=\"true\"\n [excludeSeatMapSections]=\"['S_BLCHADA', 'S_Bleacher']\"\n (mouseEnter)=\"onEnter($event)\"\n (mouseLeave)=\"onLeave($event)\"\n (load3dView)=\"onLoad3dView()\"\n (selectForBA)=\"onSelectSectionForBA($event)\"\n (openSeatMap)=\"onOpenSeatMap()\">\n </sdc-section-popover>\n}\n\n<!-- SEAT POPOVER -->\n@if (seatData) {\n <sdc-seat-popover\n id=\"pano-view\"\n [data]=\"seatData\"\n [popoverId]=\"'popover-' + node.id\"\n (mouseEnter)=\"onEnter($event)\"\n (mouseLeave)=\"onLeave($event)\">\n </sdc-seat-popover>\n}\n", styles: [".lds-dual-ring{display:inline-block;width:80px;height:80px}.lds-dual-ring:after{content:\" \";display:block;width:32px;height:32px;margin:16px 8px 8px 16px;border-radius:50%;border:3px solid #fff;border-color:#fff transparent #fff transparent;animation:lds-dual-ring 1.2s linear infinite}@keyframes lds-dual-ring{0%{transform:rotate(0)}to{transform:rotate(360deg)}}h5{margin:.25rem 0;font-size:.875rem;line-height:1.25rem}.font-normal{font-weight:400}.w-80{width:20rem}.h-48{height:12rem}.h-auto{height:auto}.text-white{color:#fff}.bg-black{background-color:#000}.rounded-xl{border-radius:.75rem}.overflow-hidden{overflow:hidden}.w-full{width:100%}.h-full{height:100%}.bg-center{background-position:center}.bg-cover{background-size:cover}.bg-no-repeat{background-repeat:no-repeat}.flex{display:flex}.justify-center{justify-content:center}.items-center{align-items:center}.px-3{padding-left:.75rem;padding-right:.75rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.w-1\\/2{width:50%}.mr-5{margin-right:1.25rem}.min-w-max{min-width:max-content}.text-right{text-align:right}.viewer3d-image{cursor:pointer;display:flex;align-items:flex-end;justify-content:center;padding:8px;font-size:12px}.btn-main{background-color:#007bff;color:#fff;border:none;border-radius:4px;padding:.5rem 1rem;cursor:pointer}.btn-white{background-color:#fff;color:#007bff;border:1px solid #007bff;border-radius:4px;padding:.5rem 1rem;cursor:pointer}.btn-white:hover{color:#0056b3}.tooltip-img{background-position:center;background-size:cover;background-repeat:no-repeat}.block{display:block}.md\\\\:hidden{display:none}@media(min-width:768px){.md\\\\:hidden{display:none}}.text-main{color:#007bff}.text-main-accent{color:#0056b3}.mr-2{margin-right:.5rem}.h-9{height:2.25rem}.text-xs{font-size:.75rem;line-height:1rem}.disabled\\\\:opacity-30:disabled{opacity:.3}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover\\\\:scale-95:hover{transform:scale(.95)}.disabled\\\\:hover\\\\:transform-none:disabled:hover{transform:none}.hover\\\\:text-main-accent:hover{color:#0056b3}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: SeatPopoverComponent, selector: "sdc-seat-popover", inputs: ["data", "showLoader"] }, { kind: "component", type: SectionPopoverComponent, selector: "sdc-section-popover", inputs: ["data", "showLoader", "showBestAvailable", "showOpenSeatMap", "excludeSeatMapSections", "isTicketFeeEnabled"], outputs: ["load3dView", "selectForBA", "openSeatMap"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
897
+ }
898
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: PopoverComponent, decorators: [{
899
+ type: Component,
900
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'sdc-map-popover', standalone: true, imports: [CommonModule, SeatPopoverComponent, SectionPopoverComponent], template: "<!-- SECTION POPOVER -->\n@if (sectionData) {\n <sdc-section-popover\n [data]=\"sectionData\"\n id=\"pano-view\"\n [popoverId]=\"'popover-' + node.id\"\n [showBestAvailable]=\"true\"\n [showOpenSeatMap]=\"true\"\n [excludeSeatMapSections]=\"['S_BLCHADA', 'S_Bleacher']\"\n (mouseEnter)=\"onEnter($event)\"\n (mouseLeave)=\"onLeave($event)\"\n (load3dView)=\"onLoad3dView()\"\n (selectForBA)=\"onSelectSectionForBA($event)\"\n (openSeatMap)=\"onOpenSeatMap()\">\n </sdc-section-popover>\n}\n\n<!-- SEAT POPOVER -->\n@if (seatData) {\n <sdc-seat-popover\n id=\"pano-view\"\n [data]=\"seatData\"\n [popoverId]=\"'popover-' + node.id\"\n (mouseEnter)=\"onEnter($event)\"\n (mouseLeave)=\"onLeave($event)\">\n </sdc-seat-popover>\n}\n", styles: [".lds-dual-ring{display:inline-block;width:80px;height:80px}.lds-dual-ring:after{content:\" \";display:block;width:32px;height:32px;margin:16px 8px 8px 16px;border-radius:50%;border:3px solid #fff;border-color:#fff transparent #fff transparent;animation:lds-dual-ring 1.2s linear infinite}@keyframes lds-dual-ring{0%{transform:rotate(0)}to{transform:rotate(360deg)}}h5{margin:.25rem 0;font-size:.875rem;line-height:1.25rem}.font-normal{font-weight:400}.w-80{width:20rem}.h-48{height:12rem}.h-auto{height:auto}.text-white{color:#fff}.bg-black{background-color:#000}.rounded-xl{border-radius:.75rem}.overflow-hidden{overflow:hidden}.w-full{width:100%}.h-full{height:100%}.bg-center{background-position:center}.bg-cover{background-size:cover}.bg-no-repeat{background-repeat:no-repeat}.flex{display:flex}.justify-center{justify-content:center}.items-center{align-items:center}.px-3{padding-left:.75rem;padding-right:.75rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.w-1\\/2{width:50%}.mr-5{margin-right:1.25rem}.min-w-max{min-width:max-content}.text-right{text-align:right}.viewer3d-image{cursor:pointer;display:flex;align-items:flex-end;justify-content:center;padding:8px;font-size:12px}.btn-main{background-color:#007bff;color:#fff;border:none;border-radius:4px;padding:.5rem 1rem;cursor:pointer}.btn-white{background-color:#fff;color:#007bff;border:1px solid #007bff;border-radius:4px;padding:.5rem 1rem;cursor:pointer}.btn-white:hover{color:#0056b3}.tooltip-img{background-position:center;background-size:cover;background-repeat:no-repeat}.block{display:block}.md\\\\:hidden{display:none}@media(min-width:768px){.md\\\\:hidden{display:none}}.text-main{color:#007bff}.text-main-accent{color:#0056b3}.mr-2{margin-right:.5rem}.h-9{height:2.25rem}.text-xs{font-size:.75rem;line-height:1rem}.disabled\\\\:opacity-30:disabled{opacity:.3}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.hover\\\\:scale-95:hover{transform:scale(.95)}.disabled\\\\:hover\\\\:transform-none:disabled:hover{transform:none}.hover\\\\:text-main-accent:hover{color:#0056b3}\n"] }]
901
+ }], propDecorators: { node: [{
902
+ type: Input
903
+ }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], load3dView: [{ type: i0.Output, args: ["load3dView"] }], selectSectionForBA: [{ type: i0.Output, args: ["selectSectionForBA"] }], openSeatMap: [{ type: i0.Output, args: ["openSeatMap"] }] } });
904
+
905
+ /**
906
+ * Generic popover manager service that handles popover lifecycle and positioning.
907
+ * This service is DVM-agnostic and delegates positioning logic to IPopoverPositioner.
908
+ */
909
+ class PopoverManagerService {
910
+ currentPopoverId = '';
911
+ tooltip;
912
+ positioner;
913
+ constructor(positioner) {
914
+ this.positioner = positioner;
915
+ }
916
+ /**
917
+ * Shows a popover with the specified configuration.
918
+ * @param config - Configuration for the popover including component, data, and positioning
919
+ */
920
+ showPopover(config) {
921
+ config.container.clear();
922
+ this.currentPopoverId = config.nodeId;
923
+ this.tooltip = config.tooltip;
924
+ const componentRef = config.container.createComponent(config.component);
925
+ if (config.componentInputs) {
926
+ Object.entries(config.componentInputs).forEach(([key, value]) => {
927
+ componentRef.instance[key] = value;
928
+ });
929
+ }
930
+ if (config.eventHandlers) {
931
+ Object.entries(config.eventHandlers).forEach(([key, handler]) => {
932
+ const instance = componentRef.instance;
933
+ if (instance[key] && typeof instance[key].subscribe === 'function') {
934
+ instance[key].subscribe(handler);
935
+ }
936
+ });
937
+ }
938
+ const placement = this.positioner.calculatePlacement(config.node, config.containerElement);
939
+ const offset = this.positioner.calculateOffset(config.node);
940
+ createPopper(config.node, this.tooltip, {
941
+ placement,
942
+ modifiers: [
943
+ {
944
+ name: 'offset',
945
+ options: {
946
+ offset,
947
+ },
948
+ },
949
+ {
950
+ name: 'flip',
951
+ options: {
952
+ fallbackPlacements: [],
953
+ },
954
+ },
955
+ ],
956
+ });
957
+ this.tooltip.setAttribute('data-show', '');
958
+ }
959
+ /**
960
+ * Hides the popover for the specified node ID.
961
+ * @param nodeId - The node ID of the popover to hide
962
+ */
963
+ hidePopover(nodeId) {
964
+ if (this.currentPopoverId === nodeId) {
965
+ this.tooltip?.removeAttribute('data-show');
966
+ }
967
+ }
968
+ /**
969
+ * Clears all popovers.
970
+ */
971
+ clearAll() {
972
+ this.tooltip?.removeAttribute('data-show');
973
+ this.currentPopoverId = '';
974
+ }
975
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: PopoverManagerService, deps: [{ token: POPOVER_POSITIONER }], target: i0.ɵɵFactoryTarget.Injectable });
976
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: PopoverManagerService });
977
+ }
978
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: PopoverManagerService, decorators: [{
979
+ type: Injectable
980
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
981
+ type: Inject,
982
+ args: [POPOVER_POSITIONER]
983
+ }] }] });
984
+
985
+ /**
986
+ * DVM-specific positioning service for popovers.
987
+ * Handles calculation of popover placement and offset based on DVM node properties.
988
+ */
989
+ class DvmPopoverPositionerService {
990
+ dvmService;
991
+ configService;
992
+ constructor(dvmService, configService) {
993
+ this.dvmService = dvmService;
994
+ this.configService = configService;
995
+ }
996
+ /**
997
+ * Calculates the optimal placement for a popover based on node position.
998
+ * @param node - The MapViewerNode to position relative to
999
+ * @param container - The container element for positioning reference
1000
+ * @returns The calculated placement ('top' or 'bottom')
1001
+ */
1002
+ calculatePlacement(node, container) {
1003
+ if (!node.aabb) {
1004
+ throw new Error('Node AABB is not defined');
1005
+ }
1006
+ const nodeSceneCenter = [
1007
+ node.aabb[0] + node.aabb[2] / 2,
1008
+ node.aabb[1] + node.aabb[3] / 2,
1009
+ ];
1010
+ const nodeDomCenter = this.dvmService.viewerService.fromSceneToDom(nodeSceneCenter);
1011
+ if (nodeDomCenter[1] > container.offsetHeight / 2) {
1012
+ return 'top';
1013
+ }
1014
+ else {
1015
+ return 'bottom';
1016
+ }
1017
+ }
1018
+ /**
1019
+ * Calculates the offset for popover positioning based on node type and configuration.
1020
+ * @param node - The MapViewerNode to calculate offset for
1021
+ * @returns An array of [x, y] offset values
1022
+ */
1023
+ calculateOffset(node) {
1024
+ if (node.type === 'seat') {
1025
+ return [0, 6];
1026
+ }
1027
+ if (node.type === 'section' || node.type === 'general_admission') {
1028
+ const dvmData = this.configService.configuration.dvmData;
1029
+ const sectionOffsets = dvmData?.sectionOffsets || {};
1030
+ const nodeId = node.id;
1031
+ const nodeOriginalId = node.original_id;
1032
+ const dvmOffset = sectionOffsets[nodeId] ?? sectionOffsets[nodeOriginalId];
1033
+ return dvmOffset ?? [0, 0];
1034
+ }
1035
+ return [0, 0];
1036
+ }
1037
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: DvmPopoverPositionerService, deps: [{ token: DVM_SERVICE }, { token: CONFIGURATION_SERVICE }], target: i0.ɵɵFactoryTarget.Injectable });
1038
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: DvmPopoverPositionerService });
1039
+ }
1040
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: DvmPopoverPositionerService, decorators: [{
1041
+ type: Injectable
1042
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
1043
+ type: Inject,
1044
+ args: [DVM_SERVICE]
1045
+ }] }, { type: undefined, decorators: [{
1046
+ type: Inject,
1047
+ args: [CONFIGURATION_SERVICE]
1048
+ }] }] });
1049
+
1050
+ /**
1051
+ * Abstract base class for transforming data from source format to target popover format.
1052
+ * Apps can extend this class to implement their own data transformation logic.
1053
+ */
1054
+ class BasePopoverDataTransformer {
1055
+ }
1056
+ /**
1057
+ * Abstract base class for transforming seat data to SeatPopoverData format.
1058
+ * Apps should extend this class and implement the transform method with their
1059
+ * specific seat data models.
1060
+ */
1061
+ class BaseSeatDataTransformer extends BasePopoverDataTransformer {
1062
+ }
1063
+ /**
1064
+ * Abstract base class for transforming section data to SectionPopoverData format.
1065
+ * Apps should extend this class and implement the transform method with their
1066
+ * specific section data models.
1067
+ */
1068
+ class BaseSectionDataTransformer extends BasePopoverDataTransformer {
1069
+ }
1070
+
1071
+ /*
1072
+ * Public API Surface of software-division-components
1073
+ */
1074
+
1075
+ /**
1076
+ * Generated bundle index. Do not edit.
1077
+ */
1078
+
1079
+ export { BasePopoverComponent, BasePopoverDataTransformer, BaseSeatDataTransformer, BaseSectionDataTransformer, CONFIGURATION_SERVICE, DVM_FORMATTER, DVM_SERVICE, DvmPopoverPositionerService, POPOVER_MANAGER, POPOVER_POSITIONER, PopoverComponent, PopoverManagerService, PopoverService, SeatPopoverComponent, SectionPopoverComponent, THUMBNAIL_PROVIDER };
1080
+ //# sourceMappingURL=3ddv-software-division-components-dvm-popover.mjs.map