@tristan.stavast/blueprintx 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tristan.stavast-blueprintx.mjs","sources":["../../../projects/blueprintx/src/lib/core/types.ts","../../../projects/blueprintx/src/lib/core/id.ts","../../../projects/blueprintx/src/lib/button/button.ts","../../../projects/blueprintx/src/lib/button/button.html","../../../projects/blueprintx/src/lib/button-group/button-group.ts","../../../projects/blueprintx/src/lib/icon/icon-registry.ts","../../../projects/blueprintx/src/lib/icon/icon.ts","../../../projects/blueprintx/src/lib/icon/icon.html","../../../projects/blueprintx/src/lib/core/overlay.ts","../../../projects/blueprintx/src/lib/menu/menu-trigger.ts","../../../projects/blueprintx/src/lib/split-button/split-button.ts","../../../projects/blueprintx/src/lib/copy-button/copy-button.ts","../../../projects/blueprintx/src/lib/badge/badge.ts","../../../projects/blueprintx/src/lib/spinner/spinner.ts","../../../projects/blueprintx/src/lib/skeleton/skeleton.ts","../../../projects/blueprintx/src/lib/skeleton/skeleton-layout.ts","../../../projects/blueprintx/src/lib/skeleton/skeleton-layout.html","../../../projects/blueprintx/src/lib/avatar/avatar.ts","../../../projects/blueprintx/src/lib/avatar/avatar.html","../../../projects/blueprintx/src/lib/chip/chip.ts","../../../projects/blueprintx/src/lib/chip/chip.html","../../../projects/blueprintx/src/lib/chip/chip-set.ts","../../../projects/blueprintx/src/lib/alert/alert.ts","../../../projects/blueprintx/src/lib/alert/alert.html","../../../projects/blueprintx/src/lib/select/select.ts","../../../projects/blueprintx/src/lib/select/select.html","../../../projects/blueprintx/src/lib/multi-select/multi-select.ts","../../../projects/blueprintx/src/lib/multi-select/multi-select.html","../../../projects/blueprintx/src/lib/combobox/combobox.ts","../../../projects/blueprintx/src/lib/combobox/combobox.html","../../../projects/blueprintx/src/lib/file-upload/file-upload.ts","../../../projects/blueprintx/src/lib/file-upload/file-upload.html","../../../projects/blueprintx/src/lib/filter/filter.ts","../../../projects/blueprintx/src/lib/filter/filter.html","../../../projects/blueprintx/src/lib/switch/switch.ts","../../../projects/blueprintx/src/lib/slider/slider.ts","../../../projects/blueprintx/src/lib/input/input.ts","../../../projects/blueprintx/src/lib/input/input.html","../../../projects/blueprintx/src/lib/textarea/textarea.ts","../../../projects/blueprintx/src/lib/textarea/textarea.html","../../../projects/blueprintx/src/lib/progress/progress.ts","../../../projects/blueprintx/src/lib/progress/progress.html","../../../projects/blueprintx/src/lib/tabs/tab.ts","../../../projects/blueprintx/src/lib/tabs/tabs.ts","../../../projects/blueprintx/src/lib/tabs/tabs.html","../../../projects/blueprintx/src/lib/tooltip/tooltip.ts","../../../projects/blueprintx/src/lib/card/card.ts","../../../projects/blueprintx/src/lib/liquid-glass/liquid-glass.ts","../../../projects/blueprintx/src/lib/liquid-glass/liquid-glass.html","../../../projects/blueprintx/src/lib/accordion/accordion.ts","../../../projects/blueprintx/src/lib/accordion/accordion-item.ts","../../../projects/blueprintx/src/lib/accordion/accordion-item.html","../../../projects/blueprintx/src/lib/dialog/dialog.ts","../../../projects/blueprintx/src/lib/dialog/dialog.html","../../../projects/blueprintx/src/lib/checkbox/checkbox.ts","../../../projects/blueprintx/src/lib/radio/radio.ts","../../../projects/blueprintx/src/lib/radio/radio-group.ts","../../../projects/blueprintx/src/lib/pagination/pagination.ts","../../../projects/blueprintx/src/lib/pagination/pagination.html","../../../projects/blueprintx/src/lib/scroll-area/scroll-area.ts","../../../projects/blueprintx/src/lib/scroll-area/scroll-area.html","../../../projects/blueprintx/src/lib/color-picker/color-picker.ts","../../../projects/blueprintx/src/lib/color-picker/color-picker.html","../../../projects/blueprintx/src/lib/toast/toast.ts","../../../projects/blueprintx/src/lib/toast/toast.service.ts","../../../projects/blueprintx/src/lib/menu/menu-item.ts","../../../projects/blueprintx/src/lib/menu/menu.ts","../../../projects/blueprintx/src/lib/table/cell-def.ts","../../../projects/blueprintx/src/lib/table/table.ts","../../../projects/blueprintx/src/lib/table/table.html","../../../projects/blueprintx/src/lib/pivot-grid/pivot-engine.ts","../../../projects/blueprintx/src/lib/pivot-grid/pivot-field-pane.ts","../../../projects/blueprintx/src/lib/pivot-grid/pivot-field-pane.html","../../../projects/blueprintx/src/lib/pivot-grid/pivot-grid.ts","../../../projects/blueprintx/src/lib/pivot-grid/pivot-grid.html","../../../projects/blueprintx/src/lib/command-palette/command-palette.ts","../../../projects/blueprintx/src/lib/command-palette/command-palette.html","../../../projects/blueprintx/src/lib/popover/popover.ts","../../../projects/blueprintx/src/lib/popover/popover-trigger.ts","../../../projects/blueprintx/src/lib/drawer/drawer.ts","../../../projects/blueprintx/src/lib/drawer/drawer.html","../../../projects/blueprintx/src/lib/breadcrumbs/breadcrumbs.ts","../../../projects/blueprintx/src/lib/breadcrumbs/breadcrumbs.html","../../../projects/blueprintx/src/lib/stepper/step.ts","../../../projects/blueprintx/src/lib/stepper/stepper.ts","../../../projects/blueprintx/src/lib/stepper/stepper.html","../../../projects/blueprintx/src/lib/segmented/segmented.ts","../../../projects/blueprintx/src/lib/segmented/segmented.html","../../../projects/blueprintx/src/lib/core/date.ts","../../../projects/blueprintx/src/lib/calendar/calendar.ts","../../../projects/blueprintx/src/lib/calendar/calendar.html","../../../projects/blueprintx/src/lib/date-picker/date-picker.ts","../../../projects/blueprintx/src/lib/date-picker/date-picker.html","../../../projects/blueprintx/src/lib/fx/spotlight-card/spotlight-card.ts","../../../projects/blueprintx/src/lib/fx/tilt-card/tilt-card.ts","../../../projects/blueprintx/src/lib/fx/gradient-text/gradient-text.ts","../../../projects/blueprintx/src/lib/fx/shiny-text/shiny-text.ts","../../../projects/blueprintx/src/lib/fx/border-beam/border-beam.ts","../../../projects/blueprintx/src/lib/fx/magnetic/magnetic.ts","../../../projects/blueprintx/src/lib/fx/click-spark/click-spark.ts","../../../projects/blueprintx/src/lib/fx/ripple/ripple.ts","../../../projects/blueprintx/src/lib/fx/count-up/count-up.ts","../../../projects/blueprintx/src/lib/fx/typewriter/typewriter.ts","../../../projects/blueprintx/src/lib/fx/marquee/marquee.ts","../../../projects/blueprintx/src/lib/fx/aurora/aurora.ts","../../../projects/blueprintx/src/lib/fx/electric-border/electric-border.ts","../../../projects/blueprintx/src/lib/fx/electric-border/electric-border.html","../../../projects/blueprintx/src/lib/fx/particles/particles.ts","../../../projects/blueprintx/src/lib/fx/dot-grid/dot-grid.ts","../../../projects/blueprintx/src/lib/fx/meteors/meteors.ts","../../../projects/blueprintx/src/lib/fx/retro-grid/retro-grid.ts","../../../projects/blueprintx/src/lib/fx/gradient-mesh/gradient-mesh.ts","../../../projects/blueprintx/src/lib/fx/spotlight/spotlight.ts","../../../projects/blueprintx/src/lib/fx/grid-highlight/grid-highlight.ts","../../../projects/blueprintx/src/lib/fx/repel-dots/repel-dots.ts","../../../projects/blueprintx/src/lib/fx/glass-cursor/glass-cursor.ts","../../../projects/blueprintx/src/lib/fx/glass-cursor/glass-cursor.html","../../../projects/blueprintx/src/public-api.ts","../../../projects/blueprintx/src/tristan.stavast-blueprintx.ts"],"sourcesContent":["/**\n * Shared cross-component type vocabulary for BlueprintX.\n * Keeping these in one place means `size=\"md\"` means the same thing on every\n * component and consumers get consistent autocomplete.\n */\n\n/** T-shirt sizes used by most interactive components. */\nexport type BpxSize = 'sm' | 'md' | 'lg';\n\n/** Visual emphasis / hierarchy of an action. */\nexport type BpxVariant = 'solid' | 'soft' | 'outline' | 'ghost' | 'link';\n\n/** Semantic color role, mapped to design tokens. */\nexport type BpxColor = 'primary' | 'neutral' | 'success' | 'warning' | 'danger' | 'info';\n\n/** Fill style shared by \"badge-like\" presentational components. */\nexport type BpxTone = 'solid' | 'soft' | 'outline';\n\n/**\n * A selectable option for data-driven components (Select, MultiSelect, Filter).\n * `T` is the type of the underlying value.\n */\nexport interface BpxOption<T = string> {\n label: string;\n value: T;\n disabled?: boolean;\n /** Optional registered icon name to show before the label. */\n icon?: string;\n}\n","let counter = 0;\n\n/**\n * Generates a process-unique, DOM-safe id with a prefix.\n * Used to wire up ARIA relationships (aria-labelledby, aria-describedby, etc.)\n * when the consumer hasn't supplied an explicit id.\n *\n * @example uniqueId('bpx-input') // 'bpx-input-0'\n */\nexport function uniqueId(prefix: string): string {\n return `${prefix}-${counter++}`;\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\nimport { BpxColor, BpxSize, BpxVariant } from '../core/types';\n\n/**\n * BlueprintX Button.\n *\n * Applied as an attribute on a native `<button>` or `<a>` so it keeps all\n * native semantics (focus, keyboard, form submission, right-click-open-in-tab):\n *\n * ```html\n * <button bpx-button color=\"primary\" variant=\"solid\">Save</button>\n * <a bpx-button variant=\"link\" href=\"/docs\">Docs</a>\n * <button bpx-button [loading]=\"saving()\" (click)=\"save()\">Submit</button>\n * ```\n */\n@Component({\n selector: 'button[bpx-button], a[bpx-button]',\n exportAs: 'bpxButton',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './button.html',\n styleUrl: './button.scss',\n host: {\n class: 'bpx-button',\n '[attr.data-variant]': 'variant()',\n '[attr.data-color]': 'color()',\n '[attr.data-size]': 'size()',\n '[class.bpx-button--full-width]': 'fullWidth()',\n '[class.bpx-button--icon-only]': 'iconOnly()',\n '[class.bpx-button--loading]': 'loading()',\n // Native <button> can be truly disabled; <a> cannot, so we fall back to\n // aria-disabled + click suppression for anchors.\n '[attr.disabled]': 'nativeDisabled() || null',\n '[attr.aria-disabled]': 'ariaDisabled() || null',\n '[attr.tabindex]': 'ariaDisabled() ? -1 : null',\n '[attr.aria-busy]': 'loading() || null',\n '[attr.type]': 'resolvedType()',\n '(click)': 'handleClick($event)',\n },\n})\nexport class Button {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly isAnchor = this.el.nativeElement.tagName === 'A';\n\n /** Visual style of the button. */\n readonly variant = input<BpxVariant>('solid');\n /** Semantic color role (maps to design tokens). */\n readonly color = input<BpxColor>('primary');\n /** Size of the button. */\n readonly size = input<BpxSize>('md');\n /** Whether the button is disabled. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Shows a spinner and blocks interaction while an async action runs. */\n readonly loading = input(false, { transform: booleanAttribute });\n /** Stretches the button to fill its container's width. */\n readonly fullWidth = input(false, { transform: booleanAttribute });\n /** Renders as a square icon-only button (removes horizontal padding). */\n readonly iconOnly = input(false, { transform: booleanAttribute });\n /**\n * The `type` for a native button. Defaults to `button` to avoid accidental\n * form submits. Ignored for anchors.\n */\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n\n protected readonly nativeDisabled = computed(\n () => !this.isAnchor && (this.disabled() || this.loading()),\n );\n protected readonly ariaDisabled = computed(\n () => this.isAnchor && (this.disabled() || this.loading()),\n );\n protected readonly resolvedType = computed(() => (this.isAnchor ? null : this.type()));\n\n protected handleClick(event: Event): void {\n if (this.disabled() || this.loading()) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n}\n","@if (loading()) {\n <span class=\"bpx-button__spinner\" aria-hidden=\"true\"></span>\n}\n<span class=\"bpx-button__content\"><ng-content /></span>\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Visually joins a row (or column) of `[bpx-button]`s into a single connected\n * control — shared borders, rounded only on the outer ends.\n *\n * ```html\n * <bpx-button-group>\n * <button bpx-button variant=\"outline\">Day</button>\n * <button bpx-button variant=\"outline\">Week</button>\n * <button bpx-button variant=\"outline\">Month</button>\n * </bpx-button-group>\n * ```\n */\n@Component({\n selector: 'bpx-button-group',\n exportAs: 'bpxButtonGroup',\n changeDetection: ChangeDetectionStrategy.OnPush,\n // None so the group can restyle the projected buttons' shared edges. All\n // rules are namespaced under `.bpx-button-group`, so nothing leaks.\n encapsulation: ViewEncapsulation.None,\n template: '<ng-content />',\n styleUrl: './button-group.scss',\n host: {\n class: 'bpx-button-group',\n role: 'group',\n '[attr.data-orientation]': 'orientation()',\n },\n})\nexport class ButtonGroup {\n /** Lay the buttons out in a row (default) or a column. */\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n}\n","import { Injectable } from '@angular/core';\n\n/** Inner SVG markup for an icon, drawn on a 0 0 24 24 viewBox. */\nexport type BpxIconDefinition = string;\n\n/**\n * Central registry mapping icon names to their SVG body. Ships with a small\n * built-in set; apps register their own with `registry.register('name', svg)`.\n * All icons are authored on a 24×24 grid and inherit `currentColor`.\n */\n@Injectable({ providedIn: 'root' })\nexport class IconRegistry {\n private readonly icons = new Map<string, BpxIconDefinition>(BUILT_IN_ICONS);\n\n /** Register (or override) a single icon by name. */\n register(name: string, svgBody: BpxIconDefinition): void {\n this.icons.set(name, svgBody);\n }\n\n /** Register many icons at once. */\n registerMany(icons: Record<string, BpxIconDefinition>): void {\n for (const [name, body] of Object.entries(icons)) {\n this.icons.set(name, body);\n }\n }\n\n /** Look up an icon's SVG body, or undefined if not registered. */\n get(name: string): BpxIconDefinition | undefined {\n return this.icons.get(name);\n }\n\n /** All registered icon names — handy for docs/story controls. */\n names(): string[] {\n return [...this.icons.keys()];\n }\n}\n\nconst BUILT_IN_ICONS: ReadonlyArray<[string, BpxIconDefinition]> = [\n ['check', '<path d=\"M20 6 9 17l-5-5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>'],\n ['close', '<path d=\"M18 6 6 18M6 6l12 12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>'],\n ['chevron-down', '<path d=\"m6 9 6 6 6-6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>'],\n ['chevron-right', '<path d=\"m9 6 6 6-6 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>'],\n ['chevron-left', '<path d=\"m15 6-6 6 6 6\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>'],\n ['calendar', '<rect x=\"3\" y=\"4\" width=\"18\" height=\"17\" rx=\"2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M3 9h18M8 2v4M16 2v4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>'],\n ['upload', '<path d=\"M12 16V4M8 8l4-4 4 4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/><path d=\"M4 16v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>'],\n ['file', '<path d=\"M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"/><path d=\"M14 3v5h5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"/>'],\n ['copy', '<rect x=\"9\" y=\"9\" width=\"12\" height=\"12\" rx=\"2\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>'],\n ['search', '<circle cx=\"11\" cy=\"11\" r=\"7\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"m21 21-4.3-4.3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>'],\n ['info', '<circle cx=\"12\" cy=\"12\" r=\"9\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"/><path d=\"M12 11v5M12 8h.01\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>'],\n ['warning', '<path d=\"M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0Z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"/><path d=\"M12 9v4M12 17h.01\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>'],\n];\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { BpxSize } from '../core/types';\nimport { IconRegistry } from './icon-registry';\n\n/**\n * BlueprintX Icon — renders a registered SVG glyph that inherits the current\n * text color and scales with font-size.\n *\n * ```html\n * <bpx-icon name=\"check\" />\n * <bpx-icon name=\"warning\" size=\"lg\" label=\"Warning\" />\n * ```\n *\n * If `label` is set the icon is exposed to assistive tech; otherwise it is\n * treated as decorative (aria-hidden).\n */\n@Component({\n selector: 'bpx-icon',\n exportAs: 'bpxIcon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './icon.html',\n styleUrl: './icon.scss',\n host: {\n class: 'bpx-icon',\n '[attr.data-size]': 'size()',\n '[attr.role]': 'label() ? \"img\" : null',\n '[attr.aria-label]': 'label() || null',\n '[attr.aria-hidden]': 'label() ? null : \"true\"',\n },\n})\nexport class Icon {\n private readonly registry = inject(IconRegistry);\n private readonly sanitizer = inject(DomSanitizer);\n\n /** Registered icon name to render. */\n readonly name = input.required<string>();\n /** Size token; also settable directly via CSS font-size. */\n readonly size = input<BpxSize>('md');\n /** Accessible label. Omit for purely decorative icons. */\n readonly label = input<string>();\n\n protected readonly svg = computed<SafeHtml>(() => {\n const body = this.registry.get(this.name());\n // Trusted: bodies come from the app-controlled registry, not user input.\n return this.sanitizer.bypassSecurityTrustHtml(body ?? '');\n });\n}\n","<svg viewBox=\"0 0 24 24\" focusable=\"false\" [innerHTML]=\"svg()\"></svg>\n","import { ConnectedPosition } from '@angular/cdk/overlay';\n\n/**\n * Default connected-overlay positions for popover-style components: open below\n * the trigger, flip above when there isn't room. Shared by Select, MultiSelect\n * and Filter so they all behave consistently.\n */\nexport const BPX_DROPDOWN_POSITIONS: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 6 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -6 },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 6 },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -6 },\n];\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n Directive,\n ElementRef,\n inject,\n input,\n OutputRefSubscription,\n signal,\n ViewContainerRef,\n DestroyRef,\n} from '@angular/core';\nimport { BPX_DROPDOWN_POSITIONS } from '../core/overlay';\nimport { Menu } from './menu';\n\n/**\n * Opens a `<bpx-menu>` from the element it's placed on (typically a button).\n *\n * ```html\n * <button bpx-button [bpxMenuTriggerFor]=\"menu\">Actions</button>\n * ```\n */\n@Directive({\n selector: '[bpxMenuTriggerFor]',\n exportAs: 'bpxMenuTrigger',\n host: {\n '[attr.aria-haspopup]': \"'menu'\",\n '[attr.aria-expanded]': 'isOpen()',\n '(click)': 'toggle()',\n '(keydown.arrowDown)': 'onArrowDown($event)',\n },\n})\nexport class MenuTrigger {\n readonly menu = input.required<Menu>({ alias: 'bpxMenuTriggerFor' });\n\n private readonly overlay = inject(Overlay);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly vcr = inject(ViewContainerRef);\n\n readonly isOpen = signal(false);\n private overlayRef?: OverlayRef;\n private closedSub?: OutputRefSubscription;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n this.closedSub?.unsubscribe();\n this.overlayRef?.dispose();\n });\n }\n\n protected toggle(): void {\n this.isOpen() ? this.close() : this.open();\n }\n\n protected onArrowDown(event: Event): void {\n event.preventDefault();\n this.open();\n }\n\n private open(): void {\n if (this.isOpen()) return;\n const ref = this.ensureOverlay();\n ref.attach(new TemplatePortal(this.menu().template(), this.vcr));\n this.isOpen.set(true);\n this.closedSub = this.menu().closed.subscribe(() => this.close());\n // Focus the first item once the projected content has rendered.\n setTimeout(() => this.menu().focusFirst());\n }\n\n private close(): void {\n if (!this.isOpen()) return;\n this.closedSub?.unsubscribe();\n this.overlayRef?.detach();\n this.isOpen.set(false);\n this.el.nativeElement.focus();\n }\n\n private ensureOverlay(): OverlayRef {\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.el)\n .withPositions(BPX_DROPDOWN_POSITIONS),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n // Transparent backdrop captures the outside click (incl. the trigger),\n // so there's no click-through re-open race.\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n this.overlayRef.backdropClick().subscribe(() => this.close());\n }\n return this.overlayRef;\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n} from '@angular/core';\nimport { Button } from '../button/button';\nimport { BpxColor, BpxSize, BpxVariant } from '../core/types';\nimport { Icon } from '../icon/icon';\nimport { Menu } from '../menu/menu';\nimport { MenuTrigger } from '../menu/menu-trigger';\n\n/**\n * A primary action button joined to a dropdown toggle that opens a `<bpx-menu>`\n * of secondary actions. The main button emits `action`; the caret opens the menu.\n *\n * ```html\n * <bpx-split-button [menu]=\"menu\" (action)=\"save()\">Save</bpx-split-button>\n * <bpx-menu #menu>\n * <bpx-menu-item (select)=\"saveAsDraft()\">Save as draft</bpx-menu-item>\n * <bpx-menu-item (select)=\"saveAndClose()\">Save and close</bpx-menu-item>\n * </bpx-menu>\n * ```\n */\n@Component({\n selector: 'bpx-split-button',\n exportAs: 'bpxSplitButton',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Button, Icon, MenuTrigger],\n template: `\n <button\n bpx-button\n class=\"bpx-split-button__main\"\n [color]=\"color()\"\n [variant]=\"variant()\"\n [size]=\"size()\"\n [disabled]=\"disabled()\"\n [loading]=\"loading()\"\n (click)=\"action.emit($event)\"\n >\n <ng-content />\n </button>\n\n <button\n bpx-button\n iconOnly\n class=\"bpx-split-button__toggle\"\n [color]=\"color()\"\n [variant]=\"variant()\"\n [size]=\"size()\"\n [disabled]=\"disabled()\"\n [bpxMenuTriggerFor]=\"menu()\"\n aria-label=\"More actions\"\n >\n <bpx-icon name=\"chevron-down\" size=\"sm\" />\n </button>\n `,\n styleUrl: './split-button.scss',\n host: { class: 'bpx-split-button' },\n})\nexport class SplitButton {\n /** The menu opened by the dropdown toggle. */\n readonly menu = input.required<Menu>();\n readonly color = input<BpxColor>('primary');\n readonly variant = input<BpxVariant>('solid');\n readonly size = input<BpxSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly loading = input(false, { transform: booleanAttribute });\n\n /** Fires when the main (primary) button is clicked. */\n readonly action = output<MouseEvent>();\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n inject,\n input,\n output,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\nimport { Button } from '../button/button';\nimport { BpxColor, BpxSize, BpxVariant } from '../core/types';\nimport { Icon } from '../icon/icon';\n\n/**\n * A button that copies text to the clipboard and briefly confirms with a check.\n *\n * ```html\n * <bpx-copy-button [value]=\"apiKey\" />\n * <bpx-copy-button [value]=\"url\" variant=\"soft\" copiedLabel=\"Copied link\" />\n * ```\n */\n@Component({\n selector: 'bpx-copy-button',\n exportAs: 'bpxCopyButton',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Button, Icon],\n template: `\n <button\n bpx-button\n [color]=\"copied() ? 'success' : color()\"\n [variant]=\"variant()\"\n [size]=\"size()\"\n [iconOnly]=\"!showLabel()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"showLabel() ? null : copied() ? copiedLabel() : label()\"\n (click)=\"copy()\"\n >\n <bpx-icon [name]=\"copied() ? 'check' : 'copy'\" size=\"sm\" />\n @if (showLabel()) {\n <span>{{ copied() ? copiedLabel() : label() }}</span>\n }\n </button>\n `,\n host: { class: 'bpx-copy-button' },\n})\nexport class CopyButton {\n /** The text to copy. */\n readonly value = input('');\n /** Idle label. */\n readonly label = input('Copy');\n /** Label shown briefly after a successful copy. */\n readonly copiedLabel = input('Copied');\n /** Show the text label beside the icon. When off, renders icon-only. */\n readonly showLabel = input(true, { transform: booleanAttribute });\n readonly color = input<BpxColor>('neutral');\n readonly variant = input<BpxVariant>('outline');\n readonly size = input<BpxSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Fires with the copied text on success. */\n readonly copied$ = output<string>({ alias: 'copied' });\n\n protected readonly copied = signal(false);\n\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly doc = inject(DOCUMENT);\n private timer?: ReturnType<typeof setTimeout>;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => clearTimeout(this.timer));\n }\n\n protected async copy(): Promise<void> {\n if (!this.isBrowser) return;\n const text = this.value();\n try {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n } else {\n this.fallbackCopy(text);\n }\n this.flash();\n } catch {\n // Clipboard denied (e.g. insecure context without a user gesture) — no-op.\n }\n }\n\n private flash(): void {\n this.copied.set(true);\n this.copied$.emit(this.value());\n clearTimeout(this.timer);\n this.timer = setTimeout(() => this.copied.set(false), 1500);\n }\n\n /** Last-resort copy for browsers without the async Clipboard API. */\n private fallbackCopy(text: string): void {\n const ta = this.doc.createElement('textarea');\n ta.value = text;\n ta.style.position = 'fixed';\n ta.style.opacity = '0';\n this.doc.body.appendChild(ta);\n ta.select();\n this.doc.execCommand('copy');\n this.doc.body.removeChild(ta);\n }\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { BpxColor, BpxTone } from '../core/types';\n\n/**\n * A small status/label badge.\n *\n * ```html\n * <bpx-badge color=\"success\">Active</bpx-badge>\n * <bpx-badge color=\"danger\" tone=\"solid\" dot>Live</bpx-badge>\n * ```\n */\n@Component({\n selector: 'bpx-badge',\n exportAs: 'bpxBadge',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (dot()) {\n <span class=\"bpx-badge__dot\" aria-hidden=\"true\"></span>\n }\n <ng-content />\n `,\n styleUrl: './badge.scss',\n host: {\n class: 'bpx-badge',\n '[attr.data-color]': 'color()',\n '[attr.data-tone]': 'tone()',\n '[class.bpx-badge--sm]': \"size() === 'sm'\",\n '[class.bpx-badge--lg]': \"size() === 'lg'\",\n '[class.bpx-badge--pill]': 'pill()',\n },\n})\nexport class Badge {\n /** Semantic color role. */\n readonly color = input<BpxColor>('primary');\n /** Fill style. */\n readonly tone = input<BpxTone>('soft');\n /** Size. */\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n /** Fully rounded (pill) shape. */\n readonly pill = input(false, { transform: booleanAttribute });\n /** Show a leading status dot. */\n readonly dot = input(false, { transform: booleanAttribute });\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { BpxSize } from '../core/types';\n\n/**\n * An indeterminate loading spinner.\n *\n * ```html\n * <bpx-spinner />\n * <bpx-spinner size=\"lg\" label=\"Loading results\" />\n * ```\n */\n@Component({\n selector: 'bpx-spinner',\n exportAs: 'bpxSpinner',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<span class=\"bpx-spinner__ring\"></span>`,\n styleUrl: './spinner.scss',\n host: {\n class: 'bpx-spinner',\n role: 'status',\n '[attr.data-size]': 'size()',\n '[attr.aria-label]': 'label()',\n },\n})\nexport class Spinner {\n /** Size of the spinner. */\n readonly size = input<BpxSize>('md');\n /** Accessible label announced to screen readers. */\n readonly label = input('Loading');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n numberAttribute,\n} from '@angular/core';\n\n/** Placeholder shape. */\nexport type BpxSkeletonVariant = 'text' | 'rect' | 'circle';\n/** How the placeholder animates while content loads. */\nexport type BpxSkeletonAnimation = 'pulse' | 'wave' | 'none';\n\n/**\n * A content-shaped loading placeholder. Render it in the same layout slot as the\n * real content so the page doesn't jump when data arrives.\n *\n * ```html\n * <bpx-skeleton variant=\"circle\" width=\"40\" />\n * <bpx-skeleton [lines]=\"3\" />\n * <bpx-skeleton variant=\"rect\" height=\"160\" animation=\"wave\" />\n * ```\n */\n@Component({\n selector: 'bpx-skeleton',\n exportAs: 'bpxSkeleton',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (variant() === 'text') {\n @for (line of lineArray(); track $index) {\n <span\n class=\"bpx-skeleton__bone\"\n [style.width]=\"lineWidth($index)\"\n [style.height]=\"height() ? cssSize(height()) : null\"\n ></span>\n }\n } @else if (variant() === 'circle') {\n <span\n class=\"bpx-skeleton__bone bpx-skeleton__bone--circle\"\n [style.width]=\"circleSize()\"\n [style.height]=\"circleSize()\"\n ></span>\n } @else {\n <span\n class=\"bpx-skeleton__bone bpx-skeleton__bone--rect\"\n [style.width]=\"cssSize(width()) ?? '100%'\"\n [style.height]=\"cssSize(height()) ?? '1.25rem'\"\n ></span>\n }\n `,\n styleUrl: './skeleton.scss',\n host: {\n class: 'bpx-skeleton',\n '[attr.data-variant]': 'variant()',\n '[attr.data-animation]': 'animation()',\n // Decorative by default; becomes an announced live region when `label` is set.\n '[attr.aria-hidden]': \"label() ? null : 'true'\",\n '[attr.role]': \"label() ? 'status' : null\",\n '[attr.aria-label]': 'label() || null',\n '[attr.aria-busy]': \"label() ? 'true' : null\",\n },\n})\nexport class Skeleton {\n /** Placeholder shape. */\n readonly variant = input<BpxSkeletonVariant>('text');\n /** CSS width. A bare number is treated as pixels. */\n readonly width = input<string | number | null>(null);\n /** CSS height. A bare number is treated as pixels. */\n readonly height = input<string | number | null>(null);\n /** Number of lines to render for the `text` variant. */\n readonly lines = input(1, { transform: numberAttribute });\n /** Animation style. Automatically disabled under `prefers-reduced-motion`. */\n readonly animation = input<BpxSkeletonAnimation>('pulse');\n /** Accessible label. When set, the skeleton announces itself as a busy status. */\n readonly label = input('');\n\n protected readonly lineArray = computed(() => Array.from({ length: Math.max(1, this.lines()) }));\n\n protected readonly circleSize = computed(\n () => this.cssSize(this.width()) ?? this.cssSize(this.height()) ?? '2.5rem',\n );\n\n /** Per-line width: honor an explicit width, else make the last line shorter. */\n protected lineWidth(index: number): string {\n const explicit = this.cssSize(this.width());\n if (explicit) return explicit;\n const count = this.lineArray().length;\n return count > 1 && index === count - 1 ? '60%' : '100%';\n }\n\n /**\n * Normalize a width/height input to a CSS length. Numbers and bare numeric\n * strings (e.g. `56` or `\"56\"` from a template attribute) become px; values\n * that already carry a unit (`\"50%\"`, `\"3rem\"`) pass through unchanged.\n */\n protected cssSize(value: string | number | null): string | null {\n if (value === null || value === '') return null;\n if (typeof value === 'number') return `${value}px`;\n const trimmed = value.trim();\n return /^\\d+(\\.\\d+)?$/.test(trimmed) ? `${trimmed}px` : trimmed;\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n numberAttribute,\n} from '@angular/core';\nimport { BpxSkeletonAnimation, Skeleton } from './skeleton';\n\n/** A ready-made loading layout that mirrors a common UI shape. */\nexport type BpxSkeletonPreset = 'list' | 'card' | 'article' | 'table' | 'form';\n\n/**\n * Ready-made skeleton layouts for common UI shapes — a profile list, a card\n * grid, an article, a table or a form — composed from `bpx-skeleton` primitives.\n * Drop one in place of the content that's loading.\n *\n * ```html\n * <bpx-skeleton-layout preset=\"list\" [count]=\"5\" />\n * <bpx-skeleton-layout preset=\"card\" [count]=\"3\" animation=\"wave\" />\n * <bpx-skeleton-layout preset=\"table\" [count]=\"6\" [columns]=\"4\" />\n * ```\n */\n@Component({\n selector: 'bpx-skeleton-layout',\n exportAs: 'bpxSkeletonLayout',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Skeleton],\n templateUrl: './skeleton-layout.html',\n styleUrl: './skeleton-layout.scss',\n host: {\n class: 'bpx-skeleton-layout',\n '[attr.data-preset]': 'preset()',\n role: 'status',\n 'aria-busy': 'true',\n '[attr.aria-label]': 'label()',\n },\n})\nexport class SkeletonLayout {\n /** Which layout to render. */\n readonly preset = input<BpxSkeletonPreset>('list');\n /**\n * How many repeated units to render (rows for `list`/`table`/`form`, cards for\n * `card`, paragraph lines for `article`). `0` uses a sensible per-preset default.\n */\n readonly count = input(0, { transform: numberAttribute });\n /** Number of columns for the `table` preset. */\n readonly columns = input(4, { transform: numberAttribute });\n /** Show the leading avatar circle in the `list` preset. */\n readonly avatar = input(true, { transform: (v: unknown) => v !== false && v !== 'false' });\n /** Animation forwarded to every bone. Pauses under `prefers-reduced-motion`. */\n readonly animation = input<BpxSkeletonAnimation>('pulse');\n /** Accessible label announced while loading. */\n readonly label = input('Loading');\n\n private readonly defaultCount = computed(() => {\n switch (this.preset()) {\n case 'list':\n return 3;\n case 'card':\n return 1;\n case 'article':\n return 5;\n case 'table':\n return 5;\n case 'form':\n return 3;\n }\n });\n\n private readonly resolvedCount = computed(() => this.count() || this.defaultCount());\n\n /** Array to iterate the repeated units in the template. */\n protected readonly items = computed(() => Array.from({ length: this.resolvedCount() }));\n /** Array to iterate table columns in the template. */\n protected readonly cols = computed(() => Array.from({ length: Math.max(1, this.columns()) }));\n}\n","@switch (preset()) {\n @case ('list') {\n @for (row of items(); track $index) {\n <div class=\"bpx-skeleton-layout__row\">\n @if (avatar()) {\n <bpx-skeleton variant=\"circle\" width=\"40\" [animation]=\"animation()\" />\n }\n <div class=\"bpx-skeleton-layout__lines\">\n <bpx-skeleton width=\"35%\" [animation]=\"animation()\" />\n <bpx-skeleton width=\"65%\" [animation]=\"animation()\" />\n </div>\n </div>\n }\n }\n\n @case ('card') {\n <div class=\"bpx-skeleton-layout__cards\">\n @for (card of items(); track $index) {\n <div class=\"bpx-skeleton-layout__card\">\n <bpx-skeleton variant=\"rect\" height=\"150\" [animation]=\"animation()\" />\n <bpx-skeleton width=\"60%\" [animation]=\"animation()\" />\n <bpx-skeleton [lines]=\"2\" [animation]=\"animation()\" />\n </div>\n }\n </div>\n }\n\n @case ('article') {\n <div class=\"bpx-skeleton-layout__article\">\n <bpx-skeleton variant=\"rect\" width=\"55%\" height=\"1.6rem\" [animation]=\"animation()\" />\n <bpx-skeleton [lines]=\"items().length\" [animation]=\"animation()\" />\n </div>\n }\n\n @case ('table') {\n <div class=\"bpx-skeleton-layout__table\" [style.--cols]=\"cols().length\">\n <div class=\"bpx-skeleton-layout__tr bpx-skeleton-layout__tr--head\">\n @for (col of cols(); track $index) {\n <bpx-skeleton width=\"60%\" [animation]=\"animation()\" />\n }\n </div>\n @for (row of items(); track $index) {\n <div class=\"bpx-skeleton-layout__tr\">\n @for (col of cols(); track $index) {\n <bpx-skeleton [animation]=\"animation()\" />\n }\n </div>\n }\n </div>\n }\n\n @case ('form') {\n <div class=\"bpx-skeleton-layout__form\">\n @for (field of items(); track $index) {\n <div class=\"bpx-skeleton-layout__field\">\n <bpx-skeleton width=\"30%\" height=\"0.7rem\" [animation]=\"animation()\" />\n <bpx-skeleton variant=\"rect\" height=\"40px\" [animation]=\"animation()\" />\n </div>\n }\n </div>\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, signal } from '@angular/core';\n\nexport type BpxAvatarSize = 'sm' | 'md' | 'lg' | 'xl';\nexport type BpxAvatarStatus = 'online' | 'offline' | 'busy' | 'away';\n\n/**\n * A user avatar. Shows an image when `src` loads, otherwise falls back to\n * initials on a gradient derived from the name (so every user looks distinct).\n *\n * ```html\n * <bpx-avatar name=\"Ada Lovelace\" />\n * <bpx-avatar src=\"/me.jpg\" name=\"Me\" size=\"lg\" status=\"online\" />\n * ```\n */\n@Component({\n selector: 'bpx-avatar',\n exportAs: 'bpxAvatar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './avatar.html',\n styleUrl: './avatar.scss',\n host: {\n class: 'bpx-avatar',\n '[attr.data-size]': 'size()',\n '[attr.data-shape]': 'shape()',\n '[attr.role]': \"'img'\",\n '[attr.aria-label]': 'name() || null',\n '[style.--_bg]': 'gradient()',\n },\n})\nexport class Avatar {\n readonly src = input<string>();\n readonly name = input<string>('');\n readonly size = input<BpxAvatarSize>('md');\n readonly shape = input<'circle' | 'rounded'>('circle');\n readonly status = input<BpxAvatarStatus>();\n\n /** Flips to true if the image fails to load, so we fall back to initials. */\n protected readonly imgFailed = signal(false);\n\n protected readonly showImage = computed(() => !!this.src() && !this.imgFailed());\n\n protected readonly initials = computed(() => {\n const parts = this.name().trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return '?';\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n });\n\n /** Deterministic gradient from the name so avatars are visually distinct. */\n protected readonly gradient = computed(() => {\n const name = this.name() || '?';\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = (hash << 5) - hash + name.charCodeAt(i);\n hash |= 0;\n }\n const h = Math.abs(hash) % 360;\n return `linear-gradient(135deg, hsl(${h} 70% 55%), hsl(${(h + 40) % 360} 70% 45%))`;\n });\n}\n","@if (showImage()) {\n <img [src]=\"src()\" [alt]=\"name()\" (error)=\"imgFailed.set(true)\" />\n} @else {\n <span class=\"bpx-avatar__initials\" aria-hidden=\"true\">{{ initials() }}</span>\n}\n@if (status(); as s) {\n <span class=\"bpx-avatar__status\" [attr.data-status]=\"s\" [attr.title]=\"s\"></span>\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n} from '@angular/core';\nimport { BpxColor, BpxTone } from '../core/types';\n\n/**\n * A compact chip / tag. Can be static, selectable (toggle) or removable.\n *\n * ```html\n * <bpx-chip>Design</bpx-chip>\n * <bpx-chip removable (removed)=\"drop(t)\">{{ t }}</bpx-chip>\n * <bpx-chip selectable [selected]=\"on()\" (click)=\"on.set(!on())\">Filter</bpx-chip>\n * ```\n */\n@Component({\n selector: 'bpx-chip',\n exportAs: 'bpxChip',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './chip.html',\n styleUrl: './chip.scss',\n host: {\n class: 'bpx-chip',\n '[attr.data-color]': 'color()',\n '[attr.data-tone]': 'tone()',\n '[attr.data-size]': 'size()',\n '[class.bpx-chip--selected]': 'selected()',\n '[class.bpx-chip--disabled]': 'disabled()',\n '[class.bpx-chip--selectable]': 'selectable()',\n '[attr.role]': \"selectable() ? 'button' : null\",\n '[attr.tabindex]': 'selectable() && !disabled() ? 0 : null',\n '[attr.aria-pressed]': 'selectable() ? selected() : null',\n '[attr.aria-disabled]': 'disabled() || null',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class Chip {\n readonly color = input<BpxColor>('neutral');\n readonly tone = input<BpxTone>('soft');\n readonly size = input<'sm' | 'md'>('md');\n /** Shows a remove (×) button. */\n readonly removable = input(false, { transform: booleanAttribute });\n /** Marks the chip selectable (adds button semantics + keyboard). */\n readonly selectable = input(false, { transform: booleanAttribute });\n /** Selected/active state (visual + aria-pressed). */\n readonly selected = input(false, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Emitted when the remove button is activated. */\n readonly removed = output<void>();\n\n protected onKeydown(event: KeyboardEvent): void {\n if (this.selectable() && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n (event.target as HTMLElement).click();\n }\n }\n\n protected remove(event: Event): void {\n event.stopPropagation();\n if (!this.disabled()) {\n this.removed.emit();\n }\n }\n}\n","<span class=\"bpx-chip__label\"><ng-content /></span>\n@if (removable()) {\n <button\n type=\"button\"\n class=\"bpx-chip__remove\"\n aria-label=\"Remove\"\n [disabled]=\"disabled()\"\n (click)=\"remove($event)\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" aria-hidden=\"true\">\n <path\n d=\"M18 6 6 18M6 6l12 12\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/**\n * Layout container that groups related chips with consistent spacing and\n * wrapping (or horizontal scrolling). Provides `role=\"group\"` for a11y.\n *\n * ```html\n * <bpx-chip-set label=\"Tags\">\n * <bpx-chip removable>Angular</bpx-chip>\n * <bpx-chip removable>Signals</bpx-chip>\n * </bpx-chip-set>\n * ```\n */\n@Component({\n selector: 'bpx-chip-set',\n exportAs: 'bpxChipSet',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styleUrl: './chip-set.scss',\n host: {\n class: 'bpx-chip-set',\n role: 'group',\n '[attr.aria-label]': 'label() || null',\n '[class.bpx-chip-set--scroll]': 'scrollable()',\n },\n})\nexport class ChipSet {\n /** Accessible group label. */\n readonly label = input<string>();\n /** Scroll horizontally on overflow instead of wrapping. */\n readonly scrollable = input(false, { transform: booleanAttribute });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n} from '@angular/core';\nimport { BpxColor, BpxTone } from '../core/types';\nimport { Icon } from '../icon/icon';\n\nconst DEFAULT_ICONS: Record<string, string> = {\n info: 'info',\n success: 'check',\n warning: 'warning',\n danger: 'warning',\n primary: 'info',\n neutral: 'info',\n};\n\n/**\n * A status callout / banner.\n *\n * ```html\n * <bpx-alert color=\"success\" title=\"Saved\">Your changes are live.</bpx-alert>\n * <bpx-alert color=\"danger\" dismissible (dismissed)=\"hide()\">Something broke.</bpx-alert>\n * ```\n */\n@Component({\n selector: 'bpx-alert',\n exportAs: 'bpxAlert',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Icon],\n templateUrl: './alert.html',\n styleUrl: './alert.scss',\n host: {\n class: 'bpx-alert',\n role: 'alert',\n '[attr.data-color]': 'color()',\n '[attr.data-tone]': 'tone()',\n },\n})\nexport class Alert {\n readonly color = input<BpxColor>('info');\n readonly tone = input<BpxTone>('soft');\n readonly title = input<string>();\n /** Show a leading status icon (auto-selected from color, or override). */\n readonly icon = input<string>();\n readonly dismissible = input(false, { transform: booleanAttribute });\n\n readonly dismissed = output<void>();\n\n protected readonly resolvedIcon = computed(() => this.icon() ?? DEFAULT_ICONS[this.color()] ?? 'info');\n}\n","<bpx-icon class=\"bpx-alert__icon\" [name]=\"resolvedIcon()\" />\n\n<div class=\"bpx-alert__body\">\n @if (title(); as t) {\n <div class=\"bpx-alert__title\">{{ t }}</div>\n }\n <div class=\"bpx-alert__content\"><ng-content /></div>\n</div>\n\n@if (dismissible()) {\n <button type=\"button\" class=\"bpx-alert__close\" aria-label=\"Dismiss\" (click)=\"dismissed.emit()\">\n <bpx-icon name=\"close\" />\n </button>\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { uniqueId } from '../core/id';\nimport { BPX_DROPDOWN_POSITIONS } from '../core/overlay';\nimport { BpxOption, BpxSize } from '../core/types';\nimport { Icon } from '../icon/icon';\n\n/**\n * A single-select dropdown built on the CDK overlay. Data-driven via `options`,\n * two-way bound with `[(value)]`. Fully keyboard operable with listbox ARIA.\n *\n * ```html\n * <bpx-select [options]=\"fruits\" [(value)]=\"fruit\" placeholder=\"Pick one\" />\n * ```\n */\n@Component({\n selector: 'bpx-select',\n exportAs: 'bpxSelect',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [OverlayModule, Icon],\n templateUrl: './select.html',\n styleUrl: './select.scss',\n host: { class: 'bpx-select', '[attr.data-size]': 'size()' },\n})\nexport class Select<T> {\n readonly options = input<BpxOption<T>[]>([]);\n readonly value = model<T | null>(null);\n readonly placeholder = input('Select…');\n readonly size = input<BpxSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly clearable = input(false, { transform: booleanAttribute });\n\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(-1);\n protected readonly triggerWidth = signal(0);\n protected readonly positions = BPX_DROPDOWN_POSITIONS;\n\n private readonly baseId = uniqueId('bpx-select');\n protected readonly listId = `${this.baseId}-list`;\n\n protected readonly selectedOption = computed(\n () => this.options().find((o) => o.value === this.value()) ?? null,\n );\n\n protected optionId(i: number): string {\n return `${this.baseId}-opt-${i}`;\n }\n\n protected onTriggerClick(el: HTMLElement): void {\n this.open() ? this.close() : this.openPanel(el);\n }\n\n protected openPanel(el?: HTMLElement): void {\n if (this.disabled()) return;\n if (el) this.triggerWidth.set(el.offsetWidth);\n const current = this.options().findIndex((o) => o.value === this.value());\n this.activeIndex.set(current >= 0 ? current : this.firstEnabled());\n this.open.set(true);\n }\n\n protected close(): void {\n this.open.set(false);\n }\n\n protected select(opt: BpxOption<T>): void {\n if (opt.disabled) return;\n this.value.set(opt.value);\n this.close();\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.value.set(null);\n }\n\n protected onTriggerKeydown(event: KeyboardEvent, el: HTMLElement): void {\n const key = event.key;\n if (!this.open()) {\n if (key === 'Enter' || key === ' ' || key === 'ArrowDown' || key === 'ArrowUp') {\n event.preventDefault();\n this.openPanel(el);\n }\n return;\n }\n switch (key) {\n case 'ArrowDown':\n event.preventDefault();\n this.move(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.move(-1);\n break;\n case 'Home':\n event.preventDefault();\n this.activeIndex.set(this.firstEnabled());\n break;\n case 'End':\n event.preventDefault();\n this.activeIndex.set(this.lastEnabled());\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n const opt = this.options()[this.activeIndex()];\n if (opt) this.select(opt);\n break;\n }\n case 'Escape':\n case 'Tab':\n this.close();\n break;\n }\n }\n\n private move(delta: number): void {\n const opts = this.options();\n if (!opts.length) return;\n let i = this.activeIndex();\n for (let step = 0; step < opts.length; step++) {\n i = (i + delta + opts.length) % opts.length;\n if (!opts[i].disabled) {\n this.activeIndex.set(i);\n return;\n }\n }\n }\n\n private firstEnabled(): number {\n return this.options().findIndex((o) => !o.disabled);\n }\n private lastEnabled(): number {\n const opts = this.options();\n for (let i = opts.length - 1; i >= 0; i--) if (!opts[i].disabled) return i;\n return -1;\n }\n}\n","<button\n #trigger\n type=\"button\"\n class=\"bpx-select__trigger\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-activedescendant]=\"open() && activeIndex() >= 0 ? optionId(activeIndex()) : null\"\n [disabled]=\"disabled()\"\n [class.open]=\"open()\"\n (click)=\"onTriggerClick(trigger)\"\n (keydown)=\"onTriggerKeydown($event, trigger)\"\n>\n <span class=\"bpx-select__value\" [class.placeholder]=\"!selectedOption()\">\n {{ selectedOption()?.label ?? placeholder() }}\n </span>\n\n @if (clearable() && selectedOption()) {\n <span class=\"bpx-select__clear\" role=\"button\" aria-label=\"Clear selection\" (click)=\"clear($event)\">\n <bpx-icon name=\"close\" size=\"sm\" />\n </span>\n }\n <bpx-icon class=\"bpx-select__chevron\" name=\"chevron-down\" size=\"sm\" />\n</button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayWidth]=\"triggerWidth()\"\n (overlayOutsideClick)=\"close()\"\n (detach)=\"close()\"\n>\n <ul class=\"bpx-select__panel\" role=\"listbox\" [id]=\"listId\">\n @for (opt of options(); track opt.value; let i = $index) {\n <li\n [id]=\"optionId(i)\"\n class=\"bpx-select__option\"\n role=\"option\"\n [class.active]=\"i === activeIndex()\"\n [class.selected]=\"opt.value === value()\"\n [class.disabled]=\"opt.disabled\"\n [attr.aria-selected]=\"opt.value === value()\"\n [attr.aria-disabled]=\"opt.disabled || null\"\n (click)=\"select(opt)\"\n (mouseenter)=\"activeIndex.set(i)\"\n >\n @if (opt.icon) {\n <bpx-icon [name]=\"opt.icon\" size=\"sm\" />\n }\n <span class=\"bpx-select__option-label\">{{ opt.label }}</span>\n @if (opt.value === value()) {\n <bpx-icon class=\"bpx-select__check\" name=\"check\" size=\"sm\" />\n }\n </li>\n } @empty {\n <li class=\"bpx-select__empty\">No options</li>\n }\n </ul>\n</ng-template>\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { uniqueId } from '../core/id';\nimport { BPX_DROPDOWN_POSITIONS } from '../core/overlay';\nimport { BpxOption, BpxSize } from '../core/types';\nimport { Chip } from '../chip/chip';\nimport { Icon } from '../icon/icon';\n\n/**\n * A multiple-select dropdown. Selected values show as removable chips in the\n * trigger; the panel stays open while toggling options.\n *\n * ```html\n * <bpx-multi-select [options]=\"skills\" [(value)]=\"selected\" placeholder=\"Skills\" />\n * ```\n */\n@Component({\n selector: 'bpx-multi-select',\n exportAs: 'bpxMultiSelect',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [OverlayModule, Icon, Chip],\n templateUrl: './multi-select.html',\n styleUrl: './multi-select.scss',\n host: { class: 'bpx-multi-select', '[attr.data-size]': 'size()' },\n})\nexport class MultiSelect<T> {\n readonly options = input<BpxOption<T>[]>([]);\n readonly value = model<T[]>([]);\n readonly placeholder = input('Select…');\n readonly size = input<BpxSize>('md');\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Max chips to show in the trigger before collapsing to \"+N\". */\n readonly maxDisplay = input(3);\n\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(-1);\n protected readonly triggerWidth = signal(0);\n protected readonly positions = BPX_DROPDOWN_POSITIONS;\n\n private readonly baseId = uniqueId('bpx-multiselect');\n protected readonly listId = `${this.baseId}-list`;\n\n protected readonly selectedOptions = computed(() => {\n const v = this.value();\n return this.options().filter((o) => v.includes(o.value));\n });\n protected readonly visibleChips = computed(() => this.selectedOptions().slice(0, this.maxDisplay()));\n protected readonly overflowCount = computed(() =>\n Math.max(0, this.selectedOptions().length - this.maxDisplay()),\n );\n\n protected isSelected(opt: BpxOption<T>): boolean {\n return this.value().includes(opt.value);\n }\n\n protected optionId(i: number): string {\n return `${this.baseId}-opt-${i}`;\n }\n\n protected onTriggerClick(el: HTMLElement): void {\n this.open() ? this.close() : this.openPanel(el);\n }\n\n protected openPanel(el?: HTMLElement): void {\n if (this.disabled()) return;\n if (el) this.triggerWidth.set(el.offsetWidth);\n if (this.activeIndex() < 0) this.activeIndex.set(this.options().findIndex((o) => !o.disabled));\n this.open.set(true);\n }\n\n protected close(): void {\n this.open.set(false);\n }\n\n protected toggle(opt: BpxOption<T>): void {\n if (opt.disabled) return;\n const v = this.value();\n this.value.set(v.includes(opt.value) ? v.filter((x) => x !== opt.value) : [...v, opt.value]);\n }\n\n protected removeValue(value: T, event?: Event): void {\n event?.stopPropagation();\n this.value.set(this.value().filter((x) => x !== value));\n }\n\n protected clearAll(event: Event): void {\n event.stopPropagation();\n this.value.set([]);\n }\n\n protected onTriggerKeydown(event: KeyboardEvent, el: HTMLElement): void {\n const key = event.key;\n if (!this.open()) {\n if (key === 'Enter' || key === ' ' || key === 'ArrowDown' || key === 'ArrowUp') {\n event.preventDefault();\n this.openPanel(el);\n }\n return;\n }\n switch (key) {\n case 'ArrowDown':\n event.preventDefault();\n this.move(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.move(-1);\n break;\n case 'Enter':\n case ' ': {\n event.preventDefault();\n const opt = this.options()[this.activeIndex()];\n if (opt) this.toggle(opt);\n break;\n }\n case 'Escape':\n case 'Tab':\n this.close();\n break;\n }\n }\n\n private move(delta: number): void {\n const opts = this.options();\n if (!opts.length) return;\n let i = this.activeIndex();\n for (let step = 0; step < opts.length; step++) {\n i = (i + delta + opts.length) % opts.length;\n if (!opts[i].disabled) {\n this.activeIndex.set(i);\n return;\n }\n }\n }\n}\n","<button\n #trigger\n type=\"button\"\n class=\"bpx-ms__trigger\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-expanded]=\"open()\"\n [disabled]=\"disabled()\"\n [class.open]=\"open()\"\n (click)=\"onTriggerClick(trigger)\"\n (keydown)=\"onTriggerKeydown($event, trigger)\"\n>\n <span class=\"bpx-ms__content\">\n @if (selectedOptions().length === 0) {\n <span class=\"bpx-ms__placeholder\">{{ placeholder() }}</span>\n } @else {\n @for (opt of visibleChips(); track opt.value) {\n <bpx-chip size=\"sm\" color=\"primary\" removable (removed)=\"removeValue(opt.value)\">\n {{ opt.label }}\n </bpx-chip>\n }\n @if (overflowCount() > 0) {\n <span class=\"bpx-ms__more\">+{{ overflowCount() }}</span>\n }\n }\n </span>\n\n @if (selectedOptions().length > 0) {\n <span class=\"bpx-ms__clear\" role=\"button\" aria-label=\"Clear all\" (click)=\"clearAll($event)\">\n <bpx-icon name=\"close\" size=\"sm\" />\n </span>\n }\n <bpx-icon class=\"bpx-ms__chevron\" name=\"chevron-down\" size=\"sm\" />\n</button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayWidth]=\"triggerWidth()\"\n (overlayOutsideClick)=\"close()\"\n (detach)=\"close()\"\n>\n <ul class=\"bpx-ms__panel\" role=\"listbox\" aria-multiselectable=\"true\" [id]=\"listId\">\n @for (opt of options(); track opt.value; let i = $index) {\n <li\n [id]=\"optionId(i)\"\n class=\"bpx-ms__option\"\n role=\"option\"\n [class.active]=\"i === activeIndex()\"\n [class.selected]=\"isSelected(opt)\"\n [class.disabled]=\"opt.disabled\"\n [attr.aria-selected]=\"isSelected(opt)\"\n [attr.aria-disabled]=\"opt.disabled || null\"\n (click)=\"toggle(opt)\"\n (mouseenter)=\"activeIndex.set(i)\"\n >\n <span class=\"bpx-ms__check\" [class.on]=\"isSelected(opt)\" aria-hidden=\"true\">\n @if (isSelected(opt)) {\n <bpx-icon name=\"check\" size=\"sm\" />\n }\n </span>\n @if (opt.icon) {\n <bpx-icon [name]=\"opt.icon\" size=\"sm\" />\n }\n <span class=\"bpx-ms__option-label\">{{ opt.label }}</span>\n </li>\n } @empty {\n <li class=\"bpx-ms__empty\">No options</li>\n }\n </ul>\n</ng-template>\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n forwardRef,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { uniqueId } from '../core/id';\nimport { BPX_DROPDOWN_POSITIONS } from '../core/overlay';\nimport { BpxOption, BpxSize } from '../core/types';\nimport { Icon } from '../icon/icon';\n\n/**\n * A single-select autocomplete: a text field that filters a list of options as\n * you type, on the CDK overlay. Works standalone with `[(value)]` and as a form\n * control via `formControlName` / `[(ngModel)]`. Fully keyboard operable with\n * combobox/listbox ARIA.\n *\n * ```html\n * <bpx-combobox [options]=\"countries\" [(value)]=\"country\" placeholder=\"Search…\" />\n * <bpx-combobox formControlName=\"assignee\" [options]=\"people\" clearable />\n * ```\n */\n@Component({\n selector: 'bpx-combobox',\n exportAs: 'bpxCombobox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [OverlayModule, Icon],\n templateUrl: './combobox.html',\n styleUrl: './combobox.scss',\n host: {\n class: 'bpx-combobox',\n '[attr.data-size]': 'size()',\n '[class.bpx-combobox--invalid]': 'invalid()',\n '[class.bpx-combobox--disabled]': 'disabled()',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Combobox), multi: true },\n ],\n})\nexport class Combobox<T> implements ControlValueAccessor {\n readonly options = input<BpxOption<T>[]>([]);\n /** The selected value. Two-way bindable via `[(value)]`. */\n readonly value = model<T | null>(null);\n readonly placeholder = input('Search…');\n readonly size = input<BpxSize>('md');\n readonly clearable = input(false, { transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Text shown in the panel when the filter matches nothing. */\n readonly noResultsText = input('No results');\n\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n private readonly cvaDisabled = signal(false);\n protected readonly disabled = computed(() => this.disabledInput() || this.cvaDisabled());\n\n /** The current text in the field (the filter query). */\n protected readonly query = signal('');\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(-1);\n protected readonly triggerWidth = signal(0);\n protected readonly positions = BPX_DROPDOWN_POSITIONS;\n\n private readonly baseId = uniqueId('bpx-combobox');\n protected readonly listId = `${this.baseId}-list`;\n\n protected readonly selectedOption = computed(\n () => this.options().find((o) => o.value === this.value()) ?? null,\n );\n\n /** Options matching the query — everything when the query is empty or equals\n * the current selection's label (so re-opening shows the full list). */\n protected readonly filtered = computed<BpxOption<T>[]>(() => {\n const q = this.query().trim().toLowerCase();\n const sel = this.selectedOption();\n if (!q || (sel && q === sel.label.toLowerCase())) return this.options();\n return this.options().filter((o) => o.label.toLowerCase().includes(q));\n });\n\n private onChange: (value: T | null) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n // While closed, keep the field text in step with the selected value — covers\n // external writes and options arriving after the value.\n effect(() => {\n const label = this.selectedOption()?.label ?? '';\n if (!this.open()) this.query.set(label);\n });\n // Keep the active row valid as the filtered set changes.\n effect(() => {\n this.filtered();\n this.activeIndex.set(this.firstEnabled(this.filtered()));\n });\n }\n\n protected optionId(i: number): string {\n return `${this.baseId}-opt-${i}`;\n }\n\n protected onFocus(field: HTMLElement, input: HTMLInputElement): void {\n this.openPanel(field);\n // Highlight existing text so typing replaces the selected label.\n input.select();\n }\n\n protected openPanel(field?: HTMLElement): void {\n if (this.disabled() || this.open()) return;\n if (field) this.triggerWidth.set(field.offsetWidth);\n const opts = this.filtered();\n const selected = opts.findIndex((o) => o.value === this.value());\n this.activeIndex.set(selected >= 0 ? selected : this.firstEnabled(opts));\n this.open.set(true);\n }\n\n protected close(): void {\n if (!this.open()) return;\n this.open.set(false);\n this.onTouched();\n // The `open` effect resyncs the field text back to the selected label,\n // discarding any uncommitted typing.\n }\n\n protected onInput(event: Event): void {\n this.query.set((event.target as HTMLInputElement).value);\n if (!this.open()) this.open.set(true);\n }\n\n protected select(opt: BpxOption<T>): void {\n if (opt.disabled) return;\n this.value.set(opt.value);\n this.onChange(opt.value);\n this.query.set(opt.label);\n this.open.set(false);\n }\n\n protected clear(event: Event, input: HTMLInputElement): void {\n event.stopPropagation();\n this.value.set(null);\n this.onChange(null);\n this.query.set('');\n input.focus();\n this.openPanel();\n }\n\n protected onKeydown(event: KeyboardEvent, field: HTMLElement): void {\n const key = event.key;\n if (!this.open()) {\n if (key === 'ArrowDown' || key === 'ArrowUp') {\n event.preventDefault();\n this.openPanel(field);\n }\n return;\n }\n switch (key) {\n case 'ArrowDown':\n event.preventDefault();\n this.move(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.move(-1);\n break;\n case 'Home':\n event.preventDefault();\n this.activeIndex.set(this.firstEnabled(this.filtered()));\n break;\n case 'End':\n event.preventDefault();\n this.activeIndex.set(this.lastEnabled(this.filtered()));\n break;\n case 'Enter': {\n event.preventDefault();\n const opt = this.filtered()[this.activeIndex()];\n if (opt) this.select(opt);\n break;\n }\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n case 'Tab':\n this.close();\n break;\n }\n }\n\n private move(delta: number): void {\n const opts = this.filtered();\n if (!opts.length) return;\n let i = this.activeIndex();\n for (let step = 0; step < opts.length; step++) {\n i = (i + delta + opts.length) % opts.length;\n if (!opts[i].disabled) {\n this.activeIndex.set(i);\n return;\n }\n }\n }\n\n private firstEnabled(opts: BpxOption<T>[]): number {\n return opts.findIndex((o) => !o.disabled);\n }\n private lastEnabled(opts: BpxOption<T>[]): number {\n for (let i = opts.length - 1; i >= 0; i--) if (!opts[i].disabled) return i;\n return -1;\n }\n\n // ── ControlValueAccessor ─────────────────────────────────────\n writeValue(value: T | null): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: T | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<div\n #field\n class=\"bpx-combobox__field\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n [class.open]=\"open()\"\n>\n <bpx-icon class=\"bpx-combobox__search\" name=\"search\" size=\"sm\" />\n\n <input\n #input\n class=\"bpx-combobox__input\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-activedescendant]=\"open() && activeIndex() >= 0 ? optionId(activeIndex()) : null\"\n [attr.aria-invalid]=\"invalid() || null\"\n [value]=\"query()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n (focus)=\"onFocus(field, input)\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKeydown($event, field)\"\n />\n\n @if (clearable() && value() && !disabled()) {\n <button\n type=\"button\"\n class=\"bpx-combobox__clear\"\n aria-label=\"Clear selection\"\n (click)=\"clear($event, input)\"\n >\n <bpx-icon name=\"close\" size=\"sm\" />\n </button>\n }\n\n <bpx-icon class=\"bpx-combobox__chevron\" name=\"chevron-down\" size=\"sm\" />\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayWidth]=\"triggerWidth()\"\n (overlayOutsideClick)=\"close()\"\n (detach)=\"close()\"\n>\n <ul class=\"bpx-combobox__panel\" role=\"listbox\" [id]=\"listId\">\n @for (opt of filtered(); track opt.value; let i = $index) {\n <li\n [id]=\"optionId(i)\"\n class=\"bpx-combobox__option\"\n role=\"option\"\n [class.active]=\"i === activeIndex()\"\n [class.selected]=\"opt.value === value()\"\n [class.disabled]=\"opt.disabled\"\n [attr.aria-selected]=\"opt.value === value()\"\n [attr.aria-disabled]=\"opt.disabled || null\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"select(opt)\"\n (mouseenter)=\"activeIndex.set(i)\"\n >\n @if (opt.icon) {\n <bpx-icon [name]=\"opt.icon\" size=\"sm\" />\n }\n <span class=\"bpx-combobox__option-label\">{{ opt.label }}</span>\n @if (opt.value === value()) {\n <bpx-icon class=\"bpx-combobox__check\" name=\"check\" size=\"sm\" />\n }\n </li>\n } @empty {\n <li class=\"bpx-combobox__empty\">{{ noResultsText() }}</li>\n }\n </ul>\n</ng-template>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Icon } from '../icon/icon';\n\n/** Why a dropped/picked file was turned away. */\nexport interface BpxFileRejection {\n file: File;\n reason: 'type' | 'size' | 'count';\n}\n\n/**\n * A file dropzone: pick files with a click or drag-and-drop, with built-in\n * `accept`, size and count validation and a removable file list. Works\n * standalone with `[(files)]` and as a form control via `formControlName`.\n * Uploading itself is left to the app — bind `(filesChange)` and send them.\n *\n * ```html\n * <bpx-file-upload [(files)]=\"files\" accept=\"image/*\" multiple [maxSize]=\"5_000_000\" />\n * <bpx-file-upload formControlName=\"resume\" accept=\".pdf,.doc,.docx\" />\n * ```\n */\n@Component({\n selector: 'bpx-file-upload',\n exportAs: 'bpxFileUpload',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Icon],\n templateUrl: './file-upload.html',\n styleUrl: './file-upload.scss',\n host: {\n class: 'bpx-file-upload',\n '[class.bpx-file-upload--disabled]': 'disabled()',\n '[class.bpx-file-upload--invalid]': 'invalid()',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => FileUpload), multi: true },\n ],\n})\nexport class FileUpload implements ControlValueAccessor {\n /** The selected files. Two-way bindable via `[(files)]`. */\n readonly files = model<File[]>([]);\n /** Allow selecting more than one file. */\n readonly multiple = input(false, { transform: booleanAttribute });\n /** Native `accept` string, e.g. `\"image/*,.pdf\"`. Also enforced on drop. */\n readonly accept = input('');\n /** Reject files larger than this many bytes. `0` = no limit. */\n readonly maxSize = input(0, { transform: numberAttribute });\n /** Cap the number of files kept (multiple only). `0` = no limit. */\n readonly maxFiles = input(0, { transform: numberAttribute });\n /** Secondary hint shown under the prompt (e.g. accepted types). */\n readonly hint = input('');\n /** Error styling. */\n readonly invalid = input(false, { transform: booleanAttribute });\n\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n private readonly cvaDisabled = signal(false);\n protected readonly disabled = computed(() => this.disabledInput() || this.cvaDisabled());\n\n /** Emitted with the files turned away by validation. */\n readonly rejected = output<BpxFileRejection[]>();\n\n protected readonly dragging = signal(false);\n private dragDepth = 0;\n\n private onChange: (value: File[]) => void = () => {};\n protected onTouched: () => void = () => {};\n\n protected open(input: HTMLInputElement): void {\n if (this.disabled()) return;\n input.click();\n }\n\n protected onKeydown(event: KeyboardEvent, input: HTMLInputElement): void {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.open(input);\n }\n }\n\n protected onPicked(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files) this.addFiles(input.files);\n // Reset so re-picking the same file fires `change` again.\n input.value = '';\n }\n\n protected onDragOver(event: DragEvent): void {\n if (this.disabled()) return;\n event.preventDefault();\n }\n protected onDragEnter(event: DragEvent): void {\n if (this.disabled()) return;\n event.preventDefault();\n this.dragDepth++;\n this.dragging.set(true);\n }\n protected onDragLeave(): void {\n if (this.disabled()) return;\n this.dragDepth = Math.max(0, this.dragDepth - 1);\n if (this.dragDepth === 0) this.dragging.set(false);\n }\n protected onDrop(event: DragEvent): void {\n if (this.disabled()) return;\n event.preventDefault();\n this.dragDepth = 0;\n this.dragging.set(false);\n if (event.dataTransfer?.files) this.addFiles(event.dataTransfer.files);\n }\n\n protected remove(target: File, event: Event): void {\n event.stopPropagation();\n this.setFiles(this.files().filter((f) => f !== target));\n }\n\n private addFiles(list: FileList): void {\n const accepted: File[] = [];\n const rejected: BpxFileRejection[] = [];\n\n for (const file of Array.from(list)) {\n if (!this.matchesAccept(file)) {\n rejected.push({ file, reason: 'type' });\n } else if (this.maxSize() && file.size > this.maxSize()) {\n rejected.push({ file, reason: 'size' });\n } else {\n accepted.push(file);\n }\n }\n\n let next = this.multiple() ? [...this.files(), ...accepted] : accepted.slice(0, 1);\n next = this.dedupe(next);\n\n if (this.multiple() && this.maxFiles() && next.length > this.maxFiles()) {\n for (const file of next.slice(this.maxFiles())) rejected.push({ file, reason: 'count' });\n next = next.slice(0, this.maxFiles());\n }\n\n this.setFiles(next);\n if (rejected.length) this.rejected.emit(rejected);\n }\n\n private setFiles(next: File[]): void {\n this.files.set(next);\n this.onChange(next);\n this.onTouched();\n }\n\n /** De-duplicate by identity and by name+size+lastModified. */\n private dedupe(files: File[]): File[] {\n const seen = new Set<string>();\n const out: File[] = [];\n for (const f of files) {\n const key = `${f.name}:${f.size}:${f.lastModified}`;\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(f);\n }\n return out;\n }\n\n /** Match a file against the `accept` list (mime, mime/* wildcard, or .ext). */\n private matchesAccept(file: File): boolean {\n const accept = this.accept().trim();\n if (!accept) return true;\n const name = file.name.toLowerCase();\n const type = file.type.toLowerCase();\n return accept\n .split(',')\n .map((t) => t.trim().toLowerCase())\n .filter(Boolean)\n .some((token) => {\n if (token.startsWith('.')) return name.endsWith(token);\n if (token.endsWith('/*')) return type.startsWith(token.slice(0, -1));\n return type === token;\n });\n }\n\n /** Human-readable file size for the list. */\n protected formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n const units = ['KB', 'MB', 'GB'];\n let size = bytes / 1024;\n let unit = 0;\n while (size >= 1024 && unit < units.length - 1) {\n size /= 1024;\n unit++;\n }\n return `${size.toFixed(size < 10 ? 1 : 0)} ${units[unit]}`;\n }\n\n // ── ControlValueAccessor ─────────────────────────────────────\n writeValue(value: File[] | null): void {\n this.files.set(value ?? []);\n }\n registerOnChange(fn: (value: File[]) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<div\n class=\"bpx-file-upload__zone\"\n role=\"button\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-disabled]=\"disabled() || null\"\n [class.dragging]=\"dragging()\"\n (click)=\"open(input)\"\n (keydown)=\"onKeydown($event, input)\"\n (dragenter)=\"onDragEnter($event)\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave()\"\n (drop)=\"onDrop($event)\"\n>\n <input\n #input\n class=\"bpx-file-upload__input\"\n type=\"file\"\n [multiple]=\"multiple()\"\n [accept]=\"accept()\"\n [disabled]=\"disabled()\"\n (change)=\"onPicked($event)\"\n (blur)=\"onTouched()\"\n />\n\n <bpx-icon class=\"bpx-file-upload__icon\" name=\"upload\" />\n <p class=\"bpx-file-upload__prompt\">\n <strong>Click to upload</strong> or drag and drop\n </p>\n @if (hint()) {\n <p class=\"bpx-file-upload__hint\">{{ hint() }}</p>\n }\n</div>\n\n@if (files().length) {\n <ul class=\"bpx-file-upload__list\">\n @for (file of files(); track file.name + file.size + file.lastModified) {\n <li class=\"bpx-file-upload__file\">\n <bpx-icon class=\"bpx-file-upload__file-icon\" name=\"file\" size=\"sm\" />\n <span class=\"bpx-file-upload__file-name\">{{ file.name }}</span>\n <span class=\"bpx-file-upload__file-size\">{{ formatSize(file.size) }}</span>\n @if (!disabled()) {\n <button\n type=\"button\"\n class=\"bpx-file-upload__remove\"\n [attr.aria-label]=\"'Remove ' + file.name\"\n (click)=\"remove(file, $event)\"\n >\n <bpx-icon name=\"close\" size=\"sm\" />\n </button>\n }\n </li>\n }\n </ul>\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { BPX_DROPDOWN_POSITIONS } from '../core/overlay';\nimport { BpxOption } from '../core/types';\nimport { Badge } from '../badge/badge';\nimport { Icon } from '../icon/icon';\n\n/**\n * A compact filter control — ideal for data-table column headers. A small\n * trigger shows the label and a count of active filters; the popover offers a\n * search box and a checkbox list. Emits selections live via `[(value)]`.\n *\n * ```html\n * <bpx-filter label=\"Status\" [options]=\"statuses\" [(value)]=\"active\" />\n * ```\n */\n@Component({\n selector: 'bpx-filter',\n exportAs: 'bpxFilter',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [OverlayModule, Icon, Badge],\n templateUrl: './filter.html',\n styleUrl: './filter.scss',\n host: { class: 'bpx-filter' },\n})\nexport class Filter<T> {\n readonly label = input('Filter');\n readonly options = input<BpxOption<T>[]>([]);\n readonly value = model<T[]>([]);\n readonly searchable = input(true, { transform: booleanAttribute });\n\n protected readonly open = signal(false);\n protected readonly search = signal('');\n protected readonly activeIndex = signal(0);\n protected readonly positions = BPX_DROPDOWN_POSITIONS;\n\n private readonly searchInput = viewChild<ElementRef<HTMLInputElement>>('searchInput');\n\n protected readonly count = computed(() => this.value().length);\n\n protected readonly filtered = computed(() => {\n const q = this.search().trim().toLowerCase();\n const opts = this.options();\n return q ? opts.filter((o) => o.label.toLowerCase().includes(q)) : opts;\n });\n\n protected isSelected(opt: BpxOption<T>): boolean {\n return this.value().includes(opt.value);\n }\n\n protected toggle(): void {\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n this.search.set('');\n this.activeIndex.set(0);\n this.open.set(true);\n }\n\n protected close(): void {\n this.open.set(false);\n }\n\n protected onAttach(): void {\n this.searchInput()?.nativeElement.focus();\n }\n\n protected onSearch(event: Event): void {\n this.search.set((event.target as HTMLInputElement).value);\n this.activeIndex.set(0);\n }\n\n protected toggleOption(opt: BpxOption<T>): void {\n if (opt.disabled) return;\n const v = this.value();\n this.value.set(v.includes(opt.value) ? v.filter((x) => x !== opt.value) : [...v, opt.value]);\n }\n\n protected clearAll(): void {\n this.value.set([]);\n }\n\n protected onPanelKeydown(event: KeyboardEvent): void {\n const opts = this.filtered();\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.activeIndex.set(Math.min(this.activeIndex() + 1, opts.length - 1));\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.activeIndex.set(Math.max(this.activeIndex() - 1, 0));\n break;\n case 'Enter': {\n event.preventDefault();\n const opt = opts[this.activeIndex()];\n if (opt) this.toggleOption(opt);\n break;\n }\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n }\n }\n}\n","<button\n #trigger\n type=\"button\"\n class=\"bpx-filter__trigger\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [class.open]=\"open()\"\n [class.has-value]=\"count() > 0\"\n (click)=\"toggle()\"\n>\n <bpx-icon name=\"chevron-down\" size=\"sm\" class=\"bpx-filter__lead\" />\n <span class=\"bpx-filter__label\">{{ label() }}</span>\n @if (count() > 0) {\n <bpx-badge color=\"primary\" size=\"sm\" pill>{{ count() }}</bpx-badge>\n }\n</button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayMinWidth]=\"220\"\n (overlayOutsideClick)=\"close()\"\n (attach)=\"onAttach()\"\n (detach)=\"close()\"\n>\n <div class=\"bpx-filter__panel\" (keydown)=\"onPanelKeydown($event)\">\n @if (searchable()) {\n <div class=\"bpx-filter__search\">\n <bpx-icon name=\"search\" size=\"sm\" />\n <input\n #searchInput\n type=\"text\"\n placeholder=\"Search…\"\n [value]=\"search()\"\n (input)=\"onSearch($event)\"\n aria-label=\"Search options\"\n />\n </div>\n }\n\n <ul class=\"bpx-filter__list\" role=\"listbox\" aria-multiselectable=\"true\">\n @for (opt of filtered(); track opt.value; let i = $index) {\n <li\n class=\"bpx-filter__option\"\n role=\"option\"\n [class.active]=\"i === activeIndex()\"\n [class.disabled]=\"opt.disabled\"\n [attr.aria-selected]=\"isSelected(opt)\"\n (click)=\"toggleOption(opt)\"\n (mouseenter)=\"activeIndex.set(i)\"\n >\n <span class=\"bpx-filter__check\" [class.on]=\"isSelected(opt)\" aria-hidden=\"true\">\n @if (isSelected(opt)) {\n <bpx-icon name=\"check\" size=\"sm\" />\n }\n </span>\n <span class=\"bpx-filter__option-label\">{{ opt.label }}</span>\n </li>\n } @empty {\n <li class=\"bpx-filter__empty\">No matches</li>\n }\n </ul>\n\n <div class=\"bpx-filter__foot\">\n <span>{{ count() }} selected</span>\n <button type=\"button\" class=\"bpx-filter__clear\" [disabled]=\"count() === 0\" (click)=\"clearAll()\">\n Clear all\n </button>\n </div>\n </div>\n</ng-template>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BpxColor } from '../core/types';\n\n/**\n * A boolean on/off toggle. Works standalone with `[(checked)]` and as a form\n * control via `formControlName` / `[(ngModel)]`.\n *\n * ```html\n * <bpx-switch [(checked)]=\"notifications\">Email me</bpx-switch>\n * <bpx-switch formControlName=\"darkMode\" color=\"success\" />\n * ```\n */\n@Component({\n selector: 'bpx-switch',\n exportAs: 'bpxSwitch',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"bpx-switch__track\"><span class=\"bpx-switch__thumb\"></span></span>\n <span class=\"bpx-switch__label\"><ng-content /></span>\n `,\n styleUrl: './switch.scss',\n host: {\n class: 'bpx-switch',\n role: 'switch',\n '[attr.tabindex]': 'disabled() ? -1 : 0',\n '[attr.aria-checked]': 'checked()',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.data-size]': 'size()',\n '[attr.data-color]': 'color()',\n '[class.bpx-switch--on]': 'checked()',\n '[class.bpx-switch--disabled]': 'disabled()',\n '(click)': 'toggle()',\n '(keydown.space)': 'onKey($event)',\n '(keydown.enter)': 'onKey($event)',\n '(blur)': 'onTouched()',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Switch), multi: true },\n ],\n})\nexport class Switch implements ControlValueAccessor {\n /** On/off state. Two-way bindable via `[(checked)]`. */\n readonly checked = model(false);\n /** Disables interaction via the template. */\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n readonly size = input<'sm' | 'md'>('md');\n readonly color = input<BpxColor>('primary');\n\n /** Set by Angular forms through `setDisabledState`. */\n private readonly cvaDisabled = signal(false);\n /** Effective disabled state — either the input or a disabled form control. */\n protected readonly disabled = computed(() => this.disabledInput() || this.cvaDisabled());\n\n private onChange: (value: boolean) => void = () => {};\n /** Called on blur so forms mark the control touched. Invoked from the host. */\n protected onTouched: () => void = () => {};\n\n protected toggle(): void {\n if (this.disabled()) return;\n const next = !this.checked();\n this.checked.set(next);\n this.onChange(next);\n }\n\n protected onKey(event: Event): void {\n // Space/Enter activate the switch; prevent the space-triggered page scroll.\n event.preventDefault();\n this.toggle();\n }\n\n // ── ControlValueAccessor ─────────────────────────────────────\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BpxColor } from '../core/types';\n\n/**\n * A single-value range slider. Works standalone with `[(value)]` and as a form\n * control via `formControlName` / `[(ngModel)]`. Fully keyboard operable.\n *\n * ```html\n * <bpx-slider [(value)]=\"volume\" [min]=\"0\" [max]=\"100\" />\n * <bpx-slider formControlName=\"opacity\" [step]=\"0.05\" [max]=\"1\" color=\"success\" />\n * ```\n */\n@Component({\n selector: 'bpx-slider',\n exportAs: 'bpxSlider',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"bpx-slider__track\">\n <span class=\"bpx-slider__fill\" [style.width.%]=\"pct()\"></span>\n </span>\n <span class=\"bpx-slider__thumb\" [style.left.%]=\"pct()\"></span>\n `,\n styleUrl: './slider.scss',\n host: {\n class: 'bpx-slider',\n role: 'slider',\n '[attr.tabindex]': 'disabled() ? -1 : 0',\n '[attr.aria-valuemin]': 'min()',\n '[attr.aria-valuemax]': 'max()',\n '[attr.aria-valuenow]': 'value()',\n 'aria-orientation': 'horizontal',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.data-size]': 'size()',\n '[attr.data-color]': 'color()',\n '[class.bpx-slider--disabled]': 'disabled()',\n '(keydown)': 'onKeydown($event)',\n '(pointerdown)': 'onPointerDown($event)',\n '(pointermove)': 'onPointerMove($event)',\n '(pointerup)': 'onPointerUp()',\n '(pointercancel)': 'onPointerUp()',\n '(blur)': 'onTouched()',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Slider), multi: true },\n ],\n})\nexport class Slider implements ControlValueAccessor {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Current value. Two-way bindable via `[(value)]`. */\n readonly value = model(0);\n readonly min = input(0);\n readonly max = input(100);\n readonly step = input(1);\n /** Disables interaction via the template. */\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n readonly size = input<'sm' | 'md'>('md');\n readonly color = input<BpxColor>('primary');\n\n /** Set by Angular forms through `setDisabledState`. */\n private readonly cvaDisabled = signal(false);\n /** Effective disabled state — either the input or a disabled form control. */\n protected readonly disabled = computed(() => this.disabledInput() || this.cvaDisabled());\n\n /** Filled fraction of the track, 0–100, clamped for out-of-range values. */\n protected readonly pct = computed(() => {\n const span = this.max() - this.min();\n if (span <= 0) return 0;\n const ratio = (this.value() - this.min()) / span;\n return Math.min(100, Math.max(0, ratio * 100));\n });\n\n private dragging = false;\n private onChange: (value: number) => void = () => {};\n protected onTouched: () => void = () => {};\n\n // ── Pointer drag ─────────────────────────────────────────────\n protected onPointerDown(event: PointerEvent): void {\n if (this.disabled()) return;\n // Prevent text-selection / native drag, then jump to the pressed position\n // FIRST so a plain click always commits — before anything that might throw.\n event.preventDefault();\n this.dragging = true;\n this.setFromClientX(event.clientX);\n\n const host = this.el.nativeElement;\n host.focus();\n // Pointer capture lets the drag continue outside the track; it's an\n // enhancement, so never let a capture failure abort the interaction.\n try {\n host.setPointerCapture(event.pointerId);\n } catch {\n /* capture unavailable — drag still works while over the element */\n }\n }\n\n protected onPointerMove(event: PointerEvent): void {\n if (!this.dragging) return;\n this.setFromClientX(event.clientX);\n }\n\n protected onPointerUp(): void {\n if (!this.dragging) return;\n this.dragging = false;\n this.onTouched();\n }\n\n private setFromClientX(clientX: number): void {\n const rect = this.el.nativeElement.getBoundingClientRect();\n if (rect.width === 0) return;\n const ratio = Math.min(1, Math.max(0, (clientX - rect.left) / rect.width));\n this.commit(this.min() + ratio * (this.max() - this.min()));\n }\n\n // ── Keyboard ─────────────────────────────────────────────────\n protected onKeydown(event: KeyboardEvent): void {\n if (this.disabled()) return;\n const step = this.step();\n const page = Math.max(step, (this.max() - this.min()) / 10);\n let next: number | null = null;\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n next = this.value() + step;\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n next = this.value() - step;\n break;\n case 'PageUp':\n next = this.value() + page;\n break;\n case 'PageDown':\n next = this.value() - page;\n break;\n case 'Home':\n next = this.min();\n break;\n case 'End':\n next = this.max();\n break;\n default:\n return;\n }\n event.preventDefault();\n this.commit(next);\n this.onTouched();\n }\n\n /** Snap to the step grid, clamp to range, and emit only on a real change. */\n private commit(raw: number): void {\n const step = this.step();\n const snapped = step > 0 ? Math.round((raw - this.min()) / step) * step + this.min() : raw;\n const clamped = Math.min(this.max(), Math.max(this.min(), snapped));\n // Round away binary-float noise (e.g. 0.1 * 3) to the step's precision.\n const decimals = (String(step).split('.')[1] ?? '').length;\n const rounded = Number(clamped.toFixed(decimals));\n if (rounded !== this.value()) {\n this.value.set(rounded);\n this.onChange(rounded);\n }\n }\n\n // ── ControlValueAccessor ─────────────────────────────────────\n writeValue(value: number): void {\n this.value.set(typeof value === 'number' ? value : 0);\n }\n registerOnChange(fn: (value: number) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BpxSize } from '../core/types';\nimport { Icon } from '../icon/icon';\n\nexport type BpxInputType = 'text' | 'email' | 'password' | 'search' | 'tel' | 'url' | 'number';\n\n/**\n * A single-line text field. Works standalone with `[(value)]` and as a form\n * control via `formControlName` / `[(ngModel)]`. Project `[bpxPrefix]` /\n * `[bpxSuffix]` content (icons, units, buttons) into the ends.\n *\n * ```html\n * <bpx-input [(value)]=\"email\" type=\"email\" placeholder=\"you@example.com\" />\n * <bpx-input formControlName=\"query\" clearable>\n * <bpx-icon bpxPrefix name=\"search\" />\n * </bpx-input>\n * ```\n */\n@Component({\n selector: 'bpx-input',\n exportAs: 'bpxInput',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Icon],\n templateUrl: './input.html',\n styleUrl: './input.scss',\n host: {\n class: 'bpx-input',\n '[attr.data-size]': 'size()',\n '[class.bpx-input--invalid]': 'invalid()',\n '[class.bpx-input--disabled]': 'disabled()',\n },\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Input), multi: true }],\n})\nexport class Input implements ControlValueAccessor {\n /** Field text. Two-way bindable via `[(value)]`. */\n readonly value = model('');\n readonly type = input<BpxInputType>('text');\n readonly placeholder = input('');\n /** Read-only via the template (aliased so `readonly` works in markup). */\n readonly readonlyInput = input(false, { alias: 'readonly', transform: booleanAttribute });\n /** Show a clear button while there is text. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Error styling + `aria-invalid`. */\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly size = input<BpxSize>('md');\n readonly ariaLabel = input('', { alias: 'aria-label' });\n\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n private readonly cvaDisabled = signal(false);\n protected readonly disabled = computed(() => this.disabledInput() || this.cvaDisabled());\n\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n\n protected onInput(event: Event): void {\n const next = (event.target as HTMLInputElement).value;\n this.value.set(next);\n this.onChange(next);\n }\n\n protected clear(): void {\n this.value.set('');\n this.onChange('');\n }\n\n // ── ControlValueAccessor ─────────────────────────────────────\n writeValue(value: string): void {\n this.value.set(value ?? '');\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<span class=\"bpx-input__affix bpx-input__prefix\"><ng-content select=\"[bpxPrefix]\" /></span>\n\n<input\n class=\"bpx-input__field\"\n [type]=\"type()\"\n [value]=\"value()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonlyInput()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-invalid]=\"invalid() || null\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n/>\n\n@if (clearable() && value() && !disabled() && !readonlyInput()) {\n <button type=\"button\" class=\"bpx-input__clear\" aria-label=\"Clear\" (click)=\"clear()\">\n <bpx-icon name=\"close\" size=\"sm\" />\n </button>\n}\n\n<span class=\"bpx-input__affix bpx-input__suffix\"><ng-content select=\"[bpxSuffix]\" /></span>\n","import {\n afterRenderEffect,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BpxSize } from '../core/types';\n\n/**\n * A multi-line text field. Works standalone with `[(value)]` and as a form\n * control via `formControlName` / `[(ngModel)]`. Set `autoResize` to grow with\n * its content.\n *\n * ```html\n * <bpx-textarea [(value)]=\"bio\" [rows]=\"4\" placeholder=\"Tell us about yourself\" />\n * <bpx-textarea formControlName=\"notes\" autoResize />\n * ```\n */\n@Component({\n selector: 'bpx-textarea',\n exportAs: 'bpxTextarea',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './textarea.html',\n styleUrl: './textarea.scss',\n host: {\n class: 'bpx-textarea',\n '[attr.data-size]': 'size()',\n '[class.bpx-textarea--invalid]': 'invalid()',\n '[class.bpx-textarea--disabled]': 'disabled()',\n '[class.bpx-textarea--auto]': 'autoResize()',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Textarea), multi: true },\n ],\n})\nexport class Textarea implements ControlValueAccessor {\n private readonly field = viewChild.required<ElementRef<HTMLTextAreaElement>>('field');\n\n /** Field text. Two-way bindable via `[(value)]`. */\n readonly value = model('');\n readonly placeholder = input('');\n readonly rows = input(3);\n /** Grow the field to fit its content instead of scrolling. */\n readonly autoResize = input(false, { transform: booleanAttribute });\n readonly readonlyInput = input(false, { alias: 'readonly', transform: booleanAttribute });\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly size = input<BpxSize>('md');\n readonly ariaLabel = input('', { alias: 'aria-label' });\n\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n private readonly cvaDisabled = signal(false);\n protected readonly disabled = computed(() => this.disabledInput() || this.cvaDisabled());\n\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n // Keep the height in sync with content whenever the value or the flag\n // changes — covers typing, `writeValue`, and toggling autoResize on.\n afterRenderEffect(() => {\n this.value();\n if (this.autoResize()) this.resize();\n });\n }\n\n protected onInput(event: Event): void {\n const next = (event.target as HTMLTextAreaElement).value;\n this.value.set(next);\n this.onChange(next);\n }\n\n private resize(): void {\n const el = this.field().nativeElement;\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight}px`;\n }\n\n // ── ControlValueAccessor ─────────────────────────────────────\n writeValue(value: string): void {\n this.value.set(value ?? '');\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<textarea\n #field\n class=\"bpx-textarea__field\"\n [value]=\"value()\"\n [rows]=\"rows()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled()\"\n [readOnly]=\"readonlyInput()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-invalid]=\"invalid() || null\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n></textarea>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\nimport { BpxColor } from '../core/types';\n\n/** Visual shape of a progress indicator. */\nexport type BpxProgressShape = 'line' | 'half' | 'circle';\n\n/**\n * A determinate progress indicator in three shapes: a flat `line`, a `half`\n * circle gauge, and a full `circle` ring.\n *\n * ```html\n * <bpx-progress [value]=\"65\" />\n * <bpx-progress shape=\"half\" [value]=\"40\" showLabel />\n * <bpx-progress shape=\"circle\" [value]=\"80\" color=\"success\" showLabel />\n * ```\n */\n@Component({\n selector: 'bpx-progress',\n exportAs: 'bpxProgress',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './progress.html',\n styleUrl: './progress.scss',\n host: {\n class: 'bpx-progress',\n role: 'progressbar',\n 'aria-valuemin': '0',\n '[attr.aria-valuemax]': 'max()',\n '[attr.aria-valuenow]': 'value()',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.data-shape]': 'shape()',\n '[attr.data-color]': 'color()',\n },\n})\nexport class Progress {\n readonly value = input(0);\n readonly max = input(100);\n readonly shape = input<BpxProgressShape>('line');\n readonly color = input<BpxColor>('primary');\n /** Diameter in px for the `half` / `circle` shapes. */\n readonly size = input(120);\n /** Track / stroke thickness in px (also the line height). */\n readonly thickness = input(8);\n /** Show the rounded percentage in the centre (half / circle shapes). */\n readonly showLabel = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input('', { alias: 'aria-label' });\n\n protected readonly fraction = computed(() => {\n const max = this.max();\n if (max <= 0) return 0;\n return Math.min(1, Math.max(0, this.value() / max));\n });\n protected readonly pct = computed(() => this.fraction() * 100);\n protected readonly rounded = computed(() => Math.round(this.pct()));\n\n // ── Geometry (half / circle) ─────────────────────────────────\n protected readonly center = computed(() => this.size() / 2);\n protected readonly radius = computed(() => (this.size() - this.thickness()) / 2);\n\n protected readonly circumference = computed(() => 2 * Math.PI * this.radius());\n protected readonly circleOffset = computed(() => this.circumference() * (1 - this.fraction()));\n\n protected readonly semiLength = computed(() => Math.PI * this.radius());\n protected readonly semiOffset = computed(() => this.semiLength() * (1 - this.fraction()));\n /** Height of the half-circle viewport: top half of the ring plus its stroke. */\n protected readonly halfHeight = computed(() => this.size() / 2 + this.thickness() / 2);\n /** Semicircle arc, left point over the top to the right point. */\n protected readonly semiPath = computed(() => {\n const r = this.radius();\n const c = this.center();\n return `M ${c - r} ${c} A ${r} ${r} 0 0 1 ${c + r} ${c}`;\n });\n}\n","@switch (shape()) {\n @case ('line') {\n <div class=\"bpx-progress__line\">\n <div class=\"bpx-progress__track\" [style.height.px]=\"thickness()\">\n <div class=\"bpx-progress__fill\" [style.width.%]=\"pct()\"></div>\n </div>\n @if (showLabel()) {\n <span class=\"bpx-progress__label bpx-progress__label--line\">{{ rounded() }}%</span>\n }\n </div>\n }\n\n @case ('half') {\n <svg\n class=\"bpx-progress__svg\"\n [attr.width]=\"size()\"\n [attr.height]=\"halfHeight()\"\n [attr.viewBox]=\"'0 0 ' + size() + ' ' + halfHeight()\"\n >\n <path\n class=\"bpx-progress__track-stroke\"\n [attr.d]=\"semiPath()\"\n fill=\"none\"\n [attr.stroke-width]=\"thickness()\"\n stroke-linecap=\"round\"\n />\n <path\n class=\"bpx-progress__value-stroke\"\n [attr.d]=\"semiPath()\"\n fill=\"none\"\n [attr.stroke-width]=\"thickness()\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"semiLength()\"\n [attr.stroke-dashoffset]=\"semiOffset()\"\n />\n </svg>\n @if (showLabel()) {\n <span class=\"bpx-progress__label bpx-progress__label--half\">{{ rounded() }}%</span>\n }\n }\n\n @case ('circle') {\n <svg\n class=\"bpx-progress__svg\"\n [attr.width]=\"size()\"\n [attr.height]=\"size()\"\n [attr.viewBox]=\"'0 0 ' + size() + ' ' + size()\"\n >\n <circle\n class=\"bpx-progress__track-stroke\"\n [attr.cx]=\"center()\"\n [attr.cy]=\"center()\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke-width]=\"thickness()\"\n />\n <circle\n class=\"bpx-progress__value-stroke\"\n [attr.cx]=\"center()\"\n [attr.cy]=\"center()\"\n [attr.r]=\"radius()\"\n fill=\"none\"\n [attr.stroke-width]=\"thickness()\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"circumference()\"\n [attr.stroke-dashoffset]=\"circleOffset()\"\n [attr.transform]=\"'rotate(-90 ' + center() + ' ' + center() + ')'\"\n />\n </svg>\n @if (showLabel()) {\n <span class=\"bpx-progress__label\">{{ rounded() }}%</span>\n }\n }\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input, signal } from '@angular/core';\nimport { uniqueId } from '../core/id';\n\n/**\n * A single panel within `<bpx-tabs>`. Its content is lazily rendered only while\n * the tab is active.\n *\n * ```html\n * <bpx-tabs>\n * <bpx-tab label=\"Overview\">…</bpx-tab>\n * <bpx-tab label=\"Settings\" icon=\"search\">…</bpx-tab>\n * </bpx-tabs>\n * ```\n */\n@Component({\n selector: 'bpx-tab',\n exportAs: 'bpxTab',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `@if (active()) {\n <ng-content />\n }`,\n host: {\n class: 'bpx-tab',\n role: 'tabpanel',\n '[attr.id]': 'panelId',\n '[attr.aria-labelledby]': 'tabId',\n '[hidden]': '!active()',\n },\n})\nexport class Tab {\n readonly label = input('');\n /** Optional registered icon name shown before the label. */\n readonly icon = input<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n\n /** Toggled by the parent `<bpx-tabs>`. */\n readonly active = signal(false);\n\n private readonly baseId = uniqueId('bpx-tab');\n readonly tabId = `${this.baseId}-tab`;\n readonly panelId = `${this.baseId}-panel`;\n}\n","import {\n afterNextRender,\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n model,\n signal,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport { BpxColor } from '../core/types';\nimport { Icon } from '../icon/icon';\nimport { Tab } from './tab';\n\n/**\n * A tabbed interface with a sliding active-indicator, keyboard navigation and\n * full tablist ARIA. Compose it from `<bpx-tab>` children.\n *\n * ```html\n * <bpx-tabs [(activeIndex)]=\"tab\" color=\"primary\">\n * <bpx-tab label=\"Overview\">…</bpx-tab>\n * <bpx-tab label=\"Activity\">…</bpx-tab>\n * </bpx-tabs>\n * ```\n */\n@Component({\n selector: 'bpx-tabs',\n exportAs: 'bpxTabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Icon],\n templateUrl: './tabs.html',\n styleUrl: './tabs.scss',\n host: { class: 'bpx-tabs', '[attr.data-color]': 'color()' },\n})\nexport class Tabs {\n readonly tabs = contentChildren(Tab);\n readonly activeIndex = model(0);\n readonly color = input<BpxColor>('primary');\n\n private readonly list = viewChild.required<ElementRef<HTMLElement>>('tablist');\n private readonly tabButtons = viewChildren<ElementRef<HTMLButtonElement>>('tabBtn');\n\n protected readonly indicatorLeft = signal(0);\n protected readonly indicatorWidth = signal(0);\n private readonly resizeTick = signal(0);\n\n constructor() {\n // Mirror the active index onto each child so it shows/hides its panel.\n effect(() => {\n const active = this.activeIndex();\n this.tabs().forEach((tab, i) => tab.active.set(i === active));\n });\n\n // Slide the indicator under the active tab after each relevant render.\n afterRenderEffect(() => {\n this.activeIndex();\n this.tabs();\n this.resizeTick();\n const btn = this.tabButtons()[this.activeIndex()]?.nativeElement;\n if (btn) {\n this.indicatorLeft.set(btn.offsetLeft);\n this.indicatorWidth.set(btn.offsetWidth);\n }\n });\n\n // Keep the indicator aligned when the tab strip reflows.\n const destroyRef = inject(DestroyRef);\n afterNextRender(() => {\n const observer = new ResizeObserver(() => this.resizeTick.update((t) => t + 1));\n observer.observe(this.list().nativeElement);\n destroyRef.onDestroy(() => observer.disconnect());\n });\n }\n\n protected select(index: number): void {\n const tab = this.tabs()[index];\n if (!tab || tab.disabled()) return;\n this.activeIndex.set(index);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n let target = -1;\n switch (event.key) {\n case 'ArrowRight':\n target = this.step(this.activeIndex(), 1);\n break;\n case 'ArrowLeft':\n target = this.step(this.activeIndex(), -1);\n break;\n case 'Home':\n target = this.step(-1, 1);\n break;\n case 'End':\n target = this.step(this.tabs().length, -1);\n break;\n default:\n return;\n }\n if (target >= 0) {\n event.preventDefault();\n this.select(target);\n this.tabButtons()[target]?.nativeElement.focus();\n }\n }\n\n /** First enabled tab index stepping `dir` from `from` (wraps), or -1. */\n private step(from: number, dir: 1 | -1): number {\n const tabs = this.tabs();\n const n = tabs.length;\n if (!n) return -1;\n for (let k = 1; k <= n; k++) {\n const i = (from + dir * k + n * k) % n;\n if (!tabs[i].disabled()) return i;\n }\n return -1;\n }\n}\n","<div #tablist class=\"bpx-tabs__list\" role=\"tablist\" (keydown)=\"onKeydown($event)\">\n @for (tab of tabs(); track tab.tabId; let i = $index) {\n <button\n #tabBtn\n type=\"button\"\n class=\"bpx-tabs__tab\"\n role=\"tab\"\n [id]=\"tab.tabId\"\n [attr.aria-selected]=\"i === activeIndex()\"\n [attr.aria-controls]=\"tab.panelId\"\n [attr.tabindex]=\"i === activeIndex() ? 0 : -1\"\n [class.active]=\"i === activeIndex()\"\n [disabled]=\"tab.disabled()\"\n (click)=\"select(i)\"\n >\n @if (tab.icon(); as ic) {\n <bpx-icon [name]=\"ic\" size=\"sm\" />\n }\n <span>{{ tab.label() }}</span>\n </button>\n }\n <span\n class=\"bpx-tabs__indicator\"\n [style.transform]=\"'translateX(' + indicatorLeft() + 'px)'\"\n [style.width.px]=\"indicatorWidth()\"\n ></span>\n</div>\n\n<div class=\"bpx-tabs__panels\">\n <ng-content />\n</div>\n","import { ConnectedPosition, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\n\nexport type BpxTooltipPosition = 'top' | 'bottom' | 'left' | 'right';\n\n/** Internal container rendered inside the overlay. Not part of the public API. */\n@Component({\n selector: 'bpx-tooltip-container',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `{{ text() }}`,\n styleUrl: './tooltip.scss',\n host: {\n class: 'bpx-tooltip',\n role: 'tooltip',\n '[attr.data-position]': 'position()',\n },\n})\nexport class TooltipContainer {\n readonly text = input('');\n readonly position = input<BpxTooltipPosition>('top');\n}\n\n/**\n * Shows a small floating label on hover and keyboard focus. Built on the CDK\n * overlay, so it flips to stay on-screen and never clips inside scroll areas.\n *\n * ```html\n * <button bpx-button bpxTooltip=\"Save changes\">Save</button>\n * <bpx-icon name=\"info\" bpxTooltip=\"More info\" bpxTooltipPosition=\"right\" />\n * ```\n */\n@Directive({\n selector: '[bpxTooltip]',\n host: {\n '(mouseenter)': 'show()',\n '(mouseleave)': 'hide()',\n '(focus)': 'show()',\n '(blur)': 'hide()',\n '(keydown.escape)': 'hide()',\n },\n})\nexport class Tooltip {\n /** Tooltip text. */\n readonly text = input.required<string>({ alias: 'bpxTooltip' });\n readonly position = input<BpxTooltipPosition>('top', { alias: 'bpxTooltipPosition' });\n /** Delay in ms before showing. */\n readonly showDelay = input(150, { alias: 'bpxTooltipDelay' });\n\n private readonly overlay = inject(Overlay);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private overlayRef?: OverlayRef;\n private showTimer?: ReturnType<typeof setTimeout>;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n this.clearTimer();\n this.overlayRef?.dispose();\n });\n }\n\n protected show(): void {\n this.clearTimer();\n this.showTimer = setTimeout(() => this.attach(), this.showDelay());\n }\n\n protected hide(): void {\n this.clearTimer();\n this.overlayRef?.detach();\n }\n\n private attach(): void {\n if (!this.text()) return;\n const overlayRef = this.ensureOverlay();\n if (overlayRef.hasAttached()) return;\n const ref = overlayRef.attach(new ComponentPortal(TooltipContainer));\n ref.setInput('text', this.text());\n ref.setInput('position', this.position());\n }\n\n private ensureOverlay(): OverlayRef {\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.el)\n .withPositions(this.positionsFor(this.position())),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n });\n }\n return this.overlayRef;\n }\n\n private clearTimer(): void {\n if (this.showTimer !== undefined) {\n clearTimeout(this.showTimer);\n this.showTimer = undefined;\n }\n }\n\n /** Preferred placement plus its opposite as a flip fallback. */\n private positionsFor(pos: BpxTooltipPosition): ConnectedPosition[] {\n const gap = 8;\n const top: ConnectedPosition = { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -gap };\n const bottom: ConnectedPosition = { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: gap };\n const left: ConnectedPosition = { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -gap };\n const right: ConnectedPosition = { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: gap };\n switch (pos) {\n case 'bottom':\n return [bottom, top];\n case 'left':\n return [left, right];\n case 'right':\n return [right, left];\n default:\n return [top, bottom];\n }\n }\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/**\n * A surface container for grouping related content. Three visual variants and\n * an optional `interactive` state for clickable cards.\n *\n * ```html\n * <bpx-card>…</bpx-card>\n * <bpx-card variant=\"outline\" interactive>…</bpx-card>\n * ```\n */\n@Component({\n selector: 'bpx-card',\n exportAs: 'bpxCard',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styleUrl: './card.scss',\n host: {\n class: 'bpx-card',\n '[attr.data-variant]': 'variant()',\n '[class.bpx-card--interactive]': 'interactive()',\n '[attr.tabindex]': 'interactive() ? 0 : null',\n },\n})\nexport class Card {\n readonly variant = input<'elevated' | 'outline' | 'soft'>('elevated');\n /** Adds hover lift, pointer cursor and a focus ring for clickable cards. */\n readonly interactive = input(false, { transform: booleanAttribute });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n numberAttribute,\n signal,\n} from '@angular/core';\nimport { uniqueId } from '../core/id';\n\n/**\n * A frosted \"liquid glass\" surface. Blurs and saturates whatever is behind it,\n * warps it with an SVG refraction filter, and carries a specular sheen that\n * follows the cursor. Wrap any content — a card, a toolbar, a hero panel — and\n * place it over something colorful for the effect to read.\n *\n * ```html\n * <bpx-liquid-glass [blur]=\"12\" [distortion]=\"40\">\n * <h2>Liquid Glass</h2>\n * </bpx-liquid-glass>\n * ```\n */\n@Component({\n selector: 'bpx-liquid-glass',\n exportAs: 'bpxLiquidGlass',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './liquid-glass.html',\n styleUrl: './liquid-glass.scss',\n host: {\n class: 'bpx-liquid-glass',\n '[class.is-elevated]': 'elevated()',\n '[class.is-active]': 'active()',\n '[style.border-radius]': 'radius()',\n '[style.--lg-radius]': 'radius()',\n '[style.--lg-blur]': 'blurPx()',\n '[style.--lg-sat]': 'saturation()',\n '[style.--lg-tint]': 'tint()',\n '[style.--lg-refract]': 'refractFilter()',\n '(pointermove)': 'onMove($event)',\n '(pointerenter)': 'onEnter()',\n '(pointerleave)': 'onLeave()',\n },\n})\nexport class LiquidGlass {\n /** Backdrop blur radius, in px. */\n readonly blur = input(10, { transform: numberAttribute });\n /** Backdrop saturation multiplier (1 = unchanged). */\n readonly saturation = input(1.8, { transform: numberAttribute });\n /** Refraction strength (SVG displacement scale). `0` disables the warp. */\n readonly distortion = input(30, { transform: numberAttribute });\n /** Glass tint — a translucent color layered over the blur. */\n readonly tint = input('rgba(255, 255, 255, 0.12)');\n /** Corner radius (any CSS length). */\n readonly radius = input('1.25rem');\n /** Drop shadow for lift. */\n readonly elevated = input(true, { transform: booleanAttribute });\n /** Specular sheen follows the cursor on hover. */\n readonly interactive = input(true, { transform: booleanAttribute });\n\n protected readonly active = signal(false);\n protected readonly filterId = uniqueId('bpx-glass');\n\n protected readonly blurPx = computed(() => `${this.blur()}px`);\n protected readonly hasDistortion = computed(() => this.distortion() > 0);\n protected readonly refractFilter = computed(() =>\n this.hasDistortion() ? `url(#${this.filterId}) blur(1px)` : 'none',\n );\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n protected onMove(event: PointerEvent): void {\n if (!this.interactive()) return;\n const el = this.host.nativeElement;\n const rect = el.getBoundingClientRect();\n el.style.setProperty('--lg-mx', `${event.clientX - rect.left}px`);\n el.style.setProperty('--lg-my', `${event.clientY - rect.top}px`);\n }\n protected onEnter(): void {\n if (this.interactive()) this.active.set(true);\n }\n protected onLeave(): void {\n this.active.set(false);\n }\n}\n","<svg class=\"bpx-liquid-glass__filter\" aria-hidden=\"true\" width=\"0\" height=\"0\">\n <filter [id]=\"filterId\" x=\"-20%\" y=\"-20%\" width=\"140%\" height=\"140%\">\n <feTurbulence\n type=\"fractalNoise\"\n baseFrequency=\"0.008 0.012\"\n numOctaves=\"2\"\n seed=\"7\"\n result=\"noise\"\n />\n <feGaussianBlur in=\"noise\" stdDeviation=\"1.4\" result=\"soft\" />\n <feDisplacementMap\n in=\"SourceGraphic\"\n in2=\"soft\"\n [attr.scale]=\"distortion()\"\n xChannelSelector=\"R\"\n yChannelSelector=\"G\"\n />\n </filter>\n</svg>\n\n<div class=\"bpx-liquid-glass__surface\" aria-hidden=\"true\"></div>\n@if (hasDistortion()) {\n <div class=\"bpx-liquid-glass__refract\" aria-hidden=\"true\"></div>\n}\n<div class=\"bpx-liquid-glass__sheen\" aria-hidden=\"true\"></div>\n\n<div class=\"bpx-liquid-glass__content\"><ng-content /></div>\n","import { booleanAttribute, ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/** Minimal contract the accordion needs from its items (avoids a circular import). */\nexport interface AccordionPanel {\n setOpen(open: boolean): void;\n}\n\n/**\n * A vertical stack of collapsible `<bpx-accordion-item>` panels. By default only\n * one panel is open at a time; set `multi` to allow several.\n *\n * ```html\n * <bpx-accordion>\n * <bpx-accordion-item heading=\"Shipping\">…</bpx-accordion-item>\n * <bpx-accordion-item heading=\"Returns\">…</bpx-accordion-item>\n * </bpx-accordion>\n * ```\n */\n@Component({\n selector: 'bpx-accordion',\n exportAs: 'bpxAccordion',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styleUrl: './accordion.scss',\n host: { class: 'bpx-accordion' },\n})\nexport class Accordion {\n /** Allow multiple panels open simultaneously. */\n readonly multi = input(false, { transform: booleanAttribute });\n\n private openPanel: AccordionPanel | null = null;\n\n /** Called by an item when it opens; closes the previous one in single mode. */\n notifyOpen(panel: AccordionPanel): void {\n if (!this.multi() && this.openPanel && this.openPanel !== panel) {\n this.openPanel.setOpen(false);\n }\n this.openPanel = panel;\n }\n\n notifyClose(panel: AccordionPanel): void {\n if (this.openPanel === panel) this.openPanel = null;\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n effect,\n inject,\n input,\n model,\n} from '@angular/core';\nimport { uniqueId } from '../core/id';\nimport { Icon } from '../icon/icon';\nimport { Accordion, AccordionPanel } from './accordion';\n\n/**\n * A single collapsible panel inside `<bpx-accordion>`. Two-way bindable via\n * `[(open)]`; its content animates open/closed and is `inert` while collapsed.\n */\n@Component({\n selector: 'bpx-accordion-item',\n exportAs: 'bpxAccordionItem',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Icon],\n templateUrl: './accordion-item.html',\n styleUrl: './accordion-item.scss',\n host: { class: 'bpx-accordion-item' },\n})\nexport class AccordionItem implements AccordionPanel {\n private readonly parent = inject(Accordion);\n\n readonly heading = input('');\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Open state. Two-way bindable via `[(open)]`. */\n readonly open = model(false);\n\n private readonly baseId = uniqueId('bpx-acc');\n protected readonly triggerId = `${this.baseId}-trigger`;\n protected readonly regionId = `${this.baseId}-region`;\n\n constructor() {\n // Notify the parent on every open-state change — click, `[open]` on load, or\n // programmatic `[(open)]` — so single-open coordination is always correct.\n effect(() => {\n if (this.open()) this.parent.notifyOpen(this);\n else this.parent.notifyClose(this);\n });\n }\n\n protected toggle(): void {\n if (this.disabled()) return;\n this.open.set(!this.open());\n }\n\n /** Called by the parent accordion to close this panel in single-open mode. */\n setOpen(open: boolean): void {\n this.open.set(open);\n }\n}\n","<h3 class=\"bpx-accordion-item__heading\">\n <button\n type=\"button\"\n class=\"bpx-accordion-item__trigger\"\n [id]=\"triggerId\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"regionId\"\n [disabled]=\"disabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"bpx-accordion-item__label\">{{ heading() }}</span>\n <bpx-icon class=\"bpx-accordion-item__chevron\" name=\"chevron-down\" size=\"sm\" />\n </button>\n</h3>\n\n<div\n class=\"bpx-accordion-item__region\"\n role=\"region\"\n [id]=\"regionId\"\n [attr.aria-labelledby]=\"triggerId\"\n [class.open]=\"open()\"\n [attr.inert]=\"open() ? null : ''\"\n>\n <div class=\"bpx-accordion-item__inner\">\n <div class=\"bpx-accordion-item__body\"><ng-content /></div>\n </div>\n</div>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n model,\n PLATFORM_ID,\n TemplateRef,\n ViewContainerRef,\n viewChild,\n} from '@angular/core';\nimport { uniqueId } from '../core/id';\nimport { Icon } from '../icon/icon';\n\n/**\n * A modal dialog rendered in the CDK overlay (so it escapes any clipping or\n * stacking context). Controlled declaratively with `[(open)]`; traps focus,\n * locks background scroll, and closes on backdrop click or Escape.\n *\n * ```html\n * <button bpx-button (click)=\"confirm.set(true)\">Delete</button>\n * <bpx-dialog [(open)]=\"confirm\" title=\"Delete item?\">\n * <p>This can't be undone.</p>\n * <div bpxDialogFooter>\n * <button bpx-button variant=\"ghost\" (click)=\"confirm.set(false)\">Cancel</button>\n * <button bpx-button color=\"danger\" (click)=\"remove()\">Delete</button>\n * </div>\n * </bpx-dialog>\n * ```\n */\n@Component({\n selector: 'bpx-dialog',\n exportAs: 'bpxDialog',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [A11yModule, Icon],\n templateUrl: './dialog.html',\n styleUrl: './dialog.scss',\n})\nexport class Dialog {\n /** Open state. Two-way bindable via `[(open)]`. */\n readonly open = model(false);\n readonly title = input('');\n readonly ariaLabel = input('', { alias: 'aria-label' });\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n /** Prevent closing via backdrop click and Escape. */\n readonly disableClose = input(false, { transform: booleanAttribute });\n\n protected readonly titleId = `${uniqueId('bpx-dialog')}-title`;\n\n private readonly tpl = viewChild.required<TemplateRef<unknown>>('tpl');\n private readonly overlay = inject(Overlay);\n private readonly vcr = inject(ViewContainerRef);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private overlayRef?: OverlayRef;\n\n constructor() {\n effect(() => {\n if (!this.isBrowser) return;\n if (this.open()) this.attach();\n else this.detach();\n });\n inject(DestroyRef).onDestroy(() => this.overlayRef?.dispose());\n }\n\n protected close(): void {\n this.open.set(false);\n }\n\n private attach(): void {\n const ref = this.ensureOverlay();\n if (ref.hasAttached()) return;\n ref.attach(new TemplatePortal(this.tpl(), this.vcr));\n }\n\n private detach(): void {\n this.overlayRef?.detach();\n }\n\n private ensureOverlay(): OverlayRef {\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.block(),\n positionStrategy: this.overlay\n .position()\n .global()\n .centerHorizontally()\n .centerVertically(),\n });\n this.overlayRef.backdropClick().subscribe(() => {\n if (!this.disableClose()) this.close();\n });\n this.overlayRef.keydownEvents().subscribe((event) => {\n if (event.key === 'Escape' && !this.disableClose()) {\n event.preventDefault();\n this.close();\n }\n });\n }\n return this.overlayRef;\n }\n}\n","<ng-template #tpl>\n <div\n class=\"bpx-dialog__panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.data-size]=\"size()\"\n [attr.aria-labelledby]=\"title() ? titleId : null\"\n [attr.aria-label]=\"!title() ? ariaLabel() || null : null\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n >\n @if (title()) {\n <header class=\"bpx-dialog__header\">\n <h2 class=\"bpx-dialog__title\" [id]=\"titleId\">{{ title() }}</h2>\n @if (!disableClose()) {\n <button type=\"button\" class=\"bpx-dialog__close\" aria-label=\"Close\" (click)=\"close()\">\n <bpx-icon name=\"close\" size=\"sm\" />\n </button>\n }\n </header>\n }\n\n <div class=\"bpx-dialog__body\">\n <ng-content />\n </div>\n\n <div class=\"bpx-dialog__footer\">\n <ng-content select=\"[bpxDialogFooter]\" />\n </div>\n </div>\n</ng-template>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BpxColor } from '../core/types';\nimport { Icon } from '../icon/icon';\n\n/**\n * A checkbox with an optional indeterminate state. Works standalone with\n * `[(checked)]` and as a form control via `formControlName` / `[(ngModel)]`.\n *\n * ```html\n * <bpx-checkbox [(checked)]=\"agree\">I agree to the terms</bpx-checkbox>\n * <bpx-checkbox formControlName=\"selectAll\" [indeterminate]=\"some\" />\n * ```\n */\n@Component({\n selector: 'bpx-checkbox',\n exportAs: 'bpxCheckbox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Icon],\n template: `\n <span class=\"bpx-checkbox__box\">\n @if (indeterminate()) {\n <span class=\"bpx-checkbox__dash\"></span>\n } @else if (checked()) {\n <bpx-icon name=\"check\" size=\"sm\" />\n }\n </span>\n <span class=\"bpx-checkbox__label\"><ng-content /></span>\n `,\n styleUrl: './checkbox.scss',\n host: {\n class: 'bpx-checkbox',\n role: 'checkbox',\n '[attr.tabindex]': 'disabled() ? -1 : 0',\n '[attr.aria-checked]': 'indeterminate() ? \"mixed\" : checked()',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.data-size]': 'size()',\n '[attr.data-color]': 'color()',\n '[class.bpx-checkbox--on]': 'checked() || indeterminate()',\n '[class.bpx-checkbox--disabled]': 'disabled()',\n '(click)': 'toggle()',\n '(keydown.space)': 'onKey($event)',\n '(blur)': 'onTouched()',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Checkbox), multi: true },\n ],\n})\nexport class Checkbox implements ControlValueAccessor {\n /** Checked state. Two-way bindable via `[(checked)]`. */\n readonly checked = model(false);\n /** Mixed state — cleared to `checked` on the next user toggle. */\n readonly indeterminate = model(false);\n readonly size = input<'sm' | 'md'>('md');\n readonly color = input<BpxColor>('primary');\n\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n private readonly cvaDisabled = signal(false);\n protected readonly disabled = computed(() => this.disabledInput() || this.cvaDisabled());\n\n private onChange: (value: boolean) => void = () => {};\n protected onTouched: () => void = () => {};\n\n protected toggle(): void {\n if (this.disabled()) return;\n // A user interaction resolves the indeterminate state into a concrete value.\n const next = this.indeterminate() ? true : !this.checked();\n this.indeterminate.set(false);\n this.checked.set(next);\n this.onChange(next);\n }\n\n protected onKey(event: Event): void {\n event.preventDefault();\n this.toggle();\n }\n\n // ── ControlValueAccessor ─────────────────────────────────────\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\nimport { RadioGroup } from './radio-group';\n\n/**\n * A single option inside `<bpx-radio-group>`. Its label is projected content.\n *\n * ```html\n * <bpx-radio value=\"pro\">Pro plan</bpx-radio>\n * ```\n */\n@Component({\n selector: 'bpx-radio',\n exportAs: 'bpxRadio',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"bpx-radio__dot\"></span>\n <span class=\"bpx-radio__label\"><ng-content /></span>\n `,\n styleUrl: './radio.scss',\n host: {\n class: 'bpx-radio',\n role: 'radio',\n '[attr.aria-checked]': 'checked()',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.tabindex]': 'tabindex()',\n '[attr.data-size]': 'group.size()',\n '[attr.data-color]': 'group.color()',\n '[class.bpx-radio--checked]': 'checked()',\n '[class.bpx-radio--disabled]': 'disabled()',\n '(click)': 'select()',\n '(keydown)': 'onKeydown($event)',\n '(blur)': 'onBlur()',\n },\n})\nexport class Radio {\n readonly value = input.required<unknown>();\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n\n protected readonly group = inject(RadioGroup);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly checked = computed(() => this.group.value() === this.value());\n readonly disabled = computed(() => this.disabledInput() || this.group.disabled());\n\n /** Roving tabindex: the checked radio (or the first enabled one when none is\n * selected) is the single tab stop for the group. */\n protected readonly tabindex = computed(() => {\n if (this.disabled()) return -1;\n if (this.checked()) return 0;\n if (this.group.value() == null && this.group.firstEnabled() === this) return 0;\n return -1;\n });\n\n protected select(): void {\n if (!this.disabled()) this.group.select(this.value());\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n this.group.handleKey(event, this);\n }\n\n protected onBlur(): void {\n this.group.onTouched();\n }\n\n focus(): void {\n this.el.nativeElement.focus();\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n forwardRef,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BpxColor } from '../core/types';\nimport { Radio } from './radio';\n\n/**\n * Groups a set of `<bpx-radio>` buttons into a single-choice control. Works\n * standalone with `[(value)]` and as a form control via `formControlName` /\n * `[(ngModel)]`. Arrow keys move (and select) between options.\n *\n * ```html\n * <bpx-radio-group [(value)]=\"plan\">\n * <bpx-radio value=\"free\">Free</bpx-radio>\n * <bpx-radio value=\"pro\">Pro</bpx-radio>\n * </bpx-radio-group>\n * ```\n */\n@Component({\n selector: 'bpx-radio-group',\n exportAs: 'bpxRadioGroup',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styleUrl: './radio-group.scss',\n host: {\n class: 'bpx-radio-group',\n role: 'radiogroup',\n '[attr.data-orientation]': 'orientation()',\n '[attr.aria-disabled]': 'disabled() || null',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RadioGroup), multi: true },\n ],\n})\nexport class RadioGroup implements ControlValueAccessor {\n /** Selected value. Two-way bindable via `[(value)]`. */\n readonly value = model<unknown>(null);\n readonly orientation = input<'vertical' | 'horizontal'>('vertical');\n readonly color = input<BpxColor>('primary');\n readonly size = input<'sm' | 'md'>('md');\n\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n private readonly cvaDisabled = signal(false);\n readonly disabled = computed(() => this.disabledInput() || this.cvaDisabled());\n\n readonly radios = contentChildren(Radio);\n\n private onChange: (value: unknown) => void = () => {};\n onTouched: () => void = () => {};\n\n select(value: unknown): void {\n if (this.disabled() || this.value() === value) return;\n this.value.set(value);\n this.onChange(value);\n }\n\n /** First non-disabled radio — the roving-tabindex entry point when nothing is selected. */\n firstEnabled(): Radio | undefined {\n return this.radios().find((r) => !r.disabled());\n }\n\n handleKey(event: KeyboardEvent, current: Radio): void {\n const enabled = this.radios().filter((r) => !r.disabled());\n if (!enabled.length) return;\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this.select(current.value());\n return;\n }\n let dir = 0;\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') dir = 1;\n else if (event.key === 'ArrowUp' || event.key === 'ArrowLeft') dir = -1;\n else return;\n event.preventDefault();\n const idx = enabled.indexOf(current);\n const target = enabled[(idx + dir + enabled.length) % enabled.length];\n this.select(target.value());\n target.focus();\n }\n\n // ── ControlValueAccessor ─────────────────────────────────────\n writeValue(value: unknown): void {\n this.value.set(value);\n }\n registerOnChange(fn: (value: unknown) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, model } from '@angular/core';\nimport { Icon } from '../icon/icon';\n\ninterface PaginationItem {\n type: 'page' | 'ellipsis';\n page: number;\n}\n\n/**\n * Page navigation with automatic ellipsis truncation. `page` is 1-based and\n * two-way bindable.\n *\n * ```html\n * <bpx-pagination [(page)]=\"page\" [pageCount]=\"12\" />\n * ```\n */\n@Component({\n selector: 'bpx-pagination',\n exportAs: 'bpxPagination',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Icon],\n templateUrl: './pagination.html',\n styleUrl: './pagination.scss',\n host: { class: 'bpx-pagination', role: 'navigation', 'aria-label': 'Pagination' },\n})\nexport class Pagination {\n /** Current 1-based page. Two-way bindable via `[(page)]`. */\n readonly page = model(1);\n readonly pageCount = input(1);\n /** Pages to show on each side of the current page. */\n readonly siblingCount = input(1);\n /** Pages to always show at the start and end. */\n readonly boundaryCount = input(1);\n\n /** The rendered sequence of page buttons and ellipses. */\n readonly items = computed<PaginationItem[]>(() => {\n const count = this.pageCount();\n if (count <= 1) return count === 1 ? [{ type: 'page', page: 1 }] : [];\n\n const page = Math.min(Math.max(this.page(), 1), count);\n const boundary = Math.max(0, this.boundaryCount());\n const sibling = Math.max(0, this.siblingCount());\n const range = (start: number, end: number): number[] =>\n start > end ? [] : Array.from({ length: end - start + 1 }, (_, i) => start + i);\n\n const startPages = range(1, Math.min(boundary, count));\n const endPages = range(Math.max(count - boundary + 1, boundary + 1), count);\n\n const siblingsStart = Math.max(\n Math.min(page - sibling, count - boundary - sibling * 2 - 1),\n boundary + 2,\n );\n const siblingsEnd = Math.min(\n Math.max(page + sibling, boundary + sibling * 2 + 2),\n endPages.length > 0 ? endPages[0] - 2 : count - 1,\n );\n\n const list: (number | 'ellipsis')[] = [\n ...startPages,\n ...(siblingsStart > boundary + 2\n ? ['ellipsis' as const]\n : boundary + 1 < count - boundary\n ? [boundary + 1]\n : []),\n ...range(siblingsStart, siblingsEnd),\n ...(siblingsEnd < count - boundary - 1\n ? ['ellipsis' as const]\n : count - boundary > boundary\n ? [count - boundary]\n : []),\n ...endPages,\n ];\n\n return list.map((it) =>\n it === 'ellipsis' ? { type: 'ellipsis', page: 0 } : { type: 'page', page: it },\n );\n });\n\n protected go(target: number): void {\n const clamped = Math.min(Math.max(target, 1), this.pageCount());\n if (clamped !== this.page()) this.page.set(clamped);\n }\n protected prev(): void {\n this.go(this.page() - 1);\n }\n protected next(): void {\n this.go(this.page() + 1);\n }\n}\n","<button\n type=\"button\"\n class=\"bpx-pagination__btn bpx-pagination__arrow\"\n [disabled]=\"page() <= 1\"\n aria-label=\"Previous page\"\n (click)=\"prev()\"\n>\n <bpx-icon class=\"bpx-pagination__flip\" name=\"chevron-right\" size=\"sm\" />\n</button>\n\n@for (item of items(); track $index) {\n @if (item.type === 'ellipsis') {\n <span class=\"bpx-pagination__ellipsis\" aria-hidden=\"true\">…</span>\n } @else {\n <button\n type=\"button\"\n class=\"bpx-pagination__btn\"\n [class.active]=\"item.page === page()\"\n [attr.aria-current]=\"item.page === page() ? 'page' : null\"\n [attr.aria-label]=\"'Page ' + item.page\"\n (click)=\"go(item.page)\"\n >\n {{ item.page }}\n </button>\n }\n}\n\n<button\n type=\"button\"\n class=\"bpx-pagination__btn bpx-pagination__arrow\"\n [disabled]=\"page() >= pageCount()\"\n aria-label=\"Next page\"\n (click)=\"next()\"\n>\n <bpx-icon name=\"chevron-right\" size=\"sm\" />\n</button>\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n inject,\n signal,\n viewChild,\n} from '@angular/core';\n\n/**\n * A scroll container with a slim, custom overlay scrollbar. Native scrolling\n * (wheel, touch, keyboard) is preserved — the native bar is hidden and replaced\n * with a styled, draggable thumb that only appears when content overflows.\n *\n * Give the host a bounded height (fixed, `max-height`, or a flex context).\n *\n * ```html\n * <bpx-scroll-area style=\"max-height: 320px\">…long content…</bpx-scroll-area>\n * ```\n */\n@Component({\n selector: 'bpx-scroll-area',\n exportAs: 'bpxScrollArea',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './scroll-area.html',\n styleUrl: './scroll-area.scss',\n host: {\n class: 'bpx-scroll-area',\n '(pointermove)': 'onPointerMove($event)',\n '(pointerup)': 'onPointerUp()',\n '(pointercancel)': 'onPointerUp()',\n },\n})\nexport class ScrollArea {\n private readonly viewport = viewChild.required<ElementRef<HTMLElement>>('viewport');\n private readonly content = viewChild.required<ElementRef<HTMLElement>>('content');\n\n protected readonly overflowing = signal(false);\n protected readonly thumbSize = signal(0);\n protected readonly thumbOffset = signal(0);\n\n private dragging = false;\n private dragStartY = 0;\n private dragStartScrollTop = 0;\n private readonly minThumb = 28;\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n afterNextRender(() => {\n this.measure();\n // Re-measure when the viewport resizes or its content changes size.\n const observer = new ResizeObserver(() => this.measure());\n observer.observe(this.viewport().nativeElement);\n observer.observe(this.content().nativeElement);\n destroyRef.onDestroy(() => observer.disconnect());\n });\n }\n\n protected onScroll(): void {\n this.measure();\n }\n\n protected onThumbPointerDown(event: PointerEvent): void {\n event.preventDefault();\n event.stopPropagation();\n this.dragging = true;\n this.dragStartY = event.clientY;\n this.dragStartScrollTop = this.viewport().nativeElement.scrollTop;\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n }\n\n protected onPointerMove(event: PointerEvent): void {\n if (!this.dragging) return;\n const vp = this.viewport().nativeElement;\n const trackScrollable = vp.clientHeight - this.thumbSize();\n if (trackScrollable <= 0) return;\n const scrollable = vp.scrollHeight - vp.clientHeight;\n const delta = event.clientY - this.dragStartY;\n vp.scrollTop = this.dragStartScrollTop + (delta / trackScrollable) * scrollable;\n }\n\n protected onPointerUp(): void {\n this.dragging = false;\n }\n\n /** Click on the track (not the thumb) pages toward the click. */\n protected onTrackPointerDown(event: PointerEvent): void {\n const vp = this.viewport().nativeElement;\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\n const clickY = event.clientY - rect.top;\n const dir = clickY < this.thumbOffset() ? -1 : 1;\n vp.scrollTop += dir * vp.clientHeight * 0.9;\n }\n\n private measure(): void {\n const vp = this.viewport().nativeElement;\n const { clientHeight, scrollHeight, scrollTop } = vp;\n const overflowing = scrollHeight > clientHeight + 1;\n this.overflowing.set(overflowing);\n if (!overflowing) {\n this.thumbSize.set(0);\n this.thumbOffset.set(0);\n return;\n }\n const size = Math.max(this.minThumb, (clientHeight / scrollHeight) * clientHeight);\n const scrollable = scrollHeight - clientHeight;\n const maxOffset = clientHeight - size;\n this.thumbSize.set(size);\n this.thumbOffset.set(scrollable > 0 ? (scrollTop / scrollable) * maxOffset : 0);\n }\n}\n","<div #viewport class=\"bpx-scroll-area__viewport\" (scroll)=\"onScroll()\">\n <div #content class=\"bpx-scroll-area__content\">\n <ng-content />\n </div>\n</div>\n\n<div\n class=\"bpx-scroll-area__bar\"\n [class.visible]=\"overflowing()\"\n (pointerdown)=\"onTrackPointerDown($event)\"\n>\n <div\n class=\"bpx-scroll-area__thumb\"\n [style.height.px]=\"thumbSize()\"\n [style.transform]=\"'translateY(' + thumbOffset() + 'px)'\"\n (pointerdown)=\"onThumbPointerDown($event)\"\n ></div>\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n forwardRef,\n input,\n model,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nconst DEFAULT_SWATCHES = [\n '#ef4444',\n '#f59e0b',\n '#10b981',\n '#3b82f6',\n '#6366f1',\n '#a855f7',\n '#ec4899',\n '#64748b',\n '#0f172a',\n '#ffffff',\n];\n\n/**\n * An HSV color picker: a saturation/value field, a hue slider, a hex input and\n * preset swatches. Value is a hex string. Works standalone with `[(value)]` and\n * as a form control.\n *\n * ```html\n * <bpx-color-picker [(value)]=\"brand\" />\n * <bpx-color-picker formControlName=\"accent\" [swatches]=\"palette\" />\n * ```\n */\n@Component({\n selector: 'bpx-color-picker',\n exportAs: 'bpxColorPicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './color-picker.html',\n styleUrl: './color-picker.scss',\n host: {\n class: 'bpx-color-picker',\n '[class.bpx-color-picker--disabled]': 'disabled()',\n '(pointermove)': 'onPointerMove($event)',\n '(pointerup)': 'onPointerUp()',\n '(pointercancel)': 'onPointerUp()',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ColorPicker), multi: true },\n ],\n})\nexport class ColorPicker implements ControlValueAccessor {\n /** Hex color. Two-way bindable via `[(value)]`. */\n readonly value = model('#3b82f6');\n readonly swatches = input<string[]>(DEFAULT_SWATCHES);\n\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n private readonly cvaDisabled = signal(false);\n protected readonly disabled = computed(() => this.disabledInput() || this.cvaDisabled());\n\n protected readonly hue = signal(217);\n protected readonly sat = signal(76);\n protected readonly val = signal(92);\n\n protected readonly hex = computed(() => hsvToHex(this.hue(), this.sat(), this.val()));\n protected readonly pureHue = computed(() => hsvToHex(this.hue(), 100, 100));\n\n private readonly svArea = viewChild.required<ElementRef<HTMLElement>>('svArea');\n private readonly hueTrack = viewChild.required<ElementRef<HTMLElement>>('hueTrack');\n\n private dragTarget: 'sv' | 'hue' | null = null;\n private onChange: (value: string) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n // Sync HSV from an external value change without looping on our own writes.\n effect(() => {\n const incoming = this.value();\n const currentHex = untracked(() => this.hex());\n if (incoming.toLowerCase() !== currentHex.toLowerCase()) {\n const hsv = hexToHsv(incoming);\n if (hsv) {\n this.hue.set(hsv.h);\n this.sat.set(hsv.s);\n this.val.set(hsv.v);\n }\n }\n });\n }\n\n protected onSvPointerDown(event: PointerEvent): void {\n if (this.disabled()) return;\n this.dragTarget = 'sv';\n this.svArea().nativeElement.setPointerCapture(event.pointerId);\n this.updateSv(event.clientX, event.clientY);\n }\n protected onHuePointerDown(event: PointerEvent): void {\n if (this.disabled()) return;\n this.dragTarget = 'hue';\n this.hueTrack().nativeElement.setPointerCapture(event.pointerId);\n this.updateHue(event.clientX);\n }\n protected onPointerMove(event: PointerEvent): void {\n if (this.dragTarget === 'sv') this.updateSv(event.clientX, event.clientY);\n else if (this.dragTarget === 'hue') this.updateHue(event.clientX);\n }\n protected onPointerUp(): void {\n if (this.dragTarget) {\n this.dragTarget = null;\n this.onTouched();\n }\n }\n\n protected onHexInput(event: Event): void {\n this.applyHex((event.target as HTMLInputElement).value);\n }\n protected pickSwatch(swatch: string): void {\n if (!this.disabled()) this.applyHex(swatch);\n }\n\n private updateSv(clientX: number, clientY: number): void {\n const rect = this.svArea().nativeElement.getBoundingClientRect();\n if (!rect.width || !rect.height) return;\n this.sat.set(Math.round(clamp01((clientX - rect.left) / rect.width) * 100));\n this.val.set(Math.round((1 - clamp01((clientY - rect.top) / rect.height)) * 100));\n this.commit();\n }\n private updateHue(clientX: number): void {\n const rect = this.hueTrack().nativeElement.getBoundingClientRect();\n if (!rect.width) return;\n this.hue.set(Math.round(clamp01((clientX - rect.left) / rect.width) * 360));\n this.commit();\n }\n\n private applyHex(raw: string): void {\n const hsv = hexToHsv(raw);\n if (!hsv) return;\n this.hue.set(hsv.h);\n this.sat.set(hsv.s);\n this.val.set(hsv.v);\n this.commit();\n }\n\n private commit(): void {\n const hex = this.hex();\n this.value.set(hex);\n this.onChange(hex);\n }\n\n // ── ControlValueAccessor ─────────────────────────────────────\n writeValue(value: string): void {\n if (value) this.value.set(value);\n }\n registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n\nfunction clamp01(n: number): number {\n return Math.min(1, Math.max(0, n));\n}\n\nfunction hsvToHex(h: number, s: number, v: number): string {\n s /= 100;\n v /= 100;\n const c = v * s;\n const hp = h / 60;\n const x = c * (1 - Math.abs((hp % 2) - 1));\n let r = 0;\n let g = 0;\n let b = 0;\n if (hp < 1) [r, g] = [c, x];\n else if (hp < 2) [r, g] = [x, c];\n else if (hp < 3) [g, b] = [c, x];\n else if (hp < 4) [g, b] = [x, c];\n else if (hp < 5) [r, b] = [x, c];\n else [r, b] = [c, x];\n const m = v - c;\n const to = (n: number) =>\n Math.round((n + m) * 255)\n .toString(16)\n .padStart(2, '0');\n return `#${to(r)}${to(g)}${to(b)}`;\n}\n\nfunction hexToHsv(hex: string): { h: number; s: number; v: number } | null {\n let h = hex.trim().replace(/^#/, '');\n if (h.length === 3) h = h.split('').map((c) => c + c).join('');\n if (!/^[0-9a-fA-F]{6}$/.test(h)) return null;\n const r = parseInt(h.slice(0, 2), 16) / 255;\n const g = parseInt(h.slice(2, 4), 16) / 255;\n const b = parseInt(h.slice(4, 6), 16) / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const d = max - min;\n let hue = 0;\n if (d !== 0) {\n if (max === r) hue = ((g - b) / d) % 6;\n else if (max === g) hue = (b - r) / d + 2;\n else hue = (r - g) / d + 4;\n hue = hue * 60;\n if (hue < 0) hue += 360;\n }\n return {\n h: Math.round(hue),\n s: Math.round((max === 0 ? 0 : d / max) * 100),\n v: Math.round(max * 100),\n };\n}\n","<div\n #svArea\n class=\"bpx-color-picker__sv\"\n [style.background-color]=\"pureHue()\"\n (pointerdown)=\"onSvPointerDown($event)\"\n>\n <div class=\"bpx-color-picker__sv-white\"></div>\n <div class=\"bpx-color-picker__sv-black\"></div>\n <div\n class=\"bpx-color-picker__sv-thumb\"\n [style.left.%]=\"sat()\"\n [style.top.%]=\"100 - val()\"\n [style.background]=\"hex()\"\n ></div>\n</div>\n\n<div #hueTrack class=\"bpx-color-picker__hue\" (pointerdown)=\"onHuePointerDown($event)\">\n <div class=\"bpx-color-picker__hue-thumb\" [style.left.%]=\"hue() / 3.6\"></div>\n</div>\n\n<div class=\"bpx-color-picker__foot\">\n <span class=\"bpx-color-picker__preview\" [style.background]=\"hex()\"></span>\n <input\n class=\"bpx-color-picker__hex\"\n [value]=\"hex()\"\n [disabled]=\"disabled()\"\n (change)=\"onHexInput($event)\"\n (keydown.enter)=\"onHexInput($event)\"\n aria-label=\"Hex color\"\n spellcheck=\"false\"\n />\n</div>\n\n@if (swatches().length) {\n <div class=\"bpx-color-picker__swatches\">\n @for (swatch of swatches(); track swatch) {\n <button\n type=\"button\"\n class=\"bpx-color-picker__swatch\"\n [style.background]=\"swatch\"\n [attr.aria-label]=\"swatch\"\n (click)=\"pickSwatch(swatch)\"\n ></button>\n }\n </div>\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { Icon } from '../icon/icon';\nimport { ToastService } from './toast.service';\n\n/** Semantic type of a toast. */\nexport type BpxToastType = 'info' | 'success' | 'warning' | 'danger';\n\n/** An optional action button rendered inside a toast. */\nexport interface BpxToastAction {\n label: string;\n run: () => void;\n}\n\nexport interface BpxToastOptions {\n type?: BpxToastType;\n /** Auto-dismiss delay in ms; `0` keeps it until dismissed. */\n duration?: number;\n action?: BpxToastAction;\n}\n\nexport interface BpxToast extends Required<Omit<BpxToastOptions, 'action'>> {\n id: number;\n message: string;\n action?: BpxToastAction;\n}\n\nconst ICONS: Record<BpxToastType, string> = {\n info: 'info',\n success: 'check',\n warning: 'warning',\n danger: 'warning',\n};\n\n/**\n * Renders the live stack of toasts. Created automatically by `ToastService`\n * in a top-right overlay — you never place this yourself.\n */\n@Component({\n selector: 'bpx-toast-container',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Icon],\n template: `\n @for (toast of toasts.toasts(); track toast.id) {\n <div\n class=\"bpx-toast\"\n [attr.data-type]=\"toast.type\"\n role=\"status\"\n (mouseenter)=\"toasts.pause(toast.id)\"\n (mouseleave)=\"toasts.resume(toast.id)\"\n >\n <bpx-icon class=\"bpx-toast__icon\" [name]=\"icon(toast.type)\" size=\"sm\" />\n <span class=\"bpx-toast__msg\">{{ toast.message }}</span>\n @if (toast.action; as action) {\n <button type=\"button\" class=\"bpx-toast__action\" (click)=\"runAction(toast)\">\n {{ action.label }}\n </button>\n }\n <button\n type=\"button\"\n class=\"bpx-toast__close\"\n aria-label=\"Dismiss\"\n (click)=\"toasts.dismiss(toast.id)\"\n >\n <bpx-icon name=\"close\" size=\"sm\" />\n </button>\n @if (toast.duration > 0) {\n <div\n class=\"bpx-toast__progress\"\n [style.animation-duration.ms]=\"toast.duration\"\n aria-hidden=\"true\"\n ></div>\n }\n </div>\n }\n `,\n styleUrl: './toast.scss',\n host: {\n class: 'bpx-toast-container',\n role: 'region',\n 'aria-label': 'Notifications',\n 'aria-live': 'polite',\n },\n})\nexport class ToastContainer {\n protected readonly toasts = inject(ToastService);\n\n protected icon(type: BpxToastType): string {\n return ICONS[type];\n }\n\n protected runAction(toast: BpxToast): void {\n toast.action?.run();\n this.toasts.dismiss(toast.id);\n }\n}\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, Injector, PLATFORM_ID, signal } from '@angular/core';\nimport { BpxToast, BpxToastOptions, ToastContainer } from './toast';\n\n/**\n * Fires transient toast notifications. They render in a single top-right overlay\n * that the service lazily creates on first use.\n *\n * ```ts\n * const toasts = inject(ToastService);\n * toasts.success('Saved');\n * toasts.error('Upload failed', { action: { label: 'Retry', run: () => retry() } });\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class ToastService {\n private readonly overlay = inject(Overlay);\n private readonly injector = inject(Injector);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private readonly list = signal<BpxToast[]>([]);\n /** The current live toasts (read-only). */\n readonly toasts = this.list.asReadonly();\n\n private overlayRef?: OverlayRef;\n private counter = 0;\n private readonly timers = new Map<number, ReturnType<typeof setTimeout>>();\n /** Milliseconds still to run before auto-dismiss (updated on pause). */\n private readonly remaining = new Map<number, number>();\n /** Wall-clock time the current running timer was (re)started. */\n private readonly startedAt = new Map<number, number>();\n\n show(message: string, options: BpxToastOptions = {}): number {\n if (!this.isBrowser) return -1;\n this.ensureContainer();\n const id = ++this.counter;\n const duration = options.duration ?? 4000;\n this.list.update((toasts) => [\n ...toasts,\n { id, message, type: options.type ?? 'info', duration, action: options.action },\n ]);\n if (duration > 0) {\n this.remaining.set(id, duration);\n this.startTimer(id);\n }\n return id;\n }\n\n /** Pause a toast's auto-dismiss countdown (e.g. while hovered). */\n pause(id: number): void {\n const timer = this.timers.get(id);\n if (timer === undefined) return; // not running / no auto-dismiss\n clearTimeout(timer);\n this.timers.delete(id);\n const elapsed = Date.now() - (this.startedAt.get(id) ?? Date.now());\n const left = (this.remaining.get(id) ?? 0) - elapsed;\n this.remaining.set(id, Math.max(0, left));\n }\n\n /** Resume a paused countdown with whatever time was left. */\n resume(id: number): void {\n if (this.timers.has(id)) return; // already running\n if (!this.remaining.has(id)) return; // no auto-dismiss for this toast\n this.startTimer(id);\n }\n\n private startTimer(id: number): void {\n const ms = this.remaining.get(id);\n if (ms === undefined || ms <= 0) return;\n this.startedAt.set(id, Date.now());\n this.timers.set(\n id,\n setTimeout(() => this.dismiss(id), ms),\n );\n }\n\n success(message: string, options?: BpxToastOptions): number {\n return this.show(message, { ...options, type: 'success' });\n }\n error(message: string, options?: BpxToastOptions): number {\n return this.show(message, { ...options, type: 'danger' });\n }\n warning(message: string, options?: BpxToastOptions): number {\n return this.show(message, { ...options, type: 'warning' });\n }\n info(message: string, options?: BpxToastOptions): number {\n return this.show(message, { ...options, type: 'info' });\n }\n\n dismiss(id: number): void {\n const timer = this.timers.get(id);\n if (timer !== undefined) {\n clearTimeout(timer);\n this.timers.delete(id);\n }\n this.remaining.delete(id);\n this.startedAt.delete(id);\n this.list.update((toasts) => toasts.filter((t) => t.id !== id));\n }\n\n clear(): void {\n this.timers.forEach((t) => clearTimeout(t));\n this.timers.clear();\n this.remaining.clear();\n this.startedAt.clear();\n this.list.set([]);\n }\n\n private ensureContainer(): void {\n if (this.overlayRef) return;\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay.position().global().top('1rem').right('1rem'),\n });\n this.overlayRef.attach(new ComponentPortal(ToastContainer, null, this.injector));\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { Icon } from '../icon/icon';\nimport { Menu } from './menu';\n\n/**\n * An action inside a `<bpx-menu>`. Emits `select` and closes the menu when\n * activated.\n *\n * ```html\n * <bpx-menu-item icon=\"check\" (select)=\"save()\">Save</bpx-menu-item>\n * <bpx-menu-item variant=\"danger\" (select)=\"remove()\">Delete</bpx-menu-item>\n * ```\n */\n@Component({\n selector: 'bpx-menu-item',\n exportAs: 'bpxMenuItem',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Icon],\n template: `\n @if (icon(); as ic) {\n <bpx-icon class=\"bpx-menu-item__icon\" [name]=\"ic\" size=\"sm\" />\n }\n <span class=\"bpx-menu-item__label\"><ng-content /></span>\n `,\n styleUrl: './menu-item.scss',\n host: {\n class: 'bpx-menu-item',\n role: 'menuitem',\n tabindex: '-1',\n '[attr.aria-disabled]': 'disabled() || null',\n '[class.bpx-menu-item--danger]': \"variant() === 'danger'\",\n '[class.bpx-menu-item--disabled]': 'disabled()',\n '(click)': 'activate()',\n },\n})\nexport class MenuItem {\n readonly icon = input<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly variant = input<'default' | 'danger'>('default');\n readonly select = output<void>();\n\n private readonly menu = inject(Menu);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n get element(): HTMLElement {\n return this.el.nativeElement;\n }\n\n focus(): void {\n this.el.nativeElement.focus();\n }\n\n protected activate(): void {\n if (this.disabled()) return;\n this.select.emit();\n this.menu.close();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n inject,\n output,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport { MenuItem } from './menu-item';\n\n/**\n * A dropdown menu panel. Holds `<bpx-menu-item>`s and is opened by an element\n * carrying `[bpxMenuTriggerFor]`. It renders nothing inline until opened.\n *\n * ```html\n * <button bpx-button [bpxMenuTriggerFor]=\"menu\">Actions</button>\n * <bpx-menu #menu>\n * <bpx-menu-item icon=\"check\" (select)=\"publish()\">Publish</bpx-menu-item>\n * <bpx-menu-item variant=\"danger\" (select)=\"remove()\">Delete</bpx-menu-item>\n * </bpx-menu>\n * ```\n */\n@Component({\n selector: 'bpx-menu',\n exportAs: 'bpxMenu',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-template>\n <div class=\"bpx-menu\" role=\"menu\" (keydown)=\"onKeydown($event)\">\n <ng-content />\n </div>\n </ng-template>\n `,\n styleUrl: './menu.scss',\n})\nexport class Menu {\n readonly template = viewChild.required(TemplateRef);\n readonly items = contentChildren(MenuItem);\n /** Emitted when the menu asks to close (item chosen, Escape, or Tab). */\n readonly closed = output<void>();\n\n private readonly doc = inject(DOCUMENT);\n\n close(): void {\n this.closed.emit();\n }\n\n /** Focus the first enabled item — called by the trigger after opening. */\n focusFirst(): void {\n this.enabledItems()[0]?.focus();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' || event.key === 'Tab') {\n this.close();\n return;\n }\n const items = this.enabledItems();\n if (!items.length) return;\n const current = items.findIndex((it) => it.element === this.doc.activeElement);\n let next = -1;\n switch (event.key) {\n case 'ArrowDown':\n next = current < 0 ? 0 : (current + 1) % items.length;\n break;\n case 'ArrowUp':\n next = current <= 0 ? items.length - 1 : current - 1;\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = items.length - 1;\n break;\n default:\n return;\n }\n event.preventDefault();\n items[next]?.focus();\n }\n\n private enabledItems(): MenuItem[] {\n return this.items().filter((it) => !it.disabled());\n }\n}\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n/**\n * Marks an `<ng-template>` as the custom cell renderer for a column, keyed by\n * the column's `key`. The row is the template's implicit context.\n *\n * ```html\n * <ng-template bpxCell=\"status\" let-row>\n * <bpx-badge [color]=\"row.active ? 'success' : 'neutral'\">{{ row.status }}</bpx-badge>\n * </ng-template>\n * ```\n */\n@Directive({ selector: '[bpxCell]' })\nexport class BpxCellDef {\n readonly column = input.required<string>({ alias: 'bpxCell' });\n readonly template = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n input,\n model,\n TemplateRef,\n} from '@angular/core';\nimport { Checkbox } from '../checkbox/checkbox';\nimport { Icon } from '../icon/icon';\nimport { BpxCellDef } from './cell-def';\n\n/** A column definition for `<bpx-table>`. */\nexport interface BpxColumn {\n key: string;\n header: string;\n sortable?: boolean;\n align?: 'start' | 'center' | 'end';\n /** Any CSS width, e.g. `'40%'` or `'8rem'`. */\n width?: string;\n}\n\nexport interface BpxSort {\n key: string;\n direction: 'asc' | 'desc';\n}\n\n/**\n * A data table with column-config, click-to-sort, row selection (built on\n * `bpx-checkbox`), an optional sticky header, and custom cell templates via\n * `[bpxCell]`.\n *\n * ```html\n * <bpx-table [columns]=\"cols\" [data]=\"rows\" selectable [(selected)]=\"picked\">\n * <ng-template bpxCell=\"status\" let-row>\n * <bpx-badge [color]=\"row.color\">{{ row.status }}</bpx-badge>\n * </ng-template>\n * </bpx-table>\n * ```\n */\n@Component({\n selector: 'bpx-table',\n exportAs: 'bpxTable',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Icon, Checkbox, NgTemplateOutlet],\n templateUrl: './table.html',\n styleUrl: './table.scss',\n host: { class: 'bpx-table-host' },\n})\nexport class Table<T = Record<string, unknown>> {\n readonly columns = input<BpxColumn[]>([]);\n readonly data = input<T[]>([]);\n readonly selectable = input(false, { transform: booleanAttribute });\n readonly stickyHeader = input(false, { transform: booleanAttribute });\n /** Active sort. Two-way bindable. */\n readonly sort = model<BpxSort | null>(null);\n /** Selected rows (by reference). Two-way bindable. */\n readonly selected = model<T[]>([]);\n\n private readonly cellDefs = contentChildren(BpxCellDef);\n\n protected readonly sortedData = computed<T[]>(() => {\n const sort = this.sort();\n const rows = this.data();\n if (!sort) return rows;\n const dir = sort.direction === 'asc' ? 1 : -1;\n return [...rows].sort((a, b) => {\n const av = (a as Record<string, unknown>)[sort.key];\n const bv = (b as Record<string, unknown>)[sort.key];\n if (av == null) return 1;\n if (bv == null) return -1;\n if (typeof av === 'number' && typeof bv === 'number') return (av - bv) * dir;\n return String(av).localeCompare(String(bv)) * dir;\n });\n });\n\n private readonly selectedCount = computed(() => {\n const sel = this.selected();\n return this.data().filter((r) => sel.includes(r)).length;\n });\n protected readonly allSelected = computed(\n () => this.data().length > 0 && this.selectedCount() === this.data().length,\n );\n protected readonly someSelected = computed(\n () => this.selectedCount() > 0 && !this.allSelected(),\n );\n protected readonly colspan = computed(\n () => this.columns().length + (this.selectable() ? 1 : 0),\n );\n\n protected cellValue(row: T, key: string): unknown {\n return (row as Record<string, unknown>)[key];\n }\n\n protected cellTemplate(key: string): TemplateRef<unknown> | null {\n return this.cellDefs().find((d) => d.column() === key)?.template ?? null;\n }\n\n protected ariaSort(col: BpxColumn): 'ascending' | 'descending' | 'none' | null {\n if (!col.sortable) return null;\n const sort = this.sort();\n if (sort?.key !== col.key) return 'none';\n return sort.direction === 'asc' ? 'ascending' : 'descending';\n }\n\n protected toggleSort(col: BpxColumn): void {\n if (!col.sortable) return;\n const sort = this.sort();\n if (sort?.key !== col.key) {\n this.sort.set({ key: col.key, direction: 'asc' });\n } else if (sort.direction === 'asc') {\n this.sort.set({ key: col.key, direction: 'desc' });\n } else {\n this.sort.set(null);\n }\n }\n\n protected isSelected(row: T): boolean {\n return this.selected().includes(row);\n }\n\n protected toggleRow(row: T): void {\n const sel = this.selected();\n this.selected.set(sel.includes(row) ? sel.filter((r) => r !== row) : [...sel, row]);\n }\n\n protected toggleAll(checked: boolean): void {\n this.selected.set(checked ? [...this.data()] : []);\n }\n}\n","<table class=\"bpx-table\" [class.sticky]=\"stickyHeader()\">\n <thead>\n <tr>\n @if (selectable()) {\n <th class=\"bpx-table__check\">\n <bpx-checkbox\n size=\"sm\"\n [checked]=\"allSelected()\"\n [indeterminate]=\"someSelected()\"\n (checkedChange)=\"toggleAll($event)\"\n aria-label=\"Select all rows\"\n />\n </th>\n }\n @for (col of columns(); track col.key) {\n <th\n scope=\"col\"\n [style.width]=\"col.width\"\n [attr.data-align]=\"col.align\"\n [class.sortable]=\"col.sortable\"\n [attr.aria-sort]=\"ariaSort(col)\"\n (click)=\"toggleSort(col)\"\n >\n <span class=\"bpx-table__th\">\n {{ col.header }}\n @if (col.sortable) {\n <bpx-icon\n class=\"bpx-table__sort\"\n [class.active]=\"sort()?.key === col.key\"\n [class.desc]=\"sort()?.key === col.key && sort()?.direction === 'desc'\"\n name=\"chevron-down\"\n size=\"sm\"\n />\n }\n </span>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of sortedData(); track $index) {\n <tr [class.selected]=\"isSelected(row)\">\n @if (selectable()) {\n <td class=\"bpx-table__check\">\n <bpx-checkbox\n size=\"sm\"\n [checked]=\"isSelected(row)\"\n (checkedChange)=\"toggleRow(row)\"\n aria-label=\"Select row\"\n />\n </td>\n }\n @for (col of columns(); track col.key) {\n <td [attr.data-align]=\"col.align\">\n @if (cellTemplate(col.key); as tpl) {\n <ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ $implicit: row }\" />\n } @else {\n {{ cellValue(row, col.key) }}\n }\n </td>\n }\n </tr>\n } @empty {\n <tr>\n <td class=\"bpx-table__empty\" [attr.colspan]=\"colspan()\">No data</td>\n </tr>\n }\n </tbody>\n</table>\n","import type {\n BpxPivotAggregation,\n BpxPivotCell,\n BpxPivotColumnNode,\n BpxPivotConfig,\n BpxPivotField,\n BpxPivotLeafColumn,\n BpxPivotModel,\n BpxPivotRowNode,\n BpxPivotSort,\n BpxPivotValue,\n} from './pivot-types';\n\n/** A record the pivot can read. Consumers pass their own row objects. */\nexport type PivotRecord = Record<string, unknown>;\n\nconst SEP = '\u0000'; // path-segment separator, unlikely to appear in data\nconst NULL_LABEL = '(blank)';\n\n/** Human labels for the aggregation captions (\"Sum of X\"). */\nconst AGG_LABEL: Record<BpxPivotAggregation, string> = {\n sum: 'Sum',\n count: 'Count',\n avg: 'Average',\n min: 'Min',\n max: 'Max',\n countDistinct: 'Distinct',\n};\n\n/** Options controlling what the engine emits (mostly wired from grid inputs). */\nexport interface PivotEngineOptions {\n /** Append a grand-total row across everything. Default true. */\n grandTotalRow?: boolean;\n /** Append a grand-total column when column fields exist. Default true. */\n grandTotalColumn?: boolean;\n /** Show subtotal rows for parent groups. Default true. When false, only leaf\n * rows carry values (parents render as bare labels). */\n subtotals?: boolean;\n}\n\n/** Look up a field definition by key, or synthesize a default one. */\nfunction fieldFor(fields: BpxPivotField[], key: string): BpxPivotField {\n return fields.find((f) => f.key === key) ?? { key };\n}\n\nfunction labelOf(field: BpxPivotField): string {\n return field.label ?? field.key;\n}\n\n/** Stringify a raw member value for grouping + display. */\nfunction memberLabel(field: BpxPivotField, raw: unknown): string {\n if (raw == null || raw === '') return NULL_LABEL;\n if (field.formatLabel) return field.formatLabel(raw);\n return String(raw);\n}\n\n/** The default caption for a value column, e.g. \"Sum of Revenue\". */\nfunction valueLabel(fields: BpxPivotField[], value: BpxPivotValue): string {\n if (value.label) return value.label;\n return `${AGG_LABEL[value.aggregation]} of ${labelOf(fieldFor(fields, value.key))}`;\n}\n\n/** Coerce a cell to a finite number, or null if it isn't numeric. */\nfunction toNumber(raw: unknown): number | null {\n if (typeof raw === 'number') return Number.isFinite(raw) ? raw : null;\n if (typeof raw === 'string' && raw.trim() !== '') {\n const n = Number(raw);\n return Number.isFinite(n) ? n : null;\n }\n return null;\n}\n\n/** Run one aggregation over a set of records. Returns NaN for an empty set. */\nfunction aggregate(\n records: PivotRecord[],\n key: string,\n agg: BpxPivotAggregation,\n): number {\n if (agg === 'count') {\n let n = 0;\n for (const r of records) if (r[key] != null && r[key] !== '') n++;\n return n;\n }\n if (agg === 'countDistinct') {\n const seen = new Set<unknown>();\n for (const r of records) if (r[key] != null && r[key] !== '') seen.add(r[key]);\n return seen.size;\n }\n let sum = 0;\n let count = 0;\n let min = Infinity;\n let max = -Infinity;\n for (const r of records) {\n const n = toNumber(r[key]);\n if (n == null) continue;\n sum += n;\n count++;\n if (n < min) min = n;\n if (n > max) max = n;\n }\n if (count === 0) return NaN;\n switch (agg) {\n case 'sum':\n return sum;\n case 'avg':\n return sum / count;\n case 'min':\n return min;\n case 'max':\n return max;\n default:\n return sum;\n }\n}\n\n/** Format an aggregated number for display. */\nfunction formatCell(field: BpxPivotField, value: number): string {\n if (Number.isNaN(value)) return '';\n if (field.format) return field.format(value);\n // Trim to at most 2 decimals but keep integers clean.\n const rounded = Math.round(value * 100) / 100;\n return rounded.toLocaleString(undefined, { maximumFractionDigits: 2 });\n}\n\n/** Numeric-aware comparator for member labels (so \"2\" < \"10\"). */\nfunction compareLabels(a: string, b: string): number {\n const na = Number(a);\n const nb = Number(b);\n if (!Number.isNaN(na) && !Number.isNaN(nb)) return na - nb;\n return a.localeCompare(b);\n}\n\n// ── Column axis ──────────────────────────────────────────────────────────────\n\n/** A mutable node while building the column tree. */\ninterface ColBuild {\n key: string;\n label: string;\n path: string[];\n children: Map<string, ColBuild>;\n}\n\n/**\n * Build the ordered list of distinct column-group paths (the leaves of the\n * column tree) plus the per-level header nodes with colspans.\n */\nfunction buildColumnAxis(\n data: PivotRecord[],\n fields: BpxPivotField[],\n columns: string[],\n valueCount: number,\n sort: BpxPivotSort | undefined,\n): { leafPaths: string[][]; levels: BpxPivotColumnNode[][] } {\n if (columns.length === 0) return { leafPaths: [[]], levels: [] };\n\n const root: ColBuild = { key: '', label: '', path: [], children: new Map() };\n for (const rec of data) {\n let node = root;\n const path: string[] = [];\n for (const key of columns) {\n const label = memberLabel(fieldFor(fields, key), rec[key]);\n path.push(label);\n let child = node.children.get(label);\n if (!child) {\n child = { key: label, label, path: [...path], children: new Map() };\n node.children.set(label, child);\n }\n node = child;\n }\n }\n\n const dir = sort?.direction === 'desc' ? -1 : 1;\n const sortKids = (node: ColBuild): ColBuild[] => {\n const kids = [...node.children.values()];\n kids.sort((a, b) => compareLabels(a.label, b.label) * dir);\n return kids;\n };\n\n const leafPaths: string[][] = [];\n const levels: BpxPivotColumnNode[][] = columns.map(() => []);\n\n // Depth-first so leaves come out in header order; compute spans on the way up.\n const walk = (node: ColBuild, depth: number): number => {\n const kids = sortKids(node);\n if (kids.length === 0) {\n leafPaths.push(node.path);\n return valueCount;\n }\n let span = 0;\n for (const kid of kids) {\n const kidSpan = walk(kid, depth + 1);\n levels[depth].push({\n key: kid.key,\n label: kid.label,\n path: kid.path,\n depth,\n children: [],\n span: kidSpan,\n });\n span += kidSpan;\n }\n return span;\n };\n walk(root, 0);\n\n return { leafPaths, levels };\n}\n\n/** Assemble the flat leaf-column list (measure × column-leaf, then grand total). */\nfunction buildLeafColumns(\n fields: BpxPivotField[],\n values: BpxPivotValue[],\n leafPaths: string[][],\n hasColumnFields: boolean,\n grandTotalColumn: boolean,\n): BpxPivotLeafColumn[] {\n const out: BpxPivotLeafColumn[] = [];\n const makeCols = (path: string[], grandTotal: boolean) => {\n for (const value of values) {\n out.push({\n id: `${path.join(SEP)}${SEP}${value.key}${SEP}${value.aggregation}${grandTotal ? SEP + 'gt' : ''}`,\n path,\n value,\n label: valueLabel(fields, value),\n align: 'end',\n grandTotal,\n });\n }\n };\n for (const path of leafPaths) makeCols(path, false);\n if (hasColumnFields && grandTotalColumn) makeCols([], true);\n return out;\n}\n\n// ── Row axis ─────────────────────────────────────────────────────────────────\n\ninterface RowBuild {\n key: string;\n label: string;\n path: string[];\n records: PivotRecord[];\n children: Map<string, RowBuild>;\n}\n\nfunction buildRowTree(\n data: PivotRecord[],\n fields: BpxPivotField[],\n rows: string[],\n): RowBuild {\n const root: RowBuild = { key: '', label: '', path: [], records: [], children: new Map() };\n for (const rec of data) {\n root.records.push(rec);\n let node = root;\n const path: string[] = [];\n for (const key of rows) {\n const label = memberLabel(fieldFor(fields, key), rec[key]);\n path.push(label);\n let child = node.children.get(label);\n if (!child) {\n child = { key: label, label, path: [...path], records: [], children: new Map() };\n node.children.set(label, child);\n }\n child.records.push(rec);\n node = child;\n }\n }\n return root;\n}\n\n/**\n * Compute the cells for one record set against every leaf column. Records are\n * bucketed by their column-path once, then each leaf column reads its bucket.\n */\nfunction computeCells(\n records: PivotRecord[],\n fields: BpxPivotField[],\n columns: string[],\n leafColumns: BpxPivotLeafColumn[],\n total: boolean,\n): BpxPivotCell[] {\n // Bucket records by column path (only needed when column fields exist).\n const buckets = new Map<string, PivotRecord[]>();\n if (columns.length > 0) {\n for (const rec of records) {\n const key = columns\n .map((c) => memberLabel(fieldFor(fields, c), rec[c]))\n .join(SEP);\n const bucket = buckets.get(key);\n if (bucket) bucket.push(rec);\n else buckets.set(key, [rec]);\n }\n }\n\n return leafColumns.map((col) => {\n const source =\n columns.length === 0 || col.grandTotal\n ? records\n : (buckets.get(col.path.join(SEP)) ?? []);\n const field = fieldFor(fields, col.value.key);\n const value = aggregate(source, col.value.key, col.value.aggregation);\n return { value, display: formatCell(field, value), total };\n });\n}\n\n// ── Public entry point ─────────────────────────────────────────────────────\n\n/**\n * Cross-tabulate `data` into a full pivot model according to `config`. Pure and\n * synchronous — the grid calls this inside a `computed()` so it re-runs only\n * when data/config change.\n */\nexport function computePivot(\n data: PivotRecord[],\n fields: BpxPivotField[],\n config: BpxPivotConfig,\n options: PivotEngineOptions = {},\n): BpxPivotModel {\n const { grandTotalRow = true, grandTotalColumn = true, subtotals = true } = options;\n const valueCount = config.values.length;\n\n // Report filters run first.\n const filtered = applyFilters(data, fields, config);\n\n const { leafPaths, levels } = buildColumnAxis(\n filtered,\n fields,\n config.columns,\n Math.max(1, valueCount),\n config.columnSort,\n );\n const leafColumns = buildLeafColumns(\n fields,\n config.values,\n leafPaths,\n config.columns.length > 0,\n grandTotalColumn,\n );\n\n const tree = buildRowTree(filtered, fields, config.rows);\n const rowSort = config.rowSort;\n\n // Recursively convert the build-tree into render nodes with cells.\n const toRowNode = (node: RowBuild, depth: number): BpxPivotRowNode => {\n const kids = [...node.children.values()];\n sortRowNodes(kids, rowSort, fields, config, leafColumns);\n const expandable = kids.length > 0;\n const isLeaf = !expandable;\n // Parents show subtotals (unless disabled); leaves always show their values.\n const showCells = isLeaf || subtotals;\n return {\n path: node.path,\n key: node.key,\n label: node.label,\n depth,\n expandable,\n grandTotal: false,\n cells: showCells\n ? computeCells(node.records, fields, config.columns, leafColumns, !isLeaf)\n : leafColumns.map(() => ({ value: NaN, display: '', total: true })),\n children: kids.map((k) => toRowNode(k, depth + 1)),\n };\n };\n\n const rootKids = [...tree.children.values()];\n sortRowNodes(rootKids, rowSort, fields, config, leafColumns);\n const rows = rootKids.map((k) => toRowNode(k, 0));\n\n if (grandTotalRow && (config.rows.length > 0 || leafColumns.length > 0)) {\n rows.push({\n path: ['\u0000grand-total'],\n key: '\u0000grand-total',\n label: 'Grand Total',\n depth: 0,\n expandable: false,\n grandTotal: true,\n cells: computeCells(tree.records, fields, config.columns, leafColumns, true),\n children: [],\n });\n }\n\n return {\n leafColumns,\n columnLevels: levels,\n rows,\n rowFields: config.rows.map((k) => labelOf(fieldFor(fields, k))),\n columnFieldCount: config.columns.length,\n valueCount,\n hasGrandTotalColumn: config.columns.length > 0 && grandTotalColumn,\n };\n}\n\n/** Drop records that fail any active report filter. */\nfunction applyFilters(\n data: PivotRecord[],\n fields: BpxPivotField[],\n config: BpxPivotConfig,\n): PivotRecord[] {\n const active = (config.filters ?? []).filter((f) => f.included !== undefined);\n if (active.length === 0) return data;\n return data.filter((rec) =>\n active.every((f) => {\n const label = memberLabel(fieldFor(fields, f.key), rec[f.key]);\n return f.included!.includes(label);\n }),\n );\n}\n\n/** Sort a level of row nodes in place per the row-sort config. */\nfunction sortRowNodes(\n nodes: RowBuild[],\n sort: BpxPivotSort | undefined,\n fields: BpxPivotField[],\n config: BpxPivotConfig,\n leafColumns: BpxPivotLeafColumn[],\n): void {\n const dir = sort?.direction === 'desc' ? -1 : 1;\n if (sort?.by === 'value' && sort.measure != null && leafColumns[sort.measure]) {\n const col = leafColumns[sort.measure];\n const measure = (n: RowBuild) =>\n aggregate(n.records, col.value.key, col.value.aggregation);\n nodes.sort((a, b) => {\n const av = measure(a);\n const bv = measure(b);\n if (Number.isNaN(av)) return 1;\n if (Number.isNaN(bv)) return -1;\n return (av - bv) * dir;\n });\n return;\n }\n nodes.sort((a, b) => compareLabels(a.label, b.label) * dir);\n}\n\n/**\n * Flatten a row tree into visible rows given a set of collapsed path-keys. The\n * grid uses this for rendering (and virtualization) so expand/collapse never\n * re-runs the aggregation.\n */\nexport function flattenRows(\n rows: BpxPivotRowNode[],\n collapsed: ReadonlySet<string>,\n): BpxPivotRowNode[] {\n const out: BpxPivotRowNode[] = [];\n const visit = (node: BpxPivotRowNode) => {\n out.push(node);\n if (node.expandable && !collapsed.has(rowKey(node))) {\n for (const child of node.children) visit(child);\n }\n };\n for (const node of rows) visit(node);\n return out;\n}\n\n/** Stable identity for a row node (used for expand state + `track`). */\nexport function rowKey(node: BpxPivotRowNode): string {\n return node.path.join(SEP);\n}\n\n/** List the distinct member labels for a field, for the filter checkbox list. */\nexport function distinctMembers(\n data: PivotRecord[],\n fields: BpxPivotField[],\n key: string,\n): string[] {\n const field = fieldFor(fields, key);\n const seen = new Set<string>();\n for (const rec of data) seen.add(memberLabel(field, rec[key]));\n return [...seen].sort(compareLabels);\n}\n","import {\n CdkDrag,\n CdkDragDrop,\n CdkDropList,\n CdkDropListGroup,\n moveItemInArray,\n} from '@angular/cdk/drag-drop';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { Checkbox } from '../checkbox/checkbox';\nimport { Icon } from '../icon/icon';\nimport { IconRegistry } from '../icon/icon-registry';\nimport { distinctMembers, type PivotRecord } from './pivot-engine';\nimport type {\n BpxPivotAggregation,\n BpxPivotArea,\n BpxPivotConfig,\n BpxPivotField,\n BpxPivotValue,\n} from './pivot-types';\n\n/** A field resolved for display in one of the pane's area boxes. */\ninterface PaneChip {\n key: string;\n label: string;\n /** Only set for Values chips. */\n aggregation?: BpxPivotAggregation;\n /** True when a value filter is narrowing this dimension. */\n filtered: boolean;\n}\n\n/**\n * The Excel-style \"PivotTable Fields\" pane: a list of available fields on top,\n * and four drop areas (Filters, Columns, Rows, Values) below. Drag fields\n * between areas to reshape the pivot; pick an aggregation per value; filter the\n * members of any dimension. Binds to the same `[(config)]` as the grid.\n */\n@Component({\n selector: 'bpx-pivot-field-pane',\n exportAs: 'bpxPivotFieldPane',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CdkDropListGroup, CdkDropList, CdkDrag, Icon, Checkbox],\n templateUrl: './pivot-field-pane.html',\n styleUrl: './pivot-field-pane.scss',\n host: { class: 'bpx-pivot-field-pane' },\n})\nexport class PivotFieldPane {\n readonly fields = input<BpxPivotField[]>([]);\n readonly data = input<PivotRecord[]>([]);\n readonly config = model.required<BpxPivotConfig>();\n\n private readonly registry = inject(IconRegistry);\n\n constructor() {\n // Register the funnel glyph used on filtered dimension chips.\n this.registry.register(\n 'funnel',\n '<path d=\"M3 4h18l-7 8v6l-4 2v-8L3 4Z\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"/>',\n );\n }\n\n readonly aggregations: { value: BpxPivotAggregation; label: string }[] = [\n { value: 'sum', label: 'Sum' },\n { value: 'count', label: 'Count' },\n { value: 'avg', label: 'Average' },\n { value: 'min', label: 'Min' },\n { value: 'max', label: 'Max' },\n { value: 'countDistinct', label: 'Count Distinct' },\n ];\n\n /** Which dimension's filter panel is open (by field key), or null. */\n protected readonly openFilter = signal<string | null>(null);\n\n private label(key: string): string {\n const f = this.fields().find((x) => x.key === key);\n return f?.label ?? key;\n }\n\n private isFiltered(key: string): boolean {\n const f = this.config().filters.find((x) => x.key === key);\n return !!f && f.included !== undefined;\n }\n\n /** Keys already placed somewhere — hidden from the \"available\" list. */\n private readonly usedKeys = computed(() => {\n const c = this.config();\n return new Set([\n ...c.rows,\n ...c.columns,\n ...c.values.map((v) => v.key),\n ...c.filters.map((f) => f.key),\n ]);\n });\n\n protected readonly available = computed<PaneChip[]>(() =>\n this.fields()\n .filter((f) => !this.usedKeys().has(f.key))\n .map((f) => ({ key: f.key, label: f.label ?? f.key, filtered: false })),\n );\n\n protected readonly rowChips = computed<PaneChip[]>(() =>\n this.config().rows.map((k) => ({ key: k, label: this.label(k), filtered: this.isFiltered(k) })),\n );\n protected readonly columnChips = computed<PaneChip[]>(() =>\n this.config().columns.map((k) => ({ key: k, label: this.label(k), filtered: this.isFiltered(k) })),\n );\n protected readonly filterChips = computed<PaneChip[]>(() =>\n this.config().filters.map((f) => ({\n key: f.key,\n label: this.label(f.key),\n filtered: f.included !== undefined,\n })),\n );\n protected readonly valueChips = computed<PaneChip[]>(() =>\n this.config().values.map((v) => ({\n key: v.key,\n label: this.label(v.key),\n aggregation: v.aggregation,\n filtered: false,\n })),\n );\n\n // ── Drag & drop ──────────────────────────────────────────────────────────\n protected onDrop(event: CdkDragDrop<PaneChip[]>, target: BpxPivotArea | 'available'): void {\n const key = event.item.data as string;\n const from = event.previousContainer.id as BpxPivotArea | 'available';\n\n if (from === target) {\n if (target !== 'available') this.reorder(target, event.previousIndex, event.currentIndex);\n return;\n }\n // Move between areas: drop from the source, add to the target.\n const next = this.removeKey(this.config(), key);\n this.config.set(\n target === 'available' ? next : this.addKey(next, target, key, event.currentIndex),\n );\n }\n\n private reorder(area: BpxPivotArea, from: number, to: number): void {\n const c = this.config();\n if (area === 'values') {\n const values = [...c.values];\n moveItemInArray(values, from, to);\n this.config.set({ ...c, values });\n } else {\n const arr = [...c[area]];\n moveItemInArray(arr, from, to);\n this.config.set({ ...c, [area]: arr });\n }\n }\n\n private removeKey(c: BpxPivotConfig, key: string): BpxPivotConfig {\n return {\n ...c,\n rows: c.rows.filter((k) => k !== key),\n columns: c.columns.filter((k) => k !== key),\n values: c.values.filter((v) => v.key !== key),\n filters: c.filters.filter((f) => f.key !== key),\n };\n }\n\n private addKey(\n c: BpxPivotConfig,\n area: BpxPivotArea,\n key: string,\n index: number,\n ): BpxPivotConfig {\n if (area === 'values') {\n const value = this.newValue(key);\n const values = [...c.values];\n values.splice(clamp(index, values.length), 0, value);\n return { ...c, values };\n }\n if (area === 'filters') {\n const filters = [...c.filters];\n filters.splice(clamp(index, filters.length), 0, { key });\n return { ...c, filters };\n }\n const arr = [...c[area]];\n arr.splice(clamp(index, arr.length), 0, key);\n return { ...c, [area]: arr };\n }\n\n private newValue(key: string): BpxPivotValue {\n const field = this.fields().find((f) => f.key === key);\n const numeric =\n field?.kind === 'measure' ||\n (field?.kind == null && typeof this.data().find((r) => r[key] != null)?.[key] === 'number');\n return {\n key,\n aggregation: field?.defaultAggregation ?? (numeric ? 'sum' : 'count'),\n };\n }\n\n /** Remove a chip from its area (the × button). */\n protected remove(key: string): void {\n this.config.set(this.removeKey(this.config(), key));\n }\n\n /** Change the aggregation on a Values chip. */\n protected changeAggregation(index: number, agg: string): void {\n const c = this.config();\n const values = c.values.map((v, i) =>\n i === index ? { ...v, aggregation: agg as BpxPivotAggregation } : v,\n );\n this.config.set({ ...c, values });\n }\n\n // ── Value filters ──────────────────────────────────────────────────────\n protected toggleFilterPanel(key: string): void {\n this.openFilter.set(this.openFilter() === key ? null : key);\n }\n\n protected membersFor(key: string): string[] {\n return distinctMembers(this.data(), this.fields(), key);\n }\n\n /** \"(Select All)\" is fully checked when no filter narrows the field. */\n protected allSelected(key: string): boolean {\n const f = this.config().filters.find((x) => x.key === key);\n return !f || f.included === undefined;\n }\n\n /** Indeterminate when some — but not all — members are included. */\n protected partiallySelected(key: string): boolean {\n const f = this.config().filters.find((x) => x.key === key);\n if (!f || f.included === undefined) return false;\n return f.included.length > 0 && f.included.length < this.membersFor(key).length;\n }\n\n protected memberChecked(key: string, member: string): boolean {\n const f = this.config().filters.find((x) => x.key === key);\n if (!f || f.included === undefined) return true;\n return f.included.includes(member);\n }\n\n protected toggleMember(key: string, member: string): void {\n const all = this.membersFor(key);\n const f = this.config().filters.find((x) => x.key === key);\n let inc = f?.included ? [...f.included] : [...all];\n inc = inc.includes(member) ? inc.filter((m) => m !== member) : [...inc, member];\n this.setIncluded(key, inc.length === all.length ? undefined : inc);\n }\n\n protected setAllMembers(key: string, checked: boolean): void {\n this.setIncluded(key, checked ? undefined : []);\n }\n\n private setIncluded(key: string, included: string[] | undefined): void {\n const c = this.config();\n const exists = c.filters.some((f) => f.key === key);\n const filters = exists\n ? c.filters.map((f) => (f.key === key ? { ...f, included } : f))\n : [...c.filters, { key, included }];\n this.config.set({ ...c, filters });\n }\n}\n\n/** Clamp a splice index (CDK can hand back -1 when dropped on an empty list). */\nfunction clamp(index: number, length: number): number {\n if (index < 0) return length;\n return Math.min(index, length);\n}\n","<div class=\"bpx-pivot-field-pane__inner\" cdkDropListGroup>\n <div class=\"bpx-pivot-field-pane__title\">PivotTable Fields</div>\n\n <!-- Available fields -->\n <div class=\"bpx-pivot-field-pane__section\">\n <div class=\"bpx-pivot-field-pane__label\">Fields</div>\n <div\n class=\"bpx-pivot-field-pane__fields\"\n cdkDropList\n id=\"available\"\n [cdkDropListData]=\"available()\"\n (cdkDropListDropped)=\"onDrop($event, 'available')\"\n >\n @for (chip of available(); track chip.key) {\n <div class=\"bpx-pivot-field-pane__field\" cdkDrag [cdkDragData]=\"chip.key\">\n <span class=\"bpx-pivot-field-pane__grip\" aria-hidden=\"true\"></span>\n {{ chip.label }}\n </div>\n } @empty {\n <div class=\"bpx-pivot-field-pane__hint\">All fields are in use.</div>\n }\n </div>\n </div>\n\n <!-- The four areas -->\n <div class=\"bpx-pivot-field-pane__areas\">\n <!-- Filters -->\n <div class=\"bpx-pivot-field-pane__area\">\n <div class=\"bpx-pivot-field-pane__label\">▽ Filters</div>\n <div\n class=\"bpx-pivot-field-pane__zone\"\n cdkDropList\n id=\"filters\"\n [cdkDropListData]=\"filterChips()\"\n (cdkDropListDropped)=\"onDrop($event, 'filters')\"\n >\n @for (chip of filterChips(); track chip.key) {\n <div class=\"bpx-pivot-field-pane__chip\" cdkDrag [cdkDragData]=\"chip.key\">\n <span class=\"bpx-pivot-field-pane__chip-label\">{{ chip.label }}</span>\n <button\n type=\"button\"\n class=\"bpx-pivot-field-pane__chip-btn\"\n [class.active]=\"chip.filtered\"\n [attr.aria-label]=\"'Filter ' + chip.label\"\n (click)=\"toggleFilterPanel(chip.key)\"\n >\n <bpx-icon name=\"funnel\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n class=\"bpx-pivot-field-pane__chip-btn\"\n [attr.aria-label]=\"'Remove ' + chip.label\"\n (click)=\"remove(chip.key)\"\n >\n <bpx-icon name=\"close\" size=\"sm\" />\n </button>\n @if (openFilter() === chip.key) {\n <div class=\"bpx-pivot-field-pane__filter\" (click)=\"$event.stopPropagation()\">\n <bpx-checkbox\n size=\"sm\"\n [checked]=\"allSelected(chip.key)\"\n [indeterminate]=\"partiallySelected(chip.key)\"\n (checkedChange)=\"setAllMembers(chip.key, $event)\"\n >\n (Select All)\n </bpx-checkbox>\n <div class=\"bpx-pivot-field-pane__members\">\n @for (m of membersFor(chip.key); track m) {\n <bpx-checkbox\n size=\"sm\"\n [checked]=\"memberChecked(chip.key, m)\"\n (checkedChange)=\"toggleMember(chip.key, m)\"\n >\n {{ m }}\n </bpx-checkbox>\n }\n </div>\n </div>\n }\n </div>\n } @empty {\n <div class=\"bpx-pivot-field-pane__hint\">Drag fields here</div>\n }\n </div>\n </div>\n\n <!-- Columns -->\n <div class=\"bpx-pivot-field-pane__area\">\n <div class=\"bpx-pivot-field-pane__label\">▥ Columns</div>\n <div\n class=\"bpx-pivot-field-pane__zone\"\n cdkDropList\n id=\"columns\"\n [cdkDropListData]=\"columnChips()\"\n (cdkDropListDropped)=\"onDrop($event, 'columns')\"\n >\n @for (chip of columnChips(); track chip.key) {\n <div class=\"bpx-pivot-field-pane__chip\" cdkDrag [cdkDragData]=\"chip.key\">\n <span class=\"bpx-pivot-field-pane__chip-label\">{{ chip.label }}</span>\n <button\n type=\"button\"\n class=\"bpx-pivot-field-pane__chip-btn\"\n [class.active]=\"chip.filtered\"\n [attr.aria-label]=\"'Filter ' + chip.label\"\n (click)=\"toggleFilterPanel(chip.key)\"\n >\n <bpx-icon name=\"funnel\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n class=\"bpx-pivot-field-pane__chip-btn\"\n [attr.aria-label]=\"'Remove ' + chip.label\"\n (click)=\"remove(chip.key)\"\n >\n <bpx-icon name=\"close\" size=\"sm\" />\n </button>\n @if (openFilter() === chip.key) {\n <div class=\"bpx-pivot-field-pane__filter\" (click)=\"$event.stopPropagation()\">\n <bpx-checkbox\n size=\"sm\"\n [checked]=\"allSelected(chip.key)\"\n [indeterminate]=\"partiallySelected(chip.key)\"\n (checkedChange)=\"setAllMembers(chip.key, $event)\"\n >\n (Select All)\n </bpx-checkbox>\n <div class=\"bpx-pivot-field-pane__members\">\n @for (m of membersFor(chip.key); track m) {\n <bpx-checkbox\n size=\"sm\"\n [checked]=\"memberChecked(chip.key, m)\"\n (checkedChange)=\"toggleMember(chip.key, m)\"\n >\n {{ m }}\n </bpx-checkbox>\n }\n </div>\n </div>\n }\n </div>\n } @empty {\n <div class=\"bpx-pivot-field-pane__hint\">Drag fields here</div>\n }\n </div>\n </div>\n\n <!-- Rows -->\n <div class=\"bpx-pivot-field-pane__area\">\n <div class=\"bpx-pivot-field-pane__label\">☰ Rows</div>\n <div\n class=\"bpx-pivot-field-pane__zone\"\n cdkDropList\n id=\"rows\"\n [cdkDropListData]=\"rowChips()\"\n (cdkDropListDropped)=\"onDrop($event, 'rows')\"\n >\n @for (chip of rowChips(); track chip.key) {\n <div class=\"bpx-pivot-field-pane__chip\" cdkDrag [cdkDragData]=\"chip.key\">\n <span class=\"bpx-pivot-field-pane__chip-label\">{{ chip.label }}</span>\n <button\n type=\"button\"\n class=\"bpx-pivot-field-pane__chip-btn\"\n [class.active]=\"chip.filtered\"\n [attr.aria-label]=\"'Filter ' + chip.label\"\n (click)=\"toggleFilterPanel(chip.key)\"\n >\n <bpx-icon name=\"funnel\" size=\"sm\" />\n </button>\n <button\n type=\"button\"\n class=\"bpx-pivot-field-pane__chip-btn\"\n [attr.aria-label]=\"'Remove ' + chip.label\"\n (click)=\"remove(chip.key)\"\n >\n <bpx-icon name=\"close\" size=\"sm\" />\n </button>\n @if (openFilter() === chip.key) {\n <div class=\"bpx-pivot-field-pane__filter\" (click)=\"$event.stopPropagation()\">\n <bpx-checkbox\n size=\"sm\"\n [checked]=\"allSelected(chip.key)\"\n [indeterminate]=\"partiallySelected(chip.key)\"\n (checkedChange)=\"setAllMembers(chip.key, $event)\"\n >\n (Select All)\n </bpx-checkbox>\n <div class=\"bpx-pivot-field-pane__members\">\n @for (m of membersFor(chip.key); track m) {\n <bpx-checkbox\n size=\"sm\"\n [checked]=\"memberChecked(chip.key, m)\"\n (checkedChange)=\"toggleMember(chip.key, m)\"\n >\n {{ m }}\n </bpx-checkbox>\n }\n </div>\n </div>\n }\n </div>\n } @empty {\n <div class=\"bpx-pivot-field-pane__hint\">Drag fields here</div>\n }\n </div>\n </div>\n\n <!-- Values -->\n <div class=\"bpx-pivot-field-pane__area\">\n <div class=\"bpx-pivot-field-pane__label\">Σ Values</div>\n <div\n class=\"bpx-pivot-field-pane__zone\"\n cdkDropList\n id=\"values\"\n [cdkDropListData]=\"valueChips()\"\n (cdkDropListDropped)=\"onDrop($event, 'values')\"\n >\n @for (chip of valueChips(); track chip.key; let i = $index) {\n <div class=\"bpx-pivot-field-pane__chip\" cdkDrag [cdkDragData]=\"chip.key\">\n <select\n class=\"bpx-pivot-field-pane__agg\"\n [value]=\"chip.aggregation\"\n [attr.aria-label]=\"'Aggregation for ' + chip.label\"\n (change)=\"changeAggregation(i, $any($event.target).value)\"\n >\n @for (a of aggregations; track a.value) {\n <option [value]=\"a.value\" [selected]=\"a.value === chip.aggregation\">{{ a.label }}</option>\n }\n </select>\n <span class=\"bpx-pivot-field-pane__chip-label\">{{ chip.label }}</span>\n <button\n type=\"button\"\n class=\"bpx-pivot-field-pane__chip-btn\"\n [attr.aria-label]=\"'Remove ' + chip.label\"\n (click)=\"remove(chip.key)\"\n >\n <bpx-icon name=\"close\" size=\"sm\" />\n </button>\n </div>\n } @empty {\n <div class=\"bpx-pivot-field-pane__hint\">Drag fields here</div>\n }\n </div>\n </div>\n </div>\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { Icon } from '../icon/icon';\nimport { PivotFieldPane } from './pivot-field-pane';\nimport {\n computePivot,\n flattenRows,\n rowKey,\n type PivotRecord,\n} from './pivot-engine';\nimport type {\n BpxPivotConfig,\n BpxPivotField,\n BpxPivotLeafColumn,\n BpxPivotRowNode,\n} from './pivot-types';\n\n/**\n * An Excel-style pivot grid. Give it flat `data` and a set of `fields`, then\n * either seed a `[(config)]` (which dimensions go on rows/columns/values) or let\n * users build it live by dragging fields in the field pane.\n *\n * It cross-tabulates the data into a nested, collapsible matrix with per-group\n * subtotals and grand totals, six aggregations, click-to-sort headers and\n * Excel-style value filters.\n *\n * ```html\n * <bpx-pivot-grid\n * [data]=\"sales\"\n * [fields]=\"fields\"\n * [(config)]=\"config\"\n * fieldPane\n * />\n * ```\n */\n@Component({\n selector: 'bpx-pivot-grid',\n exportAs: 'bpxPivotGrid',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Icon, PivotFieldPane],\n templateUrl: './pivot-grid.html',\n styleUrl: './pivot-grid.scss',\n host: {\n class: 'bpx-pivot-grid-host',\n '[class.bpx-pivot-grid-host--with-pane]': 'fieldPane()',\n },\n})\nexport class PivotGrid<T = PivotRecord> {\n /** Flat source records to pivot. */\n readonly data = input<T[]>([]);\n /** Field catalogue — the palette users pivot by. */\n readonly fields = input<BpxPivotField[]>([]);\n /** The pivot layout. Two-way bindable; the field pane mutates it. */\n readonly config = model<BpxPivotConfig>({\n rows: [],\n columns: [],\n values: [],\n filters: [],\n });\n\n /** Show the drag-and-drop field pane alongside the grid. */\n readonly fieldPane = input(false, { transform: booleanAttribute });\n /** Append a grand-total row across everything. */\n readonly grandTotalRow = input(true, { transform: booleanAttribute });\n /** Append a grand-total column when column fields exist. */\n readonly grandTotalColumn = input(true, { transform: booleanAttribute });\n /** Render subtotal rows for parent groups. */\n readonly subtotals = input(true, { transform: booleanAttribute });\n /** Keep the header (and row-label column) pinned while the body scrolls. */\n readonly stickyHeader = input(true, { transform: booleanAttribute });\n /** Max height of the scroll area, e.g. `'480px'`. Unset = grow to content. */\n readonly maxHeight = input<string | undefined>(undefined);\n\n /** Collapsed row-node keys. Everything is expanded by default (Excel-like). */\n private readonly collapsed = signal<ReadonlySet<string>>(new Set());\n\n /** Data as plain records — the engine and pane read fields off these. */\n protected readonly records = computed(() => this.data() as PivotRecord[]);\n\n /** The cross-tabulated model — recomputes only when data/config/opts change. */\n protected readonly model = computed(() =>\n computePivot(this.records(), this.fields(), this.config(), {\n grandTotalRow: this.grandTotalRow(),\n grandTotalColumn: this.grandTotalColumn(),\n subtotals: this.subtotals(),\n }),\n );\n\n /** Visible rows after applying expand/collapse. */\n protected readonly visibleRows = computed(() =>\n flattenRows(this.model().rows, this.collapsed()),\n );\n\n /** Column-band level indices, for the `@for` over header rows. */\n protected readonly columnLevelIndexes = computed(() =>\n this.model().columnLevels.map((_, i) => i),\n );\n\n /** Corner-cell rowspan: all band rows plus the measure-caption row. */\n protected readonly cornerRowspan = computed(() => this.model().columnFieldCount + 1);\n\n /** Caption for the row-label corner (the nested row field names). */\n protected readonly rowLabelHeader = computed(() => {\n const fields = this.model().rowFields;\n return fields.length ? fields.join(' / ') : 'Row Labels';\n });\n\n protected rowNodeKey = rowKey;\n\n protected isCollapsed(node: BpxPivotRowNode): boolean {\n return this.collapsed().has(rowKey(node));\n }\n\n protected toggle(node: BpxPivotRowNode): void {\n if (!node.expandable) return;\n const key = rowKey(node);\n const next = new Set(this.collapsed());\n if (next.has(key)) next.delete(key);\n else next.add(key);\n this.collapsed.set(next);\n }\n\n /** Expand or collapse every group at once (toolbar affordance). */\n protected setAllCollapsed(collapse: boolean): void {\n if (!collapse) {\n this.collapsed.set(new Set());\n return;\n }\n const keys = new Set<string>();\n const walk = (nodes: BpxPivotRowNode[]) => {\n for (const n of nodes) {\n if (n.expandable) keys.add(rowKey(n));\n walk(n.children);\n }\n };\n walk(this.model().rows);\n this.collapsed.set(keys);\n }\n\n // ── Sorting (click-to-sort headers) ─────────────────────────────────────\n protected sortRowLabelDir(): 'asc' | 'desc' | null {\n const s = this.config().rowSort;\n return s && s.by === 'label' ? s.direction : null;\n }\n\n protected sortMeasureDir(index: number): 'asc' | 'desc' | null {\n const s = this.config().rowSort;\n return s && s.by === 'value' && s.measure === index ? s.direction : null;\n }\n\n protected sortColumnsDir(): 'asc' | 'desc' | null {\n const s = this.config().columnSort;\n return s ? s.direction : null;\n }\n\n protected cycleRowLabelSort(): void {\n const dir = this.sortRowLabelDir();\n const next = dir === 'asc' ? 'desc' : dir === 'desc' ? null : 'asc';\n this.patch({ rowSort: next ? { by: 'label', direction: next } : undefined });\n }\n\n protected cycleMeasureSort(index: number): void {\n const dir = this.sortMeasureDir(index);\n const next = dir === 'asc' ? 'desc' : dir === 'desc' ? null : 'asc';\n this.patch({\n rowSort: next ? { by: 'value', direction: next, measure: index } : undefined,\n });\n }\n\n protected cycleColumnSort(): void {\n const dir = this.sortColumnsDir();\n const next = dir === 'asc' ? 'desc' : dir === 'desc' ? null : 'asc';\n this.patch({ columnSort: next ? { by: 'label', direction: next } : undefined });\n }\n\n protected trackColumn = (_: number, col: BpxPivotLeafColumn) => col.id;\n\n private patch(part: Partial<BpxPivotConfig>): void {\n this.config.set({ ...this.config(), ...part });\n }\n}\n","<div class=\"bpx-pivot-grid\">\n <div class=\"bpx-pivot-grid__main\">\n <div class=\"bpx-pivot-grid__toolbar\">\n <button type=\"button\" class=\"bpx-pivot-grid__tool\" (click)=\"setAllCollapsed(false)\">\n <bpx-icon name=\"chevron-down\" size=\"sm\" /> Expand all\n </button>\n <button type=\"button\" class=\"bpx-pivot-grid__tool\" (click)=\"setAllCollapsed(true)\">\n <bpx-icon name=\"chevron-right\" size=\"sm\" /> Collapse all\n </button>\n </div>\n\n <div\n class=\"bpx-pivot-grid__scroll\"\n [class.sticky]=\"stickyHeader()\"\n [style.max-height]=\"maxHeight()\"\n >\n <table class=\"bpx-pivot-grid__table\">\n <thead>\n @if (model().columnFieldCount === 0) {\n <tr>\n <th\n scope=\"col\"\n class=\"bpx-pivot-grid__corner sortable\"\n [attr.aria-sort]=\"sortRowLabelDir() ? (sortRowLabelDir() === 'asc' ? 'ascending' : 'descending') : 'none'\"\n (click)=\"cycleRowLabelSort()\"\n >\n <span class=\"bpx-pivot-grid__th\">\n {{ rowLabelHeader() }}\n <bpx-icon\n class=\"bpx-pivot-grid__sort\"\n [class.active]=\"sortRowLabelDir()\"\n [class.desc]=\"sortRowLabelDir() === 'desc'\"\n name=\"chevron-down\"\n size=\"sm\"\n />\n </span>\n </th>\n @for (col of model().leafColumns; track col.id; let i = $index) {\n <th\n scope=\"col\"\n class=\"bpx-pivot-grid__measure-head sortable\"\n [attr.aria-sort]=\"sortMeasureDir(i) ? (sortMeasureDir(i) === 'asc' ? 'ascending' : 'descending') : 'none'\"\n (click)=\"cycleMeasureSort(i)\"\n >\n <span class=\"bpx-pivot-grid__th\">\n {{ col.label }}\n <bpx-icon\n class=\"bpx-pivot-grid__sort\"\n [class.active]=\"sortMeasureDir(i)\"\n [class.desc]=\"sortMeasureDir(i) === 'desc'\"\n name=\"chevron-down\"\n size=\"sm\"\n />\n </span>\n </th>\n }\n </tr>\n } @else {\n @for (level of columnLevelIndexes(); track level) {\n <tr>\n @if (level === 0) {\n <th\n scope=\"col\"\n class=\"bpx-pivot-grid__corner sortable\"\n [attr.rowspan]=\"cornerRowspan()\"\n (click)=\"cycleRowLabelSort()\"\n >\n <span class=\"bpx-pivot-grid__th\">\n {{ rowLabelHeader() }}\n <bpx-icon\n class=\"bpx-pivot-grid__sort\"\n [class.active]=\"sortRowLabelDir()\"\n [class.desc]=\"sortRowLabelDir() === 'desc'\"\n name=\"chevron-down\"\n size=\"sm\"\n />\n </span>\n </th>\n }\n @for (node of model().columnLevels[level]; track $index) {\n <th\n scope=\"colgroup\"\n class=\"bpx-pivot-grid__col-group\"\n [class.sortable]=\"level === 0\"\n [attr.colspan]=\"node.span\"\n (click)=\"level === 0 ? cycleColumnSort() : null\"\n >\n {{ node.label }}\n @if (level === 0) {\n <bpx-icon\n class=\"bpx-pivot-grid__sort\"\n [class.active]=\"sortColumnsDir()\"\n [class.desc]=\"sortColumnsDir() === 'desc'\"\n name=\"chevron-down\"\n size=\"sm\"\n />\n }\n </th>\n }\n @if (level === 0 && model().hasGrandTotalColumn) {\n <th\n scope=\"colgroup\"\n class=\"bpx-pivot-grid__col-group grand\"\n [attr.colspan]=\"model().valueCount\"\n [attr.rowspan]=\"model().columnFieldCount\"\n >\n Grand Total\n </th>\n }\n </tr>\n }\n <tr>\n @for (col of model().leafColumns; track col.id; let i = $index) {\n <th\n scope=\"col\"\n class=\"bpx-pivot-grid__measure-head sortable\"\n [class.grand]=\"col.grandTotal\"\n [attr.aria-sort]=\"sortMeasureDir(i) ? (sortMeasureDir(i) === 'asc' ? 'ascending' : 'descending') : 'none'\"\n (click)=\"cycleMeasureSort(i)\"\n >\n <span class=\"bpx-pivot-grid__th\">\n {{ col.label }}\n <bpx-icon\n class=\"bpx-pivot-grid__sort\"\n [class.active]=\"sortMeasureDir(i)\"\n [class.desc]=\"sortMeasureDir(i) === 'desc'\"\n name=\"chevron-down\"\n size=\"sm\"\n />\n </span>\n </th>\n }\n </tr>\n }\n </thead>\n\n <tbody>\n @for (row of visibleRows(); track rowNodeKey(row)) {\n <tr\n [attr.data-depth]=\"row.depth\"\n [class.bpx-pivot-grid__subtotal]=\"row.expandable\"\n [class.bpx-pivot-grid__grand]=\"row.grandTotal\"\n >\n <th\n scope=\"row\"\n class=\"bpx-pivot-grid__row-label\"\n [style.padding-inline-start.px]=\"12 + row.depth * 18\"\n >\n @if (row.expandable) {\n <button\n type=\"button\"\n class=\"bpx-pivot-grid__toggle\"\n [attr.aria-expanded]=\"!isCollapsed(row)\"\n [attr.aria-label]=\"(isCollapsed(row) ? 'Expand ' : 'Collapse ') + row.label\"\n (click)=\"toggle(row)\"\n >\n <bpx-icon [name]=\"isCollapsed(row) ? 'chevron-right' : 'chevron-down'\" size=\"sm\" />\n </button>\n } @else {\n <span class=\"bpx-pivot-grid__toggle-spacer\"></span>\n }\n <span class=\"bpx-pivot-grid__row-text\">{{ row.label }}</span>\n </th>\n @for (col of model().leafColumns; track col.id; let i = $index) {\n <td\n class=\"bpx-pivot-grid__cell\"\n [class.total]=\"row.cells[i].total\"\n [class.grand]=\"col.grandTotal || row.grandTotal\"\n >\n {{ row.cells[i].display }}\n </td>\n }\n </tr>\n } @empty {\n <tr>\n <td class=\"bpx-pivot-grid__empty\" [attr.colspan]=\"model().leafColumns.length + 1\">\n Drag fields into <strong>Rows</strong> and <strong>Values</strong> to build a pivot.\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n\n @if (fieldPane()) {\n <bpx-pivot-field-pane [fields]=\"fields()\" [data]=\"records()\" [(config)]=\"config\" />\n }\n</div>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n model,\n output,\n PLATFORM_ID,\n TemplateRef,\n ViewContainerRef,\n viewChild,\n} from '@angular/core';\nimport { uniqueId } from '../core/id';\nimport { Icon } from '../icon/icon';\n\n/** A single command in the palette. */\nexport interface BpxCommand {\n id: string;\n label: string;\n /** Short trailing hint, e.g. a shortcut or category. */\n hint?: string;\n icon?: string;\n /** Extra text matched by the search (synonyms, category…). */\n keywords?: string;\n run?: () => void;\n}\n\n/**\n * A ⌘K-style command palette: a centered overlay with fuzzy(ish) search and\n * keyboard-driven results. Toggle with `[(open)]` or the built-in ⌘K / Ctrl+K.\n *\n * ```html\n * <bpx-command-palette [(open)]=\"open\" [commands]=\"commands\" (run)=\"handle($event)\" />\n * ```\n */\n@Component({\n selector: 'bpx-command-palette',\n exportAs: 'bpxCommandPalette',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [A11yModule, Icon],\n templateUrl: './command-palette.html',\n styleUrl: './command-palette.scss',\n host: {\n '(document:keydown.control.k)': 'onHotkey($event)',\n '(document:keydown.meta.k)': 'onHotkey($event)',\n },\n})\nexport class CommandPalette {\n readonly open = model(false);\n readonly commands = input<BpxCommand[]>([]);\n readonly placeholder = input('Type a command or search…');\n /** Enable the built-in ⌘K / Ctrl+K toggle. */\n readonly hotkey = input(true, { transform: booleanAttribute });\n readonly run = output<BpxCommand>();\n\n protected readonly query = model('');\n protected readonly activeIndex = model(0);\n\n protected readonly filtered = computed<BpxCommand[]>(() => {\n const q = this.query().trim().toLowerCase();\n const commands = this.commands();\n if (!q) return commands;\n return commands.filter((c) =>\n `${c.label} ${c.keywords ?? ''}`.toLowerCase().includes(q),\n );\n });\n\n private readonly baseId = uniqueId('bpx-cmd');\n protected readonly listId = `${this.baseId}-list`;\n\n private readonly tpl = viewChild.required<TemplateRef<unknown>>('tpl');\n private readonly overlay = inject(Overlay);\n private readonly vcr = inject(ViewContainerRef);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private overlayRef?: OverlayRef;\n\n constructor() {\n effect(() => {\n if (!this.isBrowser) return;\n if (this.open()) this.attach();\n else this.detach();\n });\n // Keep the active row in range as the result set changes.\n effect(() => {\n this.filtered();\n this.activeIndex.set(0);\n });\n inject(DestroyRef).onDestroy(() => this.overlayRef?.dispose());\n }\n\n protected onHotkey(event: Event): void {\n if (!this.hotkey()) return;\n event.preventDefault();\n this.open.update((o) => !o);\n }\n\n protected onSearch(event: Event): void {\n this.query.set((event.target as HTMLInputElement).value);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const items = this.filtered();\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.activeIndex.set(items.length ? (this.activeIndex() + 1) % items.length : 0);\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.activeIndex.set(\n items.length ? (this.activeIndex() - 1 + items.length) % items.length : 0,\n );\n break;\n case 'Enter': {\n event.preventDefault();\n const cmd = items[this.activeIndex()];\n if (cmd) this.select(cmd);\n break;\n }\n case 'Escape':\n event.preventDefault();\n this.close();\n break;\n }\n }\n\n protected select(cmd: BpxCommand): void {\n cmd.run?.();\n this.run.emit(cmd);\n this.close();\n }\n\n protected optionId(index: number): string {\n return `${this.baseId}-opt-${index}`;\n }\n\n private close(): void {\n this.open.set(false);\n }\n\n private attach(): void {\n const ref = this.ensureOverlay();\n if (ref.hasAttached()) return;\n this.query.set('');\n this.activeIndex.set(0);\n ref.attach(new TemplatePortal(this.tpl(), this.vcr));\n }\n\n private detach(): void {\n this.overlayRef?.detach();\n }\n\n private ensureOverlay(): OverlayRef {\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.block(),\n positionStrategy: this.overlay.position().global().top('12vh').centerHorizontally(),\n });\n this.overlayRef.backdropClick().subscribe(() => this.close());\n }\n return this.overlayRef;\n }\n}\n","<ng-template #tpl>\n <div\n class=\"bpx-cmd\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Command palette\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n >\n <div class=\"bpx-cmd__search\">\n <bpx-icon class=\"bpx-cmd__search-icon\" name=\"search\" size=\"sm\" />\n <input\n class=\"bpx-cmd__input\"\n type=\"text\"\n role=\"combobox\"\n aria-expanded=\"true\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"filtered().length ? optionId(activeIndex()) : null\"\n [placeholder]=\"placeholder()\"\n [value]=\"query()\"\n (input)=\"onSearch($event)\"\n (keydown)=\"onKeydown($event)\"\n />\n </div>\n\n <ul class=\"bpx-cmd__list\" role=\"listbox\" [id]=\"listId\">\n @for (cmd of filtered(); track cmd.id; let i = $index) {\n <li\n class=\"bpx-cmd__option\"\n role=\"option\"\n [id]=\"optionId(i)\"\n [class.active]=\"i === activeIndex()\"\n [attr.aria-selected]=\"i === activeIndex()\"\n (click)=\"select(cmd)\"\n (mouseenter)=\"activeIndex.set(i)\"\n >\n @if (cmd.icon) {\n <bpx-icon class=\"bpx-cmd__option-icon\" [name]=\"cmd.icon\" size=\"sm\" />\n }\n <span class=\"bpx-cmd__option-label\">{{ cmd.label }}</span>\n @if (cmd.hint) {\n <span class=\"bpx-cmd__option-hint\">{{ cmd.hint }}</span>\n }\n </li>\n } @empty {\n <li class=\"bpx-cmd__empty\">No results</li>\n }\n </ul>\n </div>\n</ng-template>\n","import {\n ChangeDetectionStrategy,\n Component,\n output,\n TemplateRef,\n viewChild,\n} from '@angular/core';\n\n/**\n * A floating panel of arbitrary content, opened by `[bpxPopoverTriggerFor]`.\n * Renders nothing inline until opened.\n *\n * ```html\n * <button bpx-button [bpxPopoverTriggerFor]=\"pop\">Filters</button>\n * <bpx-popover #pop>…any content…</bpx-popover>\n * ```\n */\n@Component({\n selector: 'bpx-popover',\n exportAs: 'bpxPopover',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-template>\n <div class=\"bpx-popover\" role=\"dialog\" (keydown.escape)=\"close()\">\n <ng-content />\n </div>\n </ng-template>\n `,\n styleUrl: './popover.scss',\n})\nexport class Popover {\n readonly template = viewChild.required(TemplateRef);\n readonly closed = output<void>();\n\n close(): void {\n this.closed.emit();\n }\n}\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport {\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n OutputRefSubscription,\n signal,\n ViewContainerRef,\n} from '@angular/core';\nimport { BPX_DROPDOWN_POSITIONS } from '../core/overlay';\nimport { Popover } from './popover';\n\n/** Opens a `<bpx-popover>` from the element it's placed on. */\n@Directive({\n selector: '[bpxPopoverTriggerFor]',\n exportAs: 'bpxPopoverTrigger',\n host: {\n '[attr.aria-haspopup]': \"'dialog'\",\n '[attr.aria-expanded]': 'isOpen()',\n '(click)': 'toggle()',\n },\n})\nexport class PopoverTrigger {\n readonly popover = input.required<Popover>({ alias: 'bpxPopoverTriggerFor' });\n\n private readonly overlay = inject(Overlay);\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly vcr = inject(ViewContainerRef);\n\n readonly isOpen = signal(false);\n private overlayRef?: OverlayRef;\n private closedSub?: OutputRefSubscription;\n\n constructor() {\n inject(DestroyRef).onDestroy(() => {\n this.closedSub?.unsubscribe();\n this.overlayRef?.dispose();\n });\n }\n\n protected toggle(): void {\n this.isOpen() ? this.close() : this.open();\n }\n\n private open(): void {\n if (this.isOpen()) return;\n const ref = this.ensureOverlay();\n ref.attach(new TemplatePortal(this.popover().template(), this.vcr));\n this.isOpen.set(true);\n this.closedSub = this.popover().closed.subscribe(() => this.close());\n }\n\n private close(): void {\n if (!this.isOpen()) return;\n this.closedSub?.unsubscribe();\n this.overlayRef?.detach();\n this.isOpen.set(false);\n this.el.nativeElement.focus();\n }\n\n private ensureOverlay(): OverlayRef {\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.el)\n .withPositions(BPX_DROPDOWN_POSITIONS),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n });\n this.overlayRef.backdropClick().subscribe(() => this.close());\n }\n return this.overlayRef;\n }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { GlobalPositionStrategy, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n input,\n model,\n PLATFORM_ID,\n TemplateRef,\n ViewContainerRef,\n viewChild,\n} from '@angular/core';\nimport { uniqueId } from '../core/id';\nimport { Icon } from '../icon/icon';\n\nexport type BpxDrawerSide = 'left' | 'right' | 'top' | 'bottom';\n\n/**\n * A panel that slides in from an edge of the viewport. CDK-overlay backed with\n * focus trap and scroll lock; controlled with `[(open)]`.\n *\n * ```html\n * <button bpx-button (click)=\"open.set(true)\">Open</button>\n * <bpx-drawer [(open)]=\"open\" side=\"right\" title=\"Filters\">…</bpx-drawer>\n * ```\n */\n@Component({\n selector: 'bpx-drawer',\n exportAs: 'bpxDrawer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [A11yModule, Icon],\n templateUrl: './drawer.html',\n styleUrl: './drawer.scss',\n})\nexport class Drawer {\n readonly open = model(false);\n readonly side = input<BpxDrawerSide>('right');\n readonly title = input('');\n readonly ariaLabel = input('', { alias: 'aria-label' });\n readonly disableClose = input(false, { transform: booleanAttribute });\n\n protected readonly titleId = `${uniqueId('bpx-drawer')}-title`;\n\n private readonly tpl = viewChild.required<TemplateRef<unknown>>('tpl');\n private readonly overlay = inject(Overlay);\n private readonly vcr = inject(ViewContainerRef);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private overlayRef?: OverlayRef;\n\n constructor() {\n effect(() => {\n if (!this.isBrowser) return;\n if (this.open()) this.attach();\n else this.detach();\n });\n // The overlay is created once and reused, so a later `side` change would\n // otherwise keep the panel pinned to the edge it was first opened from\n // (only the CSS/animation would update). Re-apply the position on change.\n effect(() => {\n const side = this.side();\n this.overlayRef?.updatePositionStrategy(this.positionFor(side));\n });\n inject(DestroyRef).onDestroy(() => this.overlayRef?.dispose());\n }\n\n protected close(): void {\n this.open.set(false);\n }\n\n private attach(): void {\n const ref = this.ensureOverlay();\n if (ref.hasAttached()) return;\n ref.attach(new TemplatePortal(this.tpl(), this.vcr));\n }\n\n private detach(): void {\n this.overlayRef?.detach();\n }\n\n private ensureOverlay(): OverlayRef {\n if (!this.overlayRef) {\n this.overlayRef = this.overlay.create({\n hasBackdrop: true,\n backdropClass: 'cdk-overlay-dark-backdrop',\n scrollStrategy: this.overlay.scrollStrategies.block(),\n positionStrategy: this.positionFor(this.side()),\n });\n this.overlayRef.backdropClick().subscribe(() => {\n if (!this.disableClose()) this.close();\n });\n this.overlayRef.keydownEvents().subscribe((event) => {\n if (event.key === 'Escape' && !this.disableClose()) {\n event.preventDefault();\n this.close();\n }\n });\n }\n return this.overlayRef;\n }\n\n private positionFor(side: BpxDrawerSide): GlobalPositionStrategy {\n const p = this.overlay.position().global();\n switch (side) {\n case 'left':\n return p.left('0').top('0');\n case 'top':\n return p.top('0').left('0');\n case 'bottom':\n return p.bottom('0').left('0');\n case 'right':\n default:\n return p.right('0').top('0');\n }\n }\n}\n","<ng-template #tpl>\n <div\n class=\"bpx-drawer__panel\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.data-side]=\"side()\"\n [attr.aria-labelledby]=\"title() ? titleId : null\"\n [attr.aria-label]=\"!title() ? ariaLabel() || null : null\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n >\n @if (title()) {\n <header class=\"bpx-drawer__header\">\n <h2 class=\"bpx-drawer__title\" [id]=\"titleId\">{{ title() }}</h2>\n @if (!disableClose()) {\n <button type=\"button\" class=\"bpx-drawer__close\" aria-label=\"Close\" (click)=\"close()\">\n <bpx-icon name=\"close\" size=\"sm\" />\n </button>\n }\n </header>\n }\n <div class=\"bpx-drawer__body\">\n <ng-content />\n </div>\n <div class=\"bpx-drawer__footer\">\n <ng-content select=\"[bpxDrawerFooter]\" />\n </div>\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { Icon } from '../icon/icon';\n\nexport interface BpxBreadcrumb {\n label: string;\n /** Optional href — renders an anchor. Omit to render a button that emits `(navigate)`. */\n href?: string;\n icon?: string;\n}\n\n/**\n * A breadcrumb trail. The last item is rendered as the current page.\n *\n * ```html\n * <bpx-breadcrumbs [items]=\"crumbs\" (navigate)=\"go($event)\" />\n * ```\n */\n@Component({\n selector: 'bpx-breadcrumbs',\n exportAs: 'bpxBreadcrumbs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Icon],\n templateUrl: './breadcrumbs.html',\n styleUrl: './breadcrumbs.scss',\n host: { class: 'bpx-breadcrumbs' },\n})\nexport class Breadcrumbs {\n readonly items = input<BpxBreadcrumb[]>([]);\n readonly navigate = output<BpxBreadcrumb>();\n}\n","<nav aria-label=\"Breadcrumb\">\n <ol class=\"bpx-breadcrumbs__list\">\n @for (item of items(); track $index; let last = $last) {\n <li class=\"bpx-breadcrumbs__item\">\n @if (last) {\n <span class=\"bpx-breadcrumbs__current\" aria-current=\"page\">\n @if (item.icon) {\n <bpx-icon [name]=\"item.icon\" size=\"sm\" />\n }\n {{ item.label }}\n </span>\n } @else {\n @if (item.href) {\n <a class=\"bpx-breadcrumbs__link\" [href]=\"item.href\">\n @if (item.icon) {\n <bpx-icon [name]=\"item.icon\" size=\"sm\" />\n }\n {{ item.label }}\n </a>\n } @else {\n <button type=\"button\" class=\"bpx-breadcrumbs__link\" (click)=\"navigate.emit(item)\">\n @if (item.icon) {\n <bpx-icon [name]=\"item.icon\" size=\"sm\" />\n }\n {{ item.label }}\n </button>\n }\n <bpx-icon class=\"bpx-breadcrumbs__sep\" name=\"chevron-right\" size=\"sm\" aria-hidden=\"true\" />\n }\n </li>\n }\n </ol>\n</nav>\n","import { ChangeDetectionStrategy, Component, input, signal } from '@angular/core';\n\n/**\n * A single step within `<bpx-stepper>`. Its content shows only while active.\n */\n@Component({\n selector: 'bpx-step',\n exportAs: 'bpxStep',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `@if (active()) {\n <ng-content />\n }`,\n host: {\n class: 'bpx-step',\n role: 'tabpanel',\n '[hidden]': '!active()',\n },\n})\nexport class Step {\n readonly label = input('');\n readonly active = signal(false);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n effect,\n input,\n model,\n} from '@angular/core';\nimport { Icon } from '../icon/icon';\nimport { Step } from './step';\n\n/**\n * A stepped process indicator with numbered markers, completed check-marks, and\n * an active step panel. Compose from `<bpx-step>` children; `[(activeIndex)]`\n * controls the current step.\n *\n * ```html\n * <bpx-stepper [(activeIndex)]=\"step\">\n * <bpx-step label=\"Account\">…</bpx-step>\n * <bpx-step label=\"Profile\">…</bpx-step>\n * <bpx-step label=\"Done\">…</bpx-step>\n * </bpx-stepper>\n * ```\n */\n@Component({\n selector: 'bpx-stepper',\n exportAs: 'bpxStepper',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Icon],\n templateUrl: './stepper.html',\n styleUrl: './stepper.scss',\n host: { class: 'bpx-stepper' },\n})\nexport class Stepper {\n readonly steps = contentChildren(Step);\n readonly activeIndex = model(0);\n /** When true, steps can't be jumped to by clicking their header. */\n readonly linear = input(false);\n\n constructor() {\n effect(() => {\n const active = this.activeIndex();\n this.steps().forEach((step, i) => step.active.set(i === active));\n });\n }\n\n protected select(index: number): void {\n if (this.linear() && index > this.activeIndex()) return;\n this.activeIndex.set(index);\n }\n}\n","<ol class=\"bpx-stepper__head\">\n @for (step of steps(); track $index; let i = $index; let last = $last) {\n <li\n class=\"bpx-stepper__step\"\n [class.active]=\"i === activeIndex()\"\n [class.done]=\"i < activeIndex()\"\n >\n <button\n type=\"button\"\n class=\"bpx-stepper__btn\"\n [attr.aria-current]=\"i === activeIndex() ? 'step' : null\"\n (click)=\"select(i)\"\n >\n <span class=\"bpx-stepper__marker\">\n @if (i < activeIndex()) {\n <bpx-icon name=\"check\" size=\"sm\" />\n } @else {\n {{ i + 1 }}\n }\n </span>\n <span class=\"bpx-stepper__label\">{{ step.label() }}</span>\n </button>\n @if (!last) {\n <span class=\"bpx-stepper__connector\" aria-hidden=\"true\"></span>\n }\n </li>\n }\n</ol>\n\n<div class=\"bpx-stepper__panel\">\n <ng-content />\n</div>\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n forwardRef,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { BpxOption } from '../core/types';\n\n/**\n * A compact single-select control — a row of segments where one is active.\n * Works standalone with `[(value)]` and as a form control. Arrow keys move the\n * selection.\n *\n * ```html\n * <bpx-segmented [options]=\"views\" [(value)]=\"view\" />\n * ```\n */\n@Component({\n selector: 'bpx-segmented',\n exportAs: 'bpxSegmented',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './segmented.html',\n styleUrl: './segmented.scss',\n host: {\n class: 'bpx-segmented',\n role: 'radiogroup',\n '[attr.data-size]': 'size()',\n '[attr.aria-disabled]': 'disabled() || null',\n '(keydown)': 'onKeydown($event)',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Segmented), multi: true },\n ],\n})\nexport class Segmented<T = string> {\n readonly options = input<BpxOption<T>[]>([]);\n readonly value = model<T | null>(null);\n readonly size = input<'sm' | 'md'>('md');\n\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n private readonly cvaDisabled = signal(false);\n protected readonly disabled = computed(() => this.disabledInput() || this.cvaDisabled());\n\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private onChange: (value: T | null) => void = () => {};\n protected onTouched: () => void = () => {};\n\n protected select(option: BpxOption<T>): void {\n if (this.disabled() || option.disabled || this.value() === option.value) return;\n this.value.set(option.value);\n this.onChange(option.value);\n this.onTouched();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (this.disabled()) return;\n let dir = 0;\n if (event.key === 'ArrowRight' || event.key === 'ArrowDown') dir = 1;\n else if (event.key === 'ArrowLeft' || event.key === 'ArrowUp') dir = -1;\n else return;\n event.preventDefault();\n const enabled = this.options().filter((o) => !o.disabled);\n if (!enabled.length) return;\n const current = enabled.findIndex((o) => o.value === this.value());\n const next = enabled[(current + dir + enabled.length) % enabled.length];\n this.select(next);\n // Move focus to the newly selected segment.\n const buttons = this.el.nativeElement.querySelectorAll<HTMLButtonElement>('.bpx-segmented__seg');\n const idx = this.options().indexOf(next);\n buttons[idx]?.focus();\n }\n\n protected tabindex(option: BpxOption<T>): number {\n if (this.disabled() || option.disabled) return -1;\n const selected = this.value();\n if (option.value === selected) return 0;\n // When nothing is selected, the first enabled segment is the tab stop.\n if (selected == null && this.options().find((o) => !o.disabled) === option) return 0;\n return -1;\n }\n\n // ── ControlValueAccessor ─────────────────────────────────────\n writeValue(value: T | null): void {\n this.value.set(value);\n }\n registerOnChange(fn: (value: T | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","@for (option of options(); track option.value) {\n <button\n type=\"button\"\n class=\"bpx-segmented__seg\"\n role=\"radio\"\n [class.active]=\"option.value === value()\"\n [attr.aria-checked]=\"option.value === value()\"\n [attr.tabindex]=\"tabindex(option)\"\n [disabled]=\"disabled() || option.disabled\"\n (click)=\"select(option)\"\n (blur)=\"onTouched()\"\n >\n {{ option.label }}\n </button>\n}\n","/**\n * Small, dependency-free date helpers shared by Calendar and DatePicker.\n * All comparisons work at *day* granularity — time-of-day is ignored — which is\n * what a date picker cares about. Kept internal to the library (not exported\n * from public-api); components are the public surface.\n */\n\n/** A new Date at 00:00:00.000 of the same calendar day. */\nexport function startOfDay(d: Date): Date {\n const r = new Date(d);\n r.setHours(0, 0, 0, 0);\n return r;\n}\n\n/** First day of `d`'s month, at midnight. */\nexport function startOfMonth(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), 1);\n}\n\n/** Last day of `d`'s month, at midnight. */\nexport function endOfMonth(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth() + 1, 0);\n}\n\n/** `d` shifted by `n` days (may be negative). */\nexport function addDays(d: Date, n: number): Date {\n const r = new Date(d);\n r.setDate(r.getDate() + n);\n return r;\n}\n\n/**\n * `d` shifted by `n` months, clamping the day to the target month's length so\n * that e.g. Jan 31 → Feb 28, never spilling into the next month.\n */\nexport function addMonths(d: Date, n: number): Date {\n const r = new Date(d.getFullYear(), d.getMonth() + n, 1);\n const lastDay = endOfMonth(r).getDate();\n r.setDate(Math.min(d.getDate(), lastDay));\n return r;\n}\n\n/** True when both dates fall on the same calendar day. Null-safe. */\nexport function isSameDay(a: Date | null | undefined, b: Date | null | undefined): boolean {\n if (!a || !b) return false;\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/** True when both dates fall in the same calendar month. Null-safe. */\nexport function isSameMonth(a: Date | null | undefined, b: Date | null | undefined): boolean {\n if (!a || !b) return false;\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n}\n\n/** True when `a`'s day is strictly before `b`'s day. */\nexport function isBeforeDay(a: Date, b: Date): boolean {\n return startOfDay(a).getTime() < startOfDay(b).getTime();\n}\n\n/** True when `a`'s day is strictly after `b`'s day. */\nexport function isAfterDay(a: Date, b: Date): boolean {\n return startOfDay(a).getTime() > startOfDay(b).getTime();\n}\n\n/** `d` pulled inside the `[min, max]` day range, if either bound is set. */\nexport function clampDate(d: Date, min: Date | null, max: Date | null): Date {\n if (min && isBeforeDay(d, min)) return startOfDay(min);\n if (max && isAfterDay(d, max)) return startOfDay(max);\n return startOfDay(d);\n}\n\n/** True when `d` falls outside the `[min, max]` day range. */\nexport function isOutsideRange(d: Date, min: Date | null, max: Date | null): boolean {\n return (!!min && isBeforeDay(d, min)) || (!!max && isAfterDay(d, max));\n}\n","import {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n input,\n model,\n output,\n signal,\n viewChildren,\n} from '@angular/core';\nimport {\n addDays,\n addMonths,\n clampDate,\n endOfMonth,\n isAfterDay,\n isBeforeDay,\n isOutsideRange,\n isSameDay,\n isSameMonth,\n startOfDay,\n startOfMonth,\n} from '../core/date';\nimport { Icon } from '../icon/icon';\n\n/** Which grid the calendar is currently showing. */\ntype CalendarView = 'days' | 'months' | 'years';\n\n/** Split a flat list into rows of `size` for grid-row ARIA semantics. */\nfunction chunk<T>(items: T[], size: number): T[][] {\n const rows: T[][] = [];\n for (let i = 0; i < items.length; i += size) rows.push(items.slice(i, i + size));\n return rows;\n}\n\n/**\n * A calendar with day, month and year views. Usable on its own with `[(value)]`,\n * and used by `bpx-date-picker` as the popup body. Click the header label to\n * zoom out (day → month → year) and jump across time without paging one month\n * at a time. Fully keyboard operable in every view: arrows move within the grid,\n * Home/End jump to the period edges, PageUp/PageDown step by the larger unit,\n * Enter/Space select or drill in, Escape steps back out.\n *\n * ```html\n * <bpx-calendar [(value)]=\"date\" [min]=\"today\" />\n * ```\n */\n@Component({\n selector: 'bpx-calendar',\n exportAs: 'bpxCalendar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [Icon],\n templateUrl: './calendar.html',\n styleUrl: './calendar.scss',\n host: { class: 'bpx-calendar' },\n})\nexport class Calendar {\n /** The selected date. Two-way bindable via `[(value)]`. */\n readonly value = model<Date | null>(null);\n /** Earliest selectable day (inclusive). */\n readonly min = input<Date | null>(null);\n /** Latest selectable day (inclusive). */\n readonly max = input<Date | null>(null);\n /** Extra predicate to disable individual days (holidays, weekends, …). */\n readonly dateDisabled = input<((date: Date) => boolean) | null>(null);\n /** First column of the week: 0 = Sunday (default), 1 = Monday. */\n readonly weekStartsOn = input<0 | 1>(0);\n /** BCP-47 locale for month and weekday names. Defaults to the runtime locale. */\n readonly locale = input<string | undefined>(undefined);\n /** Move DOM focus to the active cell once rendered (used when opened in a popup). */\n readonly autoFocus = input(false, { transform: booleanAttribute });\n\n /** Fires when a day is chosen (also updates `value`). */\n readonly dateSelected = output<Date>();\n /** Fires on Escape from the day view — lets a host popup close itself. */\n readonly escaped = output<void>();\n\n private readonly today = startOfDay(new Date());\n\n protected readonly view = signal<CalendarView>('days');\n /** First-of-month anchoring the currently shown period. */\n protected readonly viewDate = signal(startOfMonth(this.value() ?? this.today));\n /** The cell that owns the roving tabindex / keyboard focus. */\n protected readonly focusedDate = signal(this.today);\n\n private readonly cells = viewChildren<ElementRef<HTMLButtonElement>>('cell');\n /** Set right before a keyboard/drill move so the effect knows to grab focus. */\n private pendingFocus = false;\n\n constructor() {\n // Keep the visible period and focus in sync when `value` is set externally.\n effect(() => {\n const v = this.value();\n const anchor = clampDate(v ?? this.today, this.min(), this.max());\n this.viewDate.set(startOfMonth(anchor));\n this.focusedDate.set(anchor);\n });\n\n // After a keyboard move, drill or view switch, pull DOM focus to the newly\n // focused cell. Reads the viewChildren signal so it re-runs once the grid\n // has re-rendered for a different period or view.\n effect(() => {\n const key = this.focusKey();\n const cells = this.cells();\n if (!this.pendingFocus) return;\n const match = cells.find((c) => c.nativeElement.dataset['key'] === key);\n if (match) {\n match.nativeElement.focus();\n this.pendingFocus = false;\n }\n });\n\n afterNextRender(() => {\n if (this.autoFocus()) this.focusActiveCell();\n });\n }\n\n // ── Day view model ──────────────────────────────────────────────\n /** Six weeks of seven days covering the visible month (plus spill-over days). */\n protected readonly weeks = computed<Date[][]>(() => {\n const first = startOfMonth(this.viewDate());\n const lead = (first.getDay() - this.weekStartsOn() + 7) % 7;\n let cursor = addDays(first, -lead);\n const weeks: Date[][] = [];\n for (let w = 0; w < 6; w++) {\n const row: Date[] = [];\n for (let d = 0; d < 7; d++) {\n row.push(cursor);\n cursor = addDays(cursor, 1);\n }\n weeks.push(row);\n }\n return weeks;\n });\n\n protected readonly weekdays = computed<string[]>(() => {\n const fmt = new Intl.DateTimeFormat(this.locale(), { weekday: 'short' });\n // 2023-01-01 is a Sunday; walk forward from the configured week start.\n const base = new Date(2023, 0, 1);\n return Array.from({ length: 7 }, (_, i) => fmt.format(addDays(base, i + this.weekStartsOn())));\n });\n\n // ── Month / year view models ────────────────────────────────────\n /** The 12 months of the visible year, in rows of three. */\n protected readonly monthRows = computed<Date[][]>(() => {\n const y = this.viewDate().getFullYear();\n return chunk(\n Array.from({ length: 12 }, (_, m) => new Date(y, m, 1)),\n 3,\n );\n });\n\n /** A 12-year window around the visible decade (one padding year each end). */\n protected readonly yearRows = computed<Date[][]>(() => {\n const start = this.decadeStart(this.viewDate());\n return chunk(\n Array.from({ length: 12 }, (_, i) => new Date(start - 1 + i, 0, 1)),\n 3,\n );\n });\n\n protected readonly headerLabel = computed(() => {\n const v = this.viewDate();\n switch (this.view()) {\n case 'days':\n return new Intl.DateTimeFormat(this.locale(), { month: 'long', year: 'numeric' }).format(v);\n case 'months':\n return new Intl.DateTimeFormat(this.locale(), { year: 'numeric' }).format(v);\n case 'years': {\n const s = this.decadeStart(v);\n return `${s} – ${s + 9}`;\n }\n }\n });\n\n /** The larger period is empty within range → hide the way there. */\n protected readonly canPrev = computed(() => {\n const min = this.min();\n if (!min) return true;\n const v = this.viewDate();\n switch (this.view()) {\n case 'days':\n return !isBeforeDay(endOfMonth(addMonths(v, -1)), min);\n case 'months':\n return !isBeforeDay(new Date(v.getFullYear() - 1, 11, 31), min);\n case 'years':\n return !isBeforeDay(new Date(this.decadeStart(v) - 1, 11, 31), min);\n }\n });\n protected readonly canNext = computed(() => {\n const max = this.max();\n if (!max) return true;\n const v = this.viewDate();\n switch (this.view()) {\n case 'days':\n return !isAfterDay(addMonths(v, 1), max);\n case 'months':\n return !isAfterDay(new Date(v.getFullYear() + 1, 0, 1), max);\n case 'years':\n return !isAfterDay(new Date(this.decadeStart(v) + 10, 0, 1), max);\n }\n });\n\n // ── Roving-focus keys ───────────────────────────────────────────\n protected readonly focusKey = computed(() => {\n const f = this.focusedDate();\n switch (this.view()) {\n case 'days':\n return this.dayKey(f);\n case 'months':\n return this.monthKey(f);\n case 'years':\n return this.yearKey(f);\n }\n });\n\n protected dayKey(d: Date): string {\n const m = `${d.getMonth() + 1}`.padStart(2, '0');\n const day = `${d.getDate()}`.padStart(2, '0');\n return `d:${d.getFullYear()}-${m}-${day}`;\n }\n protected monthKey(d: Date): string {\n return `m:${d.getFullYear()}-${d.getMonth()}`;\n }\n protected yearKey(d: Date): string {\n return `y:${d.getFullYear()}`;\n }\n\n // ── Per-cell predicates (used by the template) ──────────────────\n protected isSelected(d: Date): boolean {\n return isSameDay(d, this.value());\n }\n protected isToday(d: Date): boolean {\n return isSameDay(d, this.today);\n }\n protected isOutsideMonth(d: Date): boolean {\n return !isSameMonth(d, this.viewDate());\n }\n protected isDisabled(d: Date): boolean {\n return isOutsideRange(d, this.min(), this.max()) || (this.dateDisabled()?.(d) ?? false);\n }\n\n protected isMonthSelected(d: Date): boolean {\n return isSameMonth(d, this.value());\n }\n protected isMonthCurrent(d: Date): boolean {\n return isSameMonth(d, this.today);\n }\n protected isMonthDisabled(d: Date): boolean {\n const min = this.min();\n const max = this.max();\n return (!!min && isBeforeDay(endOfMonth(d), min)) || (!!max && isAfterDay(startOfMonth(d), max));\n }\n\n protected isYearSelected(d: Date): boolean {\n const v = this.value();\n return !!v && v.getFullYear() === d.getFullYear();\n }\n protected isYearCurrent(d: Date): boolean {\n return this.today.getFullYear() === d.getFullYear();\n }\n protected isYearOutside(d: Date): boolean {\n const s = this.decadeStart(this.viewDate());\n return d.getFullYear() < s || d.getFullYear() > s + 9;\n }\n protected isYearDisabled(d: Date): boolean {\n const min = this.min();\n const max = this.max();\n const y = d.getFullYear();\n return (!!min && isBeforeDay(new Date(y, 11, 31), min)) || (!!max && isAfterDay(new Date(y, 0, 1), max));\n }\n\n protected monthName(d: Date): string {\n return new Intl.DateTimeFormat(this.locale(), { month: 'short' }).format(d);\n }\n\n // ── Header interaction ──────────────────────────────────────────\n /** Page the visible period by the header arrows (month / year / decade). */\n protected step(dir: 1 | -1): void {\n const months = this.view() === 'days' ? dir : this.view() === 'months' ? dir * 12 : dir * 120;\n if (this.view() === 'days') {\n this.shiftFocusAndView(months);\n } else {\n // Keep the roving-focus target inside the new period; DOM focus stays on\n // the arrow (we don't set pendingFocus) as mouse users expect.\n this.viewDate.update((v) => addMonths(v, months));\n this.focusedDate.update((f) => clampDate(addMonths(f, months), this.min(), this.max()));\n }\n }\n\n private shiftFocusAndView(months: number): void {\n this.viewDate.update((v) => addMonths(v, months));\n this.focusedDate.update((f) => clampDate(addMonths(f, months), this.min(), this.max()));\n }\n\n /** Zoom out one level: day → month → year. */\n protected drillUp(): void {\n if (this.view() === 'days') this.setView('months');\n else if (this.view() === 'months') this.setView('years');\n }\n\n private setView(view: CalendarView): void {\n this.pendingFocus = true;\n this.view.set(view);\n }\n\n // ── Selection / drill-in ────────────────────────────────────────\n protected selectDate(d: Date): void {\n if (this.isDisabled(d)) return;\n const picked = startOfDay(d);\n this.value.set(picked);\n this.dateSelected.emit(picked);\n }\n\n /** Choose a month → drop into its day view. */\n protected pickMonth(cell: Date): void {\n if (this.isMonthDisabled(cell)) return;\n const day = Math.min(this.focusedDate().getDate(), endOfMonth(cell).getDate());\n const target = clampDate(new Date(cell.getFullYear(), cell.getMonth(), day), this.min(), this.max());\n this.focusedDate.set(target);\n this.viewDate.set(startOfMonth(target));\n this.pendingFocus = true;\n this.view.set('days');\n }\n\n /** Choose a year → drop into its month view. */\n protected pickYear(cell: Date): void {\n if (this.isYearDisabled(cell)) return;\n const target = clampDate(new Date(cell.getFullYear(), this.focusedDate().getMonth(), 1), this.min(), this.max());\n this.focusedDate.set(target);\n this.viewDate.set(startOfMonth(target));\n this.pendingFocus = true;\n this.view.set('months');\n }\n\n // ── Keyboard ────────────────────────────────────────────────────\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n if (this.view() !== 'days') {\n event.preventDefault();\n this.setView('days');\n } else {\n this.escaped.emit();\n }\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.onEnter();\n return;\n }\n\n const next = this.nextFocus(event);\n if (next) {\n event.preventDefault();\n this.moveFocus(next);\n }\n }\n\n private onEnter(): void {\n const f = this.focusedDate();\n switch (this.view()) {\n case 'days':\n this.selectDate(f);\n break;\n case 'months':\n this.pickMonth(f);\n break;\n case 'years':\n this.pickYear(f);\n break;\n }\n }\n\n /** Compute the next focus target for an arrow/Home/End/Page key, per view. */\n private nextFocus(event: KeyboardEvent): Date | null {\n const f = this.focusedDate();\n const key = event.key;\n const shift = event.shiftKey;\n\n if (this.view() === 'days') {\n const dow = (f.getDay() - this.weekStartsOn() + 7) % 7;\n switch (key) {\n case 'ArrowLeft':\n return addDays(f, -1);\n case 'ArrowRight':\n return addDays(f, 1);\n case 'ArrowUp':\n return addDays(f, -7);\n case 'ArrowDown':\n return addDays(f, 7);\n case 'Home':\n return addDays(f, -dow);\n case 'End':\n return addDays(f, 6 - dow);\n case 'PageUp':\n return addMonths(f, shift ? -12 : -1);\n case 'PageDown':\n return addMonths(f, shift ? 12 : 1);\n }\n return null;\n }\n\n if (this.view() === 'months') {\n switch (key) {\n case 'ArrowLeft':\n return addMonths(f, -1);\n case 'ArrowRight':\n return addMonths(f, 1);\n case 'ArrowUp':\n return addMonths(f, -3);\n case 'ArrowDown':\n return addMonths(f, 3);\n case 'Home':\n return new Date(f.getFullYear(), 0, 1);\n case 'End':\n return new Date(f.getFullYear(), 11, 1);\n case 'PageUp':\n return addMonths(f, -12);\n case 'PageDown':\n return addMonths(f, 12);\n }\n return null;\n }\n\n // years\n switch (key) {\n case 'ArrowLeft':\n return addMonths(f, -12);\n case 'ArrowRight':\n return addMonths(f, 12);\n case 'ArrowUp':\n return addMonths(f, -36);\n case 'ArrowDown':\n return addMonths(f, 36);\n case 'Home':\n return new Date(this.decadeStart(f), f.getMonth(), 1);\n case 'End':\n return new Date(this.decadeStart(f) + 9, f.getMonth(), 1);\n case 'PageUp':\n return addMonths(f, -120);\n case 'PageDown':\n return addMonths(f, 120);\n }\n return null;\n }\n\n private moveFocus(target: Date): void {\n const clamped = clampDate(target, this.min(), this.max());\n this.pendingFocus = true;\n this.focusedDate.set(clamped);\n this.syncViewToFocus(clamped);\n }\n\n /** Bring the visible period into line with the focused cell after a move. */\n private syncViewToFocus(focus: Date): void {\n const v = this.viewDate();\n const differs =\n this.view() === 'days'\n ? !isSameMonth(focus, v)\n : this.view() === 'months'\n ? focus.getFullYear() !== v.getFullYear()\n : this.decadeStart(focus) !== this.decadeStart(v);\n if (differs) this.viewDate.set(startOfMonth(focus));\n }\n\n /** Move DOM focus onto the currently focused cell (used on popup open). */\n focusActiveCell(): void {\n const key = this.focusKey();\n const match = this.cells().find((c) => c.nativeElement.dataset['key'] === key);\n match?.nativeElement.focus();\n }\n\n private decadeStart(d: Date): number {\n return Math.floor(d.getFullYear() / 10) * 10;\n }\n}\n","<div class=\"bpx-calendar__header\">\n <button\n type=\"button\"\n class=\"bpx-calendar__nav\"\n [disabled]=\"!canPrev()\"\n (click)=\"step(-1)\"\n [attr.aria-label]=\"view() === 'days' ? 'Previous month' : view() === 'months' ? 'Previous year' : 'Previous decade'\"\n >\n <bpx-icon name=\"chevron-left\" size=\"sm\" />\n </button>\n\n <button\n type=\"button\"\n class=\"bpx-calendar__label\"\n [class.is-static]=\"view() === 'years'\"\n [disabled]=\"view() === 'years'\"\n aria-live=\"polite\"\n [attr.aria-label]=\"'Switch view — ' + headerLabel()\"\n (click)=\"drillUp()\"\n >\n {{ headerLabel() }}\n @if (view() !== 'years') {\n <bpx-icon name=\"chevron-down\" size=\"sm\" />\n }\n </button>\n\n <button\n type=\"button\"\n class=\"bpx-calendar__nav\"\n [disabled]=\"!canNext()\"\n (click)=\"step(1)\"\n [attr.aria-label]=\"view() === 'days' ? 'Next month' : view() === 'months' ? 'Next year' : 'Next decade'\"\n >\n <bpx-icon name=\"chevron-right\" size=\"sm\" />\n </button>\n</div>\n\n@switch (view()) {\n @case ('days') {\n <div class=\"bpx-calendar__grid\" role=\"grid\" (keydown)=\"onKeydown($event)\">\n <div class=\"bpx-calendar__row bpx-calendar__weekdays\" role=\"row\">\n @for (wd of weekdays(); track $index) {\n <span class=\"bpx-calendar__weekday\" role=\"columnheader\" [attr.aria-label]=\"wd\">{{ wd }}</span>\n }\n </div>\n\n @for (week of weeks(); track $index) {\n <div class=\"bpx-calendar__row\" role=\"row\">\n @for (day of week; track dayKey(day)) {\n <button\n #cell\n type=\"button\"\n role=\"gridcell\"\n class=\"bpx-calendar__day\"\n [attr.data-key]=\"dayKey(day)\"\n [class.is-outside]=\"isOutsideMonth(day)\"\n [class.is-today]=\"isToday(day)\"\n [class.is-selected]=\"isSelected(day)\"\n [disabled]=\"isDisabled(day)\"\n [attr.tabindex]=\"dayKey(day) === focusKey() ? 0 : -1\"\n [attr.aria-selected]=\"isSelected(day)\"\n [attr.aria-current]=\"isToday(day) ? 'date' : null\"\n (click)=\"selectDate(day)\"\n >\n {{ day.getDate() }}\n </button>\n }\n </div>\n }\n </div>\n }\n\n @case ('months') {\n <div class=\"bpx-calendar__grid bpx-calendar__grid--periods\" role=\"grid\" (keydown)=\"onKeydown($event)\">\n @for (row of monthRows(); track $index) {\n <div class=\"bpx-calendar__row bpx-calendar__row--periods\" role=\"row\">\n @for (month of row; track monthKey(month)) {\n <button\n #cell\n type=\"button\"\n role=\"gridcell\"\n class=\"bpx-calendar__period\"\n [attr.data-key]=\"monthKey(month)\"\n [class.is-today]=\"isMonthCurrent(month)\"\n [class.is-selected]=\"isMonthSelected(month)\"\n [disabled]=\"isMonthDisabled(month)\"\n [attr.tabindex]=\"monthKey(month) === focusKey() ? 0 : -1\"\n [attr.aria-selected]=\"isMonthSelected(month)\"\n [attr.aria-current]=\"isMonthCurrent(month) ? 'date' : null\"\n (click)=\"pickMonth(month)\"\n >\n {{ monthName(month) }}\n </button>\n }\n </div>\n }\n </div>\n }\n\n @case ('years') {\n <div class=\"bpx-calendar__grid bpx-calendar__grid--periods\" role=\"grid\" (keydown)=\"onKeydown($event)\">\n @for (row of yearRows(); track $index) {\n <div class=\"bpx-calendar__row bpx-calendar__row--periods\" role=\"row\">\n @for (year of row; track yearKey(year)) {\n <button\n #cell\n type=\"button\"\n role=\"gridcell\"\n class=\"bpx-calendar__period\"\n [attr.data-key]=\"yearKey(year)\"\n [class.is-outside]=\"isYearOutside(year)\"\n [class.is-today]=\"isYearCurrent(year)\"\n [class.is-selected]=\"isYearSelected(year)\"\n [disabled]=\"isYearDisabled(year)\"\n [attr.tabindex]=\"yearKey(year) === focusKey() ? 0 : -1\"\n [attr.aria-selected]=\"isYearSelected(year)\"\n [attr.aria-current]=\"isYearCurrent(year) ? 'date' : null\"\n (click)=\"pickYear(year)\"\n >\n {{ year.getFullYear() }}\n </button>\n }\n </div>\n }\n </div>\n }\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n model,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Calendar } from '../calendar/calendar';\nimport { BPX_DROPDOWN_POSITIONS } from '../core/overlay';\nimport { BpxSize } from '../core/types';\nimport { Icon } from '../icon/icon';\n\n/**\n * A date field that opens a `bpx-calendar` in a CDK overlay. Works standalone\n * with `[(value)]` and as a form control via `formControlName` / `[(ngModel)]`.\n * The displayed text is formatted with `Intl.DateTimeFormat` — control it with\n * `[displayFormat]` and `[locale]`.\n *\n * ```html\n * <bpx-date-picker [(value)]=\"date\" [min]=\"today\" clearable />\n * <bpx-date-picker formControlName=\"dob\" [displayFormat]=\"{ dateStyle: 'full' }\" />\n * ```\n */\n@Component({\n selector: 'bpx-date-picker',\n exportAs: 'bpxDatePicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [OverlayModule, Icon, Calendar],\n templateUrl: './date-picker.html',\n styleUrl: './date-picker.scss',\n host: {\n class: 'bpx-date-picker',\n '[attr.data-size]': 'size()',\n '[class.bpx-date-picker--invalid]': 'invalid()',\n '[class.bpx-date-picker--disabled]': 'disabled()',\n },\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DatePicker), multi: true },\n ],\n})\nexport class DatePicker implements ControlValueAccessor {\n /** The selected date. Two-way bindable via `[(value)]`. */\n readonly value = model<Date | null>(null);\n readonly placeholder = input('Select date…');\n readonly size = input<BpxSize>('md');\n /** Earliest selectable day (inclusive). */\n readonly min = input<Date | null>(null);\n /** Latest selectable day (inclusive). */\n readonly max = input<Date | null>(null);\n /** Extra predicate to disable individual days. */\n readonly dateDisabled = input<((date: Date) => boolean) | null>(null);\n /** First column of the week: 0 = Sunday (default), 1 = Monday. */\n readonly weekStartsOn = input<0 | 1>(0);\n /** `Intl.DateTimeFormat` options for the field's displayed text. */\n readonly displayFormat = input<Intl.DateTimeFormatOptions>({\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n });\n /** BCP-47 locale for the field text and calendar labels. */\n readonly locale = input<string | undefined>(undefined);\n /** Show a clear button while a date is set. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Error styling + `aria-invalid`. */\n readonly invalid = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input('', { alias: 'aria-label' });\n\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n private readonly cvaDisabled = signal(false);\n protected readonly disabled = computed(() => this.disabledInput() || this.cvaDisabled());\n\n protected readonly open = signal(false);\n protected readonly positions = BPX_DROPDOWN_POSITIONS;\n\n protected readonly displayValue = computed(() => {\n const v = this.value();\n if (!v) return '';\n return new Intl.DateTimeFormat(this.locale(), this.displayFormat()).format(v);\n });\n\n private onChange: (value: Date | null) => void = () => {};\n protected onTouched: () => void = () => {};\n\n protected toggle(trigger: HTMLElement): void {\n this.open() ? this.close(trigger) : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.disabled()) return;\n this.open.set(true);\n }\n\n protected close(returnFocusTo?: HTMLElement): void {\n if (!this.open()) return;\n this.open.set(false);\n this.onTouched();\n returnFocusTo?.focus();\n }\n\n protected onSelect(date: Date, trigger: HTMLElement): void {\n this.value.set(date);\n this.onChange(date);\n this.close(trigger);\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.value.set(null);\n this.onChange(null);\n }\n\n protected onTriggerKeydown(event: KeyboardEvent, trigger: HTMLElement): void {\n if (this.open()) {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close(trigger);\n }\n return;\n }\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown') {\n event.preventDefault();\n this.openPanel();\n }\n }\n\n // ── ControlValueAccessor ─────────────────────────────────────\n writeValue(value: Date | null): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n}\n","<button\n #trigger\n type=\"button\"\n class=\"bpx-date-picker__trigger\"\n cdkOverlayOrigin\n #origin=\"cdkOverlayOrigin\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-invalid]=\"invalid() || null\"\n [disabled]=\"disabled()\"\n [class.open]=\"open()\"\n (click)=\"toggle(trigger)\"\n (keydown)=\"onTriggerKeydown($event, trigger)\"\n>\n <bpx-icon class=\"bpx-date-picker__icon\" name=\"calendar\" size=\"sm\" />\n\n <span class=\"bpx-date-picker__value\" [class.placeholder]=\"!value()\">\n {{ displayValue() || placeholder() }}\n </span>\n\n @if (clearable() && value()) {\n <span\n class=\"bpx-date-picker__clear\"\n role=\"button\"\n aria-label=\"Clear date\"\n (click)=\"clear($event)\"\n >\n <bpx-icon name=\"close\" size=\"sm\" />\n </span>\n }\n</button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"origin\"\n [cdkConnectedOverlayOpen]=\"open()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n (overlayOutsideClick)=\"close()\"\n (detach)=\"close()\"\n>\n <div class=\"bpx-date-picker__panel\" role=\"dialog\" aria-label=\"Choose date\">\n <bpx-calendar\n autoFocus\n [value]=\"value()\"\n [min]=\"min()\"\n [max]=\"max()\"\n [dateDisabled]=\"dateDisabled()\"\n [weekStartsOn]=\"weekStartsOn()\"\n [locale]=\"locale()\"\n (dateSelected)=\"onSelect($event, trigger)\"\n (escaped)=\"close(trigger)\"\n />\n </div>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ElementRef, inject, input } from '@angular/core';\n\n/**\n * A card whose surface lights up with a radial glow that follows the cursor.\n *\n * ```html\n * <bpx-spotlight-card>…content…</bpx-spotlight-card>\n * <bpx-spotlight-card color=\"var(--bpx-color-info)\" [size]=\"320\">…</bpx-spotlight-card>\n * ```\n */\n@Component({\n selector: 'bpx-spotlight-card',\n exportAs: 'bpxSpotlightCard',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<div class=\"bpx-spotlight-card__content\"><ng-content /></div>`,\n styleUrl: './spotlight-card.scss',\n host: {\n class: 'bpx-spotlight-card',\n '[style.--spot-size.px]': 'size()',\n '[style.--spot-color]': 'color()',\n '(pointermove)': 'onMove($event)',\n '(pointerleave)': 'onLeave()',\n },\n})\nexport class SpotlightCard {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Diameter of the glow in px. */\n readonly size = input(260);\n /** Glow color (any CSS color / token). */\n readonly color = input('var(--bpx-color-primary)');\n\n protected onMove(event: PointerEvent): void {\n const rect = this.el.nativeElement.getBoundingClientRect();\n const style = this.el.nativeElement.style;\n style.setProperty('--spot-x', `${event.clientX - rect.left}px`);\n style.setProperty('--spot-y', `${event.clientY - rect.top}px`);\n style.setProperty('--spot-opacity', '1');\n }\n\n protected onLeave(): void {\n this.el.nativeElement.style.setProperty('--spot-opacity', '0');\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n} from '@angular/core';\n\n/**\n * A card that tilts in 3D toward the pointer, with an optional moving glare.\n *\n * ```html\n * <bpx-tilt-card>…content…</bpx-tilt-card>\n * <bpx-tilt-card [max]=\"18\" [glare]=\"false\">…</bpx-tilt-card>\n * ```\n */\n@Component({\n selector: 'bpx-tilt-card',\n exportAs: 'bpxTiltCard',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"bpx-tilt-card__inner\">\n <div class=\"bpx-tilt-card__content\"><ng-content /></div>\n @if (glare()) {\n <div class=\"bpx-tilt-card__glare\"></div>\n }\n </div>\n `,\n styleUrl: './tilt-card.scss',\n host: {\n class: 'bpx-tilt-card',\n '(pointermove)': 'onMove($event)',\n '(pointerleave)': 'onLeave()',\n },\n})\nexport class TiltCard {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Maximum tilt in degrees. */\n readonly max = input(12);\n /** Show the moving glare highlight. */\n readonly glare = input(true, { transform: booleanAttribute });\n\n protected onMove(event: PointerEvent): void {\n const node = this.el.nativeElement;\n const rect = node.getBoundingClientRect();\n const px = (event.clientX - rect.left) / rect.width - 0.5;\n const py = (event.clientY - rect.top) / rect.height - 0.5;\n const style = node.style;\n style.setProperty('--ry', `${px * this.max()}deg`);\n style.setProperty('--rx', `${-py * this.max()}deg`);\n style.setProperty('--gx', `${(px + 0.5) * 100}%`);\n style.setProperty('--gy', `${(py + 0.5) * 100}%`);\n style.setProperty('--tilt-scale', '1.02');\n style.setProperty('--glare-opacity', '1');\n }\n\n protected onLeave(): void {\n const style = this.el.nativeElement.style;\n style.setProperty('--ry', '0deg');\n style.setProperty('--rx', '0deg');\n style.setProperty('--tilt-scale', '1');\n style.setProperty('--glare-opacity', '0');\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\n/**\n * Text with an animated gradient sweep.\n *\n * ```html\n * <bpx-gradient-text>BlueprintX</bpx-gradient-text>\n * <bpx-gradient-text from=\"#f43f5e\" via=\"#a855f7\" to=\"#22d3ee\" [speed]=\"6\">Custom</bpx-gradient-text>\n * ```\n */\n@Component({\n selector: 'bpx-gradient-text',\n exportAs: 'bpxGradientText',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styleUrl: './gradient-text.scss',\n host: {\n class: 'bpx-gradient-text',\n '[style.--grad]': 'gradient()',\n '[style.--grad-speed]': \"speed() + 's'\",\n },\n})\nexport class GradientText {\n readonly from = input('var(--bpx-color-primary)');\n readonly via = input('var(--bpx-color-info)');\n readonly to = input('var(--bpx-color-success)');\n /** Animation duration in seconds. */\n readonly speed = input(6);\n\n protected readonly gradient = computed(\n () => `linear-gradient(90deg, ${this.from()}, ${this.via()}, ${this.to()}, ${this.via()}, ${this.from()})`,\n );\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/**\n * Text with a shimmering light band that sweeps across the glyphs.\n *\n * ```html\n * <bpx-shiny-text>Just shipped</bpx-shiny-text>\n * <bpx-shiny-text base=\"#94a3b8\" [speed]=\"4\">Loading…</bpx-shiny-text>\n * ```\n */\n@Component({\n selector: 'bpx-shiny-text',\n exportAs: 'bpxShinyText',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `<ng-content />`,\n styleUrl: './shiny-text.scss',\n host: {\n class: 'bpx-shiny-text',\n '[style.--shine-base]': 'base()',\n '[style.--shine-speed]': \"speed() + 's'\",\n },\n})\nexport class ShinyText {\n /** Base (dim) text color. */\n readonly base = input('var(--bpx-color-text-muted)');\n /** Sweep duration in seconds. */\n readonly speed = input(3);\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/**\n * Wraps content in a card with an animated gradient \"beam\" traveling around\n * the border.\n *\n * ```html\n * <bpx-border-beam>…content…</bpx-border-beam>\n * <bpx-border-beam color=\"var(--bpx-color-success)\" [speed]=\"3\">…</bpx-border-beam>\n * ```\n */\n@Component({\n selector: 'bpx-border-beam',\n exportAs: 'bpxBorderBeam',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"bpx-border-beam__beam\" aria-hidden=\"true\"></span>\n <div class=\"bpx-border-beam__inner\"><ng-content /></div>\n `,\n styleUrl: './border-beam.scss',\n host: {\n class: 'bpx-border-beam',\n '[style.--beam-color]': 'color()',\n '[style.--beam-speed]': \"speed() + 's'\",\n },\n})\nexport class BorderBeam {\n /** Beam color. */\n readonly color = input('var(--bpx-color-primary)');\n /** Rotation duration in seconds. */\n readonly speed = input(4);\n}\n","import { Directive, ElementRef, inject, input, signal } from '@angular/core';\n\n/**\n * Makes any element magnetic: it's gently pulled toward the pointer while\n * hovering and springs back on leave.\n *\n * ```html\n * <button bpx-button bpxMagnetic>Hover me</button>\n * <div bpxMagnetic [magnetStrength]=\"0.5\">…</div>\n * ```\n */\n@Directive({\n selector: '[bpxMagnetic]',\n host: {\n '[style.transform]': \"'translate(' + tx() + 'px,' + ty() + 'px)'\",\n '[style.transition]': \"'transform ' + (active() ? '80ms' : '350ms') + ' cubic-bezier(0.2,0,0,1)'\",\n '[style.will-change]': \"'transform'\",\n '(pointermove)': 'onMove($event)',\n '(pointerleave)': 'onLeave()',\n },\n})\nexport class Magnetic {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** How strongly the element follows the pointer (0–1). */\n readonly strength = input(0.35, { alias: 'magnetStrength' });\n\n protected readonly tx = signal(0);\n protected readonly ty = signal(0);\n protected readonly active = signal(false);\n\n protected onMove(event: PointerEvent): void {\n const rect = this.el.nativeElement.getBoundingClientRect();\n const cx = rect.left + rect.width / 2;\n const cy = rect.top + rect.height / 2;\n this.active.set(true);\n this.tx.set((event.clientX - cx) * this.strength());\n this.ty.set((event.clientY - cy) * this.strength());\n }\n\n protected onLeave(): void {\n this.active.set(false);\n this.tx.set(0);\n this.ty.set(0);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n Directive,\n ElementRef,\n inject,\n input,\n Renderer2,\n RendererStyleFlags2,\n} from '@angular/core';\n\nlet stylesInjected = false;\n\n/**\n * Emits a burst of little sparks from the point of a click.\n *\n * ```html\n * <button bpx-button bpxClickSpark>Click me</button>\n * <div bpxClickSpark sparkColor=\"var(--bpx-color-success)\" [sparkCount]=\"12\">…</div>\n * ```\n */\n@Directive({\n selector: '[bpxClickSpark]',\n host: { '(click)': 'spark($event)' },\n})\nexport class ClickSpark {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly doc = inject(DOCUMENT);\n\n readonly color = input('var(--bpx-color-primary)', { alias: 'sparkColor' });\n readonly count = input(8, { alias: 'sparkCount' });\n readonly radius = input(48, { alias: 'sparkRadius' });\n /**\n * Scatter radius (px) for where each spark is *born*. `0` spawns every spark\n * exactly at the cursor; larger values pick a random origin within this radius\n * of the click, so the burst looks like it erupts from an area, not a point.\n */\n readonly spread = input(0, { alias: 'sparkSpread' });\n\n constructor() {\n this.ensureStyles();\n // Sparks are positioned relative to the host.\n const pos = getComputedStyle(this.el.nativeElement).position;\n if (pos === 'static') {\n this.renderer.setStyle(this.el.nativeElement, 'position', 'relative');\n }\n }\n\n protected spark(event: MouseEvent): void {\n const host = this.el.nativeElement;\n const rect = host.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n const n = this.count();\n const spread = this.spread();\n\n for (let i = 0; i < n; i++) {\n // Each spark is born at its own random point within `spread` of the click.\n // sqrt keeps the origins spread evenly across the disc rather than clumping\n // in the centre.\n const originAngle = Math.random() * Math.PI * 2;\n const originDist = spread * Math.sqrt(Math.random());\n const ox = x + Math.cos(originAngle) * originDist;\n const oy = y + Math.sin(originAngle) * originDist;\n\n const angle = (i / n) * Math.PI * 2 + Math.random() * 0.4;\n const dist = this.radius() * (0.6 + Math.random() * 0.4);\n const len = 9 + Math.random() * 9; // streak length varies 9–18px\n const dot = this.renderer.createElement('span');\n this.renderer.addClass(dot, 'bpx-spark');\n this.renderer.setStyle(dot, 'left', `${ox}px`);\n this.renderer.setStyle(dot, 'top', `${oy}px`);\n // Custom properties MUST use the DashCase flag, otherwise Renderer2 does\n // `el.style['--x'] = v`, which silently no-ops for CSS custom properties.\n const cssVar = RendererStyleFlags2.DashCase;\n this.renderer.setStyle(dot, '--spark-color', this.color(), cssVar);\n this.renderer.setStyle(dot, '--rot', `${angle}rad`, cssVar);\n this.renderer.setStyle(dot, '--len', `${len}px`, cssVar);\n this.renderer.setStyle(dot, '--tx', `${Math.cos(angle) * dist}px`, cssVar);\n this.renderer.setStyle(dot, '--ty', `${Math.sin(angle) * dist}px`, cssVar);\n this.renderer.appendChild(host, dot);\n this.doc.defaultView?.setTimeout(() => this.renderer.removeChild(host, dot), 600);\n }\n }\n\n private ensureStyles(): void {\n if (stylesInjected) return;\n stylesInjected = true;\n const style = this.renderer.createElement('style');\n style.textContent = `\n .bpx-spark {\n position: absolute;\n width: var(--len, 12px);\n height: 2px;\n margin-top: -1px;\n margin-left: calc(var(--len, 12px) / -2);\n border-radius: 2px;\n pointer-events: none;\n z-index: 9999;\n opacity: 1;\n /* Faint tail -> bright body -> hot white tip, so it reads as a streak. */\n background: linear-gradient(\n 90deg,\n transparent 0%,\n var(--spark-color, #fff) 65%,\n #fff 100%\n );\n box-shadow: 0 0 6px 0 var(--spark-color, #fff);\n transform: translate(0, 0) rotate(var(--rot, 0)) scaleX(0.3);\n animation: bpx-spark-fly 500ms cubic-bezier(0.12, 0.7, 0.15, 1) forwards;\n }\n @keyframes bpx-spark-fly {\n 0% { transform: translate(0, 0) rotate(var(--rot, 0)) scaleX(0.3); opacity: 1; }\n 70% { opacity: 1; }\n 100% { transform: translate(var(--tx), var(--ty)) rotate(var(--rot, 0)) scaleX(1); opacity: 0; }\n }\n `;\n this.renderer.appendChild(this.doc.head, style);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { booleanAttribute, Directive, ElementRef, inject, input, Renderer2 } from '@angular/core';\n\nlet stylesInjected = false;\n\n/**\n * A material-style ripple that expands from the pointer on press. Adds\n * `position: relative` + `overflow: hidden` to its host.\n *\n * ```html\n * <button bpx-button bpxRipple>Click</button>\n * <div bpxRipple bpxRippleColor=\"var(--bpx-color-primary)\">…</div>\n * ```\n */\n@Directive({\n selector: '[bpxRipple]',\n host: {\n '[style.position]': \"'relative'\",\n '[style.overflow]': \"'hidden'\",\n '(pointerdown)': 'spawn($event)',\n },\n})\nexport class Ripple {\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly renderer = inject(Renderer2);\n private readonly doc = inject(DOCUMENT);\n\n readonly color = input('currentColor', { alias: 'bpxRippleColor' });\n readonly disabled = input(false, { alias: 'bpxRippleDisabled', transform: booleanAttribute });\n\n protected spawn(event: PointerEvent): void {\n if (this.disabled()) return;\n this.ensureStyles();\n\n const host = this.el.nativeElement;\n const rect = host.getBoundingClientRect();\n const size = Math.max(rect.width, rect.height);\n\n const ripple = this.renderer.createElement('span');\n this.renderer.addClass(ripple, 'bpx-ripple');\n this.renderer.setStyle(ripple, 'width', `${size}px`);\n this.renderer.setStyle(ripple, 'height', `${size}px`);\n this.renderer.setStyle(ripple, 'left', `${event.clientX - rect.left - size / 2}px`);\n this.renderer.setStyle(ripple, 'top', `${event.clientY - rect.top - size / 2}px`);\n this.renderer.setStyle(ripple, 'background', this.color());\n this.renderer.appendChild(host, ripple);\n\n ripple.addEventListener('animationend', () => this.renderer.removeChild(host, ripple), {\n once: true,\n });\n }\n\n private ensureStyles(): void {\n if (stylesInjected) return;\n stylesInjected = true;\n const style = this.renderer.createElement('style');\n style.textContent = `\n .bpx-ripple {\n position: absolute;\n border-radius: 50%;\n pointer-events: none;\n opacity: 0.35;\n transform: scale(0);\n animation: bpx-ripple 600ms cubic-bezier(0.2, 0.6, 0.2, 1) forwards;\n }\n @keyframes bpx-ripple {\n to { transform: scale(2.2); opacity: 0; }\n }\n `;\n this.renderer.appendChild(this.doc.head, style);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\n/**\n * Animates a number from `from` to `to` with an ease-out curve.\n *\n * ```html\n * <bpx-count-up [to]=\"1284\" suffix=\"+\" />\n * <bpx-count-up [to]=\"99.9\" [decimals]=\"1\" suffix=\"%\" />\n * ```\n */\n@Component({\n selector: 'bpx-count-up',\n exportAs: 'bpxCountUp',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `{{ display() }}`,\n host: { class: 'bpx-count-up' },\n})\nexport class CountUp {\n readonly to = input.required<number>();\n readonly from = input(0);\n readonly duration = input(1500);\n readonly decimals = input(0);\n readonly prefix = input('');\n readonly suffix = input('');\n\n private readonly doc = inject(DOCUMENT);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private readonly current = signal(0);\n private raf?: number;\n\n protected readonly display = computed(() => {\n const n = this.current().toLocaleString(undefined, {\n minimumFractionDigits: this.decimals(),\n maximumFractionDigits: this.decimals(),\n });\n return `${this.prefix()}${n}${this.suffix()}`;\n });\n\n constructor() {\n effect(() => {\n const to = this.to();\n const from = this.from();\n this.animate(from, to);\n });\n inject(DestroyRef).onDestroy(() => this.cancel());\n }\n\n private animate(from: number, to: number): void {\n this.cancel();\n const view = this.doc.defaultView;\n if (!this.isBrowser || !view) {\n this.current.set(to);\n return;\n }\n const duration = this.duration();\n const start = view.performance.now();\n const tick = (now: number): void => {\n const t = Math.min(1, (now - start) / duration);\n const eased = 1 - Math.pow(1 - t, 3);\n this.current.set(from + (to - from) * eased);\n if (t < 1) this.raf = view.requestAnimationFrame(tick);\n };\n this.raf = view.requestAnimationFrame(tick);\n }\n\n private cancel(): void {\n if (this.raf !== undefined) {\n this.doc.defaultView?.cancelAnimationFrame(this.raf);\n this.raf = undefined;\n }\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n inject,\n input,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\n\n/**\n * Types out text one character at a time with a blinking cursor.\n *\n * ```html\n * <bpx-typewriter text=\"Ship faster with BlueprintX.\" />\n * <bpx-typewriter text=\"Hello\" [speed]=\"90\" />\n * ```\n */\n@Component({\n selector: 'bpx-typewriter',\n exportAs: 'bpxTypewriter',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"bpx-typewriter__text\">{{ shown() }}</span>\n <span class=\"bpx-typewriter__cursor\" [class.done]=\"finished()\"></span>\n `,\n styleUrl: './typewriter.scss',\n host: { class: 'bpx-typewriter' },\n})\nexport class Typewriter {\n readonly text = input.required<string>();\n /** Milliseconds per character. */\n readonly speed = input(55);\n /** Delay before typing starts, in ms. */\n readonly startDelay = input(150);\n\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n protected readonly shown = signal('');\n protected readonly finished = computed(() => this.shown().length === this.text().length);\n\n private timer?: ReturnType<typeof setTimeout>;\n\n constructor() {\n effect(() => {\n const text = this.text();\n this.start(text);\n });\n inject(DestroyRef).onDestroy(() => this.clear());\n }\n\n private start(text: string): void {\n this.clear();\n if (!this.isBrowser) {\n this.shown.set(text);\n return;\n }\n this.shown.set('');\n const typeNext = (index: number): void => {\n if (index > text.length) return;\n this.shown.set(text.slice(0, index));\n if (index < text.length) {\n this.timer = setTimeout(() => typeNext(index + 1), this.speed());\n }\n };\n this.timer = setTimeout(() => typeNext(1), this.startDelay());\n }\n\n private clear(): void {\n if (this.timer !== undefined) {\n clearTimeout(this.timer);\n this.timer = undefined;\n }\n }\n}\n","import {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n input,\n viewChild,\n} from '@angular/core';\n\n/**\n * Seamlessly scrolls its projected content on a loop. Pauses on hover.\n *\n * ```html\n * <bpx-marquee [speed]=\"24\">\n * <span>Ship faster</span><span>Design tokens</span><span>Accessible</span>\n * </bpx-marquee>\n * ```\n */\n@Component({\n selector: 'bpx-marquee',\n exportAs: 'bpxMarquee',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"bpx-marquee__track\" [style.animation-duration.s]=\"speed()\">\n <div #group class=\"bpx-marquee__group\"><ng-content /></div>\n </div>\n `,\n styleUrl: './marquee.scss',\n host: {\n class: 'bpx-marquee',\n '[attr.data-direction]': 'direction()',\n },\n})\nexport class Marquee {\n /** Seconds for one full loop. */\n readonly speed = input(20);\n readonly direction = input<'left' | 'right'>('left');\n\n private readonly group = viewChild.required<ElementRef<HTMLElement>>('group');\n\n constructor() {\n // Duplicate the content so the track can loop with no visible seam.\n afterNextRender(() => {\n const original = this.group().nativeElement;\n const clone = original.cloneNode(true) as HTMLElement;\n clone.setAttribute('aria-hidden', 'true');\n original.parentElement?.appendChild(clone);\n });\n }\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n/**\n * An animated aurora backdrop — soft drifting color blobs behind your content.\n *\n * ```html\n * <bpx-aurora>\n * <h1>BlueprintX</h1>\n * </bpx-aurora>\n * ```\n */\n@Component({\n selector: 'bpx-aurora',\n exportAs: 'bpxAurora',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"bpx-aurora__bg\" aria-hidden=\"true\">\n <span class=\"bpx-aurora__blob b1\"></span>\n <span class=\"bpx-aurora__blob b2\"></span>\n <span class=\"bpx-aurora__blob b3\"></span>\n </div>\n <div class=\"bpx-aurora__content\"><ng-content /></div>\n `,\n styleUrl: './aurora.scss',\n host: {\n class: 'bpx-aurora',\n '[style.--aurora-1]': 'color1()',\n '[style.--aurora-2]': 'color2()',\n '[style.--aurora-3]': 'color3()',\n },\n})\nexport class Aurora {\n readonly color1 = input('#6366f1');\n readonly color2 = input('#a855f7');\n readonly color3 = input('#22d3ee');\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { uniqueId } from '../../core/id';\n\n/**\n * Wraps content in a glowing, lightning-like animated border. The edge is\n * distorted by an animated SVG turbulence + displacement filter, with layered\n * blur for the neon glow.\n *\n * ```html\n * <bpx-electric-border color=\"#5eb3ff\">\n * <div style=\"padding: 2rem\">Charged up</div>\n * </bpx-electric-border>\n * ```\n */\n@Component({\n selector: 'bpx-electric-border',\n exportAs: 'bpxElectricBorder',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './electric-border.html',\n styleUrl: './electric-border.scss',\n host: {\n class: 'bpx-electric-border',\n '[style.--eb-color]': 'color()',\n '[style.--eb-thickness.px]': 'thickness()',\n '[style.--eb-radius]': 'radius()',\n '[style.--eb-filter]': \"'url(#' + filterId + ')'\",\n },\n})\nexport class ElectricBorder {\n /** Bolt / glow color. */\n readonly color = input('#5eb3ff');\n /** Seconds for one flow cycle (lower = faster crackle). */\n readonly speed = input(3);\n /** Border thickness in px. */\n readonly thickness = input(2);\n /** Displacement strength — how wild the lightning wobble is. */\n readonly intensity = input(30);\n /** Corner radius (any CSS length). */\n readonly radius = input('0.75rem');\n\n /** Unique so multiple instances don't share one SVG filter. */\n protected readonly filterId = `${uniqueId('bpx-electric')}-f`;\n}\n","<div class=\"bpx-electric-border__content\"><ng-content /></div>\n\n<div class=\"bpx-electric-border__layer bpx-electric-border__layer--stroke\"></div>\n<div class=\"bpx-electric-border__layer bpx-electric-border__layer--glow\"></div>\n<div class=\"bpx-electric-border__layer bpx-electric-border__layer--outer\"></div>\n\n<svg class=\"bpx-electric-border__svg\" aria-hidden=\"true\" width=\"0\" height=\"0\">\n <defs>\n <filter\n [attr.id]=\"filterId\"\n colorInterpolationFilters=\"sRGB\"\n x=\"-30%\"\n y=\"-30%\"\n width=\"160%\"\n height=\"160%\"\n >\n <!-- Vertical crackle: two counter-scrolling noise fields. -->\n <feTurbulence type=\"turbulence\" baseFrequency=\"0.02\" numOctaves=\"3\" seed=\"1\" result=\"n1\" />\n <feOffset in=\"n1\" dx=\"0\" dy=\"0\" result=\"o1\">\n <animate attributeName=\"dy\" values=\"700;0\" [attr.dur]=\"speed() + 's'\" repeatCount=\"indefinite\" calcMode=\"linear\" />\n </feOffset>\n <feTurbulence type=\"turbulence\" baseFrequency=\"0.02\" numOctaves=\"3\" seed=\"1\" result=\"n2\" />\n <feOffset in=\"n2\" dx=\"0\" dy=\"0\" result=\"o2\">\n <animate attributeName=\"dy\" values=\"0;-700\" [attr.dur]=\"speed() + 's'\" repeatCount=\"indefinite\" calcMode=\"linear\" />\n </feOffset>\n <feBlend in=\"o1\" in2=\"o2\" mode=\"color-dodge\" result=\"vertical\" />\n\n <!-- Horizontal crackle: another counter-scrolling pair. -->\n <feTurbulence type=\"turbulence\" baseFrequency=\"0.02\" numOctaves=\"3\" seed=\"2\" result=\"n3\" />\n <feOffset in=\"n3\" dx=\"0\" dy=\"0\" result=\"o3\">\n <animate attributeName=\"dx\" values=\"490;0\" [attr.dur]=\"speed() * 1.6 + 's'\" repeatCount=\"indefinite\" calcMode=\"linear\" />\n </feOffset>\n <feTurbulence type=\"turbulence\" baseFrequency=\"0.02\" numOctaves=\"3\" seed=\"2\" result=\"n4\" />\n <feOffset in=\"n4\" dx=\"0\" dy=\"0\" result=\"o4\">\n <animate attributeName=\"dx\" values=\"0;-490\" [attr.dur]=\"speed() * 1.6 + 's'\" repeatCount=\"indefinite\" calcMode=\"linear\" />\n </feOffset>\n <feBlend in=\"o3\" in2=\"o4\" mode=\"color-dodge\" result=\"horizontal\" />\n\n <!-- Combined, ever-shifting noise field displaces the border on all edges. -->\n <feBlend in=\"vertical\" in2=\"horizontal\" mode=\"color-dodge\" result=\"noise\" />\n <feDisplacementMap\n in=\"SourceGraphic\"\n in2=\"noise\"\n [attr.scale]=\"intensity()\"\n xChannelSelector=\"R\"\n yChannelSelector=\"B\"\n />\n </filter>\n </defs>\n</svg>\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n numberAttribute,\n PLATFORM_ID,\n viewChild,\n} from '@angular/core';\n\ninterface Dot {\n x: number;\n y: number;\n vx: number;\n vy: number;\n}\n\n/**\n * An interactive particle-network backdrop: drifting dots linked by lines, with\n * the lines reaching toward the cursor. Project your content on top.\n *\n * ```html\n * <bpx-particles color=\"#6366f1\">\n * <h1>BlueprintX</h1>\n * </bpx-particles>\n * ```\n */\n@Component({\n selector: 'bpx-particles',\n exportAs: 'bpxParticles',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <canvas #canvas class=\"bpx-particles__canvas\" aria-hidden=\"true\"></canvas>\n <div class=\"bpx-particles__content\"><ng-content /></div>\n `,\n styleUrl: './particles.scss',\n host: {\n class: 'bpx-particles',\n '(pointermove)': 'onMove($event)',\n '(pointerleave)': 'onLeave()',\n },\n})\nexport class Particles {\n /** Number of particles. */\n readonly count = input(60, { transform: numberAttribute });\n /** Dot color. */\n readonly color = input('#6366f1');\n /** Line color; defaults to the dot color. */\n readonly linkColor = input('');\n /** Drift speed (px per frame, roughly). */\n readonly speed = input(0.4, { transform: numberAttribute });\n /** Max distance at which two dots (or a dot and the cursor) are linked. */\n readonly linkDistance = input(120, { transform: numberAttribute });\n /** Dot radius in px. */\n readonly radius = input(2, { transform: numberAttribute });\n /** Link dots to the cursor on hover. */\n readonly interactive = input(true, { transform: booleanAttribute });\n\n private readonly canvasRef = viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private ctx: CanvasRenderingContext2D | null = null;\n private dots: Dot[] = [];\n private raf = 0;\n private ro?: ResizeObserver;\n private readonly pointer = { x: -9999, y: -9999 };\n\n constructor() {\n if (!this.isBrowser) return;\n\n afterNextRender(() => this.start());\n // Re-seed when the particle count or speed changes.\n effect(() => {\n this.count();\n this.speed();\n if (this.ctx) this.resize();\n });\n inject(DestroyRef).onDestroy(() => this.stop());\n }\n\n private start(): void {\n const canvas = this.canvasRef().nativeElement;\n this.ctx = canvas.getContext('2d');\n if (!this.ctx) return;\n\n this.resize();\n this.ro = new ResizeObserver(() => this.resize());\n this.ro.observe(canvas);\n this.loop();\n }\n\n private stop(): void {\n cancelAnimationFrame(this.raf);\n this.ro?.disconnect();\n }\n\n private resize(): void {\n const canvas = this.canvasRef().nativeElement;\n const dpr = Math.min(window.devicePixelRatio || 1, 2);\n const w = canvas.clientWidth;\n const h = canvas.clientHeight;\n canvas.width = w * dpr;\n canvas.height = h * dpr;\n this.ctx!.setTransform(dpr, 0, 0, dpr, 0, 0);\n this.seed(w, h);\n }\n\n private seed(w: number, h: number): void {\n const n = Math.max(0, this.count());\n const s = this.speed();\n this.dots = Array.from({ length: n }, () => ({\n x: Math.random() * w,\n y: Math.random() * h,\n vx: (Math.random() - 0.5) * s * 2,\n vy: (Math.random() - 0.5) * s * 2,\n }));\n }\n\n private loop = (): void => {\n this.draw(true);\n this.raf = requestAnimationFrame(this.loop);\n };\n\n private draw(animate: boolean): void {\n const ctx = this.ctx;\n if (!ctx) return;\n const canvas = this.canvasRef().nativeElement;\n const w = canvas.clientWidth;\n const h = canvas.clientHeight;\n ctx.clearRect(0, 0, w, h);\n\n const dots = this.dots;\n const link = this.linkDistance();\n const color = this.color();\n const linkColor = this.linkColor() || color;\n\n if (animate) {\n for (const d of dots) {\n d.x += d.vx;\n d.y += d.vy;\n if (d.x <= 0 || d.x >= w) d.vx *= -1;\n if (d.y <= 0 || d.y >= h) d.vy *= -1;\n }\n }\n\n ctx.lineWidth = 1;\n ctx.strokeStyle = linkColor;\n for (let i = 0; i < dots.length; i++) {\n for (let j = i + 1; j < dots.length; j++) {\n const dist = Math.hypot(dots[i].x - dots[j].x, dots[i].y - dots[j].y);\n if (dist < link) {\n ctx.globalAlpha = (1 - dist / link) * 0.5;\n ctx.beginPath();\n ctx.moveTo(dots[i].x, dots[i].y);\n ctx.lineTo(dots[j].x, dots[j].y);\n ctx.stroke();\n }\n }\n if (this.interactive() && this.pointer.x > -9999) {\n const dist = Math.hypot(dots[i].x - this.pointer.x, dots[i].y - this.pointer.y);\n if (dist < link) {\n ctx.globalAlpha = (1 - dist / link) * 0.7;\n ctx.beginPath();\n ctx.moveTo(dots[i].x, dots[i].y);\n ctx.lineTo(this.pointer.x, this.pointer.y);\n ctx.stroke();\n }\n }\n }\n\n ctx.globalAlpha = 0.9;\n ctx.fillStyle = color;\n const r = this.radius();\n for (const d of dots) {\n ctx.beginPath();\n ctx.arc(d.x, d.y, r, 0, Math.PI * 2);\n ctx.fill();\n }\n ctx.globalAlpha = 1;\n }\n\n protected onMove(event: PointerEvent): void {\n if (!this.interactive()) return;\n const rect = this.host.nativeElement.getBoundingClientRect();\n this.pointer.x = event.clientX - rect.left;\n this.pointer.y = event.clientY - rect.top;\n }\n protected onLeave(): void {\n this.pointer.x = -9999;\n this.pointer.y = -9999;\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n numberAttribute,\n} from '@angular/core';\n\n/**\n * A dotted-grid backdrop with an accent glow that follows the cursor — the dots\n * near the pointer light up. Project your content on top.\n *\n * ```html\n * <bpx-dot-grid accentColor=\"#6366f1\">\n * <h1>BlueprintX</h1>\n * </bpx-dot-grid>\n * ```\n */\n@Component({\n selector: 'bpx-dot-grid',\n exportAs: 'bpxDotGrid',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"bpx-dot-grid__bg\" aria-hidden=\"true\"></div>\n <div class=\"bpx-dot-grid__content\"><ng-content /></div>\n `,\n styleUrl: './dot-grid.scss',\n host: {\n class: 'bpx-dot-grid',\n '[class.bpx-dot-grid--interactive]': 'interactive()',\n '[style.--dg-gap.px]': 'gap()',\n '[style.--dg-dot]': 'dotColor()',\n '[style.--dg-accent]': 'accentColor()',\n '[style.--dg-radius.px]': 'spotlightRadius()',\n '(pointermove)': 'onMove($event)',\n },\n})\nexport class DotGrid {\n /** Spacing between dots, in px. */\n readonly gap = input(24, { transform: numberAttribute });\n /** Base dot color. Defaults to a theme-aware subtle tint of the text color. */\n readonly dotColor = input('color-mix(in srgb, currentColor 22%, transparent)');\n /** Color of the dots lit under the cursor. */\n readonly accentColor = input('#6366f1');\n /** Radius of the cursor spotlight, in px. */\n readonly spotlightRadius = input(180, { transform: numberAttribute });\n /** Light up dots under the cursor. When off, the grid is static. */\n readonly interactive = input(true, { transform: booleanAttribute });\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n protected onMove(event: PointerEvent): void {\n if (!this.interactive()) return;\n const rect = this.host.nativeElement.getBoundingClientRect();\n const el = this.host.nativeElement;\n el.style.setProperty('--dg-mx', `${event.clientX - rect.left}px`);\n el.style.setProperty('--dg-my', `${event.clientY - rect.top}px`);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n numberAttribute,\n} from '@angular/core';\n\ninterface MeteorStyle {\n left: string;\n delay: string;\n duration: string;\n}\n\n/** Deterministic pseudo-random in [0, 1) from an index + salt (stable per render). */\nfunction pseudo(i: number, salt: number): number {\n const x = Math.sin(i * 12.9898 + salt * 78.233) * 43758.5453;\n return x - Math.floor(x);\n}\n\n/**\n * A shower of shooting-star meteors streaking across the backdrop. Project your\n * content on top.\n *\n * ```html\n * <bpx-meteors [count]=\"24\" color=\"#a5b4fc\">\n * <h1>BlueprintX</h1>\n * </bpx-meteors>\n * ```\n */\n@Component({\n selector: 'bpx-meteors',\n exportAs: 'bpxMeteors',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"bpx-meteors__bg\" aria-hidden=\"true\">\n @for (m of meteors(); track $index) {\n <span\n class=\"bpx-meteors__meteor\"\n [style.left]=\"m.left\"\n [style.animation-delay]=\"m.delay\"\n [style.animation-duration]=\"m.duration\"\n ></span>\n }\n </div>\n <div class=\"bpx-meteors__content\"><ng-content /></div>\n `,\n styleUrl: './meteors.scss',\n host: {\n class: 'bpx-meteors',\n '[style.--meteor-color]': 'color()',\n },\n})\nexport class Meteors {\n /** Number of meteors. */\n readonly count = input(20, { transform: numberAttribute });\n /** Meteor and trail color. */\n readonly color = input('#c7d2fe');\n\n protected readonly meteors = computed<MeteorStyle[]>(() =>\n Array.from({ length: Math.max(0, this.count()) }, (_, i) => ({\n left: `${Math.round(pseudo(i, 1) * 100)}%`,\n delay: `${(pseudo(i, 2) * 6).toFixed(2)}s`,\n duration: `${(3 + pseudo(i, 3) * 4).toFixed(2)}s`,\n })),\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, input, numberAttribute } from '@angular/core';\n\n/**\n * A synthwave-style perspective grid that scrolls toward the horizon. Project\n * your content on top.\n *\n * ```html\n * <bpx-retro-grid color=\"#6366f1\">\n * <h1>BlueprintX</h1>\n * </bpx-retro-grid>\n * ```\n */\n@Component({\n selector: 'bpx-retro-grid',\n exportAs: 'bpxRetroGrid',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"bpx-retro-grid__bg\" aria-hidden=\"true\">\n <div class=\"bpx-retro-grid__plane\"></div>\n </div>\n <div class=\"bpx-retro-grid__content\"><ng-content /></div>\n `,\n styleUrl: './retro-grid.scss',\n host: {\n class: 'bpx-retro-grid',\n '[style.--rg-color]': 'color()',\n '[style.--rg-speed]': 'speedS()',\n '[style.--rg-cell.px]': 'cellSize()',\n },\n})\nexport class RetroGrid {\n /** Grid line color. */\n readonly color = input('#6366f1');\n /** Seconds for one full scroll cycle (lower = faster). */\n readonly speed = input(10, { transform: numberAttribute });\n /** Grid cell size in px. */\n readonly cellSize = input(40, { transform: numberAttribute });\n\n protected readonly speedS = computed(() => `${this.speed()}s`);\n}\n","import { ChangeDetectionStrategy, Component, computed, input, numberAttribute } from '@angular/core';\n\n/**\n * A soft, slowly shifting multi-color mesh gradient — a lively backdrop for\n * heroes and cards. Project your content on top.\n *\n * ```html\n * <bpx-gradient-mesh>\n * <h1>BlueprintX</h1>\n * </bpx-gradient-mesh>\n * ```\n */\n@Component({\n selector: 'bpx-gradient-mesh',\n exportAs: 'bpxGradientMesh',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"bpx-gradient-mesh__bg\" aria-hidden=\"true\"></div>\n <div class=\"bpx-gradient-mesh__content\"><ng-content /></div>\n `,\n styleUrl: './gradient-mesh.scss',\n host: {\n class: 'bpx-gradient-mesh',\n '[style.--gm-1]': 'color1()',\n '[style.--gm-2]': 'color2()',\n '[style.--gm-3]': 'color3()',\n '[style.--gm-4]': 'color4()',\n '[style.--gm-speed]': 'speedS()',\n },\n})\nexport class GradientMesh {\n readonly color1 = input('#6366f1');\n readonly color2 = input('#a855f7');\n readonly color3 = input('#22d3ee');\n readonly color4 = input('#ec4899');\n /** Seconds for one full drift cycle. */\n readonly speed = input(12, { transform: numberAttribute });\n\n protected readonly speedS = computed(() => `${this.speed()}s`);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n numberAttribute,\n signal,\n} from '@angular/core';\n\n/**\n * A backdrop where a soft colored spotlight follows the cursor across a grid or\n * dot pattern. Project your content on top.\n *\n * ```html\n * <bpx-spotlight color=\"#6366f1\" pattern=\"grid\">\n * <h1>BlueprintX</h1>\n * </bpx-spotlight>\n * ```\n */\n@Component({\n selector: 'bpx-spotlight',\n exportAs: 'bpxSpotlight',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"bpx-spotlight__pattern\" aria-hidden=\"true\"></div>\n <div class=\"bpx-spotlight__glow\" aria-hidden=\"true\"></div>\n <div class=\"bpx-spotlight__content\"><ng-content /></div>\n `,\n styleUrl: './spotlight.scss',\n host: {\n class: 'bpx-spotlight',\n '[attr.data-pattern]': 'pattern()',\n '[class.is-active]': 'active()',\n '[style.--sp-color]': 'color()',\n '[style.--sp-size]': 'sizePx()',\n '[style.--sp-pattern-color]': 'patternColor()',\n '[style.--sp-cell]': 'cellPx()',\n '(pointermove)': 'onMove($event)',\n '(pointerenter)': 'active.set(true)',\n '(pointerleave)': 'active.set(false)',\n },\n})\nexport class Spotlight {\n /** Spotlight color. */\n readonly color = input('#6366f1');\n /** Spotlight diameter in px. */\n readonly size = input(400, { transform: numberAttribute });\n /** Backdrop pattern under the glow. */\n readonly pattern = input<'grid' | 'dots' | 'none'>('grid');\n /** Pattern color. Defaults to a theme-aware subtle tint of the text color. */\n readonly patternColor = input('color-mix(in srgb, currentColor 12%, transparent)');\n /** Pattern cell size in px. */\n readonly cellSize = input(32, { transform: numberAttribute });\n\n protected readonly active = signal(false);\n protected readonly sizePx = computed(() => `${this.size()}px`);\n protected readonly cellPx = computed(() => `${this.cellSize()}px`);\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n protected onMove(event: PointerEvent): void {\n const rect = this.host.nativeElement.getBoundingClientRect();\n const el = this.host.nativeElement;\n el.style.setProperty('--sp-mx', `${event.clientX - rect.left}px`);\n el.style.setProperty('--sp-my', `${event.clientY - rect.top}px`);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n numberAttribute,\n signal,\n} from '@angular/core';\n\n/**\n * A grid backdrop where the cell under the cursor lights up, snapping from cell\n * to cell as you move. Project your content on top.\n *\n * ```html\n * <bpx-grid-highlight color=\"#6366f1\">\n * <h1>BlueprintX</h1>\n * </bpx-grid-highlight>\n * ```\n */\n@Component({\n selector: 'bpx-grid-highlight',\n exportAs: 'bpxGridHighlight',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"bpx-grid-highlight__grid\" aria-hidden=\"true\"></div>\n <div class=\"bpx-grid-highlight__cell\" aria-hidden=\"true\"></div>\n <div class=\"bpx-grid-highlight__content\"><ng-content /></div>\n `,\n styleUrl: './grid-highlight.scss',\n host: {\n class: 'bpx-grid-highlight',\n '[class.is-active]': 'active()',\n '[style.--gh-color]': 'color()',\n '[style.--gh-line]': 'lineColor()',\n '[style.--gh-cell]': 'cellPx()',\n '(pointermove)': 'onMove($event)',\n '(pointerleave)': 'active.set(false)',\n },\n})\nexport class GridHighlight {\n /** Highlight color of the hovered cell. */\n readonly color = input('#6366f1');\n /** Grid line color. Defaults to a theme-aware subtle tint of the text color. */\n readonly lineColor = input('color-mix(in srgb, currentColor 12%, transparent)');\n /** Cell size in px. */\n readonly cellSize = input(48, { transform: numberAttribute });\n\n protected readonly active = signal(false);\n protected readonly cellPx = computed(() => `${this.cellSize()}px`);\n\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n protected onMove(event: PointerEvent): void {\n const el = this.host.nativeElement;\n const rect = el.getBoundingClientRect();\n const cs = this.cellSize();\n const col = Math.floor((event.clientX - rect.left) / cs);\n const row = Math.floor((event.clientY - rect.top) / cs);\n el.style.setProperty('--gh-x', `${col * cs}px`);\n el.style.setProperty('--gh-y', `${row * cs}px`);\n this.active.set(true);\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n numberAttribute,\n PLATFORM_ID,\n viewChild,\n} from '@angular/core';\n\ninterface Dot {\n hx: number; // home\n hy: number;\n x: number; // current\n y: number;\n}\n\n/**\n * A canvas field of evenly-spaced dots that flee the cursor and ease back to\n * their home positions. Project your content on top.\n *\n * ```html\n * <bpx-repel-dots color=\"#6366f1\">\n * <h1>BlueprintX</h1>\n * </bpx-repel-dots>\n * ```\n */\n@Component({\n selector: 'bpx-repel-dots',\n exportAs: 'bpxRepelDots',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <canvas #canvas class=\"bpx-repel-dots__canvas\" aria-hidden=\"true\"></canvas>\n <div class=\"bpx-repel-dots__content\"><ng-content /></div>\n `,\n styleUrl: './repel-dots.scss',\n host: {\n class: 'bpx-repel-dots',\n '(pointermove)': 'onMove($event)',\n '(pointerleave)': 'onLeave()',\n },\n})\nexport class RepelDots {\n /** Distance between dots, in px. */\n readonly spacing = input(28, { transform: numberAttribute });\n /** Dot color. */\n readonly color = input('#6366f1');\n /** Dot radius, in px. */\n readonly dotRadius = input(2, { transform: numberAttribute });\n /** Radius of the cursor's influence, in px. */\n readonly repelRadius = input(90, { transform: numberAttribute });\n /** How strongly dots are pushed away (0–1+). */\n readonly strength = input(0.9, { transform: numberAttribute });\n\n private readonly canvasRef = viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private ctx: CanvasRenderingContext2D | null = null;\n private dots: Dot[] = [];\n private raf = 0;\n private ro?: ResizeObserver;\n private readonly pointer = { x: -9999, y: -9999 };\n\n constructor() {\n if (!this.isBrowser) return;\n afterNextRender(() => this.start());\n effect(() => {\n this.spacing();\n if (this.ctx) this.resize();\n });\n inject(DestroyRef).onDestroy(() => this.stop());\n }\n\n private start(): void {\n const canvas = this.canvasRef().nativeElement;\n this.ctx = canvas.getContext('2d');\n if (!this.ctx) return;\n this.resize();\n this.ro = new ResizeObserver(() => this.resize());\n this.ro.observe(canvas);\n this.loop();\n }\n\n private stop(): void {\n cancelAnimationFrame(this.raf);\n this.ro?.disconnect();\n }\n\n private resize(): void {\n const canvas = this.canvasRef().nativeElement;\n const dpr = Math.min(window.devicePixelRatio || 1, 2);\n const w = canvas.clientWidth;\n const h = canvas.clientHeight;\n canvas.width = w * dpr;\n canvas.height = h * dpr;\n this.ctx!.setTransform(dpr, 0, 0, dpr, 0, 0);\n this.seed(w, h);\n }\n\n private seed(w: number, h: number): void {\n const gap = Math.max(8, this.spacing());\n const dots: Dot[] = [];\n for (let y = gap / 2; y < h; y += gap) {\n for (let x = gap / 2; x < w; x += gap) {\n dots.push({ hx: x, hy: y, x, y });\n }\n }\n this.dots = dots;\n }\n\n private loop = (): void => {\n this.draw();\n this.raf = requestAnimationFrame(this.loop);\n };\n\n private draw(): void {\n const ctx = this.ctx;\n if (!ctx) return;\n const canvas = this.canvasRef().nativeElement;\n const w = canvas.clientWidth;\n const h = canvas.clientHeight;\n ctx.clearRect(0, 0, w, h);\n\n const R = this.repelRadius();\n const strength = this.strength();\n const r = this.dotRadius();\n ctx.fillStyle = this.color();\n\n for (const dot of this.dots) {\n let tx = dot.hx;\n let ty = dot.hy;\n const dx = dot.hx - this.pointer.x;\n const dy = dot.hy - this.pointer.y;\n const dist = Math.hypot(dx, dy);\n if (dist < R && dist > 0) {\n const push = (1 - dist / R) * strength;\n tx = dot.hx + (dx / dist) * R * push;\n ty = dot.hy + (dy / dist) * R * push;\n }\n // Ease toward the target (home, or pushed-away position).\n dot.x += (tx - dot.x) * 0.18;\n dot.y += (ty - dot.y) * 0.18;\n\n ctx.beginPath();\n ctx.arc(dot.x, dot.y, r, 0, Math.PI * 2);\n ctx.fill();\n }\n }\n\n protected onMove(event: PointerEvent): void {\n const rect = this.host.nativeElement.getBoundingClientRect();\n this.pointer.x = event.clientX - rect.left;\n this.pointer.y = event.clientY - rect.top;\n }\n protected onLeave(): void {\n this.pointer.x = -9999;\n this.pointer.y = -9999;\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n afterNextRender,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n numberAttribute,\n PLATFORM_ID,\n viewChildren,\n} from '@angular/core';\nimport { uniqueId } from '../../core/id';\n\n/**\n * A backdrop with a gooey liquid-glass blob that follows the cursor. A trail of\n * blobs chase the pointer and an SVG metaball filter melts them into one organic\n * shape; that shape masks a real `backdrop-filter` layer, so the blob is actual\n * frosted glass — it refracts the content behind it while it stretches and wobbles.\n *\n * ```html\n * <bpx-glass-cursor color=\"#c7d2fe\">\n * <h1>BlueprintX</h1>\n * </bpx-glass-cursor>\n * ```\n */\n@Component({\n selector: 'bpx-glass-cursor',\n exportAs: 'bpxGlassCursor',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './glass-cursor.html',\n styleUrl: './glass-cursor.scss',\n host: {\n class: 'bpx-glass-cursor',\n '[style.--gc-color]': 'color()',\n '[style.--gc-blur]': 'blurPx()',\n '[style.--gc-sat]': 'saturation()',\n '[style.--gc-mask]': 'maskUrl()',\n '[style.--gc-rim-mask]': 'rimMaskUrl()',\n '[style.--gc-refract]': 'refractFilter()',\n '(pointermove)': 'onMove($event)',\n '(pointerleave)': 'onLeave()',\n },\n})\nexport class GlassCursor {\n /** Diameter of the leading blob, in px (trailing blobs taper down). */\n readonly size = input(96, { transform: numberAttribute });\n /** Glass tint layered over the frosted backdrop. */\n readonly color = input('#c7d2fe');\n /** Backdrop blur inside the glass, in px. */\n readonly blur = input(8, { transform: numberAttribute });\n /** Backdrop saturation inside the glass (1 = unchanged). */\n readonly saturation = input(1.7, { transform: numberAttribute });\n /** Refraction strength — how much the blob lenses the content behind it (SVG\n * displacement scale). `0` disables the warp and leaves a plain frost. */\n readonly distortion = input(26, { transform: numberAttribute });\n /** How many blobs trail the cursor. More = longer, gooier tail. */\n readonly count = input(6, { transform: numberAttribute });\n /**\n * Follow easing per frame, 0–1. Lower = looser, longer liquid tail; higher =\n * tighter and snappier.\n */\n readonly lag = input(0.32, { transform: numberAttribute });\n /** Park the blob at center when the cursor isn't over the surface. */\n readonly idleCenter = input(true, { transform: booleanAttribute });\n\n protected readonly filterId = uniqueId('bpx-goo');\n protected readonly rimFilterId = uniqueId('bpx-goo-rim');\n protected readonly refractId = uniqueId('bpx-goo-refract');\n protected readonly gooGroupId = uniqueId('bpx-goo-group');\n protected readonly maskId = uniqueId('bpx-goo-mask');\n protected readonly rimMaskId = uniqueId('bpx-goo-rim-mask');\n protected readonly maskUrl = computed(() => `url(#${this.maskId})`);\n protected readonly rimMaskUrl = computed(() => `url(#${this.rimMaskId})`);\n protected readonly blurPx = computed(() => `${this.blur()}px`);\n\n /** Whether the refractive lens layer is active. */\n protected readonly hasDistortion = computed(() => this.distortion() > 0);\n /** The refraction backdrop-filter (warp + a hair of blur), or `none`. */\n protected readonly refractFilter = computed(() =>\n this.hasDistortion() ? `url(#${this.refractId}) blur(1px)` : 'none',\n );\n\n /** Per-blob descriptors — the lead is full size, the tail tapers. */\n protected readonly blobs = computed(() => {\n const n = Math.max(1, this.count());\n const lead = this.size();\n return Array.from({ length: n }, (_, i) => ({\n radius: (lead * (1 - (i / n) * 0.55)) / 2,\n }));\n });\n\n private readonly circles = viewChildren<ElementRef<SVGCircleElement>>('circle');\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n private readonly target = { x: 0, y: 0 };\n private points: { x: number; y: number }[] = [];\n private started = false;\n private raf = 0;\n\n constructor() {\n if (!this.isBrowser) return;\n afterNextRender(() => this.start());\n effect(() => {\n const n = Math.max(1, this.count());\n if (this.started) this.points = this.points.slice(0, n);\n while (this.points.length < n) {\n this.points.push({ x: this.target.x, y: this.target.y });\n }\n });\n inject(DestroyRef).onDestroy(() => cancelAnimationFrame(this.raf));\n }\n\n private start(): void {\n const rect = this.host.nativeElement.getBoundingClientRect();\n this.target.x = rect.width / 2;\n this.target.y = rect.height / 2;\n this.points = this.blobs().map(() => ({ x: this.target.x, y: this.target.y }));\n this.started = true;\n this.loop();\n }\n\n private loop = (): void => {\n const ease = Math.min(1, Math.max(0.05, this.lag()));\n const pts = this.points;\n const circles = this.circles();\n\n if (pts.length) {\n pts[0].x += (this.target.x - pts[0].x) * ease;\n pts[0].y += (this.target.y - pts[0].y) * ease;\n for (let i = 1; i < pts.length; i++) {\n pts[i].x += (pts[i - 1].x - pts[i].x) * ease;\n pts[i].y += (pts[i - 1].y - pts[i].y) * ease;\n }\n // Drive the sheen highlight from the lead blob.\n const el = this.host.nativeElement;\n el.style.setProperty('--gc-lx', `${pts[0].x}px`);\n el.style.setProperty('--gc-ly', `${pts[0].y}px`);\n }\n\n for (let i = 0; i < circles.length; i++) {\n const c = circles[i].nativeElement;\n c.setAttribute('cx', `${pts[i].x}`);\n c.setAttribute('cy', `${pts[i].y}`);\n }\n\n this.raf = requestAnimationFrame(this.loop);\n };\n\n protected onMove(event: PointerEvent): void {\n if (!this.started) return;\n const rect = this.host.nativeElement.getBoundingClientRect();\n this.target.x = event.clientX - rect.left;\n this.target.y = event.clientY - rect.top;\n }\n\n protected onLeave(): void {\n if (!this.idleCenter()) return;\n const rect = this.host.nativeElement.getBoundingClientRect();\n this.target.x = rect.width / 2;\n this.target.y = rect.height / 2;\n }\n}\n","<svg class=\"bpx-glass-cursor__defs\" aria-hidden=\"true\" width=\"0\" height=\"0\">\n <defs>\n <!-- Metaball: blur the blobs together, then threshold the alpha to a hard\n gooey edge. Used as the mask that shapes the frosted-glass layer. -->\n <filter [id]=\"filterId\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"9\" result=\"blur\" />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -10\"\n />\n </filter>\n\n <!-- Rim: the same metaball, minus an eroded copy of itself — leaves a thin\n ring hugging the gooey edge. Masks the refractive edge-light layer. -->\n <filter [id]=\"rimFilterId\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"9\" result=\"blur\" />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -10\"\n result=\"goo\"\n />\n <feMorphology in=\"goo\" operator=\"erode\" radius=\"2.5\" result=\"core\" />\n <feComposite in=\"goo\" in2=\"core\" operator=\"out\" />\n </filter>\n\n <!-- Refraction: warps the backdrop with fractal-noise displacement so the\n blob lenses the content behind it like real glass (not just blur). -->\n <filter [id]=\"refractId\" x=\"-20%\" y=\"-20%\" width=\"140%\" height=\"140%\">\n <feTurbulence\n type=\"fractalNoise\"\n baseFrequency=\"0.01 0.014\"\n numOctaves=\"2\"\n seed=\"7\"\n result=\"noise\"\n />\n <feGaussianBlur in=\"noise\" stdDeviation=\"1.4\" result=\"soft\" />\n <feDisplacementMap\n in=\"SourceGraphic\"\n in2=\"soft\"\n [attr.scale]=\"distortion()\"\n xChannelSelector=\"R\"\n yChannelSelector=\"G\"\n />\n </filter>\n\n <!-- The blobs live here once and are referenced by both masks via <use>, so\n the rAF loop only has to move one set of circles. -->\n <g [id]=\"gooGroupId\">\n @for (blob of blobs(); track $index) {\n <circle #circle cx=\"0\" cy=\"0\" [attr.r]=\"blob.radius\" fill=\"#fff\" />\n }\n </g>\n\n <mask [id]=\"maskId\">\n <use [attr.href]=\"'#' + gooGroupId\" [attr.filter]=\"'url(#' + filterId + ')'\" />\n </mask>\n <mask [id]=\"rimMaskId\">\n <use [attr.href]=\"'#' + gooGroupId\" [attr.filter]=\"'url(#' + rimFilterId + ')'\" />\n </mask>\n </defs>\n</svg>\n\n<div class=\"bpx-glass-cursor__content\"><ng-content /></div>\n\n<!-- Real frosted glass, clipped to the gooey mask shape. -->\n<div class=\"bpx-glass-cursor__frost\" aria-hidden=\"true\"></div>\n<!-- Refractive lens: warps the backdrop inside the blob. Separate layer so\n browsers without url() backdrop-filter still get the base frost. -->\n@if (hasDistortion()) {\n <div class=\"bpx-glass-cursor__refract\" aria-hidden=\"true\"></div>\n}\n<!-- Specular sheen that concentrates at the lead blob, same mask. -->\n<div class=\"bpx-glass-cursor__sheen\" aria-hidden=\"true\"></div>\n<!-- Bright refractive edge-light hugging the rim of the shape. -->\n<div class=\"bpx-glass-cursor__rim\" aria-hidden=\"true\"></div>\n","/*\n * Public API Surface of BlueprintX\n *\n * Everything a consumer can import from `blueprintx` is re-exported here.\n * Keep this list curated — anything not exported is private to the library.\n */\n\n// ── Core ────────────────────────────────────────────────────────\nexport * from './lib/core/types';\nexport { uniqueId } from './lib/core/id';\n\n// ── Components ──────────────────────────────────────────────────\nexport { Button } from './lib/button/button';\nexport { ButtonGroup } from './lib/button-group/button-group';\nexport { SplitButton } from './lib/split-button/split-button';\nexport { CopyButton } from './lib/copy-button/copy-button';\nexport { Icon } from './lib/icon/icon';\nexport { IconRegistry } from './lib/icon/icon-registry';\nexport type { BpxIconDefinition } from './lib/icon/icon-registry';\nexport { Badge } from './lib/badge/badge';\nexport { Spinner } from './lib/spinner/spinner';\nexport { Skeleton } from './lib/skeleton/skeleton';\nexport type { BpxSkeletonVariant, BpxSkeletonAnimation } from './lib/skeleton/skeleton';\nexport { SkeletonLayout } from './lib/skeleton/skeleton-layout';\nexport type { BpxSkeletonPreset } from './lib/skeleton/skeleton-layout';\nexport { Avatar } from './lib/avatar/avatar';\nexport type { BpxAvatarSize, BpxAvatarStatus } from './lib/avatar/avatar';\nexport { Chip } from './lib/chip/chip';\nexport { ChipSet } from './lib/chip/chip-set';\nexport { Alert } from './lib/alert/alert';\nexport { Select } from './lib/select/select';\nexport { MultiSelect } from './lib/multi-select/multi-select';\nexport { Combobox } from './lib/combobox/combobox';\nexport { FileUpload } from './lib/file-upload/file-upload';\nexport type { BpxFileRejection } from './lib/file-upload/file-upload';\nexport { Filter } from './lib/filter/filter';\nexport { Switch } from './lib/switch/switch';\nexport { Slider } from './lib/slider/slider';\nexport { Input } from './lib/input/input';\nexport type { BpxInputType } from './lib/input/input';\nexport { Textarea } from './lib/textarea/textarea';\nexport { Progress } from './lib/progress/progress';\nexport type { BpxProgressShape } from './lib/progress/progress';\nexport { Tabs } from './lib/tabs/tabs';\nexport { Tab } from './lib/tabs/tab';\nexport { Tooltip } from './lib/tooltip/tooltip';\nexport type { BpxTooltipPosition } from './lib/tooltip/tooltip';\nexport { Card } from './lib/card/card';\nexport { LiquidGlass } from './lib/liquid-glass/liquid-glass';\nexport { Accordion } from './lib/accordion/accordion';\nexport { AccordionItem } from './lib/accordion/accordion-item';\nexport { Dialog } from './lib/dialog/dialog';\nexport { Checkbox } from './lib/checkbox/checkbox';\nexport { RadioGroup } from './lib/radio/radio-group';\nexport { Radio } from './lib/radio/radio';\nexport { Pagination } from './lib/pagination/pagination';\nexport { ScrollArea } from './lib/scroll-area/scroll-area';\nexport { ColorPicker } from './lib/color-picker/color-picker';\nexport { ToastService } from './lib/toast/toast.service';\nexport type { BpxToast, BpxToastType, BpxToastOptions, BpxToastAction } from './lib/toast/toast';\nexport { Menu } from './lib/menu/menu';\nexport { MenuItem } from './lib/menu/menu-item';\nexport { MenuTrigger } from './lib/menu/menu-trigger';\nexport { Table } from './lib/table/table';\nexport { BpxCellDef } from './lib/table/cell-def';\nexport type { BpxColumn, BpxSort } from './lib/table/table';\nexport { PivotGrid } from './lib/pivot-grid/pivot-grid';\nexport { PivotFieldPane } from './lib/pivot-grid/pivot-field-pane';\nexport { computePivot, flattenRows, distinctMembers } from './lib/pivot-grid/pivot-engine';\nexport type { PivotRecord, PivotEngineOptions } from './lib/pivot-grid/pivot-engine';\nexport type {\n BpxPivotAggregation,\n BpxPivotArea,\n BpxPivotField,\n BpxPivotValue,\n BpxPivotFilter,\n BpxPivotSort,\n BpxPivotConfig,\n BpxPivotModel,\n BpxPivotLeafColumn,\n BpxPivotColumnNode,\n BpxPivotCell,\n BpxPivotRowNode,\n} from './lib/pivot-grid/pivot-types';\nexport { CommandPalette } from './lib/command-palette/command-palette';\nexport type { BpxCommand } from './lib/command-palette/command-palette';\nexport { Popover } from './lib/popover/popover';\nexport { PopoverTrigger } from './lib/popover/popover-trigger';\nexport { Drawer } from './lib/drawer/drawer';\nexport type { BpxDrawerSide } from './lib/drawer/drawer';\nexport { Breadcrumbs } from './lib/breadcrumbs/breadcrumbs';\nexport type { BpxBreadcrumb } from './lib/breadcrumbs/breadcrumbs';\nexport { Stepper } from './lib/stepper/stepper';\nexport { Step } from './lib/stepper/step';\nexport { Segmented } from './lib/segmented/segmented';\nexport { Calendar } from './lib/calendar/calendar';\nexport { DatePicker } from './lib/date-picker/date-picker';\n\n// ── FX / highlight effects ──────────────────────────────────────\nexport { SpotlightCard } from './lib/fx/spotlight-card/spotlight-card';\nexport { TiltCard } from './lib/fx/tilt-card/tilt-card';\nexport { GradientText } from './lib/fx/gradient-text/gradient-text';\nexport { ShinyText } from './lib/fx/shiny-text/shiny-text';\nexport { BorderBeam } from './lib/fx/border-beam/border-beam';\nexport { Magnetic } from './lib/fx/magnetic/magnetic';\nexport { ClickSpark } from './lib/fx/click-spark/click-spark';\nexport { Ripple } from './lib/fx/ripple/ripple';\nexport { CountUp } from './lib/fx/count-up/count-up';\nexport { Typewriter } from './lib/fx/typewriter/typewriter';\nexport { Marquee } from './lib/fx/marquee/marquee';\nexport { Aurora } from './lib/fx/aurora/aurora';\nexport { ElectricBorder } from './lib/fx/electric-border/electric-border';\n\n// ── Backgrounds ─────────────────────────────────────────────────\nexport { Particles } from './lib/fx/particles/particles';\nexport { DotGrid } from './lib/fx/dot-grid/dot-grid';\nexport { Meteors } from './lib/fx/meteors/meteors';\nexport { RetroGrid } from './lib/fx/retro-grid/retro-grid';\nexport { GradientMesh } from './lib/fx/gradient-mesh/gradient-mesh';\nexport { Spotlight } from './lib/fx/spotlight/spotlight';\nexport { GridHighlight } from './lib/fx/grid-highlight/grid-highlight';\nexport { RepelDots } from './lib/fx/repel-dots/repel-dots';\nexport { GlassCursor } from './lib/fx/glass-cursor/glass-cursor';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["stylesInjected"],"mappings":"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"}