ngx-com 0.0.19 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/fesm2022/ngx-com-components-alert.mjs +346 -0
  2. package/fesm2022/ngx-com-components-alert.mjs.map +1 -0
  3. package/fesm2022/ngx-com-components-button.mjs +1 -1
  4. package/fesm2022/ngx-com-components-button.mjs.map +1 -1
  5. package/fesm2022/ngx-com-components-calendar.mjs +29 -36
  6. package/fesm2022/ngx-com-components-calendar.mjs.map +1 -1
  7. package/fesm2022/ngx-com-components-card.mjs +1 -1
  8. package/fesm2022/ngx-com-components-card.mjs.map +1 -1
  9. package/fesm2022/ngx-com-components-carousel.mjs +708 -0
  10. package/fesm2022/ngx-com-components-carousel.mjs.map +1 -0
  11. package/fesm2022/ngx-com-components-checkbox.mjs +17 -8
  12. package/fesm2022/ngx-com-components-checkbox.mjs.map +1 -1
  13. package/fesm2022/ngx-com-components-code-block.mjs +158 -0
  14. package/fesm2022/ngx-com-components-code-block.mjs.map +1 -0
  15. package/fesm2022/ngx-com-components-collapsible.mjs +1 -1
  16. package/fesm2022/ngx-com-components-collapsible.mjs.map +1 -1
  17. package/fesm2022/ngx-com-components-confirm.mjs +3 -3
  18. package/fesm2022/ngx-com-components-confirm.mjs.map +1 -1
  19. package/fesm2022/ngx-com-components-dialog.mjs +703 -0
  20. package/fesm2022/ngx-com-components-dialog.mjs.map +1 -0
  21. package/fesm2022/ngx-com-components-dropdown.mjs +36 -31
  22. package/fesm2022/ngx-com-components-dropdown.mjs.map +1 -1
  23. package/fesm2022/ngx-com-components-form-field.mjs +48 -8
  24. package/fesm2022/ngx-com-components-form-field.mjs.map +1 -1
  25. package/fesm2022/ngx-com-components-item.mjs +1 -1
  26. package/fesm2022/ngx-com-components-item.mjs.map +1 -1
  27. package/fesm2022/ngx-com-components-paginator.mjs +3 -3
  28. package/fesm2022/ngx-com-components-paginator.mjs.map +1 -1
  29. package/fesm2022/ngx-com-components-radio.mjs +16 -9
  30. package/fesm2022/ngx-com-components-radio.mjs.map +1 -1
  31. package/fesm2022/ngx-com-components-segmented-control.mjs +1 -1
  32. package/fesm2022/ngx-com-components-segmented-control.mjs.map +1 -1
  33. package/fesm2022/ngx-com-components-separator.mjs +102 -0
  34. package/fesm2022/ngx-com-components-separator.mjs.map +1 -0
  35. package/fesm2022/ngx-com-components-switch.mjs +258 -0
  36. package/fesm2022/ngx-com-components-switch.mjs.map +1 -0
  37. package/fesm2022/ngx-com-components-table.mjs +631 -0
  38. package/fesm2022/ngx-com-components-table.mjs.map +1 -0
  39. package/fesm2022/ngx-com-components-tabs.mjs +2 -2
  40. package/fesm2022/ngx-com-components-tabs.mjs.map +1 -1
  41. package/fesm2022/ngx-com-components-toast.mjs +783 -0
  42. package/fesm2022/ngx-com-components-toast.mjs.map +1 -0
  43. package/package.json +33 -1
  44. package/types/ngx-com-components-alert.d.ts +166 -0
  45. package/types/ngx-com-components-carousel.d.ts +281 -0
  46. package/types/ngx-com-components-checkbox.d.ts +7 -2
  47. package/types/ngx-com-components-code-block.d.ts +66 -0
  48. package/types/ngx-com-components-confirm.d.ts +2 -2
  49. package/types/ngx-com-components-dialog.d.ts +264 -0
  50. package/types/ngx-com-components-dropdown.d.ts +8 -5
  51. package/types/ngx-com-components-form-field.d.ts +19 -3
  52. package/types/ngx-com-components-radio.d.ts +5 -3
  53. package/types/ngx-com-components-separator.d.ts +75 -0
  54. package/types/ngx-com-components-switch.d.ts +110 -0
  55. package/types/ngx-com-components-table.d.ts +377 -0
  56. package/types/ngx-com-components-toast.d.ts +217 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-com-components-item.mjs","sources":["../../../projects/com/components/item/item.directives.ts","../../../projects/com/components/item/item.variants.ts","../../../projects/com/components/item/item.component.ts","../../../projects/com/components/item/index.ts","../../../projects/com/components/item/ngx-com-components-item.ts"],"sourcesContent":["import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Marker directive for projecting custom leading content into a com-item.\n *\n * When this directive is present, it completely replaces the default\n * leading visual (which would otherwise be a com-avatar with an icon).\n * Use this for custom avatars (with images or initials), bare icons,\n * custom images, or any other leading visual.\n *\n * @example Custom avatar with image\n * ```html\n * <com-item title=\"Jane Doe\" description=\"jane@example.com\">\n * <ng-template comItemLeading>\n * <com-avatar src=\"/photos/jane.jpg\" name=\"Jane Doe\" size=\"sm\" />\n * </ng-template>\n * </com-item>\n * ```\n *\n * @example Avatar stack\n * ```html\n * <com-item title=\"3 collaborators\">\n * <ng-template comItemLeading>\n * <div class=\"flex -space-x-2\">\n * <com-avatar name=\"A\" size=\"xs\" variant=\"outline\" />\n * <com-avatar name=\"B\" size=\"xs\" variant=\"outline\" />\n * </div>\n * </ng-template>\n * </com-item>\n * ```\n */\n@Directive({\n selector: 'ng-template[comItemLeading]',\n})\nexport class ComItemLeading {\n readonly templateRef: TemplateRef<void> = inject(TemplateRef);\n}\n\n/**\n * Marker directive for projecting custom title content into a com-item.\n *\n * When this directive is present, it replaces the `title` input with\n * rich projected content. Use this when the title needs formatting,\n * links, or other custom markup.\n *\n * @example Title with link\n * ```html\n * <com-item icon=\"link\">\n * <ng-template comItemTitle>\n * <a href=\"/docs/api\" class=\"hover:underline\">API Documentation</a>\n * </ng-template>\n * </com-item>\n * ```\n */\n@Directive({\n selector: 'ng-template[comItemTitle]',\n})\nexport class ComItemTitle {\n readonly templateRef: TemplateRef<void> = inject(TemplateRef);\n}\n\n/**\n * Marker directive for projecting inline suffix content after the title.\n *\n * Content appears on the same line as the title, immediately after it.\n * Use this for badges, tags, status indicators, or other inline metadata.\n *\n * @example Badge suffix\n * ```html\n * <com-item title=\"My BP datasource\" description=\"View and manage configuration\">\n * <ng-template comItemSuffix>\n * <span class=\"inline-flex items-center gap-1 rounded-pill border border-primary/30 bg-primary-subtle px-2 py-0.5 text-xs font-medium text-primary\">\n * Bluetooth\n * </span>\n * </ng-template>\n * </com-item>\n * ```\n */\n@Directive({\n selector: 'ng-template[comItemSuffix]',\n})\nexport class ComItemSuffix {\n readonly templateRef: TemplateRef<void> = inject(TemplateRef);\n}\n\n/**\n * Marker directive for projecting custom description content into a com-item.\n *\n * When this directive is present, it replaces the `description` input\n * with rich projected content. Use this when the description needs\n * formatting, code snippets, or other custom markup.\n *\n * @example Description with code\n * ```html\n * <com-item title=\"API Key\" icon=\"key\">\n * <ng-template comItemDescription>\n * <code class=\"text-xs font-mono text-muted-foreground\">sk-abc...xyz</code>\n * <span class=\"text-xs text-muted-foreground\"> · Created 3 days ago</span>\n * </ng-template>\n * </com-item>\n * ```\n */\n@Directive({\n selector: 'ng-template[comItemDescription]',\n})\nexport class ComItemDescription {\n readonly templateRef: TemplateRef<void> = inject(TemplateRef);\n}\n\n/**\n * Marker directive for projecting trailing content into a com-item.\n *\n * Content appears at the far right edge of the item. Use this for\n * action buttons, navigation chevrons, toggles, timestamps, or\n * any other trailing content.\n *\n * @example Trailing chevron\n * ```html\n * <com-item title=\"Settings\" icon=\"settings\" [interactive]=\"true\">\n * <ng-template comItemTrailing>\n * <com-icon name=\"chevron-right\" size=\"sm\" color=\"muted\" />\n * </ng-template>\n * </com-item>\n * ```\n *\n * @example Trailing action button\n * ```html\n * <com-item title=\"API Key\" icon=\"key\">\n * <ng-template comItemTrailing>\n * <button class=\"text-sm text-primary hover:text-primary-hover\">Revoke</button>\n * </ng-template>\n * </com-item>\n * ```\n */\n@Directive({\n selector: 'ng-template[comItemTrailing]',\n})\nexport class ComItemTrailing {\n readonly templateRef: TemplateRef<void> = inject(TemplateRef);\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { AvatarSize } from 'ngx-com/components/avatar';\nimport type { IconSize } from 'ngx-com/components/icon';\n\n/** Item size variants. */\nexport type ItemSize = 'sm' | 'md' | 'lg';\n\n/** Item density variants. */\nexport type ItemDensity = 'compact' | 'default' | 'comfortable';\n\n/**\n * CVA variants for the item container (host element).\n *\n * @tokens `--color-primary-subtle`, `--color-muted`, `--color-muted-hover`, `--color-ring`, `--color-disabled-foreground`\n */\nexport const itemVariants: (props?: {\n size?: ItemSize;\n density?: ItemDensity;\n interactive?: boolean;\n active?: boolean;\n disabled?: boolean;\n}) => string = cva(['com-item', 'flex w-full items-center'], {\n variants: {\n size: {\n sm: 'gap-2.5',\n md: 'gap-3',\n lg: 'gap-3.5',\n },\n density: {\n compact: 'py-1.5',\n default: 'py-2.5',\n comfortable: 'py-4',\n },\n interactive: {\n true: [\n 'cursor-pointer',\n 'rounded-lg',\n 'px-3',\n 'hover:bg-muted-hover',\n 'active:bg-muted',\n 'transition-colors duration-150',\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring',\n ],\n false: 'cursor-default',\n },\n active: {\n true: 'bg-primary-subtle',\n false: '',\n },\n disabled: {\n true: 'text-disabled-foreground pointer-events-none',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n density: 'default',\n interactive: false,\n active: false,\n disabled: false,\n },\n});\n\n/** Title classes keyed by item size. */\nexport const ITEM_TITLE_CLASSES: Record<ItemSize, string> = {\n sm: 'text-sm',\n md: 'text-sm font-medium',\n lg: 'text-xl font-semibold tracking-tight',\n};\n\n/** Description classes keyed by item size. */\nexport const ITEM_DESCRIPTION_CLASSES: Record<ItemSize, string> = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-sm',\n};\n\n/** Avatar size mapping keyed by item size. */\nexport const ITEM_AVATAR_SIZES: Record<ItemSize, AvatarSize> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n};\n\n/** Icon size mapping keyed by item size (for icon inside avatar). */\nexport const ITEM_ICON_SIZES: Record<ItemSize, IconSize> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n};\n\nexport type ItemVariants = VariantProps<typeof itemVariants>;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ComAvatar, ComAvatarCustom } from 'ngx-com/components/avatar';\nimport type { AvatarColor, AvatarSize } from 'ngx-com/components/avatar';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport type { IconSize } from 'ngx-com/components/icon';\nimport {\n ComItemLeading,\n ComItemTitle,\n ComItemSuffix,\n ComItemDescription,\n ComItemTrailing,\n} from './item.directives';\nimport {\n itemVariants,\n ITEM_TITLE_CLASSES,\n ITEM_DESCRIPTION_CLASSES,\n ITEM_AVATAR_SIZES,\n ITEM_ICON_SIZES,\n} from './item.variants';\nimport type { ItemSize, ItemDensity } from './item.variants';\n\n/**\n * Item component — a universal compound display element that shows a leading\n * visual alongside a title, an optional description, and optional trailing content.\n *\n * Works in all these contexts:\n * - List rows (device lists, settings menus, search results)\n * - Page/section headers\n * - Dropdown menu items\n * - Table cells\n * - Card headers\n * - Nav items\n *\n * **Anatomy:**\n * ```\n * ┌─────────────────────────────────────────────────────────┐\n * │ ┌───────┐ │\n * │ │com- │ Title text · [inline suffix] [TRAILING] │\n * │ │avatar │ Description text (secondary) │\n * │ └───────┘ │\n * └─────────────────────────────────────────────────────────┘\n * ```\n *\n * Five content zones:\n * 1. **Leading visual** — optional. Default: `com-avatar` with `shape=\"rounded\"` + `variant=\"soft\"`.\n * Override via `comItemLeading` directive.\n * 2. **Title** — primary text. Required (via input or projection).\n * 3. **Inline suffix** — same line as title, after it. For badges, tags, status dots.\n * 4. **Description** — secondary text below title. Optional.\n * 5. **Trailing** — far-right aligned. Actions, chevrons, timestamps.\n *\n * @tokens `--color-primary-subtle`, `--color-muted`, `--color-muted-foreground`,\n * `--color-foreground`, `--color-ring`\n *\n * @example Simplest — text only, no icon\n * ```html\n * <com-item title=\"Select all\" />\n * ```\n *\n * @example Icon + title + description (most common)\n * ```html\n * <com-item\n * title=\"Dexcom G7\"\n * description=\"109123c2d2194bffe519b03ceb51730d5064f9de46c54c4e...\"\n * icon=\"smartphone\"\n * />\n * ```\n *\n * @example Icon with different color\n * ```html\n * <com-item title=\"Warning detected\" icon=\"alert-triangle\" iconColor=\"warn\" />\n * <com-item title=\"Active\" icon=\"check-circle\" iconColor=\"accent\" />\n * ```\n *\n * @example Page header with badge suffix (size lg)\n * ```html\n * <com-item\n * title=\"My BP datasource\"\n * description=\"View and manage datasource configuration\"\n * size=\"lg\"\n * >\n * <ng-template comItemSuffix>\n * <span class=\"inline-flex items-center gap-1 rounded-pill border border-primary/30 bg-primary-subtle px-2 py-0.5 text-xs font-medium text-primary\">\n * <com-icon name=\"bluetooth\" size=\"xs\" /> Bluetooth\n * </span>\n * </ng-template>\n * </com-item>\n * ```\n *\n * @example Custom leading — user avatar with image\n * ```html\n * <com-item title=\"Jane Doe\" description=\"jane@example.com\">\n * <ng-template comItemLeading>\n * <com-avatar src=\"/photos/jane.jpg\" name=\"Jane Doe\" size=\"sm\" />\n * </ng-template>\n * </com-item>\n * ```\n *\n * @example Interactive list item with trailing chevron\n * ```html\n * <com-item\n * title=\"Bluetooth Settings\"\n * description=\"Manage paired devices\"\n * icon=\"bluetooth\"\n * [interactive]=\"true\"\n * (click)=\"openSettings()\"\n * >\n * <ng-template comItemTrailing>\n * <com-icon name=\"chevron-right\" size=\"sm\" color=\"muted\" />\n * </ng-template>\n * </com-item>\n * ```\n *\n * @example Compact density — dropdown menu\n * ```html\n * @for (option of options; track option.value) {\n * <com-item\n * [title]=\"option.label\"\n * [icon]=\"option.icon\"\n * density=\"compact\"\n * [interactive]=\"true\"\n * [active]=\"option.value === selected()\"\n * (click)=\"select(option)\"\n * />\n * }\n * ```\n *\n * @example Rich description via projection\n * ```html\n * <com-item title=\"API Key\" icon=\"key\">\n * <ng-template comItemDescription>\n * <code class=\"text-xs font-mono text-muted-foreground\">sk-abc...xyz</code>\n * <span class=\"text-xs text-muted-foreground\"> · Created 3 days ago</span>\n * </ng-template>\n * <ng-template comItemTrailing>\n * <button class=\"text-sm text-primary hover:text-primary-hover\">Revoke</button>\n * </ng-template>\n * </com-item>\n * ```\n *\n * @example Disabled\n * ```html\n * <com-item\n * title=\"Enterprise Features\"\n * description=\"Available on Enterprise plan\"\n * icon=\"crown\"\n * [disabled]=\"true\"\n * />\n * ```\n */\n@Component({\n selector: 'com-item',\n exportAs: 'comItem',\n template: `\n <!-- Leading visual zone -->\n @if (leadingDirective(); as leading) {\n <ng-container [ngTemplateOutlet]=\"leading.templateRef\" />\n } @else if (icon()) {\n <com-avatar\n [size]=\"avatarSize()\"\n shape=\"rounded\"\n variant=\"soft\"\n [color]=\"resolvedIconColor()\"\n >\n <ng-template comAvatarCustom>\n <com-icon [name]=\"icon()\" [size]=\"iconSize()\" />\n </ng-template>\n </com-avatar>\n }\n\n <!-- Text zone -->\n <div class=\"flex min-w-0 flex-1 flex-col justify-center\">\n <!-- Title row -->\n <div class=\"flex items-center gap-1.5\">\n @if (titleDirective(); as titleTpl) {\n <ng-container [ngTemplateOutlet]=\"titleTpl.templateRef\" />\n } @else if (title()) {\n <span\n class=\"text-foreground\"\n [class]=\"titleClasses()\"\n [class.truncate]=\"truncate()\"\n >\n {{ title() }}\n </span>\n }\n @if (suffixDirective(); as suffix) {\n <ng-container [ngTemplateOutlet]=\"suffix.templateRef\" />\n }\n </div>\n\n <!-- Description row -->\n @if (descriptionDirective(); as descTpl) {\n <ng-container [ngTemplateOutlet]=\"descTpl.templateRef\" />\n } @else if (description()) {\n <span\n class=\"text-muted-foreground\"\n [class]=\"descriptionClasses()\"\n [class.truncate]=\"truncate()\"\n >\n {{ description() }}\n </span>\n }\n </div>\n\n <!-- Trailing zone -->\n @if (trailingDirective(); as trailing) {\n <div class=\"flex shrink-0 items-center\">\n <ng-container [ngTemplateOutlet]=\"trailing.templateRef\" />\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n NgTemplateOutlet,\n ComAvatar,\n ComAvatarCustom,\n ComIcon,\n ],\n host: {\n '[class]': 'hostClasses()',\n '[attr.role]': 'interactive() ? \"button\" : null',\n '[attr.tabindex]': 'interactive() && !disabled() ? 0 : null',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.aria-label]': 'title() || null',\n '(keydown.enter)': 'onKeyboardActivate($event)',\n '(keydown.space)': 'onKeyboardActivate($event)',\n },\n})\nexport class ComItem {\n // ─── Content Inputs ───\n\n /** Primary text. Required unless using comItemTitle directive. */\n readonly title: InputSignal<string | undefined> = input<string>();\n\n /** Secondary text below the title. */\n readonly description: InputSignal<string | undefined> = input<string>();\n\n /** Lucide icon name — renders inside a com-avatar container. */\n readonly icon: InputSignal<string | undefined> = input<string>();\n\n /** Color variant passed to the leading com-avatar. */\n readonly iconColor: InputSignal<AvatarColor> = input<AvatarColor>('primary');\n\n // ─── CVA Variant Inputs ───\n\n /** Size variant affecting typography and spacing. */\n readonly size: InputSignal<ItemSize> = input<ItemSize>('md');\n\n /** Density variant affecting vertical padding. */\n readonly density: InputSignal<ItemDensity> = input<ItemDensity>('default');\n\n /** Enables hover/active/focus states. */\n readonly interactive: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Shows selected/active highlight. */\n readonly active: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Dims and disables pointer events. */\n readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Truncates title and description text. */\n readonly truncate: InputSignalWithTransform<boolean, unknown> = input(true, {\n transform: booleanAttribute,\n });\n\n // ─── Content Projection Queries ───\n\n protected readonly leadingDirective: Signal<ComItemLeading | undefined> =\n contentChild(ComItemLeading);\n\n protected readonly titleDirective: Signal<ComItemTitle | undefined> =\n contentChild(ComItemTitle);\n\n protected readonly suffixDirective: Signal<ComItemSuffix | undefined> =\n contentChild(ComItemSuffix);\n\n protected readonly descriptionDirective: Signal<ComItemDescription | undefined> =\n contentChild(ComItemDescription);\n\n protected readonly trailingDirective: Signal<ComItemTrailing | undefined> =\n contentChild(ComItemTrailing);\n\n // ─── Computed Values ───\n\n /** Resolved icon color (handles 'auto' → 'primary' for items since there's no name). */\n protected readonly resolvedIconColor: Signal<AvatarColor> = computed(() => {\n const color = this.iconColor();\n // For items, 'auto' should default to 'primary' since there's no name to hash\n return color === 'auto' ? 'primary' : color;\n });\n\n /** Avatar size mapped from item size. */\n protected readonly avatarSize: Signal<AvatarSize> = computed(\n () => ITEM_AVATAR_SIZES[this.size()]\n );\n\n /** Icon size mapped from item size. */\n protected readonly iconSize: Signal<IconSize> = computed(\n () => ITEM_ICON_SIZES[this.size()]\n );\n\n /** Title typography classes based on size. */\n protected readonly titleClasses: Signal<string> = computed(\n () => ITEM_TITLE_CLASSES[this.size()]\n );\n\n /** Description typography classes based on size. */\n protected readonly descriptionClasses: Signal<string> = computed(\n () => ITEM_DESCRIPTION_CLASSES[this.size()]\n );\n\n /** Host element classes from CVA. */\n protected readonly hostClasses: Signal<string> = computed(() =>\n itemVariants({\n size: this.size(),\n density: this.density(),\n interactive: this.interactive(),\n active: this.active(),\n disabled: this.disabled(),\n })\n );\n\n // ─── Keyboard Accessibility ───\n\n protected onKeyboardActivate(event: Event): void {\n if (this.interactive() && !this.disabled()) {\n event.preventDefault();\n (event.target as HTMLElement).click();\n }\n }\n}\n","// Public API for the item component\n\n// Main component\nexport { ComItem } from './item.component';\n\n// Directives\nexport {\n ComItemLeading,\n ComItemTitle,\n ComItemSuffix,\n ComItemDescription,\n ComItemTrailing,\n} from './item.directives';\n\n// Variants and utilities\nexport {\n itemVariants,\n ITEM_TITLE_CLASSES,\n ITEM_DESCRIPTION_CLASSES,\n ITEM_AVATAR_SIZES,\n ITEM_ICON_SIZES,\n} from './item.variants';\n\nexport type {\n ItemSize,\n ItemDensity,\n ItemVariants,\n} from './item.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-item.mjs","sources":["../../../projects/com/components/item/item.directives.ts","../../../projects/com/components/item/item.variants.ts","../../../projects/com/components/item/item.component.ts","../../../projects/com/components/item/index.ts","../../../projects/com/components/item/ngx-com-components-item.ts"],"sourcesContent":["import { Directive, inject, TemplateRef } from '@angular/core';\n\n/**\n * Marker directive for projecting custom leading content into a com-item.\n *\n * When this directive is present, it completely replaces the default\n * leading visual (which would otherwise be a com-avatar with an icon).\n * Use this for custom avatars (with images or initials), bare icons,\n * custom images, or any other leading visual.\n *\n * @example Custom avatar with image\n * ```html\n * <com-item title=\"Jane Doe\" description=\"jane@example.com\">\n * <ng-template comItemLeading>\n * <com-avatar src=\"/photos/jane.jpg\" name=\"Jane Doe\" size=\"sm\" />\n * </ng-template>\n * </com-item>\n * ```\n *\n * @example Avatar stack\n * ```html\n * <com-item title=\"3 collaborators\">\n * <ng-template comItemLeading>\n * <div class=\"flex -space-x-2\">\n * <com-avatar name=\"A\" size=\"xs\" variant=\"outline\" />\n * <com-avatar name=\"B\" size=\"xs\" variant=\"outline\" />\n * </div>\n * </ng-template>\n * </com-item>\n * ```\n */\n@Directive({\n selector: 'ng-template[comItemLeading]',\n})\nexport class ComItemLeading {\n readonly templateRef: TemplateRef<void> = inject(TemplateRef);\n}\n\n/**\n * Marker directive for projecting custom title content into a com-item.\n *\n * When this directive is present, it replaces the `title` input with\n * rich projected content. Use this when the title needs formatting,\n * links, or other custom markup.\n *\n * @example Title with link\n * ```html\n * <com-item icon=\"link\">\n * <ng-template comItemTitle>\n * <a href=\"/docs/api\" class=\"hover:underline\">API Documentation</a>\n * </ng-template>\n * </com-item>\n * ```\n */\n@Directive({\n selector: 'ng-template[comItemTitle]',\n})\nexport class ComItemTitle {\n readonly templateRef: TemplateRef<void> = inject(TemplateRef);\n}\n\n/**\n * Marker directive for projecting inline suffix content after the title.\n *\n * Content appears on the same line as the title, immediately after it.\n * Use this for badges, tags, status indicators, or other inline metadata.\n *\n * @example Badge suffix\n * ```html\n * <com-item title=\"My BP datasource\" description=\"View and manage configuration\">\n * <ng-template comItemSuffix>\n * <span class=\"inline-flex items-center gap-1 rounded-pill border border-primary/30 bg-primary-subtle px-2 py-0.5 text-xs font-medium text-primary\">\n * Bluetooth\n * </span>\n * </ng-template>\n * </com-item>\n * ```\n */\n@Directive({\n selector: 'ng-template[comItemSuffix]',\n})\nexport class ComItemSuffix {\n readonly templateRef: TemplateRef<void> = inject(TemplateRef);\n}\n\n/**\n * Marker directive for projecting custom description content into a com-item.\n *\n * When this directive is present, it replaces the `description` input\n * with rich projected content. Use this when the description needs\n * formatting, code snippets, or other custom markup.\n *\n * @example Description with code\n * ```html\n * <com-item title=\"API Key\" icon=\"key\">\n * <ng-template comItemDescription>\n * <code class=\"text-xs font-mono text-muted-foreground\">sk-abc...xyz</code>\n * <span class=\"text-xs text-muted-foreground\"> · Created 3 days ago</span>\n * </ng-template>\n * </com-item>\n * ```\n */\n@Directive({\n selector: 'ng-template[comItemDescription]',\n})\nexport class ComItemDescription {\n readonly templateRef: TemplateRef<void> = inject(TemplateRef);\n}\n\n/**\n * Marker directive for projecting trailing content into a com-item.\n *\n * Content appears at the far right edge of the item. Use this for\n * action buttons, navigation chevrons, toggles, timestamps, or\n * any other trailing content.\n *\n * @example Trailing chevron\n * ```html\n * <com-item title=\"Settings\" icon=\"settings\" [interactive]=\"true\">\n * <ng-template comItemTrailing>\n * <com-icon name=\"chevron-right\" size=\"sm\" color=\"muted\" />\n * </ng-template>\n * </com-item>\n * ```\n *\n * @example Trailing action button\n * ```html\n * <com-item title=\"API Key\" icon=\"key\">\n * <ng-template comItemTrailing>\n * <button class=\"text-sm text-primary hover:text-primary-hover\">Revoke</button>\n * </ng-template>\n * </com-item>\n * ```\n */\n@Directive({\n selector: 'ng-template[comItemTrailing]',\n})\nexport class ComItemTrailing {\n readonly templateRef: TemplateRef<void> = inject(TemplateRef);\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport type { AvatarSize } from 'ngx-com/components/avatar';\nimport type { IconSize } from 'ngx-com/components/icon';\n\n/** Item size variants. */\nexport type ItemSize = 'sm' | 'md' | 'lg';\n\n/** Item density variants. */\nexport type ItemDensity = 'compact' | 'default' | 'comfortable';\n\n/**\n * CVA variants for the item container (host element).\n *\n * @tokens `--color-primary-subtle`, `--color-muted`, `--color-muted-hover`, `--color-ring`, `--color-disabled-foreground`\n */\nexport const itemVariants: (props?: {\n size?: ItemSize;\n density?: ItemDensity;\n interactive?: boolean;\n active?: boolean;\n disabled?: boolean;\n}) => string = cva(['com-item', 'flex w-full items-center'], {\n variants: {\n size: {\n sm: 'gap-2.5',\n md: 'gap-3',\n lg: 'gap-3.5',\n },\n density: {\n compact: 'py-1.5',\n default: 'py-2.5',\n comfortable: 'py-4',\n },\n interactive: {\n true: [\n 'cursor-pointer',\n 'rounded-lg',\n 'px-3',\n 'hover:bg-muted-hover',\n 'active:bg-muted',\n 'transition-colors duration-150',\n 'focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n ],\n false: 'cursor-default',\n },\n active: {\n true: 'bg-primary-subtle',\n false: '',\n },\n disabled: {\n true: 'text-disabled-foreground pointer-events-none',\n false: '',\n },\n },\n defaultVariants: {\n size: 'md',\n density: 'default',\n interactive: false,\n active: false,\n disabled: false,\n },\n});\n\n/** Title classes keyed by item size. */\nexport const ITEM_TITLE_CLASSES: Record<ItemSize, string> = {\n sm: 'text-sm',\n md: 'text-sm font-medium',\n lg: 'text-xl font-semibold tracking-tight',\n};\n\n/** Description classes keyed by item size. */\nexport const ITEM_DESCRIPTION_CLASSES: Record<ItemSize, string> = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-sm',\n};\n\n/** Avatar size mapping keyed by item size. */\nexport const ITEM_AVATAR_SIZES: Record<ItemSize, AvatarSize> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n};\n\n/** Icon size mapping keyed by item size (for icon inside avatar). */\nexport const ITEM_ICON_SIZES: Record<ItemSize, IconSize> = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n};\n\nexport type ItemVariants = VariantProps<typeof itemVariants>;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ComAvatar, ComAvatarCustom } from 'ngx-com/components/avatar';\nimport type { AvatarColor, AvatarSize } from 'ngx-com/components/avatar';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport type { IconSize } from 'ngx-com/components/icon';\nimport {\n ComItemLeading,\n ComItemTitle,\n ComItemSuffix,\n ComItemDescription,\n ComItemTrailing,\n} from './item.directives';\nimport {\n itemVariants,\n ITEM_TITLE_CLASSES,\n ITEM_DESCRIPTION_CLASSES,\n ITEM_AVATAR_SIZES,\n ITEM_ICON_SIZES,\n} from './item.variants';\nimport type { ItemSize, ItemDensity } from './item.variants';\n\n/**\n * Item component — a universal compound display element that shows a leading\n * visual alongside a title, an optional description, and optional trailing content.\n *\n * Works in all these contexts:\n * - List rows (device lists, settings menus, search results)\n * - Page/section headers\n * - Dropdown menu items\n * - Table cells\n * - Card headers\n * - Nav items\n *\n * **Anatomy:**\n * ```\n * ┌─────────────────────────────────────────────────────────┐\n * │ ┌───────┐ │\n * │ │com- │ Title text · [inline suffix] [TRAILING] │\n * │ │avatar │ Description text (secondary) │\n * │ └───────┘ │\n * └─────────────────────────────────────────────────────────┘\n * ```\n *\n * Five content zones:\n * 1. **Leading visual** — optional. Default: `com-avatar` with `shape=\"rounded\"` + `variant=\"soft\"`.\n * Override via `comItemLeading` directive.\n * 2. **Title** — primary text. Required (via input or projection).\n * 3. **Inline suffix** — same line as title, after it. For badges, tags, status dots.\n * 4. **Description** — secondary text below title. Optional.\n * 5. **Trailing** — far-right aligned. Actions, chevrons, timestamps.\n *\n * @tokens `--color-primary-subtle`, `--color-muted`, `--color-muted-foreground`,\n * `--color-foreground`, `--color-ring`\n *\n * @example Simplest — text only, no icon\n * ```html\n * <com-item title=\"Select all\" />\n * ```\n *\n * @example Icon + title + description (most common)\n * ```html\n * <com-item\n * title=\"Dexcom G7\"\n * description=\"109123c2d2194bffe519b03ceb51730d5064f9de46c54c4e...\"\n * icon=\"smartphone\"\n * />\n * ```\n *\n * @example Icon with different color\n * ```html\n * <com-item title=\"Warning detected\" icon=\"alert-triangle\" iconColor=\"warn\" />\n * <com-item title=\"Active\" icon=\"check-circle\" iconColor=\"accent\" />\n * ```\n *\n * @example Page header with badge suffix (size lg)\n * ```html\n * <com-item\n * title=\"My BP datasource\"\n * description=\"View and manage datasource configuration\"\n * size=\"lg\"\n * >\n * <ng-template comItemSuffix>\n * <span class=\"inline-flex items-center gap-1 rounded-pill border border-primary/30 bg-primary-subtle px-2 py-0.5 text-xs font-medium text-primary\">\n * <com-icon name=\"bluetooth\" size=\"xs\" /> Bluetooth\n * </span>\n * </ng-template>\n * </com-item>\n * ```\n *\n * @example Custom leading — user avatar with image\n * ```html\n * <com-item title=\"Jane Doe\" description=\"jane@example.com\">\n * <ng-template comItemLeading>\n * <com-avatar src=\"/photos/jane.jpg\" name=\"Jane Doe\" size=\"sm\" />\n * </ng-template>\n * </com-item>\n * ```\n *\n * @example Interactive list item with trailing chevron\n * ```html\n * <com-item\n * title=\"Bluetooth Settings\"\n * description=\"Manage paired devices\"\n * icon=\"bluetooth\"\n * [interactive]=\"true\"\n * (click)=\"openSettings()\"\n * >\n * <ng-template comItemTrailing>\n * <com-icon name=\"chevron-right\" size=\"sm\" color=\"muted\" />\n * </ng-template>\n * </com-item>\n * ```\n *\n * @example Compact density — dropdown menu\n * ```html\n * @for (option of options; track option.value) {\n * <com-item\n * [title]=\"option.label\"\n * [icon]=\"option.icon\"\n * density=\"compact\"\n * [interactive]=\"true\"\n * [active]=\"option.value === selected()\"\n * (click)=\"select(option)\"\n * />\n * }\n * ```\n *\n * @example Rich description via projection\n * ```html\n * <com-item title=\"API Key\" icon=\"key\">\n * <ng-template comItemDescription>\n * <code class=\"text-xs font-mono text-muted-foreground\">sk-abc...xyz</code>\n * <span class=\"text-xs text-muted-foreground\"> · Created 3 days ago</span>\n * </ng-template>\n * <ng-template comItemTrailing>\n * <button class=\"text-sm text-primary hover:text-primary-hover\">Revoke</button>\n * </ng-template>\n * </com-item>\n * ```\n *\n * @example Disabled\n * ```html\n * <com-item\n * title=\"Enterprise Features\"\n * description=\"Available on Enterprise plan\"\n * icon=\"crown\"\n * [disabled]=\"true\"\n * />\n * ```\n */\n@Component({\n selector: 'com-item',\n exportAs: 'comItem',\n template: `\n <!-- Leading visual zone -->\n @if (leadingDirective(); as leading) {\n <ng-container [ngTemplateOutlet]=\"leading.templateRef\" />\n } @else if (icon()) {\n <com-avatar\n [size]=\"avatarSize()\"\n shape=\"rounded\"\n variant=\"soft\"\n [color]=\"resolvedIconColor()\"\n >\n <ng-template comAvatarCustom>\n <com-icon [name]=\"icon()\" [size]=\"iconSize()\" />\n </ng-template>\n </com-avatar>\n }\n\n <!-- Text zone -->\n <div class=\"flex min-w-0 flex-1 flex-col justify-center\">\n <!-- Title row -->\n <div class=\"flex items-center gap-1.5\">\n @if (titleDirective(); as titleTpl) {\n <ng-container [ngTemplateOutlet]=\"titleTpl.templateRef\" />\n } @else if (title()) {\n <span\n class=\"text-foreground\"\n [class]=\"titleClasses()\"\n [class.truncate]=\"truncate()\"\n >\n {{ title() }}\n </span>\n }\n @if (suffixDirective(); as suffix) {\n <ng-container [ngTemplateOutlet]=\"suffix.templateRef\" />\n }\n </div>\n\n <!-- Description row -->\n @if (descriptionDirective(); as descTpl) {\n <ng-container [ngTemplateOutlet]=\"descTpl.templateRef\" />\n } @else if (description()) {\n <span\n class=\"text-muted-foreground\"\n [class]=\"descriptionClasses()\"\n [class.truncate]=\"truncate()\"\n >\n {{ description() }}\n </span>\n }\n </div>\n\n <!-- Trailing zone -->\n @if (trailingDirective(); as trailing) {\n <div class=\"flex shrink-0 items-center\">\n <ng-container [ngTemplateOutlet]=\"trailing.templateRef\" />\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [\n NgTemplateOutlet,\n ComAvatar,\n ComAvatarCustom,\n ComIcon,\n ],\n host: {\n '[class]': 'hostClasses()',\n '[attr.role]': 'interactive() ? \"button\" : null',\n '[attr.tabindex]': 'interactive() && !disabled() ? 0 : null',\n '[attr.aria-disabled]': 'disabled() || null',\n '[attr.aria-label]': 'title() || null',\n '(keydown.enter)': 'onKeyboardActivate($event)',\n '(keydown.space)': 'onKeyboardActivate($event)',\n },\n})\nexport class ComItem {\n // ─── Content Inputs ───\n\n /** Primary text. Required unless using comItemTitle directive. */\n readonly title: InputSignal<string | undefined> = input<string>();\n\n /** Secondary text below the title. */\n readonly description: InputSignal<string | undefined> = input<string>();\n\n /** Lucide icon name — renders inside a com-avatar container. */\n readonly icon: InputSignal<string | undefined> = input<string>();\n\n /** Color variant passed to the leading com-avatar. */\n readonly iconColor: InputSignal<AvatarColor> = input<AvatarColor>('primary');\n\n // ─── CVA Variant Inputs ───\n\n /** Size variant affecting typography and spacing. */\n readonly size: InputSignal<ItemSize> = input<ItemSize>('md');\n\n /** Density variant affecting vertical padding. */\n readonly density: InputSignal<ItemDensity> = input<ItemDensity>('default');\n\n /** Enables hover/active/focus states. */\n readonly interactive: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Shows selected/active highlight. */\n readonly active: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Dims and disables pointer events. */\n readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Truncates title and description text. */\n readonly truncate: InputSignalWithTransform<boolean, unknown> = input(true, {\n transform: booleanAttribute,\n });\n\n // ─── Content Projection Queries ───\n\n protected readonly leadingDirective: Signal<ComItemLeading | undefined> =\n contentChild(ComItemLeading);\n\n protected readonly titleDirective: Signal<ComItemTitle | undefined> =\n contentChild(ComItemTitle);\n\n protected readonly suffixDirective: Signal<ComItemSuffix | undefined> =\n contentChild(ComItemSuffix);\n\n protected readonly descriptionDirective: Signal<ComItemDescription | undefined> =\n contentChild(ComItemDescription);\n\n protected readonly trailingDirective: Signal<ComItemTrailing | undefined> =\n contentChild(ComItemTrailing);\n\n // ─── Computed Values ───\n\n /** Resolved icon color (handles 'auto' → 'primary' for items since there's no name). */\n protected readonly resolvedIconColor: Signal<AvatarColor> = computed(() => {\n const color = this.iconColor();\n // For items, 'auto' should default to 'primary' since there's no name to hash\n return color === 'auto' ? 'primary' : color;\n });\n\n /** Avatar size mapped from item size. */\n protected readonly avatarSize: Signal<AvatarSize> = computed(\n () => ITEM_AVATAR_SIZES[this.size()]\n );\n\n /** Icon size mapped from item size. */\n protected readonly iconSize: Signal<IconSize> = computed(\n () => ITEM_ICON_SIZES[this.size()]\n );\n\n /** Title typography classes based on size. */\n protected readonly titleClasses: Signal<string> = computed(\n () => ITEM_TITLE_CLASSES[this.size()]\n );\n\n /** Description typography classes based on size. */\n protected readonly descriptionClasses: Signal<string> = computed(\n () => ITEM_DESCRIPTION_CLASSES[this.size()]\n );\n\n /** Host element classes from CVA. */\n protected readonly hostClasses: Signal<string> = computed(() =>\n itemVariants({\n size: this.size(),\n density: this.density(),\n interactive: this.interactive(),\n active: this.active(),\n disabled: this.disabled(),\n })\n );\n\n // ─── Keyboard Accessibility ───\n\n protected onKeyboardActivate(event: Event): void {\n if (this.interactive() && !this.disabled()) {\n event.preventDefault();\n (event.target as HTMLElement).click();\n }\n }\n}\n","// Public API for the item component\n\n// Main component\nexport { ComItem } from './item.component';\n\n// Directives\nexport {\n ComItemLeading,\n ComItemTitle,\n ComItemSuffix,\n ComItemDescription,\n ComItemTrailing,\n} from './item.directives';\n\n// Variants and utilities\nexport {\n itemVariants,\n ITEM_TITLE_CLASSES,\n ITEM_DESCRIPTION_CLASSES,\n ITEM_AVATAR_SIZES,\n ITEM_ICON_SIZES,\n} from './item.variants';\n\nexport type {\n ItemSize,\n ItemDensity,\n ItemVariants,\n} from './item.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -55,7 +55,7 @@ const paginatorButtonVariants = cva([
55
55
  'transition-colors duration-150',
56
56
  'cursor-pointer',
57
57
  'hover:bg-muted hover:text-muted-foreground',
58
- 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring',
58
+ 'focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',
59
59
  'disabled:cursor-not-allowed disabled:bg-disabled disabled:text-disabled-foreground disabled:border-disabled',
60
60
  ], {
61
61
  variants: {
@@ -101,7 +101,7 @@ const paginatorSelectVariants = cva([
101
101
  'cursor-pointer',
102
102
  'transition-colors duration-150',
103
103
  'hover:bg-muted',
104
- 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring',
104
+ 'focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',
105
105
  'disabled:cursor-not-allowed disabled:bg-disabled disabled:text-disabled-foreground disabled:border-disabled',
106
106
  'pr-6', // Space for custom dropdown arrow
107
107
  ], {
@@ -127,7 +127,7 @@ const paginatorPageButtonVariants = cva([
127
127
  'font-medium',
128
128
  'transition-colors duration-150',
129
129
  'cursor-pointer',
130
- 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring',
130
+ 'focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',
131
131
  'disabled:cursor-not-allowed disabled:bg-disabled disabled:text-disabled-foreground',
132
132
  ], {
133
133
  variants: {
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-com-components-paginator.mjs","sources":["../../../projects/com/components/paginator/paginator.models.ts","../../../projects/com/components/paginator/paginator.variants.ts","../../../projects/com/components/paginator/paginator.component.ts","../../../projects/com/components/paginator/index.ts","../../../projects/com/components/paginator/ngx-com-components-paginator.ts"],"sourcesContent":["/**\n * Event emitted when the paginator changes page index or page size.\n */\nexport interface PageEvent {\n /** The current zero-based page index. */\n pageIndex: number;\n /** The previous zero-based page index. */\n previousPageIndex: number;\n /** The current page size. */\n pageSize: number;\n /** The total number of items being paged. */\n length: number;\n}\n\n/**\n * Function signature for custom range label formatting.\n * Used for i18n and custom label display.\n *\n * @param page Current page index (zero-based)\n * @param pageSize Number of items per page\n * @param length Total number of items\n * @returns Formatted string to display (e.g., \"1 – 10 of 100\")\n */\nexport type RangeLabelFn = (page: number, pageSize: number, length: number) => string;\n\n/**\n * Default range label function.\n * Produces output like \"1 – 10 of 100\" or \"0 of 0\" when empty.\n */\nexport function defaultRangeLabel(page: number, pageSize: number, length: number): string {\n if (length === 0 || pageSize === 0) {\n return `0 of ${length}`;\n }\n\n const startIndex = page * pageSize;\n // Ensure end index doesn't exceed length\n const endIndex = Math.min(startIndex + pageSize, length);\n\n return `${startIndex + 1} – ${endIndex} of ${length}`;\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\n\n// ─── Types ───\n\nexport type PaginatorSize = 'sm' | 'md';\nexport type PaginatorLayout = 'compact' | 'spread';\n\n// ─── Container Variants ───\n\n/**\n * CVA variants for the paginator container.\n * Controls overall layout and spacing.\n */\nexport const paginatorContainerVariants: (props?: {\n size?: PaginatorSize;\n layout?: PaginatorLayout;\n}) => string = cva(\n [\n 'flex items-center',\n 'text-foreground',\n 'select-none',\n ],\n {\n variants: {\n size: {\n sm: 'gap-3 text-xs',\n md: 'gap-4 text-sm',\n },\n layout: {\n compact: 'justify-end',\n spread: 'justify-between',\n },\n },\n defaultVariants: {\n size: 'md',\n layout: 'compact',\n },\n }\n);\n\n// ─── Button Variants ───\n\n/**\n * CVA variants for paginator navigation buttons.\n * Controls button sizing, borders, and interactive states.\n */\nexport const paginatorButtonVariants: (props?: {\n size?: PaginatorSize;\n}) => string = cva(\n [\n 'inline-flex items-center justify-center',\n 'rounded-control',\n 'border border-border',\n 'bg-transparent',\n 'transition-colors duration-150',\n 'cursor-pointer',\n 'hover:bg-muted hover:text-muted-foreground',\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring',\n 'disabled:cursor-not-allowed disabled:bg-disabled disabled:text-disabled-foreground disabled:border-disabled',\n ],\n {\n variants: {\n size: {\n sm: 'h-7 w-7',\n md: 'h-9 w-9',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\n// ─── Range Label Variants ───\n\n/**\n * CVA variants for the range label text.\n * Controls typography and color.\n */\nexport const paginatorRangeLabelVariants: (props?: {\n size?: PaginatorSize;\n}) => string = cva(\n [\n 'text-muted-foreground',\n 'whitespace-nowrap',\n ],\n {\n variants: {\n size: {\n sm: 'text-xs',\n md: 'text-sm',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\n// ─── Page Size Selector Variants ───\n\n/**\n * CVA variants for the page size select element.\n * Controls sizing and styling of the native select.\n */\nexport const paginatorSelectVariants: (props?: {\n size?: PaginatorSize;\n}) => string = cva(\n [\n 'appearance-none',\n 'rounded-control',\n 'border border-border',\n 'bg-transparent',\n 'text-foreground',\n 'cursor-pointer',\n 'transition-colors duration-150',\n 'hover:bg-muted',\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring',\n 'disabled:cursor-not-allowed disabled:bg-disabled disabled:text-disabled-foreground disabled:border-disabled',\n 'pr-6', // Space for custom dropdown arrow\n ],\n {\n variants: {\n size: {\n sm: 'h-7 px-2 text-xs',\n md: 'h-9 px-3 text-sm',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\n// ─── Variant Types ───\n\n// ─── Page Button Variants ───\n\n/**\n * CVA variants for numbered page buttons.\n * Controls button sizing, active state, and interactive states.\n */\nexport const paginatorPageButtonVariants: (props?: {\n size?: PaginatorSize;\n active?: boolean;\n}) => string = cva(\n [\n 'inline-flex items-center justify-center',\n 'rounded-control',\n 'font-medium',\n 'transition-colors duration-150',\n 'cursor-pointer',\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring',\n 'disabled:cursor-not-allowed disabled:bg-disabled disabled:text-disabled-foreground',\n ],\n {\n variants: {\n size: {\n sm: 'h-7 min-w-7 px-1.5 text-xs',\n md: 'h-9 min-w-9 px-2 text-sm',\n },\n active: {\n true: 'bg-primary text-primary-foreground',\n false: 'bg-transparent text-foreground hover:bg-muted hover:text-muted-foreground',\n },\n },\n defaultVariants: {\n size: 'md',\n active: false,\n },\n }\n);\n\n// ─── Ellipsis Variants ───\n\n/**\n * CVA variants for the ellipsis indicator.\n * Controls sizing and styling of the \"...\" text.\n */\nexport const paginatorEllipsisVariants: (props?: {\n size?: PaginatorSize;\n}) => string = cva(\n [\n 'inline-flex items-center justify-center',\n 'text-muted-foreground',\n 'select-none',\n ],\n {\n variants: {\n size: {\n sm: 'h-7 w-7 text-xs',\n md: 'h-9 w-9 text-sm',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\n// ─── Variant Types ───\n\nexport type PaginatorContainerVariants = VariantProps<typeof paginatorContainerVariants>;\nexport type PaginatorButtonVariants = VariantProps<typeof paginatorButtonVariants>;\nexport type PaginatorRangeLabelVariants = VariantProps<typeof paginatorRangeLabelVariants>;\nexport type PaginatorSelectVariants = VariantProps<typeof paginatorSelectVariants>;\nexport type PaginatorPageButtonVariants = VariantProps<typeof paginatorPageButtonVariants>;\nexport type PaginatorEllipsisVariants = VariantProps<typeof paginatorEllipsisVariants>;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n input,\n output,\n viewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n InputSignal,\n InputSignalWithTransform,\n OutputEmitterRef,\n Signal,\n} from '@angular/core';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport { defaultRangeLabel, type PageEvent, type RangeLabelFn } from './paginator.models';\nimport {\n paginatorContainerVariants,\n paginatorButtonVariants,\n paginatorRangeLabelVariants,\n paginatorSelectVariants,\n paginatorPageButtonVariants,\n paginatorEllipsisVariants,\n type PaginatorSize,\n type PaginatorLayout,\n} from './paginator.variants';\n\n/** Represents a page number or ellipsis marker in the page range. */\nexport type PageRangeItem = number | 'ellipsis';\n\n/**\n * Paginator component — provides navigation for paginated content.\n *\n * Displays navigation controls, optional page size selector, and range label\n * showing current position within the data set. Supports numbered page buttons\n * when `showPageNumbers` is enabled.\n *\n * @tokens `--color-foreground`, `--color-muted-foreground`,\n * `--color-border`, `--color-muted`,\n * `--color-disabled`, `--color-disabled-foreground`,\n * `--color-ring`, `--color-primary`, `--color-primary-foreground`\n *\n * @example Basic usage\n * ```html\n * <com-paginator\n * [length]=\"100\"\n * [pageSize]=\"10\"\n * [pageIndex]=\"0\"\n * (page)=\"onPageChange($event)\"\n * />\n * ```\n *\n * @example With page size options\n * ```html\n * <com-paginator\n * [length]=\"100\"\n * [pageSize]=\"10\"\n * [pageIndex]=\"0\"\n * [pageSizeOptions]=\"[5, 10, 25, 50]\"\n * (page)=\"onPageChange($event)\"\n * />\n * ```\n *\n * @example With first/last buttons\n * ```html\n * <com-paginator\n * [length]=\"100\"\n * [pageSize]=\"10\"\n * [pageIndex]=\"0\"\n * [showFirstLastButtons]=\"true\"\n * (page)=\"onPageChange($event)\"\n * />\n * ```\n *\n * @example With numbered page buttons\n * ```html\n * <com-paginator\n * [length]=\"97\"\n * [pageSize]=\"10\"\n * [showPageNumbers]=\"true\"\n * (page)=\"onPageChange($event)\"\n * />\n * ```\n *\n * @example Spread layout (summary left, controls right)\n * ```html\n * <com-paginator\n * [length]=\"97\"\n * [pageSize]=\"10\"\n * [showPageNumbers]=\"true\"\n * layout=\"spread\"\n * (page)=\"onPageChange($event)\"\n * />\n * ```\n *\n * @example Small size\n * ```html\n * <com-paginator\n * [length]=\"50\"\n * [pageSize]=\"10\"\n * size=\"sm\"\n * (page)=\"onPageChange($event)\"\n * />\n * ```\n *\n * @example Custom range label (i18n)\n * ```html\n * <com-paginator\n * [length]=\"100\"\n * [pageSize]=\"10\"\n * [rangeLabel]=\"customLabel\"\n * (page)=\"onPageChange($event)\"\n * />\n * ```\n * ```ts\n * customLabel = (page, pageSize, length) => `Seite ${page + 1} von ${Math.ceil(length / pageSize)}`;\n * ```\n */\n@Component({\n selector: 'com-paginator',\n exportAs: 'comPaginator',\n template: `\n <nav\n role=\"navigation\"\n [attr.aria-label]=\"ariaLabel()\"\n [class]=\"containerClasses()\"\n >\n @if (showPageNumbers()) {\n <!-- Spread Layout: Summary on left -->\n @if (layout() === 'spread') {\n <span [class]=\"rangeLabelClasses()\">\n {{ rangeLabelText() }}\n </span>\n }\n\n <!-- Navigation Controls -->\n <div\n class=\"flex items-center gap-1\"\n role=\"group\"\n aria-label=\"Page navigation\"\n (keydown)=\"onPageButtonsKeydown($event)\"\n >\n <!-- Previous Page -->\n <button\n type=\"button\"\n [class]=\"buttonClasses()\"\n [disabled]=\"disabled() || !hasPreviousPage()\"\n aria-label=\"Previous page\"\n (click)=\"previousPage()\"\n >\n <com-icon name=\"chevron-left\" [size]=\"iconSize()\" />\n </button>\n\n <!-- Page Numbers -->\n @for (item of pageRange(); track trackPageItem($index, item)) {\n @if (item === 'ellipsis') {\n <span\n [class]=\"ellipsisClasses()\"\n aria-hidden=\"true\"\n >…</span>\n } @else {\n <button\n #pageBtn\n type=\"button\"\n [class]=\"item === pageIndex() ? activePageButtonClasses() : inactivePageButtonClasses()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"'Page ' + (item + 1)\"\n [attr.aria-current]=\"item === pageIndex() ? 'page' : null\"\n [tabindex]=\"item === pageIndex() ? 0 : -1\"\n (click)=\"goToPage(item)\"\n >{{ item + 1 }}</button>\n }\n }\n\n <!-- Next Page -->\n <button\n type=\"button\"\n [class]=\"buttonClasses()\"\n [disabled]=\"disabled() || !hasNextPage()\"\n aria-label=\"Next page\"\n (click)=\"nextPage()\"\n >\n <com-icon name=\"chevron-right\" [size]=\"iconSize()\" />\n </button>\n </div>\n\n <!-- Compact Layout: Summary on right -->\n @if (layout() === 'compact') {\n <span [class]=\"rangeLabelClasses()\">\n {{ rangeLabelText() }}\n </span>\n }\n } @else {\n <!-- Original Layout (no page numbers) -->\n\n <!-- Page Size Selector -->\n @if (!hidePageSize() && pageSizeOptions().length > 0) {\n <div class=\"flex items-center gap-2\">\n <label\n [id]=\"pageSizeLabelId()\"\n class=\"text-muted-foreground\"\n [class.text-xs]=\"size() === 'sm'\"\n [class.text-sm]=\"size() === 'md'\"\n >\n Items per page:\n </label>\n <div class=\"relative\">\n <select\n [attr.aria-labelledby]=\"pageSizeLabelId()\"\n [class]=\"selectClasses()\"\n [disabled]=\"disabled()\"\n [value]=\"pageSize()\"\n (change)=\"onPageSizeChange($event)\"\n >\n @for (option of pageSizeOptions(); track option) {\n <option [value]=\"option\">{{ option }}</option>\n }\n </select>\n <com-icon\n name=\"chevron-down\"\n size=\"xs\"\n class=\"pointer-events-none absolute right-1.5 top-1/2 -translate-y-1/2 text-muted-foreground\"\n />\n </div>\n </div>\n }\n\n <!-- Range Label -->\n <span [class]=\"rangeLabelClasses()\">\n {{ rangeLabelText() }}\n </span>\n\n <!-- Navigation Buttons -->\n <div class=\"flex items-center gap-1\">\n <!-- First Page -->\n @if (showFirstLastButtons()) {\n <button\n type=\"button\"\n [class]=\"buttonClasses()\"\n [disabled]=\"disabled() || !hasPreviousPage()\"\n aria-label=\"First page\"\n (click)=\"firstPage()\"\n >\n <com-icon name=\"chevrons-left\" [size]=\"iconSize()\" />\n </button>\n }\n\n <!-- Previous Page -->\n <button\n type=\"button\"\n [class]=\"buttonClasses()\"\n [disabled]=\"disabled() || !hasPreviousPage()\"\n aria-label=\"Previous page\"\n (click)=\"previousPage()\"\n >\n <com-icon name=\"chevron-left\" [size]=\"iconSize()\" />\n </button>\n\n <!-- Next Page -->\n <button\n type=\"button\"\n [class]=\"buttonClasses()\"\n [disabled]=\"disabled() || !hasNextPage()\"\n aria-label=\"Next page\"\n (click)=\"nextPage()\"\n >\n <com-icon name=\"chevron-right\" [size]=\"iconSize()\" />\n </button>\n\n <!-- Last Page -->\n @if (showFirstLastButtons()) {\n <button\n type=\"button\"\n [class]=\"buttonClasses()\"\n [disabled]=\"disabled() || !hasNextPage()\"\n aria-label=\"Last page\"\n (click)=\"lastPage()\"\n >\n <com-icon name=\"chevrons-right\" [size]=\"iconSize()\" />\n </button>\n }\n </div>\n }\n </nav>\n `,\n styles: `\n com-paginator {\n display: block;\n }\n `,\n imports: [ComIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'com-paginator',\n },\n})\nexport class ComPaginator {\n // ─── View Queries ───\n\n /** Page number buttons for keyboard navigation. */\n private readonly pageButtons = viewChildren<ElementRef<HTMLButtonElement>>('pageBtn');\n\n // ─── Inputs ───\n\n /** Total number of items being paged. */\n readonly length: InputSignal<number> = input<number>(0);\n\n /** Number of items to display per page. */\n readonly pageSize: InputSignal<number> = input<number>(10);\n\n /** Current zero-based page index. */\n readonly pageIndex: InputSignal<number> = input<number>(0);\n\n /** Available page size options. Hides selector if empty. */\n readonly pageSizeOptions: InputSignal<number[]> = input<number[]>([]);\n\n /** Whether to show first/last navigation buttons. */\n readonly showFirstLastButtons: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Whether to show numbered page buttons. */\n readonly showPageNumbers: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Whether all controls are disabled. */\n readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Whether to hide the page size selector. */\n readonly hidePageSize: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Size variant. */\n readonly size: InputSignal<PaginatorSize> = input<PaginatorSize>('md');\n\n /** Layout variant. Only applies when showPageNumbers is true. */\n readonly layout: InputSignal<PaginatorLayout> = input<PaginatorLayout>('compact');\n\n /** Number of pages to show on each side of the current page. */\n readonly siblingCount: InputSignal<number> = input<number>(1);\n\n /** Number of pages to always show at the start and end. */\n readonly boundaryCount: InputSignal<number> = input<number>(1);\n\n /** Accessible label for the nav element. */\n readonly ariaLabel: InputSignal<string> = input<string>('Pagination', { alias: 'aria-label' });\n\n /** Custom function for range label formatting. */\n readonly rangeLabel: InputSignal<RangeLabelFn> = input<RangeLabelFn>(defaultRangeLabel);\n\n // ─── Outputs ───\n\n /** Emits when page index or page size changes. */\n readonly page: OutputEmitterRef<PageEvent> = output<PageEvent>();\n\n // ─── Computed ───\n\n /** Total number of pages. */\n protected readonly numberOfPages: Signal<number> = computed(() => {\n const size = this.pageSize();\n const len = this.length();\n if (size === 0 || len === 0) {\n return 0;\n }\n return Math.ceil(len / size);\n });\n\n /** Whether there is a previous page. */\n protected readonly hasPreviousPage: Signal<boolean> = computed(() => {\n return this.pageIndex() > 0 && this.pageSize() > 0;\n });\n\n /** Whether there is a next page. */\n protected readonly hasNextPage: Signal<boolean> = computed(() => {\n const total = this.numberOfPages();\n return total > 0 && this.pageIndex() < total - 1;\n });\n\n /** The formatted range label text. */\n protected readonly rangeLabelText: Signal<string> = computed(() => {\n const fn = this.rangeLabel();\n return fn(this.pageIndex(), this.pageSize(), this.length());\n });\n\n /** Icon size based on component size. */\n protected readonly iconSize: Signal<'xs' | 'sm'> = computed(() => {\n return this.size() === 'sm' ? 'xs' : 'sm';\n });\n\n /** Unique ID for page size label. */\n protected readonly pageSizeLabelId: Signal<string> = computed(() => {\n return `com-paginator-page-size-label-${uniqueId++}`;\n });\n\n /** Classes for the container. */\n protected readonly containerClasses: Signal<string> = computed(() =>\n paginatorContainerVariants({\n size: this.size(),\n layout: this.showPageNumbers() ? this.layout() : 'compact',\n })\n );\n\n /** Classes for navigation buttons. */\n protected readonly buttonClasses: Signal<string> = computed(() =>\n paginatorButtonVariants({ size: this.size() })\n );\n\n /** Classes for the range label. */\n protected readonly rangeLabelClasses: Signal<string> = computed(() =>\n paginatorRangeLabelVariants({ size: this.size() })\n );\n\n /** Classes for the page size select. */\n protected readonly selectClasses: Signal<string> = computed(() =>\n paginatorSelectVariants({ size: this.size() })\n );\n\n /** Classes for the ellipsis indicator. */\n protected readonly ellipsisClasses: Signal<string> = computed(() =>\n paginatorEllipsisVariants({ size: this.size() })\n );\n\n /** Cached classes for active page button. */\n protected readonly activePageButtonClasses: Signal<string> = computed(() =>\n paginatorPageButtonVariants({ size: this.size(), active: true })\n );\n\n /** Cached classes for inactive page button. */\n protected readonly inactivePageButtonClasses: Signal<string> = computed(() =>\n paginatorPageButtonVariants({ size: this.size(), active: false })\n );\n\n /**\n * Computed page range for numbered pagination.\n * Returns array like [0, 'ellipsis', 3, 4, 5, 'ellipsis', 9] (zero-indexed).\n */\n protected readonly pageRange: Signal<PageRangeItem[]> = computed(() => {\n const totalPages = this.numberOfPages();\n const current = this.pageIndex();\n const siblings = this.siblingCount();\n const boundaries = this.boundaryCount();\n\n if (totalPages === 0) return [];\n\n // If all pages fit without ellipses, show them all\n const totalSlots = 2 * boundaries + 2 * siblings + 3;\n if (totalPages <= totalSlots) {\n return this.range(0, totalPages - 1);\n }\n\n // Collect all page indices that should be visible (Set auto-deduplicates)\n const pages = new Set<number>();\n\n // Boundary pages (always visible)\n for (let i = 0; i < boundaries; i++) pages.add(i);\n for (let i = totalPages - boundaries; i < totalPages; i++) pages.add(i);\n\n // Sibling pages around current (including current)\n const siblingStart = Math.max(0, current - siblings);\n const siblingEnd = Math.min(totalPages - 1, current + siblings);\n for (let i = siblingStart; i <= siblingEnd; i++) pages.add(i);\n\n // Convert to sorted array and insert ellipses at gaps\n const sorted = Array.from(pages).sort((a, b) => a - b);\n const result: PageRangeItem[] = [];\n\n for (let i = 0; i < sorted.length; i++) {\n const page = sorted[i]!;\n const prevPage = sorted[i - 1];\n if (prevPage !== undefined && page - prevPage > 1) {\n result.push('ellipsis');\n }\n result.push(page);\n }\n\n return result;\n });\n\n // ─── Navigation Methods ───\n\n /** Navigate to the first page. */\n firstPage(): void {\n if (this.hasPreviousPage()) {\n this.emitPageEvent(0);\n }\n }\n\n /** Navigate to the previous page. */\n previousPage(): void {\n if (this.hasPreviousPage()) {\n this.emitPageEvent(this.pageIndex() - 1);\n }\n }\n\n /** Navigate to the next page. */\n nextPage(): void {\n if (this.hasNextPage()) {\n this.emitPageEvent(this.pageIndex() + 1);\n }\n }\n\n /** Navigate to the last page. */\n lastPage(): void {\n if (this.hasNextPage()) {\n this.emitPageEvent(this.numberOfPages() - 1);\n }\n }\n\n /** Navigate to a specific page by index (zero-based). */\n goToPage(pageIndex: number): void {\n if (pageIndex >= 0 && pageIndex < this.numberOfPages() && pageIndex !== this.pageIndex()) {\n this.emitPageEvent(pageIndex);\n }\n }\n\n /** Handle page size selection change. */\n protected onPageSizeChange(event: Event): void {\n const select = event.target as HTMLSelectElement;\n const newPageSize = Number(select.value);\n const previousPageSize = this.pageSize();\n const currentPageIndex = this.pageIndex();\n\n // Calculate new page index to keep the first item on the current page visible\n const startIndex = currentPageIndex * previousPageSize;\n const newPageIndex = Math.floor(startIndex / newPageSize);\n\n this.page.emit({\n pageIndex: newPageIndex,\n previousPageIndex: currentPageIndex,\n pageSize: newPageSize,\n length: this.length(),\n });\n }\n\n /** Handle keyboard navigation within page buttons (roving tabindex). */\n protected onPageButtonsKeydown(event: KeyboardEvent): void {\n const target = event.target as HTMLButtonElement;\n\n // Get enabled buttons from viewChildren query\n const buttons = this.pageButtons()\n .map((ref) => ref.nativeElement)\n .filter((btn) => !btn.disabled);\n\n const currentIndex = buttons.indexOf(target);\n if (currentIndex === -1) return;\n\n let newIndex: number;\n switch (event.key) {\n case 'ArrowLeft':\n newIndex = currentIndex > 0 ? currentIndex - 1 : buttons.length - 1;\n break;\n case 'ArrowRight':\n newIndex = currentIndex < buttons.length - 1 ? currentIndex + 1 : 0;\n break;\n case 'Home':\n newIndex = 0;\n break;\n case 'End':\n newIndex = buttons.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n buttons[newIndex]?.focus();\n }\n\n /** Track function for page items. */\n protected trackPageItem(index: number, item: PageRangeItem): string {\n return item === 'ellipsis' ? `ellipsis-${index}` : `page-${item}`;\n }\n\n // ─── Private Methods ───\n\n private emitPageEvent(newPageIndex: number): void {\n this.page.emit({\n pageIndex: newPageIndex,\n previousPageIndex: this.pageIndex(),\n pageSize: this.pageSize(),\n length: this.length(),\n });\n }\n\n /** Generate a range of numbers from start to end (inclusive). */\n private range(start: number, end: number): number[] {\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n }\n}\n\n/** Counter for generating unique IDs. */\nlet uniqueId = 0;\n","// Public API for the paginator component\n\n// Main component\nexport { ComPaginator } from './paginator.component';\nexport type { PageRangeItem } from './paginator.component';\n\n// Models\nexport { defaultRangeLabel } from './paginator.models';\nexport type { PageEvent, RangeLabelFn } from './paginator.models';\n\n// Variants\nexport {\n paginatorContainerVariants,\n paginatorButtonVariants,\n paginatorRangeLabelVariants,\n paginatorSelectVariants,\n paginatorPageButtonVariants,\n paginatorEllipsisVariants,\n} from './paginator.variants';\n\nexport type {\n PaginatorSize,\n PaginatorLayout,\n PaginatorContainerVariants,\n PaginatorButtonVariants,\n PaginatorRangeLabelVariants,\n PaginatorSelectVariants,\n PaginatorPageButtonVariants,\n PaginatorEllipsisVariants,\n} from './paginator.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-paginator.mjs","sources":["../../../projects/com/components/paginator/paginator.models.ts","../../../projects/com/components/paginator/paginator.variants.ts","../../../projects/com/components/paginator/paginator.component.ts","../../../projects/com/components/paginator/index.ts","../../../projects/com/components/paginator/ngx-com-components-paginator.ts"],"sourcesContent":["/**\n * Event emitted when the paginator changes page index or page size.\n */\nexport interface PageEvent {\n /** The current zero-based page index. */\n pageIndex: number;\n /** The previous zero-based page index. */\n previousPageIndex: number;\n /** The current page size. */\n pageSize: number;\n /** The total number of items being paged. */\n length: number;\n}\n\n/**\n * Function signature for custom range label formatting.\n * Used for i18n and custom label display.\n *\n * @param page Current page index (zero-based)\n * @param pageSize Number of items per page\n * @param length Total number of items\n * @returns Formatted string to display (e.g., \"1 – 10 of 100\")\n */\nexport type RangeLabelFn = (page: number, pageSize: number, length: number) => string;\n\n/**\n * Default range label function.\n * Produces output like \"1 – 10 of 100\" or \"0 of 0\" when empty.\n */\nexport function defaultRangeLabel(page: number, pageSize: number, length: number): string {\n if (length === 0 || pageSize === 0) {\n return `0 of ${length}`;\n }\n\n const startIndex = page * pageSize;\n // Ensure end index doesn't exceed length\n const endIndex = Math.min(startIndex + pageSize, length);\n\n return `${startIndex + 1} – ${endIndex} of ${length}`;\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\n\n// ─── Types ───\n\nexport type PaginatorSize = 'sm' | 'md';\nexport type PaginatorLayout = 'compact' | 'spread';\n\n// ─── Container Variants ───\n\n/**\n * CVA variants for the paginator container.\n * Controls overall layout and spacing.\n */\nexport const paginatorContainerVariants: (props?: {\n size?: PaginatorSize;\n layout?: PaginatorLayout;\n}) => string = cva(\n [\n 'flex items-center',\n 'text-foreground',\n 'select-none',\n ],\n {\n variants: {\n size: {\n sm: 'gap-3 text-xs',\n md: 'gap-4 text-sm',\n },\n layout: {\n compact: 'justify-end',\n spread: 'justify-between',\n },\n },\n defaultVariants: {\n size: 'md',\n layout: 'compact',\n },\n }\n);\n\n// ─── Button Variants ───\n\n/**\n * CVA variants for paginator navigation buttons.\n * Controls button sizing, borders, and interactive states.\n */\nexport const paginatorButtonVariants: (props?: {\n size?: PaginatorSize;\n}) => string = cva(\n [\n 'inline-flex items-center justify-center',\n 'rounded-control',\n 'border border-border',\n 'bg-transparent',\n 'transition-colors duration-150',\n 'cursor-pointer',\n 'hover:bg-muted hover:text-muted-foreground',\n 'focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n 'disabled:cursor-not-allowed disabled:bg-disabled disabled:text-disabled-foreground disabled:border-disabled',\n ],\n {\n variants: {\n size: {\n sm: 'h-7 w-7',\n md: 'h-9 w-9',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\n// ─── Range Label Variants ───\n\n/**\n * CVA variants for the range label text.\n * Controls typography and color.\n */\nexport const paginatorRangeLabelVariants: (props?: {\n size?: PaginatorSize;\n}) => string = cva(\n [\n 'text-muted-foreground',\n 'whitespace-nowrap',\n ],\n {\n variants: {\n size: {\n sm: 'text-xs',\n md: 'text-sm',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\n// ─── Page Size Selector Variants ───\n\n/**\n * CVA variants for the page size select element.\n * Controls sizing and styling of the native select.\n */\nexport const paginatorSelectVariants: (props?: {\n size?: PaginatorSize;\n}) => string = cva(\n [\n 'appearance-none',\n 'rounded-control',\n 'border border-border',\n 'bg-transparent',\n 'text-foreground',\n 'cursor-pointer',\n 'transition-colors duration-150',\n 'hover:bg-muted',\n 'focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n 'disabled:cursor-not-allowed disabled:bg-disabled disabled:text-disabled-foreground disabled:border-disabled',\n 'pr-6', // Space for custom dropdown arrow\n ],\n {\n variants: {\n size: {\n sm: 'h-7 px-2 text-xs',\n md: 'h-9 px-3 text-sm',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\n// ─── Variant Types ───\n\n// ─── Page Button Variants ───\n\n/**\n * CVA variants for numbered page buttons.\n * Controls button sizing, active state, and interactive states.\n */\nexport const paginatorPageButtonVariants: (props?: {\n size?: PaginatorSize;\n active?: boolean;\n}) => string = cva(\n [\n 'inline-flex items-center justify-center',\n 'rounded-control',\n 'font-medium',\n 'transition-colors duration-150',\n 'cursor-pointer',\n 'focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n 'disabled:cursor-not-allowed disabled:bg-disabled disabled:text-disabled-foreground',\n ],\n {\n variants: {\n size: {\n sm: 'h-7 min-w-7 px-1.5 text-xs',\n md: 'h-9 min-w-9 px-2 text-sm',\n },\n active: {\n true: 'bg-primary text-primary-foreground',\n false: 'bg-transparent text-foreground hover:bg-muted hover:text-muted-foreground',\n },\n },\n defaultVariants: {\n size: 'md',\n active: false,\n },\n }\n);\n\n// ─── Ellipsis Variants ───\n\n/**\n * CVA variants for the ellipsis indicator.\n * Controls sizing and styling of the \"...\" text.\n */\nexport const paginatorEllipsisVariants: (props?: {\n size?: PaginatorSize;\n}) => string = cva(\n [\n 'inline-flex items-center justify-center',\n 'text-muted-foreground',\n 'select-none',\n ],\n {\n variants: {\n size: {\n sm: 'h-7 w-7 text-xs',\n md: 'h-9 w-9 text-sm',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\n// ─── Variant Types ───\n\nexport type PaginatorContainerVariants = VariantProps<typeof paginatorContainerVariants>;\nexport type PaginatorButtonVariants = VariantProps<typeof paginatorButtonVariants>;\nexport type PaginatorRangeLabelVariants = VariantProps<typeof paginatorRangeLabelVariants>;\nexport type PaginatorSelectVariants = VariantProps<typeof paginatorSelectVariants>;\nexport type PaginatorPageButtonVariants = VariantProps<typeof paginatorPageButtonVariants>;\nexport type PaginatorEllipsisVariants = VariantProps<typeof paginatorEllipsisVariants>;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n input,\n output,\n viewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n InputSignal,\n InputSignalWithTransform,\n OutputEmitterRef,\n Signal,\n} from '@angular/core';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport { defaultRangeLabel, type PageEvent, type RangeLabelFn } from './paginator.models';\nimport {\n paginatorContainerVariants,\n paginatorButtonVariants,\n paginatorRangeLabelVariants,\n paginatorSelectVariants,\n paginatorPageButtonVariants,\n paginatorEllipsisVariants,\n type PaginatorSize,\n type PaginatorLayout,\n} from './paginator.variants';\n\n/** Represents a page number or ellipsis marker in the page range. */\nexport type PageRangeItem = number | 'ellipsis';\n\n/**\n * Paginator component — provides navigation for paginated content.\n *\n * Displays navigation controls, optional page size selector, and range label\n * showing current position within the data set. Supports numbered page buttons\n * when `showPageNumbers` is enabled.\n *\n * @tokens `--color-foreground`, `--color-muted-foreground`,\n * `--color-border`, `--color-muted`,\n * `--color-disabled`, `--color-disabled-foreground`,\n * `--color-ring`, `--color-primary`, `--color-primary-foreground`\n *\n * @example Basic usage\n * ```html\n * <com-paginator\n * [length]=\"100\"\n * [pageSize]=\"10\"\n * [pageIndex]=\"0\"\n * (page)=\"onPageChange($event)\"\n * />\n * ```\n *\n * @example With page size options\n * ```html\n * <com-paginator\n * [length]=\"100\"\n * [pageSize]=\"10\"\n * [pageIndex]=\"0\"\n * [pageSizeOptions]=\"[5, 10, 25, 50]\"\n * (page)=\"onPageChange($event)\"\n * />\n * ```\n *\n * @example With first/last buttons\n * ```html\n * <com-paginator\n * [length]=\"100\"\n * [pageSize]=\"10\"\n * [pageIndex]=\"0\"\n * [showFirstLastButtons]=\"true\"\n * (page)=\"onPageChange($event)\"\n * />\n * ```\n *\n * @example With numbered page buttons\n * ```html\n * <com-paginator\n * [length]=\"97\"\n * [pageSize]=\"10\"\n * [showPageNumbers]=\"true\"\n * (page)=\"onPageChange($event)\"\n * />\n * ```\n *\n * @example Spread layout (summary left, controls right)\n * ```html\n * <com-paginator\n * [length]=\"97\"\n * [pageSize]=\"10\"\n * [showPageNumbers]=\"true\"\n * layout=\"spread\"\n * (page)=\"onPageChange($event)\"\n * />\n * ```\n *\n * @example Small size\n * ```html\n * <com-paginator\n * [length]=\"50\"\n * [pageSize]=\"10\"\n * size=\"sm\"\n * (page)=\"onPageChange($event)\"\n * />\n * ```\n *\n * @example Custom range label (i18n)\n * ```html\n * <com-paginator\n * [length]=\"100\"\n * [pageSize]=\"10\"\n * [rangeLabel]=\"customLabel\"\n * (page)=\"onPageChange($event)\"\n * />\n * ```\n * ```ts\n * customLabel = (page, pageSize, length) => `Seite ${page + 1} von ${Math.ceil(length / pageSize)}`;\n * ```\n */\n@Component({\n selector: 'com-paginator',\n exportAs: 'comPaginator',\n template: `\n <nav\n role=\"navigation\"\n [attr.aria-label]=\"ariaLabel()\"\n [class]=\"containerClasses()\"\n >\n @if (showPageNumbers()) {\n <!-- Spread Layout: Summary on left -->\n @if (layout() === 'spread') {\n <span [class]=\"rangeLabelClasses()\">\n {{ rangeLabelText() }}\n </span>\n }\n\n <!-- Navigation Controls -->\n <div\n class=\"flex items-center gap-1\"\n role=\"group\"\n aria-label=\"Page navigation\"\n (keydown)=\"onPageButtonsKeydown($event)\"\n >\n <!-- Previous Page -->\n <button\n type=\"button\"\n [class]=\"buttonClasses()\"\n [disabled]=\"disabled() || !hasPreviousPage()\"\n aria-label=\"Previous page\"\n (click)=\"previousPage()\"\n >\n <com-icon name=\"chevron-left\" [size]=\"iconSize()\" />\n </button>\n\n <!-- Page Numbers -->\n @for (item of pageRange(); track trackPageItem($index, item)) {\n @if (item === 'ellipsis') {\n <span\n [class]=\"ellipsisClasses()\"\n aria-hidden=\"true\"\n >…</span>\n } @else {\n <button\n #pageBtn\n type=\"button\"\n [class]=\"item === pageIndex() ? activePageButtonClasses() : inactivePageButtonClasses()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"'Page ' + (item + 1)\"\n [attr.aria-current]=\"item === pageIndex() ? 'page' : null\"\n [tabindex]=\"item === pageIndex() ? 0 : -1\"\n (click)=\"goToPage(item)\"\n >{{ item + 1 }}</button>\n }\n }\n\n <!-- Next Page -->\n <button\n type=\"button\"\n [class]=\"buttonClasses()\"\n [disabled]=\"disabled() || !hasNextPage()\"\n aria-label=\"Next page\"\n (click)=\"nextPage()\"\n >\n <com-icon name=\"chevron-right\" [size]=\"iconSize()\" />\n </button>\n </div>\n\n <!-- Compact Layout: Summary on right -->\n @if (layout() === 'compact') {\n <span [class]=\"rangeLabelClasses()\">\n {{ rangeLabelText() }}\n </span>\n }\n } @else {\n <!-- Original Layout (no page numbers) -->\n\n <!-- Page Size Selector -->\n @if (!hidePageSize() && pageSizeOptions().length > 0) {\n <div class=\"flex items-center gap-2\">\n <label\n [id]=\"pageSizeLabelId()\"\n class=\"text-muted-foreground\"\n [class.text-xs]=\"size() === 'sm'\"\n [class.text-sm]=\"size() === 'md'\"\n >\n Items per page:\n </label>\n <div class=\"relative\">\n <select\n [attr.aria-labelledby]=\"pageSizeLabelId()\"\n [class]=\"selectClasses()\"\n [disabled]=\"disabled()\"\n [value]=\"pageSize()\"\n (change)=\"onPageSizeChange($event)\"\n >\n @for (option of pageSizeOptions(); track option) {\n <option [value]=\"option\">{{ option }}</option>\n }\n </select>\n <com-icon\n name=\"chevron-down\"\n size=\"xs\"\n class=\"pointer-events-none absolute right-1.5 top-1/2 -translate-y-1/2 text-muted-foreground\"\n />\n </div>\n </div>\n }\n\n <!-- Range Label -->\n <span [class]=\"rangeLabelClasses()\">\n {{ rangeLabelText() }}\n </span>\n\n <!-- Navigation Buttons -->\n <div class=\"flex items-center gap-1\">\n <!-- First Page -->\n @if (showFirstLastButtons()) {\n <button\n type=\"button\"\n [class]=\"buttonClasses()\"\n [disabled]=\"disabled() || !hasPreviousPage()\"\n aria-label=\"First page\"\n (click)=\"firstPage()\"\n >\n <com-icon name=\"chevrons-left\" [size]=\"iconSize()\" />\n </button>\n }\n\n <!-- Previous Page -->\n <button\n type=\"button\"\n [class]=\"buttonClasses()\"\n [disabled]=\"disabled() || !hasPreviousPage()\"\n aria-label=\"Previous page\"\n (click)=\"previousPage()\"\n >\n <com-icon name=\"chevron-left\" [size]=\"iconSize()\" />\n </button>\n\n <!-- Next Page -->\n <button\n type=\"button\"\n [class]=\"buttonClasses()\"\n [disabled]=\"disabled() || !hasNextPage()\"\n aria-label=\"Next page\"\n (click)=\"nextPage()\"\n >\n <com-icon name=\"chevron-right\" [size]=\"iconSize()\" />\n </button>\n\n <!-- Last Page -->\n @if (showFirstLastButtons()) {\n <button\n type=\"button\"\n [class]=\"buttonClasses()\"\n [disabled]=\"disabled() || !hasNextPage()\"\n aria-label=\"Last page\"\n (click)=\"lastPage()\"\n >\n <com-icon name=\"chevrons-right\" [size]=\"iconSize()\" />\n </button>\n }\n </div>\n }\n </nav>\n `,\n styles: `\n com-paginator {\n display: block;\n }\n `,\n imports: [ComIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'com-paginator',\n },\n})\nexport class ComPaginator {\n // ─── View Queries ───\n\n /** Page number buttons for keyboard navigation. */\n private readonly pageButtons = viewChildren<ElementRef<HTMLButtonElement>>('pageBtn');\n\n // ─── Inputs ───\n\n /** Total number of items being paged. */\n readonly length: InputSignal<number> = input<number>(0);\n\n /** Number of items to display per page. */\n readonly pageSize: InputSignal<number> = input<number>(10);\n\n /** Current zero-based page index. */\n readonly pageIndex: InputSignal<number> = input<number>(0);\n\n /** Available page size options. Hides selector if empty. */\n readonly pageSizeOptions: InputSignal<number[]> = input<number[]>([]);\n\n /** Whether to show first/last navigation buttons. */\n readonly showFirstLastButtons: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Whether to show numbered page buttons. */\n readonly showPageNumbers: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Whether all controls are disabled. */\n readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Whether to hide the page size selector. */\n readonly hidePageSize: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Size variant. */\n readonly size: InputSignal<PaginatorSize> = input<PaginatorSize>('md');\n\n /** Layout variant. Only applies when showPageNumbers is true. */\n readonly layout: InputSignal<PaginatorLayout> = input<PaginatorLayout>('compact');\n\n /** Number of pages to show on each side of the current page. */\n readonly siblingCount: InputSignal<number> = input<number>(1);\n\n /** Number of pages to always show at the start and end. */\n readonly boundaryCount: InputSignal<number> = input<number>(1);\n\n /** Accessible label for the nav element. */\n readonly ariaLabel: InputSignal<string> = input<string>('Pagination', { alias: 'aria-label' });\n\n /** Custom function for range label formatting. */\n readonly rangeLabel: InputSignal<RangeLabelFn> = input<RangeLabelFn>(defaultRangeLabel);\n\n // ─── Outputs ───\n\n /** Emits when page index or page size changes. */\n readonly page: OutputEmitterRef<PageEvent> = output<PageEvent>();\n\n // ─── Computed ───\n\n /** Total number of pages. */\n protected readonly numberOfPages: Signal<number> = computed(() => {\n const size = this.pageSize();\n const len = this.length();\n if (size === 0 || len === 0) {\n return 0;\n }\n return Math.ceil(len / size);\n });\n\n /** Whether there is a previous page. */\n protected readonly hasPreviousPage: Signal<boolean> = computed(() => {\n return this.pageIndex() > 0 && this.pageSize() > 0;\n });\n\n /** Whether there is a next page. */\n protected readonly hasNextPage: Signal<boolean> = computed(() => {\n const total = this.numberOfPages();\n return total > 0 && this.pageIndex() < total - 1;\n });\n\n /** The formatted range label text. */\n protected readonly rangeLabelText: Signal<string> = computed(() => {\n const fn = this.rangeLabel();\n return fn(this.pageIndex(), this.pageSize(), this.length());\n });\n\n /** Icon size based on component size. */\n protected readonly iconSize: Signal<'xs' | 'sm'> = computed(() => {\n return this.size() === 'sm' ? 'xs' : 'sm';\n });\n\n /** Unique ID for page size label. */\n protected readonly pageSizeLabelId: Signal<string> = computed(() => {\n return `com-paginator-page-size-label-${uniqueId++}`;\n });\n\n /** Classes for the container. */\n protected readonly containerClasses: Signal<string> = computed(() =>\n paginatorContainerVariants({\n size: this.size(),\n layout: this.showPageNumbers() ? this.layout() : 'compact',\n })\n );\n\n /** Classes for navigation buttons. */\n protected readonly buttonClasses: Signal<string> = computed(() =>\n paginatorButtonVariants({ size: this.size() })\n );\n\n /** Classes for the range label. */\n protected readonly rangeLabelClasses: Signal<string> = computed(() =>\n paginatorRangeLabelVariants({ size: this.size() })\n );\n\n /** Classes for the page size select. */\n protected readonly selectClasses: Signal<string> = computed(() =>\n paginatorSelectVariants({ size: this.size() })\n );\n\n /** Classes for the ellipsis indicator. */\n protected readonly ellipsisClasses: Signal<string> = computed(() =>\n paginatorEllipsisVariants({ size: this.size() })\n );\n\n /** Cached classes for active page button. */\n protected readonly activePageButtonClasses: Signal<string> = computed(() =>\n paginatorPageButtonVariants({ size: this.size(), active: true })\n );\n\n /** Cached classes for inactive page button. */\n protected readonly inactivePageButtonClasses: Signal<string> = computed(() =>\n paginatorPageButtonVariants({ size: this.size(), active: false })\n );\n\n /**\n * Computed page range for numbered pagination.\n * Returns array like [0, 'ellipsis', 3, 4, 5, 'ellipsis', 9] (zero-indexed).\n */\n protected readonly pageRange: Signal<PageRangeItem[]> = computed(() => {\n const totalPages = this.numberOfPages();\n const current = this.pageIndex();\n const siblings = this.siblingCount();\n const boundaries = this.boundaryCount();\n\n if (totalPages === 0) return [];\n\n // If all pages fit without ellipses, show them all\n const totalSlots = 2 * boundaries + 2 * siblings + 3;\n if (totalPages <= totalSlots) {\n return this.range(0, totalPages - 1);\n }\n\n // Collect all page indices that should be visible (Set auto-deduplicates)\n const pages = new Set<number>();\n\n // Boundary pages (always visible)\n for (let i = 0; i < boundaries; i++) pages.add(i);\n for (let i = totalPages - boundaries; i < totalPages; i++) pages.add(i);\n\n // Sibling pages around current (including current)\n const siblingStart = Math.max(0, current - siblings);\n const siblingEnd = Math.min(totalPages - 1, current + siblings);\n for (let i = siblingStart; i <= siblingEnd; i++) pages.add(i);\n\n // Convert to sorted array and insert ellipses at gaps\n const sorted = Array.from(pages).sort((a, b) => a - b);\n const result: PageRangeItem[] = [];\n\n for (let i = 0; i < sorted.length; i++) {\n const page = sorted[i]!;\n const prevPage = sorted[i - 1];\n if (prevPage !== undefined && page - prevPage > 1) {\n result.push('ellipsis');\n }\n result.push(page);\n }\n\n return result;\n });\n\n // ─── Navigation Methods ───\n\n /** Navigate to the first page. */\n firstPage(): void {\n if (this.hasPreviousPage()) {\n this.emitPageEvent(0);\n }\n }\n\n /** Navigate to the previous page. */\n previousPage(): void {\n if (this.hasPreviousPage()) {\n this.emitPageEvent(this.pageIndex() - 1);\n }\n }\n\n /** Navigate to the next page. */\n nextPage(): void {\n if (this.hasNextPage()) {\n this.emitPageEvent(this.pageIndex() + 1);\n }\n }\n\n /** Navigate to the last page. */\n lastPage(): void {\n if (this.hasNextPage()) {\n this.emitPageEvent(this.numberOfPages() - 1);\n }\n }\n\n /** Navigate to a specific page by index (zero-based). */\n goToPage(pageIndex: number): void {\n if (pageIndex >= 0 && pageIndex < this.numberOfPages() && pageIndex !== this.pageIndex()) {\n this.emitPageEvent(pageIndex);\n }\n }\n\n /** Handle page size selection change. */\n protected onPageSizeChange(event: Event): void {\n const select = event.target as HTMLSelectElement;\n const newPageSize = Number(select.value);\n const previousPageSize = this.pageSize();\n const currentPageIndex = this.pageIndex();\n\n // Calculate new page index to keep the first item on the current page visible\n const startIndex = currentPageIndex * previousPageSize;\n const newPageIndex = Math.floor(startIndex / newPageSize);\n\n this.page.emit({\n pageIndex: newPageIndex,\n previousPageIndex: currentPageIndex,\n pageSize: newPageSize,\n length: this.length(),\n });\n }\n\n /** Handle keyboard navigation within page buttons (roving tabindex). */\n protected onPageButtonsKeydown(event: KeyboardEvent): void {\n const target = event.target as HTMLButtonElement;\n\n // Get enabled buttons from viewChildren query\n const buttons = this.pageButtons()\n .map((ref) => ref.nativeElement)\n .filter((btn) => !btn.disabled);\n\n const currentIndex = buttons.indexOf(target);\n if (currentIndex === -1) return;\n\n let newIndex: number;\n switch (event.key) {\n case 'ArrowLeft':\n newIndex = currentIndex > 0 ? currentIndex - 1 : buttons.length - 1;\n break;\n case 'ArrowRight':\n newIndex = currentIndex < buttons.length - 1 ? currentIndex + 1 : 0;\n break;\n case 'Home':\n newIndex = 0;\n break;\n case 'End':\n newIndex = buttons.length - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n buttons[newIndex]?.focus();\n }\n\n /** Track function for page items. */\n protected trackPageItem(index: number, item: PageRangeItem): string {\n return item === 'ellipsis' ? `ellipsis-${index}` : `page-${item}`;\n }\n\n // ─── Private Methods ───\n\n private emitPageEvent(newPageIndex: number): void {\n this.page.emit({\n pageIndex: newPageIndex,\n previousPageIndex: this.pageIndex(),\n pageSize: this.pageSize(),\n length: this.length(),\n });\n }\n\n /** Generate a range of numbers from start to end (inclusive). */\n private range(start: number, end: number): number[] {\n return Array.from({ length: end - start + 1 }, (_, i) => start + i);\n }\n}\n\n/** Counter for generating unique IDs. */\nlet uniqueId = 0;\n","// Public API for the paginator component\n\n// Main component\nexport { ComPaginator } from './paginator.component';\nexport type { PageRangeItem } from './paginator.component';\n\n// Models\nexport { defaultRangeLabel } from './paginator.models';\nexport type { PageEvent, RangeLabelFn } from './paginator.models';\n\n// Variants\nexport {\n paginatorContainerVariants,\n paginatorButtonVariants,\n paginatorRangeLabelVariants,\n paginatorSelectVariants,\n paginatorPageButtonVariants,\n paginatorEllipsisVariants,\n} from './paginator.variants';\n\nexport type {\n PaginatorSize,\n PaginatorLayout,\n PaginatorContainerVariants,\n PaginatorButtonVariants,\n PaginatorRangeLabelVariants,\n PaginatorSelectVariants,\n PaginatorPageButtonVariants,\n PaginatorEllipsisVariants,\n} from './paginator.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ const radioCircleVariants = cva([
22
22
  'inline-flex shrink-0 items-center justify-center',
23
23
  'rounded-full border-2 border-border',
24
24
  'transition-colors duration-150',
25
- 'peer-focus-visible:outline-2 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-ring',
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
  ], {
28
28
  variants: {
@@ -159,8 +159,11 @@ class ComRadioGroup {
159
159
  variant = input('primary', ...(ngDevMode ? [{ debugName: "variant" }] : []));
160
160
  errorMessage = input('', ...(ngDevMode ? [{ debugName: "errorMessage" }] : []));
161
161
  errorStateMatcher = input(...(ngDevMode ? [undefined, { debugName: "errorStateMatcher" }] : []));
162
- /** Internal signal to track when control is touched, used to trigger error state re-evaluation. */
163
- _touched = signal(false, ...(ngDevMode ? [{ debugName: "_touched" }] : []));
162
+ /** Tracks touched state writable by both CVA callback and Signal Forms [formField]. */
163
+ touched = model(false, ...(ngDevMode ? [{ debugName: "touched" }] : []));
164
+ // Signal Forms inputs — set automatically by [formField] via setInputOnDirectives
165
+ invalid = input(false, ...(ngDevMode ? [{ debugName: "invalid" }] : []));
166
+ sfErrors = input([], { ...(ngDevMode ? { debugName: "sfErrors" } : {}), alias: 'errors' });
164
167
  ariaLabel = input(null, { ...(ngDevMode ? { debugName: "ariaLabel" } : {}), alias: 'aria-label' });
165
168
  ariaLabelledby = input(null, { ...(ngDevMode ? { debugName: "ariaLabelledby" } : {}), alias: 'aria-labelledby' });
166
169
  ariaDescribedby = input(null, { ...(ngDevMode ? { debugName: "ariaDescribedby" } : {}), alias: 'aria-describedby' });
@@ -185,11 +188,15 @@ class ComRadioGroup {
185
188
  * Shows errors when control is invalid and touched/submitted.
186
189
  */
187
190
  errorState = computed(() => {
188
- // Read _touched to trigger re-evaluation when touched changes
189
- this._touched();
191
+ if (!this.ngControl) {
192
+ // Signal Forms: gate on invalid AND touched (mirrors ErrorStateMatcher default)
193
+ return this.invalid() && this.touched();
194
+ }
195
+ // Reactive Forms: use ErrorStateMatcher (existing logic)
196
+ this.touched();
190
197
  const matcher = this.errorStateMatcher() ?? this.defaultErrorStateMatcher;
191
198
  const form = this.parentFormGroup ?? this.parentForm;
192
- return matcher.isErrorState(this.ngControl?.control ?? null, form);
199
+ return matcher.isErrorState(this.ngControl.control ?? null, form);
193
200
  }, ...(ngDevMode ? [{ debugName: "errorState" }] : []));
194
201
  computedAriaDescribedby = computed(() => {
195
202
  const userDescribedby = this.ariaDescribedby();
@@ -242,7 +249,7 @@ class ComRadioGroup {
242
249
  }
243
250
  registerOnTouched(fn) {
244
251
  this.onTouchedCallback = () => {
245
- this._touched.set(true);
252
+ this.touched.set(true);
246
253
  fn();
247
254
  };
248
255
  }
@@ -293,7 +300,7 @@ class ComRadioGroup {
293
300
  }
294
301
  }
295
302
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComRadioGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
296
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ComRadioGroup, isStandalone: true, selector: "com-radio-group", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, errorStateMatcher: { classPropertyName: "errorStateMatcher", publicName: "errorStateMatcher", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedby: { classPropertyName: "ariaDescribedby", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", disabled: "disabledChange", selectionChange: "selectionChange" }, host: { properties: { "class.com-radio-group--disabled": "disabled()", "class.com-radio-group--error": "errorState()" }, classAttribute: "com-radio-group block" }, providers: [
303
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ComRadioGroup, isStandalone: true, selector: "com-radio-group", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, errorStateMatcher: { classPropertyName: "errorStateMatcher", publicName: "errorStateMatcher", isSignal: true, isRequired: false, transformFunction: null }, touched: { classPropertyName: "touched", publicName: "touched", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null }, sfErrors: { classPropertyName: "sfErrors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, ariaDescribedby: { classPropertyName: "ariaDescribedby", publicName: "aria-describedby", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", disabled: "disabledChange", touched: "touchedChange", selectionChange: "selectionChange" }, host: { properties: { "class.com-radio-group--disabled": "disabled()", "class.com-radio-group--error": "errorState()" }, classAttribute: "com-radio-group block" }, providers: [
297
304
  {
298
305
  provide: COM_RADIO_GROUP,
299
306
  useFactory: () => {
@@ -368,7 +375,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
368
375
  '[class.com-radio-group--error]': 'errorState()',
369
376
  },
370
377
  }]
371
- }], ctorParameters: () => [], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], errorStateMatcher: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorStateMatcher", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaLabelledby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], ariaDescribedby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-describedby", required: false }] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }] } });
378
+ }], ctorParameters: () => [], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], errorStateMatcher: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorStateMatcher", required: false }] }], touched: [{ type: i0.Input, args: [{ isSignal: true, alias: "touched", required: false }] }, { type: i0.Output, args: ["touchedChange"] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], sfErrors: [{ type: i0.Input, args: [{ isSignal: true, alias: "errors", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaLabelledby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], ariaDescribedby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-describedby", required: false }] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }] } });
372
379
 
373
380
  /**
374
381
  * Production-grade radio component with full accessibility support.