@pecb-ui/components 1.1.2 → 2.0.0
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 +556 -556
- package/fesm2022/pecb-ui-components.mjs +998 -1907
- package/fesm2022/pecb-ui-components.mjs.map +1 -1
- package/index.d.ts +2439 -3
- package/package.json +6 -8
- package/esm2022/lib/components/button/button.component.mjs +0 -171
- package/esm2022/lib/components/card/card.component.mjs +0 -182
- package/esm2022/lib/components/checkbox/checkbox.component.mjs +0 -126
- package/esm2022/lib/components/datepicker/datepicker.component.mjs +0 -349
- package/esm2022/lib/components/dropdown/dropdown.component.mjs +0 -329
- package/esm2022/lib/components/input/input.component.mjs +0 -321
- package/esm2022/lib/components/pagination/pagination.component.mjs +0 -197
- package/esm2022/lib/components/radio/radio.component.mjs +0 -147
- package/esm2022/lib/components/right-modal/right-modal.component.mjs +0 -234
- package/esm2022/lib/components/sidebar/sidebar.component.mjs +0 -155
- package/esm2022/lib/components/status/status.component.mjs +0 -50
- package/esm2022/lib/components/tab/tab.component.mjs +0 -151
- package/esm2022/lib/components/table/table.component.mjs +0 -503
- package/esm2022/lib/components/toggle/toggle.component.mjs +0 -126
- package/esm2022/lib/pecb-components.module.mjs +0 -118
- package/esm2022/lib/services/loading.service.mjs +0 -182
- package/esm2022/lib/services/notification.service.mjs +0 -144
- package/esm2022/lib/services/theme.service.mjs +0 -232
- package/esm2022/lib/shared/interfaces/component.interfaces.mjs +0 -2
- package/esm2022/lib/shared/types/common.types.mjs +0 -6
- package/esm2022/lib/shared/utils/accessibility.utils.mjs +0 -223
- package/esm2022/lib/shared/utils/dom.utils.mjs +0 -240
- package/esm2022/lib/shared/utils/error.utils.mjs +0 -277
- package/esm2022/lib/shared/utils/string.utils.mjs +0 -204
- package/esm2022/pecb-ui-components.mjs +0 -5
- package/esm2022/public-api.mjs +0 -53
- package/lib/components/button/button.component.d.ts +0 -130
- package/lib/components/card/card.component.d.ts +0 -140
- package/lib/components/checkbox/checkbox.component.d.ts +0 -74
- package/lib/components/datepicker/datepicker.component.d.ts +0 -155
- package/lib/components/dropdown/dropdown.component.d.ts +0 -144
- package/lib/components/input/input.component.d.ts +0 -215
- package/lib/components/pagination/pagination.component.d.ts +0 -53
- package/lib/components/radio/radio.component.d.ts +0 -93
- package/lib/components/right-modal/right-modal.component.d.ts +0 -137
- package/lib/components/sidebar/sidebar.component.d.ts +0 -97
- package/lib/components/status/status.component.d.ts +0 -19
- package/lib/components/tab/tab.component.d.ts +0 -102
- package/lib/components/table/table.component.d.ts +0 -403
- package/lib/components/toggle/toggle.component.d.ts +0 -74
- package/lib/pecb-components.module.d.ts +0 -37
- package/lib/services/loading.service.d.ts +0 -129
- package/lib/services/notification.service.d.ts +0 -136
- package/lib/services/theme.service.d.ts +0 -142
- package/lib/shared/interfaces/component.interfaces.d.ts +0 -283
- package/lib/shared/types/common.types.d.ts +0 -86
- package/lib/shared/utils/accessibility.utils.d.ts +0 -167
- package/lib/shared/utils/dom.utils.d.ts +0 -108
- package/lib/shared/utils/error.utils.d.ts +0 -191
- package/lib/shared/utils/string.utils.d.ts +0 -144
- package/public-api.d.ts +0 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pecb-ui-components.mjs","sources":["../../../projects/ui-components/src/lib/shared/utils/dom.utils.ts","../../../projects/ui-components/src/lib/components/button/button.component.ts","../../../projects/ui-components/src/lib/components/button/button.component.html","../../../projects/ui-components/src/lib/components/card/card.component.ts","../../../projects/ui-components/src/lib/components/card/card.component.html","../../../projects/ui-components/src/lib/components/status/status.component.ts","../../../projects/ui-components/src/lib/components/status/status.component.html","../../../projects/ui-components/src/lib/components/pagination/pagination.component.ts","../../../projects/ui-components/src/lib/components/pagination/pagination.component.html","../../../projects/ui-components/src/lib/components/table/table.component.ts","../../../projects/ui-components/src/lib/components/table/table.component.html","../../../projects/ui-components/src/lib/components/tab/tab.component.ts","../../../projects/ui-components/src/lib/components/tab/tab.component.html","../../../projects/ui-components/src/lib/components/datepicker/datepicker.component.ts","../../../projects/ui-components/src/lib/components/datepicker/datepicker.component.html","../../../projects/ui-components/src/lib/components/input/input.component.ts","../../../projects/ui-components/src/lib/components/input/input.component.html","../../../projects/ui-components/src/lib/components/radio/radio.component.ts","../../../projects/ui-components/src/lib/components/radio/radio.component.html","../../../projects/ui-components/src/lib/components/checkbox/checkbox.component.ts","../../../projects/ui-components/src/lib/components/checkbox/checkbox.component.html","../../../projects/ui-components/src/lib/components/toggle/toggle.component.ts","../../../projects/ui-components/src/lib/components/toggle/toggle.component.html","../../../projects/ui-components/src/lib/components/dropdown/dropdown.component.ts","../../../projects/ui-components/src/lib/components/dropdown/dropdown.component.html","../../../projects/ui-components/src/lib/components/right-modal/right-modal.component.ts","../../../projects/ui-components/src/lib/components/right-modal/right-modal.component.html","../../../projects/ui-components/src/lib/components/sidebar/sidebar.component.ts","../../../projects/ui-components/src/lib/components/sidebar/sidebar.component.html","../../../projects/ui-components/src/lib/pecb-components.module.ts","../../../projects/ui-components/src/lib/services/notification.service.ts","../../../projects/ui-components/src/lib/services/theme.service.ts","../../../projects/ui-components/src/lib/services/loading.service.ts","../../../projects/ui-components/src/lib/shared/types/common.types.ts","../../../projects/ui-components/src/lib/shared/utils/string.utils.ts","../../../projects/ui-components/src/lib/shared/utils/accessibility.utils.ts","../../../projects/ui-components/src/lib/shared/utils/error.utils.ts","../../../projects/ui-components/src/public-api.ts","../../../projects/ui-components/src/pecb-ui-components.ts"],"sourcesContent":["/**\r\n * DOM utility functions for PECB UI Components\r\n * @module utils/dom\r\n */\r\n\r\n/**\r\n * Check if code is running in a browser environment\r\n * @returns True if running in browser\r\n */\r\nexport function isBrowser(): boolean {\r\n return typeof window !== 'undefined' && typeof document !== 'undefined';\r\n}\r\n\r\n/**\r\n * Generate a unique ID for DOM elements\r\n * @param prefix - Optional prefix for the ID\r\n * @returns A unique ID string\r\n *\r\n * @example\r\n * generateUniqueId('btn') // 'btn-a1b2c3d4'\r\n */\r\nexport function generateUniqueId(prefix = 'pecb'): string {\r\n const random = Math.random().toString(36).substring(2, 9);\r\n return `${prefix}-${random}`;\r\n}\r\n\r\n/**\r\n * Check if an element matches a CSS selector\r\n * @param element - The element to check\r\n * @param selector - The CSS selector\r\n * @returns True if the element matches\r\n */\r\nexport function matchesSelector(element: Element, selector: string): boolean {\r\n return element.matches(selector);\r\n}\r\n\r\n/**\r\n * Find the closest ancestor matching a selector\r\n * @param element - Starting element\r\n * @param selector - CSS selector to match\r\n * @returns The matching ancestor or null\r\n */\r\nexport function closestElement<T extends Element>(element: Element, selector: string): T | null {\r\n return element.closest(selector) as T | null;\r\n}\r\n\r\n/**\r\n * Check if an element is visible in the viewport\r\n * @param element - The element to check\r\n * @param partial - Whether partial visibility counts\r\n * @returns True if visible\r\n */\r\nexport function isElementVisible(element: Element, partial = true): boolean {\r\n if (!isBrowser()) return false;\r\n\r\n const rect = element.getBoundingClientRect();\r\n const windowHeight = window.innerHeight || document.documentElement.clientHeight;\r\n const windowWidth = window.innerWidth || document.documentElement.clientWidth;\r\n\r\n if (partial) {\r\n return (\r\n rect.top < windowHeight &&\r\n rect.bottom > 0 &&\r\n rect.left < windowWidth &&\r\n rect.right > 0\r\n );\r\n }\r\n\r\n return (\r\n rect.top >= 0 &&\r\n rect.left >= 0 &&\r\n rect.bottom <= windowHeight &&\r\n rect.right <= windowWidth\r\n );\r\n}\r\n\r\n/**\r\n * Get all focusable elements within a container\r\n * @param container - The container element\r\n * @returns Array of focusable elements\r\n */\r\nexport function getFocusableElements(container: Element): HTMLElement[] {\r\n const focusableSelectors = [\r\n 'a[href]',\r\n 'area[href]',\r\n 'button:not([disabled])',\r\n 'input:not([disabled]):not([type=\"hidden\"])',\r\n 'select:not([disabled])',\r\n 'textarea:not([disabled])',\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n '[contenteditable=\"true\"]'\r\n ].join(',');\r\n\r\n return Array.from(container.querySelectorAll<HTMLElement>(focusableSelectors));\r\n}\r\n\r\n/**\r\n * Trap focus within a container (useful for modals)\r\n * @param container - The container to trap focus in\r\n * @returns Cleanup function to remove the trap\r\n */\r\nexport function trapFocus(container: HTMLElement): () => void {\r\n const focusableElements = getFocusableElements(container);\r\n const firstElement = focusableElements[0];\r\n const lastElement = focusableElements[focusableElements.length - 1];\r\n\r\n const handleKeyDown = (event: KeyboardEvent): void => {\r\n if (event.key !== 'Tab') return;\r\n\r\n if (event.shiftKey) {\r\n if (document.activeElement === firstElement) {\r\n event.preventDefault();\r\n lastElement?.focus();\r\n }\r\n } else {\r\n if (document.activeElement === lastElement) {\r\n event.preventDefault();\r\n firstElement?.focus();\r\n }\r\n }\r\n };\r\n\r\n container.addEventListener('keydown', handleKeyDown);\r\n firstElement?.focus();\r\n\r\n return () => {\r\n container.removeEventListener('keydown', handleKeyDown);\r\n };\r\n}\r\n\r\n/**\r\n * Scroll an element into view smoothly\r\n * @param element - The element to scroll to\r\n * @param options - Scroll options\r\n */\r\nexport function scrollIntoView(\r\n element: Element,\r\n options: ScrollIntoViewOptions = { behavior: 'smooth', block: 'nearest' }\r\n): void {\r\n element.scrollIntoView(options);\r\n}\r\n\r\n/**\r\n * Get the scroll parent of an element\r\n * @param element - The element to find scroll parent for\r\n * @returns The scroll parent element\r\n */\r\nexport function getScrollParent(element: Element): Element | null {\r\n if (!isBrowser()) return null;\r\n\r\n let parent: Element | null = element.parentElement;\r\n\r\n while (parent) {\r\n const style = getComputedStyle(parent);\r\n const overflow = style.overflow + style.overflowY + style.overflowX;\r\n\r\n if (/auto|scroll|overlay/.test(overflow)) {\r\n return parent;\r\n }\r\n\r\n parent = parent.parentElement;\r\n }\r\n\r\n return document.scrollingElement || document.documentElement;\r\n}\r\n\r\n/**\r\n * Disable body scroll (useful for modals)\r\n * @returns Cleanup function to re-enable scroll\r\n */\r\nexport function disableBodyScroll(): () => void {\r\n if (!isBrowser()) return () => {};\r\n\r\n const scrollY = window.scrollY;\r\n const body = document.body;\r\n const originalStyles = {\r\n position: body.style.position,\r\n top: body.style.top,\r\n width: body.style.width,\r\n overflow: body.style.overflow\r\n };\r\n\r\n body.style.position = 'fixed';\r\n body.style.top = `-${scrollY}px`;\r\n body.style.width = '100%';\r\n body.style.overflow = 'hidden';\r\n\r\n return () => {\r\n body.style.position = originalStyles.position;\r\n body.style.top = originalStyles.top;\r\n body.style.width = originalStyles.width;\r\n body.style.overflow = originalStyles.overflow;\r\n window.scrollTo(0, scrollY);\r\n };\r\n}\r\n\r\n/**\r\n * Copy text to clipboard\r\n * @param text - The text to copy\r\n * @returns Promise that resolves when copied\r\n */\r\nexport async function copyToClipboard(text: string): Promise<void> {\r\n if (!isBrowser()) {\r\n throw new Error('Clipboard API not available in this environment');\r\n }\r\n\r\n if (navigator.clipboard && navigator.clipboard.writeText) {\r\n await navigator.clipboard.writeText(text);\r\n } else {\r\n // Fallback for older browsers\r\n const textArea = document.createElement('textarea');\r\n textArea.value = text;\r\n textArea.style.position = 'fixed';\r\n textArea.style.left = '-9999px';\r\n textArea.style.top = '-9999px';\r\n document.body.appendChild(textArea);\r\n textArea.focus();\r\n textArea.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(textArea);\r\n }\r\n}\r\n\r\n/**\r\n * Check if an element has a specific CSS class\r\n * @param element - The element to check\r\n * @param className - The class name\r\n * @returns True if the element has the class\r\n */\r\nexport function hasClass(element: Element, className: string): boolean {\r\n return element.classList.contains(className);\r\n}\r\n\r\n/**\r\n * Add CSS class(es) to an element\r\n * @param element - The element to modify\r\n * @param classNames - Class name(s) to add\r\n */\r\nexport function addClass(element: Element, ...classNames: string[]): void {\r\n element.classList.add(...classNames);\r\n}\r\n\r\n/**\r\n * Remove CSS class(es) from an element\r\n * @param element - The element to modify\r\n * @param classNames - Class name(s) to remove\r\n */\r\nexport function removeClass(element: Element, ...classNames: string[]): void {\r\n element.classList.remove(...classNames);\r\n}\r\n\r\n/**\r\n * Toggle a CSS class on an element\r\n * @param element - The element to modify\r\n * @param className - The class name to toggle\r\n * @param force - Optional force add (true) or remove (false)\r\n * @returns True if the class is now present\r\n */\r\nexport function toggleClass(element: Element, className: string, force?: boolean): boolean {\r\n return element.classList.toggle(className, force);\r\n}\r\n\r\n/**\r\n * Get computed CSS property value\r\n * @param element - The element to check\r\n * @param property - CSS property name\r\n * @returns The computed value\r\n */\r\nexport function getComputedStyleValue(element: Element, property: string): string {\r\n if (!isBrowser()) return '';\r\n return getComputedStyle(element).getPropertyValue(property);\r\n}\r\n","import { Component, Input, Output, EventEmitter, HostBinding } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\r\n\r\nexport type ButtonVariant =\r\n | 'primary'\r\n | 'primary-outline'\r\n | 'primary-2'\r\n | 'primary-2-outline'\r\n | 'neutral'\r\n | 'neutral-outline'\r\n | 'secondary'\r\n | 'text'\r\n | 'destructive'\r\n | 'destructive-outline';\r\nexport type ButtonSize = 'sm' | 'md' | 'lg';\r\nexport type ButtonIconStyle = 'none' | 'leading' | 'trailing' | 'icon-only';\r\n\r\n/**\r\n * A professional button component with multiple variants and sizes.\r\n * Fully accessible with WCAG 2.1 AA compliance.\r\n *\r\n * @example\r\n * ```html\r\n * <pecb-button variant=\"primary\" size=\"md\" (clicked)=\"handleClick()\">\r\n * Click me\r\n * </pecb-button>\r\n *\r\n * <!-- With leading icon -->\r\n * <pecb-button variant=\"primary\" iconStyle=\"leading\" icon=\"+\">\r\n * Add Item\r\n * </pecb-button>\r\n *\r\n * <!-- Icon only button -->\r\n * <pecb-button variant=\"secondary\" iconStyle=\"icon-only\" icon=\"+\" ariaLabel=\"Add item\"></pecb-button>\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Component({\r\n selector: 'pecb-button',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.scss']\r\n})\r\nexport class ButtonComponent {\r\n /**\r\n * Unique ID for the button element\r\n */\r\n @Input() id: string = generateUniqueId('btn');\r\n\r\n /**\r\n * The visual style variant of the button\r\n */\r\n @Input() variant: ButtonVariant = 'primary';\r\n\r\n /**\r\n * The size of the button\r\n */\r\n @Input() size: ButtonSize = 'md';\r\n\r\n /**\r\n * Icon placement style\r\n */\r\n @Input() iconStyle: ButtonIconStyle = 'none';\r\n\r\n /**\r\n * Icon to display (used with iconStyle)\r\n */\r\n @Input() icon?: string;\r\n\r\n /**\r\n * Whether the button is disabled\r\n */\r\n @Input() disabled = false;\r\n\r\n /**\r\n * Whether the button should take full width\r\n */\r\n @Input() fullWidth = false;\r\n\r\n /**\r\n * Whether the button is in loading state\r\n */\r\n @Input() loading = false;\r\n\r\n /**\r\n * Button type attribute\r\n */\r\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\r\n\r\n // --- ARIA Accessibility Properties ---\r\n\r\n /**\r\n * Accessible label for the button (required for icon-only buttons)\r\n */\r\n @Input() ariaLabel?: string;\r\n\r\n /**\r\n * ID of element that labels this button\r\n */\r\n @Input() ariaLabelledBy?: string;\r\n\r\n /**\r\n * ID of element that describes this button\r\n */\r\n @Input() ariaDescribedBy?: string;\r\n\r\n /**\r\n * Indicates the button controls an expandable element\r\n */\r\n @Input() ariaExpanded?: boolean;\r\n\r\n /**\r\n * Indicates the pressed state for toggle buttons\r\n */\r\n @Input() ariaPressed?: boolean;\r\n\r\n /**\r\n * Indicates the button opens a popup (menu, listbox, dialog, etc.)\r\n */\r\n @Input() ariaHasPopup?: boolean | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog';\r\n\r\n /**\r\n * ID of the element controlled by this button\r\n */\r\n @Input() ariaControls?: string;\r\n\r\n /**\r\n * Event emitted when the button is clicked\r\n */\r\n @Output() clicked = new EventEmitter<MouseEvent>();\r\n\r\n /**\r\n * Host binding for the component's ID\r\n */\r\n @HostBinding('attr.id') get hostId(): null {\r\n return null; // ID is on the button element, not the host\r\n }\r\n\r\n /**\r\n * Get CSS classes for the button\r\n */\r\n get buttonClasses(): string[] {\r\n return [\r\n 'pecb-button',\r\n `pecb-button--${this.variant}`,\r\n `pecb-button--${this.size}`,\r\n this.iconStyle !== 'none' ? `pecb-button--icon-${this.iconStyle}` : '',\r\n this.fullWidth ? 'pecb-button--full-width' : '',\r\n this.loading ? 'pecb-button--loading' : ''\r\n ].filter(Boolean);\r\n }\r\n\r\n /**\r\n * Check if we should show leading icon\r\n */\r\n get showLeadingIcon(): boolean {\r\n return this.iconStyle === 'leading' && !!this.icon && !this.loading;\r\n }\r\n\r\n /**\r\n * Check if we should show trailing icon\r\n */\r\n get showTrailingIcon(): boolean {\r\n return this.iconStyle === 'trailing' && !!this.icon && !this.loading;\r\n }\r\n\r\n /**\r\n * Check if this is icon-only button\r\n */\r\n get isIconOnly(): boolean {\r\n return this.iconStyle === 'icon-only';\r\n }\r\n\r\n /**\r\n * Get the loading announcement text for screen readers\r\n */\r\n get loadingText(): string {\r\n return 'Loading, please wait';\r\n }\r\n\r\n /**\r\n * Handle button click\r\n */\r\n onClick(event: MouseEvent): void {\r\n if (!this.disabled && !this.loading) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Handle keyboard events for accessibility\r\n */\r\n onKeyDown(event: KeyboardEvent): void {\r\n // Allow Enter and Space to trigger click\r\n if ((event.key === 'Enter' || event.key === ' ') && !this.disabled && !this.loading) {\r\n event.preventDefault();\r\n this.clicked.emit(event as unknown as MouseEvent);\r\n }\r\n }\r\n}\r\n","<button\r\n [id]=\"id\"\r\n [type]=\"type\"\r\n [disabled]=\"disabled || loading\"\r\n [class]=\"buttonClasses.join(' ')\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-describedby]=\"ariaDescribedBy\"\r\n [attr.aria-expanded]=\"ariaExpanded !== undefined ? ariaExpanded : null\"\r\n [attr.aria-pressed]=\"ariaPressed !== undefined ? ariaPressed : null\"\r\n [attr.aria-haspopup]=\"ariaHasPopup\"\r\n [attr.aria-controls]=\"ariaControls\"\r\n [attr.aria-busy]=\"loading ? true : null\"\r\n [attr.aria-disabled]=\"disabled ? true : null\"\r\n (click)=\"onClick($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n>\r\n <span class=\"pecb-button__content\">\r\n <!-- Loading spinner with screen reader announcement -->\r\n <span *ngIf=\"loading\" class=\"pecb-button__spinner\" aria-hidden=\"true\"></span>\r\n <span *ngIf=\"loading\" class=\"pecb-button__sr-only\">{{ loadingText }}</span>\r\n\r\n <!-- Leading icon -->\r\n <span\r\n *ngIf=\"showLeadingIcon\"\r\n class=\"pecb-button__icon pecb-button__icon--leading\"\r\n aria-hidden=\"true\"\r\n >\r\n {{ icon }}\r\n </span>\r\n\r\n <!-- Icon only -->\r\n <span\r\n *ngIf=\"isIconOnly && icon && !loading\"\r\n class=\"pecb-button__icon\"\r\n aria-hidden=\"true\"\r\n >\r\n {{ icon }}\r\n </span>\r\n\r\n <!-- Button text content (hidden for icon-only) -->\r\n <span *ngIf=\"!isIconOnly\" class=\"pecb-button__text\">\r\n <ng-content></ng-content>\r\n </span>\r\n\r\n <!-- Trailing icon -->\r\n <span\r\n *ngIf=\"showTrailingIcon\"\r\n class=\"pecb-button__icon pecb-button__icon--trailing\"\r\n aria-hidden=\"true\"\r\n >\r\n {{ icon }}\r\n </span>\r\n </span>\r\n</button>\r\n","import { Component, Input } from '@angular/core';\r\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\r\n\r\nexport type CardElevation = 'none' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n * Semantic role for the card component\r\n */\r\nexport type CardRole = 'article' | 'region' | 'group' | 'listitem' | 'none';\r\n\r\n/**\r\n * A professional card component for displaying content in a contained format.\r\n * Fully accessible with WCAG 2.1 AA compliance.\r\n *\r\n * @example\r\n * ```html\r\n * <!-- Basic card -->\r\n * <pecb-card elevation=\"md\">\r\n * <pecb-card-header>\r\n * <h3>Card Title</h3>\r\n * </pecb-card-header>\r\n * <pecb-card-body>\r\n * <p>Card content goes here</p>\r\n * </pecb-card-body>\r\n * </pecb-card>\r\n *\r\n * <!-- Accessible card with region role -->\r\n * <pecb-card role=\"region\" ariaLabel=\"Product Information\">\r\n * <pecb-card-body>\r\n * <p>Product details...</p>\r\n * </pecb-card-body>\r\n * </pecb-card>\r\n *\r\n * <!-- Card as article -->\r\n * <pecb-card role=\"article\" ariaLabelledBy=\"article-title\">\r\n * <pecb-card-header>\r\n * <h2 id=\"article-title\">Article Headline</h2>\r\n * </pecb-card-header>\r\n * <pecb-card-body>\r\n * <p>Article content...</p>\r\n * </pecb-card-body>\r\n * </pecb-card>\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Component({\r\n selector: 'pecb-card',\r\n standalone: true,\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.scss']\r\n})\r\nexport class CardComponent {\r\n /**\r\n * Unique ID for the card element\r\n */\r\n @Input() id: string = generateUniqueId('card');\r\n\r\n /**\r\n * The elevation level (shadow depth) of the card\r\n */\r\n @Input() elevation: CardElevation = 'md';\r\n\r\n /**\r\n * Whether the card should be hoverable with elevation change\r\n */\r\n @Input() hoverable = false;\r\n\r\n /**\r\n * Whether to add padding to the card\r\n */\r\n @Input() noPadding = false;\r\n\r\n // --- ARIA Accessibility Properties ---\r\n\r\n /**\r\n * Semantic role for the card (article, region, group, listitem, or none)\r\n * Use 'article' for self-contained content, 'region' for significant sections\r\n */\r\n @Input() role: CardRole = 'none';\r\n\r\n /**\r\n * Accessible label for the card\r\n */\r\n @Input() ariaLabel?: string;\r\n\r\n /**\r\n * ID of element that labels this card\r\n */\r\n @Input() ariaLabelledBy?: string;\r\n\r\n /**\r\n * ID of element that describes this card\r\n */\r\n @Input() ariaDescribedBy?: string;\r\n\r\n /**\r\n * Get CSS classes for the card\r\n */\r\n get cardClasses(): string[] {\r\n return [\r\n 'pecb-card',\r\n `pecb-card--elevation-${this.elevation}`,\r\n this.hoverable ? 'pecb-card--hoverable' : '',\r\n this.noPadding ? 'pecb-card--no-padding' : ''\r\n ].filter(Boolean);\r\n }\r\n\r\n /**\r\n * Get the role attribute value\r\n */\r\n get roleAttribute(): string | null {\r\n return this.role !== 'none' ? this.role : null;\r\n }\r\n}\r\n\r\n/**\r\n * Card header component for displaying title and actions.\r\n *\r\n * @example\r\n * ```html\r\n * <pecb-card-header>\r\n * <h3>Card Title</h3>\r\n * </pecb-card-header>\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Component({\r\n selector: 'pecb-card-header',\r\n standalone: true,\r\n template: `\r\n <div class=\"pecb-card__header\" role=\"heading\" [attr.aria-level]=\"headingLevel\">\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n styleUrls: ['./card.component.scss']\r\n})\r\nexport class CardHeaderComponent {\r\n /**\r\n * Heading level for accessibility (1-6)\r\n * Only used if the header content doesn't contain a heading element\r\n */\r\n @Input() headingLevel: number | null = null;\r\n}\r\n\r\n/**\r\n * Card body component for main content.\r\n *\r\n * @example\r\n * ```html\r\n * <pecb-card-body>\r\n * <p>Card content goes here</p>\r\n * </pecb-card-body>\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Component({\r\n selector: 'pecb-card-body',\r\n standalone: true,\r\n template: '<div class=\"pecb-card__body\"><ng-content></ng-content></div>',\r\n styleUrls: ['./card.component.scss']\r\n})\r\nexport class CardBodyComponent {}\r\n\r\n/**\r\n * Card footer component for actions and additional information.\r\n *\r\n * @example\r\n * ```html\r\n * <pecb-card-footer>\r\n * <button>Action</button>\r\n * </pecb-card-footer>\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Component({\r\n selector: 'pecb-card-footer',\r\n standalone: true,\r\n template: '<div class=\"pecb-card__footer\"><ng-content></ng-content></div>',\r\n styleUrls: ['./card.component.scss']\r\n})\r\nexport class CardFooterComponent {}\r\n","<div\r\n [id]=\"id\"\r\n [class]=\"cardClasses.join(' ')\"\r\n [attr.role]=\"roleAttribute\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-describedby]=\"ariaDescribedBy\"\r\n>\r\n <ng-content></ng-content>\r\n</div>\r\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport type StatusType = 'warning' | 'action' | 'success' | 'error' | 'different' | 'disabled' | 'neutral';\r\nexport type StatusVariant = 'accent' | 'filled' | 'outline' | 'custom';\r\nexport type StatusSize = 'sm' | 'md' | 'lg';\r\n\r\n@Component({\r\n selector: 'pecb-status',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './status.component.html',\r\n styleUrls: ['./status.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class StatusComponent {\r\n private _id = `status-${Math.random().toString(36).substring(2, 9)}`;\r\n\r\n @Input() type: StatusType = 'neutral';\r\n @Input() variant: StatusVariant = 'filled';\r\n @Input() size: StatusSize = 'md';\r\n @Input() ariaLabel?: string;\r\n\r\n /** Text content to display (alternative to ng-content, useful for dynamic components) */\r\n @Input() text?: string;\r\n\r\n /** Custom CSS class(es) to add to the status element */\r\n @Input() customClass?: string;\r\n\r\n get id(): string {\r\n return this._id;\r\n }\r\n\r\n get statusClasses(): string[] {\r\n const classes = [\r\n 'pecb-status',\r\n `pecb-status--${this.size}`\r\n ];\r\n\r\n // Only add type and variant classes if not using custom variant\r\n if (this.variant !== 'custom') {\r\n classes.push(`pecb-status--${this.type}`);\r\n classes.push(`pecb-status--${this.variant}`);\r\n }\r\n\r\n // Add custom class if provided\r\n if (this.customClass) {\r\n classes.push(...this.customClass.split(' ').filter(c => c.trim()));\r\n }\r\n\r\n return classes;\r\n }\r\n}\r\n","<span\r\n [id]=\"id\"\r\n [ngClass]=\"statusClasses\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n role=\"status\"\r\n>\r\n <ng-content></ng-content>{{ text }}\r\n</span>\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n OnChanges,\r\n SimpleChanges,\r\n HostListener,\r\n ElementRef\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport type PaginationSize = 'sm' | 'md' | 'lg';\r\nexport type PaginationVariant = 'full' | 'compact' | 'minimal' | 'centered';\r\n\r\nexport interface PageChangeEvent {\r\n page: number;\r\n pageSize: number;\r\n startIndex: number;\r\n endIndex: number;\r\n}\r\n\r\n@Component({\r\n selector: 'pecb-pagination',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './pagination.component.html',\r\n styleUrls: ['./pagination.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PaginationComponent implements OnChanges {\r\n @Input() totalItems = 0;\r\n @Input() pageSize = 10;\r\n @Input() currentPage = 1;\r\n @Input() pageSizeOptions: number[] = [10, 25, 50, 75];\r\n @Input() size: PaginationSize = 'md';\r\n @Input() variant: PaginationVariant = 'full';\r\n @Input() showPageSizeSelector = true;\r\n @Input() showItemsInfo = true;\r\n @Input() maxVisiblePages = 3;\r\n @Input() disabled = false;\r\n\r\n @Input('aria-label') ariaLabel = 'Pagination';\r\n\r\n @Output() pageChange = new EventEmitter<PageChangeEvent>();\r\n @Output() pageSizeChange = new EventEmitter<number>();\r\n\r\n totalPages = 0;\r\n visiblePages: (number | string)[] = [];\r\n isDropdownOpen = false;\r\n\r\n constructor(private elementRef: ElementRef) {}\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent): void {\r\n if (this.isDropdownOpen && !this.elementRef.nativeElement.contains(event.target)) {\r\n this.isDropdownOpen = false;\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['totalItems'] || changes['pageSize'] || changes['currentPage']) {\r\n this.calculateTotalPages();\r\n this.updateVisiblePages();\r\n }\r\n }\r\n\r\n get containerClasses(): string[] {\r\n return [\r\n 'pecb-pagination',\r\n `pecb-pagination--${this.size}`,\r\n `pecb-pagination--${this.variant}`,\r\n this.disabled ? 'pecb-pagination--disabled' : ''\r\n ].filter(Boolean);\r\n }\r\n\r\n get showPages(): boolean {\r\n return this.variant === 'full' || this.variant === 'compact';\r\n }\r\n\r\n get showPageSize(): boolean {\r\n return this.variant === 'full' && this.showPageSizeSelector;\r\n }\r\n\r\n get itemsInfoText(): string {\r\n if (this.variant === 'minimal' || this.variant === 'centered') {\r\n return `Showing ${this.startIndex}-${this.endIndex} of ${this.totalItems}`;\r\n }\r\n return `${this.startIndex}-${this.endIndex} of ${this.totalItems} items`;\r\n }\r\n\r\n get startIndex(): number {\r\n if (this.totalItems === 0) return 0;\r\n return (this.currentPage - 1) * this.pageSize + 1;\r\n }\r\n\r\n get endIndex(): number {\r\n return Math.min(this.currentPage * this.pageSize, this.totalItems);\r\n }\r\n\r\n get canGoPrevious(): boolean {\r\n return this.currentPage > 1 && !this.disabled;\r\n }\r\n\r\n get canGoNext(): boolean {\r\n return this.currentPage < this.totalPages && !this.disabled;\r\n }\r\n\r\n private calculateTotalPages(): void {\r\n this.totalPages = Math.ceil(this.totalItems / this.pageSize);\r\n if (this.currentPage > this.totalPages && this.totalPages > 0) {\r\n this.goToPage(this.totalPages);\r\n }\r\n }\r\n\r\n private updateVisiblePages(): void {\r\n const pages: (number | string)[] = [];\r\n\r\n if (this.totalPages <= this.maxVisiblePages + 2) {\r\n for (let i = 1; i <= this.totalPages; i++) {\r\n pages.push(i);\r\n }\r\n } else {\r\n pages.push(1);\r\n\r\n if (this.currentPage <= this.maxVisiblePages) {\r\n for (let i = 2; i <= this.maxVisiblePages + 1; i++) {\r\n pages.push(i);\r\n }\r\n pages.push('...');\r\n pages.push(this.totalPages);\r\n } else if (this.currentPage >= this.totalPages - this.maxVisiblePages + 1) {\r\n pages.push('...');\r\n for (let i = this.totalPages - this.maxVisiblePages; i <= this.totalPages; i++) {\r\n pages.push(i);\r\n }\r\n } else {\r\n pages.push('...');\r\n for (let i = this.currentPage - 1; i <= this.currentPage + 1; i++) {\r\n pages.push(i);\r\n }\r\n pages.push('...');\r\n pages.push(this.totalPages);\r\n }\r\n }\r\n\r\n this.visiblePages = pages;\r\n }\r\n\r\n goToPage(page: number): void {\r\n if (this.disabled || page < 1 || page > this.totalPages || page === this.currentPage) {\r\n return;\r\n }\r\n\r\n this.currentPage = page;\r\n this.updateVisiblePages();\r\n this.emitPageChange();\r\n }\r\n\r\n goToPrevious(): void {\r\n if (this.canGoPrevious) {\r\n this.goToPage(this.currentPage - 1);\r\n }\r\n }\r\n\r\n goToNext(): void {\r\n if (this.canGoNext) {\r\n this.goToPage(this.currentPage + 1);\r\n }\r\n }\r\n\r\n onPageSizeChange(newSize: number): void {\r\n if (this.disabled) return;\r\n\r\n this.pageSize = newSize;\r\n this.currentPage = 1;\r\n this.calculateTotalPages();\r\n this.updateVisiblePages();\r\n this.isDropdownOpen = false;\r\n this.pageSizeChange.emit(newSize);\r\n this.emitPageChange();\r\n }\r\n\r\n toggleDropdown(): void {\r\n if (!this.disabled) {\r\n this.isDropdownOpen = !this.isDropdownOpen;\r\n }\r\n }\r\n\r\n closeDropdown(): void {\r\n this.isDropdownOpen = false;\r\n }\r\n\r\n private emitPageChange(): void {\r\n this.pageChange.emit({\r\n page: this.currentPage,\r\n pageSize: this.pageSize,\r\n startIndex: this.startIndex,\r\n endIndex: this.endIndex\r\n });\r\n }\r\n\r\n isNumber(value: number | string): boolean {\r\n return typeof value === 'number';\r\n }\r\n\r\n trackByPage(index: number, page: number | string): number | string {\r\n return typeof page === 'number' ? page : `ellipsis-${index}`;\r\n }\r\n}","<nav\r\n [class]=\"containerClasses.join(' ')\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n role=\"navigation\"\r\n>\r\n <!-- V4: Centered variant - prev button on left -->\r\n <button\r\n *ngIf=\"variant === 'centered'\"\r\n type=\"button\"\r\n class=\"pecb-pagination__nav-button pecb-pagination__nav-button--prev pecb-pagination__nav-button--bordered\"\r\n [disabled]=\"!canGoPrevious\"\r\n [attr.aria-label]=\"'Go to previous page'\"\r\n (click)=\"goToPrevious()\"\r\n >\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M10 12L6 8L10 4\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n\r\n <!-- Info section (V1, V2, V3, V4) -->\r\n <div class=\"pecb-pagination__info\" *ngIf=\"showItemsInfo || showPageSize\">\r\n <span *ngIf=\"showItemsInfo\" class=\"pecb-pagination__items-text\">\r\n {{ itemsInfoText }}\r\n </span>\r\n\r\n <!-- Page size dropdown (V1 only) -->\r\n <div *ngIf=\"showPageSize\" class=\"pecb-pagination__page-size\">\r\n <span class=\"pecb-pagination__page-size-label\">Items per page:</span>\r\n <div class=\"pecb-pagination__dropdown\">\r\n <button\r\n type=\"button\"\r\n class=\"pecb-pagination__dropdown-trigger\"\r\n [class.pecb-pagination__dropdown-trigger--open]=\"isDropdownOpen\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-expanded]=\"isDropdownOpen\"\r\n aria-haspopup=\"listbox\"\r\n (click)=\"toggleDropdown()\"\r\n >\r\n <span>{{ pageSize }}</span>\r\n <svg\r\n class=\"pecb-pagination__dropdown-icon\"\r\n [class.pecb-pagination__dropdown-icon--open]=\"isDropdownOpen\"\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M4 6L8 10L12 6\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n <ul\r\n *ngIf=\"isDropdownOpen\"\r\n class=\"pecb-pagination__dropdown-menu\"\r\n role=\"listbox\"\r\n [attr.aria-label]=\"'Select items per page'\"\r\n >\r\n <li\r\n *ngFor=\"let option of pageSizeOptions\"\r\n class=\"pecb-pagination__dropdown-item\"\r\n [class.pecb-pagination__dropdown-item--selected]=\"option === pageSize\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"option === pageSize\"\r\n (click)=\"onPageSizeChange(option)\"\r\n >\r\n {{ option }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Controls section -->\r\n <div class=\"pecb-pagination__controls\">\r\n <!-- Previous button (V1, V2, V3) -->\r\n <button\r\n *ngIf=\"variant !== 'centered'\"\r\n type=\"button\"\r\n class=\"pecb-pagination__nav-button pecb-pagination__nav-button--prev\"\r\n [class.pecb-pagination__nav-button--bordered]=\"variant === 'minimal'\"\r\n [disabled]=\"!canGoPrevious\"\r\n [attr.aria-label]=\"'Go to previous page'\"\r\n (click)=\"goToPrevious()\"\r\n >\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M10 12L6 8L10 4\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n\r\n <!-- Page numbers (V1, V2) -->\r\n <div *ngIf=\"showPages\" class=\"pecb-pagination__pages\" role=\"group\" aria-label=\"Page navigation\">\r\n <ng-container *ngFor=\"let page of visiblePages; trackBy: trackByPage\">\r\n <button\r\n *ngIf=\"isNumber(page)\"\r\n type=\"button\"\r\n class=\"pecb-pagination__page-button\"\r\n [class.pecb-pagination__page-button--active]=\"page === currentPage\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"'Page ' + page\"\r\n [attr.aria-current]=\"page === currentPage ? 'page' : null\"\r\n (click)=\"goToPage(+page)\"\r\n >\r\n {{ page }}\r\n </button>\r\n <span\r\n *ngIf=\"!isNumber(page)\"\r\n class=\"pecb-pagination__ellipsis\"\r\n aria-hidden=\"true\"\r\n >\r\n {{ page }}\r\n </span>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- Next button (V1, V2, V3) -->\r\n <button\r\n *ngIf=\"variant !== 'centered'\"\r\n type=\"button\"\r\n class=\"pecb-pagination__nav-button pecb-pagination__nav-button--next\"\r\n [class.pecb-pagination__nav-button--bordered]=\"variant === 'minimal'\"\r\n [disabled]=\"!canGoNext\"\r\n [attr.aria-label]=\"'Go to next page'\"\r\n (click)=\"goToNext()\"\r\n >\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M6 4L10 8L6 12\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- V4: Centered variant - next button on right -->\r\n <button\r\n *ngIf=\"variant === 'centered'\"\r\n type=\"button\"\r\n class=\"pecb-pagination__nav-button pecb-pagination__nav-button--next pecb-pagination__nav-button--bordered\"\r\n [disabled]=\"!canGoNext\"\r\n [attr.aria-label]=\"'Go to next page'\"\r\n (click)=\"goToNext()\"\r\n >\r\n <svg\r\n width=\"16\"\r\n height=\"16\"\r\n viewBox=\"0 0 16 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M6 4L10 8L6 12\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.5\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n</nav>\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n ContentChild,\r\n TemplateRef,\r\n Type,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { PageChangeEvent, PaginationComponent } from '../pagination/pagination.component';\r\nimport { StatusComponent } from '../status/status.component';\r\n\r\n/**\r\n * Defines the available table sizes\r\n */\r\nexport type TableSize = 'sm' | 'md' | 'lg';\r\n\r\n/**\r\n * Defines the available table variants\r\n */\r\nexport type TableVariant = 'default' | 'striped' | 'bordered';\r\n\r\n/**\r\n * Defines built-in column types\r\n */\r\nexport type PecbTableColumnType = 'text' | 'status' | 'action' | 'user' | 'custom';\r\n\r\n/**\r\n * Defines built-in component names for columns\r\n */\r\nexport type PecbTableColumnComponent = 'status' | 'action' | 'user';\r\n\r\n/**\r\n * Action button definition for action columns\r\n */\r\nexport interface TableAction {\r\n /** Unique identifier for the action */\r\n id: string;\r\n /** Icon name or type */\r\n icon: 'view' | 'edit' | 'delete' | 'download' | 'copy' | 'custom';\r\n /** Tooltip/title text */\r\n tooltip?: string;\r\n /** Custom icon SVG (when icon is 'custom') */\r\n customIcon?: string;\r\n /** Whether the action is disabled */\r\n disabled?: boolean;\r\n /** Variant for styling (e.g., 'danger' for delete) */\r\n variant?: 'default' | 'danger';\r\n /** Click handler for this specific action */\r\n action?: (row: any, index: number) => void;\r\n}\r\n\r\n/**\r\n * Status mapping configuration\r\n */\r\nexport interface TableStatusConfig {\r\n /** Map of value to status type */\r\n typeMap?: Record<string, string>;\r\n /** Status variant */\r\n variant?: 'accent' | 'filled' | 'outline';\r\n /** Status size */\r\n size?: 'sm' | 'md' | 'lg';\r\n}\r\n\r\n/**\r\n * User cell configuration\r\n */\r\nexport interface TableUserConfig {\r\n /** Key for the avatar/image URL */\r\n avatarKey?: string;\r\n /** Key for the name */\r\n nameKey?: string;\r\n /** Key for the secondary text (e.g., email) */\r\n secondaryKey?: string;\r\n}\r\n\r\n/**\r\n * Column definition for the table\r\n */\r\nexport interface PecbTableColumn {\r\n /** Unique key for the column, used to access data */\r\n key: string;\r\n /** Display label for the column header */\r\n label: string;\r\n /** Width of the column (e.g., '200px', '20%', 'auto') */\r\n width?: string;\r\n /** Alignment of the column content */\r\n align?: 'left' | 'center' | 'right';\r\n /** Whether the column is sortable */\r\n sortable?: boolean;\r\n /** Custom template reference for cell content */\r\n cellTemplate?: TemplateRef<any>;\r\n /** Custom template reference for header content */\r\n headerTemplate?: TemplateRef<any>;\r\n /** CSS class to apply to the column */\r\n cssClass?: string;\r\n /** Built-in column type (deprecated, use 'component' instead) */\r\n type?: PecbTableColumnType;\r\n /** Built-in component to render: 'status', 'action', 'user' */\r\n component?: PecbTableColumnComponent;\r\n /** Dynamic component class to render in the cell (e.g., StatusComponent) */\r\n dynamicComponent?: Type<any>;\r\n /** Inputs to pass to the dynamic component */\r\n componentInputs?: Record<string, any>;\r\n /** Function to generate dynamic inputs based on row data */\r\n componentInputsFn?: (row: any, value: any, index: number) => Record<string, any>;\r\n /** Action buttons configuration (when component is 'action') */\r\n actions?: TableAction[];\r\n /** Status configuration (when component is 'status') */\r\n statusConfig?: TableStatusConfig;\r\n /** User cell configuration (when component is 'user') */\r\n userConfig?: TableUserConfig;\r\n}\r\n\r\n/**\r\n * Sort event emitted when a sortable column is clicked\r\n */\r\nexport interface TableSortEvent {\r\n /** Column key that was sorted */\r\n column: string;\r\n /** Sort direction */\r\n direction: 'asc' | 'desc' | null;\r\n}\r\n\r\n/**\r\n * Row action event emitted when an action button is clicked\r\n */\r\nexport interface TableRowActionEvent {\r\n /** Type of action performed */\r\n action: string;\r\n /** Row data for the action */\r\n row: any;\r\n /** Row index */\r\n index: number;\r\n}\r\n\r\n/**\r\n * Row selection event emitted when rows are selected/deselected\r\n */\r\nexport interface TableSelectionEvent {\r\n /** Selected rows data */\r\n selectedRows: any[];\r\n /** Selected row indices */\r\n selectedIndices: number[];\r\n}\r\n\r\n/**\r\n * Table component for displaying tabular data with pagination support.\r\n *\r\n * @example\r\n * ```html\r\n * <pecb-table\r\n * [columns]=\"columns\"\r\n * [data]=\"tableData\"\r\n * [showPagination]=\"true\"\r\n * [totalItems]=\"500\"\r\n * [pageSize]=\"15\"\r\n * (pageChange)=\"onPageChange($event)\"\r\n * (rowAction)=\"onRowAction($event)\">\r\n * </pecb-table>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'pecb-table',\r\n standalone: true,\r\n imports: [CommonModule, PaginationComponent, StatusComponent],\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TableComponent {\r\n constructor(private sanitizer: DomSanitizer) {}\r\n\r\n /**\r\n * Column definitions for the table\r\n */\r\n @Input() columns: PecbTableColumn[] = [];\r\n\r\n /**\r\n * Data array to display in the table\r\n */\r\n @Input() data: any[] = [];\r\n\r\n /**\r\n * Size variant of the table\r\n * @default 'md'\r\n */\r\n @Input() size: TableSize = 'md';\r\n\r\n /**\r\n * Visual variant of the table\r\n * @default 'default'\r\n */\r\n @Input() variant: TableVariant = 'default';\r\n\r\n /**\r\n * Whether to show the table header\r\n * @default true\r\n */\r\n @Input() showHeader = true;\r\n\r\n /**\r\n * Whether to enable row hover effect\r\n * @default true\r\n */\r\n @Input() hoverable = true;\r\n\r\n /**\r\n * Whether to show pagination\r\n * @default true\r\n */\r\n @Input() showPagination = true;\r\n\r\n /**\r\n * Total number of items for pagination\r\n */\r\n @Input() totalItems = 0;\r\n\r\n /**\r\n * Current page number (1-based)\r\n * @default 1\r\n */\r\n @Input() currentPage = 1;\r\n\r\n /**\r\n * Number of items per page\r\n * @default 15\r\n */\r\n @Input() pageSize = 15;\r\n\r\n /**\r\n * Available page size options\r\n */\r\n @Input() pageSizeOptions: number[] = [10, 15, 25, 50];\r\n\r\n /**\r\n * Whether to show page size selector in pagination\r\n * @default true\r\n */\r\n @Input() showPageSizeSelector = true;\r\n\r\n /**\r\n * Pagination variant\r\n * @default 'full'\r\n */\r\n @Input() paginationVariant: 'full' | 'compact' | 'minimal' | 'centered' = 'full';\r\n\r\n /**\r\n * Message to display when there is no data\r\n */\r\n @Input() emptyMessage = 'There are no entries yet.';\r\n\r\n /**\r\n * Whether to show loading state\r\n * @default false\r\n */\r\n @Input() loading = false;\r\n\r\n /**\r\n * Whether to enable row selection\r\n * @default false\r\n */\r\n @Input() selectable = false;\r\n\r\n /**\r\n * Currently selected row indices\r\n */\r\n @Input() selectedIndices: number[] = [];\r\n\r\n /**\r\n * Whether the table has a fixed header\r\n * @default false\r\n */\r\n @Input() stickyHeader = false;\r\n\r\n /**\r\n * Maximum height of the table body (enables scrolling)\r\n */\r\n @Input() maxHeight?: string;\r\n\r\n /**\r\n * Column key currently being sorted\r\n */\r\n @Input() sortColumn?: string;\r\n\r\n /**\r\n * Current sort direction\r\n */\r\n @Input() sortDirection: 'asc' | 'desc' | null = null;\r\n\r\n /**\r\n * ARIA label for the table\r\n */\r\n @Input('aria-label') ariaLabel = 'Data table';\r\n\r\n /**\r\n * Emitted when a page change occurs\r\n */\r\n @Output() pageChange = new EventEmitter<PageChangeEvent>();\r\n\r\n /**\r\n * Emitted when page size changes\r\n */\r\n @Output() pageSizeChange = new EventEmitter<number>();\r\n\r\n /**\r\n * Emitted when a row is clicked\r\n */\r\n @Output() rowClick = new EventEmitter<{ row: any; index: number }>();\r\n\r\n /**\r\n * Emitted when a row action is triggered\r\n */\r\n @Output() rowAction = new EventEmitter<TableRowActionEvent>();\r\n\r\n /**\r\n * Emitted when sorting changes\r\n */\r\n @Output() sortChange = new EventEmitter<TableSortEvent>();\r\n\r\n /**\r\n * Emitted when row selection changes\r\n */\r\n @Output() selectionChange = new EventEmitter<TableSelectionEvent>();\r\n\r\n /**\r\n * Custom template for empty state\r\n */\r\n @ContentChild('emptyTemplate') emptyTemplate?: TemplateRef<any>;\r\n\r\n /**\r\n * Custom template for loading state\r\n */\r\n @ContentChild('loadingTemplate') loadingTemplate?: TemplateRef<any>;\r\n\r\n /**\r\n * Gets the CSS classes for the table container\r\n */\r\n get containerClasses(): string {\r\n const classes = ['pecb-table-container'];\r\n\r\n if (this.stickyHeader) {\r\n classes.push('pecb-table-container--sticky');\r\n }\r\n\r\n return classes.join(' ');\r\n }\r\n\r\n /**\r\n * Gets the CSS classes for the pagination container\r\n */\r\n get paginationClasses(): string {\r\n const classes = ['pecb-table__pagination'];\r\n\r\n if (this.paginationVariant === 'full' || this.paginationVariant === 'compact') {\r\n classes.push('pecb-table__pagination--bordered');\r\n }\r\n\r\n return classes.join(' ');\r\n }\r\n\r\n /**\r\n * Gets the CSS classes for the table element\r\n */\r\n get tableClasses(): string {\r\n const classes = ['pecb-table', `pecb-table--${this.size}`, `pecb-table--${this.variant}`];\r\n\r\n if (this.hoverable) {\r\n classes.push('pecb-table--hoverable');\r\n }\r\n\r\n if (this.selectable) {\r\n classes.push('pecb-table--selectable');\r\n }\r\n\r\n return classes.join(' ');\r\n }\r\n\r\n /**\r\n * Gets the value from a row for a given column key\r\n * Supports nested keys like 'user.name'\r\n */\r\n getCellValue(row: any, key: string): any {\r\n if (!row || !key) return '';\r\n\r\n const keys = key.split('.');\r\n let value = row;\r\n\r\n for (const k of keys) {\r\n if (value === null || value === undefined) return '';\r\n value = value[k];\r\n }\r\n\r\n return value ?? '';\r\n }\r\n\r\n /**\r\n * Gets the alignment class for a column\r\n */\r\n getAlignmentClass(column: PecbTableColumn): string {\r\n if (!column.align || column.align === 'left') return '';\r\n return `pecb-table__cell--${column.align}`;\r\n }\r\n\r\n /**\r\n * Handles row click events\r\n */\r\n onRowClick(row: any, index: number): void {\r\n if (this.selectable) {\r\n this.toggleRowSelection(index);\r\n }\r\n this.rowClick.emit({ row, index });\r\n }\r\n\r\n /**\r\n * Handles row action button clicks\r\n */\r\n onRowAction(action: string, row: any, index: number, event: Event): void {\r\n event.stopPropagation();\r\n this.rowAction.emit({ action, row, index });\r\n }\r\n\r\n /**\r\n * Handles column header click for sorting\r\n */\r\n onHeaderClick(column: PecbTableColumn): void {\r\n if (!column.sortable) return;\r\n\r\n let newDirection: 'asc' | 'desc' | null = 'asc';\r\n\r\n if (this.sortColumn === column.key) {\r\n if (this.sortDirection === 'asc') {\r\n newDirection = 'desc';\r\n } else if (this.sortDirection === 'desc') {\r\n newDirection = null;\r\n }\r\n }\r\n\r\n this.sortColumn = newDirection ? column.key : undefined;\r\n this.sortDirection = newDirection;\r\n\r\n this.sortChange.emit({\r\n column: column.key,\r\n direction: newDirection,\r\n });\r\n }\r\n\r\n /**\r\n * Toggles row selection\r\n */\r\n toggleRowSelection(index: number): void {\r\n const newSelection = [...this.selectedIndices];\r\n const existingIndex = newSelection.indexOf(index);\r\n\r\n if (existingIndex > -1) {\r\n newSelection.splice(existingIndex, 1);\r\n } else {\r\n newSelection.push(index);\r\n }\r\n\r\n this.selectedIndices = newSelection;\r\n this.emitSelectionChange();\r\n }\r\n\r\n /**\r\n * Toggles all rows selection\r\n */\r\n toggleAllSelection(): void {\r\n if (this.isAllSelected()) {\r\n this.selectedIndices = [];\r\n } else {\r\n this.selectedIndices = this.data.map((_, index) => index);\r\n }\r\n this.emitSelectionChange();\r\n }\r\n\r\n /**\r\n * Checks if a row is selected\r\n */\r\n isRowSelected(index: number): boolean {\r\n return this.selectedIndices.includes(index);\r\n }\r\n\r\n /**\r\n * Checks if all rows are selected\r\n */\r\n isAllSelected(): boolean {\r\n return this.data.length > 0 && this.selectedIndices.length === this.data.length;\r\n }\r\n\r\n /**\r\n * Checks if some rows are selected (for indeterminate state)\r\n */\r\n isSomeSelected(): boolean {\r\n return this.selectedIndices.length > 0 && this.selectedIndices.length < this.data.length;\r\n }\r\n\r\n /**\r\n * Handles page change from pagination component\r\n */\r\n onPageChange(event: PageChangeEvent): void {\r\n this.currentPage = event.page;\r\n this.pageChange.emit(event);\r\n }\r\n\r\n /**\r\n * Handles page size change from pagination component\r\n */\r\n onPageSizeChange(newSize: number): void {\r\n this.pageSize = newSize;\r\n this.currentPage = 1;\r\n this.pageSizeChange.emit(newSize);\r\n }\r\n\r\n /**\r\n * Gets the sort icon state for a column\r\n */\r\n getSortState(column: PecbTableColumn): 'asc' | 'desc' | 'none' {\r\n if (!column.sortable) return 'none';\r\n if (this.sortColumn !== column.key) return 'none';\r\n return this.sortDirection || 'none';\r\n }\r\n\r\n /**\r\n * Tracks rows by index for ngFor performance\r\n */\r\n trackByIndex(index: number): number {\r\n return index;\r\n }\r\n\r\n /**\r\n * Tracks columns by key for ngFor performance\r\n */\r\n trackByKey(_: number, column: PecbTableColumn): string {\r\n return column.key;\r\n }\r\n\r\n /**\r\n * Gets the effective column type (supports both 'type' and 'component' properties)\r\n */\r\n getColumnType(column: PecbTableColumn): string {\r\n return column.component || column.type || 'text';\r\n }\r\n\r\n /**\r\n * Gets the status type for a value based on column config\r\n */\r\n getStatusType(value: any, column: PecbTableColumn): any {\r\n const config = column.statusConfig;\r\n if (config?.typeMap && value in config.typeMap) {\r\n return config.typeMap[value];\r\n }\r\n // Default mappings\r\n const defaultMap: Record<string, string> = {\r\n 'Pending': 'warning',\r\n 'pending': 'warning',\r\n 'Inactive': 'error',\r\n 'inactive': 'error',\r\n 'Approved': 'success',\r\n 'approved': 'success',\r\n 'Active': 'success',\r\n 'active': 'success',\r\n 'Disabled': 'disabled',\r\n 'disabled': 'disabled',\r\n };\r\n return defaultMap[value] || 'neutral';\r\n }\r\n\r\n /**\r\n * Gets the status variant for a column\r\n */\r\n getStatusVariant(column: PecbTableColumn): any {\r\n return column.statusConfig?.variant || 'filled';\r\n }\r\n\r\n /**\r\n * Gets the status size for a column\r\n */\r\n getStatusSize(column: PecbTableColumn): any {\r\n return column.statusConfig?.size || 'sm';\r\n }\r\n\r\n /**\r\n * Gets user display data from row\r\n */\r\n getUserData(row: any, column: PecbTableColumn): { avatar: string; name: string; secondary: string } {\r\n const config = column.userConfig || {};\r\n return {\r\n avatar: row[config.avatarKey || 'avatar'] || '',\r\n name: row[config.nameKey || column.key] || '',\r\n secondary: row[config.secondaryKey || 'email'] || '',\r\n };\r\n }\r\n\r\n /**\r\n * Gets default actions if none specified\r\n */\r\n getActions(column: PecbTableColumn): TableAction[] {\r\n if (column.actions && column.actions.length > 0) {\r\n return column.actions;\r\n }\r\n // Default actions\r\n return [\r\n { id: 'view', icon: 'view', tooltip: 'View' },\r\n { id: 'edit', icon: 'edit', tooltip: 'Edit' },\r\n { id: 'delete', icon: 'delete', tooltip: 'Delete', variant: 'danger' },\r\n ];\r\n }\r\n\r\n /**\r\n * Handles action button click\r\n */\r\n onActionClick(action: TableAction, row: any, index: number, event: Event): void {\r\n event.stopPropagation();\r\n\r\n // Call individual action callback if provided\r\n if (action.action) {\r\n action.action(row, index);\r\n }\r\n\r\n // Always emit the rowAction event\r\n this.rowAction.emit({ action: action.id, row, index });\r\n }\r\n\r\n /**\r\n * Gets the inputs for a dynamic component\r\n * Combines static componentInputs with row-specific data from componentInputsFn\r\n */\r\n getDynamicComponentInputs(row: any, column: PecbTableColumn, index: number): Record<string, any> {\r\n const value = this.getCellValue(row, column.key);\r\n const staticInputs = column.componentInputs || {};\r\n\r\n if (column.componentInputsFn) {\r\n const dynamicInputs = column.componentInputsFn(row, value, index);\r\n return { ...staticInputs, ...dynamicInputs };\r\n }\r\n\r\n return staticInputs;\r\n }\r\n\r\n /**\r\n * Checks if column has a dynamic component\r\n */\r\n hasDynamicComponent(column: PecbTableColumn): boolean {\r\n return !!column.dynamicComponent;\r\n }\r\n\r\n /**\r\n * Sanitizes custom icon SVG for safe rendering\r\n */\r\n getSafeIcon(iconSvg: string | undefined): SafeHtml {\r\n if (!iconSvg) return '';\r\n return this.sanitizer.bypassSecurityTrustHtml(iconSvg);\r\n }\r\n\r\n private emitSelectionChange(): void {\r\n const selectedRows = this.selectedIndices.map(index => this.data[index]);\r\n this.selectionChange.emit({\r\n selectedRows,\r\n selectedIndices: this.selectedIndices,\r\n });\r\n }\r\n}\r\n","<div class=\"pecb-table-wrapper\">\r\n <div [class]=\"containerClasses\" [style.maxHeight]=\"maxHeight\">\r\n <!-- Loading State -->\r\n <div *ngIf=\"loading\" class=\"pecb-table__loading\">\r\n <ng-container *ngIf=\"loadingTemplate; else defaultLoading\">\r\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-template #defaultLoading>\r\n <div class=\"pecb-table__loading-spinner\">\r\n <svg class=\"pecb-table__spinner-icon\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-dasharray=\"31.4 31.4\" />\r\n </svg>\r\n <span>Loading...</span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n <!-- Table -->\r\n <table\r\n *ngIf=\"!loading\"\r\n [class]=\"tableClasses\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n role=\"table\">\r\n\r\n <!-- Table Header -->\r\n <thead *ngIf=\"showHeader\" class=\"pecb-table__head\" [class.pecb-table__head--sticky]=\"stickyHeader\">\r\n <tr class=\"pecb-table__row pecb-table__row--header\" role=\"row\">\r\n <!-- Selection Checkbox Column -->\r\n <th\r\n *ngIf=\"selectable\"\r\n class=\"pecb-table__cell pecb-table__cell--header pecb-table__cell--checkbox\"\r\n role=\"columnheader\"\r\n scope=\"col\">\r\n <label class=\"pecb-table__checkbox-wrapper\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"pecb-table__checkbox\"\r\n [checked]=\"isAllSelected()\"\r\n [indeterminate]=\"isSomeSelected()\"\r\n (change)=\"toggleAllSelection()\"\r\n aria-label=\"Select all rows\" />\r\n <span class=\"pecb-table__checkbox-custom\"></span>\r\n </label>\r\n </th>\r\n\r\n <!-- Data Columns -->\r\n <th\r\n *ngFor=\"let column of columns; trackBy: trackByKey\"\r\n class=\"pecb-table__cell pecb-table__cell--header\"\r\n [class.pecb-table__cell--sortable]=\"column.sortable\"\r\n [class]=\"getAlignmentClass(column)\"\r\n [ngClass]=\"column.cssClass\"\r\n [style.width]=\"column.width\"\r\n [attr.aria-sort]=\"column.sortable ? (sortColumn === column.key ? (sortDirection === 'asc' ? 'ascending' : 'descending') : 'none') : null\"\r\n role=\"columnheader\"\r\n scope=\"col\"\r\n (click)=\"onHeaderClick(column)\"\r\n (keydown.enter)=\"onHeaderClick(column)\"\r\n (keydown.space)=\"onHeaderClick(column); $event.preventDefault()\"\r\n [attr.tabindex]=\"column.sortable ? 0 : null\">\r\n <div class=\"pecb-table__header-content\">\r\n <ng-container *ngIf=\"column.headerTemplate; else defaultHeader\">\r\n <ng-container *ngTemplateOutlet=\"column.headerTemplate; context: { $implicit: column }\"></ng-container>\r\n </ng-container>\r\n <ng-template #defaultHeader>\r\n <span class=\"pecb-table__header-text\">{{ column.label }}</span>\r\n </ng-template>\r\n\r\n <!-- Sort Icon -->\r\n <span *ngIf=\"column.sortable\" class=\"pecb-table__sort-icon\" [attr.data-sort]=\"getSortState(column)\">\r\n <svg *ngIf=\"getSortState(column) === 'none'\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8 3L12 7H4L8 3Z\" fill=\"currentColor\" opacity=\"0.4\"/>\r\n <path d=\"M8 13L4 9H12L8 13Z\" fill=\"currentColor\" opacity=\"0.4\"/>\r\n </svg>\r\n <svg *ngIf=\"getSortState(column) === 'asc'\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8 3L12 7H4L8 3Z\" fill=\"currentColor\"/>\r\n <path d=\"M8 13L4 9H12L8 13Z\" fill=\"currentColor\" opacity=\"0.4\"/>\r\n </svg>\r\n <svg *ngIf=\"getSortState(column) === 'desc'\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8 3L12 7H4L8 3Z\" fill=\"currentColor\" opacity=\"0.4\"/>\r\n <path d=\"M8 13L4 9H12L8 13Z\" fill=\"currentColor\"/>\r\n </svg>\r\n </span>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <!-- Table Body -->\r\n <tbody class=\"pecb-table__body\">\r\n <!-- Empty State -->\r\n <tr *ngIf=\"data.length === 0\" class=\"pecb-table__row pecb-table__row--empty\">\r\n <td\r\n [attr.colspan]=\"selectable ? columns.length + 1 : columns.length\"\r\n class=\"pecb-table__cell pecb-table__cell--empty\">\r\n <ng-container *ngIf=\"emptyTemplate; else defaultEmpty\">\r\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\r\n </ng-container>\r\n <ng-template #defaultEmpty>\r\n <div class=\"pecb-table__empty-content\">\r\n <span class=\"pecb-table__empty-message\">{{ emptyMessage }}</span>\r\n </div>\r\n </ng-template>\r\n </td>\r\n </tr>\r\n\r\n <!-- Data Rows -->\r\n <tr\r\n *ngFor=\"let row of data; let i = index; trackBy: trackByIndex\"\r\n class=\"pecb-table__row pecb-table__row--data\"\r\n [class.pecb-table__row--selected]=\"isRowSelected(i)\"\r\n role=\"row\"\r\n (click)=\"onRowClick(row, i)\"\r\n [attr.tabindex]=\"0\"\r\n (keydown.enter)=\"onRowClick(row, i)\">\r\n\r\n <!-- Selection Checkbox -->\r\n <td\r\n *ngIf=\"selectable\"\r\n class=\"pecb-table__cell pecb-table__cell--checkbox\"\r\n role=\"cell\"\r\n (click)=\"$event.stopPropagation()\">\r\n <label class=\"pecb-table__checkbox-wrapper\">\r\n <input\r\n type=\"checkbox\"\r\n class=\"pecb-table__checkbox\"\r\n [checked]=\"isRowSelected(i)\"\r\n (change)=\"toggleRowSelection(i)\"\r\n [attr.aria-label]=\"'Select row ' + (i + 1)\" />\r\n <span class=\"pecb-table__checkbox-custom\"></span>\r\n </label>\r\n </td>\r\n\r\n <!-- Data Cells -->\r\n <td\r\n *ngFor=\"let column of columns; trackBy: trackByKey\"\r\n class=\"pecb-table__cell\"\r\n [class]=\"getAlignmentClass(column)\"\r\n [ngClass]=\"column.cssClass\"\r\n role=\"cell\">\r\n\r\n <!-- Custom Template -->\r\n <ng-container *ngIf=\"column.cellTemplate\">\r\n <ng-container *ngTemplateOutlet=\"column.cellTemplate; context: { $implicit: getCellValue(row, column.key), row: row, column: column, index: i }\"></ng-container>\r\n </ng-container>\r\n\r\n <!-- Dynamic Component - renders any component passed via dynamicComponent -->\r\n <ng-container *ngIf=\"!column.cellTemplate && hasDynamicComponent(column)\">\r\n <ng-container\r\n *ngComponentOutlet=\"column.dynamicComponent!; inputs: getDynamicComponentInputs(row, column, i)\">\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Status Component - renders pecb-status -->\r\n <ng-container *ngIf=\"!column.cellTemplate && !hasDynamicComponent(column) && getColumnType(column) === 'status'\">\r\n <pecb-status\r\n [type]=\"getStatusType(getCellValue(row, column.key), column)\"\r\n [variant]=\"getStatusVariant(column)\"\r\n [size]=\"getStatusSize(column)\">\r\n {{ getCellValue(row, column.key) }}\r\n </pecb-status>\r\n </ng-container>\r\n\r\n <!-- User Component - renders avatar + name + email -->\r\n <ng-container *ngIf=\"!column.cellTemplate && !hasDynamicComponent(column) && getColumnType(column) === 'user'\">\r\n <div class=\"pecb-table__user-cell\">\r\n <img\r\n *ngIf=\"getUserData(row, column).avatar\"\r\n [src]=\"getUserData(row, column).avatar\"\r\n alt=\"\"\r\n class=\"pecb-table__user-avatar\">\r\n <div class=\"pecb-table__user-info\">\r\n <div class=\"pecb-table__user-name\">{{ getUserData(row, column).name }}</div>\r\n <div *ngIf=\"getUserData(row, column).secondary\" class=\"pecb-table__user-secondary\">\r\n {{ getUserData(row, column).secondary }}\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Action Component - renders action buttons with icons -->\r\n <ng-container *ngIf=\"!column.cellTemplate && !hasDynamicComponent(column) && getColumnType(column) === 'action'\">\r\n <div class=\"pecb-table__action-buttons\">\r\n <button\r\n *ngFor=\"let action of getActions(column)\"\r\n class=\"pecb-table__action-btn\"\r\n [class.pecb-table__action-btn--danger]=\"action.variant === 'danger'\"\r\n [title]=\"action.tooltip || action.id\"\r\n [disabled]=\"action.disabled\"\r\n (click)=\"onActionClick(action, row, i, $event)\">\r\n <!-- View Icon -->\r\n <svg *ngIf=\"action.icon === 'view'\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"></path>\r\n <circle cx=\"12\" cy=\"12\" r=\"3\"></circle>\r\n </svg>\r\n <!-- Edit Icon -->\r\n <svg *ngIf=\"action.icon === 'edit'\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"></path>\r\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"></path>\r\n </svg>\r\n <!-- Delete Icon -->\r\n <svg *ngIf=\"action.icon === 'delete'\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <polyline points=\"3 6 5 6 21 6\"></polyline>\r\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"></path>\r\n </svg>\r\n <!-- Download Icon -->\r\n <svg *ngIf=\"action.icon === 'download'\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path>\r\n <polyline points=\"7 10 12 15 17 10\"></polyline>\r\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line>\r\n </svg>\r\n <!-- Copy Icon -->\r\n <svg *ngIf=\"action.icon === 'copy'\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect>\r\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path>\r\n </svg>\r\n <!-- Custom Icon (SVG string) -->\r\n <span *ngIf=\"action.icon === 'custom' && action.customIcon\" class=\"pecb-table__custom-icon\" [innerHTML]=\"getSafeIcon(action.customIcon)\"></span>\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- Default Text -->\r\n <ng-container *ngIf=\"!column.cellTemplate && !hasDynamicComponent(column) && getColumnType(column) === 'text'\">\r\n {{ getCellValue(row, column.key) }}\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <!-- Pagination (outside table container) -->\r\n <div *ngIf=\"showPagination && !loading && data.length > 0\" [class]=\"paginationClasses\">\r\n <pecb-pagination\r\n [totalItems]=\"totalItems\"\r\n [pageSize]=\"pageSize\"\r\n [currentPage]=\"currentPage\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n [showPageSizeSelector]=\"showPageSizeSelector\"\r\n [variant]=\"paginationVariant\"\r\n size=\"md\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\">\r\n </pecb-pagination>\r\n </div>\r\n</div>\r\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\r\n\r\nexport type TabStyle = 'rounded' | 'line';\r\nexport type TabSize = 'sm' | 'md';\r\n\r\n/**\r\n * A professional tab component with multiple styles and sizes.\r\n * Fully accessible with WCAG 2.1 AA compliance.\r\n *\r\n * @example\r\n * ```html\r\n * <pecb-tab\r\n * label=\"Tab Name\"\r\n * [active]=\"true\"\r\n * style=\"rounded\"\r\n * size=\"md\"\r\n * (clicked)=\"handleClick()\"\r\n * ></pecb-tab>\r\n *\r\n * <!-- With badge number and close button -->\r\n * <pecb-tab\r\n * label=\"Tab Name\"\r\n * [icon]=\"10\"\r\n * [closable]=\"true\"\r\n * [active]=\"true\"\r\n * (closed)=\"handleClose()\"\r\n * ></pecb-tab>\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Component({\r\n selector: 'pecb-tab',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './tab.component.html',\r\n styleUrls: ['./tab.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TabComponent {\r\n /**\r\n * Unique ID for the tab element\r\n */\r\n @Input() id: string = generateUniqueId('tab');\r\n\r\n /**\r\n * The visual style of the tab\r\n */\r\n @Input() style: TabStyle = 'rounded';\r\n\r\n /**\r\n * The size of the tab\r\n */\r\n @Input() size: TabSize = 'md';\r\n\r\n /**\r\n * Label text to display\r\n */\r\n @Input() label = 'Tab Name';\r\n\r\n /**\r\n * Optional badge number to display after the label\r\n */\r\n @Input() icon?: number;\r\n\r\n /**\r\n * Whether the tab is in active state\r\n */\r\n @Input() active = false;\r\n\r\n /**\r\n * Whether the tab is disabled\r\n */\r\n @Input() disabled = false;\r\n\r\n /**\r\n * Whether to show close button\r\n */\r\n @Input() closable = true;\r\n\r\n // --- ARIA Accessibility Properties ---\r\n\r\n /**\r\n * Accessible label for the tab\r\n */\r\n @Input() ariaLabel?: string;\r\n\r\n /**\r\n * ID of the tab panel this tab controls\r\n */\r\n @Input() ariaControls?: string;\r\n\r\n /**\r\n * Indicates if the tab panel is selected\r\n */\r\n @Input() ariaSelected?: boolean;\r\n\r\n /**\r\n * Event emitted when the tab is clicked\r\n */\r\n @Output() clicked = new EventEmitter<string>();\r\n\r\n /**\r\n * Event emitted when the close button is clicked\r\n */\r\n @Output() closed = new EventEmitter<string>();\r\n\r\n /**\r\n * Get CSS classes for the tab\r\n */\r\n get tabClasses(): string[] {\r\n return [\r\n 'pecb-tab',\r\n `pecb-tab--${this.style}`,\r\n `pecb-tab--${this.size}`,\r\n this.active ? 'pecb-tab--active' : '',\r\n this.disabled ? 'pecb-tab--disabled' : ''\r\n ].filter(Boolean);\r\n }\r\n\r\n /**\r\n * Handle tab click\r\n */\r\n onClick(event: MouseEvent): void {\r\n if (!this.disabled) {\r\n event.stopPropagation();\r\n this.clicked.emit(this.id);\r\n }\r\n }\r\n\r\n /**\r\n * Handle close button click\r\n */\r\n onClose(event: MouseEvent): void {\r\n if (!this.disabled) {\r\n event.stopPropagation();\r\n this.closed.emit(this.id);\r\n }\r\n }\r\n\r\n /**\r\n * Handle keyboard events for accessibility\r\n */\r\n onKeyDown(event: KeyboardEvent): void {\r\n if (this.disabled) return;\r\n\r\n // Handle Enter/Space for tab selection\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(this.id);\r\n }\r\n\r\n // Handle Delete/Backspace for close (if closable)\r\n if (this.closable && (event.key === 'Delete' || event.key === 'Backspace')) {\r\n event.preventDefault();\r\n this.closed.emit(this.id);\r\n }\r\n }\r\n}\r\n","<div\r\n [id]=\"id\"\r\n [class]=\"tabClasses.join(' ')\"\r\n role=\"tab\"\r\n [attr.aria-label]=\"ariaLabel || label\"\r\n [attr.aria-controls]=\"ariaControls\"\r\n [attr.aria-selected]=\"ariaSelected !== undefined ? ariaSelected : active\"\r\n [attr.aria-disabled]=\"disabled\"\r\n [attr.tabindex]=\"disabled ? -1 : 0\"\r\n (click)=\"onClick($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n>\r\n <span class=\"pecb-tab__content\">\r\n <!-- Label -->\r\n <span class=\"pecb-tab__label\">{{ label }}</span>\r\n\r\n <!-- Icon/Badge -->\r\n <span *ngIf=\"icon\" class=\"pecb-tab__icon\" aria-hidden=\"true\">\r\n {{ icon }}\r\n </span>\r\n\r\n <!-- Close button -->\r\n <button\r\n *ngIf=\"closable\"\r\n type=\"button\"\r\n class=\"pecb-tab__close\"\r\n [attr.aria-label]=\"'Close ' + label\"\r\n [disabled]=\"disabled\"\r\n (click)=\"onClose($event)\"\r\n >\r\n <span aria-hidden=\"true\">×</span>\r\n </button>\r\n </span>\r\n</div>\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n HostListener,\r\n ElementRef,\r\n ViewChild,\r\n forwardRef,\r\n ChangeDetectorRef\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\r\n\r\nexport type DatepickerSize = 'sm' | 'md' | 'lg';\r\n\r\ninterface CalendarDay {\r\n date: Date;\r\n day: number;\r\n isCurrentMonth: boolean;\r\n isSelected: boolean;\r\n isToday: boolean;\r\n}\r\n\r\n/**\r\n * A professional datepicker component with calendar dropdown.\r\n * Fully accessible with WCAG 2.1 AA compliance and reactive forms support.\r\n *\r\n * @example\r\n * ```html\r\n * <pecb-datepicker\r\n * label=\"Date\"\r\n * placeholder=\"Choose Date\"\r\n * [(ngModel)]=\"selectedDate\"\r\n * ></pecb-datepicker>\r\n *\r\n * <!-- With custom configuration -->\r\n * <pecb-datepicker\r\n * label=\"Birth Date\"\r\n * [required]=\"true\"\r\n * size=\"lg\"\r\n * (dateChange)=\"handleDateChange($event)\"\r\n * ></pecb-datepicker>\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Component({\r\n selector: 'pecb-datepicker',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './datepicker.component.html',\r\n styleUrls: ['./datepicker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DatepickerComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class DatepickerComponent implements ControlValueAccessor {\r\n @ViewChild('inputElement') inputElement?: ElementRef<HTMLInputElement>;\r\n\r\n /**\r\n * Unique ID for the datepicker element\r\n */\r\n @Input() id: string = generateUniqueId('datepicker');\r\n\r\n /**\r\n * Label text to display above the input\r\n */\r\n @Input() label?: string;\r\n\r\n /**\r\n * Placeholder text for the input\r\n */\r\n @Input() placeholder = 'Choose Date';\r\n\r\n /**\r\n * The size of the datepicker\r\n */\r\n @Input() size: DatepickerSize = 'md';\r\n\r\n /**\r\n * Whether the field is required\r\n */\r\n @Input() required = false;\r\n\r\n /**\r\n * Whether the datepicker is disabled\r\n */\r\n @Input() disabled = false;\r\n\r\n /**\r\n * Date format for display (default: MM/DD/YYYY)\r\n */\r\n @Input() dateFormat = 'MM/DD/YYYY';\r\n\r\n /**\r\n * Minimum selectable date\r\n */\r\n @Input() minDate?: Date;\r\n\r\n /**\r\n * Maximum selectable date\r\n */\r\n @Input() maxDate?: Date;\r\n\r\n /**\r\n * Event emitted when date is selected\r\n */\r\n @Output() dateChange = new EventEmitter<Date | null>();\r\n\r\n /**\r\n * Event emitted when calendar is opened\r\n */\r\n @Output() opened = new EventEmitter<void>();\r\n\r\n /**\r\n * Event emitted when calendar is closed\r\n */\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n // Internal state\r\n selectedDate: Date | null = null;\r\n isCalendarOpen = false;\r\n currentMonth: Date = new Date();\r\n calendarDays: CalendarDay[] = [];\r\n weekDays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\r\n monthNames = [\r\n 'January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'\r\n ];\r\n\r\n // ControlValueAccessor\r\n private onChange: (value: Date | null) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n constructor(\r\n private elementRef: ElementRef,\r\n private cdr: ChangeDetectorRef\r\n ) {\r\n this.generateCalendar();\r\n }\r\n\r\n /**\r\n * Get CSS classes for the datepicker wrapper\r\n */\r\n get wrapperClasses(): string[] {\r\n return [\r\n 'pecb-datepicker',\r\n `pecb-datepicker--${this.size}`,\r\n this.disabled ? 'pecb-datepicker--disabled' : '',\r\n this.isCalendarOpen ? 'pecb-datepicker--open' : '',\r\n this.selectedDate ? 'pecb-datepicker--has-value' : ''\r\n ].filter(Boolean);\r\n }\r\n\r\n /**\r\n * Get formatted display value\r\n */\r\n get displayValue(): string {\r\n if (!this.selectedDate) return '';\r\n return this.formatDate(this.selectedDate);\r\n }\r\n\r\n /**\r\n * Get current month and year display\r\n */\r\n get monthYearDisplay(): string {\r\n return `${this.monthNames[this.currentMonth.getMonth()]} ${this.currentMonth.getFullYear()}`;\r\n }\r\n\r\n /**\r\n * Toggle calendar dropdown\r\n */\r\n toggleCalendar(): void {\r\n if (this.disabled) return;\r\n\r\n this.isCalendarOpen = !this.isCalendarOpen;\r\n\r\n if (this.isCalendarOpen) {\r\n this.opened.emit();\r\n // Set current month to selected date's month or current month\r\n if (this.selectedDate) {\r\n this.currentMonth = new Date(this.selectedDate.getFullYear(), this.selectedDate.getMonth(), 1);\r\n }\r\n this.generateCalendar();\r\n } else {\r\n this.closed.emit();\r\n }\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Close calendar\r\n */\r\n closeCalendar(): void {\r\n if (this.isCalendarOpen) {\r\n this.isCalendarOpen = false;\r\n this.closed.emit();\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * Navigate to previous month\r\n */\r\n previousMonth(): void {\r\n this.currentMonth = new Date(\r\n this.currentMonth.getFullYear(),\r\n this.currentMonth.getMonth() - 1,\r\n 1\r\n );\r\n this.generateCalendar();\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Navigate to next month\r\n */\r\n nextMonth(): void {\r\n this.currentMonth = new Date(\r\n this.currentMonth.getFullYear(),\r\n this.currentMonth.getMonth() + 1,\r\n 1\r\n );\r\n this.generateCalendar();\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Select a date\r\n */\r\n selectDate(day: CalendarDay): void {\r\n if (this.disabled) return;\r\n if (!day.isCurrentMonth) return;\r\n if (this.minDate && day.date < this.minDate) return;\r\n if (this.maxDate && day.date > this.maxDate) return;\r\n\r\n this.selectedDate = day.date;\r\n this.onChange(this.selectedDate);\r\n this.onTouched();\r\n this.dateChange.emit(this.selectedDate);\r\n this.generateCalendar();\r\n this.closeCalendar();\r\n }\r\n\r\n /**\r\n * Generate calendar days\r\n */\r\n private generateCalendar(): void {\r\n const year = this.currentMonth.getFullYear();\r\n const month = this.currentMonth.getMonth();\r\n\r\n // First day of the month\r\n const firstDay = new Date(year, month, 1);\r\n const startingDayOfWeek = firstDay.getDay();\r\n\r\n // Last day of the month\r\n const lastDay = new Date(year, month + 1, 0);\r\n const daysInMonth = lastDay.getDate();\r\n\r\n // Previous month\r\n const prevMonth = new Date(year, month, 0);\r\n const daysInPrevMonth = prevMonth.getDate();\r\n\r\n const days: CalendarDay[] = [];\r\n const today = new Date();\r\n today.setHours(0, 0, 0, 0);\r\n\r\n // Previous month days\r\n for (let i = startingDayOfWeek - 1; i >= 0; i--) {\r\n const date = new Date(year, month - 1, daysInPrevMonth - i);\r\n days.push({\r\n date,\r\n day: daysInPrevMonth - i,\r\n isCurrentMonth: false,\r\n isSelected: false,\r\n isToday: false\r\n });\r\n }\r\n\r\n // Current month days\r\n for (let day = 1; day <= daysInMonth; day++) {\r\n const date = new Date(year, month, day);\r\n date.setHours(0, 0, 0, 0);\r\n\r\n const isSelected = this.selectedDate ?\r\n date.getTime() === new Date(this.selectedDate).setHours(0, 0, 0, 0) :\r\n false;\r\n\r\n const isToday = date.getTime() === today.getTime();\r\n\r\n days.push({\r\n date,\r\n day,\r\n isCurrentMonth: true,\r\n isSelected,\r\n isToday\r\n });\r\n }\r\n\r\n // Next month days\r\n const remainingDays = 42 - days.length; // 6 rows * 7 days\r\n for (let day = 1; day <= remainingDays; day++) {\r\n const date = new Date(year, month + 1, day);\r\n days.push({\r\n date,\r\n day,\r\n isCurrentMonth: false,\r\n isSelected: false,\r\n isToday: false\r\n });\r\n }\r\n\r\n this.calendarDays = days;\r\n }\r\n\r\n /**\r\n * Format date for display\r\n */\r\n private formatDate(date: Date): string {\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const day = String(date.getDate()).padStart(2, '0');\r\n const year = date.getFullYear();\r\n\r\n return this.dateFormat\r\n .replace('MM', month)\r\n .replace('DD', day)\r\n .replace('YYYY', String(year));\r\n }\r\n\r\n /**\r\n * Listen for clicks outside to close calendar\r\n */\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent): void {\r\n if (!this.elementRef.nativeElement.contains(event.target)) {\r\n this.closeCalendar();\r\n }\r\n }\r\n\r\n /**\r\n * Handle keyboard navigation\r\n */\r\n onKeyDown(event: KeyboardEvent): void {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.toggleCalendar();\r\n } else if (event.key === 'Escape') {\r\n this.closeCalendar();\r\n }\r\n }\r\n\r\n /**\r\n * Clear selected date\r\n */\r\n clearDate(event: MouseEvent): void {\r\n event.stopPropagation();\r\n if (this.disabled) return;\r\n\r\n this.selectedDate = null;\r\n this.onChange(null);\r\n this.onTouched();\r\n this.dateChange.emit(null);\r\n this.generateCalendar();\r\n this.cdr.markForCheck();\r\n }\r\n\r\n // ControlValueAccessor implementation\r\n writeValue(value: Date | null): void {\r\n this.selectedDate = value;\r\n if (value) {\r\n this.currentMonth = new Date(value.getFullYear(), value.getMonth(), 1);\r\n }\r\n this.generateCalendar();\r\n this.cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (value: Date | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.cdr.markForCheck();\r\n }\r\n}\r\n","<div [class]=\"wrapperClasses.join(' ')\">\r\n <!-- Input Field -->\r\n <div class=\"pecb-datepicker__input-wrapper\">\r\n <!-- Input -->\r\n <input\r\n #inputElement\r\n [id]=\"id\"\r\n type=\"text\"\r\n class=\"pecb-datepicker__input\"\r\n [value]=\"displayValue\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"label || placeholder\"\r\n [attr.aria-required]=\"required\"\r\n readonly\r\n (click)=\"toggleCalendar()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n />\r\n\r\n <!-- Floating Label -->\r\n <label\r\n *ngIf=\"label\"\r\n [attr.for]=\"id\"\r\n class=\"pecb-datepicker__label\"\r\n >\r\n {{ label }}<span *ngIf=\"required\" class=\"pecb-datepicker__required\">*</span>\r\n </label>\r\n\r\n <!-- Clear Button (shown when has value) -->\r\n <button\r\n *ngIf=\"selectedDate && !disabled\"\r\n type=\"button\"\r\n class=\"pecb-datepicker__icon pecb-datepicker__icon--clear\"\r\n [attr.aria-label]=\"'Clear date'\"\r\n (click)=\"clearDate($event)\"\r\n >\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M8 0C3.6 0 0 3.6 0 8C0 12.4 3.6 16 8 16C12.4 16 16 12.4 16 8C16 3.6 12.4 0 8 0ZM11.5 10.1L10.1 11.5L8 9.4L5.9 11.5L4.5 10.1L6.6 8L4.5 5.9L5.9 4.5L8 6.6L10.1 4.5L11.5 5.9L9.4 8L11.5 10.1Z\"/>\r\n </svg>\r\n </button>\r\n\r\n <!-- Right Icon (Calendar) -->\r\n <button\r\n type=\"button\"\r\n class=\"pecb-datepicker__icon pecb-datepicker__icon--right\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"'Open calendar'\"\r\n (click)=\"toggleCalendar()\"\r\n >\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M11 2V1H10V2H6V1H5V2H2V15H14V2H11ZM13 14H3V6H13V14ZM13 5H3V3H5V4H6V3H10V4H11V3H13V5Z\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- Calendar Dropdown -->\r\n <div\r\n *ngIf=\"isCalendarOpen\"\r\n class=\"pecb-datepicker__calendar\"\r\n role=\"dialog\"\r\n aria-modal=\"false\"\r\n [attr.aria-label]=\"'Choose date'\"\r\n >\r\n <!-- Calendar Header -->\r\n <div class=\"pecb-datepicker__calendar-header\">\r\n <button\r\n type=\"button\"\r\n class=\"pecb-datepicker__nav-button\"\r\n aria-label=\"Previous month\"\r\n (click)=\"previousMonth()\"\r\n >\r\n «\r\n </button>\r\n\r\n <span class=\"pecb-datepicker__month-year\">{{ monthYearDisplay }}</span>\r\n\r\n <button\r\n type=\"button\"\r\n class=\"pecb-datepicker__nav-button\"\r\n aria-label=\"Next month\"\r\n (click)=\"nextMonth()\"\r\n >\r\n »\r\n </button>\r\n </div>\r\n\r\n <!-- Calendar Grid -->\r\n <div class=\"pecb-datepicker__calendar-body\">\r\n <!-- Week Days -->\r\n <div class=\"pecb-datepicker__weekdays\">\r\n <div\r\n *ngFor=\"let day of weekDays\"\r\n class=\"pecb-datepicker__weekday\"\r\n >\r\n {{ day }}\r\n </div>\r\n </div>\r\n\r\n <!-- Days Grid -->\r\n <div class=\"pecb-datepicker__days\">\r\n <button\r\n *ngFor=\"let day of calendarDays\"\r\n type=\"button\"\r\n class=\"pecb-datepicker__day\"\r\n [class.pecb-datepicker__day--other-month]=\"!day.isCurrentMonth\"\r\n [class.pecb-datepicker__day--selected]=\"day.isSelected\"\r\n [class.pecb-datepicker__day--today]=\"day.isToday\"\r\n [attr.aria-label]=\"day.date.toDateString()\"\r\n [attr.aria-selected]=\"day.isSelected\"\r\n (click)=\"selectDate(day)\"\r\n >\r\n {{ day.day }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n forwardRef,\r\n ViewChild,\r\n ElementRef,\r\n ChangeDetectorRef\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\r\n\r\nexport type InputType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'search';\r\nexport type InputSize = 'sm' | 'md' | 'lg';\r\n\r\n/**\r\n * A professional input component with floating label and multiple types.\r\n * Fully accessible with WCAG 2.1 AA compliance and reactive forms support.\r\n *\r\n * @example\r\n * ```html\r\n * <pecb-input\r\n * label=\"Email\"\r\n * type=\"email\"\r\n * placeholder=\"Enter your email\"\r\n * [(ngModel)]=\"email\"\r\n * ></pecb-input>\r\n *\r\n * <!-- With predefined icon -->\r\n * <pecb-input\r\n * label=\"Email\"\r\n * type=\"email\"\r\n * icon=\"email\"\r\n * iconPosition=\"left\"\r\n * ></pecb-input>\r\n *\r\n * <!-- With custom SVG icon -->\r\n * <pecb-input\r\n * label=\"Phone\"\r\n * type=\"tel\"\r\n * [icon]=\"'<svg>...</svg>'\"\r\n * iconPosition=\"left\"\r\n * ></pecb-input>\r\n *\r\n * <!-- With error state -->\r\n * <pecb-input\r\n * label=\"Password\"\r\n * type=\"password\"\r\n * [error]=\"true\"\r\n * errorMessage=\"Password is required\"\r\n * ></pecb-input>\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Component({\r\n selector: 'pecb-input',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => InputComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class InputComponent implements ControlValueAccessor {\r\n @ViewChild('inputElement') inputElement?: ElementRef<HTMLInputElement>;\r\n\r\n /**\r\n * Unique ID for the input element\r\n */\r\n @Input() id: string = generateUniqueId('input');\r\n\r\n /**\r\n * Input type\r\n */\r\n @Input() type: InputType = 'text';\r\n\r\n /**\r\n * Label text to display\r\n */\r\n @Input() label?: string;\r\n\r\n /**\r\n * Placeholder text (shown when label is not present)\r\n */\r\n @Input() placeholder = '';\r\n\r\n /**\r\n * The size of the input\r\n */\r\n @Input() size: InputSize = 'md';\r\n\r\n /**\r\n * Whether the field is required\r\n */\r\n @Input() required = false;\r\n\r\n /**\r\n * Whether the input is disabled\r\n */\r\n @Input() disabled = false;\r\n\r\n /**\r\n * Whether the input is readonly\r\n */\r\n @Input() readonly = false;\r\n\r\n /**\r\n * Whether to show error state\r\n */\r\n @Input() error = false;\r\n\r\n /**\r\n * Error message to display\r\n */\r\n @Input() errorMessage?: string;\r\n\r\n /**\r\n * Helper text to display below input\r\n */\r\n @Input() helperText?: string;\r\n\r\n /**\r\n * Icon to display - can be a predefined name ('email', 'search', 'user') or custom SVG string\r\n */\r\n @Input() icon?: string;\r\n\r\n /**\r\n * Icon position (left or right)\r\n */\r\n @Input() iconPosition: 'left' | 'right' = 'left';\r\n\r\n /**\r\n * Left icon name or HTML (deprecated - use icon with iconPosition instead)\r\n */\r\n @Input() leftIcon?: string;\r\n\r\n /**\r\n * Right icon name or HTML (deprecated - use icon with iconPosition instead)\r\n */\r\n @Input() rightIcon?: string;\r\n\r\n /**\r\n * Whether to show clear button\r\n */\r\n @Input() clearable = false;\r\n\r\n /**\r\n * Maximum length of input\r\n */\r\n @Input() maxLength?: number;\r\n\r\n /**\r\n * Minimum value (for number type)\r\n */\r\n @Input() min?: number;\r\n\r\n /**\r\n * Maximum value (for number type)\r\n */\r\n @Input() max?: number;\r\n\r\n /**\r\n * Step value (for number type)\r\n */\r\n @Input() step?: number;\r\n\r\n /**\r\n * Autocomplete attribute\r\n */\r\n @Input() autocomplete?: string;\r\n\r\n /**\r\n * Event emitted when value changes\r\n */\r\n @Output() valueChange = new EventEmitter<string>();\r\n\r\n /**\r\n * Event emitted on blur\r\n */\r\n @Output() blurred = new EventEmitter<void>();\r\n\r\n /**\r\n * Event emitted on focus\r\n */\r\n @Output() focused = new EventEmitter<void>();\r\n\r\n /**\r\n * Event emitted when clear button is clicked\r\n */\r\n @Output() cleared = new EventEmitter<void>();\r\n\r\n // Internal state\r\n value: string = '';\r\n isFocused = false;\r\n showPassword = false;\r\n\r\n // ControlValueAccessor\r\n private onChange: (value: string) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private sanitizer: DomSanitizer\r\n ) {}\r\n\r\n /**\r\n * Get CSS classes for the input wrapper\r\n */\r\n get wrapperClasses(): string[] {\r\n return [\r\n 'pecb-input',\r\n `pecb-input--${this.size}`,\r\n this.disabled ? 'pecb-input--disabled' : '',\r\n this.error ? 'pecb-input--error' : '',\r\n this.readonly ? 'pecb-input--readonly' : '',\r\n this.isFocused ? 'pecb-input--focused' : '',\r\n this.value ? 'pecb-input--has-value' : ''\r\n ].filter(Boolean);\r\n }\r\n\r\n /**\r\n * Get the actual input type (handles password visibility toggle)\r\n */\r\n get inputType(): string {\r\n if (this.type === 'password' && this.showPassword) {\r\n return 'text';\r\n }\r\n return this.type;\r\n }\r\n\r\n /**\r\n * Check if clear button should be shown\r\n */\r\n get showClearButton(): boolean {\r\n return this.clearable && !!this.value && !this.disabled && !this.readonly;\r\n }\r\n\r\n /**\r\n * Check if password toggle should be shown\r\n */\r\n get showPasswordToggle(): boolean {\r\n return this.type === 'password' && !!this.value && !this.disabled && !this.readonly;\r\n }\r\n\r\n /**\r\n * Get computed left icon\r\n */\r\n get computedLeftIcon(): string | undefined {\r\n // New API takes precedence\r\n if (this.icon && this.iconPosition === 'left') {\r\n return this.icon;\r\n }\r\n // Fallback to old API\r\n return this.leftIcon;\r\n }\r\n\r\n /**\r\n * Get computed right icon\r\n */\r\n get computedRightIcon(): string | undefined {\r\n // New API takes precedence\r\n if (this.icon && this.iconPosition === 'right') {\r\n return this.icon;\r\n }\r\n // Fallback to old API\r\n return this.rightIcon;\r\n }\r\n\r\n /**\r\n * Handle input change\r\n */\r\n onInput(event: Event): void {\r\n const target = event.target as HTMLInputElement;\r\n this.value = target.value;\r\n this.onChange(this.value);\r\n this.valueChange.emit(this.value);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Handle focus event\r\n */\r\n onFocus(): void {\r\n this.isFocused = true;\r\n this.focused.emit();\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Handle blur event\r\n */\r\n onBlur(): void {\r\n this.isFocused = false;\r\n this.onTouched();\r\n this.blurred.emit();\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Clear input value\r\n */\r\n clearValue(event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.value = '';\r\n this.onChange(this.value);\r\n this.valueChange.emit(this.value);\r\n this.cleared.emit();\r\n this.inputElement?.nativeElement.focus();\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Toggle password visibility\r\n */\r\n togglePasswordVisibility(event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.showPassword = !this.showPassword;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Focus the input\r\n */\r\n focus(): void {\r\n this.inputElement?.nativeElement.focus();\r\n }\r\n\r\n /**\r\n * Sanitize custom icon HTML/SVG\r\n */\r\n sanitizeIcon(icon: string | undefined): SafeHtml {\r\n if (!icon) return '';\r\n return this.sanitizer.bypassSecurityTrustHtml(icon);\r\n }\r\n\r\n // ControlValueAccessor implementation\r\n writeValue(value: string): void {\r\n this.value = value || '';\r\n this.cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.cdr.markForCheck();\r\n }\r\n}\r\n","<div [class]=\"wrapperClasses.join(' ')\">\r\n <!-- Input Wrapper -->\r\n <div class=\"pecb-input__wrapper\">\r\n <!-- Left Icon -->\r\n <span\r\n *ngIf=\"computedLeftIcon\"\r\n class=\"pecb-input__icon pecb-input__icon--left\"\r\n aria-hidden=\"true\"\r\n >\r\n <ng-container [ngSwitch]=\"computedLeftIcon\">\r\n <svg *ngSwitchCase=\"'email'\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M2 3H14C14.55 3 15 3.45 15 4V12C15 12.55 14.55 13 14 13H2C1.45 13 1 12.55 1 12V4C1 3.45 1.45 3 2 3ZM8 8.5L2.5 5V11.5H13.5V5L8 8.5ZM8 7L13.5 3.5H2.5L8 7Z\"/>\r\n </svg>\r\n <svg *ngSwitchCase=\"'search'\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z\"/>\r\n </svg>\r\n <svg *ngSwitchCase=\"'user'\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M8 8C10.21 8 12 6.21 12 4C12 1.79 10.21 0 8 0C5.79 0 4 1.79 4 4C4 6.21 5.79 8 8 8ZM8 10C5.33 10 0 11.34 0 14V16H16V14C16 11.34 10.67 10 8 10Z\"/>\r\n </svg>\r\n <span *ngSwitchDefault [innerHTML]=\"sanitizeIcon(computedLeftIcon)\"></span>\r\n </ng-container>\r\n </span>\r\n\r\n <!-- Input -->\r\n <input\r\n #inputElement\r\n [id]=\"id\"\r\n [type]=\"inputType\"\r\n class=\"pecb-input__field\"\r\n [value]=\"value\"\r\n [disabled]=\"disabled\"\r\n [readonly]=\"readonly\"\r\n [required]=\"required\"\r\n [attr.maxlength]=\"maxLength\"\r\n [attr.min]=\"min\"\r\n [attr.max]=\"max\"\r\n [attr.step]=\"step\"\r\n [attr.autocomplete]=\"autocomplete\"\r\n [attr.aria-label]=\"label || placeholder\"\r\n [attr.aria-required]=\"required\"\r\n [attr.aria-invalid]=\"error\"\r\n [attr.aria-describedby]=\"helperText || errorMessage ? id + '-description' : null\"\r\n (input)=\"onInput($event)\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n />\r\n\r\n <!-- Floating Label -->\r\n <label\r\n *ngIf=\"label\"\r\n [attr.for]=\"id\"\r\n class=\"pecb-input__label\"\r\n >\r\n {{ label }}<span *ngIf=\"required\" class=\"pecb-input__required\">*</span>\r\n </label>\r\n\r\n <!-- Clear Button -->\r\n <button\r\n *ngIf=\"showClearButton\"\r\n type=\"button\"\r\n class=\"pecb-input__icon pecb-input__icon--clear\"\r\n [attr.aria-label]=\"'Clear input'\"\r\n (click)=\"clearValue($event)\"\r\n >\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M8 0C3.6 0 0 3.6 0 8C0 12.4 3.6 16 8 16C12.4 16 16 12.4 16 8C16 3.6 12.4 0 8 0ZM11.5 10.1L10.1 11.5L8 9.4L5.9 11.5L4.5 10.1L6.6 8L4.5 5.9L5.9 4.5L8 6.6L10.1 4.5L11.5 5.9L9.4 8L11.5 10.1Z\"/>\r\n </svg>\r\n </button>\r\n\r\n <!-- Password Toggle -->\r\n <button\r\n *ngIf=\"showPasswordToggle\"\r\n type=\"button\"\r\n class=\"pecb-input__icon pecb-input__icon--password\"\r\n [attr.aria-label]=\"showPassword ? 'Hide password' : 'Show password'\"\r\n (click)=\"togglePasswordVisibility($event)\"\r\n >\r\n <svg *ngIf=\"!showPassword\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M8 3C4.5 3 1.5 5.5 0 8C1.5 10.5 4.5 13 8 13C11.5 13 14.5 10.5 16 8C14.5 5.5 11.5 3 8 3ZM8 11C6.34 11 5 9.66 5 8C5 6.34 6.34 5 8 5C9.66 5 11 6.34 11 8C11 9.66 9.66 11 8 11ZM8 6.5C7.17 6.5 6.5 7.17 6.5 8C6.5 8.83 7.17 9.5 8 9.5C8.83 9.5 9.5 8.83 9.5 8C9.5 7.17 8.83 6.5 8 6.5Z\"/>\r\n </svg>\r\n <svg *ngIf=\"showPassword\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M8 3C11.5 3 14.5 5.5 16 8C15.4 9.1 14.5 10 13.5 10.7L11.9 9.1C12.3 8.8 12.5 8.4 12.5 8C12.5 6.62 11.38 5.5 10 5.5C9.6 5.5 9.2 5.7 8.9 5.9L7.3 4.3C7.5 4.1 7.7 4 8 4C8 4 8 4 8 3ZM1.3 2.3L3 4C1.8 4.9 0.8 6.1 0 8C1.5 10.5 4.5 13 8 13C9.3 13 10.5 12.6 11.6 12L13.7 14.1L15.1 12.7L2.7 0.3L1.3 2.3ZM5.5 6.8L7.2 8.5C7.1 8.6 7 8.8 7 9C7 9.83 7.67 10.5 8.5 10.5C8.7 10.5 8.9 10.4 9 10.3L10.7 12C9.9 12.3 9 12.5 8 12.5C4.5 12.5 1.5 10 0 7.5C0.7 6.4 1.6 5.4 2.7 4.8L5.5 6.8Z\"/>\r\n </svg>\r\n </button>\r\n\r\n <!-- Right Icon -->\r\n <span\r\n *ngIf=\"computedRightIcon && !showClearButton && !showPasswordToggle\"\r\n class=\"pecb-input__icon pecb-input__icon--right\"\r\n aria-hidden=\"true\"\r\n >\r\n <ng-container [ngSwitch]=\"computedRightIcon\">\r\n <svg *ngSwitchCase=\"'email'\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M2 3H14C14.55 3 15 3.45 15 4V12C15 12.55 14.55 13 14 13H2C1.45 13 1 12.55 1 12V4C1 3.45 1.45 3 2 3ZM8 8.5L2.5 5V11.5H13.5V5L8 8.5ZM8 7L13.5 3.5H2.5L8 7Z\"/>\r\n </svg>\r\n <svg *ngSwitchCase=\"'search'\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z\"/>\r\n </svg>\r\n <svg *ngSwitchCase=\"'user'\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M8 8C10.21 8 12 6.21 12 4C12 1.79 10.21 0 8 0C5.79 0 4 1.79 4 4C4 6.21 5.79 8 8 8ZM8 10C5.33 10 0 11.34 0 14V16H16V14C16 11.34 10.67 10 8 10Z\"/>\r\n </svg>\r\n <span *ngSwitchDefault [innerHTML]=\"sanitizeIcon(computedRightIcon)\"></span>\r\n </ng-container>\r\n </span>\r\n </div>\r\n\r\n <!-- Helper Text / Error Message -->\r\n <div\r\n *ngIf=\"helperText || errorMessage\"\r\n [id]=\"id + '-description'\"\r\n class=\"pecb-input__description\"\r\n [class.pecb-input__description--error]=\"error && errorMessage\"\r\n >\r\n <span *ngIf=\"error && errorMessage\">{{ errorMessage }}</span>\r\n <span *ngIf=\"!error && helperText\">{{ helperText }}</span>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n forwardRef,\r\n ChangeDetectorRef\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\r\n\r\nexport type RadioVariant = 'dot' | 'filled';\r\nexport type RadioLabelPosition = 'right' | 'left';\r\n\r\n/**\r\n * A professional radio button component with label and description support.\r\n * Fully accessible with WCAG 2.1 AA compliance and reactive forms support.\r\n *\r\n * @example\r\n * ```html\r\n * <!-- Default variant with inner dot -->\r\n * <pecb-radio\r\n * label=\"Option 1\"\r\n * description=\"This is a description\"\r\n * [(ngModel)]=\"selectedValue\"\r\n * value=\"option1\"\r\n * ></pecb-radio>\r\n *\r\n * <!-- Filled variant -->\r\n * <pecb-radio\r\n * label=\"Option 1\"\r\n * variant=\"filled\"\r\n * [(ngModel)]=\"selectedValue\"\r\n * value=\"option1\"\r\n * ></pecb-radio>\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Component({\r\n selector: 'pecb-radio',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './radio.component.html',\r\n styleUrls: ['./radio.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RadioComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class RadioComponent implements ControlValueAccessor {\r\n /**\r\n * Unique ID for the radio element\r\n */\r\n @Input() id: string = generateUniqueId('radio');\r\n\r\n /**\r\n * Name attribute for the radio group\r\n */\r\n @Input() name?: string;\r\n\r\n /**\r\n * Value of this radio button\r\n */\r\n @Input() value: unknown;\r\n\r\n /**\r\n * Visual variant of the radio button\r\n */\r\n @Input() variant: RadioVariant = 'dot';\r\n\r\n /**\r\n * Label text to display\r\n */\r\n @Input() label?: string;\r\n\r\n /**\r\n * Description text to display below label\r\n */\r\n @Input() description?: string;\r\n\r\n /**\r\n * Position of the label relative to the radio control.\r\n * 'right' (default): [radio] Title Description\r\n * 'left': Title Description [radio]\r\n */\r\n @Input() labelPosition: RadioLabelPosition = 'right';\r\n\r\n /**\r\n * Whether the radio is disabled\r\n */\r\n @Input() disabled = false;\r\n\r\n /**\r\n * Event emitted when selection changes\r\n */\r\n @Output() selectionChange = new EventEmitter<unknown>();\r\n\r\n // Internal state\r\n checked = false;\r\n\r\n // ControlValueAccessor\r\n private onChange: (value: unknown) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n constructor(private cdr: ChangeDetectorRef) {}\r\n\r\n /**\r\n * Get CSS classes for the radio wrapper\r\n */\r\n get wrapperClasses(): string[] {\r\n return [\r\n 'pecb-radio',\r\n `pecb-radio--${this.variant}`,\r\n this.disabled ? 'pecb-radio--disabled' : '',\r\n this.checked ? 'pecb-radio--checked' : '',\r\n this.labelPosition === 'left' ? 'pecb-radio--label-left' : ''\r\n ].filter(Boolean);\r\n }\r\n\r\n /**\r\n * Handle radio selection\r\n */\r\n onRadioChange(event: Event): void {\r\n if (this.disabled) return;\r\n\r\n const checked = (event.target as HTMLInputElement).checked;\r\n if (checked) {\r\n this.checked = true;\r\n this.onChange(this.value);\r\n this.selectionChange.emit(this.value);\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n\r\n /**\r\n * Handle blur event\r\n */\r\n onBlur(): void {\r\n this.onTouched();\r\n }\r\n\r\n // ControlValueAccessor implementation\r\n writeValue(value: unknown): void {\r\n this.checked = value === this.value;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (value: unknown) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.cdr.markForCheck();\r\n }\r\n}\r\n","<div [class]=\"wrapperClasses.join(' ')\">\r\n <label [attr.for]=\"id\" class=\"pecb-radio__label\">\r\n <input\r\n [id]=\"id\"\r\n type=\"radio\"\r\n class=\"pecb-radio__input\"\r\n [name]=\"name\"\r\n [value]=\"value\"\r\n [checked]=\"checked\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"label\"\r\n [attr.aria-describedby]=\"description ? id + '-description' : null\"\r\n (change)=\"onRadioChange($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <span *ngIf=\"labelPosition === 'left' && (label || description)\" class=\"pecb-radio__content\">\r\n <span *ngIf=\"label\" class=\"pecb-radio__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-radio__description\">{{ description }}</span>\r\n </span>\r\n <span class=\"pecb-radio__control\"></span>\r\n <span *ngIf=\"labelPosition === 'right' && (label || description)\" class=\"pecb-radio__content\">\r\n <span *ngIf=\"label\" class=\"pecb-radio__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-radio__description\">{{ description }}</span>\r\n </span>\r\n </label>\r\n</div>\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n forwardRef,\r\n ChangeDetectorRef\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\r\n\r\nexport type CheckboxLabelPosition = 'right' | 'left';\r\n\r\n/**\r\n * A professional checkbox component with label and description support.\r\n * Fully accessible with WCAG 2.1 AA compliance and reactive forms support.\r\n *\r\n * @example\r\n * ```html\r\n * <pecb-checkbox\r\n * label=\"Accept terms\"\r\n * description=\"I agree to the terms and conditions\"\r\n * [(ngModel)]=\"accepted\"\r\n * ></pecb-checkbox>\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Component({\r\n selector: 'pecb-checkbox',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './checkbox.component.html',\r\n styleUrls: ['./checkbox.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => CheckboxComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class CheckboxComponent implements ControlValueAccessor {\r\n /**\r\n * Unique ID for the checkbox element\r\n */\r\n @Input() id: string = generateUniqueId('checkbox');\r\n\r\n /**\r\n * Name attribute for the checkbox\r\n */\r\n @Input() name?: string;\r\n\r\n /**\r\n * Label text to display\r\n */\r\n @Input() label?: string;\r\n\r\n /**\r\n * Description text to display below label\r\n */\r\n @Input() description?: string;\r\n\r\n /**\r\n * Position of the label relative to the checkbox control.\r\n * 'right' (default): [checkbox] Title Description\r\n * 'left': Title Description [checkbox]\r\n */\r\n @Input() labelPosition: CheckboxLabelPosition = 'right';\r\n\r\n /**\r\n * Whether the checkbox is disabled\r\n */\r\n @Input() disabled = false;\r\n\r\n /**\r\n * Event emitted when checked state changes\r\n */\r\n @Output() checkedChange = new EventEmitter<boolean>();\r\n\r\n // Internal state\r\n checked = false;\r\n\r\n // ControlValueAccessor\r\n private onChange: (value: boolean) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n constructor(private cdr: ChangeDetectorRef) {}\r\n\r\n /**\r\n * Get CSS classes for the checkbox wrapper\r\n */\r\n get wrapperClasses(): string[] {\r\n return [\r\n 'pecb-checkbox',\r\n this.disabled ? 'pecb-checkbox--disabled' : '',\r\n this.checked ? 'pecb-checkbox--checked' : '',\r\n this.labelPosition === 'left' ? 'pecb-checkbox--label-left' : ''\r\n ].filter(Boolean);\r\n }\r\n\r\n /**\r\n * Handle checkbox change\r\n */\r\n onCheckboxChange(event: Event): void {\r\n if (this.disabled) return;\r\n\r\n const checked = (event.target as HTMLInputElement).checked;\r\n this.checked = checked;\r\n this.onChange(this.checked);\r\n this.checkedChange.emit(this.checked);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Handle blur event\r\n */\r\n onBlur(): void {\r\n this.onTouched();\r\n }\r\n\r\n // ControlValueAccessor implementation\r\n writeValue(value: boolean): void {\r\n this.checked = !!value;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (value: boolean) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.cdr.markForCheck();\r\n }\r\n}\r\n","<div [class]=\"wrapperClasses.join(' ')\">\r\n <label [attr.for]=\"id\" class=\"pecb-checkbox__label\">\r\n <input\r\n [id]=\"id\"\r\n type=\"checkbox\"\r\n class=\"pecb-checkbox__input\"\r\n [name]=\"name\"\r\n [checked]=\"checked\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"label\"\r\n [attr.aria-describedby]=\"description ? id + '-description' : null\"\r\n (change)=\"onCheckboxChange($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <span *ngIf=\"labelPosition === 'left' && (label || description)\" class=\"pecb-checkbox__content\">\r\n <span *ngIf=\"label\" class=\"pecb-checkbox__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-checkbox__description\">{{ description }}</span>\r\n </span>\r\n <span class=\"pecb-checkbox__control\">\r\n <svg class=\"pecb-checkbox__icon\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <span *ngIf=\"labelPosition === 'right' && (label || description)\" class=\"pecb-checkbox__content\">\r\n <span *ngIf=\"label\" class=\"pecb-checkbox__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-checkbox__description\">{{ description }}</span>\r\n </span>\r\n </label>\r\n</div>\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n forwardRef,\r\n ChangeDetectorRef\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\r\n\r\nexport type ToggleLabelPosition = 'right' | 'left';\r\n\r\n/**\r\n * A professional toggle/switch component with label and description support.\r\n * Fully accessible with WCAG 2.1 AA compliance and reactive forms support.\r\n *\r\n * @example\r\n * ```html\r\n * <pecb-toggle\r\n * label=\"Enable notifications\"\r\n * description=\"Receive email notifications\"\r\n * [(ngModel)]=\"notificationsEnabled\"\r\n * ></pecb-toggle>\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Component({\r\n selector: 'pecb-toggle',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './toggle.component.html',\r\n styleUrls: ['./toggle.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => ToggleComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class ToggleComponent implements ControlValueAccessor {\r\n /**\r\n * Unique ID for the toggle element\r\n */\r\n @Input() id: string = generateUniqueId('toggle');\r\n\r\n /**\r\n * Name attribute for the toggle\r\n */\r\n @Input() name?: string;\r\n\r\n /**\r\n * Label text to display\r\n */\r\n @Input() label?: string;\r\n\r\n /**\r\n * Description text to display below label\r\n */\r\n @Input() description?: string;\r\n\r\n /**\r\n * Position of the label relative to the toggle control.\r\n * 'right' (default): [toggle] Title Description\r\n * 'left': Title Description [toggle]\r\n */\r\n @Input() labelPosition: ToggleLabelPosition = 'right';\r\n\r\n /**\r\n * Whether the toggle is disabled\r\n */\r\n @Input() disabled = false;\r\n\r\n /**\r\n * Event emitted when toggle state changes\r\n */\r\n @Output() toggleChange = new EventEmitter<boolean>();\r\n\r\n // Internal state\r\n checked = false;\r\n\r\n // ControlValueAccessor\r\n private onChange: (value: boolean) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n constructor(private cdr: ChangeDetectorRef) {}\r\n\r\n /**\r\n * Get CSS classes for the toggle wrapper\r\n */\r\n get wrapperClasses(): string[] {\r\n return [\r\n 'pecb-toggle',\r\n this.disabled ? 'pecb-toggle--disabled' : '',\r\n this.checked ? 'pecb-toggle--checked' : '',\r\n this.labelPosition === 'left' ? 'pecb-toggle--label-left' : ''\r\n ].filter(Boolean);\r\n }\r\n\r\n /**\r\n * Handle toggle change\r\n */\r\n onToggleChange(event: Event): void {\r\n if (this.disabled) return;\r\n\r\n const checked = (event.target as HTMLInputElement).checked;\r\n this.checked = checked;\r\n this.onChange(this.checked);\r\n this.toggleChange.emit(this.checked);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Handle blur event\r\n */\r\n onBlur(): void {\r\n this.onTouched();\r\n }\r\n\r\n // ControlValueAccessor implementation\r\n writeValue(value: boolean): void {\r\n this.checked = !!value;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (value: boolean) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.cdr.markForCheck();\r\n }\r\n}\r\n","<div [class]=\"wrapperClasses.join(' ')\">\r\n <label [attr.for]=\"id\" class=\"pecb-toggle__label\">\r\n <input\r\n [id]=\"id\"\r\n type=\"checkbox\"\r\n role=\"switch\"\r\n class=\"pecb-toggle__input\"\r\n [name]=\"name\"\r\n [checked]=\"checked\"\r\n [disabled]=\"disabled\"\r\n [attr.aria-label]=\"label\"\r\n [attr.aria-describedby]=\"description ? id + '-description' : null\"\r\n [attr.aria-checked]=\"checked\"\r\n (change)=\"onToggleChange($event)\"\r\n (blur)=\"onBlur()\"\r\n />\r\n <span *ngIf=\"labelPosition === 'left' && (label || description)\" class=\"pecb-toggle__content\">\r\n <span *ngIf=\"label\" class=\"pecb-toggle__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-toggle__description\">{{ description }}</span>\r\n </span>\r\n <span class=\"pecb-toggle__control\">\r\n <span class=\"pecb-toggle__thumb\"></span>\r\n </span>\r\n <span *ngIf=\"labelPosition === 'right' && (label || description)\" class=\"pecb-toggle__content\">\r\n <span *ngIf=\"label\" class=\"pecb-toggle__text\">{{ label }}</span>\r\n <span *ngIf=\"description\" [id]=\"id + '-description'\" class=\"pecb-toggle__description\">{{ description }}</span>\r\n </span>\r\n </label>\r\n</div>\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy,\r\n forwardRef,\r\n ChangeDetectorRef,\r\n HostListener,\r\n ElementRef,\r\n ViewChild\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\r\n\r\nexport interface DropdownOption {\r\n label: string;\r\n value: unknown;\r\n disabled?: boolean;\r\n}\r\n\r\nexport type DropdownSize = 'sm' | 'md' | 'lg';\r\n\r\n/**\r\n * A professional dropdown/select component with multi-select and search support.\r\n * Fully accessible with WCAG 2.1 AA compliance and reactive forms support.\r\n *\r\n * @example\r\n * ```html\r\n * <!-- Single select -->\r\n * <pecb-dropdown\r\n * label=\"Select option\"\r\n * [options]=\"options\"\r\n * [(ngModel)]=\"selectedValue\"\r\n * ></pecb-dropdown>\r\n *\r\n * <!-- Multi-select with search -->\r\n * <pecb-dropdown\r\n * label=\"Select multiple\"\r\n * [options]=\"options\"\r\n * [multiple]=\"true\"\r\n * [searchable]=\"true\"\r\n * [(ngModel)]=\"selectedValues\"\r\n * ></pecb-dropdown>\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Component({\r\n selector: 'pecb-dropdown',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './dropdown.component.html',\r\n styleUrls: ['./dropdown.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => DropdownComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class DropdownComponent implements ControlValueAccessor {\r\n @ViewChild('searchInput') searchInput?: ElementRef<HTMLInputElement>;\r\n\r\n /**\r\n * Unique ID for the dropdown element\r\n */\r\n @Input() id: string = generateUniqueId('dropdown');\r\n\r\n /**\r\n * Label text to display\r\n */\r\n @Input() label?: string;\r\n\r\n /**\r\n * The size of the dropdown\r\n */\r\n @Input() size: DropdownSize = 'md';\r\n\r\n /**\r\n * List of options\r\n */\r\n @Input() options: DropdownOption[] = [];\r\n\r\n /**\r\n * Whether multiple selection is enabled\r\n */\r\n @Input() multiple = false;\r\n\r\n /**\r\n * Whether search is enabled\r\n */\r\n @Input() searchable = false;\r\n\r\n /**\r\n * Maximum height for dropdown panel (in pixels)\r\n */\r\n @Input() maxHeight = 300;\r\n\r\n /**\r\n * Whether the dropdown is disabled\r\n */\r\n @Input() disabled = false;\r\n\r\n /**\r\n * Whether the field is required\r\n */\r\n @Input() required = false;\r\n\r\n /**\r\n * Whether to show error state\r\n */\r\n @Input() error = false;\r\n\r\n /**\r\n * Error message to display\r\n */\r\n @Input() errorMessage?: string;\r\n\r\n /**\r\n * Helper text to display below dropdown\r\n */\r\n @Input() helperText?: string;\r\n\r\n /**\r\n * Event emitted when selection changes\r\n */\r\n @Output() selectionChange = new EventEmitter<unknown | unknown[]>();\r\n\r\n // Internal state\r\n isOpen = false;\r\n searchQuery = '';\r\n selectedValues: unknown[] = [];\r\n focusedIndex = -1;\r\n\r\n // ControlValueAccessor\r\n private onChange: (value: unknown) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n constructor(\r\n private cdr: ChangeDetectorRef,\r\n private elementRef: ElementRef\r\n ) {}\r\n\r\n /**\r\n * Get CSS classes for the dropdown wrapper\r\n */\r\n get wrapperClasses(): string[] {\r\n return [\r\n 'pecb-dropdown',\r\n `pecb-dropdown--${this.size}`,\r\n this.disabled ? 'pecb-dropdown--disabled' : '',\r\n this.error ? 'pecb-dropdown--error' : '',\r\n this.isOpen ? 'pecb-dropdown--open' : '',\r\n this.hasValue ? 'pecb-dropdown--has-value' : ''\r\n ].filter(Boolean);\r\n }\r\n\r\n /**\r\n * Check if dropdown has value\r\n */\r\n get hasValue(): boolean {\r\n return this.multiple ? this.selectedValues.length > 0 : this.selectedValues.length > 0;\r\n }\r\n\r\n /**\r\n * Get filtered options based on search query\r\n */\r\n get filteredOptions(): DropdownOption[] {\r\n if (!this.searchQuery) {\r\n return this.options;\r\n }\r\n const query = this.searchQuery.toLowerCase();\r\n return this.options.filter(option =>\r\n option.label.toLowerCase().includes(query)\r\n );\r\n }\r\n\r\n /**\r\n * Get display text for selected value(s)\r\n */\r\n get displayText(): string {\r\n if (!this.hasValue) {\r\n return '';\r\n }\r\n\r\n if (this.multiple) {\r\n const selectedOptions = this.options.filter(opt =>\r\n this.selectedValues.includes(opt.value)\r\n );\r\n return selectedOptions.map(opt => opt.label).join(', ');\r\n } else {\r\n const selectedOption = this.options.find(opt =>\r\n opt.value === this.selectedValues[0]\r\n );\r\n return selectedOption?.label || '';\r\n }\r\n }\r\n\r\n /**\r\n * Toggle dropdown open/close\r\n */\r\n toggleDropdown(): void {\r\n if (this.disabled) return;\r\n\r\n this.isOpen = !this.isOpen;\r\n\r\n if (this.isOpen) {\r\n this.onTouched();\r\n this.focusedIndex = -1;\r\n\r\n // Focus search input if searchable\r\n if (this.searchable) {\r\n setTimeout(() => {\r\n this.searchInput?.nativeElement.focus();\r\n }, 0);\r\n }\r\n } else {\r\n this.searchQuery = '';\r\n }\r\n\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Select an option\r\n */\r\n selectOption(option: DropdownOption): void {\r\n if (option.disabled) return;\r\n\r\n if (this.multiple) {\r\n const index = this.selectedValues.indexOf(option.value);\r\n if (index > -1) {\r\n this.selectedValues.splice(index, 1);\r\n } else {\r\n this.selectedValues.push(option.value);\r\n }\r\n this.onChange([...this.selectedValues]);\r\n this.selectionChange.emit([...this.selectedValues]);\r\n } else {\r\n this.selectedValues = [option.value];\r\n this.onChange(option.value);\r\n this.selectionChange.emit(option.value);\r\n this.isOpen = false;\r\n this.searchQuery = '';\r\n }\r\n\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Check if option is selected\r\n */\r\n isSelected(option: DropdownOption): boolean {\r\n return this.selectedValues.includes(option.value);\r\n }\r\n\r\n /**\r\n * Handle search input\r\n */\r\n onSearchInput(event: Event): void {\r\n const target = event.target as HTMLInputElement;\r\n this.searchQuery = target.value;\r\n this.focusedIndex = -1;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Handle keyboard navigation\r\n */\r\n onKeyDown(event: KeyboardEvent): void {\r\n if (this.disabled) return;\r\n\r\n const filteredOptions = this.filteredOptions;\r\n\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n if (!this.isOpen) {\r\n event.preventDefault();\r\n this.toggleDropdown();\r\n } else if (this.focusedIndex >= 0 && this.focusedIndex < filteredOptions.length) {\r\n event.preventDefault();\r\n this.selectOption(filteredOptions[this.focusedIndex]);\r\n }\r\n break;\r\n\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n if (!this.isOpen) {\r\n this.toggleDropdown();\r\n } else {\r\n this.focusedIndex = Math.min(this.focusedIndex + 1, filteredOptions.length - 1);\r\n this.cdr.markForCheck();\r\n }\r\n break;\r\n\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n if (this.isOpen) {\r\n this.focusedIndex = Math.max(this.focusedIndex - 1, 0);\r\n this.cdr.markForCheck();\r\n }\r\n break;\r\n\r\n case 'Escape':\r\n if (this.isOpen) {\r\n event.preventDefault();\r\n this.isOpen = false;\r\n this.searchQuery = '';\r\n this.cdr.markForCheck();\r\n }\r\n break;\r\n\r\n case 'Tab':\r\n if (this.isOpen) {\r\n this.isOpen = false;\r\n this.searchQuery = '';\r\n this.cdr.markForCheck();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Close dropdown when clicking outside\r\n */\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: MouseEvent): void {\r\n if (!this.elementRef.nativeElement.contains(event.target)) {\r\n if (this.isOpen) {\r\n this.isOpen = false;\r\n this.searchQuery = '';\r\n this.cdr.markForCheck();\r\n }\r\n }\r\n }\r\n\r\n // ControlValueAccessor implementation\r\n writeValue(value: unknown): void {\r\n if (this.multiple) {\r\n this.selectedValues = Array.isArray(value) ? value : [];\r\n } else {\r\n this.selectedValues = value != null ? [value] : [];\r\n }\r\n this.cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (value: unknown) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled = isDisabled;\r\n this.cdr.markForCheck();\r\n }\r\n}\r\n","<div [class]=\"wrapperClasses.join(' ')\">\r\n <!-- Dropdown Trigger -->\r\n <div\r\n class=\"pecb-dropdown__trigger\"\r\n [attr.tabindex]=\"disabled ? -1 : 0\"\r\n [attr.aria-label]=\"label\"\r\n [attr.aria-expanded]=\"isOpen\"\r\n [attr.aria-haspopup]=\"true\"\r\n [attr.aria-disabled]=\"disabled\"\r\n (click)=\"toggleDropdown()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n >\r\n <span class=\"pecb-dropdown__value\">{{ displayText }}</span>\r\n\r\n <!-- Floating Label -->\r\n <label\r\n *ngIf=\"label\"\r\n [attr.for]=\"id\"\r\n class=\"pecb-dropdown__label\"\r\n >\r\n {{ label }}<span *ngIf=\"required\" class=\"pecb-dropdown__required\">*</span>\r\n </label>\r\n\r\n <!-- Dropdown Arrow -->\r\n <span class=\"pecb-dropdown__arrow\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"currentColor\">\r\n <path d=\"M6 8L2 4H10L6 8Z\"/>\r\n </svg>\r\n </span>\r\n </div>\r\n\r\n <!-- Dropdown Panel -->\r\n <div\r\n *ngIf=\"isOpen\"\r\n class=\"pecb-dropdown__panel\"\r\n [style.max-height.px]=\"maxHeight\"\r\n >\r\n <!-- Search Input -->\r\n <div *ngIf=\"searchable\" class=\"pecb-dropdown__search\">\r\n <svg class=\"pecb-dropdown__search-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\r\n <path d=\"M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z\"/>\r\n </svg>\r\n <input\r\n #searchInput\r\n type=\"text\"\r\n class=\"pecb-dropdown__search-input\"\r\n placeholder=\"Search\"\r\n [value]=\"searchQuery\"\r\n (input)=\"onSearchInput($event)\"\r\n (keydown)=\"onKeyDown($event)\"\r\n />\r\n </div>\r\n\r\n <!-- Options List -->\r\n <div class=\"pecb-dropdown__options\">\r\n <div\r\n *ngFor=\"let option of filteredOptions; let i = index\"\r\n class=\"pecb-dropdown__option\"\r\n [class.pecb-dropdown__option--selected]=\"isSelected(option)\"\r\n [class.pecb-dropdown__option--disabled]=\"option.disabled\"\r\n [class.pecb-dropdown__option--focused]=\"i === focusedIndex\"\r\n (click)=\"selectOption(option)\"\r\n >\r\n <!-- Checkbox for multi-select -->\r\n <span *ngIf=\"multiple\" class=\"pecb-dropdown__checkbox\">\r\n <span class=\"pecb-dropdown__checkbox-control\" [class.pecb-dropdown__checkbox-control--checked]=\"isSelected(option)\">\r\n <svg *ngIf=\"isSelected(option)\" class=\"pecb-dropdown__checkbox-icon\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n </span>\r\n\r\n <!-- Option Label -->\r\n <span class=\"pecb-dropdown__option-label\">{{ option.label }}</span>\r\n </div>\r\n\r\n <!-- No results message -->\r\n <div *ngIf=\"filteredOptions.length === 0\" class=\"pecb-dropdown__no-results\">\r\n No results found\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Helper Text / Error Message -->\r\n <div\r\n *ngIf=\"helperText || errorMessage\"\r\n [id]=\"id + '-description'\"\r\n class=\"pecb-dropdown__description\"\r\n [class.pecb-dropdown__description--error]=\"error && errorMessage\"\r\n >\r\n <span *ngIf=\"error && errorMessage\">{{ errorMessage }}</span>\r\n <span *ngIf=\"!error && helperText\">{{ helperText }}</span>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n Directive,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n ChangeDetectionStrategy,\r\n ElementRef,\r\n ViewChild,\r\n AfterViewInit\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { generateUniqueId, trapFocus, disableBodyScroll } from '../../shared/utils/dom.utils';\r\n\r\nexport type RightModalSize = 'sm' | 'md' | 'lg';\r\n\r\n/**\r\n * A right-side sliding modal/drawer component.\r\n * Slides in from the right edge of the screen with backdrop overlay.\r\n * Fully accessible with WCAG 2.1 AA compliance.\r\n *\r\n * @example\r\n * ```html\r\n * <pecb-right-modal\r\n * [isOpen]=\"isModalOpen\"\r\n * (closed)=\"onModalClose()\"\r\n * ariaLabel=\"Exam Details\"\r\n * >\r\n * <div pecbRightModalHeader>\r\n * <h2>Exam Details</h2>\r\n * </div>\r\n * <div pecbRightModalContent>\r\n * <p>Modal content goes here</p>\r\n * </div>\r\n * <div pecbRightModalFooter>\r\n * <button>Action</button>\r\n * </div>\r\n * </pecb-right-modal>\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Component({\r\n selector: 'pecb-right-modal',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './right-modal.component.html',\r\n styleUrls: ['./right-modal.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class RightModalComponent implements OnInit, OnDestroy, AfterViewInit {\r\n /**\r\n * Unique ID for the modal element\r\n */\r\n @Input() id: string = generateUniqueId('right-modal');\r\n\r\n /**\r\n * Whether the modal is open\r\n */\r\n @Input() isOpen = false;\r\n\r\n /**\r\n * Size of the modal panel\r\n */\r\n @Input() size: RightModalSize = 'md';\r\n\r\n /**\r\n * Whether clicking the backdrop closes the modal\r\n */\r\n @Input() closeOnBackdropClick = true;\r\n\r\n /**\r\n * Whether pressing Escape closes the modal\r\n */\r\n @Input() closeOnEscape = true;\r\n\r\n /**\r\n * Whether to show the close button\r\n */\r\n @Input() showCloseButton = true;\r\n\r\n // --- ARIA Accessibility Properties ---\r\n\r\n /**\r\n * Accessible label for the modal\r\n */\r\n @Input() ariaLabel?: string;\r\n\r\n /**\r\n * ID of element that labels this modal\r\n */\r\n @Input() ariaLabelledBy?: string;\r\n\r\n /**\r\n * ID of element that describes this modal\r\n */\r\n @Input() ariaDescribedBy?: string;\r\n\r\n /**\r\n * Emitted when the modal is closed\r\n */\r\n @Output() closed = new EventEmitter<void>();\r\n\r\n /**\r\n * Emitted when the modal is opened\r\n */\r\n @Output() opened = new EventEmitter<void>();\r\n\r\n @ViewChild('modalPanel') modalPanel!: ElementRef<HTMLElement>;\r\n\r\n private cleanupFocusTrap: (() => void) | null = null;\r\n private cleanupBodyScroll: (() => void) | null = null;\r\n private previousActiveElement: Element | null = null;\r\n\r\n ngOnInit(): void {\r\n if (this.isOpen) {\r\n this.onOpen();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (this.isOpen && this.modalPanel) {\r\n this.setupFocusTrap();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.cleanup();\r\n }\r\n\r\n /**\r\n * Get CSS classes for the modal container\r\n */\r\n get modalClasses(): string[] {\r\n return [\r\n 'pecb-right-modal',\r\n this.isOpen ? 'pecb-right-modal--open' : ''\r\n ].filter(Boolean);\r\n }\r\n\r\n /**\r\n * Get CSS classes for the modal panel\r\n */\r\n get panelClasses(): string[] {\r\n return [\r\n 'pecb-right-modal__panel',\r\n `pecb-right-modal__panel--${this.size}`\r\n ];\r\n }\r\n\r\n /**\r\n * Handle backdrop click\r\n */\r\n onBackdropClick(event: MouseEvent): void {\r\n if (this.closeOnBackdropClick && event.target === event.currentTarget) {\r\n this.close();\r\n }\r\n }\r\n\r\n /**\r\n * Handle keyboard events\r\n */\r\n onKeydown(event: KeyboardEvent): void {\r\n if (this.closeOnEscape && event.key === 'Escape') {\r\n event.preventDefault();\r\n this.close();\r\n }\r\n }\r\n\r\n /**\r\n * Close the modal\r\n */\r\n close(): void {\r\n this.cleanup();\r\n this.closed.emit();\r\n }\r\n\r\n /**\r\n * Called when modal opens\r\n */\r\n private onOpen(): void {\r\n this.previousActiveElement = document.activeElement;\r\n this.cleanupBodyScroll = disableBodyScroll();\r\n this.opened.emit();\r\n }\r\n\r\n /**\r\n * Setup focus trap after view is ready\r\n */\r\n private setupFocusTrap(): void {\r\n if (this.modalPanel?.nativeElement) {\r\n this.cleanupFocusTrap = trapFocus(this.modalPanel.nativeElement);\r\n }\r\n }\r\n\r\n /**\r\n * Cleanup resources\r\n */\r\n private cleanup(): void {\r\n if (this.cleanupFocusTrap) {\r\n this.cleanupFocusTrap();\r\n this.cleanupFocusTrap = null;\r\n }\r\n if (this.cleanupBodyScroll) {\r\n this.cleanupBodyScroll();\r\n this.cleanupBodyScroll = null;\r\n }\r\n if (this.previousActiveElement instanceof HTMLElement) {\r\n this.previousActiveElement.focus();\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Header directive for right modal\r\n */\r\n@Directive({\r\n selector: '[pecbRightModalHeader]',\r\n standalone: true,\r\n host: { class: 'pecb-right-modal__header' }\r\n})\r\nexport class RightModalHeaderDirective {}\r\n\r\n/**\r\n * Content directive for right modal\r\n */\r\n@Directive({\r\n selector: '[pecbRightModalContent]',\r\n standalone: true,\r\n host: { class: 'pecb-right-modal__content' }\r\n})\r\nexport class RightModalContentDirective {}\r\n\r\n/**\r\n * Footer directive for right modal\r\n */\r\n@Directive({\r\n selector: '[pecbRightModalFooter]',\r\n standalone: true,\r\n host: { class: 'pecb-right-modal__footer' }\r\n})\r\nexport class RightModalFooterDirective {}","<div\r\n *ngIf=\"isOpen\"\r\n [id]=\"id\"\r\n [class]=\"modalClasses.join(' ')\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-label]=\"ariaLabel\"\r\n [attr.aria-labelledby]=\"ariaLabelledBy\"\r\n [attr.aria-describedby]=\"ariaDescribedBy\"\r\n (click)=\"onBackdropClick($event)\"\r\n (keydown)=\"onKeydown($event)\"\r\n>\r\n <div\r\n #modalPanel\r\n [class]=\"panelClasses.join(' ')\"\r\n tabindex=\"-1\"\r\n >\r\n <button\r\n *ngIf=\"showCloseButton\"\r\n type=\"button\"\r\n class=\"pecb-right-modal__close-btn\"\r\n aria-label=\"Close modal\"\r\n (click)=\"close()\"\r\n >\r\n <svg\r\n width=\"24\"\r\n height=\"24\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n aria-hidden=\"true\"\r\n >\r\n <path\r\n d=\"M18 6L6 18M6 6L18 18\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </button>\r\n\r\n <ng-content select=\"[pecbRightModalHeader]\"></ng-content>\r\n <ng-content select=\"[pecbRightModalContent]\"></ng-content>\r\n <ng-content></ng-content>\r\n <ng-content select=\"[pecbRightModalFooter]\"></ng-content>\r\n </div>\r\n</div>\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectionStrategy\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\nexport interface SidebarMenuItem {\r\n id: string;\r\n label: string;\r\n icon?: string;\r\n route?: string;\r\n active?: boolean;\r\n children?: SidebarMenuItem[];\r\n expanded?: boolean;\r\n}\r\n\r\nexport interface SidebarSection {\r\n id: string;\r\n title?: string;\r\n items: SidebarMenuItem[];\r\n}\r\n\r\n/**\r\n * A professional sidebar navigation component with collapsible sections and nested items.\r\n * Perfect for application navigation with hierarchical menu structures.\r\n *\r\n * @example\r\n * ```html\r\n * <!-- Basic sidebar -->\r\n * <pecb-sidebar\r\n * [sections]=\"menuSections\"\r\n * (itemClick)=\"onMenuItemClick($event)\"\r\n * ></pecb-sidebar>\r\n *\r\n * <!-- With logo header -->\r\n * <pecb-sidebar\r\n * [sections]=\"menuSections\"\r\n * [showHeader]=\"true\"\r\n * [sidebarLogo]=\"logoSvg\"\r\n * ></pecb-sidebar>\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Component({\r\n selector: 'pecb-sidebar',\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: './sidebar.component.html',\r\n styleUrls: ['./sidebar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SidebarComponent {\r\n constructor(private sanitizer: DomSanitizer) {}\r\n\r\n /**\r\n * Array of sidebar sections with menu items\r\n */\r\n @Input() sections: SidebarSection[] = [];\r\n\r\n /**\r\n * Whether to show the header section\r\n */\r\n @Input() showHeader = true;\r\n\r\n /**\r\n * Sidebar logo as an SVG string. Rendered in the header area.\r\n */\r\n @Input() sidebarLogo?: string;\r\n\r\n /**\r\n * Whether to show the footer section\r\n */\r\n @Input() showFooter = false;\r\n\r\n /**\r\n * Whether the sidebar is collapsed\r\n */\r\n @Input() collapsed = false;\r\n\r\n /**\r\n * Event emitted when a menu item is clicked\r\n */\r\n @Output() itemClick = new EventEmitter<SidebarMenuItem>();\r\n\r\n /**\r\n * Event emitted when the sidebar collapse state changes\r\n */\r\n @Output() collapseChange = new EventEmitter<boolean>();\r\n\r\n /**\r\n * Handle menu item click\r\n */\r\n onItemClick(item: SidebarMenuItem, event: Event): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n // Check if this is a top-level item\r\n const isTopLevel = this.sections.some(section =>\r\n section.items.includes(item)\r\n );\r\n\r\n if (isTopLevel) {\r\n // Collapse all other top-level items\r\n this.sections.forEach(section => {\r\n section.items.forEach(sectionItem => {\r\n if (sectionItem !== item && sectionItem.expanded) {\r\n sectionItem.expanded = false;\r\n }\r\n });\r\n });\r\n }\r\n\r\n if (item.children && item.children.length > 0) {\r\n item.expanded = !item.expanded;\r\n }\r\n\r\n // Always emit the click event, even for items with children\r\n this.itemClick.emit(item);\r\n }\r\n\r\n /**\r\n * Toggle sidebar collapse state\r\n */\r\n toggleCollapse(): void {\r\n this.collapsed = !this.collapsed;\r\n this.collapseChange.emit(this.collapsed);\r\n }\r\n\r\n /**\r\n * Sanitize icon SVG HTML to prevent Angular from stripping SVG elements\r\n */\r\n getSafeIcon(icon: string): SafeHtml {\r\n return this.sanitizer.bypassSecurityTrustHtml(icon);\r\n }\r\n\r\n /**\r\n * TrackBy for sections\r\n */\r\n trackBySection(_index: number, section: SidebarSection): string {\r\n return section.id;\r\n }\r\n\r\n /**\r\n * TrackBy for menu items\r\n */\r\n trackByItem(_index: number, item: SidebarMenuItem): string {\r\n return item.id;\r\n }\r\n\r\n /**\r\n * Get CSS classes for a menu item\r\n */\r\n getItemClasses(item: SidebarMenuItem, isChild = false, isNested = false): string[] {\r\n const classes = [\r\n isChild ? 'pecb-sidebar__subitem' : 'pecb-sidebar__item'\r\n ];\r\n\r\n if (isNested) {\r\n classes.push('pecb-sidebar__subitem--nested');\r\n }\r\n\r\n if (item.active) {\r\n classes.push(isChild ? 'pecb-sidebar__subitem--active' : 'pecb-sidebar__item--active');\r\n }\r\n\r\n if (item.children && item.children.length > 0) {\r\n if (!isChild) {\r\n classes.push('pecb-sidebar__item--has-children');\r\n if (item.expanded) {\r\n classes.push('pecb-sidebar__item--expanded');\r\n }\r\n } else if (isChild && !isNested) {\r\n // Second-level items with children\r\n if (item.expanded) {\r\n classes.push('pecb-sidebar__item--expanded');\r\n }\r\n }\r\n }\r\n\r\n return classes;\r\n }\r\n}\r\n","<aside class=\"pecb-sidebar\" [class.pecb-sidebar--collapsed]=\"collapsed\">\r\n <!-- Collapse Toggle Button -->\r\n <button\r\n class=\"pecb-sidebar__toggle\"\r\n [class.pecb-sidebar__toggle--collapsed]=\"collapsed\"\r\n (click)=\"toggleCollapse()\"\r\n [attr.aria-label]=\"collapsed ? 'Expand sidebar' : 'Collapse sidebar'\"\r\n >\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M10 12L6 8L10 4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </button>\r\n\r\n <!-- Header Section -->\r\n <div *ngIf=\"showHeader\" class=\"pecb-sidebar__header\">\r\n <ng-content select=\"[sidebar-header]\"></ng-content>\r\n <div *ngIf=\"sidebarLogo\" class=\"pecb-sidebar__header-content\">\r\n <span class=\"pecb-sidebar__logo\" [innerHTML]=\"getSafeIcon(sidebarLogo)\"></span>\r\n </div>\r\n </div>\r\n\r\n <!-- Navigation Sections -->\r\n <nav class=\"pecb-sidebar__nav\">\r\n <div *ngFor=\"let section of sections; trackBy: trackBySection\" class=\"pecb-sidebar__section\">\r\n <!-- Section Title -->\r\n <div *ngIf=\"section.title\" class=\"pecb-sidebar__section-title\">\r\n {{ section.title }}\r\n </div>\r\n\r\n <!-- Menu Items -->\r\n <ul class=\"pecb-sidebar__menu\">\r\n <li *ngFor=\"let item of section.items; trackBy: trackByItem\">\r\n <!-- Parent Item -->\r\n <a\r\n [class]=\"getItemClasses(item).join(' ')\"\r\n [attr.href]=\"item.route || '#'\"\r\n (click)=\"onItemClick(item, $event)\"\r\n >\r\n <span *ngIf=\"item.icon\" class=\"pecb-sidebar__icon\" [innerHTML]=\"getSafeIcon(item.icon)\"></span>\r\n <span class=\"pecb-sidebar__label\">{{ item.label }}</span>\r\n </a>\r\n\r\n <!-- Child Items -->\r\n <ul\r\n *ngIf=\"item.children && item.children.length > 0 && !collapsed\"\r\n class=\"pecb-sidebar__submenu\"\r\n [class.pecb-sidebar__submenu--open]=\"item.expanded\"\r\n >\r\n <li *ngFor=\"let child of item.children; trackBy: trackByItem\">\r\n <a\r\n [class]=\"getItemClasses(child, true, false).join(' ')\"\r\n [attr.href]=\"child.route || '#'\"\r\n (click)=\"onItemClick(child, $event)\"\r\n >\r\n <span *ngIf=\"child.icon\" class=\"pecb-sidebar__icon\" [innerHTML]=\"getSafeIcon(child.icon)\"></span>\r\n <span class=\"pecb-sidebar__label\">{{ child.label }}</span>\r\n <span\r\n *ngIf=\"child.children && child.children.length > 0\"\r\n class=\"pecb-sidebar__arrow\"\r\n [class.pecb-sidebar__arrow--expanded]=\"child.expanded\"\r\n >\r\n <!-- Minus icon (expanded) -->\r\n <svg *ngIf=\"child.expanded\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M4 8h8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\r\n </svg>\r\n <!-- Plus icon (collapsed) -->\r\n <svg *ngIf=\"!child.expanded\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8 4v8M4 8h8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\r\n </svg>\r\n </span>\r\n </a>\r\n\r\n <!-- Nested Child Items (Third Level) -->\r\n <ul\r\n *ngIf=\"child.children && child.children.length > 0\"\r\n class=\"pecb-sidebar__submenu\"\r\n [class.pecb-sidebar__submenu--open]=\"child.expanded\"\r\n >\r\n <li *ngFor=\"let nestedChild of child.children; trackBy: trackByItem\">\r\n <a\r\n [class]=\"getItemClasses(nestedChild, true, true).join(' ')\"\r\n [attr.href]=\"nestedChild.route || '#'\"\r\n (click)=\"onItemClick(nestedChild, $event)\"\r\n >\r\n <span class=\"pecb-sidebar__label\">{{ nestedChild.label }}</span>\r\n </a>\r\n </li>\r\n </ul>\r\n </li>\r\n </ul>\r\n </li>\r\n </ul>\r\n </div>\r\n </nav>\r\n\r\n <!-- Footer Section -->\r\n <div *ngIf=\"showFooter\" class=\"pecb-sidebar__footer\">\r\n <ng-content select=\"[sidebar-footer]\"></ng-content>\r\n </div>\r\n</aside>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { ButtonComponent } from './components/button/button.component';\r\nimport {\r\n CardComponent,\r\n CardHeaderComponent,\r\n CardBodyComponent,\r\n CardFooterComponent\r\n} from './components/card/card.component';\r\nimport { StatusComponent } from './components/status/status.component';\r\nimport { PaginationComponent } from './components/pagination/pagination.component';\r\nimport { TableComponent } from './components/table/table.component';\r\nimport { TabComponent } from './components/tab/tab.component';\r\nimport { DatepickerComponent } from './components/datepicker/datepicker.component';\r\nimport { InputComponent } from './components/input/input.component';\r\nimport { RadioComponent } from './components/radio/radio.component';\r\nimport { CheckboxComponent } from './components/checkbox/checkbox.component';\r\nimport { ToggleComponent } from './components/toggle/toggle.component';\r\nimport { DropdownComponent } from './components/dropdown/dropdown.component';\r\nimport {\r\n RightModalComponent,\r\n RightModalHeaderDirective,\r\n RightModalContentDirective,\r\n RightModalFooterDirective\r\n} from './components/right-modal/right-modal.component';\r\nimport { SidebarComponent } from './components/sidebar/sidebar.component';\r\n\r\nconst COMPONENTS = [\r\n ButtonComponent,\r\n CardComponent,\r\n CardHeaderComponent,\r\n CardBodyComponent,\r\n CardFooterComponent,\r\n StatusComponent,\r\n PaginationComponent,\r\n TableComponent,\r\n TabComponent,\r\n DatepickerComponent,\r\n InputComponent,\r\n RadioComponent,\r\n CheckboxComponent,\r\n ToggleComponent,\r\n DropdownComponent,\r\n RightModalComponent,\r\n RightModalHeaderDirective,\r\n RightModalContentDirective,\r\n RightModalFooterDirective,\r\n SidebarComponent\r\n];\r\n\r\n/**\r\n * PECB UI Components Module\r\n *\r\n * A professional Angular components library with TypeScript and SCSS.\r\n * Import this module to use all PECB UI components in your application.\r\n *\r\n * @example\r\n * ```typescript\r\n * import { PecbComponentsModule } from '@pecb-ui/components';\r\n *\r\n * @NgModule({\r\n * imports: [PecbComponentsModule]\r\n * })\r\n * export class AppModule { }\r\n * ```\r\n */\r\n@NgModule({\r\n imports: [CommonModule, ...COMPONENTS],\r\n exports: COMPONENTS\r\n})\r\nexport class PecbComponentsModule {}\r\n","import { Injectable } from '@angular/core';\r\nimport { Subject, Observable } from 'rxjs';\r\n\r\n/**\r\n * Notification types supported by the service\r\n */\r\nexport type NotificationType = 'success' | 'error' | 'warning' | 'info';\r\n\r\n/**\r\n * Notification position on screen\r\n */\r\nexport type NotificationPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center';\r\n\r\n/**\r\n * Notification configuration options\r\n */\r\nexport interface NotificationConfig {\r\n /** Notification message */\r\n message: string;\r\n /** Notification title (optional) */\r\n title?: string;\r\n /** Type of notification */\r\n type: NotificationType;\r\n /** Duration in milliseconds (0 for persistent) */\r\n duration?: number;\r\n /** Whether the notification can be dismissed */\r\n dismissible?: boolean;\r\n /** Position on screen */\r\n position?: NotificationPosition;\r\n /** Custom CSS class */\r\n customClass?: string;\r\n /** Unique identifier */\r\n id?: string;\r\n}\r\n\r\n/**\r\n * Notification object with all properties\r\n */\r\nexport interface Notification extends Required<Omit<NotificationConfig, 'title' | 'customClass'>> {\r\n title?: string;\r\n customClass?: string;\r\n timestamp: Date;\r\n}\r\n\r\n/**\r\n * A stateless, injectable notification service for displaying toast notifications.\r\n *\r\n * This service provides a reactive way to manage notifications across the application.\r\n * It uses RxJS Subjects to emit notification events that can be consumed by notification\r\n * display components.\r\n *\r\n * @example\r\n * ```typescript\r\n * import { NotificationService } from '@pecb-ui/components';\r\n *\r\n * @Component({...})\r\n * export class MyComponent {\r\n * constructor(private notificationService: NotificationService) {}\r\n *\r\n * showSuccess(): void {\r\n * this.notificationService.success('Operation completed successfully!');\r\n * }\r\n *\r\n * showError(): void {\r\n * this.notificationService.error('An error occurred', 'Error Title');\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NotificationService {\r\n private readonly notificationSubject = new Subject<Notification>();\r\n private readonly dismissSubject = new Subject<string>();\r\n private readonly clearSubject = new Subject<void>();\r\n\r\n /** Default duration for notifications in milliseconds */\r\n private readonly defaultDuration = 5000;\r\n /** Default position for notifications */\r\n private readonly defaultPosition: NotificationPosition = 'top-right';\r\n\r\n /**\r\n * Observable stream of notifications\r\n */\r\n get notifications$(): Observable<Notification> {\r\n return this.notificationSubject.asObservable();\r\n }\r\n\r\n /**\r\n * Observable stream of dismissed notification IDs\r\n */\r\n get dismiss$(): Observable<string> {\r\n return this.dismissSubject.asObservable();\r\n }\r\n\r\n /**\r\n * Observable stream for clear all events\r\n */\r\n get clear$(): Observable<void> {\r\n return this.clearSubject.asObservable();\r\n }\r\n\r\n /**\r\n * Show a success notification\r\n * @param message - The notification message\r\n * @param title - Optional title\r\n * @param config - Optional additional configuration\r\n */\r\n success(message: string, title?: string, config?: Partial<NotificationConfig>): string {\r\n return this.show({ ...config, message, title, type: 'success' });\r\n }\r\n\r\n /**\r\n * Show an error notification\r\n * @param message - The notification message\r\n * @param title - Optional title\r\n * @param config - Optional additional configuration\r\n */\r\n error(message: string, title?: string, config?: Partial<NotificationConfig>): string {\r\n return this.show({ ...config, message, title, type: 'error' });\r\n }\r\n\r\n /**\r\n * Show a warning notification\r\n * @param message - The notification message\r\n * @param title - Optional title\r\n * @param config - Optional additional configuration\r\n */\r\n warning(message: string, title?: string, config?: Partial<NotificationConfig>): string {\r\n return this.show({ ...config, message, title, type: 'warning' });\r\n }\r\n\r\n /**\r\n * Show an info notification\r\n * @param message - The notification message\r\n * @param title - Optional title\r\n * @param config - Optional additional configuration\r\n */\r\n info(message: string, title?: string, config?: Partial<NotificationConfig>): string {\r\n return this.show({ ...config, message, title, type: 'info' });\r\n }\r\n\r\n /**\r\n * Show a notification with custom configuration\r\n * @param config - Full notification configuration\r\n * @returns The notification ID\r\n */\r\n show(config: NotificationConfig): string {\r\n const id = config.id || this.generateId();\r\n\r\n const notification: Notification = {\r\n id,\r\n message: config.message,\r\n title: config.title,\r\n type: config.type,\r\n duration: config.duration ?? this.defaultDuration,\r\n dismissible: config.dismissible ?? true,\r\n position: config.position ?? this.defaultPosition,\r\n customClass: config.customClass,\r\n timestamp: new Date()\r\n };\r\n\r\n this.notificationSubject.next(notification);\r\n return id;\r\n }\r\n\r\n /**\r\n * Dismiss a specific notification by ID\r\n * @param id - The notification ID to dismiss\r\n */\r\n dismiss(id: string): void {\r\n this.dismissSubject.next(id);\r\n }\r\n\r\n /**\r\n * Clear all notifications\r\n */\r\n clearAll(): void {\r\n this.clearSubject.next();\r\n }\r\n\r\n /**\r\n * Generate a unique notification ID\r\n */\r\n private generateId(): string {\r\n return `notification-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\r\n }\r\n}\r\n","import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\n\r\n/**\r\n * Available theme modes\r\n */\r\nexport type ThemeMode = 'light' | 'dark' | 'system';\r\n\r\n/**\r\n * Theme configuration interface\r\n */\r\nexport interface ThemeConfig {\r\n /** Current theme mode */\r\n mode: ThemeMode;\r\n /** Resolved theme (light or dark, never system) */\r\n resolvedTheme: 'light' | 'dark';\r\n /** CSS class to apply to the document */\r\n cssClass: string;\r\n}\r\n\r\n/**\r\n * Custom theme variables that can be overridden\r\n */\r\nexport interface ThemeVariables {\r\n /** Primary color */\r\n primaryColor?: string;\r\n /** Secondary color */\r\n secondaryColor?: string;\r\n /** Background color */\r\n backgroundColor?: string;\r\n /** Text color */\r\n textColor?: string;\r\n /** Border radius */\r\n borderRadius?: string;\r\n /** Font family */\r\n fontFamily?: string;\r\n /** Custom CSS variables */\r\n [key: string]: string | undefined;\r\n}\r\n\r\n/**\r\n * Storage key for persisting theme preference\r\n */\r\nconst THEME_STORAGE_KEY = 'pecb-ui-theme';\r\n\r\n/**\r\n * A stateless, injectable theme service for managing application themes.\r\n *\r\n * This service provides reactive theme management with support for light/dark modes,\r\n * system preference detection, and custom CSS variable overrides.\r\n *\r\n * @example\r\n * ```typescript\r\n * import { ThemeService } from '@pecb-ui/components';\r\n *\r\n * @Component({...})\r\n * export class MyComponent {\r\n * constructor(private themeService: ThemeService) {}\r\n *\r\n * toggleTheme(): void {\r\n * this.themeService.toggleTheme();\r\n * }\r\n *\r\n * setDarkMode(): void {\r\n * this.themeService.setTheme('dark');\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ThemeService {\r\n private readonly themeSubject: BehaviorSubject<ThemeConfig>;\r\n private readonly isBrowser: boolean;\r\n private mediaQuery: MediaQueryList | null = null;\r\n\r\n constructor(@Inject(PLATFORM_ID) platformId: object) {\r\n this.isBrowser = isPlatformBrowser(platformId);\r\n\r\n const initialTheme = this.getInitialTheme();\r\n this.themeSubject = new BehaviorSubject<ThemeConfig>(this.createThemeConfig(initialTheme));\r\n\r\n if (this.isBrowser) {\r\n this.setupSystemThemeListener();\r\n this.applyTheme(this.themeSubject.value);\r\n }\r\n }\r\n\r\n /**\r\n * Observable stream of theme configuration changes\r\n */\r\n get theme$(): Observable<ThemeConfig> {\r\n return this.themeSubject.asObservable();\r\n }\r\n\r\n /**\r\n * Get the current theme configuration\r\n */\r\n get currentTheme(): ThemeConfig {\r\n return this.themeSubject.value;\r\n }\r\n\r\n /**\r\n * Get the current theme mode\r\n */\r\n get currentMode(): ThemeMode {\r\n return this.themeSubject.value.mode;\r\n }\r\n\r\n /**\r\n * Check if the current resolved theme is dark\r\n */\r\n get isDarkMode(): boolean {\r\n return this.themeSubject.value.resolvedTheme === 'dark';\r\n }\r\n\r\n /**\r\n * Set the theme mode\r\n * @param mode - The theme mode to set (light, dark, or system)\r\n */\r\n setTheme(mode: ThemeMode): void {\r\n const config = this.createThemeConfig(mode);\r\n this.themeSubject.next(config);\r\n this.persistTheme(mode);\r\n\r\n if (this.isBrowser) {\r\n this.applyTheme(config);\r\n }\r\n }\r\n\r\n /**\r\n * Toggle between light and dark themes\r\n * If currently using system preference, switches to the opposite of the resolved theme\r\n */\r\n toggleTheme(): void {\r\n const current = this.themeSubject.value;\r\n const newMode: ThemeMode = current.resolvedTheme === 'light' ? 'dark' : 'light';\r\n this.setTheme(newMode);\r\n }\r\n\r\n /**\r\n * Reset to system preference\r\n */\r\n useSystemTheme(): void {\r\n this.setTheme('system');\r\n }\r\n\r\n /**\r\n * Apply custom CSS variables to the document\r\n * @param variables - Object containing CSS variable overrides\r\n */\r\n setCustomVariables(variables: ThemeVariables): void {\r\n if (!this.isBrowser) {\r\n return;\r\n }\r\n\r\n const root = document.documentElement;\r\n Object.entries(variables).forEach(([key, value]) => {\r\n if (value !== undefined) {\r\n const cssVarName = this.toCssVariableName(key);\r\n root.style.setProperty(cssVarName, value);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Remove custom CSS variables from the document\r\n * @param variableNames - Array of variable names to remove\r\n */\r\n removeCustomVariables(variableNames: string[]): void {\r\n if (!this.isBrowser) {\r\n return;\r\n }\r\n\r\n const root = document.documentElement;\r\n variableNames.forEach(name => {\r\n const cssVarName = this.toCssVariableName(name);\r\n root.style.removeProperty(cssVarName);\r\n });\r\n }\r\n\r\n /**\r\n * Get the initial theme from storage or system preference\r\n */\r\n private getInitialTheme(): ThemeMode {\r\n if (!this.isBrowser) {\r\n return 'light';\r\n }\r\n\r\n const stored = localStorage.getItem(THEME_STORAGE_KEY);\r\n if (stored && ['light', 'dark', 'system'].includes(stored)) {\r\n return stored as ThemeMode;\r\n }\r\n\r\n return 'system';\r\n }\r\n\r\n /**\r\n * Create a theme configuration object\r\n */\r\n private createThemeConfig(mode: ThemeMode): ThemeConfig {\r\n const resolvedTheme = this.resolveTheme(mode);\r\n return {\r\n mode,\r\n resolvedTheme,\r\n cssClass: `pecb-theme-${resolvedTheme}`\r\n };\r\n }\r\n\r\n /**\r\n * Resolve the actual theme from mode (handles 'system' mode)\r\n */\r\n private resolveTheme(mode: ThemeMode): 'light' | 'dark' {\r\n if (mode === 'system') {\r\n return this.getSystemPreference();\r\n }\r\n return mode;\r\n }\r\n\r\n /**\r\n * Get the system color scheme preference\r\n */\r\n private getSystemPreference(): 'light' | 'dark' {\r\n if (!this.isBrowser) {\r\n return 'light';\r\n }\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\r\n }\r\n\r\n /**\r\n * Setup listener for system theme changes\r\n */\r\n private setupSystemThemeListener(): void {\r\n if (!this.isBrowser) {\r\n return;\r\n }\r\n\r\n this.mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n\r\n const listener = (): void => {\r\n if (this.themeSubject.value.mode === 'system') {\r\n const config = this.createThemeConfig('system');\r\n this.themeSubject.next(config);\r\n this.applyTheme(config);\r\n }\r\n };\r\n\r\n // Use addEventListener for modern browsers\r\n if (this.mediaQuery.addEventListener) {\r\n this.mediaQuery.addEventListener('change', listener);\r\n }\r\n }\r\n\r\n /**\r\n * Apply the theme to the document\r\n */\r\n private applyTheme(config: ThemeConfig): void {\r\n if (!this.isBrowser) {\r\n return;\r\n }\r\n\r\n const root = document.documentElement;\r\n\r\n // Remove existing theme classes\r\n root.classList.remove('pecb-theme-light', 'pecb-theme-dark');\r\n\r\n // Add new theme class\r\n root.classList.add(config.cssClass);\r\n\r\n // Set data attribute for CSS selectors\r\n root.setAttribute('data-pecb-theme', config.resolvedTheme);\r\n }\r\n\r\n /**\r\n * Persist theme preference to storage\r\n */\r\n private persistTheme(mode: ThemeMode): void {\r\n if (!this.isBrowser) {\r\n return;\r\n }\r\n localStorage.setItem(THEME_STORAGE_KEY, mode);\r\n }\r\n\r\n /**\r\n * Convert camelCase property name to CSS variable name\r\n */\r\n private toCssVariableName(name: string): string {\r\n const kebabCase = name.replace(/([A-Z])/g, '-$1').toLowerCase();\r\n return `--pecb-${kebabCase}`;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\n\r\n/**\r\n * Loading state for a specific operation\r\n */\r\nexport interface LoadingState {\r\n /** Unique identifier for the loading operation */\r\n id: string;\r\n /** Whether this operation is currently loading */\r\n isLoading: boolean;\r\n /** Optional message to display */\r\n message?: string;\r\n /** Optional progress percentage (0-100) */\r\n progress?: number;\r\n}\r\n\r\n/**\r\n * A stateless, injectable loading service for managing loading states.\r\n *\r\n * This service provides a centralized way to track loading states across\r\n * the application, supporting multiple concurrent loading operations with\r\n * individual tracking capabilities.\r\n *\r\n * @example\r\n * ```typescript\r\n * import { LoadingService } from '@pecb-ui/components';\r\n *\r\n * @Component({...})\r\n * export class MyComponent {\r\n * isLoading$ = this.loadingService.isLoading$('my-operation');\r\n *\r\n * constructor(private loadingService: LoadingService) {}\r\n *\r\n * async loadData(): Promise<void> {\r\n * this.loadingService.start('my-operation', 'Loading data...');\r\n * try {\r\n * await this.fetchData();\r\n * } finally {\r\n * this.loadingService.stop('my-operation');\r\n * }\r\n * }\r\n * }\r\n * ```\r\n *\r\n * @publicApi\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LoadingService {\r\n private readonly loadingStates = new Map<string, LoadingState>();\r\n private readonly statesSubject = new BehaviorSubject<Map<string, LoadingState>>(new Map());\r\n\r\n /** Default loading operation ID */\r\n private readonly defaultId = 'global';\r\n\r\n /**\r\n * Observable of all loading states\r\n */\r\n get states$(): Observable<Map<string, LoadingState>> {\r\n return this.statesSubject.asObservable();\r\n }\r\n\r\n /**\r\n * Observable that emits true when any loading operation is active\r\n */\r\n get isAnyLoading$(): Observable<boolean> {\r\n return this.statesSubject.pipe(\r\n map(states => Array.from(states.values()).some(state => state.isLoading))\r\n );\r\n }\r\n\r\n /**\r\n * Get observable for a specific loading operation\r\n * @param id - The loading operation identifier\r\n */\r\n isLoading$(id: string = this.defaultId): Observable<boolean> {\r\n return this.statesSubject.pipe(\r\n map(states => states.get(id)?.isLoading ?? false)\r\n );\r\n }\r\n\r\n /**\r\n * Get observable for loading state with message\r\n * @param id - The loading operation identifier\r\n */\r\n getState$(id: string = this.defaultId): Observable<LoadingState | undefined> {\r\n return this.statesSubject.pipe(\r\n map(states => states.get(id))\r\n );\r\n }\r\n\r\n /**\r\n * Check if a specific operation is currently loading (synchronous)\r\n * @param id - The loading operation identifier\r\n */\r\n isLoading(id: string = this.defaultId): boolean {\r\n return this.loadingStates.get(id)?.isLoading ?? false;\r\n }\r\n\r\n /**\r\n * Check if any operation is currently loading (synchronous)\r\n */\r\n isAnyLoading(): boolean {\r\n return Array.from(this.loadingStates.values()).some(state => state.isLoading);\r\n }\r\n\r\n /**\r\n * Start a loading operation\r\n * @param id - The loading operation identifier\r\n * @param message - Optional message to display\r\n */\r\n start(id: string = this.defaultId, message?: string): void {\r\n this.updateState(id, { isLoading: true, message, progress: undefined });\r\n }\r\n\r\n /**\r\n * Stop a loading operation\r\n * @param id - The loading operation identifier\r\n */\r\n stop(id: string = this.defaultId): void {\r\n this.updateState(id, { isLoading: false, message: undefined, progress: undefined });\r\n }\r\n\r\n /**\r\n * Update progress for a loading operation\r\n * @param id - The loading operation identifier\r\n * @param progress - Progress percentage (0-100)\r\n * @param message - Optional updated message\r\n */\r\n setProgress(id: string, progress: number, message?: string): void {\r\n const currentState = this.loadingStates.get(id);\r\n if (currentState) {\r\n this.updateState(id, {\r\n isLoading: true,\r\n progress: Math.min(100, Math.max(0, progress)),\r\n message: message ?? currentState.message\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Update the message for a loading operation\r\n * @param id - The loading operation identifier\r\n * @param message - New message to display\r\n */\r\n setMessage(id: string, message: string): void {\r\n const currentState = this.loadingStates.get(id);\r\n if (currentState) {\r\n this.updateState(id, { ...currentState, id, message });\r\n }\r\n }\r\n\r\n /**\r\n * Stop all loading operations\r\n */\r\n stopAll(): void {\r\n this.loadingStates.clear();\r\n this.statesSubject.next(new Map());\r\n }\r\n\r\n /**\r\n * Remove a loading state completely\r\n * @param id - The loading operation identifier\r\n */\r\n remove(id: string): void {\r\n this.loadingStates.delete(id);\r\n this.emitStates();\r\n }\r\n\r\n /**\r\n * Execute an async operation with automatic loading state management\r\n * @param id - The loading operation identifier\r\n * @param operation - The async operation to execute\r\n * @param message - Optional loading message\r\n * @returns The result of the operation\r\n */\r\n async withLoading<T>(\r\n id: string,\r\n operation: () => Promise<T>,\r\n message?: string\r\n ): Promise<T> {\r\n this.start(id, message);\r\n try {\r\n return await operation();\r\n } finally {\r\n this.stop(id);\r\n }\r\n }\r\n\r\n /**\r\n * Update a loading state\r\n */\r\n private updateState(id: string, partialState: Partial<LoadingState> & { isLoading: boolean }): void {\r\n const state: LoadingState = {\r\n id,\r\n isLoading: partialState.isLoading,\r\n message: partialState.message,\r\n progress: partialState.progress\r\n };\r\n\r\n this.loadingStates.set(id, state);\r\n this.emitStates();\r\n }\r\n\r\n /**\r\n * Emit current states to subscribers\r\n */\r\n private emitStates(): void {\r\n this.statesSubject.next(new Map(this.loadingStates));\r\n }\r\n}\r\n","/**\r\n * Common type definitions for PECB UI Components\r\n * @module types\r\n */\r\n\r\n/**\r\n * Standard size variants used across components\r\n */\r\nexport type Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n * Standard component size mapping\r\n */\r\nexport type ComponentSize = 'small' | 'medium' | 'large';\r\n\r\n/**\r\n * Semantic color variants\r\n */\r\nexport type ColorVariant = 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info';\r\n\r\n/**\r\n * Extended color variants including neutral options\r\n */\r\nexport type ExtendedColorVariant = ColorVariant | 'neutral' | 'muted';\r\n\r\n/**\r\n * Component state variants\r\n */\r\nexport type StateVariant = 'default' | 'hover' | 'active' | 'focus' | 'disabled';\r\n\r\n/**\r\n * Position options for overlays and popups\r\n */\r\nexport type Position =\r\n | 'top'\r\n | 'top-start'\r\n | 'top-end'\r\n | 'bottom'\r\n | 'bottom-start'\r\n | 'bottom-end'\r\n | 'left'\r\n | 'left-start'\r\n | 'left-end'\r\n | 'right'\r\n | 'right-start'\r\n | 'right-end';\r\n\r\n/**\r\n * Alignment options\r\n */\r\nexport type Alignment = 'start' | 'center' | 'end' | 'stretch';\r\n\r\n/**\r\n * Direction options for layouts\r\n */\r\nexport type Direction = 'horizontal' | 'vertical';\r\n\r\n/**\r\n * Orientation alias for direction\r\n */\r\nexport type Orientation = 'horizontal' | 'vertical';\r\n\r\n/**\r\n * Spacing scale values\r\n */\r\nexport type SpacingScale = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\r\n\r\n/**\r\n * Border radius scale values\r\n */\r\nexport type RadiusScale = 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';\r\n\r\n/**\r\n * Shadow elevation levels\r\n */\r\nexport type ElevationLevel = 'none' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n * Animation timing presets\r\n */\r\nexport type AnimationTiming = 'instant' | 'fast' | 'normal' | 'slow';\r\n\r\n/**\r\n * Breakpoint names\r\n */\r\nexport type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\r\n\r\n/**\r\n * Form validation state\r\n */\r\nexport type ValidationState = 'valid' | 'invalid' | 'pending' | 'pristine';\r\n\r\n/**\r\n * Generic callback function type\r\n */\r\nexport type Callback<T = void> = () => T;\r\n\r\n/**\r\n * Generic event handler type\r\n */\r\nexport type EventHandler<T = Event> = (event: T) => void;\r\n\r\n/**\r\n * Make specific properties required\r\n */\r\nexport type RequireProps<T, K extends keyof T> = T & Required<Pick<T, K>>;\r\n\r\n/**\r\n * Make specific properties optional\r\n */\r\nexport type OptionalProps<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\r\n\r\n/**\r\n * Extract non-nullable type\r\n */\r\nexport type NonNullableProps<T> = {\r\n [K in keyof T]: NonNullable<T[K]>;\r\n};\r\n","/**\r\n * String utility functions for PECB UI Components\r\n * @module utils/string\r\n */\r\n\r\n/**\r\n * Convert a string to kebab-case\r\n * @param str - The string to convert\r\n * @returns The kebab-case string\r\n *\r\n * @example\r\n * toKebabCase('myComponentName') // 'my-component-name'\r\n * toKebabCase('MyComponentName') // 'my-component-name'\r\n */\r\nexport function toKebabCase(str: string): string {\r\n return str\r\n .replace(/([a-z])([A-Z])/g, '$1-$2')\r\n .replace(/[\\s_]+/g, '-')\r\n .toLowerCase();\r\n}\r\n\r\n/**\r\n * Convert a string to camelCase\r\n * @param str - The string to convert\r\n * @returns The camelCase string\r\n *\r\n * @example\r\n * toCamelCase('my-component-name') // 'myComponentName'\r\n * toCamelCase('my_component_name') // 'myComponentName'\r\n */\r\nexport function toCamelCase(str: string): string {\r\n return str\r\n .replace(/[-_\\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ''))\r\n .replace(/^[A-Z]/, char => char.toLowerCase());\r\n}\r\n\r\n/**\r\n * Convert a string to PascalCase\r\n * @param str - The string to convert\r\n * @returns The PascalCase string\r\n *\r\n * @example\r\n * toPascalCase('my-component-name') // 'MyComponentName'\r\n */\r\nexport function toPascalCase(str: string): string {\r\n const camel = toCamelCase(str);\r\n return camel.charAt(0).toUpperCase() + camel.slice(1);\r\n}\r\n\r\n/**\r\n * Convert a string to snake_case\r\n * @param str - The string to convert\r\n * @returns The snake_case string\r\n *\r\n * @example\r\n * toSnakeCase('myComponentName') // 'my_component_name'\r\n */\r\nexport function toSnakeCase(str: string): string {\r\n return toKebabCase(str).replace(/-/g, '_');\r\n}\r\n\r\n/**\r\n * Capitalize the first letter of a string\r\n * @param str - The string to capitalize\r\n * @returns The capitalized string\r\n *\r\n * @example\r\n * capitalize('hello world') // 'Hello world'\r\n */\r\nexport function capitalize(str: string): string {\r\n if (!str) return str;\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\n\r\n/**\r\n * Truncate a string to a specified length\r\n * @param str - The string to truncate\r\n * @param maxLength - Maximum length\r\n * @param suffix - Suffix to append when truncated (default: '...')\r\n * @returns The truncated string\r\n *\r\n * @example\r\n * truncate('Hello World', 8) // 'Hello...'\r\n * truncate('Hello World', 8, '…') // 'Hello W…'\r\n */\r\nexport function truncate(str: string, maxLength: number, suffix = '...'): string {\r\n if (!str || str.length <= maxLength) return str;\r\n return str.slice(0, maxLength - suffix.length) + suffix;\r\n}\r\n\r\n/**\r\n * Check if a string is empty or contains only whitespace\r\n * @param str - The string to check\r\n * @returns True if the string is empty or whitespace\r\n *\r\n * @example\r\n * isBlank('') // true\r\n * isBlank(' ') // true\r\n * isBlank('hello') // false\r\n */\r\nexport function isBlank(str: string | null | undefined): boolean {\r\n return !str || str.trim().length === 0;\r\n}\r\n\r\n/**\r\n * Check if a string is not empty and contains non-whitespace characters\r\n * @param str - The string to check\r\n * @returns True if the string is not empty\r\n */\r\nexport function isNotBlank(str: string | null | undefined): str is string {\r\n return !isBlank(str);\r\n}\r\n\r\n/**\r\n * Generate a slug from a string (URL-friendly)\r\n * @param str - The string to convert\r\n * @returns URL-friendly slug\r\n *\r\n * @example\r\n * slugify('Hello World!') // 'hello-world'\r\n * slugify('Café Latte') // 'cafe-latte'\r\n */\r\nexport function slugify(str: string): string {\r\n return str\r\n .toLowerCase()\r\n .normalize('NFD')\r\n .replace(/[\\u0300-\\u036f]/g, '') // Remove diacritics\r\n .replace(/[^a-z0-9\\s-]/g, '') // Remove non-alphanumeric\r\n .replace(/[\\s_]+/g, '-') // Replace spaces with hyphens\r\n .replace(/-+/g, '-') // Remove consecutive hyphens\r\n .replace(/^-|-$/g, ''); // Trim hyphens from ends\r\n}\r\n\r\n/**\r\n * Escape HTML special characters\r\n * @param str - The string to escape\r\n * @returns The escaped string\r\n *\r\n * @example\r\n * escapeHtml('<script>alert(\"XSS\")</script>') // '<script>alert("XSS")</script>'\r\n */\r\nexport function escapeHtml(str: string): string {\r\n const htmlEscapes: Record<string, string> = {\r\n '&': '&',\r\n '<': '<',\r\n '>': '>',\r\n '\"': '"',\r\n \"'\": '''\r\n };\r\n return str.replace(/[&<>\"']/g, char => htmlEscapes[char]);\r\n}\r\n\r\n/**\r\n * Strip HTML tags from a string\r\n * @param str - The string containing HTML\r\n * @returns The string without HTML tags\r\n *\r\n * @example\r\n * stripHtml('<p>Hello <strong>World</strong></p>') // 'Hello World'\r\n */\r\nexport function stripHtml(str: string): string {\r\n return str.replace(/<[^>]*>/g, '');\r\n}\r\n\r\n/**\r\n * Generate initials from a name\r\n * @param name - The name to extract initials from\r\n * @param maxLength - Maximum number of initials (default: 2)\r\n * @returns The initials in uppercase\r\n *\r\n * @example\r\n * getInitials('John Doe') // 'JD'\r\n * getInitials('John Michael Doe', 3) // 'JMD'\r\n */\r\nexport function getInitials(name: string, maxLength = 2): string {\r\n if (!name) return '';\r\n\r\n return name\r\n .split(/\\s+/)\r\n .filter(Boolean)\r\n .slice(0, maxLength)\r\n .map(word => word.charAt(0).toUpperCase())\r\n .join('');\r\n}\r\n\r\n/**\r\n * Pluralize a word based on count\r\n * @param count - The count to check\r\n * @param singular - Singular form\r\n * @param plural - Plural form (optional, defaults to singular + 's')\r\n * @returns The appropriate form of the word\r\n *\r\n * @example\r\n * pluralize(1, 'item') // 'item'\r\n * pluralize(5, 'item') // 'items'\r\n * pluralize(2, 'child', 'children') // 'children'\r\n */\r\nexport function pluralize(count: number, singular: string, plural?: string): string {\r\n return count === 1 ? singular : (plural ?? `${singular}s`);\r\n}\r\n\r\n/**\r\n * Format a number as a string with count and pluralized label\r\n * @param count - The count\r\n * @param singular - Singular form of the label\r\n * @param plural - Plural form (optional)\r\n * @returns Formatted string like \"5 items\"\r\n *\r\n * @example\r\n * formatCount(1, 'item') // '1 item'\r\n * formatCount(5, 'item') // '5 items'\r\n */\r\nexport function formatCount(count: number, singular: string, plural?: string): string {\r\n return `${count} ${pluralize(count, singular, plural)}`;\r\n}\r\n","/**\r\n * Accessibility utility functions for PECB UI Components\r\n * Helps ensure WCAG 2.1 compliance\r\n * @module utils/accessibility\r\n */\r\n\r\nimport { generateUniqueId } from './dom.utils';\r\n\r\n/**\r\n * ARIA live region politeness levels\r\n */\r\nexport type AriaLive = 'off' | 'polite' | 'assertive';\r\n\r\n/**\r\n * ARIA roles commonly used in components\r\n */\r\nexport type AriaRole =\r\n | 'alert'\r\n | 'alertdialog'\r\n | 'button'\r\n | 'checkbox'\r\n | 'combobox'\r\n | 'dialog'\r\n | 'grid'\r\n | 'gridcell'\r\n | 'link'\r\n | 'listbox'\r\n | 'menu'\r\n | 'menubar'\r\n | 'menuitem'\r\n | 'menuitemcheckbox'\r\n | 'menuitemradio'\r\n | 'option'\r\n | 'progressbar'\r\n | 'radio'\r\n | 'radiogroup'\r\n | 'scrollbar'\r\n | 'searchbox'\r\n | 'slider'\r\n | 'spinbutton'\r\n | 'status'\r\n | 'switch'\r\n | 'tab'\r\n | 'tablist'\r\n | 'tabpanel'\r\n | 'textbox'\r\n | 'tooltip'\r\n | 'tree'\r\n | 'treegrid'\r\n | 'treeitem';\r\n\r\n/**\r\n * Standard ARIA attributes interface for components\r\n */\r\nexport interface AriaAttributes {\r\n role?: AriaRole;\r\n 'aria-label'?: string;\r\n 'aria-labelledby'?: string;\r\n 'aria-describedby'?: string;\r\n 'aria-expanded'?: boolean;\r\n 'aria-selected'?: boolean;\r\n 'aria-checked'?: boolean | 'mixed';\r\n 'aria-disabled'?: boolean;\r\n 'aria-hidden'?: boolean;\r\n 'aria-invalid'?: boolean;\r\n 'aria-required'?: boolean;\r\n 'aria-readonly'?: boolean;\r\n 'aria-pressed'?: boolean | 'mixed';\r\n 'aria-current'?: boolean | 'page' | 'step' | 'location' | 'date' | 'time';\r\n 'aria-haspopup'?: boolean | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog';\r\n 'aria-controls'?: string;\r\n 'aria-owns'?: string;\r\n 'aria-live'?: AriaLive;\r\n 'aria-atomic'?: boolean;\r\n 'aria-busy'?: boolean;\r\n 'aria-valuemin'?: number;\r\n 'aria-valuemax'?: number;\r\n 'aria-valuenow'?: number;\r\n 'aria-valuetext'?: string;\r\n 'aria-orientation'?: 'horizontal' | 'vertical';\r\n 'aria-activedescendant'?: string;\r\n 'aria-autocomplete'?: 'none' | 'inline' | 'list' | 'both';\r\n 'aria-multiselectable'?: boolean;\r\n 'aria-sort'?: 'none' | 'ascending' | 'descending' | 'other';\r\n 'aria-level'?: number;\r\n 'aria-setsize'?: number;\r\n 'aria-posinset'?: number;\r\n tabindex?: number;\r\n}\r\n\r\n/**\r\n * Generate ARIA attributes for a button component\r\n * @param options - Button accessibility options\r\n * @returns ARIA attributes object\r\n */\r\nexport function getButtonAriaAttributes(options: {\r\n label?: string;\r\n pressed?: boolean;\r\n expanded?: boolean;\r\n disabled?: boolean;\r\n controls?: string;\r\n haspopup?: AriaAttributes['aria-haspopup'];\r\n describedby?: string;\r\n}): AriaAttributes {\r\n const attrs: AriaAttributes = {};\r\n\r\n if (options.label) {\r\n attrs['aria-label'] = options.label;\r\n }\r\n if (options.pressed !== undefined) {\r\n attrs['aria-pressed'] = options.pressed;\r\n }\r\n if (options.expanded !== undefined) {\r\n attrs['aria-expanded'] = options.expanded;\r\n }\r\n if (options.disabled) {\r\n attrs['aria-disabled'] = true;\r\n }\r\n if (options.controls) {\r\n attrs['aria-controls'] = options.controls;\r\n }\r\n if (options.haspopup) {\r\n attrs['aria-haspopup'] = options.haspopup;\r\n }\r\n if (options.describedby) {\r\n attrs['aria-describedby'] = options.describedby;\r\n }\r\n\r\n return attrs;\r\n}\r\n\r\n/**\r\n * Generate ARIA attributes for a dialog/modal component\r\n * @param options - Dialog accessibility options\r\n * @returns ARIA attributes object\r\n */\r\nexport function getDialogAriaAttributes(options: {\r\n labelledby?: string;\r\n describedby?: string;\r\n modal?: boolean;\r\n}): AriaAttributes {\r\n return {\r\n role: 'dialog',\r\n 'aria-labelledby': options.labelledby,\r\n 'aria-describedby': options.describedby,\r\n 'aria-modal': options.modal\r\n } as AriaAttributes;\r\n}\r\n\r\n/**\r\n * Generate ARIA attributes for a form input\r\n * @param options - Input accessibility options\r\n * @returns ARIA attributes object\r\n */\r\nexport function getInputAriaAttributes(options: {\r\n label?: string;\r\n labelledby?: string;\r\n describedby?: string;\r\n invalid?: boolean;\r\n required?: boolean;\r\n readonly?: boolean;\r\n disabled?: boolean;\r\n errorId?: string;\r\n helperId?: string;\r\n}): AriaAttributes {\r\n const attrs: AriaAttributes = {};\r\n\r\n if (options.label) {\r\n attrs['aria-label'] = options.label;\r\n }\r\n if (options.labelledby) {\r\n attrs['aria-labelledby'] = options.labelledby;\r\n }\r\n\r\n // Build aria-describedby from multiple sources\r\n const describedbyParts: string[] = [];\r\n if (options.describedby) {\r\n describedbyParts.push(options.describedby);\r\n }\r\n if (options.invalid && options.errorId) {\r\n describedbyParts.push(options.errorId);\r\n }\r\n if (options.helperId) {\r\n describedbyParts.push(options.helperId);\r\n }\r\n if (describedbyParts.length > 0) {\r\n attrs['aria-describedby'] = describedbyParts.join(' ');\r\n }\r\n\r\n if (options.invalid !== undefined) {\r\n attrs['aria-invalid'] = options.invalid;\r\n }\r\n if (options.required) {\r\n attrs['aria-required'] = true;\r\n }\r\n if (options.readonly) {\r\n attrs['aria-readonly'] = true;\r\n }\r\n if (options.disabled) {\r\n attrs['aria-disabled'] = true;\r\n }\r\n\r\n return attrs;\r\n}\r\n\r\n/**\r\n * Generate ARIA attributes for a progress bar\r\n * @param options - Progress accessibility options\r\n * @returns ARIA attributes object\r\n */\r\nexport function getProgressAriaAttributes(options: {\r\n value: number;\r\n min?: number;\r\n max?: number;\r\n label?: string;\r\n valueText?: string;\r\n}): AriaAttributes {\r\n return {\r\n role: 'progressbar',\r\n 'aria-valuenow': options.value,\r\n 'aria-valuemin': options.min ?? 0,\r\n 'aria-valuemax': options.max ?? 100,\r\n 'aria-label': options.label,\r\n 'aria-valuetext': options.valueText ?? `${options.value}%`\r\n };\r\n}\r\n\r\n/**\r\n * Generate ARIA attributes for a tab component\r\n * @param options - Tab accessibility options\r\n * @returns ARIA attributes for tab and tabpanel\r\n */\r\nexport function getTabAriaAttributes(options: {\r\n tabId: string;\r\n panelId: string;\r\n selected: boolean;\r\n disabled?: boolean;\r\n}): { tab: AriaAttributes; panel: AriaAttributes } {\r\n return {\r\n tab: {\r\n role: 'tab',\r\n 'aria-selected': options.selected,\r\n 'aria-controls': options.panelId,\r\n 'aria-disabled': options.disabled,\r\n tabindex: options.selected ? 0 : -1\r\n },\r\n panel: {\r\n role: 'tabpanel',\r\n 'aria-labelledby': options.tabId,\r\n 'aria-hidden': !options.selected,\r\n tabindex: 0\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Generate ARIA attributes for a listbox option\r\n * @param options - Option accessibility options\r\n * @returns ARIA attributes object\r\n */\r\nexport function getOptionAriaAttributes(options: {\r\n selected: boolean;\r\n disabled?: boolean;\r\n setsize?: number;\r\n posinset?: number;\r\n}): AriaAttributes {\r\n return {\r\n role: 'option',\r\n 'aria-selected': options.selected,\r\n 'aria-disabled': options.disabled,\r\n 'aria-setsize': options.setsize,\r\n 'aria-posinset': options.posinset\r\n };\r\n}\r\n\r\n/**\r\n * Generate linked IDs for label and input association\r\n * @param baseName - Base name for generating IDs\r\n * @returns Object with inputId, labelId, errorId, and helperId\r\n */\r\nexport function generateLinkedIds(baseName?: string): {\r\n inputId: string;\r\n labelId: string;\r\n errorId: string;\r\n helperId: string;\r\n} {\r\n const base = baseName || generateUniqueId('input');\r\n return {\r\n inputId: base,\r\n labelId: `${base}-label`,\r\n errorId: `${base}-error`,\r\n helperId: `${base}-helper`\r\n };\r\n}\r\n\r\n/**\r\n * Create a visually hidden element for screen readers\r\n * @returns CSS styles for visually hidden content\r\n */\r\nexport function getVisuallyHiddenStyles(): Record<string, string> {\r\n return {\r\n position: 'absolute',\r\n width: '1px',\r\n height: '1px',\r\n padding: '0',\r\n margin: '-1px',\r\n overflow: 'hidden',\r\n clip: 'rect(0, 0, 0, 0)',\r\n whiteSpace: 'nowrap',\r\n border: '0'\r\n };\r\n}\r\n\r\n/**\r\n * Check if the user has enabled reduced motion preference\r\n * @returns True if user prefers reduced motion\r\n */\r\nexport function prefersReducedMotion(): boolean {\r\n if (typeof window === 'undefined') return false;\r\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n}\r\n\r\n/**\r\n * Check if the user has enabled high contrast mode\r\n * @returns True if high contrast mode is enabled\r\n */\r\nexport function prefersHighContrast(): boolean {\r\n if (typeof window === 'undefined') return false;\r\n return window.matchMedia('(prefers-contrast: more)').matches;\r\n}\r\n\r\n/**\r\n * Announce a message to screen readers using aria-live regions\r\n * @param message - The message to announce\r\n * @param politeness - The urgency level (polite or assertive)\r\n */\r\nexport function announceToScreenReader(\r\n message: string,\r\n politeness: 'polite' | 'assertive' = 'polite'\r\n): void {\r\n if (typeof document === 'undefined') return;\r\n\r\n const announcement = document.createElement('div');\r\n announcement.setAttribute('role', 'status');\r\n announcement.setAttribute('aria-live', politeness);\r\n announcement.setAttribute('aria-atomic', 'true');\r\n Object.assign(announcement.style, getVisuallyHiddenStyles());\r\n\r\n document.body.appendChild(announcement);\r\n\r\n // Delay slightly to ensure screen readers pick up the change\r\n setTimeout(() => {\r\n announcement.textContent = message;\r\n }, 100);\r\n\r\n // Clean up after announcement is read\r\n setTimeout(() => {\r\n document.body.removeChild(announcement);\r\n }, 1000);\r\n}\r\n\r\n/**\r\n * Get the appropriate aria-current value for navigation items\r\n * @param isActive - Whether the item is active/current\r\n * @param type - The type of current indicator\r\n * @returns The aria-current value or undefined\r\n */\r\nexport function getAriaCurrent(\r\n isActive: boolean,\r\n type: 'page' | 'step' | 'location' | 'date' | 'time' = 'page'\r\n): AriaAttributes['aria-current'] {\r\n return isActive ? type : undefined;\r\n}\r\n","/**\r\n * Error handling utility functions for PECB UI Components\r\n * Provides standardized error handling patterns\r\n * @module utils/error\r\n */\r\n\r\n/**\r\n * Error severity levels\r\n */\r\nexport type ErrorSeverity = 'info' | 'warning' | 'error' | 'critical';\r\n\r\n/**\r\n * Error categories for classification\r\n */\r\nexport type ErrorCategory =\r\n | 'validation'\r\n | 'network'\r\n | 'authentication'\r\n | 'authorization'\r\n | 'configuration'\r\n | 'runtime'\r\n | 'unknown';\r\n\r\n/**\r\n * Standard error interface for PECB components\r\n */\r\nexport interface PecbError {\r\n /** Unique error code */\r\n code: string;\r\n /** Human-readable error message */\r\n message: string;\r\n /** Error severity level */\r\n severity: ErrorSeverity;\r\n /** Error category */\r\n category: ErrorCategory;\r\n /** Original error if wrapping another error */\r\n originalError?: Error;\r\n /** Additional context data */\r\n context?: Record<string, unknown>;\r\n /** Timestamp when error occurred */\r\n timestamp: Date;\r\n /** Suggested recovery action */\r\n recoveryAction?: string;\r\n /** Whether the error is recoverable */\r\n recoverable: boolean;\r\n}\r\n\r\n/**\r\n * Validation error details\r\n */\r\nexport interface ValidationError {\r\n /** Field name that failed validation */\r\n field: string;\r\n /** Validation rule that failed */\r\n rule: string;\r\n /** Error message */\r\n message: string;\r\n /** Expected value or format */\r\n expected?: string;\r\n /** Actual value received */\r\n actual?: unknown;\r\n}\r\n\r\n/**\r\n * Error factory options\r\n */\r\nexport interface ErrorOptions {\r\n code?: string;\r\n severity?: ErrorSeverity;\r\n category?: ErrorCategory;\r\n context?: Record<string, unknown>;\r\n recoveryAction?: string;\r\n recoverable?: boolean;\r\n originalError?: Error;\r\n}\r\n\r\n/**\r\n * Create a standardized PECB error\r\n * @param message - Error message\r\n * @param options - Additional error options\r\n * @returns A standardized PecbError object\r\n *\r\n * @example\r\n * const error = createError('Invalid input', {\r\n * code: 'VALIDATION_001',\r\n * category: 'validation',\r\n * severity: 'warning',\r\n * recoverable: true\r\n * });\r\n */\r\nexport function createError(message: string, options: ErrorOptions = {}): PecbError {\r\n return {\r\n code: options.code ?? 'PECB_ERROR',\r\n message,\r\n severity: options.severity ?? 'error',\r\n category: options.category ?? 'unknown',\r\n originalError: options.originalError,\r\n context: options.context,\r\n timestamp: new Date(),\r\n recoveryAction: options.recoveryAction,\r\n recoverable: options.recoverable ?? false\r\n };\r\n}\r\n\r\n/**\r\n * Create a validation error\r\n * @param field - Field name that failed validation\r\n * @param rule - Validation rule that failed\r\n * @param message - Error message\r\n * @returns A ValidationError object\r\n *\r\n * @example\r\n * const error = createValidationError('email', 'format', 'Invalid email format');\r\n */\r\nexport function createValidationError(\r\n field: string,\r\n rule: string,\r\n message: string,\r\n details?: { expected?: string; actual?: unknown }\r\n): ValidationError {\r\n return {\r\n field,\r\n rule,\r\n message,\r\n expected: details?.expected,\r\n actual: details?.actual\r\n };\r\n}\r\n\r\n/**\r\n * Wrap an unknown error in a PecbError\r\n * @param error - The error to wrap\r\n * @param options - Additional options\r\n * @returns A standardized PecbError\r\n *\r\n * @example\r\n * try {\r\n * await riskyOperation();\r\n * } catch (e) {\r\n * const error = wrapError(e, { category: 'network' });\r\n * handleError(error);\r\n * }\r\n */\r\nexport function wrapError(error: unknown, options: ErrorOptions = {}): PecbError {\r\n if (isPecbError(error)) {\r\n return error;\r\n }\r\n\r\n let message = 'An unknown error occurred';\r\n let originalError: Error | undefined;\r\n\r\n if (error instanceof Error) {\r\n message = error.message;\r\n originalError = error;\r\n } else if (typeof error === 'string') {\r\n message = error;\r\n } else if (error && typeof error === 'object' && 'message' in error) {\r\n message = String((error as { message: unknown }).message);\r\n }\r\n\r\n return createError(message, {\r\n ...options,\r\n originalError\r\n });\r\n}\r\n\r\n/**\r\n * Type guard to check if an object is a PecbError\r\n * @param error - The object to check\r\n * @returns True if the object is a PecbError\r\n */\r\nexport function isPecbError(error: unknown): error is PecbError {\r\n return (\r\n error !== null &&\r\n typeof error === 'object' &&\r\n 'code' in error &&\r\n 'message' in error &&\r\n 'severity' in error &&\r\n 'category' in error &&\r\n 'timestamp' in error\r\n );\r\n}\r\n\r\n/**\r\n * Type guard to check if an error is recoverable\r\n * @param error - The error to check\r\n * @returns True if the error is recoverable\r\n */\r\nexport function isRecoverableError(error: PecbError): boolean {\r\n return error.recoverable;\r\n}\r\n\r\n/**\r\n * Format an error for display to users\r\n * @param error - The error to format\r\n * @param includeCode - Whether to include the error code\r\n * @returns Formatted error message\r\n */\r\nexport function formatErrorMessage(error: PecbError, includeCode = false): string {\r\n if (includeCode) {\r\n return `[${error.code}] ${error.message}`;\r\n }\r\n return error.message;\r\n}\r\n\r\n/**\r\n * Format an error for logging\r\n * @param error - The error to format\r\n * @returns Formatted error string for logging\r\n */\r\nexport function formatErrorForLog(error: PecbError): string {\r\n const parts = [\r\n `[${error.timestamp.toISOString()}]`,\r\n `[${error.severity.toUpperCase()}]`,\r\n `[${error.code}]`,\r\n error.message\r\n ];\r\n\r\n if (error.context) {\r\n parts.push(`Context: ${JSON.stringify(error.context)}`);\r\n }\r\n\r\n if (error.originalError?.stack) {\r\n parts.push(`Stack: ${error.originalError.stack}`);\r\n }\r\n\r\n return parts.join(' ');\r\n}\r\n\r\n/**\r\n * Create a network error\r\n * @param message - Error message\r\n * @param statusCode - HTTP status code if applicable\r\n * @param originalError - Original error\r\n * @returns A network category PecbError\r\n */\r\nexport function createNetworkError(\r\n message: string,\r\n statusCode?: number,\r\n originalError?: Error\r\n): PecbError {\r\n return createError(message, {\r\n code: statusCode ? `NETWORK_${statusCode}` : 'NETWORK_ERROR',\r\n category: 'network',\r\n severity: 'error',\r\n context: statusCode ? { statusCode } : undefined,\r\n recoverable: true,\r\n recoveryAction: 'Please check your connection and try again',\r\n originalError\r\n });\r\n}\r\n\r\n/**\r\n * Create an authentication error\r\n * @param message - Error message\r\n * @param originalError - Original error\r\n * @returns An authentication category PecbError\r\n */\r\nexport function createAuthError(message: string, originalError?: Error): PecbError {\r\n return createError(message, {\r\n code: 'AUTH_ERROR',\r\n category: 'authentication',\r\n severity: 'error',\r\n recoverable: true,\r\n recoveryAction: 'Please sign in again',\r\n originalError\r\n });\r\n}\r\n\r\n/**\r\n * Create an authorization error\r\n * @param message - Error message\r\n * @param resource - The resource that access was denied to\r\n * @returns An authorization category PecbError\r\n */\r\nexport function createAuthorizationError(message: string, resource?: string): PecbError {\r\n return createError(message, {\r\n code: 'AUTHZ_ERROR',\r\n category: 'authorization',\r\n severity: 'warning',\r\n context: resource ? { resource } : undefined,\r\n recoverable: false,\r\n recoveryAction: 'Contact an administrator for access'\r\n });\r\n}\r\n\r\n/**\r\n * Create a configuration error\r\n * @param message - Error message\r\n * @param configKey - The configuration key that is invalid\r\n * @returns A configuration category PecbError\r\n */\r\nexport function createConfigError(message: string, configKey?: string): PecbError {\r\n return createError(message, {\r\n code: 'CONFIG_ERROR',\r\n category: 'configuration',\r\n severity: 'critical',\r\n context: configKey ? { configKey } : undefined,\r\n recoverable: false,\r\n recoveryAction: 'Check your configuration settings'\r\n });\r\n}\r\n\r\n/**\r\n * Error handler type\r\n */\r\nexport type ErrorHandler = (error: PecbError) => void;\r\n\r\n/**\r\n * Global error handler registry\r\n */\r\nconst errorHandlers: Map<ErrorCategory, ErrorHandler[]> = new Map();\r\n\r\n/**\r\n * Register an error handler for a category\r\n * @param category - The error category to handle\r\n * @param handler - The handler function\r\n * @returns Cleanup function to unregister\r\n */\r\nexport function registerErrorHandler(category: ErrorCategory, handler: ErrorHandler): () => void {\r\n const handlers = errorHandlers.get(category) ?? [];\r\n handlers.push(handler);\r\n errorHandlers.set(category, handlers);\r\n\r\n return () => {\r\n const currentHandlers = errorHandlers.get(category);\r\n if (currentHandlers) {\r\n const index = currentHandlers.indexOf(handler);\r\n if (index > -1) {\r\n currentHandlers.splice(index, 1);\r\n }\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Handle an error by invoking registered handlers\r\n * @param error - The error to handle\r\n */\r\nexport function handleError(error: PecbError): void {\r\n const handlers = errorHandlers.get(error.category) ?? [];\r\n const globalHandlers = errorHandlers.get('unknown') ?? [];\r\n\r\n [...handlers, ...globalHandlers].forEach(handler => {\r\n try {\r\n handler(error);\r\n } catch (e) {\r\n console.error('Error in error handler:', e);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Try to execute an operation and return a result or error\r\n * @param operation - The operation to execute\r\n * @param errorOptions - Options for error wrapping\r\n * @returns A tuple of [result, null] or [null, error]\r\n */\r\nexport async function tryAsync<T>(\r\n operation: () => Promise<T>,\r\n errorOptions?: ErrorOptions\r\n): Promise<[T, null] | [null, PecbError]> {\r\n try {\r\n const result = await operation();\r\n return [result, null];\r\n } catch (e) {\r\n return [null, wrapError(e, errorOptions)];\r\n }\r\n}\r\n\r\n/**\r\n * Synchronous version of tryAsync\r\n * @param operation - The operation to execute\r\n * @param errorOptions - Options for error wrapping\r\n * @returns A tuple of [result, null] or [null, error]\r\n */\r\nexport function trySync<T>(\r\n operation: () => T,\r\n errorOptions?: ErrorOptions\r\n): [T, null] | [null, PecbError] {\r\n try {\r\n const result = operation();\r\n return [result, null];\r\n } catch (e) {\r\n return [null, wrapError(e, errorOptions)];\r\n }\r\n}\r\n","/*\r\n * Public API Surface of @pecb-ui/components\r\n *\r\n * This file defines the public API of the library.\r\n * Only exports from this file will be accessible to consumers.\r\n */\r\n\r\n// =============================================================================\r\n// MODULE\r\n// =============================================================================\r\nexport * from './lib/pecb-components.module';\r\n\r\n// =============================================================================\r\n// COMPONENTS\r\n// =============================================================================\r\nexport * from './lib/components/button/button.component';\r\nexport * from './lib/components/card/card.component';\r\nexport * from './lib/components/status/status.component';\r\nexport * from './lib/components/pagination/pagination.component';\r\nexport * from './lib/components/table/table.component';\r\nexport * from './lib/components/tab/tab.component';\r\nexport * from './lib/components/datepicker/datepicker.component';\r\nexport * from './lib/components/input/input.component';\r\nexport * from './lib/components/radio/radio.component';\r\nexport * from './lib/components/checkbox/checkbox.component';\r\nexport * from './lib/components/toggle/toggle.component';\r\nexport * from './lib/components/dropdown/dropdown.component';\r\nexport * from './lib/components/right-modal/right-modal.component';\r\nexport * from './lib/components/sidebar/sidebar.component';\r\n\r\n// =============================================================================\r\n// SERVICES\r\n// =============================================================================\r\nexport * from './lib/services/notification.service';\r\nexport * from './lib/services/theme.service';\r\nexport * from './lib/services/loading.service';\r\n\r\n// =============================================================================\r\n// SHARED TYPES\r\n// =============================================================================\r\nexport * from './lib/shared/types/common.types';\r\n\r\n// =============================================================================\r\n// SHARED INTERFACES\r\n// =============================================================================\r\nexport * from './lib/shared/interfaces/component.interfaces';\r\n\r\n// =============================================================================\r\n// SHARED UTILITIES\r\n// =============================================================================\r\n\r\n// String utilities\r\nexport {\r\n toKebabCase,\r\n toCamelCase,\r\n toPascalCase,\r\n toSnakeCase,\r\n capitalize,\r\n truncate,\r\n isBlank,\r\n isNotBlank,\r\n slugify,\r\n escapeHtml,\r\n stripHtml,\r\n getInitials,\r\n pluralize,\r\n formatCount\r\n} from './lib/shared/utils/string.utils';\r\n\r\n// DOM utilities\r\nexport {\r\n isBrowser,\r\n generateUniqueId,\r\n matchesSelector,\r\n closestElement,\r\n isElementVisible,\r\n getFocusableElements,\r\n trapFocus,\r\n scrollIntoView,\r\n getScrollParent,\r\n disableBodyScroll,\r\n copyToClipboard,\r\n hasClass,\r\n addClass,\r\n removeClass,\r\n toggleClass,\r\n getComputedStyleValue\r\n} from './lib/shared/utils/dom.utils';\r\n\r\n// Accessibility utilities\r\nexport {\r\n AriaLive,\r\n AriaRole,\r\n AriaAttributes,\r\n getButtonAriaAttributes,\r\n getDialogAriaAttributes,\r\n getInputAriaAttributes,\r\n getProgressAriaAttributes,\r\n getTabAriaAttributes,\r\n getOptionAriaAttributes,\r\n generateLinkedIds,\r\n getVisuallyHiddenStyles,\r\n prefersReducedMotion,\r\n prefersHighContrast,\r\n announceToScreenReader,\r\n getAriaCurrent\r\n} from './lib/shared/utils/accessibility.utils';\r\n\r\n// Error handling utilities\r\nexport {\r\n ErrorSeverity,\r\n ErrorCategory,\r\n PecbError,\r\n ValidationError,\r\n ErrorOptions,\r\n ErrorHandler,\r\n createError,\r\n createValidationError,\r\n wrapError,\r\n isPecbError,\r\n isRecoverableError,\r\n formatErrorMessage,\r\n formatErrorForLog,\r\n createNetworkError,\r\n createAuthError,\r\n createAuthorizationError,\r\n createConfigError,\r\n registerErrorHandler,\r\n handleError,\r\n tryAsync,\r\n trySync\r\n} from './lib/shared/utils/error.utils';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pecb-ui-components.mjs","sources":["../../../projects/ui-components/src/lib/shared/utils/dom.utils.ts","../../../projects/ui-components/src/lib/components/button/button.component.ts","../../../projects/ui-components/src/lib/components/button/button.component.html","../../../projects/ui-components/src/lib/components/card/card.component.ts","../../../projects/ui-components/src/lib/components/card/card.component.html","../../../projects/ui-components/src/lib/components/status/status.component.ts","../../../projects/ui-components/src/lib/components/status/status.component.html","../../../projects/ui-components/src/lib/components/pagination/pagination.component.ts","../../../projects/ui-components/src/lib/components/pagination/pagination.component.html","../../../projects/ui-components/src/lib/components/table/table.component.ts","../../../projects/ui-components/src/lib/components/table/table.component.html","../../../projects/ui-components/src/lib/components/tab/tab.component.ts","../../../projects/ui-components/src/lib/components/tab/tab.component.html","../../../projects/ui-components/src/lib/components/datepicker/datepicker.component.ts","../../../projects/ui-components/src/lib/components/datepicker/datepicker.component.html","../../../projects/ui-components/src/lib/components/input/input.component.ts","../../../projects/ui-components/src/lib/components/input/input.component.html","../../../projects/ui-components/src/lib/components/radio/radio.component.ts","../../../projects/ui-components/src/lib/components/radio/radio.component.html","../../../projects/ui-components/src/lib/components/checkbox/checkbox.component.ts","../../../projects/ui-components/src/lib/components/checkbox/checkbox.component.html","../../../projects/ui-components/src/lib/components/toggle/toggle.component.ts","../../../projects/ui-components/src/lib/components/toggle/toggle.component.html","../../../projects/ui-components/src/lib/components/dropdown/dropdown.component.ts","../../../projects/ui-components/src/lib/components/dropdown/dropdown.component.html","../../../projects/ui-components/src/lib/components/right-modal/right-modal.component.ts","../../../projects/ui-components/src/lib/components/right-modal/right-modal.component.html","../../../projects/ui-components/src/lib/components/sidebar/sidebar.component.ts","../../../projects/ui-components/src/lib/components/sidebar/sidebar.component.html","../../../projects/ui-components/src/lib/components/confirmation/confirmation.component.ts","../../../projects/ui-components/src/lib/components/confirmation/confirmation.component.html","../../../projects/ui-components/src/lib/pecb-components.module.ts","../../../projects/ui-components/src/lib/components/alert/alert.component.ts","../../../projects/ui-components/src/lib/components/alert/alert.component.html","../../../projects/ui-components/src/lib/services/notification.service.ts","../../../projects/ui-components/src/lib/services/theme.service.ts","../../../projects/ui-components/src/lib/services/loading.service.ts","../../../projects/ui-components/src/lib/shared/types/common.types.ts","../../../projects/ui-components/src/lib/shared/utils/string.utils.ts","../../../projects/ui-components/src/lib/shared/utils/accessibility.utils.ts","../../../projects/ui-components/src/lib/shared/utils/error.utils.ts","../../../projects/ui-components/src/public-api.ts","../../../projects/ui-components/src/pecb-ui-components.ts"],"sourcesContent":["/**\n * DOM utility functions for PECB UI Components\n * @module utils/dom\n */\n\n/**\n * Check if code is running in a browser environment\n * @returns True if running in browser\n */\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * Generate a unique ID for DOM elements\n * @param prefix - Optional prefix for the ID\n * @returns A unique ID string\n *\n * @example\n * generateUniqueId('btn') // 'btn-a1b2c3d4'\n */\nexport function generateUniqueId(prefix = 'pecb'): string {\n const random = Math.random().toString(36).substring(2, 9);\n return `${prefix}-${random}`;\n}\n\n/**\n * Check if an element matches a CSS selector\n * @param element - The element to check\n * @param selector - The CSS selector\n * @returns True if the element matches\n */\nexport function matchesSelector(element: Element, selector: string): boolean {\n return element.matches(selector);\n}\n\n/**\n * Find the closest ancestor matching a selector\n * @param element - Starting element\n * @param selector - CSS selector to match\n * @returns The matching ancestor or null\n */\nexport function closestElement<T extends Element>(element: Element, selector: string): T | null {\n return element.closest(selector) as T | null;\n}\n\n/**\n * Check if an element is visible in the viewport\n * @param element - The element to check\n * @param partial - Whether partial visibility counts\n * @returns True if visible\n */\nexport function isElementVisible(element: Element, partial = true): boolean {\n if (!isBrowser()) return false;\n\n const rect = element.getBoundingClientRect();\n const windowHeight = window.innerHeight || document.documentElement.clientHeight;\n const windowWidth = window.innerWidth || document.documentElement.clientWidth;\n\n if (partial) {\n return (\n rect.top < windowHeight &&\n rect.bottom > 0 &&\n rect.left < windowWidth &&\n rect.right > 0\n );\n }\n\n return (\n rect.top >= 0 &&\n rect.left >= 0 &&\n rect.bottom <= windowHeight &&\n rect.right <= windowWidth\n );\n}\n\n/**\n * Get all focusable elements within a container\n * @param container - The container element\n * @returns Array of focusable elements\n */\nexport function getFocusableElements(container: Element): HTMLElement[] {\n const focusableSelectors = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]'\n ].join(',');\n\n return Array.from(container.querySelectorAll<HTMLElement>(focusableSelectors));\n}\n\n/**\n * Trap focus within a container (useful for modals)\n * @param container - The container to trap focus in\n * @returns Cleanup function to remove the trap\n */\nexport function trapFocus(container: HTMLElement): () => void {\n const focusableElements = getFocusableElements(container);\n const firstElement = focusableElements[0];\n const lastElement = focusableElements[focusableElements.length - 1];\n\n const handleKeyDown = (event: KeyboardEvent): void => {\n if (event.key !== 'Tab') return;\n\n if (event.shiftKey) {\n if (document.activeElement === firstElement) {\n event.preventDefault();\n lastElement?.focus();\n }\n } else {\n if (document.activeElement === lastElement) {\n event.preventDefault();\n firstElement?.focus();\n }\n }\n };\n\n container.addEventListener('keydown', handleKeyDown);\n firstElement?.focus();\n\n return () => {\n container.removeEventListener('keydown', handleKeyDown);\n };\n}\n\n/**\n * Scroll an element into view smoothly\n * @param element - The element to scroll to\n * @param options - Scroll options\n */\nexport function scrollIntoView(\n element: Element,\n options: ScrollIntoViewOptions = { behavior: 'smooth', block: 'nearest' }\n): void {\n element.scrollIntoView(options);\n}\n\n/**\n * Get the scroll parent of an element\n * @param element - The element to find scroll parent for\n * @returns The scroll parent element\n */\nexport function getScrollParent(element: Element): Element | null {\n if (!isBrowser()) return null;\n\n let parent: Element | null = element.parentElement;\n\n while (parent) {\n const style = getComputedStyle(parent);\n const overflow = style.overflow + style.overflowY + style.overflowX;\n\n if (/auto|scroll|overlay/.test(overflow)) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return document.scrollingElement || document.documentElement;\n}\n\n/**\n * Disable body scroll (useful for modals)\n * @returns Cleanup function to re-enable scroll\n */\nexport function disableBodyScroll(): () => void {\n if (!isBrowser()) return () => {};\n\n const scrollY = window.scrollY;\n const body = document.body;\n const originalStyles = {\n position: body.style.position,\n top: body.style.top,\n width: body.style.width,\n overflow: body.style.overflow\n };\n\n body.style.position = 'fixed';\n body.style.top = `-${scrollY}px`;\n body.style.width = '100%';\n body.style.overflow = 'hidden';\n\n return () => {\n body.style.position = originalStyles.position;\n body.style.top = originalStyles.top;\n body.style.width = originalStyles.width;\n body.style.overflow = originalStyles.overflow;\n window.scrollTo(0, scrollY);\n };\n}\n\n/**\n * Copy text to clipboard\n * @param text - The text to copy\n * @returns Promise that resolves when copied\n */\nexport async function copyToClipboard(text: string): Promise<void> {\n if (!isBrowser()) {\n throw new Error('Clipboard API not available in this environment');\n }\n\n if (navigator.clipboard && navigator.clipboard.writeText) {\n await navigator.clipboard.writeText(text);\n } else {\n // Fallback for older browsers\n const textArea = document.createElement('textarea');\n textArea.value = text;\n textArea.style.position = 'fixed';\n textArea.style.left = '-9999px';\n textArea.style.top = '-9999px';\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n document.execCommand('copy');\n document.body.removeChild(textArea);\n }\n}\n\n/**\n * Check if an element has a specific CSS class\n * @param element - The element to check\n * @param className - The class name\n * @returns True if the element has the class\n */\nexport function hasClass(element: Element, className: string): boolean {\n return element.classList.contains(className);\n}\n\n/**\n * Add CSS class(es) to an element\n * @param element - The element to modify\n * @param classNames - Class name(s) to add\n */\nexport function addClass(element: Element, ...classNames: string[]): void {\n element.classList.add(...classNames);\n}\n\n/**\n * Remove CSS class(es) from an element\n * @param element - The element to modify\n * @param classNames - Class name(s) to remove\n */\nexport function removeClass(element: Element, ...classNames: string[]): void {\n element.classList.remove(...classNames);\n}\n\n/**\n * Toggle a CSS class on an element\n * @param element - The element to modify\n * @param className - The class name to toggle\n * @param force - Optional force add (true) or remove (false)\n * @returns True if the class is now present\n */\nexport function toggleClass(element: Element, className: string, force?: boolean): boolean {\n return element.classList.toggle(className, force);\n}\n\n/**\n * Get computed CSS property value\n * @param element - The element to check\n * @param property - CSS property name\n * @returns The computed value\n */\nexport function getComputedStyleValue(element: Element, property: string): string {\n if (!isBrowser()) return '';\n return getComputedStyle(element).getPropertyValue(property);\n}\n","import { Component, input, output, HostBinding, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\nexport type ButtonVariant =\n | 'primary'\n | 'primary-outline'\n | 'primary-2'\n | 'primary-2-outline'\n | 'neutral'\n | 'neutral-outline'\n | 'secondary'\n | 'text'\n | 'text-muted'\n | 'text-brand'\n | 'destructive'\n | 'destructive-outline';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\nexport type ButtonIconStyle = 'none' | 'leading' | 'trailing' | 'icon-only';\n\n@Component({\n selector: 'pecb-button',\n imports: [CommonModule],\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n host: { '[attr.id]': 'null' }\n})\nexport class ButtonComponent {\n private readonly sanitizer = inject(DomSanitizer);\n\n id = input<string>(generateUniqueId('btn'));\n\n /**\n * The visual style variant of the button\n */\n variant = input<ButtonVariant>('primary');\n\n /**\n * The size of the button\n */\n size = input<ButtonSize>('md');\n\n /**\n * Icon placement style\n */\n iconStyle = input<ButtonIconStyle>('none');\n\n /**\n * Icon to display (used with iconStyle)\n */\n icon = input<string | undefined>(undefined);\n\n /**\n * Whether the button is disabled\n */\n disabled = input(false);\n\n /**\n * Whether the button should take full width\n */\n fullWidth = input(false);\n\n /**\n * Whether the button is in loading state\n */\n loading = input(false);\n\n /**\n * Button type attribute\n */\n type = input<'button' | 'submit' | 'reset'>('button');\n\n // --- ARIA Accessibility Properties ---\n\n /**\n * Accessible label for the button (required for icon-only buttons)\n */\n ariaLabel = input<string | undefined>(undefined);\n\n /**\n * ID of element that labels this button\n */\n ariaLabelledBy = input<string | undefined>(undefined);\n\n /**\n * ID of element that describes this button\n */\n ariaDescribedBy = input<string | undefined>(undefined);\n\n /**\n * Indicates the button controls an expandable element\n */\n ariaExpanded = input<boolean | undefined>(undefined);\n\n /**\n * Indicates the pressed state for toggle buttons\n */\n ariaPressed = input<boolean | undefined>(undefined);\n\n /**\n * Indicates the button opens a popup (menu, listbox, dialog, etc.)\n */\n ariaHasPopup = input<boolean | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog' | undefined>(undefined);\n\n /**\n * ID of the element controlled by this button\n */\n ariaControls = input<string | undefined>(undefined);\n\n /**\n * Event emitted when the button is clicked\n */\n clicked = output<MouseEvent>();\n\n /**\n * Host binding for the component's ID\n */\n @HostBinding('attr.id') get hostId(): null {\n return null; // ID is on the button element, not the host\n }\n\n /**\n * Get CSS classes for the button\n */\n get buttonClasses(): string[] {\n return [\n 'pecb-button',\n `pecb-button--${this.variant()}`,\n `pecb-button--${this.size()}`,\n this.iconStyle() !== 'none' ? `pecb-button--icon-${this.iconStyle()}` : '',\n this.fullWidth() ? 'pecb-button--full-width' : '',\n this.loading() ? 'pecb-button--loading' : ''\n ].filter(Boolean);\n }\n\n get showLeadingIcon(): boolean {\n return this.iconStyle() === 'leading' && !!this.icon() && !this.loading();\n }\n\n get showTrailingIcon(): boolean {\n return this.iconStyle() === 'trailing' && !!this.icon() && !this.loading();\n }\n\n get isIconOnly(): boolean {\n return this.iconStyle() === 'icon-only';\n }\n\n get loadingText(): string {\n return 'Loading, please wait';\n }\n\n get isSvgIcon(): boolean {\n return !!this.icon() && this.icon()!.trimStart().startsWith('<');\n }\n\n get safeIconHtml(): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(this.icon() ?? '');\n }\n\n onClick(event: MouseEvent): void {\n if (!this.disabled() && !this.loading()) {\n this.clicked.emit(event);\n }\n }\n\n onKeyDown(event: KeyboardEvent): void {\n if ((event.key === 'Enter' || event.key === ' ') && !this.disabled() && !this.loading()) {\n event.preventDefault();\n this.clicked.emit(event as unknown as MouseEvent);\n }\n }\n}\n","<button\n [id]=\"id()\"\n [type]=\"type()\"\n [disabled]=\"disabled() || loading()\"\n [class]=\"buttonClasses.join(' ')\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledBy()\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n [attr.aria-expanded]=\"ariaExpanded() !== undefined ? ariaExpanded() : null\"\n [attr.aria-pressed]=\"ariaPressed() !== undefined ? ariaPressed() : null\"\n [attr.aria-haspopup]=\"ariaHasPopup()\"\n [attr.aria-controls]=\"ariaControls()\"\n [attr.aria-busy]=\"loading() ? true : null\"\n [attr.aria-disabled]=\"disabled() ? true : null\"\n (click)=\"onClick($event)\"\n (keydown)=\"onKeyDown($event)\"\n>\n <span class=\"pecb-button__content\">\n @if (loading()) {\n <span class=\"pecb-button__spinner\" aria-hidden=\"true\"></span>\n <span class=\"pecb-button__sr-only\">{{ loadingText }}</span>\n }\n\n @if (showLeadingIcon) {\n <span class=\"pecb-button__icon pecb-button__icon--leading\" aria-hidden=\"true\">\n @if (isSvgIcon) {\n <span [innerHTML]=\"safeIconHtml\"></span>\n } @else {\n <span>{{ icon }}</span>\n }\n </span>\n }\n\n @if (isIconOnly && icon() && !loading()) {\n <span class=\"pecb-button__icon\" aria-hidden=\"true\">\n @if (isSvgIcon) {\n <span [innerHTML]=\"safeIconHtml\"></span>\n } @else {\n <span>{{ icon }}</span>\n }\n </span>\n }\n\n @if (!isIconOnly) {\n <span class=\"pecb-button__text\">\n <ng-content></ng-content>\n </span>\n }\n\n @if (showTrailingIcon) {\n <span class=\"pecb-button__icon pecb-button__icon--trailing\" aria-hidden=\"true\">\n @if (isSvgIcon) {\n <span [innerHTML]=\"safeIconHtml\"></span>\n } @else {\n <span>{{ icon }}</span>\n }\n </span>\n }\n </span>\n</button>\n","import { Component, input } from '@angular/core';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\nexport type CardElevation = 'none' | 'sm' | 'md' | 'lg' | 'xl';\nexport type CardRadius = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'full';\n\nconst RADIUS_MAP: Record<CardRadius, string> = {\n none: '0',\n xs: '6px',\n sm: '8px',\n md: '12px',\n lg: '16px',\n full: '9999px',\n};\n\n/**\n * Semantic role for the card component\n */\nexport type CardRole = 'article' | 'region' | 'group' | 'listitem' | 'none';\n\n@Component({\n selector: 'pecb-card',\n standalone: true,\n templateUrl: './card.component.html',\n styleUrls: ['./card.component.scss']\n})\nexport class CardComponent {\n /**\n * Unique ID for the card element\n */\n id = input<string>(generateUniqueId('card'));\n\n /**\n * The elevation level (shadow depth) of the card\n */\n elevation = input<CardElevation>('md');\n\n /**\n * Whether the card should be hoverable with elevation change\n */\n hoverable = input(false);\n\n /**\n * Whether to add padding to the card\n */\n noPadding = input(false);\n\n /**\n * Border-radius: predefined token ('xs'|'sm'|'md'|'lg'|'none'|'full')\n * or any CSS value e.g. '20px', '50%'\n */\n radius = input<CardRadius | string>('lg');\n\n // --- ARIA Accessibility Properties ---\n\n /**\n * Semantic role for the card (article, region, group, listitem, or none)\n * Use 'article' for self-contained content, 'region' for significant sections\n */\n role = input<CardRole>('none');\n\n /**\n * Accessible label for the card\n */\n ariaLabel = input<string | undefined>(undefined);\n\n /**\n * ID of element that labels this card\n */\n ariaLabelledBy = input<string | undefined>(undefined);\n\n /**\n * ID of element that describes this card\n */\n ariaDescribedBy = input<string | undefined>(undefined);\n\n /**\n * Get CSS classes for the card\n */\n get cardClasses(): string[] {\n return [\n 'pecb-card',\n `pecb-card--elevation-${this.elevation()}`,\n this.hoverable() ? 'pecb-card--hoverable' : '',\n this.noPadding() ? 'pecb-card--no-padding' : ''\n ].filter(Boolean);\n }\n\n get borderRadiusStyle(): string {\n return RADIUS_MAP[this.radius() as CardRadius] ?? this.radius();\n }\n\n get roleAttribute(): string | null {\n return this.role() !== 'none' ? this.role() : null;\n }\n}\n\n@Component({\n selector: 'pecb-card-header',\n standalone: true,\n template: `\n <div class=\"pecb-card__header\" role=\"heading\" [attr.aria-level]=\"headingLevel()\">\n <ng-content></ng-content>\n </div>\n `,\n styleUrls: ['./card.component.scss']\n})\nexport class CardHeaderComponent {\n headingLevel = input<number | null>(null);\n}\n\n@Component({\n selector: 'pecb-card-body',\n standalone: true,\n template: '<div class=\"pecb-card__body\"><ng-content></ng-content></div>',\n styleUrls: ['./card.component.scss']\n})\nexport class CardBodyComponent {}\n\n@Component({\n selector: 'pecb-card-footer',\n standalone: true,\n template: '<div class=\"pecb-card__footer\"><ng-content></ng-content></div>',\n styleUrls: ['./card.component.scss']\n})\nexport class CardFooterComponent {}\n","<div\n [id]=\"id()\"\n [class]=\"cardClasses.join(' ')\"\n [style.border-radius]=\"borderRadiusStyle\"\n [attr.role]=\"roleAttribute\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledBy()\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n>\n <ng-content></ng-content>\n</div>\n","import { Component, input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type StatusType = 'warning' | 'action' | 'success' | 'error' | 'different' | 'disabled' | 'neutral';\nexport type StatusVariant = 'accent' | 'filled' | 'outline' | 'custom';\nexport type StatusSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'pecb-status',\n imports: [CommonModule],\n templateUrl: './status.component.html',\n styleUrls: ['./status.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StatusComponent {\n private readonly _id = `status-${Math.random().toString(36).substring(2, 9)}`;\n\n type = input<StatusType>('neutral');\n variant = input<StatusVariant>('filled');\n size = input<StatusSize>('md');\n ariaLabel = input<string>();\n text = input<string>();\n customClass = input<string>();\n\n get id(): string {\n return this._id;\n }\n\n get statusClasses(): string[] {\n const classes = [\n 'pecb-status',\n `pecb-status--${this.size()}`\n ];\n\n if (this.variant() !== 'custom') {\n classes.push(`pecb-status--${this.type()}`);\n classes.push(`pecb-status--${this.variant()}`);\n }\n\n const customClass = this.customClass();\n if (customClass) {\n classes.push(...customClass.split(' ').filter(c => c.trim()));\n }\n\n return classes;\n }\n}\n","<span\n [id]=\"id\"\n [ngClass]=\"statusClasses\"\n [attr.aria-label]=\"ariaLabel()\"\n role=\"status\"\n>\n <ng-content></ng-content>{{ text() }}\n</span>\n","import {\n Component,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n HostListener,\n ElementRef,\n input,\n output,\n model,\n signal,\n computed\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nexport type PaginationSize = 'sm' | 'md' | 'lg';\nexport type PaginationVariant = 'full' | 'compact' | 'minimal' | 'centered';\n\nexport interface PageChangeEvent {\n page: number;\n pageSize: number;\n startIndex: number;\n endIndex: number;\n}\n\n@Component({\n selector: 'pecb-pagination',\n imports: [CommonModule],\n templateUrl: './pagination.component.html',\n styleUrls: ['./pagination.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PaginationComponent {\n totalItems = input(0);\n pageSize = model(10);\n currentPage = model(1);\n pageSizeOptions = input<number[]>([10, 25, 50, 75]);\n size = input<PaginationSize>('md');\n variant = input<PaginationVariant>('full');\n showPageSizeSelector = input(true);\n showItemsInfo = input(true);\n maxVisiblePages = input(3);\n disabled = input(false);\n ariaLabel = input('Pagination', { alias: 'aria-label' });\n\n pageChange = output<PageChangeEvent>();\n pageSizeChange = output<number>();\n\n readonly totalPages = computed(() => Math.ceil(this.totalItems() / this.pageSize()) || 0);\n readonly visiblePages = computed(() => this.computeVisiblePages());\n isDropdownOpen = signal(false);\n\n constructor(private elementRef: ElementRef, private cdr: ChangeDetectorRef) {}\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (this.isDropdownOpen() && !this.elementRef.nativeElement.contains(event.target)) {\n this.isDropdownOpen.set(false);\n this.cdr.markForCheck();\n }\n }\n\n get containerClasses(): string[] {\n return [\n 'pecb-pagination',\n `pecb-pagination--${this.size()}`,\n `pecb-pagination--${this.variant()}`,\n this.disabled() ? 'pecb-pagination--disabled' : ''\n ].filter(Boolean);\n }\n\n get showPages(): boolean {\n return this.variant() === 'full' || this.variant() === 'compact';\n }\n\n get showPageSize(): boolean {\n return this.variant() === 'full' && this.showPageSizeSelector();\n }\n\n get itemsInfoText(): string {\n if (this.variant() === 'minimal' || this.variant() === 'centered') {\n return `Showing ${this.startIndex}-${this.endIndex} of ${this.totalItems()}`;\n }\n return `${this.startIndex}-${this.endIndex} of ${this.totalItems()} items`;\n }\n\n get startIndex(): number {\n if (this.totalItems() === 0) return 0;\n return (this.currentPage() - 1) * this.pageSize() + 1;\n }\n\n get endIndex(): number {\n return Math.min(this.currentPage() * this.pageSize(), this.totalItems());\n }\n\n get canGoPrevious(): boolean {\n return this.currentPage() > 1 && !this.disabled();\n }\n\n get canGoNext(): boolean {\n return this.currentPage() < this.totalPages() && !this.disabled();\n }\n\n goToPage(page: number): void {\n if (this.disabled() || page < 1 || page > this.totalPages() || page === this.currentPage()) {\n return;\n }\n this.currentPage.set(page);\n this.emitPageChange();\n this.cdr.markForCheck();\n }\n\n goToPrevious(): void {\n if (this.canGoPrevious) {\n this.goToPage(this.currentPage() - 1);\n }\n }\n\n goToNext(): void {\n if (this.canGoNext) {\n this.goToPage(this.currentPage() + 1);\n }\n }\n\n onPageSizeChange(newSize: number): void {\n if (this.disabled()) return;\n this.pageSize.set(newSize);\n this.currentPage.set(1);\n this.isDropdownOpen.set(false);\n this.pageSizeChange.emit(newSize);\n this.emitPageChange();\n this.cdr.markForCheck();\n }\n\n toggleDropdown(): void {\n if (!this.disabled()) {\n this.isDropdownOpen.set(!this.isDropdownOpen());\n this.cdr.markForCheck();\n }\n }\n\n closeDropdown(): void {\n this.isDropdownOpen.set(false);\n }\n\n isNumber(value: number | string): boolean {\n return typeof value === 'number';\n }\n\n trackByPage(index: number, page: number | string): number | string {\n return typeof page === 'number' ? page : `ellipsis-${index}`;\n }\n\n private emitPageChange(): void {\n this.pageChange.emit({\n page: this.currentPage(),\n pageSize: this.pageSize(),\n startIndex: this.startIndex,\n endIndex: this.endIndex\n });\n }\n\n private computeVisiblePages(): (number | string)[] {\n const pages: (number | string)[] = [];\n const totalPages = this.totalPages();\n const currentPage = this.currentPage();\n const maxVisible = this.maxVisiblePages();\n\n if (totalPages <= maxVisible + 2) {\n for (let i = 1; i <= totalPages; i++) pages.push(i);\n } else {\n pages.push(1);\n if (currentPage <= maxVisible) {\n for (let i = 2; i <= maxVisible + 1; i++) pages.push(i);\n pages.push('...');\n pages.push(totalPages);\n } else if (currentPage >= totalPages - maxVisible + 1) {\n pages.push('...');\n for (let i = totalPages - maxVisible; i <= totalPages; i++) pages.push(i);\n } else {\n pages.push('...');\n for (let i = currentPage - 1; i <= currentPage + 1; i++) pages.push(i);\n pages.push('...');\n pages.push(totalPages);\n }\n }\n\n return pages;\n }\n}\n","<nav\n [class]=\"containerClasses.join(' ')\"\n [attr.aria-label]=\"ariaLabel()\"\n role=\"navigation\"\n>\n <!-- V4: Centered variant - prev button on left -->\n <button\n *ngIf=\"variant() === 'centered'\"\n type=\"button\"\n class=\"pecb-pagination__nav-button pecb-pagination__nav-button--prev pecb-pagination__nav-button--bordered\"\n [disabled]=\"!canGoPrevious\"\n [attr.aria-label]=\"'Go to previous page'\"\n (click)=\"goToPrevious()\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 12L6 8L10 4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <!-- Info section (V1, V2, V3, V4) -->\n <div class=\"pecb-pagination__info\" *ngIf=\"showItemsInfo()\">\n <span class=\"pecb-pagination__items-text\">\n {{ itemsInfoText }}\n </span>\n </div>\n\n <!-- Page size dropdown (V1 only) -->\n <div *ngIf=\"showPageSize\" class=\"pecb-pagination__page-size\">\n <span class=\"pecb-pagination__page-size-label\">Items per page:</span>\n <div class=\"pecb-pagination__dropdown\">\n <button\n type=\"button\"\n class=\"pecb-pagination__dropdown-trigger\"\n [class.pecb-pagination__dropdown-trigger--open]=\"isDropdownOpen()\"\n [disabled]=\"disabled()\"\n [attr.aria-expanded]=\"isDropdownOpen()\"\n aria-haspopup=\"listbox\"\n (click)=\"toggleDropdown()\"\n >\n <span>{{ pageSize() }}</span>\n <svg\n class=\"pecb-pagination__dropdown-icon\"\n [class.pecb-pagination__dropdown-icon--open]=\"isDropdownOpen()\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4 6L8 10L12 6\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n <ul\n *ngIf=\"isDropdownOpen()\"\n class=\"pecb-pagination__dropdown-menu\"\n role=\"listbox\"\n [attr.aria-label]=\"'Select items per page'\"\n >\n <li\n *ngFor=\"let option of pageSizeOptions()\"\n class=\"pecb-pagination__dropdown-item\"\n [class.pecb-pagination__dropdown-item--selected]=\"option === pageSize()\"\n role=\"option\"\n [attr.aria-selected]=\"option === pageSize()\"\n (click)=\"onPageSizeChange(option)\"\n >\n {{ option }}\n </li>\n </ul>\n </div>\n </div>\n\n <!-- Controls section -->\n <div class=\"pecb-pagination__controls\">\n <!-- Previous button (V1, V2, V3) -->\n <button\n *ngIf=\"variant() !== 'centered'\"\n type=\"button\"\n class=\"pecb-pagination__nav-button pecb-pagination__nav-button--prev\"\n [class.pecb-pagination__nav-button--bordered]=\"variant() === 'minimal'\"\n [disabled]=\"!canGoPrevious\"\n [attr.aria-label]=\"'Go to previous page'\"\n (click)=\"goToPrevious()\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 12L6 8L10 4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <!-- Page numbers (V1, V2) -->\n <div *ngIf=\"showPages\" class=\"pecb-pagination__pages\" role=\"group\" aria-label=\"Page navigation\">\n <ng-container *ngFor=\"let page of visiblePages(); trackBy: trackByPage\">\n <button\n *ngIf=\"isNumber(page)\"\n type=\"button\"\n class=\"pecb-pagination__page-button\"\n [class.pecb-pagination__page-button--active]=\"page === currentPage()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"'Page ' + page\"\n [attr.aria-current]=\"page === currentPage() ? 'page' : null\"\n (click)=\"goToPage(+page)\"\n >\n {{ page }}\n </button>\n <span\n *ngIf=\"!isNumber(page)\"\n class=\"pecb-pagination__ellipsis\"\n aria-hidden=\"true\"\n >\n {{ page }}\n </span>\n </ng-container>\n </div>\n\n <!-- Next button (V1, V2, V3) -->\n <button\n *ngIf=\"variant() !== 'centered'\"\n type=\"button\"\n class=\"pecb-pagination__nav-button pecb-pagination__nav-button--next\"\n [class.pecb-pagination__nav-button--bordered]=\"variant() === 'minimal'\"\n [disabled]=\"!canGoNext\"\n [attr.aria-label]=\"'Go to next page'\"\n (click)=\"goToNext()\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 4L10 8L6 12\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n\n <!-- V4: Centered variant - next button on right -->\n <button\n *ngIf=\"variant() === 'centered'\"\n type=\"button\"\n class=\"pecb-pagination__nav-button pecb-pagination__nav-button--next pecb-pagination__nav-button--bordered\"\n [disabled]=\"!canGoNext\"\n [attr.aria-label]=\"'Go to next page'\"\n (click)=\"goToNext()\"\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M6 4L10 8L6 12\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n</nav>\n","import {\n Component,\n input,\n output,\n model,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n ContentChild,\n TemplateRef,\n Type,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { PageChangeEvent, PaginationComponent } from '../pagination/pagination.component';\nimport { StatusComponent } from '../status/status.component';\n\nexport type TableSize = 'sm' | 'md' | 'lg';\nexport type TableVariant = 'default' | 'striped' | 'bordered';\n\n/**\n * Defines built-in column types\n */\nexport type PecbTableColumnType = 'text' | 'link' | 'status' | 'action' | 'user' | 'custom';\n\n/**\n * Defines built-in component names for columns\n */\nexport type PecbTableColumnComponent = 'status' | 'action' | 'user';\n\nexport interface TableAction {\n id: string;\n icon: 'view' | 'edit' | 'delete' | 'download' | 'copy' | 'custom';\n tooltip?: string;\n customIcon?: string;\n disabled?: boolean;\n variant?: 'default' | 'danger';\n /** Whether to show a vertical divider before this action */\n dividerBefore?: boolean;\n /** Click handler for this specific action */\n action?: (row: any, index: number) => void;\n}\n\nexport interface TableStatusConfig {\n typeMap?: Record<string, string>;\n variant?: 'accent' | 'filled' | 'outline';\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport interface TableUserConfig {\n avatarKey?: string;\n nameKey?: string;\n secondaryKey?: string;\n}\n\nexport interface PecbTableColumn {\n key: string;\n label: string;\n width?: string;\n align?: 'left' | 'center' | 'right';\n sortable?: boolean;\n cellTemplate?: TemplateRef<any>;\n headerTemplate?: TemplateRef<any>;\n cssClass?: string;\n type?: PecbTableColumnType;\n component?: PecbTableColumnComponent;\n dynamicComponent?: Type<any>;\n componentInputs?: Record<string, any>;\n componentInputsFn?: (row: any, value: any, index: number) => Record<string, any>;\n actions?: TableAction[];\n statusConfig?: TableStatusConfig;\n userConfig?: TableUserConfig;\n}\n\nexport interface TableSortEvent {\n column: string;\n direction: 'asc' | 'desc' | null;\n}\n\nexport interface TableRowActionEvent {\n action: string;\n row: any;\n index: number;\n}\n\nexport interface TableSelectionEvent {\n selectedRows: any[];\n selectedIndices: number[];\n}\n\n@Component({\n selector: 'pecb-table',\n imports: [CommonModule, PaginationComponent, StatusComponent],\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableComponent {\n constructor(private sanitizer: DomSanitizer, private cdr: ChangeDetectorRef) {}\n\n /**\n * Column definitions for the table\n */\n columns = input<PecbTableColumn[]>([]);\n\n /**\n * Data array to display in the table\n */\n data = input<any[]>([]);\n\n /**\n * Size variant of the table\n * @default 'md'\n */\n size = input<TableSize>('md');\n\n /**\n * Visual variant of the table\n * @default 'default'\n */\n variant = input<TableVariant>('default');\n\n /**\n * Whether to show the table header\n * @default true\n */\n showHeader = input(true);\n\n /**\n * Whether to enable row hover effect\n * @default true\n */\n hoverable = input(true);\n\n /**\n * Whether to show pagination\n * @default true\n */\n showPagination = input(true);\n\n /**\n * Total number of items for pagination\n */\n totalItems = input(0);\n\n /**\n * Current page number (1-based)\n * @default 1\n */\n currentPage = model(1);\n\n /**\n * Number of items per page\n * @default 15\n */\n pageSize = model(15);\n\n /**\n * Available page size options\n */\n pageSizeOptions = input<number[]>([10, 15, 25, 50]);\n\n /**\n * Whether to show page size selector in pagination\n * @default true\n */\n showPageSizeSelector = input(true);\n\n /**\n * Pagination variant\n * @default 'full'\n */\n paginationVariant = input<'full' | 'compact' | 'minimal' | 'centered'>('full');\n\n /**\n * Message to display when there is no data\n */\n emptyMessage = input('There are no entries yet.');\n\n /**\n * Whether to show loading state\n * @default false\n */\n loading = input(false);\n\n /**\n * Whether to enable row selection\n * @default false\n */\n selectable = input(false);\n\n /**\n * Currently selected row indices\n */\n selectedIndices = model<number[]>([]);\n\n /**\n * Whether the table has a fixed header\n * @default false\n */\n stickyHeader = input(false);\n\n /**\n * Maximum height of the table body (enables scrolling)\n */\n maxHeight = input<string | undefined>(undefined);\n\n /**\n * Column key currently being sorted\n */\n sortColumn = model<string | undefined>(undefined);\n\n /**\n * Current sort direction\n */\n sortDirection = model<'asc' | 'desc' | null>(null);\n\n /**\n * ARIA label for the table\n */\n ariaLabel = input('Data table', { alias: 'aria-label' });\n\n /**\n * Emitted when a page change occurs\n */\n pageChange = output<PageChangeEvent>();\n\n /**\n * Emitted when page size changes\n */\n pageSizeChange = output<number>();\n\n /**\n * Emitted when a row is clicked\n */\n rowClick = output<{ row: any; index: number }>();\n\n /**\n * Emitted when a row action is triggered\n */\n rowAction = output<TableRowActionEvent>();\n\n /**\n * Emitted when sorting changes\n */\n sortChange = output<TableSortEvent>();\n\n /**\n * Emitted when row selection changes\n */\n selectionChange = output<TableSelectionEvent>();\n\n @ContentChild('emptyTemplate') emptyTemplate?: TemplateRef<any>;\n @ContentChild('loadingTemplate') loadingTemplate?: TemplateRef<any>;\n\n get containerClasses(): string {\n const classes = ['pecb-table-container'];\n if (this.stickyHeader()) classes.push('pecb-table-container--sticky');\n return classes.join(' ');\n }\n\n get paginationClasses(): string {\n const classes = ['pecb-table__pagination'];\n if (this.paginationVariant() === 'full' || this.paginationVariant() === 'compact') {\n classes.push('pecb-table__pagination--bordered');\n }\n return classes.join(' ');\n }\n\n get tableClasses(): string {\n const classes = ['pecb-table', `pecb-table--${this.size()}`, `pecb-table--${this.variant()}`];\n if (this.hoverable()) classes.push('pecb-table--hoverable');\n if (this.selectable()) classes.push('pecb-table--selectable');\n return classes.join(' ');\n }\n\n getCellValue(row: any, key: string): any {\n if (!row || !key) return '';\n const keys = key.split('.');\n let value = row;\n for (const k of keys) {\n if (value === null || value === undefined) return '';\n value = value[k];\n }\n return value ?? '';\n }\n\n getAlignmentClass(column: PecbTableColumn): string {\n if (!column.align || column.align === 'left') return '';\n return `pecb-table__cell--${column.align}`;\n }\n\n onRowClick(row: any, index: number): void {\n if (this.selectable()) this.toggleRowSelection(index);\n this.rowClick.emit({ row, index });\n }\n\n onRowAction(action: string, row: any, index: number, event: Event): void {\n event.stopPropagation();\n this.rowAction.emit({ action, row, index });\n }\n\n onHeaderClick(column: PecbTableColumn): void {\n if (!column.sortable) return;\n let newDirection: 'asc' | 'desc' | null = 'asc';\n\n if (this.sortColumn() === column.key) {\n if (this.sortDirection() === 'asc') {\n newDirection = 'desc';\n } else if (this.sortDirection() === 'desc') {\n newDirection = null;\n }\n }\n\n this.sortColumn.set(newDirection ? column.key : undefined);\n this.sortDirection.set(newDirection);\n\n this.sortChange.emit({\n column: column.key,\n direction: newDirection,\n });\n this.cdr.markForCheck();\n }\n\n toggleRowSelection(index: number): void {\n const newSelection = [...this.selectedIndices()];\n const existingIndex = newSelection.indexOf(index);\n if (existingIndex > -1) newSelection.splice(existingIndex, 1);\n else newSelection.push(index);\n this.selectedIndices.set(newSelection);\n this.emitSelectionChange();\n }\n\n toggleAllSelection(): void {\n if (this.isAllSelected()) this.selectedIndices.set([]);\n else this.selectedIndices.set(this.data().map((_, index) => index));\n this.emitSelectionChange();\n }\n\n isRowSelected(index: number): boolean {\n return this.selectedIndices().includes(index);\n }\n\n isAllSelected(): boolean {\n return this.data().length > 0 && this.selectedIndices().length === this.data().length;\n }\n\n isSomeSelected(): boolean {\n return this.selectedIndices().length > 0 && this.selectedIndices().length < this.data().length;\n }\n\n onPageChange(event: PageChangeEvent): void {\n this.currentPage.set(event.page);\n this.pageChange.emit(event);\n }\n\n onPageSizeChange(newSize: number): void {\n this.pageSize.set(newSize);\n this.currentPage.set(1);\n this.pageSizeChange.emit(newSize);\n }\n\n getSortState(column: PecbTableColumn): 'asc' | 'desc' | 'none' {\n if (!column.sortable) return 'none';\n if (this.sortColumn() !== column.key) return 'none';\n return this.sortDirection() || 'none';\n }\n\n trackByIndex(index: number): number { return index; }\n trackByKey(_: number, column: PecbTableColumn): string { return column.key; }\n\n getColumnType(column: PecbTableColumn): string {\n return column.component || column.type || 'text';\n }\n\n getStatusType(value: any, column: PecbTableColumn): any {\n const config = column.statusConfig;\n if (config?.typeMap && value in config.typeMap) return config.typeMap[value];\n const defaultMap: Record<string, string> = {\n 'Pending': 'warning', 'pending': 'warning',\n 'Inactive': 'error', 'inactive': 'error',\n 'Approved': 'success', 'approved': 'success',\n 'Active': 'success', 'active': 'success',\n 'Disabled': 'disabled', 'disabled': 'disabled',\n };\n return defaultMap[value] || 'neutral';\n }\n\n getStatusVariant(column: PecbTableColumn): any { return column.statusConfig?.variant || 'filled'; }\n getStatusSize(column: PecbTableColumn): any { return column.statusConfig?.size || 'sm'; }\n\n getUserData(row: any, column: PecbTableColumn): { avatar: string; name: string; secondary: string } {\n const config = column.userConfig || {};\n return {\n avatar: row[config.avatarKey || 'avatar'] || '',\n name: row[config.nameKey || column.key] || '',\n secondary: row[config.secondaryKey || 'email'] || '',\n };\n }\n\n getActions(column: PecbTableColumn): TableAction[] {\n if (column.actions && column.actions.length > 0) return column.actions;\n return [\n { id: 'view', icon: 'view', tooltip: 'View' },\n { id: 'edit', icon: 'edit', tooltip: 'Edit' },\n { id: 'delete', icon: 'delete', tooltip: 'Delete', variant: 'danger' },\n ];\n }\n\n onActionClick(action: TableAction, row: any, index: number, event: Event): void {\n event.stopPropagation();\n if (action.action) action.action(row, index);\n this.rowAction.emit({ action: action.id, row, index });\n }\n\n getDynamicComponentInputs(row: any, column: PecbTableColumn, index: number): Record<string, any> {\n const value = this.getCellValue(row, column.key);\n const staticInputs = column.componentInputs || {};\n if (column.componentInputsFn) {\n return { ...staticInputs, ...column.componentInputsFn(row, value, index) };\n }\n return staticInputs;\n }\n\n hasDynamicComponent(column: PecbTableColumn): boolean { return !!column.dynamicComponent; }\n\n getSafeIcon(iconSvg: string | undefined): SafeHtml {\n if (!iconSvg) return '';\n return this.sanitizer.bypassSecurityTrustHtml(iconSvg);\n }\n\n /**\n * Builds a safe href from a URL string, prepending https:// if missing\n */\n getLinkHref(value: string): string {\n if (!value) return '#';\n if (value.startsWith('http://') || value.startsWith('https://')) return value;\n return `https://${value}`;\n }\n\n private emitSelectionChange(): void {\n const selectedRows = this.selectedIndices().map(index => this.data()[index]);\n this.selectionChange.emit({ selectedRows, selectedIndices: this.selectedIndices() });\n }\n}\n","<div class=\"pecb-table-wrapper\">\n <div [class]=\"containerClasses\" [style.maxHeight]=\"maxHeight()\">\n <!-- Loading State -->\n <div *ngIf=\"loading()\" class=\"pecb-table__loading\">\n <ng-container *ngIf=\"loadingTemplate; else defaultLoading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultLoading>\n <div class=\"pecb-table__loading-spinner\">\n <svg class=\"pecb-table__spinner-icon\" viewBox=\"0 0 24 24\" fill=\"none\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-dasharray=\"31.4 31.4\" />\n </svg>\n <span>Loading...</span>\n </div>\n </ng-template>\n </div>\n\n <!-- Table -->\n <table\n *ngIf=\"!loading()\"\n [class]=\"tableClasses\"\n [attr.aria-label]=\"ariaLabel()\"\n role=\"table\">\n\n <!-- Table Header -->\n <thead *ngIf=\"showHeader()\" class=\"pecb-table__head\" [class.pecb-table__head--sticky]=\"stickyHeader()\">\n <tr class=\"pecb-table__row pecb-table__row--header\" role=\"row\">\n <!-- Selection Checkbox Column -->\n <th\n *ngIf=\"selectable()\"\n class=\"pecb-table__cell pecb-table__cell--header pecb-table__cell--checkbox\"\n role=\"columnheader\"\n scope=\"col\">\n <label class=\"pecb-table__checkbox-wrapper\">\n <input\n type=\"checkbox\"\n class=\"pecb-table__checkbox\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (change)=\"toggleAllSelection()\"\n aria-label=\"Select all rows\" />\n <span class=\"pecb-table__checkbox-custom\"></span>\n </label>\n </th>\n\n <!-- Data Columns -->\n <th\n *ngFor=\"let column of columns(); trackBy: trackByKey\"\n class=\"pecb-table__cell pecb-table__cell--header\"\n [class.pecb-table__cell--sortable]=\"column.sortable\"\n [class]=\"getAlignmentClass(column)\"\n [ngClass]=\"column.cssClass\"\n [style.width]=\"column.width\"\n [attr.aria-sort]=\"column.sortable ? (sortColumn() === column.key ? (sortDirection() === 'asc' ? 'ascending' : 'descending') : 'none') : null\"\n role=\"columnheader\"\n scope=\"col\"\n (click)=\"onHeaderClick(column)\"\n (keydown.enter)=\"onHeaderClick(column)\"\n (keydown.space)=\"onHeaderClick(column); $event.preventDefault()\"\n [attr.tabindex]=\"column.sortable ? 0 : null\">\n <div class=\"pecb-table__header-content\">\n <ng-container *ngIf=\"column.headerTemplate; else defaultHeader\">\n <ng-container *ngTemplateOutlet=\"column.headerTemplate; context: { $implicit: column }\"></ng-container>\n </ng-container>\n <ng-template #defaultHeader>\n <span class=\"pecb-table__header-text\">{{ column.label }}</span>\n </ng-template>\n\n <!-- Sort Icon -->\n <span *ngIf=\"column.sortable\" class=\"pecb-table__sort-icon\" [attr.data-sort]=\"getSortState(column)\">\n <svg *ngIf=\"getSortState(column) === 'none'\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8 3L12 7H4L8 3Z\" fill=\"currentColor\" opacity=\"0.4\"/>\n <path d=\"M8 13L4 9H12L8 13Z\" fill=\"currentColor\" opacity=\"0.4\"/>\n </svg>\n <svg *ngIf=\"getSortState(column) === 'asc'\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8 3L12 7H4L8 3Z\" fill=\"currentColor\"/>\n <path d=\"M8 13L4 9H12L8 13Z\" fill=\"currentColor\" opacity=\"0.4\"/>\n </svg>\n <svg *ngIf=\"getSortState(column) === 'desc'\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8 3L12 7H4L8 3Z\" fill=\"currentColor\" opacity=\"0.4\"/>\n <path d=\"M8 13L4 9H12L8 13Z\" fill=\"currentColor\"/>\n </svg>\n </span>\n </div>\n </th>\n </tr>\n </thead>\n\n <!-- Table Body -->\n <tbody class=\"pecb-table__body\">\n <!-- Empty State -->\n <tr *ngIf=\"data().length === 0\" class=\"pecb-table__row pecb-table__row--empty\">\n <td\n [attr.colspan]=\"selectable() ? columns().length + 1 : columns().length\"\n class=\"pecb-table__cell pecb-table__cell--empty\">\n <ng-container *ngIf=\"emptyTemplate; else defaultEmpty\">\n <ng-container *ngTemplateOutlet=\"emptyTemplate\"></ng-container>\n </ng-container>\n <ng-template #defaultEmpty>\n <div class=\"pecb-table__empty-content\">\n <span class=\"pecb-table__empty-message\">{{ emptyMessage() }}</span>\n </div>\n </ng-template>\n </td>\n </tr>\n\n <!-- Data Rows -->\n <tr\n *ngFor=\"let row of data(); let i = index; trackBy: trackByIndex\"\n class=\"pecb-table__row pecb-table__row--data\"\n [class.pecb-table__row--selected]=\"isRowSelected(i)\"\n role=\"row\"\n (click)=\"onRowClick(row, i)\"\n [attr.tabindex]=\"0\"\n (keydown.enter)=\"onRowClick(row, i)\">\n\n <!-- Selection Checkbox -->\n <td\n *ngIf=\"selectable()\"\n class=\"pecb-table__cell pecb-table__cell--checkbox\"\n role=\"cell\"\n (click)=\"$event.stopPropagation()\">\n <label class=\"pecb-table__checkbox-wrapper\">\n <input\n type=\"checkbox\"\n class=\"pecb-table__checkbox\"\n [checked]=\"isRowSelected(i)\"\n (change)=\"toggleRowSelection(i)\"\n [attr.aria-label]=\"'Select row ' + (i + 1)\" />\n <span class=\"pecb-table__checkbox-custom\"></span>\n </label>\n </td>\n\n <!-- Data Cells -->\n <td\n *ngFor=\"let column of columns(); trackBy: trackByKey\"\n class=\"pecb-table__cell\"\n [class]=\"getAlignmentClass(column)\"\n [ngClass]=\"column.cssClass\"\n role=\"cell\">\n\n <!-- Custom Template -->\n <ng-container *ngIf=\"column.cellTemplate\">\n <ng-container *ngTemplateOutlet=\"column.cellTemplate; context: { $implicit: getCellValue(row, column.key), row: row, column: column, index: i }\"></ng-container>\n </ng-container>\n\n <!-- Dynamic Component - renders any component passed via dynamicComponent -->\n <ng-container *ngIf=\"!column.cellTemplate && hasDynamicComponent(column)\">\n <ng-container\n *ngComponentOutlet=\"column.dynamicComponent!; inputs: getDynamicComponentInputs(row, column, i)\">\n </ng-container>\n </ng-container>\n\n <!-- Status Component - renders pecb-status -->\n <ng-container *ngIf=\"!column.cellTemplate && !hasDynamicComponent(column) && getColumnType(column) === 'status'\">\n <pecb-status\n [type]=\"getStatusType(getCellValue(row, column.key), column)\"\n [variant]=\"getStatusVariant(column)\"\n [size]=\"getStatusSize(column)\">\n {{ getCellValue(row, column.key) }}\n </pecb-status>\n </ng-container>\n\n <!-- User Component - renders avatar + name + email -->\n <ng-container *ngIf=\"!column.cellTemplate && !hasDynamicComponent(column) && getColumnType(column) === 'user'\">\n <div class=\"pecb-table__user-cell\">\n <img\n *ngIf=\"getUserData(row, column).avatar\"\n [src]=\"getUserData(row, column).avatar\"\n alt=\"\"\n class=\"pecb-table__user-avatar\">\n <div class=\"pecb-table__user-info\">\n <div class=\"pecb-table__user-name\">{{ getUserData(row, column).name }}</div>\n <div *ngIf=\"getUserData(row, column).secondary\" class=\"pecb-table__user-secondary\">\n {{ getUserData(row, column).secondary }}\n </div>\n </div>\n </div>\n </ng-container>\n\n <!-- Action Component - renders action buttons with icons -->\n <ng-container *ngIf=\"!column.cellTemplate && !hasDynamicComponent(column) && getColumnType(column) === 'action'\">\n <div class=\"pecb-table__action-buttons\">\n <ng-container *ngFor=\"let action of getActions(column)\">\n <!-- Divider before this action (consumer-controlled grouping) -->\n <span *ngIf=\"action.dividerBefore\" class=\"pecb-table__action-divider\"></span>\n <button\n class=\"pecb-table__action-btn\"\n [class.pecb-table__action-btn--danger]=\"action.variant === 'danger'\"\n [title]=\"action.tooltip || action.id\"\n [disabled]=\"action.disabled\"\n (click)=\"onActionClick(action, row, i, $event)\">\n <!-- View Icon -->\n <svg *ngIf=\"action.icon === 'view'\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"></path>\n <circle cx=\"12\" cy=\"12\" r=\"3\"></circle>\n </svg>\n <!-- Edit Icon -->\n <svg *ngIf=\"action.icon === 'edit'\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\"></path>\n <path d=\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\"></path>\n </svg>\n <!-- Delete Icon -->\n <svg *ngIf=\"action.icon === 'delete'\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"3 6 5 6 21 6\"></polyline>\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"></path>\n </svg>\n <!-- Download Icon -->\n <svg *ngIf=\"action.icon === 'download'\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path>\n <polyline points=\"7 10 12 15 17 10\"></polyline>\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line>\n </svg>\n <!-- Copy Icon -->\n <svg *ngIf=\"action.icon === 'copy'\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect>\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path>\n </svg>\n <!-- Custom Icon (SVG string) -->\n <span *ngIf=\"action.icon === 'custom' && action.customIcon\" class=\"pecb-table__custom-icon\" [innerHTML]=\"getSafeIcon(action.customIcon)\"></span>\n </button>\n </ng-container>\n </div>\n </ng-container>\n\n <!-- Link Cell -->\n <ng-container *ngIf=\"!column.cellTemplate && !hasDynamicComponent(column) && getColumnType(column) === 'link'\">\n <a\n [href]=\"getLinkHref(getCellValue(row, column.key))\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"pecb-table__link\"\n (click)=\"$event.stopPropagation()\">\n {{ getCellValue(row, column.key) }}\n </a>\n </ng-container>\n\n <!-- Default Text -->\n <ng-container *ngIf=\"!column.cellTemplate && !hasDynamicComponent(column) && getColumnType(column) === 'text'\">\n {{ getCellValue(row, column.key) }}\n </ng-container>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <!-- Pagination (outside table container) -->\n <div *ngIf=\"showPagination() && !loading() && data().length > 0\" [class]=\"paginationClasses\">\n <pecb-pagination\n [totalItems]=\"totalItems()\"\n [pageSize]=\"pageSize()\"\n [currentPage]=\"currentPage()\"\n [pageSizeOptions]=\"pageSizeOptions()\"\n [showPageSizeSelector]=\"showPageSizeSelector()\"\n [variant]=\"paginationVariant()\"\n size=\"md\"\n (pageChange)=\"onPageChange($event)\"\n (pageSizeChange)=\"onPageSizeChange($event)\">\n </pecb-pagination>\n </div>\n</div>\n","import { Component, input, output, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\nexport type TabStyle = 'rounded' | 'line';\nexport type TabSize = 'sm' | 'md';\n\n@Component({\n selector: 'pecb-tab',\n imports: [CommonModule],\n templateUrl: './tab.component.html',\n styleUrls: ['./tab.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TabComponent {\n id = input(generateUniqueId('tab'));\n tabStyle = input<TabStyle>('rounded');\n size = input<TabSize>('md');\n label = input('Tab Name');\n icon = input<number>();\n active = input(false);\n disabled = input(false);\n closable = input(true);\n ariaLabel = input<string>();\n ariaControls = input<string>();\n ariaSelected = input<boolean>();\n\n clicked = output<string>();\n closed = output<string>();\n\n get tabClasses(): string[] {\n return [\n 'pecb-tab',\n `pecb-tab--${this.tabStyle()}`,\n `pecb-tab--${this.size()}`,\n this.active() ? 'pecb-tab--active' : '',\n this.disabled() ? 'pecb-tab--disabled' : ''\n ].filter(Boolean);\n }\n\n onClick(event: MouseEvent): void {\n if (!this.disabled()) {\n event.stopPropagation();\n this.clicked.emit(this.id());\n }\n }\n\n onClose(event: MouseEvent): void {\n if (!this.disabled()) {\n event.stopPropagation();\n this.closed.emit(this.id());\n }\n }\n\n onKeyDown(event: KeyboardEvent): void {\n if (this.disabled()) return;\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.clicked.emit(this.id());\n }\n\n if (this.closable() && (event.key === 'Delete' || event.key === 'Backspace')) {\n event.preventDefault();\n this.closed.emit(this.id());\n }\n }\n}\n","<div\n [id]=\"id()\"\n [class]=\"tabClasses.join(' ')\"\n role=\"tab\"\n [attr.aria-label]=\"ariaLabel() || label()\"\n [attr.aria-controls]=\"ariaControls()\"\n [attr.aria-selected]=\"ariaSelected() !== undefined ? ariaSelected() : active()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n (click)=\"onClick($event)\"\n (keydown)=\"onKeyDown($event)\"\n>\n <span class=\"pecb-tab__content\">\n <!-- Label -->\n <span class=\"pecb-tab__label\">{{ label() }}</span>\n\n <!-- Icon/Badge -->\n <span *ngIf=\"icon()\" class=\"pecb-tab__icon\" aria-hidden=\"true\">\n {{ icon() }}\n </span>\n\n <!-- Close button -->\n <button\n *ngIf=\"closable()\"\n type=\"button\"\n class=\"pecb-tab__close\"\n [attr.aria-label]=\"'Close ' + label()\"\n [disabled]=\"disabled()\"\n (click)=\"onClose($event)\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M13.725 4.28249C13.4325 3.98999 12.96 3.98999 12.6675 4.28249L9.00004 7.94249L5.33254 4.27499C5.04004 3.98249 4.56754 3.98249 4.27504 4.27499C3.98254 4.56749 3.98254 5.03999 4.27504 5.33249L7.94254 8.99999L4.27504 12.6675C3.98254 12.96 3.98254 13.4325 4.27504 13.725C4.56754 14.0175 5.04004 14.0175 5.33254 13.725L9.00004 10.0575L12.6675 13.725C12.96 14.0175 13.4325 14.0175 13.725 13.725C14.0175 13.4325 14.0175 12.96 13.725 12.6675L10.0575 8.99999L13.725 5.33249C14.01 5.04749 14.01 4.56749 13.725 4.28249Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n </span>\n</div>\n","import {\n Component,\n input,\n output,\n model,\n signal,\n inject,\n ChangeDetectionStrategy,\n HostListener,\n ElementRef,\n ViewChild,\n forwardRef\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\nexport type DatepickerSize = 'sm' | 'md' | 'lg' | 'xl';\n\ninterface CalendarDay {\n date: Date;\n day: number;\n isCurrentMonth: boolean;\n isSelected: boolean;\n isToday: boolean;\n}\n\n@Component({\n selector: 'pecb-datepicker',\n imports: [CommonModule],\n templateUrl: './datepicker.component.html',\n styleUrls: ['./datepicker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatepickerComponent),\n multi: true\n }\n ]\n})\nexport class DatepickerComponent implements ControlValueAccessor {\n private readonly elementRef = inject(ElementRef);\n\n @ViewChild('inputElement') inputElement?: ElementRef<HTMLInputElement>;\n\n /**\n * Unique ID for the datepicker element\n */\n id = input<string>(generateUniqueId('datepicker'));\n\n /**\n * Label text to display above the input\n */\n label = input<string | undefined>(undefined);\n\n /**\n * Placeholder text for the input\n */\n placeholder = input('Choose Date');\n\n /**\n * The size of the datepicker\n */\n size = input<DatepickerSize>('lg');\n\n /**\n * Width of the datepicker (any valid CSS value, e.g. '300px', '50%', '100%')\n * Defaults to 100% via CSS\n */\n width = input<string | undefined>(undefined);\n\n /**\n * Whether the field is required\n */\n required = input(false);\n\n /**\n * Whether the datepicker is disabled\n */\n disabled = model(false);\n\n /**\n * Date format for display (default: MM/DD/YYYY)\n */\n dateFormat = input('MM/DD/YYYY');\n\n /**\n * Minimum selectable date\n */\n minDate = input<Date | undefined>(undefined);\n\n /**\n * Maximum selectable date\n */\n maxDate = input<Date | undefined>(undefined);\n\n /**\n * Event emitted when date is selected\n */\n dateChange = output<Date | null>();\n\n /**\n * Event emitted when calendar is opened\n */\n opened = output<void>();\n\n /**\n * Event emitted when calendar is closed\n */\n closed = output<void>();\n\n // Internal state\n selectedDate = signal<Date | null>(null);\n isCalendarOpen = signal(false);\n currentMonth = signal<Date>(new Date());\n calendarDays = signal<CalendarDay[]>([]);\n weekDays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n ];\n\n private onChange: (value: Date | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor() {\n this.generateCalendar();\n }\n\n get wrapperClasses(): string[] {\n return [\n 'pecb-datepicker',\n `pecb-datepicker--${this.size()}`,\n this.disabled() ? 'pecb-datepicker--disabled' : '',\n this.isCalendarOpen() ? 'pecb-datepicker--open' : '',\n this.selectedDate() ? 'pecb-datepicker--has-value' : ''\n ].filter(Boolean);\n }\n\n get displayValue(): string {\n if (!this.selectedDate()) return '';\n return this.formatDate(this.selectedDate()!);\n }\n\n get monthYearDisplay(): string {\n return `${this.monthNames[this.currentMonth().getMonth()]} ${this.currentMonth().getFullYear()}`;\n }\n\n toggleCalendar(): void {\n if (this.disabled()) return;\n this.isCalendarOpen.set(!this.isCalendarOpen());\n if (this.isCalendarOpen()) {\n this.opened.emit();\n const sd = this.selectedDate();\n if (sd) this.currentMonth.set(new Date(sd.getFullYear(), sd.getMonth(), 1));\n this.generateCalendar();\n } else {\n this.closed.emit();\n }\n }\n\n closeCalendar(): void {\n if (this.isCalendarOpen()) {\n this.isCalendarOpen.set(false);\n this.closed.emit();\n }\n }\n\n previousMonth(): void {\n const cm = this.currentMonth();\n this.currentMonth.set(new Date(cm.getFullYear(), cm.getMonth() - 1, 1));\n this.generateCalendar();\n }\n\n nextMonth(): void {\n const cm = this.currentMonth();\n this.currentMonth.set(new Date(cm.getFullYear(), cm.getMonth() + 1, 1));\n this.generateCalendar();\n }\n\n selectDate(day: CalendarDay): void {\n if (this.disabled() || !day.isCurrentMonth) return;\n const minDate = this.minDate();\n const maxDate = this.maxDate();\n if (minDate && day.date < minDate) return;\n if (maxDate && day.date > maxDate) return;\n this.selectedDate.set(day.date);\n this.onChange(this.selectedDate());\n this.onTouched();\n this.dateChange.emit(this.selectedDate());\n this.generateCalendar();\n this.closeCalendar();\n }\n\n clearDate(event: MouseEvent): void {\n event.stopPropagation();\n if (this.disabled()) return;\n this.selectedDate.set(null);\n this.onChange(null);\n this.onTouched();\n this.dateChange.emit(null);\n this.generateCalendar();\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.elementRef.nativeElement.contains(event.target)) {\n this.closeCalendar();\n }\n }\n\n onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.toggleCalendar();\n } else if (event.key === 'Escape') {\n this.closeCalendar();\n }\n }\n\n private generateCalendar(): void {\n const year = this.currentMonth().getFullYear();\n const month = this.currentMonth().getMonth();\n const firstDay = new Date(year, month, 1);\n const startingDayOfWeek = firstDay.getDay();\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const daysInPrevMonth = new Date(year, month, 0).getDate();\n const days: CalendarDay[] = [];\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n for (let i = startingDayOfWeek - 1; i >= 0; i--) {\n days.push({ date: new Date(year, month - 1, daysInPrevMonth - i), day: daysInPrevMonth - i, isCurrentMonth: false, isSelected: false, isToday: false });\n }\n\n const sd = this.selectedDate();\n for (let day = 1; day <= daysInMonth; day++) {\n const date = new Date(year, month, day);\n date.setHours(0, 0, 0, 0);\n const isSelected = sd ? date.getTime() === new Date(sd).setHours(0, 0, 0, 0) : false;\n days.push({ date, day, isCurrentMonth: true, isSelected, isToday: date.getTime() === today.getTime() });\n }\n\n const remainingDays = 42 - days.length;\n for (let day = 1; day <= remainingDays; day++) {\n days.push({ date: new Date(year, month + 1, day), day, isCurrentMonth: false, isSelected: false, isToday: false });\n }\n\n this.calendarDays.set(days);\n }\n\n private formatDate(date: Date): string {\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const day = String(date.getDate()).padStart(2, '0');\n const year = date.getFullYear();\n return this.dateFormat().replace('MM', month).replace('DD', day).replace('YYYY', String(year));\n }\n\n writeValue(value: Date | null): void {\n this.selectedDate.set(value);\n if (value) this.currentMonth.set(new Date(value.getFullYear(), value.getMonth(), 1));\n this.generateCalendar();\n }\n\n registerOnChange(fn: (value: Date | null) => void): void { this.onChange = fn; }\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n setDisabledState(isDisabled: boolean): void { this.disabled.set(isDisabled); }\n}\n","<div [class]=\"wrapperClasses.join(' ')\" [style.width]=\"width || null\">\n <!-- Input Field -->\n <div class=\"pecb-datepicker__input-wrapper\">\n <!-- Input -->\n <input\n #inputElement\n [id]=\"id()\"\n type=\"text\"\n class=\"pecb-datepicker__input\"\n [value]=\"displayValue\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"label() || placeholder()\"\n [attr.aria-required]=\"required()\"\n readonly\n (click)=\"toggleCalendar()\"\n (keydown)=\"onKeyDown($event)\"\n />\n\n <!-- Floating Label -->\n <label\n *ngIf=\"label()\"\n [attr.for]=\"id()\"\n class=\"pecb-datepicker__label\"\n >\n {{ label() }}<span *ngIf=\"required()\" class=\"pecb-datepicker__required\">*</span>\n </label>\n\n <!-- Clear Button (shown when has value) -->\n <button\n *ngIf=\"selectedDate() && !disabled()\"\n type=\"button\"\n class=\"pecb-datepicker__icon pecb-datepicker__icon--clear\"\n [attr.aria-label]=\"'Clear date'\"\n (click)=\"clearDate($event)\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M8 0C3.6 0 0 3.6 0 8C0 12.4 3.6 16 8 16C12.4 16 16 12.4 16 8C16 3.6 12.4 0 8 0ZM11.5 10.1L10.1 11.5L8 9.4L5.9 11.5L4.5 10.1L6.6 8L4.5 5.9L5.9 4.5L8 6.6L10.1 4.5L11.5 5.9L9.4 8L11.5 10.1Z\"/>\n </svg>\n </button>\n\n <!-- Right Icon (Calendar) -->\n <button\n type=\"button\"\n class=\"pecb-datepicker__icon pecb-datepicker__icon--right\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"'Open calendar'\"\n (click)=\"toggleCalendar()\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 1.5V4.5M6 1.5V4.5M2.25 7.5H15.75M3.75 3H14.25C15.0784 3 15.75 3.67157 15.75 4.5V15C15.75 15.8284 15.0784 16.5 14.25 16.5H3.75C2.92157 16.5 2.25 15.8284 2.25 15V4.5C2.25 3.67157 2.92157 3 3.75 3Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n\n <!-- Calendar Dropdown -->\n <div\n *ngIf=\"isCalendarOpen()\"\n class=\"pecb-datepicker__calendar\"\n role=\"dialog\"\n aria-modal=\"false\"\n [attr.aria-label]=\"'Choose date'\"\n >\n <!-- Calendar Header -->\n <div class=\"pecb-datepicker__calendar-header\">\n <button\n type=\"button\"\n class=\"pecb-datepicker__nav-button\"\n aria-label=\"Previous month\"\n (click)=\"previousMonth()\"\n >\n «\n </button>\n\n <span class=\"pecb-datepicker__month-year\">{{ monthYearDisplay }}</span>\n\n <button\n type=\"button\"\n class=\"pecb-datepicker__nav-button\"\n aria-label=\"Next month\"\n (click)=\"nextMonth()\"\n >\n »\n </button>\n </div>\n\n <!-- Calendar Grid -->\n <div class=\"pecb-datepicker__calendar-body\">\n <!-- Week Days -->\n <div class=\"pecb-datepicker__weekdays\">\n <div\n *ngFor=\"let day of weekDays\"\n class=\"pecb-datepicker__weekday\"\n >\n {{ day }}\n </div>\n </div>\n\n <!-- Days Grid -->\n <div class=\"pecb-datepicker__days\">\n <button\n *ngFor=\"let day of calendarDays()\"\n type=\"button\"\n class=\"pecb-datepicker__day\"\n [class.pecb-datepicker__day--other-month]=\"!day.isCurrentMonth\"\n [class.pecb-datepicker__day--selected]=\"day.isSelected\"\n [class.pecb-datepicker__day--today]=\"day.isToday\"\n [attr.aria-label]=\"day.date.toDateString()\"\n [attr.aria-selected]=\"day.isSelected\"\n (click)=\"selectDate(day)\"\n >\n {{ day.day }}\n </button>\n </div>\n </div>\n </div>\n</div>\n","import {\n Component,\n input,\n output,\n model,\n signal,\n inject,\n ChangeDetectionStrategy,\n forwardRef,\n ViewChild,\n ElementRef\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\nexport type InputType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'search';\nexport type InputSize = 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * A professional input component with floating label and multiple types.\n * Fully accessible with WCAG 2.1 AA compliance and reactive forms support.\n *\n * @example\n * ```html\n * <pecb-input\n * label=\"Email\"\n * type=\"email\"\n * placeholder=\"Enter your email\"\n * [(ngModel)]=\"email\"\n * ></pecb-input>\n *\n * <!-- With predefined icon -->\n * <pecb-input\n * label=\"Email\"\n * type=\"email\"\n * icon=\"email\"\n * iconPosition=\"left\"\n * ></pecb-input>\n *\n * <!-- With custom SVG icon -->\n * <pecb-input\n * label=\"Phone\"\n * type=\"tel\"\n * [icon]=\"'<svg>...</svg>'\"\n * iconPosition=\"left\"\n * ></pecb-input>\n *\n * <!-- With error state -->\n * <pecb-input\n * label=\"Password\"\n * type=\"password\"\n * [error]=\"true\"\n * errorMessage=\"Password is required\"\n * ></pecb-input>\n * ```\n *\n * @publicApi\n */\n@Component({\n selector: 'pecb-input',\n imports: [CommonModule],\n templateUrl: './input.component.html',\n styleUrls: ['./input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputComponent),\n multi: true\n }\n ]\n})\nexport class InputComponent implements ControlValueAccessor {\n private readonly sanitizer = inject(DomSanitizer);\n\n @ViewChild('inputElement') inputElement?: ElementRef<HTMLInputElement>;\n\n /**\n * Unique ID for the input element\n */\n id = input<string>(generateUniqueId('input'));\n\n /**\n * Input type\n */\n type = input<InputType>('text');\n\n /**\n * Label text to display\n */\n label = input<string | undefined>(undefined);\n\n /**\n * Placeholder text (shown when label is not present)\n */\n placeholder = input('');\n\n /**\n * The size of the input\n */\n size = input<InputSize>('lg');\n\n /**\n * Width of the input wrapper — any valid CSS value e.g. '300px', '50%', '100%'\n * Defaults to 100% (full width of parent)\n */\n width = input<string | undefined>(undefined);\n\n /**\n * Whether the field is required\n */\n required = input(false);\n\n /**\n * Whether the input is disabled\n */\n disabled = model(false);\n\n /**\n * Whether the input is readonly\n */\n readonly = input(false);\n\n /**\n * Whether to show error state\n */\n error = input(false);\n\n /**\n * Error message to display\n */\n errorMessage = input<string | undefined>(undefined);\n\n /**\n * Helper text to display below input\n */\n helperText = input<string | undefined>(undefined);\n\n /**\n * Icon to display - can be a predefined name ('email', 'search', 'user') or custom SVG string\n */\n icon = input<string | undefined>(undefined);\n\n /**\n * Icon position (left or right)\n */\n iconPosition = input<'left' | 'right'>('left');\n\n /**\n * Left icon name or HTML (deprecated - use icon with iconPosition instead)\n */\n leftIcon = input<string | undefined>(undefined);\n\n /**\n * Right icon name or HTML (deprecated - use icon with iconPosition instead)\n */\n rightIcon = input<string | undefined>(undefined);\n\n /**\n * Whether to show clear button\n */\n clearable = input(false);\n\n /**\n * Maximum length of input\n */\n maxLength = input<number | undefined>(undefined);\n\n /**\n * Minimum value (for number type)\n */\n min = input<number | undefined>(undefined);\n\n /**\n * Maximum value (for number type)\n */\n max = input<number | undefined>(undefined);\n\n /**\n * Step value (for number type)\n */\n step = input<number | undefined>(undefined);\n\n /**\n * Autocomplete attribute\n */\n autocomplete = input<string | undefined>(undefined);\n\n /**\n * Show info icon next to the label\n */\n showInfoIcon = input(false);\n\n /**\n * Event emitted when value changes\n */\n valueChange = output<string>();\n\n /**\n * Event emitted on blur\n */\n blurred = output<void>();\n\n /**\n * Event emitted on focus\n */\n focused = output<void>();\n\n /**\n * Event emitted when clear button is clicked\n */\n cleared = output<void>();\n\n // Internal state\n value = signal('');\n isFocused = signal(false);\n showPassword = signal(false);\n\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n get wrapperClasses(): string[] {\n return [\n 'pecb-input',\n `pecb-input--${this.size()}`,\n this.label() ? 'pecb-input--has-label' : '',\n this.disabled() ? 'pecb-input--disabled' : '',\n this.error() ? 'pecb-input--error' : '',\n this.readonly() ? 'pecb-input--readonly' : '',\n this.isFocused() ? 'pecb-input--focused' : '',\n this.value() ? 'pecb-input--has-value' : ''\n ].filter(Boolean);\n }\n\n get inputType(): string {\n if (this.type() === 'password' && this.showPassword()) return 'text';\n return this.type();\n }\n\n get showClearButton(): boolean {\n return this.clearable() && !!this.value() && !this.disabled() && !this.readonly();\n }\n\n get showPasswordToggle(): boolean {\n return this.type() === 'password' && !!this.value() && !this.disabled() && !this.readonly();\n }\n\n get computedLeftIcon(): string | undefined {\n if (this.icon() && this.iconPosition() === 'left') return this.icon();\n return this.leftIcon();\n }\n\n get computedRightIcon(): string | undefined {\n if (this.icon() && this.iconPosition() === 'right') return this.icon();\n return this.rightIcon();\n }\n\n onInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.value.set(target.value);\n this.onChange(this.value());\n this.valueChange.emit(this.value());\n }\n\n onFocus(): void {\n this.isFocused.set(true);\n this.focused.emit();\n }\n\n onBlur(): void {\n this.isFocused.set(false);\n this.onTouched();\n this.blurred.emit();\n }\n\n clearValue(event: MouseEvent): void {\n event.stopPropagation();\n this.value.set('');\n this.onChange(this.value());\n this.valueChange.emit(this.value());\n this.cleared.emit();\n this.inputElement?.nativeElement.focus();\n }\n\n togglePasswordVisibility(event: MouseEvent): void {\n event.stopPropagation();\n this.showPassword.set(!this.showPassword());\n }\n\n focus(): void {\n this.inputElement?.nativeElement.focus();\n }\n\n sanitizeIcon(icon: string | undefined): SafeHtml {\n if (!icon) return '';\n return this.sanitizer.bypassSecurityTrustHtml(icon);\n }\n\n writeValue(value: string): void {\n this.value.set(value || '');\n }\n\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","<div [class]=\"wrapperClasses.join(' ')\" [style.width]=\"width() || null\">\n <!-- Input Wrapper -->\n <div class=\"pecb-input__wrapper\">\n\n <!-- Left Icon -->\n @if (computedLeftIcon) {\n <span class=\"pecb-input__icon pecb-input__icon--left\" aria-hidden=\"true\">\n @switch (computedLeftIcon) {\n @case ('email') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M2 3H14C14.55 3 15 3.45 15 4V12C15 12.55 14.55 13 14 13H2C1.45 13 1 12.55 1 12V4C1 3.45 1.45 3 2 3ZM8 8.5L2.5 5V11.5H13.5V5L8 8.5ZM8 7L13.5 3.5H2.5L8 7Z\"/>\n </svg>\n }\n @case ('search') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.35-4.35\"/>\n </svg>\n }\n @case ('user') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M8 8C10.21 8 12 6.21 12 4C12 1.79 10.21 0 8 0C5.79 0 4 1.79 4 4C4 6.21 5.79 8 8 8ZM8 10C5.33 10 0 11.34 0 14V16H16V14C16 11.34 10.67 10 8 10Z\"/>\n </svg>\n }\n @default {\n <span [innerHTML]=\"sanitizeIcon(computedLeftIcon)\"></span>\n }\n }\n </span>\n }\n\n <!-- Input Field -->\n <input\n #inputElement\n [id]=\"id()\"\n [type]=\"inputType\"\n class=\"pecb-input__field\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readonly]=\"readonly()\"\n [required]=\"required()\"\n [attr.maxlength]=\"maxLength()\"\n [attr.min]=\"min()\"\n [attr.max]=\"max()\"\n [attr.step]=\"step()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-label]=\"label() || placeholder() || null\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"error() || null\"\n [attr.aria-describedby]=\"helperText() || errorMessage() ? id() + '-description' : null\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n\n <!-- Floating Label -->\n @if (label()) {\n <label [attr.for]=\"id()\" class=\"pecb-input__label\">\n <span class=\"pecb-input__label-text\">{{ label() }}@if (required()) {<span class=\"pecb-input__required\">*</span>}</span>\n @if (showInfoIcon()) {\n <span class=\"pecb-input__label-icon\" aria-hidden=\"true\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6.84998 9.35001V6.85001M6.84998 4.35001H6.85623M13.1 6.85001C13.1 10.3018 10.3018 13.1 6.84998 13.1C3.3982 13.1 0.599976 10.3018 0.599976 6.85001C0.599976 3.39823 3.3982 0.600006 6.84998 0.600006C10.3018 0.600006 13.1 3.39823 13.1 6.85001Z\" stroke=\"#A11E29\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n }\n </label>\n }\n\n <!-- Clear Button -->\n @if (showClearButton) {\n <button\n type=\"button\"\n class=\"pecb-input__icon pecb-input__icon--clear\"\n aria-label=\"Clear input\"\n (click)=\"clearValue($event)\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M8 0C3.6 0 0 3.6 0 8C0 12.4 3.6 16 8 16C12.4 16 16 12.4 16 8C16 3.6 12.4 0 8 0ZM11.5 10.1L10.1 11.5L8 9.4L5.9 11.5L4.5 10.1L6.6 8L4.5 5.9L5.9 4.5L8 6.6L10.1 4.5L11.5 5.9L9.4 8L11.5 10.1Z\"/>\n </svg>\n </button>\n }\n\n <!-- Password Toggle -->\n @if (showPasswordToggle) {\n <button\n type=\"button\"\n class=\"pecb-input__icon pecb-input__icon--password\"\n [attr.aria-label]=\"showPassword() ? 'Hide password' : 'Show password'\"\n (click)=\"togglePasswordVisibility($event)\"\n >\n @if (!showPassword()) {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>\n </svg>\n } @else {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"/><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"/>\n </svg>\n }\n </button>\n }\n\n <!-- Right Icon -->\n @if (computedRightIcon && !showClearButton && !showPasswordToggle) {\n <span class=\"pecb-input__icon pecb-input__icon--right\" aria-hidden=\"true\">\n @switch (computedRightIcon) {\n @case ('email') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M2 3H14C14.55 3 15 3.45 15 4V12C15 12.55 14.55 13 14 13H2C1.45 13 1 12.55 1 12V4C1 3.45 1.45 3 2 3ZM8 8.5L2.5 5V11.5H13.5V5L8 8.5ZM8 7L13.5 3.5H2.5L8 7Z\"/>\n </svg>\n }\n @case ('search') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"11\" cy=\"11\" r=\"8\"/><path d=\"m21 21-4.35-4.35\"/>\n </svg>\n }\n @case ('user') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M8 8C10.21 8 12 6.21 12 4C12 1.79 10.21 0 8 0C5.79 0 4 1.79 4 4C4 6.21 5.79 8 8 8ZM8 10C5.33 10 0 11.34 0 14V16H16V14C16 11.34 10.67 10 8 10Z\"/>\n </svg>\n }\n @default {\n <span [innerHTML]=\"sanitizeIcon(computedRightIcon)\"></span>\n }\n }\n </span>\n }\n\n </div>\n\n <!-- Helper Text / Error Message -->\n @if (helperText() || errorMessage()) {\n <div\n [id]=\"id() + '-description'\"\n class=\"pecb-input__description\"\n [class.pecb-input__description--error]=\"error()\"\n >\n @if (helperText()) {\n <span class=\"pecb-input__description-helper\">{{ helperText() }}</span>\n }\n @if (error() && errorMessage()) {\n <span class=\"pecb-input__description-error\">{{ errorMessage() }}</span>\n }\n </div>\n }\n</div>\n","import { Component, input, output, model, signal, ChangeDetectionStrategy, forwardRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\nexport type RadioVariant = 'dot' | 'filled';\nexport type RadioLabelPosition = 'right' | 'left';\n\n@Component({\n selector: 'pecb-radio',\n imports: [CommonModule],\n templateUrl: './radio.component.html',\n styleUrls: ['./radio.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioComponent),\n multi: true\n }\n ]\n})\nexport class RadioComponent implements ControlValueAccessor {\n id = input(generateUniqueId('radio'));\n name = input<string>();\n value = input<unknown>();\n variant = input<RadioVariant>('dot');\n label = input<string>();\n description = input<string>();\n labelPosition = input<RadioLabelPosition>('right');\n disabled = model(false);\n\n selectionChange = output<unknown>();\n\n checked = signal(false);\n\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n get wrapperClasses(): string[] {\n return [\n 'pecb-radio',\n `pecb-radio--${this.variant()}`,\n this.disabled() ? 'pecb-radio--disabled' : '',\n this.checked() ? 'pecb-radio--checked' : '',\n this.labelPosition() === 'left' ? 'pecb-radio--label-left' : ''\n ].filter(Boolean);\n }\n\n onRadioChange(event: Event): void {\n if (this.disabled()) return;\n const checked = (event.target as HTMLInputElement).checked;\n if (checked) {\n this.checked.set(true);\n this.onChange(this.value());\n this.selectionChange.emit(this.value());\n }\n }\n\n onBlur(): void {\n this.onTouched();\n }\n\n writeValue(value: unknown): void {\n this.checked.set(value === this.value());\n }\n\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","<div [class]=\"wrapperClasses.join(' ')\">\n <label [attr.for]=\"id()\" class=\"pecb-radio__label\">\n <input\n [id]=\"id()\"\n type=\"radio\"\n class=\"pecb-radio__input\"\n [name]=\"name()\"\n [value]=\"value()\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"label()\"\n [attr.aria-describedby]=\"description() ? id() + '-description' : null\"\n (change)=\"onRadioChange($event)\"\n (blur)=\"onBlur()\"\n />\n <span *ngIf=\"labelPosition() === 'left' && (label() || description())\" class=\"pecb-radio__content\">\n <span *ngIf=\"label()\" class=\"pecb-radio__text\">{{ label() }}</span>\n <span *ngIf=\"description()\" [id]=\"id() + '-description'\" class=\"pecb-radio__description\">{{ description() }}</span>\n </span>\n <span class=\"pecb-radio__control\"></span>\n <span *ngIf=\"labelPosition() === 'right' && (label() || description())\" class=\"pecb-radio__content\">\n <span *ngIf=\"label()\" class=\"pecb-radio__text\">{{ label() }}</span>\n <span *ngIf=\"description()\" [id]=\"id() + '-description'\" class=\"pecb-radio__description\">{{ description() }}</span>\n </span>\n </label>\n</div>\n","import { Component, input, output, model, signal, ChangeDetectionStrategy, forwardRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\nexport type CheckboxLabelPosition = 'right' | 'left';\n\n@Component({\n selector: 'pecb-checkbox',\n imports: [CommonModule],\n templateUrl: './checkbox.component.html',\n styleUrls: ['./checkbox.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxComponent),\n multi: true\n }\n ]\n})\nexport class CheckboxComponent implements ControlValueAccessor {\n id = input(generateUniqueId('checkbox'));\n name = input<string>();\n label = input<string>();\n description = input<string>();\n labelPosition = input<CheckboxLabelPosition>('right');\n disabled = model(false);\n\n checkedChange = output<boolean>();\n\n checked = signal(false);\n\n private onChange: (value: boolean) => void = () => {};\n private onTouched: () => void = () => {};\n\n get wrapperClasses(): string[] {\n return [\n 'pecb-checkbox',\n this.disabled() ? 'pecb-checkbox--disabled' : '',\n this.checked() ? 'pecb-checkbox--checked' : '',\n this.labelPosition() === 'left' ? 'pecb-checkbox--label-left' : ''\n ].filter(Boolean);\n }\n\n onCheckboxChange(event: Event): void {\n if (this.disabled()) return;\n const checked = (event.target as HTMLInputElement).checked;\n this.checked.set(checked);\n this.onChange(this.checked());\n this.checkedChange.emit(this.checked());\n }\n\n onBlur(): void {\n this.onTouched();\n }\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","<div [class]=\"wrapperClasses.join(' ')\">\n <label [attr.for]=\"id()\" class=\"pecb-checkbox__label\">\n <input\n [id]=\"id()\"\n type=\"checkbox\"\n class=\"pecb-checkbox__input\"\n [name]=\"name()\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"label()\"\n [attr.aria-describedby]=\"description() ? id() + '-description' : null\"\n (change)=\"onCheckboxChange($event)\"\n (blur)=\"onBlur()\"\n />\n <span *ngIf=\"labelPosition() === 'left' && (label() || description())\" class=\"pecb-checkbox__content\">\n <span *ngIf=\"label()\" class=\"pecb-checkbox__text\">{{ label() }}</span>\n <span *ngIf=\"description()\" [id]=\"id() + '-description'\" class=\"pecb-checkbox__description\">{{ description() }}</span>\n </span>\n <span class=\"pecb-checkbox__control\">\n <svg class=\"pecb-checkbox__icon\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n <span *ngIf=\"labelPosition() === 'right' && (label() || description())\" class=\"pecb-checkbox__content\">\n <span *ngIf=\"label()\" class=\"pecb-checkbox__text\">{{ label() }}</span>\n <span *ngIf=\"description()\" [id]=\"id() + '-description'\" class=\"pecb-checkbox__description\">{{ description() }}</span>\n </span>\n </label>\n</div>\n","import { Component, input, output, model, signal, ChangeDetectionStrategy, forwardRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\nexport type ToggleLabelPosition = 'right' | 'left';\n\n@Component({\n selector: 'pecb-toggle',\n imports: [CommonModule],\n templateUrl: './toggle.component.html',\n styleUrls: ['./toggle.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ToggleComponent),\n multi: true\n }\n ]\n})\nexport class ToggleComponent implements ControlValueAccessor {\n id = input(generateUniqueId('toggle'));\n name = input<string>();\n label = input<string>();\n description = input<string>();\n labelPosition = input<ToggleLabelPosition>('right');\n disabled = model(false);\n\n toggleChange = output<boolean>();\n\n checked = signal(false);\n\n private onChange: (value: boolean) => void = () => {};\n private onTouched: () => void = () => {};\n\n get wrapperClasses(): string[] {\n return [\n 'pecb-toggle',\n this.disabled() ? 'pecb-toggle--disabled' : '',\n this.checked() ? 'pecb-toggle--checked' : '',\n this.labelPosition() === 'left' ? 'pecb-toggle--label-left' : ''\n ].filter(Boolean);\n }\n\n onToggleChange(event: Event): void {\n if (this.disabled()) return;\n const checked = (event.target as HTMLInputElement).checked;\n this.checked.set(checked);\n this.onChange(this.checked());\n this.toggleChange.emit(this.checked());\n }\n\n onBlur(): void {\n this.onTouched();\n }\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n}\n","<div [class]=\"wrapperClasses.join(' ')\">\n <label [attr.for]=\"id()\" class=\"pecb-toggle__label\">\n <input\n [id]=\"id()\"\n type=\"checkbox\"\n role=\"switch\"\n class=\"pecb-toggle__input\"\n [name]=\"name()\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"label()\"\n [attr.aria-describedby]=\"description() ? id() + '-description' : null\"\n [attr.aria-checked]=\"checked()\"\n (change)=\"onToggleChange($event)\"\n (blur)=\"onBlur()\"\n />\n <span *ngIf=\"labelPosition() === 'left' && (label() || description())\" class=\"pecb-toggle__content\">\n <span *ngIf=\"label()\" class=\"pecb-toggle__text\">{{ label() }}</span>\n <span *ngIf=\"description()\" [id]=\"id() + '-description'\" class=\"pecb-toggle__description\">{{ description() }}</span>\n </span>\n <span class=\"pecb-toggle__control\">\n <span class=\"pecb-toggle__thumb\"></span>\n </span>\n <span *ngIf=\"labelPosition() === 'right' && (label() || description())\" class=\"pecb-toggle__content\">\n <span *ngIf=\"label()\" class=\"pecb-toggle__text\">{{ label() }}</span>\n <span *ngIf=\"description()\" [id]=\"id() + '-description'\" class=\"pecb-toggle__description\">{{ description() }}</span>\n </span>\n </label>\n</div>\n","import {\n Component,\n input,\n output,\n model,\n signal,\n inject,\n ChangeDetectionStrategy,\n forwardRef,\n HostListener,\n ElementRef,\n ViewChild\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\nexport interface DropdownOption {\n label: string;\n value: unknown;\n disabled?: boolean;\n}\n\nexport type DropdownSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'pecb-dropdown',\n imports: [CommonModule],\n templateUrl: './dropdown.component.html',\n styleUrls: ['./dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DropdownComponent),\n multi: true\n }\n ]\n})\nexport class DropdownComponent implements ControlValueAccessor {\n @ViewChild('searchInput') searchInput?: ElementRef<HTMLInputElement>;\n\n private readonly elementRef = inject(ElementRef);\n\n id = input(generateUniqueId('dropdown'));\n label = input<string>();\n size = input<DropdownSize>('md');\n options = input<DropdownOption[]>([]);\n multiple = input(false);\n searchable = input(false);\n maxHeight = input(300);\n disabled = model(false);\n required = input(false);\n error = input(false);\n errorMessage = input<string>();\n helperText = input<string>();\n\n selectionChange = output<unknown | unknown[]>();\n\n isOpen = signal(false);\n searchQuery = signal('');\n selectedValues = signal<unknown[]>([]);\n focusedIndex = signal(-1);\n\n private onChange: (value: unknown) => void = () => {};\n private onTouched: () => void = () => {};\n\n get wrapperClasses(): string[] {\n return [\n 'pecb-dropdown',\n `pecb-dropdown--${this.size()}`,\n this.disabled() ? 'pecb-dropdown--disabled' : '',\n this.error() ? 'pecb-dropdown--error' : '',\n this.isOpen() ? 'pecb-dropdown--open' : '',\n this.hasValue ? 'pecb-dropdown--has-value' : '',\n this.multiple() ? 'pecb-dropdown--multiple' : ''\n ].filter(Boolean);\n }\n\n get hasValue(): boolean {\n return this.selectedValues().length > 0;\n }\n\n get filteredOptions(): DropdownOption[] {\n if (!this.searchQuery()) return this.options();\n const query = this.searchQuery().toLowerCase();\n return this.options().filter(option => option.label.toLowerCase().includes(query));\n }\n\n get displayText(): string {\n if (!this.hasValue) return '';\n if (this.multiple()) {\n const selectedOptions = this.options().filter(opt => this.selectedValues().includes(opt.value));\n return selectedOptions.map(opt => opt.label).join(', ');\n }\n const selectedOption = this.options().find(opt => opt.value === this.selectedValues()[0]);\n return selectedOption?.label || '';\n }\n\n clearAll(event: MouseEvent): void {\n event.stopPropagation();\n this.selectedValues.set([]);\n this.onChange([]);\n this.selectionChange.emit([]);\n }\n\n toggleDropdown(): void {\n if (this.disabled()) return;\n this.isOpen.set(!this.isOpen());\n if (this.isOpen()) {\n this.onTouched();\n this.focusedIndex.set(-1);\n if (this.searchable()) {\n setTimeout(() => this.searchInput?.nativeElement.focus(), 0);\n }\n } else {\n this.searchQuery.set('');\n }\n }\n\n selectOption(option: DropdownOption): void {\n if (option.disabled) return;\n if (this.multiple()) {\n const current = [...this.selectedValues()];\n const index = current.indexOf(option.value);\n if (index > -1) current.splice(index, 1);\n else current.push(option.value);\n this.selectedValues.set(current);\n this.onChange([...this.selectedValues()]);\n this.selectionChange.emit([...this.selectedValues()]);\n } else {\n this.selectedValues.set([option.value]);\n this.onChange(option.value);\n this.selectionChange.emit(option.value);\n this.isOpen.set(false);\n this.searchQuery.set('');\n }\n }\n\n isSelected(option: DropdownOption): boolean {\n return this.selectedValues().includes(option.value);\n }\n\n onSearchInput(event: Event): void {\n const target = event.target as HTMLInputElement;\n this.searchQuery.set(target.value);\n this.focusedIndex.set(-1);\n }\n\n onKeyDown(event: KeyboardEvent): void {\n if (this.disabled()) return;\n const filteredOptions = this.filteredOptions;\n switch (event.key) {\n case 'Enter':\n case ' ':\n if (!this.isOpen()) {\n event.preventDefault();\n this.toggleDropdown();\n } else if (this.focusedIndex() >= 0 && this.focusedIndex() < filteredOptions.length) {\n event.preventDefault();\n this.selectOption(filteredOptions[this.focusedIndex()]);\n }\n break;\n case 'ArrowDown':\n event.preventDefault();\n if (!this.isOpen()) this.toggleDropdown();\n else this.focusedIndex.set(Math.min(this.focusedIndex() + 1, filteredOptions.length - 1));\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen()) this.focusedIndex.set(Math.max(this.focusedIndex() - 1, 0));\n break;\n case 'Escape':\n if (this.isOpen()) {\n event.preventDefault();\n this.isOpen.set(false);\n this.searchQuery.set('');\n }\n break;\n case 'Tab':\n if (this.isOpen()) {\n this.isOpen.set(false);\n this.searchQuery.set('');\n }\n break;\n }\n }\n\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.elementRef.nativeElement.contains(event.target)) {\n if (this.isOpen()) {\n this.isOpen.set(false);\n this.searchQuery.set('');\n }\n }\n }\n\n writeValue(value: unknown): void {\n if (this.multiple()) {\n this.selectedValues.set(Array.isArray(value) ? value : []);\n } else {\n this.selectedValues.set(value != null ? [value] : []);\n }\n }\n\n registerOnChange(fn: (value: unknown) => void): void { this.onChange = fn; }\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\n setDisabledState(isDisabled: boolean): void { this.disabled.set(isDisabled); }\n}\n","<div [class]=\"wrapperClasses.join(' ')\">\n <!-- Dropdown Trigger -->\n <div\n class=\"pecb-dropdown__trigger\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-label]=\"label()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-disabled]=\"disabled()\"\n (click)=\"toggleDropdown()\"\n (keydown)=\"onKeyDown($event)\"\n >\n <span class=\"pecb-dropdown__value\">{{ displayText }}</span>\n\n <!-- Clear button (multi-select with value) -->\n <span *ngIf=\"multiple() && hasValue\" class=\"pecb-dropdown__clear\" (click)=\"clearAll($event)\" aria-label=\"Clear selection\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11 1L1 11M1 1L11 11\" stroke=\"#616161\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n\n <!-- Floating Label -->\n <label\n *ngIf=\"label()\"\n [attr.for]=\"id()\"\n class=\"pecb-dropdown__label\"\n >\n {{ label() }}<span *ngIf=\"required()\" class=\"pecb-dropdown__required\">*</span>\n </label>\n\n <!-- Dropdown Arrow -->\n <span class=\"pecb-dropdown__arrow\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"currentColor\">\n <path d=\"M6 8L2 4H10L6 8Z\"/>\n </svg>\n </span>\n </div>\n\n <!-- Dropdown Panel -->\n <div\n *ngIf=\"isOpen()\"\n class=\"pecb-dropdown__panel\"\n [style.max-height.px]=\"maxHeight()\"\n >\n <!-- Search Input -->\n <div *ngIf=\"searchable()\" class=\"pecb-dropdown__search\">\n <svg class=\"pecb-dropdown__search-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"currentColor\">\n <path d=\"M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z\"/>\n </svg>\n <input\n #searchInput\n type=\"text\"\n class=\"pecb-dropdown__search-input\"\n placeholder=\"Search\"\n [value]=\"searchQuery()\"\n (input)=\"onSearchInput($event)\"\n (keydown)=\"onKeyDown($event)\"\n />\n </div>\n\n <!-- Options List -->\n <div class=\"pecb-dropdown__options\">\n <div\n *ngFor=\"let option of filteredOptions; let i = index\"\n class=\"pecb-dropdown__option\"\n [class.pecb-dropdown__option--selected]=\"isSelected(option)\"\n [class.pecb-dropdown__option--disabled]=\"option.disabled\"\n [class.pecb-dropdown__option--focused]=\"i === focusedIndex()\"\n (click)=\"selectOption(option)\"\n >\n <!-- Checkbox for multi-select -->\n <span *ngIf=\"multiple()\" class=\"pecb-dropdown__checkbox\">\n <span class=\"pecb-dropdown__checkbox-control\" [class.pecb-dropdown__checkbox-control--checked]=\"isSelected(option)\">\n <svg *ngIf=\"isSelected(option)\" class=\"pecb-dropdown__checkbox-icon\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M10 3L4.5 8.5L2 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n </span>\n\n <!-- Option Label -->\n <span class=\"pecb-dropdown__option-label\">{{ option.label }}</span>\n </div>\n\n <!-- No results message -->\n <div *ngIf=\"filteredOptions.length === 0\" class=\"pecb-dropdown__no-results\">\n No results found\n </div>\n </div>\n </div>\n\n <!-- Helper Text / Error Message -->\n <div\n *ngIf=\"helperText() || errorMessage()\"\n [id]=\"id() + '-description'\"\n class=\"pecb-dropdown__description\"\n [class.pecb-dropdown__description--error]=\"error() && errorMessage()\"\n >\n <span *ngIf=\"error() && errorMessage()\">{{ errorMessage() }}</span>\n <span *ngIf=\"!error() && helperText()\">{{ helperText() }}</span>\n </div>\n</div>\n","import {\n Component,\n Directive,\n input,\n output,\n OnInit,\n OnDestroy,\n ChangeDetectionStrategy,\n ElementRef,\n ViewChild,\n AfterViewInit\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId, trapFocus, disableBodyScroll } from '../../shared/utils/dom.utils';\n\nexport type RightModalSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'pecb-right-modal',\n imports: [CommonModule],\n templateUrl: './right-modal.component.html',\n styleUrls: ['./right-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RightModalComponent implements OnInit, OnDestroy, AfterViewInit {\n id = input(generateUniqueId('right-modal'));\n isOpen = input(false);\n size = input<RightModalSize>('md');\n closeOnBackdropClick = input(true);\n closeOnEscape = input(true);\n showCloseButton = input(true);\n ariaLabel = input<string>();\n ariaLabelledBy = input<string>();\n ariaDescribedBy = input<string>();\n\n closed = output<void>();\n opened = output<void>();\n\n @ViewChild('modalPanel') modalPanel!: ElementRef<HTMLElement>;\n\n private cleanupFocusTrap: (() => void) | null = null;\n private cleanupBodyScroll: (() => void) | null = null;\n private previousActiveElement: Element | null = null;\n\n ngOnInit(): void {\n if (this.isOpen()) {\n this.onOpen();\n }\n }\n\n ngAfterViewInit(): void {\n if (this.isOpen() && this.modalPanel) {\n this.setupFocusTrap();\n }\n }\n\n ngOnDestroy(): void {\n this.cleanup();\n }\n\n get modalClasses(): string[] {\n return [\n 'pecb-right-modal',\n this.isOpen() ? 'pecb-right-modal--open' : ''\n ].filter(Boolean);\n }\n\n get panelClasses(): string[] {\n return [\n 'pecb-right-modal__panel',\n `pecb-right-modal__panel--${this.size()}`\n ];\n }\n\n onBackdropClick(event: MouseEvent): void {\n if (this.closeOnBackdropClick() && event.target === event.currentTarget) {\n this.close();\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.closeOnEscape() && event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n\n close(): void {\n this.cleanup();\n this.closed.emit();\n }\n\n private onOpen(): void {\n this.previousActiveElement = document.activeElement;\n this.cleanupBodyScroll = disableBodyScroll();\n this.opened.emit();\n }\n\n private setupFocusTrap(): void {\n if (this.modalPanel?.nativeElement) {\n this.cleanupFocusTrap = trapFocus(this.modalPanel.nativeElement);\n }\n }\n\n private cleanup(): void {\n if (this.cleanupFocusTrap) {\n this.cleanupFocusTrap();\n this.cleanupFocusTrap = null;\n }\n if (this.cleanupBodyScroll) {\n this.cleanupBodyScroll();\n this.cleanupBodyScroll = null;\n }\n if (this.previousActiveElement instanceof HTMLElement) {\n this.previousActiveElement.focus();\n }\n }\n}\n\n@Directive({\n selector: '[pecbRightModalHeader]',\n standalone: true,\n host: { class: 'pecb-right-modal__header' }\n})\nexport class RightModalHeaderDirective {}\n\n@Directive({\n selector: '[pecbRightModalContent]',\n standalone: true,\n host: { class: 'pecb-right-modal__content' }\n})\nexport class RightModalContentDirective {}\n\n@Directive({\n selector: '[pecbRightModalFooter]',\n standalone: true,\n host: { class: 'pecb-right-modal__footer' }\n})\nexport class RightModalFooterDirective {}\n","<div\n *ngIf=\"isOpen()\"\n [id]=\"id()\"\n [class]=\"modalClasses.join(' ')\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledBy()\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n (click)=\"onBackdropClick($event)\"\n (keydown)=\"onKeydown($event)\"\n>\n <div\n #modalPanel\n [class]=\"panelClasses.join(' ')\"\n tabindex=\"-1\"\n >\n <button\n *ngIf=\"showCloseButton()\"\n type=\"button\"\n class=\"pecb-right-modal__close-btn\"\n aria-label=\"Close modal\"\n (click)=\"close()\"\n >\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M18 6L6 18M6 6L18 18\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <ng-content select=\"[pecbRightModalHeader]\"></ng-content>\n <ng-content select=\"[pecbRightModalContent]\"></ng-content>\n <ng-content></ng-content>\n <ng-content select=\"[pecbRightModalFooter]\"></ng-content>\n </div>\n</div>\n","import { Component, input, output, model, signal, inject, ChangeDetectionStrategy } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\nexport interface SidebarMenuItem {\n id: string;\n label: string;\n icon?: string;\n route?: string;\n active?: boolean;\n children?: SidebarMenuItem[];\n expanded?: boolean;\n}\n\nexport interface SidebarSection {\n id: string;\n title?: string;\n items: SidebarMenuItem[];\n}\n\n@Component({\n selector: 'pecb-sidebar',\n imports: [],\n templateUrl: './sidebar.component.html',\n styleUrls: ['./sidebar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SidebarComponent {\n private readonly sanitizer = inject(DomSanitizer);\n\n sections = input<SidebarSection[]>([]);\n showHeader = input(true);\n logoSrc = input<string>();\n sidebarLogo = input<string>();\n collapsedLogo = input<string>();\n showFooter = input(false);\n collapsed = model(false);\n\n itemClick = output<SidebarMenuItem>();\n collapseChange = output<boolean>();\n\n activePopupItem = signal<SidebarMenuItem | null>(null);\n popupTopPosition = signal(0);\n\n onItemClick(item: SidebarMenuItem, event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.collapsed() && item.children && item.children.length > 0) {\n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n this.popupTopPosition.set(rect.top);\n this.activePopupItem.set(this.activePopupItem() === item ? null : item);\n return;\n }\n\n const isTopLevel = this.sections().some(section =>\n section.items.includes(item)\n );\n\n if (isTopLevel) {\n this.sections().forEach(section => {\n section.items.forEach(sectionItem => {\n if (sectionItem !== item && sectionItem.expanded) {\n sectionItem.expanded = false;\n }\n });\n });\n }\n\n if (item.children && item.children.length > 0) {\n item.expanded = !item.expanded;\n }\n\n this.itemClick.emit(item);\n }\n\n closePopup(): void {\n this.activePopupItem.set(null);\n }\n\n onPopupItemClick(child: SidebarMenuItem, event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n\n if (child.children && child.children.length > 0) {\n child.expanded = !child.expanded;\n } else {\n this.onItemClick(child, event);\n this.closePopup();\n }\n }\n\n toggleCollapse(): void {\n this.collapsed.set(!this.collapsed());\n this.collapseChange.emit(this.collapsed());\n }\n\n getSafeIcon(icon: string): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(icon);\n }\n\n trackBySection(_index: number, section: SidebarSection): string {\n return section.id;\n }\n\n trackByItem(_index: number, item: SidebarMenuItem): string {\n return item.id;\n }\n\n hasActiveDescendant(item: SidebarMenuItem): boolean {\n if (item.active) return true;\n if (item.children && item.children.length > 0) {\n return item.children.some(child => this.hasActiveDescendant(child));\n }\n return false;\n }\n\n getItemClasses(item: SidebarMenuItem, isChild = false, isNested = false): string[] {\n const classes = [isChild ? 'pecb-sidebar__subitem' : 'pecb-sidebar__item'];\n\n if (isNested) classes.push('pecb-sidebar__subitem--nested');\n\n const isActiveOrHasActiveChild = this.hasActiveDescendant(item);\n if (isActiveOrHasActiveChild) {\n classes.push(isChild ? 'pecb-sidebar__subitem--active' : 'pecb-sidebar__item--active');\n }\n\n if (item.children && item.children.length > 0) {\n if (!isChild) {\n classes.push('pecb-sidebar__item--has-children');\n if (item.expanded) classes.push('pecb-sidebar__item--expanded');\n } else if (isChild && !isNested) {\n if (item.expanded) classes.push('pecb-sidebar__item--expanded');\n }\n }\n\n return classes;\n }\n}\n","<aside class=\"pecb-sidebar\" [class.pecb-sidebar--collapsed]=\"collapsed()\">\n <!-- Collapse Toggle Button -->\n <button\n class=\"pecb-sidebar__toggle\"\n [class.pecb-sidebar__toggle--collapsed]=\"collapsed()\"\n (click)=\"toggleCollapse()\"\n [attr.aria-label]=\"collapsed() ? 'Expand sidebar' : 'Collapse sidebar'\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M10 12L6 8L10 4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n <!-- Header Section -->\n @if (showHeader()) {\n <div class=\"pecb-sidebar__header\">\n <ng-content select=\"[sidebar-header]\"></ng-content>\n @if (logoSrc() || sidebarLogo() || collapsedLogo()) {\n <div class=\"pecb-sidebar__header-content\">\n @if (logoSrc()) {\n <img class=\"pecb-sidebar__logo\" [src]=\"logoSrc()\" alt=\"Logo\" />\n } @else if (sidebarLogo()) {\n <span class=\"pecb-sidebar__logo\" [innerHTML]=\"getSafeIcon(sidebarLogo()!)\"></span>\n }\n @if (collapsedLogo()) {\n <span class=\"pecb-sidebar__logo-collapsed\" [innerHTML]=\"getSafeIcon(collapsedLogo()!)\"></span>\n }\n </div>\n }\n </div>\n }\n\n <!-- Navigation Sections -->\n <nav class=\"pecb-sidebar__nav\">\n @for (section of sections(); track section.id) {\n <div class=\"pecb-sidebar__section\">\n <!-- Section Title -->\n @if (section.title) {\n <div class=\"pecb-sidebar__section-title\">\n {{ section.title }}\n </div>\n }\n\n <!-- Menu Items -->\n <ul class=\"pecb-sidebar__menu\">\n @for (item of section.items; track item.id) {\n <li>\n <!-- Parent Item -->\n <a\n [class]=\"getItemClasses(item).join(' ')\"\n [attr.href]=\"item.route || '#'\"\n [attr.title]=\"collapsed() ? item.label : null\"\n (click)=\"onItemClick(item, $event)\"\n >\n @if (item.icon) {\n <span class=\"pecb-sidebar__icon\" [innerHTML]=\"getSafeIcon(item.icon)\"></span>\n }\n <span class=\"pecb-sidebar__label\">{{ item.label }}</span>\n </a>\n\n <!-- Child Items -->\n @if (item.children && item.children.length > 0 && !collapsed()) {\n <ul\n class=\"pecb-sidebar__submenu\"\n [class.pecb-sidebar__submenu--open]=\"item.expanded\"\n >\n @for (child of item.children; track child.id) {\n <li>\n <a\n [class]=\"getItemClasses(child, true, false).join(' ')\"\n [attr.href]=\"child.route || '#'\"\n (click)=\"onItemClick(child, $event)\"\n >\n @if (child.icon) {\n <span class=\"pecb-sidebar__icon\" [innerHTML]=\"getSafeIcon(child.icon)\"></span>\n }\n <span class=\"pecb-sidebar__label\">{{ child.label }}</span>\n @if (child.children && child.children.length > 0) {\n <span\n class=\"pecb-sidebar__arrow\"\n [class.pecb-sidebar__arrow--expanded]=\"child.expanded\"\n >\n <!-- Minus icon (expanded) -->\n @if (child.expanded) {\n <svg width=\"12\" height=\"10\" viewBox=\"0 0 12 10\" fill=\"none\">\n <path d=\"M10.35 4.80005L0.75 4.80005\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n }\n <!-- Plus icon (collapsed) -->\n @if (!child.expanded) {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M5.55 0.75L5.55 10.35M10.35 5.55L0.75 5.55\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n }\n </span>\n }\n </a>\n\n <!-- Nested Child Items (Third Level) -->\n @if (child.children && child.children.length > 0) {\n <ul\n class=\"pecb-sidebar__submenu\"\n [class.pecb-sidebar__submenu--open]=\"child.expanded\"\n >\n @for (nestedChild of child.children; track nestedChild.id) {\n <li>\n <a\n [class]=\"getItemClasses(nestedChild, true, true).join(' ')\"\n [attr.href]=\"nestedChild.route || '#'\"\n (click)=\"onItemClick(nestedChild, $event)\"\n >\n <span class=\"pecb-sidebar__label\">{{ nestedChild.label }}</span>\n </a>\n </li>\n }\n </ul>\n }\n </li>\n }\n </ul>\n }\n </li>\n }\n </ul>\n </div>\n }\n </nav>\n\n <!-- Footer Section -->\n @if (showFooter()) {\n <div class=\"pecb-sidebar__footer\">\n <ng-content select=\"[sidebar-footer]\"></ng-content>\n </div>\n }\n\n <!-- Collapsed Menu Popup -->\n @if (collapsed() && activePopupItem()) {\n <div\n class=\"pecb-sidebar__popup\"\n [style.top.px]=\"popupTopPosition()\"\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"pecb-sidebar__popup-header\">\n {{ activePopupItem()?.label }}\n </div>\n <ul class=\"pecb-sidebar__popup-menu\">\n @for (child of activePopupItem()!.children!; track child.id) {\n <li>\n <!-- Child Item -->\n <a\n [class]=\"'pecb-sidebar__popup-item ' + (child.active ? 'pecb-sidebar__popup-item--active' : '')\"\n [attr.href]=\"child.route || '#'\"\n (click)=\"onPopupItemClick(child, $event)\"\n >\n {{ child.label }}\n <!-- Plus/Minus icon for items with nested children -->\n @if (child.children && child.children.length > 0) {\n <span class=\"pecb-sidebar__popup-icon\">\n <!-- Minus icon when expanded -->\n @if (child.expanded) {\n <svg width=\"12\" height=\"10\" viewBox=\"0 0 12 10\" fill=\"none\">\n <path d=\"M10.35 4.80005L0.75 4.80005\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n }\n <!-- Plus icon when collapsed -->\n @if (!child.expanded) {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M5.55 0.75L5.55 10.35M10.35 5.55L0.75 5.55\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n }\n </span>\n }\n </a>\n\n <!-- Nested Children (3rd level) - Only show when expanded -->\n @if (child.children && child.children.length > 0 && child.expanded) {\n <ul class=\"pecb-sidebar__popup-submenu\">\n @for (nestedChild of child.children; track nestedChild.id) {\n <li>\n <a\n [class]=\"'pecb-sidebar__popup-subitem ' + (nestedChild.active ? 'pecb-sidebar__popup-subitem--active' : '')\"\n [attr.href]=\"nestedChild.route || '#'\"\n (click)=\"onItemClick(nestedChild, $event); closePopup()\"\n >\n {{ nestedChild.label }}\n </a>\n </li>\n }\n </ul>\n }\n </li>\n }\n </ul>\n </div>\n }\n</aside>\n\n<!-- Overlay to close popup when clicking outside -->\n@if (collapsed() && activePopupItem()) {\n <div\n class=\"pecb-sidebar__overlay\"\n (click)=\"closePopup()\"\n ></div>\n}\n","import {\n Component,\n input,\n output,\n OnInit,\n OnDestroy,\n AfterViewInit,\n ChangeDetectionStrategy,\n ElementRef,\n ViewChild\n} from '@angular/core';\nimport { generateUniqueId, trapFocus, disableBodyScroll } from '../../shared/utils/dom.utils';\n\nexport type ConfirmationIconType = 'success' | 'warning' | 'error' | 'info';\n\n@Component({\n selector: 'pecb-confirmation',\n imports: [],\n templateUrl: './confirmation.component.html',\n styleUrls: ['./confirmation.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ConfirmationComponent implements OnInit, OnDestroy, AfterViewInit {\n id = input(generateUniqueId('confirmation'));\n isOpen = input(false);\n title = input('Confirmation');\n message = input('');\n confirmText = input('Yes');\n cancelText = input('No');\n iconType = input<ConfirmationIconType>('success');\n showCloseButton = input(true);\n closeOnBackdropClick = input(true);\n closeOnEscape = input(true);\n ariaLabel = input<string | undefined>(undefined);\n ariaDescribedBy = input<string | undefined>(undefined);\n\n confirmed = output<void>();\n cancelled = output<void>();\n closed = output<void>();\n\n @ViewChild('dialogPanel') dialogPanel!: ElementRef<HTMLElement>;\n\n private cleanupFocusTrap: (() => void) | null = null;\n private cleanupBodyScroll: (() => void) | null = null;\n private previousActiveElement: Element | null = null;\n\n ngOnInit(): void {\n if (this.isOpen()) {\n this.onOpen();\n }\n }\n\n ngAfterViewInit(): void {\n if (this.isOpen() && this.dialogPanel) {\n this.setupFocusTrap();\n }\n }\n\n ngOnDestroy(): void {\n this.cleanup();\n }\n\n get dialogClasses(): string[] {\n return [\n 'pecb-confirmation',\n this.isOpen() ? 'pecb-confirmation--open' : ''\n ].filter(Boolean);\n }\n\n get iconContainerClass(): string {\n return `pecb-confirmation__icon pecb-confirmation__icon--${this.iconType()}`;\n }\n\n get titleId(): string {\n return `${this.id()}-title`;\n }\n\n get messageId(): string {\n return `${this.id()}-message`;\n }\n\n onBackdropClick(event: MouseEvent): void {\n if (this.closeOnBackdropClick() && event.target === event.currentTarget) {\n this.close();\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (this.closeOnEscape() && event.key === 'Escape') {\n event.preventDefault();\n this.close();\n }\n }\n\n onConfirm(): void {\n this.confirmed.emit();\n this.close();\n }\n\n onCancel(): void {\n this.cancelled.emit();\n this.close();\n }\n\n close(): void {\n this.cleanup();\n this.closed.emit();\n }\n\n private onOpen(): void {\n this.previousActiveElement = document.activeElement;\n this.cleanupBodyScroll = disableBodyScroll();\n }\n\n private setupFocusTrap(): void {\n if (this.dialogPanel?.nativeElement) {\n this.cleanupFocusTrap = trapFocus(this.dialogPanel.nativeElement);\n }\n }\n\n private cleanup(): void {\n if (this.cleanupFocusTrap) {\n this.cleanupFocusTrap();\n this.cleanupFocusTrap = null;\n }\n if (this.cleanupBodyScroll) {\n this.cleanupBodyScroll();\n this.cleanupBodyScroll = null;\n }\n if (this.previousActiveElement instanceof HTMLElement) {\n this.previousActiveElement.focus();\n }\n }\n}\n","@if (isOpen()) {\n <div\n [id]=\"id()\"\n [class]=\"dialogClasses.join(' ')\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"titleId\"\n [attr.aria-describedby]=\"message() ? messageId : ariaDescribedBy() || null\"\n [attr.aria-label]=\"ariaLabel() || null\"\n (click)=\"onBackdropClick($event)\"\n (keydown)=\"onKeydown($event)\"\n >\n <div\n #dialogPanel\n class=\"pecb-confirmation__panel\"\n tabindex=\"-1\"\n >\n \n @if (showCloseButton()) {\n <div class=\"pecb-confirmation__header\">\n <button\n type=\"button\"\n class=\"pecb-confirmation__close-btn\"\n aria-label=\"Close dialog\"\n (click)=\"close()\"\n >\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M9 1L1 9M1 1L9 9\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n }\n\n \n <div [class]=\"iconContainerClass\" aria-hidden=\"true\">\n @switch (iconType()) {\n @case ('success') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"64\" height=\"64\" viewBox=\"0 0 64 64\" fill=\"none\">\n <path d=\"M0 12C0 5.37258 5.37258 0 12 0H52C58.6274 0 64 5.37258 64 12V52C64 58.6274 58.6274 64 52 64H12C5.37258 64 0 58.6274 0 52V12Z\" fill=\"#E6F4EA\"/>\n <circle cx=\"31.8243\" cy=\"31.8243\" r=\"18.2857\" fill=\"white\"/>\n <path d=\"M31.9991 9.84625C19.7635 9.84625 9.84521 19.7645 9.84521 32.0001C9.84521 44.2357 19.7635 54.1539 31.9991 54.1539C44.2347 54.1539 54.1529 44.2357 54.1529 32.0001C54.1426 19.7645 44.2244 9.84625 31.9991 9.84625ZM43.8227 26.3458L31.8137 41.3725C31.2781 42.0316 30.4954 42.4436 29.6508 42.4951C29.5993 42.4951 29.5375 42.4951 29.486 42.4951C28.693 42.4951 27.9308 42.1861 27.3747 41.6197L20.3917 34.6367C19.2279 33.4729 19.2279 31.5778 20.3917 30.414C21.5555 29.2502 23.4506 29.2502 24.6144 30.414L29.2285 35.0281L39.1571 22.6174C40.187 21.33 42.0615 21.1137 43.3592 22.1539C44.6466 23.1736 44.8526 25.0584 43.8227 26.3458Z\" fill=\"#57BC57\"/>\n </svg>\n }\n @case ('warning') {\n <svg width=\"64\" height=\"64\" viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"32\" cy=\"32\" r=\"18\" fill=\"white\"/>\n <path d=\"M32 23V33\" stroke=\"#FD7E14\" stroke-width=\"3\" stroke-linecap=\"round\"/>\n <circle cx=\"32\" cy=\"40\" r=\"2\" fill=\"#FD7E14\"/>\n </svg>\n }\n @case ('error') {\n <svg width=\"64\" height=\"64\" viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"32\" cy=\"32\" r=\"18\" fill=\"white\"/>\n <path d=\"M25 25L39 39M39 25L25 39\" stroke=\"#DC3545\" stroke-width=\"3\" stroke-linecap=\"round\"/>\n </svg>\n }\n @case ('info') {\n <svg width=\"64\" height=\"64\" viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"32\" cy=\"32\" r=\"18\" fill=\"white\"/>\n <circle cx=\"32\" cy=\"24\" r=\"2\" fill=\"#007BFF\"/>\n <path d=\"M32 30V40\" stroke=\"#007BFF\" stroke-width=\"3\" stroke-linecap=\"round\"/>\n </svg>\n }\n }\n </div>\n\n \n <div class=\"pecb-confirmation__content\">\n <h2 [id]=\"titleId\" class=\"pecb-confirmation__title\">{{ title() }}</h2>\n\n @if (message()) {\n <p [id]=\"messageId\" class=\"pecb-confirmation__message\">{{ message() }}</p>\n }\n </div>\n\n \n <div class=\"pecb-confirmation__actions\">\n <button\n type=\"button\"\n class=\"pecb-confirmation__btn pecb-confirmation__btn--confirm\"\n (click)=\"onConfirm()\"\n >\n {{ confirmText() }}\n </button>\n <button\n type=\"button\"\n class=\"pecb-confirmation__btn pecb-confirmation__btn--cancel\"\n (click)=\"onCancel()\"\n >\n {{ cancelText() }}\n </button>\n </div>\n </div>\n </div>\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ButtonComponent } from './components/button/button.component';\nimport {\n CardComponent,\n CardHeaderComponent,\n CardBodyComponent,\n CardFooterComponent\n} from './components/card/card.component';\nimport { StatusComponent } from './components/status/status.component';\nimport { PaginationComponent } from './components/pagination/pagination.component';\nimport { TableComponent } from './components/table/table.component';\nimport { TabComponent } from './components/tab/tab.component';\nimport { DatepickerComponent } from './components/datepicker/datepicker.component';\nimport { InputComponent } from './components/input/input.component';\nimport { RadioComponent } from './components/radio/radio.component';\nimport { CheckboxComponent } from './components/checkbox/checkbox.component';\nimport { ToggleComponent } from './components/toggle/toggle.component';\nimport { DropdownComponent } from './components/dropdown/dropdown.component';\nimport {\n RightModalComponent,\n RightModalHeaderDirective,\n RightModalContentDirective,\n RightModalFooterDirective\n} from './components/right-modal/right-modal.component';\nimport { SidebarComponent } from './components/sidebar/sidebar.component';\nimport { ConfirmationComponent } from './components/confirmation/confirmation.component';\n\nconst COMPONENTS = [\n ButtonComponent,\n CardComponent,\n CardHeaderComponent,\n CardBodyComponent,\n CardFooterComponent,\n StatusComponent,\n PaginationComponent,\n TableComponent,\n TabComponent,\n DatepickerComponent,\n InputComponent,\n RadioComponent,\n CheckboxComponent,\n ToggleComponent,\n DropdownComponent,\n RightModalComponent,\n RightModalHeaderDirective,\n RightModalContentDirective,\n RightModalFooterDirective,\n SidebarComponent,\n ConfirmationComponent\n];\n\n/**\n * PECB UI Components Module\n *\n * A professional Angular components library with TypeScript and SCSS.\n * Import this module to use all PECB UI components in your application.\n *\n * @example\n * ```typescript\n * import { PecbComponentsModule } from '@pecb-ui/components';\n *\n * @NgModule({\n * imports: [PecbComponentsModule]\n * })\n * export class AppModule { }\n * ```\n */\n@NgModule({\n imports: [CommonModule, ...COMPONENTS],\n exports: COMPONENTS\n})\nexport class PecbComponentsModule {}\n","import {\n Component,\n input,\n output,\n ChangeDetectionStrategy\n} from '@angular/core';\n\nexport type AlertType = 'info' | 'success' | 'warning' | 'error';\nexport type AlertVariant = 'banner' | 'filled';\n\n@Component({\n selector: 'pecb-alert',\n imports: [],\n templateUrl: './alert.component.html',\n styleUrls: ['./alert.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AlertComponent {\n type = input<AlertType>('info');\n variant = input<AlertVariant>('banner');\n title = input('');\n message = input('');\n dismissible = input(true);\n primaryAction = input<string | undefined>(undefined);\n secondaryAction = input<string | undefined>(undefined);\n\n dismissed = output<void>();\n primaryActionClick = output<void>();\n secondaryActionClick = output<void>();\n\n get hasActions(): boolean {\n return !!(this.primaryAction() || this.secondaryAction());\n }\n\n get hostClasses(): string {\n return [\n 'pecb-alert',\n `pecb-alert--${this.type()}`,\n `pecb-alert--${this.variant()}`,\n this.hasActions ? 'pecb-alert--has-actions' : ''\n ].filter(Boolean).join(' ');\n }\n}\n","<div [class]=\"hostClasses\" role=\"alert\" aria-live=\"polite\">\n\n @if (variant() === 'banner') {\n <div class=\"pecb-alert__icon-wrap\" aria-hidden=\"true\">\n @switch (type()) {\n @case ('info') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n <path d=\"M0 6C0 2.68629 2.68629 0 6 0H26C29.3137 0 32 2.68629 32 6V26C32 29.3137 29.3137 32 26 32H6C2.68629 32 0 29.3137 0 26V6Z\" fill=\"#E6F0FA\"/>\n <circle cx=\"16.2644\" cy=\"16.2637\" r=\"9.49451\" fill=\"white\"/>\n <path d=\"M16.0005 4.9231C22.1181 4.9231 27.0774 9.8824 27.0774 16C27.0774 22.1176 22.1181 27.0769 16.0005 27.0769C9.88289 27.0769 4.92358 22.1176 4.92358 16C4.92358 9.8824 9.88289 4.9231 16.0005 4.9231ZM14.1544 13.0469C13.4181 13.047 12.9236 13.5413 12.9236 14.2777C12.9237 15.0139 13.4182 15.5083 14.1544 15.5084H15.8797L14.1544 21.2915C14.0309 21.9041 14.1546 22.6403 14.5251 23.1346C14.8959 23.7474 15.514 23.9946 16.1267 23.9946H18.0943C18.8357 23.9945 19.325 23.5053 19.325 22.7638C19.3249 22.0276 18.8305 21.5331 18.0943 21.5331H16.6159L18.3413 15.75C18.4648 15.1373 18.3411 14.4012 17.9705 13.9069C17.5997 13.2941 16.9817 13.0469 16.3689 13.0469H14.1544ZM16.7397 8.00002C15.7201 8.00005 14.8959 8.82415 14.8959 9.84377C14.896 10.8633 15.7201 11.6869 16.7397 11.6869C17.7593 11.6869 18.5833 10.8633 18.5834 9.84377C18.5834 8.82414 17.7593 8.00002 16.7397 8.00002Z\" fill=\"#5EACFF\"/>\n </svg>\n }\n @case ('success') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n <path d=\"M0 6C0 2.68629 2.68629 0 6 0H26C29.3137 0 32 2.68629 32 6V26C32 29.3137 29.3137 32 26 32H6C2.68629 32 0 29.3137 0 26V6Z\" fill=\"#E6F4EA\"/>\n <circle cx=\"15.9124\" cy=\"15.9121\" r=\"9.14286\" fill=\"white\"/>\n <path d=\"M16.0001 4.9231C9.88231 4.9231 4.92319 9.88222 4.92319 16C4.92319 22.1178 9.88231 27.0769 16.0001 27.0769C22.1179 27.0769 27.077 22.1178 27.077 16C27.0719 9.88222 22.1128 4.9231 16.0001 4.9231ZM21.9119 13.1729L15.9074 20.6862C15.6396 21.0158 15.2483 21.2218 14.826 21.2475C14.8002 21.2475 14.7693 21.2475 14.7436 21.2475C14.3471 21.2475 13.966 21.093 13.6879 20.8098L10.1964 17.3183C9.61453 16.7364 9.61453 15.7889 10.1964 15.207C10.7784 14.6251 11.7259 14.6251 12.3078 15.207L14.6149 17.514L19.5791 11.3087C20.0941 10.665 21.0313 10.5568 21.6802 11.0769C22.3239 11.5868 22.4269 12.5291 21.9119 13.1729Z\" fill=\"#57BC57\"/>\n </svg>\n }\n @case ('warning') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n <path d=\"M0 6C0 2.68629 2.68629 0 6 0H26C29.3137 0 32 2.68629 32 6V26C32 29.3137 29.3137 32 26 32H6C2.68629 32 0 29.3137 0 26V6Z\" fill=\"#FFF4E5\"/>\n <circle cx=\"16.2644\" cy=\"16.2637\" r=\"9.49451\" fill=\"white\"/>\n <path d=\"M16.0007 4.9231C22.1183 4.9231 27.0778 9.88263 27.0778 16.0002C27.0777 22.1178 22.1182 27.0774 16.0007 27.0774C9.88316 27.0773 4.92363 22.1177 4.92351 16.0002C4.92351 9.88266 9.88309 4.92315 16.0007 4.9231ZM16.0407 20.1125C15.0013 20.1128 14.156 20.9588 14.1559 21.9983C14.2507 24.4963 17.832 24.4956 17.9264 21.9983C17.9264 20.9587 17.0803 20.1125 16.0407 20.1125ZM17.8854 9.48657C16.9498 8.3259 15.0529 8.32527 14.1169 9.48657C13.6482 10.0446 13.4512 10.7759 13.5768 11.4934C13.9515 13.6339 14.4802 16.6552 14.7175 18.012C14.9836 19.4395 17.0191 19.4391 17.2848 18.012L18.4255 11.4934C18.5511 10.7759 18.3541 10.0446 17.8854 9.48657Z\" fill=\"#FF9C4A\"/>\n </svg>\n }\n @case ('error') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\">\n <path d=\"M0 6C0 2.68629 2.68629 0 6 0H26C29.3137 0 32 2.68629 32 6V26C32 29.3137 29.3137 32 26 32H6C2.68629 32 0 29.3137 0 26V6Z\" fill=\"#FDECEA\"/>\n <circle cx=\"15.9124\" cy=\"15.9121\" r=\"9.14286\" fill=\"white\"/>\n <path d=\"M23.8326 8.16745C28.1585 12.4933 28.1585 19.5068 23.8326 23.8326C19.5068 28.1584 12.4933 28.1584 8.16751 23.8326C3.8417 19.5068 3.8417 12.4933 8.16751 8.16745C12.4933 3.84164 19.5068 3.84164 23.8326 8.16745ZM20.1339 11.431C19.6834 10.9804 18.9527 10.9804 18.5022 11.431L15.7281 14.2051C15.638 14.2952 15.4919 14.2952 15.4018 14.2051L12.6277 11.431C12.1772 10.9804 11.4465 10.9804 10.9959 11.431C10.5454 11.8816 10.5454 12.6122 10.9959 13.0628L13.77 15.8368C13.8601 15.927 13.8601 16.0731 13.77 16.1632L10.9959 18.9372C10.5454 19.3878 10.5454 20.1184 10.9959 20.569C11.4465 21.0196 12.1772 21.0196 12.6277 20.569L15.4018 17.795C15.4919 17.7049 15.638 17.7049 15.7281 17.795L18.5022 20.569C18.9527 21.0196 19.6834 21.0196 20.1339 20.569C20.5845 20.1184 20.5845 19.3878 20.1339 18.9372L17.3599 16.1632C17.2698 16.0731 17.2698 15.927 17.3599 15.8368L20.1339 13.0628C20.5845 12.6122 20.5845 11.8816 20.1339 11.431Z\" fill=\"#FF606F\"/>\n </svg>\n }\n }\n </div>\n }\n\n <div class=\"pecb-alert__body\">\n @if (title()) {\n <p class=\"pecb-alert__title\">{{ title() }}</p>\n }\n @if (message()) {\n <p class=\"pecb-alert__message\">{{ message() }}</p>\n }\n\n @if (hasActions) {\n <div class=\"pecb-alert__actions\">\n @if (primaryAction()) {\n <button\n type=\"button\"\n class=\"pecb-alert__btn pecb-alert__btn--primary\"\n (click)=\"primaryActionClick.emit()\"\n >{{ primaryAction() }}</button>\n }\n @if (secondaryAction()) {\n <button\n type=\"button\"\n class=\"pecb-alert__btn pecb-alert__btn--secondary\"\n (click)=\"secondaryActionClick.emit()\"\n >{{ secondaryAction() }}</button>\n }\n </div>\n }\n </div>\n\n @if (variant() === 'banner' && dismissible()) {\n <div class=\"pecb-alert__divider\" aria-hidden=\"true\"></div>\n }\n\n @if (dismissible()) {\n <button\n type=\"button\"\n class=\"pecb-alert__close\"\n aria-label=\"Dismiss alert\"\n (click)=\"dismissed.emit()\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M11 1L1 11M1 1L11 11\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n\n</div>\n","import { Injectable } from '@angular/core';\nimport { Subject, Observable } from 'rxjs';\n\n/**\n * Notification types supported by the service\n */\nexport type NotificationType = 'success' | 'error' | 'warning' | 'info';\n\n/**\n * Notification position on screen\n */\nexport type NotificationPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center';\n\n/**\n * Notification configuration options\n */\nexport interface NotificationConfig {\n /** Notification message */\n message: string;\n /** Notification title (optional) */\n title?: string;\n /** Type of notification */\n type: NotificationType;\n /** Duration in milliseconds (0 for persistent) */\n duration?: number;\n /** Whether the notification can be dismissed */\n dismissible?: boolean;\n /** Position on screen */\n position?: NotificationPosition;\n /** Custom CSS class */\n customClass?: string;\n /** Unique identifier */\n id?: string;\n}\n\n/**\n * Notification object with all properties\n */\nexport interface Notification extends Required<Omit<NotificationConfig, 'title' | 'customClass'>> {\n title?: string;\n customClass?: string;\n timestamp: Date;\n}\n\n/**\n * A stateless, injectable notification service for displaying toast notifications.\n *\n * This service provides a reactive way to manage notifications across the application.\n * It uses RxJS Subjects to emit notification events that can be consumed by notification\n * display components.\n *\n * @example\n * ```typescript\n * import { NotificationService } from '@pecb-ui/components';\n *\n * @Component({...})\n * export class MyComponent {\n * constructor(private notificationService: NotificationService) {}\n *\n * showSuccess(): void {\n * this.notificationService.success('Operation completed successfully!');\n * }\n *\n * showError(): void {\n * this.notificationService.error('An error occurred', 'Error Title');\n * }\n * }\n * ```\n *\n * @publicApi\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NotificationService {\n private readonly notificationSubject = new Subject<Notification>();\n private readonly dismissSubject = new Subject<string>();\n private readonly clearSubject = new Subject<void>();\n\n /** Default duration for notifications in milliseconds */\n private readonly defaultDuration = 5000;\n /** Default position for notifications */\n private readonly defaultPosition: NotificationPosition = 'top-right';\n\n /**\n * Observable stream of notifications\n */\n get notifications$(): Observable<Notification> {\n return this.notificationSubject.asObservable();\n }\n\n /**\n * Observable stream of dismissed notification IDs\n */\n get dismiss$(): Observable<string> {\n return this.dismissSubject.asObservable();\n }\n\n /**\n * Observable stream for clear all events\n */\n get clear$(): Observable<void> {\n return this.clearSubject.asObservable();\n }\n\n /**\n * Show a success notification\n * @param message - The notification message\n * @param title - Optional title\n * @param config - Optional additional configuration\n */\n success(message: string, title?: string, config?: Partial<NotificationConfig>): string {\n return this.show({ ...config, message, title, type: 'success' });\n }\n\n /**\n * Show an error notification\n * @param message - The notification message\n * @param title - Optional title\n * @param config - Optional additional configuration\n */\n error(message: string, title?: string, config?: Partial<NotificationConfig>): string {\n return this.show({ ...config, message, title, type: 'error' });\n }\n\n /**\n * Show a warning notification\n * @param message - The notification message\n * @param title - Optional title\n * @param config - Optional additional configuration\n */\n warning(message: string, title?: string, config?: Partial<NotificationConfig>): string {\n return this.show({ ...config, message, title, type: 'warning' });\n }\n\n /**\n * Show an info notification\n * @param message - The notification message\n * @param title - Optional title\n * @param config - Optional additional configuration\n */\n info(message: string, title?: string, config?: Partial<NotificationConfig>): string {\n return this.show({ ...config, message, title, type: 'info' });\n }\n\n /**\n * Show a notification with custom configuration\n * @param config - Full notification configuration\n * @returns The notification ID\n */\n show(config: NotificationConfig): string {\n const id = config.id || this.generateId();\n\n const notification: Notification = {\n id,\n message: config.message,\n title: config.title,\n type: config.type,\n duration: config.duration ?? this.defaultDuration,\n dismissible: config.dismissible ?? true,\n position: config.position ?? this.defaultPosition,\n customClass: config.customClass,\n timestamp: new Date()\n };\n\n this.notificationSubject.next(notification);\n return id;\n }\n\n /**\n * Dismiss a specific notification by ID\n * @param id - The notification ID to dismiss\n */\n dismiss(id: string): void {\n this.dismissSubject.next(id);\n }\n\n /**\n * Clear all notifications\n */\n clearAll(): void {\n this.clearSubject.next();\n }\n\n /**\n * Generate a unique notification ID\n */\n private generateId(): string {\n return `notification-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;\n }\n}\n","import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n/**\n * Available theme modes\n */\nexport type ThemeMode = 'light' | 'dark' | 'system';\n\n/**\n * Theme configuration interface\n */\nexport interface ThemeConfig {\n /** Current theme mode */\n mode: ThemeMode;\n /** Resolved theme (light or dark, never system) */\n resolvedTheme: 'light' | 'dark';\n /** CSS class to apply to the document */\n cssClass: string;\n}\n\n/**\n * Custom theme variables that can be overridden\n */\nexport interface ThemeVariables {\n /** Primary color */\n primaryColor?: string;\n /** Secondary color */\n secondaryColor?: string;\n /** Background color */\n backgroundColor?: string;\n /** Text color */\n textColor?: string;\n /** Border radius */\n borderRadius?: string;\n /** Font family */\n fontFamily?: string;\n /** Custom CSS variables */\n [key: string]: string | undefined;\n}\n\n/**\n * Storage key for persisting theme preference\n */\nconst THEME_STORAGE_KEY = 'pecb-ui-theme';\n\n/**\n * A stateless, injectable theme service for managing application themes.\n *\n * This service provides reactive theme management with support for light/dark modes,\n * system preference detection, and custom CSS variable overrides.\n *\n * @example\n * ```typescript\n * import { ThemeService } from '@pecb-ui/components';\n *\n * @Component({...})\n * export class MyComponent {\n * constructor(private themeService: ThemeService) {}\n *\n * toggleTheme(): void {\n * this.themeService.toggleTheme();\n * }\n *\n * setDarkMode(): void {\n * this.themeService.setTheme('dark');\n * }\n * }\n * ```\n *\n * @publicApi\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ThemeService {\n private readonly themeSubject: BehaviorSubject<ThemeConfig>;\n private readonly isBrowser: boolean;\n private mediaQuery: MediaQueryList | null = null;\n\n constructor(@Inject(PLATFORM_ID) platformId: object) {\n this.isBrowser = isPlatformBrowser(platformId);\n\n const initialTheme = this.getInitialTheme();\n this.themeSubject = new BehaviorSubject<ThemeConfig>(this.createThemeConfig(initialTheme));\n\n if (this.isBrowser) {\n this.setupSystemThemeListener();\n this.applyTheme(this.themeSubject.value);\n }\n }\n\n /**\n * Observable stream of theme configuration changes\n */\n get theme$(): Observable<ThemeConfig> {\n return this.themeSubject.asObservable();\n }\n\n /**\n * Get the current theme configuration\n */\n get currentTheme(): ThemeConfig {\n return this.themeSubject.value;\n }\n\n /**\n * Get the current theme mode\n */\n get currentMode(): ThemeMode {\n return this.themeSubject.value.mode;\n }\n\n /**\n * Check if the current resolved theme is dark\n */\n get isDarkMode(): boolean {\n return this.themeSubject.value.resolvedTheme === 'dark';\n }\n\n /**\n * Set the theme mode\n * @param mode - The theme mode to set (light, dark, or system)\n */\n setTheme(mode: ThemeMode): void {\n const config = this.createThemeConfig(mode);\n this.themeSubject.next(config);\n this.persistTheme(mode);\n\n if (this.isBrowser) {\n this.applyTheme(config);\n }\n }\n\n /**\n * Toggle between light and dark themes\n * If currently using system preference, switches to the opposite of the resolved theme\n */\n toggleTheme(): void {\n const current = this.themeSubject.value;\n const newMode: ThemeMode = current.resolvedTheme === 'light' ? 'dark' : 'light';\n this.setTheme(newMode);\n }\n\n /**\n * Reset to system preference\n */\n useSystemTheme(): void {\n this.setTheme('system');\n }\n\n /**\n * Apply custom CSS variables to the document\n * @param variables - Object containing CSS variable overrides\n */\n setCustomVariables(variables: ThemeVariables): void {\n if (!this.isBrowser) {\n return;\n }\n\n const root = document.documentElement;\n Object.entries(variables).forEach(([key, value]) => {\n if (value !== undefined) {\n const cssVarName = this.toCssVariableName(key);\n root.style.setProperty(cssVarName, value);\n }\n });\n }\n\n /**\n * Remove custom CSS variables from the document\n * @param variableNames - Array of variable names to remove\n */\n removeCustomVariables(variableNames: string[]): void {\n if (!this.isBrowser) {\n return;\n }\n\n const root = document.documentElement;\n variableNames.forEach(name => {\n const cssVarName = this.toCssVariableName(name);\n root.style.removeProperty(cssVarName);\n });\n }\n\n /**\n * Get the initial theme from storage or system preference\n */\n private getInitialTheme(): ThemeMode {\n if (!this.isBrowser) {\n return 'light';\n }\n\n const stored = localStorage.getItem(THEME_STORAGE_KEY);\n if (stored && ['light', 'dark', 'system'].includes(stored)) {\n return stored as ThemeMode;\n }\n\n return 'system';\n }\n\n /**\n * Create a theme configuration object\n */\n private createThemeConfig(mode: ThemeMode): ThemeConfig {\n const resolvedTheme = this.resolveTheme(mode);\n return {\n mode,\n resolvedTheme,\n cssClass: `pecb-theme-${resolvedTheme}`\n };\n }\n\n /**\n * Resolve the actual theme from mode (handles 'system' mode)\n */\n private resolveTheme(mode: ThemeMode): 'light' | 'dark' {\n if (mode === 'system') {\n return this.getSystemPreference();\n }\n return mode;\n }\n\n /**\n * Get the system color scheme preference\n */\n private getSystemPreference(): 'light' | 'dark' {\n if (!this.isBrowser) {\n return 'light';\n }\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n\n /**\n * Setup listener for system theme changes\n */\n private setupSystemThemeListener(): void {\n if (!this.isBrowser) {\n return;\n }\n\n this.mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n const listener = (): void => {\n if (this.themeSubject.value.mode === 'system') {\n const config = this.createThemeConfig('system');\n this.themeSubject.next(config);\n this.applyTheme(config);\n }\n };\n\n // Use addEventListener for modern browsers\n if (this.mediaQuery.addEventListener) {\n this.mediaQuery.addEventListener('change', listener);\n }\n }\n\n /**\n * Apply the theme to the document\n */\n private applyTheme(config: ThemeConfig): void {\n if (!this.isBrowser) {\n return;\n }\n\n const root = document.documentElement;\n\n // Remove existing theme classes\n root.classList.remove('pecb-theme-light', 'pecb-theme-dark');\n\n // Add new theme class\n root.classList.add(config.cssClass);\n\n // Set data attribute for CSS selectors\n root.setAttribute('data-pecb-theme', config.resolvedTheme);\n }\n\n /**\n * Persist theme preference to storage\n */\n private persistTheme(mode: ThemeMode): void {\n if (!this.isBrowser) {\n return;\n }\n localStorage.setItem(THEME_STORAGE_KEY, mode);\n }\n\n /**\n * Convert camelCase property name to CSS variable name\n */\n private toCssVariableName(name: string): string {\n const kebabCase = name.replace(/([A-Z])/g, '-$1').toLowerCase();\n return `--pecb-${kebabCase}`;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n/**\n * Loading state for a specific operation\n */\nexport interface LoadingState {\n /** Unique identifier for the loading operation */\n id: string;\n /** Whether this operation is currently loading */\n isLoading: boolean;\n /** Optional message to display */\n message?: string;\n /** Optional progress percentage (0-100) */\n progress?: number;\n}\n\n/**\n * A stateless, injectable loading service for managing loading states.\n *\n * This service provides a centralized way to track loading states across\n * the application, supporting multiple concurrent loading operations with\n * individual tracking capabilities.\n *\n * @example\n * ```typescript\n * import { LoadingService } from '@pecb-ui/components';\n *\n * @Component({...})\n * export class MyComponent {\n * isLoading$ = this.loadingService.isLoading$('my-operation');\n *\n * constructor(private loadingService: LoadingService) {}\n *\n * async loadData(): Promise<void> {\n * this.loadingService.start('my-operation', 'Loading data...');\n * try {\n * await this.fetchData();\n * } finally {\n * this.loadingService.stop('my-operation');\n * }\n * }\n * }\n * ```\n *\n * @publicApi\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class LoadingService {\n private readonly loadingStates = new Map<string, LoadingState>();\n private readonly statesSubject = new BehaviorSubject<Map<string, LoadingState>>(new Map());\n\n /** Default loading operation ID */\n private readonly defaultId = 'global';\n\n /**\n * Observable of all loading states\n */\n get states$(): Observable<Map<string, LoadingState>> {\n return this.statesSubject.asObservable();\n }\n\n /**\n * Observable that emits true when any loading operation is active\n */\n get isAnyLoading$(): Observable<boolean> {\n return this.statesSubject.pipe(\n map(states => Array.from(states.values()).some(state => state.isLoading))\n );\n }\n\n /**\n * Get observable for a specific loading operation\n * @param id - The loading operation identifier\n */\n isLoading$(id: string = this.defaultId): Observable<boolean> {\n return this.statesSubject.pipe(\n map(states => states.get(id)?.isLoading ?? false)\n );\n }\n\n /**\n * Get observable for loading state with message\n * @param id - The loading operation identifier\n */\n getState$(id: string = this.defaultId): Observable<LoadingState | undefined> {\n return this.statesSubject.pipe(\n map(states => states.get(id))\n );\n }\n\n /**\n * Check if a specific operation is currently loading (synchronous)\n * @param id - The loading operation identifier\n */\n isLoading(id: string = this.defaultId): boolean {\n return this.loadingStates.get(id)?.isLoading ?? false;\n }\n\n /**\n * Check if any operation is currently loading (synchronous)\n */\n isAnyLoading(): boolean {\n return Array.from(this.loadingStates.values()).some(state => state.isLoading);\n }\n\n /**\n * Start a loading operation\n * @param id - The loading operation identifier\n * @param message - Optional message to display\n */\n start(id: string = this.defaultId, message?: string): void {\n this.updateState(id, { isLoading: true, message, progress: undefined });\n }\n\n /**\n * Stop a loading operation\n * @param id - The loading operation identifier\n */\n stop(id: string = this.defaultId): void {\n this.updateState(id, { isLoading: false, message: undefined, progress: undefined });\n }\n\n /**\n * Update progress for a loading operation\n * @param id - The loading operation identifier\n * @param progress - Progress percentage (0-100)\n * @param message - Optional updated message\n */\n setProgress(id: string, progress: number, message?: string): void {\n const currentState = this.loadingStates.get(id);\n if (currentState) {\n this.updateState(id, {\n isLoading: true,\n progress: Math.min(100, Math.max(0, progress)),\n message: message ?? currentState.message\n });\n }\n }\n\n /**\n * Update the message for a loading operation\n * @param id - The loading operation identifier\n * @param message - New message to display\n */\n setMessage(id: string, message: string): void {\n const currentState = this.loadingStates.get(id);\n if (currentState) {\n this.updateState(id, { ...currentState, id, message });\n }\n }\n\n /**\n * Stop all loading operations\n */\n stopAll(): void {\n this.loadingStates.clear();\n this.statesSubject.next(new Map());\n }\n\n /**\n * Remove a loading state completely\n * @param id - The loading operation identifier\n */\n remove(id: string): void {\n this.loadingStates.delete(id);\n this.emitStates();\n }\n\n /**\n * Execute an async operation with automatic loading state management\n * @param id - The loading operation identifier\n * @param operation - The async operation to execute\n * @param message - Optional loading message\n * @returns The result of the operation\n */\n async withLoading<T>(\n id: string,\n operation: () => Promise<T>,\n message?: string\n ): Promise<T> {\n this.start(id, message);\n try {\n return await operation();\n } finally {\n this.stop(id);\n }\n }\n\n /**\n * Update a loading state\n */\n private updateState(id: string, partialState: Partial<LoadingState> & { isLoading: boolean }): void {\n const state: LoadingState = {\n id,\n isLoading: partialState.isLoading,\n message: partialState.message,\n progress: partialState.progress\n };\n\n this.loadingStates.set(id, state);\n this.emitStates();\n }\n\n /**\n * Emit current states to subscribers\n */\n private emitStates(): void {\n this.statesSubject.next(new Map(this.loadingStates));\n }\n}\n","/**\n * Common type definitions for PECB UI Components\n * @module types\n */\n\n/**\n * Standard size variants used across components\n */\nexport type Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Standard component size mapping\n */\nexport type ComponentSize = 'small' | 'medium' | 'large';\n\n/**\n * Semantic color variants\n */\nexport type ColorVariant = 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info';\n\n/**\n * Extended color variants including neutral options\n */\nexport type ExtendedColorVariant = ColorVariant | 'neutral' | 'muted';\n\n/**\n * Component state variants\n */\nexport type StateVariant = 'default' | 'hover' | 'active' | 'focus' | 'disabled';\n\n/**\n * Position options for overlays and popups\n */\nexport type Position =\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'left-start'\n | 'left-end'\n | 'right'\n | 'right-start'\n | 'right-end';\n\n/**\n * Alignment options\n */\nexport type Alignment = 'start' | 'center' | 'end' | 'stretch';\n\n/**\n * Direction options for layouts\n */\nexport type Direction = 'horizontal' | 'vertical';\n\n/**\n * Orientation alias for direction\n */\nexport type Orientation = 'horizontal' | 'vertical';\n\n/**\n * Spacing scale values\n */\nexport type SpacingScale = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\n\n/**\n * Border radius scale values\n */\nexport type RadiusScale = 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n/**\n * Shadow elevation levels\n */\nexport type ElevationLevel = 'none' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Animation timing presets\n */\nexport type AnimationTiming = 'instant' | 'fast' | 'normal' | 'slow';\n\n/**\n * Breakpoint names\n */\nexport type Breakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl';\n\n/**\n * Form validation state\n */\nexport type ValidationState = 'valid' | 'invalid' | 'pending' | 'pristine';\n\n/**\n * Generic callback function type\n */\nexport type Callback<T = void> = () => T;\n\n/**\n * Generic event handler type\n */\nexport type EventHandler<T = Event> = (event: T) => void;\n\n/**\n * Make specific properties required\n */\nexport type RequireProps<T, K extends keyof T> = T & Required<Pick<T, K>>;\n\n/**\n * Make specific properties optional\n */\nexport type OptionalProps<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\n\n/**\n * Extract non-nullable type\n */\nexport type NonNullableProps<T> = {\n [K in keyof T]: NonNullable<T[K]>;\n};\n","/**\n * String utility functions for PECB UI Components\n * @module utils/string\n */\n\n/**\n * Convert a string to kebab-case\n * @param str - The string to convert\n * @returns The kebab-case string\n *\n * @example\n * toKebabCase('myComponentName') // 'my-component-name'\n * toKebabCase('MyComponentName') // 'my-component-name'\n */\nexport function toKebabCase(str: string): string {\n return str\n .replace(/([a-z])([A-Z])/g, '$1-$2')\n .replace(/[\\s_]+/g, '-')\n .toLowerCase();\n}\n\n/**\n * Convert a string to camelCase\n * @param str - The string to convert\n * @returns The camelCase string\n *\n * @example\n * toCamelCase('my-component-name') // 'myComponentName'\n * toCamelCase('my_component_name') // 'myComponentName'\n */\nexport function toCamelCase(str: string): string {\n return str\n .replace(/[-_\\s]+(.)?/g, (_, char) => (char ? char.toUpperCase() : ''))\n .replace(/^[A-Z]/, char => char.toLowerCase());\n}\n\n/**\n * Convert a string to PascalCase\n * @param str - The string to convert\n * @returns The PascalCase string\n *\n * @example\n * toPascalCase('my-component-name') // 'MyComponentName'\n */\nexport function toPascalCase(str: string): string {\n const camel = toCamelCase(str);\n return camel.charAt(0).toUpperCase() + camel.slice(1);\n}\n\n/**\n * Convert a string to snake_case\n * @param str - The string to convert\n * @returns The snake_case string\n *\n * @example\n * toSnakeCase('myComponentName') // 'my_component_name'\n */\nexport function toSnakeCase(str: string): string {\n return toKebabCase(str).replace(/-/g, '_');\n}\n\n/**\n * Capitalize the first letter of a string\n * @param str - The string to capitalize\n * @returns The capitalized string\n *\n * @example\n * capitalize('hello world') // 'Hello world'\n */\nexport function capitalize(str: string): string {\n if (!str) return str;\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * Truncate a string to a specified length\n * @param str - The string to truncate\n * @param maxLength - Maximum length\n * @param suffix - Suffix to append when truncated (default: '...')\n * @returns The truncated string\n *\n * @example\n * truncate('Hello World', 8) // 'Hello...'\n * truncate('Hello World', 8, '…') // 'Hello W…'\n */\nexport function truncate(str: string, maxLength: number, suffix = '...'): string {\n if (!str || str.length <= maxLength) return str;\n return str.slice(0, maxLength - suffix.length) + suffix;\n}\n\n/**\n * Check if a string is empty or contains only whitespace\n * @param str - The string to check\n * @returns True if the string is empty or whitespace\n *\n * @example\n * isBlank('') // true\n * isBlank(' ') // true\n * isBlank('hello') // false\n */\nexport function isBlank(str: string | null | undefined): boolean {\n return !str || str.trim().length === 0;\n}\n\n/**\n * Check if a string is not empty and contains non-whitespace characters\n * @param str - The string to check\n * @returns True if the string is not empty\n */\nexport function isNotBlank(str: string | null | undefined): str is string {\n return !isBlank(str);\n}\n\n/**\n * Generate a slug from a string (URL-friendly)\n * @param str - The string to convert\n * @returns URL-friendly slug\n *\n * @example\n * slugify('Hello World!') // 'hello-world'\n * slugify('Café Latte') // 'cafe-latte'\n */\nexport function slugify(str: string): string {\n return str\n .toLowerCase()\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '') // Remove diacritics\n .replace(/[^a-z0-9\\s-]/g, '') // Remove non-alphanumeric\n .replace(/[\\s_]+/g, '-') // Replace spaces with hyphens\n .replace(/-+/g, '-') // Remove consecutive hyphens\n .replace(/^-|-$/g, ''); // Trim hyphens from ends\n}\n\n/**\n * Escape HTML special characters\n * @param str - The string to escape\n * @returns The escaped string\n *\n * @example\n * escapeHtml('<script>alert(\"XSS\")</script>') // '<script>alert("XSS")</script>'\n */\nexport function escapeHtml(str: string): string {\n const htmlEscapes: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return str.replace(/[&<>\"']/g, char => htmlEscapes[char]);\n}\n\n/**\n * Strip HTML tags from a string\n * @param str - The string containing HTML\n * @returns The string without HTML tags\n *\n * @example\n * stripHtml('<p>Hello <strong>World</strong></p>') // 'Hello World'\n */\nexport function stripHtml(str: string): string {\n return str.replace(/<[^>]*>/g, '');\n}\n\n/**\n * Generate initials from a name\n * @param name - The name to extract initials from\n * @param maxLength - Maximum number of initials (default: 2)\n * @returns The initials in uppercase\n *\n * @example\n * getInitials('John Doe') // 'JD'\n * getInitials('John Michael Doe', 3) // 'JMD'\n */\nexport function getInitials(name: string, maxLength = 2): string {\n if (!name) return '';\n\n return name\n .split(/\\s+/)\n .filter(Boolean)\n .slice(0, maxLength)\n .map(word => word.charAt(0).toUpperCase())\n .join('');\n}\n\n/**\n * Pluralize a word based on count\n * @param count - The count to check\n * @param singular - Singular form\n * @param plural - Plural form (optional, defaults to singular + 's')\n * @returns The appropriate form of the word\n *\n * @example\n * pluralize(1, 'item') // 'item'\n * pluralize(5, 'item') // 'items'\n * pluralize(2, 'child', 'children') // 'children'\n */\nexport function pluralize(count: number, singular: string, plural?: string): string {\n return count === 1 ? singular : (plural ?? `${singular}s`);\n}\n\n/**\n * Format a number as a string with count and pluralized label\n * @param count - The count\n * @param singular - Singular form of the label\n * @param plural - Plural form (optional)\n * @returns Formatted string like \"5 items\"\n *\n * @example\n * formatCount(1, 'item') // '1 item'\n * formatCount(5, 'item') // '5 items'\n */\nexport function formatCount(count: number, singular: string, plural?: string): string {\n return `${count} ${pluralize(count, singular, plural)}`;\n}\n","/**\n * Accessibility utility functions for PECB UI Components\n * Helps ensure WCAG 2.1 compliance\n * @module utils/accessibility\n */\n\nimport { generateUniqueId } from './dom.utils';\n\n/**\n * ARIA live region politeness levels\n */\nexport type AriaLive = 'off' | 'polite' | 'assertive';\n\n/**\n * ARIA roles commonly used in components\n */\nexport type AriaRole =\n | 'alert'\n | 'alertdialog'\n | 'button'\n | 'checkbox'\n | 'combobox'\n | 'dialog'\n | 'grid'\n | 'gridcell'\n | 'link'\n | 'listbox'\n | 'menu'\n | 'menubar'\n | 'menuitem'\n | 'menuitemcheckbox'\n | 'menuitemradio'\n | 'option'\n | 'progressbar'\n | 'radio'\n | 'radiogroup'\n | 'scrollbar'\n | 'searchbox'\n | 'slider'\n | 'spinbutton'\n | 'status'\n | 'switch'\n | 'tab'\n | 'tablist'\n | 'tabpanel'\n | 'textbox'\n | 'tooltip'\n | 'tree'\n | 'treegrid'\n | 'treeitem';\n\n/**\n * Standard ARIA attributes interface for components\n */\nexport interface AriaAttributes {\n role?: AriaRole;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-expanded'?: boolean;\n 'aria-selected'?: boolean;\n 'aria-checked'?: boolean | 'mixed';\n 'aria-disabled'?: boolean;\n 'aria-hidden'?: boolean;\n 'aria-invalid'?: boolean;\n 'aria-required'?: boolean;\n 'aria-readonly'?: boolean;\n 'aria-pressed'?: boolean | 'mixed';\n 'aria-current'?: boolean | 'page' | 'step' | 'location' | 'date' | 'time';\n 'aria-haspopup'?: boolean | 'menu' | 'listbox' | 'tree' | 'grid' | 'dialog';\n 'aria-controls'?: string;\n 'aria-owns'?: string;\n 'aria-live'?: AriaLive;\n 'aria-atomic'?: boolean;\n 'aria-busy'?: boolean;\n 'aria-valuemin'?: number;\n 'aria-valuemax'?: number;\n 'aria-valuenow'?: number;\n 'aria-valuetext'?: string;\n 'aria-orientation'?: 'horizontal' | 'vertical';\n 'aria-activedescendant'?: string;\n 'aria-autocomplete'?: 'none' | 'inline' | 'list' | 'both';\n 'aria-multiselectable'?: boolean;\n 'aria-sort'?: 'none' | 'ascending' | 'descending' | 'other';\n 'aria-level'?: number;\n 'aria-setsize'?: number;\n 'aria-posinset'?: number;\n tabindex?: number;\n}\n\n/**\n * Generate ARIA attributes for a button component\n * @param options - Button accessibility options\n * @returns ARIA attributes object\n */\nexport function getButtonAriaAttributes(options: {\n label?: string;\n pressed?: boolean;\n expanded?: boolean;\n disabled?: boolean;\n controls?: string;\n haspopup?: AriaAttributes['aria-haspopup'];\n describedby?: string;\n}): AriaAttributes {\n const attrs: AriaAttributes = {};\n\n if (options.label) {\n attrs['aria-label'] = options.label;\n }\n if (options.pressed !== undefined) {\n attrs['aria-pressed'] = options.pressed;\n }\n if (options.expanded !== undefined) {\n attrs['aria-expanded'] = options.expanded;\n }\n if (options.disabled) {\n attrs['aria-disabled'] = true;\n }\n if (options.controls) {\n attrs['aria-controls'] = options.controls;\n }\n if (options.haspopup) {\n attrs['aria-haspopup'] = options.haspopup;\n }\n if (options.describedby) {\n attrs['aria-describedby'] = options.describedby;\n }\n\n return attrs;\n}\n\n/**\n * Generate ARIA attributes for a dialog/modal component\n * @param options - Dialog accessibility options\n * @returns ARIA attributes object\n */\nexport function getDialogAriaAttributes(options: {\n labelledby?: string;\n describedby?: string;\n modal?: boolean;\n}): AriaAttributes {\n return {\n role: 'dialog',\n 'aria-labelledby': options.labelledby,\n 'aria-describedby': options.describedby,\n 'aria-modal': options.modal\n } as AriaAttributes;\n}\n\n/**\n * Generate ARIA attributes for a form input\n * @param options - Input accessibility options\n * @returns ARIA attributes object\n */\nexport function getInputAriaAttributes(options: {\n label?: string;\n labelledby?: string;\n describedby?: string;\n invalid?: boolean;\n required?: boolean;\n readonly?: boolean;\n disabled?: boolean;\n errorId?: string;\n helperId?: string;\n}): AriaAttributes {\n const attrs: AriaAttributes = {};\n\n if (options.label) {\n attrs['aria-label'] = options.label;\n }\n if (options.labelledby) {\n attrs['aria-labelledby'] = options.labelledby;\n }\n\n // Build aria-describedby from multiple sources\n const describedbyParts: string[] = [];\n if (options.describedby) {\n describedbyParts.push(options.describedby);\n }\n if (options.invalid && options.errorId) {\n describedbyParts.push(options.errorId);\n }\n if (options.helperId) {\n describedbyParts.push(options.helperId);\n }\n if (describedbyParts.length > 0) {\n attrs['aria-describedby'] = describedbyParts.join(' ');\n }\n\n if (options.invalid !== undefined) {\n attrs['aria-invalid'] = options.invalid;\n }\n if (options.required) {\n attrs['aria-required'] = true;\n }\n if (options.readonly) {\n attrs['aria-readonly'] = true;\n }\n if (options.disabled) {\n attrs['aria-disabled'] = true;\n }\n\n return attrs;\n}\n\n/**\n * Generate ARIA attributes for a progress bar\n * @param options - Progress accessibility options\n * @returns ARIA attributes object\n */\nexport function getProgressAriaAttributes(options: {\n value: number;\n min?: number;\n max?: number;\n label?: string;\n valueText?: string;\n}): AriaAttributes {\n return {\n role: 'progressbar',\n 'aria-valuenow': options.value,\n 'aria-valuemin': options.min ?? 0,\n 'aria-valuemax': options.max ?? 100,\n 'aria-label': options.label,\n 'aria-valuetext': options.valueText ?? `${options.value}%`\n };\n}\n\n/**\n * Generate ARIA attributes for a tab component\n * @param options - Tab accessibility options\n * @returns ARIA attributes for tab and tabpanel\n */\nexport function getTabAriaAttributes(options: {\n tabId: string;\n panelId: string;\n selected: boolean;\n disabled?: boolean;\n}): { tab: AriaAttributes; panel: AriaAttributes } {\n return {\n tab: {\n role: 'tab',\n 'aria-selected': options.selected,\n 'aria-controls': options.panelId,\n 'aria-disabled': options.disabled,\n tabindex: options.selected ? 0 : -1\n },\n panel: {\n role: 'tabpanel',\n 'aria-labelledby': options.tabId,\n 'aria-hidden': !options.selected,\n tabindex: 0\n }\n };\n}\n\n/**\n * Generate ARIA attributes for a listbox option\n * @param options - Option accessibility options\n * @returns ARIA attributes object\n */\nexport function getOptionAriaAttributes(options: {\n selected: boolean;\n disabled?: boolean;\n setsize?: number;\n posinset?: number;\n}): AriaAttributes {\n return {\n role: 'option',\n 'aria-selected': options.selected,\n 'aria-disabled': options.disabled,\n 'aria-setsize': options.setsize,\n 'aria-posinset': options.posinset\n };\n}\n\n/**\n * Generate linked IDs for label and input association\n * @param baseName - Base name for generating IDs\n * @returns Object with inputId, labelId, errorId, and helperId\n */\nexport function generateLinkedIds(baseName?: string): {\n inputId: string;\n labelId: string;\n errorId: string;\n helperId: string;\n} {\n const base = baseName || generateUniqueId('input');\n return {\n inputId: base,\n labelId: `${base}-label`,\n errorId: `${base}-error`,\n helperId: `${base}-helper`\n };\n}\n\n/**\n * Create a visually hidden element for screen readers\n * @returns CSS styles for visually hidden content\n */\nexport function getVisuallyHiddenStyles(): Record<string, string> {\n return {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: '0',\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: '0'\n };\n}\n\n/**\n * Check if the user has enabled reduced motion preference\n * @returns True if user prefers reduced motion\n */\nexport function prefersReducedMotion(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/**\n * Check if the user has enabled high contrast mode\n * @returns True if high contrast mode is enabled\n */\nexport function prefersHighContrast(): boolean {\n if (typeof window === 'undefined') return false;\n return window.matchMedia('(prefers-contrast: more)').matches;\n}\n\n/**\n * Announce a message to screen readers using aria-live regions\n * @param message - The message to announce\n * @param politeness - The urgency level (polite or assertive)\n */\nexport function announceToScreenReader(\n message: string,\n politeness: 'polite' | 'assertive' = 'polite'\n): void {\n if (typeof document === 'undefined') return;\n\n const announcement = document.createElement('div');\n announcement.setAttribute('role', 'status');\n announcement.setAttribute('aria-live', politeness);\n announcement.setAttribute('aria-atomic', 'true');\n Object.assign(announcement.style, getVisuallyHiddenStyles());\n\n document.body.appendChild(announcement);\n\n // Delay slightly to ensure screen readers pick up the change\n setTimeout(() => {\n announcement.textContent = message;\n }, 100);\n\n // Clean up after announcement is read\n setTimeout(() => {\n document.body.removeChild(announcement);\n }, 1000);\n}\n\n/**\n * Get the appropriate aria-current value for navigation items\n * @param isActive - Whether the item is active/current\n * @param type - The type of current indicator\n * @returns The aria-current value or undefined\n */\nexport function getAriaCurrent(\n isActive: boolean,\n type: 'page' | 'step' | 'location' | 'date' | 'time' = 'page'\n): AriaAttributes['aria-current'] {\n return isActive ? type : undefined;\n}\n","/**\n * Error handling utility functions for PECB UI Components\n * Provides standardized error handling patterns\n * @module utils/error\n */\n\n/**\n * Error severity levels\n */\nexport type ErrorSeverity = 'info' | 'warning' | 'error' | 'critical';\n\n/**\n * Error categories for classification\n */\nexport type ErrorCategory =\n | 'validation'\n | 'network'\n | 'authentication'\n | 'authorization'\n | 'configuration'\n | 'runtime'\n | 'unknown';\n\n/**\n * Standard error interface for PECB components\n */\nexport interface PecbError {\n /** Unique error code */\n code: string;\n /** Human-readable error message */\n message: string;\n /** Error severity level */\n severity: ErrorSeverity;\n /** Error category */\n category: ErrorCategory;\n /** Original error if wrapping another error */\n originalError?: Error;\n /** Additional context data */\n context?: Record<string, unknown>;\n /** Timestamp when error occurred */\n timestamp: Date;\n /** Suggested recovery action */\n recoveryAction?: string;\n /** Whether the error is recoverable */\n recoverable: boolean;\n}\n\n/**\n * Validation error details\n */\nexport interface ValidationError {\n /** Field name that failed validation */\n field: string;\n /** Validation rule that failed */\n rule: string;\n /** Error message */\n message: string;\n /** Expected value or format */\n expected?: string;\n /** Actual value received */\n actual?: unknown;\n}\n\n/**\n * Error factory options\n */\nexport interface ErrorOptions {\n code?: string;\n severity?: ErrorSeverity;\n category?: ErrorCategory;\n context?: Record<string, unknown>;\n recoveryAction?: string;\n recoverable?: boolean;\n originalError?: Error;\n}\n\n/**\n * Create a standardized PECB error\n * @param message - Error message\n * @param options - Additional error options\n * @returns A standardized PecbError object\n *\n * @example\n * const error = createError('Invalid input', {\n * code: 'VALIDATION_001',\n * category: 'validation',\n * severity: 'warning',\n * recoverable: true\n * });\n */\nexport function createError(message: string, options: ErrorOptions = {}): PecbError {\n return {\n code: options.code ?? 'PECB_ERROR',\n message,\n severity: options.severity ?? 'error',\n category: options.category ?? 'unknown',\n originalError: options.originalError,\n context: options.context,\n timestamp: new Date(),\n recoveryAction: options.recoveryAction,\n recoverable: options.recoverable ?? false\n };\n}\n\n/**\n * Create a validation error\n * @param field - Field name that failed validation\n * @param rule - Validation rule that failed\n * @param message - Error message\n * @returns A ValidationError object\n *\n * @example\n * const error = createValidationError('email', 'format', 'Invalid email format');\n */\nexport function createValidationError(\n field: string,\n rule: string,\n message: string,\n details?: { expected?: string; actual?: unknown }\n): ValidationError {\n return {\n field,\n rule,\n message,\n expected: details?.expected,\n actual: details?.actual\n };\n}\n\n/**\n * Wrap an unknown error in a PecbError\n * @param error - The error to wrap\n * @param options - Additional options\n * @returns A standardized PecbError\n *\n * @example\n * try {\n * await riskyOperation();\n * } catch (e) {\n * const error = wrapError(e, { category: 'network' });\n * handleError(error);\n * }\n */\nexport function wrapError(error: unknown, options: ErrorOptions = {}): PecbError {\n if (isPecbError(error)) {\n return error;\n }\n\n let message = 'An unknown error occurred';\n let originalError: Error | undefined;\n\n if (error instanceof Error) {\n message = error.message;\n originalError = error;\n } else if (typeof error === 'string') {\n message = error;\n } else if (error && typeof error === 'object' && 'message' in error) {\n message = String((error as { message: unknown }).message);\n }\n\n return createError(message, {\n ...options,\n originalError\n });\n}\n\n/**\n * Type guard to check if an object is a PecbError\n * @param error - The object to check\n * @returns True if the object is a PecbError\n */\nexport function isPecbError(error: unknown): error is PecbError {\n return (\n error !== null &&\n typeof error === 'object' &&\n 'code' in error &&\n 'message' in error &&\n 'severity' in error &&\n 'category' in error &&\n 'timestamp' in error\n );\n}\n\n/**\n * Type guard to check if an error is recoverable\n * @param error - The error to check\n * @returns True if the error is recoverable\n */\nexport function isRecoverableError(error: PecbError): boolean {\n return error.recoverable;\n}\n\n/**\n * Format an error for display to users\n * @param error - The error to format\n * @param includeCode - Whether to include the error code\n * @returns Formatted error message\n */\nexport function formatErrorMessage(error: PecbError, includeCode = false): string {\n if (includeCode) {\n return `[${error.code}] ${error.message}`;\n }\n return error.message;\n}\n\n/**\n * Format an error for logging\n * @param error - The error to format\n * @returns Formatted error string for logging\n */\nexport function formatErrorForLog(error: PecbError): string {\n const parts = [\n `[${error.timestamp.toISOString()}]`,\n `[${error.severity.toUpperCase()}]`,\n `[${error.code}]`,\n error.message\n ];\n\n if (error.context) {\n parts.push(`Context: ${JSON.stringify(error.context)}`);\n }\n\n if (error.originalError?.stack) {\n parts.push(`Stack: ${error.originalError.stack}`);\n }\n\n return parts.join(' ');\n}\n\n/**\n * Create a network error\n * @param message - Error message\n * @param statusCode - HTTP status code if applicable\n * @param originalError - Original error\n * @returns A network category PecbError\n */\nexport function createNetworkError(\n message: string,\n statusCode?: number,\n originalError?: Error\n): PecbError {\n return createError(message, {\n code: statusCode ? `NETWORK_${statusCode}` : 'NETWORK_ERROR',\n category: 'network',\n severity: 'error',\n context: statusCode ? { statusCode } : undefined,\n recoverable: true,\n recoveryAction: 'Please check your connection and try again',\n originalError\n });\n}\n\n/**\n * Create an authentication error\n * @param message - Error message\n * @param originalError - Original error\n * @returns An authentication category PecbError\n */\nexport function createAuthError(message: string, originalError?: Error): PecbError {\n return createError(message, {\n code: 'AUTH_ERROR',\n category: 'authentication',\n severity: 'error',\n recoverable: true,\n recoveryAction: 'Please sign in again',\n originalError\n });\n}\n\n/**\n * Create an authorization error\n * @param message - Error message\n * @param resource - The resource that access was denied to\n * @returns An authorization category PecbError\n */\nexport function createAuthorizationError(message: string, resource?: string): PecbError {\n return createError(message, {\n code: 'AUTHZ_ERROR',\n category: 'authorization',\n severity: 'warning',\n context: resource ? { resource } : undefined,\n recoverable: false,\n recoveryAction: 'Contact an administrator for access'\n });\n}\n\n/**\n * Create a configuration error\n * @param message - Error message\n * @param configKey - The configuration key that is invalid\n * @returns A configuration category PecbError\n */\nexport function createConfigError(message: string, configKey?: string): PecbError {\n return createError(message, {\n code: 'CONFIG_ERROR',\n category: 'configuration',\n severity: 'critical',\n context: configKey ? { configKey } : undefined,\n recoverable: false,\n recoveryAction: 'Check your configuration settings'\n });\n}\n\n/**\n * Error handler type\n */\nexport type ErrorHandler = (error: PecbError) => void;\n\n/**\n * Global error handler registry\n */\nconst errorHandlers: Map<ErrorCategory, ErrorHandler[]> = new Map();\n\n/**\n * Register an error handler for a category\n * @param category - The error category to handle\n * @param handler - The handler function\n * @returns Cleanup function to unregister\n */\nexport function registerErrorHandler(category: ErrorCategory, handler: ErrorHandler): () => void {\n const handlers = errorHandlers.get(category) ?? [];\n handlers.push(handler);\n errorHandlers.set(category, handlers);\n\n return () => {\n const currentHandlers = errorHandlers.get(category);\n if (currentHandlers) {\n const index = currentHandlers.indexOf(handler);\n if (index > -1) {\n currentHandlers.splice(index, 1);\n }\n }\n };\n}\n\n/**\n * Handle an error by invoking registered handlers\n * @param error - The error to handle\n */\nexport function handleError(error: PecbError): void {\n const handlers = errorHandlers.get(error.category) ?? [];\n const globalHandlers = errorHandlers.get('unknown') ?? [];\n\n [...handlers, ...globalHandlers].forEach(handler => {\n try {\n handler(error);\n } catch (e) {\n console.error('Error in error handler:', e);\n }\n });\n}\n\n/**\n * Try to execute an operation and return a result or error\n * @param operation - The operation to execute\n * @param errorOptions - Options for error wrapping\n * @returns A tuple of [result, null] or [null, error]\n */\nexport async function tryAsync<T>(\n operation: () => Promise<T>,\n errorOptions?: ErrorOptions\n): Promise<[T, null] | [null, PecbError]> {\n try {\n const result = await operation();\n return [result, null];\n } catch (e) {\n return [null, wrapError(e, errorOptions)];\n }\n}\n\n/**\n * Synchronous version of tryAsync\n * @param operation - The operation to execute\n * @param errorOptions - Options for error wrapping\n * @returns A tuple of [result, null] or [null, error]\n */\nexport function trySync<T>(\n operation: () => T,\n errorOptions?: ErrorOptions\n): [T, null] | [null, PecbError] {\n try {\n const result = operation();\n return [result, null];\n } catch (e) {\n return [null, wrapError(e, errorOptions)];\n }\n}\n","/*\n * Public API Surface of @pecb-ui/components\n *\n * This file defines the public API of the library.\n * Only exports from this file will be accessible to consumers.\n */\n\n// =============================================================================\n// MODULE\n// =============================================================================\nexport * from './lib/pecb-components.module';\n\n// =============================================================================\n// COMPONENTS\n// =============================================================================\nexport * from './lib/components/button/button.component';\nexport * from './lib/components/card/card.component';\nexport * from './lib/components/status/status.component';\nexport * from './lib/components/pagination/pagination.component';\nexport * from './lib/components/table/table.component';\nexport * from './lib/components/tab/tab.component';\nexport * from './lib/components/datepicker/datepicker.component';\nexport * from './lib/components/input/input.component';\nexport * from './lib/components/radio/radio.component';\nexport * from './lib/components/checkbox/checkbox.component';\nexport * from './lib/components/toggle/toggle.component';\nexport * from './lib/components/dropdown/dropdown.component';\nexport * from './lib/components/right-modal/right-modal.component';\nexport * from './lib/components/sidebar/sidebar.component';\nexport * from './lib/components/confirmation/confirmation.component';\nexport * from './lib/components/alert/alert.component';\n\n// =============================================================================\n// SERVICES\n// =============================================================================\nexport * from './lib/services/notification.service';\nexport * from './lib/services/theme.service';\nexport * from './lib/services/loading.service';\n\n// =============================================================================\n// SHARED TYPES\n// =============================================================================\nexport * from './lib/shared/types/common.types';\n\n// =============================================================================\n// SHARED INTERFACES\n// =============================================================================\nexport * from './lib/shared/interfaces/component.interfaces';\n\n// =============================================================================\n// SHARED UTILITIES\n// =============================================================================\n\n// String utilities\nexport {\n toKebabCase,\n toCamelCase,\n toPascalCase,\n toSnakeCase,\n capitalize,\n truncate,\n isBlank,\n isNotBlank,\n slugify,\n escapeHtml,\n stripHtml,\n getInitials,\n pluralize,\n formatCount\n} from './lib/shared/utils/string.utils';\n\n// DOM utilities\nexport {\n isBrowser,\n generateUniqueId,\n matchesSelector,\n closestElement,\n isElementVisible,\n getFocusableElements,\n trapFocus,\n scrollIntoView,\n getScrollParent,\n disableBodyScroll,\n copyToClipboard,\n hasClass,\n addClass,\n removeClass,\n toggleClass,\n getComputedStyleValue\n} from './lib/shared/utils/dom.utils';\n\n// Accessibility utilities\nexport {\n AriaLive,\n AriaRole,\n AriaAttributes,\n getButtonAriaAttributes,\n getDialogAriaAttributes,\n getInputAriaAttributes,\n getProgressAriaAttributes,\n getTabAriaAttributes,\n getOptionAriaAttributes,\n generateLinkedIds,\n getVisuallyHiddenStyles,\n prefersReducedMotion,\n prefersHighContrast,\n announceToScreenReader,\n getAriaCurrent\n} from './lib/shared/utils/accessibility.utils';\n\n// Error handling utilities\nexport {\n ErrorSeverity,\n ErrorCategory,\n PecbError,\n ValidationError,\n ErrorOptions,\n ErrorHandler,\n createError,\n createValidationError,\n wrapError,\n isPecbError,\n isRecoverableError,\n formatErrorMessage,\n formatErrorForLog,\n createNetworkError,\n createAuthError,\n createAuthorizationError,\n createConfigError,\n registerErrorHandler,\n handleError,\n tryAsync,\n trySync\n} from './lib/shared/utils/error.utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}
|