xv-webcomponents 1.3.13-qa.0 → 1.3.16-qa.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.
@@ -66,7 +66,7 @@ export class XvLoginModal {
66
66
  renderPasswordLogin() {
67
67
  if (!this.passwordLoginEnabled)
68
68
  return null;
69
- return (h("label", { class: "pull-right spacer" }, h("a", { href: "/de-de/mycrossvertise/account/lostpassword" }, "Passwort vergessen?")));
69
+ return (h("label", { class: "pull-right spacer" }, h("a", { href: `${this.getBaseUrl()}/de-de/mycrossvertise/account/lostpassword` }, "Passwort vergessen?")));
70
70
  }
71
71
  renderOAuthProviders() {
72
72
  return (h("div", { class: "row" }, h("div", { class: "col-xs-12" }, h("div", { class: "col-xs-12" }, h("div", { class: "row spacer spacer-bottom" }, h("div", { class: "col-xs-5" }, h("hr", null)), h("div", { class: "col-xs-2 text-center placeholder" }, "oder"), h("div", { class: "col-xs-5" }, h("hr", null)), h("div", { class: "col-xs-12" }, h("span", null, "Alternative Anmeldung:")))), h("div", { class: "col-sm-12" }, h("div", { class: "col-xs-12 no-padding-right" }, h("form", { method: "POST", action: `${this.getBaseUrl()}/de-de/mycrossvertise/account/externallogin` }, h("div", { class: "row" }, h("div", { class: "col-xs-6 col-sm-3 no-padding-left padding-bottom-10 center-cell" }, h("button", { type: "submit", style: { maxWidth: '125px' }, name: "provider", class: `cell-content btn btn-primary btn btn-block btn-google-primary btn-primary btn-block`, value: "Google", title: `Mit Google anmelden` }, h("i", { class: `fab fa-google pull-left` }), h("span", { style: { marginLeft: '5px;' } }, "Google")))), h("input", { type: "hidden", name: "BookNow", value: this.bookNow.toString() })))), h("div", { class: "col-xs-12" }, h("hr", null)), h("div", { class: "col-sm-12 text-left" }, h("div", { class: "" }, "Neuer Kunde? ", h("a", { href: `${this.getBaseUrl()}/de-de/mycrossvertise/account/register` }, "Jetzt kostenlos registrieren!"))))));
@@ -83,7 +83,7 @@ export class XvLoginModal {
83
83
  return 'https://market.crossvertise.com';
84
84
  }
85
85
  else if (hostname.includes('sitefinity-staging.crossvertise.com')) {
86
- return 'https://staging-market.crossvertise.com';
86
+ return 'https://staging.crossvertise.com';
87
87
  }
88
88
  else {
89
89
  // fallback for local dev or default prod
@@ -1 +1 @@
1
- {"version":3,"file":"xv-login-modal.js","sourceRoot":"","sources":["../../../src/components/xv-login-modal/xv-login-modal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Event, EventEmitter, h, Prop, State } from '@stencil/core';\n\ntype OAuthProvider = {\n displayName: string;\n providerName: string;\n icon: string;\n buttonClass: string;\n};\n\n@Component({\n tag: 'xv-login-modal',\n styleUrl: 'xv-login-modal.scss',\n shadow: true,\n})\nexport class XvLoginModal {\n @Prop() visible: boolean = false;\n @Event() close: EventEmitter<void>;\n @State() oauthProviders: OAuthProvider[] = [];\n @State() bookNow: boolean = false;\n @State() returnUrl: string = '/';\n @State() passwordLoginEnabled: boolean = true;\n @State() oauthLoginEnabled: boolean = true;\n @State() passwordRegistrationEnabled: boolean = true;\n @State() configurationName: string = 'Xv';\n @State() xvMvcConfigName: string = 'Xv';\n @State() contactUrl: string = 'https://sitefinity-qa.crossvertise.com/ueber-uns/kontakt';\n metaNav: any;\n\n componentWillLoad() {\n this.setReturnUrl();\n this.readMetaNavCookie();\n }\n\n private setReturnUrl() {\n const params = new URLSearchParams(window.location.search);\n let url = params.get('returnUrl') || window.location.href;\n if (url.toLowerCase().includes('resetpassword')) {\n url = '/';\n }\n this.returnUrl = url;\n }\n\n private readMetaNavCookie() {\n if (!this.metaNav) this.metaNav = JSON.parse(localStorage.getItem('metaNav') || '{}');\n\n if (!this.metaNav) return;\n\n try {\n const metaNavObj = this.metaNav;\n this.passwordLoginEnabled = !!metaNavObj.PasswordLoginEnabled;\n this.oauthLoginEnabled = !!metaNavObj.oauthLoginEnabled;\n this.passwordRegistrationEnabled = !!metaNavObj.PasswordRegistrationEnabled;\n this.configurationName = metaNavObj.ConfigurationName;\n this.xvMvcConfigName = metaNavObj.XvMvcConfigName;\n this.contactUrl = metaNavObj.ContactUrl ?? `${this.getBaseUrl()}/ueber-uns/kontakt`;\n } catch (e) {\n console.warn('Could not parse metaNav cookie:', e);\n }\n }\n\n private readonly handleClose = () => {\n this.close.emit();\n };\n\n private renderPasswordLogin() {\n if (!this.passwordLoginEnabled) return null;\n return (\n <label class=\"pull-right spacer\">\n <a href=\"/de-de/mycrossvertise/account/lostpassword\">\n Passwort vergessen?\n </a>\n </label>\n );\n }\n\n private renderOAuthProviders() {\n \n return (\n <div class=\"row\">\n <div class=\"col-xs-12\">\n <div class=\"col-xs-12\">\n <div class=\"row spacer spacer-bottom\">\n <div class=\"col-xs-5\"><hr /></div>\n <div class=\"col-xs-2 text-center placeholder\">oder</div>\n <div class=\"col-xs-5\"><hr /></div>\n <div class=\"col-xs-12\">\n <span>Alternative Anmeldung:</span>\n </div>\n </div>\n </div>\n <div class=\"col-sm-12\">\n <div class=\"col-xs-12 no-padding-right\">\n <form\n method=\"POST\"\n action={`${this.getBaseUrl()}/de-de/mycrossvertise/account/externallogin`}\n >\n <div class=\"row\">\n \n <div class=\"col-xs-6 col-sm-3 no-padding-left padding-bottom-10 center-cell\">\n <button\n type=\"submit\"\n style={{ maxWidth: '125px' }}\n name=\"provider\"\n class={`cell-content btn btn-primary btn btn-block btn-google-primary btn-primary btn-block`}\n value={\"Google\"}\n title={`Mit Google anmelden`}\n >\n <i class={`fab fa-google pull-left`}></i>\n <span style={{ marginLeft :'5px;'}}>Google</span>\n </button>\n </div>\n </div>\n <input type=\"hidden\" name=\"BookNow\" value={this.bookNow.toString()} />\n </form>\n </div>\n </div>\n <div class=\"col-xs-12\"><hr /></div>\n <div class=\"col-sm-12 text-left\">\n <div class=\"\">Neuer Kunde? <a href={`${this.getBaseUrl()}/de-de/mycrossvertise/account/register`}>Jetzt kostenlos registrieren!</a></div>\n </div>\n </div>\n </div>\n );\n }\n\n private renderFooter() {\n return (\n <div class=\"modal-footer\">\n <div class=\"col-sm-12 text-left\">\n <div>\n <div class=\"spacer\">Sie sind bereits registriert, können sich aber nicht einloggen?</div>\n <div>\n <a href={this.contactUrl}>Kontaktieren Sie uns</a>, wir kümmern uns darum.\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n private readonly handleSubmit = async (e: Event) => {\n e.preventDefault();\n const form = e.target as HTMLFormElement;\n const formData = new FormData(form);\n \n try {\n const response = await fetch(form.action, {\n method: 'POST',\n body: formData\n });\n \n if (response.ok) {\n window.location.reload();\n }\n } catch (error) {\n console.error('Login failed:', error);\n }\n };\n\n private getBaseUrl(): string {\n const hostname = window.location.hostname;\n \n if (hostname.includes('sitefinity-qa.crossvertise.com')) {\n return 'https://qa.crossvertise.com';\n } else if (hostname.includes('www.crossvertise.com')) {\n return 'https://market.crossvertise.com';\n } else if (hostname.includes('sitefinity-staging.crossvertise.com')) {\n return 'https://staging-market.crossvertise.com';\n } else {\n // fallback for local dev or default prod\n return '';\n }\n }\n\n render() {\n if (!this.visible) return null;\n return (\n <div class=\"modal show\" style={{ display: 'block' }} id=\"login-modal\" tabIndex={-1} role=\"dialog\">\n <div class=\"modal-dialog\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <div class=\"row\">\n <div class=\"col-sm-10\">\n <div class=\"col-xs-12\">\n <h4 class=\"modal-title\">Logindaten</h4>\n </div>\n </div>\n <div class=\"col-xs-1 pull-right\">\n <button onClick={this.handleClose} type=\"button\" class=\"close\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n </div>\n </div>\n <div class=\"modal-body\">\n <div class=\"row\">\n <div class=\"col-sm-12\">\n <form\n autoComplete=\"off\"\n id=\"logon-modal-form\"\n action={`${this.getBaseUrl()}/de-de/mycrossvertise/account/logon?returnUrl=${encodeURIComponent(this.returnUrl)}`}\n method=\"post\"\n class=\"spacer\"\n onSubmit={this.handleSubmit}\n >\n <input type=\"hidden\" name=\"returnUrl\" value={this.returnUrl} />\n <div class=\"form-group spacer-bottom\">\n <div class=\"control-label col-xs-12\">\n <label htmlFor=\"LoginPopup.UserName\">E-Mail</label>\n <strong class=\"text-danger\">*</strong>\n </div>\n <div class=\"col-xs-12\">\n <input class=\"form-control\" id=\"userName\" name=\"UserName\" type=\"text\" tabIndex={1} />\n </div>\n </div>\n <div class=\"form-group spacer\">\n <div class=\"control-label col-xs-6\">\n <label class=\"spacer\" htmlFor=\"LoginPopup.Password\">Passwort</label>\n <strong class=\"text-danger spacer\">*</strong>\n </div>\n <div class=\"col-xs-6\">\n {this.renderPasswordLogin()}\n </div>\n <div class=\"col-xs-12\">\n <input class=\"form-control\" id=\"password\" name=\"Password\" type=\"password\" tabIndex={2} />\n </div>\n </div>\n <div class=\"form-group spacer\">\n <div class=\"col-xs-12\">\n <button class=\"btn btn-primary btn-lg btn-block spacer\" type=\"submit\" tabIndex={3}>\n Anmelden\n </button>\n </div>\n </div>\n <div class=\"form-group\">\n <div class=\"checkbox col-xs-12\">\n <label htmlFor=\"RememberMe\">\n <input id=\"RememberMe\" name=\"RememberMe\" type=\"checkbox\" value=\"true\" />\n Angemeldet bleiben?\n </label>\n </div>\n </div>\n </form>\n </div>\n </div>\n {this.renderOAuthProviders()}\n </div>\n {this.renderFooter()}\n </div>\n </div>\n </div>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"xv-login-modal.js","sourceRoot":"","sources":["../../../src/components/xv-login-modal/xv-login-modal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Event, EventEmitter, h, Prop, State } from '@stencil/core';\n\ntype OAuthProvider = {\n displayName: string;\n providerName: string;\n icon: string;\n buttonClass: string;\n};\n\n@Component({\n tag: 'xv-login-modal',\n styleUrl: 'xv-login-modal.scss',\n shadow: true,\n})\nexport class XvLoginModal {\n @Prop() visible: boolean = false;\n @Event() close: EventEmitter<void>;\n @State() oauthProviders: OAuthProvider[] = [];\n @State() bookNow: boolean = false;\n @State() returnUrl: string = '/';\n @State() passwordLoginEnabled: boolean = true;\n @State() oauthLoginEnabled: boolean = true;\n @State() passwordRegistrationEnabled: boolean = true;\n @State() configurationName: string = 'Xv';\n @State() xvMvcConfigName: string = 'Xv';\n @State() contactUrl: string = 'https://sitefinity-qa.crossvertise.com/ueber-uns/kontakt';\n metaNav: any;\n\n componentWillLoad() {\n this.setReturnUrl();\n this.readMetaNavCookie();\n }\n\n private setReturnUrl() {\n const params = new URLSearchParams(window.location.search);\n let url = params.get('returnUrl') || window.location.href;\n if (url.toLowerCase().includes('resetpassword')) {\n url = '/';\n }\n this.returnUrl = url;\n }\n\n private readMetaNavCookie() {\n if (!this.metaNav) this.metaNav = JSON.parse(localStorage.getItem('metaNav') || '{}');\n\n if (!this.metaNav) return;\n\n try {\n const metaNavObj = this.metaNav;\n this.passwordLoginEnabled = !!metaNavObj.PasswordLoginEnabled;\n this.oauthLoginEnabled = !!metaNavObj.oauthLoginEnabled;\n this.passwordRegistrationEnabled = !!metaNavObj.PasswordRegistrationEnabled;\n this.configurationName = metaNavObj.ConfigurationName;\n this.xvMvcConfigName = metaNavObj.XvMvcConfigName;\n this.contactUrl = metaNavObj.ContactUrl ?? `${this.getBaseUrl()}/ueber-uns/kontakt`;\n } catch (e) {\n console.warn('Could not parse metaNav cookie:', e);\n }\n }\n\n private readonly handleClose = () => {\n this.close.emit();\n };\n\n private renderPasswordLogin() {\n if (!this.passwordLoginEnabled) return null;\n return (\n <label class=\"pull-right spacer\">\n <a href={`${this.getBaseUrl()}/de-de/mycrossvertise/account/lostpassword`}>\n Passwort vergessen?\n </a>\n </label>\n );\n }\n\n private renderOAuthProviders() {\n \n return (\n <div class=\"row\">\n <div class=\"col-xs-12\">\n <div class=\"col-xs-12\">\n <div class=\"row spacer spacer-bottom\">\n <div class=\"col-xs-5\"><hr /></div>\n <div class=\"col-xs-2 text-center placeholder\">oder</div>\n <div class=\"col-xs-5\"><hr /></div>\n <div class=\"col-xs-12\">\n <span>Alternative Anmeldung:</span>\n </div>\n </div>\n </div>\n <div class=\"col-sm-12\">\n <div class=\"col-xs-12 no-padding-right\">\n <form\n method=\"POST\"\n action={`${this.getBaseUrl()}/de-de/mycrossvertise/account/externallogin`}\n >\n <div class=\"row\">\n \n <div class=\"col-xs-6 col-sm-3 no-padding-left padding-bottom-10 center-cell\">\n <button\n type=\"submit\"\n style={{ maxWidth: '125px' }}\n name=\"provider\"\n class={`cell-content btn btn-primary btn btn-block btn-google-primary btn-primary btn-block`}\n value={\"Google\"}\n title={`Mit Google anmelden`}\n >\n <i class={`fab fa-google pull-left`}></i>\n <span style={{ marginLeft :'5px;'}}>Google</span>\n </button>\n </div>\n </div>\n <input type=\"hidden\" name=\"BookNow\" value={this.bookNow.toString()} />\n </form>\n </div>\n </div>\n <div class=\"col-xs-12\"><hr /></div>\n <div class=\"col-sm-12 text-left\">\n <div class=\"\">Neuer Kunde? <a href={`${this.getBaseUrl()}/de-de/mycrossvertise/account/register`}>Jetzt kostenlos registrieren!</a></div>\n </div>\n </div>\n </div>\n );\n }\n\n private renderFooter() {\n return (\n <div class=\"modal-footer\">\n <div class=\"col-sm-12 text-left\">\n <div>\n <div class=\"spacer\">Sie sind bereits registriert, können sich aber nicht einloggen?</div>\n <div>\n <a href={this.contactUrl}>Kontaktieren Sie uns</a>, wir kümmern uns darum.\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n private readonly handleSubmit = async (e: Event) => {\n e.preventDefault();\n const form = e.target as HTMLFormElement;\n const formData = new FormData(form);\n \n try {\n const response = await fetch(form.action, {\n method: 'POST',\n body: formData\n });\n \n if (response.ok) {\n window.location.reload();\n }\n } catch (error) {\n console.error('Login failed:', error);\n }\n };\n\n private getBaseUrl(): string {\n const hostname = window.location.hostname;\n \n if (hostname.includes('sitefinity-qa.crossvertise.com')) {\n return 'https://qa.crossvertise.com';\n } else if (hostname.includes('www.crossvertise.com')) {\n return 'https://market.crossvertise.com';\n } else if (hostname.includes('sitefinity-staging.crossvertise.com')) {\n return 'https://staging.crossvertise.com';\n } else {\n // fallback for local dev or default prod\n return '';\n }\n }\n\n render() {\n if (!this.visible) return null;\n return (\n <div class=\"modal show\" style={{ display: 'block' }} id=\"login-modal\" tabIndex={-1} role=\"dialog\">\n <div class=\"modal-dialog\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <div class=\"row\">\n <div class=\"col-sm-10\">\n <div class=\"col-xs-12\">\n <h4 class=\"modal-title\">Logindaten</h4>\n </div>\n </div>\n <div class=\"col-xs-1 pull-right\">\n <button onClick={this.handleClose} type=\"button\" class=\"close\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n </div>\n </div>\n <div class=\"modal-body\">\n <div class=\"row\">\n <div class=\"col-sm-12\">\n <form\n autoComplete=\"off\"\n id=\"logon-modal-form\"\n action={`${this.getBaseUrl()}/de-de/mycrossvertise/account/logon?returnUrl=${encodeURIComponent(this.returnUrl)}`}\n method=\"post\"\n class=\"spacer\"\n onSubmit={this.handleSubmit}\n >\n <input type=\"hidden\" name=\"returnUrl\" value={this.returnUrl} />\n <div class=\"form-group spacer-bottom\">\n <div class=\"control-label col-xs-12\">\n <label htmlFor=\"LoginPopup.UserName\">E-Mail</label>\n <strong class=\"text-danger\">*</strong>\n </div>\n <div class=\"col-xs-12\">\n <input class=\"form-control\" id=\"userName\" name=\"UserName\" type=\"text\" tabIndex={1} />\n </div>\n </div>\n <div class=\"form-group spacer\">\n <div class=\"control-label col-xs-6\">\n <label class=\"spacer\" htmlFor=\"LoginPopup.Password\">Passwort</label>\n <strong class=\"text-danger spacer\">*</strong>\n </div>\n <div class=\"col-xs-6\">\n {this.renderPasswordLogin()}\n </div>\n <div class=\"col-xs-12\">\n <input class=\"form-control\" id=\"password\" name=\"Password\" type=\"password\" tabIndex={2} />\n </div>\n </div>\n <div class=\"form-group spacer\">\n <div class=\"col-xs-12\">\n <button class=\"btn btn-primary btn-lg btn-block spacer\" type=\"submit\" tabIndex={3}>\n Anmelden\n </button>\n </div>\n </div>\n <div class=\"form-group\">\n <div class=\"checkbox col-xs-12\">\n <label htmlFor=\"RememberMe\">\n <input id=\"RememberMe\" name=\"RememberMe\" type=\"checkbox\" value=\"true\" />\n Angemeldet bleiben?\n </label>\n </div>\n </div>\n </form>\n </div>\n </div>\n {this.renderOAuthProviders()}\n </div>\n {this.renderFooter()}\n </div>\n </div>\n </div>\n );\n }\n}\n"]}
@@ -67,7 +67,7 @@ export class XvMegaMenu {
67
67
  const matchedKey = Object.keys(envMap).find(h => hostname.includes(h));
68
68
  const env = matchedKey ? envMap[matchedKey] : 'qa';
69
69
  const subdomain = hostname.split('.')[0];
70
- const shouldUseBlob = subdomain === 'www' ||
70
+ const shouldUseBlob = subdomain === 'www' || subdomain === 'sitefinity-qa' || subdomain === 'sitefinity-staging' ||
71
71
  subdomain === 'market' ||
72
72
  (['qa', 'staging'].includes(env) && ((_a = getMetaNav()) === null || _a === void 0 ? void 0 : _a.WhitelabelName) === 'Xv');
73
73
  let dataUrl = '';
@@ -103,13 +103,13 @@ export class XvMegaMenu {
103
103
  }
104
104
  }
105
105
  render() {
106
- return (h(Host, { key: 'e697163183a45aabb5aa8447d7cd92ece7db2860' }, h("nav", { key: '805382c87f5656b7c5c99561d03c9f783d1139ae', class: { 'xv-menu': true, open: this.open } }, this.loading && (h("div", { key: '4ad62d104c0e174fef713e1f17a7f7f5bfe289ce', class: { 'xv-menu-loader': true, open: this.open } }, h("xv-loader-v2", { key: '3fc10414dac5eada872d1cea5c7e42864c6a09eb' }))), h("ul", { key: '5c854e28fa6d628d0bd39bcabece5646a7beda49', class: { menu: true, open: this.open } }, this.menuItems.map((menuItem) => {
106
+ return (h(Host, { key: '4791b480070f8a742fab7a505e915b1f656d4769' }, h("nav", { key: 'cb379e25f82998cb1095f3a340f245717e0311e6', class: { 'xv-menu': true, open: this.open } }, this.loading && (h("div", { key: '93b079873b7afaf237e185ec7db3f58c075de9c8', class: { 'xv-menu-loader': true, open: this.open } }, h("xv-loader-v2", { key: '2a4e3927b78d46081cde1ec06642a8be72bf2324' }))), h("ul", { key: 'd21e0a55bc2a369e76215566f626854b3918df04', class: { menu: true, open: this.open } }, this.menuItems.map((menuItem) => {
107
107
  var _a;
108
108
  return (h("li", { class: { 'menu-item': true, active: menuItem.id === ((_a = this.activeItem) === null || _a === void 0 ? void 0 : _a.id) } }, h("p", { class: "menu-item-label", onClick: () => this.setActiveItem(menuItem) }, menuItem === null || menuItem === void 0 ? void 0 : menuItem.label), h("ul", { class: "menu-item-groups" }, menuItem.groups.map((group) => {
109
109
  var _a, _b;
110
110
  return (h("li", { class: { group: true, active: ((_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.id) === group.id } }, group.label && (h("div", { class: "group-label", onClick: () => this.setActiveGroup(group) }, h("span", { class: "group-label-text" }, group.label), h("span", { class: "group-label-icon" }))), h("div", { class: "group-container" }, h("div", { class: { 'group-container-absolute': true, noLabel: !group.label && (((_b = menuItem.groups) === null || _b === void 0 ? void 0 : _b.length) || 0) < 2 } }, h("div", { class: "group-menus" }, h("ul", { class: { 'group-menus-categories': true, inline: group.layout === 'inline' } }, group.categories.map((category) => (h("li", { class: "category" }, h("p", { class: "category-label" }, category.label), h("ul", { class: "category-routes" }, category.routes.map((route) => (h("li", { class: "route" }, h("xv-link-v2", { size: "lg", variant: "ghost", href: route.route || '#' }, route.label), route.tag && (h("xv-tag-v2", { class: "route-tag", size: "sm", color: "#161616", bg: "#E0E0E0" }, route.tag)))))))))), h("ul", { class: "group-menus-actions" }, group.actions.map((action) => (h("li", { class: "action" }, action.type === 'link' && (h("xv-link-v2", { variant: "standalone", href: action === null || action === void 0 ? void 0 : action.url }, action.label, h("span", { class: "link-chevron", slot: "icon-right" }, "\u2192"))), action.type === 'button' && h("xv-button-v2", { onClick: () => this.navActionClick(action), block: true, variant: "tertiary" }, action.label)))))), (group === null || group === void 0 ? void 0 : group.card) && (h("div", { class: "group-card" }, h("xv-card-v2", { media: group.card.image, variant: this.isMobile ? 'horizontal' : 'vertical' }, h("h5", { slot: "header", class: "group-card-title" }, group.card.title), h("p", { slot: "body", class: "group-card-desc" }, group.card.description), group.card.linkLabel && (h("xv-link-v2", { slot: "footer", variant: "standalone", href: group.card.linkUrl || '#' }, group.card.linkLabel, h("span", { class: "link-chevron", slot: "icon-right" }, "\u2192"))))))))));
111
111
  }))));
112
- }), h("li", { key: 'dbdc13c141b12f368f800e465964bdc1d8f203b4', class: "menu--right" }, h("slot", { key: 'df79adaa7c9f6ca3fe24a58577e4420532016451', name: "menu-right" })), this.open && (h("li", { key: 'e2ecdcde76161b79a686c3632b8777612d5bd25e', class: "menu--backdrop", onClick: () => this.handleClose() }))))));
112
+ }), h("li", { key: '21d41fe2afe85673de6540a710f4a07fd7e42df6', class: "menu--right" }, h("slot", { key: 'd59ac8d2ffc69ff651e9457282ea5b85bc37495f', name: "menu-right" })), this.open && (h("li", { key: 'c867b105c4313934e2331e8f4c9b390ceb746f6e', class: "menu--backdrop", onClick: () => this.handleClose() }))))));
113
113
  }
114
114
  static get is() { return "xv-mega-menu"; }
115
115
  static get encapsulation() { return "shadow"; }
@@ -1 +1 @@
1
- {"version":3,"file":"xv-mega-menu.js","sourceRoot":"","sources":["../../../src/components/xv-mega-menu/xv-mega-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, h, State, Listen, Element, Prop, Event, EventEmitter } from '@stencil/core';\nimport { MenuAction, MenuGroup, MenuItem } from './xv-mega-menu.model';\nimport { getMetaNav } from '../../utils/utils';\n\n@Component({\n tag: 'xv-mega-menu',\n styleUrl: 'xv-mega-menu.scss',\n shadow: true,\n})\nexport class XvMegaMenu {\n private readonly mobileSize: number = 991;\n @Element() el: HTMLElement;\n @Prop({ reflect: true, mutable: true }) open: boolean = false;\n @Event() openChange: EventEmitter<boolean>;\n @State() loading: boolean = false;\n @State() activeItem?: MenuItem;\n @State() activeGroup?: MenuGroup;\n @State() menuItems: MenuItem[] = [];\n\n @Listen('click', { target: 'document' })\n handleClickOutside(e: MouseEvent) {\n if (this.open && !this.el.contains(e.target as Node)) {\n this.handleClose();\n }\n }\n\n async componentWillLoad() {\n this.menuItems = await this.fetchMenuData();\n }\n\n private handleClose() {\n this.open = false;\n this.activeItem = this.activeGroup = undefined;\n this.openChange.emit(this.open);\n }\n\n private get isMobile() {\n return window.outerWidth <= this.mobileSize;\n }\n\n private setActiveItem(item?: MenuItem): void {\n this.activeItem = this.activeItem?.id === item?.id ? undefined : item;\n if (!this.isMobile || (this.activeItem?.groups?.length || 0) === 1) {\n this.setActiveGroup(this.activeItem?.groups?.[0]);\n }\n // Toggle just for desktop\n if (!this.isMobile) {\n this.open = !!this.activeItem;\n !this.open && this.handleClose();\n }\n }\n\n private setActiveGroup(group?: MenuGroup): void {\n this.activeGroup = this.isMobile && this.activeGroup?.id === group?.id ? undefined : group;\n }\n\n private navActionClick(action: MenuAction) {\n window.location.href = action.url;\n }\n\n private async fetchMenuData(): Promise<MenuItem[]> {\n if (typeof fetch !== 'function') return [];\n\n try {\n const isBrowser = typeof window !== 'undefined';\n if (!isBrowser) return [];\n \n const hostname = window.location.hostname;\n \n // --- Map hostnames to environment names ---\n const envMap = {\n 'qa.crossvertise.com': 'qa',\n 'sitefinity-qa.crossvertise.com': 'qa',\n 'sitefinity-staging.crossvertise.com': 'staging',\n 'www.crossvertise.com': 'release',\n 'komsa-test.crossvertise.com': 'qa',\n 'staging.crossvertise.com': 'staging',\n 'market.crossvertise.com': 'release',\n 'allianz.crossvertise.com': 'release',\n 'philips.crossvertise.com': 'release',\n 'komsa.crossvertise.com': 'release',\n };\n \n const matchedKey = Object.keys(envMap).find(h => hostname.includes(h));\n const env = matchedKey ? envMap[matchedKey] : 'qa';\n \n const subdomain = hostname.split('.')[0];\n \n const shouldUseBlob =\n subdomain === 'www' ||\n subdomain === 'market' ||\n (['qa', 'staging'].includes(env) && getMetaNav()?.WhitelabelName === 'Xv');\n \n let dataUrl = '';\n \n if (shouldUseBlob) {\n // --- Use blob storage ---\n const blobEnv = env === 'qa' || env === 'staging' ? env : 'release';\n dataUrl = `https://xvsitefinitystorage.blob.core.windows.net/nav-sync-${blobEnv}/mega-menu.json`;\n } else {\n // --- Use API Front Door ---\n const isLocalhost = /^(localhost|127\\.0\\.0\\.1)$/i.test(hostname);\n const baseUrl = isLocalhost\n ? 'https://qa.crossvertise.com'\n : window.location.origin;\n dataUrl = `${baseUrl}/api-fd/v1/home/menu`;\n }\n \n // --- Fetch menu data ---\n const response = await fetch(dataUrl, {\n method: 'GET',\n headers: { Accept: 'application/json' },\n credentials: 'include',\n });\n \n if (!response.ok) {\n console.error(`Failed to fetch menu data: ${response.status}`, response);\n return [];\n }\n \n const result = await response.json();\n return result?.data ?? result;\n } catch (error) {\n console.error('fetchMenuData error', error);\n return [];\n }\n }\n \n\n render() {\n return (\n <Host>\n <nav class={{ 'xv-menu': true, open: this.open }}>\n {this.loading && (<div class={{ 'xv-menu-loader': true, open: this.open }}>\n <xv-loader-v2></xv-loader-v2>\n </div>)}\n\n <ul class={{ menu: true, open: this.open }}>\n {this.menuItems.map((menuItem) => (\n <li class={{ 'menu-item': true, active: menuItem.id === this.activeItem?.id }}>\n <p class=\"menu-item-label\" onClick={() => this.setActiveItem(menuItem)}>{menuItem?.label}</p>\n\n <ul class=\"menu-item-groups\">\n {menuItem.groups.map((group) => (\n <li class={{ group: true, active: this.activeGroup?.id === group.id }}>\n {group.label && (\n <div class=\"group-label\" onClick={() => this.setActiveGroup(group)}>\n <span class=\"group-label-text\">{group.label}</span>\n <span class=\"group-label-icon\" />\n </div>\n )}\n\n <div class=\"group-container\">\n <div class={{ 'group-container-absolute': true, noLabel: !group.label && (menuItem.groups?.length || 0) < 2 }}>\n <div class=\"group-menus\">\n <ul class={{ 'group-menus-categories': true, inline: group.layout === 'inline' }}>\n {group.categories.map((category) => (\n <li class=\"category\">\n <p class=\"category-label\">{category.label}</p>\n\n <ul class=\"category-routes\">\n {category.routes.map((route) => (\n <li class=\"route\">\n <xv-link-v2 size=\"lg\" variant=\"ghost\" href={route.route || '#'}>\n {route.label}\n </xv-link-v2>\n {route.tag && (\n <xv-tag-v2 class=\"route-tag\" size=\"sm\" color=\"#161616\" bg=\"#E0E0E0\">{route.tag}</xv-tag-v2>\n )}\n </li>\n ))}\n </ul>\n </li>\n ))}\n </ul>\n\n <ul class=\"group-menus-actions\">\n {group.actions.map((action) => (\n <li class=\"action\">\n {action.type === 'link' && (\n <xv-link-v2 variant=\"standalone\" href={action?.url}>\n {action.label}\n <span class=\"link-chevron\" slot=\"icon-right\">→</span>\n </xv-link-v2>\n )}\n {action.type === 'button' && <xv-button-v2 onClick={() => this.navActionClick(action)} block={true} variant=\"tertiary\">{action.label}</xv-button-v2>}\n </li>\n ))}\n </ul>\n </div>\n\n {group?.card && (\n <div class=\"group-card\">\n <xv-card-v2 media={group.card.image} variant={this.isMobile ? 'horizontal' : 'vertical'}>\n <h5 slot=\"header\" class=\"group-card-title\">{group.card.title}</h5>\n <p slot=\"body\" class=\"group-card-desc\">{group.card.description}</p>\n {group.card.linkLabel && (\n <xv-link-v2 slot=\"footer\" variant=\"standalone\" href={group.card.linkUrl || '#'}>\n {group.card.linkLabel}\n <span class=\"link-chevron\" slot=\"icon-right\">→</span>\n </xv-link-v2>\n )}\n </xv-card-v2>\n </div>\n )}\n </div>\n </div>\n </li>\n ))}\n </ul>\n </li>\n ))}\n <li class=\"menu--right\">\n <slot name=\"menu-right\"></slot>\n </li>\n {this.open && (\n <li class=\"menu--backdrop\" onClick={() => this.handleClose()} />\n )}\n </ul>\n </nav>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"xv-mega-menu.js","sourceRoot":"","sources":["../../../src/components/xv-mega-menu/xv-mega-menu.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, h, State, Listen, Element, Prop, Event, EventEmitter } from '@stencil/core';\nimport { MenuAction, MenuGroup, MenuItem } from './xv-mega-menu.model';\nimport { getMetaNav } from '../../utils/utils';\n\n@Component({\n tag: 'xv-mega-menu',\n styleUrl: 'xv-mega-menu.scss',\n shadow: true,\n})\nexport class XvMegaMenu {\n private readonly mobileSize: number = 991;\n @Element() el: HTMLElement;\n @Prop({ reflect: true, mutable: true }) open: boolean = false;\n @Event() openChange: EventEmitter<boolean>;\n @State() loading: boolean = false;\n @State() activeItem?: MenuItem;\n @State() activeGroup?: MenuGroup;\n @State() menuItems: MenuItem[] = [];\n\n @Listen('click', { target: 'document' })\n handleClickOutside(e: MouseEvent) {\n if (this.open && !this.el.contains(e.target as Node)) {\n this.handleClose();\n }\n }\n\n async componentWillLoad() {\n this.menuItems = await this.fetchMenuData();\n }\n\n private handleClose() {\n this.open = false;\n this.activeItem = this.activeGroup = undefined;\n this.openChange.emit(this.open);\n }\n\n private get isMobile() {\n return window.outerWidth <= this.mobileSize;\n }\n\n private setActiveItem(item?: MenuItem): void {\n this.activeItem = this.activeItem?.id === item?.id ? undefined : item;\n if (!this.isMobile || (this.activeItem?.groups?.length || 0) === 1) {\n this.setActiveGroup(this.activeItem?.groups?.[0]);\n }\n // Toggle just for desktop\n if (!this.isMobile) {\n this.open = !!this.activeItem;\n !this.open && this.handleClose();\n }\n }\n\n private setActiveGroup(group?: MenuGroup): void {\n this.activeGroup = this.isMobile && this.activeGroup?.id === group?.id ? undefined : group;\n }\n\n private navActionClick(action: MenuAction) {\n window.location.href = action.url;\n }\n\n private async fetchMenuData(): Promise<MenuItem[]> {\n if (typeof fetch !== 'function') return [];\n\n try {\n const isBrowser = typeof window !== 'undefined';\n if (!isBrowser) return [];\n \n const hostname = window.location.hostname;\n \n // --- Map hostnames to environment names ---\n const envMap = {\n 'qa.crossvertise.com': 'qa',\n 'sitefinity-qa.crossvertise.com': 'qa',\n 'sitefinity-staging.crossvertise.com': 'staging',\n 'www.crossvertise.com': 'release',\n 'komsa-test.crossvertise.com': 'qa',\n 'staging.crossvertise.com': 'staging',\n 'market.crossvertise.com': 'release',\n 'allianz.crossvertise.com': 'release',\n 'philips.crossvertise.com': 'release',\n 'komsa.crossvertise.com': 'release',\n };\n \n const matchedKey = Object.keys(envMap).find(h => hostname.includes(h));\n const env = matchedKey ? envMap[matchedKey] : 'qa';\n \n const subdomain = hostname.split('.')[0];\n \n const shouldUseBlob =\n subdomain === 'www' || subdomain === 'sitefinity-qa' || subdomain === 'sitefinity-staging' ||\n subdomain === 'market' ||\n (['qa', 'staging'].includes(env) && getMetaNav()?.WhitelabelName === 'Xv');\n \n let dataUrl = '';\n \n if (shouldUseBlob) {\n // --- Use blob storage ---\n const blobEnv = env === 'qa' || env === 'staging' ? env : 'release';\n dataUrl = `https://xvsitefinitystorage.blob.core.windows.net/nav-sync-${blobEnv}/mega-menu.json`;\n } else {\n // --- Use API Front Door ---\n const isLocalhost = /^(localhost|127\\.0\\.0\\.1)$/i.test(hostname);\n const baseUrl = isLocalhost\n ? 'https://qa.crossvertise.com'\n : window.location.origin;\n dataUrl = `${baseUrl}/api-fd/v1/home/menu`;\n }\n \n // --- Fetch menu data ---\n const response = await fetch(dataUrl, {\n method: 'GET',\n headers: { Accept: 'application/json' },\n credentials: 'include',\n });\n \n if (!response.ok) {\n console.error(`Failed to fetch menu data: ${response.status}`, response);\n return [];\n }\n \n const result = await response.json();\n return result?.data ?? result;\n } catch (error) {\n console.error('fetchMenuData error', error);\n return [];\n }\n }\n \n\n render() {\n return (\n <Host>\n <nav class={{ 'xv-menu': true, open: this.open }}>\n {this.loading && (<div class={{ 'xv-menu-loader': true, open: this.open }}>\n <xv-loader-v2></xv-loader-v2>\n </div>)}\n\n <ul class={{ menu: true, open: this.open }}>\n {this.menuItems.map((menuItem) => (\n <li class={{ 'menu-item': true, active: menuItem.id === this.activeItem?.id }}>\n <p class=\"menu-item-label\" onClick={() => this.setActiveItem(menuItem)}>{menuItem?.label}</p>\n\n <ul class=\"menu-item-groups\">\n {menuItem.groups.map((group) => (\n <li class={{ group: true, active: this.activeGroup?.id === group.id }}>\n {group.label && (\n <div class=\"group-label\" onClick={() => this.setActiveGroup(group)}>\n <span class=\"group-label-text\">{group.label}</span>\n <span class=\"group-label-icon\" />\n </div>\n )}\n\n <div class=\"group-container\">\n <div class={{ 'group-container-absolute': true, noLabel: !group.label && (menuItem.groups?.length || 0) < 2 }}>\n <div class=\"group-menus\">\n <ul class={{ 'group-menus-categories': true, inline: group.layout === 'inline' }}>\n {group.categories.map((category) => (\n <li class=\"category\">\n <p class=\"category-label\">{category.label}</p>\n\n <ul class=\"category-routes\">\n {category.routes.map((route) => (\n <li class=\"route\">\n <xv-link-v2 size=\"lg\" variant=\"ghost\" href={route.route || '#'}>\n {route.label}\n </xv-link-v2>\n {route.tag && (\n <xv-tag-v2 class=\"route-tag\" size=\"sm\" color=\"#161616\" bg=\"#E0E0E0\">{route.tag}</xv-tag-v2>\n )}\n </li>\n ))}\n </ul>\n </li>\n ))}\n </ul>\n\n <ul class=\"group-menus-actions\">\n {group.actions.map((action) => (\n <li class=\"action\">\n {action.type === 'link' && (\n <xv-link-v2 variant=\"standalone\" href={action?.url}>\n {action.label}\n <span class=\"link-chevron\" slot=\"icon-right\">→</span>\n </xv-link-v2>\n )}\n {action.type === 'button' && <xv-button-v2 onClick={() => this.navActionClick(action)} block={true} variant=\"tertiary\">{action.label}</xv-button-v2>}\n </li>\n ))}\n </ul>\n </div>\n\n {group?.card && (\n <div class=\"group-card\">\n <xv-card-v2 media={group.card.image} variant={this.isMobile ? 'horizontal' : 'vertical'}>\n <h5 slot=\"header\" class=\"group-card-title\">{group.card.title}</h5>\n <p slot=\"body\" class=\"group-card-desc\">{group.card.description}</p>\n {group.card.linkLabel && (\n <xv-link-v2 slot=\"footer\" variant=\"standalone\" href={group.card.linkUrl || '#'}>\n {group.card.linkLabel}\n <span class=\"link-chevron\" slot=\"icon-right\">→</span>\n </xv-link-v2>\n )}\n </xv-card-v2>\n </div>\n )}\n </div>\n </div>\n </li>\n ))}\n </ul>\n </li>\n ))}\n <li class=\"menu--right\">\n <slot name=\"menu-right\"></slot>\n </li>\n {this.open && (\n <li class=\"menu--backdrop\" onClick={() => this.handleClose()} />\n )}\n </ul>\n </nav>\n </Host>\n );\n }\n}\n"]}
@@ -78445,7 +78445,7 @@ const XvLoginModal = class {
78445
78445
  renderPasswordLogin() {
78446
78446
  if (!this.passwordLoginEnabled)
78447
78447
  return null;
78448
- return (h("label", { class: "pull-right spacer" }, h("a", { href: "/de-de/mycrossvertise/account/lostpassword" }, "Passwort vergessen?")));
78448
+ return (h("label", { class: "pull-right spacer" }, h("a", { href: `${this.getBaseUrl()}/de-de/mycrossvertise/account/lostpassword` }, "Passwort vergessen?")));
78449
78449
  }
78450
78450
  renderOAuthProviders() {
78451
78451
  return (h("div", { class: "row" }, h("div", { class: "col-xs-12" }, h("div", { class: "col-xs-12" }, h("div", { class: "row spacer spacer-bottom" }, h("div", { class: "col-xs-5" }, h("hr", null)), h("div", { class: "col-xs-2 text-center placeholder" }, "oder"), h("div", { class: "col-xs-5" }, h("hr", null)), h("div", { class: "col-xs-12" }, h("span", null, "Alternative Anmeldung:")))), h("div", { class: "col-sm-12" }, h("div", { class: "col-xs-12 no-padding-right" }, h("form", { method: "POST", action: `${this.getBaseUrl()}/de-de/mycrossvertise/account/externallogin` }, h("div", { class: "row" }, h("div", { class: "col-xs-6 col-sm-3 no-padding-left padding-bottom-10 center-cell" }, h("button", { type: "submit", style: { maxWidth: '125px' }, name: "provider", class: `cell-content btn btn-primary btn btn-block btn-google-primary btn-primary btn-block`, value: "Google", title: `Mit Google anmelden` }, h("i", { class: `fab fa-google pull-left` }), h("span", { style: { marginLeft: '5px;' } }, "Google")))), h("input", { type: "hidden", name: "BookNow", value: this.bookNow.toString() })))), h("div", { class: "col-xs-12" }, h("hr", null)), h("div", { class: "col-sm-12 text-left" }, h("div", { class: "" }, "Neuer Kunde? ", h("a", { href: `${this.getBaseUrl()}/de-de/mycrossvertise/account/register` }, "Jetzt kostenlos registrieren!"))))));
@@ -78462,7 +78462,7 @@ const XvLoginModal = class {
78462
78462
  return 'https://market.crossvertise.com';
78463
78463
  }
78464
78464
  else if (hostname.includes('sitefinity-staging.crossvertise.com')) {
78465
- return 'https://staging-market.crossvertise.com';
78465
+ return 'https://staging.crossvertise.com';
78466
78466
  }
78467
78467
  else {
78468
78468
  // fallback for local dev or default prod
@@ -78548,7 +78548,7 @@ const XvMegaMenu = class {
78548
78548
  const matchedKey = Object.keys(envMap).find(h => hostname.includes(h));
78549
78549
  const env = matchedKey ? envMap[matchedKey] : 'qa';
78550
78550
  const subdomain = hostname.split('.')[0];
78551
- const shouldUseBlob = subdomain === 'www' ||
78551
+ const shouldUseBlob = subdomain === 'www' || subdomain === 'sitefinity-qa' || subdomain === 'sitefinity-staging' ||
78552
78552
  subdomain === 'market' ||
78553
78553
  (['qa', 'staging'].includes(env) && ((_a = getMetaNav()) === null || _a === void 0 ? void 0 : _a.WhitelabelName) === 'Xv');
78554
78554
  let dataUrl = '';
@@ -78584,13 +78584,13 @@ const XvMegaMenu = class {
78584
78584
  }
78585
78585
  }
78586
78586
  render() {
78587
- return (h(Host, { key: 'e697163183a45aabb5aa8447d7cd92ece7db2860' }, h("nav", { key: '805382c87f5656b7c5c99561d03c9f783d1139ae', class: { 'xv-menu': true, open: this.open } }, this.loading && (h("div", { key: '4ad62d104c0e174fef713e1f17a7f7f5bfe289ce', class: { 'xv-menu-loader': true, open: this.open } }, h("xv-loader-v2", { key: '3fc10414dac5eada872d1cea5c7e42864c6a09eb' }))), h("ul", { key: '5c854e28fa6d628d0bd39bcabece5646a7beda49', class: { menu: true, open: this.open } }, this.menuItems.map((menuItem) => {
78587
+ return (h(Host, { key: '4791b480070f8a742fab7a505e915b1f656d4769' }, h("nav", { key: 'cb379e25f82998cb1095f3a340f245717e0311e6', class: { 'xv-menu': true, open: this.open } }, this.loading && (h("div", { key: '93b079873b7afaf237e185ec7db3f58c075de9c8', class: { 'xv-menu-loader': true, open: this.open } }, h("xv-loader-v2", { key: '2a4e3927b78d46081cde1ec06642a8be72bf2324' }))), h("ul", { key: 'd21e0a55bc2a369e76215566f626854b3918df04', class: { menu: true, open: this.open } }, this.menuItems.map((menuItem) => {
78588
78588
  var _a;
78589
78589
  return (h("li", { class: { 'menu-item': true, active: menuItem.id === ((_a = this.activeItem) === null || _a === void 0 ? void 0 : _a.id) } }, h("p", { class: "menu-item-label", onClick: () => this.setActiveItem(menuItem) }, menuItem === null || menuItem === void 0 ? void 0 : menuItem.label), h("ul", { class: "menu-item-groups" }, menuItem.groups.map((group) => {
78590
78590
  var _a, _b;
78591
78591
  return (h("li", { class: { group: true, active: ((_a = this.activeGroup) === null || _a === void 0 ? void 0 : _a.id) === group.id } }, group.label && (h("div", { class: "group-label", onClick: () => this.setActiveGroup(group) }, h("span", { class: "group-label-text" }, group.label), h("span", { class: "group-label-icon" }))), h("div", { class: "group-container" }, h("div", { class: { 'group-container-absolute': true, noLabel: !group.label && (((_b = menuItem.groups) === null || _b === void 0 ? void 0 : _b.length) || 0) < 2 } }, h("div", { class: "group-menus" }, h("ul", { class: { 'group-menus-categories': true, inline: group.layout === 'inline' } }, group.categories.map((category) => (h("li", { class: "category" }, h("p", { class: "category-label" }, category.label), h("ul", { class: "category-routes" }, category.routes.map((route) => (h("li", { class: "route" }, h("xv-link-v2", { size: "lg", variant: "ghost", href: route.route || '#' }, route.label), route.tag && (h("xv-tag-v2", { class: "route-tag", size: "sm", color: "#161616", bg: "#E0E0E0" }, route.tag)))))))))), h("ul", { class: "group-menus-actions" }, group.actions.map((action) => (h("li", { class: "action" }, action.type === 'link' && (h("xv-link-v2", { variant: "standalone", href: action === null || action === void 0 ? void 0 : action.url }, action.label, h("span", { class: "link-chevron", slot: "icon-right" }, "\u2192"))), action.type === 'button' && h("xv-button-v2", { onClick: () => this.navActionClick(action), block: true, variant: "tertiary" }, action.label)))))), (group === null || group === void 0 ? void 0 : group.card) && (h("div", { class: "group-card" }, h("xv-card-v2", { media: group.card.image, variant: this.isMobile ? 'horizontal' : 'vertical' }, h("h5", { slot: "header", class: "group-card-title" }, group.card.title), h("p", { slot: "body", class: "group-card-desc" }, group.card.description), group.card.linkLabel && (h("xv-link-v2", { slot: "footer", variant: "standalone", href: group.card.linkUrl || '#' }, group.card.linkLabel, h("span", { class: "link-chevron", slot: "icon-right" }, "\u2192"))))))))));
78592
78592
  }))));
78593
- }), h("li", { key: 'dbdc13c141b12f368f800e465964bdc1d8f203b4', class: "menu--right" }, h("slot", { key: 'df79adaa7c9f6ca3fe24a58577e4420532016451', name: "menu-right" })), this.open && (h("li", { key: 'e2ecdcde76161b79a686c3632b8777612d5bd25e', class: "menu--backdrop", onClick: () => this.handleClose() }))))));
78593
+ }), h("li", { key: '21d41fe2afe85673de6540a710f4a07fd7e42df6', class: "menu--right" }, h("slot", { key: 'd59ac8d2ffc69ff651e9457282ea5b85bc37495f', name: "menu-right" })), this.open && (h("li", { key: 'c867b105c4313934e2331e8f4c9b390ceb746f6e', class: "menu--backdrop", onClick: () => this.handleClose() }))))));
78594
78594
  }
78595
78595
  get el() { return getElement(this); }
78596
78596
  };