@sbb-esta/lyne-elements-experimental 4.7.0 → 4.8.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/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +66 -85
- package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +72 -53
- package/autocomplete-grid/autocomplete-grid-button.js +4 -4
- package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +2 -25
- package/autocomplete-grid/autocomplete-grid-cell.js +4 -4
- package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +20 -28
- package/autocomplete-grid/autocomplete-grid-optgroup.js +4 -4
- package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +2 -41
- package/autocomplete-grid/autocomplete-grid-option.js +4 -5
- package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +2 -28
- package/autocomplete-grid/autocomplete-grid-row.js +4 -4
- package/autocomplete-grid/autocomplete-grid.js +4 -4
- package/autocomplete-grid-cell.component-Dak9wlBr.js +24 -0
- package/autocomplete-grid-option.component-DNRFHOwc.js +37 -0
- package/autocomplete-grid-row.component-DBHZQ0GQ.js +27 -0
- package/autocomplete-grid.js +10 -15
- package/autocomplete-grid.pure.js +7 -0
- package/core/datetime/date-helper.js +2 -191
- package/core/datetime.js +2 -5
- package/core/timetable/access-leg-helper.js +76 -71
- package/core/timetable/timetable-helper.js +9 -11
- package/core/timetable/timetable-properties.js +0 -1
- package/core/timetable.js +3 -7
- package/custom-elements.json +457 -368
- package/date-helper-CGproP5d.js +185 -0
- package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.d.ts +2 -1
- package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +115 -136
- package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.d.ts +3 -2
- package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +92 -71
- package/development/autocomplete-grid/autocomplete-grid-button.d.ts +0 -3
- package/development/autocomplete-grid/autocomplete-grid-button.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-button.js +9 -4
- package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.d.ts +4 -4
- package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +2 -41
- package/development/autocomplete-grid/autocomplete-grid-cell.d.ts +0 -3
- package/development/autocomplete-grid/autocomplete-grid-cell.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-cell.js +10 -5
- package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.d.ts +3 -2
- package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +28 -38
- package/development/autocomplete-grid/autocomplete-grid-optgroup.d.ts +0 -3
- package/development/autocomplete-grid/autocomplete-grid-optgroup.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-optgroup.js +9 -4
- package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.d.ts +1 -0
- package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +2 -121
- package/development/autocomplete-grid/autocomplete-grid-option.d.ts +0 -3
- package/development/autocomplete-grid/autocomplete-grid-option.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-option.js +10 -6
- package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.d.ts +4 -4
- package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +2 -103
- package/development/autocomplete-grid/autocomplete-grid-row.d.ts +0 -3
- package/development/autocomplete-grid/autocomplete-grid-row.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-row.js +10 -5
- package/development/autocomplete-grid/autocomplete-grid.d.ts +0 -3
- package/development/autocomplete-grid/autocomplete-grid.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid.js +9 -4
- package/development/autocomplete-grid-cell.component-BBvM4o2H.js +42 -0
- package/development/autocomplete-grid-option.component-QzfM5eIE.js +123 -0
- package/development/autocomplete-grid-row.component-H8sCTCkT.js +104 -0
- package/development/autocomplete-grid.d.ts +1 -9
- package/development/autocomplete-grid.d.ts.map +1 -1
- package/development/autocomplete-grid.js +17 -14
- package/development/autocomplete-grid.pure.d.ts +8 -0
- package/development/autocomplete-grid.pure.d.ts.map +1 -0
- package/development/autocomplete-grid.pure.js +7 -0
- package/development/core/datetime/date-helper.js +2 -285
- package/development/core/datetime.d.ts +1 -3
- package/development/core/datetime.d.ts.map +1 -1
- package/development/core/datetime.js +2 -6
- package/development/core/timetable/access-leg-helper.js +104 -82
- package/development/core/timetable/timetable-helper.js +16 -17
- package/development/core/timetable/timetable-properties.d.ts +30 -30
- package/development/core/timetable/timetable-properties.d.ts.map +1 -1
- package/development/core/timetable/timetable-properties.js +0 -2
- package/development/core/timetable.d.ts +1 -3
- package/development/core/timetable.d.ts.map +1 -1
- package/development/core/timetable.js +3 -8
- package/development/date-helper-8_Y-PuHh.js +520 -0
- package/development/differenceInMinutes-DN_1Rk3O.js +110 -0
- package/development/format-Bbrn2bgo.js +1848 -0
- package/development/isValid-C-HzKv4v.js +178 -0
- package/development/journey-summary/journey-summary.component.d.ts +4 -2
- package/development/journey-summary/journey-summary.component.d.ts.map +1 -1
- package/development/journey-summary/journey-summary.component.js +2 -294
- package/development/journey-summary.component-uGhZvA4p.js +385 -0
- package/development/journey-summary.d.ts +1 -4
- package/development/journey-summary.d.ts.map +1 -1
- package/development/journey-summary.js +9 -5
- package/development/journey-summary.pure.d.ts +3 -0
- package/development/journey-summary.pure.d.ts.map +1 -0
- package/development/journey-summary.pure.js +2 -0
- package/development/mapper-hWWm7Uke.js +11454 -0
- package/development/pearl-chain/pearl-chain.component.d.ts +4 -2
- package/development/pearl-chain/pearl-chain.component.d.ts.map +1 -1
- package/development/pearl-chain/pearl-chain.component.js +2 -640
- package/development/pearl-chain-time/pearl-chain-time.component.d.ts +4 -2
- package/development/pearl-chain-time/pearl-chain-time.component.d.ts.map +1 -1
- package/development/pearl-chain-time/pearl-chain-time.component.js +2 -312
- package/development/pearl-chain-time.component-B8mayTWD.js +415 -0
- package/development/pearl-chain-time.d.ts +1 -4
- package/development/pearl-chain-time.d.ts.map +1 -1
- package/development/pearl-chain-time.js +9 -5
- package/development/pearl-chain-time.pure.d.ts +3 -0
- package/development/pearl-chain-time.pure.d.ts.map +1 -0
- package/development/pearl-chain-time.pure.js +2 -0
- package/development/pearl-chain-vertical/pearl-chain-vertical.component.d.ts +4 -2
- package/development/pearl-chain-vertical/pearl-chain-vertical.component.d.ts.map +1 -1
- package/development/pearl-chain-vertical/pearl-chain-vertical.component.js +2 -40
- package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.d.ts +4 -2
- package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.d.ts.map +1 -1
- package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +2 -399
- package/development/pearl-chain-vertical-item.component-BDzbcIaf.js +435 -0
- package/development/pearl-chain-vertical-item.d.ts +1 -4
- package/development/pearl-chain-vertical-item.d.ts.map +1 -1
- package/development/pearl-chain-vertical-item.js +9 -5
- package/development/pearl-chain-vertical-item.pure.d.ts +3 -0
- package/development/pearl-chain-vertical-item.pure.d.ts.map +1 -0
- package/development/pearl-chain-vertical-item.pure.js +2 -0
- package/development/pearl-chain-vertical.component-CswE7b3M.js +39 -0
- package/development/pearl-chain-vertical.d.ts +1 -4
- package/development/pearl-chain-vertical.d.ts.map +1 -1
- package/development/pearl-chain-vertical.js +9 -5
- package/development/pearl-chain-vertical.pure.d.ts +3 -0
- package/development/pearl-chain-vertical.pure.d.ts.map +1 -0
- package/development/pearl-chain-vertical.pure.js +2 -0
- package/development/pearl-chain.component-wpsTvoSe.js +704 -0
- package/development/pearl-chain.d.ts +1 -4
- package/development/pearl-chain.d.ts.map +1 -1
- package/development/pearl-chain.js +9 -5
- package/development/pearl-chain.pure.d.ts +3 -0
- package/development/pearl-chain.pure.d.ts.map +1 -0
- package/development/pearl-chain.pure.js +2 -0
- package/development/seat-reservation/common/mapper/icon-mapper.d.ts +2 -2
- package/development/seat-reservation/common/mapper/icon-mapper.d.ts.map +1 -1
- package/development/seat-reservation/common/mapper/icon-mapper.js +168 -71
- package/development/seat-reservation/common/mapper/mapper.js +2 -131
- package/development/seat-reservation/common/mapper.js +2 -9
- package/development/seat-reservation/common/svgs.js +2 -46
- package/development/seat-reservation/common/translations/i18n.js +1118 -900
- package/development/seat-reservation/common/translations.js +1 -4
- package/development/seat-reservation/common/types.d.ts +22 -22
- package/development/seat-reservation/common/types.d.ts.map +1 -1
- package/development/seat-reservation/common/types.js +0 -2
- package/development/seat-reservation/common.d.ts +1 -3
- package/development/seat-reservation/common.d.ts.map +1 -1
- package/development/seat-reservation/common.js +10 -12
- package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts +4 -3
- package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation/seat-reservation-base-element.js +1309 -1231
- package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts +1 -0
- package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation/seat-reservation.component.js +2 -867
- package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.d.ts +4 -2
- package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +2 -112
- package/development/seat-reservation/seat-reservation-area.d.ts +0 -3
- package/development/seat-reservation/seat-reservation-area.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-area.js +10 -5
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +39 -36
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts +4 -2
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +2 -167
- package/development/seat-reservation/seat-reservation-graphic.d.ts +0 -3
- package/development/seat-reservation/seat-reservation-graphic.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-graphic.js +10 -5
- package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts +5 -3
- package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +2 -718
- package/development/seat-reservation/seat-reservation-navigation-coach.d.ts +0 -3
- package/development/seat-reservation/seat-reservation-navigation-coach.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-navigation-coach.js +10 -5
- package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts +4 -2
- package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +2 -136
- package/development/seat-reservation/seat-reservation-navigation-services.d.ts +0 -3
- package/development/seat-reservation/seat-reservation-navigation-services.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-navigation-services.js +10 -5
- package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts +2 -1
- package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +2 -607
- package/development/seat-reservation/seat-reservation-place-control.d.ts +0 -3
- package/development/seat-reservation/seat-reservation-place-control.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-place-control.js +10 -5
- package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.d.ts +4 -2
- package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +2 -34
- package/development/seat-reservation/seat-reservation-scoped.d.ts +0 -3
- package/development/seat-reservation/seat-reservation-scoped.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-scoped.js +10 -5
- package/development/seat-reservation/seat-reservation.d.ts +0 -3
- package/development/seat-reservation/seat-reservation.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation.js +10 -6
- package/development/seat-reservation-area.component-ORuli_DC.js +138 -0
- package/development/seat-reservation-graphic.component-lZXqHWIz.js +193 -0
- package/development/seat-reservation-navigation-coach.component-D2QXTMJJ.js +828 -0
- package/development/seat-reservation-navigation-services.component-Bg1adRlU.js +179 -0
- package/development/seat-reservation-place-control.component-CwUX-QYO.js +726 -0
- package/development/seat-reservation-scoped.component-uLT33P9y.js +31 -0
- package/development/seat-reservation.component-MOv5kHDC.js +821 -0
- package/development/seat-reservation.d.ts +1 -11
- package/development/seat-reservation.d.ts.map +1 -1
- package/development/seat-reservation.js +24 -27
- package/development/seat-reservation.pure.d.ts +15 -0
- package/development/seat-reservation.pure.d.ts.map +1 -0
- package/development/seat-reservation.pure.js +15 -0
- package/development/svgs-kDpBCto5.js +28 -0
- package/development/timetable-duration/timetable-duration.component.d.ts +4 -2
- package/development/timetable-duration/timetable-duration.component.d.ts.map +1 -1
- package/development/timetable-duration/timetable-duration.component.js +2 -114
- package/development/timetable-duration.component-D21SXsQq.js +125 -0
- package/development/timetable-duration.d.ts +1 -4
- package/development/timetable-duration.d.ts.map +1 -1
- package/development/timetable-duration.js +9 -5
- package/development/timetable-duration.pure.d.ts +3 -0
- package/development/timetable-duration.pure.d.ts.map +1 -0
- package/development/timetable-duration.pure.js +2 -0
- package/development/timetable-row/timetable-row.component.d.ts +4 -2
- package/development/timetable-row/timetable-row.component.d.ts.map +1 -1
- package/development/timetable-row/timetable-row.component.js +2 -787
- package/development/timetable-row.component-Y5w8vEwP.js +932 -0
- package/development/timetable-row.d.ts +1 -4
- package/development/timetable-row.d.ts.map +1 -1
- package/development/timetable-row.js +9 -12
- package/development/timetable-row.pure.d.ts +3 -0
- package/development/timetable-row.pure.d.ts.map +1 -0
- package/development/timetable-row.pure.js +2 -0
- package/development/toDate-Biiv3kyf.js +150 -0
- package/differenceInMinutes-Dr9gRqtu.js +27 -0
- package/format-CM5exOsN.js +1103 -0
- package/index.d.ts +9 -20
- package/index.js +9 -20
- package/isValid-B9oVW3lA.js +36 -0
- package/journey-summary/journey-summary.component.js +2 -193
- package/journey-summary.component-Cq_4kaOp.js +264 -0
- package/journey-summary.js +6 -4
- package/journey-summary.pure.js +2 -0
- package/mapper-DkiDDseD.js +11382 -0
- package/package.json +47 -2
- package/pearl-chain/pearl-chain.component.js +2 -164
- package/pearl-chain-time/pearl-chain-time.component.js +2 -156
- package/pearl-chain-time.component-DGDW5S1c.js +239 -0
- package/pearl-chain-time.js +6 -4
- package/pearl-chain-time.pure.js +2 -0
- package/pearl-chain-vertical/pearl-chain-vertical.component.js +2 -24
- package/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +2 -76
- package/pearl-chain-vertical-item.component-G22bWhLU.js +108 -0
- package/pearl-chain-vertical-item.js +6 -4
- package/pearl-chain-vertical-item.pure.js +2 -0
- package/pearl-chain-vertical.component-CXIDT5RD.js +21 -0
- package/pearl-chain-vertical.js +6 -4
- package/pearl-chain-vertical.pure.js +2 -0
- package/pearl-chain.component-DmjkVIva.js +194 -0
- package/pearl-chain.js +6 -4
- package/pearl-chain.pure.js +2 -0
- package/seat-reservation/common/mapper/icon-mapper.js +71 -71
- package/seat-reservation/common/mapper/mapper.js +2 -91
- package/seat-reservation/common/mapper.js +3 -9
- package/seat-reservation/common/svgs.js +2 -243
- package/seat-reservation/common/translations/i18n.js +1084 -891
- package/seat-reservation/common/translations.js +2 -4
- package/seat-reservation/common/types.js +0 -1
- package/seat-reservation/common.js +9 -13
- package/seat-reservation/seat-reservation/seat-reservation-base-element.js +834 -809
- package/seat-reservation/seat-reservation/seat-reservation.component.js +2 -422
- package/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +2 -50
- package/seat-reservation/seat-reservation-area.js +4 -4
- package/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +69 -70
- package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +2 -73
- package/seat-reservation/seat-reservation-graphic.js +4 -4
- package/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +2 -232
- package/seat-reservation/seat-reservation-navigation-coach.js +4 -4
- package/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +2 -83
- package/seat-reservation/seat-reservation-navigation-services.js +4 -4
- package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +2 -202
- package/seat-reservation/seat-reservation-place-control.js +4 -4
- package/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +2 -20
- package/seat-reservation/seat-reservation-scoped.js +4 -4
- package/seat-reservation/seat-reservation.js +5 -6
- package/seat-reservation-area.component-COD6CXhP.js +75 -0
- package/seat-reservation-graphic.component-BNfU5tQM.js +102 -0
- package/seat-reservation-navigation-coach.component-Bh9ILq60.js +333 -0
- package/seat-reservation-navigation-services.component-QL0UnilZ.js +127 -0
- package/seat-reservation-place-control.component-BfnZUyHv.js +322 -0
- package/seat-reservation-scoped.component-CY04BT_4.js +17 -0
- package/seat-reservation.component-zrQHTRl3.js +364 -0
- package/seat-reservation.js +17 -29
- package/seat-reservation.pure.js +15 -0
- package/svgs-D5DhLHxC.js +26 -0
- package/timetable-duration/timetable-duration.component.js +2 -56
- package/timetable-duration.component-DaYoJUGS.js +65 -0
- package/timetable-duration.js +6 -4
- package/timetable-duration.pure.js +2 -0
- package/timetable-row/timetable-row.component.js +2 -426
- package/timetable-row.component-BDMAEsbR.js +559 -0
- package/timetable-row.js +6 -11
- package/timetable-row.pure.js +2 -0
- package/toDate-p-Tpkb7t.js +16 -0
- package/development/differenceInMinutes-B0dawX-5.js +0 -26
- package/development/format-BMkeaqaF.js +0 -1433
- package/development/isValid-BYRch7pV.js +0 -53
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-bus.d.ts +0 -69
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-bus.d.ts.map +0 -1
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-bus.js +0 -559
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-decks.d.ts +0 -123
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-decks.d.ts.map +0 -1
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-decks.js +0 -972
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-giruno.d.ts +0 -114
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-giruno.d.ts.map +0 -1
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-giruno.js +0 -20368
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-others.d.ts +0 -85
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-others.d.ts.map +0 -1
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-others.js +0 -1739
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-train.d.ts +0 -69
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-train.d.ts.map +0 -1
- package/development/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-train.js +0 -9783
- package/development/toDate-BWb6Z1JD.js +0 -24
- package/differenceInMinutes-COvvdYsJ.js +0 -23
- package/format-CmKROkbc.js +0 -1186
- package/isValid-m3_OsPaB.js +0 -45
- package/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-bus.js +0 -558
- package/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-decks.js +0 -970
- package/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-giruno.js +0 -20367
- package/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-others.js +0 -1738
- package/seat-reservation/common/mapper/sample-data/seat-reservation-sample-data-train.js +0 -9782
- package/toDate-Bw2KTWeq.js +0 -15
|
@@ -1,867 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { boxSizingStyles } from "@sbb-esta/lyne-elements/core/styles.js";
|
|
4
|
-
import { css, html, nothing } from "lit";
|
|
5
|
-
import { customElement } from "lit/decorators.js";
|
|
6
|
-
import { classMap } from "lit/directives/class-map.js";
|
|
7
|
-
import { repeat } from "lit/directives/repeat.js";
|
|
8
|
-
import { styleMap } from "lit/directives/style-map.js";
|
|
9
|
-
import { getI18nSeatReservation } from "../common.js";
|
|
10
|
-
import { SeatReservationBaseElement } from "./seat-reservation-base-element.js";
|
|
11
|
-
import "@sbb-esta/lyne-elements/button.js";
|
|
12
|
-
import "@sbb-esta/lyne-elements/screen-reader-only.js";
|
|
13
|
-
import "@sbb-esta/lyne-elements/popover.js";
|
|
14
|
-
import "../seat-reservation-area.js";
|
|
15
|
-
import "../seat-reservation-graphic.js";
|
|
16
|
-
import "../seat-reservation-place-control.js";
|
|
17
|
-
import "../seat-reservation-navigation-coach.js";
|
|
18
|
-
import "../seat-reservation-scoped.js";
|
|
19
|
-
const style = css`:host {
|
|
20
|
-
--sbb-seat-reservation-grid-size: 16px;
|
|
21
|
-
--sbb-seat-reservation-height: 0;
|
|
22
|
-
--sbb-seat-reservation-decks: 1;
|
|
23
|
-
display: block;
|
|
24
|
-
height: inherit;
|
|
25
|
-
}
|
|
26
|
-
:host ::part(coach-floor) {
|
|
27
|
-
fill: var(--sbb-background-color-2);
|
|
28
|
-
}
|
|
29
|
-
@media (forced-colors: active) {
|
|
30
|
-
:host ::part(coach-floor) {
|
|
31
|
-
fill: transparent;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
:host(:dir(rtl)) :not(.sbb-sr-place-ctrl--type-bicycle,
|
|
36
|
-
.sbb-sr-place-ctrl--orientation-90,
|
|
37
|
-
.sbb-sr-place-ctrl--orientation-270,
|
|
38
|
-
.sbb-sr-place-ctrl--state-selected) ::part(coach-floor) {
|
|
39
|
-
rotate: calc(180 * 1deg);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
[popover]:where(sbb-popover) {
|
|
43
|
-
margin: 0;
|
|
44
|
-
padding: 0;
|
|
45
|
-
border: none;
|
|
46
|
-
width: auto;
|
|
47
|
-
height: auto;
|
|
48
|
-
background-color: transparent;
|
|
49
|
-
color: inherit;
|
|
50
|
-
pointer-events: none;
|
|
51
|
-
}
|
|
52
|
-
[popover]:where(sbb-popover) .sbb-sr-popover {
|
|
53
|
-
margin-block: calc(4 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
:host([align-vertical]) .sbb-sr__component {
|
|
57
|
-
flex-direction: row-reverse;
|
|
58
|
-
justify-content: flex-end;
|
|
59
|
-
gap: calc(22 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
60
|
-
height: inherit;
|
|
61
|
-
}
|
|
62
|
-
@media (min-width: calc(37.5rem)) {
|
|
63
|
-
:host([align-vertical]) .sbb-sr__component {
|
|
64
|
-
gap: calc(54 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
:host([align-vertical]) .sbb-sr__component nav.sbb-sr-navigation,
|
|
68
|
-
:host([align-vertical]) .sbb-sr__component ul.sbb-sr-navigation__list-coaches {
|
|
69
|
-
flex-direction: column;
|
|
70
|
-
}
|
|
71
|
-
:host([align-vertical]) .sbb-sr__component nav.sbb-sr-navigation {
|
|
72
|
-
padding: calc(16 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem)) 0;
|
|
73
|
-
}
|
|
74
|
-
:host([align-vertical]) .sbb-sr__component nav.sbb-sr-navigation .sbb-sr__navigation-control-button {
|
|
75
|
-
left: calc(1 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
76
|
-
top: 0;
|
|
77
|
-
rotate: 90deg;
|
|
78
|
-
}
|
|
79
|
-
@media (min-width: calc(64rem)) {
|
|
80
|
-
:host([align-vertical]) .sbb-sr__component nav.sbb-sr-navigation .sbb-sr__navigation-control-button {
|
|
81
|
-
left: calc(-1 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
:host([align-vertical]) .sbb-sr__component nav.sbb-sr-navigation ul.sbb-sr-navigation__list-coaches {
|
|
85
|
-
max-width: initial;
|
|
86
|
-
padding: calc(5 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
87
|
-
overflow: hidden scroll;
|
|
88
|
-
}
|
|
89
|
-
:host([align-vertical]) .sbb-sr__wrapper-coach-decks {
|
|
90
|
-
flex-direction: column;
|
|
91
|
-
}
|
|
92
|
-
:host([align-vertical]) .sbb-sr__wrapper-coach-decks .sbb-sr__wrapper-deck-labels {
|
|
93
|
-
flex-direction: column-reverse;
|
|
94
|
-
width: calc((var(--sbb-seat-reservation-height) + 24) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
95
|
-
height: initial;
|
|
96
|
-
}
|
|
97
|
-
:host([align-vertical]) .sbb-sr__wrapper-coach-decks .sbb-sr__wrapper-deck-labels b {
|
|
98
|
-
inline-size: calc(50% - 16 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
99
|
-
block-size: calc(20 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
100
|
-
margin-bottom: calc(16 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
101
|
-
rotate: initial;
|
|
102
|
-
writing-mode: initial;
|
|
103
|
-
}
|
|
104
|
-
:host([align-vertical]) .sbb-sr__wrapper-scrollarea {
|
|
105
|
-
width: calc((var(--sbb-seat-reservation-height) + 24) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
106
|
-
height: 100%;
|
|
107
|
-
overflow: hidden scroll;
|
|
108
|
-
}
|
|
109
|
-
:host([align-vertical]) .sbb-sr__wrapper-scrollarea .sbb-sr__parent {
|
|
110
|
-
rotate: 90deg;
|
|
111
|
-
}
|
|
112
|
-
:host([align-vertical]) .sbb-sr-travel-direction-wrapper {
|
|
113
|
-
width: calc(var(--sbb-seat-reservation-height) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
114
|
-
margin-block-start: calc(4 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
.sbb-sr-navigation {
|
|
118
|
-
gap: calc(3 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
.sbb-sr-navigation .sbb-sr__navigation-control-button {
|
|
122
|
-
position: relative;
|
|
123
|
-
top: calc(2 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
124
|
-
}
|
|
125
|
-
@media (min-width: calc(64rem)) {
|
|
126
|
-
.sbb-sr-navigation .sbb-sr__navigation-control-button {
|
|
127
|
-
top: 0;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
.sbb-sr__component {
|
|
132
|
-
display: flex;
|
|
133
|
-
flex-direction: column;
|
|
134
|
-
gap: calc(64 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem) - 16px);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
.sbb-sr-travel-direction-wrapper {
|
|
138
|
-
display: flex;
|
|
139
|
-
justify-content: center;
|
|
140
|
-
align-items: center;
|
|
141
|
-
column-gap: calc(4 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
142
|
-
margin-block: calc(8 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem)) calc(4 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
143
|
-
font-size: var(--sbb-text-font-size-s);
|
|
144
|
-
}
|
|
145
|
-
.sbb-sr-travel-direction-wrapper .sbb-sr__travel-direction--arrow {
|
|
146
|
-
display: flex;
|
|
147
|
-
align-items: center;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
.sbb-sr-navigation-wrapper {
|
|
151
|
-
display: flex;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
.sbb-sr-navigation {
|
|
155
|
-
display: flex;
|
|
156
|
-
justify-content: center;
|
|
157
|
-
width: 100%;
|
|
158
|
-
padding-inline: 16px;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
.sbb-sr-navigation__list-coaches {
|
|
162
|
-
list-style: none;
|
|
163
|
-
margin: 0;
|
|
164
|
-
padding: 0;
|
|
165
|
-
font-size: inherit;
|
|
166
|
-
--sbb-scrollbar-thumb-width: 0.125rem;
|
|
167
|
-
--sbb-scrollbar-thumb-width-hover: 0.25rem;
|
|
168
|
-
--sbb-scrollbar-width-firefox: thin;
|
|
169
|
-
--sbb-scrollbar-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);
|
|
170
|
-
--sbb-scrollbar-color: light-dark(
|
|
171
|
-
color-mix(in srgb, var(--sbb-color-black) 30%, transparent),
|
|
172
|
-
color-mix(in srgb, var(--sbb-color-white) 30%, transparent)
|
|
173
|
-
);
|
|
174
|
-
--sbb-scrollbar-color-hover: color-mix(in srgb, var(--sbb-color-black) 60%, transparent);
|
|
175
|
-
--sbb-scrollbar-color-hover: light-dark(
|
|
176
|
-
color-mix(in srgb, var(--sbb-color-black) 60%, transparent),
|
|
177
|
-
color-mix(in srgb, var(--sbb-color-white) 60%, transparent)
|
|
178
|
-
);
|
|
179
|
-
--sbb-scrollbar-track-color: transparent;
|
|
180
|
-
--sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);
|
|
181
|
-
}
|
|
182
|
-
.sbb-sr-navigation__list-coaches::-webkit-scrollbar {
|
|
183
|
-
width: var(--sbb-scrollbar-width);
|
|
184
|
-
height: var(--sbb-scrollbar-width);
|
|
185
|
-
background-color: var(--sbb-scrollbar-track-color, transparent);
|
|
186
|
-
}
|
|
187
|
-
.sbb-sr-navigation__list-coaches::-webkit-scrollbar-corner {
|
|
188
|
-
background-color: var(--sbb-scrollbar-track-color, transparent);
|
|
189
|
-
}
|
|
190
|
-
.sbb-sr-navigation__list-coaches::-webkit-scrollbar-thumb {
|
|
191
|
-
background-color: var(--sbb-scrollbar-color, currentcolor);
|
|
192
|
-
border: calc(0.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width))) solid transparent;
|
|
193
|
-
border-radius: var(--sbb-border-radius-4x);
|
|
194
|
-
background-clip: padding-box;
|
|
195
|
-
}
|
|
196
|
-
.sbb-sr-navigation__list-coaches::-webkit-scrollbar-thumb:hover {
|
|
197
|
-
background-color: var(--sbb-scrollbar-color-hover, currentcolor);
|
|
198
|
-
border-width: calc(0.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width-hover)));
|
|
199
|
-
}
|
|
200
|
-
.sbb-sr-navigation__list-coaches::-webkit-scrollbar-button, .sbb-sr-navigation__list-coaches::-webkit-scrollbar-corner {
|
|
201
|
-
display: none;
|
|
202
|
-
}
|
|
203
|
-
@supports not selector(::-webkit-scrollbar) {
|
|
204
|
-
.sbb-sr-navigation__list-coaches {
|
|
205
|
-
scrollbar-width: var(--sbb-scrollbar-width-firefox);
|
|
206
|
-
scrollbar-color: var(--sbb-scrollbar-color, currentcolor) var(--sbb-scrollbar-track-color, transparent);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
.sbb-sr-navigation__list-coaches {
|
|
210
|
-
display: flex;
|
|
211
|
-
flex-wrap: nowrap;
|
|
212
|
-
gap: calc(4 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
213
|
-
padding: calc(6 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem)) calc(5 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem)) 0;
|
|
214
|
-
max-width: 856px;
|
|
215
|
-
--sbb-scrollbar-color: transparent;
|
|
216
|
-
overflow: scroll hidden;
|
|
217
|
-
position: relative;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
.sbb-sr__wrapper-coach-decks {
|
|
221
|
-
display: flex;
|
|
222
|
-
overflow: hidden;
|
|
223
|
-
height: inherit;
|
|
224
|
-
}
|
|
225
|
-
.sbb-sr__wrapper-coach-decks .sbb-sr__wrapper-deck-labels {
|
|
226
|
-
display: flex;
|
|
227
|
-
justify-content: space-between;
|
|
228
|
-
height: calc(var(--sbb-seat-reservation-height) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
229
|
-
writing-mode: vertical-lr;
|
|
230
|
-
}
|
|
231
|
-
.sbb-sr__wrapper-coach-decks .sbb-sr__wrapper-deck-labels b {
|
|
232
|
-
height: calc(50% - 16 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
233
|
-
width: calc(20 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
234
|
-
margin-block-end: 16px;
|
|
235
|
-
rotate: 180deg;
|
|
236
|
-
text-align: center;
|
|
237
|
-
line-height: calc(20 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
.sbb-sr__wrapper-scrollarea {
|
|
241
|
-
--sbb-scrollbar-thumb-width: 0.125rem;
|
|
242
|
-
--sbb-scrollbar-thumb-width-hover: 0.25rem;
|
|
243
|
-
--sbb-scrollbar-width-firefox: thin;
|
|
244
|
-
--sbb-scrollbar-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);
|
|
245
|
-
--sbb-scrollbar-color: light-dark(
|
|
246
|
-
color-mix(in srgb, var(--sbb-color-black) 30%, transparent),
|
|
247
|
-
color-mix(in srgb, var(--sbb-color-white) 30%, transparent)
|
|
248
|
-
);
|
|
249
|
-
--sbb-scrollbar-color-hover: color-mix(in srgb, var(--sbb-color-black) 60%, transparent);
|
|
250
|
-
--sbb-scrollbar-color-hover: light-dark(
|
|
251
|
-
color-mix(in srgb, var(--sbb-color-black) 60%, transparent),
|
|
252
|
-
color-mix(in srgb, var(--sbb-color-white) 60%, transparent)
|
|
253
|
-
);
|
|
254
|
-
--sbb-scrollbar-track-color: transparent;
|
|
255
|
-
--sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);
|
|
256
|
-
}
|
|
257
|
-
.sbb-sr__wrapper-scrollarea::-webkit-scrollbar {
|
|
258
|
-
width: var(--sbb-scrollbar-width);
|
|
259
|
-
height: var(--sbb-scrollbar-width);
|
|
260
|
-
background-color: var(--sbb-scrollbar-track-color, transparent);
|
|
261
|
-
}
|
|
262
|
-
.sbb-sr__wrapper-scrollarea::-webkit-scrollbar-corner {
|
|
263
|
-
background-color: var(--sbb-scrollbar-track-color, transparent);
|
|
264
|
-
}
|
|
265
|
-
.sbb-sr__wrapper-scrollarea::-webkit-scrollbar-thumb {
|
|
266
|
-
background-color: var(--sbb-scrollbar-color, currentcolor);
|
|
267
|
-
border: calc(0.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width))) solid transparent;
|
|
268
|
-
border-radius: var(--sbb-border-radius-4x);
|
|
269
|
-
background-clip: padding-box;
|
|
270
|
-
}
|
|
271
|
-
.sbb-sr__wrapper-scrollarea::-webkit-scrollbar-thumb:hover {
|
|
272
|
-
background-color: var(--sbb-scrollbar-color-hover, currentcolor);
|
|
273
|
-
border-width: calc(0.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width-hover)));
|
|
274
|
-
}
|
|
275
|
-
.sbb-sr__wrapper-scrollarea::-webkit-scrollbar-button, .sbb-sr__wrapper-scrollarea::-webkit-scrollbar-corner {
|
|
276
|
-
display: none;
|
|
277
|
-
}
|
|
278
|
-
@supports not selector(::-webkit-scrollbar) {
|
|
279
|
-
.sbb-sr__wrapper-scrollarea {
|
|
280
|
-
scrollbar-width: var(--sbb-scrollbar-width-firefox);
|
|
281
|
-
scrollbar-color: var(--sbb-scrollbar-color, currentcolor) var(--sbb-scrollbar-track-color, transparent);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
.sbb-sr__wrapper-scrollarea {
|
|
285
|
-
overflow: scroll hidden;
|
|
286
|
-
padding-block: calc(8 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem)) calc(16 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
287
|
-
}
|
|
288
|
-
.sbb-sr__wrapper-scrollarea .sbb-sr__parent {
|
|
289
|
-
display: flex;
|
|
290
|
-
flex-direction: column;
|
|
291
|
-
position: relative;
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
.sbb-sr__list-decks {
|
|
295
|
-
list-style: none;
|
|
296
|
-
margin: 0;
|
|
297
|
-
padding: 0;
|
|
298
|
-
font-size: inherit;
|
|
299
|
-
display: flex;
|
|
300
|
-
flex-direction: column;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
.sbb-sr__list-decks--gap {
|
|
304
|
-
gap: calc(48 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
.sbb-sr__list-item-deck {
|
|
308
|
-
position: relative;
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
.sbb-sr__list-coaches {
|
|
312
|
-
list-style: none;
|
|
313
|
-
margin: 0;
|
|
314
|
-
padding: 0;
|
|
315
|
-
font-size: inherit;
|
|
316
|
-
display: flex;
|
|
317
|
-
gap: calc(4 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
.sbb-sr__list-decks:has(.sbb-sr-coach-has-overhanging-elements) .sbb-sr__list-coaches {
|
|
321
|
-
gap: calc(8 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
.sbb-sr__item-coach {
|
|
325
|
-
position: relative;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
.sbb-sr-coach-wrapper__table {
|
|
329
|
-
outline: 0;
|
|
330
|
-
}`;
|
|
331
|
-
let SbbSeatReservationElement = (() => {
|
|
332
|
-
var _a;
|
|
333
|
-
let _classDecorators = [customElement("sbb-seat-reservation")];
|
|
334
|
-
let _classDescriptor;
|
|
335
|
-
let _classExtraInitializers = [];
|
|
336
|
-
let _classThis;
|
|
337
|
-
let _classSuper = SeatReservationBaseElement;
|
|
338
|
-
_a = class extends _classSuper {
|
|
339
|
-
constructor() {
|
|
340
|
-
super(...arguments);
|
|
341
|
-
this._language = new SbbLanguageController(this);
|
|
342
|
-
this._notFixedRotatableAreaIcons = ["ENTRY_EXIT"];
|
|
343
|
-
}
|
|
344
|
-
willUpdate(changedProperties) {
|
|
345
|
-
super.willUpdate(changedProperties);
|
|
346
|
-
if (changedProperties.has("hasNavigation")) {
|
|
347
|
-
if (this.hasNavigation) {
|
|
348
|
-
this.shadowRoot?.querySelectorAll("table").forEach((table) => table.removeAttribute("tabindex"));
|
|
349
|
-
} else {
|
|
350
|
-
this.shadowRoot?.querySelectorAll("table").forEach((table) => table.setAttribute("tabindex", "0"));
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
firstUpdated(changedProperties) {
|
|
355
|
-
super.firstUpdated(changedProperties);
|
|
356
|
-
this.updateComplete.then(() => {
|
|
357
|
-
this.initNavigationSelectionByScrollEvent();
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
|
-
render() {
|
|
361
|
-
this._initVehicleSeatReservationConstruction();
|
|
362
|
-
return this._coachesHtmlTemplate || null;
|
|
363
|
-
}
|
|
364
|
-
_initVehicleSeatReservationConstruction() {
|
|
365
|
-
this._coachesHtmlTemplate = html`
|
|
366
|
-
${this._renderTravelDirection()}
|
|
367
|
-
<div class="sbb-sr__component">
|
|
368
|
-
${this._renderNavigation()}
|
|
369
|
-
<div
|
|
370
|
-
class="sbb-sr__wrapper-coach-decks"
|
|
371
|
-
@keydown=${(evt) => this.keyboardSeatmapEventHandling(evt)}
|
|
372
|
-
>
|
|
373
|
-
<div class="sbb-sr__wrapper-deck-labels">${this._renderDeckLabels()}</div>
|
|
374
|
-
<div
|
|
375
|
-
@scroll=${() => this.coachAreaScrollend()}
|
|
376
|
-
id="sbb-sr__wrapper-scrollarea"
|
|
377
|
-
class="sbb-sr__wrapper-scrollarea"
|
|
378
|
-
tabindex="-1"
|
|
379
|
-
>
|
|
380
|
-
<div id="sbb-sr__parent-area" class="sbb-sr__parent">
|
|
381
|
-
<ul
|
|
382
|
-
class="${classMap({
|
|
383
|
-
"sbb-sr__list-decks": true,
|
|
384
|
-
"sbb-sr__list-decks--gap": this.hasMultipleDecks
|
|
385
|
-
})}"
|
|
386
|
-
>
|
|
387
|
-
${this.seatReservations?.map((seatReservation, coachDeckIndex) => {
|
|
388
|
-
return html`<li class="sbb-sr__list-item-deck">
|
|
389
|
-
<ul class="sbb-sr__list-coaches" role="presentation">
|
|
390
|
-
${this._renderCoaches(seatReservation, coachDeckIndex)}
|
|
391
|
-
</ul>
|
|
392
|
-
</li>`;
|
|
393
|
-
})}
|
|
394
|
-
</ul>
|
|
395
|
-
</div>
|
|
396
|
-
</div>
|
|
397
|
-
</div>
|
|
398
|
-
</div>
|
|
399
|
-
`;
|
|
400
|
-
}
|
|
401
|
-
_renderDeckLabels() {
|
|
402
|
-
if (!this.hasMultipleDecks)
|
|
403
|
-
return null;
|
|
404
|
-
return this.seatReservations.map((seatReservation) => {
|
|
405
|
-
const deckDescription = getI18nSeatReservation(seatReservation.deckCoachLevel, this._language.current);
|
|
406
|
-
return html`<b aria-hidden="true">${deckDescription}</b>`;
|
|
407
|
-
});
|
|
408
|
-
}
|
|
409
|
-
_renderNavigationControlButton(btnDirection) {
|
|
410
|
-
if (!this.hasNavigation || !this.seatReservations)
|
|
411
|
-
return null;
|
|
412
|
-
const btnNavigationDirectionId = btnDirection == "DIRECTION_RIGHT" ? "sbb-sr-navigation__wrapper-button-direction--right" : "sbb-sr-navigation__wrapper-button-direction--left";
|
|
413
|
-
const btnIcon = btnDirection == "DIRECTION_RIGHT" ? "chevron-small-right-small" : "chevron-small-left-small";
|
|
414
|
-
const btnAriaDescription = btnDirection == "DIRECTION_RIGHT" ? getI18nSeatReservation("SEAT_RESERVATION_END", this._language.current) : getI18nSeatReservation("SEAT_RESERVATION_BEGIN", this._language.current);
|
|
415
|
-
let btnDisabled = true;
|
|
416
|
-
if (btnDirection == "DIRECTION_LEFT" && this.selectedCoachIndex > 0) {
|
|
417
|
-
btnDisabled = false;
|
|
418
|
-
} else if (btnDirection == "DIRECTION_RIGHT" && this.selectedCoachIndex < this.coachItemDetailsElements.length - 1) {
|
|
419
|
-
btnDisabled = false;
|
|
420
|
-
}
|
|
421
|
-
return html`<div class="sbb-sr-navigation__wrapper-button-direction">
|
|
422
|
-
<sbb-secondary-button
|
|
423
|
-
@click="${() => this.navigateByDirectionBtn(btnDirection)}"
|
|
424
|
-
@focus="${() => this.onFocusNavDirectionButton()}"
|
|
425
|
-
id="${btnNavigationDirectionId}"
|
|
426
|
-
class="sbb-sr__navigation-control-button"
|
|
427
|
-
size="m"
|
|
428
|
-
icon-name="${btnIcon}"
|
|
429
|
-
type="button"
|
|
430
|
-
aria-label="${btnAriaDescription}"
|
|
431
|
-
role="button"
|
|
432
|
-
.disabledInteractive="${btnDisabled || nothing}"
|
|
433
|
-
.disabled="${btnDisabled || nothing}"
|
|
434
|
-
></sbb-secondary-button>
|
|
435
|
-
</div>`;
|
|
436
|
-
}
|
|
437
|
-
_renderTravelDirection() {
|
|
438
|
-
if (!this.travelDirection || this.travelDirection === "NONE")
|
|
439
|
-
return null;
|
|
440
|
-
const labelText = getI18nSeatReservation("SEAT_RESERVATION_TRAVEL_DIRECTION", this._language.current);
|
|
441
|
-
const arrowDirection = this.alignVertical ? this.travelDirection === "RIGHT" ? "down" : "up" : this.travelDirection === "RIGHT" ? "right" : "left";
|
|
442
|
-
const iconName = `arrow-${arrowDirection}-small`;
|
|
443
|
-
return html`<div class="sbb-sr-travel-direction-wrapper">
|
|
444
|
-
<div class="sbb-sr__travel-direction--arrow">
|
|
445
|
-
<sbb-icon slot="icon" name="${iconName}"></sbb-icon>
|
|
446
|
-
</div>
|
|
447
|
-
<div class="sbb-sr__travel-direction--label">${labelText}</div>
|
|
448
|
-
</div>`;
|
|
449
|
-
}
|
|
450
|
-
_renderNavigation() {
|
|
451
|
-
if (!this.hasNavigation || !this.seatReservations)
|
|
452
|
-
return null;
|
|
453
|
-
return html`<div class="sbb-sr-navigation-wrapper">
|
|
454
|
-
<nav id="sbb-sr-navigation" class="sbb-sr-navigation">
|
|
455
|
-
${this._renderNavigationControlButton("DIRECTION_LEFT")}
|
|
456
|
-
<ul
|
|
457
|
-
id="sbb-sr__navigation-list-coaches"
|
|
458
|
-
class="sbb-sr-navigation__list-coaches"
|
|
459
|
-
aria-label="${getI18nSeatReservation("SEAT_RESERVATION_NAVIGATION", this._language.current)}"
|
|
460
|
-
>
|
|
461
|
-
${this.coachItemDetailsElements.map((coachItemDetails, index) => {
|
|
462
|
-
return html`<li>
|
|
463
|
-
<sbb-seat-reservation-navigation-coach
|
|
464
|
-
@selectcoach=${(event) => this._onSelectNavCoach(event)}
|
|
465
|
-
@focuscoach=${() => this._onFocusNavCoach()}
|
|
466
|
-
@keyup=${(evt) => this.onKeyNavigationNavCoachButton(evt, index)}
|
|
467
|
-
index="${index}"
|
|
468
|
-
.selected=${this.selectedCoachIndex === index}
|
|
469
|
-
.focused=${this.focusedCoachIndex === index}
|
|
470
|
-
.hovered=${this.hoveredCoachIndex === index}
|
|
471
|
-
.nativeFocusActive=${this.hasSeatReservationNativeFocus}
|
|
472
|
-
.coachItemDetails="${coachItemDetails}"
|
|
473
|
-
?vertical="${this.alignVertical}"
|
|
474
|
-
?showTitleInfo="${this.showTitleInfo}"
|
|
475
|
-
>
|
|
476
|
-
</sbb-seat-reservation-navigation-coach>
|
|
477
|
-
</li>`;
|
|
478
|
-
})}
|
|
479
|
-
</ul>
|
|
480
|
-
${this._renderNavigationControlButton("DIRECTION_RIGHT")}
|
|
481
|
-
</nav>
|
|
482
|
-
</div>`;
|
|
483
|
-
}
|
|
484
|
-
/**
|
|
485
|
-
*
|
|
486
|
-
* @returns
|
|
487
|
-
* @param seatReservation
|
|
488
|
-
* @param coachDeckIndex
|
|
489
|
-
*/
|
|
490
|
-
_renderCoaches(seatReservation, coachDeckIndex) {
|
|
491
|
-
const coaches = JSON.parse(JSON.stringify(seatReservation?.coachItems));
|
|
492
|
-
if (!coaches) {
|
|
493
|
-
return null;
|
|
494
|
-
}
|
|
495
|
-
return coaches.map((coachItem, coachIndex) => {
|
|
496
|
-
return html`
|
|
497
|
-
<li class="sbb-sr__item-coach">
|
|
498
|
-
${this._renderCoachElement(coachItem, coachIndex, coachDeckIndex, seatReservation.deckCoachIndex)}
|
|
499
|
-
</li>
|
|
500
|
-
`;
|
|
501
|
-
});
|
|
502
|
-
}
|
|
503
|
-
_renderCoachElement(coachItem, coachIndex, coachDeckIndex, placeCoachDeckIndex) {
|
|
504
|
-
const calculatedCoachDimension = this.getCalculatedDimension(coachItem.dimension);
|
|
505
|
-
const descriptionTableCoachWithServices = this._getDescriptionTableCoach(coachItem);
|
|
506
|
-
return html`<sbb-seat-reservation-scoped
|
|
507
|
-
style=${styleMap({
|
|
508
|
-
"--sbb-seat-reservation-scoped-width": calculatedCoachDimension.w,
|
|
509
|
-
"--sbb-seat-reservation-scoped-height": calculatedCoachDimension.h
|
|
510
|
-
})}
|
|
511
|
-
>
|
|
512
|
-
${this._getRenderedCoachBorders(coachItem, coachIndex)}
|
|
513
|
-
${this._getRenderedGraphicalElements(coachItem.graphicElements || [], coachItem.dimension, coachIndex, coachDeckIndex)}
|
|
514
|
-
${this._getRenderedServiceElements(coachIndex, coachDeckIndex, coachItem.serviceElements)}
|
|
515
|
-
|
|
516
|
-
<table
|
|
517
|
-
@focus=${() => this.onFocusTableCoachAndPreselectPlace(coachIndex)}
|
|
518
|
-
id="sbb-sr-coach-${coachIndex}"
|
|
519
|
-
class="sbb-sr-coach-wrapper__table"
|
|
520
|
-
aria-describedby="sbb-sr-coach-caption-${coachIndex}"
|
|
521
|
-
tabindex="-1"
|
|
522
|
-
>
|
|
523
|
-
<caption id="sbb-sr-coach-caption-${coachIndex}" tabindex="-1">
|
|
524
|
-
<sbb-screen-reader-only>${descriptionTableCoachWithServices}</sbb-screen-reader-only>
|
|
525
|
-
</caption>
|
|
526
|
-
${this._getRenderedRowPlaces(coachItem, coachIndex, coachDeckIndex, placeCoachDeckIndex)}
|
|
527
|
-
</table>
|
|
528
|
-
</sbb-seat-reservation-scoped>`;
|
|
529
|
-
}
|
|
530
|
-
/**
|
|
531
|
-
* @returns Returns the border graphic (COACH_BORDER_MIDDLE) of a coach with calculated border gap and coach width,
|
|
532
|
-
* depending on whether the coach is with a driver area or without.
|
|
533
|
-
*/
|
|
534
|
-
_getRenderedCoachBorders(coachItem, coachIndex) {
|
|
535
|
-
if (!coachItem.graphicElements)
|
|
536
|
-
return null;
|
|
537
|
-
const COACH_PASSAGE_WIDTH = 1;
|
|
538
|
-
const driverArea = this.coachItemDetailsElements[coachIndex]?.driverAreaElements?.driverArea;
|
|
539
|
-
const driverAreaNoVerticalWall = this.coachItemDetailsElements[coachIndex]?.driverAreaElements?.driverAreaNoVerticalWall;
|
|
540
|
-
let borderWidth = driverArea ? coachItem.dimension.w - driverArea.dimension.w - COACH_PASSAGE_WIDTH : coachItem.dimension.w - COACH_PASSAGE_WIDTH * 2;
|
|
541
|
-
borderWidth *= this.baseGridSize;
|
|
542
|
-
const borderHeight = (coachItem.dimension.h + this.coachBorderOffset * 2) * this.baseGridSize;
|
|
543
|
-
let borderOffsetX = driverArea && driverArea.position.x === 0 ? driverArea?.dimension.w * this.baseGridSize : this.baseGridSize;
|
|
544
|
-
if (driverAreaNoVerticalWall) {
|
|
545
|
-
const coachWidth = this.getCalculatedDimension(coachItem.dimension).w;
|
|
546
|
-
borderWidth = coachWidth - 2 * (driverAreaNoVerticalWall.dimension.w * this.baseGridSize);
|
|
547
|
-
borderOffsetX = driverAreaNoVerticalWall.dimension.w * this.baseGridSize;
|
|
548
|
-
}
|
|
549
|
-
const currentCoachOverlappingInfo = this.overHangingElementInformation.find((el) => el.coachId == coachItem.id);
|
|
550
|
-
if (currentCoachOverlappingInfo?.overhangingPlaces || currentCoachOverlappingInfo?.overhangingGraphicAreas) {
|
|
551
|
-
borderWidth += 2 * this.baseGridSize;
|
|
552
|
-
borderOffsetX = 0;
|
|
553
|
-
}
|
|
554
|
-
return html`
|
|
555
|
-
<sbb-seat-reservation-graphic
|
|
556
|
-
class="${classMap({
|
|
557
|
-
"sbb-sr-coach-has-overhanging-elements": currentCoachOverlappingInfo?.overhangingPlaces || currentCoachOverlappingInfo?.overhangingGraphicAreas || false
|
|
558
|
-
})}"
|
|
559
|
-
style=${styleMap({
|
|
560
|
-
"--sbb-seat-reservation-graphic-width": borderWidth,
|
|
561
|
-
"--sbb-seat-reservation-graphic-height": borderHeight,
|
|
562
|
-
"--sbb-seat-reservation-graphic-top": this.coachBorderPadding * -1,
|
|
563
|
-
"--sbb-seat-reservation-graphic-left": borderOffsetX,
|
|
564
|
-
"--sbb-seat-reservation-graphic-position": "absolute"
|
|
565
|
-
})}
|
|
566
|
-
name="COACH_BORDER_MIDDLE"
|
|
567
|
-
?stretch=${true}
|
|
568
|
-
role="presentation"
|
|
569
|
-
></sbb-seat-reservation-graphic>
|
|
570
|
-
`;
|
|
571
|
-
}
|
|
572
|
-
_getRenderedRowPlaces(coach, coachIndex, coachDeckIndex, placeCoachDeckIndex) {
|
|
573
|
-
if (!coach.places) {
|
|
574
|
-
return null;
|
|
575
|
-
}
|
|
576
|
-
const tableRowPlaces = {};
|
|
577
|
-
for (const place of coach.places) {
|
|
578
|
-
if (!tableRowPlaces[place.position.y]) {
|
|
579
|
-
tableRowPlaces[place.position.y] = [place];
|
|
580
|
-
} else {
|
|
581
|
-
tableRowPlaces[place.position.y].push(place);
|
|
582
|
-
}
|
|
583
|
-
}
|
|
584
|
-
return Object.values(tableRowPlaces).map((rowPlaces, index) => {
|
|
585
|
-
return html`
|
|
586
|
-
<tr id="row-${coachIndex}-${rowPlaces[0].position.y}" data-row-index=${index}>
|
|
587
|
-
${this._getRenderedColumnPlaces(rowPlaces, coachIndex, coachDeckIndex, placeCoachDeckIndex)}
|
|
588
|
-
</tr>
|
|
589
|
-
`;
|
|
590
|
-
}).flatMap((rowTemplate) => rowTemplate);
|
|
591
|
-
}
|
|
592
|
-
_getRenderedColumnPlaces(places, coachIndex, deckIndex, placeCoachDeckIndex) {
|
|
593
|
-
places.sort((placeA, placeB) => Number(placeA.position.x) - Number(placeB.position.x));
|
|
594
|
-
const trackPlaceId = coachIndex + "-" + placeCoachDeckIndex;
|
|
595
|
-
return html`${repeat(places, (place) => trackPlaceId + "-" + place.number, (place, index) => {
|
|
596
|
-
const calculatedDimension = this.getCalculatedDimension(place.dimension);
|
|
597
|
-
const calculatedPosition = this.getCalculatedPosition(place.position);
|
|
598
|
-
const rotation = place.rotation || 0;
|
|
599
|
-
const textRotation = this.alignVertical ? -90 : 0;
|
|
600
|
-
const placeId = this.getPlaceElementId(deckIndex, coachIndex, place.number);
|
|
601
|
-
return html`
|
|
602
|
-
<td
|
|
603
|
-
id="cell-${deckIndex}-${coachIndex}-${place.position.y}-${index}"
|
|
604
|
-
class="graphical-element"
|
|
605
|
-
>
|
|
606
|
-
<sbb-seat-reservation-place-control
|
|
607
|
-
style=${styleMap({
|
|
608
|
-
"--sbb-seat-reservation-place-control-text-scale-value": Math.min(calculatedDimension.w, calculatedDimension.h),
|
|
609
|
-
"--sbb-seat-reservation-place-control-width": calculatedDimension.w,
|
|
610
|
-
"--sbb-seat-reservation-place-control-height": calculatedDimension.h,
|
|
611
|
-
"--sbb-seat-reservation-place-control-top": calculatedPosition.y,
|
|
612
|
-
"--sbb-seat-reservation-place-control-left": calculatedPosition.x,
|
|
613
|
-
"--sbb-seat-reservation-place-control-rotation": rotation,
|
|
614
|
-
"--sbb-seat-reservation-place-control-text-rotation": textRotation
|
|
615
|
-
})}
|
|
616
|
-
@selectplace=${(selectPlaceEvent) => this._onSelectPlace(selectPlaceEvent)}
|
|
617
|
-
exportparts="sbb-sr-place-part"
|
|
618
|
-
id=${placeId}
|
|
619
|
-
class="seat-reservation-place-control"
|
|
620
|
-
text=${place.number}
|
|
621
|
-
type=${place.type}
|
|
622
|
-
state=${place.state}
|
|
623
|
-
travel-direction=${this.travelDirection}
|
|
624
|
-
coach-index=${coachIndex}
|
|
625
|
-
deck-index=${placeCoachDeckIndex}
|
|
626
|
-
data-deck-index=${deckIndex}
|
|
627
|
-
.propertyIds=${place.propertyIds}
|
|
628
|
-
.preventClick=${this.preventPlaceClick}
|
|
629
|
-
?showTitleInfo="${this.showTitleInfo}"
|
|
630
|
-
></sbb-seat-reservation-place-control>
|
|
631
|
-
</td>
|
|
632
|
-
`;
|
|
633
|
-
})}`;
|
|
634
|
-
}
|
|
635
|
-
_getRenderedGraphicalElements(graphicalElements, coachDimension, coachIndex, coachDeckIndex) {
|
|
636
|
-
if (!graphicalElements)
|
|
637
|
-
return null;
|
|
638
|
-
return graphicalElements?.map((graphicalElement) => {
|
|
639
|
-
const icon = graphicalElement.icon ?? "";
|
|
640
|
-
const elementRotation = graphicalElement.rotation || 0;
|
|
641
|
-
const isNotFixedRotationGraphicalElement = this._notFixedRotatableAreaIcons.indexOf(graphicalElement.icon) === -1;
|
|
642
|
-
const elementFixedRotation = this.alignVertical && isNotFixedRotationGraphicalElement ? elementRotation - 90 : elementRotation;
|
|
643
|
-
if (this.notAreaElements.findIndex((notAreaElement) => notAreaElement === icon) > -1) {
|
|
644
|
-
return this._getRenderElementWithoutArea(graphicalElement, elementRotation, coachDimension);
|
|
645
|
-
}
|
|
646
|
-
return this._getRenderElementWithArea(graphicalElement, elementFixedRotation, coachDimension, coachIndex, coachDeckIndex);
|
|
647
|
-
});
|
|
648
|
-
}
|
|
649
|
-
/**
|
|
650
|
-
* creates a rendered element with an area component
|
|
651
|
-
* @param graphicalElement
|
|
652
|
-
* @param rotation
|
|
653
|
-
* @param coachDimension
|
|
654
|
-
* @param coachIndex used to generate a unique id for the popover trigger
|
|
655
|
-
* @param coachDeckIndex used to generate a unique id
|
|
656
|
-
* @private
|
|
657
|
-
*/
|
|
658
|
-
_getRenderElementWithArea(graphicalElement, rotation, coachDimension, coachIndex, coachDeckIndex) {
|
|
659
|
-
const isNotTableGraphic = graphicalElement.icon?.indexOf("TABLE") === -1;
|
|
660
|
-
const areaProperty = graphicalElement.icon && isNotTableGraphic ? graphicalElement.icon : null;
|
|
661
|
-
const stretchHeight = this.isElementDirectlyOnBorder(graphicalElement, coachDimension) && areaProperty !== "ENTRY_EXIT";
|
|
662
|
-
const ariaLabelForArea = graphicalElement.icon ? getI18nSeatReservation(graphicalElement.icon, this._language.current) : nothing;
|
|
663
|
-
const calculatedDimension = this.getCalculatedDimension(graphicalElement.dimension, coachDimension, true, stretchHeight);
|
|
664
|
-
const calculatedPosition = this.getCalculatedPosition(graphicalElement.position, graphicalElement.dimension, coachDimension, true);
|
|
665
|
-
const triggerId = `popover-trigger-${coachDeckIndex}-${coachIndex}-${calculatedPosition.x}-${calculatedPosition.y}`;
|
|
666
|
-
let elementMounting = "free";
|
|
667
|
-
if (graphicalElement.position.y === this.coachBorderOffset * -1) {
|
|
668
|
-
elementMounting = "upper-border";
|
|
669
|
-
} else if (graphicalElement.position.y + graphicalElement.dimension.h === coachDimension.h + this.coachBorderOffset) {
|
|
670
|
-
elementMounting = "lower-border";
|
|
671
|
-
}
|
|
672
|
-
if (elementMounting !== "free") {
|
|
673
|
-
calculatedPosition.y += elementMounting === "upper-border" ? 2 : 1;
|
|
674
|
-
calculatedDimension.h -= 3;
|
|
675
|
-
}
|
|
676
|
-
return html`
|
|
677
|
-
<sbb-seat-reservation-area
|
|
678
|
-
id="${triggerId}"
|
|
679
|
-
class="${classMap({ "sbb-seat-reservation-area--cursor-pointer": areaProperty !== null })}"
|
|
680
|
-
style=${styleMap({
|
|
681
|
-
"--sbb-seat-reservation-area-width": calculatedDimension.w,
|
|
682
|
-
"--sbb-seat-reservation-area-height": calculatedDimension.h,
|
|
683
|
-
"--sbb-seat-reservation-area-top": calculatedPosition.y,
|
|
684
|
-
"--sbb-seat-reservation-area-left": calculatedPosition.x
|
|
685
|
-
})}
|
|
686
|
-
mounting=${elementMounting}
|
|
687
|
-
background="dark"
|
|
688
|
-
aria-hidden="true"
|
|
689
|
-
>
|
|
690
|
-
${areaProperty ? html`
|
|
691
|
-
<sbb-seat-reservation-graphic
|
|
692
|
-
style=${styleMap({
|
|
693
|
-
"--sbb-seat-reservation-graphic-max-width": calculatedDimension.w,
|
|
694
|
-
"--sbb-seat-reservation-graphic-height": this.baseGridSize,
|
|
695
|
-
"--sbb-seat-reservation-graphic-rotation": rotation
|
|
696
|
-
})}
|
|
697
|
-
name=${areaProperty}
|
|
698
|
-
role="img"
|
|
699
|
-
aria-hidden="true"
|
|
700
|
-
class="auto-width"
|
|
701
|
-
></sbb-seat-reservation-graphic>
|
|
702
|
-
` : nothing}
|
|
703
|
-
</sbb-seat-reservation-area>
|
|
704
|
-
${areaProperty ? this._popover(triggerId, ariaLabelForArea) : nothing}
|
|
705
|
-
`;
|
|
706
|
-
}
|
|
707
|
-
_getRenderElementWithoutArea(graphicalElement, rotation, coachDimension) {
|
|
708
|
-
const calculatedDimension = this.getCalculatedDimension(graphicalElement.dimension, coachDimension);
|
|
709
|
-
const calculatedPosition = this.getCalculatedPosition(graphicalElement.position, graphicalElement.dimension, coachDimension);
|
|
710
|
-
const icon = graphicalElement.icon && graphicalElement.icon.endsWith("DRIVER_AREA") ? graphicalElement.icon?.concat("_", this.seatReservations[this.currSelectedDeckIndex].vehicleType) : graphicalElement.icon;
|
|
711
|
-
return html` <sbb-seat-reservation-graphic
|
|
712
|
-
style=${styleMap({
|
|
713
|
-
"--sbb-seat-reservation-graphic-width": calculatedDimension.w,
|
|
714
|
-
"--sbb-seat-reservation-graphic-height": calculatedDimension.h,
|
|
715
|
-
"--sbb-seat-reservation-graphic-top": calculatedPosition.y,
|
|
716
|
-
"--sbb-seat-reservation-graphic-left": calculatedPosition.x,
|
|
717
|
-
"--sbb-seat-reservation-graphic-position": "absolute",
|
|
718
|
-
"--sbb-seat-reservation-graphic-rotation": rotation
|
|
719
|
-
})}
|
|
720
|
-
name=${icon ?? nothing}
|
|
721
|
-
aria-hidden="true"
|
|
722
|
-
?stretch=${true}
|
|
723
|
-
></sbb-seat-reservation-graphic>`;
|
|
724
|
-
}
|
|
725
|
-
_getRenderedServiceElements(coachIndex, coachDeckIndex, serviceElements) {
|
|
726
|
-
if (!serviceElements)
|
|
727
|
-
return null;
|
|
728
|
-
return serviceElements?.map((serviceElement) => {
|
|
729
|
-
const titleDescription = serviceElement.icon ? getI18nSeatReservation(serviceElement.icon, this._language.current) : null;
|
|
730
|
-
const calculatedDimension = this.getCalculatedDimension(serviceElement.dimension);
|
|
731
|
-
const calculatedPosition = this.getCalculatedPosition(serviceElement.position);
|
|
732
|
-
const elementRotation = serviceElement.rotation || 0;
|
|
733
|
-
const elementFixedRotation = this.alignVertical ? elementRotation - 90 : elementRotation;
|
|
734
|
-
const triggerId = `popover-trigger-${coachDeckIndex}-${coachIndex}-${calculatedPosition.x}-${calculatedPosition.y}`;
|
|
735
|
-
return html`
|
|
736
|
-
<sbb-seat-reservation-graphic
|
|
737
|
-
id="${triggerId}"
|
|
738
|
-
style=${styleMap({
|
|
739
|
-
"--sbb-seat-reservation-graphic-width": calculatedDimension.w,
|
|
740
|
-
"--sbb-seat-reservation-graphic-height": calculatedDimension.h,
|
|
741
|
-
"--sbb-seat-reservation-graphic-top": calculatedPosition.y,
|
|
742
|
-
"--sbb-seat-reservation-graphic-left": calculatedPosition.x,
|
|
743
|
-
"--sbb-seat-reservation-graphic-position": "absolute",
|
|
744
|
-
"--sbb-seat-reservation-graphic-rotation": elementFixedRotation
|
|
745
|
-
})}
|
|
746
|
-
class="sbb-seat-reservation-graphic--cursor-pointer"
|
|
747
|
-
name=${serviceElement.icon ?? nothing}
|
|
748
|
-
role="img"
|
|
749
|
-
aria-hidden="true"
|
|
750
|
-
></sbb-seat-reservation-graphic>
|
|
751
|
-
${this._popover(triggerId, titleDescription)}
|
|
752
|
-
`;
|
|
753
|
-
});
|
|
754
|
-
}
|
|
755
|
-
/**
|
|
756
|
-
* Manages the selected place event triggered from the place
|
|
757
|
-
* Each selection emits an array of all selected places
|
|
758
|
-
* @param selectPlaceEvent
|
|
759
|
-
*/
|
|
760
|
-
_onSelectPlace(selectPlaceEvent) {
|
|
761
|
-
const selectedPlace = selectPlaceEvent.detail;
|
|
762
|
-
this.preventCoachScrollByPlaceClick = true;
|
|
763
|
-
this.isCoachGridFocusable = false;
|
|
764
|
-
this.focusedCoachIndex = -1;
|
|
765
|
-
if (!this.hasSeatReservationNativeFocus) {
|
|
766
|
-
this.hasSeatReservationNativeFocus = true;
|
|
767
|
-
}
|
|
768
|
-
if (!this.preventPlaceClick) {
|
|
769
|
-
this.updateSelectedSeatReservationPlaces(selectedPlace);
|
|
770
|
-
this.updateCurrentSelectedPlaceInCoach(selectedPlace);
|
|
771
|
-
}
|
|
772
|
-
}
|
|
773
|
-
_onSelectNavCoach(event) {
|
|
774
|
-
const selectedNavCoachIndex = event.detail;
|
|
775
|
-
this.isKeyboardNavigation = false;
|
|
776
|
-
this.preventCoachScrollByPlaceClick = false;
|
|
777
|
-
this.hasSeatReservationNativeFocus = true;
|
|
778
|
-
if (selectedNavCoachIndex !== null && selectedNavCoachIndex !== this.currSelectedCoachIndex) {
|
|
779
|
-
this.unfocusPlaceElement();
|
|
780
|
-
this.scrollToSelectedNavCoach(selectedNavCoachIndex);
|
|
781
|
-
} else if (selectedNavCoachIndex === this.currSelectedCoachIndex) {
|
|
782
|
-
this.updateCurrentSelectedCoach();
|
|
783
|
-
this.preselectPlaceInCoach();
|
|
784
|
-
}
|
|
785
|
-
this._closePopover();
|
|
786
|
-
}
|
|
787
|
-
_onFocusNavCoach() {
|
|
788
|
-
if (!this.preventCoachScrollByPlaceClick) {
|
|
789
|
-
this.preselectPlaceInCoach();
|
|
790
|
-
} else {
|
|
791
|
-
this.focusPlaceElement(this.currSelectedPlace);
|
|
792
|
-
}
|
|
793
|
-
this.isAutoScrolling = false;
|
|
794
|
-
}
|
|
795
|
-
/**
|
|
796
|
-
* Creates a popover for extra service information
|
|
797
|
-
* @param triggerId
|
|
798
|
-
* @param popoverContent
|
|
799
|
-
* @private
|
|
800
|
-
*/
|
|
801
|
-
_popover(triggerId, popoverContent) {
|
|
802
|
-
return html`
|
|
803
|
-
<sbb-popover trigger="${triggerId}" hover-trigger="">
|
|
804
|
-
<p class="sbb-text-s sbb-sr-popover">${popoverContent}</p>
|
|
805
|
-
</sbb-popover>
|
|
806
|
-
`;
|
|
807
|
-
}
|
|
808
|
-
/**
|
|
809
|
-
* trigger to close all opened popovers (normally only one is opened at a time)
|
|
810
|
-
* @private
|
|
811
|
-
*/
|
|
812
|
-
_closePopover() {
|
|
813
|
-
this.shadowRoot?.querySelectorAll("sbb-popover:is(:state(state-opened),[state--state-opened])").forEach((popover) => popover.close());
|
|
814
|
-
}
|
|
815
|
-
_getDescriptionTableCoach(coachItem) {
|
|
816
|
-
if (coachItem.type === "LOCOMOTIVE_COACH") {
|
|
817
|
-
return getI18nSeatReservation("COACH_LOCOMOTIVE", this._language.current);
|
|
818
|
-
}
|
|
819
|
-
if (!coachItem.places?.length) {
|
|
820
|
-
return getI18nSeatReservation("COACH_BLOCKED_TABLE_CAPTION", this._language.current, [
|
|
821
|
-
coachItem.id
|
|
822
|
-
]);
|
|
823
|
-
}
|
|
824
|
-
let tableCoachDescription;
|
|
825
|
-
const areaDescriptions = this._getTitleDescriptionListString(coachItem.graphicElements);
|
|
826
|
-
const serviceDescriptions = this._getTitleDescriptionListString(coachItem.serviceElements);
|
|
827
|
-
tableCoachDescription = getI18nSeatReservation("COACH_TABLE_CAPTION", this._language.current, [
|
|
828
|
-
coachItem.id
|
|
829
|
-
]);
|
|
830
|
-
if (!this.hasNavigation) {
|
|
831
|
-
const freePlaces = this.getAvailableFreePlacesNumFromCoach(coachItem.places);
|
|
832
|
-
const freePlacesTxt = getI18nSeatReservation("COACH_AVAILABLE_NUMBER_OF_PLACES", this._language.current, [freePlaces.seats, freePlaces.bicycles]);
|
|
833
|
-
tableCoachDescription = tableCoachDescription.concat(". ").concat(freePlacesTxt).concat(". ");
|
|
834
|
-
}
|
|
835
|
-
if (!!areaDescriptions || !!serviceDescriptions) {
|
|
836
|
-
tableCoachDescription += ". " + getI18nSeatReservation("COACH_AVAILABLE_SERVICES", this._language.current) + ": ";
|
|
837
|
-
tableCoachDescription += serviceDescriptions + ", " + areaDescriptions + ".";
|
|
838
|
-
}
|
|
839
|
-
return tableCoachDescription;
|
|
840
|
-
}
|
|
841
|
-
_getTitleDescriptionListString(descriptionsElements) {
|
|
842
|
-
const uniqueDescriptions = [];
|
|
843
|
-
return descriptionsElements?.map((descriptionElement) => {
|
|
844
|
-
const icon = descriptionElement.icon;
|
|
845
|
-
if (!icon)
|
|
846
|
-
return null;
|
|
847
|
-
const descriptionAlreadyExist = uniqueDescriptions.indexOf(icon) > -1;
|
|
848
|
-
const translation = getI18nSeatReservation(descriptionElement.icon, this._language.current);
|
|
849
|
-
const isValidDescription = this._notFixedRotatableAreaIcons.indexOf(icon) === -1 && this.notAreaElements.indexOf(icon) === -1;
|
|
850
|
-
if (!descriptionAlreadyExist) {
|
|
851
|
-
uniqueDescriptions.push(descriptionElement.icon);
|
|
852
|
-
}
|
|
853
|
-
return !!translation && !descriptionAlreadyExist && isValidDescription ? translation : null;
|
|
854
|
-
}).filter((description) => !!description).join(", ");
|
|
855
|
-
}
|
|
856
|
-
}, _classThis = _a, (() => {
|
|
857
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
858
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
859
|
-
_classThis = _classDescriptor.value;
|
|
860
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
861
|
-
})(), _a.styles = [boxSizingStyles, style], __runInitializers(_classThis, _classExtraInitializers), _a;
|
|
862
|
-
return _classThis;
|
|
863
|
-
})();
|
|
864
|
-
export {
|
|
865
|
-
SbbSeatReservationElement
|
|
866
|
-
};
|
|
867
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhdC1yZXNlcnZhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvc2VhdC1yZXNlcnZhdGlvbi9zZWF0LXJlc2VydmF0aW9uL3NlYXQtcmVzZXJ2YXRpb24uY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgYm94U2l6aW5nU3R5bGVzIH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9zdHlsZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJQb3BvdmVyRWxlbWVudCB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL3BvcG92ZXIuanMnO1xuaW1wb3J0IHsgaHRtbCwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBQcm9wZXJ0eVZhbHVlcywgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwLmpzJztcbmltcG9ydCB7IHJlcGVhdCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3JlcGVhdC5qcyc7XG5pbXBvcnQgeyBzdHlsZU1hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3N0eWxlLW1hcC5qcyc7XG5cbmltcG9ydCB7IGdldEkxOG5TZWF0UmVzZXJ2YXRpb24gfSBmcm9tICcuLi9jb21tb24udHMnO1xuaW1wb3J0IHR5cGUge1xuICBDb2FjaEl0ZW0sXG4gIFBsYWNlLFxuICBFbGVtZW50RGltZW5zaW9uLFxuICBCYXNlRWxlbWVudCxcbiAgUGxhY2VTZWxlY3Rpb24sXG4gIFNlYXRSZXNlcnZhdGlvbixcbiAgQ29hY2hJdGVtRGV0YWlscyxcbn0gZnJvbSAnLi4vY29tbW9uLnRzJztcblxuaW1wb3J0IHsgU2VhdFJlc2VydmF0aW9uQmFzZUVsZW1lbnQgfSBmcm9tICcuL3NlYXQtcmVzZXJ2YXRpb24tYmFzZS1lbGVtZW50LnRzJztcbmltcG9ydCBzdHlsZSBmcm9tICcuL3NlYXQtcmVzZXJ2YXRpb24uc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9idXR0b24uanMnO1xuaW1wb3J0ICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9zY3JlZW4tcmVhZGVyLW9ubHkuanMnO1xuaW1wb3J0ICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9wb3BvdmVyLmpzJztcbmltcG9ydCAnLi4vc2VhdC1yZXNlcnZhdGlvbi1hcmVhLnRzJztcbmltcG9ydCAnLi4vc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLnRzJztcbmltcG9ydCAnLi4vc2VhdC1yZXNlcnZhdGlvbi1wbGFjZS1jb250cm9sLnRzJztcbmltcG9ydCAnLi4vc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLWNvYWNoLnRzJztcbmltcG9ydCAnLi4vc2VhdC1yZXNlcnZhdGlvbi1zY29wZWQudHMnO1xuXG4vKipcbiAqIE1haW4gY29tcG9uZW50IGZvciB0aGUgc2VhdCByZXNlcnZhdGlvbi5cbiAqXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1zZWF0LXJlc2VydmF0aW9uJylcbmNsYXNzIFNiYlNlYXRSZXNlcnZhdGlvbkVsZW1lbnQgZXh0ZW5kcyBTZWF0UmVzZXJ2YXRpb25CYXNlRWxlbWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtib3hTaXppbmdTdHlsZXMsIHN0eWxlXTtcblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX2NvYWNoZXNIdG1sVGVtcGxhdGU/OiBUZW1wbGF0ZVJlc3VsdDtcblxuICAvLyBBcmVhIGljb25zIHRoYXQgc2hvdWxkIG5vdCBiZSBmaXhlZCBkdXJpbmcgcm90YXRpb24gd2hlbiB2ZXJ0aWNhbCBtb2RlIGlzIHNlbGVjdGVkXG4gIHByaXZhdGUgX25vdEZpeGVkUm90YXRhYmxlQXJlYUljb25zID0gWydFTlRSWV9FWElUJ107XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdoYXNOYXZpZ2F0aW9uJykpIHtcbiAgICAgIGlmICh0aGlzLmhhc05hdmlnYXRpb24pIHtcbiAgICAgICAgdGhpcy5zaGFkb3dSb290XG4gICAgICAgICAgPy5xdWVyeVNlbGVjdG9yQWxsKCd0YWJsZScpXG4gICAgICAgICAgLmZvckVhY2goKHRhYmxlKSA9PiB0YWJsZS5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4JykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaGFkb3dSb290XG4gICAgICAgICAgPy5xdWVyeVNlbGVjdG9yQWxsKCd0YWJsZScpXG4gICAgICAgICAgLmZvckVhY2goKHRhYmxlKSA9PiB0YWJsZS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgLy8gV2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSBmaXJzdCB1cGRhdGUgaXMgY29tcGxldGUgdG8gaW5pdCBkaWZmZXJlbnQgSFRNTCBlbGVtZW50IGRpbWVuc2lvbnNcbiAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5pbml0TmF2aWdhdGlvblNlbGVjdGlvbkJ5U2Nyb2xsRXZlbnQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQgfCBudWxsIHtcbiAgICB0aGlzLl9pbml0VmVoaWNsZVNlYXRSZXNlcnZhdGlvbkNvbnN0cnVjdGlvbigpO1xuICAgIHJldHVybiB0aGlzLl9jb2FjaGVzSHRtbFRlbXBsYXRlIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9pbml0VmVoaWNsZVNlYXRSZXNlcnZhdGlvbkNvbnN0cnVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9jb2FjaGVzSHRtbFRlbXBsYXRlID0gaHRtbGBcbiAgICAgICR7dGhpcy5fcmVuZGVyVHJhdmVsRGlyZWN0aW9uKCl9XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXNyX19jb21wb25lbnRcIj5cbiAgICAgICAgJHt0aGlzLl9yZW5kZXJOYXZpZ2F0aW9uKCl9XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInNiYi1zcl9fd3JhcHBlci1jb2FjaC1kZWNrc1wiXG4gICAgICAgICAgQGtleWRvd249JHsoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLmtleWJvYXJkU2VhdG1hcEV2ZW50SGFuZGxpbmcoZXZ0KX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc3JfX3dyYXBwZXItZGVjay1sYWJlbHNcIj4ke3RoaXMuX3JlbmRlckRlY2tMYWJlbHMoKX08L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBAc2Nyb2xsPSR7KCkgPT4gdGhpcy5jb2FjaEFyZWFTY3JvbGxlbmQoKX1cbiAgICAgICAgICAgIGlkPVwic2JiLXNyX193cmFwcGVyLXNjcm9sbGFyZWFcIlxuICAgICAgICAgICAgY2xhc3M9XCJzYmItc3JfX3dyYXBwZXItc2Nyb2xsYXJlYVwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGlkPVwic2JiLXNyX19wYXJlbnQtYXJlYVwiIGNsYXNzPVwic2JiLXNyX19wYXJlbnRcIj5cbiAgICAgICAgICAgICAgPHVsXG4gICAgICAgICAgICAgICAgY2xhc3M9XCIke2NsYXNzTWFwKHtcbiAgICAgICAgICAgICAgICAgICdzYmItc3JfX2xpc3QtZGVja3MnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgJ3NiYi1zcl9fbGlzdC1kZWNrcy0tZ2FwJzogdGhpcy5oYXNNdWx0aXBsZURlY2tzLFxuICAgICAgICAgICAgICAgIH0pfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAke3RoaXMuc2VhdFJlc2VydmF0aW9ucz8ubWFwKFxuICAgICAgICAgICAgICAgICAgKHNlYXRSZXNlcnZhdGlvbjogU2VhdFJlc2VydmF0aW9uLCBjb2FjaERlY2tJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sYDxsaSBjbGFzcz1cInNiYi1zcl9fbGlzdC1pdGVtLWRlY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJzYmItc3JfX2xpc3QtY29hY2hlc1wiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5fcmVuZGVyQ29hY2hlcyhzZWF0UmVzZXJ2YXRpb24sIGNvYWNoRGVja0luZGV4KX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPmA7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyRGVja0xhYmVscygpOiBUZW1wbGF0ZVJlc3VsdFtdIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmhhc011bHRpcGxlRGVja3MpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VhdFJlc2VydmF0aW9ucy5tYXAoKHNlYXRSZXNlcnZhdGlvbikgPT4ge1xuICAgICAgY29uc3QgZGVja0Rlc2NyaXB0aW9uID0gZ2V0STE4blNlYXRSZXNlcnZhdGlvbihcbiAgICAgICAgc2VhdFJlc2VydmF0aW9uLmRlY2tDb2FjaExldmVsLFxuICAgICAgICB0aGlzLl9sYW5ndWFnZS5jdXJyZW50LFxuICAgICAgKTtcbiAgICAgIHJldHVybiBodG1sYDxiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiR7ZGVja0Rlc2NyaXB0aW9ufTwvYj5gO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyTmF2aWdhdGlvbkNvbnRyb2xCdXR0b24oYnRuRGlyZWN0aW9uOiBzdHJpbmcpOiBUZW1wbGF0ZVJlc3VsdCB8IG51bGwge1xuICAgIGlmICghdGhpcy5oYXNOYXZpZ2F0aW9uIHx8ICF0aGlzLnNlYXRSZXNlcnZhdGlvbnMpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGJ0bk5hdmlnYXRpb25EaXJlY3Rpb25JZCA9XG4gICAgICBidG5EaXJlY3Rpb24gPT0gJ0RJUkVDVElPTl9SSUdIVCdcbiAgICAgICAgPyAnc2JiLXNyLW5hdmlnYXRpb25fX3dyYXBwZXItYnV0dG9uLWRpcmVjdGlvbi0tcmlnaHQnXG4gICAgICAgIDogJ3NiYi1zci1uYXZpZ2F0aW9uX193cmFwcGVyLWJ1dHRvbi1kaXJlY3Rpb24tLWxlZnQnO1xuICAgIGNvbnN0IGJ0bkljb24gPVxuICAgICAgYnRuRGlyZWN0aW9uID09ICdESVJFQ1RJT05fUklHSFQnID8gJ2NoZXZyb24tc21hbGwtcmlnaHQtc21hbGwnIDogJ2NoZXZyb24tc21hbGwtbGVmdC1zbWFsbCc7XG4gICAgY29uc3QgYnRuQXJpYURlc2NyaXB0aW9uID1cbiAgICAgIGJ0bkRpcmVjdGlvbiA9PSAnRElSRUNUSU9OX1JJR0hUJ1xuICAgICAgICA/IGdldEkxOG5TZWF0UmVzZXJ2YXRpb24oJ1NFQVRfUkVTRVJWQVRJT05fRU5EJywgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudClcbiAgICAgICAgOiBnZXRJMThuU2VhdFJlc2VydmF0aW9uKCdTRUFUX1JFU0VSVkFUSU9OX0JFR0lOJywgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCk7XG4gICAgbGV0IGJ0bkRpc2FibGVkID0gdHJ1ZTtcblxuICAgIGlmIChidG5EaXJlY3Rpb24gPT0gJ0RJUkVDVElPTl9MRUZUJyAmJiB0aGlzLnNlbGVjdGVkQ29hY2hJbmRleCA+IDApIHtcbiAgICAgIGJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGJ0bkRpcmVjdGlvbiA9PSAnRElSRUNUSU9OX1JJR0hUJyAmJlxuICAgICAgdGhpcy5zZWxlY3RlZENvYWNoSW5kZXggPCB0aGlzLmNvYWNoSXRlbURldGFpbHNFbGVtZW50cy5sZW5ndGggLSAxXG4gICAgKSB7XG4gICAgICBidG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBodG1sYDxkaXYgY2xhc3M9XCJzYmItc3ItbmF2aWdhdGlvbl9fd3JhcHBlci1idXR0b24tZGlyZWN0aW9uXCI+XG4gICAgICA8c2JiLXNlY29uZGFyeS1idXR0b25cbiAgICAgICAgQGNsaWNrPVwiJHsoKSA9PiB0aGlzLm5hdmlnYXRlQnlEaXJlY3Rpb25CdG4oYnRuRGlyZWN0aW9uKX1cIlxuICAgICAgICBAZm9jdXM9XCIkeygpID0+IHRoaXMub25Gb2N1c05hdkRpcmVjdGlvbkJ1dHRvbigpfVwiXG4gICAgICAgIGlkPVwiJHtidG5OYXZpZ2F0aW9uRGlyZWN0aW9uSWR9XCJcbiAgICAgICAgY2xhc3M9XCJzYmItc3JfX25hdmlnYXRpb24tY29udHJvbC1idXR0b25cIlxuICAgICAgICBzaXplPVwibVwiXG4gICAgICAgIGljb24tbmFtZT1cIiR7YnRuSWNvbn1cIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIiR7YnRuQXJpYURlc2NyaXB0aW9ufVwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAuZGlzYWJsZWRJbnRlcmFjdGl2ZT1cIiR7YnRuRGlzYWJsZWQgfHwgbm90aGluZ31cIlxuICAgICAgICAuZGlzYWJsZWQ9XCIke2J0bkRpc2FibGVkIHx8IG5vdGhpbmd9XCJcbiAgICAgID48L3NiYi1zZWNvbmRhcnktYnV0dG9uPlxuICAgIDwvZGl2PmA7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJUcmF2ZWxEaXJlY3Rpb24oKTogVGVtcGxhdGVSZXN1bHQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMudHJhdmVsRGlyZWN0aW9uIHx8IHRoaXMudHJhdmVsRGlyZWN0aW9uID09PSAnTk9ORScpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgbGFiZWxUZXh0ID0gZ2V0STE4blNlYXRSZXNlcnZhdGlvbihcbiAgICAgICdTRUFUX1JFU0VSVkFUSU9OX1RSQVZFTF9ESVJFQ1RJT04nLFxuICAgICAgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCxcbiAgICApO1xuXG4gICAgY29uc3QgYXJyb3dEaXJlY3Rpb24gPSB0aGlzLmFsaWduVmVydGljYWxcbiAgICAgID8gdGhpcy50cmF2ZWxEaXJlY3Rpb24gPT09ICdSSUdIVCdcbiAgICAgICAgPyAnZG93bidcbiAgICAgICAgOiAndXAnXG4gICAgICA6IHRoaXMudHJhdmVsRGlyZWN0aW9uID09PSAnUklHSFQnXG4gICAgICAgID8gJ3JpZ2h0J1xuICAgICAgICA6ICdsZWZ0JztcblxuICAgIGNvbnN0IGljb25OYW1lID0gYGFycm93LSR7YXJyb3dEaXJlY3Rpb259LXNtYWxsYDtcblxuICAgIHJldHVybiBodG1sYDxkaXYgY2xhc3M9XCJzYmItc3ItdHJhdmVsLWRpcmVjdGlvbi13cmFwcGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXNyX190cmF2ZWwtZGlyZWN0aW9uLS1hcnJvd1wiPlxuICAgICAgICA8c2JiLWljb24gc2xvdD1cImljb25cIiBuYW1lPVwiJHtpY29uTmFtZX1cIj48L3NiYi1pY29uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXNyX190cmF2ZWwtZGlyZWN0aW9uLS1sYWJlbFwiPiR7bGFiZWxUZXh0fTwvZGl2PlxuICAgIDwvZGl2PmA7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJOYXZpZ2F0aW9uKCk6IFRlbXBsYXRlUmVzdWx0IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmhhc05hdmlnYXRpb24gfHwgIXRoaXMuc2VhdFJlc2VydmF0aW9ucykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cInNiYi1zci1uYXZpZ2F0aW9uLXdyYXBwZXJcIj5cbiAgICAgIDxuYXYgaWQ9XCJzYmItc3ItbmF2aWdhdGlvblwiIGNsYXNzPVwic2JiLXNyLW5hdmlnYXRpb25cIj5cbiAgICAgICAgJHt0aGlzLl9yZW5kZXJOYXZpZ2F0aW9uQ29udHJvbEJ1dHRvbignRElSRUNUSU9OX0xFRlQnKX1cbiAgICAgICAgPHVsXG4gICAgICAgICAgaWQ9XCJzYmItc3JfX25hdmlnYXRpb24tbGlzdC1jb2FjaGVzXCJcbiAgICAgICAgICBjbGFzcz1cInNiYi1zci1uYXZpZ2F0aW9uX19saXN0LWNvYWNoZXNcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCIke2dldEkxOG5TZWF0UmVzZXJ2YXRpb24oXG4gICAgICAgICAgICAnU0VBVF9SRVNFUlZBVElPTl9OQVZJR0FUSU9OJyxcbiAgICAgICAgICAgIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQsXG4gICAgICAgICAgKX1cIlxuICAgICAgICA+XG4gICAgICAgICAgJHt0aGlzLmNvYWNoSXRlbURldGFpbHNFbGVtZW50cy5tYXAoXG4gICAgICAgICAgICAoY29hY2hJdGVtRGV0YWlsczogQ29hY2hJdGVtRGV0YWlscywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaHRtbGA8bGk+XG4gICAgICAgICAgICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tY29hY2hcbiAgICAgICAgICAgICAgICAgIEBzZWxlY3Rjb2FjaD0keyhldmVudDogQ3VzdG9tRXZlbnQ8bnVtYmVyPikgPT4gdGhpcy5fb25TZWxlY3ROYXZDb2FjaChldmVudCl9XG4gICAgICAgICAgICAgICAgICBAZm9jdXNjb2FjaD0keygpID0+IHRoaXMuX29uRm9jdXNOYXZDb2FjaCgpfVxuICAgICAgICAgICAgICAgICAgQGtleXVwPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5vbktleU5hdmlnYXRpb25OYXZDb2FjaEJ1dHRvbihldnQsIGluZGV4KX1cbiAgICAgICAgICAgICAgICAgIGluZGV4PVwiJHtpbmRleH1cIlxuICAgICAgICAgICAgICAgICAgLnNlbGVjdGVkPSR7dGhpcy5zZWxlY3RlZENvYWNoSW5kZXggPT09IGluZGV4fVxuICAgICAgICAgICAgICAgICAgLmZvY3VzZWQ9JHt0aGlzLmZvY3VzZWRDb2FjaEluZGV4ID09PSBpbmRleH1cbiAgICAgICAgICAgICAgICAgIC5ob3ZlcmVkPSR7dGhpcy5ob3ZlcmVkQ29hY2hJbmRleCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgICAgICAubmF0aXZlRm9jdXNBY3RpdmU9JHt0aGlzLmhhc1NlYXRSZXNlcnZhdGlvbk5hdGl2ZUZvY3VzfVxuICAgICAgICAgICAgICAgICAgLmNvYWNoSXRlbURldGFpbHM9XCIke2NvYWNoSXRlbURldGFpbHN9XCJcbiAgICAgICAgICAgICAgICAgID92ZXJ0aWNhbD1cIiR7dGhpcy5hbGlnblZlcnRpY2FsfVwiXG4gICAgICAgICAgICAgICAgICA/c2hvd1RpdGxlSW5mbz1cIiR7dGhpcy5zaG93VGl0bGVJbmZvfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi1jb2FjaD5cbiAgICAgICAgICAgICAgPC9saT5gO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICApfVxuICAgICAgICA8L3VsPlxuICAgICAgICAke3RoaXMuX3JlbmRlck5hdmlnYXRpb25Db250cm9sQnV0dG9uKCdESVJFQ1RJT05fUklHSFQnKX1cbiAgICAgIDwvbmF2PlxuICAgIDwvZGl2PmA7XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zXG4gICAqIEBwYXJhbSBzZWF0UmVzZXJ2YXRpb25cbiAgICogQHBhcmFtIGNvYWNoRGVja0luZGV4XG4gICAqL1xuICBwcml2YXRlIF9yZW5kZXJDb2FjaGVzKFxuICAgIHNlYXRSZXNlcnZhdGlvbjogU2VhdFJlc2VydmF0aW9uLFxuICAgIGNvYWNoRGVja0luZGV4OiBudW1iZXIsXG4gICk6IFRlbXBsYXRlUmVzdWx0W10gfCBudWxsIHtcbiAgICBjb25zdCBjb2FjaGVzOiBDb2FjaEl0ZW1bXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2VhdFJlc2VydmF0aW9uPy5jb2FjaEl0ZW1zKSk7XG5cbiAgICBpZiAoIWNvYWNoZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY29hY2hlcy5tYXAoKGNvYWNoSXRlbTogQ29hY2hJdGVtLCBjb2FjaEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICA8bGkgY2xhc3M9XCJzYmItc3JfX2l0ZW0tY29hY2hcIj5cbiAgICAgICAgICAke3RoaXMuX3JlbmRlckNvYWNoRWxlbWVudChcbiAgICAgICAgICAgIGNvYWNoSXRlbSxcbiAgICAgICAgICAgIGNvYWNoSW5kZXgsXG4gICAgICAgICAgICBjb2FjaERlY2tJbmRleCxcbiAgICAgICAgICAgIHNlYXRSZXNlcnZhdGlvbi5kZWNrQ29hY2hJbmRleCxcbiAgICAgICAgICApfVxuICAgICAgICA8L2xpPlxuICAgICAgYDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlckNvYWNoRWxlbWVudChcbiAgICBjb2FjaEl0ZW06IENvYWNoSXRlbSxcbiAgICBjb2FjaEluZGV4OiBudW1iZXIsXG4gICAgY29hY2hEZWNrSW5kZXg6IG51bWJlcixcbiAgICBwbGFjZUNvYWNoRGVja0luZGV4OiBudW1iZXIsXG4gICk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBjYWxjdWxhdGVkQ29hY2hEaW1lbnNpb24gPSB0aGlzLmdldENhbGN1bGF0ZWREaW1lbnNpb24oY29hY2hJdGVtLmRpbWVuc2lvbik7XG4gICAgY29uc3QgZGVzY3JpcHRpb25UYWJsZUNvYWNoV2l0aFNlcnZpY2VzID0gdGhpcy5fZ2V0RGVzY3JpcHRpb25UYWJsZUNvYWNoKGNvYWNoSXRlbSk7XG5cbiAgICByZXR1cm4gaHRtbGA8c2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkXG4gICAgICBzdHlsZT0ke3N0eWxlTWFwKHtcbiAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkLXdpZHRoJzogY2FsY3VsYXRlZENvYWNoRGltZW5zaW9uLncsXG4gICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLXNjb3BlZC1oZWlnaHQnOiBjYWxjdWxhdGVkQ29hY2hEaW1lbnNpb24uaCxcbiAgICAgIH0pfVxuICAgID5cbiAgICAgICR7dGhpcy5fZ2V0UmVuZGVyZWRDb2FjaEJvcmRlcnMoY29hY2hJdGVtLCBjb2FjaEluZGV4KX1cbiAgICAgICR7dGhpcy5fZ2V0UmVuZGVyZWRHcmFwaGljYWxFbGVtZW50cyhcbiAgICAgICAgY29hY2hJdGVtLmdyYXBoaWNFbGVtZW50cyB8fCBbXSxcbiAgICAgICAgY29hY2hJdGVtLmRpbWVuc2lvbixcbiAgICAgICAgY29hY2hJbmRleCxcbiAgICAgICAgY29hY2hEZWNrSW5kZXgsXG4gICAgICApfVxuICAgICAgJHt0aGlzLl9nZXRSZW5kZXJlZFNlcnZpY2VFbGVtZW50cyhjb2FjaEluZGV4LCBjb2FjaERlY2tJbmRleCwgY29hY2hJdGVtLnNlcnZpY2VFbGVtZW50cyl9XG5cbiAgICAgIDx0YWJsZVxuICAgICAgICBAZm9jdXM9JHsoKSA9PiB0aGlzLm9uRm9jdXNUYWJsZUNvYWNoQW5kUHJlc2VsZWN0UGxhY2UoY29hY2hJbmRleCl9XG4gICAgICAgIGlkPVwic2JiLXNyLWNvYWNoLSR7Y29hY2hJbmRleH1cIlxuICAgICAgICBjbGFzcz1cInNiYi1zci1jb2FjaC13cmFwcGVyX190YWJsZVwiXG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJzYmItc3ItY29hY2gtY2FwdGlvbi0ke2NvYWNoSW5kZXh9XCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICA+XG4gICAgICAgIDxjYXB0aW9uIGlkPVwic2JiLXNyLWNvYWNoLWNhcHRpb24tJHtjb2FjaEluZGV4fVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICA8c2JiLXNjcmVlbi1yZWFkZXItb25seT4ke2Rlc2NyaXB0aW9uVGFibGVDb2FjaFdpdGhTZXJ2aWNlc308L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgICAgIDwvY2FwdGlvbj5cbiAgICAgICAgJHt0aGlzLl9nZXRSZW5kZXJlZFJvd1BsYWNlcyhjb2FjaEl0ZW0sIGNvYWNoSW5kZXgsIGNvYWNoRGVja0luZGV4LCBwbGFjZUNvYWNoRGVja0luZGV4KX1cbiAgICAgIDwvdGFibGU+XG4gICAgPC9zYmItc2VhdC1yZXNlcnZhdGlvbi1zY29wZWQ+YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBib3JkZXIgZ3JhcGhpYyAoQ09BQ0hfQk9SREVSX01JRERMRSkgb2YgYSBjb2FjaCB3aXRoIGNhbGN1bGF0ZWQgYm9yZGVyIGdhcCBhbmQgY29hY2ggd2lkdGgsXG4gICAqIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBjb2FjaCBpcyB3aXRoIGEgZHJpdmVyIGFyZWEgb3Igd2l0aG91dC5cbiAgICovXG4gIHByaXZhdGUgX2dldFJlbmRlcmVkQ29hY2hCb3JkZXJzKFxuICAgIGNvYWNoSXRlbTogQ29hY2hJdGVtLFxuICAgIGNvYWNoSW5kZXg6IG51bWJlcixcbiAgKTogVGVtcGxhdGVSZXN1bHQgfCBudWxsIHtcbiAgICBpZiAoIWNvYWNoSXRlbS5ncmFwaGljRWxlbWVudHMpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgQ09BQ0hfUEFTU0FHRV9XSURUSCA9IDE7XG4gICAgY29uc3QgZHJpdmVyQXJlYSA9IHRoaXMuY29hY2hJdGVtRGV0YWlsc0VsZW1lbnRzW2NvYWNoSW5kZXhdPy5kcml2ZXJBcmVhRWxlbWVudHM/LmRyaXZlckFyZWE7XG4gICAgY29uc3QgZHJpdmVyQXJlYU5vVmVydGljYWxXYWxsID1cbiAgICAgIHRoaXMuY29hY2hJdGVtRGV0YWlsc0VsZW1lbnRzW2NvYWNoSW5kZXhdPy5kcml2ZXJBcmVhRWxlbWVudHM/LmRyaXZlckFyZWFOb1ZlcnRpY2FsV2FsbDtcblxuICAgIGxldCBib3JkZXJXaWR0aCA9IGRyaXZlckFyZWFcbiAgICAgID8gY29hY2hJdGVtLmRpbWVuc2lvbi53IC0gZHJpdmVyQXJlYS5kaW1lbnNpb24udyAtIENPQUNIX1BBU1NBR0VfV0lEVEhcbiAgICAgIDogY29hY2hJdGVtLmRpbWVuc2lvbi53IC0gQ09BQ0hfUEFTU0FHRV9XSURUSCAqIDI7XG5cbiAgICAvL211bHRpcGx5IHdpdGggYmFzZSBncmlkIHNpemUgYWx3YXlzIGZvciBhbGwga2luZCBvZiBib3JkZXJXaWR0aFxuICAgIGJvcmRlcldpZHRoICo9IHRoaXMuYmFzZUdyaWRTaXplO1xuXG4gICAgY29uc3QgYm9yZGVySGVpZ2h0ID0gKGNvYWNoSXRlbS5kaW1lbnNpb24uaCArIHRoaXMuY29hY2hCb3JkZXJPZmZzZXQgKiAyKSAqIHRoaXMuYmFzZUdyaWRTaXplO1xuICAgIGxldCBib3JkZXJPZmZzZXRYID1cbiAgICAgIGRyaXZlckFyZWEgJiYgZHJpdmVyQXJlYS5wb3NpdGlvbi54ID09PSAwXG4gICAgICAgID8gZHJpdmVyQXJlYT8uZGltZW5zaW9uLncgKiB0aGlzLmJhc2VHcmlkU2l6ZVxuICAgICAgICA6IHRoaXMuYmFzZUdyaWRTaXplO1xuXG4gICAgLy9yZWNhbGN1bGF0ZSB0aGUgYm9yZGVyIHdpZHRoIGFuZCBvZmZzZXQgaWYgdGhlcmUgaXMgYSBkcml2ZXIgYXJlYSB3aXRob3V0IHZlcnRpY2FsIHdhbGwgb24gYm90aCBzaWRlc1xuICAgIGlmIChkcml2ZXJBcmVhTm9WZXJ0aWNhbFdhbGwpIHtcbiAgICAgIGNvbnN0IGNvYWNoV2lkdGggPSB0aGlzLmdldENhbGN1bGF0ZWREaW1lbnNpb24oY29hY2hJdGVtLmRpbWVuc2lvbikudztcblxuICAgICAgLy9yZWNhbGN1bGF0ZWQgYm9yZGVyV2lkdGggPSBjb2FjaFdpZHRoIC0gMiAqIGRyaXZlciBhcmVhIHdpZHRoLCBzaW5jZSB0aGUgZHJpdmVyIGFyZWEgaXMgb24gYm90aCBzaWRlc1xuICAgICAgYm9yZGVyV2lkdGggPSBjb2FjaFdpZHRoIC0gMiAqIChkcml2ZXJBcmVhTm9WZXJ0aWNhbFdhbGwuZGltZW5zaW9uLncgKiB0aGlzLmJhc2VHcmlkU2l6ZSk7XG5cbiAgICAgIC8vcmVjYWxjdWxhdGVkIGJvcmRlck9mZnNldFggPSBkcml2ZXIgYXJlYSB3aWR0aCwgc2luY2UgdGhlIGJvcmRlciBzdGFydHMgYWZ0ZXIgdGhlIGRyaXZlciBhcmVhIG9uIHRoZSBsZWZ0IHNpZGVcbiAgICAgIGJvcmRlck9mZnNldFggPSBkcml2ZXJBcmVhTm9WZXJ0aWNhbFdhbGwuZGltZW5zaW9uLncgKiB0aGlzLmJhc2VHcmlkU2l6ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Q29hY2hPdmVybGFwcGluZ0luZm8gPSB0aGlzLm92ZXJIYW5naW5nRWxlbWVudEluZm9ybWF0aW9uLmZpbmQoXG4gICAgICAoZWwpID0+IGVsLmNvYWNoSWQgPT0gY29hY2hJdGVtLmlkLFxuICAgICk7XG5cbiAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgb3ZlcmhhbmdpbmcgcGxhY2VzIG9yIGdyYXBoaWNhbCBlbGVtZW50cyB0byBhZGp1c3QgdGhlIGJvcmRlciB3aWR0aCBhbmQgb2Zmc2V0ICsgZ2FwXG4gICAgLy8gV2UgZG8gbm90IGRpZmZlcmVudGlhdGUgd2hldGhlciB0aGVyZSBpcyBzb21ldGhpbmcgdG8gYmUgZG9uZSBvbiBib3RoIHNpZGVzIGFzIHRoaXMgd291bGQgbGVhZCB0byB1bm5lY2Vzc2FyeVxuICAgIC8vIGNvbXBsZXhpdHkuIFNvIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBvbiBvbmUgc2lkZSwgd2UganVzdCBpbmNyZWFzZSB0aGUgY29hY2gtYm9yZGVyIG9uIGJvdGggc2lkZXMuXG4gICAgaWYgKFxuICAgICAgY3VycmVudENvYWNoT3ZlcmxhcHBpbmdJbmZvPy5vdmVyaGFuZ2luZ1BsYWNlcyB8fFxuICAgICAgY3VycmVudENvYWNoT3ZlcmxhcHBpbmdJbmZvPy5vdmVyaGFuZ2luZ0dyYXBoaWNBcmVhc1xuICAgICkge1xuICAgICAgYm9yZGVyV2lkdGggKz0gMiAqIHRoaXMuYmFzZUdyaWRTaXplOyAvLyB3ZSBpbmNyZWFzZSB0aGUgd2lkdGggYnkgMiBncmlkIHNpemVzIHRvIGhhdmUgZW5vdWdoIHNwYWNlIGZvciBwcm90cnVkZWQgcGxhY2VzIG9uIGJvdGggc2lkZXNcbiAgICAgIGJvcmRlck9mZnNldFggPSAwOyAvLyB3ZSBzdGFydCBhdCAwIHRvIGhhdmUgZW5vdWdoIHNwYWNlIG9uIHRoZSBsZWZ0IHNpZGUgYXMgd2VsbFxuICAgIH1cblxuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWNcbiAgICAgICAgY2xhc3M9XCIke2NsYXNzTWFwKHtcbiAgICAgICAgICAnc2JiLXNyLWNvYWNoLWhhcy1vdmVyaGFuZ2luZy1lbGVtZW50cyc6XG4gICAgICAgICAgICBjdXJyZW50Q29hY2hPdmVybGFwcGluZ0luZm8/Lm92ZXJoYW5naW5nUGxhY2VzIHx8XG4gICAgICAgICAgICBjdXJyZW50Q29hY2hPdmVybGFwcGluZ0luZm8/Lm92ZXJoYW5naW5nR3JhcGhpY0FyZWFzIHx8XG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgfSl9XCJcbiAgICAgICAgc3R5bGU9JHtzdHlsZU1hcCh7XG4gICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy13aWR0aCc6IGJvcmRlcldpZHRoLFxuICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMtaGVpZ2h0JzogYm9yZGVySGVpZ2h0LFxuICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMtdG9wJzogdGhpcy5jb2FjaEJvcmRlclBhZGRpbmcgKiAtMSxcbiAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLWxlZnQnOiBib3JkZXJPZmZzZXRYLFxuICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMtcG9zaXRpb24nOiAnYWJzb2x1dGUnLFxuICAgICAgICB9KX1cbiAgICAgICAgbmFtZT1cIkNPQUNIX0JPUkRFUl9NSURETEVcIlxuICAgICAgICA/c3RyZXRjaD0ke3RydWV9XG4gICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgPjwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYz5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UmVuZGVyZWRSb3dQbGFjZXMoXG4gICAgY29hY2g6IENvYWNoSXRlbSxcbiAgICBjb2FjaEluZGV4OiBudW1iZXIsXG4gICAgY29hY2hEZWNrSW5kZXg6IG51bWJlcixcbiAgICBwbGFjZUNvYWNoRGVja0luZGV4OiBudW1iZXIsXG4gICk6IFRlbXBsYXRlUmVzdWx0W10gfCBudWxsIHtcbiAgICBpZiAoIWNvYWNoLnBsYWNlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gUHJlcGFyZSByb3dzIHdpdGggdGhlIHBsYWNlcyB0byByZW5kZXIgYSB0YWJsZVxuICAgIGNvbnN0IHRhYmxlUm93UGxhY2VzOiBSZWNvcmQ8bnVtYmVyLCBQbGFjZVtdPiA9IHt9O1xuICAgIGZvciAoY29uc3QgcGxhY2Ugb2YgY29hY2gucGxhY2VzKSB7XG4gICAgICBpZiAoIXRhYmxlUm93UGxhY2VzW3BsYWNlLnBvc2l0aW9uLnldKSB7XG4gICAgICAgIHRhYmxlUm93UGxhY2VzW3BsYWNlLnBvc2l0aW9uLnldID0gW3BsYWNlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhYmxlUm93UGxhY2VzW3BsYWNlLnBvc2l0aW9uLnldLnB1c2gocGxhY2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRhYmxlUm93UGxhY2VzKVxuICAgICAgLm1hcCgocm93UGxhY2VzOiBQbGFjZVtdLCBpbmRleCkgPT4ge1xuICAgICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgICA8dHIgaWQ9XCJyb3ctJHtjb2FjaEluZGV4fS0ke3Jvd1BsYWNlc1swXS5wb3NpdGlvbi55fVwiIGRhdGEtcm93LWluZGV4PSR7aW5kZXh9PlxuICAgICAgICAgICAgJHt0aGlzLl9nZXRSZW5kZXJlZENvbHVtblBsYWNlcyhcbiAgICAgICAgICAgICAgcm93UGxhY2VzLFxuICAgICAgICAgICAgICBjb2FjaEluZGV4LFxuICAgICAgICAgICAgICBjb2FjaERlY2tJbmRleCxcbiAgICAgICAgICAgICAgcGxhY2VDb2FjaERlY2tJbmRleCxcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgYDtcbiAgICAgIH0pXG4gICAgICAuZmxhdE1hcCgocm93VGVtcGxhdGUpID0+IHJvd1RlbXBsYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFJlbmRlcmVkQ29sdW1uUGxhY2VzKFxuICAgIHBsYWNlczogUGxhY2VbXSxcbiAgICBjb2FjaEluZGV4OiBudW1iZXIsXG4gICAgZGVja0luZGV4OiBudW1iZXIsXG4gICAgcGxhY2VDb2FjaERlY2tJbmRleDogbnVtYmVyLFxuICApOiBUZW1wbGF0ZVJlc3VsdCB8IG51bGwge1xuICAgIC8vU29ydHMgZWFjaCBwbGFjZSBieSBpdHMgYXNjZW5kaW5nIHggY29vcmRpbmF0ZVxuICAgIHBsYWNlcy5zb3J0KFxuICAgICAgKHBsYWNlQTogUGxhY2UsIHBsYWNlQjogUGxhY2UpID0+IE51bWJlcihwbGFjZUEucG9zaXRpb24ueCkgLSBOdW1iZXIocGxhY2VCLnBvc2l0aW9uLngpLFxuICAgICk7XG5cbiAgICAvLyBGb3IgcmVuZGVyaW5nIHRoZSBwbGFjZXMgd2l0aGluIGEgdGQgZWxlbWVudCwgaGVyZSB3ZSB1c2UgcmVwZWF0IGRpcmVjdGl2ZSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIGZvciByZXVzaW5nIGVsZW1lbnRzICh0cmFjayBieSBpZCkuXG4gICAgY29uc3QgdHJhY2tQbGFjZUlkID0gY29hY2hJbmRleCArICctJyArIHBsYWNlQ29hY2hEZWNrSW5kZXg7XG4gICAgcmV0dXJuIGh0bWxgJHtyZXBlYXQoXG4gICAgICBwbGFjZXMsXG4gICAgICAocGxhY2UpID0+IHRyYWNrUGxhY2VJZCArICctJyArIHBsYWNlLm51bWJlcixcbiAgICAgIChwbGFjZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgY2FsY3VsYXRlZERpbWVuc2lvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZERpbWVuc2lvbihwbGFjZS5kaW1lbnNpb24pO1xuICAgICAgICBjb25zdCBjYWxjdWxhdGVkUG9zaXRpb24gPSB0aGlzLmdldENhbGN1bGF0ZWRQb3NpdGlvbihwbGFjZS5wb3NpdGlvbik7XG4gICAgICAgIGNvbnN0IHJvdGF0aW9uID0gcGxhY2Uucm90YXRpb24gfHwgMDtcbiAgICAgICAgY29uc3QgdGV4dFJvdGF0aW9uID0gdGhpcy5hbGlnblZlcnRpY2FsID8gLTkwIDogMDtcbiAgICAgICAgY29uc3QgcGxhY2VJZCA9IHRoaXMuZ2V0UGxhY2VFbGVtZW50SWQoZGVja0luZGV4LCBjb2FjaEluZGV4LCBwbGFjZS5udW1iZXIpO1xuICAgICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIGlkPVwiY2VsbC0ke2RlY2tJbmRleH0tJHtjb2FjaEluZGV4fS0ke3BsYWNlLnBvc2l0aW9uLnl9LSR7aW5kZXh9XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZ3JhcGhpY2FsLWVsZW1lbnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzYmItc2VhdC1yZXNlcnZhdGlvbi1wbGFjZS1jb250cm9sXG4gICAgICAgICAgICAgIHN0eWxlPSR7c3R5bGVNYXAoe1xuICAgICAgICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2wtdGV4dC1zY2FsZS12YWx1ZSc6IE1hdGgubWluKFxuICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlZERpbWVuc2lvbi53LFxuICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlZERpbWVuc2lvbi5oLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tcGxhY2UtY29udHJvbC13aWR0aCc6IGNhbGN1bGF0ZWREaW1lbnNpb24udyxcbiAgICAgICAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1wbGFjZS1jb250cm9sLWhlaWdodCc6IGNhbGN1bGF0ZWREaW1lbnNpb24uaCxcbiAgICAgICAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1wbGFjZS1jb250cm9sLXRvcCc6IGNhbGN1bGF0ZWRQb3NpdGlvbi55LFxuICAgICAgICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2wtbGVmdCc6IGNhbGN1bGF0ZWRQb3NpdGlvbi54LFxuICAgICAgICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2wtcm90YXRpb24nOiByb3RhdGlvbixcbiAgICAgICAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1wbGFjZS1jb250cm9sLXRleHQtcm90YXRpb24nOiB0ZXh0Um90YXRpb24sXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICBAc2VsZWN0cGxhY2U9JHsoc2VsZWN0UGxhY2VFdmVudDogQ3VzdG9tRXZlbnQ8UGxhY2VTZWxlY3Rpb24+KSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuX29uU2VsZWN0UGxhY2Uoc2VsZWN0UGxhY2VFdmVudCl9XG4gICAgICAgICAgICAgIGV4cG9ydHBhcnRzPVwic2JiLXNyLXBsYWNlLXBhcnRcIlxuICAgICAgICAgICAgICBpZD0ke3BsYWNlSWR9XG4gICAgICAgICAgICAgIGNsYXNzPVwic2VhdC1yZXNlcnZhdGlvbi1wbGFjZS1jb250cm9sXCJcbiAgICAgICAgICAgICAgdGV4dD0ke3BsYWNlLm51bWJlcn1cbiAgICAgICAgICAgICAgdHlwZT0ke3BsYWNlLnR5cGV9XG4gICAgICAgICAgICAgIHN0YXRlPSR7cGxhY2Uuc3RhdGV9XG4gICAgICAgICAgICAgIHRyYXZlbC1kaXJlY3Rpb249JHt0aGlzLnRyYXZlbERpcmVjdGlvbn1cbiAgICAgICAgICAgICAgY29hY2gtaW5kZXg9JHtjb2FjaEluZGV4fVxuICAgICAgICAgICAgICBkZWNrLWluZGV4PSR7cGxhY2VDb2FjaERlY2tJbmRleH1cbiAgICAgICAgICAgICAgZGF0YS1kZWNrLWluZGV4PSR7ZGVja0luZGV4fVxuICAgICAgICAgICAgICAucHJvcGVydHlJZHM9JHtwbGFjZS5wcm9wZXJ0eUlkc31cbiAgICAgICAgICAgICAgLnByZXZlbnRDbGljaz0ke3RoaXMucHJldmVudFBsYWNlQ2xpY2t9XG4gICAgICAgICAgICAgID9zaG93VGl0bGVJbmZvPVwiJHt0aGlzLnNob3dUaXRsZUluZm99XCJcbiAgICAgICAgICAgID48L3NiYi1zZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2w+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgYDtcbiAgICAgIH0sXG4gICAgKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UmVuZGVyZWRHcmFwaGljYWxFbGVtZW50cyhcbiAgICBncmFwaGljYWxFbGVtZW50czogQmFzZUVsZW1lbnRbXSxcbiAgICBjb2FjaERpbWVuc2lvbjogRWxlbWVudERpbWVuc2lvbixcbiAgICBjb2FjaEluZGV4OiBudW1iZXIsXG4gICAgY29hY2hEZWNrSW5kZXg6IG51bWJlcixcbiAgKTogVGVtcGxhdGVSZXN1bHRbXSB8IG51bGwge1xuICAgIGlmICghZ3JhcGhpY2FsRWxlbWVudHMpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIGdyYXBoaWNhbEVsZW1lbnRzPy5tYXAoKGdyYXBoaWNhbEVsZW1lbnQ6IEJhc2VFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBpY29uID0gZ3JhcGhpY2FsRWxlbWVudC5pY29uID8/ICcnO1xuICAgICAgY29uc3QgZWxlbWVudFJvdGF0aW9uID0gZ3JhcGhpY2FsRWxlbWVudC5yb3RhdGlvbiB8fCAwO1xuICAgICAgY29uc3QgaXNOb3RGaXhlZFJvdGF0aW9uR3JhcGhpY2FsRWxlbWVudCA9XG4gICAgICAgIHRoaXMuX25vdEZpeGVkUm90YXRhYmxlQXJlYUljb25zLmluZGV4T2YoZ3JhcGhpY2FsRWxlbWVudC5pY29uISkgPT09IC0xO1xuICAgICAgY29uc3QgZWxlbWVudEZpeGVkUm90YXRpb24gPVxuICAgICAgICB0aGlzLmFsaWduVmVydGljYWwgJiYgaXNOb3RGaXhlZFJvdGF0aW9uR3JhcGhpY2FsRWxlbWVudFxuICAgICAgICAgID8gZWxlbWVudFJvdGF0aW9uIC0gOTBcbiAgICAgICAgICA6IGVsZW1lbnRSb3RhdGlvbjtcblxuICAgICAgLy9jaGVjayBpZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIG5vdCBhbiBhcmVhIGVsZW1lbnQsIHNpbmNlIHRoaXMgZWxlbWVudCBpcyBkcmF3biB3aXRob3V0IGFuIGFyZWEgY29tcG9uZW50XG4gICAgICBpZiAodGhpcy5ub3RBcmVhRWxlbWVudHMuZmluZEluZGV4KChub3RBcmVhRWxlbWVudCkgPT4gbm90QXJlYUVsZW1lbnQgPT09IGljb24pID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFJlbmRlckVsZW1lbnRXaXRob3V0QXJlYShncmFwaGljYWxFbGVtZW50LCBlbGVtZW50Um90YXRpb24sIGNvYWNoRGltZW5zaW9uKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLl9nZXRSZW5kZXJFbGVtZW50V2l0aEFyZWEoXG4gICAgICAgIGdyYXBoaWNhbEVsZW1lbnQsXG4gICAgICAgIGVsZW1lbnRGaXhlZFJvdGF0aW9uLFxuICAgICAgICBjb2FjaERpbWVuc2lvbixcbiAgICAgICAgY29hY2hJbmRleCxcbiAgICAgICAgY29hY2hEZWNrSW5kZXgsXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZXMgYSByZW5kZXJlZCBlbGVtZW50IHdpdGggYW4gYXJlYSBjb21wb25lbnRcbiAgICogQHBhcmFtIGdyYXBoaWNhbEVsZW1lbnRcbiAgICogQHBhcmFtIHJvdGF0aW9uXG4gICAqIEBwYXJhbSBjb2FjaERpbWVuc2lvblxuICAgKiBAcGFyYW0gY29hY2hJbmRleCB1c2VkIHRvIGdlbmVyYXRlIGEgdW5pcXVlIGlkIGZvciB0aGUgcG9wb3ZlciB0cmlnZ2VyXG4gICAqIEBwYXJhbSBjb2FjaERlY2tJbmRleCB1c2VkIHRvIGdlbmVyYXRlIGEgdW5pcXVlIGlkXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9nZXRSZW5kZXJFbGVtZW50V2l0aEFyZWEoXG4gICAgZ3JhcGhpY2FsRWxlbWVudDogQmFzZUVsZW1lbnQsXG4gICAgcm90YXRpb246IG51bWJlcixcbiAgICBjb2FjaERpbWVuc2lvbjogRWxlbWVudERpbWVuc2lvbixcbiAgICBjb2FjaEluZGV4OiBudW1iZXIsXG4gICAgY29hY2hEZWNrSW5kZXg6IG51bWJlcixcbiAgKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIC8vIGZvciBUQUJMRSwgd2UgdXNlIHRoZSBhcmVhIGNvbXBvbmVudCBpdHNlbGYgdG8gZGlzcGxheSB0aGUgdGFibGUgaW5zdGVhZCBvZiB0aGUgU1ZHIGdyYXBoaWMuXG4gICAgLy8gRHVlIHRvIGRpZmZlcmVudCBoZWlnaHRzIGFuZCB3aWR0aHMsIGl0IHdvdWxkbid0IHNob3cgY29ycmVjdGx5LiBUbyBjb3JyZWN0IHRoaXMsIHdlIHdvdWxkXG4gICAgLy8gbmVlZCBkaWZmaWN1bHQgY2FsY3VsYXRpb25zIGZvciBwb3NpdGlvbiwgcm90YXRpb24gYW5kIGRpbWVuc2lvbi5cbiAgICBjb25zdCBpc05vdFRhYmxlR3JhcGhpYyA9IGdyYXBoaWNhbEVsZW1lbnQuaWNvbj8uaW5kZXhPZignVEFCTEUnKSA9PT0gLTE7XG4gICAgY29uc3QgYXJlYVByb3BlcnR5ID0gZ3JhcGhpY2FsRWxlbWVudC5pY29uICYmIGlzTm90VGFibGVHcmFwaGljID8gZ3JhcGhpY2FsRWxlbWVudC5pY29uIDogbnVsbDtcbiAgICBjb25zdCBzdHJldGNoSGVpZ2h0ID1cbiAgICAgIHRoaXMuaXNFbGVtZW50RGlyZWN0bHlPbkJvcmRlcihncmFwaGljYWxFbGVtZW50LCBjb2FjaERpbWVuc2lvbikgJiZcbiAgICAgIGFyZWFQcm9wZXJ0eSAhPT0gJ0VOVFJZX0VYSVQnO1xuICAgIGNvbnN0IGFyaWFMYWJlbEZvckFyZWEgPSBncmFwaGljYWxFbGVtZW50Lmljb25cbiAgICAgID8gZ2V0STE4blNlYXRSZXNlcnZhdGlvbihncmFwaGljYWxFbGVtZW50Lmljb24sIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpXG4gICAgICA6IG5vdGhpbmc7XG5cbiAgICBjb25zdCBjYWxjdWxhdGVkRGltZW5zaW9uID0gdGhpcy5nZXRDYWxjdWxhdGVkRGltZW5zaW9uKFxuICAgICAgZ3JhcGhpY2FsRWxlbWVudC5kaW1lbnNpb24sXG4gICAgICBjb2FjaERpbWVuc2lvbixcbiAgICAgIHRydWUsXG4gICAgICBzdHJldGNoSGVpZ2h0LFxuICAgICk7XG5cbiAgICBjb25zdCBjYWxjdWxhdGVkUG9zaXRpb24gPSB0aGlzLmdldENhbGN1bGF0ZWRQb3NpdGlvbihcbiAgICAgIGdyYXBoaWNhbEVsZW1lbnQucG9zaXRpb24sXG4gICAgICBncmFwaGljYWxFbGVtZW50LmRpbWVuc2lvbixcbiAgICAgIGNvYWNoRGltZW5zaW9uLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuXG4gICAgLy9nZW5lcmF0ZSB1bmlxdWUgaW5kZXggbnVtYmVyIGZvciB0aGUgdHJpZ2dlciBlbGVtZW50XG4gICAgY29uc3QgdHJpZ2dlcklkID0gYHBvcG92ZXItdHJpZ2dlci0ke2NvYWNoRGVja0luZGV4fS0ke2NvYWNoSW5kZXh9LSR7Y2FsY3VsYXRlZFBvc2l0aW9uLnh9LSR7Y2FsY3VsYXRlZFBvc2l0aW9uLnl9YDtcbiAgICBsZXQgZWxlbWVudE1vdW50aW5nID0gJ2ZyZWUnO1xuXG4gICAgaWYgKGdyYXBoaWNhbEVsZW1lbnQucG9zaXRpb24ueSA9PT0gdGhpcy5jb2FjaEJvcmRlck9mZnNldCAqIC0xKSB7XG4gICAgICBlbGVtZW50TW91bnRpbmcgPSAndXBwZXItYm9yZGVyJztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgZ3JhcGhpY2FsRWxlbWVudC5wb3NpdGlvbi55ICsgZ3JhcGhpY2FsRWxlbWVudC5kaW1lbnNpb24uaCA9PT1cbiAgICAgIGNvYWNoRGltZW5zaW9uLmggKyB0aGlzLmNvYWNoQm9yZGVyT2Zmc2V0XG4gICAgKSB7XG4gICAgICBlbGVtZW50TW91bnRpbmcgPSAnbG93ZXItYm9yZGVyJztcbiAgICB9XG5cbiAgICAvLyBUSU1PLTQ1ODMwXG4gICAgLy8gSWYgYXJlYSBlbGVtZW50cyBhcmUgbG9jYXRlZCBhdCB0aGUgYm9yZGVyIG9mIGNvYWNoLFxuICAgIC8vIHdlIGhhdmUgdG8gbWFudWFsbHkgbW9kaWZ5IHRoZSBwb3NpdGlvbiBhbmQgaGVpZ2h0IG9mIHRoZSBhcmVhIGVsZW1lbnQsXG4gICAgLy8gc28gdGhhdCB3ZSBnZXQgYSBnYXAgZnJvbSB0aGUgdmlzdWVsIGNvYWNoIGJvcmRlclxuICAgIGlmIChlbGVtZW50TW91bnRpbmcgIT09ICdmcmVlJykge1xuICAgICAgY2FsY3VsYXRlZFBvc2l0aW9uLnkgKz0gZWxlbWVudE1vdW50aW5nID09PSAndXBwZXItYm9yZGVyJyA/IDIgOiAxO1xuICAgICAgY2FsY3VsYXRlZERpbWVuc2lvbi5oIC09IDM7XG4gICAgfVxuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLWFyZWFcbiAgICAgICAgaWQ9XCIke3RyaWdnZXJJZH1cIlxuICAgICAgICBjbGFzcz1cIiR7Y2xhc3NNYXAoeyAnc2JiLXNlYXQtcmVzZXJ2YXRpb24tYXJlYS0tY3Vyc29yLXBvaW50ZXInOiBhcmVhUHJvcGVydHkgIT09IG51bGwgfSl9XCJcbiAgICAgICAgc3R5bGU9JHtzdHlsZU1hcCh7XG4gICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tYXJlYS13aWR0aCc6IGNhbGN1bGF0ZWREaW1lbnNpb24udyxcbiAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1hcmVhLWhlaWdodCc6IGNhbGN1bGF0ZWREaW1lbnNpb24uaCxcbiAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1hcmVhLXRvcCc6IGNhbGN1bGF0ZWRQb3NpdGlvbi55LFxuICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWFyZWEtbGVmdCc6IGNhbGN1bGF0ZWRQb3NpdGlvbi54LFxuICAgICAgICB9KX1cbiAgICAgICAgbW91bnRpbmc9JHtlbGVtZW50TW91bnRpbmd9XG4gICAgICAgIGJhY2tncm91bmQ9XCJkYXJrXCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgID5cbiAgICAgICAgJHthcmVhUHJvcGVydHlcbiAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgIDxzYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljXG4gICAgICAgICAgICAgICAgc3R5bGU9JHtzdHlsZU1hcCh7XG4gICAgICAgICAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLW1heC13aWR0aCc6IGNhbGN1bGF0ZWREaW1lbnNpb24udyxcbiAgICAgICAgICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMtaGVpZ2h0JzogdGhpcy5iYXNlR3JpZFNpemUsXG4gICAgICAgICAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLXJvdGF0aW9uJzogcm90YXRpb24sXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgbmFtZT0ke2FyZWFQcm9wZXJ0eX1cbiAgICAgICAgICAgICAgICByb2xlPVwiaW1nXCJcbiAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by13aWR0aFwiXG4gICAgICAgICAgICAgID48L3NiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWM+XG4gICAgICAgICAgICBgXG4gICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgPC9zYmItc2VhdC1yZXNlcnZhdGlvbi1hcmVhPlxuICAgICAgJHthcmVhUHJvcGVydHkgPyB0aGlzLl9wb3BvdmVyKHRyaWdnZXJJZCwgYXJpYUxhYmVsRm9yQXJlYSkgOiBub3RoaW5nfVxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIF9nZXRSZW5kZXJFbGVtZW50V2l0aG91dEFyZWEoXG4gICAgZ3JhcGhpY2FsRWxlbWVudDogQmFzZUVsZW1lbnQsXG4gICAgcm90YXRpb246IG51bWJlcixcbiAgICBjb2FjaERpbWVuc2lvbjogRWxlbWVudERpbWVuc2lvbixcbiAgKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IGNhbGN1bGF0ZWREaW1lbnNpb24gPSB0aGlzLmdldENhbGN1bGF0ZWREaW1lbnNpb24oXG4gICAgICBncmFwaGljYWxFbGVtZW50LmRpbWVuc2lvbixcbiAgICAgIGNvYWNoRGltZW5zaW9uLFxuICAgICk7XG4gICAgY29uc3QgY2FsY3VsYXRlZFBvc2l0aW9uID0gdGhpcy5nZXRDYWxjdWxhdGVkUG9zaXRpb24oXG4gICAgICBncmFwaGljYWxFbGVtZW50LnBvc2l0aW9uLFxuICAgICAgZ3JhcGhpY2FsRWxlbWVudC5kaW1lbnNpb24sXG4gICAgICBjb2FjaERpbWVuc2lvbixcbiAgICApO1xuXG4gICAgLy8gSWYgdGhlIGljb24gaXMgdGhlIGRyaXZlciBhcmVhLCB0aGVuIGhlcmUgY29uY2F0IHRoZSB2ZWhpY2xlIHR5cGUgdG8gZ2V0IHRoZSByaWdodCB2ZWhpY2xlIGNoYXNzaXMgaWNvblxuICAgIGNvbnN0IGljb24gPVxuICAgICAgZ3JhcGhpY2FsRWxlbWVudC5pY29uICYmIGdyYXBoaWNhbEVsZW1lbnQuaWNvbi5lbmRzV2l0aCgnRFJJVkVSX0FSRUEnKVxuICAgICAgICA/IGdyYXBoaWNhbEVsZW1lbnQuaWNvbj8uY29uY2F0KFxuICAgICAgICAgICAgJ18nLFxuICAgICAgICAgICAgdGhpcy5zZWF0UmVzZXJ2YXRpb25zW3RoaXMuY3VyclNlbGVjdGVkRGVja0luZGV4XS52ZWhpY2xlVHlwZSxcbiAgICAgICAgICApXG4gICAgICAgIDogZ3JhcGhpY2FsRWxlbWVudC5pY29uO1xuXG4gICAgcmV0dXJuIGh0bWxgIDxzYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljXG4gICAgICBzdHlsZT0ke3N0eWxlTWFwKHtcbiAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy13aWR0aCc6IGNhbGN1bGF0ZWREaW1lbnNpb24udyxcbiAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy1oZWlnaHQnOiBjYWxjdWxhdGVkRGltZW5zaW9uLmgsXG4gICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMtdG9wJzogY2FsY3VsYXRlZFBvc2l0aW9uLnksXG4gICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMtbGVmdCc6IGNhbGN1bGF0ZWRQb3NpdGlvbi54LFxuICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLXBvc2l0aW9uJzogJ2Fic29sdXRlJyxcbiAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy1yb3RhdGlvbic6IHJvdGF0aW9uLFxuICAgICAgfSl9XG4gICAgICBuYW1lPSR7aWNvbiA/PyBub3RoaW5nfVxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgID9zdHJldGNoPSR7dHJ1ZX1cbiAgICA+PC9zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljPmA7XG4gIH1cblxuICBwcml2YXRlIF9nZXRSZW5kZXJlZFNlcnZpY2VFbGVtZW50cyhcbiAgICBjb2FjaEluZGV4OiBudW1iZXIsXG4gICAgY29hY2hEZWNrSW5kZXg6IG51bWJlcixcbiAgICBzZXJ2aWNlRWxlbWVudHM/OiBCYXNlRWxlbWVudFtdLFxuICApOiBUZW1wbGF0ZVJlc3VsdFtdIHwgbnVsbCB7XG4gICAgaWYgKCFzZXJ2aWNlRWxlbWVudHMpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHNlcnZpY2VFbGVtZW50cz8ubWFwKChzZXJ2aWNlRWxlbWVudDogQmFzZUVsZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHRpdGxlRGVzY3JpcHRpb24gPSBzZXJ2aWNlRWxlbWVudC5pY29uXG4gICAgICAgID8gZ2V0STE4blNlYXRSZXNlcnZhdGlvbihzZXJ2aWNlRWxlbWVudC5pY29uLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50KVxuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkRGltZW5zaW9uID0gdGhpcy5nZXRDYWxjdWxhdGVkRGltZW5zaW9uKHNlcnZpY2VFbGVtZW50LmRpbWVuc2lvbik7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkUG9zaXRpb24gPSB0aGlzLmdldENhbGN1bGF0ZWRQb3NpdGlvbihzZXJ2aWNlRWxlbWVudC5wb3NpdGlvbik7XG4gICAgICBjb25zdCBlbGVtZW50Um90YXRpb24gPSBzZXJ2aWNlRWxlbWVudC5yb3RhdGlvbiB8fCAwO1xuICAgICAgY29uc3QgZWxlbWVudEZpeGVkUm90YXRpb24gPSB0aGlzLmFsaWduVmVydGljYWwgPyBlbGVtZW50Um90YXRpb24gLSA5MCA6IGVsZW1lbnRSb3RhdGlvbjtcblxuICAgICAgLy9nZW5lcmF0ZSB1bmlxdWUgaW5kZXggbnVtYmVyIGZvciB0aGUgdHJpZ2dlciBlbGVtZW50XG4gICAgICBjb25zdCB0cmlnZ2VySWQgPSBgcG9wb3Zlci10cmlnZ2VyLSR7Y29hY2hEZWNrSW5kZXh9LSR7Y29hY2hJbmRleH0tJHtjYWxjdWxhdGVkUG9zaXRpb24ueH0tJHtjYWxjdWxhdGVkUG9zaXRpb24ueX1gO1xuXG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWNcbiAgICAgICAgICBpZD1cIiR7dHJpZ2dlcklkfVwiXG4gICAgICAgICAgc3R5bGU9JHtzdHlsZU1hcCh7XG4gICAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLXdpZHRoJzogY2FsY3VsYXRlZERpbWVuc2lvbi53LFxuICAgICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy1oZWlnaHQnOiBjYWxjdWxhdGVkRGltZW5zaW9uLmgsXG4gICAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLXRvcCc6IGNhbGN1bGF0ZWRQb3NpdGlvbi55LFxuICAgICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy1sZWZ0JzogY2FsY3VsYXRlZFBvc2l0aW9uLngsXG4gICAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLXBvc2l0aW9uJzogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMtcm90YXRpb24nOiBlbGVtZW50Rml4ZWRSb3RhdGlvbixcbiAgICAgICAgICB9KX1cbiAgICAgICAgICBjbGFzcz1cInNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMtLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICBuYW1lPSR7c2VydmljZUVsZW1lbnQuaWNvbiA/PyBub3RoaW5nfVxuICAgICAgICAgIHJvbGU9XCJpbWdcIlxuICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgID48L3NiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWM+XG4gICAgICAgICR7dGhpcy5fcG9wb3Zlcih0cmlnZ2VySWQsIHRpdGxlRGVzY3JpcHRpb24pfVxuICAgICAgYDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW5hZ2VzIHRoZSBzZWxlY3RlZCBwbGFjZSBldmVudCB0cmlnZ2VyZWQgZnJvbSB0aGUgcGxhY2VcbiAgICogRWFjaCBzZWxlY3Rpb24gZW1pdHMgYW4gYXJyYXkgb2YgYWxsIHNlbGVjdGVkIHBsYWNlc1xuICAgKiBAcGFyYW0gc2VsZWN0UGxhY2VFdmVudFxuICAgKi9cbiAgcHJpdmF0ZSBfb25TZWxlY3RQbGFjZShzZWxlY3RQbGFjZUV2ZW50OiBDdXN0b21FdmVudDxQbGFjZVNlbGVjdGlvbj4pOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZFBsYWNlID0gc2VsZWN0UGxhY2VFdmVudC5kZXRhaWw7XG4gICAgLy8gV2UgaGF2ZSB0byBzZXQgcHJldmVudENvYWNoU2Nyb2xsQnlQbGFjZUNsaWNrIHRvIHRydWUsIHRvIHByZXZlbnQgYXV0b21hdGljIHNjcm9sbGluZyB0byB0aGUgbmV3IGZvY3VzZWQgcGxhY2VcbiAgICB0aGlzLnByZXZlbnRDb2FjaFNjcm9sbEJ5UGxhY2VDbGljayA9IHRydWU7XG4gICAgdGhpcy5pc0NvYWNoR3JpZEZvY3VzYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuZm9jdXNlZENvYWNoSW5kZXggPSAtMTtcbiAgICAvLyBDaGVjayBhbnkga2V5Ym9hcmQgZXZlbnQgd2FzIHRyaWdnZXJlZCBpbnNpZGUgdGhlIHNlYXQgcmVzZXJ2YXRpb24gY29tcG9uZW50LFxuICAgIC8vIHNvIHdlIGNhbiBzYXkgdGhlIG5hdGl2ZSBicm93c2VyIGZvY3VzIGxpZXMgb24gdGhlIGNvbXBvbmVudFxuICAgIGlmICghdGhpcy5oYXNTZWF0UmVzZXJ2YXRpb25OYXRpdmVGb2N1cykge1xuICAgICAgdGhpcy5oYXNTZWF0UmVzZXJ2YXRpb25OYXRpdmVGb2N1cyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnByZXZlbnRQbGFjZUNsaWNrKSB7XG4gICAgICAvLyBBZGQgcGxhY2UgdG8gcGxhY2UgY29sbGVjdGlvblxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFNlYXRSZXNlcnZhdGlvblBsYWNlcyhzZWxlY3RlZFBsYWNlKTtcbiAgICAgIHRoaXMudXBkYXRlQ3VycmVudFNlbGVjdGVkUGxhY2VJbkNvYWNoKHNlbGVjdGVkUGxhY2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX29uU2VsZWN0TmF2Q29hY2goZXZlbnQ6IEN1c3RvbUV2ZW50PG51bWJlcj4pOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZE5hdkNvYWNoSW5kZXggPSBldmVudC5kZXRhaWw7XG5cbiAgICB0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5wcmV2ZW50Q29hY2hTY3JvbGxCeVBsYWNlQ2xpY2sgPSBmYWxzZTtcbiAgICB0aGlzLmhhc1NlYXRSZXNlcnZhdGlvbk5hdGl2ZUZvY3VzID0gdHJ1ZTtcblxuICAgIGlmIChzZWxlY3RlZE5hdkNvYWNoSW5kZXggIT09IG51bGwgJiYgc2VsZWN0ZWROYXZDb2FjaEluZGV4ICE9PSB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXgpIHtcbiAgICAgIHRoaXMudW5mb2N1c1BsYWNlRWxlbWVudCgpO1xuICAgICAgdGhpcy5zY3JvbGxUb1NlbGVjdGVkTmF2Q29hY2goc2VsZWN0ZWROYXZDb2FjaEluZGV4KTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkTmF2Q29hY2hJbmRleCA9PT0gdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4KSB7XG4gICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRTZWxlY3RlZENvYWNoKCk7XG4gICAgICB0aGlzLnByZXNlbGVjdFBsYWNlSW5Db2FjaCgpO1xuICAgIH1cblxuICAgIC8vY2xvc2UgYWxsIG9wZW5lZCBwb3BvdmVyc1xuICAgIHRoaXMuX2Nsb3NlUG9wb3ZlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Gb2N1c05hdkNvYWNoKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcmV2ZW50Q29hY2hTY3JvbGxCeVBsYWNlQ2xpY2spIHtcbiAgICAgIHRoaXMucHJlc2VsZWN0UGxhY2VJbkNvYWNoKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNQbGFjZUVsZW1lbnQodGhpcy5jdXJyU2VsZWN0ZWRQbGFjZSk7XG4gICAgfVxuXG4gICAgdGhpcy5pc0F1dG9TY3JvbGxpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcG9wb3ZlciBmb3IgZXh0cmEgc2VydmljZSBpbmZvcm1hdGlvblxuICAgKiBAcGFyYW0gdHJpZ2dlcklkXG4gICAqIEBwYXJhbSBwb3BvdmVyQ29udGVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfcG9wb3ZlcihcbiAgICB0cmlnZ2VySWQ6IHN0cmluZyxcbiAgICBwb3BvdmVyQ29udGVudDogc3RyaW5nIHwgbnVsbCB8IHR5cGVvZiBub3RoaW5nLFxuICApOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2JiLXBvcG92ZXIgdHJpZ2dlcj1cIiR7dHJpZ2dlcklkfVwiIGhvdmVyLXRyaWdnZXI9XCJcIj5cbiAgICAgICAgPHAgY2xhc3M9XCJzYmItdGV4dC1zIHNiYi1zci1wb3BvdmVyXCI+JHtwb3BvdmVyQ29udGVudH08L3A+XG4gICAgICA8L3NiYi1wb3BvdmVyPlxuICAgIGA7XG4gIH1cblxuICAvKipcbiAgICogdHJpZ2dlciB0byBjbG9zZSBhbGwgb3BlbmVkIHBvcG92ZXJzIChub3JtYWxseSBvbmx5IG9uZSBpcyBvcGVuZWQgYXQgYSB0aW1lKVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfY2xvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgIHRoaXMuc2hhZG93Um9vdFxuICAgICAgPy5xdWVyeVNlbGVjdG9yQWxsPFNiYlBvcG92ZXJFbGVtZW50Pignc2JiLXBvcG92ZXI6c3RhdGUoc3RhdGUtb3BlbmVkKScpXG4gICAgICAuZm9yRWFjaCgocG9wb3ZlcikgPT4gcG9wb3Zlci5jbG9zZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldERlc2NyaXB0aW9uVGFibGVDb2FjaChjb2FjaEl0ZW06IENvYWNoSXRlbSk6IHN0cmluZyB7XG4gICAgLy9zaG93IGRpZmZlcmVudCB0YWJsZSBjYXB0aW9uIGZvciBzY3JlZW5yZWFkZXIgaWYgaXQgaXMgYSBsb2NvbW90aXZlXG4gICAgaWYgKGNvYWNoSXRlbS50eXBlID09PSAnTE9DT01PVElWRV9DT0FDSCcpIHtcbiAgICAgIHJldHVybiBnZXRJMThuU2VhdFJlc2VydmF0aW9uKCdDT0FDSF9MT0NPTU9USVZFJywgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCk7XG4gICAgfVxuXG4gICAgaWYgKCFjb2FjaEl0ZW0ucGxhY2VzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBnZXRJMThuU2VhdFJlc2VydmF0aW9uKCdDT0FDSF9CTE9DS0VEX1RBQkxFX0NBUFRJT04nLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50LCBbXG4gICAgICAgIGNvYWNoSXRlbS5pZCxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIGxldCB0YWJsZUNvYWNoRGVzY3JpcHRpb246IHN0cmluZztcbiAgICBjb25zdCBhcmVhRGVzY3JpcHRpb25zID0gdGhpcy5fZ2V0VGl0bGVEZXNjcmlwdGlvbkxpc3RTdHJpbmcoY29hY2hJdGVtLmdyYXBoaWNFbGVtZW50cyEpO1xuICAgIGNvbnN0IHNlcnZpY2VEZXNjcmlwdGlvbnMgPSB0aGlzLl9nZXRUaXRsZURlc2NyaXB0aW9uTGlzdFN0cmluZyhjb2FjaEl0ZW0uc2VydmljZUVsZW1lbnRzISk7XG5cbiAgICB0YWJsZUNvYWNoRGVzY3JpcHRpb24gPSBnZXRJMThuU2VhdFJlc2VydmF0aW9uKCdDT0FDSF9UQUJMRV9DQVBUSU9OJywgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCwgW1xuICAgICAgY29hY2hJdGVtLmlkLFxuICAgIF0pO1xuXG4gICAgaWYgKCF0aGlzLmhhc05hdmlnYXRpb24pIHtcbiAgICAgIC8vIEV4cGFuZHMgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgc2VhdHMgYW5kIGJpY3ljbGUgc3BhY2VzIGFzIGluZm9cbiAgICAgIGNvbnN0IGZyZWVQbGFjZXMgPSB0aGlzLmdldEF2YWlsYWJsZUZyZWVQbGFjZXNOdW1Gcm9tQ29hY2goY29hY2hJdGVtLnBsYWNlcyk7XG4gICAgICBjb25zdCBmcmVlUGxhY2VzVHh0ID0gZ2V0STE4blNlYXRSZXNlcnZhdGlvbihcbiAgICAgICAgJ0NPQUNIX0FWQUlMQUJMRV9OVU1CRVJfT0ZfUExBQ0VTJyxcbiAgICAgICAgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCxcbiAgICAgICAgW2ZyZWVQbGFjZXMuc2VhdHMsIGZyZWVQbGFjZXMuYmljeWNsZXNdLFxuICAgICAgKTtcbiAgICAgIHRhYmxlQ29hY2hEZXNjcmlwdGlvbiA9IHRhYmxlQ29hY2hEZXNjcmlwdGlvbi5jb25jYXQoJy4gJykuY29uY2F0KGZyZWVQbGFjZXNUeHQpLmNvbmNhdCgnLiAnKTtcbiAgICB9XG5cbiAgICBpZiAoISFhcmVhRGVzY3JpcHRpb25zIHx8ICEhc2VydmljZURlc2NyaXB0aW9ucykge1xuICAgICAgdGFibGVDb2FjaERlc2NyaXB0aW9uICs9XG4gICAgICAgICcuICcgKyBnZXRJMThuU2VhdFJlc2VydmF0aW9uKCdDT0FDSF9BVkFJTEFCTEVfU0VSVklDRVMnLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50KSArICc6ICc7XG4gICAgICB0YWJsZUNvYWNoRGVzY3JpcHRpb24gKz0gc2VydmljZURlc2NyaXB0aW9ucyArICcsICcgKyBhcmVhRGVzY3JpcHRpb25zICsgJy4nO1xuICAgIH1cbiAgICByZXR1cm4gdGFibGVDb2FjaERlc2NyaXB0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VGl0bGVEZXNjcmlwdGlvbkxpc3RTdHJpbmcoZGVzY3JpcHRpb25zRWxlbWVudHM6IEJhc2VFbGVtZW50W10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHVuaXF1ZURlc2NyaXB0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgIHJldHVybiBkZXNjcmlwdGlvbnNFbGVtZW50c1xuICAgICAgPy5tYXAoKGRlc2NyaXB0aW9uRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBpY29uID0gZGVzY3JpcHRpb25FbGVtZW50Lmljb247XG4gICAgICAgIGlmICghaWNvbikgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb25BbHJlYWR5RXhpc3QgPSB1bmlxdWVEZXNjcmlwdGlvbnMuaW5kZXhPZihpY29uKSA+IC0xO1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IGdldEkxOG5TZWF0UmVzZXJ2YXRpb24oXG4gICAgICAgICAgZGVzY3JpcHRpb25FbGVtZW50Lmljb24hLFxuICAgICAgICAgIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGlzVmFsaWREZXNjcmlwdGlvbiA9XG4gICAgICAgICAgdGhpcy5fbm90Rml4ZWRSb3RhdGFibGVBcmVhSWNvbnMuaW5kZXhPZihpY29uKSA9PT0gLTEgJiZcbiAgICAgICAgICB0aGlzLm5vdEFyZWFFbGVtZW50cy5pbmRleE9mKGljb24pID09PSAtMTtcblxuICAgICAgICBpZiAoIWRlc2NyaXB0aW9uQWxyZWFkeUV4aXN0KSB7XG4gICAgICAgICAgdW5pcXVlRGVzY3JpcHRpb25zLnB1c2goZGVzY3JpcHRpb25FbGVtZW50Lmljb24hKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISF0cmFuc2xhdGlvbiAmJiAhZGVzY3JpcHRpb25BbHJlYWR5RXhpc3QgJiYgaXNWYWxpZERlc2NyaXB0aW9uID8gdHJhbnNsYXRpb24gOiBudWxsO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKGRlc2NyaXB0aW9uKSA9PiAhIWRlc2NyaXB0aW9uKVxuICAgICAgLmpvaW4oJywgJyk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1zZWF0LXJlc2VydmF0aW9uJzogU2JiU2VhdFJlc2VydmF0aW9uRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQXVDTSw2QkFBeUIsTUFBQTs7MEJBRDlCLGNBQWMsc0JBQXNCLENBQUM7Ozs7b0JBQ0U7QUFBUixFQUFBLG1CQUFRLFlBQTBCO0FBQUE7O0FBR3hELFdBQUEsWUFBWSxJQUFJLHNCQUFzQixJQUFJO0FBSTFDLFdBQUEsOEJB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
|
|
1
|
+
import { t as SbbSeatReservationElement } from "../../seat-reservation.component-MOv5kHDC.js";
|
|
2
|
+
export { SbbSeatReservationElement };
|