{"version":3,"sources":["node_modules/@angular/material/fesm2022/card.mjs","node_modules/@angular/material/fesm2022/tooltip2.mjs","node_modules/@angular/material/fesm2022/tooltip-module.mjs","node_modules/@angular/material/fesm2022/divider.mjs","node_modules/@angular/material/fesm2022/pseudo-checkbox-module.mjs","node_modules/@angular/material/fesm2022/list.mjs","node_modules/@angular/cdk/fesm2022/text-field.mjs","node_modules/@angular/material/fesm2022/form-field-module.mjs","node_modules/@angular/material/fesm2022/input.mjs","src/app/pages/home/sections/hero/hero.component.ts","src/app/pages/home/sections/hero/hero.component.html","src/app/pages/home/sections/about/about.component.ts","src/app/pages/home/sections/about/about.component.html","src/app/core/data/my-services.ts","src/app/pages/home/sections/services/services.component.ts","src/app/pages/home/sections/services/services.component.html","src/app/core/data/projects-data.ts","src/app/pages/home/sections/portfolio/portfolio.component.ts","src/app/pages/home/sections/portfolio/portfolio.component.html","src/app/pages/home/sections/tarifs/tarifs.component.ts","src/app/pages/home/sections/tarifs/tarifs.component.html","src/app/pages/home/sections/contact/contact.component.ts","src/app/pages/home/sections/contact/contact.component.html","src/app/pages/home/sections/faq-section/faq-section.component.ts","src/app/pages/home/sections/faq-section/faq-section.component.html","src/app/pages/home/home.component.ts","src/app/pages/home/home.component.html"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { InjectionToken, inject, Component, ViewEncapsulation, ChangeDetectionStrategy, Input, Directive, NgModule } from '@angular/core';\nimport { MatCommonModule } from './common-module.mjs';\nimport '@angular/cdk/a11y';\nimport '@angular/cdk/bidi';\n\n/** Injection token that can be used to provide the default options the card module. */\nconst _c0 = [\"*\"];\nconst _c1 = [[[\"mat-card-title\"], [\"mat-card-subtitle\"], [\"\", \"mat-card-title\", \"\"], [\"\", \"mat-card-subtitle\", \"\"], [\"\", \"matCardTitle\", \"\"], [\"\", \"matCardSubtitle\", \"\"]], [[\"\", \"mat-card-image\", \"\"], [\"\", \"matCardImage\", \"\"], [\"\", \"mat-card-sm-image\", \"\"], [\"\", \"matCardImageSmall\", \"\"], [\"\", \"mat-card-md-image\", \"\"], [\"\", \"matCardImageMedium\", \"\"], [\"\", \"mat-card-lg-image\", \"\"], [\"\", \"matCardImageLarge\", \"\"], [\"\", \"mat-card-xl-image\", \"\"], [\"\", \"matCardImageXLarge\", \"\"]], \"*\"];\nconst _c2 = [\"mat-card-title, mat-card-subtitle,\\n      [mat-card-title], [mat-card-subtitle],\\n      [matCardTitle], [matCardSubtitle]\", \"[mat-card-image], [matCardImage],\\n                    [mat-card-sm-image], [matCardImageSmall],\\n                    [mat-card-md-image], [matCardImageMedium],\\n                    [mat-card-lg-image], [matCardImageLarge],\\n                    [mat-card-xl-image], [matCardImageXLarge]\", \"*\"];\nconst _c3 = [[[\"\", \"mat-card-avatar\", \"\"], [\"\", \"matCardAvatar\", \"\"]], [[\"mat-card-title\"], [\"mat-card-subtitle\"], [\"\", \"mat-card-title\", \"\"], [\"\", \"mat-card-subtitle\", \"\"], [\"\", \"matCardTitle\", \"\"], [\"\", \"matCardSubtitle\", \"\"]], \"*\"];\nconst _c4 = [\"[mat-card-avatar], [matCardAvatar]\", \"mat-card-title, mat-card-subtitle,\\n      [mat-card-title], [mat-card-subtitle],\\n      [matCardTitle], [matCardSubtitle]\", \"*\"];\nconst MAT_CARD_CONFIG = /*#__PURE__*/new InjectionToken('MAT_CARD_CONFIG');\n/**\n * Material Design card component. Cards contain content and actions about a single subject.\n * See https://material.io/design/components/cards.html\n *\n * MatCard provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCard = /*#__PURE__*/(() => {\n  class MatCard {\n    appearance;\n    constructor() {\n      const config = inject(MAT_CARD_CONFIG, {\n        optional: true\n      });\n      this.appearance = config?.appearance || 'raised';\n    }\n    static ɵfac = function MatCard_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatCard)();\n    };\n    static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n      type: MatCard,\n      selectors: [[\"mat-card\"]],\n      hostAttrs: [1, \"mat-mdc-card\", \"mdc-card\"],\n      hostVars: 8,\n      hostBindings: function MatCard_HostBindings(rf, ctx) {\n        if (rf & 2) {\n          i0.ɵɵclassProp(\"mat-mdc-card-outlined\", ctx.appearance === \"outlined\")(\"mdc-card--outlined\", ctx.appearance === \"outlined\")(\"mat-mdc-card-filled\", ctx.appearance === \"filled\")(\"mdc-card--filled\", ctx.appearance === \"filled\");\n        }\n      },\n      inputs: {\n        appearance: \"appearance\"\n      },\n      exportAs: [\"matCard\"],\n      ngContentSelectors: _c0,\n      decls: 1,\n      vars: 0,\n      template: function MatCard_Template(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵprojectionDef();\n          i0.ɵɵprojection(0);\n        }\n      },\n      styles: [\".mat-mdc-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:0;background-color:var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));border-color:var(--mat-card-elevated-container-color, var(--mat-sys-surface-container-low));border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium));box-shadow:var(--mat-card-elevated-container-elevation, var(--mat-sys-level1))}.mat-mdc-card::after{position:absolute;top:0;left:0;width:100%;height:100%;border:solid 1px rgba(0,0,0,0);content:\\\"\\\";display:block;pointer-events:none;box-sizing:border-box;border-radius:var(--mat-card-elevated-container-shape, var(--mat-sys-corner-medium))}.mat-mdc-card-outlined{background-color:var(--mat-card-outlined-container-color, var(--mat-sys-surface));border-radius:var(--mat-card-outlined-container-shape, var(--mat-sys-corner-medium));border-width:var(--mat-card-outlined-outline-width, 1px);border-color:var(--mat-card-outlined-outline-color, var(--mat-sys-outline-variant));box-shadow:var(--mat-card-outlined-container-elevation, var(--mat-sys-level0))}.mat-mdc-card-outlined::after{border:none}.mat-mdc-card-filled{background-color:var(--mat-card-filled-container-color, var(--mat-sys-surface-container-highest));border-radius:var(--mat-card-filled-container-shape, var(--mat-sys-corner-medium));box-shadow:var(--mat-card-filled-container-elevation, var(--mat-sys-level0))}.mdc-card__media{position:relative;box-sizing:border-box;background-repeat:no-repeat;background-position:center;background-size:cover}.mdc-card__media::before{display:block;content:\\\"\\\"}.mdc-card__media:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.mdc-card__media:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.mat-mdc-card-actions{display:flex;flex-direction:row;align-items:center;box-sizing:border-box;min-height:52px;padding:8px}.mat-mdc-card-title{font-family:var(--mat-card-title-text-font, var(--mat-sys-title-large-font));line-height:var(--mat-card-title-text-line-height, var(--mat-sys-title-large-line-height));font-size:var(--mat-card-title-text-size, var(--mat-sys-title-large-size));letter-spacing:var(--mat-card-title-text-tracking, var(--mat-sys-title-large-tracking));font-weight:var(--mat-card-title-text-weight, var(--mat-sys-title-large-weight))}.mat-mdc-card-subtitle{color:var(--mat-card-subtitle-text-color, var(--mat-sys-on-surface));font-family:var(--mat-card-subtitle-text-font, var(--mat-sys-title-medium-font));line-height:var(--mat-card-subtitle-text-line-height, var(--mat-sys-title-medium-line-height));font-size:var(--mat-card-subtitle-text-size, var(--mat-sys-title-medium-size));letter-spacing:var(--mat-card-subtitle-text-tracking, var(--mat-sys-title-medium-tracking));font-weight:var(--mat-card-subtitle-text-weight, var(--mat-sys-title-medium-weight))}.mat-mdc-card-title,.mat-mdc-card-subtitle{display:block;margin:0}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle{padding:16px 16px 0}.mat-mdc-card-header{display:flex;padding:16px 16px 0}.mat-mdc-card-content{display:block;padding:0 16px}.mat-mdc-card-content:first-child{padding-top:16px}.mat-mdc-card-content:last-child{padding-bottom:16px}.mat-mdc-card-title-group{display:flex;justify-content:space-between;width:100%}.mat-mdc-card-avatar{height:40px;width:40px;border-radius:50%;flex-shrink:0;margin-bottom:16px;object-fit:cover}.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-avatar~.mat-mdc-card-header-text .mat-mdc-card-title{line-height:normal}.mat-mdc-card-sm-image{width:80px;height:80px}.mat-mdc-card-md-image{width:112px;height:112px}.mat-mdc-card-lg-image{width:152px;height:152px}.mat-mdc-card-xl-image{width:240px;height:240px}.mat-mdc-card-subtitle~.mat-mdc-card-title,.mat-mdc-card-title~.mat-mdc-card-subtitle,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-title,.mat-mdc-card-header .mat-mdc-card-header-text .mat-mdc-card-subtitle,.mat-mdc-card-title-group .mat-mdc-card-title,.mat-mdc-card-title-group .mat-mdc-card-subtitle{padding-top:0}.mat-mdc-card-content>:last-child:not(.mat-mdc-card-footer){margin-bottom:0}.mat-mdc-card-actions-align-end{justify-content:flex-end}\\n\"],\n      encapsulation: 2,\n      changeDetection: 0\n    });\n  }\n  return MatCard;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n// TODO(jelbourn): add `MatActionCard`, which is a card that acts like a button (and has a ripple).\n// Supported in MDC with `.mdc-card__primary-action`. Will require additional a11y docs for users.\n/**\n * Title of a card, intended for use within `<mat-card>`. This component is an optional\n * convenience for one variety of card title; any custom title element may be used in its place.\n *\n * MatCardTitle provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardTitle = /*#__PURE__*/(() => {\n  class MatCardTitle {\n    static ɵfac = function MatCardTitle_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatCardTitle)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatCardTitle,\n      selectors: [[\"mat-card-title\"], [\"\", \"mat-card-title\", \"\"], [\"\", \"matCardTitle\", \"\"]],\n      hostAttrs: [1, \"mat-mdc-card-title\"]\n    });\n  }\n  return MatCardTitle;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Container intended to be used within the `<mat-card>` component. Can contain exactly one\n * `<mat-card-title>`, one `<mat-card-subtitle>` and one content image of any size\n * (e.g. `<img matCardLgImage>`).\n */\nlet MatCardTitleGroup = /*#__PURE__*/(() => {\n  class MatCardTitleGroup {\n    static ɵfac = function MatCardTitleGroup_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatCardTitleGroup)();\n    };\n    static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n      type: MatCardTitleGroup,\n      selectors: [[\"mat-card-title-group\"]],\n      hostAttrs: [1, \"mat-mdc-card-title-group\"],\n      ngContentSelectors: _c2,\n      decls: 4,\n      vars: 0,\n      template: function MatCardTitleGroup_Template(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵprojectionDef(_c1);\n          i0.ɵɵdomElementStart(0, \"div\");\n          i0.ɵɵprojection(1);\n          i0.ɵɵdomElementEnd();\n          i0.ɵɵprojection(2, 1);\n          i0.ɵɵprojection(3, 2);\n        }\n      },\n      encapsulation: 2,\n      changeDetection: 0\n    });\n  }\n  return MatCardTitleGroup;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Content of a card, intended for use within `<mat-card>`. This component is an optional\n * convenience for use with other convenience elements, such as `<mat-card-title>`; any custom\n * content block element may be used in its place.\n *\n * MatCardContent provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardContent = /*#__PURE__*/(() => {\n  class MatCardContent {\n    static ɵfac = function MatCardContent_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatCardContent)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatCardContent,\n      selectors: [[\"mat-card-content\"]],\n      hostAttrs: [1, \"mat-mdc-card-content\"]\n    });\n  }\n  return MatCardContent;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Sub-title of a card, intended for use within `<mat-card>` beneath a `<mat-card-title>`. This\n * component is an optional convenience for use with other convenience elements, such as\n * `<mat-card-title>`.\n *\n * MatCardSubtitle provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardSubtitle = /*#__PURE__*/(() => {\n  class MatCardSubtitle {\n    static ɵfac = function MatCardSubtitle_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatCardSubtitle)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatCardSubtitle,\n      selectors: [[\"mat-card-subtitle\"], [\"\", \"mat-card-subtitle\", \"\"], [\"\", \"matCardSubtitle\", \"\"]],\n      hostAttrs: [1, \"mat-mdc-card-subtitle\"]\n    });\n  }\n  return MatCardSubtitle;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Bottom area of a card that contains action buttons, intended for use within `<mat-card>`.\n * This component is an optional convenience for use with other convenience elements, such as\n * `<mat-card-content>`; any custom action block element may be used in its place.\n *\n * MatCardActions provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardActions = /*#__PURE__*/(() => {\n  class MatCardActions {\n    // TODO(jelbourn): deprecate `align` in favor of `actionPosition` or `actionAlignment`\n    // as to not conflict with the native `align` attribute.\n    /** Position of the actions inside the card. */\n    align = 'start';\n    static ɵfac = function MatCardActions_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatCardActions)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatCardActions,\n      selectors: [[\"mat-card-actions\"]],\n      hostAttrs: [1, \"mat-mdc-card-actions\", \"mdc-card__actions\"],\n      hostVars: 2,\n      hostBindings: function MatCardActions_HostBindings(rf, ctx) {\n        if (rf & 2) {\n          i0.ɵɵclassProp(\"mat-mdc-card-actions-align-end\", ctx.align === \"end\");\n        }\n      },\n      inputs: {\n        align: \"align\"\n      },\n      exportAs: [\"matCardActions\"]\n    });\n  }\n  return MatCardActions;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Header region of a card, intended for use within `<mat-card>`. This header captures\n * a card title, subtitle, and avatar.  This component is an optional convenience for use with\n * other convenience elements, such as `<mat-card-footer>`; any custom header block element may be\n * used in its place.\n *\n * MatCardHeader provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardHeader = /*#__PURE__*/(() => {\n  class MatCardHeader {\n    static ɵfac = function MatCardHeader_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatCardHeader)();\n    };\n    static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n      type: MatCardHeader,\n      selectors: [[\"mat-card-header\"]],\n      hostAttrs: [1, \"mat-mdc-card-header\"],\n      ngContentSelectors: _c4,\n      decls: 4,\n      vars: 0,\n      consts: [[1, \"mat-mdc-card-header-text\"]],\n      template: function MatCardHeader_Template(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵprojectionDef(_c3);\n          i0.ɵɵprojection(0);\n          i0.ɵɵdomElementStart(1, \"div\", 0);\n          i0.ɵɵprojection(2, 1);\n          i0.ɵɵdomElementEnd();\n          i0.ɵɵprojection(3, 2);\n        }\n      },\n      encapsulation: 2,\n      changeDetection: 0\n    });\n  }\n  return MatCardHeader;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Footer area a card, intended for use within `<mat-card>`.\n * This component is an optional convenience for use with other convenience elements, such as\n * `<mat-card-content>`; any custom footer block element may be used in its place.\n *\n * MatCardFooter provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardFooter = /*#__PURE__*/(() => {\n  class MatCardFooter {\n    static ɵfac = function MatCardFooter_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatCardFooter)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatCardFooter,\n      selectors: [[\"mat-card-footer\"]],\n      hostAttrs: [1, \"mat-mdc-card-footer\"]\n    });\n  }\n  return MatCardFooter;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n// TODO(jelbourn): deprecate the \"image\" selectors to replace with \"media\".\n// TODO(jelbourn): support `.mdc-card__media-content`.\n/**\n * Primary image content for a card, intended for use within `<mat-card>`. Can be applied to\n * any media element, such as `<img>` or `<picture>`.\n *\n * This component is an optional convenience for use with other convenience elements, such as\n * `<mat-card-content>`; any custom media element may be used in its place.\n *\n * MatCardImage provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardImage = /*#__PURE__*/(() => {\n  class MatCardImage {\n    static ɵfac = function MatCardImage_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatCardImage)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatCardImage,\n      selectors: [[\"\", \"mat-card-image\", \"\"], [\"\", \"matCardImage\", \"\"]],\n      hostAttrs: [1, \"mat-mdc-card-image\", \"mdc-card__media\"]\n    });\n  }\n  return MatCardImage;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Same as `MatCardImage`, but small. */\nlet MatCardSmImage = /*#__PURE__*/(() => {\n  class MatCardSmImage {\n    static ɵfac = function MatCardSmImage_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatCardSmImage)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatCardSmImage,\n      selectors: [[\"\", \"mat-card-sm-image\", \"\"], [\"\", \"matCardImageSmall\", \"\"]],\n      hostAttrs: [1, \"mat-mdc-card-sm-image\", \"mdc-card__media\"]\n    });\n  }\n  return MatCardSmImage;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Same as `MatCardImage`, but medium. */\nlet MatCardMdImage = /*#__PURE__*/(() => {\n  class MatCardMdImage {\n    static ɵfac = function MatCardMdImage_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatCardMdImage)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatCardMdImage,\n      selectors: [[\"\", \"mat-card-md-image\", \"\"], [\"\", \"matCardImageMedium\", \"\"]],\n      hostAttrs: [1, \"mat-mdc-card-md-image\", \"mdc-card__media\"]\n    });\n  }\n  return MatCardMdImage;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Same as `MatCardImage`, but large. */\nlet MatCardLgImage = /*#__PURE__*/(() => {\n  class MatCardLgImage {\n    static ɵfac = function MatCardLgImage_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatCardLgImage)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatCardLgImage,\n      selectors: [[\"\", \"mat-card-lg-image\", \"\"], [\"\", \"matCardImageLarge\", \"\"]],\n      hostAttrs: [1, \"mat-mdc-card-lg-image\", \"mdc-card__media\"]\n    });\n  }\n  return MatCardLgImage;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** Same as `MatCardImage`, but extra-large. */\nlet MatCardXlImage = /*#__PURE__*/(() => {\n  class MatCardXlImage {\n    static ɵfac = function MatCardXlImage_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatCardXlImage)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatCardXlImage,\n      selectors: [[\"\", \"mat-card-xl-image\", \"\"], [\"\", \"matCardImageXLarge\", \"\"]],\n      hostAttrs: [1, \"mat-mdc-card-xl-image\", \"mdc-card__media\"]\n    });\n  }\n  return MatCardXlImage;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Avatar image content for a card, intended for use within `<mat-card>`. Can be applied to\n * any media element, such as `<img>` or `<picture>`.\n *\n * This component is an optional convenience for use with other convenience elements, such as\n * `<mat-card-title>`; any custom media element may be used in its place.\n *\n * MatCardAvatar provides no behaviors, instead serving as a purely visual treatment.\n */\nlet MatCardAvatar = /*#__PURE__*/(() => {\n  class MatCardAvatar {\n    static ɵfac = function MatCardAvatar_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatCardAvatar)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatCardAvatar,\n      selectors: [[\"\", \"mat-card-avatar\", \"\"], [\"\", \"matCardAvatar\", \"\"]],\n      hostAttrs: [1, \"mat-mdc-card-avatar\"]\n    });\n  }\n  return MatCardAvatar;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst CARD_DIRECTIVES = [MatCard, MatCardActions, MatCardAvatar, MatCardContent, MatCardFooter, MatCardHeader, MatCardImage, MatCardLgImage, MatCardMdImage, MatCardSmImage, MatCardSubtitle, MatCardTitle, MatCardTitleGroup, MatCardXlImage];\nlet MatCardModule = /*#__PURE__*/(() => {\n  class MatCardModule {\n    static ɵfac = function MatCardModule_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatCardModule)();\n    };\n    static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n      type: MatCardModule\n    });\n    static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n      imports: [MatCommonModule, MatCommonModule]\n    });\n  }\n  return MatCardModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { MAT_CARD_CONFIG, MatCard, MatCardActions, MatCardAvatar, MatCardContent, MatCardFooter, MatCardHeader, MatCardImage, MatCardLgImage, MatCardMdImage, MatCardModule, MatCardSmImage, MatCardSubtitle, MatCardTitle, MatCardTitleGroup, MatCardXlImage };\n","import { takeUntil } from 'rxjs/operators';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, inject, Injector, ElementRef, NgZone, ViewContainerRef, afterNextRender, DOCUMENT, Directive, Input, ChangeDetectorRef, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { normalizePassiveListenerOptions, Platform } from '@angular/cdk/platform';\nimport { AriaDescriber, FocusMonitor } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { createRepositionScrollStrategy, ScrollDispatcher, createFlexibleConnectedPositionStrategy, createOverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Subject } from 'rxjs';\nimport { _animationsDisabled } from './animation.mjs';\n\n/** Time in ms to throttle repositioning after scroll events. */\nconst _c0 = [\"tooltip\"];\nconst SCROLL_THROTTLE_MS = 20;\n/**\n * Creates an error to be thrown if the user supplied an invalid tooltip position.\n * @docs-private\n */\nfunction getMatTooltipInvalidPositionError(position) {\n  return Error(`Tooltip position \"${position}\" is invalid.`);\n}\n/** Injection token that determines the scroll handling while a tooltip is visible. */\nconst MAT_TOOLTIP_SCROLL_STRATEGY = /*#__PURE__*/new InjectionToken('mat-tooltip-scroll-strategy', {\n  providedIn: 'root',\n  factory: () => {\n    const injector = inject(Injector);\n    return () => createRepositionScrollStrategy(injector, {\n      scrollThrottle: SCROLL_THROTTLE_MS\n    });\n  }\n});\n/**\n * @docs-private\n * @deprecated No longer used, will be removed.\n * @breaking-change 21.0.0\n */\nfunction MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY(_overlay) {\n  const injector = inject(Injector);\n  return () => createRepositionScrollStrategy(injector, {\n    scrollThrottle: SCROLL_THROTTLE_MS\n  });\n}\n/**\n * @docs-private\n * @deprecated No longer used, will be removed.\n * @breaking-change 21.0.0\n */\nconst MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER = {\n  provide: MAT_TOOLTIP_SCROLL_STRATEGY,\n  deps: [],\n  useFactory: MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY\n};\n/**\n * @docs-private\n * @deprecated No longer used, will be removed.\n * @breaking-change 21.0.0\n */\nfunction MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY() {\n  return {\n    showDelay: 0,\n    hideDelay: 0,\n    touchendHideDelay: 1500\n  };\n}\n/** Injection token to be used to override the default options for `matTooltip`. */\nconst MAT_TOOLTIP_DEFAULT_OPTIONS = /*#__PURE__*/new InjectionToken('mat-tooltip-default-options', {\n  providedIn: 'root',\n  factory: MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY\n});\n/**\n * CSS class that will be attached to the overlay panel.\n * @deprecated\n * @breaking-change 13.0.0 remove this variable\n */\nconst TOOLTIP_PANEL_CLASS = 'mat-mdc-tooltip-panel';\nconst PANEL_CLASS = 'tooltip-panel';\n/** Options used to bind passive event listeners. */\nconst passiveListenerOptions = /*#__PURE__*/normalizePassiveListenerOptions({\n  passive: true\n});\n// These constants were taken from MDC's `numbers` object. We can't import them from MDC,\n// because they have some top-level references to `window` which break during SSR.\nconst MIN_VIEWPORT_TOOLTIP_THRESHOLD = 8;\nconst UNBOUNDED_ANCHOR_GAP = 8;\nconst MIN_HEIGHT = 24;\nconst MAX_WIDTH = 200;\n/**\n * Directive that attaches a material design tooltip to the host element. Animates the showing and\n * hiding of a tooltip provided position (defaults to below the element).\n *\n * https://material.io/design/components/tooltips.html\n */\nlet MatTooltip = /*#__PURE__*/(() => {\n  class MatTooltip {\n    _elementRef = inject(ElementRef);\n    _ngZone = inject(NgZone);\n    _platform = inject(Platform);\n    _ariaDescriber = inject(AriaDescriber);\n    _focusMonitor = inject(FocusMonitor);\n    _dir = inject(Directionality);\n    _injector = inject(Injector);\n    _viewContainerRef = inject(ViewContainerRef);\n    _animationsDisabled = _animationsDisabled();\n    _defaultOptions = inject(MAT_TOOLTIP_DEFAULT_OPTIONS, {\n      optional: true\n    });\n    _overlayRef;\n    _tooltipInstance;\n    _overlayPanelClass; // Used for styling internally.\n    _portal;\n    _position = 'below';\n    _positionAtOrigin = false;\n    _disabled = false;\n    _tooltipClass;\n    _viewInitialized = false;\n    _pointerExitEventsInitialized = false;\n    _tooltipComponent = TooltipComponent;\n    _viewportMargin = 8;\n    _currentPosition;\n    _cssClassPrefix = 'mat-mdc';\n    _ariaDescriptionPending;\n    _dirSubscribed = false;\n    /** Allows the user to define the position of the tooltip relative to the parent element */\n    get position() {\n      return this._position;\n    }\n    set position(value) {\n      if (value !== this._position) {\n        this._position = value;\n        if (this._overlayRef) {\n          this._updatePosition(this._overlayRef);\n          this._tooltipInstance?.show(0);\n          this._overlayRef.updatePosition();\n        }\n      }\n    }\n    /**\n     * Whether tooltip should be relative to the click or touch origin\n     * instead of outside the element bounding box.\n     */\n    get positionAtOrigin() {\n      return this._positionAtOrigin;\n    }\n    set positionAtOrigin(value) {\n      this._positionAtOrigin = coerceBooleanProperty(value);\n      this._detach();\n      this._overlayRef = null;\n    }\n    /** Disables the display of the tooltip. */\n    get disabled() {\n      return this._disabled;\n    }\n    set disabled(value) {\n      const isDisabled = coerceBooleanProperty(value);\n      if (this._disabled !== isDisabled) {\n        this._disabled = isDisabled;\n        // If tooltip is disabled, hide immediately.\n        if (isDisabled) {\n          this.hide(0);\n        } else {\n          this._setupPointerEnterEventsIfNeeded();\n        }\n        this._syncAriaDescription(this.message);\n      }\n    }\n    /** The default delay in ms before showing the tooltip after show is called */\n    get showDelay() {\n      return this._showDelay;\n    }\n    set showDelay(value) {\n      this._showDelay = coerceNumberProperty(value);\n    }\n    _showDelay;\n    /** The default delay in ms before hiding the tooltip after hide is called */\n    get hideDelay() {\n      return this._hideDelay;\n    }\n    set hideDelay(value) {\n      this._hideDelay = coerceNumberProperty(value);\n      if (this._tooltipInstance) {\n        this._tooltipInstance._mouseLeaveHideDelay = this._hideDelay;\n      }\n    }\n    _hideDelay;\n    /**\n     * How touch gestures should be handled by the tooltip. On touch devices the tooltip directive\n     * uses a long press gesture to show and hide, however it can conflict with the native browser\n     * gestures. To work around the conflict, Angular Material disables native gestures on the\n     * trigger, but that might not be desirable on particular elements (e.g. inputs and draggable\n     * elements). The different values for this option configure the touch event handling as follows:\n     * - `auto` - Enables touch gestures for all elements, but tries to avoid conflicts with native\n     *   browser gestures on particular elements. In particular, it allows text selection on inputs\n     *   and textareas, and preserves the native browser dragging on elements marked as `draggable`.\n     * - `on` - Enables touch gestures for all elements and disables native\n     *   browser gestures with no exceptions.\n     * - `off` - Disables touch gestures. Note that this will prevent the tooltip from\n     *   showing on touch devices.\n     */\n    touchGestures = 'auto';\n    /** The message to be displayed in the tooltip */\n    get message() {\n      return this._message;\n    }\n    set message(value) {\n      const oldMessage = this._message;\n      // If the message is not a string (e.g. number), convert it to a string and trim it.\n      // Must convert with `String(value)`, not `${value}`, otherwise Closure Compiler optimises\n      // away the string-conversion: https://github.com/angular/components/issues/20684\n      this._message = value != null ? String(value).trim() : '';\n      if (!this._message && this._isTooltipVisible()) {\n        this.hide(0);\n      } else {\n        this._setupPointerEnterEventsIfNeeded();\n        this._updateTooltipMessage();\n      }\n      this._syncAriaDescription(oldMessage);\n    }\n    _message = '';\n    /** Classes to be passed to the tooltip. Supports the same syntax as `ngClass`. */\n    get tooltipClass() {\n      return this._tooltipClass;\n    }\n    set tooltipClass(value) {\n      this._tooltipClass = value;\n      if (this._tooltipInstance) {\n        this._setTooltipClass(this._tooltipClass);\n      }\n    }\n    /** Manually-bound passive event listeners. */\n    _passiveListeners = [];\n    /** Timer started at the last `touchstart` event. */\n    _touchstartTimeout = null;\n    /** Emits when the component is destroyed. */\n    _destroyed = new Subject();\n    /** Whether ngOnDestroyed has been called. */\n    _isDestroyed = false;\n    constructor() {\n      const defaultOptions = this._defaultOptions;\n      if (defaultOptions) {\n        this._showDelay = defaultOptions.showDelay;\n        this._hideDelay = defaultOptions.hideDelay;\n        if (defaultOptions.position) {\n          this.position = defaultOptions.position;\n        }\n        if (defaultOptions.positionAtOrigin) {\n          this.positionAtOrigin = defaultOptions.positionAtOrigin;\n        }\n        if (defaultOptions.touchGestures) {\n          this.touchGestures = defaultOptions.touchGestures;\n        }\n        if (defaultOptions.tooltipClass) {\n          this.tooltipClass = defaultOptions.tooltipClass;\n        }\n      }\n      this._viewportMargin = MIN_VIEWPORT_TOOLTIP_THRESHOLD;\n    }\n    ngAfterViewInit() {\n      // This needs to happen after view init so the initial values for all inputs have been set.\n      this._viewInitialized = true;\n      this._setupPointerEnterEventsIfNeeded();\n      this._focusMonitor.monitor(this._elementRef).pipe(takeUntil(this._destroyed)).subscribe(origin => {\n        // Note that the focus monitor runs outside the Angular zone.\n        if (!origin) {\n          this._ngZone.run(() => this.hide(0));\n        } else if (origin === 'keyboard') {\n          this._ngZone.run(() => this.show());\n        }\n      });\n    }\n    /**\n     * Dispose the tooltip when destroyed.\n     */\n    ngOnDestroy() {\n      const nativeElement = this._elementRef.nativeElement;\n      // Optimization: Do not call clearTimeout unless there is an active timer.\n      if (this._touchstartTimeout) {\n        clearTimeout(this._touchstartTimeout);\n      }\n      if (this._overlayRef) {\n        this._overlayRef.dispose();\n        this._tooltipInstance = null;\n      }\n      // Clean up the event listeners set in the constructor\n      this._passiveListeners.forEach(([event, listener]) => {\n        nativeElement.removeEventListener(event, listener, passiveListenerOptions);\n      });\n      this._passiveListeners.length = 0;\n      this._destroyed.next();\n      this._destroyed.complete();\n      this._isDestroyed = true;\n      this._ariaDescriber.removeDescription(nativeElement, this.message, 'tooltip');\n      this._focusMonitor.stopMonitoring(nativeElement);\n    }\n    /** Shows the tooltip after the delay in ms, defaults to tooltip-delay-show or 0ms if no input */\n    show(delay = this.showDelay, origin) {\n      if (this.disabled || !this.message || this._isTooltipVisible()) {\n        this._tooltipInstance?._cancelPendingAnimations();\n        return;\n      }\n      const overlayRef = this._createOverlay(origin);\n      this._detach();\n      this._portal = this._portal || new ComponentPortal(this._tooltipComponent, this._viewContainerRef);\n      const instance = this._tooltipInstance = overlayRef.attach(this._portal).instance;\n      instance._triggerElement = this._elementRef.nativeElement;\n      instance._mouseLeaveHideDelay = this._hideDelay;\n      instance.afterHidden().pipe(takeUntil(this._destroyed)).subscribe(() => this._detach());\n      this._setTooltipClass(this._tooltipClass);\n      this._updateTooltipMessage();\n      instance.show(delay);\n    }\n    /** Hides the tooltip after the delay in ms, defaults to tooltip-delay-hide or 0ms if no input */\n    hide(delay = this.hideDelay) {\n      const instance = this._tooltipInstance;\n      if (instance) {\n        if (instance.isVisible()) {\n          instance.hide(delay);\n        } else {\n          instance._cancelPendingAnimations();\n          this._detach();\n        }\n      }\n    }\n    /** Shows/hides the tooltip */\n    toggle(origin) {\n      this._isTooltipVisible() ? this.hide() : this.show(undefined, origin);\n    }\n    /** Returns true if the tooltip is currently visible to the user */\n    _isTooltipVisible() {\n      return !!this._tooltipInstance && this._tooltipInstance.isVisible();\n    }\n    /** Create the overlay config and position strategy */\n    _createOverlay(origin) {\n      if (this._overlayRef) {\n        const existingStrategy = this._overlayRef.getConfig().positionStrategy;\n        if ((!this.positionAtOrigin || !origin) && existingStrategy._origin instanceof ElementRef) {\n          return this._overlayRef;\n        }\n        this._detach();\n      }\n      const scrollableAncestors = this._injector.get(ScrollDispatcher).getAncestorScrollContainers(this._elementRef);\n      const panelClass = `${this._cssClassPrefix}-${PANEL_CLASS}`;\n      // Create connected position strategy that listens for scroll events to reposition.\n      const strategy = createFlexibleConnectedPositionStrategy(this._injector, this.positionAtOrigin ? origin || this._elementRef : this._elementRef).withTransformOriginOn(`.${this._cssClassPrefix}-tooltip`).withFlexibleDimensions(false).withViewportMargin(this._viewportMargin).withScrollableContainers(scrollableAncestors);\n      strategy.positionChanges.pipe(takeUntil(this._destroyed)).subscribe(change => {\n        this._updateCurrentPositionClass(change.connectionPair);\n        if (this._tooltipInstance) {\n          if (change.scrollableViewProperties.isOverlayClipped && this._tooltipInstance.isVisible()) {\n            // After position changes occur and the overlay is clipped by\n            // a parent scrollable then close the tooltip.\n            this._ngZone.run(() => this.hide(0));\n          }\n        }\n      });\n      this._overlayRef = createOverlayRef(this._injector, {\n        direction: this._dir,\n        positionStrategy: strategy,\n        panelClass: this._overlayPanelClass ? [...this._overlayPanelClass, panelClass] : panelClass,\n        scrollStrategy: this._injector.get(MAT_TOOLTIP_SCROLL_STRATEGY)(),\n        disableAnimations: this._animationsDisabled\n      });\n      this._updatePosition(this._overlayRef);\n      this._overlayRef.detachments().pipe(takeUntil(this._destroyed)).subscribe(() => this._detach());\n      this._overlayRef.outsidePointerEvents().pipe(takeUntil(this._destroyed)).subscribe(() => this._tooltipInstance?._handleBodyInteraction());\n      this._overlayRef.keydownEvents().pipe(takeUntil(this._destroyed)).subscribe(event => {\n        if (this._isTooltipVisible() && event.keyCode === ESCAPE && !hasModifierKey(event)) {\n          event.preventDefault();\n          event.stopPropagation();\n          this._ngZone.run(() => this.hide(0));\n        }\n      });\n      if (this._defaultOptions?.disableTooltipInteractivity) {\n        this._overlayRef.addPanelClass(`${this._cssClassPrefix}-tooltip-panel-non-interactive`);\n      }\n      if (!this._dirSubscribed) {\n        this._dirSubscribed = true;\n        this._dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {\n          if (this._overlayRef) {\n            this._updatePosition(this._overlayRef);\n          }\n        });\n      }\n      return this._overlayRef;\n    }\n    /** Detaches the currently-attached tooltip. */\n    _detach() {\n      if (this._overlayRef && this._overlayRef.hasAttached()) {\n        this._overlayRef.detach();\n      }\n      this._tooltipInstance = null;\n    }\n    /** Updates the position of the current tooltip. */\n    _updatePosition(overlayRef) {\n      const position = overlayRef.getConfig().positionStrategy;\n      const origin = this._getOrigin();\n      const overlay = this._getOverlayPosition();\n      position.withPositions([this._addOffset({\n        ...origin.main,\n        ...overlay.main\n      }), this._addOffset({\n        ...origin.fallback,\n        ...overlay.fallback\n      })]);\n    }\n    /** Adds the configured offset to a position. Used as a hook for child classes. */\n    _addOffset(position) {\n      const offset = UNBOUNDED_ANCHOR_GAP;\n      const isLtr = !this._dir || this._dir.value == 'ltr';\n      if (position.originY === 'top') {\n        position.offsetY = -offset;\n      } else if (position.originY === 'bottom') {\n        position.offsetY = offset;\n      } else if (position.originX === 'start') {\n        position.offsetX = isLtr ? -offset : offset;\n      } else if (position.originX === 'end') {\n        position.offsetX = isLtr ? offset : -offset;\n      }\n      return position;\n    }\n    /**\n     * Returns the origin position and a fallback position based on the user's position preference.\n     * The fallback position is the inverse of the origin (e.g. `'below' -> 'above'`).\n     */\n    _getOrigin() {\n      const isLtr = !this._dir || this._dir.value == 'ltr';\n      const position = this.position;\n      let originPosition;\n      if (position == 'above' || position == 'below') {\n        originPosition = {\n          originX: 'center',\n          originY: position == 'above' ? 'top' : 'bottom'\n        };\n      } else if (position == 'before' || position == 'left' && isLtr || position == 'right' && !isLtr) {\n        originPosition = {\n          originX: 'start',\n          originY: 'center'\n        };\n      } else if (position == 'after' || position == 'right' && isLtr || position == 'left' && !isLtr) {\n        originPosition = {\n          originX: 'end',\n          originY: 'center'\n        };\n      } else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        throw getMatTooltipInvalidPositionError(position);\n      }\n      const {\n        x,\n        y\n      } = this._invertPosition(originPosition.originX, originPosition.originY);\n      return {\n        main: originPosition,\n        fallback: {\n          originX: x,\n          originY: y\n        }\n      };\n    }\n    /** Returns the overlay position and a fallback position based on the user's preference */\n    _getOverlayPosition() {\n      const isLtr = !this._dir || this._dir.value == 'ltr';\n      const position = this.position;\n      let overlayPosition;\n      if (position == 'above') {\n        overlayPosition = {\n          overlayX: 'center',\n          overlayY: 'bottom'\n        };\n      } else if (position == 'below') {\n        overlayPosition = {\n          overlayX: 'center',\n          overlayY: 'top'\n        };\n      } else if (position == 'before' || position == 'left' && isLtr || position == 'right' && !isLtr) {\n        overlayPosition = {\n          overlayX: 'end',\n          overlayY: 'center'\n        };\n      } else if (position == 'after' || position == 'right' && isLtr || position == 'left' && !isLtr) {\n        overlayPosition = {\n          overlayX: 'start',\n          overlayY: 'center'\n        };\n      } else if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        throw getMatTooltipInvalidPositionError(position);\n      }\n      const {\n        x,\n        y\n      } = this._invertPosition(overlayPosition.overlayX, overlayPosition.overlayY);\n      return {\n        main: overlayPosition,\n        fallback: {\n          overlayX: x,\n          overlayY: y\n        }\n      };\n    }\n    /** Updates the tooltip message and repositions the overlay according to the new message length */\n    _updateTooltipMessage() {\n      // Must wait for the message to be painted to the tooltip so that the overlay can properly\n      // calculate the correct positioning based on the size of the text.\n      if (this._tooltipInstance) {\n        this._tooltipInstance.message = this.message;\n        this._tooltipInstance._markForCheck();\n        afterNextRender(() => {\n          if (this._tooltipInstance) {\n            this._overlayRef.updatePosition();\n          }\n        }, {\n          injector: this._injector\n        });\n      }\n    }\n    /** Updates the tooltip class */\n    _setTooltipClass(tooltipClass) {\n      if (this._tooltipInstance) {\n        this._tooltipInstance.tooltipClass = tooltipClass;\n        this._tooltipInstance._markForCheck();\n      }\n    }\n    /** Inverts an overlay position. */\n    _invertPosition(x, y) {\n      if (this.position === 'above' || this.position === 'below') {\n        if (y === 'top') {\n          y = 'bottom';\n        } else if (y === 'bottom') {\n          y = 'top';\n        }\n      } else {\n        if (x === 'end') {\n          x = 'start';\n        } else if (x === 'start') {\n          x = 'end';\n        }\n      }\n      return {\n        x,\n        y\n      };\n    }\n    /** Updates the class on the overlay panel based on the current position of the tooltip. */\n    _updateCurrentPositionClass(connectionPair) {\n      const {\n        overlayY,\n        originX,\n        originY\n      } = connectionPair;\n      let newPosition;\n      // If the overlay is in the middle along the Y axis,\n      // it means that it's either before or after.\n      if (overlayY === 'center') {\n        // Note that since this information is used for styling, we want to\n        // resolve `start` and `end` to their real values, otherwise consumers\n        // would have to remember to do it themselves on each consumption.\n        if (this._dir && this._dir.value === 'rtl') {\n          newPosition = originX === 'end' ? 'left' : 'right';\n        } else {\n          newPosition = originX === 'start' ? 'left' : 'right';\n        }\n      } else {\n        newPosition = overlayY === 'bottom' && originY === 'top' ? 'above' : 'below';\n      }\n      if (newPosition !== this._currentPosition) {\n        const overlayRef = this._overlayRef;\n        if (overlayRef) {\n          const classPrefix = `${this._cssClassPrefix}-${PANEL_CLASS}-`;\n          overlayRef.removePanelClass(classPrefix + this._currentPosition);\n          overlayRef.addPanelClass(classPrefix + newPosition);\n        }\n        this._currentPosition = newPosition;\n      }\n    }\n    /** Binds the pointer events to the tooltip trigger. */\n    _setupPointerEnterEventsIfNeeded() {\n      // Optimization: Defer hooking up events if there's no message or the tooltip is disabled.\n      if (this._disabled || !this.message || !this._viewInitialized || this._passiveListeners.length) {\n        return;\n      }\n      // The mouse events shouldn't be bound on mobile devices, because they can prevent the\n      // first tap from firing its click event or can cause the tooltip to open for clicks.\n      if (this._platformSupportsMouseEvents()) {\n        this._passiveListeners.push(['mouseenter', event => {\n          this._setupPointerExitEventsIfNeeded();\n          let point = undefined;\n          if (event.x !== undefined && event.y !== undefined) {\n            point = event;\n          }\n          this.show(undefined, point);\n        }]);\n      } else if (this.touchGestures !== 'off') {\n        this._disableNativeGesturesIfNecessary();\n        this._passiveListeners.push(['touchstart', event => {\n          const touch = event.targetTouches?.[0];\n          const origin = touch ? {\n            x: touch.clientX,\n            y: touch.clientY\n          } : undefined;\n          // Note that it's important that we don't `preventDefault` here,\n          // because it can prevent click events from firing on the element.\n          this._setupPointerExitEventsIfNeeded();\n          if (this._touchstartTimeout) {\n            clearTimeout(this._touchstartTimeout);\n          }\n          const DEFAULT_LONGPRESS_DELAY = 500;\n          this._touchstartTimeout = setTimeout(() => {\n            this._touchstartTimeout = null;\n            this.show(undefined, origin);\n          }, this._defaultOptions?.touchLongPressShowDelay ?? DEFAULT_LONGPRESS_DELAY);\n        }]);\n      }\n      this._addListeners(this._passiveListeners);\n    }\n    _setupPointerExitEventsIfNeeded() {\n      if (this._pointerExitEventsInitialized) {\n        return;\n      }\n      this._pointerExitEventsInitialized = true;\n      const exitListeners = [];\n      if (this._platformSupportsMouseEvents()) {\n        exitListeners.push(['mouseleave', event => {\n          const newTarget = event.relatedTarget;\n          if (!newTarget || !this._overlayRef?.overlayElement.contains(newTarget)) {\n            this.hide();\n          }\n        }], ['wheel', event => this._wheelListener(event)]);\n      } else if (this.touchGestures !== 'off') {\n        this._disableNativeGesturesIfNecessary();\n        const touchendListener = () => {\n          if (this._touchstartTimeout) {\n            clearTimeout(this._touchstartTimeout);\n          }\n          this.hide(this._defaultOptions?.touchendHideDelay);\n        };\n        exitListeners.push(['touchend', touchendListener], ['touchcancel', touchendListener]);\n      }\n      this._addListeners(exitListeners);\n      this._passiveListeners.push(...exitListeners);\n    }\n    _addListeners(listeners) {\n      listeners.forEach(([event, listener]) => {\n        this._elementRef.nativeElement.addEventListener(event, listener, passiveListenerOptions);\n      });\n    }\n    _platformSupportsMouseEvents() {\n      return !this._platform.IOS && !this._platform.ANDROID;\n    }\n    /** Listener for the `wheel` event on the element. */\n    _wheelListener(event) {\n      if (this._isTooltipVisible()) {\n        const elementUnderPointer = this._injector.get(DOCUMENT).elementFromPoint(event.clientX, event.clientY);\n        const element = this._elementRef.nativeElement;\n        // On non-touch devices we depend on the `mouseleave` event to close the tooltip, but it\n        // won't fire if the user scrolls away using the wheel without moving their cursor. We\n        // work around it by finding the element under the user's cursor and closing the tooltip\n        // if it's not the trigger.\n        if (elementUnderPointer !== element && !element.contains(elementUnderPointer)) {\n          this.hide();\n        }\n      }\n    }\n    /** Disables the native browser gestures, based on how the tooltip has been configured. */\n    _disableNativeGesturesIfNecessary() {\n      const gestures = this.touchGestures;\n      if (gestures !== 'off') {\n        const element = this._elementRef.nativeElement;\n        const style = element.style;\n        // If gestures are set to `auto`, we don't disable text selection on inputs and\n        // textareas, because it prevents the user from typing into them on iOS Safari.\n        if (gestures === 'on' || element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA') {\n          style.userSelect = style.msUserSelect = style.webkitUserSelect = style.MozUserSelect = 'none';\n        }\n        // If we have `auto` gestures and the element uses native HTML dragging,\n        // we don't set `-webkit-user-drag` because it prevents the native behavior.\n        if (gestures === 'on' || !element.draggable) {\n          style.webkitUserDrag = 'none';\n        }\n        style.touchAction = 'none';\n        style.webkitTapHighlightColor = 'transparent';\n      }\n    }\n    /** Updates the tooltip's ARIA description based on it current state. */\n    _syncAriaDescription(oldMessage) {\n      if (this._ariaDescriptionPending) {\n        return;\n      }\n      this._ariaDescriptionPending = true;\n      this._ariaDescriber.removeDescription(this._elementRef.nativeElement, oldMessage, 'tooltip');\n      // The `AriaDescriber` has some functionality that avoids adding a description if it's the\n      // same as the `aria-label` of an element, however we can't know whether the tooltip trigger\n      // has a data-bound `aria-label` or when it'll be set for the first time. We can avoid the\n      // issue by deferring the description by a tick so Angular has time to set the `aria-label`.\n      if (!this._isDestroyed) {\n        afterNextRender({\n          write: () => {\n            this._ariaDescriptionPending = false;\n            if (this.message && !this.disabled) {\n              this._ariaDescriber.describe(this._elementRef.nativeElement, this.message, 'tooltip');\n            }\n          }\n        }, {\n          injector: this._injector\n        });\n      }\n    }\n    static ɵfac = function MatTooltip_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatTooltip)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatTooltip,\n      selectors: [[\"\", \"matTooltip\", \"\"]],\n      hostAttrs: [1, \"mat-mdc-tooltip-trigger\"],\n      hostVars: 2,\n      hostBindings: function MatTooltip_HostBindings(rf, ctx) {\n        if (rf & 2) {\n          i0.ɵɵclassProp(\"mat-mdc-tooltip-disabled\", ctx.disabled);\n        }\n      },\n      inputs: {\n        position: [0, \"matTooltipPosition\", \"position\"],\n        positionAtOrigin: [0, \"matTooltipPositionAtOrigin\", \"positionAtOrigin\"],\n        disabled: [0, \"matTooltipDisabled\", \"disabled\"],\n        showDelay: [0, \"matTooltipShowDelay\", \"showDelay\"],\n        hideDelay: [0, \"matTooltipHideDelay\", \"hideDelay\"],\n        touchGestures: [0, \"matTooltipTouchGestures\", \"touchGestures\"],\n        message: [0, \"matTooltip\", \"message\"],\n        tooltipClass: [0, \"matTooltipClass\", \"tooltipClass\"]\n      },\n      exportAs: [\"matTooltip\"]\n    });\n  }\n  return MatTooltip;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Internal component that wraps the tooltip's content.\n * @docs-private\n */\nlet TooltipComponent = /*#__PURE__*/(() => {\n  class TooltipComponent {\n    _changeDetectorRef = inject(ChangeDetectorRef);\n    _elementRef = inject(ElementRef);\n    /* Whether the tooltip text overflows to multiple lines */\n    _isMultiline = false;\n    /** Message to display in the tooltip */\n    message;\n    /** Classes to be added to the tooltip. Supports the same syntax as `ngClass`. */\n    tooltipClass;\n    /** The timeout ID of any current timer set to show the tooltip */\n    _showTimeoutId;\n    /** The timeout ID of any current timer set to hide the tooltip */\n    _hideTimeoutId;\n    /** Element that caused the tooltip to open. */\n    _triggerElement;\n    /** Amount of milliseconds to delay the closing sequence. */\n    _mouseLeaveHideDelay;\n    /** Whether animations are currently disabled. */\n    _animationsDisabled = _animationsDisabled();\n    /** Reference to the internal tooltip element. */\n    _tooltip;\n    /** Whether interactions on the page should close the tooltip */\n    _closeOnInteraction = false;\n    /** Whether the tooltip is currently visible. */\n    _isVisible = false;\n    /** Subject for notifying that the tooltip has been hidden from the view */\n    _onHide = new Subject();\n    /** Name of the show animation and the class that toggles it. */\n    _showAnimation = 'mat-mdc-tooltip-show';\n    /** Name of the hide animation and the class that toggles it. */\n    _hideAnimation = 'mat-mdc-tooltip-hide';\n    constructor() {}\n    /**\n     * Shows the tooltip with an animation originating from the provided origin\n     * @param delay Amount of milliseconds to the delay showing the tooltip.\n     */\n    show(delay) {\n      // Cancel the delayed hide if it is scheduled\n      if (this._hideTimeoutId != null) {\n        clearTimeout(this._hideTimeoutId);\n      }\n      this._showTimeoutId = setTimeout(() => {\n        this._toggleVisibility(true);\n        this._showTimeoutId = undefined;\n      }, delay);\n    }\n    /**\n     * Begins the animation to hide the tooltip after the provided delay in ms.\n     * @param delay Amount of milliseconds to delay showing the tooltip.\n     */\n    hide(delay) {\n      // Cancel the delayed show if it is scheduled\n      if (this._showTimeoutId != null) {\n        clearTimeout(this._showTimeoutId);\n      }\n      this._hideTimeoutId = setTimeout(() => {\n        this._toggleVisibility(false);\n        this._hideTimeoutId = undefined;\n      }, delay);\n    }\n    /** Returns an observable that notifies when the tooltip has been hidden from view. */\n    afterHidden() {\n      return this._onHide;\n    }\n    /** Whether the tooltip is being displayed. */\n    isVisible() {\n      return this._isVisible;\n    }\n    ngOnDestroy() {\n      this._cancelPendingAnimations();\n      this._onHide.complete();\n      this._triggerElement = null;\n    }\n    /**\n     * Interactions on the HTML body should close the tooltip immediately as defined in the\n     * material design spec.\n     * https://material.io/design/components/tooltips.html#behavior\n     */\n    _handleBodyInteraction() {\n      if (this._closeOnInteraction) {\n        this.hide(0);\n      }\n    }\n    /**\n     * Marks that the tooltip needs to be checked in the next change detection run.\n     * Mainly used for rendering the initial text before positioning a tooltip, which\n     * can be problematic in components with OnPush change detection.\n     */\n    _markForCheck() {\n      this._changeDetectorRef.markForCheck();\n    }\n    _handleMouseLeave({\n      relatedTarget\n    }) {\n      if (!relatedTarget || !this._triggerElement.contains(relatedTarget)) {\n        if (this.isVisible()) {\n          this.hide(this._mouseLeaveHideDelay);\n        } else {\n          this._finalizeAnimation(false);\n        }\n      }\n    }\n    /**\n     * Callback for when the timeout in this.show() gets completed.\n     * This method is only needed by the mdc-tooltip, and so it is only implemented\n     * in the mdc-tooltip, not here.\n     */\n    _onShow() {\n      this._isMultiline = this._isTooltipMultiline();\n      this._markForCheck();\n    }\n    /** Whether the tooltip text has overflown to the next line */\n    _isTooltipMultiline() {\n      const rect = this._elementRef.nativeElement.getBoundingClientRect();\n      return rect.height > MIN_HEIGHT && rect.width >= MAX_WIDTH;\n    }\n    /** Event listener dispatched when an animation on the tooltip finishes. */\n    _handleAnimationEnd({\n      animationName\n    }) {\n      if (animationName === this._showAnimation || animationName === this._hideAnimation) {\n        this._finalizeAnimation(animationName === this._showAnimation);\n      }\n    }\n    /** Cancels any pending animation sequences. */\n    _cancelPendingAnimations() {\n      if (this._showTimeoutId != null) {\n        clearTimeout(this._showTimeoutId);\n      }\n      if (this._hideTimeoutId != null) {\n        clearTimeout(this._hideTimeoutId);\n      }\n      this._showTimeoutId = this._hideTimeoutId = undefined;\n    }\n    /** Handles the cleanup after an animation has finished. */\n    _finalizeAnimation(toVisible) {\n      if (toVisible) {\n        this._closeOnInteraction = true;\n      } else if (!this.isVisible()) {\n        this._onHide.next();\n      }\n    }\n    /** Toggles the visibility of the tooltip element. */\n    _toggleVisibility(isVisible) {\n      // We set the classes directly here ourselves so that toggling the tooltip state\n      // isn't bound by change detection. This allows us to hide it even if the\n      // view ref has been detached from the CD tree.\n      const tooltip = this._tooltip.nativeElement;\n      const showClass = this._showAnimation;\n      const hideClass = this._hideAnimation;\n      tooltip.classList.remove(isVisible ? hideClass : showClass);\n      tooltip.classList.add(isVisible ? showClass : hideClass);\n      if (this._isVisible !== isVisible) {\n        this._isVisible = isVisible;\n        this._changeDetectorRef.markForCheck();\n      }\n      // It's common for internal apps to disable animations using `* { animation: none !important }`\n      // which can break the opening sequence. Try to detect such cases and work around them.\n      if (isVisible && !this._animationsDisabled && typeof getComputedStyle === 'function') {\n        const styles = getComputedStyle(tooltip);\n        // Use `getPropertyValue` to avoid issues with property renaming.\n        if (styles.getPropertyValue('animation-duration') === '0s' || styles.getPropertyValue('animation-name') === 'none') {\n          this._animationsDisabled = true;\n        }\n      }\n      if (isVisible) {\n        this._onShow();\n      }\n      if (this._animationsDisabled) {\n        tooltip.classList.add('_mat-animation-noopable');\n        this._finalizeAnimation(isVisible);\n      }\n    }\n    static ɵfac = function TooltipComponent_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || TooltipComponent)();\n    };\n    static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n      type: TooltipComponent,\n      selectors: [[\"mat-tooltip-component\"]],\n      viewQuery: function TooltipComponent_Query(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵviewQuery(_c0, 7);\n        }\n        if (rf & 2) {\n          let _t;\n          i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._tooltip = _t.first);\n        }\n      },\n      hostAttrs: [\"aria-hidden\", \"true\"],\n      hostBindings: function TooltipComponent_HostBindings(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵlistener(\"mouseleave\", function TooltipComponent_mouseleave_HostBindingHandler($event) {\n            return ctx._handleMouseLeave($event);\n          });\n        }\n      },\n      decls: 4,\n      vars: 4,\n      consts: [[\"tooltip\", \"\"], [1, \"mdc-tooltip\", \"mat-mdc-tooltip\", 3, \"animationend\", \"ngClass\"], [1, \"mat-mdc-tooltip-surface\", \"mdc-tooltip__surface\"]],\n      template: function TooltipComponent_Template(rf, ctx) {\n        if (rf & 1) {\n          const _r1 = i0.ɵɵgetCurrentView();\n          i0.ɵɵelementStart(0, \"div\", 1, 0);\n          i0.ɵɵlistener(\"animationend\", function TooltipComponent_Template_div_animationend_0_listener($event) {\n            i0.ɵɵrestoreView(_r1);\n            return i0.ɵɵresetView(ctx._handleAnimationEnd($event));\n          });\n          i0.ɵɵelementStart(2, \"div\", 2);\n          i0.ɵɵtext(3);\n          i0.ɵɵelementEnd()();\n        }\n        if (rf & 2) {\n          i0.ɵɵclassProp(\"mdc-tooltip--multiline\", ctx._isMultiline);\n          i0.ɵɵproperty(\"ngClass\", ctx.tooltipClass);\n          i0.ɵɵadvance(3);\n          i0.ɵɵtextInterpolate(ctx.message);\n        }\n      },\n      dependencies: [NgClass],\n      styles: [\".mat-mdc-tooltip{position:relative;transform:scale(0);display:inline-flex}.mat-mdc-tooltip::before{content:\\\"\\\";top:0;right:0;bottom:0;left:0;z-index:-1;position:absolute}.mat-mdc-tooltip-panel-below .mat-mdc-tooltip::before{top:-8px}.mat-mdc-tooltip-panel-above .mat-mdc-tooltip::before{bottom:-8px}.mat-mdc-tooltip-panel-right .mat-mdc-tooltip::before{left:-8px}.mat-mdc-tooltip-panel-left .mat-mdc-tooltip::before{right:-8px}.mat-mdc-tooltip._mat-animation-noopable{animation:none;transform:scale(1)}.mat-mdc-tooltip-surface{word-break:normal;overflow-wrap:anywhere;padding:4px 8px;min-width:40px;max-width:200px;min-height:24px;max-height:40vh;box-sizing:border-box;overflow:hidden;text-align:center;will-change:transform,opacity;background-color:var(--mat-tooltip-container-color, var(--mat-sys-inverse-surface));color:var(--mat-tooltip-supporting-text-color, var(--mat-sys-inverse-on-surface));border-radius:var(--mat-tooltip-container-shape, var(--mat-sys-corner-extra-small));font-family:var(--mat-tooltip-supporting-text-font, var(--mat-sys-body-small-font));font-size:var(--mat-tooltip-supporting-text-size, var(--mat-sys-body-small-size));font-weight:var(--mat-tooltip-supporting-text-weight, var(--mat-sys-body-small-weight));line-height:var(--mat-tooltip-supporting-text-line-height, var(--mat-sys-body-small-line-height));letter-spacing:var(--mat-tooltip-supporting-text-tracking, var(--mat-sys-body-small-tracking))}.mat-mdc-tooltip-surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid rgba(0,0,0,0);border-radius:inherit;content:\\\"\\\";pointer-events:none}.mdc-tooltip--multiline .mat-mdc-tooltip-surface{text-align:left}[dir=rtl] .mdc-tooltip--multiline .mat-mdc-tooltip-surface{text-align:right}.mat-mdc-tooltip-panel{line-height:normal}.mat-mdc-tooltip-panel.mat-mdc-tooltip-panel-non-interactive{pointer-events:none}@keyframes mat-mdc-tooltip-show{0%{opacity:0;transform:scale(0.8)}100%{opacity:1;transform:scale(1)}}@keyframes mat-mdc-tooltip-hide{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(0.8)}}.mat-mdc-tooltip-show{animation:mat-mdc-tooltip-show 150ms cubic-bezier(0, 0, 0.2, 1) forwards}.mat-mdc-tooltip-hide{animation:mat-mdc-tooltip-hide 75ms cubic-bezier(0.4, 0, 1, 1) forwards}\\n\"],\n      encapsulation: 2,\n      changeDetection: 0\n    });\n  }\n  return TooltipComponent;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { MAT_TOOLTIP_DEFAULT_OPTIONS, MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY, MAT_TOOLTIP_SCROLL_STRATEGY, MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY, MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER, MatTooltip, SCROLL_THROTTLE_MS, TOOLTIP_PANEL_CLASS, TooltipComponent, getMatTooltipInvalidPositionError };\n","import * as i0 from '@angular/core';\nimport { NgModule } from '@angular/core';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { MatTooltip, TooltipComponent, MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER } from './tooltip2.mjs';\nimport { MatCommonModule } from './common-module.mjs';\nlet MatTooltipModule = /*#__PURE__*/(() => {\n  class MatTooltipModule {\n    static ɵfac = function MatTooltipModule_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatTooltipModule)();\n    };\n    static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n      type: MatTooltipModule\n    });\n    static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n      providers: [MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER],\n      imports: [A11yModule, OverlayModule, MatCommonModule, MatCommonModule, CdkScrollableModule]\n    });\n  }\n  return MatTooltipModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { MatTooltipModule };\n","import * as i0 from '@angular/core';\nimport { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, NgModule } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { MatCommonModule } from './common-module.mjs';\nimport '@angular/cdk/a11y';\nimport '@angular/cdk/bidi';\nlet MatDivider = /*#__PURE__*/(() => {\n  class MatDivider {\n    /** Whether the divider is vertically aligned. */\n    get vertical() {\n      return this._vertical;\n    }\n    set vertical(value) {\n      this._vertical = coerceBooleanProperty(value);\n    }\n    _vertical = false;\n    /** Whether the divider is an inset divider. */\n    get inset() {\n      return this._inset;\n    }\n    set inset(value) {\n      this._inset = coerceBooleanProperty(value);\n    }\n    _inset = false;\n    static ɵfac = function MatDivider_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatDivider)();\n    };\n    static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n      type: MatDivider,\n      selectors: [[\"mat-divider\"]],\n      hostAttrs: [\"role\", \"separator\", 1, \"mat-divider\"],\n      hostVars: 7,\n      hostBindings: function MatDivider_HostBindings(rf, ctx) {\n        if (rf & 2) {\n          i0.ɵɵattribute(\"aria-orientation\", ctx.vertical ? \"vertical\" : \"horizontal\");\n          i0.ɵɵclassProp(\"mat-divider-vertical\", ctx.vertical)(\"mat-divider-horizontal\", !ctx.vertical)(\"mat-divider-inset\", ctx.inset);\n        }\n      },\n      inputs: {\n        vertical: \"vertical\",\n        inset: \"inset\"\n      },\n      decls: 0,\n      vars: 0,\n      template: function MatDivider_Template(rf, ctx) {},\n      styles: [\".mat-divider{display:block;margin:0;border-top-style:solid;border-top-color:var(--mat-divider-color, var(--mat-sys-outline-variant));border-top-width:var(--mat-divider-width, 1px)}.mat-divider.mat-divider-vertical{border-top:0;border-right-style:solid;border-right-color:var(--mat-divider-color, var(--mat-sys-outline-variant));border-right-width:var(--mat-divider-width, 1px)}.mat-divider.mat-divider-inset{margin-left:80px}[dir=rtl] .mat-divider.mat-divider-inset{margin-left:auto;margin-right:80px}\\n\"],\n      encapsulation: 2,\n      changeDetection: 0\n    });\n  }\n  return MatDivider;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatDividerModule = /*#__PURE__*/(() => {\n  class MatDividerModule {\n    static ɵfac = function MatDividerModule_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatDividerModule)();\n    };\n    static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n      type: MatDividerModule\n    });\n    static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n      imports: [MatCommonModule, MatCommonModule]\n    });\n  }\n  return MatDividerModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { MatDivider, MatDividerModule };\n","import * as i0 from '@angular/core';\nimport { NgModule } from '@angular/core';\nimport { MatPseudoCheckbox } from './pseudo-checkbox.mjs';\nimport { MatCommonModule } from './common-module.mjs';\nlet MatPseudoCheckboxModule = /*#__PURE__*/(() => {\n  class MatPseudoCheckboxModule {\n    static ɵfac = function MatPseudoCheckboxModule_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatPseudoCheckboxModule)();\n    };\n    static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n      type: MatPseudoCheckboxModule\n    });\n    static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n      imports: [MatCommonModule]\n    });\n  }\n  return MatPseudoCheckboxModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { MatPseudoCheckboxModule };\n","import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, inject, ElementRef, Directive, signal, Input, NgZone, Injector, ContentChildren, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, ChangeDetectorRef, EventEmitter, Output, forwardRef, Renderer2, NgModule } from '@angular/core';\nimport { Platform, _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';\nimport { _CdkPrivateStyleLoader } from '@angular/cdk/private';\nimport { Subscription, merge, Subject } from 'rxjs';\nimport { MAT_RIPPLE_GLOBAL_OPTIONS, RippleRenderer } from './ripple.mjs';\nimport { _animationsDisabled } from './animation.mjs';\nimport { _StructuralStylesLoader } from './structural-styles.mjs';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CdkObserveContent, ObserversModule } from '@angular/cdk/observers';\nimport { MatDividerModule } from './divider.mjs';\nconst _c0 = [\"*\"];\nconst _c1 = \".mdc-list{margin:0;padding:8px 0;list-style-type:none}.mdc-list:focus{outline:none}.mdc-list-item{display:flex;position:relative;justify-content:flex-start;overflow:hidden;padding:0;align-items:stretch;cursor:pointer;padding-left:16px;padding-right:16px;background-color:var(--mat-list-list-item-container-color, transparent);border-radius:var(--mat-list-list-item-container-shape, var(--mat-sys-corner-none))}.mdc-list-item.mdc-list-item--selected{background-color:var(--mat-list-list-item-selected-container-color)}.mdc-list-item:focus{outline:0}.mdc-list-item.mdc-list-item--disabled{cursor:auto}.mdc-list-item.mdc-list-item--with-one-line{height:var(--mat-list-list-item-one-line-container-height, 48px)}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__start{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-two-lines{height:var(--mat-list-list-item-two-line-container-height, 64px)}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-three-lines{height:var(--mat-list-list-item-three-line-container-height, 88px)}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--selected::before,.mdc-list-item.mdc-list-item--selected:focus::before,.mdc-list-item:not(.mdc-list-item--selected):focus::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;content:\\\"\\\";pointer-events:none}a.mdc-list-item{color:inherit;text-decoration:none}.mdc-list-item__start{fill:currentColor;flex-shrink:0;pointer-events:none}.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-leading-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-leading-icon-size, 24px);height:var(--mat-list-list-item-leading-icon-size, 24px);margin-left:16px;margin-right:32px}[dir=rtl] .mdc-list-item--with-leading-icon .mdc-list-item__start{margin-left:32px;margin-right:16px}.mdc-list-item--with-leading-icon:hover .mdc-list-item__start{color:var(--mat-list-list-item-hover-leading-icon-color)}.mdc-list-item--with-leading-avatar .mdc-list-item__start{width:var(--mat-list-list-item-leading-avatar-size, 40px);height:var(--mat-list-list-item-leading-avatar-size, 40px);margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item--with-leading-avatar .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-avatar .mdc-list-item__start{margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item__end{flex-shrink:0;pointer-events:none}.mdc-list-item--with-trailing-meta .mdc-list-item__end{font-family:var(--mat-list-list-item-trailing-supporting-text-font, var(--mat-sys-label-small-font));line-height:var(--mat-list-list-item-trailing-supporting-text-line-height, var(--mat-sys-label-small-line-height));font-size:var(--mat-list-list-item-trailing-supporting-text-size, var(--mat-sys-label-small-size));font-weight:var(--mat-list-list-item-trailing-supporting-text-weight, var(--mat-sys-label-small-weight));letter-spacing:var(--mat-list-list-item-trailing-supporting-text-tracking, var(--mat-sys-label-small-tracking))}.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-trailing-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-trailing-icon-size, 24px);height:var(--mat-list-list-item-trailing-icon-size, 24px)}.mdc-list-item--with-trailing-icon:hover .mdc-list-item__end{color:var(--mat-list-list-item-hover-trailing-icon-color)}.mdc-list-item.mdc-list-item--with-trailing-meta .mdc-list-item__end{color:var(--mat-list-list-item-trailing-supporting-text-color, var(--mat-sys-on-surface-variant))}.mdc-list-item--selected.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-selected-trailing-icon-color, var(--mat-sys-primary))}.mdc-list-item__content{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;align-self:center;flex:1;pointer-events:none}.mdc-list-item--with-two-lines .mdc-list-item__content,.mdc-list-item--with-three-lines .mdc-list-item__content{align-self:stretch}.mdc-list-item__primary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:var(--mat-list-list-item-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-list-list-item-label-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-list-list-item-label-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-list-list-item-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-list-list-item-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-list-list-item-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-list-item:hover .mdc-list-item__primary-text{color:var(--mat-list-list-item-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:focus .mdc-list-item__primary-text{color:var(--mat-list-list-item-focus-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-three-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item__secondary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;color:var(--mat-list-list-item-supporting-text-color, var(--mat-sys-on-surface-variant));font-family:var(--mat-list-list-item-supporting-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-list-list-item-supporting-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-list-list-item-supporting-text-size, var(--mat-sys-body-medium-size));font-weight:var(--mat-list-list-item-supporting-text-weight, var(--mat-sys-body-medium-weight));letter-spacing:var(--mat-list-list-item-supporting-text-tracking, var(--mat-sys-body-medium-tracking))}.mdc-list-item__secondary-text::before{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-three-lines .mdc-list-item__secondary-text{white-space:normal;line-height:20px}.mdc-list-item--with-overline .mdc-list-item__secondary-text{white-space:nowrap;line-height:auto}.mdc-list-item--with-leading-radio.mdc-list-item,.mdc-list-item--with-leading-checkbox.mdc-list-item,.mdc-list-item--with-leading-icon.mdc-list-item,.mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:0;padding-right:16px}[dir=rtl] .mdc-list-item--with-leading-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-checkbox.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:16px;padding-right:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-trailing-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-icon.mdc-list-item{padding-left:0;padding-right:0}.mdc-list-item--with-trailing-icon .mdc-list-item__end{margin-left:16px;margin-right:16px}.mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-meta .mdc-list-item__end{-webkit-user-select:none;user-select:none;margin-left:28px;margin-right:16px}[dir=rtl] .mdc-list-item--with-trailing-meta .mdc-list-item__end{margin-left:16px;margin-right:28px}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end{display:block;line-height:normal;align-self:flex-start;margin-top:0}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end::before,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio .mdc-list-item__start,.mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:8px;margin-right:24px}[dir=rtl] .mdc-list-item--with-leading-radio .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:24px;margin-right:8px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__start,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:8px}.mdc-list-item--with-trailing-radio.mdc-list-item,.mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-left:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-right:0}.mdc-list-item--with-trailing-radio .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:24px;margin-right:8px}[dir=rtl] .mdc-list-item--with-trailing-radio .mdc-list-item__end,[dir=rtl] .mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:8px;margin-right:24px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:8px}.mdc-list-group__subheader{margin:.75rem 16px}.mdc-list-item--disabled .mdc-list-item__start,.mdc-list-item--disabled .mdc-list-item__content,.mdc-list-item--disabled .mdc-list-item__end{opacity:1}.mdc-list-item--disabled .mdc-list-item__primary-text,.mdc-list-item--disabled .mdc-list-item__secondary-text{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--disabled.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-disabled-leading-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-leading-icon-opacity, 0.38)}.mdc-list-item--disabled.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-disabled-trailing-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-trailing-icon-opacity, 0.38)}.mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing,[dir=rtl] .mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing{padding-left:0;padding-right:0}.mdc-list-item.mdc-list-item--disabled .mdc-list-item__primary-text{color:var(--mat-list-list-item-disabled-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:hover::before{background-color:var(--mat-list-list-item-hover-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-list-item.mdc-list-item--disabled::before{background-color:var(--mat-list-list-item-disabled-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item:focus::before{background-color:var(--mat-list-list-item-focus-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item--disabled .mdc-radio,.mdc-list-item--disabled .mdc-checkbox{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--with-leading-avatar .mat-mdc-list-item-avatar{border-radius:var(--mat-list-list-item-leading-avatar-shape, var(--mat-sys-corner-full));background-color:var(--mat-list-list-item-leading-avatar-color, var(--mat-sys-primary-container))}.mat-mdc-list-item-icon{font-size:var(--mat-list-list-item-leading-icon-size, 24px)}@media(forced-colors: active){a.mdc-list-item--activated::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}a.mdc-list-item--activated [dir=rtl]::after{right:auto;left:16px}}.mat-mdc-list-base{display:block}.mat-mdc-list-base .mdc-list-item__start,.mat-mdc-list-base .mdc-list-item__end,.mat-mdc-list-base .mdc-list-item__content{pointer-events:auto}.mat-mdc-list-item,.mat-mdc-list-option{width:100%;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-list-item:not(.mat-mdc-list-item-interactive),.mat-mdc-list-option:not(.mat-mdc-list-item-interactive){cursor:default}.mat-mdc-list-item .mat-divider-inset,.mat-mdc-list-option .mat-divider-inset{position:absolute;left:0;right:0;bottom:0}.mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,.mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-left:72px}[dir=rtl] .mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,[dir=rtl] .mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-right:72px}.mat-mdc-list-item-interactive::before{top:0;left:0;right:0;bottom:0;position:absolute;content:\\\"\\\";opacity:0;pointer-events:none;border-radius:inherit}.mat-mdc-list-item>.mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-list-item:focus>.mat-focus-indicator::before{content:\\\"\\\"}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-line.mdc-list-item__secondary-text{white-space:nowrap;line-height:normal}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-unscoped-content.mdc-list-item__secondary-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);text-align:start}mat-action-list button::-moz-focus-inner{border:0}.mdc-list-item--with-leading-icon .mdc-list-item__start{margin-inline-start:var(--mat-list-list-item-leading-icon-start-space, 16px);margin-inline-end:var(--mat-list-list-item-leading-icon-end-space, 16px)}.mat-mdc-nav-list .mat-mdc-list-item{border-radius:var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full));--mat-focus-indicator-border-radius: var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full))}.mat-mdc-nav-list .mat-mdc-list-item.mdc-list-item--activated{background-color:var(--mat-list-active-indicator-color, var(--mat-sys-secondary-container))}\\n\";\nconst _c2 = [\"unscopedContent\"];\nconst _c3 = [\"text\"];\nconst _c4 = [[[\"\", \"matListItemAvatar\", \"\"], [\"\", \"matListItemIcon\", \"\"]], [[\"\", \"matListItemTitle\", \"\"]], [[\"\", \"matListItemLine\", \"\"]], \"*\", [[\"\", \"matListItemMeta\", \"\"]], [[\"mat-divider\"]]];\nconst _c5 = [\"[matListItemAvatar],[matListItemIcon]\", \"[matListItemTitle]\", \"[matListItemLine]\", \"*\", \"[matListItemMeta]\", \"mat-divider\"];\nconst _c6 = [[[\"\", \"matListItemTitle\", \"\"]], [[\"\", \"matListItemLine\", \"\"]], \"*\", [[\"mat-divider\"]], [[\"\", \"matListItemAvatar\", \"\"], [\"\", \"matListItemIcon\", \"\"]]];\nconst _c7 = [\"[matListItemTitle]\", \"[matListItemLine]\", \"*\", \"mat-divider\", \"[matListItemAvatar],[matListItemIcon]\"];\nfunction MatListOption_ng_template_0_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵprojection(0, 4);\n  }\n}\nfunction MatListOption_ng_template_2_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"div\", 11);\n    i0.ɵɵelement(1, \"input\", 12);\n    i0.ɵɵelementStart(2, \"div\", 13);\n    i0.ɵɵnamespaceSVG();\n    i0.ɵɵelementStart(3, \"svg\", 14);\n    i0.ɵɵelement(4, \"path\", 15);\n    i0.ɵɵelementEnd();\n    i0.ɵɵnamespaceHTML();\n    i0.ɵɵelement(5, \"div\", 16);\n    i0.ɵɵelementEnd()();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext();\n    i0.ɵɵclassProp(\"mdc-checkbox--disabled\", ctx_r1.disabled);\n    i0.ɵɵadvance();\n    i0.ɵɵproperty(\"checked\", ctx_r1.selected)(\"disabled\", ctx_r1.disabled);\n  }\n}\nfunction MatListOption_ng_template_4_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"div\", 17);\n    i0.ɵɵelement(1, \"input\", 18);\n    i0.ɵɵelementStart(2, \"div\", 19);\n    i0.ɵɵelement(3, \"div\", 20)(4, \"div\", 21);\n    i0.ɵɵelementEnd()();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext();\n    i0.ɵɵclassProp(\"mdc-radio--disabled\", ctx_r1.disabled);\n    i0.ɵɵadvance();\n    i0.ɵɵproperty(\"checked\", ctx_r1.selected)(\"disabled\", ctx_r1.disabled);\n  }\n}\nfunction MatListOption_Conditional_6_ng_template_1_Template(rf, ctx) {}\nfunction MatListOption_Conditional_6_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"span\", 4);\n    i0.ɵɵtemplate(1, MatListOption_Conditional_6_ng_template_1_Template, 0, 0, \"ng-template\", 6);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    i0.ɵɵnextContext();\n    const checkbox_r3 = i0.ɵɵreference(3);\n    i0.ɵɵadvance();\n    i0.ɵɵproperty(\"ngTemplateOutlet\", checkbox_r3);\n  }\n}\nfunction MatListOption_Conditional_7_ng_template_1_Template(rf, ctx) {}\nfunction MatListOption_Conditional_7_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"span\", 5);\n    i0.ɵɵtemplate(1, MatListOption_Conditional_7_ng_template_1_Template, 0, 0, \"ng-template\", 6);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    i0.ɵɵnextContext();\n    const radio_r4 = i0.ɵɵreference(5);\n    i0.ɵɵadvance();\n    i0.ɵɵproperty(\"ngTemplateOutlet\", radio_r4);\n  }\n}\nfunction MatListOption_Conditional_8_ng_template_0_Template(rf, ctx) {}\nfunction MatListOption_Conditional_8_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵtemplate(0, MatListOption_Conditional_8_ng_template_0_Template, 0, 0, \"ng-template\", 6);\n  }\n  if (rf & 2) {\n    i0.ɵɵnextContext();\n    const icons_r5 = i0.ɵɵreference(1);\n    i0.ɵɵproperty(\"ngTemplateOutlet\", icons_r5);\n  }\n}\nfunction MatListOption_Conditional_15_ng_template_1_Template(rf, ctx) {}\nfunction MatListOption_Conditional_15_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"span\", 9);\n    i0.ɵɵtemplate(1, MatListOption_Conditional_15_ng_template_1_Template, 0, 0, \"ng-template\", 6);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    i0.ɵɵnextContext();\n    const checkbox_r3 = i0.ɵɵreference(3);\n    i0.ɵɵadvance();\n    i0.ɵɵproperty(\"ngTemplateOutlet\", checkbox_r3);\n  }\n}\nfunction MatListOption_Conditional_16_ng_template_1_Template(rf, ctx) {}\nfunction MatListOption_Conditional_16_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"span\", 9);\n    i0.ɵɵtemplate(1, MatListOption_Conditional_16_ng_template_1_Template, 0, 0, \"ng-template\", 6);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    i0.ɵɵnextContext();\n    const radio_r4 = i0.ɵɵreference(5);\n    i0.ɵɵadvance();\n    i0.ɵɵproperty(\"ngTemplateOutlet\", radio_r4);\n  }\n}\nfunction MatListOption_Conditional_17_ng_template_0_Template(rf, ctx) {}\nfunction MatListOption_Conditional_17_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵtemplate(0, MatListOption_Conditional_17_ng_template_0_Template, 0, 0, \"ng-template\", 6);\n  }\n  if (rf & 2) {\n    i0.ɵɵnextContext();\n    const icons_r5 = i0.ɵɵreference(1);\n    i0.ɵɵproperty(\"ngTemplateOutlet\", icons_r5);\n  }\n}\nexport { MatDivider } from './divider.mjs';\nimport { FocusKeyManager } from '@angular/cdk/a11y';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { ENTER, SPACE, A, hasModifierKey } from '@angular/cdk/keycodes';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { takeUntil } from 'rxjs/operators';\nimport { MatPseudoCheckboxModule } from './pseudo-checkbox-module.mjs';\nimport { MatCommonModule } from './common-module.mjs';\nimport { MatRippleModule } from './ripple-module.mjs';\nimport '@angular/cdk/layout';\nimport './pseudo-checkbox.mjs';\nimport '@angular/cdk/bidi';\n\n/**\n * Injection token that can be used to reference instances of an `ListOption`. It serves\n * as alternative token to an actual implementation which could result in undesired\n * retention of the class or circular references breaking runtime execution.\n * @docs-private\n */\nconst LIST_OPTION = /*#__PURE__*/new InjectionToken('ListOption');\n\n/**\n * Directive capturing the title of a list item. A list item usually consists of a\n * title and optional secondary or tertiary lines.\n *\n * Text content for the title never wraps. There can only be a single title per list item.\n */\nlet MatListItemTitle = /*#__PURE__*/(() => {\n  class MatListItemTitle {\n    _elementRef = inject(ElementRef);\n    constructor() {}\n    static ɵfac = function MatListItemTitle_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatListItemTitle)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatListItemTitle,\n      selectors: [[\"\", \"matListItemTitle\", \"\"]],\n      hostAttrs: [1, \"mat-mdc-list-item-title\", \"mdc-list-item__primary-text\"]\n    });\n  }\n  return MatListItemTitle;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Directive capturing a line in a list item. A list item usually consists of a\n * title and optional secondary or tertiary lines.\n *\n * Text content inside a line never wraps. There can be at maximum two lines per list item.\n */\nlet MatListItemLine = /*#__PURE__*/(() => {\n  class MatListItemLine {\n    _elementRef = inject(ElementRef);\n    constructor() {}\n    static ɵfac = function MatListItemLine_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatListItemLine)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatListItemLine,\n      selectors: [[\"\", \"matListItemLine\", \"\"]],\n      hostAttrs: [1, \"mat-mdc-list-item-line\", \"mdc-list-item__secondary-text\"]\n    });\n  }\n  return MatListItemLine;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Directive matching an optional meta section for list items.\n *\n * List items can reserve space at the end of an item to display a control,\n * button or additional text content.\n */\nlet MatListItemMeta = /*#__PURE__*/(() => {\n  class MatListItemMeta {\n    static ɵfac = function MatListItemMeta_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatListItemMeta)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatListItemMeta,\n      selectors: [[\"\", \"matListItemMeta\", \"\"]],\n      hostAttrs: [1, \"mat-mdc-list-item-meta\", \"mdc-list-item__end\"]\n    });\n  }\n  return MatListItemMeta;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * @docs-private\n *\n * MDC uses the very intuitively named classes `.mdc-list-item__start` and `.mat-list-item__end` to\n * position content such as icons or checkboxes/radios that comes either before or after the text\n * content respectively. This directive detects the placement of the checkbox/radio and applies the\n * correct MDC class to position the icon/avatar on the opposite side.\n */\nlet _MatListItemGraphicBase = /*#__PURE__*/(() => {\n  class _MatListItemGraphicBase {\n    _listOption = inject(LIST_OPTION, {\n      optional: true\n    });\n    constructor() {}\n    _isAlignedAtStart() {\n      // By default, in all list items the graphic is aligned at start. In list options,\n      // the graphic is only aligned at start if the checkbox/radio is at the end.\n      return !this._listOption || this._listOption?._getTogglePosition() === 'after';\n    }\n    static ɵfac = function _MatListItemGraphicBase_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || _MatListItemGraphicBase)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: _MatListItemGraphicBase,\n      hostVars: 4,\n      hostBindings: function _MatListItemGraphicBase_HostBindings(rf, ctx) {\n        if (rf & 2) {\n          i0.ɵɵclassProp(\"mdc-list-item__start\", ctx._isAlignedAtStart())(\"mdc-list-item__end\", !ctx._isAlignedAtStart());\n        }\n      }\n    });\n  }\n  return _MatListItemGraphicBase;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Directive matching an optional avatar within a list item.\n *\n * List items can reserve space at the beginning of an item to display an avatar.\n */\nlet MatListItemAvatar = /*#__PURE__*/(() => {\n  class MatListItemAvatar extends _MatListItemGraphicBase {\n    static ɵfac = /* @__PURE__ */(() => {\n      let ɵMatListItemAvatar_BaseFactory;\n      return function MatListItemAvatar_Factory(__ngFactoryType__) {\n        return (ɵMatListItemAvatar_BaseFactory || (ɵMatListItemAvatar_BaseFactory = i0.ɵɵgetInheritedFactory(MatListItemAvatar)))(__ngFactoryType__ || MatListItemAvatar);\n      };\n    })();\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatListItemAvatar,\n      selectors: [[\"\", \"matListItemAvatar\", \"\"]],\n      hostAttrs: [1, \"mat-mdc-list-item-avatar\"],\n      features: [i0.ɵɵInheritDefinitionFeature]\n    });\n  }\n  return MatListItemAvatar;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Directive matching an optional icon within a list item.\n *\n * List items can reserve space at the beginning of an item to display an icon.\n */\nlet MatListItemIcon = /*#__PURE__*/(() => {\n  class MatListItemIcon extends _MatListItemGraphicBase {\n    static ɵfac = /* @__PURE__ */(() => {\n      let ɵMatListItemIcon_BaseFactory;\n      return function MatListItemIcon_Factory(__ngFactoryType__) {\n        return (ɵMatListItemIcon_BaseFactory || (ɵMatListItemIcon_BaseFactory = i0.ɵɵgetInheritedFactory(MatListItemIcon)))(__ngFactoryType__ || MatListItemIcon);\n      };\n    })();\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatListItemIcon,\n      selectors: [[\"\", \"matListItemIcon\", \"\"]],\n      hostAttrs: [1, \"mat-mdc-list-item-icon\"],\n      features: [i0.ɵɵInheritDefinitionFeature]\n    });\n  }\n  return MatListItemIcon;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Injection token that can be used to provide the default options for the list module. */\nconst MAT_LIST_CONFIG = /*#__PURE__*/new InjectionToken('MAT_LIST_CONFIG');\n\n/** @docs-private */\nlet MatListBase = /*#__PURE__*/(() => {\n  class MatListBase {\n    _isNonInteractive = true;\n    /** Whether ripples for all list items is disabled. */\n    get disableRipple() {\n      return this._disableRipple;\n    }\n    set disableRipple(value) {\n      this._disableRipple = coerceBooleanProperty(value);\n    }\n    _disableRipple = false;\n    /**\n     * Whether the entire list is disabled. When disabled, the list itself and each of its list items\n     * are disabled.\n     */\n    get disabled() {\n      return this._disabled();\n    }\n    set disabled(value) {\n      this._disabled.set(coerceBooleanProperty(value));\n    }\n    _disabled = signal(false, ...(ngDevMode ? [{\n      debugName: \"_disabled\"\n    }] : []));\n    _defaultOptions = inject(MAT_LIST_CONFIG, {\n      optional: true\n    });\n    static ɵfac = function MatListBase_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatListBase)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatListBase,\n      hostVars: 1,\n      hostBindings: function MatListBase_HostBindings(rf, ctx) {\n        if (rf & 2) {\n          i0.ɵɵattribute(\"aria-disabled\", ctx.disabled);\n        }\n      },\n      inputs: {\n        disableRipple: \"disableRipple\",\n        disabled: \"disabled\"\n      }\n    });\n  }\n  return MatListBase;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** @docs-private */\nlet MatListItemBase = /*#__PURE__*/(() => {\n  class MatListItemBase {\n    _elementRef = inject(ElementRef);\n    _ngZone = inject(NgZone);\n    _listBase = inject(MatListBase, {\n      optional: true\n    });\n    _platform = inject(Platform);\n    /** Host element for the list item. */\n    _hostElement;\n    /** indicate whether the host element is a button or not */\n    _isButtonElement;\n    /** Whether animations are disabled. */\n    _noopAnimations = _animationsDisabled();\n    _avatars;\n    _icons;\n    /**\n     * The number of lines this list item should reserve space for. If not specified,\n     * lines are inferred based on the projected content.\n     *\n     * Explicitly specifying the number of lines is useful if you want to acquire additional\n     * space and enable the wrapping of text. The unscoped text content of a list item will\n     * always be able to take up the remaining space of the item, unless it represents the title.\n     *\n     * A maximum of three lines is supported as per the Material Design specification.\n     */\n    set lines(lines) {\n      this._explicitLines = coerceNumberProperty(lines, null);\n      this._updateItemLines(false);\n    }\n    _explicitLines = null;\n    /** Whether ripples for list items are disabled. */\n    get disableRipple() {\n      return this.disabled || this._disableRipple || this._noopAnimations || !!this._listBase?.disableRipple;\n    }\n    set disableRipple(value) {\n      this._disableRipple = coerceBooleanProperty(value);\n    }\n    _disableRipple = false;\n    /** Whether the list-item is disabled. */\n    get disabled() {\n      return this._disabled() || !!this._listBase?.disabled;\n    }\n    set disabled(value) {\n      this._disabled.set(coerceBooleanProperty(value));\n    }\n    _disabled = signal(false, ...(ngDevMode ? [{\n      debugName: \"_disabled\"\n    }] : []));\n    _subscriptions = new Subscription();\n    _rippleRenderer = null;\n    /** Whether the list item has unscoped text content. */\n    _hasUnscopedTextContent = false;\n    /**\n     * Implemented as part of `RippleTarget`.\n     * @docs-private\n     */\n    rippleConfig;\n    /**\n     * Implemented as part of `RippleTarget`.\n     * @docs-private\n     */\n    get rippleDisabled() {\n      return this.disableRipple || !!this.rippleConfig.disabled;\n    }\n    constructor() {\n      inject(_CdkPrivateStyleLoader).load(_StructuralStylesLoader);\n      const globalRippleOptions = inject(MAT_RIPPLE_GLOBAL_OPTIONS, {\n        optional: true\n      });\n      this.rippleConfig = globalRippleOptions || {};\n      this._hostElement = this._elementRef.nativeElement;\n      this._isButtonElement = this._hostElement.nodeName.toLowerCase() === 'button';\n      if (this._listBase && !this._listBase._isNonInteractive) {\n        this._initInteractiveListItem();\n      }\n      // If no type attribute is specified for a host `<button>` element, set it to `button`. If a\n      // type attribute is already specified, we do nothing. We do this for backwards compatibility.\n      // TODO: Determine if we intend to continue doing this for the MDC-based list.\n      if (this._isButtonElement && !this._hostElement.hasAttribute('type')) {\n        this._hostElement.setAttribute('type', 'button');\n      }\n    }\n    ngAfterViewInit() {\n      this._monitorProjectedLinesAndTitle();\n      this._updateItemLines(true);\n    }\n    ngOnDestroy() {\n      this._subscriptions.unsubscribe();\n      if (this._rippleRenderer !== null) {\n        this._rippleRenderer._removeTriggerEvents();\n      }\n    }\n    /** Whether the list item has icons or avatars. */\n    _hasIconOrAvatar() {\n      return !!(this._avatars.length || this._icons.length);\n    }\n    _initInteractiveListItem() {\n      this._hostElement.classList.add('mat-mdc-list-item-interactive');\n      this._rippleRenderer = new RippleRenderer(this, this._ngZone, this._hostElement, this._platform, inject(Injector));\n      this._rippleRenderer.setupTriggerEvents(this._hostElement);\n    }\n    /**\n     * Subscribes to changes in the projected title and lines. Triggers a\n     * item lines update whenever a change occurs.\n     */\n    _monitorProjectedLinesAndTitle() {\n      this._ngZone.runOutsideAngular(() => {\n        this._subscriptions.add(merge(this._lines.changes, this._titles.changes).subscribe(() => this._updateItemLines(false)));\n      });\n    }\n    /**\n     * Updates the lines of the list item. Based on the projected user content and optional\n     * explicit lines setting, the visual appearance of the list item is determined.\n     *\n     * This method should be invoked whenever the projected user content changes, or\n     * when the explicit lines have been updated.\n     *\n     * @param recheckUnscopedContent Whether the projected unscoped content should be re-checked.\n     *   The unscoped content is not re-checked for every update as it is a rather expensive check\n     *   for content that is expected to not change very often.\n     */\n    _updateItemLines(recheckUnscopedContent) {\n      // If the updated is triggered too early before the view and content is initialized,\n      // we just skip the update. After view initialization the update is triggered again.\n      if (!this._lines || !this._titles || !this._unscopedContent) {\n        return;\n      }\n      // Re-check the DOM for unscoped text content if requested. This needs to\n      // happen before any computation or sanity checks run as these rely on the\n      // result of whether there is unscoped text content or not.\n      if (recheckUnscopedContent) {\n        this._checkDomForUnscopedTextContent();\n      }\n      // Sanity check the list item lines and title in the content. This is a dev-mode only\n      // check that can be dead-code eliminated by Terser in production.\n      if (typeof ngDevMode === 'undefined' || ngDevMode) {\n        sanityCheckListItemContent(this);\n      }\n      const numberOfLines = this._explicitLines ?? this._inferLinesFromContent();\n      const unscopedContentEl = this._unscopedContent.nativeElement;\n      // Update the list item element to reflect the number of lines.\n      this._hostElement.classList.toggle('mat-mdc-list-item-single-line', numberOfLines <= 1);\n      this._hostElement.classList.toggle('mdc-list-item--with-one-line', numberOfLines <= 1);\n      this._hostElement.classList.toggle('mdc-list-item--with-two-lines', numberOfLines === 2);\n      this._hostElement.classList.toggle('mdc-list-item--with-three-lines', numberOfLines === 3);\n      // If there is no title and the unscoped content is the is the only line, the\n      // unscoped text content will be treated as the title of the list-item.\n      if (this._hasUnscopedTextContent) {\n        const treatAsTitle = this._titles.length === 0 && numberOfLines === 1;\n        unscopedContentEl.classList.toggle('mdc-list-item__primary-text', treatAsTitle);\n        unscopedContentEl.classList.toggle('mdc-list-item__secondary-text', !treatAsTitle);\n      } else {\n        unscopedContentEl.classList.remove('mdc-list-item__primary-text');\n        unscopedContentEl.classList.remove('mdc-list-item__secondary-text');\n      }\n    }\n    /**\n     * Infers the number of lines based on the projected user content. This is useful\n     * if no explicit number of lines has been specified on the list item.\n     *\n     * The number of lines is inferred based on whether there is a title, the number of\n     * additional lines (secondary/tertiary). An additional line is acquired if there is\n     * unscoped text content.\n     */\n    _inferLinesFromContent() {\n      let numOfLines = this._titles.length + this._lines.length;\n      if (this._hasUnscopedTextContent) {\n        numOfLines += 1;\n      }\n      return numOfLines;\n    }\n    /** Checks whether the list item has unscoped text content. */\n    _checkDomForUnscopedTextContent() {\n      this._hasUnscopedTextContent = Array.from(this._unscopedContent.nativeElement.childNodes).filter(node => node.nodeType !== node.COMMENT_NODE).some(node => !!(node.textContent && node.textContent.trim()));\n    }\n    static ɵfac = function MatListItemBase_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatListItemBase)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatListItemBase,\n      contentQueries: function MatListItemBase_ContentQueries(rf, ctx, dirIndex) {\n        if (rf & 1) {\n          i0.ɵɵcontentQuery(dirIndex, MatListItemAvatar, 4);\n          i0.ɵɵcontentQuery(dirIndex, MatListItemIcon, 4);\n        }\n        if (rf & 2) {\n          let _t;\n          i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._avatars = _t);\n          i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._icons = _t);\n        }\n      },\n      hostVars: 4,\n      hostBindings: function MatListItemBase_HostBindings(rf, ctx) {\n        if (rf & 2) {\n          i0.ɵɵattribute(\"aria-disabled\", ctx.disabled)(\"disabled\", ctx._isButtonElement && ctx.disabled || null);\n          i0.ɵɵclassProp(\"mdc-list-item--disabled\", ctx.disabled);\n        }\n      },\n      inputs: {\n        lines: \"lines\",\n        disableRipple: \"disableRipple\",\n        disabled: \"disabled\"\n      }\n    });\n  }\n  return MatListItemBase;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Sanity checks the configuration of the list item with respect to the amount\n * of lines, whether there is a title, or if there is unscoped text content.\n *\n * The checks are extracted into a top-level function that can be dead-code\n * eliminated by Terser or other optimizers in production mode.\n */\nfunction sanityCheckListItemContent(item) {\n  const numTitles = item._titles.length;\n  const numLines = item._lines.length;\n  if (numTitles > 1) {\n    console.warn('A list item cannot have multiple titles.');\n  }\n  if (numTitles === 0 && numLines > 0) {\n    console.warn('A list item line can only be used if there is a list item title.');\n  }\n  if (numTitles === 0 && item._hasUnscopedTextContent && item._explicitLines !== null && item._explicitLines > 1) {\n    console.warn('A list item cannot have wrapping content without a title.');\n  }\n  if (numLines > 2 || numLines === 2 && item._hasUnscopedTextContent) {\n    console.warn('A list item can have at maximum three lines.');\n  }\n}\nlet MatActionList = /*#__PURE__*/(() => {\n  class MatActionList extends MatListBase {\n    // An navigation list is considered interactive, but does not extend the interactive list\n    // base class. We do this because as per MDC, items of interactive lists are only reachable\n    // through keyboard shortcuts. We want all items for the navigation list to be reachable\n    // through tab key as we do not intend to provide any special accessibility treatment. The\n    // accessibility treatment depends on how the end-user will interact with it.\n    _isNonInteractive = false;\n    static ɵfac = /* @__PURE__ */(() => {\n      let ɵMatActionList_BaseFactory;\n      return function MatActionList_Factory(__ngFactoryType__) {\n        return (ɵMatActionList_BaseFactory || (ɵMatActionList_BaseFactory = i0.ɵɵgetInheritedFactory(MatActionList)))(__ngFactoryType__ || MatActionList);\n      };\n    })();\n    static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n      type: MatActionList,\n      selectors: [[\"mat-action-list\"]],\n      hostAttrs: [\"role\", \"group\", 1, \"mat-mdc-action-list\", \"mat-mdc-list-base\", \"mdc-list\"],\n      exportAs: [\"matActionList\"],\n      features: [i0.ɵɵProvidersFeature([{\n        provide: MatListBase,\n        useExisting: MatActionList\n      }]), i0.ɵɵInheritDefinitionFeature],\n      ngContentSelectors: _c0,\n      decls: 1,\n      vars: 0,\n      template: function MatActionList_Template(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵprojectionDef();\n          i0.ɵɵprojection(0);\n        }\n      },\n      styles: [\".mdc-list{margin:0;padding:8px 0;list-style-type:none}.mdc-list:focus{outline:none}.mdc-list-item{display:flex;position:relative;justify-content:flex-start;overflow:hidden;padding:0;align-items:stretch;cursor:pointer;padding-left:16px;padding-right:16px;background-color:var(--mat-list-list-item-container-color, transparent);border-radius:var(--mat-list-list-item-container-shape, var(--mat-sys-corner-none))}.mdc-list-item.mdc-list-item--selected{background-color:var(--mat-list-list-item-selected-container-color)}.mdc-list-item:focus{outline:0}.mdc-list-item.mdc-list-item--disabled{cursor:auto}.mdc-list-item.mdc-list-item--with-one-line{height:var(--mat-list-list-item-one-line-container-height, 48px)}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__start{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-one-line .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-two-lines{height:var(--mat-list-list-item-two-line-container-height, 64px)}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-two-lines .mdc-list-item__end{align-self:center;margin-top:0}.mdc-list-item.mdc-list-item--with-three-lines{height:var(--mat-list-list-item-three-line-container-height, 88px)}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__start{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:16px}.mdc-list-item.mdc-list-item--selected::before,.mdc-list-item.mdc-list-item--selected:focus::before,.mdc-list-item:not(.mdc-list-item--selected):focus::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;content:\\\"\\\";pointer-events:none}a.mdc-list-item{color:inherit;text-decoration:none}.mdc-list-item__start{fill:currentColor;flex-shrink:0;pointer-events:none}.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-leading-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-leading-icon-size, 24px);height:var(--mat-list-list-item-leading-icon-size, 24px);margin-left:16px;margin-right:32px}[dir=rtl] .mdc-list-item--with-leading-icon .mdc-list-item__start{margin-left:32px;margin-right:16px}.mdc-list-item--with-leading-icon:hover .mdc-list-item__start{color:var(--mat-list-list-item-hover-leading-icon-color)}.mdc-list-item--with-leading-avatar .mdc-list-item__start{width:var(--mat-list-list-item-leading-avatar-size, 40px);height:var(--mat-list-list-item-leading-avatar-size, 40px);margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item--with-leading-avatar .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-avatar .mdc-list-item__start{margin-left:16px;margin-right:16px;border-radius:50%}.mdc-list-item__end{flex-shrink:0;pointer-events:none}.mdc-list-item--with-trailing-meta .mdc-list-item__end{font-family:var(--mat-list-list-item-trailing-supporting-text-font, var(--mat-sys-label-small-font));line-height:var(--mat-list-list-item-trailing-supporting-text-line-height, var(--mat-sys-label-small-line-height));font-size:var(--mat-list-list-item-trailing-supporting-text-size, var(--mat-sys-label-small-size));font-weight:var(--mat-list-list-item-trailing-supporting-text-weight, var(--mat-sys-label-small-weight));letter-spacing:var(--mat-list-list-item-trailing-supporting-text-tracking, var(--mat-sys-label-small-tracking))}.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-trailing-icon-color, var(--mat-sys-on-surface-variant));width:var(--mat-list-list-item-trailing-icon-size, 24px);height:var(--mat-list-list-item-trailing-icon-size, 24px)}.mdc-list-item--with-trailing-icon:hover .mdc-list-item__end{color:var(--mat-list-list-item-hover-trailing-icon-color)}.mdc-list-item.mdc-list-item--with-trailing-meta .mdc-list-item__end{color:var(--mat-list-list-item-trailing-supporting-text-color, var(--mat-sys-on-surface-variant))}.mdc-list-item--selected.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-selected-trailing-icon-color, var(--mat-sys-primary))}.mdc-list-item__content{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;align-self:center;flex:1;pointer-events:none}.mdc-list-item--with-two-lines .mdc-list-item__content,.mdc-list-item--with-three-lines .mdc-list-item__content{align-self:stretch}.mdc-list-item__primary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:var(--mat-list-list-item-label-text-color, var(--mat-sys-on-surface));font-family:var(--mat-list-list-item-label-text-font, var(--mat-sys-body-large-font));line-height:var(--mat-list-list-item-label-text-line-height, var(--mat-sys-body-large-line-height));font-size:var(--mat-list-list-item-label-text-size, var(--mat-sys-body-large-size));font-weight:var(--mat-list-list-item-label-text-weight, var(--mat-sys-body-large-weight));letter-spacing:var(--mat-list-list-item-label-text-tracking, var(--mat-sys-body-large-tracking))}.mdc-list-item:hover .mdc-list-item__primary-text{color:var(--mat-list-list-item-hover-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:focus .mdc-list-item__primary-text{color:var(--mat-list-list-item-focus-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-three-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-three-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item__secondary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;color:var(--mat-list-list-item-supporting-text-color, var(--mat-sys-on-surface-variant));font-family:var(--mat-list-list-item-supporting-text-font, var(--mat-sys-body-medium-font));line-height:var(--mat-list-list-item-supporting-text-line-height, var(--mat-sys-body-medium-line-height));font-size:var(--mat-list-list-item-supporting-text-size, var(--mat-sys-body-medium-size));font-weight:var(--mat-list-list-item-supporting-text-weight, var(--mat-sys-body-medium-weight));letter-spacing:var(--mat-list-list-item-supporting-text-tracking, var(--mat-sys-body-medium-tracking))}.mdc-list-item__secondary-text::before{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-three-lines .mdc-list-item__secondary-text{white-space:normal;line-height:20px}.mdc-list-item--with-overline .mdc-list-item__secondary-text{white-space:nowrap;line-height:auto}.mdc-list-item--with-leading-radio.mdc-list-item,.mdc-list-item--with-leading-checkbox.mdc-list-item,.mdc-list-item--with-leading-icon.mdc-list-item,.mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:0;padding-right:16px}[dir=rtl] .mdc-list-item--with-leading-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-checkbox.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-leading-avatar.mdc-list-item{padding-left:16px;padding-right:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-icon.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before,.mdc-list-item--with-leading-avatar.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-trailing-icon.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-icon.mdc-list-item{padding-left:0;padding-right:0}.mdc-list-item--with-trailing-icon .mdc-list-item__end{margin-left:16px;margin-right:16px}.mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-meta.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-meta .mdc-list-item__end{-webkit-user-select:none;user-select:none;margin-left:28px;margin-right:16px}[dir=rtl] .mdc-list-item--with-trailing-meta .mdc-list-item__end{margin-left:16px;margin-right:28px}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end{display:block;line-height:normal;align-self:flex-start;margin-top:0}.mdc-list-item--with-trailing-meta.mdc-list-item--with-three-lines .mdc-list-item__end::before,.mdc-list-item--with-trailing-meta.mdc-list-item--with-two-lines .mdc-list-item__end::before{display:inline-block;width:0;height:28px;content:\\\"\\\";vertical-align:0}.mdc-list-item--with-leading-radio .mdc-list-item__start,.mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:8px;margin-right:24px}[dir=rtl] .mdc-list-item--with-leading-radio .mdc-list-item__start,[dir=rtl] .mdc-list-item--with-leading-checkbox .mdc-list-item__start{margin-left:24px;margin-right:8px}.mdc-list-item--with-leading-radio.mdc-list-item--with-two-lines .mdc-list-item__start,.mdc-list-item--with-leading-checkbox.mdc-list-item--with-two-lines .mdc-list-item__start{align-self:flex-start;margin-top:8px}.mdc-list-item--with-trailing-radio.mdc-list-item,.mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:16px;padding-right:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item{padding-left:0;padding-right:16px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-left:0}[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-radio.mdc-list-item--with-leading-avatar,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-icon,[dir=rtl] .mdc-list-item--with-trailing-checkbox.mdc-list-item--with-leading-avatar{padding-right:0}.mdc-list-item--with-trailing-radio .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:24px;margin-right:8px}[dir=rtl] .mdc-list-item--with-trailing-radio .mdc-list-item__end,[dir=rtl] .mdc-list-item--with-trailing-checkbox .mdc-list-item__end{margin-left:8px;margin-right:24px}.mdc-list-item--with-trailing-radio.mdc-list-item--with-three-lines .mdc-list-item__end,.mdc-list-item--with-trailing-checkbox.mdc-list-item--with-three-lines .mdc-list-item__end{align-self:flex-start;margin-top:8px}.mdc-list-group__subheader{margin:.75rem 16px}.mdc-list-item--disabled .mdc-list-item__start,.mdc-list-item--disabled .mdc-list-item__content,.mdc-list-item--disabled .mdc-list-item__end{opacity:1}.mdc-list-item--disabled .mdc-list-item__primary-text,.mdc-list-item--disabled .mdc-list-item__secondary-text{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--disabled.mdc-list-item--with-leading-icon .mdc-list-item__start{color:var(--mat-list-list-item-disabled-leading-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-leading-icon-opacity, 0.38)}.mdc-list-item--disabled.mdc-list-item--with-trailing-icon .mdc-list-item__end{color:var(--mat-list-list-item-disabled-trailing-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-trailing-icon-opacity, 0.38)}.mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing,[dir=rtl] .mat-mdc-list-item.mat-mdc-list-item-both-leading-and-trailing{padding-left:0;padding-right:0}.mdc-list-item.mdc-list-item--disabled .mdc-list-item__primary-text{color:var(--mat-list-list-item-disabled-label-text-color, var(--mat-sys-on-surface))}.mdc-list-item:hover::before{background-color:var(--mat-list-list-item-hover-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-hover-state-layer-opacity, var(--mat-sys-hover-state-layer-opacity))}.mdc-list-item.mdc-list-item--disabled::before{background-color:var(--mat-list-list-item-disabled-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-disabled-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item:focus::before{background-color:var(--mat-list-list-item-focus-state-layer-color, var(--mat-sys-on-surface));opacity:var(--mat-list-list-item-focus-state-layer-opacity, var(--mat-sys-focus-state-layer-opacity))}.mdc-list-item--disabled .mdc-radio,.mdc-list-item--disabled .mdc-checkbox{opacity:var(--mat-list-list-item-disabled-label-text-opacity, 0.3)}.mdc-list-item--with-leading-avatar .mat-mdc-list-item-avatar{border-radius:var(--mat-list-list-item-leading-avatar-shape, var(--mat-sys-corner-full));background-color:var(--mat-list-list-item-leading-avatar-color, var(--mat-sys-primary-container))}.mat-mdc-list-item-icon{font-size:var(--mat-list-list-item-leading-icon-size, 24px)}@media(forced-colors: active){a.mdc-list-item--activated::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}a.mdc-list-item--activated [dir=rtl]::after{right:auto;left:16px}}.mat-mdc-list-base{display:block}.mat-mdc-list-base .mdc-list-item__start,.mat-mdc-list-base .mdc-list-item__end,.mat-mdc-list-base .mdc-list-item__content{pointer-events:auto}.mat-mdc-list-item,.mat-mdc-list-option{width:100%;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.mat-mdc-list-item:not(.mat-mdc-list-item-interactive),.mat-mdc-list-option:not(.mat-mdc-list-item-interactive){cursor:default}.mat-mdc-list-item .mat-divider-inset,.mat-mdc-list-option .mat-divider-inset{position:absolute;left:0;right:0;bottom:0}.mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,.mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-left:72px}[dir=rtl] .mat-mdc-list-item .mat-mdc-list-item-avatar~.mat-divider-inset,[dir=rtl] .mat-mdc-list-option .mat-mdc-list-item-avatar~.mat-divider-inset{margin-right:72px}.mat-mdc-list-item-interactive::before{top:0;left:0;right:0;bottom:0;position:absolute;content:\\\"\\\";opacity:0;pointer-events:none;border-radius:inherit}.mat-mdc-list-item>.mat-focus-indicator{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none}.mat-mdc-list-item:focus>.mat-focus-indicator::before{content:\\\"\\\"}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-line.mdc-list-item__secondary-text{white-space:nowrap;line-height:normal}.mat-mdc-list-item.mdc-list-item--with-three-lines .mat-mdc-list-item-unscoped-content.mdc-list-item__secondary-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}mat-action-list button{background:none;color:inherit;border:none;font:inherit;outline:inherit;-webkit-tap-highlight-color:rgba(0,0,0,0);text-align:start}mat-action-list button::-moz-focus-inner{border:0}.mdc-list-item--with-leading-icon .mdc-list-item__start{margin-inline-start:var(--mat-list-list-item-leading-icon-start-space, 16px);margin-inline-end:var(--mat-list-list-item-leading-icon-end-space, 16px)}.mat-mdc-nav-list .mat-mdc-list-item{border-radius:var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full));--mat-focus-indicator-border-radius: var(--mat-list-active-indicator-shape, var(--mat-sys-corner-full))}.mat-mdc-nav-list .mat-mdc-list-item.mdc-list-item--activated{background-color:var(--mat-list-active-indicator-color, var(--mat-sys-secondary-container))}\\n\"],\n      encapsulation: 2,\n      changeDetection: 0\n    });\n  }\n  return MatActionList;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Injection token that can be used to inject instances of `MatList`. It serves as\n * alternative token to the actual `MatList` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nconst MAT_LIST = /*#__PURE__*/new InjectionToken('MatList');\nlet MatList = /*#__PURE__*/(() => {\n  class MatList extends MatListBase {\n    static ɵfac = /* @__PURE__ */(() => {\n      let ɵMatList_BaseFactory;\n      return function MatList_Factory(__ngFactoryType__) {\n        return (ɵMatList_BaseFactory || (ɵMatList_BaseFactory = i0.ɵɵgetInheritedFactory(MatList)))(__ngFactoryType__ || MatList);\n      };\n    })();\n    static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n      type: MatList,\n      selectors: [[\"mat-list\"]],\n      hostAttrs: [1, \"mat-mdc-list\", \"mat-mdc-list-base\", \"mdc-list\"],\n      exportAs: [\"matList\"],\n      features: [i0.ɵɵProvidersFeature([{\n        provide: MatListBase,\n        useExisting: MatList\n      }]), i0.ɵɵInheritDefinitionFeature],\n      ngContentSelectors: _c0,\n      decls: 1,\n      vars: 0,\n      template: function MatList_Template(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵprojectionDef();\n          i0.ɵɵprojection(0);\n        }\n      },\n      styles: [_c1],\n      encapsulation: 2,\n      changeDetection: 0\n    });\n  }\n  return MatList;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatListItem = /*#__PURE__*/(() => {\n  class MatListItem extends MatListItemBase {\n    _lines;\n    _titles;\n    _meta;\n    _unscopedContent;\n    _itemText;\n    /** Indicates whether an item in a `<mat-nav-list>` is the currently active page. */\n    get activated() {\n      return this._activated;\n    }\n    set activated(activated) {\n      this._activated = coerceBooleanProperty(activated);\n    }\n    _activated = false;\n    /**\n     * Determine the value of `aria-current`. Return 'page' if this item is an activated anchor tag.\n     * Otherwise, return `null`. This method is safe to use with server-side rendering.\n     */\n    _getAriaCurrent() {\n      return this._hostElement.nodeName === 'A' && this._activated ? 'page' : null;\n    }\n    _hasBothLeadingAndTrailing() {\n      return this._meta.length !== 0 && (this._avatars.length !== 0 || this._icons.length !== 0);\n    }\n    static ɵfac = /* @__PURE__ */(() => {\n      let ɵMatListItem_BaseFactory;\n      return function MatListItem_Factory(__ngFactoryType__) {\n        return (ɵMatListItem_BaseFactory || (ɵMatListItem_BaseFactory = i0.ɵɵgetInheritedFactory(MatListItem)))(__ngFactoryType__ || MatListItem);\n      };\n    })();\n    static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n      type: MatListItem,\n      selectors: [[\"mat-list-item\"], [\"a\", \"mat-list-item\", \"\"], [\"button\", \"mat-list-item\", \"\"]],\n      contentQueries: function MatListItem_ContentQueries(rf, ctx, dirIndex) {\n        if (rf & 1) {\n          i0.ɵɵcontentQuery(dirIndex, MatListItemLine, 5);\n          i0.ɵɵcontentQuery(dirIndex, MatListItemTitle, 5);\n          i0.ɵɵcontentQuery(dirIndex, MatListItemMeta, 5);\n        }\n        if (rf & 2) {\n          let _t;\n          i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._lines = _t);\n          i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._titles = _t);\n          i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._meta = _t);\n        }\n      },\n      viewQuery: function MatListItem_Query(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵviewQuery(_c2, 5);\n          i0.ɵɵviewQuery(_c3, 5);\n        }\n        if (rf & 2) {\n          let _t;\n          i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._unscopedContent = _t.first);\n          i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._itemText = _t.first);\n        }\n      },\n      hostAttrs: [1, \"mat-mdc-list-item\", \"mdc-list-item\"],\n      hostVars: 13,\n      hostBindings: function MatListItem_HostBindings(rf, ctx) {\n        if (rf & 2) {\n          i0.ɵɵattribute(\"aria-current\", ctx._getAriaCurrent());\n          i0.ɵɵclassProp(\"mdc-list-item--activated\", ctx.activated)(\"mdc-list-item--with-leading-avatar\", ctx._avatars.length !== 0)(\"mdc-list-item--with-leading-icon\", ctx._icons.length !== 0)(\"mdc-list-item--with-trailing-meta\", ctx._meta.length !== 0)(\"mat-mdc-list-item-both-leading-and-trailing\", ctx._hasBothLeadingAndTrailing())(\"_mat-animation-noopable\", ctx._noopAnimations);\n        }\n      },\n      inputs: {\n        activated: \"activated\"\n      },\n      exportAs: [\"matListItem\"],\n      features: [i0.ɵɵInheritDefinitionFeature],\n      ngContentSelectors: _c5,\n      decls: 10,\n      vars: 0,\n      consts: [[\"unscopedContent\", \"\"], [1, \"mdc-list-item__content\"], [1, \"mat-mdc-list-item-unscoped-content\", 3, \"cdkObserveContent\"], [1, \"mat-focus-indicator\"]],\n      template: function MatListItem_Template(rf, ctx) {\n        if (rf & 1) {\n          const _r1 = i0.ɵɵgetCurrentView();\n          i0.ɵɵprojectionDef(_c4);\n          i0.ɵɵprojection(0);\n          i0.ɵɵelementStart(1, \"span\", 1);\n          i0.ɵɵprojection(2, 1);\n          i0.ɵɵprojection(3, 2);\n          i0.ɵɵelementStart(4, \"span\", 2, 0);\n          i0.ɵɵlistener(\"cdkObserveContent\", function MatListItem_Template_span_cdkObserveContent_4_listener() {\n            i0.ɵɵrestoreView(_r1);\n            return i0.ɵɵresetView(ctx._updateItemLines(true));\n          });\n          i0.ɵɵprojection(6, 3);\n          i0.ɵɵelementEnd()();\n          i0.ɵɵprojection(7, 4);\n          i0.ɵɵprojection(8, 5);\n          i0.ɵɵelement(9, \"div\", 3);\n        }\n      },\n      dependencies: [CdkObserveContent],\n      encapsulation: 2,\n      changeDetection: 0\n    });\n  }\n  return MatListItem;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Injection token that can be used to reference instances of an `SelectionList`. It serves\n * as alternative token to an actual implementation which would result in circular references.\n * @docs-private\n */\nconst SELECTION_LIST = /*#__PURE__*/new InjectionToken('SelectionList');\nlet MatListOption = /*#__PURE__*/(() => {\n  class MatListOption extends MatListItemBase {\n    _selectionList = inject(SELECTION_LIST);\n    _changeDetectorRef = inject(ChangeDetectorRef);\n    _lines;\n    _titles;\n    _unscopedContent;\n    /**\n     * Emits when the selected state of the option has changed.\n     * Use to facilitate two-data binding to the `selected` property.\n     * @docs-private\n     */\n    selectedChange = new EventEmitter();\n    /** Whether the label should appear before or after the checkbox/radio. Defaults to 'after' */\n    togglePosition = 'after';\n    /**\n     * Whether the label should appear before or after the checkbox/radio. Defaults to 'after'\n     *\n     * @deprecated Use `togglePosition` instead.\n     * @breaking-change 17.0.0\n     */\n    get checkboxPosition() {\n      return this.togglePosition;\n    }\n    set checkboxPosition(value) {\n      this.togglePosition = value;\n    }\n    /**\n     * Theme color of the list option. This sets the color of the checkbox/radio.\n     * This API is supported in M2 themes only, it has no effect in M3 themes. For color customization\n     * in M3, see https://material.angular.dev/components/list/styling.\n     *\n     * For information on applying color variants in M3, see\n     * https://material.angular.dev/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants\n     */\n    get color() {\n      return this._color || this._selectionList.color;\n    }\n    set color(newValue) {\n      this._color = newValue;\n    }\n    _color;\n    /** Value of the option */\n    get value() {\n      return this._value;\n    }\n    set value(newValue) {\n      if (this.selected && newValue !== this.value && this._inputsInitialized) {\n        this.selected = false;\n      }\n      this._value = newValue;\n    }\n    _value;\n    /** Whether the option is selected. */\n    get selected() {\n      return this._selectionList.selectedOptions.isSelected(this);\n    }\n    set selected(value) {\n      const isSelected = coerceBooleanProperty(value);\n      if (isSelected !== this._selected) {\n        this._setSelected(isSelected);\n        if (isSelected || this._selectionList.multiple) {\n          this._selectionList._reportValueChange();\n        }\n      }\n    }\n    _selected = false;\n    /**\n     * This is set to true after the first OnChanges cycle so we don't\n     * clear the value of `selected` in the first cycle.\n     */\n    _inputsInitialized = false;\n    ngOnInit() {\n      const list = this._selectionList;\n      if (list._value && list._value.some(value => list.compareWith(this._value, value))) {\n        this._setSelected(true);\n      }\n      const wasSelected = this._selected;\n      // List options that are selected at initialization can't be reported properly to the form\n      // control. This is because it takes some time until the selection-list knows about all\n      // available options. Also it can happen that the ControlValueAccessor has an initial value\n      // that should be used instead. Deferring the value change report to the next tick ensures\n      // that the form control value is not being overwritten.\n      Promise.resolve().then(() => {\n        if (this._selected || wasSelected) {\n          this.selected = true;\n          this._changeDetectorRef.markForCheck();\n        }\n      });\n      this._inputsInitialized = true;\n    }\n    ngOnDestroy() {\n      super.ngOnDestroy();\n      if (this.selected) {\n        // We have to delay this until the next tick in order\n        // to avoid changed after checked errors.\n        Promise.resolve().then(() => {\n          this.selected = false;\n        });\n      }\n    }\n    /** Toggles the selection state of the option. */\n    toggle() {\n      this.selected = !this.selected;\n    }\n    /** Allows for programmatic focusing of the option. */\n    focus() {\n      this._hostElement.focus();\n    }\n    /** Gets the text label of the list option. Used for the typeahead functionality in the list. */\n    getLabel() {\n      const titleElement = this._titles?.get(0)?._elementRef.nativeElement;\n      // If there is no explicit title element, the unscoped text content\n      // is treated as the list item title.\n      const labelEl = titleElement || this._unscopedContent?.nativeElement;\n      return labelEl?.textContent || '';\n    }\n    /** Whether a checkbox is shown at the given position. */\n    _hasCheckboxAt(position) {\n      return this._selectionList.multiple && this._getTogglePosition() === position;\n    }\n    /** Where a radio indicator is shown at the given position. */\n    _hasRadioAt(position) {\n      return !this._selectionList.multiple && this._getTogglePosition() === position && !this._selectionList.hideSingleSelectionIndicator;\n    }\n    /** Whether icons or avatars are shown at the given position. */\n    _hasIconsOrAvatarsAt(position) {\n      return this._hasProjected('icons', position) || this._hasProjected('avatars', position);\n    }\n    /** Gets whether the given type of element is projected at the specified position. */\n    _hasProjected(type, position) {\n      // If the checkbox/radio is shown at the specified position, neither icons or\n      // avatars can be shown at the position.\n      return this._getTogglePosition() !== position && (type === 'avatars' ? this._avatars.length !== 0 : this._icons.length !== 0);\n    }\n    _handleBlur() {\n      this._selectionList._onTouched();\n    }\n    /** Gets the current position of the checkbox/radio. */\n    _getTogglePosition() {\n      return this.togglePosition || 'after';\n    }\n    /**\n     * Sets the selected state of the option.\n     * @returns Whether the value has changed.\n     */\n    _setSelected(selected) {\n      if (selected === this._selected) {\n        return false;\n      }\n      this._selected = selected;\n      if (selected) {\n        this._selectionList.selectedOptions.select(this);\n      } else {\n        this._selectionList.selectedOptions.deselect(this);\n      }\n      this.selectedChange.emit(selected);\n      this._changeDetectorRef.markForCheck();\n      return true;\n    }\n    /**\n     * Notifies Angular that the option needs to be checked in the next change detection run.\n     * Mainly used to trigger an update of the list option if the disabled state of the selection\n     * list changed.\n     */\n    _markForCheck() {\n      this._changeDetectorRef.markForCheck();\n    }\n    /** Toggles the option's value based on a user interaction. */\n    _toggleOnInteraction() {\n      if (!this.disabled) {\n        if (this._selectionList.multiple) {\n          this.selected = !this.selected;\n          this._selectionList._emitChangeEvent([this]);\n        } else if (!this.selected) {\n          this.selected = true;\n          this._selectionList._emitChangeEvent([this]);\n        }\n      }\n    }\n    /** Sets the tabindex of the list option. */\n    _setTabindex(value) {\n      this._hostElement.setAttribute('tabindex', value + '');\n    }\n    _hasBothLeadingAndTrailing() {\n      const hasLeading = this._hasProjected('avatars', 'before') || this._hasProjected('icons', 'before') || this._hasCheckboxAt('before') || this._hasRadioAt('before');\n      const hasTrailing = this._hasProjected('icons', 'after') || this._hasProjected('avatars', 'after') || this._hasCheckboxAt('after') || this._hasRadioAt('after');\n      return hasLeading && hasTrailing;\n    }\n    static ɵfac = /* @__PURE__ */(() => {\n      let ɵMatListOption_BaseFactory;\n      return function MatListOption_Factory(__ngFactoryType__) {\n        return (ɵMatListOption_BaseFactory || (ɵMatListOption_BaseFactory = i0.ɵɵgetInheritedFactory(MatListOption)))(__ngFactoryType__ || MatListOption);\n      };\n    })();\n    static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n      type: MatListOption,\n      selectors: [[\"mat-list-option\"]],\n      contentQueries: function MatListOption_ContentQueries(rf, ctx, dirIndex) {\n        if (rf & 1) {\n          i0.ɵɵcontentQuery(dirIndex, MatListItemLine, 5);\n          i0.ɵɵcontentQuery(dirIndex, MatListItemTitle, 5);\n        }\n        if (rf & 2) {\n          let _t;\n          i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._lines = _t);\n          i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._titles = _t);\n        }\n      },\n      viewQuery: function MatListOption_Query(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵviewQuery(_c2, 5);\n        }\n        if (rf & 2) {\n          let _t;\n          i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._unscopedContent = _t.first);\n        }\n      },\n      hostAttrs: [\"role\", \"option\", 1, \"mat-mdc-list-item\", \"mat-mdc-list-option\", \"mdc-list-item\"],\n      hostVars: 27,\n      hostBindings: function MatListOption_HostBindings(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵlistener(\"blur\", function MatListOption_blur_HostBindingHandler() {\n            return ctx._handleBlur();\n          })(\"click\", function MatListOption_click_HostBindingHandler() {\n            return ctx._toggleOnInteraction();\n          });\n        }\n        if (rf & 2) {\n          i0.ɵɵattribute(\"aria-selected\", ctx.selected);\n          i0.ɵɵclassProp(\"mdc-list-item--selected\", ctx.selected && !ctx._selectionList.multiple && ctx._selectionList.hideSingleSelectionIndicator)(\"mdc-list-item--with-leading-avatar\", ctx._hasProjected(\"avatars\", \"before\"))(\"mdc-list-item--with-leading-icon\", ctx._hasProjected(\"icons\", \"before\"))(\"mdc-list-item--with-trailing-icon\", ctx._hasProjected(\"icons\", \"after\"))(\"mat-mdc-list-option-with-trailing-avatar\", ctx._hasProjected(\"avatars\", \"after\"))(\"mdc-list-item--with-leading-checkbox\", ctx._hasCheckboxAt(\"before\"))(\"mdc-list-item--with-trailing-checkbox\", ctx._hasCheckboxAt(\"after\"))(\"mdc-list-item--with-leading-radio\", ctx._hasRadioAt(\"before\"))(\"mdc-list-item--with-trailing-radio\", ctx._hasRadioAt(\"after\"))(\"mat-mdc-list-item-both-leading-and-trailing\", ctx._hasBothLeadingAndTrailing())(\"mat-accent\", ctx.color !== \"primary\" && ctx.color !== \"warn\")(\"mat-warn\", ctx.color === \"warn\")(\"_mat-animation-noopable\", ctx._noopAnimations);\n        }\n      },\n      inputs: {\n        togglePosition: \"togglePosition\",\n        checkboxPosition: \"checkboxPosition\",\n        color: \"color\",\n        value: \"value\",\n        selected: \"selected\"\n      },\n      outputs: {\n        selectedChange: \"selectedChange\"\n      },\n      exportAs: [\"matListOption\"],\n      features: [i0.ɵɵProvidersFeature([{\n        provide: MatListItemBase,\n        useExisting: MatListOption\n      }, {\n        provide: LIST_OPTION,\n        useExisting: MatListOption\n      }]), i0.ɵɵInheritDefinitionFeature],\n      ngContentSelectors: _c7,\n      decls: 20,\n      vars: 4,\n      consts: [[\"icons\", \"\"], [\"checkbox\", \"\"], [\"radio\", \"\"], [\"unscopedContent\", \"\"], [1, \"mdc-list-item__start\", \"mat-mdc-list-option-checkbox-before\"], [1, \"mdc-list-item__start\", \"mat-mdc-list-option-radio-before\"], [3, \"ngTemplateOutlet\"], [1, \"mdc-list-item__content\"], [1, \"mat-mdc-list-item-unscoped-content\", 3, \"cdkObserveContent\"], [1, \"mdc-list-item__end\"], [1, \"mat-focus-indicator\"], [1, \"mdc-checkbox\"], [\"type\", \"checkbox\", 1, \"mdc-checkbox__native-control\", 3, \"checked\", \"disabled\"], [1, \"mdc-checkbox__background\"], [\"viewBox\", \"0 0 24 24\", \"aria-hidden\", \"true\", 1, \"mdc-checkbox__checkmark\"], [\"fill\", \"none\", \"d\", \"M1.73,12.91 8.1,19.28 22.79,4.59\", 1, \"mdc-checkbox__checkmark-path\"], [1, \"mdc-checkbox__mixedmark\"], [1, \"mdc-radio\"], [\"type\", \"radio\", 1, \"mdc-radio__native-control\", 3, \"checked\", \"disabled\"], [1, \"mdc-radio__background\"], [1, \"mdc-radio__outer-circle\"], [1, \"mdc-radio__inner-circle\"]],\n      template: function MatListOption_Template(rf, ctx) {\n        if (rf & 1) {\n          const _r1 = i0.ɵɵgetCurrentView();\n          i0.ɵɵprojectionDef(_c6);\n          i0.ɵɵtemplate(0, MatListOption_ng_template_0_Template, 1, 0, \"ng-template\", null, 0, i0.ɵɵtemplateRefExtractor)(2, MatListOption_ng_template_2_Template, 6, 4, \"ng-template\", null, 1, i0.ɵɵtemplateRefExtractor)(4, MatListOption_ng_template_4_Template, 5, 4, \"ng-template\", null, 2, i0.ɵɵtemplateRefExtractor);\n          i0.ɵɵconditionalCreate(6, MatListOption_Conditional_6_Template, 2, 1, \"span\", 4)(7, MatListOption_Conditional_7_Template, 2, 1, \"span\", 5);\n          i0.ɵɵconditionalCreate(8, MatListOption_Conditional_8_Template, 1, 1, null, 6);\n          i0.ɵɵelementStart(9, \"span\", 7);\n          i0.ɵɵprojection(10);\n          i0.ɵɵprojection(11, 1);\n          i0.ɵɵelementStart(12, \"span\", 8, 3);\n          i0.ɵɵlistener(\"cdkObserveContent\", function MatListOption_Template_span_cdkObserveContent_12_listener() {\n            i0.ɵɵrestoreView(_r1);\n            return i0.ɵɵresetView(ctx._updateItemLines(true));\n          });\n          i0.ɵɵprojection(14, 2);\n          i0.ɵɵelementEnd()();\n          i0.ɵɵconditionalCreate(15, MatListOption_Conditional_15_Template, 2, 1, \"span\", 9)(16, MatListOption_Conditional_16_Template, 2, 1, \"span\", 9);\n          i0.ɵɵconditionalCreate(17, MatListOption_Conditional_17_Template, 1, 1, null, 6);\n          i0.ɵɵprojection(18, 3);\n          i0.ɵɵelement(19, \"div\", 10);\n        }\n        if (rf & 2) {\n          i0.ɵɵadvance(6);\n          i0.ɵɵconditional(ctx._hasCheckboxAt(\"before\") ? 6 : ctx._hasRadioAt(\"before\") ? 7 : -1);\n          i0.ɵɵadvance(2);\n          i0.ɵɵconditional(ctx._hasIconsOrAvatarsAt(\"before\") ? 8 : -1);\n          i0.ɵɵadvance(7);\n          i0.ɵɵconditional(ctx._hasCheckboxAt(\"after\") ? 15 : ctx._hasRadioAt(\"after\") ? 16 : -1);\n          i0.ɵɵadvance(2);\n          i0.ɵɵconditional(ctx._hasIconsOrAvatarsAt(\"after\") ? 17 : -1);\n        }\n      },\n      dependencies: [NgTemplateOutlet, CdkObserveContent],\n      styles: [\".mat-mdc-list-option-with-trailing-avatar.mdc-list-item,[dir=rtl] .mat-mdc-list-option-with-trailing-avatar.mdc-list-item{padding-left:0;padding-right:0}.mat-mdc-list-option-with-trailing-avatar .mdc-list-item__end{margin-left:16px;margin-right:16px;width:40px;height:40px}.mat-mdc-list-option-with-trailing-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mat-mdc-list-option-with-trailing-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:\\\"\\\";vertical-align:0}.mat-mdc-list-option-with-trailing-avatar.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\\\"\\\";vertical-align:-20px}.mat-mdc-list-option-with-trailing-avatar .mdc-list-item__end{border-radius:50%}.mat-mdc-list-option .mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:18px;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom;padding:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);margin:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mat-mdc-list-option .mdc-checkbox .mdc-checkbox__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1;width:var(--mat-checkbox-state-layer-size, 40px);height:var(--mat-checkbox-state-layer-size, 40px);top:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);right:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - var(--mat-checkbox-state-layer-size, 40px))/2)}.mat-mdc-list-option .mdc-checkbox--disabled{cursor:default;pointer-events:none}.mat-mdc-list-option .mdc-checkbox__background{display:inline-flex;position:absolute;align-items:center;justify-content:center;box-sizing:border-box;width:18px;height:18px;border:2px solid currentColor;border-radius:2px;background-color:rgba(0,0,0,0);pointer-events:none;will-change:background-color,border-color;transition:background-color 90ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms cubic-bezier(0.4, 0, 0.6, 1);-webkit-print-color-adjust:exact;color-adjust:exact;border-color:var(--mat-checkbox-unselected-icon-color, var(--mat-sys-on-surface-variant));top:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2);left:calc((var(--mat-checkbox-state-layer-size, 40px) - 18px)/2)}.mat-mdc-list-option .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-icon-color, var(--mat-sys-primary))}.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__background{border-color:GrayText}}.mat-mdc-list-option .mdc-checkbox__native-control:disabled:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:disabled:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox__native-control:disabled:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:disabled:indeterminate~.mdc-checkbox__background{border-color:GrayText}}.mat-mdc-list-option .mdc-checkbox:hover>.mdc-checkbox__native-control:not(:checked)~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox:hover>.mdc-checkbox__native-control:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-hover-icon-color, var(--mat-sys-on-surface));background-color:rgba(0,0,0,0)}.mat-mdc-list-option .mdc-checkbox:hover>.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox:hover>.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-hover-icon-color, var(--mat-sys-primary))}.mat-mdc-list-option .mdc-checkbox__native-control:focus:focus:not(:checked)~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:focus:focus:not(:indeterminate)~.mdc-checkbox__background{border-color:var(--mat-checkbox-unselected-focus-icon-color, var(--mat-sys-on-surface))}.mat-mdc-list-option .mdc-checkbox__native-control:focus:focus:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:focus:focus:indeterminate~.mdc-checkbox__background{border-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary));background-color:var(--mat-checkbox-selected-focus-icon-color, var(--mat-sys-primary))}.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox:hover>.mdc-checkbox__native-control~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__background{border-color:var(--mat-checkbox-disabled-unselected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent))}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox:hover>.mdc-checkbox__native-control~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__background{border-color:GrayText}}.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:var(--mat-checkbox-disabled-selected-icon-color, color-mix(in srgb, var(--mat-sys-on-surface) 38%, transparent));border-color:rgba(0,0,0,0)}.mat-mdc-list-option .mdc-checkbox__checkmark{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;opacity:0;transition:opacity 180ms cubic-bezier(0.4, 0, 0.6, 1);color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox__checkmark{color:CanvasText}}.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__checkmark,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__checkmark,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__checkmark{color:GrayText}}.mat-mdc-list-option .mdc-checkbox__checkmark-path{transition:stroke-dashoffset 180ms cubic-bezier(0.4, 0, 0.6, 1);stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mat-mdc-list-option .mdc-checkbox__mixedmark{width:100%;height:0;transform:scaleX(0) rotate(0deg);border-width:1px;border-style:solid;opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1);border-color:var(--mat-checkbox-selected-checkmark-color, var(--mat-sys-on-primary))}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox__mixedmark{margin:0 1px}}.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__mixedmark,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__mixedmark{border-color:var(--mat-checkbox-disabled-selected-checkmark-color, var(--mat-sys-surface))}@media(forced-colors: active){.mat-mdc-list-option .mdc-checkbox--disabled .mdc-checkbox__mixedmark,.mat-mdc-list-option .mdc-checkbox--disabled.mat-mdc-checkbox-disabled-interactive .mdc-checkbox__mixedmark{border-color:GrayText}}.mat-mdc-list-option .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__background{animation-duration:180ms;animation-timing-function:linear}.mat-mdc-list-option .mdc-checkbox--anim-unchecked-checked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-unchecked-checked-checkmark-path 180ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-checked-unchecked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__checkmark{animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__checkmark{animation:mdc-checkbox-indeterminate-checked-checkmark 500ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-checked-mixedmark 500ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear;transition:none}.mat-mdc-list-option .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mat-mdc-list-option .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{transition:border-color 90ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option .mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-list-option .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path{stroke-dashoffset:0}.mat-mdc-list-option .mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__checkmark{transition:opacity 180ms cubic-bezier(0, 0, 0.2, 1),transform 180ms cubic-bezier(0, 0, 0.2, 1);opacity:1}.mat-mdc-list-option .mdc-checkbox__native-control:checked~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(-45deg)}.mat-mdc-list-option .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__checkmark{transform:rotate(45deg);opacity:0;transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-list-option .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background>.mdc-checkbox__mixedmark{transform:scaleX(1) rotate(0deg);opacity:1}@keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}100%{stroke-dashoffset:0}}@keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{transform:scaleX(1)}}@keyframes mdc-checkbox-checked-unchecked-checkmark-path{from{animation-timing-function:cubic-bezier(0.4, 0, 1, 1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@keyframes mdc-checkbox-checked-indeterminate-checkmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(45deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-checked-checkmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(45deg);opacity:0}to{transform:rotate(360deg);opacity:1}}@keyframes mdc-checkbox-checked-indeterminate-mixedmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(-45deg);opacity:0}to{transform:rotate(0deg);opacity:1}}@keyframes mdc-checkbox-indeterminate-checked-mixedmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(315deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{animation-timing-function:linear;transform:scaleX(1);opacity:1}32.8%,100%{transform:scaleX(0);opacity:0}}.mat-mdc-list-option .mdc-radio{display:inline-block;position:relative;flex:0 0 auto;box-sizing:content-box;width:20px;height:20px;cursor:pointer;will-change:opacity,transform,border-color,color;padding:calc((var(--mat-radio-state-layer-size, 40px) - 20px)/2)}.mat-mdc-list-option .mdc-radio__background{display:inline-block;position:relative;box-sizing:border-box;width:20px;height:20px}.mat-mdc-list-option .mdc-radio__background::before{position:absolute;transform:scale(0, 0);border-radius:50%;opacity:0;pointer-events:none;content:\\\"\\\";transition:opacity 90ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms cubic-bezier(0.4, 0, 0.6, 1);width:var(--mat-radio-state-layer-size, 40px);height:var(--mat-radio-state-layer-size, 40px);top:calc(-1*(var(--mat-radio-state-layer-size, 40px) - 20px)/2);left:calc(-1*(var(--mat-radio-state-layer-size, 40px) - 20px)/2)}.mat-mdc-list-option .mdc-radio__outer-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border-width:2px;border-style:solid;border-radius:50%;transition:border-color 90ms cubic-bezier(0.4, 0, 0.6, 1)}.mat-mdc-list-option .mdc-radio__inner-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;transform:scale(0);border-radius:50%;transition:transform 90ms cubic-bezier(0.4, 0, 0.6, 1),background-color 90ms cubic-bezier(0.4, 0, 0.6, 1)}@media(forced-colors: active){.mat-mdc-list-option .mdc-radio__inner-circle{background-color:CanvasText !important}}.mat-mdc-list-option .mdc-radio__native-control{position:absolute;margin:0;padding:0;opacity:0;top:0;right:0;left:0;cursor:inherit;z-index:1;width:var(--mat-radio-state-layer-size, 40px);height:var(--mat-radio-state-layer-size, 40px)}.mat-mdc-list-option .mdc-radio__native-control:checked+.mdc-radio__background,.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background{transition:opacity 90ms cubic-bezier(0, 0, 0.2, 1),transform 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__outer-circle,.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__outer-circle{transition:border-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__inner-circle,.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__inner-circle{transition:transform 90ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option .mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-disabled-unselected-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-radio-disabled-unselected-icon-opacity, 0.38)}.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background{cursor:default}.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-disabled-selected-icon-color, var(--mat-sys-on-surface));opacity:var(--mat-radio-disabled-selected-icon-opacity, 0.38)}.mat-mdc-list-option .mdc-radio__native-control:disabled+.mdc-radio__background>.mdc-radio__inner-circle{background-color:var(--mat-radio-disabled-selected-icon-color, var(--mat-sys-on-surface, currentColor));opacity:var(--mat-radio-disabled-selected-icon-opacity, 0.38)}.mat-mdc-list-option .mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-unselected-icon-color, var(--mat-sys-on-surface-variant))}.mat-mdc-list-option .mdc-radio__native-control:enabled:checked+.mdc-radio__background>.mdc-radio__outer-circle{border-color:var(--mat-radio-selected-icon-color, var(--mat-sys-primary))}.mat-mdc-list-option .mdc-radio__native-control:enabled:checked+.mdc-radio__background>.mdc-radio__inner-circle{background-color:var(--mat-radio-selected-icon-color, var(--mat-sys-primary, currentColor))}.mat-mdc-list-option .mdc-radio__native-control:checked+.mdc-radio__background>.mdc-radio__inner-circle{transform:scale(0.5);transition:transform 90ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms cubic-bezier(0, 0, 0.2, 1)}.mat-mdc-list-option._mat-animation-noopable .mdc-radio__background::before,.mat-mdc-list-option._mat-animation-noopable .mdc-radio__outer-circle,.mat-mdc-list-option._mat-animation-noopable .mdc-radio__inner-circle{transition:none !important}.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mat-mdc-checkbox-touch-target,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__native-control,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__ripple,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mat-mdc-checkbox-ripple::before,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__background,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__start>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__mixedmark,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mat-mdc-checkbox-touch-target,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__native-control,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__ripple,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mat-mdc-checkbox-ripple::before,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__background,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__checkmark>.mdc-checkbox__checkmark-path,.mat-mdc-list-option._mat-animation-noopable>.mdc-list-item__end>.mdc-checkbox>.mdc-checkbox__background>.mdc-checkbox__mixedmark{transition:none !important;animation:none !important}.mat-mdc-list-option .mdc-checkbox__native-control,.mat-mdc-list-option .mdc-radio__native-control{display:none}@media(forced-colors: active){.mat-mdc-list-option.mdc-list-item--selected::after{content:\\\"\\\";position:absolute;top:50%;right:16px;transform:translateY(-50%);width:10px;height:0;border-bottom:solid 10px;border-radius:10px}.mat-mdc-list-option.mdc-list-item--selected [dir=rtl]::after{right:auto;left:16px}}\\n\"],\n      encapsulation: 2,\n      changeDetection: 0\n    });\n  }\n  return MatListOption;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Directive whose purpose is to add the mat- CSS styling to this selector.\n * @docs-private\n */\nlet MatListSubheaderCssMatStyler = /*#__PURE__*/(() => {\n  class MatListSubheaderCssMatStyler {\n    static ɵfac = function MatListSubheaderCssMatStyler_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatListSubheaderCssMatStyler)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatListSubheaderCssMatStyler,\n      selectors: [[\"\", \"mat-subheader\", \"\"], [\"\", \"matSubheader\", \"\"]],\n      hostAttrs: [1, \"mat-mdc-subheader\", \"mdc-list-group__subheader\"]\n    });\n  }\n  return MatListSubheaderCssMatStyler;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Injection token that can be used to inject instances of `MatNavList`. It serves as\n * alternative token to the actual `MatNavList` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nconst MAT_NAV_LIST = /*#__PURE__*/new InjectionToken('MatNavList');\nlet MatNavList = /*#__PURE__*/(() => {\n  class MatNavList extends MatListBase {\n    // An navigation list is considered interactive, but does not extend the interactive list\n    // base class. We do this because as per MDC, items of interactive lists are only reachable\n    // through keyboard shortcuts. We want all items for the navigation list to be reachable\n    // through tab key as we do not intend to provide any special accessibility treatment. The\n    // accessibility treatment depends on how the end-user will interact with it.\n    _isNonInteractive = false;\n    static ɵfac = /* @__PURE__ */(() => {\n      let ɵMatNavList_BaseFactory;\n      return function MatNavList_Factory(__ngFactoryType__) {\n        return (ɵMatNavList_BaseFactory || (ɵMatNavList_BaseFactory = i0.ɵɵgetInheritedFactory(MatNavList)))(__ngFactoryType__ || MatNavList);\n      };\n    })();\n    static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n      type: MatNavList,\n      selectors: [[\"mat-nav-list\"]],\n      hostAttrs: [\"role\", \"navigation\", 1, \"mat-mdc-nav-list\", \"mat-mdc-list-base\", \"mdc-list\"],\n      exportAs: [\"matNavList\"],\n      features: [i0.ɵɵProvidersFeature([{\n        provide: MatListBase,\n        useExisting: MatNavList\n      }]), i0.ɵɵInheritDefinitionFeature],\n      ngContentSelectors: _c0,\n      decls: 1,\n      vars: 0,\n      template: function MatNavList_Template(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵprojectionDef();\n          i0.ɵɵprojection(0);\n        }\n      },\n      styles: [_c1],\n      encapsulation: 2,\n      changeDetection: 0\n    });\n  }\n  return MatNavList;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nconst MAT_SELECTION_LIST_VALUE_ACCESSOR = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: /*#__PURE__*/forwardRef(() => MatSelectionList),\n  multi: true\n};\n/** Change event that is being fired whenever the selected state of an option changes. */\nclass MatSelectionListChange {\n  source;\n  options;\n  constructor(/** Reference to the selection list that emitted the event. */\n  source, /** Reference to the options that have been changed. */\n  options) {\n    this.source = source;\n    this.options = options;\n  }\n}\nlet MatSelectionList = /*#__PURE__*/(() => {\n  class MatSelectionList extends MatListBase {\n    _element = inject(ElementRef);\n    _ngZone = inject(NgZone);\n    _renderer = inject(Renderer2);\n    _initialized = false;\n    _keyManager;\n    _listenerCleanups;\n    /** Emits when the list has been destroyed. */\n    _destroyed = new Subject();\n    /** Whether the list has been destroyed. */\n    _isDestroyed;\n    /** View to model callback that should be called whenever the selected options change. */\n    _onChange = _ => {};\n    _items;\n    /** Emits a change event whenever the selected state of an option changes. */\n    selectionChange = new EventEmitter();\n    /**\n     * Theme color of the selection list. This sets the checkbox color for all\n     * list options. This API is supported in M2 themes only, it has no effect in\n     * M3 themes. For color customization in M3, see https://material.angular.dev/components/list/styling.\n     *\n     * For information on applying color variants in M3, see\n     * https://material.angular.dev/guide/material-2-theming#optional-add-backwards-compatibility-styles-for-color-variants\n     */\n    color = 'accent';\n    /**\n     * Function used for comparing an option against the selected value when determining which\n     * options should appear as selected. The first argument is the value of an options. The second\n     * one is a value from the selected value. A boolean must be returned.\n     */\n    compareWith = (a1, a2) => a1 === a2;\n    /** Whether selection is limited to one or multiple items (default multiple). */\n    get multiple() {\n      return this._multiple;\n    }\n    set multiple(value) {\n      const newValue = coerceBooleanProperty(value);\n      if (newValue !== this._multiple) {\n        if ((typeof ngDevMode === 'undefined' || ngDevMode) && this._initialized) {\n          throw new Error('Cannot change `multiple` mode of mat-selection-list after initialization.');\n        }\n        this._multiple = newValue;\n        this.selectedOptions = new SelectionModel(this._multiple, this.selectedOptions.selected);\n      }\n    }\n    _multiple = true;\n    /** Whether radio indicator for all list items is hidden. */\n    get hideSingleSelectionIndicator() {\n      return this._hideSingleSelectionIndicator;\n    }\n    set hideSingleSelectionIndicator(value) {\n      this._hideSingleSelectionIndicator = coerceBooleanProperty(value);\n    }\n    _hideSingleSelectionIndicator = this._defaultOptions?.hideSingleSelectionIndicator ?? false;\n    /** The currently selected options. */\n    selectedOptions = new SelectionModel(this._multiple);\n    /** Keeps track of the currently-selected value. */\n    _value;\n    /** View to model callback that should be called if the list or its options lost focus. */\n    _onTouched = () => {};\n    _changeDetectorRef = inject(ChangeDetectorRef);\n    constructor() {\n      super();\n      this._isNonInteractive = false;\n    }\n    ngAfterViewInit() {\n      // Mark the selection list as initialized so that the `multiple`\n      // binding can no longer be changed.\n      this._initialized = true;\n      this._setupRovingTabindex();\n      // These events are bound outside the zone, because they don't change\n      // any change-detected properties and they can trigger timeouts.\n      this._ngZone.runOutsideAngular(() => {\n        this._listenerCleanups = [this._renderer.listen(this._element.nativeElement, 'focusin', this._handleFocusin), this._renderer.listen(this._element.nativeElement, 'focusout', this._handleFocusout)];\n      });\n      if (this._value) {\n        this._setOptionsFromValues(this._value);\n      }\n      this._watchForSelectionChange();\n    }\n    ngOnChanges(changes) {\n      const disabledChanges = changes['disabled'];\n      const disableRippleChanges = changes['disableRipple'];\n      const hideSingleSelectionIndicatorChanges = changes['hideSingleSelectionIndicator'];\n      if (disableRippleChanges && !disableRippleChanges.firstChange || disabledChanges && !disabledChanges.firstChange || hideSingleSelectionIndicatorChanges && !hideSingleSelectionIndicatorChanges.firstChange) {\n        this._markOptionsForCheck();\n      }\n    }\n    ngOnDestroy() {\n      this._keyManager?.destroy();\n      this._listenerCleanups?.forEach(current => current());\n      this._destroyed.next();\n      this._destroyed.complete();\n      this._isDestroyed = true;\n    }\n    /** Focuses the selection list. */\n    focus(options) {\n      this._element.nativeElement.focus(options);\n    }\n    /** Selects all of the options. Returns the options that changed as a result. */\n    selectAll() {\n      return this._setAllOptionsSelected(true);\n    }\n    /** Deselects all of the options. Returns the options that changed as a result. */\n    deselectAll() {\n      return this._setAllOptionsSelected(false);\n    }\n    /** Reports a value change to the ControlValueAccessor */\n    _reportValueChange() {\n      // Stop reporting value changes after the list has been destroyed. This avoids\n      // cases where the list might wrongly reset its value once it is removed, but\n      // the form control is still live.\n      if (this.options && !this._isDestroyed) {\n        const value = this._getSelectedOptionValues();\n        this._onChange(value);\n        this._value = value;\n      }\n    }\n    /** Emits a change event if the selected state of an option changed. */\n    _emitChangeEvent(options) {\n      this.selectionChange.emit(new MatSelectionListChange(this, options));\n    }\n    /** Implemented as part of ControlValueAccessor. */\n    writeValue(values) {\n      this._value = values;\n      if (this.options) {\n        this._setOptionsFromValues(values || []);\n      }\n    }\n    /** Implemented as a part of ControlValueAccessor. */\n    setDisabledState(isDisabled) {\n      this.disabled = isDisabled;\n      this._changeDetectorRef.markForCheck();\n      this._markOptionsForCheck();\n    }\n    /**\n     * Whether the *entire* selection list is disabled. When true, each list item is also disabled\n     * and each list item is removed from the tab order (has tabindex=\"-1\").\n     */\n    get disabled() {\n      return this._selectionListDisabled();\n    }\n    set disabled(value) {\n      // Update the disabled state of this list. Write to `this._selectionListDisabled` instead of\n      // `super.disabled`. That is to avoid closure compiler compatibility issues with assigning to\n      // a super property.\n      this._selectionListDisabled.set(coerceBooleanProperty(value));\n      if (this._selectionListDisabled()) {\n        this._keyManager?.setActiveItem(-1);\n      }\n    }\n    _selectionListDisabled = signal(false, ...(ngDevMode ? [{\n      debugName: \"_selectionListDisabled\"\n    }] : []));\n    /** Implemented as part of ControlValueAccessor. */\n    registerOnChange(fn) {\n      this._onChange = fn;\n    }\n    /** Implemented as part of ControlValueAccessor. */\n    registerOnTouched(fn) {\n      this._onTouched = fn;\n    }\n    /** Watches for changes in the selected state of the options and updates the list accordingly. */\n    _watchForSelectionChange() {\n      this.selectedOptions.changed.pipe(takeUntil(this._destroyed)).subscribe(event => {\n        // Sync external changes to the model back to the options.\n        for (let item of event.added) {\n          item.selected = true;\n        }\n        for (let item of event.removed) {\n          item.selected = false;\n        }\n        if (!this._containsFocus()) {\n          this._resetActiveOption();\n        }\n      });\n    }\n    /** Sets the selected options based on the specified values. */\n    _setOptionsFromValues(values) {\n      this.options.forEach(option => option._setSelected(false));\n      values.forEach(value => {\n        const correspondingOption = this.options.find(option => {\n          // Skip options that are already in the model. This allows us to handle cases\n          // where the same primitive value is selected multiple times.\n          return option.selected ? false : this.compareWith(option.value, value);\n        });\n        if (correspondingOption) {\n          correspondingOption._setSelected(true);\n        }\n      });\n    }\n    /** Returns the values of the selected options. */\n    _getSelectedOptionValues() {\n      return this.options.filter(option => option.selected).map(option => option.value);\n    }\n    /** Marks all the options to be checked in the next change detection run. */\n    _markOptionsForCheck() {\n      if (this.options) {\n        this.options.forEach(option => option._markForCheck());\n      }\n    }\n    /**\n     * Sets the selected state on all of the options\n     * and emits an event if anything changed.\n     */\n    _setAllOptionsSelected(isSelected, skipDisabled) {\n      // Keep track of whether anything changed, because we only want to\n      // emit the changed event when something actually changed.\n      const changedOptions = [];\n      this.options.forEach(option => {\n        if ((!skipDisabled || !option.disabled) && option._setSelected(isSelected)) {\n          changedOptions.push(option);\n        }\n      });\n      if (changedOptions.length) {\n        this._reportValueChange();\n      }\n      return changedOptions;\n    }\n    // Note: This getter exists for backwards compatibility. The `_items` query list\n    // cannot be named `options` as it will be picked up by the interactive list base.\n    /** The option components contained within this selection-list. */\n    get options() {\n      return this._items;\n    }\n    /** Handles keydown events within the list. */\n    _handleKeydown(event) {\n      const activeItem = this._keyManager.activeItem;\n      if ((event.keyCode === ENTER || event.keyCode === SPACE) && !this._keyManager.isTyping() && activeItem && !activeItem.disabled) {\n        event.preventDefault();\n        activeItem._toggleOnInteraction();\n      } else if (event.keyCode === A && this.multiple && !this._keyManager.isTyping() && hasModifierKey(event, 'ctrlKey', 'metaKey')) {\n        const shouldSelect = this.options.some(option => !option.disabled && !option.selected);\n        event.preventDefault();\n        this._emitChangeEvent(this._setAllOptionsSelected(shouldSelect, true));\n      } else {\n        this._keyManager.onKeydown(event);\n      }\n    }\n    /** Handles focusout events within the list. */\n    _handleFocusout = () => {\n      // Focus takes a while to update so we have to wrap our call in a timeout.\n      setTimeout(() => {\n        if (!this._containsFocus()) {\n          this._resetActiveOption();\n        }\n      });\n    };\n    /** Handles focusin events within the list. */\n    _handleFocusin = event => {\n      if (this.disabled) {\n        return;\n      }\n      const activeIndex = this._items.toArray().findIndex(item => item._elementRef.nativeElement.contains(event.target));\n      if (activeIndex > -1) {\n        this._setActiveOption(activeIndex);\n      } else {\n        this._resetActiveOption();\n      }\n    };\n    /**\n     * Sets up the logic for maintaining the roving tabindex.\n     *\n     * `skipPredicate` determines if key manager should avoid putting a given list item in the tab\n     * index. Allow disabled list items to receive focus to align with WAI ARIA recommendation.\n     * Normally WAI ARIA's instructions are to exclude disabled items from the tab order, but it\n     * makes a few exceptions for compound widgets.\n     *\n     * From [Developing a Keyboard Interface](\n     * https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/):\n     *   \"For the following composite widget elements, keep them focusable when disabled: Options in a\n     *   Listbox...\"\n     */\n    _setupRovingTabindex() {\n      this._keyManager = new FocusKeyManager(this._items).withHomeAndEnd().withTypeAhead().withWrap().skipPredicate(() => this.disabled);\n      // Set the initial focus.\n      this._resetActiveOption();\n      // Move the tabindex to the currently-focused list item.\n      this._keyManager.change.subscribe(activeItemIndex => this._setActiveOption(activeItemIndex));\n      // If the active item is removed from the list, reset back to the first one.\n      this._items.changes.pipe(takeUntil(this._destroyed)).subscribe(() => {\n        const activeItem = this._keyManager.activeItem;\n        if (!activeItem || this._items.toArray().indexOf(activeItem) === -1) {\n          this._resetActiveOption();\n        }\n      });\n    }\n    /**\n     * Sets an option as active.\n     * @param index Index of the active option. If set to -1, no option will be active.\n     */\n    _setActiveOption(index) {\n      this._items.forEach((item, itemIndex) => item._setTabindex(itemIndex === index ? 0 : -1));\n      this._keyManager.updateActiveItem(index);\n    }\n    /**\n     * Resets the active option. When the list is disabled, remove all options from to the tab order.\n     * Otherwise, focus the first selected option.\n     */\n    _resetActiveOption() {\n      if (this.disabled) {\n        this._setActiveOption(-1);\n        return;\n      }\n      const activeItem = this._items.find(item => item.selected && !item.disabled) || this._items.first;\n      this._setActiveOption(activeItem ? this._items.toArray().indexOf(activeItem) : -1);\n    }\n    /** Returns whether the focus is currently within the list. */\n    _containsFocus() {\n      const activeElement = _getFocusedElementPierceShadowDom();\n      return activeElement && this._element.nativeElement.contains(activeElement);\n    }\n    static ɵfac = function MatSelectionList_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatSelectionList)();\n    };\n    static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n      type: MatSelectionList,\n      selectors: [[\"mat-selection-list\"]],\n      contentQueries: function MatSelectionList_ContentQueries(rf, ctx, dirIndex) {\n        if (rf & 1) {\n          i0.ɵɵcontentQuery(dirIndex, MatListOption, 5);\n        }\n        if (rf & 2) {\n          let _t;\n          i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx._items = _t);\n        }\n      },\n      hostAttrs: [\"role\", \"listbox\", 1, \"mat-mdc-selection-list\", \"mat-mdc-list-base\", \"mdc-list\"],\n      hostVars: 1,\n      hostBindings: function MatSelectionList_HostBindings(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵlistener(\"keydown\", function MatSelectionList_keydown_HostBindingHandler($event) {\n            return ctx._handleKeydown($event);\n          });\n        }\n        if (rf & 2) {\n          i0.ɵɵattribute(\"aria-multiselectable\", ctx.multiple);\n        }\n      },\n      inputs: {\n        color: \"color\",\n        compareWith: \"compareWith\",\n        multiple: \"multiple\",\n        hideSingleSelectionIndicator: \"hideSingleSelectionIndicator\",\n        disabled: \"disabled\"\n      },\n      outputs: {\n        selectionChange: \"selectionChange\"\n      },\n      exportAs: [\"matSelectionList\"],\n      features: [i0.ɵɵProvidersFeature([MAT_SELECTION_LIST_VALUE_ACCESSOR, {\n        provide: MatListBase,\n        useExisting: MatSelectionList\n      }, {\n        provide: SELECTION_LIST,\n        useExisting: MatSelectionList\n      }]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature],\n      ngContentSelectors: _c0,\n      decls: 1,\n      vars: 0,\n      template: function MatSelectionList_Template(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵprojectionDef();\n          i0.ɵɵprojection(0);\n        }\n      },\n      styles: [_c1],\n      encapsulation: 2,\n      changeDetection: 0\n    });\n  }\n  return MatSelectionList;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatListModule = /*#__PURE__*/(() => {\n  class MatListModule {\n    static ɵfac = function MatListModule_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatListModule)();\n    };\n    static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n      type: MatListModule\n    });\n    static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n      imports: [ObserversModule, MatCommonModule, MatRippleModule, MatPseudoCheckboxModule, MatDividerModule]\n    });\n  }\n  return MatListModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { MAT_LIST, MAT_LIST_CONFIG, MAT_NAV_LIST, MAT_SELECTION_LIST_VALUE_ACCESSOR, MatActionList, MatList, MatListItem, MatListItemAvatar, MatListItemIcon, MatListItemLine, MatListItemMeta, MatListItemTitle, MatListModule, MatListOption, MatListSubheaderCssMatStyler, MatNavList, MatSelectionList, MatSelectionListChange, SELECTION_LIST, _MatListItemGraphicBase };\n","import * as i0 from '@angular/core';\nimport { Component, ChangeDetectionStrategy, ViewEncapsulation, inject, NgZone, RendererFactory2, Injectable, ElementRef, EventEmitter, Directive, Output, Renderer2, DOCUMENT, booleanAttribute, Input, NgModule } from '@angular/core';\nimport { EMPTY, Subject } from 'rxjs';\nimport { Platform } from './platform2.mjs';\nimport { _CdkPrivateStyleLoader } from './style-loader.mjs';\nimport { coerceElement, coerceNumberProperty } from './element.mjs';\nimport { auditTime } from 'rxjs/operators';\nimport '@angular/common';\n\n/** Component used to load the structural styles of the text field. */\nlet _CdkTextFieldStyleLoader = /*#__PURE__*/(() => {\n  class _CdkTextFieldStyleLoader {\n    static ɵfac = function _CdkTextFieldStyleLoader_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || _CdkTextFieldStyleLoader)();\n    };\n    static ɵcmp = /* @__PURE__ */i0.ɵɵdefineComponent({\n      type: _CdkTextFieldStyleLoader,\n      selectors: [[\"ng-component\"]],\n      hostAttrs: [\"cdk-text-field-style-loader\", \"\"],\n      decls: 0,\n      vars: 0,\n      template: function _CdkTextFieldStyleLoader_Template(rf, ctx) {},\n      styles: [\"textarea.cdk-textarea-autosize{resize:none}textarea.cdk-textarea-autosize-measuring{padding:2px 0 !important;box-sizing:content-box !important;height:auto !important;overflow:hidden !important}textarea.cdk-textarea-autosize-measuring-firefox{padding:2px 0 !important;box-sizing:content-box !important;height:0 !important}@keyframes cdk-text-field-autofill-start{/*!*/}@keyframes cdk-text-field-autofill-end{/*!*/}.cdk-text-field-autofill-monitored:-webkit-autofill{animation:cdk-text-field-autofill-start 0s 1ms}.cdk-text-field-autofill-monitored:not(:-webkit-autofill){animation:cdk-text-field-autofill-end 0s 1ms}\\n\"],\n      encapsulation: 2,\n      changeDetection: 0\n    });\n  }\n  return _CdkTextFieldStyleLoader;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Options to pass to the animationstart listener. */\nconst listenerOptions = {\n  passive: true\n};\n/**\n * An injectable service that can be used to monitor the autofill state of an input.\n * Based on the following blog post:\n * https://medium.com/@brunn/detecting-autofilled-fields-in-javascript-aed598d25da7\n */\nlet AutofillMonitor = /*#__PURE__*/(() => {\n  class AutofillMonitor {\n    _platform = inject(Platform);\n    _ngZone = inject(NgZone);\n    _renderer = inject(RendererFactory2).createRenderer(null, null);\n    _styleLoader = inject(_CdkPrivateStyleLoader);\n    _monitoredElements = new Map();\n    constructor() {}\n    monitor(elementOrRef) {\n      if (!this._platform.isBrowser) {\n        return EMPTY;\n      }\n      this._styleLoader.load(_CdkTextFieldStyleLoader);\n      const element = coerceElement(elementOrRef);\n      const info = this._monitoredElements.get(element);\n      if (info) {\n        return info.subject;\n      }\n      const subject = new Subject();\n      const cssClass = 'cdk-text-field-autofilled';\n      const listener = event => {\n        // Animation events fire on initial element render, we check for the presence of the autofill\n        // CSS class to make sure this is a real change in state, not just the initial render before\n        // we fire off events.\n        if (event.animationName === 'cdk-text-field-autofill-start' && !element.classList.contains(cssClass)) {\n          element.classList.add(cssClass);\n          this._ngZone.run(() => subject.next({\n            target: event.target,\n            isAutofilled: true\n          }));\n        } else if (event.animationName === 'cdk-text-field-autofill-end' && element.classList.contains(cssClass)) {\n          element.classList.remove(cssClass);\n          this._ngZone.run(() => subject.next({\n            target: event.target,\n            isAutofilled: false\n          }));\n        }\n      };\n      const unlisten = this._ngZone.runOutsideAngular(() => {\n        element.classList.add('cdk-text-field-autofill-monitored');\n        return this._renderer.listen(element, 'animationstart', listener, listenerOptions);\n      });\n      this._monitoredElements.set(element, {\n        subject,\n        unlisten\n      });\n      return subject;\n    }\n    stopMonitoring(elementOrRef) {\n      const element = coerceElement(elementOrRef);\n      const info = this._monitoredElements.get(element);\n      if (info) {\n        info.unlisten();\n        info.subject.complete();\n        element.classList.remove('cdk-text-field-autofill-monitored');\n        element.classList.remove('cdk-text-field-autofilled');\n        this._monitoredElements.delete(element);\n      }\n    }\n    ngOnDestroy() {\n      this._monitoredElements.forEach((_info, element) => this.stopMonitoring(element));\n    }\n    static ɵfac = function AutofillMonitor_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || AutofillMonitor)();\n    };\n    static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n      token: AutofillMonitor,\n      factory: AutofillMonitor.ɵfac,\n      providedIn: 'root'\n    });\n  }\n  return AutofillMonitor;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/** A directive that can be used to monitor the autofill state of an input. */\nlet CdkAutofill = /*#__PURE__*/(() => {\n  class CdkAutofill {\n    _elementRef = inject(ElementRef);\n    _autofillMonitor = inject(AutofillMonitor);\n    /** Emits when the autofill state of the element changes. */\n    cdkAutofill = new EventEmitter();\n    constructor() {}\n    ngOnInit() {\n      this._autofillMonitor.monitor(this._elementRef).subscribe(event => this.cdkAutofill.emit(event));\n    }\n    ngOnDestroy() {\n      this._autofillMonitor.stopMonitoring(this._elementRef);\n    }\n    static ɵfac = function CdkAutofill_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || CdkAutofill)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: CdkAutofill,\n      selectors: [[\"\", \"cdkAutofill\", \"\"]],\n      outputs: {\n        cdkAutofill: \"cdkAutofill\"\n      }\n    });\n  }\n  return CdkAutofill;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Directive to automatically resize a textarea to fit its content. */\nlet CdkTextareaAutosize = /*#__PURE__*/(() => {\n  class CdkTextareaAutosize {\n    _elementRef = inject(ElementRef);\n    _platform = inject(Platform);\n    _ngZone = inject(NgZone);\n    _renderer = inject(Renderer2);\n    _resizeEvents = new Subject();\n    /** Keep track of the previous textarea value to avoid resizing when the value hasn't changed. */\n    _previousValue;\n    _initialHeight;\n    _destroyed = new Subject();\n    _listenerCleanups;\n    _minRows;\n    _maxRows;\n    _enabled = true;\n    /**\n     * Value of minRows as of last resize. If the minRows has decreased, the\n     * height of the textarea needs to be recomputed to reflect the new minimum. The maxHeight\n     * does not have the same problem because it does not affect the textarea's scrollHeight.\n     */\n    _previousMinRows = -1;\n    _textareaElement;\n    /** Minimum amount of rows in the textarea. */\n    get minRows() {\n      return this._minRows;\n    }\n    set minRows(value) {\n      this._minRows = coerceNumberProperty(value);\n      this._setMinHeight();\n    }\n    /** Maximum amount of rows in the textarea. */\n    get maxRows() {\n      return this._maxRows;\n    }\n    set maxRows(value) {\n      this._maxRows = coerceNumberProperty(value);\n      this._setMaxHeight();\n    }\n    /** Whether autosizing is enabled or not */\n    get enabled() {\n      return this._enabled;\n    }\n    set enabled(value) {\n      // Only act if the actual value changed. This specifically helps to not run\n      // resizeToFitContent too early (i.e. before ngAfterViewInit)\n      if (this._enabled !== value) {\n        (this._enabled = value) ? this.resizeToFitContent(true) : this.reset();\n      }\n    }\n    get placeholder() {\n      return this._textareaElement.placeholder;\n    }\n    set placeholder(value) {\n      this._cachedPlaceholderHeight = undefined;\n      if (value) {\n        this._textareaElement.setAttribute('placeholder', value);\n      } else {\n        this._textareaElement.removeAttribute('placeholder');\n      }\n      this._cacheTextareaPlaceholderHeight();\n    }\n    /** Cached height of a textarea with a single row. */\n    _cachedLineHeight;\n    /** Cached height of a textarea with only the placeholder. */\n    _cachedPlaceholderHeight;\n    /** Used to reference correct document/window */\n    _document = inject(DOCUMENT);\n    _hasFocus;\n    _isViewInited = false;\n    constructor() {\n      const styleLoader = inject(_CdkPrivateStyleLoader);\n      styleLoader.load(_CdkTextFieldStyleLoader);\n      this._textareaElement = this._elementRef.nativeElement;\n    }\n    /** Sets the minimum height of the textarea as determined by minRows. */\n    _setMinHeight() {\n      const minHeight = this.minRows && this._cachedLineHeight ? `${this.minRows * this._cachedLineHeight}px` : null;\n      if (minHeight) {\n        this._textareaElement.style.minHeight = minHeight;\n      }\n    }\n    /** Sets the maximum height of the textarea as determined by maxRows. */\n    _setMaxHeight() {\n      const maxHeight = this.maxRows && this._cachedLineHeight ? `${this.maxRows * this._cachedLineHeight}px` : null;\n      if (maxHeight) {\n        this._textareaElement.style.maxHeight = maxHeight;\n      }\n    }\n    ngAfterViewInit() {\n      if (this._platform.isBrowser) {\n        // Remember the height which we started with in case autosizing is disabled\n        this._initialHeight = this._textareaElement.style.height;\n        this.resizeToFitContent();\n        this._ngZone.runOutsideAngular(() => {\n          this._listenerCleanups = [this._renderer.listen('window', 'resize', () => this._resizeEvents.next()), this._renderer.listen(this._textareaElement, 'focus', this._handleFocusEvent), this._renderer.listen(this._textareaElement, 'blur', this._handleFocusEvent)];\n          this._resizeEvents.pipe(auditTime(16)).subscribe(() => {\n            // Clear the cached heights since the styles can change\n            // when the window is resized (e.g. by media queries).\n            this._cachedLineHeight = this._cachedPlaceholderHeight = undefined;\n            this.resizeToFitContent(true);\n          });\n        });\n        this._isViewInited = true;\n        this.resizeToFitContent(true);\n      }\n    }\n    ngOnDestroy() {\n      this._listenerCleanups?.forEach(cleanup => cleanup());\n      this._resizeEvents.complete();\n      this._destroyed.next();\n      this._destroyed.complete();\n    }\n    /**\n     * Cache the height of a single-row textarea if it has not already been cached.\n     *\n     * We need to know how large a single \"row\" of a textarea is in order to apply minRows and\n     * maxRows. For the initial version, we will assume that the height of a single line in the\n     * textarea does not ever change.\n     */\n    _cacheTextareaLineHeight() {\n      if (this._cachedLineHeight) {\n        return;\n      }\n      // Use a clone element because we have to override some styles.\n      const textareaClone = this._textareaElement.cloneNode(false);\n      const cloneStyles = textareaClone.style;\n      textareaClone.rows = 1;\n      // Use `position: absolute` so that this doesn't cause a browser layout and use\n      // `visibility: hidden` so that nothing is rendered. Clear any other styles that\n      // would affect the height.\n      cloneStyles.position = 'absolute';\n      cloneStyles.visibility = 'hidden';\n      cloneStyles.border = 'none';\n      cloneStyles.padding = '0';\n      cloneStyles.height = '';\n      cloneStyles.minHeight = '';\n      cloneStyles.maxHeight = '';\n      // App styles might be messing with the height through the positioning properties.\n      cloneStyles.top = cloneStyles.bottom = cloneStyles.left = cloneStyles.right = 'auto';\n      // In Firefox it happens that textarea elements are always bigger than the specified amount\n      // of rows. This is because Firefox tries to add extra space for the horizontal scrollbar.\n      // As a workaround that removes the extra space for the scrollbar, we can just set overflow\n      // to hidden. This ensures that there is no invalid calculation of the line height.\n      // See Firefox bug report: https://bugzilla.mozilla.org/show_bug.cgi?id=33654\n      cloneStyles.overflow = 'hidden';\n      this._textareaElement.parentNode.appendChild(textareaClone);\n      this._cachedLineHeight = textareaClone.clientHeight;\n      textareaClone.remove();\n      // Min and max heights have to be re-calculated if the cached line height changes\n      this._setMinHeight();\n      this._setMaxHeight();\n    }\n    _measureScrollHeight() {\n      const element = this._textareaElement;\n      const previousMargin = element.style.marginBottom || '';\n      const isFirefox = this._platform.FIREFOX;\n      const needsMarginFiller = isFirefox && this._hasFocus;\n      const measuringClass = isFirefox ? 'cdk-textarea-autosize-measuring-firefox' : 'cdk-textarea-autosize-measuring';\n      // In some cases the page might move around while we're measuring the `textarea` on Firefox. We\n      // work around it by assigning a temporary margin with the same height as the `textarea` so that\n      // it occupies the same amount of space. See #23233.\n      if (needsMarginFiller) {\n        element.style.marginBottom = `${element.clientHeight}px`;\n      }\n      // Reset the textarea height to auto in order to shrink back to its default size.\n      // Also temporarily force overflow:hidden, so scroll bars do not interfere with calculations.\n      element.classList.add(measuringClass);\n      // The measuring class includes a 2px padding to workaround an issue with Chrome,\n      // so we account for that extra space here by subtracting 4 (2px top + 2px bottom).\n      const scrollHeight = element.scrollHeight - 4;\n      element.classList.remove(measuringClass);\n      if (needsMarginFiller) {\n        element.style.marginBottom = previousMargin;\n      }\n      return scrollHeight;\n    }\n    _cacheTextareaPlaceholderHeight() {\n      if (!this._isViewInited || this._cachedPlaceholderHeight != undefined) {\n        return;\n      }\n      if (!this.placeholder) {\n        this._cachedPlaceholderHeight = 0;\n        return;\n      }\n      const value = this._textareaElement.value;\n      this._textareaElement.value = this._textareaElement.placeholder;\n      this._cachedPlaceholderHeight = this._measureScrollHeight();\n      this._textareaElement.value = value;\n    }\n    /** Handles `focus` and `blur` events. */\n    _handleFocusEvent = event => {\n      this._hasFocus = event.type === 'focus';\n    };\n    ngDoCheck() {\n      if (this._platform.isBrowser) {\n        this.resizeToFitContent();\n      }\n    }\n    /**\n     * Resize the textarea to fit its content.\n     * @param force Whether to force a height recalculation. By default the height will be\n     *    recalculated only if the value changed since the last call.\n     */\n    resizeToFitContent(force = false) {\n      // If autosizing is disabled, just skip everything else\n      if (!this._enabled) {\n        return;\n      }\n      this._cacheTextareaLineHeight();\n      this._cacheTextareaPlaceholderHeight();\n      // If we haven't determined the line-height yet, we know we're still hidden and there's no point\n      // in checking the height of the textarea.\n      if (!this._cachedLineHeight) {\n        return;\n      }\n      const textarea = this._elementRef.nativeElement;\n      const value = textarea.value;\n      // Only resize if the value or minRows have changed since these calculations can be expensive.\n      if (!force && this._minRows === this._previousMinRows && value === this._previousValue) {\n        return;\n      }\n      const scrollHeight = this._measureScrollHeight();\n      const height = Math.max(scrollHeight, this._cachedPlaceholderHeight || 0);\n      // Use the scrollHeight to know how large the textarea *would* be if fit its entire value.\n      textarea.style.height = `${height}px`;\n      this._ngZone.runOutsideAngular(() => {\n        if (typeof requestAnimationFrame !== 'undefined') {\n          requestAnimationFrame(() => this._scrollToCaretPosition(textarea));\n        } else {\n          setTimeout(() => this._scrollToCaretPosition(textarea));\n        }\n      });\n      this._previousValue = value;\n      this._previousMinRows = this._minRows;\n    }\n    /**\n     * Resets the textarea to its original size\n     */\n    reset() {\n      // Do not try to change the textarea, if the initialHeight has not been determined yet\n      // This might potentially remove styles when reset() is called before ngAfterViewInit\n      if (this._initialHeight !== undefined) {\n        this._textareaElement.style.height = this._initialHeight;\n      }\n    }\n    _noopInputHandler() {\n      // no-op handler that ensures we're running change detection on input events.\n    }\n    /**\n     * Scrolls a textarea to the caret position. On Firefox resizing the textarea will\n     * prevent it from scrolling to the caret position. We need to re-set the selection\n     * in order for it to scroll to the proper position.\n     */\n    _scrollToCaretPosition(textarea) {\n      const {\n        selectionStart,\n        selectionEnd\n      } = textarea;\n      // IE will throw an \"Unspecified error\" if we try to set the selection range after the\n      // element has been removed from the DOM. Assert that the directive hasn't been destroyed\n      // between the time we requested the animation frame and when it was executed.\n      // Also note that we have to assert that the textarea is focused before we set the\n      // selection range. Setting the selection range on a non-focused textarea will cause\n      // it to receive focus on IE and Edge.\n      if (!this._destroyed.isStopped && this._hasFocus) {\n        textarea.setSelectionRange(selectionStart, selectionEnd);\n      }\n    }\n    static ɵfac = function CdkTextareaAutosize_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || CdkTextareaAutosize)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: CdkTextareaAutosize,\n      selectors: [[\"textarea\", \"cdkTextareaAutosize\", \"\"]],\n      hostAttrs: [\"rows\", \"1\", 1, \"cdk-textarea-autosize\"],\n      hostBindings: function CdkTextareaAutosize_HostBindings(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵlistener(\"input\", function CdkTextareaAutosize_input_HostBindingHandler() {\n            return ctx._noopInputHandler();\n          });\n        }\n      },\n      inputs: {\n        minRows: [0, \"cdkAutosizeMinRows\", \"minRows\"],\n        maxRows: [0, \"cdkAutosizeMaxRows\", \"maxRows\"],\n        enabled: [2, \"cdkTextareaAutosize\", \"enabled\", booleanAttribute],\n        placeholder: \"placeholder\"\n      },\n      exportAs: [\"cdkTextareaAutosize\"]\n    });\n  }\n  return CdkTextareaAutosize;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet TextFieldModule = /*#__PURE__*/(() => {\n  class TextFieldModule {\n    static ɵfac = function TextFieldModule_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || TextFieldModule)();\n    };\n    static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n      type: TextFieldModule\n    });\n    static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({});\n  }\n  return TextFieldModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { AutofillMonitor, CdkAutofill, CdkTextareaAutosize, TextFieldModule };\n","import { ObserversModule } from '@angular/cdk/observers';\nimport * as i0 from '@angular/core';\nimport { NgModule } from '@angular/core';\nimport { MatFormField, MatLabel, MatError, MatHint, MatPrefix, MatSuffix } from './form-field2.mjs';\nimport { MatCommonModule } from './common-module.mjs';\nlet MatFormFieldModule = /*#__PURE__*/(() => {\n  class MatFormFieldModule {\n    static ɵfac = function MatFormFieldModule_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatFormFieldModule)();\n    };\n    static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n      type: MatFormFieldModule\n    });\n    static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n      imports: [MatCommonModule, ObserversModule, MatFormField, MatCommonModule]\n    });\n  }\n  return MatFormFieldModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { MatFormFieldModule };\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Platform, getSupportedInputTypes } from '@angular/cdk/platform';\nimport { AutofillMonitor, TextFieldModule } from '@angular/cdk/text-field';\nimport * as i0 from '@angular/core';\nimport { InjectionToken, inject, ElementRef, NgZone, Renderer2, isSignal, effect, booleanAttribute, Directive, Input, NgModule } from '@angular/core';\nimport { _IdGenerator } from '@angular/cdk/a11y';\nimport { NgControl, Validators, NgForm, FormGroupDirective } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { MAT_INPUT_VALUE_ACCESSOR } from './input-value-accessor.mjs';\nimport { MAT_FORM_FIELD, MatFormFieldControl } from './form-field2.mjs';\nexport { MatError, MatFormField, MatHint, MatLabel, MatPrefix, MatSuffix } from './form-field2.mjs';\nimport { ErrorStateMatcher } from './error-options.mjs';\nimport { _ErrorStateTracker } from './error-state.mjs';\nimport { MatFormFieldModule } from './form-field-module.mjs';\nimport { MatCommonModule } from './common-module.mjs';\nimport '@angular/cdk/bidi';\nimport '@angular/common';\nimport 'rxjs/operators';\nimport '@angular/cdk/observers/private';\nimport './animation.mjs';\nimport '@angular/cdk/layout';\nimport '@angular/cdk/observers';\n\n/** @docs-private */\nfunction getMatInputUnsupportedTypeError(type) {\n  return Error(`Input type \"${type}\" isn't supported by matInput.`);\n}\n\n// Invalid input type. Using one of these will throw an MatInputUnsupportedTypeError.\nconst MAT_INPUT_INVALID_TYPES = ['button', 'checkbox', 'file', 'hidden', 'image', 'radio', 'range', 'reset', 'submit'];\n/** Injection token that can be used to provide the default options for the input. */\nconst MAT_INPUT_CONFIG = /*#__PURE__*/new InjectionToken('MAT_INPUT_CONFIG');\nlet MatInput = /*#__PURE__*/(() => {\n  class MatInput {\n    _elementRef = inject(ElementRef);\n    _platform = inject(Platform);\n    ngControl = inject(NgControl, {\n      optional: true,\n      self: true\n    });\n    _autofillMonitor = inject(AutofillMonitor);\n    _ngZone = inject(NgZone);\n    _formField = inject(MAT_FORM_FIELD, {\n      optional: true\n    });\n    _renderer = inject(Renderer2);\n    _uid = inject(_IdGenerator).getId('mat-input-');\n    _previousNativeValue;\n    _inputValueAccessor;\n    _signalBasedValueAccessor;\n    _previousPlaceholder;\n    _errorStateTracker;\n    _config = inject(MAT_INPUT_CONFIG, {\n      optional: true\n    });\n    _cleanupIosKeyup;\n    _cleanupWebkitWheel;\n    /** Whether the component is being rendered on the server. */\n    _isServer;\n    /** Whether the component is a native html select. */\n    _isNativeSelect;\n    /** Whether the component is a textarea. */\n    _isTextarea;\n    /** Whether the input is inside of a form field. */\n    _isInFormField;\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    focused = false;\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    stateChanges = new Subject();\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    controlType = 'mat-input';\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    autofilled = false;\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    get disabled() {\n      return this._disabled;\n    }\n    set disabled(value) {\n      this._disabled = coerceBooleanProperty(value);\n      // Browsers may not fire the blur event if the input is disabled too quickly.\n      // Reset from here to ensure that the element doesn't become stuck.\n      if (this.focused) {\n        this.focused = false;\n        this.stateChanges.next();\n      }\n    }\n    _disabled = false;\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    get id() {\n      return this._id;\n    }\n    set id(value) {\n      this._id = value || this._uid;\n    }\n    _id;\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    placeholder;\n    /**\n     * Name of the input.\n     * @docs-private\n     */\n    name;\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    get required() {\n      return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;\n    }\n    set required(value) {\n      this._required = coerceBooleanProperty(value);\n    }\n    _required;\n    /** Input type of the element. */\n    get type() {\n      return this._type;\n    }\n    set type(value) {\n      this._type = value || 'text';\n      this._validateType();\n      // When using Angular inputs, developers are no longer able to set the properties on the native\n      // input element. To ensure that bindings for `type` work, we need to sync the setter\n      // with the native property. Textarea elements don't support the type property or attribute.\n      if (!this._isTextarea && getSupportedInputTypes().has(this._type)) {\n        this._elementRef.nativeElement.type = this._type;\n      }\n    }\n    _type = 'text';\n    /** An object used to control when error messages are shown. */\n    get errorStateMatcher() {\n      return this._errorStateTracker.matcher;\n    }\n    set errorStateMatcher(value) {\n      this._errorStateTracker.matcher = value;\n    }\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    userAriaDescribedBy;\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    get value() {\n      return this._signalBasedValueAccessor ? this._signalBasedValueAccessor.value() : this._inputValueAccessor.value;\n    }\n    set value(value) {\n      if (value !== this.value) {\n        if (this._signalBasedValueAccessor) {\n          this._signalBasedValueAccessor.value.set(value);\n        } else {\n          this._inputValueAccessor.value = value;\n        }\n        this.stateChanges.next();\n      }\n    }\n    /** Whether the element is readonly. */\n    get readonly() {\n      return this._readonly;\n    }\n    set readonly(value) {\n      this._readonly = coerceBooleanProperty(value);\n    }\n    _readonly = false;\n    /** Whether the input should remain interactive when it is disabled. */\n    disabledInteractive;\n    /** Whether the input is in an error state. */\n    get errorState() {\n      return this._errorStateTracker.errorState;\n    }\n    set errorState(value) {\n      this._errorStateTracker.errorState = value;\n    }\n    _neverEmptyInputTypes = ['date', 'datetime', 'datetime-local', 'month', 'time', 'week'].filter(t => getSupportedInputTypes().has(t));\n    constructor() {\n      const parentForm = inject(NgForm, {\n        optional: true\n      });\n      const parentFormGroup = inject(FormGroupDirective, {\n        optional: true\n      });\n      const defaultErrorStateMatcher = inject(ErrorStateMatcher);\n      const accessor = inject(MAT_INPUT_VALUE_ACCESSOR, {\n        optional: true,\n        self: true\n      });\n      const element = this._elementRef.nativeElement;\n      const nodeName = element.nodeName.toLowerCase();\n      if (accessor) {\n        if (isSignal(accessor.value)) {\n          this._signalBasedValueAccessor = accessor;\n        } else {\n          this._inputValueAccessor = accessor;\n        }\n      } else {\n        // If no input value accessor was explicitly specified, use the element as the input value\n        // accessor.\n        this._inputValueAccessor = element;\n      }\n      this._previousNativeValue = this.value;\n      // Force setter to be called in case id was not specified.\n      this.id = this.id;\n      // On some versions of iOS the caret gets stuck in the wrong place when holding down the delete\n      // key. In order to get around this we need to \"jiggle\" the caret loose. Since this bug only\n      // exists on iOS, we only bother to install the listener on iOS.\n      if (this._platform.IOS) {\n        this._ngZone.runOutsideAngular(() => {\n          this._cleanupIosKeyup = this._renderer.listen(element, 'keyup', this._iOSKeyupListener);\n        });\n      }\n      this._errorStateTracker = new _ErrorStateTracker(defaultErrorStateMatcher, this.ngControl, parentFormGroup, parentForm, this.stateChanges);\n      this._isServer = !this._platform.isBrowser;\n      this._isNativeSelect = nodeName === 'select';\n      this._isTextarea = nodeName === 'textarea';\n      this._isInFormField = !!this._formField;\n      this.disabledInteractive = this._config?.disabledInteractive || false;\n      if (this._isNativeSelect) {\n        this.controlType = element.multiple ? 'mat-native-select-multiple' : 'mat-native-select';\n      }\n      if (this._signalBasedValueAccessor) {\n        effect(() => {\n          // Read the value so the effect can register the dependency.\n          this._signalBasedValueAccessor.value();\n          this.stateChanges.next();\n        });\n      }\n    }\n    ngAfterViewInit() {\n      if (this._platform.isBrowser) {\n        this._autofillMonitor.monitor(this._elementRef.nativeElement).subscribe(event => {\n          this.autofilled = event.isAutofilled;\n          this.stateChanges.next();\n        });\n      }\n    }\n    ngOnChanges() {\n      this.stateChanges.next();\n    }\n    ngOnDestroy() {\n      this.stateChanges.complete();\n      if (this._platform.isBrowser) {\n        this._autofillMonitor.stopMonitoring(this._elementRef.nativeElement);\n      }\n      this._cleanupIosKeyup?.();\n      this._cleanupWebkitWheel?.();\n    }\n    ngDoCheck() {\n      if (this.ngControl) {\n        // We need to re-evaluate this on every change detection cycle, because there are some\n        // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n        // that whatever logic is in here has to be super lean or we risk destroying the performance.\n        this.updateErrorState();\n        // Since the input isn't a `ControlValueAccessor`, we don't have a good way of knowing when\n        // the disabled state has changed. We can't use the `ngControl.statusChanges`, because it\n        // won't fire if the input is disabled with `emitEvents = false`, despite the input becoming\n        // disabled.\n        if (this.ngControl.disabled !== null && this.ngControl.disabled !== this.disabled) {\n          this.disabled = this.ngControl.disabled;\n          this.stateChanges.next();\n        }\n      }\n      // We need to dirty-check the native element's value, because there are some cases where\n      // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n      // updating the value using `emitEvent: false`).\n      this._dirtyCheckNativeValue();\n      // We need to dirty-check and set the placeholder attribute ourselves, because whether it's\n      // present or not depends on a query which is prone to \"changed after checked\" errors.\n      this._dirtyCheckPlaceholder();\n    }\n    /** Focuses the input. */\n    focus(options) {\n      this._elementRef.nativeElement.focus(options);\n    }\n    /** Refreshes the error state of the input. */\n    updateErrorState() {\n      this._errorStateTracker.updateErrorState();\n    }\n    /** Callback for the cases where the focused state of the input changes. */\n    _focusChanged(isFocused) {\n      if (isFocused === this.focused) {\n        return;\n      }\n      if (!this._isNativeSelect && isFocused && this.disabled && this.disabledInteractive) {\n        const element = this._elementRef.nativeElement;\n        // Focusing an input that has text will cause all the text to be selected. Clear it since\n        // the user won't be able to change it. This is based on the internal implementation.\n        if (element.type === 'number') {\n          // setSelectionRange doesn't work on number inputs so it needs to be set briefly to text.\n          element.type = 'text';\n          element.setSelectionRange(0, 0);\n          element.type = 'number';\n        } else {\n          element.setSelectionRange(0, 0);\n        }\n      }\n      this.focused = isFocused;\n      this.stateChanges.next();\n    }\n    _onInput() {\n      // This is a noop function and is used to let Angular know whenever the value changes.\n      // Angular will run a new change detection each time the `input` event has been dispatched.\n      // It's necessary that Angular recognizes the value change, because when floatingLabel\n      // is set to false and Angular forms aren't used, the placeholder won't recognize the\n      // value changes and will not disappear.\n      // Listening to the input event wouldn't be necessary when the input is using the\n      // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.\n    }\n    /** Does some manual dirty checking on the native input `value` property. */\n    _dirtyCheckNativeValue() {\n      const newValue = this._elementRef.nativeElement.value;\n      if (this._previousNativeValue !== newValue) {\n        this._previousNativeValue = newValue;\n        this.stateChanges.next();\n      }\n    }\n    /** Does some manual dirty checking on the native input `placeholder` attribute. */\n    _dirtyCheckPlaceholder() {\n      const placeholder = this._getPlaceholder();\n      if (placeholder !== this._previousPlaceholder) {\n        const element = this._elementRef.nativeElement;\n        this._previousPlaceholder = placeholder;\n        placeholder ? element.setAttribute('placeholder', placeholder) : element.removeAttribute('placeholder');\n      }\n    }\n    /** Gets the current placeholder of the form field. */\n    _getPlaceholder() {\n      return this.placeholder || null;\n    }\n    /** Make sure the input is a supported type. */\n    _validateType() {\n      if (MAT_INPUT_INVALID_TYPES.indexOf(this._type) > -1 && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n        throw getMatInputUnsupportedTypeError(this._type);\n      }\n    }\n    /** Checks whether the input type is one of the types that are never empty. */\n    _isNeverEmpty() {\n      return this._neverEmptyInputTypes.indexOf(this._type) > -1;\n    }\n    /** Checks whether the input is invalid based on the native validation. */\n    _isBadInput() {\n      // The `validity` property won't be present on platform-server.\n      let validity = this._elementRef.nativeElement.validity;\n      return validity && validity.badInput;\n    }\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    get empty() {\n      return !this._isNeverEmpty() && !this._elementRef.nativeElement.value && !this._isBadInput() && !this.autofilled;\n    }\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    get shouldLabelFloat() {\n      if (this._isNativeSelect) {\n        // For a single-selection `<select>`, the label should float when the selected option has\n        // a non-empty display value. For a `<select multiple>`, the label *always* floats to avoid\n        // overlapping the label with the options.\n        const selectElement = this._elementRef.nativeElement;\n        const firstOption = selectElement.options[0];\n        // On most browsers the `selectedIndex` will always be 0, however on IE and Edge it'll be\n        // -1 if the `value` is set to something, that isn't in the list of options, at a later point.\n        return this.focused || selectElement.multiple || !this.empty || !!(selectElement.selectedIndex > -1 && firstOption && firstOption.label);\n      } else {\n        return this.focused && !this.disabled || !this.empty;\n      }\n    }\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    get describedByIds() {\n      const element = this._elementRef.nativeElement;\n      const existingDescribedBy = element.getAttribute('aria-describedby');\n      return existingDescribedBy?.split(' ') || [];\n    }\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    setDescribedByIds(ids) {\n      const element = this._elementRef.nativeElement;\n      if (ids.length) {\n        element.setAttribute('aria-describedby', ids.join(' '));\n      } else {\n        element.removeAttribute('aria-describedby');\n      }\n    }\n    /**\n     * Implemented as part of MatFormFieldControl.\n     * @docs-private\n     */\n    onContainerClick() {\n      // Do not re-focus the input element if the element is already focused. Otherwise it can happen\n      // that someone clicks on a time input and the cursor resets to the \"hours\" field while the\n      // \"minutes\" field was actually clicked. See: https://github.com/angular/components/issues/12849\n      if (!this.focused) {\n        this.focus();\n      }\n    }\n    /** Whether the form control is a native select that is displayed inline. */\n    _isInlineSelect() {\n      const element = this._elementRef.nativeElement;\n      return this._isNativeSelect && (element.multiple || element.size > 1);\n    }\n    _iOSKeyupListener = event => {\n      const el = event.target;\n      // Note: We specifically check for 0, rather than `!el.selectionStart`, because the two\n      // indicate different things. If the value is 0, it means that the caret is at the start\n      // of the input, whereas a value of `null` means that the input doesn't support\n      // manipulating the selection range. Inputs that don't support setting the selection range\n      // will throw an error so we want to avoid calling `setSelectionRange` on them. See:\n      // https://html.spec.whatwg.org/multipage/input.html#do-not-apply\n      if (!el.value && el.selectionStart === 0 && el.selectionEnd === 0) {\n        // Note: Just setting `0, 0` doesn't fix the issue. Setting\n        // `1, 1` fixes it for the first time that you type text and\n        // then hold delete. Toggling to `1, 1` and then back to\n        // `0, 0` seems to completely fix it.\n        el.setSelectionRange(1, 1);\n        el.setSelectionRange(0, 0);\n      }\n    };\n    /** Gets the value to set on the `readonly` attribute. */\n    _getReadonlyAttribute() {\n      if (this._isNativeSelect) {\n        return null;\n      }\n      if (this.readonly || this.disabled && this.disabledInteractive) {\n        return 'true';\n      }\n      return null;\n    }\n    static ɵfac = function MatInput_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatInput)();\n    };\n    static ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n      type: MatInput,\n      selectors: [[\"input\", \"matInput\", \"\"], [\"textarea\", \"matInput\", \"\"], [\"select\", \"matNativeControl\", \"\"], [\"input\", \"matNativeControl\", \"\"], [\"textarea\", \"matNativeControl\", \"\"]],\n      hostAttrs: [1, \"mat-mdc-input-element\"],\n      hostVars: 21,\n      hostBindings: function MatInput_HostBindings(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵlistener(\"focus\", function MatInput_focus_HostBindingHandler() {\n            return ctx._focusChanged(true);\n          })(\"blur\", function MatInput_blur_HostBindingHandler() {\n            return ctx._focusChanged(false);\n          })(\"input\", function MatInput_input_HostBindingHandler() {\n            return ctx._onInput();\n          });\n        }\n        if (rf & 2) {\n          i0.ɵɵdomProperty(\"id\", ctx.id)(\"disabled\", ctx.disabled && !ctx.disabledInteractive)(\"required\", ctx.required);\n          i0.ɵɵattribute(\"name\", ctx.name || null)(\"readonly\", ctx._getReadonlyAttribute())(\"aria-disabled\", ctx.disabled && ctx.disabledInteractive ? \"true\" : null)(\"aria-invalid\", ctx.empty && ctx.required ? null : ctx.errorState)(\"aria-required\", ctx.required)(\"id\", ctx.id);\n          i0.ɵɵclassProp(\"mat-input-server\", ctx._isServer)(\"mat-mdc-form-field-textarea-control\", ctx._isInFormField && ctx._isTextarea)(\"mat-mdc-form-field-input-control\", ctx._isInFormField)(\"mat-mdc-input-disabled-interactive\", ctx.disabledInteractive)(\"mdc-text-field__input\", ctx._isInFormField)(\"mat-mdc-native-select-inline\", ctx._isInlineSelect());\n        }\n      },\n      inputs: {\n        disabled: \"disabled\",\n        id: \"id\",\n        placeholder: \"placeholder\",\n        name: \"name\",\n        required: \"required\",\n        type: \"type\",\n        errorStateMatcher: \"errorStateMatcher\",\n        userAriaDescribedBy: [0, \"aria-describedby\", \"userAriaDescribedBy\"],\n        value: \"value\",\n        readonly: \"readonly\",\n        disabledInteractive: [2, \"disabledInteractive\", \"disabledInteractive\", booleanAttribute]\n      },\n      exportAs: [\"matInput\"],\n      features: [i0.ɵɵProvidersFeature([{\n        provide: MatFormFieldControl,\n        useExisting: MatInput\n      }]), i0.ɵɵNgOnChangesFeature]\n    });\n  }\n  return MatInput;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet MatInputModule = /*#__PURE__*/(() => {\n  class MatInputModule {\n    static ɵfac = function MatInputModule_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || MatInputModule)();\n    };\n    static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n      type: MatInputModule\n    });\n    static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n      imports: [MatCommonModule, MatFormFieldModule, MatFormFieldModule, TextFieldModule, MatCommonModule]\n    });\n  }\n  return MatInputModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nexport { MAT_INPUT_CONFIG, MAT_INPUT_VALUE_ACCESSOR, MatInput, MatInputModule, getMatInputUnsupportedTypeError };\n","import { Component} from '@angular/core';\r\n@Component({\r\n  selector: 'app-hero',\r\n  imports: [],\r\n  templateUrl: './hero.component.html',\r\n  styleUrl: './hero.component.sass'\r\n})\r\nexport class HeroComponent {\r\n\r\n  scrollToSection(sectionTitle: string): void {\r\n    const section = document.getElementById(sectionTitle) as HTMLElement;\r\n    section.scrollIntoView({\r\n      behavior: 'smooth',\r\n      block: 'center'\r\n    });\r\n  }\r\n}\r\n","<section #home id=\"home\" class=\"hero-section\">\r\n\r\n  <!-- Background shapes -->\r\n  <div class=\"background-shapes\">\r\n    <div class=\"shape shape1\"></div>\r\n    <div class=\"shape shape2\"></div>\r\n    <div class=\"shape shape3\"></div>\r\n    <div class=\"grid-pattern\"></div>\r\n  </div>\r\n\r\n  <div class=\"container\">\r\n    <!-- Text content -->\r\n    <div class=\"grid-container\">\r\n      <div class=\"hero-content\">\r\n        <div class=\"hero-badge\">\r\n          <svg class=\"icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n            <path d=\"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5A2.5 2.5 0 1 1 12 6a2.5 2.5 0 0 1 0 5.5z\"/>\r\n          </svg>\r\n          <span>Basé à Pau • Disponible partout en France</span>\r\n        </div>\r\n        <h1 class=\"hero-title \">\r\n          <strong class=\"highlight\">Création de sites web</strong> performants pour indépendants et PME\r\n        </h1>\r\n\r\n        <p class=\"hero-subtitle\">\r\n          Développeur web freelance spécialisé en Angular, Symfony et WordPress.\r\n          Des sites rapides, optimisés SEO et conçus pour transformer vos visiteurs en clients.\r\n        </p>\r\n\r\n        <div class=\"cta\">\r\n          <button (click)=\"scrollToSection('contact')\" class=\"btn btn-primary\">Discutons de votre projet</button>\r\n          <button (click)=\"scrollToSection('portfolio')\" class=\"btn btn-realisations btn-secondary \">Voir mes\r\n            réalisations\r\n          </button>\r\n        </div>\r\n\r\n        <!-- Accessible SEO text (white-hat, non visible) -->\r\n        <p class=\"sr-only\">\r\n          Développeur web freelance en France spécialisé en Angular, Symfony et WordPress.\r\n          Création de sites vitrines professionnels, solutions e-commerce et applications web sur mesure,\r\n          optimisées pour la performance et le référencement naturel (SEO).\r\n        </p>\r\n\r\n        <!-- Trust indicators -->\r\n        <div class=\"hero-trust\">\r\n          <div class=\"trust-item\">\r\n            <svg class=\"icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n              <path d=\"M4 6h16M4 12h16M4 18h16\"/>\r\n            </svg>\r\n            <span>Développement sur mesure</span>\r\n          </div>\r\n\r\n          <div class=\"trust-item\">\r\n            <svg class=\"icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n              <circle cx=\"12\" cy=\"12\" r=\"9\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/>\r\n              <path d=\"M12 7v5l3 2\"/>\r\n            </svg>\r\n            <span>Optimisé pour Google</span>\r\n          </div>\r\n\r\n          <div class=\"trust-item\">\r\n            <svg class=\"icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n              <path d=\"M12 2l8 4v6c0 5-3.5 9.74-8 10-4.5-.26-8-5-8-10V6l8-4z\"/>\r\n            </svg>\r\n            <span>Performance & sécurité</span>\r\n          </div>\r\n        </div>\r\n\r\n      </div>\r\n      <div class=\"hero-illustration\">\r\n        <img src=\"/assets/img/hero-mockup-3.webp\" alt=\"Création de site web professionnel optimisé pour le référencement SEO\" width=\"835\" height=\"662\" fetchpriority=\"high\" loading=\"eager\" class=\"img-fluid\">\r\n\r\n      </div>\r\n    </div>\r\n\r\n\r\n\r\n\r\n\r\n    <div class=\"scroll-animation\">\r\n\r\n    </div>\r\n  </div>\r\n\r\n</section>\r\n","import { Component} from '@angular/core';\r\nimport {myInfo} from '../../../../core/data/my-data';\r\nimport {AnimatedTextDirective} from '../../../../core/directives/animated-text.directive';\r\nimport {AnimatedCardDirective} from '../../../../core/directives/animated-card.directive';\r\n\r\n@Component({\r\n  selector: 'app-about',\r\n  imports: [\r\n  ],\r\n  templateUrl: './about.component.html',\r\n  styleUrl: './about.component.sass'\r\n})\r\nexport class AboutComponent{\r\n\r\n  protected readonly myData = myInfo;\r\n\r\n\r\n  scrollToSection(sectionTitle: string): void {\r\n    const section = document.getElementById(sectionTitle) as HTMLElement;\r\n    section.scrollIntoView({\r\n      behavior: 'smooth',\r\n      block: 'center'\r\n    });\r\n  }\r\n}\r\n","\r\n<section #about id=\"about\" class=\"about-section\">\r\n  <!-- Background elements -->\r\n  <div class=\"background-decor\">\r\n    <div class=\"circle bottom-left\"></div>\r\n    <div class=\"circle top-right\"></div>\r\n  </div>\r\n\r\n  <div class=\"container\">\r\n    <div class=\"about-content\">\r\n      <!-- Image column -->\r\n      <div class=\"about-image\" >\r\n        <div class=\"image-wrapper\">\r\n          <img\r\n            src=\"{{'assets/img/hero-2.webp'}}\"\r\n            alt=\"Cristian Tudoroiu, développeur web freelance spécialisé Angular et Symfony\"\r\n            loading=\"lazy\"\r\n            width=\"512\"\r\n            height=\"768\"\r\n            decoding=\"async\"\r\n\r\n          />\r\n          <div class=\"decor-box small\"></div>\r\n          <div class=\"decor-box large\"></div>\r\n\r\n          <!-- Floating skill badge -->\r\n          <div class=\"skill-badge\">\r\n            <span class=\"icon\"> <svg height=\"25px\" width=\"25px\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n                                     xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g\r\n              id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path\r\n              d=\"M9 8L5 11.6923L9 16M15 8L19 11.6923L15 16\" stroke=\"#10B981\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n              stroke-linejoin=\"round\"></path> </g></svg></span>\r\n            <span> Clean Code</span>\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Text column -->\r\n      <div class=\"about-text\">\r\n        <h2 class=\"title\" >\r\n          Développeur Web Freelance <span>Angular & Symfony</span>\r\n        </h2>\r\n        <p class=\"subtitle\">Je conçois des sites performants, optimisés SEO et pensés pour générer des résultats concrets.</p>\r\n\r\n        <div class=\"divider\"></div>\r\n\r\n        <div class=\"intro\">\r\n          <p>\r\n            Basé à Pau, en Nouvelle-Aquitaine, j’accompagne mes clients en tant que\r\n            <strong>développeur web freelance</strong> spécialisé en\r\n            <strong>Angular</strong>, <strong>Symfony</strong> et <strong>WordPress</strong>,\r\n            avec plus de {{ myData.yearsOfExperience }} ans d’expérience dans la\r\n            <strong>création de sites vitrines</strong>,\r\n            les <strong>solutions e-commerce</strong> et les\r\n            <strong>applications web sur mesure</strong>.\r\n          </p>\r\n\r\n          <p>\r\n            J’accompagne les entrepreneurs et les entreprises dans le développement de\r\n            plateformes performantes, optimisées pour la vitesse, la sécurité et le\r\n            <strong>référencement naturel (SEO)</strong>.\r\n            Mon objectif est simple : créer des sites qui ne sont pas seulement esthétiques,\r\n            mais qui génèrent des résultats concrets.\r\n          </p>\r\n\r\n          <p>\r\n            Mon rôle ne se limite pas au développement.\r\n            Je conçois des sites pensés pour améliorer votre visibilité sur Google,\r\n            renforcer votre crédibilité et transformer davantage de visiteurs en prospects.\r\n          </p>\r\n\r\n          <p>\r\n            Que vous ayez besoin d’une refonte complète, d’un développement spécifique\r\n            ou d’une intégration d’API, je vous propose une approche structurée,\r\n            orientée performance et adaptée à vos objectifs.\r\n          </p>\r\n        </div>\r\n        <p class=\"sr-only\">\r\n          Développeur web freelance en France spécialisé en Angular, Symfony et WordPress.\r\n          Création de sites vitrines professionnels, applications web sur mesure et optimisation SEO.\r\n        </p>\r\n\r\n\r\n        <!-- Skills -->\r\n        <div class=\"skills\">\r\n          <h3>Compétences techniques & expertise web</h3>\r\n          <div class=\"skills-list\">\r\n            <div class=\"skill-item\"><span class=\"dot\"></span> JavaScript (ES6+)</div>\r\n            <div class=\"skill-item\"><span class=\"dot\"></span> Angular & TypeScript</div>\r\n            <div class=\"skill-item\"><span class=\"dot\"></span> PHP & Symfony</div>\r\n            <div class=\"skill-item\"><span class=\"dot\"></span> WordPress</div>\r\n            <div class=\"skill-item\"><span class=\"dot\"></span> UI/UX & Performance Web</div>\r\n\r\n          </div>\r\n        </div>\r\n\r\n        <!-- Services preview -->\r\n        <div class=\"services\">\r\n          <div class=\"service-item\">\r\n            <div class=\"icon\">🌐</div>\r\n            <div>\r\n              <h4>Création de site vitrine & application web</h4>\r\n              <p>Développement sur mesure (Angular, Symfony) orienté performance et conversion.</p>\r\n\r\n            </div>\r\n          </div>\r\n          <div class=\"service-item\">\r\n            <div class=\"icon\">🖥️</div>\r\n            <div>\r\n              <h4>Intégration d’API & automatisations</h4>\r\n              <p>Paiement, réservation, CRM, email, Google Maps : connexion à vos outils métier.</p>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"about-cta\">\r\n          <a href=\"#portfolio\" class=\"btn secondary\">Voir mon portfolio</a>\r\n        </div>\r\n\r\n      </div>\r\n    </div>\r\n  </div>\r\n\r\n</section>\r\n","export const services = [\r\n  {\r\n    title: 'Création de site vitrine professionnel',\r\n    icon: '/assets/svg/display.svg',\r\n    description:\r\n      'Site vitrine conçu pour améliorer votre visibilité sur Google, valoriser votre activité et générer davantage de demandes de contact.'\r\n  },\r\n  {\r\n    title: 'Création de site e-commerce',\r\n    icon: '/assets/svg/shop.svg',\r\n    description:\r\n      'Boutique en ligne performante avec paiement sécurisé, gestion simplifiée des produits et optimisation des ventes.'\r\n  },\r\n  {\r\n    title: 'Développement d’applications web sur mesure',\r\n    icon: '/assets/svg/code.svg',\r\n    description:\r\n      'Solutions métiers personnalisées développées avec Angular ou Symfony pour automatiser vos processus et gagner en efficacité.'\r\n  },\r\n  {\r\n    title: 'Refonte et optimisation de site web',\r\n    icon: '/assets/svg/arrows-rotate.svg',\r\n    description:\r\n      'Modernisation de votre site pour améliorer son design, sa vitesse de chargement et ses performances SEO.'\r\n  },\r\n  {\r\n    title: 'Maintenance et support technique',\r\n    icon: '/assets/svg/tools.svg',\r\n    description:\r\n      'Mises à jour, sécurité, corrections et accompagnement continu pour garantir la fiabilité de votre site.'\r\n  },\r\n  {\r\n    title: 'Optimisation SEO et référencement naturel',\r\n    icon: '/assets/svg/optimisation.svg',\r\n    description:\r\n      'Amélioration de la structure technique, des performances et du contenu pour gagner en visibilité sur Google.'\r\n  }\r\n];\r\n","import { Component} from '@angular/core';\r\nimport {services} from '../../../../core/data/my-services';\r\nimport {NgOptimizedImage} from '@angular/common';\r\nimport {AnimatedTextDirective} from '../../../../core/directives/animated-text.directive';\r\nimport {AnimatedCardDirective} from '../../../../core/directives/animated-card.directive';\r\nimport {LucideMapPin} from '@lucide/angular';\r\n\r\n@Component({\r\n  selector: 'app-services',\r\n  imports: [\r\n    NgOptimizedImage,\r\n    LucideMapPin,\r\n  ],\r\n  templateUrl: './services.component.html',\r\n  styleUrl: './services.component.sass'\r\n})\r\nexport class ServicesComponent {\r\n\r\n  protected readonly myServices = services;\r\n}\r\n","<section #services id=\"services\" class=\"services-section\">\r\n  <!-- Background elements -->\r\n  <div class=\"background\">\r\n    <div class=\"circle circle-left\"></div>\r\n    <div class=\"circle circle-right\"></div>\r\n  </div>\r\n\r\n  <div class=\"container\">\r\n    <!-- Section header -->\r\n    <div class=\"section-header\">\r\n      <h2 class=\"service-title\" > Création de <span>sites web</span>, <span>e-commerce </span>et <span>applications sur mesure</span></h2>\r\n      <p class=\"section-subtitle\">\r\n        Création de <strong>sites vitrines</strong>, <strong>boutiques e-commerce</strong> et <strong>applications web sur mesure</strong>,\r\n        avec un focus sur la <strong>performance</strong>, la <strong>sécurité</strong> et la <strong> visibilité sur Google</strong>.\r\n      </p>\r\n\r\n      <div class=\"divider\"></div>\r\n    </div>\r\n\r\n    <!-- Services grid -->\r\n    <div class=\"services-grid\">\r\n      @for (service of myServices; track $index; ) {\r\n        <!-- Service Card 1 -->\r\n        <div class=\"service-card animated-card\" >\r\n          <div class=\"hover-bar\"></div>\r\n          <div class=\"icon-wrapper\">\r\n            <img [ngSrc]=\"service.icon\"\r\n                 width=\"44\"\r\n                 height=\"44\"\r\n                 alt=\"\"\r\n                 aria-hidden=\"true\"/>\r\n          </div>\r\n          <h3>{{ service.title }}</h3>\r\n          <p>\r\n            {{ service.description }}\r\n          </p>\r\n        </div>\r\n      }\r\n    </div>\r\n    <p class=\"services-local\">\r\n      <span class=\"pin\"><svg lucideMapPin></svg></span>\r\n      Basé à Pau, j’interviens en Nouvelle-Aquitaine et partout en France.\r\n    </p>\r\n    <div class=\"services-cta\">\r\n      <a href=\"#contact\" class=\"btn primary\">Discutons de votre projet</a>\r\n    </div>\r\n\r\n\r\n  </div>\r\n</section>\r\n","import {Project} from '../interfaces/project.interface';\r\n\r\nexport const projectsData: Project[] = [\r\n  {\r\n    number: '01',\r\n    client: 'Media Immo',\r\n    title: 'Naturals Risks',\r\n    imagePath: '/assets/img/project-img/nat-resized.webp',\r\n    imageWidth : '710',\r\n    imageHeight:'473',\r\n    shortDescription: \"Application est dédié à la génération en ligne d'États des Risques et Pollutions (ERP) pour les diagnostiqueurs\",\r\n    impact: \"Automatisation de la génération d’ERP et des documents (factures/PDF/signature) pour fluidifier le travail des diagnostiqueurs.\",\r\n    description: {\r\n      fr: [\r\n        \"Cette application est dédié à la génération en ligne d'États des Risques et Pollutions (ERP) pour les diagnostiqueurs, des documents obligatoires lors de transactions immobilières en France. Ce service est exclusivement réservé aux utilisateurs du logiciel Liciel Diagnostics, avec lequel il est entièrement intégré. Cette intégration permet aux professionnels de l'immobilier et du diagnostic de créer facilement des ERP conformes aux réglementations en vigueur.\",\r\n        \"J'ai eu l'opportunité de travailler sur l'application NaturalsRisks, où j'ai réalisé diverses missions allant de la maintenance corrective à l'ajout de nouvelles fonctionnalités.\",\r\n        \"Mes principales contributions incluent : \",\r\n\r\n      ],\r\n      en: [\"This application is dedicated to the online generation of Risk and Pollution Reports (ERP) for property inspectors—mandatory documents required during real estate transactions in France. This service is exclusively reserved for users of the Liciel Diagnostics software, with which it is fully integrated. This integration enables real estate and inspection professionals to easily create ERP documents that comply with current regulations.\",\r\n        \"I had the opportunity to work on the NaturalsRisks application, where I carried out various tasks ranging from bug fixes to the implementation of new features.\",\r\n        \"My main contributions include:\"\r\n      ]\r\n    },\r\n    missions: {\r\n      fr: [\r\n        \"Mise en place d'un nouveau système de paiement avec LCL pour offrir plus de flexibilité aux utilisateurs.\",\r\n        \"Ajout d'un module de demande de documents permettant désormais aux utilisateurs de solliciter des documents d'urbanisme en plus des ERP.\",\r\n        \"Création d'un système de facturation comprenant un script de facturation automatisé, ainsi que la génération de factures et de contrats au format PDF.\",\r\n        \"Intégration de solutions de signature électronique, d'abord avec Docusign, puis avec YouSign pour optimiser la gestion des signatures.\",\r\n        \"Implémentation d'un système d'envoi de mails, améliorant ainsi la communication avec les utilisateurs.\",\r\n        \"Refonte de l'interface utilisateur, notamment la landing page et d'autres pages clés du site, pour améliorer l'expérience utilisateur et l'esthétique de la plateforme.\",\r\n        \"Ces améliorations ont permis d'enrichir l'offre de services de l'application et d'optimiser son efficacité pour les utilisateurs.\",\r\n        \"Mes principales contributions incluent : \",\r\n      ],\r\n      en: [\r\n        \"Implemented a new payment system with LCL to provide users with greater flexibility.\",\r\n\r\n        \"Added a document request module, allowing users to request urban planning documents in addition to ERP reports.\",\r\n\r\n        \"Created a billing system, including an automated billing script and the generation of invoices and contracts in PDF format.\",\r\n\r\n        \"Integrated electronic signature solutions, initially with DocuSign, then with YouSign, to streamline signature management.\",\r\n\r\n        \"Implemented an email sending system, enhancing communication with users.\",\r\n\r\n        \"Redesigned the user interface, including the landing page and other key site pages, to improve user experience and platform aesthetics.\",\r\n\r\n        \"These improvements enriched the application’s service offering and enhanced its efficiency for users.\",\r\n\r\n        \"My main contributions include:\",\r\n      ]\r\n    },\r\n    imageName: ['nr_before.png', 'nr_after.png',],\r\n    technos: ['PHP', 'MySql', 'HTML', 'CSS', 'Jquery', 'AngularJS', 'LCL Sherlock\\'s', 'wkhtmltopdf', 'DocuSign', 'YouSign'],\r\n    url: 'https://naturalsrisks.com/'\r\n\r\n  },\r\n  {\r\n    number: '02',\r\n    client: 'Media Immo',\r\n    title: 'Nota Risques Urba',\r\n    imagePath: '/assets/img/project-img/not-resized.webp',\r\n    imageWidth : '710',\r\n    imageHeight:'473',\r\n    shortDescription: \"Plateforme en ligne dédiée aux notaires, offrant des services dématérialisés .\",\r\n    impact: \"Refonte complète (Angular + Symfony) pour moderniser la plateforme, sécuriser les accès et digitaliser les commandes notaires.\",\r\n    description: {\r\n      fr: [\r\n        'Le site Nota Risques Urba est une plateforme en ligne dédiée aux notaires, offrant des services dématérialisés pour la génération d\\'États des Risques et Pollutions (ERP) et la fourniture de documents d\\'urbanisme. Ces services sont disponibles en ligne ou sur commande, facilitant ainsi les démarches des études notariales.',\r\n        \"Ce projet a été réalisé en collaboration avec plusieurs membres de l’équipe, en suivant la méthodologie Agile pour assurer un développement itératif et une réactivité optimale aux besoins du client. Nous avons utilisé Trello pour la gestion du projet, ce qui a permis une coordination fluide des différentes étapes. J'ai participé activement à la refonte complète de l'application Nota-Risques-Urba, un projet ambitieux qui a impliqué une restructuration technique approfondie, allant de la refonte de l'architecture à la mise en place de nouvelles fonctionnalités pour améliorer l’expérience utilisateur.\",\r\n        \"Mes principales contributions incluent : \",\r\n      ], en: [\r\n        \"The Nota Risques Urba website is an online platform designed for notaries, offering digital services for generating Risk and Pollution Reports (ERP) and providing urban planning documents. These services are available online or on demand, making the administrative process easier for notarial offices.\",\r\n        \"This project was carried out in collaboration with several team members, following the Agile methodology to ensure iterative development and optimal responsiveness to client needs. We used Trello for project management, which enabled smooth coordination of the various development phases. I actively participated in the complete redesign of the Nota Risques Urba application—an ambitious project involving a thorough technical restructuring, from architectural overhaul to the implementation of new features aimed at enhancing user experience.\",\r\n        \"My main contributions include:\"\r\n      ]\r\n\r\n    },\r\n    missions: {\r\n      fr: [\"Restructuration de la base de données pour optimiser les performances et l'organisation des données.\",\r\n        \"Refonte graphique en collaboration avec un web designer pour moderniser l’image du site et améliorer l’expérience utilisateur.\",\r\n        \"Développement du front-end en Angular, en reproduisant fidèlement les maquettes fournies.\",\r\n        \"Développement du back-end en Symfony, en mettant en place une API robuste et performante.\",\r\n        \"Connexion entre le front et le back via une API sécurisée.\",\r\n        \"Implémentation de l’authentification JWT, permettant une gestion sécurisée des sessions utilisateurs.\",\r\n        \"Mise en place d’un système de gestion des comptes avec différents rôles et niveaux d'accès.\",\r\n        \"Intégration d’un moyen de paiement CB via SystemPay pour la gestion des transactions en ligne.\",\r\n        \"Développement d’un script de génération de contrats PDF, leur stockage sur AWS, et leur signature électronique avec YouSign.\"\r\n      ],\r\n      en: [\r\n        \"Restructured the database to optimize performance and data organization.\",\r\n\r\n        \"Redesigned the UI in collaboration with a web designer to modernize the site’s image and enhance user experience.\",\r\n\r\n        \"Developed the front-end using Angular, accurately reproducing the provided mockups.\",\r\n\r\n        \"Developed the back-end using Symfony, building a robust and high-performance API.\",\r\n\r\n        \"Connected the front-end and back-end via a secure API.\",\r\n\r\n        \"Implemented JWT authentication for secure user session management.\",\r\n\r\n        \"Set up an account management system with different roles and access levels.\",\r\n\r\n        \"Integrated credit card payment via SystemPay for handling online transactions.\",\r\n\r\n        \"Developed a script to generate PDF contracts, store them on AWS, and have them electronically signed using YouSign.\",\r\n\r\n\r\n      ]\r\n    },\r\n    imageName: ['not_before.png', 'not_after.png', 'not_compte_before.png', 'not_compte_after.png'],\r\n    technos: ['Symfony', 'JWT', 'MySql', 'HTML', 'Sass / Sccs', 'Angular', 'TypeScript', 'SystemPay', 'wkhtmltopdf', 'AWS S3', 'YouSign', 'Figma', 'Trello'],\r\n    url: 'https://www.nota-risques-urba.fr/'\r\n\r\n  },\r\n  {\r\n    number: '03',\r\n    client: 'Media Immo',\r\n    title: 'Commercial',\r\n    imagePath: '/assets/img/project-img/commercial-resized.webp',\r\n    imageWidth : '710',\r\n    imageHeight:'473',\r\n    shortDescription: \"Une solution interne dédiée à la gestion administrative d'une entreprise.\",\r\n    impact: \"Optimisation des processus internes (comptes, paiements, crédits, SAV) avec une interface plus rapide et plus ergonomique.\",\r\n    description: {\r\n      fr: [\r\n        'Commercial est une solution interne dédiée à la gestion des comptes des collaborateurs, incluant la gestion des agendas administratifs et la comptabilité. Elle permet aux commerciaux sédentaires de suivre les abonnements, les paiements et la modification des données des comptes clients. L\\'outil offre également la possibilité de créditer les clients, avec des crédits utilisables sur diverses plateformes de l\\'entreprise, tout en facilitant la gestion des comptes utilisateurs lors des appels au service après-vente (SAV).',\r\n        \"La refonte de l'outil Commercial a impliqué une révision complète de ses fonctionnalités pour améliorer l'ergonomie et l'efficacité des processus internes. Cette mise à jour a optimisé la gestion des comptes collaborateurs, des agendas administratifs et de la comptabilité. Elle a également renforcé les capacités des commerciaux sédentaires en matière de suivi client, de gestion des abonnements, paiements et crédits. De plus, la refonte a amélioré la gestion des comptes utilisateurs lors des appels SAV, offrant une interface plus fluide et plus performante.\",\r\n        \"Mes principales contributions incluent : \"\r\n      ], en: [\r\n        \"Commercial is an internal solution dedicated to managing employee accounts, including administrative schedules and accounting. It allows in-house sales representatives to track subscriptions, payments, and customer account data updates. The tool also enables crediting clients, with credits usable across various company platforms, while streamlining account management during customer service (SAV) calls.\",\r\n        \"The redesign of the Commercial tool involved a complete overhaul of its features to improve usability and the efficiency of internal processes. This update optimized the management of employee accounts, administrative scheduling, and accounting. It also enhanced the capabilities of in-house sales representatives in terms of client tracking, subscription, payment, and credit management. Additionally, the redesign improved user account handling during support calls by providing a smoother and more efficient interface.\",\r\n        \"My main contributions include: \",\r\n      ]\r\n    },\r\n    missions: {\r\n      fr: [\r\n        'Restructuration des fonctionnalités pour améliorer l\\'efficacité de la gestion des comptes collaborateurs, de l\\'agenda administratif et de la comptabilité.',\r\n        \"Optimisation de l'expérience utilisateur pour les commerciaux sédentaires, avec une gestion simplifiée des abonnements, paiements et modifications de données clients.\",\r\n        \"Amélioration de la gestion des crédits offerts aux clients, et de la gestion des comptes utilisateurs lors des appels SAV.\",\r\n        \"Mise à jour de l’interface pour une meilleure fluidité et performance globale de l’application\",\r\n        \"Refonte visuelle pour moderniser l'interface et améliorer l'ergonomie, permettant ainsi une meilleure expérience utilisateur pour les commerciaux sédentaires.\"\r\n      ],\r\n      en: [\r\n        \"Restructured features to enhance the efficiency of employee account management, administrative scheduling, and accounting.\",\r\n\r\n        \"Optimized the user experience for in-house sales representatives through simplified management of subscriptions, payments, and customer data updates.\",\r\n\r\n        \"Improved the management of client-issued credits and user accounts during customer service (SAV) calls.\",\r\n\r\n        \"Updated the interface to ensure smoother navigation and overall better performance of the application.\",\r\n\r\n        \"Redesigned the UI to modernize the interface and improve usability, providing a better experience for in-house sales teams.\",\r\n\r\n\r\n      ]\r\n    },\r\n    imageName: ['commercial_before.png', 'commercial_after.png', 'commercial_recherche_before.png', 'commercial_recherche_after.png', 'commercial_fiche_before.png', 'commercial_fiche_after.png'],\r\n    technos: ['Symfony', 'JWT', 'MySql', 'HTML', 'Sass', 'Angular', 'TypeScript', 'AWS S3', 'Figma', 'Trello'],\r\n    url: null\r\n\r\n  },\r\n  // {\r\n  //   number: '04',\r\n  //   client: 'Personnal',\r\n  //   title: 'Gestion financière',\r\n  //   imagePath :'/assets/img/project-img/picobank-resized.png',\r\n  //   shortDescription:'Application moderne de gestion des finances personnelles avec suivi détaillé des revenus, dépenses et factures.',\r\n  //   description: {\r\n  //     fr: [\r\n  //       \"Ayant conçu et développé cette application de A à Z, j’ai imaginé son concept, défini son design et développé l’ensemble de ses fonctionnalités pour offrir une solution complète et intuitive de gestion des finances personnelles.\",\r\n  //\r\n  //       \"L’application permet aux utilisateurs de suivre en détail leurs revenus, dépenses ponctuelles et récurrentes, ainsi que leurs factures via une interface ergonomique et moderne. J’ai mis en place des fonctionnalités avancées comme l’automatisation des transactions récurrentes, une catégorisation intelligente des dépenses, et la gestion efficace des pièces jointes (factures, tickets de caisse).\",\r\n  //\r\n  //       \"L’interface a été pensée pour offrir une expérience fluide, avec une navigation optimisée et un système de personnalisation avancé, permettant aux utilisateurs d’adapter l’application à leurs besoins spécifiques. J’ai également intégré des mesures de sécurité renforcées pour garantir la protection des données et assurer la confidentialité des informations financières.\"\r\n  //     ], en: [\"Having designed and developed this application from A to Z, I imagined its concept, defined its design, and built all of its features to offer a complete and intuitive personal finance management solution.\",\r\n  //       \"The application allows users to track their income, one-time and recurring expenses, as well as bills, through a modern and user-friendly interface. I implemented advanced features such as automated recurring transactions, intelligent expense categorization, and efficient management of attachments (invoices, receipts).\",\r\n  //       \"The interface was designed to provide a smooth experience, with optimized navigation and an advanced personalization system, allowing users to tailor the application to their specific needs. I also integrated enhanced security measures to ensure data protection and guarantee the confidentiality of financial information.\",\r\n  //     ]\r\n  //   },\r\n  //   missions: {\r\n  //     fr: [\r\n  //       \"Idéation et définition du concept de l'application\",\r\n  //       \"Conception de l'architecture technique (base de données, API, front-end, back-end)\",\r\n  //       \"Définition des fonctionnalités principales et secondaires\",\r\n  //       \"Élaboration des maquettes et wireframes pour l’interface utilisateur\",\r\n  //       \"Développement de l’interface utilisateur avec un design moderne et intuitif\",\r\n  //       \"Implémentation de la navigation et des interactions dynamiques\",\r\n  //       \"Personnalisation de l’interface pour une meilleure adaptabilité aux besoins des utilisateurs\",\r\n  //       \"Création de l’API pour la gestion des comptes, transactions et pièces jointes\",\r\n  //       \"Mise en place d’un système de gestion des utilisateurs et des rôles\",\r\n  //       \"Intégration de la gestion des dépenses et revenus récurrents avec automatisation\",\r\n  //       \"Mise en place d’un stockage sécurisé pour les pièces jointes (factures, reçus)\",\r\n  //       \"Implémentation d’un système d’authentification sécurisé\",\r\n  //       \"Protection des données personnelles et des transactions financières\",\r\n  //       \"Optimisation des performances de l’application pour une utilisation fluide\",\r\n  //       \"Automatisation des transactions récurrentes\",\r\n  //       \"Catégorisation intelligente des dépenses et revenus\",\r\n  //       \"Mise en place d’un tableau de bord avec visualisation des finances\",\r\n  //       \"Système de recherche et filtrage des transactions\",\r\n  //       \"Hébergement et mise en ligne de l’application\",\r\n  //       \"Tests et corrections des bugs pour garantir la stabilité du système\",\r\n  //       \"Mise en place d’un suivi et d’évolutions futures en fonction des retours utilisateurs\"\r\n  //     ],\r\n  //     en: [\r\n  //       \"Ideation and definition of the application concept\",\r\n  //\r\n  //       \"Design of the technical architecture (database, API, front-end, back-end)\",\r\n  //\r\n  //       \"Definition of primary and secondary features\",\r\n  //\r\n  //       \"Creation of mockups and wireframes for the user interface\",\r\n  //\r\n  //       \"Development of a modern and intuitive user interface\",\r\n  //\r\n  //       \"Implementation of navigation and dynamic interactions\",\r\n  //\r\n  //       \"Customization of the interface for better adaptability to user needs\",\r\n  //\r\n  //       \"Creation of an API for managing accounts, transactions, and attachments\",\r\n  //\r\n  //       \"Implementation of a user and role management system\",\r\n  //\r\n  //       \"Integration of recurring income and expense management with automation\",\r\n  //\r\n  //       \"Setup of secure storage for attachments (invoices, receipts)\",\r\n  //\r\n  //       \"Implementation of a secure authentication system\",\r\n  //\r\n  //       \"Protection of personal data and financial transactions\",\r\n  //\r\n  //       \"Optimization of application performance for smooth usage\",\r\n  //\r\n  //       \"Automation of recurring transactions\",\r\n  //\r\n  //       \"Intelligent categorization of expenses and income\",\r\n  //\r\n  //       \"Setup of a dashboard with financial visualizations\",\r\n  //\r\n  //       \"Search and filter system for transactions\",\r\n  //\r\n  //       \"Hosting and deployment of the application\",\r\n  //\r\n  //       \"Testing and debugging to ensure system stability\",\r\n  //\r\n  //       \"Setup of monitoring and future improvements based on user feedback\",\r\n  //     ]\r\n  //   },\r\n  //   imageName: ['url1', 'url2'],\r\n  //   technos: [\"Angular\", \"HTML/SASS\", \"TypeScript\", \"Symfony\", \"PHP\", \"API Platform\", \"Doctrine ORM\", \"MySQL\", \"JWT (JSON Web Tokens)\", \"OAuth\", \"AWS S3\", \"Trello\", \"GitHub\"\r\n  //   ],\r\n  //   url: null,\r\n  //\r\n  // },\r\n  {\r\n    number: '05',\r\n    client: 'DCT FOLIERUNG',\r\n    title: 'Wrap company',\r\n    imagePath: '/assets/img/project-img/dct-folierung-resized.webp',\r\n    imageWidth : '710',\r\n    imageHeight:'473',\r\n    shortDescription: 'Création d’un site WordPress élégant et optimisé pour valoriser les services de covering auto et améliorer la visibilité en ligne.',\r\n    impact: \"Création d’une vitrine WordPress optimisée SEO pour renforcer la visibilité locale et générer plus de demandes via le site.\",\r\n    description: {\r\n      fr: [\r\n        \"J’ai conçu et développé un site web vitrine sous WordPress pour une entreprise spécialisée dans le covering automobile. L’objectif principal était de créer une présence en ligne professionnelle et attrayante, mettant en valeur les services de personnalisation de véhicules proposés par l’entreprise. Le site présente une interface claire et moderne, avec une navigation intuitive facilitant l’accès aux informations essentielles : présentation des services, galerie photos des réalisations, témoignages clients, et formulaire de contact. J’ai veillé à optimiser le référencement naturel (SEO) pour améliorer la visibilité du site sur les moteurs de recherche, tout en garantissant une expérience utilisateur fluide et responsive sur tous les supports (ordinateurs, tablettes, smartphones).\"\r\n      ],\r\n      en: [\"I designed and developed a showcase website using WordPress for a company specializing in vehicle wrapping services. The main goal was to create a professional and attractive online presence that highlights the company’s vehicle customization offerings. The site features a clean and modern interface with intuitive navigation, allowing easy access to essential information: service descriptions, a photo gallery showcasing completed projects, customer testimonials, and a contact form. I ensured natural SEO optimization to improve the site’s visibility on search engines, while delivering a smooth and responsive user experience across all devices (desktops, tablets, smartphones).\"]\r\n    },\r\n    missions: {\r\n      fr: [\r\n        \"Analyse des besoins du client et définition des objectifs du site web\",\r\n        \"Conception de l’architecture du site et organisation des contenus\",\r\n        \"Création de maquettes graphiques adaptées à l’identité visuelle de l’entreprise\",\r\n        \"Installation et configuration de WordPress, choix et personnalisation d’un thème adapté\",\r\n        \"Intégration des contenus : textes, images, vidéos, galerie photo des réalisations\",\r\n        \"Mise en place d’un formulaire de contact fonctionnel et sécurisé\",\r\n        \"Optimisation SEO on-page pour améliorer la visibilité sur les moteurs de recherche\",\r\n        \"Adaptation du design pour un affichage responsive sur mobiles et tablettes\",\r\n        \"Tests fonctionnels et corrections des bugs avant la mise en ligne\",\r\n        \"Formation ou accompagnement du client pour la gestion autonome du site\",\r\n        \"Maintenance et mises à jour post-lancement (optionnel)\"\r\n\r\n      ],\r\n      en: [\r\n        \"Analyzing client needs and defining website objectives\",\r\n        \"Designing the site architecture and organizing content\",\r\n        \"Creating graphic mockups aligned with the company’s visual identity\",\r\n        \"Installing and configuring WordPress, selecting and customizing an appropriate theme\",\r\n        \"Integrating content: texts, images, videos, photo gallery of projects\",\r\n        \"Setting up a functional and secure contact form\",\r\n        \"On-page SEO optimization to improve search engine visibility\",\r\n        \"Adapting the design for responsive display on mobile and tablet devices\",\r\n        \"Performing functional tests and bug fixes before launch\",\r\n        \"Training or supporting the client for autonomous site management\",\r\n      ]\r\n    },\r\n    imageName: ['url1', 'url2'],\r\n    technos: [\"WordPress \", \"CSS3\", \"Elementor\", \"Royal Elementor Addons\", \"Ultimate Addons\", \"UpdraftPlus\", \"WPForms\", \"Yoast SEO\", \"Imagify\"],\r\n    url: \"https://dctfolientechnik.at/\",\r\n\r\n  }\r\n];\r\n","import { Component} from '@angular/core';\r\nimport {projectsData} from '../../../../core/data/projects-data';\r\nimport {NgOptimizedImage} from '@angular/common';\r\nimport {AnimatedTextDirective} from '../../../../core/directives/animated-text.directive';\r\nimport {AnimatedCardDirective} from '../../../../core/directives/animated-card.directive';\r\n\r\n@Component({\r\n  selector: 'app-portfolio',\r\n  imports: [NgOptimizedImage],\r\n  templateUrl: './portfolio.component.html',\r\n  styleUrl: './portfolio.component.sass'\r\n})\r\nexport class PortfolioComponent  {\r\n\r\n  protected readonly projects = projectsData;\r\n\r\n  get recentProjects() {\r\n    return [...this.projects].slice(-3).reverse();\r\n  }\r\n\r\n\r\n\r\n}\r\n","<section #portfolio id=\"portfolio\" class=\"projects\">\r\n  <div class=\"projects__bg\" aria-hidden=\"true\">\r\n    <div class=\"projects__blob projects__blob--left\"></div>\r\n    <div class=\"projects__blob projects__blob--right\"></div>\r\n  </div>\r\n\r\n  <div class=\"projects__container\">\r\n    <header class=\"projects__header\">\r\n      <h2 class=\"projets-title\" >\r\n        Quelques <span>projets web</span> réalisés pour mes clients\r\n\r\n      </h2>\r\n      <p> Découvrez quelques réalisations conçues pour améliorer la visibilité, optimiser les processus métier et répondre à des besoins spécifiques.</p>\r\n      <div class=\"divider\"></div>\r\n      <p class=\"sr-only\">\r\n        Portfolio de projets réalisés en Angular, Symfony et WordPress à Pau et partout en France.\r\n      </p>\r\n    </header>\r\n\r\n    <div class=\"projects__grid\">\r\n      @for (p of recentProjects; track p.number) {\r\n        <article class=\"card project-card\" >\r\n          <div class=\"card__media\">\r\n            <img [ngSrc]=\"p.imagePath\" [alt]=\"'Capture d’écran du projet ' + p.title\"  [width]=\"p.imageWidth\"\r\n                 [height]=\"p.imageHeight\" loading=\"lazy\" decoding=\"async\" />\r\n          </div>\r\n\r\n          <div class=\"card__body\">\r\n            <h3>{{ p.title }}</h3>\r\n\r\n            <p class=\"card__desc\">\r\n              {{ p.impact }}\r\n            </p>\r\n\r\n            <div class=\"card__tags\">\r\n              @for (t of p.technos; track $index) {\r\n\r\n              <span>{{ t }}</span>\r\n              }\r\n            </div>\r\n\r\n              <a class=\"btn btn--primary btn--full\" [href]=\"p.url\" target=\"_blank\" rel=\"noopener\">\r\n            @if (p.url) {\r\n                <span>Découvrir le projet</span>\r\n                <span class=\"btn__icon\" aria-hidden=\"true\">→</span>\r\n            } @else {\r\n              <span class=\"no-url\">Application privée</span>\r\n            }\r\n              </a>\r\n          </div>\r\n        </article>      }\r\n\r\n    </div>\r\n\r\n    <div class=\"projects__cta\">\r\n      <a class=\"btn btn--secondary btn--lg\" href=\"/portfolio\"  target=\"_blank\" rel=\"noopener\">\r\n        <span>Voir tous les projets</span>\r\n        <span class=\"btn__icon\" aria-hidden=\"true\">→</span>\r\n      </a>\r\n    </div>\r\n  </div>\r\n\r\n</section>\r\n\r\n\r\n\r\n","import { Component } from '@angular/core';\r\nimport {offresTarifs} from '../../../../core/data/offres-tarifs';\r\nimport {MatTooltip} from '@angular/material/tooltip';\r\nimport {Offre} from '../../../../core/interfaces/offre.interface';\r\nimport {AnimatedTextDirective} from '../../../../core/directives/animated-text.directive';\r\nimport {AnimatedCardDirective} from '../../../../core/directives/animated-card.directive';\r\nimport {\r\n  LucideBadgeQuestionMark,\r\n  LucideChartNoAxesCombined,\r\n  LucideCircleCheck,\r\n  LucideRocket,\r\n  LucideStar, LucideStore, LucideWrench\r\n} from '@lucide/angular';\r\n\r\n@Component({\r\n  selector: 'app-tarifs',\r\n  imports: [\r\n    MatTooltip,\r\n    LucideCircleCheck,\r\n    LucideBadgeQuestionMark,\r\n    LucideRocket,\r\n    LucideWrench,\r\n    LucideStore,\r\n  ],\r\n  templateUrl: './tarifs.component.html',\r\n  styleUrl: './tarifs.component.sass'\r\n})\r\nexport class TarifsComponent {\r\n\r\n  protected readonly myOffres = offresTarifs;\r\n\r\n  getPriceValue(offre: Offre, index: number) {\r\n    if (Array.isArray(offre.price)) {\r\n      return offre.price[index];\r\n    }\r\n    return offre.price;\r\n  }\r\n\r\n  scrollToSection(sectionTitle: string): void {\r\n    const section = document.getElementById(sectionTitle) as HTMLElement;\r\n    section.scrollIntoView({\r\n      behavior: 'smooth',\r\n      block: 'center'\r\n    });\r\n  }\r\n\r\n}\r\n","<section #tarifs id=\"tarifs\" class=\"tarifs-section\" aria-labelledby=\"tarifs-title\">\r\n  <div class=\"section-header\">\r\n    <h2 id=\"tarifs-title\" class=\"section-title\" >Offres <span class=\"highlight\">& tarifs</span></h2>\r\n    <p class=\"section-subtitle\">\r\n      Tarifs transparents pour la création de sites vitrines, boutiques e-commerce et applications web sur mesure.\r\n      Chaque projet fait l'objet d'un devis personnalisé selon vos besoins.\r\n    </p>\r\n    <p class=\"tarifs-trust\"> Réponse sous 24h <span class=\"colored-dot\">•</span> Devis gratuit <span class=\"colored-dot\">•</span> Sans engagement </p>\r\n    <div class=\"divider\"></div>\r\n  </div>\r\n\r\n  <div class=\"section-body\">\r\n    <div class=\"pricing-card-container\">\r\n      @for (offre of myOffres; track offre.id) {\r\n        <article class=\"pricing-card\">\r\n          <div class=\"pricing-card-header\">\r\n            <div class=\"wrapper-icon\" aria-hidden=\"true\">\r\n              @switch (offre.icon) {\r\n                @case('rocket'){\r\n                  <svg class=\"icon\" lucideRocket [size]=\"32\"></svg>\r\n                }\r\n                @case('wrench'){\r\n                  <svg class=\"icon\" lucideWrench [size]=\"32\"></svg>\r\n                }\r\n                @case('wordpress'){\r\n                  <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\" width=\"32\" height=\"32\" fill=\"currentColor\"><<path d=\"M125.7 233.4L227.2 511.4C156.2 477 107.3 404.2 107.3 320C107.3 289.1 113.9 259.9 125.7 233.4zM463.6 309.3C463.6 283 454.2 264.8 446.1 250.6C435.3 233.1 425.2 218.2 425.2 200.7C425.2 181.1 440 162.9 460.9 162.9C461.8 162.9 462.7 163 463.7 163.1C425.8 128.4 375.4 107.2 320 107.2C245.7 107.2 180.3 145.3 142.2 203.1C147.2 203.3 151.9 203.4 155.9 203.4C178.1 203.4 212.6 200.7 212.6 200.7C224.1 200 225.4 216.9 214 218.2C214 218.2 202.5 219.5 189.7 220.2L267.2 450.6L313.8 311L280.7 220.2C269.2 219.5 258.4 218.2 258.4 218.2C246.9 217.5 248.3 200 259.7 200.7C259.7 200.7 294.8 203.4 315.7 203.4C337.9 203.4 372.4 200.7 372.4 200.7C383.9 200 385.2 216.9 373.8 218.2C373.8 218.2 362.3 219.5 349.5 220.2L426.4 448.9L447.6 378C456.6 348.6 463.6 327.5 463.6 309.3zM323.7 338.6L259.9 524.1C279 529.7 299.1 532.8 320 532.8C344.8 532.8 368.5 528.5 390.6 520.7C390 519.8 389.5 518.8 389.1 517.8L323.7 338.6zM506.7 217.9C507.6 224.7 508.1 231.9 508.1 239.8C508.1 261.4 504.1 285.6 491.9 316L426.9 503.9C490.2 467 532.7 398.5 532.7 320C532.7 283 523.3 248.2 506.7 217.9zM72 320C72 183 183 72 320 72C457 72 568 183 568 320C568 457 457 568 320 568C183 568 72 457 72 320zM556.6 320C556.6 189.3 450.7 83.4 320 83.4C189.3 83.4 83.4 189.3 83.4 320C83.4 450.7 189.3 556.6 320 556.6C450.7 556.6 556.6 450.7 556.6 320z\"/></svg>\r\n                }\r\n                @case('store'){\r\n                  <svg lucideStore [size]=\"32\"></svg>\r\n                }\r\n              }\r\n            </div>\r\n\r\n            <h3 class=\"pricing-card-title\">{{ offre.title }}</h3>\r\n            <p class=\"pricing-card-subtitle\">{{ offre.subtitle }}</p>\r\n\r\n            <div class=\"price-wrapper\">\r\n              @if (offre.type == 'developpement') {\r\n                <span class=\"pricing-start\">à partir de</span>\r\n                <span class=\"pricing-card-price\">{{ offre.price }}<sup>€*</sup></span>\r\n              } @else if (offre.type == 'maintenance') {\r\n                <span class=\"price-hour\">{{ getPriceValue(offre, 0) }}</span>\r\n                <span>ou</span>\r\n                <span class=\"pricing-card-price price-year\">{{ getPriceValue(offre, 1) }}</span>\r\n              } @else {\r\n                <span class=\"pricing-start\">Taux journalier moyen</span>\r\n                <span class=\"pricing-card-price price-day\">{{ getPriceValue(offre, 0) }}</span>\r\n              }\r\n            </div>\r\n          </div>\r\n\r\n          <div class=\"pricing-card-content\">\r\n            <button\r\n              class=\"pricing-btn\"\r\n              type=\"button\"\r\n              (click)=\"scrollToSection('contact')\"\r\n              [attr.aria-label]=\"'Contacter pour : ' + offre.title\"\r\n            >\r\n              {{ offre.type == 'developpement' ? 'Discuter de mon projet' : 'Me contacter' }}\r\n            </button>\r\n\r\n            <ul class=\"pricing-card-features\">\r\n              @for (features of offre.features; track $index) {\r\n                <li>\r\n                  <svg lucideCircleCheck></svg>\r\n                  {{ features.feature }}\r\n\r\n                  @if (features.hint != '') {\r\n                    <svg  lucideBadgeQuestionMark [size]=\"14\"\r\n                      matTooltip=\"{{ features.hint }}\"\r\n                      tabindex=\"0\"\r\n                      role=\"button\"\r\n                      aria-label=\"Plus d'informations\"\r\n                    ></svg>\r\n                  }\r\n                </li>\r\n              }\r\n            </ul>\r\n          </div>\r\n        </article>\r\n      }\r\n    </div>\r\n      <footer class=\"tarifs-footer\">\r\n\r\n      <p class=\"tarifs-local\">\r\n        Tarifs adaptés aux entrepreneurs et entreprises en Nouvelle-Aquitaine et partout en France, pour des projets web sur mesure.\r\n      </p>\r\n\r\n      <small class=\"text-infos\">\r\n        L'ensemble des tarifs indiqués sont H.T. * Les tarifs indiqués sont donnés à titre indicatif\r\n        et peuvent évoluer selon vos besoins spécifiques.\r\n      </small>\r\n      </footer>\r\n\r\n\r\n  </div>\r\n</section>\r\n","import {Component} from '@angular/core';\r\nimport { ReactiveFormsModule} from '@angular/forms';\r\nimport {ContactFormComponent} from '../../../../core/components/contact-form/contact-form.component';\r\nimport {ContactInfoComponent} from '../../../../core/components/contact-info/contact-info.component';\r\n\r\n@Component({\r\n  selector: 'app-contact',\r\n  imports: [\r\n    ReactiveFormsModule,\r\n    ContactFormComponent,\r\n    ContactInfoComponent,\r\n  ],\r\n  templateUrl: './contact.component.html',\r\n  styleUrl: './contact.component.sass'\r\n})\r\nexport class ContactComponent {\r\n\r\n}\r\n","<section #contact id=\"contact\" class=\"contact-section\">\r\n  <!-- Background elements -->\r\n  <div class=\"contact-bg\">\r\n    <div class=\"circle circle-left\"></div>\r\n    <div class=\"circle circle-right\"></div>\r\n  </div>\r\n\r\n  <div class=\"container\">\r\n    <!-- Section header -->\r\n    <div class=\"section-header\">\r\n      <h2 >Parlons de <span class=\"highlight\">votre projet</span></h2>\r\n      <p>Travaillons ensemble sur votre prochain projet.</p>\r\n      <div class=\"divider\"></div>\r\n    </div>\r\n\r\n    <!-- Contact content -->\r\n    <div class=\"contact-content\">\r\n      <!-- Left column -->\r\n      <app-contact-info></app-contact-info>\r\n\r\n      <!-- Right column -->\r\n      <div class=\"contact-form\">\r\n      <app-contact-form></app-contact-form>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</section>\r\n","import {Component, OnInit} from '@angular/core';\r\nimport { MatExpansionModule} from '@angular/material/expansion';\r\nimport {RouterLink} from '@angular/router';\r\nimport {FaqItem} from '../../../../core/interfaces/faq.interface';\r\nimport {FaqService} from '../../../faq-page/services/faq.service';\r\nimport {AnimatedTextDirective} from '../../../../core/directives/animated-text.directive';\r\nimport {AnimatedCardDirective} from '../../../../core/directives/animated-card.directive';\r\nimport {LucideMessageCircle} from '@lucide/angular';\r\n\r\n@Component({\r\n  selector: 'app-faq-section',\r\n  imports: [MatExpansionModule, RouterLink, LucideMessageCircle],\r\n  templateUrl: './faq-section.component.html',\r\n  styleUrl: './faq-section.component.sass'\r\n})\r\nexport class FaqSectionComponent implements OnInit {\r\n\r\n  faqItems !: FaqItem[];\r\n\r\n  constructor(private faqService : FaqService) {\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.faqItems = this.faqService.getMiseEnAvant(6)\r\n  }\r\n\r\n}\r\n","<section id=\"faq-section\" class=\"faq-section\">\r\n\r\n  <div class=\"background\">\r\n    <div class=\"shape shape-left\"></div>\r\n    <div class=\"shape shape-center\"></div>\r\n    <div class=\"shape shape-right\"></div>\r\n  </div>\r\n  <div class=\"container\">\r\n    <div class=\"section-header\">\r\n      <h2 >Questions <span class=\"highlight\">fréquentes</span></h2>\r\n      <p>Tout ce que vous devez savoir avant de lancer votre projet web.</p>\r\n      <div class=\"divider\"></div>\r\n\r\n    </div>\r\n    <div class=\"section-body\">\r\n      <mat-accordion>\r\n        @for (faq of faqItems; track $index) {\r\n\r\n          <mat-expansion-panel >\r\n            <mat-expansion-panel-header>\r\n              <mat-panel-title> {{ faq.question }}</mat-panel-title>\r\n\r\n            </mat-expansion-panel-header>\r\n            <p>{{ faq.reponse }}</p>\r\n          </mat-expansion-panel>\r\n        }\r\n      </mat-accordion>\r\n      <div class=\"faq-cta-container \">\r\n        <div class=\"cta-card\">\r\n          <div class=\"left\">\r\n            <div class=\"icon\"><svg lucideMessageCircle></svg></div>\r\n            <div class=\"card-text\">\r\n              <h3>Vous avez encore une question ?</h3>\r\n              <p class=\"mb-0\">Contactez-moi et discutons de votre projet.</p>\r\n            </div>\r\n          </div>\r\n          <div class=\"right\">\r\n\r\n            <a class=\"btn secondary\" [routerLink]=\"'/questions-frequentes'\">\r\n              Voir toutes les questions\r\n            </a>\r\n            <a href=\"#contact\" class=\"btn primary\">Me contacter</a>\r\n\r\n\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</section>\r\n","import {\r\n  AfterViewInit,\r\n  Component,\r\n  OnDestroy,\r\n\r\n} from '@angular/core';\r\n\r\nimport {MatCardModule} from '@angular/material/card';\r\nimport {MatTooltipModule} from '@angular/material/tooltip';\r\nimport {MatListModule} from '@angular/material/list';\r\nimport { ReactiveFormsModule} from '@angular/forms';\r\n\r\nimport {MatInputModule} from '@angular/material/input';\r\nimport {MatFormFieldModule} from '@angular/material/form-field';\r\nimport {HeroComponent} from './sections/hero/hero.component';\r\nimport {AboutComponent} from './sections/about/about.component';\r\nimport {ServicesComponent} from './sections/services/services.component';\r\nimport {PortfolioComponent} from './sections/portfolio/portfolio.component';\r\nimport {TarifsComponent} from './sections/tarifs/tarifs.component';\r\nimport {ContactComponent} from './sections/contact/contact.component';\r\nimport {FaqSectionComponent} from './sections/faq-section/faq-section.component';\r\nimport {ActivatedRoute} from '@angular/router';\r\nimport {Subscription} from 'rxjs';\r\nimport {ViewportScroller} from '@angular/common';\r\n\r\n\r\n\r\n\r\n\r\n@Component({\r\n  selector: 'app-home',\r\n  imports: [MatCardModule, MatTooltipModule, MatListModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, HeroComponent, AboutComponent, ServicesComponent, PortfolioComponent, TarifsComponent, ContactComponent, FaqSectionComponent],\r\n  standalone: true,\r\n  templateUrl: './home.component.html',\r\n  styleUrl: './home.component.sass',\r\n})\r\nexport class HomeComponent implements AfterViewInit, OnDestroy {\r\n  private sub?: Subscription;\r\n\r\n  constructor(\r\n    private route: ActivatedRoute,\r\n    private viewportScroller: ViewportScroller\r\n  ) {\r\n    // OPTIONNEL : si header sticky, ajoute un offset (ex: 80px)\r\n    // Mets ici la hauteur réelle de ton header (ou calcule-la).\r\n    this.viewportScroller.setOffset([0, 80]);\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    this.sub = this.route.fragment.subscribe(fragment => {\r\n      if (!fragment) return;\r\n\r\n      // Laisse Angular finir le rendu\r\n      setTimeout(() => {\r\n        this.viewportScroller.scrollToAnchor(fragment);\r\n      }, 0);\r\n    });\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.sub?.unsubscribe();\r\n  }\r\n}\r\n","\r\n  <app-hero></app-hero>\r\n  <app-about></app-about>\r\n  <app-services></app-services>\r\n  <app-portfolio></app-portfolio>\r\n  <app-tarifs></app-tarifs>\r\n  <app-faq-section></app-faq-section>\r\n  <app-contact></app-contact>\r\n\r\n\r\n"],"mappings":"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","names":["MatCardModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","_c0","SCROLL_THROTTLE_MS","MAT_TOOLTIP_SCROLL_STRATEGY","InjectionToken","injector","inject","Injector","createRepositionScrollStrategy","SCROLL_THROTTLE_MS","MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY","_overlay","MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER","MAT_TOOLTIP_DEFAULT_OPTIONS_FACTORY","MAT_TOOLTIP_DEFAULT_OPTIONS","PANEL_CLASS","passiveListenerOptions","normalizePassiveListenerOptions","MIN_VIEWPORT_TOOLTIP_THRESHOLD","UNBOUNDED_ANCHOR_GAP","MIN_HEIGHT","MAX_WIDTH","MatTooltip","inject","ElementRef","NgZone","Platform","AriaDescriber","FocusMonitor","Directionality","Injector","ViewContainerRef","_animationsDisabled","MAT_TOOLTIP_DEFAULT_OPTIONS","TooltipComponent","value","coerceBooleanProperty","isDisabled","coerceNumberProperty","oldMessage","Subject","defaultOptions","takeUntil","origin","nativeElement","event","listener","delay","overlayRef","ComponentPortal","instance","existingStrategy","scrollableAncestors","ScrollDispatcher","panelClass","strategy","createFlexibleConnectedPositionStrategy","change","createOverlayRef","MAT_TOOLTIP_SCROLL_STRATEGY","hasModifierKey","position","overlay","__spreadValues","offset","isLtr","originPosition","x","y","overlayPosition","afterNextRender","tooltipClass","connectionPair","overlayY","originX","originY","newPosition","classPrefix","point","touch","DEFAULT_LONGPRESS_DELAY","exitListeners","newTarget","touchendListener","listeners","elementUnderPointer","DOCUMENT","element","gestures","style","__ngFactoryType__","ɵɵdefineDirective","rf","ctx","ɵɵclassProp","ChangeDetectorRef","relatedTarget","rect","animationName","toVisible","isVisible","tooltip","showClass","hideClass","styles","ɵɵdefineComponent","ɵɵviewQuery","_c0","_t","ɵɵqueryRefresh","ɵɵloadQuery","ɵɵlistener","$event","_r1","ɵɵgetCurrentView","ɵɵelementStart","ɵɵrestoreView","ɵɵresetView","ɵɵtext","ɵɵelementEnd","ɵɵproperty","ɵɵadvance","ɵɵtextInterpolate","NgClass","MatTooltipModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MAT_TOOLTIP_SCROLL_STRATEGY_FACTORY_PROVIDER","A11yModule","OverlayModule","MatCommonModule","CdkScrollableModule","MatDividerModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","MatPseudoCheckboxModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","MatListModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","ObserversModule","MatCommonModule","MatRippleModule","MatPseudoCheckboxModule","MatDividerModule","TextFieldModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MatFormFieldModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","ObserversModule","MatFormField","MatInputModule","__ngFactoryType__","ɵɵdefineNgModule","ɵɵdefineInjector","MatCommonModule","MatFormFieldModule","TextFieldModule","HeroComponent","scrollToSection","sectionTitle","document","getElementById","scrollIntoView","behavior","block","selectors","decls","vars","consts","template","rf","ctx","ɵɵdomElementStart","ɵɵdomElement","ɵɵdomElementEnd","ɵɵtext","ɵɵdomListener","i0","ɵɵrestoreView","_r1","ɵɵresetView","AboutComponent","myData","myInfo","scrollToSection","sectionTitle","document","getElementById","scrollIntoView","behavior","block","selectors","decls","vars","consts","template","rf","ctx","ɵɵdomElementStart","ɵɵdomElement","ɵɵdomElementEnd","ɵɵtext","ɵɵadvance","ɵɵdomProperty","ɵɵinterpolate","ɵɵsanitizeUrl","ɵɵtextInterpolate1","yearsOfExperience","services","title","icon","description","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵtext","ɵɵadvance","ɵɵproperty","service_r1","icon","ɵɵtextInterpolate","title","ɵɵtextInterpolate1","description","ServicesComponent","myServices","services","selectors","decls","vars","consts","template","rf","ctx","ɵɵrepeaterCreate","ServicesComponent_For_40_Template","ɵɵrepeaterTrackByIndex","ɵɵrepeater","NgOptimizedImage","LucideMapPin","styles","projectsData","number","client","title","imagePath","imageWidth","imageHeight","shortDescription","impact","description","fr","en","missions","imageName","technos","url","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","t_r1","ɵɵelement","ɵɵrepeaterCreate","PortfolioComponent_For_19_For_10_Template","ɵɵrepeaterTrackByIndex","ɵɵconditionalCreate","PortfolioComponent_For_19_Conditional_12_Template","PortfolioComponent_For_19_Conditional_13_Template","ɵɵproperty","p_r2","imagePath","title","imageWidth","imageHeight","ɵɵtextInterpolate1","impact","ɵɵrepeater","technos","url","ɵɵsanitizeUrl","ɵɵconditional","PortfolioComponent","projects","projectsData","recentProjects","slice","reverse","selectors","decls","vars","consts","template","rf","ctx","PortfolioComponent_For_19_Template","_forTrack0","NgOptimizedImage","styles","ɵɵelement","ɵɵproperty","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate","offre_r2","price","ctx_r2","getPriceValue","ɵɵinterpolate","features_r4","hint","ɵɵconditionalCreate","TarifsComponent_For_21_For_20_Conditional_3_Template","ɵɵtextInterpolate1","feature","ɵɵconditional","TarifsComponent_For_21_Case_3_Template","TarifsComponent_For_21_Case_4_Template","TarifsComponent_For_21_Case_5_Template","TarifsComponent_For_21_Case_6_Template","TarifsComponent_For_21_Conditional_12_Template","TarifsComponent_For_21_Conditional_13_Template","TarifsComponent_For_21_Conditional_14_Template","ɵɵlistener","ɵɵrestoreView","_r1","ɵɵnextContext","ɵɵresetView","scrollToSection","ɵɵrepeaterCreate","TarifsComponent_For_21_For_20_Template","ɵɵrepeaterTrackByIndex","tmp_11_0","icon","title","subtitle","type","ɵɵrepeater","features","TarifsComponent","myOffres","offresTarifs","offre","index","Array","isArray","sectionTitle","document","getElementById","scrollIntoView","behavior","block","selectors","decls","vars","consts","template","rf","ctx","TarifsComponent_For_21_Template","_forTrack0","MatTooltip","LucideCircleCheck","LucideBadgeQuestionMark","LucideRocket","LucideWrench","LucideStore","styles","ContactComponent","selectors","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵelement","ɵɵelementEnd","ɵɵtext","ReactiveFormsModule","ContactFormComponent","ContactInfoComponent","styles","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵtextInterpolate1","faq_r1","question","ɵɵtextInterpolate","reponse","FaqSectionComponent","faqService","faqItems","constructor","ngOnInit","getMiseEnAvant","ɵɵdirectiveInject","FaqService","selectors","decls","vars","consts","template","rf","ctx","ɵɵelement","ɵɵrepeaterCreate","FaqSectionComponent_For_17_Template","ɵɵrepeaterTrackByIndex","ɵɵrepeater","ɵɵproperty","MatExpansionModule","MatAccordion","MatExpansionPanel","MatExpansionPanelHeader","MatExpansionPanelTitle","RouterLink","LucideMessageCircle","styles","HomeComponent","route","viewportScroller","sub","constructor","setOffset","ngAfterViewInit","fragment","subscribe","setTimeout","scrollToAnchor","ngOnDestroy","unsubscribe","ɵɵdirectiveInject","ActivatedRoute","ViewportScroller","selectors","decls","vars","template","rf","ctx","ɵɵelement","MatCardModule","MatTooltipModule","MatListModule","ReactiveFormsModule","MatFormFieldModule","MatInputModule","HeroComponent","AboutComponent","ServicesComponent","PortfolioComponent","TarifsComponent","ContactComponent","FaqSectionComponent","styles"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8]}