@viren_chudasama/year-picker
Version:
A simple Bootstrap-based year picker for Angular
1 lines • 19.5 kB
Source Map (JSON)
{"version":3,"file":"year-picker.mjs","sources":["../../../projects/year-picker/src/lib/year-picker.service.ts","../../../projects/year-picker/src/lib/year-picker.component.ts","../../../projects/year-picker/src/lib/year-picker.module.ts","../../../projects/year-picker/src/public-api.ts","../../../projects/year-picker/src/year-picker.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class YearPickerService {\r\n\r\n constructor() { }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, ElementRef, EventEmitter, HostListener, Input, Output } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-year-picker',\r\n standalone: true,\r\n imports: [CommonModule],\r\n template: `\r\n <div class=\"year-picker-container position-relative\" (keydown)=\"onKeyDown($event)\">\r\n <div class=\"input-group\">\r\n <input type=\"text\" [value]=\"selectedYear || ''\" readonly [disabled]=\"disabled\"\r\n class=\"form-control rounded-pill rounded-end-0 custom-year-picker\" placeholder=\"Select Year\"\r\n (click)=\"togglePicker()\" aria-haspopup=\"true\" [attr.aria-expanded]=\"isOpen\" tabindex=\"0\"\r\n />\r\n\r\n <span class=\"input-group-text rounded-pill rounded-start-0 text-secondary\" [class.disabled]=\"disabled\"\r\n (click)=\"disabled? null:togglePicker()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-calendar\"\r\n viewBox=\"0 0 16 16\">\r\n <path\r\n d=\"M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4H1z\" />\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n <div class=\"dropdown-menu w-100 p-0 shadow\" [class.show]=\"isOpen\" style=\"min-width: 16rem;\">\r\n <div class=\"d-flex align-items-center justify-content-between p-2 border-bottom\">\r\n <button type=\"button\" class=\"btn btn-sm btn-link text-decoration-none\" (click)=\"navigateToPreviousYears()\"\r\n [disabled]=\"minYear >= yearRows[0]?.[0]\" aria-label=\"Previous years\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\"\r\n class=\"bi bi-chevron-left\" viewBox=\"0 0 16 16\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z\" />\r\n </svg>\r\n </button>\r\n <span class=\"fw-bold\">\r\n {{ (yearRows[0]?.[0] >= minYear && yearRows[0]?.[0] <= maxYear) ? yearRows[0]?.[0] : minYear }} - \r\n {{ (yearRows[yearRows.length - 1]?.[yearRows[yearRows.length - 1].length - 1] <= maxYear && yearRows[yearRows.length - 1]?.[yearRows[yearRows.length - 1].length - 1] >= minYear) ? yearRows[yearRows.length - 1]?.[yearRows[yearRows.length - 1].length - 1] : maxYear }}\r\n </span>\r\n <button type=\"button\" class=\"btn btn-sm btn-link text-decoration-none\" (click)=\"navigateToNextYears()\"\r\n [disabled]=\"maxYear <= yearRows[yearRows.length - 1]?.[yearRows[yearRows.length - 1].length - 1]\"\r\n aria-label=\"Next years\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\"\r\n class=\"bi bi-chevron-right\" viewBox=\"0 0 16 16\">\r\n <path fill-rule=\"evenodd\"\r\n d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z\" />\r\n </svg>\r\n </button>\r\n </div>\r\n <div class=\"p-2\">\r\n <div class=\"row g-1\" *ngFor=\"let row of yearRows\">\r\n <div class=\"col-4\" *ngFor=\"let year of row\">\r\n <button type=\"button\" class=\"btn btn-sm w-100\" [class.btn-primary]=\"isYearSelected(year)\"\r\n [class.btn-outline-secondary]=\"!isYearSelected(year) && !isYearDisabled(year)\"\r\n [class.disabled]=\"isYearDisabled(year)\" [disabled]=\"isYearDisabled(year)\"\r\n (click)=\"selectYear(year)\" tabindex=\"0\">\r\n {{ year }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n `,\r\n styles: ``\r\n})\r\nexport class YearPickerComponent {\r\n @Input() customClass: string = '';\r\n @Input() minYear = 1900\r\n @Input() maxYear :number = new Date().getFullYear();\r\n @Input() selectedYear: number | null = null\r\n @Output() yearSelected = new EventEmitter<number>()\r\n\r\n currentYearView: number = new Date().getFullYear()\r\n yearRows: number[][] = []\r\n yearsPerPage = 9\r\n isOpen = false\r\n @Input() disabled = false\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent): void {\r\n if (this.isOpen && !this.elementRef.nativeElement.contains(event.target)) {\r\n this.isOpen = false;\r\n }\r\n }\r\n // ControlValueAccessor methods\r\n onChange: any = () => {}\r\n onTouched: any = () => {}\r\n\r\n constructor(private elementRef: ElementRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.currentYearView = this.selectedYear || new Date().getFullYear();\r\n this.clampCurrentYearView();\r\n this.generateYearGrid()\r\n }\r\n\r\n togglePicker(): void {\r\n if (!this.disabled) {\r\n this.isOpen = !this.isOpen;\r\n if (this.isOpen) {\r\n this.currentYearView = this.selectedYear || new Date().getFullYear();\r\n this.clampCurrentYearView(); // Ensure currentYearView is valid\r\n this.generateYearGrid();\r\n }\r\n }\r\n }\r\n\r\n generateYearGrid(): void {\r\n // Calculate the start year for the grid\r\n const startYear = Math.floor(this.currentYearView / this.yearsPerPage) * this.yearsPerPage;\r\n this.yearRows = [];\r\n let years: number[] = [];\r\n\r\n // Generate years within the minYear and maxYear boundaries\r\n for (let i = 0; i < this.yearsPerPage; i++) {\r\n const year = startYear + i;\r\n\r\n // Only include years within the valid range\r\n if (year >= this.minYear && year <= this.maxYear) {\r\n years.push(year);\r\n }\r\n\r\n // Group years into rows of 3\r\n if (years.length === 3 || i === this.yearsPerPage - 1) {\r\n if (years.length > 0) {\r\n this.yearRows.push([...years]);\r\n years = [];\r\n }\r\n }\r\n }\r\n\r\n // If no years were added (e.g., startYear is way off), reset to a valid range\r\n if (this.yearRows.length === 0) {\r\n this.currentYearView = this.maxYear;\r\n this.generateYearGrid(); // Recursively call to regenerate with a valid currentYearView\r\n }\r\n }\r\n\r\n private clampCurrentYearView(): void {\r\n if (this.currentYearView < this.minYear) {\r\n this.currentYearView = this.minYear;\r\n } else if (this.currentYearView > this.maxYear) {\r\n this.currentYearView = this.maxYear;\r\n }\r\n }\r\n\r\n selectYear(year: number): void {\r\n this.selectedYear = year\r\n this.onChange(year)\r\n this.onTouched()\r\n this.yearSelected.emit(year)\r\n this.isOpen = false\r\n }\r\n\r\n navigateToPreviousYears(): void {\r\n this.currentYearView -= this.yearsPerPage\r\n this.clampCurrentYearView();\r\n this.generateYearGrid()\r\n }\r\n\r\n navigateToNextYears(): void {\r\n this.currentYearView = Number(this.currentYearView);\r\n this.currentYearView += this.yearsPerPage;\r\n this.clampCurrentYearView();\r\n this.generateYearGrid()\r\n }\r\n\r\n isYearDisabled(year: number): boolean {\r\n return year < this.minYear || year > this.maxYear\r\n }\r\n\r\n isYearSelected(year: number): boolean {\r\n return this.selectedYear === year\r\n }\r\n\r\n // ControlValueAccessor interface implementation\r\n writeValue(value: number): void {\r\n this.selectedYear = value;\r\n if (value) {\r\n this.currentYearView = value;\r\n this.clampCurrentYearView();\r\n this.generateYearGrid();\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n if (!isDisabled) {\r\n // When re-enabled, reset currentYearView to a valid value\r\n this.currentYearView = this.selectedYear || new Date().getFullYear();\r\n this.clampCurrentYearView();\r\n this.generateYearGrid();\r\n }\r\n }\r\n\r\n // Keyboard navigation\r\n onKeyDown(event: KeyboardEvent): void {\r\n if (!this.isOpen) {\r\n if (event.key === \"Enter\" || event.key === \" \") {\r\n this.togglePicker()\r\n event.preventDefault()\r\n }\r\n return\r\n }\r\n\r\n switch (event.key) {\r\n case \"Escape\":\r\n this.isOpen = false\r\n event.preventDefault()\r\n break\r\n case \"ArrowLeft\":\r\n this.handleArrowLeft()\r\n event.preventDefault()\r\n break\r\n case \"ArrowRight\":\r\n this.handleArrowRight()\r\n event.preventDefault()\r\n break\r\n case \"ArrowUp\":\r\n this.handleArrowUp()\r\n event.preventDefault()\r\n break\r\n case \"ArrowDown\":\r\n this.handleArrowDown()\r\n event.preventDefault()\r\n break\r\n case \"Enter\":\r\n case \" \":\r\n if (this.currentYearView >= this.minYear && this.currentYearView <= this.maxYear) {\r\n this.selectYear(this.currentYearView)\r\n }\r\n event.preventDefault()\r\n break\r\n case \"Home\":\r\n this.currentYearView = this.minYear\r\n this.generateYearGrid()\r\n event.preventDefault()\r\n break\r\n case \"End\":\r\n this.currentYearView = this.maxYear\r\n this.generateYearGrid()\r\n event.preventDefault()\r\n break\r\n case \"PageUp\":\r\n this.navigateToPreviousYears()\r\n event.preventDefault()\r\n break\r\n case \"PageDown\":\r\n this.navigateToNextYears()\r\n event.preventDefault()\r\n break\r\n }\r\n }\r\n\r\n private handleArrowLeft(): void {\r\n if (this.currentYearView > this.minYear) {\r\n this.currentYearView--\r\n this.generateYearGrid()\r\n }\r\n }\r\n\r\n private handleArrowRight(): void {\r\n if (this.currentYearView < this.maxYear) {\r\n this.currentYearView++\r\n this.generateYearGrid()\r\n }\r\n }\r\n\r\n private handleArrowUp(): void {\r\n if (this.currentYearView - 4 >= this.minYear) {\r\n this.currentYearView -= 4\r\n this.generateYearGrid()\r\n }\r\n }\r\n\r\n private handleArrowDown(): void {\r\n if (this.currentYearView + 4 <= this.maxYear) {\r\n this.currentYearView += 4\r\n this.generateYearGrid()\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { YearPickerComponent } from './year-picker.component';\r\n\r\n@NgModule({\r\n imports: [CommonModule,YearPickerComponent],\r\n exports: [YearPickerComponent]\r\n})\r\nexport class YearPickerModule { }\r\n","/*\r\n * Public API Surface of year-picker\r\n */\r\n\r\nexport * from './lib/year-picker.service';\r\nexport * from './lib/year-picker.component';\r\nexport * from './lib/year-picker.module';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}