codexly-ui 0.12.46 → 0.13.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/fesm2022/codexly-ui.mjs +458 -3
- package/fesm2022/codexly-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/codexly-ui.d.ts +172 -3
package/fesm2022/codexly-ui.mjs
CHANGED
|
@@ -3484,6 +3484,443 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
|
|
|
3484
3484
|
}]
|
|
3485
3485
|
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], prefixIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefixIcon", required: false }] }], suffixIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffixIcon", required: false }] }], prefixText: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefixText", required: false }] }], suffixText: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffixText", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], statusMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "statusMessage", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }] } });
|
|
3486
3486
|
|
|
3487
|
+
/** Luhn checksum + brand detection are pure functions, reusable outside the component (e.g. a
|
|
3488
|
+
* parent FormGroup wiring its own cross-field validator) — kept separate from the component
|
|
3489
|
+
* class itself, same reasoning as any other framework-agnostic utility in this library. */
|
|
3490
|
+
const ClxCardValidators = {
|
|
3491
|
+
luhn(digits) {
|
|
3492
|
+
if (!/^\d+$/.test(digits))
|
|
3493
|
+
return false;
|
|
3494
|
+
let sum = 0;
|
|
3495
|
+
let shouldDouble = false;
|
|
3496
|
+
for (let i = digits.length - 1; i >= 0; i--) {
|
|
3497
|
+
let d = Number(digits[i]);
|
|
3498
|
+
if (shouldDouble) {
|
|
3499
|
+
d *= 2;
|
|
3500
|
+
if (d > 9)
|
|
3501
|
+
d -= 9;
|
|
3502
|
+
}
|
|
3503
|
+
sum += d;
|
|
3504
|
+
shouldDouble = !shouldDouble;
|
|
3505
|
+
}
|
|
3506
|
+
return digits.length > 0 && sum % 10 === 0;
|
|
3507
|
+
},
|
|
3508
|
+
};
|
|
3509
|
+
/** Prefix rules ordered so the most specific range is checked before its broader superset would
|
|
3510
|
+
* otherwise misclassify it (none overlap here, but future additions should preserve this). */
|
|
3511
|
+
function detectClxCardBrand(digits) {
|
|
3512
|
+
if (/^4/.test(digits))
|
|
3513
|
+
return 'visa';
|
|
3514
|
+
if (/^5[1-5]/.test(digits) || /^2(2[2-9]|[3-6]\d|7[01]|720)/.test(digits))
|
|
3515
|
+
return 'mastercard';
|
|
3516
|
+
if (/^3[47]/.test(digits))
|
|
3517
|
+
return 'amex';
|
|
3518
|
+
return 'unknown';
|
|
3519
|
+
}
|
|
3520
|
+
|
|
3521
|
+
const CLX_CARD_BRAND_LABEL = {
|
|
3522
|
+
visa: 'VISA',
|
|
3523
|
+
mastercard: 'MASTERCARD',
|
|
3524
|
+
amex: 'AMEX',
|
|
3525
|
+
unknown: '',
|
|
3526
|
+
};
|
|
3527
|
+
let _clxCardNumberInputIdCounter = 0;
|
|
3528
|
+
/** Plain text input for a card's PAN — groups digits into 4-digit blocks as the customer types,
|
|
3529
|
+
* detects the brand (Visa/Mastercard/Amex) by BIN prefix purely to show its label (no network
|
|
3530
|
+
* call, no lookup), and exposes a Luhn-valid boolean so a consuming FormGroup can wire its own
|
|
3531
|
+
* validator without importing anything beyond ClxCardValidators. Knows nothing about any payment
|
|
3532
|
+
* provider — it is a generic card-number field, reusable by any app that ever needs one. */
|
|
3533
|
+
class ClxCardNumberInputComponent {
|
|
3534
|
+
_themeSvc = inject(ClxThemeService);
|
|
3535
|
+
// ── Inputs ───────────────────────────────────────────────────────────────
|
|
3536
|
+
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
3537
|
+
placeholder = input('0000 0000 0000 0000', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
3538
|
+
color = input(undefined, ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
3539
|
+
_color = computed(() => this.color() ?? this._themeSvc.formControlColor('cardNumber'), ...(ngDevMode ? [{ debugName: "_color" }] : /* istanbul ignore next */ []));
|
|
3540
|
+
hint = input('', ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
3541
|
+
status = input('default', ...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
|
|
3542
|
+
statusMessage = input('', ...(ngDevMode ? [{ debugName: "statusMessage" }] : /* istanbul ignore next */ []));
|
|
3543
|
+
size = input(undefined, ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
3544
|
+
_size = computed(() => (this.size() ?? this._themeSvc.config().defaultSize), ...(ngDevMode ? [{ debugName: "_size" }] : /* istanbul ignore next */ []));
|
|
3545
|
+
/** Initial value for standalone use (without FormControl) — raw digits, no spaces. */
|
|
3546
|
+
value = input('', ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
3547
|
+
/** Disabled state for standalone use (without FormControl) */
|
|
3548
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
3549
|
+
/** Emits the detected brand every time it changes — a consuming form can show its own brand
|
|
3550
|
+
* logo elsewhere in the page without re-deriving the detection itself. */
|
|
3551
|
+
brandChange = output();
|
|
3552
|
+
// ── Internal state ───────────────────────────────────────────────────────
|
|
3553
|
+
_inputId = `clx-card-number-input-${++_clxCardNumberInputIdCounter}`;
|
|
3554
|
+
/** Raw digits only (no spaces) — this is the value handed to the FormControl / ControlValueAccessor. */
|
|
3555
|
+
_value = signal('', ...(ngDevMode ? [{ debugName: "_value" }] : /* istanbul ignore next */ []));
|
|
3556
|
+
_cvaDisabled = signal(false, ...(ngDevMode ? [{ debugName: "_cvaDisabled" }] : /* istanbul ignore next */ []));
|
|
3557
|
+
_cvaConnected = false;
|
|
3558
|
+
_cardDisabled = inject(CLX_CARD_DISABLED_CONTEXT, { optional: true });
|
|
3559
|
+
_disabled = computed(() => this._cvaDisabled() || this.disabled() || !!this._cardDisabled?.(), ...(ngDevMode ? [{ debugName: "_disabled" }] : /* istanbul ignore next */ []));
|
|
3560
|
+
_valueEffect = effect(() => {
|
|
3561
|
+
const v = this.value();
|
|
3562
|
+
if (!this._cvaConnected)
|
|
3563
|
+
untracked(() => this._value.set(v));
|
|
3564
|
+
}, ...(ngDevMode ? [{ debugName: "_valueEffect" }] : /* istanbul ignore next */ []));
|
|
3565
|
+
_brandEffect = effect(() => this.brandChange.emit(this._brand()), ...(ngDevMode ? [{ debugName: "_brandEffect" }] : /* istanbul ignore next */ []));
|
|
3566
|
+
_onChange = () => { };
|
|
3567
|
+
_onTouched = () => { };
|
|
3568
|
+
// ── Computed ─────────────────────────────────────────────────────────────
|
|
3569
|
+
_brand = computed(() => detectClxCardBrand(this._value()), ...(ngDevMode ? [{ debugName: "_brand" }] : /* istanbul ignore next */ []));
|
|
3570
|
+
_brandLabel = computed(() => CLX_CARD_BRAND_LABEL[this._brand()], ...(ngDevMode ? [{ debugName: "_brandLabel" }] : /* istanbul ignore next */ []));
|
|
3571
|
+
/** Digits grouped into 4-character blocks for display only — the underlying FormControl value
|
|
3572
|
+
* (see writeValue/_handleInput) never contains the spaces. */
|
|
3573
|
+
_displayValue = computed(() => this._value().replace(/(.{4})/g, '$1 ').trim(), ...(ngDevMode ? [{ debugName: "_displayValue" }] : /* istanbul ignore next */ []));
|
|
3574
|
+
_sizeConfig = computed(() => INPUT_SIZE_MAP[this._size()], ...(ngDevMode ? [{ debugName: "_sizeConfig" }] : /* istanbul ignore next */ []));
|
|
3575
|
+
_statusCfg = computed(() => INPUT_STATUS_MAP[this.status()], ...(ngDevMode ? [{ debugName: "_statusCfg" }] : /* istanbul ignore next */ []));
|
|
3576
|
+
_labelClass = computed(() => `${this._sizeConfig().label} ${CLX_TEXT_LABEL} leading-none`, ...(ngDevMode ? [{ debugName: "_labelClass" }] : /* istanbul ignore next */ []));
|
|
3577
|
+
_hintClass = computed(() => `${this._sizeConfig().hint} ${CLX_TEXT_HINT}`, ...(ngDevMode ? [{ debugName: "_hintClass" }] : /* istanbul ignore next */ []));
|
|
3578
|
+
_wrapperClass = computed(() => 'relative', ...(ngDevMode ? [{ debugName: "_wrapperClass" }] : /* istanbul ignore next */ []));
|
|
3579
|
+
_inputClass = computed(() => {
|
|
3580
|
+
const size = this._sizeConfig();
|
|
3581
|
+
const statusCfg = this._statusCfg();
|
|
3582
|
+
const pl = size.padDefaultL;
|
|
3583
|
+
const pr = size.padRight;
|
|
3584
|
+
const base = `w-full ${resolveRadius(this._themeSvc.config().borderRadius)} border ${size.input} ${pl} ${pr} outline-none transition-[border-color,box-shadow] duration-200 tracking-wider`;
|
|
3585
|
+
if (this._disabled()) {
|
|
3586
|
+
return `${base} ${CLX_BORDER_DISABLED} ${CLX_BG_DISABLED} cursor-not-allowed ${CLX_TEXT_DISABLED} ${CLX_PLACEHOLDER}`;
|
|
3587
|
+
}
|
|
3588
|
+
const ring = this.status() !== 'default' ? statusCfg.ring : resolveColor(this._color()).focusDirect;
|
|
3589
|
+
return `${base} ${CLX_BG_SURFACE} ${statusCfg.border} ${ring} ${CLX_TEXT_INPUT} ${CLX_PLACEHOLDER}`;
|
|
3590
|
+
}, ...(ngDevMode ? [{ debugName: "_inputClass" }] : /* istanbul ignore next */ []));
|
|
3591
|
+
_suffixIconWrapCls = computed(() => {
|
|
3592
|
+
const size = this._sizeConfig();
|
|
3593
|
+
return `absolute ${size.iconRight} top-1/2 -translate-y-1/2 pointer-events-none ${CLX_TEXT_IDLE} flex items-center`;
|
|
3594
|
+
}, ...(ngDevMode ? [{ debugName: "_suffixIconWrapCls" }] : /* istanbul ignore next */ []));
|
|
3595
|
+
_brandLabelClass = computed(() => {
|
|
3596
|
+
const size = this._sizeConfig();
|
|
3597
|
+
return `absolute ${size.iconRight} top-1/2 -translate-y-1/2 pointer-events-none ${CLX_TEXT_IDLE} text-xs font-semibold tracking-wide`;
|
|
3598
|
+
}, ...(ngDevMode ? [{ debugName: "_brandLabelClass" }] : /* istanbul ignore next */ []));
|
|
3599
|
+
_statusMsgClass = computed(() => `${this._sizeConfig().hint} ${this._statusCfg().msgCls}`, ...(ngDevMode ? [{ debugName: "_statusMsgClass" }] : /* istanbul ignore next */ []));
|
|
3600
|
+
// ── CVA ──────────────────────────────────────────────────────────────────
|
|
3601
|
+
writeValue(val) {
|
|
3602
|
+
this._cvaConnected = true;
|
|
3603
|
+
this._value.set(val ?? '');
|
|
3604
|
+
}
|
|
3605
|
+
registerOnChange(fn) {
|
|
3606
|
+
this._onChange = fn;
|
|
3607
|
+
}
|
|
3608
|
+
registerOnTouched(fn) {
|
|
3609
|
+
this._onTouched = fn;
|
|
3610
|
+
}
|
|
3611
|
+
setDisabledState(disabled) {
|
|
3612
|
+
this._cvaDisabled.set(disabled);
|
|
3613
|
+
}
|
|
3614
|
+
// ── Handlers ─────────────────────────────────────────────────────────────
|
|
3615
|
+
_handleInput(event) {
|
|
3616
|
+
const digits = event.target.value.replace(/\D/g, '').slice(0, 19);
|
|
3617
|
+
this._value.set(digits);
|
|
3618
|
+
this._onChange(digits);
|
|
3619
|
+
}
|
|
3620
|
+
_handleBlur() {
|
|
3621
|
+
this._onTouched();
|
|
3622
|
+
}
|
|
3623
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxCardNumberInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3624
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxCardNumberInputComponent, isStandalone: true, selector: "clx-card-number-input", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, statusMessage: { classPropertyName: "statusMessage", publicName: "statusMessage", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { brandChange: "brandChange" }, host: { classAttribute: "flex flex-col gap-1.5" }, providers: [
|
|
3625
|
+
{
|
|
3626
|
+
provide: NG_VALUE_ACCESSOR,
|
|
3627
|
+
useExisting: forwardRef(() => ClxCardNumberInputComponent),
|
|
3628
|
+
multi: true,
|
|
3629
|
+
},
|
|
3630
|
+
], ngImport: i0, template: `
|
|
3631
|
+
@if (label()) {
|
|
3632
|
+
<label [for]="_inputId" [class]="_labelClass()">{{ label() }}</label>
|
|
3633
|
+
}
|
|
3634
|
+
|
|
3635
|
+
<div [class]="_wrapperClass()">
|
|
3636
|
+
<input
|
|
3637
|
+
[id]="_inputId"
|
|
3638
|
+
type="text"
|
|
3639
|
+
inputmode="numeric"
|
|
3640
|
+
[placeholder]="placeholder()"
|
|
3641
|
+
[disabled]="_disabled()"
|
|
3642
|
+
[value]="_displayValue()"
|
|
3643
|
+
[class]="_inputClass()"
|
|
3644
|
+
(input)="_handleInput($event)"
|
|
3645
|
+
(blur)="_handleBlur()"
|
|
3646
|
+
/>
|
|
3647
|
+
|
|
3648
|
+
@if (status() !== 'default') {
|
|
3649
|
+
<div [class]="_suffixIconWrapCls()" [style.color]="_statusCfg().iconColor">
|
|
3650
|
+
<span clx-icon [name]="_statusCfg().iconName" [size]="_sizeConfig().iconSize"></span>
|
|
3651
|
+
</div>
|
|
3652
|
+
} @else if (_brand() !== 'unknown') {
|
|
3653
|
+
<span [class]="_brandLabelClass()">{{ _brandLabel() }}</span>
|
|
3654
|
+
} @else {
|
|
3655
|
+
<div [class]="_suffixIconWrapCls()">
|
|
3656
|
+
<span clx-icon name="credit_card" [size]="_sizeConfig().iconSize"></span>
|
|
3657
|
+
</div>
|
|
3658
|
+
}
|
|
3659
|
+
</div>
|
|
3660
|
+
|
|
3661
|
+
@if (statusMessage() && status() !== 'default') {
|
|
3662
|
+
<p [class]="_statusMsgClass()">{{ statusMessage() }}</p>
|
|
3663
|
+
} @else if (hint()) {
|
|
3664
|
+
<p [class]="_hintClass()">{{ hint() }}</p>
|
|
3665
|
+
}
|
|
3666
|
+
`, isInline: true, dependencies: [{ kind: "component", type: ClxIconComponent, selector: "span[clx-icon]", inputs: ["name", "size", "color", "fill"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
3667
|
+
}
|
|
3668
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxCardNumberInputComponent, decorators: [{
|
|
3669
|
+
type: Component,
|
|
3670
|
+
args: [{
|
|
3671
|
+
selector: 'clx-card-number-input',
|
|
3672
|
+
standalone: true,
|
|
3673
|
+
imports: [ClxIconComponent],
|
|
3674
|
+
providers: [
|
|
3675
|
+
{
|
|
3676
|
+
provide: NG_VALUE_ACCESSOR,
|
|
3677
|
+
useExisting: forwardRef(() => ClxCardNumberInputComponent),
|
|
3678
|
+
multi: true,
|
|
3679
|
+
},
|
|
3680
|
+
],
|
|
3681
|
+
template: `
|
|
3682
|
+
@if (label()) {
|
|
3683
|
+
<label [for]="_inputId" [class]="_labelClass()">{{ label() }}</label>
|
|
3684
|
+
}
|
|
3685
|
+
|
|
3686
|
+
<div [class]="_wrapperClass()">
|
|
3687
|
+
<input
|
|
3688
|
+
[id]="_inputId"
|
|
3689
|
+
type="text"
|
|
3690
|
+
inputmode="numeric"
|
|
3691
|
+
[placeholder]="placeholder()"
|
|
3692
|
+
[disabled]="_disabled()"
|
|
3693
|
+
[value]="_displayValue()"
|
|
3694
|
+
[class]="_inputClass()"
|
|
3695
|
+
(input)="_handleInput($event)"
|
|
3696
|
+
(blur)="_handleBlur()"
|
|
3697
|
+
/>
|
|
3698
|
+
|
|
3699
|
+
@if (status() !== 'default') {
|
|
3700
|
+
<div [class]="_suffixIconWrapCls()" [style.color]="_statusCfg().iconColor">
|
|
3701
|
+
<span clx-icon [name]="_statusCfg().iconName" [size]="_sizeConfig().iconSize"></span>
|
|
3702
|
+
</div>
|
|
3703
|
+
} @else if (_brand() !== 'unknown') {
|
|
3704
|
+
<span [class]="_brandLabelClass()">{{ _brandLabel() }}</span>
|
|
3705
|
+
} @else {
|
|
3706
|
+
<div [class]="_suffixIconWrapCls()">
|
|
3707
|
+
<span clx-icon name="credit_card" [size]="_sizeConfig().iconSize"></span>
|
|
3708
|
+
</div>
|
|
3709
|
+
}
|
|
3710
|
+
</div>
|
|
3711
|
+
|
|
3712
|
+
@if (statusMessage() && status() !== 'default') {
|
|
3713
|
+
<p [class]="_statusMsgClass()">{{ statusMessage() }}</p>
|
|
3714
|
+
} @else if (hint()) {
|
|
3715
|
+
<p [class]="_hintClass()">{{ hint() }}</p>
|
|
3716
|
+
}
|
|
3717
|
+
`,
|
|
3718
|
+
encapsulation: ViewEncapsulation.None,
|
|
3719
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
3720
|
+
host: {
|
|
3721
|
+
class: 'flex flex-col gap-1.5',
|
|
3722
|
+
},
|
|
3723
|
+
}]
|
|
3724
|
+
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], statusMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "statusMessage", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], brandChange: [{ type: i0.Output, args: ["brandChange"] }] } });
|
|
3725
|
+
|
|
3726
|
+
let _clxCardExpiryInputIdCounter = 0;
|
|
3727
|
+
/** Plain text input for a card's expiry date in MM/YY form — auto-inserts the "/" as the customer
|
|
3728
|
+
* types and exposes the raw "MMYY" digits (no slash) as the FormControl value, same convention
|
|
3729
|
+
* Wompi's own tokenization endpoint expects for exp_month/exp_year split apart. Knows nothing
|
|
3730
|
+
* about any payment provider — a generic expiry field, reusable by any app that ever needs one. */
|
|
3731
|
+
class ClxCardExpiryInputComponent {
|
|
3732
|
+
_themeSvc = inject(ClxThemeService);
|
|
3733
|
+
// ── Inputs ───────────────────────────────────────────────────────────────
|
|
3734
|
+
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
3735
|
+
placeholder = input('MM/AA', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
3736
|
+
color = input(undefined, ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
3737
|
+
_color = computed(() => this.color() ?? this._themeSvc.formControlColor('cardExpiry'), ...(ngDevMode ? [{ debugName: "_color" }] : /* istanbul ignore next */ []));
|
|
3738
|
+
hint = input('', ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
3739
|
+
status = input('default', ...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
|
|
3740
|
+
statusMessage = input('', ...(ngDevMode ? [{ debugName: "statusMessage" }] : /* istanbul ignore next */ []));
|
|
3741
|
+
size = input(undefined, ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
3742
|
+
_size = computed(() => (this.size() ?? this._themeSvc.config().defaultSize), ...(ngDevMode ? [{ debugName: "_size" }] : /* istanbul ignore next */ []));
|
|
3743
|
+
/** Initial value for standalone use (without FormControl) — raw "MMYY" digits, no slash. */
|
|
3744
|
+
value = input('', ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
3745
|
+
/** Disabled state for standalone use (without FormControl) */
|
|
3746
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
3747
|
+
// ── Internal state ───────────────────────────────────────────────────────
|
|
3748
|
+
_inputId = `clx-card-expiry-input-${++_clxCardExpiryInputIdCounter}`;
|
|
3749
|
+
/** Raw "MMYY" digits (max 4, no slash) — this is the value handed to the FormControl. */
|
|
3750
|
+
_value = signal('', ...(ngDevMode ? [{ debugName: "_value" }] : /* istanbul ignore next */ []));
|
|
3751
|
+
_cvaDisabled = signal(false, ...(ngDevMode ? [{ debugName: "_cvaDisabled" }] : /* istanbul ignore next */ []));
|
|
3752
|
+
_cvaConnected = false;
|
|
3753
|
+
_cardDisabled = inject(CLX_CARD_DISABLED_CONTEXT, { optional: true });
|
|
3754
|
+
_disabled = computed(() => this._cvaDisabled() || this.disabled() || !!this._cardDisabled?.(), ...(ngDevMode ? [{ debugName: "_disabled" }] : /* istanbul ignore next */ []));
|
|
3755
|
+
_valueEffect = effect(() => {
|
|
3756
|
+
const v = this.value();
|
|
3757
|
+
if (!this._cvaConnected)
|
|
3758
|
+
untracked(() => this._value.set(v));
|
|
3759
|
+
}, ...(ngDevMode ? [{ debugName: "_valueEffect" }] : /* istanbul ignore next */ []));
|
|
3760
|
+
_onChange = () => { };
|
|
3761
|
+
_onTouched = () => { };
|
|
3762
|
+
// ── Computed ─────────────────────────────────────────────────────────────
|
|
3763
|
+
/** "MMYY" -> "MM/YY" for display only — the underlying FormControl value never has the slash. */
|
|
3764
|
+
_displayValue = computed(() => {
|
|
3765
|
+
const v = this._value();
|
|
3766
|
+
return v.length > 2 ? `${v.slice(0, 2)}/${v.slice(2)}` : v;
|
|
3767
|
+
}, ...(ngDevMode ? [{ debugName: "_displayValue" }] : /* istanbul ignore next */ []));
|
|
3768
|
+
_sizeConfig = computed(() => INPUT_SIZE_MAP[this._size()], ...(ngDevMode ? [{ debugName: "_sizeConfig" }] : /* istanbul ignore next */ []));
|
|
3769
|
+
_statusCfg = computed(() => INPUT_STATUS_MAP[this.status()], ...(ngDevMode ? [{ debugName: "_statusCfg" }] : /* istanbul ignore next */ []));
|
|
3770
|
+
_labelClass = computed(() => `${this._sizeConfig().label} ${CLX_TEXT_LABEL} leading-none`, ...(ngDevMode ? [{ debugName: "_labelClass" }] : /* istanbul ignore next */ []));
|
|
3771
|
+
_hintClass = computed(() => `${this._sizeConfig().hint} ${CLX_TEXT_HINT}`, ...(ngDevMode ? [{ debugName: "_hintClass" }] : /* istanbul ignore next */ []));
|
|
3772
|
+
_wrapperClass = computed(() => 'relative', ...(ngDevMode ? [{ debugName: "_wrapperClass" }] : /* istanbul ignore next */ []));
|
|
3773
|
+
_inputClass = computed(() => {
|
|
3774
|
+
const size = this._sizeConfig();
|
|
3775
|
+
const statusCfg = this._statusCfg();
|
|
3776
|
+
const pl = size.padDefaultL;
|
|
3777
|
+
const hasSuffix = this.status() !== 'default';
|
|
3778
|
+
const pr = hasSuffix ? size.padRight : size.padDefaultR;
|
|
3779
|
+
const base = `w-full ${resolveRadius(this._themeSvc.config().borderRadius)} border ${size.input} ${pl} ${pr} outline-none transition-[border-color,box-shadow] duration-200`;
|
|
3780
|
+
if (this._disabled()) {
|
|
3781
|
+
return `${base} ${CLX_BORDER_DISABLED} ${CLX_BG_DISABLED} cursor-not-allowed ${CLX_TEXT_DISABLED} ${CLX_PLACEHOLDER}`;
|
|
3782
|
+
}
|
|
3783
|
+
const ring = this.status() !== 'default' ? statusCfg.ring : resolveColor(this._color()).focusDirect;
|
|
3784
|
+
return `${base} ${CLX_BG_SURFACE} ${statusCfg.border} ${ring} ${CLX_TEXT_INPUT} ${CLX_PLACEHOLDER}`;
|
|
3785
|
+
}, ...(ngDevMode ? [{ debugName: "_inputClass" }] : /* istanbul ignore next */ []));
|
|
3786
|
+
_suffixIconWrapCls = computed(() => {
|
|
3787
|
+
const size = this._sizeConfig();
|
|
3788
|
+
return `absolute ${size.iconRight} top-1/2 -translate-y-1/2 pointer-events-none flex items-center`;
|
|
3789
|
+
}, ...(ngDevMode ? [{ debugName: "_suffixIconWrapCls" }] : /* istanbul ignore next */ []));
|
|
3790
|
+
_statusMsgClass = computed(() => `${this._sizeConfig().hint} ${this._statusCfg().msgCls}`, ...(ngDevMode ? [{ debugName: "_statusMsgClass" }] : /* istanbul ignore next */ []));
|
|
3791
|
+
// ── CVA ──────────────────────────────────────────────────────────────────
|
|
3792
|
+
writeValue(val) {
|
|
3793
|
+
this._cvaConnected = true;
|
|
3794
|
+
this._value.set(val ?? '');
|
|
3795
|
+
}
|
|
3796
|
+
registerOnChange(fn) {
|
|
3797
|
+
this._onChange = fn;
|
|
3798
|
+
}
|
|
3799
|
+
registerOnTouched(fn) {
|
|
3800
|
+
this._onTouched = fn;
|
|
3801
|
+
}
|
|
3802
|
+
setDisabledState(disabled) {
|
|
3803
|
+
this._cvaDisabled.set(disabled);
|
|
3804
|
+
}
|
|
3805
|
+
// ── Handlers ─────────────────────────────────────────────────────────────
|
|
3806
|
+
_handleInput(event) {
|
|
3807
|
+
const digits = event.target.value.replace(/\D/g, '').slice(0, 4);
|
|
3808
|
+
this._value.set(digits);
|
|
3809
|
+
this._onChange(digits);
|
|
3810
|
+
}
|
|
3811
|
+
_handleBlur() {
|
|
3812
|
+
this._onTouched();
|
|
3813
|
+
}
|
|
3814
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxCardExpiryInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3815
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxCardExpiryInputComponent, isStandalone: true, selector: "clx-card-expiry-input", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, statusMessage: { classPropertyName: "statusMessage", publicName: "statusMessage", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "flex flex-col gap-1.5" }, providers: [
|
|
3816
|
+
{
|
|
3817
|
+
provide: NG_VALUE_ACCESSOR,
|
|
3818
|
+
useExisting: forwardRef(() => ClxCardExpiryInputComponent),
|
|
3819
|
+
multi: true,
|
|
3820
|
+
},
|
|
3821
|
+
], ngImport: i0, template: `
|
|
3822
|
+
@if (label()) {
|
|
3823
|
+
<label [for]="_inputId" [class]="_labelClass()">{{ label() }}</label>
|
|
3824
|
+
}
|
|
3825
|
+
|
|
3826
|
+
<div [class]="_wrapperClass()">
|
|
3827
|
+
<input
|
|
3828
|
+
[id]="_inputId"
|
|
3829
|
+
type="text"
|
|
3830
|
+
inputmode="numeric"
|
|
3831
|
+
autocomplete="cc-exp"
|
|
3832
|
+
[placeholder]="placeholder()"
|
|
3833
|
+
[disabled]="_disabled()"
|
|
3834
|
+
[value]="_displayValue()"
|
|
3835
|
+
[class]="_inputClass()"
|
|
3836
|
+
(input)="_handleInput($event)"
|
|
3837
|
+
(blur)="_handleBlur()"
|
|
3838
|
+
/>
|
|
3839
|
+
|
|
3840
|
+
@if (status() !== 'default') {
|
|
3841
|
+
<div [class]="_suffixIconWrapCls()" [style.color]="_statusCfg().iconColor">
|
|
3842
|
+
<span clx-icon [name]="_statusCfg().iconName" [size]="_sizeConfig().iconSize"></span>
|
|
3843
|
+
</div>
|
|
3844
|
+
}
|
|
3845
|
+
</div>
|
|
3846
|
+
|
|
3847
|
+
@if (statusMessage() && status() !== 'default') {
|
|
3848
|
+
<p [class]="_statusMsgClass()">{{ statusMessage() }}</p>
|
|
3849
|
+
} @else if (hint()) {
|
|
3850
|
+
<p [class]="_hintClass()">{{ hint() }}</p>
|
|
3851
|
+
}
|
|
3852
|
+
`, isInline: true, dependencies: [{ kind: "component", type: ClxIconComponent, selector: "span[clx-icon]", inputs: ["name", "size", "color", "fill"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
3853
|
+
}
|
|
3854
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxCardExpiryInputComponent, decorators: [{
|
|
3855
|
+
type: Component,
|
|
3856
|
+
args: [{
|
|
3857
|
+
selector: 'clx-card-expiry-input',
|
|
3858
|
+
standalone: true,
|
|
3859
|
+
imports: [ClxIconComponent],
|
|
3860
|
+
providers: [
|
|
3861
|
+
{
|
|
3862
|
+
provide: NG_VALUE_ACCESSOR,
|
|
3863
|
+
useExisting: forwardRef(() => ClxCardExpiryInputComponent),
|
|
3864
|
+
multi: true,
|
|
3865
|
+
},
|
|
3866
|
+
],
|
|
3867
|
+
template: `
|
|
3868
|
+
@if (label()) {
|
|
3869
|
+
<label [for]="_inputId" [class]="_labelClass()">{{ label() }}</label>
|
|
3870
|
+
}
|
|
3871
|
+
|
|
3872
|
+
<div [class]="_wrapperClass()">
|
|
3873
|
+
<input
|
|
3874
|
+
[id]="_inputId"
|
|
3875
|
+
type="text"
|
|
3876
|
+
inputmode="numeric"
|
|
3877
|
+
autocomplete="cc-exp"
|
|
3878
|
+
[placeholder]="placeholder()"
|
|
3879
|
+
[disabled]="_disabled()"
|
|
3880
|
+
[value]="_displayValue()"
|
|
3881
|
+
[class]="_inputClass()"
|
|
3882
|
+
(input)="_handleInput($event)"
|
|
3883
|
+
(blur)="_handleBlur()"
|
|
3884
|
+
/>
|
|
3885
|
+
|
|
3886
|
+
@if (status() !== 'default') {
|
|
3887
|
+
<div [class]="_suffixIconWrapCls()" [style.color]="_statusCfg().iconColor">
|
|
3888
|
+
<span clx-icon [name]="_statusCfg().iconName" [size]="_sizeConfig().iconSize"></span>
|
|
3889
|
+
</div>
|
|
3890
|
+
}
|
|
3891
|
+
</div>
|
|
3892
|
+
|
|
3893
|
+
@if (statusMessage() && status() !== 'default') {
|
|
3894
|
+
<p [class]="_statusMsgClass()">{{ statusMessage() }}</p>
|
|
3895
|
+
} @else if (hint()) {
|
|
3896
|
+
<p [class]="_hintClass()">{{ hint() }}</p>
|
|
3897
|
+
}
|
|
3898
|
+
`,
|
|
3899
|
+
encapsulation: ViewEncapsulation.None,
|
|
3900
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
3901
|
+
host: {
|
|
3902
|
+
class: 'flex flex-col gap-1.5',
|
|
3903
|
+
},
|
|
3904
|
+
}]
|
|
3905
|
+
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], statusMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "statusMessage", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
|
|
3906
|
+
|
|
3907
|
+
/** True when MM/YY (2-digit year) refers to a month that has already fully elapsed relative to
|
|
3908
|
+
* the system's current date — the expiry month itself is still valid through its last day. */
|
|
3909
|
+
function isClxCardExpired(month, twoDigitYear) {
|
|
3910
|
+
const m = Number(month);
|
|
3911
|
+
const y = Number(twoDigitYear);
|
|
3912
|
+
if (!Number.isInteger(m) || m < 1 || m > 12 || !Number.isInteger(y))
|
|
3913
|
+
return true;
|
|
3914
|
+
const now = new Date();
|
|
3915
|
+
const currentYear = now.getFullYear() % 100;
|
|
3916
|
+
const currentMonth = now.getMonth() + 1;
|
|
3917
|
+
if (y < currentYear)
|
|
3918
|
+
return true;
|
|
3919
|
+
if (y === currentYear && m < currentMonth)
|
|
3920
|
+
return true;
|
|
3921
|
+
return false;
|
|
3922
|
+
}
|
|
3923
|
+
|
|
3487
3924
|
const OTP_SIZE_MAP = {
|
|
3488
3925
|
xs: { box: 'w-8 h-8 text-sm', text: 'text-sm', gap: 'gap-1.5' },
|
|
3489
3926
|
sm: { box: 'w-10 h-10 text-base', text: 'text-base', gap: 'gap-2' },
|
|
@@ -10009,6 +10446,16 @@ class ClxWizardComponent {
|
|
|
10009
10446
|
prevLabel = input('Anterior', ...(ngDevMode ? [{ debugName: "prevLabel" }] : /* istanbul ignore next */ []));
|
|
10010
10447
|
nextLabel = input('Siguiente', ...(ngDevMode ? [{ debugName: "nextLabel" }] : /* istanbul ignore next */ []));
|
|
10011
10448
|
finishLabel = input('Finalizar', ...(ngDevMode ? [{ debugName: "finishLabel" }] : /* istanbul ignore next */ []));
|
|
10449
|
+
/** Which step to land on when the wizard first renders — for restoring an in-progress flow (e.g.
|
|
10450
|
+
* a saved draft, or state re-hydrated after an external redirect) rather than always starting
|
|
10451
|
+
* fresh at step 0. Applied once, in ngAfterContentInit, and clamped to a valid index; deliberately
|
|
10452
|
+
* bypasses the `linear` guard that goTo()/next() enforce for user-driven navigation — that guard
|
|
10453
|
+
* exists to stop a customer from skipping ahead of steps they haven't filled in yet, which doesn't
|
|
10454
|
+
* apply here: the caller is asserting those earlier steps are ALREADY valid (e.g. their own
|
|
10455
|
+
* signals were just re-prefilled from a backend order), not trying to skip past them. Consumers
|
|
10456
|
+
* are responsible for that guarantee — this input trusts it rather than re-validating each
|
|
10457
|
+
* skipped step, since isValid() reflects the CURRENT signal state, which the caller controls. */
|
|
10458
|
+
initialStep = input(undefined, ...(ngDevMode ? [{ debugName: "initialStep" }] : /* istanbul ignore next */ []));
|
|
10012
10459
|
// ── Outputs ────────────────────────────────────────────────────────────────
|
|
10013
10460
|
stepChange = output();
|
|
10014
10461
|
finish = output();
|
|
@@ -10021,12 +10468,20 @@ class ClxWizardComponent {
|
|
|
10021
10468
|
// ── Lifecycle ──────────────────────────────────────────────────────────────
|
|
10022
10469
|
ngAfterContentInit() {
|
|
10023
10470
|
this._steps = this._stepQuery.toArray();
|
|
10471
|
+
this._applyInitialStep();
|
|
10024
10472
|
this._syncActiveAttrs();
|
|
10025
10473
|
this._stepQuery.changes.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(() => {
|
|
10026
10474
|
this._steps = this._stepQuery.toArray();
|
|
10027
10475
|
this._syncActiveAttrs();
|
|
10028
10476
|
});
|
|
10029
10477
|
}
|
|
10478
|
+
_applyInitialStep() {
|
|
10479
|
+
const requested = this.initialStep();
|
|
10480
|
+
if (requested == null)
|
|
10481
|
+
return;
|
|
10482
|
+
const clamped = Math.min(Math.max(requested, 0), this._lastIndex());
|
|
10483
|
+
this._currentIndex.set(clamped);
|
|
10484
|
+
}
|
|
10030
10485
|
_syncActiveAttrs() {
|
|
10031
10486
|
this._steps.forEach((step, i) => {
|
|
10032
10487
|
step.nativeEl.setAttribute('data-active', String(i === this._currentIndex()));
|
|
@@ -10117,7 +10572,7 @@ class ClxWizardComponent {
|
|
|
10117
10572
|
return `${base} border-2 border-clx-border text-clx-text-subtle bg-clx-surface ${ptr}`;
|
|
10118
10573
|
}
|
|
10119
10574
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxWizardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10120
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxWizardComponent, isStandalone: true, selector: "clx-wizard", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, activeTextColor: { classPropertyName: "activeTextColor", publicName: "activeTextColor", isSignal: true, isRequired: false, transformFunction: null }, underlineColor: { classPropertyName: "underlineColor", publicName: "underlineColor", isSignal: true, isRequired: false, transformFunction: null }, stepColor: { classPropertyName: "stepColor", publicName: "stepColor", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, prevLabel: { classPropertyName: "prevLabel", publicName: "prevLabel", isSignal: true, isRequired: false, transformFunction: null }, nextLabel: { classPropertyName: "nextLabel", publicName: "nextLabel", isSignal: true, isRequired: false, transformFunction: null }, finishLabel: { classPropertyName: "finishLabel", publicName: "finishLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { stepChange: "stepChange", finish: "finish" }, queries: [{ propertyName: "_stepQuery", predicate: ClxStepComponent }], ngImport: i0, template: `
|
|
10575
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxWizardComponent, isStandalone: true, selector: "clx-wizard", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, activeTextColor: { classPropertyName: "activeTextColor", publicName: "activeTextColor", isSignal: true, isRequired: false, transformFunction: null }, underlineColor: { classPropertyName: "underlineColor", publicName: "underlineColor", isSignal: true, isRequired: false, transformFunction: null }, stepColor: { classPropertyName: "stepColor", publicName: "stepColor", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, linear: { classPropertyName: "linear", publicName: "linear", isSignal: true, isRequired: false, transformFunction: null }, prevLabel: { classPropertyName: "prevLabel", publicName: "prevLabel", isSignal: true, isRequired: false, transformFunction: null }, nextLabel: { classPropertyName: "nextLabel", publicName: "nextLabel", isSignal: true, isRequired: false, transformFunction: null }, finishLabel: { classPropertyName: "finishLabel", publicName: "finishLabel", isSignal: true, isRequired: false, transformFunction: null }, initialStep: { classPropertyName: "initialStep", publicName: "initialStep", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { stepChange: "stepChange", finish: "finish" }, queries: [{ propertyName: "_stepQuery", predicate: ClxStepComponent }], ngImport: i0, template: `
|
|
10121
10576
|
<div [class]="_rootClass()">
|
|
10122
10577
|
|
|
10123
10578
|
<!-- ══ HORIZONTAL: clx-tabs indicator ═══════════════════════════════ -->
|
|
@@ -10332,7 +10787,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
|
|
|
10332
10787
|
</div>
|
|
10333
10788
|
</div>
|
|
10334
10789
|
`, styles: ["@keyframes clx-wizard-fade-slide{0%{opacity:0;transform:translate(10px)}to{opacity:1;transform:translate(0)}}.clx-wizard-step-enter{animation:clx-wizard-fade-slide .22s cubic-bezier(.4,0,.2,1) both}@keyframes clx-wizard-fill{0%{width:0%}to{width:100%}}.clx-wizard-connector-fill{animation:clx-wizard-fill .3s ease both}clx-step[data-active=false]{display:none}\n"] }]
|
|
10335
|
-
}], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], activeTextColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeTextColor", required: false }] }], underlineColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "underlineColor", required: false }] }], stepColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepColor", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], linear: [{ type: i0.Input, args: [{ isSignal: true, alias: "linear", required: false }] }], prevLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "prevLabel", required: false }] }], nextLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextLabel", required: false }] }], finishLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "finishLabel", required: false }] }], stepChange: [{ type: i0.Output, args: ["stepChange"] }], finish: [{ type: i0.Output, args: ["finish"] }], _stepQuery: [{
|
|
10790
|
+
}], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], activeTextColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeTextColor", required: false }] }], underlineColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "underlineColor", required: false }] }], stepColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepColor", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], linear: [{ type: i0.Input, args: [{ isSignal: true, alias: "linear", required: false }] }], prevLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "prevLabel", required: false }] }], nextLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "nextLabel", required: false }] }], finishLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "finishLabel", required: false }] }], initialStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "initialStep", required: false }] }], stepChange: [{ type: i0.Output, args: ["stepChange"] }], finish: [{ type: i0.Output, args: ["finish"] }], _stepQuery: [{
|
|
10336
10791
|
type: ContentChildren,
|
|
10337
10792
|
args: [ClxStepComponent]
|
|
10338
10793
|
}] } });
|
|
@@ -18240,5 +18695,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
|
|
|
18240
18695
|
* Generated bundle index. Do not edit.
|
|
18241
18696
|
*/
|
|
18242
18697
|
|
|
18243
|
-
export { CLX_ADDON_BORDER, CLX_ADDON_TEXT, CLX_ALERT_OPTIONS, CLX_ALERT_RESOLVE, CLX_BG_ADDON, CLX_BG_DISABLED, CLX_BG_ICON_WRAP, CLX_BG_SECTION, CLX_BG_SURFACE, CLX_BORDER_DEFAULT, CLX_BORDER_DISABLED, CLX_BORDER_MEDIUM, CLX_COLOR_HEX, CLX_COLOR_HEX_100, CLX_COLOR_MAP, CLX_FONT_CATALOG, CLX_MODAL_ANIM_CONFIG, CLX_MODAL_DATA, CLX_MODAL_REF, CLX_OPTION_DISABLED, CLX_PLACEHOLDER, CLX_RADIO_GROUP, CLX_RADIUS_MAP, CLX_TEXT_BODY, CLX_TEXT_DISABLED, CLX_TEXT_HEADING, CLX_TEXT_HINT, CLX_TEXT_IDLE, CLX_TEXT_INPUT, CLX_TEXT_LABEL, CLX_TEXT_OPTION, CLX_TEXT_SUBTITLE, CLX_TEXT_TITLE, CLX_THEME_CONFIG, CLX_THEME_DEFAULTS, CLX_TOAST_DEFAULTS, ClxAlertComponent, ClxAlertService, ClxAnimateDirective, ClxAnimateGroupDirective, ClxAnimateService, ClxAppLayoutComponent, ClxAvatarComponent, ClxBadgeComponent, ClxBrandComponent, ClxButtonComponent, ClxButtonGroupComponent, ClxCardBodyDirective, ClxCardComponent, ClxCardFooterDirective, ClxCardHeaderActionsDirective, ClxCardHeaderDirective, ClxCarouselComponent, ClxCarouselDirective, ClxCartComponent, ClxCartSummaryDrawer, ClxCellDirective, ClxCheckboxComponent, ClxCollapseComponent, ClxColorPickerComponent, ClxColumnDefDirective, ClxDateRangePickerComponent, ClxDatepickerComponent, ClxDrawerComponent, ClxDrawerService, ClxEditorComponent, ClxEditorImageModalComponent, ClxEditorLinkModalComponent, ClxFabComponent, ClxFilterPanelComponent, ClxHeaderCellDirective, ClxIconComponent, ClxInputComponent, ClxListComponent, ClxListItemComponent, ClxMenuComponent, ClxMenuItemComponent, ClxMenuItemTrailingDirective, ClxModalComponent, ClxModalService, ClxNativeOverlayService, ClxNavGroupComponent, ClxNotificationComponent, ClxNumberComponent, ClxOtpComponent, ClxPageEmptyComponent, ClxPageHeaderComponent, ClxPageHeaderTitleDirective, ClxPageNotFoundComponent, ClxPageServerErrorComponent, ClxPageUnauthorizedComponent, ClxPaginationComponent, ClxProductComponent, ClxProductDetailComponent, ClxProductQuickViewComponent, ClxProfileComponent, ClxProgressBarComponent, ClxRadioComponent, ClxRadioGroupComponent, ClxRatingComponent, ClxSearchComponent, ClxSelectComponent, ClxSkeletonComponent, ClxSliderComponent, ClxSocialIconComponent, ClxSpinnerComponent, ClxStatCardComponent, ClxStepComponent, ClxStepperComponent, ClxSwitchComponent, ClxTabDirective, ClxTableActionsComponent, ClxTableComponent, ClxTabsComponent, ClxTagComponent, ClxTextareaComponent, ClxThemeService, ClxTimelineComponent, ClxTimelineItemComponent, ClxTimepickerComponent, ClxToastComponent, ClxToastContainerComponent, ClxToastService, ClxTooltipComponent, ClxTooltipDirective, ClxTreeComponent, ClxUploadComponent, ClxWishlistComponent, ClxWizardComponent, TIMEPICKER_SIZE_MAP, parseColorInput, provideCodexlyTheme, resolveColor, resolveContainerRadius, resolveRadius };
|
|
18698
|
+
export { CLX_ADDON_BORDER, CLX_ADDON_TEXT, CLX_ALERT_OPTIONS, CLX_ALERT_RESOLVE, CLX_BG_ADDON, CLX_BG_DISABLED, CLX_BG_ICON_WRAP, CLX_BG_SECTION, CLX_BG_SURFACE, CLX_BORDER_DEFAULT, CLX_BORDER_DISABLED, CLX_BORDER_MEDIUM, CLX_COLOR_HEX, CLX_COLOR_HEX_100, CLX_COLOR_MAP, CLX_FONT_CATALOG, CLX_MODAL_ANIM_CONFIG, CLX_MODAL_DATA, CLX_MODAL_REF, CLX_OPTION_DISABLED, CLX_PLACEHOLDER, CLX_RADIO_GROUP, CLX_RADIUS_MAP, CLX_TEXT_BODY, CLX_TEXT_DISABLED, CLX_TEXT_HEADING, CLX_TEXT_HINT, CLX_TEXT_IDLE, CLX_TEXT_INPUT, CLX_TEXT_LABEL, CLX_TEXT_OPTION, CLX_TEXT_SUBTITLE, CLX_TEXT_TITLE, CLX_THEME_CONFIG, CLX_THEME_DEFAULTS, CLX_TOAST_DEFAULTS, ClxAlertComponent, ClxAlertService, ClxAnimateDirective, ClxAnimateGroupDirective, ClxAnimateService, ClxAppLayoutComponent, ClxAvatarComponent, ClxBadgeComponent, ClxBrandComponent, ClxButtonComponent, ClxButtonGroupComponent, ClxCardBodyDirective, ClxCardComponent, ClxCardExpiryInputComponent, ClxCardFooterDirective, ClxCardHeaderActionsDirective, ClxCardHeaderDirective, ClxCardNumberInputComponent, ClxCardValidators, ClxCarouselComponent, ClxCarouselDirective, ClxCartComponent, ClxCartSummaryDrawer, ClxCellDirective, ClxCheckboxComponent, ClxCollapseComponent, ClxColorPickerComponent, ClxColumnDefDirective, ClxDateRangePickerComponent, ClxDatepickerComponent, ClxDrawerComponent, ClxDrawerService, ClxEditorComponent, ClxEditorImageModalComponent, ClxEditorLinkModalComponent, ClxFabComponent, ClxFilterPanelComponent, ClxHeaderCellDirective, ClxIconComponent, ClxInputComponent, ClxListComponent, ClxListItemComponent, ClxMenuComponent, ClxMenuItemComponent, ClxMenuItemTrailingDirective, ClxModalComponent, ClxModalService, ClxNativeOverlayService, ClxNavGroupComponent, ClxNotificationComponent, ClxNumberComponent, ClxOtpComponent, ClxPageEmptyComponent, ClxPageHeaderComponent, ClxPageHeaderTitleDirective, ClxPageNotFoundComponent, ClxPageServerErrorComponent, ClxPageUnauthorizedComponent, ClxPaginationComponent, ClxProductComponent, ClxProductDetailComponent, ClxProductQuickViewComponent, ClxProfileComponent, ClxProgressBarComponent, ClxRadioComponent, ClxRadioGroupComponent, ClxRatingComponent, ClxSearchComponent, ClxSelectComponent, ClxSkeletonComponent, ClxSliderComponent, ClxSocialIconComponent, ClxSpinnerComponent, ClxStatCardComponent, ClxStepComponent, ClxStepperComponent, ClxSwitchComponent, ClxTabDirective, ClxTableActionsComponent, ClxTableComponent, ClxTabsComponent, ClxTagComponent, ClxTextareaComponent, ClxThemeService, ClxTimelineComponent, ClxTimelineItemComponent, ClxTimepickerComponent, ClxToastComponent, ClxToastContainerComponent, ClxToastService, ClxTooltipComponent, ClxTooltipDirective, ClxTreeComponent, ClxUploadComponent, ClxWishlistComponent, ClxWizardComponent, TIMEPICKER_SIZE_MAP, detectClxCardBrand, isClxCardExpired, parseColorInput, provideCodexlyTheme, resolveColor, resolveContainerRadius, resolveRadius };
|
|
18244
18699
|
//# sourceMappingURL=codexly-ui.mjs.map
|