ngx-com 0.0.21 → 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.
- package/README.md +137 -33
- package/fesm2022/ngx-com-components-alert.mjs +21 -11
- package/fesm2022/ngx-com-components-alert.mjs.map +1 -1
- package/fesm2022/ngx-com-components-avatar.mjs +9 -7
- package/fesm2022/ngx-com-components-avatar.mjs.map +1 -1
- package/fesm2022/ngx-com-components-button.mjs +1 -1
- package/fesm2022/ngx-com-components-button.mjs.map +1 -1
- package/fesm2022/ngx-com-components-calendar.mjs +27 -3112
- package/fesm2022/ngx-com-components-calendar.mjs.map +1 -1
- package/fesm2022/ngx-com-components-card.mjs +8 -8
- package/fesm2022/ngx-com-components-card.mjs.map +1 -1
- package/fesm2022/ngx-com-components-carousel.mjs +16 -4
- package/fesm2022/ngx-com-components-carousel.mjs.map +1 -1
- package/fesm2022/ngx-com-components-checkbox.mjs +1 -1
- package/fesm2022/ngx-com-components-checkbox.mjs.map +1 -1
- package/fesm2022/ngx-com-components-code-block.mjs +9 -9
- package/fesm2022/ngx-com-components-code-block.mjs.map +1 -1
- package/fesm2022/ngx-com-components-collapsible.mjs +15 -13
- package/fesm2022/ngx-com-components-collapsible.mjs.map +1 -1
- package/fesm2022/ngx-com-components-confirm.mjs +4 -4
- package/fesm2022/ngx-com-components-confirm.mjs.map +1 -1
- package/fesm2022/ngx-com-components-datepicker.mjs +2334 -0
- package/fesm2022/ngx-com-components-datepicker.mjs.map +1 -0
- package/fesm2022/ngx-com-components-dialog.mjs +47 -45
- package/fesm2022/ngx-com-components-dialog.mjs.map +1 -1
- package/fesm2022/ngx-com-components-dropdown.mjs +446 -340
- package/fesm2022/ngx-com-components-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-com-components-empty-state.mjs +5 -3
- package/fesm2022/ngx-com-components-empty-state.mjs.map +1 -1
- package/fesm2022/ngx-com-components-form-field.mjs +11 -6
- package/fesm2022/ngx-com-components-form-field.mjs.map +1 -1
- package/fesm2022/ngx-com-components-icon-lucide.mjs +41 -0
- package/fesm2022/ngx-com-components-icon-lucide.mjs.map +1 -0
- package/fesm2022/ngx-com-components-icon.mjs +89 -61
- package/fesm2022/ngx-com-components-icon.mjs.map +1 -1
- package/fesm2022/ngx-com-components-item.mjs +14 -4
- package/fesm2022/ngx-com-components-item.mjs.map +1 -1
- package/fesm2022/ngx-com-components-menu.mjs +61 -69
- package/fesm2022/ngx-com-components-menu.mjs.map +1 -1
- package/fesm2022/ngx-com-components-native-control.mjs +170 -0
- package/fesm2022/ngx-com-components-native-control.mjs.map +1 -0
- package/fesm2022/ngx-com-components-paginator.mjs +11 -3
- package/fesm2022/ngx-com-components-paginator.mjs.map +1 -1
- package/fesm2022/ngx-com-components-popover.mjs +58 -33
- package/fesm2022/ngx-com-components-popover.mjs.map +1 -1
- package/fesm2022/ngx-com-components-radio.mjs +4 -4
- package/fesm2022/ngx-com-components-radio.mjs.map +1 -1
- package/fesm2022/ngx-com-components-segmented-control.mjs +6 -4
- package/fesm2022/ngx-com-components-segmented-control.mjs.map +1 -1
- package/fesm2022/ngx-com-components-sort.mjs +63 -57
- package/fesm2022/ngx-com-components-sort.mjs.map +1 -1
- package/fesm2022/ngx-com-components-spinner.mjs +6 -6
- package/fesm2022/ngx-com-components-spinner.mjs.map +1 -1
- package/fesm2022/ngx-com-components-switch.mjs +18 -9
- package/fesm2022/ngx-com-components-switch.mjs.map +1 -1
- package/fesm2022/ngx-com-components-table.mjs +23 -9
- package/fesm2022/ngx-com-components-table.mjs.map +1 -1
- package/fesm2022/ngx-com-components-tabs.mjs +81 -58
- package/fesm2022/ngx-com-components-tabs.mjs.map +1 -1
- package/fesm2022/ngx-com-components-timepicker.mjs +1048 -0
- package/fesm2022/ngx-com-components-timepicker.mjs.map +1 -0
- package/fesm2022/ngx-com-components-toast.mjs +18 -14
- package/fesm2022/ngx-com-components-toast.mjs.map +1 -1
- package/fesm2022/ngx-com-components-tooltip.mjs +5 -5
- package/fesm2022/ngx-com-components-tooltip.mjs.map +1 -1
- package/fesm2022/ngx-com-components.mjs +0 -13
- package/fesm2022/ngx-com-components.mjs.map +1 -1
- package/fesm2022/ngx-com-tokens.mjs +0 -8
- package/fesm2022/ngx-com-tokens.mjs.map +1 -1
- package/fesm2022/ngx-com-utils.mjs +13 -1
- package/fesm2022/ngx-com-utils.mjs.map +1 -1
- package/fesm2022/ngx-com.mjs +1 -1
- package/fesm2022/ngx-com.mjs.map +1 -1
- package/package.json +51 -8
- package/styles/animations.css +38 -0
- package/styles/candy.css +121 -0
- package/styles/dark.css +159 -0
- package/styles/forest.css +117 -0
- package/styles/ocean.css +117 -0
- package/styles/themes.css +7 -0
- package/styles/tokens.css +277 -0
- package/styles/utilities.css +16 -0
- package/types/ngx-com-components-alert.d.ts +14 -4
- package/types/ngx-com-components-avatar.d.ts +2 -0
- package/types/ngx-com-components-calendar.d.ts +3 -747
- package/types/ngx-com-components-card.d.ts +2 -2
- package/types/ngx-com-components-carousel.d.ts +11 -1
- package/types/ngx-com-components-code-block.d.ts +4 -4
- package/types/ngx-com-components-collapsible.d.ts +10 -2
- package/types/ngx-com-components-confirm.d.ts +2 -2
- package/types/ngx-com-components-datepicker.d.ts +623 -0
- package/types/ngx-com-components-dialog.d.ts +5 -2
- package/types/ngx-com-components-dropdown.d.ts +22 -4
- package/types/ngx-com-components-empty-state.d.ts +2 -0
- package/types/ngx-com-components-form-field.d.ts +4 -1
- package/types/ngx-com-components-icon-lucide.d.ts +32 -0
- package/types/ngx-com-components-icon.d.ts +49 -35
- package/types/ngx-com-components-item.d.ts +12 -2
- package/types/ngx-com-components-menu.d.ts +38 -38
- package/types/ngx-com-components-native-control.d.ts +99 -0
- package/types/ngx-com-components-paginator.d.ts +2 -0
- package/types/ngx-com-components-popover.d.ts +19 -12
- package/types/ngx-com-components-segmented-control.d.ts +3 -1
- package/types/ngx-com-components-sort.d.ts +13 -10
- package/types/ngx-com-components-switch.d.ts +7 -2
- package/types/ngx-com-components-table.d.ts +16 -2
- package/types/ngx-com-components-tabs.d.ts +46 -34
- package/types/ngx-com-components-timepicker.d.ts +273 -0
- package/types/ngx-com-components-toast.d.ts +4 -2
- package/types/ngx-com-components-tooltip.d.ts +1 -1
- package/types/ngx-com-components.d.ts +6 -7
- package/types/ngx-com-tokens.d.ts +5 -3
- package/types/ngx-com-utils.d.ts +11 -1
- package/types/ngx-com.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-com-components-popover.mjs","sources":["../../../projects/com/components/popover/popover.variants.ts","../../../projects/com/components/popover/popover.utils.ts","../../../projects/com/components/popover/popover-arrow.component.ts","../../../projects/com/components/popover/popover-content.component.ts","../../../projects/com/components/popover/popover-tokens.ts","../../../projects/com/components/popover/popover-positions.ts","../../../projects/com/components/popover/popover-trigger.directive.ts","../../../projects/com/components/popover/popover-close.directive.ts","../../../projects/com/components/popover/popover-template.directive.ts","../../../projects/com/components/popover/index.ts","../../../projects/com/components/popover/ngx-com-components-popover.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\n// ─── Type Definitions ───\n\nexport type PopoverPosition = 'above' | 'below' | 'left' | 'right' | 'auto';\nexport type PopoverAlignment = 'start' | 'center' | 'end';\nexport type PopoverTriggerOn = 'click' | 'focus' | 'manual';\nexport type PopoverVariant = 'default' | 'compact' | 'wide' | 'flush';\nexport type PopoverBackdrop = 'transparent' | 'dimmed' | 'none';\nexport type PopoverSide = 'top' | 'bottom' | 'left' | 'right';\n\n// ─── Popover Panel Variants ───\n\n/**\n * Popover panel styling variants.\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-border`, `--shadow-lg`, `--radius-popover`, `--radius-overlay`\n */\nexport const popoverPanelVariants: ReturnType<\n typeof cva<{ variant: Record<PopoverVariant, string> }>\n> = cva(\n ['relative', 'bg-popover text-popover-foreground', 'border border-border', 'shadow-lg', 'overflow-hidden'],\n {\n variants: {\n variant: {\n default: 'rounded-popover p-4 min-w-48 max-w-sm',\n compact: 'rounded-overlay p-2 min-w-32 max-w-xs',\n wide: 'rounded-popover p-5 min-w-64 max-w-lg',\n flush: 'rounded-popover p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport type PopoverPanelVariants = VariantProps<typeof popoverPanelVariants>;\n\n// ─── Popover Arrow Variants ───\n\n/**\n * Popover arrow positioning variants.\n * The arrow is positioned on the edge of the popover pointing toward the trigger.\n *\n * @tokens `--color-popover`, `--color-border`\n */\nexport const popoverArrowVariants: ReturnType<\n typeof cva<{ side: Record<PopoverSide, string> }>\n> = cva('absolute z-10 text-popover', {\n variants: {\n side: {\n top: 'left-1/2 top-full -translate-x-1/2 -translate-y-px rotate-180',\n bottom: 'left-1/2 bottom-full -translate-x-1/2 translate-y-px',\n left: 'top-1/2 right-0 -translate-y-1/2 translate-x-[11px] rotate-90',\n right: 'top-1/2 left-0 -translate-y-1/2 -translate-x-[11px] -rotate-90',\n },\n },\n defaultVariants: {\n side: 'bottom',\n },\n});\n\nexport type PopoverArrowVariants = VariantProps<typeof popoverArrowVariants>;\n","export { mergeClasses } from 'ngx-com/utils';\n\nlet popoverIdCounter = 0;\n\n/**\n * Generate a unique ID for a popover instance.\n */\nexport function generatePopoverId(): string {\n return `popover-${++popoverIdCounter}`;\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport type { PopoverAlignment, PopoverSide } from './popover.variants';\nimport { popoverArrowVariants } from './popover.variants';\nimport { mergeClasses } from './popover.utils';\n\n/** Alignment offset classes for arrow positioning. */\nconst ALIGNMENT_OFFSETS: Record<PopoverSide, Record<PopoverAlignment, string>> = {\n top: { start: 'left-4 -translate-x-0', center: '', end: 'left-auto right-4 translate-x-0' },\n bottom: { start: 'left-4 -translate-x-0', center: '', end: 'left-auto right-4 translate-x-0' },\n left: { start: 'top-4 -translate-y-0', center: '', end: 'top-auto bottom-4 translate-y-0' },\n right: { start: 'top-4 -translate-y-0', center: '', end: 'top-auto bottom-4 translate-y-0' },\n};\n\n/**\n * Internal arrow component rendered inside the popover panel.\n * Points toward the trigger element based on the active position.\n *\n * @internal Not exported in public API\n *\n * @tokens `--color-popover`, `--color-border`\n */\n@Component({\n selector: 'com-popover-arrow',\n template: `\n <svg\n [class]=\"arrowClasses()\"\n width=\"16\"\n height=\"8\"\n viewBox=\"0 0 16 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <!-- Border stroke (rendered underneath) -->\n <path\n d=\"M0 8L8 1L16 8\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1\"\n class=\"text-border\"\n />\n <!-- Fill (covers the stroke at the base) -->\n <path d=\"M1 8L8 1.5L15 8\" fill=\"currentColor\" class=\"text-popover\" />\n </svg>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'pointer-events-none',\n },\n})\nexport class PopoverArrowComponent {\n /** Which side of the popover the arrow is on. */\n readonly side: InputSignal<PopoverSide> = input<PopoverSide>('top');\n\n /** Alignment along the edge (for offset positioning). */\n readonly alignment: InputSignal<PopoverAlignment> = input<PopoverAlignment>('center');\n\n /** Computed CSS classes for the arrow. */\n protected readonly arrowClasses: Signal<string> = computed(() =>\n mergeClasses(popoverArrowVariants({ side: this.side() }), ALIGNMENT_OFFSETS[this.side()][this.alignment()]),\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core';\nimport type { Signal, WritableSignal } from '@angular/core';\nimport { CdkPortalOutlet, type Portal } from '@angular/cdk/portal';\nimport { PopoverArrowComponent } from './popover-arrow.component';\nimport type { PopoverAlignment, PopoverSide, PopoverVariant } from './popover.variants';\nimport { popoverPanelVariants } from './popover.variants';\nimport { mergeClasses } from './popover.utils';\n\n/**\n * Internal content wrapper component for the popover.\n * Renders the panel styling, arrow, and consumer content.\n *\n * @internal Not exported in public API\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-border`, `--shadow-lg`, `--radius-popover`, `--radius-overlay`\n */\n@Component({\n selector: 'com-popover-content',\n template: `\n <div\n class=\"relative\"\n [attr.data-state]=\"animationState()\"\n [attr.data-side]=\"activeSide()\"\n >\n @if (showArrow()) {\n <com-popover-arrow [side]=\"activeSide()\" [alignment]=\"activeAlignment()\" />\n }\n <div\n [class]=\"panelClasses()\"\n role=\"dialog\"\n [attr.id]=\"popoverId()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n >\n <ng-template [cdkPortalOutlet]=\"contentPortal()\" />\n </div>\n </div>\n `,\n styles: `\n :host {\n display: contents;\n }\n\n /* Animation styles */\n [data-state='open'] {\n animation: popover-in 150ms ease-out;\n }\n\n [data-state='closed'] {\n animation: popover-out 100ms ease-in forwards;\n }\n\n /* Transform origin based on side */\n [data-side='top'] {\n transform-origin: bottom center;\n }\n\n [data-side='bottom'] {\n transform-origin: top center;\n }\n\n [data-side='left'] {\n transform-origin: right center;\n }\n\n [data-side='right'] {\n transform-origin: left center;\n }\n\n @keyframes popover-in {\n from {\n opacity: 0;\n transform: scale(0.96) translateY(4px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n }\n\n @keyframes popover-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n [data-state='open'],\n [data-state='closed'] {\n animation: none;\n }\n }\n `,\n imports: [CdkPortalOutlet, PopoverArrowComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PopoverContentComponent {\n /** The portal containing consumer content to render. */\n readonly contentPortal: WritableSignal<Portal<unknown> | null> = signal<Portal<unknown> | null>(null);\n\n /** Size/padding variant for the panel. */\n readonly variant: WritableSignal<PopoverVariant> = signal<PopoverVariant>('default');\n\n /** Whether to render the arrow. */\n readonly showArrow: WritableSignal<boolean> = signal(true);\n\n /** Which side the popover is on relative to the trigger. */\n readonly activeSide: WritableSignal<PopoverSide> = signal<PopoverSide>('top');\n\n /** Alignment along the cross-axis. */\n readonly activeAlignment: WritableSignal<PopoverAlignment> = signal<PopoverAlignment>('center');\n\n /** Unique ID for accessibility. */\n readonly popoverId: WritableSignal<string> = signal('');\n\n /** Optional accessibility label. */\n readonly ariaLabel: WritableSignal<string | undefined> = signal<string | undefined>(undefined);\n\n /** Animation state for enter/leave. */\n readonly animationState: WritableSignal<'open' | 'closed'> = signal<'open' | 'closed'>('open');\n\n /** Additional CSS classes for the panel. */\n readonly panelClass: WritableSignal<string> = signal('');\n\n /** Computed CSS classes for the panel. */\n protected readonly panelClasses: Signal<string> = computed(() =>\n mergeClasses(popoverPanelVariants({ variant: this.variant() }), this.panelClass()),\n );\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Interface for the popover reference injected into content.\n * Provides methods to control the popover from within content.\n */\nexport interface PopoverRef {\n /** Programmatically open the popover. */\n open(): void;\n /** Programmatically close the popover. */\n close(): void;\n /** Toggle the popover open/close state. */\n toggle(): void;\n /** Force recalculation of position. */\n reposition(): void;\n}\n\n/**\n * Data passed to a component rendered inside the popover.\n * Inject this token to access the data provided via `popoverData` input.\n *\n * @example\n * ```ts\n * @Component({ ... })\n * export class UserProfilePopover {\n * readonly data = inject(POPOVER_DATA); // { userId: '123' }\n * }\n * ```\n */\nexport const POPOVER_DATA: InjectionToken<unknown> = new InjectionToken<unknown>('POPOVER_DATA');\n\n/**\n * Reference to the popover trigger directive for closing from inside the popover.\n * Inject this token to programmatically close the popover from within content.\n *\n * @example\n * ```ts\n * @Component({ ... })\n * export class UserProfilePopover {\n * readonly popoverRef = inject(POPOVER_REF);\n *\n * save(): void {\n * // ... save logic\n * this.popoverRef.close();\n * }\n * }\n * ```\n */\nexport const POPOVER_REF: InjectionToken<PopoverRef> = new InjectionToken<PopoverRef>('POPOVER_REF');\n","import type { ConnectedPosition, ConnectionPositionPair } from '@angular/cdk/overlay';\nimport type { PopoverAlignment, PopoverPosition, PopoverSide } from './popover.variants';\n\n/**\n * Build an ordered list of position pairs for the CDK overlay.\n * The first position is the preferred position; remaining positions are fallbacks.\n *\n * @param position - Preferred position direction ('above', 'below', 'left', 'right', 'auto')\n * @param alignment - Alignment along the cross-axis ('start', 'center', 'end')\n * @param offset - Gap in pixels between trigger and popover edge (default: 8)\n * @returns Array of ConnectedPosition for FlexibleConnectedPositionStrategy\n */\nexport function buildPopoverPositions(\n position: PopoverPosition,\n alignment: PopoverAlignment,\n offset = 8,\n): ConnectedPosition[] {\n const allPositions = buildAllPositions(offset);\n\n if (position === 'auto') {\n // For auto, try below first, then above, then right, then left\n return [\n ...getPositionsForDirection('below', alignment, allPositions),\n ...getPositionsForDirection('above', alignment, allPositions),\n ...getPositionsForDirection('right', alignment, allPositions),\n ...getPositionsForDirection('left', alignment, allPositions),\n ];\n }\n\n // Start with preferred direction, then add fallbacks\n const preferred = getPositionsForDirection(position, alignment, allPositions);\n const fallbacks = ['below', 'above', 'left', 'right']\n .filter((dir) => dir !== position)\n .flatMap((dir) => getPositionsForDirection(dir as PopoverPosition, alignment, allPositions));\n\n return [...preferred, ...fallbacks];\n}\n\n/**\n * Build all 12 position combinations (4 directions × 3 alignments).\n */\nfunction buildAllPositions(offset: number): Map<string, ConnectedPosition> {\n const positions = new Map<string, ConnectedPosition>();\n\n // Below positions\n positions.set('below-start', {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: offset,\n });\n positions.set('below-center', {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: offset,\n });\n positions.set('below-end', {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: offset,\n });\n\n // Above positions\n positions.set('above-start', {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -offset,\n });\n positions.set('above-center', {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -offset,\n });\n positions.set('above-end', {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -offset,\n });\n\n // Left positions\n positions.set('left-start', {\n originX: 'start',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'top',\n offsetX: -offset,\n });\n positions.set('left-center', {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n offsetX: -offset,\n });\n positions.set('left-end', {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetX: -offset,\n });\n\n // Right positions\n positions.set('right-start', {\n originX: 'end',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n offsetX: offset,\n });\n positions.set('right-center', {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n offsetX: offset,\n });\n positions.set('right-end', {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetX: offset,\n });\n\n return positions;\n}\n\n/**\n * Get positions for a specific direction, ordered by alignment preference.\n */\nfunction getPositionsForDirection(\n direction: PopoverPosition,\n alignment: PopoverAlignment,\n allPositions: Map<string, ConnectedPosition>,\n): ConnectedPosition[] {\n if (direction === 'auto') {\n return [];\n }\n\n // Order alignments with preferred first\n const alignmentOrder: Record<PopoverAlignment, PopoverAlignment[]> = {\n start: ['start', 'center', 'end'],\n center: ['center', 'start', 'end'],\n end: ['end', 'center', 'start'],\n };\n\n return alignmentOrder[alignment]\n .map((align) => allPositions.get(`${direction}-${align}`))\n .filter((pos): pos is ConnectedPosition => pos !== undefined);\n}\n\n/**\n * Derive which side of the trigger the popover is on from a connection pair.\n * Used to position the arrow correctly.\n *\n * The returned side indicates where the popover sits relative to the trigger:\n * - 'bottom': popover is below trigger, arrow at top pointing up\n * - 'top': popover is above trigger, arrow at bottom pointing down\n * - 'right': popover is right of trigger, arrow at left pointing left\n * - 'left': popover is left of trigger, arrow at right pointing right\n */\nexport function deriveSideFromPosition(pair: ConnectionPositionPair): PopoverSide {\n const originX = pair.originX as string;\n const originY = pair.originY as string;\n const overlayX = pair.overlayX as string;\n const overlayY = pair.overlayY as string;\n\n if (originY === 'bottom' && overlayY === 'top') return 'bottom';\n if (originY === 'top' && overlayY === 'bottom') return 'top';\n if (originX === 'end' && overlayX === 'start') return 'right';\n if (originX === 'start' && overlayX === 'end') return 'left';\n\n return 'bottom';\n}\n\n/**\n * Derive alignment from a connection pair.\n */\nexport function deriveAlignmentFromPosition(pair: ConnectionPositionPair): PopoverAlignment {\n const originX = pair.originX as string;\n const originY = pair.originY as string;\n const overlayX = pair.overlayX as string;\n const overlayY = pair.overlayY as string;\n\n // For vertical positioning (above/below), check X alignment\n if (originY === 'bottom' || originY === 'top') {\n if (originX === 'start' && overlayX === 'start') return 'start';\n if (originX === 'end' && overlayX === 'end') return 'end';\n return 'center';\n }\n\n // For horizontal positioning (left/right), check Y alignment\n if (originY === 'top' && overlayY === 'top') return 'start';\n if (originY === 'bottom' && overlayY === 'bottom') return 'end';\n return 'center';\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n model,\n output,\n signal,\n TemplateRef,\n Type,\n ViewContainerRef,\n} from '@angular/core';\nimport type {\n InputSignal,\n InputSignalWithTransform,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DOCUMENT } from '@angular/common';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport type { ConnectedOverlayPositionChange, FlexibleConnectedPositionStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\nimport { filter } from 'rxjs/operators';\nimport { PopoverContentComponent } from './popover-content.component';\nimport { POPOVER_DATA, POPOVER_REF } from './popover-tokens';\nimport { buildPopoverPositions, deriveAlignmentFromPosition, deriveSideFromPosition } from './popover-positions';\nimport { generatePopoverId, mergeClasses } from './popover.utils';\nimport type {\n PopoverAlignment,\n PopoverBackdrop,\n PopoverPosition,\n PopoverSide,\n PopoverTriggerOn,\n PopoverVariant,\n} from './popover.variants';\n\n/**\n * Popover trigger directive — manages the popover overlay lifecycle.\n * Applied to the trigger element, it handles opening, closing, positioning,\n * and accessibility for floating popover content.\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-border`, `--shadow-lg`, `--color-ring`\n *\n * @example Basic usage with template\n * ```html\n * <button comButton [comPopoverTrigger]=\"helpContent\">Help</button>\n * <ng-template #helpContent>\n * <p>This is help content.</p>\n * </ng-template>\n * ```\n *\n * @example With positioning\n * ```html\n * <button\n * comButton\n * [comPopoverTrigger]=\"menuContent\"\n * popoverPosition=\"below\"\n * popoverAlignment=\"start\"\n * [popoverShowArrow]=\"false\"\n * >\n * Menu\n * </button>\n * ```\n *\n * @example With component content\n * ```html\n * <button\n * comButton\n * [comPopoverTrigger]=\"UserProfilePopover\"\n * [popoverData]=\"{ userId: user.id }\"\n * >\n * Profile\n * </button>\n * ```\n *\n * @example Manual control\n * ```html\n * <button\n * comButton\n * [comPopoverTrigger]=\"content\"\n * popoverTriggerOn=\"manual\"\n * [(popoverOpen)]=\"isOpen\"\n * >\n * Controlled\n * </button>\n * ```\n */\n@Directive({\n selector: '[comPopoverTrigger]',\n exportAs: 'comPopoverTrigger',\n host: {\n '[attr.aria-haspopup]': '\"dialog\"',\n '[attr.aria-expanded]': 'popoverOpen()',\n '[attr.aria-controls]': 'ariaControls()',\n '(click)': 'onTriggerClick($event)',\n '(focus)': 'onTriggerFocus()',\n '(blur)': 'onTriggerBlur()',\n '(keydown.escape)': 'onEscapeKey($event)',\n },\n})\nexport class PopoverTriggerDirective {\n private readonly overlay = inject(Overlay);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly focusTrapFactory = inject(FocusTrapFactory);\n private readonly document = inject(DOCUMENT);\n\n private overlayRef: OverlayRef | null = null;\n private focusTrap: FocusTrap | null = null;\n private scrollCleanup: (() => void) | null = null;\n private readonly popoverId: string = generatePopoverId();\n\n // ─── Inputs ───\n\n /** Content to render: TemplateRef or Component class. */\n readonly comPopoverTrigger: InputSignal<TemplateRef<unknown> | Type<unknown>> = input.required();\n\n /** Preferred position direction. */\n readonly popoverPosition: InputSignal<PopoverPosition> = input<PopoverPosition>('auto');\n\n /** Alignment along the cross-axis. */\n readonly popoverAlignment: InputSignal<PopoverAlignment> = input<PopoverAlignment>('center');\n\n /** What interaction opens the popover. */\n readonly popoverTriggerOn: InputSignal<PopoverTriggerOn> = input<PopoverTriggerOn>('click');\n\n /** Gap in px between trigger and popover edge. */\n readonly popoverOffset: InputSignal<number> = input(8);\n\n /** Whether to render the connecting arrow. */\n readonly popoverShowArrow: InputSignalWithTransform<boolean, unknown> = input(true, {\n transform: booleanAttribute,\n });\n\n /** Size/padding preset for the content panel. */\n readonly popoverVariant: InputSignal<PopoverVariant> = input<PopoverVariant>('default');\n\n /** Backdrop behavior. */\n readonly popoverBackdrop: InputSignal<PopoverBackdrop> = input<PopoverBackdrop>('transparent');\n\n /** Close when clicking outside the popover. */\n readonly popoverCloseOnOutside: InputSignalWithTransform<boolean, unknown> = input(true, {\n transform: booleanAttribute,\n });\n\n /** Close on Escape key. */\n readonly popoverCloseOnEscape: InputSignalWithTransform<boolean, unknown> = input(true, {\n transform: booleanAttribute,\n });\n\n /** Close when ancestor scrollable container scrolls. */\n readonly popoverCloseOnScroll: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Prevents opening when true. */\n readonly popoverDisabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Two-way bindable open state. */\n readonly popoverOpen: ModelSignal<boolean> = model(false);\n\n /** Arbitrary data passed to the content component/template. */\n readonly popoverData: InputSignal<unknown> = input<unknown>(undefined);\n\n /** Custom CSS class(es) on the overlay panel. */\n readonly popoverPanelClass: InputSignal<string | string[]> = input<string | string[]>('');\n\n /** Trap focus inside popover. */\n readonly popoverTrapFocus: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Optional accessibility label for the popover dialog. */\n readonly popoverAriaLabel: InputSignal<string | undefined> = input<string | undefined>(undefined);\n\n // ─── Outputs ───\n\n /** Emitted after popup opens and is visible. */\n readonly popoverOpened: OutputEmitterRef<void> = output<void>();\n\n /** Emitted after popup closes and is detached. */\n readonly popoverClosed: OutputEmitterRef<void> = output<void>();\n\n // ─── Internal State ───\n\n private readonly activeSide: WritableSignal<PopoverSide> = signal<PopoverSide>('top');\n private readonly activeAlignment: WritableSignal<PopoverAlignment> = signal<PopoverAlignment>('center');\n private readonly animationState: WritableSignal<'open' | 'closed'> = signal<'open' | 'closed'>('open');\n private contentComponentRef: PopoverContentComponent | null = null;\n\n // ─── Computed ───\n\n private readonly hasBackdrop: Signal<boolean> = computed(() => this.popoverBackdrop() !== 'none');\n\n private readonly backdropClass: Signal<string> = computed(() =>\n this.popoverBackdrop() === 'dimmed' ? 'cdk-overlay-dark-backdrop' : 'cdk-overlay-transparent-backdrop',\n );\n\n protected readonly ariaControls: Signal<string | null> = computed(() =>\n this.popoverOpen() ? this.popoverId : null,\n );\n\n private readonly panelClassArray: Signal<string[]> = computed(() => {\n const panelClass = this.popoverPanelClass();\n if (Array.isArray(panelClass)) return panelClass;\n return panelClass ? [panelClass] : [];\n });\n\n constructor() {\n // React to external open state changes\n effect(() => {\n const isOpen = this.popoverOpen();\n if (isOpen && !this.overlayRef?.hasAttached()) {\n this.openPopover();\n } else if (!isOpen && this.overlayRef?.hasAttached()) {\n this.closePopover();\n }\n });\n\n // Cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.disposeOverlay();\n });\n }\n\n // ─── Public API ───\n\n /** Programmatically open the popover. */\n open(): void {\n if (!this.popoverDisabled() && !this.overlayRef?.hasAttached()) {\n this.popoverOpen.set(true);\n }\n }\n\n /** Programmatically close the popover. */\n close(): void {\n if (this.overlayRef?.hasAttached()) {\n this.popoverOpen.set(false);\n }\n }\n\n /** Toggle the popover open/close state. */\n toggle(): void {\n this.popoverOpen() ? this.close() : this.open();\n }\n\n /** Force recalculation of position. */\n reposition(): void {\n if (this.overlayRef) {\n this.overlayRef.updatePosition();\n }\n }\n\n // ─── Event Handlers ───\n\n protected onTriggerClick(event: MouseEvent): void {\n if (this.popoverTriggerOn() === 'click') {\n event.preventDefault();\n this.toggle();\n }\n }\n\n protected onTriggerFocus(): void {\n if (this.popoverTriggerOn() === 'focus') {\n this.open();\n }\n }\n\n protected onTriggerBlur(): void {\n if (this.popoverTriggerOn() === 'focus') {\n // Delay to allow focus to move to popover content\n setTimeout(() => {\n if (!this.overlayRef?.overlayElement.contains(this.document.activeElement)) {\n this.close();\n }\n }, 0);\n }\n }\n\n protected onEscapeKey(event: Event): void {\n if (this.popoverCloseOnEscape() && this.popoverOpen()) {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n this.elementRef.nativeElement.focus();\n }\n }\n\n // ─── Private Methods ───\n\n private openPopover(): void {\n if (this.popoverDisabled()) return;\n\n this.createOverlay();\n this.attachContent();\n this.subscribeToCloseEvents();\n this.subscribeToScrollEvents();\n this.setupFocusTrap();\n\n this.animationState.set('open');\n this.popoverOpened.emit();\n }\n\n private closePopover(): void {\n this.animationState.set('closed');\n this.unsubscribeFromScrollEvents();\n\n // Wait for animation to complete before detaching\n setTimeout(() => {\n this.detachContent();\n this.destroyFocusTrap();\n this.popoverClosed.emit();\n }, 100); // Match animation duration\n }\n\n private subscribeToScrollEvents(): void {\n if (this.popoverCloseOnScroll()) return;\n\n const scrollHandler = (): void => this.overlayRef?.updatePosition();\n this.document.addEventListener('scroll', scrollHandler, true);\n this.scrollCleanup = () => this.document.removeEventListener('scroll', scrollHandler, true);\n }\n\n private unsubscribeFromScrollEvents(): void {\n this.scrollCleanup?.();\n this.scrollCleanup = null;\n }\n\n private createOverlay(): void {\n if (this.overlayRef) return;\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions(buildPopoverPositions(this.popoverPosition(), this.popoverAlignment(), this.popoverOffset()))\n .withFlexibleDimensions(false)\n .withPush(true)\n .withViewportMargin(8);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.popoverCloseOnScroll()\n ? this.overlay.scrollStrategies.close()\n : this.overlay.scrollStrategies.reposition(),\n hasBackdrop: this.hasBackdrop(),\n backdropClass: this.backdropClass(),\n panelClass: ['com-popover-panel', ...this.panelClassArray()],\n });\n\n // Track position changes for arrow placement\n (positionStrategy as FlexibleConnectedPositionStrategy).positionChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((change: ConnectedOverlayPositionChange) => {\n this.activeSide.set(deriveSideFromPosition(change.connectionPair));\n this.activeAlignment.set(deriveAlignmentFromPosition(change.connectionPair));\n this.updateContentComponentInputs();\n });\n }\n\n private attachContent(): void {\n if (!this.overlayRef) return;\n\n const content = this.comPopoverTrigger();\n\n // Create the content wrapper component\n const contentInjector = Injector.create({\n parent: this.injector,\n providers: [\n { provide: POPOVER_DATA, useValue: this.popoverData() },\n { provide: POPOVER_REF, useValue: this },\n ],\n });\n\n const contentPortal = new ComponentPortal(PopoverContentComponent, this.viewContainerRef, contentInjector);\n const contentRef = this.overlayRef.attach(contentPortal);\n this.contentComponentRef = contentRef.instance;\n\n // Create the inner content portal (template or component)\n let innerPortal: TemplatePortal<unknown> | ComponentPortal<unknown>;\n\n if (content instanceof TemplateRef) {\n innerPortal = new TemplatePortal(content, this.viewContainerRef, {\n $implicit: this.popoverData(),\n close: () => this.close(),\n });\n } else {\n const componentInjector = Injector.create({\n parent: this.injector,\n providers: [\n { provide: POPOVER_DATA, useValue: this.popoverData() },\n { provide: POPOVER_REF, useValue: this },\n ],\n });\n innerPortal = new ComponentPortal(content, this.viewContainerRef, componentInjector);\n }\n\n // Set content component inputs\n this.updateContentComponentInputs(innerPortal);\n }\n\n private updateContentComponentInputs(innerPortal?: TemplatePortal<unknown> | ComponentPortal<unknown>): void {\n const ref = this.contentComponentRef;\n if (!ref) return;\n\n if (innerPortal) {\n ref.contentPortal.set(innerPortal);\n }\n ref.variant.set(this.popoverVariant());\n ref.showArrow.set(this.popoverShowArrow());\n ref.activeSide.set(this.activeSide());\n ref.activeAlignment.set(this.activeAlignment());\n ref.popoverId.set(this.popoverId);\n ref.ariaLabel.set(this.popoverAriaLabel());\n ref.animationState.set(this.animationState());\n ref.panelClass.set(mergeClasses(...this.panelClassArray()));\n }\n\n private detachContent(): void {\n if (this.overlayRef?.hasAttached()) {\n this.overlayRef.detach();\n }\n this.contentComponentRef = null;\n }\n\n private subscribeToCloseEvents(): void {\n if (!this.overlayRef) return;\n\n // Close on backdrop click\n if (this.popoverCloseOnOutside()) {\n this.overlayRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n }\n\n // Close on escape key (handled by overlay)\n if (this.popoverCloseOnEscape()) {\n this.overlayRef\n .keydownEvents()\n .pipe(\n filter((event) => event.key === 'Escape'),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((event) => {\n event.preventDefault();\n this.close();\n this.elementRef.nativeElement.focus();\n });\n }\n\n // Handle detachment\n this.overlayRef\n .detachments()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.popoverOpen.set(false);\n });\n }\n\n private setupFocusTrap(): void {\n if (this.popoverTrapFocus() && this.overlayRef) {\n this.focusTrap = this.focusTrapFactory.create(this.overlayRef.overlayElement);\n this.focusTrap.focusInitialElementWhenReady();\n }\n }\n\n private destroyFocusTrap(): void {\n if (this.focusTrap) {\n this.focusTrap.destroy();\n this.focusTrap = null;\n }\n }\n\n private disposeOverlay(): void {\n this.destroyFocusTrap();\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n this.contentComponentRef = null;\n }\n}\n","import { Directive, inject, input } from '@angular/core';\nimport type { InputSignal } from '@angular/core';\nimport { POPOVER_REF, type PopoverRef } from './popover-tokens';\n\n/**\n * Convenience directive that closes the parent popover when clicked.\n * Applied to elements inside the popover that should dismiss it.\n *\n * @example\n * ```html\n * <ng-template #confirmPop>\n * <div class=\"space-y-3\">\n * <p>Are you sure?</p>\n * <div class=\"flex gap-2\">\n * <button comButton variant=\"ghost\" comPopoverClose>Cancel</button>\n * <button comButton (click)=\"confirm()\" comPopoverClose>Confirm</button>\n * </div>\n * </div>\n * </ng-template>\n * ```\n *\n * @example With a result value\n * ```html\n * <button [comPopoverClose]=\"'confirmed'\" (click)=\"onConfirm()\">Yes</button>\n * <button [comPopoverClose]=\"'cancelled'\">No</button>\n * ```\n */\n@Directive({\n selector: '[comPopoverClose]',\n exportAs: 'comPopoverClose',\n host: {\n '(click)': 'closePopover()',\n '[attr.type]': '\"button\"',\n },\n})\nexport class PopoverCloseDirective {\n private readonly popoverRef: PopoverRef | null = inject(POPOVER_REF, { optional: true });\n\n /**\n * Optional result value to pass when closing.\n * This value is emitted via the trigger's close event.\n */\n readonly comPopoverClose: InputSignal<unknown> = input<unknown>(undefined);\n\n protected closePopover(): void {\n this.popoverRef?.close();\n }\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Marker directive for lazy popover content templates.\n * Applied to `<ng-template>` to indicate content that should be\n * lazily instantiated when the popover opens.\n *\n * This directive is primarily semantic — it marks the template as popover content\n * and provides access to the TemplateRef for potential content queries.\n *\n * @example\n * ```html\n * <button [comPopoverTrigger]=\"helpContent\">Help</button>\n * <ng-template comPopoverTemplate #helpContent>\n * <p>This is help content.</p>\n * </ng-template>\n * ```\n *\n * Note: You can also pass a template reference directly without this directive:\n * ```html\n * <button [comPopoverTrigger]=\"helpContent\">Help</button>\n * <ng-template #helpContent>\n * <p>This also works.</p>\n * </ng-template>\n * ```\n */\n@Directive({\n selector: '[comPopoverTemplate]',\n exportAs: 'comPopoverTemplate',\n})\nexport class PopoverTemplateDirective {\n /** Reference to the template for rendering. */\n readonly templateRef: TemplateRef<unknown> = inject(TemplateRef);\n}\n","// Public API for the popover component\n\n// Main directive\nexport { PopoverTriggerDirective } from './popover-trigger.directive';\n\n// Supporting directives\nexport { PopoverCloseDirective } from './popover-close.directive';\nexport { PopoverTemplateDirective } from './popover-template.directive';\n\n// Injection tokens and types\nexport { POPOVER_DATA, POPOVER_REF, type PopoverRef } from './popover-tokens';\n\n// Position utilities\nexport { buildPopoverPositions, deriveSideFromPosition, deriveAlignmentFromPosition } from './popover-positions';\n\n// Variants and types\nexport {\n popoverArrowVariants,\n popoverPanelVariants,\n type PopoverAlignment,\n type PopoverArrowVariants,\n type PopoverBackdrop,\n type PopoverPanelVariants,\n type PopoverPosition,\n type PopoverSide,\n type PopoverTriggerOn,\n type PopoverVariant,\n} from './popover.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-com-components-popover.mjs","sources":["../../../projects/com/components/popover/popover.variants.ts","../../../projects/com/components/popover/popover.utils.ts","../../../projects/com/components/popover/popover-arrow.component.ts","../../../projects/com/components/popover/popover-content.component.ts","../../../projects/com/components/popover/popover-tokens.ts","../../../projects/com/components/popover/popover-positions.ts","../../../projects/com/components/popover/popover-trigger.directive.ts","../../../projects/com/components/popover/popover-close.directive.ts","../../../projects/com/components/popover/popover-template.directive.ts","../../../projects/com/components/popover/index.ts","../../../projects/com/components/popover/ngx-com-components-popover.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\n// ─── Type Definitions ───\n\nexport type PopoverPosition = 'above' | 'below' | 'left' | 'right' | 'auto';\nexport type PopoverAlignment = 'start' | 'center' | 'end';\nexport type PopoverTriggerOn = 'click' | 'focus' | 'manual';\nexport type PopoverVariant = 'default' | 'compact' | 'wide' | 'flush';\nexport type PopoverBackdrop = 'transparent' | 'dimmed' | 'none';\nexport type PopoverSide = 'top' | 'bottom' | 'left' | 'right';\n\n// ─── Popover Panel Variants ───\n\n/**\n * Popover panel styling variants.\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-border`, `--shadow-overlay`, `--radius-popover`, `--radius-overlay`\n */\nexport const popoverPanelVariants: ReturnType<\n typeof cva<{ variant: Record<PopoverVariant, string> }>\n> = cva(\n ['relative', 'bg-popover text-popover-foreground', 'border border-border', 'shadow-overlay', 'overflow-hidden'],\n {\n variants: {\n variant: {\n default: 'rounded-popover p-4 min-w-48 max-w-sm',\n compact: 'rounded-overlay p-2 min-w-32 max-w-xs',\n wide: 'rounded-popover p-5 min-w-64 max-w-lg',\n flush: 'rounded-popover p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n },\n);\n\nexport type PopoverPanelVariants = VariantProps<typeof popoverPanelVariants>;\n\n// ─── Popover Arrow Variants ───\n\n/**\n * Popover arrow positioning variants.\n * The arrow is positioned on the edge of the popover pointing toward the trigger.\n *\n * @tokens `--color-popover`, `--color-border`\n */\nexport const popoverArrowVariants: ReturnType<\n typeof cva<{ side: Record<PopoverSide, string> }>\n> = cva('absolute z-10 text-popover', {\n variants: {\n side: {\n top: 'left-1/2 top-full -translate-x-1/2 -translate-y-px rotate-180',\n bottom: 'left-1/2 bottom-full -translate-x-1/2 translate-y-px',\n left: 'top-1/2 right-0 -translate-y-1/2 translate-x-[11px] rotate-90',\n right: 'top-1/2 left-0 -translate-y-1/2 -translate-x-[11px] -rotate-90',\n },\n },\n defaultVariants: {\n side: 'bottom',\n },\n});\n\nexport type PopoverArrowVariants = VariantProps<typeof popoverArrowVariants>;\n","export { mergeClasses } from 'ngx-com/utils';\n\nlet popoverIdCounter = 0;\n\n/**\n * Generate a unique ID for a popover instance.\n */\nexport function generatePopoverId(): string {\n return `popover-${++popoverIdCounter}`;\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport type { PopoverAlignment, PopoverSide } from './popover.variants';\nimport { popoverArrowVariants } from './popover.variants';\nimport { mergeClasses } from './popover.utils';\n\n/** Alignment offset classes for arrow positioning. */\nconst ALIGNMENT_OFFSETS: Record<PopoverSide, Record<PopoverAlignment, string>> = {\n top: { start: 'left-4 -translate-x-0', center: '', end: 'left-auto right-4 translate-x-0' },\n bottom: { start: 'left-4 -translate-x-0', center: '', end: 'left-auto right-4 translate-x-0' },\n left: { start: 'top-4 -translate-y-0', center: '', end: 'top-auto bottom-4 translate-y-0' },\n right: { start: 'top-4 -translate-y-0', center: '', end: 'top-auto bottom-4 translate-y-0' },\n};\n\n/**\n * Internal arrow component rendered inside the popover panel.\n * Points toward the trigger element based on the active position.\n *\n * @internal Not exported in public API\n *\n * @tokens `--color-popover`, `--color-border`\n */\n@Component({\n selector: 'com-popover-arrow',\n template: `\n <svg\n [class]=\"arrowClasses()\"\n width=\"16\"\n height=\"8\"\n viewBox=\"0 0 16 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <!-- Border stroke (rendered underneath) -->\n <path\n d=\"M0 8L8 1L16 8\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1\"\n class=\"text-border\"\n />\n <!-- Fill (covers the stroke at the base) -->\n <path d=\"M1 8L8 1.5L15 8\" fill=\"currentColor\" class=\"text-popover\" />\n </svg>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'pointer-events-none',\n },\n})\nexport class ComPopoverArrow {\n /** Which side of the popover the arrow is on. */\n readonly side: InputSignal<PopoverSide> = input<PopoverSide>('top');\n\n /** Alignment along the edge (for offset positioning). */\n readonly alignment: InputSignal<PopoverAlignment> = input<PopoverAlignment>('center');\n\n /** Computed CSS classes for the arrow. */\n protected readonly arrowClasses: Signal<string> = computed(() =>\n mergeClasses(popoverArrowVariants({ side: this.side() }), ALIGNMENT_OFFSETS[this.side()][this.alignment()]),\n );\n}\n","import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core';\nimport type { Signal, WritableSignal } from '@angular/core';\nimport { CdkPortalOutlet, type Portal } from '@angular/cdk/portal';\nimport { ComPopoverArrow } from './popover-arrow.component';\nimport type { PopoverAlignment, PopoverSide, PopoverVariant } from './popover.variants';\nimport { popoverPanelVariants } from './popover.variants';\nimport { mergeClasses } from './popover.utils';\n\n/**\n * Internal content wrapper component for the popover.\n * Renders the panel styling, arrow, and consumer content.\n *\n * @internal Not exported in public API\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-border`, `--shadow-overlay`, `--radius-popover`, `--radius-overlay`\n */\n@Component({\n selector: 'com-popover-content',\n template: `\n <div\n class=\"relative\"\n [attr.data-state]=\"animationState()\"\n [attr.data-side]=\"activeSide()\"\n >\n @if (showArrow()) {\n <com-popover-arrow [side]=\"activeSide()\" [alignment]=\"activeAlignment()\" />\n }\n <div\n [class]=\"panelClasses()\"\n role=\"dialog\"\n [attr.id]=\"popoverId()\"\n [attr.aria-label]=\"ariaLabel() || null\"\n >\n <ng-template [cdkPortalOutlet]=\"contentPortal()\" />\n </div>\n </div>\n `,\n styles: `\n :host {\n display: contents;\n }\n\n /* Animation styles */\n [data-state='open'] {\n animation: popover-in 150ms ease-out;\n }\n\n [data-state='closed'] {\n animation: popover-out 100ms ease-in forwards;\n }\n\n /* Transform origin based on side */\n [data-side='top'] {\n transform-origin: bottom center;\n }\n\n [data-side='bottom'] {\n transform-origin: top center;\n }\n\n [data-side='left'] {\n transform-origin: right center;\n }\n\n [data-side='right'] {\n transform-origin: left center;\n }\n\n @keyframes popover-in {\n from {\n opacity: 0;\n transform: scale(0.96) translateY(4px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n }\n\n @keyframes popover-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n [data-state='open'],\n [data-state='closed'] {\n animation: none;\n }\n }\n `,\n imports: [CdkPortalOutlet, ComPopoverArrow],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ComPopoverContent {\n /** The portal containing consumer content to render. */\n readonly contentPortal: WritableSignal<Portal<unknown> | null> = signal<Portal<unknown> | null>(null);\n\n /** Size/padding variant for the panel. */\n readonly variant: WritableSignal<PopoverVariant> = signal<PopoverVariant>('default');\n\n /** Whether to render the arrow. */\n readonly showArrow: WritableSignal<boolean> = signal(true);\n\n /** Which side the popover is on relative to the trigger. */\n readonly activeSide: WritableSignal<PopoverSide> = signal<PopoverSide>('top');\n\n /** Alignment along the cross-axis. */\n readonly activeAlignment: WritableSignal<PopoverAlignment> = signal<PopoverAlignment>('center');\n\n /** Unique ID for accessibility. */\n readonly popoverId: WritableSignal<string> = signal('');\n\n /** Optional accessibility label. */\n readonly ariaLabel: WritableSignal<string | undefined> = signal<string | undefined>(undefined);\n\n /** Animation state for enter/leave. */\n readonly animationState: WritableSignal<'open' | 'closed'> = signal<'open' | 'closed'>('open');\n\n /** Additional CSS classes for the panel. */\n readonly panelClass: WritableSignal<string> = signal('');\n\n /** Computed CSS classes for the panel. */\n protected readonly panelClasses: Signal<string> = computed(() =>\n mergeClasses(popoverPanelVariants({ variant: this.variant() }), this.panelClass()),\n );\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Interface for the popover reference injected into content.\n * Provides methods to control the popover from within content.\n */\nexport interface PopoverRef {\n /** Programmatically open the popover. */\n open(): void;\n /** Programmatically close the popover. */\n close(): void;\n /** Toggle the popover open/close state. */\n toggle(): void;\n /** Force recalculation of position. */\n reposition(): void;\n}\n\n/**\n * Data passed to a component rendered inside the popover.\n * Inject this token to access the data provided via `popoverData` input.\n *\n * @example\n * ```ts\n * @Component({ ... })\n * export class UserProfilePopover {\n * readonly data = inject(POPOVER_DATA); // { userId: '123' }\n * }\n * ```\n */\nexport const POPOVER_DATA: InjectionToken<unknown> = new InjectionToken<unknown>('POPOVER_DATA');\n\n/**\n * Reference to the popover trigger directive for closing from inside the popover.\n * Inject this token to programmatically close the popover from within content.\n *\n * @example\n * ```ts\n * @Component({ ... })\n * export class UserProfilePopover {\n * readonly popoverRef = inject(POPOVER_REF);\n *\n * save(): void {\n * // ... save logic\n * this.popoverRef.close();\n * }\n * }\n * ```\n */\nexport const POPOVER_REF: InjectionToken<PopoverRef> = new InjectionToken<PopoverRef>('POPOVER_REF');\n","import type { ConnectedPosition, ConnectionPositionPair } from '@angular/cdk/overlay';\nimport type { PopoverAlignment, PopoverPosition, PopoverSide } from './popover.variants';\n\n/**\n * Build an ordered list of position pairs for the CDK overlay.\n * The first position is the preferred position; remaining positions are fallbacks.\n *\n * @param position - Preferred position direction ('above', 'below', 'left', 'right', 'auto')\n * @param alignment - Alignment along the cross-axis ('start', 'center', 'end')\n * @param offset - Gap in pixels between trigger and popover edge (default: 8)\n * @returns Array of ConnectedPosition for FlexibleConnectedPositionStrategy\n */\nexport function buildPopoverPositions(\n position: PopoverPosition,\n alignment: PopoverAlignment,\n offset = 8,\n): ConnectedPosition[] {\n const allPositions = buildAllPositions(offset);\n\n if (position === 'auto') {\n // For auto, try below first, then above, then right, then left\n return [\n ...getPositionsForDirection('below', alignment, allPositions),\n ...getPositionsForDirection('above', alignment, allPositions),\n ...getPositionsForDirection('right', alignment, allPositions),\n ...getPositionsForDirection('left', alignment, allPositions),\n ];\n }\n\n // Start with preferred direction, then add fallbacks\n const preferred = getPositionsForDirection(position, alignment, allPositions);\n const fallbacks = ['below', 'above', 'left', 'right']\n .filter((dir) => dir !== position)\n .flatMap((dir) => getPositionsForDirection(dir as PopoverPosition, alignment, allPositions));\n\n return [...preferred, ...fallbacks];\n}\n\n/**\n * Build all 12 position combinations (4 directions × 3 alignments).\n */\nfunction buildAllPositions(offset: number): Map<string, ConnectedPosition> {\n const positions = new Map<string, ConnectedPosition>();\n\n // Below positions\n positions.set('below-start', {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: offset,\n });\n positions.set('below-center', {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: offset,\n });\n positions.set('below-end', {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: offset,\n });\n\n // Above positions\n positions.set('above-start', {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -offset,\n });\n positions.set('above-center', {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -offset,\n });\n positions.set('above-end', {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -offset,\n });\n\n // Left positions\n positions.set('left-start', {\n originX: 'start',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'top',\n offsetX: -offset,\n });\n positions.set('left-center', {\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n offsetX: -offset,\n });\n positions.set('left-end', {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetX: -offset,\n });\n\n // Right positions\n positions.set('right-start', {\n originX: 'end',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'top',\n offsetX: offset,\n });\n positions.set('right-center', {\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n offsetX: offset,\n });\n positions.set('right-end', {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetX: offset,\n });\n\n return positions;\n}\n\n/**\n * Get positions for a specific direction, ordered by alignment preference.\n */\nfunction getPositionsForDirection(\n direction: PopoverPosition,\n alignment: PopoverAlignment,\n allPositions: Map<string, ConnectedPosition>,\n): ConnectedPosition[] {\n if (direction === 'auto') {\n return [];\n }\n\n // Order alignments with preferred first\n const alignmentOrder: Record<PopoverAlignment, PopoverAlignment[]> = {\n start: ['start', 'center', 'end'],\n center: ['center', 'start', 'end'],\n end: ['end', 'center', 'start'],\n };\n\n return alignmentOrder[alignment]\n .map((align) => allPositions.get(`${direction}-${align}`))\n .filter((pos): pos is ConnectedPosition => pos !== undefined);\n}\n\n/**\n * Derive which side of the trigger the popover is on from a connection pair.\n * Used to position the arrow correctly.\n *\n * The returned side indicates where the popover sits relative to the trigger:\n * - 'bottom': popover is below trigger, arrow at top pointing up\n * - 'top': popover is above trigger, arrow at bottom pointing down\n * - 'right': popover is right of trigger, arrow at left pointing left\n * - 'left': popover is left of trigger, arrow at right pointing right\n */\nexport function deriveSideFromPosition(pair: ConnectionPositionPair): PopoverSide {\n const originX = pair.originX as string;\n const originY = pair.originY as string;\n const overlayX = pair.overlayX as string;\n const overlayY = pair.overlayY as string;\n\n if (originY === 'bottom' && overlayY === 'top') return 'bottom';\n if (originY === 'top' && overlayY === 'bottom') return 'top';\n if (originX === 'end' && overlayX === 'start') return 'right';\n if (originX === 'start' && overlayX === 'end') return 'left';\n\n return 'bottom';\n}\n\n/**\n * Derive alignment from a connection pair.\n */\nexport function deriveAlignmentFromPosition(pair: ConnectionPositionPair): PopoverAlignment {\n const originX = pair.originX as string;\n const originY = pair.originY as string;\n const overlayX = pair.overlayX as string;\n const overlayY = pair.overlayY as string;\n\n // For vertical positioning (above/below), check X alignment\n if (originY === 'bottom' || originY === 'top') {\n if (originX === 'start' && overlayX === 'start') return 'start';\n if (originX === 'end' && overlayX === 'end') return 'end';\n return 'center';\n }\n\n // For horizontal positioning (left/right), check Y alignment\n if (originY === 'top' && overlayY === 'top') return 'start';\n if (originY === 'bottom' && overlayY === 'bottom') return 'end';\n return 'center';\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n model,\n output,\n signal,\n TemplateRef,\n Type,\n ViewContainerRef,\n} from '@angular/core';\nimport type {\n InputSignal,\n InputSignalWithTransform,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DOCUMENT } from '@angular/common';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport type { ConnectedOverlayPositionChange, FlexibleConnectedPositionStrategy } from '@angular/cdk/overlay';\nimport { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\nimport { filter } from 'rxjs/operators';\nimport { ComPopoverContent } from './popover-content.component';\nimport { POPOVER_DATA, POPOVER_REF } from './popover-tokens';\nimport { buildPopoverPositions, deriveAlignmentFromPosition, deriveSideFromPosition } from './popover-positions';\nimport { generatePopoverId, mergeClasses } from './popover.utils';\nimport type {\n PopoverAlignment,\n PopoverBackdrop,\n PopoverPosition,\n PopoverSide,\n PopoverTriggerOn,\n PopoverVariant,\n} from './popover.variants';\n\n/**\n * Popover trigger directive — manages the popover overlay lifecycle.\n * Applied to the trigger element, it handles opening, closing, positioning,\n * and accessibility for floating popover content.\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-border`, `--shadow-overlay`, `--color-ring`\n *\n * @example Basic usage with template\n * ```html\n * <button comButton [comPopoverTrigger]=\"helpContent\">Help</button>\n * <ng-template #helpContent>\n * <p>This is help content.</p>\n * </ng-template>\n * ```\n *\n * @example With positioning\n * ```html\n * <button\n * comButton\n * [comPopoverTrigger]=\"menuContent\"\n * popoverPosition=\"below\"\n * popoverAlignment=\"start\"\n * [popoverShowArrow]=\"false\"\n * >\n * Menu\n * </button>\n * ```\n *\n * @example With component content\n * ```html\n * <button\n * comButton\n * [comPopoverTrigger]=\"UserProfilePopover\"\n * [popoverData]=\"{ userId: user.id }\"\n * >\n * Profile\n * </button>\n * ```\n *\n * @example Manual control\n * ```html\n * <button\n * comButton\n * [comPopoverTrigger]=\"content\"\n * popoverTriggerOn=\"manual\"\n * [(popoverOpen)]=\"isOpen\"\n * >\n * Controlled\n * </button>\n * ```\n */\n@Directive({\n selector: '[comPopoverTrigger]',\n exportAs: 'comPopoverTrigger',\n host: {\n '[attr.aria-haspopup]': '\"dialog\"',\n '[attr.aria-expanded]': 'popoverOpen()',\n '[attr.aria-controls]': 'ariaControls()',\n '(click)': 'onTriggerClick($event)',\n '(focus)': 'onTriggerFocus()',\n '(blur)': 'onTriggerBlur()',\n '(keydown.escape)': 'onEscapeKey($event)',\n },\n})\nexport class ComPopoverTrigger {\n private readonly overlay = inject(Overlay);\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\n private readonly focusTrapFactory = inject(FocusTrapFactory);\n private readonly document = inject(DOCUMENT);\n\n private overlayRef: OverlayRef | null = null;\n private focusTrap: FocusTrap | null = null;\n private scrollCleanup: (() => void) | null = null;\n private closeTimeoutId: ReturnType<typeof setTimeout> | null = null;\n private destroyed = false;\n private readonly popoverId: string = generatePopoverId();\n\n // ─── Inputs ───\n\n /** Content to render: TemplateRef or Component class. */\n readonly comPopoverTrigger: InputSignal<TemplateRef<unknown> | Type<unknown>> = input.required();\n\n /** Preferred position direction. */\n readonly popoverPosition: InputSignal<PopoverPosition> = input<PopoverPosition>('auto');\n\n /** Alignment along the cross-axis. */\n readonly popoverAlignment: InputSignal<PopoverAlignment> = input<PopoverAlignment>('center');\n\n /** What interaction opens the popover. */\n readonly popoverTriggerOn: InputSignal<PopoverTriggerOn> = input<PopoverTriggerOn>('click');\n\n /** Gap in px between trigger and popover edge. */\n readonly popoverOffset: InputSignal<number> = input(8);\n\n /** Whether to render the connecting arrow. */\n readonly popoverShowArrow: InputSignalWithTransform<boolean, unknown> = input(true, {\n transform: booleanAttribute,\n });\n\n /** Size/padding preset for the content panel. */\n readonly popoverVariant: InputSignal<PopoverVariant> = input<PopoverVariant>('default');\n\n /** Backdrop behavior. */\n readonly popoverBackdrop: InputSignal<PopoverBackdrop> = input<PopoverBackdrop>('transparent');\n\n /** Close when clicking outside the popover. */\n readonly popoverCloseOnOutside: InputSignalWithTransform<boolean, unknown> = input(true, {\n transform: booleanAttribute,\n });\n\n /** Close on Escape key. */\n readonly popoverCloseOnEscape: InputSignalWithTransform<boolean, unknown> = input(true, {\n transform: booleanAttribute,\n });\n\n /** Close when ancestor scrollable container scrolls. */\n readonly popoverCloseOnScroll: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Prevents opening when true. */\n readonly popoverDisabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Two-way bindable open state. */\n readonly popoverOpen: ModelSignal<boolean> = model(false);\n\n /** Arbitrary data passed to the content component/template. */\n readonly popoverData: InputSignal<unknown> = input<unknown>(undefined);\n\n /** Custom CSS class(es) on the overlay panel. */\n readonly popoverPanelClass: InputSignal<string | string[]> = input<string | string[]>('');\n\n /** Trap focus inside popover. */\n readonly popoverTrapFocus: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Optional accessibility label for the popover dialog. */\n readonly popoverAriaLabel: InputSignal<string | undefined> = input<string | undefined>(undefined);\n\n // ─── Outputs ───\n\n /** Emitted after popup opens and is visible. */\n readonly popoverOpened: OutputEmitterRef<void> = output<void>();\n\n /** Emitted after popup closes and is detached. */\n readonly popoverClosed: OutputEmitterRef<void> = output<void>();\n\n // ─── Internal State ───\n\n private readonly activeSide: WritableSignal<PopoverSide> = signal<PopoverSide>('top');\n private readonly activeAlignment: WritableSignal<PopoverAlignment> = signal<PopoverAlignment>('center');\n private readonly animationState: WritableSignal<'open' | 'closed'> = signal<'open' | 'closed'>('open');\n private contentComponentRef: ComPopoverContent | null = null;\n\n // ─── Computed ───\n\n private readonly hasBackdrop: Signal<boolean> = computed(() => this.popoverBackdrop() !== 'none');\n\n private readonly backdropClass: Signal<string> = computed(() =>\n this.popoverBackdrop() === 'dimmed' ? 'cdk-overlay-dark-backdrop' : 'cdk-overlay-transparent-backdrop',\n );\n\n protected readonly ariaControls: Signal<string | null> = computed(() =>\n this.popoverOpen() ? this.popoverId : null,\n );\n\n private readonly panelClassArray: Signal<string[]> = computed(() => {\n const panelClass = this.popoverPanelClass();\n if (Array.isArray(panelClass)) return panelClass;\n return panelClass ? [panelClass] : [];\n });\n\n constructor() {\n // React to external open state changes\n effect(() => {\n const isOpen = this.popoverOpen();\n if (isOpen && !this.overlayRef?.hasAttached()) {\n this.openPopover();\n } else if (!isOpen && this.overlayRef?.hasAttached()) {\n this.closePopover();\n }\n });\n\n // Cleanup on destroy\n this.destroyRef.onDestroy(() => {\n this.destroyed = true;\n this.cancelPendingClose();\n this.disposeOverlay();\n });\n }\n\n // ─── Public API ───\n\n /** Programmatically open the popover. */\n open(): void {\n if (!this.popoverDisabled() && !this.overlayRef?.hasAttached()) {\n this.popoverOpen.set(true);\n }\n }\n\n /** Programmatically close the popover. */\n close(): void {\n if (this.overlayRef?.hasAttached()) {\n this.popoverOpen.set(false);\n }\n }\n\n /** Toggle the popover open/close state. */\n toggle(): void {\n if (this.popoverOpen()) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /** Force recalculation of position. */\n reposition(): void {\n this.overlayRef?.updatePosition();\n }\n\n // ─── Event Handlers ───\n\n protected onTriggerClick(event: MouseEvent): void {\n if (this.popoverTriggerOn() === 'click') {\n event.preventDefault();\n this.toggle();\n }\n }\n\n protected onTriggerFocus(): void {\n if (this.popoverTriggerOn() === 'focus') {\n this.open();\n }\n }\n\n protected onTriggerBlur(): void {\n if (this.popoverTriggerOn() === 'focus') {\n // Delay to allow focus to move to popover content\n setTimeout(() => {\n if (this.destroyed) return;\n if (!this.overlayRef?.overlayElement.contains(this.document.activeElement)) {\n this.close();\n }\n }, 0);\n }\n }\n\n protected onEscapeKey(event: Event): void {\n if (this.popoverCloseOnEscape() && this.popoverOpen()) {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n this.elementRef.nativeElement.focus();\n }\n }\n\n // ─── Private Methods ───\n\n private openPopover(): void {\n if (this.popoverDisabled()) return;\n\n this.createOverlay();\n this.attachContent();\n this.subscribeToCloseEvents();\n this.subscribeToScrollEvents();\n this.setupFocusTrap();\n\n this.animationState.set('open');\n this.popoverOpened.emit();\n }\n\n private closePopover(): void {\n this.animationState.set('closed');\n this.unsubscribeFromScrollEvents();\n this.cancelPendingClose();\n\n // Wait for animation to complete before detaching\n this.closeTimeoutId = setTimeout(() => {\n this.closeTimeoutId = null;\n if (this.destroyed) return;\n this.detachContent();\n this.destroyFocusTrap();\n this.popoverClosed.emit();\n }, 100); // Match animation duration\n }\n\n private cancelPendingClose(): void {\n if (this.closeTimeoutId !== null) {\n clearTimeout(this.closeTimeoutId);\n this.closeTimeoutId = null;\n }\n }\n\n private subscribeToScrollEvents(): void {\n if (this.popoverCloseOnScroll()) return;\n\n const scrollHandler = (): void => this.overlayRef?.updatePosition();\n this.document.addEventListener('scroll', scrollHandler, true);\n this.scrollCleanup = () => this.document.removeEventListener('scroll', scrollHandler, true);\n }\n\n private unsubscribeFromScrollEvents(): void {\n this.scrollCleanup?.();\n this.scrollCleanup = null;\n }\n\n private createOverlay(): void {\n if (this.overlayRef) return;\n\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.elementRef)\n .withPositions(buildPopoverPositions(this.popoverPosition(), this.popoverAlignment(), this.popoverOffset()))\n .withFlexibleDimensions(false)\n .withPush(true)\n .withViewportMargin(8);\n\n this.overlayRef = this.overlay.create({\n positionStrategy,\n scrollStrategy: this.popoverCloseOnScroll()\n ? this.overlay.scrollStrategies.close()\n : this.overlay.scrollStrategies.reposition(),\n hasBackdrop: this.hasBackdrop(),\n backdropClass: this.backdropClass(),\n panelClass: ['com-popover-panel', ...this.panelClassArray()],\n });\n\n // Track position changes for arrow placement\n (positionStrategy as FlexibleConnectedPositionStrategy).positionChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((change: ConnectedOverlayPositionChange) => {\n this.activeSide.set(deriveSideFromPosition(change.connectionPair));\n this.activeAlignment.set(deriveAlignmentFromPosition(change.connectionPair));\n this.updateContentComponentInputs();\n });\n }\n\n private attachContent(): void {\n if (!this.overlayRef) return;\n\n const content = this.comPopoverTrigger();\n\n // Create the content wrapper component\n const contentInjector = Injector.create({\n parent: this.injector,\n providers: [\n { provide: POPOVER_DATA, useValue: this.popoverData() },\n { provide: POPOVER_REF, useValue: this },\n ],\n });\n\n const contentPortal = new ComponentPortal(ComPopoverContent, this.viewContainerRef, contentInjector);\n const contentRef = this.overlayRef.attach(contentPortal);\n this.contentComponentRef = contentRef.instance;\n\n // Create the inner content portal (template or component)\n let innerPortal: TemplatePortal<unknown> | ComponentPortal<unknown>;\n\n if (content instanceof TemplateRef) {\n innerPortal = new TemplatePortal(content, this.viewContainerRef, {\n $implicit: this.popoverData(),\n close: () => this.close(),\n });\n } else {\n const componentInjector = Injector.create({\n parent: this.injector,\n providers: [\n { provide: POPOVER_DATA, useValue: this.popoverData() },\n { provide: POPOVER_REF, useValue: this },\n ],\n });\n innerPortal = new ComponentPortal(content, this.viewContainerRef, componentInjector);\n }\n\n // Set content component inputs\n this.updateContentComponentInputs(innerPortal);\n }\n\n private updateContentComponentInputs(innerPortal?: TemplatePortal<unknown> | ComponentPortal<unknown>): void {\n const ref = this.contentComponentRef;\n if (!ref) return;\n\n if (innerPortal) {\n ref.contentPortal.set(innerPortal);\n }\n ref.variant.set(this.popoverVariant());\n ref.showArrow.set(this.popoverShowArrow());\n ref.activeSide.set(this.activeSide());\n ref.activeAlignment.set(this.activeAlignment());\n ref.popoverId.set(this.popoverId);\n ref.ariaLabel.set(this.popoverAriaLabel());\n ref.animationState.set(this.animationState());\n ref.panelClass.set(mergeClasses(...this.panelClassArray()));\n }\n\n private detachContent(): void {\n if (this.overlayRef?.hasAttached()) {\n this.overlayRef.detach();\n }\n this.contentComponentRef = null;\n }\n\n private subscribeToCloseEvents(): void {\n if (!this.overlayRef) return;\n\n // Close on backdrop click\n if (this.popoverCloseOnOutside()) {\n this.overlayRef\n .backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.close());\n }\n\n // Close on escape key (handled by overlay)\n if (this.popoverCloseOnEscape()) {\n this.overlayRef\n .keydownEvents()\n .pipe(\n filter((event) => event.key === 'Escape'),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe((event) => {\n event.preventDefault();\n this.close();\n this.elementRef.nativeElement.focus();\n });\n }\n\n // Handle detachment\n this.overlayRef\n .detachments()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (this.destroyed) return;\n this.popoverOpen.set(false);\n });\n }\n\n private setupFocusTrap(): void {\n if (this.popoverTrapFocus() && this.overlayRef) {\n this.focusTrap = this.focusTrapFactory.create(this.overlayRef.overlayElement);\n this.focusTrap.focusInitialElementWhenReady();\n }\n }\n\n private destroyFocusTrap(): void {\n if (this.focusTrap) {\n this.focusTrap.destroy();\n this.focusTrap = null;\n }\n }\n\n private disposeOverlay(): void {\n this.destroyFocusTrap();\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n this.contentComponentRef = null;\n }\n}\n","import { Directive, inject, input } from '@angular/core';\nimport type { InputSignal } from '@angular/core';\nimport { POPOVER_REF, type PopoverRef } from './popover-tokens';\n\n/**\n * Convenience directive that closes the parent popover when clicked.\n * Applied to elements inside the popover that should dismiss it.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <ng-template #confirmPop>\n * <div class=\"space-y-3\">\n * <p>Are you sure?</p>\n * <div class=\"flex gap-2\">\n * <button comButton variant=\"ghost\" comPopoverClose>Cancel</button>\n * <button comButton (click)=\"confirm()\" comPopoverClose>Confirm</button>\n * </div>\n * </div>\n * </ng-template>\n * ```\n *\n * @example With a result value\n * ```html\n * <button [comPopoverClose]=\"'confirmed'\" (click)=\"onConfirm()\">Yes</button>\n * <button [comPopoverClose]=\"'cancelled'\">No</button>\n * ```\n */\n@Directive({\n selector: '[comPopoverClose]',\n exportAs: 'comPopoverClose',\n host: {\n '(click)': 'closePopover()',\n '[attr.type]': '\"button\"',\n },\n})\nexport class ComPopoverClose {\n private readonly popoverRef: PopoverRef | null = inject(POPOVER_REF, { optional: true });\n\n /**\n * Optional result value to pass when closing.\n * This value is emitted via the trigger's close event.\n */\n readonly comPopoverClose: InputSignal<unknown> = input<unknown>(undefined);\n\n protected closePopover(): void {\n this.popoverRef?.close();\n }\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Marker directive for lazy popover content templates.\n * Applied to `<ng-template>` to indicate content that should be\n * lazily instantiated when the popover opens.\n *\n * This directive is primarily semantic — it marks the template as popover content\n * and provides access to the TemplateRef for potential content queries.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <button [comPopoverTrigger]=\"helpContent\">Help</button>\n * <ng-template comPopoverTemplate #helpContent>\n * <p>This is help content.</p>\n * </ng-template>\n * ```\n *\n * Note: You can also pass a template reference directly without this directive:\n * ```html\n * <button [comPopoverTrigger]=\"helpContent\">Help</button>\n * <ng-template #helpContent>\n * <p>This also works.</p>\n * </ng-template>\n * ```\n */\n@Directive({\n selector: '[comPopoverTemplate]',\n exportAs: 'comPopoverTemplate',\n})\nexport class ComPopoverTemplate {\n /** Reference to the template for rendering. */\n readonly templateRef: TemplateRef<unknown> = inject(TemplateRef);\n}\n","// Public API for the popover component\n\n// Main directive\nexport { ComPopoverTrigger } from './popover-trigger.directive';\n\n// Supporting directives\nexport { ComPopoverClose } from './popover-close.directive';\nexport { ComPopoverTemplate } from './popover-template.directive';\n\n// Injection tokens and types\nexport { POPOVER_DATA, POPOVER_REF, type PopoverRef } from './popover-tokens';\n\n// Position utilities\nexport { buildPopoverPositions, deriveSideFromPosition, deriveAlignmentFromPosition } from './popover-positions';\n\n// Variants and types\nexport {\n popoverArrowVariants,\n popoverPanelVariants,\n type PopoverAlignment,\n type PopoverArrowVariants,\n type PopoverBackdrop,\n type PopoverPanelVariants,\n type PopoverPosition,\n type PopoverSide,\n type PopoverTriggerOn,\n type PopoverVariant,\n} from './popover.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -20,8 +20,8 @@ import { ErrorStateMatcher } from 'ngx-com/components/form-field';
|
|
|
20
20
|
const radioCircleVariants = cva([
|
|
21
21
|
'com-radio__circle',
|
|
22
22
|
'inline-flex shrink-0 items-center justify-center',
|
|
23
|
-
'rounded-
|
|
24
|
-
'transition-colors duration-
|
|
23
|
+
'rounded-pill border-2 border-border',
|
|
24
|
+
'transition-colors duration-normal',
|
|
25
25
|
'peer-focus-visible:outline-[1px] peer-focus-visible:outline-offset-2 peer-focus-visible:outline-ring',
|
|
26
26
|
'peer-disabled:cursor-not-allowed peer-disabled:border-disabled peer-disabled:bg-disabled',
|
|
27
27
|
], {
|
|
@@ -555,7 +555,7 @@ class ComRadio {
|
|
|
555
555
|
/></span>
|
|
556
556
|
<div [class]="circleClasses()">
|
|
557
557
|
<div
|
|
558
|
-
class="com-radio__dot rounded-
|
|
558
|
+
class="com-radio__dot rounded-pill bg-current transition-transform duration-normal peer-disabled:bg-disabled-foreground"
|
|
559
559
|
[class]="dotSizeClass()"
|
|
560
560
|
[class.scale-100]="isChecked()"
|
|
561
561
|
[class.scale-0]="!isChecked()"
|
|
@@ -597,7 +597,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
597
597
|
/></span>
|
|
598
598
|
<div [class]="circleClasses()">
|
|
599
599
|
<div
|
|
600
|
-
class="com-radio__dot rounded-
|
|
600
|
+
class="com-radio__dot rounded-pill bg-current transition-transform duration-normal peer-disabled:bg-disabled-foreground"
|
|
601
601
|
[class]="dotSizeClass()"
|
|
602
602
|
[class.scale-100]="isChecked()"
|
|
603
603
|
[class.scale-0]="!isChecked()"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-com-components-radio.mjs","sources":["../../../projects/com/components/radio/radio.variants.ts","../../../projects/com/components/radio/radio.utils.ts","../../../projects/com/components/radio/radio-group.component.ts","../../../projects/com/components/radio/radio.component.ts","../../../projects/com/components/radio/index.ts","../../../projects/com/components/radio/ngx-com-components-radio.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\n\n/** Radio size variants. */\nexport type RadioSize = 'sm' | 'md' | 'lg';\n\n/** Radio color variants. */\nexport type RadioVariant = 'primary' | 'accent' | 'warn';\n\n/** Radio group orientation. */\nexport type RadioOrientation = 'vertical' | 'horizontal';\n\n/**\n * CVA variants for the visual radio circle.\n *\n * Uses `peer` selectors to style based on native input state:\n * - `peer-checked:` for checked state\n * - `peer-focus-visible:` for keyboard focus\n * - `peer-disabled:` for disabled state\n *\n * @tokens `--color-border`, `--color-primary`, `--color-primary-hover`,\n * `--color-accent`, `--color-accent-hover`,\n * `--color-warn`, `--color-warn-hover`,\n * `--color-disabled`, `--color-ring`\n */\nexport const radioCircleVariants: (props?: {\n variant?: RadioVariant;\n size?: RadioSize;\n}) => string = cva(\n [\n 'com-radio__circle',\n 'inline-flex shrink-0 items-center justify-center',\n 'rounded-full border-2 border-border',\n 'transition-colors duration-150',\n 'peer-focus-visible:outline-[1px] peer-focus-visible:outline-offset-2 peer-focus-visible:outline-ring',\n 'peer-disabled:cursor-not-allowed peer-disabled:border-disabled peer-disabled:bg-disabled',\n ],\n {\n variants: {\n variant: {\n primary: [\n 'peer-checked:border-primary peer-checked:bg-primary peer-checked:text-primary-foreground',\n 'group-hover:border-primary-hover',\n 'peer-checked:group-hover:bg-primary-hover peer-checked:group-hover:border-primary-hover',\n ],\n accent: [\n 'peer-checked:border-accent peer-checked:bg-accent peer-checked:text-accent-foreground',\n 'group-hover:border-accent-hover',\n 'peer-checked:group-hover:bg-accent-hover peer-checked:group-hover:border-accent-hover',\n ],\n warn: [\n 'peer-checked:border-warn peer-checked:bg-warn peer-checked:text-warn-foreground',\n 'group-hover:border-warn-hover',\n 'peer-checked:group-hover:bg-warn-hover peer-checked:group-hover:border-warn-hover',\n ],\n },\n size: {\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n);\n\n/** Size-based classes for the inner dot indicator. */\nexport const RADIO_DOT_SIZES: Record<RadioSize, string> = {\n sm: 'size-1.5',\n md: 'size-2',\n lg: 'size-2.5',\n};\n\n/** Size-based classes for the label content. */\nexport const RADIO_LABEL_SIZES: Record<RadioSize, string> = {\n sm: 'text-sm ms-2',\n md: 'text-base ms-2.5',\n lg: 'text-lg ms-3',\n};\n\n/** Base classes for the radio group container. */\nconst RADIO_GROUP_BASE = 'com-radio-group__container flex';\n\n/** Orientation-based classes for the radio group container. */\nexport const RADIO_GROUP_ORIENTATIONS: Record<RadioOrientation, string> = {\n vertical: `${RADIO_GROUP_BASE} flex-col gap-2`,\n horizontal: `${RADIO_GROUP_BASE} flex-row flex-wrap gap-4`,\n};\n","/** Auto-incrementing ID counter for unique radio IDs. */\nlet nextRadioId = 0;\n\n/** Generates a unique radio ID. */\nexport function generateRadioId(): string {\n return `com-radio-${nextRadioId++}`;\n}\n\n/** Auto-incrementing ID counter for unique radio group IDs. */\nlet nextGroupId = 0;\n\n/** Generates a unique radio group ID. */\nexport function generateRadioGroupId(): string {\n return `com-radio-group-${nextGroupId++}`;\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n InjectionToken,\n input,\n linkedSignal,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n InputSignal,\n InputSignalWithTransform,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport { ErrorStateMatcher } from 'ngx-com/components/form-field';\nimport { RADIO_GROUP_ORIENTATIONS } from './radio.variants';\nimport type { RadioOrientation, RadioSize, RadioVariant } from './radio.variants';\nimport { generateRadioGroupId } from './radio.utils';\n\n/** Event emitted when radio group value changes. */\nexport interface RadioGroupChange {\n value: string | null;\n}\n\n/** Interface for radio items that register with the group. */\nexport interface RadioItem {\n value: () => string;\n isDisabled: () => boolean;\n focus: () => void;\n}\n\n/** Context provided to child radio components via DI. */\nexport interface ComRadioGroupContext {\n name: Signal<string>;\n value: Signal<string | null>;\n disabled: Signal<boolean>;\n size: Signal<RadioSize>;\n variant: Signal<RadioVariant>;\n orientation: Signal<RadioOrientation>;\n focusedValue: Signal<string | null>;\n select: (value: string) => void;\n focusNext: (currentValue: string) => void;\n focusPrevious: (currentValue: string) => void;\n register: (radio: RadioItem) => void;\n unregister: (radio: RadioItem) => void;\n onTouched?: () => void;\n}\n\n/** Injection token for radio group context. */\nexport const COM_RADIO_GROUP: InjectionToken<ComRadioGroupContext> = new InjectionToken<ComRadioGroupContext>('COM_RADIO_GROUP');\n\n/**\n * Radio group component that manages a set of radio buttons.\n *\n * Provides mutual exclusion, shared name, and roving tabindex keyboard navigation.\n * Implements `ControlValueAccessor` for Reactive Forms integration.\n *\n * @tokens `--color-border`, `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-accent`, `--color-accent-foreground`, `--color-accent-hover`,\n * `--color-warn`, `--color-warn-foreground`, `--color-warn-hover`,\n * `--color-disabled`, `--color-disabled-foreground`, `--color-ring`\n *\n * @example Basic usage\n * ```html\n * <com-radio-group [(value)]=\"selectedFruit\" aria-label=\"Select a fruit\">\n * <com-radio value=\"apple\">Apple</com-radio>\n * <com-radio value=\"banana\">Banana</com-radio>\n * <com-radio value=\"cherry\">Cherry</com-radio>\n * </com-radio-group>\n * ```\n *\n * @example With reactive forms\n * ```html\n * <com-radio-group formControlName=\"size\" aria-label=\"Select size\">\n * <com-radio value=\"sm\">Small</com-radio>\n * <com-radio value=\"md\">Medium</com-radio>\n * <com-radio value=\"lg\">Large</com-radio>\n * </com-radio-group>\n * ```\n *\n * @example Horizontal orientation\n * ```html\n * <com-radio-group [(value)]=\"color\" orientation=\"horizontal\">\n * <com-radio value=\"red\">Red</com-radio>\n * <com-radio value=\"green\">Green</com-radio>\n * <com-radio value=\"blue\">Blue</com-radio>\n * </com-radio-group>\n * ```\n *\n * @example With variants\n * ```html\n * <com-radio-group [(value)]=\"priority\" variant=\"warn\" size=\"lg\">\n * <com-radio value=\"low\">Low</com-radio>\n * <com-radio value=\"medium\">Medium</com-radio>\n * <com-radio value=\"high\">High</com-radio>\n * </com-radio-group>\n * ```\n */\n@Component({\n selector: 'com-radio-group',\n exportAs: 'comRadioGroup',\n template: `\n <div\n role=\"radiogroup\"\n [class]=\"groupClasses()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-describedby]=\"computedAriaDescribedby()\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"errorState() || null\"\n >\n <ng-content />\n </div>\n @if (errorState() && errorMessage()) {\n <div\n [id]=\"errorId\"\n class=\"com-radio-group__error mt-1.5 text-sm text-warn\"\n role=\"alert\"\n >\n {{ errorMessage() }}\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: COM_RADIO_GROUP,\n useFactory: () => {\n const group = inject(ComRadioGroup);\n return group.createContext();\n },\n },\n ],\n host: {\n class: 'com-radio-group block',\n '[class.com-radio-group--disabled]': 'disabled()',\n '[class.com-radio-group--error]': 'errorState()',\n },\n})\nexport class ComRadioGroup implements ControlValueAccessor {\n /** Optional NgControl for reactive forms integration. */\n readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n /** Error state matcher for determining when to show validation errors. */\n private readonly defaultErrorStateMatcher: ErrorStateMatcher = inject(ErrorStateMatcher);\n private readonly parentForm: NgForm | null = inject(NgForm, { optional: true });\n private readonly parentFormGroup: FormGroupDirective | null = inject(FormGroupDirective, { optional: true });\n\n /** Unique ID for this radio group instance. */\n private readonly uniqueId: string = generateRadioGroupId();\n\n /** ID for the error message element. */\n readonly errorId: string = `${this.uniqueId}-error`;\n\n /** Registered radio items. */\n private readonly registeredRadios: WritableSignal<RadioItem[]> = signal([]);\n\n // Inputs\n readonly name: InputSignal<string> = input<string>(this.uniqueId);\n readonly value: ModelSignal<string | null> = model<string | null>(null);\n readonly disabled: ModelSignal<boolean> = model<boolean>(false);\n readonly required: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n readonly orientation: InputSignal<RadioOrientation> = input<RadioOrientation>('vertical');\n readonly size: InputSignal<RadioSize> = input<RadioSize>('md');\n readonly variant: InputSignal<RadioVariant> = input<RadioVariant>('primary');\n readonly errorMessage: InputSignal<string> = input<string>('');\n readonly errorStateMatcher: InputSignal<ErrorStateMatcher | undefined> = input<ErrorStateMatcher>();\n\n /** Tracks touched state — writable by both CVA callback and Signal Forms [formField]. */\n readonly touched: ModelSignal<boolean> = model<boolean>(false);\n\n // Signal Forms inputs — set automatically by [formField] via setInputOnDirectives\n readonly invalid: InputSignal<boolean> = input<boolean>(false);\n readonly sfErrors: InputSignal<readonly unknown[]> = input<readonly unknown[]>([], { alias: 'errors' });\n\n readonly ariaLabel: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-labelledby' });\n readonly ariaDescribedby: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-describedby' });\n\n // Outputs\n /** Emits when the selection changes, with full event details. */\n readonly selectionChange: OutputEmitterRef<RadioGroupChange> = output<RadioGroupChange>();\n\n /**\n * Tracks the currently focused radio value for roving tabindex.\n * Resets to the current selection (or first focusable) when value or radios change.\n */\n private readonly focusedValueSignal: WritableSignal<string | null> = linkedSignal({\n source: () => ({ value: this.value(), radios: this.registeredRadios() }),\n computation: ({ value, radios }) => {\n if (value && radios.some((r) => r.value() === value && !r.isDisabled())) {\n return value;\n }\n const firstFocusable = radios.find((r) => !r.isDisabled());\n return firstFocusable?.value() ?? null;\n },\n });\n\n // Computed\n /**\n * Computed error state derived from form validation.\n * Shows errors when control is invalid and touched/submitted.\n */\n readonly errorState: Signal<boolean> = computed(() => {\n if (!this.ngControl) {\n // Signal Forms: gate on invalid AND touched (mirrors ErrorStateMatcher default)\n return this.invalid() && this.touched();\n }\n // Reactive Forms: use ErrorStateMatcher (existing logic)\n this.touched();\n const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;\n const form = this.parentFormGroup ?? this.parentForm;\n return matcher.isErrorState(this.ngControl.control ?? null, form);\n });\n\n readonly computedAriaDescribedby: Signal<string | null> = computed(() => {\n const userDescribedby = this.ariaDescribedby();\n if (this.errorState() && this.errorMessage()) {\n return userDescribedby ? `${userDescribedby} ${this.errorId}` : this.errorId;\n }\n return userDescribedby;\n });\n\n protected readonly groupClasses: Signal<string> = computed(() =>\n RADIO_GROUP_ORIENTATIONS[this.orientation()]\n );\n\n // CVA callbacks\n private onChange: (value: string | null) => void = () => {};\n private onTouchedCallback: () => void = () => {};\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /** Creates the context object for child radios. */\n createContext(): ComRadioGroupContext {\n return {\n name: this.name,\n value: this.value,\n disabled: this.disabled,\n size: this.size,\n variant: this.variant,\n orientation: this.orientation,\n focusedValue: this.focusedValueSignal,\n select: this.select.bind(this),\n focusNext: this.focusNext.bind(this),\n focusPrevious: this.focusPrevious.bind(this),\n register: this.register.bind(this),\n unregister: this.unregister.bind(this),\n onTouched: () => this.onTouchedCallback(),\n };\n }\n\n /** Register a radio item with the group. */\n private register(radio: RadioItem): void {\n this.registeredRadios.update((radios) => [...radios, radio]);\n }\n\n /** Unregister a radio item from the group. */\n private unregister(radio: RadioItem): void {\n this.registeredRadios.update((radios) => radios.filter((r) => r !== radio));\n }\n\n // ControlValueAccessor implementation\n writeValue(value: string | null): void {\n this.value.set(value);\n }\n\n registerOnChange(fn: (value: string | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = () => {\n this.touched.set(true);\n fn();\n };\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n // Public API\n /** Selects a radio by value. */\n select(newValue: string): void {\n if (this.disabled()) {\n return;\n }\n this.value.set(newValue);\n this.focusedValueSignal.set(newValue);\n this.onChange(newValue);\n this.selectionChange.emit({ value: newValue });\n }\n\n /** Focuses the next non-disabled radio (with cyclic wrap). */\n focusNext(currentValue: string): void {\n const allRadios = this.registeredRadios();\n const focusableRadios = allRadios.filter((r) => !r.isDisabled());\n\n if (focusableRadios.length === 0) {\n return;\n }\n\n const currentIndex = focusableRadios.findIndex((r) => r.value() === currentValue);\n const nextIndex = (currentIndex + 1) % focusableRadios.length;\n const nextRadio = focusableRadios[nextIndex];\n\n if (nextRadio) {\n this.focusedValueSignal.set(nextRadio.value());\n this.select(nextRadio.value());\n nextRadio.focus();\n }\n }\n\n /** Focuses the previous non-disabled radio (with cyclic wrap). */\n focusPrevious(currentValue: string): void {\n const allRadios = this.registeredRadios();\n const focusableRadios = allRadios.filter((r) => !r.isDisabled());\n\n if (focusableRadios.length === 0) {\n return;\n }\n\n const currentIndex = focusableRadios.findIndex((r) => r.value() === currentValue);\n const prevIndex = (currentIndex - 1 + focusableRadios.length) % focusableRadios.length;\n const prevRadio = focusableRadios[prevIndex];\n\n if (prevRadio) {\n this.focusedValueSignal.set(prevRadio.value());\n this.select(prevRadio.value());\n prevRadio.focus();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n model,\n output,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n InputSignal,\n ModelSignal,\n OnInit,\n OutputEmitterRef,\n Signal,\n} from '@angular/core';\nimport {\n radioCircleVariants,\n RADIO_DOT_SIZES,\n RADIO_LABEL_SIZES,\n} from './radio.variants';\nimport type { RadioSize, RadioVariant } from './radio.variants';\nimport { generateRadioId } from './radio.utils';\nimport { COM_RADIO_GROUP, type ComRadioGroupContext, type RadioItem } from './radio-group.component';\n\n/** Event emitted when a radio is selected. */\nexport interface RadioChange {\n value: string;\n source: ComRadio;\n}\n\n/**\n * Production-grade radio component with full accessibility support.\n *\n * Uses a native `<input type=\"radio\">` for built-in keyboard handling,\n * `:checked` pseudo-class, and screen reader support.\n *\n * Must be used within a `ComRadioGroup` which manages the selected value\n * and provides the shared `name` attribute.\n *\n * @tokens `--color-border`, `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-accent`, `--color-accent-foreground`, `--color-accent-hover`,\n * `--color-warn`, `--color-warn-foreground`, `--color-warn-hover`,\n * `--color-disabled`, `--color-disabled-foreground`, `--color-ring`\n *\n * @example Basic usage within a group\n * ```html\n * <com-radio-group [(value)]=\"selectedOption\">\n * <com-radio value=\"option1\">Option 1</com-radio>\n * <com-radio value=\"option2\">Option 2</com-radio>\n * <com-radio value=\"option3\">Option 3</com-radio>\n * </com-radio-group>\n * ```\n *\n * @example Disabled option\n * ```html\n * <com-radio-group [(value)]=\"selected\">\n * <com-radio value=\"enabled\">Enabled option</com-radio>\n * <com-radio value=\"disabled\" [disabled]=\"true\">Disabled option</com-radio>\n * </com-radio-group>\n * ```\n */\n@Component({\n selector: 'com-radio',\n exportAs: 'comRadio',\n template: `\n <label\n class=\"group relative inline-flex items-center\"\n [class.cursor-pointer]=\"!isDisabled()\"\n [class.cursor-not-allowed]=\"isDisabled()\"\n >\n <span><input\n #inputElement\n type=\"radio\"\n class=\"peer sr-only\"\n [id]=\"inputId()\"\n [checked]=\"isChecked()\"\n [disabled]=\"isDisabled()\"\n [attr.name]=\"groupName()\"\n [attr.value]=\"value()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-describedby]=\"ariaDescribedby()\"\n [attr.tabindex]=\"tabIndex()\"\n (change)=\"onInputChange($event)\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeyDown($event)\"\n /></span>\n <div [class]=\"circleClasses()\">\n <div\n class=\"com-radio__dot rounded-full bg-current transition-transform duration-150 peer-disabled:bg-disabled-foreground\"\n [class]=\"dotSizeClass()\"\n [class.scale-100]=\"isChecked()\"\n [class.scale-0]=\"!isChecked()\"\n ></div>\n </div>\n <span\n class=\"com-radio__label select-none peer-disabled:cursor-not-allowed peer-disabled:text-disabled-foreground\"\n [class]=\"labelSizeClass()\"\n >\n <ng-content />\n </span>\n </label>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'com-radio inline-block align-middle',\n '[class.com-radio--disabled]': 'isDisabled()',\n '[class.com-radio--checked]': 'isChecked()',\n },\n})\nexport class ComRadio implements OnInit, RadioItem {\n /** Optional parent radio group context. */\n private readonly group: ComRadioGroupContext | null = inject(COM_RADIO_GROUP, {\n optional: true,\n });\n\n /** DestroyRef for cleanup. */\n private readonly destroyRef: DestroyRef = inject(DestroyRef);\n\n /** Reference to the native input element. */\n readonly inputRef: Signal<ElementRef<HTMLInputElement> | undefined> =\n viewChild<ElementRef<HTMLInputElement>>('inputElement');\n\n /** Unique ID for this radio instance. */\n private readonly uniqueId: string = generateRadioId();\n\n // Inputs\n readonly value: InputSignal<string> = input.required<string>();\n readonly size: InputSignal<RadioSize> = input<RadioSize>('md');\n readonly variant: InputSignal<RadioVariant> = input<RadioVariant>('primary');\n readonly disabled: ModelSignal<boolean> = model<boolean>(false);\n readonly id: InputSignal<string | undefined> = input<string>();\n readonly ariaLabel: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-labelledby' });\n readonly ariaDescribedby: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-describedby' });\n\n // Outputs\n readonly changed: OutputEmitterRef<RadioChange> = output<RadioChange>();\n\n // Computed state\n readonly inputId: Signal<string> = computed(() => this.id() ?? this.uniqueId);\n\n /** Resolve size from group or local input. */\n readonly resolvedSize: Signal<RadioSize> = computed(\n () => this.group?.size() ?? this.size()\n );\n\n /** Resolve variant from group or local input. */\n readonly resolvedVariant: Signal<RadioVariant> = computed(\n () => this.group?.variant() ?? this.variant()\n );\n\n /** Whether this radio is checked based on group value. */\n readonly isChecked: Signal<boolean> = computed(() => {\n if (!this.group) {\n return false;\n }\n return this.group.value() === this.value();\n });\n\n /** Whether this radio is disabled (from local or group). */\n readonly isDisabled: Signal<boolean> = computed(\n () => this.disabled() || (this.group?.disabled() ?? false)\n );\n\n /** Get name from group. */\n readonly groupName: Signal<string | undefined> = computed(() => this.group?.name());\n\n /** Tab index for roving tabindex pattern. */\n readonly tabIndex: Signal<number> = computed(() => {\n if (this.isDisabled()) {\n return -1;\n }\n if (!this.group) {\n return 0;\n }\n // Roving tabindex: only the selected or first focusable item gets tabindex 0\n const isSelected = this.isChecked();\n const isFocusTarget = this.group.focusedValue() === this.value();\n\n if (isSelected || isFocusTarget) {\n return 0;\n }\n return -1;\n });\n\n protected readonly circleClasses: Signal<string> = computed(() =>\n radioCircleVariants({ variant: this.resolvedVariant(), size: this.resolvedSize() })\n );\n\n protected readonly dotSizeClass: Signal<string> = computed(() => RADIO_DOT_SIZES[this.resolvedSize()]);\n protected readonly labelSizeClass: Signal<string> = computed(() => RADIO_LABEL_SIZES[this.resolvedSize()]);\n\n ngOnInit(): void {\n // Register with the group\n this.group?.register(this);\n\n // Unregister on destroy\n this.destroyRef.onDestroy(() => {\n this.group?.unregister(this);\n });\n }\n\n // Event handlers\n protected onInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.checked && this.group) {\n this.group.select(this.value());\n this.changed.emit({ value: this.value(), source: this });\n }\n }\n\n protected onBlur(): void {\n this.group?.onTouched?.();\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (!this.group) {\n return;\n }\n\n const { key } = event;\n const isVertical = this.group.orientation() === 'vertical';\n const isHorizontal = this.group.orientation() === 'horizontal';\n\n let handled = false;\n\n if (\n (isVertical && key === 'ArrowDown') ||\n (isHorizontal && key === 'ArrowRight')\n ) {\n this.group.focusNext(this.value());\n handled = true;\n } else if (\n (isVertical && key === 'ArrowUp') ||\n (isHorizontal && key === 'ArrowLeft')\n ) {\n this.group.focusPrevious(this.value());\n handled = true;\n } else if (key === ' ') {\n // Space selects the focused radio\n if (!this.isChecked()) {\n this.group.select(this.value());\n this.changed.emit({ value: this.value(), source: this });\n }\n handled = true;\n }\n\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n // Public API\n /** Focuses this radio's input element. */\n focus(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n /** Selects this radio programmatically. */\n select(): void {\n if (this.isDisabled() || !this.group) {\n return;\n }\n this.group.select(this.value());\n this.changed.emit({ value: this.value(), source: this });\n }\n}\n","// Public API for the radio component\n\n// Main components\nexport { ComRadio } from './radio.component';\nexport { ComRadioGroup, COM_RADIO_GROUP } from './radio-group.component';\n\n// Types\nexport type { RadioChange } from './radio.component';\nexport type { RadioGroupChange, ComRadioGroupContext, RadioItem } from './radio-group.component';\n\n// Variants (for advanced customization)\nexport {\n radioCircleVariants,\n RADIO_GROUP_ORIENTATIONS,\n RADIO_DOT_SIZES,\n RADIO_LABEL_SIZES,\n} from './radio.variants';\n\nexport type { RadioSize, RadioVariant, RadioOrientation } from './radio.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-com-components-radio.mjs","sources":["../../../projects/com/components/radio/radio.variants.ts","../../../projects/com/components/radio/radio.utils.ts","../../../projects/com/components/radio/radio-group.component.ts","../../../projects/com/components/radio/radio.component.ts","../../../projects/com/components/radio/index.ts","../../../projects/com/components/radio/ngx-com-components-radio.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\n\n/** Radio size variants. */\nexport type RadioSize = 'sm' | 'md' | 'lg';\n\n/** Radio color variants. */\nexport type RadioVariant = 'primary' | 'accent' | 'warn';\n\n/** Radio group orientation. */\nexport type RadioOrientation = 'vertical' | 'horizontal';\n\n/**\n * CVA variants for the visual radio circle.\n *\n * Uses `peer` selectors to style based on native input state:\n * - `peer-checked:` for checked state\n * - `peer-focus-visible:` for keyboard focus\n * - `peer-disabled:` for disabled state\n *\n * @tokens `--color-border`, `--color-primary`, `--color-primary-hover`,\n * `--color-accent`, `--color-accent-hover`,\n * `--color-warn`, `--color-warn-hover`,\n * `--color-disabled`, `--color-ring`\n */\nexport const radioCircleVariants: (props?: {\n variant?: RadioVariant;\n size?: RadioSize;\n}) => string = cva(\n [\n 'com-radio__circle',\n 'inline-flex shrink-0 items-center justify-center',\n 'rounded-pill border-2 border-border',\n 'transition-colors duration-normal',\n 'peer-focus-visible:outline-[1px] peer-focus-visible:outline-offset-2 peer-focus-visible:outline-ring',\n 'peer-disabled:cursor-not-allowed peer-disabled:border-disabled peer-disabled:bg-disabled',\n ],\n {\n variants: {\n variant: {\n primary: [\n 'peer-checked:border-primary peer-checked:bg-primary peer-checked:text-primary-foreground',\n 'group-hover:border-primary-hover',\n 'peer-checked:group-hover:bg-primary-hover peer-checked:group-hover:border-primary-hover',\n ],\n accent: [\n 'peer-checked:border-accent peer-checked:bg-accent peer-checked:text-accent-foreground',\n 'group-hover:border-accent-hover',\n 'peer-checked:group-hover:bg-accent-hover peer-checked:group-hover:border-accent-hover',\n ],\n warn: [\n 'peer-checked:border-warn peer-checked:bg-warn peer-checked:text-warn-foreground',\n 'group-hover:border-warn-hover',\n 'peer-checked:group-hover:bg-warn-hover peer-checked:group-hover:border-warn-hover',\n ],\n },\n size: {\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n);\n\n/** Size-based classes for the inner dot indicator. */\nexport const RADIO_DOT_SIZES: Record<RadioSize, string> = {\n sm: 'size-1.5',\n md: 'size-2',\n lg: 'size-2.5',\n};\n\n/** Size-based classes for the label content. */\nexport const RADIO_LABEL_SIZES: Record<RadioSize, string> = {\n sm: 'text-sm ms-2',\n md: 'text-base ms-2.5',\n lg: 'text-lg ms-3',\n};\n\n/** Base classes for the radio group container. */\nconst RADIO_GROUP_BASE = 'com-radio-group__container flex';\n\n/** Orientation-based classes for the radio group container. */\nexport const RADIO_GROUP_ORIENTATIONS: Record<RadioOrientation, string> = {\n vertical: `${RADIO_GROUP_BASE} flex-col gap-2`,\n horizontal: `${RADIO_GROUP_BASE} flex-row flex-wrap gap-4`,\n};\n","/** Auto-incrementing ID counter for unique radio IDs. */\nlet nextRadioId = 0;\n\n/** Generates a unique radio ID. */\nexport function generateRadioId(): string {\n return `com-radio-${nextRadioId++}`;\n}\n\n/** Auto-incrementing ID counter for unique radio group IDs. */\nlet nextGroupId = 0;\n\n/** Generates a unique radio group ID. */\nexport function generateRadioGroupId(): string {\n return `com-radio-group-${nextGroupId++}`;\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n InjectionToken,\n input,\n linkedSignal,\n model,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n InputSignal,\n InputSignalWithTransform,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport { ErrorStateMatcher } from 'ngx-com/components/form-field';\nimport { RADIO_GROUP_ORIENTATIONS } from './radio.variants';\nimport type { RadioOrientation, RadioSize, RadioVariant } from './radio.variants';\nimport { generateRadioGroupId } from './radio.utils';\n\n/** Event emitted when radio group value changes. */\nexport interface RadioGroupChange {\n value: string | null;\n}\n\n/** Interface for radio items that register with the group. */\nexport interface RadioItem {\n value: () => string;\n isDisabled: () => boolean;\n focus: () => void;\n}\n\n/** Context provided to child radio components via DI. */\nexport interface ComRadioGroupContext {\n name: Signal<string>;\n value: Signal<string | null>;\n disabled: Signal<boolean>;\n size: Signal<RadioSize>;\n variant: Signal<RadioVariant>;\n orientation: Signal<RadioOrientation>;\n focusedValue: Signal<string | null>;\n select: (value: string) => void;\n focusNext: (currentValue: string) => void;\n focusPrevious: (currentValue: string) => void;\n register: (radio: RadioItem) => void;\n unregister: (radio: RadioItem) => void;\n onTouched?: () => void;\n}\n\n/** Injection token for radio group context. */\nexport const COM_RADIO_GROUP: InjectionToken<ComRadioGroupContext> = new InjectionToken<ComRadioGroupContext>('COM_RADIO_GROUP');\n\n/**\n * Radio group component that manages a set of radio buttons.\n *\n * Provides mutual exclusion, shared name, and roving tabindex keyboard navigation.\n * Implements `ControlValueAccessor` for Reactive Forms integration.\n *\n * @tokens `--color-border`, `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-accent`, `--color-accent-foreground`, `--color-accent-hover`,\n * `--color-warn`, `--color-warn-foreground`, `--color-warn-hover`,\n * `--color-disabled`, `--color-disabled-foreground`, `--color-ring`\n *\n * @example Basic usage\n * ```html\n * <com-radio-group [(value)]=\"selectedFruit\" aria-label=\"Select a fruit\">\n * <com-radio value=\"apple\">Apple</com-radio>\n * <com-radio value=\"banana\">Banana</com-radio>\n * <com-radio value=\"cherry\">Cherry</com-radio>\n * </com-radio-group>\n * ```\n *\n * @example With reactive forms\n * ```html\n * <com-radio-group formControlName=\"size\" aria-label=\"Select size\">\n * <com-radio value=\"sm\">Small</com-radio>\n * <com-radio value=\"md\">Medium</com-radio>\n * <com-radio value=\"lg\">Large</com-radio>\n * </com-radio-group>\n * ```\n *\n * @example Horizontal orientation\n * ```html\n * <com-radio-group [(value)]=\"color\" orientation=\"horizontal\">\n * <com-radio value=\"red\">Red</com-radio>\n * <com-radio value=\"green\">Green</com-radio>\n * <com-radio value=\"blue\">Blue</com-radio>\n * </com-radio-group>\n * ```\n *\n * @example With variants\n * ```html\n * <com-radio-group [(value)]=\"priority\" variant=\"warn\" size=\"lg\">\n * <com-radio value=\"low\">Low</com-radio>\n * <com-radio value=\"medium\">Medium</com-radio>\n * <com-radio value=\"high\">High</com-radio>\n * </com-radio-group>\n * ```\n */\n@Component({\n selector: 'com-radio-group',\n exportAs: 'comRadioGroup',\n template: `\n <div\n role=\"radiogroup\"\n [class]=\"groupClasses()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-describedby]=\"computedAriaDescribedby()\"\n [attr.aria-required]=\"required() || null\"\n [attr.aria-invalid]=\"errorState() || null\"\n >\n <ng-content />\n </div>\n @if (errorState() && errorMessage()) {\n <div\n [id]=\"errorId\"\n class=\"com-radio-group__error mt-1.5 text-sm text-warn\"\n role=\"alert\"\n >\n {{ errorMessage() }}\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: COM_RADIO_GROUP,\n useFactory: () => {\n const group = inject(ComRadioGroup);\n return group.createContext();\n },\n },\n ],\n host: {\n class: 'com-radio-group block',\n '[class.com-radio-group--disabled]': 'disabled()',\n '[class.com-radio-group--error]': 'errorState()',\n },\n})\nexport class ComRadioGroup implements ControlValueAccessor {\n /** Optional NgControl for reactive forms integration. */\n readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n /** Error state matcher for determining when to show validation errors. */\n private readonly defaultErrorStateMatcher: ErrorStateMatcher = inject(ErrorStateMatcher);\n private readonly parentForm: NgForm | null = inject(NgForm, { optional: true });\n private readonly parentFormGroup: FormGroupDirective | null = inject(FormGroupDirective, { optional: true });\n\n /** Unique ID for this radio group instance. */\n private readonly uniqueId: string = generateRadioGroupId();\n\n /** ID for the error message element. */\n readonly errorId: string = `${this.uniqueId}-error`;\n\n /** Registered radio items. */\n private readonly registeredRadios: WritableSignal<RadioItem[]> = signal([]);\n\n // Inputs\n readonly name: InputSignal<string> = input<string>(this.uniqueId);\n readonly value: ModelSignal<string | null> = model<string | null>(null);\n readonly disabled: ModelSignal<boolean> = model<boolean>(false);\n readonly required: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n readonly orientation: InputSignal<RadioOrientation> = input<RadioOrientation>('vertical');\n readonly size: InputSignal<RadioSize> = input<RadioSize>('md');\n readonly variant: InputSignal<RadioVariant> = input<RadioVariant>('primary');\n readonly errorMessage: InputSignal<string> = input<string>('');\n readonly errorStateMatcher: InputSignal<ErrorStateMatcher | undefined> = input<ErrorStateMatcher>();\n\n /** Tracks touched state — writable by both CVA callback and Signal Forms [formField]. */\n readonly touched: ModelSignal<boolean> = model<boolean>(false);\n\n // Signal Forms inputs — set automatically by [formField] via setInputOnDirectives\n readonly invalid: InputSignal<boolean> = input<boolean>(false);\n readonly sfErrors: InputSignal<readonly unknown[]> = input<readonly unknown[]>([], { alias: 'errors' });\n\n readonly ariaLabel: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-labelledby' });\n readonly ariaDescribedby: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-describedby' });\n\n // Outputs\n /** Emits when the selection changes, with full event details. */\n readonly selectionChange: OutputEmitterRef<RadioGroupChange> = output<RadioGroupChange>();\n\n /**\n * Tracks the currently focused radio value for roving tabindex.\n * Resets to the current selection (or first focusable) when value or radios change.\n */\n private readonly focusedValueSignal: WritableSignal<string | null> = linkedSignal({\n source: () => ({ value: this.value(), radios: this.registeredRadios() }),\n computation: ({ value, radios }) => {\n if (value && radios.some((r) => r.value() === value && !r.isDisabled())) {\n return value;\n }\n const firstFocusable = radios.find((r) => !r.isDisabled());\n return firstFocusable?.value() ?? null;\n },\n });\n\n // Computed\n /**\n * Computed error state derived from form validation.\n * Shows errors when control is invalid and touched/submitted.\n */\n readonly errorState: Signal<boolean> = computed(() => {\n if (!this.ngControl) {\n // Signal Forms: gate on invalid AND touched (mirrors ErrorStateMatcher default)\n return this.invalid() && this.touched();\n }\n // Reactive Forms: use ErrorStateMatcher (existing logic)\n this.touched();\n const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;\n const form = this.parentFormGroup ?? this.parentForm;\n return matcher.isErrorState(this.ngControl.control ?? null, form);\n });\n\n readonly computedAriaDescribedby: Signal<string | null> = computed(() => {\n const userDescribedby = this.ariaDescribedby();\n if (this.errorState() && this.errorMessage()) {\n return userDescribedby ? `${userDescribedby} ${this.errorId}` : this.errorId;\n }\n return userDescribedby;\n });\n\n protected readonly groupClasses: Signal<string> = computed(() =>\n RADIO_GROUP_ORIENTATIONS[this.orientation()]\n );\n\n // CVA callbacks\n private onChange: (value: string | null) => void = () => {};\n private onTouchedCallback: () => void = () => {};\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /** Creates the context object for child radios. */\n createContext(): ComRadioGroupContext {\n return {\n name: this.name,\n value: this.value,\n disabled: this.disabled,\n size: this.size,\n variant: this.variant,\n orientation: this.orientation,\n focusedValue: this.focusedValueSignal,\n select: this.select.bind(this),\n focusNext: this.focusNext.bind(this),\n focusPrevious: this.focusPrevious.bind(this),\n register: this.register.bind(this),\n unregister: this.unregister.bind(this),\n onTouched: () => this.onTouchedCallback(),\n };\n }\n\n /** Register a radio item with the group. */\n private register(radio: RadioItem): void {\n this.registeredRadios.update((radios) => [...radios, radio]);\n }\n\n /** Unregister a radio item from the group. */\n private unregister(radio: RadioItem): void {\n this.registeredRadios.update((radios) => radios.filter((r) => r !== radio));\n }\n\n // ControlValueAccessor implementation\n writeValue(value: string | null): void {\n this.value.set(value);\n }\n\n registerOnChange(fn: (value: string | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = () => {\n this.touched.set(true);\n fn();\n };\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n // Public API\n /** Selects a radio by value. */\n select(newValue: string): void {\n if (this.disabled()) {\n return;\n }\n this.value.set(newValue);\n this.focusedValueSignal.set(newValue);\n this.onChange(newValue);\n this.selectionChange.emit({ value: newValue });\n }\n\n /** Focuses the next non-disabled radio (with cyclic wrap). */\n focusNext(currentValue: string): void {\n const allRadios = this.registeredRadios();\n const focusableRadios = allRadios.filter((r) => !r.isDisabled());\n\n if (focusableRadios.length === 0) {\n return;\n }\n\n const currentIndex = focusableRadios.findIndex((r) => r.value() === currentValue);\n const nextIndex = (currentIndex + 1) % focusableRadios.length;\n const nextRadio = focusableRadios[nextIndex];\n\n if (nextRadio) {\n this.focusedValueSignal.set(nextRadio.value());\n this.select(nextRadio.value());\n nextRadio.focus();\n }\n }\n\n /** Focuses the previous non-disabled radio (with cyclic wrap). */\n focusPrevious(currentValue: string): void {\n const allRadios = this.registeredRadios();\n const focusableRadios = allRadios.filter((r) => !r.isDisabled());\n\n if (focusableRadios.length === 0) {\n return;\n }\n\n const currentIndex = focusableRadios.findIndex((r) => r.value() === currentValue);\n const prevIndex = (currentIndex - 1 + focusableRadios.length) % focusableRadios.length;\n const prevRadio = focusableRadios[prevIndex];\n\n if (prevRadio) {\n this.focusedValueSignal.set(prevRadio.value());\n this.select(prevRadio.value());\n prevRadio.focus();\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n ElementRef,\n inject,\n input,\n model,\n output,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n InputSignal,\n ModelSignal,\n OnInit,\n OutputEmitterRef,\n Signal,\n} from '@angular/core';\nimport {\n radioCircleVariants,\n RADIO_DOT_SIZES,\n RADIO_LABEL_SIZES,\n} from './radio.variants';\nimport type { RadioSize, RadioVariant } from './radio.variants';\nimport { generateRadioId } from './radio.utils';\nimport { COM_RADIO_GROUP, type ComRadioGroupContext, type RadioItem } from './radio-group.component';\n\n/** Event emitted when a radio is selected. */\nexport interface RadioChange {\n value: string;\n source: ComRadio;\n}\n\n/**\n * Production-grade radio component with full accessibility support.\n *\n * Uses a native `<input type=\"radio\">` for built-in keyboard handling,\n * `:checked` pseudo-class, and screen reader support.\n *\n * Must be used within a `ComRadioGroup` which manages the selected value\n * and provides the shared `name` attribute.\n *\n * @tokens `--color-border`, `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-accent`, `--color-accent-foreground`, `--color-accent-hover`,\n * `--color-warn`, `--color-warn-foreground`, `--color-warn-hover`,\n * `--color-disabled`, `--color-disabled-foreground`, `--color-ring`\n *\n * @example Basic usage within a group\n * ```html\n * <com-radio-group [(value)]=\"selectedOption\">\n * <com-radio value=\"option1\">Option 1</com-radio>\n * <com-radio value=\"option2\">Option 2</com-radio>\n * <com-radio value=\"option3\">Option 3</com-radio>\n * </com-radio-group>\n * ```\n *\n * @example Disabled option\n * ```html\n * <com-radio-group [(value)]=\"selected\">\n * <com-radio value=\"enabled\">Enabled option</com-radio>\n * <com-radio value=\"disabled\" [disabled]=\"true\">Disabled option</com-radio>\n * </com-radio-group>\n * ```\n */\n@Component({\n selector: 'com-radio',\n exportAs: 'comRadio',\n template: `\n <label\n class=\"group relative inline-flex items-center\"\n [class.cursor-pointer]=\"!isDisabled()\"\n [class.cursor-not-allowed]=\"isDisabled()\"\n >\n <span><input\n #inputElement\n type=\"radio\"\n class=\"peer sr-only\"\n [id]=\"inputId()\"\n [checked]=\"isChecked()\"\n [disabled]=\"isDisabled()\"\n [attr.name]=\"groupName()\"\n [attr.value]=\"value()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-describedby]=\"ariaDescribedby()\"\n [attr.tabindex]=\"tabIndex()\"\n (change)=\"onInputChange($event)\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeyDown($event)\"\n /></span>\n <div [class]=\"circleClasses()\">\n <div\n class=\"com-radio__dot rounded-pill bg-current transition-transform duration-normal peer-disabled:bg-disabled-foreground\"\n [class]=\"dotSizeClass()\"\n [class.scale-100]=\"isChecked()\"\n [class.scale-0]=\"!isChecked()\"\n ></div>\n </div>\n <span\n class=\"com-radio__label select-none peer-disabled:cursor-not-allowed peer-disabled:text-disabled-foreground\"\n [class]=\"labelSizeClass()\"\n >\n <ng-content />\n </span>\n </label>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'com-radio inline-block align-middle',\n '[class.com-radio--disabled]': 'isDisabled()',\n '[class.com-radio--checked]': 'isChecked()',\n },\n})\nexport class ComRadio implements OnInit, RadioItem {\n /** Optional parent radio group context. */\n private readonly group: ComRadioGroupContext | null = inject(COM_RADIO_GROUP, {\n optional: true,\n });\n\n /** DestroyRef for cleanup. */\n private readonly destroyRef: DestroyRef = inject(DestroyRef);\n\n /** Reference to the native input element. */\n readonly inputRef: Signal<ElementRef<HTMLInputElement> | undefined> =\n viewChild<ElementRef<HTMLInputElement>>('inputElement');\n\n /** Unique ID for this radio instance. */\n private readonly uniqueId: string = generateRadioId();\n\n // Inputs\n readonly value: InputSignal<string> = input.required<string>();\n readonly size: InputSignal<RadioSize> = input<RadioSize>('md');\n readonly variant: InputSignal<RadioVariant> = input<RadioVariant>('primary');\n readonly disabled: ModelSignal<boolean> = model<boolean>(false);\n readonly id: InputSignal<string | undefined> = input<string>();\n readonly ariaLabel: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-labelledby' });\n readonly ariaDescribedby: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-describedby' });\n\n // Outputs\n readonly changed: OutputEmitterRef<RadioChange> = output<RadioChange>();\n\n // Computed state\n readonly inputId: Signal<string> = computed(() => this.id() ?? this.uniqueId);\n\n /** Resolve size from group or local input. */\n readonly resolvedSize: Signal<RadioSize> = computed(\n () => this.group?.size() ?? this.size()\n );\n\n /** Resolve variant from group or local input. */\n readonly resolvedVariant: Signal<RadioVariant> = computed(\n () => this.group?.variant() ?? this.variant()\n );\n\n /** Whether this radio is checked based on group value. */\n readonly isChecked: Signal<boolean> = computed(() => {\n if (!this.group) {\n return false;\n }\n return this.group.value() === this.value();\n });\n\n /** Whether this radio is disabled (from local or group). */\n readonly isDisabled: Signal<boolean> = computed(\n () => this.disabled() || (this.group?.disabled() ?? false)\n );\n\n /** Get name from group. */\n readonly groupName: Signal<string | undefined> = computed(() => this.group?.name());\n\n /** Tab index for roving tabindex pattern. */\n readonly tabIndex: Signal<number> = computed(() => {\n if (this.isDisabled()) {\n return -1;\n }\n if (!this.group) {\n return 0;\n }\n // Roving tabindex: only the selected or first focusable item gets tabindex 0\n const isSelected = this.isChecked();\n const isFocusTarget = this.group.focusedValue() === this.value();\n\n if (isSelected || isFocusTarget) {\n return 0;\n }\n return -1;\n });\n\n protected readonly circleClasses: Signal<string> = computed(() =>\n radioCircleVariants({ variant: this.resolvedVariant(), size: this.resolvedSize() })\n );\n\n protected readonly dotSizeClass: Signal<string> = computed(() => RADIO_DOT_SIZES[this.resolvedSize()]);\n protected readonly labelSizeClass: Signal<string> = computed(() => RADIO_LABEL_SIZES[this.resolvedSize()]);\n\n ngOnInit(): void {\n // Register with the group\n this.group?.register(this);\n\n // Unregister on destroy\n this.destroyRef.onDestroy(() => {\n this.group?.unregister(this);\n });\n }\n\n // Event handlers\n protected onInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.checked && this.group) {\n this.group.select(this.value());\n this.changed.emit({ value: this.value(), source: this });\n }\n }\n\n protected onBlur(): void {\n this.group?.onTouched?.();\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (!this.group) {\n return;\n }\n\n const { key } = event;\n const isVertical = this.group.orientation() === 'vertical';\n const isHorizontal = this.group.orientation() === 'horizontal';\n\n let handled = false;\n\n if (\n (isVertical && key === 'ArrowDown') ||\n (isHorizontal && key === 'ArrowRight')\n ) {\n this.group.focusNext(this.value());\n handled = true;\n } else if (\n (isVertical && key === 'ArrowUp') ||\n (isHorizontal && key === 'ArrowLeft')\n ) {\n this.group.focusPrevious(this.value());\n handled = true;\n } else if (key === ' ') {\n // Space selects the focused radio\n if (!this.isChecked()) {\n this.group.select(this.value());\n this.changed.emit({ value: this.value(), source: this });\n }\n handled = true;\n }\n\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n // Public API\n /** Focuses this radio's input element. */\n focus(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n /** Selects this radio programmatically. */\n select(): void {\n if (this.isDisabled() || !this.group) {\n return;\n }\n this.group.select(this.value());\n this.changed.emit({ value: this.value(), source: this });\n }\n}\n","// Public API for the radio component\n\n// Main components\nexport { ComRadio } from './radio.component';\nexport { ComRadioGroup, COM_RADIO_GROUP } from './radio-group.component';\n\n// Types\nexport type { RadioChange } from './radio.component';\nexport type { RadioGroupChange, ComRadioGroupContext, RadioItem } from './radio-group.component';\n\n// Variants (for advanced customization)\nexport {\n radioCircleVariants,\n RADIO_GROUP_ORIENTATIONS,\n RADIO_DOT_SIZES,\n RADIO_LABEL_SIZES,\n} from './radio.variants';\n\nexport type { RadioSize, RadioVariant, RadioOrientation } from './radio.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|