{"version":3,"file":"5286.72f3907dc66186aa.js","mappings":"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","names":["FormHelper","testCpf","control","controlname","controls","cpf0","soma","cpf","p","get","_a","value","M","u","_b","undefined","strCPF","replace","length","E","_c","setErrors","invalidCpf","f","_d","i","parseInt","substring","resto","P","_e","y","_f","k","O","_g","_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","startDate","formatDate","startTime","googleMapsUrl","bypassSecurityTrustResourceUrl","encodeURI","address","sectors","id","position","useMapPlace","useSeats","tickets","flatMap","ticketDateId","dateTickets","lotId","lotCurrent","fees","fee","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","t","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","c","r","filter","item","T","slug","n","_","m","tag","logo","s","l","_j","tagsFilter","JSON","parse","o","_k","v","_l","D","_m","I","F","_o","_p","K","G","L","_q","_r","_s","j","w","_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 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 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 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\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 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 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"]}