codexly-ui 0.12.29 → 0.12.31

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.
@@ -637,6 +637,19 @@ class ClxThemeService {
637
637
  underlineColor: t?.underlineColor ?? this._config().primaryColor,
638
638
  };
639
639
  }, ...(ngDevMode ? [{ debugName: "tabsStyle" }] : /* istanbul ignore next */ []));
640
+ /** Resolved style for ClxWizardComponent — activeTextColor/underlineColor (horizontal) and
641
+ * stepColor (vertical) each fall back to formControls.wizard (then primaryColor) independently
642
+ * when unset. Per-instance inputs on clx-wizard still take precedence over this theme-wide
643
+ * default. */
644
+ wizardStyle = computed(() => {
645
+ const t = this._config().wizard;
646
+ const fallback = this.formControlColor('wizard');
647
+ return {
648
+ activeTextColor: t?.activeTextColor ?? fallback,
649
+ underlineColor: t?.underlineColor ?? fallback,
650
+ stepColor: t?.stepColor ?? fallback,
651
+ };
652
+ }, ...(ngDevMode ? [{ debugName: "wizardStyle" }] : /* istanbul ignore next */ []));
640
653
  /** Resolved style for ClxNotificationComponent — severity colors fall back to built-in
641
654
  * green/amber/sky/red, unreadColor to primaryColor, borderColor to listBorderColor then
642
655
  * primaryColor, radius to the app-wide borderRadius. Per-instance inputs on clx-notification
@@ -9744,8 +9757,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
9744
9757
  class ClxWizardComponent {
9745
9758
  _themeSvc = inject(ClxThemeService);
9746
9759
  // ── Inputs ─────────────────────────────────────────────────────────────────
9760
+ /** Legacy single-color override — still the shared fallback for activeTextColor/underlineColor/
9761
+ * stepColor when none of those is set, same convention as clx-tabs' own clxColor. */
9747
9762
  color = input(undefined, ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
9748
9763
  _color = computed(() => this.color() ?? this._themeSvc.formControlColor('wizard'), ...(ngDevMode ? [{ debugName: "_color" }] : /* istanbul ignore next */ []));
9764
+ /** Horizontal only — active step label/icon color in the clx-tabs indicator. Falls back to
9765
+ * `color`, then the theme's wizard.activeTextColor (then formControls.wizard/primaryColor). */
9766
+ activeTextColor = input(undefined, ...(ngDevMode ? [{ debugName: "activeTextColor" }] : /* istanbul ignore next */ []));
9767
+ /** Horizontal only — active step's bottom underline color, independent of activeTextColor.
9768
+ * Falls back to `color`, then the theme's wizard.underlineColor. */
9769
+ underlineColor = input(undefined, ...(ngDevMode ? [{ debugName: "underlineColor" }] : /* istanbul ignore next */ []));
9770
+ /** Vertical only — completed/active step circle + connector fill color. Falls back to `color`,
9771
+ * then the theme's wizard.stepColor. */
9772
+ stepColor = input(undefined, ...(ngDevMode ? [{ debugName: "stepColor" }] : /* istanbul ignore next */ []));
9773
+ _style = this._themeSvc.wizardStyle;
9774
+ _activeTextColor = computed(() => this.activeTextColor() ?? this.color() ?? this._style().activeTextColor, ...(ngDevMode ? [{ debugName: "_activeTextColor" }] : /* istanbul ignore next */ []));
9775
+ _underlineColor = computed(() => this.underlineColor() ?? this.color() ?? this._style().underlineColor, ...(ngDevMode ? [{ debugName: "_underlineColor" }] : /* istanbul ignore next */ []));
9776
+ _stepColor = computed(() => this.stepColor() ?? this.color() ?? this._style().stepColor, ...(ngDevMode ? [{ debugName: "_stepColor" }] : /* istanbul ignore next */ []));
9749
9777
  orientation = input('horizontal', ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
9750
9778
  linear = input(true, ...(ngDevMode ? [{ debugName: "linear" }] : /* istanbul ignore next */ []));
9751
9779
  prevLabel = input('Anterior', ...(ngDevMode ? [{ debugName: "prevLabel" }] : /* istanbul ignore next */ []));
@@ -9780,7 +9808,7 @@ class ClxWizardComponent {
9780
9808
  const step = this._steps[this._currentIndex()];
9781
9809
  return step ? step.isValid() : true;
9782
9810
  }, ...(ngDevMode ? [{ debugName: "_currentStepValid" }] : /* istanbul ignore next */ []));
9783
- _connectorFillColor = computed(() => resolveColor(this._color()).bg, ...(ngDevMode ? [{ debugName: "_connectorFillColor" }] : /* istanbul ignore next */ []));
9811
+ _connectorFillColor = computed(() => resolveColor(this._stepColor()).bg, ...(ngDevMode ? [{ debugName: "_connectorFillColor" }] : /* istanbul ignore next */ []));
9784
9812
  _currentIndexStr = computed(() => String(this._currentIndex()), ...(ngDevMode ? [{ debugName: "_currentIndexStr" }] : /* istanbul ignore next */ []));
9785
9813
  _tabItems = computed(() => this._steps.map((step, i) => ({
9786
9814
  id: String(i),
@@ -9847,7 +9875,7 @@ class ClxWizardComponent {
9847
9875
  _circleClass(i) {
9848
9876
  const base = 'relative z-10 flex items-center justify-center w-9 h-9 rounded-full transition-colors duration-200 shrink-0 focus:outline-none';
9849
9877
  const status = this._stepStatus(i);
9850
- const color = this._color();
9878
+ const color = this._stepColor();
9851
9879
  const ptr = !this._isTabDisabled(i) ? 'cursor-pointer' : 'cursor-default';
9852
9880
  const t = resolveColor(color);
9853
9881
  if (status === 'completed')
@@ -9859,14 +9887,15 @@ class ClxWizardComponent {
9859
9887
  return `${base} border-2 border-clx-border text-clx-text-subtle bg-clx-surface ${ptr}`;
9860
9888
  }
9861
9889
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxWizardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9862
- 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 }, 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: `
9890
+ 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: `
9863
9891
  <div [class]="_rootClass()">
9864
9892
 
9865
9893
  <!-- ══ HORIZONTAL: clx-tabs indicator ═══════════════════════════════ -->
9866
9894
  @if (orientation() === 'horizontal') {
9867
9895
  <clx-tabs
9868
9896
  [tabs]="_tabItems()"
9869
- [clxColor]="_color()"
9897
+ [activeTextColor]="_activeTextColor()"
9898
+ [underlineColor]="_underlineColor()"
9870
9899
  [activeTab]="_currentIndexStr()"
9871
9900
  (activeTabChange)="_onTabChange($event)"
9872
9901
  />
@@ -9974,7 +10003,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
9974
10003
  @if (orientation() === 'horizontal') {
9975
10004
  <clx-tabs
9976
10005
  [tabs]="_tabItems()"
9977
- [clxColor]="_color()"
10006
+ [activeTextColor]="_activeTextColor()"
10007
+ [underlineColor]="_underlineColor()"
9978
10008
  [activeTab]="_currentIndexStr()"
9979
10009
  (activeTabChange)="_onTabChange($event)"
9980
10010
  />
@@ -10072,7 +10102,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
10072
10102
  </div>
10073
10103
  </div>
10074
10104
  `, 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"] }]
10075
- }], propDecorators: { color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", 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: [{
10105
+ }], 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: [{
10076
10106
  type: ContentChildren,
10077
10107
  args: [ClxStepComponent]
10078
10108
  }] } });
@@ -13484,21 +13514,21 @@ class ClxFilterPanelComponent {
13484
13514
  </clx-radio-group>
13485
13515
  }
13486
13516
 
13487
- <!-- Range slider — min -->
13517
+ <!-- Range — min/max -->
13488
13518
  @if (field.type === 'range') {
13489
13519
  @let rv = _getRangeValue(field);
13490
- <div class="space-y-3">
13491
- <clx-slider
13492
- [label]="'Mín: ' + (field.unit ?? '') + rv.min"
13493
- [activeColor]="_color()"
13494
- [min]="field.min ?? 0" [max]="field.max ?? 100" [step]="field.step ?? 1"
13520
+ <div class="grid grid-cols-2 gap-2">
13521
+ <clx-number
13522
+ [label]="'Mín' + (field.unit ? ' (' + field.unit + ')' : '')"
13523
+ [color]="_color()"
13524
+ [min]="field.min ?? null" [max]="field.max ?? null" [step]="field.step ?? 1"
13495
13525
  [ngModel]="rv.min"
13496
13526
  (ngModelChange)="_setRange(field.key, $event, rv.max, field)"
13497
13527
  size="sm" />
13498
- <clx-slider
13499
- [label]="'Máx: ' + (field.unit ?? '') + rv.max"
13500
- [activeColor]="_color()"
13501
- [min]="field.min ?? 0" [max]="field.max ?? 100" [step]="field.step ?? 1"
13528
+ <clx-number
13529
+ [label]="'Máx' + (field.unit ? ' (' + field.unit + ')' : '')"
13530
+ [color]="_color()"
13531
+ [min]="field.min ?? null" [max]="field.max ?? null" [step]="field.step ?? 1"
13502
13532
  [ngModel]="rv.max"
13503
13533
  (ngModelChange)="_setRange(field.key, rv.min, $event, field)"
13504
13534
  size="sm" />
@@ -13532,14 +13562,14 @@ class ClxFilterPanelComponent {
13532
13562
  </div>
13533
13563
  }
13534
13564
  }
13535
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClxIconComponent, selector: "span[clx-icon]", inputs: ["name", "size", "color", "fill"] }, { kind: "component", type: ClxButtonComponent, selector: "button[clx-button], a[clx-button]", inputs: ["variant", "color", "emphasis", "textColor", "size", "shape", "loading", "disabled", "block", "icon", "iconPosition", "iconOnly", "badge", "badgeColor"] }, { kind: "component", type: ClxCheckboxComponent, selector: "clx-checkbox", inputs: ["color", "variant", "size", "label", "value", "disabled"] }, { kind: "component", type: ClxSliderComponent, selector: "clx-slider", inputs: ["label", "hint", "errorMessage", "activeColor", "size", "min", "max", "step", "showTooltip", "showMinMax", "marks", "disabled"] }, { kind: "component", type: ClxRadioGroupComponent, selector: "clx-radio-group", inputs: ["color", "variant", "size", "direction", "disabled"] }, { kind: "component", type: ClxRadioComponent, selector: "clx-radio", inputs: ["value", "label", "color", "variant", "size"] }, { kind: "component", type: ClxSelectComponent, selector: "clx-select", inputs: ["label", "placeholder", "options", "multiple", "searchable", "searchPlaceholder", "activeColor", "size", "hint", "errorMessage", "disabled", "async", "loadOptions", "debounceMs", "minChars"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
13565
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ClxIconComponent, selector: "span[clx-icon]", inputs: ["name", "size", "color", "fill"] }, { kind: "component", type: ClxButtonComponent, selector: "button[clx-button], a[clx-button]", inputs: ["variant", "color", "emphasis", "textColor", "size", "shape", "loading", "disabled", "block", "icon", "iconPosition", "iconOnly", "badge", "badgeColor"] }, { kind: "component", type: ClxCheckboxComponent, selector: "clx-checkbox", inputs: ["color", "variant", "size", "label", "value", "disabled"] }, { kind: "component", type: ClxNumberComponent, selector: "clx-number", inputs: ["variant", "size", "color", "label", "placeholder", "hint", "prefixIcon", "min", "max", "step", "value", "disabled"] }, { kind: "component", type: ClxRadioGroupComponent, selector: "clx-radio-group", inputs: ["color", "variant", "size", "direction", "disabled"] }, { kind: "component", type: ClxRadioComponent, selector: "clx-radio", inputs: ["value", "label", "color", "variant", "size"] }, { kind: "component", type: ClxSelectComponent, selector: "clx-select", inputs: ["label", "placeholder", "options", "multiple", "searchable", "searchPlaceholder", "activeColor", "size", "hint", "errorMessage", "disabled", "async", "loadOptions", "debounceMs", "minChars"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
13536
13566
  }
13537
13567
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxFilterPanelComponent, decorators: [{
13538
13568
  type: Component,
13539
13569
  args: [{
13540
13570
  selector: 'clx-filter-panel',
13541
13571
  standalone: true,
13542
- imports: [FormsModule, ClxIconComponent, ClxButtonComponent, ClxCheckboxComponent, ClxSliderComponent, ClxRadioGroupComponent, ClxRadioComponent, ClxSelectComponent],
13572
+ imports: [FormsModule, ClxIconComponent, ClxButtonComponent, ClxCheckboxComponent, ClxNumberComponent, ClxRadioGroupComponent, ClxRadioComponent, ClxSelectComponent],
13543
13573
  template: `
13544
13574
  <!-- Header -->
13545
13575
  <div [class]="_headerClass()" (click)="collapsible() ? _togglePanel() : null">
@@ -13625,21 +13655,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
13625
13655
  </clx-radio-group>
13626
13656
  }
13627
13657
 
13628
- <!-- Range slider — min -->
13658
+ <!-- Range — min/max -->
13629
13659
  @if (field.type === 'range') {
13630
13660
  @let rv = _getRangeValue(field);
13631
- <div class="space-y-3">
13632
- <clx-slider
13633
- [label]="'Mín: ' + (field.unit ?? '') + rv.min"
13634
- [activeColor]="_color()"
13635
- [min]="field.min ?? 0" [max]="field.max ?? 100" [step]="field.step ?? 1"
13661
+ <div class="grid grid-cols-2 gap-2">
13662
+ <clx-number
13663
+ [label]="'Mín' + (field.unit ? ' (' + field.unit + ')' : '')"
13664
+ [color]="_color()"
13665
+ [min]="field.min ?? null" [max]="field.max ?? null" [step]="field.step ?? 1"
13636
13666
  [ngModel]="rv.min"
13637
13667
  (ngModelChange)="_setRange(field.key, $event, rv.max, field)"
13638
13668
  size="sm" />
13639
- <clx-slider
13640
- [label]="'Máx: ' + (field.unit ?? '') + rv.max"
13641
- [activeColor]="_color()"
13642
- [min]="field.min ?? 0" [max]="field.max ?? 100" [step]="field.step ?? 1"
13669
+ <clx-number
13670
+ [label]="'Máx' + (field.unit ? ' (' + field.unit + ')' : '')"
13671
+ [color]="_color()"
13672
+ [min]="field.min ?? null" [max]="field.max ?? null" [step]="field.step ?? 1"
13643
13673
  [ngModel]="rv.max"
13644
13674
  (ngModelChange)="_setRange(field.key, rv.min, $event, field)"
13645
13675
  size="sm" />