ngx-com 0.0.21 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +137 -33
- package/fesm2022/ngx-com-components-alert.mjs +21 -11
- package/fesm2022/ngx-com-components-alert.mjs.map +1 -1
- package/fesm2022/ngx-com-components-avatar.mjs +9 -7
- package/fesm2022/ngx-com-components-avatar.mjs.map +1 -1
- package/fesm2022/ngx-com-components-button.mjs +1 -1
- package/fesm2022/ngx-com-components-button.mjs.map +1 -1
- package/fesm2022/ngx-com-components-calendar.mjs +27 -3112
- package/fesm2022/ngx-com-components-calendar.mjs.map +1 -1
- package/fesm2022/ngx-com-components-card.mjs +8 -8
- package/fesm2022/ngx-com-components-card.mjs.map +1 -1
- package/fesm2022/ngx-com-components-carousel.mjs +16 -4
- package/fesm2022/ngx-com-components-carousel.mjs.map +1 -1
- package/fesm2022/ngx-com-components-checkbox.mjs +1 -1
- package/fesm2022/ngx-com-components-checkbox.mjs.map +1 -1
- package/fesm2022/ngx-com-components-code-block.mjs +9 -9
- package/fesm2022/ngx-com-components-code-block.mjs.map +1 -1
- package/fesm2022/ngx-com-components-collapsible.mjs +15 -13
- package/fesm2022/ngx-com-components-collapsible.mjs.map +1 -1
- package/fesm2022/ngx-com-components-confirm.mjs +4 -4
- package/fesm2022/ngx-com-components-confirm.mjs.map +1 -1
- package/fesm2022/ngx-com-components-datepicker.mjs +2334 -0
- package/fesm2022/ngx-com-components-datepicker.mjs.map +1 -0
- package/fesm2022/ngx-com-components-dialog.mjs +47 -45
- package/fesm2022/ngx-com-components-dialog.mjs.map +1 -1
- package/fesm2022/ngx-com-components-dropdown.mjs +446 -340
- package/fesm2022/ngx-com-components-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-com-components-empty-state.mjs +5 -3
- package/fesm2022/ngx-com-components-empty-state.mjs.map +1 -1
- package/fesm2022/ngx-com-components-form-field.mjs +11 -6
- package/fesm2022/ngx-com-components-form-field.mjs.map +1 -1
- package/fesm2022/ngx-com-components-icon-lucide.mjs +41 -0
- package/fesm2022/ngx-com-components-icon-lucide.mjs.map +1 -0
- package/fesm2022/ngx-com-components-icon.mjs +89 -61
- package/fesm2022/ngx-com-components-icon.mjs.map +1 -1
- package/fesm2022/ngx-com-components-item.mjs +14 -4
- package/fesm2022/ngx-com-components-item.mjs.map +1 -1
- package/fesm2022/ngx-com-components-menu.mjs +61 -69
- package/fesm2022/ngx-com-components-menu.mjs.map +1 -1
- package/fesm2022/ngx-com-components-native-control.mjs +170 -0
- package/fesm2022/ngx-com-components-native-control.mjs.map +1 -0
- package/fesm2022/ngx-com-components-paginator.mjs +11 -3
- package/fesm2022/ngx-com-components-paginator.mjs.map +1 -1
- package/fesm2022/ngx-com-components-popover.mjs +58 -33
- package/fesm2022/ngx-com-components-popover.mjs.map +1 -1
- package/fesm2022/ngx-com-components-radio.mjs +4 -4
- package/fesm2022/ngx-com-components-radio.mjs.map +1 -1
- package/fesm2022/ngx-com-components-segmented-control.mjs +6 -4
- package/fesm2022/ngx-com-components-segmented-control.mjs.map +1 -1
- package/fesm2022/ngx-com-components-sort.mjs +63 -57
- package/fesm2022/ngx-com-components-sort.mjs.map +1 -1
- package/fesm2022/ngx-com-components-spinner.mjs +6 -6
- package/fesm2022/ngx-com-components-spinner.mjs.map +1 -1
- package/fesm2022/ngx-com-components-switch.mjs +18 -9
- package/fesm2022/ngx-com-components-switch.mjs.map +1 -1
- package/fesm2022/ngx-com-components-table.mjs +23 -9
- package/fesm2022/ngx-com-components-table.mjs.map +1 -1
- package/fesm2022/ngx-com-components-tabs.mjs +81 -58
- package/fesm2022/ngx-com-components-tabs.mjs.map +1 -1
- package/fesm2022/ngx-com-components-timepicker.mjs +1048 -0
- package/fesm2022/ngx-com-components-timepicker.mjs.map +1 -0
- package/fesm2022/ngx-com-components-toast.mjs +18 -14
- package/fesm2022/ngx-com-components-toast.mjs.map +1 -1
- package/fesm2022/ngx-com-components-tooltip.mjs +5 -5
- package/fesm2022/ngx-com-components-tooltip.mjs.map +1 -1
- package/fesm2022/ngx-com-components.mjs +0 -13
- package/fesm2022/ngx-com-components.mjs.map +1 -1
- package/fesm2022/ngx-com-tokens.mjs +0 -8
- package/fesm2022/ngx-com-tokens.mjs.map +1 -1
- package/fesm2022/ngx-com-utils.mjs +13 -1
- package/fesm2022/ngx-com-utils.mjs.map +1 -1
- package/fesm2022/ngx-com.mjs +1 -1
- package/fesm2022/ngx-com.mjs.map +1 -1
- package/package.json +51 -8
- package/styles/animations.css +38 -0
- package/styles/candy.css +121 -0
- package/styles/dark.css +159 -0
- package/styles/forest.css +117 -0
- package/styles/ocean.css +117 -0
- package/styles/themes.css +7 -0
- package/styles/tokens.css +277 -0
- package/styles/utilities.css +16 -0
- package/types/ngx-com-components-alert.d.ts +14 -4
- package/types/ngx-com-components-avatar.d.ts +2 -0
- package/types/ngx-com-components-calendar.d.ts +3 -747
- package/types/ngx-com-components-card.d.ts +2 -2
- package/types/ngx-com-components-carousel.d.ts +11 -1
- package/types/ngx-com-components-code-block.d.ts +4 -4
- package/types/ngx-com-components-collapsible.d.ts +10 -2
- package/types/ngx-com-components-confirm.d.ts +2 -2
- package/types/ngx-com-components-datepicker.d.ts +623 -0
- package/types/ngx-com-components-dialog.d.ts +5 -2
- package/types/ngx-com-components-dropdown.d.ts +22 -4
- package/types/ngx-com-components-empty-state.d.ts +2 -0
- package/types/ngx-com-components-form-field.d.ts +4 -1
- package/types/ngx-com-components-icon-lucide.d.ts +32 -0
- package/types/ngx-com-components-icon.d.ts +49 -35
- package/types/ngx-com-components-item.d.ts +12 -2
- package/types/ngx-com-components-menu.d.ts +38 -38
- package/types/ngx-com-components-native-control.d.ts +99 -0
- package/types/ngx-com-components-paginator.d.ts +2 -0
- package/types/ngx-com-components-popover.d.ts +19 -12
- package/types/ngx-com-components-segmented-control.d.ts +3 -1
- package/types/ngx-com-components-sort.d.ts +13 -10
- package/types/ngx-com-components-switch.d.ts +7 -2
- package/types/ngx-com-components-table.d.ts +16 -2
- package/types/ngx-com-components-tabs.d.ts +46 -34
- package/types/ngx-com-components-timepicker.d.ts +273 -0
- package/types/ngx-com-components-toast.d.ts +4 -2
- package/types/ngx-com-components-tooltip.d.ts +1 -1
- package/types/ngx-com-components.d.ts +6 -7
- package/types/ngx-com-tokens.d.ts +5 -3
- package/types/ngx-com-utils.d.ts +11 -1
- package/types/ngx-com.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-com-components-checkbox.mjs","sources":["../../../projects/com/components/checkbox/checkbox.variants.ts","../../../projects/com/components/checkbox/checkbox.component.ts","../../../projects/com/components/checkbox/index.ts","../../../projects/com/components/checkbox/ngx-com-components-checkbox.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\n\n/** Checkbox size variants. */\nexport type CheckboxSize = 'sm' | 'md' | 'lg';\n\n/** Checkbox color variants. */\nexport type CheckboxVariant = 'primary' | 'accent' | 'warn';\n\n/**\n * CVA variants for the visual checkbox box.\n *\n * Uses `peer` selectors to style based on native input state:\n * - `peer-checked:` for checked state\n * - `peer-indeterminate:` for indeterminate state\n * - `peer-focus-visible:` for keyboard focus\n * - `peer-disabled:` for disabled state\n *\n * @tokens `--color-border`, `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-accent`, `--color-accent-foreground`, `--color-accent-hover`,\n * `--color-warn`, `--color-warn-foreground`, `--color-warn-hover`,\n * `--color-disabled`, `--color-disabled-foreground`, `--color-ring`, `--radius-interactive-sm`\n */\nexport const checkboxBoxVariants: (props?: {\n variant?: CheckboxVariant;\n size?: CheckboxSize;\n}) => string = cva(\n [\n 'com-checkbox__box',\n 'inline-flex shrink-0 items-center justify-center',\n 'rounded-interactive-sm border-2 border-border',\n 'transition-colors duration-150',\n 'peer-focus-visible:outline-[1px] peer-focus-visible:outline-offset-2 peer-focus-visible:outline-ring',\n 'peer-disabled:cursor-not-allowed peer-disabled:border-disabled peer-disabled:bg-disabled peer-disabled:text-disabled-foreground',\n ],\n {\n variants: {\n variant: {\n primary: [\n 'peer-checked:border-primary peer-checked:bg-primary peer-checked:text-primary-foreground',\n 'peer-indeterminate:border-primary peer-indeterminate:bg-primary peer-indeterminate:text-primary-foreground',\n 'group-hover:border-primary-hover',\n 'peer-checked:group-hover:bg-primary-hover peer-checked:group-hover:border-primary-hover',\n 'peer-indeterminate:group-hover:bg-primary-hover peer-indeterminate:group-hover:border-primary-hover',\n ],\n accent: [\n 'peer-checked:border-accent peer-checked:bg-accent peer-checked:text-accent-foreground',\n 'peer-indeterminate:border-accent peer-indeterminate:bg-accent peer-indeterminate:text-accent-foreground',\n 'group-hover:border-accent-hover',\n 'peer-checked:group-hover:bg-accent-hover peer-checked:group-hover:border-accent-hover',\n 'peer-indeterminate:group-hover:bg-accent-hover peer-indeterminate:group-hover:border-accent-hover',\n ],\n warn: [\n 'peer-checked:border-warn peer-checked:bg-warn peer-checked:text-warn-foreground',\n 'peer-indeterminate:border-warn peer-indeterminate:bg-warn peer-indeterminate:text-warn-foreground',\n 'group-hover:border-warn-hover',\n 'peer-checked:group-hover:bg-warn-hover peer-checked:group-hover:border-warn-hover',\n 'peer-indeterminate:group-hover:bg-warn-hover peer-indeterminate:group-hover:border-warn-hover',\n ],\n },\n size: {\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n);\n\n/** Size-based classes for the checkmark SVG icon. */\nexport const CHECKBOX_ICON_SIZES: Record<CheckboxSize, string> = {\n sm: 'size-3',\n md: 'size-3.5',\n lg: 'size-4',\n};\n\n/** Size-based classes for the label content. */\nexport const CHECKBOX_LABEL_SIZES: Record<CheckboxSize, string> = {\n sm: 'text-sm ms-2',\n md: 'text-base ms-2.5',\n lg: 'text-lg ms-3',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n InputSignal,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport {\n checkboxBoxVariants,\n CHECKBOX_ICON_SIZES,\n CHECKBOX_LABEL_SIZES,\n} from './checkbox.variants';\nimport type { CheckboxSize, CheckboxVariant } from './checkbox.variants';\n\n/** Event emitted when checkbox state changes. */\nexport interface CheckboxChange {\n checked: boolean;\n source: ComCheckbox;\n}\n\n/** Auto-incrementing ID counter for unique checkbox IDs. */\nlet nextId = 0;\n\n/**\n * Production-grade checkbox component with full accessibility support.\n *\n * Uses a native `<input type=\"checkbox\">` for built-in keyboard handling,\n * `:checked` and `:indeterminate` pseudo-classes, and screen reader support.\n *\n * Implements `ControlValueAccessor` for Reactive Forms integration via\n * `NgControl` injection pattern (no `NG_VALUE_ACCESSOR` provider).\n *\n * @tokens `--color-border`, `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-accent`, `--color-accent-foreground`, `--color-accent-hover`,\n * `--color-warn`, `--color-warn-foreground`, `--color-warn-hover`,\n * `--color-disabled`, `--color-disabled-foreground`, `--color-ring`\n *\n * @example Basic usage\n * ```html\n * <com-checkbox [(checked)]=\"isActive\">Enable feature</com-checkbox>\n * ```\n *\n * @example With reactive forms\n * ```html\n * <com-checkbox formControlName=\"acceptTerms\">\n * I accept the <a href=\"/terms\">terms and conditions</a>\n * </com-checkbox>\n * ```\n *\n * @example Indeterminate state\n * ```html\n * <com-checkbox [(indeterminate)]=\"hasPartialSelection\" (changed)=\"onSelectAll($event)\">\n * Select all\n * </com-checkbox>\n * ```\n *\n * @example Variants and sizes\n * ```html\n * <com-checkbox variant=\"accent\" size=\"lg\">Large accent checkbox</com-checkbox>\n * <com-checkbox variant=\"warn\" size=\"sm\">Small warning checkbox</com-checkbox>\n * ```\n */\n@Component({\n selector: 'com-checkbox',\n exportAs: 'comCheckbox',\n template: `\n <label\n class=\"group relative inline-flex items-center\"\n [class.cursor-pointer]=\"!disabled()\"\n [class.cursor-not-allowed]=\"disabled()\"\n >\n <span><input\n #inputElement\n type=\"checkbox\"\n class=\"peer sr-only\"\n [id]=\"inputId()\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.name]=\"name()\"\n [attr.value]=\"htmlValue()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-describedby]=\"ariaDescribedby()\"\n (change)=\"onInputChange($event)\"\n (blur)=\"onBlur()\"\n /></span>\n <span [class]=\"boxClasses()\">\n @if (checked() && !indeterminate()) {\n <svg\n class=\"pointer-events-none\"\n [class]=\"iconSizeClass()\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <polyline points=\"4 12 9 17 20 6\" />\n </svg>\n }\n @if (indeterminate()) {\n <svg\n class=\"pointer-events-none\"\n [class]=\"iconSizeClass()\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n }\n </span>\n <span\n class=\"com-checkbox__label select-none peer-disabled:cursor-not-allowed peer-disabled:text-disabled-foreground\"\n [class]=\"labelSizeClass()\"\n >\n <ng-content />\n </span>\n </label>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'com-checkbox inline-block align-middle',\n '[class.com-checkbox--disabled]': 'disabled()',\n '[class.com-checkbox--checked]': 'checked()',\n '[class.com-checkbox--indeterminate]': 'indeterminate()',\n },\n})\nexport class ComCheckbox implements ControlValueAccessor {\n /** Optional NgControl for reactive forms integration. */\n readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n /** Reference to the native input element. */\n readonly inputRef: Signal<ElementRef<HTMLInputElement> | undefined> =\n viewChild<ElementRef<HTMLInputElement>>('inputElement');\n\n /** Unique ID for this checkbox instance. */\n private readonly uniqueId: string = `com-checkbox-${nextId++}`;\n\n // Inputs\n readonly size: InputSignal<CheckboxSize> = input<CheckboxSize>('md');\n readonly variant: InputSignal<CheckboxVariant> = input<CheckboxVariant>('primary');\n readonly checked: ModelSignal<boolean> = model<boolean>(false);\n readonly indeterminate: ModelSignal<boolean> = model<boolean>(false);\n readonly disabled: ModelSignal<boolean> = model<boolean>(false);\n readonly htmlValue: InputSignal<string | undefined> = input<string | undefined>(undefined, { alias: 'value' });\n readonly name: InputSignal<string | undefined> = input<string>();\n\n // Signal Forms inputs — set automatically by [formField] via setInputOnDirectives\n readonly touched: ModelSignal<boolean> = model<boolean>(false);\n readonly invalid: InputSignal<boolean> = input<boolean>(false);\n readonly sfErrors: InputSignal<readonly unknown[]> = input<readonly unknown[]>([], { alias: 'errors' });\n readonly sfRequired: InputSignal<boolean> = input<boolean>(false, { alias: 'required' });\n readonly id: InputSignal<string | undefined> = input<string>();\n readonly ariaLabel: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-labelledby' });\n readonly ariaDescribedby: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-describedby' });\n\n // Outputs\n readonly changed: OutputEmitterRef<CheckboxChange> = output<CheckboxChange>();\n\n // Computed state\n readonly inputId: Signal<string> = computed(() => this.id() ?? this.uniqueId);\n\n protected readonly boxClasses: Signal<string> = computed(() =>\n checkboxBoxVariants({ variant: this.variant(), size: this.size() })\n );\n\n protected readonly iconSizeClass: Signal<string> = computed(() => CHECKBOX_ICON_SIZES[this.size()]);\n protected readonly labelSizeClass: Signal<string> = computed(() => CHECKBOX_LABEL_SIZES[this.size()]);\n\n // CVA callbacks\n private onChange: (value: boolean) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n // Sync indeterminate state to DOM (needed because [indeterminate] is a property, not attribute)\n effect(() => {\n const isIndeterminate = this.indeterminate();\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.indeterminate = isIndeterminate;\n }\n });\n }\n\n // ControlValueAccessor implementation\n writeValue(value: boolean): void {\n this.checked.set(value ?? false);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n // Event handlers\n protected onBlur(): void {\n this.onTouched();\n this.touched.set(true);\n }\n\n protected onInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n const newChecked = input.checked;\n\n // Clear indeterminate on user interaction\n if (this.indeterminate()) {\n this.indeterminate.set(false);\n input.indeterminate = false;\n }\n\n this.checked.set(newChecked);\n this.onChange(newChecked);\n this.changed.emit({ checked: newChecked, source: this });\n }\n\n // Public API\n /** Focuses this checkbox's input element. */\n focus(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n /** Toggles the checkbox state programmatically. */\n toggle(): void {\n if (this.disabled()) {\n return;\n }\n\n const newChecked = !this.checked();\n this.checked.set(newChecked);\n this.indeterminate.set(false);\n this.onChange(newChecked);\n this.changed.emit({ checked: newChecked, source: this });\n }\n}\n","// Public API for the checkbox component\n\n// Main component\nexport { ComCheckbox } from './checkbox.component';\n\n// Types\nexport type { CheckboxChange } from './checkbox.component';\n\n// Variants (for advanced customization)\nexport {\n checkboxBoxVariants,\n CHECKBOX_ICON_SIZES,\n CHECKBOX_LABEL_SIZES,\n} from './checkbox.variants';\n\nexport type { CheckboxSize, CheckboxVariant } from './checkbox.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-checkbox.mjs","sources":["../../../projects/com/components/checkbox/checkbox.variants.ts","../../../projects/com/components/checkbox/checkbox.component.ts","../../../projects/com/components/checkbox/index.ts","../../../projects/com/components/checkbox/ngx-com-components-checkbox.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\n\n/** Checkbox size variants. */\nexport type CheckboxSize = 'sm' | 'md' | 'lg';\n\n/** Checkbox color variants. */\nexport type CheckboxVariant = 'primary' | 'accent' | 'warn';\n\n/**\n * CVA variants for the visual checkbox box.\n *\n * Uses `peer` selectors to style based on native input state:\n * - `peer-checked:` for checked state\n * - `peer-indeterminate:` for indeterminate state\n * - `peer-focus-visible:` for keyboard focus\n * - `peer-disabled:` for disabled state\n *\n * @tokens `--color-border`, `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-accent`, `--color-accent-foreground`, `--color-accent-hover`,\n * `--color-warn`, `--color-warn-foreground`, `--color-warn-hover`,\n * `--color-disabled`, `--color-disabled-foreground`, `--color-ring`, `--radius-interactive-sm`\n */\nexport const checkboxBoxVariants: (props?: {\n variant?: CheckboxVariant;\n size?: CheckboxSize;\n}) => string = cva(\n [\n 'com-checkbox__box',\n 'inline-flex shrink-0 items-center justify-center',\n 'rounded-interactive-sm border-2 border-border',\n 'transition-colors duration-normal',\n 'peer-focus-visible:outline-[1px] peer-focus-visible:outline-offset-2 peer-focus-visible:outline-ring',\n 'peer-disabled:cursor-not-allowed peer-disabled:border-disabled peer-disabled:bg-disabled peer-disabled:text-disabled-foreground',\n ],\n {\n variants: {\n variant: {\n primary: [\n 'peer-checked:border-primary peer-checked:bg-primary peer-checked:text-primary-foreground',\n 'peer-indeterminate:border-primary peer-indeterminate:bg-primary peer-indeterminate:text-primary-foreground',\n 'group-hover:border-primary-hover',\n 'peer-checked:group-hover:bg-primary-hover peer-checked:group-hover:border-primary-hover',\n 'peer-indeterminate:group-hover:bg-primary-hover peer-indeterminate:group-hover:border-primary-hover',\n ],\n accent: [\n 'peer-checked:border-accent peer-checked:bg-accent peer-checked:text-accent-foreground',\n 'peer-indeterminate:border-accent peer-indeterminate:bg-accent peer-indeterminate:text-accent-foreground',\n 'group-hover:border-accent-hover',\n 'peer-checked:group-hover:bg-accent-hover peer-checked:group-hover:border-accent-hover',\n 'peer-indeterminate:group-hover:bg-accent-hover peer-indeterminate:group-hover:border-accent-hover',\n ],\n warn: [\n 'peer-checked:border-warn peer-checked:bg-warn peer-checked:text-warn-foreground',\n 'peer-indeterminate:border-warn peer-indeterminate:bg-warn peer-indeterminate:text-warn-foreground',\n 'group-hover:border-warn-hover',\n 'peer-checked:group-hover:bg-warn-hover peer-checked:group-hover:border-warn-hover',\n 'peer-indeterminate:group-hover:bg-warn-hover peer-indeterminate:group-hover:border-warn-hover',\n ],\n },\n size: {\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n },\n }\n);\n\n/** Size-based classes for the checkmark SVG icon. */\nexport const CHECKBOX_ICON_SIZES: Record<CheckboxSize, string> = {\n sm: 'size-3',\n md: 'size-3.5',\n lg: 'size-4',\n};\n\n/** Size-based classes for the label content. */\nexport const CHECKBOX_LABEL_SIZES: Record<CheckboxSize, string> = {\n sm: 'text-sm ms-2',\n md: 'text-base ms-2.5',\n lg: 'text-lg ms-3',\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n input,\n model,\n output,\n viewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n InputSignal,\n ModelSignal,\n OutputEmitterRef,\n Signal,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport type { ControlValueAccessor } from '@angular/forms';\nimport {\n checkboxBoxVariants,\n CHECKBOX_ICON_SIZES,\n CHECKBOX_LABEL_SIZES,\n} from './checkbox.variants';\nimport type { CheckboxSize, CheckboxVariant } from './checkbox.variants';\n\n/** Event emitted when checkbox state changes. */\nexport interface CheckboxChange {\n checked: boolean;\n source: ComCheckbox;\n}\n\n/** Auto-incrementing ID counter for unique checkbox IDs. */\nlet nextId = 0;\n\n/**\n * Production-grade checkbox component with full accessibility support.\n *\n * Uses a native `<input type=\"checkbox\">` for built-in keyboard handling,\n * `:checked` and `:indeterminate` pseudo-classes, and screen reader support.\n *\n * Implements `ControlValueAccessor` for Reactive Forms integration via\n * `NgControl` injection pattern (no `NG_VALUE_ACCESSOR` provider).\n *\n * @tokens `--color-border`, `--color-primary`, `--color-primary-foreground`, `--color-primary-hover`,\n * `--color-accent`, `--color-accent-foreground`, `--color-accent-hover`,\n * `--color-warn`, `--color-warn-foreground`, `--color-warn-hover`,\n * `--color-disabled`, `--color-disabled-foreground`, `--color-ring`\n *\n * @example Basic usage\n * ```html\n * <com-checkbox [(checked)]=\"isActive\">Enable feature</com-checkbox>\n * ```\n *\n * @example With reactive forms\n * ```html\n * <com-checkbox formControlName=\"acceptTerms\">\n * I accept the <a href=\"/terms\">terms and conditions</a>\n * </com-checkbox>\n * ```\n *\n * @example Indeterminate state\n * ```html\n * <com-checkbox [(indeterminate)]=\"hasPartialSelection\" (changed)=\"onSelectAll($event)\">\n * Select all\n * </com-checkbox>\n * ```\n *\n * @example Variants and sizes\n * ```html\n * <com-checkbox variant=\"accent\" size=\"lg\">Large accent checkbox</com-checkbox>\n * <com-checkbox variant=\"warn\" size=\"sm\">Small warning checkbox</com-checkbox>\n * ```\n */\n@Component({\n selector: 'com-checkbox',\n exportAs: 'comCheckbox',\n template: `\n <label\n class=\"group relative inline-flex items-center\"\n [class.cursor-pointer]=\"!disabled()\"\n [class.cursor-not-allowed]=\"disabled()\"\n >\n <span><input\n #inputElement\n type=\"checkbox\"\n class=\"peer sr-only\"\n [id]=\"inputId()\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [attr.name]=\"name()\"\n [attr.value]=\"htmlValue()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-describedby]=\"ariaDescribedby()\"\n (change)=\"onInputChange($event)\"\n (blur)=\"onBlur()\"\n /></span>\n <span [class]=\"boxClasses()\">\n @if (checked() && !indeterminate()) {\n <svg\n class=\"pointer-events-none\"\n [class]=\"iconSizeClass()\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <polyline points=\"4 12 9 17 20 6\" />\n </svg>\n }\n @if (indeterminate()) {\n <svg\n class=\"pointer-events-none\"\n [class]=\"iconSizeClass()\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n </svg>\n }\n </span>\n <span\n class=\"com-checkbox__label select-none peer-disabled:cursor-not-allowed peer-disabled:text-disabled-foreground\"\n [class]=\"labelSizeClass()\"\n >\n <ng-content />\n </span>\n </label>\n `,\n styles: `\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'com-checkbox inline-block align-middle',\n '[class.com-checkbox--disabled]': 'disabled()',\n '[class.com-checkbox--checked]': 'checked()',\n '[class.com-checkbox--indeterminate]': 'indeterminate()',\n },\n})\nexport class ComCheckbox implements ControlValueAccessor {\n /** Optional NgControl for reactive forms integration. */\n readonly ngControl: NgControl | null = inject(NgControl, { optional: true, self: true });\n\n /** Reference to the native input element. */\n readonly inputRef: Signal<ElementRef<HTMLInputElement> | undefined> =\n viewChild<ElementRef<HTMLInputElement>>('inputElement');\n\n /** Unique ID for this checkbox instance. */\n private readonly uniqueId: string = `com-checkbox-${nextId++}`;\n\n // Inputs\n readonly size: InputSignal<CheckboxSize> = input<CheckboxSize>('md');\n readonly variant: InputSignal<CheckboxVariant> = input<CheckboxVariant>('primary');\n readonly checked: ModelSignal<boolean> = model<boolean>(false);\n readonly indeterminate: ModelSignal<boolean> = model<boolean>(false);\n readonly disabled: ModelSignal<boolean> = model<boolean>(false);\n readonly htmlValue: InputSignal<string | undefined> = input<string | undefined>(undefined, { alias: 'value' });\n readonly name: InputSignal<string | undefined> = input<string>();\n\n // Signal Forms inputs — set automatically by [formField] via setInputOnDirectives\n readonly touched: ModelSignal<boolean> = model<boolean>(false);\n readonly invalid: InputSignal<boolean> = input<boolean>(false);\n readonly sfErrors: InputSignal<readonly unknown[]> = input<readonly unknown[]>([], { alias: 'errors' });\n readonly sfRequired: InputSignal<boolean> = input<boolean>(false, { alias: 'required' });\n readonly id: InputSignal<string | undefined> = input<string>();\n readonly ariaLabel: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-labelledby' });\n readonly ariaDescribedby: InputSignal<string | null> = input<string | null>(null, { alias: 'aria-describedby' });\n\n // Outputs\n readonly changed: OutputEmitterRef<CheckboxChange> = output<CheckboxChange>();\n\n // Computed state\n readonly inputId: Signal<string> = computed(() => this.id() ?? this.uniqueId);\n\n protected readonly boxClasses: Signal<string> = computed(() =>\n checkboxBoxVariants({ variant: this.variant(), size: this.size() })\n );\n\n protected readonly iconSizeClass: Signal<string> = computed(() => CHECKBOX_ICON_SIZES[this.size()]);\n protected readonly labelSizeClass: Signal<string> = computed(() => CHECKBOX_LABEL_SIZES[this.size()]);\n\n // CVA callbacks\n private onChange: (value: boolean) => void = () => {};\n protected onTouched: () => void = () => {};\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n // Sync indeterminate state to DOM (needed because [indeterminate] is a property, not attribute)\n effect(() => {\n const isIndeterminate = this.indeterminate();\n const inputEl = this.inputRef()?.nativeElement;\n if (inputEl) {\n inputEl.indeterminate = isIndeterminate;\n }\n });\n }\n\n // ControlValueAccessor implementation\n writeValue(value: boolean): void {\n this.checked.set(value ?? false);\n }\n\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n // Event handlers\n protected onBlur(): void {\n this.onTouched();\n this.touched.set(true);\n }\n\n protected onInputChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n const newChecked = input.checked;\n\n // Clear indeterminate on user interaction\n if (this.indeterminate()) {\n this.indeterminate.set(false);\n input.indeterminate = false;\n }\n\n this.checked.set(newChecked);\n this.onChange(newChecked);\n this.changed.emit({ checked: newChecked, source: this });\n }\n\n // Public API\n /** Focuses this checkbox's input element. */\n focus(): void {\n this.inputRef()?.nativeElement.focus();\n }\n\n /** Toggles the checkbox state programmatically. */\n toggle(): void {\n if (this.disabled()) {\n return;\n }\n\n const newChecked = !this.checked();\n this.checked.set(newChecked);\n this.indeterminate.set(false);\n this.onChange(newChecked);\n this.changed.emit({ checked: newChecked, source: this });\n }\n}\n","// Public API for the checkbox component\n\n// Main component\nexport { ComCheckbox } from './checkbox.component';\n\n// Types\nexport type { CheckboxChange } from './checkbox.component';\n\n// Variants (for advanced customization)\nexport {\n checkboxBoxVariants,\n CHECKBOX_ICON_SIZES,\n CHECKBOX_LABEL_SIZES,\n} from './checkbox.variants';\n\nexport type { CheckboxSize, CheckboxVariant } from './checkbox.variants';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -55,7 +55,7 @@ const codeBlockVariants = cva([
|
|
|
55
55
|
* <com-code-block [code]="htmlSnippet" language="HTML" variant="outlined" />
|
|
56
56
|
* ```
|
|
57
57
|
*/
|
|
58
|
-
class
|
|
58
|
+
class ComCodeBlock {
|
|
59
59
|
/** The raw code string to display. */
|
|
60
60
|
code = input.required(...(ngDevMode ? [{ debugName: "code" }] : []));
|
|
61
61
|
/** Language label shown in the header (e.g. 'TypeScript', 'HTML'). */
|
|
@@ -82,8 +82,8 @@ class ComCodeBlockComponent {
|
|
|
82
82
|
this.copyTimeoutId = setTimeout(() => this.isCopied.set(false), 2000);
|
|
83
83
|
this.destroyRef.onDestroy(() => clearTimeout(this.copyTimeoutId));
|
|
84
84
|
}
|
|
85
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
86
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type:
|
|
85
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComCodeBlock, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
86
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ComCodeBlock, isStandalone: true, selector: "com-code-block", inputs: { code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: true, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { copied: "copied" }, host: { properties: { "class": "hostClasses()" } }, exportAs: ["comCodeBlock"], ngImport: i0, template: `
|
|
87
87
|
<div class="flex items-center justify-between px-4 py-2 border-b border-border-subtle text-xs text-muted-foreground">
|
|
88
88
|
@if (language()) {
|
|
89
89
|
<span class="select-none font-sans font-medium">{{ language() }}</span>
|
|
@@ -92,7 +92,7 @@ class ComCodeBlockComponent {
|
|
|
92
92
|
}
|
|
93
93
|
<button
|
|
94
94
|
type="button"
|
|
95
|
-
class="inline-flex items-center justify-center rounded-
|
|
95
|
+
class="inline-flex items-center justify-center rounded-interactive-sm p-1
|
|
96
96
|
text-muted-foreground hover:text-foreground hover:bg-muted-hover
|
|
97
97
|
transition-colors outline-none
|
|
98
98
|
focus-visible:outline-2 focus-visible:outline-offset-2
|
|
@@ -107,14 +107,14 @@ class ComCodeBlockComponent {
|
|
|
107
107
|
}
|
|
108
108
|
</button>
|
|
109
109
|
</div>
|
|
110
|
-
<pre class="overflow-auto p-4 m-0 flex-1"><code class="whitespace-pre font-mono">{{ code() }}</code></pre>
|
|
110
|
+
<pre class="overflow-auto p-4 m-0 flex-1" tabindex="0" role="region" [attr.aria-label]="language() ? language() + ' code' : 'Code'"><code class="whitespace-pre font-mono">{{ code() }}</code></pre>
|
|
111
111
|
<span
|
|
112
112
|
class="sr-only"
|
|
113
113
|
aria-live="polite"
|
|
114
114
|
>{{ isCopied() ? 'Copied to clipboard' : '' }}</span>
|
|
115
115
|
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: ComIcon, selector: "com-icon", inputs: ["name", "img", "color", "size", "strokeWidth", "absoluteStrokeWidth", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
116
116
|
}
|
|
117
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type:
|
|
117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComCodeBlock, decorators: [{
|
|
118
118
|
type: Component,
|
|
119
119
|
args: [{ selector: 'com-code-block', exportAs: 'comCodeBlock', host: {
|
|
120
120
|
'[class]': 'hostClasses()',
|
|
@@ -127,7 +127,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
127
127
|
}
|
|
128
128
|
<button
|
|
129
129
|
type="button"
|
|
130
|
-
class="inline-flex items-center justify-center rounded-
|
|
130
|
+
class="inline-flex items-center justify-center rounded-interactive-sm p-1
|
|
131
131
|
text-muted-foreground hover:text-foreground hover:bg-muted-hover
|
|
132
132
|
transition-colors outline-none
|
|
133
133
|
focus-visible:outline-2 focus-visible:outline-offset-2
|
|
@@ -142,7 +142,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
142
142
|
}
|
|
143
143
|
</button>
|
|
144
144
|
</div>
|
|
145
|
-
<pre class="overflow-auto p-4 m-0 flex-1"><code class="whitespace-pre font-mono">{{ code() }}</code></pre>
|
|
145
|
+
<pre class="overflow-auto p-4 m-0 flex-1" tabindex="0" role="region" [attr.aria-label]="language() ? language() + ' code' : 'Code'"><code class="whitespace-pre font-mono">{{ code() }}</code></pre>
|
|
146
146
|
<span
|
|
147
147
|
class="sr-only"
|
|
148
148
|
aria-live="polite"
|
|
@@ -154,5 +154,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
154
154
|
* Generated bundle index. Do not edit.
|
|
155
155
|
*/
|
|
156
156
|
|
|
157
|
-
export {
|
|
157
|
+
export { ComCodeBlock, codeBlockVariants };
|
|
158
158
|
//# sourceMappingURL=ngx-com-components-code-block.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-com-components-code-block.mjs","sources":["../../../projects/com/components/code-block/code-block.variants.ts","../../../projects/com/components/code-block/code-block.component.ts","../../../projects/com/components/code-block/ngx-com-components-code-block.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\n\nexport type CodeBlockVariant = 'filled' | 'outlined';\n\n/**\n * CVA variants for the code block container.\n *\n * @tokens `--color-muted`, `--color-foreground`,\n * `--color-border`, `--color-border-subtle`,\n * `--radius-card`, `--font-mono`\n */\nexport const codeBlockVariants: (props?: {\n variant?: CodeBlockVariant;\n}) => string = cva(\n [\n 'relative',\n 'flex',\n 'flex-col',\n 'rounded-card',\n 'overflow-hidden',\n 'font-mono',\n 'text-sm',\n ],\n {\n variants: {\n variant: {\n filled: 'bg-muted text-foreground border border-border-subtle',\n outlined: 'bg-transparent text-foreground border border-border',\n },\n },\n defaultVariants: {\n variant: 'filled',\n },\n },\n);\n\nexport type CodeBlockVariants = VariantProps<typeof codeBlockVariants>;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n InputSignal,\n OutputEmitterRef,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport { mergeClasses } from 'ngx-com/utils';\nimport { codeBlockVariants } from './code-block.variants';\nimport type { CodeBlockVariant } from './code-block.variants';\n\n/**\n * Code block component for displaying code snippets with a language label\n * and copy-to-clipboard functionality.\n *\n * Renders plain monospace text in a styled container — no syntax highlighting.\n * The header bar shows an optional language label and a copy button that\n * provides visual feedback (checkmark icon for 2 seconds) after copying.\n *\n * @tokens `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`,\n * `--color-foreground`, `--color-border`, `--color-border-subtle`,\n * `--color-ring`, `--color-success`,\n * `--font-mono`, `--radius-card`\n *\n * @example Basic usage with language label\n * ```html\n * <com-code-block code=\"const x = 42;\" language=\"TypeScript\" />\n * ```\n *\n * @example Outlined variant\n * ```html\n * <com-code-block [code]=\"htmlSnippet\" language=\"HTML\" variant=\"outlined\" />\n * ```\n */\n@Component({\n selector: 'com-code-block',\n exportAs: 'comCodeBlock',\n host: {\n '[class]': 'hostClasses()',\n },\n template: `\n <div class=\"flex items-center justify-between px-4 py-2 border-b border-border-subtle text-xs text-muted-foreground\">\n @if (language()) {\n <span class=\"select-none font-sans font-medium\">{{ language() }}</span>\n } @else {\n <span></span>\n }\n <button\n type=\"button\"\n class=\"inline-flex items-center justify-center rounded-
|
|
1
|
+
{"version":3,"file":"ngx-com-components-code-block.mjs","sources":["../../../projects/com/components/code-block/code-block.variants.ts","../../../projects/com/components/code-block/code-block.component.ts","../../../projects/com/components/code-block/ngx-com-components-code-block.ts"],"sourcesContent":["import { cva } from 'class-variance-authority';\nimport type { VariantProps } from 'class-variance-authority';\n\nexport type CodeBlockVariant = 'filled' | 'outlined';\n\n/**\n * CVA variants for the code block container.\n *\n * @tokens `--color-muted`, `--color-foreground`,\n * `--color-border`, `--color-border-subtle`,\n * `--radius-card`, `--font-mono`\n */\nexport const codeBlockVariants: (props?: {\n variant?: CodeBlockVariant;\n}) => string = cva(\n [\n 'relative',\n 'flex',\n 'flex-col',\n 'rounded-card',\n 'overflow-hidden',\n 'font-mono',\n 'text-sm',\n ],\n {\n variants: {\n variant: {\n filled: 'bg-muted text-foreground border border-border-subtle',\n outlined: 'bg-transparent text-foreground border border-border',\n },\n },\n defaultVariants: {\n variant: 'filled',\n },\n },\n);\n\nexport type CodeBlockVariants = VariantProps<typeof codeBlockVariants>;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport type {\n InputSignal,\n OutputEmitterRef,\n Signal,\n WritableSignal,\n} from '@angular/core';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { ComIcon } from 'ngx-com/components/icon';\nimport { mergeClasses } from 'ngx-com/utils';\nimport { codeBlockVariants } from './code-block.variants';\nimport type { CodeBlockVariant } from './code-block.variants';\n\n/**\n * Code block component for displaying code snippets with a language label\n * and copy-to-clipboard functionality.\n *\n * Renders plain monospace text in a styled container — no syntax highlighting.\n * The header bar shows an optional language label and a copy button that\n * provides visual feedback (checkmark icon for 2 seconds) after copying.\n *\n * @tokens `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`,\n * `--color-foreground`, `--color-border`, `--color-border-subtle`,\n * `--color-ring`, `--color-success`,\n * `--font-mono`, `--radius-card`\n *\n * @example Basic usage with language label\n * ```html\n * <com-code-block code=\"const x = 42;\" language=\"TypeScript\" />\n * ```\n *\n * @example Outlined variant\n * ```html\n * <com-code-block [code]=\"htmlSnippet\" language=\"HTML\" variant=\"outlined\" />\n * ```\n */\n@Component({\n selector: 'com-code-block',\n exportAs: 'comCodeBlock',\n host: {\n '[class]': 'hostClasses()',\n },\n template: `\n <div class=\"flex items-center justify-between px-4 py-2 border-b border-border-subtle text-xs text-muted-foreground\">\n @if (language()) {\n <span class=\"select-none font-sans font-medium\">{{ language() }}</span>\n } @else {\n <span></span>\n }\n <button\n type=\"button\"\n class=\"inline-flex items-center justify-center rounded-interactive-sm p-1\n text-muted-foreground hover:text-foreground hover:bg-muted-hover\n transition-colors outline-none\n focus-visible:outline-2 focus-visible:outline-offset-2\n focus-visible:outline-[--color-ring]\"\n [attr.aria-label]=\"isCopied() ? 'Copied' : 'Copy code'\"\n \t(click)=\"copyToClipboard()\"\n >\n @if (isCopied()) {\n <com-icon name=\"check\" size=\"sm\" class=\"text-success\" aria-hidden=\"true\" />\n } @else {\n <com-icon name=\"clipboard\" size=\"sm\" aria-hidden=\"true\" />\n }\n </button>\n </div>\n <pre class=\"overflow-auto p-4 m-0 flex-1\" tabindex=\"0\" role=\"region\" [attr.aria-label]=\"language() ? language() + ' code' : 'Code'\"><code class=\"whitespace-pre font-mono\">{{ code() }}</code></pre>\n <span\n class=\"sr-only\"\n aria-live=\"polite\"\n >{{ isCopied() ? 'Copied to clipboard' : '' }}</span>\n `,\n styles: `\n :host {\n display: block;\n }\n `,\n imports: [ComIcon],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class ComCodeBlock {\n /** The raw code string to display. */\n readonly code: InputSignal<string> = input.required<string>();\n\n /** Language label shown in the header (e.g. 'TypeScript', 'HTML'). */\n readonly language: InputSignal<string | undefined> = input<string>();\n\n /** Visual variant. */\n readonly variant: InputSignal<CodeBlockVariant> = input<CodeBlockVariant>('filled');\n\n /** Consumer CSS classes — merged with variant classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n /** Emitted when code is successfully copied to clipboard. */\n readonly copied: OutputEmitterRef<void> = output<void>();\n\n /** @internal Tracks copy feedback state. */\n protected readonly isCopied: WritableSignal<boolean> = signal(false);\n\n /** @internal Computed host element classes. */\n protected readonly hostClasses: Signal<string> = computed(() =>\n mergeClasses(\n codeBlockVariants({ variant: this.variant() }),\n this.userClass(),\n ),\n );\n\n private readonly clipboard = inject(Clipboard);\n private readonly destroyRef = inject(DestroyRef);\n private copyTimeoutId: ReturnType<typeof setTimeout> | undefined;\n\n /** Copies the code to clipboard and shows feedback for 2 seconds. */\n protected copyToClipboard(): void {\n this.clipboard.copy(this.code());\n this.isCopied.set(true);\n this.copied.emit();\n\n clearTimeout(this.copyTimeoutId);\n this.copyTimeoutId = setTimeout(() => this.isCopied.set(false), 2000);\n\n this.destroyRef.onDestroy(() => clearTimeout(this.copyTimeoutId));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { cva } from 'class-variance-authority';
|
|
2
2
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { inject, TemplateRef, Directive, model, input, booleanAttribute, computed, contentChild, ChangeDetectionStrategy, Component,
|
|
3
|
+
import { inject, TemplateRef, Directive, model, input, booleanAttribute, computed, contentChild, ChangeDetectionStrategy, Component, linkedSignal } from '@angular/core';
|
|
4
4
|
import { mergeClasses } from 'ngx-com/utils';
|
|
5
5
|
import { NgTemplateOutlet } from '@angular/common';
|
|
6
6
|
|
|
@@ -40,7 +40,7 @@ const collapsibleTriggerVariants = cva([
|
|
|
40
40
|
'transition-colors',
|
|
41
41
|
'focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',
|
|
42
42
|
'disabled:pointer-events-none disabled:text-disabled-foreground',
|
|
43
|
-
'[&>svg]:transition-transform [&>svg]:duration-
|
|
43
|
+
'[&>svg]:transition-transform [&>svg]:duration-slow',
|
|
44
44
|
'[&>svg.com-collapsible-icon]:data-[state=open]:rotate-180',
|
|
45
45
|
].join(' '), {
|
|
46
46
|
variants: {
|
|
@@ -66,6 +66,8 @@ const collapsibleTriggerVariants = cva([
|
|
|
66
66
|
* Directive to mark a template as the custom trigger layout template.
|
|
67
67
|
* Replaces the inner content of the trigger while preserving ARIA and keyboard handling.
|
|
68
68
|
*
|
|
69
|
+
* @tokens none
|
|
70
|
+
*
|
|
69
71
|
* @example
|
|
70
72
|
* ```html
|
|
71
73
|
* <button comCollapsibleTrigger>
|
|
@@ -106,6 +108,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
106
108
|
* Wraps the content with custom chrome (headers, footers, padding).
|
|
107
109
|
* The grid animation still applies on the host.
|
|
108
110
|
*
|
|
111
|
+
* @tokens none
|
|
112
|
+
*
|
|
109
113
|
* @example
|
|
110
114
|
* ```html
|
|
111
115
|
* <com-collapsible-content>
|
|
@@ -147,6 +151,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
147
151
|
* Directive to mark a template as the custom icon template.
|
|
148
152
|
* Replaces only the chevron icon inside the default trigger layout.
|
|
149
153
|
*
|
|
154
|
+
* @tokens none
|
|
155
|
+
*
|
|
150
156
|
* @example
|
|
151
157
|
* ```html
|
|
152
158
|
* <button comCollapsibleTrigger>
|
|
@@ -181,6 +187,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
181
187
|
* Structural directive for lazy content rendering.
|
|
182
188
|
* Content is only instantiated on first expand, preserving state on subsequent toggles.
|
|
183
189
|
*
|
|
190
|
+
* @tokens none
|
|
191
|
+
*
|
|
184
192
|
* @example
|
|
185
193
|
* ```html
|
|
186
194
|
* <com-collapsible-content>
|
|
@@ -409,7 +417,7 @@ class ComCollapsibleTrigger {
|
|
|
409
417
|
/>
|
|
410
418
|
} @else {
|
|
411
419
|
<svg
|
|
412
|
-
class="com-collapsible-icon h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-
|
|
420
|
+
class="com-collapsible-icon h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-slow"
|
|
413
421
|
[attr.data-state]="collapsible.isOpen() ? 'open' : 'closed'"
|
|
414
422
|
viewBox="0 0 24 24"
|
|
415
423
|
fill="none"
|
|
@@ -445,7 +453,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
445
453
|
/>
|
|
446
454
|
} @else {
|
|
447
455
|
<svg
|
|
448
|
-
class="com-collapsible-icon h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-
|
|
456
|
+
class="com-collapsible-icon h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-slow"
|
|
449
457
|
[attr.data-state]="collapsible.isOpen() ? 'open' : 'closed'"
|
|
450
458
|
viewBox="0 0 24 24"
|
|
451
459
|
fill="none"
|
|
@@ -525,7 +533,8 @@ class ComCollapsibleContent {
|
|
|
525
533
|
/** Lazy content template. */
|
|
526
534
|
lazyTpl = contentChild(ComCollapsibleLazy, ...(ngDevMode ? [{ debugName: "lazyTpl" }] : []));
|
|
527
535
|
/** Track if collapsible has ever been opened (for lazy rendering). */
|
|
528
|
-
hasBeenOpened =
|
|
536
|
+
hasBeenOpened = linkedSignal({ ...(ngDevMode ? { debugName: "hasBeenOpened" } : {}), source: () => this.collapsible.isOpen(),
|
|
537
|
+
computation: (isOpen, previous) => isOpen || (previous?.value ?? false) });
|
|
529
538
|
// ============ INPUTS ============
|
|
530
539
|
/** Transition duration in milliseconds. */
|
|
531
540
|
duration = input(200, ...(ngDevMode ? [{ debugName: "duration" }] : []));
|
|
@@ -539,14 +548,7 @@ class ComCollapsibleContent {
|
|
|
539
548
|
$implicit: this.collapsible.isOpen(),
|
|
540
549
|
open: this.collapsible.isOpen(),
|
|
541
550
|
}), ...(ngDevMode ? [{ debugName: "templateContext" }] : []));
|
|
542
|
-
constructor() {
|
|
543
|
-
// Track first open for lazy rendering
|
|
544
|
-
effect(() => {
|
|
545
|
-
if (this.collapsible.isOpen() && !this.hasBeenOpened()) {
|
|
546
|
-
this.hasBeenOpened.set(true);
|
|
547
|
-
}
|
|
548
|
-
});
|
|
549
|
-
}
|
|
551
|
+
constructor() { }
|
|
550
552
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ComCollapsibleContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
551
553
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ComCollapsibleContent, isStandalone: true, selector: "com-collapsible-content", inputs: { duration: { classPropertyName: "duration", publicName: "duration", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--duration.ms": "duration()", "attr.id": "collapsible.contentId", "attr.role": "\"region\"", "attr.aria-labelledby": "collapsible.triggerId", "attr.data-state": "collapsible.isOpen() ? \"open\" : \"closed\"", "attr.inert": "!collapsible.isOpen() || null" }, classAttribute: "com-collapsible-content" }, queries: [{ propertyName: "contentTpl", first: true, predicate: ComCollapsibleContentTpl, descendants: true, isSignal: true }, { propertyName: "lazyTpl", first: true, predicate: ComCollapsibleLazy, descendants: true, isSignal: true }], ngImport: i0, template: `
|
|
552
554
|
@if (contentTpl()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-com-components-collapsible.mjs","sources":["../../../projects/com/components/collapsible/collapsible.variants.ts","../../../projects/com/components/collapsible/collapsible-trigger.variants.ts","../../../projects/com/components/collapsible/directives/collapsible-trigger-tpl.directive.ts","../../../projects/com/components/collapsible/directives/collapsible-content-tpl.directive.ts","../../../projects/com/components/collapsible/directives/collapsible-icon-tpl.directive.ts","../../../projects/com/components/collapsible/directives/collapsible-lazy.directive.ts","../../../projects/com/components/collapsible/collapsible.utils.ts","../../../projects/com/components/collapsible/collapsible.directive.ts","../../../projects/com/components/collapsible/collapsible-trigger.component.ts","../../../projects/com/components/collapsible/collapsible-content.component.ts","../../../projects/com/components/collapsible/index.ts","../../../projects/com/components/collapsible/ngx-com-components-collapsible.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Shell variant type for the collapsible container.\n */\nexport type CollapsibleVariant = 'card' | 'bordered' | 'flush' | 'ghost' | 'unstyled';\n\n/**\n * CVA variants for the collapsible shell (root directive).\n *\n * @tokens `--color-border`, `--color-background`, `--color-foreground`, `--shadow-xs`, `--radius-collapsible`\n */\nexport const collapsibleVariants: (props?: {\n variant?: CollapsibleVariant;\n}) => string = cva(\n // Base — structural only\n 'com-collapsible block',\n {\n variants: {\n variant: {\n card: 'rounded-collapsible border border-border bg-background text-foreground shadow-xs',\n bordered: 'rounded-collapsible border border-border',\n flush: 'border-b border-border',\n ghost: '',\n unstyled: '',\n },\n },\n defaultVariants: {\n variant: 'ghost',\n },\n }\n);\n\nexport type CollapsibleVariants = VariantProps<typeof collapsibleVariants>;\n","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Trigger variant type for the collapsible trigger.\n */\nexport type CollapsibleTriggerVariant = 'ghost' | 'filled' | 'header' | 'unstyled';\n\n/**\n * Trigger size type.\n */\nexport type CollapsibleTriggerSize = 'sm' | 'default' | 'lg';\n\n/**\n * CVA variants for the collapsible trigger directive.\n *\n * @tokens `--color-foreground`, `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`,\n * `--color-ring`, `--color-disabled-foreground`, `--radius-collapsible`\n */\nexport const collapsibleTriggerVariants: (props?: {\n variant?: CollapsibleTriggerVariant;\n size?: CollapsibleTriggerSize;\n}) => string = cva(\n [\n 'com-collapsible-trigger',\n 'flex w-full items-center justify-between',\n 'cursor-pointer select-none',\n 'text-sm font-medium',\n 'transition-colors',\n 'focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n 'disabled:pointer-events-none disabled:text-disabled-foreground',\n '[&>svg]:transition-transform [&>svg]:duration-200',\n '[&>svg.com-collapsible-icon]:data-[state=open]:rotate-180',\n ].join(' '),\n {\n variants: {\n variant: {\n ghost: 'rounded-collapsible text-foreground hover:bg-muted hover:text-muted-foreground',\n filled: 'rounded-collapsible bg-muted text-muted-foreground hover:bg-muted-hover',\n header: 'text-foreground hover:text-muted-foreground',\n unstyled: '',\n },\n size: {\n sm: 'px-2 py-1 text-xs gap-1',\n default: 'px-3 py-2 text-sm gap-2',\n lg: 'px-4 py-3 text-base gap-3',\n },\n },\n defaultVariants: {\n variant: 'ghost',\n size: 'default',\n },\n }\n);\n\nexport type CollapsibleTriggerVariants = VariantProps<typeof collapsibleTriggerVariants>;\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComCollapsibleTriggerContext } from '../collapsible.models';\n\n/**\n * Directive to mark a template as the custom trigger layout template.\n * Replaces the inner content of the trigger while preserving ARIA and keyboard handling.\n *\n * @example\n * ```html\n * <button comCollapsibleTrigger>\n * <ng-template comCollapsibleTriggerTpl let-open let-toggle=\"toggle\" let-disabled=\"disabled\">\n * <div class=\"flex items-center gap-3 w-full\">\n * <span class=\"h-2 w-2 rounded-full\" [class]=\"open ? 'bg-success' : 'bg-muted'\"></span>\n * <span class=\"font-medium\">Notifications</span>\n * <svg class=\"com-collapsible-icon h-4 w-4\" [attr.data-state]=\"open ? 'open' : 'closed'\">\n * <!-- chevron icon -->\n * </svg>\n * </div>\n * </ng-template>\n * </button>\n * ```\n */\n@Directive({\n selector: 'ng-template[comCollapsibleTriggerTpl]',\n})\nexport class ComCollapsibleTriggerTpl {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<ComCollapsibleTriggerContext> =\n inject<TemplateRef<ComCollapsibleTriggerContext>>(TemplateRef);\n\n /**\n * Static type guard for template type checking.\n * Enables type-safe access to context properties in templates.\n */\n static ngTemplateContextGuard(\n _dir: ComCollapsibleTriggerTpl,\n ctx: unknown\n ): ctx is ComCollapsibleTriggerContext {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComCollapsibleContentContext } from '../collapsible.models';\n\n/**\n * Directive to mark a template as the custom content chrome template.\n * Wraps the content with custom chrome (headers, footers, padding).\n * The grid animation still applies on the host.\n *\n * @example\n * ```html\n * <com-collapsible-content>\n * <ng-template comCollapsibleContentTpl let-open=\"open\">\n * <div class=\"border-t border-border\">\n * <div class=\"p-4 space-y-3\">\n * <!-- Content here -->\n * </div>\n * <div class=\"flex justify-end gap-2 px-4 py-3 border-t border-border-subtle bg-muted\">\n * <button>Reset</button>\n * <button>Apply</button>\n * </div>\n * </div>\n * </ng-template>\n * </com-collapsible-content>\n * ```\n */\n@Directive({\n selector: 'ng-template[comCollapsibleContentTpl]',\n})\nexport class ComCollapsibleContentTpl {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<ComCollapsibleContentContext> =\n inject<TemplateRef<ComCollapsibleContentContext>>(TemplateRef);\n\n /**\n * Static type guard for template type checking.\n * Enables type-safe access to context properties in templates.\n */\n static ngTemplateContextGuard(\n _dir: ComCollapsibleContentTpl,\n ctx: unknown\n ): ctx is ComCollapsibleContentContext {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComCollapsibleIconContext } from '../collapsible.models';\n\n/**\n * Directive to mark a template as the custom icon template.\n * Replaces only the chevron icon inside the default trigger layout.\n *\n * @example\n * ```html\n * <button comCollapsibleTrigger>\n * Settings\n * <ng-template comCollapsibleIcon let-open=\"open\">\n * <span class=\"text-muted-foreground text-xs\">{{ open ? '▲' : '▼' }}</span>\n * </ng-template>\n * </button>\n * ```\n */\n@Directive({\n selector: 'ng-template[comCollapsibleIcon]',\n})\nexport class ComCollapsibleIconTpl {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<ComCollapsibleIconContext> =\n inject<TemplateRef<ComCollapsibleIconContext>>(TemplateRef);\n\n /**\n * Static type guard for template type checking.\n * Enables type-safe access to context properties in templates.\n */\n static ngTemplateContextGuard(\n _dir: ComCollapsibleIconTpl,\n ctx: unknown\n ): ctx is ComCollapsibleIconContext {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * Structural directive for lazy content rendering.\n * Content is only instantiated on first expand, preserving state on subsequent toggles.\n *\n * @example\n * ```html\n * <com-collapsible-content>\n * <ng-template comCollapsibleLazy>\n * <app-heavy-chart [data]=\"chartData()\" />\n * </ng-template>\n * </com-collapsible-content>\n * ```\n */\n@Directive({\n selector: 'ng-template[comCollapsibleLazy]',\n})\nexport class ComCollapsibleLazy {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<void> = inject<TemplateRef<void>>(TemplateRef);\n}\n","export { mergeClasses } from 'ngx-com/utils';\n\nlet collapsibleIdCounter = 0;\n\n/**\n * Generates a unique ID for collapsible components.\n * @returns A unique string ID\n */\nexport function generateCollapsibleId(): string {\n return `com-collapsible-${++collapsibleIdCounter}`;\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n input,\n model,\n} from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, ModelSignal, Signal } from '@angular/core';\nimport { mergeClasses, generateCollapsibleId } from './collapsible.utils';\nimport { collapsibleVariants } from './collapsible.variants';\nimport type { CollapsibleVariant } from './collapsible.variants';\n\n/**\n * Root collapsible directive — manages state and provides shell styling.\n *\n * Works as a DI anchor for child directives (trigger, content).\n * Exposes programmatic control via template reference.\n *\n * @tokens `--color-border`, `--color-background`, `--color-foreground`, `--shadow-xs`\n *\n * @example Basic usage\n * ```html\n * <div comCollapsible variant=\"card\">\n * <button comCollapsibleTrigger>Section Title</button>\n * <com-collapsible-content>\n * <div class=\"p-4\">Content here.</div>\n * </com-collapsible-content>\n * </div>\n * ```\n *\n * @example Two-way binding with external control\n * ```html\n * <div comCollapsible [(open)]=\"sectionOpen\" #section=\"comCollapsible\">\n * <button comCollapsibleTrigger>Advanced</button>\n * <com-collapsible-content>...</com-collapsible-content>\n * </div>\n * <button (click)=\"section.toggle()\">Toggle externally</button>\n * ```\n */\n@Directive({\n selector: '[comCollapsible]',\n exportAs: 'comCollapsible',\n host: {\n '[class]': 'computedClass()',\n '[attr.data-state]': 'isOpen() ? \"open\" : \"closed\"',\n },\n})\nexport class ComCollapsible {\n /** Unique ID for the collapsible instance. */\n private readonly id: string = generateCollapsibleId();\n\n /** ID for the trigger element (used for aria-labelledby). */\n readonly triggerId: string = `${this.id}-trigger`;\n\n /** ID for the content panel (used for aria-controls). */\n readonly contentId: string = `${this.id}-content`;\n\n // ============ INPUTS ============\n\n /** Two-way bound open state. */\n readonly open: ModelSignal<boolean> = model<boolean>(false);\n\n /** Disables the collapsible, preventing state changes. */\n readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Shell preset variant. */\n readonly variant: InputSignal<CollapsibleVariant> = input<CollapsibleVariant>('ghost');\n\n /** Consumer CSS classes — merged with variant classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n // ============ COMPUTED STATE ============\n\n /** @internal Computed host class from CVA + consumer overrides. */\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n collapsibleVariants({ variant: this.variant() }),\n this.userClass()\n )\n );\n\n // ============ PUBLIC API ============\n\n /** Returns the current open state. */\n isOpen(): boolean {\n return this.open();\n }\n\n /** Returns the current disabled state. */\n isDisabled(): boolean {\n return this.disabled();\n }\n\n /** Toggles the open state (if not disabled). */\n toggle(): void {\n if (this.disabled()) return;\n this.open.update((v) => !v);\n }\n\n /** Expands the collapsible (if not disabled). */\n expand(): void {\n if (this.disabled()) return;\n this.open.set(true);\n }\n\n /** Collapses the collapsible (if not disabled). */\n collapse(): void {\n if (this.disabled()) return;\n this.open.set(false);\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n inject,\n input,\n} from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ComCollapsible } from './collapsible.directive';\nimport { ComCollapsibleTriggerTpl } from './directives/collapsible-trigger-tpl.directive';\nimport { ComCollapsibleIconTpl } from './directives/collapsible-icon-tpl.directive';\nimport { mergeClasses } from './collapsible.utils';\nimport { collapsibleTriggerVariants } from './collapsible-trigger.variants';\nimport type { CollapsibleTriggerVariant, CollapsibleTriggerSize } from './collapsible-trigger.variants';\nimport type { ComCollapsibleTriggerContext, ComCollapsibleIconContext } from './collapsible.models';\n\n/**\n * Collapsible trigger component — handles toggle interaction, ARIA, keyboard, and template rendering.\n *\n * Uses attribute selector so it can be applied to `<button>` or any focusable element.\n * Injects the parent `ComCollapsible` directive to access state.\n * Supports custom trigger layout via `comCollapsibleTriggerTpl` and custom icon via `comCollapsibleIcon`.\n *\n * @tokens `--color-foreground`, `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`,\n * `--color-ring`, `--color-disabled-foreground`\n *\n * @example Default trigger with auto icon\n * ```html\n * <button comCollapsibleTrigger>Section Title</button>\n * ```\n *\n * @example Without icon\n * ```html\n * <button comCollapsibleTrigger [showIcon]=\"false\">Section Title</button>\n * ```\n *\n * @example With custom icon\n * ```html\n * <button comCollapsibleTrigger>\n * Settings\n * <ng-template comCollapsibleIcon let-open=\"open\">\n * <span class=\"text-xs text-muted-foreground\">{{ open ? '▲' : '▼' }}</span>\n * </ng-template>\n * </button>\n * ```\n *\n * @example Full trigger layout override\n * ```html\n * <button comCollapsibleTrigger>\n * <ng-template comCollapsibleTriggerTpl let-open let-toggle=\"toggle\">\n * <div class=\"flex items-center gap-3 w-full\">\n * <span class=\"h-2 w-2 rounded-full\" [class]=\"open ? 'bg-success' : 'bg-muted'\"></span>\n * <span class=\"font-medium\">Notifications</span>\n * <svg class=\"com-collapsible-icon h-4 w-4\" [attr.data-state]=\"open ? 'open' : 'closed'\">\n * <!-- chevron -->\n * </svg>\n * </div>\n * </ng-template>\n * </button>\n * ```\n */\n@Component({\n selector: '[comCollapsibleTrigger]',\n template: `\n @if (triggerTpl()) {\n <ng-container\n [ngTemplateOutlet]=\"triggerTpl()!.templateRef\"\n [ngTemplateOutletContext]=\"triggerContext()\"\n />\n } @else {\n <span class=\"flex-1 truncate text-left\">\n <ng-content />\n </span>\n @if (showIcon()) {\n @if (iconTpl()) {\n <ng-container\n [ngTemplateOutlet]=\"iconTpl()!.templateRef\"\n [ngTemplateOutletContext]=\"iconContext()\"\n />\n } @else {\n <svg\n class=\"com-collapsible-icon h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200\"\n [attr.data-state]=\"collapsible.isOpen() ? 'open' : 'closed'\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n }\n }\n }\n `,\n styles: `\n :host {\n display: flex;\n }\n `,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'computedClass()',\n '[attr.id]': 'collapsible.triggerId',\n '[attr.type]': '\"button\"',\n '[attr.aria-expanded]': 'collapsible.isOpen()',\n '[attr.aria-controls]': 'collapsible.contentId',\n '[attr.aria-disabled]': 'collapsible.isDisabled() || null',\n '[attr.data-state]': 'collapsible.isOpen() ? \"open\" : \"closed\"',\n '[attr.disabled]': 'collapsible.isDisabled() || null',\n '[tabindex]': 'collapsible.isDisabled() ? -1 : 0',\n '(click)': 'onClick($event)',\n '(keydown.enter)': 'onKeydown($event)',\n '(keydown.space)': 'onKeydown($event)',\n },\n})\nexport class ComCollapsibleTrigger {\n /** Parent collapsible directive (provides state). */\n protected readonly collapsible: ComCollapsible = inject(ComCollapsible);\n\n /** Custom trigger layout template (replaces inner content). */\n protected readonly triggerTpl: Signal<ComCollapsibleTriggerTpl | undefined> =\n contentChild(ComCollapsibleTriggerTpl);\n\n /** Custom icon template (replaces default chevron). */\n protected readonly iconTpl: Signal<ComCollapsibleIconTpl | undefined> =\n contentChild(ComCollapsibleIconTpl);\n\n // ============ INPUTS ============\n\n /** Trigger preset variant. */\n readonly variant: InputSignal<CollapsibleTriggerVariant> =\n input<CollapsibleTriggerVariant>('ghost');\n\n /** Trigger size. */\n readonly size: InputSignal<CollapsibleTriggerSize> =\n input<CollapsibleTriggerSize>('default');\n\n /** Show/hide the toggle icon. */\n readonly showIcon: InputSignalWithTransform<boolean, unknown> = input(true, {\n transform: booleanAttribute,\n });\n\n /** Consumer CSS classes — merged with variant classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n // ============ COMPUTED STATE ============\n\n /** @internal Computed host class from CVA + consumer overrides. */\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n collapsibleTriggerVariants({\n variant: this.variant(),\n size: this.size(),\n }),\n this.userClass()\n )\n );\n\n /** Context for trigger template. */\n readonly triggerContext: Signal<ComCollapsibleTriggerContext> = computed(() => ({\n $implicit: this.collapsible.isOpen(),\n open: this.collapsible.isOpen(),\n disabled: this.collapsible.isDisabled(),\n toggle: () => this.collapsible.toggle(),\n }));\n\n /** Context for icon template. */\n readonly iconContext: Signal<ComCollapsibleIconContext> = computed(() => ({\n $implicit: this.collapsible.isOpen(),\n open: this.collapsible.isOpen(),\n }));\n\n // ============ EVENT HANDLERS ============\n\n /** @internal */\n protected onClick(event: Event): void {\n event.preventDefault();\n this.collapsible.toggle();\n }\n\n /** @internal */\n protected onKeydown(event: Event): void {\n event.preventDefault();\n this.collapsible.toggle();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n inject,\n input,\n signal,\n effect,\n} from '@angular/core';\nimport type { InputSignal, Signal, WritableSignal } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ComCollapsible } from './collapsible.directive';\nimport { ComCollapsibleContentTpl } from './directives/collapsible-content-tpl.directive';\nimport { ComCollapsibleLazy } from './directives/collapsible-lazy.directive';\nimport { mergeClasses } from './collapsible.utils';\nimport type { ComCollapsibleContentContext } from './collapsible.models';\n\n/**\n * Collapsible content component — animated panel with region role.\n *\n * Uses CSS grid technique for smooth height animation without JS measurement.\n * Supports lazy rendering via `comCollapsibleLazy` directive.\n *\n * @tokens None (structural only — styling is applied via templates or consumer classes)\n *\n * @example Basic usage\n * ```html\n * <com-collapsible-content>\n * <div class=\"p-4\">Content here.</div>\n * </com-collapsible-content>\n * ```\n *\n * @example With custom duration\n * ```html\n * <com-collapsible-content [duration]=\"300\">\n * <div class=\"p-4\">Slower animation.</div>\n * </com-collapsible-content>\n * ```\n *\n * @example With content chrome template\n * ```html\n * <com-collapsible-content>\n * <ng-template comCollapsibleContentTpl let-open=\"open\">\n * <div class=\"border-t border-border p-4\">\n * <!-- Content with custom chrome -->\n * </div>\n * </ng-template>\n * </com-collapsible-content>\n * ```\n *\n * @example Lazy content\n * ```html\n * <com-collapsible-content>\n * <ng-template comCollapsibleLazy>\n * <app-heavy-component />\n * </ng-template>\n * </com-collapsible-content>\n * ```\n */\n@Component({\n selector: 'com-collapsible-content',\n template: `\n @if (contentTpl()) {\n <div class=\"com-collapsible-content-inner\" [class]=\"innerClass()\">\n <ng-container\n [ngTemplateOutlet]=\"contentTpl()!.templateRef\"\n [ngTemplateOutletContext]=\"templateContext()\"\n />\n </div>\n } @else if (lazyTpl()) {\n @if (hasBeenOpened()) {\n <div class=\"com-collapsible-content-inner\" [class]=\"innerClass()\">\n <ng-container [ngTemplateOutlet]=\"lazyTpl()!.templateRef\" />\n </div>\n }\n } @else {\n <div class=\"com-collapsible-content-inner\" [class]=\"innerClass()\">\n <ng-content />\n </div>\n }\n `,\n styles: `\n :host {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows var(--duration, 200ms) ease;\n }\n :host([data-state='open']) {\n grid-template-rows: 1fr;\n }\n .com-collapsible-content-inner {\n overflow: hidden;\n }\n `,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-collapsible-content',\n '[style.--duration.ms]': 'duration()',\n '[attr.id]': 'collapsible.contentId',\n '[attr.role]': '\"region\"',\n '[attr.aria-labelledby]': 'collapsible.triggerId',\n '[attr.data-state]': 'collapsible.isOpen() ? \"open\" : \"closed\"',\n '[attr.inert]': '!collapsible.isOpen() || null',\n },\n})\nexport class ComCollapsibleContent {\n /** Parent collapsible directive (provides state). */\n protected readonly collapsible: ComCollapsible = inject(ComCollapsible);\n\n /** Custom content chrome template. */\n protected readonly contentTpl: Signal<ComCollapsibleContentTpl | undefined> =\n contentChild(ComCollapsibleContentTpl);\n\n /** Lazy content template. */\n protected readonly lazyTpl: Signal<ComCollapsibleLazy | undefined> =\n contentChild(ComCollapsibleLazy);\n\n /** Track if collapsible has ever been opened (for lazy rendering). */\n protected readonly hasBeenOpened: WritableSignal<boolean> = signal(false);\n\n // ============ INPUTS ============\n\n /** Transition duration in milliseconds. */\n readonly duration: InputSignal<number> = input<number>(200);\n\n /** Consumer CSS classes for the inner wrapper. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n // ============ COMPUTED STATE ============\n\n /** @internal Computed inner wrapper class. */\n protected readonly innerClass: Signal<string> = computed(() =>\n mergeClasses('com-collapsible-content-inner', this.userClass())\n );\n\n /** Context for content template. */\n readonly templateContext: Signal<ComCollapsibleContentContext> = computed(() => ({\n $implicit: this.collapsible.isOpen(),\n open: this.collapsible.isOpen(),\n }));\n\n constructor() {\n // Track first open for lazy rendering\n effect(() => {\n if (this.collapsible.isOpen() && !this.hasBeenOpened()) {\n this.hasBeenOpened.set(true);\n }\n });\n }\n}\n","// Public API for the collapsible component\n\n// Types\nexport type {\n ComCollapsibleTriggerContext,\n ComCollapsibleContentContext,\n ComCollapsibleIconContext,\n} from './collapsible.models';\n\n// Variants\nexport { collapsibleVariants } from './collapsible.variants';\nexport type { CollapsibleVariant, CollapsibleVariants } from './collapsible.variants';\n\nexport { collapsibleTriggerVariants } from './collapsible-trigger.variants';\nexport type {\n CollapsibleTriggerVariant,\n CollapsibleTriggerSize,\n CollapsibleTriggerVariants,\n} from './collapsible-trigger.variants';\n\n// Template directives\nexport { ComCollapsibleTriggerTpl } from './directives/collapsible-trigger-tpl.directive';\nexport { ComCollapsibleContentTpl } from './directives/collapsible-content-tpl.directive';\nexport { ComCollapsibleIconTpl } from './directives/collapsible-icon-tpl.directive';\nexport { ComCollapsibleLazy } from './directives/collapsible-lazy.directive';\n\n// Main components\nexport { ComCollapsible } from './collapsible.directive';\nexport { ComCollapsibleTrigger } from './collapsible-trigger.component';\nexport { ComCollapsibleContent } from './collapsible-content.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-collapsible.mjs","sources":["../../../projects/com/components/collapsible/collapsible.variants.ts","../../../projects/com/components/collapsible/collapsible-trigger.variants.ts","../../../projects/com/components/collapsible/directives/collapsible-trigger-tpl.directive.ts","../../../projects/com/components/collapsible/directives/collapsible-content-tpl.directive.ts","../../../projects/com/components/collapsible/directives/collapsible-icon-tpl.directive.ts","../../../projects/com/components/collapsible/directives/collapsible-lazy.directive.ts","../../../projects/com/components/collapsible/collapsible.utils.ts","../../../projects/com/components/collapsible/collapsible.directive.ts","../../../projects/com/components/collapsible/collapsible-trigger.component.ts","../../../projects/com/components/collapsible/collapsible-content.component.ts","../../../projects/com/components/collapsible/index.ts","../../../projects/com/components/collapsible/ngx-com-components-collapsible.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Shell variant type for the collapsible container.\n */\nexport type CollapsibleVariant = 'card' | 'bordered' | 'flush' | 'ghost' | 'unstyled';\n\n/**\n * CVA variants for the collapsible shell (root directive).\n *\n * @tokens `--color-border`, `--color-background`, `--color-foreground`, `--shadow-xs`, `--radius-collapsible`\n */\nexport const collapsibleVariants: (props?: {\n variant?: CollapsibleVariant;\n}) => string = cva(\n // Base — structural only\n 'com-collapsible block',\n {\n variants: {\n variant: {\n card: 'rounded-collapsible border border-border bg-background text-foreground shadow-xs',\n bordered: 'rounded-collapsible border border-border',\n flush: 'border-b border-border',\n ghost: '',\n unstyled: '',\n },\n },\n defaultVariants: {\n variant: 'ghost',\n },\n }\n);\n\nexport type CollapsibleVariants = VariantProps<typeof collapsibleVariants>;\n","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Trigger variant type for the collapsible trigger.\n */\nexport type CollapsibleTriggerVariant = 'ghost' | 'filled' | 'header' | 'unstyled';\n\n/**\n * Trigger size type.\n */\nexport type CollapsibleTriggerSize = 'sm' | 'default' | 'lg';\n\n/**\n * CVA variants for the collapsible trigger directive.\n *\n * @tokens `--color-foreground`, `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`,\n * `--color-ring`, `--color-disabled-foreground`, `--radius-collapsible`\n */\nexport const collapsibleTriggerVariants: (props?: {\n variant?: CollapsibleTriggerVariant;\n size?: CollapsibleTriggerSize;\n}) => string = cva(\n [\n 'com-collapsible-trigger',\n 'flex w-full items-center justify-between',\n 'cursor-pointer select-none',\n 'text-sm font-medium',\n 'transition-colors',\n 'focus-visible:outline-[1px] focus-visible:outline-offset-2 focus-visible:outline-ring',\n 'disabled:pointer-events-none disabled:text-disabled-foreground',\n '[&>svg]:transition-transform [&>svg]:duration-slow',\n '[&>svg.com-collapsible-icon]:data-[state=open]:rotate-180',\n ].join(' '),\n {\n variants: {\n variant: {\n ghost: 'rounded-collapsible text-foreground hover:bg-muted hover:text-muted-foreground',\n filled: 'rounded-collapsible bg-muted text-muted-foreground hover:bg-muted-hover',\n header: 'text-foreground hover:text-muted-foreground',\n unstyled: '',\n },\n size: {\n sm: 'px-2 py-1 text-xs gap-1',\n default: 'px-3 py-2 text-sm gap-2',\n lg: 'px-4 py-3 text-base gap-3',\n },\n },\n defaultVariants: {\n variant: 'ghost',\n size: 'default',\n },\n }\n);\n\nexport type CollapsibleTriggerVariants = VariantProps<typeof collapsibleTriggerVariants>;\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComCollapsibleTriggerContext } from '../collapsible.models';\n\n/**\n * Directive to mark a template as the custom trigger layout template.\n * Replaces the inner content of the trigger while preserving ARIA and keyboard handling.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <button comCollapsibleTrigger>\n * <ng-template comCollapsibleTriggerTpl let-open let-toggle=\"toggle\" let-disabled=\"disabled\">\n * <div class=\"flex items-center gap-3 w-full\">\n * <span class=\"h-2 w-2 rounded-full\" [class]=\"open ? 'bg-success' : 'bg-muted'\"></span>\n * <span class=\"font-medium\">Notifications</span>\n * <svg class=\"com-collapsible-icon h-4 w-4\" [attr.data-state]=\"open ? 'open' : 'closed'\">\n * <!-- chevron icon -->\n * </svg>\n * </div>\n * </ng-template>\n * </button>\n * ```\n */\n@Directive({\n selector: 'ng-template[comCollapsibleTriggerTpl]',\n})\nexport class ComCollapsibleTriggerTpl {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<ComCollapsibleTriggerContext> =\n inject<TemplateRef<ComCollapsibleTriggerContext>>(TemplateRef);\n\n /**\n * Static type guard for template type checking.\n * Enables type-safe access to context properties in templates.\n */\n static ngTemplateContextGuard(\n _dir: ComCollapsibleTriggerTpl,\n ctx: unknown\n ): ctx is ComCollapsibleTriggerContext {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComCollapsibleContentContext } from '../collapsible.models';\n\n/**\n * Directive to mark a template as the custom content chrome template.\n * Wraps the content with custom chrome (headers, footers, padding).\n * The grid animation still applies on the host.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-collapsible-content>\n * <ng-template comCollapsibleContentTpl let-open=\"open\">\n * <div class=\"border-t border-border\">\n * <div class=\"p-4 space-y-3\">\n * <!-- Content here -->\n * </div>\n * <div class=\"flex justify-end gap-2 px-4 py-3 border-t border-border-subtle bg-muted\">\n * <button>Reset</button>\n * <button>Apply</button>\n * </div>\n * </div>\n * </ng-template>\n * </com-collapsible-content>\n * ```\n */\n@Directive({\n selector: 'ng-template[comCollapsibleContentTpl]',\n})\nexport class ComCollapsibleContentTpl {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<ComCollapsibleContentContext> =\n inject<TemplateRef<ComCollapsibleContentContext>>(TemplateRef);\n\n /**\n * Static type guard for template type checking.\n * Enables type-safe access to context properties in templates.\n */\n static ngTemplateContextGuard(\n _dir: ComCollapsibleContentTpl,\n ctx: unknown\n ): ctx is ComCollapsibleContentContext {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport type { ComCollapsibleIconContext } from '../collapsible.models';\n\n/**\n * Directive to mark a template as the custom icon template.\n * Replaces only the chevron icon inside the default trigger layout.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <button comCollapsibleTrigger>\n * Settings\n * <ng-template comCollapsibleIcon let-open=\"open\">\n * <span class=\"text-muted-foreground text-xs\">{{ open ? '▲' : '▼' }}</span>\n * </ng-template>\n * </button>\n * ```\n */\n@Directive({\n selector: 'ng-template[comCollapsibleIcon]',\n})\nexport class ComCollapsibleIconTpl {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<ComCollapsibleIconContext> =\n inject<TemplateRef<ComCollapsibleIconContext>>(TemplateRef);\n\n /**\n * Static type guard for template type checking.\n * Enables type-safe access to context properties in templates.\n */\n static ngTemplateContextGuard(\n _dir: ComCollapsibleIconTpl,\n ctx: unknown\n ): ctx is ComCollapsibleIconContext {\n return true;\n }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * Structural directive for lazy content rendering.\n * Content is only instantiated on first expand, preserving state on subsequent toggles.\n *\n * @tokens none\n *\n * @example\n * ```html\n * <com-collapsible-content>\n * <ng-template comCollapsibleLazy>\n * <app-heavy-chart [data]=\"chartData()\" />\n * </ng-template>\n * </com-collapsible-content>\n * ```\n */\n@Directive({\n selector: 'ng-template[comCollapsibleLazy]',\n})\nexport class ComCollapsibleLazy {\n /** Reference to the template. */\n readonly templateRef: TemplateRef<void> = inject<TemplateRef<void>>(TemplateRef);\n}\n","export { mergeClasses } from 'ngx-com/utils';\n\nlet collapsibleIdCounter = 0;\n\n/**\n * Generates a unique ID for collapsible components.\n * @returns A unique string ID\n */\nexport function generateCollapsibleId(): string {\n return `com-collapsible-${++collapsibleIdCounter}`;\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n input,\n model,\n} from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, ModelSignal, Signal } from '@angular/core';\nimport { mergeClasses, generateCollapsibleId } from './collapsible.utils';\nimport { collapsibleVariants } from './collapsible.variants';\nimport type { CollapsibleVariant } from './collapsible.variants';\n\n/**\n * Root collapsible directive — manages state and provides shell styling.\n *\n * Works as a DI anchor for child directives (trigger, content).\n * Exposes programmatic control via template reference.\n *\n * @tokens `--color-border`, `--color-background`, `--color-foreground`, `--shadow-xs`\n *\n * @example Basic usage\n * ```html\n * <div comCollapsible variant=\"card\">\n * <button comCollapsibleTrigger>Section Title</button>\n * <com-collapsible-content>\n * <div class=\"p-4\">Content here.</div>\n * </com-collapsible-content>\n * </div>\n * ```\n *\n * @example Two-way binding with external control\n * ```html\n * <div comCollapsible [(open)]=\"sectionOpen\" #section=\"comCollapsible\">\n * <button comCollapsibleTrigger>Advanced</button>\n * <com-collapsible-content>...</com-collapsible-content>\n * </div>\n * <button (click)=\"section.toggle()\">Toggle externally</button>\n * ```\n */\n@Directive({\n selector: '[comCollapsible]',\n exportAs: 'comCollapsible',\n host: {\n '[class]': 'computedClass()',\n '[attr.data-state]': 'isOpen() ? \"open\" : \"closed\"',\n },\n})\nexport class ComCollapsible {\n /** Unique ID for the collapsible instance. */\n private readonly id: string = generateCollapsibleId();\n\n /** ID for the trigger element (used for aria-labelledby). */\n readonly triggerId: string = `${this.id}-trigger`;\n\n /** ID for the content panel (used for aria-controls). */\n readonly contentId: string = `${this.id}-content`;\n\n // ============ INPUTS ============\n\n /** Two-way bound open state. */\n readonly open: ModelSignal<boolean> = model<boolean>(false);\n\n /** Disables the collapsible, preventing state changes. */\n readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n });\n\n /** Shell preset variant. */\n readonly variant: InputSignal<CollapsibleVariant> = input<CollapsibleVariant>('ghost');\n\n /** Consumer CSS classes — merged with variant classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n // ============ COMPUTED STATE ============\n\n /** @internal Computed host class from CVA + consumer overrides. */\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n collapsibleVariants({ variant: this.variant() }),\n this.userClass()\n )\n );\n\n // ============ PUBLIC API ============\n\n /** Returns the current open state. */\n isOpen(): boolean {\n return this.open();\n }\n\n /** Returns the current disabled state. */\n isDisabled(): boolean {\n return this.disabled();\n }\n\n /** Toggles the open state (if not disabled). */\n toggle(): void {\n if (this.disabled()) return;\n this.open.update((v) => !v);\n }\n\n /** Expands the collapsible (if not disabled). */\n expand(): void {\n if (this.disabled()) return;\n this.open.set(true);\n }\n\n /** Collapses the collapsible (if not disabled). */\n collapse(): void {\n if (this.disabled()) return;\n this.open.set(false);\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n inject,\n input,\n} from '@angular/core';\nimport type { InputSignal, InputSignalWithTransform, Signal } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ComCollapsible } from './collapsible.directive';\nimport { ComCollapsibleTriggerTpl } from './directives/collapsible-trigger-tpl.directive';\nimport { ComCollapsibleIconTpl } from './directives/collapsible-icon-tpl.directive';\nimport { mergeClasses } from './collapsible.utils';\nimport { collapsibleTriggerVariants } from './collapsible-trigger.variants';\nimport type { CollapsibleTriggerVariant, CollapsibleTriggerSize } from './collapsible-trigger.variants';\nimport type { ComCollapsibleTriggerContext, ComCollapsibleIconContext } from './collapsible.models';\n\n/**\n * Collapsible trigger component — handles toggle interaction, ARIA, keyboard, and template rendering.\n *\n * Uses attribute selector so it can be applied to `<button>` or any focusable element.\n * Injects the parent `ComCollapsible` directive to access state.\n * Supports custom trigger layout via `comCollapsibleTriggerTpl` and custom icon via `comCollapsibleIcon`.\n *\n * @tokens `--color-foreground`, `--color-muted`, `--color-muted-foreground`, `--color-muted-hover`,\n * `--color-ring`, `--color-disabled-foreground`\n *\n * @example Default trigger with auto icon\n * ```html\n * <button comCollapsibleTrigger>Section Title</button>\n * ```\n *\n * @example Without icon\n * ```html\n * <button comCollapsibleTrigger [showIcon]=\"false\">Section Title</button>\n * ```\n *\n * @example With custom icon\n * ```html\n * <button comCollapsibleTrigger>\n * Settings\n * <ng-template comCollapsibleIcon let-open=\"open\">\n * <span class=\"text-xs text-muted-foreground\">{{ open ? '▲' : '▼' }}</span>\n * </ng-template>\n * </button>\n * ```\n *\n * @example Full trigger layout override\n * ```html\n * <button comCollapsibleTrigger>\n * <ng-template comCollapsibleTriggerTpl let-open let-toggle=\"toggle\">\n * <div class=\"flex items-center gap-3 w-full\">\n * <span class=\"h-2 w-2 rounded-full\" [class]=\"open ? 'bg-success' : 'bg-muted'\"></span>\n * <span class=\"font-medium\">Notifications</span>\n * <svg class=\"com-collapsible-icon h-4 w-4\" [attr.data-state]=\"open ? 'open' : 'closed'\">\n * <!-- chevron -->\n * </svg>\n * </div>\n * </ng-template>\n * </button>\n * ```\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector -- intentional attribute selector for host element flexibility\n selector: '[comCollapsibleTrigger]',\n template: `\n @if (triggerTpl()) {\n <ng-container\n [ngTemplateOutlet]=\"triggerTpl()!.templateRef\"\n [ngTemplateOutletContext]=\"triggerContext()\"\n />\n } @else {\n <span class=\"flex-1 truncate text-left\">\n <ng-content />\n </span>\n @if (showIcon()) {\n @if (iconTpl()) {\n <ng-container\n [ngTemplateOutlet]=\"iconTpl()!.templateRef\"\n [ngTemplateOutletContext]=\"iconContext()\"\n />\n } @else {\n <svg\n class=\"com-collapsible-icon h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-slow\"\n [attr.data-state]=\"collapsible.isOpen() ? 'open' : 'closed'\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n }\n }\n }\n `,\n styles: `\n :host {\n display: flex;\n }\n `,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'computedClass()',\n '[attr.id]': 'collapsible.triggerId',\n '[attr.type]': '\"button\"',\n '[attr.aria-expanded]': 'collapsible.isOpen()',\n '[attr.aria-controls]': 'collapsible.contentId',\n '[attr.aria-disabled]': 'collapsible.isDisabled() || null',\n '[attr.data-state]': 'collapsible.isOpen() ? \"open\" : \"closed\"',\n '[attr.disabled]': 'collapsible.isDisabled() || null',\n '[tabindex]': 'collapsible.isDisabled() ? -1 : 0',\n '(click)': 'onClick($event)',\n '(keydown.enter)': 'onKeydown($event)',\n '(keydown.space)': 'onKeydown($event)',\n },\n})\nexport class ComCollapsibleTrigger {\n /** Parent collapsible directive (provides state). */\n protected readonly collapsible: ComCollapsible = inject(ComCollapsible);\n\n /** Custom trigger layout template (replaces inner content). */\n protected readonly triggerTpl: Signal<ComCollapsibleTriggerTpl | undefined> =\n contentChild<ComCollapsibleTriggerTpl>(ComCollapsibleTriggerTpl);\n\n /** Custom icon template (replaces default chevron). */\n protected readonly iconTpl: Signal<ComCollapsibleIconTpl | undefined> =\n contentChild<ComCollapsibleIconTpl>(ComCollapsibleIconTpl);\n\n // ============ INPUTS ============\n\n /** Trigger preset variant. */\n readonly variant: InputSignal<CollapsibleTriggerVariant> =\n input<CollapsibleTriggerVariant>('ghost');\n\n /** Trigger size. */\n readonly size: InputSignal<CollapsibleTriggerSize> =\n input<CollapsibleTriggerSize>('default');\n\n /** Show/hide the toggle icon. */\n readonly showIcon: InputSignalWithTransform<boolean, unknown> = input(true, {\n transform: booleanAttribute,\n });\n\n /** Consumer CSS classes — merged with variant classes. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n // ============ COMPUTED STATE ============\n\n /** @internal Computed host class from CVA + consumer overrides. */\n protected readonly computedClass: Signal<string> = computed(() =>\n mergeClasses(\n collapsibleTriggerVariants({\n variant: this.variant(),\n size: this.size(),\n }),\n this.userClass()\n )\n );\n\n /** Context for trigger template. */\n readonly triggerContext: Signal<ComCollapsibleTriggerContext> = computed(() => ({\n $implicit: this.collapsible.isOpen(),\n open: this.collapsible.isOpen(),\n disabled: this.collapsible.isDisabled(),\n toggle: () => this.collapsible.toggle(),\n }));\n\n /** Context for icon template. */\n readonly iconContext: Signal<ComCollapsibleIconContext> = computed(() => ({\n $implicit: this.collapsible.isOpen(),\n open: this.collapsible.isOpen(),\n }));\n\n // ============ EVENT HANDLERS ============\n\n /** @internal */\n protected onClick(event: Event): void {\n event.preventDefault();\n this.collapsible.toggle();\n }\n\n /** @internal */\n protected onKeydown(event: Event): void {\n event.preventDefault();\n this.collapsible.toggle();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n inject,\n input,\n linkedSignal,\n} from '@angular/core';\nimport type { InputSignal, Signal } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ComCollapsible } from './collapsible.directive';\nimport { ComCollapsibleContentTpl } from './directives/collapsible-content-tpl.directive';\nimport { ComCollapsibleLazy } from './directives/collapsible-lazy.directive';\nimport { mergeClasses } from './collapsible.utils';\nimport type { ComCollapsibleContentContext } from './collapsible.models';\n\n/**\n * Collapsible content component — animated panel with region role.\n *\n * Uses CSS grid technique for smooth height animation without JS measurement.\n * Supports lazy rendering via `comCollapsibleLazy` directive.\n *\n * @tokens None (structural only — styling is applied via templates or consumer classes)\n *\n * @example Basic usage\n * ```html\n * <com-collapsible-content>\n * <div class=\"p-4\">Content here.</div>\n * </com-collapsible-content>\n * ```\n *\n * @example With custom duration\n * ```html\n * <com-collapsible-content [duration]=\"300\">\n * <div class=\"p-4\">Slower animation.</div>\n * </com-collapsible-content>\n * ```\n *\n * @example With content chrome template\n * ```html\n * <com-collapsible-content>\n * <ng-template comCollapsibleContentTpl let-open=\"open\">\n * <div class=\"border-t border-border p-4\">\n * <!-- Content with custom chrome -->\n * </div>\n * </ng-template>\n * </com-collapsible-content>\n * ```\n *\n * @example Lazy content\n * ```html\n * <com-collapsible-content>\n * <ng-template comCollapsibleLazy>\n * <app-heavy-component />\n * </ng-template>\n * </com-collapsible-content>\n * ```\n */\n@Component({\n selector: 'com-collapsible-content',\n template: `\n @if (contentTpl()) {\n <div class=\"com-collapsible-content-inner\" [class]=\"innerClass()\">\n <ng-container\n [ngTemplateOutlet]=\"contentTpl()!.templateRef\"\n [ngTemplateOutletContext]=\"templateContext()\"\n />\n </div>\n } @else if (lazyTpl()) {\n @if (hasBeenOpened()) {\n <div class=\"com-collapsible-content-inner\" [class]=\"innerClass()\">\n <ng-container [ngTemplateOutlet]=\"lazyTpl()!.templateRef\" />\n </div>\n }\n } @else {\n <div class=\"com-collapsible-content-inner\" [class]=\"innerClass()\">\n <ng-content />\n </div>\n }\n `,\n styles: `\n :host {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows var(--duration, 200ms) ease;\n }\n :host([data-state='open']) {\n grid-template-rows: 1fr;\n }\n .com-collapsible-content-inner {\n overflow: hidden;\n }\n `,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'com-collapsible-content',\n '[style.--duration.ms]': 'duration()',\n '[attr.id]': 'collapsible.contentId',\n '[attr.role]': '\"region\"',\n '[attr.aria-labelledby]': 'collapsible.triggerId',\n '[attr.data-state]': 'collapsible.isOpen() ? \"open\" : \"closed\"',\n '[attr.inert]': '!collapsible.isOpen() || null',\n },\n})\nexport class ComCollapsibleContent {\n /** Parent collapsible directive (provides state). */\n protected readonly collapsible: ComCollapsible = inject(ComCollapsible);\n\n /** Custom content chrome template. */\n protected readonly contentTpl: Signal<ComCollapsibleContentTpl | undefined> =\n contentChild<ComCollapsibleContentTpl>(ComCollapsibleContentTpl);\n\n /** Lazy content template. */\n protected readonly lazyTpl: Signal<ComCollapsibleLazy | undefined> =\n contentChild<ComCollapsibleLazy>(ComCollapsibleLazy);\n\n /** Track if collapsible has ever been opened (for lazy rendering). */\n protected readonly hasBeenOpened: Signal<boolean> = linkedSignal({\n source: () => this.collapsible.isOpen(),\n computation: (isOpen: boolean, previous: { value: boolean } | undefined) => isOpen || (previous?.value ?? false),\n });\n\n // ============ INPUTS ============\n\n /** Transition duration in milliseconds. */\n readonly duration: InputSignal<number> = input<number>(200);\n\n /** Consumer CSS classes for the inner wrapper. */\n readonly userClass: InputSignal<string> = input<string>('', { alias: 'class' });\n\n // ============ COMPUTED STATE ============\n\n /** @internal Computed inner wrapper class. */\n protected readonly innerClass: Signal<string> = computed(() =>\n mergeClasses('com-collapsible-content-inner', this.userClass())\n );\n\n /** Context for content template. */\n readonly templateContext: Signal<ComCollapsibleContentContext> = computed(() => ({\n $implicit: this.collapsible.isOpen(),\n open: this.collapsible.isOpen(),\n }));\n\n constructor() {}\n}\n","// Public API for the collapsible component\n\n// Types\nexport type {\n ComCollapsibleTriggerContext,\n ComCollapsibleContentContext,\n ComCollapsibleIconContext,\n} from './collapsible.models';\n\n// Variants\nexport { collapsibleVariants } from './collapsible.variants';\nexport type { CollapsibleVariant, CollapsibleVariants } from './collapsible.variants';\n\nexport { collapsibleTriggerVariants } from './collapsible-trigger.variants';\nexport type {\n CollapsibleTriggerVariant,\n CollapsibleTriggerSize,\n CollapsibleTriggerVariants,\n} from './collapsible-trigger.variants';\n\n// Template directives\nexport { ComCollapsibleTriggerTpl } from './directives/collapsible-trigger-tpl.directive';\nexport { ComCollapsibleContentTpl } from './directives/collapsible-content-tpl.directive';\nexport { ComCollapsibleIconTpl } from './directives/collapsible-icon-tpl.directive';\nexport { ComCollapsibleLazy } from './directives/collapsible-lazy.directive';\n\n// Main components\nexport { ComCollapsible } from './collapsible.directive';\nexport { ComCollapsibleTrigger } from './collapsible-trigger.component';\nexport { ComCollapsibleContent } from './collapsible-content.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -35,7 +35,7 @@ const confirmBackdropVariants = cva([
|
|
|
35
35
|
/**
|
|
36
36
|
* CVA variants for the confirmation panel container.
|
|
37
37
|
*
|
|
38
|
-
* @tokens `--color-popover`, `--color-popover-foreground`, `--color-border`, `--shadow-
|
|
38
|
+
* @tokens `--color-popover`, `--color-popover-foreground`, `--color-border`, `--shadow-overlay`, `--radius-popover`
|
|
39
39
|
*/
|
|
40
40
|
const confirmPanelVariants = cva([
|
|
41
41
|
'com-confirm-panel',
|
|
@@ -54,7 +54,7 @@ const confirmPanelVariants = cva([
|
|
|
54
54
|
'bg-popover',
|
|
55
55
|
'text-popover-foreground',
|
|
56
56
|
'p-6',
|
|
57
|
-
'shadow-
|
|
57
|
+
'shadow-overlay',
|
|
58
58
|
'rounded-popover',
|
|
59
59
|
'outline-none',
|
|
60
60
|
], {
|
|
@@ -121,7 +121,7 @@ function generateConfirmDescriptionId() {
|
|
|
121
121
|
* @internal Not exported in public API
|
|
122
122
|
*
|
|
123
123
|
* @tokens `--color-popover`, `--color-popover-foreground`, `--color-border`,
|
|
124
|
-
* `--color-foreground`, `--color-muted-foreground`, `--shadow-
|
|
124
|
+
* `--color-foreground`, `--color-muted-foreground`, `--shadow-overlay`, `--radius-popover`
|
|
125
125
|
*/
|
|
126
126
|
class ConfirmPanelComponent {
|
|
127
127
|
focusTrapFactory = inject(FocusTrapFactory);
|
|
@@ -320,7 +320,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
320
320
|
*
|
|
321
321
|
* @tokens `--color-popover`, `--color-popover-foreground`, `--color-border`,
|
|
322
322
|
* `--color-foreground`, `--color-muted-foreground`, `--color-backdrop`,
|
|
323
|
-
* `--shadow-
|
|
323
|
+
* `--shadow-overlay`, `--radius-popover`
|
|
324
324
|
*
|
|
325
325
|
* @example Basic confirmation
|
|
326
326
|
* ```html
|