@tacdaed/fragments 1.0.0-beta.3 → 1.0.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -0
- package/assets/styles/scss/_all.scss +0 -1
- package/fesm2022/tacdaed-fragments.mjs +4 -4
- package/package.json +6 -1
- package/assets/resources/fonts/OpenSans/OpenSans-Italic-VariableFont_wdth_wght.ttf +0 -0
- package/assets/resources/fonts/OpenSans/OpenSans-VariableFont_wdth_wght.ttf +0 -0
- package/assets/resources/fonts/Roboto/Roboto-Black.ttf +0 -0
- package/assets/resources/fonts/Roboto/Roboto-BlackItalic.ttf +0 -0
- package/assets/resources/fonts/Roboto/Roboto-Bold.ttf +0 -0
- package/assets/resources/fonts/Roboto/Roboto-BoldItalic.ttf +0 -0
- package/assets/resources/fonts/Roboto/Roboto-Italic.ttf +0 -0
- package/assets/resources/fonts/Roboto/Roboto-Light.ttf +0 -0
- package/assets/resources/fonts/Roboto/Roboto-LightItalic.ttf +0 -0
- package/assets/resources/fonts/Roboto/Roboto-Medium.ttf +0 -0
- package/assets/resources/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
- package/assets/resources/fonts/Roboto/Roboto-Regular.ttf +0 -0
- package/assets/resources/fonts/Roboto/Roboto-Thin.ttf +0 -0
- package/assets/resources/fonts/Roboto/Roboto-ThinItalic.ttf +0 -0
- package/assets/styles/scss/_fonts.scss +0 -122
- package/fesm2022/tacdaed-fragments.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tacdaed-fragments.mjs","sources":["../../../projects/fragments/src/lib/components/accordion/accordion.component.ts","../../../projects/fragments/src/lib/components/accordion/accordion.component.html","../../../projects/fragments/src/lib/components/button/button.component.ts","../../../projects/fragments/src/lib/components/button/button.component.html","../../../projects/fragments/src/lib/components/card/card.component.ts","../../../projects/fragments/src/lib/components/card/card.component.html","../../../projects/fragments/src/lib/components/modal/modal.component.ts","../../../projects/fragments/src/lib/components/modal/modal.component.html","../../../projects/fragments/src/lib/components/toast/toast.component.ts","../../../projects/fragments/src/lib/components/toast/toast.component.html","../../../projects/fragments/src/lib/components/toast-stack/toast-stack.component.ts","../../../projects/fragments/src/lib/components/toast-stack/toast-stack.component.html","../../../projects/fragments/src/lib/components/snackbar/snackbar.component.ts","../../../projects/fragments/src/lib/components/snackbar/snackbar.component.html","../../../projects/fragments/src/lib/utils/uuid.utils.ts","../../../projects/fragments/src/lib/components/code-block/code-block.component.ts","../../../projects/fragments/src/lib/components/code-block/code-block.component.html","../../../projects/fragments/src/lib/components/breadcrumb/breadcrumb.component.ts","../../../projects/fragments/src/lib/components/breadcrumb/breadcrumb.component.html","../../../projects/fragments/src/lib/components/layout/container/container.component.ts","../../../projects/fragments/src/lib/components/layout/container/container.component.html","../../../projects/fragments/src/lib/components/layout/divider/divider.component.ts","../../../projects/fragments/src/lib/components/layout/divider/divider.component.html","../../../projects/fragments/src/lib/components/layout/separator/separator.component.ts","../../../projects/fragments/src/lib/components/layout/separator/separator.component.html","../../../projects/fragments/src/lib/components/layout/section/section.component.ts","../../../projects/fragments/src/lib/components/layout/section/section.component.html","../../../projects/fragments/src/lib/components/morph/morph.abstract.ts","../../../projects/fragments/src/lib/components/loader/spinner/spinner.component.ts","../../../projects/fragments/src/lib/components/loader/spinner/spinner.component.html","../../../projects/fragments/src/lib/components/morph/blob-moph/blob-moprh.component.ts","../../../projects/fragments/src/lib/components/morph/blob-moph/blob-morph.component.html","../../../projects/fragments/src/lib/components/decorative/sparkle-field/sparkle-field.component.ts","../../../projects/fragments/src/lib/components/decorative/sparkle-field/sparkle-field.component.html","../../../projects/fragments/src/lib/components/pagination/small-pagination/small-pagination.component.ts","../../../projects/fragments/src/lib/components/pagination/small-pagination/small-pagination.component.html","../../../projects/fragments/src/lib/directives/tooltip/tooltip.directive.ts","../../../projects/fragments/src/lib/pipes/safe-html.pipe.ts","../../../projects/fragments/src/lib/utils/common.utils.ts","../../../projects/fragments/src/lib/components/title-bar/title-bar.component.ts","../../../projects/fragments/src/lib/components/title-bar/title-bar.component.html","../../../projects/fragments/src/lib/components/table/table.enum.ts","../../../projects/fragments/src/lib/components/table/table.function.ts","../../../projects/fragments/src/lib/components/table/table.pipe.ts","../../../projects/fragments/src/lib/components/table/table.component.ts","../../../projects/fragments/src/lib/components/table/table.component.html","../../../projects/fragments/src/lib/components/tabs/tabs.component.ts","../../../projects/fragments/src/lib/components/tabs/tabs.component.html","../../../projects/fragments/src/lib/components/side-nav/side-nav.component.ts","../../../projects/fragments/src/lib/components/side-nav/side-nav.component.html","../../../projects/fragments/src/lib/components/stepper/stepper.component.ts","../../../projects/fragments/src/lib/components/stepper/stepper.component.html","../../../projects/fragments/src/lib/components/input/input-base.ts","../../../projects/fragments/src/lib/components/input/input-consts.ts","../../../projects/fragments/src/lib/components/input/input-validation/input-validation.component.ts","../../../projects/fragments/src/lib/components/input/input-validation/input-validation.component.html","../../../projects/fragments/src/lib/components/input/input.pipe.ts","../../../projects/fragments/src/lib/components/input/input-text/input-text-validators.ts","../../../projects/fragments/src/lib/components/input/input-text/input-text.component.ts","../../../projects/fragments/src/lib/components/input/input-text/input-text.component.html","../../../projects/fragments/src/lib/utils/number.utils.ts","../../../projects/fragments/src/lib/components/input/input-number/input-number.component.ts","../../../projects/fragments/src/lib/components/input/input-number/input-number.component.html","../../../projects/fragments/src/lib/utils/date.utils.ts","../../../projects/fragments/src/lib/pipes/chunk.pipe.ts","../../../projects/fragments/src/lib/components/input/input-calendar/input-calendar.component.ts","../../../projects/fragments/src/lib/components/input/input-calendar/input-calendar.component.html","../../../projects/fragments/src/lib/components/input/input-date/input-date-validators.ts","../../../projects/fragments/src/lib/components/input/input-date/input-date.component.ts","../../../projects/fragments/src/lib/components/input/input-date/input-date.component.html","../../../projects/fragments/src/lib/components/input/input-time/input-time-validators.ts","../../../projects/fragments/src/lib/components/input/input-time/input-time.component.ts","../../../projects/fragments/src/lib/components/input/input-time/input-time.component.html","../../../projects/fragments/src/lib/components/input/input-clock-picker/input-clock-picker.component.ts","../../../projects/fragments/src/lib/components/input/input-clock-picker/input-clock-picker.component.html","../../../projects/fragments/src/lib/components/input/input-date-time/input-date-time.component.ts","../../../projects/fragments/src/lib/components/input/input-date-time/input-date-time.component.html","../../../projects/fragments/src/lib/components/input/input-toggle-switch/input-toggle-switch.component.ts","../../../projects/fragments/src/lib/components/input/input-toggle-switch/input-toggle-switch.component.html","../../../projects/fragments/src/lib/components/input/input-checkbox/input-checkbox.component.ts","../../../projects/fragments/src/lib/components/input/input-checkbox/input-checkbox.component.html","../../../projects/fragments/src/lib/components/input/input-checkbox-group/input-checkbox-group.component.ts","../../../projects/fragments/src/lib/components/input/input-checkbox-group/input-checkbox-group.component.html","../../../projects/fragments/src/lib/components/input/input-radio-group/input-radio-group.component.ts","../../../projects/fragments/src/lib/components/input/input-radio-group/input-radio-group.component.html","../../../projects/fragments/src/lib/components/input/input-slider/input-slider.component.ts","../../../projects/fragments/src/lib/components/input/input-slider/input-slider.component.html","../../../projects/fragments/src/lib/components/input/input-file-upload/input-file-upload.component.ts","../../../projects/fragments/src/lib/components/input/input-file-upload/input-file-upload.component.html","../../../projects/fragments/src/lib/components/loader/progress-bar/progress-bar.component.ts","../../../projects/fragments/src/lib/components/loader/progress-bar/progress-bar.component.html","../../../projects/fragments/src/lib/components/loader/pulse-loader/pulse-loader.component.ts","../../../projects/fragments/src/lib/components/loader/pulse-loader/pulse-loader.component.html","../../../projects/fragments/src/lib/components/loader/skeleton-loader/skeleton-loader.component.ts","../../../projects/fragments/src/lib/components/loader/skeleton-loader/skeleton-loader.component.html","../../../projects/fragments/src/lib/components/loader/content-blur/content-blur.component.ts","../../../projects/fragments/src/lib/components/loader/content-blur/content-blur.component.html","../../../projects/fragments/src/lib/components/selection-lists/selection-lists-base.ts","../../../projects/fragments/src/lib/components/selection-lists/selection-lists-const.ts","../../../projects/fragments/src/lib/components/selection-lists/selection-list/selection-list.component.ts","../../../projects/fragments/src/lib/components/selection-lists/selection-list/selection-list.component.html","../../../projects/fragments/src/lib/components/status/chip/chip.component.ts","../../../projects/fragments/src/lib/components/status/chip/chip.component.html","../../../projects/fragments/src/lib/components/selection-lists/multi-select/multi-select.component.ts","../../../projects/fragments/src/lib/components/selection-lists/multi-select/multi-select.component.html","../../../projects/fragments/src/lib/components/status/tag/tag.component.ts","../../../projects/fragments/src/lib/components/status/tag/tag.component.html","../../../projects/fragments/src/lib/components/status/pill/pill.component.ts","../../../projects/fragments/src/lib/components/status/pill/pill.component.html","../../../projects/fragments/src/lib/directives/tooltip/popover.directive.ts","../../../projects/fragments/src/lib/components/status/directives/badge/badge.directive.ts","../../../projects/fragments/src/lib/pipes/sanitize-html.pipe.ts","../../../projects/fragments/src/public-api.ts","../../../projects/fragments/src/tacdaed-fragments.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n QueryList,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport {\r\n AccordionItem,\r\n AccordionItemContext,\r\n AccordionToggleEvent,\r\n TAccordionSize,\r\n TAccordionStyle\r\n} from './accordion.type';\r\n\r\n@Component({\r\n selector: 'frg-accordion',\r\n standalone: true,\r\n imports: [NgTemplateOutlet],\r\n templateUrl: './accordion.component.html',\r\n styleUrl: './accordion.component.scss'\r\n})\r\nexport class AccordionComponent implements OnChanges {\r\n @Input() items: AccordionItem[] = [];\r\n @Input() expandedIds: string[] = [];\r\n @Input() multi: boolean = false;\r\n @Input() styleType: TAccordionStyle = 'default';\r\n @Input() size: TAccordionSize = 'large';\r\n @Input() toggleOnHeaderClick: boolean = true;\r\n @Input() animated: boolean = true;\r\n @Input() focusPanelOnOpen: boolean = false;\r\n\r\n @Output() expandedIdsChange = new EventEmitter<string[]>();\r\n @Output() toggled = new EventEmitter<AccordionToggleEvent>();\r\n @Output() opened = new EventEmitter<AccordionToggleEvent>();\r\n @Output() closed = new EventEmitter<AccordionToggleEvent>();\r\n\r\n @ContentChild('frgAccordionHeader', { read: TemplateRef }) headerTemplate?: TemplateRef<AccordionItemContext>;\r\n @ContentChild('frgAccordionContent', { read: TemplateRef }) contentTemplate?: TemplateRef<AccordionItemContext>;\r\n @ContentChild('frgAccordionIcon', { read: TemplateRef }) iconTemplate?: TemplateRef<AccordionItemContext>;\r\n @ContentChild('frgAccordionToggle', { read: TemplateRef }) toggleIconTemplate?: TemplateRef<AccordionItemContext>;\r\n\r\n @ViewChildren('headerBtn') headerButtons!: QueryList<ElementRef<HTMLButtonElement>>;\r\n @ViewChildren('panelBody') panelBodies!: QueryList<ElementRef<HTMLElement>>;\r\n\r\n public viewItems: AccordionItem[] = [];\r\n private uidCounter = 0;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['items']) {\r\n this.viewItems = this.normalizeItems(this.items);\r\n const initialExpanded = this.expandedIds?.length\r\n ? [...this.expandedIds]\r\n : this.viewItems.filter(item => item.expanded).map(item => item.id!) || [];\r\n this.setExpandedIds(initialExpanded, false);\r\n }\r\n\r\n if (changes['expandedIds'] && !changes['expandedIds'].firstChange) {\r\n this.setExpandedIds(this.expandedIds || [], false);\r\n }\r\n }\r\n\r\n isExpanded(id?: string): boolean {\r\n return !!id && (this.expandedIds?.includes(id) ?? false);\r\n }\r\n\r\n headerId(id: string): string {\r\n return `${id}-header`;\r\n }\r\n\r\n panelId(id: string): string {\r\n return `${id}-panel`;\r\n }\r\n\r\n onHeaderClick(index: number, event: Event): void {\r\n if (!this.toggleOnHeaderClick) {\r\n return;\r\n }\r\n event.preventDefault();\r\n this.toggleAt(index);\r\n }\r\n\r\n onHeaderKeydown(event: KeyboardEvent, index: number): void {\r\n const key = event.key;\r\n if (key === 'Enter' || key === ' ') {\r\n event.preventDefault();\r\n this.toggleAt(index);\r\n return;\r\n }\r\n\r\n const headers = this.headerButtons?.toArray() || [];\r\n if (!headers.length) {\r\n return;\r\n }\r\n\r\n if (key === 'ArrowDown' || key === 'ArrowRight') {\r\n event.preventDefault();\r\n const next = (index + 1) % headers.length;\r\n headers[next].nativeElement.focus();\r\n } else if (key === 'ArrowUp' || key === 'ArrowLeft') {\r\n event.preventDefault();\r\n const prev = (index - 1 + headers.length) % headers.length;\r\n headers[prev].nativeElement.focus();\r\n } else if (key === 'Home') {\r\n event.preventDefault();\r\n headers[0].nativeElement.focus();\r\n } else if (key === 'End') {\r\n event.preventDefault();\r\n headers.at(-1)?.nativeElement.focus();\r\n }\r\n }\r\n\r\n toggleAt(index: number): void {\r\n const item = this.viewItems[index];\r\n if (!item || item.disabled) {\r\n return;\r\n }\r\n\r\n const itemId = item.id!;\r\n const currentlyExpanded = this.isExpanded(itemId);\r\n let nextExpandedIds: string[];\r\n\r\n if (this.multi) {\r\n nextExpandedIds = currentlyExpanded ? this.collapseMulti(itemId) : this.expandMulti(itemId);\r\n } else {\r\n nextExpandedIds = currentlyExpanded ? this.collapseSingle() : this.expandSingle(itemId);\r\n }\r\n\r\n this.setExpandedIds(nextExpandedIds, true, item, index);\r\n }\r\n\r\n buildContext<T = unknown>(item: AccordionItem<T>, index: number): AccordionItemContext<T> {\r\n return {\r\n $implicit: item,\r\n item,\r\n index,\r\n expanded: this.isExpanded(item.id),\r\n toggle: () => this.toggleAt(index)\r\n };\r\n }\r\n\r\n private normalizeItems(items: AccordionItem[]): AccordionItem[] {\r\n return (items || []).map((item, index) => ({\r\n ...item,\r\n id: item.id ?? this.generateId(index)\r\n }));\r\n }\r\n\r\n private generateId(index: number): string {\r\n this.uidCounter += 1;\r\n return `frg-accordion-item-${index}-${this.uidCounter}`;\r\n }\r\n\r\n private expandSingle(id: string): string[] {\r\n return [id];\r\n }\r\n\r\n private collapseSingle(): string[] {\r\n return [];\r\n }\r\n\r\n private expandMulti(id: string): string[] {\r\n return Array.from(new Set([...(this.expandedIds || []), id]));\r\n }\r\n\r\n private collapseMulti(id: string): string[] {\r\n return (this.expandedIds || []).filter(activeId => activeId !== id);\r\n }\r\n\r\n private setExpandedIds(nextIds: string[], emit: boolean, item?: AccordionItem, index?: number): void {\r\n const normalized = this.multi ? nextIds : nextIds.slice(0, 1);\r\n this.expandedIds = normalized;\r\n this.viewItems = this.viewItems.map(viewItem => ({\r\n ...viewItem,\r\n expanded: normalized.includes(viewItem.id!)\r\n }));\r\n\r\n if (emit) {\r\n this.expandedIdsChange.emit(this.expandedIds);\r\n if (item && index !== undefined) {\r\n const payload: AccordionToggleEvent = {\r\n id: item.id!,\r\n index,\r\n expanded: this.isExpanded(item.id),\r\n item,\r\n expandedIds: this.expandedIds\r\n };\r\n this.toggled.emit(payload);\r\n (payload.expanded ? this.opened : this.closed).emit(payload);\r\n }\r\n }\r\n\r\n if (item && this.focusPanelOnOpen && this.isExpanded(item.id)) {\r\n setTimeout(() => this.focusPanel(index!), 0);\r\n }\r\n }\r\n\r\n private focusPanel(index: number): void {\r\n const panel = this.panelBodies?.get(index);\r\n if (panel?.nativeElement) {\r\n panel.nativeElement.focus();\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"frg-accordion\"\r\n [class.frg-accordion--multi]=\"multi\"\r\n [class.is-animated]=\"animated\"\r\n [attr.data-style]=\"styleType\"\r\n [attr.data-size]=\"size\">\r\n @for (item of viewItems; track item?.id; let i = $index) {\r\n <div\r\n class=\"frg-accordion__item\"\r\n [attr.data-style]=\"item?.style || styleType\"\r\n [attr.data-size]=\"item?.size || size\"\r\n [class.is-expanded]=\"isExpanded(item?.id)\"\r\n [class.is-disabled]=\"item?.disabled\">\r\n <button\r\n type=\"button\"\r\n #headerBtn\r\n class=\"frg-accordion__header\"\r\n [attr.data-size]=\"item?.size || size\"\r\n [attr.id]=\"headerId(item!.id!)\"\r\n [attr.aria-controls]=\"panelId(item!.id!)\"\r\n [attr.aria-expanded]=\"isExpanded(item?.id)\"\r\n [attr.aria-disabled]=\"item?.disabled || null\"\r\n [disabled]=\"item?.disabled\"\r\n (click)=\"onHeaderClick(i, $event)\"\r\n (keydown)=\"onHeaderKeydown($event, i)\">\r\n <span class=\"frg-accordion__header-content\">\r\n @if (item?.iconTemplate || iconTemplate || item?.icon) {\r\n <span class=\"frg-accordion__icon\" aria-hidden=\"true\">\r\n @if (item?.iconTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item?.iconTemplate\"\r\n [ngTemplateOutletContext]=\"buildContext(item!, i)\">\r\n </ng-container>\r\n } @else if (iconTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"iconTemplate\"\r\n [ngTemplateOutletContext]=\"buildContext(item!, i)\">\r\n </ng-container>\r\n } @else if (item?.icon) {\r\n <span class=\"frg-accordion__icon-shape\">{{ item?.icon }}</span>\r\n }\r\n </span>\r\n }\r\n\r\n <span class=\"frg-accordion__heading\">\r\n @if (item?.headerTemplate || headerTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item?.headerTemplate || headerTemplate\"\r\n [ngTemplateOutletContext]=\"buildContext(item!, i)\">\r\n </ng-container>\r\n } @else {\r\n <span class=\"frg-accordion__title\">{{ item?.title }}</span>\r\n @if (item?.subtitle) {\r\n <span class=\"frg-accordion__subtitle\">{{ item?.subtitle }}</span>\r\n }\r\n }\r\n </span>\r\n </span>\r\n\r\n <span\r\n class=\"frg-accordion__chevron\"\r\n aria-hidden=\"true\"\r\n [class.is-custom]=\"item?.toggleIconTemplate || toggleIconTemplate\"\r\n [class.is-open]=\"isExpanded(item?.id)\">\r\n @if (item?.toggleIconTemplate || toggleIconTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item?.toggleIconTemplate || toggleIconTemplate\"\r\n [ngTemplateOutletContext]=\"buildContext(item!, i)\">\r\n </ng-container>\r\n } @else {\r\n <span class=\"frg-accordion__chevron-icon\"></span>\r\n }\r\n </span>\r\n </button>\r\n\r\n <section\r\n class=\"frg-accordion__panel-wrapper\"\r\n [class.is-open]=\"isExpanded(item?.id)\"\r\n [attr.id]=\"panelId(item!.id!)\"\r\n [attr.aria-labelledby]=\"headerId(item!.id!)\"\r\n [attr.aria-hidden]=\"!isExpanded(item?.id)\">\r\n <div\r\n class=\"frg-accordion__panel\"\r\n #panelBody\r\n tabindex=\"-1\"\r\n [class.is-open]=\"isExpanded(item?.id)\">\r\n @if (item?.contentTemplate || contentTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item?.contentTemplate || contentTemplate\"\r\n [ngTemplateOutletContext]=\"buildContext(item!, i)\">\r\n </ng-container>\r\n } @else {\r\n @if (item?.content) {\r\n {{ item?.content }}\r\n } @else if (item?.data; as payload) {\r\n {{ payload }}\r\n }\r\n }\r\n </div>\r\n </section>\r\n </div>\r\n }\r\n</div>\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { RouterLink, RouterLinkActive } from '@angular/router';\r\n\r\nimport { TButtonIconPosition, TButtonShape, TButtonSize, TButtonStyle, TButtonType } from './button.type';\r\nimport { TBaseStyle } from '../../types/base.types';\r\n\r\n/**\r\n * Button component for displaying a button with various styles and behaviors\r\n */\r\n@Component({\r\n selector: 'frg-button',\r\n imports: [NgClass, RouterLink, RouterLinkActive],\r\n templateUrl: './button.component.html',\r\n styleUrl: './button.component.scss'\r\n})\r\nexport class ButtonComponent {\r\n /**\r\n * Unique identifier for the button\r\n */\r\n @Input() id: string = '';\r\n /**\r\n * CSS classes applied to the button element\r\n */\r\n @Input() class: string = '';\r\n /**\r\n * CSS classes for the text span\r\n */\r\n @Input() textClass: string = '';\r\n /**\r\n * CSS classes for the icon element\r\n */\r\n @Input() iconClass: string = '';\r\n /**\r\n * Optional style token for icon color\r\n */\r\n @Input() iconStyleType: TBaseStyle | undefined = undefined;\r\n /**\r\n * Position of the icon relative to the text\r\n * @see TButtonIconPosition\r\n */\r\n @Input() iconPosition: TButtonIconPosition = 'left';\r\n /**\r\n * Type of the button\r\n * @see TButtonType\r\n */\r\n @Input() type: TButtonType = 'button';\r\n /**\r\n * Size of the button\r\n * @see TButtonSize\r\n */\r\n @Input() size: TButtonSize = 'medium';\r\n /**\r\n * Router link for navigation\r\n */\r\n @Input() buttonRouterLink: string | (string | number)[] | null | undefined = null;\r\n /**\r\n * CSS classes applied when the button is active\r\n */\r\n @Input() buttonRouterLinkActive: string | string[] = '';\r\n /**\r\n * Determines whether the button is disabled\r\n */\r\n @Input() disabled: boolean | null = null;\r\n /**\r\n * Style type of the button\r\n * @see TButtonStyle\r\n */\r\n @Input() styleType: TButtonStyle = 'primary';\r\n /**\r\n * Shape of the button.\r\n * @see TButtonShape\r\n */\r\n @Input() shape: TButtonShape = 'default';\r\n /**\r\n * Text content of the button\r\n */\r\n @Input() text: string = '';\r\n /**\r\n * Accessible label for icon-only buttons\r\n */\r\n @Input() ariaLabel: string = '';\r\n /**\r\n * Emits when the button is clicked\r\n */\r\n @Output() clickEvent: EventEmitter<void> = new EventEmitter();\r\n\r\n /**\r\n * CSS classes applied to the container element based on its position\r\n * @see TButtonStyle\r\n */\r\n public get containerNgClass() {\r\n return {\r\n 'flex-column-reverse': this.iconPosition === 'top',\r\n 'flex-row-reverse': this.iconPosition === 'left',\r\n 'flex-row': this.iconPosition === 'right',\r\n 'flex-column': this.iconPosition === 'bottom'\r\n };\r\n }\r\n\r\n /**\r\n * CSS classes applied to the icon element based on its position\r\n * @see TButtonIconPosition\r\n */\r\n public get iconNgClass() {\r\n return {\r\n 'mb-2': this.iconPosition === 'top',\r\n 'me-2': this.iconPosition === 'left',\r\n 'ms-2': this.iconPosition === 'right',\r\n 'mt-2': this.iconPosition === 'bottom'\r\n };\r\n }\r\n\r\n /**\r\n * Combined classes for icon color + spacing\r\n */\r\n public get iconClassMap() {\r\n const hasText = !!this.text;\r\n return {\r\n 'frg-btn__icon-primary': this.iconStyleType === 'primary',\r\n 'frg-btn__icon-secondary': this.iconStyleType === 'secondary',\r\n 'frg-btn__icon-tertiary': this.iconStyleType === 'tertiary',\r\n 'frg-btn__icon-info': this.iconStyleType === 'info',\r\n 'frg-btn__icon-success': this.iconStyleType === 'success',\r\n 'frg-btn__icon-warning': this.iconStyleType === 'warning',\r\n 'frg-btn__icon-danger': this.iconStyleType === 'danger',\r\n 'frg-btn__icon-dark': this.iconStyleType === 'dark',\r\n 'frg-btn__icon-light': this.iconStyleType === 'light',\r\n 'frg-btn__icon-pill': this.shape === 'pill' && hasText,\r\n ...(hasText ? this.iconNgClass : {})\r\n };\r\n }\r\n\r\n /**\r\n * Emits when the button is clicked\r\n */\r\n onClick(): void {\r\n if(!this.disabled) {\r\n this.clickEvent.emit();\r\n }\r\n }\r\n\r\n}\r\n","<button\r\n class=\"frg-btn\"\r\n [id]=\"id\"\r\n [class]=\"class\"\r\n [attr.aria-label]=\"ariaLabel || null\"\r\n [attr.disabled]=\"disabled ? true : null\"\r\n [attr.type]=\"type\"\r\n [routerLink]=\"buttonRouterLink\"\r\n [routerLinkActive]=\"buttonRouterLinkActive\"\r\n [ngClass]=\"{\r\n 'frg-btn__ghost': styleType === 'ghost',\r\n 'frg-btn__icon': styleType === 'icon',\r\n 'frg-btn__primary': styleType === 'primary',\r\n 'frg-btn__secondary': styleType === 'secondary',\r\n 'frg-btn__tertiary': styleType === 'tertiary',\r\n 'frg-btn__neutral': styleType === 'neutral',\r\n 'frg-btn__dark': styleType === 'dark',\r\n 'frg-btn__light': styleType === 'light',\r\n 'frg-btn__info': styleType === 'info',\r\n 'frg-btn__success': styleType === 'success',\r\n 'frg-btn__warning': styleType === 'warning',\r\n 'frg-btn__danger': styleType === 'danger',\r\n 'frg-btn__outline-primary': styleType === 'outline-primary',\r\n 'frg-btn__outline-secondary': styleType === 'outline-secondary',\r\n 'frg-btn__outline-tertiary': styleType === 'outline-tertiary',\r\n 'frg-btn__outline-dark': styleType === 'outline-dark',\r\n 'frg-btn__outline-light': styleType === 'outline-light',\r\n 'frg-btn__outline-info': styleType === 'outline-info',\r\n 'frg-btn__outline-success': styleType === 'outline-success',\r\n 'frg-btn__outline-warning': styleType === 'outline-warning',\r\n 'frg-btn__outline-danger': styleType === 'outline-danger',\r\n 'frg-btn--pill': shape === 'pill',\r\n 'frg-btn--small': size === 'small',\r\n 'frg-btn--medium': size === 'medium',\r\n 'frg-btn--large': size === 'large'\r\n }\"\r\n (click)=\"onClick()\"\r\n>\r\n <div\r\n class=\"d-flex justify-content-center align-items-center\"\r\n [ngClass]=\"containerNgClass\"\r\n >\r\n @if(text){\r\n <span\r\n [class]=\"textClass\"\r\n >\r\n {{text}}\r\n </span>\r\n }\r\n @if(iconClass){\r\n <span\r\n [class]=\"iconClass\"\r\n [ngClass]=\"iconClassMap\"\r\n ></span>\r\n }\r\n </div>\r\n</button>\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { TCardStyle } from './card.type';\r\n\r\n@Component({\r\n selector: 'frg-card',\r\n imports: [NgClass],\r\n templateUrl: './card.component.html',\r\n styleUrl: './card.component.scss'\r\n})\r\nexport class CardComponent {\r\n @Input() styleType: TCardStyle = 'default';\r\n @Input() hasCloseCard: boolean = false;\r\n @Output() closeCard = new EventEmitter<void>();\r\n isClosed = false;\r\n\r\n onCloseCard() {\r\n this.closeCard.emit();\r\n this.isClosed = true;\r\n }\r\n}\r\n","@if (!isClosed) {\r\n <div\r\n class=\"frg-card\"\r\n [ngClass]=\"{\r\n 'frg-card__primary': styleType === 'primary',\r\n 'frg-card__secondary': styleType === 'secondary',\r\n 'frg-card__tertiary': styleType === 'tertiary',\r\n 'frg-card__dark': styleType === 'dark',\r\n 'frg-card__light': styleType === 'light',\r\n 'frg-card__success': styleType === 'success',\r\n 'frg-card__warning': styleType === 'warning',\r\n 'frg-card__danger': styleType === 'danger',\r\n 'frg-card__outline-primary': styleType === 'outline-primary',\r\n 'frg-card__outline-secondary': styleType === 'outline-secondary',\r\n 'frg-card__outline-tertiary': styleType === 'outline-tertiary',\r\n 'frg-card__outline-dark': styleType === 'outline-dark',\r\n 'frg-card__outline-light': styleType === 'outline-light',\r\n 'frg-card__outline-success': styleType === 'outline-success',\r\n 'frg-card__outline-warning': styleType === 'outline-warning',\r\n 'frg-card__outline-danger': styleType === 'outline-danger'\r\n }\"\r\n >\r\n @if(hasCloseCard) {\r\n <button\r\n type=\"button\"\r\n class=\"frg-card__close-btn\"\r\n (click)=\"onCloseCard()\"\r\n aria-label=\"Close\"\r\n >\r\n ×\r\n </button>\r\n }\r\n\r\n <div class=\"frg-card__head\">\r\n <ng-content select=\"[frg-card-head]\"></ng-content>\r\n </div>\r\n <div class=\"frg-card__body\">\r\n <ng-content select=\"[frg-card-body]\"></ng-content>\r\n </div>\r\n <div class=\"frg-card__footer\">\r\n <ng-content select=\"[frg-card-footer]\"></ng-content>\r\n </div>\r\n </div>\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, EventEmitter, HostListener, Input, OnChanges, OnDestroy, Output, SimpleChanges } from '@angular/core';\r\n\r\nimport { ModalCloseEvent, TModalCloseReason, TModalSize } from './modal.type';\r\n\r\n@Component({\r\n selector: 'frg-modal',\r\n imports: [NgClass],\r\n templateUrl: './modal.component.html',\r\n styleUrl: './modal.component.scss'\r\n})\r\nexport class ModalComponent implements OnChanges, OnDestroy {\r\n @Input() open: boolean = false;\r\n @Input() size: TModalSize = 'medium';\r\n @Input() closeOnBackdrop: boolean = true;\r\n @Input() closeOnEscape: boolean = true;\r\n @Input() hasCloseButton: boolean = true;\r\n @Input() hasHeader: boolean = true;\r\n @Input() hasFooter: boolean = true;\r\n @Input() lockBodyScroll: boolean = true;\r\n @Input() ariaLabel: string = 'Dialog';\r\n @Input() ariaLabelledBy: string | null = null;\r\n @Input() ariaDescribedBy: string | null = null;\r\n\r\n @Output() closed = new EventEmitter<ModalCloseEvent>();\r\n\r\n get modalClassMap() {\r\n return {\r\n 'frg-modal__size-small': this.size === 'small',\r\n 'frg-modal__size-medium': this.size === 'medium',\r\n 'frg-modal__size-large': this.size === 'large',\r\n };\r\n }\r\n\r\n get showHeader(): boolean {\r\n return this.hasHeader || this.hasCloseButton;\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['open'] || changes['lockBodyScroll']) {\r\n this.toggleBodyScroll(this.open && this.lockBodyScroll);\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.toggleBodyScroll(false);\r\n }\r\n\r\n protected onBackdropClick(): void {\r\n if (!this.closeOnBackdrop) {\r\n return;\r\n }\r\n this.requestClose('backdrop');\r\n }\r\n\r\n protected onCloseClick(): void {\r\n this.requestClose('close-button');\r\n }\r\n\r\n @HostListener('document:keydown', ['$event'])\r\n onKeydown(event: KeyboardEvent): void {\r\n if (!this.open || !this.closeOnEscape) {\r\n return;\r\n }\r\n\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.requestClose('escape');\r\n }\r\n }\r\n\r\n private requestClose(reason: TModalCloseReason): void {\r\n if (!this.open) {\r\n return;\r\n }\r\n\r\n this.closed.emit({ reason });\r\n }\r\n\r\n private toggleBodyScroll(disable: boolean): void {\r\n document.body.style.overflow = disable ? 'hidden' : '';\r\n }\r\n}\r\n","@if (open) {\r\n <div class=\"frg-modal__backdrop\">\r\n <button\r\n type=\"button\"\r\n class=\"frg-modal__backdrop-btn\"\r\n aria-label=\"Close dialog\"\r\n (click)=\"onBackdropClick()\"\r\n ></button>\r\n <dialog\r\n class=\"frg-modal\"\r\n [ngClass]=\"modalClassMap\"\r\n aria-modal=\"true\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy || null\"\r\n [attr.aria-describedby]=\"ariaDescribedBy || null\"\r\n [attr.aria-label]=\"ariaLabelledBy ? null : ariaLabel\"\r\n open\r\n >\r\n @if (showHeader) {\r\n <div class=\"frg-modal__header\">\r\n <div class=\"frg-modal__header-content\">\r\n <ng-content select=\"[frg-modal-head]\"></ng-content>\r\n </div>\r\n @if (hasCloseButton) {\r\n <button\r\n type=\"button\"\r\n class=\"frg-modal__close-btn\"\r\n (click)=\"onCloseClick()\"\r\n aria-label=\"Close dialog\"\r\n >\r\n ×\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n <div class=\"frg-modal__body\" [ngClass]=\"{ 'frg-modal__body--with-footer': hasFooter }\">\r\n <ng-content select=\"[frg-modal-body]\"></ng-content>\r\n </div>\r\n\r\n @if (hasFooter) {\r\n <div class=\"frg-modal__footer\">\r\n <ng-content select=\"[frg-modal-footer]\"></ng-content>\r\n </div>\r\n }\r\n </dialog>\r\n </div>\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges } from '@angular/core';\r\nimport { ToastCloseEvent, TToastCloseReason, TToastPosition, TToastSize, TToastStyle } from './toast.type';\r\n\r\n@Component({\r\n selector: 'frg-toast',\r\n imports: [NgClass],\r\n templateUrl: './toast.component.html',\r\n styleUrl: './toast.component.scss'\r\n})\r\nexport class ToastComponent implements OnChanges, OnDestroy {\n @Input() open: boolean = false;\r\n @Input() title: string = '';\r\n @Input() message: string = '';\r\n @Input() styleType: TToastStyle = 'primary';\r\n @Input() position: TToastPosition = 'top-right';\r\n @Input() size: TToastSize = 'medium';\r\n @Input() autoClose: boolean = false;\r\n @Input() duration: number = 4000;\r\n @Input() hasCloseButton: boolean = true;\r\n @Input() stacked: boolean = false;\r\n @Input() closing: boolean = false;\r\n @Input() motionDuration: number = 200;\r\n @Input() ariaLabel: string = 'Notification';\r\n\r\n @Output() closed = new EventEmitter<ToastCloseEvent>();\r\n\r\n private closeTimerId: ReturnType<typeof setTimeout> | null = null;\r\n private enterTimerId: ReturnType<typeof setTimeout> | null = null;\r\n private leaveTimerId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n protected isRendered = false;\n protected isEntering = false;\n protected isClosing = false;\n\n get statusIconClass(): string | null {\n switch (this.styleType) {\n case 'info':\n return 'fas fa-info-circle';\n case 'success':\n return 'fas fa-check-circle';\n case 'warning':\n return 'fas fa-exclamation-triangle';\n case 'danger':\n return 'fas fa-times-circle';\n default:\n return null;\n }\n }\n\n get toastClassMap() {\n return {\n 'frg-toast--stacked': this.stacked,\r\n 'frg-toast--top-left': this.position === 'top-left',\r\n 'frg-toast--top-right': this.position === 'top-right',\r\n 'frg-toast--bottom-left': this.position === 'bottom-left',\r\n 'frg-toast--bottom-right': this.position === 'bottom-right',\r\n 'frg-toast--size-small': this.size === 'small',\r\n 'frg-toast--size-medium': this.size === 'medium',\r\n 'frg-toast--size-large': this.size === 'large',\r\n 'frg-toast--enter': this.isEntering,\r\n 'frg-toast--leave': this.isClosing || this.closing,\r\n 'frg-toast--primary': this.styleType === 'primary',\r\n 'frg-toast--secondary': this.styleType === 'secondary',\r\n 'frg-toast--tertiary': this.styleType === 'tertiary',\r\n 'frg-toast--dark': this.styleType === 'dark',\r\n 'frg-toast--light': this.styleType === 'light',\r\n 'frg-toast--info': this.styleType === 'info',\r\n 'frg-toast--success': this.styleType === 'success',\r\n 'frg-toast--warning': this.styleType === 'warning',\n 'frg-toast--danger': this.styleType === 'danger',\n 'frg-toast--default': this.styleType === 'default'\n };\n }\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['open']) {\r\n if (this.open) {\r\n this.openToast();\r\n } else {\r\n this.closeToast();\r\n }\r\n }\r\n if (changes['open'] || changes['autoClose'] || changes['duration']) {\r\n this.syncAutoClose();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.clearCloseTimer();\r\n this.clearEnterTimer();\r\n this.clearLeaveTimer();\r\n }\r\n\r\n onCloseClick(): void {\r\n this.requestClose('close-button');\r\n }\r\n\r\n private syncAutoClose(): void {\r\n this.clearCloseTimer();\r\n\r\n if (!this.open || !this.autoClose || this.duration <= 0) {\r\n return;\r\n }\r\n\r\n this.closeTimerId = setTimeout(() => {\r\n this.requestClose('timeout');\r\n }, this.duration);\r\n }\r\n\r\n private requestClose(reason: TToastCloseReason): void {\r\n if (!this.open) {\r\n return;\r\n }\r\n this.clearCloseTimer();\r\n this.closed.emit({ reason });\r\n }\r\n\r\n private clearCloseTimer(): void {\r\n if (this.closeTimerId) {\r\n clearTimeout(this.closeTimerId);\r\n this.closeTimerId = null;\r\n }\r\n }\r\n\r\n private openToast(): void {\r\n this.isRendered = true;\r\n this.isClosing = false;\r\n this.startEnterAnimation();\r\n }\r\n\r\n private closeToast(): void {\r\n if (!this.isRendered) {\r\n return;\r\n }\r\n this.isClosing = true;\r\n this.clearLeaveTimer();\r\n this.leaveTimerId = setTimeout(() => {\r\n this.isClosing = false;\r\n this.isRendered = false;\r\n }, this.motionDuration);\r\n }\r\n\r\n private startEnterAnimation(): void {\r\n this.clearEnterTimer();\r\n this.isEntering = true;\r\n this.enterTimerId = setTimeout(() => {\r\n this.isEntering = false;\r\n }, this.motionDuration);\r\n }\r\n\r\n private clearEnterTimer(): void {\r\n if (this.enterTimerId) {\r\n clearTimeout(this.enterTimerId);\r\n this.enterTimerId = null;\r\n }\r\n }\r\n\r\n private clearLeaveTimer(): void {\r\n if (this.leaveTimerId) {\r\n clearTimeout(this.leaveTimerId);\r\n this.leaveTimerId = null;\r\n }\r\n }\r\n}\r\n","@if (isRendered) {\r\n <div\r\n class=\"frg-toast\"\r\n [ngClass]=\"toastClassMap\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n [style.--frg-toast-motion]=\"motionDuration + 'ms'\"\r\n >\r\n <div class=\"frg-toast__accent\"></div>\n @if (statusIconClass) {\n <span class=\"frg-toast__status-icon\" [ngClass]=\"statusIconClass\" aria-hidden=\"true\"></span>\n }\n <div class=\"frg-toast__content\">\n @if (title) {\r\n <div class=\"frg-toast__title\">{{ title }}</div>\r\n }\r\n <ng-content select=\"[frg-toast-title]\"></ng-content>\r\n @if (message) {\r\n <div class=\"frg-toast__message\">{{ message }}</div>\r\n }\r\n <ng-content select=\"[frg-toast-body]\"></ng-content>\r\n <ng-content></ng-content>\r\n </div>\r\n @if (hasCloseButton) {\r\n <button\r\n type=\"button\"\r\n class=\"frg-toast__close\"\r\n aria-label=\"Close notification\"\r\n (click)=\"onCloseClick()\"\r\n >\r\n ×\r\n </button>\r\n }\r\n </div>\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\nimport { ToastComponent } from '../toast/toast.component';\r\nimport { ToastCloseEvent, ToastStackCloseEvent, ToastStackItem, TToastPosition } from '../toast/toast.type';\r\n\r\n@Component({\r\n selector: 'frg-toast-stack',\r\n imports: [NgClass, ToastComponent],\r\n templateUrl: './toast-stack.component.html',\r\n styleUrl: './toast-stack.component.scss'\r\n})\r\nexport class ToastStackComponent implements OnChanges {\r\n @Input() toasts: ToastStackItem[] = [];\r\n @Input() position: TToastPosition = 'top-right';\r\n @Input() maxVisible: number = 4;\r\n @Input() motionDuration: number = 200;\r\n\r\n @Output() closed = new EventEmitter<ToastStackCloseEvent>();\r\n\r\n private closingIds = new Set<string>();\r\n\r\n get visibleToasts(): ToastStackItem[] {\r\n return this.toasts.slice(0, this.maxVisible);\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['toasts']) {\r\n const ids = new Set(this.toasts.map((toast) => toast.id));\r\n this.closingIds.forEach((id) => {\r\n if (!ids.has(id)) {\r\n this.closingIds.delete(id);\r\n }\r\n });\r\n }\r\n }\r\n\r\n onToastClosed(id: string, event: ToastCloseEvent): void {\r\n if (this.closingIds.has(id)) {\r\n return;\r\n }\r\n this.closingIds.add(id);\r\n setTimeout(() => {\r\n this.closingIds.delete(id);\r\n this.closed.emit({ id, reason: event.reason });\r\n }, this.motionDuration);\r\n }\r\n\r\n isClosing(id: string): boolean {\r\n return this.closingIds.has(id);\r\n }\r\n}\r\n","@if (visibleToasts.length) {\r\n <div\r\n class=\"frg-toast-stack\"\r\n [ngClass]=\"{\r\n 'frg-toast-stack--top-left': position === 'top-left',\r\n 'frg-toast-stack--top-right': position === 'top-right',\r\n 'frg-toast-stack--bottom-left': position === 'bottom-left',\r\n 'frg-toast-stack--bottom-right': position === 'bottom-right'\r\n }\"\r\n >\r\n @for (toast of visibleToasts; track toast.id) {\r\n <frg-toast\r\n [open]=\"true\"\r\n [title]=\"toast.title || ''\"\r\n [message]=\"toast.message || ''\"\r\n [styleType]=\"toast.styleType || 'primary'\"\r\n [size]=\"toast.size || 'medium'\"\r\n [autoClose]=\"toast.autoClose ?? false\"\r\n [duration]=\"toast.duration ?? 4000\"\r\n [hasCloseButton]=\"toast.hasCloseButton ?? true\"\r\n [ariaLabel]=\"toast.ariaLabel || 'Notification'\"\r\n [stacked]=\"true\"\r\n [closing]=\"isClosing(toast.id)\"\r\n [position]=\"position\"\r\n [motionDuration]=\"motionDuration\"\r\n (closed)=\"onToastClosed(toast.id, $event)\"\r\n ></frg-toast>\r\n }\r\n </div>\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges } from '@angular/core';\r\nimport { SnackbarCloseEvent, TSnackbarCloseReason, TSnackbarPosition, TSnackbarSize, TSnackbarStyle } from './snackbar.type';\r\n\r\n@Component({\r\n selector: 'frg-snackbar',\r\n imports: [NgClass],\r\n templateUrl: './snackbar.component.html',\r\n styleUrl: './snackbar.component.scss'\r\n})\r\nexport class SnackbarComponent implements OnChanges, OnDestroy {\n @Input() open: boolean = false;\r\n @Input() message: string = '';\r\n @Input() actionLabel: string = '';\r\n @Input() styleType: TSnackbarStyle = 'default';\r\n @Input() position: TSnackbarPosition = 'bottom-center';\r\n @Input() size: TSnackbarSize = 'medium';\r\n @Input() autoClose: boolean = true;\r\n @Input() duration: number = 4000;\r\n @Input() hasCloseButton: boolean = false;\r\n @Input() ariaLabel: string = 'Notification';\r\n\r\n @Output() closed = new EventEmitter<SnackbarCloseEvent>();\r\n @Output() action = new EventEmitter<void>();\r\n\r\n private closeTimerId: ReturnType<typeof setTimeout> | null = null;\n\n get statusIconClass(): string | null {\n switch (this.styleType) {\n case 'info':\n return 'fas fa-info-circle';\n case 'success':\n return 'fas fa-check-circle';\n case 'warning':\n return 'fas fa-exclamation-triangle';\n case 'danger':\n return 'fas fa-times-circle';\n default:\n return null;\n }\n }\n\n get snackbarClassMap() {\n return {\n 'frg-snackbar--top-left': this.position === 'top-left',\r\n 'frg-snackbar--top-center': this.position === 'top-center',\r\n 'frg-snackbar--top-right': this.position === 'top-right',\r\n 'frg-snackbar--bottom-left': this.position === 'bottom-left',\r\n 'frg-snackbar--bottom-center': this.position === 'bottom-center',\r\n 'frg-snackbar--bottom-right': this.position === 'bottom-right',\r\n 'frg-snackbar--size-small': this.size === 'small',\r\n 'frg-snackbar--size-medium': this.size === 'medium',\r\n 'frg-snackbar--size-large': this.size === 'large',\r\n 'frg-snackbar--primary': this.styleType === 'primary',\r\n 'frg-snackbar--secondary': this.styleType === 'secondary',\r\n 'frg-snackbar--tertiary': this.styleType === 'tertiary',\r\n 'frg-snackbar--dark': this.styleType === 'dark',\r\n 'frg-snackbar--light': this.styleType === 'light',\r\n 'frg-snackbar--info': this.styleType === 'info',\r\n 'frg-snackbar--success': this.styleType === 'success',\r\n 'frg-snackbar--warning': this.styleType === 'warning',\n 'frg-snackbar--danger': this.styleType === 'danger',\n 'frg-snackbar--default': this.styleType === 'default'\n };\n }\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['open'] || changes['autoClose'] || changes['duration']) {\r\n this.syncAutoClose();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.clearCloseTimer();\r\n }\r\n\r\n onCloseClick(): void {\r\n this.requestClose('close-button');\r\n }\r\n\r\n onActionClick(): void {\r\n this.action.emit();\r\n this.requestClose('action');\r\n }\r\n\r\n private syncAutoClose(): void {\r\n this.clearCloseTimer();\r\n\r\n if (!this.open || !this.autoClose || this.duration <= 0) {\r\n return;\r\n }\r\n\r\n this.closeTimerId = setTimeout(() => {\r\n this.requestClose('timeout');\r\n }, this.duration);\r\n }\r\n\r\n private requestClose(reason: TSnackbarCloseReason): void {\r\n if (!this.open) {\r\n return;\r\n }\r\n this.clearCloseTimer();\r\n this.closed.emit({ reason });\r\n }\r\n\r\n private clearCloseTimer(): void {\r\n if (this.closeTimerId) {\r\n clearTimeout(this.closeTimerId);\r\n this.closeTimerId = null;\r\n }\r\n }\r\n}\r\n","@if (open) {\r\n <div\r\n class=\"frg-snackbar\"\r\n [ngClass]=\"snackbarClassMap\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n >\r\n <div class=\"frg-snackbar__accent\"></div>\n @if (statusIconClass) {\n <span class=\"frg-snackbar__status-icon\" [ngClass]=\"statusIconClass\" aria-hidden=\"true\"></span>\n }\n <div class=\"frg-snackbar__message\">\n {{ message }}\r\n <ng-content></ng-content>\r\n </div>\r\n @if (actionLabel) {\r\n <button type=\"button\" class=\"frg-snackbar__action\" (click)=\"onActionClick()\">\r\n {{ actionLabel }}\r\n </button>\r\n }\r\n @if (hasCloseButton) {\r\n <button\r\n type=\"button\"\r\n class=\"frg-snackbar__close\"\r\n aria-label=\"Close notification\"\r\n (click)=\"onCloseClick()\"\r\n >\r\n ×\r\n </button>\r\n }\r\n </div>\r\n}\r\n","import { v4 as uuidv4 } from 'uuid';\r\n\r\n/**\r\n * Generates a RFC4122 version 4 UUID string.\r\n * Uses the 'uuid' library for guaranteed uniqueness.\r\n * @returns {string} A UUID v4 string.\r\n */\r\nexport function generateUUID(): string {\r\n return uuidv4();\r\n}\r\n\r\n/**\r\n * Returns the current timestamp in ISO 8601 format.\r\n * Useful for logging or time-stamping events in a standardized way.\r\n * @returns {string} Current date-time as ISO string.\r\n */\r\nexport function getTimestampISO(): string {\r\n return new Date().toISOString();\r\n}\r\n\r\n/**\r\n * Returns the current timestamp in milliseconds since Unix epoch.\r\n * Useful for performance measurements or relative time calculations.\r\n * @returns {number} Current timestamp in milliseconds.\r\n */\r\nexport function getTimestampMillis(): number {\r\n return Date.now();\r\n}\r\n\r\n/**\r\n * Generates a simple unique ID string with an optional prefix.\r\n * Uses random alphanumeric characters and current time for uniqueness.\r\n * Good for quick IDs that don't require strict UUID format.\r\n * @param {string} prefix Optional string prefix (default: 'id').\r\n * @returns {string} Unique ID string with prefix.\r\n */\r\nexport function generateUniqueId(prefix = 'id'): string {\r\n return `${prefix}-${Math.random().toString(36).substring(2, 11)}`;\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Output,\r\n SimpleChanges,\r\n Type,\r\n ViewChild,\r\n inject,\r\n} from '@angular/core';\r\n\r\nimport hljs from 'highlight.js';\r\nimport { generateUniqueId } from '../../utils/uuid.utils';\r\nimport { CodeBlockConfig, CodeBlockHeader } from './code-block.interface';\r\nimport { CodeBlockBody, THLJSLanguage } from './code-block.type';\r\n\r\n@Component({\r\n selector: 'frg-code-block',\r\n templateUrl: './code-block.component.html',\r\n styleUrls: ['./code-block.component.scss'],\r\n imports: [],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CodeBlockComponent implements AfterViewInit, OnChanges, OnDestroy {\r\n private readonly cdr: ChangeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n /**\r\n * Configuration options for the code block.\r\n */\r\n @Input() public config: CodeBlockConfig | undefined = undefined;\r\n\r\n /**\r\n * Emitted when the code block is closed.\r\n */\r\n @Output() public closed = new EventEmitter<void>();\r\n\r\n protected copied = false;\r\n private copyResetId: ReturnType<typeof setTimeout> | null = null;\r\n\r\n /**\r\n * Reference to the code element in the template.\r\n */\r\n @ViewChild('codeElement', { static: false })\r\n codeElement?: ElementRef<HTMLElement>;\r\n /**\r\n * Reference to the container element in the template.\r\n */\r\n @ViewChild('container', { static: false })\r\n containerElement?: ElementRef<HTMLElement>;\r\n\r\n /**\r\n * Indicates if the code block has a footer.\r\n */\r\n protected get hasConfig(): boolean {\r\n return !!this.config;\r\n }\r\n\r\n /**\r\n * Returns the header configuration of the code block.\r\n * This includes properties like title, minimize, fullscreen, and close options.\r\n * @return {CodeBlockHeader | undefined} The header configuration or undefined if not set.\r\n * @memberof CodeBlockComponent\r\n */\r\n protected get header(): CodeBlockHeader | undefined {\r\n return this.config?.header;\r\n }\r\n\r\n /**\r\n * Returns the body of the code block, which can be either text or a component.\r\n * @return {CodeBlockBody | undefined} The body configuration or undefined if not set.\r\n * @memberof CodeBlockComponent\r\n */\r\n protected get title(): string | undefined {\r\n return this.config?.header?.title;\r\n }\r\n\r\n /**\r\n * Returns the body configuration of the code block.\r\n * This includes properties like content and language.\r\n * @return {CodeBlockBody | undefined} The body configuration or undefined if not set.\r\n * @memberof CodeBlockComponent\r\n */\r\n protected get body(): CodeBlockBody | undefined {\r\n return this.config?.body;\r\n }\r\n\r\n /**\r\n * Returns the type of content in the body of the code block.\r\n * This can be either 'text' for plain text content or 'component' for a component.\r\n * @return {'text' | 'component' | undefined} The type of content or undefined if not set.\r\n * @memberof CodeBlockComponent\r\n */\r\n protected get type(): 'text' | 'component' | undefined {\r\n return this.config?.body?.type;\r\n }\r\n\r\n /**\r\n * Returns the component type in the body of the code block.\r\n * @return {Type<T> | undefined} The component type or undefined if not set.\r\n * @memberof CodeBlockComponent\r\n */\r\n protected get component(): Type<unknown> | undefined {\r\n return this.config?.body?.component;\r\n }\r\n\r\n /**\r\n * Returns the inputs for the component in the body of the code block.\r\n * @return {Record<string, unknown> | undefined} The inputs or undefined if not set.\r\n * @memberof CodeBlockComponent\r\n */\r\n protected get inputs(): Record<string, unknown> | undefined {\r\n return this.config?.body?.inputs;\r\n }\r\n\r\n /**\r\n * Returns the content for the code block.\r\n * @return {string | undefined} The content or undefined if not set.\r\n * @memberof CodeBlockComponent\r\n */\r\n protected get content(): string | undefined {\r\n return this.config?.body?.content;\r\n }\r\n\r\n /**\r\n * Returns the programming language for the code block.\r\n * @return {THLJSLanguage | undefined} The language or undefined if not set.\r\n * @memberof CodeBlockComponent\r\n */\r\n protected get language(): THLJSLanguage | undefined {\r\n return this.config?.body?.language;\r\n }\r\n\r\n /**\r\n * Returns the lines to highlight in the code block.\r\n * @return {string | undefined} The highlight lines or undefined if not set.\r\n * @memberof CodeBlockComponent\r\n */\r\n protected get highlightLines(): string | undefined {\r\n return this.config?.body?.highlightLines;\r\n }\r\n\r\n protected get showCopyButton(): boolean {\r\n if (this.config?.body?.type !== 'text' || !this.header) {\r\n return false;\r\n }\r\n return this.header.showCopy ?? true;\r\n }\r\n\r\n protected get copyLabel(): string {\r\n return this.header?.copyLabel ?? 'Copy';\r\n }\r\n\r\n protected get copiedLabel(): string {\r\n return this.header?.copiedLabel ?? 'Copied';\r\n }\r\n\r\n ngAfterViewInit() {\r\n if (this.config?.body?.type === 'text') {\r\n this.highlightCode();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes['config']) {\r\n if (!this.config?.id) {\r\n this.config = {\r\n ...this.config,\r\n id: generateUniqueId('codeblock'),\r\n };\r\n }\r\n\r\n const prevContent = changes['config'].previousValue?.body?.content;\r\n const newContent = changes['config'].currentValue?.body?.content;\r\n\r\n if (prevContent !== newContent && this.config?.body?.type === 'text') {\r\n this.highlightCode();\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.copyResetId) {\r\n clearTimeout(this.copyResetId);\r\n this.copyResetId = null;\r\n }\r\n }\r\n\r\n protected copyToClipboard(): void {\r\n if (this.config?.body?.type !== 'text') {\r\n return;\r\n }\r\n\r\n const text = this.getCopyContent();\r\n if (!text) {\r\n return;\r\n }\r\n\r\n const onSuccess = () => {\r\n this.copied = true;\r\n this.cdr.markForCheck();\r\n if (this.copyResetId) {\r\n clearTimeout(this.copyResetId);\r\n }\r\n this.copyResetId = setTimeout(() => {\r\n this.copied = false;\r\n this.cdr.markForCheck();\r\n }, 1500);\r\n };\r\n\r\n const canUseClipboard = window.isSecureContext && navigator.clipboard && typeof navigator.clipboard.writeText === 'function';\r\n if (canUseClipboard) {\r\n navigator.clipboard.writeText(text).then(onSuccess).catch(() => {\r\n this.fallbackCopy(text, onSuccess);\r\n });\r\n return;\r\n }\r\n\r\n this.fallbackCopy(text, onSuccess);\r\n }\r\n\r\n /**\r\n * Highlights the code in the code block.\r\n * This method uses the highlight.js library to apply syntax highlighting.\r\n */\r\n private highlightCode() {\r\n if (this.config?.body?.type === 'text' && this.codeElement) {\r\n let code = this.config.body.content ?? '';\r\n\r\n code = this.dedent(code).trim();\r\n if(this.config.body.hasNumberLine){\r\n code = this.addNumberLines(code);\r\n }\r\n\r\n this.codeElement.nativeElement.textContent = code;\r\n hljs.highlightElement(this.codeElement.nativeElement);\r\n }\r\n }\r\n\r\n private getCopyContent(): string {\r\n let code = this.config?.body?.content ?? '';\r\n code = this.dedent(code).trim();\r\n return code;\r\n }\r\n\r\n private fallbackCopy(text: string, onSuccess: () => void): void {\r\n const textarea = document.createElement('textarea');\r\n textarea.value = text;\r\n textarea.setAttribute('readonly', 'true');\r\n textarea.style.position = 'absolute';\r\n textarea.style.left = '-9999px';\r\n document.body.appendChild(textarea);\r\n textarea.focus();\r\n textarea.select();\r\n textarea.setSelectionRange(0, textarea.value.length);\r\n const copied = document.execCommand('copy');\r\n document.body.removeChild(textarea);\r\n if (copied) {\r\n onSuccess();\r\n }\r\n }\r\n\r\n /**\r\n * Dedents a given string by removing common leading whitespace.\r\n * @param str The input string to dedent.\r\n * @returns The dedented string.\r\n */\r\n private dedent(str: string): string {\r\n const lines = str.replace(/\\t/g, ' ').split('\\n');\r\n\r\n while (lines.length && lines[0].trim() === '') lines.shift();\r\n while (lines.length && lines[lines.length - 1].trim() === '') lines.pop();\r\n\r\n const minIndent = Math.min(\r\n ...lines\r\n .filter(line => line.trim().length > 0)\r\n .map(line => {\r\n const match = /^(\\s*)/.exec(line);\r\n return match ? match[0].length : 0;\r\n })\r\n );\r\n\r\n return lines.map(line => line.slice(minIndent)).join('\\n');\r\n }\r\n\r\n private readonly addNumberLines = (str: string): string => {\r\n const lines = str.split('\\n');\r\n const maxLength = lines.length.toString().length;\r\n\r\n return lines\r\n .map((line, index) => {\r\n const lineNumber = (index + 1).toString().padStart(maxLength, ' ');\r\n return `${lineNumber} | ${line}`;\r\n })\r\n .join('\\n');\r\n };\r\n}\r\n","@if (config) {\r\n <div #container class=\"code-block\">\r\n @if (header) {\r\n <div class=\"code-block__header\">\r\n <span class=\"code-block__header__title\">{{ title }}</span>\r\n @if (showCopyButton) {\r\n <button\r\n type=\"button\"\r\n class=\"code-block__header__action\"\r\n (click)=\"copyToClipboard()\"\r\n [attr.aria-label]=\"copied ? copiedLabel : copyLabel\"\r\n >\r\n <span class=\"code-block__header__action-content\" [class.is-copied]=\"copied\">\r\n @if (copied) {\r\n <span class=\"code-block__header__action-label\">{{ copiedLabel }}</span>\r\n } @else {\r\n <span class=\"fa-regular fa-copy\" aria-hidden=\"true\"></span>\r\n }\r\n </span>\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n @if (body) {\r\n <div class=\"code-block__body\">\r\n @switch (type) {\r\n @case ('text') {\r\n <pre\r\n #codeElement\r\n class=\"language-{{ language || 'typescript' }}\"\r\n [attr.data-line]=\"highlightLines\"\r\n >\r\n <code [textContent]=\"content\"></code>\r\n </pre>\r\n }\r\n @case ('component') {\r\n @if (component) {\r\n <ng-template\r\n addComponent\r\n [component]=\"component\"\r\n [inputComponent]=\"inputs\"\r\n ></ng-template>\r\n }\r\n }\r\n }\r\n </div>\r\n }\r\n @if (config.footer?.text) {\r\n <div class=\"code-block__footer\">\r\n {{ config.footer?.text }}\r\n </div>\r\n }\r\n </div>\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, inject, Input, OnDestroy, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, NavigationEnd, Router, RouterLink } from '@angular/router';\r\nimport { filter, Subject, takeUntil } from 'rxjs';\r\nimport { BreadcrumbItem } from './breadcrumb.interface';\r\nimport { TBaseStyle } from '../../types/base.types';\r\n\r\n@Component({\r\n selector: 'frg-breadcrumb',\r\n imports: [CommonModule, RouterLink],\r\n templateUrl: './breadcrumb.component.html',\r\n styleUrl: './breadcrumb.component.scss',\r\n})\r\nexport class BreadcrumbComponent implements OnInit, OnDestroy {\r\n private readonly router: Router = inject(Router);\r\n private readonly activatedRoute: ActivatedRoute = inject(ActivatedRoute);\r\n /**\r\n * Breadcrumb items to render.\r\n */\r\n @Input() items: BreadcrumbItem[] = [];\r\n /**\r\n * Build breadcrumbs automatically from the current route tree.\r\n */\r\n @Input() auto: boolean = false;\r\n /**\r\n * Separator displayed between breadcrumb items.\r\n */\r\n @Input() separator: string = '/';\r\n /**\r\n * Color theme for breadcrumb text.\r\n */\r\n @Input() styleType: TBaseStyle = 'default';\r\n\r\n protected autoItems: BreadcrumbItem[] = [];\r\n private readonly destroy$ = new Subject<void>();\r\n\r\n public ngOnInit(): void {\r\n if (this.auto) {\r\n this.buildAutoItems();\r\n this.router.events\r\n .pipe(filter(event => event instanceof NavigationEnd), takeUntil(this.destroy$))\r\n .subscribe(() => this.buildAutoItems());\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n public get breadcrumbItems(): BreadcrumbItem[] {\r\n const items = this.auto ? this.autoItems : this.items;\r\n if (!items.length) return [];\r\n\r\n return items.map((item, index) => ({\r\n ...item,\r\n isActive: item.isActive ?? index === items.length - 1\r\n }));\r\n }\r\n\r\n private buildAutoItems(): void {\r\n const items: BreadcrumbItem[] = [];\r\n let url = '';\r\n let route: ActivatedRoute | null = this.activatedRoute.root;\r\n\r\n while (route?.firstChild) {\r\n route = route.firstChild;\r\n const config = route.routeConfig;\r\n if (!config?.path || config.path === '**') {\r\n continue;\r\n }\r\n\r\n const segments = route.snapshot.url.map(segment => segment.path).filter(Boolean);\r\n if (!segments.length) {\r\n continue;\r\n }\r\n\r\n const label = this.resolveLabel(route, segments);\r\n url += `/${segments.join('/')}`;\r\n\r\n items.push({\r\n label,\r\n url,\r\n iconClass: route.snapshot.data?.['breadcrumbIcon']\r\n });\r\n }\r\n\r\n this.autoItems = items;\r\n }\r\n\r\n private resolveLabel(route: ActivatedRoute, segments: string[]): string {\r\n const dataLabel = route.snapshot.data?.['breadcrumb'];\r\n if (typeof dataLabel === 'string' && dataLabel.trim().length) {\r\n return dataLabel;\r\n }\r\n\r\n const fallback = segments.join(' ');\r\n return fallback\r\n .split('-')\r\n .map(part => part.charAt(0).toUpperCase() + part.slice(1))\r\n .join(' ');\r\n }\r\n}\r\n","@if (breadcrumbItems.length) {\r\n <nav\r\n class=\"frg-breadcrumb\"\r\n aria-label=\"Breadcrumb\"\r\n [ngClass]=\"{\r\n 'frg-breadcrumb--primary': styleType === 'primary' || styleType === 'outline-primary',\r\n 'frg-breadcrumb--secondary': styleType === 'secondary' || styleType === 'outline-secondary',\r\n 'frg-breadcrumb--tertiary': styleType === 'tertiary' || styleType === 'outline-tertiary',\r\n 'frg-breadcrumb--info': styleType === 'info' || styleType === 'outline-info',\r\n 'frg-breadcrumb--success': styleType === 'success' || styleType === 'outline-success',\r\n 'frg-breadcrumb--warning': styleType === 'warning' || styleType === 'outline-warning',\r\n 'frg-breadcrumb--danger': styleType === 'danger' || styleType === 'outline-danger',\r\n 'frg-breadcrumb--dark': styleType === 'dark' || styleType === 'outline-dark',\r\n 'frg-breadcrumb--light': styleType === 'light' || styleType === 'outline-light'\r\n }\"\r\n >\r\n <ol class=\"frg-breadcrumb__list\">\r\n @for (item of breadcrumbItems; track item.label; let isLast = $last) {\r\n <li class=\"frg-breadcrumb__item\" [class.is-active]=\"item.isActive || isLast\">\r\n @if (item.url && !isLast) {\r\n <a class=\"frg-breadcrumb__link\" [routerLink]=\"item.url\" [attr.aria-label]=\"item.ariaLabel || null\">\r\n @if (item.iconClass) {\r\n <span class=\"frg-breadcrumb__icon\" [ngClass]=\"item.iconClass\" aria-hidden=\"true\"></span>\r\n }\r\n <span class=\"frg-breadcrumb__label\">{{ item.label }}</span>\r\n </a>\r\n } @else {\r\n <span class=\"frg-breadcrumb__current\" [attr.aria-label]=\"item.ariaLabel || null\">\r\n @if (item.iconClass) {\r\n <span class=\"frg-breadcrumb__icon\" [ngClass]=\"item.iconClass\" aria-hidden=\"true\"></span>\r\n }\r\n <span class=\"frg-breadcrumb__label\">{{ item.label }}</span>\r\n </span>\r\n }\r\n\r\n @if (!isLast) {\r\n <span class=\"frg-breadcrumb__separator\">{{ separator }}</span>\r\n }\r\n </li>\r\n }\r\n </ol>\r\n </nav>\r\n}\r\n","import { Component, HostBinding, Input } from '@angular/core';\r\nimport { TContainerSize } from './container.type';\r\n\r\n@Component({\r\n selector: 'frg-container',\r\n templateUrl: './container.component.html',\r\n styleUrl: './container.component.scss'\r\n})\r\nexport class ContainerComponent {\r\n @Input() size: TContainerSize = 'lg';\r\n @Input() padded: boolean = true;\r\n\r\n @HostBinding('class.frg-container') baseClass = true;\r\n @HostBinding('class.frg-container--sm') get isSmall() {\r\n return this.size === 'sm';\r\n }\r\n @HostBinding('class.frg-container--md') get isMedium() {\r\n return this.size === 'md';\r\n }\r\n @HostBinding('class.frg-container--lg') get isLarge() {\r\n return this.size === 'lg';\r\n }\r\n @HostBinding('class.frg-container--xl') get isXLarge() {\r\n return this.size === 'xl';\r\n }\r\n @HostBinding('class.frg-container--full') get isFull() {\r\n return this.size === 'full';\r\n }\r\n @HostBinding('class.frg-container--padded') get isPadded() {\r\n return this.padded;\r\n }\r\n}\r\n","<ng-content></ng-content>\r\n","import { Component, HostBinding, Input } from '@angular/core';\r\nimport { TDividerOrientation, TDividerSpacing } from './divider.type';\r\n\r\n@Component({\r\n selector: 'frg-divider',\r\n templateUrl: './divider.component.html',\r\n styleUrl: './divider.component.scss'\r\n})\r\nexport class DividerComponent {\r\n @Input() orientation: TDividerOrientation = 'horizontal';\r\n @Input() spacing: TDividerSpacing = 'md';\r\n @Input() dashed: boolean = false;\r\n\r\n @HostBinding('class.frg-divider') baseClass = true;\r\n @HostBinding('class.frg-divider--horizontal') get isHorizontal() {\r\n return this.orientation === 'horizontal';\r\n }\r\n @HostBinding('class.frg-divider--vertical') get isVertical() {\r\n return this.orientation === 'vertical';\r\n }\r\n @HostBinding('class.frg-divider--sm') get isSmall() {\r\n return this.spacing === 'sm';\r\n }\r\n @HostBinding('class.frg-divider--md') get isMedium() {\r\n return this.spacing === 'md';\r\n }\r\n @HostBinding('class.frg-divider--lg') get isLarge() {\r\n return this.spacing === 'lg';\r\n }\r\n @HostBinding('class.frg-divider--dashed') get isDashed() {\r\n return this.dashed;\r\n }\r\n\r\n @HostBinding('attr.role') role = 'separator';\r\n @HostBinding('attr.aria-orientation') get ariaOrientation() {\r\n return this.orientation;\r\n }\r\n}\r\n","<span class=\"frg-divider__line\" aria-hidden=\"true\"></span>\r\n","import { Component, HostBinding, Input } from '@angular/core';\r\nimport { TSeparatorSize } from './separator.type';\r\n\r\n@Component({\r\n selector: 'frg-separator',\r\n templateUrl: './separator.component.html',\r\n styleUrl: './separator.component.scss'\r\n})\r\nexport class SeparatorComponent {\r\n @Input() label?: string;\r\n @Input() size: TSeparatorSize = 'md';\r\n\r\n @HostBinding('class.frg-separator') baseClass = true;\r\n @HostBinding('class.frg-separator--sm') get isSmall() {\r\n return this.size === 'sm';\r\n }\r\n @HostBinding('class.frg-separator--md') get isMedium() {\r\n return this.size === 'md';\r\n }\r\n @HostBinding('class.frg-separator--lg') get isLarge() {\r\n return this.size === 'lg';\r\n }\r\n\r\n @HostBinding('attr.role') role = 'separator';\r\n}\r\n","<div class=\"frg-separator__row\">\r\n @if (label) {\r\n <span class=\"frg-separator__line\" aria-hidden=\"true\"></span>\r\n <span class=\"frg-separator__label\">{{ label }}</span>\r\n <span class=\"frg-separator__line\" aria-hidden=\"true\"></span>\r\n } @else {\r\n <span class=\"frg-separator__line frg-separator__line--full\" aria-hidden=\"true\"></span>\r\n }\r\n</div>\r\n","import { Component, HostBinding, Input } from '@angular/core';\r\nimport { TSectionHeading, TSectionSpacing } from './section.type';\r\n\r\n@Component({\r\n selector: 'frg-section',\r\n templateUrl: './section.component.html',\r\n styleUrl: './section.component.scss'\r\n})\r\nexport class SectionComponent {\r\n @Input() title?: string;\r\n @Input() description?: string;\r\n @Input() spacing: TSectionSpacing = 'md';\r\n @Input() divider: boolean = false;\r\n @Input() headingLevel: TSectionHeading = 2;\r\n\r\n @HostBinding('class.frg-section') baseClass = true;\r\n @HostBinding('class.frg-section--sm') get isSmall() {\r\n return this.spacing === 'sm';\r\n }\r\n @HostBinding('class.frg-section--md') get isMedium() {\r\n return this.spacing === 'md';\r\n }\r\n @HostBinding('class.frg-section--lg') get isLarge() {\r\n return this.spacing === 'lg';\r\n }\r\n @HostBinding('class.frg-section--divider') get hasDivider() {\r\n return this.divider;\r\n }\r\n\r\n get hasHeader(): boolean {\r\n return !!(this.title || this.description);\r\n }\r\n}\r\n","@if (hasHeader) {\r\n <div class=\"frg-section__header\">\r\n @if (title) {\r\n @switch (headingLevel) {\r\n @case (1) { <h1 class=\"frg-section__title\">{{ title }}</h1> }\r\n @case (2) { <h2 class=\"frg-section__title\">{{ title }}</h2> }\r\n @case (3) { <h3 class=\"frg-section__title\">{{ title }}</h3> }\r\n @case (4) { <h4 class=\"frg-section__title\">{{ title }}</h4> }\r\n @case (5) { <h5 class=\"frg-section__title\">{{ title }}</h5> }\r\n @case (6) { <h6 class=\"frg-section__title\">{{ title }}</h6> }\r\n @default { <h2 class=\"frg-section__title\">{{ title }}</h2> }\r\n }\r\n }\r\n @if (description) {\r\n <p class=\"frg-section__description\">{{ description }}</p>\r\n }\r\n </div>\r\n}\r\n<div class=\"frg-section__content\">\r\n <ng-content></ng-content>\r\n</div>\r\n","export abstract class MorphBase {\r\n protected imageUrl: string | null = null;\r\n protected fillColor: string | null = null;\r\n protected pathStart: string = '';\r\n protected pathEnd: string = '';\r\n protected duration: number = 4000;\r\n\r\n protected abstract generateRandomPath(\r\n points: number,\r\n radius: number,\r\n variability: number\r\n ): string;\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, Input, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\r\nimport { TSpinnerSize, TSpinnerType } from './spinner.type';\r\n\r\n@Component({\r\n selector: 'frg-spinner',\r\n templateUrl: './spinner.component.html',\r\n styleUrls: ['./spinner.component.scss'],\r\n imports: [NgClass]\r\n})\r\nexport class SpinnerComponent implements OnChanges, OnDestroy {\r\n @Input() size: TSpinnerSize = 'medium';\r\n @Input() isCentered: boolean = false;\r\n @Input() isOverlay = false;\r\n @Input() isOverlayItem = false;\r\n @Input() label = 'Loading...';\r\n @Input() styleType: TSpinnerType = 'primary';\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['isOverlay']) {\r\n this.toggleBodyScroll(this.isOverlay);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.toggleBodyScroll(false);\r\n }\r\n\r\n private toggleBodyScroll(disable: boolean): void {\r\n document.body.style.overflow = disable ? 'hidden' : '';\r\n }\r\n}\r\n","<output class=\"frg-spinner\" aria-label=\"{{label}}\"\r\n [ngClass]=\"{\r\n 'frg-spinner--xs' : size === 'extra-small',\r\n 'frg-spinner--sm' : size === 'small',\r\n 'frg-spinner--md' : size === 'medium',\r\n 'frg-spinner--lg' : size === 'large',\r\n 'frg-spinner--xl' : size === 'extra-large',\r\n 'frg-spinner--primary': styleType === 'primary',\r\n 'frg-spinner--secondary': styleType === 'secondary',\r\n 'frg-spinner--tertiary': styleType === 'tertiary',\r\n 'frg-spinner--dark': styleType === 'dark',\r\n 'frg-spinner--light': styleType === 'light',\r\n 'frg-spinner--center': isCentered,\r\n 'frg-spinner--overlay': isOverlay,\r\n 'frg-spinner--overlay-item': isOverlayItem\r\n }\"\r\n >\r\n <div class=\"frg-spinner__circle\" aria-hidden=\"true\"></div>\r\n <span class=\"sr-only\">{{label}}</span>\r\n</output>","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport { animate, svg } from 'animejs';\r\nimport { MorphBase } from '../morph.abstract';\r\nimport { SpinnerComponent } from '../../loader/spinner/spinner.component';\r\n\r\n@Component({\r\n selector: 'app-blob-morph',\r\n templateUrl: './blob-morph.component.html',\r\n imports: [SpinnerComponent],\r\n styleUrls: ['./blob-morph.component.scss'],\r\n})\r\nexport class BlobMorphComponent extends MorphBase implements AfterViewInit {\r\n @Input() override imageUrl: string | null = null;\r\n @Input() override fillColor: string | null = null;\r\n @Input() override pathStart: string = this.generateRandomPath();\r\n @Input() override pathEnd: string = this.generateRandomPath();\r\n @Input() override duration: number = 4000;\r\n\r\n @Output() loadEvent: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n @ViewChild('morphPath', { static: false })\r\n morphPathRef!: ElementRef<SVGPathElement>;\r\n clipId = `clip-${Math.random().toString(36).substring(2, 10)}`;\r\n\r\n protected isLoaded: boolean = false;\r\n\r\n ngAfterViewInit(): void {\r\n const startPath = this.morphPathRef.nativeElement;\r\n const endPath = document.getElementById(\r\n `morph-path-end-${this.clipId}`\r\n ) as SVGPathElement | null;\r\n\r\n if (startPath && endPath) {\r\n animate(startPath, {\r\n d: svg.morphTo(endPath),\r\n direction: 'alternate-reverse',\r\n duration: this.duration,\r\n ease: 'inOut',\r\n loop: true,\r\n alternate: true,\r\n });\r\n } else {\r\n console.error('Path elements not found');\r\n }\r\n }\r\n\r\n protected override generateRandomPath(\r\n points = 8,\r\n radius = 60,\r\n variability = 20\r\n ): string {\r\n const angleStep = (Math.PI * 2) / points;\r\n const coords: { x: number; y: number }[] = [];\r\n\r\n for (let i = 0; i < points; i++) {\r\n const angle = i * angleStep;\r\n const randRadius = radius + (Math.random() - 0.5) * 2 * variability;\r\n const x = Math.cos(angle) * randRadius;\r\n const y = Math.sin(angle) * randRadius;\r\n coords.push({ x, y });\r\n }\r\n\r\n let path = `M${coords[0].x.toFixed(1)},${coords[0].y.toFixed(1)}`;\r\n\r\n for (let i = 0; i < coords.length; i++) {\r\n const p0 = coords[i];\r\n const p1 = coords[(i + 1) % coords.length];\r\n const pPrev = coords[(i - 1 + coords.length) % coords.length];\r\n const pNext = coords[(i + 2) % coords.length];\r\n\r\n const control1X = p0.x + (p1.x - pPrev.x) * 0.2;\r\n const control1Y = p0.y + (p1.y - pPrev.y) * 0.2;\r\n\r\n const control2X = p1.x - (pNext.x - p0.x) * 0.2;\r\n const control2Y = p1.y - (pNext.y - p0.y) * 0.2;\r\n\r\n path += ` C${control1X.toFixed(1)},${control1Y.toFixed(1)} ${control2X.toFixed(1)},${control2Y.toFixed(1)} ${p1.x.toFixed(1)},${p1.y.toFixed(1)}`;\r\n }\r\n\r\n path += ' Z';\r\n return path;\r\n }\r\n\r\n onLoadEvent(): void {\r\n this.isLoaded = true;\r\n this.loadEvent.emit();\r\n }\r\n}\r\n","<div class=\"blob-container\">\r\n <svg\r\n viewBox=\"0 0 200 200\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"blob-svg\"\r\n [class.hidden]=\"!isLoaded\"\r\n >\r\n <defs>\r\n <clipPath [attr.id]=\"clipId\" transform=\"translate(100 100)\">\r\n <path #morphPath [attr.d]=\"pathStart\" />\r\n </clipPath>\r\n <path [attr.id]=\"'morph-path-end-' + clipId\" [attr.d]=\"pathEnd\" />\r\n </defs>\r\n\r\n @if (imageUrl) {\r\n <image\r\n [attr.href]=\"imageUrl\"\r\n width=\"100%\"\r\n height=\"100%\"\r\n preserveAspectRatio=\"xMidYMid slice\"\r\n [attr.clip-path]=\"'url(#' + clipId + ')'\"\r\n (load)=\"onLoadEvent()\"\r\n />\r\n } @else {\r\n <g [attr.clip-path]=\"'url(#' + clipId + ')'\">\r\n <rect width=\"100%\" height=\"100%\" [attr.fill]=\"fillColor || '#ccc'\" />\r\n </g>\r\n }\r\n </svg>\r\n\r\n @if (!isLoaded) {\r\n <frg-spinner [isOverlayItem]=\"true\"></frg-spinner>\r\n }\r\n</div>\r\n","import { NgFor } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n HostBinding,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n QueryList,\r\n SimpleChanges,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { animate } from 'animejs';\r\nimport { Subscription } from 'rxjs';\r\n\r\ninterface Sparkle {\r\n x: number;\r\n y: number;\r\n size: number;\r\n delay: number;\r\n duration: number;\r\n driftX: number;\r\n driftY: number;\r\n}\r\n\r\n@Component({\r\n selector: 'frg-sparkle-field',\r\n templateUrl: './sparkle-field.component.html',\r\n styleUrl: './sparkle-field.component.scss',\r\n imports: [NgFor],\r\n})\r\nexport class SparkleFieldComponent implements OnInit, OnChanges, AfterViewInit, OnDestroy {\r\n @Input() width: number | string = 260;\r\n @Input() height: number | string = 160;\r\n @Input() count = 12;\r\n @Input() minSize = 2;\r\n @Input() maxSize = 6;\r\n @Input() drift = 18;\r\n @Input() minDuration = 2400;\r\n @Input() maxDuration = 5200;\r\n @Input() loop = true;\r\n @Input() color: string | null = null;\r\n\r\n sparkles: Sparkle[] = [];\r\n\r\n @ViewChildren('sparkle')\r\n sparkleRefs!: QueryList<ElementRef<HTMLSpanElement>>;\r\n\r\n private sparkleAnimations: Array<ReturnType<typeof animate>> = [];\r\n private sparkleChangesSub: Subscription | null = null;\r\n private readonly fallbackWidth = 260;\r\n private readonly fallbackHeight = 160;\r\n\r\n @HostBinding('style.width') get hostWidth(): string {\r\n return this.widthStyle;\r\n }\r\n\r\n @HostBinding('style.height') get hostHeight(): string {\r\n return this.heightStyle;\r\n }\r\n\r\n @HostBinding('style.minWidth') get hostMinWidth(): string | null {\r\n return this.needsMinSize(this.width) ? `${this.fallbackWidth}px` : null;\r\n }\r\n\r\n @HostBinding('style.minHeight') get hostMinHeight(): string | null {\r\n return this.needsMinSize(this.height) ? `${this.fallbackHeight}px` : null;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.buildSparkles();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (\r\n changes['count'] ||\r\n changes['minSize'] ||\r\n changes['maxSize'] ||\r\n changes['drift'] ||\r\n changes['minDuration'] ||\r\n changes['maxDuration'] ||\r\n changes['loop']\r\n ) {\r\n this.buildSparkles();\r\n this.restartAnimation();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.sparkleChangesSub = this.sparkleRefs.changes.subscribe(() =>\r\n this.restartAnimation()\r\n );\r\n this.restartAnimation();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.sparkleAnimations.forEach((animation) => animation.pause());\r\n this.sparkleChangesSub?.unsubscribe();\r\n }\r\n\r\n private buildSparkles(): void {\r\n const count = Math.max(0, Math.floor(this.count));\r\n const minSize = Math.min(this.minSize, this.maxSize);\r\n const maxSize = Math.max(this.minSize, this.maxSize);\r\n const minDuration = Math.min(this.minDuration, this.maxDuration);\r\n const maxDuration = Math.max(this.minDuration, this.maxDuration);\r\n\r\n this.sparkles = Array.from({ length: count }, () => ({\r\n x: this.randomInRange(0, 100),\r\n y: this.randomInRange(0, 100),\r\n size: this.randomInRange(minSize, maxSize),\r\n delay: this.randomInRange(0, 900),\r\n duration: this.randomInRange(minDuration, maxDuration),\r\n driftX: this.randomInRange(-this.drift, this.drift),\r\n driftY: this.randomInRange(-this.drift, this.drift),\r\n }));\r\n }\r\n\r\n private restartAnimation(): void {\r\n if (!this.sparkleRefs || this.sparkleRefs.length === 0) {\r\n return;\r\n }\r\n\r\n this.sparkleAnimations.forEach((animation) => animation.pause());\r\n this.sparkleAnimations = [];\r\n\r\n const targets = this.sparkleRefs.toArray();\r\n\r\n targets.forEach((ref, i) => {\r\n const sparkle = this.sparkles[i];\r\n if (!sparkle) {\r\n return;\r\n }\r\n\r\n const animation = animate(ref.nativeElement, {\r\n translateX: [-sparkle.driftX, sparkle.driftX],\r\n translateY: [-sparkle.driftY, sparkle.driftY],\r\n scale: [0.7, 1.2],\r\n opacity: [0.35, 1],\r\n duration: sparkle.duration ?? 3000,\r\n alternate: true,\r\n loop: this.loop,\r\n ease: 'inOut',\r\n });\r\n\r\n if (sparkle.delay > 0) {\r\n animation.seek(sparkle.delay % (sparkle.duration || 3000));\r\n }\r\n\r\n this.sparkleAnimations.push(animation);\r\n });\r\n }\r\n\r\n private randomInRange(min: number, max: number): number {\r\n if (min === max) {\r\n return min;\r\n }\r\n return min + Math.random() * (max - min);\r\n }\r\n\r\n get widthStyle(): string {\r\n return this.formatSize(this.width);\r\n }\r\n\r\n get heightStyle(): string {\r\n return this.formatSize(this.height);\r\n }\r\n\r\n private formatSize(value: number | string): string {\r\n if (typeof value === 'number') {\r\n return `${value}px`;\r\n }\r\n return value;\r\n }\r\n\r\n private needsMinSize(value: number | string): boolean {\r\n return typeof value === 'string' && value.trim().endsWith('%');\r\n }\r\n}\r\n","<div\r\n class=\"frg-sparkle-field\"\r\n [style.--frg-sparkle-color]=\"color || null\"\r\n>\r\n <span\r\n #sparkle\r\n *ngFor=\"let sparkle of sparkles\"\r\n class=\"frg-sparkle\"\r\n [style.left.%]=\"sparkle.x\"\r\n [style.top.%]=\"sparkle.y\"\r\n [style.width.px]=\"sparkle.size\"\r\n [style.height.px]=\"sparkle.size\"\r\n ></span>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport { TBaseStyle } from '../../../types/base.types';\r\nimport { IPaginationOutput } from '../pagination.interface';\r\n\r\n@Component({\r\n selector: 'frg-small-pagination',\r\n imports: [CommonModule],\r\n templateUrl: './small-pagination.component.html',\r\n styleUrls: ['./small-pagination.component.scss']\r\n})\r\nexport class SmallPaginationComponent<T> implements OnInit, OnChanges {\r\n @Input() totalItems = 0;\r\n @Input() fullData = [] as T[];\r\n @Input() page = 0;\r\n @Input() pageSize = 0;\r\n @Input() hasElipsisPages = false;\r\n @Input() styleType: TBaseStyle = 'primary';\r\n\r\n @Output() pageChange = new EventEmitter<IPaginationOutput<T>>();\r\n\r\n pagesArray: number[] = [];\r\n pagedData: T[] = [];\r\n totalPages = 0;\r\n showStartEllipsis = false;\r\n showEndEllipsis = false;\r\n maxVisiblePages = 4;\r\n\r\n ngOnInit() {\r\n this.calculateTotalPages();\r\n this.setCurrentPage();\r\n this.generatePagesArray();\r\n this.changePage(this.page);\r\n }\r\n\r\n ngOnChanges() {\r\n this.calculateTotalPages();\r\n this.setCurrentPage();\r\n this.generatePagesArray();\r\n this.changePage(this.page);\r\n }\r\n\r\n private calculateTotalPages() {\r\n this.totalPages = Math.ceil(this.totalItems / this.pageSize);\r\n }\r\n\r\n private generatePagesArray() {\r\n this.pagesArray = [];\r\n\r\n if (this.totalPages <= 0) {\r\n this.resetEllipsis();\r\n return;\r\n }\r\n\r\n const currentPage = this.clampPage(this.page);\r\n\r\n if (!this.hasElipsisPages || this.isSimplePagination()) {\r\n this.buildSimplePages();\r\n return;\r\n }\r\n\r\n this.buildEllipsisPages(currentPage);\r\n }\r\n\r\n private buildSimplePages() {\r\n this.pagesArray = this.range(1, this.totalPages);\r\n this.resetEllipsis();\r\n }\r\n\r\n private buildEllipsisPages(currentPage: number) {\r\n const startPage = 1;\r\n const endPage = this.totalPages;\r\n const visibleMiddle = this.getVisibleMiddleCount();\r\n\r\n if (visibleMiddle === 0) {\r\n this.pagesArray = endPage === 1 ? [startPage] : [startPage, endPage];\r\n this.showStartEllipsis = currentPage > startPage + 1;\r\n this.showEndEllipsis = currentPage < endPage - 1;\r\n return;\r\n }\r\n\r\n const { middleStart, middleEnd } = this.getMiddleRange(\r\n currentPage,\r\n visibleMiddle,\r\n startPage,\r\n endPage\r\n );\r\n\r\n const pagesToAdd = [\r\n startPage,\r\n ...this.range(middleStart, middleEnd),\r\n endPage,\r\n ];\r\n\r\n this.pagesArray = this.uniquePages(pagesToAdd);\r\n this.showStartEllipsis = middleStart > startPage + 1;\r\n this.showEndEllipsis = middleEnd < endPage - 1;\r\n }\r\n\r\n private getVisibleMiddleCount(): number {\r\n return Math.max(this.maxVisiblePages - 1, 0);\r\n }\r\n\r\n private getMiddleRange(\r\n currentPage: number,\r\n visibleMiddle: number,\r\n startPage: number,\r\n endPage: number\r\n ): { middleStart: number; middleEnd: number } {\r\n let middleStart = currentPage - Math.floor(visibleMiddle / 2);\r\n let middleEnd = middleStart + visibleMiddle - 1;\r\n\r\n if (middleStart < startPage + 1) {\r\n middleStart = startPage + 1;\r\n middleEnd = middleStart + visibleMiddle - 1;\r\n }\r\n\r\n if (middleEnd > endPage - 1) {\r\n middleEnd = endPage - 1;\r\n middleStart = Math.max(startPage + 1, middleEnd - visibleMiddle + 1);\r\n }\r\n\r\n return { middleStart, middleEnd };\r\n }\r\n\r\n private uniquePages(pages: number[]): number[] {\r\n return pages.filter((value, index, array) => array.indexOf(value) === index);\r\n }\r\n\r\n private resetEllipsis() {\r\n this.showStartEllipsis = false;\r\n this.showEndEllipsis = false;\r\n }\r\n\r\n private clampPage(page: number): number {\r\n return Math.min(Math.max(page, 1), this.totalPages);\r\n }\r\n\r\n changePage(newPage: number) {\r\n if (newPage >= 1 && newPage <= this.totalPages) {\r\n this.page = newPage;\r\n const startIndex = (this.page - 1) * this.pageSize;\r\n const endIndex = startIndex + this.pageSize;\r\n const pagedData = this.fullData.slice(startIndex, endIndex);\r\n this.pagedData = pagedData;\r\n this.pageChange.emit({\r\n page: this.page,\r\n pagedData: this.pagedData,\r\n });\r\n this.generatePagesArray();\r\n }\r\n }\r\n\r\n setCurrentPage() {\r\n this.page = Math.max(this.page, 1);\r\n }\r\n\r\n private isSimplePagination(): boolean {\r\n return (\r\n !!this.maxVisiblePages &&\r\n (this.totalPages <= this.maxVisiblePages || this.maxVisiblePages <= 2)\r\n );\r\n }\r\n\r\n private range(start: number, end: number): number[] {\r\n const result = [];\r\n for (let i = start; i <= end; i++) result.push(i);\r\n return result;\r\n }\r\n}\r\n","@if (totalItems > pageSize) {\r\n <nav\r\n class=\"frg-pagination-small\"\r\n aria-label=\"Paginazione nome lista\"\r\n [ngClass]=\"{\r\n 'frg-pagination-small__primary': styleType === 'primary',\r\n 'frg-pagination-small__secondary': styleType === 'secondary',\r\n 'frg-pagination-small__tertiary': styleType === 'tertiary',\r\n 'frg-pagination-small__dark': styleType === 'dark',\r\n 'frg-pagination-small__light': styleType === 'light'\r\n }\"\r\n >\r\n <ul class=\"frg-pagination-small__list\">\r\n <li class=\"frg-pagination-small__paging frg-pagination-small__prev\">\r\n <a\r\n href=\"javascript:void(0);\"\r\n [class.disabled]=\"page === 1\"\r\n (click)=\"changePage(page - 1)\"\r\n >\r\n <span class=\"visually-hidden\">Pagina precedente</span>\r\n <span class=\"fas fa-angle-left\" aria-hidden=\"true\"></span>\r\n </a>\r\n </li>\r\n @for (pageNum of pagesArray; track pageNum; let i = $index) {\r\n @if (showStartEllipsis && i === 1) {\r\n <li class=\"frg-pagination-small__paging frg-pagination-small__ellipsis\">\r\n <span class=\"ellipsis\">...</span>\r\n </li>\r\n }\r\n <li\r\n class=\"frg-pagination-small__paging frg-pagination-small__page-number\"\r\n >\r\n <a\r\n href=\"javascript:void(0);\"\r\n [attr.aria-current]=\"page === pageNum ? 'page' : null\"\r\n (click)=\"changePage(pageNum)\"\r\n >\r\n <span class=\"visually-hidden\">Pagina</span>\r\n {{ pageNum }}\r\n </a>\r\n </li>\r\n @if (showEndEllipsis && i === pagesArray.length - 2) {\r\n <li class=\"frg-pagination-small__paging frg-pagination-small__ellipsis\">\r\n <span class=\"ellipsis\">...</span>\r\n </li>\r\n }\r\n }\r\n\r\n <li class=\"frg-pagination-small__paging frg-pagination-small__next\">\r\n <a\r\n href=\"javascript:void(0);\"\r\n [class.disabled]=\"page === totalPages\"\r\n (click)=\"changePage(page + 1)\"\r\n >\r\n <span class=\"visually-hidden\">Pagina successiva</span>\r\n <span class=\"fas fa-angle-right\" aria-hidden=\"true\"></span>\r\n </a>\r\n </li>\r\n </ul>\r\n </nav>\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n inject,\r\n Input,\r\n OnDestroy,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport { IConfigTooltip } from './tooltip.interface';\r\n\r\n@Directive({\r\n selector: '[frgTooltip]',\r\n standalone: true,\r\n})\r\nexport class FragmentsTooltipDirective implements OnDestroy {\r\n private readonly elemRef: ElementRef = inject(ElementRef);\r\n private readonly renderer: Renderer2 = inject(Renderer2);\r\n @Input() tooltipConfig: IConfigTooltip = {} as IConfigTooltip;\r\n tooltip: HTMLElement | undefined;\r\n\r\n @HostListener('mouseenter') onMouseEnter() {\r\n if (!this.tooltip && this.tooltipConfig.text) this.show();\r\n }\r\n\r\n @HostListener('mouseleave') onMouseLeave() {\r\n this.ngOnDestroy();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.tooltip) {\r\n this.hide();\r\n }\r\n }\r\n\r\n private show() {\r\n if (this.tooltipConfig.apply === false)\r\n return;\r\n\r\n this.initTooltip();\r\n\r\n if (this.tooltipConfig?.text) {\r\n this.tooltip = this.renderer.createElement('div');\r\n this.renderer.addClass(this.tooltip, 'frg-tooltip');\r\n this.renderer.setStyle(this.tooltip, 'text-align', 'left');\r\n this.renderer.setAttribute(this.tooltip, 'role', 'tooltip');\r\n this.renderer.setAttribute(this.tooltip, 'tabindex', '-1');\r\n this.renderer.setStyle(this.tooltip, 'position', 'absolute');\r\n this.renderer.setStyle(this.tooltip, 'will-change', 'transform');\r\n this.renderer.setStyle(this.tooltip, 'left', '0');\r\n this.renderer.setStyle(this.tooltip, 'top', '0');\r\n this.renderer.setStyle(this.tooltip, 'z-index', '9999');\r\n\r\n if (this.tooltipConfig.textContent) {\r\n const innerTooltip: HTMLElement = this.renderer.createElement('div');\r\n this.renderer.addClass(innerTooltip, 'frg-tooltip-inner');\r\n\r\n const textParagraph: HTMLElement = this.renderer.createElement('p');\r\n const contentParagraph: HTMLElement = this.renderer.createElement('p');\r\n const strongTextParagraph: HTMLElement =\r\n this.renderer.createElement('strong');\r\n\r\n this.renderer.appendChild(\r\n strongTextParagraph,\r\n this.renderer.createText(this.tooltipConfig.text)\r\n );\r\n\r\n this.renderer.appendChild(textParagraph, strongTextParagraph);\r\n\r\n this.renderer.appendChild(\r\n contentParagraph,\r\n this.renderer.createText(this.tooltipConfig.textContent)\r\n );\r\n\r\n this.renderer.appendChild(innerTooltip, textParagraph);\r\n\r\n this.renderer.appendChild(innerTooltip, contentParagraph);\r\n\r\n this.renderer.appendChild(this.tooltip, innerTooltip);\r\n } else {\r\n const innerTooltip: HTMLElement = this.renderer.createElement('strong');\r\n\r\n this.renderer.appendChild(\r\n innerTooltip,\r\n this.renderer.createText(this.tooltipConfig.text)\r\n );\r\n\r\n this.renderer.appendChild(this.tooltip, innerTooltip);\r\n }\r\n\r\n if (!this.tooltipConfig.hideIndicator) {\r\n const indicator: HTMLElement = this.renderer.createElement('span');\r\n this.renderer.addClass(indicator, 'frg-tooltip-indicator');\r\n this.renderer.appendChild(this.tooltip, indicator);\r\n }\r\n\r\n this.renderer.appendChild(document.body, this.tooltip);\r\n this.setPosition();\r\n }\r\n }\r\n\r\n private hide() {\r\n this.renderer.removeChild(this.elemRef, this.tooltip);\r\n this.tooltip = undefined;\r\n }\r\n\r\n private initTooltip() {\r\n this.tooltipConfig.text = this.tooltipConfig.text\r\n ? this.tooltipConfig.text\r\n : 'No tooltip text';\r\n this.tooltipConfig.position = this.tooltipConfig.position\r\n ? this.tooltipConfig.position\r\n : 'top';\r\n this.tooltipConfig.gap = this.tooltipConfig.gap ?? 0;\r\n this.tooltipConfig.hideIndicator = this.tooltipConfig.hideIndicator ?? false;\r\n this.tooltipConfig.apply = this.tooltipConfig.apply ?? true;\r\n }\r\n\r\n private setPosition() {\r\n const element = this.elemRef.nativeElement;\r\n const rect = element.getBoundingClientRect();\r\n const bodyRect = document.body.getBoundingClientRect();\r\n const viewportWidth =\r\n document.documentElement?.clientWidth || window.innerWidth;\r\n const viewportPadding = 8;\r\n\r\n const xOffset = rect.left - bodyRect.left;\r\n const yOffset = rect.top - bodyRect.top;\r\n const widthOffset = rect.width;\r\n const heightOffset = rect.height;\r\n\r\n const t_widthOffset: number = this.tooltip?.offsetWidth ?? 0;\r\n const t_heightOffset: number = this.tooltip?.offsetHeight ?? 0;\r\n\r\n const clampX = (x: number) =>\r\n Math.min(\r\n Math.max(x, viewportPadding),\r\n viewportWidth - t_widthOffset - viewportPadding\r\n );\r\n\r\n const position = (this.tooltipConfig.position || 'top')\r\n .toLowerCase()\r\n .trim()\r\n .replaceAll(' ', '-');\r\n\r\n this.renderer.setAttribute(this.tooltip, 'data-position', position);\r\n\r\n switch (position) {\r\n case 'top':\r\n this.renderer.setStyle(\r\n this.tooltip,\r\n 'transform',\r\n `translate(${clampX(xOffset + widthOffset / 2 - t_widthOffset / 2)}px, ${\r\n yOffset - t_heightOffset - (this.tooltipConfig?.gap ?? 0)\r\n }px)`\r\n );\r\n\r\n break;\r\n\r\n case 'top-left':\r\n this.renderer.setStyle(\r\n this.tooltip,\r\n 'transform',\r\n `translate(${clampX(xOffset + (widthOffset - t_widthOffset))}px, ${\r\n yOffset - t_heightOffset - (this.tooltipConfig?.gap ?? 0)\r\n }px)`\r\n );\r\n break;\r\n\r\n case 'top-right':\r\n this.renderer.setStyle(\r\n this.tooltip,\r\n 'transform',\r\n `translate(${clampX(xOffset)}px, ${\r\n yOffset - t_heightOffset - (this.tooltipConfig?.gap ?? 0)\r\n }px)`\r\n );\r\n break;\r\n\r\n case 'left':\r\n this.renderer.setStyle(\r\n this.tooltip,\r\n 'transform',\r\n `translate(${clampX(\r\n xOffset - t_widthOffset - (this.tooltipConfig?.gap ?? 0)\r\n )}px, ${yOffset + heightOffset / 2 - t_heightOffset / 2}px)`\r\n );\r\n break;\r\n\r\n case 'right':\r\n this.renderer.setStyle(\r\n this.tooltip,\r\n 'transform',\r\n `translate(${clampX(\r\n xOffset + widthOffset + (this.tooltipConfig?.gap ?? 0)\r\n )}px, ${yOffset + heightOffset / 2 - t_heightOffset / 2}px)`\r\n );\r\n break;\r\n\r\n case 'bottom':\r\n this.renderer.setStyle(\r\n this.tooltip,\r\n 'transform',\r\n `translate(${clampX(xOffset + widthOffset / 2 - t_widthOffset / 2)}px, ${\r\n yOffset + heightOffset + (this.tooltipConfig?.gap ?? 0)\r\n }px)`\r\n );\r\n break;\r\n\r\n case 'bottom-left':\r\n this.renderer.setStyle(\r\n this.tooltip,\r\n 'transform',\r\n `translate(${clampX(xOffset + (widthOffset - t_widthOffset))}px, ${\r\n yOffset + heightOffset + (this.tooltipConfig?.gap ?? 0)\r\n }px)`\r\n );\r\n break;\r\n\r\n case 'bottom-right':\r\n this.renderer.setStyle(\r\n this.tooltip,\r\n 'transform',\r\n `translate(${clampX(xOffset)}px, ${\r\n yOffset + heightOffset + (this.tooltipConfig?.gap ?? 0)\r\n }px)`\r\n );\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n}\r\n","import { Pipe, inject, type PipeTransform } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'safeHtml',\r\n standalone: true,\r\n})\r\nexport class SafeHtmlPipe implements PipeTransform {\r\n private readonly sanitizer = inject(DomSanitizer);\r\n\r\n transform(value: string): SafeHtml {\r\n return this.sanitizer.bypassSecurityTrustHtml(value);\r\n }\r\n}\r\n","import { ActivatedRoute } from '@angular/router';\r\n\r\ntype direction = 'asc' | 'desc';\r\n\r\nexport function generateId(value?: string): string {\r\n const valueRandom: number = Math.floor(Math.random() * 10000000) + 1;\r\n return value ? value + '-' + valueRandom : String(valueRandom);\r\n}\r\n\r\nexport function generateNumberId(): number {\r\n return Math.floor(Math.random() * 10000000) + 1;\r\n}\r\n\r\nexport function isObjectEmpty(obj: any): boolean {\r\n return Object.keys(obj).length <= 0;\r\n}\r\n\r\nexport function paginationList<T>(\r\n lista: Array<T>,\r\n pageSize: number,\r\n page: number\r\n) {\r\n lista = lista.slice(+pageSize * (+page - 1), +pageSize * +page);\r\n return lista;\r\n}\r\n\r\nexport function orderList<T>(\r\n lista: Array<T>,\r\n orderFields: any,\r\n direction: direction\r\n) {\r\n orderFields = Array.isArray(orderFields)\r\n ? orderFields.join('.')\r\n : orderFields;\r\n lista.sort((a: any, b: any) => {\r\n if (direction === 'asc') {\r\n return a[orderFields] > b[orderFields] ? 1 : -1;\r\n } else {\r\n return a[orderFields] < b[orderFields] ? 1 : -1;\r\n }\r\n });\r\n return lista;\r\n}\r\n\r\nexport function getActivatedRouteChild(\r\n activatedRoute: ActivatedRoute\r\n): ActivatedRoute {\r\n if (activatedRoute.firstChild) {\r\n return getActivatedRouteChild(activatedRoute.firstChild);\r\n } else {\r\n return activatedRoute;\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { TBaseStyle } from '../../types/base.types';\r\n@Component({\r\n selector: 'frg-title-bar',\r\n imports: [CommonModule],\r\n templateUrl: './title-bar.component.html',\r\n styleUrls: ['./title-bar.component.scss']\r\n})\r\nexport class TitleBarComponent {\r\n @Input() title = '';\r\n @Input() styleType: TBaseStyle = 'primary';\r\n}\r\n","@if (title) {\r\n <div\r\n class=\"frg-title-bar\"\r\n [ngClass]=\"{\r\n 'frg-title-bar__primary': styleType === 'primary',\r\n 'frg-title-bar__secondary': styleType === 'secondary',\r\n 'frg-title-bar__tertiary': styleType === 'tertiary',\r\n 'frg-title-bar__dark': styleType === 'dark',\r\n 'frg-title-bar__light': styleType === 'light'\r\n }\"\r\n >\r\n <div\r\n class=\"frg-title-bar-title d-flex justify-content-between\"\r\n aria-level=\"3\"\r\n >\r\n <div class=\"frg-title-bar-title__text\">\r\n {{ title }}\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n","export enum EnumDirectionSortTable {\r\n asc,\r\n desc,\r\n}\r\n","import { EnumDirectionSortTable } from './table.enum';\r\n\r\nexport function sortTable<T>(\r\n fullData: T[],\r\n direction: EnumDirectionSortTable,\r\n fieldOrder: string | string[]\r\n): T[] {\r\n const orderFields = Array.isArray(fieldOrder)\r\n ? fieldOrder.join('.')\r\n : fieldOrder;\r\n\r\n return fullData.sort((a: T, b: T) => {\r\n const aValue = getField(a, orderFields);\r\n const bValue = getField(b, orderFields);\r\n return direction === EnumDirectionSortTable.asc\r\n ? compareValues(aValue, bValue)\r\n : compareValues(bValue, aValue);\r\n });\r\n}\r\n\r\nfunction getField(obj: unknown, path: string): unknown {\r\n return path\r\n .split('.')\r\n .reduce((value, field) => (value as Record<string, unknown>)?.[field], obj);\r\n}\r\n\r\nfunction compareValues(a: unknown, b: unknown): number {\r\n if (a === b) return 0;\r\n if (a === undefined || a === null) return -1;\r\n if (b === undefined || b === null) return 1;\r\n\r\n if (typeof a === 'number' && typeof b === 'number') return a - b;\r\n if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();\r\n if (typeof a === 'string' && typeof b === 'string') {\r\n const dateA = Date.parse(a);\r\n const dateB = Date.parse(b);\r\n if (!isNaN(dateA) && !isNaN(dateB)) return dateA - dateB;\r\n\r\n const numA = parseFloat(a);\r\n const numB = parseFloat(b);\r\n if (!isNaN(numA) && !isNaN(numB)) return numA - numB;\r\n\r\n return a.localeCompare(b);\r\n }\r\n\r\n return -1;\r\n}\r\n","import { inject, Injector, Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'fieldArrayPosition',\r\n standalone: true,\r\n})\r\nexport class FieldArrayPositionPipe implements PipeTransform {\r\n transform(value: any, args: any[] | any): any {\r\n const ret = getNestedPropertyValueByPosition(value, args);\r\n return ret;\r\n }\r\n}\r\n\r\nfunction getNestedPropertyValueByPosition(array: any, positionArray: any): any {\r\n if (typeof positionArray === 'object') {\r\n const appo = positionArray[0];\r\n const rest = positionArray.slice(1);\r\n if (!array) return undefined;\r\n if (rest.length == 0 && Object.prototype.hasOwnProperty.call(array, appo)) {\r\n return array[appo];\r\n }\r\n if (rest.length == 0 && array instanceof Array) {\r\n return array.map((s) => {\r\n return s[appo];\r\n });\r\n }\r\n return getNestedPropertyValueByPosition(array[appo], rest);\r\n } else {\r\n return array[positionArray];\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'typeOfArray',\r\n standalone: true,\r\n})\r\nexport class TypeOfArrayPipe implements PipeTransform {\r\n transform(value: any): any {\r\n return Array.isArray(value);\r\n }\r\n}\r\n\r\n@Pipe({\r\n name: 'dynamicPipe',\r\n standalone: true,\r\n})\r\nexport class DynamicPipe implements PipeTransform {\r\n private readonly injector = inject(Injector);\r\n\r\n transform(value: any, pipeToken: any, pipeArgs?: any[]): any {\r\n if (!pipeToken) {\r\n return value;\r\n } else {\r\n const pipe = this.injector.get<PipeTransform>(pipeToken); // ✅ cast type\r\n if (pipeArgs) {\r\n return pipe.transform(value, ...pipeArgs);\r\n } else {\r\n return pipe.transform(value);\r\n }\r\n }\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output,\r\n ViewChild,\r\n inject,\r\n} from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { RouterLink } from '@angular/router';\r\nimport { FragmentsTooltipDirective } from '../../directives/tooltip/tooltip.directive';\r\nimport { SafeHtmlPipe } from '../../pipes/safe-html.pipe';\r\nimport { TBaseSize, TBaseStyle } from '../../types/base.types';\r\nimport { generateId } from '../../utils/common.utils';\r\nimport { IPaginationOutput } from '../pagination/pagination.interface';\r\nimport { SmallPaginationComponent } from '../pagination/small-pagination/small-pagination.component';\r\nimport { TitleBarComponent } from '../title-bar/title-bar.component';\r\nimport { ButtonComponent } from '../button/button.component';\r\nimport { EnumDirectionSortTable } from './table.enum';\r\nimport { sortTable } from './table.function';\r\nimport {\r\n IConfigTable,\r\n ITBodyCell,\r\n ITPagination,\r\n} from './table.interface';\r\nimport {\r\n DynamicPipe,\r\n FieldArrayPositionPipe,\r\n TypeOfArrayPipe,\r\n} from './table.pipe';\r\n\r\n@Component({\r\n selector: 'frg-table',\r\n imports: [\r\n CommonModule,\r\n RouterLink,\r\n TitleBarComponent,\r\n SmallPaginationComponent,\r\n FieldArrayPositionPipe,\r\n TypeOfArrayPipe,\r\n SafeHtmlPipe,\r\n DynamicPipe,\r\n FragmentsTooltipDirective,\r\n ButtonComponent,\r\n ReactiveFormsModule,\r\n ],\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.scss']\r\n})\r\nexport class TableComponent<T> implements OnInit {\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n\r\n /**\r\n * Configuration of the table\r\n *\r\n * @see IConfigTable\r\n */\r\n @Input() configTable: IConfigTable<T> = {} as IConfigTable<T>;\r\n /**\r\n * Style type of the table\r\n */\r\n @Input() styleType: TBaseStyle = 'tertiary';\r\n /**\r\n * Size of table rows\r\n */\r\n @Input() rowSize: TBaseSize = 'medium';\r\n\r\n /**\r\n * Event emitted to reload the table data\r\n *\r\n * @see ITPagination\r\n */\r\n @Output() reloadTableEvent = new EventEmitter<{\r\n pagination: ITPagination<T>;\r\n reload?: boolean;\r\n }>();\r\n /**\r\n * Reference to the table header element\r\n */\r\n @ViewChild('tableHead', { read: ElementRef })\r\n tableHead!: ElementRef<HTMLElement>;\r\n\r\n /**\r\n * Enum for sorting direction\r\n * @see EnumDirectionSortTable\r\n */\r\n EnumDirectionSortTable: typeof EnumDirectionSortTable =\r\n EnumDirectionSortTable;\r\n\r\n /**\r\n * ID of the first table row\r\n */\r\n idFirstTr = '';\r\n /**\r\n * Count of sorting actions performed\r\n */\r\n countSorting = 0;\r\n /**\r\n * Cached full data of the table\r\n */\r\n fullDataCached: T[] = [];\r\n\r\n ngOnInit(): void {\r\n this.idFirstTr = generateId('firstTr');\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Update the current page of the table\r\n * @param event Pagination output event\r\n * @see IPaginationOutput\r\n */\r\n updateCurrentPage(event: IPaginationOutput<T>): void {\r\n this.configTable.tPagination.page = event.page;\r\n this.configTable.tBody.data = event.pagedData;\r\n\r\n if (this.configTable.tPagination.hasScrollTop && this.tableHead) {\r\n const element = this.tableHead.nativeElement;\r\n const elementRect = element.getBoundingClientRect();\r\n const offsetTop = elementRect.top + window.scrollY;\r\n const elementHeight = elementRect.height;\r\n const centerScrollPosition =\r\n offsetTop - window.innerHeight / 2 + elementHeight / 2;\r\n\r\n window.scrollTo({ top: centerScrollPosition, behavior: 'smooth' });\r\n }\r\n\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Order the table by the specified field\r\n * @param fieldOrder Field or fields to order by\r\n */\r\n orderBy(fieldOrder: string | string[]): void {\r\n if (this.configTable.tPagination.order !== fieldOrder) {\r\n this.countSorting = 0;\r\n this.configTable.tPagination.direction = EnumDirectionSortTable.asc;\r\n }\r\n\r\n this.countSorting = this.countSorting + 1;\r\n\r\n if (this.countSorting < 3) {\r\n this.configTable.tPagination.order = fieldOrder;\r\n this.configTable.tPagination.direction =\r\n this.configTable.tPagination.direction === EnumDirectionSortTable.asc\r\n ? EnumDirectionSortTable.desc\r\n : EnumDirectionSortTable.asc;\r\n } else if (\r\n this.configTable.tPagination.order ===\r\n this.configTable.tSort?.defaultFieldOrder\r\n ) {\r\n this.countSorting = 0;\r\n this.configTable.tPagination.order = fieldOrder;\r\n this.configTable.tPagination.direction =\r\n this.configTable.tPagination.direction === EnumDirectionSortTable.asc\r\n ? EnumDirectionSortTable.desc\r\n : EnumDirectionSortTable.asc;\r\n } else {\r\n this.countSorting = 0;\r\n this.configTable.tPagination.order =\r\n this.configTable.tSort?.defaultFieldOrder;\r\n this.configTable.tPagination.direction =\r\n this.configTable.tSort?.defaultDirection;\r\n }\r\n\r\n const { fullData, direction } = this.configTable.tPagination;\r\n const sortedList = sortTable<T>(\r\n fullData ?? [],\r\n direction ?? EnumDirectionSortTable.asc,\r\n this.configTable.tPagination.order ?? fieldOrder\r\n );\r\n this.configTable.tPagination.totalItems = sortedList.length;\r\n this.configTable.tPagination.fullData = [...sortedList];\r\n\r\n this.cdr.detectChanges();\r\n }\r\n\r\n /**\r\n * Handle the click event on a table row\r\n * @param _event Click event\r\n * @param item Data item associated with the clicked row\r\n */\r\n handleRowClick(_event: Event, item: T): void {\r\n if (\r\n this.configTable.tBody.rowClick &&\r\n this.configTable.tBody.rowClick.behaviourAction &&\r\n this.configTable.tBody.rowClick.behaviourAction.clickEvent\r\n )\r\n this.configTable.tBody.rowClick?.behaviourAction.clickEvent(item);\r\n }\r\n\r\n /**\r\n * Handle the click event on a cell icon\r\n * @param event Mouse event\r\n * @param cell Table body cell configuration\r\n * @param item Data item associated with the cell\r\n * @see ITBodyCell\r\n */\r\n handleIconClick(cell: ITBodyCell, item: T): void {\r\n if (cell?.icon?.action.behaviourAction) {\r\n if (\r\n cell.icon.action.behaviourAction.clickEvent &&\r\n cell.icon.action.disabled &&\r\n !cell.icon.action.disabled(item)\r\n ) {\r\n cell.icon.action.behaviourAction.clickEvent(item);\r\n }\r\n }\r\n }\r\n}\r\n","@if (configTable.tTitleBar?.title) {\r\n <frg-title-bar\r\n [title]=\"configTable.tTitleBar?.title ?? ''\"\r\n [styleType]=\"styleType\"\r\n ></frg-title-bar>\r\n}\r\n@if (configTable.tBody.data && configTable.tBody.data.length > 0) {\r\n <div class=\"frg-table-responsive\">\r\n <table\r\n class=\"frg-table\"\r\n id=\"table1\"\r\n [ngClass]=\"{\r\n 'frg-table__primary': styleType === 'primary',\r\n 'frg-table__secondary': styleType === 'secondary',\r\n 'frg-table__tertiary': styleType === 'tertiary',\r\n 'frg-table__dark': styleType === 'dark',\r\n 'frg-table__light': styleType === 'light',\r\n 'frg-table--row-small': rowSize === 'small',\r\n 'frg-table--row-medium': rowSize === 'medium',\r\n 'frg-table--row-large': rowSize === 'large'\r\n }\"\r\n >\r\n @if (configTable.tCaption && configTable.tCaption.srOnly) {\r\n <caption class=\"visually-hidden\">\r\n {{ configTable.tCaption.srOnly }}\r\n </caption>\r\n }\r\n @if (configTable.tHead.columns.length > 0) {\r\n <thead #tableHead>\r\n <tr>\r\n <!--Sort-->\r\n @if (configTable.tHead) {\r\n @for (hColumn of configTable.tHead.columns; track $index) {\r\n @if (hColumn.fieldOrder) {\r\n <th\r\n scope=\"col\"\r\n [tabindex]=\"hColumn.fieldOrder ? 0 : null\"\r\n [attr.aria-sort]=\"\r\n !(hColumn.fieldOrder === configTable.tPagination.order)\r\n ? null\r\n : configTable.tPagination.direction ===\r\n EnumDirectionSortTable.asc\r\n ? 'ascending'\r\n : 'descending'\r\n \"\r\n [ngClass]=\"{\r\n 'frg-sorting': hColumn.fieldOrder,\r\n 'frg-sorting-asc':\r\n configTable.tPagination.direction ===\r\n EnumDirectionSortTable.asc &&\r\n hColumn.fieldOrder === configTable.tPagination.order,\r\n 'frg-sorting-desc':\r\n configTable.tPagination.direction ===\r\n EnumDirectionSortTable.desc &&\r\n hColumn.fieldOrder === configTable.tPagination.order\r\n }\"\r\n (click)=\"\r\n hColumn.fieldOrder ? orderBy(hColumn.fieldOrder) : null\r\n \"\r\n (keydown.enter)=\"\r\n hColumn.fieldOrder ? orderBy(hColumn.fieldOrder) : null\r\n \"\r\n >\r\n <span>\r\n {{ hColumn.fieldLabel }}\r\n </span>\r\n </th>\r\n } @else {\r\n <th scope=\"col\">\r\n <span>\r\n {{ hColumn.fieldLabel }}\r\n </span>\r\n </th>\r\n }\r\n }\r\n }\r\n <!--End Sort-->\r\n @if (configTable.tHead.action) {\r\n <th\r\n scope=\"col\"\r\n [ngClass]=\"configTable.tHead.action.customClass ?? ''\"\r\n >\r\n {{ configTable.tHead.action.label }}\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n }\r\n <tbody>\r\n @for (item of configTable.tBody.data; let i = $index; track $index) {\r\n <tr\r\n [attr.id]=\"i === 0 ? idFirstTr : null\"\r\n [ngClass]=\"\r\n configTable.tBody.rowClick?.behaviourAction?.clickEvent\r\n ? 'cursor-pointer'\r\n : ''\r\n \"\r\n [routerLink]=\"\r\n configTable.tBody.rowClick?.disabled &&\r\n configTable.tBody.rowClick?.disabled(item)\r\n ? null\r\n : configTable.tBody.rowClick?.behaviourAction?.link\r\n ? [\r\n configTable.tBody.rowClick?.behaviourAction?.link\r\n ? configTable.tBody.rowClick?.behaviourAction?.link\r\n : './',\r\n configTable.tBody.rowClick?.behaviourAction\r\n ?.customParamsLink ||\r\n (item | fieldArrayPosition: configTable.tBody.uniqueField)\r\n ]\r\n : null\r\n \"\r\n (click)=\"handleRowClick($event, item)\"\r\n (keyup.enter)=\"handleRowClick($event, item)\"\r\n (keydown)=\"handleRowClick($event, item)\"\r\n >\r\n @for (column of configTable.tBody.columns; let i = $index; track $index) {\r\n <td>\r\n <div [ngClass]=\"column.customClass\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"\r\n (column.cells | typeOfArray) ? cellForTpl : cellTpl\r\n \"\r\n [ngTemplateOutletContext]=\"{\r\n cells: column.cells,\r\n item: item\r\n }\"\r\n ></ng-container>\r\n </div>\r\n </td>\r\n }\r\n @if (configTable.tBody.action ?? false) {\r\n <td\r\n class=\"table-action\"\r\n [ngClass]=\"configTable.tBody.action?.customClasses ?? ''\"\r\n >\r\n @for (act of configTable.tBody.action?.buttons ?? []; track $index) {\r\n @if (act.visible && act.visible(item) ? true : null) {\r\n <frg-button\r\n [ariaLabel]=\"act.ariaLabel || 'Azione'\"\r\n [text]=\"''\"\r\n [iconClass]=\"act.iconClass ? act.iconClass(item) : ''\"\r\n [styleType]=\"'icon'\"\r\n [size]=\"'small'\"\r\n frgTooltip\r\n [tooltipConfig]=\"{\r\n apply:\r\n act.tooltip &&\r\n act.tooltip.apply &&\r\n act.visible &&\r\n act.visible(item)\r\n ? act.tooltip.apply\r\n : true,\r\n text:\r\n act.tooltip && act.tooltip.text\r\n ? act.tooltip.text(item)\r\n : '',\r\n textContent:\r\n act.tooltip && act.tooltip.textContent\r\n ? act.tooltip.textContent(item)\r\n : '',\r\n position:\r\n act.tooltip && act.tooltip.position\r\n ? act.tooltip.position\r\n : 'top',\r\n gap: act.tooltip && act.tooltip.gap ? act.tooltip.gap : 0\r\n }\"\r\n [disabled]=\"act.disabled ? act.disabled(item) : null\"\r\n [buttonRouterLink]=\"\r\n act.disabled && act.disabled(item)\r\n ? null\r\n : act.behaviourAction.link\r\n ? [\r\n act.behaviourAction.link\r\n ? act.behaviourAction.link\r\n : './',\r\n act.behaviourAction.customParamsLink ||\r\n (item\r\n | fieldArrayPosition\r\n : configTable.tBody.uniqueField)\r\n ]\r\n : null\r\n \"\r\n (clickEvent)=\"\r\n act.behaviourAction.clickEvent\r\n ? act.behaviourAction.clickEvent(item)\r\n : null\r\n \"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (keyup.enter)=\"$event.stopPropagation()\"\r\n >\r\n </frg-button>\r\n }\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n @if (configTable.tPagination) {\r\n <frg-small-pagination\r\n [hasElipsisPages]=\"configTable.tPagination.hasElipsisPages ?? false\"\r\n [pageSize]=\"configTable.tPagination.pageSize ?? 10\"\r\n [page]=\"configTable.tPagination.page ?? 0\"\r\n [totalItems]=\"configTable.tPagination.fullData?.length ?? 0\"\r\n [fullData]=\"configTable.tPagination.fullData ?? []\"\r\n [styleType]=\"styleType\"\r\n (pageChange)=\"updateCurrentPage($event)\"\r\n ></frg-small-pagination>\r\n }\r\n} @else {\r\n <div class=\"d-flex justify-content-center my-4\">\r\n <div class=\"text-center\">No Elements</div>\r\n </div>\r\n}\r\n\r\n<ng-template #cellForTpl let-cells=\"cells\" let-item=\"item\">\r\n @for (cell of $any(cells); track $index) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"cellTpl\"\r\n [ngTemplateOutletContext]=\"{\r\n cell: cell,\r\n item: item\r\n }\"\r\n ></ng-container>\r\n <br />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #cellTpl let-cell=\"cells\" let-item=\"item\">\r\n @if (!cell.fieldPipe) {\r\n @if (\r\n cell.icon &&\r\n cell.icon.position !== 'right' &&\r\n cell.icon.action.visible &&\r\n cell.icon.action.visible(item)\r\n ) {\r\n <frg-button\r\n [ariaLabel]=\"cell.icon.ariaLabel || 'Azione'\"\r\n [text]=\"''\"\r\n [iconClass]=\"cell.icon.iconClass ? cell.icon.iconClass : ''\"\r\n [styleType]=\"'icon'\"\r\n [size]=\"'small'\"\r\n frgTooltip\r\n [tooltipConfig]=\"{\r\n apply:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.apply\r\n ? cell.icon.action.tooltip.apply\r\n : true,\r\n text:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.text\r\n ? cell.icon.action.tooltip.text(item)\r\n : '',\r\n textContent:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.textContent\r\n ? cell.icon.action.tooltip.textContent(item)\r\n : '',\r\n position:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.position\r\n ? cell.icon.action.tooltip.position\r\n : 'top',\r\n gap:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.gap\r\n ? cell.icon.action.tooltip.gap\r\n : 0\r\n }\"\r\n [disabled]=\"\r\n cell.icon.action.disabled\r\n ? cell.icon.action.disabled(item)\r\n : null\r\n \"\r\n (clickEvent)=\"handleIconClick(cell, item)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (keyup.enter)=\"$event.stopPropagation()\"\r\n >\r\n </frg-button>\r\n }\r\n <span [ngClass]=\"cell.customClass ? cell.customClass(item) : ''\">\r\n {{ item | fieldArrayPosition: cell.fieldArrayPosition }}\r\n </span>\r\n @if (\r\n cell.icon &&\r\n cell.icon.position === 'right' &&\r\n cell.icon.action.visible &&\r\n cell.icon.action.visible(item)\r\n ) {\r\n <frg-button\r\n [ariaLabel]=\"cell.icon.ariaLabel || 'Azione'\"\r\n [text]=\"''\"\r\n [iconClass]=\"cell.icon.iconClass ? cell.icon.iconClass : ''\"\r\n [styleType]=\"'icon'\"\r\n [size]=\"'small'\"\r\n frgTooltip\r\n [tooltipConfig]=\"{\r\n apply:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.apply\r\n ? cell.icon.action.tooltip.apply\r\n : true,\r\n text:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.text\r\n ? cell.icon.action.tooltip.text(item)\r\n : '',\r\n textContent:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.textContent\r\n ? cell.icon.action.tooltip.textContent(item)\r\n : '',\r\n position:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.position\r\n ? cell.icon.action.tooltip.position\r\n : 'top',\r\n gap:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.gap\r\n ? cell.icon.action.tooltip.gap\r\n : 0\r\n }\"\r\n [disabled]=\"\r\n cell.icon.action.disabled\r\n ? cell.icon.action.disabled(item)\r\n : null\r\n \"\r\n (clickEvent)=\"handleIconClick(cell, item)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (keyup.enter)=\"$event.stopPropagation()\"\r\n >\r\n </frg-button>\r\n }\r\n } @else {\r\n @if (\r\n cell.icon &&\r\n cell.icon.position !== 'right' &&\r\n cell.icon.action.visible &&\r\n cell.icon.action.visible(item)\r\n ) {\r\n <frg-button\r\n [ariaLabel]=\"cell.icon.ariaLabel || 'Azione'\"\r\n [text]=\"''\"\r\n [iconClass]=\"cell.icon.iconClass ? cell.icon.iconClass : ''\"\r\n [styleType]=\"'icon'\"\r\n [size]=\"'small'\"\r\n frgTooltip\r\n [tooltipConfig]=\"{\r\n apply:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.apply\r\n ? cell.icon.action.tooltip.apply\r\n : true,\r\n text:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.text\r\n ? cell.icon.action.tooltip.text(item)\r\n : '',\r\n textContent:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.textContent\r\n ? cell.icon.action.tooltip.textContent(item)\r\n : '',\r\n position:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.position\r\n ? cell.icon.action.tooltip.position\r\n : 'top',\r\n gap:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.gap\r\n ? cell.icon.action.tooltip.gap\r\n : 0\r\n }\"\r\n [disabled]=\"\r\n cell.icon.action.disabled\r\n ? cell.icon.action.disabled(item)\r\n : null\r\n \"\r\n (clickEvent)=\"handleIconClick(cell, item)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (keyup.enter)=\"$event.stopPropagation()\"\r\n >\r\n </frg-button>\r\n }\r\n <span\r\n [innerHtml]=\"\r\n item\r\n | fieldArrayPosition: cell.fieldArrayPosition\r\n | dynamicPipe: cell.fieldPipe.type : cell.fieldPipe.args\r\n | safeHtml\r\n \"\r\n [ngClass]=\"cell.customClass ? cell.customClass(item) : ''\"\r\n ></span>\r\n @if (\r\n cell.icon &&\r\n cell.icon.position === 'right' &&\r\n cell.icon.action.visible &&\r\n cell.icon.action.visible(item)\r\n ) {\r\n <frg-button\r\n [ariaLabel]=\"cell.icon.ariaLabel || 'Azione'\"\r\n [text]=\"''\"\r\n [iconClass]=\"cell.icon.iconClass ? cell.icon.iconClass : ''\"\r\n [styleType]=\"'icon'\"\r\n [size]=\"'small'\"\r\n frgTooltip\r\n [tooltipConfig]=\"{\r\n apply:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.apply\r\n ? cell.icon.action.tooltip.apply\r\n : true,\r\n text:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.text\r\n ? cell.icon.action.tooltip.text(item)\r\n : '',\r\n textContent:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.textContent\r\n ? cell.icon.action.tooltip.textContent(item)\r\n : '',\r\n position:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.position\r\n ? cell.icon.action.tooltip.position\r\n : 'top',\r\n gap:\r\n cell.icon.action.tooltip && cell.icon.action.tooltip.gap\r\n ? cell.icon.action.tooltip.gap\r\n : 0\r\n }\"\r\n [disabled]=\"\r\n cell.icon.action.disabled\r\n ? cell.icon.action.disabled(item)\r\n : null\r\n \"\r\n (clickEvent)=\"handleIconClick(cell, item)\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (keyup.enter)=\"$event.stopPropagation()\"\r\n >\r\n </frg-button>\r\n }\r\n }\r\n</ng-template>\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n QueryList,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport { TabChangeEvent, TabItem, TabItemContext, TTabSize, TTabStyle } from './tabs.type';\r\n\r\n/**\r\n * TabsComponent\r\n *\r\n * Accessible tabset that supports keyboard navigation, style variants,\r\n * projected templates, and two-way active state management.\r\n */\r\n@Component({\r\n selector: 'frg-tabs',\r\n standalone: true,\r\n imports: [NgTemplateOutlet],\r\n templateUrl: './tabs.component.html',\r\n styleUrl: './tabs.component.scss'\r\n})\r\nexport class TabsComponent implements OnChanges {\r\n /**\r\n * Tab definitions rendered by the component.\r\n */\r\n @Input() items: TabItem[] = [];\r\n /**\r\n * Identifier of the currently active tab. Auto-resolved when null.\r\n */\r\n @Input() activeId: string | null = null;\r\n /**\r\n * Visual style applied to tabs when no per-item style is provided.\r\n */\r\n @Input() styleType: TTabStyle = 'default';\r\n /**\r\n * Size variant applied to tabs when no per-item size is provided.\r\n */\r\n @Input() size: TTabSize = 'medium';\r\n /**\r\n * Horizontal alignment of the tab list.\r\n */\r\n @Input() align: 'start' | 'center' | 'end' | 'stretch' = 'start';\r\n /**\r\n * Enables panel fade/slide animations.\r\n */\r\n @Input() animated: boolean = true;\r\n /**\r\n * When true, moves focus to the active panel after selection.\r\n */\r\n @Input() focusPanelOnSelect: boolean = false;\r\n\r\n /**\r\n * Emits whenever the active tab changes (for two-way binding).\r\n */\r\n @Output() activeIdChange = new EventEmitter<string | null>();\r\n /**\r\n * Detailed change event emitted on active tab updates.\r\n */\r\n @Output() changed = new EventEmitter<TabChangeEvent>();\r\n\r\n /**\r\n * Optional projected template for tab labels.\r\n */\r\n @ContentChild('frgTabLabel', { read: TemplateRef }) labelTemplate?: TemplateRef<TabItemContext>;\r\n /**\r\n * Optional projected template for tab panels.\r\n */\r\n @ContentChild('frgTabContent', { read: TemplateRef }) contentTemplate?: TemplateRef<TabItemContext>;\r\n /**\r\n * Optional projected template for tab icons.\r\n */\r\n @ContentChild('frgTabIcon', { read: TemplateRef }) iconTemplate?: TemplateRef<TabItemContext>;\r\n\r\n /**\r\n * References to rendered tab buttons for keyboard focus.\r\n */\r\n @ViewChildren('tabBtn') tabButtons!: QueryList<ElementRef<HTMLButtonElement>>;\r\n /**\r\n * References to rendered panel elements for focus management.\r\n */\r\n @ViewChildren('panelBody') panelBodies!: QueryList<ElementRef<HTMLElement>>;\r\n\r\n /**\r\n * Normalized copy of `items` with generated ids and active flags.\r\n */\r\n viewItems: TabItem[] = [];\r\n /**\r\n * Internal counter used for deterministic id generation.\r\n */\r\n private uidCounter = 0;\r\n\r\n /**\r\n * Syncs inputs into internal view state and resolves active tab.\r\n */\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['items']) {\r\n this.viewItems = this.normalizeItems(this.items);\r\n const initialActive = this.resolveActiveId(this.activeId);\r\n this.setActiveId(initialActive, false);\r\n }\r\n\r\n if (changes['activeId'] && !changes['activeId'].firstChange) {\r\n this.setActiveId(this.activeId, false);\r\n }\r\n }\r\n\r\n /**\r\n * Determines whether a given tab id matches the current active id.\r\n */\r\n isActive(id?: string | null): boolean {\r\n return !!id && this.activeId === id;\r\n }\r\n\r\n /**\r\n * Builds the DOM id for a tab element.\r\n */\r\n tabId(id: string): string {\r\n return `${id}-tab`;\r\n }\r\n\r\n /**\r\n * Builds the DOM id for a panel element.\r\n */\r\n panelId(id: string): string {\r\n return `${id}-panel`;\r\n }\r\n\r\n /**\r\n * Handles click selection for a tab at the given index.\r\n */\r\n onTabClick(index: number, event: Event): void {\r\n event.preventDefault();\r\n this.selectAt(index);\r\n }\r\n\r\n /**\r\n * Keyboard interaction handler to navigate and activate tabs.\r\n */\r\n onTabKeydown(event: KeyboardEvent, index: number): void {\r\n const key = event.key;\r\n const tabs = this.tabButtons?.toArray() || [];\r\n if (!tabs.length) {\r\n return;\r\n }\r\n\r\n if (key === 'Enter' || key === ' ') {\r\n event.preventDefault();\r\n this.selectAt(index);\r\n return;\r\n }\r\n\r\n if (key === 'ArrowRight' || key === 'ArrowDown') {\r\n event.preventDefault();\r\n this.focusTab((index + 1) % tabs.length);\r\n } else if (key === 'ArrowLeft' || key === 'ArrowUp') {\r\n event.preventDefault();\r\n this.focusTab((index - 1 + tabs.length) % tabs.length);\r\n } else if (key === 'Home') {\r\n event.preventDefault();\r\n this.focusTab(0);\r\n } else if (key === 'End') {\r\n event.preventDefault();\r\n this.focusTab(tabs.length - 1);\r\n }\r\n }\r\n\r\n /**\r\n * Builds a template context for projected templates.\r\n */\r\n buildContext<T = unknown>(item: TabItem<T>, index: number): TabItemContext<T> {\r\n return {\r\n $implicit: item,\r\n item,\r\n index,\r\n active: this.isActive(item.id),\r\n select: () => this.selectAt(index)\r\n };\r\n }\r\n\r\n /**\r\n * Selects the tab at the given index if enabled and different.\r\n */\r\n private selectAt(index: number): void {\r\n const item = this.viewItems[index];\r\n if (!item || item.disabled || !item.id || this.isActive(item.id)) {\r\n return;\r\n }\r\n this.setActiveId(item.id, true, item, index);\r\n }\r\n\r\n /**\r\n * Ensures every tab has an id and returns a new items array.\r\n */\r\n private normalizeItems(items: TabItem[]): TabItem[] {\r\n return (items || []).map((item, index) => ({\r\n ...item,\r\n id: item.id ?? this.generateId(index)\r\n }));\r\n }\r\n\r\n /**\r\n * Generates a deterministic id for tabs lacking one.\r\n */\r\n private generateId(index: number): string {\r\n this.uidCounter += 1;\r\n return `frg-tab-${index}-${this.uidCounter}`;\r\n }\r\n\r\n /**\r\n * Resolves the next active id based on provided preference and availability.\r\n */\r\n private resolveActiveId(candidate: string | null): string | null {\r\n const available = (this.viewItems || []).filter(item => !item.disabled);\r\n if (!available.length) {\r\n return null;\r\n }\r\n if (candidate && available.some(item => item.id === candidate)) {\r\n return candidate;\r\n }\r\n const preselected = available.find(item => item.active && item.id);\r\n if (preselected?.id) {\r\n return preselected.id;\r\n }\r\n return available[0].id ?? null;\r\n }\r\n\r\n /**\r\n * Applies the active id, updates view state, emits events, and manages focus.\r\n */\r\n private setActiveId(nextId: string | null, emit: boolean, item?: TabItem, index?: number): void {\r\n const resolved = this.resolveActiveId(nextId);\r\n this.activeId = resolved;\r\n this.viewItems = this.viewItems.map(viewItem => ({\r\n ...viewItem,\r\n active: resolved ? viewItem.id === resolved : false\r\n }));\r\n\r\n if (emit) {\r\n this.activeIdChange.emit(this.activeId);\r\n this.changed.emit({\r\n id: this.activeId,\r\n index: index ?? this.viewItems.findIndex(viewItem => viewItem.id === this.activeId),\r\n item\r\n });\r\n }\r\n\r\n if (this.focusPanelOnSelect && resolved) {\r\n const targetIndex = index ?? this.viewItems.findIndex(viewItem => viewItem.id === resolved);\r\n if (targetIndex >= 0) {\r\n setTimeout(() => this.focusPanel(targetIndex), 0);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Moves focus to the tab at the given index.\r\n */\r\n private focusTab(index: number): void {\r\n const tab = this.tabButtons?.get(index);\r\n if (tab?.nativeElement) {\r\n tab.nativeElement.focus();\r\n }\r\n }\r\n\r\n /**\r\n * Moves focus to the panel at the given index.\r\n */\r\n private focusPanel(index: number): void {\r\n const panel = this.panelBodies?.get(index);\r\n if (panel?.nativeElement) {\r\n panel.nativeElement.focus();\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"frg-tabs\"\r\n [class.is-animated]=\"animated\"\r\n [attr.data-style]=\"styleType\"\r\n [attr.data-size]=\"size\"\r\n [attr.data-align]=\"align\">\r\n <div class=\"frg-tabs__list\" role=\"tablist\">\r\n @for (item of viewItems; track item?.id; let i = $index) {\r\n <button\r\n type=\"button\"\r\n #tabBtn\r\n role=\"tab\"\r\n class=\"frg-tabs__tab\"\r\n [class.is-active]=\"isActive(item?.id)\"\r\n [class.is-disabled]=\"item?.disabled\"\r\n [attr.data-style]=\"item?.style || styleType\"\r\n [attr.data-size]=\"item?.size || size\"\r\n [attr.id]=\"tabId(item!.id!)\"\r\n [attr.aria-controls]=\"panelId(item!.id!)\"\r\n [attr.aria-selected]=\"isActive(item?.id)\"\r\n [attr.aria-disabled]=\"item?.disabled || null\"\r\n [attr.tabindex]=\"isActive(item?.id) ? 0 : -1\"\r\n [disabled]=\"item?.disabled\"\r\n (click)=\"onTabClick(i, $event)\"\r\n (keydown)=\"onTabKeydown($event, i)\">\r\n <span class=\"frg-tabs__tab-inner\">\r\n @if (item?.iconTemplate || iconTemplate || item?.icon) {\r\n <span class=\"frg-tabs__icon\" aria-hidden=\"true\">\r\n @if (item?.iconTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item?.iconTemplate\"\r\n [ngTemplateOutletContext]=\"buildContext(item!, i)\">\r\n </ng-container>\r\n } @else if (iconTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"iconTemplate\"\r\n [ngTemplateOutletContext]=\"buildContext(item!, i)\">\r\n </ng-container>\r\n } @else {\r\n <span class=\"frg-tabs__icon-shape\">{{ item?.icon }}</span>\r\n }\r\n </span>\r\n }\r\n\r\n <span class=\"frg-tabs__label\">\r\n @if (item?.labelTemplate || labelTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item?.labelTemplate || labelTemplate\"\r\n [ngTemplateOutletContext]=\"buildContext(item!, i)\">\r\n </ng-container>\r\n } @else {\r\n <span class=\"frg-tabs__label-text\">{{ item?.label }}</span>\r\n @if (item?.description) {\r\n <small class=\"frg-tabs__label-desc\">{{ item?.description }}</small>\r\n }\r\n }\r\n </span>\r\n </span>\r\n <span class=\"frg-tabs__underline\" aria-hidden=\"true\"></span>\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"frg-tabs__panels\">\r\n @for (item of viewItems; track item?.id; let i = $index) {\r\n <section\r\n class=\"frg-tabs__panel\"\r\n #panelBody\r\n role=\"tabpanel\"\r\n [class.is-active]=\"isActive(item?.id)\"\r\n [attr.id]=\"panelId(item!.id!)\"\r\n [attr.aria-labelledby]=\"tabId(item!.id!)\"\r\n [hidden]=\"!isActive(item?.id)\"\r\n [attr.tabindex]=\"isActive(item?.id) ? 0 : -1\">\r\n @if (item?.contentTemplate || contentTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item?.contentTemplate || contentTemplate\"\r\n [ngTemplateOutletContext]=\"buildContext(item!, i)\">\r\n </ng-container>\r\n } @else if (item?.content) {\r\n {{ item?.content }}\r\n } @else if (item?.data; as payload) {\r\n {{ payload }}\r\n }\r\n </section>\r\n }\r\n </div>\r\n</div>\r\n","import { Component, Input } from \"@angular/core\";\r\nimport { ISideNavConfig, ISideNavItem } from \"./side-nav.type\";\r\nimport { NgClass, NgTemplateOutlet } from \"@angular/common\";\r\nimport { RouterLink, RouterLinkActive } from \"@angular/router\";\r\n\r\n@Component({\r\n selector: \"frg-side-nav\",\r\n templateUrl: \"./side-nav.component.html\",\r\n styleUrls: [\"./side-nav.component.scss\"],\r\n imports: [NgTemplateOutlet, NgClass, RouterLink, RouterLinkActive]\r\n})\r\nexport class SideNavComponent {\r\n @Input() config: ISideNavConfig = {};\r\n\r\n public toggleItem(item: ISideNavItem): void {\r\n item.expanded = !item.expanded;\r\n }\r\n}\r\n","<div class=\"frg-side-nav\">\r\n <div class=\"frg-side-nav__container\">\r\n <nav>\r\n @for (section of config.sections; track section.id ?? $index) {\r\n <div\r\n class=\"frg-side-nav__section\"\r\n [ngClass]=\"{\r\n 'frg-side-nav__section--primary': section.styleType === 'primary',\r\n 'frg-side-nav__section--secondary': section.styleType === 'secondary',\r\n 'frg-side-nav__section--tertiary': section.styleType === 'tertiary',\r\n 'frg-side-nav__section--success': section.styleType === 'success',\r\n 'frg-side-nav__section--warning': section.styleType === 'warning',\r\n 'frg-side-nav__section--danger': section.styleType === 'danger',\r\n 'frg-side-nav__section--dark': section.styleType === 'dark',\r\n 'frg-side-nav__section--light': section.styleType === 'light'\r\n }\"\r\n >\r\n @if (section.title) {\r\n <span class=\"frg-side-nav__section-title\">\r\n @if (section.icon) {\r\n <i class=\"frg-side-nav__icon\" [ngClass]=\"section.icon\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"frg-side-nav__text\">{{ section.title }}</span>\r\n </span>\r\n }\r\n <ng-container\r\n [ngTemplateOutlet]=\"listTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: section.items, isSubnav: false, isOpen: true }\">\r\n </ng-container>\r\n </div>\r\n }\r\n </nav>\r\n </div>\r\n</div>\r\n\r\n<ng-template #listTemplate let-items let-isSubnav=\"isSubnav\" let-isOpen=\"isOpen\">\r\n <ul\r\n class=\"frg-side-nav__list\"\r\n [ngClass]=\"{\r\n 'frg-side-nav__sublist': isSubnav,\r\n 'frg-side-nav__sublist--open': isSubnav && isOpen\r\n }\"\r\n >\r\n @for (item of items; track item.id ?? $index) {\r\n <li\r\n class=\"frg-side-nav__item\"\r\n [ngClass]=\"{\r\n 'frg-side-nav__item--has-children': item.children?.length,\r\n 'frg-side-nav__item--expanded': item.expanded\r\n }\"\r\n >\r\n @if (item.children?.length) {\r\n <button\r\n type=\"button\"\r\n class=\"frg-side-nav__toggle\"\r\n (click)=\"toggleItem(item)\"\r\n [attr.aria-expanded]=\"item.expanded ? 'true' : 'false'\"\r\n >\r\n <span class=\"frg-side-nav__label\">\r\n @if (item.icon) {\r\n <i class=\"frg-side-nav__icon\" [ngClass]=\"item.icon\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"frg-side-nav__text\">{{ item.label }}</span>\r\n </span>\r\n <span class=\"frg-side-nav__chevron\" aria-hidden=\"true\"></span>\r\n </button>\r\n <ng-container\r\n [ngTemplateOutlet]=\"listTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item.children, isSubnav: true, isOpen: item.expanded }\">\r\n </ng-container>\r\n } @else {\r\n @if (item.link?.kind === \"route\") {\r\n <a\r\n class=\"frg-side-nav__link\"\r\n [routerLink]=\"item.link.value\"\r\n routerLinkActive=\"active\"\r\n [routerLinkActiveOptions]=\"{ exact: item.link?.exact ?? false }\"\r\n >\r\n @if (item.icon) {\r\n <i class=\"frg-side-nav__icon\" [ngClass]=\"item.icon\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"frg-side-nav__text\">{{ item.label }}</span>\r\n </a>\r\n } @else {\r\n <a\r\n class=\"frg-side-nav__link\"\r\n [href]=\"item.link?.value\"\r\n [attr.target]=\"item.link?.kind === 'href' ? item.link.target : null\"\r\n rel=\"noopener\"\r\n >\r\n @if (item.icon) {\r\n <i class=\"frg-side-nav__icon\" [ngClass]=\"item.icon\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"frg-side-nav__text\">{{ item.label }}</span>\r\n </a>\r\n }\r\n }\r\n </li>\r\n }\r\n </ul>\r\n</ng-template>\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n Component,\r\n ContentChild,\r\n ElementRef,\r\n EventEmitter,\r\n Input,\r\n OnChanges,\r\n Output,\r\n QueryList,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChildren\r\n} from '@angular/core';\r\nimport { AbstractControl } from '@angular/forms';\r\nimport {\r\n StepChangeEvent,\r\n StepItem,\r\n StepItemContext,\r\n StepValidationEvent,\r\n TStepNavigationSource,\r\n TStepperMotion,\r\n TStepperOrientation\r\n} from './stepper.type';\r\n\r\ninterface StepViewItem<T = unknown> extends StepItem<T> {\r\n id: string;\r\n active?: boolean;\r\n}\r\n\r\ninterface StepValidationState {\r\n checked: boolean;\r\n valid: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'frg-stepper',\r\n standalone: true,\r\n imports: [NgTemplateOutlet],\r\n templateUrl: './stepper.component.html',\r\n styleUrl: './stepper.component.scss'\r\n})\r\nexport class StepperComponent implements OnChanges {\r\n @Input() steps: StepItem[] = [];\r\n @Input() activeId: string | null = null;\r\n @Input() linear: boolean = true;\r\n @Input() animated: boolean = true;\r\n @Input() orientation: TStepperOrientation = 'horizontal';\r\n @Input() focusPanelOnChange: boolean = true;\r\n @Input() validateOnChange: boolean = true;\r\n @Input() allowStepClick: boolean = true;\r\n @Input() formGroup?: AbstractControl | null;\r\n\r\n @Output() activeIdChange = new EventEmitter<string | null>();\r\n @Output() changed = new EventEmitter<StepChangeEvent>();\r\n @Output() validationChange = new EventEmitter<StepValidationEvent>();\r\n\r\n @ContentChild('frgStepLabel', { read: TemplateRef }) labelTemplate?: TemplateRef<StepItemContext>;\r\n @ContentChild('frgStepContent', { read: TemplateRef }) contentTemplate?: TemplateRef<StepItemContext>;\r\n @ContentChild('frgStepIndicator', { read: TemplateRef }) indicatorTemplate?: TemplateRef<StepItemContext>;\r\n\r\n @ViewChildren('stepBtn') stepButtons!: QueryList<ElementRef<HTMLButtonElement>>;\r\n @ViewChildren('panelBody') panelBodies!: QueryList<ElementRef<HTMLElement>>;\r\n\r\n viewSteps: StepViewItem[] = [];\r\n motion: TStepperMotion = 'none';\r\n\r\n private uidCounter = 0;\r\n private readonly validationState = new Map<string, StepValidationState>();\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['steps']) {\r\n this.validationState.clear();\r\n this.viewSteps = this.normalizeSteps(this.steps);\r\n const initialActive = this.resolveActiveId(this.activeId);\r\n this.setActiveId(initialActive, false, 'none');\r\n }\r\n\r\n if (changes['activeId'] && !changes['activeId'].firstChange) {\r\n this.setActiveId(this.activeId, false, 'none');\r\n }\r\n }\r\n\r\n get activeIndex(): number {\r\n return this.viewSteps.findIndex(step => step.id === this.activeId);\r\n }\r\n\r\n isActive(id?: string | null): boolean {\r\n return !!id && this.activeId === id;\r\n }\r\n\r\n stepId(id: string): string {\r\n return `${id}-step`;\r\n }\r\n\r\n panelId(id: string): string {\r\n return `${id}-panel`;\r\n }\r\n\r\n onStepClick(index: number, event: Event): void {\r\n event.preventDefault();\r\n if (!this.allowStepClick) {\r\n return;\r\n }\r\n void this.requestStepChange(index, 'click');\r\n }\r\n\r\n onStepKeydown(event: KeyboardEvent, index: number): void {\r\n const key = event.key;\r\n const steps = this.stepButtons?.toArray() || [];\r\n if (!steps.length) {\r\n return;\r\n }\r\n\r\n if (key === 'Enter' || key === ' ') {\r\n event.preventDefault();\r\n void this.requestStepChange(index, 'click');\r\n return;\r\n }\r\n\r\n const isHorizontal = this.orientation === 'horizontal';\r\n const nextKey = isHorizontal ? 'ArrowRight' : 'ArrowDown';\r\n const prevKey = isHorizontal ? 'ArrowLeft' : 'ArrowUp';\r\n\r\n if (key === nextKey) {\r\n event.preventDefault();\r\n this.focusStep(this.findNextEnabledIndex(index, 1));\r\n } else if (key === prevKey) {\r\n event.preventDefault();\r\n this.focusStep(this.findNextEnabledIndex(index, -1));\r\n } else if (key === 'Home') {\r\n event.preventDefault();\r\n this.focusStep(this.findNextEnabledIndex(-1, 1));\r\n } else if (key === 'End') {\r\n event.preventDefault();\r\n this.focusStep(this.findNextEnabledIndex(this.viewSteps.length, -1));\r\n }\r\n }\r\n\r\n next(): void {\r\n const currentIndex = this.getResolvedActiveIndex();\r\n const target = currentIndex + 1;\r\n if (target < this.viewSteps.length) {\r\n void this.requestStepChange(target, 'next');\r\n }\r\n }\r\n\r\n previous(): void {\r\n const currentIndex = this.getResolvedActiveIndex();\r\n const target = currentIndex - 1;\r\n if (target >= 0) {\r\n void this.requestStepChange(target, 'previous');\r\n }\r\n }\r\n\r\n buildContext<T = unknown>(step: StepItem<T>, index: number): StepItemContext<T> {\r\n return {\r\n $implicit: step,\r\n item: step,\r\n index,\r\n active: this.isActive(step.id),\r\n completed: this.isStepComplete<T>(step),\r\n error: this.isStepError<T>(step),\r\n select: () => void this.requestStepChange(index, 'click'),\r\n next: () => this.next(),\r\n previous: () => this.previous()\r\n };\r\n }\r\n\r\n stepStatus(step: StepItem, index: number): 'completed' | 'active' | 'error' | 'default' {\r\n if (this.isStepError(step)) {\r\n return 'error';\r\n }\r\n if (this.isActive(step.id)) {\r\n return 'active';\r\n }\r\n if (this.isStepComplete(step)) {\r\n return 'completed';\r\n }\r\n if (index === 0 && this.activeId === null) {\r\n return 'active';\r\n }\r\n return 'default';\r\n }\r\n\r\n indicatorText(step: StepItem, index: number): string {\r\n const status = this.stepStatus(step, index);\r\n if (status === 'completed') {\r\n return 'OK';\r\n }\r\n if (status === 'error') {\r\n return '!';\r\n }\r\n if (step.icon) {\r\n return step.icon;\r\n }\r\n return `${index + 1}`;\r\n }\r\n\r\n indicatorLabel(step: StepItem, index: number): string {\r\n const status = this.stepStatus(step, index);\r\n if (status === 'completed') {\r\n return `${step.label} completed`;\r\n }\r\n if (status === 'error') {\r\n return `${step.label} has errors`;\r\n }\r\n if (status === 'active') {\r\n return `${step.label} active`;\r\n }\r\n return `Step ${index + 1}: ${step.label}`;\r\n }\r\n\r\n isStepDisabled(step: StepItem, index: number): boolean {\r\n return !!step.disabled || this.isStepBlocked(index);\r\n }\r\n\r\n tabIndexFor(index: number): number {\r\n if (this.isActive(this.viewSteps[index]?.id)) {\r\n return 0;\r\n }\r\n const firstEnabled = this.findNextEnabledIndex(-1, 1);\r\n if (this.activeId === null && index === firstEnabled) {\r\n return 0;\r\n }\r\n return -1;\r\n }\r\n\r\n private async requestStepChange(index: number, source: TStepNavigationSource): Promise<void> {\r\n const currentIndex = this.getResolvedActiveIndex();\r\n const target = this.viewSteps[index];\r\n if (!target || index === currentIndex) {\r\n return;\r\n }\r\n\r\n if (target.disabled) {\r\n return;\r\n }\r\n\r\n const forward = currentIndex >= 0 ? index > currentIndex : true;\r\n if (forward && this.validateOnChange) {\r\n const valid = await this.validateStep(currentIndex, source);\r\n if (!valid && this.linear) {\r\n return;\r\n }\r\n }\r\n\r\n if (this.linear && this.isStepBlocked(index)) {\r\n return;\r\n }\r\n\r\n const direction: TStepperMotion = forward ? 'next' : 'previous';\r\n this.setActiveId(target.id, true, direction, target, index);\r\n }\r\n\r\n private normalizeSteps(steps: StepItem[]): StepViewItem[] {\r\n return (steps || []).map((step, index) => ({\r\n ...step,\r\n id: step.id ?? this.generateId(index)\r\n }));\r\n }\r\n\r\n private generateId(index: number): string {\r\n this.uidCounter += 1;\r\n return `frg-step-${index}-${this.uidCounter}`;\r\n }\r\n\r\n private resolveActiveId(candidate: string | null): string | null {\r\n const available = (this.viewSteps || []).filter(step => !step.disabled);\r\n if (!available.length) {\r\n return null;\r\n }\r\n if (candidate && available.some(step => step.id === candidate)) {\r\n return candidate;\r\n }\r\n const preselected = available.find(step => step.active && step.id);\r\n if (preselected?.id) {\r\n return preselected.id;\r\n }\r\n return available[0].id ?? null;\r\n }\r\n\r\n private setActiveId(\r\n nextId: string | null,\r\n emit: boolean,\r\n direction: TStepperMotion,\r\n item?: StepItem,\r\n _index?: number\r\n ): void {\r\n const resolved = this.resolveActiveId(nextId);\r\n const resolvedIndex = resolved ? this.viewSteps.findIndex(step => step.id === resolved) : -1;\r\n const currentIndex = this.activeIndex;\r\n\r\n this.activeId = resolved;\r\n this.viewSteps = this.viewSteps.map(viewStep => ({\r\n ...viewStep,\r\n active: resolved ? viewStep.id === resolved : false\r\n }));\r\n this.motion = direction === 'none' ? this.getDirection(currentIndex, resolvedIndex) : direction;\r\n\r\n if (emit) {\r\n this.activeIdChange.emit(this.activeId);\r\n this.changed.emit({\r\n id: this.activeId,\r\n index: resolvedIndex,\r\n direction: this.motion,\r\n item\r\n });\r\n }\r\n\r\n if (this.focusPanelOnChange && resolvedIndex >= 0) {\r\n setTimeout(() => this.focusPanel(resolvedIndex), 0);\r\n }\r\n }\r\n\r\n private getDirection(fromIndex: number, toIndex: number): TStepperMotion {\r\n if (fromIndex === -1 || toIndex === -1 || fromIndex === toIndex) {\r\n return 'none';\r\n }\r\n return toIndex > fromIndex ? 'next' : 'previous';\r\n }\r\n\r\n isStepComplete<T>(step: StepItem<T>): boolean {\r\n if (step.completed) {\r\n return true;\r\n }\r\n const validation = this.getValidationResult<T>(step);\r\n return validation === true;\r\n }\r\n\r\n isStepError<T>(step: StepItem<T>): boolean {\r\n if (step.error) {\r\n return true;\r\n }\r\n const control = step.control;\r\n if (control) {\r\n if (control.invalid && (control.touched || control.dirty)) {\r\n return true;\r\n }\r\n const validation = this.validationState.get(step.id ?? '');\r\n return validation ? !validation.valid : false;\r\n }\r\n const validation = this.validationState.get(step.id ?? '');\r\n return validation ? !validation.valid : false;\r\n }\r\n\r\n private getValidationResult<T>(step: StepItem<T>): boolean | null {\r\n if (step.control) {\r\n if (step.control.pending) {\r\n return null;\r\n }\r\n return step.control.valid;\r\n }\r\n const validation = this.validationState.get(step.id ?? '');\r\n if (validation) {\r\n return validation.valid;\r\n }\r\n return null;\r\n }\r\n\r\n private isStepBlocked(index: number): boolean {\r\n if (!this.linear) {\r\n return false;\r\n }\r\n const currentIndex = this.getResolvedActiveIndex();\r\n if (currentIndex === -1) {\r\n return index !== this.findNextEnabledIndex(-1, 1);\r\n }\r\n if (index <= currentIndex) {\r\n return false;\r\n }\r\n for (let i = 0; i < index; i += 1) {\r\n const step = this.viewSteps[i];\r\n if (!step) {\r\n continue;\r\n }\r\n if (step.optional) {\r\n continue;\r\n }\r\n if (!this.isStepComplete(step)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private async validateStep(index: number, source: TStepNavigationSource): Promise<boolean> {\r\n if (index < 0 || index >= this.viewSteps.length) {\r\n return true;\r\n }\r\n const step = this.viewSteps[index];\r\n if (!step) {\r\n return true;\r\n }\r\n\r\n const hasControl = !!step.control;\r\n const hasValidator = !!step.validator;\r\n if (!hasControl && !hasValidator) {\r\n return true;\r\n }\r\n\r\n let valid = true;\r\n if (hasControl && step.control) {\r\n step.control.markAllAsTouched();\r\n step.control.updateValueAndValidity({ onlySelf: false, emitEvent: false });\r\n if (step.control.invalid) {\r\n valid = false;\r\n }\r\n }\r\n\r\n if (hasValidator && step.validator) {\r\n const context = {\r\n step,\r\n index,\r\n formGroup: this.formGroup ?? null,\r\n source\r\n };\r\n const result = await Promise.resolve(step.validator(context));\r\n if (!result) {\r\n valid = false;\r\n }\r\n }\r\n\r\n this.validationState.set(step.id, { checked: true, valid });\r\n this.viewSteps = this.viewSteps.map(item =>\r\n item.id === step.id\r\n ? {\r\n ...item,\r\n completed: valid ? true : item.completed,\r\n error: valid ? false : true\r\n }\r\n : item\r\n );\r\n\r\n this.validationChange.emit({\r\n id: step.id,\r\n index,\r\n valid,\r\n source,\r\n item: step\r\n });\r\n\r\n return valid;\r\n }\r\n\r\n private focusStep(index: number): void {\r\n const step = this.stepButtons?.get(index);\r\n if (step?.nativeElement) {\r\n step.nativeElement.focus();\r\n }\r\n }\r\n\r\n private focusPanel(index: number): void {\r\n const panel = this.panelBodies?.get(index);\r\n if (panel?.nativeElement) {\r\n panel.nativeElement.focus();\r\n }\r\n }\r\n\r\n private getResolvedActiveIndex(): number {\r\n const index = this.viewSteps.findIndex(step => step.id === this.activeId);\r\n if (index >= 0) {\r\n return index;\r\n }\r\n return this.viewSteps.findIndex(step => !step.disabled);\r\n }\r\n\r\n private findNextEnabledIndex(startIndex: number, delta: number): number {\r\n if (!this.viewSteps.length) {\r\n return -1;\r\n }\r\n let index = startIndex + delta;\r\n while (index >= 0 && index < this.viewSteps.length) {\r\n const step = this.viewSteps[index];\r\n if (step && !this.isStepDisabled(step, index)) {\r\n return index;\r\n }\r\n index += delta;\r\n }\r\n return startIndex;\r\n }\r\n}\r\n","<div\r\n class=\"frg-stepper\"\r\n [class.is-animated]=\"animated\"\r\n [attr.data-orientation]=\"orientation\"\r\n [attr.data-motion]=\"motion\">\r\n <div class=\"frg-stepper__header\" role=\"tablist\" [attr.aria-orientation]=\"orientation\">\r\n @for (step of viewSteps; track step.id; let i = $index) {\r\n <button\r\n type=\"button\"\r\n #stepBtn\r\n class=\"frg-stepper__step\"\r\n role=\"tab\"\r\n [class.is-active]=\"isActive(step.id)\"\r\n [class.is-disabled]=\"isStepDisabled(step, i)\"\r\n [attr.id]=\"stepId(step.id)\"\r\n [attr.aria-controls]=\"panelId(step.id)\"\r\n [attr.aria-selected]=\"isActive(step.id)\"\r\n [attr.aria-current]=\"isActive(step.id) ? 'step' : null\"\r\n [attr.aria-disabled]=\"isStepDisabled(step, i) || null\"\r\n [attr.aria-invalid]=\"isStepError(step) || null\"\r\n [attr.tabindex]=\"tabIndexFor(i)\"\r\n [disabled]=\"isStepDisabled(step, i)\"\r\n (click)=\"onStepClick(i, $event)\"\r\n (keydown)=\"onStepKeydown($event, i)\">\r\n <span class=\"frg-stepper__indicator\" [attr.data-status]=\"stepStatus(step, i)\">\r\n @if (step.indicatorTemplate || indicatorTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"step.indicatorTemplate || indicatorTemplate\"\r\n [ngTemplateOutletContext]=\"buildContext(step, i)\">\r\n </ng-container>\r\n } @else {\r\n <span class=\"frg-stepper__indicator-text\">{{ indicatorText(step, i) }}</span>\r\n }\r\n <span class=\"frg-stepper__sr\">{{ indicatorLabel(step, i) }}</span>\r\n </span>\r\n <span class=\"frg-stepper__label\">\r\n @if (step.labelTemplate || labelTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"step.labelTemplate || labelTemplate\"\r\n [ngTemplateOutletContext]=\"buildContext(step, i)\">\r\n </ng-container>\r\n } @else {\r\n <span class=\"frg-stepper__label-text\">{{ step.label }}</span>\r\n @if (step.description) {\r\n <small class=\"frg-stepper__label-desc\">{{ step.description }}</small>\r\n }\r\n @if (step.optional) {\r\n <span class=\"frg-stepper__label-optional\">Optional</span>\r\n }\r\n }\r\n </span>\r\n </button>\r\n @if (i < viewSteps.length - 1) {\r\n <span class=\"frg-stepper__connector\" [class.is-complete]=\"isStepComplete(step)\" aria-hidden=\"true\"></span>\r\n }\r\n }\r\n </div>\r\n\r\n <div class=\"frg-stepper__panels\">\r\n @for (step of viewSteps; track step.id; let i = $index) {\r\n <section\r\n class=\"frg-stepper__panel\"\r\n #panelBody\r\n role=\"tabpanel\"\r\n [class.is-active]=\"isActive(step.id)\"\r\n [attr.id]=\"panelId(step.id)\"\r\n [attr.aria-labelledby]=\"stepId(step.id)\"\r\n [hidden]=\"!isActive(step.id)\"\r\n [attr.tabindex]=\"isActive(step.id) ? 0 : -1\">\r\n @if (step.contentTemplate || contentTemplate) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"step.contentTemplate || contentTemplate\"\r\n [ngTemplateOutletContext]=\"buildContext(step, i)\">\r\n </ng-container>\r\n } @else if (step.content) {\r\n {{ step.content }}\r\n } @else if (step.data; as payload) {\r\n {{ payload }}\r\n }\r\n </section>\r\n }\r\n </div>\r\n</div>\r\n","import { Directive, OnInit, inject } from '@angular/core';\r\nimport { ControlValueAccessor, FormControl, NgControl } from '@angular/forms';\r\n\r\n/**\r\n * Base class for input components, providing common functionality for form controls.\r\n * This class implements ControlValueAccessor to integrate with Angular forms.\r\n * Subclasses must implement the abstract methods to update the view and disabled state.\r\n * It also provides properties for label, placeholder, required state, and error handling.\r\n * The errorMessages property can be customized to provide specific validation messages.\r\n * The hasError getter can be used in templates to conditionally display error messages.\r\n * Subclasses should call super.ngOnInit() if they override ngOnInit().\r\n *\r\n * @see ControlValueAccessor\r\n */\r\n@Directive()\r\nexport abstract class InputBase<T> implements ControlValueAccessor, OnInit {\r\n /**\r\n * Unique identifier for the input element.\r\n */\r\n id: string = crypto.randomUUID();\r\n /**\r\n * The current value of the input element.\r\n */\r\n value: T | null = null;\r\n /**\r\n * Indicates whether the input element is disabled.\r\n */\r\n disabled: boolean = false;\r\n /**\r\n * The label for the input element.\r\n */\r\n label: string = '';\r\n /**\r\n * The placeholder text for the input element.\r\n */\r\n placeholder: string = '';\r\n /**\r\n * Indicates whether the input element is required.\r\n * If true, a visual indicator is shown next to the label.\r\n */\r\n required: boolean = false;\r\n /**\r\n * The FormControl associated with this input element.\r\n */\r\n control: FormControl | null = null;\r\n /**\r\n * Indicates whether to show validation messages.\r\n * If false, validation messages will be hidden.\r\n * Default is true.\r\n */\r\n showValidation: boolean = true;\r\n /**\r\n * The NgControl associated with this input element, if any.\r\n * This is injected to link the component with Angular forms.\r\n */\r\n protected ngControl: NgControl | null = null;\r\n\r\n /**\r\n * Holds the registered callback function to notify when the value changes.\r\n */\r\n protected onChange: (value: T | null) => void = () => {};\r\n /**\r\n * Holds the registered callback function to notify when the input is touched.\r\n */\r\n protected onTouched: () => void = () => {};\r\n\r\n constructor() {\r\n this.ngControl = inject(NgControl, { self: true, optional: true });\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n this.control = this.ngControl.control as FormControl;\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n ngOnInit(): void {\r\n if (this.ngControl && !this.control) {\r\n this.control = this.ngControl.control as FormControl;\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n writeValue(value: T): void {\r\n this.value = value;\r\n this.updateView(value);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n registerOnChange(fn: (value: T | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.updateDisabledState(isDisabled);\r\n }\r\n\r\n /**\r\n * Indicates whether the input has validation errors and has been touched.\r\n * This is used to conditionally display error messages in the template.\r\n * @return True if the input has errors and has been touched, false otherwise.\r\n */\r\n get hasError(): boolean {\r\n return !!this.control?.errors && !!this.control?.touched;\r\n }\r\n\r\n /**\r\n * Updates the view to reflect the current value.\r\n * This method should be implemented by subclasses to update the specific input element.\r\n * @param value The new value to set in the view.\r\n */\r\n protected abstract updateView(value: T | null): void;\r\n /**\r\n * Updates the disabled state of the input element in the view.\r\n * This method should be implemented by subclasses to update the specific input element.\r\n * @param isDisabled True if the input should be disabled, false otherwise.\r\n */\r\n protected abstract updateDisabledState(isDisabled: boolean): void;\r\n\r\n /**\r\n * Handles blur event.\r\n * Subclasses can override to provide custom behavior.\r\n * Default implementation does nothing.\r\n */\r\n protected onBlur(_: FocusEvent): void {}\r\n\r\n /**\r\n * Handles focus event.\r\n * Subclasses can override to provide custom behavior.\r\n * Default implementation does nothing.\r\n */\r\n protected onFocus(_: FocusEvent): void {}\r\n\r\n /**\r\n * Handles input event.\r\n * Subclasses can override to provide custom behavior.\r\n * Default implementation does nothing.\r\n */\r\n protected onInput(_: Event): void { }\r\n\r\n /**\r\n * A mapping of validation error keys to user-friendly error messages.\r\n * This can be customized to provide specific messages for different validation errors.\r\n * By default, it uses the DEFAULT_ERROR_MESSAGES constant.\r\n * If a specific error key is not found in this mapping, a generic message is used.\r\n */\r\n protected errorMessages: Record<string, string> = {};\r\n\r\n /**\r\n * A mapping of validation warnning keys to user-friendly warnning messages.\r\n * This can be customized to provide specific messages for different validation warnnings.\r\n * By default, it uses the DEFAULT_WARNING_MESSAGES constant.\r\n * If a specific warnning key is not found in this mapping, a generic message is used.\r\n */\r\n protected warningMessages: Record<string, string> = {};\r\n\r\n /**\r\n * Returns the list of error messages for the input.\r\n *\r\n * This property should be implemented by subclasses to provide\r\n * the current validation errors as an array of strings.\r\n */\r\n protected abstract get errorList(): string[];\r\n /**\r\n * Returns the list of error messages for the input.\r\n *\r\n * This property should be implemented by subclasses to provide\r\n * the current validation errors as an array of strings.\r\n */\r\n protected abstract get warningList(): string[] | undefined;\r\n}\r\n","//#region [ERRORS]\r\nexport const DEFAULT_INPUT_TEXT_ERROR_MESSAGES: Record<string, string> = {\r\n required: 'This field is required.',\r\n minlength: 'The value is too short.',\r\n maxlength: 'The value is too long.',\r\n pattern: 'The value does not match the required pattern.',\r\n email: 'Please enter a valid email.',\r\n strictEmail: 'Please enter a valid email. Format should be example@mail.com',\r\n phone: 'Please enter a valid phone number.',\r\n strictPhone: 'Please enter a valid phone number. Format should be +1234567890',\r\n url: 'Please enter a url',\r\n strictUrl: 'Please enter a valid url. Format should be https://www.google.it',\r\n};\r\n\r\nexport const DEFAULT_INPUT_NUMBER_ERROR_MESSAGES: Record<string, string> = {\r\n required: 'This field is required.',\r\n min:'The value is less than minimum allowed',\r\n max: 'The value is greather than maximum allowed',\r\n step: 'The value does not match the required step increment value',\r\n precision: 'The value exceeds the allowed number of decimal places value',\r\n};\r\n\r\nexport const DEFAULT_INPUT_DATE_ERROR_MESSAGES: Record<string, string> = {\r\n required: 'This field is required.',\r\n min: 'The date is before the minimum allowed date: {{date}}',\r\n max: 'The date is after the maximum allowed date: {{date}}',\r\n};\r\n\r\nexport const DEFAULT_INPUT_TIME_ERROR_MESSAGES: Record<string, string> = {\r\n required: 'This field is required.',\r\n min: 'The time is before the minimum allowed time: {{time}}',\r\n max: 'The time is after the maximum allowed time: {{time}}',\r\n};\r\n\r\nexport const DEFAULT_INPUT_DATE_TIME_ERROR_MESSAGES: Record<string, string> = {\r\n required: 'This field is required.',\r\n min: 'The time is before the minimum allowed time: {{time}}',\r\n max: 'The time is after the maximum allowed time: {{time}}',\r\n};\r\n\r\nexport const DEFAULT_INPUT_TOGGLE_SWITCH_ERROR_MESSAGES: Record<string, string> = {\r\n required: 'This field is required.',\r\n};\r\n\r\nexport const DEFAULT_INPUT_CHECKBOX_ERROR_MESSAGES: Record<string, string> = {\r\n required: 'This field is required.',\r\n};\r\n\r\nexport const DEFAULT_INPUT_CHECKBOX_GROUP_ERROR_MESSAGES: Record<string, string> = {\r\n required: 'This field is required.',\r\n};\r\n\r\nexport const DEFAULT_INPUT_RADIO_GROUP_ERROR_MESSAGES: Record<string, string> = {\r\n required: 'This field is required.',\r\n};\r\n\r\nexport const DEFAULT_INPUT_SLIDER_ERROR_MESSAGES: Record<string, string> = {\r\n required: 'This field is required.',\r\n min:'The value is less than minimum allowed',\r\n max: 'The value is greather than maximum allowed',\r\n step: 'The value does not match the required step increment value',\r\n};\r\n\r\nexport const DEFAULT_INPUT_FILE_UPLOAD_ERROR_MESSAGES: Record<string, string> = {\r\n required: 'Please select a file.',\r\n maxFiles: 'Select at most {{limit}} file(s).',\r\n maxFileSize: 'Each file must be smaller than {{limit}}.',\r\n maxTotalSize: 'Total size must be smaller than {{limit}}.',\r\n accept: 'Only files of type {{accept}} are allowed.',\r\n};\r\n//#endregion\r\n\r\n//#region [WARNINGS]\r\nexport const DEFAULT_INPUT_NUMBER_WARNING_MESSAGES: Record<string, string> = {\r\n min:'The minimium value allowed is {{limit}}',\r\n max: 'The maximum value allowed is {{limit}}',\r\n step: 'The value does not match the required step increment value of {{limit}}',\r\n precision: 'The value exceeds the allowed number of decimal places value of {{limit}}',\r\n};\r\n\r\nexport const DEFAULT_INPUT_DATE_WARNINGS_MESSAGES: Record<string, string> = {\r\n format: 'The date is not in correct format {{format}}',\r\n min: 'The date is before the minimum allowed date: {{limit}}',\r\n max: 'The date is after the maximum allowed date: {{limit}}'\r\n};\r\n\r\nexport const DEFAULT_INPUT_TIME_WARNINGS_MESSAGES: Record<string, string> = {\r\n format: 'The time is not in correct format {{format}}',\r\n min: 'The time is before the minimum allowed time: {{limit}}',\r\n max: 'The time is after the maximum allowed time: {{limit}}'\r\n};\r\n\r\nexport const DEFAULT_INPUT_DATE_TIME_WARNINGS_MESSAGES: Record<string, string> = {\r\n format: 'The date and time are not in correct format {{format}}',\r\n min: 'The date and time are before the minimum allowed date and time: {{limit}}',\r\n max: 'The date and time are after the maximum allowed date and time: {{limit}}'\r\n};\r\n\r\nexport const DEFAULT_INPUT_TOGGLE_SWITCH_WARNINGS_MESSAGES: Record<string, string> = {\r\n // No warnings for toggle switch\r\n};\r\n\r\nexport const DEFAULT_INPUT_CHECKBOX_WARNINGS_MESSAGES: Record<string, string> = {\r\n // No warnings for checkbox\r\n};\r\n\r\nexport const DEFAULT_INPUT_CHECKBOX_GROUP_WARNINGS_MESSAGES: Record<string, string> = {\r\n // No warnings for checkbox group\r\n};\r\n\r\nexport const DEFAULT_INPUT_RADIO_GROUP_WARNINGS_MESSAGES: Record<string, string> = {\r\n // No warnings for radio group\r\n};\r\n\r\nexport const DEFAULT_INPUT_MULTI_SELECT_WARNINGS_MESSAGES: Record<string, string> = {\r\n // No warnings for multi select\r\n};\r\n\r\nexport const DEFAULT_INPUT_SELECTION_LIST_WARNINGS_MESSAGES: Record<string, string> = {\r\n // No warnings for selection list\r\n};\r\n\r\nexport const DEFAULT_INPUT_TEXT_WARNINGS_MESSAGES: Record<string, string> = {\r\n // No warnings for text input\r\n};\r\n\r\nexport const DEFAULT_INPUT_SLIDER_WARNING_MESSAGES: Record<string, string> = {\r\n min:'The minimium value allowed is {{limit}}',\r\n max: 'The maximum value allowed is {{limit}}',\r\n step: 'The value does not match the required step increment value of {{limit}}',\r\n};\r\n//#endregion\r\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'frg-input-validation',\n imports: [],\n templateUrl: './input-validation.component.html',\n styleUrl: './input-validation.component.scss',\n})\nexport class InputValidationComponent {\n @Input() errorList: string[] = [];\n @Input() warningList: string[] = [];\n @Input() isFormInvalid: boolean = true;\n}\n","@if(errorList.length && isFormInvalid){\n <div class=\"frg-input__error-list\">\n <ul>\n @for(error of errorList; track error){\n <li>{{ error }}</li>\n }\n </ul>\n </div>\n}\n\n@if(warningList.length){\n <div class=\"frg-input__warning-list\">\n <ul>\n @for(warning of warningList; track warning){\n <li>{{ warning }}</li>\n }\n </ul>\n </div>\n}","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'inputRequiredLabel',\r\n standalone: true\r\n})\r\nexport class InputRequiredLabelPipe implements PipeTransform {\r\n transform(label: string, isRequired: boolean): string {\r\n if (isRequired) {\r\n return `${label} *`;\r\n }\r\n return label;\r\n }\r\n}\r\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\nexport function strictEmailValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n if (!value) {\r\n return null;\r\n }\r\n const strictPattern = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$/;\r\n return strictPattern.test(value) ? null : { strictEmail: true };\r\n };\r\n}\r\n\r\n//#region [Tel validators]\r\nexport function phoneNumberValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const pattern = /^[+\\d\\s-]{7,15}$/;\r\n return pattern.test(value) ? null : { phone: true };\r\n };\r\n}\r\n\r\nexport function strictPhoneNumberValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value?.trim();\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const strictTelPattern = /^\\+[1-9]\\d{7,14}$/;\r\n return strictTelPattern.test(value) ? null : { strictPhone: true };\r\n };\r\n}\r\n//#endregion\r\n\r\n//#region [Url validator]\r\nexport function urlValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n const pattern = /^(https?:\\/\\/)?([\\w-]+(\\.[\\w-]+)+)([\\w.,@?^=%&:/~+#-]*[\\w@?^=%&/~+#-])?$/;\r\n return pattern.test(control.value) ? null : { url: true };\r\n };\r\n}\r\n\r\nexport function strictUrlValidator(): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value;\r\n\r\n if (!value) {\r\n return null;\r\n }\r\n\r\n const pattern = /^(https?:\\/\\/)([\\w-]+(\\.[\\w-]+)+)?$/;\r\n return pattern.test(value) ? null : { strictUrl: true };\r\n };\r\n}\r\n//#endregion\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport { Component, Input, OnInit } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { InputBase } from '../input-base';\r\nimport { DEFAULT_INPUT_TEXT_ERROR_MESSAGES, DEFAULT_INPUT_TEXT_WARNINGS_MESSAGES } from '../input-consts';\r\nimport { InputTextType } from '../input-type';\r\nimport { InputValidationComponent } from '../input-validation/input-validation.component';\r\nimport { InputRequiredLabelPipe } from '../input.pipe';\r\nimport { phoneNumberValidator, strictEmailValidator, strictPhoneNumberValidator, strictUrlValidator, urlValidator } from './input-text-validators';\r\n\r\n@Component({\r\n selector: 'frg-input-text',\r\n imports: [InputRequiredLabelPipe, NgTemplateOutlet, InputValidationComponent],\r\n templateUrl: './input-text.component.html',\r\n styleUrl: './input-text.component.scss',\r\n})\r\nexport class InputTextComponent extends InputBase<string> implements OnInit {\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override label: string = '';\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override placeholder: string = '';\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override required: boolean = false;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override showValidation: boolean = true;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override errorMessages: Record<string, string> = {};\r\n /**\r\n * The type of the input element.\r\n * Can be 'text', 'password', 'email', 'tel', etc.\r\n * Defaults to 'text'.\r\n *\r\n * @see InputTextType\r\n */\r\n @Input() public type: InputTextType = 'text';\r\n /**\r\n * Enables strict mode for email validation.\r\n * When set to true, the email validator will use a more stringent pattern.\r\n * Defaults to false.\r\n */\r\n @Input() public validatorStrictMode: boolean = false;\r\n\r\n protected override get errorList(): string[] {\r\n if (!this.control?.errors) return [];\r\n const errors = this.control.errors;\r\n return Object.keys(errors).map(key => {\r\n if (this.errorMessages[key]) {\r\n return this.errorMessages[key];\r\n }\r\n\r\n if (key === 'minlength' && errors[key]?.requiredLength) {\r\n return `Minimum length is ${errors[key].requiredLength} characters.`;\r\n }\r\n\r\n if (key === 'maxlength' && errors[key]?.requiredLength) {\r\n return `Maximum length is ${errors[key].requiredLength} characters.`;\r\n }\r\n\r\n return DEFAULT_INPUT_TEXT_ERROR_MESSAGES[key] || 'Invalid field.';\r\n });\r\n }\r\n\r\n /**\r\n * Handles the blur event on the input element.\r\n * Marks the control as touched.\r\n */\r\n public override onBlur(): void {\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * Handles the input event on the input element.\r\n * Updates the value and notifies the form control.\r\n */\r\n public override onInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n this.value = input.value;\r\n this.onChange(this.value);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n if (this.type === 'email' && this.control) {\r\n this.validateEmail();\r\n }\r\n if (this.type === 'tel' && this.control) {\r\n this.validatePhoneNumber();\r\n }\r\n if (this.type === 'url' && this.control){\r\n this.validateUrl();\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected updateView(_value: string | null): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected updateDisabledState(_isDisabled: boolean): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n /**\r\n * Indicates whether the password is visible or hidden.\r\n *\r\n * Used only when the input type is 'password'.\r\n */\r\n protected showPassword: boolean = false;\r\n\r\n /**\r\n * Determines the actual input type to be used in the template.\r\n * If the type is 'password', it toggles between 'text' and 'password'\r\n * based on the showPassword property.\r\n *\r\n * @returns The input type as a string.\r\n */\r\n public get inputType(): string {\r\n if (this.type === 'password') {\r\n return this.showPassword ? 'text' : 'password';\r\n }\r\n return this.type;\r\n }\r\n\r\n /**\r\n * Returns warning messages. Consumers may pass arbitrary warnings via `warningMessages`.\r\n * Falls back to DEFAULT_INPUT_TEXT_WARNINGS_MESSAGES or a generic message.\r\n */\r\n protected override get warningList(): string[] {\r\n return Object.keys(this.warningMessages).map(key => {\r\n return (\r\n this.warningMessages[key] ||\r\n DEFAULT_INPUT_TEXT_WARNINGS_MESSAGES[key] ||\r\n ''\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Returns whether any warnings are active.\r\n */\r\n protected get hasWarning(): boolean {\r\n return this.warningList.length > 0;\r\n }\r\n\r\n /**\r\n * Toggles the visibility of the password input field.\r\n * This method switches the input type between 'text' and 'password'.\r\n *\r\n * Used only when the input type is 'password'.\r\n */\r\n protected toggleShowPassword(): void {\r\n this.showPassword = !this.showPassword;\r\n }\r\n\r\n /**\r\n * Adds email validator to the control if the type is 'email'.\r\n * This ensures that the input value is a valid email address.\r\n */\r\n private validateEmail(): void {\r\n const existingValidators = this.control?.validator\r\n ? [this.control.validator]\r\n : [];\r\n\r\n this.control?.setValidators([\r\n ...existingValidators,\r\n this.validatorStrictMode ? strictEmailValidator() : Validators.email\r\n ]);\r\n\r\n this.control?.updateValueAndValidity();\r\n }\r\n\r\n private validatePhoneNumber(): void {\r\n const existingValidators = this.control?.validator\r\n ? [this.control.validator]\r\n : [];\r\n\r\n this.control?.setValidators([\r\n ...existingValidators,\r\n this.validatorStrictMode ? strictPhoneNumberValidator() : phoneNumberValidator()\r\n ]);\r\n\r\n this.control?.updateValueAndValidity();\r\n }\r\n\r\n private validateUrl(): void {\r\n const existingValidators = this.control?.validator\r\n ? [this.control.validator]\r\n : [];\r\n\r\n this.control?.setValidators([\r\n ...existingValidators,\r\n this.validatorStrictMode ? strictUrlValidator() : urlValidator()\r\n ]);\r\n\r\n this.control?.updateValueAndValidity();\r\n }\r\n}\r\n","<div class=\"frg-input__wrapper\"\r\n [class.input-error]=\"hasError\"\r\n [class.input-warning]=\"hasWarning\"\r\n>\r\n @if(label){\r\n <label [for]=\"id\">{{ label | inputRequiredLabel: required }}</label>\r\n }\r\n\r\n <input\r\n [id]=\"id\"\r\n [type]=\"inputType\"\r\n [placeholder]=\"placeholder\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [value]=\"value\"\r\n (input)=\"onInput($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n\r\n @if(type === 'password') {\r\n <ng-container *ngTemplateOutlet=\"passwordToggleTemplate\"></ng-container>\r\n }\r\n @else if(type === 'email') {\r\n <ng-container *ngTemplateOutlet=\"emailExtraTemplate\"></ng-container>\r\n }\r\n @else if(type === 'tel') {\r\n <ng-container *ngTemplateOutlet=\"phoneExtraTemplate\"></ng-container>\r\n }\r\n @else if(type === 'url') {\r\n <ng-container *ngTemplateOutlet=\"urlExtraTemplate\"></ng-container>\r\n }\r\n\r\n</div>\r\n\r\n @if(showValidation) {\r\n <frg-input-validation\r\n [errorList]=\"errorList\"\r\n [warningList]=\"warningList\"\r\n [isFormInvalid]=\"hasError\"\r\n >\r\n </frg-input-validation>\r\n }\r\n\r\n<!-- Templates -->\r\n<ng-template #passwordToggleTemplate>\r\n <button type=\"button\" class=\"frg-input__toggle-password\" (click)=\"toggleShowPassword()\">\r\n @if(showPassword){\r\n <span class=\"far fa-eye-slash\"></span>\r\n } @else {\r\n <span class=\"far fa-eye\"></span>\r\n }\r\n </button>\r\n</ng-template>\r\n\r\n<ng-template #emailExtraTemplate>\r\n <div class=\"frg-input__email-container\">\r\n <span class=\"far fa-envelope\"></span>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #phoneExtraTemplate>\r\n <div class=\"frg-input__phone-container\">\r\n <span class=\"fas fa-mobile-screen\"></span>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #urlExtraTemplate>\r\n <div class=\"frg-input__url-container\">\r\n <span class=\"fas fa-link\"></span>\r\n </div>\r\n</ng-template>\r\n","/**\r\n * Normalizes the value of an <input type=\"number\">.\r\n *\r\n * - Returns a valid number if the input contains a numeric value\r\n * - Returns null if the input is empty or not a valid number\r\n *\r\n * This helper ensures consistency between the raw input value\r\n * and the form control value, preventing unintended NaN values.\r\n *\r\n * @param input The HTML input element of type \"number\"\r\n * @returns number | null\r\n */\r\nexport function normalizeNumber(input: HTMLInputElement): number | null {\r\n const num = input.valueAsNumber;\r\n return isNaN(num) ? null : num;\r\n}\r\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { InputBase } from '../input-base';\r\nimport {\r\n DEFAULT_INPUT_NUMBER_ERROR_MESSAGES,\r\n DEFAULT_INPUT_NUMBER_WARNING_MESSAGES,\r\n} from '../input-consts';\r\nimport { InputNumberType } from '../input-type';\r\nimport { normalizeNumber } from '../../../utils/number.utils';\r\nimport { InputRequiredLabelPipe } from '../input.pipe';\r\nimport { InputValidationComponent } from '../input-validation/input-validation.component';\r\n\r\n@Component({\r\n selector: 'frg-input-number',\r\n imports: [InputRequiredLabelPipe, InputValidationComponent],\r\n templateUrl: './input-number.component.html',\r\n styleUrl: './input-number.component.scss',\r\n})\r\nexport class InputNumberComponent extends InputBase<number | null> implements OnInit {\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override label: string = '';\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override placeholder: string = '';\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override required: boolean = false;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override showValidation: boolean = true;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override errorMessages: Record<string, string> = {};\r\n\r\n /**\r\n * The type of the input element.\r\n * Can be 'number' or 'decimal'.\r\n * Defaults to 'number'.\r\n */\r\n @Input() public type: InputNumberType = 'number';\r\n\r\n /**\r\n * Minimum allowed value for the input.\r\n */\r\n @Input() public min: number | null = null;\r\n\r\n /**\r\n * Maximum allowed value for the input.\r\n */\r\n @Input() public max: number | null = null;\r\n\r\n /**\r\n * Increment/decrement step for the input value.\r\n */\r\n @Input() public step: number | null = null;\r\n\r\n /**\r\n * Maximum number of decimal places allowed.\r\n */\r\n @Input() public precision: number | null = null;\r\n\r\n /**\r\n * Enables strict mode for validation.\r\n * Defaults to false.\r\n */\r\n @Input() public validatorStrictMode: boolean = false;\r\n\r\n /** Internal store for warnings */\r\n private warnings: Record<string, boolean> = {};\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n this.initPlaceholder();\r\n }\r\n\r\n /**\r\n * Returns the step value for the input based on type and precision.\r\n */\r\n public get inputStep(): number {\r\n if (this.step != null) return this.step;\r\n if (this.type === 'decimal') return this.precision ? Math.pow(10, -this.precision) : 0.01;\r\n return 1;\r\n }\r\n\r\n /**\r\n * Handles blur event:\r\n * - Aligns value to step\r\n * - Clamps to min/max/precision\r\n * - Runs validation\r\n */\r\n protected override onBlur(event: FocusEvent): void {\r\n const relatedTarget = event.relatedTarget as HTMLElement | null;\r\n const isStepButton = relatedTarget?.classList.contains('frg-input__number__arrow');\r\n\r\n if (this.value != null && !isStepButton) {\r\n this.validate(this.value);\r\n const snappedValue = this.step ? this.alignToStep(this.value, this.inputStep) : this.value;\r\n this.value = this.applyClamping(snappedValue);\r\n }\r\n\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * Handles input event:\r\n * - Normalizes value\r\n * - Runs validation\r\n */\r\n protected override onInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n this.value = normalizeNumber(input);\r\n\r\n if (this.value != null) {\r\n this.validate(this.value);\r\n }\r\n\r\n this.onChange(this.value);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected updateView(_value: number | null): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected updateDisabledState(_isDisabled: boolean): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n /**\r\n * Returns error messages, excluding warnings.\r\n */\r\n protected override get errorList(): string[] {\r\n if (!this.control?.errors) return [];\r\n return Object.keys(this.control.errors)\r\n .filter(key => !key.startsWith('warning_'))\r\n .map(key => this.errorMessages[key] ?? DEFAULT_INPUT_NUMBER_ERROR_MESSAGES[key] ?? 'Invalid field.');\r\n }\r\n\r\n /**\r\n * Returns dynamic warning messages, replacing {{limit}} with actual values.\r\n */\r\n protected override get warningList(): string[] {\r\n return Object.keys(this.warnings).map(key => {\r\n const template = DEFAULT_INPUT_NUMBER_WARNING_MESSAGES[key] || 'Check this value.';\r\n\r\n let limit: number | undefined;\r\n switch (key) {\r\n case 'min':\r\n limit = this.min ?? undefined;\r\n break;\r\n case 'max':\r\n limit = this.max ?? undefined;\r\n break;\r\n case 'step':\r\n limit = this.inputStep;\r\n break;\r\n case 'precision':\r\n limit = this.precision ?? undefined;\r\n break;\r\n default:\r\n limit = undefined;\r\n }\r\n\r\n return limit != null ? template.replace('{{limit}}', limit.toString()) : template;\r\n });\r\n }\r\n\r\n /**\r\n * Returns whether any warnings are active.\r\n */\r\n protected get hasWarning(): boolean {\r\n return this.warningList.length > 0;\r\n }\r\n\r\n /**\r\n * Increase value by step, respecting precision, step alignment and max.\r\n */\r\n protected increase(): void {\r\n const step = this.inputStep;\r\n const baseValue = this.value ?? this.min ?? 0;\r\n\r\n let newValue: number;\r\n\r\n if (this.step != null) {\r\n const snapped = this.alignToStep(baseValue, step);\r\n newValue = snapped === baseValue ? baseValue + step : snapped;\r\n } else {\r\n newValue = baseValue + step;\r\n }\r\n\r\n newValue = +newValue.toFixed(this.precision ?? 12);\r\n newValue = this.applyClamping(newValue);\r\n this.validate(newValue);\r\n\r\n if (newValue !== this.value) {\r\n this.value = newValue;\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n /**\r\n * Decrease value by step, respecting precision, step alignment and min.\r\n */\r\n protected decrease(): void {\r\n const step = this.inputStep;\r\n const baseValue = this.value ?? this.min ?? 0;\r\n\r\n let newValue: number;\r\n\r\n if (this.step != null) {\r\n const snapped = this.alignToStep(baseValue, step);\r\n newValue = snapped === baseValue ? baseValue - step : snapped;\r\n } else {\r\n newValue = baseValue - step;\r\n }\r\n\r\n newValue = +newValue.toFixed(this.precision ?? 12);\r\n newValue = this.applyClamping(newValue);\r\n this.validate(newValue);\r\n\r\n if (newValue !== this.value) {\r\n this.value = newValue;\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n /**\r\n * Clamps a value to respect precision, min, and max\r\n * @param value Value to clamp\r\n */\r\n private applyClamping(value: number): number {\r\n let clampedValue = value;\r\n\r\n if (this.precision != null) {\r\n clampedValue = +clampedValue.toFixed(this.precision);\r\n }\r\n if (this.max != null && clampedValue > this.max) {\r\n clampedValue = this.max;\r\n }\r\n if (this.min != null && clampedValue < this.min) {\r\n clampedValue = this.min;\r\n }\r\n\r\n return clampedValue;\r\n }\r\n\r\n /**\r\n * Validates a value against precision, min, max, and step\r\n * @param value Value to validate\r\n */\r\n private validate(value: number): void {\r\n if (this.precision != null) {\r\n const decimals = this.countDecimals(value);\r\n if (decimals > this.precision) {\r\n this.addWarning('precision');\r\n } else {\r\n this.removeWarning('precision');\r\n }\r\n }\r\n\r\n if (this.max != null && value > this.max) {\r\n this.addWarning('max');\r\n } else {\r\n this.removeWarning('max');\r\n }\r\n\r\n if (this.min != null && value < this.min) {\r\n this.addWarning('min');\r\n } else {\r\n this.removeWarning('min');\r\n }\r\n\r\n if (this.step != null) {\r\n const base = this.min ?? 0;\r\n const diff = (value - base) / this.step;\r\n if (!Number.isInteger(diff)) {\r\n this.addWarning('step');\r\n } else {\r\n this.removeWarning('step');\r\n }\r\n }\r\n }\r\n\r\n /** Initializes placeholder based on type */\r\n private initPlaceholder(): void {\r\n if (!this.placeholder) {\r\n this.placeholder = this.type === 'decimal' ? (0).toFixed(this.precision ?? 2) : '0';\r\n }\r\n }\r\n\r\n /**\r\n * Adds a warning flag\r\n * @param key Warning type\r\n */\r\n private addWarning(key: string): void {\r\n this.warnings[key] = true;\r\n }\r\n\r\n /**\r\n * Removes a warning flag\r\n * @param key Warning type\r\n */\r\n private removeWarning(key: string): void {\r\n delete this.warnings[key];\r\n }\r\n\r\n /**\r\n * Aligns a value to the nearest multiple of step\r\n * @param value Value to align\r\n * @param step Step size\r\n */\r\n private alignToStep(value: number, step: number): number {\r\n const base = this.min ?? 0;\r\n const offset = value - base;\r\n const steps = Math.round(offset / step);\r\n return base + steps * step;\r\n }\r\n\r\n /**\r\n * Counts the number of decimals in a number\r\n * @param num Number to check\r\n */\r\n private countDecimals(num: number): number {\r\n if (Math.floor(num) === num) return 0;\r\n return num.toString().split('.')[1]?.length ?? 0;\r\n }\r\n}\r\n","<div class=\"frg-input__wrapper\"\r\n [class.input-error]=\"hasError\"\r\n [class.input-warning]=\"hasWarning\"\r\n>\r\n @if(label){\r\n <label [for]=\"id\">{{ label | inputRequiredLabel: required }}</label>\r\n }\r\n\r\n <div class=\"frg-input__number__container\">\r\n <button\r\n type=\"button\"\r\n class=\"frg-input__number__arrow frg-input__number__arrow--decrement\"\r\n (click)=\"decrease()\"\r\n aria-label=\"Decrease value\"\r\n >\r\n −\r\n </button>\r\n\r\n <input\r\n [id]=\"id\"\r\n type=\"number\"\r\n [placeholder]=\"placeholder\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [attr.step]=\"inputStep\"\r\n [attr.min]=\"min\"\r\n [attr.max]=\"max\"\r\n [value]=\"value\"\r\n (input)=\"onInput($event)\"\r\n (blur)=\"onBlur($event)\"\r\n />\r\n\r\n <button\r\n type=\"button\"\r\n class=\"frg-input__number__arrow frg-input__number__arrow--increment\"\r\n (click)=\"increase()\"\r\n aria-label=\"Increase value\"\r\n >\r\n +\r\n </button>\r\n </div>\r\n</div>\r\n\r\n@if (showValidation) {\r\n <frg-input-validation\r\n [errorList]=\"errorList\"\r\n [warningList]=\"warningList\"\r\n [isFormInvalid]=\"hasError\"\r\n >\r\n </frg-input-validation>\r\n}","import { InputTimePartial } from \"../components/input/input-type\";\r\nimport { DateFormat, DateTimeFormat, TimeFormat } from \"../types/common.types\";\r\n\r\nexport function isValidDate(dateString: string, format: DateFormat = \"yyyy-MM-dd\"): boolean {\r\n if (format !== 'yyyy-MM-dd') {\r\n const isoString = convertStringToISODate(dateString, format);\r\n\r\n if (!isoString)\r\n return false;\r\n\r\n const dateObj = new Date(isoString);\r\n return !isNaN(dateObj.getTime());\r\n }\r\n\r\n const dateObject: Date = new Date(dateString);\r\n return !isNaN(dateObject.getTime());\r\n}\r\n\r\n/**\r\n * Checks if a given datetime string matches a given format and represents a valid date/time.\r\n */\r\nexport function isValidDateTime(\r\n dateTimeString: string,\r\n format: DateTimeFormat = \"yyyy-MM-dd'T'HH:mm\"\r\n): boolean {\r\n if (!dateTimeString)\r\n return false;\r\n\r\n // If it's not the standard ISO-like format, convert it manually\r\n if (format !== \"yyyy-MM-dd'T'HH:mm\" && format !== \"yyyy-MM-dd'T'HH:mm:ss\") {\r\n const isoString = convertStringToISODateTime(dateTimeString, format);\r\n\r\n if (!isoString)\r\n return false;\r\n\r\n const dateObj = new Date(isoString);\r\n return !isNaN(dateObj.getTime());\r\n }\r\n\r\n // If it's already in ISO-like format, just check directly\r\n const dateObject = new Date(dateTimeString);\r\n return !isNaN(dateObject.getTime());\r\n}\r\n\r\nexport function convertStringToISODate(dateString: string, format: DateFormat = \"yyyy-MM-dd\"): string | null {\r\n const formatRegex: RegExp = buildDateFormatRegex(format);\r\n const match = formatRegex.exec(dateString);\r\n\r\n if (!match?.groups) return null;\r\n\r\n const { day, month, year } = match.groups;\r\n\r\n const d = parseInt(day, 10);\r\n const m = parseInt(month, 10) - 1;\r\n let y = parseInt(year, 10);\r\n\r\n if (year.length === 2) {\r\n y += y >= 70 ? 1900 : 2000;\r\n }\r\n\r\n const date = new Date(y, m, d);\r\n\r\n if (date.getFullYear() !== y || date.getMonth() !== m || date.getDate() !== d) {\r\n return null;\r\n }\r\n\r\n return date.toISOString();\r\n}\r\n\r\n/**\r\n * Converts a date-time string (in a given format) to an ISO 8601 string.\r\n * Returns null if invalid or if the string doesn't match the format.\r\n */\r\nexport function convertStringToISODateTime(\r\n dateTimeString: string,\r\n format: DateTimeFormat = \"yyyy-MM-dd'T'HH:mm\"\r\n): string | null {\r\n const formatRegex: RegExp = buildDateTimeFormatRegex(format);\r\n const match = formatRegex.exec(dateTimeString.trim());\r\n\r\n if (!match?.groups) return null;\r\n\r\n const { day, month, year, hour, minute, second, period } = match.groups;\r\n\r\n const d = parseInt(day, 10);\r\n const m = parseInt(month, 10) - 1;\r\n let y = parseInt(year, 10);\r\n let h = parseInt(hour ?? '0', 10);\r\n const min = parseInt(minute ?? '0', 10);\r\n const s = parseInt(second ?? '0', 10);\r\n\r\n // Handle two-digit years\r\n if (year.length === 2) {\r\n y += y >= 70 ? 1900 : 2000;\r\n }\r\n\r\n // Handle AM/PM\r\n if (period) {\r\n const p = period.toUpperCase();\r\n if (p === 'PM' && h < 12) h += 12;\r\n if (p === 'AM' && h === 12) h = 0;\r\n }\r\n\r\n const date = new Date(y, m, d, h, min, s);\r\n\r\n // Validation: ensure components didn’t overflow\r\n if (\r\n date.getFullYear() !== y ||\r\n date.getMonth() !== m ||\r\n date.getDate() !== d ||\r\n date.getHours() !== h ||\r\n date.getMinutes() !== min ||\r\n date.getSeconds() !== s\r\n ) {\r\n return null;\r\n }\r\n\r\n return date.toISOString();\r\n}\r\n\r\nexport function convertStringToDate(dateString: string, format: DateFormat = \"yyyy-MM-dd\"): Date | null {\r\n const formatRegex: RegExp = buildDateFormatRegex(format);\r\n const match = formatRegex.exec(dateString);\r\n\r\n if (!match?.groups) return null;\r\n\r\n const { day, month, year } = match.groups;\r\n\r\n const d = parseInt(day, 10);\r\n const m = parseInt(month, 10) - 1;\r\n let y = parseInt(year, 10);\r\n\r\n if (year.length === 2) {\r\n y += y >= 70 ? 1900 : 2000;\r\n }\r\n\r\n return new Date(y, m, d);\r\n}\r\n\r\nexport function convertStringToTime(\r\n timeString: string,\r\n format: TimeFormat = \"HH:mm\"\r\n): number | null {\r\n const regex = buildTimeFormatRegex(format);\r\n const match = regex.exec(timeString);\r\n\r\n if (!match?.groups) return null;\r\n\r\n let hours = 0;\r\n const minutes = match.groups[\"minute\"] ? parseInt(match.groups[\"minute\"], 10) : 0;\r\n const seconds = match.groups[\"second\"] ? parseInt(match.groups[\"second\"], 10) : 0;\r\n\r\n if (match.groups[\"hour24\"]) {\r\n hours = parseInt(match.groups[\"hour24\"], 10);\r\n } else if (match.groups[\"hour12\"]) {\r\n hours = parseInt(match.groups[\"hour12\"], 10);\r\n const period = match.groups[\"period\"]?.toUpperCase();\r\n if (period) {\r\n if (hours === 12) hours = period === \"AM\" ? 0 : 12;\r\n else if (period === \"PM\") hours += 12;\r\n }\r\n }\r\n\r\n return hours * 3600 + minutes * 60 + seconds;\r\n}\r\n\r\n/**\r\n * Converts a datetime string (based on a given format) into a Date object.\r\n * Returns null if parsing fails or values are invalid.\r\n */\r\nexport function convertStringToDateTime(\r\n dateTimeString: string,\r\n format: DateTimeFormat = \"yyyy-MM-dd'T'HH:mm\"\r\n): Date | null {\r\n const regex = buildDateTimeFormatRegex(format);\r\n const match = regex.exec(dateTimeString.trim());\r\n\r\n if (!match?.groups) return null;\r\n\r\n const separatorMatch = format.match(/( |T)/);\r\n let datePart: string = format;\r\n let timePart: string | null = null;\r\n\r\n if (separatorMatch) {\r\n const separator = separatorMatch[0];\r\n const parts = format.split(separator);\r\n datePart = parts[0];\r\n timePart = parts[1] ?? null;\r\n }\r\n\r\n const dateString = timePart\r\n ? dateTimeString.split(/T| /)[0]\r\n : dateTimeString;\r\n\r\n const timeString = timePart\r\n ? dateTimeString.split(/T| /)[1]\r\n : undefined;\r\n\r\n const date = convertStringToDate(dateString, datePart as any);\r\n if (!date) return null;\r\n\r\n let totalSeconds = 0;\r\n if (timeString && timePart) {\r\n const seconds = convertStringToTime(timeString, timePart as any);\r\n if (seconds == null) return null;\r\n totalSeconds = seconds;\r\n }\r\n\r\n const hours = Math.floor(totalSeconds / 3600);\r\n const minutes = Math.floor((totalSeconds % 3600) / 60);\r\n const seconds = totalSeconds % 60;\r\n\r\n date.setHours(hours, minutes, seconds, 0);\r\n\r\n return date;\r\n}\r\n\r\n/**\r\n * Builds a regex to validate date strings based on the provided format.\r\n * Supports formats like \"dd/MM/yyyy\", \"MM-dd-yyyy\", \"yyyy.MM.dd\", etc.\r\n * @param format The date format string\r\n */\r\nexport function buildDateFormatRegex(format: string): RegExp {\r\n const escaped = format.replace(/[-/.]/g, m => `\\\\${m}`);\r\n\r\n const pattern = escaped\r\n .replace(\"dd\", \"(?<day>\\\\d{2})\")\r\n .replace(\"MM\", \"(?<month>\\\\d{2})\")\r\n .replace(\"yyyy\", \"(?<year>\\\\d{4})\")\r\n .replace(\"yy\", \"(?<year>\\\\d{2})\");\r\n\r\n return new RegExp(`^${pattern}$`);\r\n}\r\n\r\n/**\r\n * Builds a regex to validate time strings based on the provided format.\r\n * Supports formats like \"HH:mm\", \"hh:mm a\", \"HH:mm:ss\", etc.\r\n * @param format The time format string\r\n */\r\nexport function buildTimeFormatRegex(format: string): RegExp {\r\n const escaped = format.replace(/[-:. ]/g, m => `\\\\${m}`);\r\n const pattern = escaped\r\n .replace(\"HH\", \"(?<hour24>[01]?[0-9]|2[0-3])\")\r\n .replace(\"hh\", \"(?<hour12>0?[1-9]|1[0-2])\")\r\n .replace(\"mm\", \"(?<minute>[0-5]?[0-9])\")\r\n .replace(\"ss\", \"(?<second>[0-5]?[0-9])\")\r\n .replace(\"a\", \"(?<period>AM|PM|am|pm)\");\r\n\r\n return new RegExp(`^${pattern}$`);\r\n}\r\n/**\r\n * Builds a regex to match full date-time strings.\r\n * Handles both date and time tokens in a single format string (with optional AM/PM).\r\n */\r\nexport function buildDateTimeFormatRegex(format: string): RegExp {\r\n // Try to find a separator between date and time parts\r\n const separatorMatch = format.match(/( |T)/);\r\n if (!separatorMatch) {\r\n // Fallback: only date\r\n return buildDateFormatRegex(format);\r\n }\r\n\r\n const separator = separatorMatch[0];\r\n\r\n // Handle formats like \"MM/dd/yyyy hh:mm a\" or \"dd/MM/yyyy HH:mm:ss\"\r\n const firstSplit = format.split(separator);\r\n\r\n // If there's an AM/PM part, join everything after the first split back together\r\n const datePart = firstSplit[0];\r\n const timePart = firstSplit.slice(1).join(separator);\r\n\r\n const dateRegexSource = buildDateFormatRegex(datePart)\r\n .source.replace(/^\\^|\\$$/g, '');\r\n const timeRegexSource = buildTimeFormatRegex(timePart)\r\n .source.replace(/^\\^|\\$$/g, '');\r\n\r\n const fullPattern = `^${dateRegexSource}${separator}${timeRegexSource}$`;\r\n return new RegExp(fullPattern);\r\n}\r\n\r\n/**\r\n * Converts a Date object into a string according to the specified format.\r\n */\r\nexport function formatDateToString(date: Date, format: DateFormat = 'yyyy-MM-dd'): string {\r\n const day = String(date.getDate()).padStart(2, \"0\");\r\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const year = String(date.getFullYear());\r\n\r\n const shortMonthNames = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\r\n const longMonthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\r\n\r\n return format\r\n .replace(\"dd\", day)\r\n .replace(\"MM\", month)\r\n .replace(\"yyyy\", year)\r\n .replace(\"yy\", year.slice(-2))\r\n .replace(\"MMM\", shortMonthNames[date.getMonth()])\r\n .replace(\"MMMM\", longMonthNames[date.getMonth()]);\r\n}\r\n\r\nexport function formatDateTimeToString(\r\n date: Date,\r\n format: DateTimeFormat = \"yyyy-MM-dd'T'HH:mm\"\r\n): string {\r\n const day = String(date.getDate()).padStart(2, \"0\");\r\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\r\n const year = String(date.getFullYear());\r\n\r\n const hours24 = String(date.getHours()).padStart(2, \"0\");\r\n const hours12Raw = date.getHours() % 12 || 12;\r\n const hours12 = String(hours12Raw).padStart(2, \"0\");\r\n const minutes = String(date.getMinutes()).padStart(2, \"0\");\r\n const seconds = String(date.getSeconds()).padStart(2, \"0\");\r\n const ampm = date.getHours() >= 12 ? \"PM\" : \"AM\";\r\n\r\n const shortMonthNames = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\r\n const longMonthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\r\n\r\n return format\r\n // Date replacements\r\n .replace(\"dd\", day)\r\n .replace(\"MM\", month)\r\n .replace(\"yyyy\", year)\r\n .replace(\"yy\", year.slice(-2))\r\n .replace(\"MMM\", shortMonthNames[date.getMonth()])\r\n .replace(\"MMMM\", longMonthNames[date.getMonth()])\r\n // Time replacements\r\n .replace(\"HH\", hours24)\r\n .replace(\"hh\", hours12)\r\n .replace(\"mm\", minutes)\r\n .replace(\"ss\", seconds)\r\n .replace(\"a\", ampm);\r\n}\r\n\r\n/** Extracts AM/PM from a time string and returns the core time without it */\r\nexport function extractMeridiem(time: string): { coreTime: string; meridiem?: 'AM' | 'PM' } {\r\n const meridiemRegex = /\\s?(AM|PM)$/i;\r\n const match = meridiemRegex.exec(time.trim());\r\n if (match) {\r\n return { coreTime: time.replace(meridiemRegex, '').trim(), meridiem: match[1].toUpperCase() as 'AM' | 'PM' };\r\n }\r\n return { coreTime: time.trim() };\r\n}\r\n\r\n/** Safely parse a number and clamp it to a range, or return NaN if invalid */\r\nexport function parseAndClamp(value?: string, min = 0, max = 59): number {\r\n const num = value ? Number(value) : NaN;\r\n return !isNaN(num) ? Math.min(Math.max(num, min), max) : NaN;\r\n}\r\n\r\n/** Pads a number with leading zero, or returns placeholder if NaN */\r\nexport function padOrPlaceholder(num: number, placeholder: string): string {\r\n return !isNaN(num) ? String(num).padStart(2, '0') : placeholder;\r\n}\r\n\r\n/** Determine meridiem if not explicitly provided */\r\nexport function resolveMeridiem(meridiem?: 'AM' | 'PM', hours?: number): 'AM' | 'PM' {\r\n if (meridiem) return meridiem;\r\n if (hours !== undefined && !isNaN(hours)) return hours >= 12 ? 'PM' : 'AM';\r\n return 'AM';\r\n}\r\n\r\n/** Main function refactored to use small utilities */\r\nexport function formatTimeToString(\r\n time: string,\r\n format: TimeFormat = 'HH:mm',\r\n partialTime?: InputTimePartial\r\n): string {\r\n if (!time) return '';\r\n\r\n const { coreTime, meridiem } = extractMeridiem(time);\r\n const segments = coreTime.split(':');\r\n\r\n const hours = parseAndClamp(segments[0], 0, 23);\r\n const minutes = parseAndClamp(segments[1], 0, 59);\r\n const seconds = parseAndClamp(segments[2], 0, 59);\r\n\r\n const h = padOrPlaceholder(hours, 'HH');\r\n const m = padOrPlaceholder(minutes, 'mm');\r\n const s = padOrPlaceholder(seconds, 'ss');\r\n const a = resolveMeridiem(meridiem, hours);\r\n\r\n if (partialTime) {\r\n switch (partialTime) {\r\n case 'hour': return h;\r\n case 'minute': return m;\r\n case 'second': return s;\r\n case 'meridiem': return a;\r\n }\r\n }\r\n\r\n return format\r\n .replace('HH', h)\r\n .replace('hh', h)\r\n .replace('mm', m)\r\n .replace('ss', s)\r\n .replace('a', a);\r\n}\r\n\r\n/**\r\n * Converts a time string into total minutes.\r\n * Supports optional seconds and AM/PM.\r\n *\r\n * @param time Time string (\"HH:mm\", \"HH:mm:ss\", or \"hh:mm AM/PM\").\r\n * @returns Total minutes (including fractional for seconds), or null if invalid.\r\n */\r\nexport function parseTimeToMinutes(time: string): number | null {\r\n const regex = /^(\\d{1,2}):(\\d{2})(?::(\\d{2}))?\\s*(AM|PM)?$/i;\r\n const match = regex.exec(time);\r\n\r\n if (!match) return null;\r\n\r\n let hours = parseInt(match[1], 10);\r\n const minutes = parseInt(match[2], 10);\r\n const seconds = match[3] ? parseInt(match[3], 10) : 0;\r\n const period = match[4]?.toUpperCase();\r\n\r\n if (period) {\r\n if (hours === 12) {\r\n hours = period === \"AM\" ? 0 : 12;\r\n } else if (period === \"PM\") {\r\n hours += 12;\r\n }\r\n }\r\n\r\n return hours * 60 + minutes + seconds / 60;\r\n}\r\n\r\n/**\r\n * Determines if the given time format uses a 12-hour (meridiem) format.\r\n * Example: \"hh:mm a\" → true, \"HH:mm\" → false\r\n */\r\nexport function isMeridiemFormat(format?: TimeFormat | null): boolean {\r\n if (!format) return false;\r\n return format.includes('a') || format.includes('A');\r\n}\r\n\r\n/**\r\n * Extracts and returns the time format part of a DateTime format string.\r\n * Example: \"dd/MM/yyyy HH:mm\" → \"HH:mm\"\r\n */\r\nexport function extractTimeFormat(dateTimeFormat: string): TimeFormat | null {\r\n const regex = /\\b[Hh]{1,2}:mm(?::ss)?(?:\\s?[aA])?\\b/;\r\n const match = regex.exec(dateTimeFormat);\r\n\r\n if (!match) return null;\r\n\r\n const timePart = match[0].trim();\r\n\r\n const allowedFormats: TimeFormat[] = ['HH:mm', 'HH:mm:ss', 'hh:mm a', 'hh:mm:ss a'];\r\n return allowedFormats.includes(timePart as TimeFormat) ? (timePart as TimeFormat) : null;\r\n}\r\n\r\n/**\r\n * Calculates the rotation angle (in degrees) for an hour hand on a 12-hour clock.\r\n *\r\n * @param hour - The hour value as a string (0-23 or 0-12).\r\n * @returns The rotation angle in degrees, where 0 degrees is at 12 o'clock.\r\n */\r\nexport function calculateHourDegree(hour: string): number {\r\n const num = Number.parseInt(hour, 10);\r\n return ((num % 12) * 30 - 90);\r\n}\r\n\r\n/**\r\n * Calculates the rotation angle (in degrees) for a minute hand on a clock.\r\n *\r\n * @param minute - The minute value as a string (0-59).\r\n * @returns The rotation angle in degrees, where 0 degrees is at 12 o'clock.\r\n */\r\nexport function calculateMinuteDegree(minute: string): number {\r\n const num = Number.parseInt(minute, 10);\r\n return (num * 6 - 90);\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n name: 'chunk',\r\n pure: true\r\n})\r\nexport class ChunkPipe implements PipeTransform {\r\n transform<T>(array: T[], size: number): T[][] {\r\n if (!array || size <= 0) return [];\r\n const chunks: T[][] = [];\r\n for (let i = 0; i < array.length; i += size) {\r\n chunks.push(array.slice(i, i + size));\r\n }\r\n return chunks;\r\n }\r\n}\r\n","import { AsyncPipe, formatDate } from '@angular/common';\r\nimport { Component, EventEmitter, inject, Input, LOCALE_ID, OnInit, Output } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ChunkPipe } from '../../../pipes/chunk.pipe';\r\n\r\n@Component({\r\n selector: 'frg-input-calendar',\r\n imports: [ChunkPipe, AsyncPipe],\r\n templateUrl: './input-calendar.component.html',\r\n styleUrl: './input-calendar.component.scss',\r\n})\r\nexport class InputCalendarComponent implements OnInit {\r\n private readonly locale: string = inject(LOCALE_ID);\r\n\r\n /**\r\n * Current day\r\n */\r\n public currentDay: number = new Date().getDate();\r\n /**\r\n * Month is 0 indexed in JavaScript Date, so we add 1 to make it 1 indexed\r\n */\r\n public currentMonth: number = new Date().getMonth() + 1;\r\n /**\r\n * Current year\r\n */\r\n public currentYear: number = new Date().getFullYear();\r\n\r\n /**\r\n * Minimum date selectable in the calendar\r\n * @default 0\r\n */\r\n @Input() public minDate: Date = new Date(0, 0, 1);\r\n /**\r\n * Maximum date selectable in the calendar\r\n * @default 9999-12-31\r\n */\r\n @Input() public maxDate: Date = new Date(9999, 11, 31);\r\n /**\r\n * The currently selected date\r\n * @default null\r\n */\r\n @Input() public selectedValue: Date | null = null;\r\n /**\r\n * Event emitted when a date is selected\r\n * @type {EventEmitter<Date>}\r\n */\r\n @Output() selectDate = new EventEmitter<Date>();\r\n /**\r\n * Event emitted when value is hi than max date\r\n * @type {EventEmitter<Date>}\r\n */\r\n @Output() handleMaxDate = new EventEmitter<Date>();\r\n /**\r\n * Event emitted when value is less than min date\r\n * @type {EventEmitter<Date>}\r\n */\r\n @Output() handleMinDate = new EventEmitter<Date>();\r\n\r\n /**\r\n * Used for show month selection\r\n */\r\n public hasMonthSelectionOpen$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n\r\n /**\r\n * Used for show year selection\r\n */\r\n public hasYearSelectionOpen$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n\r\n /**\r\n * Array of dates to display in the calendar\r\n */\r\n public get calendarDays(): Date[] {\r\n const days: Date[] = [];\r\n const monthIndex = this.currentMonth - 1;\r\n const firstDayOfMonth = new Date(this.currentYear, monthIndex, 1);\r\n const lastDayOfMonth = new Date(this.currentYear, monthIndex + 1, 0);\r\n\r\n const startDayOfWeek = firstDayOfMonth.getDay();\r\n for (let i = startDayOfWeek - 1; i >= 0; i--) {\r\n days.push(new Date(this.currentYear, monthIndex, -i));\r\n }\r\n\r\n for (let day = 1; day <= lastDayOfMonth.getDate(); day++) {\r\n days.push(new Date(this.currentYear, monthIndex, day));\r\n }\r\n\r\n const endDayOfWeek = lastDayOfMonth.getDay();\r\n for (let i = 1; i < 7 - endDayOfWeek; i++) {\r\n days.push(new Date(this.currentYear, monthIndex + 1, i));\r\n }\r\n return days;\r\n }\r\n\r\n /**\r\n * Get the short names of the weekdays based on the current locale\r\n */\r\n public get weekDays(): string[] {\r\n const referenceDate = new Date(2025, 0, 5);\r\n const week: string[] = [];\r\n\r\n for (let i = 0; i < 7; i++) {\r\n const day = new Date(referenceDate);\r\n day.setDate(referenceDate.getDate() + i);\r\n week.push(formatDate(day, 'EEE', this.locale));\r\n }\r\n\r\n return week;\r\n }\r\n\r\n public get years(): number[] {\r\n const years: number[] = [];\r\n for (let y = this.minDate.getFullYear(); y <= this.maxDate.getFullYear(); y++) {\r\n years.push(y);\r\n }\r\n return years;\r\n }\r\n\r\n public get months(): string[] {\r\n const months: string[] = [];\r\n for (let m = 0; m < 12; m++) {\r\n const date = new Date(this.currentYear, m, 1);\r\n months.push(formatDate(date, 'LLLL', this.locale));\r\n }\r\n return months;\r\n }\r\n\r\n /**\r\n * Get the current month in long format (e.g., January, February)\r\n */\r\n public get month(): string {\r\n const date = new Date(this.currentYear, this.currentMonth - 1);\r\n return formatDate(date, 'LLLL', this.locale);\r\n }\r\n\r\n /**\r\n * Get the current year as a string\r\n */\r\n public get year(): string {\r\n return this.currentYear.toString();\r\n }\r\n\r\n ngOnInit() {\r\n if (this.selectedValue) {\r\n this.currentDay = this.selectedValue.getDate();\r\n this.currentMonth = this.selectedValue.getMonth() + 1;\r\n this.currentYear = this.selectedValue.getFullYear();\r\n } else {\r\n const today = new Date();\r\n this.currentDay = today.getDate();\r\n this.currentMonth = today.getMonth() + 1;\r\n this.currentYear = today.getFullYear();\r\n }\r\n }\r\n\r\n /**\r\n * Check if a given day is today\r\n * @param day - The date to check\r\n * @returns True if the given day is today, false otherwise\r\n */\r\n protected isToday(day: Date): boolean {\r\n const today = new Date();\r\n return day.getDate() === today.getDate() &&\r\n day.getMonth() === today.getMonth() &&\r\n day.getFullYear() === today.getFullYear();\r\n }\r\n\r\n /**\r\n * Change the current month, adjusting the year if necessary\r\n * @param month - The new month to set (1-12)\r\n */\r\n protected changeMonth(month: number){\r\n if(month >= 13){\r\n this.currentMonth = 1;\r\n this.currentYear++;\r\n } else if(month <= 0){\r\n this.currentMonth = 12;\r\n this.currentYear--;\r\n } else {\r\n this.currentMonth = month;\r\n }\r\n\r\n if(this.currentYear > this.maxDate.getFullYear()){\r\n this.currentDay = this.maxDate.getDate();\r\n this.currentMonth = this.maxDate.getMonth() + 1;\r\n this.currentYear = this.maxDate.getFullYear();\r\n this.handleMaxDate.emit(this.maxDate);\r\n }\r\n\r\n if(this.currentYear < this.minDate.getFullYear()){\r\n this.currentDay = this.minDate.getDate();\r\n this.currentMonth = this.minDate.getMonth() + 1;\r\n this.currentYear = this.minDate.getFullYear();\r\n this.handleMinDate.emit(this.minDate);\r\n }\r\n }\r\n\r\n /**\r\n * Open or close the month selection dropdown\r\n */\r\n protected openYearSelection() {\r\n this.hasYearSelectionOpen$.next(!this.hasYearSelectionOpen$.value);\r\n this.hasMonthSelectionOpen$.next(false);\r\n\r\n if (this.hasYearSelectionOpen$.value) {\r\n requestAnimationFrame(() => {\r\n const yearButtons = document.querySelectorAll<HTMLButtonElement>(\r\n '.frg-date-selection__year__item-list button'\r\n );\r\n\r\n yearButtons.forEach(btn => {\r\n if (this.currentYear === parseInt(btn.textContent || '', 10)) {\r\n btn.focus();\r\n }\r\n });\r\n });\r\n }\r\n }\r\n /**\r\n * Open or close the month selection dropdown\r\n */\r\n protected openMonthSelection() {\r\n this.hasMonthSelectionOpen$.next(!this.hasMonthSelectionOpen$.value);\r\n this.hasYearSelectionOpen$.next(false);\r\n\r\n if (this.hasMonthSelectionOpen$.value) {\r\n requestAnimationFrame(() => {\r\n const monthButtons = document.querySelectorAll<HTMLButtonElement>(\r\n '.frg-date-selection__month__item-list button'\r\n );\r\n\r\n monthButtons.forEach((btn, index) => {\r\n if (this.currentMonth === index + 1) {\r\n btn.focus();\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Handle the selection of a date and emit the selected date\r\n * @param date - The date that was selected\r\n */\r\n protected onSelectDate(event: PointerEvent, date: Date): void {\r\n event.stopPropagation();\r\n this.selectDate.emit(date);\r\n }\r\n\r\n /**\r\n * Check if a date is disabled based on minDate and maxDate\r\n * @param a - The date to check\r\n * @returns True if the date is disabled, false otherwise\r\n */\r\n protected isDisabled(a: Date): boolean {\r\n if (this.minDate && this.maxDate) {\r\n return a < this.minDate || a > this.maxDate;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Check if a date is the currently selected date\r\n * @param a - The date to check\r\n * @param b - The currently selected date\r\n * @returns True if the dates are the same, false otherwise\r\n */\r\n protected isSelected(a: Date, b: Date | null): boolean {\r\n if (b) {\r\n return a.getDate() === b.getDate()\r\n && a.getMonth() === b.getMonth()\r\n && a.getFullYear() === b.getFullYear();\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Check if a date is the currently selected date\r\n * @param a - The date to check\r\n * @param b - The currently selected date\r\n * @returns True if the dates are the same, false otherwise\r\n */\r\n protected isSelectedYearOrMonth(a: number, b: number | null): boolean {\r\n return Boolean(b && a === b);\r\n }\r\n\r\n protected selectMonth(event: MouseEvent, month: number): void {\r\n event.stopPropagation();\r\n this.currentMonth = month;\r\n this.hasMonthSelectionOpen$.next(false);\r\n }\r\n\r\n protected selectYear(event: MouseEvent, year: number): void {\r\n event.stopPropagation();\r\n this.currentYear = year;\r\n this.hasYearSelectionOpen$.next(false);\r\n }\r\n}\r\n","<div class=\"frg-calendar\" tabindex=\"-1\">\r\n <div class=\"frg-calendar__head\">\r\n <button class=\"frg__\" href=\"javascript:void(0);\" (click)=\"changeMonth(currentMonth - 1)\">\r\n <span class=\"visually-hidden\">Previous Page</span>\r\n <span class=\"fas fa-angle-left\" aria-hidden=\"true\"></span>\r\n </button>\r\n <button class=\"frg-calendar__month\" (click)=\"openMonthSelection()\">\r\n {{month}}\r\n </button>\r\n @if((hasMonthSelectionOpen$ | async)){\r\n <div class=\"frg-date-selection\">\r\n <div class=\"frg-date-selection__month\">\r\n <ul class=\"frg-date-selection__month__list\">\r\n @for(month of months; let i = $index; track $index){\r\n <li class=\"frg-date-selection__month__item-list\"\r\n [class.selected-month]=\"isSelectedYearOrMonth(i + 1, currentMonth)\"\r\n >\r\n <button (click)=\"selectMonth($event, i + 1)\">\r\n {{month}} \r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n }\r\n <button class=\"frg-calendar__year\" (click)=\"openYearSelection()\">\r\n {{year}}\r\n </button>\r\n @if((hasYearSelectionOpen$ | async)){\r\n <div class=\"frg-date-selection\">\r\n <div class=\"frg-date-selection__year\">\r\n <ul class=\"frg-date-selection__year__list\">\r\n @for(year of years; track $index){\r\n <li class=\"frg-date-selection__year__item-list\"\r\n [class.selected-year]=\"isSelectedYearOrMonth(year, currentYear)\"\r\n >\r\n <button (click)=\"selectYear($event, year)\">\r\n {{year}}\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n }\r\n <button href=\"javascript:void(0);\" (click)=\"changeMonth(currentMonth + 1)\">\r\n <span class=\"visually-hidden\">Next Page</span>\r\n <span class=\"fas fa-angle-right\" aria-hidden=\"true\"></span>\r\n </button>\r\n </div>\r\n <div class=\"frg-calendar__body\">\r\n <div class=\"frg-calendar__week-day\">\r\n @for (dayName of weekDays; track $index) {\r\n <span>{{dayName}}</span>\r\n }\r\n </div>\r\n @for (week of calendarDays | chunk:7; track $index) {\r\n <div class=\"frg-calendar__week\">\r\n @for (day of week; track $index){\r\n <span class=\"frg-calendar__day\"\r\n [class.other-month]=\"day.getMonth() !== currentMonth - 1\"\r\n [class.current-date]=\"isToday(day)\"\r\n [class.selected-date]=\"isSelected(day, selectedValue)\"\r\n [class.disabled-date]=\"isDisabled(day)\"\r\n >\r\n <button type=\"button\" class=\"frg-calendar__day-button\"\r\n (click)=\"onSelectDate($event, day)\">\r\n {{ day.getDate() }}\r\n </button>\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\nexport function minDate(min: Date): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value as Date | null;\r\n if (value && value < min) {\r\n return { min: true };\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nexport function maxDate(max: Date): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value as Date | null;\r\n if (value && value > max) {\r\n return { max: true };\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nexport function afterDate(min: Date): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value as Date | null;\r\n if (value && value <= min) {\r\n return { after: true };\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nexport function beforeDate(max: Date): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value as Date | null;\r\n if (value && value >= max) {\r\n return { before: true };\r\n }\r\n return null;\r\n };\r\n}\r\n","import { AsyncPipe } from '@angular/common';\r\nimport { Component, HostListener, Input } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { DateFormat } from '../../../types/common.types';\r\nimport { buildDateFormatRegex, convertStringToDate, formatDateToString, isValidDate } from '../../../utils/date.utils';\r\nimport { InputBase } from '../input-base';\r\nimport { InputCalendarComponent } from '../input-calendar/input-calendar.component';\r\nimport { DEFAULT_INPUT_DATE_ERROR_MESSAGES, DEFAULT_INPUT_DATE_WARNINGS_MESSAGES } from '../input-consts';\r\nimport { InputDateType } from '../input-type';\r\nimport { InputValidationComponent } from '../input-validation/input-validation.component';\r\nimport { InputRequiredLabelPipe } from '../input.pipe';\r\nimport { maxDate, minDate } from './input-date-validators';\r\n\r\n@Component({\r\n selector: 'frg-input-date',\r\n imports: [InputValidationComponent, InputRequiredLabelPipe, InputCalendarComponent, AsyncPipe],\r\n templateUrl: './input-date.component.html',\r\n styleUrl: './input-date.component.scss',\r\n})\r\nexport class InputDateComponent extends InputBase<Date | null> {\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n const target = event.target as HTMLElement;\r\n\r\n if (!target.closest('.frg-input__wrapper')) {\r\n this.showCalendar$.next(false);\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override label: string = '';\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override placeholder: string = '';\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override required: boolean = false;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override showValidation: boolean = true;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override errorMessages: Record<string, string> = {};\r\n /**\r\n * The type of the input element.\r\n * Can be 'text', 'password', 'email', 'tel', etc.\r\n * Defaults to 'text'.\r\n *\r\n * @see InputTextType\r\n */\r\n @Input() public type: InputDateType = 'date';\r\n /**\r\n * Minimum year selectable in the calendar\r\n */\r\n @Input() public minDate: Date = new Date(1900, 0, 1);\r\n /**\r\n * Maximum year selectable in the calendar\r\n */\r\n @Input() public maxDate: Date = new Date(2099, 11, 31);\r\n /**\r\n * The format of date\r\n */\r\n @Input() public format: DateFormat = 'dd/MM/yyyy';\r\n /**\r\n * Enables strict mode for email validation.\r\n * When set to true, the email validator will use a more stringent pattern.\r\n * Defaults to false.\r\n */\r\n @Input() public validatorStrictMode: boolean = false;\r\n\r\n /**\r\n * Used for show calendar\r\n */\r\n public showCalendar$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n\r\n /**\r\n * Determines the actual input type to be used in the template.\r\n * If the type is 'password', it toggles between 'text' and 'password'\r\n * based on the showPassword property.\r\n *\r\n * @returns The input type as a string.\r\n */\r\n public get inputType(): string {\r\n if (this.type === 'date') {\r\n return 'text';\r\n }\r\n return this.type;\r\n }\r\n\r\n /** Internal store for warnings */\r\n private warnings: Record<string, boolean> = {};\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n this.initPlaceholder();\r\n this.initValidators();\r\n }\r\n\r\n /**\r\n * Handles the blur event on the input element.\r\n * Validates and formats the input value.\r\n * Marks the control as touched and updates the model value.\r\n * @param event Focus event\r\n */\r\n public override onBlur(event: FocusEvent): void {\r\n const input = event.target as HTMLInputElement;\r\n const value = input.value.trim();\r\n\r\n this.validate(value);\r\n\r\n if (isValidDate(value, this.format)) {\r\n let date = convertStringToDate(value, this.format);\r\n if (date) {\r\n date = this.clampDate(date);\r\n }\r\n this.value = date ?? null;\r\n input.value = this.formatDate(this.value);\r\n } else {\r\n input.value = '';\r\n this.value = null;\r\n }\r\n\r\n this.onTouched();\r\n this.onChange(this.value);\r\n }\r\n\r\n /**\r\n * Handles the input event on the input element.\r\n * Validates the input value.\r\n * @param event Input event\r\n */\r\n public override onInput(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n const value = input.value.trim();\r\n\r\n this.validate(value);\r\n }\r\n\r\n /**\r\n * Handles the blur event on the input element.\r\n * Marks the control as touched.\r\n */\r\n public override onFocus(_event: FocusEvent): void {\r\n this.showCalendar$.next(true);\r\n }\r\n\r\n /**\r\n * Format value for input display\r\n * @param value Date value\r\n * @returns Formatted date string\r\n */\r\n protected formatDate(value: Date | null): string {\r\n if(value){\r\n return formatDateToString(value, this.format);\r\n }\r\n\r\n return '';\r\n }\r\n\r\n protected selectDate(date: Date): void {\r\n this.value = date;\r\n\r\n this.onChange(this.value);\r\n this.onTouched();\r\n\r\n this.showCalendar$.next(false);\r\n }\r\n\r\n protected toggleCalendar(){\r\n this.showCalendar$.next(!this.showCalendar$.value);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected updateView(_value: Date | null): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected updateDisabledState(_isDisabled: boolean): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected override get errorList(): string[] {\r\n if (!this.control?.errors) return [];\r\n\r\n const errors = this.control.errors;\r\n return Object.keys(errors)\r\n .filter(key => !key.startsWith('warning_'))\r\n .map(key => {\r\n if (this.errorMessages[key]) {\r\n return this.errorMessages[key];\r\n }\r\n let template = this.errorMessages[key] || DEFAULT_INPUT_DATE_ERROR_MESSAGES[key] || 'Invalid field.';\r\n\r\n switch (key) {\r\n case 'min':\r\n template = template.replace('{{date}}', formatDateToString(this.minDate, this.format));\r\n break;\r\n case 'max':\r\n template = template.replace('{{date}}', formatDateToString(this.maxDate, this.format));\r\n break;\r\n }\r\n\r\n return template;\r\n });\r\n }\r\n\r\n /**\r\n * Returns dynamic warning messages, replacing {{limit}} with actual values.\r\n */\r\n protected override get warningList(): string[] {\r\n return Object.keys(this.warnings).map(key => {\r\n const template = DEFAULT_INPUT_DATE_WARNINGS_MESSAGES[key] || 'Check this value.';\r\n\r\n let replacement: string | undefined;\r\n\r\n switch (key) {\r\n case 'format':\r\n replacement = this.format;\r\n break;\r\n case 'min':\r\n replacement = formatDateToString(this.minDate, this.format);\r\n break;\r\n case 'max':\r\n replacement = formatDateToString(this.maxDate, this.format);\r\n break;\r\n }\r\n\r\n if (replacement != null) {\r\n const placeholder = key === 'format' ? '{{format}}' : '{{limit}}';\r\n return template.replace(placeholder, replacement.toString());\r\n }\r\n\r\n return template;\r\n });\r\n }\r\n\r\n /**\r\n * Returns whether any warnings are active.\r\n */\r\n protected get hasWarning(): boolean {\r\n return this.warningList.length > 0;\r\n }\r\n\r\n /**\r\n * Adds a warning flag\r\n * @param key Warning key\r\n */\r\n private addWarning(key: string): void {\r\n this.warnings[key] = true;\r\n }\r\n\r\n /**\r\n * Clamp a date within min/max boundaries\r\n * @param date Date to clamp\r\n * @returns Clamped date and sets warnings if needed\r\n */\r\n private clampDate(date: Date): Date {\r\n let clamped = date;\r\n\r\n if (this.minDate && date < this.minDate) {\r\n this.addWarning('min');\r\n clamped = this.minDate;\r\n }\r\n\r\n if (this.maxDate && date > this.maxDate) {\r\n this.addWarning('max');\r\n clamped = this.maxDate;\r\n }\r\n\r\n return clamped;\r\n }\r\n\r\n /**\r\n * Initialize the placeholder based on the date format\r\n */\r\n private initPlaceholder() {\r\n this.placeholder = this.format;\r\n }\r\n\r\n /**\r\n * Initialize validators based on inputs\r\n */\r\n private initValidators(): void {\r\n if (this.control) {\r\n const validators = [];\r\n\r\n if (this.required) {\r\n validators.push(Validators.required);\r\n }\r\n\r\n if (this.minDate) {\r\n validators.push(minDate(this.minDate));\r\n }\r\n\r\n if (this.maxDate) {\r\n validators.push(maxDate(this.maxDate));\r\n }\r\n\r\n this.control.setValidators(validators);\r\n this.control.updateValueAndValidity();\r\n }\r\n }\r\n\r\n /**\r\n * Validate the input value against the specified format\r\n * @param value Input value\r\n */\r\n private validate(value: string): void {\r\n this.removeWarning('format');\r\n this.removeWarning('min');\r\n this.removeWarning('max');\r\n\r\n if (!value) return;\r\n\r\n if (this.format) {\r\n const regex = buildDateFormatRegex(this.format);\r\n if (!regex.test(value)) {\r\n this.addWarning('format');\r\n return;\r\n }\r\n }\r\n\r\n const date = convertStringToDate(value, this.format);\r\n if (!date) return;\r\n\r\n if (this.minDate && date < this.minDate) {\r\n this.addWarning('min');\r\n } else if (this.maxDate && date > this.maxDate) {\r\n this.addWarning('max');\r\n }\r\n }\r\n\r\n /**\r\n * Remove a warning flag\r\n * @param key Warning key\r\n */\r\n private removeWarning(key: string): void {\r\n delete this.warnings[key];\r\n }\r\n}\r\n","<div class=\"frg-input__wrapper\"\r\n [class.input-error]=\"hasError\"\r\n [class.input-warning]=\"hasWarning\">\r\n @if(label){\r\n <label [for]=\"id\">{{ label | inputRequiredLabel: required }}</label>\r\n }\r\n <div class=\"frg-input__field\">\r\n <input\r\n [id]=\"id\"\r\n [type]=\"inputType\"\r\n [placeholder]=\"placeholder\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [value]=\"formatDate(value)\"\r\n (blur)=\"onBlur($event)\"\r\n (focus)=\"onFocus($event)\"\r\n (input)=\"onInput($event)\"\r\n />\r\n <button class=\"far fa-calendar frg-input__calendar-button\"\r\n aria-label=\"Open calendar\"\r\n (click)=\"toggleCalendar()\"\r\n ></button>\r\n </div>\r\n @if(showCalendar$ | async){\r\n <frg-input-calendar\r\n [minDate]=\"minDate\"\r\n [maxDate]=\"maxDate\"\r\n [selectedValue]=\"value\"\r\n (selectDate)=\"selectDate($event)\">\r\n </frg-input-calendar>\r\n }\r\n</div>\r\n\r\n@if (showValidation) {\r\n <frg-input-validation\r\n [errorList]=\"errorList\"\r\n [warningList]=\"warningList\"\r\n [isFormInvalid]=\"hasError\"\r\n >\r\n </frg-input-validation>\r\n}\r\n","import { AbstractControl, ValidationErrors, ValidatorFn } from \"@angular/forms\";\r\nimport { parseTimeToMinutes } from \"../../../utils/date.utils\";\r\n\r\nexport function minTime(min: string): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value as string | null;\r\n if (!value) return null;\r\n\r\n const minMinutes = parseTimeToMinutes(min);\r\n const valueMinutes = parseTimeToMinutes(value);\r\n\r\n if (minMinutes === null || valueMinutes === null) {\r\n return { invalidFormat: true };\r\n }\r\n\r\n if (valueMinutes < minMinutes) {\r\n return { min: true };\r\n }\r\n\r\n return null;\r\n };\r\n}\r\n\r\nexport function maxTime(max: string): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const value = control.value as string | null;\r\n if (!value) return null;\r\n\r\n const maxMinutes = parseTimeToMinutes(max);\r\n const valueMinutes = parseTimeToMinutes(value);\r\n\r\n if (maxMinutes === null || valueMinutes === null) {\r\n return { invalidFormat: true };\r\n }\r\n\r\n if (valueMinutes > maxMinutes) {\r\n return { max: true };\r\n }\r\n\r\n return null;\r\n };\r\n}\r\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { TimeFormat } from '../../../types/common.types';\r\nimport { buildTimeFormatRegex, convertStringToTime, formatTimeToString } from '../../../utils/date.utils';\r\nimport { InputBase } from '../input-base';\r\nimport { DEFAULT_INPUT_TIME_ERROR_MESSAGES, DEFAULT_INPUT_TIME_WARNINGS_MESSAGES } from '../input-consts';\r\nimport { InputTimeMeridiem, InputTimePartial, InputTimeType } from '../input-type';\r\nimport { InputValidationComponent } from '../input-validation/input-validation.component';\r\nimport { InputRequiredLabelPipe } from '../input.pipe';\r\nimport { maxTime, minTime } from './input-time-validators';\r\nimport { InputTimeParts } from '../input-interface';\r\n\r\n@Component({\r\n selector: 'frg-input-time',\r\n imports: [InputRequiredLabelPipe, InputValidationComponent, NgClass, NgTemplateOutlet],\r\n templateUrl: './input-time.component.html',\r\n styleUrl: './input-time.component.scss',\r\n})\r\nexport class InputTimeComponent extends InputBase<string> {\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override label: string = '';\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override placeholder: string = '';\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override required: boolean = false;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override showValidation: boolean = true;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override errorMessages: Record<string, string> = {};\r\n /**\r\n * The type of the input element.\r\n * Can be 'text', 'password', 'email', 'tel', etc.\r\n * Defaults to 'text'.\r\n *\r\n * @see InputTextType\r\n */\r\n @Input() public type: InputTimeType = 'time';\r\n /**\r\n * Minimum year selectable in the calendar\r\n */\r\n @Input() public minTime: string = '00:00:00';\r\n /**\r\n * Maximum year selectable in the calendar\r\n */\r\n @Input() public maxTime: string = '23:59:59';\r\n /**\r\n * The format of time\r\n */\r\n @Input() public format: TimeFormat = 'HH:mm';\r\n /**\r\n * Enables strict mode for email validation.\r\n * When set to true, the email validator will use a more stringent pattern.\r\n * Defaults to false.\r\n */\r\n @Input() public validatorStrictMode: boolean = false;\r\n\r\n /**\r\n * Determines the actual input type to be used in the template.\r\n * If the type is 'password', it toggles between 'text' and 'password'\r\n * based on the showPassword property.\r\n *\r\n * @returns The input type as a string.\r\n */\r\n public get inputType(): string {\r\n return this.type;\r\n }\r\n\r\n /**\r\n * Minimum hour based on minTime\r\n */\r\n public get minHour(): number {\r\n return Number(this.minTime.split(':')[0] || 0);\r\n }\r\n\r\n /**\r\n * Maximum hour based on maxTime and format\r\n */\r\n public get maxHour(): number {\r\n return Number(this.maxTime.split(':')[0] || (this.format.includes('HH') ? 23 : 12));\r\n }\r\n\r\n /**\r\n * Minimum minute allowed based on `minTime`\r\n */\r\n public get minMinute(): number {\r\n return Number(this.minTime.split(':')[1] || 0);\r\n }\r\n\r\n /**\r\n * Maximum minute allowed based on `maxTime`\r\n */\r\n public get maxMinute(): number {\r\n return Number(this.maxTime.split(':')[1] || 59);\r\n }\r\n\r\n /**\r\n * Minimum second allowed based on `minTime`\r\n */\r\n public get minSecond(): number {\r\n const parts = this.minTime.split(':');\r\n return parts[2] ? Number(parts[2]) : 0;\r\n }\r\n\r\n /**\r\n * Maximum second allowed based on `maxTime`\r\n */\r\n public get maxSecond(): number {\r\n const parts = this.maxTime.split(':');\r\n return parts[2] ? Number(parts[2]) : 59;\r\n }\r\n\r\n /** Internal store for warnings */\r\n private warnings: Record<string, boolean> = {};\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n this.initPlaceholder();\r\n this.initValidators();\r\n }\r\n\r\n public onKeydown(event: Event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n const checkbox = document.getElementById(this.id + '-meridiem') as HTMLInputElement;\r\n if (!checkbox) return;\r\n\r\n checkbox.checked = !checkbox.checked;\r\n\r\n const fakeEvent = { target: checkbox } as unknown as Event;\r\n this.onInput(fakeEvent);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public override onBlur(event: FocusEvent): void {\r\n const target = event.target as HTMLInputElement;\r\n const partialTime = target.dataset['partialtime'] as InputTimePartial;\r\n const inputValue = target.value.trim() || null;\r\n\r\n this.value = inputValue ? this.mergePartialInput(partialTime, inputValue) : '';\r\n this.validate(this.value);\r\n this.updateInputsFromValue();\r\n this.onTouched();\r\n this.onChange(this.value);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public override onInput(event: Event): void {\r\n const target = event.target as HTMLInputElement;\r\n const partialTime = target.dataset['partialtime'] as InputTimePartial;\r\n\r\n let inputValue: string | null;\r\n if (partialTime === 'meridiem') {\r\n inputValue = target.checked ? 'PM' : 'AM';\r\n } else {\r\n inputValue = target.value.trim() || null;\r\n }\r\n\r\n this.value = this.mergePartialInput(partialTime, inputValue);\r\n this.updateInputsFromValue();\r\n this.onTouched();\r\n this.onChange(this.value);\r\n }\r\n\r\n /**\r\n * Decrements a specific part of the time (hour, minute, or second)\r\n * and updates the input value accordingly.\r\n *\r\n * @param partialTime - The time part to decrement: 'hour', 'minute', or 'second'.\r\n */\r\n protected decrease(partialTime: InputTimePartial): void {\r\n const valueParts = this.parseValueToParts();\r\n\r\n switch (partialTime) {\r\n case 'hour':\r\n valueParts.hour = this.decrementHour(valueParts.hour ?? this.minHour);\r\n break;\r\n case 'minute':\r\n valueParts.minute = this.decrementMinute(valueParts.minute ?? this.minMinute);\r\n break;\r\n case 'second':\r\n valueParts.second = this.decrementSecond(valueParts.second ?? this.minSecond);\r\n break;\r\n }\r\n\r\n this.value = this.formatPartsToTimeString(valueParts);\r\n this.updateInputsFromValue();\r\n this.onTouched();\r\n this.onChange(this.value);\r\n }\r\n\r\n /**\r\n * Format value for input display\r\n * @param value Date value\r\n * @returns Formatted time string\r\n */\r\n protected formatTime(value: string | null, partialTime?: InputTimePartial): string {\r\n if (value) {\r\n return formatTimeToString(value, this.format, partialTime);\r\n }\r\n\r\n return '';\r\n }\r\n\r\n /**\r\n * Increments a specific part of the time (hour, minute, or second)\r\n * and updates the input value accordingly.\r\n *\r\n * @param partialTime - The time part to increment: 'hour', 'minute', or 'second'.\r\n */\r\n protected increase(partialTime: InputTimePartial): void {\r\n const valueParts = this.parseValueToParts();\r\n\r\n switch (partialTime) {\r\n case 'hour':\r\n valueParts.hour = this.incrementHour(valueParts.hour);\r\n break;\r\n case 'minute':\r\n valueParts.minute = this.incrementMinute(valueParts.minute);\r\n break;\r\n case 'second':\r\n valueParts.second = this.incrementSecond(valueParts.second);\r\n break;\r\n }\r\n\r\n this.value = this.formatPartsToTimeString(valueParts);\r\n this.updateInputsFromValue();\r\n this.onTouched();\r\n this.onChange(this.value);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected updateView(_value: string | null): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected updateDisabledState(_isDisabled: boolean): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected override get errorList(): string[] {\r\n if (!this.control?.errors) return [];\r\n\r\n const errors = this.control.errors;\r\n return Object.keys(errors)\r\n .filter(key => !key.startsWith('warning_'))\r\n .map(key => {\r\n if (this.errorMessages[key]) {\r\n return this.errorMessages[key];\r\n }\r\n let template = this.errorMessages[key] || DEFAULT_INPUT_TIME_ERROR_MESSAGES[key] || 'Invalid field.';\r\n\r\n switch (key) {\r\n case 'min':\r\n template = template.replace('{{time}}', formatTimeToString(this.minTime, this.format));\r\n break;\r\n case 'max':\r\n template = template.replace('{{time}}', formatTimeToString(this.maxTime, this.format));\r\n break;\r\n }\r\n\r\n return template;\r\n });\r\n }\r\n\r\n /**\r\n * Returns dynamic warning messages, replacing {{limit}} with actual values.\r\n */\r\n protected override get warningList(): string[] {\r\n return Object.keys(this.warnings).map(key => {\r\n const template = DEFAULT_INPUT_TIME_WARNINGS_MESSAGES[key] || 'Check this value.';\r\n\r\n let replacement: string | undefined;\r\n\r\n switch (key) {\r\n case 'format':\r\n replacement = this.format;\r\n break;\r\n case 'min':\r\n replacement = formatTimeToString(this.minTime, this.format);\r\n break;\r\n case 'max':\r\n replacement = formatTimeToString(this.maxTime, this.format);\r\n break;\r\n }\r\n\r\n if (replacement != null) {\r\n const placeholder = key === 'format' ? '{{format}}' : '{{limit}}';\r\n return template.replace(placeholder, replacement.toString());\r\n }\r\n\r\n return template;\r\n });\r\n }\r\n\r\n /**\r\n * Returns whether any warnings are active.\r\n */\r\n protected get hasWarning(): boolean {\r\n return this.warningList.length > 0;\r\n }\r\n\r\n /**\r\n * Adds a warning flag\r\n * @param key Warning key\r\n */\r\n private addWarning(key: string): void {\r\n this.warnings[key] = true;\r\n }\r\n\r\n /**\r\n * Builds a formatted time string from the given time parts.\r\n * - Undefined numeric parts are represented as \"undefined\".\r\n * - Meridiem is always included if the format includes 'a'.\r\n *\r\n * @param parts Object containing hour, minute, second, and optional meridiem\r\n * @returns Formatted time string according to the current format\r\n */\r\n private formatPartsToTimeString(parts: InputTimeParts): string {\r\n const segments: string[] = [];\r\n\r\n if (this.format.includes('HH') || this.format.includes('hh')) {\r\n segments.push(parts.hour !== undefined ? String(parts.hour).padStart(2, '0') : 'undefined');\r\n }\r\n if (this.format.includes('mm')) {\r\n segments.push(parts.minute !== undefined ? String(parts.minute).padStart(2, '0') : 'undefined');\r\n }\r\n if (this.format.includes('ss')) {\r\n segments.push(parts.second !== undefined ? String(parts.second).padStart(2, '0') : 'undefined');\r\n }\r\n\r\n const timeString = segments.join(':');\r\n\r\n if (this.format.includes('a')) {\r\n const meridiem = parts.meridiem || 'AM';\r\n return `${timeString} ${meridiem}`;\r\n }\r\n\r\n return timeString;\r\n }\r\n\r\n /**\r\n * Clamps a numeric value between a minimum and maximum.\r\n * @param value The number to clamp.\r\n * @param min Minimum allowed value.\r\n * @param max Maximum allowed value.\r\n * @returns The clamped number, or undefined if input was undefined.\r\n */\r\n private clamp(value: number | undefined, min: number, max: number): number | undefined {\r\n if (value === undefined) return undefined;\r\n return Math.max(min, Math.min(max, value));\r\n }\r\n\r\n /**\r\n * Decrement hour based on format (12h or 24h)\r\n * @param hour Current hour\r\n * @returns Decremented hour\r\n */\r\n private decrementHour(hour: number): number {\r\n if (this.format.includes('a')) {\r\n hour--;\r\n if (hour < 1) {\r\n hour = 12;\r\n this.toggleMeridiem();\r\n }\r\n return hour;\r\n } else {\r\n hour--;\r\n if (hour < this.minHour) return this.maxHour;\r\n return hour;\r\n }\r\n }\r\n\r\n /**\r\n * Decrement minute with wrapping\r\n * @param minute Current minute\r\n * @returns Decremented minute\r\n */\r\n private decrementMinute(minute: number): number {\r\n minute--;\r\n if (minute < this.minMinute) return this.maxMinute;\r\n return minute;\r\n }\r\n\r\n /**\r\n * Decrement second with wrapping\r\n * @param second Current second\r\n * @returns Decremented second\r\n */\r\n private decrementSecond(second: number): number {\r\n second--;\r\n if (second < this.minSecond) return this.maxSecond;\r\n return second;\r\n }\r\n\r\n /**\r\n * Returns the current time parts extracted from the component's value.\r\n * Numeric parts are converted to numbers; meridiem defaults to 'AM' if format includes 'a'.\r\n * @returns An object containing hour, minute, second, and meridiem (if applicable).\r\n */\r\n private getCurrentParts(): InputTimeParts {\r\n return {\r\n hour: this.parseNumberOrUndefined(this.formatTime(this.value, 'hour')),\r\n minute: this.parseNumberOrUndefined(this.formatTime(this.value, 'minute')),\r\n second: this.parseNumberOrUndefined(this.formatTime(this.value, 'second')),\r\n meridiem: this.format.includes('a')\r\n ? ((this.formatTime(this.value, 'meridiem') as InputTimeMeridiem) || 'AM')\r\n : undefined,\r\n };\r\n }\r\n\r\n /**\r\n * Initialize the placeholder based on the time format\r\n */\r\n private initPlaceholder() {\r\n this.placeholder = 'HH:mm';\r\n }\r\n\r\n /**\r\n * Increment hour based on format (12h or 24h)\r\n * @param hour Current hour\r\n * @returns Incremented hour\r\n */\r\n private incrementHour(hour: number | undefined): number {\r\n if (hour === undefined) {\r\n return Number(this.format.includes('a'));\r\n }\r\n if (this.format.includes('a')) {\r\n hour++;\r\n if (hour > 12) {\r\n hour = 1;\r\n this.toggleMeridiem();\r\n }\r\n return hour;\r\n } else {\r\n hour++;\r\n if (hour > this.maxHour) return this.minHour;\r\n return hour;\r\n }\r\n }\r\n\r\n /**\r\n * Increment minute with wrapping\r\n * @param minute Current minute\r\n * @returns Incremented minute\r\n */\r\n private incrementMinute(minute: number | undefined): number {\r\n if (minute === undefined) {\r\n return 0;\r\n }\r\n minute++;\r\n if (minute > this.maxMinute) return this.minMinute;\r\n return minute;\r\n }\r\n\r\n /**\r\n * Increment second with wrapping\r\n * @param second Current second\r\n * @returns Incremented second\r\n */\r\n private incrementSecond(second: number | undefined): number {\r\n if (second === undefined) {\r\n return 0;\r\n }\r\n second++;\r\n if (second > this.maxSecond) return this.minSecond;\r\n return second;\r\n }\r\n\r\n /**\r\n * Initialize validators based on inputs\r\n */\r\n private initValidators(): void {\r\n if (this.control) {\r\n const validators = [];\r\n\r\n if (this.required) {\r\n validators.push(Validators.required);\r\n }\r\n\r\n if (this.minTime) {\r\n validators.push(minTime(this.minTime));\r\n }\r\n\r\n if (this.maxTime) {\r\n validators.push(maxTime(this.maxTime));\r\n }\r\n\r\n this.control.setValidators(validators);\r\n this.control.updateValueAndValidity();\r\n }\r\n }\r\n\r\n /**\r\n * Merges a partial time input into the current value and returns the resulting full time string.\r\n * @param partial The time part being updated ('hour', 'minute', 'second', 'meridiem').\r\n * @param partialValue The new value for the specified part.\r\n * @returns The merged full time string.\r\n */\r\n private mergePartialInput(partial: InputTimePartial, partialValue: string | null): string {\r\n const parts = this.getCurrentParts();\r\n this.setPartialValue(parts, partial, partialValue);\r\n return this.formatPartsToTimeString(parts);\r\n }\r\n\r\n /**\r\n * Converts a string to a number or returns undefined if the value is invalid.\r\n * @param value The string to parse.\r\n * @returns The number value, or undefined if input is null, 'undefined', or NaN.\r\n */\r\n private parseNumberOrUndefined(value: string | null): number | undefined {\r\n if (!value || value === 'undefined') return undefined;\r\n const n = Number(value);\r\n return isNaN(n) ? undefined : n;\r\n }\r\n\r\n /**\r\n * Parse the current value to its components\r\n * @returns An object containing hour, minute, second, and meridiem (if applicable)\r\n */\r\n private parseValueToParts(): InputTimeParts {\r\n const result: InputTimeParts = {};\r\n if (!this.value) return result;\r\n\r\n let coreValue = this.value.trim();\r\n let meridiem: InputTimeMeridiem | undefined;\r\n\r\n const meridiemMatch = /\\s?(AM|PM)$/i.exec(coreValue);\r\n if (meridiemMatch) {\r\n meridiem = meridiemMatch[1].toUpperCase() as InputTimeMeridiem;\r\n coreValue = coreValue.replace(/\\s?(AM|PM)$/i, '').trim();\r\n }\r\n\r\n const segments = coreValue.split(':').map(s => (s === 'undefined' ? undefined : s));\r\n\r\n const tokenMap: [string, keyof InputTimeParts][] = [\r\n ['HH', 'hour'],\r\n ['hh', 'hour'],\r\n ['mm', 'minute'],\r\n ['ss', 'second'],\r\n ];\r\n\r\n let index = 0;\r\n for (const [token, key] of tokenMap) {\r\n if (this.format.includes(token)) {\r\n const segment = segments[index++];\r\n result[key as 'hour' | 'minute' | 'second'] =\r\n segment !== undefined ? Number(segment) : undefined;\r\n }\r\n }\r\n\r\n if (this.format.includes('a')) {\r\n result.meridiem = meridiem;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Updates a specific part of a time parts object with a new partial value and clamps numeric values.\r\n * @param parts The time parts object to update.\r\n * @param partial The part to update ('hour', 'minute', 'second', 'meridiem').\r\n * @param partialValue The new value for the part.\r\n */\r\n private setPartialValue(parts: InputTimeParts, partial: InputTimePartial, partialValue: string | null): void {\r\n switch (partial) {\r\n case 'hour':\r\n parts.hour = partialValue !== null ? Number(partialValue) : undefined;\r\n break;\r\n case 'minute':\r\n parts.minute = partialValue !== null ? Number(partialValue) : 0;\r\n break;\r\n case 'second':\r\n parts.second = partialValue !== null ? Number(partialValue) : 0;\r\n break;\r\n case 'meridiem':\r\n parts.meridiem = partialValue === 'AM' || partialValue === 'PM' ? partialValue : 'AM';\r\n break;\r\n }\r\n\r\n parts.hour = this.clamp(parts.hour, this.minHour, this.maxHour);\r\n parts.minute = this.clamp(parts.minute, this.minMinute, this.maxMinute);\r\n parts.second = this.clamp(parts.second, this.minSecond, this.maxSecond);\r\n }\r\n\r\n /**\r\n * Toggle the meridiem (AM/PM) in the current value\r\n * This is used when incrementing hours in 12-hour format.\r\n */\r\n private toggleMeridiem(): void {\r\n if (!this.value) return;\r\n const parts = this.value.split(' ');\r\n if (parts[1] === 'AM') parts[1] = 'PM';\r\n else parts[1] = 'AM';\r\n this.value = parts.join(' ');\r\n }\r\n\r\n /**\r\n * Update individual input fields based on the current full time value\r\n * This ensures that each part (hour, minute, second, meridiem) reflects the current value\r\n * and is properly formatted.\r\n */\r\n private updateInputsFromValue(): void {\r\n const hoursInput = document.getElementById(this.id + '-hour') as HTMLInputElement;\r\n const minutesInput = document.getElementById(this.id + '-minute') as HTMLInputElement;\r\n const secondsInput = document.getElementById(this.id + '-second') as HTMLInputElement;\r\n const meridiemInput = document.getElementById(this.id + '-meridiem') as HTMLInputElement;\r\n\r\n const safeValue = (part: InputTimePartial): string => {\r\n const formatted = this.formatTime(this.value, part);\r\n return formatted && !['HH', 'mm', 'ss'].includes(formatted) ? formatted : '';\r\n };\r\n\r\n if (hoursInput) hoursInput.value = safeValue('hour');\r\n if (minutesInput) minutesInput.value = safeValue('minute');\r\n if (secondsInput) secondsInput.value = safeValue('second');\r\n if (meridiemInput) meridiemInput.value = safeValue('meridiem');\r\n }\r\n\r\n /**\r\n * Validate the input value against the specified format\r\n * @param value Input value\r\n */\r\n private validate(value: string): void {\r\n this.removeWarning('format');\r\n this.removeWarning('min');\r\n this.removeWarning('max');\r\n\r\n if (!value) return;\r\n\r\n if (this.format) {\r\n const regex = buildTimeFormatRegex(this.format);\r\n if (!regex.test(value)) {\r\n this.addWarning('format');\r\n return;\r\n }\r\n }\r\n\r\n const valueSeconds = convertStringToTime(value, this.format);\r\n if (valueSeconds === null) {\r\n this.addWarning('invalidFormat');\r\n return;\r\n }\r\n\r\n const minSeconds = this.minTime ? convertStringToTime(this.minTime, this.format) : null;\r\n const maxSeconds = this.maxTime ? convertStringToTime(this.maxTime, this.format) : null;\r\n\r\n if (minSeconds !== null && valueSeconds < minSeconds) {\r\n this.addWarning('min');\r\n }\r\n if (maxSeconds !== null && valueSeconds > maxSeconds) {\r\n this.addWarning('max');\r\n }\r\n }\r\n\r\n /**\r\n * Remove a warning flag\r\n * @param key Warning key\r\n */\r\n private removeWarning(key: string): void {\r\n delete this.warnings[key];\r\n }\r\n}\r\n","<div class=\"frg-input__wrapper\"\r\n [class.input-error]=\"hasError\"\r\n [class.input-warning]=\"hasWarning\"\r\n>\r\n @if(label){\r\n <label [for]=\"id + '-full'\">{{ label | inputRequiredLabel: required }}</label>\r\n }\r\n <div class=\"frg-input__field\">\r\n @if(format.includes('HH') || format.includes('hh')) {\r\n <ng-container *ngTemplateOutlet=\"timeControl; context:{partial:'hour', min:minHour, max:maxHour, placeholder: format.includes('HH') ? 'HH' : 'hh'}\"></ng-container>\r\n }\r\n \r\n @if(format.includes('mm')) {\r\n <span class=\"colon-seprator\">:</span>\r\n <ng-container *ngTemplateOutlet=\"timeControl; context:{partial:'minute', min:minMinute, max:maxMinute, placeholder:'mm'}\"></ng-container>\r\n }\r\n \r\n @if(format.includes('ss')) {\r\n <span class=\"colon-seprator\">:</span>\r\n <ng-container *ngTemplateOutlet=\"timeControl; context:{partial:'second', min:minSecond, max:maxSecond, placeholder:'ss'}\"></ng-container>\r\n }\r\n\r\n @if(format.includes('a')) {\r\n <div class=\"frg-input__time__container frg-input__time__meridiem\">\r\n <input\r\n [id]=\"id + '-meridiem'\"\r\n [attr.data-partialTime]=\"'meridiem'\"\r\n type=\"checkbox\"\r\n tabindex=\"0\"\r\n role=\"switch\"\r\n [checked]=\"formatTime(value, 'meridiem') === 'PM'\"\r\n aria-checked=\"{{ formatTime(value, 'meridiem') === 'PM' }}\"\r\n placeholder=\"AM/PM\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n (blur)=\"onBlur($event)\"\r\n (focus)=\"onFocus($event)\"\r\n (change)=\"onInput($event)\"\r\n (keydown.enter)=\"onKeydown($event)\"\r\n />\r\n </div>\r\n <span class=\"focus-line\"></span>\r\n\r\n }\r\n\r\n <input type=\"text\" [id]=\"id + '-full'\" [value]=\"value\" hidden />\r\n </div>\r\n\r\n @if(showValidation) {\r\n <frg-input-validation\r\n [errorList]=\"errorList\"\r\n [warningList]=\"warningList\"\r\n [isFormInvalid]=\"hasError\"\r\n ></frg-input-validation>\r\n }\r\n</div>\r\n\r\n<ng-template #timeControl let-partial=\"partial\" let-min=\"min\" let-max=\"max\" let-placeholder=\"placeholder\">\r\n <div class=\"frg-input__time__container\" [ngClass]=\"'frg-input__time__' + partial\">\r\n <button\r\n type=\"button\"\r\n class=\"frg-input__time__arrow frg-input__time__arrow--increment\"\r\n (click)=\"increase(partial)\"\r\n aria-label=\"Increase value\"\r\n >\r\n <span class=\"fas fa-chevron-up\"></span>\r\n </button>\r\n <input\r\n [id]=\"id + '-' + partial\"\r\n [attr.data-partialTime]=\"partial\"\r\n type=\"number\"\r\n [placeholder]=\"placeholder\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [value]=\"formatTime(value, partial) !== placeholder ? formatTime(value, partial) : ''\"\r\n (blur)=\"onBlur($event)\"\r\n (focus)=\"onFocus($event)\"\r\n (input)=\"onInput($event)\"\r\n />\r\n <span class=\"focus-line\"></span>\r\n <button\r\n type=\"button\"\r\n class=\"frg-input__time__arrow frg-input__time__arrow--decrement\"\r\n (click)=\"decrease(partial)\"\r\n aria-label=\"Decrease value\"\r\n >\r\n <span class=\"fas fa-chevron-down\"></span>\r\n </button>\r\n </div>\r\n</ng-template>\r\n","import { AsyncPipe } from '@angular/common';\r\nimport { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { TimeFormat } from '../../../types/common.types';\r\nimport { calculateHourDegree, calculateMinuteDegree, isMeridiemFormat } from '../../../utils/date.utils';\r\nimport { InputTimeMeridiem } from '../input-type';\r\n\r\n@Component({\r\n selector: 'frg-input-clock-picker',\r\n imports: [AsyncPipe],\r\n templateUrl: './input-clock-picker.component.html',\r\n styleUrls: ['./input-clock-picker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class InputClockPickerComponent implements OnInit {\r\n /**Selected hour in string format (\"00\"..\"23\") */\r\n @Input() selectedHour: string | null = null;\r\n\r\n /** Selected minute in string format (\"00\"..\"55\" step 5) */\r\n @Input() selectedMinute: string | null = null;\r\n\r\n /** Selected meridiem for 12-hour format */\r\n @Input() selectedMeridiem: InputTimeMeridiem = 'AM';\r\n\r\n /** Time format configuration */\r\n @Input() timeFormat: TimeFormat | null = null;\r\n\r\n /** Emits the hour when user selects an hour */\r\n @Output() selectHour: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /** Emits the minute when user selects a minute */\r\n @Output() selectMinute: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /** Emits the meridiem when user toggles AM/PM */\r\n @Output() selectMeridiem: EventEmitter<InputTimeMeridiem> = new EventEmitter<InputTimeMeridiem>();\r\n\r\n /** Emits when the picker should be closed */\r\n @Output() closePicker: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n /** Reference to the minute hand element */\r\n @ViewChild('handMinutes', { static: true }) handMinutes!: ElementRef<HTMLDivElement>;\r\n\r\n /** Reference to the hour hand element */\r\n @ViewChild('handHours', { static: true }) handHours!: ElementRef<HTMLDivElement>;\r\n\r\n /** Whether the minutes picker is visible */\r\n public showMinutesPicker$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n\r\n /** Whether the hours picker is visible */\r\n public showHoursPicker$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(true);\r\n\r\n private currentHourDegree: number | null = null;\r\n private currentMinuteDegree: number | null = null;\r\n\r\n public clockHours: Array<string> = Array.from({ length: 12 }, (_, i) => i.toString().padStart(2, '0'));\r\n public fullClockHours: Array<string> = Array.from({ length: 12 }, (_, i) => (i + 12).toString().padStart(2, '0'));\r\n public clockMinutes: Array<string> = Array.from({length: 12}, (_, i) => (i * 5).toString().padStart(2,'0'));\r\n\r\n /** Returns the current time in HH:MM format */\r\n public get timeValue(): string {\r\n return `${this.selectedHour}:${this.selectedMinute}`;\r\n }\r\n\r\n /** Returns true if the time format is 12-hour */\r\n protected get isMeridiemFormat(): boolean {\r\n return isMeridiemFormat(this.timeFormat);\r\n }\r\n\r\n /**\r\n * Initializes the hour and minute hands based on provided input values.\r\n */\r\n ngOnInit(): void {\r\n if (this.selectedHour) {\r\n this.currentHourDegree = calculateHourDegree(this.selectedHour);\r\n this.handHours.nativeElement.style.setProperty('--angle', `${this.currentHourDegree}deg`);\r\n }\r\n if (this.selectedMinute) {\r\n this.currentMinuteDegree = calculateMinuteDegree(this.selectedMinute);\r\n this.handMinutes.nativeElement.style.setProperty('--angle', `${this.currentMinuteDegree}deg`);\r\n }\r\n }\r\n\r\n /**\r\n * Updates the hour hand to follow hover position.\r\n * @param hour - The hour string being hovered (\"00\"..\"23\").\r\n */\r\n protected onHourHover(hour: string): void {\r\n const angle = calculateHourDegree(hour);\r\n this.handHours.nativeElement.style.setProperty('--angle', `${angle}deg`);\r\n }\r\n\r\n /**\r\n * Resets the hour hand to the currently selected hour when hover leaves.\r\n */\r\n protected onHourLeave(): void {\r\n if (this.currentHourDegree) {\r\n this.handHours.nativeElement.style.setProperty('--angle', `${this.currentHourDegree}deg`);\r\n } else {\r\n this.handHours.nativeElement.style.removeProperty('--angle');\r\n }\r\n }\r\n\r\n /**\r\n * Handles user selection of an hour.\r\n * @param event - The pointer event triggered by click.\r\n * @param hour - The selected hour string (\"00\"..\"23\").\r\n */\r\n protected onHourClick(event: PointerEvent, hour: string): void {\r\n event.stopPropagation();\r\n this.currentHourDegree = calculateHourDegree(hour);\r\n\r\n this.selectedHour = hour;\r\n this.selectHour.emit(hour);\r\n this.showHoursPicker$.next(false);\r\n this.showMinutesPicker$.next(true);\r\n\r\n this.handHours.nativeElement.style.setProperty('--angle', `${this.currentHourDegree}deg`);\r\n }\r\n\r\n /**\r\n * Handles AM/PM toggle for 12-hour format.\r\n * @param event - The change event from the checkbox input.\r\n */\r\n protected onMeridiemChange(event: Event): void {\r\n event.stopPropagation();\r\n const target = event.target as HTMLInputElement;\r\n this.selectedMeridiem = target.checked ? 'PM' : 'AM';\r\n this.selectMeridiem.emit(this.selectedMeridiem);\r\n }\r\n\r\n /**\r\n * Updates the minute hand to follow hover position.\r\n * @param minute - The minute string being hovered (\"00\"..\"55\", step 5).\r\n */\r\n protected onMinuteHover(minute: string): void {\r\n const angle = calculateMinuteDegree(minute);\r\n this.handMinutes.nativeElement.style.setProperty('--angle', `${angle}deg`);\r\n }\r\n\r\n /**\r\n * Resets the minute hand to the currently selected minute when hover leaves.\r\n */\r\n protected onMinuteLeave(): void {\r\n if (this.currentMinuteDegree) {\r\n this.handMinutes.nativeElement.style.setProperty('--angle', `${this.currentMinuteDegree}deg`);\r\n } else {\r\n this.handMinutes.nativeElement.style.removeProperty('--angle');\r\n }\r\n }\r\n\r\n /**\r\n * Handles user selection of a minute.\r\n * @param event - The pointer event triggered by click.\r\n * @param minute - The selected minute string (\"00\"..\"55\", step 5).\r\n */\r\n protected onMinuteClick(event: PointerEvent, minute: string): void {\r\n event.stopPropagation();\r\n this.currentMinuteDegree = calculateMinuteDegree(minute);\r\n\r\n this.selectedMinute = minute;\r\n this.selectMinute.emit(minute);\r\n this.showHoursPicker$.next(false);\r\n this.showMinutesPicker$.next(true);\r\n\r\n this.handMinutes.nativeElement.style.setProperty('--angle', `${this.currentMinuteDegree}deg`);\r\n this.closePicker.emit();\r\n }\r\n\r\n protected showHours(): void {\r\n this.showHoursPicker$.next(true);\r\n this.showMinutesPicker$.next(false);\r\n }\r\n\r\n protected showMinutes(): void {\r\n this.showHoursPicker$.next(false);\r\n this.showMinutesPicker$.next(true);\r\n }\r\n}\r\n","<div class=\"clock-mode-toggle\">\r\n <button\r\n type=\"button\"\r\n class=\"clock-mode-toggle__btn\"\r\n [class.is-active]=\"showHoursPicker$ | async\"\r\n (click)=\"showHours()\">\r\n Hours\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"clock-mode-toggle__btn\"\r\n [class.is-active]=\"showMinutesPicker$ | async\"\r\n (click)=\"showMinutes()\">\r\n Minutes\r\n </button>\r\n</div>\r\n\r\n<div class=\"clock-picker\">\r\n <div class=\"clock-face\">\r\n @if(showHoursPicker$ | async){\r\n @for(hour of clockHours; track hour){\r\n <button\r\n class=\"clock-hour\"\r\n [class.is-selected]=\"hour === selectedHour\"\r\n (mouseenter)=\"onHourHover(hour)\"\r\n (mouseleave)=\"onHourLeave()\"\r\n (click)=\"onHourClick($event, hour)\">\r\n {{hour}}\r\n </button>\r\n }\r\n @if(!isMeridiemFormat){\r\n @for(hour of fullClockHours; track hour){\r\n <button\r\n class=\"clock-hour\"\r\n [class.is-selected]=\"hour === selectedHour\"\r\n (mouseenter)=\"onHourHover(hour)\"\r\n (mouseleave)=\"onHourLeave()\"\r\n (click)=\"onHourClick($event, hour)\">\r\n {{hour}}\r\n </button>\r\n }\r\n }\r\n }\r\n\r\n @if(showMinutesPicker$ | async){\r\n @for(minute of clockMinutes; track minute){\r\n <button\r\n class=\"clock-minute\"\r\n [class.is-selected]=\"minute === selectedMinute\"\r\n (mouseenter)=\"onMinuteHover(minute)\"\r\n (mouseleave)=\"onMinuteLeave()\"\r\n (click)=\"onMinuteClick($event, minute)\">\r\n {{minute}}\r\n </button>\r\n }\r\n }\r\n\r\n <div class=\"clock-hand clock-hand--minutes\" [class.clock-hand--opacity]=\"showHoursPicker$ | async\" #handMinutes></div>\r\n <div class=\"clock-hand clock-hand--hours\" #handHours></div>\r\n </div>\r\n</div>\r\n\r\n@if(isMeridiemFormat){\r\n <div class=\"clock-footer\">\r\n <div class=\"clock-picker__meridiem\">\r\n <input\r\n [id]=\"'meridiem'\"\r\n [attr.data-partialTime]=\"'meridiem'\"\r\n type=\"checkbox\"\r\n tabindex=\"0\"\r\n role=\"switch\"\r\n [checked]=\"selectedMeridiem === 'PM'\"\r\n aria-checked=\"{{ selectedMeridiem === 'PM' }}\"\r\n placeholder=\"AM/PM\"\r\n (change)=\"onMeridiemChange($event)\"\r\n (keydown.enter)=\"onMeridiemChange($event)\"\r\n />\r\n </div>\r\n <span class=\"focus-line\"></span>\r\n </div>\r\n}\r\n","import { AsyncPipe } from '@angular/common';\r\nimport { Component, HostListener, Input } from '@angular/core';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { DateTimeFormat, TimeFormat } from '../../../types/common.types';\r\nimport { buildDateTimeFormatRegex, convertStringToDateTime, extractTimeFormat, formatDateTimeToString, isMeridiemFormat, isValidDateTime } from '../../../utils/date.utils';\r\nimport { InputBase } from '../input-base';\r\nimport { InputCalendarComponent } from '../input-calendar/input-calendar.component';\r\nimport { InputClockPickerComponent } from '../input-clock-picker/input-clock-picker.component';\r\nimport { DEFAULT_INPUT_DATE_TIME_ERROR_MESSAGES, DEFAULT_INPUT_DATE_TIME_WARNINGS_MESSAGES } from '../input-consts';\r\nimport { InputTimeMeridiem } from '../input-type';\r\nimport { InputValidationComponent } from '../input-validation/input-validation.component';\r\nimport { InputRequiredLabelPipe } from '../input.pipe';\r\n\r\n@Component({\r\n selector: 'frg-input-date-time',\r\n imports: [InputRequiredLabelPipe, ReactiveFormsModule, AsyncPipe, InputCalendarComponent, InputValidationComponent, InputClockPickerComponent],\r\n templateUrl: './input-date-time.component.html',\r\n styleUrl: './input-date-time.component.scss',\r\n})\r\nexport class InputDateTimeComponent extends InputBase<Date | null> {\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent) {\r\n const target = event.target as HTMLElement;\r\n\r\n const wrapper = document.getElementById(this.id)?.closest('.frg-input__wrapper');\r\n\r\n if (!target.closest('.frg-input__wrapper') || !wrapper?.contains(target)) {\r\n this.showDateTimePicker$.next(false);\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override label: string = '';\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override placeholder: string = '';\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override required: boolean = false;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override showValidation: boolean = true;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override errorMessages: Record<string, string> = {};\r\n /**\r\n * Minimum year selectable in the calendar\r\n */\r\n @Input() public minDateTime: Date = new Date(1900, 0, 1, 0, 0, 0);\r\n /**\r\n * Maximum year selectable in the calendar\r\n */\r\n @Input() public maxDateTime: Date = new Date(2099, 11, 31, 0, 0, 0);\r\n /**\r\n * The format of date time\r\n */\r\n @Input() public format: DateTimeFormat = 'dd/MM/yyyy HH:mm';\r\n\r\n public showDateTimePicker$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n\r\n public get currentMeridiem(): InputTimeMeridiem{\r\n return this.meridiem;\r\n }\r\n\r\n /**\r\n * Returns whether any warnings are active.\r\n */\r\n protected get hasWarning(): boolean {\r\n return this.warningList.length > 0;\r\n }\r\n\r\n /**\r\n * Returns dynamic warning messages, replacing {{limit}} with actual values.\r\n */\r\n protected override get warningList(): string[] {\r\n return Object.keys(this.warnings).map(key => {\r\n const template = DEFAULT_INPUT_DATE_TIME_WARNINGS_MESSAGES[key] || 'Check this value.';\r\n\r\n let replacement: string | undefined;\r\n\r\n switch (key) {\r\n case 'format':\r\n replacement = this.format;\r\n break;\r\n case 'min':\r\n replacement = formatDateTimeToString(this.minDateTime, this.format);\r\n break;\r\n case 'max':\r\n replacement = formatDateTimeToString(this.maxDateTime, this.format);\r\n break;\r\n }\r\n\r\n if (replacement != null) {\r\n const placeholder = key === 'format' ? '{{format}}' : '{{limit}}';\r\n return template.replace(placeholder, replacement.toString());\r\n }\r\n\r\n return template;\r\n });\r\n }\r\n\r\n /** Internal store for warnings */\r\n private readonly warnings: Record<string, boolean> = {};\r\n\r\n /** Current meridiem passed to clock picker */\r\n private meridiem: InputTimeMeridiem = 'AM';\r\n\r\n /**\r\n * Handles the blur event on the input element.\r\n * Marks the control as touched.\r\n */\r\n public override onFocus(_event: FocusEvent): void {\r\n this.showDateTimePicker$.next(true);\r\n }\r\n\r\n /**\r\n * Handles the blur event on the input element.\r\n * Marks the control as touched.\r\n */\r\n public override onBlur(event: FocusEvent): void {\r\n const input = event.target as HTMLInputElement;\r\n const value = input.value.trim();\r\n\r\n this.validate(value);\r\n\r\n if (isValidDateTime(value, this.format)) {\r\n let date = convertStringToDateTime(value, this.format);\r\n if (date) {\r\n date = this.clampDate(date);\r\n }\r\n this.value = date ?? null;\r\n input.value = this.formatDate(this.value);\r\n } else {\r\n input.value = '';\r\n this.value = null;\r\n }\r\n\r\n this.onTouched();\r\n this.onChange(this.value);\r\n }\r\n\r\n /**\r\n * Format value for input display\r\n * @param value Date value\r\n * @returns Formatted date string\r\n */\r\n protected formatDate(value: Date | null): string {\r\n if (value) {\r\n return formatDateTimeToString(value, this.format);\r\n }\r\n\r\n return '';\r\n }\r\n\r\n protected override updateView(_value: Date | null): void {\r\n // To be implemented<\r\n }\r\n\r\n protected override updateDisabledState(_isDisabled: boolean): void {\r\n // To be implemented\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected override get errorList(): string[] {\r\n if (!this.control?.errors) return [];\r\n\r\n const errors = this.control.errors;\r\n return Object.keys(errors)\r\n .filter(key => !key.startsWith('warning_'))\r\n .map(key => {\r\n if (this.errorMessages[key]) {\r\n return this.errorMessages[key];\r\n }\r\n let template = this.errorMessages[key] || DEFAULT_INPUT_DATE_TIME_ERROR_MESSAGES[key] || 'Invalid field.';\r\n\r\n switch (key) {\r\n case 'min':\r\n template = template.replace('{{date}}', formatDateTimeToString(this.minDateTime, this.format));\r\n break;\r\n case 'max':\r\n template = template.replace('{{date}}', formatDateTimeToString(this.maxDateTime, this.format));\r\n break;\r\n }\r\n\r\n return template;\r\n });\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n this.initPlaceholder();\r\n }\r\n\r\n public clearValue(): void {\r\n this.value = null;\r\n this.meridiem = 'AM';\r\n this.showDateTimePicker$.next(false);\r\n\r\n this.onChange(this.value);\r\n }\r\n\r\n protected selectDate(date: Date) {\r\n if (this.value) {\r\n const hours = this.value.getHours();\r\n const minutes = this.value.getMinutes();\r\n const seconds = this.value.getSeconds();\r\n const milliseconds = this.value.getMilliseconds();\r\n\r\n this.value = new Date(\r\n date.getFullYear(),\r\n date.getMonth(),\r\n date.getDate(),\r\n hours,\r\n minutes,\r\n seconds,\r\n milliseconds\r\n );\r\n } else {\r\n this.value = date;\r\n }\r\n\r\n this.onChange(this.value);\r\n this.onTouched();\r\n this.selectMeridiem(this.currentMeridiem);\r\n }\r\n\r\n /**\r\n * Initialize the placeholder based on the date format\r\n */\r\n private initPlaceholder() {\r\n this.placeholder = this.format;\r\n }\r\n\r\n protected selectHour(hour: string) {\r\n if (!this.value) {\r\n this.value = this.clampDate(new Date());\r\n }\r\n\r\n const newDate = new Date(this.value);\r\n const currentHours = newDate.getHours();\r\n\r\n let newHours = Number.parseInt(hour, 10);\r\n\r\n if (isMeridiemFormat(extractTimeFormat(this.format))) {\r\n const isPM = currentHours >= 12;\r\n\r\n if (isPM) {\r\n newHours = newHours === 12 ? 12 : newHours + 12;\r\n } else {\r\n newHours = newHours === 12 ? 0 : newHours;\r\n }\r\n }\r\n\r\n newDate.setHours(newHours);\r\n this.value = newDate;\r\n\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n\r\n protected selectMinute(minute: string) {\r\n if (!this.value) {\r\n this.value = this.clampDate(new Date());\r\n }\r\n\r\n const newDate = new Date(this.value);\r\n const newMinutes = Number.parseInt(minute, 10);\r\n\r\n newDate.setMinutes(newMinutes);\r\n this.value = newDate;\r\n\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n\r\n protected selectMeridiem(meridiem: InputTimeMeridiem) {\r\n if (!this.value) {\r\n const now = new Date();\r\n const base = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0, 0);\r\n this.value = this.clampDate(base);\r\n this.meridiem = meridiem;\r\n this.onChange(this.value);\r\n this.onTouched();\r\n return;\r\n }\r\n\r\n const newDate = new Date(this.value);\r\n let hours = newDate.getHours();\r\n\r\n if (meridiem === 'AM' && hours >= 12) hours -= 12;\r\n if (meridiem === 'PM' && hours < 12) hours += 12;\r\n\r\n newDate.setHours(hours);\r\n this.value = newDate;\r\n this.meridiem = meridiem;\r\n\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n\r\n protected get timeFormat(): TimeFormat | null {\r\n return extractTimeFormat(this.format);\r\n }\r\n\r\n protected toggleDateTimePicker() {\r\n this.showDateTimePicker$.next(!this.showDateTimePicker$.value);\r\n }\r\n\r\n /**\r\n * Adds a warning flag\r\n * @param key Warning key\r\n */\r\n private addWarning(key: string): void {\r\n this.warnings[key] = true;\r\n }\r\n\r\n /**\r\n * Clamp a date within min/max boundaries\r\n * @param date Date to clamp\r\n * @returns Clamped date and sets warnings if needed\r\n */\r\n private clampDate(date: Date): Date {\r\n let clamped = date;\r\n\r\n if (this.minDateTime && date < this.minDateTime) {\r\n this.addWarning('min');\r\n clamped = this.minDateTime;\r\n }\r\n\r\n if (this.maxDateTime && date > this.maxDateTime) {\r\n this.addWarning('max');\r\n clamped = this.maxDateTime;\r\n }\r\n\r\n return clamped;\r\n }\r\n\r\n /**\r\n * Remove a warning flag\r\n * @param key Warning key\r\n */\r\n private removeWarning(key: string): void {\r\n delete this.warnings[key];\r\n }\r\n\r\n /**\r\n * Validate the input value against the specified format\r\n * @param value Input value\r\n */\r\n private validate(value: string): void {\r\n this.removeWarning('format');\r\n this.removeWarning('min');\r\n this.removeWarning('max');\r\n\r\n if (!value) return;\r\n\r\n if (this.format) {\r\n const regex = buildDateTimeFormatRegex(this.format);\r\n if (!regex.test(value)) {\r\n this.addWarning('format');\r\n return;\r\n }\r\n }\r\n\r\n const date = convertStringToDateTime(value, this.format);\r\n if (!date) return;\r\n\r\n if (this.minDateTime && date < this.minDateTime) {\r\n this.addWarning('min');\r\n } else if (this.maxDateTime && date > this.maxDateTime) {\r\n this.addWarning('max');\r\n }\r\n }\r\n}\r\n","<div class=\"frg-input__wrapper\"\r\n [class.input-error]=\"hasError\"\r\n [class.input-warning]=\"hasWarning\"\r\n>\r\n @if(label){\r\n <label [for]=\"id\">{{ label | inputRequiredLabel: required }}</label>\r\n }\r\n <div class=\"frg-input__field\">\r\n <input\r\n [id]=\"id\"\r\n type=\"text\"\r\n [placeholder]=\"placeholder\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [value]=\"formatDate(value)\"\r\n (blur)=\"onBlur($event)\"\r\n (focus)=\"onFocus($event)\"\r\n (input)=\"onInput($event)\"\r\n />\r\n <div class=\"frg-input__handle-buttons\">\r\n @if(value){\r\n <button\r\n type=\"button\"\r\n class=\"frg-input__clear-button\"\r\n aria-label=\"Clear input\"\r\n (click)=\"clearValue()\"\r\n >\r\n ×\r\n </button>\r\n \r\n }\r\n <button class=\"fa-regular fa-calendar-days frg-input__calendar-button\"\r\n aria-label=\"Open calendar\"\r\n (click)=\"toggleDateTimePicker()\"\r\n ></button>\r\n </div>\r\n </div>\r\n @if(showDateTimePicker$ | async){\r\n <div class=\"frg-input__date-time-picker\">\r\n <div class=\"frg-input__date-time-panel\">\r\n <frg-input-calendar\r\n [minDate]=\"minDateTime\"\r\n [maxDate]=\"maxDateTime\"\r\n [selectedValue]=\"value\"\r\n (selectDate)=\"selectDate($event)\"\r\n >\r\n </frg-input-calendar>\r\n\r\n <frg-input-clock-picker\r\n [timeFormat]=\"timeFormat\"\r\n [selectedHour]=\"value ? value.getHours().toString() : null\"\r\n [selectedMinute]=\"value ? value.getMinutes().toString() : null\"\r\n [selectedMeridiem]=\"currentMeridiem\"\r\n (selectHour)=\"selectHour($event)\"\r\n (selectMinute)=\"selectMinute($event)\"\r\n (selectMeridiem)=\"selectMeridiem($event)\">\r\n </frg-input-clock-picker>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n\r\n@if (showValidation) {\r\n <frg-input-validation\r\n [errorList]=\"errorList\"\r\n [warningList]=\"warningList\"\r\n [isFormInvalid]=\"hasError\"\r\n >\r\n </frg-input-validation>\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { InputBase } from '../input-base';\r\nimport { DEFAULT_INPUT_TOGGLE_SWITCH_ERROR_MESSAGES, DEFAULT_INPUT_TOGGLE_SWITCH_WARNINGS_MESSAGES } from '../input-consts';\r\nimport { InputToggleSwitchType } from '../input-type';\r\nimport { InputValidationComponent } from '../input-validation/input-validation.component';\r\nimport { InputRequiredLabelPipe } from '../input.pipe';\r\nimport { NgClass } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'frg-input-toggle-switch',\r\n imports: [InputRequiredLabelPipe ,InputValidationComponent, NgClass],\r\n templateUrl: './input-toggle-switch.component.html',\r\n styleUrls: ['./input-toggle-switch.component.scss'],\r\n})\r\nexport class InputToggleSwitchComponent extends InputBase<boolean> {\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override label: string = '';\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override required: boolean = false;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override disabled: boolean = false;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override errorMessages: Record<string, string> = {};\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override warningMessages: Record<string, string> = {};\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override showValidation: boolean = true;\r\n /**\r\n * The toggle switch type\r\n * @default 'square'\r\n */\r\n @Input() public type: InputToggleSwitchType = 'square';\r\n\r\n /**\r\n * Toggles the switch value\r\n */\r\n public toggle(): void {\r\n if(this.disabled) return;\r\n\r\n this.value = !this.value;\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n\r\n public onKeydown(event: KeyboardEvent) {\r\n if (this.disabled) return;\r\n\r\n const keys = ['Enter', ' ', 'Spacebar', 'ArrowLeft', 'ArrowRight'];\r\n if (keys.includes(event.key)) {\r\n event.preventDefault();\r\n this.toggle();\r\n }\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected updateView(_value: boolean | null): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected updateDisabledState(_isDisabled: boolean): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected override get errorList(): string[] {\r\n if (!this.control?.errors) return [];\r\n const errors = this.control.errors;\r\n return Object.keys(errors).map(key => {\r\n if (this.errorMessages[key]) {\r\n return this.errorMessages[key];\r\n }\r\n return DEFAULT_INPUT_TOGGLE_SWITCH_ERROR_MESSAGES[key] || 'Invalid field.';\r\n });\r\n }\r\n\r\n /**\r\n * Returns warning messages. Consumers may pass arbitrary warnings via `warningMessages`.\r\n * Falls back to DEFAULT_INPUT_TOGGLE_SWITCH_WARNINGS_MESSAGES or a generic message.\r\n */\r\n protected override get warningList(): string[] {\r\n return Object.keys(this.warningMessages).map(key => {\r\n return (\r\n this.warningMessages[key] ||\r\n DEFAULT_INPUT_TOGGLE_SWITCH_WARNINGS_MESSAGES[key] ||\r\n ''\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Returns whether any warnings are active.\r\n */\r\n protected get hasWarning(): boolean {\r\n return this.warningList.length > 0;\r\n }\r\n\r\n}\r\n","\r\n<div class=\"frg-toggle-switch__wrapper\" \r\n [class.input-error]=\"hasError\"\r\n [class.input-warning]=\"hasWarning\"\r\n>\r\n @if(label){\r\n <label [for]=\"id\">{{ label | inputRequiredLabel: required }}</label>\r\n }\r\n <button\r\n type=\"button\"\r\n class=\"frg-toggle-switch\"\r\n [ngClass]=\"[\r\n 'frg-toggle-switch--' + type,\r\n value ? 'frg-toggle-switch--on' : 'frg-toggle-switch--off',\r\n disabled ? 'disabled' : ''\r\n ]\"\r\n [aria-checked]=\"value\"\r\n [disabled]=\"disabled\"\r\n (click)=\"toggle()\"\r\n (keydown)=\"onKeydown($event)\"\r\n >\r\n <span class=\"handle\">\r\n @if (disabled) {\r\n <span class=\"fas fa-ban\"></span>\r\n }\r\n </span>\r\n </button>\r\n \r\n @if(showValidation) {\r\n <frg-input-validation\r\n [errorList]=\"errorList\"\r\n [warningList]=\"warningList\"\r\n [isFormInvalid]=\"hasError\"\r\n ></frg-input-validation>\r\n }\r\n</div>","import { NgClass } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { InputBase } from '../input-base';\r\nimport { DEFAULT_INPUT_CHECKBOX_ERROR_MESSAGES, DEFAULT_INPUT_CHECKBOX_WARNINGS_MESSAGES } from '../input-consts';\r\nimport { InputChoiceStyleType } from '../input-type';\r\nimport { InputValidationComponent } from '../input-validation/input-validation.component';\r\nimport { InputRequiredLabelPipe } from '../input.pipe';\r\n\r\n@Component({\r\n selector: 'frg-input-checkbox',\r\n imports: [InputRequiredLabelPipe, InputValidationComponent, NgClass],\r\n templateUrl: './input-checkbox.component.html',\r\n styleUrl: './input-checkbox.component.scss',\r\n})\r\nexport class InputCheckboxComponent extends InputBase<boolean> {\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override label: string = '';\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override required: boolean = false;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override disabled: boolean = false;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override errorMessages: Record<string, string> = {};\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override warningMessages: Record<string, string> = {};\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override showValidation: boolean = true;\r\n /**\r\n * Sets the visual style of the checkbox.\r\n */\r\n @Input() public styleType: InputChoiceStyleType = 'primary';\r\n\r\n /**\r\n * Toggles the checkbox value.\r\n */\r\n public onToggle(event: Event): void {\r\n if (this.disabled) return;\r\n\r\n const input = event.target as HTMLInputElement;\r\n this.value = input.checked;\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public override onBlur(): void {\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected updateView(_value: boolean | null): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected updateDisabledState(_isDisabled: boolean): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected override get errorList(): string[] {\r\n if (!this.control?.errors) return [];\r\n const errors = this.control.errors;\r\n return Object.keys(errors).map(key => {\r\n if (this.errorMessages[key]) {\r\n return this.errorMessages[key];\r\n }\r\n return DEFAULT_INPUT_CHECKBOX_ERROR_MESSAGES[key] || 'Invalid field.';\r\n });\r\n }\r\n\r\n /**\r\n * Returns warning messages. Consumers may pass arbitrary warnings via `warningMessages`.\r\n * Falls back to DEFAULT_INPUT_CHECKBOX_WARNINGS_MESSAGES or a generic message.\r\n */\r\n protected override get warningList(): string[] {\r\n return Object.keys(this.warningMessages).map(key => {\r\n return (\r\n this.warningMessages[key] ||\r\n DEFAULT_INPUT_CHECKBOX_WARNINGS_MESSAGES[key] ||\r\n ''\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Returns whether any warnings are active.\r\n */\r\n protected get hasWarning(): boolean {\r\n return this.warningList.length > 0;\r\n }\r\n}\r\n","<div\r\n class=\"frg-checkbox__wrapper\"\r\n [class.input-error]=\"hasError\"\r\n [class.input-warning]=\"hasWarning\"\r\n [ngClass]=\"{\r\n 'frg-checkbox__primary': styleType === 'primary',\r\n 'frg-checkbox__secondary': styleType === 'secondary',\r\n 'frg-checkbox__tertiary': styleType === 'tertiary',\r\n 'frg-checkbox__success': styleType === 'success',\r\n 'frg-checkbox__warning': styleType === 'warning',\r\n 'frg-checkbox__danger': styleType === 'danger',\r\n 'frg-checkbox__light': styleType === 'light',\r\n 'frg-checkbox__dark': styleType === 'dark'\r\n }\"\r\n>\r\n <label class=\"frg-checkbox\" [class.disabled]=\"disabled\">\r\n <input\r\n type=\"checkbox\"\r\n [id]=\"id\"\r\n [checked]=\"value\"\r\n [disabled]=\"disabled\"\r\n (change)=\"onToggle($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n @if (label) {\r\n <span class=\"frg-checkbox__label\">{{ label | inputRequiredLabel: required }}</span>\r\n }\r\n </label>\r\n\r\n @if(showValidation) {\r\n <frg-input-validation\r\n [errorList]=\"errorList\"\r\n [warningList]=\"warningList\"\r\n [isFormInvalid]=\"hasError\"\r\n ></frg-input-validation>\r\n }\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { InputBase } from '../input-base';\r\nimport { DEFAULT_INPUT_CHECKBOX_GROUP_ERROR_MESSAGES, DEFAULT_INPUT_CHECKBOX_GROUP_WARNINGS_MESSAGES } from '../input-consts';\r\nimport { InputChoiceStyleType } from '../input-type';\r\nimport { InputValidationComponent } from '../input-validation/input-validation.component';\r\nimport { InputRequiredLabelPipe } from '../input.pipe';\r\nimport { NgClass } from '@angular/common';\r\n\r\nexport interface InputCheckboxGroupItem<T> {\r\n id: string;\r\n label: string;\r\n value: T;\r\n disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'frg-input-checkbox-group',\r\n imports: [NgClass, InputRequiredLabelPipe, InputValidationComponent],\r\n templateUrl: './input-checkbox-group.component.html',\r\n styleUrl: './input-checkbox-group.component.scss',\r\n})\r\nexport class InputCheckboxGroupComponent<T> extends InputBase<Array<T>> {\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override label: string = '';\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override required: boolean = false;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override disabled: boolean = false;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override errorMessages: Record<string, string> = {};\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override warningMessages: Record<string, string> = {};\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override showValidation: boolean = true;\r\n /**\r\n * Sets the visual style of the checkbox group.\r\n */\r\n @Input() public styleType: InputChoiceStyleType = 'primary';\r\n\r\n @Input() public items: Array<InputCheckboxGroupItem<T>> = [];\r\n @Input() public compareWith: (a: T, b: T) => boolean = (a, b) => a === b;\r\n\r\n /**\r\n * Toggles a checkbox item value.\r\n */\r\n public toggleItem(item: InputCheckboxGroupItem<T>, event: Event): void {\r\n if (this.disabled || item.disabled) return;\r\n\r\n const input = event.target as HTMLInputElement;\r\n const current = this.value ? [...this.value] : [];\r\n const isSelected = current.some(value => this.compareWith(value, item.value));\r\n\r\n const next = input.checked\r\n ? (isSelected ? current : [...current, item.value])\r\n : current.filter(value => !this.compareWith(value, item.value));\r\n\r\n this.value = next;\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * Checks if the item is selected.\r\n */\r\n public isSelected(item: InputCheckboxGroupItem<T>): boolean {\r\n return (this.value ?? []).some(value => this.compareWith(value, item.value));\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public override onBlur(): void {\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected updateView(_value: Array<T> | null): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected updateDisabledState(_isDisabled: boolean): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected override get errorList(): string[] {\r\n if (!this.control?.errors) return [];\r\n const errors = this.control.errors;\r\n return Object.keys(errors).map(key => {\r\n if (this.errorMessages[key]) {\r\n return this.errorMessages[key];\r\n }\r\n return DEFAULT_INPUT_CHECKBOX_GROUP_ERROR_MESSAGES[key] || 'Invalid field.';\r\n });\r\n }\r\n\r\n /**\r\n * Returns warning messages. Consumers may pass arbitrary warnings via `warningMessages`.\r\n * Falls back to DEFAULT_INPUT_CHECKBOX_GROUP_WARNINGS_MESSAGES or a generic message.\r\n */\r\n protected override get warningList(): string[] {\r\n return Object.keys(this.warningMessages).map(key => {\r\n return (\r\n this.warningMessages[key] ||\r\n DEFAULT_INPUT_CHECKBOX_GROUP_WARNINGS_MESSAGES[key] ||\r\n ''\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Returns whether any warnings are active.\r\n */\r\n protected get hasWarning(): boolean {\r\n return this.warningList.length > 0;\r\n }\r\n}\r\n","<div\r\n class=\"frg-checkbox-group__wrapper\"\r\n [class.input-error]=\"hasError\"\r\n [class.input-warning]=\"hasWarning\"\r\n [ngClass]=\"{\r\n 'frg-checkbox-group__primary': styleType === 'primary',\r\n 'frg-checkbox-group__secondary': styleType === 'secondary',\r\n 'frg-checkbox-group__tertiary': styleType === 'tertiary',\r\n 'frg-checkbox-group__success': styleType === 'success',\r\n 'frg-checkbox-group__warning': styleType === 'warning',\r\n 'frg-checkbox-group__danger': styleType === 'danger',\r\n 'frg-checkbox-group__light': styleType === 'light',\r\n 'frg-checkbox-group__dark': styleType === 'dark'\r\n }\"\r\n>\r\n @if(label){\r\n <span class=\"frg-checkbox-group__label\">{{ label | inputRequiredLabel: required }}</span>\r\n }\r\n\r\n <div class=\"frg-checkbox-group__list\">\r\n @for (item of items; track item.id) {\r\n <label class=\"frg-checkbox\" [class.disabled]=\"disabled || item.disabled\">\r\n <input\r\n type=\"checkbox\"\r\n [id]=\"id + '-' + item.id\"\r\n [checked]=\"isSelected(item)\"\r\n [disabled]=\"disabled || item.disabled\"\r\n (change)=\"toggleItem(item, $event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <span class=\"frg-checkbox__label\">{{ item.label }}</span>\r\n </label>\r\n }\r\n </div>\r\n\r\n @if(showValidation) {\r\n <frg-input-validation\r\n [errorList]=\"errorList\"\r\n [warningList]=\"warningList\"\r\n [isFormInvalid]=\"hasError\"\r\n ></frg-input-validation>\r\n }\r\n</div>\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, Input } from '@angular/core';\r\nimport { InputBase } from '../input-base';\r\nimport { DEFAULT_INPUT_RADIO_GROUP_ERROR_MESSAGES, DEFAULT_INPUT_RADIO_GROUP_WARNINGS_MESSAGES } from '../input-consts';\r\nimport { InputChoiceStyleType } from '../input-type';\r\nimport { InputValidationComponent } from '../input-validation/input-validation.component';\r\nimport { InputRequiredLabelPipe } from '../input.pipe';\r\n\r\nexport interface InputRadioGroupItem<T> {\r\n id: string;\r\n label: string;\r\n value: T;\r\n disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'frg-input-radio-group',\r\n imports: [NgClass, InputRequiredLabelPipe, InputValidationComponent],\r\n templateUrl: './input-radio-group.component.html',\r\n styleUrl: './input-radio-group.component.scss',\r\n})\r\nexport class InputRadioGroupComponent<T> extends InputBase<T> {\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override label: string = '';\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override required: boolean = false;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override disabled: boolean = false;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override errorMessages: Record<string, string> = {};\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override warningMessages: Record<string, string> = {};\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override showValidation: boolean = true;\r\n /**\r\n * Sets the visual style of the radio group.\r\n */\r\n @Input() public styleType: InputChoiceStyleType = 'primary';\r\n\r\n @Input() public items: Array<InputRadioGroupItem<T>> = [];\r\n @Input() public compareWith: (a: T, b: T) => boolean = (a, b) => a === b;\r\n\r\n /**\r\n * Selects a radio item value.\r\n */\r\n public selectItem(item: InputRadioGroupItem<T>, event: Event): void {\r\n if (this.disabled || item.disabled) return;\r\n\r\n const input = event.target as HTMLInputElement;\r\n if (!input.checked) return;\r\n\r\n this.value = item.value;\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * Checks if the item is selected.\r\n */\r\n public isSelected(item: InputRadioGroupItem<T>): boolean {\r\n if (this.value === null || this.value === undefined) return false;\r\n return this.compareWith(this.value, item.value);\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n public override onBlur(): void {\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected updateView(_value: T | null): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected updateDisabledState(_isDisabled: boolean): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n */\r\n protected override get errorList(): string[] {\r\n if (!this.control?.errors) return [];\r\n const errors = this.control.errors;\r\n return Object.keys(errors).map(key => {\r\n if (this.errorMessages[key]) {\r\n return this.errorMessages[key];\r\n }\r\n return DEFAULT_INPUT_RADIO_GROUP_ERROR_MESSAGES[key] || 'Invalid field.';\r\n });\r\n }\r\n\r\n /**\r\n * Returns warning messages. Consumers may pass arbitrary warnings via `warningMessages`.\r\n * Falls back to DEFAULT_INPUT_RADIO_GROUP_WARNINGS_MESSAGES or a generic message.\r\n */\r\n protected override get warningList(): string[] {\r\n return Object.keys(this.warningMessages).map(key => {\r\n return (\r\n this.warningMessages[key] ||\r\n DEFAULT_INPUT_RADIO_GROUP_WARNINGS_MESSAGES[key] ||\r\n ''\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Returns whether any warnings are active.\r\n */\r\n protected get hasWarning(): boolean {\r\n return this.warningList.length > 0;\r\n }\r\n}\r\n","<div\r\n class=\"frg-radio-group__wrapper\"\r\n [class.input-error]=\"hasError\"\r\n [class.input-warning]=\"hasWarning\"\r\n [ngClass]=\"{\r\n 'frg-radio-group__primary': styleType === 'primary',\r\n 'frg-radio-group__secondary': styleType === 'secondary',\r\n 'frg-radio-group__tertiary': styleType === 'tertiary',\r\n 'frg-radio-group__success': styleType === 'success',\r\n 'frg-radio-group__warning': styleType === 'warning',\r\n 'frg-radio-group__danger': styleType === 'danger',\r\n 'frg-radio-group__light': styleType === 'light',\r\n 'frg-radio-group__dark': styleType === 'dark'\r\n }\"\r\n>\r\n @if(label){\r\n <span class=\"frg-radio-group__label\">{{ label | inputRequiredLabel: required }}</span>\r\n }\r\n\r\n <div class=\"frg-radio-group__list\">\r\n @for (item of items; track item.id) {\r\n <label class=\"frg-radio\" [class.disabled]=\"disabled || item.disabled\">\r\n <input\r\n type=\"radio\"\r\n [id]=\"id + '-' + item.id\"\r\n [name]=\"id\"\r\n [checked]=\"isSelected(item)\"\r\n [disabled]=\"disabled || item.disabled\"\r\n (change)=\"selectItem(item, $event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <span class=\"frg-radio__label\">{{ item.label }}</span>\r\n </label>\r\n }\r\n </div>\r\n\r\n @if(showValidation) {\r\n <frg-input-validation\r\n [errorList]=\"errorList\"\r\n [warningList]=\"warningList\"\r\n [isFormInvalid]=\"hasError\"\r\n ></frg-input-validation>\r\n }\r\n</div>\r\n","import { Component, ElementRef, HostListener, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { NgClass } from '@angular/common';\r\nimport { InputBase } from '../input-base';\r\nimport { InputRequiredLabelPipe } from '../input.pipe';\r\nimport { InputValidationComponent } from '../input-validation/input-validation.component';\r\nimport { DEFAULT_INPUT_SLIDER_ERROR_MESSAGES, DEFAULT_INPUT_SLIDER_WARNING_MESSAGES } from '../input-consts';\r\nimport { InputChoiceStyleType, InputSliderSize } from '../input-type';\r\n\r\ntype InputSliderValue = number | [number, number];\r\ntype SliderHandle = 'single' | 'min' | 'max';\r\n\r\n@Component({\r\n selector: 'frg-input-slider',\r\n imports: [InputRequiredLabelPipe, InputValidationComponent, NgClass],\r\n templateUrl: './input-slider.component.html',\r\n styleUrl: './input-slider.component.scss',\r\n})\r\nexport class InputSliderComponent extends InputBase<InputSliderValue> implements OnInit {\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override label: string = '';\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override required: boolean = false;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override showValidation: boolean = true;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override errorMessages: Record<string, string> = {};\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override warningMessages: Record<string, string> = {};\r\n\r\n /**\r\n * Minimum slider value.\r\n */\r\n @Input() public min: number = 0;\r\n /**\r\n * Maximum slider value.\r\n */\r\n @Input() public max: number = 100;\r\n /**\r\n * Step interval for the slider.\r\n */\r\n @Input() public step: number = 1;\r\n /**\r\n * Enable dual-handle range mode.\r\n */\r\n @Input() public range: boolean = false;\r\n /**\r\n * Show tick marks along the track.\r\n */\r\n @Input() public showTicks: boolean = false;\r\n /**\r\n * Optional tick interval (defaults to step).\r\n */\r\n @Input() public tickStep: number | null = null;\r\n /**\r\n * Maximum number of ticks to render.\r\n */\r\n @Input() public maxTicks: number = 50;\r\n /**\r\n * Show tooltip on hover/drag.\r\n */\r\n @Input() public showTooltip: boolean = true;\r\n /**\r\n * Show numeric value(s) above the slider.\r\n */\r\n @Input() public showValue: boolean = false;\r\n /**\r\n * Slider size.\r\n */\r\n @Input() public size: InputSliderSize = 'medium';\r\n /**\r\n * Slider color style.\r\n */\r\n @Input() public styleType: InputChoiceStyleType = 'primary';\r\n\r\n @ViewChild('track', { static: true }) private track!: ElementRef<HTMLDivElement>;\r\n\r\n private currentValue: number = 0;\r\n private currentRange: [number, number] = [0, 0];\r\n private dragging: boolean = false;\r\n private activeHandle: SliderHandle = 'single';\r\n private activePointerId: number | null = null;\r\n\r\n /** Internal store for warnings */\r\n private warnings: Record<string, boolean> = {};\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n this.syncFromValue();\r\n }\r\n\r\n protected updateView(_value: InputSliderValue | null): void {\r\n this.syncFromValue();\r\n }\r\n\r\n protected updateDisabledState(_isDisabled: boolean): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n protected override get errorList(): string[] {\r\n if (!this.control?.errors) return [];\r\n return Object.keys(this.control.errors).map(key => {\r\n return this.errorMessages[key] ?? DEFAULT_INPUT_SLIDER_ERROR_MESSAGES[key] ?? 'Invalid field.';\r\n });\r\n }\r\n\r\n protected override get warningList(): string[] {\r\n return Object.keys(this.warnings).map(key => {\r\n return (\r\n this.warningMessages[key] ??\r\n DEFAULT_INPUT_SLIDER_WARNING_MESSAGES[key] ??\r\n ''\r\n );\r\n });\r\n }\r\n\r\n protected get hasWarning(): boolean {\r\n return this.warningList.length > 0;\r\n }\r\n\r\n protected get displayValue(): string {\r\n return this.formatValue(this.currentValue);\r\n }\r\n\r\n protected get displayRangeMin(): string {\r\n return this.formatValue(this.currentRange[0]);\r\n }\r\n\r\n protected get displayRangeMax(): string {\r\n return this.formatValue(this.currentRange[1]);\r\n }\r\n\r\n protected get rangeMinValue(): number {\r\n return this.currentRange[0];\r\n }\r\n\r\n protected get rangeMaxValue(): number {\r\n return this.currentRange[1];\r\n }\r\n\r\n protected get singleValue(): number {\r\n return this.currentValue;\r\n }\r\n\r\n protected get minPercent(): number {\r\n return this.valueToPercent(this.currentRange[0]);\r\n }\r\n\r\n protected get maxPercent(): number {\r\n return this.valueToPercent(this.currentRange[1]);\r\n }\r\n\r\n protected get singlePercent(): number {\r\n return this.valueToPercent(this.currentValue);\r\n }\r\n\r\n protected get rangeWidth(): number {\r\n return this.maxPercent - this.minPercent;\r\n }\r\n\r\n protected get showRange(): boolean {\r\n return this.range;\r\n }\r\n\r\n protected get ticks(): number[] {\r\n if (!this.showTicks) return [];\r\n const step = this.tickStep ?? this.step;\r\n if (step <= 0 || this.max <= this.min) return [];\r\n\r\n const count = Math.floor((this.max - this.min) / step);\r\n if (count <= this.maxTicks) {\r\n return Array.from({ length: count + 1 }, (_, i) => this.min + i * step);\r\n }\r\n\r\n const interval = (this.max - this.min) / this.maxTicks;\r\n return Array.from({ length: this.maxTicks + 1 }, (_, i) => this.min + i * interval);\r\n }\r\n\r\n protected get sliderClasses(): Record<string, boolean> {\r\n return {\r\n [`frg-slider--${this.size}`]: true,\r\n [`frg-slider--${this.styleType}`]: true,\r\n };\r\n }\r\n\r\n protected isHandleActive(handle: SliderHandle): boolean {\r\n return this.dragging && this.activeHandle === handle;\r\n }\r\n\r\n protected onTrackPointerDown(event: PointerEvent): void {\r\n if (this.disabled) return;\r\n event.preventDefault();\r\n\r\n const value = this.valueFromPointer(event);\r\n if (this.range) {\r\n const distMin = Math.abs(value - this.currentRange[0]);\r\n const distMax = Math.abs(value - this.currentRange[1]);\r\n this.activeHandle = distMin <= distMax ? 'min' : 'max';\r\n this.setRangeValue(this.activeHandle, value, true);\r\n } else {\r\n this.activeHandle = 'single';\r\n this.setSingleValue(value, true);\r\n }\r\n\r\n this.startDragging(event);\r\n }\r\n\r\n protected onHandlePointerDown(event: PointerEvent, handle: SliderHandle): void {\r\n if (this.disabled) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n this.activeHandle = handle;\r\n this.startDragging(event);\r\n }\r\n\r\n protected onHandleKeydown(event: KeyboardEvent, handle: SliderHandle): void {\r\n if (this.disabled) return;\r\n\r\n const step = this.safeStep;\r\n let nextValue: number | null = null;\r\n\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n case 'ArrowDown':\r\n nextValue = this.getHandleValue(handle) - step;\r\n break;\r\n case 'ArrowRight':\r\n case 'ArrowUp':\r\n nextValue = this.getHandleValue(handle) + step;\r\n break;\r\n case 'PageDown':\r\n nextValue = this.getHandleValue(handle) - step * 10;\r\n break;\r\n case 'PageUp':\r\n nextValue = this.getHandleValue(handle) + step * 10;\r\n break;\r\n case 'Home':\r\n nextValue = this.min;\r\n break;\r\n case 'End':\r\n nextValue = this.max;\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n const snapped = this.snapValue(nextValue);\r\n\r\n if (this.range) {\r\n this.setRangeValue(handle, snapped, true);\r\n } else {\r\n this.setSingleValue(snapped, true);\r\n }\r\n }\r\n\r\n @HostListener('document:pointermove', ['$event'])\r\n protected onDocumentPointerMove(event: PointerEvent): void {\r\n if (!this.dragging || (this.activePointerId !== null && event.pointerId !== this.activePointerId)) return;\r\n event.preventDefault();\r\n\r\n const value = this.valueFromPointer(event);\r\n if (this.range) {\r\n this.setRangeValue(this.activeHandle, value, true);\r\n } else {\r\n this.setSingleValue(value, true);\r\n }\r\n }\r\n\r\n @HostListener('document:pointerup', ['$event'])\r\n protected onDocumentPointerUp(event: PointerEvent): void {\r\n if (!this.dragging || (this.activePointerId !== null && event.pointerId !== this.activePointerId)) return;\r\n event.preventDefault();\r\n\r\n this.dragging = false;\r\n this.activePointerId = null;\r\n this.onTouched();\r\n }\r\n\r\n private syncFromValue(): void {\r\n if (this.range) {\r\n const next = this.normalizeRangeValue(this.value);\r\n this.currentRange = next;\r\n } else {\r\n const next = this.normalizeSingleValue(this.value);\r\n this.currentValue = next;\r\n }\r\n }\r\n\r\n private normalizeSingleValue(value: InputSliderValue | null): number {\r\n const raw = typeof value === 'number' ? value : Array.isArray(value) ? value[0] : this.min;\r\n return this.snapValue(raw);\r\n }\r\n\r\n private normalizeRangeValue(value: InputSliderValue | null): [number, number] {\r\n let start = this.min;\r\n let end = this.max;\r\n\r\n if (Array.isArray(value) && value.length === 2) {\r\n start = value[0];\r\n end = value[1];\r\n } else if (typeof value === 'number') {\r\n start = value;\r\n end = this.max;\r\n }\r\n\r\n start = this.snapValue(start);\r\n end = this.snapValue(end);\r\n\r\n if (start > end) {\r\n return [end, start];\r\n }\r\n\r\n return [start, end];\r\n }\r\n\r\n private setSingleValue(value: number, emit: boolean): void {\r\n const next = this.snapValue(value);\r\n if (next === this.currentValue) return;\r\n\r\n this.currentValue = next;\r\n this.value = next;\r\n if (emit) {\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n private setRangeValue(handle: SliderHandle, value: number, emit: boolean): void {\r\n let [start, end] = this.currentRange;\r\n const next = this.snapValue(value);\r\n\r\n if (handle === 'min') {\r\n start = Math.min(next, end);\r\n } else if (handle === 'max') {\r\n end = Math.max(next, start);\r\n }\r\n\r\n if (start === this.currentRange[0] && end === this.currentRange[1]) return;\r\n\r\n this.currentRange = [start, end];\r\n this.value = [start, end];\r\n if (emit) {\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n private startDragging(event: PointerEvent): void {\r\n this.dragging = true;\r\n this.activePointerId = event.pointerId ?? null;\r\n }\r\n\r\n private valueFromPointer(event: PointerEvent): number {\r\n const rect = this.track.nativeElement.getBoundingClientRect();\r\n const ratio = (event.clientX - rect.left) / rect.width;\r\n const clamped = Math.min(1, Math.max(0, ratio));\r\n return this.min + clamped * (this.max - this.min);\r\n }\r\n\r\n protected valueToPercent(value: number): number {\r\n if (this.max === this.min) return 0;\r\n return ((value - this.min) / (this.max - this.min)) * 100;\r\n }\r\n\r\n private snapValue(value: number): number {\r\n const clamped = Math.min(this.max, Math.max(this.min, value));\r\n const step = this.safeStep;\r\n const steps = Math.round((clamped - this.min) / step);\r\n const snapped = this.min + steps * step;\r\n return this.roundToPrecision(snapped);\r\n }\r\n\r\n private roundToPrecision(value: number): number {\r\n const precision = this.stepPrecision;\r\n if (precision <= 0) return Math.round(value);\r\n return Number(value.toFixed(precision));\r\n }\r\n\r\n private formatValue(value: number): string {\r\n const precision = this.stepPrecision;\r\n if (precision <= 0) return value.toString();\r\n return value.toFixed(precision);\r\n }\r\n\r\n private get safeStep(): number {\r\n return this.step > 0 ? this.step : 1;\r\n }\r\n\r\n private get stepPrecision(): number {\r\n const text = this.safeStep.toString();\r\n const index = text.indexOf('.');\r\n return index >= 0 ? text.length - index - 1 : 0;\r\n }\r\n\r\n private getHandleValue(handle: SliderHandle): number {\r\n if (!this.range) return this.currentValue;\r\n return handle === 'min' ? this.currentRange[0] : this.currentRange[1];\r\n }\r\n}\r\n","<div class=\"frg-input__wrapper\"\r\n [class.input-error]=\"hasError\"\r\n [class.input-warning]=\"hasWarning\"\r\n [class.is-disabled]=\"disabled\"\r\n>\r\n @if(label){\r\n <label [attr.id]=\"id + '-label'\" [for]=\"id\">{{ label | inputRequiredLabel: required }}</label>\r\n }\r\n\r\n @if(showValue){\r\n <div class=\"frg-slider__values\">\r\n @if(showRange){\r\n <span>{{ displayRangeMin }}</span>\r\n <span>{{ displayRangeMax }}</span>\r\n } @else {\r\n <span>{{ displayValue }}</span>\r\n }\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"frg-slider\"\r\n #track\r\n [ngClass]=\"sliderClasses\"\r\n [class.is-disabled]=\"disabled\"\r\n (pointerdown)=\"onTrackPointerDown($event)\"\r\n >\r\n <div class=\"frg-slider__rail\"></div>\r\n <div\r\n class=\"frg-slider__range\"\r\n [style.left.%]=\"showRange ? minPercent : 0\"\r\n [style.width.%]=\"showRange ? rangeWidth : singlePercent\"\r\n ></div>\r\n\r\n @if(showTicks){\r\n <div class=\"frg-slider__ticks\">\r\n @for(tick of ticks; track tick){\r\n <span class=\"frg-slider__tick\" [style.left.%]=\"valueToPercent(tick)\"></span>\r\n }\r\n </div>\r\n }\r\n\r\n @if(showRange){\r\n <button\r\n type=\"button\"\r\n class=\"frg-slider__thumb\"\r\n [class.is-active]=\"isHandleActive('min')\"\r\n [style.left.%]=\"minPercent\"\r\n [attr.aria-labelledby]=\"id + '-label'\"\r\n role=\"slider\"\r\n [attr.aria-valuemin]=\"min\"\r\n [attr.aria-valuemax]=\"rangeMaxValue\"\r\n [attr.aria-valuenow]=\"rangeMinValue\"\r\n [attr.aria-disabled]=\"disabled\"\r\n (pointerdown)=\"onHandlePointerDown($event, 'min')\"\r\n (keydown)=\"onHandleKeydown($event, 'min')\"\r\n >\r\n @if(showTooltip){\r\n <span class=\"frg-slider__tooltip\">{{ displayRangeMin }}</span>\r\n }\r\n </button>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"frg-slider__thumb\"\r\n [class.is-active]=\"isHandleActive('max')\"\r\n [style.left.%]=\"maxPercent\"\r\n [attr.aria-labelledby]=\"id + '-label'\"\r\n role=\"slider\"\r\n [attr.aria-valuemin]=\"rangeMinValue\"\r\n [attr.aria-valuemax]=\"max\"\r\n [attr.aria-valuenow]=\"rangeMaxValue\"\r\n [attr.aria-disabled]=\"disabled\"\r\n (pointerdown)=\"onHandlePointerDown($event, 'max')\"\r\n (keydown)=\"onHandleKeydown($event, 'max')\"\r\n >\r\n @if(showTooltip){\r\n <span class=\"frg-slider__tooltip\">{{ displayRangeMax }}</span>\r\n }\r\n </button>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"frg-slider__thumb\"\r\n [class.is-active]=\"isHandleActive('single')\"\r\n [style.left.%]=\"singlePercent\"\r\n [attr.aria-labelledby]=\"id + '-label'\"\r\n role=\"slider\"\r\n [attr.aria-valuemin]=\"min\"\r\n [attr.aria-valuemax]=\"max\"\r\n [attr.aria-valuenow]=\"singleValue\"\r\n [attr.aria-disabled]=\"disabled\"\r\n (pointerdown)=\"onHandlePointerDown($event, 'single')\"\r\n (keydown)=\"onHandleKeydown($event, 'single')\"\r\n >\r\n @if(showTooltip){\r\n <span class=\"frg-slider__tooltip\">{{ displayValue }}</span>\r\n }\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n\r\n@if(showValidation) {\r\n <frg-input-validation\r\n [errorList]=\"errorList\"\r\n [warningList]=\"warningList\"\r\n [isFormInvalid]=\"hasError\"\r\n >\r\n </frg-input-validation>\r\n}\r\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { InputBase } from '../input-base';\r\nimport { InputRequiredLabelPipe } from '../input.pipe';\r\nimport { ButtonComponent } from '../../button/button.component';\r\nimport { InputValidationComponent } from '../input-validation/input-validation.component';\r\nimport { DEFAULT_INPUT_FILE_UPLOAD_ERROR_MESSAGES } from '../input-consts';\r\n\r\ntype InputFileUploadValue = File | File[] | null;\r\n\r\n@Component({\r\n selector: 'frg-input-file-upload',\r\n imports: [InputRequiredLabelPipe, InputValidationComponent, ButtonComponent],\r\n templateUrl: './input-file-upload.component.html',\r\n styleUrl: './input-file-upload.component.scss',\r\n})\r\nexport class InputFileUploadComponent extends InputBase<InputFileUploadValue> implements OnInit {\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override label: string = '';\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override required: boolean = false;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override showValidation: boolean = true;\r\n /**\r\n * @inheritdoc\r\n */\r\n @Input() public override errorMessages: Record<string, string> = {};\r\n\r\n /**\r\n * Accepted file types (e.g. \".pdf,.png\" or \"image/*\").\r\n */\r\n @Input() public accept: string = '';\r\n /**\r\n * Allow multiple file selection.\r\n */\r\n @Input() public multiple: boolean = false;\r\n /**\r\n * Maximum number of files allowed.\r\n */\r\n @Input() public maxFiles: number | null = null;\r\n /**\r\n * Maximum size per file in bytes.\r\n */\r\n @Input() public maxFileSize: number | null = null;\r\n /**\r\n * Maximum total size in bytes.\r\n */\r\n @Input() public maxTotalSize: number | null = null;\r\n /**\r\n * Button label for opening the file dialog.\r\n */\r\n @Input() public buttonLabel: string = 'Browse';\r\n /**\r\n * Placeholder text when no file is selected.\r\n */\r\n @Input() public noFileText: string = 'No file selected';\r\n /**\r\n * Show a clear button when files are selected.\r\n */\r\n @Input() public showClearButton: boolean = true;\r\n /**\r\n * Show individual file list.\r\n */\r\n @Input() public showFileList: boolean = true;\r\n /**\r\n * Show file size in the list.\r\n */\r\n @Input() public showFileSize: boolean = true;\r\n\r\n @ViewChild('fileInput', { static: true }) private readonly fileInput!: ElementRef<HTMLInputElement>;\r\n\r\n public files: File[] = [];\r\n public isDragOver: boolean = false;\r\n\r\n private readonly ownedErrors = new Set([\r\n 'required',\r\n 'maxFiles',\r\n 'maxFileSize',\r\n 'maxTotalSize',\r\n 'accept',\r\n ]);\r\n\r\n public override ngOnInit(): void {\r\n super.ngOnInit();\r\n this.syncFromValue(this.value);\r\n this.updateErrors();\r\n }\r\n\r\n protected override updateView(value: InputFileUploadValue | null): void {\r\n this.syncFromValue(value);\r\n if (!value) {\r\n this.resetNativeInput();\r\n }\r\n this.updateErrors();\r\n }\r\n\r\n protected override updateDisabledState(_isDisabled: boolean): void {\r\n // Handled by Angular binding\r\n }\r\n\r\n protected override get errorList(): string[] {\r\n if (!this.control?.errors) return [];\r\n return Object.keys(this.control.errors).map(key => {\r\n if (this.errorMessages[key]) {\r\n return this.errorMessages[key];\r\n }\r\n\r\n let template = DEFAULT_INPUT_FILE_UPLOAD_ERROR_MESSAGES[key] || 'Invalid field.';\r\n\r\n switch (key) {\r\n case 'maxFiles':\r\n if (this.maxFiles != null) {\r\n template = template.replace('{{limit}}', this.maxFiles.toString());\r\n }\r\n break;\r\n case 'maxFileSize':\r\n if (this.maxFileSize != null) {\r\n template = template.replace('{{limit}}', this.formatBytes(this.maxFileSize));\r\n }\r\n break;\r\n case 'maxTotalSize':\r\n if (this.maxTotalSize != null) {\r\n template = template.replace('{{limit}}', this.formatBytes(this.maxTotalSize));\r\n }\r\n break;\r\n case 'accept':\r\n if (this.accept) {\r\n template = template.replace('{{accept}}', this.accept);\r\n }\r\n break;\r\n }\r\n\r\n return template;\r\n });\r\n }\r\n\r\n protected override get warningList(): string[] {\r\n return [];\r\n }\r\n\r\n public get fileSummary(): string {\r\n if (!this.files.length) return this.noFileText;\r\n if (this.files.length === 1) return this.files[0].name;\r\n return `${this.files.length} files selected`;\r\n }\r\n\r\n public get hasFiles(): boolean {\r\n return this.files.length > 0;\r\n }\r\n\r\n public triggerFileDialog(): void {\r\n if (this.disabled) return;\r\n this.fileInput.nativeElement.click();\r\n }\r\n\r\n public onFileChange(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n const selectedFiles = Array.from(input.files ?? []);\r\n if (!selectedFiles.length) {\r\n return;\r\n }\r\n this.handleSelectedFiles(selectedFiles);\r\n }\r\n\r\n public onDragOver(event: DragEvent): void {\r\n if (this.disabled) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragOver = true;\r\n }\r\n\r\n public onDragLeave(event: DragEvent): void {\r\n if (this.disabled) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragOver = false;\r\n }\r\n\r\n public onDrop(event: DragEvent): void {\r\n if (this.disabled) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragOver = false;\r\n\r\n const droppedFiles = Array.from(event.dataTransfer?.files ?? []);\r\n if (!droppedFiles.length) {\r\n return;\r\n }\r\n\r\n this.handleSelectedFiles(droppedFiles);\r\n }\r\n\r\n public override onBlur(_event: FocusEvent): void {\r\n this.onTouched();\r\n }\r\n\r\n public clearFiles(): void {\r\n if (this.disabled) return;\r\n this.files = [];\r\n this.value = null;\r\n this.resetNativeInput();\r\n this.onChange(this.value);\r\n this.updateErrors();\r\n this.onTouched();\r\n }\r\n\r\n public removeFile(index: number): void {\r\n if (this.disabled || !this.multiple) {\r\n this.clearFiles();\r\n return;\r\n }\r\n\r\n this.files = this.files.filter((_, idx) => idx !== index);\r\n this.value = this.files.length ? [...this.files] : null;\r\n this.resetNativeInput();\r\n this.onChange(this.value);\r\n this.updateErrors();\r\n this.onTouched();\r\n }\r\n\r\n public trackFile(_index: number, file: File): string {\r\n return `${file.name}-${file.size}-${file.lastModified}`;\r\n }\r\n\r\n public formatBytes(bytes: number): string {\r\n if (bytes < 1024) return `${bytes} B`;\r\n const units = ['KB', 'MB', 'GB', 'TB'];\r\n let size = bytes / 1024;\r\n let unitIndex = 0;\r\n while (size >= 1024 && unitIndex < units.length - 1) {\r\n size /= 1024;\r\n unitIndex += 1;\r\n }\r\n return `${size.toFixed(size < 10 ? 1 : 0)} ${units[unitIndex]}`;\r\n }\r\n\r\n private syncFromValue(value: InputFileUploadValue | null): void {\r\n if (!value) {\r\n this.files = [];\r\n return;\r\n }\r\n\r\n const normalized = Array.isArray(value) ? value : [value];\r\n this.files = this.multiple ? normalized : normalized.slice(0, 1);\r\n }\r\n\r\n private resetNativeInput(): void {\r\n if (this.fileInput?.nativeElement) {\r\n this.fileInput.nativeElement.value = '';\r\n }\r\n }\r\n\r\n private handleSelectedFiles(selectedFiles: File[]): void {\r\n const nextFiles = this.multiple\r\n ? [...this.files, ...selectedFiles]\r\n : selectedFiles.slice(0, 1);\r\n\r\n this.files = nextFiles;\r\n this.value = this.multiple ? nextFiles : nextFiles[0] ?? null;\r\n\r\n this.onChange(this.value);\r\n this.updateErrors();\r\n this.onTouched();\r\n }\r\n\r\n private updateErrors(): void {\r\n if (!this.control) return;\r\n\r\n const errors = this.validateFiles();\r\n const nextErrors = this.mergeErrors(errors);\r\n\r\n this.control.setErrors(Object.keys(nextErrors).length ? nextErrors : null);\r\n }\r\n\r\n private validateFiles(): Record<string, unknown> {\r\n const errors: Record<string, unknown> = {};\r\n\r\n if (this.required && !this.files.length) {\r\n errors['required'] = true;\r\n }\r\n\r\n if (this.maxFiles && this.files.length > this.maxFiles) {\r\n errors['maxFiles'] = true;\r\n }\r\n\r\n if (this.maxFileSize && this.files.some(file => file.size > (this.maxFileSize || 0))) {\r\n errors['maxFileSize'] = true;\r\n }\r\n\r\n if (this.maxTotalSize != null && this.totalSize() > this.maxTotalSize) {\r\n errors['maxTotalSize'] = true;\r\n }\r\n\r\n if (this.accept && this.files.some(file => !this.isAccepted(file))) {\r\n errors['accept'] = true;\r\n }\r\n\r\n return errors;\r\n }\r\n\r\n private mergeErrors(newErrors: Record<string, unknown>): Record<string, unknown> {\r\n const currentErrors = this.control?.errors ?? {};\r\n const nextErrors: Record<string, unknown> = {};\r\n\r\n for (const [key, value] of Object.entries(currentErrors)) {\r\n if (!this.ownedErrors.has(key)) {\r\n nextErrors[key] = value;\r\n }\r\n }\r\n\r\n for (const [key, value] of Object.entries(newErrors)) {\r\n nextErrors[key] = value;\r\n }\r\n\r\n return nextErrors;\r\n }\r\n\r\n private totalSize(): number {\r\n return this.files.reduce((sum, file) => sum + file.size, 0);\r\n }\r\n\r\n private isAccepted(file: File): boolean {\r\n if (!this.accept) return true;\r\n\r\n const acceptList = this.accept\r\n .split(',')\r\n .map(item => item.trim().toLowerCase())\r\n .filter(Boolean);\r\n\r\n if (!acceptList.length) return true;\r\n\r\n const fileName = file.name.toLowerCase();\r\n const fileType = (file.type || '').toLowerCase();\r\n\r\n return acceptList.some(accept => {\r\n if (accept.startsWith('.')) {\r\n return fileName.endsWith(accept);\r\n }\r\n if (accept.endsWith('/*')) {\r\n const baseType = accept.replace('/*', '');\r\n return fileType.startsWith(`${baseType}/`);\r\n }\r\n return fileType === accept;\r\n });\r\n }\r\n}\r\n","<div class=\"frg-input__wrapper\"\r\n [class.input-error]=\"hasError\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n>\r\n @if(label){\r\n <label [for]=\"id\">{{ label | inputRequiredLabel: required }}</label>\r\n }\r\n\r\n <div class=\"frg-input__file\" [class.has-files]=\"hasFiles\" [class.is-dragover]=\"isDragOver\">\r\n <div class=\"frg-input__file-main\">\r\n <frg-button\r\n [styleType]=\"'primary'\"\r\n [shape]=\"'pill'\"\r\n [size]=\"'small'\"\r\n [text]=\"buttonLabel\"\r\n [iconClass]=\"'fas fa-plus'\"\r\n [iconStyleType]=\"'light'\"\r\n [iconPosition]=\"'left'\"\r\n [disabled]=\"disabled\"\r\n (clickEvent)=\"triggerFileDialog()\"\r\n >\r\n </frg-button>\r\n\r\n <div class=\"frg-input__file-summary\">\r\n <span class=\"frg-input__file-summary-title\">{{ fileSummary }}</span>\r\n <span class=\"frg-input__file-summary-subtitle\">Drop or browse to upload</span>\r\n </div>\r\n </div>\r\n\r\n @if(showClearButton && hasFiles){\r\n <button\r\n type=\"button\"\r\n class=\"frg-input__file-clear\"\r\n [disabled]=\"disabled\"\r\n (click)=\"clearFiles()\"\r\n >\r\n Clear all\r\n </button>\r\n }\r\n </div>\r\n\r\n <input\r\n #fileInput\r\n [id]=\"id\"\r\n type=\"file\"\r\n class=\"frg-input__file-input\"\r\n [required]=\"required\"\r\n [disabled]=\"disabled\"\r\n [attr.accept]=\"accept || null\"\r\n [attr.multiple]=\"multiple ? '' : null\"\r\n (change)=\"onFileChange($event)\"\r\n (blur)=\"onBlur($event)\"\r\n />\r\n\r\n @if(showFileList && files.length){\r\n <div class=\"frg-input__file-list\">\r\n @for(file of files; track trackFile($index, file)){\r\n <div class=\"frg-input__file-chip\">\r\n <span class=\"frg-input__file-name\">{{ file.name }}</span>\r\n @if(showFileSize){\r\n <span class=\"frg-input__file-size\">{{ formatBytes(file.size) }}</span>\r\n }\r\n @if(multiple){\r\n <button\r\n type=\"button\"\r\n class=\"frg-input__file-remove\"\r\n [disabled]=\"disabled\"\r\n (click)=\"removeFile($index)\"\r\n aria-label=\"Remove file\"\r\n >\r\n x\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n\r\n@if (showValidation) {\r\n <frg-input-validation\r\n [errorList]=\"errorList\"\r\n [warningList]=\"warningList\"\r\n [isFormInvalid]=\"hasError\"\r\n >\r\n </frg-input-validation>\r\n}\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, Input, OnChanges } from '@angular/core';\r\nimport { TProgressBarAnimation, TProgressBarSize, TProgressBarType } from './progress-bar.type';\r\n\r\n@Component({\r\n selector: 'frg-progress-bar',\r\n imports: [NgClass],\r\n templateUrl: './progress-bar.component.html',\r\n styleUrl: './progress-bar.component.scss',\r\n})\r\nexport class ProgressBarComponent implements OnChanges {\r\n @Input() progress: number = 0;\r\n @Input() styleType: TProgressBarType = 'primary';\r\n @Input() size: TProgressBarSize = 'medium';\r\n @Input() showPercentage: boolean = true;\r\n @Input() segments: number = 100;\r\n @Input() animation: TProgressBarAnimation = 'fill';\r\n\r\n protected safeProgress: number = 0;\r\n segmentsList: Array<number> = [];\r\n filledSegments: number = 0;\r\n\r\n ngOnChanges(): void {\r\n this.safeProgress = Math.min(100, Math.max(0, this.progress));\r\n this.segmentsList = Array.from({ length: this.segments }, (_, i) => i + 1);\r\n this.filledSegments = Math.round((this.safeProgress / 100) * this.segments);\r\n }\r\n}\r\n","<div\r\n class=\"frg-progress-bar\"\r\n [ngClass]=\"{\r\n 'frg-progress-bar--primary': styleType === 'primary',\r\n 'frg-progress-bar--secondary': styleType === 'secondary',\r\n 'frg-progress-bar--tertiary': styleType === 'tertiary',\r\n 'frg-progress-bar--dark': styleType === 'dark',\r\n 'frg-progress-bar--light': styleType === 'light',\r\n 'frg-progress-bar--small': size === 'small',\r\n 'frg-progress-bar--medium': size === 'medium',\r\n 'frg-progress-bar--large': size === 'large',\r\n 'frg-progress-bar--fill': animation === 'fill',\r\n 'frg-progress-bar--slide': animation === 'slide',\r\n 'frg-progress-bar--pulse': animation === 'pulse',\r\n 'frg-progress-bar--rotate': animation === 'rotate'\r\n }\"\r\n [style.--segments]=\"segmentsList.length\"\r\n>\r\n @for(segment of segmentsList; let i = $index; track $index) {\r\n <div class=\"frg-progress-bar__segment\" [class.filled]=\"i < filledSegments\"></div>\r\n }\r\n\r\n @if(showPercentage) {\r\n <span class=\"frg-progress-label\">{{ safeProgress }}%</span>\r\n }\r\n</div>","import { NgClass } from '@angular/common';\r\nimport { Component, Input, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\r\nimport { TPulseLoaderSize, TPulseLoaderType } from './pulse-loader.type';\r\n\r\n/**\r\n * Component representing a pulse loader with customizable size, style, and progress display.\r\n * Usage example:\r\n * ```html\r\n * <frg-pulse-loader [progress]=\"progressValue\" [styleType]=\"'primary'\" [size]=\"'medium'\" [showPercentage]=\"true\"></frg-pulse-loader>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'frg-pulse-loader',\r\n standalone: true,\r\n imports: [NgClass],\r\n templateUrl: './pulse-loader.component.html',\r\n styleUrls: ['./pulse-loader.component.scss'],\r\n})\r\nexport class PulseLoaderComponent implements OnChanges, OnDestroy {\r\n /**\r\n * ARIA label for accessibility purposes.\r\n * Default is 'Loading...'.\r\n */\r\n @Input() ariaLabel: string = 'Loading...';\r\n @Input() isOverlay = false;\r\n @Input() isOverlayItem = false;\r\n /**\r\n * The current progress value (0-100) to be displayed by the loader.\r\n */\r\n @Input() progress: number = 0;\r\n /**\r\n * The style type of the loader, affecting its color scheme.\r\n * Options: 'primary', 'secondary', 'tertiary', 'success', 'warning', 'danger', 'info', 'light', 'dark'\r\n */\r\n @Input() styleType: TPulseLoaderType = 'primary';\r\n /**\r\n * The size of the loader.\r\n * Options: 'small', 'medium', 'large'\r\n */\r\n @Input() size: TPulseLoaderSize = 'medium';\r\n /**\r\n * Whether to display the percentage text inside the loader.\r\n * Default is false.\r\n */\r\n @Input() showPercentage: boolean = false;\r\n\r\n /**\r\n * Gets the CSS classes for the loader based on its size and style type.\r\n */\r\n public get classes() {\r\n return {\r\n 'frg-pulse-loader': true,\r\n [`frg-pulse-loader--${this.size}`]: true,\r\n [`frg-pulse-loader--${this.styleType}`]: true,\r\n 'frg-pulse-loader--overlay': this.isOverlay,\r\n 'frg-pulse-loader--overlay-item': this.isOverlayItem,\r\n };\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['isOverlay']) {\r\n this.toggleBodyScroll(this.isOverlay);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.toggleBodyScroll(false);\r\n }\r\n\r\n private toggleBodyScroll(disable: boolean): void {\r\n document.body.style.overflow = disable ? 'hidden' : '';\r\n }\r\n}\r\n","<output\r\n [ngClass]=\"classes\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n>\r\n <div class=\"frg-pulse-loader__core\"></div>\r\n\r\n @if (showPercentage) {\r\n <span class=\"frg-pulse-loader__percent\">\r\n {{ progress }}%\r\n </span>\r\n }\r\n</output>\r\n","import { Component, HostBinding, Input } from '@angular/core';\r\nimport { TSkeletonLoaderType } from './skeleton-loader.type';\r\n\r\n@Component({\r\n selector: 'frg-skeleton-loader',\r\n standalone: true,\r\n templateUrl: './skeleton-loader.component.html',\r\n styleUrls: ['./skeleton-loader.component.scss'],\r\n})\r\nexport class SkeletonLoaderComponent {\r\n /** Enables shimmer animation */\r\n @Input() animated = true;\r\n\r\n /** Rectangle height for a single row */\r\n @Input() height?: string;\r\n\r\n /** Number of skeleton rows (for multi-line placeholders) */\r\n @Input() rows = 1;\r\n\r\n /** Shape of the skeleton: rectangle or circle */\r\n @Input() shape: 'rect' | 'circle' = 'rect';\r\n\r\n /** Circle size (sets both width & height) */\r\n @Input() size?: string;\r\n\r\n /** Style type (color scheme) */\r\n @Input() styleType: TSkeletonLoaderType = 'default';\r\n\r\n /** Rectangle width (ignored for circle unless explicitly given) */\r\n @Input() width?: string;\r\n\r\n @HostBinding('class')\r\n get hostClasses(): string {\r\n const classes = ['skeleton', `skeleton--${this.styleType}`];\r\n if (this.shape === 'circle') classes.push('circle');\r\n if (this.animated) classes.push('animated');\r\n return classes.join(' ');\r\n }\r\n\r\n get rowArray() {\r\n return Array.from({ length: this.rows });\r\n }\r\n\r\n get isMultiRow() {\r\n return this.rows > 1;\r\n }\r\n\r\n get isCircle() {\r\n return this.shape === 'circle';\r\n }\r\n}\r\n","<div\r\n class=\"skeleton-root\"\r\n [style.width]=\"isCircle ? size : width\"\r\n [style.height]=\"isCircle ? size : (isMultiRow ? null : height)\"\r\n>\r\n @if (rows <= 1) {\r\n <div class=\"skeleton-block\" [style.height]=\"height\"></div>\r\n } @else {\r\n @for (_ of rowArray; let i = $index; track i) {\r\n <div class=\"skeleton-block\" [style.height]=\"height\"></div>\r\n }\r\n }\r\n</div>\r\n","import { Component, Input, OnChanges } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'frg-content-blur',\r\n standalone: true,\r\n templateUrl: './content-blur.component.html',\r\n styleUrls: ['./content-blur.component.scss'],\r\n})\r\nexport class ContentBlurComponent implements OnChanges {\r\n @Input() progress: number = 0;\r\n safeProgress: number = 0;\r\n\r\n ngOnChanges(): void {\r\n this.safeProgress = Math.min(100, Math.max(0, this.progress));\r\n }\r\n\r\n get blurPx(): number {\r\n const p = this.safeProgress;\r\n\r\n if (p < 20) return 50;\r\n if (p < 50) return 30;\r\n if (p < 75) return 25;\r\n if (p < 100) return 18;\r\n return 0;\r\n }\r\n\r\n get blurOpacity(): number {\r\n return this.blurPx / 20;\r\n }\r\n\r\n get showProgress(): boolean {\r\n return this.safeProgress < 100;\r\n }\r\n}\r\n","<div class=\"blur-loader\">\r\n <div class=\"blur-overlay\" [style.backdropFilter]=\"'blur(' + blurPx + 'px)'\" [style.opacity]=\"blurOpacity\"></div>\r\n\r\n <div class=\"content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n @if(showProgress) {\r\n <div class=\"progress-text\">\r\n {{ safeProgress }}%\r\n </div>\r\n }\r\n</div>","import { Directive, OnInit } from '@angular/core';\r\nimport { ControlValueAccessor } from '@angular/forms';\r\nimport { InputBase } from '../input/input-base';\r\nimport { SelectionListPosition } from './selection-lists.type';\r\n\r\n/**\r\n * Base class for input components, providing common functionality for form controls.\r\n * This class implements ControlValueAccessor to integrate with Angular forms.\r\n * Subclasses must implement the abstract methods to update the view and disabled state.\r\n * It also provides properties for label, placeholder, required state, and error handling.\r\n * The errorMessages property can be customized to provide specific validation messages.\r\n * The hasError getter can be used in templates to conditionally display error messages.\r\n * Subclasses should call super.ngOnInit() if they override ngOnInit().\r\n *\r\n * @see ControlValueAccessor\r\n */\r\n@Directive()\r\nexport abstract class SelectionListBase<T> extends InputBase<T> implements ControlValueAccessor, OnInit {\r\n /**\r\n * Direction of selection list when it opens.\r\n */\r\n protected openDirection: SelectionListPosition = 'down';\r\n\r\n /**\r\n * Clear the value of input\r\n */\r\n protected abstract clearValue(event: Event): void;\r\n\r\n /**\r\n * Handles selection change event.\r\n * Subclasses can override to provide custom behavior.\r\n * Default implementation does nothing.\r\n */\r\n protected onSelectionChange(_: Event): void { }\r\n}\r\n","//#region [ERRORS]\r\nexport const DEFAULT_SELECTION_LIST_ERROR_MESSAGES: Record<string, string> = {\r\n required: 'This field is required.',\r\n minlength: 'The value is too short.',\r\n maxlength: 'The value is too long.',\r\n pattern: 'The value does not match the required pattern.',\r\n};\r\n//#endregion\r\n\r\n//#region [WARNINGS]\r\n// export const DEFAULT_INPUT_NUMBER_WARNING_MESSAGES: Record<string, string> = {\r\n// min:'The minimium value allowed is {{limit}}',\r\n// max: 'The maximum value allowed is {{limit}}',\r\n// step: 'The value does not match the required step increment value of {{limit}}',\r\n// precision: 'The value exceeds the allowed number of decimal places value of {{limit}}',\r\n// };\r\n//#endregion\r\n","import { NgTemplateOutlet } from \"@angular/common\";\r\nimport { Component, ElementRef, HostListener, Input, QueryList, TemplateRef, ViewChild, ViewChildren, inject } from \"@angular/core\";\r\nimport { SelectionListBase } from \"../selection-lists-base\";\r\nimport { DEFAULT_SELECTION_LIST_ERROR_MESSAGES } from \"../selection-lists-const\";\r\nimport { SelectionListItem } from \"../selection-lists-interface\";\r\nimport { InputValidationComponent } from \"../../input/input-validation/input-validation.component\";\r\nimport { DEFAULT_INPUT_SELECTION_LIST_WARNINGS_MESSAGES } from \"../../input/input-consts\";\r\n\r\n@Component({\r\n selector: \"frg-selection-list\",\r\n templateUrl: \"./selection-list.component.html\",\r\n styleUrls: [\"./selection-list.component.scss\"],\r\n imports: [NgTemplateOutlet, InputValidationComponent]\r\n})\r\nexport class SelectionListComponent<T> extends SelectionListBase<T> {\r\n private readonly elementRef = inject(ElementRef);\r\n\r\n @Input() items: Array<SelectionListItem<T>> = [];\r\n @Input() optionTemplate?: TemplateRef<unknown>;\r\n @Input() hasSearch: boolean = false;\r\n\r\n @ViewChildren(\"optionButton\") optionButtons!: QueryList<ElementRef<HTMLButtonElement>>;\r\n @ViewChild(\"searchInput\", { read: ElementRef }) searchInput?: ElementRef<HTMLInputElement>;\r\n\r\n protected isOpen = false;\r\n protected searchTerm = \"\";\r\n protected selectedId: string = \"\";\r\n\r\n private focusedIndex = -1;\r\n\r\n @HostListener(\"document:click\", ['$event'])\r\n closeDropdown(event: MouseEvent): void {\r\n const target = event.target as HTMLElement;\r\n const nativeElement = this.elementRef.nativeElement;\r\n\r\n const clickedInside = nativeElement.contains(target);\r\n const isSearchInput = target.closest('.options-search__input');\r\n\r\n if (!clickedInside && !isSearchInput) {\r\n this.isOpen = false;\r\n }\r\n }\r\n\r\n public get filteredItems(): Array<SelectionListItem<T>> {\r\n if (this.hasSearch && this.searchTerm && this.searchTerm.length > 2) {\r\n const lower = this.searchTerm.toLowerCase();\r\n const lowerWithTrim = this.searchTerm.toLowerCase().trim();\r\n\r\n return this.items.filter(item =>\r\n (item.label ?? '').toLowerCase().includes(lower)\r\n || (item.label ?? '').toLowerCase().trim().includes(lowerWithTrim)\r\n );\r\n };\r\n\r\n return this.items;\r\n }\r\n\r\n public get selectedItem(): SelectionListItem<T> | null {\r\n return this.items.find(i => i.id === this.selectedId) ?? null;\r\n }\r\n\r\n protected override get errorList(): string[] {\r\n if (!this.control?.errors) return [];\r\n const errors = this.control.errors;\r\n return Object.keys(errors).map(key => {\r\n if (this.errorMessages[key]) {\r\n return this.errorMessages[key];\r\n }\r\n\r\n if (key === 'minlength' && errors[key]?.requiredLength) {\r\n return `Minimum length is ${errors[key].requiredLength} characters.`;\r\n }\r\n\r\n if (key === 'maxlength' && errors[key]?.requiredLength) {\r\n return `Maximum length is ${errors[key].requiredLength} characters.`;\r\n }\r\n\r\n return DEFAULT_SELECTION_LIST_ERROR_MESSAGES[key] || 'Invalid field.';\r\n });\r\n }\r\n\r\n /**\r\n * Returns warning messages. Consumers may pass arbitrary warnings via `warningMessages`.\r\n * Falls back to DEFAULT_INPUT_SELECTION_LIST_WARNINGS_MESSAGES or a generic message.\r\n */\r\n protected override get warningList(): string[] {\r\n return Object.keys(this.warningMessages).map(key => {\r\n return (\r\n this.warningMessages[key] ||\r\n DEFAULT_INPUT_SELECTION_LIST_WARNINGS_MESSAGES[key] ||\r\n ''\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Returns whether any warnings are active.\r\n */\r\n protected get hasWarning(): boolean {\r\n return this.warningList.length > 0;\r\n }\r\n\r\n public toggleDropdown(event: Event): void {\r\n event.stopPropagation();\r\n if (this.disabled) return;\r\n\r\n this.isOpen = !this.isOpen;\r\n\r\n if (this.isOpen) {\r\n this.setDropdownDirection();\r\n setTimeout(() => {\r\n if (this.hasSearch && this.searchInput) {\r\n this.searchInput.nativeElement.focus();\r\n const len = this.searchInput.nativeElement.value.length;\r\n this.searchInput.nativeElement.setSelectionRange(len, len);\r\n } else {\r\n this.focusFirstItem();\r\n }\r\n }, 0);\r\n } else {\r\n this.searchTerm = \"\";\r\n }\r\n }\r\n\r\n public selectItem(item: SelectionListItem<T>, event: Event): void {\r\n event.stopPropagation();\r\n if (item.disabled) return;\r\n\r\n this.selectedId = item.id;\r\n this.value = item.value;\r\n this.isOpen = false;\r\n this.focusedIndex = this.items.findIndex(i => i.id === item.id);\r\n\r\n if (this.hasSearch) {\r\n this.searchTerm = item.label ?? '';\r\n }\r\n\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n\r\n protected override clearValue(event: MouseEvent) {\r\n event.stopPropagation();\r\n\r\n this.selectedId = '';\r\n this.value = null;\r\n this.searchTerm = '';\r\n this.isOpen = false;\r\n\r\n this.onChange(null);\r\n this.onTouched();\r\n }\r\n\r\n protected onKeyDown(event: KeyboardEvent): void {\r\n if (this.disabled) return;\r\n\r\n switch (event.key) {\r\n case \"Enter\":\r\n case \" \":\r\n case \"Spacebar\":\r\n event.preventDefault();\r\n this.toggleDropdown(event);\r\n break;\r\n case \"ArrowDown\":\r\n event.preventDefault();\r\n if (!this.isOpen) this.isOpen = true;\r\n setTimeout(() => {\r\n if (this.hasSearch && this.searchInput) {\r\n this.searchInput.nativeElement.focus();\r\n } else {\r\n this.focusFirstItem();\r\n }\r\n }, 0);\r\n break;\r\n case \"Escape\":\r\n this.isOpen = false;\r\n break;\r\n }\r\n }\r\n\r\n protected onOptionKeyDown(event: KeyboardEvent, item: SelectionListItem<T>, index: number): void {\r\n switch (event.key) {\r\n case \"Enter\":\r\n case \" \":\r\n case \"Spacebar\":\r\n event.preventDefault();\r\n this.selectItem(item, event);\r\n break;\r\n case \"ArrowDown\":\r\n event.preventDefault();\r\n this.focusNextItem(index);\r\n break;\r\n case \"ArrowUp\":\r\n event.preventDefault();\r\n this.focusPreviousItem(index);\r\n break;\r\n case \"Escape\":\r\n event.preventDefault();\r\n this.isOpen = false;\r\n break;\r\n }\r\n }\r\n\r\n protected override onBlur(event: FocusEvent): void {\r\n const nativeElement = this.elementRef.nativeElement;\r\n const relatedTarget = event.relatedTarget as Node;\r\n if (!relatedTarget || !nativeElement.contains(relatedTarget)) {\r\n this.isOpen = false;\r\n if(this.selectedItem){\r\n this.searchTerm = this.selectedItem.label;\r\n } else {\r\n this.searchTerm = '';\r\n }\r\n }\r\n }\r\n\r\n protected override onFocus(): void {\r\n if (!this.disabled) {\r\n this.isOpen = true;\r\n this.setDropdownDirection();\r\n }\r\n }\r\n\r\n protected onSearch(event: Event): void {\r\n const target = event.target;\r\n if (target instanceof HTMLInputElement) {\r\n this.searchTerm = target.value ?? '';\r\n this.focusedIndex = 0;\r\n }\r\n }\r\n\r\n protected onSearchKeyDown(event: KeyboardEvent): void {\r\n if (event.key === \"Enter\") {\r\n event.preventDefault();\r\n const exactMatch = this.filteredItems.find(i => i.label?.toLowerCase() === this.searchTerm.toLowerCase());\r\n if (exactMatch) {\r\n this.selectItem(exactMatch, event);\r\n }\r\n }\r\n\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n event.preventDefault();\r\n setTimeout(() => this.focusFirstItem(), 0);\r\n break;\r\n\r\n case \"Escape\":\r\n event.preventDefault();\r\n this.isOpen = false;\r\n break;\r\n }\r\n }\r\n\r\n protected override updateDisabledState(_isDisabled: boolean): void {\r\n //Intentionally left void, to implement in case is needed\r\n }\r\n protected override updateView(_value: T | null): void {\r\n //Intentionally left void, to implement in case is needed\r\n }\r\n\r\n private focusFirstItem(): void {\r\n const buttons = this.getEnabledButtons();\r\n if (buttons.length > 0) {\r\n this.focusedIndex = 0;\r\n buttons[0].focus();\r\n }\r\n }\r\n\r\n private focusNextItem(currentIndex: number = this.focusedIndex): void {\r\n const buttons = this.getEnabledButtons();\r\n if (buttons.length === 0) return;\r\n\r\n const nextIndex = (currentIndex + 1) % buttons.length;\r\n this.focusedIndex = nextIndex;\r\n buttons[nextIndex].focus();\r\n }\r\n\r\n private focusPreviousItem(currentIndex: number = this.focusedIndex): void {\r\n const buttons = this.getEnabledButtons();\r\n if (buttons.length === 0) return;\r\n\r\n const prevIndex = (currentIndex - 1 + buttons.length) % buttons.length;\r\n this.focusedIndex = prevIndex;\r\n buttons[prevIndex].focus();\r\n }\r\n\r\n private getEnabledButtons(): HTMLButtonElement[] {\r\n return this.optionButtons\r\n ? this.optionButtons.map(ref => ref.nativeElement).filter(btn => !btn.disabled)\r\n : [];\r\n }\r\n\r\n private setDropdownDirection(): void {\r\n const trigger: HTMLElement | undefined = this.elementRef.nativeElement.querySelector('.custom-select');\r\n const searchTrigger: HTMLElement | undefined = this.elementRef.nativeElement.querySelector('.options-search__input');\r\n const dropdownHeight: number = 240;\r\n\r\n if(trigger || searchTrigger){\r\n const rect = trigger?.getBoundingClientRect() || searchTrigger?.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n\r\n const spaceBelow = viewportHeight - (rect?.bottom ?? 0);\r\n const spaceAbove = (rect?.top ?? 0);\r\n\r\n if (spaceBelow >= dropdownHeight) {\r\n this.openDirection = 'down';\r\n } else if (spaceAbove >= dropdownHeight) {\r\n this.openDirection = 'top';\r\n } else {\r\n this.openDirection = spaceBelow > spaceAbove ? 'down' : 'top';\r\n }\r\n }\r\n }\r\n\r\n}\r\n","<div class=\"frg-selection-list\"\r\n [class.selection-list-error]=\"hasError\"\r\n>\r\n <label [attr.for]=\"id + '-options'\">{{ label }}</label>\r\n\r\n @if(hasSearch){\r\n <div class=\"options-search\">\r\n <input\r\n #searchInput\r\n type=\"text\"\r\n [attr.name]=\"id + '-options'\"\r\n [attr.id]=\"id + '-options'\"\r\n class=\"options-search__input\"\r\n [class.open]=\"isOpen\"\r\n [attr.placeholder]=\"'Select…'\"\r\n aria-label=\"Search options\"\r\n role=\"searchbox\"\r\n [value]=\"searchTerm\"\r\n (input)=\"onSearch($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (focus)=\"toggleDropdown($event)\"\r\n (keydown)=\"onSearchKeyDown($event)\"\r\n />\r\n <div class=\"selection-list__actions\">\r\n @if(searchTerm.length){\r\n <button\r\n type=\"button\"\r\n class=\"clear-button\"\r\n aria-label=\"Clear input\"\r\n (click)=\"clearValue($event)\"\r\n >\r\n <span class=\"fas fa-xmark\"></span>\r\n </button>\r\n }\r\n <button\r\n type=\"button\"\r\n class=\"arrow-button\"\r\n [class.open]=\"isOpen\"\r\n aria-label=\"Toggle dropdown\"\r\n (click)=\"toggleDropdown($event)\"\r\n >\r\n <span class=\"arrow-icon fas fa-chevron-down\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n } @else {\r\n <div class=\"frg-selection-list__handle-buttons\">\r\n <button\r\n type=\"button\"\r\n class=\"custom-select\"\r\n [id]=\"id + '-options'\"\r\n [attr.name]=\"id + '-options'\"\r\n [class.open]=\"isOpen\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-expanded]=\"isOpen\"\r\n (click)=\"toggleDropdown($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [attr.aria-controls]=\"id + '-options'\"\r\n >\r\n <span class=\"item-label\" [class.selected]=\"selectedItem\">\r\n {{ selectedItem?.label || placeholder || 'Select…' }}\r\n </span>\r\n </button> \r\n\r\n <div class=\"selection-list__actions\">\r\n @if(value && selectedItem){\r\n <button\r\n type=\"button\"\r\n class=\"clear-button\"\r\n aria-label=\"Clear input\"\r\n (click)=\"clearValue($event)\"\r\n >\r\n <span class=\"fas fa-xmark\"></span>\r\n </button>\r\n }\r\n\r\n <button\r\n type=\"button\"\r\n class=\"arrow-button\"\r\n [class.open]=\"isOpen\"\r\n aria-label=\"Toggle dropdown\"\r\n (click)=\"toggleDropdown($event)\"\r\n >\r\n <span class=\"arrow-icon fas fa-chevron-down\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n \r\n <frg-input-validation\r\n [errorList]=\"errorList\"\r\n [isFormInvalid]=\"hasError\"\r\n >\r\n </frg-input-validation>\r\n\r\n @if (isOpen) {\r\n <div \r\n class=\"options\"\r\n [id]=\"id + '-options'\"\r\n [class.open-up]=\"openDirection === 'top'\"\r\n [class.open-down]=\"openDirection === 'down'\"\r\n >\r\n @for (item of filteredItems; track item.id; let idx = $index) {\r\n <button\r\n #optionButton\r\n type=\"button\"\r\n class=\"option\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.selected]=\"item.id === selectedId\"\r\n [disabled]=\"item.disabled\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur($event)\"\r\n (click)=\"selectItem(item, $event)\"\r\n (keydown)=\"onOptionKeyDown($event, item, idx)\"\r\n >\r\n @if(optionTemplate) {\r\n <ng-container *ngTemplateOutlet=\"optionTemplate; context: { $implicit: item }\"></ng-container>\r\n } @else {\r\n {{ item.label }}\r\n }\r\n </button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { generateUUID } from '../../../utils/uuid.utils';\r\nimport { Chip, TChipIconPosition, TChipSize, TChipType } from './chip.type';\r\n\r\n/**\r\n * TagComponent\r\n *\r\n * A small UI element used to display labeled statuses, metadata, or categories.\r\n * Supports icons, removable behavior, disabled state, and standardized design-\r\n * system styles and sizes. Implements the shared `Tag` interface to ensure\r\n * consistency across all status-driven UI components (Tag, Badge, Chip, etc.).\r\n */\r\n@Component({\r\n selector: 'frg-chip',\r\n templateUrl: './chip.component.html',\r\n styleUrls: ['./chip.component.scss'],\r\n imports: [NgClass]\r\n})\r\nexport class ChipComponent implements Chip {\r\n\r\n /**\r\n * Unique identifier for the chip.\r\n * Automatically generated if not provided by the parent.\r\n * Used primarily for tracking and removal events.\r\n */\r\n @Input() id: string = generateUUID();\r\n\r\n /**\r\n * Text content displayed inside the chip.\r\n */\r\n @Input() label?: string = '';\r\n\r\n /**\r\n * Visual style of the chip.\r\n * Corresponds to design-system status color tokens.\r\n * Example: 'primary', 'secondary', 'success', 'warning', etc.\r\n */\r\n @Input() style: TChipType = 'primary';\r\n\r\n /**\r\n * Size variant of the chip.\r\n * Options follow the standardized sizing tokens: 'sm', 'md', or 'lg'.\r\n */\r\n @Input() size: TChipSize = 'md';\r\n\r\n /**\r\n * Optional icon class displayed before the label.\r\n * Example: 'frg-icon-info', 'frg-icon-alert'.\r\n */\r\n @Input() icon: string | undefined = undefined;\r\n\r\n /**\r\n * Position of the icon\r\n */\r\n @Input() iconPosition: TChipIconPosition = 'end';\r\n\r\n /**\r\n * Whether the chip is disabled.\r\n * Disables interactions and applies the disabled visual style.\r\n */\r\n @Input() disabled = false;\r\n\r\n /**\r\n * If true, displays a remove button allowing the chip to be dismissed.\r\n */\r\n @Input() removable = false;\r\n\r\n /**\r\n * Emits the ID of the chip when it is removed.\r\n */\r\n @Output() removed = new EventEmitter<string>();\r\n\r\n /**\r\n * Emits the `removed` event when the remove button is clicked,\r\n * provided the chip is not disabled and removal is allowed.\r\n */\r\n onRemove(): void {\r\n if (!this.disabled && this.removable) {\r\n this.removed.emit(this.id);\r\n }\r\n }\r\n}\r\n","<span\r\n class=\"frg-chip\"\r\n [ngClass]=\"[\r\n 'frg-chip--' + style,\r\n 'frg-chip--' + size,\r\n disabled ? 'frg-chip--disabled' : '',\r\n iconPosition === 'end' ? 'frg-chip--icon-end' : ''\r\n ]\"\r\n>\r\n @if(icon && iconPosition === 'start') {\r\n <span class=\"frg-chip__icon\">\r\n <span class=\"frg-chip__icon-inner\">\r\n <i [class]=\"icon\"></i>\r\n </span>\r\n </span>\r\n }\r\n\r\n @if(label) {\r\n <span class=\"frg-chip__label\">{{ label }}</span>\r\n }\r\n\r\n @if(icon && iconPosition === 'end') {\r\n <span class=\"frg-chip__icon\">\r\n <span class=\"frg-chip__icon-inner\">\r\n <i [class]=\"icon\"></i>\r\n </span>\r\n </span>\r\n }\r\n\r\n @if(removable) {\r\n <button\r\n type=\"button\"\r\n class=\"frg-chip__remove\"\r\n (click)=\"onRemove()\"\r\n [attr.aria-label]=\"'Remove ' + label\"\r\n >\r\n <svg\r\n class=\"frg-chip__remove-icon\"\r\n width=\"10\"\r\n height=\"10\"\r\n viewBox=\"0 0 14 14\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.2\"/>\r\n <path d=\"M5 5L9 9M9 5L5 9\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\"></path>\r\n\r\n </svg>\r\n </button>\r\n }\r\n</span>\r\n","import { NgTemplateOutlet } from \"@angular/common\";\r\nimport { Component, ElementRef, HostListener, Input, QueryList, TemplateRef, ViewChild, ViewChildren, inject } from \"@angular/core\";\r\nimport { DEFAULT_INPUT_MULTI_SELECT_WARNINGS_MESSAGES } from \"../../input/input-consts\";\r\nimport { InputValidationComponent } from \"../../input/input-validation/input-validation.component\";\r\nimport { SelectionListBase } from \"../selection-lists-base\";\r\nimport { DEFAULT_SELECTION_LIST_ERROR_MESSAGES } from \"../selection-lists-const\";\r\nimport { SelectionListItem } from \"../selection-lists-interface\";\r\nimport { ChipComponent } from \"../../status/chip/chip.component\";\r\nimport { TChipType } from \"../../status/chip/chip.type\";\r\n\r\n@Component({\r\n selector: \"frg-multi-select\",\r\n templateUrl: \"./multi-select.component.html\",\r\n styleUrls: [\"./multi-select.component.scss\"],\r\n imports: [NgTemplateOutlet, InputValidationComponent, ChipComponent]\r\n})\r\nexport class MultiSelectComponent<T> extends SelectionListBase<Array<T>> {\r\n private readonly elementRef = inject(ElementRef);\r\n\r\n @Input() items: Array<SelectionListItem<T>> = [];\r\n @Input() hasSearch: boolean = false;\r\n @Input() optionTemplate?: TemplateRef<unknown>;\r\n @Input() valuesTemplate?: TemplateRef<unknown>;\r\n @Input() showChips: boolean = false;\r\n @Input() chipsStyle: TChipType = \"light\";\r\n\r\n @ViewChildren(\"optionButton\") optionButtons!: QueryList<ElementRef<HTMLButtonElement>>;\r\n @ViewChild(\"searchInput\", { read: ElementRef }) searchInput?: ElementRef<HTMLInputElement>;\r\n\r\n protected isOpen = false;\r\n protected searchTerm = \"\";\r\n protected selectedIds: Array<string> = [];\r\n\r\n private focusedIndex = -1;\r\n\r\n @HostListener(\"document:click\", ['$event'])\r\n closeDropdown(event: MouseEvent): void {\r\n const target = event.target as HTMLElement;\r\n const nativeElement = this.elementRef.nativeElement;\r\n\r\n const clickedInside = nativeElement.contains(target);\r\n const isSearchInput = target.closest('.options-search__input');\r\n\r\n if (!clickedInside && !isSearchInput) {\r\n this.isOpen = false;\r\n }\r\n }\r\n\r\n public get filteredItems(): Array<SelectionListItem<T>> {\r\n if (this.hasSearch && this.searchTerm && this.searchTerm.length > 2) {\r\n const lower = this.searchTerm.toLowerCase();\r\n const lowerWithTrim = this.searchTerm.toLowerCase().trim();\r\n\r\n return this.items.filter(item =>\r\n (item.label ?? '').toLowerCase().includes(lower)\r\n || (item.label ?? '').toLowerCase().trim().includes(lowerWithTrim)\r\n );\r\n };\r\n\r\n return this.items;\r\n }\r\n\r\n public get selectedLabels(): string {\r\n return this.selectedItems.length ?\r\n this.selectedItems.map(x => x.label ?? '').join(', ')\r\n : this.placeholder || 'Select…';\r\n }\r\n\r\n public get selectedItems(): Array<SelectionListItem<T>> {\r\n return this.items.filter(i => this.selectedIds.includes(i.id));\r\n }\r\n\r\n protected override get errorList(): string[] {\r\n if (!this.control?.errors) return [];\r\n const errors = this.control.errors;\r\n return Object.keys(errors).map(key => {\r\n if (this.errorMessages[key]) {\r\n return this.errorMessages[key];\r\n }\r\n\r\n if (key === 'minlength' && errors[key]?.requiredLength) {\r\n return `Minimum length is ${errors[key].requiredLength} characters.`;\r\n }\r\n\r\n if (key === 'maxlength' && errors[key]?.requiredLength) {\r\n return `Maximum length is ${errors[key].requiredLength} characters.`;\r\n }\r\n\r\n return DEFAULT_SELECTION_LIST_ERROR_MESSAGES[key] || 'Invalid field.';\r\n });\r\n }\r\n\r\n public toggleDropdown(event: Event): void {\r\n event.stopPropagation();\r\n const target = event.target as HTMLElement | null;\r\n\r\n if (target?.closest('frg-chip') && this.showChips) return;\r\n if (this.disabled) return;\r\n\r\n this.isOpen = !this.isOpen;\r\n\r\n if (this.isOpen) {\r\n this.setDropdownDirection();\r\n setTimeout(() => {\r\n if (this.hasSearch && this.searchInput) {\r\n this.searchInput.nativeElement.focus();\r\n const len = this.searchInput.nativeElement.value.length;\r\n this.searchInput.nativeElement.setSelectionRange(len, len);\r\n } else {\r\n this.focusFirstItem();\r\n }\r\n }, 0);\r\n } else {\r\n this.searchTerm = \"\";\r\n }\r\n }\r\n\r\n public selectItem(item: SelectionListItem<T>, event: Event): void {\r\n event.stopPropagation();\r\n if (item.disabled) return;\r\n\r\n this.updateSelection(item, item.selected);\r\n\r\n this.value = this.selectedItems\r\n .map(i => i.value)\r\n .filter((v): v is T => v !== null);\r\n\r\n this.focusedIndex = this.items.findIndex(i => i.id === item.id);\r\n\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n\r\n protected removeItem(item: SelectionListItem<T>, event: MouseEvent): void {\r\n event.stopPropagation();\r\n if (this.disabled || !item.selected) return;\r\n\r\n this.updateSelection(item, true);\r\n\r\n const selectedValues = this.selectedItems\r\n .map(i => i.value)\r\n .filter((v): v is T => v !== null);\r\n\r\n this.value = selectedValues.length ? selectedValues : null;\r\n\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n\r\n protected removeItemById(id: string): void {\r\n if (this.disabled) return;\r\n const item = this.items.find(current => current.id === id);\r\n if (!item || !item.selected) return;\r\n\r\n this.updateSelection(item, true);\r\n\r\n const selectedValues = this.selectedItems\r\n .map(i => i.value)\r\n .filter((v): v is T => v !== null);\r\n\r\n this.value = selectedValues.length ? selectedValues : null;\r\n\r\n this.onChange(this.value);\r\n this.onTouched();\r\n }\r\n\r\n protected override clearValue(event: MouseEvent) {\r\n event.stopPropagation();\r\n\r\n for (const selectedItem of this.selectedItems) {\r\n selectedItem.selected = false;\r\n }\r\n\r\n this.selectedIds = [];\r\n this.value = null;\r\n this.searchTerm = '';\r\n this.isOpen = false;\r\n\r\n this.onChange(null);\r\n this.onTouched();\r\n }\r\n\r\n protected onKeyDown(event: KeyboardEvent): void {\r\n if (this.disabled) return;\r\n\r\n switch (event.key) {\r\n case \"Enter\":\r\n case \" \":\r\n case \"Spacebar\":\r\n event.preventDefault();\r\n this.toggleDropdown(event);\r\n break;\r\n case \"ArrowDown\":\r\n event.preventDefault();\r\n if (!this.isOpen) this.isOpen = true;\r\n setTimeout(() => {\r\n if (this.hasSearch && this.searchInput) {\r\n this.searchInput.nativeElement.focus();\r\n } else {\r\n this.focusFirstItem();\r\n }\r\n }, 0);\r\n break;\r\n case \"Escape\":\r\n this.isOpen = false;\r\n break;\r\n }\r\n }\r\n\r\n protected onOptionKeyDown(event: KeyboardEvent, item: SelectionListItem<T>, index: number): void {\r\n switch (event.key) {\r\n case \"Enter\":\r\n case \" \":\r\n case \"Spacebar\":\r\n event.preventDefault();\r\n this.selectItem(item, event);\r\n break;\r\n case \"ArrowDown\":\r\n event.preventDefault();\r\n this.focusNextItem(index);\r\n break;\r\n case \"ArrowUp\":\r\n event.preventDefault();\r\n this.focusPreviousItem(index);\r\n break;\r\n case \"Escape\":\r\n event.preventDefault();\r\n this.isOpen = false;\r\n break;\r\n }\r\n }\r\n\r\n protected override onBlur(event: FocusEvent): void {\r\n const nativeElement = this.elementRef.nativeElement;\r\n const relatedTarget = event.relatedTarget as Node;\r\n if (!relatedTarget || !nativeElement.contains(relatedTarget)) {\r\n this.isOpen = false;\r\n this.searchTerm = '';\r\n }\r\n }\r\n\r\n protected override onFocus(): void {\r\n if (!this.disabled) {\r\n this.isOpen = true;\r\n this.setDropdownDirection();\r\n }\r\n }\r\n\r\n protected onSearch(event: Event): void {\r\n const target = event.target;\r\n if (target instanceof HTMLInputElement) {\r\n this.searchTerm = target.value ?? '';\r\n this.focusedIndex = 0;\r\n }\r\n }\r\n\r\n protected onSearchKeyDown(event: KeyboardEvent): void {\r\n if (event.key === \"Enter\" && this.searchTerm.length > 2) {\r\n event.preventDefault();\r\n const exactMatch = this.filteredItems.find(i => i.label?.toLowerCase().includes(this.searchTerm.toLowerCase()));\r\n if (exactMatch) {\r\n this.selectItem(exactMatch, event);\r\n }\r\n }\r\n\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n event.preventDefault();\r\n setTimeout(() => this.focusFirstItem(), 0);\r\n break;\r\n\r\n case \"Escape\":\r\n event.preventDefault();\r\n this.isOpen = false;\r\n break;\r\n }\r\n }\r\n\r\n protected override updateDisabledState(_isDisabled: boolean): void {\r\n //Intentionally left void, to implement in case is needed\r\n }\r\n\r\n protected updateSelection(item: SelectionListItem<T>, isAlreadySelected: boolean): void {\r\n item.selected = !isAlreadySelected;\r\n\r\n if (isAlreadySelected) {\r\n this.selectedIds = this.selectedIds.filter(id => id !== item.id);\r\n } else {\r\n this.selectedIds.push(item.id);\r\n }\r\n }\r\n\r\n protected override updateView(_value: Array<T> | null): void {\r\n //Intentionally left void, to implement in case is needed\r\n }\r\n\r\n private focusFirstItem(): void {\r\n const buttons = this.getEnabledButtons();\r\n if (buttons.length > 0) {\r\n this.focusedIndex = 0;\r\n buttons[0].focus();\r\n }\r\n }\r\n\r\n private focusNextItem(currentIndex: number = this.focusedIndex): void {\r\n const buttons = this.getEnabledButtons();\r\n if (buttons.length === 0) return;\r\n\r\n const nextIndex = (currentIndex + 1) % buttons.length;\r\n this.focusedIndex = nextIndex;\r\n buttons[nextIndex].focus();\r\n }\r\n\r\n private focusPreviousItem(currentIndex: number = this.focusedIndex): void {\r\n const buttons = this.getEnabledButtons();\r\n if (buttons.length === 0) return;\r\n\r\n const prevIndex = (currentIndex - 1 + buttons.length) % buttons.length;\r\n this.focusedIndex = prevIndex;\r\n buttons[prevIndex].focus();\r\n }\r\n\r\n private getEnabledButtons(): HTMLButtonElement[] {\r\n return this.optionButtons\r\n ? this.optionButtons.map(ref => ref.nativeElement).filter(btn => !btn.disabled)\r\n : [];\r\n }\r\n\r\n private setDropdownDirection(): void {\r\n const trigger: HTMLElement | undefined = this.elementRef.nativeElement.querySelector('.custom-select');\r\n const searchTrigger: HTMLElement | undefined = this.elementRef.nativeElement.querySelector('.options-search__input');\r\n const dropdownHeight: number = 240;\r\n\r\n if(trigger || searchTrigger){\r\n const rect = trigger?.getBoundingClientRect() || searchTrigger?.getBoundingClientRect();\r\n const viewportHeight = window.innerHeight;\r\n\r\n const spaceBelow = viewportHeight - (rect?.bottom ?? 0);\r\n const spaceAbove = (rect?.top ?? 0);\r\n\r\n if (spaceBelow >= dropdownHeight) {\r\n this.openDirection = 'down';\r\n } else if (spaceAbove >= dropdownHeight) {\r\n this.openDirection = 'top';\r\n } else {\r\n this.openDirection = spaceBelow > spaceAbove ? 'down' : 'top';\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns warning messages. Consumers may pass arbitrary warnings via `warningMessages`.\r\n * Falls back to DEFAULT_INPUT_MULTI_SELECT_WARNINGS_MESSAGES or a generic message.\r\n */\r\n protected override get warningList(): string[] {\r\n return Object.keys(this.warningMessages).map(key => {\r\n return (\r\n this.warningMessages[key] ||\r\n DEFAULT_INPUT_MULTI_SELECT_WARNINGS_MESSAGES[key] ||\r\n ''\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Returns whether any warnings are active.\r\n */\r\n protected get hasWarning(): boolean {\r\n return this.warningList.length > 0;\r\n }\r\n\r\n}\r\n","<div class=\"frg-multi-select\" [class.multi-select-error]=\"hasError\">\r\n <label [attr.for]=\"id + '-options'\">{{ label }}</label>\r\n \r\n @if(hasSearch) {\r\n <div class=\"options-search\">\r\n <input\r\n #searchInput\r\n type=\"text\"\r\n [attr.name]=\"id + '-options'\"\r\n [attr.id]=\"id + '-options'\"\r\n class=\"options-search__input\"\r\n [class.open]=\"isOpen\"\r\n [attr.placeholder]=\"'Search…'\"\r\n aria-label=\"Search options\"\r\n role=\"searchbox\"\r\n [value]=\"searchTerm\"\r\n (input)=\"onSearch($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (focus)=\"onFocus()\"\r\n (keydown)=\"onSearchKeyDown($event)\"\r\n />\r\n <ng-container [ngTemplateOutlet]=\"buttonsTemplate\"></ng-container>\r\n </div>\r\n\r\n @if(showChips && selectedItems.length) {\n <div class=\"selected-chips selected-chips--below\">\n @for(item of selectedItems; track item.id) {\n <frg-chip\n [id]=\"item.id\"\n [label]=\"item.label || ''\"\n size=\"sm\"\n [style]=\"chipsStyle\"\n [removable]=\"true\"\n [disabled]=\"disabled\"\n (removed)=\"removeItemById($event)\"\n ></frg-chip>\n }\n </div>\n } @else if(selectedItems.length) {\n <div class=\"selected-labels\">\n {{ selectedLabels }}\n </div>\n }\n } @else {\n <div class=\"frg-multi-select__handle-buttons\">\n @if(showChips) {\n <div\n class=\"custom-select custom-select--chips\"\n [id]=\"id + '-options'\"\n [attr.name]=\"id + '-options'\"\n [class.open]=\"isOpen\"\n [class.disabled]=\"disabled\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n [attr.aria-expanded]=\"isOpen\"\n (click)=\"toggleDropdown($event)\"\n (keydown)=\"onKeyDown($event)\"\n [attr.aria-controls]=\"id + '-options'\"\n >\n @if(selectedItems.length) {\n <div class=\"selected-chips\">\n @for(item of selectedItems; track item.id) {\n <frg-chip\n [id]=\"item.id\"\n [label]=\"item.label || ''\"\n size=\"sm\"\n [style]=\"chipsStyle\"\n [removable]=\"true\"\n [disabled]=\"disabled\"\n (removed)=\"removeItemById($event)\"\n ></frg-chip>\n }\n </div>\n } @else {\n <span class=\"selected-labels__text selected-labels__placeholder\">{{ placeholder || 'Select.' }}</span>\n }\n </div>\n } @else {\n <button\n type=\"button\"\n class=\"custom-select\"\n [id]=\"id + '-options'\"\n [attr.name]=\"id + '-options'\"\n [class.open]=\"isOpen\"\n [disabled]=\"disabled\"\n [attr.aria-expanded]=\"isOpen\"\n (click)=\"toggleDropdown($event)\"\n (keydown)=\"onKeyDown($event)\"\n [attr.aria-controls]=\"id + '-options'\"\n >\n @if(valuesTemplate) {\n <ng-container \n [ngTemplateOutlet]=\"valuesTemplate\" \n [ngTemplateOutletContext]=\"{ $implicit: selectedItems }\"\n ></ng-container>\n } @else {\n <span class=\"selected-labels__text\" [class.selected-labels__placeholder]=\"!selectedItems.length\">{{ selectedLabels }}</span>\n }\n </button>\n }\n <ng-container [ngTemplateOutlet]=\"buttonsTemplate\"></ng-container>\n </div>\n }\n\r\n @if(isOpen) {\r\n <div \r\n class=\"options\"\r\n [id]=\"id + '-options'\"\r\n [class.open-up]=\"openDirection === 'top'\"\r\n [class.open-down]=\"openDirection === 'down'\"\r\n >\r\n @for(item of filteredItems; track item.id; let idx = $index) {\r\n <button\r\n #optionButton\r\n type=\"button\"\r\n class=\"option\"\r\n [class.disabled]=\"item.disabled\"\r\n [class.selected]=\"selectedIds.includes(item.id)\"\r\n [disabled]=\"item.disabled\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur($event)\"\r\n (click)=\"selectItem(item, $event)\"\r\n (keydown)=\"onOptionKeyDown($event, item, idx)\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n [attr.id]=\"id + '-option-' + idx\"\r\n [attr.name]=\"id + '-option'\"\r\n [checked]=\"item.selected\"\r\n readonly\r\n />\r\n @if(optionTemplate) {\r\n <ng-container [ngTemplateOutlet]=\"optionTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\r\n } @else {\r\n {{ item.label }}\r\n }\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n <frg-input-validation\r\n [errorList]=\"errorList\"\r\n [isFormInvalid]=\"hasError\"\r\n ></frg-input-validation>\r\n</div>\r\n\r\n<ng-template #buttonsTemplate>\r\n <div class=\"multi-select__actions\">\r\n @if((value && selectedItems.length) || (hasSearch && searchTerm.length)) {\r\n <button\r\n type=\"button\"\r\n class=\"clear-button\"\r\n aria-label=\"Clear selection\"\r\n (click)=\"clearValue($event)\"\r\n >\r\n <span class=\"fas fa-xmark\"></span>\r\n </button>\r\n }\r\n <button\r\n type=\"button\"\r\n class=\"arrow-button\"\r\n [class.open]=\"isOpen\"\r\n aria-label=\"Toggle dropdown\"\r\n (click)=\"toggleDropdown($event)\"\r\n >\r\n <span class=\"arrow-icon fas fa-chevron-down\"></span>\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { generateUUID } from '../../../utils/uuid.utils';\r\nimport { Tag, TTagIconPosition, TTagSize, TTagType } from './tag.type';\r\n\r\n/**\r\n * TagComponent\r\n *\r\n * A small UI element used to display labeled statuses, metadata, or categories.\r\n * Supports icons, removable behavior, disabled state, and standardized design-\r\n * system styles and sizes. Implements the shared `Tag` interface to ensure\r\n * consistency across all status-driven UI components (Tag, Badge, Chip, etc.).\r\n */\r\n@Component({\r\n selector: 'frg-tag',\r\n templateUrl: './tag.component.html',\r\n styleUrls: ['./tag.component.scss'],\r\n imports: [NgClass]\r\n})\r\nexport class TagComponent implements Tag {\r\n\r\n /**\r\n * Unique identifier for the tag.\r\n * Automatically generated if not provided by the parent.\r\n * Used primarily for tracking and removal events.\r\n */\r\n @Input() id: string = generateUUID();\r\n\r\n /**\r\n * Text content displayed inside the tag.\r\n */\r\n @Input() label?: string = '';\r\n\r\n /**\r\n * Visual style of the tag.\r\n * Corresponds to design-system status color tokens.\r\n * Example: 'primary', 'secondary', 'success', 'warning', etc.\r\n */\r\n @Input() style: TTagType = 'primary';\r\n\r\n /**\r\n * Size variant of the tag.\r\n * Options follow the standardized sizing tokens: 'sm', 'md', or 'lg'.\r\n */\r\n @Input() size: TTagSize = 'md';\r\n\r\n /**\r\n * Optional icon class displayed before the label.\r\n * Example: 'frg-icon-info', 'frg-icon-alert'.\r\n */\r\n @Input() icon: string | undefined = undefined;\r\n\r\n /**\r\n * Position of the icon\r\n */\r\n @Input() iconPosition: TTagIconPosition = 'end';\r\n\r\n /**\r\n * Whether the tag is disabled.\r\n * Disables interactions and applies the disabled visual style.\r\n */\r\n @Input() disabled = false;\r\n\r\n /**\r\n * If true, displays a remove button allowing the tag to be dismissed.\r\n */\r\n @Input() removable = false;\r\n\r\n /**\r\n * Emits the ID of the tag when it is removed.\r\n */\r\n @Output() removed = new EventEmitter<string>();\r\n\r\n /**\r\n * Emits the `removed` event when the remove button is clicked,\r\n * provided the tag is not disabled and removal is allowed.\r\n */\r\n onRemove(): void {\r\n if (!this.disabled && this.removable) {\r\n this.removed.emit(this.id);\r\n }\r\n }\r\n}\r\n","<span\r\n class=\"frg-tag\"\r\n [class.frg-tag--disabled]=\"disabled\"\r\n [class.removable]=\"removable\"\r\n [ngClass]=\"[\r\n 'frg-tag--' + style,\r\n 'frg-tag--' + size,\r\n iconPosition === 'end' ? 'frg-tag--icon-end' : ''\r\n ]\"\r\n>\r\n @if(icon && iconPosition === 'start') {\r\n <span class=\"frg-tag__icon\">\r\n <i [class]=\"icon\"></i>\r\n </span>\r\n }\r\n\r\n @if(label) {\r\n <span class=\"frg-tag__label\">\r\n {{ label }}\r\n </span>\r\n }\r\n\r\n @if(icon && iconPosition === 'end') {\r\n <span class=\"frg-tag__icon\">\r\n <i [class]=\"icon\"></i>\r\n </span>\r\n }\r\n\r\n @if(removable) {\r\n <button\r\n class=\"frg-tag__remove\"\r\n type=\"button\"\r\n aria-label=\"Remove tag\"\r\n (click)=\"onRemove()\"\r\n >\r\n ×\r\n </button>\r\n }\r\n</span>\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { generateUUID } from '../../../utils/uuid.utils';\r\nimport { Pill, TPillIconPosition, TPillSize, TPillType } from './pill.type';\r\n\r\n/**\r\n * TagComponent\r\n *\r\n * A small UI element used to display labeled statuses, metadata, or categories.\r\n * Supports icons, removable behavior, disabled state, and standardized design-\r\n * system styles and sizes. Implements the shared `Tag` interface to ensure\r\n * consistency across all status-driven UI components (Tag, Badge, Chip, etc.).\r\n */\r\n@Component({\r\n selector: 'frg-pill',\r\n templateUrl: './pill.component.html',\r\n styleUrls: ['./pill.component.scss'],\r\n imports: [NgClass]\r\n})\r\nexport class PillComponent implements Pill {\r\n\r\n /**\r\n * Unique identifier for the tag.\r\n * Automatically generated if not provided by the parent.\r\n * Used primarily for tracking and removal events.\r\n */\r\n @Input() id: string = generateUUID();\r\n\r\n /**\r\n * Text content displayed inside the tag.\r\n */\r\n @Input() label?: string = '';\r\n\r\n /**\r\n * Visual style of the pill.\r\n * Corresponds to design-system status color tokens.\r\n * Example: 'primary', 'secondary', 'success', 'warning', etc.\r\n */\r\n @Input() style: TPillType = 'primary';\r\n\r\n /**\r\n * Size variant of the pill.\r\n * Options follow the standardized sizing tokens: 'sm', 'md', or 'lg'.\r\n */\r\n @Input() size: TPillSize = 'md';\r\n\r\n /**\r\n * Optional icon class displayed before the label.\r\n * Example: 'frg-icon-info', 'frg-icon-alert'.\r\n */\r\n @Input() icon: string | undefined = undefined;\r\n\r\n /**\r\n * Position of the icon\r\n */\r\n @Input() iconPosition: TPillIconPosition = 'end';\r\n\r\n /**\r\n * Whether the pill is disabled.\r\n * Disables interactions and applies the disabled visual style.\r\n */\r\n @Input() disabled = false;\r\n\r\n /**\r\n * If true, displays a remove button allowing the pill to be dismissed.\r\n */\r\n @Input() removable = false;\r\n\r\n /**\r\n * Emits the ID of the pill when it is removed.\r\n */\r\n @Output() removed = new EventEmitter<string>();\r\n\r\n /**\r\n * Emits the `removed` event when the remove button is clicked,\r\n * provided the tag is not disabled and removal is allowed.\r\n */\r\n onRemove(): void {\r\n if (!this.disabled && this.removable) {\r\n this.removed.emit(this.id);\r\n }\r\n }\r\n}\r\n","<span\r\n class=\"frg-pill\"\r\n [class.frg-pill--disabled]=\"disabled\"\r\n [class.removable]=\"removable\"\r\n [ngClass]=\"[\r\n 'frg-pill--' + style,\r\n 'frg-pill--' + size,\r\n iconPosition === 'end' ? 'frg-pill--icon-end' : 'frg-pill--icon-start'\r\n ]\"\r\n>\r\n\r\n @if(icon && iconPosition === 'start') {\r\n <span class=\"frg-pill__icon\">\r\n <i [class]=\"icon\"></i>\r\n </span>\r\n }\r\n\r\n @if(label) {\r\n <span class=\"frg-pill__label\">\r\n {{ label }}\r\n </span>\r\n }\r\n\r\n @if(icon && iconPosition === 'end') {\r\n <span class=\"frg-pill__icon\">\r\n <i [class]=\"icon\"></i>\r\n </span>\r\n }\r\n\r\n @if(removable) {\r\n <button\r\n class=\"frg-pill__remove\"\r\n type=\"button\"\r\n aria-label=\"Remove pill\"\r\n (click)=\"onRemove()\"\r\n >\r\n ×\r\n </button>\r\n }\r\n</span>\r\n","import {\r\n Directive,\r\n ElementRef,\r\n HostListener,\r\n inject,\r\n Input,\r\n OnDestroy,\r\n Renderer2,\r\n} from '@angular/core';\r\nimport { IConfigTooltipPopover, ITooltipEventAction, ITooltipLinkAction } from './tooltip.interface';\r\n\r\n@Directive({\r\n selector: '[frgPopover]',\r\n standalone: true,\r\n})\r\nexport class FragmentsPopoverDirective implements OnDestroy {\r\n private readonly elemRef: ElementRef = inject(ElementRef);\r\n private readonly renderer: Renderer2 = inject(Renderer2);\r\n @Input() popoverConfig: IConfigTooltipPopover = {} as IConfigTooltipPopover;\r\n popover: HTMLElement | undefined;\r\n\r\n @HostListener('click', ['$event']) onClick(event: MouseEvent) {\r\n event.stopPropagation();\r\n if (!this.popover) {\r\n this.show();\r\n return;\r\n }\r\n this.hide();\r\n }\r\n\r\n @HostListener('document:click') onDocumentClick() {\r\n this.close();\r\n }\r\n\r\n @HostListener('keydown.escape') onEscape() {\r\n this.close();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.close();\r\n }\r\n\r\n private close() {\r\n if (this.popover) {\r\n this.hide();\r\n }\r\n }\r\n\r\n private show() {\r\n if (!this.popoverConfig.apply) {\r\n return;\r\n }\r\n\r\n this.initPopover();\r\n\r\n if (this.popoverConfig?.text) {\r\n this.popover = this.renderer.createElement('div');\r\n this.renderer.addClass(this.popover, 'frg-popover');\r\n this.renderer.setStyle(this.popover, 'text-align', 'left');\r\n this.renderer.setAttribute(this.popover, 'role', 'dialog');\r\n this.renderer.setAttribute(this.popover, 'tabindex', '-1');\r\n this.renderer.setStyle(this.popover, 'position', 'absolute');\r\n this.renderer.setStyle(this.popover, 'will-change', 'transform');\r\n this.renderer.setStyle(this.popover, 'left', '0');\r\n this.renderer.setStyle(this.popover, 'top', '0');\r\n this.renderer.setStyle(this.popover, 'z-index', '9999');\r\n\r\n const innerPopover: HTMLElement = this.renderer.createElement('div');\r\n this.renderer.addClass(innerPopover, 'frg-popover-inner');\r\n\r\n const textParagraph: HTMLElement = this.renderer.createElement('p');\r\n const strongTextParagraph: HTMLElement = this.renderer.createElement('strong');\r\n\r\n this.renderer.appendChild(\r\n strongTextParagraph,\r\n this.renderer.createText(this.popoverConfig.text)\r\n );\r\n\r\n this.renderer.appendChild(textParagraph, strongTextParagraph);\r\n this.renderer.appendChild(innerPopover, textParagraph);\r\n\r\n if (this.popoverConfig.textContent) {\r\n const contentParagraph: HTMLElement = this.renderer.createElement('p');\r\n this.renderer.appendChild(\r\n contentParagraph,\r\n this.renderer.createText(this.popoverConfig.textContent)\r\n );\r\n this.renderer.appendChild(innerPopover, contentParagraph);\r\n }\r\n\r\n if (this.popoverConfig.buttonConfig?.text) {\r\n const actions: HTMLElement = this.renderer.createElement('div');\r\n this.renderer.addClass(actions, 'frg-popover-actions');\r\n\r\n const actionButton: HTMLElement = this.renderer.createElement('button');\r\n this.renderer.addClass(actionButton, 'frg-popover-button');\r\n this.renderer.setAttribute(actionButton, 'type', 'button');\r\n this.renderer.appendChild(\r\n actionButton,\r\n this.renderer.createText(this.popoverConfig.buttonConfig.text)\r\n );\r\n\r\n this.renderer.listen(actionButton, 'click', (event: Event) => {\r\n event.stopPropagation();\r\n this.handleAction();\r\n });\r\n\r\n this.renderer.appendChild(actions, actionButton);\r\n this.renderer.appendChild(innerPopover, actions);\r\n }\r\n\r\n this.renderer.appendChild(this.popover, innerPopover);\r\n\r\n if (!this.popoverConfig.hideIndicator) {\r\n const indicator: HTMLElement = this.renderer.createElement('span');\r\n this.renderer.addClass(indicator, 'frg-popover-indicator');\r\n this.renderer.appendChild(this.popover, indicator);\r\n }\r\n\r\n this.renderer.appendChild(document.body, this.popover);\r\n this.setPosition();\r\n }\r\n }\r\n\r\n private hide() {\r\n this.renderer.removeChild(document.body, this.popover);\r\n this.popover = undefined;\r\n }\r\n\r\n private initPopover() {\r\n this.popoverConfig.text = this.popoverConfig.text\r\n ? this.popoverConfig.text\r\n : 'No popover text';\r\n this.popoverConfig.position = this.popoverConfig.position\r\n ? this.popoverConfig.position\r\n : 'top';\r\n this.popoverConfig.gap = this.popoverConfig.gap ?? 0;\r\n this.popoverConfig.hideIndicator = this.popoverConfig.hideIndicator ?? false;\r\n this.popoverConfig.apply = this.popoverConfig.apply ?? true;\r\n }\r\n\r\n private handleAction(): void {\r\n const action = this.popoverConfig.buttonConfig?.action;\r\n if (!action) {\r\n return;\r\n }\r\n\r\n if ((action as ITooltipLinkAction).link) {\r\n const linkAction = action as ITooltipLinkAction;\r\n window.open(linkAction.link, linkAction.target || '_self');\r\n return;\r\n }\r\n\r\n if ((action as ITooltipEventAction).clickEvent) {\r\n const eventAction = action as ITooltipEventAction;\r\n eventAction.clickEvent(undefined);\r\n }\r\n }\r\n\r\n private setPosition() {\r\n const element = this.elemRef.nativeElement;\r\n const rect = element.getBoundingClientRect();\r\n const bodyRect = document.body.getBoundingClientRect();\r\n const viewportWidth =\r\n document.documentElement?.clientWidth || window.innerWidth;\r\n const viewportPadding = 8;\r\n\r\n const xOffset = rect.left - bodyRect.left;\r\n const yOffset = rect.top - bodyRect.top;\r\n const widthOffset = rect.width;\r\n const heightOffset = rect.height;\r\n\r\n const p_widthOffset: number = this.popover?.offsetWidth ?? 0;\r\n const p_heightOffset: number = this.popover?.offsetHeight ?? 0;\r\n\r\n const clampX = (x: number) =>\r\n Math.min(\r\n Math.max(x, viewportPadding),\r\n viewportWidth - p_widthOffset - viewportPadding\r\n );\r\n\r\n const position = (this.popoverConfig.position || 'top')\r\n .toLowerCase()\r\n .trim()\r\n .replaceAll(' ', '-');\r\n\r\n this.renderer.setAttribute(this.popover, 'data-position', position);\r\n\r\n switch (position) {\r\n case 'top':\r\n this.renderer.setStyle(\r\n this.popover,\r\n 'transform',\r\n `translate(${clampX(xOffset + widthOffset / 2 - p_widthOffset / 2)}px, ${\r\n yOffset - p_heightOffset - (this.popoverConfig?.gap ?? 0)\r\n }px)`\r\n );\r\n break;\r\n\r\n case 'top-left':\r\n this.renderer.setStyle(\r\n this.popover,\r\n 'transform',\r\n `translate(${clampX(xOffset + (widthOffset - p_widthOffset))}px, ${\r\n yOffset - p_heightOffset - (this.popoverConfig?.gap ?? 0)\r\n }px)`\r\n );\r\n break;\r\n\r\n case 'top-right':\r\n this.renderer.setStyle(\r\n this.popover,\r\n 'transform',\r\n `translate(${clampX(xOffset)}px, ${\r\n yOffset - p_heightOffset - (this.popoverConfig?.gap ?? 0)\r\n }px)`\r\n );\r\n break;\r\n\r\n case 'left':\r\n this.renderer.setStyle(\r\n this.popover,\r\n 'transform',\r\n `translate(${clampX(\r\n xOffset - p_widthOffset - (this.popoverConfig?.gap ?? 0)\r\n )}px, ${yOffset + heightOffset / 2 - p_heightOffset / 2}px)`\r\n );\r\n break;\r\n\r\n case 'right':\r\n this.renderer.setStyle(\r\n this.popover,\r\n 'transform',\r\n `translate(${clampX(\r\n xOffset + widthOffset + (this.popoverConfig?.gap ?? 0)\r\n )}px, ${yOffset + heightOffset / 2 - p_heightOffset / 2}px)`\r\n );\r\n break;\r\n\r\n case 'bottom':\r\n this.renderer.setStyle(\r\n this.popover,\r\n 'transform',\r\n `translate(${clampX(xOffset + widthOffset / 2 - p_widthOffset / 2)}px, ${\r\n yOffset + heightOffset + (this.popoverConfig?.gap ?? 0)\r\n }px)`\r\n );\r\n break;\r\n\r\n case 'bottom-left':\r\n this.renderer.setStyle(\r\n this.popover,\r\n 'transform',\r\n `translate(${clampX(xOffset + (widthOffset - p_widthOffset))}px, ${\r\n yOffset + heightOffset + (this.popoverConfig?.gap ?? 0)\r\n }px)`\r\n );\r\n break;\r\n\r\n case 'bottom-right':\r\n this.renderer.setStyle(\r\n this.popover,\r\n 'transform',\r\n `translate(${clampX(xOffset)}px, ${\r\n yOffset + heightOffset + (this.popoverConfig?.gap ?? 0)\r\n }px)`\r\n );\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n inject,\r\n Input,\r\n OnChanges,\r\n OnDestroy,\r\n Renderer2,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { Badge } from './badge.interface';\r\n\r\n@Directive({\r\n selector: '[frgBadge]',\r\n standalone: true,\r\n host: {\r\n class: 'frg-has-badge',\r\n },\r\n})\r\nexport class FrgBadgeDirective implements OnChanges, OnDestroy {\r\n private readonly host = inject(ElementRef<HTMLElement>);\r\n private readonly renderer = inject(Renderer2);\r\n\r\n /**\r\n * Badge configuration object.\r\n */\r\n @Input() badge!: Badge;\r\n\r\n /**\r\n * Reference to the badge HTML element.\r\n */\r\n private badgeEl?: HTMLElement;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['badge']) {\r\n this.updateBadge();\r\n }\r\n }\r\n\r\n /**\r\n * Cleans up the badge element when the directive is destroyed.\r\n */\r\n ngOnDestroy(): void {\r\n this.removeBadge();\r\n }\r\n\r\n /**\r\n * Updates the badge element based on the current badge configuration.\r\n * Creates, updates, or removes the badge as necessary.\r\n */\r\n private updateBadge(): void {\r\n if (this.shouldHide()) {\r\n this.removeBadge();\r\n return;\r\n }\r\n\r\n if (!this.badgeEl) {\r\n this.createBadge();\r\n }\r\n\r\n this.updateBadgeContent();\r\n this.updateBadgeClasses();\r\n }\r\n\r\n /**\r\n * Creates the badge HTML element and appends it to the host element.\r\n * Initializes the badge with the base class.\r\n */\r\n private createBadge(): void {\r\n this.badgeEl = this.renderer.createElement('span');\r\n this.renderer.addClass(this.badgeEl, 'frg-badge');\r\n\r\n this.renderer.appendChild(this.host.nativeElement, this.badgeEl);\r\n }\r\n\r\n /**\r\n * Updates the content of the badge element based on the badge configuration.\r\n * Handles dot mode, icon placement, and value display.\r\n */\r\n private updateBadgeContent(): void {\r\n if (!this.badgeEl || this.badge.dot) {\r\n this.badgeEl!.innerHTML = '';\r\n return;\r\n }\r\n\r\n this.badgeEl.innerHTML = '';\r\n\r\n const hasIcon = !!this.badge.icon;\r\n const hasValue = this.badge.value != null && this.badge.value !== '';\r\n\r\n if (hasIcon) {\r\n const iconEl = this.createIconElement(this.badge.icon || '');\r\n\r\n if (this.badge.iconPosition === 'start') {\r\n this.appendIconThenValue(iconEl, hasValue);\r\n } else {\r\n this.appendValueThenIcon(hasValue, iconEl);\r\n }\r\n } else if (hasValue) {\r\n this.badgeEl.innerText = String(this.badge.value);\r\n }\r\n }\r\n\r\n /**\r\n * Creates the icon element with all classes\r\n */\r\n private createIconElement(iconClass: string): HTMLElement {\r\n const iconEl = this.renderer.createElement('i');\r\n for (const cls of iconClass.split(' ')) {\r\n this.renderer.addClass(iconEl, cls);\r\n }\r\n this.renderer.addClass(iconEl, 'frg-badge__icon');\r\n return iconEl;\r\n }\r\n\r\n /**\r\n * Append value first, then icon\r\n */\r\n private appendValueThenIcon(hasValue: boolean, iconEl: HTMLElement): void {\r\n if (hasValue) {\r\n const textNode = this.renderer.createText(String(this.badge.value));\r\n this.renderer.appendChild(this.badgeEl!, textNode);\r\n }\r\n this.renderer.appendChild(this.badgeEl!, iconEl);\r\n }\r\n\r\n /**\r\n * Append icon first, then value\r\n */\r\n private appendIconThenValue(iconEl: HTMLElement, hasValue: boolean): void {\r\n this.renderer.appendChild(this.badgeEl!, iconEl);\r\n if (hasValue) {\r\n const textNode = this.renderer.createText(String(this.badge.value));\r\n this.renderer.appendChild(this.badgeEl!, textNode);\r\n }\r\n }\r\n\r\n /**\r\n * Updates the CSS classes of the badge element based on the badge configuration.\r\n * Applies size, style, and dot mode classes.\r\n */\r\n private updateBadgeClasses(): void {\r\n if (!this.badgeEl) return;\r\n\r\n this.renderer.setAttribute(this.badgeEl, 'class', 'frg-badge');\r\n\r\n if (this.badge.size) {\r\n this.renderer.addClass(this.badgeEl, `frg-badge--${this.badge.size}`);\r\n }\r\n\r\n if (this.badge.style) {\r\n this.renderer.addClass(this.badgeEl, `frg-badge--${this.badge.style}`);\r\n }\r\n\r\n if (this.badge.dot) {\r\n this.renderer.addClass(this.badgeEl, 'frg-badge--dot');\r\n }\r\n\r\n if (this.badge.disabled) {\r\n this.renderer.addClass(this.badgeEl, 'frg-badge--disabled');\r\n }\r\n }\r\n\r\n /**\r\n * Removes the badge element from the host element and clears the reference.\r\n * Used when the badge should be hidden.\r\n */\r\n private removeBadge(): void {\r\n if (this.badgeEl) {\r\n this.renderer.removeChild(this.host.nativeElement, this.badgeEl);\r\n this.badgeEl = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Determines whether the badge should be hidden based on its configuration.\r\n * Returns true if the badge is marked as hidden or has no value in non-dot mode.\r\n */\r\n private shouldHide(): boolean {\r\n if (this.badge.hidden) return true;\r\n\r\n if (this.badge.dot) return false;\r\n\r\n return (\r\n this.badge.value === null ||\r\n this.badge.value === undefined ||\r\n this.badge.value === ''\r\n );\r\n }\r\n}\r\n","import { Pipe, PipeTransform, inject } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n@Pipe({\r\n name: 'sanitizeHtml',\r\n standalone: true,\r\n})\r\nexport class SanitizeHtmlPipe implements PipeTransform {\r\n _sanitizer = inject(DomSanitizer);\r\n\r\n transform(v: string | number | null | undefined): SafeHtml {\r\n let text: string = '';\r\n if (typeof v === 'number') {\r\n text = String(v);\r\n } else if (v === null || v === undefined) {\r\n text = '';\r\n } else {\r\n text = v.replace(/(?:\\r\\n|\\r|\\\\n)/g, '<br>');\r\n }\r\n\r\n return this._sanitizer.bypassSecurityTrustHtml(text);\r\n }\r\n}\r\n","//#region [Components]\r\nexport * from './lib/components/accordion/accordion.component';\r\nexport * from './lib/components/button/button.component';\r\nexport * from './lib/components/card/card.component';\r\nexport * from './lib/components/modal/modal.component';\r\nexport * from './lib/components/toast/toast.component';\r\nexport * from './lib/components/toast-stack/toast-stack.component';\r\nexport * from './lib/components/snackbar/snackbar.component';\r\nexport * from './lib/components/code-block/code-block.component';\r\nexport * from './lib/components/breadcrumb/breadcrumb.component';\r\nexport * from './lib/components/layout/container/container.component';\r\nexport * from './lib/components/layout/divider/divider.component';\r\nexport * from './lib/components/layout/separator/separator.component';\r\nexport * from './lib/components/layout/section/section.component';\r\nexport * from './lib/components/morph/blob-moph/blob-moprh.component';\r\nexport * from './lib/components/decorative/sparkle-field/sparkle-field.component';\r\nexport * from './lib/components/pagination/small-pagination/small-pagination.component';\r\nexport * from './lib/components/table/table.component';\r\nexport * from './lib/components/tabs/tabs.component';\r\nexport * from './lib/components/title-bar/title-bar.component';\r\nexport * from './lib/components/side-nav/side-nav.component';\r\nexport * from './lib/components/stepper/stepper.component';\r\nexport * from './lib/components/input/input-text/input-text.component';\r\nexport * from './lib/components/input/input-number/input-number.component';\r\nexport * from './lib/components/input/input-date/input-date.component';\r\nexport * from './lib/components/input/input-calendar/input-calendar.component';\r\nexport * from './lib/components/input/input-time/input-time.component';\r\nexport * from './lib/components/input/input-date-time/input-date-time.component';\r\nexport * from './lib/components/input/input-clock-picker/input-clock-picker.component';\r\nexport * from './lib/components/input/input-validation/input-validation.component';\r\nexport * from './lib/components/input/input-toggle-switch/input-toggle-switch.component';\r\nexport * from './lib/components/input/input-checkbox/input-checkbox.component';\r\nexport * from './lib/components/input/input-checkbox-group/input-checkbox-group.component';\r\nexport * from './lib/components/input/input-radio-group/input-radio-group.component';\r\nexport * from './lib/components/input/input-slider/input-slider.component';\r\nexport * from './lib/components/input/input-file-upload/input-file-upload.component';\r\nexport * from './lib/components/loader/spinner/spinner.component';\r\nexport * from './lib/components/loader/progress-bar/progress-bar.component';\r\nexport * from './lib/components/loader/pulse-loader/pulse-loader.component';\r\nexport * from './lib/components/loader/skeleton-loader/skeleton-loader.component';\r\nexport * from './lib/components/loader/content-blur/content-blur.component';\r\nexport * from './lib/components/selection-lists/selection-list/selection-list.component';\r\nexport * from './lib/components/selection-lists/multi-select/multi-select.component';\r\nexport * from './lib/components/status/tag/tag.component';\r\nexport * from './lib/components/status/chip/chip.component';\r\nexport * from './lib/components/status/pill/pill.component';\r\nexport * from './lib/components/breadcrumb/breadcrumb.interface';\r\n//#endregion\r\n\r\n//#region [Directives]\r\nexport * from './lib/directives/tooltip/tooltip.directive';\r\nexport * from './lib/directives/tooltip/popover.directive';\r\nexport * from './lib/components/status/directives/badge/badge.directive';\r\n//#endregion\r\n\r\n//#region [Enums]\r\nexport * from './lib/components/table/table.enum';\r\n//#endregion\r\n\r\n//#region [Interfaces]\r\nexport * from './lib/components/code-block/code-block.interface';\r\nexport * from './lib/components/pagination/pagination.interface';\r\nexport * from './lib/components/table/table.interface';\r\nexport * from './lib/components/selection-lists/selection-lists-interface';\r\nexport * from './lib/components/status/status.interface';\r\nexport * from './lib/components/status/directives/badge/badge.interface';\r\n//#endregion\r\n\r\n//#region [Functions]\r\nexport * from './lib/components/table/table.function';\r\n//#endregion\r\n\r\n//#region [Pipes]\r\nexport * from './lib/components/table/table.pipe';\r\nexport * from './lib/pipes/sanitize-html.pipe';\r\nexport * from './lib/pipes/safe-html.pipe';\r\nexport * from './lib/pipes/chunk.pipe';\r\n//#endregion\r\n\r\n//#region [Types]\r\nexport * from './lib/components/accordion/accordion.type';\r\nexport * from './lib/components/button/button.type';\r\nexport * from './lib/components/card/card.type';\r\nexport * from './lib/components/code-block/code-block.type';\r\nexport * from './lib/components/modal/modal.type';\r\nexport * from './lib/components/toast/toast.type';\r\nexport * from './lib/components/snackbar/snackbar.type';\r\nexport * from './lib/components/table/table.type';\r\nexport * from './lib/components/loader/spinner/spinner.type';\r\nexport * from './lib/components/loader/progress-bar/progress-bar.type';\r\nexport * from './lib/components/loader/pulse-loader/pulse-loader.type';\r\nexport * from './lib/components/loader/skeleton-loader/skeleton-loader.type';\r\nexport * from './lib/components/status/status.type';\r\nexport * from './lib/components/status/tag/tag.type';\r\nexport * from './lib/components/status/chip/chip.type';\r\nexport * from './lib/components/status/pill/pill.type';\r\nexport * from './lib/components/tabs/tabs.type';\r\nexport * from './lib/components/stepper/stepper.type';\r\nexport * from './lib/components/side-nav/side-nav.type';\r\nexport * from './lib/components/layout/container/container.type';\r\nexport * from './lib/components/layout/divider/divider.type';\r\nexport * from './lib/components/layout/separator/separator.type';\r\nexport * from './lib/components/layout/section/section.type';\r\nexport * from './lib/directives/tooltip/tooltip.type';\r\nexport * from './lib/types/base.types';\r\nexport * from './lib/types/form.types';\r\nexport * from './lib/types/common.types';\r\n//#endregion\r\n\r\n//#region [Utils]\r\nexport * from './lib/utils/common.utils';\r\nexport * from './lib/utils/number.utils';\r\nexport * from './lib/utils/uuid.utils';\r\n//#endregion\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuidv4"],"mappings":"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"}
|