{"version":3,"file":"5286.e66f93ccb76021a0.js","mappings":"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","names":["FormHelper","testCpf","control","controlname","controls","cpf0","soma","cpf","m","get","_a","value","P","p","_b","undefined","strCPF","replace","length","C","_c","setErrors","invalidCpf","E","_d","i","parseInt","substring","resto","y","_e","S","_f","k","B","_g","T","_h","testDoc","testPasswordSame","password","repeatPassword","notSame","testFullName","name","invalidName","parts","split","sobrenome","testEmailSame","email","repeatEmail","factory","EventService","constructor","pdvRepository","sanitizer","eventsRepository","generalHelper","http","store","this","groupByCategories","params","events$","e","comissionerId","loadSite","pipe","map","res","events","res2","treatHomeEventList","select","EventSelectors","switchMap","filteredEvents","getSiteEvents","of","groupByMonths","getCustomerBuyedTickets","eventId","getCustomerTickets","find","loadEventSite","event","dates","x","dateStartEvent","dateEnd","u","n","dateEndEvent","startDate","formatDate","startTime","Date","googleMapsUrl","bypassSecurityTrustResourceUrl","encodeURI","address","sectors","id","position","useMapPlace","useSeats","tickets","flatMap","ticketDateId","dateTickets","lotId","lotCurrent","fees","fee","pdvs","PDVs","sectorId","fengPlansExtra","fengPlansInvited","fengPlansPartner","gender","type","description","batch","price","prices","priceVirtual","qty","blacklist","useFacialRecognition","banner","imageWeb","showCupom","city","fbPixel","categories","hideFullTickets","state","uf","integrations","instagram","paymentMethods","limitCPF","s","company","limitPerCPF","limitByCPF","seatsioEventKey","seatsioMapKey","useGoogleEvents","googleAnalyticsKey","googleTagManagerKey","includes","slugs","allowMapV2","skipCustomerDataOnPdv","requireCustomerDataOnPdv","loadTermsOfUse","loadAboutUs","PdvSelectors","getProducerEvents","producerId","loadProducerEvents","getProducerReportEvents","loadProducerReportEvents","getCupomTicket","ticketTagsQuantity","tags","quantity","list2site","imagePdv","redirectToExternalLink","getMap","loadEventOrder","getOrders","list2list","query","buildQuery","environment","r","filter","item","D","slug","a","f","tag","logo","o","t","l","_j","tagsFilter","JSON","parse","c","_k","_","_l","v","_m","O","h","_o","_p","w","G","L","_q","_r","_s","j","K","_t","_u","_v","fengIntegration","V","_w","ticketTags","W","_x","N","_y","H","_z","z","_0","imagePDV","Y","_1","i0","reducers","createReducer","selectedSector","isShowing","view","MapView","isLoading","on","setMap","Object","setSectors","setSelectedSector","setShow","setView","setLoading","registerLocaleData","localePt","MapV2Module","MapV2Service","provide","LOCALE_ID","useValue","imports","CommonModule","FormsModule","MatToolbarModule","MatDialogModule","MatIconModule","MatButtonModule","MatRadioModule","MatSidenavModule","StoreModule","MAP_FEATURE","selectMapState","createFeatureSelector","mapSelector","createSelector","sectorsSelector","selectedSectorSelector","showSelector","viewSelector","loadingSelector","httpClient","cartStorageKey","mapSubject","BehaviorSubject","reservesSubject","apiUrl","slice","show","dispatch","hide","getView","loadMap","Promise","resolve","reject","first","data","keys","image","imageSectors","color","places","place","row","number","mapId","coords","shape","width","height","available","reservedAt","isReserved","selectedTicket","ticket","dateTicket","priceFeeVirtual","String","toLocaleLowerCase","lotName","dateTicketId","subscribe","next","cart","getCart","cp","setCart","loadReserveListeners","error","loadSectors","sector","mapSectors","forEach","mapSector","coord","push","Number","Array","from","getSectors","getMapWithSectors","getCurrentSectors","getSelectedSector","hasPlaces","isSelected","some","setSelectedSectorById","reserve","post","updatedPlace","updateReserve","put","cancelReserve","listenReserves","asObservable","localStorage","getItem","setItem","stringify","removeCart","removeItem","createAction","props","SpinnerComponent","ngOnInit","selectors","MAT_RADIO_DEFAULT_OPTIONS","InjectionToken","providedIn","nextUniqueId","MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","useExisting","forwardRef","MatRadioGroup","multi","source","MAT_RADIO_GROUP","_MatRadioGroupBase","_changeDetector","_value","_name","_selected","_isInitialized","_labelPosition","_disabled","_required","_controlValueAccessorChangeFn","onTouched","change","EventEmitter","_updateRadioButtonNames","labelPosition","_markRadiosForCheck","newValue","_updateSelectedRadioFromValue","_checkSelectedRadioButton","checked","selected","disabled","coerceBooleanProperty","required","ngAfterContentInit","_touch","_radios","radio","_markForCheck","_emitChangeEvent","emit","MatRadioChange","writeValue","markForCheck","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","ɵfac","ɵdir","inputs","MatRadioButton","_elementRef","_MatRadioButtonMixinBase","mixinDisableRipple","mixinTabIndex","MatRadioButtonBase","_MatRadioButtonBase","radioGroup","elementRef","_focusMonitor","_radioDispatcher","animationMode","_providerOverride","tabIndex","super","_uniqueId","_checked","_removeUniqueSelectionListener","_noopAnimations","coerceNumberProperty","listen","newCheckedState","notify","_setDisabled","_color","inputId","focus","options","origin","focusVia","_inputElement","nativeElement","ngDoCheck","_updateTabIndex","ngAfterViewInit","monitor","focusOrigin","ngOnDestroy","stopMonitoring","_isRippleDisabled","disableRipple","_onInputClick","stopPropagation","_onInputInteraction","groupValueChanged","group","_previousTabIndex","input","setAttribute","viewQuery","changeDetector","focusMonitor","radioDispatcher","providerOverride","i1","i2","ANIMATION_MODULE_TYPE","ɵcmp","ngContentSelectors","directives","i3","styles","ɵmod","ɵinj","MatRippleModule","MatCommonModule"],"sourceRoot":"webpack:///","sources":["./src/app/helpers/form.helper.ts","./src/app/services/event.service.ts","./src/app/views/components/mapv2/store/map.reducer.ts","./src/app/views/components/mapv2/store/index.ts","./src/app/views/components/mapv2/mapv2.module.ts","./src/app/views/components/mapv2/store/map.selectors.ts","./src/app/views/components/mapv2/mapv2.service.ts","./src/app/views/components/mapv2/models/Map.ts","./src/app/views/components/mapv2/store/map.actions.ts","./src/app/views/components/spinner/spinner.component.ts","./src/app/views/components/spinner/spinner.component.html","./node_modules/@angular/material/fesm2015/radio.mjs"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\n\n/*\n este arquivo contém funções para validação de formulário com validações customizadas\n*/\n\n@Injectable({\n 'providedIn': 'root'\n})\n\nexport class FormHelper {\n\n /*\n função que irá testar se o CPF é valido\n */\n testCpf(control: AbstractControl) {\n let controlname = \"cpf\"\n\n if ((control as any).controls.cpf0 != null) {\n controlname = \"cpf0\"\n }\n\n let soma = 0;\n\n let cpf = control.get(controlname)?.value || control?.get('identificationNumber')?.value;\n\n // verifica se a variável cpf é igual a \"undefined\", exibindo uma msg de erro\n if (cpf === undefined) {\n return false;\n }\n\n // esta função retira os caracteres . e - da string do cpf, deixando apenas os números\n let strCPF = cpf.replace('.', '').replace('.', '').replace('-', '');\n // testa as sequencias que possuem todos os dígitos iguais e, se o cpf não tem 11 dígitos, retorna falso e exibe uma msg de erro\n if (strCPF === '00000000000' || strCPF === '11111111111' || strCPF === '22222222222' || strCPF === '33333333333' ||\n strCPF === '44444444444' || strCPF === '55555555555' || strCPF === '66666666666' || strCPF === '77777777777' || strCPF === '88888888888' ||\n strCPF === '99999999999' || strCPF.length !== 11) {\n control.get(controlname)?.setErrors({ invalidCpf: true });\n control.get(\"identificationNumber\")?.setErrors({ invalidCpf: true });\n }\n\n // os seis blocos seguintes de funções vão realizar a validação do CPF propriamente dito, conferindo se o DV bate. Caso alguma das funções não consiga verificar\n // o DV corretamente, mostrará uma mensagem de erro ao usuário e retornará falso, para que o usário posso digitar novamente um número para ser testado\n\n // multiplica cada digito por numeros de 1 a 9, soma-os e multiplica-os por 10. Depois, divide o resultado encontrado por 11 para encontrar o resto\n for (let i = 1; i <= 9; i++) {\n soma = soma + parseInt(strCPF.substring(i - 1, i)) * (11 - i);\n }\n\n let resto = (soma * 10) % 11;\n if ((resto === 10) || (resto === 11)) {\n resto = 0;\n }\n\n if (resto !== parseInt(strCPF.substring(9, 10))) {\n control.get(controlname)?.setErrors({ invalidCpf: true });\n control.get(\"identificationNumber\")?.setErrors({ invalidCpf: true });\n }\n\n soma = 0;\n for (let k = 1; k <= 10; k++) {\n soma = soma + parseInt(strCPF.substring(k - 1, k)) * (12 - k)\n }\n\n resto = (soma * 10) % 11;\n if ((resto === 10) || (resto === 11)) {\n resto = 0;\n }\n\n if (resto !== parseInt(strCPF.substring(10, 11))) {\n control.get(controlname)?.setErrors({ invalidCpf: true });\n control.get(\"identificationNumber\")?.setErrors({ invalidCpf: true });\n }\n\n return null;\n }\n\n\n\n testDoc(control: AbstractControl) {\n let controlname = \"doc\"\n\n let soma = 0;\n\n let cpf = control.get(controlname)?.value || control?.get('identificationNumber')?.value;\n\n // verifica se a variável cpf é igual a \"undefined\", exibindo uma msg de erro\n if (cpf === undefined) {\n return false;\n }\n\n // esta função retira os caracteres . e - da string do cpf, deixando apenas os números\n let strCPF = cpf.replace('.', '').replace('.', '').replace('-', '');\n // testa as sequencias que possuem todos os dígitos iguais e, se o cpf não tem 11 dígitos, retorna falso e exibe uma msg de erro\n if (strCPF === '00000000000' || strCPF === '11111111111' || strCPF === '22222222222' || strCPF === '33333333333' ||\n strCPF === '44444444444' || strCPF === '55555555555' || strCPF === '66666666666' || strCPF === '77777777777' || strCPF === '88888888888' ||\n strCPF === '99999999999' || strCPF.length !== 11) {\n control.get(controlname)?.setErrors({ invalidCpf: true });\n control.get(\"identificationNumber\")?.setErrors({ invalidCpf: true });\n }\n\n // os seis blocos seguintes de funções vão realizar a validação do CPF propriamente dito, conferindo se o DV bate. Caso alguma das funções não consiga verificar\n // o DV corretamente, mostrará uma mensagem de erro ao usuário e retornará falso, para que o usário posso digitar novamente um número para ser testado\n\n // multiplica cada digito por numeros de 1 a 9, soma-os e multiplica-os por 10. Depois, divide o resultado encontrado por 11 para encontrar o resto\n for (let i = 1; i <= 9; i++) {\n soma = soma + parseInt(strCPF.substring(i - 1, i)) * (11 - i);\n }\n\n let resto = (soma * 10) % 11;\n if ((resto === 10) || (resto === 11)) {\n resto = 0;\n }\n\n if (resto !== parseInt(strCPF.substring(9, 10))) {\n control.get(controlname)?.setErrors({ invalidCpf: true });\n control.get(\"identificationNumber\")?.setErrors({ invalidCpf: true });\n }\n\n soma = 0;\n for (let k = 1; k <= 10; k++) {\n soma = soma + parseInt(strCPF.substring(k - 1, k)) * (12 - k)\n }\n\n resto = (soma * 10) % 11;\n if ((resto === 10) || (resto === 11)) {\n resto = 0;\n }\n\n if (resto !== parseInt(strCPF.substring(10, 11))) {\n control.get(controlname)?.setErrors({ invalidCpf: true });\n control.get(\"identificationNumber\")?.setErrors({ invalidCpf: true });\n }\n\n return null;\n }\n\n /*\n verifica se a senha e o campo repetir senha conferem\n */\n testPasswordSame(control: AbstractControl) {\n if (control.value.password !== control.value.repeatPassword) {\n control.get(\"repeatPassword\")?.setErrors({ notSame: true });\n }\n\n return null;\n }\n\n\n /*\n verifica se o nome é completo\n */\n testFullName(control: AbstractControl) {\n let name = control.get(\"name\")?.value;\n\n if (name == null) {\n control.get(\"name\")?.setErrors({ invalidName: true });\n }\n\n let parts = name.split(' ');\n\n if (parts.length < 2) {\n control.get(\"name\")?.setErrors({ invalidName: true });\n }\n\n let sobrenome = parts[1];\n\n if (sobrenome == undefined) {\n control.get(\"name\")?.setErrors({ invalidName: true });\n }\n\n if (sobrenome != null && sobrenome.length < 2) {\n control.get(\"name\")?.setErrors({ invalidName: true });\n }\n\n\n return null;\n }\n\n\n /*\n verifica se os campos email e confirmar email são iguais\n */\n testEmailSame(control: AbstractControl) {\n if (control.value.email !== control.value.repeatEmail) {\n control.get(\"repeatEmail\")?.setErrors({ notSame: true });\n }\n\n return null;\n }\n\n\n}\n","import { formatDate } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';\nimport { map, Observable, of, switchMap } from 'rxjs';\nimport { EventModel } from '../models/event.model';\nimport { SectorModel } from '../models/sector.model';\nimport { TicketModel } from '../models/ticket.model';\nimport { PdvRepository } from '../repositories/pdv.repository';\nimport { EventsRepository } from '../repositories/events.repository';\nimport { environment } from 'src/environments/environment';\nimport { HttpClient } from '@angular/common/http';\nimport { GeneralHelper } from '../helpers/general.helper';\nimport { select, Store } from '@ngrx/store';\nimport { EventSelectors, PdvSelectors } from '../store/pdv/selectors';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class EventService {\n constructor(\n private pdvRepository: PdvRepository,\n private sanitizer: DomSanitizer,\n private eventsRepository: EventsRepository,\n private generalHelper: GeneralHelper,\n private http: HttpClient,\n private store: Store\n ) { }\n\n public groupByCategories(params?: any): Observable {\n let events$: Observable;\n\n if (params?.comissionerId) {\n events$ = this.pdvRepository.loadSite(params)\n .pipe(\n map((res) => {\n return res.events.map((res2) => {\n return this.treatHomeEventList(res2) \n })\n })\n );\n } else {\n events$ = this.store.pipe(\n select(EventSelectors.selectFilteredEvents),\n switchMap((filteredEvents) => {\n if (filteredEvents === null) {\n return this.getSiteEvents();\n }\n return of(filteredEvents);\n })\n );\n }\n\n return events$.pipe(\n map((events) => [...events])\n );\n }\n\n public groupByMonths(params?: any): Observable {\n let events$: Observable;\n\n if (params?.comissionerId) {\n events$ = this.pdvRepository.loadSite(params).pipe(\n map((res) => {\n return res.events.map((res2) => {\n return this.treatHomeEventList(res2)\n })\n })\n );\n } else {\n events$ = this.store.pipe(\n select(EventSelectors.selectFilteredEvents),\n switchMap((filteredEvents) => {\n if (filteredEvents === null) {\n return this.getSiteEvents();\n }\n return of(filteredEvents);\n })\n );\n }\n\n return events$.pipe(\n map((events) => [...events])\n );\n }\n\n public getCustomerBuyedTickets(eventId: string) {\n return this.pdvRepository.getCustomerTickets(eventId)\n }\n\n public find(params: any): Observable {\n return this.pdvRepository.loadEventSite(params)\n .pipe(map(res => {\n const event = res.events[0];\n\n const dates: string[] = event.dates.map((x: any) => x.dateStartEvent);\n\n let dateEnd: string|null = event.dates[0]?.dateEndEvent ?? null;\n\n const startDate: string = formatDate(dates[0], 'EEEE, d \\'de\\' MMMM', 'pt-BR', '+0000');\n const startTime: string = formatDate(dates[0], 'HH:mm', 'pt-BR', '+0000');\n \n if (dateEnd != null && (new Date(dateEnd as string) as unknown as number) - (new Date(dates[0] ) as unknown as number) <= 32340000) {\n dateEnd = null\n }\n\n const googleMapsUrl: SafeResourceUrl = this.sanitizer.bypassSecurityTrustResourceUrl(encodeURI(`https://maps.google.com/maps?q=${event.address}&z=15&ie=UTF8&iwloc=&output=embed`));\n\n const sectors: SectorModel[] = event.sectors.map((x: any) => {\n return {\n id: x.id,\n name: x.name,\n position: x.position,\n useMapPlace: x.useMapPlace,\n useSeats: x.useSeats\n };\n });\n\n const tickets: TicketModel[] = event.sectors.flatMap((x: any) => x.tickets.map((y: any) => {\n\n return {\n id: y.id,\n ticketDateId: y.dateTickets[0].id,\n lotId: y.dateTickets[0].lotCurrent.id,\n fees: y.dateTickets[0].fee,\n pdvs: y.PDVs,\n sectorId: x.id,\n name: y.name,\n fengPlansExtra: y.fengPlansExtra,\n fengPlansInvited: y.fengPlansInvited,\n fengPlansPartner: y.fengPlansPartner,\n gender: y.gender,\n type: y.type,\n description: y.description,\n position: y.position,\n batch: y.dateTickets[0].lotCurrent.name,\n price: y.dateTickets[0].lotCurrent.prices[0].price,\n fee: y.dateTickets[0].lotCurrent.prices[0].priceVirtual - y.dateTickets[0].lotCurrent.prices[0].price,\n qty: 0,\n blacklist: y.blacklist,\n useFacialRecognition: y.useFacialRecognition\n };\n }));\n\n return {\n id: event.id,\n name: event.name,\n description: event.description,\n banner: event.imageWeb,\n address: event.address,\n showCupom: event.showCupom,\n city: event.city.name,\n fbPixel: event.fbPixel,\n categories: event.categories,\n hideFullTickets: event.hideFullTickets,\n state: event.city.state.name,\n uf: event.city.state.uf,\n integrations: event.integrations,\n instagram: event.instagram,\n paymentMethods: event.paymentMethods,\n limitCPF: event?.company.limitPerCPF,\n limitByCPF: event?.limitByCPF,\n dates: dates,\n dateEnd: dateEnd,\n seatsioEventKey: event.seatsioEventKey,\n seatsioMapKey: event.seatsioMapKey,\n useGoogleEvents: event.useGoogleEvents,\n googleAnalyticsKey: event.googleAnalyticsKey,\n googleTagManagerKey: event.googleTagManagerKey,\n startDate: startDate,\n startTime: startTime,\n googleMapsUrl: googleMapsUrl,\n sectors: [\"c6404a91-7340-408a-a170-e56c381efae8\", \"2a9862d4-efd4-4104-be26-0d29f0900f5e\", \"5c353325-cd80-4bdb-9132-2d44885fb172\", \"b501cbf7-0351-452e-a6ca-c0db99d73fba\", \"16e20386-8ad9-41cc-b09a-ce58b1ac2192\", \"91257ab5-acd3-4a1f-ac2f-46d1e3bcd190\", \"0fa70c2d-246c-4561-b217-d3958963b10a\", \"b6122d1a-30a5-4c7a-8d2b-f75efed20d49\", \"d085263e-0417-4d32-8832-b55fa9a6167a\"].includes(event.id) ? [] : sectors,\n tickets: [\"c6404a91-7340-408a-a170-e56c381efae8\", \"2a9862d4-efd4-4104-be26-0d29f0900f5e\", \"5c353325-cd80-4bdb-9132-2d44885fb172\", \"b501cbf7-0351-452e-a6ca-c0db99d73fba\", \"16e20386-8ad9-41cc-b09a-ce58b1ac2192\", \"91257ab5-acd3-4a1f-ac2f-46d1e3bcd190\", \"0fa70c2d-246c-4561-b217-d3958963b10a\", \"b6122d1a-30a5-4c7a-8d2b-f75efed20d49\", \"d085263e-0417-4d32-8832-b55fa9a6167a\"].includes(event.id) ? [] : tickets,\n slugs: event.slugs,\n allowMapV2: event.allowMapV2,\n skipCustomerDataOnPdv: event.skipCustomerDataOnPdv,\n requireCustomerDataOnPdv: event.requireCustomerDataOnPdv\n };\n }));\n }\n\n loadTermsOfUse() {\n return this.pdvRepository.loadTermsOfUse();\n }\n\n loadAboutUs() {\n return this.pdvRepository.loadAboutUs();\n }\n\n getSiteEvents() {\n return this.store.pipe(select(PdvSelectors.selectEvents))\n }\n\n getProducerEvents(producerId?: any) {\n return this.pdvRepository.loadProducerEvents(producerId);\n }\n\n getProducerReportEvents(producerId?: any) {\n return this.pdvRepository.loadProducerReportEvents(producerId);\n }\n\n getCupomTicket(params: any): Observable {\n return this.pdvRepository.loadEventSite(params).pipe(map(res => {\n const event = res.events[0];\n\n const dates: string[] = event.dates.map((x: any) => x.dateStartEvent);\n let dateEnd: string|null = event.dates[0]?.dateEndEvent ?? null;\n \n const startDate: string = formatDate(dates[0], 'EEEE, d \\'de\\' MMMM', 'pt-BR', '+0000');\n const startTime: string = formatDate(dates[0], 'HH:mm', 'pt-BR', '+0000');\n\n if (dateEnd != null && (new Date(dateEnd as string) as unknown as number) - (new Date(dates[0] ) as unknown as number) <= 32340000) {\n dateEnd = null\n }\n\n const googleMapsUrl: SafeResourceUrl = this.sanitizer.bypassSecurityTrustResourceUrl(encodeURI(`https://maps.google.com/maps?q=${event.address}&z=15&ie=UTF8&iwloc=&output=embed`));\n\n const sectors: SectorModel[] = event.sectors.map((x: any) => {\n return {\n id: x.id,\n name: x.name,\n position: x.position,\n useMapPlace: x.useMapPlace,\n useSeats: x.useSeats\n };\n });\n\n const tickets: TicketModel[] = event.sectors.flatMap((x: any) => x.tickets.map((y: any) => {\n\n return {\n id: y.id,\n ticketDateId: y.dateTickets[0].id,\n lotId: y.dateTickets[0].lotCurrent.id,\n fees: y.dateTickets[0].fee,\n sectorId: x.id,\n name: y.name,\n type: y.type,\n gender: y.gender,\n ticketTagsQuantity: typeof y.tags !== 'undefined' && y.tags.length >= 1 ? y.tags[0].quantity : 0,\n description: y.description,\n position: y.position,\n batch: y.dateTickets[0].lotCurrent.name,\n price: y.dateTickets[0].lotCurrent.prices[0].price,\n fee: y.dateTickets[0].lotCurrent.prices[0].priceVirtual - y.dateTickets[0].lotCurrent.prices[0].price,\n qty: 0\n };\n }));\n\n return {\n id: event.id,\n name: event.name,\n description: event.description,\n banner: event.imageWeb,\n address: event.address,\n city: event.city.name,\n state: event.city.state.name,\n uf: event.city.state.uf,\n paymentMethods: event.paymentMethods,\n limitCPF: event?.company.limitPerCPF,\n dates: dates,\n seatsioEventKey: event.seatsioEventKey,\n seatsioMapKey: event.seatsioMapKey,\n startDate: startDate,\n dateEnd: dateEnd,\n startTime: startTime,\n googleMapsUrl: googleMapsUrl,\n sectors: sectors,\n tickets: tickets,\n slugs: event.slugs\n };\n }));\n }\n\n\n\n list2site(params: any) {\n return this.eventsRepository.list2site(params).pipe(map(res => {\n const event = res.events[0];\n\n const dates: string[] = event.dates.map((x: any) => x.dateStartEvent);\n\n const startDate: string = formatDate(dates[0], 'EEEE, d \\'de\\' MMMM', 'pt-BR', '+0000');\n const startTime: string = formatDate(dates[0], 'HH:mm', 'pt-BR', '+0000');\n\n const googleMapsUrl: SafeResourceUrl = this.sanitizer.bypassSecurityTrustResourceUrl(encodeURI(`https://maps.google.com/maps?q=${event.address}&z=15&ie=UTF8&iwloc=&output=embed`));\n\n const sectors: SectorModel[] = event.sectors.map((x: any) => {\n return {\n id: x.id,\n name: x.name,\n position: x.position,\n useMapPlace: x.useMapPlace,\n useSeats: x.useSeats\n };\n });\n\n const tickets: TicketModel[] = event.sectors.flatMap((x: any) => x.tickets.map((y: any) => {\n\n return {\n id: y.id,\n ticketDateId: y.dateTickets[0].id,\n lotId: y.dateTickets[0].lotCurrent.id,\n fees: y.dateTickets[0].fee,\n sectorId: x.id,\n name: y.name,\n comissionerId: y.comissionerId,\n description: y.description,\n position: y.position,\n batch: y.dateTickets[0].lotCurrent.name,\n price: y.dateTickets[0].lotCurrent.prices[0].price,\n fee: y.dateTickets[0].lotCurrent.prices[0].priceVirtual - y.dateTickets[0].lotCurrent.prices[0].price,\n qty: 0\n };\n }));\n\n return {\n id: event.id,\n name: event.name,\n description: event.description,\n banner: event.imageWeb,\n imagePdv: event.imagePdv,\n address: event.address,\n city: event.city.name,\n state: event.city.state.name,\n uf: event.city.state.uf,\n paymentMethods: event.paymentMethods,\n limitCPF: event?.company.limitPerCPF,\n dates: dates,\n seatsioEventKey: event.seatsioEventKey,\n seatsioMapKey: event.seatsioMapKey,\n startDate: startDate,\n startTime: startTime,\n googleMapsUrl: googleMapsUrl,\n sectors: sectors,\n tickets: tickets,\n slugs: event.slugs,\n redirectToExternalLink: event.redirectToExternalLink,\n requireCustomerDataOnPdv: event.requireCustomerDataOnPdv,\n skipCustomerDataOnPdv: event.skipCustomerDataOnPdv\n };\n }));\n }\n\n getMap(params: any): Observable {\n return this.eventsRepository.getMap(params);\n }\n\n loadEventOrder(id: any): Observable {\n return this.eventsRepository.getOrders(id);\n }\n\n list2list(params: any) {\n let query = this.generalHelper.buildQuery(params);\n return this.http.get(environment.apiUrl + '/event/list2list' + '?' + query);\n }\n\n\n treatHomeEventList(event) {\n const dates: string[] = event.dates.map((x: any) => {\n return x.dateStartEvent\n });\n const startDate: string = formatDate(dates[0], 'EEEE, d \\'de\\' MMMM', 'pt-BR', '+0000');\n const startTime: string = formatDate(dates[0], 'HH:mm', 'pt-BR', '+0000');\n const googleMapsUrl: SafeResourceUrl = this.sanitizer.bypassSecurityTrustResourceUrl(encodeURI(`https://maps.google.com/maps?q=${event.address}&z=15&ie=UTF8&iwloc=&output=embed`));\n\n const slugs =\n event?.slugs\n ?.filter((item: any) => item?.slug)\n ?.map((item: any) => ({ slug: item.slug })) ?? undefined;\n\n const tags =\n event?.tags\n ?.filter((item: any) => item?.tag)\n ?.map((item: any) => ({ tag: item.tag, logo: item.logo })) ?? undefined;\n\n const categories =\n event?.categories\n ?.filter((item: any) => item?.name)\n ?.map((item: any) => item.name) ?? undefined;\n\n let tagsFilter = \"\"\n if (event.tagsFilter != null) {\n tagsFilter = JSON.parse(event.tagsFilter)\n }\n\n return {\n id: event?.id ?? \"\",\n name: event?.name ?? \"\",\n banner: event?.banner,\n address: event?.address ?? \"\",\n instagram: event?.instagram,\n city: event?.city?.name ?? \"\",\n state: event?.city?.state?.name ?? \"\",\n uf: event?.city?.state?.uf ?? \"\",\n dates: dates,\n hideFullTickets: event?.hideFullTickets,\n description: event?.description,\n fengIntegration: event?.fengIntegration,\n startDate: startDate,\n startTime: startTime,\n limitCPF: event?.company?.limitPerCPF,\n limitByCPF: event?.limitByCPF,\n fbPixel: event?.fbPixel,\n redirectToExternalLink: event?.redirectToExternalLink,\n requireCustomerDataOnPdv: event?.requireCustomerDataOnPdv,\n skipCustomerDataOnPdv: event?.skipCustomerDataOnPdv,\n slugs: slugs,\n tags: tags,\n tagsFilter: tagsFilter,\n categories: categories,\n ticketTags: event?.ticketTags ?? undefined,\n googleMapsUrl: googleMapsUrl,\n\n seatsioEventKey: event?.seatsioEventKey ?? undefined,\n seatsioMapKey: event?.seatsioMapKey ?? undefined,\n useGoogleEvents: event?.useGoogleEvents,\n paymentMethods: event?.paymentMethods,\n allowMapV2: event?.allowMapV2,\n imageWeb: event?.imageWeb ?? undefined,\n imagePDV: event?.imagePDV ?? undefined,\n company: event?.company,\n };\n }\n}\n","import { createReducer, on } from '@ngrx/store';\nimport { setLoading, setMap, setSectors, setSelectedSector, setShow, setView } from './map.actions';\nimport { Map, MapView } from '../models/Map';\nimport { MapPlace } from '../models/MapPlace';\nimport { Sector } from '../models/Sector';\n\nexport interface MapState {\n map: Map | null;\n sectors: Sector[];\n selectedSector: Sector | null;\n isShowing: boolean;\n view: MapView;\n isLoading: boolean;\n};\n\nexport const initialState: MapState = {\n map: null,\n sectors: [],\n selectedSector: null,\n isShowing: false,\n view: MapView.PLACES,\n isLoading: false,\n};\n\nexport const mapReducer = createReducer(\n initialState,\n on(setMap, (state, { map }) => ({ ...state, map })),\n on(setSectors, (state, { sectors }) => ({ ...state, sectors })),\n on(setSelectedSector, (state, { selectedSector }) => ({ ...state, selectedSector })),\n on(setShow, (state, { isShowing }) => ({ ...state, isShowing })),\n on(setView, (state, { view }) => ({ ...state, view })),\n on(setLoading, (state, { isLoading }) => ({ ...state, isLoading })),\n);","import { ActionReducerMap } from '@ngrx/store';\nimport { mapReducer, MapState } from './map.reducer';\n\nexport interface AppState {\n map: MapState;\n}\n\nexport const reducers: ActionReducerMap = {\n map: mapReducer,\n}","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { MatToolbarModule } from \"@angular/material/toolbar\";\nimport { MatDialogModule } from \"@angular/material/dialog\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { LOCALE_ID } from '@angular/core';\nimport { registerLocaleData } from '@angular/common';\nimport localePt from '@angular/common/locales/pt';\nimport { MatRadioModule } from \"@angular/material/radio\";\nimport { FormsModule } from \"@angular/forms\";\nimport { MapV2LoaderComponent } from \"./mapv2-loader/mapv2-loader.component\";\nimport { MapV2SectorsComponent } from \"./mapv2-sectors/mapv2-sectors.component\";\nimport { StoreModule } from \"@ngrx/store\";\nimport { reducers } from \"./store\";\nimport { MapV2PlacesComponent } from \"./mapv2-places/mapv2-places.component\";\nimport { MapV2TicketsComponent } from \"./mapv2-tickets/mapv2-tickets.component\";\nimport { MatSidenavModule } from \"@angular/material/sidenav\";\nimport { MapV2CartComponent } from \"./mapv2-cart/mapv2-cart.component\";\nimport { MapV2Component } from \"./mapv2.component\";\nimport { PlacesBySectorPipe } from \"./pipes/places-by-sector.pipe\";\nimport { MapV2Service } from \"./mapv2.service\";\nimport { MAP_FEATURE } from \"./store/map.actions\";\n\nregisterLocaleData(localePt);\n\n@NgModule({\n declarations: [\n\t\tMapV2Component,\n\t\tMapV2SectorsComponent,\n\t\tMapV2PlacesComponent,\n\t\tMapV2LoaderComponent,\n\t\tMapV2TicketsComponent,\n\t\tMapV2CartComponent,\n\t\tPlacesBySectorPipe\n\t],\n imports: [\n\t\tCommonModule,\n\t\tFormsModule,\n\t\tMatToolbarModule, \n\t\tMatDialogModule,\n\t\tMatIconModule,\n\t\tMatButtonModule,\n\t\tMatRadioModule,\n\t\tMatSidenavModule,\n\t\tStoreModule.forFeature(MAP_FEATURE, reducers),\n\t],\n exports: [MapV2Component],\n\tentryComponents: [MapV2PlacesComponent],\n\tproviders: [\n\t\tMapV2Service,\n\t\t{ provide: LOCALE_ID, useValue: 'pt-BR' }\n\t]\n})\nexport class MapV2Module {}\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\nimport { MapState } from './map.reducer';\n\nexport const selectMapState = createFeatureSelector('map');\n\nexport const mapSelector = createSelector(\n selectMapState,\n (state: MapState) => state.map\n);\n\nexport const sectorsSelector = createSelector(\n selectMapState,\n (state: MapState) => state.sectors\n);\n\nexport const selectedSectorSelector = createSelector(\n selectMapState,\n (state: MapState) => state.selectedSector\n);\n\nexport const showSelector = createSelector(\n selectMapState,\n (state: MapState) => state.isShowing\n);\n\nexport const viewSelector = createSelector(\n selectMapState,\n (state: MapState) => state.view\n);\n\nexport const loadingSelector = createSelector(\n selectMapState,\n (state: MapState) => state.isLoading\n);","import { Injectable } from \"@angular/core\";\nimport { BehaviorSubject, Observable, of } from \"rxjs\";\nimport { MapPlace } from \"./models/MapPlace\";\nimport { Store, select } from \"@ngrx/store\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { first, map } from \"rxjs/operators\";\nimport { PolygonPoint } from \"./models/PolygonPoint\";\nimport { environment } from \"src/environments/environment\";\nimport { MapSector, Sector } from \"./models/Sector\";\nimport { PlaceTicket } from \"./models/PlaceTicket\";\nimport { Map, MapView } from \"./models/Map\";\nimport { setLoading, setSectors, setSelectedSector, setShow, setView } from \"./store/map.actions\";\nimport { loadingSelector, mapSelector, sectorsSelector, selectedSectorSelector, showSelector, viewSelector } from \"./store/map.selectors\";\nimport { Socket, io } from 'socket.io-client';\nimport { Cart } from \"./models/Cart\";\nimport { ReserveSocketEvent } from \"./models/ReserveSocketEvent\";\nimport { MapV2Change } from \"./models/MapV2Change\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MapV2Service {\n private cartStorageKey: string;\n private apiUrl: string;\n private mapSubject: BehaviorSubject;\n private reservesSubject: BehaviorSubject;\n //private socketIO: Socket;\n\n constructor(\n private store: Store,\n private httpClient: HttpClient\n ) {\n this.cartStorageKey = 'MapV2_Cart_State';\n this.mapSubject = new BehaviorSubject(null);\n this.reservesSubject = new BehaviorSubject(null);\n this.apiUrl = environment.apiUrl;\n if (this.apiUrl.slice(-1) != '/') {\n this.apiUrl += '/';\n }\n // this.socketIO = io(this.apiUrl, {\n // transports: ['websocket']\n // });\n }\n\n public isShowing(): Observable {\n return this.store.pipe(select(showSelector));\n }\n\n public show(): void {\n this.store.dispatch(setShow({ isShowing: true }));\n }\n\n public hide(): void {\n this.store.dispatch(setShow({ isShowing: false }));\n }\n\n public getView(): Observable {\n return this.store.pipe(select(viewSelector));\n }\n\n public setView(view: MapView): void {\n this.store.dispatch(setView({ view }));\n }\n\n public loadMap(eventId: string): Promise {\n this.setLoading(true);\n return new Promise((resolve, reject) => {\n this.httpClient.get(this.apiUrl + `map/event/${eventId}?loadEventSite=true`)\n .pipe(\n first(),\n map((data) => {\n if (Object.keys(data).length === 0) return null;\n return {\n id: data.id,\n eventId: data.eventId,\n image: data.image,\n imageSectors: data.imageSectors,\n color: data.color,\n places: data.places.map((place: any) => {\n return {\n row: place.row,\n number: place.number,\n mapId: place.mapId,\n coords: place.coords,\n shape: place.shape,\n width: place.width,\n height: place.height,\n quantity: place.quantity,\n available: !place.reservedAt,\n isReserved: false,\n selectedTicket: null,\n tickets: place.tickets.map((ticket: any) => {\n const dateTicket = ticket.dateTickets[0];\n const lotCurrent = dateTicket.lotCurrent;\n const prices = lotCurrent.prices[0];\n const price = prices.priceVirtual - prices.priceFeeVirtual;\n const type = String(ticket.type).toLocaleLowerCase() == 'full'\n ? 'Inteira'\n : 'Meia';\n return {\n id: ticket.id,\n sectorId: ticket.sectorId,\n name: ticket.name,\n lotId: lotCurrent.id,\n lotName: lotCurrent.name,\n dateTicketId: dateTicket.id,\n price: price,\n fee: prices.priceFeeVirtual,\n type: type,\n gender: 'Unisex',\n } as PlaceTicket\n }),\n } as MapPlace\n }),\n } as Map\n })\n )\n .subscribe({\n next: (map) => {\n this.setLoading(false);\n\n if (map) {\n let cart = this.getCart();\n if (!cart || cart.eventId != map.eventId || cart.mapId != map.id) {\n cart = {\n eventId: map.eventId,\n mapId: map.id,\n places: []\n }\n }\n\n if (cart.places.length > 0) {\n // Atualiza map com os places do cart\n map.places = map.places.map(p => {\n const cartPlace = cart.places.find(cp => cp.row == p.row && cp.number == p.number);\n if (cartPlace) {\n return cartPlace;\n }\n return p;\n });\n }\n\n this.setCart(cart);\n this.setMap(map);\n this.loadReserveListeners(map.id);\n }\n resolve(map);\n },\n error: (error) => {\n this.setLoading(false);\n reject(error);\n }\n });\n });\n }\n\n public getMap(): Observable {\n return of(this.mapSubject.value);\n }\n\n public setMap(map: Map): void {\n this.mapSubject.next(map);\n }\n\n public loadSectors(eventId: string): Promise {\n this.setLoading(true);\n return new Promise((resolve, reject) => {\n this.httpClient.get<{ sectors: any[] }>(this.apiUrl + `event/ticket?eventId=${eventId}`)\n .pipe(\n first(),\n map(res => {\n return res.sectors.map((sector) => {\n const mapSectors: MapSector[] = [];\n\n sector.mapSectors.forEach((mapSector: any) => {\n const coords: PolygonPoint[] = [];\n if (String(mapSector.coords).includes(';')) {\n String(mapSector.coords).split(';')\n .forEach((coord) => {\n const [x, y] = coord.split(',');\n coords.push({\n x: Number(x),\n y: Number(y)\n });\n });\n mapSectors.push({\n id: mapSector.id,\n coords\n });\n }\n });\n\n const tickets = Array.from(sector.tickets)\n .map((ticket) => ({\n id: ticket.id,\n name: ticket.name\n }));\n\n return {\n id: sector.id,\n name: sector.name,\n mapSectors,\n tickets\n } as Sector\n });\n })\n ).subscribe({\n next: (sectors) => {\n this.setSectors(sectors);\n this.setLoading(false);\n resolve(sectors);\n },\n error: (error) => {\n this.setLoading(false);\n reject(error);\n }\n });\n });\n }\n\n public getSectors(): Observable {\n return this.store.pipe(select(sectorsSelector));\n }\n\n public getMapWithSectors(): Observable {\n return this.store.pipe(select(mapSelector))\n }\n\n public getCurrentSectors(): Promise {\n return new Promise((resolve) => {\n this.getSectors()\n .pipe(first())\n .subscribe({\n next: sectors => {\n resolve(sectors);\n }\n });\n });\n }\n\n public setSectors(sectors: Sector[]): void {\n this.store.dispatch(setSectors({ sectors }));\n }\n\n public getSelectedSector(): Observable {\n return this.store.pipe(select(selectedSectorSelector));\n }\n\n public setSelectedSector(selectedSector: Sector): void {\n this.store.dispatch(setSelectedSector({ selectedSector }));\n if (!this.hasPlaces(selectedSector.id)) {\n this.reservesSubject.next({\n isSelected: true,\n sectorId: selectedSector.id\n });\n }\n }\n\n public hasPlaces(sectorId: string): any {\n if (this.mapSubject.value != null) {\n return !!this.mapSubject.value!.places.find(p => p.tickets.some(t => t.sectorId === sectorId));\n }\n }\n\n public async setSelectedSectorById(sectorId: string): Promise {\n const sectors = await this.getCurrentSectors();\n if (sectors != null && sectors.length >= 1) {\n const selectedSector = sectors.find(s => s.id == sectorId);\n if (selectedSector) {\n this.setSelectedSector(selectedSector);\n }\n }\n }\n\n public reserve(place: MapPlace, ticket: PlaceTicket): Promise {\n this.setLoading(true);\n return new Promise((resolve, reject) => {\n const { row, number, mapId } = place;\n this.httpClient.post(this.apiUrl + 'mapPlace/reserve', { row, number, mapId })\n .pipe(first())\n .subscribe({\n next: () => {\n this.setLoading(false);\n\n const updatedPlace: MapPlace = {\n ...place,\n isReserved: true,\n selectedTicket: ticket\n };\n\n const cart = this.getCart();\n cart.places.push(updatedPlace);\n this.setCart(cart);\n\n // marca o lugar reservado no mapa\n const map = this.mapSubject.value;\n const places = map!.places.map(p => {\n if (p.row == row && p.number == number) {\n return updatedPlace;\n }\n return p;\n });\n this.setMap({ ...map as Map, places });\n\n this.reservesSubject.next({\n isSelected: true,\n sectorId: ticket.sectorId,\n place: updatedPlace,\n ticket: ticket\n });\n\n resolve(updatedPlace);\n },\n error: (error) => {\n this.setLoading(false);\n reject(error);\n }\n });\n });\n }\n\n public updateReserve(mapId: string, places: any[]): Promise {\n return new Promise((resolve, reject) => {\n this.httpClient.put(this.apiUrl + 'mapPlace/reserve', { mapId, places })\n .pipe(first())\n .subscribe({\n next: () => {\n resolve();\n },\n error: (error) => {\n reject(error);\n }\n });\n });\n }\n\n public cancelReserve(place: MapPlace): Promise {\n this.setLoading(true);\n return new Promise((resolve, reject) => {\n const { row, number, mapId } = place;\n this.httpClient.post(this.apiUrl + 'mapPlace/reserve/cancel', { row, number, mapId })\n .pipe(first())\n .subscribe({\n next: () => {\n this.setLoading(false);\n\n const ticket = place.selectedTicket as PlaceTicket;\n const updatedPlace = {\n ...place,\n isReserved: false,\n selectedTicket: null\n }\n\n const cart = this.getCart();\n cart.places = cart.places.filter(p => p.row != row || p.number != number);\n this.setCart(cart);\n\n // desmarca o lugar reservado no mapa\n const map = this.mapSubject.value;\n const places = map!.places.map(p => {\n if (p.row == row && p.number == number) {\n return updatedPlace;\n }\n return p;\n });\n this.setMap({ ...map as Map, places });\n\n this.reservesSubject.next({\n isSelected: false,\n sectorId: ticket.sectorId,\n place: updatedPlace,\n ticket: ticket\n });\n\n resolve();\n },\n error: (error) => {\n this.setLoading(false);\n reject(error);\n }\n });\n })\n }\n\n public listenReserves(): Observable {\n return this.reservesSubject.asObservable();\n }\n\n public isLoading(): Observable {\n return this.store.pipe(select(loadingSelector));\n }\n\n public setLoading(isLoading: boolean): void {\n this.store.dispatch(setLoading({ isLoading }));\n }\n\n public getCart(): Cart {\n return JSON.parse(localStorage.getItem(this.cartStorageKey) as string) as Cart;\n }\n\n public setCart(cart: Cart): void {\n localStorage.setItem(this.cartStorageKey, JSON.stringify(cart));\n }\n\n public removeCart() {\n localStorage.removeItem(this.cartStorageKey);\n }\n\n private loadReserveListeners(mapId: string): void {\n return;\n // const eventName = 'mapv2:' + mapId;\n // // Verificar se já está ouvindo o evento\n // if (!this.socketIO.hasListeners(eventName)) {\n // this.socketIO.on(eventName, (event: ReserveSocketEvent) => {\n // const map = this.mapSubject.value;\n // const places = map!.places.map(place => {\n // if (place.row == event.row && place.number == event.number) {\n // const available = event.reservedAt == null ? true : false;\n // return { ...place, available };\n // }\n // return place;\n // });\n // this.setMap({ ...map as Map, places });\n // });\n // }\n }\n}\n","import { MapPlace } from \"./MapPlace\";\nimport { Sector } from \"./Sector\";\n\nexport enum MapView {\n PLACES = 'places',\n CART = 'cart',\n TICKETS = 'tickets'\n}\n\nexport interface Map {\n id: string;\n eventId: string;\n image: string;\n imageSectors: string;\n color: string;\n places: MapPlace[];\n sectors: Sector[]\n}","import { createAction, props } from '@ngrx/store';\nimport { Map, MapView } from '../models/Map';\nimport { MapPlace } from '../models/MapPlace';\nimport { Sector } from '../models/Sector';\n\nexport const MAP_FEATURE = 'map';\n\nexport const setMap = createAction(\n '[map] Set Map',\n props<{ map: Map }>()\n);\n\nexport const setSectors = createAction(\n '[sectors] Set Sectors',\n props<{ sectors: Sector[] }>()\n);\n\nexport const setSelectedSector = createAction(\n '[selectedSector] Set Selected Sector',\n props<{ selectedSector: Sector }>()\n);\n\nexport const setShow = createAction(\n '[show] Set Show',\n props<{ isShowing: boolean }>()\n);\n\nexport const setView = createAction(\n '[view] Set View',\n props<{ view: MapView }>()\n);\n\nexport const setLoading = createAction(\n '[loading] Set Loading',\n props<{ isLoading: boolean }>()\n);\n\n\n","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n selector: 'app-spinner',\n templateUrl: './spinner.component.html',\n styleUrls: ['./spinner.component.scss']\n})\nexport class SpinnerComponent implements OnInit {\n\n constructor() { }\n\n // tipo do spinner\n @Input() spinnerType: string = 'grow';\n\n // tamanho do spinner\n @Input() spinnerWidth!: string;\n\n ngOnInit(): void {\n }\n\n}\n","
\n Loading...\n
\n","import * as i0 from '@angular/core';\nimport { InjectionToken, forwardRef, EventEmitter, Directive, Output, Input, ContentChildren, ViewChild, Component, ViewEncapsulation, ChangeDetectionStrategy, Optional, Inject, Attribute, NgModule } from '@angular/core';\nimport * as i3 from '@angular/material/core';\nimport { mixinDisableRipple, mixinTabIndex, MatRippleModule, MatCommonModule } from '@angular/material/core';\nimport { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';\nimport * as i1 from '@angular/cdk/a11y';\nimport * as i2 from '@angular/cdk/collections';\n\nconst MAT_RADIO_DEFAULT_OPTIONS = new InjectionToken('mat-radio-default-options', {\n providedIn: 'root',\n factory: MAT_RADIO_DEFAULT_OPTIONS_FACTORY,\n});\nfunction MAT_RADIO_DEFAULT_OPTIONS_FACTORY() {\n return {\n color: 'accent',\n };\n}\n// Increasing integer for generating unique ids for radio components.\nlet nextUniqueId = 0;\n/**\n * Provider Expression that allows mat-radio-group to register as a ControlValueAccessor. This\n * allows it to support [(ngModel)] and ngControl.\n * @docs-private\n */\nconst MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MatRadioGroup),\n multi: true,\n};\n/** Change event object emitted by MatRadio and MatRadioGroup. */\nclass MatRadioChange {\n constructor(\n /** The MatRadioButton that emits the change event. */\n source, \n /** The value of the MatRadioButton. */\n value) {\n this.source = source;\n this.value = value;\n }\n}\n/**\n * Injection token that can be used to inject instances of `MatRadioGroup`. It serves as\n * alternative token to the actual `MatRadioGroup` class which could cause unnecessary\n * retention of the class and its component metadata.\n */\nconst MAT_RADIO_GROUP = new InjectionToken('MatRadioGroup');\n/**\n * Base class with all of the `MatRadioGroup` functionality.\n * @docs-private\n */\nclass _MatRadioGroupBase {\n constructor(_changeDetector) {\n this._changeDetector = _changeDetector;\n /** Selected value for the radio group. */\n this._value = null;\n /** The HTML name attribute applied to radio buttons in this group. */\n this._name = `mat-radio-group-${nextUniqueId++}`;\n /** The currently selected radio button. Should match value. */\n this._selected = null;\n /** Whether the `value` has been set to its initial value. */\n this._isInitialized = false;\n /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n this._labelPosition = 'after';\n /** Whether the radio group is disabled. */\n this._disabled = false;\n /** Whether the radio group is required. */\n this._required = false;\n /** The method to be called in order to update ngModel */\n this._controlValueAccessorChangeFn = () => { };\n /**\n * onTouch function registered via registerOnTouch (ControlValueAccessor).\n * @docs-private\n */\n this.onTouched = () => { };\n /**\n * Event emitted when the group value changes.\n * Change events are only emitted when the value changes due to user interaction with\n * a radio button (the same behavior as ``).\n */\n this.change = new EventEmitter();\n }\n /** Name of the radio button group. All radio buttons inside this group will use this name. */\n get name() {\n return this._name;\n }\n set name(value) {\n this._name = value;\n this._updateRadioButtonNames();\n }\n /** Whether the labels should appear after or before the radio-buttons. Defaults to 'after' */\n get labelPosition() {\n return this._labelPosition;\n }\n set labelPosition(v) {\n this._labelPosition = v === 'before' ? 'before' : 'after';\n this._markRadiosForCheck();\n }\n /**\n * Value for the radio-group. Should equal the value of the selected radio button if there is\n * a corresponding radio button with a matching value. If there is not such a corresponding\n * radio button, this value persists to be applied in case a new radio button is added with a\n * matching value.\n */\n get value() {\n return this._value;\n }\n set value(newValue) {\n if (this._value !== newValue) {\n // Set this before proceeding to ensure no circular loop occurs with selection.\n this._value = newValue;\n this._updateSelectedRadioFromValue();\n this._checkSelectedRadioButton();\n }\n }\n _checkSelectedRadioButton() {\n if (this._selected && !this._selected.checked) {\n this._selected.checked = true;\n }\n }\n /**\n * The currently selected radio button. If set to a new radio button, the radio group value\n * will be updated to match the new selected button.\n */\n get selected() {\n return this._selected;\n }\n set selected(selected) {\n this._selected = selected;\n this.value = selected ? selected.value : null;\n this._checkSelectedRadioButton();\n }\n /** Whether the radio group is disabled */\n get disabled() {\n return this._disabled;\n }\n set disabled(value) {\n this._disabled = coerceBooleanProperty(value);\n this._markRadiosForCheck();\n }\n /** Whether the radio group is required */\n get required() {\n return this._required;\n }\n set required(value) {\n this._required = coerceBooleanProperty(value);\n this._markRadiosForCheck();\n }\n /**\n * Initialize properties once content children are available.\n * This allows us to propagate relevant attributes to associated buttons.\n */\n ngAfterContentInit() {\n // Mark this component as initialized in AfterContentInit because the initial value can\n // possibly be set by NgModel on MatRadioGroup, and it is possible that the OnInit of the\n // NgModel occurs *after* the OnInit of the MatRadioGroup.\n this._isInitialized = true;\n }\n /**\n * Mark this group as being \"touched\" (for ngModel). Meant to be called by the contained\n * radio buttons upon their blur.\n */\n _touch() {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n _updateRadioButtonNames() {\n if (this._radios) {\n this._radios.forEach(radio => {\n radio.name = this.name;\n radio._markForCheck();\n });\n }\n }\n /** Updates the `selected` radio button from the internal _value state. */\n _updateSelectedRadioFromValue() {\n // If the value already matches the selected radio, do nothing.\n const isAlreadySelected = this._selected !== null && this._selected.value === this._value;\n if (this._radios && !isAlreadySelected) {\n this._selected = null;\n this._radios.forEach(radio => {\n radio.checked = this.value === radio.value;\n if (radio.checked) {\n this._selected = radio;\n }\n });\n }\n }\n /** Dispatch change event with current selection and group value. */\n _emitChangeEvent() {\n if (this._isInitialized) {\n this.change.emit(new MatRadioChange(this._selected, this._value));\n }\n }\n _markRadiosForCheck() {\n if (this._radios) {\n this._radios.forEach(radio => radio._markForCheck());\n }\n }\n /**\n * Sets the model value. Implemented as part of ControlValueAccessor.\n * @param value\n */\n writeValue(value) {\n this.value = value;\n this._changeDetector.markForCheck();\n }\n /**\n * Registers a callback to be triggered when the model value changes.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnChange(fn) {\n this._controlValueAccessorChangeFn = fn;\n }\n /**\n * Registers a callback to be triggered when the control is touched.\n * Implemented as part of ControlValueAccessor.\n * @param fn Callback to be registered.\n */\n registerOnTouched(fn) {\n this.onTouched = fn;\n }\n /**\n * Sets the disabled state of the control. Implemented as a part of ControlValueAccessor.\n * @param isDisabled Whether the control should be disabled.\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this._changeDetector.markForCheck();\n }\n}\n_MatRadioGroupBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: _MatRadioGroupBase, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });\n_MatRadioGroupBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: _MatRadioGroupBase, inputs: { color: \"color\", name: \"name\", labelPosition: \"labelPosition\", value: \"value\", selected: \"selected\", disabled: \"disabled\", required: \"required\" }, outputs: { change: \"change\" }, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: _MatRadioGroupBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { change: [{\n type: Output\n }], color: [{\n type: Input\n }], name: [{\n type: Input\n }], labelPosition: [{\n type: Input\n }], value: [{\n type: Input\n }], selected: [{\n type: Input\n }], disabled: [{\n type: Input\n }], required: [{\n type: Input\n }] } });\n/**\n * A group of radio buttons. May contain one or more `` elements.\n */\nclass MatRadioGroup extends _MatRadioGroupBase {\n}\nMatRadioGroup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatRadioGroup, deps: null, target: i0.ɵɵFactoryTarget.Directive });\nMatRadioGroup.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatRadioGroup, selector: \"mat-radio-group\", host: { attributes: { \"role\": \"radiogroup\" }, classAttribute: \"mat-radio-group\" }, providers: [\n MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR,\n { provide: MAT_RADIO_GROUP, useExisting: MatRadioGroup },\n ], queries: [{ propertyName: \"_radios\", predicate: i0.forwardRef(function () { return MatRadioButton; }), descendants: true }], exportAs: [\"matRadioGroup\"], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatRadioGroup, decorators: [{\n type: Directive,\n args: [{\n selector: 'mat-radio-group',\n exportAs: 'matRadioGroup',\n providers: [\n MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR,\n { provide: MAT_RADIO_GROUP, useExisting: MatRadioGroup },\n ],\n host: {\n 'role': 'radiogroup',\n 'class': 'mat-radio-group',\n },\n }]\n }], propDecorators: { _radios: [{\n type: ContentChildren,\n args: [forwardRef(() => MatRadioButton), { descendants: true }]\n }] } });\n// Boilerplate for applying mixins to MatRadioButton.\n/** @docs-private */\nclass MatRadioButtonBase {\n constructor(_elementRef) {\n this._elementRef = _elementRef;\n }\n}\nconst _MatRadioButtonMixinBase = mixinDisableRipple(mixinTabIndex(MatRadioButtonBase));\n/**\n * Base class with all of the `MatRadioButton` functionality.\n * @docs-private\n */\nclass _MatRadioButtonBase extends _MatRadioButtonMixinBase {\n constructor(radioGroup, elementRef, _changeDetector, _focusMonitor, _radioDispatcher, animationMode, _providerOverride, tabIndex) {\n super(elementRef);\n this._changeDetector = _changeDetector;\n this._focusMonitor = _focusMonitor;\n this._radioDispatcher = _radioDispatcher;\n this._providerOverride = _providerOverride;\n this._uniqueId = `mat-radio-${++nextUniqueId}`;\n /** The unique ID for the radio button. */\n this.id = this._uniqueId;\n /**\n * Event emitted when the checked state of this radio button changes.\n * Change events are only emitted when the value changes due to user interaction with\n * the radio button (the same behavior as ``).\n */\n this.change = new EventEmitter();\n /** Whether this radio is checked. */\n this._checked = false;\n /** Value assigned to this radio. */\n this._value = null;\n /** Unregister function for _radioDispatcher */\n this._removeUniqueSelectionListener = () => { };\n // Assertions. Ideally these should be stripped out by the compiler.\n // TODO(jelbourn): Assert that there's no name binding AND a parent radio group.\n this.radioGroup = radioGroup;\n this._noopAnimations = animationMode === 'NoopAnimations';\n if (tabIndex) {\n this.tabIndex = coerceNumberProperty(tabIndex, 0);\n }\n this._removeUniqueSelectionListener = _radioDispatcher.listen((id, name) => {\n if (id !== this.id && name === this.name) {\n this.checked = false;\n }\n });\n }\n /** Whether this radio button is checked. */\n get checked() {\n return this._checked;\n }\n set checked(value) {\n const newCheckedState = coerceBooleanProperty(value);\n if (this._checked !== newCheckedState) {\n this._checked = newCheckedState;\n if (newCheckedState && this.radioGroup && this.radioGroup.value !== this.value) {\n this.radioGroup.selected = this;\n }\n else if (!newCheckedState && this.radioGroup && this.radioGroup.value === this.value) {\n // When unchecking the selected radio button, update the selected radio\n // property on the group.\n this.radioGroup.selected = null;\n }\n if (newCheckedState) {\n // Notify all radio buttons with the same name to un-check.\n this._radioDispatcher.notify(this.id, this.name);\n }\n this._changeDetector.markForCheck();\n }\n }\n /** The value of this radio button. */\n get value() {\n return this._value;\n }\n set value(value) {\n if (this._value !== value) {\n this._value = value;\n if (this.radioGroup !== null) {\n if (!this.checked) {\n // Update checked when the value changed to match the radio group's value\n this.checked = this.radioGroup.value === value;\n }\n if (this.checked) {\n this.radioGroup.selected = this;\n }\n }\n }\n }\n /** Whether the label should appear after or before the radio button. Defaults to 'after' */\n get labelPosition() {\n return this._labelPosition || (this.radioGroup && this.radioGroup.labelPosition) || 'after';\n }\n set labelPosition(value) {\n this._labelPosition = value;\n }\n /** Whether the radio button is disabled. */\n get disabled() {\n return this._disabled || (this.radioGroup !== null && this.radioGroup.disabled);\n }\n set disabled(value) {\n this._setDisabled(coerceBooleanProperty(value));\n }\n /** Whether the radio button is required. */\n get required() {\n return this._required || (this.radioGroup && this.radioGroup.required);\n }\n set required(value) {\n this._required = coerceBooleanProperty(value);\n }\n /** Theme color of the radio button. */\n get color() {\n // As per Material design specifications the selection control radio should use the accent color\n // palette by default. https://material.io/guidelines/components/selection-controls.html\n return (this._color ||\n (this.radioGroup && this.radioGroup.color) ||\n (this._providerOverride && this._providerOverride.color) ||\n 'accent');\n }\n set color(newValue) {\n this._color = newValue;\n }\n /** ID of the native input element inside `` */\n get inputId() {\n return `${this.id || this._uniqueId}-input`;\n }\n /** Focuses the radio button. */\n focus(options, origin) {\n if (origin) {\n this._focusMonitor.focusVia(this._inputElement, origin, options);\n }\n else {\n this._inputElement.nativeElement.focus(options);\n }\n }\n /**\n * Marks the radio button as needing checking for change detection.\n * This method is exposed because the parent radio group will directly\n * update bound properties of the radio button.\n */\n _markForCheck() {\n // When group value changes, the button will not be notified. Use `markForCheck` to explicit\n // update radio button's status\n this._changeDetector.markForCheck();\n }\n ngOnInit() {\n if (this.radioGroup) {\n // If the radio is inside a radio group, determine if it should be checked\n this.checked = this.radioGroup.value === this._value;\n if (this.checked) {\n this.radioGroup.selected = this;\n }\n // Copy name from parent radio group\n this.name = this.radioGroup.name;\n }\n }\n ngDoCheck() {\n this._updateTabIndex();\n }\n ngAfterViewInit() {\n this._updateTabIndex();\n this._focusMonitor.monitor(this._elementRef, true).subscribe(focusOrigin => {\n if (!focusOrigin && this.radioGroup) {\n this.radioGroup._touch();\n }\n });\n }\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n this._removeUniqueSelectionListener();\n }\n /** Dispatch change event with current value. */\n _emitChangeEvent() {\n this.change.emit(new MatRadioChange(this, this._value));\n }\n _isRippleDisabled() {\n return this.disableRipple || this.disabled;\n }\n _onInputClick(event) {\n // We have to stop propagation for click events on the visual hidden input element.\n // By default, when a user clicks on a label element, a generated click event will be\n // dispatched on the associated input element. Since we are using a label element as our\n // root container, the click event on the `radio-button` will be executed twice.\n // The real click event will bubble up, and the generated click event also tries to bubble up.\n // This will lead to multiple click events.\n // Preventing bubbling for the second event will solve that issue.\n event.stopPropagation();\n }\n /** Triggered when the radio button receives an interaction from the user. */\n _onInputInteraction(event) {\n // We always have to stop propagation on the change event.\n // Otherwise the change event, from the input element, will bubble up and\n // emit its event object to the `change` output.\n event.stopPropagation();\n if (!this.checked && !this.disabled) {\n const groupValueChanged = this.radioGroup && this.value !== this.radioGroup.value;\n this.checked = true;\n this._emitChangeEvent();\n if (this.radioGroup) {\n this.radioGroup._controlValueAccessorChangeFn(this.value);\n if (groupValueChanged) {\n this.radioGroup._emitChangeEvent();\n }\n }\n }\n }\n /** Sets the disabled state and marks for check if a change occurred. */\n _setDisabled(value) {\n if (this._disabled !== value) {\n this._disabled = value;\n this._changeDetector.markForCheck();\n }\n }\n /** Gets the tabindex for the underlying input element. */\n _updateTabIndex() {\n var _a;\n const group = this.radioGroup;\n let value;\n // Implement a roving tabindex if the button is inside a group. For most cases this isn't\n // necessary, because the browser handles the tab order for inputs inside a group automatically,\n // but we need an explicitly higher tabindex for the selected button in order for things like\n // the focus trap to pick it up correctly.\n if (!group || !group.selected || this.disabled) {\n value = this.tabIndex;\n }\n else {\n value = group.selected === this ? this.tabIndex : -1;\n }\n if (value !== this._previousTabIndex) {\n // We have to set the tabindex directly on the DOM node, because it depends on\n // the selected state which is prone to \"changed after checked errors\".\n const input = (_a = this._inputElement) === null || _a === void 0 ? void 0 : _a.nativeElement;\n if (input) {\n input.setAttribute('tabindex', value + '');\n this._previousTabIndex = value;\n }\n }\n }\n}\n_MatRadioButtonBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: _MatRadioButtonBase, deps: \"invalid\", target: i0.ɵɵFactoryTarget.Directive });\n_MatRadioButtonBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"12.0.0\", version: \"13.3.0\", type: _MatRadioButtonBase, inputs: { id: \"id\", name: \"name\", ariaLabel: [\"aria-label\", \"ariaLabel\"], ariaLabelledby: [\"aria-labelledby\", \"ariaLabelledby\"], ariaDescribedby: [\"aria-describedby\", \"ariaDescribedby\"], checked: \"checked\", value: \"value\", labelPosition: \"labelPosition\", disabled: \"disabled\", required: \"required\", color: \"color\" }, outputs: { change: \"change\" }, viewQueries: [{ propertyName: \"_inputElement\", first: true, predicate: [\"input\"], descendants: true }], usesInheritance: true, ngImport: i0 });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: _MatRadioButtonBase, decorators: [{\n type: Directive\n }], ctorParameters: function () { return [{ type: _MatRadioGroupBase }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.FocusMonitor }, { type: i2.UniqueSelectionDispatcher }, { type: undefined }, { type: undefined }, { type: undefined }]; }, propDecorators: { id: [{\n type: Input\n }], name: [{\n type: Input\n }], ariaLabel: [{\n type: Input,\n args: ['aria-label']\n }], ariaLabelledby: [{\n type: Input,\n args: ['aria-labelledby']\n }], ariaDescribedby: [{\n type: Input,\n args: ['aria-describedby']\n }], checked: [{\n type: Input\n }], value: [{\n type: Input\n }], labelPosition: [{\n type: Input\n }], disabled: [{\n type: Input\n }], required: [{\n type: Input\n }], color: [{\n type: Input\n }], change: [{\n type: Output\n }], _inputElement: [{\n type: ViewChild,\n args: ['input']\n }] } });\n/**\n * A Material design radio-button. Typically placed inside of `` elements.\n */\nclass MatRadioButton extends _MatRadioButtonBase {\n constructor(radioGroup, elementRef, changeDetector, focusMonitor, radioDispatcher, animationMode, providerOverride, tabIndex) {\n super(radioGroup, elementRef, changeDetector, focusMonitor, radioDispatcher, animationMode, providerOverride, tabIndex);\n }\n}\nMatRadioButton.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatRadioButton, deps: [{ token: MAT_RADIO_GROUP, optional: true }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.FocusMonitor }, { token: i2.UniqueSelectionDispatcher }, { token: ANIMATION_MODULE_TYPE, optional: true }, { token: MAT_RADIO_DEFAULT_OPTIONS, optional: true }, { token: 'tabindex', attribute: true }], target: i0.ɵɵFactoryTarget.Component });\nMatRadioButton.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"12.0.0\", version: \"13.3.0\", type: MatRadioButton, selector: \"mat-radio-button\", inputs: { disableRipple: \"disableRipple\", tabIndex: \"tabIndex\" }, host: { listeners: { \"focus\": \"_inputElement.nativeElement.focus()\" }, properties: { \"class.mat-radio-checked\": \"checked\", \"class.mat-radio-disabled\": \"disabled\", \"class._mat-animation-noopable\": \"_noopAnimations\", \"class.mat-primary\": \"color === \\\"primary\\\"\", \"class.mat-accent\": \"color === \\\"accent\\\"\", \"class.mat-warn\": \"color === \\\"warn\\\"\", \"attr.tabindex\": \"null\", \"attr.id\": \"id\", \"attr.aria-label\": \"null\", \"attr.aria-labelledby\": \"null\", \"attr.aria-describedby\": \"null\" }, classAttribute: \"mat-radio-button\" }, exportAs: [\"matRadioButton\"], usesInheritance: true, ngImport: i0, template: \"\\n\\n\\n\", styles: [\".mat-radio-button{display:inline-block;-webkit-tap-highlight-color:transparent;outline:0}.mat-radio-label{-webkit-user-select:none;user-select:none;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;vertical-align:middle;width:100%}.mat-radio-container{box-sizing:border-box;display:inline-block;position:relative;width:20px;height:20px;flex-shrink:0}.mat-radio-outer-circle{box-sizing:border-box;display:block;height:20px;left:0;position:absolute;top:0;transition:border-color ease 280ms;width:20px;border-width:2px;border-style:solid;border-radius:50%}._mat-animation-noopable .mat-radio-outer-circle{transition:none}.mat-radio-inner-circle{border-radius:50%;box-sizing:border-box;display:block;height:20px;left:0;position:absolute;top:0;opacity:0;transition:transform ease 280ms,background-color ease 280ms,opacity linear 1ms 280ms;width:20px;transform:scale(0.001);-webkit-print-color-adjust:exact;color-adjust:exact}.mat-radio-checked .mat-radio-inner-circle{transform:scale(0.5);opacity:1;transition:transform ease 280ms,background-color ease 280ms}.cdk-high-contrast-active .mat-radio-checked .mat-radio-inner-circle{border:solid 10px}._mat-animation-noopable .mat-radio-inner-circle{transition:none}.mat-radio-label-content{-webkit-user-select:auto;user-select:auto;display:inline-block;order:0;line-height:inherit;padding-left:8px;padding-right:0}[dir=rtl] .mat-radio-label-content{padding-right:8px;padding-left:0}.mat-radio-label-content.mat-radio-label-before{order:-1;padding-left:0;padding-right:8px}[dir=rtl] .mat-radio-label-content.mat-radio-label-before{padding-right:0;padding-left:8px}.mat-radio-disabled,.mat-radio-disabled .mat-radio-label{cursor:default}.mat-radio-button .mat-radio-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-radio-button .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple){opacity:.16}.mat-radio-persistent-ripple{width:100%;height:100%;transform:none;top:0;left:0}.mat-radio-container:hover .mat-radio-persistent-ripple{opacity:.04}.mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-persistent-ripple,.mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-persistent-ripple{opacity:.12}.mat-radio-persistent-ripple,.mat-radio-disabled .mat-radio-container:hover .mat-radio-persistent-ripple{opacity:0}@media(hover: none){.mat-radio-container:hover .mat-radio-persistent-ripple{display:none}}.mat-radio-input{opacity:0;position:absolute;top:0;left:0;margin:0;width:100%;height:100%;cursor:inherit;z-index:-1}.cdk-high-contrast-active .mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-ripple,.cdk-high-contrast-active .mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-ripple{outline:solid 3px}.cdk-high-contrast-active .mat-radio-disabled{opacity:.5}\\n\"], directives: [{ type: i3.MatRipple, selector: \"[mat-ripple], [matRipple]\", inputs: [\"matRippleColor\", \"matRippleUnbounded\", \"matRippleCentered\", \"matRippleRadius\", \"matRippleAnimation\", \"matRippleDisabled\", \"matRippleTrigger\"], exportAs: [\"matRipple\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatRadioButton, decorators: [{\n type: Component,\n args: [{ selector: 'mat-radio-button', inputs: ['disableRipple', 'tabIndex'], encapsulation: ViewEncapsulation.None, exportAs: 'matRadioButton', host: {\n 'class': 'mat-radio-button',\n '[class.mat-radio-checked]': 'checked',\n '[class.mat-radio-disabled]': 'disabled',\n '[class._mat-animation-noopable]': '_noopAnimations',\n '[class.mat-primary]': 'color === \"primary\"',\n '[class.mat-accent]': 'color === \"accent\"',\n '[class.mat-warn]': 'color === \"warn\"',\n // Needs to be removed since it causes some a11y issues (see #21266).\n '[attr.tabindex]': 'null',\n '[attr.id]': 'id',\n '[attr.aria-label]': 'null',\n '[attr.aria-labelledby]': 'null',\n '[attr.aria-describedby]': 'null',\n // Note: under normal conditions focus shouldn't land on this element, however it may be\n // programmatically set, for example inside of a focus trap, in this case we want to forward\n // the focus to the native element.\n '(focus)': '_inputElement.nativeElement.focus()',\n }, changeDetection: ChangeDetectionStrategy.OnPush, template: \"\\n\\n\\n\", styles: [\".mat-radio-button{display:inline-block;-webkit-tap-highlight-color:transparent;outline:0}.mat-radio-label{-webkit-user-select:none;user-select:none;cursor:pointer;display:inline-flex;align-items:center;white-space:nowrap;vertical-align:middle;width:100%}.mat-radio-container{box-sizing:border-box;display:inline-block;position:relative;width:20px;height:20px;flex-shrink:0}.mat-radio-outer-circle{box-sizing:border-box;display:block;height:20px;left:0;position:absolute;top:0;transition:border-color ease 280ms;width:20px;border-width:2px;border-style:solid;border-radius:50%}._mat-animation-noopable .mat-radio-outer-circle{transition:none}.mat-radio-inner-circle{border-radius:50%;box-sizing:border-box;display:block;height:20px;left:0;position:absolute;top:0;opacity:0;transition:transform ease 280ms,background-color ease 280ms,opacity linear 1ms 280ms;width:20px;transform:scale(0.001);-webkit-print-color-adjust:exact;color-adjust:exact}.mat-radio-checked .mat-radio-inner-circle{transform:scale(0.5);opacity:1;transition:transform ease 280ms,background-color ease 280ms}.cdk-high-contrast-active .mat-radio-checked .mat-radio-inner-circle{border:solid 10px}._mat-animation-noopable .mat-radio-inner-circle{transition:none}.mat-radio-label-content{-webkit-user-select:auto;user-select:auto;display:inline-block;order:0;line-height:inherit;padding-left:8px;padding-right:0}[dir=rtl] .mat-radio-label-content{padding-right:8px;padding-left:0}.mat-radio-label-content.mat-radio-label-before{order:-1;padding-left:0;padding-right:8px}[dir=rtl] .mat-radio-label-content.mat-radio-label-before{padding-right:0;padding-left:8px}.mat-radio-disabled,.mat-radio-disabled .mat-radio-label{cursor:default}.mat-radio-button .mat-radio-ripple{position:absolute;left:calc(50% - 20px);top:calc(50% - 20px);height:40px;width:40px;z-index:1;pointer-events:none}.mat-radio-button .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple){opacity:.16}.mat-radio-persistent-ripple{width:100%;height:100%;transform:none;top:0;left:0}.mat-radio-container:hover .mat-radio-persistent-ripple{opacity:.04}.mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-persistent-ripple,.mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-persistent-ripple{opacity:.12}.mat-radio-persistent-ripple,.mat-radio-disabled .mat-radio-container:hover .mat-radio-persistent-ripple{opacity:0}@media(hover: none){.mat-radio-container:hover .mat-radio-persistent-ripple{display:none}}.mat-radio-input{opacity:0;position:absolute;top:0;left:0;margin:0;width:100%;height:100%;cursor:inherit;z-index:-1}.cdk-high-contrast-active .mat-radio-button:not(.mat-radio-disabled).cdk-keyboard-focused .mat-radio-ripple,.cdk-high-contrast-active .mat-radio-button:not(.mat-radio-disabled).cdk-program-focused .mat-radio-ripple{outline:solid 3px}.cdk-high-contrast-active .mat-radio-disabled{opacity:.5}\\n\"] }]\n }], ctorParameters: function () {\n return [{ type: MatRadioGroup, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_RADIO_GROUP]\n }] }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.FocusMonitor }, { type: i2.UniqueSelectionDispatcher }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [ANIMATION_MODULE_TYPE]\n }] }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [MAT_RADIO_DEFAULT_OPTIONS]\n }] }, { type: undefined, decorators: [{\n type: Attribute,\n args: ['tabindex']\n }] }];\n } });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nclass MatRadioModule {\n}\nMatRadioModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatRadioModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });\nMatRadioModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatRadioModule, declarations: [MatRadioGroup, MatRadioButton], imports: [MatRippleModule, MatCommonModule], exports: [MatRadioGroup, MatRadioButton, MatCommonModule] });\nMatRadioModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatRadioModule, imports: [[MatRippleModule, MatCommonModule], MatCommonModule] });\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"13.3.0\", ngImport: i0, type: MatRadioModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [MatRippleModule, MatCommonModule],\n exports: [MatRadioGroup, MatRadioButton, MatCommonModule],\n declarations: [MatRadioGroup, MatRadioButton],\n }]\n }] });\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { MAT_RADIO_DEFAULT_OPTIONS, MAT_RADIO_DEFAULT_OPTIONS_FACTORY, MAT_RADIO_GROUP, MAT_RADIO_GROUP_CONTROL_VALUE_ACCESSOR, MatRadioButton, MatRadioChange, MatRadioGroup, MatRadioModule, _MatRadioButtonBase, _MatRadioGroupBase };\n"]}