{"version":3,"names":["ArrowRightIcon","render","h","style","this","svgStyle","width","height","viewBox","version","xmlns","stroke","d","DeleteIcon","fill","NjRoute","constructor","routeProperties","component","path","title","params","getParameter","name","defaultValue","NjRouter","matchRoute","pathParts","split","matchingRoute","routes","find","route","convertParams","Object","assign","window","location","hash","queryString","keyValueParts","i","length","keyValue","decodeURI","componentWillLoad","self","addEventListener","substring","document","scrollTo","njSearchRootCss","NjSearchRoot","hostRef","showFormOnly","langItems","querySelectorAll","forEach","item","linkItem","href","loadInitData","el","class","njShoppingCartCss","NjShoppingCart","shoppingCartPrice","prebookData","insurancePremium","init","productSelectedHandler","event","detail","selectedOutwardProduct","selectedReturnProduct","product","journeyData","reservationMode","getFinalProduct","ReservationMode","Outward","Return","onPrebookRequestPrepared","outwardData","returnData","outwardOffer","getFinalOffer","returnOffer","passangers","dataStore","getSessionData","DATA_STORE_KEY_PASSENGERS","DATA_STORE_KEY_PREBOOK","paymentInformation","amount","_b","_a","insuranceSelected","handleRemoveJourney","removeJourney","renderConnectionData","connectionData","connection","depDate","departure","trainType","getTrainCategoryForName","train","toLowerCase","i18n","getMessage","onClick","format","getShortMonth","from","to","dep_time","category","hideIcon","arr_time","renderPassangerData","renderPassangerDataByType","PassangerType","Adult","TenToFourteenYearOldChild","Child","SmallChildSeat","SmallChild","Bike","passangerType","filter","passanger","njPassangerType","map","njCards","card","code","cardName","join","njChallengedOptions","wheelchair","attendant","_c","dog","renderSelectedProduct","selectedProduct","translateCompartmentName","njProduct","compartment","productType","formatPrice","price","additionalProduct","getOfferName","offer","njIndex","priceClass","renderInsurance","role","id","njShoppingCartBtnCss","NjShoppingCartBtn","loadPrices","onSessionDataChanged","sessionName","onSessionDataRemoved","handleToggleClick","ev","preventDefault","stopPropagation","shoppingDialog","querySelector","toggle","njShoppingCartDialogCss","NjShoppingCartDialog","onBodyClick","hide","onshoppingCartBtnClick","isVisible","show","njTrainIconCss","NjTrainIcon","Host","TicketsIcon","trainIconCss","TrainIcon"],"sources":["src/components/icons/arrow-right-icon.tsx","src/components/icons/delete-icon.tsx","src/components/nj-router/NjRoute.ts","src/components/nj-router/nj-router.tsx","src/components/nj-search-root/nj-search-root.css?tag=nj-search-root&encapsulation=shadow","src/components/nj-search-root/nj-search-root.tsx","src/components/nj-shopping-cart/nj-shopping-cart.scss?tag=nj-shopping-cart&encapsulation=shadow","src/components/nj-shopping-cart/nj-shopping-cart.tsx","src/components/nj-shopping-cart-btn/nj-shopping-cart-btn.scss?tag=nj-shopping-cart-btn&encapsulation=shadow","src/components/nj-shopping-cart-btn/nj-shopping-cart-btn.tsx","src/components/nj-shopping-cart-dialog/nj-shopping-cart-dialog.scss?tag=nj-shopping-cart-dialog&encapsulation=shadow","src/components/nj-shopping-cart-dialog/nj-shopping-cart-dialog.tsx","src/components/nj-train-icon/nj-train-icon.scss?tag=nj-train-icon&encapsulation=shadow","src/components/nj-train-icon/nj-train-icon.tsx","src/components/icons/tickets-icon.tsx","src/components/icons/train-icon.scss?tag=train-icon","src/components/icons/train-icon.tsx"],"sourcesContent":["import { Component,h, Prop } from '@stencil/core';\n\n\n@Component({\n tag: 'arrow-right-icon',\n shadow: false\n})\nexport class ArrowRightIcon {\n @Prop() svgStyle: any = {};\n @Prop() width: number = 12;\n @Prop() height: number = 12;\n\n render() {\n return (\n \n \n \n \n \n \n \n \n );\n }\n}\n","import { Component,h, Prop } from '@stencil/core';\n\n@Component({\n tag: 'delete-icon',\n shadow: false\n})\nexport class DeleteIcon {\n @Prop() svgStyle: any = {};\n @Prop() width: number = 14;\n @Prop() height: number = 14;\n\n render() {\n return (\n \n \n \n \n \n );\n }\n}\n","import { NjRouteProperties } from \"./NjRouteProperties\";\n\nexport class NjRoute {\n component: string;\n path: string;\n title?: string;\n params?: any;\n getParameter?:any;\n\n public constructor(routeProperties:NjRouteProperties){\n this.component = routeProperties.component\n this.path = routeProperties.path\n this.title = routeProperties.title\n this.params = routeProperties.params\n\n this.getParameter = function(name:string, defaultValue: any):any {\n if (this.params) {\n return this.params[name + \"\"] ? this.params[name + \"\"] : defaultValue\n\n }\n return defaultValue\n }\n}\n}","\nimport { Component, h, Prop, State,Element } from '@stencil/core';\nimport { NjRoute } from './NjRoute';\nimport { NjRouteProperties } from './NjRouteProperties';\n\n@Component({\n tag: 'nj-router'\n})\nexport class NjRouter {\n @State() route: NjRoute\n @Prop() routes: NjRouteProperties[]\n\n @Element() el: HTMLElement;\n\n matchRoute(path: string): any {\n const pathParts = path.split(\"?\");\n const matchingRoute = this.routes.find(route => route.path === pathParts[0]);\n if (matchingRoute) {\n let route: NjRoute = new NjRoute(matchingRoute);\n route.params = this.convertParams(pathParts[1], route.params);\n this.route = {...route};\n } else {\n window.location.hash = this.routes[0].path + (pathParts[1] ? '?' + pathParts[1] : '');\n }\n }\n convertParams(queryString: string,params:any): any {\n if(!params){\n params = {}\n }\n\n if (queryString) {\n let keyValueParts = queryString.split(\"&\")\n for (let i = 0; i < keyValueParts.length; i++) {\n let keyValue = keyValueParts[i].split(\"=\")\n\n params[keyValue[0]] = decodeURI(keyValue[1])\n\n }\n }\n return params\n }\n componentWillLoad() {\n if (!window.location.hash) {\n window.location.hash = \"/home\"\n }\n\n let self = this\n window.addEventListener('popstate', function () {\n self.matchRoute(this.location.hash.substring(1))\n });\n\n self.matchRoute(window.location.hash.substring(1))\n }\n\n render() {\n if (this.route) {\n if (this.route.title) document.title = this.route.title;\n window.scrollTo(0, 0);\n\n return h(this.route.component, { route: this.route });\n }\n }\n\n}\n","\n","import { Component, Element, h } from '@stencil/core';\nimport {loadInitData} from '../../utils/start';\nimport { NjRouteProperties } from '../nj-router/NjRouteProperties';\nimport '@oebb-web-team/oebb-web-components';\n\n@Component({\n tag: 'nj-search-root',\n styleUrl: 'nj-search-root.css',\n shadow: true,\n})\nexport class NjSearchRoot {\n\n lang: string;\n\n @Element() el: HTMLElement;\n\n routes: NjRouteProperties[] = [\n { path: \"/\", component: \"nj-home\", params: { showFormOnly: true } },\n { path: \"/home\", component: \"nj-home\" , params: { showFormOnly: true }},\n ];\n\n async componentWillLoad(){\n let langItems: NodeList = document.querySelectorAll(\"ul.lang-nav > li > a\")\n\n langItems.forEach((item:Node) => {\n let linkItem:HTMLLinkElement = item as HTMLLinkElement\n\n linkItem.href = linkItem.href + location.hash;\n\n });\n\n await loadInitData(this.el);\n }\n\n render() {\n return (\n
\n
\n \n
\n
\n );\n }\n\n}\n","@import '../../global/accessibility.css';\n@import 'src/global/train-colors';\n\n.shopping-cart__content {\n color: #666;\n font-size: 16px;\n text-align: left;\n line-height: 1.2em;\n background: #fff;\n padding: 1px 15px;\n box-shadow: 0 10px 20px rgb(45 50 55 / 20%);\n\n}\n\n.shopping-cart__detail {\n position: relative;\n border-top: 1px solid black;\n padding: 20px 0;\n\n &:first-of-type {\n border: none;\n padding-top: 0;\n }\n}\n\n.shopping-cart__detail-header {\n display: flex;\n justify-content: space-between;\n}\n\n.shopping-cart__detail-title {\n margin: 0 0 15px;\n display: flex;\n align-items: center;\n\n .icon {\n margin-right: 10px;\n }\n}\n\n.shopping-cart__detail-remove {\n @include nj-button-secondary;\n\n position: absolute;\n right: 0;\n top: 20px;\n\n border: none;\n\n .shopping-cart__detail:first-of-type & {\n top: 0;\n }\n}\n\n.shopping-cart__detail-list {\n list-style: none;\n padding: 0;\n margin: 0;\n\n li {\n margin-bottom: 10px;\n }\n}\n\n.shopping-cart__detail-highlight {\n display: block;\n font-weight: 700;\n}\n\n.shopping-cart__detail-highlight--indented {\n margin-left: 18px;\n}\n\n.shopping-cart__detail-connection {\n align-items: baseline;\n}\n\n.shopping-cart__detail-train {\n display: flex;\n justify-content: space-around;\n width: 100%;\n margin: 0 1rem;\n}\n\n.shopping-cart__insurance {\n\t.shopping-cart__detail-title {\n\t\tmargin-bottom: 6px;\n\t}\n\n\t.shopping-cart__product {\n\t\tmargin-top: 6px;\n\t}\n}\n\n.calendar {\n display: block;\n width: 40px;\n text-align: center;\n flex-shrink: 0;\n margin: 0 15px 10px 0;\n\n > * {\n display: block;\n }\n\n &__year {\n background: $tint-oebb;\n color: white;\n font-weight: bold;\n font-size: 0.8em;\n\n }\n\n &__body {\n border: 1px solid $color-grey-200;\n }\n\n &__day {\n font-weight: 700;\n display: block;\n text-align: center;\n font-size: 18px;\n padding-top: 2px;\n }\n\n &__month {\n font-size: .8em;\n text-align: center;\n }\n}\n\n.flex {\n display: flex;\n}\n\n.shopping-cart__product {\n display: grid;\n margin-top: 20px;\n\n .shopping-cart__product_ticket {\n grid-row: 2;\n grid-column: 1 / 3;\n font-size: smaller;\n }\n\n .shopping-cart__product_price {\n grid-row: 1;\n grid-column: 2;\n\n padding-left: 0.75em;\n white-space: nowrap;\n font-weight: bold;\n text-align: right;\n }\n}\n\n.shopping-cart__price {\n display: flex;\n justify-content: space-between;\n background: $tint-nightjet;\n color: #fff;\n padding: 10px 15px;\n font-weight: 700;\n position: sticky;\n bottom: 0;\n\n}\n","import { Component, h, Element, State, Listen } from \"@stencil/core\";\n\nimport {getShortMonth} from \"../../utils/date\";\nimport { i18n } from '../../utils/I18n';\nimport {getOfferName, getTrainCategoryForName, translateCompartmentName} from \"../../utils/offers\";\nimport {DATA_STORE_KEY_PASSENGERS, DATA_STORE_KEY_PREBOOK, dataStore} from '../../global/DataStore'\nimport {FinalProductData, journeyData, JourneyStoreEvent, NjOfferData} from \"../../global/JourneyStore\";\nimport { formatPrice } from \"../../helpers/utils\";\nimport {SelectedUser} from \"../nj-passangers/nj-passangers\";\nimport { PassangerType } from \"../nj-passangers/PassangerType\";\nimport { removeJourney } from '../nj-reservation/nj-reservation-utils';\nimport { ReservationMode } from \"../nj-reservation/ReservationMode\";\n\n@Component({\n tag: \"nj-shopping-cart\",\n styleUrl: \"nj-shopping-cart.scss\",\n shadow: true\n})\nexport class NjShoppingCart {\n\n shoppingCartPrice: number = 0.00\n prebookData: any = null\n\tprivate insurancePremium = 0;\n\n @Element() el: HTMLElement;\n\n @State() outwardOffer: NjOfferData | null = null\n @State() returnOffer: NjOfferData | null = null\n @State() passangers: SelectedUser[] = null\n\n @State() selectedOutwardProduct: FinalProductData | null = null;\n @State() selectedReturnProduct: FinalProductData | null = null;\n\n componentWillLoad() {\n this.init();\n }\n\n @Listen('productSelected',{ target: 'window' })\n productSelectedHandler(event: JourneyStoreEvent) {\n // TODO Do we really need this? Product selection triggers prebook preparation, for which we listen below anyway\n if (!event.detail) {\n this.selectedOutwardProduct = null;\n this.selectedReturnProduct = null;\n return;\n }\n\n const product = journeyData(event.detail.reservationMode).getFinalProduct();\n if (event.detail.reservationMode == ReservationMode.Outward) {\n this.selectedOutwardProduct = product;\n } else if (event.detail.reservationMode == ReservationMode.Return) {\n this.selectedReturnProduct = product;\n }\n }\n\n @Listen('prebookRequestPrepared', { target: 'window' })\n onPrebookRequestPrepared() {\n this.init()\n }\n\n init() {\n const outwardData = journeyData(ReservationMode.Outward);\n const returnData = journeyData(ReservationMode.Return);\n\n this.outwardOffer = outwardData.getFinalOffer();\n this.returnOffer = returnData.getFinalOffer();\n this.passangers = dataStore().getSessionData(DATA_STORE_KEY_PASSENGERS, null)\n\n this.prebookData = dataStore().getSessionData(DATA_STORE_KEY_PREBOOK, this.prebookData)\n this.shoppingCartPrice = (this.prebookData ? this.prebookData.paymentInformation.amount : this.shoppingCartPrice)\n\t\tthis.insurancePremium = (this.prebookData?.insuranceSelected && this.prebookData.insurancePremium) ?? 0;\n\n this.selectedOutwardProduct = outwardData.getFinalProduct();\n this.selectedReturnProduct = returnData.getFinalProduct();\n }\n\n handleRemoveJourney(reservationMode: ReservationMode) {\n switch (reservationMode) {\n case ReservationMode.Outward:\n this.outwardOffer = null;\n break;\n case ReservationMode.Return:\n this.returnOffer = null;\n break;\n }\n\n removeJourney(reservationMode);\n }\n\n renderConnectionData(connectionData: NjOfferData | null, reservationMode: ReservationMode) {\n if (connectionData) {\n let connection = connectionData.connection\n let depDate = connection.departure;\n const trainType = getTrainCategoryForName(connection.train);\n\n return(\n
\n

{i18n.getMessage(`cart.header.${reservationMode.toLowerCase()}`)}

\n {this.outwardOffer && this.returnOffer ?\n \n : null}\n
\n
\n {depDate.format('YYYY')}\n
\n {depDate.format('D')}\n {getShortMonth(depDate)}\n
\n
\n \n {connection.from.name} {connection.to.name}\n \n
\n
\n {connection.from.dep_time}\n \n \n \n {connection.to.arr_time}\n
\n
\n )\n }\n }\n\n renderPassangerData() {\n return (\n
\n
\n\n

{i18n.getMessage('cart.passengers.header')}

\n
\n\n
    \n {this.renderPassangerDataByType(PassangerType.Adult)}\n\t\t\t\t\t{this.renderPassangerDataByType(PassangerType.TenToFourteenYearOldChild)}\n\t\t\t\t\t{this.renderPassangerDataByType(PassangerType.Child)}\n {this.renderPassangerDataByType(PassangerType.SmallChildSeat)}\n {this.renderPassangerDataByType(PassangerType.SmallChild)}\n {this.renderPassangerDataByType(PassangerType.Bike)}\n {/* {this.renderPassangerDataChallenedOptions()} */}\n
\n
\n )\n }\n\n renderPassangerDataByType(passangerType: PassangerType) {\n return this.passangers\n .filter(passanger => passanger.njPassangerType === passangerType)\n .map((passanger, i) => [\n
  • \n \n {i + 1}. {i18n.getMessage(`passengers.${passangerType}`)}\n \n \n {passanger.njCards.map(card =>\n i18n.getMessage(`ts.reductionCard.name.${card.code}`, '', null, card.cardName)\n ).join(\", \")}\n \n
  • ,\n passanger.njChallengedOptions?.wheelchair ? (\n
  • \n \n {i18n.getMessage('passengers.wheelchair')}\n \n
  • \n ) : null,\n passanger.njChallengedOptions?.attendant ? (\n
  • \n \n {i18n.getMessage('passengers.attendant')}\n \n
  • \n ) : null,\n passanger.njChallengedOptions?.dog ? (\n
  • \n \n {i18n.getMessage('passengers.dog')}\n \n
  • \n ) : null,\n ]);\n }\n\n renderSelectedProduct(selectedProduct: FinalProductData) {\n return (\n
    \n
    \n
    \n { translateCompartmentName(selectedProduct.njProduct.compartment) }\n
    \n
    \n {i18n.getMessage(`ticket-type.${selectedProduct.njProduct.productType}`)} {i18n.getMessage('cart.withreservation')}\n
    \n
    \n {formatPrice(selectedProduct.njProduct.price)} EUR\n
    \n
    \n {selectedProduct.additionalProduct ? (\n
    \n
    \n {i18n.getMessage('cart.additional.label')}\n
    \n
    \n {getOfferName(selectedProduct.additionalProduct.offer, selectedProduct.additionalProduct.njIndex)}{' '}\n {i18n.getMessage(`cart.class.${selectedProduct.additionalProduct.priceClass}`)}{' '}\n {i18n.getMessage('cart.withreservation')}\n
    \n
    \n {formatPrice(selectedProduct.additionalProduct.price - selectedProduct.njProduct.price)} EUR\n
    \n
    \n ) : null}\n
    \n )\n }\n\n\tprivate renderInsurance() {\n\t\treturn this.insurancePremium ? (\n\t\t\t
    \n\t\t\t\t

    {i18n.getMessage(`cart.insurance.header`)}

    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t{formatPrice(this.insurancePremium)} EUR\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t) : null;\n\t}\n\n render() {\n if (!this.outwardOffer && !this.returnOffer) {\n return (\n
    \n
    \n

    \n  \n {i18n.getMessage('cart.header')}\n

    \n

    {i18n.getMessage('cart.noselection')}

    \n
    \n
    \n )\n }\n\n return (\n
    \n
    \n

    \n  \n {i18n.getMessage('cart.header')}\n

    \n
    \n {this.outwardOffer ? this.renderConnectionData(this.outwardOffer, ReservationMode.Outward) : null}\n {this.selectedOutwardProduct ? this.renderSelectedProduct(this.selectedOutwardProduct) : null}\n
    \n {this.returnOffer ?\n
    \n {this.renderConnectionData(this.returnOffer, ReservationMode.Return)}\n {this.selectedReturnProduct ? this.renderSelectedProduct(this.selectedReturnProduct) : null}\n
    \n : null}\n\t\t\t\t\t{this.renderInsurance()}\n {(this.passangers) ? this.renderPassangerData() : \"\"}\n
    \n
    \n {i18n.getMessage('cart.total')}\n {formatPrice(this.shoppingCartPrice + this.insurancePremium)} €\n
    \n
    \n )\n }\n\n}\n","\n.shopping-cart-btn {\n margin-left: 0;\n padding: 0;\n background: #E2002A;\n color: #fff;\n display: inline-block;\n font-size: 16px;\n border: none;\n cursor: pointer;\n transform: skew(28deg);\n\n @media #{$screen-min-lg} {\n padding: 0;\n\n .header-is-sticky & {\n padding: 0 7px 0 33px;\n }\n }\n\n &:hover,\n &:focus {\n background: white;\n color: #E2002A;\n\n }\n\n span {\n display: inline-block;\n font-size: 16px;\n line-height: 50px;\n }\n\n .shopping-cart-btn__icon {\n display: none;\n\n @media #{$screen-min-md} {\n display: inline-block;\n margin-right: 8px;\n width: 14px;\n height: 14px;\n transform: translateY(0);\n }\n }\n}\n","import { Component, h, Element, Listen, State } from \"@stencil/core\";\nimport {DATA_STORE_KEY_PREBOOK, dataStore} from '../../global/DataStore'\nimport { NjShoppingCartDialog } from \"../nj-shopping-cart-dialog/nj-shopping-cart-dialog\";\nimport { formatPrice } from \"../../helpers/utils\";\n\n@Component({\n tag: \"nj-shopping-cart-btn\",\n styleUrl: \"nj-shopping-cart-btn.scss\",\n shadow: true\n})\n\nexport class NjShoppingCartBtn {\n\n shoppingDialog: NjShoppingCartDialog\n\n @Element() el: HTMLElement;\n\n @State() prebookData: any = null\n @State() shoppingCartPrice: number = 0.00\n @State() private insurancePremium = 0;\n\n componentWillLoad() {\n this.loadPrices();\n }\n\n @Listen('sessionDataChanged', {target: 'window'})\n onSessionDataChanged(event: CustomEvent) {\n if (event.detail.sessionName == 'prebook') {\n this.loadPrices();\n }\n }\n\n @Listen('sessionDataRemoved', {target: 'window'})\n onSessionDataRemoved(event: CustomEvent) {\n if (event.detail.sessionName == 'prebook') {\n this.shoppingCartPrice = 0.0\n this.insurancePremium = 0;\n }\n }\n\n\n @Listen('prebookRequestPrepared',{ target: 'window' })\n onPrebookRequestPrepared() {\n this.loadPrices();\n }\n\n private loadPrices() {\n this.prebookData = dataStore().getSessionData(DATA_STORE_KEY_PREBOOK, this.prebookData)\n this.shoppingCartPrice = (this.prebookData ? this.prebookData.paymentInformation.amount : 0)\n this.insurancePremium = (this.prebookData?.insuranceSelected && this.prebookData.insurancePremium) ?? 0;\n }\n\n handleToggleClick(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n\n this.shoppingDialog = document.querySelector('nj-shopping-cart-dialog') as any;\n this.shoppingDialog.toggle();\n }\n\n render() {\n return(\n
    this.handleToggleClick(ev)}>\n \n
    \n )\n }\n}\n","\n.shopping-cart-btn__content {\n display: block;\n position: absolute;\n top: 90px;\n right: 10px;\n width: 300px;\n background: #fff;\n z-index: 99;\n max-height: calc(100vh - 115px);\n overflow-y: auto;\n\n transform: translateY(-500%);\n transition: transform .75s ease;\n box-shadow: 0 10px 20px rgb(45 50 55 / 20%);\n\n &--open {\n transform: translateY(0%);\n }\n}","import { Component, h, Element, Method, Listen, State } from \"@stencil/core\";\n\n@Component({\n tag: \"nj-shopping-cart-dialog\",\n styleUrl: \"nj-shopping-cart-dialog.scss\",\n shadow: true\n})\n\nexport class NjShoppingCartDialog {\n shoppingCartPrice: number = 0.00\n\n @Element() el: HTMLElement;\n\n @State() isVisible: boolean = false;\n @State() prebookData: any = null\n\n @Listen('click', { target: 'window' })\n\tonBodyClick() {\n\t\tthis.hide();\n\t}\n\n @Listen('shoppingCartBtnClicked', { target: 'window' })\n\tonshoppingCartBtnClick() {\n\t\tthis.hide();\n\t}\n\n\n @Method()\n async toggle() {\n if (this.isVisible) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n @Method()\n\tasync show() {\n\t\tthis.isVisible = true;\n this.isVisible = this.isVisible\n\t}\n\n\t@Method()\n\tasync hide() {\n\t\tthis.isVisible = false;\n\t}\n\n handleToggleClick(ev) {\n ev.preventDefault();\n ev.stopPropagation();\n }\n\n render() {\n return(\n
    \n \n
    \n )\n }\n}\n","@import 'src/global/train-colors';\n\n.train-icon {\n display: flex;\n flex-direction: row;\n align-items: stretch;\n margin: 0;\n height: 21px;\n overflow: hidden;\n\n &-name {\n display: inline-block;\n padding: 2px 0 2px 4px;\n background-color: var(--train-color);\n color: white;\n font-size: 14px;\n font-weight: bold;\n line-height: 17px;\n white-space: nowrap;\n z-index: 2;\n }\n\n &:after {\n content: \"\";\n width: 12px;\n background-color: var(--train-color);\n transform: skew(-28deg);\n transform-origin: top;\n z-index: 1;\n }\n}\n\n.train-icon-svg {\n @media #{$screen-max-md} {\n display: none;\n }\n}\n\n:host {\n display: inline-flex;\n gap: .2rem;\n}\n\n:host(:not(:first-of-type)) {\n\n .train-icon {\n &-name {\n padding-left: 0;\n }\n\n &:before {\n content: \"\";\n width: 12px;\n background-color: var(--train-color);\n transform: skew(-28deg);\n transform-origin: bottom;\n z-index: 1;\n }\n }\n}\n\n:host(:not(:last-of-type)) {\n margin-right: -5px;\n}\n\n:host(:not(.hide-icon):not(:first-of-type)) {\n margin-left: 0.625rem;\n}\n","import {Component, Host, h, JSX, Prop} from '@stencil/core';\nimport {getTrainCategoryForName} from \"../../utils/offers\";\n\n@Component({\n tag: 'nj-train-icon',\n styleUrl: 'nj-train-icon.scss',\n shadow: true,\n})\nexport class NjTrainIcon {\n\n @Prop({mutable: true}) name: string;\n @Prop({mutable: true}) category: string | undefined;\n @Prop({mutable: true}) hideIcon: boolean = false;\n \n render(): JSX.Element | null {\n if (!this.name) {\n return null;\n }\n\n const trainType = this.category ?? getTrainCategoryForName(this.name);\n return (\n \n {!this.hideIcon && }\n \n {this.name}\n \n \n );\n }\n}\n","import { Component, Prop,h } from '@stencil/core';\n\n@Component({\n tag: 'tickets-icon',\n shadow: false\n})\nexport class TicketsIcon {\n\n @Prop() svgStyle: any = {};\n @Prop() width: number = 16;\n @Prop() height: number = 16;\n\n render() {\n return (\n \n \n \n \n \n \n \n \n );\n }\n\n}\n\n","@import 'src/global/train-colors';\n\nsvg path{\n fill: var(--train-color);\n}\n","import { Component, h, Prop } from '@stencil/core';\n\n@Component({\n tag: 'train-icon',\n styleUrl: 'train-icon.scss',\n shadow: false,\n})\nexport class TrainIcon {\n @Prop() svgStyle: any = {};\n @Prop() width: number = 14;\n @Prop() height: number = 20;\n @Prop() category?: string;\n\n render() {\n return (\n \n \n \n\n );\n }\n}\n"],"mappings":"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"}