UNPKG

year-scheduler

Version:
1 lines 79.7 kB
{"version":3,"file":"year-scheduler.mjs","sources":["../../../projects/year-scheduler/src/lib/locales.ts","../../../projects/year-scheduler/src/lib/services/axiom-scheduler-sidebar.service.ts","../../../projects/year-scheduler/src/lib/services/axiom-scheduler.service.ts","../../../projects/year-scheduler/src/lib/axiom-scheduler/axiom-scheduler-component-common.component.ts","../../../projects/year-scheduler/src/lib/model/axiom-scheduler-year-view-month-object.model.ts","../../../projects/year-scheduler/src/lib/axiom-scheduler-month-tile-day/axiom-scheduler-month-tile-day.component.ts","../../../projects/year-scheduler/src/lib/axiom-scheduler-month-tile-day/axiom-scheduler-month-tile-day.component.html","../../../projects/year-scheduler/src/lib/axiom-scheduler-month-tile/axiom-scheduler-month-tile.component.ts","../../../projects/year-scheduler/src/lib/axiom-scheduler-month-tile/axiom-scheduler-month-tile.component.html","../../../projects/year-scheduler/src/lib/axiom-scheduler-event/axiom-scheduler-event.component.ts","../../../projects/year-scheduler/src/lib/axiom-scheduler-event/axiom-scheduler-event.component.html","../../../projects/year-scheduler/src/lib/axiom-scheduler-sidebar/axiom-scheduler-sidebar.component.ts","../../../projects/year-scheduler/src/lib/axiom-scheduler-sidebar/axiom-scheduler-sidebar.component.html","../../../projects/year-scheduler/src/lib/axiom-scheduler-year-view/axiom-scheduler-year-view.component.ts","../../../projects/year-scheduler/src/lib/axiom-scheduler-year-view/axiom-scheduler-year-view.component.html","../../../projects/year-scheduler/src/lib/axiom-scheduler/axiom-scheduler.component.ts","../../../projects/year-scheduler/src/lib/axiom-scheduler/axiom-scheduler.component.html","../../../projects/year-scheduler/src/lib/axiom-scheduler-dropdown/axiom-scheduler-dropdown.component.ts","../../../projects/year-scheduler/src/lib/axiom-scheduler-dropdown/axiom-scheduler-dropdown.component.html","../../../projects/year-scheduler/src/lib/year-scheduler.module.ts","../../../projects/year-scheduler/src/public-api.ts","../../../projects/year-scheduler/src/year-scheduler.ts"],"sourcesContent":["export const AX_LOCALES = [\n \"en\",\n \"af\",\n \"ar-dz\",\n \"ar-kw\",\n \"ar-ly\",\n \"ar-ma\",\n \"ar-sa\",\n \"ar-tn\",\n \"ar\",\n \"az\",\n \"be\",\n \"bg\",\n \"bm\",\n \"bn\",\n \"bo\",\n \"br\",\n \"bs\",\n \"ca\",\n \"cs\",\n \"cv\",\n \"cy\",\n \"da\",\n \"de-at\",\n \"de-ch\",\n \"de\",\n \"dv\",\n \"el\",\n \"en-SG\",\n \"en-au\",\n \"en-ca\",\n \"en-gb\",\n \"en-ie\",\n \"en-il\",\n \"en-nz\",\n \"eo\",\n \"es-do\",\n \"es-us\",\n \"es\",\n \"et\",\n \"eu\",\n \"fa\",\n \"fi\",\n \"fo\",\n \"fr-ca\",\n \"fr-ch\",\n \"fr\",\n \"fy\",\n \"ga\",\n \"gd\",\n \"gl\",\n \"gom-latn\",\n \"gu\",\n \"he\",\n \"hi\",\n \"hr\",\n \"hu\",\n \"hy-am\",\n \"id\",\n \"is\",\n \"it-ch\",\n \"it\",\n \"ja\",\n \"jv\",\n \"ka\",\n \"kk\",\n \"km\",\n \"kn\",\n \"ko\",\n \"ku\",\n \"ky\",\n \"lb\",\n \"lo\",\n \"lt\",\n \"lv\",\n \"me\",\n \"mi\",\n \"mk\",\n \"ml\",\n \"mn\",\n \"mr\",\n \"ms-my\",\n \"ms\",\n \"mt\",\n \"my\",\n \"nb\",\n \"ne\",\n \"nl-be\",\n \"nl\",\n \"nn\",\n \"pa-in\",\n \"pl\",\n \"pt-br\",\n \"pt\",\n \"ro\",\n \"ru\",\n \"sd\",\n \"se\",\n \"si\",\n \"sk\",\n \"sl\",\n \"sq\",\n \"sr-cyrl\",\n \"sr\",\n \"ss\",\n \"sv\",\n \"sw\",\n \"ta\",\n \"te\",\n \"tet\",\n \"tg\",\n \"th\",\n \"tl-ph\",\n \"tlh\",\n \"tr\",\n \"tzl\",\n \"tzm-latn\",\n \"tzm\",\n \"ug-cn\",\n \"uk\",\n \"ur\",\n \"uz-latn\",\n \"uz\",\n \"vi\",\n \"x-pseudo\",\n \"yo\",\n \"zh-cn\",\n \"zh-hk\",\n \"zh-tw\"\n ];","import { Subject } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport { AxiomSchedulerEvent } from '../model/axiom-scheduler-event.model';\n\nexport interface AxiomSchedulerSidebarData {\n title: string;\n events: AxiomSchedulerEvent[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AxiomSchedulerSidebarService {\n\n public toggle: Subject<boolean>;\n public data: Subject<AxiomSchedulerSidebarData>;\n\n constructor() {\n this.data = new Subject<AxiomSchedulerSidebarData>();\n this.toggle = new Subject<boolean>();\n }\n\n public open(data: AxiomSchedulerSidebarData): void {\n this.toggle.next(true);\n setTimeout(() => {\n this.data.next(data);\n }, 200);\n }\n\n public close(): void {\n this.toggle.next(false);\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport moment from 'moment';\nimport { AxiomSchedulerEvent } from '../model/axiom-scheduler-event.model';\nimport { AxiomSchedulerMonthData } from '../model/axiom-scheduler-month-data.model';\n\n@Injectable()\nexport class AxiomSchedulerService {\n\n private _defaultLocale = 'en';\n schedulerLocale: string = this._defaultLocale;\n locale: Subject<string>;\n refershRequest: Subject<moment.Moment>;\n eventChange: Subject<AxiomSchedulerEvent>;\n eventClick: Subject<AxiomSchedulerEvent>;\n eventDeleteClick: Subject<AxiomSchedulerEvent>;\n eventEditClick: Subject<AxiomSchedulerEvent>;\n axEvents: AxiomSchedulerMonthData[];\n\n constructor() {\n this.axEvents = [];\n this.refershRequest = new Subject<moment.Moment>();\n this.locale = new Subject<string>();\n this.eventChange = new Subject<AxiomSchedulerEvent>();\n this.eventClick = new Subject<AxiomSchedulerEvent>();\n this.eventDeleteClick = new Subject<AxiomSchedulerEvent>();\n this.eventEditClick = new Subject<AxiomSchedulerEvent>();\n }\n\n refreshDate(date: moment.Moment): void {\n date && this.refershRequest.next(date);\n }\n\n changeLocale(locale: string): void {\n this.schedulerLocale = locale || this._defaultLocale;\n this.locale.next(this.schedulerLocale);\n }\n\n eventChanged(event: AxiomSchedulerEvent): void {\n event && this.eventChange.next(event);\n }\n\n eventClicked(event: AxiomSchedulerEvent): void {\n event && this.eventClick.next(event);\n }\n\n getEventsForMonth(month: number): AxiomSchedulerEvent[] {\n let result: any[] = [];\n this.axEvents.some(m => {\n if (m.month === month + 1) {\n result = m.events;\n return true;\n }\n return false;\n });\n return result;\n }\n\n}\n","import { Component, Injector, Input, OnDestroy, TemplateRef } from '@angular/core';\r\nimport moment from 'moment';\r\nimport { Subscription } from 'rxjs';\r\nimport { distinct } from 'rxjs/operators';\r\nimport { AxiomSchedulerSidebarService } from '../services/axiom-scheduler-sidebar.service';\r\nimport { AxiomSchedulerService } from '../services/axiom-scheduler.service';\r\n\r\n@Component({\n template: '',\n standalone: false\n})\r\nexport class AxiomSchedulerComponentCommon implements OnDestroy {\r\n \r\n @Input() axStartDate!: Date;\r\n @Input() axEventTemplate!: TemplateRef<any>;\r\n @Input() axEventFormatter!: (data: any, date?: Date) => string;\r\n @Input() axDragStep!: 5;\r\n @Input() axLocale!: string;\r\n @Input() axEventToolbar!: true;\r\n \r\n public today: moment.Moment;\r\n public date!: moment.Moment;\r\n public service: AxiomSchedulerService;\r\n public sidebarService: AxiomSchedulerSidebarService;\r\n public subscriptionGarbageCollection: Subscription[] = [];\r\n \r\n constructor(protected injector: Injector) {\r\n this.today = moment();\r\n this.service = this.injector.get(AxiomSchedulerService);\r\n this.sidebarService = this.injector.get(AxiomSchedulerSidebarService);\r\n this.subscriptionGarbageCollection.push(this.service.refershRequest.subscribe((s) => {\r\n if (s) {\r\n this.date = s.clone();\r\n this.date.locale(this.service.schedulerLocale);\r\n this.refreshView();\r\n }\r\n }));\r\n this.subscriptionGarbageCollection.push(this.service.locale.pipe(distinct()).subscribe((locale) => {\r\n moment.locale(locale);\r\n if (this.date) {\r\n this.date.locale(this.service.schedulerLocale);\r\n this.refreshView();\r\n }\r\n }));\r\n }\r\n \r\n public refreshDate(axStartDate?: Date): void {\r\n this.date = axStartDate ? moment(axStartDate) : moment(Date.now());\r\n }\r\n \r\n public refreshView(): void { }\r\n \r\n public ngOnDestroy(): void {\r\n if (Array.isArray(this.subscriptionGarbageCollection)) {\r\n this.subscriptionGarbageCollection.forEach(g => g && g.unsubscribe());\r\n }\r\n this.baseDestroy();\r\n }\r\n \r\n public baseDestroy(): void { }\r\n \r\n }","import moment from 'moment';\r\n\r\nexport class AxiomSchedulerYearViewMonthObject {\r\n\r\n public month: moment.Moment;\r\n public days!: moment.Moment[];\r\n public monthWeeks: number[] = [];\r\n \r\n constructor(month: moment.Moment) {\r\n this.month = month.clone();\r\n this.setDays();\r\n }\r\n \r\n setDays(): void {\r\n const monthSize = 42;\r\n const startOfMonth = this.month.clone().startOf('month');\r\n const endOfMonth = this.month.clone().endOf('month');\r\n this.days = [];\r\n let day = startOfMonth.clone();\r\n while (day <= endOfMonth) {\r\n this.days.push(day);\r\n day = day.clone().add(1, 'd');\r\n }\r\n this.setMonthWeeks(startOfMonth, endOfMonth);\r\n // Solo si empieza en lunes el mes no se anhade ningun dia anterior\r\n if (startOfMonth.clone().get('d') > 1 || startOfMonth.clone().get('d') === 0) {\r\n day = startOfMonth.clone();\r\n while (day.get('d') > 1 || day.get('d') === 0) {\r\n day = day.clone().add(-1, 'days');\r\n this.days.unshift(day);\r\n }\r\n }\r\n if (this.days.length < monthSize) {\r\n const size = (monthSize - this.days.length);\r\n for (let index = 1; index <= size; index++) {\r\n this.days.push(endOfMonth.clone().add(index, 'days'));\r\n }\r\n }\r\n }\r\n \r\n setMonthWeeks(startOfMonth: moment.Moment, endOfMonth: moment.Moment): void {\r\n let day = startOfMonth.clone();\r\n const set = new Set<number>();\r\n const date = startOfMonth.clone().startOf('year');\r\n // El domingo es el 0 por lo que lo controlamos especificamente\r\n let yearStartDays = date.get('d');\r\n if (yearStartDays === 0) {\r\n yearStartDays = 6;\r\n } else {\r\n yearStartDays -= 1;\r\n }\r\n while (day <= endOfMonth) {\r\n set.add(Math.ceil((day.dayOfYear() + yearStartDays) / 7));\r\n day = day.add(1, 'd');\r\n }\r\n this.monthWeeks = Array.from(set);\r\n }\r\n \r\n }","import { Component, OnInit, Injector, ViewEncapsulation, Input, Renderer2, ElementRef } from '@angular/core';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport moment from 'moment';\nimport { AxiomSchedulerEvent } from '../model/axiom-scheduler-event.model';\nimport { AxiomSchedulerComponentCommon } from '../axiom-scheduler/axiom-scheduler-component-common.component';\n\n@Component({\n selector: '[ax-scheduler-month-tile-day]',\n templateUrl: './axiom-scheduler-month-tile-day.component.html',\n styleUrls: ['./axiom-scheduler-month-tile-day.component.scss'],\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'ax-scheduler__year-view__month__day',\n '[class.hasEvent]': 'events.length > 0',\n '(click)': 'showEventsDialog()'\n },\n animations: [\n trigger('dialogAnimation', [\n transition(':enter', [\n style({ transform: 'scale(0)' }),\n animate(`${190}ms ease-in`, style({ transform: 'scale(1.1)' })),\n animate(`${100}ms ease-in`, style({ transform: 'scale(1)' }))\n ]),\n transition(':leave', [\n animate(`${80}ms ease-in-out`, style({ transform: 'scale(0)' }))\n ])\n ])\n ],\n standalone: false\n})\nexport class AxiomSchedulerMonthTileDayComponent extends AxiomSchedulerComponentCommon implements OnInit {\n\n @Input() day!: moment.Moment;\n\n public events: AxiomSchedulerEvent[] = [];\n\n constructor(injector: Injector, private _renderer: Renderer2, private _element: ElementRef) {\n super(injector);\n }\n\n public ngOnInit(): void {\n this.refreshDate();\n this.refreshView();\n }\n\n public showEventsDialog(): void {\n if (this.events && this.events.length > 0) {\n this.sidebarService.open({ title: `${this.day.format('DD MMMM YYYY')}`, events: this.events });\n }\n }\n\n public override refreshView(): void {\n this.checkEvents();\n // const text = `${this.events.length} event${this.events.length > 1 ? 's' : ''}, Click to show detail...`;\n // this._renderer.setAttribute(this._element.nativeElement, 'title', text);\n }\n\n private checkEvents(): void {\n this.events = [];\n const startOfDay = this.day.clone().startOf('day');\n this.service.getEventsForMonth(this.day.get('month')).forEach(ev => {\n if (ev.date && moment(ev.date).isSame(startOfDay, 'day')) {\n this.events.push(ev);\n }\n });\n }\n\n}\n\n","\n{{ day.format('DD') }}\n","import { Component, OnInit, ViewEncapsulation, Injector, Input } from '@angular/core';\nimport { AxiomSchedulerComponentCommon } from '../axiom-scheduler/axiom-scheduler-component-common.component';\nimport { AxiomSchedulerYearViewMonthObject } from '../model/axiom-scheduler-year-view-month-object.model';\n\n@Component({\n selector: '[ax-scheduler-month-tile]',\n templateUrl: './axiom-scheduler-month-tile.component.html',\n styleUrls: ['./axiom-scheduler-month-tile.component.scss'],\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'ax-scheduler__year-view__month'\n },\n standalone: false\n})\nexport class AxiomSchedulerMonthTileComponent extends AxiomSchedulerComponentCommon implements OnInit {\n\n @Input() monthObject!: AxiomSchedulerYearViewMonthObject;\n\n @Input()\n weekDays!: string[];\n\n constructor(injector: Injector) {\n super(injector);\n }\n\n public ngOnInit(): void {\n this.refreshDate();\n }\n\n public override refreshView(): void {\n this.monthObject.month = this.date.startOf('months');\n this.monthObject.setDays();\n }\n\n}\n","\n\n<div class=\"ax-scheduler__year-view__month__header\">\n {{ monthObject.month.format('MMMM') }}\n</div>\n<div class=\"ax-scheduler__year-view__content\">\n <div class=\"ax-scheduler__year-view__content_weekNumbers\">\n <div *ngFor=\"let dayLetter of monthObject.monthWeeks\">\n <span>\n {{dayLetter}}\n </span> \n </div>\n </div>\n <div class=\"ax-scheduler__year-view__month__body\">\n <div class=\"ax-scheduler__year-header\" *ngFor=\"let dayLetter of weekDays\">\n <span class=\"ax-scheduler__year-view__header__day\">\n {{dayLetter}}\n </span> \n </div>\n <div *ngFor=\"let day of monthObject.days\" class=\"ax-scheduler__year-data\" \n [ngClass]=\"{ 'today' : day.isSame(today,'days') , 'current' : day.isSame(monthObject.month,'months') }\">\n <span ax-scheduler-month-tile-day *ngIf=\"day.isSame(monthObject.month,'months')\"\n [axEventTemplate] = \"axEventTemplate\"\n [axEventFormatter] = \"axEventFormatter\"\n [axDragStep]=\"axDragStep\"\n [axStartDate]=\"axStartDate\"\n [day]=\"day\"></span>\n </div>\n </div>\n</div>","import { Component, OnInit, Input, ViewEncapsulation, Renderer2, ElementRef, AfterViewInit, Injector } from '@angular/core';\nimport moment from 'moment';\nimport { trigger, style, transition, animate } from '@angular/animations';\nimport { AxiomSchedulerEvent } from '../model/axiom-scheduler-event.model';\nimport { AxiomSchedulerComponentCommon } from '../axiom-scheduler/axiom-scheduler-component-common.component';\n\n@Component({\n selector: '[ax-scheduler-event]',\n templateUrl: './axiom-scheduler-event.component.html',\n styleUrls: ['./axiom-scheduler-event.component.scss'],\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'ax-scheduler__event',\n '[class.expired]': 'expired',\n '(click)': 'service.eventClicked(event)'\n },\n animations: [\n trigger('timeAnimate', [\n transition(':enter', [\n style({ transform: 'scale(0)' }),\n animate(`${180}ms ease-in`, style({ transform: 'scale(1)' }))\n ]),\n transition(':leave', [\n animate(`${80}ms ease-out`, style({ opacity: '0' }))\n ])\n ])\n ],\n standalone: false\n})\nexport class AxiomSchedulerEventComponent extends AxiomSchedulerComponentCommon implements OnInit, AfterViewInit {\n\n @Input() event!: AxiomSchedulerEvent;\n @Input() monthMode = false;\n\n public ctx: any;\n public fromTime!: moment.Moment;\n public toTime!: moment.Moment;\n public diff!: number;\n public showTime = false;\n public expired = false;\n\n private timeout: any;\n\n constructor(injector: Injector, private _renderer: Renderer2, private _element: ElementRef) {\n super(injector);\n }\n\n public ngOnInit(): void {\n this.ctx = { item: this.event };\n // this.applyColor();\n }\n\n public ngAfterViewInit(): void {\n }\n\n public override refreshView(): void {\n\n }\n\n public deleteEevent(): void {\n this.service.eventDeleteClick.next(this.event);\n }\n\n public editEevent(): void {\n this.service.eventEditClick.next(this.event);\n }\n\n public mouseDown(ev: MouseEvent): void {\n ev && ev.preventDefault();\n ev && ev.stopPropagation();\n }\n\n private applyColor(): void {\n if (this.event.color) {\n this._renderer.setStyle(this._element.nativeElement, 'background', this.event.color);\n }\n }\n\n private toggleShowTime(toggle: boolean): void {\n if (toggle) {\n this.timeout = setTimeout(() => {\n this.showTime = toggle;\n }, 200);\n } else {\n clearTimeout(this.timeout);\n this.showTime = toggle;\n }\n }\n\n}\n","<ng-container *ngIf=\"!monthMode && axEventTemplate\">\n <p [@timeAnimate] *ngIf=\"showTime\">\n <span>{{ fromTime && fromTime.format('HH:mm') }}</span>\n <span>{{ toTime && toTime.format('HH:mm') }}</span>\n </p>\n\n <div class=\"ax-scheduler__event__content\">\n <ng-container *ngTemplateOutlet=\"axEventTemplate;context:ctx\">\n </ng-container>\n </div>\n</ng-container>\n<ng-container *ngIf=\"monthMode && axEventTemplate\">\n <div class=\"ax-scheduler__event__content\">\n <ng-container *ngTemplateOutlet=\"axEventTemplate;context:ctx\">\n </ng-container>\n </div>\n</ng-container>\n<ng-container *ngIf=\"!axEventTemplate\">\n <p [@timeAnimate] *ngIf=\"showTime\">\n <span>{{ fromTime && fromTime.format('HH:mm') }}</span>\n <span>{{ toTime && toTime.format('HH:mm') }}</span>\n </p>\n <div class=\"ax-scheduler__event__content\">\n {{ event.title }}\n </div>\n</ng-container>\n\n<svg class=\"ax-lock-event\" *ngIf=\"event.locked\" style=\"enable-background:new 0 0 64 64;\" version=\"1.1\"\n viewBox=\"0 0 64 64\" xml:space=\"preserve\" xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <g>\n <g id=\"Icon-Lock\" transform=\"translate(284.000000, 430.000000)\">\n <path class=\"st0\"\n d=\"M-237.7-401.3h-3v-6.4c0-6.2-5.1-11.3-11.3-11.3c-6.2,0-11.3,5.1-11.3,11.3v6.4h-3v-6.4 c0-7.9,6.4-14.3,14.3-14.3s14.3,6.4,14.3,14.3V-401.3\"\n id=\"Fill-66\" />\n <path class=\"st0\"\n d=\"M-239.2-374.1h-25.6c-2.6,0-4.8-2.2-4.8-4.8v-19.2c0-2.6,2.2-4.8,4.8-4.8h25.6 c2.6,0,4.8,2.2,4.8,4.8v19.2C-234.4-376.2-236.6-374.1-239.2-374.1L-239.2-374.1z M-264.8-399.7c-0.9,0-1.6,0.7-1.6,1.6v19.2 c0,0.9,0.7,1.6,1.6,1.6h25.6c0.9,0,1.6-0.7,1.6-1.6v-19.2c0-0.9-0.7-1.6-1.6-1.6H-264.8L-264.8-399.7z\"\n id=\"Fill-67\" />\n <path class=\"st0\"\n d=\"M-248.8-393.3c0,1.8-1.4,3.2-3.2,3.2s-3.2-1.4-3.2-3.2s1.4-3.2,3.2-3.2S-248.8-395-248.8-393.3 \"\n id=\"Fill-68\" />\n <polyline class=\"st0\" id=\"Fill-69\"\n points=\"-251.2,-393.3 -252.8,-393.3 -254.4,-383.7 -249.6,-383.7 -251.2,-393.3 \" />\n </g>\n </g>\n</svg>\n","import { Component, OnInit, OnDestroy, ElementRef, Input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { ReplaySubject, fromEvent, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { AxiomSchedulerSidebarService, AxiomSchedulerSidebarData } from '../services/axiom-scheduler-sidebar.service';\n\n@Component({\n selector: '[ax-scheduler-sidebar]',\n templateUrl: './axiom-scheduler-sidebar.component.html',\n styleUrls: ['./axiom-scheduler-sidebar.component.scss'],\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'ax-scheduler__sidebar'\n },\n animations: [\n trigger('slideInOutRight', [\n transition(':enter', [\n style({ transform: 'translateX(100%)' }),\n animate(`${150}ms ease-in`, style({ transform: 'translateX(0%)' }))\n ]),\n transition(':leave', [\n animate(`${240}ms ease-out`, style({ transform: 'translateX(100%)' }))\n ])\n ])\n ],\n standalone: false\n})\nexport class AxiomSchedulerSidebarComponent implements OnInit, OnDestroy {\n\n @Input() axEventTemplate!: TemplateRef<any>;\n @Input() axEventToolbar!: true;\n public data!: AxiomSchedulerSidebarData;\n\n protected destroyed: ReplaySubject<boolean> = new ReplaySubject<boolean>(1);\n private subs!: Subscription;\n\n constructor(private _element: ElementRef, private _sidebarService: AxiomSchedulerSidebarService) { }\n\n public ngOnInit(): void {\n this.subs = this._sidebarService.data.subscribe(data => {\n this.data = data;\n this.setEventObserver();\n });\n }\n\n public ngOnDestroy(): void {\n this.destroyEventObserver();\n this.subs && this.subs.unsubscribe();\n }\n\n public close(): void {\n this._sidebarService.close();\n }\n\n private closeOnGlobalKeydown(event: KeyboardEvent): void {\n if ((event.key || event.keyCode) === 27) {\n this._sidebarService.close();\n }\n }\n\n private setEventObserver(): void {\n this.destroyed = new ReplaySubject<boolean>(1);\n fromEvent<KeyboardEvent>(document, 'keydown').pipe(takeUntil(this.destroyed)).subscribe((event: KeyboardEvent) => this.closeOnGlobalKeydown(event));\n }\n\n private destroyEventObserver(): void {\n if (this.destroyed) {\n this.destroyed.next(true);\n this.destroyed.complete();\n }\n }\n\n}\n","<span class=\"ax-scheduler__close-button\" (click)=\"close()\">×</span>\n\n<h6 *ngIf=\"data\">{{ data.title }}</h6>\n\n<ng-container *ngIf=\"data\">\n\n <div [@slideInOutRight] *ngFor=\"let event of data.events\" [event]=\"event\" [monthMode]=\"true\"\n [axEventToolbar]=\"axEventToolbar\" [axEventTemplate]=\"axEventTemplate\" ax-scheduler-event></div>\n\n</ng-container>","import { Component, OnInit, ViewEncapsulation, Injector } from '@angular/core';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport moment from 'moment';\nimport { AxiomSchedulerYearViewMonthObject } from '../model/axiom-scheduler-year-view-month-object.model';\nimport { AxiomSchedulerComponentCommon } from '../axiom-scheduler/axiom-scheduler-component-common.component';\n\n@Component({\n selector: '[ax-scheduler-year-view]',\n templateUrl: './axiom-scheduler-year-view.component.html',\n styleUrls: ['./axiom-scheduler-year-view.component.scss'],\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'ax-scheduler__year-view'\n },\n animations: [\n trigger('slideInOutRight', [\n transition(':enter', [\n style({ transform: 'translateX(-100%)' }),\n animate(`${120}ms ease-in-out`, style({ transform: 'translateX(0%)' }))\n ]),\n transition(':leave', [\n animate(`${100}ms ease-in-out`, style({ transform: 'translateX(100%)' }))\n ])\n ])\n ],\n standalone: false\n})\nexport class AxiomSchedulerYearViewComponent extends AxiomSchedulerComponentCommon implements OnInit {\n\n public months!: AxiomSchedulerYearViewMonthObject[];\n public sidebar = false;\n public weekDays!: string[];\n\n constructor(injector: Injector) {\n super(injector);\n }\n\n public ngOnInit(): void {\n this.weekDays = Array.from(moment.localeData().weekdaysMin());\n // Pasamos o domingo o final\n this.weekDays.push(this.weekDays.shift()!);\n this.subscriptionGarbageCollection.push(this.sidebarService.toggle.subscribe(toggle => {\n this.sidebar = toggle;\n }));\n this.refreshDate();\n this.refreshView();\n }\n\n public override refreshView(): void {\n this.setMonths();\n }\n\n private setMonths(): void {\n const startMonth = this.date.clone().startOf('year');\n const endMonth = this.date.clone().endOf('year');\n this.months = [];\n let month = startMonth.clone();\n while (month <= endMonth) {\n this.months.push(new AxiomSchedulerYearViewMonthObject(month));\n month = month.clone().add(1, 'month');\n }\n }\n\n}\n","\n<div *ngFor=\"let month of months\">\n <div ax-scheduler-month-tile\n [monthObject]=\"month\"\n [axEventTemplate] = \"axEventTemplate\"\n [axEventFormatter] = \"axEventFormatter\"\n [axDragStep]=\"axDragStep\"\n [axEventToolbar]=\"axEventToolbar\"\n [axStartDate]=\"axStartDate\"\n [weekDays]=\"weekDays\"></div>\n</div>\n\n\n<div ax-scheduler-sidebar *ngIf=\"sidebar\" [@slideInOutRight] [axEventTemplate]=\"axEventTemplate\" [axEventToolbar]=\"axEventToolbar\"></div>","import { Component, ElementRef, EventEmitter, Injector, Input, OnInit, Output, Renderer2, ViewEncapsulation } from '@angular/core';\nimport moment from 'moment';\nimport { AxiomSchedulerEvent } from '../model/axiom-scheduler-event.model';\nimport { AxiomSchedulerMonthData } from '../model/axiom-scheduler-month-data.model';\nimport { AX_LOCALES } from '../locales';\nimport { AxiomSchedulerSidebarService } from '../services/axiom-scheduler-sidebar.service';\nimport { AxiomSchedulerService } from '../services/axiom-scheduler.service';\nimport { AxiomSchedulerComponentCommon } from './axiom-scheduler-component-common.component';\n\nexport enum AxiomSchedulerView {\n Year = 'year'\n}\nexport enum AxiomSchedulerAnimation {\n Animation1 = 'animation1',\n Animation2 = 'animation2',\n Animation3 = 'animation3',\n Animation4 = 'animation4',\n Default = 'default',\n None = 'none'\n}\n\nexport type AxiomSchedulerTheme = 'light' | 'dark';\n\n@Component({\n selector: 'ax-scheduler',\n templateUrl: './axiom-scheduler.component.html',\n styleUrls: ['./axiom-scheduler.component.scss'],\n encapsulation: ViewEncapsulation.None,\n providers: [AxiomSchedulerService, AxiomSchedulerSidebarService],\n host: {\n 'class': 'ax-scheduler'\n },\n standalone: false\n})\nexport class AxiomSchedulerComponent extends AxiomSchedulerComponentCommon implements OnInit {\n\n @Input() axEvents!: AxiomSchedulerMonthData[];\n @Input() axSchedulerView!: AxiomSchedulerView;\n @Input() set axTheme(axTheme: AxiomSchedulerTheme) {\n this._axTheme = axTheme;\n this.updateTheme(this._axTheme);\n }\n @Input() set axAnimation(axAnimation: AxiomSchedulerAnimation) {\n this._axAnimation = axAnimation;\n this.updateTheme(this._axTheme);\n }\n @Input() axShowLocale!: true;\n @Input() axViews!: AxiomSchedulerView[];\n\n @Output() axEventChange = new EventEmitter<AxiomSchedulerEvent>();\n @Output() axEventClick = new EventEmitter<AxiomSchedulerEvent>();\n @Output() axEventDeleteClick = new EventEmitter<AxiomSchedulerEvent>();\n @Output() axEventEditClick = new EventEmitter<AxiomSchedulerEvent>();\n @Output() axDateChange = new EventEmitter<Date>();\n @Output() axViewChange = new EventEmitter<AxiomSchedulerView>();\n\n public items: any[] = [];\n public locales = AX_LOCALES.map((v) => {\n return { id: v, title: v };\n });\n\n private _axTheme!: AxiomSchedulerTheme;\n private _axAnimation!: AxiomSchedulerAnimation;\n\n constructor(injector: Injector, private _element: ElementRef, private _renderer: Renderer2) {\n super(injector);\n }\n\n public ngOnInit(): void {\n this.axLocale = this.axLocale || 'en';\n this.setListeners();\n this.updateTheme(this._axTheme);\n this.refreshDate();\n this.setViews();\n this.refreshScheduler();\n }\n\n public refreshScheduler(refresh = false, events?: AxiomSchedulerMonthData[]) {\n this.setLocale(this.axLocale);\n if (refresh) {\n this.axEvents = events!;\n this.service.axEvents = events!;\n this.sidebarService.close();\n } else {\n this.service.axEvents = this.axEvents;\n }\n this.service.refreshDate(this.date);\n }\n\n public changeYear(step: number): void {\n this.step(step);\n // this.service.refreshDate(this.date);\n }\n\n public todayF(): void {\n this.applyDefaultAnimations(this.date.clone().isBefore(moment()) ? 1 : -1);\n this.date = moment();\n this.service.refreshDate(this.date);\n this.axDateChange && this.axDateChange.emit(this.date.clone().toDate());\n }\n\n public modelFormatter(value: any): any {\n return value ? value.id : null;\n }\n\n public setLocale(locale: string): void {\n this.service.changeLocale(locale);\n }\n\n public updateTheme(theme: 'light' | 'dark'): void {\n if (theme) {\n this._renderer.removeClass(this._element.nativeElement, 'dark');\n this._renderer.removeClass(this._element.nativeElement, 'light');\n this._renderer.addClass(this._element.nativeElement, theme);\n //\n if (this._axAnimation === 'none') {\n Object.values(AxiomSchedulerAnimation).forEach((animation) => {\n this._renderer.removeClass(this._element.nativeElement, animation);\n });\n } else {\n Object.values(AxiomSchedulerAnimation).forEach((animation) => {\n this._renderer.removeClass(this._element.nativeElement, animation);\n });\n this._renderer.addClass(this._element.nativeElement, this._axAnimation);\n }\n }\n }\n\n public changeView(view: any): void {\n this.axSchedulerView = view.id;\n this.axViewChange && this.axViewChange.emit(view.id);\n }\n\n private step(step: number): void {\n switch (this.axSchedulerView) {\n case AxiomSchedulerView.Year:\n this.date = this.date.clone().add(step, 'years');\n break;\n }\n this.applyDefaultAnimations(step);\n this.axDateChange && this.axDateChange.emit(this.date.clone().toDate());\n }\n\n private applyDefaultAnimations(step: number): void {\n if (this._axAnimation === AxiomSchedulerAnimation.Default) {\n this._renderer.removeClass(this._element.nativeElement, 'forward');\n this._renderer.removeClass(this._element.nativeElement, 'backward');\n if (step > 0) {\n this._renderer.addClass(this._element.nativeElement, 'forward');\n } else {\n this._renderer.addClass(this._element.nativeElement, 'backward');\n }\n }\n }\n\n private setViews(): void {\n const def = [\n { id: AxiomSchedulerView.Year, title: 'Year' }\n ];\n if (Array.isArray(this.axViews)) {\n this.items = [...def.filter(i => this.axViews.indexOf(i.id) >= 0)];\n } else {\n this.items = [...def];\n }\n if (!this.axSchedulerView) {\n this.axSchedulerView = this.items[0].id;\n }\n }\n\n private setListeners(): void {\n this.subscriptionGarbageCollection.push(this.service.eventChange.subscribe(event => {\n this.axEventChange && this.axEventChange.emit(event);\n }));\n this.subscriptionGarbageCollection.push(this.service.eventClick.subscribe(event => {\n this.axEventClick && this.axEventClick.emit(event);\n }));\n this.subscriptionGarbageCollection.push(this.service.eventDeleteClick.subscribe(event => {\n this.axEventDeleteClick && this.axEventDeleteClick.emit(event);\n }));\n this.subscriptionGarbageCollection.push(this.service.eventEditClick.subscribe(event => {\n this.axEventEditClick && this.axEventEditClick.emit(event);\n }));\n }\n\n}\n","<div class=\"ax-scheduler__base\">\n <div class=\"ax-scheduler__header\">\n <div class=\"ax-scheduler__header__date-part__nav\">\n <button (click)=\"changeYear(-1)\">\n <svg height=\"24px\" version=\"1.1\" viewBox=\"0 0 24 24\" width=\"24px\" xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n\n <g fill=\"none\" fill-rule=\"evenodd\" id=\"icon/chevron-back\" stroke=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" stroke-width=\"1\">\n <polyline id=\"lineart\" points=\"15.5 20.4751 6.5 11.4751 15.5 2.4751\" stroke=\"#000000\" />\n </g>\n </svg>\n </button>\n <div class=\"ax-scheduler__header__date-part__title\" (click)=\"changeYear(-2)\">\n <b>{{ date.clone().add(-2, 'years').format('YYYY') }}</b>\n </div>\n <div class=\"ax-scheduler__header__date-part__title\" (click)=\"changeYear(-1)\">\n <b>{{ date.clone().add(-1, 'years').format('YYYY') }}</b>\n </div>\n <div class=\"ax-scheduler__header__date-part__title selected\">\n <b>{{ date.format('YYYY') }}</b>\n </div>\n <div class=\"ax-scheduler__header__date-part__title\" (click)=\"changeYear(1)\">\n <b>{{ date.clone().add(1, 'years').format('YYYY') }}</b>\n </div>\n <div class=\"ax-scheduler__header__date-part__title\" (click)=\"changeYear(2)\">\n <b>{{ date.clone().add(2, 'years').format('YYYY') }}</b>\n </div>\n <button (click)=\"changeYear(1)\">\n <svg height=\"24px\" version=\"1.1\" viewBox=\"0 0 24 24\" width=\"24px\" xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <g fill=\"none\" fill-rule=\"evenodd\" id=\"icon/chevron-forward\" stroke=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" stroke-width=\"1\">\n <polyline id=\"lineart\" points=\"7.5 20.4751 16.5 11.4751 7.5 2.4751\" stroke=\"#000000\" />\n </g>\n </svg>\n </button>\n </div>\n </div>\n\n <div class=\"ax-scheduler__body\">\n\n <div ax-scheduler-year-view [axEventTemplate]=\"axEventTemplate\" [axEventFormatter]=\"axEventFormatter\"\n [axDragStep]=\"axDragStep\" [axStartDate]=\"date.toDate()\" [axEventToolbar]=\"axEventToolbar\">\n\n </div>\n\n </div>\n</div>","import { Component, OnInit, ViewEncapsulation, forwardRef, Input, Output, EventEmitter, ElementRef, OnDestroy } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { trigger, transition, style, animate } from '@angular/animations';\nimport { ReplaySubject, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Component({\n selector: 'ax-scheduler-dropdown',\n templateUrl: './axiom-scheduler-dropdown.component.html',\n styleUrls: ['./axiom-scheduler-dropdown.component.scss'],\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => AxiomSchedulerDropdownComponent),\n multi: true\n }\n ],\n host: {\n 'class': 'ax-scheduler-dropdown',\n '[class.open]': 'open'\n },\n animations: [\n trigger('dropdownAnimation', [\n transition(':leave', [\n animate(`${80}ms ease-in-out`, style({ transform: 'scale(0)' }))\n ])\n ])\n ],\n standalone: false\n})\nexport class AxiomSchedulerDropdownComponent implements OnInit, ControlValueAccessor, OnDestroy {\n\n @Input() dataTitle!: string;\n @Input() dataId!: string;\n @Input() items: any[] = [];\n @Input() modelFormatter!: (val: any) => any;\n @Input() set ngModel(ngModel: any) {\n this._ngModel = ngModel;\n }\n get ngModel() {\n return this._ngModel;\n }\n\n @Output() ngModelChange = new EventEmitter<any>();\n\n public open!: boolean;\n\n protected destroyed: ReplaySubject<boolean> = new ReplaySubject<boolean>(1);\n\n private _ngModel: any;\n\n constructor(private _element: ElementRef) { }\n\n public ngOnInit(): void {\n }\n\n public ngOnDestroy(): void {\n this.destroyEventObserver();\n }\n\n public onChange() {\n this.propagateChange(this.ngModel);\n }\n\n public writeValue(obj: any): void {\n this.ngModel = obj;\n }\n\n public registerOnChange(fn: (_: any) => void): void {\n this.propagateChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public propagateChange = (_: any) => { }\n\n public onTouched = () => { };\n\n public toggle(toggle = !this.open): void {\n this.open = toggle;\n if (this.open) {\n this.setEventObserver();\n } else {\n this.destroyEventObserver();\n }\n }\n\n public inputFormatter(): string {\n if (this.ngModel) {\n const index = this.items.findIndex(i => i[this.dataId] === this.ngModel);\n if (index > -1) {\n return this.items[index][this.dataTitle];\n }\n }\n return '';\n }\n\n public select(item: any): void {\n this.ngModel = this.modelFormatter ? this.modelFormatter(item) : item;\n this.propagateChange(this.ngModel);\n this.toggle(false);\n }\n\n private closeOnGlobalClick(targetElement: any): void {\n if (targetElement) {\n const arrow = targetElement.id === 'ax-dropdown-arr';\n const clickedInside = this._element.nativeElement.contains(targetElement);\n if (!clickedInside && !arrow) {\n this.toggle(false);\n }\n }\n }\n\n private closeOnGlobalKeydown(event: KeyboardEvent): void {\n if (event.keyCode === 27) {\n this.toggle(false);\n }\n }\n\n private setEventObserver(): void {\n this.destroyed = new ReplaySubject<boolean>(1);\n fromEvent<MouseEvent>(document, 'click').pipe(takeUntil(this.destroyed)).subscribe((event: MouseEvent) => this.closeOnGlobalClick(event.target));\n fromEvent<KeyboardEvent>(document, 'keydown').pipe(takeUntil(this.destroyed)).subscribe((event: KeyboardEvent) => this.closeOnGlobalKeydown(event));\n }\n\n private destroyEventObserver(): void {\n if (this.destroyed) {\n this.destroyed.next(true);\n this.destroyed.complete();\n }\n }\n\n\n}\n","<div class=\"ax-scheduler-dropdown__model\" (click)=\"toggle()\">\n {{ inputFormatter() }}\n\n <svg id=\"ax-dropdown-arr\" *ngIf=\"!open\" height=\"24px\" version=\"1.1\" viewBox=\"0 0 24 24\" width=\"24px\" xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <g id=\"ax-dropdown-arr\" fill=\"none\" fill-rule=\"evenodd\" id=\"icon/chevron-bottom\" stroke=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" stroke-width=\"1\">\n <polyline id=\"ax-dropdown-arr\" id=\"lineart\" points=\"20.5 7.5 11.5 16.5 2.5 7.5\" stroke=\"#000000\" />\n </g>\n </svg>\n\n <svg id=\"ax-dropdown-arr\" *ngIf=\"open\" height=\"24px\" version=\"1.1\" viewBox=\"0 0 24 24\" width=\"24px\" xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <g id=\"ax-dropdown-arr\" fill=\"none\" fill-rule=\"evenodd\" id=\"icon/chevron-top\" stroke=\"none\" stroke-linecap=\"round\"\n stroke-linejoin=\"round\" stroke-width=\"1\">\n <polyline id=\"ax-dropdown-arr\" id=\"lineart\" points=\"20.5 15.5 11.5 6.5 2.5 15.5\" stroke=\"#000000\" />\n </g>\n </svg>\n\n</div>\n<div class=\"ax-scheduler-dropdown__list\" *ngIf=\"open\" [@dropdownAnimation]>\n <div *ngFor=\"let item of items\" (click)=\"select(item)\">\n {{ item[dataTitle] }}\n </div>\n</div>","\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { AxiomSchedulerComponent } from './axiom-scheduler/axiom-scheduler.component';\nimport { AxiomSchedulerEventComponent } from './axiom-scheduler-event/axiom-scheduler-event.component';\nimport { AxiomSchedulerDropdownComponent } from './axiom-scheduler-dropdown/axiom-scheduler-dropdown.component';\nimport { AxiomSchedulerYearViewComponent } from './axiom-scheduler-year-view/axiom-scheduler-year-view.component';\nimport { AxiomSchedulerMonthTileComponent } from './axiom-scheduler-month-tile/axiom-scheduler-month-tile.component';\nimport { AxiomSchedulerMonthTileDayComponent } from './axiom-scheduler-month-tile-day/axiom-scheduler-month-tile-day.component';\nimport { AxiomSchedulerSidebarComponent } from './axiom-scheduler-sidebar/axiom-scheduler-sidebar.component';\nimport { AxiomSchedulerComponentCommon } from './axiom-scheduler/axiom-scheduler-component-common.component';\n\n@NgModule({\n declarations: [\n AxiomSchedulerComponent,\n AxiomSchedulerEventComponent,\n AxiomSchedulerDropdownComponent,\n AxiomSchedulerYearViewComponent,\n AxiomSchedulerMonthTileComponent,\n AxiomSchedulerMonthTileDayComponent,\n AxiomSchedulerSidebarComponent\n ],\n imports: [\n CommonModule,\n FormsModule\n ],\n exports: [\n AxiomSchedulerComponent,\n AxiomSchedulerEventComponent,\n AxiomSchedulerDropdownComponent,\n AxiomSchedulerYearViewComponent,\n AxiomSchedulerMonthTileComponent,\n AxiomSchedulerMonthTileDayComponent,\n AxiomSchedulerSidebarComponent\n ]\n})\nexport class YearSchedulerModule { }\n","/*\r\n * Public API Surface of year-scheduler-test\r\n */\r\n\r\nexport * from './lib/axiom-scheduler/axiom-scheduler.component';\r\nexport * from './lib/axiom-scheduler-event/axiom-scheduler-event.component';\r\nexport * from './lib/axiom-scheduler-month-tile/axiom-scheduler-month-tile.component';\r\nexport * from './lib/axiom-scheduler-month-tile-day/axiom-scheduler-month-tile-day.component';\r\nexport * from './lib/axiom-scheduler-sidebar/axiom-scheduler-sidebar.component';\r\nexport * from './lib/axiom-scheduler-year-view/axiom-scheduler-year-view.component';\r\nexport * from './lib/axiom-scheduler-dropdown/axiom-scheduler-dropdown.component';\r\nexport * from './lib/services/axiom-scheduler-sidebar.service';\r\nexport * from './lib/services/axiom-scheduler.service';\r\nexport * from './lib/locales';\r\nexport * from './lib/year-scheduler.module';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.AxiomSchedulerMonthTileDayComponent","i1.AxiomSchedulerSidebarService","i2","i3.AxiomSchedulerEventComponent","i2.AxiomSchedulerMonthTileComponent","i3.AxiomSchedulerSidebarComponent","i1.AxiomSchedulerYearViewComponent"],"mappings":"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