ps-helix 7.0.0 → 7.0.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ps-helix.mjs","sources":["../../../projects/ps-helix/src/lib/services/theme/utils/color.utils.ts","../../../projects/ps-helix/src/lib/services/theme/utils/wcag.utils.ts","../../../projects/ps-helix/src/lib/services/theme/theme.service.ts","../../../projects/ps-helix/src/lib/components/alert/alert.tokens.ts","../../../projects/ps-helix/src/lib/components/avatar/avatar.tokens.ts","../../../projects/ps-helix/src/lib/components/badge/badge.tokens.ts","../../../projects/ps-helix/src/lib/components/button/button.tokens.ts","../../../projects/ps-helix/src/lib/components/card/card.tokens.ts","../../../projects/ps-helix/src/lib/utils/unique-id.ts","../../../projects/ps-helix/src/lib/utils/required-validator.ts","../../../projects/ps-helix/src/lib/utils/aria.ts","../../../projects/ps-helix/src/lib/components/checkbox/checkbox.component.ts","../../../projects/ps-helix/src/lib/components/checkbox/checkbox.component.html","../../../projects/ps-helix/src/lib/components/collapse/collapse.tokens.ts","../../../projects/ps-helix/src/lib/components/dropdown/dropdown.tokens.ts","../../../projects/ps-helix/src/lib/components/horizontal-card/horizontal-card.tokens.ts","../../../projects/ps-helix/src/lib/components/info-card/info-card.tokens.ts","../../../projects/ps-helix/src/lib/components/input/input.types.ts","../../../projects/ps-helix/src/lib/components/input/input.tokens.ts","../../../projects/ps-helix/src/lib/components/menu/menu.tokens.ts","../../../projects/ps-helix/src/lib/utils/config-value.ts","../../../projects/ps-helix/src/lib/components/button/button.component.ts","../../../projects/ps-helix/src/lib/components/button/button.component.html","../../../projects/ps-helix/src/lib/a11y/focus-trap.directive.ts","../../../projects/ps-helix/src/lib/a11y/overlay.service.ts","../../../projects/ps-helix/src/lib/components/modal/modal.component.ts","../../../projects/ps-helix/src/lib/components/modal/modal.component.html","../../../projects/ps-helix/src/lib/components/pagination/pagination.component.ts","../../../projects/ps-helix/src/lib/components/pagination/pagination.component.html","../../../projects/ps-helix/src/lib/components/progressbar/progressbar.component.ts","../../../projects/ps-helix/src/lib/components/progressbar/progressbar.component.html","../../../projects/ps-helix/src/lib/components/radio/radio-group.token.ts","../../../projects/ps-helix/src/lib/components/radio/radio.component.ts","../../../projects/ps-helix/src/lib/components/radio/radio.component.html","../../../projects/ps-helix/src/lib/components/radio/radio-group.component.ts","../../../projects/ps-helix/src/lib/components/radio/radio-group.component.html","../../../projects/ps-helix/src/lib/components/select/select.tokens.ts","../../../projects/ps-helix/src/lib/components/sidebar/sidebar.component.ts","../../../projects/ps-helix/src/lib/components/sidebar/sidebar.component.html","../../../projects/ps-helix/src/lib/components/spinloader/spinloader.component.ts","../../../projects/ps-helix/src/lib/components/spinloader/spinloader.component.html","../../../projects/ps-helix/src/lib/components/stat-card/stat-card.tokens.ts","../../../projects/ps-helix/src/lib/components/state-flow-indicator/state-flow-indicator.token.ts","../../../projects/ps-helix/src/lib/components/state-flow-indicator/flow-step.component.ts","../../../projects/ps-helix/src/lib/components/state-flow-indicator/state-flow-indicator.component.ts","../../../projects/ps-helix/src/lib/components/state-flow-indicator/state-flow-indicator.component.html","../../../projects/ps-helix/src/lib/components/stepper/stepper.token.ts","../../../projects/ps-helix/src/lib/components/stepper/step.component.ts","../../../projects/ps-helix/src/lib/components/stepper/stepper.component.ts","../../../projects/ps-helix/src/lib/components/stepper/stepper.component.html","../../../projects/ps-helix/src/lib/components/switch/switch.component.ts","../../../projects/ps-helix/src/lib/components/switch/switch.component.html","../../../projects/ps-helix/src/lib/components/tab-bar/tab-bar.component.ts","../../../projects/ps-helix/src/lib/components/tab-bar/tab-bar.component.html","../../../projects/ps-helix/src/lib/a11y/live-announcer.service.ts","../../../projects/ps-helix/src/lib/a11y/portal.service.ts","../../../projects/ps-helix/src/lib/a11y/overlay-position.service.ts","../../../projects/ps-helix/src/lib/components/input/input.component.ts","../../../projects/ps-helix/src/lib/components/input/input.component.html","../../../projects/ps-helix/src/lib/components/table/table.component.ts","../../../projects/ps-helix/src/lib/components/table/table.component.html","../../../projects/ps-helix/src/lib/components/tabs/tabs.token.ts","../../../projects/ps-helix/src/lib/components/tabs/tab.component.ts","../../../projects/ps-helix/src/lib/components/tabs/tabs.component.ts","../../../projects/ps-helix/src/lib/components/tabs/tabs.component.html","../../../projects/ps-helix/src/lib/components/tag/tag.component.ts","../../../projects/ps-helix/src/lib/components/tag/tag.component.html","../../../projects/ps-helix/src/lib/components/textarea/textarea.types.ts","../../../projects/ps-helix/src/lib/components/textarea/textarea.tokens.ts","../../../projects/ps-helix/src/lib/components/toast/toast.tokens.ts","../../../projects/ps-helix/src/lib/components/tooltip/tooltip.component.ts","../../../projects/ps-helix/src/lib/components/tooltip/tooltip.component.html","../../../projects/ps-helix/src/lib/provide-helix.ts","../../../projects/ps-helix/src/lib/i18n/french.ts","../../../projects/ps-helix/src/lib/types/semantic.types.ts","../../../projects/ps-helix/src/lib/components/alert/alert.component.ts","../../../projects/ps-helix/src/lib/components/alert/alert.component.html","../../../projects/ps-helix/src/lib/components/avatar/avatar.component.ts","../../../projects/ps-helix/src/lib/components/avatar/avatar.component.html","../../../projects/ps-helix/src/lib/components/badge/badge.component.ts","../../../projects/ps-helix/src/lib/components/badge/badge.component.html","../../../projects/ps-helix/src/lib/a11y/viewport.service.ts","../../../projects/ps-helix/src/lib/components/card/card.component.ts","../../../projects/ps-helix/src/lib/components/card/card.component.html","../../../projects/ps-helix/src/lib/components/stat-card/stat-card.component.ts","../../../projects/ps-helix/src/lib/components/stat-card/stat-card.component.html","../../../projects/ps-helix/src/lib/components/horizontal-card/horizontal-card.component.ts","../../../projects/ps-helix/src/lib/components/horizontal-card/horizontal-card.component.html","../../../projects/ps-helix/src/lib/components/info-card/info-card.component.ts","../../../projects/ps-helix/src/lib/components/info-card/info-card.component.html","../../../projects/ps-helix/src/lib/components/collapse/collapse.component.ts","../../../projects/ps-helix/src/lib/components/collapse/collapse.component.html","../../../projects/ps-helix/src/lib/a11y/click-outside.directive.ts","../../../projects/ps-helix/src/lib/components/dropdown/dropdown.component.ts","../../../projects/ps-helix/src/lib/components/dropdown/dropdown.component.html","../../../projects/ps-helix/src/lib/components/textarea/textarea.component.ts","../../../projects/ps-helix/src/lib/components/textarea/textarea.component.html","../../../projects/ps-helix/src/lib/components/menu/menu.component.ts","../../../projects/ps-helix/src/lib/components/menu/menu.component.html","../../../projects/ps-helix/src/lib/components/select/select.component.ts","../../../projects/ps-helix/src/lib/components/select/select.component.html","../../../projects/ps-helix/src/lib/components/toast/toast.service.ts","../../../projects/ps-helix/src/lib/components/toast/toast.component.ts","../../../projects/ps-helix/src/lib/components/toast/toast.component.html","../../../projects/ps-helix/src/lib/services/scroll.service.ts","../../../projects/ps-helix/src/lib/a11y/viewport.testing.ts","../../../projects/ps-helix/src/public-api.ts","../../../projects/ps-helix/src/ps-helix.ts"],"sourcesContent":["export interface Rgb {\r\n r: number;\r\n g: number;\r\n b: number;\r\n}\r\n\r\nexport interface Oklch {\r\n l: number;\r\n c: number;\r\n h: number;\r\n}\r\n\r\nexport function hexToRgb(hex: string): Rgb | null {\r\n let value = hex.replace(/^#/, '').trim();\r\n if (value.length === 3) {\r\n value = value.split('').map((char) => char + char).join('');\r\n }\r\n if (value.length !== 6 || !/^[0-9a-fA-F]{6}$/.test(value)) {\r\n return null;\r\n }\r\n return {\r\n r: parseInt(value.substring(0, 2), 16),\r\n g: parseInt(value.substring(2, 4), 16),\r\n b: parseInt(value.substring(4, 6), 16),\r\n };\r\n}\r\n\r\nexport function rgbToHex({ r, g, b }: Rgb): string {\r\n const toHex = (channel: number) => {\r\n const clamped = Math.max(0, Math.min(255, Math.round(channel)));\r\n return clamped.toString(16).padStart(2, '0');\r\n };\r\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\r\n}\r\n\r\nfunction srgbToLinear(channel: number): number {\r\n const normalized = channel / 255;\r\n return normalized <= 0.04045\r\n ? normalized / 12.92\r\n : Math.pow((normalized + 0.055) / 1.055, 2.4);\r\n}\r\n\r\nfunction linearToSrgb(value: number): number {\r\n const clamped = Math.max(0, Math.min(1, value));\r\n const scaled = clamped <= 0.0031308\r\n ? 12.92 * clamped\r\n : 1.055 * Math.pow(clamped, 1 / 2.4) - 0.055;\r\n // Rounded to the channel a screen can actually show.\r\n //\r\n // It used to return a float, so `ensureContrast` searched for a lightness whose *unrounded*\r\n // colour hit the target, and the hex written to the stylesheet — rounded — could then miss\r\n // it. With an AAA target and a pale brand blue the result was 6.98:1, announced as 7.\r\n return Math.round(scaled * 255);\r\n}\r\n\r\nexport function relativeLuminance(rgb: Rgb): number {\r\n const r = srgbToLinear(rgb.r);\r\n const g = srgbToLinear(rgb.g);\r\n const b = srgbToLinear(rgb.b);\r\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\r\n}\r\n\r\nexport function contrastRatio(a: Rgb, b: Rgb): number {\r\n const la = relativeLuminance(a);\r\n const lb = relativeLuminance(b);\r\n const lighter = Math.max(la, lb);\r\n const darker = Math.min(la, lb);\r\n return (lighter + 0.05) / (darker + 0.05);\r\n}\r\n\r\nexport function bestTextColor(background: Rgb): string {\r\n const white = { r: 255, g: 255, b: 255 };\r\n const black = { r: 0, g: 0, b: 0 };\r\n return contrastRatio(background, white) >= contrastRatio(background, black)\r\n ? '#FFFFFF'\r\n : '#000000';\r\n}\r\n\r\nfunction rgbToLinear(rgb: Rgb): [number, number, number] {\r\n return [srgbToLinear(rgb.r), srgbToLinear(rgb.g), srgbToLinear(rgb.b)];\r\n}\r\n\r\nfunction linearToRgb(lin: [number, number, number]): Rgb {\r\n return {\r\n r: linearToSrgb(lin[0]),\r\n g: linearToSrgb(lin[1]),\r\n b: linearToSrgb(lin[2]),\r\n };\r\n}\r\n\r\nexport function rgbToOklch(rgb: Rgb): Oklch {\r\n const [r, g, b] = rgbToLinear(rgb);\r\n\r\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\r\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\r\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\r\n\r\n const l_ = Math.cbrt(l);\r\n const m_ = Math.cbrt(m);\r\n const s_ = Math.cbrt(s);\r\n\r\n const L = 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_;\r\n const a = 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_;\r\n const bLab = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_;\r\n\r\n const C = Math.sqrt(a * a + bLab * bLab);\r\n let H = (Math.atan2(bLab, a) * 180) / Math.PI;\r\n if (H < 0) H += 360;\r\n\r\n return { l: L, c: C, h: H };\r\n}\r\n\r\nexport function oklchToRgb({ l, c, h }: Oklch): Rgb {\r\n const hRad = (h * Math.PI) / 180;\r\n const a = c * Math.cos(hRad);\r\n const bLab = c * Math.sin(hRad);\r\n\r\n const l_ = l + 0.3963377774 * a + 0.2158037573 * bLab;\r\n const m_ = l - 0.1055613458 * a - 0.0638541728 * bLab;\r\n const s_ = l - 0.0894841775 * a - 1.2914855480 * bLab;\r\n\r\n const lCube = l_ ** 3;\r\n const mCube = m_ ** 3;\r\n const sCube = s_ ** 3;\r\n\r\n const r = 4.0767416621 * lCube - 3.3077115913 * mCube + 0.2309699292 * sCube;\r\n const g = -1.2684380046 * lCube + 2.6097574011 * mCube - 0.3413193965 * sCube;\r\n const b = -0.0041960863 * lCube - 0.7034186147 * mCube + 1.7076147010 * sCube;\r\n\r\n return linearToRgb([r, g, b]);\r\n}\r\n\r\nexport function withLightness(color: Rgb, lightness: number): Rgb {\r\n const oklch = rgbToOklch(color);\r\n return oklchToRgb({ l: Math.max(0, Math.min(1, lightness)), c: oklch.c, h: oklch.h });\r\n}\r\n\r\nexport function shiftLightness(color: Rgb, delta: number): Rgb {\r\n const oklch = rgbToOklch(color);\r\n return oklchToRgb({\r\n l: Math.max(0, Math.min(1, oklch.l + delta)),\r\n c: oklch.c,\r\n h: oklch.h,\r\n });\r\n}\r\n","import {\r\n Rgb,\r\n contrastRatio,\r\n relativeLuminance,\r\n rgbToOklch,\r\n oklchToRgb,\r\n} from './color.utils';\r\n\r\nexport const WCAG_AA_NORMAL = 4.5;\r\nexport const WCAG_AA_LARGE = 3;\r\nexport const WCAG_AAA_NORMAL = 7;\r\nexport const WCAG_AAA_LARGE = 4.5;\r\n\r\nexport type ContrastTarget = 'AA' | 'AAA';\r\n\r\nexport function targetRatio(target: ContrastTarget): number {\r\n return target === 'AAA' ? WCAG_AAA_NORMAL : WCAG_AA_NORMAL;\r\n}\r\n\r\n/**\r\n * Adjusts a color in OKLCH lightness until the contrast ratio against the\r\n * background meets or exceeds the target. Direction is chosen based on the\r\n * background (darken on light backgrounds, lighten on dark backgrounds).\r\n * Hue and chroma are preserved as much as possible.\r\n */\r\nexport function ensureContrast(color: Rgb, background: Rgb, ratio: number): Rgb {\r\n if (contrastRatio(color, background) >= ratio) {\r\n return color;\r\n }\r\n\r\n const backgroundLuminance = relativeLuminance(background);\r\n const { c, h } = rgbToOklch(color);\r\n const goLighter = backgroundLuminance < 0.5;\r\n\r\n let low = 0;\r\n let high = 1;\r\n let best: Rgb = color;\r\n let bestRatio = contrastRatio(color, background);\r\n\r\n for (let i = 0; i < 24; i++) {\r\n const mid = (low + high) / 2;\r\n const candidate = oklchToRgb({ l: mid, c, h });\r\n const candidateRatio = contrastRatio(candidate, background);\r\n\r\n if (candidateRatio >= ratio) {\r\n best = candidate;\r\n bestRatio = candidateRatio;\r\n if (goLighter) {\r\n high = mid;\r\n } else {\r\n low = mid;\r\n }\r\n } else {\r\n if (candidateRatio > bestRatio) {\r\n best = candidate;\r\n bestRatio = candidateRatio;\r\n }\r\n if (goLighter) {\r\n low = mid;\r\n } else {\r\n high = mid;\r\n }\r\n }\r\n }\r\n\r\n if (bestRatio < ratio) {\r\n const chromaReduced = oklchToRgb({\r\n l: goLighter ? 0.98 : 0.08,\r\n c: Math.min(c, 0.05),\r\n h,\r\n });\r\n if (contrastRatio(chromaReduced, background) > bestRatio) {\r\n return chromaReduced;\r\n }\r\n }\r\n\r\n return best;\r\n}\r\n","import {\r\n Injectable,\r\n InjectionToken,\r\n PLATFORM_ID,\r\n afterNextRender,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { Theme } from './types/theme.types';\r\nimport {\r\n Rgb,\r\n bestTextColor,\r\n hexToRgb,\r\n rgbToHex,\r\n rgbToOklch,\r\n oklchToRgb,\r\n contrastRatio,\r\n} from './utils/color.utils';\r\nimport {\r\n ContrastTarget,\r\n ensureContrast,\r\n targetRatio,\r\n WCAG_AA_NORMAL,\r\n} from './utils/wcag.utils';\r\n\r\nconst THEME_STORAGE_KEY = 'helix-theme-preference';\r\n\r\n/**\r\n * Contract for applications that want to override brand colors.\r\n * Kept generic (customer) so it can fit any vertical.\r\n */\r\nexport interface CustomerContextService {\r\n primaryColor(): string;\r\n secondaryColor(): string;\r\n}\r\n\r\nexport const CUSTOMER_CONTEXT_SERVICE = new InjectionToken<CustomerContextService>(\r\n 'CUSTOMER_CONTEXT_SERVICE',\r\n);\r\n\r\nexport interface PshThemeOptions {\r\n targetContrast?: ContrastTarget;\r\n}\r\n\r\nexport const PSH_THEME_OPTIONS = new InjectionToken<PshThemeOptions>('PSH_THEME_OPTIONS');\r\n\r\ninterface DerivedPalette {\r\n base: string;\r\n light: string;\r\n lighter: string;\r\n dark: string;\r\n darker: string;\r\n text: string;\r\n rgb: string;\r\n source: string;\r\n}\r\n\r\nconst LIGHT_BACKGROUND: Rgb = { r: 255, g: 255, b: 255 };\r\nconst DARK_BACKGROUND: Rgb = { r: 20, g: 20, b: 25 };\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ThemeService {\r\n private customerContext = inject(CUSTOMER_CONTEXT_SERVICE, { optional: true });\r\n private options = inject(PSH_THEME_OPTIONS, { optional: true });\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n private readonly isDarkThemeSignal = signal<boolean>(false);\r\n private readonly themeNameSignal = signal<Theme>('light');\r\n private readonly lastChangeSignal = signal<Date>(new Date());\r\n\r\n readonly isDarkTheme = computed(() => this.isDarkThemeSignal());\r\n readonly themeName = computed(() => this.themeNameSignal());\r\n\r\n readonly themeInfo = computed(() => ({\r\n isDark: this.isDarkTheme(),\r\n name: this.themeName(),\r\n lastChange: this.lastChangeSignal(),\r\n }));\r\n\r\n constructor() {\r\n this.initializeTheme();\r\n afterNextRender(() => this.applyCustomerTheme());\r\n }\r\n\r\n setDarkTheme(isDark: boolean): void {\r\n if (this.isBrowser) {\r\n this.document.documentElement.setAttribute('data-theme', isDark ? 'dark' : 'light');\r\n }\r\n this.isDarkThemeSignal.set(isDark);\r\n this.themeNameSignal.set(isDark ? 'dark' : 'light');\r\n this.lastChangeSignal.set(new Date());\r\n this.applyCustomerTheme();\r\n }\r\n\r\n toggleTheme(): void {\r\n this.setDarkTheme(!this.isDarkThemeSignal());\r\n }\r\n\r\n updateTheme(name: Theme): void {\r\n this.themeNameSignal.set(name);\r\n this.isDarkThemeSignal.set(name === 'dark');\r\n this.lastChangeSignal.set(new Date());\r\n this.saveThemePreference(name);\r\n this.applyCustomerTheme();\r\n }\r\n\r\n /**\r\n * Applies the customer brand colors to CSS variables, automatically\r\n * deriving variants in OKLCH and enforcing WCAG contrast against the\r\n * current theme background. If the provided color is not accessible\r\n * as a UI color, it is silently adjusted so UI components stay readable.\r\n * The original brand color is preserved in --customer-*-color-source\r\n * for purely decorative use (logos, marketing surfaces).\r\n */\r\n applyCustomerTheme(): void {\r\n if (!this.isBrowser || !this.customerContext) {\r\n return;\r\n }\r\n\r\n const primary = this.customerContext.primaryColor();\r\n const secondary = this.customerContext.secondaryColor();\r\n\r\n this.applyPalette('primary', primary);\r\n this.applyPalette('secondary', secondary);\r\n }\r\n\r\n private applyPalette(kind: 'primary' | 'secondary', color: string | undefined): void {\r\n if (!color) return;\r\n const source = hexToRgb(color);\r\n if (!source) return;\r\n\r\n const palette = this.derivePalette(source);\r\n const root = this.document.documentElement.style;\r\n const prefix = `--customer-${kind}-color`;\r\n\r\n root.setProperty(prefix, palette.base);\r\n root.setProperty(`${prefix}-source`, palette.source);\r\n root.setProperty(`${prefix}-light`, palette.light);\r\n root.setProperty(`${prefix}-lighter`, palette.lighter);\r\n root.setProperty(`${prefix}-dark`, palette.dark);\r\n root.setProperty(`${prefix}-darker`, palette.darker);\r\n root.setProperty(`${prefix}-text`, palette.text);\r\n root.setProperty(`${prefix}-rgb`, palette.rgb);\r\n }\r\n\r\n private derivePalette(source: Rgb): DerivedPalette {\r\n const isDark = this.isDarkThemeSignal();\r\n const background = isDark ? DARK_BACKGROUND : LIGHT_BACKGROUND;\r\n const ratio = targetRatio(this.options?.targetContrast ?? 'AA');\r\n\r\n const accessible = ensureContrast(source, background, ratio);\r\n\r\n const { l, c, h } = rgbToOklch(accessible);\r\n const variants = isDark\r\n ? {\r\n light: clampL(l + 0.06),\r\n lighter: clampL(l + 0.14),\r\n dark: clampL(l - 0.06),\r\n darker: clampL(l - 0.14),\r\n }\r\n : {\r\n light: clampL(l + 0.08),\r\n lighter: clampL(l + 0.18),\r\n dark: clampL(l - 0.08),\r\n darker: clampL(l - 0.16),\r\n };\r\n\r\n const lightColor = oklchToRgb({ l: variants.light, c, h });\r\n const lighterColor = oklchToRgb({ l: variants.lighter, c, h });\r\n const darkColor = this.ensureIfInteractive(\r\n oklchToRgb({ l: variants.dark, c, h }),\r\n background,\r\n Math.min(ratio, WCAG_AA_NORMAL),\r\n );\r\n const darkerColor = this.ensureIfInteractive(\r\n oklchToRgb({ l: variants.darker, c, h }),\r\n background,\r\n Math.min(ratio, WCAG_AA_NORMAL),\r\n );\r\n\r\n const text = bestTextColor(accessible);\r\n const rgb = `${Math.round(accessible.r)}, ${Math.round(accessible.g)}, ${Math.round(accessible.b)}`;\r\n\r\n return {\r\n base: rgbToHex(accessible),\r\n source: rgbToHex(source),\r\n light: rgbToHex(lightColor),\r\n lighter: rgbToHex(lighterColor),\r\n dark: rgbToHex(darkColor),\r\n darker: rgbToHex(darkerColor),\r\n text,\r\n rgb,\r\n };\r\n }\r\n\r\n private ensureIfInteractive(color: Rgb, background: Rgb, ratio: number): Rgb {\r\n return contrastRatio(color, background) >= ratio\r\n ? color\r\n : ensureContrast(color, background, ratio);\r\n }\r\n\r\n private initializeTheme(): void {\r\n let savedTheme: Theme | null = null;\r\n if (this.isBrowser) {\r\n try {\r\n savedTheme = this.document.defaultView?.localStorage.getItem(THEME_STORAGE_KEY) as Theme;\r\n } catch {\r\n savedTheme = null;\r\n }\r\n }\r\n const isValid = savedTheme === 'light' || savedTheme === 'dark';\r\n // No stored preference → honour the OS \"prefers-color-scheme\" setting.\r\n const initial: Theme = isValid ? (savedTheme as Theme) : this.prefersDarkScheme() ? 'dark' : 'light';\r\n this.setDarkTheme(initial === 'dark');\r\n }\r\n\r\n /** True when the OS/browser requests a dark colour scheme. */\r\n private prefersDarkScheme(): boolean {\r\n const view = this.document.defaultView;\r\n return this.isBrowser && !!view?.matchMedia?.('(prefers-color-scheme: dark)').matches;\r\n }\r\n\r\n private saveThemePreference(theme: Theme): void {\r\n if (!this.isBrowser) return;\r\n try {\r\n this.document.defaultView?.localStorage.setItem(THEME_STORAGE_KEY, theme);\r\n } catch {\r\n /* storage unavailable, preference not persisted */\r\n }\r\n }\r\n}\r\n\r\nfunction clampL(value: number): number {\r\n return Math.max(0, Math.min(1, value));\r\n}\r\n","/**\r\n * Application-wide defaults for `psh-alert`.\r\n *\r\n * Provide it to set a default once for every psh-alert in the application:\r\n *\r\n * provideHelix({ components: { alert: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { AlertConfig } from './alert.types';\r\n\r\nconst ALERT_DEFAULTS = {\r\n color: 'info',\r\n iconPosition: 'left',\r\n closable: false,\r\n size: 'medium',\r\n showIcon: true,\r\n labels: { dismiss: 'Dismiss alert' },\r\n} satisfies Partial<AlertConfig>;\r\n\r\nexport const ALERT_CONFIG = new InjectionToken<Partial<AlertConfig>>('ALERT_CONFIG', {\r\n factory: () => ALERT_DEFAULTS,\r\n});\r\n","/**\r\n * Application-wide defaults for `psh-avatar`.\r\n *\r\n * Provide it to set a default once for every psh-avatar in the application:\r\n *\r\n * provideHelix({ components: { avatar: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { AvatarConfig } from './avatar.types';\r\n\r\nconst AVATAR_DEFAULTS = {\r\n size: 'medium',\r\n shape: 'circle',\r\n alt: 'User avatar',\r\n icon: 'user',\r\n} satisfies Partial<AvatarConfig>;\r\n\r\nexport const AVATAR_CONFIG = new InjectionToken<Partial<AvatarConfig>>('AVATAR_CONFIG', {\r\n factory: () => AVATAR_DEFAULTS,\r\n});\r\n","/**\r\n * Application-wide defaults for `psh-badge`.\r\n *\r\n * Provide it to set a default once for every psh-badge in the application:\r\n *\r\n * provideHelix({ components: { badge: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { BadgeConfig } from './badge.types';\r\n\r\nconst BADGE_DEFAULTS = {\r\n color: 'primary',\r\n size: 'medium',\r\n displayType: 'text',\r\n position: 'top-right',\r\n max: 99,\r\n showZero: false,\r\n overlap: false,\r\n disabled: false,\r\n} satisfies Partial<BadgeConfig>;\r\n\r\nexport const BADGE_CONFIG = new InjectionToken<Partial<BadgeConfig>>('BADGE_CONFIG', {\r\n factory: () => BADGE_DEFAULTS,\r\n});\r\n","/**\r\n * Application-wide defaults for `psh-button`.\r\n *\r\n * Provide it to set a default once for every psh-button in the application:\r\n *\r\n * provideHelix({ components: { button: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { ButtonConfig } from './button.types';\r\n\r\nconst BUTTON_DEFAULTS = {\r\n appearance: 'solid',\r\n color: 'primary',\r\n size: 'medium',\r\n type: 'button',\r\n iconPosition: 'left',\r\n fullWidth: false,\r\n loadingText: 'Loading...',\r\n disabledText: 'This action is currently unavailable',\r\n} satisfies Partial<ButtonConfig>;\r\n\r\nexport const BUTTON_CONFIG = new InjectionToken<Partial<ButtonConfig>>('BUTTON_CONFIG', {\r\n factory: () => BUTTON_DEFAULTS,\r\n});\r\n","/**\r\n * Application-wide defaults for `psh-card`.\r\n *\r\n * Provide it to set a default once for every psh-card in the application:\r\n *\r\n * provideHelix({ components: { card: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { CardConfig } from './card.types';\r\n\r\nconst CARD_DEFAULTS = {\r\n appearance: 'flat',\r\n color: 'neutral',\r\n density: 'normal',\r\n hoverable: false,\r\n interactive: false,\r\n bodyPadding: true,\r\n showHeaderDivider: true,\r\n showFooterDivider: true,\r\n showActionsDivider: true,\r\n actionsAlignment: 'right',\r\n} satisfies Partial<CardConfig>;\r\n\r\nexport const CARD_CONFIG = new InjectionToken<Partial<CardConfig>>('CARD_CONFIG', {\r\n factory: () => CARD_DEFAULTS,\r\n});\r\n","/**\r\n * One deterministic id generator for the whole library.\r\n *\r\n * Five strategies coexisted before 7.0.0, and three of them were not safe:\r\n *\r\n * `Math.random()` select, modal, tooltip — a different id on the server and on the\r\n * client, so the ids baked into the SSR markup never matched the ones\r\n * the browser generated. Every `aria-describedby`,\r\n * `aria-labelledby` and `<label for>` they fed pointed at nothing\r\n * after hydration.\r\n * `crypto.randomUUID()` switch, toast — same mismatch, plus it is simply **undefined in a\r\n * non-secure context**: over plain http, a switch threw on\r\n * construction.\r\n * a module counter input, textarea, checkbox, radio, collapse, pagination — correct,\r\n * and now the only one.\r\n *\r\n * A counter is deterministic because server and client render the same components in the\r\n * same order, so the nth component gets the same id in both passes. That is the whole\r\n * requirement; uniqueness across a page follows from it.\r\n */\r\n\r\nlet counter = 0;\r\n\r\n/**\r\n * Returns a process-unique, render-order-stable DOM id.\r\n *\r\n * @param prefix Short component tag, e.g. `'input'`, `'modal'`. Namespaced for you.\r\n *\r\n * @example\r\n * private readonly id = pshUniqueId('select'); // 'psh-select-1', 'psh-select-2', …\r\n */\r\nexport function pshUniqueId(prefix: string): string {\r\n return `psh-${prefix}-${++counter}`;\r\n}\r\n\r\n/**\r\n * Resets the counter. Test-only: two suites that both assert on generated ids are otherwise\r\n * order-dependent on each other.\r\n *\r\n * @internal\r\n */\r\nexport function resetPshUniqueIdForTesting(): void {\r\n counter = 0;\r\n}\r\n","import { ValidationErrors } from '@angular/forms';\r\n\r\n/**\r\n * The `required` half of the form contract that was missing.\r\n *\r\n * Before 7.0.0, `required` on a ps-helix control drew an asterisk and set `aria-required`,\r\n * and that was all: `NG_VALIDATORS` appeared nowhere in the library. A form built from\r\n * `<psh-input required>` fields was valid while every one of them was empty, so\r\n * `form.invalid` never guarded anything and the submit button stayed enabled.\r\n *\r\n * The controls provide `NG_VALIDATORS` now. The error key is Angular's own `required`, so it\r\n * reads the same as `Validators.required` and a consumer who declared both gets one error,\r\n * not two.\r\n *\r\n * **This makes forms that were accidentally valid become invalid.** That is the point, and it\r\n * is the reason this waited for a major.\r\n */\r\nexport function pshRequiredError(isRequired: boolean, isEmpty: boolean): ValidationErrors | null {\r\n return isRequired && isEmpty ? { required: true } : null;\r\n}\r\n\r\n/**\r\n * Whether a control value counts as \"nothing filled in\".\r\n *\r\n * `false` is deliberately **not** empty for a text value but **is** for a checkbox, which is\r\n * why each control passes its own emptiness rather than sharing one rule: an unticked\r\n * required checkbox is unfilled, a `0` in a required number field is not.\r\n */\r\nexport function pshIsEmptyValue(value: unknown): boolean {\r\n if (value === null || value === undefined) return true;\r\n if (typeof value === 'string') return value.trim().length === 0;\r\n if (Array.isArray(value)) return value.length === 0;\r\n return false;\r\n}\r\n","/**\r\n * Joins the ids a component computes for itself with the ones a consumer supplied.\r\n *\r\n * `aria-describedby` takes a **list**, and that is the whole point here. A control that\r\n * already points at its own error message must not lose it because the caller added a hint of\r\n * their own, and a caller who adds one must not silently replace the error. Before 7.0.0 the\r\n * library offered no `ariaDescribedBy` input at all — zero across all 33 classes — so the only\r\n * way to attach extra guidance was to set the attribute from outside and overwrite whatever\r\n * the component had put there.\r\n *\r\n * Returns `null` rather than an empty string, because `aria-describedby=\"\"` is a reference to\r\n * nothing and some screen readers announce it as such.\r\n */\r\nexport function pshJoinAriaIds(\r\n ...ids: readonly (string | null | undefined)[]\r\n): string | null {\r\n const seen = new Set<string>();\r\n\r\n for (const entry of ids) {\r\n if (!entry) continue;\r\n for (const id of entry.split(/\\s+/)) {\r\n if (id) seen.add(id);\r\n }\r\n }\r\n\r\n return seen.size > 0 ? [...seen].join(' ') : null;\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n InjectionToken,\r\n input,\r\n isDevMode,\r\n model,\r\n output,\r\n viewChild,\r\n effect\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\r\nimport type { FormCheckboxControl } from '@angular/forms/signals';\r\nimport { CheckboxSize, CheckboxConfig, CheckboxLabelPosition } from './checkbox.types';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\nimport { pshRequiredError } from '../../utils/required-validator';\r\nimport { pshJoinAriaIds } from '../../utils/aria';\r\n\r\nconst CHECKBOX_DEFAULTS = {\r\n checked: false,\r\n disabled: false,\r\n required: false,\r\n indeterminate: false,\r\n size: 'medium',\r\n labelPosition: 'right',\r\n label: ''\r\n} satisfies Partial<CheckboxConfig>;\r\n\r\nexport const CHECKBOX_CONFIG = new InjectionToken<Partial<CheckboxConfig>>('CHECKBOX_CONFIG', {\r\n factory: () => CHECKBOX_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-checkbox',\r\n imports: [],\r\n templateUrl: './checkbox.component.html',\r\n styleUrls: ['./checkbox.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: NG_VALIDATORS, useExisting: PshCheckboxComponent, multi: true },{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshCheckboxComponent,\r\n multi: true\r\n }],\r\n host: {\r\n '[class.psh-checkbox-disabled]': 'disabled()',\r\n '[class.psh-checkbox-error]': '!!error()',\r\n '[class.psh-checkbox-success]': '!!success()',\r\n '[class.psh-checkbox-small]': 'size() === \"small\"',\r\n '[class.psh-checkbox-large]': 'size() === \"large\"',\r\n '[class.psh-checkbox-checked]': 'checked() && !indeterminate()',\r\n '[class.psh-checkbox-indeterminate]': 'indeterminate()',\r\n '[attr.data-state]': 'state()',\r\n '[attr.aria-checked]': 'ariaChecked()'\r\n }\r\n})\r\nexport class PshCheckboxComponent\r\n implements ControlValueAccessor, FormCheckboxControl, AfterViewInit, Validator\r\n{\r\n private readonly config = inject(CHECKBOX_CONFIG);\r\n private readonly checkboxInput = viewChild<ElementRef<HTMLInputElement>>('checkboxInput');\r\n /** Holds the `label` input or the projected content — whichever provides the visible label. */\r\n private readonly labelSlot = viewChild<ElementRef<HTMLElement>>('labelSlot');\r\n\r\n protected readonly uniqueId = pshUniqueId('checkbox');\r\n\r\n private onChange = (_: boolean) => {};\r\n private onTouched = () => {};\r\n private onValidatorChange: () => void = () => {};\r\n\r\n readonly checked = model(this.config.checked ?? false);\r\n readonly disabled = model(this.config.disabled ?? false);\r\n readonly indeterminate = model(this.config.indeterminate ?? false);\r\n readonly touched = model(false);\r\n/**\r\n * Emitted when the user finishes interacting with the control.\r\n *\r\n * Part of `FormUiControl`: the `Field` directive listens to **this**, not to\r\n * `touchedChange`, to mark the bound field as touched.\r\n */\r\n readonly touch = output<void>();\r\n\r\n readonly required = input(this.config.required ?? false);\r\n readonly label = input(this.config.label ?? '');\r\n readonly error = input<string | null | undefined>(this.config.error);\r\n readonly success = input<string | null | undefined>(this.config.success);\r\n /** Guidance shown when there is neither an error nor a success message. */\r\n readonly hint = input<string | null | undefined>(null);\r\n\r\n /**\r\n * Extra ids for `aria-describedby`. **Merged** with the control's own — the id of its error,\r\n * success or hint message — never replacing them.\r\n */\r\n readonly ariaDescribedBy = input<string>();\r\n\r\n /**\r\n * Ids of the elements that name this control, for the cases a visible `<label>` cannot\r\n * cover. Merged with anything the control already points at.\r\n */\r\n readonly ariaLabelledBy = input<string>();\r\n readonly ariaLabel = input<string | undefined>(this.config.ariaLabel);\r\n readonly size = input<CheckboxSize>(this.config.size ?? 'medium');\r\n readonly labelPosition = input<CheckboxLabelPosition>(this.config.labelPosition ?? 'right');\r\n\r\n readonly ariaChecked = computed(() => this.indeterminate() ? 'mixed' : (this.checked() ? 'true' : 'false'));\r\n readonly computedAriaLabel = computed(() => this.ariaLabel() || undefined);\r\n\r\n // Error, success and hint are mutually exclusive in the template (@if/@else if), so\r\n // aria-describedby references whichever message is actually rendered — in the same order.\r\n // Pointing at an id the template did not render leaves a dangling reference that no test\r\n // in this repository would catch.\r\n readonly describedBy = computed(() => {\r\n const own = this.error()\r\n ? `${this.uniqueId}-error`\r\n : this.success()\r\n ? `${this.uniqueId}-success`\r\n : this.hint()\r\n ? `${this.uniqueId}-hint`\r\n : null;\r\n return pshJoinAriaIds(own, this.ariaDescribedBy());\r\n });\r\n\r\n readonly state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.indeterminate()) return 'indeterminate';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n return this.checked() ? 'checked' : 'unchecked';\r\n });\r\n\r\n ngAfterViewInit(): void {\r\n if (!isDevMode()) return;\r\n\r\n // Read the rendered label slot rather than the `label` input alone: a projected\r\n // label (`<psh-checkbox>Accept terms</psh-checkbox>`) is just as accessible, and\r\n // `contentChild` cannot see a bare text node. Checked once, after the first render.\r\n const hasVisibleLabel = !!this.labelSlot()?.nativeElement.textContent?.trim();\r\n if (!hasVisibleLabel && !this.ariaLabel()) {\r\n console.warn(\r\n '[psh-checkbox] No accessible label provided. Please use label input, ariaLabel input, or projected content.'\r\n );\r\n }\r\n }\r\n\r\n protected toggle(): void {\r\n if (!this.disabled()) {\r\n const newValue = !this.checked();\r\n this.checked.set(newValue);\r\n this.indeterminate.set(false);\r\n this.onChange(newValue);\r\n this.markTouched();\r\n }\r\n }\r\n\r\n /**\r\n * Blur, not toggle. Tabbing through a required checkbox without ticking it still means the\r\n * user has been there, which is what a field needs to know before showing \"required\".\r\n */\r\n protected handleBlur(): void {\r\n this.markTouched();\r\n }\r\n\r\n private markTouched(): void {\r\n this.onTouched();\r\n this.touched.set(true);\r\n this.touch.emit();\r\n }\r\n\r\n protected handleKeydown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n if (event.key === ' ' || event.key === 'Spacebar' || event.key === 'Enter') {\r\n event.preventDefault();\r\n this.toggle();\r\n }\r\n }\r\n\r\n constructor() {\r\n // A value change revalidates by itself; a change to `required` does not — Angular has\r\n // no reason to suspect the validator's answer moved. This is what the callback is for.\r\n effect(() => {\r\n this.required();\r\n this.onValidatorChange();\r\n });\r\n }\r\n\r\n writeValue(value: unknown): void { this.checked.set(!!value); }\r\n registerOnChange(fn: (v: boolean) => void): void { this.onChange = fn; }\r\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\r\n setDisabledState(isDisabled: boolean): void { this.disabled.set(isDisabled); }\r\n\r\n focus(): void { this.checkboxInput()?.nativeElement.focus(); }\r\n blur(): void { this.checkboxInput()?.nativeElement.blur(); }\r\n\r\n /**\r\n * Makes `required` a real constraint rather than an asterisk.\r\n *\r\n * Re-run whenever `required` or the value changes: `registerOnValidatorChange` gives us\r\n * the callback that tells Angular to revalidate, and an effect fires it.\r\n */\r\n validate(): ValidationErrors | null {\r\n return pshRequiredError(this.required(), !this.checked());\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.onValidatorChange = fn;\r\n }\r\n\r\n}","<div class=\"psh-checkbox-container\">\r\n <label class=\"psh-checkbox-label\" [class.psh-label-left]=\"labelPosition() === 'left'\">\r\n <input\r\n #checkboxInput\r\n type=\"checkbox\"\r\n class=\"psh-checkbox-input\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"disabled()\"\r\n [required]=\"required()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-checked]=\"ariaChecked()\"\r\n [attr.aria-required]=\"required() || null\"\r\n [attr.aria-invalid]=\"error() ? 'true' : null\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n (change)=\"toggle()\"\r\n (blur)=\"handleBlur()\"\r\n (keydown)=\"handleKeydown($event)\"\r\n />\r\n \r\n <span class=\"psh-checkbox-control\">\r\n @if (checked() && !indeterminate()) {\r\n <i class=\"ph ph-check\" aria-hidden=\"true\"></i>\r\n }\r\n @if (indeterminate()) {\r\n <i class=\"ph ph-minus\" aria-hidden=\"true\"></i>\r\n }\r\n </span>\r\n\r\n <span class=\"psh-checkbox-text\" #labelSlot>\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <ng-content></ng-content>\r\n }\r\n </span>\r\n </label>\r\n\r\n @if (error()) {\r\n <div [id]=\"uniqueId + '-error'\" class=\"psh-checkbox-message psh-error\" role=\"alert\">\r\n {{ error() }}\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"uniqueId + '-success'\" class=\"psh-checkbox-message psh-success\" role=\"status\">\r\n {{ success() }}\r\n </div>\r\n } @else if (hint()) {\r\n <div [id]=\"uniqueId + '-hint'\" class=\"psh-checkbox-message psh-hint\">\r\n {{ hint() }}\r\n </div>\r\n }\r\n</div>","/**\r\n * Application-wide defaults for `psh-collapse`.\r\n *\r\n * Provide it to set a default once for every psh-collapse in the application:\r\n *\r\n * provideHelix({ components: { collapse: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { CollapseConfig } from './collapse.types';\r\n\r\nconst COLLAPSE_DEFAULTS = {\r\n appearance: 'flat',\r\n size: 'medium',\r\n icon: 'caret-down',\r\n maxHeight: 'auto',\r\n defaultHeaderText: 'Collapsible section',\r\n disableAnimation: false,\r\n} satisfies Partial<CollapseConfig>;\r\n\r\nexport const COLLAPSE_CONFIG = new InjectionToken<Partial<CollapseConfig>>('COLLAPSE_CONFIG', {\r\n factory: () => COLLAPSE_DEFAULTS,\r\n});\r\n","/**\r\n * Application-wide defaults for `psh-dropdown`.\r\n *\r\n * Provide it to set a default once for every psh-dropdown in the application:\r\n *\r\n * provideHelix({ components: { dropdown: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { DropdownConfig } from './dropdown.types';\r\n\r\nconst DROPDOWN_DEFAULTS = {\r\n appearance: 'solid',\r\n color: 'primary',\r\n size: 'medium',\r\n placement: 'bottom-start',\r\n iconOnly: false,\r\n disabled: false,\r\n label: 'Dropdown Menu',\r\n} satisfies Partial<DropdownConfig>;\r\n\r\nexport const DROPDOWN_CONFIG = new InjectionToken<Partial<DropdownConfig>>('DROPDOWN_CONFIG', {\r\n factory: () => DROPDOWN_DEFAULTS,\r\n});\r\n","/**\r\n * Application-wide defaults for `psh-horizontal-card`.\r\n *\r\n * Provide it to set a default once for every psh-horizontal-card in the application:\r\n *\r\n * provideHelix({ components: { horizontalCard: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { HorizontalCardConfig } from './horizontal-card.types';\r\n\r\nconst HORIZONTAL_CARD_DEFAULTS = {\r\n appearance: 'elevated',\r\n hoverable: false,\r\n interactive: false,\r\n sideWidth: 'var(--psh-size-48)',\r\n gap: 'var(--psh-spacing-md)',\r\n sidePadding: '0',\r\n contentPadding: 'var(--psh-spacing-md)',\r\n mobileHeight: 'var(--psh-size-48)',\r\n} satisfies Partial<HorizontalCardConfig>;\r\n\r\nexport const HORIZONTAL_CARD_CONFIG = new InjectionToken<Partial<HorizontalCardConfig>>('HORIZONTAL_CARD_CONFIG', {\r\n factory: () => HORIZONTAL_CARD_DEFAULTS,\r\n});\r\n","/**\r\n * Application-wide defaults for `psh-info-card`.\r\n *\r\n * Provide it to set a default once for every psh-info-card in the application:\r\n *\r\n * provideHelix({ components: { infoCard: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { InfoCardConfig } from './info-card.types';\r\n\r\nconst INFO_CARD_DEFAULTS = {\r\n appearance: 'outline',\r\n icon: 'circle-dashed',\r\n hoverable: false,\r\n interactive: false,\r\n copyable: false,\r\n copyButtonLabel: 'Copy',\r\n copyFeedbackText: 'Copied',\r\n autoFullWidthOnMobile: true,\r\n emptyStateMessage: 'No information available',\r\n notProvidedText: 'Not provided',\r\n} satisfies Partial<InfoCardConfig>;\r\n\r\nexport const INFO_CARD_CONFIG = new InjectionToken<Partial<InfoCardConfig>>('INFO_CARD_CONFIG', {\r\n factory: () => INFO_CARD_DEFAULTS,\r\n});\r\n","import { PshFieldAppearance } from '../../types/semantic.types';\r\nimport { PshConfigValue } from '../../utils/config-value';\r\nexport type InputType = 'text' | 'password' | 'email' | 'tel' | 'url' | 'search' | 'date' | 'number';\r\n/**\r\n * @deprecated since 7.0.0 — use {@link PshFieldAppearance}. Surface treatment now shares one\r\n * vocabulary across the library.\r\n */\r\nexport type InputVariant = PshFieldAppearance;\r\nexport type InputSize = 'small' | 'medium' | 'large';\r\n\r\nexport interface AutocompleteConfig {\r\n minLength: number;\r\n debounceTime: number;\r\n}\r\n\r\nexport interface InputConfig {\r\n type: InputType;\r\n appearance: InputVariant;\r\n size: InputSize;\r\n required: boolean;\r\n /** Accessible name of the password toggle while the password is hidden */\r\n showPasswordLabel: PshConfigValue<string>;\r\n /** Accessible name of the password toggle while the password is shown */\r\n hidePasswordLabel: PshConfigValue<string>;\r\n fullWidth: boolean;\r\n showLabel: boolean;\r\n label: string;\r\n placeholder: string;\r\n error: string | null | undefined;\r\n success: string | null | undefined;\r\n hint: string | null | undefined;\r\n ariaLabel: string | null;\r\n}\r\n\r\nexport interface SuggestionResult {\r\n suggestions: string[];\r\n error?: string;\r\n}\r\n\r\nexport const INPUT_LABELS = {\r\n showPassword: 'Show password',\r\n hidePassword: 'Hide password'\r\n} as const;","/**\r\n * Application-wide defaults for `psh-input`.\r\n *\r\n * Provide it to set a default once for every psh-input in the application:\r\n *\r\n * provideHelix({ components: { input: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { InputConfig, INPUT_LABELS } from './input.types';\r\n\r\nconst INPUT_DEFAULTS = {\r\n appearance: 'outline',\r\n size: 'medium',\r\n type: 'text',\r\n required: false,\r\n showPasswordLabel: INPUT_LABELS.showPassword,\r\n hidePasswordLabel: INPUT_LABELS.hidePassword,\r\n fullWidth: false,\r\n showLabel: true,\r\n label: '',\r\n placeholder: '',\r\n} satisfies Partial<InputConfig>;\r\n\r\nexport const INPUT_CONFIG = new InjectionToken<Partial<InputConfig>>('INPUT_CONFIG', {\r\n factory: () => INPUT_DEFAULTS,\r\n});\r\n","/**\r\n * Application-wide defaults for `psh-menu`.\r\n *\r\n * Provide it to set a default once for every psh-menu in the application:\r\n *\r\n * provideHelix({ components: { menu: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { MenuConfig } from './menu.types';\r\n\r\nconst MENU_DEFAULTS = {\r\n mode: 'vertical',\r\n variant: 'default',\r\n collapsible: false,\r\n} satisfies Partial<MenuConfig>;\r\n\r\nexport const MENU_CONFIG = new InjectionToken<Partial<MenuConfig>>('MENU_CONFIG', {\r\n factory: () => MENU_DEFAULTS,\r\n});\r\n","/**\r\n * A configured default that may be computed each time it is read.\r\n *\r\n * Every visible string the library ships is a key on a `*_CONFIG` token, so an application\r\n * translates the whole design system in one `provideHelix()` call. That works as long as the\r\n * language is settled before the components render — the value is read once, when the\r\n * component is built.\r\n *\r\n * An application with a language switcher needs the value re-read when the language changes,\r\n * and passing a function is how it says so:\r\n *\r\n * provideHelix({\r\n * components: {\r\n * select: { placeholder: () => translate.instant('psh.select.placeholder') },\r\n * modal: { dismissLabel: 'Fermer' }, // still fine, and still the common case\r\n * },\r\n * })\r\n *\r\n * The component reads prose through a `computed`, so a function that touches a signal — which\r\n * every i18n library in Angular now exposes — re-runs on a language change and the label\r\n * updates in place. A plain string costs nothing and behaves exactly as before.\r\n *\r\n * Only prose is treated this way. `size`, `appearance`, `placement` and their kind stay plain\r\n * values: they are not translated, and nothing is gained by making twenty enum defaults\r\n * lazily evaluated.\r\n */\r\nexport type PshConfigValue<T> = T | (() => T);\r\n\r\n/**\r\n * Reads a configured value, calling it if it is a thunk.\r\n *\r\n * Call it inside the `computed` that exposes the value, never in a field initialiser —\r\n * resolving it once at construction is exactly the behaviour this exists to avoid.\r\n */\r\nexport function pshResolveConfigValue<T>(value: PshConfigValue<T> | undefined): T | undefined {\r\n return typeof value === 'function' ? (value as () => T)() : value;\r\n}\r\n","import { PshControlAppearance } from '../../types/semantic.types';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport {\r\n AfterContentChecked,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { ButtonColor, ButtonSize, ButtonIconPosition } from './button.types';\r\nimport { BUTTON_CONFIG } from './button.tokens';\r\n\r\n@Component({\r\n selector: 'psh-button',\r\n imports: [],\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.psh-full-width]': 'fullWidth()',\r\n '(click)': 'onHostClick($event)',\r\n },\r\n})\r\nexport class PshButtonComponent implements AfterContentChecked {\r\n private readonly config = inject(BUTTON_CONFIG);\r\n\r\n private elementRef = inject(ElementRef);\r\n private readonly projectedText = signal<string | undefined>(undefined);\r\n\r\n readonly appearance = input<PshControlAppearance>(this.config.appearance ?? 'solid');\r\n readonly color = input<ButtonColor>(this.config.color ?? 'primary');\r\n readonly size = input<ButtonSize>(this.config.size ?? 'medium');\r\n readonly disabled = input(false);\r\n readonly loading = input(false);\r\n readonly fullWidth = input(this.config.fullWidth ?? false);\r\n readonly iconPosition = input<ButtonIconPosition>(this.config.iconPosition ?? 'left');\r\n readonly icon = input<string>();\r\n readonly ariaLabel = input<string>();\r\n readonly loadingTextInput = input<string | undefined>(undefined, { alias: 'loadingText' });\r\n readonly loadingText = computed(\r\n () => this.loadingTextInput() ?? pshResolveConfigValue(this.config.loadingText) ?? 'Loading...',\r\n );\r\n readonly disabledTextInput = input<string | undefined>(undefined, { alias: 'disabledText' });\r\n readonly disabledText = computed(\r\n () => this.disabledTextInput() ?? pshResolveConfigValue(this.config.disabledText) ?? 'This action is currently unavailable',\r\n );\r\n readonly iconOnlyText = input<string>();\r\n readonly type = input<'button' | 'submit' | 'reset'>(this.config.type ?? 'button');\r\n\r\n clicked = output<MouseEvent>();\r\n disabledClicked = output<MouseEvent>();\r\n\r\n ngAfterContentChecked(): void {\r\n const button = this.elementRef.nativeElement.querySelector('button');\r\n if (button) {\r\n const ngContentElement = button.querySelector('.psh-button-content');\r\n if (ngContentElement) {\r\n const textContent = ngContentElement.textContent?.trim() || '';\r\n const currentProjectedText = this.projectedText();\r\n if (textContent && textContent !== currentProjectedText) {\r\n this.projectedText.set(textContent);\r\n } else if (!textContent && currentProjectedText) {\r\n this.projectedText.set(undefined);\r\n }\r\n }\r\n }\r\n }\r\n\r\n readonly computedAriaLabel = computed(() => {\r\n if (this.ariaLabel()) return this.ariaLabel();\r\n if (this.loading()) return this.loadingText();\r\n if (this.disabled()) return this.disabledText();\r\n if (this.iconPosition() === 'only') {\r\n return this.iconOnlyText() || 'Button';\r\n }\r\n const projected = this.projectedText();\r\n if (projected) return projected;\r\n return undefined;\r\n });\r\n\r\n readonly state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.loading()) return 'loading';\r\n return 'default';\r\n });\r\n\r\n\r\n handleClick(event: MouseEvent): void {\r\n if (!this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n onHostClick(event: MouseEvent): void {\r\n if (this.disabled() && !this.loading()) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.disabledClicked.emit(event);\r\n }\r\n }\r\n}","<button\r\n [attr.data-state]=\"state()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-busy]=\"loading()\"\r\n [type]=\"type()\"\r\n [class]=\"'psh-' + appearance()\"\r\n [class.psh-primary]=\"color() === 'primary'\"\r\n [class.psh-secondary]=\"color() === 'secondary'\"\r\n [class.psh-success]=\"color() === 'success'\"\r\n [class.psh-warning]=\"color() === 'warning'\"\r\n [class.psh-danger]=\"color() === 'danger'\"\r\n [class.psh-disabled]=\"disabled()\"\r\n [class.psh-loading]=\"loading()\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-medium]=\"size() === 'medium'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [class.psh-icon-only]=\"iconPosition() === 'only'\"\r\n [disabled]=\"disabled() || loading()\"\r\n (click)=\"handleClick($event)\"\r\n>\r\n <span class=\"psh-button-content\">\r\n @if (loading()) {\r\n <span class=\"psh-loader\" aria-hidden=\"true\"></span>\r\n @if (iconPosition() !== 'only') {\r\n {{ loadingText() }}\r\n }\r\n }\r\n @if (!loading() && icon() && (iconPosition() === 'left' || iconPosition() === 'only')) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n @if (!loading() && iconPosition() !== 'only') {\r\n <ng-content></ng-content>\r\n }\r\n @if (!loading() && icon() && iconPosition() === 'right') {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n </span>\r\n</button>","import {\r\n afterNextRender,\r\n DestroyRef,\r\n Directive,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Injector,\r\n input,\r\n PLATFORM_ID,\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\n\r\n/**\r\n * Headless focus-trap primitive.\r\n *\r\n * Apply to a container element and toggle activation with `[pshFocusTrap]`.\r\n * When active it:\r\n * - remembers the element that had focus before activation,\r\n * - moves focus to the first focusable element inside the container\r\n * (deterministically, after the next render — no `setTimeout`),\r\n * - keeps Tab / Shift+Tab focus cycling within the container, and\r\n * - restores focus to the previously focused element on deactivation/destroy.\r\n *\r\n * Handles the case where focus is currently outside the container.\r\n *\r\n * @example\r\n * ```html\r\n * <div [pshFocusTrap]=\"isOpen()\">…</div>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[pshFocusTrap]',\r\n host: {\r\n '(keydown)': 'onKeydown($event)',\r\n },\r\n})\r\nexport class PshFocusTrapDirective {\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly injector = inject(Injector);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n /** Whether the trap is active. */\r\n readonly pshFocusTrap = input<boolean>(true);\r\n\r\n /** Whether to restore focus to the previously focused element on deactivation. */\r\n readonly pshFocusTrapRestore = input<boolean>(true);\r\n\r\n /**\r\n * Whether to move focus into the container when the trap activates.\r\n * Set to false to trap + restore focus without stealing initial focus.\r\n */\r\n readonly pshFocusTrapAutoFocus = input<boolean>(true);\r\n\r\n private previouslyFocused: HTMLElement | null = null;\r\n private active = false;\r\n\r\n constructor() {\r\n effect(() => {\r\n const enabled = this.pshFocusTrap();\r\n if (!this.isBrowser) return;\r\n if (enabled) {\r\n this.activate();\r\n } else {\r\n this.deactivate();\r\n }\r\n });\r\n\r\n inject(DestroyRef).onDestroy(() => this.restoreFocus(true));\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (!this.active || event.key !== 'Tab') return;\r\n\r\n const focusables = this.getFocusableElements();\r\n const first = focusables[0];\r\n const last = focusables[focusables.length - 1];\r\n if (!first || !last) {\r\n // Nothing focusable inside — keep focus pinned to the container.\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n const current = this.document.activeElement;\r\n const inside = this.host.nativeElement.contains(current);\r\n\r\n if (event.shiftKey) {\r\n if (!inside || current === first) {\r\n event.preventDefault();\r\n last.focus();\r\n }\r\n } else {\r\n if (!inside || current === last) {\r\n event.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n }\r\n\r\n private activate(): void {\r\n if (this.active) return;\r\n this.active = true;\r\n this.previouslyFocused = this.document.activeElement as HTMLElement | null;\r\n\r\n if (!this.pshFocusTrapAutoFocus()) return;\r\n\r\n // Deterministic post-render focus (replaces setTimeout-based focusing).\r\n afterNextRender(\r\n () => {\r\n if (!this.active) return;\r\n if (!this.host.nativeElement.contains(this.document.activeElement)) {\r\n this.getFocusableElements()[0]?.focus();\r\n }\r\n },\r\n { injector: this.injector },\r\n );\r\n }\r\n\r\n private deactivate(): void {\r\n if (!this.active) return;\r\n this.active = false;\r\n this.restoreFocus(false);\r\n }\r\n\r\n private restoreFocus(immediate: boolean): void {\r\n const target = this.previouslyFocused;\r\n this.previouslyFocused = null;\r\n\r\n if (!this.pshFocusTrapRestore() || !target || typeof target.focus !== 'function') {\r\n return;\r\n }\r\n\r\n if (immediate) {\r\n target.focus();\r\n } else {\r\n afterNextRender(() => target.focus(), { injector: this.injector });\r\n }\r\n }\r\n\r\n private getFocusableElements(): HTMLElement[] {\r\n const selector = [\r\n 'button:not([disabled])',\r\n '[href]',\r\n 'input:not([disabled])',\r\n 'select:not([disabled])',\r\n 'textarea:not([disabled])',\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n ].join(', ');\r\n\r\n // The selector already excludes the common non-focusable cases (disabled,\r\n // tabindex=\"-1\"). We intentionally avoid an offsetParent/layout-based\r\n // visibility filter: the browser itself skips display:none elements on\r\n // focus(), and layout metrics are unavailable in non-rendering test envs.\r\n return Array.from(\r\n this.host.nativeElement.querySelectorAll<HTMLElement>(selector),\r\n ).filter(el => !el.hasAttribute('hidden'));\r\n }\r\n}\r\n","import { computed, Injectable, signal } from '@angular/core';\r\n\r\n/** A handle for a registered overlay layer. */\r\nexport interface OverlayHandle {\r\n /** Unique id of the layer, used to release it. */\r\n readonly id: number;\r\n /** z-index assigned to this layer (higher = on top). */\r\n readonly zIndex: number;\r\n}\r\n\r\n/**\r\n * Central overlay stacking authority.\r\n *\r\n * Hands out monotonically increasing z-indexes so that stacked overlays\r\n * (modals, dropdowns, tooltips, popovers…) always layer in open order, and\r\n * exposes which layer is on top. This replaces per-component, ad-hoc z-index\r\n * management. The counter resets once every layer is released, keeping z-index\r\n * values bounded.\r\n *\r\n * @example\r\n * ```typescript\r\n * private overlay = inject(PshOverlayService);\r\n * // on open:\r\n * this.handle = this.overlay.push(); // { id, zIndex }\r\n * // on close:\r\n * this.overlay.remove(this.handle.id);\r\n * ```\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshOverlayService {\r\n /** z-index of the first (bottom) overlay layer. */\r\n private readonly baseZIndex = 1000;\r\n /** z-index increment between stacked layers. */\r\n private readonly step = 10;\r\n\r\n private sequence = 0;\r\n private readonly stack = signal<readonly number[]>([]);\r\n\r\n /** Number of currently-open overlay layers. */\r\n readonly activeCount = computed(() => this.stack().length);\r\n\r\n /**\r\n * Registers a new topmost overlay layer.\r\n * @returns a handle with a unique id and the z-index to apply.\r\n */\r\n push(): OverlayHandle {\r\n const id = ++this.sequence;\r\n this.stack.update(layers => [...layers, id]);\r\n return { id, zIndex: this.baseZIndex + (this.sequence - 1) * this.step };\r\n }\r\n\r\n /** Releases a previously registered layer. */\r\n remove(id: number): void {\r\n this.stack.update(layers => layers.filter(layer => layer !== id));\r\n if (this.stack().length === 0) {\r\n this.sequence = 0;\r\n }\r\n }\r\n\r\n /** Returns true if the given layer is currently on top of the stack. */\r\n isTopmost(id: number): boolean {\r\n const layers = this.stack();\r\n return layers.length > 0 && layers[layers.length - 1] === id;\r\n }\r\n}\r\n","import {\r\n NgZone,\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChild,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Injectable,\r\n InjectionToken,\r\n input,\r\n model,\r\n OnDestroy,\r\n output,\r\n PLATFORM_ID,\r\n Renderer2,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { PshButtonComponent } from '../button/button.component';\r\nimport { PshFocusTrapDirective } from '../../a11y/focus-trap.directive';\r\nimport { ModalSize, ModalConfig } from './modal.types';\r\nimport { PshOverlayService, OverlayHandle } from '../../a11y/overlay.service';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\n/**\r\n * Injection token for global modal configuration\r\n *\r\n * @example\r\n * ```typescript\r\n * // In app.config.ts or main.ts\r\n * providers: [\r\n * {\r\n * provide: MODAL_CONFIG,\r\n * useValue: {\r\n * size: 'large',\r\n * closeOnBackdrop: false,\r\n * }\r\n * }\r\n * ]\r\n * ```\r\n */\r\nconst MODAL_DEFAULTS = {\r\n size: 'medium',\r\n showClose: true,\r\n closeOnBackdrop: true,\r\n closeOnEscape: true,\r\n preventScroll: true,\r\n showFooter: true,\r\n dismissLabel: 'Close',\r\n confirmLabel: 'Confirm',\r\n cancelLabel: 'Cancel'\r\n} satisfies Partial<ModalConfig>;\r\n\r\nexport const MODAL_CONFIG = new InjectionToken<Partial<ModalConfig>>('MODAL_CONFIG', {\r\n factory: () => MODAL_DEFAULTS,\r\n});\r\n\r\n/**\r\n * Service for managing modal instances and global configuration\r\n *\r\n * Tracks all active modals and provides centralized configuration.\r\n * Useful for managing modal stacks and preventing multiple modals from conflicting.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ModalService {\r\n private config = inject(MODAL_CONFIG);\r\n /**\r\n * Ordered stack of open modal ids (insertion order = visual stacking order).\r\n * The last entry is the topmost (most recently opened) modal.\r\n */\r\n private readonly modalsSignal = signal<readonly string[]>([]);\r\n\r\n /**\r\n * Computed signal exposing the number of active modals\r\n */\r\n readonly activeModalsCount = computed(() => this.modalsSignal().length);\r\n\r\n /**\r\n * Computed signal exposing the id of the topmost modal, or null if none are open\r\n */\r\n readonly topmostModalId = computed(() => {\r\n const modals = this.modalsSignal();\r\n return modals.length > 0 ? modals[modals.length - 1] : null;\r\n });\r\n\r\n /**\r\n * Returns the global modal configuration\r\n */\r\n getConfig(): Partial<ModalConfig> {\r\n return this.config;\r\n }\r\n\r\n /**\r\n * Generates a unique identifier for a modal instance\r\n */\r\n generateId(): string {\r\n return pshUniqueId('modal');\r\n }\r\n\r\n /**\r\n * Registers a modal instance when it opens, pushing it onto the stack\r\n * @param id - Unique modal identifier\r\n */\r\n register(id: string): void {\r\n this.modalsSignal.update(modals =>\r\n modals.includes(id) ? modals : [...modals, id]\r\n );\r\n }\r\n\r\n /**\r\n * Unregisters a modal instance when it closes, removing it from the stack\r\n * @param id - Unique modal identifier\r\n */\r\n unregister(id: string): void {\r\n this.modalsSignal.update(modals => modals.filter(modalId => modalId !== id));\r\n }\r\n\r\n /**\r\n * Checks if a modal is currently registered\r\n * @param id - Unique modal identifier\r\n */\r\n isRegistered(id: string): boolean {\r\n return this.modalsSignal().includes(id);\r\n }\r\n\r\n /**\r\n * Checks if a modal is the topmost (most recently opened) open modal.\r\n * Used to ensure Escape / backdrop only dismiss the modal on top of the stack.\r\n * @param id - Unique modal identifier\r\n */\r\n isTopmost(id: string): boolean {\r\n return this.topmostModalId() === id;\r\n }\r\n}\r\n\r\n/**\r\n * A modal dialog component that displays content in an overlay\r\n *\r\n * @example\r\n * ```typescript\r\n * // Basic usage with two-way binding\r\n * <psh-modal [(open)]=\"isOpen\" title=\"My Modal\">\r\n * <p>Modal content</p>\r\n * </psh-modal>\r\n *\r\n * // With custom footer\r\n * <psh-modal [(open)]=\"isOpen\" title=\"Confirm Action\">\r\n * <p>Are you sure?</p>\r\n * <div psh-modal-footer #modalFooter>\r\n * <psh-button (clicked)=\"isOpen = false\">Cancel</psh-button>\r\n * <psh-button color=\"primary\" (clicked)=\"handleConfirm()\">Confirm</psh-button>\r\n * </div>\r\n * </psh-modal>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'psh-modal',\r\n imports: [PshButtonComponent, PshFocusTrapDirective],\r\n templateUrl: './modal.component.html',\r\n styleUrls: ['./modal.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshModalComponent implements AfterViewInit, OnDestroy {\r\n private readonly config = inject(MODAL_CONFIG);\r\n private readonly modalService = inject(ModalService);\r\n private readonly overlay = inject(PshOverlayService);\r\n private readonly renderer = inject(Renderer2);\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private readonly zone = inject(NgZone);\r\n private readonly document = inject(DOCUMENT);\r\n\r\n /** Elements this modal marked `inert`, so it only ever undoes its own. */\r\n private inertedByThisModal: HTMLElement[] = [];\r\n private readonly isBrowser = isPlatformBrowser(this.platformId);\r\n private readonly modalId = this.modalService.generateId();\r\n private overlayHandle: OverlayHandle | null = null;\r\n /** z-index assigned by the overlay stack while open (keeps stacked modals layered). */\r\n protected readonly zIndex = signal<number | null>(null);\r\n private modalElement?: ElementRef<HTMLElement>;\r\n private isAttachedToBody = false;\r\n private resizeListener?: () => void;\r\n private readonly isMobileSignal = signal(false);\r\n private readonly mobileBreakpoint = 768;\r\n\r\n /**\r\n * Controls the visibility of the modal (two-way binding)\r\n */\r\n readonly open = model(false);\r\n\r\n /**\r\n * Size of the modal dialog\r\n */\r\n readonly size = input<ModalSize>(this.config.size ?? 'medium');\r\n\r\n /**\r\n * Whether to show the close button in the header\r\n */\r\n readonly showClose = input(this.config.showClose ?? true);\r\n\r\n /**\r\n * Whether clicking the backdrop closes the modal\r\n */\r\n readonly closeOnBackdrop = input(this.config.closeOnBackdrop ?? true);\r\n\r\n /**\r\n * Whether pressing Escape closes the modal\r\n */\r\n readonly closeOnEscape = input(this.config.closeOnEscape ?? true);\r\n\r\n /**\r\n * Whether to prevent scrolling of the page when modal is open\r\n */\r\n readonly preventScroll = input(this.config.preventScroll ?? true);\r\n\r\n /**\r\n * Whether to show the default footer with action buttons\r\n */\r\n readonly showFooter = input(this.config.showFooter ?? true);\r\n\r\n /**\r\n * Title displayed in the modal header\r\n */\r\n readonly title = input('Modal Title');\r\n\r\n /**\r\n * Accessible label for the close button\r\n */\r\n readonly dismissLabelInput = input<string | undefined>(undefined, { alias: 'dismissLabel' });\r\n readonly dismissLabel = computed(\r\n () => this.dismissLabelInput() ?? pshResolveConfigValue(this.config.dismissLabel) ?? 'Close',\r\n );\r\n\r\n /**\r\n * Label for the confirm button in the default footer\r\n */\r\n readonly confirmLabelInput = input<string | undefined>(undefined, { alias: 'confirmLabel' });\r\n readonly confirmLabel = computed(\r\n () => this.confirmLabelInput() ?? pshResolveConfigValue(this.config.confirmLabel) ?? 'Confirm',\r\n );\r\n\r\n /**\r\n * Label for the cancel button in the default footer\r\n */\r\n readonly cancelLabelInput = input<string | undefined>(undefined, { alias: 'cancelLabel' });\r\n readonly cancelLabel = computed(\r\n () => this.cancelLabelInput() ?? pshResolveConfigValue(this.config.cancelLabel) ?? 'Cancel',\r\n );\r\n\r\n /**\r\n * Custom CSS class(es) for the modal panel.\r\n *\r\n * The only kind of passthrough that survives 7.0.0: the panel is rendered away from the\r\n * host — a backdrop covering the viewport, positioned by the overlay stack — so a class on\r\n * `<psh-modal>` cannot reach it. Every component that styles its own host lost its\r\n * passthrough instead.\r\n *\r\n * @example\r\n * ```html\r\n * <psh-modal panelClass=\"my-custom-modal\" />\r\n * ```\r\n */\r\n readonly panelClass = input('');\r\n\r\n /**\r\n * Name of the dialog, for the case where no visible title is rendered.\r\n *\r\n * When it is set it **replaces** `aria-labelledby`, because that attribute wins over\r\n * `aria-label` and would make this input silently do nothing. Setting it is therefore the\r\n * caller saying \"the visible title is absent or unsuitable\".\r\n */\r\n readonly ariaLabel = input<string>();\r\n\r\n protected readonly labelledBy = computed(() =>\r\n this.ariaLabel() ? null : `${this.modalDialogId()}-title`,\r\n );\r\n\r\n /**\r\n * Custom CSS class(es) to apply to the modal backdrop\r\n * Useful for stacked modals with different z-index or opacity\r\n *\r\n * @example\r\n * ```html\r\n * <psh-modal backdropClass=\"higher-z-index\" />\r\n * ```\r\n */\r\n readonly backdropClass = input('');\r\n\r\n /**\r\n * Emitted when the modal is closed\r\n */\r\n closed = output<void>();\r\n\r\n /**\r\n * Emitted when the confirm button is clicked\r\n */\r\n confirmed = output<void>();\r\n\r\n /**\r\n * Content child for detecting custom footer projection\r\n */\r\n private readonly customFooter = contentChild<ElementRef>('modalFooter');\r\n\r\n /**\r\n * View child reference to the modal backdrop element\r\n */\r\n private readonly modalBackdrop = viewChild<ElementRef>('modalBackdrop');\r\n\r\n /**\r\n * Keyboard event handler for Escape key\r\n */\r\n private readonly escapeHandler = (event: KeyboardEvent) => {\r\n if (event.key !== 'Escape') return;\r\n if (this.closeOnEscape() && this.open() && this.modalService.isTopmost(this.modalId)) {\r\n this.handleClose();\r\n }\r\n };\r\n\r\n /**\r\n * Computed signal indicating if a custom footer is projected\r\n */\r\n readonly hasCustomFooter = computed(() => !!this.customFooter());\r\n\r\n /**\r\n * Computed signal for the modal state\r\n */\r\n readonly state = computed(() => this.open() ? 'open' : 'closed');\r\n\r\n /**\r\n * Computed signal for the modal dialog ID for accessibility\r\n */\r\n readonly modalDialogId = computed(() => `${this.modalId}-dialog`);\r\n\r\n /**\r\n * Computed signal for the modal description ID for accessibility\r\n */\r\n readonly modalDescriptionId = computed(() => `${this.modalId}-description`);\r\n\r\n /**\r\n * Computed signal indicating if the screen is mobile-sized\r\n */\r\n readonly isMobileScreen = computed(() => this.isMobileSignal());\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.open()) {\r\n this.onModalOpen();\r\n } else {\r\n this.onModalClose();\r\n }\r\n });\r\n\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.checkScreenSize();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.attachModalToBody();\r\n this.setupResizeListener();\r\n }\r\n\r\n /**\r\n * Handles all setup when modal opens\r\n */\r\n private onModalOpen(): void {\r\n this.modalService.register(this.modalId);\r\n this.overlayHandle = this.overlay.push();\r\n this.zIndex.set(this.overlayHandle.zIndex);\r\n if (!this.isBrowser) return;\r\n this.setupScrollLock();\r\n this.setBackgroundInert();\r\n this.addEventListeners();\r\n // Initial focus + focus trapping + focus restoration are handled by\r\n // the [pshFocusTrap] directive on the modal container.\r\n }\r\n\r\n /**\r\n * Handles all cleanup when modal closes\r\n */\r\n private onModalClose(): void {\r\n this.modalService.unregister(this.modalId);\r\n this.releaseOverlay();\r\n if (!this.isBrowser) return;\r\n this.removeScrollLock();\r\n this.releaseBackgroundInert();\r\n this.removeEventListeners();\r\n }\r\n\r\n /**\r\n * Takes the rest of the page out of the accessibility tree while the modal is open.\r\n *\r\n * The focus trap holds the *keyboard*, and that was all there was: a screen reader's virtual\r\n * cursor reads by position, not by focus, so it walked straight through the page behind the\r\n * modal. `inert` is the one attribute that stops both.\r\n *\r\n * It applies to the siblings of the backdrop, which is appended to `document.body` — so the\r\n * list depends on the page, and the elements it touched are remembered rather than\r\n * recomputed. An element that was already `inert` is left alone and not recorded: it belongs\r\n * to whoever set it, most likely a modal underneath this one.\r\n */\r\n private setBackgroundInert(): void {\r\n const backdrop = this.modalBackdrop()?.nativeElement;\r\n for (const sibling of Array.from(this.document.body.children)) {\r\n if (sibling === backdrop || sibling.hasAttribute('inert')) continue;\r\n sibling.setAttribute('inert', '');\r\n this.inertedByThisModal.push(sibling as HTMLElement);\r\n }\r\n }\r\n\r\n private releaseBackgroundInert(): void {\r\n for (const element of this.inertedByThisModal) element.removeAttribute('inert');\r\n this.inertedByThisModal = [];\r\n }\r\n\r\n /** Releases this modal's overlay layer and clears its z-index. */\r\n private releaseOverlay(): void {\r\n if (this.overlayHandle) {\r\n this.overlay.remove(this.overlayHandle.id);\r\n this.overlayHandle = null;\r\n }\r\n this.zIndex.set(null);\r\n }\r\n\r\n /**\r\n * Checks if the current screen size is mobile\r\n */\r\n private checkScreenSize(): void {\r\n const view = this.document.defaultView;\r\n if (view) {\r\n this.isMobileSignal.set(view.innerWidth < this.mobileBreakpoint);\r\n }\r\n }\r\n\r\n /**\r\n * Sets up resize listener to detect screen size changes\r\n */\r\n private setupResizeListener(): void {\r\n const view = this.document.defaultView;\r\n if (view) {\r\n this.resizeListener = () => this.checkScreenSize();\r\n // Outside Angular: resize fires continuously while a window is dragged, and the\r\n // handler only writes a signal — which schedules its own refresh when it changes.\r\n this.zone.runOutsideAngular(() => view.addEventListener('resize', this.resizeListener!));\r\n }\r\n }\r\n\r\n /**\r\n * Removes resize listener\r\n */\r\n private removeResizeListener(): void {\r\n if (this.resizeListener) {\r\n this.document.defaultView?.removeEventListener('resize', this.resizeListener);\r\n }\r\n }\r\n\r\n /**\r\n * Adds keyboard event listeners\r\n */\r\n private addEventListeners(): void {\r\n this.document.addEventListener('keydown', this.escapeHandler);\r\n }\r\n\r\n /**\r\n * Removes keyboard event listeners\r\n */\r\n private removeEventListeners(): void {\r\n this.document.removeEventListener('keydown', this.escapeHandler);\r\n }\r\n\r\n /**\r\n * Closes the modal and emits the closed event\r\n */\r\n handleClose(): void {\r\n this.open.set(false);\r\n this.closed.emit();\r\n }\r\n\r\n /**\r\n * Emits the confirmed event without closing the modal\r\n * Allows parent component to handle confirmation logic and close if needed\r\n */\r\n handleConfirm(): void {\r\n this.confirmed.emit();\r\n }\r\n\r\n /**\r\n * Handles clicks on the backdrop\r\n * Closes the modal if closeOnBackdrop is true and click is on backdrop itself\r\n */\r\n handleBackdropClick(event: MouseEvent): void {\r\n if (\r\n this.closeOnBackdrop() &&\r\n this.modalService.isTopmost(this.modalId) &&\r\n event.target === event.currentTarget\r\n ) {\r\n this.handleClose();\r\n }\r\n }\r\n\r\n /**\r\n * Prevents page scrolling when modal is open\r\n * Calculates scrollbar width to prevent layout shift\r\n */\r\n private setupScrollLock(): void {\r\n if (!this.preventScroll() || !this.isBrowser) return;\r\n\r\n const root = this.document.documentElement;\r\n const view = this.document.defaultView;\r\n if (view && !root.style.getPropertyValue('--psh-scrollbar-width')) {\r\n const scrollbarWidth = view.innerWidth - root.clientWidth;\r\n root.style.setProperty('--psh-scrollbar-width', `${scrollbarWidth}px`);\r\n }\r\n this.document.body.classList.add('psh-modal-open');\r\n }\r\n\r\n /**\r\n * Removes scroll lock when modal closes\r\n */\r\n private removeScrollLock(): void {\r\n if (!this.preventScroll() || !this.isBrowser) return;\r\n this.document.body.classList.remove('psh-modal-open');\r\n }\r\n\r\n /**\r\n * Attaches the modal element to document.body for proper overlay rendering\r\n */\r\n private attachModalToBody(): void {\r\n const backdrop = this.modalBackdrop();\r\n if (backdrop && backdrop.nativeElement && !this.isAttachedToBody) {\r\n this.modalElement = backdrop;\r\n this.renderer.appendChild(this.document.body, backdrop.nativeElement);\r\n this.isAttachedToBody = true;\r\n }\r\n }\r\n\r\n /**\r\n * Detaches the modal element from document.body\r\n */\r\n private detachModalFromBody(): void {\r\n if (this.modalElement && this.modalElement.nativeElement && this.isAttachedToBody) {\r\n this.renderer.removeChild(this.document.body, this.modalElement.nativeElement);\r\n this.isAttachedToBody = false;\r\n }\r\n }\r\n\r\n /**\r\n * Cleanup on component destruction\r\n */\r\n ngOnDestroy(): void {\r\n this.removeScrollLock();\r\n this.removeEventListeners();\r\n this.removeResizeListener();\r\n this.modalService.unregister(this.modalId);\r\n this.releaseOverlay();\r\n this.detachModalFromBody();\r\n }\r\n}\r\n","<!--\r\n The backdrop. Pointer dismissal only; the keyboard path is Escape, handled on the document.\r\n It carries no role since 7.0.0 — the dialog is the panel inside it — so the two rules that\r\n were satisfied by role=\"dialog\" have to be waived explicitly instead.\r\n-->\r\n<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n<div\r\n #modalBackdrop\r\n [class]=\"'psh-modal-backdrop ' + backdropClass()\"\r\n [class.psh-open]=\"open()\"\r\n (click)=\"handleBackdropClick($event)\"\r\n [style.z-index]=\"zIndex()\"\r\n [attr.aria-hidden]=\"!open()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <div\r\n [class]=\"'psh-modal-container ' + panelClass()\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-medium]=\"size() === 'medium'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [attr.id]=\"modalDialogId()\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-labelledby]=\"labelledBy()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-describedby]=\"modalDescriptionId()\"\r\n [pshFocusTrap]=\"open()\"\r\n >\r\n <div class=\"psh-modal-content-wrapper\">\r\n <div class=\"psh-modal-header\">\r\n <h2 class=\"psh-modal-title\" [attr.id]=\"modalDialogId() + '-title'\">\r\n <ng-content select=\"[psh-modal-title]\">{{ title() }}</ng-content>\r\n </h2>\r\n @if (showClose()) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-modal-close\"\r\n (click)=\"handleClose()\"\r\n [attr.aria-label]=\"dismissLabel()\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"psh-modal-content\" [attr.id]=\"modalDescriptionId()\">\r\n <ng-content>\r\n <p>\r\n Modal content goes here. You can replace this with your own content.\r\n </p>\r\n </ng-content>\r\n </div>\r\n\r\n @if (showFooter() && !hasCustomFooter()) {\r\n <div class=\"psh-modal-footer\">\r\n <psh-button\r\n appearance=\"outline\"\r\n color=\"primary\"\r\n size=\"medium\"\r\n [fullWidth]=\"isMobileScreen()\"\r\n (clicked)=\"handleClose()\">\r\n {{ cancelLabel() }}\r\n </psh-button>\r\n <psh-button\r\n appearance=\"solid\"\r\n color=\"primary\"\r\n size=\"medium\"\r\n [fullWidth]=\"isMobileScreen()\"\r\n (clicked)=\"handleConfirm()\">\r\n {{ confirmLabel() }}\r\n </psh-button>\r\n </div>\r\n } @if (showFooter() && hasCustomFooter()) {\r\n <div class=\"psh-modal-footer\">\r\n <!--\r\n Note: When using a custom footer, buttons should also use [fullWidth]=\"isMobileScreen()\"\r\n to ensure proper responsive behavior on mobile devices.\r\n Example:\r\n <psh-button [fullWidth]=\"isMobileScreen()\" (clicked)=\"action()\">Custom Button</psh-button>\r\n -->\r\n <ng-content select=\"[psh-modal-footer]\" #modalFooter></ng-content>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { PshNavigationError, PshSurfaceAppearance } from '../../types/semantic.types';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n isDevMode,\r\n model,\r\n output,\r\n linkedSignal,\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { PaginationSize, PaginationVariant, PaginationConfig } from './pagination.types';\r\nimport { InjectionToken } from '@angular/core';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\nconst PAGINATION_DEFAULTS = {\r\n size: 'medium',\r\n appearance: 'flat',\r\n showFirstLast: true,\r\n showPrevNext: true,\r\n maxVisiblePages: 5,\r\n showItemsPerPage: false,\r\n itemsPerPageOptions: [5, 10, 25, 50],\r\n firstLabel: 'First',\r\n previousLabel: 'Previous',\r\n nextLabel: 'Next',\r\n lastLabel: 'Last',\r\n pageLabel: 'Page',\r\n itemsLabel: 'items',\r\n itemsPerPageLabel: 'Items per page',\r\n ariaLabel: 'Pagination navigation',\r\n} satisfies Partial<PaginationConfig>;\r\n\r\nexport const PAGINATION_CONFIG = new InjectionToken<Partial<PaginationConfig>>('PAGINATION_CONFIG', {\r\n factory: () => PAGINATION_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-pagination',\r\n templateUrl: './pagination.component.html',\r\n styleUrls: ['./pagination.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshPaginationComponent {\r\n private config = inject(PAGINATION_CONFIG);\r\n private readonly uniqueId = pshUniqueId('pagination');\r\n\r\n readonly currentPage = model(1);\r\n readonly totalPages = input(1);\r\n readonly itemsPerPageInput = input(10, { alias: 'itemsPerPage' });\r\n readonly itemsPerPage = linkedSignal(this.itemsPerPageInput);\r\n\r\n /**\r\n * Number of pages used for rendering and navigation: never below 1, and never\r\n * written back to the `totalPages` input. `totalPages` is derived data owned by\r\n * the caller (`Math.ceil(total / pageSize)`, or a server-side page count), so the\r\n * component reads it and clamps its own view of it instead of correcting it.\r\n */\r\n private readonly effectiveTotalPages = computed(() => {\r\n const total = this.totalPages();\r\n return Number.isInteger(total) && total >= 1 ? total : 1;\r\n });\r\n\r\n constructor() {\r\n if (isDevMode()) {\r\n effect(() => {\r\n // `0` is a legitimate state (empty list, or a server-side page count that is\r\n // not loaded yet): stay silent. Only report what betrays a caller bug.\r\n const total = this.totalPages();\r\n if (total !== 0 && (!Number.isInteger(total) || total < 1)) {\r\n console.warn(`[psh-pagination] Invalid totalPages \"${total}\", using 1 page`);\r\n }\r\n });\r\n\r\n effect(() => {\r\n const maxVisible = this.maxVisiblePages();\r\n if (maxVisible < 1 || !Number.isFinite(maxVisible)) {\r\n console.warn(`[psh-pagination] Invalid maxVisiblePages \"${maxVisible}\", must be >= 1`);\r\n }\r\n });\r\n }\r\n\r\n // `currentPage` IS owned by the component (it navigates), so correcting it with\r\n // a write-back is the intended behaviour — clamped on the derived page count.\r\n effect(() => {\r\n const current = this.currentPage();\r\n const total = this.effectiveTotalPages();\r\n if (current < 1 || !Number.isFinite(current)) {\r\n if (isDevMode()) {\r\n console.warn(`[psh-pagination] Invalid currentPage \"${current}\", setting to 1`);\r\n }\r\n this.currentPage.set(1);\r\n } else if (current > total) {\r\n if (isDevMode()) {\r\n console.warn(\r\n `[psh-pagination] currentPage \"${current}\" exceeds totalPages \"${total}\", setting to ${total}`,\r\n );\r\n }\r\n this.currentPage.set(total);\r\n }\r\n });\r\n }\r\n\r\n readonly size = input(this.config.size ?? ('medium' as PaginationSize), {\r\n transform: (value: PaginationSize): PaginationSize => {\r\n if (!['small', 'medium', 'large'].includes(value)) {\r\n if (isDevMode()) {\r\n console.warn(`[psh-pagination] Invalid size \"${value}\", falling back to \"medium\"`);\r\n }\r\n return 'medium';\r\n }\r\n return value;\r\n },\r\n });\r\n readonly appearance = input(this.config.appearance ?? ('flat' as PshSurfaceAppearance), {\r\n transform: (value: PaginationVariant): PaginationVariant => {\r\n if (!['flat', 'outline'].includes(value)) {\r\n if (isDevMode()) {\r\n console.warn(`[psh-pagination] Invalid variant \"${value}\", falling back to \"flat\"`);\r\n }\r\n return 'flat';\r\n }\r\n return value;\r\n },\r\n });\r\n readonly showFirstLast = input(this.config.showFirstLast ?? true);\r\n readonly showPrevNext = input(this.config.showPrevNext ?? true);\r\n readonly maxVisiblePages = input(this.config.maxVisiblePages ?? 5);\r\n readonly showItemsPerPage = input(this.config.showItemsPerPage ?? false);\r\n readonly itemsPerPageOptions = input<number[]>(\r\n this.config.itemsPerPageOptions ?? [5, 10, 25, 50],\r\n );\r\n readonly firstLabelInput = input<string | undefined>(undefined, { alias: 'firstLabel' });\r\n readonly firstLabel = computed(\r\n () => this.firstLabelInput() ?? pshResolveConfigValue(this.config.firstLabel) ?? 'First',\r\n );\r\n readonly previousLabelInput = input<string | undefined>(undefined, { alias: 'previousLabel' });\r\n readonly previousLabel = computed(\r\n () => this.previousLabelInput() ?? pshResolveConfigValue(this.config.previousLabel) ?? 'Previous',\r\n );\r\n readonly nextLabelInput = input<string | undefined>(undefined, { alias: 'nextLabel' });\r\n readonly nextLabel = computed(\r\n () => this.nextLabelInput() ?? pshResolveConfigValue(this.config.nextLabel) ?? 'Next',\r\n );\r\n readonly lastLabelInput = input<string | undefined>(undefined, { alias: 'lastLabel' });\r\n readonly lastLabel = computed(\r\n () => this.lastLabelInput() ?? pshResolveConfigValue(this.config.lastLabel) ?? 'Last',\r\n );\r\n readonly ofLabelInput = input<string | undefined>(undefined, { alias: 'ofLabel' });\r\n /** Between the current page and the total. Its own word, because word order is not. */\r\n readonly ofLabel = computed(\r\n () => this.ofLabelInput() ?? pshResolveConfigValue(this.config.ofLabel) ?? 'of',\r\n );\r\n\r\n readonly pageLabelInput = input<string | undefined>(undefined, { alias: 'pageLabel' });\r\n readonly pageLabel = computed(\r\n () => this.pageLabelInput() ?? pshResolveConfigValue(this.config.pageLabel) ?? 'Page',\r\n );\r\n readonly itemsLabelInput = input<string | undefined>(undefined, { alias: 'itemsLabel' });\r\n readonly itemsLabel = computed(\r\n () => this.itemsLabelInput() ?? pshResolveConfigValue(this.config.itemsLabel) ?? 'items',\r\n );\r\n readonly itemsPerPageLabelInput = input<string | undefined>(undefined, { alias: 'itemsPerPageLabel' });\r\n readonly itemsPerPageLabel = computed(\r\n () => this.itemsPerPageLabelInput() ?? pshResolveConfigValue(this.config.itemsPerPageLabel) ?? 'Items per page',\r\n );\r\n readonly id = input<string>();\r\n readonly ariaLabelInput = input<string | undefined>(undefined, { alias: 'ariaLabel' });\r\n readonly ariaLabel = computed(\r\n () => this.ariaLabelInput() ?? pshResolveConfigValue(this.config.ariaLabel) ?? 'Pagination navigation',\r\n );\r\n\r\n pageChange = output<number>();\r\n itemsPerPageChange = output<number>();\r\n navigationError = output<PshNavigationError>();\r\n\r\n protected readonly navigationId = computed(() => {\r\n const customId = this.id();\r\n return customId || this.uniqueId;\r\n });\r\n\r\n protected readonly pages = computed(() => {\r\n const pages: number[] = [];\r\n const halfVisible = Math.floor(this.maxVisiblePages() / 2);\r\n let start = Math.max(1, this.currentPage() - halfVisible);\r\n const end = Math.min(this.effectiveTotalPages(), start + this.maxVisiblePages() - 1);\r\n\r\n if (end - start + 1 < this.maxVisiblePages()) {\r\n start = Math.max(1, end - this.maxVisiblePages() + 1);\r\n }\r\n\r\n for (let i = start; i <= end; i++) {\r\n pages.push(i);\r\n }\r\n\r\n return pages;\r\n });\r\n\r\n protected readonly state = computed(() => this.getState());\r\n\r\n protected readonly canGoNext = computed(() => this.currentPage() < this.effectiveTotalPages());\r\n protected readonly canGoPrevious = computed(() => this.currentPage() > 1);\r\n protected readonly isFirstPage = computed(() => this.currentPage() === 1);\r\n protected readonly isLastPage = computed(\r\n () => this.currentPage() === this.effectiveTotalPages(),\r\n );\r\n\r\n protected readonly currentPageAnnouncement = computed(() => {\r\n return `${this.pageLabel()} ${this.currentPage()} ${this.ofLabel()} ${this.effectiveTotalPages()}`;\r\n });\r\n\r\n private getState(): string {\r\n if (this.currentPage() === 1) return 'first';\r\n if (this.currentPage() === this.effectiveTotalPages()) return 'last';\r\n return 'flat';\r\n }\r\n\r\n goToPage(page: number): void {\r\n const total = this.effectiveTotalPages();\r\n if (page !== this.currentPage() && page >= 1 && page <= total) {\r\n this.currentPage.set(page);\r\n this.pageChange.emit(page);\r\n } else if (page < 1 || page > total) {\r\n this.navigationError.emit({\r\n action: 'goToPage',\r\n reason: 'out-of-bounds',\r\n target: page,\r\n message: `Page ${page} is out of bounds (1-${total})`,\r\n });\r\n }\r\n }\r\n\r\n goToFirstPage(): void {\r\n this.goToPage(1);\r\n }\r\n\r\n goToLastPage(): void {\r\n this.goToPage(this.effectiveTotalPages());\r\n }\r\n\r\n goToNextPage(): void {\r\n if (this.canGoNext()) {\r\n this.goToPage(this.currentPage() + 1);\r\n }\r\n }\r\n\r\n goToPreviousPage(): void {\r\n if (this.canGoPrevious()) {\r\n this.goToPage(this.currentPage() - 1);\r\n }\r\n }\r\n\r\n onItemsPerPageChange(event: Event): void {\r\n const value = parseInt((event.target as HTMLSelectElement).value);\r\n this.itemsPerPage.set(value);\r\n this.itemsPerPageChange.emit(value);\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n this.goToPreviousPage();\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n this.goToNextPage();\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.goToFirstPage();\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.goToLastPage();\r\n break;\r\n }\r\n }\r\n}\r\n","<nav\r\n class=\"psh-pagination\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [class.psh-outline]=\"appearance() === 'outline'\"\r\n role=\"navigation\"\r\n [attr.id]=\"navigationId()\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [attr.data-state]=\"state()\"\r\n (keydown)=\"onKeydown($event)\"\r\n>\r\n @if (showItemsPerPage()) {\r\n <div class=\"psh-items-per-page\">\r\n <label [attr.for]=\"navigationId() + '-items-select'\" class=\"psh-items-per-page-label\">\r\n {{ itemsPerPageLabel() }}\r\n </label>\r\n <select\r\n [attr.id]=\"navigationId() + '-items-select'\"\r\n (change)=\"onItemsPerPageChange($event)\"\r\n [attr.aria-label]=\"itemsPerPageLabel()\"\r\n >\r\n @for (option of itemsPerPageOptions(); track option) {\r\n <option [value]=\"option\" [selected]=\"option === itemsPerPage()\">\r\n {{ option }} {{ itemsLabel() }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n }\r\n\r\n @if (showFirstLast()) {\r\n <button\r\n class=\"psh-page-button\"\r\n [class.psh-disabled]=\"isFirstPage()\"\r\n (click)=\"goToFirstPage()\"\r\n [attr.aria-label]=\"firstLabel()\"\r\n [disabled]=\"isFirstPage()\"\r\n type=\"button\"\r\n >\r\n <i class=\"ph ph-caret-double-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n @if (showPrevNext()) {\r\n <button\r\n class=\"psh-page-button\"\r\n [class.psh-disabled]=\"!canGoPrevious()\"\r\n (click)=\"goToPreviousPage()\"\r\n [attr.aria-label]=\"previousLabel()\"\r\n [disabled]=\"!canGoPrevious()\"\r\n type=\"button\"\r\n >\r\n <i class=\"ph ph-caret-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n @for (page of pages(); track page) {\r\n <button\r\n class=\"psh-page-button\"\r\n [class.psh-active]=\"page === currentPage()\"\r\n (click)=\"goToPage(page)\"\r\n [attr.aria-current]=\"page === currentPage() ? 'page' : null\"\r\n [attr.aria-label]=\"pageLabel() + ' ' + page\"\r\n type=\"button\"\r\n >\r\n {{ page }}\r\n </button>\r\n }\r\n\r\n @if (showPrevNext()) {\r\n <button\r\n class=\"psh-page-button\"\r\n [class.psh-disabled]=\"!canGoNext()\"\r\n (click)=\"goToNextPage()\"\r\n [attr.aria-label]=\"nextLabel()\"\r\n [disabled]=\"!canGoNext()\"\r\n type=\"button\"\r\n >\r\n <i class=\"ph ph-caret-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n @if (showFirstLast()) {\r\n <button\r\n class=\"psh-page-button\"\r\n [class.psh-disabled]=\"isLastPage()\"\r\n (click)=\"goToLastPage()\"\r\n [attr.aria-label]=\"lastLabel()\"\r\n [disabled]=\"isLastPage()\"\r\n type=\"button\"\r\n >\r\n <i class=\"ph ph-caret-double-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n <div class=\"psh-sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\r\n {{ currentPageAnnouncement() }}\r\n </div>\r\n</nav>","import { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, InjectionToken } from '@angular/core';\r\nimport { ProgressbarVariant, ProgressbarSize, ProgressbarMode, ProgressbarLabelPosition, ProgressbarConfig } from './progressbar.types';\r\n\r\nconst PROGRESSBAR_DEFAULTS = {\r\n value: 0,\r\n max: 100,\r\n color: 'primary',\r\n size: 'medium',\r\n showLabel: true,\r\n mode: 'default',\r\n labelPosition: 'top'\r\n} satisfies Partial<ProgressbarConfig>;\r\n\r\nexport const PROGRESSBAR_CONFIG = new InjectionToken<Partial<ProgressbarConfig>>('PROGRESSBAR_CONFIG', {\r\n factory: () => PROGRESSBAR_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-progressbar',\r\n imports: [],\r\n templateUrl: './progressbar.component.html',\r\n styleUrls: ['./progressbar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'progressbar-container',\r\n '[class.psh-small]': 'size() === \"small\"',\r\n '[class.psh-large]': 'size() === \"large\"',\r\n '[class.psh-label-bottom]': 'labelPosition() === \"bottom\"',\r\n '[class.psh-label-inline]': 'labelPosition() === \"inline\"',\r\n '[attr.data-state]': 'mode()',\r\n '[attr.aria-live]': '\"polite\"'\r\n }\r\n})\r\nexport class PshProgressbarComponent {\r\n private config = inject(PROGRESSBAR_CONFIG);\r\n\r\n // Model inputs for two-way binding\r\n readonly value = input(this.config.value ?? 0);\r\n readonly max = input(this.config.max ?? 100);\r\n\r\n // Regular inputs\r\n readonly color = input<ProgressbarVariant>(this.config.color ?? 'primary');\r\n readonly size = input<ProgressbarSize>(this.config.size ?? 'medium');\r\n readonly showLabel = input(this.config.showLabel ?? true);\r\n readonly mode = input<ProgressbarMode>(this.config.mode ?? 'default');\r\n readonly label = input<string>();\r\n readonly labelPosition = input<ProgressbarLabelPosition>(this.config.labelPosition ?? 'top');\r\n readonly ariaLabel = input<string>();\r\n\r\n // Outputs\r\n completed = output<void>();\r\n thresholdReached = output<number>();\r\n\r\n // Computed values\r\n readonly percentage = computed(() => {\r\n const val = this.value();\r\n const maxVal = this.max();\r\n if (maxVal <= 0) return 0;\r\n return Math.min(100, Math.max(0, (val / maxVal) * 100));\r\n });\r\n\r\n readonly isIndeterminate = computed(() => this.mode() === 'indeterminate');\r\n readonly isStriped = computed(() => this.mode() === 'striped' || this.mode() === 'animated');\r\n readonly isAnimated = computed(() => this.mode() === 'animated');\r\n\r\n readonly computedAriaValueText = computed(() => {\r\n if (this.ariaLabel()) return this.ariaLabel();\r\n if (this.isIndeterminate()) {\r\n return this.label() || 'Loading...';\r\n }\r\n return `${Math.round(this.percentage())}%`;\r\n });\r\n\r\n readonly displayLabel = computed(() => {\r\n if (this.isIndeterminate()) {\r\n return this.label() || 'Loading...';\r\n }\r\n return this.label() || `${Math.round(this.percentage())}%`;\r\n });\r\n\r\n constructor() {\r\n let previousThreshold = -1;\r\n let hasCompleted = false;\r\n\r\n effect(() => {\r\n const percentage = this.percentage();\r\n const val = this.value();\r\n const maxVal = this.max();\r\n\r\n if (val >= maxVal && maxVal > 0 && !hasCompleted) {\r\n this.completed.emit();\r\n hasCompleted = true;\r\n }\r\n\r\n if (val < maxVal) {\r\n hasCompleted = false;\r\n }\r\n\r\n const thresholds = [25, 50, 75];\r\n for (const threshold of thresholds) {\r\n if (percentage >= threshold && previousThreshold < threshold) {\r\n this.thresholdReached.emit(threshold);\r\n previousThreshold = threshold;\r\n }\r\n }\r\n\r\n if (percentage < 25) {\r\n previousThreshold = -1;\r\n }\r\n });\r\n }\r\n}","@if (showLabel()) {\r\n <span class=\"psh-progress-label\">{{ displayLabel() }}</span>\r\n}\r\n<div\r\n class=\"psh-progressbar\"\r\n [class.psh-striped]=\"isStriped()\"\r\n [class.psh-animated]=\"isAnimated()\"\r\n [class.psh-indeterminate]=\"isIndeterminate()\"\r\n role=\"progressbar\"\r\n [attr.aria-label]=\"ariaLabel() || label() || 'Progression'\"\r\n [attr.aria-valuenow]=\"isIndeterminate() ? null : value()\"\r\n [attr.aria-valuemin]=\"0\"\r\n [attr.aria-valuemax]=\"max()\"\r\n [attr.aria-valuetext]=\"computedAriaValueText()\"\r\n>\r\n <div\r\n class=\"psh-progress-track\"\r\n [class]=\"'psh-' + color()\"\r\n [style.width.%]=\"percentage()\"\r\n ></div>\r\n</div>","import { InjectionToken, Signal } from '@angular/core';\r\nimport { RadioSize } from './radio.types';\r\n\r\n/**\r\n * What a `psh-radio` needs from the group that contains it.\r\n *\r\n * A token rather than the component class, because the dependency runs both ways: the group\r\n * reads its radios through `contentChildren(PshRadioComponent)`, and each radio asks its\r\n * group what the selected value is. Importing the class in both directions is a cycle;\r\n * importing an interface in one direction is not.\r\n */\r\nexport interface PshRadioGroupApi<T = unknown> {\r\n /** The `name` every radio in the group shares, so the browser treats them as one set. */\r\n readonly name: Signal<string>;\r\n /** The selected value. A radio is checked when this equals its own `value`. */\r\n readonly value: Signal<T | null>;\r\n /** Disables every radio in the group at once. */\r\n readonly disabled: Signal<boolean>;\r\n /** Applies to every radio in the group: radios in one set should be the same size. */\r\n readonly size: Signal<RadioSize>;\r\n /** Whether the group is required, for `aria-required` on each radio. */\r\n readonly required: Signal<boolean>;\r\n /** Selects a value. The group owns it, so a radio asks rather than sets. */\r\n select(value: T): void;\r\n /** The user is done with the group — emitted once, by the group, not once per radio. */\r\n markTouched(): void;\r\n}\r\n\r\nexport const PSH_RADIO_GROUP = new InjectionToken<PshRadioGroupApi>('PSH_RADIO_GROUP');\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n isDevMode,\r\n model,\r\n output,\r\n signal,\r\n viewChild\r\n} from '@angular/core';\r\nimport { RadioSize, RadioConfig } from './radio.types';\r\nimport { InjectionToken } from '@angular/core';\r\nimport { PSH_RADIO_GROUP } from './radio-group.token';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\nimport { pshJoinAriaIds } from '../../utils/aria';\r\n\r\nconst RADIO_DEFAULTS = {\r\n checked: false,\r\n disabled: false,\r\n required: false,\r\n size: 'medium',\r\n labelPosition: 'right'\r\n} satisfies Partial<RadioConfig>;\r\n\r\nexport const RADIO_CONFIG = new InjectionToken<Partial<RadioConfig>>('RADIO_CONFIG', {\r\n factory: () => RADIO_DEFAULTS,\r\n});\r\n\r\nexport const RADIO_STYLES = new InjectionToken<Record<string, string>[]>('RADIO_STYLES', {\r\n factory: () => []\r\n});\r\n\r\n/**\r\n * One radio button.\r\n *\r\n * Inside a `psh-radio-group` it is presentational: the group owns the value and the radio\r\n * asks whether its own `value` is the selected one. On its own it still works as a standalone\r\n * two-way control through `[(checked)]`.\r\n *\r\n * That split is what let it become full-signal. It used to mix `@Input` setters and\r\n * `EventEmitter` with `output()` in one class, on the stated grounds that *« model() would\r\n * auto-emit checkedChange on .set() »* — which is not what `model()` does: a parent writing\r\n * the input does not emit, only the component writing it does. The real problem was that a\r\n * lone radio had no owner for its value. The group is that owner.\r\n *\r\n * Its arrow-key handlers used to be two empty methods commented *« Implementation requires\r\n * radio group context »*. They live on the group now, where that context exists.\r\n */\r\n@Component({\r\n selector: 'psh-radio',\r\n imports: [],\r\n templateUrl: './radio.component.html',\r\n styleUrls: ['./radio.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.psh-radio-disabled]': 'isDisabled()',\r\n '[class.psh-radio-error]': '!!error()',\r\n '[class.psh-radio-success]': '!!success()',\r\n '[class.psh-radio-small]': 'effectiveSize() === \"small\"',\r\n '[class.psh-radio-large]': 'effectiveSize() === \"large\"',\r\n '[attr.data-state]': 'state()'\r\n }\r\n})\r\nexport class PshRadioComponent<T = unknown> implements AfterViewInit {\r\n private config = inject(RADIO_CONFIG);\r\n private styles = inject(RADIO_STYLES, { optional: true }) ?? [];\r\n private uniqueId = pshUniqueId('radio');\r\n /** Holds the `label` input or the projected content — whichever provides the visible label. */\r\n private readonly labelSlot = viewChild<ElementRef<HTMLElement>>('labelSlot');\r\n private readonly radioInput = viewChild<ElementRef<HTMLInputElement>>('radioInput');\r\n\r\n /**\r\n * The group this radio belongs to, if any. Injected through a token rather than the\r\n * component class: the group reads its radios with `contentChildren`, so importing the\r\n * class in both directions would be a cycle.\r\n */\r\n private readonly group = inject(PSH_RADIO_GROUP, { optional: true });\r\n\r\n /** Standalone selection state. Inside a group, {@link isChecked} is what matters. */\r\n readonly checked = model(this.config.checked ?? false);\r\n readonly disabled = model(this.config.disabled ?? false);\r\n\r\n readonly required = input(this.config.required ?? false);\r\n\r\n // Regular inputs\r\n readonly label = input('');\r\n readonly error = input<string | null | undefined>(null);\r\n readonly success = input<string | null | undefined>(null);\r\n /** Guidance shown when there is neither an error nor a success message. */\r\n readonly hint = input<string | null | undefined>(null);\r\n\r\n /**\r\n * Extra ids for `aria-describedby`. **Merged** with the control's own — the id of its error,\r\n * success or hint message — never replacing them.\r\n */\r\n readonly ariaDescribedBy = input<string>();\r\n\r\n /**\r\n * Ids of the elements that name this control, for the cases a visible `<label>` cannot\r\n * cover. Merged with anything the control already points at.\r\n */\r\n readonly ariaLabelledBy = input<string>();\r\n readonly name = input('');\r\n readonly value = input<T | undefined>(undefined);\r\n readonly ariaLabel = input<string>();\r\n readonly size = input<RadioSize>(this.config.size ?? 'medium');\r\n readonly labelPosition = input<'left' | 'right'>(this.config.labelPosition ?? 'right');\r\n\r\n // Content projection tracking\r\n protected readonly hasProjectedContent = signal(false);\r\n\r\n readonly valueChange = output<T | undefined>();\r\n\r\n /** Whether this radio is the selected one — decided by the group when there is one. */\r\n readonly isChecked = computed(() =>\r\n this.group ? this.group.value() === this.value() : this.checked(),\r\n );\r\n\r\n /** Disabled by itself, or by the whole group. */\r\n readonly isDisabled = computed(() => this.disabled() || (this.group?.disabled() ?? false));\r\n\r\n /** The group's `name` wins: a native radio set is defined by sharing one. */\r\n protected readonly effectiveName = computed(() => this.group?.name() ?? this.name());\r\n\r\n /** Radios in one set should be one size, so the group's wins when there is a group. */\r\n protected readonly effectiveSize = computed(() => this.group?.size() ?? this.size());\r\n\r\n protected readonly effectiveRequired = computed(\r\n () => this.group?.required() ?? this.required(),\r\n );\r\n\r\n /**\r\n * Roving tabindex: one Tab stop per group rather than one per radio, which is what makes a\r\n * radio set a single stop with arrow keys inside it. The selected radio is the stop; when\r\n * nothing is selected yet, the first enabled one is.\r\n */\r\n protected readonly tabIndex = computed(() => {\r\n if (this.isDisabled()) return -1;\r\n if (!this.group) return 0;\r\n if (this.isChecked()) return 0;\r\n return this.group.value() == null && this.isFirstEnabled() ? 0 : -1;\r\n });\r\n\r\n // Computed values\r\n readonly customStyles = computed(() => Object.assign({}, ...this.styles));\r\n\r\n readonly state = computed(() => this.getState());\r\n\r\n readonly computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const labelText = this.label();\r\n if (labelText) return labelText;\r\n\r\n // No `aria-label` at all when nothing is declared: the `<label>` wrapping the input\r\n // already names it from a projected label. A hard-coded fallback would override that\r\n // visible text for screen readers (WCAG 2.5.3 \"Label in Name\").\r\n return undefined;\r\n });\r\n\r\n readonly errorMessageId = computed(() =>\r\n this.error() ? `${this.uniqueId}-error` : undefined\r\n );\r\n\r\n readonly successMessageId = computed(() =>\r\n this.success() ? `${this.uniqueId}-success` : undefined\r\n );\r\n\r\n readonly hintMessageId = computed(() =>\r\n this.hint() ? `${this.uniqueId}-hint` : undefined\r\n );\r\n\r\n // error, success and hint are mutually exclusive in the template (@if/@else if), so\r\n // aria-describedby references whichever message is actually rendered — in the same order.\r\n readonly describedBy = computed(() =>\r\n pshJoinAriaIds(\r\n this.errorMessageId() ?? this.successMessageId() ?? this.hintMessageId(),\r\n this.ariaDescribedBy(),\r\n ),\r\n );\r\n\r\n ngAfterViewInit(): void {\r\n if (!isDevMode()) return;\r\n\r\n // Read the rendered label slot rather than the `label` input alone: a projected\r\n // label (`<psh-radio>Accept terms</psh-radio>`) is just as accessible, and\r\n // `contentChild` cannot see a bare text node. Checked once, after the first render.\r\n const hasVisibleLabel = !!this.labelSlot()?.nativeElement.textContent?.trim();\r\n if (!hasVisibleLabel && !this.ariaLabel() && !this.hasProjectedContent()) {\r\n console.warn(\r\n '[psh-radio] No accessible label provided. Please use label input, ariaLabel input, or projected content.'\r\n );\r\n }\r\n }\r\n\r\n /** Focuses the native input. The group calls this when arrow keys move the selection. */\r\n focus(): void {\r\n this.radioInput()?.nativeElement.focus();\r\n }\r\n\r\n /**\r\n * Whether this is the first enabled radio of its group, which only matters for the roving\r\n * tabindex before anything is selected. Read from the DOM rather than from the group's\r\n * `contentChildren`, because asking the group here would make the two read each other's\r\n * signals during the same computation.\r\n */\r\n private isFirstEnabled(): boolean {\r\n const el = this.radioInput()?.nativeElement;\r\n const group = el?.closest('psh-radio-group');\r\n if (!el || !group) return false;\r\n return group.querySelector('psh-radio:not(.psh-radio-disabled) input') === el;\r\n }\r\n\r\n private getState(): string {\r\n if (this.isDisabled()) return 'disabled';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n return this.isChecked() ? 'checked' : 'unchecked';\r\n }\r\n\r\n /**\r\n * Declares whether a label is projected. No longer required — projected content is now\r\n * detected from the rendered label slot. Kept for backwards compatibility: calling it\r\n * with `true` still suppresses the dev-only accessibility warning.\r\n */\r\n updateProjectedContent(hasContent: boolean): void {\r\n this.hasProjectedContent.set(hasContent);\r\n }\r\n\r\n handleChange(): void {\r\n if (this.isDisabled()) return;\r\n\r\n if (this.group) {\r\n // The group owns the value, so it decides — including whether anything changed at all.\r\n this.group.select(this.value() as T);\r\n return;\r\n }\r\n\r\n if (!this.checked()) {\r\n this.checked.set(true);\r\n this.valueChange.emit(this.value());\r\n }\r\n }\r\n\r\n protected handleKeydown(event: KeyboardEvent): void {\r\n if (this.isDisabled()) return;\r\n\r\n switch (event.key) {\r\n case ' ':\r\n case 'Spacebar':\r\n case 'Enter':\r\n event.preventDefault();\r\n this.handleChange();\r\n break;\r\n }\r\n // Arrow keys are the group's business: moving between radios needs to know what the\r\n // other radios are. See PshRadioGroupComponent.handleKeydown.\r\n }\r\n}\r\n","<div class=\"psh-radio-container\">\r\n <label class=\"psh-radio-label\" [class.psh-label-left]=\"labelPosition() === 'left'\">\r\n <input\r\n #radioInput\r\n type=\"radio\"\r\n class=\"psh-radio-input\"\r\n [checked]=\"isChecked()\"\r\n [disabled]=\"isDisabled()\"\r\n [required]=\"effectiveRequired()\"\r\n [name]=\"effectiveName()\"\r\n [tabIndex]=\"tabIndex()\"\r\n [attr.value]=\"value()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-required]=\"effectiveRequired() || null\"\r\n [attr.aria-invalid]=\"error() ? 'true' : null\"\r\n [attr.aria-checked]=\"isChecked()\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n (change)=\"handleChange()\"\r\n (keydown)=\"handleKeydown($event)\"\r\n />\r\n <span\r\n class=\"psh-radio-control\"\r\n [class.psh-error]=\"!!error()\"\r\n [class.psh-success]=\"!!success()\"\r\n >\r\n <span class=\"psh-radio-dot\"></span>\r\n </span>\r\n <span class=\"psh-radio-text\" #labelSlot>\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <ng-content></ng-content>\r\n }\r\n </span>\r\n </label>\r\n\r\n @if (error()) {\r\n <div [id]=\"errorMessageId()\" class=\"psh-radio-error\" role=\"alert\">\r\n {{ error() }}\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"successMessageId()\" class=\"psh-radio-success\" role=\"status\">\r\n {{ success() }}\r\n </div>\r\n } @else if (hint()) {\r\n <div [id]=\"hintMessageId()\" class=\"psh-radio-hint\">\r\n {{ hint() }}\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n InjectionToken,\r\n computed,\r\n contentChildren,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n effect,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\r\nimport type { FormValueControl } from '@angular/forms/signals';\r\n\r\nimport { PshRadioComponent } from './radio.component';\r\nimport { PSH_RADIO_GROUP, PshRadioGroupApi } from './radio-group.token';\r\nimport { RadioSize } from './radio.types';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\nimport { pshRequiredError } from '../../utils/required-validator';\r\nimport { pshJoinAriaIds } from '../../utils/aria';\r\n\r\nexport interface RadioGroupConfig {\r\n size: RadioSize;\r\n orientation: 'vertical' | 'horizontal';\r\n required: boolean;\r\n}\r\n\r\nconst RADIO_GROUP_DEFAULTS = {\r\n size: 'medium',\r\n orientation: 'vertical',\r\n required: false,\r\n} satisfies Partial<RadioGroupConfig>;\r\n\r\nexport const RADIO_GROUP_CONFIG = new InjectionToken<Partial<RadioGroupConfig>>(\r\n 'RADIO_GROUP_CONFIG',\r\n { factory: () => RADIO_GROUP_DEFAULTS },\r\n);\r\n\r\n/**\r\n * A set of radio buttons, and the thing that carries the form contract for them.\r\n *\r\n * `psh-radio` never could. The value of a radio in a form is not a boolean per button, it is\r\n * *which one of the set is selected* — so there was nothing to bind a form control to, and\r\n * `formControlName`, `[(ngModel)]` and `[formField]` all did nothing on a radio. The group is\r\n * what was missing, not a fix to the radio.\r\n *\r\n * It owns the value; the radios ask. That also removes the reason `psh-radio` avoided\r\n * `model()`: a radio no longer has its own value to guard against echoing.\r\n *\r\n * Supports all three binding styles:\r\n *\r\n * @example\r\n * <psh-radio-group [(value)]=\"plan\" label=\"Plan\"> <!-- plain two-way -->\r\n * <psh-radio-group formControlName=\"plan\"> <!-- Reactive Forms -->\r\n * <psh-radio-group [field]=\"f.plan\"> <!-- Signal Forms -->\r\n * <psh-radio value=\"free\" label=\"Free\" />\r\n * <psh-radio value=\"pro\" label=\"Pro\" />\r\n * </psh-radio-group>\r\n */\r\n@Component({\r\n selector: 'psh-radio-group',\r\n templateUrl: './radio-group.component.html',\r\n styleUrls: ['./radio-group.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: NG_VALIDATORS, useExisting: PshRadioGroupComponent, multi: true },\r\n { provide: NG_VALUE_ACCESSOR, useExisting: PshRadioGroupComponent, multi: true },\r\n { provide: PSH_RADIO_GROUP, useExisting: PshRadioGroupComponent },\r\n ],\r\n host: {\r\n role: 'radiogroup',\r\n '[class.psh-radio-group]': 'true',\r\n '[class.psh-horizontal]': 'orientation() === \"horizontal\"',\r\n '[class.psh-radio-group-disabled]': 'disabled()',\r\n '[attr.aria-label]': 'ariaLabel() || null',\r\n '[attr.aria-labelledby]': 'labelId()',\r\n '[attr.aria-describedby]': 'describedBy()',\r\n '[attr.aria-required]': 'required() || null',\r\n '[attr.aria-invalid]': 'error() ? \"true\" : null',\r\n '[attr.aria-orientation]': 'orientation()',\r\n '(keydown)': 'handleKeydown($event)',\r\n '(focusout)': 'handleFocusOut($event)',\r\n },\r\n})\r\nexport class PshRadioGroupComponent<T = unknown>\r\n implements ControlValueAccessor, FormValueControl<T | null>, PshRadioGroupApi<T>, Validator\r\n{\r\n private readonly config = inject(RADIO_GROUP_CONFIG);\r\n private readonly uniqueId = pshUniqueId('radio-group');\r\n\r\n private onChange: (value: T | null) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n private onValidatorChange: () => void = () => {};\r\n\r\n /** Required by `FormValueControl`: the group is what a field binds to. */\r\n readonly value = model<T | null>(null);\r\n readonly disabled = model(false);\r\n readonly touched = model(false);\r\n\r\n /**\r\n * Emitted when the user leaves the group.\r\n *\r\n * `FormUiControl` declares this, and the `Field` directive listens to **it** rather than to\r\n * `touchedChange`, so blur-based rules such as `debounce('blur')` depend on it.\r\n */\r\n readonly touch = output<void>();\r\n\r\n /**\r\n * The shared `name`. Defaults to a generated one so two groups on a page never merge into\r\n * a single native radio set by accident.\r\n */\r\n readonly name = input(this.uniqueId);\r\n readonly required = input(this.config.required ?? false);\r\n readonly size = input<RadioSize>(this.config.size ?? 'medium');\r\n readonly orientation = input<'vertical' | 'horizontal'>(\r\n this.config.orientation ?? 'vertical',\r\n );\r\n\r\n /** Visible group label, rendered as a `<legend>`-equivalent and referenced by ARIA. */\r\n readonly label = input('');\r\n readonly ariaLabel = input<string>();\r\n readonly error = input<string | null | undefined>(null);\r\n readonly success = input<string | null | undefined>(null);\r\n /** Guidance shown when there is neither an error nor a success message. */\r\n readonly hint = input<string | null | undefined>(null);\r\n\r\n /**\r\n * Extra ids for `aria-describedby`. **Merged** with the control's own — the id of its error,\r\n * success or hint message — never replacing them.\r\n */\r\n readonly ariaDescribedBy = input<string>();\r\n\r\n /**\r\n * Ids of the elements that name this control, for the cases a visible `<label>` cannot\r\n * cover. Merged with anything the control already points at.\r\n */\r\n readonly ariaLabelledBy = input<string>();\r\n\r\n protected readonly radios = contentChildren(PshRadioComponent);\r\n\r\n protected readonly labelId = computed(() =>\r\n this.label() && !this.ariaLabel() ? `${this.uniqueId}-label` : null,\r\n );\r\n protected readonly errorId = computed(() =>\r\n this.error() ? `${this.uniqueId}-error` : null,\r\n );\r\n protected readonly successId = computed(() =>\r\n this.success() ? `${this.uniqueId}-success` : null,\r\n );\r\n protected readonly hintId = computed(() => (this.hint() ? `${this.uniqueId}-hint` : null));\r\n\r\n // Same order as the template's @if/@else-if chain: aria-describedby must name the message\r\n // that is actually rendered, not the first one that happens to be set.\r\n protected readonly describedBy = computed(() =>\r\n pshJoinAriaIds(\r\n this.errorId() ?? this.successId() ?? this.hintId(),\r\n this.ariaDescribedBy(),\r\n ),\r\n );\r\n\r\n /** Called by a child radio. The group owns the value, so the radio asks rather than sets. */\r\n select(value: T): void {\r\n if (this.disabled()) return;\r\n if (this.value() === value) return;\r\n\r\n // `value` is a model, so setting it already emits `valueChange`. Declaring one as well\r\n // is NG1054: \"Output 'valueChange' is bound to both 'value' and 'valueChange'\".\r\n this.value.set(value);\r\n this.onChange(value);\r\n this.markTouched();\r\n }\r\n\r\n markTouched(): void {\r\n this.onTouched();\r\n this.touched.set(true);\r\n this.touch.emit();\r\n }\r\n\r\n /**\r\n * Arrow keys move *and select*, which is the APG radiogroup behaviour — a radio set has no\r\n * \"focused but unselected\" state to navigate through. Disabled radios are skipped, and the\r\n * ends wrap.\r\n */\r\n protected handleKeydown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n\r\n const enabled = this.radios().filter(radio => !radio.isDisabled());\r\n if (enabled.length === 0) return;\r\n\r\n const current = enabled.findIndex(radio => radio.isChecked());\r\n let next: number;\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n case 'ArrowRight':\r\n next = current < 0 ? 0 : (current + 1) % enabled.length;\r\n break;\r\n case 'ArrowUp':\r\n case 'ArrowLeft':\r\n next = current < 0 ? enabled.length - 1 : (current - 1 + enabled.length) % enabled.length;\r\n break;\r\n case 'Home':\r\n next = 0;\r\n break;\r\n case 'End':\r\n next = enabled.length - 1;\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n const target = enabled[next];\r\n if (!target) return;\r\n\r\n event.preventDefault();\r\n this.select(target.value() as T);\r\n target.focus();\r\n }\r\n\r\n /**\r\n * Touched when focus leaves the *group*, not when it moves between its radios — arrow\r\n * navigation blurs one radio and focuses the next, which is not the user leaving.\r\n */\r\n protected handleFocusOut(event: FocusEvent): void {\r\n const next = event.relatedTarget as Node | null;\r\n const host = (event.currentTarget as HTMLElement) ?? null;\r\n if (next && host?.contains(next)) return;\r\n this.markTouched();\r\n }\r\n\r\n constructor() {\r\n // A value change revalidates by itself; a change to `required` does not — Angular has\r\n // no reason to suspect the validator's answer moved. This is what the callback is for.\r\n effect(() => {\r\n this.required();\r\n this.onValidatorChange();\r\n });\r\n }\r\n\r\n writeValue(value: T | null): void {\r\n this.value.set(value ?? null);\r\n }\r\n\r\n registerOnChange(fn: (value: T | 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.set(isDisabled);\r\n }\r\n\r\n /** Focuses the selected radio, or the first enabled one when nothing is selected. */\r\n focus(): void {\r\n const enabled = this.radios().filter(radio => !radio.isDisabled());\r\n const target = enabled.find(radio => radio.isChecked()) ?? enabled[0];\r\n target?.focus();\r\n }\r\n\r\n /**\r\n * Makes `required` a real constraint rather than an asterisk.\r\n *\r\n * Re-run whenever `required` or the value changes: `registerOnValidatorChange` gives us\r\n * the callback that tells Angular to revalidate, and an effect fires it.\r\n */\r\n validate(): ValidationErrors | null {\r\n return pshRequiredError(this.required(), this.value() === null || this.value() === undefined);\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.onValidatorChange = fn;\r\n }\r\n\r\n}\r\n","@if (label()) {\r\n <span [id]=\"labelId()\" class=\"psh-radio-group-label\">\r\n {{ label() }}\r\n @if (required()) {\r\n <span class=\"psh-required-mark\" aria-hidden=\"true\">*</span>\r\n }\r\n </span>\r\n}\r\n\r\n<div class=\"psh-radio-group-items\">\r\n <ng-content></ng-content>\r\n</div>\r\n\r\n@if (error()) {\r\n <div [id]=\"errorId()!\" class=\"psh-radio-group-error\" role=\"alert\">{{ error() }}</div>\r\n} @else if (success()) {\r\n <div [id]=\"successId()!\" class=\"psh-radio-group-success\" role=\"status\">{{ success() }}</div>\r\n} @else if (hint()) {\r\n <div [id]=\"hintId()!\" class=\"psh-radio-group-hint\">{{ hint() }}</div>\r\n}\r\n","/**\r\n * Application-wide defaults for `psh-select`.\r\n *\r\n * Provide it to set a default once for every psh-select in the application:\r\n *\r\n * provideHelix({ components: { select: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { SelectConfig } from './select.types';\r\n\r\nconst SELECT_DEFAULTS = {\r\n appearance: 'outline',\r\n size: 'medium',\r\n searchable: false,\r\n clearable: false,\r\n fullWidth: false,\r\n placeholder: 'Select an option',\r\n multiplePlaceholder: 'Select options',\r\n noResultsText: 'No results',\r\n clearLabel: 'Clear selection',\r\n searchPlaceholder: 'Search...',\r\n} satisfies Partial<SelectConfig>;\r\n\r\nexport const SELECT_CONFIG = new InjectionToken<Partial<SelectConfig>>('SELECT_CONFIG', {\r\n factory: () => SELECT_DEFAULTS,\r\n});\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n effect,\r\n OnDestroy,\r\n InjectionToken,\r\n PLATFORM_ID\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { isPlatformBrowser, DOCUMENT } from '@angular/common';\r\nimport { PshFocusTrapDirective } from '../../a11y/focus-trap.directive';\r\nimport { SidebarMode, SidebarPosition, SidebarConfig } from './sidebar.types';\r\n\r\nconst SIDEBAR_DEFAULTS = {\r\n mode: 'fixed',\r\n position: 'left',\r\n width: '250px',\r\n breakpoint: '768px',\r\n autoFocus: true,\r\n ariaLabel: 'Sidebar navigation',\r\n closeOnBackdrop: true,\r\n closeOnEscape: true\r\n} satisfies Partial<SidebarConfig>;\r\n\r\nexport const SIDEBAR_CONFIG = new InjectionToken<Partial<SidebarConfig>>('SIDEBAR_CONFIG', {\r\n factory: () => SIDEBAR_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-sidebar',\r\n imports: [PshFocusTrapDirective],\r\n templateUrl: './sidebar.component.html',\r\n styleUrls: ['./sidebar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n // `complementary` allows neither aria-expanded nor aria-modal. aria-expanded belongs\r\n // on the trigger outside this component; aria-modal only exists on a dialog, which is\r\n // exactly what an open overlay sidebar is — so the role follows the mode.\r\n '[attr.role]': 'effectiveMode() === \"overlay\" ? \"dialog\" : \"complementary\"',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n '[attr.aria-hidden]': '!open()',\r\n '[attr.aria-modal]': 'effectiveMode() === \"overlay\" && open() ? \"true\" : null',\r\n '[attr.inert]': 'open() ? null : \"\"',\r\n '[attr.data-state]': 'state()'\r\n }\r\n})\r\nexport class PshSidebarComponent implements OnDestroy {\r\n private readonly config = inject(SIDEBAR_CONFIG);\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n private mediaQueryList: MediaQueryList | null = null;\r\n private pendingFrame: number | null = null;\r\n private mediaQueryHandler: ((e: MediaQueryListEvent) => void) | null = null;\r\n\r\n readonly open = model(false);\r\n readonly mode = input<SidebarMode>(this.config.mode ?? 'fixed');\r\n readonly position = input<SidebarPosition>(this.config.position ?? 'left');\r\n readonly width = input<string>(this.config.width ?? '250px');\r\n readonly breakpoint = input<string>(this.config.breakpoint ?? '768px');\r\n readonly autoFocus = input<boolean>(this.config.autoFocus ?? true);\r\n readonly ariaLabelInput = input<string | undefined>(undefined, { alias: 'ariaLabel' });\r\n readonly ariaLabel = computed(\r\n () => this.ariaLabelInput() ?? pshResolveConfigValue(this.config.ariaLabel) ?? 'Sidebar navigation',\r\n );\r\n readonly closeOnBackdrop = input<boolean>(this.config.closeOnBackdrop ?? true);\r\n readonly closeOnEscape = input<boolean>(this.config.closeOnEscape ?? true);\r\n\r\n // Was `toggle`, the only infinitive output in the library and a native event name, which\r\n // needed an eslint exemption to exist. `toggled` matches collapse — same idea, same word —\r\n // and the clash is gone with it.\r\n toggled = output<boolean>();\r\n opened = output<void>();\r\n closed = output<void>();\r\n transitionStarted = output<boolean>();\r\n\r\n private readonly mobileSignal = signal(false);\r\n private previousOpenState: boolean | null = null;\r\n\r\n readonly isMobile = computed(() => this.mobileSignal());\r\n readonly effectiveMode = computed(() => this.isMobile() ? 'overlay' : this.mode());\r\n readonly state = computed(() => this.getState());\r\n\r\n private readonly escapeHandler = (event: KeyboardEvent) => {\r\n if (event.key === 'Escape' && this.closeOnEscape() && this.effectiveMode() === 'overlay') {\r\n this.closeSidebar();\r\n }\r\n };\r\n\r\n private getState(): string {\r\n if (this.isMobile()) return 'mobile';\r\n if (this.open()) return 'open';\r\n return this.mode();\r\n }\r\n\r\n constructor() {\r\n effect(() => {\r\n const bp = this.breakpoint();\r\n this.setupMediaQuery(bp);\r\n });\r\n\r\n effect(() => {\r\n const isOpen = this.open();\r\n const wasOpen = this.previousOpenState;\r\n this.previousOpenState = isOpen;\r\n\r\n if (wasOpen === null) return;\r\n\r\n if (isOpen && !wasOpen) {\r\n this.onSidebarOpen();\r\n } else if (!isOpen && wasOpen) {\r\n this.onSidebarClose();\r\n }\r\n });\r\n }\r\n\r\n private setupMediaQuery(breakpoint: string): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n this.cleanupMediaQuery();\r\n\r\n const view = this.document.defaultView;\r\n if (!view) return;\r\n\r\n this.mediaQueryList = view.matchMedia(`(max-width: ${breakpoint})`);\r\n this.mobileSignal.set(this.mediaQueryList.matches);\r\n\r\n this.mediaQueryHandler = (e: MediaQueryListEvent) => {\r\n this.mobileSignal.set(e.matches);\r\n };\r\n\r\n this.mediaQueryList.addEventListener('change', this.mediaQueryHandler);\r\n }\r\n\r\n private cleanupMediaQuery(): void {\r\n if (this.mediaQueryList && this.mediaQueryHandler) {\r\n this.mediaQueryList.removeEventListener('change', this.mediaQueryHandler);\r\n this.mediaQueryList = null;\r\n this.mediaQueryHandler = null;\r\n }\r\n }\r\n\r\n private onSidebarOpen(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n // Focus trap + initial focus + focus restoration are handled by\r\n // PshFocusTrapDirective on the .sidebar element (see the template).\r\n this.addEventListeners();\r\n\r\n this.scheduleEmit(() => this.opened.emit());\r\n }\r\n\r\n private onSidebarClose(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n this.removeEventListeners();\r\n\r\n this.scheduleEmit(() => this.closed.emit());\r\n }\r\n\r\n /**\r\n * Defers an emit by one frame so listeners see the panel after it has been laid out.\r\n * The handle is kept so a pending frame cannot fire from a destroyed component.\r\n */\r\n private scheduleEmit(emit: () => void): void {\r\n const view = this.document.defaultView;\r\n if (!view) return;\r\n\r\n if (this.pendingFrame !== null) view.cancelAnimationFrame(this.pendingFrame);\r\n this.pendingFrame = view.requestAnimationFrame(() => {\r\n this.pendingFrame = null;\r\n emit();\r\n });\r\n }\r\n\r\n private addEventListeners(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n this.document.addEventListener('keydown', this.escapeHandler);\r\n }\r\n\r\n private removeEventListeners(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n this.document.removeEventListener('keydown', this.escapeHandler);\r\n }\r\n\r\n toggleSidebar(): void {\r\n const newState = !this.open();\r\n this.transitionStarted.emit(newState);\r\n this.open.set(newState);\r\n this.toggled.emit(newState);\r\n }\r\n\r\n closeSidebar(): void {\r\n if (this.open()) {\r\n this.transitionStarted.emit(false);\r\n this.open.set(false);\r\n this.toggled.emit(false);\r\n }\r\n }\r\n\r\n handleBackdropClick(): void {\r\n if (this.closeOnBackdrop()) {\r\n this.closeSidebar();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.cleanupMediaQuery();\r\n this.removeEventListeners();\r\n\r\n if (this.pendingFrame !== null) {\r\n this.document.defaultView?.cancelAnimationFrame(this.pendingFrame);\r\n this.pendingFrame = null;\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"psh-sidebar\"\r\n [class.psh-open]=\"open()\"\r\n [class.psh-fixed]=\"effectiveMode() === 'fixed'\"\r\n [class.psh-overlay]=\"effectiveMode() === 'overlay'\"\r\n [class.psh-left]=\"position() === 'left'\"\r\n [class.psh-right]=\"position() === 'right'\"\r\n [style.width]=\"width()\"\r\n [style.--psh-sidebar-width]=\"width()\"\r\n [pshFocusTrap]=\"open()\"\r\n [pshFocusTrapAutoFocus]=\"autoFocus()\"\r\n>\r\n <div class=\"psh-sidebar-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n\r\n@if (effectiveMode() === 'overlay' && open()) {\r\n <div\r\n class=\"psh-sidebar-backdrop\"\r\n role=\"presentation\"\r\n (click)=\"handleBackdropClick()\"\r\n ></div>\r\n}","import {\r\n computed, ChangeDetectionStrategy, Component, DestroyRef, inject, input, signal, InjectionToken, PLATFORM_ID } from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { SpinLoaderVariant, SpinLoaderSize, SpinLoaderColor, SpinLoaderConfig } from './spinloader.types';\r\n\r\nconst SPINLOADER_DEFAULTS = {\r\n variant: 'circle',\r\n size: 'medium',\r\n color: 'primary',\r\n ariaLabel: 'Loading',\r\n} satisfies Partial<SpinLoaderConfig>;\r\n\r\nexport const SPINLOADER_CONFIG = new InjectionToken<Partial<SpinLoaderConfig>>('SPINLOADER_CONFIG', {\r\n factory: () => SPINLOADER_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-spinloader',\r\n imports: [],\r\n templateUrl: './spinloader.component.html',\r\n styleUrls: ['./spinloader.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n 'role': 'status',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n '[attr.aria-live]': 'ariaLive()',\r\n '[attr.aria-busy]': 'true',\r\n '[attr.data-state]': 'variant()',\r\n '[class.psh-small]': 'size() === \"small\"',\r\n '[class.psh-large]': 'size() === \"large\"',\r\n '[class.psh-reduce-motion]': 'reduceMotion()',\r\n }\r\n})\r\nexport class PshSpinLoaderComponent {\r\n private config = inject(SPINLOADER_CONFIG);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n readonly variant = input<SpinLoaderVariant>(this.config.variant ?? 'circle');\r\n readonly size = input<SpinLoaderSize>(this.config.size ?? 'medium');\r\n readonly color = input<SpinLoaderColor>(this.config.color ?? 'primary');\r\n readonly label = input<string>();\r\n readonly ariaLabelInput = input<string | undefined>(undefined, { alias: 'ariaLabel' });\r\n readonly ariaLabel = computed(\r\n () => this.ariaLabelInput() ?? pshResolveConfigValue(this.config.ariaLabel) ?? 'Chargement en cours',\r\n );\r\n readonly ariaLive = input<'polite' | 'assertive'>('polite');\r\n\r\n readonly reduceMotion = signal(false);\r\n\r\n constructor() {\r\n // Read the media query once at construction so the very first browser render is\r\n // already correct, and keep the listener for later OS-level changes. Not an effect:\r\n // there is no signal dependency to track, and the listener needs explicit teardown.\r\n if (!this.isBrowser) return;\r\n\r\n const view = this.document.defaultView;\r\n if (!view || typeof view.matchMedia !== 'function') return;\r\n\r\n const mediaQuery = view.matchMedia('(prefers-reduced-motion: reduce)');\r\n this.reduceMotion.set(mediaQuery.matches);\r\n\r\n const handler = (e: MediaQueryListEvent) => this.reduceMotion.set(e.matches);\r\n mediaQuery.addEventListener('change', handler);\r\n this.destroyRef.onDestroy(() => mediaQuery.removeEventListener('change', handler));\r\n }\r\n}\r\n","@switch (variant()) {\r\n @case ('circle') {\r\n <div class=\"psh-spinner-circle\" [class]=\"'psh-' + color()\"></div>\r\n }\r\n @case ('dots') {\r\n <div class=\"psh-spinner-dots\" [class]=\"'psh-' + color()\">\r\n <div class=\"psh-dot\"></div>\r\n <div class=\"psh-dot\"></div>\r\n <div class=\"psh-dot\"></div>\r\n </div>\r\n }\r\n @case ('pulse') {\r\n <div class=\"psh-spinner-pulse\" [class]=\"'psh-' + color()\">\r\n <div class=\"psh-pulse\"></div>\r\n <div class=\"psh-pulse\"></div>\r\n <div class=\"psh-pulse\"></div>\r\n </div>\r\n }\r\n}\r\n\r\n@if (label()) {\r\n <span class=\"psh-spinner-label\">{{ label() }}</span>\r\n}\r\n","/**\r\n * Application-wide defaults for `psh-stat-card`.\r\n *\r\n * Provide it to set a default once for every psh-stat-card in the application:\r\n *\r\n * provideHelix({ components: { statCard: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { StatCardConfig } from './stat-card.types';\r\n\r\nconst STAT_CARD_DEFAULTS = {\r\n appearance: 'elevated',\r\n layout: 'horizontal',\r\n hoverable: false,\r\n interactive: false,\r\n rowDirection: false,\r\n} satisfies Partial<StatCardConfig>;\r\n\r\nexport const STAT_CARD_CONFIG = new InjectionToken<Partial<StatCardConfig>>('STAT_CARD_CONFIG', {\r\n factory: () => STAT_CARD_DEFAULTS,\r\n});\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * What a `psh-flow-step` needs from the indicator it sits in: the id prefix its tab uses.\r\n *\r\n * See `PSH_STEPPER` for why this is a token and not an import, and for what the global ids\r\n * `flow-step-0` / `flow-panel-0` did to a page holding two of these.\r\n */\r\nexport interface PshStateFlowApi {\r\n /** Unique per indicator instance. Tabs are `<prefix>-tab-<i>`, panels `<prefix>-panel-<i>`. */\r\n readonly idPrefix: string;\r\n}\r\n\r\nexport const PSH_STATE_FLOW = new InjectionToken<PshStateFlowApi>('PSH_STATE_FLOW');\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n input,\r\n signal\r\n} from '@angular/core';\r\nimport { PSH_STATE_FLOW } from './state-flow-indicator.token';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\n/**\r\n * One step of a `psh-state-flow-indicator`, and the panel that belongs to it.\r\n *\r\n * Until 7.0.0 this component was `template: ''` with a permanent `display: none`, so anything\r\n * projected into it was **silently discarded** — and `psh-state-flow-indicator` had no\r\n * `<ng-content>` either, so there was nowhere for it to go. A developer copying the\r\n * `psh-step` pattern, which does project, got a blank screen and no error.\r\n *\r\n * It now behaves like `psh-step`: the active step's content is shown, the others are hidden,\r\n * and each is a `tabpanel` labelled by its tab.\r\n */\r\n@Component({\r\n selector: 'psh-flow-step',\r\n template: `<ng-content />`,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.psh-flow-step-content]': 'true',\r\n '[class.psh-active]': 'isActive()',\r\n '[attr.role]': '\"tabpanel\"',\r\n '[attr.aria-labelledby]': 'idPrefix + \"-tab-\" + index()',\r\n '[attr.id]': 'idPrefix + \"-panel-\" + index()',\r\n '[attr.tabindex]': 'isActive() ? 0 : -1',\r\n '[style.display]': 'isActive() ? \"block\" : \"none\"'\r\n }\r\n})\r\nexport class PshFlowStepComponent {\r\n /** The indicator's id prefix; see `PshStepComponent` for the fallback. */\r\n protected readonly idPrefix =\r\n inject(PSH_STATE_FLOW, { optional: true })?.idPrefix ?? pshUniqueId('flow-step');\r\n\r\n readonly title = input.required<string>();\r\n /** Secondary line under the title. Parity with `psh-step`, which had it and this did not. */\r\n readonly subtitle = input<string>();\r\n /** Phosphor icon name, shown instead of the state icon. Parity with `psh-step`. */\r\n readonly icon = input<string>();\r\n readonly disabled = input(false);\r\n readonly completed = input(false);\r\n readonly loading = input(false);\r\n readonly error = input<string | null | undefined>(null);\r\n readonly warning = input<string | null | undefined>(null);\r\n /** Parity with `psh-step`. */\r\n readonly success = input<string | null | undefined>(null);\r\n\r\n private readonly _index = signal(0);\r\n private readonly _isActive = signal(false);\r\n\r\n readonly index = this._index.asReadonly();\r\n readonly isActive = this._isActive.asReadonly();\r\n\r\n setIndex(value: number): void {\r\n this._index.set(value);\r\n }\r\n\r\n setActive(value: boolean): void {\r\n this._isActive.set(value);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n InjectionToken,\r\n afterNextRender\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { PshNavigationError } from '../../types/semantic.types';\r\nimport { StateFlowIndicatorSize, FlowStepConfig, StateFlowIndicatorConfig, StateFlowIndicatorAriaLabels } from './state-flow-indicator.types';\r\nimport { PshFlowStepComponent } from './flow-step.component';\r\nimport { PSH_STATE_FLOW, PshStateFlowApi } from './state-flow-indicator.token';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\nconst DEFAULT_ARIA_LABELS: StateFlowIndicatorAriaLabels = {\r\n step: 'Step',\r\n completed: 'Step completed',\r\n active: 'Step active',\r\n incomplete: 'Step incomplete',\r\n disabled: 'Step disabled',\r\n warning: 'Step with warning',\r\n error: 'Step in error'\r\n};\r\n\r\nconst STATE_FLOW_INDICATOR_DEFAULTS = {\r\n linear: true,\r\n ariaLabels: DEFAULT_ARIA_LABELS,\r\n ariaLabel: 'Progress indicator',\r\n} satisfies Partial<StateFlowIndicatorConfig>;\r\n\r\nexport const STATE_FLOW_INDICATOR_CONFIG = new InjectionToken<Partial<StateFlowIndicatorConfig>>('STATE_FLOW_INDICATOR_CONFIG', {\r\n factory: () => STATE_FLOW_INDICATOR_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-state-flow-indicator',\r\n templateUrl: './state-flow-indicator.component.html',\r\n styleUrls: ['./state-flow-indicator.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: PSH_STATE_FLOW, useExisting: PshStateFlowIndicatorComponent },\r\n ],\r\n host: {\r\n '[class.psh-state-flow-indicator]': 'true',\r\n '[class.psh-size-small]': 'size() === \"small\"',\r\n '[class.psh-size-medium]': 'size() === \"medium\"',\r\n '[class.psh-size-large]': 'size() === \"large\"',\r\n '[attr.role]': '\"region\"',\r\n '[attr.aria-label]': 'ariaLabel()'\r\n }\r\n})\r\nexport class PshStateFlowIndicatorComponent implements PshStateFlowApi {\r\n /** Namespaces every id this indicator renders. Read by its `psh-flow-step` children. */\r\n readonly idPrefix = pshUniqueId('state-flow');\r\n\r\n private config = inject(STATE_FLOW_INDICATOR_CONFIG);\r\n\r\n readonly activeStep = model(0);\r\n readonly linear = input(this.config.linear ?? true);\r\n readonly size = input<StateFlowIndicatorSize>('medium');\r\n\r\n readonly ariaLabels = input<StateFlowIndicatorAriaLabels>();\r\n\r\n /** Name of the progress landmark. Was hard-coded, in French, with no way out. */\r\n readonly ariaLabelInput = input<string | undefined>(undefined, { alias: 'ariaLabel' });\r\n readonly ariaLabel = computed(\r\n () => this.ariaLabelInput() ?? pshResolveConfigValue(this.config.ariaLabel) ?? 'Indicateur de progression',\r\n );\r\n readonly beforeStepChange = input<(from: number, to: number) => Promise<boolean> | boolean>();\r\n\r\n stepChange = output<number>();\r\n completed = output<void>();\r\n navigationError = output<PshNavigationError>();\r\n\r\n readonly stepComponents = contentChildren(PshFlowStepComponent);\r\n\r\n readonly steps = computed(() => this.stepComponents().map(step => ({\r\n title: step.title(),\r\n subtitle: step.subtitle(),\r\n icon: step.icon(),\r\n disabled: step.disabled(),\r\n completed: step.completed(),\r\n loading: step.loading(),\r\n error: step.error(),\r\n warning: step.warning(),\r\n success: step.success()\r\n })));\r\n\r\n readonly effectiveAriaLabels = computed(() =>\r\n this.ariaLabels() ?? this.config.ariaLabels ?? DEFAULT_ARIA_LABELS\r\n );\r\n\r\n readonly isFirstStep = computed(() => this.activeStep() === 0);\r\n readonly isLastStep = computed(() => this.activeStep() === this.steps().length - 1);\r\n readonly progress = computed(() =>\r\n this.steps().length > 0\r\n ? ((this.activeStep() + 1) / this.steps().length) * 100\r\n : 0\r\n );\r\n readonly completedSteps = computed(() =>\r\n this.steps().filter(step => step.completed).length\r\n );\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n this.syncStepStates();\r\n });\r\n\r\n effect(() => {\r\n this.syncStepStates();\r\n });\r\n }\r\n\r\n private syncStepStates(): void {\r\n const components = this.stepComponents();\r\n if (components.length === 0) return;\r\n\r\n const active = this.activeStep();\r\n components.forEach((step, index) => {\r\n step.setIndex(index);\r\n step.setActive(index === active);\r\n });\r\n }\r\n\r\n async next(): Promise<void> {\r\n if (this.canGoNext()) {\r\n await this.goToStep(this.activeStep() + 1);\r\n }\r\n }\r\n\r\n async previous(): Promise<void> {\r\n if (this.canGoPrevious()) {\r\n await this.goToStep(this.activeStep() - 1);\r\n }\r\n }\r\n\r\n async goToStep(index: number): Promise<void> {\r\n if (index < 0 || index >= this.steps().length) {\r\n this.navigationError.emit({\r\n action: 'goToStep',\r\n reason: 'out-of-bounds',\r\n target: index,\r\n message: `Invalid step index: ${index}. Valid range: 0-${this.steps().length - 1}`,\r\n });\r\n return;\r\n }\r\n\r\n if (index === this.activeStep()) {\r\n return;\r\n }\r\n\r\n const beforeChange = this.beforeStepChange();\r\n if (beforeChange) {\r\n try {\r\n const canChange = await Promise.resolve(beforeChange(this.activeStep(), index));\r\n if (!canChange) {\r\n this.navigationError.emit({\r\n action: 'goToStep',\r\n reason: 'blocked',\r\n target: index,\r\n message: `Navigation from step ${this.activeStep()} to step ${index} was blocked by validation`,\r\n });\r\n return;\r\n }\r\n } catch (error) {\r\n this.navigationError.emit({\r\n action: 'goToStep',\r\n reason: 'rejected',\r\n target: index,\r\n message: error instanceof Error ? error.message : 'Unknown error in beforeStepChange',\r\n cause: error,\r\n });\r\n return;\r\n }\r\n }\r\n\r\n if (!this.canActivateStep(index)) {\r\n this.navigationError.emit({\r\n action: 'goToStep',\r\n reason: 'prerequisite-incomplete',\r\n target: index,\r\n message: `Cannot activate step ${index}. Please complete previous steps first`,\r\n });\r\n return;\r\n }\r\n\r\n this.activeStep.set(index);\r\n this.stepChange.emit(index);\r\n\r\n const currentStep = this.steps()[index];\r\n if (this.isLastStep() && currentStep?.completed) {\r\n this.completed.emit();\r\n }\r\n }\r\n\r\n canGoNext(): boolean {\r\n const nextIndex = this.activeStep() + 1;\r\n return nextIndex < this.steps().length && this.canActivateStep(nextIndex);\r\n }\r\n\r\n canGoPrevious(): boolean {\r\n return this.activeStep() > 0;\r\n }\r\n\r\n canActivateStep(index: number): boolean {\r\n if (index < 0 || index >= this.steps().length) {\r\n return false;\r\n }\r\n\r\n if (!this.linear()) return true;\r\n if (index === 0) return true;\r\n\r\n const step = this.steps()[index];\r\n if (step?.disabled) return false;\r\n\r\n return this.steps()\r\n .slice(0, index)\r\n .every(s => s.completed && !s.error);\r\n }\r\n\r\n isStepValid(index: number): boolean {\r\n const step = this.steps()[index];\r\n return step ? !!step.completed && !step.error : false;\r\n }\r\n\r\n getStepAriaLabel(step: FlowStepConfig, index: number): string {\r\n const labels = this.effectiveAriaLabels();\r\n let status: string;\r\n if (step.error) {\r\n status = labels.error;\r\n } else if (step.warning) {\r\n status = labels.warning;\r\n } else if (step.completed) {\r\n status = labels.completed;\r\n } else if (index === this.activeStep()) {\r\n status = labels.active;\r\n } else if (step.disabled) {\r\n status = labels.disabled;\r\n } else {\r\n status = labels.incomplete;\r\n }\r\n return `${labels.step} ${index + 1}: ${step.title} - ${status}`;\r\n }\r\n\r\n reset(): void {\r\n this.activeStep.set(0);\r\n this.stepChange.emit(0);\r\n }\r\n\r\n handleStepClick(index: number): void {\r\n const step = this.steps()[index];\r\n if (step && !step.disabled && this.canActivateStep(index)) {\r\n this.goToStep(index);\r\n }\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent, index: number): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.handleStepClick(index);\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n if (this.canGoNext()) {\r\n this.next();\r\n }\r\n break;\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n if (this.canGoPrevious()) {\r\n this.previous();\r\n }\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n if (this.canActivateStep(0)) {\r\n this.goToStep(0);\r\n }\r\n break;\r\n case 'End': {\r\n event.preventDefault();\r\n const lastIndex = this.steps().length - 1;\r\n if (this.canActivateStep(lastIndex)) {\r\n this.goToStep(lastIndex);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n","<div class=\"psh-flow-track\" role=\"tablist\">\r\n <!-- Tracked by position: see psh-stepper. `steps()` rebuilds its objects. -->\r\n @for (step of steps(); track $index; let i = $index) {\r\n <div\r\n class=\"psh-flow-segment\"\r\n [class.psh-active]=\"i === activeStep()\"\r\n [class.psh-completed]=\"step.completed\"\r\n [class.psh-disabled]=\"step.disabled || (!step.completed && i !== activeStep() && !canActivateStep(i))\"\r\n [class.psh-error]=\"!!step.error\"\r\n [class.psh-warning]=\"!!step.warning\"\r\n [class.psh-loading]=\"step.loading\"\r\n [class.psh-first]=\"i === 0\"\r\n [class.psh-last]=\"i === steps().length - 1\"\r\n role=\"tab\"\r\n [attr.tabindex]=\"i === activeStep() ? 0 : -1\"\r\n [attr.id]=\"idPrefix + '-tab-' + i\"\r\n [attr.aria-controls]=\"idPrefix + '-panel-' + i\"\r\n [attr.aria-selected]=\"i === activeStep()\"\r\n [attr.aria-disabled]=\"step.disabled || (!step.completed && i !== activeStep() && !canActivateStep(i))\"\r\n [attr.aria-label]=\"getStepAriaLabel(step, i)\"\r\n [attr.aria-current]=\"i === activeStep() ? 'step' : null\"\r\n [attr.aria-busy]=\"step.loading\"\r\n (click)=\"handleStepClick(i)\"\r\n (keydown)=\"handleKeydown($event, i)\"\r\n >\r\n <span class=\"psh-flow-segment-content\">\r\n @if (step.loading) {\r\n <i class=\"ph ph-circle-notch psh-spinner\" aria-hidden=\"true\"></i>\r\n } @else if (step.error) {\r\n <i class=\"ph ph-x-circle\" aria-hidden=\"true\"></i>\r\n } @else if (step.warning) {\r\n <i class=\"ph ph-warning\" aria-hidden=\"true\"></i>\r\n } @else if (step.icon) {\r\n <i class=\"ph ph-{{ step.icon }}\" aria-hidden=\"true\"></i>\r\n } @else if (step.completed) {\r\n <i class=\"ph ph-check-circle\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"psh-flow-segment-labels\">\r\n <span class=\"psh-flow-segment-title\">{{ step.title }}</span>\r\n @if (step.subtitle) {\r\n <span class=\"psh-flow-segment-subtitle\">{{ step.subtitle }}</span>\r\n }\r\n </span>\r\n </span>\r\n </div>\r\n }\r\n</div>\r\n\r\n<!--\r\n The panels. Missing until 7.0.0: `psh-flow-step` rendered `template: ''` behind a permanent\r\n `display: none`, and there was no `<ng-content>` here either, so anything projected into a\r\n step was discarded without a word. `psh-stepper` has always done this.\r\n-->\r\n<ng-content />\r\n\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * What a `psh-step` needs from the stepper it sits in.\r\n *\r\n * Only the id prefix, and that is the point: the tab and its panel have to agree on an id, and\r\n * until 7.0.0 they agreed on a *global* one — `step-0`, `panel-0`. Two steppers on a page, or a\r\n * stepper beside a `psh-tabs` (which also used `panel-0`), produced duplicate ids, and every\r\n * `aria-controls` and `aria-labelledby` resolved to whichever element the browser found first.\r\n *\r\n * A token rather than an import because `psh-stepper` reads its steps with\r\n * `contentChildren(PshStepComponent)`: importing the parent from the child would close the\r\n * cycle. `PSH_RADIO_GROUP` exists for the same reason.\r\n */\r\nexport interface PshStepperApi {\r\n /** Unique per stepper instance. Tabs are `<prefix>-tab-<i>`, panels `<prefix>-panel-<i>`. */\r\n readonly idPrefix: string;\r\n}\r\n\r\nexport const PSH_STEPPER = new InjectionToken<PshStepperApi>('PSH_STEPPER');\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n input,\r\n signal\r\n} from '@angular/core';\r\nimport { PSH_STEPPER } from './stepper.token';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\n@Component({\r\n selector: 'psh-step',\r\n template: `<ng-content />`,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.psh-step-content]': 'true',\r\n '[class.psh-active]': 'isActive()',\r\n '[attr.role]': '\"tabpanel\"',\r\n '[attr.aria-labelledby]': 'idPrefix + \"-tab-\" + index()',\r\n '[attr.id]': 'idPrefix + \"-panel-\" + index()',\r\n '[attr.tabindex]': 'isActive() ? 0 : -1',\r\n '[style.display]': 'isActive() ? \"block\" : \"none\"'\r\n }\r\n})\r\nexport class PshStepComponent {\r\n /**\r\n * The stepper's id prefix, so the panel's id matches the `aria-controls` of its tab.\r\n *\r\n * Falls back to an id of its own for a `psh-step` used outside a stepper: a dangling\r\n * `aria-labelledby` is worse than an unreferenced panel.\r\n */\r\n protected readonly idPrefix =\r\n inject(PSH_STEPPER, { optional: true })?.idPrefix ?? pshUniqueId('step');\r\n\r\n readonly title = input.required<string>();\r\n readonly subtitle = input<string>();\r\n readonly icon = input<string>();\r\n readonly disabled = input(false);\r\n readonly completed = input(false);\r\n readonly loading = input(false);\r\n readonly error = input<string | null | undefined>(null);\r\n readonly warning = input<string>();\r\n readonly success = input<string | null | undefined>(null);\r\n\r\n private readonly _index = signal(0);\r\n private readonly _isActive = signal(false);\r\n\r\n readonly index = this._index.asReadonly();\r\n readonly isActive = this._isActive.asReadonly();\r\n\r\n setIndex(value: number): void {\r\n this._index.set(value);\r\n }\r\n\r\n setActive(value: boolean): void {\r\n this._isActive.set(value);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n InjectionToken,\r\n afterNextRender\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { PshNavigationError } from '../../types/semantic.types';\r\nimport { StepperVariant, StepConfig, StepperConfig, StepperAriaLabels } from './stepper.types';\r\nimport { PshStepComponent } from './step.component';\r\nimport { PSH_STEPPER, PshStepperApi } from './stepper.token';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\nconst DEFAULT_ARIA_LABELS: StepperAriaLabels = {\r\n step: 'Step',\r\n completed: 'Step completed',\r\n active: 'Step active',\r\n incomplete: 'Step incomplete',\r\n disabled: 'Step disabled'\r\n};\r\n\r\nconst STEPPER_DEFAULTS = {\r\n variant: 'default',\r\n linear: true,\r\n ariaLabels: DEFAULT_ARIA_LABELS,\r\n ariaLabel: 'Step navigation',\r\n} satisfies Partial<StepperConfig>;\r\n\r\nexport const STEPPER_CONFIG = new InjectionToken<Partial<StepperConfig>>('STEPPER_CONFIG', {\r\n factory: () => STEPPER_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-stepper',\r\n templateUrl: './stepper.component.html',\r\n styleUrls: ['./stepper.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: PSH_STEPPER, useExisting: PshStepperComponent }],\r\n host: {\r\n '[class.psh-stepper-container]': 'true',\r\n '[class.psh-numbered]': 'variant() === \"numbered\"',\r\n '[class.psh-progress]': 'variant() === \"progress\"',\r\n '[attr.role]': '\"region\"',\r\n '[attr.aria-label]': 'ariaLabel()'\r\n }\r\n})\r\nexport class PshStepperComponent implements PshStepperApi {\r\n private config = inject(STEPPER_CONFIG);\r\n\r\n /** Namespaces every id this stepper renders. Read by its `psh-step` children. */\r\n readonly idPrefix = pshUniqueId('stepper');\r\n\r\n readonly activeStep = model(0);\r\n readonly variant = input<StepperVariant>(this.config.variant ?? 'default');\r\n readonly linear = input(this.config.linear ?? true);\r\n\r\n readonly ariaLabels = input<StepperAriaLabels>();\r\n\r\n /** Name of the stepper landmark. Was hard-coded, in French, with no way out. */\r\n readonly ariaLabelInput = input<string | undefined>(undefined, { alias: 'ariaLabel' });\r\n readonly ariaLabel = computed(\r\n () => this.ariaLabelInput() ?? pshResolveConfigValue(this.config.ariaLabel) ?? 'Navigation par étapes',\r\n );\r\n readonly beforeStepChange = input<(from: number, to: number) => Promise<boolean> | boolean>();\r\n\r\n stepChange = output<number>();\r\n completed = output<void>();\r\n navigationError = output<PshNavigationError>();\r\n\r\n readonly stepComponents = contentChildren(PshStepComponent);\r\n\r\n readonly steps = computed(() => this.stepComponents().map(step => ({\r\n title: step.title(),\r\n subtitle: step.subtitle(),\r\n icon: step.icon(),\r\n disabled: step.disabled(),\r\n completed: step.completed(),\r\n loading: step.loading(),\r\n error: step.error(),\r\n warning: step.warning(),\r\n success: step.success()\r\n })));\r\n\r\n readonly effectiveAriaLabels = computed(() =>\r\n this.ariaLabels() ?? this.config.ariaLabels ?? DEFAULT_ARIA_LABELS\r\n );\r\n\r\n readonly isFirstStep = computed(() => this.activeStep() === 0);\r\n readonly isLastStep = computed(() => this.activeStep() === this.steps().length - 1);\r\n readonly progress = computed(() =>\r\n this.steps().length > 0\r\n ? ((this.activeStep() + 1) / this.steps().length) * 100\r\n : 0\r\n );\r\n readonly completedSteps = computed(() =>\r\n this.steps().filter(step => step.completed).length\r\n );\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n this.syncStepStates();\r\n });\r\n\r\n effect(() => {\r\n this.syncStepStates();\r\n });\r\n }\r\n\r\n private syncStepStates(): void {\r\n const components = this.stepComponents();\r\n if (components.length === 0) return;\r\n\r\n const active = this.activeStep();\r\n components.forEach((step, index) => {\r\n step.setIndex(index);\r\n step.setActive(index === active);\r\n });\r\n }\r\n\r\n async next(): Promise<void> {\r\n if (this.canGoNext()) {\r\n await this.goToStep(this.activeStep() + 1);\r\n }\r\n }\r\n\r\n async previous(): Promise<void> {\r\n if (this.canGoPrevious()) {\r\n await this.goToStep(this.activeStep() - 1);\r\n }\r\n }\r\n\r\n async goToStep(index: number): Promise<void> {\r\n if (index < 0 || index >= this.steps().length) {\r\n this.navigationError.emit({\r\n action: 'goToStep',\r\n reason: 'out-of-bounds',\r\n target: index,\r\n message: `Invalid step index: ${index}. Valid range: 0-${this.steps().length - 1}`,\r\n });\r\n return;\r\n }\r\n\r\n if (index === this.activeStep()) {\r\n return;\r\n }\r\n\r\n const beforeChange = this.beforeStepChange();\r\n if (beforeChange) {\r\n try {\r\n const canChange = await Promise.resolve(beforeChange(this.activeStep(), index));\r\n if (!canChange) {\r\n this.navigationError.emit({\r\n action: 'goToStep',\r\n reason: 'blocked',\r\n target: index,\r\n message: `Navigation from step ${this.activeStep()} to step ${index} was blocked by validation`,\r\n });\r\n return;\r\n }\r\n } catch (error) {\r\n this.navigationError.emit({\r\n action: 'goToStep',\r\n reason: 'rejected',\r\n target: index,\r\n message: error instanceof Error ? error.message : 'Unknown error in beforeStepChange',\r\n cause: error,\r\n });\r\n return;\r\n }\r\n }\r\n\r\n if (!this.canActivateStep(index)) {\r\n this.navigationError.emit({\r\n action: 'goToStep',\r\n reason: 'prerequisite-incomplete',\r\n target: index,\r\n message: `Cannot activate step ${index}. Please complete previous steps first`,\r\n });\r\n return;\r\n }\r\n\r\n this.activeStep.set(index);\r\n this.stepChange.emit(index);\r\n\r\n const currentStep = this.steps()[index];\r\n if (this.isLastStep() && currentStep?.completed) {\r\n this.completed.emit();\r\n }\r\n }\r\n\r\n canGoNext(): boolean {\r\n const nextIndex = this.activeStep() + 1;\r\n return nextIndex < this.steps().length && this.canActivateStep(nextIndex);\r\n }\r\n\r\n canGoPrevious(): boolean {\r\n return this.activeStep() > 0;\r\n }\r\n\r\n canActivateStep(index: number): boolean {\r\n if (index < 0 || index >= this.steps().length) {\r\n return false;\r\n }\r\n\r\n if (!this.linear()) return true;\r\n if (index === 0) return true;\r\n\r\n const step = this.steps()[index];\r\n if (step?.disabled) return false;\r\n\r\n return this.steps()\r\n .slice(0, index)\r\n .every(step => step.completed && !step.error);\r\n }\r\n\r\n isStepValid(index: number): boolean {\r\n const step = this.steps()[index];\r\n return step ? !!step.completed && !step.error : false;\r\n }\r\n\r\n getStepAriaLabel(step: StepConfig, index: number): string {\r\n const labels = this.effectiveAriaLabels();\r\n const status = step.completed ? labels.completed :\r\n index === this.activeStep() ? labels.active :\r\n step.disabled ? labels.disabled :\r\n labels.incomplete;\r\n return `${labels.step} ${index + 1}: ${step.title} - ${status}`;\r\n }\r\n\r\n getStepDescribedBy(step: StepConfig, index: number): string | null {\r\n // These must match the `[id]` of the message the template actually renders. The\r\n // prefix is part of that agreement, not decoration: a class-renaming pass once\r\n // rewrote one side of it and 2 195 tests stayed green.\r\n if (step.error) return `${this.idPrefix}-error-${index}`;\r\n if (step.warning) return `${this.idPrefix}-warning-${index}`;\r\n if (step.success) return `${this.idPrefix}-success-${index}`;\r\n return null;\r\n }\r\n\r\n reset(): void {\r\n this.activeStep.set(0);\r\n this.stepChange.emit(0);\r\n }\r\n\r\n handleStepClick(index: number): void {\r\n const step = this.steps()[index];\r\n if (step && !step.disabled && this.canActivateStep(index)) {\r\n this.goToStep(index);\r\n }\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent, index: number): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.handleStepClick(index);\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n if (this.canGoNext()) {\r\n this.next();\r\n }\r\n break;\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n if (this.canGoPrevious()) {\r\n this.previous();\r\n }\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n if (this.canActivateStep(0)) {\r\n this.goToStep(0);\r\n }\r\n break;\r\n case 'End': {\r\n event.preventDefault();\r\n const lastIndex = this.steps().length - 1;\r\n if (this.canActivateStep(lastIndex)) {\r\n this.goToStep(lastIndex);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n","<div class=\"psh-stepper-header\" role=\"tablist\">\r\n <!--\r\n Tracked by position on purpose. `steps()` maps over the projected `psh-step` children\r\n and builds a fresh object each time it recomputes, so tracking by identity would\r\n destroy and rebuild every step on each recomputation — the opposite of the intent.\r\n Position is the stable key here: a step \"moving\" means the projected content changed.\r\n -->\r\n @for (step of steps(); track $index; let i = $index) {\r\n <div\r\n class=\"psh-step-header\"\r\n [class.psh-active]=\"i === activeStep()\"\r\n [class.psh-completed]=\"step.completed\"\r\n [class.psh-disabled]=\"step.disabled\"\r\n [class.psh-error]=\"!!step.error\"\r\n [class.psh-warning]=\"!!step.warning\"\r\n [class.psh-success]=\"!!step.success\"\r\n >\r\n <div\r\n class=\"psh-step-indicator\"\r\n role=\"tab\"\r\n [attr.tabindex]=\"i === activeStep() ? 0 : -1\"\r\n [attr.id]=\"idPrefix + '-tab-' + i\"\r\n [attr.aria-controls]=\"idPrefix + '-panel-' + i\"\r\n [attr.aria-selected]=\"i === activeStep()\"\r\n [attr.aria-disabled]=\"step.disabled\"\r\n [attr.aria-label]=\"getStepAriaLabel(step, i)\"\r\n [attr.aria-current]=\"i === activeStep() ? 'step' : null\"\r\n [attr.aria-describedby]=\"getStepDescribedBy(step, i)\"\r\n [attr.aria-busy]=\"step.loading\"\r\n (click)=\"handleStepClick(i)\"\r\n (keydown)=\"handleKeydown($event, i)\"\r\n >\r\n @if (step.loading && variant() === 'progress') {\r\n <i class=\"ph ph-circle-notch psh-spinner\" aria-hidden=\"true\"></i>\r\n } @else if (step.completed) {\r\n <i class=\"ph ph-check\" aria-hidden=\"true\"></i>\r\n } @else if (variant() === 'numbered') {\r\n {{ i + 1 }}\r\n } @else if (step.icon) {\r\n <i class=\"ph ph-{{ step.icon }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n <span class=\"psh-step-dot\"></span>\r\n }\r\n </div>\r\n\r\n <div class=\"psh-step-label\">\r\n <span class=\"psh-step-title\">{{ step.title }}</span>\r\n @if (step.subtitle) {\r\n <span class=\"psh-step-subtitle\">{{ step.subtitle }}</span>\r\n }\r\n @if (step.error) {\r\n <span class=\"psh-step-error\" [id]=\"idPrefix + '-error-' + i\" role=\"alert\" aria-live=\"polite\">{{ step.error }}</span>\r\n }\r\n @if (step.warning) {\r\n <span class=\"psh-step-warning\" [id]=\"idPrefix + '-warning-' + i\" role=\"status\" aria-live=\"polite\">{{ step.warning }}</span>\r\n }\r\n @if (step.success) {\r\n <span class=\"psh-step-success\" [id]=\"idPrefix + '-success-' + i\" role=\"status\" aria-live=\"polite\">{{ step.success }}</span>\r\n }\r\n </div>\r\n\r\n @if (i < steps().length - 1) {\r\n <div class=\"psh-step-connector\" aria-hidden=\"true\">\r\n <span class=\"psh-connector-line\"></span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n\r\n<div class=\"psh-stepper-content\">\r\n <ng-content />\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n viewChild,\r\n InjectionToken,\r\n effect\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\r\nimport type { FormCheckboxControl } from '@angular/forms/signals';\r\nimport { SwitchSize, SwitchConfig } from './switch.types';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\nimport { pshRequiredError } from '../../utils/required-validator';\r\nimport { pshJoinAriaIds } from '../../utils/aria';\r\n\r\nconst SWITCH_DEFAULTS = {\r\n checked: false,\r\n disabled: false,\r\n required: false,\r\n size: 'medium',\r\n labelPosition: 'right'\r\n} satisfies Partial<SwitchConfig>;\r\n\r\nexport const SWITCH_CONFIG = new InjectionToken<Partial<SwitchConfig>>('SWITCH_CONFIG', {\r\n factory: () => SWITCH_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-switch',\r\n templateUrl: './switch.component.html',\r\n styleUrls: ['./switch.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: NG_VALIDATORS, useExisting: PshSwitchComponent, multi: true },{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshSwitchComponent,\r\n multi: true\r\n }],\r\n host: {\r\n '[class.psh-switch-wrapper]': 'true',\r\n '[class.psh-switch-disabled]': 'disabled()',\r\n '[class.psh-switch-error]': '!!error()',\r\n '[class.psh-switch-success]': '!!success()'\r\n }\r\n})\r\nexport class PshSwitchComponent implements ControlValueAccessor, FormCheckboxControl, Validator {\r\n private config = inject(SWITCH_CONFIG);\r\n private uniqueId = pshUniqueId('switch');\r\n\r\n private readonly switchInput = viewChild<ElementRef<HTMLInputElement>>('switchInput');\r\n\r\n private onChange = (_value: boolean) => {};\r\n private onTouched = () => {};\r\n private onValidatorChange: () => void = () => {};\r\n\r\n readonly checked = model(this.config.checked ?? false);\r\n readonly disabled = model(this.config.disabled ?? false);\r\n readonly touched = model(false);\r\n\r\n /**\r\n * Emitted when the user finishes interacting with the control.\r\n *\r\n * Part of `FormUiControl`: the `Field` directive listens to **this**, not to\r\n * `touchedChange`, to mark the bound field as touched.\r\n */\r\n readonly touch = output<void>();\r\n\r\n readonly required = input(this.config.required ?? false);\r\n readonly size = input<SwitchSize>(this.config.size ?? 'medium');\r\n readonly labelPosition = input<'left' | 'right'>(this.config.labelPosition ?? 'right');\r\n\r\n readonly label = input('');\r\n readonly error = input<string | null | undefined>(null);\r\n readonly success = input<string | null | undefined>(null);\r\n /** Guidance shown when there is neither an error nor a success message. */\r\n readonly hint = input<string | null | undefined>(null);\r\n\r\n /**\r\n * Extra ids for `aria-describedby`. **Merged** with the control's own — the id of its error,\r\n * success or hint message — never replacing them.\r\n */\r\n readonly ariaDescribedBy = input<string>();\r\n\r\n /**\r\n * Ids of the elements that name this control, for the cases a visible `<label>` cannot\r\n * cover. Merged with anything the control already points at.\r\n */\r\n readonly ariaLabelledBy = input<string>();\r\n readonly ariaLabel = input<string>();\r\n readonly name = input<string>('');\r\n readonly id = input<string>(this.uniqueId);\r\n\r\n readonly computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const labelText = this.label();\r\n if (labelText) return labelText;\r\n\r\n return 'Switch';\r\n });\r\n readonly errorId = computed(() => this.error() ? `${this.id()}-error` : null);\r\n readonly successId = computed(() => this.success() ? `${this.id()}-success` : null);\r\n readonly hintId = computed(() => this.hint() ? `${this.id()}-hint` : null);\r\n // error, success and hint are mutually exclusive in the template (@if/@else if), so\r\n // aria-describedby references whichever message is actually rendered — in the same order.\r\n readonly describedBy = computed(() =>\r\n pshJoinAriaIds(\r\n this.errorId() ?? this.successId() ?? this.hintId(),\r\n this.ariaDescribedBy(),\r\n ),\r\n );\r\n\r\n toggle(): void {\r\n if (!this.disabled()) {\r\n this.checked.update(v => !v);\r\n this.onChange(this.checked());\r\n this.markTouched();\r\n }\r\n }\r\n\r\n /**\r\n * Blur, not toggle. Tabbing through a required switch without flipping it still means the\r\n * user has been there, which is what a field needs to know before showing \"required\".\r\n */\r\n protected handleBlur(): void {\r\n this.markTouched();\r\n }\r\n\r\n private markTouched(): void {\r\n this.onTouched();\r\n this.touched.set(true);\r\n this.touch.emit();\r\n }\r\n\r\n constructor() {\r\n // A value change revalidates by itself; a change to `required` does not — Angular has\r\n // no reason to suspect the validator's answer moved. This is what the callback is for.\r\n effect(() => {\r\n this.required();\r\n this.onValidatorChange();\r\n });\r\n }\r\n\r\n writeValue(value: boolean): void {\r\n this.checked.set(value ?? false);\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.set(isDisabled);\r\n }\r\n\r\n focus(): void {\r\n const el = this.switchInput();\r\n if (el?.nativeElement) {\r\n el.nativeElement.focus();\r\n }\r\n }\r\n\r\n blur(): void {\r\n const el = this.switchInput();\r\n if (el?.nativeElement) {\r\n el.nativeElement.blur();\r\n }\r\n }\r\n\r\n /**\r\n * Makes `required` a real constraint rather than an asterisk.\r\n *\r\n * Re-run whenever `required` or the value changes: `registerOnValidatorChange` gives us\r\n * the callback that tells Angular to revalidate, and an effect fires it.\r\n */\r\n validate(): ValidationErrors | null {\r\n return pshRequiredError(this.required(), !this.checked());\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.onValidatorChange = fn;\r\n }\r\n\r\n}\r\n","<div\r\n class=\"psh-switch-container\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n>\r\n <label class=\"psh-switch-label\" [class]=\"labelPosition() === 'left' ? 'psh-label-left' : 'psh-label-right'\">\r\n <input\r\n #switchInput\r\n type=\"checkbox\"\r\n role=\"switch\"\r\n class=\"psh-switch-input\"\r\n [id]=\"id()\"\r\n [name]=\"name() || id()\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"disabled()\"\r\n [required]=\"required()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-invalid]=\"!!error()\"\r\n [attr.aria-checked]=\"checked()\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n (change)=\"toggle()\"\r\n (blur)=\"handleBlur()\"\r\n />\r\n <span class=\"psh-switch-control\">\r\n <span class=\"psh-switch-thumb\"></span>\r\n </span>\r\n <span class=\"psh-switch-text\">\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <ng-content>Switch</ng-content>\r\n }\r\n </span>\r\n </label>\r\n\r\n @if (error()) {\r\n <div [id]=\"errorId()!\" class=\"psh-switch-error\" role=\"alert\" aria-live=\"polite\">\r\n {{ error() }}\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"successId()!\" class=\"psh-switch-success\" role=\"status\" aria-live=\"polite\">\r\n {{ success() }}\r\n </div>\r\n } @else if (hint()) {\r\n <div [id]=\"hintId()!\" class=\"psh-switch-hint\">\r\n {{ hint() }}\r\n </div>\r\n }\r\n</div>","import {\r\n computed,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n viewChildren,\r\n InjectionToken,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { TabBarItem, TabBarConfig, TabBarChangeEvent, TabBarItemContext } from './tab-bar.types';\r\n\r\n/**\r\n * Token d'injection pour la configuration globale de la barre d'onglets\r\n */\r\nconst TAB_BAR_DEFAULTS = {\r\n disabled: false,\r\n position: 'bottom',\r\n animated: true,\r\n ariaLabel: 'Tab navigation',\r\n} satisfies Partial<TabBarConfig>;\r\n\r\nexport const TAB_BAR_CONFIG = new InjectionToken<Partial<TabBarConfig>>('TAB_BAR_CONFIG', {\r\n factory: () => TAB_BAR_DEFAULTS,\r\n});\r\n\r\n\r\n@Component({\r\n selector: 'psh-tab-bar',\r\n imports: [NgTemplateOutlet],\r\n templateUrl: './tab-bar.component.html',\r\n styleUrls: ['./tab-bar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.psh-top]': 'position() === \"top\"',\r\n '[class.psh-animated]': 'animated()',\r\n 'role': 'tablist',\r\n '[attr.aria-label]': 'ariaLabel()'\r\n }\r\n})\r\nexport class PshTabBarComponent {\r\n private config = inject(TAB_BAR_CONFIG);\r\n private readonly tabButtons = viewChildren<ElementRef<HTMLButtonElement>>('tabButton');\r\n\r\n // Model inputs with defaults from config\r\n readonly disabled = input(this.config.disabled ?? false);\r\n readonly position = input<'bottom' | 'top'>(this.config.position ?? 'bottom');\r\n readonly animated = input(this.config.animated ?? true);\r\n readonly activeIndex = model(0);\r\n\r\n // Regular inputs\r\n readonly items = input.required<TabBarItem[]>();\r\n\r\n /** Name of the tab bar. Was hard-coded, in French, with no way out. */\r\n readonly ariaLabelInput = input<string | undefined>(undefined, { alias: 'ariaLabel' });\r\n readonly ariaLabel = computed(\r\n () => this.ariaLabelInput() ?? pshResolveConfigValue(this.config.ariaLabel) ?? 'Navigation par onglets',\r\n );\r\n\r\n /**\r\n * Replaces the content of every tab.\r\n *\r\n * `TabBarItem` described a tab completely — icon, label, badge — and the component had no\r\n * `ng-content`, so anything else meant `::ng-deep`. The button keeps `role=\"tab\"`,\r\n * `aria-selected`, the roving tabindex and the arrow-key handling.\r\n */\r\n readonly itemTemplate = input<TemplateRef<TabBarItemContext>>();\r\n\r\n protected itemContext(item: TabBarItem, index: number): TabBarItemContext {\r\n return {\r\n $implicit: item,\r\n index,\r\n active: this.activeIndex() === index,\r\n disabled: this.disabled() || !!item.disabled,\r\n };\r\n }\r\n\r\n // Outputs\r\n tabChange = output<TabBarChangeEvent>();\r\n\r\n selectTab(index: number): void {\r\n const items = this.items();\r\n const previousIndex = this.activeIndex();\r\n const selectedItem = items[index];\r\n\r\n if (this.disabled() ||\r\n previousIndex === index ||\r\n index < 0 ||\r\n index >= items.length ||\r\n !selectedItem ||\r\n selectedItem.disabled) {\r\n return;\r\n }\r\n\r\n this.activeIndex.set(index);\r\n this.tabChange.emit({\r\n index,\r\n item: selectedItem,\r\n previousIndex\r\n });\r\n }\r\n\r\n /**\r\n * Arrow/Home/End navigation, per the ARIA tablist pattern: the arrows move between\r\n * tabs and activate as they go, wrapping at both ends and skipping disabled items.\r\n * `Tab` itself must leave the tablist, which is why the buttons carry a roving\r\n * tabindex rather than all sitting in the tab order.\r\n */\r\n onKeydown(event: KeyboardEvent, index: number): void {\r\n let target: number | null;\r\n\r\n switch (event.key) {\r\n case 'ArrowRight':\r\n case 'ArrowDown':\r\n target = this.nextEnabledIndex(index, 1);\r\n break;\r\n case 'ArrowLeft':\r\n case 'ArrowUp':\r\n target = this.nextEnabledIndex(index, -1);\r\n break;\r\n case 'Home':\r\n target = this.nextEnabledIndex(-1, 1);\r\n break;\r\n case 'End':\r\n target = this.nextEnabledIndex(this.items().length, -1);\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n if (target === null) return;\r\n\r\n event.preventDefault();\r\n this.selectTab(target);\r\n this.tabButtons()[target]?.nativeElement.focus();\r\n }\r\n\r\n /** Walks `step` at a time from `from`, wrapping, until it lands on a selectable tab. */\r\n private nextEnabledIndex(from: number, step: number): number | null {\r\n const items = this.items();\r\n if (items.length === 0 || this.disabled()) return null;\r\n\r\n for (let offset = 1; offset <= items.length; offset++) {\r\n const candidate = (((from + step * offset) % items.length) + items.length) % items.length;\r\n if (!items[candidate]?.disabled) return candidate;\r\n }\r\n return null;\r\n }\r\n}","<div class=\"psh-tab-bar\">\r\n @for (item of items(); track item.id; let i = $index) {\r\n <button\r\n #tabButton\r\n type=\"button\"\r\n class=\"psh-tab-item\"\r\n [class.psh-active]=\"activeIndex() === i\"\r\n [class.psh-disabled]=\"disabled() || item.disabled\"\r\n role=\"tab\"\r\n [attr.aria-selected]=\"activeIndex() === i\"\r\n [attr.aria-disabled]=\"disabled() || item.disabled\"\r\n [attr.aria-label]=\"item.label\"\r\n [attr.tabindex]=\"activeIndex() === i ? 0 : -1\"\r\n (click)=\"selectTab(i)\"\r\n (keydown)=\"onKeydown($event, i)\"\r\n >\r\n @if (itemTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"itemTemplate()!\"\r\n [ngTemplateOutletContext]=\"itemContext(item, i)\"\r\n ></ng-container>\r\n } @else {\r\n <i\r\n [class]=\"activeIndex() === i ? 'ph-fill ph-' + item.icon : 'ph ph-' + item.icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n <span class=\"psh-tab-label\">{{ item.label }}</span>\r\n @if (item.badge) {\r\n <span class=\"psh-tab-badge\">{{ item.badge }}</span>\r\n }\r\n }\r\n </button>\r\n }\r\n</div>","import { DestroyRef, inject, Injectable, PLATFORM_ID } from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\n\r\nexport type AnnouncerPoliteness = 'polite' | 'assertive';\r\n\r\nconst SR_ONLY_STYLE =\r\n 'position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;' +\r\n 'overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;';\r\n\r\n/**\r\n * Centralised ARIA live-region announcer.\r\n *\r\n * Provides a single pair of visually-hidden `aria-live` regions (polite and\r\n * assertive) shared across the whole application, instead of every component\r\n * rendering its own live region. Inject it and call {@link announce} to read a\r\n * message to assistive technology (toasts, async loading, form validation…).\r\n *\r\n * @example\r\n * ```typescript\r\n * private announcer = inject(PshLiveAnnouncerService);\r\n * this.announcer.announce('3 results found');\r\n * this.announcer.announce('Save failed', 'assertive');\r\n * ```\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshLiveAnnouncerService {\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n private politeRegion: HTMLElement | null = null;\r\n private assertiveRegion: HTMLElement | null = null;\r\n\r\n constructor() {\r\n inject(DestroyRef).onDestroy(() => this.dispose());\r\n }\r\n\r\n /**\r\n * Announces a message in the requested live region.\r\n * The region is cleared first so the same message announced twice is re-read.\r\n */\r\n announce(message: string, politeness: AnnouncerPoliteness = 'polite'): void {\r\n if (!this.isBrowser) return;\r\n const region = this.getRegion(politeness);\r\n region.textContent = '';\r\n // Re-assign after clearing so assistive tech registers the change.\r\n region.textContent = message;\r\n }\r\n\r\n /** Clears both live regions. */\r\n clear(): void {\r\n if (this.politeRegion) this.politeRegion.textContent = '';\r\n if (this.assertiveRegion) this.assertiveRegion.textContent = '';\r\n }\r\n\r\n private getRegion(politeness: AnnouncerPoliteness): HTMLElement {\r\n if (politeness === 'assertive') {\r\n this.assertiveRegion ??= this.createRegion('assertive');\r\n return this.assertiveRegion;\r\n }\r\n this.politeRegion ??= this.createRegion('polite');\r\n return this.politeRegion;\r\n }\r\n\r\n private createRegion(politeness: AnnouncerPoliteness): HTMLElement {\r\n const region = this.document.createElement('div');\r\n region.setAttribute('aria-live', politeness);\r\n region.setAttribute('aria-atomic', 'true');\r\n region.setAttribute('role', politeness === 'assertive' ? 'alert' : 'status');\r\n region.setAttribute('style', SR_ONLY_STYLE);\r\n region.classList.add('psh-live-announcer');\r\n this.document.body.appendChild(region);\r\n return region;\r\n }\r\n\r\n private dispose(): void {\r\n this.politeRegion?.remove();\r\n this.assertiveRegion?.remove();\r\n this.politeRegion = null;\r\n this.assertiveRegion = null;\r\n }\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { EmbeddedViewRef, Injectable, TemplateRef, ViewContainerRef, inject } from '@angular/core';\r\n\r\n/** A handle to a teleported overlay panel. */\r\nexport interface PshPortalRef {\r\n /** The panel's root element — use it to position and to scope click-outside. */\r\n readonly panel: HTMLElement;\r\n /**\r\n * Positions the panel as `fixed` relative to `anchor`'s viewport rect, on the\r\n * given side with `gap` px of spacing. Bounds `max-height` to the available\r\n * viewport space so the panel never overflows the screen.\r\n */\r\n position(anchor: HTMLElement, side: 'top' | 'bottom', gap: number): void;\r\n /**\r\n * Positions the panel as `fixed` from `anchor`'s viewport rect for a\r\n * `<side>-<align>` placement (e.g. `bottom-start`, `top-end`). The panel keeps\r\n * its content width; the aligned edge (start/end) is anchored to the trigger.\r\n */\r\n positionByPlacement(anchor: HTMLElement, placement: string, gap: number): void;\r\n /** Destroys the embedded view and removes the panel from the overlay layer. */\r\n detach(): void;\r\n}\r\n\r\n/**\r\n * Teleports a `TemplateRef` into a single body-level overlay layer so popover\r\n * panels (select / dropdown / menu…) escape any ancestor `overflow`, `transform`\r\n * or stacking context and can layer above modals.\r\n *\r\n * A lightweight, CDK-free \"manual portal\": the embedded view is created from the\r\n * consumer's `ViewContainerRef` (so it stays in that component's change-detection\r\n * tree and keeps its bindings reactive), then its root nodes are moved into the\r\n * shared `.psh-overlay-layer`. The layer is `position: fixed; inset: 0;\r\n * pointer-events: none` at `z-index: var(--psh-z-index-overlay)`; panels re-enable\r\n * pointer events. The layer is created lazily and removed once empty.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshPortalService {\r\n private readonly document = inject(DOCUMENT);\r\n private layer: HTMLElement | null = null;\r\n private count = 0;\r\n\r\n /** Teleports `tpl` into the overlay layer and returns a handle to control it. */\r\n attach(tpl: TemplateRef<unknown>, vcr: ViewContainerRef): PshPortalRef {\r\n const layer = this.ensureLayer();\r\n const viewRef = vcr.createEmbeddedView(tpl);\r\n viewRef.detectChanges();\r\n\r\n const nodes = viewRef.rootNodes as Node[];\r\n const panel = (nodes.find((n): n is HTMLElement => n instanceof HTMLElement) ??\r\n nodes[0]) as HTMLElement;\r\n nodes.forEach(node => layer.appendChild(node));\r\n\r\n this.count++;\r\n\r\n return {\r\n panel,\r\n position: (anchor, side, gap) => this.position(panel, anchor, side, gap),\r\n positionByPlacement: (anchor, placement, gap) =>\r\n this.positionByPlacement(panel, anchor, placement, gap),\r\n detach: () => this.detach(viewRef),\r\n };\r\n }\r\n\r\n private position(\r\n panel: HTMLElement,\r\n anchor: HTMLElement,\r\n side: 'top' | 'bottom',\r\n gap: number,\r\n ): void {\r\n const view = this.document.defaultView;\r\n if (!view) return;\r\n\r\n const rect = anchor.getBoundingClientRect();\r\n const style = panel.style;\r\n style.position = 'fixed';\r\n style.left = `${rect.left}px`;\r\n style.width = `${rect.width}px`;\r\n\r\n if (side === 'top') {\r\n const height = panel.offsetHeight;\r\n style.top = `${Math.max(gap, rect.top - height - gap)}px`;\r\n style.maxHeight = `${Math.max(0, rect.top - gap * 2)}px`;\r\n } else {\r\n style.top = `${rect.bottom + gap}px`;\r\n style.maxHeight = `${Math.max(0, view.innerHeight - rect.bottom - gap * 2)}px`;\r\n }\r\n }\r\n\r\n private positionByPlacement(\r\n panel: HTMLElement,\r\n anchor: HTMLElement,\r\n placement: string,\r\n gap: number,\r\n ): void {\r\n const view = this.document.defaultView;\r\n if (!view) return;\r\n\r\n const rect = anchor.getBoundingClientRect();\r\n const [side, align] = placement.split('-');\r\n const style = panel.style;\r\n style.position = 'fixed';\r\n\r\n if (side === 'top') {\r\n const height = panel.offsetHeight;\r\n style.top = `${Math.max(gap, rect.top - height - gap)}px`;\r\n style.maxHeight = `${Math.max(0, rect.top - gap * 2)}px`;\r\n } else {\r\n style.top = `${rect.bottom + gap}px`;\r\n style.maxHeight = `${Math.max(0, view.innerHeight - rect.bottom - gap * 2)}px`;\r\n }\r\n\r\n // Content-sized menu: anchor the start/end edge to the trigger.\r\n if (align === 'end') {\r\n style.left = `${Math.max(0, rect.right - panel.offsetWidth)}px`;\r\n } else {\r\n style.left = `${rect.left}px`;\r\n }\r\n }\r\n\r\n private detach(viewRef: EmbeddedViewRef<unknown>): void {\r\n viewRef.destroy();\r\n this.count = Math.max(0, this.count - 1);\r\n if (this.count === 0 && this.layer) {\r\n this.layer.remove();\r\n this.layer = null;\r\n }\r\n }\r\n\r\n private ensureLayer(): HTMLElement {\r\n if (this.layer) return this.layer;\r\n const layer = this.document.createElement('div');\r\n layer.className = 'psh-overlay-layer';\r\n layer.style.cssText =\r\n 'position:fixed;inset:0;z-index:var(--psh-z-index-overlay);pointer-events:none;';\r\n this.document.body.appendChild(layer);\r\n this.layer = layer;\r\n return layer;\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n/** A cardinal side an overlay can be placed on, relative to its anchor. */\r\nexport type OverlaySide = 'top' | 'bottom' | 'left' | 'right';\r\n\r\n/** Options describing the (estimated) overlay size and the gap to the anchor. */\r\nexport interface OverlayPositionOptions {\r\n /** Estimated overlay width in px (used for left/right flipping and align flipping). */\r\n overlayWidth?: number;\r\n /** Estimated overlay height in px (used for top/bottom flipping). */\r\n overlayHeight?: number;\r\n /** Minimum gap between anchor and overlay in px. */\r\n offset?: number;\r\n}\r\n\r\n/**\r\n * Shared anchored-positioning primitive with viewport collision detection.\r\n *\r\n * Computes whether an overlay (tooltip, dropdown, select panel, menu…) fits on\r\n * its preferred side of an anchor element and flips it to the opposite side\r\n * when there is not enough room and the opposite side has more. Based on\r\n * `getBoundingClientRect`, so it must be called when the anchor is laid out\r\n * (i.e. in the browser, on open / scroll / resize).\r\n *\r\n * This generalises the collision logic that previously lived only inside the\r\n * tooltip, so dropdown / select / menu popovers can stop overflowing too.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshOverlayPositionService {\r\n private readonly document = inject(DOCUMENT);\r\n\r\n /**\r\n * Resolves the best cardinal side for an overlay, flipping `preferred` to its\r\n * opposite when it would overflow the viewport and the opposite has more room.\r\n */\r\n flipSide(\r\n anchor: HTMLElement,\r\n preferred: OverlaySide,\r\n options: OverlayPositionOptions = {},\r\n ): OverlaySide {\r\n const view = this.document.defaultView;\r\n if (!view) return preferred;\r\n\r\n const rect = anchor.getBoundingClientRect();\r\n // A zero-size anchor is not laid out (or not in the browser): we cannot make\r\n // a meaningful collision decision, so keep the preferred side.\r\n if (rect.width === 0 && rect.height === 0) return preferred;\r\n\r\n const offset = options.offset ?? 8;\r\n const estH = options.overlayHeight ?? 0;\r\n const estW = options.overlayWidth ?? 0;\r\n\r\n const space = {\r\n top: rect.top,\r\n bottom: view.innerHeight - rect.bottom,\r\n left: rect.left,\r\n right: view.innerWidth - rect.right,\r\n };\r\n\r\n switch (preferred) {\r\n case 'top':\r\n return space.top < estH + offset && space.bottom > space.top ? 'bottom' : 'top';\r\n case 'bottom':\r\n return space.bottom < estH + offset && space.top > space.bottom ? 'top' : 'bottom';\r\n case 'left':\r\n return space.left < estW + offset && space.right > space.left ? 'right' : 'left';\r\n case 'right':\r\n return space.right < estW + offset && space.left > space.right ? 'left' : 'right';\r\n }\r\n }\r\n\r\n /**\r\n * Resolves a `\"<side>\"` or `\"<side>-<align>\"` placement string (e.g. `top`,\r\n * `bottom-start`, `top-end`), flipping the side to fit the viewport while\r\n * preserving the alignment. Unknown placements are returned unchanged.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Near the bottom of the viewport with no room below:\r\n * positions.flipPlacement(trigger, 'bottom-start', { overlayHeight: 240 });\r\n * // => 'top-start'\r\n * ```\r\n */\r\n flipPlacement(\r\n anchor: HTMLElement,\r\n preferred: string,\r\n options: OverlayPositionOptions = {},\r\n ): string {\r\n const [sideStr, align] = preferred.split('-');\r\n if (!this.isSide(sideStr)) return preferred;\r\n\r\n const resolvedSide = this.flipSide(anchor, sideStr, options);\r\n return align ? `${resolvedSide}-${align}` : resolvedSide;\r\n }\r\n\r\n private isSide(value: string | undefined): value is OverlaySide {\r\n return value === 'top' || value === 'bottom' || value === 'left' || value === 'right';\r\n }\r\n}\r\n","import { PshFieldAppearance } from '../../types/semantic.types';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport {\r\n NgZone,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DestroyRef,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n ChangeDetectorRef,\r\n TemplateRef,\r\n ViewContainerRef,\r\n viewChild,\r\n effect\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\r\nimport type { FormValueControl } from '@angular/forms/signals';\r\nimport { PshPortalService, PshPortalRef } from '../../a11y/portal.service';\r\nimport { PshOverlayPositionService } from '../../a11y/overlay-position.service';\r\nimport { InputType, InputSize, AutocompleteConfig, INPUT_LABELS } from './input.types';\r\nimport { pshIsEmptyValue, pshRequiredError } from '../../utils/required-validator';\r\nimport { pshJoinAriaIds } from '../../utils/aria';\r\nimport { INPUT_CONFIG } from './input.tokens';\r\n\r\n@Component({\r\n selector: 'psh-input',\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.css'],\r\n providers: [\r\n { provide: NG_VALIDATORS, useExisting: PshInputComponent, multi: true },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshInputComponent,\r\n multi: true\r\n }\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.psh-full-width]': 'fullWidth()',\r\n '[class.psh-small]': 'size() === \"small\"',\r\n '[class.psh-large]': 'size() === \"large\"',\r\n '[class.psh-error]': '!!error()',\r\n '[class.psh-success]': '!!success()',\r\n '[class.psh-disabled]': 'disabled()',\r\n '[class.psh-readonly]': 'readonly()',\r\n '[class.psh-loading]': 'loading()',\r\n '[class.psh-focused]': 'isFocused()',\r\n '[class.psh-has-start-icon]': '!!iconStart()',\r\n '[class.psh-has-end-icon]': '!!iconEnd() || type() === \"password\"',\r\n '[class.psh-outline]': 'appearance() === \"outline\"',\r\n '[class.psh-solid]': 'appearance() === \"solid\"',\r\n }\r\n})\r\nexport class PshInputComponent implements ControlValueAccessor, FormValueControl<string>, Validator {\r\n private readonly zone = inject(NgZone);\r\n private readonly config = inject(INPUT_CONFIG);\r\n\r\n private readonly elementRef = inject(ElementRef);\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly portal = inject(PshPortalService);\r\n private readonly viewContainer = inject(ViewContainerRef);\r\n private readonly overlayPosition = inject(PshOverlayPositionService);\r\n\r\n // The autocomplete suggestions are teleported to a body-level overlay layer so\r\n // they escape any ancestor overflow / stacking context (a modal body, a\r\n // scrollable card…) instead of being clipped.\r\n private readonly suggestionsTpl = viewChild<TemplateRef<unknown>>('suggestionsTpl');\r\n private portalRef: PshPortalRef | null = null;\r\n private readonly repositionHandler = (): void => this.reposition();\r\n\r\n private static nextId = 0;\r\n readonly inputId = `psh-input-${PshInputComponent.nextId++}`;\r\n\r\n readonly value = model<string>('');\r\n readonly disabled = model<boolean>(false);\r\n readonly readonly = input(false);\r\n readonly loading = input(false);\r\n readonly touched = model(false);\r\n/**\r\n * Emitted when the user finishes interacting with the control.\r\n *\r\n * Part of `FormUiControl`: the `Field` directive listens to **this**, not to\r\n * `touchedChange`, to mark the bound field as touched.\r\n */\r\n readonly touch = output<void>();\r\n\r\n readonly appearance = input<PshFieldAppearance>(this.config.appearance ?? 'outline');\r\n readonly size = input<InputSize>(this.config.size ?? 'medium');\r\n readonly fullWidth = input(this.config.fullWidth ?? false);\r\n readonly required = input(this.config.required ?? false);\r\n readonly showLabel = input(this.config.showLabel ?? true);\r\n readonly type = input<InputType>(this.config.type ?? 'text');\r\n readonly placeholder = input(this.config.placeholder ?? '');\r\n readonly label = input(this.config.label ?? '');\r\n readonly ariaLabel = input<string | null>(null);\r\n readonly iconStart = input<string>();\r\n readonly iconEnd = input<string>();\r\n readonly error = input<string | null | undefined>(null);\r\n readonly success = input<string | null | undefined>(null);\r\n readonly hint = input<string | null | undefined>(null);\r\n\r\n /**\r\n * Extra ids for `aria-describedby`. **Merged** with the control's own — the id of its error,\r\n * success or hint message — never replacing them.\r\n */\r\n readonly ariaDescribedBy = input<string>();\r\n\r\n /**\r\n * Ids of the elements that name this control, for the cases a visible `<label>` cannot\r\n * cover. Merged with anything the control already points at.\r\n */\r\n readonly ariaLabelledBy = input<string>();\r\n \r\n readonly suggestions = input<string[] | ((query: string) => Promise<string[]>)>([]);\r\n readonly autocompleteConfig = input<AutocompleteConfig>({\r\n minLength: 1,\r\n debounceTime: 300\r\n });\r\n\r\n private readonly suggestionsVisible = signal(false);\r\n private readonly focusedSignal = signal(false);\r\n private readonly filteredSuggestionsSignal = signal<string[]>([]);\r\n readonly focusedSuggestionIndex = signal(-1);\r\n private readonly passwordVisibleSignal = signal(false);\r\n \r\n private blurTimeoutId: number | null = null;\r\n private debounceTimeoutId: number | null = null;\r\n\r\n focused = output<void>();\r\n blurred = output<void>();\r\n suggestionSelected = output<string>();\r\n\r\n readonly showSuggestions = computed(() => this.suggestionsVisible() && this.filteredSuggestions().length > 0);\r\n\r\n /**\r\n * The suggestions listbox is announced only when the input can actually produce one.\r\n *\r\n * A `role=\"combobox\"` on a field with no popup tells a screen-reader user to expect one, so\r\n * this follows the `suggestions` input rather than being written on unconditionally.\r\n */\r\n protected readonly hasSuggestions = computed(() => {\r\n const source = this.suggestions();\r\n return typeof source === 'function' || source.length > 0;\r\n });\r\n\r\n protected readonly listboxId = `${this.inputId}-listbox`;\r\n\r\n /** The option the arrow keys are on — what a combobox reports through aria-activedescendant. */\r\n protected readonly activeDescendant = computed(() => {\r\n const index = this.focusedSuggestionIndex();\r\n return this.showSuggestions() && index >= 0 ? `${this.listboxId}-option-${index}` : null;\r\n });\r\n readonly filteredSuggestions = computed(() => this.filteredSuggestionsSignal());\r\n /** Whether the control currently has focus. A state readout; the event is `focused`. */\r\n readonly isFocused = computed(() => this.focusedSignal());\r\n readonly passwordVisible = computed(() => this.passwordVisibleSignal());\r\n \r\n readonly effectiveType = computed(() => {\r\n if (this.type() === 'password') {\r\n return this.passwordVisible() ? 'text' : 'password';\r\n }\r\n return this.type();\r\n });\r\n\r\n readonly computedAriaLabel = computed(() => this.ariaLabel() || this.label() || this.placeholder());\r\n readonly showPasswordLabel = input<string | undefined>(undefined);\r\n readonly hidePasswordLabel = input<string | undefined>(undefined);\r\n\r\n /** Name of the reveal control. It flips with the state, so it is one computed, not two. */\r\n readonly passwordToggleLabel = computed(() => {\r\n // Both are resolved before the choice, not inside it: a branch that is not taken is a\r\n // configured default nothing reads, and that is exactly what config-tokens.spec looks for.\r\n const show =\r\n this.showPasswordLabel() ??\r\n pshResolveConfigValue(this.config.showPasswordLabel) ??\r\n INPUT_LABELS.showPassword;\r\n const hide =\r\n this.hidePasswordLabel() ??\r\n pshResolveConfigValue(this.config.hidePasswordLabel) ??\r\n INPUT_LABELS.hidePassword;\r\n return this.passwordVisible() ? hide : show;\r\n });\r\n\r\n // Derived from the per-instance inputId: the message ids used to be the constants\r\n // 'error-message' / 'success-message' / 'hint-message', so two inputs in error on the\r\n // same page produced duplicate ids and a screen reader read the first one's message\r\n // for both. Same shape as textarea's describedBy.\r\n readonly describedBy = computed(() => {\r\n const own = this.error()\r\n ? `${this.inputId}-error`\r\n : this.success()\r\n ? `${this.inputId}-success`\r\n : this.hint()\r\n ? `${this.inputId}-hint`\r\n : null;\r\n return pshJoinAriaIds(own, this.ariaDescribedBy());\r\n });\r\n\r\n readonly state = computed(() => this.getState());\r\n\r\n private getState(): string {\r\n if (this.disabled()) return 'disabled';\r\n if (this.readonly()) return 'readonly';\r\n if (this.loading()) return 'loading';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n if (this.isFocused()) return 'focused';\r\n return 'default';\r\n }\r\n\r\n constructor() {\r\n // A value change revalidates by itself; a change to `required` does not — Angular has\r\n // no reason to suspect the validator's answer moved. This is what the callback is for.\r\n effect(() => {\r\n this.required();\r\n this.onValidatorChange();\r\n });\r\n\r\n this.destroyRef.onDestroy(() => {\r\n if (this.blurTimeoutId) clearTimeout(this.blurTimeoutId);\r\n if (this.debounceTimeoutId) clearTimeout(this.debounceTimeoutId);\r\n this.closePanel();\r\n });\r\n }\r\n\r\n /** Attaches / detaches / repositions the teleported suggestions panel to match visibility. */\r\n private syncPanel(): void {\r\n if (this.showSuggestions()) {\r\n if (this.portalRef) this.reposition();\r\n else this.openPanel();\r\n } else if (this.portalRef) {\r\n this.closePanel();\r\n }\r\n }\r\n\r\n private openPanel(): void {\r\n const tpl = this.suggestionsTpl();\r\n if (!tpl || this.portalRef) return;\r\n this.portalRef = this.portal.attach(tpl, this.viewContainer);\r\n this.reposition();\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n // Capture phase so inner (e.g. modal body) scrolls keep the panel aligned.\r\n // Registered outside Angular: a capture-phase scroll listener fires on every scroll of\r\n // every ancestor, and each one triggered a full change-detection pass. Repositioning\r\n // writes to the DOM and to a signal, and a signal write schedules its own refresh — the\r\n // zone was doing the work twice.\r\n this.zone.runOutsideAngular(() => {\r\n view?.addEventListener('scroll', this.repositionHandler, true);\r\n view?.addEventListener('resize', this.repositionHandler);\r\n });\r\n }\r\n\r\n private closePanel(): void {\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n view?.removeEventListener('scroll', this.repositionHandler, true);\r\n view?.removeEventListener('resize', this.repositionHandler);\r\n this.portalRef?.detach();\r\n this.portalRef = null;\r\n }\r\n\r\n private reposition(): void {\r\n if (!this.portalRef) return;\r\n const anchor = (this.elementRef.nativeElement as HTMLElement).querySelector(\r\n '.input-wrapper',\r\n ) as HTMLElement | null;\r\n if (!anchor) return;\r\n const side = this.overlayPosition.flipSide(anchor, 'bottom', {\r\n overlayHeight: this.portalRef.panel.offsetHeight,\r\n }) as 'top' | 'bottom';\r\n this.portalRef.position(anchor, side, 4);\r\n }\r\n\r\n private onChange = (_: string) => {};\r\n private onTouched = () => {};\r\n private onValidatorChange: () => void = () => {};\r\n\r\n writeValue(value: unknown): void {\r\n const safeValue = typeof value === 'string' ? value : '';\r\n this.value.set(safeValue);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (v: string) => void): void { this.onChange = fn; }\r\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n\r\n handleInput(event: Event): void {\r\n const val = (event.target as HTMLInputElement).value;\r\n this.value.set(val);\r\n this.onChange(val);\r\n\r\n if (this.suggestions()) {\r\n this.debouncedUpdateSuggestions(val);\r\n }\r\n }\r\n\r\n handleFocus(): void {\r\n this.focusedSignal.set(true);\r\n this.focused.emit();\r\n\r\n const val = this.value();\r\n if (this.suggestions() && val.length >= this.autocompleteConfig().minLength) {\r\n this.updateSuggestions(val);\r\n }\r\n }\r\n\r\n handleBlur(): void {\r\n this.focusedSignal.set(false);\r\n this.blurred.emit();\r\n this.onTouched();\r\n this.touched.set(true);\r\n this.touch.emit();\r\n\r\n if (this.blurTimeoutId) clearTimeout(this.blurTimeoutId);\r\n this.blurTimeoutId = setTimeout(() => {\r\n this.suggestionsVisible.set(false);\r\n this.focusedSuggestionIndex.set(-1);\r\n this.syncPanel();\r\n this.blurTimeoutId = null;\r\n }, 200);\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (!this.showSuggestions()) return;\r\n\r\n const suggestions = this.filteredSuggestions();\r\n const currentIndex = this.focusedSuggestionIndex();\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.focusedSuggestionIndex.update(i => (i < suggestions.length - 1 ? i + 1 : 0));\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.focusedSuggestionIndex.update(i => (i > 0 ? i - 1 : suggestions.length - 1));\r\n break;\r\n case 'Enter':\r\n if (currentIndex >= 0 && currentIndex < suggestions.length) {\r\n event.preventDefault();\r\n const selected = suggestions[currentIndex];\r\n if (selected !== undefined) {\r\n this.handleSuggestionClick(selected);\r\n }\r\n }\r\n break;\r\n case 'Escape':\r\n event.preventDefault();\r\n this.suggestionsVisible.set(false);\r\n this.focusedSuggestionIndex.set(-1);\r\n this.syncPanel();\r\n break;\r\n }\r\n }\r\n\r\n handleSuggestionClick(suggestion: string): void {\r\n this.value.set(suggestion);\r\n this.onChange(suggestion);\r\n this.suggestionSelected.emit(suggestion);\r\n this.suggestionsVisible.set(false);\r\n this.focusedSuggestionIndex.set(-1);\r\n this.syncPanel();\r\n }\r\n\r\n togglePasswordVisibility(): void {\r\n this.passwordVisibleSignal.update(v => !v);\r\n }\r\n\r\n protected hasLabelContent(): boolean {\r\n return !!this.elementRef.nativeElement.querySelector('[psh-input-label]');\r\n }\r\n\r\n focus(): void {\r\n const inputEl = this.elementRef.nativeElement.querySelector('input');\r\n inputEl?.focus();\r\n }\r\n\r\n focusSelect(): void {\r\n this.focus();\r\n }\r\n\r\n private debouncedUpdateSuggestions(value: string): void {\r\n if (this.debounceTimeoutId) clearTimeout(this.debounceTimeoutId);\r\n this.debounceTimeoutId = setTimeout(() => {\r\n this.updateSuggestions(value);\r\n this.debounceTimeoutId = null;\r\n }, this.autocompleteConfig().debounceTime);\r\n }\r\n\r\n private async updateSuggestions(value: string): Promise<void> {\r\n const provider = this.suggestions();\r\n\r\n try {\r\n let results: string[] = [];\r\n if (typeof provider === 'function') {\r\n results = await provider(value);\r\n } else if (Array.isArray(provider)) {\r\n results = provider.filter(s => s.toLowerCase().includes(value.toLowerCase()));\r\n }\r\n \r\n this.filteredSuggestionsSignal.set(results);\r\n this.suggestionsVisible.set(results.length > 0);\r\n this.syncPanel();\r\n } catch (error) {\r\n // Fail gracefully (hide stale suggestions) but surface the error so a\r\n // failing provider is not silently swallowed during development.\r\n this.filteredSuggestionsSignal.set([]);\r\n this.suggestionsVisible.set(false);\r\n this.syncPanel();\r\n console.error('[psh-input] Suggestion provider failed:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Makes `required` a real constraint rather than an asterisk.\r\n *\r\n * Re-run whenever `required` or the value changes: `registerOnValidatorChange` gives us\r\n * the callback that tells Angular to revalidate, and an effect fires it.\r\n */\r\n validate(): ValidationErrors | null {\r\n return pshRequiredError(this.required(), pshIsEmptyValue(this.value()));\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.onValidatorChange = fn;\r\n }\r\n\r\n}","<div class=\"psh-input-container\">\r\n @if (showLabel()) {\r\n <!-- label[for] delegates focus to its control natively; the click handler is a convenience. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <label\r\n class=\"psh-input-label\"\r\n [for]=\"inputId\"\r\n (click)=\"focusSelect()\"\r\n [class.psh-required]=\"required()\"\r\n >\r\n <ng-content select=\"[psh-input-label]\"></ng-content>\r\n @if (!hasLabelContent()) {\r\n {{ label() }}\r\n }\r\n </label>\r\n }\r\n\r\n <div class=\"psh-input-wrapper\">\r\n @if (iconStart()) {\r\n <i class=\"ph ph-{{ iconStart() }}\" aria-hidden=\"true\"></i>\r\n }\r\n\r\n <input\r\n [id]=\"inputId\"\r\n [type]=\"effectiveType()\"\r\n [attr.placeholder]=\"placeholder()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-invalid]=\"!!error()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n [attr.role]=\"hasSuggestions() ? 'combobox' : null\"\r\n [attr.aria-autocomplete]=\"hasSuggestions() ? 'list' : null\"\r\n [attr.aria-expanded]=\"hasSuggestions() ? showSuggestions() : null\"\r\n [attr.aria-controls]=\"showSuggestions() ? listboxId : null\"\r\n [attr.aria-activedescendant]=\"activeDescendant()\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [required]=\"required()\"\r\n [value]=\"value()\"\r\n (input)=\"handleInput($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n (focus)=\"handleFocus()\"\r\n (blur)=\"handleBlur()\"\r\n [attr.data-state]=\"state()\"\r\n />\r\n\r\n @if (iconEnd()) {\r\n <i class=\"ph ph-{{ iconEnd() }}\" aria-hidden=\"true\"></i>\r\n }\r\n\r\n @if (type() === 'password') {\r\n <button\r\n type=\"button\"\r\n class=\"psh-password-toggle\"\r\n (click)=\"togglePasswordVisibility()\"\r\n [attr.aria-label]=\"passwordToggleLabel()\"\r\n [disabled]=\"disabled() || readonly()\"\r\n >\r\n <i \r\n [class]=\"'ph ph-' + (passwordVisible() ? 'eye-slash' : 'eye')\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </button>\r\n }\r\n\r\n @if (loading()) {\r\n <div class=\"psh-input-loader\" aria-hidden=\"true\">\r\n <div class=\"psh-loader\"></div>\r\n </div>\r\n }\r\n\r\n <ng-template #suggestionsTpl>\r\n <div class=\"psh-suggestions-list\" role=\"listbox\" [id]=\"listboxId\">\r\n @for (suggestion of filteredSuggestions(); track suggestion; let i = $index) {\r\n <!-- option in a listbox: keyboard is handled by the input (arrow keys + focusedSuggestionIndex). -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <div\r\n class=\"psh-suggestion-item\"\r\n [class.psh-focused]=\"i === focusedSuggestionIndex()\"\r\n [id]=\"listboxId + '-option-' + i\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"i === focusedSuggestionIndex()\"\r\n (click)=\"handleSuggestionClick(suggestion)\"\r\n (mouseenter)=\"focusedSuggestionIndex.set(i)\"\r\n >\r\n {{ suggestion }}\r\n </div>\r\n }\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n @if (error()) {\r\n <div [id]=\"inputId + '-error'\" class=\"psh-input-error\" role=\"alert\">\r\n <ng-content select=\"[psh-input-error]\">\r\n {{ error() }}\r\n </ng-content>\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"inputId + '-success'\" class=\"psh-input-success\" role=\"status\">\r\n <ng-content select=\"[psh-input-success]\">\r\n {{ success() }}\r\n </ng-content>\r\n </div>\r\n } @else if (hint()) {\r\n <div [id]=\"inputId + '-hint'\" class=\"psh-input-hint\">\r\n <ng-content select=\"[psh-input-hint]\">\r\n {{ hint() }}\r\n </ng-content>\r\n </div>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, inject, input, output, signal, InjectionToken, TemplateRef } from '@angular/core';\r\nimport { PshLiveAnnouncerService } from '../../a11y/live-announcer.service';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { PshInputComponent } from '../input/input.component';\r\nimport { TableColumn, TableRow, TableSort, TableConfig, TableRowClickEvent, TableRowExpandEvent, TableExpandedRowContext, TableHeaderContext, TableEmptyContext } from './table.types';\r\n\r\nconst TABLE_DEFAULTS = {\r\n appearance: 'flat',\r\n size: 'medium',\r\n striped: false,\r\n hoverable: false,\r\n bordered: false,\r\n loading: false,\r\n emptyMessage: 'No data available',\r\n noResultsMessage: 'No results found',\r\n globalSearch: false,\r\n globalSearchPlaceholder: 'Search in all columns...',\r\n tableLayout: 'auto',\r\n truncateText: false,\r\n fullWidth: false,\r\n expandable: false,\r\n singleExpand: false,\r\n expandColumnLabel: 'Expand',\r\n expandRowLabel: 'Expand row',\r\n collapseRowLabel: 'Collapse row',\r\n sortedAscendingLabel: 'sorted ascending',\r\n sortedDescendingLabel: 'sorted descending',\r\n resultsFoundLabel: 'results found',\r\n} satisfies Partial<TableConfig>;\r\n\r\nexport const TABLE_CONFIG = new InjectionToken<Partial<TableConfig>>('TABLE_CONFIG', {\r\n factory: () => TABLE_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-table',\r\n imports: [NgTemplateOutlet, PshInputComponent],\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n 'class': 'psh-table',\r\n '[class.psh-full-width]': 'fullWidth()'\r\n }\r\n})\r\nexport class PshTableComponent {\r\n private config = inject(TABLE_CONFIG);\r\n private readonly announcer = inject(PshLiveAnnouncerService);\r\n\r\n readonly appearance = input<'flat' | 'outline'>(this.config.appearance ?? 'flat');\r\n readonly size = input<'small' | 'medium' | 'large'>(this.config.size ?? 'medium');\r\n readonly striped = input(this.config.striped ?? false);\r\n readonly hoverable = input(this.config.hoverable ?? false);\r\n readonly bordered = input(this.config.bordered ?? false);\r\n readonly loading = input(this.config.loading ?? false);\r\n readonly globalSearch = input(this.config.globalSearch ?? false);\r\n readonly fullWidth = input(this.config.fullWidth ?? false);\r\n readonly columns = input.required<TableColumn[]>();\r\n readonly data = input.required<TableRow[]>();\r\n readonly emptyMessageInput = input<string | undefined>(undefined, { alias: 'emptyMessage' });\r\n readonly emptyMessage = computed(\r\n () => this.emptyMessageInput() ?? pshResolveConfigValue(this.config.emptyMessage) ?? 'No data available',\r\n );\r\n readonly noResultsMessageInput = input<string | undefined>(undefined, { alias: 'noResultsMessage' });\r\n readonly noResultsMessage = computed(\r\n () => this.noResultsMessageInput() ?? pshResolveConfigValue(this.config.noResultsMessage) ?? 'No results found',\r\n );\r\n readonly globalSearchPlaceholderInput = input<string | undefined>(undefined, { alias: 'globalSearchPlaceholder' });\r\n readonly globalSearchPlaceholder = computed(\r\n () => this.globalSearchPlaceholderInput() ?? pshResolveConfigValue(this.config.globalSearchPlaceholder) ?? 'Search in all columns...',\r\n );\r\n readonly tableLayout = input<'auto' | 'fixed'>(this.config.tableLayout ?? 'auto');\r\n readonly truncateText = input(this.config.truncateText ?? false);\r\n readonly expandable = input(this.config.expandable ?? false);\r\n readonly singleExpand = input(this.config.singleExpand ?? false);\r\n readonly expandedRowTemplate = input<TemplateRef<TableExpandedRowContext>>();\r\n\r\n /**\r\n * Replaces the content of every column header.\r\n *\r\n * The body cell was templatable and the header was not, so a per-column filter or a\r\n * two-line label meant `::ng-deep` into the `<th>`. The context carries the sort state and\r\n * a `toggleSort` callback, so the component keeps owning the keyboard path and `aria-sort`.\r\n */\r\n readonly headerTemplate = input<TemplateRef<TableHeaderContext>>();\r\n\r\n /**\r\n * Replaces the empty state.\r\n *\r\n * `emptyMessage` and `noResultsMessage` are strings, so an illustration or a \"clear the\r\n * filter\" button had nowhere to go. Both inputs still work when no template is given.\r\n */\r\n readonly emptyTemplate = input<TemplateRef<TableEmptyContext>>();\r\n\r\n /**\r\n * Extra classes for a row, from the row itself.\r\n *\r\n * `InfoCardData.customClass` already existed for the same need one component over; a table\r\n * had no way to mark a row as overdue, selected or archived.\r\n */\r\n readonly rowClass = input<(row: TableRow) => string | undefined>();\r\n\r\n /** Name of the table itself. There was none, so several tables on a page were all \"table\". */\r\n readonly ariaLabel = input<string>();\r\n /** Name of the expand column header, which has no visible text. Was a literal. */\r\n readonly expandColumnLabelInput = input<string | undefined>(undefined, { alias: 'expandColumnLabel' });\r\n readonly expandColumnLabel = computed(\r\n () => this.expandColumnLabelInput() ?? pshResolveConfigValue(this.config.expandColumnLabel) ?? 'Expand',\r\n );\r\n /** Name of a row's expand toggle. Was a pair of literals. */\r\n readonly expandRowLabelInput = input<string | undefined>(undefined, { alias: 'expandRowLabel' });\r\n readonly expandRowLabel = computed(\r\n () => this.expandRowLabelInput() ?? pshResolveConfigValue(this.config.expandRowLabel) ?? 'Expand row',\r\n );\r\n /** Name of a row's collapse toggle. Was a pair of literals. */\r\n readonly sortedAscendingLabel = computed(\r\n () => pshResolveConfigValue(this.config.sortedAscendingLabel) ?? 'sorted ascending',\r\n );\r\n readonly sortedDescendingLabel = computed(\r\n () => pshResolveConfigValue(this.config.sortedDescendingLabel) ?? 'sorted descending',\r\n );\r\n readonly resultsFoundLabel = computed(\r\n () => pshResolveConfigValue(this.config.resultsFoundLabel) ?? 'results found',\r\n );\r\n\r\n readonly collapseRowLabelInput = input<string | undefined>(undefined, { alias: 'collapseRowLabel' });\r\n readonly collapseRowLabel = computed(\r\n () => this.collapseRowLabelInput() ?? pshResolveConfigValue(this.config.collapseRowLabel) ?? 'Collapse row',\r\n );\r\n\r\n sortChange = output<TableSort>();\r\n globalSearchChange = output<string>();\r\n rowClicked = output<TableRowClickEvent>();\r\n rowExpanded = output<TableRowExpandEvent>();\r\n rowCollapsed = output<TableRowExpandEvent>();\r\n\r\n private readonly currentSortSignal = signal<TableSort | undefined>(undefined);\r\n readonly searchTermSignal = signal('');\r\n private readonly expandedRowIds = signal<Set<string | number>>(new Set());\r\n\r\n readonly currentSort = computed(() => this.currentSortSignal());\r\n readonly searchTerm = computed(() => this.searchTermSignal());\r\n\r\n readonly computedEmptyMessage = computed(() => {\r\n return this.searchTerm()\r\n ? `${this.noResultsMessage()} \"${this.searchTerm()}\"`\r\n : this.emptyMessage();\r\n });\r\n\r\n readonly state = computed(() => {\r\n if (this.loading()) return 'loading';\r\n if (this.filteredData().length === 0) return 'empty';\r\n return 'flat';\r\n });\r\n\r\n readonly filteredData = computed(() => {\r\n let result = [...this.data()];\r\n\r\n if (this.searchTerm()) {\r\n result = this.filterData(result, this.searchTerm());\r\n }\r\n\r\n const sort = this.currentSort();\r\n if (sort) {\r\n result = this.sortData(result, sort);\r\n }\r\n\r\n return result;\r\n });\r\n\r\n /**\r\n * Trie les données\r\n */\r\n private sortData(data: TableRow[], sort: TableSort): TableRow[] {\r\n return [...data].sort((a, b) => {\r\n const column = this.columns().find(col => col.key === sort.key);\r\n \r\n // Utiliser la fonction de tri personnalisée si elle existe\r\n if (column?.sortFn) {\r\n return sort.direction === 'asc' \r\n ? column.sortFn(a, b)\r\n : column.sortFn(b, a);\r\n }\r\n \r\n // Sinon, utiliser le tri par défaut avec le chemin\r\n const aValue = this.getNestedValue(a, column?.path || sort.key);\r\n const bValue = this.getNestedValue(b, column?.path || sort.key);\r\n\r\n return sort.direction === 'asc'\r\n ? this.compareValues(aValue, bValue)\r\n : this.compareValues(bValue, aValue);\r\n });\r\n }\r\n\r\n /**\r\n * Compare deux valeurs inconnues (numérique si possible, sinon lexicographique).\r\n */\r\n private compareValues(a: unknown, b: unknown): number {\r\n if (typeof a === 'number' && typeof b === 'number') {\r\n return a > b ? 1 : -1;\r\n }\r\n return String(a ?? '') > String(b ?? '') ? 1 : -1;\r\n }\r\n\r\n /**\r\n * Filtre les données\r\n */\r\n private filterData(data: TableRow[], searchTerm: string): TableRow[] {\r\n if (!searchTerm) return data;\r\n \r\n const term = searchTerm.toLowerCase();\r\n return data.filter(row => {\r\n return this.columns().some(column => {\r\n const value = this.getNestedValue(row, column.path || column.key);\r\n return value != null && String(value).toLowerCase().includes(term);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Récupère la valeur d'un objet imbriqué en utilisant un chemin\r\n */\r\n private getNestedValue(obj: unknown, path: string): unknown {\r\n return path.split('.').reduce<unknown>(\r\n (acc, part) =>\r\n acc != null && typeof acc === 'object'\r\n ? (acc as Record<string, unknown>)[part]\r\n : undefined,\r\n obj\r\n );\r\n }\r\n\r\n handleSort(column: TableColumn): void {\r\n if (!column.sortable) return;\r\n\r\n const direction = !this.currentSort() || this.currentSort()?.key !== column.key\r\n ? 'asc'\r\n : this.currentSort()?.direction === 'asc'\r\n ? 'desc'\r\n : 'asc';\r\n\r\n const sort: TableSort = { key: column.key, direction };\r\n this.currentSortSignal.set(sort);\r\n this.sortChange.emit(sort);\r\n\r\n // `aria-sort` states the new order for a reader that goes back to the header. Nothing\r\n // told a user who is not there that the whole body had just been reordered.\r\n this.announcer.announce(\r\n `${column.label}: ${direction === 'asc' ? this.sortedAscendingLabel() : this.sortedDescendingLabel()}`,\r\n );\r\n }\r\n\r\n onSearchValueChange(value: string): void {\r\n this.globalSearchChange.emit(value);\r\n // Filtering replaces the body silently too, and the count is the useful part of it.\r\n this.announcer.announce(`${this.filteredData().length} ${this.resultsFoundLabel()}`);\r\n }\r\n\r\n handleRowClick(row: TableRow): void {\r\n this.rowClicked.emit({ id: row.id, row });\r\n }\r\n\r\n /**\r\n * The path of each column, split once instead of once per cell.\r\n *\r\n * `getCellValue` runs rows × columns times per change-detection cycle and used to split the\r\n * path string on every one of them. The split depends on the columns, not on the data.\r\n */\r\n private readonly columnPaths = computed(\r\n () => new Map(this.columns().map(column => [column, (column.path || column.key).split('.')])),\r\n );\r\n\r\n protected getCellValue(row: TableRow, column: TableColumn): unknown {\r\n const path = this.columnPaths().get(column) ?? (column.path || column.key).split('.');\r\n return path.reduce<unknown>(\r\n (acc, part) =>\r\n acc != null && typeof acc === 'object' ? (acc as Record<string, unknown>)[part] : undefined,\r\n row,\r\n );\r\n }\r\n\r\n /**\r\n * The context a custom header receives.\r\n *\r\n * `toggleSort` is handed over rather than left to the caller: the component keeps owning\r\n * `aria-sort` and the keyboard path, so a custom header cannot accidentally ship a `<div>`\r\n * that only responds to a mouse — which is the bug B1 fixed on the default header.\r\n */\r\n private readonly headerContexts = computed(() => {\r\n const sort = this.currentSort();\r\n return new Map<TableColumn, TableHeaderContext>(\r\n this.columns().map(column => [\r\n column,\r\n {\r\n $implicit: column,\r\n sort: sort?.key === column.key ? sort.direction : null,\r\n toggleSort: () => this.handleSort(column),\r\n },\r\n ]),\r\n );\r\n });\r\n\r\n /**\r\n * Built once per render rather than once per cycle. The object used to be new every cycle —\r\n * and `toggleSort` a new closure with it — so `NgTemplateOutlet` saw a changed context each\r\n * time and re-rendered every custom header for nothing.\r\n */\r\n protected headerContext(column: TableColumn): TableHeaderContext {\r\n return (\r\n this.headerContexts().get(column) ?? {\r\n $implicit: column,\r\n sort: null,\r\n toggleSort: () => this.handleSort(column),\r\n }\r\n );\r\n }\r\n\r\n protected readonly emptyContext = computed<TableEmptyContext>(() => ({\r\n $implicit: this.computedEmptyMessage(),\r\n searchTerm: this.searchTerm(),\r\n }));\r\n\r\n protected rowClasses(row: TableRow): string {\r\n return this.rowClass()?.(row) ?? '';\r\n }\r\n\r\n readonly totalColumns = computed(() => this.columns().length + (this.expandable() ? 1 : 0));\r\n\r\n isRowExpandable(row: TableRow): boolean {\r\n return !!(row.children?.length || this.expandedRowTemplate());\r\n }\r\n\r\n isRowExpanded(row: TableRow): boolean {\r\n return this.expandedRowIds().has(row.id);\r\n }\r\n\r\n toggleRow(row: TableRow): void {\r\n if (!this.isRowExpandable(row)) return;\r\n\r\n const ids = new Set(this.expandedRowIds());\r\n const wasExpanded = ids.has(row.id);\r\n\r\n if (this.singleExpand()) {\r\n ids.clear();\r\n }\r\n\r\n if (wasExpanded) {\r\n ids.delete(row.id);\r\n this.expandedRowIds.set(ids);\r\n this.rowCollapsed.emit({ id: row.id, row, expanded: false });\r\n } else {\r\n ids.add(row.id);\r\n this.expandedRowIds.set(ids);\r\n this.rowExpanded.emit({ id: row.id, row, expanded: true });\r\n }\r\n }\r\n\r\n expandAll(): void {\r\n const ids = new Set<string | number>();\r\n for (const row of this.filteredData()) {\r\n if (this.isRowExpandable(row)) {\r\n ids.add(row.id);\r\n }\r\n }\r\n this.expandedRowIds.set(ids);\r\n }\r\n\r\n collapseAll(): void {\r\n this.expandedRowIds.set(new Set());\r\n }\r\n}","<div\r\n class=\"psh-table-wrapper\"\r\n [class.psh-striped]=\"striped()\"\r\n [class.psh-hoverable]=\"hoverable()\"\r\n [class.psh-bordered]=\"bordered()\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [class.psh-outline]=\"appearance() === 'outline'\"\r\n [class.psh-table-fixed]=\"tableLayout() === 'fixed'\"\r\n [class.psh-truncate]=\"truncateText()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @if (globalSearch()) {\r\n <div class=\"psh-global-search\" role=\"search\">\r\n <psh-input\r\n [placeholder]=\"globalSearchPlaceholder()\"\r\n [ariaLabel]=\"globalSearchPlaceholder()\"\r\n [size]=\"size()\"\r\n [fullWidth]=\"true\"\r\n [showLabel]=\"false\"\r\n iconStart=\"magnifying-glass\"\r\n type=\"search\"\r\n [(value)]=\"searchTermSignal\"\r\n (valueChange)=\"onSearchValueChange($event)\"\r\n />\r\n </div>\r\n }\r\n\r\n <table role=\"table\" [attr.aria-label]=\"ariaLabel()\">\r\n <thead>\r\n <tr>\r\n @if (expandable()) {\r\n <th class=\"psh-expand-header\" scope=\"col\" [attr.aria-label]=\"expandColumnLabel()\"></th>\r\n }\r\n @for (column of columns(); track column.key) {\r\n <th\r\n [style.width]=\"column.width\"\r\n scope=\"col\"\r\n [attr.aria-sort]=\"column.sortable ? (currentSort()?.key === column.key ? (currentSort()?.direction === 'asc' ? 'ascending' : 'descending') : 'none') : null\"\r\n [class.psh-sortable]=\"column.sortable\"\r\n >\r\n @if (headerTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"headerTemplate()!\"\r\n [ngTemplateOutletContext]=\"headerContext(column)\"\r\n ></ng-container>\r\n } @else if (column.sortable) {\r\n <!-- A real button, so sorting is reachable by keyboard and gets a native\r\n focus ring. The icons are decorative: aria-sort on the th carries the\r\n state, which is why they had aria-hidden cancelling their aria-label. -->\r\n <button\r\n type=\"button\"\r\n class=\"psh-th-content psh-sort-button\"\r\n (click)=\"handleSort(column)\"\r\n >\r\n {{ column.label }}\r\n @if (currentSort()?.key === column.key) {\r\n <i\r\n [class]=\"'ph ' + (currentSort()?.direction === 'desc' ? 'ph-sort-descending' : 'ph-sort-ascending')\"\r\n aria-hidden=\"true\">\r\n </i>\r\n } @else {\r\n <i class=\"ph ph-arrows-down-up psh-sort-icon-neutral\" aria-hidden=\"true\"></i>\r\n }\r\n </button>\r\n } @else {\r\n <div class=\"psh-th-content\">{{ column.label }}</div>\r\n }\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n @if (loading()) {\r\n <tr class=\"psh-loading-row\">\r\n <td [attr.colspan]=\"totalColumns()\">\r\n <div class=\"psh-loading-indicator\">\r\n <div class=\"psh-spinner\"></div>\r\n </div>\r\n </td>\r\n </tr>\r\n } @else if (filteredData().length === 0) {\r\n <tr class=\"psh-empty-row\">\r\n <td [attr.colspan]=\"totalColumns()\">\r\n @if (emptyTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"emptyTemplate()!\"\r\n [ngTemplateOutletContext]=\"emptyContext()\"\r\n ></ng-container>\r\n } @else {\r\n {{ computedEmptyMessage() }}\r\n }\r\n </td>\r\n </tr>\r\n } @else {\r\n @for (row of filteredData(); track row.id) {\r\n <tr\r\n [class]=\"rowClasses(row)\"\r\n [class.psh-expanded]=\"expandable() && isRowExpanded(row)\"\r\n [attr.tabindex]=\"hoverable() ? 0 : null\"\r\n (click)=\"handleRowClick(row)\"\r\n (keydown.enter)=\"handleRowClick(row)\"\r\n (keydown.space)=\"handleRowClick(row); $event.preventDefault()\"\r\n >\r\n @if (expandable()) {\r\n <td class=\"psh-expand-cell\">\r\n @if (isRowExpandable(row)) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-expand-toggle\"\r\n [attr.aria-expanded]=\"isRowExpanded(row)\"\r\n [attr.aria-label]=\"isRowExpanded(row) ? collapseRowLabel() : expandRowLabel()\"\r\n (click)=\"toggleRow(row); $event.stopPropagation()\"\r\n >\r\n <i class=\"ph ph-caret-right\"></i>\r\n </button>\r\n }\r\n </td>\r\n }\r\n @for (column of columns(); track column.key) {\r\n <td>\r\n @if (column.template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"column.template\"\r\n [ngTemplateOutletContext]=\"{ $implicit: row, column: column }\"\r\n ></ng-container>\r\n } @else {\r\n {{ getCellValue(row, column) }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n\r\n @if (expandable() && isRowExpanded(row)) {\r\n @if (expandedRowTemplate()) {\r\n <tr class=\"psh-expanded-content-row\">\r\n <td [attr.colspan]=\"totalColumns()\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"expandedRowTemplate()!\"\r\n [ngTemplateOutletContext]=\"{ $implicit: row }\"\r\n ></ng-container>\r\n </td>\r\n </tr>\r\n } @else if (row.children?.length) {\r\n @for (child of row.children; track child.id) {\r\n <tr class=\"psh-child-row\">\r\n @if (expandable()) {\r\n <td class=\"psh-expand-cell\"></td>\r\n }\r\n @for (column of columns(); track column.key) {\r\n <td>\r\n @if (column.template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"column.template\"\r\n [ngTemplateOutletContext]=\"{ $implicit: child, column: column }\"\r\n ></ng-container>\r\n } @else {\r\n {{ getCellValue(child, column) }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n }\r\n }\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * What a `psh-tab` needs from the tabs it sits in: the id prefix its tab button uses.\r\n *\r\n * See `PSH_STEPPER` for why this is a token rather than an import. The ids were `tab-0` and\r\n * `panel-0` — the *same* strings `psh-stepper` used, so a page with a tabs and a stepper had\r\n * duplicate ids across two unrelated components.\r\n */\r\nexport interface PshTabsApi {\r\n /** Unique per tabs instance. Tabs are `<prefix>-tab-<i>`, panels `<prefix>-panel-<i>`. */\r\n readonly idPrefix: string;\r\n}\r\n\r\nexport const PSH_TABS = new InjectionToken<PshTabsApi>('PSH_TABS');\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n input,\r\n signal\r\n} from '@angular/core';\r\nimport { Tab } from './tabs.types';\r\nimport { PSH_TABS } from './tabs.token';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\n@Component({\r\n selector: 'psh-tab',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.psh-tab-panel]': 'true',\r\n '[class.psh-active]': 'isActive()',\r\n '[attr.role]': '\"tabpanel\"',\r\n '[attr.aria-labelledby]': 'idPrefix + \"-tab-\" + index()',\r\n '[attr.id]': 'idPrefix + \"-panel-\" + index()',\r\n '[attr.tabindex]': 'isActive() ? 0 : -1'\r\n }\r\n})\r\nexport class PshTabComponent {\r\n /** The tabs' id prefix; see `PshStepComponent` for the standalone fallback. */\r\n protected readonly idPrefix =\r\n inject(PSH_TABS, { optional: true })?.idPrefix ?? pshUniqueId('tab');\r\n\r\n readonly header = input.required<string>();\r\n readonly icon = input<string>();\r\n readonly disabled = input(false);\r\n readonly ariaLabel = input<string>();\r\n\r\n private readonly _index = signal(0);\r\n private readonly _isActive = signal(false);\r\n\r\n readonly index = this._index.asReadonly();\r\n readonly isActive = this._isActive.asReadonly();\r\n\r\n setIndex(value: number): void {\r\n this._index.set(value);\r\n }\r\n\r\n setActive(active: boolean): void {\r\n this._isActive.set(active);\r\n }\r\n\r\n toTabData(): Tab {\r\n return {\r\n header: this.header(),\r\n icon: this.icon(),\r\n content: '',\r\n disabled: this.disabled(),\r\n ariaLabel: this.ariaLabel()\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n InjectionToken,\r\n linkedSignal,\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { TabsVariant, TabsSize, Tab, TabsConfig, TabChangeEvent } from './tabs.types';\r\nimport { PshTabComponent } from './tab.component';\r\nimport { PSH_TABS, PshTabsApi } from './tabs.token';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\nconst TABS_DEFAULTS = {\r\n ariaLabel: 'Tab navigation',\r\n variant: 'default',\r\n size: 'medium',\r\n activeIndex: 0,\r\n animated: true,\r\n} satisfies Partial<TabsConfig>;\r\n\r\nexport const TABS_CONFIG = new InjectionToken<Partial<TabsConfig>>('TABS_CONFIG', {\r\n factory: () => TABS_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-tabs',\r\n templateUrl: './tabs.component.html',\r\n styleUrls: ['./tabs.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: PSH_TABS, useExisting: PshTabsComponent }],\r\n host: {\r\n '[class]': 'hostClasses()',\r\n role: 'region',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n },\r\n})\r\nexport class PshTabsComponent implements PshTabsApi {\r\n /** Namespaces the tab and panel ids: they were `tab-0` / `panel-0` for every instance. */\r\n readonly idPrefix = pshUniqueId('tabs');\r\n\r\n private config = inject(TABS_CONFIG);\r\n\r\n readonly variant = input<TabsVariant>(this.config.variant ?? 'default');\r\n readonly size = input<TabsSize>(this.config.size ?? 'medium');\r\n readonly animated = input(this.config.animated ?? true);\r\n readonly tabs = input<Tab[]>([]);\r\n readonly ariaLabelInput = input<string | undefined>(undefined, { alias: 'ariaLabel' });\r\n readonly ariaLabel = computed(\r\n () => this.ariaLabelInput() ?? pshResolveConfigValue(this.config.ariaLabel) ?? 'Tab navigation',\r\n );\r\n readonly ariaOrientation = input<'horizontal' | 'vertical'>('horizontal');\r\n\r\n readonly activeIndexInput = input(this.config.activeIndex ?? 0, { alias: 'activeIndex' });\r\n readonly activeIndex = linkedSignal(this.activeIndexInput);\r\n\r\n readonly tabComponents = contentChildren(PshTabComponent);\r\n\r\n readonly tabsToDisplay = computed(() => {\r\n const components = this.tabComponents();\r\n if (components.length > 0) {\r\n return components.map(c => c.toTabData());\r\n }\r\n return this.tabs();\r\n });\r\n\r\n readonly hasContentProjection = computed(() => this.tabComponents().length > 0);\r\n\r\n activeIndexChange = output<number>();\r\n tabChange = output<TabChangeEvent>();\r\n\r\n readonly hostClasses = computed(() => {\r\n const classes = ['psh-tabs-wrapper'];\r\n const size = this.size();\r\n const variant = this.variant();\r\n\r\n if (size !== 'medium') classes.push(`psh-tabs-${size}`);\r\n classes.push(`psh-tabs-${variant}`);\r\n if (this.animated()) classes.push('psh-tabs-animated');\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const tabs = this.tabComponents();\r\n const currentIndex = this.activeIndex();\r\n tabs.forEach((tab, index) => {\r\n tab.setIndex(index);\r\n tab.setActive(index === currentIndex);\r\n });\r\n });\r\n\r\n effect(() => {\r\n const currentIndex = this.activeIndex();\r\n const tabs = this.tabsToDisplay();\r\n if (tabs.length > 0 && currentIndex >= tabs.length) {\r\n const clampedIndex = Math.max(0, tabs.length - 1);\r\n this.activeIndex.set(clampedIndex);\r\n this.activeIndexChange.emit(clampedIndex);\r\n }\r\n });\r\n }\r\n\r\n handleKeyDown(event: KeyboardEvent, _index: number): void {\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n this.selectPrevious();\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n this.selectNext();\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.selectFirst();\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.selectLast();\r\n break;\r\n }\r\n }\r\n\r\n selectTab(index: number): void {\r\n const tabs = this.tabsToDisplay();\r\n const tab = tabs[index];\r\n\r\n if (!tab || tab.disabled) return;\r\n\r\n const previousIndex = this.activeIndex();\r\n if (previousIndex !== index) {\r\n this.activeIndex.set(index);\r\n this.activeIndexChange.emit(index);\r\n this.tabChange.emit({ previousIndex, currentIndex: index, tab });\r\n }\r\n }\r\n\r\n selectNext(): void {\r\n const tabs = this.tabsToDisplay();\r\n let nextIndex = (this.activeIndex() + 1) % tabs.length;\r\n\r\n while (tabs[nextIndex]?.disabled && nextIndex !== this.activeIndex()) {\r\n nextIndex = (nextIndex + 1) % tabs.length;\r\n }\r\n\r\n if (nextIndex !== this.activeIndex()) {\r\n this.selectTab(nextIndex);\r\n }\r\n }\r\n\r\n selectPrevious(): void {\r\n const tabs = this.tabsToDisplay();\r\n let prevIndex = (this.activeIndex() - 1 + tabs.length) % tabs.length;\r\n\r\n while (tabs[prevIndex]?.disabled && prevIndex !== this.activeIndex()) {\r\n prevIndex = (prevIndex - 1 + tabs.length) % tabs.length;\r\n }\r\n\r\n if (prevIndex !== this.activeIndex()) {\r\n this.selectTab(prevIndex);\r\n }\r\n }\r\n\r\n selectFirst(): void {\r\n const tabs = this.tabsToDisplay();\r\n let firstIndex = 0;\r\n\r\n while (tabs[firstIndex]?.disabled && firstIndex < tabs.length - 1) {\r\n firstIndex++;\r\n }\r\n\r\n if (!tabs[firstIndex]?.disabled && firstIndex !== this.activeIndex()) {\r\n this.selectTab(firstIndex);\r\n }\r\n }\r\n\r\n selectLast(): void {\r\n const tabs = this.tabsToDisplay();\r\n let lastIndex = tabs.length - 1;\r\n\r\n while (tabs[lastIndex]?.disabled && lastIndex > 0) {\r\n lastIndex--;\r\n }\r\n\r\n if (!tabs[lastIndex]?.disabled && lastIndex !== this.activeIndex()) {\r\n this.selectTab(lastIndex);\r\n }\r\n }\r\n\r\n getActiveTab(): Tab | undefined {\r\n return this.tabsToDisplay()[this.activeIndex()];\r\n }\r\n\r\n getTabComponent(index: number): PshTabComponent | undefined {\r\n return this.tabComponents()[index];\r\n }\r\n}\r\n","<div\r\n class=\"psh-tabs-container\"\r\n [class.psh-animated]=\"animated()\"\r\n>\r\n <div\r\n class=\"psh-tabs-header\"\r\n [class]=\"'psh-' + variant()\"\r\n role=\"tablist\"\r\n [attr.aria-orientation]=\"ariaOrientation()\"\r\n >\r\n <!-- Tracked by position: see psh-stepper. `tabsToDisplay()` rebuilds its objects. -->\r\n @for (tab of tabsToDisplay(); track $index; let i = $index) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-tab-button\"\r\n role=\"tab\"\r\n [class.psh-active]=\"i === activeIndex()\"\r\n [attr.aria-selected]=\"i === activeIndex()\"\r\n [attr.aria-disabled]=\"tab.disabled || null\"\r\n [attr.aria-controls]=\"idPrefix + '-panel-' + i\"\r\n [attr.aria-label]=\"tab.ariaLabel || tab.header\"\r\n [attr.id]=\"idPrefix + '-tab-' + i\"\r\n [tabindex]=\"i === activeIndex() ? 0 : -1\"\r\n [disabled]=\"tab.disabled\"\r\n (click)=\"$event.preventDefault(); selectTab(i)\"\r\n (keydown)=\"handleKeyDown($event, i)\"\r\n >\r\n @if (tab.icon) {\r\n <i class=\"ph ph-{{ tab.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n {{ tab.header }}\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"psh-tabs-content\">\r\n @if (hasContentProjection()) {\r\n <ng-content />\r\n } @else {\r\n @for (tab of tabsToDisplay(); track $index; let i = $index) {\r\n <div\r\n class=\"psh-tab-panel\"\r\n role=\"tabpanel\"\r\n [class.psh-active]=\"i === activeIndex()\"\r\n [attr.aria-labelledby]=\"idPrefix + '-tab-' + i\"\r\n [attr.id]=\"idPrefix + '-panel-' + i\"\r\n [attr.tabindex]=\"i === activeIndex() ? 0 : -1\"\r\n [attr.hidden]=\"i !== activeIndex() || null\"\r\n >\r\n {{ tab.content }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output, InjectionToken, ElementRef, AfterContentChecked, signal } from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { TagVariant, TagSize, TagConfig } from './tag.types';\r\n\r\nconst TAG_DEFAULTS = {\r\n color: 'primary',\r\n size: 'medium',\r\n closable: false,\r\n disabled: false,\r\n interactive: false,\r\n closeLabel: 'Remove tag'\r\n} satisfies Partial<TagConfig>;\r\n\r\nexport const TAG_CONFIG = new InjectionToken<Partial<TagConfig>>('TAG_CONFIG', {\r\n factory: () => TAG_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-tag',\r\n templateUrl: './tag.component.html',\r\n styleUrls: ['./tag.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshTagComponent implements AfterContentChecked {\r\n private readonly config = inject(TAG_CONFIG);\r\n private readonly elementRef = inject(ElementRef);\r\n private readonly projectedText = signal('');\r\n\r\n readonly color = input<TagVariant>(this.config.color ?? 'primary');\r\n readonly size = input<TagSize>(this.config.size ?? 'medium');\r\n readonly closable = input(this.config.closable ?? false);\r\n readonly disabled = input(this.config.disabled ?? false);\r\n readonly interactive = input(this.config.interactive ?? false);\r\n readonly icon = input<string>();\r\n readonly closeLabelInput = input<string | undefined>(undefined, { alias: 'closeLabel' });\r\n readonly closeLabel = computed(\r\n () => this.closeLabelInput() ?? pshResolveConfigValue(this.config.closeLabel) ?? 'Remove tag',\r\n );\r\n readonly content = input('Tag');\r\n readonly ariaLabel = input<string>();\r\n\r\n readonly clicked = output<MouseEvent>();\r\n readonly closed = output<void>();\r\n\r\n readonly computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const contentText = this.content();\r\n if (contentText && contentText !== 'Tag') return contentText;\r\n\r\n const projected = this.projectedText();\r\n if (projected) return projected;\r\n\r\n return 'Tag';\r\n });\r\n\r\n ngAfterContentChecked(): void {\r\n const contentElement = this.elementRef.nativeElement.querySelector('.psh-tag-content');\r\n if (contentElement) {\r\n const text = (contentElement.textContent || '').trim();\r\n if (text !== this.projectedText()) {\r\n this.projectedText.set(text);\r\n }\r\n }\r\n }\r\n\r\n readonly computedRole = computed(() =>\r\n this.interactive() ? 'button' : 'status'\r\n );\r\n\r\n readonly computedTabIndex = computed(() =>\r\n this.interactive() && !this.disabled() ? 0 : -1\r\n );\r\n\r\n readonly state = computed(() => this.disabled() ? 'disabled' : 'default');\r\n\r\n handleClick(event: MouseEvent): void {\r\n if (!this.disabled() && this.interactive()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.disabled() || !this.interactive()) return;\r\n\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event as unknown as MouseEvent);\r\n }\r\n }\r\n\r\n handleClose(event: MouseEvent): void {\r\n event.stopPropagation();\r\n if (!this.disabled()) {\r\n this.closed.emit();\r\n }\r\n }\r\n}","<div\r\n class=\"psh-tag\"\r\n [class.psh-primary]=\"color() === 'primary'\"\r\n [class.psh-secondary]=\"color() === 'secondary'\"\r\n [class.psh-success]=\"color() === 'success'\"\r\n [class.psh-warning]=\"color() === 'warning'\"\r\n [class.psh-danger]=\"color() === 'danger'\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [class.psh-disabled]=\"disabled()\"\r\n [attr.role]=\"computedRole()\"\r\n [attr.tabindex]=\"computedTabIndex()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-disabled]=\"disabled() || null\"\r\n [attr.data-state]=\"state()\"\r\n (click)=\"handleClick($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n>\r\n @if (icon()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"psh-tag-content\">\r\n <ng-content>{{ content() }}</ng-content>\r\n </span>\r\n @if (closable()) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-tag-close\"\r\n (click)=\"handleClose($event)\"\r\n [attr.aria-label]=\"closeLabel()\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n</div>","import { PshFieldAppearance } from '../../types/semantic.types';\r\nimport { PshConfigValue } from '../../utils/config-value';\r\n/**\r\n * @deprecated since 7.0.0 — use {@link PshFieldAppearance}. Surface treatment now shares one\r\n * vocabulary across the library.\r\n */\r\nexport type TextareaVariant = PshFieldAppearance;\r\nexport type TextareaSize = 'small' | 'medium' | 'large';\r\nexport type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';\r\n\r\nexport interface TextareaConfig {\r\n appearance: TextareaVariant;\r\n size: TextareaSize;\r\n resize: TextareaResize;\r\n required: boolean;\r\n /** Word after the character count, as in \"12 / 200 characters\" */\r\n characterCountSuffix: PshConfigValue<string>;\r\n fullWidth: boolean;\r\n showLabel: boolean;\r\n showCharacterCount: boolean;\r\n autoSize: boolean;\r\n rows: number;\r\n maxLength?: number;\r\n label: string;\r\n placeholder: string;\r\n hint: string | null | undefined;\r\n error: string | null | undefined;\r\n success: string | null | undefined;\r\n ariaLabel: string | null;\r\n}\r\n\r\nexport const TEXTAREA_LABELS = {\r\n characterCountSuffix: 'characters',\r\n characterCountSeparator: '/',\r\n} as const;\r\n","/**\r\n * Application-wide defaults for `psh-textarea`.\r\n *\r\n * Provide it to set a default once for every psh-textarea in the application:\r\n *\r\n * provideHelix({ components: { textarea: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { TextareaConfig, TEXTAREA_LABELS } from './textarea.types';\r\n\r\nconst TEXTAREA_DEFAULTS = {\r\n appearance: 'outline',\r\n size: 'medium',\r\n resize: 'vertical',\r\n rows: 4,\r\n required: false,\r\n characterCountSuffix: TEXTAREA_LABELS.characterCountSuffix,\r\n fullWidth: false,\r\n showLabel: true,\r\n showCharacterCount: false,\r\n autoSize: false,\r\n label: '',\r\n placeholder: '',\r\n} satisfies Partial<TextareaConfig>;\r\n\r\nexport const TEXTAREA_CONFIG = new InjectionToken<Partial<TextareaConfig>>('TEXTAREA_CONFIG', {\r\n factory: () => TEXTAREA_DEFAULTS,\r\n});\r\n","import { InjectionToken } from '@angular/core';\r\nimport { ToastConfig } from './toast.types';\r\n\r\nconst TOAST_DEFAULTS = {\r\n position: 'top-right',\r\n duration: 5000,\r\n maxToasts: 5,\r\n pauseOnHover: true,\r\n showIcon: true,\r\n showCloseButton: true,\r\n ariaLabel: 'Notifications',\r\n} satisfies Partial<ToastConfig>;\r\n\r\nexport const TOAST_CONFIG = new InjectionToken<Partial<ToastConfig>>('TOAST_CONFIG', {\r\n factory: () => TOAST_DEFAULTS,\r\n});\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n linkedSignal,\r\n output,\r\n InjectionToken,\r\n ElementRef,\r\n OnDestroy,\r\n PLATFORM_ID,\r\n afterNextRender\r\n} from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { PshOverlayPositionService } from '../../a11y/overlay-position.service';\r\nimport { TooltipPosition, TooltipConfig, TooltipVariant } from './tooltip.types';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\nconst TOOLTIP_DEFAULTS = {\r\n variant: 'dark',\r\n position: 'top',\r\n showDelay: 200,\r\n hideDelay: 100,\r\n maxWidth: 200,\r\n autoFlip: true,\r\n} satisfies Partial<TooltipConfig>;\r\n\r\nexport const TOOLTIP_CONFIG = new InjectionToken<Partial<TooltipConfig>>('TOOLTIP_CONFIG', {\r\n factory: () => TOOLTIP_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-tooltip',\r\n imports: [],\r\n templateUrl: './tooltip.component.html',\r\n styleUrls: ['./tooltip.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '(mouseenter)': 'show()',\r\n '(mouseleave)': 'hide()',\r\n '(focusin)': 'show()',\r\n '(focusout)': 'hide()',\r\n '(keydown.escape)': 'hideImmediate()',\r\n '[style.display]': '\"inline-block\"',\r\n '[style.position]': '\"relative\"',\r\n }\r\n})\r\nexport class PshTooltipComponent implements OnDestroy {\r\n private config = inject(TOOLTIP_CONFIG) as Required<TooltipConfig>;\r\n private elementRef = inject(ElementRef);\r\n private readonly overlayPosition = inject(PshOverlayPositionService);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n readonly variant = input<TooltipVariant>(this.config.variant ?? 'dark');\r\n readonly position = input<TooltipPosition>(this.config.position ?? 'top');\r\n readonly showDelay = input<number>(this.config.showDelay ?? 200);\r\n readonly hideDelay = input<number>(this.config.hideDelay ?? 100);\r\n /**\r\n * Any CSS length: `'200px'`, `'20rem'`, `'min(90vw, 24rem)'`.\r\n *\r\n * Was a `number` meaning implicit pixels, while `sidebar.width` and\r\n * `horizontal-card.sideWidth` were already strings — three treatments for one notion, and\r\n * this was the one that could not express a relative width.\r\n */\r\n readonly maxWidth = input<string>(`${this.config.maxWidth ?? 200}px`);\r\n readonly autoFlip = input<boolean>(this.config.autoFlip ?? true);\r\n\r\n readonly content = input<string>('');\r\n readonly disabled = input<boolean>(false);\r\n readonly id = input<string>(this.generateUniqueId());\r\n\r\n opened = output<void>();\r\n closed = output<void>();\r\n\r\n readonly isVisible = signal(false);\r\n\r\n /**\r\n * The side the tooltip is drawn on: the requested one, until collision detection moves it.\r\n *\r\n * A `linkedSignal` rather than a `signal` kept in step by an effect — it follows\r\n * `position()` by construction, and `updatePosition()` overwrites it when `autoFlip` has\r\n * something to say. The effect that used to do this was a derivation written the long way.\r\n */\r\n readonly computedPosition = linkedSignal<TooltipPosition>(() => this.position());\r\n\r\n private showTimeout: ReturnType<typeof setTimeout> | null = null;\r\n private hideTimeout: ReturnType<typeof setTimeout> | null = null;\r\n private resizeObserver: ResizeObserver | null = null;\r\n\r\n readonly tooltipId = computed(() => `${this.id()}-tooltip`);\r\n readonly triggerId = computed(() => `${this.id()}-trigger`);\r\n\r\n constructor() {\r\n // ResizeObserver is a browser-only global, absent from the platform-server runtime.\r\n // It used to be constructed from ngAfterViewInit, which Angular also runs on the\r\n // server, so every SSR render of a tooltip threw. afterNextRender moves it out of the\r\n // render path and the explicit platform check makes the guarantee independent of how\r\n // render hooks are scheduled in any given environment.\r\n afterNextRender(() => {\r\n if (!this.isBrowser || !this.autoFlip()) return;\r\n\r\n this.resizeObserver = new ResizeObserver(() => {\r\n if (this.isVisible()) {\r\n this.updatePosition();\r\n }\r\n });\r\n this.resizeObserver.observe(this.elementRef.nativeElement);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.showTimeout) clearTimeout(this.showTimeout);\r\n if (this.hideTimeout) clearTimeout(this.hideTimeout);\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n this.resizeObserver = null;\r\n }\r\n }\r\n\r\n show(): void {\r\n if (this.disabled()) return;\r\n\r\n if (this.hideTimeout) {\r\n clearTimeout(this.hideTimeout);\r\n this.hideTimeout = null;\r\n }\r\n\r\n if (!this.isVisible() && !this.showTimeout) {\r\n this.showTimeout = setTimeout(() => {\r\n if (this.autoFlip()) {\r\n this.updatePosition();\r\n } else {\r\n this.computedPosition.set(this.position());\r\n }\r\n this.setVisible(true);\r\n this.showTimeout = null;\r\n }, this.showDelay());\r\n }\r\n }\r\n\r\n hide(): void {\r\n if (this.showTimeout) {\r\n clearTimeout(this.showTimeout);\r\n this.showTimeout = null;\r\n }\r\n\r\n if (this.isVisible() && !this.hideTimeout) {\r\n this.hideTimeout = setTimeout(() => {\r\n this.setVisible(false);\r\n this.hideTimeout = null;\r\n }, this.hideDelay());\r\n }\r\n }\r\n\r\n hideImmediate(): void {\r\n if (this.showTimeout) {\r\n clearTimeout(this.showTimeout);\r\n this.showTimeout = null;\r\n }\r\n if (this.hideTimeout) {\r\n clearTimeout(this.hideTimeout);\r\n this.hideTimeout = null;\r\n }\r\n this.setVisible(false);\r\n }\r\n\r\n /**\r\n * The one place visibility changes, and therefore the one place `opened` and `closed` are\r\n * emitted.\r\n *\r\n * They used to come from an effect on `isVisible`, which runs once on creation — so every\r\n * tooltip on the page emitted `closed` before it had ever been shown. An output is a\r\n * consequence of a transition, not of a state.\r\n */\r\n private setVisible(next: boolean): void {\r\n if (this.isVisible() === next) return;\r\n this.isVisible.set(next);\r\n if (next) this.opened.emit();\r\n else this.closed.emit();\r\n }\r\n\r\n private updatePosition(): void {\r\n // Collision detection / flip is delegated to the shared overlay-position\r\n // primitive (same logic, now reused by other popovers).\r\n this.computedPosition.set(\r\n this.overlayPosition.flipSide(this.elementRef.nativeElement, this.position(), {\r\n overlayHeight: 40,\r\n overlayWidth: this.maxWidthInPixels(),\r\n offset: 12,\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * The flip calculation needs a number. A relative length — `50vw`, `min(…)` — cannot be\r\n * resolved without layout, so it falls back to the 200px the calculation used before;\r\n * getting the flip slightly wrong is better than not flipping at all.\r\n */\r\n private maxWidthInPixels(): number {\r\n const parsed = Number.parseFloat(this.maxWidth());\r\n return Number.isFinite(parsed) && this.maxWidth().trim().endsWith('px')\r\n ? Math.min(parsed, 200)\r\n : 200;\r\n }\r\n\r\n private generateUniqueId(): string {\r\n return pshUniqueId('tooltip');\r\n }\r\n}\r\n","<div\r\n class=\"psh-tooltip-wrapper\"\r\n [attr.id]=\"triggerId()\"\r\n [attr.aria-describedby]=\"isVisible() ? tooltipId() : null\"\r\n>\r\n <ng-content></ng-content>\r\n\r\n @if (isVisible()) {\r\n <div\r\n [attr.id]=\"tooltipId()\"\r\n class=\"psh-tooltip\"\r\n [class.psh-top]=\"computedPosition() === 'top'\"\r\n [class.psh-bottom]=\"computedPosition() === 'bottom'\"\r\n [class.psh-left]=\"computedPosition() === 'left'\"\r\n [class.psh-right]=\"computedPosition() === 'right'\"\r\n [class.psh-light]=\"variant() === 'light'\"\r\n [class.psh-dark]=\"variant() === 'dark'\"\r\n [style.max-width]=\"maxWidth()\"\r\n role=\"tooltip\"\r\n >\r\n {{ content() }}\r\n <div class=\"psh-tooltip-arrow\"></div>\r\n </div>\r\n }\r\n</div>\r\n","/**\r\n * One call to configure the design system.\r\n *\r\n * Before this, an application that wanted to set the theme contrast target, its brand colours,\r\n * a toast position and a default size for buttons had to import four tokens by name and\r\n * assemble the `Provider[]` itself — for tokens that were never exported deliberately, only by\r\n * `export *` ricochet, and that nothing in the documentation listed. There were twenty-two\r\n * `InjectionToken`s in the library and exactly one `provide*` function, which returned a bare\r\n * `Provider` rather than `EnvironmentProviders`.\r\n *\r\n * bootstrapApplication(App, {\r\n * providers: [\r\n * provideHelix({\r\n * theme: { targetContrast: 'AAA', customerContext: BrandService },\r\n * components: {\r\n * button: { size: 'large', appearance: 'outline' },\r\n * modal: { dismissLabel: 'Fermer', confirmLabel: 'Valider' },\r\n * toast: { position: 'bottom-right' },\r\n * },\r\n * }),\r\n * ],\r\n * });\r\n *\r\n * The three finer-grained functions exist for the applications that want one part of it:\r\n * `provideHelixTheme`, `provideHelixComponentDefaults` and `provideHelixToast`. `provideHelix`\r\n * is those three composed, so mixing them is harmless — the later provider wins, as it does\r\n * anywhere else in Angular.\r\n *\r\n * **A defaults object is merged with nothing.** Each component reads\r\n * `this.config.<key> ?? <its own literal>`, so a partial override leaves every other key at\r\n * the library default. That is why `{ button: { size: 'large' } }` does not reset the\r\n * button's colour or appearance.\r\n */\r\nimport {\r\n EnvironmentProviders,\r\n Provider,\r\n Type,\r\n makeEnvironmentProviders,\r\n} from '@angular/core';\r\n\r\nimport {\r\n CUSTOMER_CONTEXT_SERVICE,\r\n CustomerContextService,\r\n PSH_THEME_OPTIONS,\r\n PshThemeOptions,\r\n} from './services/theme/theme.service';\r\n\r\nimport { ALERT_CONFIG } from './components/alert/alert.tokens';\r\nimport { AVATAR_CONFIG } from './components/avatar/avatar.tokens';\r\nimport { BADGE_CONFIG } from './components/badge/badge.tokens';\r\nimport { BUTTON_CONFIG } from './components/button/button.tokens';\r\nimport { CARD_CONFIG } from './components/card/card.tokens';\r\nimport { CHECKBOX_CONFIG } from './components/checkbox/checkbox.component';\r\nimport { COLLAPSE_CONFIG } from './components/collapse/collapse.tokens';\r\nimport { DROPDOWN_CONFIG } from './components/dropdown/dropdown.tokens';\r\nimport { HORIZONTAL_CARD_CONFIG } from './components/horizontal-card/horizontal-card.tokens';\r\nimport { INFO_CARD_CONFIG } from './components/info-card/info-card.tokens';\r\nimport { INPUT_CONFIG } from './components/input/input.tokens';\r\nimport { MENU_CONFIG } from './components/menu/menu.tokens';\r\nimport { MODAL_CONFIG } from './components/modal/modal.component';\r\nimport { PAGINATION_CONFIG } from './components/pagination/pagination.component';\r\nimport { PROGRESSBAR_CONFIG } from './components/progressbar/progressbar.component';\r\nimport { RADIO_CONFIG } from './components/radio/radio.component';\r\nimport { RADIO_GROUP_CONFIG, RadioGroupConfig } from './components/radio/radio-group.component';\r\nimport { SELECT_CONFIG } from './components/select/select.tokens';\r\nimport { SIDEBAR_CONFIG } from './components/sidebar/sidebar.component';\r\nimport { SPINLOADER_CONFIG } from './components/spinloader/spinloader.component';\r\nimport { STAT_CARD_CONFIG } from './components/stat-card/stat-card.tokens';\r\nimport { STATE_FLOW_INDICATOR_CONFIG } from './components/state-flow-indicator/state-flow-indicator.component';\r\nimport { STEPPER_CONFIG } from './components/stepper/stepper.component';\r\nimport { SWITCH_CONFIG } from './components/switch/switch.component';\r\nimport { TAB_BAR_CONFIG } from './components/tab-bar/tab-bar.component';\r\nimport { TABLE_CONFIG } from './components/table/table.component';\r\nimport { TABS_CONFIG } from './components/tabs/tabs.component';\r\nimport { TAG_CONFIG } from './components/tag/tag.component';\r\nimport { TEXTAREA_CONFIG } from './components/textarea/textarea.tokens';\r\nimport { TOAST_CONFIG } from './components/toast/toast.tokens';\r\nimport { TOOLTIP_CONFIG } from './components/tooltip/tooltip.component';\r\n\r\nimport { AlertConfig } from './components/alert/alert.types';\r\nimport { AvatarConfig } from './components/avatar/avatar.types';\r\nimport { BadgeConfig } from './components/badge/badge.types';\r\nimport { ButtonConfig } from './components/button/button.types';\r\nimport { CardConfig } from './components/card/card.types';\r\nimport { CheckboxConfig } from './components/checkbox/checkbox.types';\r\nimport { CollapseConfig } from './components/collapse/collapse.types';\r\nimport { DropdownConfig } from './components/dropdown/dropdown.types';\r\nimport { HorizontalCardConfig } from './components/horizontal-card/horizontal-card.types';\r\nimport { InfoCardConfig } from './components/info-card/info-card.types';\r\nimport { InputConfig } from './components/input/input.types';\r\nimport { MenuConfig } from './components/menu/menu.types';\r\nimport { ModalConfig } from './components/modal/modal.types';\r\nimport { PaginationConfig } from './components/pagination/pagination.types';\r\nimport { ProgressbarConfig } from './components/progressbar/progressbar.types';\r\nimport { RadioConfig } from './components/radio/radio.types';\r\nimport { SelectConfig } from './components/select/select.types';\r\nimport { SidebarConfig } from './components/sidebar/sidebar.types';\r\nimport { SpinLoaderConfig } from './components/spinloader/spinloader.types';\r\nimport { StatCardConfig } from './components/stat-card/stat-card.types';\r\nimport { StateFlowIndicatorConfig } from './components/state-flow-indicator/state-flow-indicator.types';\r\nimport { StepperConfig } from './components/stepper/stepper.types';\r\nimport { SwitchConfig } from './components/switch/switch.types';\r\nimport { TabBarConfig } from './components/tab-bar/tab-bar.types';\r\nimport { TableConfig } from './components/table/table.types';\r\nimport { TabsConfig } from './components/tabs/tabs.types';\r\nimport { TagConfig } from './components/tag/tag.types';\r\nimport { TextareaConfig } from './components/textarea/textarea.types';\r\nimport { ToastConfig } from './components/toast/toast.types';\r\nimport { TooltipConfig } from './components/tooltip/tooltip.types';\r\n\r\n/**\r\n * Per-component defaults, keyed by the component's own name.\r\n *\r\n * Every key is optional and every value is a `Partial`: set only what you want to change.\r\n */\r\nexport interface PshComponentDefaults {\r\n alert?: Partial<AlertConfig>;\r\n avatar?: Partial<AvatarConfig>;\r\n badge?: Partial<BadgeConfig>;\r\n button?: Partial<ButtonConfig>;\r\n card?: Partial<CardConfig>;\r\n checkbox?: Partial<CheckboxConfig>;\r\n collapse?: Partial<CollapseConfig>;\r\n dropdown?: Partial<DropdownConfig>;\r\n horizontalCard?: Partial<HorizontalCardConfig>;\r\n infoCard?: Partial<InfoCardConfig>;\r\n input?: Partial<InputConfig>;\r\n menu?: Partial<MenuConfig>;\r\n modal?: Partial<ModalConfig>;\r\n pagination?: Partial<PaginationConfig>;\r\n progressbar?: Partial<ProgressbarConfig>;\r\n radio?: Partial<RadioConfig>;\r\n radioGroup?: Partial<RadioGroupConfig>;\r\n select?: Partial<SelectConfig>;\r\n sidebar?: Partial<SidebarConfig>;\r\n spinloader?: Partial<SpinLoaderConfig>;\r\n statCard?: Partial<StatCardConfig>;\r\n stateFlowIndicator?: Partial<StateFlowIndicatorConfig>;\r\n stepper?: Partial<StepperConfig>;\r\n switch?: Partial<SwitchConfig>;\r\n tabBar?: Partial<TabBarConfig>;\r\n table?: Partial<TableConfig>;\r\n tabs?: Partial<TabsConfig>;\r\n tag?: Partial<TagConfig>;\r\n textarea?: Partial<TextareaConfig>;\r\n toast?: Partial<ToastConfig>;\r\n tooltip?: Partial<TooltipConfig>;\r\n}\r\n\r\n/** Theme configuration: the contrast floor, and where brand colours come from. */\r\nexport interface PshThemeConfig extends PshThemeOptions {\r\n /**\r\n * A service supplying the application's brand colours. The theme derives its whole palette\r\n * from them in OKLCH and raises any pair that would fall under the contrast target.\r\n */\r\n customerContext?: Type<CustomerContextService>;\r\n}\r\n\r\nexport interface PshConfig {\r\n theme?: PshThemeConfig;\r\n components?: PshComponentDefaults;\r\n}\r\n\r\n/**\r\n * The map every provider here walks.\r\n *\r\n * `satisfies Record<keyof Required<PshComponentDefaults>, unknown>` is what keeps the two in\r\n * step: a component added to the interface without a token here, or a token here that the\r\n * interface does not name, fails the build. Without it, a missing entry would be a key an\r\n * application can set and nothing reads.\r\n */\r\nconst TOKEN_BY_KEY = {\r\n alert: ALERT_CONFIG,\r\n avatar: AVATAR_CONFIG,\r\n badge: BADGE_CONFIG,\r\n button: BUTTON_CONFIG,\r\n card: CARD_CONFIG,\r\n checkbox: CHECKBOX_CONFIG,\r\n collapse: COLLAPSE_CONFIG,\r\n dropdown: DROPDOWN_CONFIG,\r\n horizontalCard: HORIZONTAL_CARD_CONFIG,\r\n infoCard: INFO_CARD_CONFIG,\r\n input: INPUT_CONFIG,\r\n menu: MENU_CONFIG,\r\n modal: MODAL_CONFIG,\r\n pagination: PAGINATION_CONFIG,\r\n progressbar: PROGRESSBAR_CONFIG,\r\n radio: RADIO_CONFIG,\r\n radioGroup: RADIO_GROUP_CONFIG,\r\n select: SELECT_CONFIG,\r\n sidebar: SIDEBAR_CONFIG,\r\n spinloader: SPINLOADER_CONFIG,\r\n statCard: STAT_CARD_CONFIG,\r\n stateFlowIndicator: STATE_FLOW_INDICATOR_CONFIG,\r\n stepper: STEPPER_CONFIG,\r\n switch: SWITCH_CONFIG,\r\n tabBar: TAB_BAR_CONFIG,\r\n table: TABLE_CONFIG,\r\n tabs: TABS_CONFIG,\r\n tag: TAG_CONFIG,\r\n textarea: TEXTAREA_CONFIG,\r\n toast: TOAST_CONFIG,\r\n tooltip: TOOLTIP_CONFIG,\r\n} as const satisfies Record<keyof Required<PshComponentDefaults>, unknown>;\r\n\r\n/** Every component config token, in one place, for an application that wants to enumerate them. */\r\nexport const PSH_CONFIG_TOKENS = TOKEN_BY_KEY;\r\n\r\nfunction componentProviders(defaults: PshComponentDefaults): Provider[] {\r\n const providers: Provider[] = [];\r\n for (const key of Object.keys(defaults) as (keyof PshComponentDefaults)[]) {\r\n const value = defaults[key];\r\n if (value === undefined) continue;\r\n providers.push({ provide: TOKEN_BY_KEY[key], useValue: value });\r\n }\r\n return providers;\r\n}\r\n\r\nfunction themeProviders(theme: PshThemeConfig): Provider[] {\r\n const { customerContext, ...options } = theme;\r\n const providers: Provider[] = [{ provide: PSH_THEME_OPTIONS, useValue: options }];\r\n if (customerContext) {\r\n providers.push({ provide: CUSTOMER_CONTEXT_SERVICE, useClass: customerContext });\r\n }\r\n return providers;\r\n}\r\n\r\n/** Theme only: contrast target and brand colours. */\r\nexport function provideHelixTheme(theme: PshThemeConfig = {}): EnvironmentProviders {\r\n return makeEnvironmentProviders(themeProviders(theme));\r\n}\r\n\r\n/** Component defaults only. */\r\nexport function provideHelixComponentDefaults(\r\n defaults: PshComponentDefaults,\r\n): EnvironmentProviders {\r\n return makeEnvironmentProviders(componentProviders(defaults));\r\n}\r\n\r\n/** Toast only — the one component driven entirely by a service rather than by inputs. */\r\nexport function provideHelixToast(config: Partial<ToastConfig>): EnvironmentProviders {\r\n return makeEnvironmentProviders([{ provide: TOAST_CONFIG, useValue: config }]);\r\n}\r\n\r\n/** Theme and component defaults in one call. */\r\nexport function provideHelix(config: PshConfig = {}): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n ...(config.theme ? themeProviders(config.theme) : []),\r\n ...(config.components ? componentProviders(config.components) : []),\r\n ]);\r\n}\r\n","import { PshComponentDefaults } from '../provide-helix';\r\n\r\n/**\r\n * Every string the library ships, in French.\r\n *\r\n * The library's own defaults are English — it is published on npm, and its code, its\r\n * documentation and its commits are English too. Before 7.0.0 they were neither: twenty-five\r\n * strings were French and thirty English, decided component by component, so a `psh-modal`\r\n * said \"Close\" above a `psh-select` that said \"Sélectionner une option\".\r\n *\r\n * bootstrapApplication(App, {\r\n * providers: [provideHelix({ components: PSH_FRENCH_DEFAULTS })],\r\n * });\r\n *\r\n * Merge it with your own overrides rather than replacing it:\r\n *\r\n * provideHelix({\r\n * components: {\r\n * ...PSH_FRENCH_DEFAULTS,\r\n * modal: { ...PSH_FRENCH_DEFAULTS.modal, confirmLabel: 'Envoyer' },\r\n * },\r\n * })\r\n *\r\n * `npm run verify:i18n-preset` fails when a translatable default is added to a component and\r\n * not to this file — without it the preset would quietly fall behind, and the symptom would be\r\n * one English label in an otherwise French page.\r\n */\r\nexport const PSH_FRENCH_DEFAULTS: PshComponentDefaults = {\r\n alert: {\r\n labels: { dismiss: \"Fermer l'alerte\" },\r\n },\r\n avatar: {\r\n alt: 'Photo de profil',\r\n },\r\n button: {\r\n loadingText: 'Chargement…',\r\n disabledText: \"Cette action n'est pas disponible\",\r\n },\r\n collapse: {\r\n defaultHeaderText: 'Section pliable',\r\n },\r\n dropdown: {\r\n label: 'Menu déroulant',\r\n },\r\n infoCard: {\r\n copyButtonLabel: 'Copier',\r\n copyFeedbackText: 'Copié',\r\n emptyStateMessage: 'Aucune information disponible',\r\n notProvidedText: 'Non renseigné',\r\n },\r\n input: {\r\n showPasswordLabel: 'Afficher le mot de passe',\r\n hidePasswordLabel: 'Masquer le mot de passe',\r\n },\r\n modal: {\r\n dismissLabel: 'Fermer',\r\n confirmLabel: 'Valider',\r\n cancelLabel: 'Annuler',\r\n },\r\n pagination: {\r\n firstLabel: 'Première page',\r\n previousLabel: 'Page précédente',\r\n nextLabel: 'Page suivante',\r\n lastLabel: 'Dernière page',\r\n pageLabel: 'Page',\r\n ofLabel: 'sur',\r\n itemsLabel: 'éléments',\r\n itemsPerPageLabel: 'Éléments par page',\r\n ariaLabel: 'Pagination',\r\n },\r\n select: {\r\n placeholder: 'Sélectionner une option',\r\n multiplePlaceholder: 'Sélectionner des options',\r\n noResultsText: 'Aucun résultat',\r\n clearLabel: 'Effacer la sélection',\r\n searchPlaceholder: 'Rechercher…',\r\n },\r\n sidebar: {\r\n ariaLabel: 'Navigation latérale',\r\n },\r\n spinloader: {\r\n ariaLabel: 'Chargement en cours',\r\n },\r\n stateFlowIndicator: {\r\n ariaLabel: 'Indicateur de progression',\r\n ariaLabels: {\r\n step: 'Étape',\r\n completed: 'Étape complétée',\r\n active: 'Étape active',\r\n incomplete: 'Étape incomplète',\r\n disabled: 'Étape désactivée',\r\n warning: 'Étape avec avertissement',\r\n error: 'Étape en erreur',\r\n },\r\n },\r\n stepper: {\r\n ariaLabel: 'Navigation par étapes',\r\n ariaLabels: {\r\n step: 'Étape',\r\n completed: 'Étape complétée',\r\n active: 'Étape active',\r\n incomplete: 'Étape incomplète',\r\n disabled: 'Étape désactivée',\r\n },\r\n },\r\n tabBar: {\r\n ariaLabel: 'Navigation par onglets',\r\n },\r\n tabs: {\r\n ariaLabel: 'Navigation par onglets',\r\n },\r\n table: {\r\n emptyMessage: 'Aucune donnée disponible',\r\n noResultsMessage: 'Aucun résultat',\r\n globalSearchPlaceholder: 'Rechercher dans toutes les colonnes…',\r\n expandColumnLabel: 'Détail',\r\n expandRowLabel: 'Afficher le détail',\r\n collapseRowLabel: 'Masquer le détail',\r\n sortedAscendingLabel: 'trié par ordre croissant',\r\n sortedDescendingLabel: 'trié par ordre décroissant',\r\n resultsFoundLabel: 'résultats',\r\n },\r\n tag: {\r\n closeLabel: 'Supprimer le tag',\r\n },\r\n textarea: {\r\n characterCountSuffix: 'caractères',\r\n },\r\n toast: {\r\n ariaLabel: 'Notifications',\r\n },\r\n};\r\n","/**\r\n * The vocabulary every ps-helix component shares.\r\n *\r\n * Before 7.0.0 one notion — \"which semantic colour is this?\" — was spelled six different\r\n * ways: `variant` on badge, button, dropdown, progressbar and tag; `color` on spinloader;\r\n * `type` on alert and toast; `colorVariant` on card; `tagVariant` on stat-card; and `tone`\r\n * on info-card rows. Each carried its own union, so `info` existed on five components and\r\n * not on the other six. Asking for red meant remembering which component you were holding.\r\n *\r\n * There is now one name and one union.\r\n */\r\n\r\n/**\r\n * Semantic colour. The same seven values on every component that has a colour, so\r\n * `color=\"danger\"` means the same thing wherever it appears.\r\n *\r\n * `neutral` replaces the assorted `default` and `muted` values that used to mean\r\n * \"no semantic emphasis\".\r\n */\r\nexport type PshColor =\r\n | 'primary'\r\n | 'secondary'\r\n | 'success'\r\n | 'warning'\r\n | 'danger'\r\n | 'info'\r\n | 'neutral';\r\n\r\n/** Every value of {@link PshColor}, for iterating in demos, tests and documentation. */\r\nexport const PSH_COLORS: readonly PshColor[] = [\r\n 'primary',\r\n 'secondary',\r\n 'success',\r\n 'warning',\r\n 'danger',\r\n 'info',\r\n 'neutral',\r\n] as const;\r\n\r\n/**\r\n * Surface treatment — how a component is drawn, independent of what colour it is.\r\n *\r\n * `variant` used to carry three incompatible notions at once: elevation on card and\r\n * table, colour on badge and button, display form on tabs and stepper. Colour moved to\r\n * {@link PshColor}; surface treatment lives here.\r\n *\r\n * solid filled with its colour (was `filled`)\r\n * soft tinted background, same hue\r\n * outline border only (was `outline` / `outlined`)\r\n * ghost no border and no fill (was `text`)\r\n * elevated raised with a shadow\r\n * flat no elevation, no border (was `default`)\r\n *\r\n * Each component declares the subset it supports; the words mean the same thing in all of\r\n * them. `variant` survives only where the notion is a genuinely component-specific display\r\n * form that is neither colour nor surface — tabs (`underline | pills`), stepper\r\n * (`numbered | progress`), menu (`compact | expanded`), spinloader (`circle | dots |\r\n * pulse`), tooltip (`light | dark`). It is no longer a catch-all.\r\n */\r\nexport type PshAppearance = 'solid' | 'soft' | 'outline' | 'ghost' | 'elevated' | 'flat';\r\n\r\n/** The appearances a control (button, dropdown) offers. */\r\nexport type PshControlAppearance = Extract<PshAppearance, 'solid' | 'outline' | 'ghost'>;\r\n\r\n/** The appearances a text field (input, select, textarea) offers. */\r\nexport type PshFieldAppearance = Extract<PshAppearance, 'outline' | 'solid'>;\r\n\r\n/** The appearances a surface (card, table, collapse, pagination) offers. */\r\nexport type PshSurfaceAppearance = Extract<PshAppearance, 'flat' | 'elevated' | 'outline'>;\r\n\r\n/**\r\n * Size. Already homogeneous across all 30 components before 7.0.0 — the one axis that was\r\n * never inconsistent — and deliberately left alone.\r\n */\r\nexport type PshSize = 'small' | 'medium' | 'large';\r\n\r\nexport const PSH_SIZES: readonly PshSize[] = ['small', 'medium', 'large'] as const;\r\n\r\n/* ------------------------------------------------------------- navigation */\r\n\r\n/**\r\n * Why a navigation was refused.\r\n *\r\n * Before 7.0.0 the reason was an English sentence — `\"Page 12 is out of bounds (1-9)\"`,\r\n * `\"Cannot activate step 3. Please complete previous steps first\"`. A consumer who needed to\r\n * react differently to \"out of range\" and \"your guard said no\" had to match on that prose,\r\n * which is neither stable nor translatable. Branch on this instead.\r\n */\r\nexport type PshNavigationErrorReason =\r\n /** The requested page or step index is outside the valid range. */\r\n | 'out-of-bounds'\r\n /** A `beforeChange` guard returned false. */\r\n | 'blocked'\r\n /** A `beforeChange` guard threw. The error is in `cause`. */\r\n | 'rejected'\r\n /** An earlier step has not been completed. */\r\n | 'prerequisite-incomplete';\r\n\r\n/**\r\n * Emitted when a component refuses to navigate.\r\n *\r\n * One shape for the three components that report this. `pagination` used to emit\r\n * `{ action, reason }` and `stepper` / `state-flow-indicator` a bare `string`, so the same\r\n * output name carried two incompatible payloads.\r\n */\r\nexport interface PshNavigationError {\r\n /** The navigation that was attempted. */\r\n action: 'goToPage' | 'goToStep';\r\n /** Machine-readable cause. Branch on this, never on `message`. */\r\n reason: PshNavigationErrorReason;\r\n /** The page or step index that could not be reached. */\r\n target: number;\r\n /**\r\n * English detail, for logs and debugging. Not a user-facing string: it is not translated\r\n * and its wording is not part of the public contract.\r\n */\r\n message: string;\r\n /**\r\n * For `reason: 'rejected'`, whatever the guard threw. `unknown` is the honest type —\r\n * JavaScript can throw anything — and it mirrors `Error.cause`.\r\n */\r\n cause?: unknown;\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n input,\r\n output,\r\n inject,\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { AlertType, IconPosition, AlertSize, AlertRole, AlertLabels } from './alert.types';\r\nimport { ALERT_CONFIG } from './alert.tokens';\r\n\r\n// Default alert labels\r\nconst DEFAULT_LABELS: AlertLabels = {\r\n dismiss: 'Dismiss alert'\r\n};\r\n\r\n// Default alert icons\r\nconst DEFAULT_ICONS: Record<string, string> = {\r\n info: 'info',\r\n success: 'check-circle',\r\n warning: 'warning',\r\n danger: 'warning-octagon'\r\n};\r\n\r\nconst DEFAULT_CONFIG = {\r\n type: 'info' as AlertType,\r\n iconPosition: 'left' as IconPosition,\r\n closable: false,\r\n size: 'medium' as AlertSize,\r\n showIcon: true\r\n};\r\n\r\n@Component({\r\n selector: 'psh-alert',\r\n templateUrl: './alert.component.html',\r\n styleUrls: ['./alert.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshAlertComponent {\r\n private readonly config = inject(ALERT_CONFIG);\r\n\r\n\r\n // Inputs\r\n readonly color = input<AlertType>(this.config.color ?? DEFAULT_CONFIG.type);\r\n readonly iconPosition = input<IconPosition>(this.config.iconPosition ?? DEFAULT_CONFIG.iconPosition);\r\n readonly closable = input(this.config.closable ?? DEFAULT_CONFIG.closable);\r\n readonly size = input<AlertSize>(this.config.size ?? DEFAULT_CONFIG.size);\r\n readonly showIcon = input(this.config.showIcon ?? DEFAULT_CONFIG.showIcon);\r\n readonly role = input<AlertRole>();\r\n readonly icon = input<string>();\r\n readonly ariaLabel = input<string>();\r\n readonly dismissLabelInput = input<string | undefined>(undefined, { alias: 'dismissLabel' });\r\n readonly dismissLabel = computed(\r\n () => this.dismissLabelInput() ?? pshResolveConfigValue(this.config.labels?.dismiss) ?? DEFAULT_LABELS.dismiss,\r\n );\r\n readonly ariaLive = input<'polite' | 'assertive'>();\r\n readonly content = input('');\r\n \r\n // Outputs\r\n closed = output<void>();\r\n\r\n // Computed values\r\n readonly defaultIcon = computed(() => DEFAULT_ICONS[this.color()] || 'info');\r\n readonly getIcon = computed(() => this.icon() || this.defaultIcon());\r\n\r\n readonly computedAriaLive = computed(() => \r\n this.ariaLive() || (['warning', 'danger'].includes(this.color()) ? 'assertive' : 'polite')\r\n );\r\n\r\n readonly computedRole = computed(() => \r\n this.role() || (['warning', 'danger'].includes(this.color()) ? 'alert' : 'status')\r\n );\r\n\r\n readonly state = computed(() => {\r\n if (this.closable()) return 'closable';\r\n return this.color();\r\n });\r\n\r\n handleClose(): void {\r\n this.closed.emit();\r\n }\r\n}","<div\r\n class=\"psh-alert\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [class]=\"'psh-' + color()\"\r\n [attr.role]=\"computedRole()\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [attr.aria-live]=\"computedAriaLive()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <div class=\"psh-alert-content\" [class.psh-icon-right]=\"iconPosition() === 'right'\">\r\n @if (showIcon()) {\r\n <i class=\"ph ph-{{ getIcon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n <div class=\"psh-alert-message\">\r\n <ng-content>{{ content() }}</ng-content>\r\n </div>\r\n </div>\r\n\r\n <!--\r\n Actions. The alert had one slot, in the message area, so the standard pattern — a\r\n \"Retry\" button aligned to the right of the text — had nowhere to go.\r\n -->\r\n <div class=\"psh-alert-actions\">\r\n <ng-content select=\"[psh-alert-actions]\"></ng-content>\r\n </div>\r\n\r\n @if (closable()) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-alert-dismiss\"\r\n (click)=\"handleClose()\"\r\n [attr.aria-label]=\"dismissLabel()\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n input,\r\n output,\r\n signal,\r\n inject,\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { AvatarSize, AvatarShape, AvatarStatus } from './avatar.types';\r\nimport { AVATAR_CONFIG } from './avatar.tokens';\r\n\r\n// Default configuration\r\nconst DEFAULT_CONFIG = {\r\n size: 'medium' as AvatarSize,\r\n shape: 'circle' as AvatarShape,\r\n alt: 'User avatar',\r\n icon: 'user'\r\n};\r\n\r\n// Default status colors\r\nconst DEFAULT_STATUS_COLORS: Record<AvatarStatus, string> = {\r\n online: 'var(--psh-success-color)',\r\n offline: 'var(--psh-surface-400)',\r\n away: 'var(--psh-warning-color)',\r\n busy: 'var(--psh-danger-color)'\r\n};\r\n\r\n@Component({\r\n selector: 'psh-avatar',\r\n templateUrl: './avatar.component.html',\r\n styleUrls: ['./avatar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshAvatarComponent {\r\n private readonly config = inject(AVATAR_CONFIG);\r\n\r\n\r\n // Model inputs with defaults\r\n readonly size = input<AvatarSize>(this.config.size ?? DEFAULT_CONFIG.size);\r\n readonly shape = input<AvatarShape>(this.config.shape ?? DEFAULT_CONFIG.shape);\r\n readonly src = input<string | undefined>();\r\n readonly altInput = input<string | undefined>(undefined, { alias: 'alt' });\r\n readonly alt = computed(\r\n () => this.altInput() ?? pshResolveConfigValue(this.config.alt) ?? DEFAULT_CONFIG.alt,\r\n );\r\n\r\n // Regular inputs\r\n readonly initials = input('');\r\n readonly icon = input<string>(this.config.icon ?? DEFAULT_CONFIG.icon);\r\n readonly status = input<AvatarStatus | undefined>();\r\n readonly ariaLabel = input<string>();\r\n /** Makes the avatar interactive: adds a button role, a tab stop and a focus ring. */\r\n readonly interactive = input(false);\r\n\r\n /**\r\n * Emitted on click or Enter/Space, but only when `interactive` is set.\r\n *\r\n * Every other clickable component in the library had one — card, stat-card, info-card,\r\n * horizontal-card, tag, button — and the avatar did not, so a clickable user avatar, which\r\n * is most of them, had to be wrapped in something else.\r\n */\r\n readonly clicked = output<MouseEvent | KeyboardEvent>();\r\n\r\n /**\r\n * Emitted when the image fails to load, just before the fallback takes over.\r\n *\r\n * Named `imageFailed`, not `error`: `error` is a native DOM event name — lint catches it,\r\n * and rightly, since `sidebar.toggle` needed a standing exemption for the same reason until\r\n * 7.0.0 — and `error` already means \"the validation message\" on every form control here.\r\n * `copyFailed` on info-card set the precedent.\r\n */\r\n readonly imageFailed = output<Event>();\r\n\r\n /**\r\n * Whether the image failed.\r\n *\r\n * The initials/icon fallback existed but could never run: the `<img>` had no `(error)`\r\n * handler, so a 404 left a broken image icon where a name should be. Reset by `effect`\r\n * when `src` changes, or a new URL would inherit the previous one's failure.\r\n */\r\n private readonly loadFailed = signal(false);\r\n\r\n constructor() {\r\n effect(() => {\r\n this.src();\r\n this.loadFailed.set(false);\r\n });\r\n }\r\n\r\n // Computed values\r\n readonly hasImage = computed(() => !!this.src() && !this.loadFailed());\r\n readonly hasInitials = computed(() => !!this.initials() && !this.hasImage());\r\n readonly hasIcon = computed(() => !this.hasImage() && !this.hasInitials());\r\n\r\n protected handleImageError(event: Event): void {\r\n this.loadFailed.set(true);\r\n this.imageFailed.emit(event);\r\n }\r\n\r\n protected handleClick(event: MouseEvent): void {\r\n if (this.interactive()) this.clicked.emit(event);\r\n }\r\n\r\n protected handleKeydown(event: KeyboardEvent): void {\r\n if (!this.interactive()) return;\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n readonly computedAriaLabel = computed(() => this.ariaLabel() || this.alt());\r\n\r\n readonly statusColor = computed(() => {\r\n const currentStatus = this.status();\r\n if (!currentStatus) return undefined;\r\n return DEFAULT_STATUS_COLORS[currentStatus];\r\n });\r\n\r\n readonly state = computed(() => this.status() || 'default');\r\n}","<div \r\n class=\"psh-avatar\"\r\n [class.psh-circle]=\"shape() === 'circle'\"\r\n [class.psh-square]=\"shape() === 'square'\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [class.psh-xlarge]=\"size() === 'xlarge'\"\r\n [class.psh-interactive]=\"interactive()\"\r\n [attr.role]=\"interactive() ? 'button' : 'img'\"\r\n [attr.tabindex]=\"interactive() ? 0 : null\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.data-state]=\"state()\"\r\n (click)=\"handleClick($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n>\r\n @if (hasImage()) {\r\n <!-- (error) is what makes the initials/icon fallback below reachable at all. -->\r\n <img\r\n [src]=\"src()\"\r\n [attr.alt]=\"alt()\"\r\n class=\"psh-avatar-image\"\r\n (error)=\"handleImageError($event)\"\r\n />\r\n } @else if (hasInitials()) {\r\n <span class=\"psh-avatar-initials\">{{ initials() }}</span>\r\n } @else if (hasIcon()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n\r\n @if (status()) {\r\n <span \r\n class=\"psh-avatar-status\"\r\n [class]=\"'psh-' + status()\"\r\n [style.background-color]=\"statusColor()\"\r\n [attr.aria-label]=\"status()\"\r\n ></span>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, input, output , inject} from '@angular/core';\r\nimport { BadgeSize, BadgePosition, BadgeDisplayType } from './badge.types';\r\nimport { PshColor } from '../../types/semantic.types';\r\nimport { BADGE_CONFIG } from './badge.tokens';\r\n\r\nconst DEFAULT_CONFIG = {\r\n color: 'primary' as PshColor,\r\n size: 'medium' as BadgeSize,\r\n displayType: 'text' as BadgeDisplayType,\r\n max: 99,\r\n showZero: false,\r\n position: 'top-right' as BadgePosition\r\n};\r\n\r\n@Component({\r\n selector: 'psh-badge',\r\n templateUrl: './badge.component.html',\r\n styleUrls: ['./badge.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshBadgeComponent<T = number> {\r\n private readonly config = inject(BADGE_CONFIG);\r\n\r\n\r\n readonly color = input<PshColor>(this.config.color ?? DEFAULT_CONFIG.color);\r\n\r\n /**\r\n * Disabled is a state, not a colour. It used to be the seventh value of the colour union\r\n * — `variant=\"disabled\"` — which meant a disabled badge could not also be a danger\r\n * badge, and which is not how `disabled` is spelled anywhere else in the library.\r\n */\r\n readonly disabled = input(this.config.disabled ?? false);\r\n readonly size = input<BadgeSize>(this.config.size ?? DEFAULT_CONFIG.size);\r\n readonly displayType = input<BadgeDisplayType>(this.config.displayType ?? DEFAULT_CONFIG.displayType);\r\n readonly content = input<string>('');\r\n readonly visible = input(true);\r\n readonly value = input<T>();\r\n readonly max = input(this.config.max ?? DEFAULT_CONFIG.max);\r\n readonly showZero = input(this.config.showZero ?? DEFAULT_CONFIG.showZero);\r\n readonly position = input<BadgePosition>(this.config.position ?? DEFAULT_CONFIG.position);\r\n readonly overlap = input(this.config.overlap ?? false);\r\n readonly ariaLabel = input<string>();\r\n readonly formatter = input<((value: T) => string) | undefined>();\r\n\r\n readonly clicked = output<void>();\r\n\r\n readonly computedRole = computed(() =>\r\n this.displayType() === 'counter' ? 'status' : 'img'\r\n );\r\n\r\n readonly computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const content = this.content();\r\n if (content) return content;\r\n\r\n return this.displayValue();\r\n });\r\n\r\n readonly state = computed(() => {\r\n if (!this.visible()) return 'hidden';\r\n if (this.overlap()) return 'overlap';\r\n return this.displayType();\r\n });\r\n\r\n private readonly isDot = computed(() => this.displayType() === 'dot');\r\n private readonly isCounter = computed(() => this.displayType() === 'counter');\r\n private readonly hasValue = computed(() => this.value() !== undefined);\r\n\r\n private readonly shouldDisplay = computed(() => {\r\n const currentValue = this.value();\r\n if (typeof currentValue !== 'number') return true;\r\n return currentValue > 0 || this.showZero();\r\n });\r\n\r\n private readonly formattedCustomValue = computed(() => {\r\n const formatter = this.formatter();\r\n const currentValue = this.value();\r\n\r\n if (!formatter || currentValue === null || currentValue === undefined) {\r\n return null;\r\n }\r\n\r\n return formatter(currentValue);\r\n });\r\n\r\n private readonly formattedNumericValue = computed(() => {\r\n const currentValue = this.value();\r\n\r\n if (typeof currentValue !== 'number') {\r\n return currentValue !== undefined ? String(currentValue) : '';\r\n }\r\n\r\n if (!this.shouldDisplay()) {\r\n return this.content() || '';\r\n }\r\n\r\n const maxValue = this.max();\r\n return currentValue > maxValue ? `${maxValue}+` : `${currentValue}`;\r\n });\r\n\r\n readonly displayValue = computed(() => {\r\n if (this.isDot()) {\r\n return '';\r\n }\r\n\r\n if (!this.isCounter() || !this.hasValue()) {\r\n return this.content();\r\n }\r\n\r\n const customFormatted = this.formattedCustomValue();\r\n if (customFormatted !== null) {\r\n return customFormatted;\r\n }\r\n\r\n return this.formattedNumericValue();\r\n });\r\n\r\n onBadgeClick(): void {\r\n this.clicked.emit();\r\n }\r\n}\r\n","<!-- Badge click is an optional convenience; the badge is a status/img indicator, not a primary control. -->\r\n<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n<div\r\n class=\"psh-badge\"\r\n [class.psh-primary]=\"color() === 'primary'\"\r\n [class.psh-secondary]=\"color() === 'secondary'\"\r\n [class.psh-success]=\"color() === 'success'\"\r\n [class.psh-warning]=\"color() === 'warning'\"\r\n [class.psh-danger]=\"color() === 'danger'\"\r\n [class.psh-info]=\"color() === 'info'\"\r\n [class.psh-neutral]=\"color() === 'neutral'\"\r\n [class.psh-disabled]=\"disabled()\"\r\n [class.psh-dot]=\"displayType() === 'dot'\"\r\n [class.psh-counter]=\"displayType() === 'counter'\"\r\n [class.psh-overlap]=\"overlap()\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-medium]=\"size() === 'medium'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [class.psh-top-right]=\"position() === 'top-right'\"\r\n [class.psh-top-left]=\"position() === 'top-left'\"\r\n [class.psh-bottom-right]=\"position() === 'bottom-right'\"\r\n [class.psh-bottom-left]=\"position() === 'bottom-left'\"\r\n [attr.role]=\"computedRole()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.data-state]=\"state()\"\r\n (click)=\"onBadgeClick()\"\r\n>\r\n @if (displayType() === 'text') {\r\n <ng-content></ng-content>\r\n } @else if (displayType() === 'counter') {\r\n {{ displayValue() }}\r\n }\r\n</div>\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { DestroyRef, Injectable, PLATFORM_ID, Signal, inject, signal } from '@angular/core';\r\n\r\n/**\r\n * One media query per breakpoint, for the whole application.\r\n *\r\n * `psh-card` and `psh-info-card` each built a `ResizeObserver` on `document.documentElement`\r\n * to answer one question — is the viewport narrow? — so a grid of fifty cards installed fifty\r\n * observers on the root element, each firing on every resize frame. The answer is the same for\r\n * all of them, and `matchMedia` gives it without measuring anything: the browser evaluates the\r\n * query and fires only when it flips.\r\n *\r\n * The queries are also back on the documented scale. Both components asked\r\n * `innerWidth <= 640`, a pixel breakpoint written in TypeScript, which is why\r\n * `verify:breakpoints` never saw it — that script reads stylesheets. An `em` query follows the\r\n * user's root font size, so a component and the CSS beside it switch together under zoom.\r\n *\r\n * @example\r\n * private readonly viewport = inject(PshViewportService);\r\n * readonly isMobile = this.viewport.below('sm');\r\n */\r\n\r\n/** The scale of `breakpoints.tokens.css`, as the exclusive `max-width` of each step. */\r\nconst BELOW = {\r\n xs: '29.9375em',\r\n sm: '39.9375em',\r\n md: '47.9375em',\r\n lg: '63.9375em',\r\n xl: '79.9375em',\r\n '2xl': '95.9375em',\r\n} as const;\r\n\r\nexport type PshBreakpoint = keyof typeof BELOW;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshViewportService {\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n /** One entry per distinct query, however many components ask for it. */\r\n private readonly queries = new Map<string, Signal<boolean>>();\r\n\r\n /**\r\n * Whether the viewport is narrower than the given breakpoint.\r\n *\r\n * Exclusive, like the `max-width` rules in the stylesheets: at exactly the breakpoint the\r\n * answer is `false`, so a component and its CSS never disagree about which side they are on.\r\n *\r\n * On the server it is `false` and never changes — the same value the components defaulted to\r\n * before, so the first paint is unchanged.\r\n */\r\n below(breakpoint: PshBreakpoint): Signal<boolean> {\r\n return this.matches(`(max-width: ${BELOW[breakpoint]})`);\r\n }\r\n\r\n /** Any media query, as a signal. Shared with every other caller that passes the same one. */\r\n matches(query: string): Signal<boolean> {\r\n const existing = this.queries.get(query);\r\n if (existing) return existing;\r\n\r\n const state = signal(false);\r\n // The read-only view is what is cached, so two callers get the *same* signal rather than\r\n // two wrappers over one — and nothing outside can write it.\r\n const readonly = state.asReadonly();\r\n this.queries.set(query, readonly);\r\n\r\n const view = this.isBrowser ? this.document.defaultView : null;\r\n if (view?.matchMedia) {\r\n const list = view.matchMedia(query);\r\n state.set(list.matches);\r\n\r\n const onChange = (event: MediaQueryListEvent) => state.set(event.matches);\r\n list.addEventListener('change', onChange);\r\n this.destroyRef.onDestroy(() => list.removeEventListener('change', onChange));\r\n }\r\n\r\n return readonly;\r\n }\r\n}\r\n","import { PshColor, PshSurfaceAppearance } from '../../types/semantic.types';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n PLATFORM_ID,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { PshViewportService } from '../../a11y/viewport.service';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { CardDensity, CardActionsAlignment } from './card.types';\r\nimport { CARD_CONFIG } from './card.tokens';\r\n\r\n/**\r\n * Composant carte métier - conteneur structuré pour contenu professionnel\r\n *\r\n * Ce composant fournit une structure de carte métier avec :\r\n * - Header enrichi avec titre, description et slots pour icônes/badges\r\n * - Body avec spacing généreux et bien défini\r\n * - Footer optionnel pour métadonnées\r\n * - Zone d'actions avec alignement configurable\r\n * - Support de différentes densités et variantes de couleur\r\n * - Dividers automatiques entre les sections\r\n *\r\n * Les boutons placés dans le slot card-actions deviennent automatiquement\r\n * pleine largeur sur mobile (< 640px) grâce à une directive automatique.\r\n *\r\n * @example\r\n * <psh-card\r\n * title=\"Mon titre\"\r\n * description=\"Ma description\"\r\n * appearance=\"elevated\"\r\n * >\r\n * <p>Contenu principal</p>\r\n * <div psh-card-actions>\r\n * <psh-button color=\"primary\">Action</psh-button>\r\n * </div>\r\n * </psh-card>\r\n */\r\n@Component({\r\n selector: 'psh-card',\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n // Rooted on the host, not on a wrapper `<div>`. The wrapper is why `cssClass` had to\r\n // exist: a consumer's `<psh-card class=\"…\">` landed on the host while every style lived\r\n // one level down, out of reach. With the card *being* the host, the native `class` and\r\n // `style` attributes do the job and the passthrough inputs are gone.\r\n host: {\r\n '[class]': 'computedClasses()',\r\n '(click)': 'handleClick($event)',\r\n '(keydown)': 'handleKeydown($event)',\r\n role: 'article',\r\n '[attr.aria-label]': 'ariaLabel() || null',\r\n '[attr.tabindex]': 'interactive() && !disabled() ? 0 : null',\r\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\r\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\r\n },\r\n})\r\nexport class PshCardComponent {\r\n private readonly config = inject(CARD_CONFIG);\r\n\r\n private platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n\r\n // Model inputs - propriétés modifiables\r\n /** Variante visuelle de la carte (default, elevated, outlined) */\r\n // input(), not model(): the card never writes its own appearance back, so a model()\r\n // only added a `variantChange` output that could never fire.\r\n readonly appearance = input<PshSurfaceAppearance>(this.config.appearance ?? 'flat');\r\n\r\n /** Effet de survol activé (animation translateY) */\r\n readonly hoverable = input(this.config.hoverable ?? false);\r\n\r\n /** Carte cliquable (ajoute cursor pointer et gestion du focus) */\r\n readonly interactive = input(this.config.interactive ?? false);\r\n\r\n // Regular inputs - propriétés en lecture seule\r\n /** Titre principal de la carte */\r\n readonly title = input<string>('');\r\n\r\n /** Description/sous-titre optionnel */\r\n readonly description = input<string>('');\r\n\r\n /** Couleur sémantique de la carte. `neutral` = aucune emphase (l'ancien `flat`). */\r\n readonly color = input<PshColor>(this.config.color ?? 'neutral');\r\n\r\n /** Niveau de densité du spacing (compact, normal, spacious) */\r\n readonly density = input<CardDensity>(this.config.density ?? 'normal');\r\n\r\n /** Afficher le divider entre header et body */\r\n readonly showHeaderDivider = input<boolean>(this.config.showHeaderDivider ?? true);\r\n\r\n /** Afficher le divider entre body et footer */\r\n readonly showFooterDivider = input<boolean>(this.config.showFooterDivider ?? true);\r\n\r\n /** Afficher le divider entre footer et actions */\r\n readonly showActionsDivider = input<boolean>(this.config.showActionsDivider ?? true);\r\n\r\n /** Alignement des actions dans la zone card-actions */\r\n readonly actionsAlignment = input<CardActionsAlignment>(this.config.actionsAlignment ?? 'right');\r\n\r\n /** Activer/désactiver le padding du body */\r\n readonly bodyPadding = input<boolean>(this.config.bodyPadding ?? true);\r\n\r\n /** État de chargement - affiche un skeleton */\r\n readonly loading = input<boolean>(false);\r\n\r\n /** État désactivé - réduit l'opacité */\r\n readonly disabled = input<boolean>(false);\r\n\r\n /**\r\n * Name of the article, for a card with no visible `title`. A card that has one is already\r\n * named by it, so this stays unset by default rather than competing with it.\r\n */\r\n readonly ariaLabel = input<string>();\r\n\r\n // Outputs\r\n /** Émis lors du clic sur la carte (si interactive) */\r\n clicked = output<MouseEvent | KeyboardEvent>();\r\n\r\n // Computed values\r\n /** Classes CSS calculées selon les propriétés */\r\n readonly computedClasses = computed(() => {\r\n const classes = ['psh-card'];\r\n classes.push(`psh-appearance-${this.appearance()}`);\r\n classes.push(`psh-color-${this.color()}`);\r\n classes.push(`psh-density-${this.density()}`);\r\n\r\n if (this.hoverable()) classes.push('psh-hoverable');\r\n if (this.interactive()) classes.push('psh-interactive');\r\n if (this.loading()) classes.push('psh-loading');\r\n if (this.disabled()) classes.push('psh-disabled');\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n /** Indique si le header doit être affiché */\r\n readonly hasHeader = computed(() => {\r\n return !!(this.title() || this.description());\r\n });\r\n\r\n /** Classe d'alignement pour la zone d'actions */\r\n readonly actionsAlignmentClass = computed(() => {\r\n return `psh-actions-align-${this.actionsAlignment()}`;\r\n });\r\n\r\n readonly actionsClasses = computed(() => {\r\n const classes = [this.actionsAlignmentClass()];\r\n if (this.isMobile()) {\r\n classes.push('psh-mobile-full-width-buttons');\r\n }\r\n return classes.join(' ');\r\n });\r\n\r\n /**\r\n * Shared with every other card on the page — one media query, not one `ResizeObserver` per\r\n * instance on `document.documentElement`.\r\n */\r\n protected readonly isMobile = inject(PshViewportService).below('sm');\r\n\r\n /**\r\n * Gère le clic sur la carte\r\n * Émet l'événement clicked seulement si la carte est interactive\r\n * et non désactivée\r\n */\r\n handleClick(event: MouseEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Gère la navigation au clavier (Enter et Space)\r\n * Permet d'activer la carte au clavier pour l'accessibilité\r\n */\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n }\r\n}\r\n","<!--\r\n Header : rendu inconditionnel, masqué en CSS s'il est vide\r\n (voir .card-header:not(:has(*)) dans card.component.css).\r\n Se rend dès que title/description est renseigné OU qu'un slot de header\r\n ([psh-card-header-icon] / [psh-card-header-content] / [psh-card-header-actions]) est projeté.\r\n-->\r\n<div class=\"psh-card-header\" [class.psh-has-divider]=\"showHeaderDivider()\">\r\n <!-- Slot pour icône/avatar avant le titre -->\r\n <ng-content select=\"[psh-card-header-icon]\"></ng-content>\r\n\r\n <!-- Zone de titre et description -->\r\n @if (title() || description()) {\r\n <div class=\"psh-card-header-content\">\r\n @if (title()) {\r\n <h3 class=\"psh-card-title\">{{ title() }}</h3>\r\n }\r\n @if (description()) {\r\n <p class=\"psh-card-description\">{{ description() }}</p>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Slot pour contenu personnalisé du header -->\r\n <ng-content select=\"[psh-card-header-content]\"></ng-content>\r\n\r\n <!-- Slot pour badge/tag ou actions secondaires -->\r\n <ng-content select=\"[psh-card-header-actions]\"></ng-content>\r\n</div>\r\n\r\n<!-- Body avec contenu principal -->\r\n<div class=\"psh-card-body\" [class.psh-no-padding]=\"!bodyPadding()\">\r\n <!-- État de chargement -->\r\n @if (loading()) {\r\n <div class=\"psh-card-loading\">\r\n <div class=\"psh-skeleton-line\"></div>\r\n <div class=\"psh-skeleton-line\"></div>\r\n <div class=\"psh-skeleton-line psh-short\"></div>\r\n </div>\r\n } @else {\r\n <!-- Contenu principal (slot par défaut) -->\r\n <ng-content></ng-content>\r\n }\r\n</div>\r\n\r\n<!-- Footer optionnel pour métadonnées -->\r\n<div class=\"psh-card-footer\" [class.psh-has-divider]=\"showFooterDivider()\">\r\n <ng-content select=\"[psh-card-footer]\"></ng-content>\r\n</div>\r\n\r\n<!-- Actions -->\r\n<div class=\"psh-card-actions\" [class]=\"actionsClasses()\" [class.psh-has-divider]=\"showActionsDivider()\">\r\n <ng-content select=\"[psh-card-actions]\"></ng-content>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n input,\r\n output,\r\n ViewEncapsulation,\r\n inject,\r\n} from '@angular/core';\r\nimport { PshTagComponent } from '../tag/tag.component';\r\nimport { StatCardLayout } from './stat-card.types';\r\nimport { PSH_COLORS, PshColor, PshSurfaceAppearance } from '../../types/semantic.types';\r\nimport { STAT_CARD_CONFIG } from './stat-card.tokens';\r\n\r\n/**\r\n * Icon background per semantic colour. These were four hardcoded hex pairs that ignored\r\n * the theme entirely — a `danger` stat card rendered the same red in light and dark mode,\r\n * and none of them matched the brand. Derived from the colour tokens instead, with\r\n * color-mix supplying the lighter stop so no second token is needed.\r\n */\r\nconst ICON_GRADIENT_DEFAULTS: Record<PshColor, string> = Object.fromEntries(\r\n PSH_COLORS.map(color => [\r\n color,\r\n `linear-gradient(135deg, color-mix(in srgb, var(--psh-${color}-color) 65%, white), var(--psh-${color}-color))`,\r\n ]),\r\n) as Record<PshColor, string>;\r\n@Component({\r\n selector: 'psh-stat-card',\r\n imports: [PshTagComponent],\r\n templateUrl: './stat-card.component.html',\r\n styleUrls: ['./stat-card.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n '[class]': 'computedClasses()',\r\n '(click)': 'handleClick($event)',\r\n '(keydown)': 'handleKeydown($event)',\r\n '[attr.role]': 'interactive() ? \"button\" : \"article\"',\r\n '[attr.tabindex]': 'interactive() && !disabled() ? 0 : null',\r\n '[attr.aria-label]': 'computedAriaLabel()',\r\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\r\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\r\n },\r\n})\r\nexport class PshStatCardComponent {\r\n private readonly config = inject(STAT_CARD_CONFIG);\r\n\r\n\r\n // Inputs principaux\r\n /** Valeur principale de la statistique (nombre ou texte formaté) */\r\n readonly value = input<string | number>();\r\n\r\n /** Description de la statistique */\r\n readonly description = input<string>();\r\n\r\n /** Nom de l'icône Phosphor (sans le préfixe 'ph-') */\r\n readonly icon = input<string>();\r\n\r\n // Inputs optionnels\r\n /** Variante du tag d'évolution (détermine la couleur) */\r\n readonly tagColor = input<PshColor>();\r\n\r\n /** Label du tag d'évolution (ex: '+12.6%', '-8.1%') */\r\n readonly tagLabel = input<string>();\r\n\r\n /** Couleur de fond personnalisée pour l'icône (CSS gradient ou couleur) */\r\n readonly iconBackground = input<string>();\r\n\r\n /** Variante visuelle de la carte de base */\r\n readonly appearance = input<PshSurfaceAppearance>(this.config.appearance ?? 'elevated');\r\n\r\n /** Carte cliquable avec feedback visuel */\r\n readonly interactive = input(this.config.interactive ?? false);\r\n\r\n /** Effet de survol */\r\n readonly hoverable = input(this.config.hoverable ?? false);\r\n\r\n /** État de chargement */\r\n readonly loading = input(false);\r\n\r\n /** État désactivé */\r\n readonly disabled = input(false);\r\n\r\n\r\n\r\n /** Label ARIA pour l'accessibilité */\r\n readonly ariaLabel = input<string>();\r\n\r\n /** Disposition de la carte: 'horizontal' (icône à gauche) ou 'vertical' (icône en haut) */\r\n readonly layout = input<StatCardLayout>(this.config.layout ?? 'horizontal');\r\n\r\n /** Active la direction row pour le card-body (icône et contenu côte à côte en flex-row) */\r\n readonly rowDirection = input(this.config.rowDirection ?? false);\r\n\r\n // Outputs\r\n /** Émis lors du clic sur la carte */\r\n clicked = output<MouseEvent | KeyboardEvent>();\r\n\r\n // Computed values\r\n private readonly computedValue = computed(() => this.value() ?? '');\r\n\r\n private readonly computedDescription = computed(() => this.description() ?? '');\r\n\r\n private readonly computedIcon = computed(() => this.icon() ?? '');\r\n\r\n private readonly computedTagVariant = computed(() => this.tagColor());\r\n\r\n private readonly computedTagLabel = computed(() => this.tagLabel());\r\n\r\n private readonly computedIconBackground = computed(() => {\r\n const customBg = this.iconBackground();\r\n if (customBg) return customBg;\r\n\r\n const variant = this.tagColor();\r\n return variant ? ICON_GRADIENT_DEFAULTS[variant] : null;\r\n });\r\n\r\n /** Style de l'icône avec couleur de fond personnalisée */\r\n readonly iconStyle = computed(() => {\r\n const background = this.computedIconBackground();\r\n return background ? { background } : null;\r\n });\r\n\r\n /** Vérifie si un tag doit être affiché */\r\n readonly hasTag = computed(() =>\r\n !!(this.computedTagVariant() && this.computedTagLabel())\r\n );\r\n\r\n /** Vérifie si une icône doit être affichée */\r\n readonly hasIcon = computed(() => !!this.computedIcon());\r\n\r\n readonly useRowDirection = computed(() => this.rowDirection());\r\n\r\n /** Label ARIA calculé */\r\n readonly computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const value = this.computedValue();\r\n const desc = this.computedDescription();\r\n const tag = this.computedTagLabel();\r\n\r\n return tag\r\n ? `${desc}: ${value}, ${tag}`\r\n : `${desc}: ${value}`;\r\n });\r\n\r\n /** Classes CSS calculées */\r\n readonly computedClasses = computed(() => {\r\n const classes = ['psh-stat-card'];\r\n const layout = this.layout();\r\n\r\n classes.push(`psh-appearance-${this.appearance()}`);\r\n\r\n if (layout === 'vertical') {\r\n classes.push('psh-stat-card--vertical');\r\n } else {\r\n classes.push('psh-stat-card--horizontal');\r\n }\r\n\r\n if (this.useRowDirection()) {\r\n classes.push('psh-stat-card--row');\r\n }\r\n\r\n if (this.hoverable()) classes.push('psh-hoverable');\r\n if (this.interactive()) classes.push('psh-interactive');\r\n if (this.loading()) classes.push('psh-loading');\r\n if (this.disabled()) classes.push('psh-disabled');\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n\r\n // Exposer les valeurs calculées pour le template\r\n protected get displayValue() { return this.computedValue(); }\r\n protected get displayDescription() { return this.computedDescription(); }\r\n protected get displayIcon() { return this.computedIcon(); }\r\n protected get displayTagVariant() { return this.computedTagVariant(); }\r\n protected get displayTagLabel() { return this.computedTagLabel(); }\r\n\r\n /**\r\n * Gère le clic sur la carte\r\n */\r\n handleClick(event: MouseEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Gère la navigation au clavier\r\n */\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n }\r\n}","@if (loading()) {\r\n <div class=\"psh-stat-loading\">\r\n <div class=\"psh-skeleton-circle\"></div>\r\n <div class=\"psh-skeleton-content\">\r\n <div class=\"psh-skeleton-line\"></div>\r\n <div class=\"psh-skeleton-line psh-short\"></div>\r\n </div>\r\n </div>\r\n} @else {\r\n @if (useRowDirection()) {\r\n <div class=\"psh-stat-card-body\">\r\n @if (hasIcon()) {\r\n <!-- eslint-disable-next-line @angular-eslint/template/no-inline-styles -->\r\n<div class=\"psh-stat-icon\" [style]=\"iconStyle()\">\r\n <i class=\"ph ph-{{ displayIcon }}\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n\r\n <div class=\"psh-stat-content\">\r\n <h3 class=\"psh-stat-value\">{{ displayValue }}</h3>\r\n <p class=\"psh-stat-description\">{{ displayDescription }}</p>\r\n\r\n @if (hasTag()) {\r\n <psh-tag [color]=\"displayTagVariant!\">\r\n {{ displayTagLabel }}\r\n </psh-tag>\r\n }\r\n </div>\r\n </div>\r\n } @else {\r\n @if (hasIcon()) {\r\n <!-- eslint-disable-next-line @angular-eslint/template/no-inline-styles -->\r\n<div class=\"psh-stat-icon\" [style]=\"iconStyle()\">\r\n <i class=\"ph ph-{{ displayIcon }}\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n\r\n <div class=\"psh-stat-content\">\r\n <h3 class=\"psh-stat-value\">{{ displayValue }}</h3>\r\n <p class=\"psh-stat-description\">{{ displayDescription }}</p>\r\n\r\n @if (hasTag()) {\r\n <psh-tag [color]=\"displayTagVariant!\">\r\n {{ displayTagLabel }}\r\n </psh-tag>\r\n }\r\n </div>\r\n }\r\n}\r\n","import { PshSurfaceAppearance } from '../../types/semantic.types';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n input,\r\n output,\r\n ViewEncapsulation,\r\n inject,\r\n} from '@angular/core';\r\nimport { HORIZONTAL_CARD_CONFIG } from './horizontal-card.tokens';\r\n\r\n/**\r\n * Composant carte horizontale autonome\r\n *\r\n * Composant complètement indépendant pour créer une mise en page\r\n * horizontale avec contenu latéral.\r\n *\r\n * Ce composant est particulièrement adapté pour :\r\n * - Cartes produits avec image latérale\r\n * - Profils utilisateurs avec avatar\r\n * - Articles avec illustration\r\n *\r\n * Le layout bascule automatiquement en vertical sur mobile.\r\n *\r\n * @example\r\n * <psh-horizontal-card appearance=\"elevated\" sideWidth=\"var(--psh-size-48)\">\r\n * <div psh-horizontal-card-side>\r\n * <img src=\"image.jpg\" alt=\"Product\">\r\n * </div>\r\n * <h3 psh-horizontal-card-header>Titre du produit</h3>\r\n * <p>Description du produit</p>\r\n * <div psh-horizontal-card-actions>\r\n * <psh-button>Voir</psh-button>\r\n * </div>\r\n * </psh-horizontal-card>\r\n */\r\n@Component({\r\n selector: 'psh-horizontal-card',\r\n templateUrl: './horizontal-card.component.html',\r\n styleUrls: ['./horizontal-card.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n '[class]': 'computedClasses()',\r\n '[style]': 'computedStyles()',\r\n '(click)': 'handleClick($event)',\r\n '(keydown)': 'handleKeydown($event)',\r\n role: 'article',\r\n '[attr.aria-label]': 'ariaLabel() || null',\r\n '[attr.tabindex]': 'interactive() && !disabled() ? 0 : null',\r\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\r\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\r\n },\r\n})\r\nexport class PshHorizontalCardComponent {\r\n private readonly config = inject(HORIZONTAL_CARD_CONFIG);\r\n\r\n\r\n /** Variante de la carte de base */\r\n readonly appearance = input<PshSurfaceAppearance>(this.config.appearance ?? 'elevated');\r\n\r\n /** Carte cliquable */\r\n readonly interactive = input(this.config.interactive ?? false);\r\n\r\n /** Effet de survol */\r\n readonly hoverable = input(this.config.hoverable ?? false);\r\n\r\n /** État de chargement */\r\n readonly loading = input(false);\r\n\r\n /** État désactivé */\r\n readonly disabled = input(false);\r\n\r\n /** Name of the article, for a card with no visible title. */\r\n readonly ariaLabel = input<string>();\r\n\r\n\r\n\r\n /** Largeur du contenu latéral (utiliser les tokens de sizing comme var(--psh-size-48)) */\r\n readonly sideWidth = input<string>(this.config.sideWidth ?? 'var(--psh-size-48)');\r\n\r\n /** Gap entre le contenu latéral et principal */\r\n readonly gap = input<string>(this.config.gap ?? 'var(--psh-spacing-md)');\r\n\r\n /** Padding du contenu latéral */\r\n readonly sidePadding = input<string>(this.config.sidePadding ?? '0');\r\n\r\n /** Padding du contenu principal */\r\n readonly contentPadding = input<string>(this.config.contentPadding ?? 'var(--psh-spacing-md)');\r\n\r\n /** Hauteur du contenu latéral sur mobile (utiliser les tokens de sizing) */\r\n readonly mobileHeight = input<string>(this.config.mobileHeight ?? 'var(--psh-size-48)');\r\n\r\n /** Émis lors du clic sur la carte */\r\n clicked = output<MouseEvent | KeyboardEvent>();\r\n\r\n /** Classes CSS calculées selon les propriétés */\r\n readonly computedClasses = computed(() => {\r\n const classes = ['psh-horizontal-card'];\r\n classes.push(`psh-appearance-${this.appearance()}`);\r\n\r\n if (this.hoverable()) classes.push('psh-hoverable');\r\n if (this.interactive()) classes.push('psh-interactive');\r\n if (this.loading()) classes.push('psh-loading');\r\n if (this.disabled()) classes.push('psh-disabled');\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n /**\r\n * The geometry inputs, as custom properties on the host.\r\n *\r\n * Unlike the other cards this is not a `customStyle` passthrough in disguise: these five\r\n * properties are how `sideWidth`, `gap` and friends reach the stylesheet. The consumer's own\r\n * `style` attribute merges with them on the host, so nothing was lost by dropping the\r\n * passthrough.\r\n */\r\n readonly computedStyles = computed(() => {\r\n return {\r\n '--psh-horizontal-side-width': this.sideWidth(),\r\n '--psh-horizontal-gap': this.gap(),\r\n '--psh-horizontal-side-padding': this.sidePadding(),\r\n '--psh-horizontal-content-padding': this.contentPadding(),\r\n '--psh-horizontal-mobile-height': this.mobileHeight(),\r\n };\r\n });\r\n\r\n /**\r\n * Gère le clic sur la carte\r\n */\r\n handleClick(event: MouseEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Gère la navigation au clavier\r\n */\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n }\r\n}","<!-- Contenu latéral -->\r\n<div class=\"psh-horizontal-side\">\r\n @if (loading()) {\r\n <div class=\"psh-horizontal-skeleton\"></div>\r\n } @else {\r\n <ng-content select=\"[psh-horizontal-card-side]\"></ng-content>\r\n }\r\n</div>\r\n\r\n<!-- Contenu principal -->\r\n<div class=\"psh-horizontal-content\">\r\n @if (loading()) {\r\n <div class=\"psh-horizontal-loading\">\r\n <div class=\"psh-skeleton-line\"></div>\r\n <div class=\"psh-skeleton-line\"></div>\r\n <div class=\"psh-skeleton-line psh-short\"></div>\r\n </div>\r\n } @else {\r\n <!-- Header optionnel -->\r\n <ng-content select=\"[psh-horizontal-card-header]\"></ng-content>\r\n\r\n <!-- Contenu principal -->\r\n <ng-content></ng-content>\r\n\r\n <!-- Actions optionnelles -->\r\n <ng-content select=\"[psh-horizontal-card-actions]\"></ng-content>\r\n }\r\n</div>\r\n","import { PshSurfaceAppearance } from '../../types/semantic.types';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { Component, ChangeDetectionStrategy, computed, input, signal, PLATFORM_ID, inject, output, ViewEncapsulation, ElementRef, AfterContentInit, OnDestroy } from '@angular/core';\r\nimport { PshViewportService } from '../../a11y/viewport.service';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { InfoCardData, InfoCardOptions } from './info-card.types';\r\nimport { INFO_CARD_CONFIG } from './info-card.tokens';\r\n\r\n/**\r\n * Info Card Component - Autonomous\r\n *\r\n * A fully independent card component that displays structured data as label/value pairs.\r\n * Provides a consistent way to present information with proper accessibility and responsive design.\r\n *\r\n * @example\r\n * ```typescript\r\n * const userData: InfoCardData[] = [\r\n * { label: 'Name', value: 'John Doe' },\r\n * { label: 'Email', value: 'john@example.com' }\r\n * ];\r\n * ```\r\n *\r\n * ```html\r\n * <psh-info-card\r\n * title=\"User Information\"\r\n * [data]=\"userData\"\r\n * icon=\"user\"\r\n * appearance=\"elevated\"\r\n * ></psh-info-card>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'psh-info-card',\r\n templateUrl: './info-card.component.html',\r\n styleUrl: './info-card.component.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n '[class]': 'computedClasses()',\r\n '(click)': 'handleClick($event)',\r\n '(keydown)': 'handleKeydown($event)',\r\n role: 'region',\r\n '[attr.tabindex]': 'interactive() && !disabled() ? 0 : null',\r\n '[attr.aria-label]': 'computedAriaLabel()',\r\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\r\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\r\n },\r\n})\r\nexport class PshInfoCardComponent implements AfterContentInit, OnDestroy {\r\n private readonly config = inject(INFO_CARD_CONFIG);\r\n\r\n\r\n readonly hasHeaderActions = signal<boolean>(false);\r\n\r\n /** Title displayed in the card header */\r\n readonly title = input<string>('');\r\n\r\n /** Array of label-value pairs to display */\r\n readonly data = input.required<InfoCardData[]>();\r\n\r\n /**\r\n * Display options for the card.\r\n *\r\n * `emptyStateMessage` is deliberately absent from the default: carrying it here would\r\n * shadow the application's configured default, since this object wins over it.\r\n */\r\n readonly options = input<InfoCardOptions>({\r\n showEmptyState: true,\r\n labelWidth: undefined,\r\n valueWidth: undefined\r\n });\r\n\r\n /** Base card variant style */\r\n readonly appearance = input<PshSurfaceAppearance>(this.config.appearance ?? 'outline');\r\n\r\n /** Icon to display in the header (Phosphor icon name without 'ph-' prefix) */\r\n readonly icon = input<string>(this.config.icon ?? 'circle-dashed');\r\n\r\n /** Custom ARIA label for accessibility */\r\n readonly ariaLabel = input<string>();\r\n\r\n\r\n\r\n /** Whether the card should be interactive/clickable */\r\n readonly interactive = input<boolean>(this.config.interactive ?? false);\r\n\r\n /** Whether to show hover effects */\r\n readonly hoverable = input<boolean>(this.config.hoverable ?? false);\r\n\r\n /** Indicates if data is loading */\r\n readonly loading = input<boolean>(false);\r\n\r\n /** Whether the card is disabled */\r\n readonly disabled = input<boolean>(false);\r\n\r\n /** Emitted when card is clicked */\r\n clicked = output<MouseEvent | KeyboardEvent>();\r\n\r\n /** Whether to show copy buttons on rows (opt-in) */\r\n readonly copyable = input<boolean>(this.config.copyable ?? false);\r\n\r\n /** Label prefix for the copy button aria-label */\r\n readonly copyButtonLabelInput = input<string | undefined>(undefined, { alias: 'copyButtonLabel' });\r\n readonly copyButtonLabel = computed(\r\n () => this.copyButtonLabelInput() ?? pshResolveConfigValue(this.config.copyButtonLabel) ?? 'Copy',\r\n );\r\n\r\n /** Text shown as feedback after successful copy */\r\n readonly notProvidedTextInput = input<string | undefined>(undefined, { alias: 'notProvidedText' });\r\n /** Stands in for a row value that is null or undefined. */\r\n readonly notProvidedText = computed(\r\n () =>\r\n this.notProvidedTextInput() ??\r\n pshResolveConfigValue(this.config.notProvidedText) ??\r\n 'Not provided',\r\n );\r\n\r\n readonly copyFeedbackTextInput = input<string | undefined>(undefined, { alias: 'copyFeedbackText' });\r\n readonly copyFeedbackText = computed(\r\n () => this.copyFeedbackTextInput() ?? pshResolveConfigValue(this.config.copyFeedbackText) ?? 'Copied',\r\n );\r\n\r\n /** Emitted when a row value is successfully copied */\r\n copied = output<InfoCardData>();\r\n\r\n /** Emitted when a copy attempt fails */\r\n copyFailed = output<InfoCardData>();\r\n\r\n /** Tracks the row index currently showing success feedback */\r\n readonly copiedRowIndex = signal<number | null>(null);\r\n\r\n /** Whether to auto-enable full width buttons on mobile (default: true) */\r\n readonly autoFullWidthOnMobile = input<boolean>(this.config.autoFullWidthOnMobile ?? true);\r\n\r\n /** Signal to track if viewport is mobile */\r\n\r\n private platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n private feedbackTimeout?: ReturnType<typeof setTimeout>;\r\n\r\n /** Determines if the empty state should be shown */\r\n readonly shouldShowEmptyState = computed(() => {\r\n const opts = this.options();\r\n const dataArray = this.data();\r\n return opts.showEmptyState && (!dataArray || dataArray.length === 0);\r\n });\r\n\r\n /**\r\n * The message shown when there is nothing to list.\r\n *\r\n * Three sources, narrowest first: the `options` input of this card, then the application's\r\n * configured default, then the library's own.\r\n */\r\n readonly getEmptyStateMessage = computed(\r\n () =>\r\n this.options().emptyStateMessage ||\r\n pshResolveConfigValue(this.config.emptyStateMessage) ||\r\n 'No information available',\r\n );\r\n\r\n /** Full icon class name for Phosphor icons */\r\n readonly titleIcon = computed(() => {\r\n const iconName = this.icon();\r\n return iconName ? `ph-${iconName}` : '';\r\n });\r\n\r\n /** Computed ARIA label for the component */\r\n readonly computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n const titleText = this.title();\r\n return customLabel || (titleText ? `Information card: ${titleText}` : 'Information card');\r\n });\r\n\r\n /** Computed CSS classes */\r\n readonly computedClasses = computed(() => {\r\n const classes = ['psh-info-card'];\r\n classes.push(`psh-appearance-${this.appearance()}`);\r\n\r\n if (this.hoverable()) classes.push('psh-hoverable');\r\n if (this.interactive()) classes.push('psh-interactive');\r\n if (this.loading()) classes.push('psh-loading');\r\n if (this.disabled()) classes.push('psh-disabled');\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n\r\n /** Gets CSS classes for card-actions based on mobile state */\r\n readonly getActionsClasses = computed(() => {\r\n const classes: string[] = [];\r\n if (this.autoFullWidthOnMobile() && this.isMobile()) {\r\n classes.push('psh-mobile-full-width-buttons');\r\n }\r\n return classes.join(' ');\r\n });\r\n\r\n private elementRef = inject(ElementRef);\r\n\r\n /** Shared with every other card on the page. See `PshViewportService`. */\r\n readonly isMobile = inject(PshViewportService).below('sm');\r\n\r\n ngAfterContentInit(): void {\r\n this.checkHeaderActionsContent();\r\n }\r\n\r\n private checkHeaderActionsContent(): void {\r\n if (isPlatformBrowser(this.platformId)) {\r\n const headerActionsEl = this.elementRef.nativeElement.querySelector('[psh-info-card-header-actions]');\r\n this.hasHeaderActions.set(!!headerActionsEl);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.feedbackTimeout) {\r\n clearTimeout(this.feedbackTimeout);\r\n }\r\n }\r\n\r\n /**\r\n * Handles click events on the card\r\n */\r\n handleClick(event: MouseEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Handles keyboard navigation\r\n */\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n }\r\n\r\n isRowCopyable(item: InfoCardData): boolean {\r\n return item.copyable ?? this.copyable();\r\n }\r\n\r\n hasNonEmptyValue(item: InfoCardData): boolean {\r\n const val = item.value;\r\n if (val == null) return false;\r\n return val.toString().trim().length > 0;\r\n }\r\n\r\n /**\r\n * Calcule les classes CSS de la valeur d'une ligne à partir de son emphasis.\r\n * Fonction pure (compatible OnPush) : aucun effet de bord.\r\n * Un emphasis explicite prime sur l'auto-muted des valeurs nullish.\r\n */\r\n getValueClasses(item: InfoCardData): string {\r\n const classes = ['psh-info-card-value'];\r\n const emphasis = item.emphasis;\r\n const isEmpty = item.value == null;\r\n const autoMuted = isEmpty && this.options().mutedEmptyValues !== false && !emphasis;\r\n\r\n if (autoMuted) {\r\n classes.push('psh-info-card-value--italic', 'psh-info-card-value--color-neutral');\r\n } else if (emphasis) {\r\n if (emphasis.italic) classes.push('psh-info-card-value--italic');\r\n if (emphasis.bold) classes.push('psh-info-card-value--bold');\r\n if (emphasis.strikethrough) classes.push('psh-info-card-value--strikethrough');\r\n if (emphasis.color) classes.push(`psh-info-card-value--color-${emphasis.color}`);\r\n }\r\n\r\n return classes.join(' ');\r\n }\r\n\r\n copyRowValue(item: InfoCardData, index: number): void {\r\n if (!isPlatformBrowser(this.platformId)) {\r\n this.copyFailed.emit(item);\r\n return;\r\n }\r\n\r\n const view = this.document.defaultView;\r\n if (!view?.isSecureContext || !view.navigator.clipboard) {\r\n this.copyFailed.emit(item);\r\n return;\r\n }\r\n\r\n const text = item.copyValue ?? item.value?.toString() ?? '';\r\n\r\n view.navigator.clipboard.writeText(text).then(\r\n () => {\r\n if (this.feedbackTimeout) {\r\n clearTimeout(this.feedbackTimeout);\r\n }\r\n this.copiedRowIndex.set(index);\r\n this.copied.emit(item);\r\n this.feedbackTimeout = setTimeout(() => {\r\n this.copiedRowIndex.set(null);\r\n }, 1800);\r\n },\r\n () => {\r\n this.copyFailed.emit(item);\r\n }\r\n );\r\n }\r\n}","@if (title() || hasHeaderActions()) {\r\n <div class=\"psh-info-card-header\">\r\n @if (title()) {\r\n <h3 class=\"psh-info-card-title\">\r\n @if (icon()) {\r\n <i\r\n class=\"ph {{ titleIcon() }}\"\r\n aria-hidden=\"true\"\r\n [attr.data-icon]=\"icon()\"\r\n ></i>\r\n }\r\n {{ title() }}\r\n </h3>\r\n }\r\n <div class=\"psh-info-card-header-actions\">\r\n <ng-content select=\"[psh-info-card-header-actions]\"></ng-content>\r\n </div>\r\n </div>\r\n}\r\n\r\n<div class=\"psh-info-card-body\">\r\n @if (loading()) {\r\n <div class=\"psh-info-card-loading\">\r\n <div class=\"psh-skeleton-line\"></div>\r\n <div class=\"psh-skeleton-line\"></div>\r\n <div class=\"psh-skeleton-line psh-short\"></div>\r\n </div>\r\n } @else {\r\n <div\r\n class=\"psh-info-card-content\"\r\n role=\"list\"\r\n >\r\n @if (shouldShowEmptyState()) {\r\n <div\r\n class=\"psh-info-card-empty-state\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n [attr.data-testid]=\"'info-card-empty-state'\"\r\n >\r\n {{ getEmptyStateMessage() }}\r\n </div>\r\n } @else {\r\n @for (item of data(); track item) {\r\n <div\r\n class=\"psh-info-card-row\"\r\n role=\"listitem\"\r\n [attr.data-index]=\"$index\"\r\n [class]=\"item.customClass || ''\"\r\n >\r\n <div\r\n class=\"psh-info-card-label\"\r\n [style.width]=\"item.labelWidth || options().labelWidth\"\r\n [attr.data-label]=\"item.label\"\r\n >\r\n {{ item.label }}\r\n </div>\r\n <div\r\n class=\"psh-info-card-value-group\"\r\n [style.width]=\"item.valueWidth || options().valueWidth\"\r\n >\r\n <span\r\n [class]=\"getValueClasses(item)\"\r\n [attr.data-value]=\"item.value\"\r\n [title]=\"item.value?.toString() || ''\"\r\n >{{ item.value ?? notProvidedText() }}</span>\r\n @if (isRowCopyable(item) && hasNonEmptyValue(item)) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-info-card-copy-btn\"\r\n [class.psh-copied]=\"copiedRowIndex() === $index\"\r\n [attr.aria-label]=\"copyButtonLabel() + ' ' + item.label\"\r\n (click)=\"copyRowValue(item, $index); $event.stopPropagation()\"\r\n >\r\n @if (copiedRowIndex() === $index) {\r\n <i class=\"ph ph-check\" aria-hidden=\"true\"></i>\r\n <span class=\"psh-info-card-copy-feedback\" aria-hidden=\"true\">{{ copyFeedbackText() }}</span>\r\n } @else {\r\n <i class=\"ph ph-copy\" aria-hidden=\"true\"></i>\r\n }\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <span\r\n class=\"psh-info-card-sr-only\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n >\r\n @if (copiedRowIndex() !== null) {\r\n {{ copyFeedbackText() }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n }\r\n</div>\r\n\r\n<div class=\"psh-info-card-actions\" [class]=\"'psh-' + getActionsClasses()\">\r\n <ng-content select=\"[psh-info-card-actions]\"></ng-content>\r\n</div>\r\n","import { PshSurfaceAppearance } from '../../types/semantic.types';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n input,\r\n isDevMode,\r\n model,\r\n output,\r\n inject,\r\n} from '@angular/core';\r\nimport { CollapseVariant, CollapseSize } from './collapse.types';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\nimport { COLLAPSE_CONFIG } from './collapse.tokens';\r\n\r\n@Component({\r\n selector: 'psh-collapse',\r\n templateUrl: './collapse.component.html',\r\n styleUrls: ['./collapse.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshCollapseComponent {\r\n private readonly config = inject(COLLAPSE_CONFIG);\r\n\r\n\r\n readonly expanded = model(false);\r\n\r\n readonly disabled = input(false);\r\n readonly appearance = input(this.config.appearance ?? ('flat' as PshSurfaceAppearance), {\r\n transform: (value: CollapseVariant) => {\r\n if (!['flat', 'outline'].includes(value)) {\r\n if (isDevMode()) {\r\n console.warn(`[psh-collapse] Invalid variant \"${value}\", falling back to \"flat\"`);\r\n }\r\n return 'flat';\r\n }\r\n return value;\r\n }\r\n });\r\n readonly size = input(this.config.size ?? ('medium' as CollapseSize), {\r\n transform: (value: CollapseSize) => {\r\n if (!['small', 'medium', 'large'].includes(value)) {\r\n if (isDevMode()) {\r\n console.warn(`[psh-collapse] Invalid size \"${value}\", falling back to \"medium\"`);\r\n }\r\n return 'medium';\r\n }\r\n return value;\r\n }\r\n });\r\n readonly icon = input(this.config.icon ?? 'caret-down');\r\n readonly id = input<string>();\r\n /**\r\n * Maximum height of the open content. `'auto'` — the default — does not clip.\r\n *\r\n * It used to default to a magic `'1000px'`, which **silently truncated** anything taller\r\n * with no warning and no way to opt out. A fixed length still works, and is what gives the\r\n * open/close a height animation; `auto` animates opacity and offset only.\r\n */\r\n readonly maxHeight = input<string>(this.config.maxHeight ?? 'auto');\r\n\r\n /**\r\n * Fallback header text, used when nothing is projected into `[psh-collapse-header]`.\r\n * Was a literal in the template, so a non-French application could not change it.\r\n */\r\n readonly defaultHeaderTextInput = input<string | undefined>(undefined, { alias: 'defaultHeaderText' });\r\n readonly defaultHeaderText = computed(\r\n () => this.defaultHeaderTextInput() ?? pshResolveConfigValue(this.config.defaultHeaderText) ?? 'Collapsible section',\r\n );\r\n\r\n /** `auto` is not a usable `max-height` for the CSS; `none` is the same intent. */\r\n protected readonly resolvedMaxHeight = computed(() =>\r\n this.maxHeight() === 'auto' ? 'none' : this.maxHeight(),\r\n );\r\n readonly disableAnimation = input(this.config.disableAnimation ?? false);\r\n\r\n opened = output<void>();\r\n closed = output<void>();\r\n toggled = output<boolean>();\r\n\r\n private readonly uniqueId = pshUniqueId('collapse');\r\n\r\n protected readonly headerId = computed(() => {\r\n const customId = this.id();\r\n return customId ? `${customId}-header` : `${this.uniqueId}-header`;\r\n });\r\n\r\n protected readonly contentId = computed(() => {\r\n const customId = this.id();\r\n return customId ? `${customId}-content` : `${this.uniqueId}-content`;\r\n });\r\n\r\n readonly state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n return this.expanded() ? 'expanded' : 'collapsed';\r\n });\r\n\r\n readonly animationClass = computed(() => {\r\n return this.disableAnimation() ? 'no-animation' : '';\r\n });\r\n\r\n toggle(): void {\r\n if (!this.disabled()) {\r\n this.expanded.update(value => {\r\n const newValue = !value;\r\n this.toggled.emit(newValue);\r\n return newValue;\r\n });\r\n }\r\n }\r\n\r\n open(): void {\r\n if (!this.disabled() && !this.expanded()) {\r\n this.expanded.set(true);\r\n this.opened.emit();\r\n }\r\n }\r\n\r\n close(): void {\r\n if (!this.disabled() && this.expanded()) {\r\n this.expanded.set(false);\r\n this.closed.emit();\r\n }\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.toggle();\r\n break;\r\n case 'Escape':\r\n if (this.expanded()) {\r\n event.preventDefault();\r\n this.close();\r\n }\r\n break;\r\n }\r\n }\r\n}","<div\r\n class=\"psh-collapse\"\r\n [class.psh-expanded]=\"expanded()\"\r\n [class.psh-disabled]=\"disabled()\"\r\n [class.psh-outline]=\"appearance() === 'outline'\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [class.psh-no-animation]=\"disableAnimation()\"\r\n [attr.data-state]=\"state()\"\r\n [style.--psh-collapse-max-height]=\"resolvedMaxHeight()\"\r\n>\r\n <button\r\n [id]=\"headerId()\"\r\n class=\"psh-collapse-header\"\r\n (click)=\"toggle()\"\r\n (keydown)=\"onKeydown($event)\"\r\n [attr.aria-expanded]=\"expanded()\"\r\n [attr.aria-controls]=\"contentId()\"\r\n [disabled]=\"disabled()\"\r\n type=\"button\"\r\n >\r\n <span class=\"psh-header-content\">\r\n <ng-content select=\"[psh-collapse-header]\">\r\n <span>{{ defaultHeaderText() }}</span>\r\n </ng-content>\r\n </span>\r\n <i\r\n class=\"ph ph-{{ icon() }}\"\r\n [class.psh-expanded]=\"expanded()\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </button>\r\n\r\n <div\r\n [id]=\"contentId()\"\r\n class=\"psh-collapse-content\"\r\n role=\"region\"\r\n [attr.aria-labelledby]=\"headerId()\"\r\n [attr.aria-hidden]=\"!expanded()\"\r\n [attr.inert]=\"expanded() ? null : ''\"\r\n >\r\n <div class=\"psh-content-wrapper\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>","import {\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n inject,\r\n output,\r\n PLATFORM_ID,\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\n\r\n/**\r\n * Emits when a click occurs outside the host element.\r\n *\r\n * Shared primitive replacing the per-component document click listeners used by\r\n * select / dropdown to close on outside click. Typically consumed as a host\r\n * directive:\r\n *\r\n * @example\r\n * ```typescript\r\n * @Component({ hostDirectives: [PshClickOutsideDirective] })\r\n * export class MyPopover {\r\n * constructor() {\r\n * inject(PshClickOutsideDirective).pshClickOutside.subscribe(() => this.close());\r\n * }\r\n * }\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[pshClickOutside]',\r\n})\r\nexport class PshClickOutsideDirective {\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n /** Emitted when a click lands outside the host element. */\r\n readonly pshClickOutside = output<MouseEvent>();\r\n\r\n constructor() {\r\n if (!this.isBrowser) return;\r\n this.document.addEventListener('click', this.onDocumentClick);\r\n inject(DestroyRef).onDestroy(() =>\r\n this.document.removeEventListener('click', this.onDocumentClick),\r\n );\r\n }\r\n\r\n private readonly onDocumentClick = (event: MouseEvent): void => {\r\n const target = event.target as Node | null;\r\n if (target && !this.host.nativeElement.contains(target)) {\r\n this.pshClickOutside.emit(event);\r\n }\r\n };\r\n}\r\n","import { PshControlAppearance } from '../../types/semantic.types';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport {\r\n NgZone,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DestroyRef,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n PLATFORM_ID,\r\n TemplateRef,\r\n ViewContainerRef,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { PshOverlayPositionService } from '../../a11y/overlay-position.service';\r\nimport { PshClickOutsideDirective } from '../../a11y/click-outside.directive';\r\nimport { PshPortalService, PshPortalRef } from '../../a11y/portal.service';\r\nimport { DropdownColor, DropdownItem, DropdownPlacement, DropdownSize } from './dropdown.types';\r\nimport { DROPDOWN_CONFIG } from './dropdown.tokens';\r\n\r\n@Component({\r\n selector: 'psh-dropdown',\r\n templateUrl: './dropdown.component.html',\r\n styleUrls: ['./dropdown.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n hostDirectives: [PshClickOutsideDirective]\r\n})\r\nexport class PshDropdownComponent<T = string> {\r\n private readonly zone = inject(NgZone);\r\n private readonly config = inject(DROPDOWN_CONFIG);\r\n\r\n private elementRef = inject(ElementRef);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n private readonly overlayPosition = inject(PshOverlayPositionService);\r\n private readonly portal = inject(PshPortalService);\r\n private readonly viewContainer = inject(ViewContainerRef);\r\n\r\n // The menu is teleported to a body-level overlay layer on open so it escapes\r\n // any ancestor overflow / stacking context (a modal body, a scrollable card…).\r\n private readonly menuTpl = viewChild<TemplateRef<unknown>>('menuTpl');\r\n private portalRef: PshPortalRef | null = null;\r\n private focusTimeout: ReturnType<typeof setTimeout> | null = null;\r\n private readonly repositionHandler = (): void => this.reposition();\r\n\r\n // Regular inputs\r\n readonly appearance = input<PshControlAppearance>(this.config.appearance ?? 'solid');\r\n readonly color = input<DropdownColor>(this.config.color ?? 'primary');\r\n readonly size = input<DropdownSize>(this.config.size ?? 'medium');\r\n readonly placement = input<DropdownPlacement>(this.config.placement ?? 'bottom-start');\r\n readonly items = input<DropdownItem<T>[]>([]);\r\n readonly labelInput = input<string | undefined>(undefined, { alias: 'label' });\r\n readonly label = computed(\r\n () => this.labelInput() ?? pshResolveConfigValue(this.config.label) ?? 'Dropdown Menu',\r\n );\r\n readonly icon = input<string>();\r\n readonly ariaLabel = input<string>();\r\n readonly iconOnly = input<boolean>(this.config.iconOnly ?? false);\r\n readonly iconOnlyText = input<string>();\r\n\r\n // Model inputs\r\n readonly disabled = input(this.config.disabled ?? false);\r\n\r\n // State\r\n private readonly isOpenSignal = signal(false);\r\n private readonly selectedItemSignal = signal<DropdownItem<T> | null>(null);\r\n /**\r\n * Which item holds focus. Read by the template for the roving tabindex: a `role=\"menu\"`\r\n * has one tab stop, and Tab leaves the menu rather than walking its items.\r\n */\r\n protected readonly focusedItemIndex = signal(-1);\r\n\r\n // Placement actually rendered, after viewport collision/flip. Mirrors the\r\n // `placement` input while closed; recomputed against the viewport on open.\r\n protected readonly resolvedPlacement = signal<DropdownPlacement>('bottom-start');\r\n\r\n // Outputs\r\n selected = output<DropdownItem<T>>();\r\n opened = output<void>();\r\n closed = output<void>();\r\n\r\n // Computed values\r\n readonly isOpen = computed(() => this.isOpenSignal());\r\n readonly selectedItem = computed(() => this.selectedItemSignal());\r\n\r\n readonly isIconOnly = computed(() => this.iconOnly() && !!this.icon());\r\n\r\n readonly computedAriaLabel = computed(() => {\r\n if (this.isIconOnly()) {\r\n return this.iconOnlyText() || this.ariaLabel() || 'Toggle dropdown menu';\r\n }\r\n return this.ariaLabel() || 'Toggle dropdown menu';\r\n });\r\n\r\n readonly state = computed(() => this.getState());\r\n\r\n private getState(): string {\r\n if (this.disabled()) return 'disabled';\r\n if (this.isOpen()) return 'open';\r\n return 'closed';\r\n }\r\n\r\n constructor() {\r\n // Close on outside click. Clicks inside the menu are stopped at the menu\r\n // (stopPropagation); as a safety net for the teleported panel we also ignore\r\n // clicks whose target is inside it here.\r\n const clickOutside = inject(PshClickOutsideDirective);\r\n const sub = clickOutside.pshClickOutside.subscribe(event => {\r\n const target = event.target as Node | null;\r\n if (target && this.portalRef?.panel.contains(target)) return;\r\n this.close();\r\n });\r\n inject(DestroyRef).onDestroy(() => {\r\n sub.unsubscribe();\r\n this.closePanel();\r\n });\r\n }\r\n\r\n private openPanel(): void {\r\n if (!this.isBrowser || this.portalRef) return;\r\n const tpl = this.menuTpl();\r\n if (!tpl) return;\r\n this.portalRef = this.portal.attach(tpl, this.viewContainer);\r\n this.reposition();\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n // Registered outside Angular: a capture-phase scroll listener fires on every scroll of\r\n // every ancestor, and each one triggered a full change-detection pass. Repositioning\r\n // writes to the DOM and to a signal, and a signal write schedules its own refresh — the\r\n // zone was doing the work twice.\r\n this.zone.runOutsideAngular(() => {\r\n view?.addEventListener('scroll', this.repositionHandler, true);\r\n view?.addEventListener('resize', this.repositionHandler);\r\n });\r\n }\r\n\r\n private closePanel(): void {\r\n if (this.focusTimeout !== null) {\r\n clearTimeout(this.focusTimeout);\r\n this.focusTimeout = null;\r\n }\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n view?.removeEventListener('scroll', this.repositionHandler, true);\r\n view?.removeEventListener('resize', this.repositionHandler);\r\n this.portalRef?.detach();\r\n this.portalRef = null;\r\n this.resolvedPlacement.set(this.placement());\r\n }\r\n\r\n private reposition(): void {\r\n if (!this.portalRef) return;\r\n const host = this.elementRef.nativeElement as HTMLElement;\r\n const trigger = host.querySelector('.psh-dropdown-trigger') as HTMLElement | null;\r\n if (!trigger) return;\r\n\r\n const placement = this.overlayPosition.flipPlacement(trigger, this.placement(), {\r\n overlayHeight: this.portalRef.panel.offsetHeight,\r\n overlayWidth: this.portalRef.panel.offsetWidth,\r\n }) as DropdownPlacement;\r\n this.resolvedPlacement.set(placement);\r\n this.portalRef.positionByPlacement(trigger, placement, 4);\r\n }\r\n\r\n toggleDropdown(): void {\r\n if (!this.disabled()) {\r\n event?.stopPropagation();\r\n this.isOpenSignal.update(v => !v);\r\n if (this.isOpen()) {\r\n this.focusedItemIndex.set(0);\r\n this.opened.emit();\r\n this.openPanel();\r\n } else {\r\n this.focusedItemIndex.set(-1);\r\n this.restoreFocusToTrigger();\r\n this.closePanel();\r\n this.closed.emit();\r\n }\r\n }\r\n }\r\n\r\n selectItem(item: DropdownItem<T>): void {\r\n if (!item.disabled) {\r\n this.selectedItemSignal.set(item);\r\n this.selected.emit(item);\r\n this.close();\r\n }\r\n }\r\n\r\n close(): void {\r\n if (this.isOpen()) {\r\n this.isOpenSignal.set(false);\r\n this.focusedItemIndex.set(-1);\r\n this.restoreFocusToTrigger();\r\n this.closePanel();\r\n this.closed.emit();\r\n }\r\n }\r\n\r\n handleTriggerKeyDown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.toggleDropdown();\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.focusNextItem();\r\n }\r\n break;\r\n\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n if (!this.isOpen()) {\r\n this.toggleDropdown();\r\n } else {\r\n this.focusPreviousItem();\r\n }\r\n break;\r\n\r\n case 'Escape':\r\n if (this.isOpen()) {\r\n event.preventDefault();\r\n this.close();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n handleItemKeyDown(event: KeyboardEvent, item: DropdownItem<T>, _index: number): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.selectItem(item);\r\n break;\r\n\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.focusNextItem();\r\n break;\r\n\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.focusPreviousItem();\r\n break;\r\n\r\n case 'Home':\r\n event.preventDefault();\r\n this.focusFirstItem();\r\n break;\r\n\r\n case 'End':\r\n event.preventDefault();\r\n this.focusLastItem();\r\n break;\r\n\r\n case 'Escape':\r\n event.preventDefault();\r\n this.close();\r\n break;\r\n\r\n case 'Tab':\r\n this.close();\r\n break;\r\n }\r\n }\r\n\r\n private focusNextItem(): void {\r\n const items = this.items();\r\n if (items.length === 0) return;\r\n\r\n const currentIndex = this.focusedItemIndex();\r\n let nextIndex = currentIndex + 1;\r\n\r\n while (nextIndex < items.length && items[nextIndex]?.disabled) {\r\n nextIndex++;\r\n }\r\n\r\n if (nextIndex >= items.length) {\r\n nextIndex = 0;\r\n while (nextIndex < items.length && items[nextIndex]?.disabled) {\r\n nextIndex++;\r\n }\r\n }\r\n\r\n if (nextIndex < items.length) {\r\n this.focusedItemIndex.set(nextIndex);\r\n this.focusItemAtIndex(nextIndex);\r\n }\r\n }\r\n\r\n private focusPreviousItem(): void {\r\n const items = this.items();\r\n if (items.length === 0) return;\r\n\r\n const currentIndex = this.focusedItemIndex();\r\n let previousIndex = currentIndex - 1;\r\n\r\n while (previousIndex >= 0 && items[previousIndex]?.disabled) {\r\n previousIndex--;\r\n }\r\n\r\n if (previousIndex < 0) {\r\n previousIndex = items.length - 1;\r\n while (previousIndex >= 0 && items[previousIndex]?.disabled) {\r\n previousIndex--;\r\n }\r\n }\r\n\r\n if (previousIndex >= 0) {\r\n this.focusedItemIndex.set(previousIndex);\r\n this.focusItemAtIndex(previousIndex);\r\n }\r\n }\r\n\r\n private focusFirstItem(): void {\r\n const items = this.items();\r\n let index = 0;\r\n while (index < items.length && items[index]?.disabled) {\r\n index++;\r\n }\r\n if (index < items.length) {\r\n this.focusedItemIndex.set(index);\r\n this.focusItemAtIndex(index);\r\n }\r\n }\r\n\r\n private focusLastItem(): void {\r\n const items = this.items();\r\n let index = items.length - 1;\r\n while (index >= 0 && items[index]?.disabled) {\r\n index--;\r\n }\r\n if (index >= 0) {\r\n this.focusedItemIndex.set(index);\r\n this.focusItemAtIndex(index);\r\n }\r\n }\r\n\r\n private focusItemAtIndex(index: number): void {\r\n if (this.focusTimeout !== null) clearTimeout(this.focusTimeout);\r\n\r\n // The handle is kept so a queued focus cannot run against a panel that has since\r\n // been detached, or after the component itself is gone.\r\n this.focusTimeout = setTimeout(() => {\r\n this.focusTimeout = null;\r\n const item = this.portalRef?.panel.querySelector(\r\n `[data-dropdown-item-index=\"${index}\"]`,\r\n ) as HTMLElement | undefined;\r\n item?.focus();\r\n });\r\n }\r\n\r\n /**\r\n * Returns focus to the trigger when the panel holding it goes away, so Escape or a\r\n * selection does not drop the user back on <body>. Only when focus is genuinely inside\r\n * the panel: closing from an outside click must not steal focus from whatever the user\r\n * just clicked. Must run before closePanel() detaches the portal.\r\n */\r\n private restoreFocusToTrigger(): void {\r\n if (!this.isBrowser || !this.portalRef) return;\r\n\r\n const host = this.elementRef.nativeElement as HTMLElement;\r\n const active = host.ownerDocument.activeElement;\r\n if (!active || !this.portalRef.panel.contains(active)) return;\r\n\r\n const trigger = host.querySelector('.psh-dropdown-trigger') as HTMLElement | null;\r\n trigger?.focus();\r\n }\r\n\r\n}","<div\r\n class=\"psh-dropdown-container\"\r\n [class]=\"'psh-' + size()\"\r\n [class.psh-open]=\"isOpen()\"\r\n [class.psh-disabled]=\"disabled()\"\r\n [class.psh-icon-only]=\"isIconOnly()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <button\r\n class=\"psh-dropdown-trigger\"\r\n [class]=\"'psh-' + appearance()\"\r\n [class.psh-primary]=\"color() === 'primary'\"\r\n [class.psh-secondary]=\"color() === 'secondary'\"\r\n [class.psh-success]=\"color() === 'success'\"\r\n [class.psh-warning]=\"color() === 'warning'\"\r\n [class.psh-danger]=\"color() === 'danger'\"\r\n (click)=\"toggleDropdown()\"\r\n (keydown)=\"handleTriggerKeyDown($event)\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-haspopup]=\"'menu'\"\r\n type=\"button\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <span class=\"psh-trigger-content\">\r\n @if (isIconOnly()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n @if (icon()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n <ng-content select=\"[psh-dropdown-trigger]\">\r\n @if (label()) {\r\n {{ label() }}\r\n }\r\n </ng-content>\r\n <i\r\n class=\"ph ph-caret-down psh-trigger-arrow\"\r\n [class.psh-open]=\"isOpen()\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n }\r\n </span>\r\n </button>\r\n\r\n <ng-template #menuTpl>\r\n <!-- stopPropagation only (keeps clicks inside the menu from closing it); not a user interaction. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <div\r\n class=\"psh-dropdown-menu\"\r\n [class]=\"'psh-' + resolvedPlacement()\"\r\n role=\"menu\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <ng-content select=\"[psh-dropdown-menu]\">\r\n @for (item of items(); track item.value; let i = $index) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-dropdown-item\"\r\n [class.psh-disabled]=\"item.disabled\"\r\n [class.psh-active]=\"selectedItem() === item\"\r\n [attr.data-dropdown-item-index]=\"i\"\r\n (click)=\"selectItem(item)\"\r\n (keydown)=\"handleItemKeyDown($event, item, i)\"\r\n role=\"menuitem\"\r\n [attr.aria-disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"i === focusedItemIndex() ? 0 : -1\"\r\n >\r\n @if (item.icon) {\r\n <i class=\"ph ph-{{ item.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"psh-item-label\">{{ item.content }}</span>\r\n </button>\r\n }\r\n </ng-content>\r\n </div>\r\n </ng-template>\r\n</div>","import { PshFieldAppearance } from '../../types/semantic.types';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n computed,\r\n effect,\r\n afterRenderEffect,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\r\nimport type { FormValueControl } from '@angular/forms/signals';\r\nimport { pshIsEmptyValue, pshRequiredError } from '../../utils/required-validator';\r\nimport { pshJoinAriaIds } from '../../utils/aria';\r\nimport {\r\n TEXTAREA_LABELS,\r\n TextareaResize,\r\n TextareaSize,\r\n } from './textarea.types';\r\nimport { TEXTAREA_CONFIG } from './textarea.tokens';\r\n\r\n@Component({\r\n selector: 'psh-textarea',\r\n templateUrl: './textarea.component.html',\r\n styleUrls: ['./textarea.component.css'],\r\n providers: [\r\n { provide: NG_VALIDATORS, useExisting: PshTextareaComponent, multi: true },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshTextareaComponent,\r\n multi: true,\r\n },\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.psh-full-width]': 'fullWidth()',\r\n '[class.psh-small]': 'size() === \"small\"',\r\n '[class.psh-large]': 'size() === \"large\"',\r\n '[class.psh-outline]': 'appearance() === \"outline\"',\r\n '[class.psh-solid]': 'appearance() === \"solid\"',\r\n '[class.psh-error]': 'hasError()',\r\n '[class.psh-success]': '!!success() && !hasError()',\r\n '[class.psh-disabled]': 'disabled()',\r\n '[class.psh-readonly]': 'readonly()',\r\n '[class.psh-focused]': 'isFocused()',\r\n '[class.psh-auto-size]': 'autoSize()',\r\n '[class.psh-over-limit]': 'isOverLimit()',\r\n },\r\n})\r\nexport class PshTextareaComponent\r\n implements ControlValueAccessor, FormValueControl<string>, Validator\r\n{\r\n private readonly config = inject(TEXTAREA_CONFIG);\r\n\r\n private readonly elementRef = inject(ElementRef<HTMLElement>);\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n\r\n private static nextId = 0;\r\n readonly textareaId = `psh-textarea-${PshTextareaComponent.nextId++}`;\r\n\r\n readonly value = model<string>('');\r\n readonly disabled = model<boolean>(false);\r\n readonly readonly = input<boolean>(false);\r\n readonly touched = model<boolean>(false);\r\n/**\r\n * Emitted when the user finishes interacting with the control.\r\n *\r\n * Part of `FormUiControl`: the `Field` directive listens to **this**, not to\r\n * `touchedChange`, to mark the bound field as touched.\r\n */\r\n readonly touch = output<void>();\r\n\r\n readonly appearance = input<PshFieldAppearance>(this.config.appearance ?? 'outline');\r\n readonly size = input<TextareaSize>(this.config.size ?? 'medium');\r\n readonly resize = input<TextareaResize>(this.config.resize ?? 'vertical');\r\n readonly rows = input<number>(this.config.rows ?? 4);\r\n readonly maxLength = input<number | undefined>(undefined);\r\n readonly autoSize = input<boolean>(this.config.autoSize ?? false);\r\n readonly showCharacterCount = input<boolean>(this.config.showCharacterCount ?? false);\r\n readonly fullWidth = input<boolean>(this.config.fullWidth ?? false);\r\n readonly required = input<boolean>(this.config.required ?? false);\r\n readonly showLabel = input<boolean>(this.config.showLabel ?? true);\r\n readonly label = input<string>(this.config.label ?? '');\r\n readonly placeholder = input<string>(this.config.placeholder ?? '');\r\n readonly hint = input<string | null | undefined>(null);\r\n\r\n /**\r\n * Extra ids for `aria-describedby`. **Merged** with the control's own — the id of its error,\r\n * success or hint message — never replacing them.\r\n */\r\n readonly ariaDescribedBy = input<string>();\r\n\r\n /**\r\n * Ids of the elements that name this control, for the cases a visible `<label>` cannot\r\n * cover. Merged with anything the control already points at.\r\n */\r\n readonly ariaLabelledBy = input<string>();\r\n readonly error = input<string | null | undefined>(null);\r\n readonly success = input<string | null | undefined>(null);\r\n readonly ariaLabel = input<string | null>(null);\r\n\r\n private readonly focusedSignal = signal<boolean>(false);\r\n\r\n focused = output<void>();\r\n blurred = output<void>();\r\n\r\n private readonly textareaRef = viewChild<ElementRef<HTMLTextAreaElement>>('textareaRef');\r\n\r\n /** Whether the control currently has focus. A state readout; the event is `focused`. */\r\n readonly isFocused = computed(() => this.focusedSignal());\r\n\r\n readonly effectiveResize = computed<TextareaResize>(() =>\r\n this.autoSize() ? 'none' : this.resize(),\r\n );\r\n\r\n readonly characterCount = computed(() => ({\r\n current: (this.value() ?? '').length,\r\n max: this.maxLength(),\r\n }));\r\n\r\n readonly isOverLimit = computed(() => {\r\n const max = this.maxLength();\r\n if (max === undefined) return false;\r\n return this.characterCount().current > max;\r\n });\r\n\r\n readonly isAtLimit = computed(() => {\r\n const max = this.maxLength();\r\n if (max === undefined) return false;\r\n return this.characterCount().current >= max;\r\n });\r\n\r\n readonly shouldShowCount = computed(\r\n () => this.showCharacterCount() || this.maxLength() !== undefined,\r\n );\r\n\r\n readonly hasError = computed(\r\n () => !!this.error() || this.isOverLimit(),\r\n );\r\n\r\n readonly computedAriaLabel = computed(\r\n () => this.ariaLabel() || this.label() || this.placeholder() || null,\r\n );\r\n\r\n readonly describedBy = computed(() => {\r\n const own = this.error()\r\n ? `${this.textareaId}-error`\r\n : this.success()\r\n ? `${this.textareaId}-success`\r\n : this.hint()\r\n ? `${this.textareaId}-hint`\r\n : null;\r\n return pshJoinAriaIds(own, this.ariaDescribedBy());\r\n });\r\n\r\n readonly state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.readonly()) return 'readonly';\r\n if (this.hasError()) return 'error';\r\n if (this.success()) return 'success';\r\n if (this.isFocused()) return 'focused';\r\n return 'default';\r\n });\r\n\r\n readonly characterCountSuffix = input<string | undefined>(undefined);\r\n\r\n /** Word after the count. A field before 7.0.0, so no application could translate it. */\r\n readonly characterCountLabel = computed(\r\n () =>\r\n this.characterCountSuffix() ??\r\n pshResolveConfigValue(this.config.characterCountSuffix) ??\r\n TEXTAREA_LABELS.characterCountSuffix,\r\n );\r\n\r\n constructor() {\r\n // A value change revalidates by itself; a change to `required` does not — Angular has\r\n // no reason to suspect the validator's answer moved. This is what the callback is for.\r\n effect(() => {\r\n this.required();\r\n this.onValidatorChange();\r\n });\r\n\r\n // After render, not during it: auto-sizing measures `scrollHeight` and then writes\r\n // `style.height`, which is a DOM read followed by a DOM write. As a plain `effect` it ran\r\n // before the DOM had caught up with the new value, hence the `queueMicrotask` — a hand-\r\n // rolled version of what `afterRenderEffect` does properly.\r\n afterRenderEffect(() => {\r\n this.value();\r\n this.rows();\r\n if (this.autoSize()) {\r\n this.applyAutoSize();\r\n }\r\n });\r\n }\r\n\r\n private onChange: (value: string) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n private onValidatorChange: () => void = () => {};\r\n\r\n writeValue(value: unknown): void {\r\n const safeValue = typeof value === 'string' ? value : '';\r\n this.value.set(safeValue);\r\n this.cdr.markForCheck();\r\n if (this.autoSize()) {\r\n queueMicrotask(() => this.applyAutoSize());\r\n }\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.set(isDisabled);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n handleInput(event: Event): void {\r\n const target = event.target as HTMLTextAreaElement;\r\n const newValue = target.value;\r\n this.value.set(newValue);\r\n this.onChange(newValue);\r\n }\r\n\r\n handleFocus(): void {\r\n this.focusedSignal.set(true);\r\n this.focused.emit();\r\n }\r\n\r\n handleBlur(): void {\r\n this.focusedSignal.set(false);\r\n this.touched.set(true);\r\n this.onTouched();\r\n this.touch.emit();\r\n this.blurred.emit();\r\n }\r\n\r\n focus(): void {\r\n this.textareaRef()?.nativeElement.focus();\r\n }\r\n\r\n private applyAutoSize(): void {\r\n const el = this.textareaRef()?.nativeElement;\r\n if (!el) return;\r\n el.style.height = 'auto';\r\n el.style.height = `${el.scrollHeight}px`;\r\n }\r\n\r\n protected hasLabelContent(): boolean {\r\n return !!this.elementRef.nativeElement.querySelector('[psh-textarea-label]');\r\n }\r\n\r\n /**\r\n * Makes `required` a real constraint rather than an asterisk.\r\n *\r\n * Re-run whenever `required` or the value changes: `registerOnValidatorChange` gives us\r\n * the callback that tells Angular to revalidate, and an effect fires it.\r\n */\r\n validate(): ValidationErrors | null {\r\n return pshRequiredError(this.required(), pshIsEmptyValue(this.value()));\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.onValidatorChange = fn;\r\n }\r\n\r\n}\r\n","<div class=\"psh-textarea-container\">\r\n @if (showLabel()) {\r\n <!-- label[for] delegates focus to its control natively; the click handler is a convenience. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <label\r\n class=\"psh-textarea-label\"\r\n [for]=\"textareaId\"\r\n (click)=\"focus()\"\r\n [class.psh-required]=\"required()\"\r\n >\r\n <ng-content select=\"[psh-textarea-label]\"></ng-content>\r\n @if (!hasLabelContent()) {\r\n {{ label() }}\r\n }\r\n </label>\r\n }\r\n\r\n <div class=\"psh-textarea-wrapper\">\r\n <textarea\r\n #textareaRef\r\n [id]=\"textareaId\"\r\n [rows]=\"rows()\"\r\n [attr.placeholder]=\"placeholder()\"\r\n [attr.maxlength]=\"maxLength() ?? null\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n [attr.data-state]=\"state()\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [required]=\"required()\"\r\n [value]=\"value()\"\r\n [style.resize]=\"effectiveResize()\"\r\n (input)=\"handleInput($event)\"\r\n (focus)=\"handleFocus()\"\r\n (blur)=\"handleBlur()\"\r\n ></textarea>\r\n </div>\r\n\r\n @if (error() || success() || hint() || shouldShowCount()) {\r\n <div class=\"psh-textarea-footer\">\r\n <div class=\"psh-textarea-messages\">\r\n @if (error()) {\r\n <div [id]=\"textareaId + '-error'\" class=\"psh-textarea-error\" role=\"alert\">\r\n <ng-content select=\"[psh-textarea-error]\">\r\n {{ error() }}\r\n </ng-content>\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"textareaId + '-success'\" class=\"psh-textarea-success\" role=\"status\">\r\n <ng-content select=\"[psh-textarea-success]\">\r\n {{ success() }}\r\n </ng-content>\r\n </div>\r\n } @else if (hint()) {\r\n <div [id]=\"textareaId + '-hint'\" class=\"psh-textarea-hint\">\r\n <ng-content select=\"[psh-textarea-hint]\">\r\n {{ hint() }}\r\n </ng-content>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (shouldShowCount()) {\r\n <div\r\n class=\"psh-textarea-count\"\r\n [class.psh-at-limit]=\"isAtLimit() && !isOverLimit()\"\r\n [class.psh-over-limit]=\"isOverLimit()\"\r\n aria-live=\"polite\"\r\n >\r\n {{ characterCount().current }}@if (maxLength() !== undefined) {\r\n <span>/{{ maxLength() }}</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { MenuItem, MenuMode, MenuVariant, MenuItemContext } from './menu.types';\r\nimport { PshTooltipComponent } from '../tooltip/tooltip.component';\r\nimport { MENU_CONFIG } from './menu.tokens';\r\n\r\n@Component({\r\n selector: 'psh-menu',\r\n imports: [NgTemplateOutlet, PshTooltipComponent],\r\n templateUrl: './menu.component.html',\r\n styleUrls: ['./menu.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshMenuComponent<T = string> {\r\n private readonly config = inject(MENU_CONFIG);\r\n\r\n private readonly elementRef = inject(ElementRef<HTMLElement>);\r\n private focusTimeout: ReturnType<typeof setTimeout> | null = null;\r\n\r\n readonly mode = input<MenuMode>(this.config.mode ?? 'vertical');\r\n readonly variant = input<MenuVariant>(this.config.variant ?? 'default');\r\n readonly collapsible = input(this.config.collapsible ?? false);\r\n readonly ariaLabels = input<Record<string, string>>({\r\n disabled: 'Disabled',\r\n submenu: 'Submenu',\r\n expand: 'Expand menu',\r\n collapse: 'Collapse menu'\r\n });\r\n\r\n readonly items = input.required<MenuItem<T>[]>();\r\n\r\n /**\r\n * Replaces the content of every menu item.\r\n *\r\n * `MenuItem` described an item completely — icon, content, badge — and the component had no\r\n * `ng-content`, so anything else meant `::ng-deep`.\r\n */\r\n readonly itemTemplate = input<TemplateRef<MenuItemContext<T>>>();\r\n\r\n /**\r\n * Name of the navigation landmark. There was none, so a page with a sidebar menu and a\r\n * top menu announced two landmarks both called \"navigation\".\r\n */\r\n readonly ariaLabel = input<string>();\r\n\r\n protected itemContext(item: MenuItem<T>, index: number, withLabel: boolean): MenuItemContext<T> {\r\n return { $implicit: item, index, withLabel, expanded: this.isExpanded(item) };\r\n }\r\n\r\n readonly collapsed = model(false);\r\n readonly expandedItemIds = model<string[]>([]);\r\n\r\n itemClicked = output<MenuItem<T>>();\r\n submenuToggled = output<{ item: MenuItem<T>; expanded: boolean }>();\r\n\r\n protected readonly expandedItemsSet = computed(() => new Set(this.expandedItemIds()));\r\n\r\n readonly state = computed(() => this.getState());\r\n\r\n readonly showTooltip = computed(() => this.collapsed() && this.mode() === 'vertical');\r\n\r\n constructor() {\r\n inject(DestroyRef).onDestroy(() => {\r\n if (this.focusTimeout !== null) clearTimeout(this.focusTimeout);\r\n });\r\n }\r\n\r\n private getState(): string {\r\n if (this.collapsed()) return 'collapsed';\r\n if (this.collapsible()) return 'collapsible';\r\n return this.mode();\r\n }\r\n\r\n handleItemClick(item: MenuItem<T>, event: Event, isChild: boolean): void {\r\n if (isChild) {\r\n event.stopPropagation();\r\n }\r\n this.toggleItem(item, event);\r\n }\r\n\r\n toggleItem(item: MenuItem<T>, event?: Event): void {\r\n if (item.disabled) return;\r\n\r\n if (item.children?.length) {\r\n event?.preventDefault();\r\n this.toggleItemExpansion(item.id);\r\n const expanded = this.expandedItemsSet().has(item.id);\r\n this.submenuToggled.emit({ item, expanded });\r\n } else {\r\n this.itemClicked.emit(item);\r\n }\r\n }\r\n\r\n toggleCollapse(): void {\r\n if (this.collapsible()) {\r\n this.collapsed.update((v) => !v);\r\n }\r\n }\r\n\r\n isExpanded(item: MenuItem<T>): boolean {\r\n return this.expandedItemsSet().has(item.id);\r\n }\r\n\r\n expandItem(itemId: string): void {\r\n const current = this.expandedItemIds();\r\n if (!current.includes(itemId)) {\r\n this.expandedItemIds.set([...current, itemId]);\r\n }\r\n }\r\n\r\n collapseItem(itemId: string): void {\r\n const current = this.expandedItemIds();\r\n if (current.includes(itemId)) {\r\n this.expandedItemIds.set(current.filter(id => id !== itemId));\r\n }\r\n }\r\n\r\n toggleItemExpansion(itemId: string): void {\r\n const current = this.expandedItemIds();\r\n if (current.includes(itemId)) {\r\n this.expandedItemIds.set(current.filter(id => id !== itemId));\r\n } else {\r\n this.expandedItemIds.set([...current, itemId]);\r\n }\r\n }\r\n\r\n expandAll(): void {\r\n const allIds = this.collectItemIdsWithChildren(this.items());\r\n this.expandedItemIds.set(allIds);\r\n }\r\n\r\n collapseAll(): void {\r\n this.expandedItemIds.set([]);\r\n }\r\n\r\n private collectItemIdsWithChildren(items: MenuItem<T>[]): string[] {\r\n const ids: string[] = [];\r\n for (const item of items) {\r\n if (item.children?.length) {\r\n ids.push(item.id);\r\n ids.push(...this.collectItemIdsWithChildren(item.children));\r\n }\r\n }\r\n return ids;\r\n }\r\n\r\n getAriaLabel(item: MenuItem<T>): string {\r\n const base = item.content;\r\n if (item.disabled) {\r\n return `${base} (${this.ariaLabels()['disabled']})`;\r\n }\r\n if (item.children?.length) {\r\n return `${base} (${this.ariaLabels()['submenu']})`;\r\n }\r\n return base;\r\n }\r\n\r\n handleKeyDown(event: KeyboardEvent, item: MenuItem<T>, index: number): void {\r\n if (item.disabled) return;\r\n\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.toggleItem(item, event);\r\n break;\r\n\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.focusNextItem(index);\r\n break;\r\n\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.focusPreviousItem(index);\r\n break;\r\n\r\n case 'ArrowRight':\r\n if (item.children?.length && !this.isExpanded(item)) {\r\n event.preventDefault();\r\n this.toggleItem(item, event);\r\n }\r\n break;\r\n\r\n case 'ArrowLeft':\r\n if (item.children?.length && this.isExpanded(item)) {\r\n event.preventDefault();\r\n this.toggleItem(item, event);\r\n }\r\n break;\r\n\r\n case 'Home':\r\n event.preventDefault();\r\n this.focusFirstItem();\r\n break;\r\n\r\n case 'End':\r\n event.preventDefault();\r\n this.focusLastItem();\r\n break;\r\n\r\n case 'Escape':\r\n if (this.collapsible() && !this.collapsed()) {\r\n event.preventDefault();\r\n this.toggleCollapse();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private focusNextItem(currentIndex: number): void {\r\n const items = this.items();\r\n const nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\r\n this.focusItemAtIndex(nextIndex, 1);\r\n }\r\n\r\n private focusPreviousItem(currentIndex: number): void {\r\n const items = this.items();\r\n const previousIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\r\n this.focusItemAtIndex(previousIndex, -1);\r\n }\r\n\r\n private focusFirstItem(): void {\r\n this.focusItemAtIndex(0, 1);\r\n }\r\n\r\n private focusLastItem(): void {\r\n this.focusItemAtIndex(this.items().length - 1, -1);\r\n }\r\n\r\n private focusItemAtIndex(index: number, direction: 1 | -1): void {\r\n const items = this.items();\r\n if (index < 0) {\r\n index = items.length - 1;\r\n } else if (index >= items.length) {\r\n index = 0;\r\n }\r\n\r\n const item = items[index];\r\n if (item && !item.divider && !item.disabled) {\r\n if (this.focusTimeout !== null) clearTimeout(this.focusTimeout);\r\n\r\n // Handle kept so the callback cannot run against a detached DOM after the menu is\r\n // destroyed. Scoped to this host too: a document-wide query matches the item with\r\n // the same id in any other menu instance on the page.\r\n this.focusTimeout = setTimeout(() => {\r\n this.focusTimeout = null;\r\n const host = this.elementRef.nativeElement as HTMLElement;\r\n const link = host.querySelector(`[data-menu-item-id=\"${item.id}\"]`) as HTMLElement | null;\r\n link?.focus();\r\n });\r\n } else {\r\n const nextIndex = index + direction;\r\n if (nextIndex !== index) {\r\n this.focusItemAtIndex(nextIndex, direction);\r\n }\r\n }\r\n }\r\n}","<nav\r\n class=\"psh-menu\"\r\n [class.psh-vertical]=\"mode() === 'vertical'\"\r\n [class.psh-horizontal]=\"mode() === 'horizontal'\"\r\n [class.psh-compact]=\"variant() === 'compact'\"\r\n [class.psh-expanded]=\"variant() === 'expanded'\"\r\n [class.psh-collapsed]=\"collapsed()\"\r\n role=\"navigation\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [attr.aria-label]=\"'Navigation menu'\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @if (collapsible()) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-menu-collapse-button\"\r\n (click)=\"toggleCollapse()\"\r\n [attr.aria-expanded]=\"!collapsed()\"\r\n [attr.aria-label]=\"collapsed() ? ariaLabels()['expand'] : ariaLabels()['collapse']\"\r\n >\r\n <i class=\"ph ph-caret-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n <ul class=\"psh-menu-list\">\r\n @for (item of items(); track item.id; let i = $index) {\r\n @if (item.divider) {\r\n <li class=\"psh-menu-divider\" aria-hidden=\"true\"></li>\r\n } @else {\r\n <li\r\n class=\"psh-menu-item\"\r\n [class.psh-has-children]=\"item.children?.length\"\r\n [class.psh-expanded]=\"isExpanded(item)\"\r\n [class.psh-disabled]=\"item.disabled\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"itemTpl; context: { $implicit: item, index: i, isChild: false }\"\r\n ></ng-container>\r\n\r\n @if (item.children?.length) {\r\n <ul\r\n class=\"psh-submenu\"\r\n [attr.aria-label]=\"item.content + ' submenu'\"\r\n >\r\n @for (child of item.children; track child.id) {\r\n <li class=\"psh-menu-item\">\r\n @if (child.path) {\r\n @if (showTooltip()) {\r\n <psh-tooltip [content]=\"child.content\" position=\"right\" [showDelay]=\"100\" [hideDelay]=\"0\">\r\n <a\r\n class=\"psh-menu-link\"\r\n [attr.href]=\"child.path\"\r\n [attr.data-menu-item-id]=\"child.id\"\r\n [class.psh-active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n title=\"\"\r\n (click)=\"toggleItem(child, $event)\"\r\n (keydown.enter)=\"toggleItem(child, $event)\"\r\n (keydown.space)=\"toggleItem(child, $event)\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n <span class=\"psh-menu-child-dot\" aria-hidden=\"true\"></span>\r\n }\r\n <span class=\"psh-menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"psh-menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </a>\r\n </psh-tooltip>\r\n } @else {\r\n <a\r\n class=\"psh-menu-link\"\r\n [attr.href]=\"child.path\"\r\n [attr.data-menu-item-id]=\"child.id\"\r\n [class.psh-active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n (click)=\"toggleItem(child, $event)\"\r\n (keydown.enter)=\"toggleItem(child, $event)\"\r\n (keydown.space)=\"toggleItem(child, $event)\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"psh-menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"psh-menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </a>\r\n }\r\n } @else {\r\n @if (showTooltip()) {\r\n <psh-tooltip [content]=\"child.content\" position=\"right\" [showDelay]=\"100\" [hideDelay]=\"0\">\r\n <button\r\n type=\"button\"\r\n class=\"psh-menu-link\"\r\n [attr.data-menu-item-id]=\"child.id\"\r\n [class.psh-active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n title=\"\"\r\n (click)=\"toggleItem(child, $event)\"\r\n (keydown.enter)=\"toggleItem(child, $event)\"\r\n (keydown.space)=\"toggleItem(child, $event)\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n [disabled]=\"child.disabled\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n <span class=\"psh-menu-child-dot\" aria-hidden=\"true\"></span>\r\n }\r\n <span class=\"psh-menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"psh-menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </button>\r\n </psh-tooltip>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"psh-menu-link\"\r\n [attr.data-menu-item-id]=\"child.id\"\r\n [class.psh-active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n (click)=\"toggleItem(child, $event)\"\r\n (keydown.enter)=\"toggleItem(child, $event)\"\r\n (keydown.space)=\"toggleItem(child, $event)\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n [disabled]=\"child.disabled\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"psh-menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"psh-menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </button>\r\n }\r\n }\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n }\r\n </ul>\r\n</nav>\r\n\r\n<ng-template #itemTpl let-item let-index=\"index\" let-isChild=\"isChild\">\r\n @if (showTooltip()) {\r\n <psh-tooltip\r\n class=\"psh-menu-tooltip-wrapper\"\r\n [content]=\"item.content\"\r\n position=\"right\"\r\n [showDelay]=\"300\"\r\n [hideDelay]=\"0\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"itemContentTpl; context: { $implicit: item, index: index, isChild: isChild, withLabel: false }\"\r\n ></ng-container>\r\n </psh-tooltip>\r\n } @else {\r\n <ng-container\r\n *ngTemplateOutlet=\"itemContentTpl; context: { $implicit: item, index: index, isChild: isChild, withLabel: true }\"\r\n ></ng-container>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #itemContentTpl let-item let-index=\"index\" let-isChild=\"isChild\" let-withLabel=\"withLabel\">\r\n @if (item.path) {\r\n <a\r\n class=\"psh-menu-link\"\r\n [attr.href]=\"item.path\"\r\n [attr.data-menu-item-id]=\"item.id\"\r\n [class.psh-active]=\"item.active\"\r\n [attr.aria-disabled]=\"item.disabled\"\r\n [attr.aria-expanded]=\"item.children?.length ? isExpanded(item) : null\"\r\n [attr.aria-label]=\"getAriaLabel(item)\"\r\n (click)=\"handleItemClick(item, $event, isChild)\"\r\n (keydown)=\"handleKeyDown($event, item, index)\"\r\n [attr.tabindex]=\"item.disabled ? -1 : 0\"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"itemTemplate() ?? defaultMenuItem\"\r\n [ngTemplateOutletContext]=\"itemContext(item, index, withLabel)\"\r\n ></ng-container>\r\n </a>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"psh-menu-link\"\r\n [attr.data-menu-item-id]=\"item.id\"\r\n [class.psh-active]=\"item.active\"\r\n [attr.aria-disabled]=\"item.disabled\"\r\n [attr.aria-expanded]=\"item.children?.length ? isExpanded(item) : null\"\r\n [attr.aria-label]=\"getAriaLabel(item)\"\r\n (click)=\"handleItemClick(item, $event, isChild)\"\r\n (keydown)=\"handleKeyDown($event, item, index)\"\r\n [attr.tabindex]=\"item.disabled ? -1 : 0\"\r\n [disabled]=\"item.disabled\"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"itemTemplate() ?? defaultMenuItem\"\r\n [ngTemplateOutletContext]=\"itemContext(item, index, withLabel)\"\r\n ></ng-container>\r\n </button>\r\n }\r\n</ng-template>\r\n\r\n<!--\r\n The item's content, in one place rather than two. `itemTemplate` replaces this, and only\r\n this: the surrounding <a>/<button> keeps aria-expanded, the tabindex and\r\n the keyboard handling.\r\n-->\r\n<ng-template #defaultMenuItem let-item let-withLabel=\"withLabel\">\r\n @if (item.icon) {\r\n <i class=\"ph ph-{{ item.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n @if (withLabel) {\r\n <span class=\"psh-menu-label\">{{ item.content }}</span>\r\n }\r\n @if (item.badge) {\r\n <span class=\"psh-menu-badge\" role=\"status\">{{ item.badge }}</span>\r\n }\r\n @if (withLabel && item.children?.length) {\r\n <i\r\n class=\"ph ph-caret-down psh-menu-arrow\"\r\n [class.psh-expanded]=\"isExpanded(item)\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n }\r\n</ng-template>\r\n","import { PshFieldAppearance } from '../../types/semantic.types';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport {\r\n NgZone,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n DestroyRef,\r\n TemplateRef,\r\n ViewContainerRef,\r\n viewChild,\r\n effect\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\r\nimport type { FormValueControl } from '@angular/forms/signals';\r\nimport { PshClickOutsideDirective } from '../../a11y/click-outside.directive';\r\nimport { PshOverlayPositionService } from '../../a11y/overlay-position.service';\r\nimport { PshPortalService, PshPortalRef } from '../../a11y/portal.service';\r\nimport { SelectOption, SelectOptionGroup, SelectSize, SelectOptionContext, SelectOptionView } from './select.types';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\nimport { pshIsEmptyValue, pshRequiredError } from '../../utils/required-validator';\r\nimport { pshJoinAriaIds } from '../../utils/aria';\r\nimport { SELECT_CONFIG } from './select.tokens';\r\n\r\ninterface FlatOption<T> {\r\n option: SelectOption<T>;\r\n effectiveDisabled: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'psh-select',\r\n imports: [NgTemplateOutlet, FormsModule],\r\n templateUrl: './select.component.html',\r\n styleUrls: ['./select.component.css'],\r\n providers: [\r\n { provide: NG_VALIDATORS, useExisting: PshSelectComponent, multi: true },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshSelectComponent,\r\n multi: true\r\n }\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n hostDirectives: [PshClickOutsideDirective],\r\n host: {\r\n '[class.psh-full-width]': 'fullWidth()',\r\n '[class.psh-small]': 'size() === \"small\"',\r\n '[class.psh-large]': 'size() === \"large\"',\r\n '[class.psh-outline]': 'appearance() === \"outline\"',\r\n '[class.psh-solid]': 'appearance() === \"solid\"',\r\n '[class.psh-error]': '!!error()',\r\n '[class.psh-success]': '!!success()',\r\n '[class.psh-disabled]': 'disabled()',\r\n '[class.psh-loading]': 'loading()',\r\n '[attr.aria-expanded]': 'isOpen().toString()',\r\n '[attr.data-state]': 'state()'\r\n }\r\n})\r\nexport class PshSelectComponent<T = unknown> implements ControlValueAccessor, FormValueControl<T | T[] | null>, Validator {\r\n private readonly zone = inject(NgZone);\r\n private readonly config = inject(SELECT_CONFIG);\r\n\r\n private readonly elementRef = inject(ElementRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly overlayPosition = inject(PshOverlayPositionService);\r\n private readonly portal = inject(PshPortalService);\r\n private readonly viewContainer = inject(ViewContainerRef);\r\n\r\n // The options panel, teleported to a body-level overlay layer on open so it\r\n // escapes any ancestor overflow / stacking context (e.g. a modal body).\r\n private readonly panelTpl = viewChild<TemplateRef<unknown>>('panelTpl');\r\n private portalRef: PshPortalRef | null = null;\r\n private readonly repositionHandler = (): void => this.reposition();\r\n\r\n // Side the panel actually opens on, after viewport collision/flip.\r\n protected readonly resolvedSide = signal<'top' | 'bottom'>('bottom');\r\n\r\n protected readonly selectId = pshUniqueId('select');\r\n\r\n readonly value = model<T | T[] | null>(null);\r\n readonly disabled = model<boolean>(false);\r\n readonly touched = model<boolean>(false);\r\n/**\r\n * Emitted when the user finishes interacting with the control.\r\n *\r\n * Part of `FormUiControl`: the `Field` directive listens to **this**, not to\r\n * `touchedChange`, to mark the bound field as touched.\r\n */\r\n readonly touch = output<void>();\r\n\r\n readonly size = input<SelectSize>(this.config.size ?? 'medium');\r\n readonly appearance = input<PshFieldAppearance>(this.config.appearance ?? 'outline');\r\n readonly searchable = input(this.config.searchable ?? false);\r\n readonly multiple = input(false);\r\n readonly clearable = input(this.config.clearable ?? false);\r\n readonly loading = input(false);\r\n readonly fullWidth = input(this.config.fullWidth ?? false);\r\n readonly required = input(false);\r\n\r\n readonly options = input.required<(SelectOption<T> | SelectOptionGroup<T>)[]>();\r\n\r\n /**\r\n * Replaces the content of every option.\r\n *\r\n * The rendering was hard-coded — icon, label, description — so showing an avatar, a badge\r\n * or two columns in an option meant `::ng-deep` into a panel that is teleported to\r\n * `document.body`. The template receives the option, whether it is selected, and whether it\r\n * is disabled.\r\n *\r\n * It replaces the option's *content* only: `role=\"option\"`, the id, `aria-selected` and the\r\n * click stay with the component, so a custom option cannot take the listbox's accessibility\r\n * down with it.\r\n */\r\n readonly optionTemplate = input<TemplateRef<SelectOptionContext<T>>>();\r\n readonly label = input('');\r\n readonly placeholderInput = input<string | undefined>(undefined, { alias: 'placeholder' });\r\n readonly placeholder = computed(\r\n () => this.placeholderInput() ?? pshResolveConfigValue(this.config.placeholder) ?? 'Select an option',\r\n );\r\n readonly multiplePlaceholderInput = input<string | undefined>(undefined, { alias: 'multiplePlaceholder' });\r\n readonly multiplePlaceholder = computed(\r\n () => this.multiplePlaceholderInput() ?? pshResolveConfigValue(this.config.multiplePlaceholder) ?? 'Select options',\r\n );\r\n readonly error = input<string | null | undefined>(null);\r\n readonly success = input<string | null | undefined>(null);\r\n readonly hint = input<string | null | undefined>(null);\r\n\r\n /** Shown when the search matches nothing. Was a literal in the template. */\r\n readonly noResultsTextInput = input<string | undefined>(undefined, { alias: 'noResultsText' });\r\n readonly noResultsText = computed(\r\n () => this.noResultsTextInput() ?? pshResolveConfigValue(this.config.noResultsText) ?? 'No results',\r\n );\r\n\r\n /**\r\n * Extra ids for `aria-describedby`. **Merged** with the control's own — the id of its error,\r\n * success or hint message — never replacing them.\r\n */\r\n readonly ariaDescribedBy = input<string>();\r\n\r\n /**\r\n * Ids of the elements that name this control, for the cases a visible `<label>` cannot\r\n * cover. Merged with anything the control already points at.\r\n */\r\n readonly ariaLabelledBy = input<string>();\r\n readonly ariaLabel = input<string | null>(null);\r\n /** Accessible name of the clear button, which renders as a bare icon. */\r\n readonly clearLabelInput = input<string | undefined>(undefined, { alias: 'clearLabel' });\r\n readonly clearLabel = computed(\r\n () => this.clearLabelInput() ?? pshResolveConfigValue(this.config.clearLabel) ?? 'Clear selection',\r\n );\r\n readonly maxSelections = input<number | undefined>(undefined);\r\n readonly minSelections = input<number | undefined>(undefined);\r\n readonly compareWith = input<(a: T, b: T) => boolean>((a, b) => a === b);\r\n readonly searchPlaceholderInput = input<string | undefined>(undefined, { alias: 'searchPlaceholder' });\r\n /** Placeholder and accessible name of the search field. */\r\n readonly searchPlaceholder = computed(\r\n () =>\r\n this.searchPlaceholderInput() ??\r\n pshResolveConfigValue(this.config.searchPlaceholder) ??\r\n 'Search...',\r\n );\r\n\r\n private readonly isOpenSignal = signal(false);\r\n private readonly searchTermSignal = signal('');\r\n readonly focusedIndex = signal(-1);\r\n\r\n opened = output<void>();\r\n closed = output<void>();\r\n searched = output<string>();\r\n scrolledToEnd = output<void>();\r\n\r\n readonly isOpen = computed(() => this.isOpenSignal());\r\n readonly searchTerm = computed(() => this.searchTermSignal());\r\n\r\n readonly state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n return 'default';\r\n });\r\n\r\n readonly computedAriaLabel = computed(() => this.ariaLabel() || this.label() || this.placeholder());\r\n\r\n // Was the global 'error-message' / 'success-message' / 'hint-message': two selects in\r\n // error on one page produced duplicate ids, and a screen reader read the first one's\r\n // message for both. Fixed on `input` in 6.2.5 and never propagated until now.\r\n readonly describedBy = computed(() => {\r\n const own = this.error()\r\n ? `${this.selectId}-error`\r\n : this.success()\r\n ? `${this.selectId}-success`\r\n : this.hint()\r\n ? `${this.selectId}-hint`\r\n : null;\r\n return pshJoinAriaIds(own, this.ariaDescribedBy());\r\n });\r\n\r\n readonly flatFilteredOptions = computed<FlatOption<T>[]>(() => {\r\n const opts = this.filteredOptions();\r\n const result: FlatOption<T>[] = [];\r\n for (const item of opts) {\r\n if (this.isOptionGroup(item)) {\r\n for (const opt of item.options) {\r\n result.push({ option: opt, effectiveDisabled: !!(item.disabled || opt.disabled) });\r\n }\r\n } else {\r\n result.push({ option: item, effectiveDisabled: !!item.disabled });\r\n }\r\n }\r\n return result;\r\n });\r\n\r\n readonly activeDescendant = computed(() => {\r\n const idx = this.focusedIndex();\r\n const flat = this.flatFilteredOptions();\r\n if (idx < 0 || idx >= flat.length) return null;\r\n const item = flat[idx];\r\n if (!item) return null;\r\n return `${this.selectId}-${item.option.value}`;\r\n });\r\n\r\n readonly selectedLabel = computed(() => {\r\n const currentValue = this.value();\r\n const currentOptions = this.flattenOptions(this.options());\r\n\r\n if (currentValue === null || currentValue === undefined) {\r\n return this.multiple() ? this.multiplePlaceholder() : this.placeholder();\r\n }\r\n\r\n if (this.multiple() && Array.isArray(currentValue)) {\r\n const selected = currentOptions.filter(opt =>\r\n currentValue.some(v => this.compareWith()(v, opt.value))\r\n );\r\n return selected.length > 0 ? selected.map(o => o.label).join(', ') : this.multiplePlaceholder();\r\n }\r\n\r\n const selected = currentOptions.find(opt => this.compareWith()(opt.value, currentValue as T));\r\n return selected ? selected.label : this.placeholder();\r\n });\r\n\r\n readonly filteredOptions = computed(() => {\r\n const term = this.searchTermSignal().toLowerCase();\r\n const opts = this.options();\r\n if (!term) return opts;\r\n\r\n return opts.map(opt => {\r\n if (this.isOptionGroup(opt)) {\r\n const filtered = opt.options.filter(o => {\r\n const matchesLabel = o.label.toLowerCase().includes(term);\r\n const matchesDesc = o.description ? o.description.toLowerCase().includes(term) : false;\r\n return matchesLabel || matchesDesc;\r\n });\r\n return filtered.length > 0 ? { ...opt, options: filtered } : null;\r\n }\r\n const matchesLabel = opt.label.toLowerCase().includes(term);\r\n const matchesDesc = opt.description ? opt.description.toLowerCase().includes(term) : false;\r\n return (matchesLabel || matchesDesc) ? opt : null;\r\n }).filter((opt): opt is (SelectOption<T> | SelectOptionGroup<T>) => opt !== null);\r\n });\r\n\r\n constructor() {\r\n // A value change revalidates by itself; a change to `required` does not — Angular has\r\n // no reason to suspect the validator's answer moved. This is what the callback is for.\r\n effect(() => {\r\n this.required();\r\n this.onValidatorChange();\r\n });\r\n\r\n // Close on outside click via the shared click-outside primitive. The options\r\n // panel is teleported to the body (outside the host), so a click inside it\r\n // must NOT count as \"outside\" — otherwise selecting an option would close the\r\n // panel before select() runs.\r\n const clickOutside = inject(PshClickOutsideDirective);\r\n const sub = clickOutside.pshClickOutside.subscribe(event => {\r\n if (!this.isOpen()) return;\r\n const target = event.target as Node | null;\r\n if (target && this.portalRef?.panel.contains(target)) return;\r\n this.close();\r\n });\r\n this.destroyRef.onDestroy(() => {\r\n sub.unsubscribe();\r\n this.closePanel();\r\n });\r\n }\r\n\r\n /** Teleports the options panel to the body-level overlay layer and positions it. */\r\n private openPanel(): void {\r\n if (this.portalRef) return;\r\n const tpl = this.panelTpl();\r\n if (!tpl) return;\r\n this.portalRef = this.portal.attach(tpl, this.viewContainer);\r\n this.reposition();\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n // Capture phase so inner (e.g. modal body) scrolls keep the panel aligned.\r\n // Registered outside Angular: a capture-phase scroll listener fires on every scroll of\r\n // every ancestor, and each one triggered a full change-detection pass. Repositioning\r\n // writes to the DOM and to a signal, and a signal write schedules its own refresh — the\r\n // zone was doing the work twice.\r\n this.zone.runOutsideAngular(() => {\r\n view?.addEventListener('scroll', this.repositionHandler, true);\r\n view?.addEventListener('resize', this.repositionHandler);\r\n });\r\n }\r\n\r\n private closePanel(): void {\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n view?.removeEventListener('scroll', this.repositionHandler, true);\r\n view?.removeEventListener('resize', this.repositionHandler);\r\n this.portalRef?.detach();\r\n this.portalRef = null;\r\n this.resolvedSide.set('bottom');\r\n }\r\n\r\n private reposition(): void {\r\n if (!this.portalRef) return;\r\n const host = this.elementRef.nativeElement as HTMLElement;\r\n const trigger = host.querySelector('.psh-select-trigger') as HTMLElement | null;\r\n if (!trigger) return;\r\n const side = this.overlayPosition.flipSide(trigger, 'bottom', {\r\n overlayHeight: this.portalRef.panel.offsetHeight,\r\n }) as 'top' | 'bottom';\r\n this.resolvedSide.set(side);\r\n this.portalRef.position(trigger, side, 8);\r\n }\r\n\r\n private onChange: (value: T | T[] | null) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n private onValidatorChange: () => void = () => {};\r\n\r\n writeValue(value: unknown): void {\r\n this.value.set(value as T | T[] | null);\r\n }\r\n\r\n registerOnChange(fn: (value: T | T[] | null) => void): void { this.onChange = fn; }\r\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\r\n setDisabledState(isDisabled: boolean): void { this.disabled.set(isDisabled); }\r\n\r\n toggle(): void {\r\n if (this.disabled() || this.loading()) return;\r\n if (this.isOpen()) {\r\n this.close();\r\n } else {\r\n this.isOpenSignal.set(true);\r\n this.opened.emit();\r\n this.openPanel();\r\n }\r\n }\r\n\r\n close(): void {\r\n if (!this.isOpenSignal()) return;\r\n this.isOpenSignal.set(false);\r\n this.searchTermSignal.set('');\r\n this.focusedIndex.set(-1);\r\n this.closePanel();\r\n this.closed.emit();\r\n }\r\n\r\n select(option: SelectOption<T>, groupDisabled = false): void {\r\n if (this.disabled() || option.disabled || groupDisabled) return;\r\n\r\n if (this.multiple()) {\r\n const current = Array.isArray(this.value()) ? [...(this.value() as T[])] : [];\r\n const index = current.findIndex(v => this.compareWith()(v, option.value));\r\n if (index === -1) {\r\n const max = this.maxSelections();\r\n if (max !== undefined && current.length >= max) return;\r\n current.push(option.value);\r\n } else {\r\n const min = this.minSelections();\r\n if (min !== undefined && current.length <= min) return;\r\n current.splice(index, 1);\r\n }\r\n this.value.set(current as T | T[] | null);\r\n this.onChange(current);\r\n } else {\r\n this.value.set(option.value as T | T[] | null);\r\n this.onChange(option.value);\r\n this.close();\r\n }\r\n this.onTouched();\r\n this.touched.set(true);\r\n this.touch.emit();\r\n }\r\n\r\n clear(event: MouseEvent): void {\r\n event.stopPropagation();\r\n const newVal = (this.multiple() ? [] : null) as T | T[] | null;\r\n this.value.set(newVal);\r\n this.onChange(this.value());\r\n }\r\n\r\n onSearch(event: Event): void {\r\n const term = (event.target as HTMLInputElement).value;\r\n this.searchTermSignal.set(term);\r\n this.searched.emit(term);\r\n }\r\n\r\n onScroll(event: Event): void {\r\n const el = event.target as HTMLElement;\r\n if (el.scrollHeight - el.scrollTop === el.clientHeight) {\r\n this.scrolledToEnd.emit();\r\n }\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n if (!this.isOpen()) {\r\n this.toggle();\r\n } else if (this.focusedIndex() >= 0) {\r\n const flat = this.flatFilteredOptions();\r\n const item = flat[this.focusedIndex()];\r\n if (item && !item.effectiveDisabled) {\r\n this.select(item.option);\r\n }\r\n }\r\n break;\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n if (!this.isOpen()) {\r\n this.toggle();\r\n } else {\r\n this.moveFocus(1);\r\n }\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.moveFocus(-1);\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.focusFirst();\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.focusLast();\r\n break;\r\n case 'Escape':\r\n this.close();\r\n break;\r\n case 'Tab':\r\n this.close();\r\n break;\r\n }\r\n }\r\n\r\n protected isOptionGroup(item: SelectOption<T> | SelectOptionGroup<T>): item is SelectOptionGroup<T> {\r\n return 'options' in item;\r\n }\r\n\r\n protected getOptionKey(item: SelectOption<T> | SelectOptionGroup<T>): string {\r\n return this.isOptionGroup(item) ? `g-${item.label}` : `o-${item.label}`;\r\n }\r\n\r\n protected isSelected(option: SelectOption<T>): boolean {\r\n const val = this.value();\r\n if (this.multiple() && Array.isArray(val)) {\r\n return val.some(v => this.compareWith()(v, option.value));\r\n }\r\n return val !== null && this.compareWith()(val as T, option.value);\r\n }\r\n\r\n protected hasValue(): boolean {\r\n const val = this.value();\r\n if (this.multiple()) return Array.isArray(val) && val.length > 0;\r\n return val !== null && val !== undefined;\r\n }\r\n\r\n /**\r\n * Everything the template needs about one option, computed once per render.\r\n *\r\n * It used to ask four questions per option per change-detection cycle, and one of them —\r\n * \"what is this option's position in the flattened list?\" — was a `findIndex` over that\r\n * list. Two hundred options meant forty thousand comparisons every cycle, plus a fresh\r\n * context object per option, which also defeats `NgTemplateOutlet`'s own caching: a new\r\n * context is a changed context.\r\n *\r\n * One pass over the flat list answers all four, and the context object is stable between\r\n * renders as long as nothing it holds has changed.\r\n */\r\n private readonly optionViews = computed(() => {\r\n const flat = this.flatFilteredOptions();\r\n const views = new Map<SelectOption<T>, SelectOptionView<T>>();\r\n flat.forEach(({ option, effectiveDisabled }, index) => {\r\n const selected = this.isSelected(option);\r\n views.set(option, {\r\n index,\r\n selected,\r\n disabled: effectiveDisabled,\r\n context: { $implicit: option, selected, disabled: effectiveDisabled },\r\n });\r\n });\r\n return views;\r\n });\r\n\r\n /** O(1). An option the current render does not contain gets a view that says so. */\r\n protected optionView(option: SelectOption<T>): SelectOptionView<T> {\r\n return (\r\n this.optionViews().get(option) ?? {\r\n index: -1,\r\n selected: false,\r\n disabled: false,\r\n context: { $implicit: option, selected: false, disabled: false },\r\n }\r\n );\r\n }\r\n\r\n protected focusSelect(): void {\r\n this.elementRef.nativeElement.querySelector('.psh-select-trigger')?.focus();\r\n }\r\n\r\n private flattenOptions(options: (SelectOption<T> | SelectOptionGroup<T>)[]): SelectOption<T>[] {\r\n return options.reduce((acc, opt) => this.isOptionGroup(opt) ? [...acc, ...opt.options] : [...acc, opt], [] as SelectOption<T>[]);\r\n }\r\n\r\n private moveFocus(direction: 1 | -1): void {\r\n const flat = this.flatFilteredOptions();\r\n if (flat.length === 0) return;\r\n const current = this.focusedIndex();\r\n let next = current;\r\n for (let i = 0; i < flat.length; i++) {\r\n next = ((next + direction) % flat.length + flat.length) % flat.length;\r\n if (!flat[next]!.effectiveDisabled) {\r\n this.focusedIndex.set(next);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n private focusFirst(): void {\r\n const flat = this.flatFilteredOptions();\r\n for (let i = 0; i < flat.length; i++) {\r\n if (!flat[i]!.effectiveDisabled) {\r\n this.focusedIndex.set(i);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n private focusLast(): void {\r\n const flat = this.flatFilteredOptions();\r\n for (let i = flat.length - 1; i >= 0; i--) {\r\n if (!flat[i]!.effectiveDisabled) {\r\n this.focusedIndex.set(i);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Makes `required` a real constraint rather than an asterisk.\r\n *\r\n * Re-run whenever `required` or the value changes: `registerOnValidatorChange` gives us\r\n * the callback that tells Angular to revalidate, and an effect fires it.\r\n */\r\n validate(): ValidationErrors | null {\r\n return pshRequiredError(this.required(), pshIsEmptyValue(this.value()));\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.onValidatorChange = fn;\r\n }\r\n\r\n}\r\n","<div class=\"psh-select-container\">\r\n @if (label()) {\r\n <!-- label[for] delegates focus to its control natively; the click handler is a convenience. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <label class=\"psh-select-label\" [attr.for]=\"selectId\" (click)=\"focusSelect()\" [class.psh-required]=\"required()\">\r\n {{ label() }}\r\n @if (required()) { <span class=\"psh-required-mark\">*</span> }\r\n </label>\r\n }\r\n\r\n <div class=\"psh-select-trigger-wrapper\">\r\n <div class=\"psh-select-trigger\"\r\n role=\"combobox\"\r\n [id]=\"selectId\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-haspopup]=\"'listbox'\"\r\n [attr.aria-controls]=\"selectId + '-listbox'\"\r\n [attr.aria-activedescendant]=\"activeDescendant()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-invalid]=\"!!error()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.aria-busy]=\"loading()\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n [attr.tabindex]=\"disabled() || loading() ? -1 : 0\"\r\n (keydown)=\"handleKeydown($event)\"\r\n (click)=\"toggle()\">\r\n <div class=\"psh-select-value\">\r\n <span [class.psh-placeholder]=\"!hasValue()\">\r\n {{ selectedLabel() }}\r\n </span>\r\n </div>\r\n <div class=\"psh-select-actions\">\r\n @if (clearable() && hasValue() && !disabled()) {\r\n <!-- Icon-only control: without an explicit name it is announced as \"button\",\r\n and without type=\"button\" it submits any surrounding form. -->\r\n <button class=\"psh-select-clear\"\r\n type=\"button\"\r\n [attr.aria-label]=\"clearLabel()\"\r\n (click)=\"clear($event)\">\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n @if (loading()) {\r\n <div class=\"psh-select-loader-trigger\"></div>\r\n } @else {\r\n <i class=\"ph ph-caret-down psh-select-arrow\"></i>\r\n }\r\n </div>\r\n </div>\r\n\r\n <ng-template #panelTpl>\r\n <div class=\"psh-select-dropdown\" [class.psh-open-top]=\"resolvedSide() === 'top'\">\r\n @if (searchable()) {\r\n <div class=\"psh-select-search\">\r\n <i class=\"ph ph-magnifying-glass psh-select-search-icon\" aria-hidden=\"true\"></i>\r\n <input type=\"text\"\r\n [attr.aria-label]=\"searchPlaceholder()\"\r\n [placeholder]=\"searchPlaceholder()\"\r\n [value]=\"searchTerm()\"\r\n (input)=\"onSearch($event)\"\r\n (click)=\"$event.stopPropagation()\">\r\n </div>\r\n }\r\n <div class=\"psh-select-options\"\r\n role=\"listbox\"\r\n [id]=\"selectId + '-listbox'\"\r\n [attr.aria-multiselectable]=\"multiple() || null\"\r\n (scroll)=\"onScroll($event)\">\r\n @for (item of filteredOptions(); track getOptionKey(item)) {\r\n @if (isOptionGroup(item)) {\r\n <div class=\"psh-select-group\" role=\"group\" [attr.aria-label]=\"item.label\">\r\n <div class=\"psh-select-group-label\">{{ item.label }}</div>\r\n @for (opt of item.options; track opt.label) {\r\n <!-- option in a listbox: keyboard is handled at the widget level (arrows + aria-activedescendant). -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -->\r\n <div class=\"psh-select-option\"\r\n role=\"option\"\r\n [id]=\"selectId + '-' + opt.value\"\r\n [attr.aria-selected]=\"optionView(opt).selected\"\r\n [attr.aria-disabled]=\"optionView(opt).disabled ? true : null\"\r\n [attr.tabindex]=\"optionView(opt).disabled ? -1 : null\"\r\n [class.psh-selected]=\"optionView(opt).selected\"\r\n [class.psh-disabled]=\"optionView(opt).disabled\"\r\n [class.psh-focused]=\"optionView(opt).index === focusedIndex()\"\r\n (click)=\"select(opt, !!item.disabled)\">\r\n @if (optionTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"optionTemplate()!\"\r\n [ngTemplateOutletContext]=\"optionView(opt).context\"\r\n ></ng-container>\r\n } @else {\r\n @if (opt.icon) { <i [class]=\"'ph ph-' + opt.icon\" aria-hidden=\"true\"></i> }\r\n <div class=\"psh-select-option-content\">\r\n <span class=\"psh-select-option-label\">{{ opt.label }}</span>\r\n @if (opt.description) { <span class=\"psh-select-option-description\">{{ opt.description }}</span> }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n <!-- option in a listbox: keyboard is handled at the widget level (arrows + aria-activedescendant). -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -->\r\n <div class=\"psh-select-option\"\r\n role=\"option\"\r\n [id]=\"selectId + '-' + item.value\"\r\n [attr.aria-selected]=\"optionView(item).selected\"\r\n [attr.aria-disabled]=\"optionView(item).disabled ? true : null\"\r\n [attr.tabindex]=\"optionView(item).disabled ? -1 : null\"\r\n [class.psh-selected]=\"optionView(item).selected\"\r\n [class.psh-disabled]=\"optionView(item).disabled\"\r\n [class.psh-focused]=\"optionView(item).index === focusedIndex()\"\r\n (click)=\"select(item)\">\r\n @if (optionTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"optionTemplate()!\"\r\n [ngTemplateOutletContext]=\"optionView(item).context\"\r\n ></ng-container>\r\n } @else {\r\n @if (item.icon) { <i [class]=\"'ph ph-' + item.icon\" aria-hidden=\"true\"></i> }\r\n <div class=\"psh-select-option-content\">\r\n <span class=\"psh-select-option-label\">{{ item.label }}</span>\r\n @if (item.description) { <span class=\"psh-select-option-description\">{{ item.description }}</span> }\r\n </div>\r\n }\r\n </div>\r\n }\r\n } @empty {\r\n <div class=\"psh-select-no-results\">{{ noResultsText() }}</div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n @if (error()) {\r\n <div [id]=\"selectId + '-error'\" class=\"psh-select-error-message\" role=\"alert\">{{ error() }}</div>\r\n } @else if (success()) {\r\n <div [id]=\"selectId + '-success'\" class=\"psh-select-success-message\" role=\"status\">{{ success() }}</div>\r\n } @else if (hint()) {\r\n <div [id]=\"selectId + '-hint'\" class=\"psh-select-hint\">{{ hint() }}</div>\r\n }\r\n</div>\r\n\r\n","import { Injectable, inject, signal } from '@angular/core';\r\nimport { TOAST_CONFIG } from './toast.tokens';\r\nimport { Toast, ToastPosition } from './toast.types';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PshToastService {\r\n private readonly _toasts = signal<Toast[]>([]);\r\n private readonly _position = signal<ToastPosition>('top-right');\r\n private config = inject(TOAST_CONFIG);\r\n\r\n readonly toasts = this._toasts.asReadonly();\r\n readonly position = this._position.asReadonly();\r\n\r\n show(toast: Omit<Toast, 'id'>) {\r\n // Not `crypto.randomUUID()`: it is undefined in a non-secure context, so raising a\r\n // toast over plain http threw instead of showing anything.\r\n const id = pshUniqueId('toast');\r\n const newToast: Toast = {\r\n ...toast,\r\n id,\r\n color: toast.color || 'info',\r\n duration: toast.duration ?? this.config.duration ?? 5000\r\n };\r\n\r\n const maxToasts = this.config.maxToasts ?? 5;\r\n this._toasts.update(toasts => {\r\n const currentToasts = [...toasts];\r\n while (currentToasts.length >= maxToasts) {\r\n currentToasts.shift();\r\n }\r\n return [...currentToasts, newToast];\r\n });\r\n\r\n return id;\r\n }\r\n\r\n remove(id: string) {\r\n this._toasts.update(toasts => toasts.filter(t => t.id !== id));\r\n }\r\n\r\n info(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, color: 'info', ...options });\r\n }\r\n\r\n success(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, color: 'success', ...options });\r\n }\r\n\r\n warning(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, color: 'warning', ...options });\r\n }\r\n\r\n error(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, color: 'danger', ...options });\r\n }\r\n\r\n danger(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, color: 'danger', ...options });\r\n }\r\n\r\n setPosition(position: ToastPosition) {\r\n this._position.set(position);\r\n }\r\n}\r\n\r\n/** @deprecated Use PshToastService instead */\r\nexport const ToastService = PshToastService;\r\n","import {\r\n computed, ChangeDetectionStrategy, Component, effect, inject, input, OnDestroy } from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { Toast } from './toast.types';\r\nimport { PshColor } from '../../types/semantic.types';\r\nimport { PshToastService } from './toast.service';\r\nimport { TOAST_CONFIG } from './toast.tokens';\r\n\r\n@Component({\r\n selector: 'psh-toast',\r\n templateUrl: './toast.component.html',\r\n styleUrls: ['./toast.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '(document:keydown.escape)': 'handleEscapeKey()'\r\n }\r\n})\r\nexport class PshToastComponent implements OnDestroy {\r\n /**\r\n * Name of the notifications landmark. Was a literal in the template.\r\n *\r\n * The first `input()` this component has ever had: it went from zero inputs and zero\r\n * outputs on 118 lines to one. The rest of its API is still the service.\r\n */\r\n readonly ariaLabelInput = input<string | undefined>(undefined, { alias: 'ariaLabel' });\r\n readonly ariaLabel = computed(\r\n () => this.ariaLabelInput() ?? pshResolveConfigValue(this.config.ariaLabel) ?? 'Notifications',\r\n );\r\n\r\n private toastService = inject(PshToastService);\r\n public config = inject(TOAST_CONFIG);\r\n\r\n private timeoutMap = new Map<string, number>();\r\n private scheduledToastIds = new Set<string>();\r\n\r\n readonly toasts = this.toastService.toasts;\r\n readonly position = this.toastService.position;\r\n\r\n constructor() {\r\n effect(() => {\r\n const currentToasts = this.toasts();\r\n\r\n currentToasts.forEach(toast => {\r\n if (toast.id && !this.scheduledToastIds.has(toast.id)) {\r\n this.scheduledToastIds.add(toast.id);\r\n\r\n if (toast.duration && toast.duration > 0) {\r\n this.scheduleRemoval(toast.id, toast.duration);\r\n }\r\n }\r\n });\r\n\r\n const currentToastIds = new Set(currentToasts.map(t => t.id).filter(Boolean) as string[]);\r\n this.scheduledToastIds.forEach(id => {\r\n if (!currentToastIds.has(id)) {\r\n this.scheduledToastIds.delete(id);\r\n }\r\n });\r\n });\r\n }\r\n\r\n handleEscapeKey(): void {\r\n const toasts = this.toasts();\r\n const lastToast = toasts[toasts.length - 1];\r\n if (lastToast?.id) {\r\n this.handleDismiss(lastToast.id);\r\n }\r\n }\r\n\r\n handleDismiss(id: string | undefined): void {\r\n if (id) {\r\n this.clearTimeout(id);\r\n this.toastService.remove(id);\r\n }\r\n }\r\n\r\n handleMouseEnter(id: string): void {\r\n if (this.config.pauseOnHover) {\r\n this.clearTimeout(id);\r\n }\r\n }\r\n\r\n handleMouseLeave(id: string): void {\r\n if (this.config.pauseOnHover) {\r\n const toast = this.toasts().find(t => t.id === id);\r\n if (toast?.duration && toast.duration > 0) {\r\n this.scheduleRemoval(id, toast.duration);\r\n }\r\n }\r\n }\r\n\r\n getDefaultIcon(color: PshColor): string {\r\n const icons: Record<PshColor, string> = {\r\n info: 'info',\r\n success: 'check-circle',\r\n warning: 'warning',\r\n danger: 'warning-octagon',\r\n // Reachable since 7.0.0: the colour union is the same seven values everywhere, so a\r\n // toast can now be raised in any of them rather than the four it used to allow.\r\n primary: 'info',\r\n secondary: 'info',\r\n neutral: 'info'\r\n };\r\n return icons[color] || 'info';\r\n }\r\n\r\n shouldShowCloseButton(toast: Toast): boolean {\r\n if (toast.showCloseButton !== undefined) {\r\n return toast.showCloseButton;\r\n }\r\n return this.config.showCloseButton !== false;\r\n }\r\n\r\n getCloseButtonAriaLabel(toast: Toast): string {\r\n return toast.closeButtonAriaLabel ?? this.config.closeButtonAriaLabel ?? 'Close notification';\r\n }\r\n\r\n private scheduleRemoval(id: string, duration: number): void {\r\n this.clearTimeout(id);\r\n const timeoutId = setTimeout(() => {\r\n this.toastService.remove(id);\r\n this.timeoutMap.delete(id);\r\n }, duration);\r\n this.timeoutMap.set(id, timeoutId);\r\n }\r\n\r\n private clearTimeout(id: string): void {\r\n const timeoutId = this.timeoutMap.get(id);\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n this.timeoutMap.delete(id);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.timeoutMap.forEach(timeoutId => {\r\n clearTimeout(timeoutId);\r\n });\r\n this.timeoutMap.clear();\r\n this.scheduledToastIds.clear();\r\n }\r\n}\r\n\r\n","<div\r\n class=\"psh-toast-container\"\r\n [class]=\"'psh-' + position()\"\r\n role=\"region\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n>\r\n @for (toast of toasts(); track toast.id) {\r\n <div\r\n class=\"psh-toast-item\"\r\n [class]=\"toast.color\"\r\n role=\"alert\"\r\n aria-live=\"polite\"\r\n aria-atomic=\"true\"\r\n [style.--psh-progress-duration]=\"toast.duration + 'ms'\"\r\n (mouseenter)=\"handleMouseEnter(toast.id!)\"\r\n (mouseleave)=\"handleMouseLeave(toast.id!)\"\r\n >\r\n @if (config.showIcon !== false) {\r\n <i\r\n class=\"ph ph-{{ toast.icon || getDefaultIcon(toast.color) }} psh-toast-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n }\r\n <div class=\"psh-toast-content\">\r\n {{ toast.message }}\r\n </div>\r\n @if (shouldShowCloseButton(toast)) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-toast-close\"\r\n (click)=\"handleDismiss(toast.id)\"\r\n [attr.aria-label]=\"getCloseButtonAriaLabel(toast)\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { Router, NavigationEnd } from '@angular/router';\r\nimport { filter } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ScrollService {\r\n private readonly router = inject(Router);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n constructor() {\r\n // providedIn: 'root' makes this effectively immortal in an application, but the\r\n // subscription still leaks wherever the root injector is recreated — tests, and\r\n // micro-frontends that bootstrap more than once. Every other subscription in the\r\n // library is torn down; this one was the exception.\r\n this.router.events.pipe(\r\n filter(event => event instanceof NavigationEnd),\r\n takeUntilDestroyed(),\r\n ).subscribe(() => {\r\n if (this.isBrowser) {\r\n this.document.defaultView?.scrollTo(0, 0);\r\n }\r\n });\r\n }\r\n}\r\n","import { Provider, Signal, signal } from '@angular/core';\r\n\r\nimport { PshViewportService } from './viewport.service';\r\n\r\n/**\r\n * A `PshViewportService` a test drives directly.\r\n *\r\n * `jsdom` has no layout, so `matchMedia` there answers whatever `setup-jest` stubs it with and\r\n * never changes. Before 7.0.0 the two card components each held their own writable `isMobile`\r\n * signal and the specs set it — which tested the class field rather than the path the viewport\r\n * actually travels. They set this instead, and the component reads it the way it does in a\r\n * browser.\r\n *\r\n * @example\r\n * const viewport = new FakePshViewport();\r\n * TestBed.configureTestingModule({ providers: [providePshViewportForTesting(viewport)] });\r\n * viewport.mobile.set(true);\r\n *\r\n * @internal\r\n */\r\nexport class FakePshViewport {\r\n /** Every query answers with this, which is all any consumer asks today. */\r\n readonly mobile = signal(false);\r\n\r\n below(): Signal<boolean> {\r\n return this.mobile.asReadonly();\r\n }\r\n\r\n matches(): Signal<boolean> {\r\n return this.mobile.asReadonly();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function providePshViewportForTesting(fake: FakePshViewport): Provider {\r\n return { provide: PshViewportService, useValue: fake };\r\n}\r\n","// One call to configure the whole design system, plus the finer-grained providers.\r\nexport * from './lib/provide-helix';\r\n\r\n// Every default string in French, for an application that wants them back.\r\nexport * from './lib/i18n/french';\r\n\r\n// The vocabulary every component shares. Import PshColor rather than a per-component\r\n// alias: the aliases are deprecated and exist only to ease the 7.0.0 migration.\r\nexport * from './lib/types/semantic.types';\r\n\r\nexport * from './lib/components/alert/alert.component';\r\nexport * from './lib/components/alert/alert.tokens';\r\nexport * from './lib/components/alert/alert.types';\r\nexport * from './lib/components/avatar/avatar.component';\r\nexport * from './lib/components/avatar/avatar.tokens';\r\nexport * from './lib/components/avatar/avatar.types';\r\nexport * from './lib/components/badge/badge.component';\r\nexport * from './lib/components/badge/badge.tokens';\r\nexport * from './lib/components/badge/badge.types';\r\nexport * from './lib/components/button/button.component';\r\nexport * from './lib/components/button/button.tokens';\r\nexport * from './lib/components/button/button.types';\r\nexport * from './lib/components/card/card.component';\r\nexport * from './lib/components/card/card.tokens';\r\nexport * from './lib/components/card/card.types';\r\nexport * from './lib/components/stat-card/stat-card.component';\r\nexport * from './lib/components/stat-card/stat-card.tokens';\r\nexport * from './lib/components/stat-card/stat-card.types';\r\nexport * from './lib/components/horizontal-card/horizontal-card.component';\r\nexport * from './lib/components/horizontal-card/horizontal-card.tokens';\r\nexport * from './lib/components/info-card/info-card.component';\r\nexport * from './lib/components/info-card/info-card.tokens';\r\nexport * from './lib/components/info-card/info-card.types';\r\nexport * from './lib/components/checkbox/checkbox.component';\r\nexport * from './lib/components/checkbox/checkbox.types';\r\nexport * from './lib/components/collapse/collapse.component';\r\nexport * from './lib/components/collapse/collapse.tokens';\r\nexport * from './lib/components/collapse/collapse.types';\r\nexport * from './lib/components/dropdown/dropdown.component';\r\nexport * from './lib/components/dropdown/dropdown.tokens';\r\nexport * from './lib/components/dropdown/dropdown.types';\r\nexport * from './lib/components/input/input.component';\r\nexport * from './lib/components/input/input.tokens';\r\nexport * from './lib/components/input/input.types';\r\nexport * from './lib/components/textarea/textarea.component';\r\nexport * from './lib/components/textarea/textarea.tokens';\r\nexport * from './lib/components/textarea/textarea.types';\r\nexport * from './lib/components/menu/menu.component';\r\nexport * from './lib/components/menu/menu.tokens';\r\nexport * from './lib/components/menu/menu.types';\r\nexport * from './lib/components/modal/modal.component';\r\nexport * from './lib/components/modal/modal.types';\r\nexport * from './lib/components/pagination/pagination.component';\r\nexport * from './lib/components/pagination/pagination.types';\r\nexport * from './lib/components/progressbar/progressbar.component';\r\nexport * from './lib/components/progressbar/progressbar.types';\r\nexport * from './lib/components/radio/radio.component';\r\nexport * from './lib/components/radio/radio-group.component';\r\nexport * from './lib/components/radio/radio-group.token';\r\nexport * from './lib/components/radio/radio.types';\r\nexport * from './lib/components/select/select.component';\r\nexport * from './lib/components/select/select.tokens';\r\nexport * from './lib/components/select/select.types';\r\nexport * from './lib/components/sidebar/sidebar.component';\r\nexport * from './lib/components/sidebar/sidebar.types';\r\nexport * from './lib/components/spinloader/spinloader.component';\r\nexport * from './lib/components/spinloader/spinloader.types';\r\nexport * from './lib/components/stepper/stepper.component';\r\nexport * from './lib/components/stepper/step.component';\r\nexport * from './lib/components/stepper/stepper.types';\r\nexport * from './lib/components/state-flow-indicator/state-flow-indicator.component';\r\nexport * from './lib/components/state-flow-indicator/flow-step.component';\r\nexport * from './lib/components/state-flow-indicator/state-flow-indicator.types';\r\nexport * from './lib/components/switch/switch.component';\r\nexport * from './lib/components/switch/switch.types';\r\nexport * from './lib/components/tab-bar/tab-bar.component';\r\nexport * from './lib/components/tab-bar/tab-bar.types';\r\nexport * from './lib/components/table/table.component';\r\nexport * from './lib/components/table/table.types';\r\nexport * from './lib/components/tabs/tabs.component';\r\nexport * from './lib/components/tabs/tab.component';\r\nexport * from './lib/components/tabs/tabs.types';\r\nexport * from './lib/components/tag/tag.component';\r\nexport * from './lib/components/tag/tag.types';\r\nexport * from './lib/components/toast/toast.component';\r\nexport * from './lib/components/toast/toast.service';\r\nexport * from './lib/components/toast/toast.tokens';\r\nexport * from './lib/components/toast/toast.types';\r\nexport * from './lib/components/tooltip/tooltip.component';\r\nexport * from './lib/components/tooltip/tooltip.types';\r\n\r\nexport * from './lib/services/theme/theme.service';\r\nexport * from './lib/services/theme/types/theme.types';\r\nexport * from './lib/services/scroll.service';\r\n\r\n// Headless a11y / overlay primitives\r\nexport * from './lib/a11y/focus-trap.directive';\r\nexport * from './lib/a11y/click-outside.directive';\r\nexport * from './lib/a11y/live-announcer.service';\r\nexport * from './lib/a11y/viewport.service';\r\n// The test double for the above: a consumer testing a component that embeds a psh-card\r\n// needs to drive the viewport too, and jsdom has no layout to drive it with.\r\nexport * from './lib/a11y/viewport.testing';\r\nexport * from './lib/a11y/overlay-position.service';\r\nexport * from './lib/a11y/overlay.service';\r\nexport * from './lib/a11y/portal.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DEFAULT_ARIA_LABELS","DEFAULT_CONFIG","i1.PshClickOutsideDirective"],"mappings":"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"}
1
+ {"version":3,"file":"ps-helix.mjs","sources":["../../../projects/ps-helix/src/lib/services/theme/utils/color.utils.ts","../../../projects/ps-helix/src/lib/services/theme/utils/wcag.utils.ts","../../../projects/ps-helix/src/lib/services/theme/theme.service.ts","../../../projects/ps-helix/src/lib/components/alert/alert.tokens.ts","../../../projects/ps-helix/src/lib/components/avatar/avatar.tokens.ts","../../../projects/ps-helix/src/lib/components/badge/badge.tokens.ts","../../../projects/ps-helix/src/lib/components/button/button.tokens.ts","../../../projects/ps-helix/src/lib/components/card/card.tokens.ts","../../../projects/ps-helix/src/lib/utils/unique-id.ts","../../../projects/ps-helix/src/lib/utils/required-validator.ts","../../../projects/ps-helix/src/lib/utils/aria.ts","../../../projects/ps-helix/src/lib/components/checkbox/checkbox.component.ts","../../../projects/ps-helix/src/lib/components/checkbox/checkbox.component.html","../../../projects/ps-helix/src/lib/components/collapse/collapse.tokens.ts","../../../projects/ps-helix/src/lib/components/dropdown/dropdown.tokens.ts","../../../projects/ps-helix/src/lib/components/horizontal-card/horizontal-card.tokens.ts","../../../projects/ps-helix/src/lib/components/info-card/info-card.tokens.ts","../../../projects/ps-helix/src/lib/components/input/input.types.ts","../../../projects/ps-helix/src/lib/components/input/input.tokens.ts","../../../projects/ps-helix/src/lib/components/menu/menu.tokens.ts","../../../projects/ps-helix/src/lib/utils/config-value.ts","../../../projects/ps-helix/src/lib/components/button/button.component.ts","../../../projects/ps-helix/src/lib/components/button/button.component.html","../../../projects/ps-helix/src/lib/a11y/focus-trap.directive.ts","../../../projects/ps-helix/src/lib/a11y/overlay.service.ts","../../../projects/ps-helix/src/lib/a11y/viewport.service.ts","../../../projects/ps-helix/src/lib/components/modal/modal.component.ts","../../../projects/ps-helix/src/lib/components/modal/modal.component.html","../../../projects/ps-helix/src/lib/components/pagination/pagination.component.ts","../../../projects/ps-helix/src/lib/components/pagination/pagination.component.html","../../../projects/ps-helix/src/lib/components/progressbar/progressbar.component.ts","../../../projects/ps-helix/src/lib/components/progressbar/progressbar.component.html","../../../projects/ps-helix/src/lib/components/radio/radio-group.token.ts","../../../projects/ps-helix/src/lib/components/radio/radio.component.ts","../../../projects/ps-helix/src/lib/components/radio/radio.component.html","../../../projects/ps-helix/src/lib/components/radio/radio-group.component.ts","../../../projects/ps-helix/src/lib/components/radio/radio-group.component.html","../../../projects/ps-helix/src/lib/components/select/select.tokens.ts","../../../projects/ps-helix/src/lib/components/sidebar/sidebar.component.ts","../../../projects/ps-helix/src/lib/components/sidebar/sidebar.component.html","../../../projects/ps-helix/src/lib/components/spinloader/spinloader.component.ts","../../../projects/ps-helix/src/lib/components/spinloader/spinloader.component.html","../../../projects/ps-helix/src/lib/components/stat-card/stat-card.tokens.ts","../../../projects/ps-helix/src/lib/components/state-flow-indicator/state-flow-indicator.token.ts","../../../projects/ps-helix/src/lib/components/state-flow-indicator/flow-step.component.ts","../../../projects/ps-helix/src/lib/components/state-flow-indicator/state-flow-indicator.component.ts","../../../projects/ps-helix/src/lib/components/state-flow-indicator/state-flow-indicator.component.html","../../../projects/ps-helix/src/lib/components/stepper/stepper.token.ts","../../../projects/ps-helix/src/lib/components/stepper/step.component.ts","../../../projects/ps-helix/src/lib/components/stepper/stepper.component.ts","../../../projects/ps-helix/src/lib/components/stepper/stepper.component.html","../../../projects/ps-helix/src/lib/components/switch/switch.component.ts","../../../projects/ps-helix/src/lib/components/switch/switch.component.html","../../../projects/ps-helix/src/lib/components/tab-bar/tab-bar.component.ts","../../../projects/ps-helix/src/lib/components/tab-bar/tab-bar.component.html","../../../projects/ps-helix/src/lib/a11y/live-announcer.service.ts","../../../projects/ps-helix/src/lib/a11y/portal.service.ts","../../../projects/ps-helix/src/lib/a11y/overlay-position.service.ts","../../../projects/ps-helix/src/lib/components/input/input.component.ts","../../../projects/ps-helix/src/lib/components/input/input.component.html","../../../projects/ps-helix/src/lib/components/table/table.component.ts","../../../projects/ps-helix/src/lib/components/table/table.component.html","../../../projects/ps-helix/src/lib/components/tabs/tabs.token.ts","../../../projects/ps-helix/src/lib/components/tabs/tab.component.ts","../../../projects/ps-helix/src/lib/components/tabs/tabs.component.ts","../../../projects/ps-helix/src/lib/components/tabs/tabs.component.html","../../../projects/ps-helix/src/lib/components/tag/tag.component.ts","../../../projects/ps-helix/src/lib/components/tag/tag.component.html","../../../projects/ps-helix/src/lib/components/textarea/textarea.types.ts","../../../projects/ps-helix/src/lib/components/textarea/textarea.tokens.ts","../../../projects/ps-helix/src/lib/components/toast/toast.tokens.ts","../../../projects/ps-helix/src/lib/components/tooltip/tooltip.component.ts","../../../projects/ps-helix/src/lib/components/tooltip/tooltip.component.html","../../../projects/ps-helix/src/lib/provide-helix.ts","../../../projects/ps-helix/src/lib/i18n/french.ts","../../../projects/ps-helix/src/lib/types/semantic.types.ts","../../../projects/ps-helix/src/lib/components/alert/alert.component.ts","../../../projects/ps-helix/src/lib/components/alert/alert.component.html","../../../projects/ps-helix/src/lib/components/avatar/avatar.component.ts","../../../projects/ps-helix/src/lib/components/avatar/avatar.component.html","../../../projects/ps-helix/src/lib/components/badge/badge.component.ts","../../../projects/ps-helix/src/lib/components/badge/badge.component.html","../../../projects/ps-helix/src/lib/components/card/card.component.ts","../../../projects/ps-helix/src/lib/components/card/card.component.html","../../../projects/ps-helix/src/lib/components/stat-card/stat-card.component.ts","../../../projects/ps-helix/src/lib/components/stat-card/stat-card.component.html","../../../projects/ps-helix/src/lib/components/horizontal-card/horizontal-card.component.ts","../../../projects/ps-helix/src/lib/components/horizontal-card/horizontal-card.component.html","../../../projects/ps-helix/src/lib/components/info-card/info-card.component.ts","../../../projects/ps-helix/src/lib/components/info-card/info-card.component.html","../../../projects/ps-helix/src/lib/components/collapse/collapse.component.ts","../../../projects/ps-helix/src/lib/components/collapse/collapse.component.html","../../../projects/ps-helix/src/lib/a11y/click-outside.directive.ts","../../../projects/ps-helix/src/lib/components/dropdown/dropdown.component.ts","../../../projects/ps-helix/src/lib/components/dropdown/dropdown.component.html","../../../projects/ps-helix/src/lib/components/textarea/textarea.component.ts","../../../projects/ps-helix/src/lib/components/textarea/textarea.component.html","../../../projects/ps-helix/src/lib/components/menu/menu.component.ts","../../../projects/ps-helix/src/lib/components/menu/menu.component.html","../../../projects/ps-helix/src/lib/components/select/select.component.ts","../../../projects/ps-helix/src/lib/components/select/select.component.html","../../../projects/ps-helix/src/lib/components/toast/toast.service.ts","../../../projects/ps-helix/src/lib/components/toast/toast.component.ts","../../../projects/ps-helix/src/lib/components/toast/toast.component.html","../../../projects/ps-helix/src/lib/services/scroll.service.ts","../../../projects/ps-helix/src/lib/a11y/viewport.testing.ts","../../../projects/ps-helix/src/public-api.ts","../../../projects/ps-helix/src/ps-helix.ts"],"sourcesContent":["export interface Rgb {\r\n r: number;\r\n g: number;\r\n b: number;\r\n}\r\n\r\nexport interface Oklch {\r\n l: number;\r\n c: number;\r\n h: number;\r\n}\r\n\r\nexport function hexToRgb(hex: string): Rgb | null {\r\n let value = hex.replace(/^#/, '').trim();\r\n if (value.length === 3) {\r\n value = value.split('').map((char) => char + char).join('');\r\n }\r\n if (value.length !== 6 || !/^[0-9a-fA-F]{6}$/.test(value)) {\r\n return null;\r\n }\r\n return {\r\n r: parseInt(value.substring(0, 2), 16),\r\n g: parseInt(value.substring(2, 4), 16),\r\n b: parseInt(value.substring(4, 6), 16),\r\n };\r\n}\r\n\r\nexport function rgbToHex({ r, g, b }: Rgb): string {\r\n const toHex = (channel: number) => {\r\n const clamped = Math.max(0, Math.min(255, Math.round(channel)));\r\n return clamped.toString(16).padStart(2, '0');\r\n };\r\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\r\n}\r\n\r\nfunction srgbToLinear(channel: number): number {\r\n const normalized = channel / 255;\r\n return normalized <= 0.04045\r\n ? normalized / 12.92\r\n : Math.pow((normalized + 0.055) / 1.055, 2.4);\r\n}\r\n\r\nfunction linearToSrgb(value: number): number {\r\n const clamped = Math.max(0, Math.min(1, value));\r\n const scaled = clamped <= 0.0031308\r\n ? 12.92 * clamped\r\n : 1.055 * Math.pow(clamped, 1 / 2.4) - 0.055;\r\n // Rounded to the channel a screen can actually show.\r\n //\r\n // It used to return a float, so `ensureContrast` searched for a lightness whose *unrounded*\r\n // colour hit the target, and the hex written to the stylesheet — rounded — could then miss\r\n // it. With an AAA target and a pale brand blue the result was 6.98:1, announced as 7.\r\n return Math.round(scaled * 255);\r\n}\r\n\r\nexport function relativeLuminance(rgb: Rgb): number {\r\n const r = srgbToLinear(rgb.r);\r\n const g = srgbToLinear(rgb.g);\r\n const b = srgbToLinear(rgb.b);\r\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\r\n}\r\n\r\nexport function contrastRatio(a: Rgb, b: Rgb): number {\r\n const la = relativeLuminance(a);\r\n const lb = relativeLuminance(b);\r\n const lighter = Math.max(la, lb);\r\n const darker = Math.min(la, lb);\r\n return (lighter + 0.05) / (darker + 0.05);\r\n}\r\n\r\nexport function bestTextColor(background: Rgb): string {\r\n const white = { r: 255, g: 255, b: 255 };\r\n const black = { r: 0, g: 0, b: 0 };\r\n return contrastRatio(background, white) >= contrastRatio(background, black)\r\n ? '#FFFFFF'\r\n : '#000000';\r\n}\r\n\r\nfunction rgbToLinear(rgb: Rgb): [number, number, number] {\r\n return [srgbToLinear(rgb.r), srgbToLinear(rgb.g), srgbToLinear(rgb.b)];\r\n}\r\n\r\nfunction linearToRgb(lin: [number, number, number]): Rgb {\r\n return {\r\n r: linearToSrgb(lin[0]),\r\n g: linearToSrgb(lin[1]),\r\n b: linearToSrgb(lin[2]),\r\n };\r\n}\r\n\r\nexport function rgbToOklch(rgb: Rgb): Oklch {\r\n const [r, g, b] = rgbToLinear(rgb);\r\n\r\n const l = 0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b;\r\n const m = 0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b;\r\n const s = 0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b;\r\n\r\n const l_ = Math.cbrt(l);\r\n const m_ = Math.cbrt(m);\r\n const s_ = Math.cbrt(s);\r\n\r\n const L = 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_;\r\n const a = 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_;\r\n const bLab = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_;\r\n\r\n const C = Math.sqrt(a * a + bLab * bLab);\r\n let H = (Math.atan2(bLab, a) * 180) / Math.PI;\r\n if (H < 0) H += 360;\r\n\r\n return { l: L, c: C, h: H };\r\n}\r\n\r\nexport function oklchToRgb({ l, c, h }: Oklch): Rgb {\r\n const hRad = (h * Math.PI) / 180;\r\n const a = c * Math.cos(hRad);\r\n const bLab = c * Math.sin(hRad);\r\n\r\n const l_ = l + 0.3963377774 * a + 0.2158037573 * bLab;\r\n const m_ = l - 0.1055613458 * a - 0.0638541728 * bLab;\r\n const s_ = l - 0.0894841775 * a - 1.2914855480 * bLab;\r\n\r\n const lCube = l_ ** 3;\r\n const mCube = m_ ** 3;\r\n const sCube = s_ ** 3;\r\n\r\n const r = 4.0767416621 * lCube - 3.3077115913 * mCube + 0.2309699292 * sCube;\r\n const g = -1.2684380046 * lCube + 2.6097574011 * mCube - 0.3413193965 * sCube;\r\n const b = -0.0041960863 * lCube - 0.7034186147 * mCube + 1.7076147010 * sCube;\r\n\r\n return linearToRgb([r, g, b]);\r\n}\r\n\r\nexport function withLightness(color: Rgb, lightness: number): Rgb {\r\n const oklch = rgbToOklch(color);\r\n return oklchToRgb({ l: Math.max(0, Math.min(1, lightness)), c: oklch.c, h: oklch.h });\r\n}\r\n\r\nexport function shiftLightness(color: Rgb, delta: number): Rgb {\r\n const oklch = rgbToOklch(color);\r\n return oklchToRgb({\r\n l: Math.max(0, Math.min(1, oklch.l + delta)),\r\n c: oklch.c,\r\n h: oklch.h,\r\n });\r\n}\r\n","import {\r\n Rgb,\r\n contrastRatio,\r\n relativeLuminance,\r\n rgbToOklch,\r\n oklchToRgb,\r\n} from './color.utils';\r\n\r\nexport const WCAG_AA_NORMAL = 4.5;\r\nexport const WCAG_AA_LARGE = 3;\r\nexport const WCAG_AAA_NORMAL = 7;\r\nexport const WCAG_AAA_LARGE = 4.5;\r\n\r\nexport type ContrastTarget = 'AA' | 'AAA';\r\n\r\nexport function targetRatio(target: ContrastTarget): number {\r\n return target === 'AAA' ? WCAG_AAA_NORMAL : WCAG_AA_NORMAL;\r\n}\r\n\r\n/**\r\n * Adjusts a color in OKLCH lightness until the contrast ratio against the\r\n * background meets or exceeds the target. Direction is chosen based on the\r\n * background (darken on light backgrounds, lighten on dark backgrounds).\r\n * Hue and chroma are preserved as much as possible.\r\n */\r\nexport function ensureContrast(color: Rgb, background: Rgb, ratio: number): Rgb {\r\n if (contrastRatio(color, background) >= ratio) {\r\n return color;\r\n }\r\n\r\n const backgroundLuminance = relativeLuminance(background);\r\n const { c, h } = rgbToOklch(color);\r\n const goLighter = backgroundLuminance < 0.5;\r\n\r\n let low = 0;\r\n let high = 1;\r\n let best: Rgb = color;\r\n let bestRatio = contrastRatio(color, background);\r\n\r\n for (let i = 0; i < 24; i++) {\r\n const mid = (low + high) / 2;\r\n const candidate = oklchToRgb({ l: mid, c, h });\r\n const candidateRatio = contrastRatio(candidate, background);\r\n\r\n if (candidateRatio >= ratio) {\r\n best = candidate;\r\n bestRatio = candidateRatio;\r\n if (goLighter) {\r\n high = mid;\r\n } else {\r\n low = mid;\r\n }\r\n } else {\r\n if (candidateRatio > bestRatio) {\r\n best = candidate;\r\n bestRatio = candidateRatio;\r\n }\r\n if (goLighter) {\r\n low = mid;\r\n } else {\r\n high = mid;\r\n }\r\n }\r\n }\r\n\r\n if (bestRatio < ratio) {\r\n const chromaReduced = oklchToRgb({\r\n l: goLighter ? 0.98 : 0.08,\r\n c: Math.min(c, 0.05),\r\n h,\r\n });\r\n if (contrastRatio(chromaReduced, background) > bestRatio) {\r\n return chromaReduced;\r\n }\r\n }\r\n\r\n return best;\r\n}\r\n","import {\r\n Injectable,\r\n InjectionToken,\r\n PLATFORM_ID,\r\n afterNextRender,\r\n computed,\r\n inject,\r\n signal,\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { Theme } from './types/theme.types';\r\nimport {\r\n Rgb,\r\n bestTextColor,\r\n hexToRgb,\r\n rgbToHex,\r\n rgbToOklch,\r\n oklchToRgb,\r\n contrastRatio,\r\n} from './utils/color.utils';\r\nimport {\r\n ContrastTarget,\r\n ensureContrast,\r\n targetRatio,\r\n WCAG_AA_NORMAL,\r\n} from './utils/wcag.utils';\r\n\r\nconst THEME_STORAGE_KEY = 'helix-theme-preference';\r\n\r\n/**\r\n * Contract for applications that want to override brand colors.\r\n * Kept generic (customer) so it can fit any vertical.\r\n */\r\nexport interface CustomerContextService {\r\n primaryColor(): string;\r\n secondaryColor(): string;\r\n}\r\n\r\nexport const CUSTOMER_CONTEXT_SERVICE = new InjectionToken<CustomerContextService>(\r\n 'CUSTOMER_CONTEXT_SERVICE',\r\n);\r\n\r\nexport interface PshThemeOptions {\r\n targetContrast?: ContrastTarget;\r\n}\r\n\r\nexport const PSH_THEME_OPTIONS = new InjectionToken<PshThemeOptions>('PSH_THEME_OPTIONS');\r\n\r\ninterface DerivedPalette {\r\n base: string;\r\n light: string;\r\n lighter: string;\r\n dark: string;\r\n darker: string;\r\n text: string;\r\n rgb: string;\r\n source: string;\r\n}\r\n\r\nconst LIGHT_BACKGROUND: Rgb = { r: 255, g: 255, b: 255 };\r\nconst DARK_BACKGROUND: Rgb = { r: 20, g: 20, b: 25 };\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ThemeService {\r\n private customerContext = inject(CUSTOMER_CONTEXT_SERVICE, { optional: true });\r\n private options = inject(PSH_THEME_OPTIONS, { optional: true });\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n private readonly isDarkThemeSignal = signal<boolean>(false);\r\n private readonly themeNameSignal = signal<Theme>('light');\r\n private readonly lastChangeSignal = signal<Date>(new Date());\r\n\r\n readonly isDarkTheme = computed(() => this.isDarkThemeSignal());\r\n readonly themeName = computed(() => this.themeNameSignal());\r\n\r\n readonly themeInfo = computed(() => ({\r\n isDark: this.isDarkTheme(),\r\n name: this.themeName(),\r\n lastChange: this.lastChangeSignal(),\r\n }));\r\n\r\n constructor() {\r\n this.initializeTheme();\r\n afterNextRender(() => this.applyCustomerTheme());\r\n }\r\n\r\n /**\r\n * Switches theme *and* remembers the choice — the two halves of what a theme toggle\r\n * means. They used to be split across two methods: `setDarkTheme` wrote `data-theme`\r\n * without persisting, `updateTheme` persisted without writing `data-theme`. Whichever\r\n * one a consumer picked, half the job was missing, and the demo's own toggle reverted\r\n * on every reload.\r\n */\r\n setDarkTheme(isDark: boolean): void {\r\n this.applyTheme(isDark);\r\n this.saveThemePreference(isDark ? 'dark' : 'light');\r\n }\r\n\r\n toggleTheme(): void {\r\n this.setDarkTheme(!this.isDarkThemeSignal());\r\n }\r\n\r\n updateTheme(name: Theme): void {\r\n this.setDarkTheme(name === 'dark');\r\n }\r\n\r\n /** The visible half: the attribute the stylesheets read, and the derived palette. */\r\n private applyTheme(isDark: boolean): void {\r\n if (this.isBrowser) {\r\n this.document.documentElement.setAttribute('data-theme', isDark ? 'dark' : 'light');\r\n }\r\n this.isDarkThemeSignal.set(isDark);\r\n this.themeNameSignal.set(isDark ? 'dark' : 'light');\r\n this.lastChangeSignal.set(new Date());\r\n this.applyCustomerTheme();\r\n }\r\n\r\n /**\r\n * Applies the customer brand colors to CSS variables, automatically\r\n * deriving variants in OKLCH and enforcing WCAG contrast against the\r\n * current theme background. If the provided color is not accessible\r\n * as a UI color, it is silently adjusted so UI components stay readable.\r\n * The original brand color is preserved in --customer-*-color-source\r\n * for purely decorative use (logos, marketing surfaces).\r\n */\r\n applyCustomerTheme(): void {\r\n if (!this.isBrowser || !this.customerContext) {\r\n return;\r\n }\r\n\r\n const primary = this.customerContext.primaryColor();\r\n const secondary = this.customerContext.secondaryColor();\r\n\r\n this.applyPalette('primary', primary);\r\n this.applyPalette('secondary', secondary);\r\n }\r\n\r\n private applyPalette(kind: 'primary' | 'secondary', color: string | undefined): void {\r\n if (!color) return;\r\n const source = hexToRgb(color);\r\n if (!source) return;\r\n\r\n const palette = this.derivePalette(source);\r\n const root = this.document.documentElement.style;\r\n const prefix = `--customer-${kind}-color`;\r\n\r\n root.setProperty(prefix, palette.base);\r\n root.setProperty(`${prefix}-source`, palette.source);\r\n root.setProperty(`${prefix}-light`, palette.light);\r\n root.setProperty(`${prefix}-lighter`, palette.lighter);\r\n root.setProperty(`${prefix}-dark`, palette.dark);\r\n root.setProperty(`${prefix}-darker`, palette.darker);\r\n root.setProperty(`${prefix}-text`, palette.text);\r\n root.setProperty(`${prefix}-rgb`, palette.rgb);\r\n }\r\n\r\n private derivePalette(source: Rgb): DerivedPalette {\r\n const isDark = this.isDarkThemeSignal();\r\n const background = isDark ? DARK_BACKGROUND : LIGHT_BACKGROUND;\r\n const ratio = targetRatio(this.options?.targetContrast ?? 'AA');\r\n\r\n const accessible = ensureContrast(source, background, ratio);\r\n\r\n const { l, c, h } = rgbToOklch(accessible);\r\n const variants = isDark\r\n ? {\r\n light: clampL(l + 0.06),\r\n lighter: clampL(l + 0.14),\r\n dark: clampL(l - 0.06),\r\n darker: clampL(l - 0.14),\r\n }\r\n : {\r\n light: clampL(l + 0.08),\r\n lighter: clampL(l + 0.18),\r\n dark: clampL(l - 0.08),\r\n darker: clampL(l - 0.16),\r\n };\r\n\r\n const lightColor = oklchToRgb({ l: variants.light, c, h });\r\n const lighterColor = oklchToRgb({ l: variants.lighter, c, h });\r\n const darkColor = this.ensureIfInteractive(\r\n oklchToRgb({ l: variants.dark, c, h }),\r\n background,\r\n Math.min(ratio, WCAG_AA_NORMAL),\r\n );\r\n const darkerColor = this.ensureIfInteractive(\r\n oklchToRgb({ l: variants.darker, c, h }),\r\n background,\r\n Math.min(ratio, WCAG_AA_NORMAL),\r\n );\r\n\r\n const text = bestTextColor(accessible);\r\n const rgb = `${Math.round(accessible.r)}, ${Math.round(accessible.g)}, ${Math.round(accessible.b)}`;\r\n\r\n return {\r\n base: rgbToHex(accessible),\r\n source: rgbToHex(source),\r\n light: rgbToHex(lightColor),\r\n lighter: rgbToHex(lighterColor),\r\n dark: rgbToHex(darkColor),\r\n darker: rgbToHex(darkerColor),\r\n text,\r\n rgb,\r\n };\r\n }\r\n\r\n private ensureIfInteractive(color: Rgb, background: Rgb, ratio: number): Rgb {\r\n return contrastRatio(color, background) >= ratio\r\n ? color\r\n : ensureContrast(color, background, ratio);\r\n }\r\n\r\n private initializeTheme(): void {\r\n let savedTheme: Theme | null = null;\r\n if (this.isBrowser) {\r\n try {\r\n savedTheme = this.document.defaultView?.localStorage.getItem(THEME_STORAGE_KEY) as Theme;\r\n } catch {\r\n savedTheme = null;\r\n }\r\n }\r\n const isValid = savedTheme === 'light' || savedTheme === 'dark';\r\n // No stored preference → honour the OS \"prefers-color-scheme\" setting.\r\n const initial: Theme = isValid ? (savedTheme as Theme) : this.prefersDarkScheme() ? 'dark' : 'light';\r\n // Applied, not saved: with nothing stored the theme follows the OS, and writing the\r\n // first value read would pin it there forever.\r\n this.applyTheme(initial === 'dark');\r\n }\r\n\r\n /** True when the OS/browser requests a dark colour scheme. */\r\n private prefersDarkScheme(): boolean {\r\n const view = this.document.defaultView;\r\n return this.isBrowser && !!view?.matchMedia?.('(prefers-color-scheme: dark)').matches;\r\n }\r\n\r\n private saveThemePreference(theme: Theme): void {\r\n if (!this.isBrowser) return;\r\n try {\r\n this.document.defaultView?.localStorage.setItem(THEME_STORAGE_KEY, theme);\r\n } catch {\r\n /* storage unavailable, preference not persisted */\r\n }\r\n }\r\n}\r\n\r\nfunction clampL(value: number): number {\r\n return Math.max(0, Math.min(1, value));\r\n}\r\n","/**\r\n * Application-wide defaults for `psh-alert`.\r\n *\r\n * Provide it to set a default once for every psh-alert in the application:\r\n *\r\n * provideHelix({ components: { alert: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { AlertConfig } from './alert.types';\r\n\r\nconst ALERT_DEFAULTS = {\r\n color: 'info',\r\n iconPosition: 'left',\r\n closable: false,\r\n size: 'medium',\r\n showIcon: true,\r\n labels: { dismiss: 'Dismiss alert' },\r\n} satisfies Partial<AlertConfig>;\r\n\r\nexport const ALERT_CONFIG = new InjectionToken<Partial<AlertConfig>>('ALERT_CONFIG', {\r\n factory: () => ALERT_DEFAULTS,\r\n});\r\n","/**\r\n * Application-wide defaults for `psh-avatar`.\r\n *\r\n * Provide it to set a default once for every psh-avatar in the application:\r\n *\r\n * provideHelix({ components: { avatar: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { AvatarConfig } from './avatar.types';\r\n\r\nconst AVATAR_DEFAULTS = {\r\n size: 'medium',\r\n shape: 'circle',\r\n alt: 'User avatar',\r\n icon: 'user',\r\n} satisfies Partial<AvatarConfig>;\r\n\r\nexport const AVATAR_CONFIG = new InjectionToken<Partial<AvatarConfig>>('AVATAR_CONFIG', {\r\n factory: () => AVATAR_DEFAULTS,\r\n});\r\n","/**\r\n * Application-wide defaults for `psh-badge`.\r\n *\r\n * Provide it to set a default once for every psh-badge in the application:\r\n *\r\n * provideHelix({ components: { badge: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { BadgeConfig } from './badge.types';\r\n\r\nconst BADGE_DEFAULTS = {\r\n color: 'primary',\r\n size: 'medium',\r\n displayType: 'text',\r\n position: 'top-right',\r\n max: 99,\r\n showZero: false,\r\n overlap: false,\r\n disabled: false,\r\n} satisfies Partial<BadgeConfig>;\r\n\r\nexport const BADGE_CONFIG = new InjectionToken<Partial<BadgeConfig>>('BADGE_CONFIG', {\r\n factory: () => BADGE_DEFAULTS,\r\n});\r\n","/**\r\n * Application-wide defaults for `psh-button`.\r\n *\r\n * Provide it to set a default once for every psh-button in the application:\r\n *\r\n * provideHelix({ components: { button: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { ButtonConfig } from './button.types';\r\n\r\nconst BUTTON_DEFAULTS = {\r\n appearance: 'solid',\r\n color: 'primary',\r\n size: 'medium',\r\n type: 'button',\r\n iconPosition: 'left',\r\n fullWidth: false,\r\n loadingText: 'Loading...',\r\n disabledText: 'This action is currently unavailable',\r\n} satisfies Partial<ButtonConfig>;\r\n\r\nexport const BUTTON_CONFIG = new InjectionToken<Partial<ButtonConfig>>('BUTTON_CONFIG', {\r\n factory: () => BUTTON_DEFAULTS,\r\n});\r\n","/**\r\n * Application-wide defaults for `psh-card`.\r\n *\r\n * Provide it to set a default once for every psh-card in the application:\r\n *\r\n * provideHelix({ components: { card: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { CardConfig } from './card.types';\r\n\r\nconst CARD_DEFAULTS = {\r\n appearance: 'flat',\r\n color: 'neutral',\r\n density: 'normal',\r\n hoverable: false,\r\n interactive: false,\r\n bodyPadding: true,\r\n showHeaderDivider: true,\r\n showFooterDivider: true,\r\n showActionsDivider: true,\r\n actionsAlignment: 'right',\r\n} satisfies Partial<CardConfig>;\r\n\r\nexport const CARD_CONFIG = new InjectionToken<Partial<CardConfig>>('CARD_CONFIG', {\r\n factory: () => CARD_DEFAULTS,\r\n});\r\n","/**\r\n * One deterministic id generator for the whole library.\r\n *\r\n * Five strategies coexisted before 7.0.0, and three of them were not safe:\r\n *\r\n * `Math.random()` select, modal, tooltip — a different id on the server and on the\r\n * client, so the ids baked into the SSR markup never matched the ones\r\n * the browser generated. Every `aria-describedby`,\r\n * `aria-labelledby` and `<label for>` they fed pointed at nothing\r\n * after hydration.\r\n * `crypto.randomUUID()` switch, toast — same mismatch, plus it is simply **undefined in a\r\n * non-secure context**: over plain http, a switch threw on\r\n * construction.\r\n * a module counter input, textarea, checkbox, radio, collapse, pagination — correct,\r\n * and now the only one.\r\n *\r\n * A counter is deterministic because server and client render the same components in the\r\n * same order, so the nth component gets the same id in both passes. That is the whole\r\n * requirement; uniqueness across a page follows from it.\r\n */\r\n\r\nlet counter = 0;\r\n\r\n/**\r\n * Returns a process-unique, render-order-stable DOM id.\r\n *\r\n * @param prefix Short component tag, e.g. `'input'`, `'modal'`. Namespaced for you.\r\n *\r\n * @example\r\n * private readonly id = pshUniqueId('select'); // 'psh-select-1', 'psh-select-2', …\r\n */\r\nexport function pshUniqueId(prefix: string): string {\r\n return `psh-${prefix}-${++counter}`;\r\n}\r\n\r\n/**\r\n * Resets the counter. Test-only: two suites that both assert on generated ids are otherwise\r\n * order-dependent on each other.\r\n *\r\n * @internal\r\n */\r\nexport function resetPshUniqueIdForTesting(): void {\r\n counter = 0;\r\n}\r\n","import { ValidationErrors } from '@angular/forms';\r\n\r\n/**\r\n * The `required` half of the form contract that was missing.\r\n *\r\n * Before 7.0.0, `required` on a ps-helix control drew an asterisk and set `aria-required`,\r\n * and that was all: `NG_VALIDATORS` appeared nowhere in the library. A form built from\r\n * `<psh-input required>` fields was valid while every one of them was empty, so\r\n * `form.invalid` never guarded anything and the submit button stayed enabled.\r\n *\r\n * The controls provide `NG_VALIDATORS` now. The error key is Angular's own `required`, so it\r\n * reads the same as `Validators.required` and a consumer who declared both gets one error,\r\n * not two.\r\n *\r\n * **This makes forms that were accidentally valid become invalid.** That is the point, and it\r\n * is the reason this waited for a major.\r\n */\r\nexport function pshRequiredError(isRequired: boolean, isEmpty: boolean): ValidationErrors | null {\r\n return isRequired && isEmpty ? { required: true } : null;\r\n}\r\n\r\n/**\r\n * Whether a control value counts as \"nothing filled in\".\r\n *\r\n * `false` is deliberately **not** empty for a text value but **is** for a checkbox, which is\r\n * why each control passes its own emptiness rather than sharing one rule: an unticked\r\n * required checkbox is unfilled, a `0` in a required number field is not.\r\n */\r\nexport function pshIsEmptyValue(value: unknown): boolean {\r\n if (value === null || value === undefined) return true;\r\n if (typeof value === 'string') return value.trim().length === 0;\r\n if (Array.isArray(value)) return value.length === 0;\r\n return false;\r\n}\r\n","/**\r\n * Joins the ids a component computes for itself with the ones a consumer supplied.\r\n *\r\n * `aria-describedby` takes a **list**, and that is the whole point here. A control that\r\n * already points at its own error message must not lose it because the caller added a hint of\r\n * their own, and a caller who adds one must not silently replace the error. Before 7.0.0 the\r\n * library offered no `ariaDescribedBy` input at all — zero across all 33 classes — so the only\r\n * way to attach extra guidance was to set the attribute from outside and overwrite whatever\r\n * the component had put there.\r\n *\r\n * Returns `null` rather than an empty string, because `aria-describedby=\"\"` is a reference to\r\n * nothing and some screen readers announce it as such.\r\n */\r\nexport function pshJoinAriaIds(\r\n ...ids: readonly (string | null | undefined)[]\r\n): string | null {\r\n const seen = new Set<string>();\r\n\r\n for (const entry of ids) {\r\n if (!entry) continue;\r\n for (const id of entry.split(/\\s+/)) {\r\n if (id) seen.add(id);\r\n }\r\n }\r\n\r\n return seen.size > 0 ? [...seen].join(' ') : null;\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n InjectionToken,\r\n input,\r\n isDevMode,\r\n model,\r\n output,\r\n viewChild,\r\n effect\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\r\nimport type { FormCheckboxControl } from '@angular/forms/signals';\r\nimport { CheckboxSize, CheckboxConfig, CheckboxLabelPosition } from './checkbox.types';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\nimport { pshRequiredError } from '../../utils/required-validator';\r\nimport { pshJoinAriaIds } from '../../utils/aria';\r\n\r\nconst CHECKBOX_DEFAULTS = {\r\n checked: false,\r\n disabled: false,\r\n required: false,\r\n indeterminate: false,\r\n size: 'medium',\r\n labelPosition: 'right',\r\n label: ''\r\n} satisfies Partial<CheckboxConfig>;\r\n\r\nexport const CHECKBOX_CONFIG = new InjectionToken<Partial<CheckboxConfig>>('CHECKBOX_CONFIG', {\r\n factory: () => CHECKBOX_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-checkbox',\r\n imports: [],\r\n templateUrl: './checkbox.component.html',\r\n styleUrls: ['./checkbox.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: NG_VALIDATORS, useExisting: PshCheckboxComponent, multi: true },{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshCheckboxComponent,\r\n multi: true\r\n }],\r\n host: {\r\n '[class.psh-checkbox-disabled]': 'disabled()',\r\n '[class.psh-checkbox-error]': '!!error()',\r\n '[class.psh-checkbox-success]': '!!success()',\r\n '[class.psh-checkbox-small]': 'size() === \"small\"',\r\n '[class.psh-checkbox-large]': 'size() === \"large\"',\r\n '[class.psh-checkbox-checked]': 'checked() && !indeterminate()',\r\n '[class.psh-checkbox-indeterminate]': 'indeterminate()',\r\n '[attr.data-state]': 'state()',\r\n '[attr.aria-checked]': 'ariaChecked()'\r\n }\r\n})\r\nexport class PshCheckboxComponent\r\n implements ControlValueAccessor, FormCheckboxControl, AfterViewInit, Validator\r\n{\r\n private readonly config = inject(CHECKBOX_CONFIG);\r\n private readonly checkboxInput = viewChild<ElementRef<HTMLInputElement>>('checkboxInput');\r\n /** Holds the `label` input or the projected content — whichever provides the visible label. */\r\n private readonly labelSlot = viewChild<ElementRef<HTMLElement>>('labelSlot');\r\n\r\n protected readonly uniqueId = pshUniqueId('checkbox');\r\n\r\n private onChange = (_: boolean) => {};\r\n private onTouched = () => {};\r\n private onValidatorChange: () => void = () => {};\r\n\r\n readonly checked = model(this.config.checked ?? false);\r\n readonly disabled = model(this.config.disabled ?? false);\r\n readonly indeterminate = model(this.config.indeterminate ?? false);\r\n readonly touched = model(false);\r\n/**\r\n * Emitted when the user finishes interacting with the control.\r\n *\r\n * Part of `FormUiControl`: the `Field` directive listens to **this**, not to\r\n * `touchedChange`, to mark the bound field as touched.\r\n */\r\n readonly touch = output<void>();\r\n\r\n readonly required = input(this.config.required ?? false);\r\n readonly label = input(this.config.label ?? '');\r\n readonly error = input<string | null | undefined>(this.config.error);\r\n readonly success = input<string | null | undefined>(this.config.success);\r\n /** Guidance shown when there is neither an error nor a success message. */\r\n readonly hint = input<string | null | undefined>(null);\r\n\r\n /**\r\n * Extra ids for `aria-describedby`. **Merged** with the control's own — the id of its error,\r\n * success or hint message — never replacing them.\r\n */\r\n readonly ariaDescribedBy = input<string>();\r\n\r\n /**\r\n * Ids of the elements that name this control, for the cases a visible `<label>` cannot\r\n * cover. Merged with anything the control already points at.\r\n */\r\n readonly ariaLabelledBy = input<string>();\r\n readonly ariaLabel = input<string | undefined>(this.config.ariaLabel);\r\n readonly size = input<CheckboxSize>(this.config.size ?? 'medium');\r\n readonly labelPosition = input<CheckboxLabelPosition>(this.config.labelPosition ?? 'right');\r\n\r\n readonly ariaChecked = computed(() => this.indeterminate() ? 'mixed' : (this.checked() ? 'true' : 'false'));\r\n readonly computedAriaLabel = computed(() => this.ariaLabel() || undefined);\r\n\r\n // Error, success and hint are mutually exclusive in the template (@if/@else if), so\r\n // aria-describedby references whichever message is actually rendered — in the same order.\r\n // Pointing at an id the template did not render leaves a dangling reference that no test\r\n // in this repository would catch.\r\n readonly describedBy = computed(() => {\r\n const own = this.error()\r\n ? `${this.uniqueId}-error`\r\n : this.success()\r\n ? `${this.uniqueId}-success`\r\n : this.hint()\r\n ? `${this.uniqueId}-hint`\r\n : null;\r\n return pshJoinAriaIds(own, this.ariaDescribedBy());\r\n });\r\n\r\n readonly state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.indeterminate()) return 'indeterminate';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n return this.checked() ? 'checked' : 'unchecked';\r\n });\r\n\r\n ngAfterViewInit(): void {\r\n if (!isDevMode()) return;\r\n\r\n // Read the rendered label slot rather than the `label` input alone: a projected\r\n // label (`<psh-checkbox>Accept terms</psh-checkbox>`) is just as accessible, and\r\n // `contentChild` cannot see a bare text node. Checked once, after the first render.\r\n const hasVisibleLabel = !!this.labelSlot()?.nativeElement.textContent?.trim();\r\n if (!hasVisibleLabel && !this.ariaLabel()) {\r\n console.warn(\r\n '[psh-checkbox] No accessible label provided. Please use label input, ariaLabel input, or projected content.'\r\n );\r\n }\r\n }\r\n\r\n protected toggle(): void {\r\n if (!this.disabled()) {\r\n const newValue = !this.checked();\r\n this.checked.set(newValue);\r\n this.indeterminate.set(false);\r\n this.onChange(newValue);\r\n this.markTouched();\r\n }\r\n }\r\n\r\n /**\r\n * Blur, not toggle. Tabbing through a required checkbox without ticking it still means the\r\n * user has been there, which is what a field needs to know before showing \"required\".\r\n */\r\n protected handleBlur(): void {\r\n this.markTouched();\r\n }\r\n\r\n private markTouched(): void {\r\n this.onTouched();\r\n this.touched.set(true);\r\n this.touch.emit();\r\n }\r\n\r\n protected handleKeydown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n if (event.key === ' ' || event.key === 'Spacebar' || event.key === 'Enter') {\r\n event.preventDefault();\r\n this.toggle();\r\n }\r\n }\r\n\r\n constructor() {\r\n // A value change revalidates by itself; a change to `required` does not — Angular has\r\n // no reason to suspect the validator's answer moved. This is what the callback is for.\r\n effect(() => {\r\n this.required();\r\n this.onValidatorChange();\r\n });\r\n }\r\n\r\n writeValue(value: unknown): void { this.checked.set(!!value); }\r\n registerOnChange(fn: (v: boolean) => void): void { this.onChange = fn; }\r\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\r\n setDisabledState(isDisabled: boolean): void { this.disabled.set(isDisabled); }\r\n\r\n focus(): void { this.checkboxInput()?.nativeElement.focus(); }\r\n blur(): void { this.checkboxInput()?.nativeElement.blur(); }\r\n\r\n /**\r\n * Makes `required` a real constraint rather than an asterisk.\r\n *\r\n * Re-run whenever `required` or the value changes: `registerOnValidatorChange` gives us\r\n * the callback that tells Angular to revalidate, and an effect fires it.\r\n */\r\n validate(): ValidationErrors | null {\r\n return pshRequiredError(this.required(), !this.checked());\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.onValidatorChange = fn;\r\n }\r\n\r\n}","<div class=\"psh-checkbox-container\">\r\n <label class=\"psh-checkbox-label\" [class.psh-label-left]=\"labelPosition() === 'left'\">\r\n <input\r\n #checkboxInput\r\n type=\"checkbox\"\r\n class=\"psh-checkbox-input\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"disabled()\"\r\n [required]=\"required()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-checked]=\"ariaChecked()\"\r\n [attr.aria-required]=\"required() || null\"\r\n [attr.aria-invalid]=\"error() ? 'true' : null\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n (change)=\"toggle()\"\r\n (blur)=\"handleBlur()\"\r\n (keydown)=\"handleKeydown($event)\"\r\n />\r\n \r\n <span class=\"psh-checkbox-control\">\r\n @if (checked() && !indeterminate()) {\r\n <i class=\"ph ph-check\" aria-hidden=\"true\"></i>\r\n }\r\n @if (indeterminate()) {\r\n <i class=\"ph ph-minus\" aria-hidden=\"true\"></i>\r\n }\r\n </span>\r\n\r\n <span class=\"psh-checkbox-text\" #labelSlot>\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <ng-content></ng-content>\r\n }\r\n </span>\r\n </label>\r\n\r\n @if (error()) {\r\n <div [id]=\"uniqueId + '-error'\" class=\"psh-checkbox-message psh-error\" role=\"alert\">\r\n {{ error() }}\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"uniqueId + '-success'\" class=\"psh-checkbox-message psh-success\" role=\"status\">\r\n {{ success() }}\r\n </div>\r\n } @else if (hint()) {\r\n <div [id]=\"uniqueId + '-hint'\" class=\"psh-checkbox-message psh-hint\">\r\n {{ hint() }}\r\n </div>\r\n }\r\n</div>","/**\r\n * Application-wide defaults for `psh-collapse`.\r\n *\r\n * Provide it to set a default once for every psh-collapse in the application:\r\n *\r\n * provideHelix({ components: { collapse: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { CollapseConfig } from './collapse.types';\r\n\r\nconst COLLAPSE_DEFAULTS = {\r\n appearance: 'flat',\r\n size: 'medium',\r\n icon: 'caret-down',\r\n maxHeight: 'auto',\r\n defaultHeaderText: 'Collapsible section',\r\n disableAnimation: false,\r\n} satisfies Partial<CollapseConfig>;\r\n\r\nexport const COLLAPSE_CONFIG = new InjectionToken<Partial<CollapseConfig>>('COLLAPSE_CONFIG', {\r\n factory: () => COLLAPSE_DEFAULTS,\r\n});\r\n","/**\r\n * Application-wide defaults for `psh-dropdown`.\r\n *\r\n * Provide it to set a default once for every psh-dropdown in the application:\r\n *\r\n * provideHelix({ components: { dropdown: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { DropdownConfig } from './dropdown.types';\r\n\r\nconst DROPDOWN_DEFAULTS = {\r\n appearance: 'solid',\r\n color: 'primary',\r\n size: 'medium',\r\n placement: 'bottom-start',\r\n iconOnly: false,\r\n disabled: false,\r\n label: 'Dropdown Menu',\r\n} satisfies Partial<DropdownConfig>;\r\n\r\nexport const DROPDOWN_CONFIG = new InjectionToken<Partial<DropdownConfig>>('DROPDOWN_CONFIG', {\r\n factory: () => DROPDOWN_DEFAULTS,\r\n});\r\n","/**\r\n * Application-wide defaults for `psh-horizontal-card`.\r\n *\r\n * Provide it to set a default once for every psh-horizontal-card in the application:\r\n *\r\n * provideHelix({ components: { horizontalCard: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { HorizontalCardConfig } from './horizontal-card.types';\r\n\r\nconst HORIZONTAL_CARD_DEFAULTS = {\r\n appearance: 'elevated',\r\n hoverable: false,\r\n interactive: false,\r\n sideWidth: 'var(--psh-size-48)',\r\n gap: 'var(--psh-spacing-md)',\r\n sidePadding: '0',\r\n contentPadding: 'var(--psh-spacing-md)',\r\n mobileHeight: 'var(--psh-size-48)',\r\n} satisfies Partial<HorizontalCardConfig>;\r\n\r\nexport const HORIZONTAL_CARD_CONFIG = new InjectionToken<Partial<HorizontalCardConfig>>('HORIZONTAL_CARD_CONFIG', {\r\n factory: () => HORIZONTAL_CARD_DEFAULTS,\r\n});\r\n","/**\r\n * Application-wide defaults for `psh-info-card`.\r\n *\r\n * Provide it to set a default once for every psh-info-card in the application:\r\n *\r\n * provideHelix({ components: { infoCard: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { InfoCardConfig } from './info-card.types';\r\n\r\nconst INFO_CARD_DEFAULTS = {\r\n appearance: 'outline',\r\n icon: 'circle-dashed',\r\n hoverable: false,\r\n interactive: false,\r\n copyable: false,\r\n copyButtonLabel: 'Copy',\r\n copyFeedbackText: 'Copied',\r\n autoFullWidthOnMobile: true,\r\n emptyStateMessage: 'No information available',\r\n notProvidedText: 'Not provided',\r\n} satisfies Partial<InfoCardConfig>;\r\n\r\nexport const INFO_CARD_CONFIG = new InjectionToken<Partial<InfoCardConfig>>('INFO_CARD_CONFIG', {\r\n factory: () => INFO_CARD_DEFAULTS,\r\n});\r\n","import { PshFieldAppearance } from '../../types/semantic.types';\r\nimport { PshConfigValue } from '../../utils/config-value';\r\nexport type InputType = 'text' | 'password' | 'email' | 'tel' | 'url' | 'search' | 'date' | 'number';\r\n/**\r\n * @deprecated since 7.0.0 — use {@link PshFieldAppearance}. Surface treatment now shares one\r\n * vocabulary across the library.\r\n */\r\nexport type InputVariant = PshFieldAppearance;\r\nexport type InputSize = 'small' | 'medium' | 'large';\r\n\r\nexport interface AutocompleteConfig {\r\n minLength: number;\r\n debounceTime: number;\r\n}\r\n\r\nexport interface InputConfig {\r\n type: InputType;\r\n appearance: InputVariant;\r\n size: InputSize;\r\n required: boolean;\r\n /** Accessible name of the password toggle while the password is hidden */\r\n showPasswordLabel: PshConfigValue<string>;\r\n /** Accessible name of the password toggle while the password is shown */\r\n hidePasswordLabel: PshConfigValue<string>;\r\n fullWidth: boolean;\r\n showLabel: boolean;\r\n label: string;\r\n placeholder: string;\r\n error: string | null | undefined;\r\n success: string | null | undefined;\r\n hint: string | null | undefined;\r\n ariaLabel: string | null;\r\n}\r\n\r\nexport interface SuggestionResult {\r\n suggestions: string[];\r\n error?: string;\r\n}\r\n\r\nexport const INPUT_LABELS = {\r\n showPassword: 'Show password',\r\n hidePassword: 'Hide password'\r\n} as const;","/**\r\n * Application-wide defaults for `psh-input`.\r\n *\r\n * Provide it to set a default once for every psh-input in the application:\r\n *\r\n * provideHelix({ components: { input: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { InputConfig, INPUT_LABELS } from './input.types';\r\n\r\nconst INPUT_DEFAULTS = {\r\n appearance: 'outline',\r\n size: 'medium',\r\n type: 'text',\r\n required: false,\r\n showPasswordLabel: INPUT_LABELS.showPassword,\r\n hidePasswordLabel: INPUT_LABELS.hidePassword,\r\n fullWidth: false,\r\n showLabel: true,\r\n label: '',\r\n placeholder: '',\r\n} satisfies Partial<InputConfig>;\r\n\r\nexport const INPUT_CONFIG = new InjectionToken<Partial<InputConfig>>('INPUT_CONFIG', {\r\n factory: () => INPUT_DEFAULTS,\r\n});\r\n","/**\r\n * Application-wide defaults for `psh-menu`.\r\n *\r\n * Provide it to set a default once for every psh-menu in the application:\r\n *\r\n * provideHelix({ components: { menu: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { MenuConfig } from './menu.types';\r\n\r\nconst MENU_DEFAULTS = {\r\n mode: 'vertical',\r\n variant: 'default',\r\n collapsible: false,\r\n} satisfies Partial<MenuConfig>;\r\n\r\nexport const MENU_CONFIG = new InjectionToken<Partial<MenuConfig>>('MENU_CONFIG', {\r\n factory: () => MENU_DEFAULTS,\r\n});\r\n","/**\r\n * A configured default that may be computed each time it is read.\r\n *\r\n * Every visible string the library ships is a key on a `*_CONFIG` token, so an application\r\n * translates the whole design system in one `provideHelix()` call. That works as long as the\r\n * language is settled before the components render — the value is read once, when the\r\n * component is built.\r\n *\r\n * An application with a language switcher needs the value re-read when the language changes,\r\n * and passing a function is how it says so:\r\n *\r\n * provideHelix({\r\n * components: {\r\n * select: { placeholder: () => translate.instant('psh.select.placeholder') },\r\n * modal: { dismissLabel: 'Fermer' }, // still fine, and still the common case\r\n * },\r\n * })\r\n *\r\n * The component reads prose through a `computed`, so a function that touches a signal — which\r\n * every i18n library in Angular now exposes — re-runs on a language change and the label\r\n * updates in place. A plain string costs nothing and behaves exactly as before.\r\n *\r\n * Only prose is treated this way. `size`, `appearance`, `placement` and their kind stay plain\r\n * values: they are not translated, and nothing is gained by making twenty enum defaults\r\n * lazily evaluated.\r\n */\r\nexport type PshConfigValue<T> = T | (() => T);\r\n\r\n/**\r\n * Reads a configured value, calling it if it is a thunk.\r\n *\r\n * Call it inside the `computed` that exposes the value, never in a field initialiser —\r\n * resolving it once at construction is exactly the behaviour this exists to avoid.\r\n */\r\nexport function pshResolveConfigValue<T>(value: PshConfigValue<T> | undefined): T | undefined {\r\n return typeof value === 'function' ? (value as () => T)() : value;\r\n}\r\n","import { PshControlAppearance } from '../../types/semantic.types';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport {\r\n AfterContentChecked,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { ButtonColor, ButtonSize, ButtonIconPosition } from './button.types';\r\nimport { BUTTON_CONFIG } from './button.tokens';\r\n\r\n@Component({\r\n selector: 'psh-button',\r\n imports: [],\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.psh-full-width]': 'fullWidth()',\r\n '(click)': 'onHostClick($event)',\r\n },\r\n})\r\nexport class PshButtonComponent implements AfterContentChecked {\r\n private readonly config = inject(BUTTON_CONFIG);\r\n\r\n private elementRef = inject(ElementRef);\r\n private readonly projectedText = signal<string | undefined>(undefined);\r\n\r\n readonly appearance = input<PshControlAppearance>(this.config.appearance ?? 'solid');\r\n readonly color = input<ButtonColor>(this.config.color ?? 'primary');\r\n readonly size = input<ButtonSize>(this.config.size ?? 'medium');\r\n readonly disabled = input(false);\r\n readonly loading = input(false);\r\n readonly fullWidth = input(this.config.fullWidth ?? false);\r\n readonly iconPosition = input<ButtonIconPosition>(this.config.iconPosition ?? 'left');\r\n readonly icon = input<string>();\r\n readonly ariaLabel = input<string>();\r\n readonly loadingTextInput = input<string | undefined>(undefined, { alias: 'loadingText' });\r\n readonly loadingText = computed(\r\n () => this.loadingTextInput() ?? pshResolveConfigValue(this.config.loadingText) ?? 'Loading...',\r\n );\r\n readonly disabledTextInput = input<string | undefined>(undefined, { alias: 'disabledText' });\r\n readonly disabledText = computed(\r\n () => this.disabledTextInput() ?? pshResolveConfigValue(this.config.disabledText) ?? 'This action is currently unavailable',\r\n );\r\n readonly iconOnlyText = input<string>();\r\n readonly type = input<'button' | 'submit' | 'reset'>(this.config.type ?? 'button');\r\n\r\n clicked = output<MouseEvent>();\r\n disabledClicked = output<MouseEvent>();\r\n\r\n ngAfterContentChecked(): void {\r\n const button = this.elementRef.nativeElement.querySelector('button');\r\n if (button) {\r\n const ngContentElement = button.querySelector('.psh-button-content');\r\n if (ngContentElement) {\r\n const textContent = ngContentElement.textContent?.trim() || '';\r\n const currentProjectedText = this.projectedText();\r\n if (textContent && textContent !== currentProjectedText) {\r\n this.projectedText.set(textContent);\r\n } else if (!textContent && currentProjectedText) {\r\n this.projectedText.set(undefined);\r\n }\r\n }\r\n }\r\n }\r\n\r\n readonly computedAriaLabel = computed(() => {\r\n if (this.ariaLabel()) return this.ariaLabel();\r\n if (this.loading()) return this.loadingText();\r\n if (this.disabled()) return this.disabledText();\r\n if (this.iconPosition() === 'only') {\r\n return this.iconOnlyText() || 'Button';\r\n }\r\n const projected = this.projectedText();\r\n if (projected) return projected;\r\n return undefined;\r\n });\r\n\r\n readonly state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.loading()) return 'loading';\r\n return 'default';\r\n });\r\n\r\n\r\n handleClick(event: MouseEvent): void {\r\n if (!this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n onHostClick(event: MouseEvent): void {\r\n if (this.disabled() && !this.loading()) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.disabledClicked.emit(event);\r\n }\r\n }\r\n}","<button\r\n [attr.data-state]=\"state()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-busy]=\"loading()\"\r\n [type]=\"type()\"\r\n [class]=\"'psh-' + appearance()\"\r\n [class.psh-primary]=\"color() === 'primary'\"\r\n [class.psh-secondary]=\"color() === 'secondary'\"\r\n [class.psh-success]=\"color() === 'success'\"\r\n [class.psh-warning]=\"color() === 'warning'\"\r\n [class.psh-danger]=\"color() === 'danger'\"\r\n [class.psh-disabled]=\"disabled()\"\r\n [class.psh-loading]=\"loading()\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-medium]=\"size() === 'medium'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [class.psh-icon-only]=\"iconPosition() === 'only'\"\r\n [disabled]=\"disabled() || loading()\"\r\n (click)=\"handleClick($event)\"\r\n>\r\n <span class=\"psh-button-content\">\r\n @if (loading()) {\r\n <span class=\"psh-loader\" aria-hidden=\"true\"></span>\r\n @if (iconPosition() !== 'only') {\r\n {{ loadingText() }}\r\n }\r\n }\r\n @if (!loading() && icon() && (iconPosition() === 'left' || iconPosition() === 'only')) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n @if (!loading() && iconPosition() !== 'only') {\r\n <ng-content></ng-content>\r\n }\r\n @if (!loading() && icon() && iconPosition() === 'right') {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n </span>\r\n</button>","import {\r\n afterNextRender,\r\n DestroyRef,\r\n Directive,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Injector,\r\n input,\r\n PLATFORM_ID,\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\n\r\n/**\r\n * Headless focus-trap primitive.\r\n *\r\n * Apply to a container element and toggle activation with `[pshFocusTrap]`.\r\n * When active it:\r\n * - remembers the element that had focus before activation,\r\n * - moves focus to the first focusable element inside the container\r\n * (deterministically, after the next render — no `setTimeout`),\r\n * - keeps Tab / Shift+Tab focus cycling within the container, and\r\n * - restores focus to the previously focused element on deactivation/destroy.\r\n *\r\n * Handles the case where focus is currently outside the container.\r\n *\r\n * @example\r\n * ```html\r\n * <div [pshFocusTrap]=\"isOpen()\">…</div>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[pshFocusTrap]',\r\n host: {\r\n '(keydown)': 'onKeydown($event)',\r\n },\r\n})\r\nexport class PshFocusTrapDirective {\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly injector = inject(Injector);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n /** Whether the trap is active. */\r\n readonly pshFocusTrap = input<boolean>(true);\r\n\r\n /** Whether to restore focus to the previously focused element on deactivation. */\r\n readonly pshFocusTrapRestore = input<boolean>(true);\r\n\r\n /**\r\n * Whether to move focus into the container when the trap activates.\r\n * Set to false to trap + restore focus without stealing initial focus.\r\n */\r\n readonly pshFocusTrapAutoFocus = input<boolean>(true);\r\n\r\n private previouslyFocused: HTMLElement | null = null;\r\n private active = false;\r\n\r\n constructor() {\r\n effect(() => {\r\n const enabled = this.pshFocusTrap();\r\n if (!this.isBrowser) return;\r\n if (enabled) {\r\n this.activate();\r\n } else {\r\n this.deactivate();\r\n }\r\n });\r\n\r\n inject(DestroyRef).onDestroy(() => this.restoreFocus(true));\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (!this.active || event.key !== 'Tab') return;\r\n\r\n const focusables = this.getFocusableElements();\r\n const first = focusables[0];\r\n const last = focusables[focusables.length - 1];\r\n if (!first || !last) {\r\n // Nothing focusable inside — keep focus pinned to the container.\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n const current = this.document.activeElement;\r\n const inside = this.host.nativeElement.contains(current);\r\n\r\n if (event.shiftKey) {\r\n if (!inside || current === first) {\r\n event.preventDefault();\r\n last.focus();\r\n }\r\n } else {\r\n if (!inside || current === last) {\r\n event.preventDefault();\r\n first.focus();\r\n }\r\n }\r\n }\r\n\r\n private activate(): void {\r\n if (this.active) return;\r\n this.active = true;\r\n this.previouslyFocused = this.document.activeElement as HTMLElement | null;\r\n\r\n if (!this.pshFocusTrapAutoFocus()) return;\r\n\r\n // Deterministic post-render focus (replaces setTimeout-based focusing).\r\n afterNextRender(\r\n () => {\r\n if (!this.active) return;\r\n if (!this.host.nativeElement.contains(this.document.activeElement)) {\r\n this.getFocusableElements()[0]?.focus();\r\n }\r\n },\r\n { injector: this.injector },\r\n );\r\n }\r\n\r\n private deactivate(): void {\r\n if (!this.active) return;\r\n this.active = false;\r\n this.restoreFocus(false);\r\n }\r\n\r\n private restoreFocus(immediate: boolean): void {\r\n const target = this.previouslyFocused;\r\n this.previouslyFocused = null;\r\n\r\n if (!this.pshFocusTrapRestore() || !target || typeof target.focus !== 'function') {\r\n return;\r\n }\r\n\r\n if (immediate) {\r\n target.focus();\r\n } else {\r\n afterNextRender(() => target.focus(), { injector: this.injector });\r\n }\r\n }\r\n\r\n private getFocusableElements(): HTMLElement[] {\r\n const selector = [\r\n 'button:not([disabled])',\r\n '[href]',\r\n 'input:not([disabled])',\r\n 'select:not([disabled])',\r\n 'textarea:not([disabled])',\r\n '[tabindex]:not([tabindex=\"-1\"])',\r\n ].join(', ');\r\n\r\n // The selector already excludes the common non-focusable cases (disabled,\r\n // tabindex=\"-1\"). We intentionally avoid an offsetParent/layout-based\r\n // visibility filter: the browser itself skips display:none elements on\r\n // focus(), and layout metrics are unavailable in non-rendering test envs.\r\n return Array.from(\r\n this.host.nativeElement.querySelectorAll<HTMLElement>(selector),\r\n ).filter(el => !el.hasAttribute('hidden'));\r\n }\r\n}\r\n","import { computed, Injectable, signal } from '@angular/core';\r\n\r\n/** A handle for a registered overlay layer. */\r\nexport interface OverlayHandle {\r\n /** Unique id of the layer, used to release it. */\r\n readonly id: number;\r\n /** z-index assigned to this layer (higher = on top). */\r\n readonly zIndex: number;\r\n}\r\n\r\n/**\r\n * Central overlay stacking authority.\r\n *\r\n * Hands out monotonically increasing z-indexes so that stacked overlays\r\n * (modals, dropdowns, tooltips, popovers…) always layer in open order, and\r\n * exposes which layer is on top. This replaces per-component, ad-hoc z-index\r\n * management. The counter resets once every layer is released, keeping z-index\r\n * values bounded.\r\n *\r\n * @example\r\n * ```typescript\r\n * private overlay = inject(PshOverlayService);\r\n * // on open:\r\n * this.handle = this.overlay.push(); // { id, zIndex }\r\n * // on close:\r\n * this.overlay.remove(this.handle.id);\r\n * ```\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshOverlayService {\r\n /** z-index of the first (bottom) overlay layer. */\r\n private readonly baseZIndex = 1000;\r\n /** z-index increment between stacked layers. */\r\n private readonly step = 10;\r\n\r\n private sequence = 0;\r\n private readonly stack = signal<readonly number[]>([]);\r\n\r\n /** Number of currently-open overlay layers. */\r\n readonly activeCount = computed(() => this.stack().length);\r\n\r\n /**\r\n * Registers a new topmost overlay layer.\r\n * @returns a handle with a unique id and the z-index to apply.\r\n */\r\n push(): OverlayHandle {\r\n const id = ++this.sequence;\r\n this.stack.update(layers => [...layers, id]);\r\n return { id, zIndex: this.baseZIndex + (this.sequence - 1) * this.step };\r\n }\r\n\r\n /** Releases a previously registered layer. */\r\n remove(id: number): void {\r\n this.stack.update(layers => layers.filter(layer => layer !== id));\r\n if (this.stack().length === 0) {\r\n this.sequence = 0;\r\n }\r\n }\r\n\r\n /** Returns true if the given layer is currently on top of the stack. */\r\n isTopmost(id: number): boolean {\r\n const layers = this.stack();\r\n return layers.length > 0 && layers[layers.length - 1] === id;\r\n }\r\n}\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { DestroyRef, Injectable, PLATFORM_ID, Signal, inject, signal } from '@angular/core';\r\n\r\n/**\r\n * One media query per breakpoint, for the whole application.\r\n *\r\n * `psh-card` and `psh-info-card` each built a `ResizeObserver` on `document.documentElement`\r\n * to answer one question — is the viewport narrow? — so a grid of fifty cards installed fifty\r\n * observers on the root element, each firing on every resize frame. The answer is the same for\r\n * all of them, and `matchMedia` gives it without measuring anything: the browser evaluates the\r\n * query and fires only when it flips.\r\n *\r\n * The queries are also back on the documented scale. Both components asked\r\n * `innerWidth <= 640`, a pixel breakpoint written in TypeScript, which is why\r\n * `verify:breakpoints` never saw it — that script reads stylesheets. An `em` query follows the\r\n * user's root font size, so a component and the CSS beside it switch together under zoom.\r\n *\r\n * @example\r\n * private readonly viewport = inject(PshViewportService);\r\n * readonly isMobile = this.viewport.below('sm');\r\n */\r\n\r\n/** The scale of `breakpoints.tokens.css`, as the exclusive `max-width` of each step. */\r\nconst BELOW = {\r\n xs: '29.9375em',\r\n sm: '39.9375em',\r\n md: '47.9375em',\r\n lg: '63.9375em',\r\n xl: '79.9375em',\r\n '2xl': '95.9375em',\r\n} as const;\r\n\r\nexport type PshBreakpoint = keyof typeof BELOW;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshViewportService {\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n private readonly destroyRef = inject(DestroyRef);\r\n\r\n /** One entry per distinct query, however many components ask for it. */\r\n private readonly queries = new Map<string, Signal<boolean>>();\r\n\r\n /**\r\n * Whether the viewport is narrower than the given breakpoint.\r\n *\r\n * Exclusive, like the `max-width` rules in the stylesheets: at exactly the breakpoint the\r\n * answer is `false`, so a component and its CSS never disagree about which side they are on.\r\n *\r\n * On the server it is `false` and never changes — the same value the components defaulted to\r\n * before, so the first paint is unchanged.\r\n */\r\n below(breakpoint: PshBreakpoint): Signal<boolean> {\r\n return this.matches(`(max-width: ${BELOW[breakpoint]})`);\r\n }\r\n\r\n /** Any media query, as a signal. Shared with every other caller that passes the same one. */\r\n matches(query: string): Signal<boolean> {\r\n const existing = this.queries.get(query);\r\n if (existing) return existing;\r\n\r\n const state = signal(false);\r\n // The read-only view is what is cached, so two callers get the *same* signal rather than\r\n // two wrappers over one — and nothing outside can write it.\r\n const readonly = state.asReadonly();\r\n this.queries.set(query, readonly);\r\n\r\n const view = this.isBrowser ? this.document.defaultView : null;\r\n if (view?.matchMedia) {\r\n const list = view.matchMedia(query);\r\n state.set(list.matches);\r\n\r\n const onChange = (event: MediaQueryListEvent) => state.set(event.matches);\r\n list.addEventListener('change', onChange);\r\n this.destroyRef.onDestroy(() => list.removeEventListener('change', onChange));\r\n }\r\n\r\n return readonly;\r\n }\r\n}\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChild,\r\n effect,\r\n ElementRef,\r\n inject,\r\n Injectable,\r\n InjectionToken,\r\n input,\r\n model,\r\n OnDestroy,\r\n output,\r\n PLATFORM_ID,\r\n Renderer2,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { PshButtonComponent } from '../button/button.component';\r\nimport { PshFocusTrapDirective } from '../../a11y/focus-trap.directive';\r\nimport { ModalSize, ModalConfig } from './modal.types';\r\nimport { PshOverlayService, OverlayHandle } from '../../a11y/overlay.service';\r\nimport { PshViewportService } from '../../a11y/viewport.service';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\n/**\r\n * Injection token for global modal configuration\r\n *\r\n * @example\r\n * ```typescript\r\n * // In app.config.ts or main.ts\r\n * providers: [\r\n * {\r\n * provide: MODAL_CONFIG,\r\n * useValue: {\r\n * size: 'large',\r\n * closeOnBackdrop: false,\r\n * }\r\n * }\r\n * ]\r\n * ```\r\n */\r\nconst MODAL_DEFAULTS = {\r\n size: 'medium',\r\n showClose: true,\r\n closeOnBackdrop: true,\r\n closeOnEscape: true,\r\n preventScroll: true,\r\n showFooter: true,\r\n dismissLabel: 'Close',\r\n confirmLabel: 'Confirm',\r\n cancelLabel: 'Cancel'\r\n} satisfies Partial<ModalConfig>;\r\n\r\nexport const MODAL_CONFIG = new InjectionToken<Partial<ModalConfig>>('MODAL_CONFIG', {\r\n factory: () => MODAL_DEFAULTS,\r\n});\r\n\r\n/**\r\n * Service for managing modal instances and global configuration\r\n *\r\n * Tracks all active modals and provides centralized configuration.\r\n * Useful for managing modal stacks and preventing multiple modals from conflicting.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ModalService {\r\n private config = inject(MODAL_CONFIG);\r\n /**\r\n * Ordered stack of open modal ids (insertion order = visual stacking order).\r\n * The last entry is the topmost (most recently opened) modal.\r\n */\r\n private readonly modalsSignal = signal<readonly string[]>([]);\r\n\r\n /**\r\n * Computed signal exposing the number of active modals\r\n */\r\n readonly activeModalsCount = computed(() => this.modalsSignal().length);\r\n\r\n /**\r\n * Computed signal exposing the id of the topmost modal, or null if none are open\r\n */\r\n readonly topmostModalId = computed(() => {\r\n const modals = this.modalsSignal();\r\n return modals.length > 0 ? modals[modals.length - 1] : null;\r\n });\r\n\r\n /**\r\n * Returns the global modal configuration\r\n */\r\n getConfig(): Partial<ModalConfig> {\r\n return this.config;\r\n }\r\n\r\n /**\r\n * Generates a unique identifier for a modal instance\r\n */\r\n generateId(): string {\r\n return pshUniqueId('modal');\r\n }\r\n\r\n /**\r\n * Registers a modal instance when it opens, pushing it onto the stack\r\n * @param id - Unique modal identifier\r\n */\r\n register(id: string): void {\r\n this.modalsSignal.update(modals =>\r\n modals.includes(id) ? modals : [...modals, id]\r\n );\r\n }\r\n\r\n /**\r\n * Unregisters a modal instance when it closes, removing it from the stack\r\n * @param id - Unique modal identifier\r\n */\r\n unregister(id: string): void {\r\n this.modalsSignal.update(modals => modals.filter(modalId => modalId !== id));\r\n }\r\n\r\n /**\r\n * Checks if a modal is currently registered\r\n * @param id - Unique modal identifier\r\n */\r\n isRegistered(id: string): boolean {\r\n return this.modalsSignal().includes(id);\r\n }\r\n\r\n /**\r\n * Checks if a modal is the topmost (most recently opened) open modal.\r\n * Used to ensure Escape / backdrop only dismiss the modal on top of the stack.\r\n * @param id - Unique modal identifier\r\n */\r\n isTopmost(id: string): boolean {\r\n return this.topmostModalId() === id;\r\n }\r\n}\r\n\r\n/**\r\n * A modal dialog component that displays content in an overlay\r\n *\r\n * @example\r\n * ```typescript\r\n * // Basic usage with two-way binding\r\n * <psh-modal [(open)]=\"isOpen\" title=\"My Modal\">\r\n * <p>Modal content</p>\r\n * </psh-modal>\r\n *\r\n * // With custom footer\r\n * <psh-modal [(open)]=\"isOpen\" title=\"Confirm Action\">\r\n * <p>Are you sure?</p>\r\n * <div psh-modal-footer #modalFooter>\r\n * <psh-button (clicked)=\"isOpen = false\">Cancel</psh-button>\r\n * <psh-button color=\"primary\" (clicked)=\"handleConfirm()\">Confirm</psh-button>\r\n * </div>\r\n * </psh-modal>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'psh-modal',\r\n imports: [PshButtonComponent, PshFocusTrapDirective],\r\n templateUrl: './modal.component.html',\r\n styleUrls: ['./modal.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshModalComponent implements AfterViewInit, OnDestroy {\r\n private readonly config = inject(MODAL_CONFIG);\r\n private readonly modalService = inject(ModalService);\r\n private readonly overlay = inject(PshOverlayService);\r\n private readonly renderer = inject(Renderer2);\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n\r\n /** Elements this modal marked `inert`, so it only ever undoes its own. */\r\n private inertedByThisModal: HTMLElement[] = [];\r\n private readonly isBrowser = isPlatformBrowser(this.platformId);\r\n private readonly modalId = this.modalService.generateId();\r\n private overlayHandle: OverlayHandle | null = null;\r\n /** z-index assigned by the overlay stack while open (keeps stacked modals layered). */\r\n protected readonly zIndex = signal<number | null>(null);\r\n private modalElement?: ElementRef<HTMLElement>;\r\n private isAttachedToBody = false;\r\n /**\r\n * Read from the shared `matchMedia`, on the same `md` step the stylesheet uses.\r\n *\r\n * It was `innerWidth < 768` behind a resize listener per modal — a pixel breakpoint written\r\n * in TypeScript, which no amount of `verify:breakpoints` could see because that script reads\r\n * stylesheets. It also did not follow browser zoom: at 150% the stylesheet switched at an\r\n * effective 1150px while this stayed at 768, so the modal was in its mobile layout while\r\n * `isMobileScreen()` still said no, and a consumer binding it — the demo does, for full-width\r\n * footer buttons — got desktop buttons in a mobile dialog.\r\n */\r\n private readonly isMobile = inject(PshViewportService).below('md');\r\n\r\n /**\r\n * Controls the visibility of the modal (two-way binding)\r\n */\r\n readonly open = model(false);\r\n\r\n /**\r\n * Size of the modal dialog\r\n */\r\n readonly size = input<ModalSize>(this.config.size ?? 'medium');\r\n\r\n /**\r\n * Whether to show the close button in the header\r\n */\r\n readonly showClose = input(this.config.showClose ?? true);\r\n\r\n /**\r\n * Whether clicking the backdrop closes the modal\r\n */\r\n readonly closeOnBackdrop = input(this.config.closeOnBackdrop ?? true);\r\n\r\n /**\r\n * Whether pressing Escape closes the modal\r\n */\r\n readonly closeOnEscape = input(this.config.closeOnEscape ?? true);\r\n\r\n /**\r\n * Whether to prevent scrolling of the page when modal is open\r\n */\r\n readonly preventScroll = input(this.config.preventScroll ?? true);\r\n\r\n /**\r\n * Whether to show the default footer with action buttons\r\n */\r\n readonly showFooter = input(this.config.showFooter ?? true);\r\n\r\n /**\r\n * Title displayed in the modal header\r\n */\r\n readonly title = input('Modal Title');\r\n\r\n /**\r\n * Accessible label for the close button\r\n */\r\n readonly dismissLabelInput = input<string | undefined>(undefined, { alias: 'dismissLabel' });\r\n readonly dismissLabel = computed(\r\n () => this.dismissLabelInput() ?? pshResolveConfigValue(this.config.dismissLabel) ?? 'Close',\r\n );\r\n\r\n /**\r\n * Label for the confirm button in the default footer\r\n */\r\n readonly confirmLabelInput = input<string | undefined>(undefined, { alias: 'confirmLabel' });\r\n readonly confirmLabel = computed(\r\n () => this.confirmLabelInput() ?? pshResolveConfigValue(this.config.confirmLabel) ?? 'Confirm',\r\n );\r\n\r\n /**\r\n * Label for the cancel button in the default footer\r\n */\r\n readonly cancelLabelInput = input<string | undefined>(undefined, { alias: 'cancelLabel' });\r\n readonly cancelLabel = computed(\r\n () => this.cancelLabelInput() ?? pshResolveConfigValue(this.config.cancelLabel) ?? 'Cancel',\r\n );\r\n\r\n /**\r\n * Custom CSS class(es) for the modal panel.\r\n *\r\n * The only kind of passthrough that survives 7.0.0: the panel is rendered away from the\r\n * host — a backdrop covering the viewport, positioned by the overlay stack — so a class on\r\n * `<psh-modal>` cannot reach it. Every component that styles its own host lost its\r\n * passthrough instead.\r\n *\r\n * @example\r\n * ```html\r\n * <psh-modal panelClass=\"my-custom-modal\" />\r\n * ```\r\n */\r\n readonly panelClass = input('');\r\n\r\n /**\r\n * Name of the dialog, for the case where no visible title is rendered.\r\n *\r\n * When it is set it **replaces** `aria-labelledby`, because that attribute wins over\r\n * `aria-label` and would make this input silently do nothing. Setting it is therefore the\r\n * caller saying \"the visible title is absent or unsuitable\".\r\n */\r\n readonly ariaLabel = input<string>();\r\n\r\n protected readonly labelledBy = computed(() =>\r\n this.ariaLabel() ? null : `${this.modalDialogId()}-title`,\r\n );\r\n\r\n /**\r\n * Custom CSS class(es) to apply to the modal backdrop\r\n * Useful for stacked modals with different z-index or opacity\r\n *\r\n * @example\r\n * ```html\r\n * <psh-modal backdropClass=\"higher-z-index\" />\r\n * ```\r\n */\r\n readonly backdropClass = input('');\r\n\r\n /**\r\n * Emitted when the modal is closed\r\n */\r\n closed = output<void>();\r\n\r\n /**\r\n * Emitted when the confirm button is clicked\r\n */\r\n confirmed = output<void>();\r\n\r\n /**\r\n * Content child for detecting custom footer projection\r\n */\r\n private readonly customFooter = contentChild<ElementRef>('modalFooter');\r\n\r\n /**\r\n * View child reference to the modal backdrop element\r\n */\r\n private readonly modalBackdrop = viewChild<ElementRef>('modalBackdrop');\r\n\r\n /**\r\n * Keyboard event handler for Escape key\r\n */\r\n private readonly escapeHandler = (event: KeyboardEvent) => {\r\n if (event.key !== 'Escape') return;\r\n if (this.closeOnEscape() && this.open() && this.modalService.isTopmost(this.modalId)) {\r\n this.handleClose();\r\n }\r\n };\r\n\r\n /**\r\n * Computed signal indicating if a custom footer is projected\r\n */\r\n readonly hasCustomFooter = computed(() => !!this.customFooter());\r\n\r\n /**\r\n * Computed signal for the modal state\r\n */\r\n readonly state = computed(() => this.open() ? 'open' : 'closed');\r\n\r\n /**\r\n * Computed signal for the modal dialog ID for accessibility\r\n */\r\n readonly modalDialogId = computed(() => `${this.modalId}-dialog`);\r\n\r\n /**\r\n * Computed signal for the modal description ID for accessibility\r\n */\r\n readonly modalDescriptionId = computed(() => `${this.modalId}-description`);\r\n\r\n /**\r\n * Computed signal indicating if the screen is mobile-sized\r\n */\r\n readonly isMobileScreen = this.isMobile;\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.open()) {\r\n this.onModalOpen();\r\n } else {\r\n this.onModalClose();\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.attachModalToBody();\r\n }\r\n\r\n /**\r\n * Handles all setup when modal opens\r\n */\r\n private onModalOpen(): void {\r\n this.modalService.register(this.modalId);\r\n this.overlayHandle = this.overlay.push();\r\n this.zIndex.set(this.overlayHandle.zIndex);\r\n if (!this.isBrowser) return;\r\n this.setupScrollLock();\r\n this.setBackgroundInert();\r\n this.addEventListeners();\r\n // Initial focus + focus trapping + focus restoration are handled by\r\n // the [pshFocusTrap] directive on the modal container.\r\n }\r\n\r\n /**\r\n * Handles all cleanup when modal closes\r\n */\r\n private onModalClose(): void {\r\n this.modalService.unregister(this.modalId);\r\n this.releaseOverlay();\r\n if (!this.isBrowser) return;\r\n this.removeScrollLock();\r\n this.releaseBackgroundInert();\r\n this.removeEventListeners();\r\n }\r\n\r\n /**\r\n * Takes the rest of the page out of the accessibility tree while the modal is open.\r\n *\r\n * The focus trap holds the *keyboard*, and that was all there was: a screen reader's virtual\r\n * cursor reads by position, not by focus, so it walked straight through the page behind the\r\n * modal. `inert` is the one attribute that stops both.\r\n *\r\n * It applies to the siblings of the backdrop, which is appended to `document.body` — so the\r\n * list depends on the page, and the elements it touched are remembered rather than\r\n * recomputed. An element that was already `inert` is left alone and not recorded: it belongs\r\n * to whoever set it, most likely a modal underneath this one.\r\n */\r\n private setBackgroundInert(): void {\r\n const backdrop = this.modalBackdrop()?.nativeElement;\r\n for (const sibling of Array.from(this.document.body.children)) {\r\n if (sibling === backdrop || sibling.hasAttribute('inert')) continue;\r\n sibling.setAttribute('inert', '');\r\n this.inertedByThisModal.push(sibling as HTMLElement);\r\n }\r\n }\r\n\r\n private releaseBackgroundInert(): void {\r\n for (const element of this.inertedByThisModal) element.removeAttribute('inert');\r\n this.inertedByThisModal = [];\r\n }\r\n\r\n /** Releases this modal's overlay layer and clears its z-index. */\r\n private releaseOverlay(): void {\r\n if (this.overlayHandle) {\r\n this.overlay.remove(this.overlayHandle.id);\r\n this.overlayHandle = null;\r\n }\r\n this.zIndex.set(null);\r\n }\r\n\r\n /**\r\n * Adds keyboard event listeners\r\n */\r\n private addEventListeners(): void {\r\n this.document.addEventListener('keydown', this.escapeHandler);\r\n }\r\n\r\n /**\r\n * Removes keyboard event listeners\r\n */\r\n private removeEventListeners(): void {\r\n this.document.removeEventListener('keydown', this.escapeHandler);\r\n }\r\n\r\n /**\r\n * Closes the modal and emits the closed event\r\n */\r\n handleClose(): void {\r\n this.open.set(false);\r\n this.closed.emit();\r\n }\r\n\r\n /**\r\n * Emits the confirmed event without closing the modal\r\n * Allows parent component to handle confirmation logic and close if needed\r\n */\r\n handleConfirm(): void {\r\n this.confirmed.emit();\r\n }\r\n\r\n /**\r\n * Handles clicks on the backdrop\r\n * Closes the modal if closeOnBackdrop is true and click is on backdrop itself\r\n */\r\n handleBackdropClick(event: MouseEvent): void {\r\n if (\r\n this.closeOnBackdrop() &&\r\n this.modalService.isTopmost(this.modalId) &&\r\n event.target === event.currentTarget\r\n ) {\r\n this.handleClose();\r\n }\r\n }\r\n\r\n /**\r\n * Prevents page scrolling when modal is open\r\n * Calculates scrollbar width to prevent layout shift\r\n */\r\n private setupScrollLock(): void {\r\n if (!this.preventScroll() || !this.isBrowser) return;\r\n\r\n const root = this.document.documentElement;\r\n const view = this.document.defaultView;\r\n if (view && !root.style.getPropertyValue('--psh-scrollbar-width')) {\r\n const scrollbarWidth = view.innerWidth - root.clientWidth;\r\n root.style.setProperty('--psh-scrollbar-width', `${scrollbarWidth}px`);\r\n }\r\n this.document.body.classList.add('psh-modal-open');\r\n }\r\n\r\n /**\r\n * Removes scroll lock when modal closes\r\n */\r\n private removeScrollLock(): void {\r\n if (!this.preventScroll() || !this.isBrowser) return;\r\n this.document.body.classList.remove('psh-modal-open');\r\n }\r\n\r\n /**\r\n * Attaches the modal element to document.body for proper overlay rendering\r\n */\r\n private attachModalToBody(): void {\r\n const backdrop = this.modalBackdrop();\r\n if (backdrop && backdrop.nativeElement && !this.isAttachedToBody) {\r\n this.modalElement = backdrop;\r\n this.renderer.appendChild(this.document.body, backdrop.nativeElement);\r\n this.isAttachedToBody = true;\r\n }\r\n }\r\n\r\n /**\r\n * Detaches the modal element from document.body\r\n */\r\n private detachModalFromBody(): void {\r\n if (this.modalElement && this.modalElement.nativeElement && this.isAttachedToBody) {\r\n this.renderer.removeChild(this.document.body, this.modalElement.nativeElement);\r\n this.isAttachedToBody = false;\r\n }\r\n }\r\n\r\n /**\r\n * Cleanup on component destruction\r\n */\r\n ngOnDestroy(): void {\r\n this.removeScrollLock();\r\n this.removeEventListeners();\r\n this.modalService.unregister(this.modalId);\r\n this.releaseOverlay();\r\n this.detachModalFromBody();\r\n }\r\n}\r\n","<!--\r\n The backdrop. Pointer dismissal only; the keyboard path is Escape, handled on the document.\r\n It carries no role since 7.0.0 — the dialog is the panel inside it — so the two rules that\r\n were satisfied by role=\"dialog\" have to be waived explicitly instead.\r\n-->\r\n<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n<div\r\n #modalBackdrop\r\n [class]=\"'psh-modal-backdrop ' + backdropClass()\"\r\n [class.psh-open]=\"open()\"\r\n (click)=\"handleBackdropClick($event)\"\r\n [style.z-index]=\"zIndex()\"\r\n [attr.aria-hidden]=\"!open()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <div\r\n [class]=\"'psh-modal-container ' + panelClass()\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-medium]=\"size() === 'medium'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [attr.id]=\"modalDialogId()\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n [attr.aria-labelledby]=\"labelledBy()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-describedby]=\"modalDescriptionId()\"\r\n [pshFocusTrap]=\"open()\"\r\n >\r\n <div class=\"psh-modal-content-wrapper\">\r\n <div class=\"psh-modal-header\">\r\n <h2 class=\"psh-modal-title\" [attr.id]=\"modalDialogId() + '-title'\">\r\n <ng-content select=\"[psh-modal-title]\">{{ title() }}</ng-content>\r\n </h2>\r\n @if (showClose()) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-modal-close\"\r\n (click)=\"handleClose()\"\r\n [attr.aria-label]=\"dismissLabel()\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"psh-modal-content\" [attr.id]=\"modalDescriptionId()\">\r\n <ng-content>\r\n <p>\r\n Modal content goes here. You can replace this with your own content.\r\n </p>\r\n </ng-content>\r\n </div>\r\n\r\n @if (showFooter() && !hasCustomFooter()) {\r\n <div class=\"psh-modal-footer\">\r\n <psh-button\r\n appearance=\"outline\"\r\n color=\"primary\"\r\n size=\"medium\"\r\n [fullWidth]=\"isMobileScreen()\"\r\n (clicked)=\"handleClose()\">\r\n {{ cancelLabel() }}\r\n </psh-button>\r\n <psh-button\r\n appearance=\"solid\"\r\n color=\"primary\"\r\n size=\"medium\"\r\n [fullWidth]=\"isMobileScreen()\"\r\n (clicked)=\"handleConfirm()\">\r\n {{ confirmLabel() }}\r\n </psh-button>\r\n </div>\r\n } @if (showFooter() && hasCustomFooter()) {\r\n <div class=\"psh-modal-footer\">\r\n <!--\r\n Note: When using a custom footer, buttons should also use [fullWidth]=\"isMobileScreen()\"\r\n to ensure proper responsive behavior on mobile devices.\r\n Example:\r\n <psh-button [fullWidth]=\"isMobileScreen()\" (clicked)=\"action()\">Custom Button</psh-button>\r\n -->\r\n <ng-content select=\"[psh-modal-footer]\" #modalFooter></ng-content>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n</div>\r\n","import { PshNavigationError, PshSurfaceAppearance } from '../../types/semantic.types';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n isDevMode,\r\n model,\r\n output,\r\n linkedSignal,\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { PaginationSize, PaginationVariant, PaginationConfig } from './pagination.types';\r\nimport { InjectionToken } from '@angular/core';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\nconst PAGINATION_DEFAULTS = {\r\n size: 'medium',\r\n appearance: 'flat',\r\n showFirstLast: true,\r\n showPrevNext: true,\r\n maxVisiblePages: 5,\r\n showItemsPerPage: false,\r\n itemsPerPageOptions: [5, 10, 25, 50],\r\n firstLabel: 'First',\r\n previousLabel: 'Previous',\r\n nextLabel: 'Next',\r\n lastLabel: 'Last',\r\n pageLabel: 'Page',\r\n itemsLabel: 'items',\r\n itemsPerPageLabel: 'Items per page',\r\n ariaLabel: 'Pagination navigation',\r\n} satisfies Partial<PaginationConfig>;\r\n\r\nexport const PAGINATION_CONFIG = new InjectionToken<Partial<PaginationConfig>>('PAGINATION_CONFIG', {\r\n factory: () => PAGINATION_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-pagination',\r\n templateUrl: './pagination.component.html',\r\n styleUrls: ['./pagination.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshPaginationComponent {\r\n private config = inject(PAGINATION_CONFIG);\r\n private readonly uniqueId = pshUniqueId('pagination');\r\n\r\n readonly currentPage = model(1);\r\n readonly totalPages = input(1);\r\n readonly itemsPerPageInput = input(10, { alias: 'itemsPerPage' });\r\n readonly itemsPerPage = linkedSignal(this.itemsPerPageInput);\r\n\r\n /**\r\n * Number of pages used for rendering and navigation: never below 1, and never\r\n * written back to the `totalPages` input. `totalPages` is derived data owned by\r\n * the caller (`Math.ceil(total / pageSize)`, or a server-side page count), so the\r\n * component reads it and clamps its own view of it instead of correcting it.\r\n */\r\n private readonly effectiveTotalPages = computed(() => {\r\n const total = this.totalPages();\r\n return Number.isInteger(total) && total >= 1 ? total : 1;\r\n });\r\n\r\n constructor() {\r\n if (isDevMode()) {\r\n effect(() => {\r\n // `0` is a legitimate state (empty list, or a server-side page count that is\r\n // not loaded yet): stay silent. Only report what betrays a caller bug.\r\n const total = this.totalPages();\r\n if (total !== 0 && (!Number.isInteger(total) || total < 1)) {\r\n console.warn(`[psh-pagination] Invalid totalPages \"${total}\", using 1 page`);\r\n }\r\n });\r\n\r\n effect(() => {\r\n const maxVisible = this.maxVisiblePages();\r\n if (maxVisible < 1 || !Number.isFinite(maxVisible)) {\r\n console.warn(`[psh-pagination] Invalid maxVisiblePages \"${maxVisible}\", must be >= 1`);\r\n }\r\n });\r\n }\r\n\r\n // `currentPage` IS owned by the component (it navigates), so correcting it with\r\n // a write-back is the intended behaviour — clamped on the derived page count.\r\n effect(() => {\r\n const current = this.currentPage();\r\n const total = this.effectiveTotalPages();\r\n if (current < 1 || !Number.isFinite(current)) {\r\n if (isDevMode()) {\r\n console.warn(`[psh-pagination] Invalid currentPage \"${current}\", setting to 1`);\r\n }\r\n this.currentPage.set(1);\r\n } else if (current > total) {\r\n if (isDevMode()) {\r\n console.warn(\r\n `[psh-pagination] currentPage \"${current}\" exceeds totalPages \"${total}\", setting to ${total}`,\r\n );\r\n }\r\n this.currentPage.set(total);\r\n }\r\n });\r\n }\r\n\r\n readonly size = input(this.config.size ?? ('medium' as PaginationSize), {\r\n transform: (value: PaginationSize): PaginationSize => {\r\n if (!['small', 'medium', 'large'].includes(value)) {\r\n if (isDevMode()) {\r\n console.warn(`[psh-pagination] Invalid size \"${value}\", falling back to \"medium\"`);\r\n }\r\n return 'medium';\r\n }\r\n return value;\r\n },\r\n });\r\n readonly appearance = input(this.config.appearance ?? ('flat' as PshSurfaceAppearance), {\r\n transform: (value: PaginationVariant): PaginationVariant => {\r\n if (!['flat', 'outline'].includes(value)) {\r\n if (isDevMode()) {\r\n console.warn(`[psh-pagination] Invalid variant \"${value}\", falling back to \"flat\"`);\r\n }\r\n return 'flat';\r\n }\r\n return value;\r\n },\r\n });\r\n readonly showFirstLast = input(this.config.showFirstLast ?? true);\r\n readonly showPrevNext = input(this.config.showPrevNext ?? true);\r\n readonly maxVisiblePages = input(this.config.maxVisiblePages ?? 5);\r\n readonly showItemsPerPage = input(this.config.showItemsPerPage ?? false);\r\n readonly itemsPerPageOptions = input<number[]>(\r\n this.config.itemsPerPageOptions ?? [5, 10, 25, 50],\r\n );\r\n readonly firstLabelInput = input<string | undefined>(undefined, { alias: 'firstLabel' });\r\n readonly firstLabel = computed(\r\n () => this.firstLabelInput() ?? pshResolveConfigValue(this.config.firstLabel) ?? 'First',\r\n );\r\n readonly previousLabelInput = input<string | undefined>(undefined, { alias: 'previousLabel' });\r\n readonly previousLabel = computed(\r\n () => this.previousLabelInput() ?? pshResolveConfigValue(this.config.previousLabel) ?? 'Previous',\r\n );\r\n readonly nextLabelInput = input<string | undefined>(undefined, { alias: 'nextLabel' });\r\n readonly nextLabel = computed(\r\n () => this.nextLabelInput() ?? pshResolveConfigValue(this.config.nextLabel) ?? 'Next',\r\n );\r\n readonly lastLabelInput = input<string | undefined>(undefined, { alias: 'lastLabel' });\r\n readonly lastLabel = computed(\r\n () => this.lastLabelInput() ?? pshResolveConfigValue(this.config.lastLabel) ?? 'Last',\r\n );\r\n readonly ofLabelInput = input<string | undefined>(undefined, { alias: 'ofLabel' });\r\n /** Between the current page and the total. Its own word, because word order is not. */\r\n readonly ofLabel = computed(\r\n () => this.ofLabelInput() ?? pshResolveConfigValue(this.config.ofLabel) ?? 'of',\r\n );\r\n\r\n readonly pageLabelInput = input<string | undefined>(undefined, { alias: 'pageLabel' });\r\n readonly pageLabel = computed(\r\n () => this.pageLabelInput() ?? pshResolveConfigValue(this.config.pageLabel) ?? 'Page',\r\n );\r\n readonly itemsLabelInput = input<string | undefined>(undefined, { alias: 'itemsLabel' });\r\n readonly itemsLabel = computed(\r\n () => this.itemsLabelInput() ?? pshResolveConfigValue(this.config.itemsLabel) ?? 'items',\r\n );\r\n readonly itemsPerPageLabelInput = input<string | undefined>(undefined, { alias: 'itemsPerPageLabel' });\r\n readonly itemsPerPageLabel = computed(\r\n () => this.itemsPerPageLabelInput() ?? pshResolveConfigValue(this.config.itemsPerPageLabel) ?? 'Items per page',\r\n );\r\n readonly id = input<string>();\r\n readonly ariaLabelInput = input<string | undefined>(undefined, { alias: 'ariaLabel' });\r\n readonly ariaLabel = computed(\r\n () => this.ariaLabelInput() ?? pshResolveConfigValue(this.config.ariaLabel) ?? 'Pagination navigation',\r\n );\r\n\r\n pageChange = output<number>();\r\n itemsPerPageChange = output<number>();\r\n navigationError = output<PshNavigationError>();\r\n\r\n protected readonly navigationId = computed(() => {\r\n const customId = this.id();\r\n return customId || this.uniqueId;\r\n });\r\n\r\n protected readonly pages = computed(() => {\r\n const pages: number[] = [];\r\n const halfVisible = Math.floor(this.maxVisiblePages() / 2);\r\n let start = Math.max(1, this.currentPage() - halfVisible);\r\n const end = Math.min(this.effectiveTotalPages(), start + this.maxVisiblePages() - 1);\r\n\r\n if (end - start + 1 < this.maxVisiblePages()) {\r\n start = Math.max(1, end - this.maxVisiblePages() + 1);\r\n }\r\n\r\n for (let i = start; i <= end; i++) {\r\n pages.push(i);\r\n }\r\n\r\n return pages;\r\n });\r\n\r\n protected readonly state = computed(() => this.getState());\r\n\r\n protected readonly canGoNext = computed(() => this.currentPage() < this.effectiveTotalPages());\r\n protected readonly canGoPrevious = computed(() => this.currentPage() > 1);\r\n protected readonly isFirstPage = computed(() => this.currentPage() === 1);\r\n protected readonly isLastPage = computed(\r\n () => this.currentPage() === this.effectiveTotalPages(),\r\n );\r\n\r\n protected readonly currentPageAnnouncement = computed(() => {\r\n return `${this.pageLabel()} ${this.currentPage()} ${this.ofLabel()} ${this.effectiveTotalPages()}`;\r\n });\r\n\r\n private getState(): string {\r\n if (this.currentPage() === 1) return 'first';\r\n if (this.currentPage() === this.effectiveTotalPages()) return 'last';\r\n return 'flat';\r\n }\r\n\r\n goToPage(page: number): void {\r\n const total = this.effectiveTotalPages();\r\n if (page !== this.currentPage() && page >= 1 && page <= total) {\r\n this.currentPage.set(page);\r\n this.pageChange.emit(page);\r\n } else if (page < 1 || page > total) {\r\n this.navigationError.emit({\r\n action: 'goToPage',\r\n reason: 'out-of-bounds',\r\n target: page,\r\n message: `Page ${page} is out of bounds (1-${total})`,\r\n });\r\n }\r\n }\r\n\r\n goToFirstPage(): void {\r\n this.goToPage(1);\r\n }\r\n\r\n goToLastPage(): void {\r\n this.goToPage(this.effectiveTotalPages());\r\n }\r\n\r\n goToNextPage(): void {\r\n if (this.canGoNext()) {\r\n this.goToPage(this.currentPage() + 1);\r\n }\r\n }\r\n\r\n goToPreviousPage(): void {\r\n if (this.canGoPrevious()) {\r\n this.goToPage(this.currentPage() - 1);\r\n }\r\n }\r\n\r\n onItemsPerPageChange(event: Event): void {\r\n const value = parseInt((event.target as HTMLSelectElement).value);\r\n this.itemsPerPage.set(value);\r\n this.itemsPerPageChange.emit(value);\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n this.goToPreviousPage();\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n this.goToNextPage();\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.goToFirstPage();\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.goToLastPage();\r\n break;\r\n }\r\n }\r\n}\r\n","<nav\r\n class=\"psh-pagination\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [class.psh-outline]=\"appearance() === 'outline'\"\r\n role=\"navigation\"\r\n [attr.id]=\"navigationId()\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [attr.data-state]=\"state()\"\r\n (keydown)=\"onKeydown($event)\"\r\n>\r\n @if (showItemsPerPage()) {\r\n <div class=\"psh-items-per-page\">\r\n <label [attr.for]=\"navigationId() + '-items-select'\" class=\"psh-items-per-page-label\">\r\n {{ itemsPerPageLabel() }}\r\n </label>\r\n <select\r\n [attr.id]=\"navigationId() + '-items-select'\"\r\n (change)=\"onItemsPerPageChange($event)\"\r\n [attr.aria-label]=\"itemsPerPageLabel()\"\r\n >\r\n @for (option of itemsPerPageOptions(); track option) {\r\n <option [value]=\"option\" [selected]=\"option === itemsPerPage()\">\r\n {{ option }} {{ itemsLabel() }}\r\n </option>\r\n }\r\n </select>\r\n </div>\r\n }\r\n\r\n @if (showFirstLast()) {\r\n <button\r\n class=\"psh-page-button\"\r\n [class.psh-disabled]=\"isFirstPage()\"\r\n (click)=\"goToFirstPage()\"\r\n [attr.aria-label]=\"firstLabel()\"\r\n [disabled]=\"isFirstPage()\"\r\n type=\"button\"\r\n >\r\n <i class=\"ph ph-caret-double-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n @if (showPrevNext()) {\r\n <button\r\n class=\"psh-page-button\"\r\n [class.psh-disabled]=\"!canGoPrevious()\"\r\n (click)=\"goToPreviousPage()\"\r\n [attr.aria-label]=\"previousLabel()\"\r\n [disabled]=\"!canGoPrevious()\"\r\n type=\"button\"\r\n >\r\n <i class=\"ph ph-caret-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n @for (page of pages(); track page) {\r\n <button\r\n class=\"psh-page-button\"\r\n [class.psh-active]=\"page === currentPage()\"\r\n (click)=\"goToPage(page)\"\r\n [attr.aria-current]=\"page === currentPage() ? 'page' : null\"\r\n [attr.aria-label]=\"pageLabel() + ' ' + page\"\r\n type=\"button\"\r\n >\r\n {{ page }}\r\n </button>\r\n }\r\n\r\n @if (showPrevNext()) {\r\n <button\r\n class=\"psh-page-button\"\r\n [class.psh-disabled]=\"!canGoNext()\"\r\n (click)=\"goToNextPage()\"\r\n [attr.aria-label]=\"nextLabel()\"\r\n [disabled]=\"!canGoNext()\"\r\n type=\"button\"\r\n >\r\n <i class=\"ph ph-caret-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n @if (showFirstLast()) {\r\n <button\r\n class=\"psh-page-button\"\r\n [class.psh-disabled]=\"isLastPage()\"\r\n (click)=\"goToLastPage()\"\r\n [attr.aria-label]=\"lastLabel()\"\r\n [disabled]=\"isLastPage()\"\r\n type=\"button\"\r\n >\r\n <i class=\"ph ph-caret-double-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n <div class=\"psh-sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\r\n {{ currentPageAnnouncement() }}\r\n </div>\r\n</nav>","import { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, InjectionToken } from '@angular/core';\r\nimport { ProgressbarVariant, ProgressbarSize, ProgressbarMode, ProgressbarLabelPosition, ProgressbarConfig } from './progressbar.types';\r\n\r\nconst PROGRESSBAR_DEFAULTS = {\r\n value: 0,\r\n max: 100,\r\n color: 'primary',\r\n size: 'medium',\r\n showLabel: true,\r\n mode: 'default',\r\n labelPosition: 'top'\r\n} satisfies Partial<ProgressbarConfig>;\r\n\r\nexport const PROGRESSBAR_CONFIG = new InjectionToken<Partial<ProgressbarConfig>>('PROGRESSBAR_CONFIG', {\r\n factory: () => PROGRESSBAR_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-progressbar',\r\n imports: [],\r\n templateUrl: './progressbar.component.html',\r\n styleUrls: ['./progressbar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'progressbar-container',\r\n '[class.psh-small]': 'size() === \"small\"',\r\n '[class.psh-large]': 'size() === \"large\"',\r\n '[class.psh-label-bottom]': 'labelPosition() === \"bottom\"',\r\n '[class.psh-label-inline]': 'labelPosition() === \"inline\"',\r\n '[attr.data-state]': 'mode()',\r\n '[attr.aria-live]': '\"polite\"'\r\n }\r\n})\r\nexport class PshProgressbarComponent {\r\n private config = inject(PROGRESSBAR_CONFIG);\r\n\r\n // Model inputs for two-way binding\r\n readonly value = input(this.config.value ?? 0);\r\n readonly max = input(this.config.max ?? 100);\r\n\r\n // Regular inputs\r\n readonly color = input<ProgressbarVariant>(this.config.color ?? 'primary');\r\n readonly size = input<ProgressbarSize>(this.config.size ?? 'medium');\r\n readonly showLabel = input(this.config.showLabel ?? true);\r\n readonly mode = input<ProgressbarMode>(this.config.mode ?? 'default');\r\n readonly label = input<string>();\r\n readonly labelPosition = input<ProgressbarLabelPosition>(this.config.labelPosition ?? 'top');\r\n readonly ariaLabel = input<string>();\r\n\r\n // Outputs\r\n completed = output<void>();\r\n thresholdReached = output<number>();\r\n\r\n // Computed values\r\n readonly percentage = computed(() => {\r\n const val = this.value();\r\n const maxVal = this.max();\r\n if (maxVal <= 0) return 0;\r\n return Math.min(100, Math.max(0, (val / maxVal) * 100));\r\n });\r\n\r\n readonly isIndeterminate = computed(() => this.mode() === 'indeterminate');\r\n readonly isStriped = computed(() => this.mode() === 'striped' || this.mode() === 'animated');\r\n readonly isAnimated = computed(() => this.mode() === 'animated');\r\n\r\n readonly computedAriaValueText = computed(() => {\r\n if (this.ariaLabel()) return this.ariaLabel();\r\n if (this.isIndeterminate()) {\r\n return this.label() || 'Loading...';\r\n }\r\n return `${Math.round(this.percentage())}%`;\r\n });\r\n\r\n readonly displayLabel = computed(() => {\r\n if (this.isIndeterminate()) {\r\n return this.label() || 'Loading...';\r\n }\r\n return this.label() || `${Math.round(this.percentage())}%`;\r\n });\r\n\r\n constructor() {\r\n let previousThreshold = -1;\r\n let hasCompleted = false;\r\n\r\n effect(() => {\r\n const percentage = this.percentage();\r\n const val = this.value();\r\n const maxVal = this.max();\r\n\r\n if (val >= maxVal && maxVal > 0 && !hasCompleted) {\r\n this.completed.emit();\r\n hasCompleted = true;\r\n }\r\n\r\n if (val < maxVal) {\r\n hasCompleted = false;\r\n }\r\n\r\n const thresholds = [25, 50, 75];\r\n for (const threshold of thresholds) {\r\n if (percentage >= threshold && previousThreshold < threshold) {\r\n this.thresholdReached.emit(threshold);\r\n previousThreshold = threshold;\r\n }\r\n }\r\n\r\n if (percentage < 25) {\r\n previousThreshold = -1;\r\n }\r\n });\r\n }\r\n}","@if (showLabel()) {\r\n <span class=\"psh-progress-label\">{{ displayLabel() }}</span>\r\n}\r\n<div\r\n class=\"psh-progressbar\"\r\n [class.psh-striped]=\"isStriped()\"\r\n [class.psh-animated]=\"isAnimated()\"\r\n [class.psh-indeterminate]=\"isIndeterminate()\"\r\n role=\"progressbar\"\r\n [attr.aria-label]=\"ariaLabel() || label() || 'Progression'\"\r\n [attr.aria-valuenow]=\"isIndeterminate() ? null : value()\"\r\n [attr.aria-valuemin]=\"0\"\r\n [attr.aria-valuemax]=\"max()\"\r\n [attr.aria-valuetext]=\"computedAriaValueText()\"\r\n>\r\n <div\r\n class=\"psh-progress-track\"\r\n [class]=\"'psh-' + color()\"\r\n [style.width.%]=\"percentage()\"\r\n ></div>\r\n</div>","import { InjectionToken, Signal } from '@angular/core';\r\nimport { RadioSize } from './radio.types';\r\n\r\n/**\r\n * What a `psh-radio` needs from the group that contains it.\r\n *\r\n * A token rather than the component class, because the dependency runs both ways: the group\r\n * reads its radios through `contentChildren(PshRadioComponent)`, and each radio asks its\r\n * group what the selected value is. Importing the class in both directions is a cycle;\r\n * importing an interface in one direction is not.\r\n */\r\nexport interface PshRadioGroupApi<T = unknown> {\r\n /** The `name` every radio in the group shares, so the browser treats them as one set. */\r\n readonly name: Signal<string>;\r\n /** The selected value. A radio is checked when this equals its own `value`. */\r\n readonly value: Signal<T | null>;\r\n /** Disables every radio in the group at once. */\r\n readonly disabled: Signal<boolean>;\r\n /** Applies to every radio in the group: radios in one set should be the same size. */\r\n readonly size: Signal<RadioSize>;\r\n /** Whether the group is required, for `aria-required` on each radio. */\r\n readonly required: Signal<boolean>;\r\n /** Selects a value. The group owns it, so a radio asks rather than sets. */\r\n select(value: T): void;\r\n /** The user is done with the group — emitted once, by the group, not once per radio. */\r\n markTouched(): void;\r\n}\r\n\r\nexport const PSH_RADIO_GROUP = new InjectionToken<PshRadioGroupApi>('PSH_RADIO_GROUP');\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n isDevMode,\r\n model,\r\n output,\r\n signal,\r\n viewChild\r\n} from '@angular/core';\r\nimport { RadioSize, RadioConfig } from './radio.types';\r\nimport { InjectionToken } from '@angular/core';\r\nimport { PSH_RADIO_GROUP } from './radio-group.token';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\nimport { pshJoinAriaIds } from '../../utils/aria';\r\n\r\nconst RADIO_DEFAULTS = {\r\n checked: false,\r\n disabled: false,\r\n required: false,\r\n size: 'medium',\r\n labelPosition: 'right'\r\n} satisfies Partial<RadioConfig>;\r\n\r\nexport const RADIO_CONFIG = new InjectionToken<Partial<RadioConfig>>('RADIO_CONFIG', {\r\n factory: () => RADIO_DEFAULTS,\r\n});\r\n\r\nexport const RADIO_STYLES = new InjectionToken<Record<string, string>[]>('RADIO_STYLES', {\r\n factory: () => []\r\n});\r\n\r\n/**\r\n * One radio button.\r\n *\r\n * Inside a `psh-radio-group` it is presentational: the group owns the value and the radio\r\n * asks whether its own `value` is the selected one. On its own it still works as a standalone\r\n * two-way control through `[(checked)]`.\r\n *\r\n * That split is what let it become full-signal. It used to mix `@Input` setters and\r\n * `EventEmitter` with `output()` in one class, on the stated grounds that *« model() would\r\n * auto-emit checkedChange on .set() »* — which is not what `model()` does: a parent writing\r\n * the input does not emit, only the component writing it does. The real problem was that a\r\n * lone radio had no owner for its value. The group is that owner.\r\n *\r\n * Its arrow-key handlers used to be two empty methods commented *« Implementation requires\r\n * radio group context »*. They live on the group now, where that context exists.\r\n */\r\n@Component({\r\n selector: 'psh-radio',\r\n imports: [],\r\n templateUrl: './radio.component.html',\r\n styleUrls: ['./radio.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.psh-radio-disabled]': 'isDisabled()',\r\n '[class.psh-radio-error]': '!!error()',\r\n '[class.psh-radio-success]': '!!success()',\r\n '[class.psh-radio-small]': 'effectiveSize() === \"small\"',\r\n '[class.psh-radio-large]': 'effectiveSize() === \"large\"',\r\n '[attr.data-state]': 'state()'\r\n }\r\n})\r\nexport class PshRadioComponent<T = unknown> implements AfterViewInit {\r\n private config = inject(RADIO_CONFIG);\r\n private styles = inject(RADIO_STYLES, { optional: true }) ?? [];\r\n private uniqueId = pshUniqueId('radio');\r\n /** Holds the `label` input or the projected content — whichever provides the visible label. */\r\n private readonly labelSlot = viewChild<ElementRef<HTMLElement>>('labelSlot');\r\n private readonly radioInput = viewChild<ElementRef<HTMLInputElement>>('radioInput');\r\n\r\n /**\r\n * The group this radio belongs to, if any. Injected through a token rather than the\r\n * component class: the group reads its radios with `contentChildren`, so importing the\r\n * class in both directions would be a cycle.\r\n */\r\n private readonly group = inject(PSH_RADIO_GROUP, { optional: true });\r\n\r\n /** Standalone selection state. Inside a group, {@link isChecked} is what matters. */\r\n readonly checked = model(this.config.checked ?? false);\r\n readonly disabled = model(this.config.disabled ?? false);\r\n\r\n readonly required = input(this.config.required ?? false);\r\n\r\n // Regular inputs\r\n readonly label = input('');\r\n readonly error = input<string | null | undefined>(null);\r\n readonly success = input<string | null | undefined>(null);\r\n /** Guidance shown when there is neither an error nor a success message. */\r\n readonly hint = input<string | null | undefined>(null);\r\n\r\n /**\r\n * Extra ids for `aria-describedby`. **Merged** with the control's own — the id of its error,\r\n * success or hint message — never replacing them.\r\n */\r\n readonly ariaDescribedBy = input<string>();\r\n\r\n /**\r\n * Ids of the elements that name this control, for the cases a visible `<label>` cannot\r\n * cover. Merged with anything the control already points at.\r\n */\r\n readonly ariaLabelledBy = input<string>();\r\n readonly name = input('');\r\n readonly value = input<T | undefined>(undefined);\r\n readonly ariaLabel = input<string>();\r\n readonly size = input<RadioSize>(this.config.size ?? 'medium');\r\n readonly labelPosition = input<'left' | 'right'>(this.config.labelPosition ?? 'right');\r\n\r\n // Content projection tracking\r\n protected readonly hasProjectedContent = signal(false);\r\n\r\n readonly valueChange = output<T | undefined>();\r\n\r\n /** Whether this radio is the selected one — decided by the group when there is one. */\r\n readonly isChecked = computed(() =>\r\n this.group ? this.group.value() === this.value() : this.checked(),\r\n );\r\n\r\n /** Disabled by itself, or by the whole group. */\r\n readonly isDisabled = computed(() => this.disabled() || (this.group?.disabled() ?? false));\r\n\r\n /** The group's `name` wins: a native radio set is defined by sharing one. */\r\n protected readonly effectiveName = computed(() => this.group?.name() ?? this.name());\r\n\r\n /** Radios in one set should be one size, so the group's wins when there is a group. */\r\n protected readonly effectiveSize = computed(() => this.group?.size() ?? this.size());\r\n\r\n protected readonly effectiveRequired = computed(\r\n () => this.group?.required() ?? this.required(),\r\n );\r\n\r\n /**\r\n * Roving tabindex: one Tab stop per group rather than one per radio, which is what makes a\r\n * radio set a single stop with arrow keys inside it. The selected radio is the stop; when\r\n * nothing is selected yet, the first enabled one is.\r\n */\r\n protected readonly tabIndex = computed(() => {\r\n if (this.isDisabled()) return -1;\r\n if (!this.group) return 0;\r\n if (this.isChecked()) return 0;\r\n return this.group.value() == null && this.isFirstEnabled() ? 0 : -1;\r\n });\r\n\r\n // Computed values\r\n readonly customStyles = computed(() => Object.assign({}, ...this.styles));\r\n\r\n readonly state = computed(() => this.getState());\r\n\r\n readonly computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const labelText = this.label();\r\n if (labelText) return labelText;\r\n\r\n // No `aria-label` at all when nothing is declared: the `<label>` wrapping the input\r\n // already names it from a projected label. A hard-coded fallback would override that\r\n // visible text for screen readers (WCAG 2.5.3 \"Label in Name\").\r\n return undefined;\r\n });\r\n\r\n readonly errorMessageId = computed(() =>\r\n this.error() ? `${this.uniqueId}-error` : undefined\r\n );\r\n\r\n readonly successMessageId = computed(() =>\r\n this.success() ? `${this.uniqueId}-success` : undefined\r\n );\r\n\r\n readonly hintMessageId = computed(() =>\r\n this.hint() ? `${this.uniqueId}-hint` : undefined\r\n );\r\n\r\n // error, success and hint are mutually exclusive in the template (@if/@else if), so\r\n // aria-describedby references whichever message is actually rendered — in the same order.\r\n readonly describedBy = computed(() =>\r\n pshJoinAriaIds(\r\n this.errorMessageId() ?? this.successMessageId() ?? this.hintMessageId(),\r\n this.ariaDescribedBy(),\r\n ),\r\n );\r\n\r\n ngAfterViewInit(): void {\r\n if (!isDevMode()) return;\r\n\r\n // Read the rendered label slot rather than the `label` input alone: a projected\r\n // label (`<psh-radio>Accept terms</psh-radio>`) is just as accessible, and\r\n // `contentChild` cannot see a bare text node. Checked once, after the first render.\r\n const hasVisibleLabel = !!this.labelSlot()?.nativeElement.textContent?.trim();\r\n if (!hasVisibleLabel && !this.ariaLabel() && !this.hasProjectedContent()) {\r\n console.warn(\r\n '[psh-radio] No accessible label provided. Please use label input, ariaLabel input, or projected content.'\r\n );\r\n }\r\n }\r\n\r\n /** Focuses the native input. The group calls this when arrow keys move the selection. */\r\n focus(): void {\r\n this.radioInput()?.nativeElement.focus();\r\n }\r\n\r\n /**\r\n * Whether this is the first enabled radio of its group, which only matters for the roving\r\n * tabindex before anything is selected. Read from the DOM rather than from the group's\r\n * `contentChildren`, because asking the group here would make the two read each other's\r\n * signals during the same computation.\r\n */\r\n private isFirstEnabled(): boolean {\r\n const el = this.radioInput()?.nativeElement;\r\n const group = el?.closest('psh-radio-group');\r\n if (!el || !group) return false;\r\n return group.querySelector('psh-radio:not(.psh-radio-disabled) input') === el;\r\n }\r\n\r\n private getState(): string {\r\n if (this.isDisabled()) return 'disabled';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n return this.isChecked() ? 'checked' : 'unchecked';\r\n }\r\n\r\n /**\r\n * Declares whether a label is projected. No longer required — projected content is now\r\n * detected from the rendered label slot. Kept for backwards compatibility: calling it\r\n * with `true` still suppresses the dev-only accessibility warning.\r\n */\r\n updateProjectedContent(hasContent: boolean): void {\r\n this.hasProjectedContent.set(hasContent);\r\n }\r\n\r\n handleChange(): void {\r\n if (this.isDisabled()) return;\r\n\r\n if (this.group) {\r\n // The group owns the value, so it decides — including whether anything changed at all.\r\n this.group.select(this.value() as T);\r\n return;\r\n }\r\n\r\n if (!this.checked()) {\r\n this.checked.set(true);\r\n this.valueChange.emit(this.value());\r\n }\r\n }\r\n\r\n protected handleKeydown(event: KeyboardEvent): void {\r\n if (this.isDisabled()) return;\r\n\r\n switch (event.key) {\r\n case ' ':\r\n case 'Spacebar':\r\n case 'Enter':\r\n event.preventDefault();\r\n this.handleChange();\r\n break;\r\n }\r\n // Arrow keys are the group's business: moving between radios needs to know what the\r\n // other radios are. See PshRadioGroupComponent.handleKeydown.\r\n }\r\n}\r\n","<div class=\"psh-radio-container\">\r\n <label class=\"psh-radio-label\" [class.psh-label-left]=\"labelPosition() === 'left'\">\r\n <input\r\n #radioInput\r\n type=\"radio\"\r\n class=\"psh-radio-input\"\r\n [checked]=\"isChecked()\"\r\n [disabled]=\"isDisabled()\"\r\n [required]=\"effectiveRequired()\"\r\n [name]=\"effectiveName()\"\r\n [tabIndex]=\"tabIndex()\"\r\n [attr.value]=\"value()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-required]=\"effectiveRequired() || null\"\r\n [attr.aria-invalid]=\"error() ? 'true' : null\"\r\n [attr.aria-checked]=\"isChecked()\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n (change)=\"handleChange()\"\r\n (keydown)=\"handleKeydown($event)\"\r\n />\r\n <span\r\n class=\"psh-radio-control\"\r\n [class.psh-error]=\"!!error()\"\r\n [class.psh-success]=\"!!success()\"\r\n >\r\n <span class=\"psh-radio-dot\"></span>\r\n </span>\r\n <span class=\"psh-radio-text\" #labelSlot>\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <ng-content></ng-content>\r\n }\r\n </span>\r\n </label>\r\n\r\n @if (error()) {\r\n <div [id]=\"errorMessageId()\" class=\"psh-radio-error\" role=\"alert\">\r\n {{ error() }}\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"successMessageId()\" class=\"psh-radio-success\" role=\"status\">\r\n {{ success() }}\r\n </div>\r\n } @else if (hint()) {\r\n <div [id]=\"hintMessageId()\" class=\"psh-radio-hint\">\r\n {{ hint() }}\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n InjectionToken,\r\n computed,\r\n contentChildren,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n effect,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\r\nimport type { FormValueControl } from '@angular/forms/signals';\r\n\r\nimport { PshRadioComponent } from './radio.component';\r\nimport { PSH_RADIO_GROUP, PshRadioGroupApi } from './radio-group.token';\r\nimport { RadioSize } from './radio.types';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\nimport { pshRequiredError } from '../../utils/required-validator';\r\nimport { pshJoinAriaIds } from '../../utils/aria';\r\n\r\nexport interface RadioGroupConfig {\r\n size: RadioSize;\r\n orientation: 'vertical' | 'horizontal';\r\n required: boolean;\r\n}\r\n\r\nconst RADIO_GROUP_DEFAULTS = {\r\n size: 'medium',\r\n orientation: 'vertical',\r\n required: false,\r\n} satisfies Partial<RadioGroupConfig>;\r\n\r\nexport const RADIO_GROUP_CONFIG = new InjectionToken<Partial<RadioGroupConfig>>(\r\n 'RADIO_GROUP_CONFIG',\r\n { factory: () => RADIO_GROUP_DEFAULTS },\r\n);\r\n\r\n/**\r\n * A set of radio buttons, and the thing that carries the form contract for them.\r\n *\r\n * `psh-radio` never could. The value of a radio in a form is not a boolean per button, it is\r\n * *which one of the set is selected* — so there was nothing to bind a form control to, and\r\n * `formControlName`, `[(ngModel)]` and `[formField]` all did nothing on a radio. The group is\r\n * what was missing, not a fix to the radio.\r\n *\r\n * It owns the value; the radios ask. That also removes the reason `psh-radio` avoided\r\n * `model()`: a radio no longer has its own value to guard against echoing.\r\n *\r\n * Supports all three binding styles:\r\n *\r\n * @example\r\n * <psh-radio-group [(value)]=\"plan\" label=\"Plan\"> <!-- plain two-way -->\r\n * <psh-radio-group formControlName=\"plan\"> <!-- Reactive Forms -->\r\n * <psh-radio-group [field]=\"f.plan\"> <!-- Signal Forms -->\r\n * <psh-radio value=\"free\" label=\"Free\" />\r\n * <psh-radio value=\"pro\" label=\"Pro\" />\r\n * </psh-radio-group>\r\n */\r\n@Component({\r\n selector: 'psh-radio-group',\r\n templateUrl: './radio-group.component.html',\r\n styleUrls: ['./radio-group.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: NG_VALIDATORS, useExisting: PshRadioGroupComponent, multi: true },\r\n { provide: NG_VALUE_ACCESSOR, useExisting: PshRadioGroupComponent, multi: true },\r\n { provide: PSH_RADIO_GROUP, useExisting: PshRadioGroupComponent },\r\n ],\r\n host: {\r\n role: 'radiogroup',\r\n '[class.psh-radio-group]': 'true',\r\n '[class.psh-horizontal]': 'orientation() === \"horizontal\"',\r\n '[class.psh-radio-group-disabled]': 'disabled()',\r\n '[attr.aria-label]': 'ariaLabel() || null',\r\n '[attr.aria-labelledby]': 'labelId()',\r\n '[attr.aria-describedby]': 'describedBy()',\r\n '[attr.aria-required]': 'required() || null',\r\n '[attr.aria-invalid]': 'error() ? \"true\" : null',\r\n '[attr.aria-orientation]': 'orientation()',\r\n '(keydown)': 'handleKeydown($event)',\r\n '(focusout)': 'handleFocusOut($event)',\r\n },\r\n})\r\nexport class PshRadioGroupComponent<T = unknown>\r\n implements ControlValueAccessor, FormValueControl<T | null>, PshRadioGroupApi<T>, Validator\r\n{\r\n private readonly config = inject(RADIO_GROUP_CONFIG);\r\n private readonly uniqueId = pshUniqueId('radio-group');\r\n\r\n private onChange: (value: T | null) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n private onValidatorChange: () => void = () => {};\r\n\r\n /** Required by `FormValueControl`: the group is what a field binds to. */\r\n readonly value = model<T | null>(null);\r\n readonly disabled = model(false);\r\n readonly touched = model(false);\r\n\r\n /**\r\n * Emitted when the user leaves the group.\r\n *\r\n * `FormUiControl` declares this, and the `Field` directive listens to **it** rather than to\r\n * `touchedChange`, so blur-based rules such as `debounce('blur')` depend on it.\r\n */\r\n readonly touch = output<void>();\r\n\r\n /**\r\n * The shared `name`. Defaults to a generated one so two groups on a page never merge into\r\n * a single native radio set by accident.\r\n */\r\n readonly name = input(this.uniqueId);\r\n readonly required = input(this.config.required ?? false);\r\n readonly size = input<RadioSize>(this.config.size ?? 'medium');\r\n readonly orientation = input<'vertical' | 'horizontal'>(\r\n this.config.orientation ?? 'vertical',\r\n );\r\n\r\n /** Visible group label, rendered as a `<legend>`-equivalent and referenced by ARIA. */\r\n readonly label = input('');\r\n readonly ariaLabel = input<string>();\r\n readonly error = input<string | null | undefined>(null);\r\n readonly success = input<string | null | undefined>(null);\r\n /** Guidance shown when there is neither an error nor a success message. */\r\n readonly hint = input<string | null | undefined>(null);\r\n\r\n /**\r\n * Extra ids for `aria-describedby`. **Merged** with the control's own — the id of its error,\r\n * success or hint message — never replacing them.\r\n */\r\n readonly ariaDescribedBy = input<string>();\r\n\r\n /**\r\n * Ids of the elements that name this control, for the cases a visible `<label>` cannot\r\n * cover. Merged with anything the control already points at.\r\n */\r\n readonly ariaLabelledBy = input<string>();\r\n\r\n protected readonly radios = contentChildren(PshRadioComponent);\r\n\r\n protected readonly labelId = computed(() =>\r\n this.label() && !this.ariaLabel() ? `${this.uniqueId}-label` : null,\r\n );\r\n protected readonly errorId = computed(() =>\r\n this.error() ? `${this.uniqueId}-error` : null,\r\n );\r\n protected readonly successId = computed(() =>\r\n this.success() ? `${this.uniqueId}-success` : null,\r\n );\r\n protected readonly hintId = computed(() => (this.hint() ? `${this.uniqueId}-hint` : null));\r\n\r\n // Same order as the template's @if/@else-if chain: aria-describedby must name the message\r\n // that is actually rendered, not the first one that happens to be set.\r\n protected readonly describedBy = computed(() =>\r\n pshJoinAriaIds(\r\n this.errorId() ?? this.successId() ?? this.hintId(),\r\n this.ariaDescribedBy(),\r\n ),\r\n );\r\n\r\n /** Called by a child radio. The group owns the value, so the radio asks rather than sets. */\r\n select(value: T): void {\r\n if (this.disabled()) return;\r\n if (this.value() === value) return;\r\n\r\n // `value` is a model, so setting it already emits `valueChange`. Declaring one as well\r\n // is NG1054: \"Output 'valueChange' is bound to both 'value' and 'valueChange'\".\r\n this.value.set(value);\r\n this.onChange(value);\r\n this.markTouched();\r\n }\r\n\r\n markTouched(): void {\r\n this.onTouched();\r\n this.touched.set(true);\r\n this.touch.emit();\r\n }\r\n\r\n /**\r\n * Arrow keys move *and select*, which is the APG radiogroup behaviour — a radio set has no\r\n * \"focused but unselected\" state to navigate through. Disabled radios are skipped, and the\r\n * ends wrap.\r\n */\r\n protected handleKeydown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n\r\n const enabled = this.radios().filter(radio => !radio.isDisabled());\r\n if (enabled.length === 0) return;\r\n\r\n const current = enabled.findIndex(radio => radio.isChecked());\r\n let next: number;\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n case 'ArrowRight':\r\n next = current < 0 ? 0 : (current + 1) % enabled.length;\r\n break;\r\n case 'ArrowUp':\r\n case 'ArrowLeft':\r\n next = current < 0 ? enabled.length - 1 : (current - 1 + enabled.length) % enabled.length;\r\n break;\r\n case 'Home':\r\n next = 0;\r\n break;\r\n case 'End':\r\n next = enabled.length - 1;\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n const target = enabled[next];\r\n if (!target) return;\r\n\r\n event.preventDefault();\r\n this.select(target.value() as T);\r\n target.focus();\r\n }\r\n\r\n /**\r\n * Touched when focus leaves the *group*, not when it moves between its radios — arrow\r\n * navigation blurs one radio and focuses the next, which is not the user leaving.\r\n */\r\n protected handleFocusOut(event: FocusEvent): void {\r\n const next = event.relatedTarget as Node | null;\r\n const host = (event.currentTarget as HTMLElement) ?? null;\r\n if (next && host?.contains(next)) return;\r\n this.markTouched();\r\n }\r\n\r\n constructor() {\r\n // A value change revalidates by itself; a change to `required` does not — Angular has\r\n // no reason to suspect the validator's answer moved. This is what the callback is for.\r\n effect(() => {\r\n this.required();\r\n this.onValidatorChange();\r\n });\r\n }\r\n\r\n writeValue(value: T | null): void {\r\n this.value.set(value ?? null);\r\n }\r\n\r\n registerOnChange(fn: (value: T | 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.set(isDisabled);\r\n }\r\n\r\n /** Focuses the selected radio, or the first enabled one when nothing is selected. */\r\n focus(): void {\r\n const enabled = this.radios().filter(radio => !radio.isDisabled());\r\n const target = enabled.find(radio => radio.isChecked()) ?? enabled[0];\r\n target?.focus();\r\n }\r\n\r\n /**\r\n * Makes `required` a real constraint rather than an asterisk.\r\n *\r\n * Re-run whenever `required` or the value changes: `registerOnValidatorChange` gives us\r\n * the callback that tells Angular to revalidate, and an effect fires it.\r\n */\r\n validate(): ValidationErrors | null {\r\n return pshRequiredError(this.required(), this.value() === null || this.value() === undefined);\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.onValidatorChange = fn;\r\n }\r\n\r\n}\r\n","@if (label()) {\r\n <span [id]=\"labelId()\" class=\"psh-radio-group-label\">\r\n {{ label() }}\r\n @if (required()) {\r\n <span class=\"psh-required-mark\" aria-hidden=\"true\">*</span>\r\n }\r\n </span>\r\n}\r\n\r\n<div class=\"psh-radio-group-items\">\r\n <ng-content></ng-content>\r\n</div>\r\n\r\n@if (error()) {\r\n <div [id]=\"errorId()!\" class=\"psh-radio-group-error\" role=\"alert\">{{ error() }}</div>\r\n} @else if (success()) {\r\n <div [id]=\"successId()!\" class=\"psh-radio-group-success\" role=\"status\">{{ success() }}</div>\r\n} @else if (hint()) {\r\n <div [id]=\"hintId()!\" class=\"psh-radio-group-hint\">{{ hint() }}</div>\r\n}\r\n","/**\r\n * Application-wide defaults for `psh-select`.\r\n *\r\n * Provide it to set a default once for every psh-select in the application:\r\n *\r\n * provideHelix({ components: { select: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { SelectConfig } from './select.types';\r\n\r\nconst SELECT_DEFAULTS = {\r\n appearance: 'outline',\r\n size: 'medium',\r\n searchable: false,\r\n clearable: false,\r\n fullWidth: false,\r\n placeholder: 'Select an option',\r\n multiplePlaceholder: 'Select options',\r\n noResultsText: 'No results',\r\n clearLabel: 'Clear selection',\r\n searchPlaceholder: 'Search...',\r\n} satisfies Partial<SelectConfig>;\r\n\r\nexport const SELECT_CONFIG = new InjectionToken<Partial<SelectConfig>>('SELECT_CONFIG', {\r\n factory: () => SELECT_DEFAULTS,\r\n});\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n effect,\r\n OnDestroy,\r\n InjectionToken,\r\n PLATFORM_ID\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { isPlatformBrowser, DOCUMENT } from '@angular/common';\r\nimport { PshFocusTrapDirective } from '../../a11y/focus-trap.directive';\r\nimport { SidebarMode, SidebarPosition, SidebarConfig } from './sidebar.types';\r\n\r\nconst SIDEBAR_DEFAULTS = {\r\n mode: 'fixed',\r\n position: 'left',\r\n width: '250px',\r\n breakpoint: '47.9375em',\r\n autoFocus: true,\r\n ariaLabel: 'Sidebar navigation',\r\n closeOnBackdrop: true,\r\n closeOnEscape: true\r\n} satisfies Partial<SidebarConfig>;\r\n\r\nexport const SIDEBAR_CONFIG = new InjectionToken<Partial<SidebarConfig>>('SIDEBAR_CONFIG', {\r\n factory: () => SIDEBAR_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-sidebar',\r\n imports: [PshFocusTrapDirective],\r\n templateUrl: './sidebar.component.html',\r\n styleUrls: ['./sidebar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n // `complementary` allows neither aria-expanded nor aria-modal. aria-expanded belongs\r\n // on the trigger outside this component; aria-modal only exists on a dialog, which is\r\n // exactly what an open overlay sidebar is — so the role follows the mode.\r\n '[attr.role]': 'effectiveMode() === \"overlay\" ? \"dialog\" : \"complementary\"',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n '[attr.aria-hidden]': '!open()',\r\n '[attr.aria-modal]': 'effectiveMode() === \"overlay\" && open() ? \"true\" : null',\r\n '[attr.inert]': 'open() ? null : \"\"',\r\n '[attr.data-state]': 'state()'\r\n }\r\n})\r\nexport class PshSidebarComponent implements OnDestroy {\r\n private readonly config = inject(SIDEBAR_CONFIG);\r\n private readonly platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n private mediaQueryList: MediaQueryList | null = null;\r\n private pendingFrame: number | null = null;\r\n private mediaQueryHandler: ((e: MediaQueryListEvent) => void) | null = null;\r\n\r\n readonly open = model(false);\r\n readonly mode = input<SidebarMode>(this.config.mode ?? 'fixed');\r\n readonly position = input<SidebarPosition>(this.config.position ?? 'left');\r\n readonly width = input<string>(this.config.width ?? '250px');\r\n /**\r\n * The width below which the sidebar becomes an overlay.\r\n *\r\n * Defaults to the `md` step of the library's scale, in `em` like every media query it ships:\r\n * a px breakpoint does not follow browser zoom, so at 150% the rest of the page had switched\r\n * to its narrow layout while the sidebar was still docked. It is also exclusive — `768px` was\r\n * true at exactly 768px, where a `min-width: 48em` rule is true as well.\r\n *\r\n * Any CSS length is still accepted, so `'768px'` keeps working.\r\n */\r\n readonly breakpoint = input<string>(this.config.breakpoint ?? '47.9375em');\r\n readonly autoFocus = input<boolean>(this.config.autoFocus ?? true);\r\n readonly ariaLabelInput = input<string | undefined>(undefined, { alias: 'ariaLabel' });\r\n readonly ariaLabel = computed(\r\n () => this.ariaLabelInput() ?? pshResolveConfigValue(this.config.ariaLabel) ?? 'Sidebar navigation',\r\n );\r\n readonly closeOnBackdrop = input<boolean>(this.config.closeOnBackdrop ?? true);\r\n readonly closeOnEscape = input<boolean>(this.config.closeOnEscape ?? true);\r\n\r\n // Was `toggle`, the only infinitive output in the library and a native event name, which\r\n // needed an eslint exemption to exist. `toggled` matches collapse — same idea, same word —\r\n // and the clash is gone with it.\r\n toggled = output<boolean>();\r\n opened = output<void>();\r\n closed = output<void>();\r\n transitionStarted = output<boolean>();\r\n\r\n private readonly mobileSignal = signal(false);\r\n private previousOpenState: boolean | null = null;\r\n\r\n readonly isMobile = computed(() => this.mobileSignal());\r\n readonly effectiveMode = computed(() => this.isMobile() ? 'overlay' : this.mode());\r\n readonly state = computed(() => this.getState());\r\n\r\n private readonly escapeHandler = (event: KeyboardEvent) => {\r\n if (event.key === 'Escape' && this.closeOnEscape() && this.effectiveMode() === 'overlay') {\r\n this.closeSidebar();\r\n }\r\n };\r\n\r\n private getState(): string {\r\n if (this.isMobile()) return 'mobile';\r\n if (this.open()) return 'open';\r\n return this.mode();\r\n }\r\n\r\n constructor() {\r\n effect(() => {\r\n const bp = this.breakpoint();\r\n this.setupMediaQuery(bp);\r\n });\r\n\r\n effect(() => {\r\n const isOpen = this.open();\r\n const wasOpen = this.previousOpenState;\r\n this.previousOpenState = isOpen;\r\n\r\n if (wasOpen === null) return;\r\n\r\n if (isOpen && !wasOpen) {\r\n this.onSidebarOpen();\r\n } else if (!isOpen && wasOpen) {\r\n this.onSidebarClose();\r\n }\r\n });\r\n }\r\n\r\n private setupMediaQuery(breakpoint: string): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n this.cleanupMediaQuery();\r\n\r\n const view = this.document.defaultView;\r\n if (!view) return;\r\n\r\n this.mediaQueryList = view.matchMedia(`(max-width: ${breakpoint})`);\r\n this.mobileSignal.set(this.mediaQueryList.matches);\r\n\r\n this.mediaQueryHandler = (e: MediaQueryListEvent) => {\r\n this.mobileSignal.set(e.matches);\r\n };\r\n\r\n this.mediaQueryList.addEventListener('change', this.mediaQueryHandler);\r\n }\r\n\r\n private cleanupMediaQuery(): void {\r\n if (this.mediaQueryList && this.mediaQueryHandler) {\r\n this.mediaQueryList.removeEventListener('change', this.mediaQueryHandler);\r\n this.mediaQueryList = null;\r\n this.mediaQueryHandler = null;\r\n }\r\n }\r\n\r\n private onSidebarOpen(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n // Focus trap + initial focus + focus restoration are handled by\r\n // PshFocusTrapDirective on the .sidebar element (see the template).\r\n this.addEventListeners();\r\n\r\n this.scheduleEmit(() => this.opened.emit());\r\n }\r\n\r\n private onSidebarClose(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n this.removeEventListeners();\r\n\r\n this.scheduleEmit(() => this.closed.emit());\r\n }\r\n\r\n /**\r\n * Defers an emit by one frame so listeners see the panel after it has been laid out.\r\n * The handle is kept so a pending frame cannot fire from a destroyed component.\r\n */\r\n private scheduleEmit(emit: () => void): void {\r\n const view = this.document.defaultView;\r\n if (!view) return;\r\n\r\n if (this.pendingFrame !== null) view.cancelAnimationFrame(this.pendingFrame);\r\n this.pendingFrame = view.requestAnimationFrame(() => {\r\n this.pendingFrame = null;\r\n emit();\r\n });\r\n }\r\n\r\n private addEventListeners(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n this.document.addEventListener('keydown', this.escapeHandler);\r\n }\r\n\r\n private removeEventListeners(): void {\r\n if (!isPlatformBrowser(this.platformId)) return;\r\n this.document.removeEventListener('keydown', this.escapeHandler);\r\n }\r\n\r\n toggleSidebar(): void {\r\n const newState = !this.open();\r\n this.transitionStarted.emit(newState);\r\n this.open.set(newState);\r\n this.toggled.emit(newState);\r\n }\r\n\r\n closeSidebar(): void {\r\n if (this.open()) {\r\n this.transitionStarted.emit(false);\r\n this.open.set(false);\r\n this.toggled.emit(false);\r\n }\r\n }\r\n\r\n handleBackdropClick(): void {\r\n if (this.closeOnBackdrop()) {\r\n this.closeSidebar();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.cleanupMediaQuery();\r\n this.removeEventListeners();\r\n\r\n if (this.pendingFrame !== null) {\r\n this.document.defaultView?.cancelAnimationFrame(this.pendingFrame);\r\n this.pendingFrame = null;\r\n }\r\n }\r\n}\r\n","<div\r\n class=\"psh-sidebar\"\r\n [class.psh-open]=\"open()\"\r\n [class.psh-fixed]=\"effectiveMode() === 'fixed'\"\r\n [class.psh-overlay]=\"effectiveMode() === 'overlay'\"\r\n [class.psh-left]=\"position() === 'left'\"\r\n [class.psh-right]=\"position() === 'right'\"\r\n [style.width]=\"width()\"\r\n [style.--psh-sidebar-width]=\"width()\"\r\n [pshFocusTrap]=\"open()\"\r\n [pshFocusTrapAutoFocus]=\"autoFocus()\"\r\n>\r\n <div class=\"psh-sidebar-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n</div>\r\n\r\n@if (effectiveMode() === 'overlay' && open()) {\r\n <div\r\n class=\"psh-sidebar-backdrop\"\r\n role=\"presentation\"\r\n (click)=\"handleBackdropClick()\"\r\n ></div>\r\n}","import {\r\n computed, ChangeDetectionStrategy, Component, DestroyRef, inject, input, signal, InjectionToken, PLATFORM_ID } from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { SpinLoaderVariant, SpinLoaderSize, SpinLoaderColor, SpinLoaderConfig } from './spinloader.types';\r\n\r\nconst SPINLOADER_DEFAULTS = {\r\n variant: 'circle',\r\n size: 'medium',\r\n color: 'primary',\r\n ariaLabel: 'Loading',\r\n} satisfies Partial<SpinLoaderConfig>;\r\n\r\nexport const SPINLOADER_CONFIG = new InjectionToken<Partial<SpinLoaderConfig>>('SPINLOADER_CONFIG', {\r\n factory: () => SPINLOADER_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-spinloader',\r\n imports: [],\r\n templateUrl: './spinloader.component.html',\r\n styleUrls: ['./spinloader.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n 'role': 'status',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n '[attr.aria-live]': 'ariaLive()',\r\n '[attr.aria-busy]': 'true',\r\n '[attr.data-state]': 'variant()',\r\n '[class.psh-small]': 'size() === \"small\"',\r\n '[class.psh-large]': 'size() === \"large\"',\r\n '[class.psh-reduce-motion]': 'reduceMotion()',\r\n }\r\n})\r\nexport class PshSpinLoaderComponent {\r\n private config = inject(SPINLOADER_CONFIG);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n readonly variant = input<SpinLoaderVariant>(this.config.variant ?? 'circle');\r\n readonly size = input<SpinLoaderSize>(this.config.size ?? 'medium');\r\n readonly color = input<SpinLoaderColor>(this.config.color ?? 'primary');\r\n readonly label = input<string>();\r\n readonly ariaLabelInput = input<string | undefined>(undefined, { alias: 'ariaLabel' });\r\n readonly ariaLabel = computed(\r\n () => this.ariaLabelInput() ?? pshResolveConfigValue(this.config.ariaLabel) ?? 'Chargement en cours',\r\n );\r\n readonly ariaLive = input<'polite' | 'assertive'>('polite');\r\n\r\n readonly reduceMotion = signal(false);\r\n\r\n constructor() {\r\n // Read the media query once at construction so the very first browser render is\r\n // already correct, and keep the listener for later OS-level changes. Not an effect:\r\n // there is no signal dependency to track, and the listener needs explicit teardown.\r\n if (!this.isBrowser) return;\r\n\r\n const view = this.document.defaultView;\r\n if (!view || typeof view.matchMedia !== 'function') return;\r\n\r\n const mediaQuery = view.matchMedia('(prefers-reduced-motion: reduce)');\r\n this.reduceMotion.set(mediaQuery.matches);\r\n\r\n const handler = (e: MediaQueryListEvent) => this.reduceMotion.set(e.matches);\r\n mediaQuery.addEventListener('change', handler);\r\n this.destroyRef.onDestroy(() => mediaQuery.removeEventListener('change', handler));\r\n }\r\n}\r\n","@switch (variant()) {\r\n @case ('circle') {\r\n <div class=\"psh-spinner-circle\" [class]=\"'psh-' + color()\"></div>\r\n }\r\n @case ('dots') {\r\n <div class=\"psh-spinner-dots\" [class]=\"'psh-' + color()\">\r\n <div class=\"psh-dot\"></div>\r\n <div class=\"psh-dot\"></div>\r\n <div class=\"psh-dot\"></div>\r\n </div>\r\n }\r\n @case ('pulse') {\r\n <div class=\"psh-spinner-pulse\" [class]=\"'psh-' + color()\">\r\n <div class=\"psh-pulse\"></div>\r\n <div class=\"psh-pulse\"></div>\r\n <div class=\"psh-pulse\"></div>\r\n </div>\r\n }\r\n}\r\n\r\n@if (label()) {\r\n <span class=\"psh-spinner-label\">{{ label() }}</span>\r\n}\r\n","/**\r\n * Application-wide defaults for `psh-stat-card`.\r\n *\r\n * Provide it to set a default once for every psh-stat-card in the application:\r\n *\r\n * provideHelix({ components: { statCard: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { StatCardConfig } from './stat-card.types';\r\n\r\nconst STAT_CARD_DEFAULTS = {\r\n appearance: 'elevated',\r\n layout: 'horizontal',\r\n hoverable: false,\r\n interactive: false,\r\n rowDirection: false,\r\n} satisfies Partial<StatCardConfig>;\r\n\r\nexport const STAT_CARD_CONFIG = new InjectionToken<Partial<StatCardConfig>>('STAT_CARD_CONFIG', {\r\n factory: () => STAT_CARD_DEFAULTS,\r\n});\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * What a `psh-flow-step` needs from the indicator it sits in: the id prefix its tab uses.\r\n *\r\n * See `PSH_STEPPER` for why this is a token and not an import, and for what the global ids\r\n * `flow-step-0` / `flow-panel-0` did to a page holding two of these.\r\n */\r\nexport interface PshStateFlowApi {\r\n /** Unique per indicator instance. Tabs are `<prefix>-tab-<i>`, panels `<prefix>-panel-<i>`. */\r\n readonly idPrefix: string;\r\n}\r\n\r\nexport const PSH_STATE_FLOW = new InjectionToken<PshStateFlowApi>('PSH_STATE_FLOW');\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n input,\r\n signal\r\n} from '@angular/core';\r\nimport { PSH_STATE_FLOW } from './state-flow-indicator.token';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\n/**\r\n * One step of a `psh-state-flow-indicator`, and the panel that belongs to it.\r\n *\r\n * Until 7.0.0 this component was `template: ''` with a permanent `display: none`, so anything\r\n * projected into it was **silently discarded** — and `psh-state-flow-indicator` had no\r\n * `<ng-content>` either, so there was nowhere for it to go. A developer copying the\r\n * `psh-step` pattern, which does project, got a blank screen and no error.\r\n *\r\n * It now behaves like `psh-step`: the active step's content is shown, the others are hidden,\r\n * and each is a `tabpanel` labelled by its tab.\r\n */\r\n@Component({\r\n selector: 'psh-flow-step',\r\n template: `<ng-content />`,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.psh-flow-step-content]': 'true',\r\n '[class.psh-active]': 'isActive()',\r\n '[attr.role]': '\"tabpanel\"',\r\n '[attr.aria-labelledby]': 'idPrefix + \"-tab-\" + index()',\r\n '[attr.id]': 'idPrefix + \"-panel-\" + index()',\r\n '[attr.tabindex]': 'isActive() ? 0 : -1',\r\n '[style.display]': 'isActive() ? \"block\" : \"none\"'\r\n }\r\n})\r\nexport class PshFlowStepComponent {\r\n /** The indicator's id prefix; see `PshStepComponent` for the fallback. */\r\n protected readonly idPrefix =\r\n inject(PSH_STATE_FLOW, { optional: true })?.idPrefix ?? pshUniqueId('flow-step');\r\n\r\n readonly title = input.required<string>();\r\n /** Secondary line under the title. Parity with `psh-step`, which had it and this did not. */\r\n readonly subtitle = input<string>();\r\n /** Phosphor icon name, shown instead of the state icon. Parity with `psh-step`. */\r\n readonly icon = input<string>();\r\n readonly disabled = input(false);\r\n readonly completed = input(false);\r\n readonly loading = input(false);\r\n readonly error = input<string | null | undefined>(null);\r\n readonly warning = input<string | null | undefined>(null);\r\n /** Parity with `psh-step`. */\r\n readonly success = input<string | null | undefined>(null);\r\n\r\n private readonly _index = signal(0);\r\n private readonly _isActive = signal(false);\r\n\r\n readonly index = this._index.asReadonly();\r\n readonly isActive = this._isActive.asReadonly();\r\n\r\n setIndex(value: number): void {\r\n this._index.set(value);\r\n }\r\n\r\n setActive(value: boolean): void {\r\n this._isActive.set(value);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n InjectionToken,\r\n afterNextRender\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { PshNavigationError } from '../../types/semantic.types';\r\nimport { StateFlowIndicatorSize, FlowStepConfig, StateFlowIndicatorConfig, StateFlowIndicatorAriaLabels } from './state-flow-indicator.types';\r\nimport { PshFlowStepComponent } from './flow-step.component';\r\nimport { PSH_STATE_FLOW, PshStateFlowApi } from './state-flow-indicator.token';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\nconst DEFAULT_ARIA_LABELS: StateFlowIndicatorAriaLabels = {\r\n step: 'Step',\r\n completed: 'Step completed',\r\n active: 'Step active',\r\n incomplete: 'Step incomplete',\r\n disabled: 'Step disabled',\r\n warning: 'Step with warning',\r\n error: 'Step in error'\r\n};\r\n\r\nconst STATE_FLOW_INDICATOR_DEFAULTS = {\r\n linear: true,\r\n ariaLabels: DEFAULT_ARIA_LABELS,\r\n ariaLabel: 'Progress indicator',\r\n} satisfies Partial<StateFlowIndicatorConfig>;\r\n\r\nexport const STATE_FLOW_INDICATOR_CONFIG = new InjectionToken<Partial<StateFlowIndicatorConfig>>('STATE_FLOW_INDICATOR_CONFIG', {\r\n factory: () => STATE_FLOW_INDICATOR_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-state-flow-indicator',\r\n templateUrl: './state-flow-indicator.component.html',\r\n styleUrls: ['./state-flow-indicator.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: PSH_STATE_FLOW, useExisting: PshStateFlowIndicatorComponent },\r\n ],\r\n host: {\r\n '[class.psh-state-flow-indicator]': 'true',\r\n '[class.psh-size-small]': 'size() === \"small\"',\r\n '[class.psh-size-medium]': 'size() === \"medium\"',\r\n '[class.psh-size-large]': 'size() === \"large\"',\r\n '[attr.role]': '\"region\"',\r\n '[attr.aria-label]': 'ariaLabel()'\r\n }\r\n})\r\nexport class PshStateFlowIndicatorComponent implements PshStateFlowApi {\r\n /** Namespaces every id this indicator renders. Read by its `psh-flow-step` children. */\r\n readonly idPrefix = pshUniqueId('state-flow');\r\n\r\n private config = inject(STATE_FLOW_INDICATOR_CONFIG);\r\n\r\n readonly activeStep = model(0);\r\n readonly linear = input(this.config.linear ?? true);\r\n readonly size = input<StateFlowIndicatorSize>('medium');\r\n\r\n readonly ariaLabels = input<StateFlowIndicatorAriaLabels>();\r\n\r\n /** Name of the progress landmark. Was hard-coded, in French, with no way out. */\r\n readonly ariaLabelInput = input<string | undefined>(undefined, { alias: 'ariaLabel' });\r\n readonly ariaLabel = computed(\r\n () => this.ariaLabelInput() ?? pshResolveConfigValue(this.config.ariaLabel) ?? 'Indicateur de progression',\r\n );\r\n readonly beforeStepChange = input<(from: number, to: number) => Promise<boolean> | boolean>();\r\n\r\n stepChange = output<number>();\r\n completed = output<void>();\r\n navigationError = output<PshNavigationError>();\r\n\r\n readonly stepComponents = contentChildren(PshFlowStepComponent);\r\n\r\n readonly steps = computed(() => this.stepComponents().map(step => ({\r\n title: step.title(),\r\n subtitle: step.subtitle(),\r\n icon: step.icon(),\r\n disabled: step.disabled(),\r\n completed: step.completed(),\r\n loading: step.loading(),\r\n error: step.error(),\r\n warning: step.warning(),\r\n success: step.success()\r\n })));\r\n\r\n readonly effectiveAriaLabels = computed(() =>\r\n this.ariaLabels() ?? this.config.ariaLabels ?? DEFAULT_ARIA_LABELS\r\n );\r\n\r\n readonly isFirstStep = computed(() => this.activeStep() === 0);\r\n readonly isLastStep = computed(() => this.activeStep() === this.steps().length - 1);\r\n readonly progress = computed(() =>\r\n this.steps().length > 0\r\n ? ((this.activeStep() + 1) / this.steps().length) * 100\r\n : 0\r\n );\r\n readonly completedSteps = computed(() =>\r\n this.steps().filter(step => step.completed).length\r\n );\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n this.syncStepStates();\r\n });\r\n\r\n effect(() => {\r\n this.syncStepStates();\r\n });\r\n }\r\n\r\n private syncStepStates(): void {\r\n const components = this.stepComponents();\r\n if (components.length === 0) return;\r\n\r\n const active = this.activeStep();\r\n components.forEach((step, index) => {\r\n step.setIndex(index);\r\n step.setActive(index === active);\r\n });\r\n }\r\n\r\n async next(): Promise<void> {\r\n if (this.canGoNext()) {\r\n await this.goToStep(this.activeStep() + 1);\r\n }\r\n }\r\n\r\n async previous(): Promise<void> {\r\n if (this.canGoPrevious()) {\r\n await this.goToStep(this.activeStep() - 1);\r\n }\r\n }\r\n\r\n async goToStep(index: number): Promise<void> {\r\n if (index < 0 || index >= this.steps().length) {\r\n this.navigationError.emit({\r\n action: 'goToStep',\r\n reason: 'out-of-bounds',\r\n target: index,\r\n message: `Invalid step index: ${index}. Valid range: 0-${this.steps().length - 1}`,\r\n });\r\n return;\r\n }\r\n\r\n if (index === this.activeStep()) {\r\n return;\r\n }\r\n\r\n const beforeChange = this.beforeStepChange();\r\n if (beforeChange) {\r\n try {\r\n const canChange = await Promise.resolve(beforeChange(this.activeStep(), index));\r\n if (!canChange) {\r\n this.navigationError.emit({\r\n action: 'goToStep',\r\n reason: 'blocked',\r\n target: index,\r\n message: `Navigation from step ${this.activeStep()} to step ${index} was blocked by validation`,\r\n });\r\n return;\r\n }\r\n } catch (error) {\r\n this.navigationError.emit({\r\n action: 'goToStep',\r\n reason: 'rejected',\r\n target: index,\r\n message: error instanceof Error ? error.message : 'Unknown error in beforeStepChange',\r\n cause: error,\r\n });\r\n return;\r\n }\r\n }\r\n\r\n if (!this.canActivateStep(index)) {\r\n this.navigationError.emit({\r\n action: 'goToStep',\r\n reason: 'prerequisite-incomplete',\r\n target: index,\r\n message: `Cannot activate step ${index}. Please complete previous steps first`,\r\n });\r\n return;\r\n }\r\n\r\n this.activeStep.set(index);\r\n this.stepChange.emit(index);\r\n\r\n const currentStep = this.steps()[index];\r\n if (this.isLastStep() && currentStep?.completed) {\r\n this.completed.emit();\r\n }\r\n }\r\n\r\n canGoNext(): boolean {\r\n const nextIndex = this.activeStep() + 1;\r\n return nextIndex < this.steps().length && this.canActivateStep(nextIndex);\r\n }\r\n\r\n canGoPrevious(): boolean {\r\n return this.activeStep() > 0;\r\n }\r\n\r\n canActivateStep(index: number): boolean {\r\n if (index < 0 || index >= this.steps().length) {\r\n return false;\r\n }\r\n\r\n if (!this.linear()) return true;\r\n if (index === 0) return true;\r\n\r\n const step = this.steps()[index];\r\n if (step?.disabled) return false;\r\n\r\n return this.steps()\r\n .slice(0, index)\r\n .every(s => s.completed && !s.error);\r\n }\r\n\r\n isStepValid(index: number): boolean {\r\n const step = this.steps()[index];\r\n return step ? !!step.completed && !step.error : false;\r\n }\r\n\r\n getStepAriaLabel(step: FlowStepConfig, index: number): string {\r\n const labels = this.effectiveAriaLabels();\r\n let status: string;\r\n if (step.error) {\r\n status = labels.error;\r\n } else if (step.warning) {\r\n status = labels.warning;\r\n } else if (step.completed) {\r\n status = labels.completed;\r\n } else if (index === this.activeStep()) {\r\n status = labels.active;\r\n } else if (step.disabled) {\r\n status = labels.disabled;\r\n } else {\r\n status = labels.incomplete;\r\n }\r\n return `${labels.step} ${index + 1}: ${step.title} - ${status}`;\r\n }\r\n\r\n reset(): void {\r\n this.activeStep.set(0);\r\n this.stepChange.emit(0);\r\n }\r\n\r\n handleStepClick(index: number): void {\r\n const step = this.steps()[index];\r\n if (step && !step.disabled && this.canActivateStep(index)) {\r\n this.goToStep(index);\r\n }\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent, index: number): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.handleStepClick(index);\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n if (this.canGoNext()) {\r\n this.next();\r\n }\r\n break;\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n if (this.canGoPrevious()) {\r\n this.previous();\r\n }\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n if (this.canActivateStep(0)) {\r\n this.goToStep(0);\r\n }\r\n break;\r\n case 'End': {\r\n event.preventDefault();\r\n const lastIndex = this.steps().length - 1;\r\n if (this.canActivateStep(lastIndex)) {\r\n this.goToStep(lastIndex);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n","<div class=\"psh-flow-track\" role=\"tablist\">\r\n <!-- Tracked by position: see psh-stepper. `steps()` rebuilds its objects. -->\r\n @for (step of steps(); track $index; let i = $index) {\r\n <div\r\n class=\"psh-flow-segment\"\r\n [class.psh-active]=\"i === activeStep()\"\r\n [class.psh-completed]=\"step.completed\"\r\n [class.psh-disabled]=\"step.disabled || (!step.completed && i !== activeStep() && !canActivateStep(i))\"\r\n [class.psh-error]=\"!!step.error\"\r\n [class.psh-warning]=\"!!step.warning\"\r\n [class.psh-loading]=\"step.loading\"\r\n [class.psh-first]=\"i === 0\"\r\n [class.psh-last]=\"i === steps().length - 1\"\r\n role=\"tab\"\r\n [attr.tabindex]=\"i === activeStep() ? 0 : -1\"\r\n [attr.id]=\"idPrefix + '-tab-' + i\"\r\n [attr.aria-controls]=\"idPrefix + '-panel-' + i\"\r\n [attr.aria-selected]=\"i === activeStep()\"\r\n [attr.aria-disabled]=\"step.disabled || (!step.completed && i !== activeStep() && !canActivateStep(i))\"\r\n [attr.aria-label]=\"getStepAriaLabel(step, i)\"\r\n [attr.aria-current]=\"i === activeStep() ? 'step' : null\"\r\n [attr.aria-busy]=\"step.loading\"\r\n (click)=\"handleStepClick(i)\"\r\n (keydown)=\"handleKeydown($event, i)\"\r\n >\r\n <span class=\"psh-flow-segment-content\">\r\n @if (step.loading) {\r\n <i class=\"ph ph-circle-notch psh-spinner\" aria-hidden=\"true\"></i>\r\n } @else if (step.error) {\r\n <i class=\"ph ph-x-circle\" aria-hidden=\"true\"></i>\r\n } @else if (step.warning) {\r\n <i class=\"ph ph-warning\" aria-hidden=\"true\"></i>\r\n } @else if (step.icon) {\r\n <i class=\"ph ph-{{ step.icon }}\" aria-hidden=\"true\"></i>\r\n } @else if (step.completed) {\r\n <i class=\"ph ph-check-circle\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"psh-flow-segment-labels\">\r\n <span class=\"psh-flow-segment-title\">{{ step.title }}</span>\r\n @if (step.subtitle) {\r\n <span class=\"psh-flow-segment-subtitle\">{{ step.subtitle }}</span>\r\n }\r\n </span>\r\n </span>\r\n </div>\r\n }\r\n</div>\r\n\r\n<!--\r\n The panels. Missing until 7.0.0: `psh-flow-step` rendered `template: ''` behind a permanent\r\n `display: none`, and there was no `<ng-content>` here either, so anything projected into a\r\n step was discarded without a word. `psh-stepper` has always done this.\r\n-->\r\n<ng-content />\r\n\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * What a `psh-step` needs from the stepper it sits in.\r\n *\r\n * Only the id prefix, and that is the point: the tab and its panel have to agree on an id, and\r\n * until 7.0.0 they agreed on a *global* one — `step-0`, `panel-0`. Two steppers on a page, or a\r\n * stepper beside a `psh-tabs` (which also used `panel-0`), produced duplicate ids, and every\r\n * `aria-controls` and `aria-labelledby` resolved to whichever element the browser found first.\r\n *\r\n * A token rather than an import because `psh-stepper` reads its steps with\r\n * `contentChildren(PshStepComponent)`: importing the parent from the child would close the\r\n * cycle. `PSH_RADIO_GROUP` exists for the same reason.\r\n */\r\nexport interface PshStepperApi {\r\n /** Unique per stepper instance. Tabs are `<prefix>-tab-<i>`, panels `<prefix>-panel-<i>`. */\r\n readonly idPrefix: string;\r\n}\r\n\r\nexport const PSH_STEPPER = new InjectionToken<PshStepperApi>('PSH_STEPPER');\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n input,\r\n signal\r\n} from '@angular/core';\r\nimport { PSH_STEPPER } from './stepper.token';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\n@Component({\r\n selector: 'psh-step',\r\n template: `<ng-content />`,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.psh-step-content]': 'true',\r\n '[class.psh-active]': 'isActive()',\r\n '[attr.role]': '\"tabpanel\"',\r\n '[attr.aria-labelledby]': 'idPrefix + \"-tab-\" + index()',\r\n '[attr.id]': 'idPrefix + \"-panel-\" + index()',\r\n '[attr.tabindex]': 'isActive() ? 0 : -1',\r\n '[style.display]': 'isActive() ? \"block\" : \"none\"'\r\n }\r\n})\r\nexport class PshStepComponent {\r\n /**\r\n * The stepper's id prefix, so the panel's id matches the `aria-controls` of its tab.\r\n *\r\n * Falls back to an id of its own for a `psh-step` used outside a stepper: a dangling\r\n * `aria-labelledby` is worse than an unreferenced panel.\r\n */\r\n protected readonly idPrefix =\r\n inject(PSH_STEPPER, { optional: true })?.idPrefix ?? pshUniqueId('step');\r\n\r\n readonly title = input.required<string>();\r\n readonly subtitle = input<string>();\r\n readonly icon = input<string>();\r\n readonly disabled = input(false);\r\n readonly completed = input(false);\r\n readonly loading = input(false);\r\n readonly error = input<string | null | undefined>(null);\r\n readonly warning = input<string>();\r\n readonly success = input<string | null | undefined>(null);\r\n\r\n private readonly _index = signal(0);\r\n private readonly _isActive = signal(false);\r\n\r\n readonly index = this._index.asReadonly();\r\n readonly isActive = this._isActive.asReadonly();\r\n\r\n setIndex(value: number): void {\r\n this._index.set(value);\r\n }\r\n\r\n setActive(value: boolean): void {\r\n this._isActive.set(value);\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n InjectionToken,\r\n afterNextRender\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { PshNavigationError } from '../../types/semantic.types';\r\nimport { StepperVariant, StepConfig, StepperConfig, StepperAriaLabels } from './stepper.types';\r\nimport { PshStepComponent } from './step.component';\r\nimport { PSH_STEPPER, PshStepperApi } from './stepper.token';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\nconst DEFAULT_ARIA_LABELS: StepperAriaLabels = {\r\n step: 'Step',\r\n completed: 'Step completed',\r\n active: 'Step active',\r\n incomplete: 'Step incomplete',\r\n disabled: 'Step disabled'\r\n};\r\n\r\nconst STEPPER_DEFAULTS = {\r\n variant: 'default',\r\n linear: true,\r\n ariaLabels: DEFAULT_ARIA_LABELS,\r\n ariaLabel: 'Step navigation',\r\n} satisfies Partial<StepperConfig>;\r\n\r\nexport const STEPPER_CONFIG = new InjectionToken<Partial<StepperConfig>>('STEPPER_CONFIG', {\r\n factory: () => STEPPER_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-stepper',\r\n templateUrl: './stepper.component.html',\r\n styleUrls: ['./stepper.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: PSH_STEPPER, useExisting: PshStepperComponent }],\r\n host: {\r\n '[class.psh-stepper-container]': 'true',\r\n '[class.psh-numbered]': 'variant() === \"numbered\"',\r\n '[class.psh-progress]': 'variant() === \"progress\"',\r\n '[attr.role]': '\"region\"',\r\n '[attr.aria-label]': 'ariaLabel()'\r\n }\r\n})\r\nexport class PshStepperComponent implements PshStepperApi {\r\n private config = inject(STEPPER_CONFIG);\r\n\r\n /** Namespaces every id this stepper renders. Read by its `psh-step` children. */\r\n readonly idPrefix = pshUniqueId('stepper');\r\n\r\n readonly activeStep = model(0);\r\n readonly variant = input<StepperVariant>(this.config.variant ?? 'default');\r\n readonly linear = input(this.config.linear ?? true);\r\n\r\n readonly ariaLabels = input<StepperAriaLabels>();\r\n\r\n /** Name of the stepper landmark. Was hard-coded, in French, with no way out. */\r\n readonly ariaLabelInput = input<string | undefined>(undefined, { alias: 'ariaLabel' });\r\n readonly ariaLabel = computed(\r\n () => this.ariaLabelInput() ?? pshResolveConfigValue(this.config.ariaLabel) ?? 'Navigation par étapes',\r\n );\r\n readonly beforeStepChange = input<(from: number, to: number) => Promise<boolean> | boolean>();\r\n\r\n stepChange = output<number>();\r\n completed = output<void>();\r\n navigationError = output<PshNavigationError>();\r\n\r\n readonly stepComponents = contentChildren(PshStepComponent);\r\n\r\n readonly steps = computed(() => this.stepComponents().map(step => ({\r\n title: step.title(),\r\n subtitle: step.subtitle(),\r\n icon: step.icon(),\r\n disabled: step.disabled(),\r\n completed: step.completed(),\r\n loading: step.loading(),\r\n error: step.error(),\r\n warning: step.warning(),\r\n success: step.success()\r\n })));\r\n\r\n readonly effectiveAriaLabels = computed(() =>\r\n this.ariaLabels() ?? this.config.ariaLabels ?? DEFAULT_ARIA_LABELS\r\n );\r\n\r\n readonly isFirstStep = computed(() => this.activeStep() === 0);\r\n readonly isLastStep = computed(() => this.activeStep() === this.steps().length - 1);\r\n readonly progress = computed(() =>\r\n this.steps().length > 0\r\n ? ((this.activeStep() + 1) / this.steps().length) * 100\r\n : 0\r\n );\r\n readonly completedSteps = computed(() =>\r\n this.steps().filter(step => step.completed).length\r\n );\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n this.syncStepStates();\r\n });\r\n\r\n effect(() => {\r\n this.syncStepStates();\r\n });\r\n }\r\n\r\n private syncStepStates(): void {\r\n const components = this.stepComponents();\r\n if (components.length === 0) return;\r\n\r\n const active = this.activeStep();\r\n components.forEach((step, index) => {\r\n step.setIndex(index);\r\n step.setActive(index === active);\r\n });\r\n }\r\n\r\n async next(): Promise<void> {\r\n if (this.canGoNext()) {\r\n await this.goToStep(this.activeStep() + 1);\r\n }\r\n }\r\n\r\n async previous(): Promise<void> {\r\n if (this.canGoPrevious()) {\r\n await this.goToStep(this.activeStep() - 1);\r\n }\r\n }\r\n\r\n async goToStep(index: number): Promise<void> {\r\n if (index < 0 || index >= this.steps().length) {\r\n this.navigationError.emit({\r\n action: 'goToStep',\r\n reason: 'out-of-bounds',\r\n target: index,\r\n message: `Invalid step index: ${index}. Valid range: 0-${this.steps().length - 1}`,\r\n });\r\n return;\r\n }\r\n\r\n if (index === this.activeStep()) {\r\n return;\r\n }\r\n\r\n const beforeChange = this.beforeStepChange();\r\n if (beforeChange) {\r\n try {\r\n const canChange = await Promise.resolve(beforeChange(this.activeStep(), index));\r\n if (!canChange) {\r\n this.navigationError.emit({\r\n action: 'goToStep',\r\n reason: 'blocked',\r\n target: index,\r\n message: `Navigation from step ${this.activeStep()} to step ${index} was blocked by validation`,\r\n });\r\n return;\r\n }\r\n } catch (error) {\r\n this.navigationError.emit({\r\n action: 'goToStep',\r\n reason: 'rejected',\r\n target: index,\r\n message: error instanceof Error ? error.message : 'Unknown error in beforeStepChange',\r\n cause: error,\r\n });\r\n return;\r\n }\r\n }\r\n\r\n if (!this.canActivateStep(index)) {\r\n this.navigationError.emit({\r\n action: 'goToStep',\r\n reason: 'prerequisite-incomplete',\r\n target: index,\r\n message: `Cannot activate step ${index}. Please complete previous steps first`,\r\n });\r\n return;\r\n }\r\n\r\n this.activeStep.set(index);\r\n this.stepChange.emit(index);\r\n\r\n const currentStep = this.steps()[index];\r\n if (this.isLastStep() && currentStep?.completed) {\r\n this.completed.emit();\r\n }\r\n }\r\n\r\n canGoNext(): boolean {\r\n const nextIndex = this.activeStep() + 1;\r\n return nextIndex < this.steps().length && this.canActivateStep(nextIndex);\r\n }\r\n\r\n canGoPrevious(): boolean {\r\n return this.activeStep() > 0;\r\n }\r\n\r\n canActivateStep(index: number): boolean {\r\n if (index < 0 || index >= this.steps().length) {\r\n return false;\r\n }\r\n\r\n if (!this.linear()) return true;\r\n if (index === 0) return true;\r\n\r\n const step = this.steps()[index];\r\n if (step?.disabled) return false;\r\n\r\n return this.steps()\r\n .slice(0, index)\r\n .every(step => step.completed && !step.error);\r\n }\r\n\r\n isStepValid(index: number): boolean {\r\n const step = this.steps()[index];\r\n return step ? !!step.completed && !step.error : false;\r\n }\r\n\r\n getStepAriaLabel(step: StepConfig, index: number): string {\r\n const labels = this.effectiveAriaLabels();\r\n const status = step.completed ? labels.completed :\r\n index === this.activeStep() ? labels.active :\r\n step.disabled ? labels.disabled :\r\n labels.incomplete;\r\n return `${labels.step} ${index + 1}: ${step.title} - ${status}`;\r\n }\r\n\r\n getStepDescribedBy(step: StepConfig, index: number): string | null {\r\n // These must match the `[id]` of the message the template actually renders. The\r\n // prefix is part of that agreement, not decoration: a class-renaming pass once\r\n // rewrote one side of it and 2 195 tests stayed green.\r\n if (step.error) return `${this.idPrefix}-error-${index}`;\r\n if (step.warning) return `${this.idPrefix}-warning-${index}`;\r\n if (step.success) return `${this.idPrefix}-success-${index}`;\r\n return null;\r\n }\r\n\r\n reset(): void {\r\n this.activeStep.set(0);\r\n this.stepChange.emit(0);\r\n }\r\n\r\n handleStepClick(index: number): void {\r\n const step = this.steps()[index];\r\n if (step && !step.disabled && this.canActivateStep(index)) {\r\n this.goToStep(index);\r\n }\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent, index: number): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.handleStepClick(index);\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n if (this.canGoNext()) {\r\n this.next();\r\n }\r\n break;\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n if (this.canGoPrevious()) {\r\n this.previous();\r\n }\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n if (this.canActivateStep(0)) {\r\n this.goToStep(0);\r\n }\r\n break;\r\n case 'End': {\r\n event.preventDefault();\r\n const lastIndex = this.steps().length - 1;\r\n if (this.canActivateStep(lastIndex)) {\r\n this.goToStep(lastIndex);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n","<div class=\"psh-stepper-header\" role=\"tablist\">\r\n <!--\r\n Tracked by position on purpose. `steps()` maps over the projected `psh-step` children\r\n and builds a fresh object each time it recomputes, so tracking by identity would\r\n destroy and rebuild every step on each recomputation — the opposite of the intent.\r\n Position is the stable key here: a step \"moving\" means the projected content changed.\r\n -->\r\n @for (step of steps(); track $index; let i = $index) {\r\n <div\r\n class=\"psh-step-header\"\r\n [class.psh-active]=\"i === activeStep()\"\r\n [class.psh-completed]=\"step.completed\"\r\n [class.psh-disabled]=\"step.disabled\"\r\n [class.psh-error]=\"!!step.error\"\r\n [class.psh-warning]=\"!!step.warning\"\r\n [class.psh-success]=\"!!step.success\"\r\n >\r\n <div\r\n class=\"psh-step-indicator\"\r\n role=\"tab\"\r\n [attr.tabindex]=\"i === activeStep() ? 0 : -1\"\r\n [attr.id]=\"idPrefix + '-tab-' + i\"\r\n [attr.aria-controls]=\"idPrefix + '-panel-' + i\"\r\n [attr.aria-selected]=\"i === activeStep()\"\r\n [attr.aria-disabled]=\"step.disabled\"\r\n [attr.aria-label]=\"getStepAriaLabel(step, i)\"\r\n [attr.aria-current]=\"i === activeStep() ? 'step' : null\"\r\n [attr.aria-describedby]=\"getStepDescribedBy(step, i)\"\r\n [attr.aria-busy]=\"step.loading\"\r\n (click)=\"handleStepClick(i)\"\r\n (keydown)=\"handleKeydown($event, i)\"\r\n >\r\n @if (step.loading && variant() === 'progress') {\r\n <i class=\"ph ph-circle-notch psh-spinner\" aria-hidden=\"true\"></i>\r\n } @else if (step.completed) {\r\n <i class=\"ph ph-check\" aria-hidden=\"true\"></i>\r\n } @else if (variant() === 'numbered') {\r\n {{ i + 1 }}\r\n } @else if (step.icon) {\r\n <i class=\"ph ph-{{ step.icon }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n <span class=\"psh-step-dot\"></span>\r\n }\r\n </div>\r\n\r\n <div class=\"psh-step-label\">\r\n <span class=\"psh-step-title\">{{ step.title }}</span>\r\n @if (step.subtitle) {\r\n <span class=\"psh-step-subtitle\">{{ step.subtitle }}</span>\r\n }\r\n @if (step.error) {\r\n <span class=\"psh-step-error\" [id]=\"idPrefix + '-error-' + i\" role=\"alert\" aria-live=\"polite\">{{ step.error }}</span>\r\n }\r\n @if (step.warning) {\r\n <span class=\"psh-step-warning\" [id]=\"idPrefix + '-warning-' + i\" role=\"status\" aria-live=\"polite\">{{ step.warning }}</span>\r\n }\r\n @if (step.success) {\r\n <span class=\"psh-step-success\" [id]=\"idPrefix + '-success-' + i\" role=\"status\" aria-live=\"polite\">{{ step.success }}</span>\r\n }\r\n </div>\r\n\r\n @if (i < steps().length - 1) {\r\n <div class=\"psh-step-connector\" aria-hidden=\"true\">\r\n <span class=\"psh-connector-line\"></span>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n\r\n<div class=\"psh-stepper-content\">\r\n <ng-content />\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n viewChild,\r\n InjectionToken,\r\n effect\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\r\nimport type { FormCheckboxControl } from '@angular/forms/signals';\r\nimport { SwitchSize, SwitchConfig } from './switch.types';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\nimport { pshRequiredError } from '../../utils/required-validator';\r\nimport { pshJoinAriaIds } from '../../utils/aria';\r\n\r\nconst SWITCH_DEFAULTS = {\r\n checked: false,\r\n disabled: false,\r\n required: false,\r\n size: 'medium',\r\n labelPosition: 'right'\r\n} satisfies Partial<SwitchConfig>;\r\n\r\nexport const SWITCH_CONFIG = new InjectionToken<Partial<SwitchConfig>>('SWITCH_CONFIG', {\r\n factory: () => SWITCH_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-switch',\r\n templateUrl: './switch.component.html',\r\n styleUrls: ['./switch.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n { provide: NG_VALIDATORS, useExisting: PshSwitchComponent, multi: true },{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshSwitchComponent,\r\n multi: true\r\n }],\r\n host: {\r\n '[class.psh-switch-wrapper]': 'true',\r\n '[class.psh-switch-disabled]': 'disabled()',\r\n '[class.psh-switch-error]': '!!error()',\r\n '[class.psh-switch-success]': '!!success()'\r\n }\r\n})\r\nexport class PshSwitchComponent implements ControlValueAccessor, FormCheckboxControl, Validator {\r\n private config = inject(SWITCH_CONFIG);\r\n private uniqueId = pshUniqueId('switch');\r\n\r\n private readonly switchInput = viewChild<ElementRef<HTMLInputElement>>('switchInput');\r\n\r\n private onChange = (_value: boolean) => {};\r\n private onTouched = () => {};\r\n private onValidatorChange: () => void = () => {};\r\n\r\n readonly checked = model(this.config.checked ?? false);\r\n readonly disabled = model(this.config.disabled ?? false);\r\n readonly touched = model(false);\r\n\r\n /**\r\n * Emitted when the user finishes interacting with the control.\r\n *\r\n * Part of `FormUiControl`: the `Field` directive listens to **this**, not to\r\n * `touchedChange`, to mark the bound field as touched.\r\n */\r\n readonly touch = output<void>();\r\n\r\n readonly required = input(this.config.required ?? false);\r\n readonly size = input<SwitchSize>(this.config.size ?? 'medium');\r\n readonly labelPosition = input<'left' | 'right'>(this.config.labelPosition ?? 'right');\r\n\r\n readonly label = input('');\r\n readonly error = input<string | null | undefined>(null);\r\n readonly success = input<string | null | undefined>(null);\r\n /** Guidance shown when there is neither an error nor a success message. */\r\n readonly hint = input<string | null | undefined>(null);\r\n\r\n /**\r\n * Extra ids for `aria-describedby`. **Merged** with the control's own — the id of its error,\r\n * success or hint message — never replacing them.\r\n */\r\n readonly ariaDescribedBy = input<string>();\r\n\r\n /**\r\n * Ids of the elements that name this control, for the cases a visible `<label>` cannot\r\n * cover. Merged with anything the control already points at.\r\n */\r\n readonly ariaLabelledBy = input<string>();\r\n readonly ariaLabel = input<string>();\r\n readonly name = input<string>('');\r\n readonly id = input<string>(this.uniqueId);\r\n\r\n readonly computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const labelText = this.label();\r\n if (labelText) return labelText;\r\n\r\n return 'Switch';\r\n });\r\n readonly errorId = computed(() => this.error() ? `${this.id()}-error` : null);\r\n readonly successId = computed(() => this.success() ? `${this.id()}-success` : null);\r\n readonly hintId = computed(() => this.hint() ? `${this.id()}-hint` : null);\r\n // error, success and hint are mutually exclusive in the template (@if/@else if), so\r\n // aria-describedby references whichever message is actually rendered — in the same order.\r\n readonly describedBy = computed(() =>\r\n pshJoinAriaIds(\r\n this.errorId() ?? this.successId() ?? this.hintId(),\r\n this.ariaDescribedBy(),\r\n ),\r\n );\r\n\r\n toggle(): void {\r\n if (!this.disabled()) {\r\n this.checked.update(v => !v);\r\n this.onChange(this.checked());\r\n this.markTouched();\r\n }\r\n }\r\n\r\n /**\r\n * Blur, not toggle. Tabbing through a required switch without flipping it still means the\r\n * user has been there, which is what a field needs to know before showing \"required\".\r\n */\r\n protected handleBlur(): void {\r\n this.markTouched();\r\n }\r\n\r\n private markTouched(): void {\r\n this.onTouched();\r\n this.touched.set(true);\r\n this.touch.emit();\r\n }\r\n\r\n constructor() {\r\n // A value change revalidates by itself; a change to `required` does not — Angular has\r\n // no reason to suspect the validator's answer moved. This is what the callback is for.\r\n effect(() => {\r\n this.required();\r\n this.onValidatorChange();\r\n });\r\n }\r\n\r\n writeValue(value: boolean): void {\r\n this.checked.set(value ?? false);\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.set(isDisabled);\r\n }\r\n\r\n focus(): void {\r\n const el = this.switchInput();\r\n if (el?.nativeElement) {\r\n el.nativeElement.focus();\r\n }\r\n }\r\n\r\n blur(): void {\r\n const el = this.switchInput();\r\n if (el?.nativeElement) {\r\n el.nativeElement.blur();\r\n }\r\n }\r\n\r\n /**\r\n * Makes `required` a real constraint rather than an asterisk.\r\n *\r\n * Re-run whenever `required` or the value changes: `registerOnValidatorChange` gives us\r\n * the callback that tells Angular to revalidate, and an effect fires it.\r\n */\r\n validate(): ValidationErrors | null {\r\n return pshRequiredError(this.required(), !this.checked());\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.onValidatorChange = fn;\r\n }\r\n\r\n}\r\n","<div\r\n class=\"psh-switch-container\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n>\r\n <label class=\"psh-switch-label\" [class]=\"labelPosition() === 'left' ? 'psh-label-left' : 'psh-label-right'\">\r\n <input\r\n #switchInput\r\n type=\"checkbox\"\r\n role=\"switch\"\r\n class=\"psh-switch-input\"\r\n [id]=\"id()\"\r\n [name]=\"name() || id()\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"disabled()\"\r\n [required]=\"required()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-invalid]=\"!!error()\"\r\n [attr.aria-checked]=\"checked()\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n (change)=\"toggle()\"\r\n (blur)=\"handleBlur()\"\r\n />\r\n <span class=\"psh-switch-control\">\r\n <span class=\"psh-switch-thumb\"></span>\r\n </span>\r\n <span class=\"psh-switch-text\">\r\n @if (label()) {\r\n {{ label() }}\r\n } @else {\r\n <ng-content>Switch</ng-content>\r\n }\r\n </span>\r\n </label>\r\n\r\n @if (error()) {\r\n <div [id]=\"errorId()!\" class=\"psh-switch-error\" role=\"alert\" aria-live=\"polite\">\r\n {{ error() }}\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"successId()!\" class=\"psh-switch-success\" role=\"status\" aria-live=\"polite\">\r\n {{ success() }}\r\n </div>\r\n } @else if (hint()) {\r\n <div [id]=\"hintId()!\" class=\"psh-switch-hint\">\r\n {{ hint() }}\r\n </div>\r\n }\r\n</div>","import {\r\n computed,\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n viewChildren,\r\n InjectionToken,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { TabBarItem, TabBarConfig, TabBarChangeEvent, TabBarItemContext } from './tab-bar.types';\r\n\r\n/**\r\n * Token d'injection pour la configuration globale de la barre d'onglets\r\n */\r\nconst TAB_BAR_DEFAULTS = {\r\n disabled: false,\r\n position: 'bottom',\r\n animated: true,\r\n ariaLabel: 'Tab navigation',\r\n} satisfies Partial<TabBarConfig>;\r\n\r\nexport const TAB_BAR_CONFIG = new InjectionToken<Partial<TabBarConfig>>('TAB_BAR_CONFIG', {\r\n factory: () => TAB_BAR_DEFAULTS,\r\n});\r\n\r\n\r\n@Component({\r\n selector: 'psh-tab-bar',\r\n imports: [NgTemplateOutlet],\r\n templateUrl: './tab-bar.component.html',\r\n styleUrls: ['./tab-bar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.psh-top]': 'position() === \"top\"',\r\n '[class.psh-animated]': 'animated()',\r\n 'role': 'tablist',\r\n '[attr.aria-label]': 'ariaLabel()'\r\n }\r\n})\r\nexport class PshTabBarComponent {\r\n private config = inject(TAB_BAR_CONFIG);\r\n private readonly tabButtons = viewChildren<ElementRef<HTMLButtonElement>>('tabButton');\r\n\r\n // Model inputs with defaults from config\r\n readonly disabled = input(this.config.disabled ?? false);\r\n readonly position = input<'bottom' | 'top'>(this.config.position ?? 'bottom');\r\n readonly animated = input(this.config.animated ?? true);\r\n readonly activeIndex = model(0);\r\n\r\n // Regular inputs\r\n readonly items = input.required<TabBarItem[]>();\r\n\r\n /** Name of the tab bar. Was hard-coded, in French, with no way out. */\r\n readonly ariaLabelInput = input<string | undefined>(undefined, { alias: 'ariaLabel' });\r\n readonly ariaLabel = computed(\r\n () => this.ariaLabelInput() ?? pshResolveConfigValue(this.config.ariaLabel) ?? 'Navigation par onglets',\r\n );\r\n\r\n /**\r\n * Replaces the content of every tab.\r\n *\r\n * `TabBarItem` described a tab completely — icon, label, badge — and the component had no\r\n * `ng-content`, so anything else meant `::ng-deep`. The button keeps `role=\"tab\"`,\r\n * `aria-selected`, the roving tabindex and the arrow-key handling.\r\n */\r\n readonly itemTemplate = input<TemplateRef<TabBarItemContext>>();\r\n\r\n protected itemContext(item: TabBarItem, index: number): TabBarItemContext {\r\n return {\r\n $implicit: item,\r\n index,\r\n active: this.activeIndex() === index,\r\n disabled: this.disabled() || !!item.disabled,\r\n };\r\n }\r\n\r\n // Outputs\r\n tabChange = output<TabBarChangeEvent>();\r\n\r\n selectTab(index: number): void {\r\n const items = this.items();\r\n const previousIndex = this.activeIndex();\r\n const selectedItem = items[index];\r\n\r\n if (this.disabled() ||\r\n previousIndex === index ||\r\n index < 0 ||\r\n index >= items.length ||\r\n !selectedItem ||\r\n selectedItem.disabled) {\r\n return;\r\n }\r\n\r\n this.activeIndex.set(index);\r\n this.tabChange.emit({\r\n index,\r\n item: selectedItem,\r\n previousIndex\r\n });\r\n }\r\n\r\n /**\r\n * Arrow/Home/End navigation, per the ARIA tablist pattern: the arrows move between\r\n * tabs and activate as they go, wrapping at both ends and skipping disabled items.\r\n * `Tab` itself must leave the tablist, which is why the buttons carry a roving\r\n * tabindex rather than all sitting in the tab order.\r\n */\r\n onKeydown(event: KeyboardEvent, index: number): void {\r\n let target: number | null;\r\n\r\n switch (event.key) {\r\n case 'ArrowRight':\r\n case 'ArrowDown':\r\n target = this.nextEnabledIndex(index, 1);\r\n break;\r\n case 'ArrowLeft':\r\n case 'ArrowUp':\r\n target = this.nextEnabledIndex(index, -1);\r\n break;\r\n case 'Home':\r\n target = this.nextEnabledIndex(-1, 1);\r\n break;\r\n case 'End':\r\n target = this.nextEnabledIndex(this.items().length, -1);\r\n break;\r\n default:\r\n return;\r\n }\r\n\r\n if (target === null) return;\r\n\r\n event.preventDefault();\r\n this.selectTab(target);\r\n this.tabButtons()[target]?.nativeElement.focus();\r\n }\r\n\r\n /** Walks `step` at a time from `from`, wrapping, until it lands on a selectable tab. */\r\n private nextEnabledIndex(from: number, step: number): number | null {\r\n const items = this.items();\r\n if (items.length === 0 || this.disabled()) return null;\r\n\r\n for (let offset = 1; offset <= items.length; offset++) {\r\n const candidate = (((from + step * offset) % items.length) + items.length) % items.length;\r\n if (!items[candidate]?.disabled) return candidate;\r\n }\r\n return null;\r\n }\r\n}","<div class=\"psh-tab-bar\">\r\n @for (item of items(); track item.id; let i = $index) {\r\n <button\r\n #tabButton\r\n type=\"button\"\r\n class=\"psh-tab-item\"\r\n [class.psh-active]=\"activeIndex() === i\"\r\n [class.psh-disabled]=\"disabled() || item.disabled\"\r\n role=\"tab\"\r\n [attr.aria-selected]=\"activeIndex() === i\"\r\n [attr.aria-disabled]=\"disabled() || item.disabled\"\r\n [attr.aria-label]=\"item.label\"\r\n [attr.tabindex]=\"activeIndex() === i ? 0 : -1\"\r\n (click)=\"selectTab(i)\"\r\n (keydown)=\"onKeydown($event, i)\"\r\n >\r\n @if (itemTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"itemTemplate()!\"\r\n [ngTemplateOutletContext]=\"itemContext(item, i)\"\r\n ></ng-container>\r\n } @else {\r\n <i\r\n [class]=\"activeIndex() === i ? 'ph-fill ph-' + item.icon : 'ph ph-' + item.icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n <span class=\"psh-tab-label\">{{ item.label }}</span>\r\n @if (item.badge) {\r\n <span class=\"psh-tab-badge\">{{ item.badge }}</span>\r\n }\r\n }\r\n </button>\r\n }\r\n</div>","import { DestroyRef, inject, Injectable, PLATFORM_ID } from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\n\r\nexport type AnnouncerPoliteness = 'polite' | 'assertive';\r\n\r\nconst SR_ONLY_STYLE =\r\n 'position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;' +\r\n 'overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;';\r\n\r\n/**\r\n * Centralised ARIA live-region announcer.\r\n *\r\n * Provides a single pair of visually-hidden `aria-live` regions (polite and\r\n * assertive) shared across the whole application, instead of every component\r\n * rendering its own live region. Inject it and call {@link announce} to read a\r\n * message to assistive technology (toasts, async loading, form validation…).\r\n *\r\n * @example\r\n * ```typescript\r\n * private announcer = inject(PshLiveAnnouncerService);\r\n * this.announcer.announce('3 results found');\r\n * this.announcer.announce('Save failed', 'assertive');\r\n * ```\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshLiveAnnouncerService {\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n private politeRegion: HTMLElement | null = null;\r\n private assertiveRegion: HTMLElement | null = null;\r\n\r\n constructor() {\r\n inject(DestroyRef).onDestroy(() => this.dispose());\r\n }\r\n\r\n /**\r\n * Announces a message in the requested live region.\r\n * The region is cleared first so the same message announced twice is re-read.\r\n */\r\n announce(message: string, politeness: AnnouncerPoliteness = 'polite'): void {\r\n if (!this.isBrowser) return;\r\n const region = this.getRegion(politeness);\r\n region.textContent = '';\r\n // Re-assign after clearing so assistive tech registers the change.\r\n region.textContent = message;\r\n }\r\n\r\n /** Clears both live regions. */\r\n clear(): void {\r\n if (this.politeRegion) this.politeRegion.textContent = '';\r\n if (this.assertiveRegion) this.assertiveRegion.textContent = '';\r\n }\r\n\r\n private getRegion(politeness: AnnouncerPoliteness): HTMLElement {\r\n if (politeness === 'assertive') {\r\n this.assertiveRegion ??= this.createRegion('assertive');\r\n return this.assertiveRegion;\r\n }\r\n this.politeRegion ??= this.createRegion('polite');\r\n return this.politeRegion;\r\n }\r\n\r\n private createRegion(politeness: AnnouncerPoliteness): HTMLElement {\r\n const region = this.document.createElement('div');\r\n region.setAttribute('aria-live', politeness);\r\n region.setAttribute('aria-atomic', 'true');\r\n region.setAttribute('role', politeness === 'assertive' ? 'alert' : 'status');\r\n region.setAttribute('style', SR_ONLY_STYLE);\r\n region.classList.add('psh-live-announcer');\r\n this.document.body.appendChild(region);\r\n return region;\r\n }\r\n\r\n private dispose(): void {\r\n this.politeRegion?.remove();\r\n this.assertiveRegion?.remove();\r\n this.politeRegion = null;\r\n this.assertiveRegion = null;\r\n }\r\n}\r\n","import { DOCUMENT } from '@angular/common';\r\nimport { EmbeddedViewRef, Injectable, TemplateRef, ViewContainerRef, inject } from '@angular/core';\r\n\r\n/** A handle to a teleported overlay panel. */\r\nexport interface PshPortalRef {\r\n /** The panel's root element — use it to position and to scope click-outside. */\r\n readonly panel: HTMLElement;\r\n /**\r\n * Positions the panel as `fixed` relative to `anchor`'s viewport rect, on the\r\n * given side with `gap` px of spacing. Bounds `max-height` to the available\r\n * viewport space so the panel never overflows the screen.\r\n */\r\n position(anchor: HTMLElement, side: 'top' | 'bottom', gap: number): void;\r\n /**\r\n * Positions the panel as `fixed` from `anchor`'s viewport rect for a\r\n * `<side>-<align>` placement (e.g. `bottom-start`, `top-end`). The panel keeps\r\n * its content width; the aligned edge (start/end) is anchored to the trigger.\r\n */\r\n positionByPlacement(anchor: HTMLElement, placement: string, gap: number): void;\r\n /** Destroys the embedded view and removes the panel from the overlay layer. */\r\n detach(): void;\r\n}\r\n\r\n/**\r\n * Teleports a `TemplateRef` into a single body-level overlay layer so popover\r\n * panels (select / dropdown / menu…) escape any ancestor `overflow`, `transform`\r\n * or stacking context and can layer above modals.\r\n *\r\n * A lightweight, CDK-free \"manual portal\": the embedded view is created from the\r\n * consumer's `ViewContainerRef` (so it stays in that component's change-detection\r\n * tree and keeps its bindings reactive), then its root nodes are moved into the\r\n * shared `.psh-overlay-layer`. The layer is `position: fixed; inset: 0;\r\n * pointer-events: none` at `z-index: var(--psh-z-index-overlay)`; panels re-enable\r\n * pointer events. The layer is created lazily and removed once empty.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshPortalService {\r\n private readonly document = inject(DOCUMENT);\r\n private layer: HTMLElement | null = null;\r\n private count = 0;\r\n\r\n /** Teleports `tpl` into the overlay layer and returns a handle to control it. */\r\n attach(tpl: TemplateRef<unknown>, vcr: ViewContainerRef): PshPortalRef {\r\n const layer = this.ensureLayer();\r\n const viewRef = vcr.createEmbeddedView(tpl);\r\n viewRef.detectChanges();\r\n\r\n const nodes = viewRef.rootNodes as Node[];\r\n const panel = (nodes.find((n): n is HTMLElement => n instanceof HTMLElement) ??\r\n nodes[0]) as HTMLElement;\r\n nodes.forEach(node => layer.appendChild(node));\r\n\r\n this.count++;\r\n\r\n return {\r\n panel,\r\n position: (anchor, side, gap) => this.position(panel, anchor, side, gap),\r\n positionByPlacement: (anchor, placement, gap) =>\r\n this.positionByPlacement(panel, anchor, placement, gap),\r\n detach: () => this.detach(viewRef),\r\n };\r\n }\r\n\r\n private position(\r\n panel: HTMLElement,\r\n anchor: HTMLElement,\r\n side: 'top' | 'bottom',\r\n gap: number,\r\n ): void {\r\n const view = this.document.defaultView;\r\n if (!view) return;\r\n\r\n const rect = anchor.getBoundingClientRect();\r\n const style = panel.style;\r\n style.position = 'fixed';\r\n style.left = `${rect.left}px`;\r\n style.width = `${rect.width}px`;\r\n\r\n if (side === 'top') {\r\n const height = panel.offsetHeight;\r\n style.top = `${Math.max(gap, rect.top - height - gap)}px`;\r\n style.maxHeight = `${Math.max(0, rect.top - gap * 2)}px`;\r\n } else {\r\n style.top = `${rect.bottom + gap}px`;\r\n style.maxHeight = `${Math.max(0, view.innerHeight - rect.bottom - gap * 2)}px`;\r\n }\r\n }\r\n\r\n private positionByPlacement(\r\n panel: HTMLElement,\r\n anchor: HTMLElement,\r\n placement: string,\r\n gap: number,\r\n ): void {\r\n const view = this.document.defaultView;\r\n if (!view) return;\r\n\r\n const rect = anchor.getBoundingClientRect();\r\n const [side, align] = placement.split('-');\r\n const style = panel.style;\r\n style.position = 'fixed';\r\n\r\n if (side === 'top') {\r\n const height = panel.offsetHeight;\r\n style.top = `${Math.max(gap, rect.top - height - gap)}px`;\r\n style.maxHeight = `${Math.max(0, rect.top - gap * 2)}px`;\r\n } else {\r\n style.top = `${rect.bottom + gap}px`;\r\n style.maxHeight = `${Math.max(0, view.innerHeight - rect.bottom - gap * 2)}px`;\r\n }\r\n\r\n // Content-sized menu: anchor the start/end edge to the trigger.\r\n if (align === 'end') {\r\n style.left = `${Math.max(0, rect.right - panel.offsetWidth)}px`;\r\n } else {\r\n style.left = `${rect.left}px`;\r\n }\r\n }\r\n\r\n private detach(viewRef: EmbeddedViewRef<unknown>): void {\r\n viewRef.destroy();\r\n this.count = Math.max(0, this.count - 1);\r\n if (this.count === 0 && this.layer) {\r\n this.layer.remove();\r\n this.layer = null;\r\n }\r\n }\r\n\r\n private ensureLayer(): HTMLElement {\r\n if (this.layer) return this.layer;\r\n const layer = this.document.createElement('div');\r\n layer.className = 'psh-overlay-layer';\r\n layer.style.cssText =\r\n 'position:fixed;inset:0;z-index:var(--psh-z-index-overlay);pointer-events:none;';\r\n this.document.body.appendChild(layer);\r\n this.layer = layer;\r\n return layer;\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n/** A cardinal side an overlay can be placed on, relative to its anchor. */\r\nexport type OverlaySide = 'top' | 'bottom' | 'left' | 'right';\r\n\r\n/** Options describing the (estimated) overlay size and the gap to the anchor. */\r\nexport interface OverlayPositionOptions {\r\n /** Estimated overlay width in px (used for left/right flipping and align flipping). */\r\n overlayWidth?: number;\r\n /** Estimated overlay height in px (used for top/bottom flipping). */\r\n overlayHeight?: number;\r\n /** Minimum gap between anchor and overlay in px. */\r\n offset?: number;\r\n}\r\n\r\n/**\r\n * Shared anchored-positioning primitive with viewport collision detection.\r\n *\r\n * Computes whether an overlay (tooltip, dropdown, select panel, menu…) fits on\r\n * its preferred side of an anchor element and flips it to the opposite side\r\n * when there is not enough room and the opposite side has more. Based on\r\n * `getBoundingClientRect`, so it must be called when the anchor is laid out\r\n * (i.e. in the browser, on open / scroll / resize).\r\n *\r\n * This generalises the collision logic that previously lived only inside the\r\n * tooltip, so dropdown / select / menu popovers can stop overflowing too.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class PshOverlayPositionService {\r\n private readonly document = inject(DOCUMENT);\r\n\r\n /**\r\n * Resolves the best cardinal side for an overlay, flipping `preferred` to its\r\n * opposite when it would overflow the viewport and the opposite has more room.\r\n */\r\n flipSide(\r\n anchor: HTMLElement,\r\n preferred: OverlaySide,\r\n options: OverlayPositionOptions = {},\r\n ): OverlaySide {\r\n const view = this.document.defaultView;\r\n if (!view) return preferred;\r\n\r\n const rect = anchor.getBoundingClientRect();\r\n // A zero-size anchor is not laid out (or not in the browser): we cannot make\r\n // a meaningful collision decision, so keep the preferred side.\r\n if (rect.width === 0 && rect.height === 0) return preferred;\r\n\r\n const offset = options.offset ?? 8;\r\n const estH = options.overlayHeight ?? 0;\r\n const estW = options.overlayWidth ?? 0;\r\n\r\n const space = {\r\n top: rect.top,\r\n bottom: view.innerHeight - rect.bottom,\r\n left: rect.left,\r\n right: view.innerWidth - rect.right,\r\n };\r\n\r\n switch (preferred) {\r\n case 'top':\r\n return space.top < estH + offset && space.bottom > space.top ? 'bottom' : 'top';\r\n case 'bottom':\r\n return space.bottom < estH + offset && space.top > space.bottom ? 'top' : 'bottom';\r\n case 'left':\r\n return space.left < estW + offset && space.right > space.left ? 'right' : 'left';\r\n case 'right':\r\n return space.right < estW + offset && space.left > space.right ? 'left' : 'right';\r\n }\r\n }\r\n\r\n /**\r\n * Resolves a `\"<side>\"` or `\"<side>-<align>\"` placement string (e.g. `top`,\r\n * `bottom-start`, `top-end`), flipping the side to fit the viewport while\r\n * preserving the alignment. Unknown placements are returned unchanged.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Near the bottom of the viewport with no room below:\r\n * positions.flipPlacement(trigger, 'bottom-start', { overlayHeight: 240 });\r\n * // => 'top-start'\r\n * ```\r\n */\r\n flipPlacement(\r\n anchor: HTMLElement,\r\n preferred: string,\r\n options: OverlayPositionOptions = {},\r\n ): string {\r\n const [sideStr, align] = preferred.split('-');\r\n if (!this.isSide(sideStr)) return preferred;\r\n\r\n const resolvedSide = this.flipSide(anchor, sideStr, options);\r\n return align ? `${resolvedSide}-${align}` : resolvedSide;\r\n }\r\n\r\n private isSide(value: string | undefined): value is OverlaySide {\r\n return value === 'top' || value === 'bottom' || value === 'left' || value === 'right';\r\n }\r\n}\r\n","import { PshFieldAppearance } from '../../types/semantic.types';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport {\r\n NgZone,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DestroyRef,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n ChangeDetectorRef,\r\n TemplateRef,\r\n ViewContainerRef,\r\n viewChild,\r\n effect\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\r\nimport type { FormValueControl } from '@angular/forms/signals';\r\nimport { PshPortalService, PshPortalRef } from '../../a11y/portal.service';\r\nimport { PshOverlayPositionService } from '../../a11y/overlay-position.service';\r\nimport { InputType, InputSize, AutocompleteConfig, INPUT_LABELS } from './input.types';\r\nimport { pshIsEmptyValue, pshRequiredError } from '../../utils/required-validator';\r\nimport { pshJoinAriaIds } from '../../utils/aria';\r\nimport { INPUT_CONFIG } from './input.tokens';\r\n\r\n@Component({\r\n selector: 'psh-input',\r\n templateUrl: './input.component.html',\r\n styleUrls: ['./input.component.css'],\r\n providers: [\r\n { provide: NG_VALIDATORS, useExisting: PshInputComponent, multi: true },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshInputComponent,\r\n multi: true\r\n }\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.psh-full-width]': 'fullWidth()',\r\n '[class.psh-small]': 'size() === \"small\"',\r\n '[class.psh-large]': 'size() === \"large\"',\r\n '[class.psh-error]': '!!error()',\r\n '[class.psh-success]': '!!success()',\r\n '[class.psh-disabled]': 'disabled()',\r\n '[class.psh-readonly]': 'readonly()',\r\n '[class.psh-loading]': 'loading()',\r\n '[class.psh-focused]': 'isFocused()',\r\n '[class.psh-has-start-icon]': '!!iconStart()',\r\n '[class.psh-has-end-icon]': '!!iconEnd() || type() === \"password\"',\r\n '[class.psh-outline]': 'appearance() === \"outline\"',\r\n '[class.psh-solid]': 'appearance() === \"solid\"',\r\n }\r\n})\r\nexport class PshInputComponent implements ControlValueAccessor, FormValueControl<string>, Validator {\r\n private readonly zone = inject(NgZone);\r\n private readonly config = inject(INPUT_CONFIG);\r\n\r\n private readonly elementRef = inject(ElementRef);\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly portal = inject(PshPortalService);\r\n private readonly viewContainer = inject(ViewContainerRef);\r\n private readonly overlayPosition = inject(PshOverlayPositionService);\r\n\r\n // The autocomplete suggestions are teleported to a body-level overlay layer so\r\n // they escape any ancestor overflow / stacking context (a modal body, a\r\n // scrollable card…) instead of being clipped.\r\n private readonly suggestionsTpl = viewChild<TemplateRef<unknown>>('suggestionsTpl');\r\n private portalRef: PshPortalRef | null = null;\r\n private readonly repositionHandler = (): void => this.reposition();\r\n\r\n private static nextId = 0;\r\n readonly inputId = `psh-input-${PshInputComponent.nextId++}`;\r\n\r\n readonly value = model<string>('');\r\n readonly disabled = model<boolean>(false);\r\n readonly readonly = input(false);\r\n readonly loading = input(false);\r\n readonly touched = model(false);\r\n/**\r\n * Emitted when the user finishes interacting with the control.\r\n *\r\n * Part of `FormUiControl`: the `Field` directive listens to **this**, not to\r\n * `touchedChange`, to mark the bound field as touched.\r\n */\r\n readonly touch = output<void>();\r\n\r\n readonly appearance = input<PshFieldAppearance>(this.config.appearance ?? 'outline');\r\n readonly size = input<InputSize>(this.config.size ?? 'medium');\r\n readonly fullWidth = input(this.config.fullWidth ?? false);\r\n readonly required = input(this.config.required ?? false);\r\n readonly showLabel = input(this.config.showLabel ?? true);\r\n readonly type = input<InputType>(this.config.type ?? 'text');\r\n readonly placeholder = input(this.config.placeholder ?? '');\r\n readonly label = input(this.config.label ?? '');\r\n readonly ariaLabel = input<string | null>(null);\r\n readonly iconStart = input<string>();\r\n readonly iconEnd = input<string>();\r\n readonly error = input<string | null | undefined>(null);\r\n readonly success = input<string | null | undefined>(null);\r\n readonly hint = input<string | null | undefined>(null);\r\n\r\n /**\r\n * Extra ids for `aria-describedby`. **Merged** with the control's own — the id of its error,\r\n * success or hint message — never replacing them.\r\n */\r\n readonly ariaDescribedBy = input<string>();\r\n\r\n /**\r\n * Ids of the elements that name this control, for the cases a visible `<label>` cannot\r\n * cover. Merged with anything the control already points at.\r\n */\r\n readonly ariaLabelledBy = input<string>();\r\n \r\n readonly suggestions = input<string[] | ((query: string) => Promise<string[]>)>([]);\r\n readonly autocompleteConfig = input<AutocompleteConfig>({\r\n minLength: 1,\r\n debounceTime: 300\r\n });\r\n\r\n private readonly suggestionsVisible = signal(false);\r\n private readonly focusedSignal = signal(false);\r\n private readonly filteredSuggestionsSignal = signal<string[]>([]);\r\n readonly focusedSuggestionIndex = signal(-1);\r\n private readonly passwordVisibleSignal = signal(false);\r\n \r\n private blurTimeoutId: number | null = null;\r\n private debounceTimeoutId: number | null = null;\r\n\r\n focused = output<void>();\r\n blurred = output<void>();\r\n suggestionSelected = output<string>();\r\n\r\n readonly showSuggestions = computed(() => this.suggestionsVisible() && this.filteredSuggestions().length > 0);\r\n\r\n /**\r\n * The suggestions listbox is announced only when the input can actually produce one.\r\n *\r\n * A `role=\"combobox\"` on a field with no popup tells a screen-reader user to expect one, so\r\n * this follows the `suggestions` input rather than being written on unconditionally.\r\n */\r\n protected readonly hasSuggestions = computed(() => {\r\n const source = this.suggestions();\r\n return typeof source === 'function' || source.length > 0;\r\n });\r\n\r\n protected readonly listboxId = `${this.inputId}-listbox`;\r\n\r\n /** The option the arrow keys are on — what a combobox reports through aria-activedescendant. */\r\n protected readonly activeDescendant = computed(() => {\r\n const index = this.focusedSuggestionIndex();\r\n return this.showSuggestions() && index >= 0 ? `${this.listboxId}-option-${index}` : null;\r\n });\r\n readonly filteredSuggestions = computed(() => this.filteredSuggestionsSignal());\r\n /** Whether the control currently has focus. A state readout; the event is `focused`. */\r\n readonly isFocused = computed(() => this.focusedSignal());\r\n readonly passwordVisible = computed(() => this.passwordVisibleSignal());\r\n \r\n readonly effectiveType = computed(() => {\r\n if (this.type() === 'password') {\r\n return this.passwordVisible() ? 'text' : 'password';\r\n }\r\n return this.type();\r\n });\r\n\r\n readonly computedAriaLabel = computed(() => this.ariaLabel() || this.label() || this.placeholder());\r\n readonly showPasswordLabel = input<string | undefined>(undefined);\r\n readonly hidePasswordLabel = input<string | undefined>(undefined);\r\n\r\n /** Name of the reveal control. It flips with the state, so it is one computed, not two. */\r\n readonly passwordToggleLabel = computed(() => {\r\n // Both are resolved before the choice, not inside it: a branch that is not taken is a\r\n // configured default nothing reads, and that is exactly what config-tokens.spec looks for.\r\n const show =\r\n this.showPasswordLabel() ??\r\n pshResolveConfigValue(this.config.showPasswordLabel) ??\r\n INPUT_LABELS.showPassword;\r\n const hide =\r\n this.hidePasswordLabel() ??\r\n pshResolveConfigValue(this.config.hidePasswordLabel) ??\r\n INPUT_LABELS.hidePassword;\r\n return this.passwordVisible() ? hide : show;\r\n });\r\n\r\n // Derived from the per-instance inputId: the message ids used to be the constants\r\n // 'error-message' / 'success-message' / 'hint-message', so two inputs in error on the\r\n // same page produced duplicate ids and a screen reader read the first one's message\r\n // for both. Same shape as textarea's describedBy.\r\n readonly describedBy = computed(() => {\r\n const own = this.error()\r\n ? `${this.inputId}-error`\r\n : this.success()\r\n ? `${this.inputId}-success`\r\n : this.hint()\r\n ? `${this.inputId}-hint`\r\n : null;\r\n return pshJoinAriaIds(own, this.ariaDescribedBy());\r\n });\r\n\r\n readonly state = computed(() => this.getState());\r\n\r\n private getState(): string {\r\n if (this.disabled()) return 'disabled';\r\n if (this.readonly()) return 'readonly';\r\n if (this.loading()) return 'loading';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n if (this.isFocused()) return 'focused';\r\n return 'default';\r\n }\r\n\r\n constructor() {\r\n // A value change revalidates by itself; a change to `required` does not — Angular has\r\n // no reason to suspect the validator's answer moved. This is what the callback is for.\r\n effect(() => {\r\n this.required();\r\n this.onValidatorChange();\r\n });\r\n\r\n this.destroyRef.onDestroy(() => {\r\n if (this.blurTimeoutId) clearTimeout(this.blurTimeoutId);\r\n if (this.debounceTimeoutId) clearTimeout(this.debounceTimeoutId);\r\n this.closePanel();\r\n });\r\n }\r\n\r\n /** Attaches / detaches / repositions the teleported suggestions panel to match visibility. */\r\n private syncPanel(): void {\r\n if (this.showSuggestions()) {\r\n if (this.portalRef) this.reposition();\r\n else this.openPanel();\r\n } else if (this.portalRef) {\r\n this.closePanel();\r\n }\r\n }\r\n\r\n private openPanel(): void {\r\n const tpl = this.suggestionsTpl();\r\n if (!tpl || this.portalRef) return;\r\n this.portalRef = this.portal.attach(tpl, this.viewContainer);\r\n this.reposition();\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n // Capture phase so inner (e.g. modal body) scrolls keep the panel aligned.\r\n // Registered outside Angular: a capture-phase scroll listener fires on every scroll of\r\n // every ancestor, and each one triggered a full change-detection pass. Repositioning\r\n // writes to the DOM and to a signal, and a signal write schedules its own refresh — the\r\n // zone was doing the work twice.\r\n this.zone.runOutsideAngular(() => {\r\n view?.addEventListener('scroll', this.repositionHandler, true);\r\n view?.addEventListener('resize', this.repositionHandler);\r\n });\r\n }\r\n\r\n private closePanel(): void {\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n view?.removeEventListener('scroll', this.repositionHandler, true);\r\n view?.removeEventListener('resize', this.repositionHandler);\r\n this.portalRef?.detach();\r\n this.portalRef = null;\r\n }\r\n\r\n private reposition(): void {\r\n if (!this.portalRef) return;\r\n const anchor = (this.elementRef.nativeElement as HTMLElement).querySelector(\r\n '.input-wrapper',\r\n ) as HTMLElement | null;\r\n if (!anchor) return;\r\n const side = this.overlayPosition.flipSide(anchor, 'bottom', {\r\n overlayHeight: this.portalRef.panel.offsetHeight,\r\n }) as 'top' | 'bottom';\r\n this.portalRef.position(anchor, side, 4);\r\n }\r\n\r\n private onChange = (_: string) => {};\r\n private onTouched = () => {};\r\n private onValidatorChange: () => void = () => {};\r\n\r\n writeValue(value: unknown): void {\r\n const safeValue = typeof value === 'string' ? value : '';\r\n this.value.set(safeValue);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: (v: string) => void): void { this.onChange = fn; }\r\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n\r\n handleInput(event: Event): void {\r\n const val = (event.target as HTMLInputElement).value;\r\n this.value.set(val);\r\n this.onChange(val);\r\n\r\n if (this.suggestions()) {\r\n this.debouncedUpdateSuggestions(val);\r\n }\r\n }\r\n\r\n handleFocus(): void {\r\n this.focusedSignal.set(true);\r\n this.focused.emit();\r\n\r\n const val = this.value();\r\n if (this.suggestions() && val.length >= this.autocompleteConfig().minLength) {\r\n this.updateSuggestions(val);\r\n }\r\n }\r\n\r\n handleBlur(): void {\r\n this.focusedSignal.set(false);\r\n this.blurred.emit();\r\n this.onTouched();\r\n this.touched.set(true);\r\n this.touch.emit();\r\n\r\n if (this.blurTimeoutId) clearTimeout(this.blurTimeoutId);\r\n this.blurTimeoutId = setTimeout(() => {\r\n this.suggestionsVisible.set(false);\r\n this.focusedSuggestionIndex.set(-1);\r\n this.syncPanel();\r\n this.blurTimeoutId = null;\r\n }, 200);\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (!this.showSuggestions()) return;\r\n\r\n const suggestions = this.filteredSuggestions();\r\n const currentIndex = this.focusedSuggestionIndex();\r\n\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.focusedSuggestionIndex.update(i => (i < suggestions.length - 1 ? i + 1 : 0));\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.focusedSuggestionIndex.update(i => (i > 0 ? i - 1 : suggestions.length - 1));\r\n break;\r\n case 'Enter':\r\n if (currentIndex >= 0 && currentIndex < suggestions.length) {\r\n event.preventDefault();\r\n const selected = suggestions[currentIndex];\r\n if (selected !== undefined) {\r\n this.handleSuggestionClick(selected);\r\n }\r\n }\r\n break;\r\n case 'Escape':\r\n // Only when suggestions are showing. Otherwise the keypress belongs to whatever\r\n // encloses the field — a modal, most often — and must reach it.\r\n if (this.suggestionsVisible()) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.suggestionsVisible.set(false);\r\n this.focusedSuggestionIndex.set(-1);\r\n this.syncPanel();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n handleSuggestionClick(suggestion: string): void {\r\n this.value.set(suggestion);\r\n this.onChange(suggestion);\r\n this.suggestionSelected.emit(suggestion);\r\n this.suggestionsVisible.set(false);\r\n this.focusedSuggestionIndex.set(-1);\r\n this.syncPanel();\r\n }\r\n\r\n togglePasswordVisibility(): void {\r\n this.passwordVisibleSignal.update(v => !v);\r\n }\r\n\r\n protected hasLabelContent(): boolean {\r\n return !!this.elementRef.nativeElement.querySelector('[psh-input-label]');\r\n }\r\n\r\n focus(): void {\r\n const inputEl = this.elementRef.nativeElement.querySelector('input');\r\n inputEl?.focus();\r\n }\r\n\r\n focusSelect(): void {\r\n this.focus();\r\n }\r\n\r\n private debouncedUpdateSuggestions(value: string): void {\r\n if (this.debounceTimeoutId) clearTimeout(this.debounceTimeoutId);\r\n this.debounceTimeoutId = setTimeout(() => {\r\n this.updateSuggestions(value);\r\n this.debounceTimeoutId = null;\r\n }, this.autocompleteConfig().debounceTime);\r\n }\r\n\r\n private async updateSuggestions(value: string): Promise<void> {\r\n const provider = this.suggestions();\r\n\r\n try {\r\n let results: string[] = [];\r\n if (typeof provider === 'function') {\r\n results = await provider(value);\r\n } else if (Array.isArray(provider)) {\r\n results = provider.filter(s => s.toLowerCase().includes(value.toLowerCase()));\r\n }\r\n \r\n this.filteredSuggestionsSignal.set(results);\r\n this.suggestionsVisible.set(results.length > 0);\r\n this.syncPanel();\r\n } catch (error) {\r\n // Fail gracefully (hide stale suggestions) but surface the error so a\r\n // failing provider is not silently swallowed during development.\r\n this.filteredSuggestionsSignal.set([]);\r\n this.suggestionsVisible.set(false);\r\n this.syncPanel();\r\n console.error('[psh-input] Suggestion provider failed:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Makes `required` a real constraint rather than an asterisk.\r\n *\r\n * Re-run whenever `required` or the value changes: `registerOnValidatorChange` gives us\r\n * the callback that tells Angular to revalidate, and an effect fires it.\r\n */\r\n validate(): ValidationErrors | null {\r\n return pshRequiredError(this.required(), pshIsEmptyValue(this.value()));\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.onValidatorChange = fn;\r\n }\r\n\r\n}","<div class=\"psh-input-container\">\r\n @if (showLabel()) {\r\n <!-- label[for] delegates focus to its control natively; the click handler is a convenience. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <label\r\n class=\"psh-input-label\"\r\n [for]=\"inputId\"\r\n (click)=\"focusSelect()\"\r\n [class.psh-required]=\"required()\"\r\n >\r\n <ng-content select=\"[psh-input-label]\"></ng-content>\r\n @if (!hasLabelContent()) {\r\n {{ label() }}\r\n }\r\n </label>\r\n }\r\n\r\n <div class=\"psh-input-wrapper\">\r\n @if (iconStart()) {\r\n <i class=\"ph ph-{{ iconStart() }}\" aria-hidden=\"true\"></i>\r\n }\r\n\r\n <input\r\n [id]=\"inputId\"\r\n [type]=\"effectiveType()\"\r\n [attr.placeholder]=\"placeholder()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-invalid]=\"!!error()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n [attr.role]=\"hasSuggestions() ? 'combobox' : null\"\r\n [attr.aria-autocomplete]=\"hasSuggestions() ? 'list' : null\"\r\n [attr.aria-expanded]=\"hasSuggestions() ? showSuggestions() : null\"\r\n [attr.aria-controls]=\"showSuggestions() ? listboxId : null\"\r\n [attr.aria-activedescendant]=\"activeDescendant()\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [required]=\"required()\"\r\n [value]=\"value()\"\r\n (input)=\"handleInput($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n (focus)=\"handleFocus()\"\r\n (blur)=\"handleBlur()\"\r\n [attr.data-state]=\"state()\"\r\n />\r\n\r\n @if (iconEnd()) {\r\n <i class=\"ph ph-{{ iconEnd() }}\" aria-hidden=\"true\"></i>\r\n }\r\n\r\n @if (type() === 'password') {\r\n <button\r\n type=\"button\"\r\n class=\"psh-password-toggle\"\r\n (click)=\"togglePasswordVisibility()\"\r\n [attr.aria-label]=\"passwordToggleLabel()\"\r\n [disabled]=\"disabled() || readonly()\"\r\n >\r\n <i \r\n [class]=\"'ph ph-' + (passwordVisible() ? 'eye-slash' : 'eye')\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </button>\r\n }\r\n\r\n @if (loading()) {\r\n <div class=\"psh-input-loader\" aria-hidden=\"true\">\r\n <div class=\"psh-loader\"></div>\r\n </div>\r\n }\r\n\r\n <ng-template #suggestionsTpl>\r\n <div class=\"psh-suggestions-list\" role=\"listbox\" [id]=\"listboxId\">\r\n @for (suggestion of filteredSuggestions(); track suggestion; let i = $index) {\r\n <!-- option in a listbox: keyboard is handled by the input (arrow keys + focusedSuggestionIndex). -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <div\r\n class=\"psh-suggestion-item\"\r\n [class.psh-focused]=\"i === focusedSuggestionIndex()\"\r\n [id]=\"listboxId + '-option-' + i\"\r\n role=\"option\"\r\n [attr.aria-selected]=\"i === focusedSuggestionIndex()\"\r\n (click)=\"handleSuggestionClick(suggestion)\"\r\n (mouseenter)=\"focusedSuggestionIndex.set(i)\"\r\n >\r\n {{ suggestion }}\r\n </div>\r\n }\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n @if (error()) {\r\n <div [id]=\"inputId + '-error'\" class=\"psh-input-error\" role=\"alert\">\r\n <ng-content select=\"[psh-input-error]\">\r\n {{ error() }}\r\n </ng-content>\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"inputId + '-success'\" class=\"psh-input-success\" role=\"status\">\r\n <ng-content select=\"[psh-input-success]\">\r\n {{ success() }}\r\n </ng-content>\r\n </div>\r\n } @else if (hint()) {\r\n <div [id]=\"inputId + '-hint'\" class=\"psh-input-hint\">\r\n <ng-content select=\"[psh-input-hint]\">\r\n {{ hint() }}\r\n </ng-content>\r\n </div>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, inject, input, output, signal, InjectionToken, TemplateRef } from '@angular/core';\r\nimport { PshLiveAnnouncerService } from '../../a11y/live-announcer.service';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { PshInputComponent } from '../input/input.component';\r\nimport { TableColumn, TableRow, TableSort, TableConfig, TableRowClickEvent, TableRowExpandEvent, TableExpandedRowContext, TableHeaderContext, TableEmptyContext } from './table.types';\r\n\r\nconst TABLE_DEFAULTS = {\r\n appearance: 'flat',\r\n size: 'medium',\r\n striped: false,\r\n hoverable: false,\r\n bordered: false,\r\n loading: false,\r\n emptyMessage: 'No data available',\r\n noResultsMessage: 'No results found',\r\n globalSearch: false,\r\n globalSearchPlaceholder: 'Search in all columns...',\r\n tableLayout: 'auto',\r\n truncateText: false,\r\n fullWidth: false,\r\n expandable: false,\r\n singleExpand: false,\r\n expandColumnLabel: 'Expand',\r\n expandRowLabel: 'Expand row',\r\n collapseRowLabel: 'Collapse row',\r\n sortedAscendingLabel: 'sorted ascending',\r\n sortedDescendingLabel: 'sorted descending',\r\n resultsFoundLabel: 'results found',\r\n} satisfies Partial<TableConfig>;\r\n\r\nexport const TABLE_CONFIG = new InjectionToken<Partial<TableConfig>>('TABLE_CONFIG', {\r\n factory: () => TABLE_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-table',\r\n imports: [NgTemplateOutlet, PshInputComponent],\r\n templateUrl: './table.component.html',\r\n styleUrls: ['./table.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n 'class': 'psh-table',\r\n '[class.psh-full-width]': 'fullWidth()'\r\n }\r\n})\r\nexport class PshTableComponent {\r\n private config = inject(TABLE_CONFIG);\r\n private readonly announcer = inject(PshLiveAnnouncerService);\r\n\r\n readonly appearance = input<'flat' | 'outline'>(this.config.appearance ?? 'flat');\r\n readonly size = input<'small' | 'medium' | 'large'>(this.config.size ?? 'medium');\r\n readonly striped = input(this.config.striped ?? false);\r\n readonly hoverable = input(this.config.hoverable ?? false);\r\n readonly bordered = input(this.config.bordered ?? false);\r\n readonly loading = input(this.config.loading ?? false);\r\n readonly globalSearch = input(this.config.globalSearch ?? false);\r\n readonly fullWidth = input(this.config.fullWidth ?? false);\r\n readonly columns = input.required<TableColumn[]>();\r\n readonly data = input.required<TableRow[]>();\r\n readonly emptyMessageInput = input<string | undefined>(undefined, { alias: 'emptyMessage' });\r\n readonly emptyMessage = computed(\r\n () => this.emptyMessageInput() ?? pshResolveConfigValue(this.config.emptyMessage) ?? 'No data available',\r\n );\r\n readonly noResultsMessageInput = input<string | undefined>(undefined, { alias: 'noResultsMessage' });\r\n readonly noResultsMessage = computed(\r\n () => this.noResultsMessageInput() ?? pshResolveConfigValue(this.config.noResultsMessage) ?? 'No results found',\r\n );\r\n readonly globalSearchPlaceholderInput = input<string | undefined>(undefined, { alias: 'globalSearchPlaceholder' });\r\n readonly globalSearchPlaceholder = computed(\r\n () => this.globalSearchPlaceholderInput() ?? pshResolveConfigValue(this.config.globalSearchPlaceholder) ?? 'Search in all columns...',\r\n );\r\n readonly tableLayout = input<'auto' | 'fixed'>(this.config.tableLayout ?? 'auto');\r\n readonly truncateText = input(this.config.truncateText ?? false);\r\n readonly expandable = input(this.config.expandable ?? false);\r\n readonly singleExpand = input(this.config.singleExpand ?? false);\r\n readonly expandedRowTemplate = input<TemplateRef<TableExpandedRowContext>>();\r\n\r\n /**\r\n * Replaces the content of every column header.\r\n *\r\n * The body cell was templatable and the header was not, so a per-column filter or a\r\n * two-line label meant `::ng-deep` into the `<th>`. The context carries the sort state and\r\n * a `toggleSort` callback, so the component keeps owning the keyboard path and `aria-sort`.\r\n */\r\n readonly headerTemplate = input<TemplateRef<TableHeaderContext>>();\r\n\r\n /**\r\n * Replaces the empty state.\r\n *\r\n * `emptyMessage` and `noResultsMessage` are strings, so an illustration or a \"clear the\r\n * filter\" button had nowhere to go. Both inputs still work when no template is given.\r\n */\r\n readonly emptyTemplate = input<TemplateRef<TableEmptyContext>>();\r\n\r\n /**\r\n * Extra classes for a row, from the row itself.\r\n *\r\n * `InfoCardData.customClass` already existed for the same need one component over; a table\r\n * had no way to mark a row as overdue, selected or archived.\r\n */\r\n readonly rowClass = input<(row: TableRow) => string | undefined>();\r\n\r\n /** Name of the table itself. There was none, so several tables on a page were all \"table\". */\r\n readonly ariaLabel = input<string>();\r\n /** Name of the expand column header, which has no visible text. Was a literal. */\r\n readonly expandColumnLabelInput = input<string | undefined>(undefined, { alias: 'expandColumnLabel' });\r\n readonly expandColumnLabel = computed(\r\n () => this.expandColumnLabelInput() ?? pshResolveConfigValue(this.config.expandColumnLabel) ?? 'Expand',\r\n );\r\n /** Name of a row's expand toggle. Was a pair of literals. */\r\n readonly expandRowLabelInput = input<string | undefined>(undefined, { alias: 'expandRowLabel' });\r\n readonly expandRowLabel = computed(\r\n () => this.expandRowLabelInput() ?? pshResolveConfigValue(this.config.expandRowLabel) ?? 'Expand row',\r\n );\r\n /** Name of a row's collapse toggle. Was a pair of literals. */\r\n readonly sortedAscendingLabel = computed(\r\n () => pshResolveConfigValue(this.config.sortedAscendingLabel) ?? 'sorted ascending',\r\n );\r\n readonly sortedDescendingLabel = computed(\r\n () => pshResolveConfigValue(this.config.sortedDescendingLabel) ?? 'sorted descending',\r\n );\r\n readonly resultsFoundLabel = computed(\r\n () => pshResolveConfigValue(this.config.resultsFoundLabel) ?? 'results found',\r\n );\r\n\r\n readonly collapseRowLabelInput = input<string | undefined>(undefined, { alias: 'collapseRowLabel' });\r\n readonly collapseRowLabel = computed(\r\n () => this.collapseRowLabelInput() ?? pshResolveConfigValue(this.config.collapseRowLabel) ?? 'Collapse row',\r\n );\r\n\r\n sortChange = output<TableSort>();\r\n globalSearchChange = output<string>();\r\n rowClicked = output<TableRowClickEvent>();\r\n rowExpanded = output<TableRowExpandEvent>();\r\n rowCollapsed = output<TableRowExpandEvent>();\r\n\r\n private readonly currentSortSignal = signal<TableSort | undefined>(undefined);\r\n readonly searchTermSignal = signal('');\r\n private readonly expandedRowIds = signal<Set<string | number>>(new Set());\r\n\r\n readonly currentSort = computed(() => this.currentSortSignal());\r\n readonly searchTerm = computed(() => this.searchTermSignal());\r\n\r\n readonly computedEmptyMessage = computed(() => {\r\n return this.searchTerm()\r\n ? `${this.noResultsMessage()} \"${this.searchTerm()}\"`\r\n : this.emptyMessage();\r\n });\r\n\r\n readonly state = computed(() => {\r\n if (this.loading()) return 'loading';\r\n if (this.filteredData().length === 0) return 'empty';\r\n return 'flat';\r\n });\r\n\r\n readonly filteredData = computed(() => {\r\n let result = [...this.data()];\r\n\r\n if (this.searchTerm()) {\r\n result = this.filterData(result, this.searchTerm());\r\n }\r\n\r\n const sort = this.currentSort();\r\n if (sort) {\r\n result = this.sortData(result, sort);\r\n }\r\n\r\n return result;\r\n });\r\n\r\n /**\r\n * Trie les données\r\n */\r\n private sortData(data: TableRow[], sort: TableSort): TableRow[] {\r\n return [...data].sort((a, b) => {\r\n const column = this.columns().find(col => col.key === sort.key);\r\n \r\n // Utiliser la fonction de tri personnalisée si elle existe\r\n if (column?.sortFn) {\r\n return sort.direction === 'asc' \r\n ? column.sortFn(a, b)\r\n : column.sortFn(b, a);\r\n }\r\n \r\n // Sinon, utiliser le tri par défaut avec le chemin\r\n const aValue = this.getNestedValue(a, column?.path || sort.key);\r\n const bValue = this.getNestedValue(b, column?.path || sort.key);\r\n\r\n return sort.direction === 'asc'\r\n ? this.compareValues(aValue, bValue)\r\n : this.compareValues(bValue, aValue);\r\n });\r\n }\r\n\r\n /**\r\n * Compare deux valeurs inconnues (numérique si possible, sinon lexicographique).\r\n */\r\n private compareValues(a: unknown, b: unknown): number {\r\n if (typeof a === 'number' && typeof b === 'number') {\r\n return a > b ? 1 : -1;\r\n }\r\n return String(a ?? '') > String(b ?? '') ? 1 : -1;\r\n }\r\n\r\n /**\r\n * Filtre les données\r\n */\r\n private filterData(data: TableRow[], searchTerm: string): TableRow[] {\r\n if (!searchTerm) return data;\r\n \r\n const term = searchTerm.toLowerCase();\r\n return data.filter(row => {\r\n return this.columns().some(column => {\r\n const value = this.getNestedValue(row, column.path || column.key);\r\n return value != null && String(value).toLowerCase().includes(term);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Récupère la valeur d'un objet imbriqué en utilisant un chemin\r\n */\r\n private getNestedValue(obj: unknown, path: string): unknown {\r\n return path.split('.').reduce<unknown>(\r\n (acc, part) =>\r\n acc != null && typeof acc === 'object'\r\n ? (acc as Record<string, unknown>)[part]\r\n : undefined,\r\n obj\r\n );\r\n }\r\n\r\n handleSort(column: TableColumn): void {\r\n if (!column.sortable) return;\r\n\r\n const direction = !this.currentSort() || this.currentSort()?.key !== column.key\r\n ? 'asc'\r\n : this.currentSort()?.direction === 'asc'\r\n ? 'desc'\r\n : 'asc';\r\n\r\n const sort: TableSort = { key: column.key, direction };\r\n this.currentSortSignal.set(sort);\r\n this.sortChange.emit(sort);\r\n\r\n // `aria-sort` states the new order for a reader that goes back to the header. Nothing\r\n // told a user who is not there that the whole body had just been reordered.\r\n this.announcer.announce(\r\n `${column.label}: ${direction === 'asc' ? this.sortedAscendingLabel() : this.sortedDescendingLabel()}`,\r\n );\r\n }\r\n\r\n onSearchValueChange(value: string): void {\r\n this.globalSearchChange.emit(value);\r\n // Filtering replaces the body silently too, and the count is the useful part of it.\r\n this.announcer.announce(`${this.filteredData().length} ${this.resultsFoundLabel()}`);\r\n }\r\n\r\n handleRowClick(row: TableRow): void {\r\n this.rowClicked.emit({ id: row.id, row });\r\n }\r\n\r\n /**\r\n * The path of each column, split once instead of once per cell.\r\n *\r\n * `getCellValue` runs rows × columns times per change-detection cycle and used to split the\r\n * path string on every one of them. The split depends on the columns, not on the data.\r\n */\r\n private readonly columnPaths = computed(\r\n () => new Map(this.columns().map(column => [column, (column.path || column.key).split('.')])),\r\n );\r\n\r\n protected getCellValue(row: TableRow, column: TableColumn): unknown {\r\n const path = this.columnPaths().get(column) ?? (column.path || column.key).split('.');\r\n return path.reduce<unknown>(\r\n (acc, part) =>\r\n acc != null && typeof acc === 'object' ? (acc as Record<string, unknown>)[part] : undefined,\r\n row,\r\n );\r\n }\r\n\r\n /**\r\n * The context a custom header receives.\r\n *\r\n * `toggleSort` is handed over rather than left to the caller: the component keeps owning\r\n * `aria-sort` and the keyboard path, so a custom header cannot accidentally ship a `<div>`\r\n * that only responds to a mouse — which is the bug B1 fixed on the default header.\r\n */\r\n private readonly headerContexts = computed(() => {\r\n const sort = this.currentSort();\r\n return new Map<TableColumn, TableHeaderContext>(\r\n this.columns().map(column => [\r\n column,\r\n {\r\n $implicit: column,\r\n sort: sort?.key === column.key ? sort.direction : null,\r\n toggleSort: () => this.handleSort(column),\r\n },\r\n ]),\r\n );\r\n });\r\n\r\n /**\r\n * Built once per render rather than once per cycle. The object used to be new every cycle —\r\n * and `toggleSort` a new closure with it — so `NgTemplateOutlet` saw a changed context each\r\n * time and re-rendered every custom header for nothing.\r\n */\r\n protected headerContext(column: TableColumn): TableHeaderContext {\r\n return (\r\n this.headerContexts().get(column) ?? {\r\n $implicit: column,\r\n sort: null,\r\n toggleSort: () => this.handleSort(column),\r\n }\r\n );\r\n }\r\n\r\n protected readonly emptyContext = computed<TableEmptyContext>(() => ({\r\n $implicit: this.computedEmptyMessage(),\r\n searchTerm: this.searchTerm(),\r\n }));\r\n\r\n protected rowClasses(row: TableRow): string {\r\n return this.rowClass()?.(row) ?? '';\r\n }\r\n\r\n readonly totalColumns = computed(() => this.columns().length + (this.expandable() ? 1 : 0));\r\n\r\n isRowExpandable(row: TableRow): boolean {\r\n return !!(row.children?.length || this.expandedRowTemplate());\r\n }\r\n\r\n isRowExpanded(row: TableRow): boolean {\r\n return this.expandedRowIds().has(row.id);\r\n }\r\n\r\n toggleRow(row: TableRow): void {\r\n if (!this.isRowExpandable(row)) return;\r\n\r\n const ids = new Set(this.expandedRowIds());\r\n const wasExpanded = ids.has(row.id);\r\n\r\n if (this.singleExpand()) {\r\n ids.clear();\r\n }\r\n\r\n if (wasExpanded) {\r\n ids.delete(row.id);\r\n this.expandedRowIds.set(ids);\r\n this.rowCollapsed.emit({ id: row.id, row, expanded: false });\r\n } else {\r\n ids.add(row.id);\r\n this.expandedRowIds.set(ids);\r\n this.rowExpanded.emit({ id: row.id, row, expanded: true });\r\n }\r\n }\r\n\r\n expandAll(): void {\r\n const ids = new Set<string | number>();\r\n for (const row of this.filteredData()) {\r\n if (this.isRowExpandable(row)) {\r\n ids.add(row.id);\r\n }\r\n }\r\n this.expandedRowIds.set(ids);\r\n }\r\n\r\n collapseAll(): void {\r\n this.expandedRowIds.set(new Set());\r\n }\r\n}","<div\r\n class=\"psh-table-wrapper\"\r\n [class.psh-striped]=\"striped()\"\r\n [class.psh-hoverable]=\"hoverable()\"\r\n [class.psh-bordered]=\"bordered()\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [class.psh-outline]=\"appearance() === 'outline'\"\r\n [class.psh-table-fixed]=\"tableLayout() === 'fixed'\"\r\n [class.psh-truncate]=\"truncateText()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @if (globalSearch()) {\r\n <div class=\"psh-global-search\" role=\"search\">\r\n <psh-input\r\n [placeholder]=\"globalSearchPlaceholder()\"\r\n [ariaLabel]=\"globalSearchPlaceholder()\"\r\n [size]=\"size()\"\r\n [fullWidth]=\"true\"\r\n [showLabel]=\"false\"\r\n iconStart=\"magnifying-glass\"\r\n type=\"search\"\r\n [(value)]=\"searchTermSignal\"\r\n (valueChange)=\"onSearchValueChange($event)\"\r\n />\r\n </div>\r\n }\r\n\r\n <table role=\"table\" [attr.aria-label]=\"ariaLabel()\">\r\n <thead>\r\n <tr>\r\n @if (expandable()) {\r\n <th class=\"psh-expand-header\" scope=\"col\" [attr.aria-label]=\"expandColumnLabel()\"></th>\r\n }\r\n @for (column of columns(); track column.key) {\r\n <th\r\n [style.width]=\"column.width\"\r\n scope=\"col\"\r\n [attr.aria-sort]=\"column.sortable ? (currentSort()?.key === column.key ? (currentSort()?.direction === 'asc' ? 'ascending' : 'descending') : 'none') : null\"\r\n [class.psh-sortable]=\"column.sortable\"\r\n >\r\n @if (headerTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"headerTemplate()!\"\r\n [ngTemplateOutletContext]=\"headerContext(column)\"\r\n ></ng-container>\r\n } @else if (column.sortable) {\r\n <!-- A real button, so sorting is reachable by keyboard and gets a native\r\n focus ring. The icons are decorative: aria-sort on the th carries the\r\n state, which is why they had aria-hidden cancelling their aria-label. -->\r\n <button\r\n type=\"button\"\r\n class=\"psh-th-content psh-sort-button\"\r\n (click)=\"handleSort(column)\"\r\n >\r\n {{ column.label }}\r\n @if (currentSort()?.key === column.key) {\r\n <i\r\n [class]=\"'ph ' + (currentSort()?.direction === 'desc' ? 'ph-sort-descending' : 'ph-sort-ascending')\"\r\n aria-hidden=\"true\">\r\n </i>\r\n } @else {\r\n <i class=\"ph ph-arrows-down-up psh-sort-icon-neutral\" aria-hidden=\"true\"></i>\r\n }\r\n </button>\r\n } @else {\r\n <div class=\"psh-th-content\">{{ column.label }}</div>\r\n }\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n @if (loading()) {\r\n <tr class=\"psh-loading-row\">\r\n <td [attr.colspan]=\"totalColumns()\">\r\n <div class=\"psh-loading-indicator\">\r\n <div class=\"psh-spinner\"></div>\r\n </div>\r\n </td>\r\n </tr>\r\n } @else if (filteredData().length === 0) {\r\n <tr class=\"psh-empty-row\">\r\n <td [attr.colspan]=\"totalColumns()\">\r\n @if (emptyTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"emptyTemplate()!\"\r\n [ngTemplateOutletContext]=\"emptyContext()\"\r\n ></ng-container>\r\n } @else {\r\n {{ computedEmptyMessage() }}\r\n }\r\n </td>\r\n </tr>\r\n } @else {\r\n @for (row of filteredData(); track row.id) {\r\n <tr\r\n [class]=\"rowClasses(row)\"\r\n [class.psh-expanded]=\"expandable() && isRowExpanded(row)\"\r\n [attr.tabindex]=\"hoverable() ? 0 : null\"\r\n (click)=\"handleRowClick(row)\"\r\n (keydown.enter)=\"handleRowClick(row)\"\r\n (keydown.space)=\"handleRowClick(row); $event.preventDefault()\"\r\n >\r\n @if (expandable()) {\r\n <td class=\"psh-expand-cell\">\r\n @if (isRowExpandable(row)) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-expand-toggle\"\r\n [attr.aria-expanded]=\"isRowExpanded(row)\"\r\n [attr.aria-label]=\"isRowExpanded(row) ? collapseRowLabel() : expandRowLabel()\"\r\n (click)=\"toggleRow(row); $event.stopPropagation()\"\r\n >\r\n <i class=\"ph ph-caret-right\"></i>\r\n </button>\r\n }\r\n </td>\r\n }\r\n @for (column of columns(); track column.key) {\r\n <td>\r\n @if (column.template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"column.template\"\r\n [ngTemplateOutletContext]=\"{ $implicit: row, column: column }\"\r\n ></ng-container>\r\n } @else {\r\n {{ getCellValue(row, column) }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n\r\n @if (expandable() && isRowExpanded(row)) {\r\n @if (expandedRowTemplate()) {\r\n <tr class=\"psh-expanded-content-row\">\r\n <td [attr.colspan]=\"totalColumns()\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"expandedRowTemplate()!\"\r\n [ngTemplateOutletContext]=\"{ $implicit: row }\"\r\n ></ng-container>\r\n </td>\r\n </tr>\r\n } @else if (row.children?.length) {\r\n @for (child of row.children; track child.id) {\r\n <tr class=\"psh-child-row\">\r\n @if (expandable()) {\r\n <td class=\"psh-expand-cell\"></td>\r\n }\r\n @for (column of columns(); track column.key) {\r\n <td>\r\n @if (column.template) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"column.template\"\r\n [ngTemplateOutletContext]=\"{ $implicit: child, column: column }\"\r\n ></ng-container>\r\n } @else {\r\n {{ getCellValue(child, column) }}\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n }\r\n }\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n</div>\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * What a `psh-tab` needs from the tabs it sits in: the id prefix its tab button uses.\r\n *\r\n * See `PSH_STEPPER` for why this is a token rather than an import. The ids were `tab-0` and\r\n * `panel-0` — the *same* strings `psh-stepper` used, so a page with a tabs and a stepper had\r\n * duplicate ids across two unrelated components.\r\n */\r\nexport interface PshTabsApi {\r\n /** Unique per tabs instance. Tabs are `<prefix>-tab-<i>`, panels `<prefix>-panel-<i>`. */\r\n readonly idPrefix: string;\r\n}\r\n\r\nexport const PSH_TABS = new InjectionToken<PshTabsApi>('PSH_TABS');\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n input,\r\n signal\r\n} from '@angular/core';\r\nimport { Tab } from './tabs.types';\r\nimport { PSH_TABS } from './tabs.token';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\n@Component({\r\n selector: 'psh-tab',\r\n template: '<ng-content />',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.psh-tab-panel]': 'true',\r\n '[class.psh-active]': 'isActive()',\r\n '[attr.role]': '\"tabpanel\"',\r\n '[attr.aria-labelledby]': 'idPrefix + \"-tab-\" + index()',\r\n '[attr.id]': 'idPrefix + \"-panel-\" + index()',\r\n '[attr.tabindex]': 'isActive() ? 0 : -1'\r\n }\r\n})\r\nexport class PshTabComponent {\r\n /** The tabs' id prefix; see `PshStepComponent` for the standalone fallback. */\r\n protected readonly idPrefix =\r\n inject(PSH_TABS, { optional: true })?.idPrefix ?? pshUniqueId('tab');\r\n\r\n readonly header = input.required<string>();\r\n readonly icon = input<string>();\r\n readonly disabled = input(false);\r\n readonly ariaLabel = input<string>();\r\n\r\n private readonly _index = signal(0);\r\n private readonly _isActive = signal(false);\r\n\r\n readonly index = this._index.asReadonly();\r\n readonly isActive = this._isActive.asReadonly();\r\n\r\n setIndex(value: number): void {\r\n this._index.set(value);\r\n }\r\n\r\n setActive(active: boolean): void {\r\n this._isActive.set(active);\r\n }\r\n\r\n toTabData(): Tab {\r\n return {\r\n header: this.header(),\r\n icon: this.icon(),\r\n content: '',\r\n disabled: this.disabled(),\r\n ariaLabel: this.ariaLabel()\r\n };\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChildren,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n InjectionToken,\r\n linkedSignal,\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { TabsVariant, TabsSize, Tab, TabsConfig, TabChangeEvent } from './tabs.types';\r\nimport { PshTabComponent } from './tab.component';\r\nimport { PSH_TABS, PshTabsApi } from './tabs.token';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\nconst TABS_DEFAULTS = {\r\n ariaLabel: 'Tab navigation',\r\n variant: 'default',\r\n size: 'medium',\r\n activeIndex: 0,\r\n animated: true,\r\n} satisfies Partial<TabsConfig>;\r\n\r\nexport const TABS_CONFIG = new InjectionToken<Partial<TabsConfig>>('TABS_CONFIG', {\r\n factory: () => TABS_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-tabs',\r\n templateUrl: './tabs.component.html',\r\n styleUrls: ['./tabs.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [{ provide: PSH_TABS, useExisting: PshTabsComponent }],\r\n host: {\r\n '[class]': 'hostClasses()',\r\n role: 'region',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n },\r\n})\r\nexport class PshTabsComponent implements PshTabsApi {\r\n /** Namespaces the tab and panel ids: they were `tab-0` / `panel-0` for every instance. */\r\n readonly idPrefix = pshUniqueId('tabs');\r\n\r\n private config = inject(TABS_CONFIG);\r\n\r\n readonly variant = input<TabsVariant>(this.config.variant ?? 'default');\r\n readonly size = input<TabsSize>(this.config.size ?? 'medium');\r\n readonly animated = input(this.config.animated ?? true);\r\n readonly tabs = input<Tab[]>([]);\r\n readonly ariaLabelInput = input<string | undefined>(undefined, { alias: 'ariaLabel' });\r\n readonly ariaLabel = computed(\r\n () => this.ariaLabelInput() ?? pshResolveConfigValue(this.config.ariaLabel) ?? 'Tab navigation',\r\n );\r\n readonly ariaOrientation = input<'horizontal' | 'vertical'>('horizontal');\r\n\r\n readonly activeIndexInput = input(this.config.activeIndex ?? 0, { alias: 'activeIndex' });\r\n readonly activeIndex = linkedSignal(this.activeIndexInput);\r\n\r\n readonly tabComponents = contentChildren(PshTabComponent);\r\n\r\n readonly tabsToDisplay = computed(() => {\r\n const components = this.tabComponents();\r\n if (components.length > 0) {\r\n return components.map(c => c.toTabData());\r\n }\r\n return this.tabs();\r\n });\r\n\r\n readonly hasContentProjection = computed(() => this.tabComponents().length > 0);\r\n\r\n activeIndexChange = output<number>();\r\n tabChange = output<TabChangeEvent>();\r\n\r\n readonly hostClasses = computed(() => {\r\n const classes = ['psh-tabs-wrapper'];\r\n const size = this.size();\r\n const variant = this.variant();\r\n\r\n if (size !== 'medium') classes.push(`psh-tabs-${size}`);\r\n classes.push(`psh-tabs-${variant}`);\r\n if (this.animated()) classes.push('psh-tabs-animated');\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const tabs = this.tabComponents();\r\n const currentIndex = this.activeIndex();\r\n tabs.forEach((tab, index) => {\r\n tab.setIndex(index);\r\n tab.setActive(index === currentIndex);\r\n });\r\n });\r\n\r\n effect(() => {\r\n const currentIndex = this.activeIndex();\r\n const tabs = this.tabsToDisplay();\r\n if (tabs.length > 0 && currentIndex >= tabs.length) {\r\n const clampedIndex = Math.max(0, tabs.length - 1);\r\n this.activeIndex.set(clampedIndex);\r\n this.activeIndexChange.emit(clampedIndex);\r\n }\r\n });\r\n }\r\n\r\n handleKeyDown(event: KeyboardEvent, _index: number): void {\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n this.selectPrevious();\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n this.selectNext();\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.selectFirst();\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.selectLast();\r\n break;\r\n }\r\n }\r\n\r\n selectTab(index: number): void {\r\n const tabs = this.tabsToDisplay();\r\n const tab = tabs[index];\r\n\r\n if (!tab || tab.disabled) return;\r\n\r\n const previousIndex = this.activeIndex();\r\n if (previousIndex !== index) {\r\n this.activeIndex.set(index);\r\n this.activeIndexChange.emit(index);\r\n this.tabChange.emit({ previousIndex, currentIndex: index, tab });\r\n }\r\n }\r\n\r\n selectNext(): void {\r\n const tabs = this.tabsToDisplay();\r\n let nextIndex = (this.activeIndex() + 1) % tabs.length;\r\n\r\n while (tabs[nextIndex]?.disabled && nextIndex !== this.activeIndex()) {\r\n nextIndex = (nextIndex + 1) % tabs.length;\r\n }\r\n\r\n if (nextIndex !== this.activeIndex()) {\r\n this.selectTab(nextIndex);\r\n }\r\n }\r\n\r\n selectPrevious(): void {\r\n const tabs = this.tabsToDisplay();\r\n let prevIndex = (this.activeIndex() - 1 + tabs.length) % tabs.length;\r\n\r\n while (tabs[prevIndex]?.disabled && prevIndex !== this.activeIndex()) {\r\n prevIndex = (prevIndex - 1 + tabs.length) % tabs.length;\r\n }\r\n\r\n if (prevIndex !== this.activeIndex()) {\r\n this.selectTab(prevIndex);\r\n }\r\n }\r\n\r\n selectFirst(): void {\r\n const tabs = this.tabsToDisplay();\r\n let firstIndex = 0;\r\n\r\n while (tabs[firstIndex]?.disabled && firstIndex < tabs.length - 1) {\r\n firstIndex++;\r\n }\r\n\r\n if (!tabs[firstIndex]?.disabled && firstIndex !== this.activeIndex()) {\r\n this.selectTab(firstIndex);\r\n }\r\n }\r\n\r\n selectLast(): void {\r\n const tabs = this.tabsToDisplay();\r\n let lastIndex = tabs.length - 1;\r\n\r\n while (tabs[lastIndex]?.disabled && lastIndex > 0) {\r\n lastIndex--;\r\n }\r\n\r\n if (!tabs[lastIndex]?.disabled && lastIndex !== this.activeIndex()) {\r\n this.selectTab(lastIndex);\r\n }\r\n }\r\n\r\n getActiveTab(): Tab | undefined {\r\n return this.tabsToDisplay()[this.activeIndex()];\r\n }\r\n\r\n getTabComponent(index: number): PshTabComponent | undefined {\r\n return this.tabComponents()[index];\r\n }\r\n}\r\n","<div\r\n class=\"psh-tabs-container\"\r\n [class.psh-animated]=\"animated()\"\r\n>\r\n <div\r\n class=\"psh-tabs-header\"\r\n [class]=\"'psh-' + variant()\"\r\n role=\"tablist\"\r\n [attr.aria-orientation]=\"ariaOrientation()\"\r\n >\r\n <!-- Tracked by position: see psh-stepper. `tabsToDisplay()` rebuilds its objects. -->\r\n @for (tab of tabsToDisplay(); track $index; let i = $index) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-tab-button\"\r\n role=\"tab\"\r\n [class.psh-active]=\"i === activeIndex()\"\r\n [attr.aria-selected]=\"i === activeIndex()\"\r\n [attr.aria-disabled]=\"tab.disabled || null\"\r\n [attr.aria-controls]=\"idPrefix + '-panel-' + i\"\r\n [attr.aria-label]=\"tab.ariaLabel || tab.header\"\r\n [attr.id]=\"idPrefix + '-tab-' + i\"\r\n [tabindex]=\"i === activeIndex() ? 0 : -1\"\r\n [disabled]=\"tab.disabled\"\r\n (click)=\"$event.preventDefault(); selectTab(i)\"\r\n (keydown)=\"handleKeyDown($event, i)\"\r\n >\r\n @if (tab.icon) {\r\n <i class=\"ph ph-{{ tab.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n {{ tab.header }}\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"psh-tabs-content\">\r\n @if (hasContentProjection()) {\r\n <ng-content />\r\n } @else {\r\n @for (tab of tabsToDisplay(); track $index; let i = $index) {\r\n <div\r\n class=\"psh-tab-panel\"\r\n role=\"tabpanel\"\r\n [class.psh-active]=\"i === activeIndex()\"\r\n [attr.aria-labelledby]=\"idPrefix + '-tab-' + i\"\r\n [attr.id]=\"idPrefix + '-panel-' + i\"\r\n [attr.tabindex]=\"i === activeIndex() ? 0 : -1\"\r\n [attr.hidden]=\"i !== activeIndex() || null\"\r\n >\r\n {{ tab.content }}\r\n </div>\r\n }\r\n }\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output, InjectionToken, ElementRef, AfterContentChecked, signal } from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { TagVariant, TagSize, TagConfig } from './tag.types';\r\n\r\nconst TAG_DEFAULTS = {\r\n color: 'primary',\r\n size: 'medium',\r\n closable: false,\r\n disabled: false,\r\n interactive: false,\r\n closeLabel: 'Remove tag'\r\n} satisfies Partial<TagConfig>;\r\n\r\nexport const TAG_CONFIG = new InjectionToken<Partial<TagConfig>>('TAG_CONFIG', {\r\n factory: () => TAG_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-tag',\r\n templateUrl: './tag.component.html',\r\n styleUrls: ['./tag.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshTagComponent implements AfterContentChecked {\r\n private readonly config = inject(TAG_CONFIG);\r\n private readonly elementRef = inject(ElementRef);\r\n private readonly projectedText = signal('');\r\n\r\n readonly color = input<TagVariant>(this.config.color ?? 'primary');\r\n readonly size = input<TagSize>(this.config.size ?? 'medium');\r\n readonly closable = input(this.config.closable ?? false);\r\n readonly disabled = input(this.config.disabled ?? false);\r\n readonly interactive = input(this.config.interactive ?? false);\r\n readonly icon = input<string>();\r\n readonly closeLabelInput = input<string | undefined>(undefined, { alias: 'closeLabel' });\r\n readonly closeLabel = computed(\r\n () => this.closeLabelInput() ?? pshResolveConfigValue(this.config.closeLabel) ?? 'Remove tag',\r\n );\r\n readonly content = input('Tag');\r\n readonly ariaLabel = input<string>();\r\n\r\n readonly clicked = output<MouseEvent>();\r\n readonly closed = output<void>();\r\n\r\n readonly computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const contentText = this.content();\r\n if (contentText && contentText !== 'Tag') return contentText;\r\n\r\n const projected = this.projectedText();\r\n if (projected) return projected;\r\n\r\n return 'Tag';\r\n });\r\n\r\n ngAfterContentChecked(): void {\r\n const contentElement = this.elementRef.nativeElement.querySelector('.psh-tag-content');\r\n if (contentElement) {\r\n const text = (contentElement.textContent || '').trim();\r\n if (text !== this.projectedText()) {\r\n this.projectedText.set(text);\r\n }\r\n }\r\n }\r\n\r\n readonly computedRole = computed(() =>\r\n this.interactive() ? 'button' : 'status'\r\n );\r\n\r\n readonly computedTabIndex = computed(() =>\r\n this.interactive() && !this.disabled() ? 0 : -1\r\n );\r\n\r\n readonly state = computed(() => this.disabled() ? 'disabled' : 'default');\r\n\r\n handleClick(event: MouseEvent): void {\r\n if (!this.disabled() && this.interactive()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.disabled() || !this.interactive()) return;\r\n\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event as unknown as MouseEvent);\r\n }\r\n }\r\n\r\n handleClose(event: MouseEvent): void {\r\n event.stopPropagation();\r\n if (!this.disabled()) {\r\n this.closed.emit();\r\n }\r\n }\r\n}","<div\r\n class=\"psh-tag\"\r\n [class.psh-primary]=\"color() === 'primary'\"\r\n [class.psh-secondary]=\"color() === 'secondary'\"\r\n [class.psh-success]=\"color() === 'success'\"\r\n [class.psh-warning]=\"color() === 'warning'\"\r\n [class.psh-danger]=\"color() === 'danger'\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [class.psh-disabled]=\"disabled()\"\r\n [attr.role]=\"computedRole()\"\r\n [attr.tabindex]=\"computedTabIndex()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-disabled]=\"disabled() || null\"\r\n [attr.data-state]=\"state()\"\r\n (click)=\"handleClick($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n>\r\n @if (icon()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"psh-tag-content\">\r\n <ng-content>{{ content() }}</ng-content>\r\n </span>\r\n @if (closable()) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-tag-close\"\r\n (click)=\"handleClose($event)\"\r\n [attr.aria-label]=\"closeLabel()\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n</div>","import { PshFieldAppearance } from '../../types/semantic.types';\r\nimport { PshConfigValue } from '../../utils/config-value';\r\n/**\r\n * @deprecated since 7.0.0 — use {@link PshFieldAppearance}. Surface treatment now shares one\r\n * vocabulary across the library.\r\n */\r\nexport type TextareaVariant = PshFieldAppearance;\r\nexport type TextareaSize = 'small' | 'medium' | 'large';\r\nexport type TextareaResize = 'none' | 'vertical' | 'horizontal' | 'both';\r\n\r\nexport interface TextareaConfig {\r\n appearance: TextareaVariant;\r\n size: TextareaSize;\r\n resize: TextareaResize;\r\n required: boolean;\r\n /** Word after the character count, as in \"12 / 200 characters\" */\r\n characterCountSuffix: PshConfigValue<string>;\r\n fullWidth: boolean;\r\n showLabel: boolean;\r\n showCharacterCount: boolean;\r\n autoSize: boolean;\r\n rows: number;\r\n maxLength?: number;\r\n label: string;\r\n placeholder: string;\r\n hint: string | null | undefined;\r\n error: string | null | undefined;\r\n success: string | null | undefined;\r\n ariaLabel: string | null;\r\n}\r\n\r\nexport const TEXTAREA_LABELS = {\r\n characterCountSuffix: 'characters',\r\n characterCountSeparator: '/',\r\n} as const;\r\n","/**\r\n * Application-wide defaults for `psh-textarea`.\r\n *\r\n * Provide it to set a default once for every psh-textarea in the application:\r\n *\r\n * provideHelix({ components: { textarea: { … } } })\r\n *\r\n * The defaults are a named const rather than an inline literal so `satisfies` runs the\r\n * excess-property check: a key renamed on the interface fails the build here instead of\r\n * quietly falling through to the literal in the component.\r\n */\r\nimport { InjectionToken } from '@angular/core';\r\nimport { TextareaConfig, TEXTAREA_LABELS } from './textarea.types';\r\n\r\nconst TEXTAREA_DEFAULTS = {\r\n appearance: 'outline',\r\n size: 'medium',\r\n resize: 'vertical',\r\n rows: 4,\r\n required: false,\r\n characterCountSuffix: TEXTAREA_LABELS.characterCountSuffix,\r\n fullWidth: false,\r\n showLabel: true,\r\n showCharacterCount: false,\r\n autoSize: false,\r\n label: '',\r\n placeholder: '',\r\n} satisfies Partial<TextareaConfig>;\r\n\r\nexport const TEXTAREA_CONFIG = new InjectionToken<Partial<TextareaConfig>>('TEXTAREA_CONFIG', {\r\n factory: () => TEXTAREA_DEFAULTS,\r\n});\r\n","import { InjectionToken } from '@angular/core';\r\nimport { ToastConfig } from './toast.types';\r\n\r\nconst TOAST_DEFAULTS = {\r\n position: 'top-right',\r\n duration: 5000,\r\n maxToasts: 5,\r\n pauseOnHover: true,\r\n showIcon: true,\r\n showCloseButton: true,\r\n ariaLabel: 'Notifications',\r\n} satisfies Partial<ToastConfig>;\r\n\r\nexport const TOAST_CONFIG = new InjectionToken<Partial<ToastConfig>>('TOAST_CONFIG', {\r\n factory: () => TOAST_DEFAULTS,\r\n});\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n linkedSignal,\r\n output,\r\n InjectionToken,\r\n ElementRef,\r\n OnDestroy,\r\n PLATFORM_ID,\r\n afterNextRender\r\n} from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { PshOverlayPositionService } from '../../a11y/overlay-position.service';\r\nimport { TooltipPosition, TooltipConfig, TooltipVariant } from './tooltip.types';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\nconst TOOLTIP_DEFAULTS = {\r\n variant: 'dark',\r\n position: 'top',\r\n showDelay: 200,\r\n hideDelay: 100,\r\n maxWidth: 200,\r\n autoFlip: true,\r\n} satisfies Partial<TooltipConfig>;\r\n\r\nexport const TOOLTIP_CONFIG = new InjectionToken<Partial<TooltipConfig>>('TOOLTIP_CONFIG', {\r\n factory: () => TOOLTIP_DEFAULTS,\r\n});\r\n\r\n@Component({\r\n selector: 'psh-tooltip',\r\n imports: [],\r\n templateUrl: './tooltip.component.html',\r\n styleUrls: ['./tooltip.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '(mouseenter)': 'show()',\r\n '(mouseleave)': 'hide()',\r\n '(focusin)': 'show()',\r\n '(focusout)': 'hide()',\r\n '(keydown.escape)': 'hideImmediate()',\r\n '[style.display]': '\"inline-block\"',\r\n '[style.position]': '\"relative\"',\r\n }\r\n})\r\nexport class PshTooltipComponent implements OnDestroy {\r\n private config = inject(TOOLTIP_CONFIG) as Required<TooltipConfig>;\r\n private elementRef = inject(ElementRef);\r\n private readonly overlayPosition = inject(PshOverlayPositionService);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n readonly variant = input<TooltipVariant>(this.config.variant ?? 'dark');\r\n readonly position = input<TooltipPosition>(this.config.position ?? 'top');\r\n readonly showDelay = input<number>(this.config.showDelay ?? 200);\r\n readonly hideDelay = input<number>(this.config.hideDelay ?? 100);\r\n /**\r\n * Any CSS length: `'200px'`, `'20rem'`, `'min(90vw, 24rem)'`.\r\n *\r\n * Was a `number` meaning implicit pixels, while `sidebar.width` and\r\n * `horizontal-card.sideWidth` were already strings — three treatments for one notion, and\r\n * this was the one that could not express a relative width.\r\n */\r\n readonly maxWidth = input<string>(`${this.config.maxWidth ?? 200}px`);\r\n readonly autoFlip = input<boolean>(this.config.autoFlip ?? true);\r\n\r\n readonly content = input<string>('');\r\n readonly disabled = input<boolean>(false);\r\n readonly id = input<string>(this.generateUniqueId());\r\n\r\n opened = output<void>();\r\n closed = output<void>();\r\n\r\n readonly isVisible = signal(false);\r\n\r\n /**\r\n * The side the tooltip is drawn on: the requested one, until collision detection moves it.\r\n *\r\n * A `linkedSignal` rather than a `signal` kept in step by an effect — it follows\r\n * `position()` by construction, and `updatePosition()` overwrites it when `autoFlip` has\r\n * something to say. The effect that used to do this was a derivation written the long way.\r\n */\r\n readonly computedPosition = linkedSignal<TooltipPosition>(() => this.position());\r\n\r\n private showTimeout: ReturnType<typeof setTimeout> | null = null;\r\n private hideTimeout: ReturnType<typeof setTimeout> | null = null;\r\n private resizeObserver: ResizeObserver | null = null;\r\n\r\n readonly tooltipId = computed(() => `${this.id()}-tooltip`);\r\n readonly triggerId = computed(() => `${this.id()}-trigger`);\r\n\r\n constructor() {\r\n // ResizeObserver is a browser-only global, absent from the platform-server runtime.\r\n // It used to be constructed from ngAfterViewInit, which Angular also runs on the\r\n // server, so every SSR render of a tooltip threw. afterNextRender moves it out of the\r\n // render path and the explicit platform check makes the guarantee independent of how\r\n // render hooks are scheduled in any given environment.\r\n afterNextRender(() => {\r\n if (!this.isBrowser || !this.autoFlip()) return;\r\n\r\n this.resizeObserver = new ResizeObserver(() => {\r\n if (this.isVisible()) {\r\n this.updatePosition();\r\n }\r\n });\r\n this.resizeObserver.observe(this.elementRef.nativeElement);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.showTimeout) clearTimeout(this.showTimeout);\r\n if (this.hideTimeout) clearTimeout(this.hideTimeout);\r\n if (this.resizeObserver) {\r\n this.resizeObserver.disconnect();\r\n this.resizeObserver = null;\r\n }\r\n }\r\n\r\n show(): void {\r\n if (this.disabled()) return;\r\n\r\n if (this.hideTimeout) {\r\n clearTimeout(this.hideTimeout);\r\n this.hideTimeout = null;\r\n }\r\n\r\n if (!this.isVisible() && !this.showTimeout) {\r\n this.showTimeout = setTimeout(() => {\r\n if (this.autoFlip()) {\r\n this.updatePosition();\r\n } else {\r\n this.computedPosition.set(this.position());\r\n }\r\n this.setVisible(true);\r\n this.showTimeout = null;\r\n }, this.showDelay());\r\n }\r\n }\r\n\r\n hide(): void {\r\n if (this.showTimeout) {\r\n clearTimeout(this.showTimeout);\r\n this.showTimeout = null;\r\n }\r\n\r\n if (this.isVisible() && !this.hideTimeout) {\r\n this.hideTimeout = setTimeout(() => {\r\n this.setVisible(false);\r\n this.hideTimeout = null;\r\n }, this.hideDelay());\r\n }\r\n }\r\n\r\n hideImmediate(): void {\r\n if (this.showTimeout) {\r\n clearTimeout(this.showTimeout);\r\n this.showTimeout = null;\r\n }\r\n if (this.hideTimeout) {\r\n clearTimeout(this.hideTimeout);\r\n this.hideTimeout = null;\r\n }\r\n this.setVisible(false);\r\n }\r\n\r\n /**\r\n * The one place visibility changes, and therefore the one place `opened` and `closed` are\r\n * emitted.\r\n *\r\n * They used to come from an effect on `isVisible`, which runs once on creation — so every\r\n * tooltip on the page emitted `closed` before it had ever been shown. An output is a\r\n * consequence of a transition, not of a state.\r\n */\r\n private setVisible(next: boolean): void {\r\n if (this.isVisible() === next) return;\r\n this.isVisible.set(next);\r\n if (next) this.opened.emit();\r\n else this.closed.emit();\r\n }\r\n\r\n private updatePosition(): void {\r\n // Collision detection / flip is delegated to the shared overlay-position\r\n // primitive (same logic, now reused by other popovers).\r\n this.computedPosition.set(\r\n this.overlayPosition.flipSide(this.elementRef.nativeElement, this.position(), {\r\n overlayHeight: 40,\r\n overlayWidth: this.maxWidthInPixels(),\r\n offset: 12,\r\n }),\r\n );\r\n }\r\n\r\n /**\r\n * The flip calculation needs a number. A relative length — `50vw`, `min(…)` — cannot be\r\n * resolved without layout, so it falls back to the 200px the calculation used before;\r\n * getting the flip slightly wrong is better than not flipping at all.\r\n */\r\n private maxWidthInPixels(): number {\r\n const parsed = Number.parseFloat(this.maxWidth());\r\n return Number.isFinite(parsed) && this.maxWidth().trim().endsWith('px')\r\n ? Math.min(parsed, 200)\r\n : 200;\r\n }\r\n\r\n private generateUniqueId(): string {\r\n return pshUniqueId('tooltip');\r\n }\r\n}\r\n","<div\r\n class=\"psh-tooltip-wrapper\"\r\n [attr.id]=\"triggerId()\"\r\n [attr.aria-describedby]=\"isVisible() ? tooltipId() : null\"\r\n>\r\n <ng-content></ng-content>\r\n\r\n @if (isVisible()) {\r\n <div\r\n [attr.id]=\"tooltipId()\"\r\n class=\"psh-tooltip\"\r\n [class.psh-top]=\"computedPosition() === 'top'\"\r\n [class.psh-bottom]=\"computedPosition() === 'bottom'\"\r\n [class.psh-left]=\"computedPosition() === 'left'\"\r\n [class.psh-right]=\"computedPosition() === 'right'\"\r\n [class.psh-light]=\"variant() === 'light'\"\r\n [class.psh-dark]=\"variant() === 'dark'\"\r\n [style.max-width]=\"maxWidth()\"\r\n role=\"tooltip\"\r\n >\r\n {{ content() }}\r\n <div class=\"psh-tooltip-arrow\"></div>\r\n </div>\r\n }\r\n</div>\r\n","/**\r\n * One call to configure the design system.\r\n *\r\n * Before this, an application that wanted to set the theme contrast target, its brand colours,\r\n * a toast position and a default size for buttons had to import four tokens by name and\r\n * assemble the `Provider[]` itself — for tokens that were never exported deliberately, only by\r\n * `export *` ricochet, and that nothing in the documentation listed. There were twenty-two\r\n * `InjectionToken`s in the library and exactly one `provide*` function, which returned a bare\r\n * `Provider` rather than `EnvironmentProviders`.\r\n *\r\n * bootstrapApplication(App, {\r\n * providers: [\r\n * provideHelix({\r\n * theme: { targetContrast: 'AAA', customerContext: BrandService },\r\n * components: {\r\n * button: { size: 'large', appearance: 'outline' },\r\n * modal: { dismissLabel: 'Fermer', confirmLabel: 'Valider' },\r\n * toast: { position: 'bottom-right' },\r\n * },\r\n * }),\r\n * ],\r\n * });\r\n *\r\n * The three finer-grained functions exist for the applications that want one part of it:\r\n * `provideHelixTheme`, `provideHelixComponentDefaults` and `provideHelixToast`. `provideHelix`\r\n * is those three composed, so mixing them is harmless — the later provider wins, as it does\r\n * anywhere else in Angular.\r\n *\r\n * **A defaults object is merged with nothing.** Each component reads\r\n * `this.config.<key> ?? <its own literal>`, so a partial override leaves every other key at\r\n * the library default. That is why `{ button: { size: 'large' } }` does not reset the\r\n * button's colour or appearance.\r\n */\r\nimport {\r\n EnvironmentProviders,\r\n Provider,\r\n Type,\r\n makeEnvironmentProviders,\r\n} from '@angular/core';\r\n\r\nimport {\r\n CUSTOMER_CONTEXT_SERVICE,\r\n CustomerContextService,\r\n PSH_THEME_OPTIONS,\r\n PshThemeOptions,\r\n} from './services/theme/theme.service';\r\n\r\nimport { ALERT_CONFIG } from './components/alert/alert.tokens';\r\nimport { AVATAR_CONFIG } from './components/avatar/avatar.tokens';\r\nimport { BADGE_CONFIG } from './components/badge/badge.tokens';\r\nimport { BUTTON_CONFIG } from './components/button/button.tokens';\r\nimport { CARD_CONFIG } from './components/card/card.tokens';\r\nimport { CHECKBOX_CONFIG } from './components/checkbox/checkbox.component';\r\nimport { COLLAPSE_CONFIG } from './components/collapse/collapse.tokens';\r\nimport { DROPDOWN_CONFIG } from './components/dropdown/dropdown.tokens';\r\nimport { HORIZONTAL_CARD_CONFIG } from './components/horizontal-card/horizontal-card.tokens';\r\nimport { INFO_CARD_CONFIG } from './components/info-card/info-card.tokens';\r\nimport { INPUT_CONFIG } from './components/input/input.tokens';\r\nimport { MENU_CONFIG } from './components/menu/menu.tokens';\r\nimport { MODAL_CONFIG } from './components/modal/modal.component';\r\nimport { PAGINATION_CONFIG } from './components/pagination/pagination.component';\r\nimport { PROGRESSBAR_CONFIG } from './components/progressbar/progressbar.component';\r\nimport { RADIO_CONFIG } from './components/radio/radio.component';\r\nimport { RADIO_GROUP_CONFIG, RadioGroupConfig } from './components/radio/radio-group.component';\r\nimport { SELECT_CONFIG } from './components/select/select.tokens';\r\nimport { SIDEBAR_CONFIG } from './components/sidebar/sidebar.component';\r\nimport { SPINLOADER_CONFIG } from './components/spinloader/spinloader.component';\r\nimport { STAT_CARD_CONFIG } from './components/stat-card/stat-card.tokens';\r\nimport { STATE_FLOW_INDICATOR_CONFIG } from './components/state-flow-indicator/state-flow-indicator.component';\r\nimport { STEPPER_CONFIG } from './components/stepper/stepper.component';\r\nimport { SWITCH_CONFIG } from './components/switch/switch.component';\r\nimport { TAB_BAR_CONFIG } from './components/tab-bar/tab-bar.component';\r\nimport { TABLE_CONFIG } from './components/table/table.component';\r\nimport { TABS_CONFIG } from './components/tabs/tabs.component';\r\nimport { TAG_CONFIG } from './components/tag/tag.component';\r\nimport { TEXTAREA_CONFIG } from './components/textarea/textarea.tokens';\r\nimport { TOAST_CONFIG } from './components/toast/toast.tokens';\r\nimport { TOOLTIP_CONFIG } from './components/tooltip/tooltip.component';\r\n\r\nimport { AlertConfig } from './components/alert/alert.types';\r\nimport { AvatarConfig } from './components/avatar/avatar.types';\r\nimport { BadgeConfig } from './components/badge/badge.types';\r\nimport { ButtonConfig } from './components/button/button.types';\r\nimport { CardConfig } from './components/card/card.types';\r\nimport { CheckboxConfig } from './components/checkbox/checkbox.types';\r\nimport { CollapseConfig } from './components/collapse/collapse.types';\r\nimport { DropdownConfig } from './components/dropdown/dropdown.types';\r\nimport { HorizontalCardConfig } from './components/horizontal-card/horizontal-card.types';\r\nimport { InfoCardConfig } from './components/info-card/info-card.types';\r\nimport { InputConfig } from './components/input/input.types';\r\nimport { MenuConfig } from './components/menu/menu.types';\r\nimport { ModalConfig } from './components/modal/modal.types';\r\nimport { PaginationConfig } from './components/pagination/pagination.types';\r\nimport { ProgressbarConfig } from './components/progressbar/progressbar.types';\r\nimport { RadioConfig } from './components/radio/radio.types';\r\nimport { SelectConfig } from './components/select/select.types';\r\nimport { SidebarConfig } from './components/sidebar/sidebar.types';\r\nimport { SpinLoaderConfig } from './components/spinloader/spinloader.types';\r\nimport { StatCardConfig } from './components/stat-card/stat-card.types';\r\nimport { StateFlowIndicatorConfig } from './components/state-flow-indicator/state-flow-indicator.types';\r\nimport { StepperConfig } from './components/stepper/stepper.types';\r\nimport { SwitchConfig } from './components/switch/switch.types';\r\nimport { TabBarConfig } from './components/tab-bar/tab-bar.types';\r\nimport { TableConfig } from './components/table/table.types';\r\nimport { TabsConfig } from './components/tabs/tabs.types';\r\nimport { TagConfig } from './components/tag/tag.types';\r\nimport { TextareaConfig } from './components/textarea/textarea.types';\r\nimport { ToastConfig } from './components/toast/toast.types';\r\nimport { TooltipConfig } from './components/tooltip/tooltip.types';\r\n\r\n/**\r\n * Per-component defaults, keyed by the component's own name.\r\n *\r\n * Every key is optional and every value is a `Partial`: set only what you want to change.\r\n */\r\nexport interface PshComponentDefaults {\r\n alert?: Partial<AlertConfig>;\r\n avatar?: Partial<AvatarConfig>;\r\n badge?: Partial<BadgeConfig>;\r\n button?: Partial<ButtonConfig>;\r\n card?: Partial<CardConfig>;\r\n checkbox?: Partial<CheckboxConfig>;\r\n collapse?: Partial<CollapseConfig>;\r\n dropdown?: Partial<DropdownConfig>;\r\n horizontalCard?: Partial<HorizontalCardConfig>;\r\n infoCard?: Partial<InfoCardConfig>;\r\n input?: Partial<InputConfig>;\r\n menu?: Partial<MenuConfig>;\r\n modal?: Partial<ModalConfig>;\r\n pagination?: Partial<PaginationConfig>;\r\n progressbar?: Partial<ProgressbarConfig>;\r\n radio?: Partial<RadioConfig>;\r\n radioGroup?: Partial<RadioGroupConfig>;\r\n select?: Partial<SelectConfig>;\r\n sidebar?: Partial<SidebarConfig>;\r\n spinloader?: Partial<SpinLoaderConfig>;\r\n statCard?: Partial<StatCardConfig>;\r\n stateFlowIndicator?: Partial<StateFlowIndicatorConfig>;\r\n stepper?: Partial<StepperConfig>;\r\n switch?: Partial<SwitchConfig>;\r\n tabBar?: Partial<TabBarConfig>;\r\n table?: Partial<TableConfig>;\r\n tabs?: Partial<TabsConfig>;\r\n tag?: Partial<TagConfig>;\r\n textarea?: Partial<TextareaConfig>;\r\n toast?: Partial<ToastConfig>;\r\n tooltip?: Partial<TooltipConfig>;\r\n}\r\n\r\n/** Theme configuration: the contrast floor, and where brand colours come from. */\r\nexport interface PshThemeConfig extends PshThemeOptions {\r\n /**\r\n * A service supplying the application's brand colours. The theme derives its whole palette\r\n * from them in OKLCH and raises any pair that would fall under the contrast target.\r\n */\r\n customerContext?: Type<CustomerContextService>;\r\n}\r\n\r\nexport interface PshConfig {\r\n theme?: PshThemeConfig;\r\n components?: PshComponentDefaults;\r\n}\r\n\r\n/**\r\n * The map every provider here walks.\r\n *\r\n * `satisfies Record<keyof Required<PshComponentDefaults>, unknown>` is what keeps the two in\r\n * step: a component added to the interface without a token here, or a token here that the\r\n * interface does not name, fails the build. Without it, a missing entry would be a key an\r\n * application can set and nothing reads.\r\n */\r\nconst TOKEN_BY_KEY = {\r\n alert: ALERT_CONFIG,\r\n avatar: AVATAR_CONFIG,\r\n badge: BADGE_CONFIG,\r\n button: BUTTON_CONFIG,\r\n card: CARD_CONFIG,\r\n checkbox: CHECKBOX_CONFIG,\r\n collapse: COLLAPSE_CONFIG,\r\n dropdown: DROPDOWN_CONFIG,\r\n horizontalCard: HORIZONTAL_CARD_CONFIG,\r\n infoCard: INFO_CARD_CONFIG,\r\n input: INPUT_CONFIG,\r\n menu: MENU_CONFIG,\r\n modal: MODAL_CONFIG,\r\n pagination: PAGINATION_CONFIG,\r\n progressbar: PROGRESSBAR_CONFIG,\r\n radio: RADIO_CONFIG,\r\n radioGroup: RADIO_GROUP_CONFIG,\r\n select: SELECT_CONFIG,\r\n sidebar: SIDEBAR_CONFIG,\r\n spinloader: SPINLOADER_CONFIG,\r\n statCard: STAT_CARD_CONFIG,\r\n stateFlowIndicator: STATE_FLOW_INDICATOR_CONFIG,\r\n stepper: STEPPER_CONFIG,\r\n switch: SWITCH_CONFIG,\r\n tabBar: TAB_BAR_CONFIG,\r\n table: TABLE_CONFIG,\r\n tabs: TABS_CONFIG,\r\n tag: TAG_CONFIG,\r\n textarea: TEXTAREA_CONFIG,\r\n toast: TOAST_CONFIG,\r\n tooltip: TOOLTIP_CONFIG,\r\n} as const satisfies Record<keyof Required<PshComponentDefaults>, unknown>;\r\n\r\n/** Every component config token, in one place, for an application that wants to enumerate them. */\r\nexport const PSH_CONFIG_TOKENS = TOKEN_BY_KEY;\r\n\r\nfunction componentProviders(defaults: PshComponentDefaults): Provider[] {\r\n const providers: Provider[] = [];\r\n for (const key of Object.keys(defaults) as (keyof PshComponentDefaults)[]) {\r\n const value = defaults[key];\r\n if (value === undefined) continue;\r\n providers.push({ provide: TOKEN_BY_KEY[key], useValue: value });\r\n }\r\n return providers;\r\n}\r\n\r\nfunction themeProviders(theme: PshThemeConfig): Provider[] {\r\n const { customerContext, ...options } = theme;\r\n const providers: Provider[] = [{ provide: PSH_THEME_OPTIONS, useValue: options }];\r\n if (customerContext) {\r\n providers.push({ provide: CUSTOMER_CONTEXT_SERVICE, useClass: customerContext });\r\n }\r\n return providers;\r\n}\r\n\r\n/** Theme only: contrast target and brand colours. */\r\nexport function provideHelixTheme(theme: PshThemeConfig = {}): EnvironmentProviders {\r\n return makeEnvironmentProviders(themeProviders(theme));\r\n}\r\n\r\n/** Component defaults only. */\r\nexport function provideHelixComponentDefaults(\r\n defaults: PshComponentDefaults,\r\n): EnvironmentProviders {\r\n return makeEnvironmentProviders(componentProviders(defaults));\r\n}\r\n\r\n/** Toast only — the one component driven entirely by a service rather than by inputs. */\r\nexport function provideHelixToast(config: Partial<ToastConfig>): EnvironmentProviders {\r\n return makeEnvironmentProviders([{ provide: TOAST_CONFIG, useValue: config }]);\r\n}\r\n\r\n/** Theme and component defaults in one call. */\r\nexport function provideHelix(config: PshConfig = {}): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n ...(config.theme ? themeProviders(config.theme) : []),\r\n ...(config.components ? componentProviders(config.components) : []),\r\n ]);\r\n}\r\n","import { PshComponentDefaults } from '../provide-helix';\r\n\r\n/**\r\n * Every string the library ships, in French.\r\n *\r\n * The library's own defaults are English — it is published on npm, and its code, its\r\n * documentation and its commits are English too. Before 7.0.0 they were neither: twenty-five\r\n * strings were French and thirty English, decided component by component, so a `psh-modal`\r\n * said \"Close\" above a `psh-select` that said \"Sélectionner une option\".\r\n *\r\n * bootstrapApplication(App, {\r\n * providers: [provideHelix({ components: PSH_FRENCH_DEFAULTS })],\r\n * });\r\n *\r\n * Merge it with your own overrides rather than replacing it:\r\n *\r\n * provideHelix({\r\n * components: {\r\n * ...PSH_FRENCH_DEFAULTS,\r\n * modal: { ...PSH_FRENCH_DEFAULTS.modal, confirmLabel: 'Envoyer' },\r\n * },\r\n * })\r\n *\r\n * `npm run verify:i18n-preset` fails when a translatable default is added to a component and\r\n * not to this file — without it the preset would quietly fall behind, and the symptom would be\r\n * one English label in an otherwise French page.\r\n */\r\nexport const PSH_FRENCH_DEFAULTS: PshComponentDefaults = {\r\n alert: {\r\n labels: { dismiss: \"Fermer l'alerte\" },\r\n },\r\n avatar: {\r\n alt: 'Photo de profil',\r\n },\r\n button: {\r\n loadingText: 'Chargement…',\r\n disabledText: \"Cette action n'est pas disponible\",\r\n },\r\n collapse: {\r\n defaultHeaderText: 'Section pliable',\r\n },\r\n dropdown: {\r\n label: 'Menu déroulant',\r\n },\r\n infoCard: {\r\n copyButtonLabel: 'Copier',\r\n copyFeedbackText: 'Copié',\r\n emptyStateMessage: 'Aucune information disponible',\r\n notProvidedText: 'Non renseigné',\r\n },\r\n input: {\r\n showPasswordLabel: 'Afficher le mot de passe',\r\n hidePasswordLabel: 'Masquer le mot de passe',\r\n },\r\n modal: {\r\n dismissLabel: 'Fermer',\r\n confirmLabel: 'Valider',\r\n cancelLabel: 'Annuler',\r\n },\r\n pagination: {\r\n firstLabel: 'Première page',\r\n previousLabel: 'Page précédente',\r\n nextLabel: 'Page suivante',\r\n lastLabel: 'Dernière page',\r\n pageLabel: 'Page',\r\n ofLabel: 'sur',\r\n itemsLabel: 'éléments',\r\n itemsPerPageLabel: 'Éléments par page',\r\n ariaLabel: 'Pagination',\r\n },\r\n select: {\r\n placeholder: 'Sélectionner une option',\r\n multiplePlaceholder: 'Sélectionner des options',\r\n noResultsText: 'Aucun résultat',\r\n clearLabel: 'Effacer la sélection',\r\n searchPlaceholder: 'Rechercher…',\r\n },\r\n sidebar: {\r\n ariaLabel: 'Navigation latérale',\r\n },\r\n spinloader: {\r\n ariaLabel: 'Chargement en cours',\r\n },\r\n stateFlowIndicator: {\r\n ariaLabel: 'Indicateur de progression',\r\n ariaLabels: {\r\n step: 'Étape',\r\n completed: 'Étape complétée',\r\n active: 'Étape active',\r\n incomplete: 'Étape incomplète',\r\n disabled: 'Étape désactivée',\r\n warning: 'Étape avec avertissement',\r\n error: 'Étape en erreur',\r\n },\r\n },\r\n stepper: {\r\n ariaLabel: 'Navigation par étapes',\r\n ariaLabels: {\r\n step: 'Étape',\r\n completed: 'Étape complétée',\r\n active: 'Étape active',\r\n incomplete: 'Étape incomplète',\r\n disabled: 'Étape désactivée',\r\n },\r\n },\r\n tabBar: {\r\n ariaLabel: 'Navigation par onglets',\r\n },\r\n tabs: {\r\n ariaLabel: 'Navigation par onglets',\r\n },\r\n table: {\r\n emptyMessage: 'Aucune donnée disponible',\r\n noResultsMessage: 'Aucun résultat',\r\n globalSearchPlaceholder: 'Rechercher dans toutes les colonnes…',\r\n expandColumnLabel: 'Détail',\r\n expandRowLabel: 'Afficher le détail',\r\n collapseRowLabel: 'Masquer le détail',\r\n sortedAscendingLabel: 'trié par ordre croissant',\r\n sortedDescendingLabel: 'trié par ordre décroissant',\r\n resultsFoundLabel: 'résultats',\r\n },\r\n tag: {\r\n closeLabel: 'Supprimer le tag',\r\n },\r\n textarea: {\r\n characterCountSuffix: 'caractères',\r\n },\r\n toast: {\r\n ariaLabel: 'Notifications',\r\n },\r\n};\r\n","/**\r\n * The vocabulary every ps-helix component shares.\r\n *\r\n * Before 7.0.0 one notion — \"which semantic colour is this?\" — was spelled six different\r\n * ways: `variant` on badge, button, dropdown, progressbar and tag; `color` on spinloader;\r\n * `type` on alert and toast; `colorVariant` on card; `tagVariant` on stat-card; and `tone`\r\n * on info-card rows. Each carried its own union, so `info` existed on five components and\r\n * not on the other six. Asking for red meant remembering which component you were holding.\r\n *\r\n * There is now one name and one union.\r\n */\r\n\r\n/**\r\n * Semantic colour. The same seven values on every component that has a colour, so\r\n * `color=\"danger\"` means the same thing wherever it appears.\r\n *\r\n * `neutral` replaces the assorted `default` and `muted` values that used to mean\r\n * \"no semantic emphasis\".\r\n */\r\nexport type PshColor =\r\n | 'primary'\r\n | 'secondary'\r\n | 'success'\r\n | 'warning'\r\n | 'danger'\r\n | 'info'\r\n | 'neutral';\r\n\r\n/** Every value of {@link PshColor}, for iterating in demos, tests and documentation. */\r\nexport const PSH_COLORS: readonly PshColor[] = [\r\n 'primary',\r\n 'secondary',\r\n 'success',\r\n 'warning',\r\n 'danger',\r\n 'info',\r\n 'neutral',\r\n] as const;\r\n\r\n/**\r\n * Surface treatment — how a component is drawn, independent of what colour it is.\r\n *\r\n * `variant` used to carry three incompatible notions at once: elevation on card and\r\n * table, colour on badge and button, display form on tabs and stepper. Colour moved to\r\n * {@link PshColor}; surface treatment lives here.\r\n *\r\n * solid filled with its colour (was `filled`)\r\n * soft tinted background, same hue\r\n * outline border only (was `outline` / `outlined`)\r\n * ghost no border and no fill (was `text`)\r\n * elevated raised with a shadow\r\n * flat no elevation, no border (was `default`)\r\n *\r\n * Each component declares the subset it supports; the words mean the same thing in all of\r\n * them. `variant` survives only where the notion is a genuinely component-specific display\r\n * form that is neither colour nor surface — tabs (`underline | pills`), stepper\r\n * (`numbered | progress`), menu (`compact | expanded`), spinloader (`circle | dots |\r\n * pulse`), tooltip (`light | dark`). It is no longer a catch-all.\r\n */\r\nexport type PshAppearance = 'solid' | 'soft' | 'outline' | 'ghost' | 'elevated' | 'flat';\r\n\r\n/** The appearances a control (button, dropdown) offers. */\r\nexport type PshControlAppearance = Extract<PshAppearance, 'solid' | 'outline' | 'ghost'>;\r\n\r\n/** The appearances a text field (input, select, textarea) offers. */\r\nexport type PshFieldAppearance = Extract<PshAppearance, 'outline' | 'solid'>;\r\n\r\n/** The appearances a surface (card, table, collapse, pagination) offers. */\r\nexport type PshSurfaceAppearance = Extract<PshAppearance, 'flat' | 'elevated' | 'outline'>;\r\n\r\n/**\r\n * Size. Already homogeneous across all 30 components before 7.0.0 — the one axis that was\r\n * never inconsistent — and deliberately left alone.\r\n */\r\nexport type PshSize = 'small' | 'medium' | 'large';\r\n\r\nexport const PSH_SIZES: readonly PshSize[] = ['small', 'medium', 'large'] as const;\r\n\r\n/* ------------------------------------------------------------- navigation */\r\n\r\n/**\r\n * Why a navigation was refused.\r\n *\r\n * Before 7.0.0 the reason was an English sentence — `\"Page 12 is out of bounds (1-9)\"`,\r\n * `\"Cannot activate step 3. Please complete previous steps first\"`. A consumer who needed to\r\n * react differently to \"out of range\" and \"your guard said no\" had to match on that prose,\r\n * which is neither stable nor translatable. Branch on this instead.\r\n */\r\nexport type PshNavigationErrorReason =\r\n /** The requested page or step index is outside the valid range. */\r\n | 'out-of-bounds'\r\n /** A `beforeChange` guard returned false. */\r\n | 'blocked'\r\n /** A `beforeChange` guard threw. The error is in `cause`. */\r\n | 'rejected'\r\n /** An earlier step has not been completed. */\r\n | 'prerequisite-incomplete';\r\n\r\n/**\r\n * Emitted when a component refuses to navigate.\r\n *\r\n * One shape for the three components that report this. `pagination` used to emit\r\n * `{ action, reason }` and `stepper` / `state-flow-indicator` a bare `string`, so the same\r\n * output name carried two incompatible payloads.\r\n */\r\nexport interface PshNavigationError {\r\n /** The navigation that was attempted. */\r\n action: 'goToPage' | 'goToStep';\r\n /** Machine-readable cause. Branch on this, never on `message`. */\r\n reason: PshNavigationErrorReason;\r\n /** The page or step index that could not be reached. */\r\n target: number;\r\n /**\r\n * English detail, for logs and debugging. Not a user-facing string: it is not translated\r\n * and its wording is not part of the public contract.\r\n */\r\n message: string;\r\n /**\r\n * For `reason: 'rejected'`, whatever the guard threw. `unknown` is the honest type —\r\n * JavaScript can throw anything — and it mirrors `Error.cause`.\r\n */\r\n cause?: unknown;\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n input,\r\n output,\r\n inject,\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { AlertType, IconPosition, AlertSize, AlertRole, AlertLabels } from './alert.types';\r\nimport { ALERT_CONFIG } from './alert.tokens';\r\n\r\n// Default alert labels\r\nconst DEFAULT_LABELS: AlertLabels = {\r\n dismiss: 'Dismiss alert'\r\n};\r\n\r\n// Default alert icons\r\nconst DEFAULT_ICONS: Record<string, string> = {\r\n info: 'info',\r\n success: 'check-circle',\r\n warning: 'warning',\r\n danger: 'warning-octagon'\r\n};\r\n\r\nconst DEFAULT_CONFIG = {\r\n type: 'info' as AlertType,\r\n iconPosition: 'left' as IconPosition,\r\n closable: false,\r\n size: 'medium' as AlertSize,\r\n showIcon: true\r\n};\r\n\r\n@Component({\r\n selector: 'psh-alert',\r\n templateUrl: './alert.component.html',\r\n styleUrls: ['./alert.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshAlertComponent {\r\n private readonly config = inject(ALERT_CONFIG);\r\n\r\n\r\n // Inputs\r\n readonly color = input<AlertType>(this.config.color ?? DEFAULT_CONFIG.type);\r\n readonly iconPosition = input<IconPosition>(this.config.iconPosition ?? DEFAULT_CONFIG.iconPosition);\r\n readonly closable = input(this.config.closable ?? DEFAULT_CONFIG.closable);\r\n readonly size = input<AlertSize>(this.config.size ?? DEFAULT_CONFIG.size);\r\n readonly showIcon = input(this.config.showIcon ?? DEFAULT_CONFIG.showIcon);\r\n readonly role = input<AlertRole>();\r\n readonly icon = input<string>();\r\n readonly ariaLabel = input<string>();\r\n readonly dismissLabelInput = input<string | undefined>(undefined, { alias: 'dismissLabel' });\r\n readonly dismissLabel = computed(\r\n () => this.dismissLabelInput() ?? pshResolveConfigValue(this.config.labels?.dismiss) ?? DEFAULT_LABELS.dismiss,\r\n );\r\n readonly ariaLive = input<'polite' | 'assertive'>();\r\n readonly content = input('');\r\n \r\n // Outputs\r\n closed = output<void>();\r\n\r\n // Computed values\r\n readonly defaultIcon = computed(() => DEFAULT_ICONS[this.color()] || 'info');\r\n readonly getIcon = computed(() => this.icon() || this.defaultIcon());\r\n\r\n readonly computedAriaLive = computed(() => \r\n this.ariaLive() || (['warning', 'danger'].includes(this.color()) ? 'assertive' : 'polite')\r\n );\r\n\r\n readonly computedRole = computed(() => \r\n this.role() || (['warning', 'danger'].includes(this.color()) ? 'alert' : 'status')\r\n );\r\n\r\n readonly state = computed(() => {\r\n if (this.closable()) return 'closable';\r\n return this.color();\r\n });\r\n\r\n handleClose(): void {\r\n this.closed.emit();\r\n }\r\n}","<div\r\n class=\"psh-alert\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [class]=\"'psh-' + color()\"\r\n [attr.role]=\"computedRole()\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [attr.aria-live]=\"computedAriaLive()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <div class=\"psh-alert-content\" [class.psh-icon-right]=\"iconPosition() === 'right'\">\r\n @if (showIcon()) {\r\n <i class=\"ph ph-{{ getIcon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n <div class=\"psh-alert-message\">\r\n <ng-content>{{ content() }}</ng-content>\r\n </div>\r\n </div>\r\n\r\n <!--\r\n Actions. The alert had one slot, in the message area, so the standard pattern — a\r\n \"Retry\" button aligned to the right of the text — had nowhere to go.\r\n -->\r\n <div class=\"psh-alert-actions\">\r\n <ng-content select=\"[psh-alert-actions]\"></ng-content>\r\n </div>\r\n\r\n @if (closable()) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-alert-dismiss\"\r\n (click)=\"handleClose()\"\r\n [attr.aria-label]=\"dismissLabel()\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n</div>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n input,\r\n output,\r\n signal,\r\n inject,\r\n} from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { AvatarSize, AvatarShape, AvatarStatus } from './avatar.types';\r\nimport { AVATAR_CONFIG } from './avatar.tokens';\r\n\r\n// Default configuration\r\nconst DEFAULT_CONFIG = {\r\n size: 'medium' as AvatarSize,\r\n shape: 'circle' as AvatarShape,\r\n alt: 'User avatar',\r\n icon: 'user'\r\n};\r\n\r\n// Default status colors\r\nconst DEFAULT_STATUS_COLORS: Record<AvatarStatus, string> = {\r\n online: 'var(--psh-success-color)',\r\n offline: 'var(--psh-surface-400)',\r\n away: 'var(--psh-warning-color)',\r\n busy: 'var(--psh-danger-color)'\r\n};\r\n\r\n@Component({\r\n selector: 'psh-avatar',\r\n templateUrl: './avatar.component.html',\r\n styleUrls: ['./avatar.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshAvatarComponent {\r\n private readonly config = inject(AVATAR_CONFIG);\r\n\r\n\r\n // Model inputs with defaults\r\n readonly size = input<AvatarSize>(this.config.size ?? DEFAULT_CONFIG.size);\r\n readonly shape = input<AvatarShape>(this.config.shape ?? DEFAULT_CONFIG.shape);\r\n readonly src = input<string | undefined>();\r\n readonly altInput = input<string | undefined>(undefined, { alias: 'alt' });\r\n readonly alt = computed(\r\n () => this.altInput() ?? pshResolveConfigValue(this.config.alt) ?? DEFAULT_CONFIG.alt,\r\n );\r\n\r\n // Regular inputs\r\n readonly initials = input('');\r\n readonly icon = input<string>(this.config.icon ?? DEFAULT_CONFIG.icon);\r\n readonly status = input<AvatarStatus | undefined>();\r\n readonly ariaLabel = input<string>();\r\n /** Makes the avatar interactive: adds a button role, a tab stop and a focus ring. */\r\n readonly interactive = input(false);\r\n\r\n /**\r\n * Emitted on click or Enter/Space, but only when `interactive` is set.\r\n *\r\n * Every other clickable component in the library had one — card, stat-card, info-card,\r\n * horizontal-card, tag, button — and the avatar did not, so a clickable user avatar, which\r\n * is most of them, had to be wrapped in something else.\r\n */\r\n readonly clicked = output<MouseEvent | KeyboardEvent>();\r\n\r\n /**\r\n * Emitted when the image fails to load, just before the fallback takes over.\r\n *\r\n * Named `imageFailed`, not `error`: `error` is a native DOM event name — lint catches it,\r\n * and rightly, since `sidebar.toggle` needed a standing exemption for the same reason until\r\n * 7.0.0 — and `error` already means \"the validation message\" on every form control here.\r\n * `copyFailed` on info-card set the precedent.\r\n */\r\n readonly imageFailed = output<Event>();\r\n\r\n /**\r\n * Whether the image failed.\r\n *\r\n * The initials/icon fallback existed but could never run: the `<img>` had no `(error)`\r\n * handler, so a 404 left a broken image icon where a name should be. Reset by `effect`\r\n * when `src` changes, or a new URL would inherit the previous one's failure.\r\n */\r\n private readonly loadFailed = signal(false);\r\n\r\n constructor() {\r\n effect(() => {\r\n this.src();\r\n this.loadFailed.set(false);\r\n });\r\n }\r\n\r\n // Computed values\r\n readonly hasImage = computed(() => !!this.src() && !this.loadFailed());\r\n readonly hasInitials = computed(() => !!this.initials() && !this.hasImage());\r\n readonly hasIcon = computed(() => !this.hasImage() && !this.hasInitials());\r\n\r\n protected handleImageError(event: Event): void {\r\n this.loadFailed.set(true);\r\n this.imageFailed.emit(event);\r\n }\r\n\r\n protected handleClick(event: MouseEvent): void {\r\n if (this.interactive()) this.clicked.emit(event);\r\n }\r\n\r\n protected handleKeydown(event: KeyboardEvent): void {\r\n if (!this.interactive()) return;\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n readonly computedAriaLabel = computed(() => this.ariaLabel() || this.alt());\r\n\r\n readonly statusColor = computed(() => {\r\n const currentStatus = this.status();\r\n if (!currentStatus) return undefined;\r\n return DEFAULT_STATUS_COLORS[currentStatus];\r\n });\r\n\r\n readonly state = computed(() => this.status() || 'default');\r\n}","<div \r\n class=\"psh-avatar\"\r\n [class.psh-circle]=\"shape() === 'circle'\"\r\n [class.psh-square]=\"shape() === 'square'\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [class.psh-xlarge]=\"size() === 'xlarge'\"\r\n [class.psh-interactive]=\"interactive()\"\r\n [attr.role]=\"interactive() ? 'button' : 'img'\"\r\n [attr.tabindex]=\"interactive() ? 0 : null\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.data-state]=\"state()\"\r\n (click)=\"handleClick($event)\"\r\n (keydown)=\"handleKeydown($event)\"\r\n>\r\n @if (hasImage()) {\r\n <!-- (error) is what makes the initials/icon fallback below reachable at all. -->\r\n <img\r\n [src]=\"src()\"\r\n [attr.alt]=\"alt()\"\r\n class=\"psh-avatar-image\"\r\n (error)=\"handleImageError($event)\"\r\n />\r\n } @else if (hasInitials()) {\r\n <span class=\"psh-avatar-initials\">{{ initials() }}</span>\r\n } @else if (hasIcon()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n\r\n @if (status()) {\r\n <span \r\n class=\"psh-avatar-status\"\r\n [class]=\"'psh-' + status()\"\r\n [style.background-color]=\"statusColor()\"\r\n [attr.aria-label]=\"status()\"\r\n ></span>\r\n }\r\n</div>","import { ChangeDetectionStrategy, Component, computed, input, output , inject} from '@angular/core';\r\nimport { BadgeSize, BadgePosition, BadgeDisplayType } from './badge.types';\r\nimport { PshColor } from '../../types/semantic.types';\r\nimport { BADGE_CONFIG } from './badge.tokens';\r\n\r\nconst DEFAULT_CONFIG = {\r\n color: 'primary' as PshColor,\r\n size: 'medium' as BadgeSize,\r\n displayType: 'text' as BadgeDisplayType,\r\n max: 99,\r\n showZero: false,\r\n position: 'top-right' as BadgePosition\r\n};\r\n\r\n@Component({\r\n selector: 'psh-badge',\r\n templateUrl: './badge.component.html',\r\n styleUrls: ['./badge.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshBadgeComponent<T = number> {\r\n private readonly config = inject(BADGE_CONFIG);\r\n\r\n\r\n readonly color = input<PshColor>(this.config.color ?? DEFAULT_CONFIG.color);\r\n\r\n /**\r\n * Disabled is a state, not a colour. It used to be the seventh value of the colour union\r\n * — `variant=\"disabled\"` — which meant a disabled badge could not also be a danger\r\n * badge, and which is not how `disabled` is spelled anywhere else in the library.\r\n */\r\n readonly disabled = input(this.config.disabled ?? false);\r\n readonly size = input<BadgeSize>(this.config.size ?? DEFAULT_CONFIG.size);\r\n readonly displayType = input<BadgeDisplayType>(this.config.displayType ?? DEFAULT_CONFIG.displayType);\r\n readonly content = input<string>('');\r\n readonly visible = input(true);\r\n readonly value = input<T>();\r\n readonly max = input(this.config.max ?? DEFAULT_CONFIG.max);\r\n readonly showZero = input(this.config.showZero ?? DEFAULT_CONFIG.showZero);\r\n readonly position = input<BadgePosition>(this.config.position ?? DEFAULT_CONFIG.position);\r\n readonly overlap = input(this.config.overlap ?? false);\r\n readonly ariaLabel = input<string>();\r\n readonly formatter = input<((value: T) => string) | undefined>();\r\n\r\n readonly clicked = output<void>();\r\n\r\n readonly computedRole = computed(() =>\r\n this.displayType() === 'counter' ? 'status' : 'img'\r\n );\r\n\r\n readonly computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const content = this.content();\r\n if (content) return content;\r\n\r\n return this.displayValue();\r\n });\r\n\r\n readonly state = computed(() => {\r\n if (!this.visible()) return 'hidden';\r\n if (this.overlap()) return 'overlap';\r\n return this.displayType();\r\n });\r\n\r\n private readonly isDot = computed(() => this.displayType() === 'dot');\r\n private readonly isCounter = computed(() => this.displayType() === 'counter');\r\n private readonly hasValue = computed(() => this.value() !== undefined);\r\n\r\n private readonly shouldDisplay = computed(() => {\r\n const currentValue = this.value();\r\n if (typeof currentValue !== 'number') return true;\r\n return currentValue > 0 || this.showZero();\r\n });\r\n\r\n private readonly formattedCustomValue = computed(() => {\r\n const formatter = this.formatter();\r\n const currentValue = this.value();\r\n\r\n if (!formatter || currentValue === null || currentValue === undefined) {\r\n return null;\r\n }\r\n\r\n return formatter(currentValue);\r\n });\r\n\r\n private readonly formattedNumericValue = computed(() => {\r\n const currentValue = this.value();\r\n\r\n if (typeof currentValue !== 'number') {\r\n return currentValue !== undefined ? String(currentValue) : '';\r\n }\r\n\r\n if (!this.shouldDisplay()) {\r\n return this.content() || '';\r\n }\r\n\r\n const maxValue = this.max();\r\n return currentValue > maxValue ? `${maxValue}+` : `${currentValue}`;\r\n });\r\n\r\n readonly displayValue = computed(() => {\r\n if (this.isDot()) {\r\n return '';\r\n }\r\n\r\n if (!this.isCounter() || !this.hasValue()) {\r\n return this.content();\r\n }\r\n\r\n const customFormatted = this.formattedCustomValue();\r\n if (customFormatted !== null) {\r\n return customFormatted;\r\n }\r\n\r\n return this.formattedNumericValue();\r\n });\r\n\r\n onBadgeClick(): void {\r\n this.clicked.emit();\r\n }\r\n}\r\n","<!-- Badge click is an optional convenience; the badge is a status/img indicator, not a primary control. -->\r\n<!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n<div\r\n class=\"psh-badge\"\r\n [class.psh-primary]=\"color() === 'primary'\"\r\n [class.psh-secondary]=\"color() === 'secondary'\"\r\n [class.psh-success]=\"color() === 'success'\"\r\n [class.psh-warning]=\"color() === 'warning'\"\r\n [class.psh-danger]=\"color() === 'danger'\"\r\n [class.psh-info]=\"color() === 'info'\"\r\n [class.psh-neutral]=\"color() === 'neutral'\"\r\n [class.psh-disabled]=\"disabled()\"\r\n [class.psh-dot]=\"displayType() === 'dot'\"\r\n [class.psh-counter]=\"displayType() === 'counter'\"\r\n [class.psh-overlap]=\"overlap()\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-medium]=\"size() === 'medium'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [class.psh-top-right]=\"position() === 'top-right'\"\r\n [class.psh-top-left]=\"position() === 'top-left'\"\r\n [class.psh-bottom-right]=\"position() === 'bottom-right'\"\r\n [class.psh-bottom-left]=\"position() === 'bottom-left'\"\r\n [attr.role]=\"computedRole()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.data-state]=\"state()\"\r\n (click)=\"onBadgeClick()\"\r\n>\r\n @if (displayType() === 'text') {\r\n <ng-content></ng-content>\r\n } @else if (displayType() === 'counter') {\r\n {{ displayValue() }}\r\n }\r\n</div>\r\n","import { PshColor, PshSurfaceAppearance } from '../../types/semantic.types';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n PLATFORM_ID,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { PshViewportService } from '../../a11y/viewport.service';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { CardDensity, CardActionsAlignment } from './card.types';\r\nimport { CARD_CONFIG } from './card.tokens';\r\n\r\n/**\r\n * Composant carte métier - conteneur structuré pour contenu professionnel\r\n *\r\n * Ce composant fournit une structure de carte métier avec :\r\n * - Header enrichi avec titre, description et slots pour icônes/badges\r\n * - Body avec spacing généreux et bien défini\r\n * - Footer optionnel pour métadonnées\r\n * - Zone d'actions avec alignement configurable\r\n * - Support de différentes densités et variantes de couleur\r\n * - Dividers automatiques entre les sections\r\n *\r\n * Les boutons placés dans le slot card-actions deviennent automatiquement\r\n * pleine largeur sur mobile (< 640px) grâce à une directive automatique.\r\n *\r\n * @example\r\n * <psh-card\r\n * title=\"Mon titre\"\r\n * description=\"Ma description\"\r\n * appearance=\"elevated\"\r\n * >\r\n * <p>Contenu principal</p>\r\n * <div psh-card-actions>\r\n * <psh-button color=\"primary\">Action</psh-button>\r\n * </div>\r\n * </psh-card>\r\n */\r\n@Component({\r\n selector: 'psh-card',\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n // Rooted on the host, not on a wrapper `<div>`. The wrapper is why `cssClass` had to\r\n // exist: a consumer's `<psh-card class=\"…\">` landed on the host while every style lived\r\n // one level down, out of reach. With the card *being* the host, the native `class` and\r\n // `style` attributes do the job and the passthrough inputs are gone.\r\n host: {\r\n '[class]': 'computedClasses()',\r\n '(click)': 'handleClick($event)',\r\n '(keydown)': 'handleKeydown($event)',\r\n role: 'article',\r\n '[attr.aria-label]': 'ariaLabel() || null',\r\n '[attr.tabindex]': 'interactive() && !disabled() ? 0 : null',\r\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\r\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\r\n },\r\n})\r\nexport class PshCardComponent {\r\n private readonly config = inject(CARD_CONFIG);\r\n\r\n private platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n\r\n // Model inputs - propriétés modifiables\r\n /** Variante visuelle de la carte (default, elevated, outlined) */\r\n // input(), not model(): the card never writes its own appearance back, so a model()\r\n // only added a `variantChange` output that could never fire.\r\n readonly appearance = input<PshSurfaceAppearance>(this.config.appearance ?? 'flat');\r\n\r\n /** Effet de survol activé (animation translateY) */\r\n readonly hoverable = input(this.config.hoverable ?? false);\r\n\r\n /** Carte cliquable (ajoute cursor pointer et gestion du focus) */\r\n readonly interactive = input(this.config.interactive ?? false);\r\n\r\n // Regular inputs - propriétés en lecture seule\r\n /** Titre principal de la carte */\r\n readonly title = input<string>('');\r\n\r\n /** Description/sous-titre optionnel */\r\n readonly description = input<string>('');\r\n\r\n /** Couleur sémantique de la carte. `neutral` = aucune emphase (l'ancien `flat`). */\r\n readonly color = input<PshColor>(this.config.color ?? 'neutral');\r\n\r\n /** Niveau de densité du spacing (compact, normal, spacious) */\r\n readonly density = input<CardDensity>(this.config.density ?? 'normal');\r\n\r\n /** Afficher le divider entre header et body */\r\n readonly showHeaderDivider = input<boolean>(this.config.showHeaderDivider ?? true);\r\n\r\n /** Afficher le divider entre body et footer */\r\n readonly showFooterDivider = input<boolean>(this.config.showFooterDivider ?? true);\r\n\r\n /** Afficher le divider entre footer et actions */\r\n readonly showActionsDivider = input<boolean>(this.config.showActionsDivider ?? true);\r\n\r\n /** Alignement des actions dans la zone card-actions */\r\n readonly actionsAlignment = input<CardActionsAlignment>(this.config.actionsAlignment ?? 'right');\r\n\r\n /** Activer/désactiver le padding du body */\r\n readonly bodyPadding = input<boolean>(this.config.bodyPadding ?? true);\r\n\r\n /** État de chargement - affiche un skeleton */\r\n readonly loading = input<boolean>(false);\r\n\r\n /** État désactivé - réduit l'opacité */\r\n readonly disabled = input<boolean>(false);\r\n\r\n /**\r\n * Name of the article, for a card with no visible `title`. A card that has one is already\r\n * named by it, so this stays unset by default rather than competing with it.\r\n */\r\n readonly ariaLabel = input<string>();\r\n\r\n // Outputs\r\n /** Émis lors du clic sur la carte (si interactive) */\r\n clicked = output<MouseEvent | KeyboardEvent>();\r\n\r\n // Computed values\r\n /** Classes CSS calculées selon les propriétés */\r\n readonly computedClasses = computed(() => {\r\n const classes = ['psh-card'];\r\n classes.push(`psh-appearance-${this.appearance()}`);\r\n classes.push(`psh-color-${this.color()}`);\r\n classes.push(`psh-density-${this.density()}`);\r\n\r\n if (this.hoverable()) classes.push('psh-hoverable');\r\n if (this.interactive()) classes.push('psh-interactive');\r\n if (this.loading()) classes.push('psh-loading');\r\n if (this.disabled()) classes.push('psh-disabled');\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n /** Indique si le header doit être affiché */\r\n readonly hasHeader = computed(() => {\r\n return !!(this.title() || this.description());\r\n });\r\n\r\n /** Classe d'alignement pour la zone d'actions */\r\n readonly actionsAlignmentClass = computed(() => {\r\n return `psh-actions-align-${this.actionsAlignment()}`;\r\n });\r\n\r\n readonly actionsClasses = computed(() => {\r\n const classes = [this.actionsAlignmentClass()];\r\n if (this.isMobile()) {\r\n classes.push('psh-mobile-full-width-buttons');\r\n }\r\n return classes.join(' ');\r\n });\r\n\r\n /**\r\n * Shared with every other card on the page — one media query, not one `ResizeObserver` per\r\n * instance on `document.documentElement`.\r\n */\r\n protected readonly isMobile = inject(PshViewportService).below('sm');\r\n\r\n /**\r\n * Gère le clic sur la carte\r\n * Émet l'événement clicked seulement si la carte est interactive\r\n * et non désactivée\r\n */\r\n handleClick(event: MouseEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Gère la navigation au clavier (Enter et Space)\r\n * Permet d'activer la carte au clavier pour l'accessibilité\r\n */\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n }\r\n}\r\n","<!--\r\n Header : rendu inconditionnel, masqué en CSS s'il est vide\r\n (voir .card-header:not(:has(*)) dans card.component.css).\r\n Se rend dès que title/description est renseigné OU qu'un slot de header\r\n ([psh-card-header-icon] / [psh-card-header-content] / [psh-card-header-actions]) est projeté.\r\n-->\r\n<div class=\"psh-card-header\" [class.psh-has-divider]=\"showHeaderDivider()\">\r\n <!-- Slot pour icône/avatar avant le titre -->\r\n <ng-content select=\"[psh-card-header-icon]\"></ng-content>\r\n\r\n <!-- Zone de titre et description -->\r\n @if (title() || description()) {\r\n <div class=\"psh-card-header-content\">\r\n @if (title()) {\r\n <h3 class=\"psh-card-title\">{{ title() }}</h3>\r\n }\r\n @if (description()) {\r\n <p class=\"psh-card-description\">{{ description() }}</p>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Slot pour contenu personnalisé du header -->\r\n <ng-content select=\"[psh-card-header-content]\"></ng-content>\r\n\r\n <!-- Slot pour badge/tag ou actions secondaires -->\r\n <ng-content select=\"[psh-card-header-actions]\"></ng-content>\r\n</div>\r\n\r\n<!-- Body avec contenu principal -->\r\n<div class=\"psh-card-body\" [class.psh-no-padding]=\"!bodyPadding()\">\r\n <!-- État de chargement -->\r\n @if (loading()) {\r\n <div class=\"psh-card-loading\">\r\n <div class=\"psh-skeleton-line\"></div>\r\n <div class=\"psh-skeleton-line\"></div>\r\n <div class=\"psh-skeleton-line psh-short\"></div>\r\n </div>\r\n } @else {\r\n <!-- Contenu principal (slot par défaut) -->\r\n <ng-content></ng-content>\r\n }\r\n</div>\r\n\r\n<!-- Footer optionnel pour métadonnées -->\r\n<div class=\"psh-card-footer\" [class.psh-has-divider]=\"showFooterDivider()\">\r\n <ng-content select=\"[psh-card-footer]\"></ng-content>\r\n</div>\r\n\r\n<!-- Actions -->\r\n<div class=\"psh-card-actions\" [class]=\"actionsClasses()\" [class.psh-has-divider]=\"showActionsDivider()\">\r\n <ng-content select=\"[psh-card-actions]\"></ng-content>\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n input,\r\n output,\r\n ViewEncapsulation,\r\n inject,\r\n} from '@angular/core';\r\nimport { PshTagComponent } from '../tag/tag.component';\r\nimport { StatCardLayout } from './stat-card.types';\r\nimport { PSH_COLORS, PshColor, PshSurfaceAppearance } from '../../types/semantic.types';\r\nimport { STAT_CARD_CONFIG } from './stat-card.tokens';\r\n\r\n/**\r\n * Icon background per semantic colour. These were four hardcoded hex pairs that ignored\r\n * the theme entirely — a `danger` stat card rendered the same red in light and dark mode,\r\n * and none of them matched the brand. Derived from the colour tokens instead, with\r\n * color-mix supplying the lighter stop so no second token is needed.\r\n */\r\nconst ICON_GRADIENT_DEFAULTS: Record<PshColor, string> = Object.fromEntries(\r\n PSH_COLORS.map(color => [\r\n color,\r\n `linear-gradient(135deg, color-mix(in srgb, var(--psh-${color}-color) 65%, white), var(--psh-${color}-color))`,\r\n ]),\r\n) as Record<PshColor, string>;\r\n@Component({\r\n selector: 'psh-stat-card',\r\n imports: [PshTagComponent],\r\n templateUrl: './stat-card.component.html',\r\n styleUrls: ['./stat-card.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n '[class]': 'computedClasses()',\r\n '(click)': 'handleClick($event)',\r\n '(keydown)': 'handleKeydown($event)',\r\n '[attr.role]': 'interactive() ? \"button\" : \"article\"',\r\n '[attr.tabindex]': 'interactive() && !disabled() ? 0 : null',\r\n '[attr.aria-label]': 'computedAriaLabel()',\r\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\r\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\r\n },\r\n})\r\nexport class PshStatCardComponent {\r\n private readonly config = inject(STAT_CARD_CONFIG);\r\n\r\n\r\n // Inputs principaux\r\n /** Valeur principale de la statistique (nombre ou texte formaté) */\r\n readonly value = input<string | number>();\r\n\r\n /** Description de la statistique */\r\n readonly description = input<string>();\r\n\r\n /** Nom de l'icône Phosphor (sans le préfixe 'ph-') */\r\n readonly icon = input<string>();\r\n\r\n // Inputs optionnels\r\n /** Variante du tag d'évolution (détermine la couleur) */\r\n readonly tagColor = input<PshColor>();\r\n\r\n /** Label du tag d'évolution (ex: '+12.6%', '-8.1%') */\r\n readonly tagLabel = input<string>();\r\n\r\n /** Couleur de fond personnalisée pour l'icône (CSS gradient ou couleur) */\r\n readonly iconBackground = input<string>();\r\n\r\n /** Variante visuelle de la carte de base */\r\n readonly appearance = input<PshSurfaceAppearance>(this.config.appearance ?? 'elevated');\r\n\r\n /** Carte cliquable avec feedback visuel */\r\n readonly interactive = input(this.config.interactive ?? false);\r\n\r\n /** Effet de survol */\r\n readonly hoverable = input(this.config.hoverable ?? false);\r\n\r\n /** État de chargement */\r\n readonly loading = input(false);\r\n\r\n /** État désactivé */\r\n readonly disabled = input(false);\r\n\r\n\r\n\r\n /** Label ARIA pour l'accessibilité */\r\n readonly ariaLabel = input<string>();\r\n\r\n /** Disposition de la carte: 'horizontal' (icône à gauche) ou 'vertical' (icône en haut) */\r\n readonly layout = input<StatCardLayout>(this.config.layout ?? 'horizontal');\r\n\r\n /** Active la direction row pour le card-body (icône et contenu côte à côte en flex-row) */\r\n readonly rowDirection = input(this.config.rowDirection ?? false);\r\n\r\n // Outputs\r\n /** Émis lors du clic sur la carte */\r\n clicked = output<MouseEvent | KeyboardEvent>();\r\n\r\n // Computed values\r\n private readonly computedValue = computed(() => this.value() ?? '');\r\n\r\n private readonly computedDescription = computed(() => this.description() ?? '');\r\n\r\n private readonly computedIcon = computed(() => this.icon() ?? '');\r\n\r\n private readonly computedTagVariant = computed(() => this.tagColor());\r\n\r\n private readonly computedTagLabel = computed(() => this.tagLabel());\r\n\r\n private readonly computedIconBackground = computed(() => {\r\n const customBg = this.iconBackground();\r\n if (customBg) return customBg;\r\n\r\n const variant = this.tagColor();\r\n return variant ? ICON_GRADIENT_DEFAULTS[variant] : null;\r\n });\r\n\r\n /** Style de l'icône avec couleur de fond personnalisée */\r\n readonly iconStyle = computed(() => {\r\n const background = this.computedIconBackground();\r\n return background ? { background } : null;\r\n });\r\n\r\n /** Vérifie si un tag doit être affiché */\r\n readonly hasTag = computed(() =>\r\n !!(this.computedTagVariant() && this.computedTagLabel())\r\n );\r\n\r\n /** Vérifie si une icône doit être affichée */\r\n readonly hasIcon = computed(() => !!this.computedIcon());\r\n\r\n readonly useRowDirection = computed(() => this.rowDirection());\r\n\r\n /** Label ARIA calculé */\r\n readonly computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n if (customLabel) return customLabel;\r\n\r\n const value = this.computedValue();\r\n const desc = this.computedDescription();\r\n const tag = this.computedTagLabel();\r\n\r\n return tag\r\n ? `${desc}: ${value}, ${tag}`\r\n : `${desc}: ${value}`;\r\n });\r\n\r\n /** Classes CSS calculées */\r\n readonly computedClasses = computed(() => {\r\n const classes = ['psh-stat-card'];\r\n const layout = this.layout();\r\n\r\n classes.push(`psh-appearance-${this.appearance()}`);\r\n\r\n if (layout === 'vertical') {\r\n classes.push('psh-stat-card--vertical');\r\n } else {\r\n classes.push('psh-stat-card--horizontal');\r\n }\r\n\r\n if (this.useRowDirection()) {\r\n classes.push('psh-stat-card--row');\r\n }\r\n\r\n if (this.hoverable()) classes.push('psh-hoverable');\r\n if (this.interactive()) classes.push('psh-interactive');\r\n if (this.loading()) classes.push('psh-loading');\r\n if (this.disabled()) classes.push('psh-disabled');\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n\r\n // Exposer les valeurs calculées pour le template\r\n protected get displayValue() { return this.computedValue(); }\r\n protected get displayDescription() { return this.computedDescription(); }\r\n protected get displayIcon() { return this.computedIcon(); }\r\n protected get displayTagVariant() { return this.computedTagVariant(); }\r\n protected get displayTagLabel() { return this.computedTagLabel(); }\r\n\r\n /**\r\n * Gère le clic sur la carte\r\n */\r\n handleClick(event: MouseEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Gère la navigation au clavier\r\n */\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n }\r\n}","@if (loading()) {\r\n <div class=\"psh-stat-loading\">\r\n <div class=\"psh-skeleton-circle\"></div>\r\n <div class=\"psh-skeleton-content\">\r\n <div class=\"psh-skeleton-line\"></div>\r\n <div class=\"psh-skeleton-line psh-short\"></div>\r\n </div>\r\n </div>\r\n} @else {\r\n @if (useRowDirection()) {\r\n <div class=\"psh-stat-card-body\">\r\n @if (hasIcon()) {\r\n <!-- eslint-disable-next-line @angular-eslint/template/no-inline-styles -->\r\n<div class=\"psh-stat-icon\" [style]=\"iconStyle()\">\r\n <i class=\"ph ph-{{ displayIcon }}\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n\r\n <div class=\"psh-stat-content\">\r\n <h3 class=\"psh-stat-value\">{{ displayValue }}</h3>\r\n <p class=\"psh-stat-description\">{{ displayDescription }}</p>\r\n\r\n @if (hasTag()) {\r\n <psh-tag [color]=\"displayTagVariant!\">\r\n {{ displayTagLabel }}\r\n </psh-tag>\r\n }\r\n </div>\r\n </div>\r\n } @else {\r\n @if (hasIcon()) {\r\n <!-- eslint-disable-next-line @angular-eslint/template/no-inline-styles -->\r\n<div class=\"psh-stat-icon\" [style]=\"iconStyle()\">\r\n <i class=\"ph ph-{{ displayIcon }}\" aria-hidden=\"true\"></i>\r\n </div>\r\n }\r\n\r\n <div class=\"psh-stat-content\">\r\n <h3 class=\"psh-stat-value\">{{ displayValue }}</h3>\r\n <p class=\"psh-stat-description\">{{ displayDescription }}</p>\r\n\r\n @if (hasTag()) {\r\n <psh-tag [color]=\"displayTagVariant!\">\r\n {{ displayTagLabel }}\r\n </psh-tag>\r\n }\r\n </div>\r\n }\r\n}\r\n","import { PshSurfaceAppearance } from '../../types/semantic.types';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n input,\r\n output,\r\n ViewEncapsulation,\r\n inject,\r\n} from '@angular/core';\r\nimport { HORIZONTAL_CARD_CONFIG } from './horizontal-card.tokens';\r\n\r\n/**\r\n * Composant carte horizontale autonome\r\n *\r\n * Composant complètement indépendant pour créer une mise en page\r\n * horizontale avec contenu latéral.\r\n *\r\n * Ce composant est particulièrement adapté pour :\r\n * - Cartes produits avec image latérale\r\n * - Profils utilisateurs avec avatar\r\n * - Articles avec illustration\r\n *\r\n * Le layout bascule automatiquement en vertical sur mobile.\r\n *\r\n * @example\r\n * <psh-horizontal-card appearance=\"elevated\" sideWidth=\"var(--psh-size-48)\">\r\n * <div psh-horizontal-card-side>\r\n * <img src=\"image.jpg\" alt=\"Product\">\r\n * </div>\r\n * <h3 psh-horizontal-card-header>Titre du produit</h3>\r\n * <p>Description du produit</p>\r\n * <div psh-horizontal-card-actions>\r\n * <psh-button>Voir</psh-button>\r\n * </div>\r\n * </psh-horizontal-card>\r\n */\r\n@Component({\r\n selector: 'psh-horizontal-card',\r\n templateUrl: './horizontal-card.component.html',\r\n styleUrls: ['./horizontal-card.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n '[class]': 'computedClasses()',\r\n '[style]': 'computedStyles()',\r\n '(click)': 'handleClick($event)',\r\n '(keydown)': 'handleKeydown($event)',\r\n role: 'article',\r\n '[attr.aria-label]': 'ariaLabel() || null',\r\n '[attr.tabindex]': 'interactive() && !disabled() ? 0 : null',\r\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\r\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\r\n },\r\n})\r\nexport class PshHorizontalCardComponent {\r\n private readonly config = inject(HORIZONTAL_CARD_CONFIG);\r\n\r\n\r\n /** Variante de la carte de base */\r\n readonly appearance = input<PshSurfaceAppearance>(this.config.appearance ?? 'elevated');\r\n\r\n /** Carte cliquable */\r\n readonly interactive = input(this.config.interactive ?? false);\r\n\r\n /** Effet de survol */\r\n readonly hoverable = input(this.config.hoverable ?? false);\r\n\r\n /** État de chargement */\r\n readonly loading = input(false);\r\n\r\n /** État désactivé */\r\n readonly disabled = input(false);\r\n\r\n /** Name of the article, for a card with no visible title. */\r\n readonly ariaLabel = input<string>();\r\n\r\n\r\n\r\n /** Largeur du contenu latéral (utiliser les tokens de sizing comme var(--psh-size-48)) */\r\n readonly sideWidth = input<string>(this.config.sideWidth ?? 'var(--psh-size-48)');\r\n\r\n /** Gap entre le contenu latéral et principal */\r\n readonly gap = input<string>(this.config.gap ?? 'var(--psh-spacing-md)');\r\n\r\n /** Padding du contenu latéral */\r\n readonly sidePadding = input<string>(this.config.sidePadding ?? '0');\r\n\r\n /** Padding du contenu principal */\r\n readonly contentPadding = input<string>(this.config.contentPadding ?? 'var(--psh-spacing-md)');\r\n\r\n /** Hauteur du contenu latéral sur mobile (utiliser les tokens de sizing) */\r\n readonly mobileHeight = input<string>(this.config.mobileHeight ?? 'var(--psh-size-48)');\r\n\r\n /** Émis lors du clic sur la carte */\r\n clicked = output<MouseEvent | KeyboardEvent>();\r\n\r\n /** Classes CSS calculées selon les propriétés */\r\n readonly computedClasses = computed(() => {\r\n const classes = ['psh-horizontal-card'];\r\n classes.push(`psh-appearance-${this.appearance()}`);\r\n\r\n if (this.hoverable()) classes.push('psh-hoverable');\r\n if (this.interactive()) classes.push('psh-interactive');\r\n if (this.loading()) classes.push('psh-loading');\r\n if (this.disabled()) classes.push('psh-disabled');\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n /**\r\n * The geometry inputs, as custom properties on the host.\r\n *\r\n * Unlike the other cards this is not a `customStyle` passthrough in disguise: these five\r\n * properties are how `sideWidth`, `gap` and friends reach the stylesheet. The consumer's own\r\n * `style` attribute merges with them on the host, so nothing was lost by dropping the\r\n * passthrough.\r\n */\r\n readonly computedStyles = computed(() => {\r\n return {\r\n '--psh-horizontal-side-width': this.sideWidth(),\r\n '--psh-horizontal-gap': this.gap(),\r\n '--psh-horizontal-side-padding': this.sidePadding(),\r\n '--psh-horizontal-content-padding': this.contentPadding(),\r\n '--psh-horizontal-mobile-height': this.mobileHeight(),\r\n };\r\n });\r\n\r\n /**\r\n * Gère le clic sur la carte\r\n */\r\n handleClick(event: MouseEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Gère la navigation au clavier\r\n */\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n }\r\n}","<!-- Contenu latéral -->\r\n<div class=\"psh-horizontal-side\">\r\n @if (loading()) {\r\n <div class=\"psh-horizontal-skeleton\"></div>\r\n } @else {\r\n <ng-content select=\"[psh-horizontal-card-side]\"></ng-content>\r\n }\r\n</div>\r\n\r\n<!-- Contenu principal -->\r\n<div class=\"psh-horizontal-content\">\r\n @if (loading()) {\r\n <div class=\"psh-horizontal-loading\">\r\n <div class=\"psh-skeleton-line\"></div>\r\n <div class=\"psh-skeleton-line\"></div>\r\n <div class=\"psh-skeleton-line psh-short\"></div>\r\n </div>\r\n } @else {\r\n <!-- Header optionnel -->\r\n <ng-content select=\"[psh-horizontal-card-header]\"></ng-content>\r\n\r\n <!-- Contenu principal -->\r\n <ng-content></ng-content>\r\n\r\n <!-- Actions optionnelles -->\r\n <ng-content select=\"[psh-horizontal-card-actions]\"></ng-content>\r\n }\r\n</div>\r\n","import { PshSurfaceAppearance } from '../../types/semantic.types';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { Component, ChangeDetectionStrategy, computed, input, signal, PLATFORM_ID, inject, output, ViewEncapsulation, ElementRef, AfterContentInit, OnDestroy } from '@angular/core';\r\nimport { PshViewportService } from '../../a11y/viewport.service';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { InfoCardData, InfoCardOptions } from './info-card.types';\r\nimport { INFO_CARD_CONFIG } from './info-card.tokens';\r\n\r\n/**\r\n * Info Card Component - Autonomous\r\n *\r\n * A fully independent card component that displays structured data as label/value pairs.\r\n * Provides a consistent way to present information with proper accessibility and responsive design.\r\n *\r\n * @example\r\n * ```typescript\r\n * const userData: InfoCardData[] = [\r\n * { label: 'Name', value: 'John Doe' },\r\n * { label: 'Email', value: 'john@example.com' }\r\n * ];\r\n * ```\r\n *\r\n * ```html\r\n * <psh-info-card\r\n * title=\"User Information\"\r\n * [data]=\"userData\"\r\n * icon=\"user\"\r\n * appearance=\"elevated\"\r\n * ></psh-info-card>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'psh-info-card',\r\n templateUrl: './info-card.component.html',\r\n styleUrl: './info-card.component.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n '[class]': 'computedClasses()',\r\n '(click)': 'handleClick($event)',\r\n '(keydown)': 'handleKeydown($event)',\r\n role: 'region',\r\n '[attr.tabindex]': 'interactive() && !disabled() ? 0 : null',\r\n '[attr.aria-label]': 'computedAriaLabel()',\r\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\r\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\r\n },\r\n})\r\nexport class PshInfoCardComponent implements AfterContentInit, OnDestroy {\r\n private readonly config = inject(INFO_CARD_CONFIG);\r\n\r\n\r\n readonly hasHeaderActions = signal<boolean>(false);\r\n\r\n /** Title displayed in the card header */\r\n readonly title = input<string>('');\r\n\r\n /** Array of label-value pairs to display */\r\n readonly data = input.required<InfoCardData[]>();\r\n\r\n /**\r\n * Display options for the card.\r\n *\r\n * `emptyStateMessage` is deliberately absent from the default: carrying it here would\r\n * shadow the application's configured default, since this object wins over it.\r\n */\r\n readonly options = input<InfoCardOptions>({\r\n showEmptyState: true,\r\n labelWidth: undefined,\r\n valueWidth: undefined\r\n });\r\n\r\n /** Base card variant style */\r\n readonly appearance = input<PshSurfaceAppearance>(this.config.appearance ?? 'outline');\r\n\r\n /** Icon to display in the header (Phosphor icon name without 'ph-' prefix) */\r\n readonly icon = input<string>(this.config.icon ?? 'circle-dashed');\r\n\r\n /** Custom ARIA label for accessibility */\r\n readonly ariaLabel = input<string>();\r\n\r\n\r\n\r\n /** Whether the card should be interactive/clickable */\r\n readonly interactive = input<boolean>(this.config.interactive ?? false);\r\n\r\n /** Whether to show hover effects */\r\n readonly hoverable = input<boolean>(this.config.hoverable ?? false);\r\n\r\n /** Indicates if data is loading */\r\n readonly loading = input<boolean>(false);\r\n\r\n /** Whether the card is disabled */\r\n readonly disabled = input<boolean>(false);\r\n\r\n /** Emitted when card is clicked */\r\n clicked = output<MouseEvent | KeyboardEvent>();\r\n\r\n /** Whether to show copy buttons on rows (opt-in) */\r\n readonly copyable = input<boolean>(this.config.copyable ?? false);\r\n\r\n /** Label prefix for the copy button aria-label */\r\n readonly copyButtonLabelInput = input<string | undefined>(undefined, { alias: 'copyButtonLabel' });\r\n readonly copyButtonLabel = computed(\r\n () => this.copyButtonLabelInput() ?? pshResolveConfigValue(this.config.copyButtonLabel) ?? 'Copy',\r\n );\r\n\r\n /** Text shown as feedback after successful copy */\r\n readonly notProvidedTextInput = input<string | undefined>(undefined, { alias: 'notProvidedText' });\r\n /** Stands in for a row value that is null or undefined. */\r\n readonly notProvidedText = computed(\r\n () =>\r\n this.notProvidedTextInput() ??\r\n pshResolveConfigValue(this.config.notProvidedText) ??\r\n 'Not provided',\r\n );\r\n\r\n readonly copyFeedbackTextInput = input<string | undefined>(undefined, { alias: 'copyFeedbackText' });\r\n readonly copyFeedbackText = computed(\r\n () => this.copyFeedbackTextInput() ?? pshResolveConfigValue(this.config.copyFeedbackText) ?? 'Copied',\r\n );\r\n\r\n /** Emitted when a row value is successfully copied */\r\n copied = output<InfoCardData>();\r\n\r\n /** Emitted when a copy attempt fails */\r\n copyFailed = output<InfoCardData>();\r\n\r\n /** Tracks the row index currently showing success feedback */\r\n readonly copiedRowIndex = signal<number | null>(null);\r\n\r\n /** Whether to auto-enable full width buttons on mobile (default: true) */\r\n readonly autoFullWidthOnMobile = input<boolean>(this.config.autoFullWidthOnMobile ?? true);\r\n\r\n /** Signal to track if viewport is mobile */\r\n\r\n private platformId = inject(PLATFORM_ID);\r\n private readonly document = inject(DOCUMENT);\r\n private feedbackTimeout?: ReturnType<typeof setTimeout>;\r\n\r\n /** Determines if the empty state should be shown */\r\n readonly shouldShowEmptyState = computed(() => {\r\n const opts = this.options();\r\n const dataArray = this.data();\r\n return opts.showEmptyState && (!dataArray || dataArray.length === 0);\r\n });\r\n\r\n /**\r\n * The message shown when there is nothing to list.\r\n *\r\n * Three sources, narrowest first: the `options` input of this card, then the application's\r\n * configured default, then the library's own.\r\n */\r\n readonly getEmptyStateMessage = computed(\r\n () =>\r\n this.options().emptyStateMessage ||\r\n pshResolveConfigValue(this.config.emptyStateMessage) ||\r\n 'No information available',\r\n );\r\n\r\n /** Full icon class name for Phosphor icons */\r\n readonly titleIcon = computed(() => {\r\n const iconName = this.icon();\r\n return iconName ? `ph-${iconName}` : '';\r\n });\r\n\r\n /** Computed ARIA label for the component */\r\n readonly computedAriaLabel = computed(() => {\r\n const customLabel = this.ariaLabel();\r\n const titleText = this.title();\r\n return customLabel || (titleText ? `Information card: ${titleText}` : 'Information card');\r\n });\r\n\r\n /** Computed CSS classes */\r\n readonly computedClasses = computed(() => {\r\n const classes = ['psh-info-card'];\r\n classes.push(`psh-appearance-${this.appearance()}`);\r\n\r\n if (this.hoverable()) classes.push('psh-hoverable');\r\n if (this.interactive()) classes.push('psh-interactive');\r\n if (this.loading()) classes.push('psh-loading');\r\n if (this.disabled()) classes.push('psh-disabled');\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n\r\n /** Gets CSS classes for card-actions based on mobile state */\r\n readonly getActionsClasses = computed(() => {\r\n const classes: string[] = [];\r\n if (this.autoFullWidthOnMobile() && this.isMobile()) {\r\n classes.push('psh-mobile-full-width-buttons');\r\n }\r\n return classes.join(' ');\r\n });\r\n\r\n private elementRef = inject(ElementRef);\r\n\r\n /** Shared with every other card on the page. See `PshViewportService`. */\r\n readonly isMobile = inject(PshViewportService).below('sm');\r\n\r\n ngAfterContentInit(): void {\r\n this.checkHeaderActionsContent();\r\n }\r\n\r\n private checkHeaderActionsContent(): void {\r\n if (isPlatformBrowser(this.platformId)) {\r\n const headerActionsEl = this.elementRef.nativeElement.querySelector('[psh-info-card-header-actions]');\r\n this.hasHeaderActions.set(!!headerActionsEl);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.feedbackTimeout) {\r\n clearTimeout(this.feedbackTimeout);\r\n }\r\n }\r\n\r\n /**\r\n * Handles click events on the card\r\n */\r\n handleClick(event: MouseEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n this.clicked.emit(event);\r\n }\r\n }\r\n\r\n /**\r\n * Handles keyboard navigation\r\n */\r\n handleKeydown(event: KeyboardEvent): void {\r\n if (this.interactive() && !this.disabled() && !this.loading()) {\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n this.clicked.emit(event);\r\n }\r\n }\r\n }\r\n\r\n isRowCopyable(item: InfoCardData): boolean {\r\n return item.copyable ?? this.copyable();\r\n }\r\n\r\n hasNonEmptyValue(item: InfoCardData): boolean {\r\n const val = item.value;\r\n if (val == null) return false;\r\n return val.toString().trim().length > 0;\r\n }\r\n\r\n /**\r\n * Calcule les classes CSS de la valeur d'une ligne à partir de son emphasis.\r\n * Fonction pure (compatible OnPush) : aucun effet de bord.\r\n * Un emphasis explicite prime sur l'auto-muted des valeurs nullish.\r\n */\r\n getValueClasses(item: InfoCardData): string {\r\n const classes = ['psh-info-card-value'];\r\n const emphasis = item.emphasis;\r\n const isEmpty = item.value == null;\r\n const autoMuted = isEmpty && this.options().mutedEmptyValues !== false && !emphasis;\r\n\r\n if (autoMuted) {\r\n classes.push('psh-info-card-value--italic', 'psh-info-card-value--color-neutral');\r\n } else if (emphasis) {\r\n if (emphasis.italic) classes.push('psh-info-card-value--italic');\r\n if (emphasis.bold) classes.push('psh-info-card-value--bold');\r\n if (emphasis.strikethrough) classes.push('psh-info-card-value--strikethrough');\r\n if (emphasis.color) classes.push(`psh-info-card-value--color-${emphasis.color}`);\r\n }\r\n\r\n return classes.join(' ');\r\n }\r\n\r\n copyRowValue(item: InfoCardData, index: number): void {\r\n if (!isPlatformBrowser(this.platformId)) {\r\n this.copyFailed.emit(item);\r\n return;\r\n }\r\n\r\n const view = this.document.defaultView;\r\n if (!view?.isSecureContext || !view.navigator.clipboard) {\r\n this.copyFailed.emit(item);\r\n return;\r\n }\r\n\r\n const text = item.copyValue ?? item.value?.toString() ?? '';\r\n\r\n view.navigator.clipboard.writeText(text).then(\r\n () => {\r\n if (this.feedbackTimeout) {\r\n clearTimeout(this.feedbackTimeout);\r\n }\r\n this.copiedRowIndex.set(index);\r\n this.copied.emit(item);\r\n this.feedbackTimeout = setTimeout(() => {\r\n this.copiedRowIndex.set(null);\r\n }, 1800);\r\n },\r\n () => {\r\n this.copyFailed.emit(item);\r\n }\r\n );\r\n }\r\n}","@if (title() || hasHeaderActions()) {\r\n <div class=\"psh-info-card-header\">\r\n @if (title()) {\r\n <h3 class=\"psh-info-card-title\">\r\n @if (icon()) {\r\n <i\r\n class=\"ph {{ titleIcon() }}\"\r\n aria-hidden=\"true\"\r\n [attr.data-icon]=\"icon()\"\r\n ></i>\r\n }\r\n {{ title() }}\r\n </h3>\r\n }\r\n <div class=\"psh-info-card-header-actions\">\r\n <ng-content select=\"[psh-info-card-header-actions]\"></ng-content>\r\n </div>\r\n </div>\r\n}\r\n\r\n<div class=\"psh-info-card-body\">\r\n @if (loading()) {\r\n <div class=\"psh-info-card-loading\">\r\n <div class=\"psh-skeleton-line\"></div>\r\n <div class=\"psh-skeleton-line\"></div>\r\n <div class=\"psh-skeleton-line psh-short\"></div>\r\n </div>\r\n } @else {\r\n <div\r\n class=\"psh-info-card-content\"\r\n role=\"list\"\r\n >\r\n @if (shouldShowEmptyState()) {\r\n <div\r\n class=\"psh-info-card-empty-state\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n [attr.data-testid]=\"'info-card-empty-state'\"\r\n >\r\n {{ getEmptyStateMessage() }}\r\n </div>\r\n } @else {\r\n @for (item of data(); track item) {\r\n <div\r\n class=\"psh-info-card-row\"\r\n role=\"listitem\"\r\n [attr.data-index]=\"$index\"\r\n [class]=\"item.customClass || ''\"\r\n >\r\n <div\r\n class=\"psh-info-card-label\"\r\n [style.width]=\"item.labelWidth || options().labelWidth\"\r\n [attr.data-label]=\"item.label\"\r\n >\r\n {{ item.label }}\r\n </div>\r\n <div\r\n class=\"psh-info-card-value-group\"\r\n [style.width]=\"item.valueWidth || options().valueWidth\"\r\n >\r\n <span\r\n [class]=\"getValueClasses(item)\"\r\n [attr.data-value]=\"item.value\"\r\n [title]=\"item.value?.toString() || ''\"\r\n >{{ item.value ?? notProvidedText() }}</span>\r\n @if (isRowCopyable(item) && hasNonEmptyValue(item)) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-info-card-copy-btn\"\r\n [class.psh-copied]=\"copiedRowIndex() === $index\"\r\n [attr.aria-label]=\"copyButtonLabel() + ' ' + item.label\"\r\n (click)=\"copyRowValue(item, $index); $event.stopPropagation()\"\r\n >\r\n @if (copiedRowIndex() === $index) {\r\n <i class=\"ph ph-check\" aria-hidden=\"true\"></i>\r\n <span class=\"psh-info-card-copy-feedback\" aria-hidden=\"true\">{{ copyFeedbackText() }}</span>\r\n } @else {\r\n <i class=\"ph ph-copy\" aria-hidden=\"true\"></i>\r\n }\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <span\r\n class=\"psh-info-card-sr-only\"\r\n role=\"status\"\r\n aria-live=\"polite\"\r\n >\r\n @if (copiedRowIndex() !== null) {\r\n {{ copyFeedbackText() }}\r\n }\r\n </span>\r\n }\r\n </div>\r\n }\r\n</div>\r\n\r\n<div class=\"psh-info-card-actions\" [class]=\"'psh-' + getActionsClasses()\">\r\n <ng-content select=\"[psh-info-card-actions]\"></ng-content>\r\n</div>\r\n","import { PshSurfaceAppearance } from '../../types/semantic.types';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n input,\r\n isDevMode,\r\n model,\r\n output,\r\n inject,\r\n} from '@angular/core';\r\nimport { CollapseVariant, CollapseSize } from './collapse.types';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\nimport { COLLAPSE_CONFIG } from './collapse.tokens';\r\n\r\n@Component({\r\n selector: 'psh-collapse',\r\n templateUrl: './collapse.component.html',\r\n styleUrls: ['./collapse.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshCollapseComponent {\r\n private readonly config = inject(COLLAPSE_CONFIG);\r\n\r\n\r\n readonly expanded = model(false);\r\n\r\n readonly disabled = input(false);\r\n readonly appearance = input(this.config.appearance ?? ('flat' as PshSurfaceAppearance), {\r\n transform: (value: CollapseVariant) => {\r\n if (!['flat', 'outline'].includes(value)) {\r\n if (isDevMode()) {\r\n console.warn(`[psh-collapse] Invalid variant \"${value}\", falling back to \"flat\"`);\r\n }\r\n return 'flat';\r\n }\r\n return value;\r\n }\r\n });\r\n readonly size = input(this.config.size ?? ('medium' as CollapseSize), {\r\n transform: (value: CollapseSize) => {\r\n if (!['small', 'medium', 'large'].includes(value)) {\r\n if (isDevMode()) {\r\n console.warn(`[psh-collapse] Invalid size \"${value}\", falling back to \"medium\"`);\r\n }\r\n return 'medium';\r\n }\r\n return value;\r\n }\r\n });\r\n readonly icon = input(this.config.icon ?? 'caret-down');\r\n readonly id = input<string>();\r\n /**\r\n * Maximum height of the open content. `'auto'` — the default — does not clip.\r\n *\r\n * It used to default to a magic `'1000px'`, which **silently truncated** anything taller\r\n * with no warning and no way to opt out. A fixed length still works, and is what gives the\r\n * open/close a height animation; `auto` animates opacity and offset only.\r\n */\r\n readonly maxHeight = input<string>(this.config.maxHeight ?? 'auto');\r\n\r\n /**\r\n * Fallback header text, used when nothing is projected into `[psh-collapse-header]`.\r\n * Was a literal in the template, so a non-French application could not change it.\r\n */\r\n readonly defaultHeaderTextInput = input<string | undefined>(undefined, { alias: 'defaultHeaderText' });\r\n readonly defaultHeaderText = computed(\r\n () => this.defaultHeaderTextInput() ?? pshResolveConfigValue(this.config.defaultHeaderText) ?? 'Collapsible section',\r\n );\r\n\r\n /** `auto` is not a usable `max-height` for the CSS; `none` is the same intent. */\r\n protected readonly resolvedMaxHeight = computed(() =>\r\n this.maxHeight() === 'auto' ? 'none' : this.maxHeight(),\r\n );\r\n readonly disableAnimation = input(this.config.disableAnimation ?? false);\r\n\r\n opened = output<void>();\r\n closed = output<void>();\r\n toggled = output<boolean>();\r\n\r\n private readonly uniqueId = pshUniqueId('collapse');\r\n\r\n protected readonly headerId = computed(() => {\r\n const customId = this.id();\r\n return customId ? `${customId}-header` : `${this.uniqueId}-header`;\r\n });\r\n\r\n protected readonly contentId = computed(() => {\r\n const customId = this.id();\r\n return customId ? `${customId}-content` : `${this.uniqueId}-content`;\r\n });\r\n\r\n readonly state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n return this.expanded() ? 'expanded' : 'collapsed';\r\n });\r\n\r\n readonly animationClass = computed(() => {\r\n return this.disableAnimation() ? 'no-animation' : '';\r\n });\r\n\r\n toggle(): void {\r\n if (!this.disabled()) {\r\n this.expanded.update(value => {\r\n const newValue = !value;\r\n this.toggled.emit(newValue);\r\n return newValue;\r\n });\r\n }\r\n }\r\n\r\n open(): void {\r\n if (!this.disabled() && !this.expanded()) {\r\n this.expanded.set(true);\r\n this.opened.emit();\r\n }\r\n }\r\n\r\n close(): void {\r\n if (!this.disabled() && this.expanded()) {\r\n this.expanded.set(false);\r\n this.closed.emit();\r\n }\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.toggle();\r\n break;\r\n case 'Escape':\r\n if (this.expanded()) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.close();\r\n }\r\n break;\r\n }\r\n }\r\n}","<div\r\n class=\"psh-collapse\"\r\n [class.psh-expanded]=\"expanded()\"\r\n [class.psh-disabled]=\"disabled()\"\r\n [class.psh-outline]=\"appearance() === 'outline'\"\r\n [class.psh-small]=\"size() === 'small'\"\r\n [class.psh-large]=\"size() === 'large'\"\r\n [class.psh-no-animation]=\"disableAnimation()\"\r\n [attr.data-state]=\"state()\"\r\n [style.--psh-collapse-max-height]=\"resolvedMaxHeight()\"\r\n>\r\n <button\r\n [id]=\"headerId()\"\r\n class=\"psh-collapse-header\"\r\n (click)=\"toggle()\"\r\n (keydown)=\"onKeydown($event)\"\r\n [attr.aria-expanded]=\"expanded()\"\r\n [attr.aria-controls]=\"contentId()\"\r\n [disabled]=\"disabled()\"\r\n type=\"button\"\r\n >\r\n <span class=\"psh-header-content\">\r\n <ng-content select=\"[psh-collapse-header]\">\r\n <span>{{ defaultHeaderText() }}</span>\r\n </ng-content>\r\n </span>\r\n <i\r\n class=\"ph ph-{{ icon() }}\"\r\n [class.psh-expanded]=\"expanded()\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </button>\r\n\r\n <div\r\n [id]=\"contentId()\"\r\n class=\"psh-collapse-content\"\r\n role=\"region\"\r\n [attr.aria-labelledby]=\"headerId()\"\r\n [attr.aria-hidden]=\"!expanded()\"\r\n [attr.inert]=\"expanded() ? null : ''\"\r\n >\r\n <div class=\"psh-content-wrapper\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>","import {\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n inject,\r\n output,\r\n PLATFORM_ID,\r\n} from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\n\r\n/**\r\n * Emits when a click occurs outside the host element.\r\n *\r\n * Shared primitive replacing the per-component document click listeners used by\r\n * select / dropdown to close on outside click. Typically consumed as a host\r\n * directive:\r\n *\r\n * @example\r\n * ```typescript\r\n * @Component({ hostDirectives: [PshClickOutsideDirective] })\r\n * export class MyPopover {\r\n * constructor() {\r\n * inject(PshClickOutsideDirective).pshClickOutside.subscribe(() => this.close());\r\n * }\r\n * }\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[pshClickOutside]',\r\n})\r\nexport class PshClickOutsideDirective {\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n /** Emitted when a click lands outside the host element. */\r\n readonly pshClickOutside = output<MouseEvent>();\r\n\r\n constructor() {\r\n if (!this.isBrowser) return;\r\n this.document.addEventListener('click', this.onDocumentClick);\r\n inject(DestroyRef).onDestroy(() =>\r\n this.document.removeEventListener('click', this.onDocumentClick),\r\n );\r\n }\r\n\r\n private readonly onDocumentClick = (event: MouseEvent): void => {\r\n const target = event.target as Node | null;\r\n if (target && !this.host.nativeElement.contains(target)) {\r\n this.pshClickOutside.emit(event);\r\n }\r\n };\r\n}\r\n","import { PshControlAppearance } from '../../types/semantic.types';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport {\r\n NgZone,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DestroyRef,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n PLATFORM_ID,\r\n TemplateRef,\r\n ViewContainerRef,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { PshOverlayPositionService } from '../../a11y/overlay-position.service';\r\nimport { PshClickOutsideDirective } from '../../a11y/click-outside.directive';\r\nimport { PshPortalService, PshPortalRef } from '../../a11y/portal.service';\r\nimport { DropdownColor, DropdownItem, DropdownPlacement, DropdownSize } from './dropdown.types';\r\nimport { DROPDOWN_CONFIG } from './dropdown.tokens';\r\n\r\n@Component({\r\n selector: 'psh-dropdown',\r\n templateUrl: './dropdown.component.html',\r\n styleUrls: ['./dropdown.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n hostDirectives: [PshClickOutsideDirective]\r\n})\r\nexport class PshDropdownComponent<T = string> {\r\n private readonly zone = inject(NgZone);\r\n private readonly config = inject(DROPDOWN_CONFIG);\r\n\r\n private elementRef = inject(ElementRef);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n private readonly overlayPosition = inject(PshOverlayPositionService);\r\n private readonly portal = inject(PshPortalService);\r\n private readonly viewContainer = inject(ViewContainerRef);\r\n\r\n // The menu is teleported to a body-level overlay layer on open so it escapes\r\n // any ancestor overflow / stacking context (a modal body, a scrollable card…).\r\n private readonly menuTpl = viewChild<TemplateRef<unknown>>('menuTpl');\r\n private portalRef: PshPortalRef | null = null;\r\n private focusTimeout: ReturnType<typeof setTimeout> | null = null;\r\n private readonly repositionHandler = (): void => this.reposition();\r\n\r\n // Regular inputs\r\n readonly appearance = input<PshControlAppearance>(this.config.appearance ?? 'solid');\r\n readonly color = input<DropdownColor>(this.config.color ?? 'primary');\r\n readonly size = input<DropdownSize>(this.config.size ?? 'medium');\r\n readonly placement = input<DropdownPlacement>(this.config.placement ?? 'bottom-start');\r\n readonly items = input<DropdownItem<T>[]>([]);\r\n readonly labelInput = input<string | undefined>(undefined, { alias: 'label' });\r\n readonly label = computed(\r\n () => this.labelInput() ?? pshResolveConfigValue(this.config.label) ?? 'Dropdown Menu',\r\n );\r\n readonly icon = input<string>();\r\n readonly ariaLabel = input<string>();\r\n readonly iconOnly = input<boolean>(this.config.iconOnly ?? false);\r\n readonly iconOnlyText = input<string>();\r\n\r\n // Model inputs\r\n readonly disabled = input(this.config.disabled ?? false);\r\n\r\n // State\r\n private readonly isOpenSignal = signal(false);\r\n private readonly selectedItemSignal = signal<DropdownItem<T> | null>(null);\r\n /**\r\n * Which item holds focus. Read by the template for the roving tabindex: a `role=\"menu\"`\r\n * has one tab stop, and Tab leaves the menu rather than walking its items.\r\n */\r\n protected readonly focusedItemIndex = signal(-1);\r\n\r\n // Placement actually rendered, after viewport collision/flip. Mirrors the\r\n // `placement` input while closed; recomputed against the viewport on open.\r\n protected readonly resolvedPlacement = signal<DropdownPlacement>('bottom-start');\r\n\r\n // Outputs\r\n selected = output<DropdownItem<T>>();\r\n opened = output<void>();\r\n closed = output<void>();\r\n\r\n // Computed values\r\n readonly isOpen = computed(() => this.isOpenSignal());\r\n readonly selectedItem = computed(() => this.selectedItemSignal());\r\n\r\n readonly isIconOnly = computed(() => this.iconOnly() && !!this.icon());\r\n\r\n readonly computedAriaLabel = computed(() => {\r\n if (this.isIconOnly()) {\r\n return this.iconOnlyText() || this.ariaLabel() || 'Toggle dropdown menu';\r\n }\r\n return this.ariaLabel() || 'Toggle dropdown menu';\r\n });\r\n\r\n readonly state = computed(() => this.getState());\r\n\r\n private getState(): string {\r\n if (this.disabled()) return 'disabled';\r\n if (this.isOpen()) return 'open';\r\n return 'closed';\r\n }\r\n\r\n constructor() {\r\n // Close on outside click. Clicks inside the menu are stopped at the menu\r\n // (stopPropagation); as a safety net for the teleported panel we also ignore\r\n // clicks whose target is inside it here.\r\n const clickOutside = inject(PshClickOutsideDirective);\r\n const sub = clickOutside.pshClickOutside.subscribe(event => {\r\n const target = event.target as Node | null;\r\n if (target && this.portalRef?.panel.contains(target)) return;\r\n this.close();\r\n });\r\n inject(DestroyRef).onDestroy(() => {\r\n sub.unsubscribe();\r\n this.closePanel();\r\n });\r\n }\r\n\r\n private openPanel(): void {\r\n if (!this.isBrowser || this.portalRef) return;\r\n const tpl = this.menuTpl();\r\n if (!tpl) return;\r\n this.portalRef = this.portal.attach(tpl, this.viewContainer);\r\n this.reposition();\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n // Registered outside Angular: a capture-phase scroll listener fires on every scroll of\r\n // every ancestor, and each one triggered a full change-detection pass. Repositioning\r\n // writes to the DOM and to a signal, and a signal write schedules its own refresh — the\r\n // zone was doing the work twice.\r\n this.zone.runOutsideAngular(() => {\r\n view?.addEventListener('scroll', this.repositionHandler, true);\r\n view?.addEventListener('resize', this.repositionHandler);\r\n });\r\n }\r\n\r\n private closePanel(): void {\r\n if (this.focusTimeout !== null) {\r\n clearTimeout(this.focusTimeout);\r\n this.focusTimeout = null;\r\n }\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n view?.removeEventListener('scroll', this.repositionHandler, true);\r\n view?.removeEventListener('resize', this.repositionHandler);\r\n this.portalRef?.detach();\r\n this.portalRef = null;\r\n this.resolvedPlacement.set(this.placement());\r\n }\r\n\r\n private reposition(): void {\r\n if (!this.portalRef) return;\r\n const host = this.elementRef.nativeElement as HTMLElement;\r\n const trigger = host.querySelector('.psh-dropdown-trigger') as HTMLElement | null;\r\n if (!trigger) return;\r\n\r\n const placement = this.overlayPosition.flipPlacement(trigger, this.placement(), {\r\n overlayHeight: this.portalRef.panel.offsetHeight,\r\n overlayWidth: this.portalRef.panel.offsetWidth,\r\n }) as DropdownPlacement;\r\n this.resolvedPlacement.set(placement);\r\n this.portalRef.positionByPlacement(trigger, placement, 4);\r\n }\r\n\r\n toggleDropdown(): void {\r\n if (!this.disabled()) {\r\n event?.stopPropagation();\r\n this.isOpenSignal.update(v => !v);\r\n if (this.isOpen()) {\r\n this.focusedItemIndex.set(0);\r\n this.opened.emit();\r\n this.openPanel();\r\n } else {\r\n this.focusedItemIndex.set(-1);\r\n this.restoreFocusToTrigger();\r\n this.closePanel();\r\n this.closed.emit();\r\n }\r\n }\r\n }\r\n\r\n selectItem(item: DropdownItem<T>): void {\r\n if (!item.disabled) {\r\n this.selectedItemSignal.set(item);\r\n this.selected.emit(item);\r\n this.close();\r\n }\r\n }\r\n\r\n close(): void {\r\n if (this.isOpen()) {\r\n this.isOpenSignal.set(false);\r\n this.focusedItemIndex.set(-1);\r\n this.restoreFocusToTrigger();\r\n this.closePanel();\r\n this.closed.emit();\r\n }\r\n }\r\n\r\n handleTriggerKeyDown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.toggleDropdown();\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.focusNextItem();\r\n }\r\n break;\r\n\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n if (!this.isOpen()) {\r\n this.toggleDropdown();\r\n } else {\r\n this.focusPreviousItem();\r\n }\r\n break;\r\n\r\n case 'Escape':\r\n // Consumed here, so an enclosing modal does not also close on the same keypress.\r\n if (this.isOpen()) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.close();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n handleItemKeyDown(event: KeyboardEvent, item: DropdownItem<T>, _index: number): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.selectItem(item);\r\n break;\r\n\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.focusNextItem();\r\n break;\r\n\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.focusPreviousItem();\r\n break;\r\n\r\n case 'Home':\r\n event.preventDefault();\r\n this.focusFirstItem();\r\n break;\r\n\r\n case 'End':\r\n event.preventDefault();\r\n this.focusLastItem();\r\n break;\r\n\r\n case 'Escape':\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.close();\r\n break;\r\n\r\n case 'Tab':\r\n this.close();\r\n break;\r\n }\r\n }\r\n\r\n private focusNextItem(): void {\r\n const items = this.items();\r\n if (items.length === 0) return;\r\n\r\n const currentIndex = this.focusedItemIndex();\r\n let nextIndex = currentIndex + 1;\r\n\r\n while (nextIndex < items.length && items[nextIndex]?.disabled) {\r\n nextIndex++;\r\n }\r\n\r\n if (nextIndex >= items.length) {\r\n nextIndex = 0;\r\n while (nextIndex < items.length && items[nextIndex]?.disabled) {\r\n nextIndex++;\r\n }\r\n }\r\n\r\n if (nextIndex < items.length) {\r\n this.focusedItemIndex.set(nextIndex);\r\n this.focusItemAtIndex(nextIndex);\r\n }\r\n }\r\n\r\n private focusPreviousItem(): void {\r\n const items = this.items();\r\n if (items.length === 0) return;\r\n\r\n const currentIndex = this.focusedItemIndex();\r\n let previousIndex = currentIndex - 1;\r\n\r\n while (previousIndex >= 0 && items[previousIndex]?.disabled) {\r\n previousIndex--;\r\n }\r\n\r\n if (previousIndex < 0) {\r\n previousIndex = items.length - 1;\r\n while (previousIndex >= 0 && items[previousIndex]?.disabled) {\r\n previousIndex--;\r\n }\r\n }\r\n\r\n if (previousIndex >= 0) {\r\n this.focusedItemIndex.set(previousIndex);\r\n this.focusItemAtIndex(previousIndex);\r\n }\r\n }\r\n\r\n private focusFirstItem(): void {\r\n const items = this.items();\r\n let index = 0;\r\n while (index < items.length && items[index]?.disabled) {\r\n index++;\r\n }\r\n if (index < items.length) {\r\n this.focusedItemIndex.set(index);\r\n this.focusItemAtIndex(index);\r\n }\r\n }\r\n\r\n private focusLastItem(): void {\r\n const items = this.items();\r\n let index = items.length - 1;\r\n while (index >= 0 && items[index]?.disabled) {\r\n index--;\r\n }\r\n if (index >= 0) {\r\n this.focusedItemIndex.set(index);\r\n this.focusItemAtIndex(index);\r\n }\r\n }\r\n\r\n private focusItemAtIndex(index: number): void {\r\n if (this.focusTimeout !== null) clearTimeout(this.focusTimeout);\r\n\r\n // The handle is kept so a queued focus cannot run against a panel that has since\r\n // been detached, or after the component itself is gone.\r\n this.focusTimeout = setTimeout(() => {\r\n this.focusTimeout = null;\r\n const item = this.portalRef?.panel.querySelector(\r\n `[data-dropdown-item-index=\"${index}\"]`,\r\n ) as HTMLElement | undefined;\r\n item?.focus();\r\n });\r\n }\r\n\r\n /**\r\n * Returns focus to the trigger when the panel holding it goes away, so Escape or a\r\n * selection does not drop the user back on <body>. Only when focus is genuinely inside\r\n * the panel: closing from an outside click must not steal focus from whatever the user\r\n * just clicked. Must run before closePanel() detaches the portal.\r\n */\r\n private restoreFocusToTrigger(): void {\r\n if (!this.isBrowser || !this.portalRef) return;\r\n\r\n const host = this.elementRef.nativeElement as HTMLElement;\r\n const active = host.ownerDocument.activeElement;\r\n if (!active || !this.portalRef.panel.contains(active)) return;\r\n\r\n const trigger = host.querySelector('.psh-dropdown-trigger') as HTMLElement | null;\r\n trigger?.focus();\r\n }\r\n\r\n}","<div\r\n class=\"psh-dropdown-container\"\r\n [class]=\"'psh-' + size()\"\r\n [class.psh-open]=\"isOpen()\"\r\n [class.psh-disabled]=\"disabled()\"\r\n [class.psh-icon-only]=\"isIconOnly()\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n <button\r\n class=\"psh-dropdown-trigger\"\r\n [class]=\"'psh-' + appearance()\"\r\n [class.psh-primary]=\"color() === 'primary'\"\r\n [class.psh-secondary]=\"color() === 'secondary'\"\r\n [class.psh-success]=\"color() === 'success'\"\r\n [class.psh-warning]=\"color() === 'warning'\"\r\n [class.psh-danger]=\"color() === 'danger'\"\r\n (click)=\"toggleDropdown()\"\r\n (keydown)=\"handleTriggerKeyDown($event)\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-haspopup]=\"'menu'\"\r\n type=\"button\"\r\n [disabled]=\"disabled()\"\r\n >\r\n <span class=\"psh-trigger-content\">\r\n @if (isIconOnly()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n @if (icon()) {\r\n <i class=\"ph ph-{{ icon() }}\" aria-hidden=\"true\"></i>\r\n }\r\n <ng-content select=\"[psh-dropdown-trigger]\">\r\n @if (label()) {\r\n {{ label() }}\r\n }\r\n </ng-content>\r\n <i\r\n class=\"ph ph-caret-down psh-trigger-arrow\"\r\n [class.psh-open]=\"isOpen()\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n }\r\n </span>\r\n </button>\r\n\r\n <ng-template #menuTpl>\r\n <!-- stopPropagation only (keeps clicks inside the menu from closing it); not a user interaction. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <div\r\n class=\"psh-dropdown-menu\"\r\n [class]=\"'psh-' + resolvedPlacement()\"\r\n role=\"menu\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <ng-content select=\"[psh-dropdown-menu]\">\r\n @for (item of items(); track item.value; let i = $index) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-dropdown-item\"\r\n [class.psh-disabled]=\"item.disabled\"\r\n [class.psh-active]=\"selectedItem() === item\"\r\n [attr.data-dropdown-item-index]=\"i\"\r\n (click)=\"selectItem(item)\"\r\n (keydown)=\"handleItemKeyDown($event, item, i)\"\r\n role=\"menuitem\"\r\n [attr.aria-disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n [attr.tabindex]=\"i === focusedItemIndex() ? 0 : -1\"\r\n >\r\n @if (item.icon) {\r\n <i class=\"ph ph-{{ item.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"psh-item-label\">{{ item.content }}</span>\r\n </button>\r\n }\r\n </ng-content>\r\n </div>\r\n </ng-template>\r\n</div>","import { PshFieldAppearance } from '../../types/semantic.types';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n computed,\r\n effect,\r\n afterRenderEffect,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\r\nimport type { FormValueControl } from '@angular/forms/signals';\r\nimport { pshIsEmptyValue, pshRequiredError } from '../../utils/required-validator';\r\nimport { pshJoinAriaIds } from '../../utils/aria';\r\nimport {\r\n TEXTAREA_LABELS,\r\n TextareaResize,\r\n TextareaSize,\r\n } from './textarea.types';\r\nimport { TEXTAREA_CONFIG } from './textarea.tokens';\r\n\r\n@Component({\r\n selector: 'psh-textarea',\r\n templateUrl: './textarea.component.html',\r\n styleUrls: ['./textarea.component.css'],\r\n providers: [\r\n { provide: NG_VALIDATORS, useExisting: PshTextareaComponent, multi: true },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshTextareaComponent,\r\n multi: true,\r\n },\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[class.psh-full-width]': 'fullWidth()',\r\n '[class.psh-small]': 'size() === \"small\"',\r\n '[class.psh-large]': 'size() === \"large\"',\r\n '[class.psh-outline]': 'appearance() === \"outline\"',\r\n '[class.psh-solid]': 'appearance() === \"solid\"',\r\n '[class.psh-error]': 'hasError()',\r\n '[class.psh-success]': '!!success() && !hasError()',\r\n '[class.psh-disabled]': 'disabled()',\r\n '[class.psh-readonly]': 'readonly()',\r\n '[class.psh-focused]': 'isFocused()',\r\n '[class.psh-auto-size]': 'autoSize()',\r\n '[class.psh-over-limit]': 'isOverLimit()',\r\n },\r\n})\r\nexport class PshTextareaComponent\r\n implements ControlValueAccessor, FormValueControl<string>, Validator\r\n{\r\n private readonly config = inject(TEXTAREA_CONFIG);\r\n\r\n private readonly elementRef = inject(ElementRef<HTMLElement>);\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n\r\n private static nextId = 0;\r\n readonly textareaId = `psh-textarea-${PshTextareaComponent.nextId++}`;\r\n\r\n readonly value = model<string>('');\r\n readonly disabled = model<boolean>(false);\r\n readonly readonly = input<boolean>(false);\r\n readonly touched = model<boolean>(false);\r\n/**\r\n * Emitted when the user finishes interacting with the control.\r\n *\r\n * Part of `FormUiControl`: the `Field` directive listens to **this**, not to\r\n * `touchedChange`, to mark the bound field as touched.\r\n */\r\n readonly touch = output<void>();\r\n\r\n readonly appearance = input<PshFieldAppearance>(this.config.appearance ?? 'outline');\r\n readonly size = input<TextareaSize>(this.config.size ?? 'medium');\r\n readonly resize = input<TextareaResize>(this.config.resize ?? 'vertical');\r\n readonly rows = input<number>(this.config.rows ?? 4);\r\n readonly maxLength = input<number | undefined>(undefined);\r\n readonly autoSize = input<boolean>(this.config.autoSize ?? false);\r\n readonly showCharacterCount = input<boolean>(this.config.showCharacterCount ?? false);\r\n readonly fullWidth = input<boolean>(this.config.fullWidth ?? false);\r\n readonly required = input<boolean>(this.config.required ?? false);\r\n readonly showLabel = input<boolean>(this.config.showLabel ?? true);\r\n readonly label = input<string>(this.config.label ?? '');\r\n readonly placeholder = input<string>(this.config.placeholder ?? '');\r\n readonly hint = input<string | null | undefined>(null);\r\n\r\n /**\r\n * Extra ids for `aria-describedby`. **Merged** with the control's own — the id of its error,\r\n * success or hint message — never replacing them.\r\n */\r\n readonly ariaDescribedBy = input<string>();\r\n\r\n /**\r\n * Ids of the elements that name this control, for the cases a visible `<label>` cannot\r\n * cover. Merged with anything the control already points at.\r\n */\r\n readonly ariaLabelledBy = input<string>();\r\n readonly error = input<string | null | undefined>(null);\r\n readonly success = input<string | null | undefined>(null);\r\n readonly ariaLabel = input<string | null>(null);\r\n\r\n private readonly focusedSignal = signal<boolean>(false);\r\n\r\n focused = output<void>();\r\n blurred = output<void>();\r\n\r\n private readonly textareaRef = viewChild<ElementRef<HTMLTextAreaElement>>('textareaRef');\r\n\r\n /** Whether the control currently has focus. A state readout; the event is `focused`. */\r\n readonly isFocused = computed(() => this.focusedSignal());\r\n\r\n readonly effectiveResize = computed<TextareaResize>(() =>\r\n this.autoSize() ? 'none' : this.resize(),\r\n );\r\n\r\n readonly characterCount = computed(() => ({\r\n current: (this.value() ?? '').length,\r\n max: this.maxLength(),\r\n }));\r\n\r\n readonly isOverLimit = computed(() => {\r\n const max = this.maxLength();\r\n if (max === undefined) return false;\r\n return this.characterCount().current > max;\r\n });\r\n\r\n readonly isAtLimit = computed(() => {\r\n const max = this.maxLength();\r\n if (max === undefined) return false;\r\n return this.characterCount().current >= max;\r\n });\r\n\r\n readonly shouldShowCount = computed(\r\n () => this.showCharacterCount() || this.maxLength() !== undefined,\r\n );\r\n\r\n readonly hasError = computed(\r\n () => !!this.error() || this.isOverLimit(),\r\n );\r\n\r\n readonly computedAriaLabel = computed(\r\n () => this.ariaLabel() || this.label() || this.placeholder() || null,\r\n );\r\n\r\n readonly describedBy = computed(() => {\r\n const own = this.error()\r\n ? `${this.textareaId}-error`\r\n : this.success()\r\n ? `${this.textareaId}-success`\r\n : this.hint()\r\n ? `${this.textareaId}-hint`\r\n : null;\r\n return pshJoinAriaIds(own, this.ariaDescribedBy());\r\n });\r\n\r\n readonly state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.readonly()) return 'readonly';\r\n if (this.hasError()) return 'error';\r\n if (this.success()) return 'success';\r\n if (this.isFocused()) return 'focused';\r\n return 'default';\r\n });\r\n\r\n readonly characterCountSuffix = input<string | undefined>(undefined);\r\n\r\n /** Word after the count. A field before 7.0.0, so no application could translate it. */\r\n readonly characterCountLabel = computed(\r\n () =>\r\n this.characterCountSuffix() ??\r\n pshResolveConfigValue(this.config.characterCountSuffix) ??\r\n TEXTAREA_LABELS.characterCountSuffix,\r\n );\r\n\r\n constructor() {\r\n // A value change revalidates by itself; a change to `required` does not — Angular has\r\n // no reason to suspect the validator's answer moved. This is what the callback is for.\r\n effect(() => {\r\n this.required();\r\n this.onValidatorChange();\r\n });\r\n\r\n // After render, not during it: auto-sizing measures `scrollHeight` and then writes\r\n // `style.height`, which is a DOM read followed by a DOM write. As a plain `effect` it ran\r\n // before the DOM had caught up with the new value, hence the `queueMicrotask` — a hand-\r\n // rolled version of what `afterRenderEffect` does properly.\r\n afterRenderEffect(() => {\r\n this.value();\r\n this.rows();\r\n if (this.autoSize()) {\r\n this.applyAutoSize();\r\n }\r\n });\r\n }\r\n\r\n private onChange: (value: string) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n private onValidatorChange: () => void = () => {};\r\n\r\n writeValue(value: unknown): void {\r\n const safeValue = typeof value === 'string' ? value : '';\r\n this.value.set(safeValue);\r\n this.cdr.markForCheck();\r\n if (this.autoSize()) {\r\n queueMicrotask(() => this.applyAutoSize());\r\n }\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.set(isDisabled);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n handleInput(event: Event): void {\r\n const target = event.target as HTMLTextAreaElement;\r\n const newValue = target.value;\r\n this.value.set(newValue);\r\n this.onChange(newValue);\r\n }\r\n\r\n handleFocus(): void {\r\n this.focusedSignal.set(true);\r\n this.focused.emit();\r\n }\r\n\r\n handleBlur(): void {\r\n this.focusedSignal.set(false);\r\n this.touched.set(true);\r\n this.onTouched();\r\n this.touch.emit();\r\n this.blurred.emit();\r\n }\r\n\r\n focus(): void {\r\n this.textareaRef()?.nativeElement.focus();\r\n }\r\n\r\n private applyAutoSize(): void {\r\n const el = this.textareaRef()?.nativeElement;\r\n if (!el) return;\r\n el.style.height = 'auto';\r\n el.style.height = `${el.scrollHeight}px`;\r\n }\r\n\r\n protected hasLabelContent(): boolean {\r\n return !!this.elementRef.nativeElement.querySelector('[psh-textarea-label]');\r\n }\r\n\r\n /**\r\n * Makes `required` a real constraint rather than an asterisk.\r\n *\r\n * Re-run whenever `required` or the value changes: `registerOnValidatorChange` gives us\r\n * the callback that tells Angular to revalidate, and an effect fires it.\r\n */\r\n validate(): ValidationErrors | null {\r\n return pshRequiredError(this.required(), pshIsEmptyValue(this.value()));\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.onValidatorChange = fn;\r\n }\r\n\r\n}\r\n","<div class=\"psh-textarea-container\">\r\n @if (showLabel()) {\r\n <!-- label[for] delegates focus to its control natively; the click handler is a convenience. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <label\r\n class=\"psh-textarea-label\"\r\n [for]=\"textareaId\"\r\n (click)=\"focus()\"\r\n [class.psh-required]=\"required()\"\r\n >\r\n <ng-content select=\"[psh-textarea-label]\"></ng-content>\r\n @if (!hasLabelContent()) {\r\n {{ label() }}\r\n }\r\n </label>\r\n }\r\n\r\n <div class=\"psh-textarea-wrapper\">\r\n <textarea\r\n #textareaRef\r\n [id]=\"textareaId\"\r\n [rows]=\"rows()\"\r\n [attr.placeholder]=\"placeholder()\"\r\n [attr.maxlength]=\"maxLength() ?? null\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-invalid]=\"hasError()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n [attr.data-state]=\"state()\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [required]=\"required()\"\r\n [value]=\"value()\"\r\n [style.resize]=\"effectiveResize()\"\r\n (input)=\"handleInput($event)\"\r\n (focus)=\"handleFocus()\"\r\n (blur)=\"handleBlur()\"\r\n ></textarea>\r\n </div>\r\n\r\n @if (error() || success() || hint() || shouldShowCount()) {\r\n <div class=\"psh-textarea-footer\">\r\n <div class=\"psh-textarea-messages\">\r\n @if (error()) {\r\n <div [id]=\"textareaId + '-error'\" class=\"psh-textarea-error\" role=\"alert\">\r\n <ng-content select=\"[psh-textarea-error]\">\r\n {{ error() }}\r\n </ng-content>\r\n </div>\r\n } @else if (success()) {\r\n <div [id]=\"textareaId + '-success'\" class=\"psh-textarea-success\" role=\"status\">\r\n <ng-content select=\"[psh-textarea-success]\">\r\n {{ success() }}\r\n </ng-content>\r\n </div>\r\n } @else if (hint()) {\r\n <div [id]=\"textareaId + '-hint'\" class=\"psh-textarea-hint\">\r\n <ng-content select=\"[psh-textarea-hint]\">\r\n {{ hint() }}\r\n </ng-content>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (shouldShowCount()) {\r\n <div\r\n class=\"psh-textarea-count\"\r\n [class.psh-at-limit]=\"isAtLimit() && !isOverLimit()\"\r\n [class.psh-over-limit]=\"isOverLimit()\"\r\n aria-live=\"polite\"\r\n >\r\n {{ characterCount().current }}@if (maxLength() !== undefined) {\r\n <span>/{{ maxLength() }}</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { MenuItem, MenuMode, MenuVariant, MenuItemContext } from './menu.types';\r\nimport { PshTooltipComponent } from '../tooltip/tooltip.component';\r\nimport { MENU_CONFIG } from './menu.tokens';\r\n\r\n@Component({\r\n selector: 'psh-menu',\r\n imports: [NgTemplateOutlet, PshTooltipComponent],\r\n templateUrl: './menu.component.html',\r\n styleUrls: ['./menu.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PshMenuComponent<T = string> {\r\n private readonly config = inject(MENU_CONFIG);\r\n\r\n private readonly elementRef = inject(ElementRef<HTMLElement>);\r\n private focusTimeout: ReturnType<typeof setTimeout> | null = null;\r\n\r\n readonly mode = input<MenuMode>(this.config.mode ?? 'vertical');\r\n readonly variant = input<MenuVariant>(this.config.variant ?? 'default');\r\n readonly collapsible = input(this.config.collapsible ?? false);\r\n readonly ariaLabels = input<Record<string, string>>({\r\n disabled: 'Disabled',\r\n submenu: 'Submenu',\r\n expand: 'Expand menu',\r\n collapse: 'Collapse menu'\r\n });\r\n\r\n readonly items = input.required<MenuItem<T>[]>();\r\n\r\n /**\r\n * Replaces the content of every menu item.\r\n *\r\n * `MenuItem` described an item completely — icon, content, badge — and the component had no\r\n * `ng-content`, so anything else meant `::ng-deep`.\r\n */\r\n readonly itemTemplate = input<TemplateRef<MenuItemContext<T>>>();\r\n\r\n /**\r\n * Name of the navigation landmark. There was none, so a page with a sidebar menu and a\r\n * top menu announced two landmarks both called \"navigation\".\r\n */\r\n readonly ariaLabel = input<string>();\r\n\r\n protected itemContext(item: MenuItem<T>, index: number, withLabel: boolean): MenuItemContext<T> {\r\n return { $implicit: item, index, withLabel, expanded: this.isExpanded(item) };\r\n }\r\n\r\n readonly collapsed = model(false);\r\n readonly expandedItemIds = model<string[]>([]);\r\n\r\n itemClicked = output<MenuItem<T>>();\r\n submenuToggled = output<{ item: MenuItem<T>; expanded: boolean }>();\r\n\r\n protected readonly expandedItemsSet = computed(() => new Set(this.expandedItemIds()));\r\n\r\n readonly state = computed(() => this.getState());\r\n\r\n readonly showTooltip = computed(() => this.collapsed() && this.mode() === 'vertical');\r\n\r\n constructor() {\r\n inject(DestroyRef).onDestroy(() => {\r\n if (this.focusTimeout !== null) clearTimeout(this.focusTimeout);\r\n });\r\n }\r\n\r\n private getState(): string {\r\n if (this.collapsed()) return 'collapsed';\r\n if (this.collapsible()) return 'collapsible';\r\n return this.mode();\r\n }\r\n\r\n handleItemClick(item: MenuItem<T>, event: Event, isChild: boolean): void {\r\n if (isChild) {\r\n event.stopPropagation();\r\n }\r\n this.toggleItem(item, event);\r\n }\r\n\r\n toggleItem(item: MenuItem<T>, event?: Event): void {\r\n if (item.disabled) return;\r\n\r\n if (item.children?.length) {\r\n event?.preventDefault();\r\n this.toggleItemExpansion(item.id);\r\n const expanded = this.expandedItemsSet().has(item.id);\r\n this.submenuToggled.emit({ item, expanded });\r\n } else {\r\n this.itemClicked.emit(item);\r\n }\r\n }\r\n\r\n toggleCollapse(): void {\r\n if (this.collapsible()) {\r\n this.collapsed.update((v) => !v);\r\n }\r\n }\r\n\r\n isExpanded(item: MenuItem<T>): boolean {\r\n return this.expandedItemsSet().has(item.id);\r\n }\r\n\r\n expandItem(itemId: string): void {\r\n const current = this.expandedItemIds();\r\n if (!current.includes(itemId)) {\r\n this.expandedItemIds.set([...current, itemId]);\r\n }\r\n }\r\n\r\n collapseItem(itemId: string): void {\r\n const current = this.expandedItemIds();\r\n if (current.includes(itemId)) {\r\n this.expandedItemIds.set(current.filter(id => id !== itemId));\r\n }\r\n }\r\n\r\n toggleItemExpansion(itemId: string): void {\r\n const current = this.expandedItemIds();\r\n if (current.includes(itemId)) {\r\n this.expandedItemIds.set(current.filter(id => id !== itemId));\r\n } else {\r\n this.expandedItemIds.set([...current, itemId]);\r\n }\r\n }\r\n\r\n expandAll(): void {\r\n const allIds = this.collectItemIdsWithChildren(this.items());\r\n this.expandedItemIds.set(allIds);\r\n }\r\n\r\n collapseAll(): void {\r\n this.expandedItemIds.set([]);\r\n }\r\n\r\n private collectItemIdsWithChildren(items: MenuItem<T>[]): string[] {\r\n const ids: string[] = [];\r\n for (const item of items) {\r\n if (item.children?.length) {\r\n ids.push(item.id);\r\n ids.push(...this.collectItemIdsWithChildren(item.children));\r\n }\r\n }\r\n return ids;\r\n }\r\n\r\n getAriaLabel(item: MenuItem<T>): string {\r\n const base = item.content;\r\n if (item.disabled) {\r\n return `${base} (${this.ariaLabels()['disabled']})`;\r\n }\r\n if (item.children?.length) {\r\n return `${base} (${this.ariaLabels()['submenu']})`;\r\n }\r\n return base;\r\n }\r\n\r\n handleKeyDown(event: KeyboardEvent, item: MenuItem<T>, index: number): void {\r\n if (item.disabled) return;\r\n\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.toggleItem(item, event);\r\n break;\r\n\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.focusNextItem(index);\r\n break;\r\n\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.focusPreviousItem(index);\r\n break;\r\n\r\n case 'ArrowRight':\r\n if (item.children?.length && !this.isExpanded(item)) {\r\n event.preventDefault();\r\n this.toggleItem(item, event);\r\n }\r\n break;\r\n\r\n case 'ArrowLeft':\r\n if (item.children?.length && this.isExpanded(item)) {\r\n event.preventDefault();\r\n this.toggleItem(item, event);\r\n }\r\n break;\r\n\r\n case 'Home':\r\n event.preventDefault();\r\n this.focusFirstItem();\r\n break;\r\n\r\n case 'End':\r\n event.preventDefault();\r\n this.focusLastItem();\r\n break;\r\n\r\n case 'Escape':\r\n if (this.collapsible() && !this.collapsed()) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.toggleCollapse();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private focusNextItem(currentIndex: number): void {\r\n const items = this.items();\r\n const nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : 0;\r\n this.focusItemAtIndex(nextIndex, 1);\r\n }\r\n\r\n private focusPreviousItem(currentIndex: number): void {\r\n const items = this.items();\r\n const previousIndex = currentIndex > 0 ? currentIndex - 1 : items.length - 1;\r\n this.focusItemAtIndex(previousIndex, -1);\r\n }\r\n\r\n private focusFirstItem(): void {\r\n this.focusItemAtIndex(0, 1);\r\n }\r\n\r\n private focusLastItem(): void {\r\n this.focusItemAtIndex(this.items().length - 1, -1);\r\n }\r\n\r\n private focusItemAtIndex(index: number, direction: 1 | -1): void {\r\n const items = this.items();\r\n if (index < 0) {\r\n index = items.length - 1;\r\n } else if (index >= items.length) {\r\n index = 0;\r\n }\r\n\r\n const item = items[index];\r\n if (item && !item.divider && !item.disabled) {\r\n if (this.focusTimeout !== null) clearTimeout(this.focusTimeout);\r\n\r\n // Handle kept so the callback cannot run against a detached DOM after the menu is\r\n // destroyed. Scoped to this host too: a document-wide query matches the item with\r\n // the same id in any other menu instance on the page.\r\n this.focusTimeout = setTimeout(() => {\r\n this.focusTimeout = null;\r\n const host = this.elementRef.nativeElement as HTMLElement;\r\n const link = host.querySelector(`[data-menu-item-id=\"${item.id}\"]`) as HTMLElement | null;\r\n link?.focus();\r\n });\r\n } else {\r\n const nextIndex = index + direction;\r\n if (nextIndex !== index) {\r\n this.focusItemAtIndex(nextIndex, direction);\r\n }\r\n }\r\n }\r\n}","<nav\r\n class=\"psh-menu\"\r\n [class.psh-vertical]=\"mode() === 'vertical'\"\r\n [class.psh-horizontal]=\"mode() === 'horizontal'\"\r\n [class.psh-compact]=\"variant() === 'compact'\"\r\n [class.psh-expanded]=\"variant() === 'expanded'\"\r\n [class.psh-collapsed]=\"collapsed()\"\r\n role=\"navigation\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [attr.aria-label]=\"'Navigation menu'\"\r\n [attr.data-state]=\"state()\"\r\n>\r\n @if (collapsible()) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-menu-collapse-button\"\r\n (click)=\"toggleCollapse()\"\r\n [attr.aria-expanded]=\"!collapsed()\"\r\n [attr.aria-label]=\"collapsed() ? ariaLabels()['expand'] : ariaLabels()['collapse']\"\r\n >\r\n <i class=\"ph ph-caret-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n\r\n <ul class=\"psh-menu-list\">\r\n @for (item of items(); track item.id; let i = $index) {\r\n @if (item.divider) {\r\n <li class=\"psh-menu-divider\" aria-hidden=\"true\"></li>\r\n } @else {\r\n <li\r\n class=\"psh-menu-item\"\r\n [class.psh-has-children]=\"item.children?.length\"\r\n [class.psh-expanded]=\"isExpanded(item)\"\r\n [class.psh-disabled]=\"item.disabled\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"itemTpl; context: { $implicit: item, index: i, isChild: false }\"\r\n ></ng-container>\r\n\r\n @if (item.children?.length) {\r\n <ul\r\n class=\"psh-submenu\"\r\n [attr.aria-label]=\"item.content + ' submenu'\"\r\n >\r\n @for (child of item.children; track child.id) {\r\n <li class=\"psh-menu-item\">\r\n @if (child.path) {\r\n @if (showTooltip()) {\r\n <psh-tooltip [content]=\"child.content\" position=\"right\" [showDelay]=\"100\" [hideDelay]=\"0\">\r\n <a\r\n class=\"psh-menu-link\"\r\n [attr.href]=\"child.path\"\r\n [attr.data-menu-item-id]=\"child.id\"\r\n [class.psh-active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n title=\"\"\r\n (click)=\"toggleItem(child, $event)\"\r\n (keydown.enter)=\"toggleItem(child, $event)\"\r\n (keydown.space)=\"toggleItem(child, $event)\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n <span class=\"psh-menu-child-dot\" aria-hidden=\"true\"></span>\r\n }\r\n <span class=\"psh-menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"psh-menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </a>\r\n </psh-tooltip>\r\n } @else {\r\n <a\r\n class=\"psh-menu-link\"\r\n [attr.href]=\"child.path\"\r\n [attr.data-menu-item-id]=\"child.id\"\r\n [class.psh-active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n (click)=\"toggleItem(child, $event)\"\r\n (keydown.enter)=\"toggleItem(child, $event)\"\r\n (keydown.space)=\"toggleItem(child, $event)\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"psh-menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"psh-menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </a>\r\n }\r\n } @else {\r\n @if (showTooltip()) {\r\n <psh-tooltip [content]=\"child.content\" position=\"right\" [showDelay]=\"100\" [hideDelay]=\"0\">\r\n <button\r\n type=\"button\"\r\n class=\"psh-menu-link\"\r\n [attr.data-menu-item-id]=\"child.id\"\r\n [class.psh-active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n title=\"\"\r\n (click)=\"toggleItem(child, $event)\"\r\n (keydown.enter)=\"toggleItem(child, $event)\"\r\n (keydown.space)=\"toggleItem(child, $event)\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n [disabled]=\"child.disabled\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n } @else {\r\n <span class=\"psh-menu-child-dot\" aria-hidden=\"true\"></span>\r\n }\r\n <span class=\"psh-menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"psh-menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </button>\r\n </psh-tooltip>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"psh-menu-link\"\r\n [attr.data-menu-item-id]=\"child.id\"\r\n [class.psh-active]=\"child.active\"\r\n [attr.aria-disabled]=\"child.disabled\"\r\n [attr.aria-label]=\"getAriaLabel(child)\"\r\n (click)=\"toggleItem(child, $event)\"\r\n (keydown.enter)=\"toggleItem(child, $event)\"\r\n (keydown.space)=\"toggleItem(child, $event)\"\r\n [attr.tabindex]=\"child.disabled ? -1 : 0\"\r\n [disabled]=\"child.disabled\"\r\n >\r\n @if (child.icon) {\r\n <i class=\"ph ph-{{ child.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n <span class=\"psh-menu-label\">{{ child.content }}</span>\r\n @if (child.badge) {\r\n <span class=\"psh-menu-badge\" role=\"status\">{{ child.badge }}</span>\r\n }\r\n </button>\r\n }\r\n }\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n }\r\n </ul>\r\n</nav>\r\n\r\n<ng-template #itemTpl let-item let-index=\"index\" let-isChild=\"isChild\">\r\n @if (showTooltip()) {\r\n <psh-tooltip\r\n class=\"psh-menu-tooltip-wrapper\"\r\n [content]=\"item.content\"\r\n position=\"right\"\r\n [showDelay]=\"300\"\r\n [hideDelay]=\"0\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"itemContentTpl; context: { $implicit: item, index: index, isChild: isChild, withLabel: false }\"\r\n ></ng-container>\r\n </psh-tooltip>\r\n } @else {\r\n <ng-container\r\n *ngTemplateOutlet=\"itemContentTpl; context: { $implicit: item, index: index, isChild: isChild, withLabel: true }\"\r\n ></ng-container>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #itemContentTpl let-item let-index=\"index\" let-isChild=\"isChild\" let-withLabel=\"withLabel\">\r\n @if (item.path) {\r\n <a\r\n class=\"psh-menu-link\"\r\n [attr.href]=\"item.path\"\r\n [attr.data-menu-item-id]=\"item.id\"\r\n [class.psh-active]=\"item.active\"\r\n [attr.aria-disabled]=\"item.disabled\"\r\n [attr.aria-expanded]=\"item.children?.length ? isExpanded(item) : null\"\r\n [attr.aria-label]=\"getAriaLabel(item)\"\r\n (click)=\"handleItemClick(item, $event, isChild)\"\r\n (keydown)=\"handleKeyDown($event, item, index)\"\r\n [attr.tabindex]=\"item.disabled ? -1 : 0\"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"itemTemplate() ?? defaultMenuItem\"\r\n [ngTemplateOutletContext]=\"itemContext(item, index, withLabel)\"\r\n ></ng-container>\r\n </a>\r\n } @else {\r\n <button\r\n type=\"button\"\r\n class=\"psh-menu-link\"\r\n [attr.data-menu-item-id]=\"item.id\"\r\n [class.psh-active]=\"item.active\"\r\n [attr.aria-disabled]=\"item.disabled\"\r\n [attr.aria-expanded]=\"item.children?.length ? isExpanded(item) : null\"\r\n [attr.aria-label]=\"getAriaLabel(item)\"\r\n (click)=\"handleItemClick(item, $event, isChild)\"\r\n (keydown)=\"handleKeyDown($event, item, index)\"\r\n [attr.tabindex]=\"item.disabled ? -1 : 0\"\r\n [disabled]=\"item.disabled\"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"itemTemplate() ?? defaultMenuItem\"\r\n [ngTemplateOutletContext]=\"itemContext(item, index, withLabel)\"\r\n ></ng-container>\r\n </button>\r\n }\r\n</ng-template>\r\n\r\n<!--\r\n The item's content, in one place rather than two. `itemTemplate` replaces this, and only\r\n this: the surrounding <a>/<button> keeps aria-expanded, the tabindex and\r\n the keyboard handling.\r\n-->\r\n<ng-template #defaultMenuItem let-item let-withLabel=\"withLabel\">\r\n @if (item.icon) {\r\n <i class=\"ph ph-{{ item.icon }}\" aria-hidden=\"true\"></i>\r\n }\r\n @if (withLabel) {\r\n <span class=\"psh-menu-label\">{{ item.content }}</span>\r\n }\r\n @if (item.badge) {\r\n <span class=\"psh-menu-badge\" role=\"status\">{{ item.badge }}</span>\r\n }\r\n @if (withLabel && item.children?.length) {\r\n <i\r\n class=\"ph ph-caret-down psh-menu-arrow\"\r\n [class.psh-expanded]=\"isExpanded(item)\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n }\r\n</ng-template>\r\n","import { PshFieldAppearance } from '../../types/semantic.types';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport {\r\n NgZone,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n DestroyRef,\r\n TemplateRef,\r\n ViewContainerRef,\r\n viewChild,\r\n effect\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { ControlValueAccessor, FormsModule, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\r\nimport type { FormValueControl } from '@angular/forms/signals';\r\nimport { PshClickOutsideDirective } from '../../a11y/click-outside.directive';\r\nimport { PshOverlayPositionService } from '../../a11y/overlay-position.service';\r\nimport { PshPortalService, PshPortalRef } from '../../a11y/portal.service';\r\nimport { SelectOption, SelectOptionGroup, SelectSize, SelectOptionContext, SelectOptionView } from './select.types';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\nimport { pshIsEmptyValue, pshRequiredError } from '../../utils/required-validator';\r\nimport { pshJoinAriaIds } from '../../utils/aria';\r\nimport { SELECT_CONFIG } from './select.tokens';\r\n\r\ninterface FlatOption<T> {\r\n option: SelectOption<T>;\r\n effectiveDisabled: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'psh-select',\r\n imports: [NgTemplateOutlet, FormsModule],\r\n templateUrl: './select.component.html',\r\n styleUrls: ['./select.component.css'],\r\n providers: [\r\n { provide: NG_VALIDATORS, useExisting: PshSelectComponent, multi: true },\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: PshSelectComponent,\r\n multi: true\r\n }\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n hostDirectives: [PshClickOutsideDirective],\r\n host: {\r\n '[class.psh-full-width]': 'fullWidth()',\r\n '[class.psh-small]': 'size() === \"small\"',\r\n '[class.psh-large]': 'size() === \"large\"',\r\n '[class.psh-outline]': 'appearance() === \"outline\"',\r\n '[class.psh-solid]': 'appearance() === \"solid\"',\r\n '[class.psh-error]': '!!error()',\r\n '[class.psh-success]': '!!success()',\r\n '[class.psh-disabled]': 'disabled()',\r\n '[class.psh-loading]': 'loading()',\r\n '[attr.aria-expanded]': 'isOpen().toString()',\r\n '[attr.data-state]': 'state()'\r\n }\r\n})\r\nexport class PshSelectComponent<T = unknown> implements ControlValueAccessor, FormValueControl<T | T[] | null>, Validator {\r\n private readonly zone = inject(NgZone);\r\n private readonly config = inject(SELECT_CONFIG);\r\n\r\n private readonly elementRef = inject(ElementRef);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly overlayPosition = inject(PshOverlayPositionService);\r\n private readonly portal = inject(PshPortalService);\r\n private readonly viewContainer = inject(ViewContainerRef);\r\n\r\n // The options panel, teleported to a body-level overlay layer on open so it\r\n // escapes any ancestor overflow / stacking context (e.g. a modal body).\r\n private readonly panelTpl = viewChild<TemplateRef<unknown>>('panelTpl');\r\n private portalRef: PshPortalRef | null = null;\r\n private readonly repositionHandler = (): void => this.reposition();\r\n\r\n // Side the panel actually opens on, after viewport collision/flip.\r\n protected readonly resolvedSide = signal<'top' | 'bottom'>('bottom');\r\n\r\n protected readonly selectId = pshUniqueId('select');\r\n\r\n readonly value = model<T | T[] | null>(null);\r\n readonly disabled = model<boolean>(false);\r\n readonly touched = model<boolean>(false);\r\n/**\r\n * Emitted when the user finishes interacting with the control.\r\n *\r\n * Part of `FormUiControl`: the `Field` directive listens to **this**, not to\r\n * `touchedChange`, to mark the bound field as touched.\r\n */\r\n readonly touch = output<void>();\r\n\r\n readonly size = input<SelectSize>(this.config.size ?? 'medium');\r\n readonly appearance = input<PshFieldAppearance>(this.config.appearance ?? 'outline');\r\n readonly searchable = input(this.config.searchable ?? false);\r\n readonly multiple = input(false);\r\n readonly clearable = input(this.config.clearable ?? false);\r\n readonly loading = input(false);\r\n readonly fullWidth = input(this.config.fullWidth ?? false);\r\n readonly required = input(false);\r\n\r\n readonly options = input.required<(SelectOption<T> | SelectOptionGroup<T>)[]>();\r\n\r\n /**\r\n * Replaces the content of every option.\r\n *\r\n * The rendering was hard-coded — icon, label, description — so showing an avatar, a badge\r\n * or two columns in an option meant `::ng-deep` into a panel that is teleported to\r\n * `document.body`. The template receives the option, whether it is selected, and whether it\r\n * is disabled.\r\n *\r\n * It replaces the option's *content* only: `role=\"option\"`, the id, `aria-selected` and the\r\n * click stay with the component, so a custom option cannot take the listbox's accessibility\r\n * down with it.\r\n */\r\n readonly optionTemplate = input<TemplateRef<SelectOptionContext<T>>>();\r\n readonly label = input('');\r\n readonly placeholderInput = input<string | undefined>(undefined, { alias: 'placeholder' });\r\n readonly placeholder = computed(\r\n () => this.placeholderInput() ?? pshResolveConfigValue(this.config.placeholder) ?? 'Select an option',\r\n );\r\n readonly multiplePlaceholderInput = input<string | undefined>(undefined, { alias: 'multiplePlaceholder' });\r\n readonly multiplePlaceholder = computed(\r\n () => this.multiplePlaceholderInput() ?? pshResolveConfigValue(this.config.multiplePlaceholder) ?? 'Select options',\r\n );\r\n readonly error = input<string | null | undefined>(null);\r\n readonly success = input<string | null | undefined>(null);\r\n readonly hint = input<string | null | undefined>(null);\r\n\r\n /** Shown when the search matches nothing. Was a literal in the template. */\r\n readonly noResultsTextInput = input<string | undefined>(undefined, { alias: 'noResultsText' });\r\n readonly noResultsText = computed(\r\n () => this.noResultsTextInput() ?? pshResolveConfigValue(this.config.noResultsText) ?? 'No results',\r\n );\r\n\r\n /**\r\n * Extra ids for `aria-describedby`. **Merged** with the control's own — the id of its error,\r\n * success or hint message — never replacing them.\r\n */\r\n readonly ariaDescribedBy = input<string>();\r\n\r\n /**\r\n * Ids of the elements that name this control, for the cases a visible `<label>` cannot\r\n * cover. Merged with anything the control already points at.\r\n */\r\n readonly ariaLabelledBy = input<string>();\r\n readonly ariaLabel = input<string | null>(null);\r\n /** Accessible name of the clear button, which renders as a bare icon. */\r\n readonly clearLabelInput = input<string | undefined>(undefined, { alias: 'clearLabel' });\r\n readonly clearLabel = computed(\r\n () => this.clearLabelInput() ?? pshResolveConfigValue(this.config.clearLabel) ?? 'Clear selection',\r\n );\r\n readonly maxSelections = input<number | undefined>(undefined);\r\n readonly minSelections = input<number | undefined>(undefined);\r\n readonly compareWith = input<(a: T, b: T) => boolean>((a, b) => a === b);\r\n readonly searchPlaceholderInput = input<string | undefined>(undefined, { alias: 'searchPlaceholder' });\r\n /** Placeholder and accessible name of the search field. */\r\n readonly searchPlaceholder = computed(\r\n () =>\r\n this.searchPlaceholderInput() ??\r\n pshResolveConfigValue(this.config.searchPlaceholder) ??\r\n 'Search...',\r\n );\r\n\r\n private readonly isOpenSignal = signal(false);\r\n private readonly searchTermSignal = signal('');\r\n readonly focusedIndex = signal(-1);\r\n\r\n opened = output<void>();\r\n closed = output<void>();\r\n searched = output<string>();\r\n scrolledToEnd = output<void>();\r\n\r\n readonly isOpen = computed(() => this.isOpenSignal());\r\n readonly searchTerm = computed(() => this.searchTermSignal());\r\n\r\n readonly state = computed(() => {\r\n if (this.disabled()) return 'disabled';\r\n if (this.error()) return 'error';\r\n if (this.success()) return 'success';\r\n return 'default';\r\n });\r\n\r\n readonly computedAriaLabel = computed(() => this.ariaLabel() || this.label() || this.placeholder());\r\n\r\n // Was the global 'error-message' / 'success-message' / 'hint-message': two selects in\r\n // error on one page produced duplicate ids, and a screen reader read the first one's\r\n // message for both. Fixed on `input` in 6.2.5 and never propagated until now.\r\n readonly describedBy = computed(() => {\r\n const own = this.error()\r\n ? `${this.selectId}-error`\r\n : this.success()\r\n ? `${this.selectId}-success`\r\n : this.hint()\r\n ? `${this.selectId}-hint`\r\n : null;\r\n return pshJoinAriaIds(own, this.ariaDescribedBy());\r\n });\r\n\r\n readonly flatFilteredOptions = computed<FlatOption<T>[]>(() => {\r\n const opts = this.filteredOptions();\r\n const result: FlatOption<T>[] = [];\r\n for (const item of opts) {\r\n if (this.isOptionGroup(item)) {\r\n for (const opt of item.options) {\r\n result.push({ option: opt, effectiveDisabled: !!(item.disabled || opt.disabled) });\r\n }\r\n } else {\r\n result.push({ option: item, effectiveDisabled: !!item.disabled });\r\n }\r\n }\r\n return result;\r\n });\r\n\r\n readonly activeDescendant = computed(() => {\r\n const idx = this.focusedIndex();\r\n const flat = this.flatFilteredOptions();\r\n if (idx < 0 || idx >= flat.length) return null;\r\n const item = flat[idx];\r\n if (!item) return null;\r\n return `${this.selectId}-${item.option.value}`;\r\n });\r\n\r\n readonly selectedLabel = computed(() => {\r\n const currentValue = this.value();\r\n const currentOptions = this.flattenOptions(this.options());\r\n\r\n if (currentValue === null || currentValue === undefined) {\r\n return this.multiple() ? this.multiplePlaceholder() : this.placeholder();\r\n }\r\n\r\n if (this.multiple() && Array.isArray(currentValue)) {\r\n const selected = currentOptions.filter(opt =>\r\n currentValue.some(v => this.compareWith()(v, opt.value))\r\n );\r\n return selected.length > 0 ? selected.map(o => o.label).join(', ') : this.multiplePlaceholder();\r\n }\r\n\r\n const selected = currentOptions.find(opt => this.compareWith()(opt.value, currentValue as T));\r\n return selected ? selected.label : this.placeholder();\r\n });\r\n\r\n readonly filteredOptions = computed(() => {\r\n const term = this.searchTermSignal().toLowerCase();\r\n const opts = this.options();\r\n if (!term) return opts;\r\n\r\n return opts.map(opt => {\r\n if (this.isOptionGroup(opt)) {\r\n const filtered = opt.options.filter(o => {\r\n const matchesLabel = o.label.toLowerCase().includes(term);\r\n const matchesDesc = o.description ? o.description.toLowerCase().includes(term) : false;\r\n return matchesLabel || matchesDesc;\r\n });\r\n return filtered.length > 0 ? { ...opt, options: filtered } : null;\r\n }\r\n const matchesLabel = opt.label.toLowerCase().includes(term);\r\n const matchesDesc = opt.description ? opt.description.toLowerCase().includes(term) : false;\r\n return (matchesLabel || matchesDesc) ? opt : null;\r\n }).filter((opt): opt is (SelectOption<T> | SelectOptionGroup<T>) => opt !== null);\r\n });\r\n\r\n constructor() {\r\n // A value change revalidates by itself; a change to `required` does not — Angular has\r\n // no reason to suspect the validator's answer moved. This is what the callback is for.\r\n effect(() => {\r\n this.required();\r\n this.onValidatorChange();\r\n });\r\n\r\n // Close on outside click via the shared click-outside primitive. The options\r\n // panel is teleported to the body (outside the host), so a click inside it\r\n // must NOT count as \"outside\" — otherwise selecting an option would close the\r\n // panel before select() runs.\r\n const clickOutside = inject(PshClickOutsideDirective);\r\n const sub = clickOutside.pshClickOutside.subscribe(event => {\r\n if (!this.isOpen()) return;\r\n const target = event.target as Node | null;\r\n if (target && this.portalRef?.panel.contains(target)) return;\r\n this.close();\r\n });\r\n this.destroyRef.onDestroy(() => {\r\n sub.unsubscribe();\r\n this.closePanel();\r\n });\r\n }\r\n\r\n /** Teleports the options panel to the body-level overlay layer and positions it. */\r\n private openPanel(): void {\r\n if (this.portalRef) return;\r\n const tpl = this.panelTpl();\r\n if (!tpl) return;\r\n this.portalRef = this.portal.attach(tpl, this.viewContainer);\r\n this.reposition();\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n // Capture phase so inner (e.g. modal body) scrolls keep the panel aligned.\r\n // Registered outside Angular: a capture-phase scroll listener fires on every scroll of\r\n // every ancestor, and each one triggered a full change-detection pass. Repositioning\r\n // writes to the DOM and to a signal, and a signal write schedules its own refresh — the\r\n // zone was doing the work twice.\r\n this.zone.runOutsideAngular(() => {\r\n view?.addEventListener('scroll', this.repositionHandler, true);\r\n view?.addEventListener('resize', this.repositionHandler);\r\n });\r\n }\r\n\r\n private closePanel(): void {\r\n const view = (this.elementRef.nativeElement as HTMLElement).ownerDocument.defaultView;\r\n view?.removeEventListener('scroll', this.repositionHandler, true);\r\n view?.removeEventListener('resize', this.repositionHandler);\r\n this.portalRef?.detach();\r\n this.portalRef = null;\r\n this.resolvedSide.set('bottom');\r\n }\r\n\r\n private reposition(): void {\r\n if (!this.portalRef) return;\r\n const host = this.elementRef.nativeElement as HTMLElement;\r\n const trigger = host.querySelector('.psh-select-trigger') as HTMLElement | null;\r\n if (!trigger) return;\r\n const side = this.overlayPosition.flipSide(trigger, 'bottom', {\r\n overlayHeight: this.portalRef.panel.offsetHeight,\r\n }) as 'top' | 'bottom';\r\n this.resolvedSide.set(side);\r\n this.portalRef.position(trigger, side, 8);\r\n }\r\n\r\n private onChange: (value: T | T[] | null) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n private onValidatorChange: () => void = () => {};\r\n\r\n writeValue(value: unknown): void {\r\n this.value.set(value as T | T[] | null);\r\n }\r\n\r\n registerOnChange(fn: (value: T | T[] | null) => void): void { this.onChange = fn; }\r\n registerOnTouched(fn: () => void): void { this.onTouched = fn; }\r\n setDisabledState(isDisabled: boolean): void { this.disabled.set(isDisabled); }\r\n\r\n toggle(): void {\r\n if (this.disabled() || this.loading()) return;\r\n if (this.isOpen()) {\r\n this.close();\r\n } else {\r\n this.isOpenSignal.set(true);\r\n this.opened.emit();\r\n this.openPanel();\r\n }\r\n }\r\n\r\n close(): void {\r\n if (!this.isOpenSignal()) return;\r\n this.isOpenSignal.set(false);\r\n this.searchTermSignal.set('');\r\n this.focusedIndex.set(-1);\r\n this.closePanel();\r\n this.closed.emit();\r\n }\r\n\r\n select(option: SelectOption<T>, groupDisabled = false): void {\r\n if (this.disabled() || option.disabled || groupDisabled) return;\r\n\r\n if (this.multiple()) {\r\n const current = Array.isArray(this.value()) ? [...(this.value() as T[])] : [];\r\n const index = current.findIndex(v => this.compareWith()(v, option.value));\r\n if (index === -1) {\r\n const max = this.maxSelections();\r\n if (max !== undefined && current.length >= max) return;\r\n current.push(option.value);\r\n } else {\r\n const min = this.minSelections();\r\n if (min !== undefined && current.length <= min) return;\r\n current.splice(index, 1);\r\n }\r\n this.value.set(current as T | T[] | null);\r\n this.onChange(current);\r\n } else {\r\n this.value.set(option.value as T | T[] | null);\r\n this.onChange(option.value);\r\n this.close();\r\n }\r\n this.onTouched();\r\n this.touched.set(true);\r\n this.touch.emit();\r\n }\r\n\r\n clear(event: MouseEvent): void {\r\n event.stopPropagation();\r\n const newVal = (this.multiple() ? [] : null) as T | T[] | null;\r\n this.value.set(newVal);\r\n this.onChange(this.value());\r\n }\r\n\r\n onSearch(event: Event): void {\r\n const term = (event.target as HTMLInputElement).value;\r\n this.searchTermSignal.set(term);\r\n this.searched.emit(term);\r\n }\r\n\r\n onScroll(event: Event): void {\r\n const el = event.target as HTMLElement;\r\n if (el.scrollHeight - el.scrollTop === el.clientHeight) {\r\n this.scrolledToEnd.emit();\r\n }\r\n }\r\n\r\n handleKeydown(event: KeyboardEvent): void {\r\n switch (event.key) {\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n if (!this.isOpen()) {\r\n this.toggle();\r\n } else if (this.focusedIndex() >= 0) {\r\n const flat = this.flatFilteredOptions();\r\n const item = flat[this.focusedIndex()];\r\n if (item && !item.effectiveDisabled) {\r\n this.select(item.option);\r\n }\r\n }\r\n break;\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n if (!this.isOpen()) {\r\n this.toggle();\r\n } else {\r\n this.moveFocus(1);\r\n }\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.moveFocus(-1);\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.focusFirst();\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.focusLast();\r\n break;\r\n case 'Escape':\r\n // Only when there is a panel to dismiss, and then the event stops here: a modal\r\n // listens for Escape on the document, so letting it through would close the whole\r\n // dialog — the user's form — for someone who only wanted the list gone.\r\n if (this.isOpen()) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.close();\r\n }\r\n break;\r\n case 'Tab':\r\n this.close();\r\n break;\r\n }\r\n }\r\n\r\n protected isOptionGroup(item: SelectOption<T> | SelectOptionGroup<T>): item is SelectOptionGroup<T> {\r\n return 'options' in item;\r\n }\r\n\r\n protected getOptionKey(item: SelectOption<T> | SelectOptionGroup<T>): string {\r\n return this.isOptionGroup(item) ? `g-${item.label}` : `o-${item.label}`;\r\n }\r\n\r\n protected isSelected(option: SelectOption<T>): boolean {\r\n const val = this.value();\r\n if (this.multiple() && Array.isArray(val)) {\r\n return val.some(v => this.compareWith()(v, option.value));\r\n }\r\n return val !== null && this.compareWith()(val as T, option.value);\r\n }\r\n\r\n protected hasValue(): boolean {\r\n const val = this.value();\r\n if (this.multiple()) return Array.isArray(val) && val.length > 0;\r\n return val !== null && val !== undefined;\r\n }\r\n\r\n /**\r\n * Everything the template needs about one option, computed once per render.\r\n *\r\n * It used to ask four questions per option per change-detection cycle, and one of them —\r\n * \"what is this option's position in the flattened list?\" — was a `findIndex` over that\r\n * list. Two hundred options meant forty thousand comparisons every cycle, plus a fresh\r\n * context object per option, which also defeats `NgTemplateOutlet`'s own caching: a new\r\n * context is a changed context.\r\n *\r\n * One pass over the flat list answers all four, and the context object is stable between\r\n * renders as long as nothing it holds has changed.\r\n */\r\n private readonly optionViews = computed(() => {\r\n const flat = this.flatFilteredOptions();\r\n const views = new Map<SelectOption<T>, SelectOptionView<T>>();\r\n flat.forEach(({ option, effectiveDisabled }, index) => {\r\n const selected = this.isSelected(option);\r\n views.set(option, {\r\n index,\r\n selected,\r\n disabled: effectiveDisabled,\r\n context: { $implicit: option, selected, disabled: effectiveDisabled },\r\n });\r\n });\r\n return views;\r\n });\r\n\r\n /** O(1). An option the current render does not contain gets a view that says so. */\r\n protected optionView(option: SelectOption<T>): SelectOptionView<T> {\r\n return (\r\n this.optionViews().get(option) ?? {\r\n index: -1,\r\n selected: false,\r\n disabled: false,\r\n context: { $implicit: option, selected: false, disabled: false },\r\n }\r\n );\r\n }\r\n\r\n protected focusSelect(): void {\r\n this.elementRef.nativeElement.querySelector('.psh-select-trigger')?.focus();\r\n }\r\n\r\n private flattenOptions(options: (SelectOption<T> | SelectOptionGroup<T>)[]): SelectOption<T>[] {\r\n return options.reduce((acc, opt) => this.isOptionGroup(opt) ? [...acc, ...opt.options] : [...acc, opt], [] as SelectOption<T>[]);\r\n }\r\n\r\n private moveFocus(direction: 1 | -1): void {\r\n const flat = this.flatFilteredOptions();\r\n if (flat.length === 0) return;\r\n const current = this.focusedIndex();\r\n let next = current;\r\n for (let i = 0; i < flat.length; i++) {\r\n next = ((next + direction) % flat.length + flat.length) % flat.length;\r\n if (!flat[next]!.effectiveDisabled) {\r\n this.focusedIndex.set(next);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n private focusFirst(): void {\r\n const flat = this.flatFilteredOptions();\r\n for (let i = 0; i < flat.length; i++) {\r\n if (!flat[i]!.effectiveDisabled) {\r\n this.focusedIndex.set(i);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n private focusLast(): void {\r\n const flat = this.flatFilteredOptions();\r\n for (let i = flat.length - 1; i >= 0; i--) {\r\n if (!flat[i]!.effectiveDisabled) {\r\n this.focusedIndex.set(i);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Makes `required` a real constraint rather than an asterisk.\r\n *\r\n * Re-run whenever `required` or the value changes: `registerOnValidatorChange` gives us\r\n * the callback that tells Angular to revalidate, and an effect fires it.\r\n */\r\n validate(): ValidationErrors | null {\r\n return pshRequiredError(this.required(), pshIsEmptyValue(this.value()));\r\n }\r\n\r\n registerOnValidatorChange(fn: () => void): void {\r\n this.onValidatorChange = fn;\r\n }\r\n\r\n}\r\n","<div class=\"psh-select-container\">\r\n @if (label()) {\r\n <!-- label[for] delegates focus to its control natively; the click handler is a convenience. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <label class=\"psh-select-label\" [attr.for]=\"selectId\" (click)=\"focusSelect()\" [class.psh-required]=\"required()\">\r\n {{ label() }}\r\n @if (required()) { <span class=\"psh-required-mark\">*</span> }\r\n </label>\r\n }\r\n\r\n <div class=\"psh-select-trigger-wrapper\">\r\n <div class=\"psh-select-trigger\"\r\n role=\"combobox\"\r\n [id]=\"selectId\"\r\n [attr.aria-expanded]=\"isOpen()\"\r\n [attr.aria-haspopup]=\"'listbox'\"\r\n [attr.aria-controls]=\"selectId + '-listbox'\"\r\n [attr.aria-activedescendant]=\"activeDescendant()\"\r\n [attr.aria-label]=\"computedAriaLabel()\"\r\n [attr.aria-invalid]=\"!!error()\"\r\n [attr.aria-required]=\"required()\"\r\n [attr.aria-disabled]=\"disabled()\"\r\n [attr.aria-busy]=\"loading()\"\r\n [attr.aria-describedby]=\"describedBy()\"\r\n [attr.tabindex]=\"disabled() || loading() ? -1 : 0\"\r\n (keydown)=\"handleKeydown($event)\"\r\n (click)=\"toggle()\">\r\n <div class=\"psh-select-value\">\r\n <span [class.psh-placeholder]=\"!hasValue()\">\r\n {{ selectedLabel() }}\r\n </span>\r\n </div>\r\n <div class=\"psh-select-actions\">\r\n @if (clearable() && hasValue() && !disabled()) {\r\n <!-- Icon-only control: without an explicit name it is announced as \"button\",\r\n and without type=\"button\" it submits any surrounding form. -->\r\n <button class=\"psh-select-clear\"\r\n type=\"button\"\r\n [attr.aria-label]=\"clearLabel()\"\r\n (click)=\"clear($event)\">\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n @if (loading()) {\r\n <div class=\"psh-select-loader-trigger\"></div>\r\n } @else {\r\n <i class=\"ph ph-caret-down psh-select-arrow\"></i>\r\n }\r\n </div>\r\n </div>\r\n\r\n <ng-template #panelTpl>\r\n <div class=\"psh-select-dropdown\" [class.psh-open-top]=\"resolvedSide() === 'top'\">\r\n @if (searchable()) {\r\n <div class=\"psh-select-search\">\r\n <i class=\"ph ph-magnifying-glass psh-select-search-icon\" aria-hidden=\"true\"></i>\r\n <input type=\"text\"\r\n [attr.aria-label]=\"searchPlaceholder()\"\r\n [placeholder]=\"searchPlaceholder()\"\r\n [value]=\"searchTerm()\"\r\n (input)=\"onSearch($event)\"\r\n (click)=\"$event.stopPropagation()\">\r\n </div>\r\n }\r\n <div class=\"psh-select-options\"\r\n role=\"listbox\"\r\n [id]=\"selectId + '-listbox'\"\r\n [attr.aria-multiselectable]=\"multiple() || null\"\r\n (scroll)=\"onScroll($event)\">\r\n @for (item of filteredOptions(); track getOptionKey(item)) {\r\n @if (isOptionGroup(item)) {\r\n <div class=\"psh-select-group\" role=\"group\" [attr.aria-label]=\"item.label\">\r\n <div class=\"psh-select-group-label\">{{ item.label }}</div>\r\n @for (opt of item.options; track opt.label) {\r\n <!-- option in a listbox: keyboard is handled at the widget level (arrows + aria-activedescendant). -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -->\r\n <div class=\"psh-select-option\"\r\n role=\"option\"\r\n [id]=\"selectId + '-' + opt.value\"\r\n [attr.aria-selected]=\"optionView(opt).selected\"\r\n [attr.aria-disabled]=\"optionView(opt).disabled ? true : null\"\r\n [attr.tabindex]=\"optionView(opt).disabled ? -1 : null\"\r\n [class.psh-selected]=\"optionView(opt).selected\"\r\n [class.psh-disabled]=\"optionView(opt).disabled\"\r\n [class.psh-focused]=\"optionView(opt).index === focusedIndex()\"\r\n (click)=\"select(opt, !!item.disabled)\">\r\n @if (optionTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"optionTemplate()!\"\r\n [ngTemplateOutletContext]=\"optionView(opt).context\"\r\n ></ng-container>\r\n } @else {\r\n @if (opt.icon) { <i [class]=\"'ph ph-' + opt.icon\" aria-hidden=\"true\"></i> }\r\n <div class=\"psh-select-option-content\">\r\n <span class=\"psh-select-option-label\">{{ opt.label }}</span>\r\n @if (opt.description) { <span class=\"psh-select-option-description\">{{ opt.description }}</span> }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n } @else {\r\n <!-- option in a listbox: keyboard is handled at the widget level (arrows + aria-activedescendant). -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -->\r\n <div class=\"psh-select-option\"\r\n role=\"option\"\r\n [id]=\"selectId + '-' + item.value\"\r\n [attr.aria-selected]=\"optionView(item).selected\"\r\n [attr.aria-disabled]=\"optionView(item).disabled ? true : null\"\r\n [attr.tabindex]=\"optionView(item).disabled ? -1 : null\"\r\n [class.psh-selected]=\"optionView(item).selected\"\r\n [class.psh-disabled]=\"optionView(item).disabled\"\r\n [class.psh-focused]=\"optionView(item).index === focusedIndex()\"\r\n (click)=\"select(item)\">\r\n @if (optionTemplate()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"optionTemplate()!\"\r\n [ngTemplateOutletContext]=\"optionView(item).context\"\r\n ></ng-container>\r\n } @else {\r\n @if (item.icon) { <i [class]=\"'ph ph-' + item.icon\" aria-hidden=\"true\"></i> }\r\n <div class=\"psh-select-option-content\">\r\n <span class=\"psh-select-option-label\">{{ item.label }}</span>\r\n @if (item.description) { <span class=\"psh-select-option-description\">{{ item.description }}</span> }\r\n </div>\r\n }\r\n </div>\r\n }\r\n } @empty {\r\n <div class=\"psh-select-no-results\">{{ noResultsText() }}</div>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n @if (error()) {\r\n <div [id]=\"selectId + '-error'\" class=\"psh-select-error-message\" role=\"alert\">{{ error() }}</div>\r\n } @else if (success()) {\r\n <div [id]=\"selectId + '-success'\" class=\"psh-select-success-message\" role=\"status\">{{ success() }}</div>\r\n } @else if (hint()) {\r\n <div [id]=\"selectId + '-hint'\" class=\"psh-select-hint\">{{ hint() }}</div>\r\n }\r\n</div>\r\n\r\n","import { Injectable, inject, signal } from '@angular/core';\r\nimport { TOAST_CONFIG } from './toast.tokens';\r\nimport { Toast, ToastPosition } from './toast.types';\r\nimport { pshUniqueId } from '../../utils/unique-id';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PshToastService {\r\n private readonly _toasts = signal<Toast[]>([]);\r\n private readonly _position = signal<ToastPosition>('top-right');\r\n private config = inject(TOAST_CONFIG);\r\n\r\n readonly toasts = this._toasts.asReadonly();\r\n readonly position = this._position.asReadonly();\r\n\r\n show(toast: Omit<Toast, 'id'>) {\r\n // Not `crypto.randomUUID()`: it is undefined in a non-secure context, so raising a\r\n // toast over plain http threw instead of showing anything.\r\n const id = pshUniqueId('toast');\r\n const newToast: Toast = {\r\n ...toast,\r\n id,\r\n color: toast.color || 'info',\r\n duration: toast.duration ?? this.config.duration ?? 5000\r\n };\r\n\r\n const maxToasts = this.config.maxToasts ?? 5;\r\n this._toasts.update(toasts => {\r\n const currentToasts = [...toasts];\r\n while (currentToasts.length >= maxToasts) {\r\n currentToasts.shift();\r\n }\r\n return [...currentToasts, newToast];\r\n });\r\n\r\n return id;\r\n }\r\n\r\n remove(id: string) {\r\n this._toasts.update(toasts => toasts.filter(t => t.id !== id));\r\n }\r\n\r\n info(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, color: 'info', ...options });\r\n }\r\n\r\n success(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, color: 'success', ...options });\r\n }\r\n\r\n warning(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, color: 'warning', ...options });\r\n }\r\n\r\n error(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, color: 'danger', ...options });\r\n }\r\n\r\n danger(message: string, options?: Partial<Omit<Toast, 'id' | 'message' | 'type'>>) {\r\n return this.show({ message, color: 'danger', ...options });\r\n }\r\n\r\n setPosition(position: ToastPosition) {\r\n this._position.set(position);\r\n }\r\n}\r\n\r\n/** @deprecated Use PshToastService instead */\r\nexport const ToastService = PshToastService;\r\n","import {\r\n computed, ChangeDetectionStrategy, Component, effect, inject, input, OnDestroy } from '@angular/core';\r\nimport { pshResolveConfigValue } from '../../utils/config-value';\r\nimport { Toast } from './toast.types';\r\nimport { PshColor } from '../../types/semantic.types';\r\nimport { PshToastService } from './toast.service';\r\nimport { TOAST_CONFIG } from './toast.tokens';\r\n\r\n@Component({\r\n selector: 'psh-toast',\r\n templateUrl: './toast.component.html',\r\n styleUrls: ['./toast.component.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '(document:keydown.escape)': 'handleEscapeKey()'\r\n }\r\n})\r\nexport class PshToastComponent implements OnDestroy {\r\n /**\r\n * Name of the notifications landmark. Was a literal in the template.\r\n *\r\n * The first `input()` this component has ever had: it went from zero inputs and zero\r\n * outputs on 118 lines to one. The rest of its API is still the service.\r\n */\r\n readonly ariaLabelInput = input<string | undefined>(undefined, { alias: 'ariaLabel' });\r\n readonly ariaLabel = computed(\r\n () => this.ariaLabelInput() ?? pshResolveConfigValue(this.config.ariaLabel) ?? 'Notifications',\r\n );\r\n\r\n private toastService = inject(PshToastService);\r\n public config = inject(TOAST_CONFIG);\r\n\r\n private timeoutMap = new Map<string, number>();\r\n private scheduledToastIds = new Set<string>();\r\n\r\n readonly toasts = this.toastService.toasts;\r\n readonly position = this.toastService.position;\r\n\r\n constructor() {\r\n effect(() => {\r\n const currentToasts = this.toasts();\r\n\r\n currentToasts.forEach(toast => {\r\n if (toast.id && !this.scheduledToastIds.has(toast.id)) {\r\n this.scheduledToastIds.add(toast.id);\r\n\r\n if (toast.duration && toast.duration > 0) {\r\n this.scheduleRemoval(toast.id, toast.duration);\r\n }\r\n }\r\n });\r\n\r\n const currentToastIds = new Set(currentToasts.map(t => t.id).filter(Boolean) as string[]);\r\n this.scheduledToastIds.forEach(id => {\r\n if (!currentToastIds.has(id)) {\r\n this.scheduledToastIds.delete(id);\r\n }\r\n });\r\n });\r\n }\r\n\r\n handleEscapeKey(): void {\r\n const toasts = this.toasts();\r\n const lastToast = toasts[toasts.length - 1];\r\n if (lastToast?.id) {\r\n this.handleDismiss(lastToast.id);\r\n }\r\n }\r\n\r\n handleDismiss(id: string | undefined): void {\r\n if (id) {\r\n this.clearTimeout(id);\r\n this.toastService.remove(id);\r\n }\r\n }\r\n\r\n handleMouseEnter(id: string): void {\r\n if (this.config.pauseOnHover) {\r\n this.clearTimeout(id);\r\n }\r\n }\r\n\r\n handleMouseLeave(id: string): void {\r\n if (this.config.pauseOnHover) {\r\n const toast = this.toasts().find(t => t.id === id);\r\n if (toast?.duration && toast.duration > 0) {\r\n this.scheduleRemoval(id, toast.duration);\r\n }\r\n }\r\n }\r\n\r\n getDefaultIcon(color: PshColor): string {\r\n const icons: Record<PshColor, string> = {\r\n info: 'info',\r\n success: 'check-circle',\r\n warning: 'warning',\r\n danger: 'warning-octagon',\r\n // Reachable since 7.0.0: the colour union is the same seven values everywhere, so a\r\n // toast can now be raised in any of them rather than the four it used to allow.\r\n primary: 'info',\r\n secondary: 'info',\r\n neutral: 'info'\r\n };\r\n return icons[color] || 'info';\r\n }\r\n\r\n shouldShowCloseButton(toast: Toast): boolean {\r\n if (toast.showCloseButton !== undefined) {\r\n return toast.showCloseButton;\r\n }\r\n return this.config.showCloseButton !== false;\r\n }\r\n\r\n getCloseButtonAriaLabel(toast: Toast): string {\r\n return toast.closeButtonAriaLabel ?? this.config.closeButtonAriaLabel ?? 'Close notification';\r\n }\r\n\r\n private scheduleRemoval(id: string, duration: number): void {\r\n this.clearTimeout(id);\r\n const timeoutId = setTimeout(() => {\r\n this.toastService.remove(id);\r\n this.timeoutMap.delete(id);\r\n }, duration);\r\n this.timeoutMap.set(id, timeoutId);\r\n }\r\n\r\n private clearTimeout(id: string): void {\r\n const timeoutId = this.timeoutMap.get(id);\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n this.timeoutMap.delete(id);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.timeoutMap.forEach(timeoutId => {\r\n clearTimeout(timeoutId);\r\n });\r\n this.timeoutMap.clear();\r\n this.scheduledToastIds.clear();\r\n }\r\n}\r\n\r\n","<div\r\n class=\"psh-toast-container\"\r\n [class]=\"'psh-' + position()\"\r\n role=\"region\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n>\r\n @for (toast of toasts(); track toast.id) {\r\n <div\r\n class=\"psh-toast-item\"\r\n [class]=\"toast.color\"\r\n role=\"alert\"\r\n aria-live=\"polite\"\r\n aria-atomic=\"true\"\r\n [style.--psh-progress-duration]=\"toast.duration + 'ms'\"\r\n (mouseenter)=\"handleMouseEnter(toast.id!)\"\r\n (mouseleave)=\"handleMouseLeave(toast.id!)\"\r\n >\r\n @if (config.showIcon !== false) {\r\n <i\r\n class=\"ph ph-{{ toast.icon || getDefaultIcon(toast.color) }} psh-toast-icon\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n }\r\n <div class=\"psh-toast-content\">\r\n {{ toast.message }}\r\n </div>\r\n @if (shouldShowCloseButton(toast)) {\r\n <button\r\n type=\"button\"\r\n class=\"psh-toast-close\"\r\n (click)=\"handleDismiss(toast.id)\"\r\n [attr.aria-label]=\"getCloseButtonAriaLabel(toast)\"\r\n >\r\n <i class=\"ph ph-x\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n </div>\r\n }\r\n</div>\r\n","import { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { Router, NavigationEnd } from '@angular/router';\r\nimport { filter } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ScrollService {\r\n private readonly router = inject(Router);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n constructor() {\r\n // providedIn: 'root' makes this effectively immortal in an application, but the\r\n // subscription still leaks wherever the root injector is recreated — tests, and\r\n // micro-frontends that bootstrap more than once. Every other subscription in the\r\n // library is torn down; this one was the exception.\r\n this.router.events.pipe(\r\n filter(event => event instanceof NavigationEnd),\r\n takeUntilDestroyed(),\r\n ).subscribe(() => {\r\n if (this.isBrowser) {\r\n this.document.defaultView?.scrollTo(0, 0);\r\n }\r\n });\r\n }\r\n}\r\n","import { Provider, Signal, signal } from '@angular/core';\r\n\r\nimport { PshViewportService } from './viewport.service';\r\n\r\n/**\r\n * A `PshViewportService` a test drives directly.\r\n *\r\n * `jsdom` has no layout, so `matchMedia` there answers whatever `setup-jest` stubs it with and\r\n * never changes. Before 7.0.0 the two card components each held their own writable `isMobile`\r\n * signal and the specs set it — which tested the class field rather than the path the viewport\r\n * actually travels. They set this instead, and the component reads it the way it does in a\r\n * browser.\r\n *\r\n * @example\r\n * const viewport = new FakePshViewport();\r\n * TestBed.configureTestingModule({ providers: [providePshViewportForTesting(viewport)] });\r\n * viewport.mobile.set(true);\r\n *\r\n * @internal\r\n */\r\nexport class FakePshViewport {\r\n /** Every query answers with this, which is all any consumer asks today. */\r\n readonly mobile = signal(false);\r\n\r\n below(): Signal<boolean> {\r\n return this.mobile.asReadonly();\r\n }\r\n\r\n matches(): Signal<boolean> {\r\n return this.mobile.asReadonly();\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function providePshViewportForTesting(fake: FakePshViewport): Provider {\r\n return { provide: PshViewportService, useValue: fake };\r\n}\r\n","// One call to configure the whole design system, plus the finer-grained providers.\r\nexport * from './lib/provide-helix';\r\n\r\n// Every default string in French, for an application that wants them back.\r\nexport * from './lib/i18n/french';\r\n\r\n// The vocabulary every component shares. Import PshColor rather than a per-component\r\n// alias: the aliases are deprecated and exist only to ease the 7.0.0 migration.\r\nexport * from './lib/types/semantic.types';\r\n\r\nexport * from './lib/components/alert/alert.component';\r\nexport * from './lib/components/alert/alert.tokens';\r\nexport * from './lib/components/alert/alert.types';\r\nexport * from './lib/components/avatar/avatar.component';\r\nexport * from './lib/components/avatar/avatar.tokens';\r\nexport * from './lib/components/avatar/avatar.types';\r\nexport * from './lib/components/badge/badge.component';\r\nexport * from './lib/components/badge/badge.tokens';\r\nexport * from './lib/components/badge/badge.types';\r\nexport * from './lib/components/button/button.component';\r\nexport * from './lib/components/button/button.tokens';\r\nexport * from './lib/components/button/button.types';\r\nexport * from './lib/components/card/card.component';\r\nexport * from './lib/components/card/card.tokens';\r\nexport * from './lib/components/card/card.types';\r\nexport * from './lib/components/stat-card/stat-card.component';\r\nexport * from './lib/components/stat-card/stat-card.tokens';\r\nexport * from './lib/components/stat-card/stat-card.types';\r\nexport * from './lib/components/horizontal-card/horizontal-card.component';\r\nexport * from './lib/components/horizontal-card/horizontal-card.tokens';\r\nexport * from './lib/components/info-card/info-card.component';\r\nexport * from './lib/components/info-card/info-card.tokens';\r\nexport * from './lib/components/info-card/info-card.types';\r\nexport * from './lib/components/checkbox/checkbox.component';\r\nexport * from './lib/components/checkbox/checkbox.types';\r\nexport * from './lib/components/collapse/collapse.component';\r\nexport * from './lib/components/collapse/collapse.tokens';\r\nexport * from './lib/components/collapse/collapse.types';\r\nexport * from './lib/components/dropdown/dropdown.component';\r\nexport * from './lib/components/dropdown/dropdown.tokens';\r\nexport * from './lib/components/dropdown/dropdown.types';\r\nexport * from './lib/components/input/input.component';\r\nexport * from './lib/components/input/input.tokens';\r\nexport * from './lib/components/input/input.types';\r\nexport * from './lib/components/textarea/textarea.component';\r\nexport * from './lib/components/textarea/textarea.tokens';\r\nexport * from './lib/components/textarea/textarea.types';\r\nexport * from './lib/components/menu/menu.component';\r\nexport * from './lib/components/menu/menu.tokens';\r\nexport * from './lib/components/menu/menu.types';\r\nexport * from './lib/components/modal/modal.component';\r\nexport * from './lib/components/modal/modal.types';\r\nexport * from './lib/components/pagination/pagination.component';\r\nexport * from './lib/components/pagination/pagination.types';\r\nexport * from './lib/components/progressbar/progressbar.component';\r\nexport * from './lib/components/progressbar/progressbar.types';\r\nexport * from './lib/components/radio/radio.component';\r\nexport * from './lib/components/radio/radio-group.component';\r\nexport * from './lib/components/radio/radio-group.token';\r\nexport * from './lib/components/radio/radio.types';\r\nexport * from './lib/components/select/select.component';\r\nexport * from './lib/components/select/select.tokens';\r\nexport * from './lib/components/select/select.types';\r\nexport * from './lib/components/sidebar/sidebar.component';\r\nexport * from './lib/components/sidebar/sidebar.types';\r\nexport * from './lib/components/spinloader/spinloader.component';\r\nexport * from './lib/components/spinloader/spinloader.types';\r\nexport * from './lib/components/stepper/stepper.component';\r\nexport * from './lib/components/stepper/step.component';\r\nexport * from './lib/components/stepper/stepper.types';\r\nexport * from './lib/components/state-flow-indicator/state-flow-indicator.component';\r\nexport * from './lib/components/state-flow-indicator/flow-step.component';\r\nexport * from './lib/components/state-flow-indicator/state-flow-indicator.types';\r\nexport * from './lib/components/switch/switch.component';\r\nexport * from './lib/components/switch/switch.types';\r\nexport * from './lib/components/tab-bar/tab-bar.component';\r\nexport * from './lib/components/tab-bar/tab-bar.types';\r\nexport * from './lib/components/table/table.component';\r\nexport * from './lib/components/table/table.types';\r\nexport * from './lib/components/tabs/tabs.component';\r\nexport * from './lib/components/tabs/tab.component';\r\nexport * from './lib/components/tabs/tabs.types';\r\nexport * from './lib/components/tag/tag.component';\r\nexport * from './lib/components/tag/tag.types';\r\nexport * from './lib/components/toast/toast.component';\r\nexport * from './lib/components/toast/toast.service';\r\nexport * from './lib/components/toast/toast.tokens';\r\nexport * from './lib/components/toast/toast.types';\r\nexport * from './lib/components/tooltip/tooltip.component';\r\nexport * from './lib/components/tooltip/tooltip.types';\r\n\r\nexport * from './lib/services/theme/theme.service';\r\nexport * from './lib/services/theme/types/theme.types';\r\nexport * from './lib/services/scroll.service';\r\n\r\n// Headless a11y / overlay primitives\r\nexport * from './lib/a11y/focus-trap.directive';\r\nexport * from './lib/a11y/click-outside.directive';\r\nexport * from './lib/a11y/live-announcer.service';\r\nexport * from './lib/a11y/viewport.service';\r\n// The test double for the above: a consumer testing a component that embeds a psh-card\r\n// needs to drive the viewport too, and jsdom has no layout to drive it with.\r\nexport * from './lib/a11y/viewport.testing';\r\nexport * from './lib/a11y/overlay-position.service';\r\nexport * from './lib/a11y/overlay.service';\r\nexport * from './lib/a11y/portal.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DEFAULT_ARIA_LABELS","DEFAULT_CONFIG","i1.PshClickOutsideDirective"],"mappings":"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"}