@pecb-ui/components 1.1.2 → 1.1.4

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.
Files changed (57) hide show
  1. package/README.md +556 -556
  2. package/fesm2022/pecb-ui-components.mjs +8087 -1942
  3. package/fesm2022/pecb-ui-components.mjs.map +1 -1
  4. package/index.d.ts +5661 -3
  5. package/package.json +6 -8
  6. package/src/lib/components/general/assets/banner-bg.png +0 -0
  7. package/esm2022/lib/components/button/button.component.mjs +0 -171
  8. package/esm2022/lib/components/card/card.component.mjs +0 -182
  9. package/esm2022/lib/components/checkbox/checkbox.component.mjs +0 -126
  10. package/esm2022/lib/components/datepicker/datepicker.component.mjs +0 -349
  11. package/esm2022/lib/components/dropdown/dropdown.component.mjs +0 -329
  12. package/esm2022/lib/components/input/input.component.mjs +0 -321
  13. package/esm2022/lib/components/pagination/pagination.component.mjs +0 -197
  14. package/esm2022/lib/components/radio/radio.component.mjs +0 -147
  15. package/esm2022/lib/components/right-modal/right-modal.component.mjs +0 -234
  16. package/esm2022/lib/components/sidebar/sidebar.component.mjs +0 -155
  17. package/esm2022/lib/components/status/status.component.mjs +0 -50
  18. package/esm2022/lib/components/tab/tab.component.mjs +0 -151
  19. package/esm2022/lib/components/table/table.component.mjs +0 -503
  20. package/esm2022/lib/components/toggle/toggle.component.mjs +0 -126
  21. package/esm2022/lib/pecb-components.module.mjs +0 -118
  22. package/esm2022/lib/services/loading.service.mjs +0 -182
  23. package/esm2022/lib/services/notification.service.mjs +0 -144
  24. package/esm2022/lib/services/theme.service.mjs +0 -232
  25. package/esm2022/lib/shared/interfaces/component.interfaces.mjs +0 -2
  26. package/esm2022/lib/shared/types/common.types.mjs +0 -6
  27. package/esm2022/lib/shared/utils/accessibility.utils.mjs +0 -223
  28. package/esm2022/lib/shared/utils/dom.utils.mjs +0 -240
  29. package/esm2022/lib/shared/utils/error.utils.mjs +0 -277
  30. package/esm2022/lib/shared/utils/string.utils.mjs +0 -204
  31. package/esm2022/pecb-ui-components.mjs +0 -5
  32. package/esm2022/public-api.mjs +0 -53
  33. package/lib/components/button/button.component.d.ts +0 -130
  34. package/lib/components/card/card.component.d.ts +0 -140
  35. package/lib/components/checkbox/checkbox.component.d.ts +0 -74
  36. package/lib/components/datepicker/datepicker.component.d.ts +0 -155
  37. package/lib/components/dropdown/dropdown.component.d.ts +0 -144
  38. package/lib/components/input/input.component.d.ts +0 -215
  39. package/lib/components/pagination/pagination.component.d.ts +0 -53
  40. package/lib/components/radio/radio.component.d.ts +0 -93
  41. package/lib/components/right-modal/right-modal.component.d.ts +0 -137
  42. package/lib/components/sidebar/sidebar.component.d.ts +0 -97
  43. package/lib/components/status/status.component.d.ts +0 -19
  44. package/lib/components/tab/tab.component.d.ts +0 -102
  45. package/lib/components/table/table.component.d.ts +0 -403
  46. package/lib/components/toggle/toggle.component.d.ts +0 -74
  47. package/lib/pecb-components.module.d.ts +0 -37
  48. package/lib/services/loading.service.d.ts +0 -129
  49. package/lib/services/notification.service.d.ts +0 -136
  50. package/lib/services/theme.service.d.ts +0 -142
  51. package/lib/shared/interfaces/component.interfaces.d.ts +0 -283
  52. package/lib/shared/types/common.types.d.ts +0 -86
  53. package/lib/shared/utils/accessibility.utils.d.ts +0 -167
  54. package/lib/shared/utils/dom.utils.d.ts +0 -108
  55. package/lib/shared/utils/error.utils.d.ts +0 -191
  56. package/lib/shared/utils/string.utils.d.ts +0 -144
  57. 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\">&times;</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>') // '&lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;'\r\n */\r\nexport function escapeHtml(str: string): string {\r\n const htmlEscapes: Record<string, string> = {\r\n '&': '&amp;',\r\n '<': '&lt;',\r\n '>': '&gt;',\r\n '\"': '&quot;',\r\n \"'\": '&#39;'\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/components/bottom-sheet/bottom-sheet.component.ts","../../../projects/ui-components/src/lib/components/bottom-sheet/bottom-sheet.component.html","../../../projects/ui-components/src/lib/components/accordion/accordion.component.ts","../../../projects/ui-components/src/lib/components/accordion/accordion-item.component.html","../../../projects/ui-components/src/lib/components/accordion/accordion-small.component.html","../../../projects/ui-components/src/lib/components/button-group/button-group.component.ts","../../../projects/ui-components/src/lib/components/button-group/button-group-item.component.html","../../../projects/ui-components/src/lib/components/tooltip/tooltip.component.ts","../../../projects/ui-components/src/lib/components/tooltip/tooltip.component.html","../../../projects/ui-components/src/lib/components/tooltip/tooltip.directive.ts","../../../projects/ui-components/src/lib/components/messaging/messaging.component.ts","../../../projects/ui-components/src/lib/components/messaging/message-item.component.html","../../../projects/ui-components/src/lib/components/messaging/message-bubble.component.html","../../../projects/ui-components/src/lib/components/fullscreen-modal/fullscreen-modal.component.ts","../../../projects/ui-components/src/lib/components/fullscreen-modal/fullscreen-modal.component.html","../../../projects/ui-components/src/lib/components/stepper/stepper.component.ts","../../../projects/ui-components/src/lib/components/stepper/stepper.component.html","../../../projects/ui-components/src/lib/components/grid/grid.component.ts","../../../projects/ui-components/src/lib/components/grid/grid.component.html","../../../projects/ui-components/src/lib/components/dashboard-grid/dashboard-grid.component.ts","../../../projects/ui-components/src/lib/components/dashboard-grid/dashboard-grid.component.html","../../../projects/ui-components/src/lib/components/progress/progress.component.ts","../../../projects/ui-components/src/lib/components/code-input/code-input.component.ts","../../../projects/ui-components/src/lib/components/code-input/code-input.component.html","../../../projects/ui-components/src/lib/components/shadow/shadow.directive.ts","../../../projects/ui-components/src/lib/components/divider/divider.component.ts","../../../projects/ui-components/src/lib/components/divider/divider.component.html","../../../projects/ui-components/src/lib/components/code-snippet/code-snippet.component.ts","../../../projects/ui-components/src/lib/components/code-snippet/code-snippet.component.html","../../../projects/ui-components/src/lib/components/icon/icon-registry.ts","../../../projects/ui-components/src/lib/components/breadcrumbs/breadcrumbs.component.ts","../../../projects/ui-components/src/lib/components/breadcrumbs/breadcrumbs.component.html","../../../projects/ui-components/src/lib/components/profile/profile.component.ts","../../../projects/ui-components/src/lib/components/profile/profile.component.html","../../../projects/ui-components/src/lib/components/header/header.component.ts","../../../projects/ui-components/src/lib/components/virtual-table/virtual-table.component.ts","../../../projects/ui-components/src/lib/components/virtual-table/virtual-table.component.html","../../../projects/ui-components/src/lib/components/general/general.component.ts","../../../projects/ui-components/src/lib/components/general/general.component.html","../../../projects/ui-components/src/lib/components/project-layout/project-layout.component.ts","../../../projects/ui-components/src/lib/components/project-layout/project-layout.component.html","../../../projects/ui-components/src/lib/components/hierarchical-table/hierarchical-table.component.ts","../../../projects/ui-components/src/lib/components/hierarchical-table/hierarchical-table.component.html","../../../projects/ui-components/src/lib/components/anchor/anchor.component.ts","../../../projects/ui-components/src/lib/components/anchor/anchor.component.html","../../../projects/ui-components/src/lib/components/back-to-top/back-to-top.component.ts","../../../projects/ui-components/src/lib/components/back-to-top/back-to-top.component.html","../../../projects/ui-components/src/lib/components/expandable-row-table/expandable-row-table.component.ts","../../../projects/ui-components/src/lib/components/expandable-row-table/expandable-row-table.component.html","../../../projects/ui-components/src/lib/components/badge/badge.component.ts","../../../projects/ui-components/src/lib/components/badge/badge.component.html","../../../projects/ui-components/src/lib/components/affix/affix.component.ts","../../../projects/ui-components/src/lib/components/affix/affix.component.html","../../../projects/ui-components/src/lib/components/language-dropdown/language-dropdown.component.ts","../../../projects/ui-components/src/lib/components/language-dropdown/language-dropdown.component.html","../../../projects/ui-components/src/lib/components/empty-state/empty-state.component.ts","../../../projects/ui-components/src/lib/components/empty-state/empty-state.component.html","../../../projects/ui-components/src/lib/components/testimonial/testimonial.component.ts","../../../projects/ui-components/src/lib/components/testimonial/testimonial.component.html","../../../projects/ui-components/src/lib/components/other-elements/other-elements.component.ts","../../../projects/ui-components/src/lib/components/filter-columns/filter-columns.component.ts","../../../projects/ui-components/src/lib/components/filter-columns/filter-columns.component.html","../../../projects/ui-components/src/lib/components/file-upload/file-upload.component.ts","../../../projects/ui-components/src/lib/components/file-upload/file-upload.component.html","../../../projects/ui-components/src/lib/components/toolbar-bar/toolbar-bar.component.ts","../../../projects/ui-components/src/lib/components/toolbar-bar/toolbar-bar.component.html","../../../projects/ui-components/src/lib/components/notes-panel/notes-panel.component.ts","../../../projects/ui-components/src/lib/components/notes-panel/notes-panel.component.html","../../../projects/ui-components/src/lib/components/text-form-field/text-form-field.component.ts","../../../projects/ui-components/src/lib/components/text-form-field/text-form-field.component.html","../../../projects/ui-components/src/lib/components/result-page/result-page.component.ts","../../../projects/ui-components/src/lib/components/result-page/result-page.component.html","../../../projects/ui-components/src/lib/components/tour/tour.component.ts","../../../projects/ui-components/src/lib/components/tour/tour.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/components/metrics-card/metrics-card.component.ts","../../../projects/ui-components/src/lib/components/metrics-card/metrics-card.component.html","../../../projects/ui-components/src/lib/components/float-button/float-button.component.ts","../../../projects/ui-components/src/lib/components/float-button/float-button.component.html","../../../projects/ui-components/src/lib/components/skeleton/skeleton.component.ts","../../../projects/ui-components/src/lib/components/skeleton/skeleton.component.html","../../../projects/ui-components/src/lib/components/color-palette/color-palette.component.ts","../../../projects/ui-components/src/lib/components/color-palette/color-palette.component.html","../../../projects/ui-components/src/lib/components/profile/profile-group.component.ts","../../../projects/ui-components/src/lib/components/profile/profile-group.component.html","../../../projects/ui-components/src/lib/components/typography/typography.component.ts","../../../projects/ui-components/src/lib/components/typography/typography.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/lib/components/icon/icon.component.ts","../../../projects/ui-components/src/lib/components/icon/icon.component.html","../../../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=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4.5 6.75L9 11.25L13.5 6.75\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\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 || child.expanded) ? '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 model,\n effect,\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 OnDestroy, AfterViewInit {\n id = input(generateUniqueId('confirmation'));\n /**\n * Whether the dialog is visible. Manages its own state internally —\n * no consumer binding required. Supports [(isOpen)] for controlled mode.\n */\n isOpen = model(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 constructor() {\n effect(() => {\n if (this.isOpen()) {\n this.onOpen();\n } else {\n this.cleanup();\n }\n });\n }\n\n ngAfterViewInit(): void {\n if (this.isOpen()) {\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.isOpen.set(false);\n this.closed.emit();\n }\n\n private onOpen(): void {\n this.previousActiveElement = document.activeElement;\n this.cleanupBodyScroll = disableBodyScroll();\n this.setupFocusTrap();\n }\n\n private setupFocusTrap(): void {\n if (this.dialogPanel?.nativeElement && !this.cleanupFocusTrap) {\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 <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=\"#FFF4E5\"/>\n <circle cx=\"32.5303\" cy=\"32.5281\" r=\"18.989\" fill=\"white\"/>\n <path d=\"M32.0012 9.84668C44.2362 9.84668 54.1543 19.765 54.1545 32C54.1545 44.2352 44.2364 54.1543 32.0012 54.1543C19.766 54.1543 9.8479 44.2352 9.8479 32C9.84815 19.765 19.7662 9.84668 32.0012 9.84668ZM32.0823 40.2266C30.0029 40.2266 28.3108 41.9187 28.3108 43.998C28.5007 48.9935 35.6636 48.9922 35.8528 43.998C35.8528 41.9188 34.1615 40.2266 32.0823 40.2266ZM35.7727 18.9727C33.9014 16.6513 30.1067 16.6501 28.2346 18.9727C27.2974 20.0886 26.9044 21.5514 27.1555 22.9863C27.9048 27.2673 28.9622 33.3099 29.4368 36.0234C29.9687 38.8793 34.0404 38.8785 34.5715 36.0234L36.8528 22.9863C37.1039 21.5514 36.7101 20.0887 35.7727 18.9727Z\" fill=\"#FF9C4A\"/>\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 <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=\"#FDECEA\"/>\n <circle cx=\"31.8243\" cy=\"31.8243\" r=\"18.2857\" fill=\"white\"/>\n <path d=\"M47.6652 16.3349C56.3168 24.9865 56.3168 39.0136 47.6652 47.6652C39.0136 56.3168 24.9865 56.3168 16.3349 47.6652C7.68329 39.0136 7.68329 24.9865 16.3349 16.3349C24.9865 7.68329 39.0136 7.68329 47.6652 16.3349ZM40.2677 22.862C39.3666 21.9609 37.9053 21.9609 37.0042 22.862L31.4561 28.4101C31.2759 28.5903 30.9836 28.5903 30.8034 28.4101L25.2553 22.862C24.3542 21.9609 22.8929 21.9609 21.9918 22.862C21.0906 23.7632 21.0906 25.2245 21.9918 26.1256L27.5398 31.6737C27.7201 31.8539 27.7201 32.1462 27.5398 32.3264L21.9918 37.8745C21.0906 38.7756 21.0906 40.2369 21.9918 41.138C22.8929 42.0392 24.3542 42.0392 25.2553 41.138L30.8034 35.59C30.9836 35.4097 31.2759 35.4097 31.4561 35.59L37.0042 41.138C37.9053 42.0392 39.3666 42.0392 40.2677 41.138C41.1689 40.2369 41.1689 38.7756 40.2677 37.8745L34.7197 32.3264C34.5394 32.1462 34.5394 31.8539 34.7197 31.6737L40.2677 26.1256C41.1689 25.2245 41.1689 23.7632 40.2677 22.862Z\" fill=\"#FF606F\"/>\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 <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=\"#E6F0FA\"/>\n <circle cx=\"32.5283\" cy=\"32.5281\" r=\"18.989\" fill=\"white\"/>\n <path d=\"M31.9995 9.84668C44.2348 9.84668 54.1534 19.7653 54.1534 32.0005C54.1534 44.2358 44.2348 54.1544 31.9995 54.1544C19.7643 54.1544 9.8457 44.2358 9.8457 32.0005C9.8457 19.7653 19.7643 9.84668 31.9995 9.84668ZM28.3072 26.0943C26.8347 26.0945 25.8457 27.0832 25.8457 28.5558C25.8459 30.0282 26.8349 31.0171 28.3072 31.0174H31.758L28.3072 42.5835C28.0603 43.8088 28.3077 45.2811 29.0488 46.2698C29.7903 47.4952 31.0265 47.9896 32.252 47.9897H36.187C37.67 47.9896 38.6486 47.0112 38.6486 45.5282C38.6484 44.0558 37.6595 43.0668 36.187 43.0666H33.2303L36.681 31.5005C36.9281 30.2751 36.6808 28.8028 35.9395 27.8142C35.1979 26.5886 33.9619 26.0943 32.7363 26.0943H28.3072ZM33.4779 16.0005C31.4387 16.0006 29.7904 17.6488 29.7904 19.688C29.7906 21.7271 31.4388 23.3743 33.4779 23.3743C35.5171 23.3743 37.1652 21.7271 37.1654 19.688C37.1654 17.6488 35.5172 16.0005 33.4779 16.0005Z\" fill=\"#5EACFF\"/>\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 {\n Component,\n input,\n output,\n model,\n effect,\n OnDestroy,\n ChangeDetectionStrategy,\n ElementRef,\n ViewChild,\n AfterViewInit\n} from '@angular/core';\nimport { generateUniqueId, trapFocus, disableBodyScroll } from '../../shared/utils/dom.utils';\n\n@Component({\n selector: 'pecb-bottom-sheet',\n imports: [],\n templateUrl: './bottom-sheet.component.html',\n styleUrls: ['./bottom-sheet.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BottomSheetComponent implements OnDestroy, AfterViewInit {\n id = input(generateUniqueId('bottom-sheet'));\n /**\n * Whether the sheet is visible. Manages its own state internally —\n * no consumer binding required. Supports [(isOpen)] for controlled mode.\n */\n isOpen = model(false);\n title = input('');\n primaryText = input('Primary Button');\n secondaryText = input('Secondary Button');\n showCloseButton = input(true);\n closeOnBackdropClick = input(true);\n closeOnEscape = input(true);\n\n primaryClicked = output<void>();\n secondaryClicked = output<void>();\n closed = output<void>();\n\n @ViewChild('sheetPanel') sheetPanel!: ElementRef<HTMLElement>;\n\n private cleanupFocusTrap: (() => void) | null = null;\n private cleanupBodyScroll: (() => void) | null = null;\n private previousActiveElement: Element | null = null;\n\n constructor() {\n effect(() => {\n if (this.isOpen()) {\n this.onOpen();\n } else {\n this.cleanup();\n }\n });\n }\n\n get titleId(): string {\n return `${this.id()}-title`;\n }\n\n ngAfterViewInit(): void {\n if (this.isOpen()) {\n this.setupFocusTrap();\n }\n }\n\n ngOnDestroy(): void {\n this.cleanup();\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.isOpen.set(false);\n this.closed.emit();\n }\n\n private onOpen(): void {\n this.previousActiveElement = document.activeElement;\n this.cleanupBodyScroll = disableBodyScroll();\n this.setupFocusTrap();\n }\n\n private setupFocusTrap(): void {\n if (this.sheetPanel?.nativeElement && !this.cleanupFocusTrap) {\n this.cleanupFocusTrap = trapFocus(this.sheetPanel.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 class=\"pecb-bottom-sheet\"\n [id]=\"id()\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-labelledby]=\"titleId\"\n (click)=\"onBackdropClick($event)\"\n (keydown)=\"onKeydown($event)\"\n >\n <div #sheetPanel class=\"pecb-bottom-sheet__panel\" tabindex=\"-1\">\n\n <div class=\"pecb-bottom-sheet__header\">\n <h3 [id]=\"titleId\" class=\"pecb-bottom-sheet__title\">{{ title() }}</h3>\n @if (showCloseButton()) {\n <button\n type=\"button\"\n class=\"pecb-bottom-sheet__close-btn\"\n aria-label=\"Close\"\n (click)=\"close()\"\n >\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6L18 18\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n </div>\n\n <hr class=\"pecb-bottom-sheet__divider\" />\n\n <div class=\"pecb-bottom-sheet__body\">\n <ng-content></ng-content>\n </div>\n\n <hr class=\"pecb-bottom-sheet__divider\" />\n\n <div class=\"pecb-bottom-sheet__footer\">\n <button type=\"button\" class=\"pecb-bottom-sheet__btn pecb-bottom-sheet__btn--primary\" (click)=\"primaryClicked.emit()\">\n {{ primaryText() }}\n </button>\n <button type=\"button\" class=\"pecb-bottom-sheet__btn pecb-bottom-sheet__btn--secondary\" (click)=\"secondaryClicked.emit()\">\n {{ secondaryText() }}\n </button>\n </div>\n\n </div>\n </div>\n}\n","import {\n Component,\n input,\n output,\n model,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ToggleComponent } from '../toggle/toggle.component';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type QuizType =\n | 'Multiple Choice'\n | 'True/False'\n | 'Scenario'\n | 'Essay'\n | string;\n\nexport type AccordionVariant = 'basic' | 'actions';\n\n// ─── AccordionItemComponent ───────────────────────────────────────────────────\n\n/**\n * Large accordion item — used for exam questions / evaluation sections.\n *\n * Works standalone with no consumer state management needed:\n * @example\n * <pecb-accordion-item [number]=\"1\" title=\"Question title\">\n * Body content goes here.\n * </pecb-accordion-item>\n *\n * Supports two-way binding for controlled state:\n * @example\n * <pecb-accordion-item [(isOpen)]=\"expanded\" (editClicked)=\"onEdit()\" (deleteClicked)=\"onDelete()\">\n * Body content goes here.\n * </pecb-accordion-item>\n */\n@Component({\n selector: 'pecb-accordion-item',\n imports: [],\n templateUrl: './accordion-item.component.html',\n styleUrls: ['./accordion.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AccordionItemComponent {\n /** Variant: 'basic' keeps full radius when open, 'actions' changes radius and adds body background */\n variant = input<AccordionVariant>('basic');\n /** Number displayed in the left badge */\n number = input(1);\n /** Show/hide the number badge */\n showNumber = input(true);\n /** Small subtitle text (12px, muted colour) */\n label = input('');\n /** Primary title text (13px, medium weight) */\n title = input('');\n /** Quiz type badge — 'Multiple Choice' | 'True/False' | 'Scenario' | 'Essay'. Leave empty to hide. */\n quizType = input<QuizType>('');\n /**\n * Whether the item is expanded. Manages its own state internally —\n * no consumer binding required. Supports [(isOpen)] for controlled mode.\n */\n isOpen = model(false);\n /** Show/hide the move icon button */\n showMove = input(true);\n /** Show/hide the edit icon button */\n showEdit = input(true);\n /** Show/hide the expand/collapse chevron button */\n showToggleBtn = input(true);\n /** Show/hide the delete icon button */\n showDelete = input(true);\n\n moveClicked = output<void>();\n editClicked = output<void>();\n deleteClicked = output<void>();\n\n toggle(): void {\n this.isOpen.set(!this.isOpen());\n }\n}\n\n// ─── AccordionSmallComponent ──────────────────────────────────────────────────\n\n/**\n * Small accordion item — used for language / domain list rows.\n *\n * Works standalone with no consumer state management needed:\n * @example\n * <pecb-accordion-small label=\"English\" parentId=\"519456\">\n * <span pecbLeading>🇬🇧</span>\n * Body content here.\n * </pecb-accordion-small>\n *\n * Supports two-way binding for controlled state:\n * @example\n * <pecb-accordion-small label=\"English\" [(isActive)]=\"active\">\n * <span pecbLeading>🇬🇧</span>\n * </pecb-accordion-small>\n */\n@Component({\n selector: 'pecb-accordion-small',\n imports: [ToggleComponent, FormsModule],\n templateUrl: './accordion-small.component.html',\n styleUrls: ['./accordion.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AccordionSmallComponent {\n /** Main label text */\n label = input('');\n /** Optional metadata value displayed next to the prefix — leave empty to hide */\n parentId = input('');\n /** Prefix text shown before the parentId value */\n metaLabel = input('Parent ID');\n /**\n * Whether the item is expanded. Manages its own state internally —\n * no consumer binding required. Supports [(isActive)] for controlled mode.\n */\n isActive = model(false);\n /** Show/hide the toggle switch */\n showToggle = input(true);\n /** Two-way bindable toggle switch value. Supports [(toggleValue)]. */\n toggleValue = model(false);\n /** Show/hide the download icon */\n showDownload = input(true);\n /** Show/hide the save icon */\n showSave = input(true);\n /** Show/hide the edit icon */\n showEdit = input(true);\n /** Show/hide the delete icon */\n showDelete = input(true);\n /** Show/hide the move icon */\n showMove = input(true);\n\n downloadClicked = output<void>();\n saveClicked = output<void>();\n editClicked = output<void>();\n deleteClicked = output<void>();\n moveClicked = output<void>();\n\n onHeaderClick(): void {\n this.isActive.set(!this.isActive());\n }\n\n /** ngModel bridge for the toggle */\n get toggleChecked(): boolean {\n return this.toggleValue();\n }\n set toggleChecked(value: boolean) {\n this.toggleValue.set(value);\n }\n}\n","<div\n class=\"pecb-accordion-item\"\n [class.pecb-accordion-item--open]=\"isOpen()\"\n [class.pecb-accordion-item--actions]=\"variant() === 'actions'\"\n>\n <!-- Header row -->\n <div class=\"pecb-accordion-item__header\" role=\"button\" [attr.aria-expanded]=\"isOpen()\" tabindex=\"0\" (click)=\"toggle()\" (keydown.enter)=\"toggle()\" (keydown.space)=\"toggle()\">\n @if (showNumber()) {\n <div class=\"pecb-accordion-item__number\" aria-hidden=\"true\">{{ number() }}</div>\n }\n\n <div class=\"pecb-accordion-item__content\">\n @if (quizType()) {\n @switch (quizType()) {\n @case ('Multiple Choice') {\n <div class=\"pecb-accordion-item__badge pecb-accordion-item__badge--multiple-choice\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M7.93331 4.59995L4.95018 7.2666L3.93331 6.35762M11.2666 2.59996L11.2666 9.26665C11.2666 10.3712 10.3712 11.2666 9.26664 11.2666H2.59998C1.49541 11.2666 0.599976 10.3712 0.599976 9.26665V2.59996C0.599976 1.4954 1.49541 0.599976 2.59998 0.599976H9.26664C10.3712 0.599976 11.2666 1.4954 11.2666 2.59996Z\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span>Multiple Choice</span>\n </div>\n }\n @case ('True/False') {\n <div class=\"pecb-accordion-item__badge pecb-accordion-item__badge--true-false\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5.16665 5.16669L10.8333 5.16669C12.3981 5.16669 13.6666 6.43521 13.6666 8.00002C13.6666 9.56483 12.3981 10.8334 10.8333 10.8334L5.16665 10.8334M5.16665 5.16669C3.60184 5.16669 2.33331 6.43521 2.33331 8.00002C2.33331 9.56483 3.60184 10.8334 5.16665 10.8334M5.16665 5.16669C6.73145 5.16669 7.99998 6.43521 7.99998 8.00002C7.99998 9.56483 6.73145 10.8334 5.16665 10.8334\" stroke=\"currentColor\" stroke-width=\"1.2\"/>\n </svg>\n <span>True/False</span>\n </div>\n }\n @case ('Essay') {\n <div class=\"pecb-accordion-item__badge pecb-accordion-item__badge--essay\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M10.0001 1.59998V3.99998C10.0001 4.4418 10.3583 4.79998 10.8001 4.79998H13.2001M5.60012 4.79998H7.20012M5.60012 7.19997H10.4001M5.60012 9.59997H10.4001M12.0001 2.79998C11.6441 2.4814 11.2746 2.10356 11.0413 1.85816C10.8861 1.69487 10.6717 1.59998 10.4464 1.59998H4.39993C3.51628 1.59998 2.79993 2.31631 2.79993 3.19997L2.79987 12.7999C2.79986 13.6836 3.5162 14.3999 4.39986 14.3999L11.5999 14.4C12.4835 14.4 13.1999 13.6837 13.1999 12.8L13.2001 4.31853C13.2001 4.11397 13.1221 3.91733 12.9801 3.77006C12.7176 3.49774 12.2792 3.04965 12.0001 2.79998Z\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span>Essay</span>\n </div>\n }\n @case ('Scenario') {\n <div class=\"pecb-accordion-item__badge pecb-accordion-item__badge--scenario\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5.09998 3.22498L3.22498 3.22498M5.09998 5.47498L3.22498 5.47498M9.97498 3.22498H8.09998M9.97498 5.47498L8.09998 5.47498M5.09998 7.72498H3.22498M5.09998 9.97498H3.22498M0.599976 2.84998L0.599976 10.35C0.599976 11.5926 1.60733 12.6 2.84998 12.6C4.09262 12.6 9.10733 12.6 10.35 12.6C11.5926 12.6 12.6 11.5926 12.6 10.35V2.84998C12.6 1.60733 11.5926 0.599976 10.35 0.599976L2.84998 0.599976C1.60734 0.599976 0.599976 1.60733 0.599976 2.84998Z\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span>Scenario</span>\n </div>\n }\n @default {\n <div class=\"pecb-accordion-item__badge pecb-accordion-item__badge--multiple-choice\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M7.93331 4.59995L4.95018 7.2666L3.93331 6.35762M11.2666 2.59996L11.2666 9.26665C11.2666 10.3712 10.3712 11.2666 9.26664 11.2666H2.59998C1.49541 11.2666 0.599976 10.3712 0.599976 9.26665V2.59996C0.599976 1.4954 1.49541 0.599976 2.59998 0.599976H9.26664C10.3712 0.599976 11.2666 1.4954 11.2666 2.59996Z\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span>{{ quizType() }}</span>\n </div>\n }\n }\n }\n @if (label()) {\n <p class=\"pecb-accordion-item__label\">{{ label() }}</p>\n }\n @if (title()) {\n <p class=\"pecb-accordion-item__title\">{{ title() }}</p>\n }\n </div>\n\n <div class=\"pecb-accordion-item__actions\" (click)=\"$event.stopPropagation()\">\n @if (showMove()) {\n <button\n type=\"button\"\n class=\"pecb-accordion-item__action-btn\"\n aria-label=\"Move\"\n (click)=\"moveClicked.emit()\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M3 12h18M3 6h18M3 18h18\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n\n @if (showEdit()) {\n <button\n type=\"button\"\n class=\"pecb-accordion-item__action-btn\"\n aria-label=\"Edit\"\n (click)=\"editClicked.emit()\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n\n @if (showToggleBtn()) {\n <button\n type=\"button\"\n class=\"pecb-accordion-item__action-btn\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-label=\"Toggle expand\"\n (click)=\"toggle()\"\n >\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n class=\"pecb-accordion-item__chevron\"\n [class.pecb-accordion-item__chevron--up]=\"isOpen()\"\n >\n <polyline points=\"6 9 12 15 18 9\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n\n @if (showDelete()) {\n <button\n type=\"button\"\n class=\"pecb-accordion-item__action-btn pecb-accordion-item__action-btn--danger\"\n aria-label=\"Delete\"\n (click)=\"deleteClicked.emit()\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M3 6h18M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2m3 0v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6h14\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n </div>\n </div>\n\n <!-- Body panel — animated via CSS grid -->\n <div class=\"pecb-accordion-item__body-wrap\" [attr.aria-hidden]=\"!isOpen()\">\n <div class=\"pecb-accordion-item__body\">\n <div class=\"pecb-accordion-item__body-inner\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</div>\n","<div\n class=\"pecb-accordion-small\"\n [class.pecb-accordion-small--active]=\"isActive()\"\n>\n <!-- Header row -->\n <div class=\"pecb-accordion-small__header\">\n <div class=\"pecb-accordion-small__main\" (click)=\"onHeaderClick()\" role=\"button\" [attr.aria-expanded]=\"isActive()\" tabindex=\"0\" (keydown.enter)=\"onHeaderClick()\" (keydown.space)=\"onHeaderClick()\">\n <ng-content select=\"[pecbLeading]\"></ng-content>\n <span class=\"pecb-accordion-small__label\">{{ label() }}</span>\n </div>\n\n <div class=\"pecb-accordion-small__actions\">\n @if (parentId()) {\n <span class=\"pecb-accordion-small__parent-id\">{{ metaLabel() }}: {{ parentId() }}</span>\n }\n\n @if (showToggle()) {\n <pecb-toggle [(ngModel)]=\"toggleChecked\"></pecb-toggle>\n }\n\n @if (showDownload()) {\n <button\n type=\"button\"\n class=\"pecb-accordion-small__action-btn\"\n aria-label=\"Download\"\n (click)=\"downloadClicked.emit()\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"7 10 12 15 17 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n\n @if (showSave()) {\n <button\n type=\"button\"\n class=\"pecb-accordion-small__action-btn\"\n aria-label=\"Save\"\n (click)=\"saveClicked.emit()\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"17 21 17 13 7 13 7 21\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <polyline points=\"7 3 7 8 15 8\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n\n @if (showEdit()) {\n <button\n type=\"button\"\n class=\"pecb-accordion-small__action-btn\"\n aria-label=\"Edit\"\n (click)=\"editClicked.emit()\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n\n @if (showDelete()) {\n <button\n type=\"button\"\n class=\"pecb-accordion-small__action-btn pecb-accordion-small__action-btn--danger\"\n aria-label=\"Delete\"\n (click)=\"deleteClicked.emit()\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M18 6L6 18M6 6l12 12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n\n @if (showMove()) {\n <button\n type=\"button\"\n class=\"pecb-accordion-small__action-btn\"\n aria-label=\"Move\"\n (click)=\"moveClicked.emit()\"\n >\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M3 12h18M3 6h18M3 18h18\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n </div>\n </div>\n\n <!-- Body panel — animated via CSS grid -->\n <div class=\"pecb-accordion-small__body-wrap\" [attr.aria-hidden]=\"!isActive()\">\n <div class=\"pecb-accordion-small__body\">\n <div class=\"pecb-accordion-small__body-inner\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</div>\n","import {\n Component,\n inject,\n computed,\n input,\n output,\n model,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nexport type ButtonGroupItemPosition = 'first' | 'middle' | 'last' | 'more';\nexport type ButtonGroupIconMode = 'both' | 'leading' | 'trailing' | 'none';\n\n@Component({\n selector: 'pecb-button-group-item',\n imports: [],\n templateUrl: './button-group-item.component.html',\n styleUrls: ['./button-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ButtonGroupItemComponent {\n private sanitizer = inject(DomSanitizer);\n\n label = input('Button');\n position = input<ButtonGroupItemPosition>('middle');\n /** Custom SVG string for the leading icon. When set, overrides the default chevron. */\n leadingIconSvg = input('');\n /** Custom SVG string for the trailing icon. When set, overrides the default chevron. */\n trailingIconSvg = input('');\n\n safeLeadingIconSvg = computed(() => this.sanitizer.bypassSecurityTrustHtml(this.leadingIconSvg()));\n safeTrailingIconSvg = computed(() => this.sanitizer.bypassSecurityTrustHtml(this.trailingIconSvg()));\n /**\n * Whether this item is selected/active. Manages its own state internally —\n * no consumer binding required. Supports [(selected)] for controlled mode.\n */\n selected = model(false);\n disabled = input(false);\n iconMode = input<ButtonGroupIconMode>('none');\n\n clicked = output<void>();\n\n onClick(): void {\n if (!this.disabled()) {\n this.selected.set(!this.selected());\n this.clicked.emit();\n }\n }\n\n get hostClasses(): string {\n return [\n 'pecb-button-group-item',\n `pecb-button-group-item--${this.position()}`,\n this.selected() ? 'pecb-button-group-item--selected' : '',\n this.disabled() ? 'pecb-button-group-item--disabled' : '',\n ].filter(Boolean).join(' ');\n }\n}\n\n@Component({\n selector: 'pecb-button-group',\n imports: [],\n template: `\n <div class=\"pecb-button-group\" role=\"group\" [attr.aria-label]=\"ariaLabel() || null\">\n <ng-content></ng-content>\n </div>\n `,\n styleUrls: ['./button-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ButtonGroupComponent {\n ariaLabel = input<string | undefined>(undefined);\n}\n","<button\n type=\"button\"\n [class]=\"hostClasses\"\n [disabled]=\"disabled()\"\n [attr.aria-pressed]=\"selected()\"\n (click)=\"onClick()\"\n>\n @if (iconMode() === 'both' || iconMode() === 'leading') {\n @if (leadingIconSvg()) {\n <span class=\"pecb-button-group-item__icon\" [innerHTML]=\"safeLeadingIconSvg()\" aria-hidden=\"true\"></span>\n } @else {\n <svg\n class=\"pecb-button-group-item__icon\"\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path d=\"M12.5 15L7.5 10L12.5 5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n }\n\n <span class=\"pecb-button-group-item__label\">{{ label() }}</span>\n\n @if (iconMode() === 'both' || iconMode() === 'trailing') {\n @if (trailingIconSvg()) {\n <span class=\"pecb-button-group-item__icon\" [innerHTML]=\"safeTrailingIconSvg()\" aria-hidden=\"true\"></span>\n } @else {\n <svg\n class=\"pecb-button-group-item__icon\"\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <path d=\"M7.5 5L12.5 10L7.5 15\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n }\n</button>\n","import {\n Component,\n input,\n output,\n model,\n ChangeDetectionStrategy\n} from '@angular/core';\n\nexport type TooltipPointerPosition =\n | 'top-left' | 'top-center' | 'top-right'\n | 'bottom-left' | 'bottom-center' | 'bottom-right'\n | 'left-top' | 'left-center' | 'left-bottom'\n | 'right-top' | 'right-center' | 'right-bottom';\n\nexport type TooltipTheme = 'dark' | 'light';\n\n@Component({\n selector: 'pecb-tooltip',\n imports: [],\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TooltipComponent {\n title = input('');\n message = input('');\n pointerPosition = input<TooltipPointerPosition>('top-left');\n theme = input<TooltipTheme>('dark');\n primaryCta = input<string | undefined>(undefined);\n secondaryCta = input<string | undefined>(undefined);\n showClose = input(true);\n /**\n * Whether the tooltip is visible. Manages its own state internally —\n * no consumer binding required. Supports [(visible)] for controlled mode.\n */\n visible = model(true);\n\n closed = output<void>();\n primaryCtaClick = output<void>();\n secondaryCtaClick = output<void>();\n\n close(): void {\n this.visible.set(false);\n this.closed.emit();\n }\n\n get hasButtons(): boolean {\n return !!(this.primaryCta() || this.secondaryCta());\n }\n\n get pointerSide(): 'top' | 'bottom' | 'left' | 'right' {\n return this.pointerPosition().split('-')[0] as 'top' | 'bottom' | 'left' | 'right';\n }\n\n /** SVG fill for the outer (border) triangle layer */\n get ptrBorderFill(): string {\n return this.theme() === 'light' ? '#ececec' : 'none';\n }\n\n /** SVG fill for the inner (body) triangle layer */\n get ptrBodyFill(): string {\n return this.theme() === 'light' ? '#ffffff' : '#313131';\n }\n\n get hostClasses(): string {\n return [\n 'pecb-tooltip',\n `pecb-tooltip--${this.theme()}`,\n `pecb-tooltip--${this.pointerPosition()}`\n ].join(' ');\n }\n}\n","@if (visible()) {\n <div [class]=\"hostClasses\">\n\n <!-- ── Pointer TOP (above container) ──────────────────────────────── -->\n @if (pointerSide === 'top') {\n <div class=\"pecb-tooltip__pointer pecb-tooltip__pointer--top\">\n <svg width=\"20\" height=\"12\" viewBox=\"0 0 20 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path [attr.fill]=\"ptrBorderFill\" d=\"M0 12L10 0L20 12Z\"/>\n <path [attr.fill]=\"ptrBodyFill\" d=\"M1.8 12L10 1.8L18.2 12Z\"/>\n </svg>\n </div>\n }\n\n <!-- ── Pointer LEFT (left of container) ───────────────────────────── -->\n @if (pointerSide === 'left') {\n <div class=\"pecb-tooltip__pointer pecb-tooltip__pointer--left\">\n <svg width=\"12\" height=\"20\" viewBox=\"0 0 12 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path [attr.fill]=\"ptrBorderFill\" d=\"M12 0L0 10L12 20Z\"/>\n <path [attr.fill]=\"ptrBodyFill\" d=\"M12 1.8L1.8 10L12 18.2Z\"/>\n </svg>\n </div>\n }\n\n <!-- ── Main container ─────────────────────────────────────────────── -->\n <div class=\"pecb-tooltip__container\">\n <div class=\"pecb-tooltip__body\">\n\n <div class=\"pecb-tooltip__content\">\n <div class=\"pecb-tooltip__texts\">\n @if (title()) {\n <p class=\"pecb-tooltip__title\">{{ title() }}</p>\n }\n <p class=\"pecb-tooltip__message\">{{ message() }}</p>\n </div>\n\n @if (showClose()) {\n <button\n type=\"button\"\n class=\"pecb-tooltip__close\"\n aria-label=\"Close tooltip\"\n (click)=\"close()\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path class=\"pecb-tooltip__close-icon\" d=\"M15 5L5 15M5 5L15 15\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n </div>\n\n @if (hasButtons) {\n <div class=\"pecb-tooltip__buttons\">\n @if (secondaryCta()) {\n <button type=\"button\" class=\"pecb-tooltip__btn pecb-tooltip__btn--secondary\" (click)=\"secondaryCtaClick.emit()\">{{ secondaryCta() }}</button>\n }\n @if (primaryCta()) {\n <button type=\"button\" class=\"pecb-tooltip__btn pecb-tooltip__btn--primary\" (click)=\"primaryCtaClick.emit()\">{{ primaryCta() }}</button>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- ── Pointer RIGHT (right of container) ─────────────────────────── -->\n @if (pointerSide === 'right') {\n <div class=\"pecb-tooltip__pointer pecb-tooltip__pointer--right\">\n <svg width=\"12\" height=\"20\" viewBox=\"0 0 12 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path [attr.fill]=\"ptrBorderFill\" d=\"M0 0L12 10L0 20Z\"/>\n <path [attr.fill]=\"ptrBodyFill\" d=\"M0 1.8L10.2 10L0 18.2Z\"/>\n </svg>\n </div>\n }\n\n <!-- ── Pointer BOTTOM (below container) ───────────────────────────── -->\n @if (pointerSide === 'bottom') {\n <div class=\"pecb-tooltip__pointer pecb-tooltip__pointer--bottom\">\n <svg width=\"20\" height=\"12\" viewBox=\"0 0 20 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path [attr.fill]=\"ptrBorderFill\" d=\"M0 0L10 12L20 0Z\"/>\n <path [attr.fill]=\"ptrBodyFill\" d=\"M1.8 0L10 10.2L18.2 0Z\"/>\n </svg>\n </div>\n }\n\n </div>\n}\n","import {\n Directive,\n ElementRef,\n HostListener,\n ApplicationRef,\n ComponentRef,\n EnvironmentInjector,\n OnDestroy,\n createComponent,\n inject,\n input,\n output\n} from '@angular/core';\nimport { TooltipComponent, TooltipPointerPosition, TooltipTheme } from './tooltip.component';\n\nconst GAP = 2; // px gap between tooltip pointer tip and the host element\n\n@Directive({\n selector: '[pecbTooltip]',\n standalone: true\n})\nexport class TooltipDirective implements OnDestroy {\n /** Tooltip body message */\n pecbTooltip = input('');\n /** Optional bold title above the message */\n tooltipTitle = input('');\n /** dark (default) or light */\n tooltipTheme = input<TooltipTheme>('dark');\n /** Where the pointer arrow appears relative to the tooltip body */\n tooltipPosition = input<TooltipPointerPosition>('top-left');\n /** hover (default) or click */\n tooltipTrigger = input<'hover' | 'click'>('hover');\n /** Optional primary CTA label (red link) */\n tooltipPrimaryCta = input('');\n /** Optional secondary CTA label (muted link) */\n tooltipSecondaryCta = input('');\n\n /** Emits when the primary CTA is clicked */\n tooltipPrimaryCtaClick = output<void>();\n /** Emits when the secondary CTA is clicked */\n tooltipSecondaryCtaClick = output<void>();\n\n private el = inject(ElementRef<HTMLElement>);\n private appRef = inject(ApplicationRef);\n private injector = inject(EnvironmentInjector);\n private ref?: ComponentRef<TooltipComponent>;\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.tooltipTrigger() === 'hover') this.show();\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n if (this.tooltipTrigger() === 'hover') this.hide();\n }\n\n @HostListener('click')\n onClick(): void {\n if (this.tooltipTrigger() === 'click') {\n this.ref ? this.hide() : this.show();\n }\n }\n\n ngOnDestroy(): void {\n this.hide();\n }\n\n /** Flip the side so the arrow points back toward the trigger element. */\n private invertedPointerPosition(): TooltipPointerPosition {\n const pos = this.tooltipPosition();\n const [side, align] = pos.split('-');\n const flipped: Record<string, string> = { top: 'bottom', bottom: 'top', left: 'right', right: 'left' };\n return `${flipped[side]}-${align}` as TooltipPointerPosition;\n }\n\n private show(): void {\n if (this.ref) return;\n\n this.ref = createComponent(TooltipComponent, { environmentInjector: this.injector });\n this.ref.setInput('message', this.pecbTooltip());\n this.ref.setInput('title', this.tooltipTitle());\n this.ref.setInput('theme', this.tooltipTheme());\n // Invert the side so the arrow points TOWARD the trigger.\n // e.g. tooltipPosition='top-left' places tooltip ABOVE → arrow must be at bottom → 'bottom-left'\n this.ref.setInput('pointerPosition', this.invertedPointerPosition());\n this.ref.setInput('primaryCta', this.tooltipPrimaryCta());\n this.ref.setInput('secondaryCta', this.tooltipSecondaryCta());\n this.ref.setInput('showClose', this.tooltipTrigger() === 'click');\n\n // Subscribe to close output so click-trigger tooltips can self-close\n this.ref.instance.closed.subscribe(() => this.hide());\n this.ref.instance.primaryCtaClick.subscribe(() => this.tooltipPrimaryCtaClick.emit());\n this.ref.instance.secondaryCtaClick.subscribe(() => this.tooltipSecondaryCtaClick.emit());\n\n this.appRef.attachView(this.ref.hostView);\n document.body.appendChild(this.ref.location.nativeElement);\n this.ref.changeDetectorRef.detectChanges();\n this.position();\n }\n\n private hide(): void {\n if (!this.ref) return;\n this.appRef.detachView(this.ref.hostView);\n this.ref.destroy();\n this.ref = undefined;\n }\n\n private position(): void {\n if (!this.ref) return;\n\n const tooltipEl = this.ref.location.nativeElement as HTMLElement;\n const host = this.el.nativeElement.getBoundingClientRect();\n const pos = this.tooltipPosition();\n const [side, align] = pos.split('-') as [string, string];\n\n tooltipEl.style.position = 'fixed';\n tooltipEl.style.zIndex = '9999';\n\n // ── Vertical ─────────────────────────────────────────────────────────────\n // \"top-*\" → tooltip appears ABOVE the trigger\n // \"bottom-*\" → tooltip appears BELOW the trigger\n if (side === 'top') {\n tooltipEl.style.bottom = `${window.innerHeight - host.top + GAP}px`;\n } else if (side === 'bottom') {\n tooltipEl.style.top = `${host.bottom + GAP}px`;\n } else {\n // left / right: vertical alignment along the host\n if (align === 'top') {\n tooltipEl.style.top = `${host.top}px`;\n } else if (align === 'center') {\n tooltipEl.style.top = `${host.top + host.height / 2}px`;\n tooltipEl.style.transform = 'translateY(-50%)';\n } else {\n tooltipEl.style.bottom = `${window.innerHeight - host.bottom}px`;\n }\n }\n\n // ── Horizontal ───────────────────────────────────────────────────────────\n if (side === 'top' || side === 'bottom') {\n if (align === 'left') {\n tooltipEl.style.left = `${host.left}px`;\n } else if (align === 'center') {\n tooltipEl.style.left = `${host.left + host.width / 2}px`;\n tooltipEl.style.transform = 'translateX(-50%)';\n } else {\n // right-aligned: right edge of tooltip = right edge of host\n tooltipEl.style.right = `${window.innerWidth - host.right}px`;\n }\n } else if (side === 'left') {\n // \"left-*\" → tooltip appears to the LEFT of the trigger\n tooltipEl.style.right = `${window.innerWidth - host.left + GAP}px`;\n } else {\n // \"right-*\" → tooltip appears to the RIGHT of the trigger\n tooltipEl.style.left = `${host.right + GAP}px`;\n }\n }\n}\n","import {\n Component,\n input,\n output,\n computed,\n ChangeDetectionStrategy\n} from '@angular/core';\n\nexport type MessageItemStatus = 'default' | 'read' | 'typing' | 'unread' | 'warning';\nexport type MessageBubbleType = 'text' | 'document' | 'audio' | 'image';\nexport type MessageDirection = 'incoming' | 'outgoing';\n\n// ─── Conversation List Item ────────────────────────────────────────────────────\n\n@Component({\n selector: 'pecb-message-item',\n standalone: true,\n imports: [],\n templateUrl: './message-item.component.html',\n styleUrls: ['./messaging.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MessageItemComponent {\n /** Avatar image URL — if empty, falls back to initials */\n avatarSrc = input<string>('');\n /** Explicit initials override — auto-derived from name when empty */\n avatarInitials = input<string>('');\n /** Sender / contact display name */\n name = input<string>('Chelsea Hagon');\n /** Timestamp string, e.g. \"12:30\" */\n time = input<string>('12:30');\n /** Message preview text shown below the name */\n preview = input<string>(\"I'd definitely shoot any opportunities...\");\n /** Visual state of the list item */\n status = input<MessageItemStatus>('default');\n /** Unread badge count — shown when status is \"unread\" */\n unreadCount = input<number>(0);\n /** Whether this item is currently selected / active */\n selected = input<boolean>(false);\n\n /** Emitted when the item is clicked */\n itemClicked = output<void>();\n\n initials = computed<string>(() => {\n const explicit = this.avatarInitials();\n if (explicit) return explicit.substring(0, 2).toUpperCase();\n return (this.name() ?? '')\n .split(' ')\n .map(w => w[0] ?? '')\n .join('')\n .substring(0, 2)\n .toUpperCase();\n });\n\n get hostClasses(): string {\n return [\n 'pecb-message-item',\n this.status() !== 'default' ? `pecb-message-item--${this.status()}` : '',\n this.selected() ? 'pecb-message-item--selected' : ''\n ].filter(Boolean).join(' ');\n }\n}\n\n// ─── Message Bubble ───────────────────────────────────────────────────────────\n\n@Component({\n selector: 'pecb-message-bubble',\n standalone: true,\n imports: [],\n templateUrl: './message-bubble.component.html',\n styleUrls: ['./messaging.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MessageBubbleComponent {\n /** Visual type of the message */\n type = input<MessageBubbleType>('text');\n /** Whether the message was sent by the current user or received */\n direction = input<MessageDirection>('incoming');\n\n // ── Text / content ──────────────────────────────────────────────────────────\n /** Single text message string — alias for passing one item via messages */\n text = input<string>('');\n /**\n * Array of text strings to render as stacked bubbles.\n * When provided, takes precedence over `text`.\n */\n messages = input<string[]>([]);\n\n // ── Sender info ─────────────────────────────────────────────────────────────\n /** Sender display name (shown for incoming) */\n senderName = input<string>('James Daniel');\n /** Timestamp string, e.g. \"4:59 PM\" */\n time = input<string>('4:59 PM');\n /** Show read-receipt checkmark below the bubble (outgoing only) */\n showReadReceipt = input<boolean>(false);\n\n // ── Avatar (incoming only) ───────────────────────────────────────────────────\n /** Avatar image URL */\n avatarSrc = input<string>('');\n /** Explicit initials override — auto-derived from senderName when empty */\n avatarInitials = input<string>('');\n\n // ── Document type ────────────────────────────────────────────────────────────\n /** File name, e.g. \"Filename.pdf\" */\n fileName = input<string>('Filename.pdf');\n /** File metadata string, e.g. \"1 page • PDF • 4MB\" */\n fileMeta = input<string>('1 page • PDF • 4MB');\n /** Thumbnail image URL for document / image types */\n thumbnailSrc = input<string>('');\n\n // ── Audio type ───────────────────────────────────────────────────────────────\n /** Audio duration string, e.g. \"0:30\" */\n audioDuration = input<string>('0:30');\n /**\n * Custom waveform bar heights (values 1–20).\n * Defaults to a built-in decorative pattern when not supplied.\n */\n waveformData = input<number[]>([]);\n\n // ── Image type ────────────────────────────────────────────────────────────────\n /** Image URL for image-type messages */\n imageSrc = input<string>('');\n /** Alt text for image */\n imageAlt = input<string>('Image attachment');\n\n // ── Outputs ──────────────────────────────────────────────────────────────────\n /** Emitted when the download button is clicked (document type, incoming) */\n downloadClicked = output<void>();\n /** Emitted when the play button is clicked (audio type) */\n playClicked = output<void>();\n\n // ── Computed ─────────────────────────────────────────────────────────────────\n\n initials = computed<string>(() => {\n const explicit = this.avatarInitials();\n if (explicit) return explicit.substring(0, 2).toUpperCase();\n return (this.senderName() ?? '')\n .split(' ')\n .map(w => w[0] ?? '')\n .join('')\n .substring(0, 2)\n .toUpperCase();\n });\n\n displayMessages = computed<string[]>(() => {\n const msgs = this.messages();\n if (msgs.length > 0) return msgs;\n const t = this.text();\n return t ? [t] : [];\n });\n\n waveformBars = computed<number[]>(() => {\n const custom = this.waveformData();\n if (custom.length > 0) return custom;\n // Default decorative waveform pattern\n return [4, 8, 6, 12, 9, 15, 7, 10, 14, 6, 12, 8, 5, 16, 9, 11, 7, 13, 8, 5, 14, 10, 6, 12, 9, 7, 11, 8, 15, 6, 10, 9, 5];\n });\n\n get hostClasses(): string {\n return [\n 'pecb-message-bubble',\n `pecb-message-bubble--${this.direction()}`,\n `pecb-message-bubble--${this.type()}`\n ].join(' ');\n }\n\n get senderLabel(): string {\n return this.direction() === 'outgoing' ? 'You' : this.senderName();\n }\n}\n","<div\n [class]=\"hostClasses\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"itemClicked.emit()\"\n (keydown.enter)=\"itemClicked.emit()\"\n (keydown.space)=\"itemClicked.emit()\"\n>\n\n <!-- Avatar -->\n <div class=\"pecb-message-item__avatar\" aria-hidden=\"true\">\n @if (avatarSrc()) {\n <img [src]=\"avatarSrc()\" [alt]=\"name()\" class=\"pecb-message-item__avatar-img\" />\n } @else {\n <span class=\"pecb-message-item__avatar-initials\">{{ initials() }}</span>\n }\n </div>\n\n <!-- Content -->\n <div class=\"pecb-message-item__content\">\n\n <!-- Header row: name + timestamp -->\n <div class=\"pecb-message-item__header\">\n <span class=\"pecb-message-item__name\">{{ name() }}</span>\n <span class=\"pecb-message-item__time\">{{ time() }}</span>\n </div>\n\n <!-- Footer row: preview / typing + status indicator -->\n <div class=\"pecb-message-item__footer\">\n\n @if (status() === 'typing') {\n <span class=\"pecb-message-item__typing\">is typing\n <span class=\"pecb-message-item__typing-dots\" aria-hidden=\"true\">\n <span></span><span></span><span></span>\n </span>\n </span>\n } @else {\n <span class=\"pecb-message-item__preview\">{{ preview() }}</span>\n }\n\n <!-- Status indicator -->\n @if (status() === 'unread' && unreadCount() > 0) {\n <span class=\"pecb-message-item__badge\" aria-label=\"{{ unreadCount() }} unread messages\">\n {{ unreadCount() }}\n </span>\n } @else if (status() === 'warning') {\n <span class=\"pecb-message-item__status-icon pecb-message-item__status-icon--warning\" aria-label=\"Warning\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" stroke-width=\"1.25\"/>\n <path d=\"M8 4.5V8.5\" stroke=\"currentColor\" stroke-width=\"1.25\" stroke-linecap=\"round\"/>\n <circle cx=\"8\" cy=\"11\" r=\"0.75\" fill=\"currentColor\"/>\n </svg>\n </span>\n } @else if (status() === 'read') {\n <span class=\"pecb-message-item__status-icon pecb-message-item__status-icon--read\" aria-label=\"Read\">\n <svg width=\"14\" height=\"10\" viewBox=\"0 0 14 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M1 5L5 9L13 1\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n }\n\n </div>\n </div>\n\n</div>\n","<div [class]=\"hostClasses\">\n\n <!-- Avatar — incoming messages only -->\n @if (direction() === 'incoming') {\n <div class=\"pecb-message-bubble__avatar\" aria-hidden=\"true\">\n @if (avatarSrc()) {\n <img [src]=\"avatarSrc()\" [alt]=\"senderName()\" class=\"pecb-message-bubble__avatar-img\" />\n } @else {\n <span class=\"pecb-message-bubble__avatar-initials\">{{ initials() }}</span>\n }\n </div>\n }\n\n <!-- Content wrapper -->\n <div class=\"pecb-message-bubble__content\">\n\n <!-- ════════════════════════════════════\n TEXT — stacked bubbles\n ════════════════════════════════════ -->\n @if (type() === 'text') {\n <div class=\"pecb-message-bubble__bubbles\">\n @for (msg of displayMessages(); track $index) {\n <div class=\"pecb-message-bubble__bubble pecb-message-bubble__bubble--text\">\n {{ msg }}\n </div>\n }\n </div>\n }\n\n <!-- ════════════════════════════════════\n DOCUMENT\n ════════════════════════════════════ -->\n @if (type() === 'document') {\n <div class=\"pecb-message-bubble__bubble pecb-message-bubble__bubble--document\">\n\n <!-- Thumbnail -->\n @if (thumbnailSrc()) {\n <div class=\"pecb-message-bubble__doc-thumb\">\n <img [src]=\"thumbnailSrc()\" [alt]=\"fileName()\" class=\"pecb-message-bubble__doc-thumb-img\" />\n </div>\n }\n\n <!-- File info row -->\n <div class=\"pecb-message-bubble__doc-row\">\n <!-- File-type icon badge -->\n <span class=\"pecb-message-bubble__doc-icon\" aria-hidden=\"true\">\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"32\" height=\"32\" rx=\"6\" fill=\"#FFF4E5\"/>\n <rect x=\"4\" y=\"4\" width=\"24\" height=\"24\" rx=\"3\" fill=\"#FFD59E\" fill-opacity=\"0.4\"/>\n <!-- Mountains / image icon -->\n <path d=\"M8 22L13 15L17 19L20 16L24 22H8Z\" fill=\"#FF9C4A\" fill-opacity=\"0.7\"/>\n <circle cx=\"21\" cy=\"13\" r=\"2\" fill=\"#FF9C4A\" fill-opacity=\"0.7\"/>\n </svg>\n </span>\n\n <!-- Name + meta -->\n <div class=\"pecb-message-bubble__doc-info\">\n <span class=\"pecb-message-bubble__doc-name\">{{ fileName() }}</span>\n <span class=\"pecb-message-bubble__doc-meta\">{{ fileMeta() }}</span>\n </div>\n\n <!-- Download action (both directions) -->\n <button\n type=\"button\"\n class=\"pecb-message-bubble__doc-action\"\n aria-label=\"Download {{ fileName() }}\"\n (click)=\"downloadClicked.emit()\"\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=\"M9 2V12M9 12L5.5 8.5M9 12L12.5 8.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M3 15H15\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n </div>\n\n </div>\n }\n\n <!-- ════════════════════════════════════\n AUDIO\n ════════════════════════════════════ -->\n @if (type() === 'audio') {\n <div class=\"pecb-message-bubble__bubble pecb-message-bubble__bubble--audio\">\n\n <!-- Play button -->\n <button\n type=\"button\"\n class=\"pecb-message-bubble__play-btn\"\n aria-label=\"Play audio message\"\n (click)=\"playClicked.emit()\"\n >\n <svg width=\"12\" height=\"14\" viewBox=\"0 0 12 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M1 1L11 7L1 13V1Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n\n <!-- Waveform -->\n <div class=\"pecb-message-bubble__waveform\" aria-hidden=\"true\">\n @for (bar of waveformBars(); track $index) {\n <span\n class=\"pecb-message-bubble__waveform-bar\"\n [style.height.px]=\"bar\"\n ></span>\n }\n </div>\n\n <!-- Duration -->\n <span class=\"pecb-message-bubble__duration\">{{ audioDuration() }}</span>\n\n </div>\n }\n\n <!-- ════════════════════════════════════\n IMAGE\n ════════════════════════════════════ -->\n @if (type() === 'image') {\n <div class=\"pecb-message-bubble__bubble pecb-message-bubble__bubble--image\">\n <img\n [src]=\"imageSrc()\"\n [alt]=\"imageAlt()\"\n class=\"pecb-message-bubble__image\"\n />\n </div>\n }\n\n <!-- ════════════════════════════════════\n Footer: sender label + timestamp + read receipt\n ════════════════════════════════════ -->\n <div class=\"pecb-message-bubble__footer\">\n <span class=\"pecb-message-bubble__meta\">{{ senderLabel }} • {{ time() }}</span>\n @if (showReadReceipt()) {\n <span class=\"pecb-message-bubble__check\" aria-label=\"Read\">\n <svg width=\"14\" height=\"11\" viewBox=\"0 0 14 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M1 5.5L5 9.5L13 1.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n }\n </div>\n\n </div>\n\n</div>\n","import {\n Component,\n Directive,\n input,\n model,\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\n// ── Content / Footer slot directives ──────────────────────────────────────────\n\n@Directive({\n selector: '[pecbFullscreenModalContent]',\n standalone: true,\n host: { class: 'pecb-fullscreen-modal__content' }\n})\nexport class FullscreenModalContentDirective {}\n\n@Directive({\n selector: '[pecbFullscreenModalFooter]',\n standalone: true\n})\nexport class FullscreenModalFooterDirective {}\n\n// ── Main component ────────────────────────────────────────────────────────────\n\n@Component({\n selector: 'pecb-fullscreen-modal',\n standalone: true,\n imports: [],\n templateUrl: './fullscreen-modal.component.html',\n styleUrls: ['./fullscreen-modal.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FullscreenModalComponent implements OnInit, OnDestroy, AfterViewInit {\n /** Unique id forwarded to the dialog element */\n id = input(generateUniqueId('fullscreen-modal'));\n\n /** Controls visibility */\n isOpen = model(false);\n\n /** Title rendered in the modal header */\n title = input<string>('');\n\n /** Show or hide the built-in close (×) button */\n showCloseButton = input(true);\n\n /** Close modal when clicking the backdrop */\n closeOnBackdropClick = input(true);\n\n /** Close modal when pressing Escape */\n closeOnEscape = input(true);\n\n /** Accessible label for the dialog (used when no visible title exists) */\n ariaLabel = input<string | undefined>(undefined);\n\n /** ID of the element that labels this dialog */\n ariaLabelledBy = input<string | undefined>(undefined);\n\n /** ID of the element that describes this dialog */\n ariaDescribedBy = input<string | undefined>(undefined);\n\n /** Emitted when the modal has been closed */\n closed = output<void>();\n\n /** Emitted when the modal has been opened */\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 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.isOpen.set(false);\n this.cleanup();\n this.closed.emit();\n }\n\n /** Generated title id used for aria-labelledby when no override is given */\n get titleId(): string {\n return `${this.id()}-title`;\n }\n\n get resolvedLabelledBy(): string | undefined {\n return this.ariaLabelledBy() ?? (this.title() ? this.titleId : undefined);\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","@if (isOpen()) {\n<div\n [id]=\"id()\"\n class=\"pecb-fullscreen-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"resolvedLabelledBy\"\n [attr.aria-describedby]=\"ariaDescribedBy()\"\n (click)=\"onBackdropClick($event)\"\n (keydown)=\"onKeydown($event)\"\n>\n <div\n #modalPanel\n class=\"pecb-fullscreen-modal__panel\"\n tabindex=\"-1\"\n >\n\n <!-- ── Header ──────────────────────────────────────────────────── -->\n <div class=\"pecb-fullscreen-modal__header\">\n @if (title()) {\n <h2 [id]=\"titleId\" class=\"pecb-fullscreen-modal__title\">{{ title() }}</h2>\n }\n <ng-content select=\"[pecbFullscreenModalHeader]\"></ng-content>\n\n @if (showCloseButton()) {\n <button\n type=\"button\"\n class=\"pecb-fullscreen-modal__close-btn\"\n aria-label=\"Close modal\"\n (click)=\"close()\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M15 5L5 15M5 5L15 15\" stroke=\"currentColor\" stroke-width=\"1.75\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n </div>\n\n <!-- ── Divider ─────────────────────────────────────────────────── -->\n <div class=\"pecb-fullscreen-modal__divider\" aria-hidden=\"true\"></div>\n\n <!-- ── Body (scrollable) ──────────────────────────────────────── -->\n <div class=\"pecb-fullscreen-modal__body\">\n <ng-content select=\"[pecbFullscreenModalContent]\"></ng-content>\n <ng-content></ng-content>\n </div>\n\n <!-- ── Footer ─────────────────────────────────────────────────── -->\n <div class=\"pecb-fullscreen-modal__footer\">\n <ng-content select=\"[pecbFullscreenModalFooter]\"></ng-content>\n </div>\n\n </div>\n</div>\n}\n","import { Component, input, output, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type StepperType = 'basic' | 'dot' | 'custom-icon' | 'navigation' | 'inline';\nexport type StepperSize = 'sm' | 'md';\nexport type StepperDirection = 'horizontal' | 'vertical';\nexport type StepState = 'finish' | 'process' | 'progress' | 'wait' | 'error';\nexport type StepperTailStyle = 'default' | 'bold';\nexport type StepOrder = 'first' | 'center' | 'last' | 'only';\n\nexport interface StepItem {\n label: string;\n description?: string;\n icon?: string;\n time?: string;\n state?: StepState;\n}\n\n// =============================================================================\n// STEPPER COMPONENT\n// =============================================================================\n\n@Component({\n selector: 'pecb-stepper',\n imports: [CommonModule],\n templateUrl: './stepper.component.html',\n styleUrls: ['./stepper.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StepperComponent {\n id = input(generateUniqueId('stepper'));\n type = input<StepperType>('basic');\n size = input<StepperSize>('md');\n direction = input<StepperDirection>('horizontal');\n tailStyle = input<StepperTailStyle>('default');\n steps = input<StepItem[]>([]);\n currentStep = input(0);\n ariaLabel = input<string>('Progress');\n\n stepClicked = output<number>();\n\n resolvedSteps = computed(() => {\n const stepsValue = this.steps();\n const current = this.currentStep();\n const total = stepsValue.length;\n return stepsValue.map((step, index) => ({\n ...step,\n index,\n resolvedState: step.state || this.computeState(index, current),\n order: this.computeOrder(index, total)\n }));\n });\n\n get stepperClasses(): string[] {\n return [\n 'pecb-stepper',\n `pecb-stepper--${this.type()}`,\n `pecb-stepper--${this.size()}`,\n `pecb-stepper--${this.direction()}`,\n `pecb-stepper--tail-${this.tailStyle()}`\n ];\n }\n\n getStepClasses(step: { resolvedState: StepState; index: number; order: StepOrder }): string[] {\n return [\n 'pecb-stepper__step',\n `pecb-stepper__step--${step.resolvedState}`,\n `pecb-stepper__step--${step.order}`,\n step.index === this.currentStep() ? 'pecb-stepper__step--current' : ''\n ].filter(Boolean);\n }\n\n getConnectorClasses(step: { resolvedState: StepState }): string[] {\n return [\n 'pecb-stepper__connector',\n step.resolvedState === 'finish' ? 'pecb-stepper__connector--completed' : ''\n ].filter(Boolean);\n }\n\n getLeftConnectorClasses(step: { resolvedState: StepState; index: number }): string[] {\n const prevStep = this.resolvedSteps()[step.index - 1];\n return [\n 'pecb-stepper__tail',\n 'pecb-stepper__tail--left',\n prevStep && prevStep.resolvedState === 'finish' ? 'pecb-stepper__tail--active' : 'pecb-stepper__tail--waiting'\n ];\n }\n\n getRightConnectorClasses(step: { resolvedState: StepState }): string[] {\n return [\n 'pecb-stepper__tail',\n 'pecb-stepper__tail--right',\n step.resolvedState === 'finish' ? 'pecb-stepper__tail--active' : 'pecb-stepper__tail--waiting'\n ];\n }\n\n onStepClick(index: number): void {\n this.stepClicked.emit(index);\n }\n\n onStepKeyDown(event: KeyboardEvent, index: number): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.stepClicked.emit(index);\n }\n }\n\n private computeState(index: number, current: number): StepState {\n if (index < current) return 'finish';\n if (index === current) return 'process';\n return 'wait';\n }\n\n private computeOrder(index: number, total: number): StepOrder {\n if (total === 1) return 'only';\n if (index === 0) return 'first';\n if (index === total - 1) return 'last';\n return 'center';\n }\n}\n","<div\n [id]=\"id()\"\n [class]=\"stepperClasses.join(' ')\"\n role=\"navigation\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <ol class=\"pecb-stepper__list\">\n @for (step of resolvedSteps(); track step.index; let first = $first; let last = $last) {\n <li\n [class]=\"getStepClasses(step).join(' ')\"\n [attr.aria-current]=\"step.resolvedState === 'process' ? 'step' : null\"\n >\n @switch (type()) {\n\n <!-- ============================================ -->\n <!-- DOT HORIZONTAL: dot with integrated tails -->\n <!-- ============================================ -->\n @case ('dot') {\n @if (direction() === 'horizontal') {\n <div class=\"pecb-stepper__dot-wrapper\">\n <!-- Left tail -->\n @if (!first) {\n <span [class]=\"getLeftConnectorClasses(step).join(' ')\" aria-hidden=\"true\"></span>\n }\n <!-- Dot -->\n <span class=\"pecb-stepper__dot\" aria-hidden=\"true\"></span>\n <!-- Right tail -->\n @if (!last) {\n <span [class]=\"getRightConnectorClasses(step).join(' ')\" aria-hidden=\"true\"></span>\n }\n </div>\n <!-- Text below dot -->\n <div\n class=\"pecb-stepper__step-content pecb-stepper__step-content--below\"\n role=\"button\"\n [attr.tabindex]=\"0\"\n [attr.aria-label]=\"step.label + (step.description ? ', ' + step.description : '') + ', Step ' + (step.index + 1) + ' of ' + resolvedSteps().length + ', ' + step.resolvedState\"\n (click)=\"onStepClick(step.index)\"\n (keydown)=\"onStepKeyDown($event, step.index)\"\n >\n <div class=\"pecb-stepper__text pecb-stepper__text--center\">\n <span class=\"pecb-stepper__label\">{{ step.label }}</span>\n @if (step.description) {\n <span class=\"pecb-stepper__description\">{{ step.description }}</span>\n }\n </div>\n </div>\n } @else {\n <!-- Vertical dot -->\n <div\n class=\"pecb-stepper__step-content\"\n role=\"button\"\n [attr.tabindex]=\"0\"\n [attr.aria-label]=\"step.label + (step.description ? ', ' + step.description : '') + ', Step ' + (step.index + 1) + ' of ' + resolvedSteps().length + ', ' + step.resolvedState\"\n (click)=\"onStepClick(step.index)\"\n (keydown)=\"onStepKeyDown($event, step.index)\"\n >\n <span class=\"pecb-stepper__dot\" aria-hidden=\"true\"></span>\n <div class=\"pecb-stepper__text\">\n <span class=\"pecb-stepper__label\">{{ step.label }}</span>\n @if (step.description) {\n <span class=\"pecb-stepper__description\">{{ step.description }}</span>\n }\n </div>\n </div>\n @if (!last) {\n <span [class]=\"getConnectorClasses(step).join(' ')\" aria-hidden=\"true\"></span>\n }\n }\n }\n\n <!-- ============================================ -->\n <!-- INLINE: dot with label, no connectors -->\n <!-- ============================================ -->\n @case ('inline') {\n <div\n class=\"pecb-stepper__step-content pecb-stepper__step-content--inline\"\n role=\"button\"\n [attr.tabindex]=\"0\"\n [attr.aria-label]=\"step.label + ', Step ' + (step.index + 1) + ' of ' + resolvedSteps().length + ', ' + step.resolvedState\"\n (click)=\"onStepClick(step.index)\"\n (keydown)=\"onStepKeyDown($event, step.index)\"\n >\n <span class=\"pecb-stepper__dot\" aria-hidden=\"true\"></span>\n <span class=\"pecb-stepper__label\">{{ step.label }}</span>\n </div>\n }\n\n <!-- ============================================ -->\n <!-- CUSTOM ICON -->\n <!-- ============================================ -->\n @case ('custom-icon') {\n <div\n class=\"pecb-stepper__step-content\"\n role=\"button\"\n [attr.tabindex]=\"0\"\n [attr.aria-label]=\"step.label + (step.description ? ', ' + step.description : '') + ', Step ' + (step.index + 1) + ' of ' + resolvedSteps().length + ', ' + step.resolvedState\"\n (click)=\"onStepClick(step.index)\"\n (keydown)=\"onStepKeyDown($event, step.index)\"\n >\n <span class=\"pecb-stepper__icon-custom\" aria-hidden=\"true\">\n @if (step.icon) {\n <span class=\"pecb-stepper__icon-svg\" [innerHTML]=\"step.icon\"></span>\n } @else {\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 12C14.21 12 16 10.21 16 8C16 5.79 14.21 4 12 4C9.79 4 8 5.79 8 8C8 10.21 9.79 12 12 12ZM12 14C9.33 14 4 15.34 4 18V20H20V18C20 15.34 14.67 14 12 14Z\" fill=\"currentColor\"/>\n </svg>\n }\n </span>\n <div class=\"pecb-stepper__text\">\n <span class=\"pecb-stepper__label\">{{ step.label }}</span>\n @if (step.description) {\n <span class=\"pecb-stepper__description\">{{ step.description }}</span>\n }\n </div>\n </div>\n @if (!last) {\n <span [class]=\"getConnectorClasses(step).join(' ')\" aria-hidden=\"true\"></span>\n }\n }\n\n <!-- ============================================ -->\n <!-- NAVIGATION -->\n <!-- ============================================ -->\n @case ('navigation') {\n <div\n class=\"pecb-stepper__step-content\"\n role=\"button\"\n [attr.tabindex]=\"0\"\n [attr.aria-label]=\"step.label + (step.description ? ', ' + step.description : '') + (step.time ? ', ' + step.time : '') + ', Step ' + (step.index + 1) + ' of ' + resolvedSteps().length + ', ' + step.resolvedState\"\n (click)=\"onStepClick(step.index)\"\n (keydown)=\"onStepKeyDown($event, step.index)\"\n >\n <span class=\"pecb-stepper__icon-circle\" aria-hidden=\"true\">\n @if (step.resolvedState === 'finish') {\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.25 9.4475L2.8525 7.05L2.0275 7.8675L5.25 11.09L12.25 4.09L11.4325 3.2725L5.25 9.4475Z\" fill=\"currentColor\"/>\n </svg>\n } @else if (step.resolvedState === 'error') {\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.0825 2.9225L10.0775 1.9175L6.5 5.495L2.9225 1.9175L1.9175 2.9225L5.495 6.5L1.9175 10.0775L2.9225 11.0825L6.5 7.505L10.0775 11.0825L11.0825 10.0775L7.505 6.5L11.0825 2.9225Z\" fill=\"currentColor\"/>\n </svg>\n } @else {\n <span class=\"pecb-stepper__number\">{{ step.index + 1 }}</span>\n }\n </span>\n <div class=\"pecb-stepper__text\">\n <div class=\"pecb-stepper__label-row\">\n <span class=\"pecb-stepper__label\">{{ step.label }}</span>\n @if (step.time) {\n <span class=\"pecb-stepper__time\">{{ step.time }}</span>\n }\n </div>\n @if (step.description) {\n <span class=\"pecb-stepper__description\">{{ step.description }}</span>\n }\n </div>\n </div>\n @if (!last) {\n <span class=\"pecb-stepper__chevron\" aria-hidden=\"true\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 12L10 8L6 4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n }\n }\n\n <!-- ============================================ -->\n <!-- BASIC (default) -->\n <!-- ============================================ -->\n @default {\n <div\n class=\"pecb-stepper__step-content\"\n role=\"button\"\n [attr.tabindex]=\"0\"\n [attr.aria-label]=\"step.label + (step.description ? ', ' + step.description : '') + ', Step ' + (step.index + 1) + ' of ' + resolvedSteps().length + ', ' + step.resolvedState\"\n (click)=\"onStepClick(step.index)\"\n (keydown)=\"onStepKeyDown($event, step.index)\"\n >\n <span class=\"pecb-stepper__icon-circle\" aria-hidden=\"true\">\n @if (step.resolvedState === 'finish') {\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.25 9.4475L2.8525 7.05L2.0275 7.8675L5.25 11.09L12.25 4.09L11.4325 3.2725L5.25 9.4475Z\" fill=\"currentColor\"/>\n </svg>\n } @else if (step.resolvedState === 'error') {\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M11.0825 2.9225L10.0775 1.9175L6.5 5.495L2.9225 1.9175L1.9175 2.9225L5.495 6.5L1.9175 10.0775L2.9225 11.0825L6.5 7.505L10.0775 11.0825L11.0825 10.0775L7.505 6.5L11.0825 2.9225Z\" fill=\"currentColor\"/>\n </svg>\n } @else if (step.resolvedState === 'progress') {\n <span class=\"pecb-stepper__progress-ring\" aria-hidden=\"true\"></span>\n <span class=\"pecb-stepper__number\">{{ step.index + 1 }}</span>\n } @else {\n <span class=\"pecb-stepper__number\">{{ step.index + 1 }}</span>\n }\n </span>\n <div class=\"pecb-stepper__text\">\n <span class=\"pecb-stepper__label\">{{ step.label }}</span>\n @if (step.description) {\n <span class=\"pecb-stepper__description\">{{ step.description }}</span>\n }\n </div>\n </div>\n @if (!last) {\n <span [class]=\"getConnectorClasses(step).join(' ')\" aria-hidden=\"true\"></span>\n }\n }\n }\n </li>\n }\n </ol>\n</div>\n","import { Component, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Predefined gap sizes mapped to the PECB spacing tokens.\n *\n * | Token | Value |\n * |-------|-------|\n * | none | 0 |\n * | xs | 6px |\n * | sm | 8px |\n * | md | 16px |\n * | lg | 20px |\n * | xl | 24px |\n * | 2xl | 32px |\n */\nexport type GridGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\n/**\n * Predefined padding sizes mapped to the PECB spacing tokens.\n *\n * | Token | Value |\n * |-------|-------|\n * | none | 0 |\n * | xs | 6px |\n * | sm | 8px |\n * | md | 16px |\n * | lg | 20px |\n * | xl | 24px |\n * | 2xl | 32px |\n */\nexport type GridPadding = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\n/**\n * Number of columns the grid can display.\n * Use 'auto' for auto-fit behaviour based on minChildWidth.\n */\nexport type GridColumns = 1 | 2 | 3 | 4 | 6 | 12 | 'auto';\n\n/**\n * Horizontal alignment of grid items.\n */\nexport type GridAlign = 'start' | 'center' | 'end' | 'stretch';\n\n/**\n * Vertical alignment of grid items.\n */\nexport type GridVerticalAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline';\n\n/**\n * Number of columns a single grid item can span.\n */\nexport type GridItemSpan = 1 | 2 | 3 | 4 | 6 | 12 | 'full';\n\n/**\n * Predefined spacer sizes.\n *\n * | Token | Value |\n * |-------|-------|\n * | xs | 6px |\n * | sm | 8px |\n * | md | 16px |\n * | lg | 20px |\n * | xl | 24px |\n * | 2xl | 32px |\n * | 3xl | 40px |\n * | 4xl | 48px |\n */\nexport type SpacerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';\n\n// =============================================================================\n// GRID COMPONENT\n// =============================================================================\n\n@Component({\n selector: 'pecb-grid',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './grid.component.html',\n styleUrls: ['./grid.component.scss']\n})\nexport class GridComponent {\n /** Unique element ID */\n id = input<string>(generateUniqueId('grid'));\n\n /** Number of columns (1-12 or 'auto' for auto-fit) */\n columns = input<GridColumns>(1);\n\n /**\n * Minimum child width when columns='auto'.\n * Accepts any CSS length value. Defaults to '200px'.\n */\n minChildWidth = input<string>('200px');\n\n /** Gap between all grid items (row and column). Overridden by rowGap / columnGap. */\n gap = input<GridGap>('md');\n\n /** Row gap — overrides `gap` for the vertical axis */\n rowGap = input<GridGap | undefined>(undefined);\n\n /** Column gap — overrides `gap` for the horizontal axis */\n columnGap = input<GridGap | undefined>(undefined);\n\n /** Padding inside the grid container */\n padding = input<GridPadding>('none');\n\n /** Horizontal alignment of items within their cells */\n align = input<GridAlign>('stretch');\n\n /** Vertical alignment of items within their cells */\n verticalAlign = input<GridVerticalAlign>('stretch');\n\n /** Accessible label for the grid region */\n ariaLabel = input<string | undefined>(undefined);\n\n /** CSS classes for the grid container */\n gridClasses = computed(() => {\n const cols = this.columns();\n const gapVal = this.gap();\n const rGap = this.rowGap();\n const cGap = this.columnGap();\n const pad = this.padding();\n const hAlign = this.align();\n const vAlign = this.verticalAlign();\n\n return [\n 'pecb-grid',\n cols !== 'auto' ? `pecb-grid--cols-${cols}` : 'pecb-grid--cols-auto',\n // Gap (only if rowGap/columnGap are not both set)\n rGap === undefined && cGap === undefined ? `pecb-grid--gap-${gapVal}` : '',\n rGap !== undefined ? `pecb-grid--row-gap-${rGap}` : '',\n cGap !== undefined ? `pecb-grid--col-gap-${cGap}` : '',\n pad !== 'none' ? `pecb-grid--padding-${pad}` : '',\n hAlign !== 'stretch' ? `pecb-grid--align-${hAlign}` : '',\n vAlign !== 'stretch' ? `pecb-grid--valign-${vAlign}` : ''\n ].filter(Boolean);\n });\n\n /** Inline style for auto-fit min width */\n gridStyle = computed(() => {\n if (this.columns() === 'auto') {\n return { '--pecb-grid-min-child-width': this.minChildWidth() };\n }\n return {};\n });\n}\n\n// =============================================================================\n// GRID ITEM COMPONENT\n// =============================================================================\n\n@Component({\n selector: 'pecb-grid-item',\n standalone: true,\n template: `\n <div [class]=\"itemClasses()\" [attr.role]=\"role()\">\n <ng-content></ng-content>\n </div>\n `,\n styleUrls: ['./grid.component.scss']\n})\nexport class GridItemComponent {\n /** Number of columns this item should span */\n span = input<GridItemSpan>(1);\n\n /** Number of columns to span on small screens (>=768px) */\n spanSm = input<GridItemSpan | undefined>(undefined);\n\n /** Number of columns to span on medium screens (>=1024px) */\n spanMd = input<GridItemSpan | undefined>(undefined);\n\n /** Number of columns to span on large screens (>=1280px) */\n spanLg = input<GridItemSpan | undefined>(undefined);\n\n /** Semantic role for the grid item */\n role = input<string | null>(null);\n\n /** CSS classes for the grid item */\n itemClasses = computed(() => {\n const base = this.span();\n const sm = this.spanSm();\n const md = this.spanMd();\n const lg = this.spanLg();\n\n return [\n 'pecb-grid__item',\n base === 'full' ? 'pecb-grid__item--span-full' : `pecb-grid__item--span-${base}`,\n sm !== undefined ? (sm === 'full' ? 'pecb-grid__item--sm-span-full' : `pecb-grid__item--sm-span-${sm}`) : '',\n md !== undefined ? (md === 'full' ? 'pecb-grid__item--md-span-full' : `pecb-grid__item--md-span-${md}`) : '',\n lg !== undefined ? (lg === 'full' ? 'pecb-grid__item--lg-span-full' : `pecb-grid__item--lg-span-${lg}`) : ''\n ].filter(Boolean).join(' ');\n });\n}\n\n// =============================================================================\n// SPACER COMPONENT\n// =============================================================================\n\n@Component({\n selector: 'pecb-spacer',\n standalone: true,\n template: `<div [class]=\"spacerClasses()\" [attr.aria-hidden]=\"true\"></div>`,\n styleUrls: ['./grid.component.scss']\n})\nexport class SpacerComponent {\n /** Vertical space size */\n size = input<SpacerSize>('md');\n\n /** Whether the spacer is horizontal (inline) instead of vertical */\n inline = input(false);\n\n /** CSS classes for the spacer */\n spacerClasses = computed(() => {\n return [\n 'pecb-spacer',\n `pecb-spacer--${this.size()}`,\n this.inline() ? 'pecb-spacer--inline' : ''\n ].filter(Boolean).join(' ');\n });\n}\n","<div\n [id]=\"id()\"\n [class]=\"gridClasses().join(' ')\"\n [ngStyle]=\"gridStyle()\"\n [attr.role]=\"ariaLabel() ? 'region' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <ng-content></ng-content>\n</div>\n","import { Component, input, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type DashboardGridLayout =\n | '1'\n | '2'\n | '3'\n | '4'\n | 'sidebar-1col'\n | 'sidebar-2col'\n | 'sidebar-3col'\n | 'sidebar-4col'\n | 'custom';\n\nexport type DashboardGridGap = 'none' | 'sm' | 'md' | 'lg';\n\n// =============================================================================\n// DASHBOARD GRID COMPONENT\n// =============================================================================\n\n@Component({\n selector: 'pecb-dashboard-grid',\n imports: [CommonModule],\n templateUrl: './dashboard-grid.component.html',\n styleUrls: ['./dashboard-grid.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DashboardGridComponent {\n id = input(generateUniqueId('grid'));\n layout = input<DashboardGridLayout>('1');\n gap = input<DashboardGridGap>('md');\n columns = input<string>('');\n minHeight = input<string>('');\n ariaLabel = input<string>('Dashboard grid');\n\n gridStyle = computed(() => {\n const styles: Record<string, string> = {};\n const customColumns = this.columns();\n\n if (customColumns) {\n styles['grid-template-columns'] = customColumns;\n }\n\n const height = this.minHeight();\n if (height) {\n styles['min-height'] = height;\n }\n\n return styles;\n });\n\n get gridClasses(): string[] {\n return [\n 'pecb-dashboard-grid',\n `pecb-dashboard-grid--${this.layout()}`,\n `pecb-dashboard-grid--gap-${this.gap()}`\n ];\n }\n}\n","<div\n [id]=\"id()\"\n [class]=\"gridClasses.join(' ')\"\n [ngStyle]=\"gridStyle()\"\n role=\"region\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <ng-content></ng-content>\n</div>\n","import { Component, input, computed, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type ProgressType = 'bar' | 'circle' | 'spinner';\nexport type ProgressBarSize = 'sm' | 'lg';\nexport type ProgressCircleSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n// =============================================================================\n// SPINNER COMPONENT\n// =============================================================================\n\n@Component({\n selector: 'pecb-spinner',\n imports: [CommonModule],\n template: `\n <div\n [id]=\"id()\"\n class=\"pecb-spinner\"\n [style.width.px]=\"sizeValue()\"\n [style.height.px]=\"sizeValue()\"\n role=\"status\"\n [attr.aria-label]=\"ariaLabel()\"\n >\n <svg [attr.viewBox]=\"'0 0 ' + sizeValue() + ' ' + sizeValue()\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle\n class=\"pecb-spinner__track\"\n [attr.cx]=\"sizeValue() / 2\"\n [attr.cy]=\"sizeValue() / 2\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke-width]=\"strokeWidth()\"\n />\n <circle\n class=\"pecb-spinner__arc\"\n [attr.cx]=\"sizeValue() / 2\"\n [attr.cy]=\"sizeValue() / 2\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke-width]=\"strokeWidth()\"\n [attr.stroke-dasharray]=\"circumference()\"\n [attr.stroke-dashoffset]=\"circumference() * 0.75\"\n stroke-linecap=\"round\"\n />\n </svg>\n <span class=\"pecb-spinner__sr-only\">{{ ariaLabel() }}</span>\n </div>\n `,\n styleUrls: ['./progress.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SpinnerComponent {\n id = input(generateUniqueId('spinner'));\n size = input(48);\n ariaLabel = input('Loading');\n\n sizeValue = computed(() => this.size());\n strokeWidth = computed(() => Math.max(3, this.sizeValue() * 0.08));\n radius = computed(() => (this.sizeValue() - this.strokeWidth()) / 2);\n circumference = computed(() => 2 * Math.PI * this.radius());\n}\n\n// =============================================================================\n// PROGRESS BAR COMPONENT\n// =============================================================================\n\n@Component({\n selector: 'pecb-progress-bar',\n imports: [CommonModule],\n template: `\n <div\n [id]=\"id()\"\n [class]=\"barClasses.join(' ')\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"100\"\n [attr.aria-label]=\"ariaLabel() || label()\"\n >\n @if (label()) {\n <div class=\"pecb-progress-bar__header\">\n <span class=\"pecb-progress-bar__label\">{{ label() }}</span>\n </div>\n }\n <div class=\"pecb-progress-bar__track\">\n <div\n class=\"pecb-progress-bar__fill\"\n [style.width.%]=\"clampedValue()\"\n [style.background-color]=\"fillColor()\"\n ></div>\n </div>\n <div class=\"pecb-progress-bar__footer\">\n @if (metadata()) {\n <span class=\"pecb-progress-bar__metadata\">{{ metadata() }}</span>\n }\n @if (showPercentage()) {\n <span class=\"pecb-progress-bar__percentage\">{{ clampedValue() }}%</span>\n }\n </div>\n </div>\n `,\n styleUrls: ['./progress.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProgressBarComponent {\n id = input(generateUniqueId('progress-bar'));\n value = input(0);\n size = input<ProgressBarSize>('lg');\n label = input('');\n metadata = input('');\n showPercentage = input(true);\n color = input<string>('');\n ariaLabel = input<string>('');\n\n clampedValue = computed(() => Math.min(100, Math.max(0, this.value())));\n\n fillColor = computed(() => {\n const custom = this.color();\n if (custom) return custom;\n return this.getColorForProgress(this.clampedValue());\n });\n\n get barClasses(): string[] {\n return [\n 'pecb-progress-bar',\n `pecb-progress-bar--${this.size()}`\n ];\n }\n\n private getColorForProgress(value: number): string {\n if (value === 0) return '#c2c2c2';\n if (value <= 30) return '#ff606f';\n if (value < 100) return '#ff9c4a';\n return '#57bc57';\n }\n}\n\n// =============================================================================\n// PROGRESS CIRCLE COMPONENT\n// =============================================================================\n\n@Component({\n selector: 'pecb-progress-circle',\n imports: [CommonModule],\n template: `\n <div\n [id]=\"id()\"\n [class]=\"circleClasses.join(' ')\"\n [style.width.px]=\"sizeValue()\"\n [style.height.px]=\"sizeValue()\"\n role=\"progressbar\"\n [attr.aria-valuenow]=\"value()\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"100\"\n [attr.aria-label]=\"ariaLabel() || (clampedValue() + '% progress')\"\n >\n <svg [attr.viewBox]=\"'0 0 ' + sizeValue() + ' ' + sizeValue()\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle\n class=\"pecb-progress-circle__track\"\n [attr.cx]=\"sizeValue() / 2\"\n [attr.cy]=\"sizeValue() / 2\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke-width]=\"strokeWidth()\"\n />\n <circle\n class=\"pecb-progress-circle__fill\"\n [attr.cx]=\"sizeValue() / 2\"\n [attr.cy]=\"sizeValue() / 2\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke-width]=\"strokeWidth()\"\n [attr.stroke-dasharray]=\"circumference()\"\n [attr.stroke-dashoffset]=\"dashOffset()\"\n [style.stroke]=\"fillColor()\"\n stroke-linecap=\"round\"\n [attr.transform]=\"'rotate(-90 ' + sizeValue() / 2 + ' ' + sizeValue() / 2 + ')'\"\n />\n </svg>\n @if (showPercentage()) {\n <span class=\"pecb-progress-circle__text\" [style.font-size.px]=\"fontSize()\">\n {{ clampedValue() }}%\n </span>\n }\n </div>\n `,\n styleUrls: ['./progress.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProgressCircleComponent {\n id = input(generateUniqueId('progress-circle'));\n value = input(0);\n size = input<ProgressCircleSize>('lg');\n showPercentage = input(true);\n color = input<string>('');\n ariaLabel = input<string>('');\n\n private readonly sizeMap: Record<ProgressCircleSize, number> = {\n xs: 48,\n sm: 56,\n md: 72,\n lg: 90,\n xl: 120\n };\n\n private readonly fontSizeMap: Record<ProgressCircleSize, number> = {\n xs: 10,\n sm: 11,\n md: 13,\n lg: 16,\n xl: 20\n };\n\n sizeValue = computed(() => this.sizeMap[this.size()]);\n fontSize = computed(() => this.fontSizeMap[this.size()]);\n strokeWidth = computed(() => {\n const s = this.size();\n if (s === 'xs') return 4;\n if (s === 'sm') return 5;\n if (s === 'md') return 6;\n if (s === 'lg') return 7;\n return 9;\n });\n radius = computed(() => (this.sizeValue() - this.strokeWidth()) / 2);\n circumference = computed(() => 2 * Math.PI * this.radius());\n clampedValue = computed(() => Math.min(100, Math.max(0, this.value())));\n dashOffset = computed(() => {\n const progress = this.clampedValue() / 100;\n return this.circumference() * (1 - progress);\n });\n\n fillColor = computed(() => {\n const custom = this.color();\n if (custom) return custom;\n return this.getColorForProgress(this.clampedValue());\n });\n\n get circleClasses(): string[] {\n return [\n 'pecb-progress-circle',\n `pecb-progress-circle--${this.size()}`\n ];\n }\n\n private getColorForProgress(value: number): string {\n if (value === 0) return '#c2c2c2';\n if (value <= 30) return '#ff606f';\n if (value < 100) return '#ff9c4a';\n return '#57bc57';\n }\n}\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n forwardRef,\n ChangeDetectionStrategy,\n ElementRef,\n QueryList,\n ViewChildren,\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\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type CodeInputState = 'default' | 'error';\nexport type CodeInputDirection = 'horizontal' | 'vertical';\n\n// =============================================================================\n// CODE INPUT COMPONENT\n// =============================================================================\n\n@Component({\n selector: 'pecb-code-input',\n imports: [CommonModule],\n templateUrl: './code-input.component.html',\n styleUrls: ['./code-input.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CodeInputComponent),\n multi: true\n }\n ]\n})\nexport class CodeInputComponent implements ControlValueAccessor {\n @ViewChildren('cellInput') cellInputs!: QueryList<ElementRef<HTMLInputElement>>;\n\n id = input(generateUniqueId('code-input'));\n length = input(6);\n direction = input<CodeInputDirection>('horizontal');\n state = input<CodeInputState>('default');\n errorMessage = input('');\n showClearAll = input(false);\n disabled = input(false);\n ariaLabel = input('Verification code');\n\n completed = output<string>();\n cleared = output<void>();\n\n cells = signal<string[]>([]);\n focusedIndex = signal<number>(-1);\n\n cellIndices = computed(() => Array.from({ length: this.length() }, (_, i) => i));\n\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n constructor() {\n this.initCells();\n }\n\n writeValue(value: string | null): void {\n const val = value || '';\n const chars = val.split('').slice(0, this.length());\n const newCells = Array.from({ length: this.length() }, (_, i) => chars[i] || '');\n this.cells.set(newCells);\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 getCellClasses(index: number): string[] {\n const cellValue = this.cells()[index];\n const isFocused = this.focusedIndex() === index;\n const currentState = this.state();\n\n return [\n 'pecb-code-input__cell',\n isFocused ? 'pecb-code-input__cell--active' : '',\n currentState === 'error' && cellValue ? 'pecb-code-input__cell--error' : '',\n cellValue && currentState !== 'error' ? 'pecb-code-input__cell--filled' : '',\n !cellValue && !isFocused ? 'pecb-code-input__cell--empty' : ''\n ].filter(Boolean);\n }\n\n onCellInput(event: Event, index: number): void {\n const target = event.target as HTMLInputElement;\n const value = target.value.replace(/\\D/g, '');\n const char = value.slice(-1);\n\n const currentCells = [...this.cells()];\n currentCells[index] = char;\n this.cells.set(currentCells);\n target.value = char;\n\n this.emitValue();\n\n if (char && index < this.length() - 1) {\n this.focusCell(index + 1);\n }\n\n if (currentCells.every(c => c !== '')) {\n this.completed.emit(currentCells.join(''));\n }\n }\n\n onCellKeyDown(event: KeyboardEvent, index: number): void {\n const currentCells = [...this.cells()];\n\n if (event.key === 'Backspace') {\n event.preventDefault();\n if (currentCells[index]) {\n currentCells[index] = '';\n this.cells.set(currentCells);\n this.emitValue();\n const target = event.target as HTMLInputElement;\n target.value = '';\n } else if (index > 0) {\n currentCells[index - 1] = '';\n this.cells.set(currentCells);\n this.emitValue();\n this.focusCell(index - 1);\n }\n return;\n }\n\n if ((event.key === 'ArrowLeft' || event.key === 'ArrowUp') && index > 0) {\n event.preventDefault();\n this.focusCell(index - 1);\n return;\n }\n\n if ((event.key === 'ArrowRight' || event.key === 'ArrowDown') && index < this.length() - 1) {\n event.preventDefault();\n this.focusCell(index + 1);\n return;\n }\n\n if (event.key === 'Delete') {\n event.preventDefault();\n currentCells[index] = '';\n this.cells.set(currentCells);\n this.emitValue();\n const target = event.target as HTMLInputElement;\n target.value = '';\n return;\n }\n }\n\n onCellPaste(event: ClipboardEvent, index: number): void {\n event.preventDefault();\n const pasted = event.clipboardData?.getData('text')?.replace(/\\D/g, '') || '';\n if (!pasted) return;\n\n const currentCells = [...this.cells()];\n const chars = pasted.split('');\n let cellIndex = index;\n\n for (const char of chars) {\n if (cellIndex >= this.length()) break;\n currentCells[cellIndex] = char;\n cellIndex++;\n }\n\n this.cells.set(currentCells);\n this.syncInputValues();\n this.emitValue();\n\n const focusTarget = Math.min(cellIndex, this.length() - 1);\n this.focusCell(focusTarget);\n\n if (currentCells.every(c => c !== '')) {\n this.completed.emit(currentCells.join(''));\n }\n }\n\n onCellFocus(index: number): void {\n this.focusedIndex.set(index);\n this.onTouched();\n }\n\n onCellBlur(): void {\n this.focusedIndex.set(-1);\n }\n\n onClearAll(): void {\n const emptyCells = Array.from({ length: this.length() }, () => '');\n this.cells.set(emptyCells);\n this.syncInputValues();\n this.emitValue();\n this.focusCell(0);\n this.cleared.emit();\n }\n\n private initCells(): void {\n this.cells.set(Array.from({ length: this.length() }, () => ''));\n }\n\n private focusCell(index: number): void {\n setTimeout(() => {\n const inputs = this.cellInputs?.toArray();\n if (inputs && inputs[index]) {\n inputs[index].nativeElement.focus();\n inputs[index].nativeElement.select();\n }\n });\n }\n\n private syncInputValues(): void {\n setTimeout(() => {\n const inputs = this.cellInputs?.toArray();\n const currentCells = this.cells();\n if (inputs) {\n inputs.forEach((inputRef, i) => {\n inputRef.nativeElement.value = currentCells[i] || '';\n });\n }\n });\n }\n\n private emitValue(): void {\n const value = this.cells().join('');\n this.onChange(value);\n }\n}\n","<div\n [id]=\"id()\"\n [class]=\"'pecb-code-input pecb-code-input--' + direction()\"\n role=\"group\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <div class=\"pecb-code-input__cells\">\n @for (index of cellIndices(); track index) {\n <input\n #cellInput\n type=\"text\"\n inputmode=\"numeric\"\n autocomplete=\"one-time-code\"\n maxlength=\"1\"\n [class]=\"getCellClasses(index).join(' ')\"\n [value]=\"cells()[index]\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"'Digit ' + (index + 1) + ' of ' + length()\"\n (input)=\"onCellInput($event, index)\"\n (keydown)=\"onCellKeyDown($event, index)\"\n (paste)=\"onCellPaste($event, index)\"\n (focus)=\"onCellFocus(index)\"\n (blur)=\"onCellBlur()\"\n />\n }\n </div>\n\n @if (errorMessage() || showClearAll()) {\n <div class=\"pecb-code-input__footer\">\n @if (errorMessage()) {\n <span class=\"pecb-code-input__error\" role=\"alert\">{{ errorMessage() }}</span>\n }\n @if (showClearAll()) {\n <button\n type=\"button\"\n class=\"pecb-code-input__clear\"\n (click)=\"onClearAll()\"\n [disabled]=\"disabled()\"\n >\n Clear all\n </button>\n }\n </div>\n }\n</div>\n","import {\n Directive,\n ElementRef,\n Renderer2,\n OnInit,\n OnChanges,\n inject,\n input\n} from '@angular/core';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Shadow type — soft (diffused) or hard (sharp, pronounced).\n */\nexport type ShadowType = 'soft' | 'hard';\n\n/**\n * Shadow Soft sizes — 8 levels of increasing depth.\n *\n * | Token | Description |\n * |-----------|--------------------------|\n * | xxsmall | Barely visible lift |\n * | xsmall | Subtle depth hint |\n * | small | Light card shadow |\n * | medium | Default card elevation |\n * | large | Raised element |\n * | xlarge | Floating panel |\n * | xxlarge | Modal / overlay |\n * | xxxlarge | Maximum depth |\n */\nexport type ShadowSoftSize =\n | 'xxsmall'\n | 'xsmall'\n | 'small'\n | 'medium'\n | 'large'\n | 'xlarge'\n | 'xxlarge'\n | 'xxxlarge';\n\n/**\n * Shadow Hard sizes — 4 levels of increasing depth.\n *\n * | Token | Description |\n * |---------|----------------------------|\n * | xxsmall | Tight hard edge |\n * | xsmall | Defined border shadow |\n * | small | Prominent hard shadow |\n * | medium | Maximum hard shadow depth |\n */\nexport type ShadowHardSize = 'xxsmall' | 'xsmall' | 'small' | 'medium';\n\n/**\n * Combined shadow size (used when type is specified separately).\n */\nexport type ShadowSize = ShadowSoftSize | ShadowHardSize;\n\n/**\n * Blur intensity levels.\n *\n * | Token | Value | Description |\n * |---------|-------|------------------------|\n * | none | 0 | No blur |\n * | xsmall | 2px | Barely noticeable |\n * | small | 4px | Slight softening |\n * | medium | 8px | Moderate blur |\n * | large | 16px | Heavy blur |\n * | xlarge | 32px | Near-opaque blur |\n */\nexport type BlurSize = 'none' | 'xsmall' | 'small' | 'medium' | 'large' | 'xlarge';\n\n// Valid sizes for runtime validation\nconst VALID_SOFT_SIZES = new Set<string>([\n 'xxsmall', 'xsmall', 'small', 'medium', 'large', 'xlarge', 'xxlarge', 'xxxlarge'\n]);\nconst VALID_HARD_SIZES = new Set<string>([\n 'xxsmall', 'xsmall', 'small', 'medium'\n]);\nconst VALID_BLUR_SIZES = new Set<string>([\n 'none', 'xsmall', 'small', 'medium', 'large', 'xlarge'\n]);\n\n// =============================================================================\n// SHADOW DIRECTIVE\n// =============================================================================\n\n/**\n * Applies a shadow to the host element.\n *\n * @example\n * ```html\n * <!-- Soft shadow (default) -->\n * <div pecbShadow=\"medium\">Soft medium shadow</div>\n *\n * <!-- Specify type explicitly -->\n * <div pecbShadow=\"small\" shadowType=\"hard\">Hard small shadow</div>\n *\n * <!-- Dynamic binding -->\n * <div [pecbShadow]=\"currentSize\" [shadowType]=\"currentType\">Dynamic</div>\n * ```\n */\n@Directive({\n selector: '[pecbShadow]',\n standalone: true\n})\nexport class ShadowDirective implements OnInit, OnChanges {\n /** Shadow size token */\n pecbShadow = input<ShadowSize>('medium');\n\n /** Shadow type — 'soft' (default) or 'hard' */\n shadowType = input<ShadowType>('soft');\n\n private el = inject(ElementRef<HTMLElement>);\n private renderer = inject(Renderer2);\n private currentClass = '';\n\n ngOnInit(): void {\n this.applyClass();\n }\n\n ngOnChanges(): void {\n this.applyClass();\n }\n\n private applyClass(): void {\n const type = this.shadowType();\n const size = this.pecbShadow();\n const validSizes = type === 'hard' ? VALID_HARD_SIZES : VALID_SOFT_SIZES;\n\n if (!validSizes.has(size)) {\n return;\n }\n\n const newClass = `pecb-shadow-${type}--${size}`;\n\n if (this.currentClass && this.currentClass !== newClass) {\n this.renderer.removeClass(this.el.nativeElement, this.currentClass);\n }\n\n this.renderer.addClass(this.el.nativeElement, newClass);\n this.currentClass = newClass;\n }\n}\n\n// =============================================================================\n// BLUR DIRECTIVE\n// =============================================================================\n\n/**\n * Applies a CSS blur filter to the host element.\n *\n * @example\n * ```html\n * <!-- Element blur -->\n * <img pecbBlur=\"medium\" src=\"photo.jpg\" />\n *\n * <!-- Backdrop blur (glass-morphism) -->\n * <div pecbBlur=\"small\" [backdrop]=\"true\">Frosted glass</div>\n * ```\n */\n@Directive({\n selector: '[pecbBlur]',\n standalone: true\n})\nexport class BlurDirective implements OnInit, OnChanges {\n /** Blur size token */\n pecbBlur = input<BlurSize>('medium');\n\n /** Apply as backdrop-filter instead of filter */\n backdrop = input(false);\n\n private el = inject(ElementRef<HTMLElement>);\n private renderer = inject(Renderer2);\n private currentClass = '';\n\n ngOnInit(): void {\n this.applyClass();\n }\n\n ngOnChanges(): void {\n this.applyClass();\n }\n\n private applyClass(): void {\n const size = this.pecbBlur();\n\n if (!VALID_BLUR_SIZES.has(size)) {\n return;\n }\n\n const prefix = this.backdrop() ? 'pecb-backdrop-blur' : 'pecb-blur';\n const newClass = `${prefix}--${size}`;\n\n if (this.currentClass && this.currentClass !== newClass) {\n this.renderer.removeClass(this.el.nativeElement, this.currentClass);\n }\n\n this.renderer.addClass(this.el.nativeElement, newClass);\n this.currentClass = newClass;\n }\n}\n","import { Component, input, output, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Divider visual variants derived from the Figma design system.\n *\n * | Type | Description |\n * |---------------------|----------------------------------------------------|\n * | default | Simple horizontal line |\n * | with-icon | Line with a centered icon (ng-content) |\n * | with-label | Left-aligned label text, line fills remaining space|\n * | with-title | Centered title text over the line |\n * | with-button | Centered button over the line |\n * | with-title-button | Left title, line, right button |\n */\nexport type DividerType =\n | 'default'\n | 'with-icon'\n | 'with-label'\n | 'with-title'\n | 'with-button'\n | 'with-title-button';\n\n// =============================================================================\n// DIVIDER COMPONENT\n// =============================================================================\n\n@Component({\n selector: 'pecb-divider',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './divider.component.html',\n styleUrls: ['./divider.component.scss']\n})\nexport class DividerComponent {\n /** Unique element ID */\n id = input<string>(generateUniqueId('divider'));\n\n /** Divider variant */\n type = input<DividerType>('default');\n\n /**\n * Title text displayed on the divider.\n * Used by 'with-label', 'with-title', and 'with-title-button' types.\n */\n title = input<string>('');\n\n /**\n * Button label text.\n * Used by 'with-button' and 'with-title-button' types.\n */\n buttonLabel = input<string>('Label');\n\n /**\n * Whether to show the icon inside the button.\n * Defaults to true.\n */\n showButtonIcon = input(true);\n\n /**\n * Whether to show the default + icon for the 'with-icon' type\n * when no content is projected via [dividerIcon].\n * Defaults to true.\n */\n showDefaultIcon = input(true);\n\n /** Accessible label for the divider */\n ariaLabel = input<string | undefined>(undefined);\n\n /** Emits when the button is clicked (for with-button and with-title-button types) */\n buttonClick = output<MouseEvent>();\n\n /** CSS class for the host wrapper */\n dividerClasses = computed(() => {\n return [\n 'pecb-divider',\n `pecb-divider--${this.type()}`\n ];\n });\n\n onButtonClick(event: MouseEvent): void {\n this.buttonClick.emit(event);\n }\n}\n","<div\n [id]=\"id()\"\n [class]=\"dividerClasses().join(' ')\"\n [attr.role]=\"'separator'\"\n [attr.aria-orientation]=\"'horizontal'\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <!-- DEFAULT: simple line -->\n @if (type() === 'default') {\n <div class=\"pecb-divider__line\"></div>\n }\n\n <!-- WITH ICON: line + centered icon (projected or default +) -->\n @if (type() === 'with-icon') {\n <div class=\"pecb-divider__line\"></div>\n <div class=\"pecb-divider__content pecb-divider__content--icon\">\n <ng-content select=\"[dividerIcon]\"></ng-content>\n @if (showDefaultIcon()) {\n <svg class=\"pecb-divider__default-icon\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 5v14M5 12h14\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n </div>\n }\n\n <!-- WITH LABEL: left label + line fills rest -->\n @if (type() === 'with-label') {\n <div class=\"pecb-divider__content pecb-divider__content--label\">\n <span class=\"pecb-divider__label-text\">{{ title() }}</span>\n </div>\n <div class=\"pecb-divider__line pecb-divider__line--flex\"></div>\n }\n\n <!-- WITH TITLE: line + centered title -->\n @if (type() === 'with-title') {\n <div class=\"pecb-divider__line\"></div>\n <div class=\"pecb-divider__content pecb-divider__content--title\">\n <span class=\"pecb-divider__title-text\">{{ title() }}</span>\n </div>\n }\n\n <!-- WITH BUTTON: line + centered button -->\n @if (type() === 'with-button') {\n <div class=\"pecb-divider__line\"></div>\n <div class=\"pecb-divider__content pecb-divider__content--button\">\n <button\n type=\"button\"\n class=\"pecb-divider__button\"\n (click)=\"onButtonClick($event)\"\n >\n @if (showButtonIcon()) {\n <svg class=\"pecb-divider__button-icon\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 4.167v11.666M4.167 10h11.666\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n <span class=\"pecb-divider__button-label\">{{ buttonLabel() }}</span>\n </button>\n </div>\n }\n\n <!-- WITH TITLE AND BUTTON: left title button + line + right button -->\n @if (type() === 'with-title-button') {\n <button\n type=\"button\"\n class=\"pecb-divider__content pecb-divider__content--title-left pecb-divider__title-btn\"\n (click)=\"onButtonClick($event)\"\n >\n <span class=\"pecb-divider__title-text\">{{ title() }}</span>\n </button>\n <div class=\"pecb-divider__line pecb-divider__line--flex\"></div>\n <button\n type=\"button\"\n class=\"pecb-divider__button\"\n (click)=\"onButtonClick($event)\"\n >\n @if (showButtonIcon()) {\n <svg class=\"pecb-divider__button-icon\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 4.167v11.666M4.167 10h11.666\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n <span class=\"pecb-divider__button-label\">{{ buttonLabel() }}</span>\n </button>\n }\n</div>\n","import {\n Component,\n input,\n output,\n computed,\n signal,\n inject,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type CodeSnippetTheme = 'light' | 'dark';\nexport type CodeSnippetVariant =\n | 'default'\n | 'filename'\n | 'filename-actions'\n | 'copy-banner'\n | 'gutter';\n\n// =============================================================================\n// CODE SNIPPET COMPONENT\n// =============================================================================\n\n@Component({\n selector: 'pecb-code-snippet',\n imports: [CommonModule],\n templateUrl: './code-snippet.component.html',\n styleUrls: ['./code-snippet.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CodeSnippetComponent {\n private readonly sanitizer = inject(DomSanitizer);\n\n id = input(generateUniqueId('code-snippet'));\n code = input('');\n highlightedCode = input<string>('');\n language = input('Tailwind Js');\n theme = input<CodeSnippetTheme>('light');\n variant = input<CodeSnippetVariant>('default');\n filename = input('');\n showLineNumbers = input(true);\n showCopy = input(true);\n showFooter = input(true);\n ariaLabel = input('Code snippet');\n\n copied = output<string>();\n\n copyLabel = signal('Copy');\n\n codeLines = computed(() => {\n const codeValue = this.code();\n if (!codeValue) return [];\n return codeValue.split('\\n');\n });\n\n safeHighlightedCode = computed<SafeHtml>(() => {\n const html = this.highlightedCode();\n if (!html) return '';\n return this.sanitizer.bypassSecurityTrustHtml(html);\n });\n\n useHighlighted = computed(() => !!this.highlightedCode());\n\n charCount = computed(() => this.code().length);\n lineCount = computed(() => this.codeLines().length);\n\n get snippetClasses(): string[] {\n return [\n 'pecb-code-snippet',\n `pecb-code-snippet--${this.theme()}`,\n `pecb-code-snippet--${this.variant()}`\n ];\n }\n\n onCopy(): void {\n const codeValue = this.code();\n if (navigator.clipboard) {\n navigator.clipboard.writeText(codeValue).then(() => {\n this.copyLabel.set('Copied!');\n this.copied.emit(codeValue);\n setTimeout(() => this.copyLabel.set('Copy'), 2000);\n });\n }\n }\n}\n","<div\n [id]=\"id()\"\n [class]=\"snippetClasses.join(' ')\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <!-- Header: filename variant (with text copy button) -->\n @if (variant() === 'filename') {\n <div class=\"pecb-code-snippet__header\">\n <div class=\"pecb-code-snippet__filename\">\n <div class=\"pecb-code-snippet__icon-badge\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 13.3333 13.3333\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M6.66667 0C6.34901 0 6.03528 0.0701311 5.74786 0.205387L1.53121 2.18969C0.596563 2.62953 0 3.56958 0 4.60254V9.33333C0 9.99851 0.384153 10.6038 0.986014 10.8871L5.74786 13.1279C6.03528 13.2632 6.34901 13.3333 6.66667 13.3333C6.98432 13.3333 7.29805 13.2632 7.58547 13.1279L12.3473 10.8871C12.9492 10.6038 13.3333 9.99851 13.3333 9.33333V4.60254C13.3333 3.56958 12.7368 2.62953 11.8021 2.18969L7.58547 0.205387C7.29805 0.0701314 6.98432 0 6.66667 0ZM12 8.25464L7.33333 5.92131V1.56033L11.2344 3.39612C11.7017 3.61604 12 4.08606 12 4.60254V8.25464ZM6.66667 7.07869L11.8229 9.65678C11.8091 9.66559 11.7946 9.67357 11.7796 9.68065L7.01774 11.9215C6.90792 11.9732 6.78804 12 6.66667 12C6.54529 12 6.42541 11.9732 6.31559 11.9215L1.55374 9.68065C1.53869 9.67357 1.52425 9.66559 1.51047 9.65678L6.66667 7.07869ZM6 5.92131L1.33333 8.25464V4.60254C1.33333 4.08606 1.63161 3.61604 2.09894 3.39612L6 1.56033V5.92131Z\" fill=\"currentColor\"/>\n </svg>\n </div>\n <span>{{ filename() }}</span>\n </div>\n <div class=\"pecb-code-snippet__header-actions\">\n @if (showCopy()) {\n <button\n type=\"button\"\n class=\"pecb-code-snippet__copy-btn\"\n (click)=\"onCopy()\"\n [attr.aria-label]=\"'Copy code'\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 4.167v11.666M4.167 10h11.666\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n {{ copyLabel() }}\n </button>\n }\n </div>\n </div>\n }\n\n <!-- Header: filename-actions variant (with icon-only square buttons) -->\n @if (variant() === 'filename-actions') {\n <div class=\"pecb-code-snippet__header\">\n <div class=\"pecb-code-snippet__filename\">\n <span>{{ filename() }}</span>\n </div>\n <div class=\"pecb-code-snippet__header-actions\">\n <ng-content select=\"[codeActions]\"></ng-content>\n @if (showCopy()) {\n <button\n type=\"button\"\n class=\"pecb-code-snippet__icon-btn\"\n (click)=\"onCopy()\"\n [attr.aria-label]=\"'Copy code'\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 4.167v11.666M4.167 10h11.666\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button\n type=\"button\"\n class=\"pecb-code-snippet__icon-btn\"\n [attr.aria-label]=\"'More actions'\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 4.167v11.666M4.167 10h11.666\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n </div>\n </div>\n }\n\n <!-- Copy-banner variant: button in its own bordered box, then code in another -->\n @if (variant() === 'copy-banner') {\n <div class=\"pecb-code-snippet__banner-box\">\n <button\n type=\"button\"\n class=\"pecb-code-snippet__copy-banner\"\n (click)=\"onCopy()\"\n [attr.aria-label]=\"'Click to copy the code'\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 4.167v11.666M4.167 10h11.666\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n Click to copy the code\n </button>\n </div>\n }\n\n <!-- Code area -->\n <div class=\"pecb-code-snippet__body\">\n <!-- Gutter: red background with white line numbers -->\n @if (variant() === 'gutter' && showLineNumbers()) {\n <div class=\"pecb-code-snippet__gutter\">\n @for (line of codeLines(); track $index) {\n <span class=\"pecb-code-snippet__line-num\">{{ $index + 1 }}</span>\n }\n </div>\n }\n\n <!-- Standard line numbers (non-gutter variants) -->\n @if (variant() !== 'gutter' && showLineNumbers()) {\n <div class=\"pecb-code-snippet__line-numbers\">\n @for (line of codeLines(); track $index) {\n <span class=\"pecb-code-snippet__line-num\">{{ $index + 1 }}</span>\n }\n </div>\n }\n\n <!-- Code content -->\n <div class=\"pecb-code-snippet__code-wrapper\">\n @if (useHighlighted()) {\n <pre class=\"pecb-code-snippet__code\"><code [innerHTML]=\"safeHighlightedCode()\"></code></pre>\n } @else {\n <pre class=\"pecb-code-snippet__code\"><code>{{ code() }}</code></pre>\n }\n\n <!-- Floating copy button (default/gutter variants) -->\n @if (showCopy() && (variant() === 'default' || variant() === 'gutter')) {\n <button\n type=\"button\"\n class=\"pecb-code-snippet__copy-btn pecb-code-snippet__copy-btn--floating\"\n (click)=\"onCopy()\"\n [attr.aria-label]=\"'Copy code'\"\n >\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 4.167v11.666M4.167 10h11.666\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n {{ copyLabel() }}\n </button>\n }\n </div>\n </div>\n\n <!-- Footer -->\n @if (showFooter()) {\n <div class=\"pecb-code-snippet__footer\">\n <div class=\"pecb-code-snippet__language\">\n <span>{{ language() }}</span>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 6L8 10L12 6\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"pecb-code-snippet__meta\">\n <span>{{ charCount() }} chars</span>\n <span>{{ lineCount() }} lines</span>\n </div>\n </div>\n }\n</div>\n","import { Injectable } from '@angular/core';\nimport { IconName } from './icon-names';\n\n/**\n * Global registry for SVG icons.\n *\n * Icons are registered as inline SVG strings keyed by their `IconName`.\n * The `IconComponent` queries this registry when a `[name]` input is used.\n *\n * @example\n * ```ts\n * import { IconRegistry } from '@pecb-ui/components';\n * import { PECB_ICONS } from '@pecb-ui/components/icons';\n *\n * // Register all icons at once\n * constructor(private reg: IconRegistry) {\n * reg.registerAll(PECB_ICONS);\n * }\n *\n * // Or register individual icons\n * reg.register('check-01', '<svg ...>...</svg>');\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class IconRegistry {\n private readonly icons = new Map<string, string>();\n\n /** Register a single icon by name. */\n register(name: IconName | string, svg: string): void {\n this.icons.set(name, svg);\n }\n\n /** Register many icons at once. */\n registerAll(icons: Record<string, string>): void {\n for (const [name, svg] of Object.entries(icons)) {\n this.icons.set(name, svg);\n }\n }\n\n /** Retrieve an icon SVG string by name. Returns `undefined` if not found. */\n get(name: string): string | undefined {\n return this.icons.get(name);\n }\n\n /** Check whether an icon is registered. */\n has(name: string): boolean {\n return this.icons.has(name);\n }\n\n /** Return all registered icon names. */\n names(): string[] {\n return [...this.icons.keys()];\n }\n}\n","import { Component, input, output, computed, inject, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\nimport { BreadcrumbItem } from '../../shared/interfaces/component.interfaces';\nimport { IconRegistry } from '../icon/icon-registry';\n\n/**\n * Separator style between breadcrumb items.\n *\n * | Type | Description |\n * |---------|---------------------------|\n * | slash | Forward slash `/` |\n * | arrow | Right chevron arrow `>` |\n * | custom | Custom template separator |\n */\nexport type BreadcrumbSeparator = 'slash' | 'arrow' | 'custom';\n\n// =============================================================================\n// BREADCRUMBS COMPONENT\n// =============================================================================\n\n@Component({\n selector: 'pecb-breadcrumbs',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './breadcrumbs.component.html',\n styleUrls: ['./breadcrumbs.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class BreadcrumbsComponent {\n private readonly registry = inject(IconRegistry);\n private readonly sanitizer = inject(DomSanitizer);\n\n /** Unique element ID */\n id = input<string>(generateUniqueId('breadcrumbs'));\n\n /** Array of breadcrumb items to display */\n items = input.required<BreadcrumbItem[]>();\n\n /** Separator style between items */\n separator = input<BreadcrumbSeparator>('slash');\n\n /** Custom separator template (used when separator is 'custom') */\n separatorTemplate = input<TemplateRef<unknown> | null>(null);\n\n /**\n * Global icon color (CSS color value).\n * Applied to all icons unless overridden by the item's `iconColor`.\n * When not set, icons inherit the text color (red for links, gray for current).\n */\n iconColor = input<string>('');\n\n /** Accessible label for the breadcrumb navigation */\n ariaLabel = input<string>('Breadcrumb');\n\n /** Emits the clicked breadcrumb item */\n itemClick = output<BreadcrumbItem>();\n\n /** CSS classes for the host wrapper */\n breadcrumbClasses = computed(() => {\n return [\n 'pecb-breadcrumbs',\n `pecb-breadcrumbs--${this.separator()}`\n ];\n });\n\n /** Whether an item is the last in the list (current page) */\n isLastItem(index: number): boolean {\n return index === this.items().length - 1;\n }\n\n /** Resolve an icon name to a trusted SVG string */\n getIconSvg(iconName: string | undefined): SafeHtml | null {\n if (!iconName) return null;\n const svg = this.registry.get(iconName);\n return svg ? this.sanitizer.bypassSecurityTrustHtml(svg) : null;\n }\n\n /** Resolve icon color: per-item iconColor > global iconColor > inherit */\n getIconColor(item: BreadcrumbItem): string | null {\n return item.iconColor || this.iconColor() || null;\n }\n\n onItemClick(event: Event, item: BreadcrumbItem): void {\n event.preventDefault();\n this.itemClick.emit(item);\n }\n}\n","<nav\n [id]=\"id()\"\n [class]=\"breadcrumbClasses().join(' ')\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <ol class=\"pecb-breadcrumbs__list\">\n @for (item of items(); track $index; let i = $index) {\n <li\n class=\"pecb-breadcrumbs__item\"\n [class.pecb-breadcrumbs__item--active]=\"isLastItem(i)\"\n >\n @if (isLastItem(i)) {\n <!-- Current page — not a link -->\n <span\n class=\"pecb-breadcrumbs__text pecb-breadcrumbs__text--current\"\n [attr.aria-current]=\"'page'\"\n >\n @if (getIconSvg(item.icon); as iconSvg) {\n <span\n class=\"pecb-breadcrumbs__icon\"\n aria-hidden=\"true\"\n [innerHTML]=\"iconSvg\"\n [style.color]=\"getIconColor(item)\"\n ></span>\n }\n {{ item.label }}\n </span>\n } @else {\n <!-- Navigable breadcrumb link -->\n <a\n class=\"pecb-breadcrumbs__link\"\n [href]=\"item.url || '#'\"\n (click)=\"onItemClick($event, item)\"\n >\n @if (getIconSvg(item.icon); as iconSvg) {\n <span\n class=\"pecb-breadcrumbs__icon\"\n aria-hidden=\"true\"\n [innerHTML]=\"iconSvg\"\n [style.color]=\"getIconColor(item)\"\n ></span>\n }\n {{ item.label }}\n </a>\n\n <!-- Separator -->\n <span class=\"pecb-breadcrumbs__separator\" aria-hidden=\"true\">\n @if (separator() === 'slash') {\n /\n } @else if (separator() === 'arrow') {\n <svg class=\"pecb-breadcrumbs__separator-icon\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 12l4-4-4-4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n } @else if (separator() === 'custom' && separatorTemplate()) {\n <ng-container [ngTemplateOutlet]=\"separatorTemplate()!\"></ng-container>\n }\n </span>\n }\n </li>\n }\n </ol>\n</nav>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n} from '@angular/core';\nimport { NgOptimizedImage } from '@angular/common';\n\nexport type ProfileSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\nexport type ProfileIndicator = 'none' | 'online' | 'offline';\nexport type ProfileBadge = 'none' | 'verified' | 'camera';\n\nconst SIZE_PX: Record<ProfileSize, number> = {\n 'xs': 16, 'sm': 24, 'md': 32, 'lg': 40, 'xl': 48, '2xl': 64,\n};\n\n@Component({\n selector: 'pecb-profile',\n standalone: true,\n imports: [NgOptimizedImage],\n templateUrl: './profile.component.html',\n styleUrl: './profile.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClass()',\n },\n})\nexport class ProfileComponent {\n src = input<string | undefined>(undefined);\n initials = input<string | undefined>(undefined);\n alt = input<string>('');\n size = input<ProfileSize>('md');\n indicator = input<ProfileIndicator>('none');\n badge = input<ProfileBadge>('none');\n\n cameraClick = output<MouseEvent>();\n\n hostClass = computed(() => `pecb-profile pecb-profile--${this.size()}`);\n showImage = computed(() => !!this.src());\n showInitials = computed(() => !this.src() && !!this.initials());\n showIcon = computed(() => !this.src() && !this.initials());\n imgSize = computed(() => SIZE_PX[this.size()]);\n\n onCameraClick(event: MouseEvent): void {\n event.stopPropagation();\n this.cameraClick.emit(event);\n }\n}\n","<div class=\"pecb-profile__image-wrap\">\n @if (showImage()) {\n <img\n class=\"pecb-profile__image\"\n [ngSrc]=\"src()!\"\n [width]=\"imgSize()\"\n [height]=\"imgSize()\"\n [alt]=\"alt()\"\n />\n } @else if (showInitials()) {\n <span class=\"pecb-profile__initials\">{{ initials() }}</span>\n } @else {\n <svg class=\"pecb-profile__icon\" viewBox=\"0 0 67 67\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <rect x=\"1.5\" y=\"1.5\" width=\"64\" height=\"64\" rx=\"32\" fill=\"#ECECEC\"/>\n <circle cx=\"33.5\" cy=\"33.5\" r=\"32.75\" fill=\"#ECECEC\" stroke=\"white\" stroke-width=\"1.5\"/>\n <g clip-path=\"url(#pecb-profile-fallback-clip)\">\n <path d=\"M34.3233 35.0794C39.9497 35.0794 44.549 30.4801 44.549 24.8537C44.549 19.2272 39.9497 14.6279 34.3233 14.6279C28.6969 14.6279 24.0977 19.2272 24.0977 24.8537C24.0977 30.4801 28.697 35.0794 34.3233 35.0794Z\" fill=\"white\"/>\n <path d=\"M51.8715 43.2517C51.6036 42.5818 51.2464 41.9567 50.8445 41.3762C48.7904 38.3397 45.6201 36.3303 42.0478 35.8391C41.6013 35.7945 41.1101 35.8837 40.7528 36.1516C38.8773 37.5359 36.6447 38.2504 34.3226 38.2504C32.0006 38.2504 29.7679 37.5359 27.8925 36.1516C27.5352 35.8837 27.044 35.7498 26.5975 35.8391C23.0252 36.3303 19.8102 38.3397 17.8008 41.3762C17.3989 41.9567 17.0416 42.6265 16.7737 43.2517C16.6398 43.5196 16.6844 43.8322 16.8184 44.1001C17.1756 44.7252 17.6221 45.3505 18.024 45.8863C18.6491 46.7347 19.319 47.4938 20.0781 48.2082C20.7032 48.8334 21.4177 49.4139 22.1322 49.9944C25.6598 52.629 29.902 54.0132 34.278 54.0132C38.6541 54.0132 42.8962 52.6289 46.4238 49.9944C47.1383 49.4586 47.8527 48.8334 48.4779 48.2082C49.1924 47.4938 49.9068 46.7346 50.532 45.8863C50.9785 45.3058 51.3805 44.7252 51.7377 44.1001C51.9608 43.8322 52.0055 43.5195 51.8715 43.2517Z\" fill=\"white\"/>\n </g>\n <defs>\n <clipPath id=\"pecb-profile-fallback-clip\">\n <rect width=\"39.3846\" height=\"39.3846\" fill=\"white\" transform=\"translate(14.6284 14.6279)\"/>\n </clipPath>\n </defs>\n </svg>\n }\n</div>\n\n@if (indicator() !== 'none') {\n <span\n class=\"pecb-profile__badge pecb-profile__indicator\"\n [class.pecb-profile__indicator--online]=\"indicator() === 'online'\"\n [class.pecb-profile__indicator--offline]=\"indicator() === 'offline'\"\n [attr.aria-label]=\"indicator() === 'online' ? 'Online' : 'Offline'\"\n ></span>\n}\n\n@if (badge() === 'verified') {\n <span class=\"pecb-profile__badge pecb-profile__verified\" aria-label=\"Verified\">\n <svg viewBox=\"0 0 12 12\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2 6l3 3 5-5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n}\n\n@if (badge() === 'camera') {\n <button\n class=\"pecb-profile__badge pecb-profile__camera\"\n type=\"button\"\n aria-label=\"Edit photo\"\n (click)=\"onCameraClick($event)\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M6.5 2L5.5 3.5H3a1 1 0 0 0-1 1v7a1 1 0 0 0 1 1h10a1 1 0 0 0 1-1v-7a1 1 0 0 0-1-1h-2.5L9.5 2h-3zM8 11a2.5 2.5 0 1 1 0-5 2.5 2.5 0 0 1 0 5z\"/>\n </svg>\n </button>\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n ElementRef,\n input,\n output,\n computed,\n signal,\n effect,\n inject,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { ProfileComponent } from '../profile/profile.component';\nimport { IconRegistry } from '../icon/icon-registry';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES & INTERFACES\n// =============================================================================\n\n/**\n * An action button displayed in the header toolbar.\n */\nexport interface HeaderActionButton {\n /** Registered icon name (e.g. `'bell-01'`, `'cart'`) */\n icon: string;\n /** Accessible label for screen readers */\n label: string;\n /** Unique identifier emitted on click */\n id: string;\n /** Optional numeric badge count */\n badge?: number;\n}\n\n/**\n * Language option for the language selector.\n */\nexport interface HeaderLanguageOption {\n /** Language code (e.g. `'en'`, `'fr'`) */\n code: string;\n /** Display label (e.g. `'English'`, `'French'`) */\n label: string;\n}\n\n/**\n * Category option for the search category dropdown.\n */\nexport interface HeaderSearchCategory {\n /** Display label */\n label: string;\n /** Value emitted on selection */\n value: string;\n}\n\n// =============================================================================\n// HEADER COMPONENT (layout shell)\n// =============================================================================\n\n@Component({\n selector: 'pecb-header',\n standalone: true,\n template: `\n <header\n [id]=\"id()\"\n class=\"pecb-header__container\"\n [attr.aria-label]=\"ariaLabel()\"\n >\n <div class=\"pecb-header__left\">\n <h1 class=\"pecb-header__title\">{{ title() }}</h1>\n </div>\n <div class=\"pecb-header__right\">\n <ng-content></ng-content>\n </div>\n </header>\n `,\n styleUrls: ['./header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { '[class]': '\"pecb-header\"' },\n})\nexport class HeaderComponent {\n /** Unique element ID */\n id = input<string>(generateUniqueId('header'));\n\n /** Page title displayed on the left */\n title = input.required<string>();\n\n /** Accessible label for the header landmark */\n ariaLabel = input<string>('Page header');\n}\n\n// =============================================================================\n// HEADER SEARCH\n// =============================================================================\n\n@Component({\n selector: 'pecb-header-search',\n standalone: true,\n template: `\n <!-- Mobile: search icon button -->\n <button\n class=\"pecb-header__search-toggle\"\n type=\"button\"\n aria-label=\"Open search\"\n (click)=\"toggleExpanded()\"\n [class.pecb-header__search-toggle--active]=\"expanded()\"\n >\n <span aria-hidden=\"true\" [innerHTML]=\"searchIconSvg()\"></span>\n </button>\n\n <!-- Full search bar (always visible on desktop, toggled on mobile) -->\n <div\n class=\"pecb-header__search\"\n [class.pecb-header__search--with-category]=\"hasCategories()\"\n [class.pecb-header__search--expanded]=\"expanded()\"\n >\n <span class=\"pecb-header__search-icon\" aria-hidden=\"true\" [innerHTML]=\"searchIconSvg()\"></span>\n <input\n class=\"pecb-header__search-input\"\n type=\"text\"\n [placeholder]=\"placeholder()\"\n [value]=\"query()\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event)\"\n aria-label=\"Search\"\n />\n @if (hasCategories()) {\n <div class=\"pecb-header__search-category\">\n <button\n class=\"pecb-header__search-category-btn\"\n type=\"button\"\n (click)=\"toggleCategory()\"\n [attr.aria-expanded]=\"categoryOpen()\"\n aria-haspopup=\"listbox\"\n >\n {{ currentCategoryLabel() }}\n <svg class=\"pecb-header__chevron-updown\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5 6.5l3-3 3 3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M5 9.5l3 3 3-3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n @if (categoryOpen()) {\n <ul class=\"pecb-header__dropdown-panel\" role=\"listbox\">\n @for (cat of categories(); track cat.value) {\n <li\n class=\"pecb-header__dropdown-option\"\n role=\"option\"\n [class.pecb-header__dropdown-option--selected]=\"cat.value === selectedCategoryValue()\"\n (click)=\"onCategorySelect(cat)\"\n >\n {{ cat.label }}\n </li>\n }\n </ul>\n }\n </div>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '(document:click)': 'onDocumentClick($event)',\n },\n})\nexport class HeaderSearchComponent {\n private readonly el = inject(ElementRef);\n private readonly registry = inject(IconRegistry);\n private readonly sanitizer = inject(DomSanitizer);\n\n /** Search placeholder text */\n placeholder = input<string>('Search...');\n\n /** Category options. When provided, embeds a category dropdown. */\n categories = input<HeaderSearchCategory[]>([]);\n\n /** Emits the search query as the user types */\n searchChange = output<string>();\n\n /** Emits the search query on Enter key */\n searchSubmit = output<string>();\n\n /** Emits the selected category value */\n categoryChange = output<string>();\n\n // ── Internal state ──────────────────────────────────────────────────────\n\n query = signal('');\n categoryOpen = signal(false);\n selectedCategoryValue = signal('');\n expanded = signal(false);\n\n hasCategories = computed(() => this.categories().length > 0);\n\n currentCategoryLabel = computed(() => {\n const cats = this.categories();\n const val = this.selectedCategoryValue();\n if (!cats.length) return '';\n if (!val) return cats[0].label;\n return cats.find(c => c.value === val)?.label ?? cats[0].label;\n });\n\n searchIconSvg = computed<SafeHtml>(() => {\n const svg = this.registry.get('search-01') ?? '';\n return this.sanitizer.bypassSecurityTrustHtml(svg);\n });\n\n onDocumentClick(event: MouseEvent): void {\n if (!this.el.nativeElement.contains(event.target)) {\n this.categoryOpen.set(false);\n this.expanded.set(false);\n }\n }\n\n onInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.query.set(value);\n this.searchChange.emit(value);\n }\n\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter') {\n this.searchSubmit.emit(this.query());\n }\n if (event.key === 'Escape') {\n this.expanded.set(false);\n }\n }\n\n toggleExpanded(): void {\n this.expanded.update(v => !v);\n }\n\n toggleCategory(): void {\n this.categoryOpen.update(v => !v);\n }\n\n onCategorySelect(cat: HeaderSearchCategory): void {\n this.selectedCategoryValue.set(cat.value);\n this.categoryOpen.set(false);\n this.categoryChange.emit(cat.value);\n }\n}\n\n// =============================================================================\n// HEADER LANGUAGE\n// =============================================================================\n\n@Component({\n selector: 'pecb-header-language',\n standalone: true,\n template: `\n <div class=\"pecb-header__language\">\n <button\n class=\"pecb-header__language-btn\"\n type=\"button\"\n (click)=\"toggle()\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"listbox\"\n >\n <span class=\"pecb-header__language-icon\" aria-hidden=\"true\" [innerHTML]=\"globeIconSvg()\"></span>\n <span class=\"pecb-header__language-label\">{{ currentLabel() }}</span>\n <svg class=\"pecb-header__chevron\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 6l4 4 4-4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n @if (isOpen()) {\n <ul class=\"pecb-header__dropdown-panel\" role=\"listbox\">\n @for (lang of options(); track lang.code) {\n <li\n class=\"pecb-header__dropdown-option\"\n role=\"option\"\n [class.pecb-header__dropdown-option--selected]=\"lang.code === currentCode()\"\n (click)=\"onSelect(lang)\"\n >\n {{ lang.label }}\n </li>\n }\n </ul>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '(document:click)': 'onDocumentClick($event)',\n },\n})\nexport class HeaderLanguageComponent {\n private readonly el = inject(ElementRef);\n private readonly registry = inject(IconRegistry);\n private readonly sanitizer = inject(DomSanitizer);\n\n /** Available language options */\n options = input.required<HeaderLanguageOption[]>();\n\n /** Currently selected language code */\n selected = input<string>('en');\n\n /** Emits the selected language code */\n languageChange = output<string>();\n\n // ── Internal state ──────────────────────────────────────────────────────\n\n isOpen = signal(false);\n currentCode = signal('');\n\n /** Sync internal state when parent changes `selected` input */\n private readonly selectedSync = effect(() => {\n this.currentCode.set(this.selected());\n });\n\n currentLabel = computed(() => {\n const code = this.currentCode();\n const match = this.options().find(l => l.code === code);\n return match?.label ?? code;\n });\n\n globeIconSvg = computed<SafeHtml>(() => {\n const svg = this.registry.get('globe-01') ?? '';\n return this.sanitizer.bypassSecurityTrustHtml(svg);\n });\n\n onDocumentClick(event: MouseEvent): void {\n if (!this.el.nativeElement.contains(event.target)) {\n this.isOpen.set(false);\n }\n }\n\n toggle(): void {\n this.isOpen.update(v => !v);\n }\n\n onSelect(lang: HeaderLanguageOption): void {\n this.currentCode.set(lang.code);\n this.isOpen.set(false);\n this.languageChange.emit(lang.code);\n }\n}\n\n// =============================================================================\n// HEADER ACTIONS\n// =============================================================================\n\n@Component({\n selector: 'pecb-header-actions',\n standalone: true,\n template: `\n <div class=\"pecb-header__actions\">\n @for (action of items(); track action.id) {\n <button\n class=\"pecb-header__action-btn\"\n type=\"button\"\n [attr.aria-label]=\"action.label\"\n (click)=\"onActionClick(action.id)\"\n >\n <span class=\"pecb-header__action-icon\" [innerHTML]=\"getIconSvg(action.icon)\" aria-hidden=\"true\"></span>\n @if (action.badge) {\n <span class=\"pecb-header__action-badge\">{{ action.badge }}</span>\n }\n </button>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class HeaderActionsComponent {\n private readonly registry = inject(IconRegistry);\n private readonly sanitizer = inject(DomSanitizer);\n\n /** Action buttons to render */\n items = input.required<HeaderActionButton[]>();\n\n /** Emits the action button `id` when clicked */\n actionClick = output<string>();\n\n getIconSvg(iconName: string): SafeHtml {\n const svg = this.registry.get(iconName) ?? '';\n return this.sanitizer.bypassSecurityTrustHtml(svg);\n }\n\n onActionClick(id: string): void {\n this.actionClick.emit(id);\n }\n}\n\n// =============================================================================\n// HEADER USER\n// =============================================================================\n\n@Component({\n selector: 'pecb-header-user',\n standalone: true,\n imports: [ProfileComponent],\n template: `\n <button\n [class]=\"hostClasses()\"\n type=\"button\"\n (click)=\"onUserClick()\"\n [attr.aria-label]=\"'User menu: ' + name()\"\n >\n <div class=\"pecb-header__user-info\">\n <span class=\"pecb-header__user-name\">{{ name() }}</span>\n <span class=\"pecb-header__user-role\">{{ role() }}</span>\n </div>\n <pecb-profile\n [src]=\"avatarSrc()\"\n [initials]=\"avatarInitials()\"\n [alt]=\"name()\"\n size=\"lg\"\n ></pecb-profile>\n </button>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class HeaderUserComponent {\n /** User display name */\n name = input.required<string>();\n\n /** User role label */\n role = input.required<string>();\n\n /** Avatar image URL */\n avatarSrc = input<string | undefined>(undefined);\n\n /** Fallback initials when no image */\n avatarInitials = input<string | undefined>(undefined);\n\n /** Avatar shape — `'circle'` for users, `'square'` for companies */\n avatarShape = input<'circle' | 'square'>('circle');\n\n /** Emits when the user profile area is clicked */\n userClick = output<void>();\n\n hostClasses = computed(() => {\n const classes = ['pecb-header__user'];\n if (this.avatarShape() === 'square') {\n classes.push('pecb-header__user--partner');\n }\n return classes.join(' ');\n });\n\n onUserClick(): void {\n this.userClick.emit();\n }\n}\n\n// =============================================================================\n// HEADER DIVIDER\n// =============================================================================\n\n@Component({\n selector: 'pecb-header-divider',\n standalone: true,\n template: `<span class=\"pecb-header__divider\" aria-hidden=\"true\"></span>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class HeaderDividerComponent {}\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n ContentChild,\n TemplateRef,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface VirtualTableColumn {\n key: string;\n label: string;\n width?: string;\n align?: 'left' | 'center' | 'right';\n type?: 'text' | 'progress' | 'status' | 'custom';\n cellTemplate?: TemplateRef<any>;\n}\n\nexport interface VirtualTableProgressConfig {\n valueKey: string;\n maxKey: string;\n}\n\nexport interface VirtualTablePageEvent {\n page: number;\n pageSize: number;\n}\n\n// =============================================================================\n// VIRTUAL TABLE COMPONENT\n// =============================================================================\n\n@Component({\n selector: 'pecb-virtual-table',\n imports: [CommonModule],\n templateUrl: './virtual-table.component.html',\n styleUrls: ['./virtual-table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class VirtualTableComponent {\n @ContentChild('expandedRow') expandedRowTemplate!: TemplateRef<any>;\n\n id = input(generateUniqueId('vtable'));\n columns = input<VirtualTableColumn[]>([]);\n data = input<any[]>([]);\n progressConfig = input<VirtualTableProgressConfig | null>(null);\n expandable = input(true);\n showToolbar = input(true);\n actionLabel = input('');\n searchPlaceholder = input('Search...');\n showSearch = input(true);\n showFilter = input(true);\n totalItems = input(0);\n pageSize = input(10);\n currentPage = input(1);\n showPagination = input(true);\n ariaLabel = input('Virtual table');\n\n rowToggled = output<{ row: any; index: number; expanded: boolean }>();\n actionClicked = output<void>();\n searchChanged = output<string>();\n filterClicked = output<void>();\n pageChanged = output<VirtualTablePageEvent>();\n\n expandedRows = signal<Set<number>>(new Set());\n\n paginationStart = computed(() => {\n return (this.currentPage() - 1) * this.pageSize() + 1;\n });\n\n paginationEnd = computed(() => {\n return Math.min(this.currentPage() * this.pageSize(), this.totalItems());\n });\n\n totalPages = computed(() => {\n return Math.ceil(this.totalItems() / this.pageSize());\n });\n\n visiblePages = computed(() => {\n const total = this.totalPages();\n const current = this.currentPage();\n const pages: (number | '...')[] = [];\n\n if (total <= 5) {\n for (let i = 1; i <= total; i++) pages.push(i);\n } else {\n pages.push(1);\n if (current > 3) pages.push('...');\n const start = Math.max(2, current - 1);\n const end = Math.min(total - 1, current + 1);\n for (let i = start; i <= end; i++) pages.push(i);\n if (current < total - 2) pages.push('...');\n pages.push(total);\n }\n\n return pages;\n });\n\n isExpanded(index: number): boolean {\n return this.expandedRows().has(index);\n }\n\n toggleRow(index: number): void {\n const current = new Set(this.expandedRows());\n const wasExpanded = current.has(index);\n\n if (wasExpanded) {\n current.delete(index);\n } else {\n current.add(index);\n }\n\n this.expandedRows.set(current);\n this.rowToggled.emit({\n row: this.data()[index],\n index,\n expanded: !wasExpanded\n });\n }\n\n getCellValue(row: any, key: string): any {\n return key.split('.').reduce((obj, k) => obj?.[k], row);\n }\n\n getProgressValue(row: any): number {\n const config = this.progressConfig();\n if (!config) return 0;\n return this.getCellValue(row, config.valueKey) || 0;\n }\n\n getProgressMax(row: any): number {\n const config = this.progressConfig();\n if (!config) return 100;\n return this.getCellValue(row, config.maxKey) || 100;\n }\n\n getProgressPercent(row: any): number {\n const max = this.getProgressMax(row);\n if (max === 0) return 0;\n return Math.min(100, (this.getProgressValue(row) / max) * 100);\n }\n\n getProgressColor(row: any): string {\n const percent = this.getProgressPercent(row);\n if (percent >= 100) return '#57bc57'; // Figma: successful-light\n if (percent >= 60) return '#ff9c4a'; // Figma: pending-light\n return '#ff606f'; // Figma: cancelled-light\n }\n\n onPageChange(page: number): void {\n if (page < 1 || page > this.totalPages()) return;\n this.pageChanged.emit({ page, pageSize: this.pageSize() });\n }\n}\n","<div\n [id]=\"id()\"\n class=\"pecb-vtable\"\n role=\"region\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <!-- Toolbar -->\n @if (showToolbar()) {\n <div class=\"pecb-vtable__toolbar\">\n <div class=\"pecb-vtable__toolbar-left\">\n @if (actionLabel()) {\n <button\n type=\"button\"\n class=\"pecb-vtable__action-btn\"\n (click)=\"actionClicked.emit()\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 13.5 13.5\" fill=\"none\">\n <path d=\"M6.75 0.75L6.75 12.75M12.75 6.75L0.75 6.75\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n {{ actionLabel() }}\n </button>\n }\n <ng-content select=\"[toolbarLeft]\"></ng-content>\n </div>\n <div class=\"pecb-vtable__toolbar-right\">\n <ng-content select=\"[toolbarRight]\"></ng-content>\n @if (showSearch()) {\n <div class=\"pecb-vtable__search\">\n <svg class=\"pecb-vtable__search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 16.5 16.5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15.75 15.75L12.125 12.125M14.0833 7.41667C14.0833 11.0986 11.0986 14.0833 7.41667 14.0833C3.73477 14.0833 0.75 11.0986 0.75 7.41667C0.75 3.73477 3.73477 0.75 7.41667 0.75C11.0986 0.75 14.0833 3.73477 14.0833 7.41667Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <input\n type=\"text\"\n class=\"pecb-vtable__search-input\"\n [placeholder]=\"searchPlaceholder()\"\n (input)=\"searchChanged.emit($any($event.target).value)\"\n />\n </div>\n }\n @if (showFilter()) {\n <button\n type=\"button\"\n class=\"pecb-vtable__filter-btn\"\n (click)=\"filterClicked.emit()\"\n aria-label=\"Filter\"\n >\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 13.5V3.75M6 13.5C6.39782 13.5 6.77936 13.658 7.06066 13.9393C7.34196 14.2206 7.5 14.6022 7.5 15C7.5 15.3978 7.34196 15.7794 7.06066 16.0607C6.77936 16.342 6.39782 16.5 6 16.5M6 13.5C5.60218 13.5 5.22064 13.658 4.93934 13.9393C4.65804 14.2206 4.5 14.6022 4.5 15C4.5 15.3978 4.65804 15.7794 4.93934 16.0607C5.22064 16.342 5.60218 16.5 6 16.5M6 16.5V20.25M18 13.5V3.75M18 13.5C18.3978 13.5 18.7794 13.658 19.0607 13.9393C19.342 14.2206 19.5 14.6022 19.5 15C19.5 15.3978 19.342 15.7794 19.0607 16.0607C18.7794 16.342 18.3978 16.5 18 16.5M18 13.5C17.6022 13.5 17.2206 13.658 16.9393 13.9393C16.658 14.2206 16.5 14.6022 16.5 15C16.5 15.3978 16.658 15.7794 16.9393 16.0607C17.2206 16.342 17.6022 16.5 18 16.5M18 16.5V20.25M12 7.5V3.75M12 7.5C12.3978 7.5 12.7794 7.65804 13.0607 7.93934C13.342 8.22064 13.5 8.60218 13.5 9C13.5 9.39782 13.342 9.77936 13.0607 10.0607C12.7794 10.342 12.3978 10.5 12 10.5M12 7.5C11.6022 7.5 11.2206 7.65804 10.9393 7.93934C10.658 8.22064 10.5 8.60218 10.5 9C10.5 9.39782 10.658 9.77936 10.9393 10.0607C11.2206 10.342 11.6022 10.5 12 10.5M12 10.5V20.25\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n </div>\n </div>\n }\n\n <!-- Table -->\n <div class=\"pecb-vtable__table-wrapper\">\n <table class=\"pecb-vtable__table\" role=\"grid\">\n <!-- Header -->\n <thead class=\"pecb-vtable__head\">\n <tr class=\"pecb-vtable__head-row\">\n @if (expandable()) {\n <th class=\"pecb-vtable__head-cell pecb-vtable__head-cell--toggle\" scope=\"col\">\n <span class=\"pecb-vtable__sr-only\">Expand</span>\n </th>\n }\n @for (col of columns(); track col.key) {\n <th\n class=\"pecb-vtable__head-cell\"\n [style.width]=\"col.width || 'auto'\"\n [style.text-align]=\"col.align || 'left'\"\n scope=\"col\"\n >\n {{ col.label }}\n </th>\n }\n </tr>\n </thead>\n\n <!-- Body -->\n <tbody class=\"pecb-vtable__body\">\n @for (row of data(); track $index; let i = $index) {\n <!-- Main row -->\n <tr\n class=\"pecb-vtable__row\"\n [class.pecb-vtable__row--expanded]=\"isExpanded(i)\"\n >\n @if (expandable()) {\n <td class=\"pecb-vtable__cell pecb-vtable__cell--toggle\">\n <button\n type=\"button\"\n class=\"pecb-vtable__toggle-btn\"\n [attr.aria-expanded]=\"isExpanded(i)\"\n [attr.aria-label]=\"isExpanded(i) ? 'Collapse row' : 'Expand row'\"\n (click)=\"toggleRow(i)\"\n >\n @if (isExpanded(i)) {\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\">\n <path d=\"M8.5 4.5L0.5 4.5\" stroke=\"currentColor\" stroke-linecap=\"round\"/>\n </svg>\n } @else {\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"9\" height=\"9\" viewBox=\"0 0 9 9\" fill=\"none\">\n <path d=\"M4.5 0.5L4.5 8.5M8.5 4.5L0.5 4.5\" stroke=\"currentColor\" stroke-linecap=\"round\"/>\n </svg>\n }\n </button>\n </td>\n }\n @for (col of columns(); track col.key) {\n <td\n class=\"pecb-vtable__cell\"\n [style.text-align]=\"col.align || 'left'\"\n >\n @if (col.type === 'progress' && progressConfig()) {\n <div class=\"pecb-vtable__progress\">\n <div class=\"pecb-vtable__progress-track\">\n <div\n class=\"pecb-vtable__progress-fill\"\n [style.width.%]=\"getProgressPercent(row)\"\n [style.background-color]=\"getProgressColor(row)\"\n ></div>\n </div>\n <span class=\"pecb-vtable__progress-text\">\n {{ getProgressValue(row) }}/{{ getProgressMax(row) }}\n </span>\n </div>\n } @else if (col.cellTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"col.cellTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: getCellValue(row, col.key), row: row, index: i }\"\n ></ng-container>\n } @else {\n {{ getCellValue(row, col.key) }}\n }\n </td>\n }\n </tr>\n\n <!-- Expanded content row -->\n @if (expandable() && isExpanded(i) && expandedRowTemplate) {\n <tr class=\"pecb-vtable__expanded-row\">\n <td [attr.colspan]=\"columns().length + 1\" class=\"pecb-vtable__expanded-cell\">\n <ng-container\n [ngTemplateOutlet]=\"expandedRowTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\"\n ></ng-container>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n\n <!-- Pagination -->\n @if (showPagination() && totalItems() > 0) {\n <div class=\"pecb-vtable__pagination\">\n <span class=\"pecb-vtable__pagination-info\">\n {{ paginationStart() }}&ndash;{{ paginationEnd() }} of {{ totalItems() }} Items\n </span>\n <div class=\"pecb-vtable__pagination-controls\">\n <span class=\"pecb-vtable__pagination-label\">Items per page:</span>\n <span class=\"pecb-vtable__pagination-size\">{{ pageSize() }} ▾</span>\n </div>\n <div class=\"pecb-vtable__pagination-pages\">\n <button\n type=\"button\"\n class=\"pecb-vtable__page-btn\"\n [disabled]=\"currentPage() <= 1\"\n (click)=\"onPageChange(currentPage() - 1)\"\n aria-label=\"Previous page\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M10 12L6 8l4-4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n @for (page of visiblePages(); track $index) {\n @if (page === '...') {\n <span class=\"pecb-vtable__page-ellipsis\">…</span>\n } @else {\n <button\n type=\"button\"\n class=\"pecb-vtable__page-btn\"\n [class.pecb-vtable__page-btn--active]=\"page === currentPage()\"\n (click)=\"onPageChange(+page)\"\n [attr.aria-label]=\"'Page ' + page\"\n [attr.aria-current]=\"page === currentPage() ? 'page' : null\"\n >\n {{ page }}\n </button>\n }\n }\n <button\n type=\"button\"\n class=\"pecb-vtable__page-btn\"\n [disabled]=\"currentPage() >= totalPages()\"\n (click)=\"onPageChange(currentPage() + 1)\"\n aria-label=\"Next page\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 4l4 4-4 4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </div>\n }\n</div>\n","import { Component, input, output, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Search bar mode.\n *\n * | Mode | Description |\n * |----------|----------------------------------------------------|\n * | none | No search bar |\n * | simple | Compact search input only |\n * | advanced | Search input with a toggle button for filter fields |\n */\nexport type SearchMode = 'none' | 'simple' | 'advanced';\n\n// =============================================================================\n// PAGE TOOLBAR COMPONENT\n// =============================================================================\n\n/**\n * A positioning layout component that enforces the PECB design system rules\n * for buttons, tabs, search bars, and banners on any page.\n *\n * **Design rules (from Figma):**\n * - Buttons are always on the **left**\n * - Search bar is always on the **right**\n * - When a banner exists, buttons go **above** it, search goes **below** it\n * - When buttons + tabs coexist without a banner, a **divider** separates them\n * - Tabs + search share the same row (tabs left, search right)\n *\n * **Content projection slots:**\n * - `[toolbarButtons]` — action buttons (left side)\n * - `[toolbarTabs]` — tab navigation (left side, below banner or after divider)\n * - `[toolbarSearch]` — search bar (right side)\n * - `[toolbarBanner]` — profile banner / header area\n * - `[toolbarAdvancedSearch]` — expandable advanced filter fields\n * - `[toolbarBackButton]` — go-back navigation (top-left, above everything)\n *\n * @example\n * ```html\n * <!-- Simple: buttons left, search right -->\n * <pecb-general>\n * <ng-container toolbarButtons>\n * <button>Primary</button>\n * </ng-container>\n * <ng-container toolbarSearch>\n * <input placeholder=\"Search...\" />\n * </ng-container>\n * </pecb-general>\n *\n * <!-- With banner: buttons above, tabs+search below -->\n * <pecb-general [hasBanner]=\"true\" [hasTabs]=\"true\">\n * <ng-container toolbarButtons>...</ng-container>\n * <ng-container toolbarBanner>...</ng-container>\n * <ng-container toolbarTabs>...</ng-container>\n * <ng-container toolbarSearch>...</ng-container>\n * </pecb-general>\n * ```\n */\n@Component({\n selector: 'pecb-general',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './general.component.html',\n styleUrls: ['./general.component.scss']\n})\nexport class GeneralComponent {\n /** Unique element ID */\n id = input<string>(generateUniqueId('toolbar'));\n\n /** Whether the toolbar has action buttons */\n hasButtons = input(false);\n\n /** Show Primary Button */\n showPrimaryBtn = input(false);\n\n /** Show Secondary Button 1 */\n showSecondaryBtn = input(false);\n\n /** Show Secondary Button 2 */\n showSecondaryBtn2 = input(false);\n\n /** Whether the toolbar has tab navigation */\n hasTabs = input(false);\n\n /** Whether the toolbar has a banner/profile header */\n hasBanner = input(false);\n\n /** Profile image URL. Falls back to a user silhouette when empty. */\n profileImage = input<string>('');\n\n /** Profile display name (e.g. \"John Doe\") */\n profileName = input<string>('');\n\n /** Profile email address */\n profileEmail = input<string>('');\n\n /** Profile user ID (e.g. \"181793\") */\n profileId = input<string>('');\n\n /** Role / status badges shown below the name (e.g. [\"Member\"] or [\"Partner\", \"Auditor\"]) */\n profileRoles = input<string[]>([]);\n\n /** Whether the toolbar has a back button */\n hasBackButton = input(false);\n\n /** Search bar mode: 'none', 'simple', or 'advanced' */\n searchMode = input<SearchMode>('none');\n\n /** Whether the advanced search panel is currently expanded */\n advancedSearchOpen = input(false);\n\n /** Emits when the advanced search toggle is clicked */\n advancedSearchToggle = output<boolean>();\n\n /** Accessible label for the toolbar region */\n ariaLabel = input<string>('Page toolbar');\n\n /** Whether a search bar is present */\n hasSearch = computed(() => this.searchMode() !== 'none');\n\n /** Whether any button (projected or built-in) is visible */\n hasAnyButton = computed(() =>\n this.hasButtons() || this.showPrimaryBtn() || this.showSecondaryBtn() || this.showSecondaryBtn2()\n );\n\n /** Whether built-in profile content should render inside the banner */\n hasProfile = computed(() => !!this.profileName());\n\n /**\n * Whether to show a divider between buttons and tabs.\n * Only when both exist AND there is no banner.\n */\n showDivider = computed(() =>\n this.hasAnyButton() && this.hasTabs() && !this.hasBanner()\n );\n\n /**\n * Layout mode determines the overall structure.\n *\n * - 'flat': no banner — everything in stacked rows\n * - 'banner': banner present — buttons above, tabs+search below\n */\n layoutMode = computed<'flat' | 'banner'>(() =>\n this.hasBanner() ? 'banner' : 'flat'\n );\n\n onAdvancedSearchToggle(): void {\n this.advancedSearchToggle.emit(!this.advancedSearchOpen());\n }\n}\n","<div\n [id]=\"id()\"\n class=\"pecb-general\"\n [class.pecb-general--flat]=\"layoutMode() === 'flat'\"\n [class.pecb-general--banner-layout]=\"layoutMode() === 'banner'\"\n [class.pecb-general--has-buttons]=\"hasAnyButton()\"\n [class.pecb-general--has-tabs]=\"hasTabs()\"\n [class.pecb-general--has-search]=\"hasSearch()\"\n [class.pecb-general--has-back]=\"hasBackButton()\"\n [class.pecb-general--has-divider]=\"showDivider()\"\n role=\"toolbar\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <!-- BACK ROW -->\n <div class=\"pecb-general__back-row\">\n <ng-content select=\"[toolbarBackButton]\"></ng-content>\n </div>\n\n <!-- BUTTONS ROW -->\n <div class=\"pecb-general__buttons-row\">\n <ng-content select=\"[toolbarButtons]\"></ng-content>\n @if (showPrimaryBtn() || showSecondaryBtn() || showSecondaryBtn2()) {\n <div class=\"pecb-general__built-in-buttons\">\n @if (showPrimaryBtn()) {\n <ng-content select=\"[toolbarPrimaryBtn]\"></ng-content>\n }\n @if (showSecondaryBtn()) {\n <ng-content select=\"[toolbarSecondaryBtn]\"></ng-content>\n }\n @if (showSecondaryBtn2()) {\n <ng-content select=\"[toolbarSecondaryBtn2]\"></ng-content>\n }\n </div>\n }\n </div>\n\n <!-- BANNER -->\n <div class=\"pecb-general__banner\">\n @if (hasProfile()) {\n <!-- Built-in profile card -->\n <div class=\"pecb-general__profile\">\n <div class=\"pecb-general__profile-avatar\">\n @if (profileImage()) {\n <img [src]=\"profileImage()\" alt=\"\" class=\"pecb-general__profile-avatar-img\" />\n } @else {\n <svg class=\"pecb-general__profile-avatar-fallback\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"24\" cy=\"18\" r=\"8\" fill=\"#c2c2c2\"/>\n <path d=\"M8 42c0-8.837 7.163-16 16-16s16 7.163 16 16\" fill=\"#c2c2c2\"/>\n </svg>\n }\n </div>\n <div class=\"pecb-general__profile-info\">\n <span class=\"pecb-general__profile-name\">{{ profileName() }}</span>\n <div class=\"pecb-general__profile-meta\">\n @if (profileEmail()) {\n <span class=\"pecb-general__profile-email\">{{ profileEmail() }}</span>\n }\n @if (profileEmail() && profileId()) {\n <span class=\"pecb-general__profile-dot\"></span>\n }\n @if (profileId()) {\n <span class=\"pecb-general__profile-id\">ID: {{ profileId() }}</span>\n }\n </div>\n @if (profileRoles().length) {\n <div class=\"pecb-general__profile-roles\">\n @for (role of profileRoles(); track role) {\n <span class=\"pecb-general__profile-badge\">{{ role }}</span>\n }\n </div>\n }\n </div>\n </div>\n }\n <ng-content select=\"[toolbarBanner]\"></ng-content>\n </div>\n\n <!-- DIVIDER (between buttons and tabs when no banner) -->\n <div class=\"pecb-general__divider\"></div>\n\n <!-- TABS -->\n <div class=\"pecb-general__tabs\">\n <ng-content select=\"[toolbarTabs]\"></ng-content>\n </div>\n\n <!-- SEARCH -->\n <div class=\"pecb-general__search\">\n <ng-content select=\"[toolbarSearch]\"></ng-content>\n @if (searchMode() === 'advanced') {\n <button\n type=\"button\"\n class=\"pecb-general__advanced-toggle\"\n [class.pecb-general__advanced-toggle--active]=\"advancedSearchOpen()\"\n (click)=\"onAdvancedSearchToggle()\"\n aria-label=\"Toggle advanced search\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M3 8h4m0 0a2 2 0 1 0 4 0 2 2 0 0 0-4 0ZM13 8h8M3 16h8m0 0a2 2 0 1 0 4 0 2 2 0 0 0-4 0Zm6 0h8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n }\n </div>\n\n <!-- ADVANCED SEARCH PANEL -->\n @if (searchMode() === 'advanced' && advancedSearchOpen()) {\n <div class=\"pecb-general__advanced-panel\">\n <ng-content select=\"[toolbarAdvancedSearch]\"></ng-content>\n </div>\n }\n</div>\n","import { Component, input, output, computed, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\nimport { SidebarComponent, SidebarSection, SidebarMenuItem } from '../sidebar/sidebar.component';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type ContentStyle = 'card' | 'transparent' | 'white';\nexport type ProfileType = 'person' | 'company';\n\n/**\n * Controls which search input appears in the header:\n * - 'none' : no search input\n * - 'simple' : plain text search (magnifier + input)\n * - 'product' : product search with a category dropdown appended\n */\nexport type HeaderSearchType = 'none' | 'simple' | 'product';\n\n// =============================================================================\n// PROJECT LAYOUT COMPONENT\n// =============================================================================\n\n@Component({\n selector: 'pecb-project-layout',\n standalone: true,\n imports: [CommonModule, SidebarComponent],\n templateUrl: './project-layout.component.html',\n styleUrls: ['./project-layout.component.scss']\n})\nexport class ProjectLayoutComponent {\n\n // ---------------------------------------------------------------------------\n // Layout\n // ---------------------------------------------------------------------------\n id = input<string>(generateUniqueId('layout'));\n pageTitle = input<string>('');\n contentStyle = input<ContentStyle>('card');\n showSidebar = input(true);\n showHeader = input(true);\n ariaLabel = input<string>('Page layout');\n\n // ---------------------------------------------------------------------------\n // Sidebar — delegated to pecb-sidebar\n // ---------------------------------------------------------------------------\n sidebarSections = input<SidebarSection[]>([]);\n sidebarShowHeader = input(true);\n sidebarLogoSrc = input<string>();\n sidebarLogo = input<string>();\n sidebarCollapsedLogo = input<string>();\n sidebarShowFooter = input(false);\n\n // ---------------------------------------------------------------------------\n // Header — search\n // ---------------------------------------------------------------------------\n /** Which search variant to show (none / simple / product). */\n searchType = input<HeaderSearchType>('none');\n /** Placeholder text for the simple search input. */\n searchPlaceholder = input<string>('Search...');\n /** Placeholder text for the product search input. */\n productSearchPlaceholder = input<string>('Search products');\n /**\n * Options for the product-search category dropdown.\n * First item is selected by default.\n */\n productCategories = input<string[]>(['All']);\n\n // ---------------------------------------------------------------------------\n // Header — icon buttons (each hidden by default except bell/language)\n // ---------------------------------------------------------------------------\n showLanguage = input(true);\n language = input<string>('English');\n showBell = input(true);\n showCart = input(false);\n showCalendar = input(false);\n\n // ---------------------------------------------------------------------------\n // Header — profile block\n // ---------------------------------------------------------------------------\n profileName = input<string>('Name/Company');\n profileRole = input<string>('Role');\n /** Full URL to the avatar image. Leave empty to use the fallback icon. */\n profileImage = input<string>('');\n /**\n * Determines the fallback avatar icon when profileImage is empty.\n * - 'person' : silhouette (default)\n * - 'company' : building icon\n */\n profileType = input<ProfileType>('person');\n\n // ---------------------------------------------------------------------------\n // Outputs\n // ---------------------------------------------------------------------------\n /** Emits the current search string as the user types in the simple search. */\n searchChange = output<string>();\n /** Emits the current search string as the user types in the product search. */\n productSearchChange = output<string>();\n /** Emits the selected category from the product-search dropdown. */\n categoryChange = output<string>();\n languageClick = output<void>();\n bellClick = output<void>();\n cartClick = output<void>();\n calendarClick = output<void>();\n profileClick = output<void>();\n sidebarItemClick = output<SidebarMenuItem>();\n\n // ---------------------------------------------------------------------------\n // Internal state\n // ---------------------------------------------------------------------------\n sidebarCollapsed = signal(false);\n\n onCategoryChange(event: Event): void {\n const value = (event.target as HTMLSelectElement).value;\n this.categoryChange.emit(value);\n }\n\n // ---------------------------------------------------------------------------\n // Computed CSS classes\n // ---------------------------------------------------------------------------\n layoutClasses = computed(() => [\n 'pecb-project-layout',\n !this.showSidebar() ? 'pecb-project-layout--no-sidebar' : '',\n !this.showHeader() ? 'pecb-project-layout--no-header' : ''\n ].filter(Boolean));\n\n contentClasses = computed(() => [\n 'pecb-project-layout__content',\n this.contentStyle() === 'card' ? 'pecb-project-layout__content--card' : '',\n this.contentStyle() === 'white' ? 'pecb-project-layout__content--white' : ''\n ].filter(Boolean));\n}\n","<div\n [id]=\"id()\"\n [ngClass]=\"layoutClasses()\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <!-- =========================================================\n SIDEBAR\n ========================================================= -->\n @if (showSidebar()) {\n <div class=\"pecb-project-layout__sidebar\">\n <pecb-sidebar\n [sections]=\"sidebarSections()\"\n [showHeader]=\"sidebarShowHeader()\"\n [logoSrc]=\"sidebarLogoSrc()!\"\n [sidebarLogo]=\"sidebarLogo()!\"\n [collapsedLogo]=\"sidebarCollapsedLogo()!\"\n [showFooter]=\"sidebarShowFooter()\"\n [(collapsed)]=\"sidebarCollapsed\"\n (itemClick)=\"sidebarItemClick.emit($event)\"\n >\n <ng-content select=\"[sidebar-header]\" sidebar-header></ng-content>\n <ng-content select=\"[sidebar-footer]\" sidebar-footer></ng-content>\n </pecb-sidebar>\n </div>\n }\n\n <!-- =========================================================\n HEADER\n ========================================================= -->\n @if (showHeader()) {\n <header class=\"pecb-project-layout__header\">\n\n <!-- Page title -->\n @if (pageTitle()) {\n <h1 class=\"pecb-project-layout__title\">{{ pageTitle() }}</h1>\n }\n\n <!-- -------------------------------------------------------\n RIGHT SECTION — search · language · icons · profile\n ------------------------------------------------------- -->\n <div class=\"pecb-project-layout__header-right\">\n\n <!-- Simple search -->\n @if (searchType() === 'simple') {\n <div class=\"pecb-project-layout__search\">\n <svg class=\"pecb-project-layout__search-icon\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"9\" cy=\"9\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M14 14l3 3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n <input\n type=\"search\"\n class=\"pecb-project-layout__search-input\"\n [placeholder]=\"searchPlaceholder()\"\n (input)=\"searchChange.emit($any($event.target).value)\"\n aria-label=\"Search\"\n />\n </div>\n }\n\n <!-- Product search (input + vertical sep + category dropdown) -->\n @if (searchType() === 'product') {\n <div class=\"pecb-project-layout__product-search\">\n <svg class=\"pecb-project-layout__search-icon\" viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"9\" cy=\"9\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M14 14l3 3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n <input\n type=\"search\"\n class=\"pecb-project-layout__search-input\"\n [placeholder]=\"productSearchPlaceholder()\"\n (input)=\"productSearchChange.emit($any($event.target).value)\"\n aria-label=\"Search products\"\n />\n <span class=\"pecb-project-layout__search-sep\" aria-hidden=\"true\"></span>\n <div class=\"pecb-project-layout__category-wrap\">\n <select\n class=\"pecb-project-layout__category-select\"\n (change)=\"onCategoryChange($event)\"\n aria-label=\"Category\"\n >\n @for (cat of productCategories(); track cat) {\n <option [value]=\"cat\">{{ cat }}</option>\n }\n </select>\n <!-- decorative chevron — the select itself is the interactive element -->\n <svg class=\"pecb-project-layout__category-chevron\" viewBox=\"0 0 9 9\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2 3l2.5 2.5L7 3\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n </div>\n }\n\n <!-- Language selector -->\n @if (showLanguage()) {\n <button\n class=\"pecb-project-layout__lang-btn\"\n type=\"button\"\n (click)=\"languageClick.emit()\"\n aria-haspopup=\"listbox\"\n >\n <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M2 12h20\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M12 2c3 3 3.5 6 3.5 10s-.5 7-3.5 10\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M12 2c-3 3-3.5 6-3.5 10s.5 7 3.5 10\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n </svg>\n <span>{{ language() }}</span>\n <svg class=\"pecb-project-layout__chevron\" viewBox=\"0 0 9 9\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2 3l2.5 2.5L7 3\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n\n <!-- Bell -->\n @if (showBell()) {\n <button\n class=\"pecb-project-layout__icon-btn\"\n type=\"button\"\n (click)=\"bellClick.emit()\"\n aria-label=\"Notifications\"\n >\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M8 17c0 1.1.9 2 2 2s2-.9 2-2M4.5 8.5C4.5 5.46 6.96 3 10 3s5.5 2.46 5.5 5.5v3.5l1.5 3H3l1.5-3V8.5z\"\n stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n\n <!-- Cart -->\n @if (showCart()) {\n <button\n class=\"pecb-project-layout__icon-btn\"\n type=\"button\"\n (click)=\"cartClick.emit()\"\n aria-label=\"Cart\"\n >\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M3 3h2l.4 2M7 13h10l2-8H5.4M7 13l-1.5-7M7 13a2 2 0 100 4 2 2 0 000-4zm10 0a2 2 0 100 4 2 2 0 000-4z\"\n stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n\n <!-- Calendar -->\n @if (showCalendar()) {\n <button\n class=\"pecb-project-layout__icon-btn\"\n type=\"button\"\n (click)=\"calendarClick.emit()\"\n aria-label=\"Calendar\"\n >\n <svg viewBox=\"0 0 20 20\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"3\" y=\"4\" width=\"14\" height=\"13\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <path d=\"M3 8h14M7 2v4M13 2v4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n }\n\n <!-- Custom projected actions (for anything not covered by built-in inputs) -->\n <ng-content select=\"[layoutHeaderActions]\"></ng-content>\n\n <!-- Vertical divider before profile -->\n <span class=\"pecb-project-layout__header-divider\" aria-hidden=\"true\"></span>\n\n <!-- Profile block -->\n <button\n class=\"pecb-project-layout__profile\"\n type=\"button\"\n (click)=\"profileClick.emit()\"\n [attr.aria-label]=\"'Profile: ' + profileName()\"\n >\n <div class=\"pecb-project-layout__profile-text\">\n <span class=\"pecb-project-layout__profile-name\">{{ profileName() }}</span>\n <span class=\"pecb-project-layout__profile-role\">{{ profileRole() }}</span>\n </div>\n <div class=\"pecb-project-layout__avatar\" aria-hidden=\"true\">\n @if (profileImage()) {\n <img [src]=\"profileImage()\" alt=\"\" class=\"pecb-project-layout__avatar-img\" />\n } @else if (profileType() === 'company') {\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M3 21V7l9-4 9 4v14H3z\" stroke=\"#919191\" stroke-width=\"1.5\"/>\n <path d=\"M9 21v-6h6v6\" stroke=\"#919191\" stroke-width=\"1.5\"/>\n </svg>\n } @else {\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 48 48\" fill=\"none\">\n <circle cx=\"24\" cy=\"18\" r=\"8\" fill=\"#c2c2c2\"/>\n <path d=\"M8 42c0-8.837 7.163-16 16-16s16 7.163 16 16\" fill=\"#c2c2c2\"/>\n </svg>\n }\n </div>\n </button>\n\n </div>\n <!-- /header-right -->\n\n </header>\n }\n\n <!-- =========================================================\n MAIN CONTENT AREA\n ========================================================= -->\n <main [class]=\"contentClasses().join(' ')\" role=\"main\">\n <ng-content select=\"[layoutContent]\"></ng-content>\n </main>\n\n</div>\n","import {\n Component,\n input,\n output,\n computed,\n signal,\n ViewChild,\n ElementRef,\n AfterViewInit,\n OnDestroy,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface HierarchicalTableColumn {\n key: string;\n label: string;\n width?: string;\n align?: 'left' | 'center' | 'right';\n type?: 'text' | 'status' | 'custom';\n fixed?: boolean;\n}\n\nexport interface HierarchicalTableAction {\n id: string;\n icon: 'view' | 'edit' | 'delete';\n label?: string;\n}\n\nexport interface HierarchicalTablePageEvent {\n page: number;\n pageSize: number;\n}\n\n// =============================================================================\n// HIERARCHICAL TABLE COMPONENT\n// =============================================================================\n\n@Component({\n selector: 'pecb-hierarchical-table',\n imports: [CommonModule],\n templateUrl: './hierarchical-table.component.html',\n styleUrls: ['./hierarchical-table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HierarchicalTableComponent implements AfterViewInit, OnDestroy {\n @ViewChild('scrollbarTrack') scrollbarTrack!: ElementRef<HTMLElement>;\n\n id = input(generateUniqueId('htable'));\n columns = input<HierarchicalTableColumn[]>([]);\n data = input<Record<string, unknown>[]>([]);\n actions = input<HierarchicalTableAction[]>([\n { id: 'view', icon: 'view' },\n { id: 'edit', icon: 'edit' },\n { id: 'delete', icon: 'delete' }\n ]);\n showActions = input(true);\n showToolbar = input(true);\n actionLabel = input('');\n searchPlaceholder = input('Search...');\n showSearch = input(true);\n showFilter = input(true);\n showPagination = input(true);\n totalItems = input(0);\n pageSize = input(10);\n currentPage = input(1);\n ariaLabel = input('Hierarchical table');\n\n actionButtonClicked = output<void>();\n searchChanged = output<string>();\n filterClicked = output<void>();\n rowActionClicked = output<{ action: string; row: Record<string, unknown>; index: number }>();\n pageChanged = output<HierarchicalTablePageEvent>();\n\n paginationStart = computed(() => (this.currentPage() - 1) * this.pageSize() + 1);\n paginationEnd = computed(() => Math.min(this.currentPage() * this.pageSize(), this.totalItems()));\n totalPages = computed(() => Math.ceil(this.totalItems() / this.pageSize()));\n\n visiblePages = computed(() => {\n const total = this.totalPages();\n const current = this.currentPage();\n const pages: (number | '...')[] = [];\n if (total <= 5) {\n for (let i = 1; i <= total; i++) pages.push(i);\n } else {\n pages.push(1);\n if (current > 3) pages.push('...');\n const start = Math.max(2, current - 1);\n const end = Math.min(total - 1, current + 1);\n for (let i = start; i <= end; i++) pages.push(i);\n if (current < total - 2) pages.push('...');\n pages.push(total);\n }\n return pages;\n });\n\n getCellValue(row: Record<string, unknown>, key: string): unknown {\n return key.split('.').reduce((obj: unknown, k: string) => (obj as Record<string, unknown>)?.[k], row);\n }\n\n onAction(actionId: string, row: Record<string, unknown>, index: number): void {\n this.rowActionClicked.emit({ action: actionId, row, index });\n }\n\n onPageChange(page: number): void {\n if (page < 1 || page > this.totalPages()) return;\n this.pageChanged.emit({ page, pageSize: this.pageSize() });\n }\n\n // ==========================================\n // CUSTOM SCROLLBAR\n // ==========================================\n\n scrollThumbWidth = signal(30);\n scrollThumbPosition = signal(0);\n private tableWrapper: HTMLElement | null = null;\n private scrollListener: (() => void) | null = null;\n\n // Drag state\n private isDragging = false;\n private dragStartX = 0;\n private dragStartScrollLeft = 0;\n private dragMoveListener: ((e: MouseEvent) => void) | null = null;\n private dragEndListener: (() => void) | null = null;\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.tableWrapper = document.querySelector(`#${this.id()} .pecb-htable__table-wrapper`);\n if (this.tableWrapper) {\n this.updateScrollbar();\n this.scrollListener = () => this.updateScrollbar();\n this.tableWrapper.addEventListener('scroll', this.scrollListener);\n }\n });\n }\n\n ngOnDestroy(): void {\n if (this.tableWrapper && this.scrollListener) {\n this.tableWrapper.removeEventListener('scroll', this.scrollListener);\n }\n this.removeDragListeners();\n }\n\n onScrollbarMouseDown(event: MouseEvent): void {\n if (!this.tableWrapper) return;\n const target = event.target as HTMLElement;\n const track = event.currentTarget as HTMLElement;\n\n if (target.classList.contains('pecb-htable__scrollbar-thumb')) {\n // Thumb drag — record start position and attach document-level listeners\n this.isDragging = true;\n this.dragStartX = event.clientX;\n this.dragStartScrollLeft = this.tableWrapper.scrollLeft;\n event.preventDefault();\n\n this.dragMoveListener = (e: MouseEvent) => this.onDragMove(e, track);\n this.dragEndListener = () => this.onDragEnd();\n document.addEventListener('mousemove', this.dragMoveListener);\n document.addEventListener('mouseup', this.dragEndListener);\n } else {\n // Track click — jump scroll to clicked position\n const rect = track.getBoundingClientRect();\n const clickPercent = (event.clientX - rect.left) / rect.width;\n const maxScroll = this.tableWrapper.scrollWidth - this.tableWrapper.clientWidth;\n this.tableWrapper.scrollLeft = clickPercent * maxScroll;\n }\n }\n\n private onDragMove(event: MouseEvent, track: HTMLElement): void {\n if (!this.isDragging || !this.tableWrapper) return;\n const maxScroll = this.tableWrapper.scrollWidth - this.tableWrapper.clientWidth;\n const trackWidth = track.clientWidth;\n const thumbWidthPx = (this.tableWrapper.clientWidth / this.tableWrapper.scrollWidth) * trackWidth;\n const delta = event.clientX - this.dragStartX;\n const scrollDelta = (delta / (trackWidth - thumbWidthPx)) * maxScroll;\n this.tableWrapper.scrollLeft = Math.max(0, Math.min(maxScroll, this.dragStartScrollLeft + scrollDelta));\n }\n\n private onDragEnd(): void {\n this.isDragging = false;\n this.removeDragListeners();\n }\n\n private removeDragListeners(): void {\n if (this.dragMoveListener) {\n document.removeEventListener('mousemove', this.dragMoveListener);\n this.dragMoveListener = null;\n }\n if (this.dragEndListener) {\n document.removeEventListener('mouseup', this.dragEndListener);\n this.dragEndListener = null;\n }\n }\n\n private updateScrollbar(): void {\n if (!this.tableWrapper) return;\n const { scrollWidth, clientWidth, scrollLeft } = this.tableWrapper;\n if (scrollWidth <= clientWidth) {\n this.scrollThumbWidth.set(100);\n this.scrollThumbPosition.set(0);\n } else {\n this.scrollThumbWidth.set((clientWidth / scrollWidth) * 100);\n this.scrollThumbPosition.set((scrollLeft / (scrollWidth - clientWidth)) * (100 - (clientWidth / scrollWidth) * 100));\n }\n }\n}\n","<div\n [id]=\"id()\"\n class=\"pecb-htable\"\n role=\"region\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <!-- Toolbar -->\n @if (showToolbar()) {\n <div class=\"pecb-htable__toolbar\">\n <div class=\"pecb-htable__toolbar-left\">\n @if (actionLabel()) {\n <button\n type=\"button\"\n class=\"pecb-htable__action-btn\"\n (click)=\"actionButtonClicked.emit()\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 13.5 13.5\" fill=\"none\">\n <path d=\"M6.75 0.75L6.75 12.75M12.75 6.75L0.75 6.75\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n {{ actionLabel() }}\n </button>\n }\n <ng-content select=\"[toolbarLeft]\"></ng-content>\n </div>\n <div class=\"pecb-htable__toolbar-right\">\n <ng-content select=\"[toolbarRight]\"></ng-content>\n @if (showSearch()) {\n <div class=\"pecb-htable__search\">\n <svg class=\"pecb-htable__search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 16.5 16.5\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15.75 15.75L12.125 12.125M14.0833 7.41667C14.0833 11.0986 11.0986 14.0833 7.41667 14.0833C3.73477 14.0833 0.75 11.0986 0.75 7.41667C0.75 3.73477 3.73477 0.75 7.41667 0.75C11.0986 0.75 14.0833 3.73477 14.0833 7.41667Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <input\n type=\"text\"\n class=\"pecb-htable__search-input\"\n [placeholder]=\"searchPlaceholder()\"\n (input)=\"searchChanged.emit($any($event.target).value)\"\n />\n </div>\n }\n @if (showFilter()) {\n <button\n type=\"button\"\n class=\"pecb-htable__filter-btn\"\n (click)=\"filterClicked.emit()\"\n aria-label=\"Filter\"\n >\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M6 13.5V3.75M6 13.5C6.39782 13.5 6.77936 13.658 7.06066 13.9393C7.34196 14.2206 7.5 14.6022 7.5 15C7.5 15.3978 7.34196 15.7794 7.06066 16.0607C6.77936 16.342 6.39782 16.5 6 16.5M6 13.5C5.60218 13.5 5.22064 13.658 4.93934 13.9393C4.65804 14.2206 4.5 14.6022 4.5 15C4.5 15.3978 4.65804 15.7794 4.93934 16.0607C5.22064 16.342 5.60218 16.5 6 16.5M6 16.5V20.25M18 13.5V3.75M18 13.5C18.3978 13.5 18.7794 13.658 19.0607 13.9393C19.342 14.2206 19.5 14.6022 19.5 15C19.5 15.3978 19.342 15.7794 19.0607 16.0607C18.7794 16.342 18.3978 16.5 18 16.5M18 13.5C17.6022 13.5 17.2206 13.658 16.9393 13.9393C16.658 14.2206 16.5 14.6022 16.5 15C16.5 15.3978 16.658 15.7794 16.9393 16.0607C17.2206 16.342 17.6022 16.5 18 16.5M18 16.5V20.25M12 7.5V3.75M12 7.5C12.3978 7.5 12.7794 7.65804 13.0607 7.93934C13.342 8.22064 13.5 8.60218 13.5 9C13.5 9.39782 13.342 9.77936 13.0607 10.0607C12.7794 10.342 12.3978 10.5 12 10.5M12 7.5C11.6022 7.5 11.2206 7.65804 10.9393 7.93934C10.658 8.22064 10.5 8.60218 10.5 9C10.5 9.39782 10.658 9.77936 10.9393 10.0607C11.2206 10.342 11.6022 10.5 12 10.5M12 10.5V20.25\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n </div>\n </div>\n }\n\n <!-- Table with horizontal scroll -->\n <div class=\"pecb-htable__scroll-container\">\n <div class=\"pecb-htable__table-wrapper\">\n <table class=\"pecb-htable__table\" role=\"grid\">\n <!-- Header -->\n <thead class=\"pecb-htable__head\">\n <tr>\n @for (col of columns(); track col.key) {\n <th\n class=\"pecb-htable__head-cell\"\n [class.pecb-htable__head-cell--fixed]=\"col.fixed\"\n [style.width]=\"col.width || 'auto'\"\n [style.text-align]=\"col.align || 'left'\"\n scope=\"col\"\n >\n {{ col.label }}\n </th>\n }\n @if (showActions()) {\n <th class=\"pecb-htable__head-cell pecb-htable__head-cell--action pecb-htable__head-cell--fixed\" scope=\"col\">\n Action\n </th>\n }\n </tr>\n </thead>\n\n <!-- Body -->\n <tbody class=\"pecb-htable__body\">\n @for (row of data(); track $index; let i = $index) {\n <tr class=\"pecb-htable__row\">\n @for (col of columns(); track col.key) {\n <td\n class=\"pecb-htable__cell\"\n [class.pecb-htable__cell--fixed]=\"col.fixed\"\n [class.pecb-htable__cell--status]=\"col.type === 'status'\"\n [style.text-align]=\"col.align || 'left'\"\n >\n @if (col.type === 'status') {\n <span class=\"pecb-htable__status-badge\">\n {{ getCellValue(row, col.key) }}\n </span>\n } @else {\n {{ getCellValue(row, col.key) }}\n }\n </td>\n }\n @if (showActions()) {\n <td class=\"pecb-htable__cell pecb-htable__cell--action pecb-htable__cell--fixed\">\n <div class=\"pecb-htable__actions\">\n @for (action of actions(); track action.id) {\n <button\n type=\"button\"\n class=\"pecb-htable__action-icon\"\n [attr.aria-label]=\"action.label || action.id\"\n (click)=\"onAction(action.id, row, i)\"\n >\n @switch (action.icon) {\n @case ('view') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 21.6883 16\" fill=\"none\">\n <path d=\"M1.26387 8.71318C1.12769 8.49754 1.05959 8.38972 1.02147 8.22342C0.992842 8.0985 0.992842 7.9015 1.02147 7.77658C1.05959 7.61028 1.12769 7.50246 1.26387 7.28682C2.38928 5.50484 5.73915 1 10.8442 1C15.9492 1 19.299 5.50484 20.4244 7.28682C20.5606 7.50246 20.6287 7.61028 20.6668 7.77658C20.6955 7.9015 20.6955 8.0985 20.6668 8.22342C20.6287 8.38972 20.5606 8.49754 20.4244 8.71318C19.299 10.4952 15.9492 15 10.8442 15C5.73915 15 2.38928 10.4952 1.26387 8.71318Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M10.8442 11C12.501 11 13.8442 9.65685 13.8442 8C13.8442 6.34315 12.501 5 10.8442 5C9.1873 5 7.84415 6.34315 7.84415 8C7.84415 9.65685 9.1873 11 10.8442 11Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n @case ('edit') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"21\" viewBox=\"0 0 19.6062 19.6062\" fill=\"none\">\n <path d=\"M8.875 2.85616H5.2C3.72986 2.85616 2.99479 2.85616 2.43328 3.14226C1.93935 3.39393 1.53778 3.79551 1.28611 4.28943C1 4.85095 1 5.58602 1 7.05616V14.4062C1 15.8763 1 16.6114 1.28611 17.1729C1.53778 17.6668 1.93935 18.0684 2.43328 18.32C2.99479 18.6062 3.72986 18.6062 5.2 18.6062H12.55C14.0201 18.6062 14.7552 18.6062 15.3167 18.32C15.8107 18.0684 16.2122 17.6668 16.4639 17.1729C16.75 16.6114 16.75 15.8763 16.75 14.4062V10.7312M6.24998 13.3562H7.7152C8.14324 13.3562 8.35725 13.3562 8.55866 13.3078C8.73722 13.2649 8.90792 13.1942 9.0645 13.0983C9.2411 12.9901 9.39244 12.8387 9.6951 12.5361L18.0625 4.16866C18.7874 3.44378 18.7874 2.26853 18.0625 1.54366C17.3376 0.818782 16.1624 0.818781 15.4375 1.54365L7.07008 9.91106C6.76741 10.2137 6.61608 10.3651 6.50786 10.5417C6.41191 10.6982 6.3412 10.8689 6.29833 11.0475C6.24998 11.2489 6.24998 11.4629 6.24998 11.891V13.3562Z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n @case ('delete') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path d=\"M7 1H13M1 4H19M17 4L16.2987 14.5193C16.1935 16.0975 16.1409 16.8867 15.8 17.485C15.4999 18.0118 15.0472 18.4353 14.5017 18.6997C13.882 19 13.0911 19 11.5093 19H8.49065C6.90891 19 6.11803 19 5.49834 18.6997C4.95276 18.4353 4.50009 18.0118 4.19998 17.485C3.85911 16.8867 3.8065 16.0975 3.70129 14.5193L3 4M8 8.5V13.5M12 8.5V13.5\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n }\n </button>\n }\n </div>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <!-- Custom scrollbar (Figma: bg #ececec, thumb #c2c2c2, rounded 86px, 6px) -->\n <div\n class=\"pecb-htable__scrollbar\"\n #scrollbarTrack\n (mousedown)=\"onScrollbarMouseDown($event)\"\n >\n <div\n class=\"pecb-htable__scrollbar-thumb\"\n [style.width.%]=\"scrollThumbWidth()\"\n [style.left.%]=\"scrollThumbPosition()\"\n ></div>\n </div>\n </div>\n\n <!-- Pagination -->\n @if (showPagination() && totalItems() > 0) {\n <div class=\"pecb-htable__pagination\">\n <span class=\"pecb-htable__pagination-info\">\n {{ paginationStart() }}&ndash;{{ paginationEnd() }} of {{ totalItems() }} Items\n </span>\n <div class=\"pecb-htable__pagination-controls\">\n <span class=\"pecb-htable__pagination-label\">Items per page:</span>\n <span class=\"pecb-htable__pagination-size\">{{ pageSize() }} ▾</span>\n </div>\n <div class=\"pecb-htable__pagination-pages\">\n <button type=\"button\" class=\"pecb-htable__page-btn\" [disabled]=\"currentPage() <= 1\" (click)=\"onPageChange(currentPage() - 1)\" aria-label=\"Previous page\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M10 12L6 8l4-4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n @for (page of visiblePages(); track $index) {\n @if (page === '...') {\n <span class=\"pecb-htable__page-ellipsis\">…</span>\n } @else {\n <button type=\"button\" class=\"pecb-htable__page-btn\" [class.pecb-htable__page-btn--active]=\"page === currentPage()\" (click)=\"onPageChange(+page)\" [attr.aria-label]=\"'Page ' + page\" [attr.aria-current]=\"page === currentPage() ? 'page' : null\">{{ page }}</button>\n }\n }\n <button type=\"button\" class=\"pecb-htable__page-btn\" [disabled]=\"currentPage() >= totalPages()\" (click)=\"onPageChange(currentPage() + 1)\" aria-label=\"Next page\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M6 4l4 4-4 4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n </div>\n </div>\n }\n</div>\n","import { Component, input, output, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Anchor navigation direction.\n * - `vertical`: stacked links with a left-side track line\n * - `horizontal`: inline links with bottom-border active indicator\n */\nexport type AnchorDirection = 'vertical' | 'horizontal';\n\n/**\n * Anchor item nesting level.\n * - `1`: top-level item (16px left padding in vertical)\n * - `2`: nested/child item (32px left padding in vertical)\n */\nexport type AnchorLevel = 1 | 2;\n\n/**\n * Single anchor link definition.\n */\nexport interface AnchorItem {\n /** Unique key for the item */\n key: string;\n /** Display label */\n title: string;\n /** Target href or fragment (e.g. '#section-1') */\n href: string;\n /** Nesting level (1 = top, 2 = nested). Defaults to 1. */\n level?: AnchorLevel;\n}\n\n// =============================================================================\n// ANCHOR COMPONENT\n// =============================================================================\n\n/**\n * Anchor navigation component matching the PECB Figma design system.\n *\n * Provides vertical (sidebar-style with left track) or horizontal\n * (inline with bottom-border active indicator) anchor link navigation.\n *\n * **Figma specs:**\n * - Font: Plus Jakarta Sans Medium, 14px\n * - Default text: `#212427` (primary-2)\n * - Active text: `#a11e29` (primary-1)\n * - Active indicator: 2px solid `#a11e29`\n * - Vertical: left border\n * - Horizontal: bottom border\n * - Vertical track: 2px solid `rgba(0,0,0,0.06)`\n * - Level 1 padding: 16px left, 4px vertical\n * - Level 2 padding: 32px left (16+16), 2px vertical\n * - Horizontal gap: 16px between items\n *\n * @example\n * ```html\n * <pecb-anchor\n * direction=\"vertical\"\n * [items]=\"sections\"\n * [activeKey]=\"currentSection\"\n * (itemClick)=\"onNavigate($event)\"\n * ></pecb-anchor>\n * ```\n */\n@Component({\n selector: 'pecb-anchor',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './anchor.component.html',\n styleUrls: ['./anchor.component.scss']\n})\nexport class AnchorComponent {\n /** Unique element ID */\n id = input<string>(generateUniqueId('anchor'));\n\n /** Layout direction */\n direction = input<AnchorDirection>('vertical');\n\n /** List of anchor items to render */\n items = input<AnchorItem[]>([]);\n\n /** Key of the currently active item */\n activeKey = input<string>('');\n\n /** Emits the clicked item */\n itemClick = output<AnchorItem>();\n\n /** CSS classes for the container */\n anchorClasses = computed(() => [\n 'pecb-anchor',\n `pecb-anchor--${this.direction()}`\n ]);\n\n /** Check if an item is active */\n isActive(item: AnchorItem): boolean {\n return item.key === this.activeKey();\n }\n\n /** Get CSS classes for an individual item */\n getItemClasses(item: AnchorItem): string[] {\n const level = item.level ?? 1;\n const active = this.isActive(item);\n const dir = this.direction();\n\n return [\n 'pecb-anchor__item',\n `pecb-anchor__item--level-${level}`,\n `pecb-anchor__item--${dir}`,\n active ? 'pecb-anchor__item--active' : ''\n ].filter(Boolean);\n }\n\n onItemClick(event: Event, item: AnchorItem): void {\n event.preventDefault();\n this.itemClick.emit(item);\n }\n}\n","<nav\n [id]=\"id()\"\n [class]=\"anchorClasses().join(' ')\"\n [attr.aria-label]=\"'Anchor navigation'\"\n>\n @for (item of items(); track item.key) {\n <a\n [class]=\"getItemClasses(item).join(' ')\"\n [href]=\"item.href\"\n [attr.aria-current]=\"isActive(item) ? 'true' : null\"\n (click)=\"onItemClick($event, item)\"\n >\n <span class=\"pecb-anchor__item-text\">{{ item.title }}</span>\n </a>\n }\n</nav>\n","import {\n Component,\n input,\n signal,\n OnInit,\n OnDestroy,\n NgZone,\n inject,\n PLATFORM_ID\n} from '@angular/core';\nimport { CommonModule, isPlatformBrowser } from '@angular/common';\n\n// =============================================================================\n// BACK TO TOP COMPONENT\n// =============================================================================\n\n/**\n * Fixed-position \"Back to Top\" button that appears when the page is scrolled.\n *\n * **Behaviour (from Figma developer notes):**\n * 1. Hidden when the page is at the top (no scroll)\n * 2. Appears at 50% opacity while actively scrolling down\n * 3. Becomes 100% opacity when scrolling stops or at the bottom of the page\n * 4. Clicking scrolls the page smoothly back to the top\n *\n * **Figma specs:**\n * - Size: 40x40px\n * - Background: `#a11e29` (primary-1)\n * - Border radius: 6px\n * - Box shadow: `0 0 20px rgba(0,0,0,0.3)`\n * - Icon: white up-arrow, 20x20\n * - Position: fixed, bottom-right corner\n *\n * @example\n * ```html\n * <!-- Basic usage — just drop it in your app root -->\n * <pecb-back-to-top></pecb-back-to-top>\n *\n * <!-- Custom scroll threshold and position -->\n * <pecb-back-to-top\n * [scrollThreshold]=\"200\"\n * [bottomOffset]=\"28\"\n * [rightOffset]=\"28\"\n * ></pecb-back-to-top>\n * ```\n */\n@Component({\n selector: 'pecb-back-to-top',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './back-to-top.component.html',\n styleUrls: ['./back-to-top.component.scss']\n})\nexport class BackToTopComponent implements OnInit, OnDestroy {\n /** Scroll distance (px) before the button appears. Default: 100 */\n scrollThreshold = input(100);\n\n /** Distance from the bottom of the viewport (px). Default: 28 */\n bottomOffset = input(28);\n\n /** Distance from the right of the viewport (px). Default: 28 */\n rightOffset = input(28);\n\n /** Time in ms after scroll stops to transition to full opacity. Default: 1000 */\n scrollIdleDelay = input(1000);\n\n /** Whether the button is visible (scroll past threshold) */\n visible = signal(false);\n\n /** Whether the user is actively scrolling (50% opacity) */\n scrolling = signal(false);\n\n private zone = inject(NgZone);\n private platformId = inject(PLATFORM_ID);\n private scrollListener: (() => void) | null = null;\n private scrollTimer: ReturnType<typeof setTimeout> | null = null;\n\n ngOnInit(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n\n // Run outside Angular zone to avoid triggering change detection on every scroll\n this.zone.runOutsideAngular(() => {\n this.scrollListener = () => this.onScroll();\n window.addEventListener('scroll', this.scrollListener, { passive: true });\n });\n }\n\n ngOnDestroy(): void {\n if (this.scrollListener) {\n window.removeEventListener('scroll', this.scrollListener);\n }\n if (this.scrollTimer) {\n clearTimeout(this.scrollTimer);\n }\n }\n\n /** Scroll the page smoothly back to the top */\n scrollToTop(): void {\n if (!isPlatformBrowser(this.platformId)) return;\n window.scrollTo({ top: 0, behavior: 'smooth' });\n }\n\n private onScroll(): void {\n const scrollY = window.scrollY || document.documentElement.scrollTop;\n const threshold = this.scrollThreshold();\n\n // Update visibility\n const shouldBeVisible = scrollY > threshold;\n if (this.visible() !== shouldBeVisible) {\n this.zone.run(() => this.visible.set(shouldBeVisible));\n }\n\n if (!shouldBeVisible) return;\n\n // Check if at the bottom of the page\n const atBottom =\n window.innerHeight + scrollY >= document.documentElement.scrollHeight - 2;\n\n if (atBottom) {\n // At bottom → full opacity immediately\n if (this.scrolling()) {\n this.zone.run(() => this.scrolling.set(false));\n }\n if (this.scrollTimer) {\n clearTimeout(this.scrollTimer);\n this.scrollTimer = null;\n }\n return;\n }\n\n // Actively scrolling → 50% opacity\n if (!this.scrolling()) {\n this.zone.run(() => this.scrolling.set(true));\n }\n\n // Reset idle timer — when scroll stops, go to full opacity\n if (this.scrollTimer) {\n clearTimeout(this.scrollTimer);\n }\n this.scrollTimer = setTimeout(() => {\n this.zone.run(() => this.scrolling.set(false));\n this.scrollTimer = null;\n }, this.scrollIdleDelay());\n }\n}\n","<button\n type=\"button\"\n class=\"pecb-back-to-top\"\n [class.pecb-back-to-top--visible]=\"visible()\"\n [class.pecb-back-to-top--scrolling]=\"visible() && scrolling()\"\n [class.pecb-back-to-top--full]=\"visible() && !scrolling()\"\n [style.bottom.px]=\"bottomOffset()\"\n [style.right.px]=\"rightOffset()\"\n (click)=\"scrollToTop()\"\n aria-label=\"Back to top\"\n [attr.aria-hidden]=\"!visible()\"\n [attr.tabindex]=\"visible() ? 0 : -1\"\n>\n <svg\n class=\"pecb-back-to-top__icon\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10 16.667V3.333M4.167 8.333 10 2.5l5.833 5.833\"\n stroke=\"currentColor\"\n stroke-width=\"1.67\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n</button>\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n ContentChild,\n TemplateRef,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface ExpandableRowColumn {\n key: string;\n label: string;\n width?: string;\n align?: 'left' | 'center' | 'right';\n type?: 'text' | 'progress' | 'status' | 'custom';\n cellTemplate?: TemplateRef<unknown>;\n}\n\nexport interface ExpandableRowProgressConfig {\n valueKey: string;\n maxKey: string;\n}\n\nexport interface ExpandableRowPageEvent {\n page: number;\n pageSize: number;\n}\n\n// =============================================================================\n// EXPANDABLE ROW TABLE COMPONENT\n// =============================================================================\n\n@Component({\n selector: 'pecb-expandable-row-table',\n imports: [CommonModule],\n templateUrl: './expandable-row-table.component.html',\n styleUrls: ['./expandable-row-table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ExpandableRowTableComponent {\n @ContentChild('expandedRow') expandedRowTemplate!: TemplateRef<unknown>;\n\n id = input(generateUniqueId('ertable'));\n columns = input<ExpandableRowColumn[]>([]);\n data = input<Record<string, unknown>[]>([]);\n progressConfig = input<ExpandableRowProgressConfig | null>(null);\n expandable = input(true);\n showToolbar = input(true);\n actionLabel = input('');\n searchPlaceholder = input('Search...');\n showSearch = input(true);\n showFilter = input(true);\n showPagination = input(true);\n totalItems = input(0);\n pageSize = input(10);\n currentPage = input(1);\n ariaLabel = input('Expandable row table');\n\n rowToggled = output<{ row: Record<string, unknown>; index: number; expanded: boolean }>();\n actionClicked = output<void>();\n searchChanged = output<string>();\n filterClicked = output<void>();\n pageChanged = output<ExpandableRowPageEvent>();\n\n expandedRows = signal<Set<number>>(new Set());\n\n paginationStart = computed(() => (this.currentPage() - 1) * this.pageSize() + 1);\n paginationEnd = computed(() => Math.min(this.currentPage() * this.pageSize(), this.totalItems()));\n totalPages = computed(() => Math.ceil(this.totalItems() / this.pageSize()));\n\n visiblePages = computed(() => {\n const total = this.totalPages();\n const current = this.currentPage();\n const pages: (number | '...')[] = [];\n if (total <= 5) {\n for (let i = 1; i <= total; i++) pages.push(i);\n } else {\n pages.push(1);\n if (current > 3) pages.push('...');\n const start = Math.max(2, current - 1);\n const end = Math.min(total - 1, current + 1);\n for (let i = start; i <= end; i++) pages.push(i);\n if (current < total - 2) pages.push('...');\n pages.push(total);\n }\n return pages;\n });\n\n isExpanded(index: number): boolean {\n return this.expandedRows().has(index);\n }\n\n toggleRow(index: number): void {\n const current = new Set(this.expandedRows());\n const wasExpanded = current.has(index);\n if (wasExpanded) {\n current.delete(index);\n } else {\n current.add(index);\n }\n this.expandedRows.set(current);\n this.rowToggled.emit({ row: this.data()[index], index, expanded: !wasExpanded });\n }\n\n getCellValue(row: Record<string, unknown>, key: string): unknown {\n return key.split('.').reduce((obj: unknown, k: string) => (obj as Record<string, unknown>)?.[k], row);\n }\n\n getProgressValue(row: Record<string, unknown>): number {\n const config = this.progressConfig();\n if (!config) return 0;\n return (this.getCellValue(row, config.valueKey) as number) || 0;\n }\n\n getProgressMax(row: Record<string, unknown>): number {\n const config = this.progressConfig();\n if (!config) return 100;\n return (this.getCellValue(row, config.maxKey) as number) || 100;\n }\n\n getProgressPercent(row: Record<string, unknown>): number {\n const max = this.getProgressMax(row);\n if (max === 0) return 0;\n return Math.min(100, (this.getProgressValue(row) / max) * 100);\n }\n\n // Figma colors: #57bc57 (100%), #ff9c4a (60-99%), #ff606f (<60%)\n getProgressColor(row: Record<string, unknown>): string {\n const percent = this.getProgressPercent(row);\n if (percent >= 100) return '#57bc57';\n if (percent >= 60) return '#ff9c4a';\n return '#ff606f';\n }\n\n onPageChange(page: number): void {\n if (page < 1 || page > this.totalPages()) return;\n this.pageChanged.emit({ page, pageSize: this.pageSize() });\n }\n}\n","<div\n [id]=\"id()\"\n class=\"pecb-ertable\"\n role=\"region\"\n [attr.aria-label]=\"ariaLabel()\"\n>\n <!-- Toolbar -->\n @if (showToolbar()) {\n <div class=\"pecb-ertable__toolbar\">\n <div class=\"pecb-ertable__toolbar-left\">\n @if (actionLabel()) {\n <button type=\"button\" class=\"pecb-ertable__action-btn\" (click)=\"actionClicked.emit()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 13.5 13.5\" fill=\"none\">\n <path d=\"M6.75 0.75L6.75 12.75M12.75 6.75L0.75 6.75\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n {{ actionLabel() }}\n </button>\n }\n <ng-content select=\"[toolbarLeft]\"></ng-content>\n </div>\n <div class=\"pecb-ertable__toolbar-right\">\n <ng-content select=\"[toolbarRight]\"></ng-content>\n @if (showSearch()) {\n <div class=\"pecb-ertable__search\">\n <svg class=\"pecb-ertable__search-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 16.5 16.5\" fill=\"none\">\n <path d=\"M15.75 15.75L12.125 12.125M14.0833 7.41667C14.0833 11.0986 11.0986 14.0833 7.41667 14.0833C3.73477 14.0833 0.75 11.0986 0.75 7.41667C0.75 3.73477 3.73477 0.75 7.41667 0.75C11.0986 0.75 14.0833 3.73477 14.0833 7.41667Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <input type=\"text\" class=\"pecb-ertable__search-input\" [placeholder]=\"searchPlaceholder()\" (input)=\"searchChanged.emit($any($event.target).value)\" />\n </div>\n }\n @if (showFilter()) {\n <button type=\"button\" class=\"pecb-ertable__filter-btn\" (click)=\"filterClicked.emit()\" aria-label=\"Filter\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M6 13.5V3.75M6 13.5C6.39782 13.5 6.77936 13.658 7.06066 13.9393C7.34196 14.2206 7.5 14.6022 7.5 15C7.5 15.3978 7.34196 15.7794 7.06066 16.0607C6.77936 16.342 6.39782 16.5 6 16.5M6 13.5C5.60218 13.5 5.22064 13.658 4.93934 13.9393C4.65804 14.2206 4.5 14.6022 4.5 15C4.5 15.3978 4.65804 15.7794 4.93934 16.0607C5.22064 16.342 5.60218 16.5 6 16.5M6 16.5V20.25M18 13.5V3.75M18 13.5C18.3978 13.5 18.7794 13.658 19.0607 13.9393C19.342 14.2206 19.5 14.6022 19.5 15C19.5 15.3978 19.342 15.7794 19.0607 16.0607C18.7794 16.342 18.3978 16.5 18 16.5M18 13.5C17.6022 13.5 17.2206 13.658 16.9393 13.9393C16.658 14.2206 16.5 14.6022 16.5 15C16.5 15.3978 16.658 15.7794 16.9393 16.0607C17.2206 16.342 17.6022 16.5 18 16.5M18 16.5V20.25M12 7.5V3.75M12 7.5C12.3978 7.5 12.7794 7.65804 13.0607 7.93934C13.342 8.22064 13.5 8.60218 13.5 9C13.5 9.39782 13.342 9.77936 13.0607 10.0607C12.7794 10.342 12.3978 10.5 12 10.5M12 7.5C11.6022 7.5 11.2206 7.65804 10.9393 7.93934C10.658 8.22064 10.5 8.60218 10.5 9C10.5 9.39782 10.658 9.77936 10.9393 10.0607C11.2206 10.342 11.6022 10.5 12 10.5M12 10.5V20.25\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n }\n </div>\n </div>\n }\n\n <!-- Table -->\n <div class=\"pecb-ertable__table-wrapper\">\n <table class=\"pecb-ertable__table\" role=\"grid\">\n <thead class=\"pecb-ertable__head\">\n <tr>\n @for (col of columns(); track col.key) {\n <th class=\"pecb-ertable__head-cell\" [style.width]=\"col.width || 'auto'\" [style.text-align]=\"col.align || 'left'\" scope=\"col\">\n {{ col.label }}\n </th>\n }\n @if (expandable()) {\n <th class=\"pecb-ertable__head-cell pecb-ertable__head-cell--chevron\" scope=\"col\">\n <span class=\"pecb-ertable__sr-only\">Expand</span>\n </th>\n }\n </tr>\n </thead>\n <tbody class=\"pecb-ertable__body\">\n @for (row of data(); track $index; let i = $index) {\n <tr class=\"pecb-ertable__row\" [class.pecb-ertable__row--expanded]=\"isExpanded(i)\">\n @for (col of columns(); track col.key) {\n <td class=\"pecb-ertable__cell\" [style.text-align]=\"col.align || 'left'\">\n @if (col.type === 'progress' && progressConfig()) {\n <div class=\"pecb-ertable__progress\">\n <div class=\"pecb-ertable__progress-track\">\n <div class=\"pecb-ertable__progress-fill\" [style.width.%]=\"getProgressPercent(row)\" [style.background-color]=\"getProgressColor(row)\"></div>\n </div>\n <span class=\"pecb-ertable__progress-text\">{{ getProgressValue(row) }}/{{ getProgressMax(row) }}</span>\n </div>\n } @else if (col.cellTemplate) {\n <ng-container [ngTemplateOutlet]=\"col.cellTemplate\" [ngTemplateOutletContext]=\"{ $implicit: getCellValue(row, col.key), row: row, index: i }\"></ng-container>\n } @else {\n {{ getCellValue(row, col.key) }}\n }\n </td>\n }\n @if (expandable()) {\n <td class=\"pecb-ertable__cell pecb-ertable__cell--chevron\">\n <button type=\"button\" class=\"pecb-ertable__chevron-btn\" [attr.aria-expanded]=\"isExpanded(i)\" [attr.aria-label]=\"isExpanded(i) ? 'Collapse row' : 'Expand row'\" (click)=\"toggleRow(i)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"6\" height=\"10.5\" viewBox=\"0 0 6 10.5\" fill=\"none\" [class.pecb-ertable__chevron-icon--up]=\"isExpanded(i)\" [class.pecb-ertable__chevron-icon--down]=\"!isExpanded(i)\">\n <path d=\"M0.75 9.75L5.25 5.25L0.75 0.75\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </td>\n }\n </tr>\n @if (expandable() && isExpanded(i) && expandedRowTemplate) {\n <tr class=\"pecb-ertable__expanded-row\">\n <td [attr.colspan]=\"columns().length + 1\" class=\"pecb-ertable__expanded-cell\">\n <ng-container [ngTemplateOutlet]=\"expandedRowTemplate\" [ngTemplateOutletContext]=\"{ $implicit: row, index: i }\"></ng-container>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n\n <!-- Pagination -->\n @if (showPagination() && totalItems() > 0) {\n <div class=\"pecb-ertable__pagination\">\n <span class=\"pecb-ertable__pagination-info\">{{ paginationStart() }}&ndash;{{ paginationEnd() }} of {{ totalItems() }} Items</span>\n <div class=\"pecb-ertable__pagination-controls\">\n <span class=\"pecb-ertable__pagination-label\">Items per page:</span>\n <span class=\"pecb-ertable__pagination-size\">{{ pageSize() }} ▾</span>\n </div>\n <div class=\"pecb-ertable__pagination-pages\">\n <button type=\"button\" class=\"pecb-ertable__page-btn\" [disabled]=\"currentPage() <= 1\" (click)=\"onPageChange(currentPage() - 1)\" aria-label=\"Previous page\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M10 12L6 8l4-4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n @for (page of visiblePages(); track $index) {\n @if (page === '...') {\n <span class=\"pecb-ertable__page-ellipsis\">…</span>\n } @else {\n <button type=\"button\" class=\"pecb-ertable__page-btn\" [class.pecb-ertable__page-btn--active]=\"page === currentPage()\" (click)=\"onPageChange(+page)\" [attr.aria-label]=\"'Page ' + page\" [attr.aria-current]=\"page === currentPage() ? 'page' : null\">{{ page }}</button>\n }\n }\n <button type=\"button\" class=\"pecb-ertable__page-btn\" [disabled]=\"currentPage() >= totalPages()\" (click)=\"onPageChange(currentPage() + 1)\" aria-label=\"Next page\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"><path d=\"M6 4l4 4-4 4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </button>\n </div>\n </div>\n }\n</div>\n","import { Component, input, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Badge variant type.\n * - `dot`: small 6px red dot indicator\n * - `count`: numbered badge (default or small size)\n * - `status`: colored dot + text label\n * - `ribbon`: colored tag with bottom-right arrow fold\n */\nexport type BadgeVariant = 'dot' | 'count' | 'status' | 'ribbon';\n\n/**\n * Count badge size.\n * - `default`: 20px height, 14px font\n * - `small`: 14px height, 12px font\n */\nexport type BadgeSize = 'default' | 'small';\n\n/**\n * Status badge type — determines the dot color.\n */\nexport type BadgeStatus = 'success' | 'error' | 'default' | 'processing' | 'warning';\n\n/**\n * Ribbon badge color.\n */\nexport type RibbonColor = 'blue' | 'orange' | 'gray' | 'red' | 'purple' | 'green' | 'black';\n\n// =============================================================================\n// BADGE COMPONENT\n// =============================================================================\n\n/**\n * Badge component matching the PECB Figma design system.\n *\n * Three sub-types: Basic (dot/count), Status (dot + label), Ribbon (colored tag).\n *\n * @example\n * ```html\n * <!-- Dot indicator -->\n * <pecb-badge variant=\"dot\"></pecb-badge>\n *\n * <!-- Count badge -->\n * <pecb-badge variant=\"count\" [count]=\"21\"></pecb-badge>\n * <pecb-badge variant=\"count\" [count]=\"5\" size=\"small\"></pecb-badge>\n *\n * <!-- Status badge -->\n * <pecb-badge variant=\"status\" status=\"success\"></pecb-badge>\n * <pecb-badge variant=\"status\" status=\"error\" label=\"Failed\"></pecb-badge>\n *\n * <!-- Ribbon badge -->\n * <pecb-badge variant=\"ribbon\" ribbonColor=\"blue\" text=\"New\"></pecb-badge>\n * ```\n */\n@Component({\n selector: 'pecb-badge',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './badge.component.html',\n styleUrls: ['./badge.component.scss']\n})\nexport class BadgeComponent {\n /** Unique element ID */\n id = input<string>(generateUniqueId('badge'));\n\n /** Badge variant */\n variant = input<BadgeVariant>('dot');\n\n /** Count number (for variant='count') */\n count = input(0);\n\n /** Max count before showing \"99+\" (for variant='count') */\n maxCount = input(99);\n\n /** Count badge size */\n size = input<BadgeSize>('default');\n\n /** Status type (for variant='status') */\n status = input<BadgeStatus>('default');\n\n /** Label text (for variant='status'). Defaults to the status name. */\n label = input<string>('');\n\n /** Whether to show the label text (for variant='status') */\n showLabel = input(true);\n\n /** Ribbon color (for variant='ribbon') */\n ribbonColor = input<RibbonColor>('blue');\n\n /** Ribbon/badge text (for variant='ribbon') */\n text = input<string>('Ribbon');\n\n /** Formatted count display */\n displayCount = computed(() => {\n const c = this.count();\n const max = this.maxCount();\n return c > max ? `${max}+` : `${c}`;\n });\n\n /** Status label — uses explicit label or falls back to status name */\n statusLabel = computed(() => {\n const l = this.label();\n if (l) return l;\n const s = this.status();\n return s.charAt(0).toUpperCase() + s.slice(1);\n });\n}\n","<!-- DOT — 6px red circle --> \n@if (variant() === 'dot') {\n <span [id]=\"id()\" class=\"pecb-badge pecb-badge--dot\" aria-label=\"Notification indicator\"></span>\n}\n\n<!-- COUNT — numbered pill -->\n@if (variant() === 'count') {\n <span\n [id]=\"id()\"\n class=\"pecb-badge pecb-badge--count\"\n [class.pecb-badge--count-small]=\"size() === 'small'\"\n [attr.aria-label]=\"displayCount() + ' notifications'\"\n >\n {{ displayCount() }}\n </span>\n}\n\n<!-- STATUS — colored dot + label text -->\n@if (variant() === 'status') {\n <span [id]=\"id()\" class=\"pecb-badge pecb-badge--status\">\n <span\n class=\"pecb-badge__status-dot\"\n [class.pecb-badge__status-dot--success]=\"status() === 'success'\"\n [class.pecb-badge__status-dot--error]=\"status() === 'error'\"\n [class.pecb-badge__status-dot--default]=\"status() === 'default'\"\n [class.pecb-badge__status-dot--processing]=\"status() === 'processing'\"\n [class.pecb-badge__status-dot--warning]=\"status() === 'warning'\"\n ></span>\n @if (showLabel()) {\n <span class=\"pecb-badge__status-text\">{{ statusLabel() }}</span>\n }\n </span>\n}\n\n<!-- RIBBON — colored tag with arrow fold -->\n@if (variant() === 'ribbon') {\n <span\n [id]=\"id()\"\n class=\"pecb-badge pecb-badge--ribbon\"\n [class.pecb-badge--ribbon-blue]=\"ribbonColor() === 'blue'\"\n [class.pecb-badge--ribbon-orange]=\"ribbonColor() === 'orange'\"\n [class.pecb-badge--ribbon-gray]=\"ribbonColor() === 'gray'\"\n [class.pecb-badge--ribbon-red]=\"ribbonColor() === 'red'\"\n [class.pecb-badge--ribbon-purple]=\"ribbonColor() === 'purple'\"\n [class.pecb-badge--ribbon-green]=\"ribbonColor() === 'green'\"\n [class.pecb-badge--ribbon-black]=\"ribbonColor() === 'black'\"\n >\n <span class=\"pecb-badge__ribbon-text\">{{ text() }}</span>\n <span class=\"pecb-badge__ribbon-arrow\"></span>\n </span>\n}\n","import {\n Component,\n input,\n computed,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Position of the sticky (affix) panel.\n * - `left`: sticky panel on the left, scrollable content on the right\n * - `right`: sticky panel on the right, scrollable content on the left\n */\nexport type AffixPosition = 'left' | 'right';\n\n// =============================================================================\n// AFFIX COMPONENT\n// =============================================================================\n\n/**\n * Affix layout component matching the PECB Figma design system.\n *\n * Provides a two-panel layout where one side is sticky (fixed during scroll)\n * and the other side is scrollable. An optional footer bar spans full width.\n *\n * **Figma specs (node 6458:49635):**\n * - Sidebar width: 298px (configurable)\n * - Content gap: 16px between sidebar and content\n * - Sidebar uses `position: sticky; top: 0`\n * - Content area scrolls independently\n * - Optional footer: full-width bar at the bottom\n *\n * @example\n * ```html\n * <pecb-affix [sidebarWidth]=\"298\" stickyPosition=\"left\">\n * <div affixSidebar>\n * <!-- Navigation, help section, etc. -->\n * </div>\n * <div affixContent>\n * <!-- Scrollable form cards, content, etc. -->\n * </div>\n * <div affixFooter>\n * <!-- Action buttons: Save as Draft, Previous, Continue -->\n * </div>\n * </pecb-affix>\n * ```\n */\n@Component({\n selector: 'pecb-affix',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './affix.component.html',\n styleUrls: ['./affix.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AffixComponent {\n /** Unique element ID */\n id = input<string>(generateUniqueId('affix'));\n\n /** Width of the sticky sidebar in pixels */\n sidebarWidth = input<number>(298);\n\n /** Which side the sticky panel is on */\n stickyPosition = input<AffixPosition>('left');\n\n /** Top offset for sticky positioning (px) */\n stickyTop = input<number>(0);\n\n /** Gap between sidebar and content (px) */\n gap = input<number>(16);\n\n /** Whether to show the footer slot */\n showFooter = input<boolean>(true);\n\n /** CSS classes for the host wrapper */\n containerClasses = computed(() => [\n 'pecb-affix',\n `pecb-affix--${this.stickyPosition()}`\n ]);\n\n /** Inline styles for the sidebar */\n sidebarStyles = computed(() => ({\n width: `${this.sidebarWidth()}px`,\n top: `${this.stickyTop()}px`\n }));\n\n /** Inline styles for the body (sidebar + content row) */\n bodyStyles = computed(() => ({\n gap: `${this.gap()}px`\n }));\n}\n","<div\n [id]=\"id()\"\n [ngClass]=\"containerClasses()\"\n role=\"region\"\n aria-label=\"Affix layout\"\n>\n <!-- Body: sidebar + content -->\n <div class=\"pecb-affix__body\" [ngStyle]=\"bodyStyles()\">\n\n <!-- Sticky sidebar -->\n <aside\n class=\"pecb-affix__sidebar\"\n [ngStyle]=\"sidebarStyles()\"\n role=\"complementary\"\n aria-label=\"Sidebar navigation\"\n >\n <ng-content select=\"[affixSidebar]\"></ng-content>\n </aside>\n\n <!-- Scrollable content -->\n <main class=\"pecb-affix__content\" role=\"main\">\n <ng-content select=\"[affixContent]\"></ng-content>\n </main>\n\n </div>\n\n <!-- Footer -->\n @if (showFooter()) {\n <footer class=\"pecb-affix__footer\">\n <ng-content select=\"[affixFooter]\"></ng-content>\n </footer>\n }\n</div>\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n ElementRef,\n HostListener,\n ChangeDetectionStrategy,\n inject\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Display mode for the language dropdown.\n * - `desktop`: shows full language names (English, Deutsch, …)\n * - `phone`: shows abbreviations (EN, DE, …)\n */\nexport type LanguageDisplayMode = 'desktop' | 'phone';\n\n/**\n * A single language option.\n */\nexport interface LanguageOption {\n /** Language code, e.g. 'en', 'de', 'es' */\n code: string;\n /** Full display name, e.g. 'English', 'Deutsch' */\n label: string;\n /** Short abbreviation, e.g. 'EN', 'DE' */\n shortLabel: string;\n}\n\n/** Default languages matching the Figma design */\nexport const DEFAULT_LANGUAGES: LanguageOption[] = [\n { code: 'en', label: 'English', shortLabel: 'EN' },\n { code: 'de', label: 'Deutsch', shortLabel: 'DE' },\n { code: 'es', label: 'Español', shortLabel: 'ES' },\n { code: 'fr', label: 'Français', shortLabel: 'FR' },\n { code: 'ja', label: '日本語', shortLabel: 'JP' },\n { code: 'ko', label: '한국어', shortLabel: 'KR' }\n];\n\n// =============================================================================\n// LANGUAGE DROPDOWN COMPONENT\n// =============================================================================\n\n/**\n * Language dropdown component matching the PECB Figma design system.\n *\n * Provides a compact trigger (globe icon + label + chevron) that opens\n * a dropdown panel listing available languages.\n *\n * **Figma specs (node 5946:14420):**\n * - Trigger: globe 24px + label 14px medium #919191 + chevron 9px, gap 3px\n * - Panel: white bg, #ececec border, 8px radius, 6px padding\n * - Shadow: 0 10px 10px rgba(0,0,0,0.1)\n * - Desktop panel width: 92px (auto for phone)\n * - Item: 12px h-pad, 6px v-pad, 6px radius\n * - Default: white bg, #919191 text\n * - Active: #ececec bg, #616161 text\n * - Hover: #fafafa bg, #a11e29 text\n *\n * @example\n * ```html\n * <pecb-language-dropdown\n * displayMode=\"desktop\"\n * [languages]=\"languages\"\n * selectedCode=\"en\"\n * (languageChange)=\"onLangChange($event)\"\n * ></pecb-language-dropdown>\n * ```\n */\n@Component({\n selector: 'pecb-language-dropdown',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './language-dropdown.component.html',\n styleUrls: ['./language-dropdown.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LanguageDropdownComponent {\n private readonly elRef = inject(ElementRef);\n\n /** Unique element ID */\n id = input<string>(generateUniqueId('lang-dropdown'));\n\n /** Display mode: full names or abbreviations */\n displayMode = input<LanguageDisplayMode>('desktop');\n\n /** Available language options */\n languages = input<LanguageOption[]>(DEFAULT_LANGUAGES);\n\n /** Currently selected language code */\n selectedCode = input<string>('en');\n\n /** Emits the selected language option when changed */\n languageChange = output<LanguageOption>();\n\n /** Whether the dropdown panel is open */\n isOpen = signal(false);\n\n /** The currently selected language object */\n selectedLanguage = computed(() => {\n const code = this.selectedCode();\n return this.languages().find(l => l.code === code) ?? this.languages()[0];\n });\n\n /** Display text for the trigger */\n triggerLabel = computed(() => {\n const lang = this.selectedLanguage();\n if (!lang) return '';\n return this.displayMode() === 'desktop' ? lang.label : lang.shortLabel;\n });\n\n /** Get display text for a dropdown item */\n getItemLabel(lang: LanguageOption): string {\n return this.displayMode() === 'desktop' ? lang.label : lang.shortLabel;\n }\n\n /** Check if a language is selected */\n isSelected(lang: LanguageOption): boolean {\n return lang.code === this.selectedCode();\n }\n\n /** Toggle dropdown open/closed */\n toggle(): void {\n this.isOpen.update(v => !v);\n }\n\n /** Select a language and close */\n select(lang: LanguageOption): void {\n this.isOpen.set(false);\n if (lang.code !== this.selectedCode()) {\n this.languageChange.emit(lang);\n }\n }\n\n /** Close on click outside */\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: Event): void {\n if (!this.elRef.nativeElement.contains(event.target)) {\n this.isOpen.set(false);\n }\n }\n\n /** Keyboard handling */\n @HostListener('document:keydown.escape')\n onEscape(): void {\n this.isOpen.set(false);\n }\n}\n","<div\n [id]=\"id()\"\n class=\"pecb-lang-dropdown\"\n [class.pecb-lang-dropdown--phone]=\"displayMode() === 'phone'\"\n>\n <!-- Trigger -->\n <button\n type=\"button\"\n class=\"pecb-lang-dropdown__trigger\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"listbox\"\n (click)=\"toggle()\"\n >\n <!-- Globe icon -->\n <svg class=\"pecb-lang-dropdown__globe\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"#919191\" stroke-width=\"1.5\"/>\n <ellipse cx=\"12\" cy=\"12\" rx=\"4.5\" ry=\"9\" stroke=\"#919191\" stroke-width=\"1.5\"/>\n <path d=\"M3.5 9H20.5\" stroke=\"#919191\" stroke-width=\"1.5\"/>\n <path d=\"M3.5 15H20.5\" stroke=\"#919191\" stroke-width=\"1.5\"/>\n </svg>\n\n <span class=\"pecb-lang-dropdown__label\">{{ triggerLabel() }}</span>\n\n <!-- Chevron arrow -->\n <svg\n class=\"pecb-lang-dropdown__chevron\"\n [class.pecb-lang-dropdown__chevron--open]=\"isOpen()\"\n width=\"9\"\n height=\"9\"\n viewBox=\"0 0 9 9\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M2 3L4.5 5.5L7 3\" stroke=\"#919191\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n <!-- Dropdown panel -->\n @if (isOpen()) {\n <div\n class=\"pecb-lang-dropdown__panel\"\n role=\"listbox\"\n [attr.aria-label]=\"'Select language'\"\n >\n @for (lang of languages(); track lang.code) {\n <button\n type=\"button\"\n class=\"pecb-lang-dropdown__item\"\n [class.pecb-lang-dropdown__item--active]=\"isSelected(lang)\"\n role=\"option\"\n [attr.aria-selected]=\"isSelected(lang)\"\n (click)=\"select(lang)\"\n >\n {{ getItemLabel(lang) }}\n </button>\n }\n </div>\n }\n</div>\n","import {\n Component,\n input,\n output,\n computed,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Icon background color theme for the empty state icon circle.\n * - `default`: neutral gray (#f4f4f4), dark icon\n * - `info`: blue (#e6f0fa), blue icon\n * - `error`: red (#fdecea), red icon\n * - `warning`: orange (#fff4e5), orange icon\n * - `success`: green (#e6f4ea), green icon\n * - `gray`: gray (#ececec), gray icon\n */\nexport type EmptyStateIconTheme = 'default' | 'info' | 'error' | 'warning' | 'success' | 'gray';\n\n/**\n * Configuration for a button in the empty state.\n */\nexport interface EmptyStateButton {\n /** Button label text */\n label: string;\n /** Button style: primary (dark bg) or secondary (outline) */\n variant: 'primary' | 'secondary';\n}\n\n// =============================================================================\n// EMPTY STATE COMPONENT\n// =============================================================================\n\n/**\n * Empty state component matching the PECB Figma design system.\n *\n * Displays a centered message with an icon, title, description, and\n * optional action buttons when there is no data to show.\n *\n * **Figma specs (node 6458:49629):**\n * - Container: white bg, #ececec border, 12px radius, 64px v-pad, 220px h-pad\n * - Gap between elements: 16px\n * - Icon circle: 56px, 28px border-radius\n * - default bg: #f4f4f4 (neutral-7)\n * - info bg: #e6f0fa (new-bg)\n * - error bg: #fdecea (cancelled-bg)\n * - Title: Bold 24px, #212427, line-height 1.2\n * - Description: Medium 14px, #919191, text-center\n * - Primary button: #212427 bg, white text, 6px radius, 40px h, 16px h-pad\n * - Secondary button: white bg, #c2c2c2 border, #212427 text, 6px radius, 40px h\n * - Button gap: 16px\n *\n * @example\n * ```html\n * <pecb-empty-state\n * title=\"No Certifications Yet\"\n * description=\"Start your professional development...\"\n * iconTheme=\"default\"\n * [buttons]=\"[\n * { label: 'Explore Certifications', variant: 'primary' },\n * { label: 'Learn More', variant: 'secondary' }\n * ]\"\n * (buttonClick)=\"onAction($event)\"\n * ></pecb-empty-state>\n * ```\n */\n@Component({\n selector: 'pecb-empty-state',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './empty-state.component.html',\n styleUrls: ['./empty-state.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EmptyStateComponent {\n /** Unique element ID */\n id = input<string>(generateUniqueId('empty-state'));\n\n /** Title text */\n title = input<string>('');\n\n /** Description text below the title */\n description = input<string>('');\n\n /** Icon background color theme */\n iconTheme = input<EmptyStateIconTheme>('default');\n\n /** Action buttons to display */\n buttons = input<EmptyStateButton[]>([]);\n\n /** Whether to show the title */\n showTitle = input<boolean>(true);\n\n /** Whether to show the description */\n showDescription = input<boolean>(true);\n\n /** Emits the clicked button */\n buttonClick = output<EmptyStateButton>();\n\n /** CSS class for the icon circle background */\n iconBgClass = computed(() => {\n return `pecb-empty-state__icon--${this.iconTheme()}`;\n });\n\n /** Whether any buttons are configured */\n hasButtons = computed(() => this.buttons().length > 0);\n\n /** Handle button click */\n onButtonClick(button: EmptyStateButton): void {\n this.buttonClick.emit(button);\n }\n}\n","<div\n class=\"pecb-empty-state\"\n [attr.id]=\"id()\"\n role=\"status\"\n aria-live=\"polite\"\n>\n <!-- Icon circle -->\n <div class=\"pecb-empty-state__icon\" [ngClass]=\"iconBgClass()\">\n <ng-content select=\"[emptyStateIcon]\"></ng-content>\n </div>\n\n <!-- Title -->\n @if (showTitle() && title()) {\n <h3 class=\"pecb-empty-state__title\">{{ title() }}</h3>\n }\n\n <!-- Description -->\n @if (showDescription() && description()) {\n <p class=\"pecb-empty-state__description\">{{ description() }}</p>\n }\n\n <!-- Buttons -->\n @if (hasButtons()) {\n <div class=\"pecb-empty-state__buttons\">\n @for (button of buttons(); track button.label) {\n <button\n class=\"pecb-empty-state__btn\"\n [ngClass]=\"'pecb-empty-state__btn--' + button.variant\"\n (click)=\"onButtonClick(button)\"\n >\n {{ button.label }}\n </button>\n }\n </div>\n }\n</div>\n","import {\n Component,\n input,\n computed,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * Testimonial card layout variant.\n * - `vertical`: avatar overflows top-center, centered text\n * - `horizontal`: avatar inline left of name, left-aligned text\n */\nexport type TestimonialVariant = 'vertical' | 'horizontal';\n\n/**\n * Data for a single testimonial.\n */\nexport interface TestimonialData {\n /** Person's full name */\n name: string;\n /** Person's job title / role */\n role: string;\n /** Testimonial quote text */\n quote: string;\n /** Avatar image URL (optional — falls back to initials) */\n avatarUrl?: string;\n}\n\n// =============================================================================\n// TESTIMONIAL COMPONENT\n// =============================================================================\n\n/**\n * Testimonial card component matching the PECB Figma design system.\n *\n * Displays a single testimonial with avatar, name, role, and quote text.\n * Two layout variants: vertical (avatar on top, centered) and horizontal\n * (avatar inline, left-aligned).\n *\n * **Figma specs (node 5174:6453):**\n * - Card: white bg, 12px radius\n * - Shadow: -32px 36px 24px rgba(0,0,0,0.04), 0 2px 16px rgba(0,0,0,0.07)\n * - Padding: 24px h, 32px v, 16px gap\n * - Vertical avatar: 64px circle, overflows top by 34px\n * - Horizontal avatar: 40px circle, inline\n * - Quote icon: ~41px, gray SVG quotation marks\n * - Name: Bold 18px, #212427\n * - Role: Regular 12px, #919191\n * - Quote: Regular 14px, #616161, line-height 1.5\n *\n * @example\n * ```html\n * <pecb-testimonial\n * variant=\"vertical\"\n * [data]=\"{ name: 'John Doe', role: 'Manager', quote: 'Great product!' }\"\n * ></pecb-testimonial>\n * ```\n */\n@Component({\n selector: 'pecb-testimonial',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './testimonial.component.html',\n styleUrls: ['./testimonial.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TestimonialComponent {\n /** Unique element ID */\n id = input<string>(generateUniqueId('testimonial'));\n\n /** Layout variant */\n variant = input<TestimonialVariant>('vertical');\n\n /** Testimonial data */\n data = input<TestimonialData>({ name: '', role: '', quote: '' });\n\n /** CSS class for the card */\n cardClasses = computed(() => [\n 'pecb-testimonial',\n `pecb-testimonial--${this.variant()}`\n ]);\n\n /** Initials fallback for avatar */\n initials = computed(() => {\n const name = this.data().name;\n if (!name) return '';\n const parts = name.trim().split(/\\s+/);\n if (parts.length >= 2) {\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n return parts[0][0]?.toUpperCase() ?? '';\n });\n}\n","<div\n [ngClass]=\"cardClasses()\"\n [attr.id]=\"id()\"\n role=\"article\"\n [attr.aria-label]=\"'Testimonial from ' + data().name\"\n>\n <!-- Quote mark icon (always present) -->\n <div class=\"pecb-testimonial__quote-icon\" aria-hidden=\"true\">\n <svg width=\"41\" height=\"33\" viewBox=\"0 0 41 33\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M0 32.512V19.456C0 15.7013 0.64 12.288 1.92 9.216C3.2 6.08 5.376 3.264 8.448 0.768L14.592 5.376C12.544 7.104 11.072 8.928 10.176 10.848C9.344 12.704 8.928 14.752 8.928 16.992H17.28V32.512H0ZM23.36 32.512V19.456C23.36 15.7013 24 12.288 25.28 9.216C26.56 6.08 28.736 3.264 31.808 0.768L37.952 5.376C35.904 7.104 34.432 8.928 33.536 10.848C32.704 12.704 32.288 14.752 32.288 16.992H40.64V32.512H23.36Z\" fill=\"#C2C2C2\"/>\n </svg>\n </div>\n\n @if (variant() === 'vertical') {\n <!-- VERTICAL: Avatar on top, centered layout -->\n <div class=\"pecb-testimonial__avatar pecb-testimonial__avatar--vertical\">\n @if (data().avatarUrl) {\n <img [src]=\"data().avatarUrl\" [alt]=\"data().name\" class=\"pecb-testimonial__avatar-img\" />\n } @else {\n <span class=\"pecb-testimonial__avatar-initials\">{{ initials() }}</span>\n }\n </div>\n\n <div class=\"pecb-testimonial__info pecb-testimonial__info--vertical\">\n <span class=\"pecb-testimonial__name\">{{ data().name }}</span>\n <span class=\"pecb-testimonial__role\">{{ data().role }}</span>\n </div>\n\n <p class=\"pecb-testimonial__text pecb-testimonial__text--vertical\">{{ data().quote }}</p>\n } @else {\n <!-- HORIZONTAL: Avatar inline, left-aligned layout -->\n <div class=\"pecb-testimonial__header\">\n <div class=\"pecb-testimonial__avatar pecb-testimonial__avatar--horizontal\">\n @if (data().avatarUrl) {\n <img [src]=\"data().avatarUrl\" [alt]=\"data().name\" class=\"pecb-testimonial__avatar-img\" />\n } @else {\n <span class=\"pecb-testimonial__avatar-initials\">{{ initials() }}</span>\n }\n </div>\n <div class=\"pecb-testimonial__info pecb-testimonial__info--horizontal\">\n <span class=\"pecb-testimonial__name\">{{ data().name }}</span>\n <span class=\"pecb-testimonial__role\">{{ data().role }}</span>\n </div>\n </div>\n\n <p class=\"pecb-testimonial__text pecb-testimonial__text--horizontal\">{{ data().quote }}</p>\n }\n</div>\n","import {\n Component,\n input,\n output,\n computed,\n signal,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TAG\n// =============================================================================\n\nexport type TagStyle = 'light' | 'dark';\nexport type TagAction = 'none' | 'close' | 'plus';\n\n@Component({\n selector: 'pecb-tag',\n standalone: true,\n imports: [CommonModule],\n template: `\n <span [ngClass]=\"tagClasses()\" [attr.id]=\"tagId()\">\n @if (action() === 'plus') {\n <svg class=\"pecb-tag__icon\" width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 0.5V7.5M0.5 4H7.5\" [attr.stroke]=\"tagStyle() === 'dark' ? '#fff' : '#212427'\" stroke-width=\"1.2\" stroke-linecap=\"round\"/>\n </svg>\n }\n <span class=\"pecb-tag__label\">{{ label() }}</span>\n @if (action() === 'close') {\n <button class=\"pecb-tag__close\" (click)=\"tagClose.emit()\" aria-label=\"Remove tag\">\n <svg width=\"6\" height=\"6\" viewBox=\"0 0 6 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5 1L1 5M1 1L5 5\" [attr.stroke]=\"tagStyle() === 'dark' ? '#fff' : '#212427'\" stroke-width=\"1.2\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n }\n </span>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TagComponent {\n tagId = input<string>(generateUniqueId('tag'));\n label = input<string>('');\n tagStyle = input<TagStyle>('light');\n action = input<TagAction>('none');\n tagClose = output<void>();\n\n tagClasses = computed(() => {\n const s = this.tagStyle();\n const a = this.action();\n const hasAction = a !== 'none';\n return ['pecb-tag', hasAction ? `pecb-tag--${s}-action` : `pecb-tag--${s}`];\n });\n}\n\n// =============================================================================\n// LINK BUTTON (Go Back, View Details, Read More, Show Credential)\n// =============================================================================\n\nexport type LinkButtonType = 'go-back' | 'view-details' | 'read-more' | 'show-credential';\n\n@Component({\n selector: 'pecb-link-button',\n standalone: true,\n imports: [CommonModule],\n template: `\n <button class=\"pecb-link-button\" (click)=\"clicked.emit()\" [attr.id]=\"linkId()\">\n @if (type() === 'go-back') {\n <svg class=\"pecb-link-button__arrow pecb-link-button__arrow--left\" width=\"11\" height=\"11\" viewBox=\"0 0 11 11\" fill=\"none\"><path d=\"M7 1.5L3 5.5L7 9.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n }\n <span class=\"pecb-link-button__text\">{{ displayText() }}</span>\n @if (type() !== 'go-back') {\n <svg class=\"pecb-link-button__arrow pecb-link-button__arrow--right\" width=\"11\" height=\"11\" viewBox=\"0 0 11 11\" fill=\"none\"><path d=\"M4 1.5L8 5.5L4 9.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n }\n </button>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LinkButtonComponent {\n linkId = input<string>(generateUniqueId('link-btn'));\n type = input<LinkButtonType>('go-back');\n clicked = output<void>();\n\n displayText = computed(() => {\n const map: Record<LinkButtonType, string> = {\n 'go-back': 'Go Back',\n 'view-details': 'View Details',\n 'read-more': 'Read More',\n 'show-credential': 'Show Credential'\n };\n return map[this.type()];\n });\n}\n\n// =============================================================================\n// SLIDE POINTS (Carousel dot indicators)\n// =============================================================================\n\n@Component({\n selector: 'pecb-slide-points',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"pecb-slide-points\" role=\"tablist\" [attr.aria-label]=\"'Slide ' + (currentIndex() + 1) + ' of ' + total()\">\n @for (i of dotsArray(); track i) {\n <button\n class=\"pecb-slide-points__dot\"\n [class.pecb-slide-points__dot--active]=\"i === currentIndex()\"\n role=\"tab\"\n [attr.aria-selected]=\"i === currentIndex()\"\n [attr.aria-label]=\"'Slide ' + (i + 1)\"\n (click)=\"selectDot(i)\"\n ></button>\n }\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SlidePointsComponent {\n total = input<number>(3);\n dotClick = output<number>();\n\n currentIndex = signal(0);\n dotsArray = computed(() => Array.from({ length: this.total() }, (_, i) => i));\n\n selectDot(index: number): void {\n this.currentIndex.set(index);\n this.dotClick.emit(index);\n }\n}\n\n// =============================================================================\n// QUANTITY SELECTOR\n// =============================================================================\n\n@Component({\n selector: 'pecb-quantity-selector',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"pecb-quantity\" [attr.id]=\"qtyId()\">\n <button class=\"pecb-quantity__btn\" (click)=\"decrement()\" aria-label=\"Decrease quantity\" [disabled]=\"value() <= min()\">\n <svg width=\"10\" height=\"2\" viewBox=\"0 0 10 2\" fill=\"none\"><path d=\"M1 1H9\" stroke=\"#212427\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>\n </button>\n <span class=\"pecb-quantity__value\">{{ showFraction() ? value() + '/' + max() : '' + value() }}</span>\n <button class=\"pecb-quantity__btn\" (click)=\"increment()\" aria-label=\"Increase quantity\" [disabled]=\"value() >= max()\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\"><path d=\"M5 1V9M1 5H9\" stroke=\"#212427\" stroke-width=\"1.5\" stroke-linecap=\"round\"/></svg>\n </button>\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class QuantitySelectorComponent {\n qtyId = input<string>(generateUniqueId('qty'));\n value = signal(1);\n min = input<number>(0);\n max = input<number>(99);\n showFraction = input<boolean>(false);\n valueChange = output<number>();\n\n increment(): void {\n if (this.value() < this.max()) {\n this.value.update(v => v + 1);\n this.valueChange.emit(this.value());\n }\n }\n\n decrement(): void {\n if (this.value() > this.min()) {\n this.value.update(v => v - 1);\n this.valueChange.emit(this.value());\n }\n }\n}\n\n// =============================================================================\n// AUDITOR STATUS\n// =============================================================================\n\nexport type AuditorStatusType = 'trainee' | 'auditor' | 'member';\n\n@Component({\n selector: 'pecb-auditor-status',\n standalone: true,\n imports: [CommonModule],\n template: `\n <span [ngClass]=\"statusClasses()\">{{ displayLabel() }}</span>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AuditorStatusComponent {\n type = input<AuditorStatusType>('trainee');\n label = input<string>('');\n\n statusClasses = computed(() => ['pecb-auditor-status', `pecb-auditor-status--${this.type()}`]);\n\n displayLabel = computed(() => {\n if (this.label()) return this.label();\n const map: Record<AuditorStatusType, string> = {\n trainee: 'Auditor Trainee',\n auditor: 'Auditor',\n member: 'Member'\n };\n return map[this.type()];\n });\n}\n\n// =============================================================================\n// RATING NUMBER\n// =============================================================================\n\nexport type RatingStyle = 'black' | 'white';\n\n@Component({\n selector: 'pecb-rating-number',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [ngClass]=\"ratingClasses()\">{{ value() }}</div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RatingNumberComponent {\n value = input<number>(1);\n ratingStyle = input<RatingStyle>('black');\n selected = output<number>();\n\n ratingClasses = computed(() => ['pecb-rating-number', `pecb-rating-number--${this.ratingStyle()}`]);\n}\n\n// =============================================================================\n// ICON TAG (Important, Question, Review)\n// =============================================================================\n\nexport type IconTagType = 'important' | 'question' | 'review';\n\n@Component({\n selector: 'pecb-icon-tag',\n standalone: true,\n imports: [CommonModule],\n template: `\n <span [ngClass]=\"iconTagClasses()\" (click)=\"clicked.emit()\">\n <span class=\"pecb-icon-tag__icon\" [ngClass]=\"iconBgClass()\">\n @if (type() === 'important') {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M6 1L1 10.5H11L6 1Z\" stroke=\"#D97706\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 5V7\" stroke=\"#D97706\" stroke-width=\"1.2\" stroke-linecap=\"round\"/><circle cx=\"6\" cy=\"8.5\" r=\"0.5\" fill=\"#D97706\"/></svg>\n } @else if (type() === 'question') {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"><circle cx=\"6\" cy=\"6\" r=\"5\" stroke=\"#3B82F6\" stroke-width=\"1.2\"/><path d=\"M4.5 4.5C4.5 3.67 5.17 3 6 3C6.83 3 7.5 3.67 7.5 4.5C7.5 5.33 6.83 5.75 6 6V7\" stroke=\"#3B82F6\" stroke-width=\"1.2\" stroke-linecap=\"round\"/><circle cx=\"6\" cy=\"8.5\" r=\"0.5\" fill=\"#3B82F6\"/></svg>\n } @else {\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\"><path d=\"M2 3H10V9C10 9.55 9.55 10 9 10H3C2.45 10 2 9.55 2 9V3Z\" stroke=\"#616161\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M6 6.5C6.83 6.5 7.5 5.83 7.5 5C7.5 4.17 6.83 3.5 6 3.5C5.17 3.5 4.5 4.17 4.5 5C4.5 5.83 5.17 6.5 6 6.5Z\" stroke=\"#616161\" stroke-width=\"1.2\"/></svg>\n }\n </span>\n <span class=\"pecb-icon-tag__label\">{{ displayLabel() }}</span>\n </span>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class IconTagComponent {\n type = input<IconTagType>('important');\n active = input<boolean>(false);\n clicked = output<void>();\n\n iconTagClasses = computed(() => ['pecb-icon-tag', this.active() ? 'pecb-icon-tag--active' : ''].filter(Boolean));\n iconBgClass = computed(() => `pecb-icon-tag__icon--${this.type()}`);\n displayLabel = computed(() => {\n const map: Record<IconTagType, string> = { important: 'Important', question: 'Question', review: 'Review' };\n return map[this.type()];\n });\n}\n\n// =============================================================================\n// TRANSCRIPT LINE\n// =============================================================================\n\nexport type TranscriptLineState = 'default' | 'active' | 'hover';\n\n@Component({\n selector: 'pecb-transcript-line',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [ngClass]=\"lineClasses()\" (click)=\"clicked.emit()\">\n <span [ngClass]=\"timeClasses()\">{{ time() }}</span>\n <span [ngClass]=\"textClasses()\">{{ text() }}</span>\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TranscriptLineComponent {\n time = input<string>('00:00');\n text = input<string>('');\n state = input<TranscriptLineState>('default');\n clicked = output<void>();\n\n lineClasses = computed(() => ['pecb-transcript-line', `pecb-transcript-line--${this.state()}`]);\n timeClasses = computed(() => ['pecb-transcript-line__time', `pecb-transcript-line__time--${this.state()}`]);\n textClasses = computed(() => ['pecb-transcript-line__text', `pecb-transcript-line__text--${this.state()}`]);\n}\n\n// =============================================================================\n// MINI ICON BUTTON (Edit / Delete)\n// =============================================================================\n\nexport type MiniIconAction = 'edit' | 'delete';\n\n@Component({\n selector: 'pecb-mini-icon-button',\n standalone: true,\n imports: [CommonModule],\n template: `\n <button class=\"pecb-mini-icon-btn\" [attr.aria-label]=\"action()\" (click)=\"clicked.emit()\">\n @if (action() === 'edit') {\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"><path d=\"M13.5 1.5L16.5 4.5L5.25 15.75H2.25V12.75L13.5 1.5Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n } @else {\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\"><path d=\"M2.25 4.5H15.75M6 4.5V3C6 2.17 6.67 1.5 7.5 1.5H10.5C11.33 1.5 12 2.17 12 3V4.5M14.25 4.5V15C14.25 15.83 13.58 16.5 12.75 16.5H5.25C4.42 16.5 3.75 15.83 3.75 15V4.5H14.25Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n }\n </button>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MiniIconButtonComponent {\n action = input<MiniIconAction>('edit');\n clicked = output<void>();\n}\n\n// =============================================================================\n// NO RESULTS FOUND\n// =============================================================================\n\n@Component({\n selector: 'pecb-no-results',\n standalone: true,\n template: `\n <div class=\"pecb-no-results\" [attr.id]=\"noResultsId()\">\n <svg width=\"128\" height=\"128\" viewBox=\"0 0 128 128\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <!-- Background circle -->\n <circle cx=\"58\" cy=\"64\" r=\"52\" fill=\"#E5E5E5\"/>\n <!-- Document card 1 (top) -->\n <rect x=\"20\" y=\"24\" width=\"62\" height=\"24\" rx=\"4\" fill=\"white\"/>\n <circle cx=\"32\" cy=\"36\" r=\"4\" fill=\"#C2C2C2\"/>\n <rect x=\"40\" y=\"32\" width=\"34\" height=\"4\" rx=\"2\" fill=\"#D9D9D9\"/>\n <rect x=\"40\" y=\"38\" width=\"24\" height=\"3\" rx=\"1.5\" fill=\"#E5E5E5\"/>\n <!-- Document card 2 (middle) -->\n <rect x=\"20\" y=\"52\" width=\"62\" height=\"24\" rx=\"4\" fill=\"white\"/>\n <circle cx=\"32\" cy=\"64\" r=\"4\" fill=\"#C2C2C2\"/>\n <rect x=\"40\" y=\"60\" width=\"34\" height=\"4\" rx=\"2\" fill=\"#D9D9D9\"/>\n <rect x=\"40\" y=\"66\" width=\"24\" height=\"3\" rx=\"1.5\" fill=\"#E5E5E5\"/>\n <!-- Document card 3 (bottom) -->\n <rect x=\"20\" y=\"80\" width=\"62\" height=\"24\" rx=\"4\" fill=\"white\"/>\n <circle cx=\"32\" cy=\"92\" r=\"4\" fill=\"#C2C2C2\"/>\n <rect x=\"40\" y=\"88\" width=\"34\" height=\"4\" rx=\"2\" fill=\"#D9D9D9\"/>\n <rect x=\"40\" y=\"94\" width=\"24\" height=\"3\" rx=\"1.5\" fill=\"#E5E5E5\"/>\n <!-- Magnifying glass -->\n <circle cx=\"82\" cy=\"68\" r=\"24\" fill=\"#F4F4F4\" stroke=\"#212427\" stroke-width=\"6\"/>\n <!-- Red X in glass -->\n <path d=\"M74 60L90 76M90 60L74 76\" stroke=\"#A11E29\" stroke-width=\"4\" stroke-linecap=\"round\"/>\n <!-- Handle -->\n <path d=\"M99 85L112 98\" stroke=\"#212427\" stroke-width=\"6\" stroke-linecap=\"round\"/>\n </svg>\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NoResultsComponent {\n noResultsId = input<string>(generateUniqueId('no-results'));\n}\n\n// =============================================================================\n// CERTIFICATE UPLOAD BAR\n// =============================================================================\n\n@Component({\n selector: 'pecb-certificate-upload-bar',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"pecb-cert-upload\" [attr.id]=\"certUploadId()\">\n <span class=\"pecb-cert-upload__icon\">\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"14\" cy=\"14\" r=\"13\" stroke=\"#a11e29\" stroke-width=\"1.5\"/>\n <path d=\"M10 9H18V19H10V9Z\" stroke=\"#a11e29\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M12 12H16M12 14.5H16\" stroke=\"#a11e29\" stroke-width=\"1.2\" stroke-linecap=\"round\"/>\n </svg>\n </span>\n <span class=\"pecb-cert-upload__name\">{{ filename() }}</span>\n <svg class=\"pecb-cert-upload__pdf\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M4 2H12L16 6V18H4V2Z\" stroke=\"#DC3545\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M12 2V6H16\" stroke=\"#DC3545\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <text x=\"7\" y=\"14\" font-size=\"5\" fill=\"#DC3545\" font-weight=\"700\">PDF</text>\n </svg>\n @if (showClose()) {\n <button class=\"pecb-cert-upload__close\" (click)=\"closeClick.emit()\" aria-label=\"Remove file\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"10\" cy=\"10\" r=\"9\" stroke=\"#919191\" stroke-width=\"1.2\"/>\n <path d=\"M7 7L13 13M13 7L7 13\" stroke=\"#919191\" stroke-width=\"1.2\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n }\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CertificateUploadBarComponent {\n certUploadId = input<string>(generateUniqueId('cert-upload'));\n filename = input<string>('');\n showClose = input<boolean>(true);\n closeClick = output<void>();\n}\n\n// =============================================================================\n// VIDEO UPLOAD BAR\n// =============================================================================\n\n@Component({\n selector: 'pecb-video-upload-bar',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"pecb-video-upload\" [attr.id]=\"videoUploadId()\">\n <span class=\"pecb-video-upload__icon\">\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"2\" y=\"6\" width=\"24\" height=\"16\" rx=\"2\" stroke=\"#a11e29\" stroke-width=\"1.5\"/>\n <rect x=\"2\" y=\"6\" width=\"4\" height=\"16\" stroke=\"#a11e29\" stroke-width=\"1\"/>\n <rect x=\"22\" y=\"6\" width=\"4\" height=\"16\" stroke=\"#a11e29\" stroke-width=\"1\"/>\n <path d=\"M4 10H6M4 14H6M4 18H6M22 10H24M22 14H24M22 18H24\" stroke=\"#a11e29\" stroke-width=\"0.8\"/>\n <polygon points=\"12,11 12,19 18,15\" fill=\"#a11e29\"/>\n </svg>\n </span>\n <div class=\"pecb-video-upload__info\">\n <span class=\"pecb-video-upload__name\">{{ filename() }}</span>\n <span class=\"pecb-video-upload__size\">{{ fileSize() }}</span>\n </div>\n <button class=\"pecb-video-upload__delete\" (click)=\"deleteClick.emit()\" aria-label=\"Delete file\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M3 5H17M7 5V3.5C7 2.95 7.45 2.5 8 2.5H12C12.55 2.5 13 2.95 13 3.5V5M15 5V16.5C15 17.05 14.55 17.5 14 17.5H6C5.45 17.5 5 17.05 5 16.5V5H15Z\" stroke=\"#919191\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class VideoUploadBarComponent {\n videoUploadId = input<string>(generateUniqueId('video-upload'));\n filename = input<string>('');\n fileSize = input<string>('');\n deleteClick = output<void>();\n}\n\n// =============================================================================\n// STATISTICS CARD\n// =============================================================================\n\nexport type StatisticsIconColor = 'blue' | 'green' | 'orange' | 'red' | 'gray';\n\n@Component({\n selector: 'pecb-statistics-card',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"pecb-stats-card\" [attr.id]=\"statsId()\">\n <span [ngClass]=\"iconClasses()\">\n <ng-content></ng-content>\n </span>\n <div class=\"pecb-stats-card__content\">\n <span class=\"pecb-stats-card__value\">{{ value() }}</span>\n <span class=\"pecb-stats-card__label\">{{ label() }}</span>\n </div>\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StatisticsCardComponent {\n statsId = input<string>(generateUniqueId('stats'));\n value = input<number>(0);\n label = input<string>('');\n iconColor = input<StatisticsIconColor>('blue');\n\n iconClasses = computed(() => ['pecb-stats-card__icon', `pecb-stats-card__icon--${this.iconColor()}`]);\n}\n\n// =============================================================================\n// PRICE METHOD (Pill Toggle)\n// =============================================================================\n\n@Component({\n selector: 'pecb-price-method',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"pecb-price-method\" [attr.id]=\"priceMethodId()\">\n <button [ngClass]=\"pillClasses(0)\" (click)=\"select(0)\">{{ leftLabel() }}</button>\n <button [ngClass]=\"pillClasses(1)\" (click)=\"select(1)\">{{ rightLabel() }}</button>\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PriceMethodComponent {\n priceMethodId = input<string>(generateUniqueId('price-method'));\n leftLabel = input<string>('Annual');\n rightLabel = input<string>('3 Years (-10%)');\n selectionChange = output<number>();\n\n currentIndex = signal(0);\n\n pillClasses(index: number): string[] {\n return ['pecb-price-method__pill', this.currentIndex() === index ? 'pecb-price-method__pill--active' : ''].filter(Boolean);\n }\n\n select(index: number): void {\n this.currentIndex.set(index);\n this.selectionChange.emit(index);\n }\n}\n\n// =============================================================================\n// APPLICATION STATUS BAR\n// =============================================================================\n\nexport type AppStatusColor = 'warning' | 'success' | 'error' | 'info';\n\n@Component({\n selector: 'pecb-application-status-bar',\n standalone: true,\n imports: [CommonModule],\n template: `\n <span class=\"pecb-app-status\" [attr.id]=\"appStatusId()\">\n <span class=\"pecb-app-status__message\">{{ message() }}</span>\n <span class=\"pecb-app-status__badge\" [ngStyle]=\"badgeStyle()\">{{ statusLabel() }}</span>\n </span>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ApplicationStatusBarComponent {\n appStatusId = input<string>(generateUniqueId('app-status'));\n message = input<string>('');\n statusLabel = input<string>('');\n statusColor = input<AppStatusColor>('warning');\n\n badgeStyle = computed(() => {\n const colorMap: Record<AppStatusColor, string> = {\n warning: '#D97706',\n success: '#16A34A',\n error: '#DC3545',\n info: '#3B82F6'\n };\n return { color: colorMap[this.statusColor()] };\n });\n}\n\n// =============================================================================\n// REASON FOR RETURN\n// =============================================================================\n\n@Component({\n selector: 'pecb-reason-for-return',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"pecb-reason-return\" [attr.id]=\"reasonId()\">\n <span class=\"pecb-reason-return__icon\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"11\" fill=\"#FCD34D\" stroke=\"#D97706\" stroke-width=\"1\"/>\n <path d=\"M12 8V13\" stroke=\"#212427\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <circle cx=\"12\" cy=\"16\" r=\"0.75\" fill=\"#212427\"/>\n </svg>\n </span>\n <div class=\"pecb-reason-return__content\">\n @if (message()) {\n <span class=\"pecb-reason-return__message\">Reason for return: <strong>{{ message() }}</strong></span>\n }\n @if (linkText()) {\n <a class=\"pecb-reason-return__link\" [href]=\"linkUrl() || '#'\">{{ linkText() }}</a>\n }\n </div>\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ReasonForReturnComponent {\n reasonId = input<string>(generateUniqueId('reason-return'));\n message = input<string>('');\n linkText = input<string>('');\n linkUrl = input<string>('');\n}\n\n// =============================================================================\n// CONTENT TYPE TAG\n// =============================================================================\n\nexport type ContentTagType = 'quiz' | 'video';\nexport type ContentTagDisplay = 'full' | 'icon-only';\n\n@Component({\n selector: 'pecb-content-type-tag',\n standalone: true,\n imports: [CommonModule],\n template: `\n <span [ngClass]=\"tagClasses()\">\n @if (type() === 'quiz') {\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"6\" stroke=\"currentColor\" stroke-width=\"1.2\"/>\n <path d=\"M5.5 5.5C5.5 4.67 6.17 4 7 4C7.83 4 8.5 4.67 8.5 5.5C8.5 6.33 7.83 6.75 7 7V8\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\"/>\n <circle cx=\"7\" cy=\"9.5\" r=\"0.5\" fill=\"currentColor\"/>\n </svg>\n } @else {\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <polygon points=\"5,3 5,11 11,7\" fill=\"currentColor\"/>\n </svg>\n }\n @if (displayMode() === 'full') {\n <span class=\"pecb-content-tag__label\">{{ type() === 'quiz' ? 'Quiz' : 'Video' }}</span>\n }\n </span>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ContentTypeTagComponent {\n type = input<ContentTagType>('quiz');\n displayMode = input<ContentTagDisplay>('full');\n\n tagClasses = computed(() => ['pecb-content-tag', `pecb-content-tag--${this.type()}-${this.displayMode()}`]);\n}\n\n// =============================================================================\n// QUESTION TYPE TAG\n// =============================================================================\n\nexport type QuestionTagType = 'scenario' | 'true-false' | 'essay' | 'multiple-choice';\nexport type QuestionTagDisplay = 'full' | 'icon-only';\n\n@Component({\n selector: 'pecb-question-type-tag',\n standalone: true,\n imports: [CommonModule],\n template: `\n <span [ngClass]=\"tagClasses()\">\n @if (type() === 'scenario') {\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><rect x=\"2\" y=\"2\" width=\"10\" height=\"10\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"1.2\"/><path d=\"M5 5H9M5 7H9M5 9H7\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\"/></svg>\n } @else if (type() === 'true-false') {\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><path d=\"M3 7L6 10L11 4\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n } @else if (type() === 'essay') {\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><path d=\"M3 3H11M3 6H11M3 9H8M3 12H6\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\"/></svg>\n } @else {\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"><circle cx=\"7\" cy=\"4\" r=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.2\"/><circle cx=\"7\" cy=\"10\" r=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.2\"/><circle cx=\"4\" cy=\"7\" r=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.2\"/><circle cx=\"10\" cy=\"7\" r=\"1.5\" stroke=\"currentColor\" stroke-width=\"1.2\"/></svg>\n }\n @if (displayMode() === 'full') {\n <span class=\"pecb-question-tag__label\">{{ displayLabel() }}</span>\n }\n </span>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class QuestionTypeTagComponent {\n type = input<QuestionTagType>('scenario');\n displayMode = input<QuestionTagDisplay>('full');\n\n tagClasses = computed(() => {\n const t = this.type();\n const d = this.displayMode();\n return ['pecb-question-tag', d === 'icon-only' ? `pecb-question-tag--${t}-icon` : `pecb-question-tag--${t}`];\n });\n\n displayLabel = computed(() => {\n const map: Record<QuestionTagType, string> = {\n scenario: 'Scenario',\n 'true-false': 'True/False',\n essay: 'Essay',\n 'multiple-choice': 'Multiple Choice'\n };\n return map[this.type()];\n });\n}\n\n// =============================================================================\n// STANDARDS PDF CARD\n// =============================================================================\n\nexport type PdfCardVariant = 'default' | 'hover' | 'compact';\n\n@Component({\n selector: 'pecb-standards-pdf-card',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [ngClass]=\"cardClasses()\" [attr.id]=\"pdfCardId()\">\n <span class=\"pecb-pdf-card__filename\">{{ filename() }}</span>\n @if (showViewButton() && variant() !== 'compact') {\n <button [ngClass]=\"buttonClasses()\" (click)=\"viewClick.emit()\">View</button>\n }\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class StandardsPdfCardComponent {\n pdfCardId = input<string>(generateUniqueId('pdf-card'));\n filename = input<string>('');\n variant = input<PdfCardVariant>('default');\n showViewButton = input<boolean>(true);\n viewClick = output<void>();\n\n cardClasses = computed(() => ['pecb-pdf-card', `pecb-pdf-card--${this.variant()}`]);\n buttonClasses = computed(() => ['pecb-pdf-card__btn', `pecb-pdf-card__btn--${this.variant()}`]);\n}\n\n// =============================================================================\n// NOTE SIDEBAR ITEM\n// =============================================================================\n\nexport type NoteSidebarState = 'default' | 'unread' | 'active';\nexport type NoteSidebarPosition = 'top' | 'middle' | 'bottom' | 'single';\n\n@Component({\n selector: 'pecb-note-sidebar-item',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [ngClass]=\"itemClasses()\" [ngStyle]=\"borderRadiusStyle()\">\n <span class=\"pecb-note-item__avatar\">\n <svg width=\"32\" height=\"32\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"16\" cy=\"16\" r=\"15\" fill=\"#E5E5E5\" stroke=\"#C2C2C2\" stroke-width=\"1\"/>\n <circle cx=\"16\" cy=\"12\" r=\"5\" fill=\"#C2C2C2\"/>\n <path d=\"M6 28C6 22.48 10.48 18 16 18C21.52 18 26 22.48 26 28\" fill=\"#C2C2C2\"/>\n </svg>\n </span>\n <div class=\"pecb-note-item__body\">\n <span [ngClass]=\"nameClasses()\">{{ name() }}</span>\n <span [ngClass]=\"textClasses()\">{{ text() }}</span>\n </div>\n <span class=\"pecb-note-item__time\">{{ time() }}</span>\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NoteSidebarItemComponent {\n name = input<string>('');\n text = input<string>('');\n time = input<string>('');\n state = input<NoteSidebarState>('default');\n position = input<NoteSidebarPosition>('single');\n\n itemClasses = computed(() => ['pecb-note-item', `pecb-note-item--${this.state()}`]);\n nameClasses = computed(() => ['pecb-note-item__name', this.state() === 'active' ? 'pecb-note-item__name--active' : 'pecb-note-item__name--default']);\n textClasses = computed(() => ['pecb-note-item__text', this.state() === 'active' ? 'pecb-note-item__text--active' : 'pecb-note-item__text--default']);\n\n borderRadiusStyle = computed(() => {\n const map: Record<NoteSidebarPosition, string> = {\n top: '8px 8px 0 0',\n middle: '0',\n bottom: '0 0 8px 8px',\n single: '8px'\n };\n return { 'border-radius': map[this.position()] };\n });\n}\n\n// =============================================================================\n// AUTHOR DATE TIME\n// =============================================================================\n\n@Component({\n selector: 'pecb-author-date-time',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"pecb-author-dt\" [attr.id]=\"authorDtId()\">\n <span class=\"pecb-author-dt__group\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"5\" r=\"3\" stroke=\"#919191\" stroke-width=\"1.2\"/>\n <path d=\"M2 13C2 10.24 4.24 8 7 8C9.76 8 12 10.24 12 13\" stroke=\"#919191\" stroke-width=\"1.2\" stroke-linecap=\"round\"/>\n </svg>\n <span class=\"pecb-author-dt__text\">{{ author() }}</span>\n </span>\n <span class=\"pecb-author-dt__group\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"1.5\" y=\"2.5\" width=\"11\" height=\"10\" rx=\"1.5\" stroke=\"#919191\" stroke-width=\"1.2\"/>\n <path d=\"M1.5 5.5H12.5\" stroke=\"#919191\" stroke-width=\"1.2\"/>\n <path d=\"M4.5 1V3M9.5 1V3\" stroke=\"#919191\" stroke-width=\"1.2\" stroke-linecap=\"round\"/>\n </svg>\n <span class=\"pecb-author-dt__text\">{{ date() }}</span>\n </span>\n <span class=\"pecb-author-dt__group\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"7\" cy=\"7\" r=\"5.5\" stroke=\"#919191\" stroke-width=\"1.2\"/>\n <path d=\"M7 4V7L9 9\" stroke=\"#919191\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"pecb-author-dt__text\">{{ time() }}</span>\n </span>\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AuthorDateTimeComponent {\n authorDtId = input<string>(generateUniqueId('author-dt'));\n author = input<string>('');\n date = input<string>('');\n time = input<string>('');\n}\n\n// =============================================================================\n// CHECK DELETE ICON\n// =============================================================================\n\nexport type CheckDeleteType = 'check' | 'delete';\n\n@Component({\n selector: 'pecb-check-delete-icon',\n standalone: true,\n imports: [CommonModule],\n template: `\n @if (type() === 'check') {\n <span class=\"pecb-check-delete pecb-check-delete--check\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"12\" fill=\"#16A34A\"/>\n <path d=\"M7 12L10.5 15.5L17 9\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n } @else {\n <span class=\"pecb-check-delete pecb-check-delete--delete\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"12\" fill=\"#DC3545\"/>\n <path d=\"M8 8L16 16M16 8L8 16\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n </svg>\n </span>\n }\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CheckDeleteIconComponent {\n type = input<CheckDeleteType>('check');\n}\n\n// =============================================================================\n// PROFILE ELEMENTS CARD\n// =============================================================================\n\n@Component({\n selector: 'pecb-profile-elements-card',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"pecb-profile-card\" [attr.id]=\"profileCardId()\">\n <span class=\"pecb-profile-card__avatar\">\n @if (avatarUrl()) {\n <img [src]=\"avatarUrl()\" alt=\"Avatar\" class=\"pecb-profile-card__avatar-img\"/>\n } @else {\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 48 48\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"24\" cy=\"24\" r=\"23\" fill=\"#E5E5E5\" stroke=\"#C2C2C2\" stroke-width=\"1\"/>\n <circle cx=\"24\" cy=\"18\" r=\"7\" fill=\"#C2C2C2\"/>\n <path d=\"M10 42C10 34.27 16.27 28 24 28C31.73 28 38 34.27 38 42\" fill=\"#C2C2C2\"/>\n </svg>\n }\n </span>\n <div class=\"pecb-profile-card__info\">\n <span class=\"pecb-profile-card__name\">{{ name() }}</span>\n <span class=\"pecb-profile-card__email\">{{ email() }}</span>\n <span class=\"pecb-profile-card__userid\">ID: {{ userId() }}</span>\n </div>\n <div class=\"pecb-profile-card__right\">\n <span class=\"pecb-profile-card__status\">{{ statusText() }}</span>\n @if (badgeLabel()) {\n <span class=\"pecb-profile-card__badge\">{{ badgeLabel() }}</span>\n }\n </div>\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProfileElementsCardComponent {\n profileCardId = input<string>(generateUniqueId('profile-card'));\n name = input<string>('');\n email = input<string>('');\n userId = input<string>('');\n statusText = input<string>('');\n badgeLabel = input<string>('');\n avatarUrl = input<string>('');\n}\n\n// =============================================================================\n// USER WITH EMAIL\n// =============================================================================\n\n@Component({\n selector: 'pecb-user-with-email',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"pecb-user-email\" [attr.id]=\"userEmailId()\">\n <span class=\"pecb-user-email__avatar\">\n @if (avatarUrl()) {\n <img [src]=\"avatarUrl()\" alt=\"Avatar\" class=\"pecb-user-email__avatar-img\"/>\n } @else {\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"20\" cy=\"20\" r=\"19\" fill=\"#E5E5E5\" stroke=\"#C2C2C2\" stroke-width=\"1\"/>\n <circle cx=\"20\" cy=\"15\" r=\"6\" fill=\"#C2C2C2\"/>\n <path d=\"M8 35C8 28.37 13.37 23 20 23C26.63 23 32 28.37 32 35\" fill=\"#C2C2C2\"/>\n </svg>\n }\n </span>\n <div class=\"pecb-user-email__info\">\n <span class=\"pecb-user-email__name\">{{ name() }}</span>\n <span class=\"pecb-user-email__email\">{{ email() }}</span>\n </div>\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UserWithEmailComponent {\n userEmailId = input<string>(generateUniqueId('user-email'));\n name = input<string>('');\n email = input<string>('');\n avatarUrl = input<string>('');\n}\n\n// =============================================================================\n// CANCEL UPDATE BUTTONS\n// =============================================================================\n\n@Component({\n selector: 'pecb-cancel-update-buttons',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"pecb-cancel-update\" [attr.id]=\"cancelUpdateId()\">\n <button class=\"pecb-cancel-update__btn pecb-cancel-update__btn--cancel\" (click)=\"cancelClick.emit()\">{{ cancelLabel() }}</button>\n <button class=\"pecb-cancel-update__btn pecb-cancel-update__btn--update\" (click)=\"updateClick.emit()\">{{ updateLabel() }}</button>\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CancelUpdateButtonsComponent {\n cancelUpdateId = input<string>(generateUniqueId('cancel-update'));\n cancelLabel = input<string>('Cancel');\n updateLabel = input<string>('Update');\n cancelClick = output<void>();\n updateClick = output<void>();\n}\n\n// =============================================================================\n// INFORMATION BOX\n// =============================================================================\n\nexport type InformationBoxVariant = 'default' | 'developer';\n\n@Component({\n selector: 'pecb-information-box',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div [ngClass]=\"boxClasses()\" [attr.id]=\"infoBoxId()\">\n @if (variant() === 'developer') {\n <div class=\"pecb-info-box__title\">{{ title() }}</div>\n }\n <div class=\"pecb-info-box__text\">{{ text() }}</div>\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class InformationBoxComponent {\n infoBoxId = input<string>(generateUniqueId('info-box'));\n variant = input<InformationBoxVariant>('default');\n text = input<string>('');\n title = input<string>('Comment for Developer');\n\n boxClasses = computed(() => ({\n 'pecb-info-box': true,\n 'pecb-info-box--default': this.variant() === 'default',\n 'pecb-info-box--developer': this.variant() === 'developer'\n }));\n}\n\n// =============================================================================\n// REQUEST SENT BY\n// =============================================================================\n\n@Component({\n selector: 'pecb-request-sent-by',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"pecb-request-sent\" [attr.id]=\"requestSentId()\">\n <span class=\"pecb-request-sent__label\">Request sent by:</span>\n <span class=\"pecb-request-sent__name\">{{ name() }}</span>\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RequestSentByComponent {\n requestSentId = input<string>(generateUniqueId('request-sent'));\n name = input<string>('');\n}\n\n// =============================================================================\n// NOTIFICATION STATUS LINK\n// =============================================================================\n\nexport type NotificationStatusType = 'read' | 'unread';\n\n@Component({\n selector: 'pecb-notification-status-link',\n standalone: true,\n imports: [CommonModule],\n template: `\n <span class=\"pecb-notif-link\" [attr.id]=\"notifLinkId()\" (click)=\"statusClick.emit()\">\n {{ linkLabel() }}\n </span>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NotificationStatusLinkComponent {\n notifLinkId = input<string>(generateUniqueId('notif-link'));\n type = input<NotificationStatusType>('read');\n statusClick = output<void>();\n\n linkLabel = computed(() => this.type() === 'read' ? 'Mark as Read' : 'Mark as Unread');\n}\n\n// =============================================================================\n// EDIT COVER PHOTO\n// =============================================================================\n\n@Component({\n selector: 'pecb-edit-cover-photo',\n standalone: true,\n imports: [CommonModule],\n template: `\n <button class=\"pecb-edit-cover\" [attr.id]=\"editCoverId()\" (click)=\"editClick.emit()\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M8 5.33334C6.52724 5.33334 5.33334 6.52724 5.33334 8C5.33334 9.47276 6.52724 10.6667 8 10.6667C9.47276 10.6667 10.6667 9.47276 10.6667 8C10.6667 6.52724 9.47276 5.33334 8 5.33334Z\" fill=\"#616161\"/>\n <path d=\"M6.00001 1.33334C5.68445 1.33334 5.39858 1.52406 5.27773 1.81482L4.72228 3.14816C4.66853 3.2775 4.5452 3.36408 4.40588 3.37528L2.93334 3.49348C2.49588 3.52862 2.10766 3.82944 1.97704 4.26262C1.84682 4.69438 1.98688 5.16316 2.33134 5.4485L3.4008 6.3338C3.51102 6.42504 3.55986 6.57032 3.52644 6.70886L3.16134 8.22208C3.06088 8.63778 3.21214 9.10278 3.55914 9.36158C3.90752 9.62146 4.37272 9.64516 4.7456 9.42044L6.02854 8.64748C6.15206 8.57302 6.3073 8.56306 6.44028 8.6213L7.90668 9.2626C8.29812 9.43372 8.73734 9.36002 9.06 9.08002C9.38134 8.80122 9.4988 8.3738 9.3676 7.98574L8.89334 6.58178C8.84654 6.44376 8.87278 6.29254 8.9628 6.17786L9.89334 4.9838C10.1568 4.64538 10.2038 4.1948 10.0128 3.81044C9.8214 3.42534 9.43246 3.18334 9.00668 3.17174L7.5358 3.13216C7.39474 3.12844 7.26656 3.05148 7.19714 2.9301L6.50668 1.72334C6.3484 1.44628 6.0558 1.33334 6.00001 1.33334Z\" fill=\"#616161\"/>\n <path d=\"M14 5.33334C14 5.33334 14.6667 5.33334 14.6667 6.00001V12.6667C14.6667 13.4031 14.0697 14 13.3333 14H2.66668C1.93028 14 1.33334 13.4031 1.33334 12.6667V6.00001C1.33334 5.33334 2.00001 5.33334 2.00001 5.33334\" stroke=\"#616161\" stroke-width=\"1.2\"/>\n </svg>\n <span class=\"pecb-edit-cover__text\">Edit Cover Photo</span>\n </button>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EditCoverPhotoComponent {\n editCoverId = input<string>(generateUniqueId('edit-cover'));\n editClick = output<void>();\n}\n\n// =============================================================================\n// REQUEST STATUS BAR\n// =============================================================================\n\nexport type RequestStatusIconType = 'warning' | 'success';\n\n@Component({\n selector: 'pecb-request-status-bar',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"pecb-request-status\" [attr.id]=\"requestStatusId()\">\n <span class=\"pecb-request-status__icon\">\n @if (iconType() === 'warning') {\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"12\" fill=\"#FCD34D\"/>\n <path d=\"M12 7V13\" stroke=\"#212427\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n <circle cx=\"12\" cy=\"16.5\" r=\"1\" fill=\"#212427\"/>\n </svg>\n } @else {\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"12\" cy=\"12\" r=\"12\" fill=\"#16A34A\"/>\n <path d=\"M7.5 12L10.5 15L16.5 9\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n </span>\n <span class=\"pecb-request-status__message\">{{ message() }}</span>\n <span class=\"pecb-request-status__link\" (click)=\"linkClick.emit()\">{{ linkText() }}</span>\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RequestStatusBarComponent {\n requestStatusId = input<string>(generateUniqueId('request-status'));\n message = input<string>('');\n linkText = input<string>('');\n iconType = input<RequestStatusIconType>('warning');\n linkClick = output<void>();\n}\n\n// =============================================================================\n// VERIFY CHECKLIST\n// =============================================================================\n\nexport type VerifyItemStatus = 'pending' | 'verified' | 'rejected' | 'warning';\n\nexport interface VerifyChecklistItem {\n text: string;\n status: VerifyItemStatus;\n}\n\n@Component({\n selector: 'pecb-verify-checklist',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"pecb-verify-checklist\" [attr.id]=\"verifyChecklistId()\">\n @for (item of items(); track $index) {\n <div class=\"pecb-verify-checklist__item\">\n <span class=\"pecb-verify-checklist__icon\">\n @if (item.status === 'pending') {\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"9\" cy=\"9\" r=\"8.5\" stroke=\"#C2C2C2\"/>\n </svg>\n } @else if (item.status === 'verified') {\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"9\" cy=\"9\" r=\"9\" fill=\"#3B82F6\"/>\n <path d=\"M5.5 9L8 11.5L12.5 7\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n } @else if (item.status === 'rejected') {\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"9\" cy=\"9\" r=\"9\" fill=\"#DC3545\"/>\n <path d=\"M6.5 6.5L11.5 11.5M11.5 6.5L6.5 11.5\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n } @else {\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"9\" cy=\"9\" r=\"9\" fill=\"#D97706\"/>\n <path d=\"M9 5.5V10\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <circle cx=\"9\" cy=\"12.5\" r=\"0.75\" fill=\"white\"/>\n </svg>\n }\n </span>\n <span class=\"pecb-verify-checklist__text\">{{ item.text }}</span>\n </div>\n }\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class VerifyChecklistComponent {\n verifyChecklistId = input<string>(generateUniqueId('verify-checklist'));\n items = input<VerifyChecklistItem[]>([]);\n}\n\n// =============================================================================\n// EDIT BUTTON\n// =============================================================================\n\nexport type EditButtonVariant = 'default' | 'black';\n\n@Component({\n selector: 'pecb-edit-button',\n standalone: true,\n imports: [CommonModule],\n template: `\n <button [ngClass]=\"btnClasses()\" (click)=\"editBtnClick.emit()\" aria-label=\"Edit\" [attr.id]=\"editBtnId()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15 2.5L17.5 5L6.25 16.25H3.75V13.75L15 2.5Z\" [attr.stroke]=\"variant() === 'black' ? '#616161' : '#212427'\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EditButtonComponent {\n editBtnId = input<string>(generateUniqueId('edit-btn'));\n variant = input<EditButtonVariant>('default');\n editBtnClick = output<void>();\n\n btnClasses = computed(() => ['pecb-edit-btn', `pecb-edit-btn--${this.variant()}`]);\n}\n\n// =============================================================================\n// ADD BUTTON (Circle)\n// =============================================================================\n\nexport type AddButtonVariant = 'default' | 'dark';\n\n@Component({\n selector: 'pecb-add-button',\n standalone: true,\n imports: [CommonModule],\n template: `\n <button [ngClass]=\"btnClasses()\" (click)=\"addBtnClick.emit()\" aria-label=\"Add\" [attr.id]=\"addBtnId()\">\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M9 3V15M3 9H15\" [attr.stroke]=\"variant() === 'dark' ? '#ffffff' : '#212427'\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n </svg>\n </button>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AddButtonComponent {\n addBtnId = input<string>(generateUniqueId('add-btn'));\n variant = input<AddButtonVariant>('default');\n addBtnClick = output<void>();\n\n btnClasses = computed(() => ['pecb-add-btn', `pecb-add-btn--${this.variant()}`]);\n}\n\n// =============================================================================\n// HORIZONTAL STEPS\n// =============================================================================\n\n@Component({\n selector: 'pecb-horizontal-steps',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"pecb-h-steps\" [attr.id]=\"hStepsId()\">\n @for (step of stepsArray(); track step.index) {\n @if (step.index > 0) {\n <span class=\"pecb-h-steps__line\"></span>\n }\n <div class=\"pecb-h-steps__step\">\n <span [ngClass]=\"step.index < activeStep() ? 'pecb-h-steps__circle pecb-h-steps__circle--active' : 'pecb-h-steps__circle pecb-h-steps__circle--inactive'\">\n {{ step.index + 1 }}\n </span>\n <div class=\"pecb-h-steps__text\">\n <span [ngClass]=\"step.index < activeStep() ? 'pecb-h-steps__label pecb-h-steps__label--active' : 'pecb-h-steps__label pecb-h-steps__label--inactive'\">STEP {{ step.index + 1 }}</span>\n <span [ngClass]=\"step.index < activeStep() ? 'pecb-h-steps__title pecb-h-steps__title--active' : 'pecb-h-steps__title pecb-h-steps__title--inactive'\">{{ step.label }}</span>\n </div>\n </div>\n }\n </div>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class HorizontalStepsComponent {\n hStepsId = input<string>(generateUniqueId('h-steps'));\n totalSteps = input<number>(2);\n activeStep = input<number>(1);\n stepLabels = input<string[]>([]);\n\n stepsArray = computed(() => {\n const total = Math.max(2, Math.min(6, this.totalSteps()));\n const labels = this.stepLabels();\n return Array.from({ length: total }, (_, i) => ({\n index: i,\n label: labels[i] || 'Certificate'\n }));\n });\n}\n\n// =============================================================================\n// RADIO DISPLAY (display-only)\n// =============================================================================\n\nexport type RadioDisplayState = 'deactivated' | 'activated';\n\n@Component({\n selector: 'pecb-radio-display',\n standalone: true,\n imports: [CommonModule],\n template: `\n <span class=\"pecb-radio-display\" [attr.id]=\"radioDisplayId()\">\n <span [ngClass]=\"radioClasses()\">\n @if (state() === 'activated') {\n <span class=\"pecb-radio-display__inner\"></span>\n }\n </span>\n @if (label()) {\n <span class=\"pecb-radio-display__label\">{{ label() }}</span>\n }\n </span>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RadioDisplayComponent {\n radioDisplayId = input<string>(generateUniqueId('radio-display'));\n state = input<RadioDisplayState>('deactivated');\n label = input<string>('');\n\n radioClasses = computed(() => ['pecb-radio-display__circle', `pecb-radio-display__circle--${this.state()}`]);\n}\n\n// =============================================================================\n// CHECKBOX DISPLAY (display-only)\n// =============================================================================\n\nexport type CheckboxDisplayState = 'deactivated' | 'activated' | 'gray';\n\n@Component({\n selector: 'pecb-checkbox-display',\n standalone: true,\n imports: [CommonModule],\n template: `\n <span class=\"pecb-checkbox-display\" [attr.id]=\"checkboxDisplayId()\">\n <span [ngClass]=\"checkboxClasses()\">\n @if (state() === 'activated') {\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.5 7L5.5 10L11.5 4\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n @if (state() === 'gray') {\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2.5 7L5.5 10L11.5 4\" stroke=\"#919191\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n </span>\n @if (label()) {\n <span class=\"pecb-checkbox-display__label\">{{ label() }}</span>\n }\n </span>\n `,\n styleUrls: ['./other-elements.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CheckboxDisplayComponent {\n checkboxDisplayId = input<string>(generateUniqueId('checkbox-display'));\n state = input<CheckboxDisplayState>('deactivated');\n label = input<string>('');\n\n checkboxClasses = computed(() => ['pecb-checkbox-display__box', `pecb-checkbox-display__box--${this.state()}`]);\n}\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n ChangeDetectionStrategy,\n OnInit,\n OnDestroy,\n OnChanges,\n AfterViewInit,\n ElementRef,\n ViewChild\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { generateUniqueId, trapFocus, disableBodyScroll } from '../../shared/utils/dom.utils';\nimport { DropdownComponent, DropdownOption } from '../dropdown/dropdown.component';\nimport { InputComponent } from '../input/input.component';\nimport { DatepickerComponent } from '../datepicker/datepicker.component';\nimport { CheckboxComponent } from '../checkbox/checkbox.component';\nimport { ButtonComponent } from '../button/button.component';\n\nexport type FilterFieldType = 'dropdown' | 'input' | 'number' | 'date-range' | 'number-range';\n\nexport type FilterColumnsActiveTab = 'filters' | 'columns';\n\nexport interface FilterField {\n key: string;\n label: string;\n type: FilterFieldType;\n placeholder?: string;\n options?: DropdownOption[];\n fromLabel?: string;\n toLabel?: string;\n fromPlaceholder?: string;\n toPlaceholder?: string;\n value?: unknown;\n fromValue?: unknown;\n toValue?: unknown;\n}\n\nexport interface ColumnOption {\n key: string;\n label: string;\n visible: boolean;\n}\n\nexport interface FilterColumnsApplyEvent {\n filters: Record<string, unknown>;\n columns: ColumnOption[];\n viewName?: string;\n isDefaultView?: boolean;\n}\n\n@Component({\n selector: 'pecb-filter-columns',\n imports: [\n CommonModule,\n FormsModule,\n DropdownComponent,\n InputComponent,\n DatepickerComponent,\n CheckboxComponent,\n ButtonComponent\n ],\n templateUrl: './filter-columns.component.html',\n styleUrls: ['./filter-columns.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FilterColumnsComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n @ViewChild('modalPanel') modalPanel?: ElementRef<HTMLElement>;\n\n id = input(generateUniqueId('filter-columns'));\n\n /** Whether the modal is open */\n isOpen = input(false);\n\n /** Whether clicking the backdrop closes the modal */\n closeOnBackdropClick = input(true);\n\n /** Whether pressing Escape closes the modal */\n closeOnEscape = input(true);\n\n /** Filter field configurations */\n filterFields = input<FilterField[]>([]);\n\n /** Column options for the columns tab */\n columns = input<ColumnOption[]>([]);\n\n /** Initially active tab */\n activeTab = input<FilterColumnsActiveTab>('filters');\n\n /** Whether to show the save as view section */\n showSaveAsView = input(true);\n\n /** Title of the component */\n title = input('Filter & Columns');\n\n /** Apply button label */\n applyLabel = input('Apply');\n\n /** Cancel button label */\n cancelLabel = input('Cancel');\n\n /** Emitted when Apply is clicked */\n applied = output<FilterColumnsApplyEvent>();\n\n /** Emitted when Cancel is clicked or modal is closed */\n cancelled = output<void>();\n\n /** Emitted when the modal is closed */\n closed = output<void>();\n\n // Internal state\n currentTab = signal<FilterColumnsActiveTab>('filters');\n saveAsViewExpanded = signal(false);\n viewName = signal('');\n isDefaultView = signal(false);\n filterValues = signal<Record<string, unknown>>({});\n columnStates = signal<Record<string, boolean>>({});\n\n private cleanupFocusTrap: (() => void) | null = null;\n private cleanupBodyScroll: (() => void) | null = null;\n private previousActiveElement: Element | null = null;\n\n /** Computed: whether all columns are selected */\n allColumnsSelected = computed(() => {\n const states = this.columnStates();\n const cols = this.columns();\n if (cols.length === 0) return false;\n return cols.every(col => states[col.key] !== false);\n });\n\n /** Computed: whether at least one column is visible */\n hasVisibleColumn = computed(() => {\n const states = this.columnStates();\n const cols = this.columns();\n if (cols.length === 0) return true;\n return cols.some(col => states[col.key] !== false);\n });\n\n /** Computed: split columns into two arrays for the two-column layout */\n leftColumns = computed(() => {\n const cols = this.columns();\n const half = Math.ceil(cols.length / 2);\n return cols.slice(0, half);\n });\n\n rightColumns = computed(() => {\n const cols = this.columns();\n const half = Math.ceil(cols.length / 2);\n return cols.slice(half);\n });\n\n ngOnInit(): void {\n this.currentTab.set(this.activeTab());\n this.initColumnStates();\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 ngOnChanges(): void {\n this.initColumnStates();\n if (this.isOpen()) {\n this.onOpen();\n setTimeout(() => this.setupFocusTrap(), 0);\n } else {\n this.cleanup();\n }\n }\n\n ngOnDestroy(): void {\n this.cleanup();\n }\n\n private initColumnStates(): void {\n const states: Record<string, boolean> = {};\n this.columns().forEach(col => {\n states[col.key] = col.visible;\n });\n this.columnStates.set(states);\n }\n\n private onOpen(): void {\n this.previousActiveElement = document.activeElement;\n this.cleanupBodyScroll = disableBodyScroll();\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 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 this.cancelled.emit();\n }\n\n switchTab(tab: FilterColumnsActiveTab): void {\n this.currentTab.set(tab);\n }\n\n toggleSaveAsView(): void {\n this.saveAsViewExpanded.set(!this.saveAsViewExpanded());\n }\n\n onFilterValueChange(key: string, value: unknown): void {\n const current = { ...this.filterValues() };\n current[key] = value;\n this.filterValues.set(current);\n }\n\n onRangeFromChange(key: string, value: unknown): void {\n const current = { ...this.filterValues() };\n const rangeValue = (current[key] as { from?: unknown; to?: unknown }) || {};\n current[key] = { ...rangeValue, from: value };\n this.filterValues.set(current);\n }\n\n onRangeToChange(key: string, value: unknown): void {\n const current = { ...this.filterValues() };\n const rangeValue = (current[key] as { from?: unknown; to?: unknown }) || {};\n current[key] = { ...rangeValue, to: value };\n this.filterValues.set(current);\n }\n\n onColumnToggle(key: string, checked: boolean): void {\n const states = { ...this.columnStates() };\n states[key] = checked;\n this.columnStates.set(states);\n }\n\n selectAllColumns(): void {\n const allSelected = this.allColumnsSelected();\n const states: Record<string, boolean> = {};\n this.columns().forEach(col => {\n states[col.key] = !allSelected;\n });\n this.columnStates.set(states);\n }\n\n resetColumns(): void {\n this.initColumnStates();\n }\n\n isColumnVisible(key: string): boolean {\n return this.columnStates()[key] !== false;\n }\n\n onApply(): void {\n const result: FilterColumnsApplyEvent = {\n filters: { ...this.filterValues() },\n columns: this.columns().map(col => ({\n ...col,\n visible: this.columnStates()[col.key] !== false\n }))\n };\n\n if (this.saveAsViewExpanded() && this.viewName()) {\n result.viewName = this.viewName();\n result.isDefaultView = this.isDefaultView();\n }\n\n this.applied.emit(result);\n }\n\n onCancel(): void {\n this.close();\n }\n\n onViewNameChange(value: string): void {\n this.viewName.set(value);\n }\n\n onDefaultViewChange(checked: boolean): void {\n this.isDefaultView.set(checked);\n }\n}\n","<div\n *ngIf=\"isOpen()\"\n [id]=\"id()\"\n class=\"pecb-filter-columns\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"title()\"\n (click)=\"onBackdropClick($event)\"\n (keydown)=\"onKeydown($event)\"\n>\n <!-- Modal Panel -->\n <div\n #modalPanel\n class=\"pecb-filter-columns__panel\"\n tabindex=\"-1\"\n >\n <!-- Title -->\n <h3 class=\"pecb-filter-columns__title\">{{ title() }}</h3>\n\n <!-- Tabs -->\n <div class=\"pecb-filter-columns__tabs\" role=\"tablist\">\n <button\n type=\"button\"\n class=\"pecb-filter-columns__tab\"\n [class.pecb-filter-columns__tab--active]=\"currentTab() === 'filters'\"\n role=\"tab\"\n [attr.aria-selected]=\"currentTab() === 'filters'\"\n [attr.aria-controls]=\"id() + '-filters-panel'\"\n (click)=\"switchTab('filters')\"\n >\n Filters\n </button>\n <button\n type=\"button\"\n class=\"pecb-filter-columns__tab\"\n [class.pecb-filter-columns__tab--active]=\"currentTab() === 'columns'\"\n role=\"tab\"\n [attr.aria-selected]=\"currentTab() === 'columns'\"\n [attr.aria-controls]=\"id() + '-columns-panel'\"\n (click)=\"switchTab('columns')\"\n >\n Columns\n </button>\n </div>\n\n <!-- Scrollable content area -->\n <div class=\"pecb-filter-columns__content\">\n <!-- Filters Tab Panel -->\n <div\n *ngIf=\"currentTab() === 'filters'\"\n [id]=\"id() + '-filters-panel'\"\n class=\"pecb-filter-columns__tab-panel\"\n role=\"tabpanel\"\n >\n <ng-container *ngFor=\"let field of filterFields()\">\n <!-- Dropdown field -->\n <div *ngIf=\"field.type === 'dropdown'\" class=\"pecb-filter-columns__field\">\n <pecb-dropdown\n [label]=\"field.label\"\n [options]=\"field.options || []\"\n size=\"lg\"\n (selectionChange)=\"onFilterValueChange(field.key, $event)\"\n ></pecb-dropdown>\n </div>\n\n <!-- Input field -->\n <div *ngIf=\"field.type === 'input'\" class=\"pecb-filter-columns__field\">\n <pecb-input\n [label]=\"field.label\"\n [placeholder]=\"field.placeholder || ''\"\n size=\"lg\"\n (valueChange)=\"onFilterValueChange(field.key, $event)\"\n ></pecb-input>\n </div>\n\n <!-- Number field -->\n <div *ngIf=\"field.type === 'number'\" class=\"pecb-filter-columns__field\">\n <pecb-input\n [label]=\"field.label\"\n type=\"number\"\n [placeholder]=\"field.placeholder || ''\"\n size=\"lg\"\n (valueChange)=\"onFilterValueChange(field.key, $event)\"\n ></pecb-input>\n </div>\n\n <!-- Date range field -->\n <div *ngIf=\"field.type === 'date-range'\" class=\"pecb-filter-columns__field pecb-filter-columns__field--range\">\n <pecb-datepicker\n [label]=\"field.fromLabel || 'From'\"\n size=\"lg\"\n (dateChange)=\"onRangeFromChange(field.key, $event)\"\n ></pecb-datepicker>\n <pecb-datepicker\n [label]=\"field.toLabel || 'To'\"\n size=\"lg\"\n (dateChange)=\"onRangeToChange(field.key, $event)\"\n ></pecb-datepicker>\n </div>\n\n <!-- Number range field -->\n <div *ngIf=\"field.type === 'number-range'\" class=\"pecb-filter-columns__field pecb-filter-columns__field--range\">\n <pecb-input\n [label]=\"field.fromLabel || 'Min'\"\n type=\"number\"\n [placeholder]=\"field.fromPlaceholder || ''\"\n size=\"lg\"\n (valueChange)=\"onRangeFromChange(field.key, $event)\"\n ></pecb-input>\n <pecb-input\n [label]=\"field.toLabel || 'Max'\"\n type=\"number\"\n [placeholder]=\"field.toPlaceholder || ''\"\n size=\"lg\"\n (valueChange)=\"onRangeToChange(field.key, $event)\"\n ></pecb-input>\n </div>\n </ng-container>\n </div>\n\n <!-- Columns Tab Panel -->\n <div\n *ngIf=\"currentTab() === 'columns'\"\n [id]=\"id() + '-columns-panel'\"\n class=\"pecb-filter-columns__tab-panel\"\n role=\"tabpanel\"\n >\n <!-- Header row -->\n <div class=\"pecb-filter-columns__columns-header\">\n <p class=\"pecb-filter-columns__columns-description\">Select columns to display in the table</p>\n <div class=\"pecb-filter-columns__columns-actions\">\n <button\n type=\"button\"\n class=\"pecb-filter-columns__text-button\"\n (click)=\"selectAllColumns()\"\n >\n {{ allColumnsSelected() ? 'Deselect All' : 'Select All' }}\n </button>\n <button\n type=\"button\"\n class=\"pecb-filter-columns__text-button\"\n (click)=\"resetColumns()\"\n >\n Reset\n </button>\n </div>\n </div>\n\n <!-- Columns grid -->\n <div class=\"pecb-filter-columns__columns-container\">\n <div class=\"pecb-filter-columns__columns-grid\">\n <div class=\"pecb-filter-columns__columns-col\">\n <div *ngFor=\"let col of leftColumns()\" class=\"pecb-filter-columns__column-item\">\n <pecb-checkbox\n [label]=\"col.label\"\n [ngModel]=\"isColumnVisible(col.key)\"\n (checkedChange)=\"onColumnToggle(col.key, $event)\"\n ></pecb-checkbox>\n </div>\n </div>\n <div class=\"pecb-filter-columns__columns-col\">\n <div *ngFor=\"let col of rightColumns()\" class=\"pecb-filter-columns__column-item\">\n <pecb-checkbox\n [label]=\"col.label\"\n [ngModel]=\"isColumnVisible(col.key)\"\n (checkedChange)=\"onColumnToggle(col.key, $event)\"\n ></pecb-checkbox>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Warning text -->\n <p class=\"pecb-filter-columns__columns-warning\">At least one column must be visible</p>\n </div>\n </div>\n\n <!-- Divider -->\n <div class=\"pecb-filter-columns__divider\"></div>\n\n <!-- Save as View -->\n <div *ngIf=\"showSaveAsView()\" class=\"pecb-filter-columns__save-view\">\n <button\n type=\"button\"\n class=\"pecb-filter-columns__save-view-toggle\"\n [attr.aria-expanded]=\"saveAsViewExpanded()\"\n (click)=\"toggleSaveAsView()\"\n >\n <svg\n class=\"pecb-filter-columns__chevron\"\n [class.pecb-filter-columns__chevron--expanded]=\"saveAsViewExpanded()\"\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=\"M7.41 8.59L12 13.17L16.59 8.59L18 10L12 16L6 10L7.41 8.59Z\"\n fill=\"#212427\"\n />\n </svg>\n <span class=\"pecb-filter-columns__save-view-label\">Save as View</span>\n </button>\n\n <!-- Expanded content -->\n <div *ngIf=\"saveAsViewExpanded()\" class=\"pecb-filter-columns__save-view-content\">\n <pecb-input\n label=\"View Name\"\n size=\"lg\"\n (valueChange)=\"onViewNameChange($event)\"\n ></pecb-input>\n <pecb-checkbox\n label=\"Set as default view\"\n (checkedChange)=\"onDefaultViewChange($event)\"\n ></pecb-checkbox>\n </div>\n </div>\n\n <!-- Divider -->\n <div class=\"pecb-filter-columns__divider\"></div>\n\n <!-- Action buttons -->\n <div class=\"pecb-filter-columns__actions\">\n <pecb-button\n variant=\"primary-2\"\n size=\"md\"\n (clicked)=\"onApply()\"\n >\n {{ applyLabel() }}\n </pecb-button>\n <pecb-button\n variant=\"secondary\"\n size=\"md\"\n (clicked)=\"onCancel()\"\n >\n {{ cancelLabel() }}\n </pecb-button>\n </div>\n </div>\n</div>\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n ChangeDetectionStrategy,\n ElementRef,\n ViewChild,\n OnInit\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\nimport { ButtonComponent } from '../button/button.component';\n\nexport type FileUploadVariant = 'dropzone' | 'inline';\n\nexport type FileUploadState = 'default' | 'uploading' | 'complete' | 'error';\n\nexport interface UploadedFile {\n id: string;\n file?: File;\n name: string;\n size: number;\n date: Date;\n progress: number;\n state: FileUploadState;\n errorMessage?: string;\n fileType?: string;\n}\n\nexport interface FileUploadEvent {\n files: UploadedFile[];\n}\n\n@Component({\n selector: 'pecb-file-upload',\n imports: [CommonModule, ButtonComponent],\n templateUrl: './file-upload.component.html',\n styleUrls: ['./file-upload.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FileUploadComponent implements OnInit {\n @ViewChild('fileInput') fileInput?: ElementRef<HTMLInputElement>;\n\n id = input(generateUniqueId('file-upload'));\n\n /** Visual variant: dropzone (big area) or inline (compact row) */\n variant = input<FileUploadVariant>('dropzone');\n\n /** Whether multiple files can be uploaded */\n multiple = input(false);\n\n /** Accepted file types (e.g. '.pdf,.png,.jpg') */\n accept = input<string>('');\n\n /** Maximum file size in bytes */\n maxFileSize = input<number>(5 * 1024 * 1024);\n\n /** Maximum number of files (for multiple) */\n maxFiles = input<number>(10);\n\n /** Title text for the upload area (dropzone header / inline title) */\n uploadTitle = input('Upload Documents');\n\n /** Description text (inline: format info) */\n uploadDescription = input('PDF format');\n\n /** Max size label (inline) */\n maxSizeLabel = input('Max. 5MB');\n\n /** Accepted formats display text (dropzone) */\n acceptedFormatsText = input('SVG, PNG, JPG or GIF (max. 800x400px)');\n\n /** Browse button label */\n browseLabel = input('Browse Files');\n\n /** Upload button label (inline variant) */\n uploadLabel = input('Upload');\n\n /** Whether the component is disabled */\n disabled = input(false);\n\n /** Whether to show header with title and close button (multiple dropzone) */\n showHeader = input(false);\n\n /** Pre-populated files for demo/initial state */\n initialFiles = input<UploadedFile[]>([]);\n\n /** Emitted when files are selected */\n filesSelected = output<FileUploadEvent>();\n\n /** Emitted when a file upload is cancelled */\n fileCancelled = output<UploadedFile>();\n\n /** Emitted when retry is clicked for a failed file */\n fileRetry = output<UploadedFile>();\n\n /** Emitted when delete is clicked for a completed file */\n fileDeleted = output<UploadedFile>();\n\n /** Emitted when download is clicked for a completed file */\n fileDownload = output<UploadedFile>();\n\n /** Emitted when clear upload is clicked (dropzone single) */\n cleared = output<void>();\n\n /** Emitted when the close/X button is clicked */\n closeClicked = output<void>();\n\n // Internal state\n files = signal<UploadedFile[]>([]);\n isDragOver = signal(false);\n\n /** The file currently being uploaded in the dropzone area (most recent uploading file) */\n activeUploadingFile = computed<UploadedFile | null>(() => {\n const uploading = this.files().find(f => f.state === 'uploading');\n return uploading || null;\n });\n\n /** Whether the dropzone should show the default empty state */\n showDropzoneDefault = computed(() => {\n if (!this.multiple()) {\n return this.files().length === 0;\n }\n return !this.activeUploadingFile();\n });\n\n /** Current single-file state for dropzone single mode */\n dropzoneState = computed<FileUploadState>(() => {\n const fileList = this.files();\n if (fileList.length === 0) return 'default';\n return fileList[0].state;\n });\n\n /** Current single file for dropzone single mode */\n currentFile = computed<UploadedFile | null>(() => {\n const fileList = this.files();\n return fileList.length > 0 ? fileList[0] : null;\n });\n\n /** File count for the badge */\n fileCount = computed(() => this.files().length);\n\n /** Completed files for the file list */\n completedFiles = computed(() => this.files().filter(f => f.state !== 'uploading' || this.multiple()));\n\n /** All non-active files for the list section */\n listFiles = computed(() => this.files());\n\n ngOnInit(): void {\n const initial = this.initialFiles();\n if (initial.length > 0) {\n this.files.set([...initial]);\n }\n }\n\n openFileDialog(): void {\n if (this.disabled()) return;\n this.fileInput?.nativeElement.click();\n }\n\n onFileInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files) {\n this.handleFiles(Array.from(input.files));\n }\n input.value = '';\n }\n\n onDragOver(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n if (!this.disabled()) {\n this.isDragOver.set(true);\n }\n }\n\n onDragLeave(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n }\n\n onDrop(event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.isDragOver.set(false);\n if (this.disabled()) return;\n if (event.dataTransfer?.files) {\n this.handleFiles(Array.from(event.dataTransfer.files));\n }\n }\n\n private handleFiles(fileList: File[]): void {\n const maxFiles = this.multiple() ? this.maxFiles() : 1;\n const filesToAdd = fileList.slice(0, maxFiles - this.files().length);\n\n const newFiles: UploadedFile[] = filesToAdd.map(file => ({\n id: generateUniqueId('file'),\n file,\n name: file.name,\n size: file.size,\n date: new Date(),\n progress: 0,\n state: 'uploading' as FileUploadState,\n fileType: this.getFileExtension(file.name)\n }));\n\n if (this.multiple()) {\n this.files.set([...this.files(), ...newFiles]);\n } else {\n this.files.set(newFiles);\n }\n\n this.filesSelected.emit({ files: [...this.files()] });\n }\n\n private getFileExtension(filename: string): string {\n return filename.split('.').pop()?.toUpperCase() || '';\n }\n\n updateFileProgress(fileId: string, progress: number): void {\n this.files.update(files =>\n files.map(f => f.id === fileId ? { ...f, progress: Math.min(progress, 100) } : f)\n );\n }\n\n updateFileState(fileId: string, state: FileUploadState, errorMessage?: string): void {\n this.files.update(files =>\n files.map(f => f.id === fileId ? { ...f, state, errorMessage } : f)\n );\n }\n\n cancelFile(file: UploadedFile): void {\n this.files.update(files => files.filter(f => f.id !== file.id));\n this.fileCancelled.emit(file);\n }\n\n retryFile(file: UploadedFile): void {\n this.updateFileState(file.id, 'uploading');\n this.updateFileProgress(file.id, 0);\n this.fileRetry.emit(file);\n }\n\n deleteFile(file: UploadedFile): void {\n this.files.update(files => files.filter(f => f.id !== file.id));\n this.fileDeleted.emit(file);\n }\n\n downloadFile(file: UploadedFile): void {\n this.fileDownload.emit(file);\n }\n\n clearUpload(): void {\n this.files.set([]);\n this.cleared.emit();\n }\n\n onClose(): void {\n this.closeClicked.emit();\n }\n\n formatFileSize(bytes: number): string {\n if (bytes === 0) return '0B';\n const units = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(1024));\n return Math.round(bytes / Math.pow(1024, i)) + units[i];\n }\n\n formatFileDate(date: Date): string {\n const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n const day = date.getDate();\n const month = months[date.getMonth()];\n const year = date.getFullYear();\n const hours = date.getHours();\n const minutes = date.getMinutes().toString().padStart(2, '0');\n const ampm = hours >= 12 ? 'pm' : 'am';\n const displayHours = hours % 12 || 12;\n return `${day} ${month}, ${year} | ${displayHours}:${minutes}${ampm}`;\n }\n\n getFileTypeColor(type: string): string {\n const colors: Record<string, string> = {\n 'PDF': '#cc400c',\n 'PNG': '#008000',\n 'JPG': '#007bff',\n 'XLS': '#217346',\n 'MP3': '#8e6df0',\n 'GIF': '#fd7e14'\n };\n return colors[type] || '#919191';\n }\n}\n","<!-- Hidden file input -->\n<input\n #fileInput\n type=\"file\"\n class=\"pecb-file-upload__input\"\n [id]=\"id() + '-input'\"\n [accept]=\"accept()\"\n [multiple]=\"multiple()\"\n [disabled]=\"disabled()\"\n (change)=\"onFileInputChange($event)\"\n/>\n\n<div\n class=\"pecb-file-upload\"\n [class.pecb-file-upload--inline]=\"variant() === 'inline'\"\n [class.pecb-file-upload--container]=\"showHeader()\"\n>\n\n <!-- ================================================ -->\n <!-- HEADER (for multiple dropzone, from Figma design) -->\n <!-- ================================================ -->\n <div *ngIf=\"showHeader()\" class=\"pecb-file-upload__header\">\n <h3 class=\"pecb-file-upload__header-title\">{{ uploadTitle() }}</h3>\n <button type=\"button\" class=\"pecb-file-upload__icon-btn\" aria-label=\"Close\" (click)=\"onClose()\">\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M21 7 7 21M7 7l14 14\" stroke=\"#475367\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n\n <!-- ================================================ -->\n <!-- DROPZONE VARIANT -->\n <!-- ================================================ -->\n <ng-container *ngIf=\"variant() === 'dropzone'\">\n\n <!-- SINGLE MODE: show one state at a time -->\n <ng-container *ngIf=\"!multiple()\">\n\n <!-- Default -->\n <div\n *ngIf=\"dropzoneState() === 'default'\"\n class=\"pecb-file-upload__dropzone\"\n [class.pecb-file-upload__dropzone--drag-over]=\"isDragOver()\"\n [class.pecb-file-upload__dropzone--disabled]=\"disabled()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"openFileDialog()\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"'Upload file. ' + acceptedFormatsText()\"\n (keydown.enter)=\"openFileDialog()\"\n (keydown.space)=\"openFileDialog(); $event.preventDefault()\"\n >\n <div class=\"pecb-file-upload__dropzone-content\">\n <div class=\"pecb-file-upload__state-icon pecb-file-upload__state-icon--default\">\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M6.333 18.46A5.833 5.833 0 0 1 7 6.419a8.167 8.167 0 0 1 15.862 3.08h.471A4.667 4.667 0 0 1 22.167 18.2M9.333 18.667 14 14m0 0 4.667 4.667M14 14v10.5\" stroke=\"#475367\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"pecb-file-upload__dropzone-text\">\n <div class=\"pecb-file-upload__dropzone-title-row\">\n <span class=\"pecb-file-upload__dropzone-link\">Click to upload</span>\n <span class=\"pecb-file-upload__dropzone-subtitle\">or drag and drop</span>\n </div>\n <p class=\"pecb-file-upload__dropzone-formats\">{{ acceptedFormatsText() }}</p>\n </div>\n <div class=\"pecb-file-upload__divider\">\n <div class=\"pecb-file-upload__divider-line\"></div>\n <span class=\"pecb-file-upload__divider-text\">OR</span>\n <div class=\"pecb-file-upload__divider-line\"></div>\n </div>\n <pecb-button variant=\"primary-2\" size=\"md\" (clicked)=\"openFileDialog(); $event.stopPropagation()\">\n {{ browseLabel() }}\n </pecb-button>\n </div>\n </div>\n\n <!-- Uploading -->\n <div *ngIf=\"dropzoneState() === 'uploading'\" class=\"pecb-file-upload__dropzone pecb-file-upload__dropzone--uploading\">\n <div class=\"pecb-file-upload__dropzone-content\">\n <div class=\"pecb-file-upload__file-type-icon\" *ngIf=\"currentFile() as file\">\n <svg width=\"45\" height=\"45\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M4 4a2 2 0 0 1 2-2h12l8 8v18a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4Z\" fill=\"#F2F4F7\"/>\n <path d=\"M18 2l8 8h-6a2 2 0 0 1-2-2V2Z\" fill=\"#D0D5DD\"/>\n </svg>\n <span class=\"pecb-file-upload__file-type-badge\" [style.background-color]=\"getFileTypeColor(file.fileType || '')\">{{ file.fileType }}</span>\n </div>\n <div class=\"pecb-file-upload__progress-info\" *ngIf=\"currentFile() as file\">\n <p class=\"pecb-file-upload__progress-percent\">{{ file.progress }}%</p>\n <div class=\"pecb-file-upload__progress-bar\">\n <div class=\"pecb-file-upload__progress-bar-track\"></div>\n <div class=\"pecb-file-upload__progress-bar-fill\" [style.width.%]=\"file.progress\"></div>\n </div>\n </div>\n <div class=\"pecb-file-upload__dropzone-status\" *ngIf=\"currentFile() as file\">\n <p class=\"pecb-file-upload__status-title\">Uploading Document...</p>\n <p class=\"pecb-file-upload__status-subtitle\">{{ file.name }}</p>\n </div>\n </div>\n </div>\n\n <!-- Success -->\n <div *ngIf=\"dropzoneState() === 'complete'\" class=\"pecb-file-upload__dropzone pecb-file-upload__dropzone--success\">\n <div class=\"pecb-file-upload__dropzone-content\">\n <div class=\"pecb-file-upload__state-icon pecb-file-upload__state-icon--success\">\n <svg width=\"35\" height=\"35\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2Zm-2 15-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9Z\" fill=\"#008000\"/>\n </svg>\n </div>\n <div class=\"pecb-file-upload__dropzone-status\" *ngIf=\"currentFile() as file\">\n <p class=\"pecb-file-upload__status-title\">Uploading Document...</p>\n <p class=\"pecb-file-upload__status-subtitle\">{{ file.name }}</p>\n </div>\n <button type=\"button\" class=\"pecb-file-upload__text-action\" (click)=\"clearUpload()\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M10 4.167v11.666M4.167 10h11.666\" stroke=\"#212427\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <span>Clear Upload</span>\n </button>\n </div>\n </div>\n\n <!-- Error -->\n <div *ngIf=\"dropzoneState() === 'error'\" class=\"pecb-file-upload__dropzone pecb-file-upload__dropzone--error\">\n <div class=\"pecb-file-upload__dropzone-content\">\n <div class=\"pecb-file-upload__state-icon pecb-file-upload__state-icon--error\">\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0ZM12 9v4M12 17h.01\" stroke=\"#dc3545\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n <div class=\"pecb-file-upload__dropzone-status\" *ngIf=\"currentFile() as file\">\n <p class=\"pecb-file-upload__status-title\">Failed to Upload</p>\n <p class=\"pecb-file-upload__status-subtitle pecb-file-upload__status-subtitle--muted\">{{ file.errorMessage || 'Error message' }}</p>\n </div>\n <button type=\"button\" class=\"pecb-file-upload__text-action pecb-file-upload__text-action--error\" (click)=\"retryFile(currentFile()!)\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M10 4.167v11.666M4.167 10h11.666\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <span>Try Again</span>\n </button>\n </div>\n </div>\n </ng-container>\n\n <!-- MULTIPLE MODE: dropzone area + file list below -->\n <ng-container *ngIf=\"multiple()\">\n\n <!-- Dropzone area (default if nothing uploading, else uploading state) -->\n <div\n *ngIf=\"showDropzoneDefault()\"\n class=\"pecb-file-upload__dropzone\"\n [class.pecb-file-upload__dropzone--drag-over]=\"isDragOver()\"\n [class.pecb-file-upload__dropzone--disabled]=\"disabled()\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n (click)=\"openFileDialog()\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-label]=\"'Upload files. ' + acceptedFormatsText()\"\n (keydown.enter)=\"openFileDialog()\"\n (keydown.space)=\"openFileDialog(); $event.preventDefault()\"\n >\n <div class=\"pecb-file-upload__dropzone-content\">\n <div class=\"pecb-file-upload__state-icon pecb-file-upload__state-icon--default\">\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M6.333 18.46A5.833 5.833 0 0 1 7 6.419a8.167 8.167 0 0 1 15.862 3.08h.471A4.667 4.667 0 0 1 22.167 18.2M9.333 18.667 14 14m0 0 4.667 4.667M14 14v10.5\" stroke=\"#475367\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"pecb-file-upload__dropzone-text\">\n <div class=\"pecb-file-upload__dropzone-title-row\">\n <span class=\"pecb-file-upload__dropzone-link\">Click to upload</span>\n <span class=\"pecb-file-upload__dropzone-subtitle\">or drag and drop</span>\n </div>\n <p class=\"pecb-file-upload__dropzone-formats\">{{ acceptedFormatsText() }}</p>\n </div>\n <div class=\"pecb-file-upload__divider\">\n <div class=\"pecb-file-upload__divider-line\"></div>\n <span class=\"pecb-file-upload__divider-text\">OR</span>\n <div class=\"pecb-file-upload__divider-line\"></div>\n </div>\n <pecb-button variant=\"primary-2\" size=\"md\" (clicked)=\"openFileDialog(); $event.stopPropagation()\">\n {{ browseLabel() }}\n </pecb-button>\n </div>\n </div>\n\n <!-- Uploading state in dropzone (when a file is actively uploading) -->\n <div *ngIf=\"activeUploadingFile() as uploadingFile\" class=\"pecb-file-upload__dropzone pecb-file-upload__dropzone--uploading\">\n <div class=\"pecb-file-upload__dropzone-content\">\n <div class=\"pecb-file-upload__file-type-icon\">\n <svg width=\"45\" height=\"45\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M4 4a2 2 0 0 1 2-2h12l8 8v18a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4Z\" fill=\"#F2F4F7\"/>\n <path d=\"M18 2l8 8h-6a2 2 0 0 1-2-2V2Z\" fill=\"#D0D5DD\"/>\n </svg>\n <span class=\"pecb-file-upload__file-type-badge\" [style.background-color]=\"getFileTypeColor(uploadingFile.fileType || '')\">{{ uploadingFile.fileType }}</span>\n </div>\n <div class=\"pecb-file-upload__progress-info\">\n <p class=\"pecb-file-upload__progress-percent\">{{ uploadingFile.progress }}%</p>\n <div class=\"pecb-file-upload__progress-bar\">\n <div class=\"pecb-file-upload__progress-bar-track\"></div>\n <div class=\"pecb-file-upload__progress-bar-fill\" [style.width.%]=\"uploadingFile.progress\"></div>\n </div>\n </div>\n <div class=\"pecb-file-upload__dropzone-status\">\n <p class=\"pecb-file-upload__status-title\">Uploading Document...</p>\n <p class=\"pecb-file-upload__status-subtitle\">{{ uploadingFile.name }}</p>\n </div>\n </div>\n </div>\n\n <!-- Uploaded Files section -->\n <div *ngIf=\"files().length > 0\" class=\"pecb-file-upload__file-list-section\">\n <div class=\"pecb-file-upload__file-list-header\">\n <span class=\"pecb-file-upload__file-list-label\">Uploaded Files</span>\n <span class=\"pecb-file-upload__file-count-badge\">{{ fileCount() }}</span>\n </div>\n\n <div class=\"pecb-file-upload__file-list\">\n <ng-container *ngFor=\"let file of files()\">\n <ng-container [ngTemplateOutlet]=\"fileRowTpl\" [ngTemplateOutletContext]=\"{ $implicit: file }\"></ng-container>\n </ng-container>\n </div>\n </div>\n </ng-container>\n </ng-container>\n\n <!-- ================================================ -->\n <!-- INLINE VARIANT -->\n <!-- ================================================ -->\n <ng-container *ngIf=\"variant() === 'inline'\">\n\n <!-- Default / empty row -->\n <div *ngIf=\"files().length === 0\" class=\"pecb-file-upload__inline-row\">\n <div class=\"pecb-file-upload__inline-left\">\n <div class=\"pecb-file-upload__state-icon pecb-file-upload__state-icon--default pecb-file-upload__state-icon--sm\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M6.333 18.46A5.833 5.833 0 0 1 7 6.419a8.167 8.167 0 0 1 15.862 3.08h.471A4.667 4.667 0 0 1 22.167 18.2M9.333 18.667 14 14m0 0 4.667 4.667M14 14v10.5\" stroke=\"#475367\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"pecb-file-upload__inline-text\">\n <p class=\"pecb-file-upload__inline-title\">{{ uploadTitle() }}</p>\n <div class=\"pecb-file-upload__inline-meta\">\n <span>{{ uploadDescription() }}</span>\n <span class=\"pecb-file-upload__dot\"></span>\n <span>{{ maxSizeLabel() }}</span>\n </div>\n </div>\n </div>\n <pecb-button variant=\"primary-2\" size=\"md\" [disabled]=\"disabled()\" (clicked)=\"openFileDialog()\">\n {{ uploadLabel() }}\n </pecb-button>\n </div>\n\n <!-- File rows -->\n <ng-container *ngFor=\"let file of files()\">\n <ng-container [ngTemplateOutlet]=\"fileRowTpl\" [ngTemplateOutletContext]=\"{ $implicit: file }\"></ng-container>\n </ng-container>\n </ng-container>\n</div>\n\n<!-- ================================================ -->\n<!-- SHARED FILE ROW TEMPLATE -->\n<!-- ================================================ -->\n<ng-template #fileRowTpl let-file>\n <div class=\"pecb-file-upload__inline-row\">\n\n <!-- Uploading state -->\n <ng-container *ngIf=\"file.state === 'uploading'\">\n <div class=\"pecb-file-upload__inline-left\">\n <div class=\"pecb-file-upload__file-type-icon pecb-file-upload__file-type-icon--sm\">\n <svg width=\"48\" height=\"48\" viewBox=\"0 0 32 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M4 4a2 2 0 0 1 2-2h12l8 8v18a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4Z\" fill=\"#F2F4F7\"/>\n <path d=\"M18 2l8 8h-6a2 2 0 0 1-2-2V2Z\" fill=\"#D0D5DD\"/>\n </svg>\n <span class=\"pecb-file-upload__file-type-badge\" [style.background-color]=\"getFileTypeColor(file.fileType || '')\">{{ file.fileType }}</span>\n </div>\n <div class=\"pecb-file-upload__inline-text\">\n <p class=\"pecb-file-upload__inline-title\">{{ file.name }}</p>\n <div class=\"pecb-file-upload__inline-meta\">\n <span>{{ formatFileDate(file.date) }}</span>\n <span class=\"pecb-file-upload__dot\"></span>\n <span>{{ formatFileSize(file.size) }}</span>\n </div>\n </div>\n </div>\n <div class=\"pecb-file-upload__inline-actions\">\n <div class=\"pecb-file-upload__circular-progress\" [attr.aria-label]=\"file.progress + '% uploaded'\">\n <svg viewBox=\"0 0 48 48\" class=\"pecb-file-upload__circular-progress-svg\">\n <circle cx=\"24\" cy=\"24\" r=\"20\" class=\"pecb-file-upload__circular-progress-track\"/>\n <circle cx=\"24\" cy=\"24\" r=\"20\" class=\"pecb-file-upload__circular-progress-fill\" [style.stroke-dashoffset]=\"125.6 - (125.6 * file.progress / 100)\"/>\n </svg>\n <span class=\"pecb-file-upload__circular-progress-text\">{{ file.progress }}%</span>\n </div>\n <button type=\"button\" class=\"pecb-file-upload__icon-btn\" aria-label=\"Cancel upload\" (click)=\"cancelFile(file)\">\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M21 7 7 21M7 7l14 14\" stroke=\"#475367\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </ng-container>\n\n <!-- Complete state -->\n <ng-container *ngIf=\"file.state === 'complete'\">\n <div class=\"pecb-file-upload__inline-left\">\n <div class=\"pecb-file-upload__state-icon pecb-file-upload__state-icon--success pecb-file-upload__state-icon--sm\">\n <svg width=\"30\" height=\"30\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2Zm-2 15-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9Z\" fill=\"#008000\"/>\n </svg>\n </div>\n <div class=\"pecb-file-upload__inline-text\">\n <p class=\"pecb-file-upload__inline-title\">{{ file.name }}</p>\n <div class=\"pecb-file-upload__inline-meta\">\n <span>{{ formatFileDate(file.date) }}</span>\n <span class=\"pecb-file-upload__dot\"></span>\n <span>{{ formatFileSize(file.size) }}</span>\n </div>\n </div>\n </div>\n <div class=\"pecb-file-upload__inline-actions\">\n <button type=\"button\" class=\"pecb-file-upload__icon-btn pecb-file-upload__icon-btn--delete\" aria-label=\"Delete file\" (click)=\"deleteFile(file)\">\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M3.5 7h21M9.333 7V4.667a2.333 2.333 0 0 1 2.334-2.334h4.666a2.333 2.333 0 0 1 2.334 2.334V7m3.5 0v16.333a2.333 2.333 0 0 1-2.334 2.334H8.167a2.333 2.333 0 0 1-2.334-2.334V7h16.334ZM11.667 12.833v7M16.333 12.833v7\" stroke=\"#dc3545\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n <button type=\"button\" class=\"pecb-file-upload__icon-btn pecb-file-upload__icon-btn--download\" aria-label=\"Download file\" (click)=\"downloadFile(file)\">\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 28 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M24.5 17.5v4.667a2.333 2.333 0 0 1-2.333 2.333H5.833A2.333 2.333 0 0 1 3.5 22.167V17.5M8.167 11.667 14 17.5l5.833-5.833M14 17.5V3.5\" stroke=\"#475367\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n </ng-container>\n\n <!-- Error state -->\n <ng-container *ngIf=\"file.state === 'error'\">\n <div class=\"pecb-file-upload__inline-left\">\n <div class=\"pecb-file-upload__state-icon pecb-file-upload__state-icon--error pecb-file-upload__state-icon--sm\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0ZM12 9v4M12 17h.01\" stroke=\"#dc3545\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n </div>\n <div class=\"pecb-file-upload__inline-text\">\n <p class=\"pecb-file-upload__inline-title\">{{ file.name }}</p>\n <p class=\"pecb-file-upload__inline-error\">{{ file.errorMessage || 'Error message' }}</p>\n </div>\n </div>\n <button type=\"button\" class=\"pecb-file-upload__text-action pecb-file-upload__text-action--error\" (click)=\"retryFile(file)\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path d=\"M10 4.167v11.666M4.167 10h11.666\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>\n <span>Try Again</span>\n </button>\n </ng-container>\n </div>\n</ng-template>\n","import {\n Component,\n input,\n output,\n computed,\n signal,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport type ToolbarVariant = 'buttons' | 'tabs';\n\nexport interface ToolbarButton {\n label: string;\n variant: 'primary' | 'secondary';\n}\n\nexport interface ToolbarTab {\n label: string;\n active?: boolean;\n}\n\n// =============================================================================\n// TOOLBAR BAR COMPONENT\n// =============================================================================\n\n/**\n * Toolbar Bar component matching the PECB Figma design system.\n *\n * A full-width toolbar with Go Back link, content area (buttons or tabs),\n * and search input.\n *\n * @example\n * ```html\n * <pecb-toolbar-bar\n * variant=\"buttons\"\n * [buttons]=\"[{label: 'Save', variant: 'primary'}, {label: 'Cancel', variant: 'secondary'}]\"\n * (backClick)=\"onBack()\"\n * (buttonClick)=\"onButton($event)\"\n * (searchChange)=\"onSearch($event)\"\n * ></pecb-toolbar-bar>\n *\n * <pecb-toolbar-bar\n * variant=\"tabs\"\n * [tabs]=\"[{label: 'All', active: true}, {label: 'Recent'}]\"\n * (tabClick)=\"onTab($event)\"\n * ></pecb-toolbar-bar>\n * ```\n */\n@Component({\n selector: 'pecb-toolbar-bar',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './toolbar-bar.component.html',\n styleUrls: ['./toolbar-bar.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ToolbarBarComponent {\n /** Unique element ID */\n id = input<string>(generateUniqueId('toolbar-bar'));\n\n /** Toolbar variant: buttons or tabs */\n variant = input<ToolbarVariant>('buttons');\n\n /** Whether to show the Go Back button */\n showBackButton = input<boolean>(true);\n\n /** Whether to show the search input */\n showSearch = input<boolean>(true);\n\n /** Buttons configuration (for variant='buttons') */\n buttons = input<ToolbarButton[]>([]);\n\n /** Tabs configuration (for variant='tabs') */\n tabs = input<ToolbarTab[]>([]);\n\n /** Emits when Go Back is clicked */\n backClick = output<void>();\n\n /** Emits when a button is clicked */\n buttonClick = output<{ label: string; variant: string }>();\n\n /** Emits when a tab is clicked */\n tabClick = output<{ label: string; index: number }>();\n\n /** Emits when search input value changes */\n searchChange = output<string>();\n\n /** Internal active tab index */\n activeTabIndex = signal<number>(-1);\n\n /** Computed active tabs based on input or internal state */\n computedTabs = computed(() => {\n const tabList = this.tabs();\n const internalIdx = this.activeTabIndex();\n\n if (internalIdx >= 0) {\n return tabList.map((tab, i) => ({\n ...tab,\n active: i === internalIdx\n }));\n }\n\n // If no internal selection, use the input active flags\n const hasActive = tabList.some(t => t.active);\n if (!hasActive && tabList.length > 0) {\n return tabList.map((tab, i) => ({\n ...tab,\n active: i === 0\n }));\n }\n return tabList;\n });\n\n /** Handle tab click */\n onTabClick(tab: ToolbarTab, index: number): void {\n this.activeTabIndex.set(index);\n this.tabClick.emit({ label: tab.label, index });\n }\n\n /** Handle search input */\n onSearchInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.searchChange.emit(value);\n }\n}\n","<div class=\"pecb-toolbar-bar\" [attr.id]=\"id()\">\n <!-- Go Back -->\n @if (showBackButton()) {\n <button class=\"pecb-toolbar-bar__back\" (click)=\"backClick.emit()\">\n <svg width=\"11\" height=\"11\" viewBox=\"0 0 11 11\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 1.5L3 5.5L7 9.5\" stroke=\"#313131\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n <span class=\"pecb-toolbar-bar__back-text\">Go Back</span>\n </button>\n }\n\n <!-- Content Row -->\n <div class=\"pecb-toolbar-bar__row\">\n <!-- Buttons Variant -->\n @if (variant() === 'buttons') {\n <div class=\"pecb-toolbar-bar__buttons\">\n @for (btn of buttons(); track btn.label) {\n <button\n class=\"pecb-toolbar-bar__btn\"\n [class.pecb-toolbar-bar__btn--primary]=\"btn.variant === 'primary'\"\n [class.pecb-toolbar-bar__btn--secondary]=\"btn.variant === 'secondary'\"\n (click)=\"buttonClick.emit({ label: btn.label, variant: btn.variant })\"\n >\n {{ btn.label }}\n </button>\n }\n </div>\n }\n\n <!-- Tabs Variant -->\n @if (variant() === 'tabs') {\n <div class=\"pecb-toolbar-bar__tabs\" role=\"tablist\">\n @for (tab of computedTabs(); track tab.label; let i = $index) {\n <button\n class=\"pecb-toolbar-bar__tab\"\n [class.pecb-toolbar-bar__tab--active]=\"tab.active\"\n role=\"tab\"\n [attr.aria-selected]=\"tab.active\"\n (click)=\"onTabClick(tab, i)\"\n >\n {{ tab.label }}\n </button>\n }\n </div>\n }\n\n <!-- Search Input -->\n @if (showSearch()) {\n <div class=\"pecb-toolbar-bar__search\">\n <svg class=\"pecb-toolbar-bar__search-icon\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6.5\" cy=\"6.5\" r=\"5\" stroke=\"#c2c2c2\" stroke-width=\"1.2\"/>\n <path d=\"M10 10L13 13\" stroke=\"#c2c2c2\" stroke-width=\"1.2\" stroke-linecap=\"round\"/>\n </svg>\n <input\n class=\"pecb-toolbar-bar__search-input\"\n type=\"text\"\n placeholder=\"Search...\"\n (input)=\"onSearchInput($event)\"\n />\n </div>\n }\n </div>\n</div>\n","import {\n Component,\n input,\n output,\n computed,\n signal,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\nimport { NoteSidebarItemComponent } from '../other-elements/other-elements.component';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\nexport interface NoteItem {\n name: string;\n text: string;\n time: string;\n state: 'default' | 'unread' | 'active';\n}\n\nexport interface NoteGroup {\n title: string;\n notes: NoteItem[];\n}\n\n// =============================================================================\n// NOTES PANEL COMPONENT\n// =============================================================================\n\n/**\n * Notes Panel component matching the PECB Figma design system.\n *\n * A sidebar panel that displays notes grouped by time periods.\n *\n * @example\n * ```html\n * <pecb-notes-panel\n * [groups]=\"noteGroups\"\n * [totalCount]=\"42\"\n * (noteClick)=\"onNoteClick($event)\"\n * (searchChange)=\"onSearch($event)\"\n * ></pecb-notes-panel>\n * ```\n */\n@Component({\n selector: 'pecb-notes-panel',\n standalone: true,\n imports: [CommonModule, NoteSidebarItemComponent],\n templateUrl: './notes-panel.component.html',\n styleUrls: ['./notes-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NotesPanelComponent {\n /** Unique element ID */\n id = input<string>(generateUniqueId('notes-panel'));\n\n /** Note groups with titles and note items */\n groups = input<NoteGroup[]>([]);\n\n /** Total note count displayed in footer */\n totalCount = input<number>(0);\n\n /** Emits when a note item is clicked */\n noteClick = output<{ groupIndex: number; noteIndex: number }>();\n\n /** Emits when search input value changes */\n searchChange = output<string>();\n\n /** Search query */\n searchQuery = signal('');\n\n /** Filtered groups based on search */\n filteredGroups = computed(() => {\n const query = this.searchQuery().toLowerCase();\n const allGroups = this.groups();\n\n if (!query) {\n return allGroups;\n }\n\n return allGroups\n .map(group => ({\n ...group,\n notes: group.notes.filter(\n note =>\n note.name.toLowerCase().includes(query) ||\n note.text.toLowerCase().includes(query)\n )\n }))\n .filter(group => group.notes.length > 0);\n });\n\n /** Footer text */\n footerText = computed(() => {\n const count = this.totalCount();\n return `${count} Note${count !== 1 ? 's' : ''}`;\n });\n\n /** Get position for a note within a group */\n getNotePosition(notes: NoteItem[], index: number): 'top' | 'middle' | 'bottom' | 'single' {\n if (notes.length === 1) return 'single';\n if (index === 0) return 'top';\n if (index === notes.length - 1) return 'bottom';\n return 'middle';\n }\n\n /** Handle search input */\n onSearchInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.searchQuery.set(value);\n this.searchChange.emit(value);\n }\n\n /** Handle note click */\n onNoteClick(groupIndex: number, noteIndex: number): void {\n this.noteClick.emit({ groupIndex, noteIndex });\n }\n}\n","<div class=\"pecb-notes-panel\" [attr.id]=\"id()\">\n <!-- Search Bar -->\n <div class=\"pecb-notes-panel__search\">\n <svg class=\"pecb-notes-panel__search-icon\" width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"6.5\" cy=\"6.5\" r=\"5\" stroke=\"#c2c2c2\" stroke-width=\"1.2\"/>\n <path d=\"M10 10L13 13\" stroke=\"#c2c2c2\" stroke-width=\"1.2\" stroke-linecap=\"round\"/>\n </svg>\n <input\n class=\"pecb-notes-panel__search-input\"\n type=\"text\"\n placeholder=\"Search...\"\n (input)=\"onSearchInput($event)\"\n />\n </div>\n\n <!-- Note Groups -->\n <div class=\"pecb-notes-panel__groups\">\n @for (group of filteredGroups(); track group.title; let gi = $index) {\n <div class=\"pecb-notes-panel__group\">\n <div class=\"pecb-notes-panel__group-title\">{{ group.title }}</div>\n <div class=\"pecb-notes-panel__group-items\">\n @for (note of group.notes; track note.name + note.time; let ni = $index) {\n <div (click)=\"onNoteClick(gi, ni)\" class=\"pecb-notes-panel__note-wrapper\">\n <pecb-note-sidebar-item\n [name]=\"note.name\"\n [text]=\"note.text\"\n [time]=\"note.time\"\n [state]=\"note.state\"\n [position]=\"getNotePosition(group.notes, ni)\"\n ></pecb-note-sidebar-item>\n </div>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Footer -->\n <div class=\"pecb-notes-panel__footer\">\n <span class=\"pecb-notes-panel__footer-text\">{{ footerText() }}</span>\n </div>\n</div>\n","import {\n Component,\n input,\n output,\n computed,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\nimport { QuantitySelectorComponent } from '../other-elements/other-elements.component';\n\n// =============================================================================\n// TYPES\n// =============================================================================\n\n/**\n * All supported text form field display types.\n */\nexport type TextFormFieldType =\n | 'text'\n | 'link'\n | 'status'\n | 'description'\n | 'tag'\n | 'field'\n | 'button'\n | 'training-type'\n | 'checkbox'\n | 'radio'\n | 'profile'\n | 'description-field'\n | 'attachment'\n | 'icon-title'\n | 'date'\n | 'date-icon'\n | 'amount'\n | 'status-label'\n | 'button-secondary';\n\n/**\n * Status color options for status variant.\n */\nexport type StatusColor = 'success' | 'warning' | 'error' | 'info';\n\n/**\n * Field style: section (lighter) or banner (bolder).\n */\nexport type FieldStyle = 'section' | 'banner';\n\n/**\n * Items for checkbox/radio variants.\n */\nexport interface FieldItem {\n label: string;\n checked?: boolean;\n}\n\n// =============================================================================\n// TEXT FORM FIELD COMPONENT\n// =============================================================================\n\n/**\n * Text Form Field component matching the PECB Figma design system.\n *\n * A display-only form field showing a label + value in different formats.\n *\n * @example\n * ```html\n * <pecb-text-form-field type=\"text\" label=\"Name\" value=\"John Doe\"></pecb-text-form-field>\n * <pecb-text-form-field type=\"link\" label=\"Website\" value=\"Visit\" linkUrl=\"https://pecb.com\"></pecb-text-form-field>\n * <pecb-text-form-field type=\"status\" label=\"Status\" value=\"Active\" statusColor=\"success\"></pecb-text-form-field>\n * ```\n */\n@Component({\n selector: 'pecb-text-form-field',\n standalone: true,\n imports: [CommonModule, QuantitySelectorComponent],\n templateUrl: './text-form-field.component.html',\n styleUrls: ['./text-form-field.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TextFormFieldComponent {\n /** Unique element ID */\n id = input<string>(generateUniqueId('text-form-field'));\n\n /** Display type of the field */\n type = input<TextFormFieldType>('text');\n\n /** Label text */\n label = input<string>('');\n\n /** Primary value/text content */\n value = input<string>('');\n\n /** URL for link type */\n linkUrl = input<string>('#');\n\n /** Color for status type */\n statusColor = input<StatusColor>('info');\n\n /** Items for checkbox/radio types */\n items = input<FieldItem[]>([]);\n\n /** Profile name */\n profileName = input<string>('');\n\n /** Profile email */\n profileEmail = input<string>('');\n\n /** Field style: section or banner */\n fieldStyle = input<FieldStyle>('section');\n\n /** Subtitle for icon-title type */\n subtitle = input<string>('');\n\n /** Icon state for icon-title type */\n iconState = input<'success' | 'default'>('default');\n\n /** Emits when button type is clicked */\n buttonClick = output<void>();\n\n /** Emits when link type is clicked */\n linkClick = output<void>();\n\n /** Emits when amount changes */\n amountValueChange = output<number>();\n\n /** CSS classes for the container */\n containerClasses = computed(() => [\n 'pecb-tff',\n `pecb-tff--${this.fieldStyle()}`\n ]);\n\n /** Status badge classes */\n statusClasses = computed(() => [\n 'pecb-tff__status-badge',\n `pecb-tff__status-badge--${this.statusColor()}`\n ]);\n\n /** Status label classes */\n statusLabelClasses = computed(() => [\n 'pecb-tff__status-label',\n `pecb-tff__status-label--${this.statusColor()}`\n ]);\n\n /** Get initials from profile name */\n profileInitials = computed(() => {\n const name = this.profileName();\n if (!name) return '';\n const parts = name.split(' ').filter(Boolean);\n return parts.map(p => p[0]).join('').toUpperCase().slice(0, 2);\n });\n}\n","<div [ngClass]=\"containerClasses()\" [attr.id]=\"id()\">\n <!-- Label -->\n <span class=\"pecb-tff__label\">{{ label() }}</span>\n\n <!-- TEXT -->\n @if (type() === 'text') {\n <span class=\"pecb-tff__text\">{{ value() }}</span>\n }\n\n <!-- LINK -->\n @if (type() === 'link') {\n <a class=\"pecb-tff__link\" [href]=\"linkUrl()\" (click)=\"linkClick.emit()\">{{ value() }}</a>\n }\n\n <!-- STATUS -->\n @if (type() === 'status') {\n <span [ngClass]=\"statusClasses()\">{{ value() }}</span>\n }\n\n <!-- DESCRIPTION -->\n @if (type() === 'description') {\n <p class=\"pecb-tff__description\">{{ value() }}</p>\n }\n\n <!-- TAG -->\n @if (type() === 'tag') {\n <span class=\"pecb-tff__tag\">{{ value() }}</span>\n }\n\n <!-- FIELD -->\n @if (type() === 'field') {\n <div class=\"pecb-tff__field\">\n <span class=\"pecb-tff__field-text\">{{ value() }}</span>\n <svg class=\"pecb-tff__field-chevron\" width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1 1L5 5L9 1\" stroke=\"#919191\" stroke-width=\"1.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n }\n\n <!-- BUTTON PRIMARY -->\n @if (type() === 'button') {\n <button class=\"pecb-tff__button\" (click)=\"buttonClick.emit()\">{{ value() }}</button>\n }\n\n <!-- BUTTON SECONDARY -->\n @if (type() === 'button-secondary') {\n <button class=\"pecb-tff__button-secondary\" (click)=\"buttonClick.emit()\">{{ value() }}</button>\n }\n\n <!-- TRAINING TYPE -->\n @if (type() === 'training-type') {\n <div class=\"pecb-tff__training-type\">\n <div class=\"pecb-tff__training-icon\">\n <svg width=\"12\" height=\"14\" viewBox=\"0 0 12 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M2 1L11 7L2 13V1Z\" fill=\"white\"/>\n </svg>\n </div>\n <span class=\"pecb-tff__training-text\">{{ value() }}</span>\n </div>\n }\n\n <!-- CHECKBOX -->\n @if (type() === 'checkbox') {\n <div class=\"pecb-tff__checkbox-group\">\n @for (item of items(); track item.label) {\n <div class=\"pecb-tff__checkbox-item\">\n <div class=\"pecb-tff__checkbox-box\" [class.pecb-tff__checkbox-box--checked]=\"item.checked\">\n @if (item.checked) {\n <svg width=\"12\" height=\"10\" viewBox=\"0 0 12 10\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M1.5 5L4.5 8L10.5 1.5\" stroke=\"white\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n </div>\n <span class=\"pecb-tff__checkbox-label\">{{ item.label }}</span>\n </div>\n }\n </div>\n }\n\n <!-- RADIO -->\n @if (type() === 'radio') {\n <div class=\"pecb-tff__radio-group\">\n @for (item of items(); track item.label) {\n <div class=\"pecb-tff__radio-item\">\n <div class=\"pecb-tff__radio-circle\" [class.pecb-tff__radio-circle--selected]=\"item.checked\">\n @if (item.checked) {\n <div class=\"pecb-tff__radio-dot\"></div>\n }\n </div>\n <span class=\"pecb-tff__radio-label\">{{ item.label }}</span>\n </div>\n }\n </div>\n }\n\n <!-- PROFILE -->\n @if (type() === 'profile') {\n <div class=\"pecb-tff__profile\">\n <div class=\"pecb-tff__profile-avatar\">{{ profileInitials() }}</div>\n <div class=\"pecb-tff__profile-info\">\n <span class=\"pecb-tff__profile-name\">{{ profileName() }}</span>\n <span class=\"pecb-tff__profile-email\">{{ profileEmail() }}</span>\n </div>\n </div>\n }\n\n <!-- DESCRIPTION FIELD -->\n @if (type() === 'description-field') {\n <div class=\"pecb-tff__description-field\">{{ value() }}</div>\n }\n\n <!-- ATTACHMENT -->\n @if (type() === 'attachment') {\n <div class=\"pecb-tff__attachment\">\n <svg class=\"pecb-tff__attachment-icon\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"4\" y=\"2\" width=\"16\" height=\"20\" rx=\"2\" stroke=\"#919191\" stroke-width=\"1.5\"/>\n <path d=\"M8 7H16M8 11H16M8 15H12\" stroke=\"#919191\" stroke-width=\"1.2\" stroke-linecap=\"round\"/>\n </svg>\n <a class=\"pecb-tff__attachment-link\" [href]=\"linkUrl()\" (click)=\"linkClick.emit()\">{{ value() }}</a>\n </div>\n }\n\n <!-- ICON TITLE -->\n @if (type() === 'icon-title') {\n <div class=\"pecb-tff__icon-title\">\n <div class=\"pecb-tff__icon-circle\">\n <div class=\"pecb-tff__icon-circle-dot\"></div>\n </div>\n <div class=\"pecb-tff__icon-title-text\">\n <span class=\"pecb-tff__icon-title-main\">{{ value() }}</span>\n @if (subtitle()) {\n <span class=\"pecb-tff__icon-title-sub\">{{ subtitle() }}</span>\n }\n </div>\n </div>\n }\n\n <!-- DATE -->\n @if (type() === 'date') {\n <span class=\"pecb-tff__date\">{{ value() }}</span>\n }\n\n <!-- DATE ICON -->\n @if (type() === 'date-icon') {\n <div class=\"pecb-tff__date-icon\">\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 2L14.5 9.5L12 12L9.5 9.5L12 2Z\" stroke=\"#919191\" stroke-width=\"1.5\" stroke-linejoin=\"round\" fill=\"none\"/>\n <path d=\"M12 22L9.5 14.5L12 12L14.5 14.5L12 22Z\" stroke=\"#919191\" stroke-width=\"1.5\" stroke-linejoin=\"round\" fill=\"none\"/>\n <path d=\"M2 12L9.5 9.5L12 12L9.5 14.5L2 12Z\" stroke=\"#919191\" stroke-width=\"1.5\" stroke-linejoin=\"round\" fill=\"none\"/>\n <path d=\"M22 12L14.5 14.5L12 12L14.5 9.5L22 12Z\" stroke=\"#919191\" stroke-width=\"1.5\" stroke-linejoin=\"round\" fill=\"none\"/>\n </svg>\n <span class=\"pecb-tff__date-icon-text\">{{ value() }}</span>\n </div>\n }\n\n <!-- AMOUNT -->\n @if (type() === 'amount') {\n <pecb-quantity-selector (valueChange)=\"amountValueChange.emit($event)\"></pecb-quantity-selector>\n }\n\n <!-- STATUS LABEL -->\n @if (type() === 'status-label') {\n <span [ngClass]=\"statusLabelClasses()\">{{ value() }}</span>\n }\n</div>\n","import {\n Component,\n input,\n output,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\nimport { ButtonComponent } from '../button/button.component';\n\nexport type ResultPageIcon = 'success' | 'error' | 'forbidden' | 'not-found' | 'session-expired' | 'coming-soon' | 'custom';\n\nexport interface ResultPageAction {\n label: string;\n variant: 'primary' | 'secondary';\n}\n\n@Component({\n selector: 'pecb-result-page',\n imports: [CommonModule, ButtonComponent],\n templateUrl: './result-page.component.html',\n styleUrls: ['./result-page.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ResultPageComponent {\n id = input(generateUniqueId('result-page'));\n\n /** Icon type to display */\n icon = input<ResultPageIcon>('success');\n\n /** Custom icon SVG string (used when icon='custom') */\n customIcon = input<string>('');\n\n /** Custom icon background color (used when icon='custom') */\n customIconBg = input<string>('#e6f4ea');\n\n /** Title text */\n title = input('');\n\n /** Description / message text */\n description = input('');\n\n /** Primary action button config */\n primaryAction = input<ResultPageAction | null>(null);\n\n /** Secondary action button config */\n secondaryAction = input<ResultPageAction | null>(null);\n\n /** Emitted when primary action button is clicked */\n primaryActionClicked = output<void>();\n\n /** Emitted when secondary action button is clicked */\n secondaryActionClicked = output<void>();\n\n get iconBgColor(): string {\n const colors: Record<string, string> = {\n 'success': '#e6f4ea',\n 'error': '#fdecea',\n 'forbidden': '#e6f0fa',\n 'not-found': '#fff4e5',\n 'session-expired': '#fff4e5',\n 'coming-soon': '#e6f0fa',\n 'custom': this.customIconBg()\n };\n return colors[this.icon()] || '#e6f4ea';\n }\n\n onPrimaryClick(): void {\n this.primaryActionClicked.emit();\n }\n\n onSecondaryClick(): void {\n this.secondaryActionClicked.emit();\n }\n}\n","<div [id]=\"id()\" class=\"pecb-result-page\" role=\"status\">\n <div class=\"pecb-result-page__content\">\n\n <!-- Icon -->\n <div\n class=\"pecb-result-page__icon\"\n [style.background-color]=\"iconBgColor\"\n >\n <!-- Success: green circle with white checkmark (from Figma) -->\n <svg *ngIf=\"icon() === 'success'\" width=\"44\" height=\"44\" viewBox=\"0 0 44.3077 44.3077\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M22.1538 0C9.91825 0 0 9.91825 0 22.1538C0 34.3894 9.91825 44.3077 22.1538 44.3077C34.3894 44.3077 44.3077 34.3894 44.3077 22.1538C44.2974 9.91825 34.3791 0 22.1538 0ZM33.9775 16.4995L21.9685 31.5262C21.4329 32.1854 20.6501 32.5974 19.8056 32.6489C19.7541 32.6489 19.6923 32.6489 19.6408 32.6489C18.8478 32.6489 18.0856 32.3399 17.5294 31.7734L10.5465 24.7905C9.38268 23.6266 9.38268 21.7316 10.5465 20.5677C11.7103 19.4039 13.6054 19.4039 14.7692 20.5677L19.3833 25.1818L29.3119 12.7712C30.3418 11.4837 32.2163 11.2675 33.514 12.3077C34.8014 13.3273 35.0074 15.2121 33.9775 16.4995Z\" fill=\"#57BC57\"/>\n </svg>\n\n <!-- Error: pink-red circle with white X (from Figma) -->\n <svg *ngIf=\"icon() === 'error'\" width=\"44\" height=\"44\" viewBox=\"0 0 44.3077 44.3077\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M37.819 6.48871C46.4706 15.1403 46.4706 29.1674 37.819 37.819C29.1674 46.4706 15.1403 46.4706 6.48871 37.819C-2.1629 29.1674 -2.1629 15.1403 6.48871 6.48871C15.1403 -2.1629 29.1674 -2.1629 37.819 6.48871ZM30.4216 13.0158C29.5204 12.1147 28.0591 12.1147 27.158 13.0158L21.6099 18.5639C21.4297 18.7441 21.1374 18.7441 20.9572 18.5639L15.4091 13.0158C14.508 12.1147 13.0467 12.1147 12.1456 13.0158C11.2444 13.917 11.2444 15.3783 12.1456 16.2794L17.6936 21.8275C17.8739 22.0077 17.8739 22.3 17.6936 22.4802L12.1456 28.0283C11.2444 28.9294 11.2444 30.3907 12.1456 31.2918C13.0467 32.193 14.508 32.193 15.4091 31.2918L20.9572 25.7438C21.1374 25.5635 21.4297 25.5635 21.6099 25.7438L27.158 31.2918C28.0591 32.193 29.5204 32.193 30.4216 31.2918C31.3227 30.3907 31.3227 28.9294 30.4216 28.0283L24.8735 22.4802C24.6933 22.3 24.6933 22.0077 24.8735 21.8275L30.4216 16.2794C31.3227 15.3783 31.3227 13.917 30.4216 13.0158Z\" fill=\"#FF606F\"/>\n </svg>\n\n <!-- Forbidden (403): blue circle with white eye -->\n <svg *ngIf=\"icon() === 'forbidden'\" width=\"44\" height=\"44\" viewBox=\"0 0 44 44\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"22\" cy=\"22\" r=\"22\" fill=\"#6eaeff\"/>\n <path d=\"M22 14.5c-5 0-9.27 3.11-11 7.5 1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5Zm0 12.5c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5Zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3Z\" fill=\"white\"/>\n </svg>\n\n <!-- Not Found (404): orange circle with white exclamation (from Figma) -->\n <svg *ngIf=\"icon() === 'not-found'\" width=\"44\" height=\"44\" viewBox=\"0 0 44.3066 44.3076\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"22.6825\" cy=\"22.6816\" r=\"18.989\" fill=\"white\"/>\n <path d=\"M22.1533 0C34.3883 4.41772e-07 44.3064 9.91836 44.3066 22.1533C44.3066 34.3885 34.3885 44.3076 22.1533 44.3076C9.91815 44.3076 0 34.3885 0 22.1533C0.000250356 9.91836 9.9183 0 22.1533 0ZM22.2344 30.3799C20.155 30.3799 18.4629 32.072 18.4629 34.1514C18.6528 39.1468 25.8157 39.1455 26.0049 34.1514C26.0049 32.0721 24.3136 30.38 22.2344 30.3799ZM25.9248 9.12598C24.0535 6.80463 20.2588 6.80337 18.3867 9.12598C17.4495 10.2419 17.0565 11.7047 17.3076 13.1396C18.0569 17.4206 19.1143 23.4633 19.5889 26.1768C20.1208 29.0326 24.1925 29.0318 24.7236 26.1768L27.0049 13.1396C27.256 11.7047 26.8622 10.242 25.9248 9.12598Z\" fill=\"#FF9C4A\"/>\n </svg>\n\n <!-- Session Expired: orange circle with white hourglass (from Figma) -->\n <svg *ngIf=\"icon() === 'session-expired'\" width=\"44\" height=\"44\" viewBox=\"0 0 44.3076 44.3076\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M22.1533 0C34.3881 0.000140889 44.3064 9.91855 44.3066 22.1533C44.3066 34.3883 34.3882 44.3075 22.1533 44.3076C9.91828 44.3076 0 34.3884 0 22.1533C0.00022457 9.91847 9.91841 0 22.1533 0ZM13.2627 9.8457C12.9335 9.84574 12.6175 9.97624 12.3848 10.209C12.152 10.4417 12.0216 10.7578 12.0215 11.0869C12.0215 11.4161 12.1521 11.732 12.3848 11.9648C12.6176 12.1976 12.9335 12.3291 13.2627 12.3291H14.4258V15.4658C14.424 16.5425 14.6893 17.6029 15.1982 18.5518C15.7074 19.5008 16.4444 20.3093 17.3428 20.9033L19.3916 22.2607L17.3428 23.6182C16.4484 24.2145 15.7154 25.023 15.21 25.9717C14.7044 26.9206 14.4422 27.9805 14.4463 29.0557V32.1924H13.2627C12.9335 32.1924 12.6176 32.3229 12.3848 32.5557C12.152 32.7885 12.0215 33.1044 12.0215 33.4336C12.0215 33.7628 12.152 34.0787 12.3848 34.3115C12.6176 34.5443 12.9335 34.6748 13.2627 34.6748H29.8154C30.1446 34.6748 30.4606 34.5443 30.6934 34.3115C30.9262 34.0787 31.0576 33.7629 31.0576 33.4336C31.0576 33.1044 30.9262 32.7885 30.6934 32.5557C30.4606 32.323 30.1446 32.1924 29.8154 32.1924H28.8516V29.0557C28.8527 27.9788 28.5873 26.9177 28.0781 25.9688C27.5691 25.02 26.8322 24.2127 25.9346 23.6182L23.8857 22.2607L25.9346 20.9033C26.8324 20.3088 27.569 19.5006 28.0781 18.5518C28.5872 17.603 28.8526 16.5425 28.8516 15.4658V12.3291H29.8154C30.1447 12.3291 30.4605 12.1976 30.6934 11.9648C30.9262 11.732 31.0576 11.4162 31.0576 11.0869C31.0575 10.7578 30.9261 10.4417 30.6934 10.209C30.4606 9.97636 30.1445 9.8457 29.8154 9.8457H13.2627ZM24.5605 25.6865C25.1164 26.0552 25.5722 26.5559 25.8877 27.1436C26.2032 27.7313 26.368 28.3886 26.3682 29.0557V32.1924H16.9082V29.0557C16.9075 28.389 17.072 27.7322 17.3867 27.1445C17.7015 26.5568 18.1575 26.0554 18.7129 25.6865L21.6387 23.75L24.5605 25.6865Z\" fill=\"#FF9C4A\"/>\n </svg>\n\n <!-- Coming Soon: blue circle with white tools (from Figma) -->\n <svg *ngIf=\"icon() === 'coming-soon'\" width=\"44\" height=\"44\" viewBox=\"0 0 44.3077 44.3077\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <circle cx=\"22.6825\" cy=\"22.6815\" r=\"18.989\" fill=\"white\"/>\n <path d=\"M22.1538 0C9.91825 0 0 9.91902 0 22.1538C0 34.3887 9.91825 44.3077 22.1538 44.3077C34.3894 44.3077 44.3077 34.3887 44.3077 22.1538C44.3077 9.91902 34.3791 0 22.1538 0ZM21.4741 27.0724C19.1361 29.3984 16.7982 31.7245 14.4602 34.0505C13.4097 35.0957 11.906 35.2802 10.6804 34.5321C9.084 33.5484 8.76472 31.3453 10.0418 29.9722C10.6186 29.3574 11.2263 28.7734 11.8339 28.179C13.6054 26.4166 15.3666 24.6643 17.1381 22.9019C17.1999 22.8404 17.2514 22.7584 17.2926 22.6969C18.7448 24.1417 20.1661 25.5558 21.5874 26.9699C21.5565 26.9801 21.5153 27.0314 21.4741 27.0724ZM35.0383 30.0747C34.9868 30.3719 34.9353 30.6588 34.8735 30.956C34.8117 31.2634 34.6572 31.499 34.3379 31.5913C34.0187 31.6937 33.7612 31.5913 33.5346 31.3658C33.2668 31.0994 32.999 30.833 32.7312 30.5666C32.2884 30.1362 31.8661 29.6751 31.3923 29.2755C30.795 28.7631 29.8371 28.8861 29.3325 29.4804C28.7969 30.1157 28.8484 30.9457 29.4767 31.581C30.1152 32.2266 30.7538 32.8619 31.3923 33.4972C31.6086 33.7124 31.7116 33.9685 31.6189 34.276C31.5262 34.5834 31.2996 34.7473 30.9907 34.819C30.2388 34.9932 29.4767 35.0445 28.7248 34.8805C26.6855 34.4297 25.326 33.2205 24.6875 31.2429C24.3785 30.2797 24.4506 29.2959 24.6669 28.3225C24.7287 28.0663 24.6978 27.8921 24.4918 27.6974C21.8346 25.064 19.1773 22.4305 16.5407 19.7766C16.3656 19.6024 16.2214 19.5614 15.9948 19.6229C15.1812 19.8278 14.3573 19.8893 13.523 19.7458C10.5568 19.2232 8.63083 16.1799 9.42388 13.28C9.58867 12.6959 10.2169 12.5012 10.6701 12.9009C10.8761 13.0751 11.0512 13.28 11.2469 13.4645C11.7824 13.987 12.3077 14.5404 12.8639 15.0322C13.3685 15.4831 14.1719 15.4626 14.7074 15.0527C15.449 14.4789 15.5005 13.4645 14.8207 12.7677C14.2028 12.1324 13.5642 11.5175 12.936 10.8925C12.6991 10.6568 12.5446 10.3904 12.6476 10.042C12.7506 9.69359 13.0183 9.55013 13.3582 9.48865C13.626 9.44766 13.8938 9.38618 14.1719 9.33495C14.4397 9.33495 14.7074 9.33495 14.9752 9.33495C15.0473 9.34519 15.1194 9.36569 15.1915 9.37593C16.6746 9.57063 17.8693 10.2674 18.7551 11.4561C19.7953 12.8496 20.0322 14.4174 19.5893 16.0877C19.5275 16.3029 19.579 16.4361 19.7335 16.5795C22.3907 19.2232 25.048 21.8669 27.7052 24.5209C27.8906 24.7053 28.0451 24.7463 28.2922 24.6848C29.1265 24.4799 29.971 24.4082 30.8053 24.5926C32.7621 25.0127 34.0599 26.1911 34.7293 28.0561C34.8735 28.4557 34.925 28.8963 35.0177 29.3164C35.0383 29.5726 35.0383 29.8185 35.0383 30.0747ZM35.0383 11.538C34.2041 12.9316 33.3801 14.3354 32.5356 15.729C32.2575 16.1901 31.7322 16.2516 31.3305 15.8827C31.1864 15.7495 31.0525 15.5958 30.8774 15.4011C29.178 17.1124 27.5095 18.7929 25.841 20.4734C25.12 19.7561 24.4197 19.0593 23.7399 18.383C25.3981 16.7127 27.0666 15.0322 28.7866 13.3005C28.663 13.1878 28.5291 13.1058 28.4364 13.0033C28.0966 12.6345 28.1378 12.1119 28.5703 11.8557C29.9092 11.0359 31.2584 10.2469 32.5974 9.44766C32.6695 9.40667 32.7518 9.37593 32.8239 9.34519C32.9269 9.34519 33.0299 9.34519 33.1226 9.34519C33.3183 9.4784 33.5243 9.60137 33.6994 9.75507C34.0187 10.042 34.3276 10.3494 34.616 10.667C34.7705 10.8412 34.8941 11.0462 35.028 11.2409C35.0383 11.3331 35.0383 11.4356 35.0383 11.538Z\" fill=\"#5EACFF\"/>\n </svg>\n\n <!-- Custom icon -->\n <span *ngIf=\"icon() === 'custom'\" [innerHTML]=\"customIcon()\"></span>\n </div>\n\n <!-- Title -->\n <h1 class=\"pecb-result-page__title\">{{ title() }}</h1>\n\n <!-- Description -->\n <p class=\"pecb-result-page__description\">{{ description() }}</p>\n\n <!-- Action buttons -->\n <div\n *ngIf=\"primaryAction() || secondaryAction()\"\n class=\"pecb-result-page__actions\"\n >\n <pecb-button\n *ngIf=\"primaryAction() as action\"\n variant=\"primary-2\"\n size=\"lg\"\n (clicked)=\"onPrimaryClick()\"\n >\n {{ action.label }}\n </pecb-button>\n <pecb-button\n *ngIf=\"secondaryAction() as action\"\n variant=\"secondary\"\n size=\"lg\"\n (clicked)=\"onSecondaryClick()\"\n >\n {{ action.label }}\n </pecb-button>\n </div>\n </div>\n</div>\n","import {\n Component,\n input,\n output,\n signal,\n computed,\n ChangeDetectionStrategy,\n OnInit,\n OnChanges\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { generateUniqueId } from '../../shared/utils/dom.utils';\n\nexport type TourType = 'basic' | 'non-modal';\n\nexport type TourPlacement =\n | 'top' | 'top-left' | 'top-right'\n | 'bottom' | 'bottom-left' | 'bottom-right'\n | 'left' | 'left-top' | 'left-bottom'\n | 'right' | 'right-top' | 'right-bottom';\n\nexport type TourIndicatorType = 'slider' | 'number';\n\nexport interface TourStep {\n title: string;\n description: string;\n image?: string;\n}\n\n@Component({\n selector: 'pecb-tour',\n imports: [CommonModule],\n templateUrl: './tour.component.html',\n styleUrls: ['./tour.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TourComponent implements OnInit, OnChanges {\n id = input(generateUniqueId('tour'));\n\n /** Visual type: basic (light) or non-modal (dark) */\n type = input<TourType>('basic');\n\n /** Arrow placement relative to the target element */\n placement = input<TourPlacement>('right-top');\n\n /** Step indicator style */\n indicatorType = input<TourIndicatorType>('slider');\n\n /** Tour steps configuration */\n steps = input<TourStep[]>([]);\n\n /** Whether the tour is visible */\n isOpen = input(true);\n\n /** Label for the previous button */\n previousLabel = input('Previous');\n\n /** Label for the next button */\n nextLabel = input('Next');\n\n /** Label for the finish button (last step) */\n finishLabel = input('Finish');\n\n /** Starting step index */\n initialStep = input(0);\n\n /** Emitted when the tour is closed via X button */\n closed = output<void>();\n\n /** Emitted when Previous is clicked */\n previousClicked = output<number>();\n\n /** Emitted when Next is clicked */\n nextClicked = output<number>();\n\n /** Emitted when the tour is finished (last step Next) */\n finished = output<void>();\n\n /** Emitted when step changes */\n stepChanged = output<number>();\n\n // Internal state\n currentStep = signal(0);\n\n currentStepData = computed<TourStep | null>(() => {\n const stepList = this.steps();\n const idx = this.currentStep();\n return idx >= 0 && idx < stepList.length ? stepList[idx] : null;\n });\n\n totalSteps = computed(() => this.steps().length);\n\n isFirstStep = computed(() => this.currentStep() === 0);\n\n isLastStep = computed(() => this.currentStep() === this.totalSteps() - 1);\n\n /** Arrow position class */\n arrowClass = computed(() => `pecb-tour__arrow--${this.placement()}`);\n\n /** Arrow direction based on placement (determines which SVG to render) */\n arrowDirection = computed<'up' | 'down' | 'left' | 'right'>(() => {\n const p = this.placement();\n if (p.startsWith('top')) return 'down';\n if (p.startsWith('bottom')) return 'up';\n if (p.startsWith('left')) return 'right';\n return 'left'; // right placements\n });\n\n ngOnInit(): void {\n this.currentStep.set(this.initialStep());\n }\n\n ngOnChanges(): void {\n this.currentStep.set(this.initialStep());\n }\n\n onPrevious(): void {\n if (!this.isFirstStep()) {\n this.currentStep.update(s => s - 1);\n this.previousClicked.emit(this.currentStep());\n this.stepChanged.emit(this.currentStep());\n }\n }\n\n onNext(): void {\n if (this.isLastStep()) {\n this.finished.emit();\n } else {\n this.currentStep.update(s => s + 1);\n this.nextClicked.emit(this.currentStep());\n this.stepChanged.emit(this.currentStep());\n }\n }\n\n onClose(): void {\n this.closed.emit();\n }\n\n goToStep(index: number): void {\n if (index >= 0 && index < this.totalSteps()) {\n this.currentStep.set(index);\n this.stepChanged.emit(index);\n }\n }\n}\n","<div\n *ngIf=\"isOpen() && currentStepData() as step\"\n [id]=\"id()\"\n class=\"pecb-tour\"\n [class.pecb-tour--dark]=\"type() === 'non-modal'\"\n role=\"dialog\"\n aria-modal=\"false\"\n [attr.aria-label]=\"step.title\"\n>\n <!-- Content wrapper -->\n <div class=\"pecb-tour__content-wrapper\">\n <ng-container *ngIf=\"step.image; else noImageTpl\">\n <!-- With image: close alone on top, image below -->\n <div class=\"pecb-tour__header-group\">\n <button\n type=\"button\"\n class=\"pecb-tour__close\"\n [class.pecb-tour__close--dark]=\"type() === 'non-modal'\"\n aria-label=\"Close tour\"\n (click)=\"onClose()\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M12 4L4 12M4 4l8 8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n\n <div class=\"pecb-tour__image-wrapper\">\n <img [src]=\"step.image\" [alt]=\"step.title\" class=\"pecb-tour__image\" />\n </div>\n </div>\n\n <div class=\"pecb-tour__text\">\n <p class=\"pecb-tour__title\">{{ step.title }}</p>\n <p class=\"pecb-tour__description\">{{ step.description }}</p>\n </div>\n </ng-container>\n\n <!-- Without image: title + close on same row, description below -->\n <ng-template #noImageTpl>\n <div class=\"pecb-tour__title-row\">\n <p class=\"pecb-tour__title\">{{ step.title }}</p>\n <button\n type=\"button\"\n class=\"pecb-tour__close\"\n [class.pecb-tour__close--dark]=\"type() === 'non-modal'\"\n aria-label=\"Close tour\"\n (click)=\"onClose()\"\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M12 4L4 12M4 4l8 8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </button>\n </div>\n\n <p class=\"pecb-tour__description\">{{ step.description }}</p>\n </ng-template>\n </div>\n\n <!-- Footer -->\n <div class=\"pecb-tour__footer\">\n <!-- Indicator -->\n <div class=\"pecb-tour__indicator\">\n <ng-container *ngIf=\"indicatorType() === 'slider'\">\n <span\n *ngFor=\"let s of steps(); let i = index\"\n class=\"pecb-tour__dot\"\n [class.pecb-tour__dot--active]=\"i === currentStep()\"\n (click)=\"goToStep(i)\"\n ></span>\n </ng-container>\n <span *ngIf=\"indicatorType() === 'number'\" class=\"pecb-tour__step-number\">\n {{ currentStep() + 1 }} / {{ totalSteps() }}\n </span>\n </div>\n\n <!-- Buttons -->\n <div class=\"pecb-tour__buttons\">\n <button\n *ngIf=\"!isFirstStep()\"\n type=\"button\"\n class=\"pecb-tour__btn pecb-tour__btn--secondary\"\n (click)=\"onPrevious()\"\n >\n {{ previousLabel() }}\n </button>\n <button\n type=\"button\"\n class=\"pecb-tour__btn pecb-tour__btn--primary\"\n [class.pecb-tour__btn--primary-dark]=\"type() === 'non-modal'\"\n (click)=\"onNext()\"\n >\n {{ isLastStep() ? finishLabel() : nextLabel() }}\n </button>\n </div>\n </div>\n\n <!-- Arrows: one SVG per direction, only the matching one is shown -->\n <ng-container [ngSwitch]=\"arrowDirection()\">\n\n <!-- Points DOWN (top placements) -->\n <svg *ngSwitchCase=\"'down'\" class=\"pecb-tour__arrow\" [ngClass]=\"arrowClass()\"\n width=\"16\" height=\"8\" viewBox=\"0 0 16 8\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M0 0H16L9.41 7.17C8.63 7.95 7.37 7.95 6.59 7.17L0 0Z\" [attr.fill]=\"type() === 'non-modal' ? '#313131' : 'white'\"/>\n </svg>\n\n <!-- Points UP (bottom placements) -->\n <svg *ngSwitchCase=\"'up'\" class=\"pecb-tour__arrow\" [ngClass]=\"arrowClass()\"\n width=\"16\" height=\"8\" viewBox=\"0 0 16 8\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M0 8H16L9.41 0.83C8.63 0.05 7.37 0.05 6.59 0.83L0 8Z\" [attr.fill]=\"type() === 'non-modal' ? '#313131' : 'white'\"/>\n </svg>\n\n <!-- Points LEFT (right placements) -->\n <svg *ngSwitchCase=\"'left'\" class=\"pecb-tour__arrow\" [ngClass]=\"arrowClass()\"\n width=\"8\" height=\"16\" viewBox=\"0 0 8 16\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M8 0V16L0.83 9.41C0.05 8.63 0.05 7.37 0.83 6.59L8 0Z\" [attr.fill]=\"type() === 'non-modal' ? '#313131' : 'white'\"/>\n </svg>\n\n <!-- Points RIGHT (left placements) -->\n <svg *ngSwitchCase=\"'right'\" class=\"pecb-tour__arrow\" [ngClass]=\"arrowClass()\"\n width=\"8\" height=\"16\" viewBox=\"0 0 8 16\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M0 0V16L7.17 9.41C7.95 8.63 7.95 7.37 7.17 6.59L0 0Z\" [attr.fill]=\"type() === 'non-modal' ? '#313131' : 'white'\"/>\n </svg>\n\n </ng-container>\n</div>\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';\nimport { BottomSheetComponent } from './components/bottom-sheet/bottom-sheet.component';\nimport { AccordionItemComponent, AccordionSmallComponent } from './components/accordion/accordion.component';\nimport { ButtonGroupComponent, ButtonGroupItemComponent } from './components/button-group/button-group.component';\nimport { TooltipComponent } from './components/tooltip/tooltip.component';\nimport { TooltipDirective } from './components/tooltip/tooltip.directive';\nimport { MessageItemComponent, MessageBubbleComponent } from './components/messaging/messaging.component';\nimport {\n FullscreenModalComponent,\n FullscreenModalContentDirective,\n FullscreenModalFooterDirective\n} from './components/fullscreen-modal/fullscreen-modal.component';\nimport { StepperComponent } from './components/stepper/stepper.component';\nimport {\n GridComponent,\n GridItemComponent,\n SpacerComponent\n} from './components/grid/grid.component';\nimport { DashboardGridComponent } from './components/dashboard-grid/dashboard-grid.component';\nimport {\n SpinnerComponent,\n ProgressBarComponent,\n ProgressCircleComponent\n} from './components/progress/progress.component';\nimport { CodeInputComponent } from './components/code-input/code-input.component';\nimport {\n ShadowDirective,\n BlurDirective\n} from './components/shadow/shadow.directive';\nimport { DividerComponent } from './components/divider/divider.component';\nimport { CodeSnippetComponent } from './components/code-snippet/code-snippet.component';\nimport { BreadcrumbsComponent } from './components/breadcrumbs/breadcrumbs.component';\nimport {\n HeaderComponent,\n HeaderSearchComponent,\n HeaderLanguageComponent,\n HeaderActionsComponent,\n HeaderUserComponent,\n HeaderDividerComponent\n} from './components/header/header.component';\nimport { VirtualTableComponent } from './components/virtual-table/virtual-table.component';\nimport { GeneralComponent } from './components/general/general.component';\nimport { ProjectLayoutComponent } from './components/project-layout/project-layout.component';\nimport { HierarchicalTableComponent } from './components/hierarchical-table/hierarchical-table.component';\nimport { AnchorComponent } from './components/anchor/anchor.component';\nimport { BackToTopComponent } from './components/back-to-top/back-to-top.component';\nimport { ExpandableRowTableComponent } from './components/expandable-row-table/expandable-row-table.component';\nimport { BadgeComponent } from './components/badge/badge.component';\nimport { AffixComponent } from './components/affix/affix.component';\nimport { LanguageDropdownComponent } from './components/language-dropdown/language-dropdown.component';\nimport { EmptyStateComponent } from './components/empty-state/empty-state.component';\nimport { TestimonialComponent } from './components/testimonial/testimonial.component';\nimport {\n TagComponent,\n LinkButtonComponent,\n SlidePointsComponent,\n QuantitySelectorComponent,\n AuditorStatusComponent,\n RatingNumberComponent,\n IconTagComponent,\n TranscriptLineComponent,\n MiniIconButtonComponent,\n NoResultsComponent,\n CertificateUploadBarComponent,\n VideoUploadBarComponent,\n StatisticsCardComponent,\n PriceMethodComponent,\n ApplicationStatusBarComponent,\n ReasonForReturnComponent,\n ContentTypeTagComponent,\n QuestionTypeTagComponent,\n StandardsPdfCardComponent,\n NoteSidebarItemComponent,\n AuthorDateTimeComponent,\n CheckDeleteIconComponent,\n ProfileElementsCardComponent,\n UserWithEmailComponent,\n CancelUpdateButtonsComponent,\n InformationBoxComponent,\n RequestSentByComponent,\n NotificationStatusLinkComponent,\n EditCoverPhotoComponent,\n RequestStatusBarComponent,\n VerifyChecklistComponent,\n EditButtonComponent,\n AddButtonComponent,\n HorizontalStepsComponent,\n RadioDisplayComponent,\n CheckboxDisplayComponent\n} from './components/other-elements/other-elements.component';\nimport { FilterColumnsComponent } from './components/filter-columns/filter-columns.component';\nimport { FileUploadComponent } from './components/file-upload/file-upload.component';\nimport { ToolbarBarComponent } from './components/toolbar-bar/toolbar-bar.component';\nimport { NotesPanelComponent } from './components/notes-panel/notes-panel.component';\nimport { TextFormFieldComponent } from './components/text-form-field/text-form-field.component';\nimport { ResultPageComponent } from './components/result-page/result-page.component';\nimport { TourComponent } from './components/tour/tour.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 BottomSheetComponent,\n AccordionItemComponent,\n AccordionSmallComponent,\n ButtonGroupComponent,\n ButtonGroupItemComponent,\n TooltipComponent,\n TooltipDirective,\n MessageItemComponent,\n MessageBubbleComponent,\n FullscreenModalComponent,\n FullscreenModalContentDirective,\n FullscreenModalFooterDirective,\n StepperComponent,\n GridComponent,\n GridItemComponent,\n SpacerComponent,\n DashboardGridComponent,\n SpinnerComponent,\n ProgressBarComponent,\n ProgressCircleComponent,\n CodeInputComponent,\n ShadowDirective,\n BlurDirective,\n DividerComponent,\n CodeSnippetComponent,\n BreadcrumbsComponent,\n HeaderComponent,\n HeaderSearchComponent,\n HeaderLanguageComponent,\n HeaderActionsComponent,\n HeaderUserComponent,\n HeaderDividerComponent,\n VirtualTableComponent,\n GeneralComponent,\n ProjectLayoutComponent,\n HierarchicalTableComponent,\n AnchorComponent,\n BackToTopComponent,\n ExpandableRowTableComponent,\n BadgeComponent,\n AffixComponent,\n LanguageDropdownComponent,\n EmptyStateComponent,\n TestimonialComponent,\n TagComponent,\n LinkButtonComponent,\n SlidePointsComponent,\n QuantitySelectorComponent,\n AuditorStatusComponent,\n RatingNumberComponent,\n IconTagComponent,\n TranscriptLineComponent,\n MiniIconButtonComponent,\n NoResultsComponent,\n CertificateUploadBarComponent,\n VideoUploadBarComponent,\n StatisticsCardComponent,\n PriceMethodComponent,\n ApplicationStatusBarComponent,\n ReasonForReturnComponent,\n ContentTypeTagComponent,\n QuestionTypeTagComponent,\n StandardsPdfCardComponent,\n NoteSidebarItemComponent,\n AuthorDateTimeComponent,\n CheckDeleteIconComponent,\n ProfileElementsCardComponent,\n UserWithEmailComponent,\n CancelUpdateButtonsComponent,\n InformationBoxComponent,\n RequestSentByComponent,\n NotificationStatusLinkComponent,\n EditCoverPhotoComponent,\n RequestStatusBarComponent,\n VerifyChecklistComponent,\n EditButtonComponent,\n AddButtonComponent,\n HorizontalStepsComponent,\n RadioDisplayComponent,\n CheckboxDisplayComponent,\n FilterColumnsComponent,\n FileUploadComponent,\n ToolbarBarComponent,\n NotesPanelComponent,\n TextFormFieldComponent,\n ResultPageComponent,\n TourComponent\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 model,\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 * Whether the alert is visible. Manages its own state internally —\n * no consumer binding required. Supports [(visible)] for controlled mode.\n */\n visible = model(true);\n\n dismissed = output<void>();\n primaryActionClick = output<void>();\n secondaryActionClick = output<void>();\n\n dismiss(): void {\n this.visible.set(false);\n this.dismissed.emit();\n }\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","@if (visible()) {\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)=\"dismiss()\"\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}\n","import {\n Component,\n input,\n output,\n inject,\n computed,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\n\nexport type MetricsCardVariation = '1' | '2' | '3' | '4' | '5' | '6';\nexport type MetricsCardType = 'data+cta' | 'data-only';\nexport type MetricsCardOrientation = 'left-aligned' | 'center';\nexport type MetricsCardBadgeStatus = 'success' | 'warning' | 'error' | 'info';\nexport type MetricsCardIconBg = 'white' | 'pending' | 'success' | 'error' | 'info' | 'purple';\n\n@Component({\n selector: 'pecb-metrics-card',\n standalone: true,\n imports: [],\n templateUrl: './metrics-card.component.html',\n styleUrls: ['./metrics-card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MetricsCardComponent {\n private sanitizer = inject(DomSanitizer);\n\n /** Layout variation (1–6) matching the Figma design */\n variation = input<MetricsCardVariation>('1');\n\n /** Whether to render a CTA button/link */\n type = input<MetricsCardType>('data+cta');\n\n /**\n * Content alignment — only variation 6 supports 'center'.\n * All others default to 'left-aligned'.\n */\n orientation = input<MetricsCardOrientation>('left-aligned');\n\n /** Metric label/title text */\n label = input('Total Solar Sales');\n\n /** Main metric value displayed prominently */\n value = input('45,823');\n\n /** Show or hide the badge */\n hasBadge = input(true);\n\n /** Badge text (e.g. \"10%\", \"Label\", \"Paid\") */\n badgeText = input('10%');\n\n /** Badge color theme */\n badgeStatus = input<MetricsCardBadgeStatus>('success');\n\n /** Show or hide the description text next to the badge */\n hasDescription = input(true);\n\n /** Description text shown next to the percentage badge */\n description = input('Compared to last month');\n\n /** CTA button label (used for both inline links and footer buttons) */\n ctaText = input('View Snap Report');\n\n /** Show or hide the icon (variations 2, 3, 4, 6) */\n hasIcon = input(true);\n\n /** Custom SVG string for the icon — falls back to a refresh icon when empty */\n iconSvg = input('');\n\n /** Icon container background color (mainly variation 4) */\n iconBg = input<MetricsCardIconBg>('white');\n\n /** Date string shown on the right side of variation 1 */\n date = input('Jun 12th, 2023');\n\n /** Secondary metric text shown below the value in variation 5 */\n subtext = input('$1,873 last year');\n\n /** Emitted when any CTA button or link is clicked */\n ctaClicked = output<void>();\n\n safeIconSvg = computed(() =>\n this.iconSvg()\n ? this.sanitizer.bypassSecurityTrustHtml(this.iconSvg())\n : null\n );\n\n get hostClasses(): string {\n return [\n 'pecb-metrics-card',\n `pecb-metrics-card--variation-${this.variation()}`,\n `pecb-metrics-card--type-${this.type()}`,\n this.orientation() === 'center' ? 'pecb-metrics-card--center' : ''\n ]\n .filter(Boolean)\n .join(' ');\n }\n\n /** Footer CTA renders for variations 2, 3, 4 (left-aligned) and 6 (center) */\n get showFooterCta(): boolean {\n if (this.type() !== 'data+cta') return false;\n const v = this.variation();\n return v === '2' || v === '3' || v === '4' || v === '6';\n }\n\n /** Inline CTA link renders for variations 1 and 5 */\n get showInlineCta(): boolean {\n if (this.type() !== 'data+cta') return false;\n return this.variation() === '1' || this.variation() === '5';\n }\n\n /** Footer CTA arrow renders only for left-aligned variations (2, 3, 4) */\n get showFooterArrow(): boolean {\n return this.orientation() !== 'center';\n }\n\n /** Icon wrapper size class driven by variation */\n get iconSizeClass(): string {\n const v = this.variation();\n if (v === '4') return 'pecb-metrics-card__icon-wrapper--lg';\n if (v === '6') return 'pecb-metrics-card__icon-wrapper--md';\n return 'pecb-metrics-card__icon-wrapper--sm';\n }\n\n /** Icon background class driven by iconBg input */\n get iconBgClass(): string {\n const bg = this.iconBg();\n return bg !== 'white' ? `pecb-metrics-card__icon-wrapper--bg-${bg}` : '';\n }\n\n onCtaClick(): void {\n this.ctaClicked.emit();\n }\n}\n","<div [class]=\"hostClasses\">\n\n <div class=\"pecb-metrics-card__body\">\n\n <!-- ═══════════════════════════════════════════════════════════════\n VARIATION 1 — Wide horizontal card\n Left: label + value + optional inline CTA\n Right: date + status badge\n ════════════════════════════════════════════════════════════════ -->\n @if (variation() === '1') {\n <div class=\"pecb-metrics-card__left\">\n <p class=\"pecb-metrics-card__label\">{{ label() }}</p>\n <p class=\"pecb-metrics-card__value\">{{ value() }}</p>\n @if (showInlineCta) {\n <button\n class=\"pecb-metrics-card__cta-link\"\n type=\"button\"\n (click)=\"onCtaClick()\"\n >\n {{ ctaText() }}\n </button>\n }\n </div>\n <div class=\"pecb-metrics-card__right\">\n <p class=\"pecb-metrics-card__date\">{{ date() }}</p>\n @if (hasBadge()) {\n <span class=\"pecb-metrics-card__badge pecb-metrics-card__badge--{{ badgeStatus() }}\">\n {{ badgeText() }}\n </span>\n }\n </div>\n }\n\n <!-- ═══════════════════════════════════════════════════════════════\n VARIATION 2 — Vertical: icon+label → value → badge+desc\n Footer CTA rendered outside body\n ════════════════════════════════════════════════════════════════ -->\n @if (variation() === '2') {\n <div class=\"pecb-metrics-card__header\">\n @if (hasIcon()) {\n <span\n class=\"pecb-metrics-card__icon-wrapper {{ iconSizeClass }} {{ iconBgClass }}\"\n aria-hidden=\"true\"\n >\n @if (safeIconSvg()) {\n <span [innerHTML]=\"safeIconSvg()\"></span>\n } @else {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 8C14 11.3137 11.3137 14 8 14C4.68629 14 2 11.3137 2 8C2 4.68629 4.68629 2 8 2C9.87384 2 11.5557 2.81444 12.7071 4.10051\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <path d=\"M14 2V5H11\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n </span>\n }\n <p class=\"pecb-metrics-card__label\">{{ label() }}</p>\n </div>\n <div class=\"pecb-metrics-card__metrics\">\n <p class=\"pecb-metrics-card__value\">{{ value() }}</p>\n @if (hasBadge() || hasDescription()) {\n <div class=\"pecb-metrics-card__badge-row\">\n @if (hasBadge()) {\n <span class=\"pecb-metrics-card__badge pecb-metrics-card__badge--{{ badgeStatus() }}\">\n {{ badgeText() }}\n </span>\n }\n @if (hasDescription()) {\n <p class=\"pecb-metrics-card__description\">{{ description() }}</p>\n }\n </div>\n }\n </div>\n }\n\n <!-- ═══════════════════════════════════════════════════════════════\n VARIATION 3 — Vertical: icon+label → badge+desc → value\n Badge and description appear ABOVE the value\n Footer CTA rendered outside body\n ════════════════════════════════════════════════════════════════ -->\n @if (variation() === '3') {\n <div class=\"pecb-metrics-card__header\">\n @if (hasIcon()) {\n <span\n class=\"pecb-metrics-card__icon-wrapper {{ iconSizeClass }} {{ iconBgClass }}\"\n aria-hidden=\"true\"\n >\n @if (safeIconSvg()) {\n <span [innerHTML]=\"safeIconSvg()\"></span>\n } @else {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M14 8C14 11.3137 11.3137 14 8 14C4.68629 14 2 11.3137 2 8C2 4.68629 4.68629 2 8 2C9.87384 2 11.5557 2.81444 12.7071 4.10051\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <path d=\"M14 2V5H11\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n </span>\n }\n <p class=\"pecb-metrics-card__label\">{{ label() }}</p>\n </div>\n <div class=\"pecb-metrics-card__metrics\">\n @if (hasBadge() || hasDescription()) {\n <div class=\"pecb-metrics-card__badge-row\">\n @if (hasBadge()) {\n <span class=\"pecb-metrics-card__badge pecb-metrics-card__badge--{{ badgeStatus() }}\">\n {{ badgeText() }}\n </span>\n }\n @if (hasDescription()) {\n <p class=\"pecb-metrics-card__description\">{{ description() }}</p>\n }\n </div>\n }\n <p class=\"pecb-metrics-card__value\">{{ value() }}</p>\n </div>\n }\n\n <!-- ═══════════════════════════════════════════════════════════════\n VARIATION 4 — Left: label + value + badge+desc, Right: icon\n Footer CTA rendered outside body\n ════════════════════════════════════════════════════════════════ -->\n @if (variation() === '4') {\n <div class=\"pecb-metrics-card__left\">\n <p class=\"pecb-metrics-card__label\">{{ label() }}</p>\n <div class=\"pecb-metrics-card__metrics\">\n <p class=\"pecb-metrics-card__value\">{{ value() }}</p>\n @if (hasBadge() || hasDescription()) {\n <div class=\"pecb-metrics-card__badge-row\">\n @if (hasBadge()) {\n <span class=\"pecb-metrics-card__badge pecb-metrics-card__badge--{{ badgeStatus() }}\">\n {{ badgeText() }}\n </span>\n }\n @if (hasDescription()) {\n <p class=\"pecb-metrics-card__description\">{{ description() }}</p>\n }\n </div>\n }\n </div>\n </div>\n @if (hasIcon()) {\n <div class=\"pecb-metrics-card__right pecb-metrics-card__right--icon-only\">\n <span\n class=\"pecb-metrics-card__icon-wrapper {{ iconSizeClass }} {{ iconBgClass }}\"\n aria-hidden=\"true\"\n >\n @if (safeIconSvg()) {\n <span [innerHTML]=\"safeIconSvg()\"></span>\n } @else {\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C14.8109 3 17.3337 4.22164 19.0607 6.15077\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <path d=\"M21 3V7H17\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n </span>\n </div>\n }\n }\n\n <!-- ═══════════════════════════════════════════════════════════════\n VARIATION 5 — Horizontal compact\n Left: label + value + subtext\n Right: badge + optional inline CTA\n ════════════════════════════════════════════════════════════════ -->\n @if (variation() === '5') {\n <div class=\"pecb-metrics-card__left\">\n <p class=\"pecb-metrics-card__label\">{{ label() }}</p>\n <div class=\"pecb-metrics-card__metrics pecb-metrics-card__metrics--compact\">\n <p class=\"pecb-metrics-card__value\">{{ value() }}</p>\n @if (hasDescription()) {\n <p class=\"pecb-metrics-card__subtext\">{{ subtext() }}</p>\n }\n </div>\n </div>\n <div class=\"pecb-metrics-card__right\">\n @if (hasBadge()) {\n <span class=\"pecb-metrics-card__badge pecb-metrics-card__badge--{{ badgeStatus() }}\">\n {{ badgeText() }}\n </span>\n }\n @if (showInlineCta) {\n <button\n class=\"pecb-metrics-card__cta-link\"\n type=\"button\"\n (click)=\"onCtaClick()\"\n >\n {{ ctaText() }}\n </button>\n }\n </div>\n }\n\n <!-- ═══════════════════════════════════════════════════════════════\n VARIATION 6 — Center-aligned\n Icon + label, value, badge + desc\n Footer CTA rendered outside body\n ════════════════════════════════════════════════════════════════ -->\n @if (variation() === '6') {\n <div class=\"pecb-metrics-card__center-header\">\n @if (hasIcon()) {\n <span\n class=\"pecb-metrics-card__icon-wrapper {{ iconSizeClass }} {{ iconBgClass }}\"\n aria-hidden=\"true\"\n >\n @if (safeIconSvg()) {\n <span [innerHTML]=\"safeIconSvg()\"></span>\n } @else {\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M17.5 10C17.5 14.1421 14.1421 17.5 10 17.5C5.85786 17.5 2.5 14.1421 2.5 10C2.5 5.85786 5.85786 2.5 10 2.5C11.8449 2.5 13.5348 3.15138 14.8523 4.24848\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <path d=\"M17.5 2.5V6.25H13.75\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n }\n </span>\n }\n <p class=\"pecb-metrics-card__label pecb-metrics-card__label--center\">{{ label() }}</p>\n </div>\n <div class=\"pecb-metrics-card__metrics pecb-metrics-card__metrics--center\">\n <p class=\"pecb-metrics-card__value\">{{ value() }}</p>\n @if (hasBadge() || (hasDescription() && type() === 'data+cta')) {\n <div class=\"pecb-metrics-card__badge-row pecb-metrics-card__badge-row--center\">\n @if (hasBadge()) {\n <span class=\"pecb-metrics-card__badge pecb-metrics-card__badge--{{ badgeStatus() }}\">\n {{ badgeText() }}\n </span>\n }\n @if (hasDescription() && type() === 'data+cta') {\n <p class=\"pecb-metrics-card__description\">{{ description() }}</p>\n }\n </div>\n }\n </div>\n }\n\n </div>\n\n <!-- ═══════════════════════════════════════════════════════════════\n FOOTER CTA — rendered for data+cta type, variations 2, 3, 4, 6\n ════════════════════════════════════════════════════════════════ -->\n @if (showFooterCta) {\n <div class=\"pecb-metrics-card__footer\">\n <button\n class=\"pecb-metrics-card__cta-btn\"\n type=\"button\"\n (click)=\"onCtaClick()\"\n >\n <span>{{ ctaText() }}</span>\n @if (showFooterArrow) {\n <span class=\"pecb-metrics-card__cta-btn-icon\" aria-hidden=\"true\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.5 5L12.5 10L7.5 15\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n }\n </button>\n </div>\n }\n\n</div>\n","import {\n Component,\n computed,\n inject,\n input,\n model,\n output,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface FloatButtonAction {\n /** Unique identifier used for tracking and emitting click events */\n id: string;\n /** Label text displayed in the action button */\n label: string;\n /** Optional SVG string for the leading icon */\n iconSvg?: string;\n /**\n * Whether to render the icon even when `iconSvg` is provided.\n * Set to false to hide the icon for a specific item without removing the SVG string.\n * @default true\n */\n showIcon?: boolean;\n /**\n * Whether this item is rendered in the list.\n * Use this to dynamically show/hide individual actions without changing the array.\n * @default true\n */\n visible?: boolean;\n /** Whether this action is disabled */\n disabled?: boolean;\n /**\n * Per-item click handler. Called in addition to the global `actionClick` output.\n * Use this when each action needs its own dedicated function.\n * @example { id: 'audio', label: 'Audio', onClick: () => this.startRecording() }\n */\n onClick?: () => void;\n}\n\nexport type FloatButtonPosition =\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'top-right'\n | 'top-left'\n | 'top-center';\n\n// ─── FloatButtonItemComponent ─────────────────────────────────────────────────\n\n/**\n * Individual action pill item rendered inside the float button list.\n *\n * @example\n * <pecb-float-button-item label=\"Audio\" [iconSvg]=\"micSvg\" (itemClick)=\"onAudio()\">\n * </pecb-float-button-item>\n */\n@Component({\n selector: 'pecb-float-button-item',\n standalone: true,\n imports: [],\n template: `\n <button\n type=\"button\"\n [class]=\"hostClasses()\"\n [disabled]=\"disabled()\"\n [attr.aria-disabled]=\"disabled() || null\"\n (click)=\"onClick()\"\n >\n @if (iconSvg()) {\n <span\n class=\"pecb-float-button-item__icon\"\n aria-hidden=\"true\"\n [innerHTML]=\"safeIcon()\"\n ></span>\n }\n <span class=\"pecb-float-button-item__label\">{{ label() }}</span>\n </button>\n `,\n styleUrls: ['./float-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FloatButtonItemComponent {\n private sanitizer = inject(DomSanitizer);\n\n label = input.required<string>();\n iconSvg = input('');\n disabled = input(false);\n\n itemClick = output<void>();\n\n safeIcon = computed<SafeHtml>(() =>\n this.sanitizer.bypassSecurityTrustHtml(this.iconSvg())\n );\n\n hostClasses = computed(() =>\n [\n 'pecb-float-button-item',\n this.disabled() ? 'pecb-float-button-item--disabled' : '',\n ]\n .filter(Boolean)\n .join(' ')\n );\n\n onClick(): void {\n if (!this.disabled()) {\n this.itemClick.emit();\n }\n }\n}\n\n// ─── FloatButtonComponent ─────────────────────────────────────────────────────\n\n/**\n * Floating action button with an expandable list of 1–5 action items.\n *\n * Manages open/closed state internally — no consumer binding required.\n * Supports `[(isOpen)]` for controlled mode.\n *\n * @example\n * <!-- Uncontrolled -->\n * <pecb-float-button [actions]=\"myActions\" (actionClick)=\"onAction($event)\">\n * </pecb-float-button>\n *\n * @example\n * <!-- Controlled -->\n * <pecb-float-button [actions]=\"myActions\" [(isOpen)]=\"menuOpen\" (actionClick)=\"onAction($event)\">\n * </pecb-float-button>\n */\n@Component({\n selector: 'pecb-float-button',\n standalone: true,\n imports: [FloatButtonItemComponent],\n templateUrl: './float-button.component.html',\n styleUrls: ['./float-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FloatButtonComponent {\n /**\n * List of action items to display (1–5 items as per design spec).\n * Items render in order, closest to the trigger first.\n */\n actions = input<FloatButtonAction[]>([]);\n\n /**\n * Whether the action list is open. Manages its own state internally —\n * no consumer binding required. Supports [(isOpen)] for controlled mode.\n */\n isOpen = model(false);\n\n /**\n * Corner position when `fixed` is true.\n * @default 'bottom-right'\n */\n position = input<FloatButtonPosition>('bottom-right');\n\n /**\n * When true, the component is positioned fixed to the viewport corner\n * defined by `position`. When false, it is relative/inline.\n * @default false\n */\n fixed = input(false);\n\n /** Accessible label for the trigger button */\n triggerAriaLabel = input('Toggle actions');\n\n // ── Outputs ────────────────────────────────────────────────────────────────\n\n /** Emits the action that was clicked */\n actionClick = output<FloatButtonAction>();\n /** Emits when the list opens */\n opened = output<void>();\n /** Emits when the list closes */\n closed = output<void>();\n\n // ── Computed ───────────────────────────────────────────────────────────────\n\n /** Filters hidden items then enforces the 1–5 item constraint */\n visibleActions = computed(() =>\n this.actions()\n .filter(a => a.visible !== false)\n .slice(0, 5)\n );\n\n hostClasses = computed(() =>\n [\n 'pecb-float-button',\n this.fixed() ? `pecb-float-button--fixed` : '',\n this.fixed() ? `pecb-float-button--${this.position()}` : '',\n this.isOpen() ? 'pecb-float-button--open' : '',\n ]\n .filter(Boolean)\n .join(' ')\n );\n\n // ── Methods ────────────────────────────────────────────────────────────────\n\n toggle(): void {\n const next = !this.isOpen();\n this.isOpen.set(next);\n next ? this.opened.emit() : this.closed.emit();\n }\n\n onActionClick(action: FloatButtonAction): void {\n if (!action.disabled) {\n action.onClick?.();\n this.actionClick.emit(action);\n }\n }\n}\n","<div [class]=\"hostClasses()\">\n\n <!-- Action list -->\n @if (isOpen()) {\n <ul class=\"pecb-float-button__list\" role=\"menu\" aria-orientation=\"vertical\">\n @for (action of visibleActions(); track action.id; let i = $index; let total = $count) {\n <li role=\"none\" class=\"pecb-float-button__list-item\" [style.--item-rev-index]=\"total - 1 - i\">\n <pecb-float-button-item\n [label]=\"action.label\"\n [iconSvg]=\"action.showIcon !== false ? (action.iconSvg ?? '') : ''\"\n [disabled]=\"action.disabled ?? false\"\n (itemClick)=\"onActionClick(action)\"\n ></pecb-float-button-item>\n </li>\n }\n </ul>\n }\n\n <!-- Trigger -->\n <button\n type=\"button\"\n class=\"pecb-float-button__trigger\"\n [attr.aria-label]=\"triggerAriaLabel()\"\n [attr.aria-expanded]=\"isOpen()\"\n [attr.aria-haspopup]=\"true\"\n (click)=\"toggle()\"\n >\n <span class=\"pecb-float-button__trigger-icon\" aria-hidden=\"true\">\n <!-- + icon — CSS rotates 45° to × when open -->\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M12 5V19M5 12H19\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </span>\n </button>\n\n</div>\n","import { Component, computed, input, ChangeDetectionStrategy } from '@angular/core';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * The visual type of skeleton item to render.\n *\n * - `heading` — Single short line mimicking a section title\n * - `paragraph` — Multiple stacked lines mimicking body text\n * - `input` — Input field placeholder\n * - `button` — Button placeholder (combine with `shape` for circle/round)\n * - `image` — Square image/thumbnail placeholder with a photo icon\n * - `avatar` — User avatar placeholder (combine with `shape` for circle/square)\n */\nexport type SkeletonType = 'heading' | 'paragraph' | 'input' | 'button' | 'image' | 'avatar';\n\n/** Size scale shared across input, button, and avatar types */\nexport type SkeletonSize = 'sm' | 'md' | 'lg';\n\n/**\n * Shape variant.\n * - Button types: `default` | `circle` | `round`\n * - Avatar types: `circle` | `square`\n */\nexport type SkeletonShape = 'default' | 'circle' | 'round' | 'square';\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * `SkeletonComponent` renders a single animated placeholder that mirrors the\n * shape of real content while data is loading.\n *\n * Compose multiple instances to build full-page skeleton layouts.\n *\n * @example\n * <!-- Heading + paragraph block -->\n * <pecb-skeleton type=\"heading\" />\n * <pecb-skeleton type=\"paragraph\" [lines]=\"3\" />\n *\n * @example\n * <!-- Row with avatar and text -->\n * <pecb-skeleton type=\"avatar\" shape=\"circle\" size=\"md\" />\n * <pecb-skeleton type=\"paragraph\" [lines]=\"2\" />\n *\n * @example\n * <!-- Form fields -->\n * <pecb-skeleton type=\"input\" size=\"lg\" />\n * <pecb-skeleton type=\"button\" size=\"md\" />\n * <pecb-skeleton type=\"button\" shape=\"round\" size=\"sm\" />\n */\n@Component({\n selector: 'pecb-skeleton',\n standalone: true,\n templateUrl: './skeleton.component.html',\n styleUrls: ['./skeleton.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'role': 'status',\n '[attr.aria-label]': '\"Loading content\"',\n '[attr.aria-busy]': 'true',\n '[class]': 'hostClasses()',\n },\n})\nexport class SkeletonComponent {\n /** Type of skeleton item to render */\n type = input<SkeletonType>('paragraph');\n\n /**\n * Size variant — applies to `input`, `button`, and `avatar` types.\n * @default 'md'\n */\n size = input<SkeletonSize>('md');\n\n /**\n * Shape variant.\n * - For `button`: `default` (rect) | `circle` | `round` (pill)\n * - For `avatar`: `circle` | `square`\n * @default 'default'\n */\n shape = input<SkeletonShape>('default');\n\n /**\n * Number of lines rendered for `paragraph` type.\n * The last line is automatically shortened to ~60% width.\n * @default 3\n */\n lines = input<number>(3);\n\n /**\n * Override the width with any valid CSS value (e.g. `'70%'`, `'200px'`).\n * Applies to `heading`, `paragraph` lines, and `input` types.\n */\n width = input<string | undefined>(undefined);\n\n /**\n * Whether to show the shimmer sweep animation.\n * Set to `false` for a static placeholder.\n * @default true\n */\n animated = input<boolean>(true);\n\n /** @internal Line widths for paragraph type */\n readonly paragraphLines = computed<string[]>(() => {\n const count = Math.max(1, this.lines());\n return Array.from({ length: count }, (_, i) =>\n i === count - 1 && count > 1 ? '60%' : '100%'\n );\n });\n\n /** @internal Host CSS classes */\n readonly hostClasses = computed(() =>\n [\n 'pecb-skeleton',\n `pecb-skeleton--${this.type()}`,\n `pecb-skeleton--size-${this.size()}`,\n this.shape() !== 'default' ? `pecb-skeleton--shape-${this.shape()}` : '',\n this.animated() ? 'pecb-skeleton--animated' : '',\n ]\n .filter(Boolean)\n .join(' ')\n );\n}\n","@switch (type()) {\n\n @case ('heading') {\n <div class=\"pecb-skeleton__block pecb-skeleton__heading\" [style.width]=\"width()\" aria-hidden=\"true\">\n @if (animated()) { <span class=\"pecb-skeleton__shimmer\"></span> }\n </div>\n }\n\n @case ('paragraph') {\n @for (lineWidth of paragraphLines(); track $index) {\n <div class=\"pecb-skeleton__block pecb-skeleton__line\" [style.width]=\"width() ?? lineWidth\" aria-hidden=\"true\">\n @if (animated()) { <span class=\"pecb-skeleton__shimmer\"></span> }\n </div>\n }\n }\n\n @case ('input') {\n <div class=\"pecb-skeleton__block pecb-skeleton__input\" [style.width]=\"width()\" aria-hidden=\"true\">\n @if (animated()) { <span class=\"pecb-skeleton__shimmer\"></span> }\n </div>\n }\n\n @case ('button') {\n <div class=\"pecb-skeleton__block pecb-skeleton__button\" aria-hidden=\"true\">\n @if (animated()) { <span class=\"pecb-skeleton__shimmer\"></span> }\n </div>\n }\n\n @case ('image') {\n <div class=\"pecb-skeleton__block pecb-skeleton__image\" aria-hidden=\"true\">\n @if (animated()) { <span class=\"pecb-skeleton__shimmer\"></span> }\n <svg\n class=\"pecb-skeleton__image-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\" />\n </svg>\n </div>\n }\n\n @case ('avatar') {\n <div class=\"pecb-skeleton__block pecb-skeleton__avatar\" aria-hidden=\"true\">\n @if (animated()) { <span class=\"pecb-skeleton__shimmer\"></span> }\n </div>\n }\n\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n} from '@angular/core';\n\n// ─── Interfaces ───────────────────────────────────────────────────────────────\n\nexport interface ColorPaletteItem {\n /** Hex color value, e.g. \"#A11E29\" */\n hex: string;\n /** Optional accessible name for the swatch */\n name?: string;\n}\n\nexport interface ColorPaletteGroup {\n /** Section heading displayed above the swatches */\n title: string;\n /** List of colors in this group */\n colors: ColorPaletteItem[];\n}\n\n// ─── Default PECB design-system palette ───────────────────────────────────────\n\nexport const PECB_COLOR_PALETTE: ColorPaletteGroup[] = [\n {\n title: 'Primary',\n colors: [\n { hex: '#A11E29', name: 'Primary Red' },\n { hex: '#212427', name: 'Primary Dark' },\n { hex: '#FFFFFF', name: 'White' },\n ],\n },\n {\n title: 'Secondary',\n colors: [\n { hex: '#313131', name: 'Neutral 1' },\n { hex: '#616161', name: 'Neutral 2' },\n { hex: '#919191', name: 'Neutral 3' },\n { hex: '#C2C2C2', name: 'Neutral 4' },\n { hex: '#ECECEC', name: 'Neutral 5' },\n { hex: '#F7F5F5', name: 'Neutral 6' },\n { hex: '#F4F4F4', name: 'Neutral 7' },\n { hex: '#FAFAFA', name: 'Neutral 8' },\n ],\n },\n {\n title: 'Statuses',\n colors: [\n { hex: '#DC3545', name: 'Error' },\n { hex: '#FDECEA', name: 'Error Background' },\n { hex: '#FD4A5B', name: 'Error Light' },\n { hex: '#FD7E14', name: 'Warning' },\n { hex: '#FFF4E5', name: 'Warning Background' },\n { hex: '#FF9C4A', name: 'Warning Light' },\n { hex: '#008000', name: 'Success' },\n { hex: '#E6F4EA', name: 'Success Background' },\n { hex: '#57BC57', name: 'Success Light' },\n { hex: '#007BFF', name: 'Info' },\n { hex: '#E6F0FA', name: 'Info Background' },\n { hex: '#5EACFF', name: 'Info Light' },\n { hex: '#8E6DF0', name: 'Accent' },\n { hex: '#EEE8FF', name: 'Accent Background' },\n { hex: '#A98CFF', name: 'Accent Light' },\n ],\n },\n {\n title: 'Hover',\n colors: [\n { hex: '#671018', name: 'Primary Hover' },\n { hex: '#616161', name: 'Secondary Hover' },\n ],\n },\n];\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * Displays a color palette as a grid of labelled swatches grouped by category.\n *\n * Uses the full PECB design-system palette by default. Pass custom `groups` to\n * render any set of colors.\n *\n * @example\n * <!-- Default PECB palette -->\n * <pecb-color-palette></pecb-color-palette>\n *\n * @example\n * <!-- Custom groups -->\n * <pecb-color-palette [groups]=\"myGroups\"></pecb-color-palette>\n */\n@Component({\n selector: 'pecb-color-palette',\n standalone: true,\n imports: [],\n templateUrl: './color-palette.component.html',\n styleUrls: ['./color-palette.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ColorPaletteComponent {\n /**\n * Color groups to display. Each group has a title and a list of hex colors.\n * Defaults to the full PECB design-system palette.\n */\n groups = input<ColorPaletteGroup[]>(PECB_COLOR_PALETTE);\n}\n","<div class=\"pecb-color-palette\">\n @for (group of groups(); track group.title) {\n <div class=\"pecb-color-palette__group\">\n <h3 class=\"pecb-color-palette__group-title\">{{ group.title }}</h3>\n\n <div class=\"pecb-color-palette__swatches\">\n @for (color of group.colors; track color.hex) {\n <div class=\"pecb-color-palette__swatch\">\n <div\n class=\"pecb-color-palette__swatch-color\"\n [style.background-color]=\"color.hex\"\n role=\"img\"\n [attr.aria-label]=\"color.name ?? color.hex\"\n ></div>\n <span class=\"pecb-color-palette__swatch-hex\">{{ color.hex.toUpperCase() }}</span>\n </div>\n }\n </div>\n </div>\n }\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport { NgOptimizedImage } from '@angular/common';\n\nexport type ProfileGroupSize = 'sm' | 'md' | 'lg';\n\nexport interface ProfileGroupItem {\n src?: string;\n initials?: string;\n alt?: string;\n}\n\nconst GROUP_SIZE_PX: Record<ProfileGroupSize, number> = {\n 'sm': 24, 'md': 32, 'lg': 40,\n};\n\n@Component({\n selector: 'pecb-profile-group',\n standalone: true,\n imports: [NgOptimizedImage],\n templateUrl: './profile-group.component.html',\n styleUrl: './profile-group.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClass()',\n },\n})\nexport class ProfileGroupComponent {\n avatars = input<ProfileGroupItem[]>([]);\n size = input<ProfileGroupSize>('md');\n max = input<number>(9);\n\n hostClass = computed(() => `pecb-profile-group pecb-profile-group--${this.size()}`);\n visible = computed(() => this.avatars().slice(0, this.max()));\n overflow = computed(() => Math.max(0, this.avatars().length - this.max()));\n overflowLabel = computed(() => `+${this.overflow()}`);\n imgSize = computed(() => GROUP_SIZE_PX[this.size()]);\n}\n","@for (avatar of visible(); track $index) {\n <div class=\"pecb-profile-group__item\">\n @if (avatar.src) {\n <img\n [ngSrc]=\"avatar.src\"\n [width]=\"imgSize()\"\n [height]=\"imgSize()\"\n [alt]=\"avatar.alt || ''\"\n />\n } @else if (avatar.initials) {\n <span class=\"pecb-profile-group__initials\">{{ avatar.initials }}</span>\n } @else {\n <svg class=\"pecb-profile-group__icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M12 12c2.7 0 4.8-2.1 4.8-4.8S14.7 2.4 12 2.4 7.2 4.5 7.2 7.2 9.3 12 12 12zm0 2.4c-3.2 0-9.6 1.6-9.6 4.8v2.4h19.2v-2.4c0-3.2-6.4-4.8-9.6-4.8z\"/>\n </svg>\n }\n </div>\n}\n\n@if (overflow() > 0) {\n <div class=\"pecb-profile-group__overflow\" [attr.aria-label]=\"overflow() + ' more'\">\n {{ overflowLabel() }}\n </div>\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n input,\n} from '@angular/core';\n\n// ─── Interfaces ───────────────────────────────────────────────────────────────\n\n/**\n * One entry in the modular type scale table (Typefaces panel).\n */\nexport interface TypographyScaleEntry {\n /** Font size in pixels */\n px: number;\n /** Equivalent rem value displayed as a label, e.g. \"3.812\" */\n rem: string;\n /** Custom sample sentence. Defaults to the component's `scaleSampleText`. */\n sample?: string;\n}\n\n/**\n * One named text style in the font catalogue (Fonts panel).\n */\nexport interface TypographyStyleEntry {\n /** Display name, e.g. \"Hero 1 bold\", \"Body 14\", \"Caption\" */\n name: string;\n /** CSS font-size value, e.g. \"64px\" */\n fontSize: string;\n /** Numeric font-weight */\n fontWeight: 400 | 500 | 700;\n /** CSS line-height value, e.g. \"1.2\", \"normal\", \"18px\" */\n lineHeight: string;\n /** Optional CSS text-transform — use \"uppercase\" for caption styles */\n textTransform?: 'uppercase';\n}\n\n// ─── Default PECB design-system data ─────────────────────────────────────────\n\n/** Modular type scale used by the PECB design system (base 16 px, ratio 1.25). */\nexport const PECB_TYPE_SCALE: TypographyScaleEntry[] = [\n { px: 64, rem: '3.812' },\n { px: 48, rem: '3.062' },\n { px: 31, rem: '2.438' },\n { px: 25, rem: '1.938' },\n { px: 20, rem: '1.562' },\n { px: 16, rem: '1.000' },\n { px: 13, rem: '0.812' },\n { px: 10, rem: '0.625' },\n];\n\n/** All named text styles defined in the PECB design system. */\nexport const PECB_FONT_STYLES: TypographyStyleEntry[] = [\n // ── Hero ─────────────────────────────────────────────────────────────────\n { name: 'Hero 1', fontSize: '64px', fontWeight: 400, lineHeight: '1.2' },\n { name: 'Hero 1 medium', fontSize: '64px', fontWeight: 500, lineHeight: '1.2' },\n { name: 'Hero 1 bold', fontSize: '64px', fontWeight: 700, lineHeight: '1.2' },\n { name: 'Hero 2', fontSize: '56px', fontWeight: 400, lineHeight: '1.2' },\n { name: 'Hero 2 medium', fontSize: '56px', fontWeight: 500, lineHeight: '1.2' },\n { name: 'Hero 2 bold', fontSize: '56px', fontWeight: 700, lineHeight: '1.2' },\n { name: 'Hero 3', fontSize: '48px', fontWeight: 400, lineHeight: '1.2' },\n { name: 'Hero 3 medium', fontSize: '48px', fontWeight: 500, lineHeight: '1.2' },\n { name: 'Hero 3 bold', fontSize: '48px', fontWeight: 700, lineHeight: '1.2' },\n // ── Headings ──────────────────────────────────────────────────────────────\n { name: 'H1', fontSize: '40px', fontWeight: 400, lineHeight: '1.2' },\n { name: 'H1 medium', fontSize: '40px', fontWeight: 500, lineHeight: '1.2' },\n { name: 'H1 bold', fontSize: '40px', fontWeight: 700, lineHeight: '1.2' },\n { name: 'H2', fontSize: '32px', fontWeight: 400, lineHeight: '1.2' },\n { name: 'H2 medium', fontSize: '32px', fontWeight: 500, lineHeight: '1.2' },\n { name: 'H2 bold', fontSize: '32px', fontWeight: 700, lineHeight: '1.2' },\n { name: 'H3', fontSize: '24px', fontWeight: 400, lineHeight: '1.2' },\n { name: 'H3 medium', fontSize: '24px', fontWeight: 500, lineHeight: '1.2' },\n { name: 'H3 bold', fontSize: '24px', fontWeight: 700, lineHeight: '1.2' },\n // ── Body ─────────────────────────────────────────────────────────────────\n { name: 'Body 12', fontSize: '12px', fontWeight: 400, lineHeight: 'normal' },\n { name: 'Bold 12', fontSize: '12px', fontWeight: 700, lineHeight: 'normal' },\n { name: 'Medium 12', fontSize: '12px', fontWeight: 500, lineHeight: 'normal' },\n { name: 'Body 13', fontSize: '13px', fontWeight: 400, lineHeight: '20px' },\n { name: 'Bold 13', fontSize: '13px', fontWeight: 700, lineHeight: 'normal' },\n { name: 'Medium 13', fontSize: '13px', fontWeight: 500, lineHeight: 'normal' },\n { name: 'Body 14', fontSize: '14px', fontWeight: 400, lineHeight: '1.5' },\n { name: 'Bold 14', fontSize: '14px', fontWeight: 700, lineHeight: 'normal' },\n { name: 'Medium 14', fontSize: '14px', fontWeight: 500, lineHeight: 'normal' },\n { name: 'Body 16', fontSize: '18px', fontWeight: 400, lineHeight: '1.2' },\n { name: 'Bold 16', fontSize: '16px', fontWeight: 700, lineHeight: '1.2' },\n { name: 'Medium 16', fontSize: '16px', fontWeight: 500, lineHeight: '1.6' },\n // ── Caption ───────────────────────────────────────────────────────────────\n { name: 'Caption', fontSize: '12px', fontWeight: 400, lineHeight: '18px', textTransform: 'uppercase' },\n { name: 'Caption bold', fontSize: '12px', fontWeight: 700, lineHeight: '18px', textTransform: 'uppercase' },\n];\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * Displays the typography system as two visual sections:\n *\n * 1. **Type Scale** — A table showing \"The quick brown fox…\" rendered at every\n * step of the modular scale, with px and rem labels.\n *\n * 2. **Font Styles** — A catalogue of every named text style, each rendered in\n * its own visual treatment.\n *\n * Uses the full PECB design system by default; pass custom data via inputs to\n * document any other type system.\n *\n * @example\n * <!-- Default PECB typography -->\n * <pecb-typography></pecb-typography>\n *\n * @example\n * <!-- Scale only -->\n * <pecb-typography [showStyles]=\"false\"></pecb-typography>\n *\n * @example\n * <!-- Custom data -->\n * <pecb-typography [scaleEntries]=\"myScale\" [styleEntries]=\"myStyles\"></pecb-typography>\n */\n@Component({\n selector: 'pecb-typography',\n standalone: true,\n imports: [],\n templateUrl: './typography.component.html',\n styleUrls: ['./typography.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TypographyComponent {\n /** Name of the typeface shown in the Fonts panel header. */\n fontName = input('Plus Jakarta Sans');\n\n /**\n * Type scale entries rendered in the Typefaces panel.\n * Defaults to the PECB modular scale.\n */\n scaleEntries = input<TypographyScaleEntry[]>(PECB_TYPE_SCALE);\n\n /**\n * Named text styles rendered in the Fonts panel.\n * Defaults to the full PECB font catalogue.\n */\n styleEntries = input<TypographyStyleEntry[]>(PECB_FONT_STYLES);\n\n /** Whether to render the Type Scale (Typefaces) panel. @default true */\n showScale = input(true);\n\n /** Whether to render the Font Styles (Fonts) panel. @default true */\n showStyles = input(true);\n\n /** Base value label shown in the type scale header. @default 16 */\n scaleBaseValue = input(16);\n\n /** Ratio label shown in the type scale header. @default 1.25 */\n scaleFactor = input(1.25);\n\n /** Sample sentence used in every scale row (overrideable per-entry via `sample`). */\n scaleSampleText = input('The quick brown fox jumps over the lazy dog');\n}\n","<div class=\"pecb-typography\">\n\n <!-- ── Type Scale (Typefaces) ──────────────────────────────────────────── -->\n @if (showScale()) {\n <div class=\"pecb-typography__scale\">\n\n <div class=\"pecb-typography__scale-meta\">\n <span>Base Value: {{ scaleBaseValue() }}</span>\n <span>Scale: {{ scaleFactor() }}</span>\n </div>\n\n @for (entry of scaleEntries(); track entry.px) {\n <div class=\"pecb-typography__scale-row\">\n <div class=\"pecb-typography__scale-label\" aria-hidden=\"true\">\n <span class=\"pecb-typography__scale-px\">{{ entry.px }}px</span>\n <span class=\"pecb-typography__scale-rem\">{{ entry.rem }}rem</span>\n </div>\n <p\n class=\"pecb-typography__scale-sample\"\n [style.font-size.px]=\"entry.px\"\n >{{ entry.sample ?? scaleSampleText() }}</p>\n </div>\n }\n\n </div>\n }\n\n <!-- ── Font Styles (Fonts) ─────────────────────────────────────────────── -->\n @if (showStyles()) {\n <div class=\"pecb-typography__styles\">\n\n <p class=\"pecb-typography__font-name\">\n Font Name:&nbsp;<strong>{{ fontName() }}</strong>\n </p>\n\n @for (style of styleEntries(); track style.name) {\n <p\n class=\"pecb-typography__style-item\"\n [style.font-size]=\"style.fontSize\"\n [style.font-weight]=\"style.fontWeight\"\n [style.line-height]=\"style.lineHeight\"\n [style.text-transform]=\"style.textTransform ?? 'none'\"\n >{{ style.name }}</p>\n }\n\n </div>\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>') // '&lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;'\n */\nexport function escapeHtml(str: string): string {\n const htmlEscapes: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\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","import {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n input,\n inject,\n computed,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { IconName } from './icon-names';\nimport { CustomIconName } from './custom-icon-names';\nimport { IconRegistry } from './icon-registry';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/** Container size. The inner icon is always 50 % of the container. */\nexport type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\n/**\n * Background colour of the icon container.\n * Each variant also sets a matching `color` so SVGs using `currentColor` inherit\n * the correct stroke/fill automatically.\n */\nexport type IconColor =\n | 'none'\n | 'primary'\n | 'gray'\n | 'white'\n | 'error'\n | 'warning'\n | 'success';\n\n/** Border-radius shape of the container. */\nexport type IconShape = 'round' | 'square';\n\n// ─── Size map ─────────────────────────────────────────────────────────────────\n\n/** Maps each size token to the **inner icon** dimension in px (= container ÷ 2). */\nconst INNER_SIZE_PX: Record<IconSize, number> = {\n xs: 12,\n sm: 16,\n md: 20,\n lg: 24,\n xl: 28,\n '2xl': 32,\n};\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * A coloured icon container that wraps any SVG icon.\n *\n * Supports three ways to provide an icon:\n *\n * 1. **By name** — pass a registered `IconName` via `[name]`.\n * The component looks up the SVG from the `IconRegistry`.\n * 2. **By SVG string** — pass an inline SVG string via `[svgIcon]`.\n * 3. **By content projection** — project an `<svg>` element as child content.\n *\n * Priority: `name` > `svgIcon` > content projection.\n *\n * @example\n * <!-- By name (requires icon to be registered in IconRegistry) -->\n * <pecb-icon name=\"check-01\" color=\"success\" size=\"md\"></pecb-icon>\n *\n * @example\n * <!-- SVG string input -->\n * <pecb-icon [svgIcon]=\"alertSvg\" color=\"error\" size=\"md\" shape=\"round\">\n * </pecb-icon>\n *\n * @example\n * <!-- Content projection -->\n * <pecb-icon color=\"success\" size=\"lg\" shape=\"square\">\n * <svg width=\"24\" height=\"24\" ...>...</svg>\n * </pecb-icon>\n */\n@Component({\n selector: 'pecb-icon',\n standalone: true,\n imports: [],\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n // None is required so the injected SVG (innerHTML) can be targeted by CSS.\n // All rules are scoped under the .pecb-icon BEM block.\n encapsulation: ViewEncapsulation.None,\n})\nexport class IconComponent {\n private readonly sanitizer = inject(DomSanitizer);\n private readonly registry = inject(IconRegistry);\n\n // ── Inputs ──────────────────────────────────────────────────────────────────\n\n /**\n * Registered icon name. When provided, the SVG is resolved from the\n * `IconRegistry`. Takes highest priority.\n */\n name = input<IconName | CustomIconName | undefined>(undefined);\n\n /**\n * Inline SVG string to render inside the container.\n * When provided, this takes precedence over projected content.\n */\n svgIcon = input('');\n\n /**\n * Container (and colour) size.\n * @default 'md' → 40 × 40 px container, 20 × 20 px icon\n */\n size = input<IconSize>('md');\n\n /**\n * Background colour variant.\n * Also applies the matching foreground colour so `currentColor` SVGs are\n * correctly tinted without any extra configuration.\n * @default 'primary'\n */\n color = input<IconColor>('primary');\n\n /**\n * Container shape.\n * - `round` — fully circular (border-radius 50 %)\n * - `square` — softly rounded rectangle (border-radius 8 px)\n * @default 'round'\n */\n shape = input<IconShape>('round');\n\n /**\n * Accessible label for the icon. When provided the container receives\n * `role=\"img\"` and `aria-label`. When omitted the icon is treated as\n * decorative (`aria-hidden=\"true\"`).\n */\n ariaLabel = input<string | undefined>(undefined);\n\n // ── Computed ─────────────────────────────────────────────────────────────────\n\n hostClasses = computed(() =>\n [\n 'pecb-icon',\n `pecb-icon--${this.size()}`,\n `pecb-icon--${this.color()}`,\n `pecb-icon--${this.shape()}`,\n ].join(' ')\n );\n\n /** Inner icon dimension in px (= container ÷ 2). */\n innerSize = computed(() => INNER_SIZE_PX[this.size()]);\n\n /** Resolved SVG string: name lookup → svgIcon input → empty. */\n resolvedSvg = computed(() => {\n const iconName = this.name();\n if (iconName) {\n return this.registry.get(iconName) ?? '';\n }\n return this.svgIcon();\n });\n\n safeIcon = computed<SafeHtml>(() =>\n this.sanitizer.bypassSecurityTrustHtml(this.resolvedSvg())\n );\n}\n","<div\n [class]=\"hostClasses()\"\n [attr.role]=\"ariaLabel() ? 'img' : null\"\n [attr.aria-label]=\"ariaLabel() ?? null\"\n [attr.aria-hidden]=\"ariaLabel() ? null : true\"\n>\n @if (resolvedSvg()) {\n <span\n class=\"pecb-icon__svg\"\n [style.width.px]=\"innerSize()\"\n [style.height.px]=\"innerSize()\"\n [innerHTML]=\"safeIcon()\"\n ></span>\n } @else {\n <span\n class=\"pecb-icon__content\"\n [style.width.px]=\"innerSize()\"\n [style.height.px]=\"innerSize()\"\n >\n <ng-content></ng-content>\n </span>\n }\n</div>\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';\nexport * from './lib/components/bottom-sheet/bottom-sheet.component';\nexport * from './lib/components/accordion/accordion.component';\nexport * from './lib/components/button-group/button-group.component';\nexport * from './lib/components/tooltip/tooltip.component';\nexport * from './lib/components/tooltip/tooltip.directive';\nexport * from './lib/components/metrics-card/metrics-card.component';\nexport * from './lib/components/float-button/float-button.component';\nexport * from './lib/components/skeleton/skeleton.component';\nexport * from './lib/components/messaging/messaging.component';\nexport * from './lib/components/fullscreen-modal/fullscreen-modal.component';\nexport * from './lib/components/color-palette/color-palette.component';\nexport * from './lib/components/profile/profile.component';\nexport * from './lib/components/profile/profile-group.component';\nexport * from './lib/components/typography/typography.component';\nexport * from './lib/components/stepper/stepper.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';\nexport * from './lib/components/icon/icon.component';\nexport * from './lib/components/grid/grid.component';\nexport * from './lib/components/dashboard-grid/dashboard-grid.component';\nexport * from './lib/components/progress/progress.component';\nexport * from './lib/components/code-input/code-input.component';\nexport * from './lib/components/shadow/shadow.directive';\nexport * from './lib/components/divider/divider.component';\nexport * from './lib/components/code-snippet/code-snippet.component';\nexport * from './lib/components/breadcrumbs/breadcrumbs.component';\nexport * from './lib/components/header/header.component';\nexport * from './lib/components/virtual-table/virtual-table.component';\nexport * from './lib/components/general/general.component';\nexport * from './lib/components/project-layout/project-layout.component';\nexport * from './lib/components/hierarchical-table/hierarchical-table.component';\nexport * from './lib/components/anchor/anchor.component';\nexport * from './lib/components/back-to-top/back-to-top.component';\nexport * from './lib/components/expandable-row-table/expandable-row-table.component';\nexport * from './lib/components/badge/badge.component';\nexport * from './lib/components/affix/affix.component';\nexport * from './lib/components/language-dropdown/language-dropdown.component';\nexport * from './lib/components/empty-state/empty-state.component';\nexport * from './lib/components/testimonial/testimonial.component';\nexport * from './lib/components/other-elements/other-elements.component';\nexport * from './lib/components/filter-columns/filter-columns.component';\nexport * from './lib/components/file-upload/file-upload.component';\nexport * from './lib/components/toolbar-bar/toolbar-bar.component';\nexport * from './lib/components/notes-panel/notes-panel.component';\nexport * from './lib/components/text-form-field/text-form-field.component';\nexport * from './lib/components/result-page/result-page.component';\nexport * from './lib/components/tour/tour.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2"],"mappings":"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"}