@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.
- package/.postcssrc.json +5 -0
- package/.storybook/main.ts +78 -0
- package/.storybook/manager-head.html +1 -0
- package/.storybook/preview.ts +30 -0
- package/.storybook/tsconfig.json +25 -0
- package/.storybook/typings.d.ts +4 -0
- package/CHANGELOG.md +8 -0
- package/LICENSE.md +21 -0
- package/backoffice/checkbox/checkbox.component.css +193 -0
- package/backoffice/checkbox/checkbox.component.html +23 -0
- package/backoffice/checkbox/checkbox.component.ts +252 -0
- package/backoffice/checkbox/index.ts +1 -0
- package/backoffice/checkbox/ng-package.json +1 -0
- package/backoffice/checkbox/public-api.ts +1 -0
- package/backoffice/checkbox/story/checkbox.stories.ts +304 -0
- package/backoffice/datepicker/datepicker.component.css +262 -0
- package/backoffice/datepicker/datepicker.component.html +40 -0
- package/backoffice/datepicker/datepicker.component.ts +366 -0
- package/backoffice/datepicker/index.ts +1 -0
- package/backoffice/datepicker/ng-package.json +1 -0
- package/backoffice/datepicker/{public-api.d.ts → public-api.ts} +1 -1
- package/backoffice/datepicker/story/datepicker.stories.ts +32 -0
- package/backoffice/datepicker/ui/ui-calendar-helm/src/index.ts +14 -0
- package/backoffice/datepicker/ui/ui-calendar-helm/src/lib/hlm-calendar-multi.ts +183 -0
- package/backoffice/datepicker/ui/ui-calendar-helm/src/lib/hlm-calendar.ts +171 -0
- package/backoffice/datepicker/ui/ui-date-picker-helm/src/index.ts +16 -0
- package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker-multi.token.ts +43 -0
- package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker-multi.ts +177 -0
- package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker.token.ts +43 -0
- package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker.ts +167 -0
- package/backoffice/datepicker/ui/ui-icon-helm/src/index.ts +11 -0
- package/backoffice/datepicker/ui/ui-icon-helm/src/lib/hlm-icon.token.ts +20 -0
- package/backoffice/datepicker/ui/ui-icon-helm/src/lib/hlm-icon.ts +35 -0
- package/backoffice/datepicker/ui/ui-popover-helm/src/index.ts +15 -0
- package/backoffice/datepicker/ui/ui-popover-helm/src/lib/hlm-popover-close.ts +19 -0
- package/backoffice/datepicker/ui/ui-popover-helm/src/lib/hlm-popover-content.ts +30 -0
- package/backoffice/index.ts +1 -0
- package/backoffice/input/index.ts +1 -0
- package/backoffice/input/input.component.css +319 -0
- package/backoffice/input/input.component.html +51 -0
- package/backoffice/input/input.component.ts +497 -0
- package/backoffice/input/ng-package.json +1 -0
- package/backoffice/input/public-api.ts +2 -0
- package/backoffice/input/story/input.stories.ts +243 -0
- package/backoffice/radio/index.ts +1 -0
- package/backoffice/radio/ng-package.json +1 -0
- package/backoffice/radio/public-api.ts +1 -0
- package/backoffice/radio/radio.component.css +143 -0
- package/backoffice/radio/radio.component.html +15 -0
- package/backoffice/radio/radio.component.ts +154 -0
- package/backoffice/radio/story/radio.stories.ts +287 -0
- package/backoffice/table/_components/pagination/pagination.component.css +117 -0
- package/backoffice/table/_components/pagination/pagination.component.html +55 -0
- package/backoffice/table/_components/pagination/pagination.component.ts +79 -0
- package/backoffice/table/_components/selection-table-head/selection-table-head.component.css +0 -0
- package/backoffice/table/_components/selection-table-head/selection-table-head.component.html +6 -0
- package/backoffice/table/_components/selection-table-head/selection-table-head.component.ts +36 -0
- package/backoffice/table/_components/selection-table-row/selection-table-row.component.css +0 -0
- package/backoffice/table/_components/selection-table-row/selection-table-row.component.html +5 -0
- package/backoffice/table/_components/selection-table-row/selection-table-row.component.ts +12 -0
- package/backoffice/table/_components/sort-header-button/sort-header-button.component.css +14 -0
- package/backoffice/table/_components/sort-header-button/sort-header-button.component.html +11 -0
- package/backoffice/table/_components/sort-header-button/sort-header-button.component.ts +55 -0
- package/backoffice/table/index.ts +1 -0
- package/backoffice/table/ng-package.json +1 -0
- package/backoffice/table/public-api.ts +6 -0
- package/backoffice/table/story/table.stories.ts +364 -0
- package/backoffice/table/table.component.css +172 -0
- package/backoffice/table/table.component.html +53 -0
- package/backoffice/table/table.component.ts +347 -0
- package/backoffice/table/ui/ui-icon-helm/src/index.ts +11 -0
- package/backoffice/table/ui/ui-icon-helm/src/lib/hlm-icon.token.ts +20 -0
- package/backoffice/table/ui/ui-icon-helm/src/lib/hlm-icon.ts +35 -0
- package/backoffice/table/ui/ui-table-helm/src/index.ts +13 -0
- package/backoffice/table/ui/ui-table-helm/src/lib/hlm-table.ts +220 -0
- package/components.json +3 -0
- package/{README.md → dist/README.md} +11 -7
- package/dist/fesm2022/3ddv-software-division-components-backoffice-checkbox.mjs +208 -0
- package/dist/fesm2022/3ddv-software-division-components-backoffice-checkbox.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-backoffice-datepicker.mjs +1061 -0
- package/dist/fesm2022/3ddv-software-division-components-backoffice-datepicker.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-backoffice-input.mjs +411 -0
- package/dist/fesm2022/3ddv-software-division-components-backoffice-input.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-backoffice-radio.mjs +128 -0
- package/dist/fesm2022/3ddv-software-division-components-backoffice-radio.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-backoffice-table.mjs +658 -0
- package/dist/fesm2022/3ddv-software-division-components-backoffice-table.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-cart-item.mjs +34 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-cart-item.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-cart.mjs +101 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-cart.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-legend.mjs +77 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-legend.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-loader.mjs +34 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-loader.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-map-loader.mjs +161 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-map-loader.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-neighbors.mjs +204 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-neighbors.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-popover.mjs +1080 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-popover.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-stepper.mjs +94 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-stepper.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-ticket-info-item.mjs +34 -0
- package/dist/fesm2022/3ddv-software-division-components-dvm-ticket-info-item.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-generic-add-digital-wallet.mjs +46 -0
- package/dist/fesm2022/3ddv-software-division-components-generic-add-digital-wallet.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-generic-braintree.mjs +127 -0
- package/dist/fesm2022/3ddv-software-division-components-generic-braintree.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-generic-button.mjs +373 -0
- package/dist/fesm2022/3ddv-software-division-components-generic-button.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-generic-dialog.mjs +309 -0
- package/dist/fesm2022/3ddv-software-division-components-generic-dialog.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-generic-drawer.mjs +34 -0
- package/dist/fesm2022/3ddv-software-division-components-generic-drawer.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-generic-icon.mjs +130 -0
- package/dist/fesm2022/3ddv-software-division-components-generic-icon.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-generic-select.mjs +295 -0
- package/dist/fesm2022/3ddv-software-division-components-generic-select.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-shared.mjs +171 -0
- package/dist/fesm2022/3ddv-software-division-components-shared.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components-utils.mjs +39 -0
- package/dist/fesm2022/3ddv-software-division-components-utils.mjs.map +1 -0
- package/dist/fesm2022/3ddv-software-division-components.mjs +18 -0
- package/dist/fesm2022/3ddv-software-division-components.mjs.map +1 -0
- package/dist/styles.css +2 -0
- package/dist/types/3ddv-software-division-components-backoffice-checkbox.d.ts +106 -0
- package/dist/types/3ddv-software-division-components-backoffice-datepicker.d.ts +153 -0
- package/dist/types/3ddv-software-division-components-backoffice-input.d.ts +203 -0
- package/dist/types/3ddv-software-division-components-backoffice-radio.d.ts +76 -0
- package/dist/types/3ddv-software-division-components-backoffice-table.d.ts +130 -0
- package/dist/types/3ddv-software-division-components-dvm-cart-item.d.ts +14 -0
- package/dist/types/3ddv-software-division-components-dvm-cart.d.ts +76 -0
- package/dist/types/3ddv-software-division-components-dvm-legend.d.ts +38 -0
- package/dist/types/3ddv-software-division-components-dvm-loader.d.ts +14 -0
- package/{dvm/map-loader/map-loader.component.d.ts → dist/types/3ddv-software-division-components-dvm-map-loader.d.ts} +16 -14
- package/dist/types/3ddv-software-division-components-dvm-neighbors.d.ts +57 -0
- package/dist/types/3ddv-software-division-components-dvm-popover.d.ts +456 -0
- package/dist/types/3ddv-software-division-components-dvm-stepper.d.ts +34 -0
- package/dist/types/3ddv-software-division-components-dvm-ticket-info-item.d.ts +14 -0
- package/dist/types/3ddv-software-division-components-generic-add-digital-wallet.d.ts +23 -0
- package/dist/types/3ddv-software-division-components-generic-braintree.d.ts +62 -0
- package/dist/types/3ddv-software-division-components-generic-button.d.ts +186 -0
- package/dist/types/3ddv-software-division-components-generic-dialog.d.ts +104 -0
- package/dist/types/3ddv-software-division-components-generic-drawer.d.ts +14 -0
- package/dist/types/3ddv-software-division-components-generic-icon.d.ts +38 -0
- package/dist/types/3ddv-software-division-components-generic-select.d.ts +110 -0
- package/dist/types/3ddv-software-division-components-shared.d.ts +69 -0
- package/dist/types/3ddv-software-division-components-utils.d.ts +3 -0
- package/dist/types/3ddv-software-division-components.d.ts +2 -0
- package/documentation.json +30473 -0
- package/dvm/cart/cart.component.css +103 -0
- package/dvm/cart/cart.component.html +31 -0
- package/dvm/cart/cart.component.ts +49 -0
- package/dvm/cart/cart.stories.ts +370 -0
- package/dvm/cart/cart.types.ts +8 -0
- package/dvm/cart/index.ts +2 -0
- package/dvm/cart/ng-package.json +1 -0
- package/dvm/cart/{public-api.d.ts → public-api.ts} +5 -1
- package/dvm/cart/seat-list.component.css +281 -0
- package/dvm/cart/seat-list.component.html +85 -0
- package/dvm/cart/seat-list.component.ts +76 -0
- package/dvm/cart/seat-list.stories.ts +337 -0
- package/dvm/cart-item/cart-item.component.html +1 -0
- package/dvm/cart-item/cart-item.component.ts +8 -0
- package/dvm/cart-item/cart-item.service.ts +8 -0
- package/dvm/cart-item/cart.stories.ts +31 -0
- package/dvm/cart-item/index.ts +1 -0
- package/dvm/cart-item/ng-package.json +1 -0
- package/dvm/cart-item/{public-api.d.ts → public-api.ts} +4 -1
- package/dvm/index.ts +1 -0
- package/dvm/legend/index.ts +1 -0
- package/dvm/legend/legend.component.css +49 -0
- package/dvm/legend/legend.component.html +8 -0
- package/dvm/legend/legend.component.ts +41 -0
- package/dvm/legend/legend.stories.ts +16 -0
- package/dvm/legend/ng-package.json +1 -0
- package/dvm/legend/{public-api.d.ts → public-api.ts} +4 -1
- package/dvm/legend/{types.d.ts → types.ts} +3 -3
- package/dvm/legend/ui/legend-elements/{index.d.ts → index.ts} +0 -1
- package/dvm/legend/ui/legend-elements/legend-elements.component.css +49 -0
- package/dvm/legend/ui/legend-elements/legend-elements.component.html +8 -0
- package/dvm/legend/ui/legend-elements/legend-elements.component.ts +41 -0
- package/dvm/loader/index.ts +1 -0
- package/dvm/loader/loader.component.html +1 -0
- package/dvm/loader/loader.component.ts +8 -0
- package/dvm/loader/loader.service.ts +8 -0
- package/dvm/loader/loader.stories.ts +31 -0
- package/dvm/loader/ng-package.json +1 -0
- package/dvm/loader/{public-api.d.ts → public-api.ts} +4 -1
- package/dvm/map-loader/index.ts +1 -0
- package/dvm/map-loader/map-loader.component.css +91 -0
- package/dvm/map-loader/map-loader.component.html +23 -0
- package/dvm/map-loader/map-loader.component.ts +187 -0
- package/dvm/map-loader/map-loader.stories.ts +16 -0
- package/dvm/map-loader/ng-package.json +1 -0
- package/dvm/map-loader/public-api.ts +5 -0
- package/dvm/neighbors/index.ts +1 -0
- package/dvm/neighbors/neighbors.component.css +158 -0
- package/dvm/neighbors/neighbors.component.html +45 -0
- package/dvm/neighbors/neighbors.component.ts +218 -0
- package/dvm/neighbors/ng-package.json +1 -0
- package/dvm/neighbors/public-api.ts +2 -0
- package/dvm/neighbors/story/arrow-left-black-icon.svg +3 -0
- package/dvm/neighbors/story/mock-data.ts +15 -0
- package/dvm/neighbors/story/neighbours.stories.css +12 -0
- package/dvm/neighbors/story/neighbours.stories.ts +117 -0
- package/dvm/neighbors/{types.d.ts → types.ts} +7 -7
- package/dvm/popover/base-popover.component.ts +70 -0
- package/dvm/popover/index.ts +1 -0
- package/dvm/popover/ng-package.json +1 -0
- package/dvm/popover/popover.component.css +227 -0
- package/dvm/popover/popover.component.html +27 -0
- package/dvm/popover/popover.component.ts +236 -0
- package/dvm/popover/popover.config.ts +30 -0
- package/dvm/popover/popover.service.ts +627 -0
- package/dvm/popover/popover.stories.ts +873 -0
- package/dvm/popover/{public-api.d.ts → public-api.ts} +4 -1
- package/dvm/popover/seat-popover/seat-popover.component.css +89 -0
- package/dvm/popover/seat-popover/seat-popover.component.html +40 -0
- package/dvm/popover/seat-popover/seat-popover.component.ts +74 -0
- package/dvm/popover/section-popover/section-popover.component.css +157 -0
- package/dvm/popover/section-popover/section-popover.component.html +58 -0
- package/dvm/popover/section-popover/section-popover.component.ts +106 -0
- package/dvm/popover/services/dvm-popover-positioner.service.ts +73 -0
- package/dvm/popover/services/popover-manager.service.ts +88 -0
- package/dvm/popover/transformers/base-popover-data-transformer.ts +36 -0
- package/dvm/popover/types.ts +104 -0
- package/dvm/stepper/index.ts +1 -0
- package/dvm/stepper/ng-package.json +1 -0
- package/dvm/stepper/public-api.ts +5 -0
- package/dvm/stepper/stepper.component.css +142 -0
- package/dvm/stepper/stepper.component.html +9 -0
- package/dvm/stepper/stepper.component.ts +101 -0
- package/dvm/stepper/{types.d.ts → types.ts} +3 -6
- package/dvm/ticket-info-item/index.ts +1 -0
- package/dvm/ticket-info-item/ng-package.json +1 -0
- package/dvm/ticket-info-item/{public-api.d.ts → public-api.ts} +4 -1
- package/dvm/ticket-info-item/ticket-info-item.component.html +1 -0
- package/dvm/ticket-info-item/ticket-info-item.component.ts +8 -0
- package/dvm/ticket-info-item/ticket-info-item.service.ts +8 -0
- package/dvm/ticket-info-item/ticket-info-item.stories.ts +31 -0
- package/generic/add-digital-wallet/add-digital-wallet.component.css +76 -0
- package/generic/add-digital-wallet/add-digital-wallet.component.html +46 -0
- package/generic/add-digital-wallet/add-digital-wallet.component.ts +44 -0
- package/generic/add-digital-wallet/index.ts +1 -0
- package/generic/add-digital-wallet/ng-package.json +1 -0
- package/generic/add-digital-wallet/{public-api.d.ts → public-api.ts} +0 -1
- package/generic/braintree/braintree.component.css +7 -0
- package/generic/braintree/braintree.component.ts +134 -0
- package/generic/braintree/index.ts +1 -0
- package/generic/braintree/ng-package.json +1 -0
- package/generic/braintree/{public-api.d.ts → public-api.ts} +4 -1
- package/generic/braintree/story/braintree.stories.css +3 -0
- package/generic/braintree/story/braintree.stories.ts +27 -0
- package/generic/braintree/types.ts +28 -0
- package/generic/button/button.component.css +305 -0
- package/generic/button/button.component.html +10 -0
- package/generic/button/button.component.ts +353 -0
- package/generic/button/index.ts +1 -0
- package/generic/button/ng-package.json +1 -0
- package/generic/button/public-api.ts +6 -0
- package/generic/button/story/button.stories.ts +384 -0
- package/generic/button/ui/ui-button-helm/src/index.ts +10 -0
- package/generic/button/ui/ui-button-helm/src/lib/hlm-button.token.ts +22 -0
- package/generic/button/ui/ui-button-helm/src/lib/hlm-button.ts +62 -0
- package/generic/carousel/carousel-item.component.ts +15 -0
- package/generic/carousel/carousel-item.directive.ts +14 -0
- package/generic/carousel/carousel.component.css +90 -0
- package/generic/carousel/carousel.component.html +13 -0
- package/generic/carousel/carousel.component.ts +44 -0
- package/generic/carousel/index.ts +1 -0
- package/generic/carousel/{public-api.d.ts → public-api.ts} +0 -1
- package/generic/carousel/ui/ui-carousel-helm/src/index.ts +29 -0
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-content.ts +23 -0
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-item.ts +25 -0
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-next.ts +58 -0
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-previous.ts +61 -0
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-slide-display.ts +36 -0
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel.ts +105 -0
- package/generic/dialog/dialog.component.css +5 -0
- package/generic/dialog/dialog.component.html +3 -0
- package/generic/dialog/dialog.component.ts +20 -0
- package/generic/dialog/dialog.stories.ts +14 -0
- package/generic/dialog/index.ts +1 -0
- package/generic/dialog/libs/ui-dialog-helm/src/{index.d.ts → index.ts} +20 -8
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-close.ts +20 -0
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-content.ts +56 -0
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-description.ts +17 -0
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-footer.ts +19 -0
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-header.ts +19 -0
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-overlay.ts +23 -0
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-title.ts +19 -0
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog.service.ts +59 -0
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog.ts +31 -0
- package/generic/dialog/ng-package.json +1 -0
- package/generic/dialog/{public-api.d.ts → public-api.ts} +5 -1
- package/generic/dialog/tsconfig.json +7 -0
- package/generic/dialog/ui/dialog-close-button/dialog-close-button.component.css +0 -0
- package/generic/dialog/ui/dialog-close-button/dialog-close-button.component.html +1 -0
- package/generic/dialog/ui/dialog-close-button/dialog-close-button.component.ts +17 -0
- package/generic/dialog/ui/dialog-footer/dialog-footer.component.css +0 -0
- package/generic/dialog/ui/dialog-footer/dialog-footer.component.html +3 -0
- package/generic/dialog/ui/dialog-footer/dialog-footer.component.ts +11 -0
- package/generic/dialog/ui/dialog-header/dialog-header.component.css +0 -0
- package/generic/dialog/ui/dialog-header/dialog-header.component.html +8 -0
- package/generic/dialog/ui/dialog-header/dialog-header.component.ts +18 -0
- package/generic/drawer/drawer.component.html +1 -0
- package/generic/drawer/drawer.component.ts +8 -0
- package/generic/drawer/drawer.service.ts +8 -0
- package/generic/drawer/drawer.stories.ts +31 -0
- package/generic/drawer/index.ts +1 -0
- package/generic/drawer/ng-package.json +1 -0
- package/generic/drawer/{public-api.d.ts → public-api.ts} +4 -1
- package/generic/icon/icon.component.css +7 -0
- package/generic/icon/icon.component.html +3 -0
- package/generic/icon/icon.component.ts +86 -0
- package/generic/icon/icon.stories.ts +16 -0
- package/generic/icon/index.ts +1 -0
- package/generic/icon/lib/ui-icon-helm/src/index.ts +11 -0
- package/generic/icon/lib/ui-icon-helm/src/lib/hlm-icon.token.ts +20 -0
- package/generic/icon/lib/ui-icon-helm/src/lib/hlm-icon.ts +36 -0
- package/generic/icon/ng-package.json +1 -0
- package/generic/icon/public-api.ts +6 -0
- package/generic/icon/tsconfig.json +7 -0
- package/generic/index.ts +1 -0
- package/generic/select/index.ts +1 -0
- package/generic/select/lib/hlm-select-content.ts +29 -0
- package/generic/select/lib/hlm-select-group.ts +17 -0
- package/generic/select/lib/hlm-select-label.ts +26 -0
- package/generic/select/lib/hlm-select-option.ts +37 -0
- package/generic/select/lib/hlm-select-scroll-down.ts +24 -0
- package/generic/select/lib/hlm-select-scroll-up.ts +23 -0
- package/generic/select/lib/hlm-select-trigger.ts +53 -0
- package/generic/select/lib/hlm-select-value.ts +17 -0
- package/generic/select/lib/hlm-select.ts +15 -0
- package/generic/select/lib/index.ts +38 -0
- package/generic/select/ng-package.json +1 -0
- package/generic/select/{public-api.d.ts → public-api.ts} +1 -1
- package/generic/select/select.component.css +65 -0
- package/generic/select/select.component.html +19 -0
- package/generic/select/select.component.ts +25 -0
- package/generic/select/types.ts +4 -0
- package/ng-package.json +10 -0
- package/package.json +114 -100
- package/public/3ddv-logo.jpg +0 -0
- package/public/neighbours-after.png +0 -0
- package/public/neighbours-before.png +0 -0
- package/shared/apply-theme-variables/apply-theme-variables.ts +35 -0
- package/shared/apply-theme-variables/{index.d.ts → index.ts} +0 -1
- package/shared/format-value.pipe.ts +23 -0
- package/shared/index.ts +1 -0
- package/shared/lib-provider/config-token.ts +4 -0
- package/shared/lib-provider/index.ts +1 -0
- package/shared/lib-provider/provide-sdc.ts +24 -0
- package/shared/lib-provider/{public-api.d.ts → public-api.ts} +0 -1
- package/shared/ng-package.json +1 -0
- package/shared/public-api.ts +6 -0
- package/shared/screen-observer/{index.d.ts → index.ts} +0 -1
- package/shared/screen-observer/provide-screen-observer.ts +17 -0
- package/shared/screen-observer/screen-observer.ts +56 -0
- package/shared/screen-observer/sizable-base.ts +70 -0
- package/shared/theme-provider/generic-theme.ts +1 -0
- package/shared/theme-provider/index.ts +1 -0
- package/shared/theme-provider/public-api.ts +1 -0
- package/shared/theme-provider/theme-provider.directive.ts +17 -0
- package/shared/themes/sdc.css +153 -0
- package/shared/types.ts +18 -0
- package/src/private-exports.ts +1 -0
- package/src/public-api.ts +20 -0
- package/styles.css +46 -2
- package/tsconfig.json +50 -0
- package/tsconfig.lib.prod.json +6 -0
- package/tsconfig.spec.json +15 -0
- package/tsconfig.temp.json +1 -0
- package/utils/index.ts +1 -0
- package/utils/ng-package.json +1 -0
- package/utils/public-api.ts +1 -0
- package/utils/validate-styles-for-component.ts +39 -0
- package/3ddv-software-division-components.d.ts.map +0 -1
- package/backoffice/checkbox/checkbox.component.d.ts +0 -103
- package/backoffice/checkbox/checkbox.component.d.ts.map +0 -1
- package/backoffice/checkbox/index.d.ts +0 -2
- package/backoffice/checkbox/index.d.ts.map +0 -1
- package/backoffice/checkbox/public-api.d.ts +0 -2
- package/backoffice/checkbox/public-api.d.ts.map +0 -1
- package/backoffice/datepicker/datepicker.component.d.ts +0 -150
- package/backoffice/datepicker/datepicker.component.d.ts.map +0 -1
- package/backoffice/datepicker/index.d.ts +0 -2
- package/backoffice/datepicker/index.d.ts.map +0 -1
- package/backoffice/datepicker/public-api.d.ts.map +0 -1
- package/backoffice/datepicker/ui/ui-calendar-helm/src/index.d.ts +0 -14
- package/backoffice/datepicker/ui/ui-calendar-helm/src/index.d.ts.map +0 -1
- package/backoffice/datepicker/ui/ui-calendar-helm/src/lib/hlm-calendar-multi.d.ts +0 -38
- package/backoffice/datepicker/ui/ui-calendar-helm/src/lib/hlm-calendar-multi.d.ts.map +0 -1
- package/backoffice/datepicker/ui/ui-calendar-helm/src/lib/hlm-calendar.d.ts +0 -34
- package/backoffice/datepicker/ui/ui-calendar-helm/src/lib/hlm-calendar.d.ts.map +0 -1
- package/backoffice/datepicker/ui/ui-date-picker-helm/src/index.d.ts +0 -15
- package/backoffice/datepicker/ui/ui-date-picker-helm/src/index.d.ts.map +0 -1
- package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker-multi.d.ts +0 -53
- package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker-multi.d.ts.map +0 -1
- package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker-multi.token.d.ts +0 -24
- package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker-multi.token.d.ts.map +0 -1
- package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker.d.ts +0 -53
- package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker.d.ts.map +0 -1
- package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker.token.d.ts +0 -24
- package/backoffice/datepicker/ui/ui-date-picker-helm/src/lib/hlm-date-picker.token.d.ts.map +0 -1
- package/backoffice/datepicker/ui/ui-icon-helm/src/index.d.ts +0 -10
- package/backoffice/datepicker/ui/ui-icon-helm/src/index.d.ts.map +0 -1
- package/backoffice/datepicker/ui/ui-icon-helm/src/lib/hlm-icon.d.ts +0 -10
- package/backoffice/datepicker/ui/ui-icon-helm/src/lib/hlm-icon.d.ts.map +0 -1
- package/backoffice/datepicker/ui/ui-icon-helm/src/lib/hlm-icon.token.d.ts +0 -8
- package/backoffice/datepicker/ui/ui-icon-helm/src/lib/hlm-icon.token.d.ts.map +0 -1
- package/backoffice/datepicker/ui/ui-popover-helm/src/index.d.ts +0 -14
- package/backoffice/datepicker/ui/ui-popover-helm/src/index.d.ts.map +0 -1
- package/backoffice/datepicker/ui/ui-popover-helm/src/lib/hlm-popover-close.d.ts +0 -9
- package/backoffice/datepicker/ui/ui-popover-helm/src/lib/hlm-popover-close.d.ts.map +0 -1
- package/backoffice/datepicker/ui/ui-popover-helm/src/lib/hlm-popover-content.d.ts +0 -14
- package/backoffice/datepicker/ui/ui-popover-helm/src/lib/hlm-popover-content.d.ts.map +0 -1
- package/backoffice/index.d.ts +0 -2
- package/backoffice/index.d.ts.map +0 -1
- package/backoffice/input/index.d.ts +0 -2
- package/backoffice/input/index.d.ts.map +0 -1
- package/backoffice/input/input.component.d.ts +0 -200
- package/backoffice/input/input.component.d.ts.map +0 -1
- package/backoffice/input/public-api.d.ts +0 -2
- package/backoffice/input/public-api.d.ts.map +0 -1
- package/backoffice/public-api.d.ts +0 -6
- package/backoffice/public-api.d.ts.map +0 -1
- package/backoffice/radio/index.d.ts +0 -2
- package/backoffice/radio/index.d.ts.map +0 -1
- package/backoffice/radio/public-api.d.ts +0 -2
- package/backoffice/radio/public-api.d.ts.map +0 -1
- package/backoffice/radio/radio.component.d.ts +0 -73
- package/backoffice/radio/radio.component.d.ts.map +0 -1
- package/backoffice/table/_components/pagination/pagination.component.d.ts +0 -18
- package/backoffice/table/_components/pagination/pagination.component.d.ts.map +0 -1
- package/backoffice/table/_components/selection-table-head/selection-table-head.component.d.ts +0 -11
- package/backoffice/table/_components/selection-table-head/selection-table-head.component.d.ts.map +0 -1
- package/backoffice/table/_components/selection-table-row/selection-table-row.component.d.ts +0 -8
- package/backoffice/table/_components/selection-table-row/selection-table-row.component.d.ts.map +0 -1
- package/backoffice/table/_components/sort-header-button/sort-header-button.component.d.ts +0 -16
- package/backoffice/table/_components/sort-header-button/sort-header-button.component.d.ts.map +0 -1
- package/backoffice/table/index.d.ts +0 -2
- package/backoffice/table/index.d.ts.map +0 -1
- package/backoffice/table/public-api.d.ts +0 -3
- package/backoffice/table/public-api.d.ts.map +0 -1
- package/backoffice/table/table.component.d.ts +0 -111
- package/backoffice/table/table.component.d.ts.map +0 -1
- package/backoffice/table/ui/ui-icon-helm/src/index.d.ts +0 -10
- package/backoffice/table/ui/ui-icon-helm/src/index.d.ts.map +0 -1
- package/backoffice/table/ui/ui-icon-helm/src/lib/hlm-icon.d.ts +0 -10
- package/backoffice/table/ui/ui-icon-helm/src/lib/hlm-icon.d.ts.map +0 -1
- package/backoffice/table/ui/ui-icon-helm/src/lib/hlm-icon.token.d.ts +0 -8
- package/backoffice/table/ui/ui-icon-helm/src/lib/hlm-icon.token.d.ts.map +0 -1
- package/backoffice/table/ui/ui-table-helm/src/index.d.ts +0 -11
- package/backoffice/table/ui/ui-table-helm/src/index.d.ts.map +0 -1
- package/backoffice/table/ui/ui-table-helm/src/lib/hlm-table.d.ts +0 -112
- package/backoffice/table/ui/ui-table-helm/src/lib/hlm-table.d.ts.map +0 -1
- package/dvm/cart/cart.component.d.ts +0 -31
- package/dvm/cart/cart.component.d.ts.map +0 -1
- package/dvm/cart/cart.types.d.ts +0 -8
- package/dvm/cart/cart.types.d.ts.map +0 -1
- package/dvm/cart/index.d.ts +0 -2
- package/dvm/cart/index.d.ts.map +0 -1
- package/dvm/cart/public-api.d.ts.map +0 -1
- package/dvm/cart/seat-list.component.d.ts +0 -38
- package/dvm/cart/seat-list.component.d.ts.map +0 -1
- package/dvm/cart-item/cart-item.component.d.ts +0 -6
- package/dvm/cart-item/cart-item.component.d.ts.map +0 -1
- package/dvm/cart-item/cart-item.service.d.ts +0 -7
- package/dvm/cart-item/cart-item.service.d.ts.map +0 -1
- package/dvm/cart-item/index.d.ts +0 -2
- package/dvm/cart-item/index.d.ts.map +0 -1
- package/dvm/cart-item/public-api.d.ts.map +0 -1
- package/dvm/index.d.ts +0 -2
- package/dvm/index.d.ts.map +0 -1
- package/dvm/legend/index.d.ts +0 -2
- package/dvm/legend/index.d.ts.map +0 -1
- package/dvm/legend/legend.component.d.ts +0 -17
- package/dvm/legend/legend.component.d.ts.map +0 -1
- package/dvm/legend/public-api.d.ts.map +0 -1
- package/dvm/legend/types.d.ts.map +0 -1
- package/dvm/legend/ui/legend-elements/index.d.ts.map +0 -1
- package/dvm/legend/ui/legend-elements/legend-elements.component.d.ts +0 -16
- package/dvm/legend/ui/legend-elements/legend-elements.component.d.ts.map +0 -1
- package/dvm/loader/index.d.ts +0 -2
- package/dvm/loader/index.d.ts.map +0 -1
- package/dvm/loader/loader.component.d.ts +0 -6
- package/dvm/loader/loader.component.d.ts.map +0 -1
- package/dvm/loader/loader.service.d.ts +0 -7
- package/dvm/loader/loader.service.d.ts.map +0 -1
- package/dvm/loader/public-api.d.ts.map +0 -1
- package/dvm/map-loader/index.d.ts +0 -2
- package/dvm/map-loader/index.d.ts.map +0 -1
- package/dvm/map-loader/map-loader.component.d.ts.map +0 -1
- package/dvm/map-loader/public-api.d.ts +0 -2
- package/dvm/map-loader/public-api.d.ts.map +0 -1
- package/dvm/neighbors/index.d.ts +0 -2
- package/dvm/neighbors/index.d.ts.map +0 -1
- package/dvm/neighbors/neighbors.component.d.ts +0 -41
- package/dvm/neighbors/neighbors.component.d.ts.map +0 -1
- package/dvm/neighbors/public-api.d.ts +0 -3
- package/dvm/neighbors/public-api.d.ts.map +0 -1
- package/dvm/neighbors/types.d.ts.map +0 -1
- package/dvm/popover/base-popover.component.d.ts +0 -28
- package/dvm/popover/base-popover.component.d.ts.map +0 -1
- package/dvm/popover/index.d.ts +0 -2
- package/dvm/popover/index.d.ts.map +0 -1
- package/dvm/popover/popover.component.d.ts +0 -69
- package/dvm/popover/popover.component.d.ts.map +0 -1
- package/dvm/popover/popover.config.d.ts +0 -25
- package/dvm/popover/popover.config.d.ts.map +0 -1
- package/dvm/popover/popover.service.d.ts +0 -140
- package/dvm/popover/popover.service.d.ts.map +0 -1
- package/dvm/popover/public-api.d.ts.map +0 -1
- package/dvm/popover/seat-popover/seat-popover.component.d.ts +0 -21
- package/dvm/popover/seat-popover/seat-popover.component.d.ts.map +0 -1
- package/dvm/popover/section-popover/section-popover.component.d.ts +0 -32
- package/dvm/popover/section-popover/section-popover.component.d.ts.map +0 -1
- package/dvm/popover/services/dvm-popover-positioner.service.d.ts +0 -30
- package/dvm/popover/services/dvm-popover-positioner.service.d.ts.map +0 -1
- package/dvm/popover/services/popover-manager.service.d.ts +0 -29
- package/dvm/popover/services/popover-manager.service.d.ts.map +0 -1
- package/dvm/popover/transformers/base-popover-data-transformer.d.ts +0 -29
- package/dvm/popover/transformers/base-popover-data-transformer.d.ts.map +0 -1
- package/dvm/popover/types.d.ts +0 -79
- package/dvm/popover/types.d.ts.map +0 -1
- package/dvm/public-api.d.ts +0 -10
- package/dvm/public-api.d.ts.map +0 -1
- package/dvm/stepper/index.d.ts +0 -2
- package/dvm/stepper/index.d.ts.map +0 -1
- package/dvm/stepper/public-api.d.ts +0 -2
- package/dvm/stepper/public-api.d.ts.map +0 -1
- package/dvm/stepper/stepper.component.d.ts +0 -27
- package/dvm/stepper/stepper.component.d.ts.map +0 -1
- package/dvm/stepper/types.d.ts.map +0 -1
- package/dvm/ticket-info-item/index.d.ts +0 -2
- package/dvm/ticket-info-item/index.d.ts.map +0 -1
- package/dvm/ticket-info-item/public-api.d.ts.map +0 -1
- package/dvm/ticket-info-item/ticket-info-item.component.d.ts +0 -6
- package/dvm/ticket-info-item/ticket-info-item.component.d.ts.map +0 -1
- package/dvm/ticket-info-item/ticket-info-item.service.d.ts +0 -7
- package/dvm/ticket-info-item/ticket-info-item.service.d.ts.map +0 -1
- package/fesm2022/3ddv-software-division-components.mjs +0 -6568
- package/fesm2022/3ddv-software-division-components.mjs.map +0 -1
- package/generic/add-digital-wallet/add-digital-wallet.component.d.ts +0 -21
- package/generic/add-digital-wallet/add-digital-wallet.component.d.ts.map +0 -1
- package/generic/add-digital-wallet/index.d.ts +0 -2
- package/generic/add-digital-wallet/index.d.ts.map +0 -1
- package/generic/add-digital-wallet/public-api.d.ts.map +0 -1
- package/generic/braintree/braintree.component.d.ts +0 -33
- package/generic/braintree/braintree.component.d.ts.map +0 -1
- package/generic/braintree/index.d.ts +0 -2
- package/generic/braintree/index.d.ts.map +0 -1
- package/generic/braintree/public-api.d.ts.map +0 -1
- package/generic/braintree/types.d.ts +0 -27
- package/generic/braintree/types.d.ts.map +0 -1
- package/generic/button/button.component.d.ts +0 -152
- package/generic/button/button.component.d.ts.map +0 -1
- package/generic/button/index.d.ts +0 -2
- package/generic/button/index.d.ts.map +0 -1
- package/generic/button/public-api.d.ts +0 -2
- package/generic/button/public-api.d.ts.map +0 -1
- package/generic/button/ui/ui-button-helm/src/index.d.ts +0 -10
- package/generic/button/ui/ui-button-helm/src/index.d.ts.map +0 -1
- package/generic/button/ui/ui-button-helm/src/lib/hlm-button.d.ts +0 -20
- package/generic/button/ui/ui-button-helm/src/lib/hlm-button.d.ts.map +0 -1
- package/generic/button/ui/ui-button-helm/src/lib/hlm-button.token.d.ts +0 -9
- package/generic/button/ui/ui-button-helm/src/lib/hlm-button.token.d.ts.map +0 -1
- package/generic/carousel/carousel-item.component.d.ts +0 -8
- package/generic/carousel/carousel-item.component.d.ts.map +0 -1
- package/generic/carousel/carousel.component.d.ts +0 -20
- package/generic/carousel/carousel.component.d.ts.map +0 -1
- package/generic/carousel/index.d.ts +0 -2
- package/generic/carousel/index.d.ts.map +0 -1
- package/generic/carousel/public-api.d.ts.map +0 -1
- package/generic/carousel/ui/ui-carousel-helm/src/index.d.ts +0 -26
- package/generic/carousel/ui/ui-carousel-helm/src/index.d.ts.map +0 -1
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-content.d.ts +0 -10
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-content.d.ts.map +0 -1
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-item.d.ts +0 -10
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-item.d.ts.map +0 -1
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-next.d.ts +0 -15
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-next.d.ts.map +0 -1
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-previous.d.ts +0 -15
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-previous.d.ts.map +0 -1
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-slide-display.d.ts +0 -16
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel-slide-display.d.ts.map +0 -1
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel.d.ts +0 -28
- package/generic/carousel/ui/ui-carousel-helm/src/lib/hlm-carousel.d.ts.map +0 -1
- package/generic/dialog/dialog.component.d.ts +0 -11
- package/generic/dialog/dialog.component.d.ts.map +0 -1
- package/generic/dialog/index.d.ts +0 -2
- package/generic/dialog/index.d.ts.map +0 -1
- package/generic/dialog/libs/ui-dialog-helm/src/index.d.ts.map +0 -1
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-close.d.ts +0 -9
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-close.d.ts.map +0 -1
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-content.d.ts +0 -15
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-content.d.ts.map +0 -1
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-description.d.ts +0 -10
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-description.d.ts.map +0 -1
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-footer.d.ts +0 -9
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-footer.d.ts.map +0 -1
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-header.d.ts +0 -9
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-header.d.ts.map +0 -1
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-overlay.d.ts +0 -12
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-overlay.d.ts.map +0 -1
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-title.d.ts +0 -10
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog-title.d.ts.map +0 -1
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog.d.ts +0 -7
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog.d.ts.map +0 -1
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog.service.d.ts +0 -21
- package/generic/dialog/libs/ui-dialog-helm/src/lib/hlm-dialog.service.d.ts.map +0 -1
- package/generic/dialog/public-api.d.ts.map +0 -1
- package/generic/drawer/drawer.component.d.ts +0 -6
- package/generic/drawer/drawer.component.d.ts.map +0 -1
- package/generic/drawer/drawer.service.d.ts +0 -7
- package/generic/drawer/drawer.service.d.ts.map +0 -1
- package/generic/drawer/index.d.ts +0 -2
- package/generic/drawer/index.d.ts.map +0 -1
- package/generic/drawer/public-api.d.ts.map +0 -1
- package/generic/icon/icon.component.d.ts +0 -21
- package/generic/icon/icon.component.d.ts.map +0 -1
- package/generic/icon/index.d.ts +0 -2
- package/generic/icon/index.d.ts.map +0 -1
- package/generic/icon/lib/ui-icon-helm/src/index.d.ts +0 -10
- package/generic/icon/lib/ui-icon-helm/src/index.d.ts.map +0 -1
- package/generic/icon/lib/ui-icon-helm/src/lib/hlm-icon.d.ts +0 -10
- package/generic/icon/lib/ui-icon-helm/src/lib/hlm-icon.d.ts.map +0 -1
- package/generic/icon/lib/ui-icon-helm/src/lib/hlm-icon.token.d.ts +0 -8
- package/generic/icon/lib/ui-icon-helm/src/lib/hlm-icon.token.d.ts.map +0 -1
- package/generic/icon/public-api.d.ts +0 -2
- package/generic/icon/public-api.d.ts.map +0 -1
- package/generic/index.d.ts +0 -2
- package/generic/index.d.ts.map +0 -1
- package/generic/public-api.d.ts +0 -10
- package/generic/public-api.d.ts.map +0 -1
- package/generic/rich-text-editor/components/editor-toolbar/editor-toolbar.component.d.ts +0 -88
- package/generic/rich-text-editor/components/editor-toolbar/editor-toolbar.component.d.ts.map +0 -1
- package/generic/rich-text-editor/components/link-modal/link-modal.component.d.ts +0 -43
- package/generic/rich-text-editor/components/link-modal/link-modal.component.d.ts.map +0 -1
- package/generic/rich-text-editor/index.d.ts +0 -2
- package/generic/rich-text-editor/index.d.ts.map +0 -1
- package/generic/rich-text-editor/models/editor-config.model.d.ts +0 -46
- package/generic/rich-text-editor/models/editor-config.model.d.ts.map +0 -1
- package/generic/rich-text-editor/models/index.d.ts +0 -3
- package/generic/rich-text-editor/models/index.d.ts.map +0 -1
- package/generic/rich-text-editor/models/toolbar-config.model.d.ts +0 -63
- package/generic/rich-text-editor/models/toolbar-config.model.d.ts.map +0 -1
- package/generic/rich-text-editor/public-api.d.ts +0 -5
- package/generic/rich-text-editor/public-api.d.ts.map +0 -1
- package/generic/rich-text-editor/rich-text-editor.component.d.ts +0 -113
- package/generic/rich-text-editor/rich-text-editor.component.d.ts.map +0 -1
- package/generic/select/index.d.ts +0 -2
- package/generic/select/index.d.ts.map +0 -1
- package/generic/select/lib/hlm-select-content.d.ts +0 -13
- package/generic/select/lib/hlm-select-content.d.ts.map +0 -1
- package/generic/select/lib/hlm-select-group.d.ts +0 -10
- package/generic/select/lib/hlm-select-group.d.ts.map +0 -1
- package/generic/select/lib/hlm-select-label.d.ts +0 -12
- package/generic/select/lib/hlm-select-label.d.ts.map +0 -1
- package/generic/select/lib/hlm-select-option.d.ts +0 -12
- package/generic/select/lib/hlm-select-option.d.ts.map +0 -1
- package/generic/select/lib/hlm-select-scroll-down.d.ts +0 -9
- package/generic/select/lib/hlm-select-scroll-down.d.ts.map +0 -1
- package/generic/select/lib/hlm-select-scroll-up.d.ts +0 -9
- package/generic/select/lib/hlm-select-scroll-up.d.ts.map +0 -1
- package/generic/select/lib/hlm-select-trigger.d.ts +0 -17
- package/generic/select/lib/hlm-select-trigger.d.ts.map +0 -1
- package/generic/select/lib/hlm-select-value.d.ts +0 -9
- package/generic/select/lib/hlm-select-value.d.ts.map +0 -1
- package/generic/select/lib/hlm-select.d.ts +0 -9
- package/generic/select/lib/hlm-select.d.ts.map +0 -1
- package/generic/select/lib/index.d.ts +0 -35
- package/generic/select/lib/index.d.ts.map +0 -1
- package/generic/select/public-api.d.ts.map +0 -1
- package/generic/select/select.component.d.ts +0 -14
- package/generic/select/select.component.d.ts.map +0 -1
- package/generic/select/types.d.ts +0 -5
- package/generic/select/types.d.ts.map +0 -1
- package/index.d.ts +0 -6
- package/public-api.d.ts +0 -8
- package/public-api.d.ts.map +0 -1
- package/shared/apply-theme-variables/apply-theme-variables.d.ts +0 -4
- package/shared/apply-theme-variables/apply-theme-variables.d.ts.map +0 -1
- package/shared/apply-theme-variables/index.d.ts.map +0 -1
- package/shared/lib-provider/config-token.d.ts +0 -4
- package/shared/lib-provider/config-token.d.ts.map +0 -1
- package/shared/lib-provider/index.d.ts +0 -2
- package/shared/lib-provider/index.d.ts.map +0 -1
- package/shared/lib-provider/provide-sdc.d.ts +0 -10
- package/shared/lib-provider/provide-sdc.d.ts.map +0 -1
- package/shared/lib-provider/public-api.d.ts.map +0 -1
- package/shared/screen-observer/index.d.ts.map +0 -1
- package/shared/screen-observer/provide-screen-observer.d.ts +0 -5
- package/shared/screen-observer/provide-screen-observer.d.ts.map +0 -1
- package/shared/screen-observer/screen-observer.d.ts +0 -15
- package/shared/screen-observer/screen-observer.d.ts.map +0 -1
- package/shared/types.d.ts +0 -19
- package/shared/types.d.ts.map +0 -1
- package/tailwind.config.js +0 -19
- package/types/sizes.type.d.ts +0 -3
- 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
|