ngx-com 0.0.21 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +137 -33
- package/fesm2022/ngx-com-components-alert.mjs +21 -11
- package/fesm2022/ngx-com-components-alert.mjs.map +1 -1
- package/fesm2022/ngx-com-components-avatar.mjs +9 -7
- package/fesm2022/ngx-com-components-avatar.mjs.map +1 -1
- package/fesm2022/ngx-com-components-button.mjs +1 -1
- package/fesm2022/ngx-com-components-button.mjs.map +1 -1
- package/fesm2022/ngx-com-components-calendar.mjs +27 -3112
- package/fesm2022/ngx-com-components-calendar.mjs.map +1 -1
- package/fesm2022/ngx-com-components-card.mjs +8 -8
- package/fesm2022/ngx-com-components-card.mjs.map +1 -1
- package/fesm2022/ngx-com-components-carousel.mjs +16 -4
- package/fesm2022/ngx-com-components-carousel.mjs.map +1 -1
- package/fesm2022/ngx-com-components-checkbox.mjs +1 -1
- package/fesm2022/ngx-com-components-checkbox.mjs.map +1 -1
- package/fesm2022/ngx-com-components-code-block.mjs +9 -9
- package/fesm2022/ngx-com-components-code-block.mjs.map +1 -1
- package/fesm2022/ngx-com-components-collapsible.mjs +15 -13
- package/fesm2022/ngx-com-components-collapsible.mjs.map +1 -1
- package/fesm2022/ngx-com-components-confirm.mjs +4 -4
- package/fesm2022/ngx-com-components-confirm.mjs.map +1 -1
- package/fesm2022/ngx-com-components-datepicker.mjs +2334 -0
- package/fesm2022/ngx-com-components-datepicker.mjs.map +1 -0
- package/fesm2022/ngx-com-components-dialog.mjs +47 -45
- package/fesm2022/ngx-com-components-dialog.mjs.map +1 -1
- package/fesm2022/ngx-com-components-dropdown.mjs +446 -340
- package/fesm2022/ngx-com-components-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-com-components-empty-state.mjs +5 -3
- package/fesm2022/ngx-com-components-empty-state.mjs.map +1 -1
- package/fesm2022/ngx-com-components-form-field.mjs +11 -6
- package/fesm2022/ngx-com-components-form-field.mjs.map +1 -1
- package/fesm2022/ngx-com-components-icon-lucide.mjs +41 -0
- package/fesm2022/ngx-com-components-icon-lucide.mjs.map +1 -0
- package/fesm2022/ngx-com-components-icon.mjs +89 -61
- package/fesm2022/ngx-com-components-icon.mjs.map +1 -1
- package/fesm2022/ngx-com-components-item.mjs +14 -4
- package/fesm2022/ngx-com-components-item.mjs.map +1 -1
- package/fesm2022/ngx-com-components-menu.mjs +61 -69
- package/fesm2022/ngx-com-components-menu.mjs.map +1 -1
- package/fesm2022/ngx-com-components-native-control.mjs +170 -0
- package/fesm2022/ngx-com-components-native-control.mjs.map +1 -0
- package/fesm2022/ngx-com-components-paginator.mjs +11 -3
- package/fesm2022/ngx-com-components-paginator.mjs.map +1 -1
- package/fesm2022/ngx-com-components-popover.mjs +58 -33
- package/fesm2022/ngx-com-components-popover.mjs.map +1 -1
- package/fesm2022/ngx-com-components-radio.mjs +4 -4
- package/fesm2022/ngx-com-components-radio.mjs.map +1 -1
- package/fesm2022/ngx-com-components-segmented-control.mjs +6 -4
- package/fesm2022/ngx-com-components-segmented-control.mjs.map +1 -1
- package/fesm2022/ngx-com-components-sort.mjs +63 -57
- package/fesm2022/ngx-com-components-sort.mjs.map +1 -1
- package/fesm2022/ngx-com-components-spinner.mjs +6 -6
- package/fesm2022/ngx-com-components-spinner.mjs.map +1 -1
- package/fesm2022/ngx-com-components-switch.mjs +18 -9
- package/fesm2022/ngx-com-components-switch.mjs.map +1 -1
- package/fesm2022/ngx-com-components-table.mjs +23 -9
- package/fesm2022/ngx-com-components-table.mjs.map +1 -1
- package/fesm2022/ngx-com-components-tabs.mjs +81 -58
- package/fesm2022/ngx-com-components-tabs.mjs.map +1 -1
- package/fesm2022/ngx-com-components-timepicker.mjs +1048 -0
- package/fesm2022/ngx-com-components-timepicker.mjs.map +1 -0
- package/fesm2022/ngx-com-components-toast.mjs +18 -14
- package/fesm2022/ngx-com-components-toast.mjs.map +1 -1
- package/fesm2022/ngx-com-components-tooltip.mjs +5 -5
- package/fesm2022/ngx-com-components-tooltip.mjs.map +1 -1
- package/fesm2022/ngx-com-components.mjs +0 -13
- package/fesm2022/ngx-com-components.mjs.map +1 -1
- package/fesm2022/ngx-com-tokens.mjs +0 -8
- package/fesm2022/ngx-com-tokens.mjs.map +1 -1
- package/fesm2022/ngx-com-utils.mjs +13 -1
- package/fesm2022/ngx-com-utils.mjs.map +1 -1
- package/fesm2022/ngx-com.mjs +1 -1
- package/fesm2022/ngx-com.mjs.map +1 -1
- package/package.json +51 -8
- package/styles/animations.css +38 -0
- package/styles/candy.css +121 -0
- package/styles/dark.css +159 -0
- package/styles/forest.css +117 -0
- package/styles/ocean.css +117 -0
- package/styles/themes.css +7 -0
- package/styles/tokens.css +277 -0
- package/styles/utilities.css +16 -0
- package/types/ngx-com-components-alert.d.ts +14 -4
- package/types/ngx-com-components-avatar.d.ts +2 -0
- package/types/ngx-com-components-calendar.d.ts +3 -747
- package/types/ngx-com-components-card.d.ts +2 -2
- package/types/ngx-com-components-carousel.d.ts +11 -1
- package/types/ngx-com-components-code-block.d.ts +4 -4
- package/types/ngx-com-components-collapsible.d.ts +10 -2
- package/types/ngx-com-components-confirm.d.ts +2 -2
- package/types/ngx-com-components-datepicker.d.ts +623 -0
- package/types/ngx-com-components-dialog.d.ts +5 -2
- package/types/ngx-com-components-dropdown.d.ts +22 -4
- package/types/ngx-com-components-empty-state.d.ts +2 -0
- package/types/ngx-com-components-form-field.d.ts +4 -1
- package/types/ngx-com-components-icon-lucide.d.ts +32 -0
- package/types/ngx-com-components-icon.d.ts +49 -35
- package/types/ngx-com-components-item.d.ts +12 -2
- package/types/ngx-com-components-menu.d.ts +38 -38
- package/types/ngx-com-components-native-control.d.ts +99 -0
- package/types/ngx-com-components-paginator.d.ts +2 -0
- package/types/ngx-com-components-popover.d.ts +19 -12
- package/types/ngx-com-components-segmented-control.d.ts +3 -1
- package/types/ngx-com-components-sort.d.ts +13 -10
- package/types/ngx-com-components-switch.d.ts +7 -2
- package/types/ngx-com-components-table.d.ts +16 -2
- package/types/ngx-com-components-tabs.d.ts +46 -34
- package/types/ngx-com-components-timepicker.d.ts +273 -0
- package/types/ngx-com-components-toast.d.ts +4 -2
- package/types/ngx-com-components-tooltip.d.ts +1 -1
- package/types/ngx-com-components.d.ts +6 -7
- package/types/ngx-com-tokens.d.ts +5 -3
- package/types/ngx-com-utils.d.ts +11 -1
- package/types/ngx-com.d.ts +1 -1
|
@@ -6,14 +6,14 @@ import { cva } from 'class-variance-authority';
|
|
|
6
6
|
/**
|
|
7
7
|
* CVA variants for the card container.
|
|
8
8
|
*
|
|
9
|
-
* @tokens `--color-
|
|
10
|
-
* `--color-foreground`, `--color-border`, `--color-primary`, `--color-ring`
|
|
9
|
+
* @tokens `--color-card`, `--color-card-foreground`, `--color-muted`, `--color-muted-hover`,
|
|
10
|
+
* `--color-foreground`, `--color-border`, `--color-primary`, `--color-ring`, `--shadow-card`
|
|
11
11
|
*/
|
|
12
12
|
const cardVariants = cva('relative flex flex-col overflow-hidden', {
|
|
13
13
|
variants: {
|
|
14
14
|
variant: {
|
|
15
|
-
elevated: 'bg-
|
|
16
|
-
outlined: 'bg-
|
|
15
|
+
elevated: 'bg-card text-card-foreground shadow-card',
|
|
16
|
+
outlined: 'bg-card text-card-foreground border border-border',
|
|
17
17
|
filled: 'bg-muted text-foreground',
|
|
18
18
|
ghost: 'bg-transparent text-foreground',
|
|
19
19
|
},
|
|
@@ -36,10 +36,10 @@ const cardVariants = cva('relative flex flex-col overflow-hidden', {
|
|
|
36
36
|
},
|
|
37
37
|
},
|
|
38
38
|
compoundVariants: [
|
|
39
|
-
{ interactive: true, variant: 'elevated', class: 'hover:shadow-lg active:shadow-sm transition-shadow duration-
|
|
40
|
-
{ interactive: true, variant: 'outlined', class: 'hover:border-primary hover:shadow-sm transition-all duration-
|
|
41
|
-
{ interactive: true, variant: 'filled', class: 'hover:bg-muted-hover transition-colors duration-
|
|
42
|
-
{ interactive: true, variant: 'ghost', class: 'hover:bg-muted transition-colors duration-
|
|
39
|
+
{ interactive: true, variant: 'elevated', class: 'hover:shadow-lg active:shadow-sm transition-shadow duration-normal' },
|
|
40
|
+
{ interactive: true, variant: 'outlined', class: 'hover:border-primary hover:shadow-sm transition-all duration-normal' },
|
|
41
|
+
{ interactive: true, variant: 'filled', class: 'hover:bg-muted-hover transition-colors duration-normal' },
|
|
42
|
+
{ interactive: true, variant: 'ghost', class: 'hover:bg-muted transition-colors duration-normal' },
|
|
43
43
|
],
|
|
44
44
|
defaultVariants: {
|
|
45
45
|
variant: 'elevated',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-com-components-card.mjs","sources":["../../../projects/com/components/card/card.variants.ts","../../../projects/com/components/card/card.component.ts","../../../projects/com/components/card/card-header.directive.ts","../../../projects/com/components/card/card-title.directive.ts","../../../projects/com/components/card/card-subtitle.directive.ts","../../../projects/com/components/card/card-content.directive.ts","../../../projects/com/components/card/card-footer.directive.ts","../../../projects/com/components/card/card-actions.directive.ts","../../../projects/com/components/card/card-media.directive.ts","../../../projects/com/components/card/card-divider.directive.ts","../../../projects/com/components/card/card-accent.directive.ts","../../../projects/com/components/card/card-badge.directive.ts","../../../projects/com/components/card/index.ts","../../../projects/com/components/card/ngx-com-components-card.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\n// Card container types\nexport type CardVariant = 'elevated' | 'outlined' | 'filled' | 'ghost';\nexport type CardPadding = 'none' | 'sm' | 'md' | 'lg';\nexport type CardRadius = 'none' | 'sm' | 'md' | 'lg' | 'xl';\n\n// Card footer / actions alignment\nexport type CardAlign = 'start' | 'end' | 'center' | 'between';\n\n// Card actions direction\nexport type CardActionsDirection = 'row' | 'column';\n\n// Card media position\nexport type CardMediaPosition = 'top' | 'bottom' | 'inset';\n\n// Card accent types\nexport type CardAccentColor = 'primary' | 'accent' | 'warn' | 'success' | 'muted';\nexport type CardAccentPosition = 'top' | 'left';\n\n// Card badge types\nexport type CardBadgeColor = 'primary' | 'accent' | 'warn' | 'success' | 'muted';\nexport type CardBadgePosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\n/**\n * CVA variants for the card container.\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-muted`, `--color-muted-hover`,\n * `--color-foreground`, `--color-border`, `--color-primary`, `--color-ring`\n */\nexport const cardVariants: (props?: {\n variant?: CardVariant;\n padding?: CardPadding;\n radius?: CardRadius;\n interactive?: boolean;\n}) => string = cva('relative flex flex-col overflow-hidden', {\n variants: {\n variant: {\n elevated: 'bg-popover text-popover-foreground shadow-md',\n outlined: 'bg-popover text-popover-foreground border border-border',\n filled: 'bg-muted text-foreground',\n ghost: 'bg-transparent text-foreground',\n },\n padding: {\n none: '',\n sm: 'p-3',\n md: 'p-5',\n lg: 'p-7',\n },\n radius: {\n none: 'rounded-none',\n sm: 'rounded-[var(--radius-sm)]',\n md: 'rounded-[var(--radius-md)]',\n lg: 'rounded-card',\n xl: 'rounded-[var(--radius-xl)]',\n },\n interactive: {\n true: 'cursor-pointer focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n false: '',\n },\n },\n compoundVariants: [\n { interactive: true, variant: 'elevated', class: 'hover:shadow-lg active:shadow-sm transition-shadow duration-150' },\n { interactive: true, variant: 'outlined', class: 'hover:border-primary hover:shadow-sm transition-all duration-150' },\n { interactive: true, variant: 'filled', class: 'hover:bg-muted-hover transition-colors duration-150' },\n { interactive: true, variant: 'ghost', class: 'hover:bg-muted transition-colors duration-150' },\n ],\n defaultVariants: {\n variant: 'elevated',\n padding: 'none',\n radius: 'lg',\n interactive: false,\n },\n});\n\nexport type CardVariants = VariantProps<typeof cardVariants>;\n\n/**\n * CVA variants for card footer alignment.\n */\nexport const cardFooterVariants: (props?: {\n align?: CardAlign;\n}) => string = cva('flex items-center gap-2 px-5 pt-0 pb-5', {\n variants: {\n align: {\n start: 'justify-start',\n end: 'justify-end',\n center: 'justify-center',\n between: 'justify-between',\n },\n },\n defaultVariants: {\n align: 'end',\n },\n});\n\nexport type CardFooterVariants = VariantProps<typeof cardFooterVariants>;\n\n/**\n * CVA variants for card actions.\n */\nexport const cardActionsVariants: (props?: {\n align?: CardAlign;\n direction?: CardActionsDirection;\n}) => string = cva('flex gap-2 px-5 py-3', {\n variants: {\n align: {\n start: 'justify-start',\n end: 'justify-end',\n center: 'justify-center',\n between: 'justify-between',\n },\n direction: {\n row: 'flex-row items-center',\n column: 'flex-col items-stretch',\n },\n },\n defaultVariants: {\n align: 'end',\n direction: 'row',\n },\n});\n\nexport type CardActionsVariants = VariantProps<typeof cardActionsVariants>;\n\n/**\n * CVA variants for card media positioning.\n */\nexport const cardMediaVariants: (props?: {\n position?: CardMediaPosition;\n}) => string = cva('block w-full overflow-hidden object-cover', {\n variants: {\n position: {\n top: '',\n bottom: '',\n inset: 'mx-5 mt-5 rounded-media',\n },\n },\n defaultVariants: {\n position: 'top',\n },\n});\n\nexport type CardMediaVariants = VariantProps<typeof cardMediaVariants>;\n\n/**\n * CVA variants for card accent strip.\n *\n * @tokens `--color-primary`, `--color-accent`, `--color-warn`, `--color-success`, `--color-muted`\n */\nexport const cardAccentVariants: (props?: {\n color?: CardAccentColor;\n position?: CardAccentPosition;\n}) => string = cva('block shrink-0', {\n variants: {\n color: {\n primary: 'bg-primary',\n accent: 'bg-accent',\n warn: 'bg-warn',\n success: 'bg-success',\n muted: 'bg-muted',\n },\n position: {\n top: 'h-1 w-full',\n left: 'w-1 h-full absolute left-0 top-0',\n },\n },\n defaultVariants: {\n color: 'primary',\n position: 'top',\n },\n});\n\nexport type CardAccentVariants = VariantProps<typeof cardAccentVariants>;\n\n/**\n * CVA variants for card badge overlay.\n *\n * @tokens `--color-primary`, `--color-primary-foreground`, `--color-accent`, `--color-accent-foreground`,\n * `--color-warn`, `--color-warn-foreground`, `--color-success`, `--color-success-foreground`,\n * `--color-muted`, `--color-muted-foreground`, `--radius-card`, `--radius-media`, `--radius-pill`\n */\nexport const cardBadgeVariants: (props?: {\n position?: CardBadgePosition;\n color?: CardBadgeColor;\n}) => string = cva(\n 'absolute z-10 inline-flex items-center rounded-pill px-2.5 py-0.5 text-xs font-semibold',\n {\n variants: {\n position: {\n 'top-left': 'top-3 left-3',\n 'top-right': 'top-3 right-3',\n 'bottom-left': 'bottom-3 left-3',\n 'bottom-right': 'bottom-3 right-3',\n },\n color: {\n primary: 'bg-primary text-primary-foreground',\n accent: 'bg-accent text-accent-foreground',\n warn: 'bg-warn text-warn-foreground',\n success: 'bg-success text-success-foreground',\n muted: 'bg-muted text-muted-foreground',\n },\n },\n defaultVariants: {\n position: 'top-right',\n color: 'primary',\n },\n }\n);\n\nexport type CardBadgeVariants = VariantProps<typeof cardBadgeVariants>;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { mergeClasses } from './card.utils';\nimport { cardVariants } from './card.variants';\nimport type { CardVariant, CardPadding, CardRadius } from './card.variants';\n\n/**\n * Card container component - a styled surface for content.\n *\n * The card is a pure container with no imposed structure.\n * Use card directives (comCardHeader, comCardContent, etc.) to compose layouts.\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-muted`, `--color-muted-hover`,\n * `--color-foreground`, `--color-border`, `--color-primary`, `--color-ring`\n *\n * @example Basic card\n * ```html\n * <com-card>\n * <div comCardContent>Simple content</div>\n * </com-card>\n * ```\n *\n * @example Interactive card\n * ```html\n * <com-card [interactive]=\"true\" (click)=\"onCardClick()\">\n * <div comCardContent>Clickable card</div>\n * </com-card>\n * ```\n *\n * @example Outlined variant with custom padding\n * ```html\n * <com-card variant=\"outlined\" padding=\"md\">\n * <p>Outlined card with medium padding</p>\n * </com-card>\n * ```\n */\n@Component({\n selector: 'com-card',\n exportAs: 'comCard',\n template: `<ng-content />`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCard {\n /** Visual treatment of the card surface. */\n readonly variant: InputSignal<CardVariant> = input<CardVariant>('elevated');\n\n /** Inner spacing. Default 'none' - sub-parts manage their own padding. */\n readonly padding: InputSignal<CardPadding> = input<CardPadding>('none');\n\n /** Border radius. */\n readonly radius: InputSignal<CardRadius> = input<CardRadius>('lg');\n\n /** When true, adds hover/active states and cursor-pointer. */\n readonly interactive: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Consumer CSS classes - merged with variant classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n cardVariants({\n variant: this.variant(),\n padding: this.padding(),\n radius: this.radius(),\n interactive: this.interactive(),\n }),\n this.userClass()\n )\n );\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Card header directive - top section for title and actions.\n *\n * Uses justify-between so it naturally supports a title group on the left\n * and an action element (icon button, menu trigger) on the right.\n *\n * @example Header with title\n * ```html\n * <div comCardHeader>\n * <h3 comCardTitle>Card Title</h3>\n * </div>\n * ```\n *\n * @example Header with title and action\n * ```html\n * <div comCardHeader>\n * <div>\n * <h3 comCardTitle>Title</h3>\n * <p comCardSubtitle>Subtitle</p>\n * </div>\n * <button comButton variant=\"ghost\" size=\"icon\" aria-label=\"More\">...</button>\n * </div>\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardHeader]',\n exportAs: 'comCardHeader',\n host: {\n class: 'flex items-start justify-between gap-3 px-5 pt-5 pb-0',\n },\n})\nexport class ComCardHeader {}\n","import { Directive } from '@angular/core';\n\n/**\n * Card title directive - styled heading text.\n *\n * Apply to any heading element. Consumer picks the semantic level (h2, h3, etc.).\n *\n * @example\n * ```html\n * <h3 comCardTitle>Project Alpha</h3>\n * ```\n *\n * @tokens `--color-foreground`\n */\n@Directive({\n selector: '[comCardTitle]',\n exportAs: 'comCardTitle',\n host: {\n class: 'font-heading text-lg font-semibold tracking-tight text-foreground',\n },\n})\nexport class ComCardTitle {}\n","import { Directive } from '@angular/core';\n\n/**\n * Card subtitle directive - secondary text styling.\n *\n * @example\n * ```html\n * <p comCardSubtitle>Last updated 2 hours ago</p>\n * ```\n *\n * @tokens `--color-muted-foreground`\n */\n@Directive({\n selector: '[comCardSubtitle]',\n exportAs: 'comCardSubtitle',\n host: {\n class: 'text-sm text-muted-foreground',\n },\n})\nexport class ComCardSubtitle {}\n","import { Directive } from '@angular/core';\n\n/**\n * Card content directive - main body area with consistent padding.\n *\n * @example\n * ```html\n * <div comCardContent>\n * <p>Card body content goes here.</p>\n * </div>\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardContent]',\n exportAs: 'comCardContent',\n host: {\n class: 'flex-1 px-5 py-4 text-sm',\n },\n})\nexport class ComCardContent {}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { cardFooterVariants } from './card.variants';\nimport type { CardAlign } from './card.variants';\n\n/**\n * Card footer directive - bottom section for metadata or secondary actions.\n *\n * @example Footer with alignment\n * ```html\n * <div comCardFooter align=\"between\">\n * <span class=\"text-sm text-muted-foreground\">Updated 3m ago</span>\n * <a comButton variant=\"link\" size=\"sm\">View details</a>\n * </div>\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardFooter]',\n exportAs: 'comCardFooter',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardFooter {\n /** Horizontal alignment of footer content. */\n readonly align: InputSignal<CardAlign> = input<CardAlign>('end');\n\n protected readonly computedClass: Signal<string> = computed(() =>\n cardFooterVariants({ align: this.align() })\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { cardActionsVariants } from './card.variants';\nimport type { CardAlign, CardActionsDirection } from './card.variants';\n\n/**\n * Card actions directive - dedicated button row for primary card actions.\n *\n * Separate from footer because actions and footer metadata serve different purposes.\n *\n * @example Actions with alignment\n * ```html\n * <div comCardActions>\n * <button comButton variant=\"ghost\" size=\"sm\">Cancel</button>\n * <button comButton size=\"sm\">Confirm</button>\n * </div>\n * ```\n *\n * @example Stacked column layout\n * ```html\n * <div comCardActions direction=\"column\" align=\"start\">\n * <button comButton fullWidth>Primary Action</button>\n * <button comButton variant=\"outline\" fullWidth>Secondary</button>\n * </div>\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardActions]',\n exportAs: 'comCardActions',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardActions {\n /** Horizontal alignment of actions. */\n readonly align: InputSignal<CardAlign> = input<CardAlign>('end');\n\n /** Layout direction - row or column. */\n readonly direction: InputSignal<CardActionsDirection> = input<CardActionsDirection>('row');\n\n protected readonly computedClass: Signal<string> = computed(() =>\n cardActionsVariants({\n align: this.align(),\n direction: this.direction(),\n })\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { cardMediaVariants } from './card.variants';\nimport type { CardMediaPosition } from './card.variants';\n\n/**\n * Card media directive - image/video slot with aspect ratio handling.\n *\n * Apply to <img>, <video>, <picture>, or a wrapper <div>.\n *\n * @example Top media (bleeds to edge)\n * ```html\n * <img comCardMedia src=\"/hero.jpg\" alt=\"Hero image\" />\n * ```\n *\n * @example Inset media (padded with rounded corners)\n * ```html\n * <img comCardMedia position=\"inset\" src=\"/preview.jpg\" alt=\"Preview\" />\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardMedia]',\n exportAs: 'comCardMedia',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardMedia {\n /** Media positioning within the card. */\n readonly position: InputSignal<CardMediaPosition> = input<CardMediaPosition>('top');\n\n protected readonly computedClass: Signal<string> = computed(() =>\n cardMediaVariants({ position: this.position() })\n );\n}\n","import { booleanAttribute, computed, Directive, input } from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { mergeClasses } from './card.utils';\n\n/**\n * Card divider directive - horizontal rule between card sections.\n *\n * @example Standard divider (with side margins)\n * ```html\n * <hr comCardDivider />\n * ```\n *\n * @example Full-width divider (edge to edge)\n * ```html\n * <hr comCardDivider [inset]=\"true\" />\n * ```\n *\n * @tokens `--color-border`\n */\n@Directive({\n selector: '[comCardDivider]',\n exportAs: 'comCardDivider',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardDivider {\n /** When true, divider spans full card width (no horizontal margin). */\n readonly inset: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Consumer CSS classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n 'block border-t border-border',\n this.inset() ? 'mx-0' : 'mx-5',\n this.userClass()\n )\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { cardAccentVariants } from './card.variants';\nimport type { CardAccentColor, CardAccentPosition } from './card.variants';\n\n/**\n * Card accent directive - colored strip for status or category indication.\n *\n * Place as the first child of the card for top accent, or use position=\"left\"\n * for a left-edge strip (requires adding left padding to content).\n *\n * @tokens `--color-primary`, `--color-accent`, `--color-warn`, `--color-success`, `--color-muted`\n *\n * @example Top accent strip\n * ```html\n * <com-card>\n * <div comCardAccent color=\"warn\"></div>\n * <div comCardContent>Warning content</div>\n * </com-card>\n * ```\n *\n * @example Left accent strip\n * ```html\n * <com-card>\n * <div comCardAccent color=\"success\" position=\"left\"></div>\n * <div comCardContent class=\"pl-5\">Content with left padding</div>\n * </com-card>\n * ```\n */\n@Directive({\n selector: '[comCardAccent]',\n exportAs: 'comCardAccent',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardAccent {\n /** Accent color. */\n readonly color: InputSignal<CardAccentColor> = input<CardAccentColor>('primary');\n\n /** Position of the accent strip. */\n readonly position: InputSignal<CardAccentPosition> = input<CardAccentPosition>('top');\n\n protected readonly computedClass: Signal<string> = computed(() =>\n cardAccentVariants({\n color: this.color(),\n position: this.position(),\n })\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { cardBadgeVariants } from './card.variants';\nimport type { CardBadgeColor, CardBadgePosition } from './card.variants';\n\n/**\n * Card badge directive - positioned overlay for labels, tags, or status indicators.\n *\n * Floats over the card content (e.g., \"NEW\", \"SALE\", \"Featured\").\n *\n * @tokens `--color-primary`, `--color-primary-foreground`, `--color-accent`, `--color-accent-foreground`,\n * `--color-warn`, `--color-warn-foreground`, `--color-success`, `--color-success-foreground`,\n * `--color-muted`, `--color-muted-foreground`, `--radius-pill`\n *\n * @example Badge in top-right corner\n * ```html\n * <com-card>\n * <span comCardBadge>NEW</span>\n * <img comCardMedia src=\"/product.jpg\" alt=\"Product\" />\n * </com-card>\n * ```\n *\n * @example Badge with custom position and color\n * ```html\n * <com-card>\n * <span comCardBadge position=\"top-left\" color=\"warn\">SALE</span>\n * <div comCardContent>Product details</div>\n * </com-card>\n * ```\n */\n@Directive({\n selector: '[comCardBadge]',\n exportAs: 'comCardBadge',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardBadge {\n /** Badge position within the card. */\n readonly position: InputSignal<CardBadgePosition> = input<CardBadgePosition>('top-right');\n\n /** Badge color. */\n readonly color: InputSignal<CardBadgeColor> = input<CardBadgeColor>('primary');\n\n protected readonly computedClass: Signal<string> = computed(() =>\n cardBadgeVariants({\n position: this.position(),\n color: this.color(),\n })\n );\n}\n","// Public API for the card component system\n\n// Main component\nexport { ComCard } from './card.component';\n\n// Directives\nexport { ComCardHeader } from './card-header.directive';\nexport { ComCardTitle } from './card-title.directive';\nexport { ComCardSubtitle } from './card-subtitle.directive';\nexport { ComCardContent } from './card-content.directive';\nexport { ComCardFooter } from './card-footer.directive';\nexport { ComCardActions } from './card-actions.directive';\nexport { ComCardMedia } from './card-media.directive';\nexport { ComCardDivider } from './card-divider.directive';\nexport { ComCardAccent } from './card-accent.directive';\nexport { ComCardBadge } from './card-badge.directive';\n\n// Variants (for advanced customization)\nexport {\n cardVariants,\n cardFooterVariants,\n cardActionsVariants,\n cardMediaVariants,\n cardAccentVariants,\n cardBadgeVariants,\n} from './card.variants';\n\nexport type {\n CardVariant,\n CardPadding,\n CardRadius,\n CardAlign,\n CardActionsDirection,\n CardMediaPosition,\n CardAccentColor,\n CardAccentPosition,\n CardBadgeColor,\n CardBadgePosition,\n CardVariants,\n CardFooterVariants,\n CardActionsVariants,\n CardMediaVariants,\n CardAccentVariants,\n CardBadgeVariants,\n} from './card.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-card.mjs","sources":["../../../projects/com/components/card/card.variants.ts","../../../projects/com/components/card/card.component.ts","../../../projects/com/components/card/card-header.directive.ts","../../../projects/com/components/card/card-title.directive.ts","../../../projects/com/components/card/card-subtitle.directive.ts","../../../projects/com/components/card/card-content.directive.ts","../../../projects/com/components/card/card-footer.directive.ts","../../../projects/com/components/card/card-actions.directive.ts","../../../projects/com/components/card/card-media.directive.ts","../../../projects/com/components/card/card-divider.directive.ts","../../../projects/com/components/card/card-accent.directive.ts","../../../projects/com/components/card/card-badge.directive.ts","../../../projects/com/components/card/index.ts","../../../projects/com/components/card/ngx-com-components-card.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\n// Card container types\nexport type CardVariant = 'elevated' | 'outlined' | 'filled' | 'ghost';\nexport type CardPadding = 'none' | 'sm' | 'md' | 'lg';\nexport type CardRadius = 'none' | 'sm' | 'md' | 'lg' | 'xl';\n\n// Card footer / actions alignment\nexport type CardAlign = 'start' | 'end' | 'center' | 'between';\n\n// Card actions direction\nexport type CardActionsDirection = 'row' | 'column';\n\n// Card media position\nexport type CardMediaPosition = 'top' | 'bottom' | 'inset';\n\n// Card accent types\nexport type CardAccentColor = 'primary' | 'accent' | 'warn' | 'success' | 'muted';\nexport type CardAccentPosition = 'top' | 'left';\n\n// Card badge types\nexport type CardBadgeColor = 'primary' | 'accent' | 'warn' | 'success' | 'muted';\nexport type CardBadgePosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';\n\n/**\n * CVA variants for the card container.\n *\n * @tokens `--color-card`, `--color-card-foreground`, `--color-muted`, `--color-muted-hover`,\n * `--color-foreground`, `--color-border`, `--color-primary`, `--color-ring`, `--shadow-card`\n */\nexport const cardVariants: (props?: {\n variant?: CardVariant;\n padding?: CardPadding;\n radius?: CardRadius;\n interactive?: boolean;\n}) => string = cva('relative flex flex-col overflow-hidden', {\n variants: {\n variant: {\n elevated: 'bg-card text-card-foreground shadow-card',\n outlined: 'bg-card text-card-foreground border border-border',\n filled: 'bg-muted text-foreground',\n ghost: 'bg-transparent text-foreground',\n },\n padding: {\n none: '',\n sm: 'p-3',\n md: 'p-5',\n lg: 'p-7',\n },\n radius: {\n none: 'rounded-none',\n sm: 'rounded-[var(--radius-sm)]',\n md: 'rounded-[var(--radius-md)]',\n lg: 'rounded-card',\n xl: 'rounded-[var(--radius-xl)]',\n },\n interactive: {\n true: 'cursor-pointer focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n false: '',\n },\n },\n compoundVariants: [\n { interactive: true, variant: 'elevated', class: 'hover:shadow-lg active:shadow-sm transition-shadow duration-normal' },\n { interactive: true, variant: 'outlined', class: 'hover:border-primary hover:shadow-sm transition-all duration-normal' },\n { interactive: true, variant: 'filled', class: 'hover:bg-muted-hover transition-colors duration-normal' },\n { interactive: true, variant: 'ghost', class: 'hover:bg-muted transition-colors duration-normal' },\n ],\n defaultVariants: {\n variant: 'elevated',\n padding: 'none',\n radius: 'lg',\n interactive: false,\n },\n});\n\nexport type CardVariants = VariantProps<typeof cardVariants>;\n\n/**\n * CVA variants for card footer alignment.\n */\nexport const cardFooterVariants: (props?: {\n align?: CardAlign;\n}) => string = cva('flex items-center gap-2 px-5 pt-0 pb-5', {\n variants: {\n align: {\n start: 'justify-start',\n end: 'justify-end',\n center: 'justify-center',\n between: 'justify-between',\n },\n },\n defaultVariants: {\n align: 'end',\n },\n});\n\nexport type CardFooterVariants = VariantProps<typeof cardFooterVariants>;\n\n/**\n * CVA variants for card actions.\n */\nexport const cardActionsVariants: (props?: {\n align?: CardAlign;\n direction?: CardActionsDirection;\n}) => string = cva('flex gap-2 px-5 py-3', {\n variants: {\n align: {\n start: 'justify-start',\n end: 'justify-end',\n center: 'justify-center',\n between: 'justify-between',\n },\n direction: {\n row: 'flex-row items-center',\n column: 'flex-col items-stretch',\n },\n },\n defaultVariants: {\n align: 'end',\n direction: 'row',\n },\n});\n\nexport type CardActionsVariants = VariantProps<typeof cardActionsVariants>;\n\n/**\n * CVA variants for card media positioning.\n */\nexport const cardMediaVariants: (props?: {\n position?: CardMediaPosition;\n}) => string = cva('block w-full overflow-hidden object-cover', {\n variants: {\n position: {\n top: '',\n bottom: '',\n inset: 'mx-5 mt-5 rounded-media',\n },\n },\n defaultVariants: {\n position: 'top',\n },\n});\n\nexport type CardMediaVariants = VariantProps<typeof cardMediaVariants>;\n\n/**\n * CVA variants for card accent strip.\n *\n * @tokens `--color-primary`, `--color-accent`, `--color-warn`, `--color-success`, `--color-muted`\n */\nexport const cardAccentVariants: (props?: {\n color?: CardAccentColor;\n position?: CardAccentPosition;\n}) => string = cva('block shrink-0', {\n variants: {\n color: {\n primary: 'bg-primary',\n accent: 'bg-accent',\n warn: 'bg-warn',\n success: 'bg-success',\n muted: 'bg-muted',\n },\n position: {\n top: 'h-1 w-full',\n left: 'w-1 h-full absolute left-0 top-0',\n },\n },\n defaultVariants: {\n color: 'primary',\n position: 'top',\n },\n});\n\nexport type CardAccentVariants = VariantProps<typeof cardAccentVariants>;\n\n/**\n * CVA variants for card badge overlay.\n *\n * @tokens `--color-primary`, `--color-primary-foreground`, `--color-accent`, `--color-accent-foreground`,\n * `--color-warn`, `--color-warn-foreground`, `--color-success`, `--color-success-foreground`,\n * `--color-muted`, `--color-muted-foreground`, `--radius-card`, `--radius-media`, `--radius-pill`\n */\nexport const cardBadgeVariants: (props?: {\n position?: CardBadgePosition;\n color?: CardBadgeColor;\n}) => string = cva(\n 'absolute z-10 inline-flex items-center rounded-pill px-2.5 py-0.5 text-xs font-semibold',\n {\n variants: {\n position: {\n 'top-left': 'top-3 left-3',\n 'top-right': 'top-3 right-3',\n 'bottom-left': 'bottom-3 left-3',\n 'bottom-right': 'bottom-3 right-3',\n },\n color: {\n primary: 'bg-primary text-primary-foreground',\n accent: 'bg-accent text-accent-foreground',\n warn: 'bg-warn text-warn-foreground',\n success: 'bg-success text-success-foreground',\n muted: 'bg-muted text-muted-foreground',\n },\n },\n defaultVariants: {\n position: 'top-right',\n color: 'primary',\n },\n }\n);\n\nexport type CardBadgeVariants = VariantProps<typeof cardBadgeVariants>;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { mergeClasses } from './card.utils';\nimport { cardVariants } from './card.variants';\nimport type { CardVariant, CardPadding, CardRadius } from './card.variants';\n\n/**\n * Card container component - a styled surface for content.\n *\n * The card is a pure container with no imposed structure.\n * Use card directives (comCardHeader, comCardContent, etc.) to compose layouts.\n *\n * @tokens `--color-popover`, `--color-popover-foreground`, `--color-muted`, `--color-muted-hover`,\n * `--color-foreground`, `--color-border`, `--color-primary`, `--color-ring`\n *\n * @example Basic card\n * ```html\n * <com-card>\n * <div comCardContent>Simple content</div>\n * </com-card>\n * ```\n *\n * @example Interactive card\n * ```html\n * <com-card [interactive]=\"true\" (click)=\"onCardClick()\">\n * <div comCardContent>Clickable card</div>\n * </com-card>\n * ```\n *\n * @example Outlined variant with custom padding\n * ```html\n * <com-card variant=\"outlined\" padding=\"md\">\n * <p>Outlined card with medium padding</p>\n * </com-card>\n * ```\n */\n@Component({\n selector: 'com-card',\n exportAs: 'comCard',\n template: `<ng-content />`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCard {\n /** Visual treatment of the card surface. */\n readonly variant: InputSignal<CardVariant> = input<CardVariant>('elevated');\n\n /** Inner spacing. Default 'none' - sub-parts manage their own padding. */\n readonly padding: InputSignal<CardPadding> = input<CardPadding>('none');\n\n /** Border radius. */\n readonly radius: InputSignal<CardRadius> = input<CardRadius>('lg');\n\n /** When true, adds hover/active states and cursor-pointer. */\n readonly interactive: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Consumer CSS classes - merged with variant classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n cardVariants({\n variant: this.variant(),\n padding: this.padding(),\n radius: this.radius(),\n interactive: this.interactive(),\n }),\n this.userClass()\n )\n );\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Card header directive - top section for title and actions.\n *\n * Uses justify-between so it naturally supports a title group on the left\n * and an action element (icon button, menu trigger) on the right.\n *\n * @example Header with title\n * ```html\n * <div comCardHeader>\n * <h3 comCardTitle>Card Title</h3>\n * </div>\n * ```\n *\n * @example Header with title and action\n * ```html\n * <div comCardHeader>\n * <div>\n * <h3 comCardTitle>Title</h3>\n * <p comCardSubtitle>Subtitle</p>\n * </div>\n * <button comButton variant=\"ghost\" size=\"icon\" aria-label=\"More\">...</button>\n * </div>\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardHeader]',\n exportAs: 'comCardHeader',\n host: {\n class: 'flex items-start justify-between gap-3 px-5 pt-5 pb-0',\n },\n})\nexport class ComCardHeader {}\n","import { Directive } from '@angular/core';\n\n/**\n * Card title directive - styled heading text.\n *\n * Apply to any heading element. Consumer picks the semantic level (h2, h3, etc.).\n *\n * @example\n * ```html\n * <h3 comCardTitle>Project Alpha</h3>\n * ```\n *\n * @tokens `--color-foreground`\n */\n@Directive({\n selector: '[comCardTitle]',\n exportAs: 'comCardTitle',\n host: {\n class: 'font-heading text-lg font-semibold tracking-tight text-foreground',\n },\n})\nexport class ComCardTitle {}\n","import { Directive } from '@angular/core';\n\n/**\n * Card subtitle directive - secondary text styling.\n *\n * @example\n * ```html\n * <p comCardSubtitle>Last updated 2 hours ago</p>\n * ```\n *\n * @tokens `--color-muted-foreground`\n */\n@Directive({\n selector: '[comCardSubtitle]',\n exportAs: 'comCardSubtitle',\n host: {\n class: 'text-sm text-muted-foreground',\n },\n})\nexport class ComCardSubtitle {}\n","import { Directive } from '@angular/core';\n\n/**\n * Card content directive - main body area with consistent padding.\n *\n * @example\n * ```html\n * <div comCardContent>\n * <p>Card body content goes here.</p>\n * </div>\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardContent]',\n exportAs: 'comCardContent',\n host: {\n class: 'flex-1 px-5 py-4 text-sm',\n },\n})\nexport class ComCardContent {}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { cardFooterVariants } from './card.variants';\nimport type { CardAlign } from './card.variants';\n\n/**\n * Card footer directive - bottom section for metadata or secondary actions.\n *\n * @example Footer with alignment\n * ```html\n * <div comCardFooter align=\"between\">\n * <span class=\"text-sm text-muted-foreground\">Updated 3m ago</span>\n * <a comButton variant=\"link\" size=\"sm\">View details</a>\n * </div>\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardFooter]',\n exportAs: 'comCardFooter',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardFooter {\n /** Horizontal alignment of footer content. */\n readonly align: InputSignal<CardAlign> = input<CardAlign>('end');\n\n protected readonly computedClass: Signal<string> = computed(() =>\n cardFooterVariants({ align: this.align() })\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { cardActionsVariants } from './card.variants';\nimport type { CardAlign, CardActionsDirection } from './card.variants';\n\n/**\n * Card actions directive - dedicated button row for primary card actions.\n *\n * Separate from footer because actions and footer metadata serve different purposes.\n *\n * @example Actions with alignment\n * ```html\n * <div comCardActions>\n * <button comButton variant=\"ghost\" size=\"sm\">Cancel</button>\n * <button comButton size=\"sm\">Confirm</button>\n * </div>\n * ```\n *\n * @example Stacked column layout\n * ```html\n * <div comCardActions direction=\"column\" align=\"start\">\n * <button comButton fullWidth>Primary Action</button>\n * <button comButton variant=\"outline\" fullWidth>Secondary</button>\n * </div>\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardActions]',\n exportAs: 'comCardActions',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardActions {\n /** Horizontal alignment of actions. */\n readonly align: InputSignal<CardAlign> = input<CardAlign>('end');\n\n /** Layout direction - row or column. */\n readonly direction: InputSignal<CardActionsDirection> = input<CardActionsDirection>('row');\n\n protected readonly computedClass: Signal<string> = computed(() =>\n cardActionsVariants({\n align: this.align(),\n direction: this.direction(),\n })\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { cardMediaVariants } from './card.variants';\nimport type { CardMediaPosition } from './card.variants';\n\n/**\n * Card media directive - image/video slot with aspect ratio handling.\n *\n * Apply to <img>, <video>, <picture>, or a wrapper <div>.\n *\n * @example Top media (bleeds to edge)\n * ```html\n * <img comCardMedia src=\"/hero.jpg\" alt=\"Hero image\" />\n * ```\n *\n * @example Inset media (padded with rounded corners)\n * ```html\n * <img comCardMedia position=\"inset\" src=\"/preview.jpg\" alt=\"Preview\" />\n * ```\n *\n * @tokens None - uses only layout utilities\n */\n@Directive({\n selector: '[comCardMedia]',\n exportAs: 'comCardMedia',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardMedia {\n /** Media positioning within the card. */\n readonly position: InputSignal<CardMediaPosition> = input<CardMediaPosition>('top');\n\n protected readonly computedClass: Signal<string> = computed(() =>\n cardMediaVariants({ position: this.position() })\n );\n}\n","import { booleanAttribute, computed, Directive, input } from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { mergeClasses } from './card.utils';\n\n/**\n * Card divider directive - horizontal rule between card sections.\n *\n * @example Standard divider (with side margins)\n * ```html\n * <hr comCardDivider />\n * ```\n *\n * @example Full-width divider (edge to edge)\n * ```html\n * <hr comCardDivider [inset]=\"true\" />\n * ```\n *\n * @tokens `--color-border`\n */\n@Directive({\n selector: '[comCardDivider]',\n exportAs: 'comCardDivider',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardDivider {\n /** When true, divider spans full card width (no horizontal margin). */\n readonly inset: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Consumer CSS classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n 'block border-t border-border',\n this.inset() ? 'mx-0' : 'mx-5',\n this.userClass()\n )\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { cardAccentVariants } from './card.variants';\nimport type { CardAccentColor, CardAccentPosition } from './card.variants';\n\n/**\n * Card accent directive - colored strip for status or category indication.\n *\n * Place as the first child of the card for top accent, or use position=\"left\"\n * for a left-edge strip (requires adding left padding to content).\n *\n * @tokens `--color-primary`, `--color-accent`, `--color-warn`, `--color-success`, `--color-muted`\n *\n * @example Top accent strip\n * ```html\n * <com-card>\n * <div comCardAccent color=\"warn\"></div>\n * <div comCardContent>Warning content</div>\n * </com-card>\n * ```\n *\n * @example Left accent strip\n * ```html\n * <com-card>\n * <div comCardAccent color=\"success\" position=\"left\"></div>\n * <div comCardContent class=\"pl-5\">Content with left padding</div>\n * </com-card>\n * ```\n */\n@Directive({\n selector: '[comCardAccent]',\n exportAs: 'comCardAccent',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardAccent {\n /** Accent color. */\n readonly color: InputSignal<CardAccentColor> = input<CardAccentColor>('primary');\n\n /** Position of the accent strip. */\n readonly position: InputSignal<CardAccentPosition> = input<CardAccentPosition>('top');\n\n protected readonly computedClass: Signal<string> = computed(() =>\n cardAccentVariants({\n color: this.color(),\n position: this.position(),\n })\n );\n}\n","import { computed, Directive, input } from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { cardBadgeVariants } from './card.variants';\nimport type { CardBadgeColor, CardBadgePosition } from './card.variants';\n\n/**\n * Card badge directive - positioned overlay for labels, tags, or status indicators.\n *\n * Floats over the card content (e.g., \"NEW\", \"SALE\", \"Featured\").\n *\n * @tokens `--color-primary`, `--color-primary-foreground`, `--color-accent`, `--color-accent-foreground`,\n * `--color-warn`, `--color-warn-foreground`, `--color-success`, `--color-success-foreground`,\n * `--color-muted`, `--color-muted-foreground`, `--radius-pill`\n *\n * @example Badge in top-right corner\n * ```html\n * <com-card>\n * <span comCardBadge>NEW</span>\n * <img comCardMedia src=\"/product.jpg\" alt=\"Product\" />\n * </com-card>\n * ```\n *\n * @example Badge with custom position and color\n * ```html\n * <com-card>\n * <span comCardBadge position=\"top-left\" color=\"warn\">SALE</span>\n * <div comCardContent>Product details</div>\n * </com-card>\n * ```\n */\n@Directive({\n selector: '[comCardBadge]',\n exportAs: 'comCardBadge',\n host: {\n '[class]': 'computedClass()',\n },\n})\nexport class ComCardBadge {\n /** Badge position within the card. */\n readonly position: InputSignal<CardBadgePosition> = input<CardBadgePosition>('top-right');\n\n /** Badge color. */\n readonly color: InputSignal<CardBadgeColor> = input<CardBadgeColor>('primary');\n\n protected readonly computedClass: Signal<string> = computed(() =>\n cardBadgeVariants({\n position: this.position(),\n color: this.color(),\n })\n );\n}\n","// Public API for the card component system\n\n// Main component\nexport { ComCard } from './card.component';\n\n// Directives\nexport { ComCardHeader } from './card-header.directive';\nexport { ComCardTitle } from './card-title.directive';\nexport { ComCardSubtitle } from './card-subtitle.directive';\nexport { ComCardContent } from './card-content.directive';\nexport { ComCardFooter } from './card-footer.directive';\nexport { ComCardActions } from './card-actions.directive';\nexport { ComCardMedia } from './card-media.directive';\nexport { ComCardDivider } from './card-divider.directive';\nexport { ComCardAccent } from './card-accent.directive';\nexport { ComCardBadge } from './card-badge.directive';\n\n// Variants (for advanced customization)\nexport {\n cardVariants,\n cardFooterVariants,\n cardActionsVariants,\n cardMediaVariants,\n cardAccentVariants,\n cardBadgeVariants,\n} from './card.variants';\n\nexport type {\n CardVariant,\n CardPadding,\n CardRadius,\n CardAlign,\n CardActionsDirection,\n CardMediaPosition,\n CardAccentColor,\n CardAccentPosition,\n CardBadgeColor,\n CardBadgePosition,\n CardVariants,\n CardFooterVariants,\n CardActionsVariants,\n CardMediaVariants,\n CardAccentVariants,\n CardBadgeVariants,\n} from './card.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ const carouselNavButtonVariants = cva([
|
|
|
14
14
|
'h-10 w-10 rounded-control',
|
|
15
15
|
'bg-background text-foreground',
|
|
16
16
|
'border border-border-subtle shadow-sm',
|
|
17
|
-
'transition-colors duration-
|
|
17
|
+
'transition-colors duration-normal',
|
|
18
18
|
'hover:bg-muted-hover',
|
|
19
19
|
'outline-none focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',
|
|
20
20
|
'disabled:bg-disabled disabled:text-disabled-foreground disabled:cursor-not-allowed disabled:shadow-none',
|
|
@@ -32,7 +32,7 @@ const carouselNavButtonVariants = cva([
|
|
|
32
32
|
// ─── Pagination Dot ───
|
|
33
33
|
const carouselDotVariants = cva([
|
|
34
34
|
'inline-block h-2 w-2 rounded-pill',
|
|
35
|
-
'transition-colors duration-
|
|
35
|
+
'transition-colors duration-normal',
|
|
36
36
|
'outline-none focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',
|
|
37
37
|
], {
|
|
38
38
|
variants: {
|
|
@@ -52,6 +52,8 @@ const carouselDotVariants = cva([
|
|
|
52
52
|
* Apply this directive to each direct child element that should be
|
|
53
53
|
* treated as a slide within `<com-carousel>`.
|
|
54
54
|
*
|
|
55
|
+
* @tokens none
|
|
56
|
+
*
|
|
55
57
|
* @example
|
|
56
58
|
* ```html
|
|
57
59
|
* <com-carousel>
|
|
@@ -78,6 +80,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
78
80
|
* The template receives a boolean context (`$implicit`) indicating
|
|
79
81
|
* whether the carousel can navigate backward.
|
|
80
82
|
*
|
|
83
|
+
* @tokens none
|
|
84
|
+
*
|
|
81
85
|
* @example
|
|
82
86
|
* ```html
|
|
83
87
|
* <com-carousel>
|
|
@@ -109,6 +113,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
109
113
|
* The template receives a boolean context (`$implicit`) indicating
|
|
110
114
|
* whether the carousel can navigate forward.
|
|
111
115
|
*
|
|
116
|
+
* @tokens none
|
|
117
|
+
*
|
|
112
118
|
* @example
|
|
113
119
|
* ```html
|
|
114
120
|
* <com-carousel>
|
|
@@ -140,6 +146,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
140
146
|
* Rendered once per "page" in the carousel. The template receives
|
|
141
147
|
* a context with the page index, active state, and total count.
|
|
142
148
|
*
|
|
149
|
+
* @tokens none
|
|
150
|
+
*
|
|
143
151
|
* @example
|
|
144
152
|
* ```html
|
|
145
153
|
* <com-carousel>
|
|
@@ -203,7 +211,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
203
211
|
* @example Auto-play with loop
|
|
204
212
|
* ```html
|
|
205
213
|
* <com-carousel autoPlay loop [autoPlayInterval]="4000">
|
|
206
|
-
*
|
|
214
|
+
* @for (img of images(); track img.url) {
|
|
215
|
+
* <img comCarouselItem [src]="img.url" [alt]="img.alt" />
|
|
216
|
+
* }
|
|
207
217
|
* </com-carousel>
|
|
208
218
|
* ```
|
|
209
219
|
*
|
|
@@ -336,6 +346,8 @@ class ComCarouselComponent {
|
|
|
336
346
|
const isPaused = this.paused();
|
|
337
347
|
const interval = this.autoPlayInterval();
|
|
338
348
|
this.clearAutoPlay();
|
|
349
|
+
if (!this.platform.isBrowser)
|
|
350
|
+
return; // SSR guard
|
|
339
351
|
if (shouldAutoPlay && !isPaused) {
|
|
340
352
|
this.autoPlayTimerId = setInterval(() => {
|
|
341
353
|
this.next();
|
|
@@ -401,7 +413,7 @@ class ComCarouselComponent {
|
|
|
401
413
|
/** Handle keyboard navigation on pagination dots. */
|
|
402
414
|
onPaginationKeydown(event, currentIndex) {
|
|
403
415
|
const total = this.totalScreens();
|
|
404
|
-
let targetIndex
|
|
416
|
+
let targetIndex;
|
|
405
417
|
switch (event.key) {
|
|
406
418
|
case 'ArrowRight':
|
|
407
419
|
case 'ArrowDown':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-com-components-carousel.mjs","sources":["../../../projects/com/components/carousel/carousel.variants.ts","../../../projects/com/components/carousel/carousel-item.directive.ts","../../../projects/com/components/carousel/carousel-prev-tpl.directive.ts","../../../projects/com/components/carousel/carousel-next-tpl.directive.ts","../../../projects/com/components/carousel/carousel-pagination-tpl.directive.ts","../../../projects/com/components/carousel/carousel.component.ts","../../../projects/com/components/carousel/index.ts","../../../projects/com/components/carousel/ngx-com-components-carousel.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\n// ─── Container ───\n\nexport const carouselContainerVariants: () => string = cva('relative overflow-hidden');\n\n// ─── Navigation Button ───\n\nexport const carouselNavButtonVariants: (props?: {\n position?: 'prev' | 'next';\n}) => string = cva(\n [\n 'absolute top-1/2 -translate-y-1/2 z-10',\n 'inline-flex items-center justify-center',\n 'h-10 w-10 rounded-control',\n 'bg-background text-foreground',\n 'border border-border-subtle shadow-sm',\n 'transition-colors duration-150',\n 'hover:bg-muted-hover',\n 'outline-none focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n 'disabled:bg-disabled disabled:text-disabled-foreground disabled:cursor-not-allowed disabled:shadow-none',\n ],\n {\n variants: {\n position: {\n prev: 'left-2',\n next: 'right-2',\n },\n },\n defaultVariants: {\n position: 'prev',\n },\n }\n);\n\nexport type CarouselNavButtonVariants = VariantProps<typeof carouselNavButtonVariants>;\n\n// ─── Pagination Dot ───\n\nexport const carouselDotVariants: (props?: {\n active?: boolean;\n}) => string = cva(\n [\n 'inline-block h-2 w-2 rounded-pill',\n 'transition-colors duration-150',\n 'outline-none focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n ],\n {\n variants: {\n active: {\n true: 'bg-primary',\n false: 'bg-muted hover:bg-muted-hover',\n },\n },\n defaultVariants: {\n active: false,\n },\n }\n);\n\nexport type CarouselDotVariants = VariantProps<typeof carouselDotVariants>;\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n/**\n * Marks an element as a carousel slide item.\n *\n * Apply this directive to each direct child element that should be\n * treated as a slide within `<com-carousel>`.\n *\n * @example\n * ```html\n * <com-carousel>\n * <div comCarouselItem>Slide 1</div>\n * <div comCarouselItem>Slide 2</div>\n * </com-carousel>\n * ```\n */\n@Directive({\n selector: '[comCarouselItem]',\n})\nexport class ComCarouselItem {\n readonly elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { CarouselPrevContext } from './carousel.models';\n\n/**\n * Template directive for a custom \"previous\" navigation button.\n *\n * The template receives a boolean context (`$implicit`) indicating\n * whether the carousel can navigate backward.\n *\n * @example\n * ```html\n * <com-carousel>\n * <div comCarouselItem>Slide 1</div>\n * <ng-template comCarouselPrev let-canGo>\n * <button [disabled]=\"!canGo\">Back</button>\n * </ng-template>\n * </com-carousel>\n * ```\n */\n@Directive({\n selector: 'ng-template[comCarouselPrev]',\n})\nexport class ComCarouselPrevTpl {\n readonly templateRef: TemplateRef<CarouselPrevContext> = inject(TemplateRef);\n\n static ngTemplateContextGuard(\n _dir: ComCarouselPrevTpl,\n _ctx: unknown\n ): _ctx is CarouselPrevContext {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { CarouselNextContext } from './carousel.models';\n\n/**\n * Template directive for a custom \"next\" navigation button.\n *\n * The template receives a boolean context (`$implicit`) indicating\n * whether the carousel can navigate forward.\n *\n * @example\n * ```html\n * <com-carousel>\n * <div comCarouselItem>Slide 1</div>\n * <ng-template comCarouselNext let-canGo>\n * <button [disabled]=\"!canGo\">Forward</button>\n * </ng-template>\n * </com-carousel>\n * ```\n */\n@Directive({\n selector: 'ng-template[comCarouselNext]',\n})\nexport class ComCarouselNextTpl {\n readonly templateRef: TemplateRef<CarouselNextContext> = inject(TemplateRef);\n\n static ngTemplateContextGuard(\n _dir: ComCarouselNextTpl,\n _ctx: unknown\n ): _ctx is CarouselNextContext {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { CarouselPaginationContext } from './carousel.models';\n\n/**\n * Template directive for custom pagination indicators.\n *\n * Rendered once per \"page\" in the carousel. The template receives\n * a context with the page index, active state, and total count.\n *\n * @example\n * ```html\n * <com-carousel>\n * <div comCarouselItem>Slide 1</div>\n * <div comCarouselItem>Slide 2</div>\n * <ng-template comCarouselPagination let-idx let-active=\"active\">\n * <span\n * class=\"inline-block h-3 w-3 rounded-pill transition-colors\"\n * [class]=\"active ? 'bg-primary' : 'bg-muted'\"\n * ></span>\n * </ng-template>\n * </com-carousel>\n * ```\n */\n@Directive({\n selector: 'ng-template[comCarouselPagination]',\n})\nexport class ComCarouselPaginationTpl {\n readonly templateRef: TemplateRef<CarouselPaginationContext> = inject(TemplateRef);\n\n static ngTemplateContextGuard(\n _dir: ComCarouselPaginationTpl,\n _ctx: unknown\n ): _ctx is CarouselPaginationContext {\n return true;\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n model,\n Renderer2,\n signal,\n viewChild,\n} from '@angular/core';\nimport type {\n InputSignal,\n InputSignalWithTransform,\n ModelSignal,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { Platform } from '@angular/cdk/platform';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport { ComCarouselItem } from './carousel-item.directive';\nimport { ComCarouselPrevTpl } from './carousel-prev-tpl.directive';\nimport { ComCarouselNextTpl } from './carousel-next-tpl.directive';\nimport { ComCarouselPaginationTpl } from './carousel-pagination-tpl.directive';\nimport type { CarouselNextContext, CarouselPaginationContext, CarouselPrevContext } from './carousel.models';\nimport {\n carouselContainerVariants,\n carouselNavButtonVariants,\n carouselDotVariants,\n} from './carousel.variants';\n\n/**\n * Carousel component — a horizontal slider that navigates content screens\n * using percentage-based CSS `transform: translateX()`.\n *\n * Items are projected via `ng-content` and marked with `comCarouselItem`.\n * Navigation is screen-based: each index step moves one full viewport of items.\n * Supports multi-item views, auto-play, loop, touch/swipe, keyboard\n * navigation, and custom templates for navigation and pagination.\n *\n * @tokens `--color-background`, `--color-foreground`, `--color-muted`,\n * `--color-muted-hover`, `--color-primary`, `--color-border-subtle`,\n * `--color-ring`, `--color-disabled`, `--color-disabled-foreground`\n *\n * @example Basic usage\n * ```html\n * <com-carousel>\n * <div comCarouselItem>Slide 1</div>\n * <div comCarouselItem>Slide 2</div>\n * <div comCarouselItem>Slide 3</div>\n * </com-carousel>\n * ```\n *\n * @example Multiple items per view\n * ```html\n * <com-carousel [slidesPerView]=\"3\">\n * @for (product of products(); track product.id) {\n * <com-card comCarouselItem>{{ product.name }}</com-card>\n * }\n * </com-carousel>\n * ```\n *\n * @example Auto-play with loop\n * ```html\n * <com-carousel autoPlay loop [autoPlayInterval]=\"4000\">\n * <img comCarouselItem *ngFor=\"let img of images\" [src]=\"img.url\" [alt]=\"img.alt\" />\n * </com-carousel>\n * ```\n *\n * @example Two-way index binding\n * ```html\n * <com-carousel [(index)]=\"currentSlide\">\n * <div comCarouselItem>A</div>\n * <div comCarouselItem>B</div>\n * </com-carousel>\n * ```\n *\n * @example Custom navigation\n * ```html\n * <com-carousel>\n * <div comCarouselItem>Slide 1</div>\n * <ng-template comCarouselPrev let-canGo>\n * <button [disabled]=\"!canGo\">Back</button>\n * </ng-template>\n * <ng-template comCarouselNext let-canGo>\n * <button [disabled]=\"!canGo\">Forward</button>\n * </ng-template>\n * </com-carousel>\n * ```\n *\n * @example Custom pagination\n * ```html\n * <com-carousel>\n * <div comCarouselItem>Slide 1</div>\n * <ng-template comCarouselPagination let-idx let-active=\"active\">\n * <span [class]=\"active ? 'bg-primary' : 'bg-muted'\" class=\"h-3 w-3 rounded-pill inline-block\"></span>\n * </ng-template>\n * </com-carousel>\n * ```\n */\n@Component({\n selector: 'com-carousel',\n template: `\n <div [class]=\"containerClasses()\">\n <!-- Slide track -->\n <div\n #track\n class=\"flex\"\n [style.transform]=\"translateX()\"\n [style.transition]=\"animating() ? 'transform ' + transitionDuration() + 'ms ease-out' : 'none'\"\n [attr.aria-live]=\"ariaLiveMode()\"\n >\n <ng-content select=\"[comCarouselItem]\" />\n </div>\n\n <!-- Navigation: Previous -->\n @if (showNavigation()) {\n @if (customPrev(); as prevTpl) {\n <ng-container\n [ngTemplateOutlet]=\"prevTpl.templateRef\"\n [ngTemplateOutletContext]=\"prevContext()\"\n />\n } @else {\n <button\n type=\"button\"\n [class]=\"prevButtonClasses()\"\n [disabled]=\"!canGoPrev()\"\n [attr.aria-label]=\"'Previous slide'\"\n (click)=\"prev()\"\n >\n <com-icon name=\"chevron-left\" size=\"md\" />\n </button>\n }\n }\n\n <!-- Navigation: Next -->\n @if (showNavigation()) {\n @if (customNext(); as nextTpl) {\n <ng-container\n [ngTemplateOutlet]=\"nextTpl.templateRef\"\n [ngTemplateOutletContext]=\"nextContext()\"\n />\n } @else {\n <button\n type=\"button\"\n [class]=\"nextButtonClasses()\"\n [disabled]=\"!canGoNext()\"\n [attr.aria-label]=\"'Next slide'\"\n (click)=\"next()\"\n >\n <com-icon name=\"chevron-right\" size=\"md\" />\n </button>\n }\n }\n </div>\n\n <!-- Pagination -->\n @if (showPagination() && totalScreens() > 1) {\n <div\n class=\"flex items-center justify-center gap-2 py-3\"\n role=\"tablist\"\n [attr.aria-label]=\"'Slide navigation'\"\n >\n @for (page of pages(); track page; let i = $index) {\n @if (customPagination(); as paginationTpl) {\n <button\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"i === clampedIndex()\"\n [attr.aria-label]=\"'Go to slide ' + (i + 1)\"\n [tabindex]=\"i === clampedIndex() ? 0 : -1\"\n (click)=\"goToPage(i)\"\n (keydown)=\"onPaginationKeydown($event, i)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"paginationTpl.templateRef\"\n [ngTemplateOutletContext]=\"getPaginationContext(i)\"\n />\n </button>\n } @else {\n <button\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"i === clampedIndex()\"\n [attr.aria-label]=\"'Go to slide ' + (i + 1)\"\n [tabindex]=\"i === clampedIndex() ? 0 : -1\"\n [class]=\"getDotClasses(i)\"\n (click)=\"goToPage(i)\"\n (keydown)=\"onPaginationKeydown($event, i)\"\n ></button>\n }\n }\n </div>\n }\n `,\n styles: `\n :host {\n display: block;\n }\n `,\n imports: [NgTemplateOutlet, ComIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'com-carousel',\n 'role': 'region',\n '[attr.aria-roledescription]': '\"carousel\"',\n '[attr.aria-label]': 'ariaLabel()',\n '(mouseenter)': 'pauseAutoPlay()',\n '(mouseleave)': 'resumeAutoPlay()',\n '(focusin)': 'pauseAutoPlay()',\n '(focusout)': 'resumeAutoPlay()',\n },\n})\nexport class ComCarouselComponent {\n private readonly destroyRef = inject(DestroyRef);\n private readonly renderer = inject(Renderer2);\n private readonly platform = inject(Platform);\n private readonly hostEl = inject<ElementRef<HTMLElement>>(ElementRef);\n\n // ─── Inputs ───\n\n /** Number of items visible at once. */\n readonly slidesPerView: InputSignal<number> = input<number>(1);\n\n /** Wrap from last to first and vice versa. */\n readonly loop: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Enable auto-advancing slides. */\n readonly autoPlay: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Auto-play interval in milliseconds. */\n readonly autoPlayInterval: InputSignal<number> = input<number>(5000);\n\n /** Slide transition duration in milliseconds. */\n readonly transitionDuration: InputSignal<number> = input<number>(300);\n\n /** Show prev/next navigation buttons. */\n readonly showNavigation: InputSignalWithTransform<boolean, unknown> = input(true, {\n transform: booleanAttribute,\n });\n\n /** Show pagination dot indicators. */\n readonly showPagination: InputSignalWithTransform<boolean, unknown> = input(true, {\n transform: booleanAttribute,\n });\n\n /** Accessible label for the carousel region. */\n readonly ariaLabel: InputSignal<string> = input<string>('Carousel', {\n alias: 'aria-label',\n });\n\n // ─── Model ───\n\n /** Two-way bindable current screen index. */\n readonly index: ModelSignal<number> = model<number>(0);\n\n // ─── Content Children ───\n\n readonly items: Signal<readonly ComCarouselItem[]> = contentChildren<ComCarouselItem>(ComCarouselItem);\n readonly customPrev: Signal<ComCarouselPrevTpl | undefined> = contentChild<ComCarouselPrevTpl>(ComCarouselPrevTpl);\n readonly customNext: Signal<ComCarouselNextTpl | undefined> = contentChild<ComCarouselNextTpl>(ComCarouselNextTpl);\n readonly customPagination: Signal<ComCarouselPaginationTpl | undefined> = contentChild<ComCarouselPaginationTpl>(ComCarouselPaginationTpl);\n\n // ─── View Children ───\n\n readonly trackEl: Signal<ElementRef<HTMLElement> | undefined> = viewChild<ElementRef<HTMLElement>>('track');\n\n // ─── Internal State ───\n\n private readonly paused: WritableSignal<boolean> = signal(false);\n readonly animating: WritableSignal<boolean> = signal(true);\n private autoPlayTimerId: ReturnType<typeof setInterval> | null = null;\n\n // ─── Computed ───\n\n readonly totalSlides: Signal<number> = computed(() => this.items().length);\n\n /** Total number of screens (pages). */\n readonly totalScreens: Signal<number> = computed(() =>\n Math.max(1, Math.ceil(this.totalSlides() / this.slidesPerView()))\n );\n\n readonly maxIndex: Signal<number> = computed(() =>\n Math.max(0, this.totalScreens() - 1)\n );\n\n /** Clamp index when items or slidesPerView changes. */\n readonly clampedIndex: Signal<number> = linkedSignal(() => {\n const idx = this.index();\n const max = this.maxIndex();\n return Math.max(0, Math.min(idx, max));\n });\n\n readonly canGoPrev: Signal<boolean> = computed(() =>\n this.loop() || this.clampedIndex() > 0\n );\n\n readonly canGoNext: Signal<boolean> = computed(() =>\n this.loop() || this.clampedIndex() < this.maxIndex()\n );\n\n readonly pages: Signal<number[]> = computed(() =>\n Array.from({ length: this.totalScreens() }, (_, i) => i)\n );\n\n /** Percentage-based translateX — each screen step moves by 100%. */\n readonly translateX: Signal<string> = computed(() =>\n `translateX(${-this.clampedIndex() * 100}%)`\n );\n\n /** Item width as a percentage string. */\n private readonly itemWidth: Signal<string> = computed(() =>\n `${100 / this.slidesPerView()}%`\n );\n\n readonly ariaLiveMode: Signal<string> = computed(() =>\n this.autoPlay() && !this.paused() ? 'off' : 'polite'\n );\n\n // ─── CVA Classes ───\n\n readonly containerClasses: Signal<string> = computed(() => carouselContainerVariants());\n\n readonly prevButtonClasses: Signal<string> = computed(() =>\n carouselNavButtonVariants({ position: 'prev' })\n );\n\n readonly nextButtonClasses: Signal<string> = computed(() =>\n carouselNavButtonVariants({ position: 'next' })\n );\n\n // ─── Template Contexts ───\n\n readonly prevContext: Signal<CarouselPrevContext> = computed(() => ({\n $implicit: this.canGoPrev(),\n prev: () => this.prev(),\n }));\n\n readonly nextContext: Signal<CarouselNextContext> = computed(() => ({\n $implicit: this.canGoNext(),\n next: () => this.next(),\n }));\n\n constructor() {\n // Sync clamped index back to the model\n effect(() => {\n const clamped = this.clampedIndex();\n if (this.index() !== clamped) {\n this.index.set(clamped);\n }\n });\n\n // Apply percentage-based width and ARIA attributes to each projected item\n effect(() => {\n const allItems = this.items();\n const total = allItems.length;\n const width = this.itemWidth();\n\n allItems.forEach((item, i) => {\n const el = item.elementRef.nativeElement;\n this.renderer.setStyle(el, 'min-width', width);\n this.renderer.setStyle(el, 'max-width', width);\n this.renderer.setStyle(el, 'flex-shrink', '0');\n this.renderer.setStyle(el, 'box-sizing', 'border-box');\n this.renderer.setAttribute(el, 'role', 'group');\n this.renderer.setAttribute(el, 'aria-roledescription', 'slide');\n this.renderer.setAttribute(el, 'aria-label', `${i + 1} of ${total}`);\n });\n });\n\n // Auto-play effect\n effect(() => {\n const shouldAutoPlay = this.autoPlay();\n const isPaused = this.paused();\n const interval = this.autoPlayInterval();\n\n this.clearAutoPlay();\n\n if (shouldAutoPlay && !isPaused) {\n this.autoPlayTimerId = setInterval(() => {\n this.next();\n }, interval);\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.clearAutoPlay();\n this.cleanupSwipe();\n });\n\n // Set up touch/swipe after view init\n if (this.platform.isBrowser) {\n effect(() => {\n const track = this.trackEl();\n if (track) {\n this.setupSwipe(track.nativeElement);\n }\n });\n }\n }\n\n // ─── Public Methods ───\n\n /** Navigate to the next screen. */\n next(): void {\n const current = this.clampedIndex();\n const max = this.maxIndex();\n\n if (current < max) {\n this.goToPage(current + 1);\n } else if (this.loop()) {\n this.goToPage(0);\n }\n }\n\n /** Navigate to the previous screen. */\n prev(): void {\n const current = this.clampedIndex();\n\n if (current > 0) {\n this.goToPage(current - 1);\n } else if (this.loop()) {\n this.goToPage(this.maxIndex());\n }\n }\n\n /** Navigate to a specific page index. */\n goToPage(pageIndex: number): void {\n if (pageIndex >= 0 && pageIndex <= this.maxIndex()) {\n this.animating.set(true);\n this.index.set(pageIndex);\n }\n }\n\n /** Get CVA classes for a pagination dot at the given index. */\n getDotClasses(pageIndex: number): string {\n return carouselDotVariants({ active: pageIndex === this.clampedIndex() });\n }\n\n /** Build template context for a custom pagination dot. */\n getPaginationContext(pageIndex: number): CarouselPaginationContext {\n return {\n $implicit: pageIndex,\n active: pageIndex === this.clampedIndex(),\n total: this.totalScreens(),\n index: pageIndex,\n };\n }\n\n /** Handle keyboard navigation on pagination dots. */\n onPaginationKeydown(event: KeyboardEvent, currentIndex: number): void {\n const total = this.totalScreens();\n let targetIndex: number | null = null;\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n targetIndex = (currentIndex + 1) % total;\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n targetIndex = (currentIndex - 1 + total) % total;\n break;\n case 'Home':\n targetIndex = 0;\n break;\n case 'End':\n targetIndex = total - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n this.goToPage(targetIndex);\n this.focusDotAt(targetIndex);\n }\n\n // ─── Host Event Handlers ───\n\n protected pauseAutoPlay(): void {\n if (this.autoPlay()) {\n this.paused.set(true);\n }\n }\n\n protected resumeAutoPlay(): void {\n if (this.autoPlay()) {\n this.paused.set(false);\n }\n }\n\n // ─── Private: Auto-play ───\n\n private clearAutoPlay(): void {\n if (this.autoPlayTimerId !== null) {\n clearInterval(this.autoPlayTimerId);\n this.autoPlayTimerId = null;\n }\n }\n\n // ─── Private: Touch/Swipe ───\n\n private swipeCleanupFns: Array<() => void> = [];\n private pointerStartX = 0;\n private pointerStartY = 0;\n private isSwiping = false;\n\n private setupSwipe(trackElement: HTMLElement): void {\n this.cleanupSwipe();\n\n const unlistenDown = this.renderer.listen(trackElement, 'pointerdown', (e: PointerEvent) => {\n this.pointerStartX = e.clientX;\n this.pointerStartY = e.clientY;\n this.isSwiping = true;\n this.animating.set(false);\n });\n\n const unlistenMove = this.renderer.listen(trackElement, 'pointermove', (e: PointerEvent) => {\n if (!this.isSwiping) return;\n // Prevent vertical scroll when swiping horizontally\n const dx = Math.abs(e.clientX - this.pointerStartX);\n const dy = Math.abs(e.clientY - this.pointerStartY);\n if (dx > dy && dx > 10) {\n e.preventDefault();\n }\n });\n\n const unlistenUp = this.renderer.listen(trackElement, 'pointerup', (e: PointerEvent) => {\n if (!this.isSwiping) return;\n this.isSwiping = false;\n this.animating.set(true);\n\n const delta = e.clientX - this.pointerStartX;\n const threshold = 50;\n\n if (delta < -threshold) {\n this.next();\n } else if (delta > threshold) {\n this.prev();\n }\n });\n\n const unlistenCancel = this.renderer.listen(trackElement, 'pointercancel', () => {\n this.isSwiping = false;\n this.animating.set(true);\n });\n\n this.swipeCleanupFns = [unlistenDown, unlistenMove, unlistenUp, unlistenCancel];\n }\n\n private cleanupSwipe(): void {\n this.swipeCleanupFns.forEach((fn) => fn());\n this.swipeCleanupFns = [];\n }\n\n // ─── Private: Focus Management ───\n\n private focusDotAt(index: number): void {\n const host = this.hostEl.nativeElement;\n const dots = host.querySelectorAll('[role=\"tab\"]');\n const dot = dots[index] as HTMLElement | undefined;\n dot?.focus();\n }\n}\n","// Public API for the carousel component\n\n// Types\nexport type {\n CarouselPrevContext,\n CarouselNextContext,\n CarouselPaginationContext,\n} from './carousel.models';\n\n// Variants\nexport {\n carouselContainerVariants,\n carouselNavButtonVariants,\n carouselDotVariants,\n} from './carousel.variants';\nexport type {\n CarouselNavButtonVariants,\n CarouselDotVariants,\n} from './carousel.variants';\n\n// Template directives\nexport { ComCarouselItem } from './carousel-item.directive';\nexport { ComCarouselPrevTpl } from './carousel-prev-tpl.directive';\nexport { ComCarouselNextTpl } from './carousel-next-tpl.directive';\nexport { ComCarouselPaginationTpl } from './carousel-pagination-tpl.directive';\n\n// Main component\nexport { ComCarouselComponent } from './carousel.component';\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-carousel.mjs","sources":["../../../projects/com/components/carousel/carousel.variants.ts","../../../projects/com/components/carousel/carousel-item.directive.ts","../../../projects/com/components/carousel/carousel-prev-tpl.directive.ts","../../../projects/com/components/carousel/carousel-next-tpl.directive.ts","../../../projects/com/components/carousel/carousel-pagination-tpl.directive.ts","../../../projects/com/components/carousel/carousel.component.ts","../../../projects/com/components/carousel/index.ts","../../../projects/com/components/carousel/ngx-com-components-carousel.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\n// ─── Container ───\n\nexport const carouselContainerVariants: () => string = cva('relative overflow-hidden');\n\n// ─── Navigation Button ───\n\nexport const carouselNavButtonVariants: (props?: {\n position?: 'prev' | 'next';\n}) => string = cva(\n [\n 'absolute top-1/2 -translate-y-1/2 z-10',\n 'inline-flex items-center justify-center',\n 'h-10 w-10 rounded-control',\n 'bg-background text-foreground',\n 'border border-border-subtle shadow-sm',\n 'transition-colors duration-normal',\n 'hover:bg-muted-hover',\n 'outline-none focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n 'disabled:bg-disabled disabled:text-disabled-foreground disabled:cursor-not-allowed disabled:shadow-none',\n ],\n {\n variants: {\n position: {\n prev: 'left-2',\n next: 'right-2',\n },\n },\n defaultVariants: {\n position: 'prev',\n },\n }\n);\n\nexport type CarouselNavButtonVariants = VariantProps<typeof carouselNavButtonVariants>;\n\n// ─── Pagination Dot ───\n\nexport const carouselDotVariants: (props?: {\n active?: boolean;\n}) => string = cva(\n [\n 'inline-block h-2 w-2 rounded-pill',\n 'transition-colors duration-normal',\n 'outline-none focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n ],\n {\n variants: {\n active: {\n true: 'bg-primary',\n false: 'bg-muted hover:bg-muted-hover',\n },\n },\n defaultVariants: {\n active: false,\n },\n }\n);\n\nexport type CarouselDotVariants = VariantProps<typeof carouselDotVariants>;\n","import { Directive, ElementRef, inject } from '@angular/core';\n\n/**\n * Marks an element as a carousel slide item.\n *\n * Apply this directive to each direct child element that should be\n * treated as a slide within `<com-carousel>`.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-carousel>\n * <div comCarouselItem>Slide 1</div>\n * <div comCarouselItem>Slide 2</div>\n * </com-carousel>\n * ```\n */\n@Directive({\n selector: '[comCarouselItem]',\n})\nexport class ComCarouselItem {\n readonly elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { CarouselPrevContext } from './carousel.models';\n\n/**\n * Template directive for a custom \"previous\" navigation button.\n *\n * The template receives a boolean context (`$implicit`) indicating\n * whether the carousel can navigate backward.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-carousel>\n * <div comCarouselItem>Slide 1</div>\n * <ng-template comCarouselPrev let-canGo>\n * <button [disabled]=\"!canGo\">Back</button>\n * </ng-template>\n * </com-carousel>\n * ```\n */\n@Directive({\n selector: 'ng-template[comCarouselPrev]',\n})\nexport class ComCarouselPrevTpl {\n readonly templateRef: TemplateRef<CarouselPrevContext> = inject(TemplateRef);\n\n static ngTemplateContextGuard(\n _dir: ComCarouselPrevTpl,\n _ctx: unknown\n ): _ctx is CarouselPrevContext {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { CarouselNextContext } from './carousel.models';\n\n/**\n * Template directive for a custom \"next\" navigation button.\n *\n * The template receives a boolean context (`$implicit`) indicating\n * whether the carousel can navigate forward.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-carousel>\n * <div comCarouselItem>Slide 1</div>\n * <ng-template comCarouselNext let-canGo>\n * <button [disabled]=\"!canGo\">Forward</button>\n * </ng-template>\n * </com-carousel>\n * ```\n */\n@Directive({\n selector: 'ng-template[comCarouselNext]',\n})\nexport class ComCarouselNextTpl {\n readonly templateRef: TemplateRef<CarouselNextContext> = inject(TemplateRef);\n\n static ngTemplateContextGuard(\n _dir: ComCarouselNextTpl,\n _ctx: unknown\n ): _ctx is CarouselNextContext {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { CarouselPaginationContext } from './carousel.models';\n\n/**\n * Template directive for custom pagination indicators.\n *\n * Rendered once per \"page\" in the carousel. The template receives\n * a context with the page index, active state, and total count.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-carousel>\n * <div comCarouselItem>Slide 1</div>\n * <div comCarouselItem>Slide 2</div>\n * <ng-template comCarouselPagination let-idx let-active=\"active\">\n * <span\n * class=\"inline-block h-3 w-3 rounded-pill transition-colors\"\n * [class]=\"active ? 'bg-primary' : 'bg-muted'\"\n * ></span>\n * </ng-template>\n * </com-carousel>\n * ```\n */\n@Directive({\n selector: 'ng-template[comCarouselPagination]',\n})\nexport class ComCarouselPaginationTpl {\n readonly templateRef: TemplateRef<CarouselPaginationContext> = inject(TemplateRef);\n\n static ngTemplateContextGuard(\n _dir: ComCarouselPaginationTpl,\n _ctx: unknown\n ): _ctx is CarouselPaginationContext {\n return true;\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n contentChildren,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n model,\n Renderer2,\n signal,\n viewChild,\n} from '@angular/core';\nimport type {\n InputSignal,\n InputSignalWithTransform,\n ModelSignal,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { Platform } from '@angular/cdk/platform';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport { ComCarouselItem } from './carousel-item.directive';\nimport { ComCarouselPrevTpl } from './carousel-prev-tpl.directive';\nimport { ComCarouselNextTpl } from './carousel-next-tpl.directive';\nimport { ComCarouselPaginationTpl } from './carousel-pagination-tpl.directive';\nimport type { CarouselNextContext, CarouselPaginationContext, CarouselPrevContext } from './carousel.models';\nimport {\n carouselContainerVariants,\n carouselNavButtonVariants,\n carouselDotVariants,\n} from './carousel.variants';\n\n/**\n * Carousel component — a horizontal slider that navigates content screens\n * using percentage-based CSS `transform: translateX()`.\n *\n * Items are projected via `ng-content` and marked with `comCarouselItem`.\n * Navigation is screen-based: each index step moves one full viewport of items.\n * Supports multi-item views, auto-play, loop, touch/swipe, keyboard\n * navigation, and custom templates for navigation and pagination.\n *\n * @tokens `--color-background`, `--color-foreground`, `--color-muted`,\n * `--color-muted-hover`, `--color-primary`, `--color-border-subtle`,\n * `--color-ring`, `--color-disabled`, `--color-disabled-foreground`\n *\n * @example Basic usage\n * ```html\n * <com-carousel>\n * <div comCarouselItem>Slide 1</div>\n * <div comCarouselItem>Slide 2</div>\n * <div comCarouselItem>Slide 3</div>\n * </com-carousel>\n * ```\n *\n * @example Multiple items per view\n * ```html\n * <com-carousel [slidesPerView]=\"3\">\n * @for (product of products(); track product.id) {\n * <com-card comCarouselItem>{{ product.name }}</com-card>\n * }\n * </com-carousel>\n * ```\n *\n * @example Auto-play with loop\n * ```html\n * <com-carousel autoPlay loop [autoPlayInterval]=\"4000\">\n * @for (img of images(); track img.url) {\n * <img comCarouselItem [src]=\"img.url\" [alt]=\"img.alt\" />\n * }\n * </com-carousel>\n * ```\n *\n * @example Two-way index binding\n * ```html\n * <com-carousel [(index)]=\"currentSlide\">\n * <div comCarouselItem>A</div>\n * <div comCarouselItem>B</div>\n * </com-carousel>\n * ```\n *\n * @example Custom navigation\n * ```html\n * <com-carousel>\n * <div comCarouselItem>Slide 1</div>\n * <ng-template comCarouselPrev let-canGo>\n * <button [disabled]=\"!canGo\">Back</button>\n * </ng-template>\n * <ng-template comCarouselNext let-canGo>\n * <button [disabled]=\"!canGo\">Forward</button>\n * </ng-template>\n * </com-carousel>\n * ```\n *\n * @example Custom pagination\n * ```html\n * <com-carousel>\n * <div comCarouselItem>Slide 1</div>\n * <ng-template comCarouselPagination let-idx let-active=\"active\">\n * <span [class]=\"active ? 'bg-primary' : 'bg-muted'\" class=\"h-3 w-3 rounded-pill inline-block\"></span>\n * </ng-template>\n * </com-carousel>\n * ```\n */\n@Component({\n selector: 'com-carousel',\n template: `\n <div [class]=\"containerClasses()\">\n <!-- Slide track -->\n <div\n #track\n class=\"flex\"\n [style.transform]=\"translateX()\"\n [style.transition]=\"animating() ? 'transform ' + transitionDuration() + 'ms ease-out' : 'none'\"\n [attr.aria-live]=\"ariaLiveMode()\"\n >\n <ng-content select=\"[comCarouselItem]\" />\n </div>\n\n <!-- Navigation: Previous -->\n @if (showNavigation()) {\n @if (customPrev(); as prevTpl) {\n <ng-container\n [ngTemplateOutlet]=\"prevTpl.templateRef\"\n [ngTemplateOutletContext]=\"prevContext()\"\n />\n } @else {\n <button\n type=\"button\"\n [class]=\"prevButtonClasses()\"\n [disabled]=\"!canGoPrev()\"\n [attr.aria-label]=\"'Previous slide'\"\n (click)=\"prev()\"\n >\n <com-icon name=\"chevron-left\" size=\"md\" />\n </button>\n }\n }\n\n <!-- Navigation: Next -->\n @if (showNavigation()) {\n @if (customNext(); as nextTpl) {\n <ng-container\n [ngTemplateOutlet]=\"nextTpl.templateRef\"\n [ngTemplateOutletContext]=\"nextContext()\"\n />\n } @else {\n <button\n type=\"button\"\n [class]=\"nextButtonClasses()\"\n [disabled]=\"!canGoNext()\"\n [attr.aria-label]=\"'Next slide'\"\n (click)=\"next()\"\n >\n <com-icon name=\"chevron-right\" size=\"md\" />\n </button>\n }\n }\n </div>\n\n <!-- Pagination -->\n @if (showPagination() && totalScreens() > 1) {\n <div\n class=\"flex items-center justify-center gap-2 py-3\"\n role=\"tablist\"\n [attr.aria-label]=\"'Slide navigation'\"\n >\n @for (page of pages(); track page; let i = $index) {\n @if (customPagination(); as paginationTpl) {\n <button\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"i === clampedIndex()\"\n [attr.aria-label]=\"'Go to slide ' + (i + 1)\"\n [tabindex]=\"i === clampedIndex() ? 0 : -1\"\n (click)=\"goToPage(i)\"\n (keydown)=\"onPaginationKeydown($event, i)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"paginationTpl.templateRef\"\n [ngTemplateOutletContext]=\"getPaginationContext(i)\"\n />\n </button>\n } @else {\n <button\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"i === clampedIndex()\"\n [attr.aria-label]=\"'Go to slide ' + (i + 1)\"\n [tabindex]=\"i === clampedIndex() ? 0 : -1\"\n [class]=\"getDotClasses(i)\"\n (click)=\"goToPage(i)\"\n (keydown)=\"onPaginationKeydown($event, i)\"\n ></button>\n }\n }\n </div>\n }\n `,\n styles: `\n :host {\n display: block;\n }\n `,\n imports: [NgTemplateOutlet, ComIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'com-carousel',\n 'role': 'region',\n '[attr.aria-roledescription]': '\"carousel\"',\n '[attr.aria-label]': 'ariaLabel()',\n '(mouseenter)': 'pauseAutoPlay()',\n '(mouseleave)': 'resumeAutoPlay()',\n '(focusin)': 'pauseAutoPlay()',\n '(focusout)': 'resumeAutoPlay()',\n },\n})\nexport class ComCarouselComponent {\n private readonly destroyRef = inject(DestroyRef);\n private readonly renderer = inject(Renderer2);\n private readonly platform = inject(Platform);\n private readonly hostEl = inject<ElementRef<HTMLElement>>(ElementRef);\n\n // ─── Inputs ───\n\n /** Number of items visible at once. */\n readonly slidesPerView: InputSignal<number> = input<number>(1);\n\n /** Wrap from last to first and vice versa. */\n readonly loop: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Enable auto-advancing slides. */\n readonly autoPlay: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Auto-play interval in milliseconds. */\n readonly autoPlayInterval: InputSignal<number> = input<number>(5000);\n\n /** Slide transition duration in milliseconds. */\n readonly transitionDuration: InputSignal<number> = input<number>(300);\n\n /** Show prev/next navigation buttons. */\n readonly showNavigation: InputSignalWithTransform<boolean, unknown> = input(true, {\n transform: booleanAttribute,\n });\n\n /** Show pagination dot indicators. */\n readonly showPagination: InputSignalWithTransform<boolean, unknown> = input(true, {\n transform: booleanAttribute,\n });\n\n /** Accessible label for the carousel region. */\n readonly ariaLabel: InputSignal<string> = input<string>('Carousel', {\n alias: 'aria-label',\n });\n\n // ─── Model ───\n\n /** Two-way bindable current screen index. */\n readonly index: ModelSignal<number> = model<number>(0);\n\n // ─── Content Children ───\n\n readonly items: Signal<readonly ComCarouselItem[]> = contentChildren<ComCarouselItem>(ComCarouselItem);\n readonly customPrev: Signal<ComCarouselPrevTpl | undefined> = contentChild<ComCarouselPrevTpl>(ComCarouselPrevTpl);\n readonly customNext: Signal<ComCarouselNextTpl | undefined> = contentChild<ComCarouselNextTpl>(ComCarouselNextTpl);\n readonly customPagination: Signal<ComCarouselPaginationTpl | undefined> = contentChild<ComCarouselPaginationTpl>(ComCarouselPaginationTpl);\n\n // ─── View Children ───\n\n readonly trackEl: Signal<ElementRef<HTMLElement> | undefined> = viewChild<ElementRef<HTMLElement>>('track');\n\n // ─── Internal State ───\n\n private readonly paused: WritableSignal<boolean> = signal(false);\n readonly animating: WritableSignal<boolean> = signal(true);\n private autoPlayTimerId: ReturnType<typeof setInterval> | null = null;\n\n // ─── Computed ───\n\n readonly totalSlides: Signal<number> = computed(() => this.items().length);\n\n /** Total number of screens (pages). */\n readonly totalScreens: Signal<number> = computed(() =>\n Math.max(1, Math.ceil(this.totalSlides() / this.slidesPerView()))\n );\n\n readonly maxIndex: Signal<number> = computed(() =>\n Math.max(0, this.totalScreens() - 1)\n );\n\n /** Clamp index when items or slidesPerView changes. */\n readonly clampedIndex: Signal<number> = linkedSignal(() => {\n const idx = this.index();\n const max = this.maxIndex();\n return Math.max(0, Math.min(idx, max));\n });\n\n readonly canGoPrev: Signal<boolean> = computed(() =>\n this.loop() || this.clampedIndex() > 0\n );\n\n readonly canGoNext: Signal<boolean> = computed(() =>\n this.loop() || this.clampedIndex() < this.maxIndex()\n );\n\n readonly pages: Signal<number[]> = computed(() =>\n Array.from({ length: this.totalScreens() }, (_, i) => i)\n );\n\n /** Percentage-based translateX — each screen step moves by 100%. */\n readonly translateX: Signal<string> = computed(() =>\n `translateX(${-this.clampedIndex() * 100}%)`\n );\n\n /** Item width as a percentage string. */\n private readonly itemWidth: Signal<string> = computed(() =>\n `${100 / this.slidesPerView()}%`\n );\n\n readonly ariaLiveMode: Signal<string> = computed(() =>\n this.autoPlay() && !this.paused() ? 'off' : 'polite'\n );\n\n // ─── CVA Classes ───\n\n readonly containerClasses: Signal<string> = computed(() => carouselContainerVariants());\n\n readonly prevButtonClasses: Signal<string> = computed(() =>\n carouselNavButtonVariants({ position: 'prev' })\n );\n\n readonly nextButtonClasses: Signal<string> = computed(() =>\n carouselNavButtonVariants({ position: 'next' })\n );\n\n // ─── Template Contexts ───\n\n readonly prevContext: Signal<CarouselPrevContext> = computed(() => ({\n $implicit: this.canGoPrev(),\n prev: () => this.prev(),\n }));\n\n readonly nextContext: Signal<CarouselNextContext> = computed(() => ({\n $implicit: this.canGoNext(),\n next: () => this.next(),\n }));\n\n constructor() {\n // Sync clamped index back to the model\n effect(() => {\n const clamped = this.clampedIndex();\n if (this.index() !== clamped) {\n this.index.set(clamped);\n }\n });\n\n // Apply percentage-based width and ARIA attributes to each projected item\n effect(() => {\n const allItems = this.items();\n const total = allItems.length;\n const width = this.itemWidth();\n\n allItems.forEach((item, i) => {\n const el = item.elementRef.nativeElement;\n this.renderer.setStyle(el, 'min-width', width);\n this.renderer.setStyle(el, 'max-width', width);\n this.renderer.setStyle(el, 'flex-shrink', '0');\n this.renderer.setStyle(el, 'box-sizing', 'border-box');\n this.renderer.setAttribute(el, 'role', 'group');\n this.renderer.setAttribute(el, 'aria-roledescription', 'slide');\n this.renderer.setAttribute(el, 'aria-label', `${i + 1} of ${total}`);\n });\n });\n\n // Auto-play effect\n effect(() => {\n const shouldAutoPlay = this.autoPlay();\n const isPaused = this.paused();\n const interval = this.autoPlayInterval();\n\n this.clearAutoPlay();\n\n if (!this.platform.isBrowser) return; // SSR guard\n\n if (shouldAutoPlay && !isPaused) {\n this.autoPlayTimerId = setInterval(() => {\n this.next();\n }, interval);\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.clearAutoPlay();\n this.cleanupSwipe();\n });\n\n // Set up touch/swipe after view init\n if (this.platform.isBrowser) {\n effect(() => {\n const track = this.trackEl();\n if (track) {\n this.setupSwipe(track.nativeElement);\n }\n });\n }\n }\n\n // ─── Public Methods ───\n\n /** Navigate to the next screen. */\n next(): void {\n const current = this.clampedIndex();\n const max = this.maxIndex();\n\n if (current < max) {\n this.goToPage(current + 1);\n } else if (this.loop()) {\n this.goToPage(0);\n }\n }\n\n /** Navigate to the previous screen. */\n prev(): void {\n const current = this.clampedIndex();\n\n if (current > 0) {\n this.goToPage(current - 1);\n } else if (this.loop()) {\n this.goToPage(this.maxIndex());\n }\n }\n\n /** Navigate to a specific page index. */\n goToPage(pageIndex: number): void {\n if (pageIndex >= 0 && pageIndex <= this.maxIndex()) {\n this.animating.set(true);\n this.index.set(pageIndex);\n }\n }\n\n /** Get CVA classes for a pagination dot at the given index. */\n getDotClasses(pageIndex: number): string {\n return carouselDotVariants({ active: pageIndex === this.clampedIndex() });\n }\n\n /** Build template context for a custom pagination dot. */\n getPaginationContext(pageIndex: number): CarouselPaginationContext {\n return {\n $implicit: pageIndex,\n active: pageIndex === this.clampedIndex(),\n total: this.totalScreens(),\n index: pageIndex,\n };\n }\n\n /** Handle keyboard navigation on pagination dots. */\n onPaginationKeydown(event: KeyboardEvent, currentIndex: number): void {\n const total = this.totalScreens();\n let targetIndex: number;\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n targetIndex = (currentIndex + 1) % total;\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n targetIndex = (currentIndex - 1 + total) % total;\n break;\n case 'Home':\n targetIndex = 0;\n break;\n case 'End':\n targetIndex = total - 1;\n break;\n default:\n return;\n }\n\n event.preventDefault();\n this.goToPage(targetIndex);\n this.focusDotAt(targetIndex);\n }\n\n // ─── Host Event Handlers ───\n\n protected pauseAutoPlay(): void {\n if (this.autoPlay()) {\n this.paused.set(true);\n }\n }\n\n protected resumeAutoPlay(): void {\n if (this.autoPlay()) {\n this.paused.set(false);\n }\n }\n\n // ─── Private: Auto-play ───\n\n private clearAutoPlay(): void {\n if (this.autoPlayTimerId !== null) {\n clearInterval(this.autoPlayTimerId);\n this.autoPlayTimerId = null;\n }\n }\n\n // ─── Private: Touch/Swipe ───\n\n private swipeCleanupFns: Array<() => void> = [];\n private pointerStartX = 0;\n private pointerStartY = 0;\n private isSwiping = false;\n\n private setupSwipe(trackElement: HTMLElement): void {\n this.cleanupSwipe();\n\n const unlistenDown = this.renderer.listen(trackElement, 'pointerdown', (e: PointerEvent) => {\n this.pointerStartX = e.clientX;\n this.pointerStartY = e.clientY;\n this.isSwiping = true;\n this.animating.set(false);\n });\n\n const unlistenMove = this.renderer.listen(trackElement, 'pointermove', (e: PointerEvent) => {\n if (!this.isSwiping) return;\n // Prevent vertical scroll when swiping horizontally\n const dx = Math.abs(e.clientX - this.pointerStartX);\n const dy = Math.abs(e.clientY - this.pointerStartY);\n if (dx > dy && dx > 10) {\n e.preventDefault();\n }\n });\n\n const unlistenUp = this.renderer.listen(trackElement, 'pointerup', (e: PointerEvent) => {\n if (!this.isSwiping) return;\n this.isSwiping = false;\n this.animating.set(true);\n\n const delta = e.clientX - this.pointerStartX;\n const threshold = 50;\n\n if (delta < -threshold) {\n this.next();\n } else if (delta > threshold) {\n this.prev();\n }\n });\n\n const unlistenCancel = this.renderer.listen(trackElement, 'pointercancel', () => {\n this.isSwiping = false;\n this.animating.set(true);\n });\n\n this.swipeCleanupFns = [unlistenDown, unlistenMove, unlistenUp, unlistenCancel];\n }\n\n private cleanupSwipe(): void {\n this.swipeCleanupFns.forEach((fn) => fn());\n this.swipeCleanupFns = [];\n }\n\n // ─── Private: Focus Management ───\n\n private focusDotAt(index: number): void {\n const host = this.hostEl.nativeElement;\n const dots = host.querySelectorAll('[role=\"tab\"]');\n const dot = dots[index] as HTMLElement | undefined;\n dot?.focus();\n }\n}\n","// Public API for the carousel component\n\n// Types\nexport type {\n CarouselPrevContext,\n CarouselNextContext,\n CarouselPaginationContext,\n} from './carousel.models';\n\n// Variants\nexport {\n carouselContainerVariants,\n carouselNavButtonVariants,\n carouselDotVariants,\n} from './carousel.variants';\nexport type {\n CarouselNavButtonVariants,\n CarouselDotVariants,\n} from './carousel.variants';\n\n// Template directives\nexport { ComCarouselItem } from './carousel-item.directive';\nexport { ComCarouselPrevTpl } from './carousel-prev-tpl.directive';\nexport { ComCarouselNextTpl } from './carousel-next-tpl.directive';\nexport { ComCarouselPaginationTpl } from './carousel-pagination-tpl.directive';\n\n// Main component\nexport { ComCarouselComponent } from './carousel.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ const checkboxBoxVariants = cva([
|
|
|
21
21
|
'com-checkbox__box',
|
|
22
22
|
'inline-flex shrink-0 items-center justify-center',
|
|
23
23
|
'rounded-interactive-sm border-2 border-border',
|
|
24
|
-
'transition-colors duration-
|
|
24
|
+
'transition-colors duration-normal',
|
|
25
25
|
'peer-focus-visible:outline-[1px] peer-focus-visible:outline-offset-2 peer-focus-visible:outline-ring',
|
|
26
26
|
'peer-disabled:cursor-not-allowed peer-disabled:border-disabled peer-disabled:bg-disabled peer-disabled:text-disabled-foreground',
|
|
27
27
|
], {
|