codexly-ui 0.12.34 → 0.12.36

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.
@@ -664,7 +664,13 @@ class ClxThemeService {
664
664
  error: n?.severityColors?.error ?? this._config().dangerColor,
665
665
  },
666
666
  unreadColor: n?.unreadColor ?? this._config().primaryColor,
667
- tabsColor: n?.tabsColor ?? this._config().primaryColor,
667
+ // Falls back to the general "Pestañas" theme (tabs.activeTextColor/underlineColor) before
668
+ // primaryColor — the notification panel's own Todas/Sin leer tabs are still clx-tabs under
669
+ // the hood, so they should read the same theming a host already configured for every other
670
+ // clx-tabs instance, unless notification.tabsColor/activeTextColor/underlineColor override
671
+ // it specifically.
672
+ tabsColor: n?.tabsColor ?? this.tabsStyle().activeTextColor,
673
+ tabsUnderlineColor: n?.tabsUnderlineColor ?? this.tabsStyle().underlineColor,
668
674
  size: n?.size ?? 'md',
669
675
  border: n?.border ?? true,
670
676
  borderColor: n?.borderColor ?? this._config().listBorderColor ?? this._config().primaryColor,
@@ -8670,6 +8676,103 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
8670
8676
  }]
8671
8677
  }] });
8672
8678
 
8679
+ /** Generic "insert image by URL" fallback for clx-editor's image button — used only when the host
8680
+ * app doesn't provide its own imagePicker() (see ClxEditorComponent), since this library has no
8681
+ * way to reach an app-specific catalog/media backend itself. */
8682
+ class ClxEditorImageModalComponent {
8683
+ _modalRef = inject(CLX_MODAL_REF, { optional: true });
8684
+ _themeSvc = inject(ClxThemeService);
8685
+ _primaryColor = computed(() => this._themeSvc.config().primaryColor, ...(ngDevMode ? [{ debugName: "_primaryColor" }] : /* istanbul ignore next */ []));
8686
+ _form = new FormGroup({
8687
+ url: new FormControl('', { nonNullable: true, validators: [Validators.required, Validators.pattern(/^https?:\/\/.+/)] }),
8688
+ alt: new FormControl('', { nonNullable: true }),
8689
+ });
8690
+ _urlInvalid = signal(false, ...(ngDevMode ? [{ debugName: "_urlInvalid" }] : /* istanbul ignore next */ []));
8691
+ _confirm() {
8692
+ const url = this._form.controls.url.value.trim();
8693
+ const alt = this._form.controls.alt.value.trim();
8694
+ if (!url || this._form.controls.url.invalid) {
8695
+ this._urlInvalid.set(true);
8696
+ return;
8697
+ }
8698
+ this._modalRef?.close({ url, alt });
8699
+ }
8700
+ _cancel() {
8701
+ this._modalRef?.close(undefined);
8702
+ }
8703
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxEditorImageModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8704
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.15", type: ClxEditorImageModalComponent, isStandalone: true, selector: "clx-editor-image-modal", ngImport: i0, template: `
8705
+ <clx-modal
8706
+ size="sm"
8707
+ [confirmButton]="{ text: 'Insertar', color: _primaryColor() }"
8708
+ [cancelButton]="{ text: 'Cancelar', color: 'slate', variant: 'ghost' }"
8709
+ [showCancelButton]="true"
8710
+ (confirmClick)="_confirm()"
8711
+ (cancelClick)="_cancel()">
8712
+
8713
+ <span clx-modal-title class="text-base font-semibold text-clx-text-label">
8714
+ Insertar imagen
8715
+ </span>
8716
+
8717
+ <form [formGroup]="_form" class="space-y-4" (ngSubmit)="_confirm()">
8718
+ <clx-input
8719
+ label="URL de la imagen"
8720
+ placeholder="https://ejemplo.com/imagen.jpg"
8721
+ formControlName="url"
8722
+ [status]="_urlInvalid() ? 'error' : 'default'"
8723
+ statusMessage="Ingresa una URL válida">
8724
+ </clx-input>
8725
+ <clx-input
8726
+ label="Texto alternativo"
8727
+ placeholder="Descripción de la imagen"
8728
+ formControlName="alt">
8729
+ </clx-input>
8730
+ </form>
8731
+
8732
+ </clx-modal>
8733
+ `, isInline: true, dependencies: [{ kind: "component", type: ClxModalComponent, selector: "clx-modal", inputs: ["size", "showClose", "confirmButton", "cancelButton", "showCancelButton"], outputs: ["confirmClick", "cancelClick"] }, { kind: "component", type: ClxInputComponent, selector: "clx-input", inputs: ["label", "placeholder", "type", "color", "hint", "prefixIcon", "suffixIcon", "prefixText", "suffixText", "status", "statusMessage", "size", "value", "disabled", "autocomplete"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
8734
+ }
8735
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxEditorImageModalComponent, decorators: [{
8736
+ type: Component,
8737
+ args: [{
8738
+ selector: 'clx-editor-image-modal',
8739
+ standalone: true,
8740
+ imports: [ClxModalComponent, ClxInputComponent, ReactiveFormsModule],
8741
+ encapsulation: ViewEncapsulation.None,
8742
+ changeDetection: ChangeDetectionStrategy.OnPush,
8743
+ template: `
8744
+ <clx-modal
8745
+ size="sm"
8746
+ [confirmButton]="{ text: 'Insertar', color: _primaryColor() }"
8747
+ [cancelButton]="{ text: 'Cancelar', color: 'slate', variant: 'ghost' }"
8748
+ [showCancelButton]="true"
8749
+ (confirmClick)="_confirm()"
8750
+ (cancelClick)="_cancel()">
8751
+
8752
+ <span clx-modal-title class="text-base font-semibold text-clx-text-label">
8753
+ Insertar imagen
8754
+ </span>
8755
+
8756
+ <form [formGroup]="_form" class="space-y-4" (ngSubmit)="_confirm()">
8757
+ <clx-input
8758
+ label="URL de la imagen"
8759
+ placeholder="https://ejemplo.com/imagen.jpg"
8760
+ formControlName="url"
8761
+ [status]="_urlInvalid() ? 'error' : 'default'"
8762
+ statusMessage="Ingresa una URL válida">
8763
+ </clx-input>
8764
+ <clx-input
8765
+ label="Texto alternativo"
8766
+ placeholder="Descripción de la imagen"
8767
+ formControlName="alt">
8768
+ </clx-input>
8769
+ </form>
8770
+
8771
+ </clx-modal>
8772
+ `,
8773
+ }]
8774
+ }] });
8775
+
8673
8776
  const EDITOR_SIZE_MAP = {
8674
8777
  sm: { minH: 'min-h-[120px]', maxH: 'max-h-[200px]', text: 'text-sm', label: 'text-xs font-medium', hint: 'text-xs', toolbar: 'p-1 gap-0.5' },
8675
8778
  md: { minH: 'min-h-[180px]', maxH: 'max-h-[320px]', text: 'text-sm', label: 'text-sm font-medium', hint: 'text-xs', toolbar: 'p-1.5 gap-0.5' },
@@ -8875,6 +8978,7 @@ const TOOLBAR_GROUPS = [
8875
8978
  ],
8876
8979
  [
8877
8980
  { cmd: 'createLink', icon: 'link', title: 'Enlace' },
8981
+ { cmd: 'insertImage', icon: 'image', title: 'Imagen' },
8878
8982
  { cmd: 'removeFormat', icon: 'format_clear', title: 'Limpiar formato' },
8879
8983
  { cmd: 'undo', icon: 'undo', title: 'Deshacer' },
8880
8984
  { cmd: 'redo', icon: 'redo', title: 'Rehacer' },
@@ -8911,6 +9015,11 @@ class ClxEditorComponent {
8911
9015
  statusMessage = input('', ...(ngDevMode ? [{ debugName: "statusMessage" }] : /* istanbul ignore next */ []));
8912
9016
  hint = input('', ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
8913
9017
  disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
9018
+ /** Overrides the toolbar's Image button: when provided, clicking it calls this instead of
9019
+ * opening the generic "insert by URL" modal (ClxEditorImageModalComponent) — lets a host app
9020
+ * plug in its own picker (e.g. an ERP's product/variant image browser) without this library
9021
+ * needing to know about that app's catalog backend. Resolve to undefined/null to cancel. */
9022
+ imagePicker = input(undefined, ...(ngDevMode ? [{ debugName: "imagePicker" }] : /* istanbul ignore next */ []));
8914
9023
  // ── View ─────────────────────────────────────────────────────────────────
8915
9024
  _bodyEl;
8916
9025
  _sourceEl;
@@ -9064,6 +9173,10 @@ class ClxEditorComponent {
9064
9173
  this._openLinkModal();
9065
9174
  return;
9066
9175
  }
9176
+ if (cmd === 'insertImage') {
9177
+ this._openImageModal();
9178
+ return;
9179
+ }
9067
9180
  this._bodyEl.nativeElement.focus();
9068
9181
  this._restoreRange();
9069
9182
  document.execCommand(cmd, false, arg);
@@ -9104,6 +9217,27 @@ class ClxEditorComponent {
9104
9217
  this._tick.update(v => v + 1);
9105
9218
  });
9106
9219
  }
9220
+ // ── Image insert ──────────────────────────────────────────────────────────
9221
+ _openImageModal() {
9222
+ this._saveRange();
9223
+ const picker = this.imagePicker();
9224
+ const insert = (result) => {
9225
+ if (!result?.url)
9226
+ return;
9227
+ this._restoreRange();
9228
+ this._bodyEl.nativeElement.focus();
9229
+ const alt = (result.alt ?? '').replace(/"/g, '&quot;');
9230
+ document.execCommand('insertHTML', false, `<img src="${result.url}" alt="${alt}" style="max-width:100%;height:auto;" />`);
9231
+ this._emitChange();
9232
+ this._tick.update(v => v + 1);
9233
+ };
9234
+ if (picker) {
9235
+ picker().then(insert);
9236
+ return;
9237
+ }
9238
+ const ref = this._modal.open(ClxEditorImageModalComponent, { size: 'sm' });
9239
+ ref.afterClosed().then((result) => insert(result));
9240
+ }
9107
9241
  // ── Range save/restore ────────────────────────────────────────────────────
9108
9242
  _saveRange() {
9109
9243
  const sel = window.getSelection();
@@ -9222,7 +9356,7 @@ class ClxEditorComponent {
9222
9356
  this._cdr.markForCheck();
9223
9357
  }
9224
9358
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9225
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxEditorComponent, isStandalone: true, selector: "clx-editor", 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 }, size: { classPropertyName: "size", publicName: "size", 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 }, hint: { classPropertyName: "hint", publicName: "hint", 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: [
9359
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxEditorComponent, isStandalone: true, selector: "clx-editor", 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 }, size: { classPropertyName: "size", publicName: "size", 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 }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, imagePicker: { classPropertyName: "imagePicker", publicName: "imagePicker", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "flex flex-col gap-1.5" }, providers: [
9226
9360
  {
9227
9361
  provide: NG_VALUE_ACCESSOR,
9228
9362
  useExisting: forwardRef(() => ClxEditorComponent),
@@ -9593,7 +9727,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
9593
9727
  <p [class]="_sizeCfg().hint + ' text-gray-400'">{{ hint() }}</p>
9594
9728
  }
9595
9729
  `, host: { class: 'flex flex-col gap-1.5' }, styles: [".clx-editor-body:empty:before{content:attr(data-placeholder);color:#9ca3af;pointer-events:none}.clx-editor-body:focus{outline:none}.clx-editor-body p{margin:0 0 .4em}.clx-editor-body p:last-child{margin-bottom:0}.clx-editor-body h1{font-size:1.5em;font-weight:700;margin:.5em 0}.clx-editor-body h2{font-size:1.25em;font-weight:600;margin:.5em 0}.clx-editor-body h3{font-size:1.1em;font-weight:600;margin:.5em 0}.clx-editor-body ul,.clx-editor-body ol{padding-left:1.5em;margin:.35em 0}.clx-editor-body li{margin:.1em 0}.clx-editor-body blockquote{border-left:3px solid #e2e8f0;padding-left:.75em;color:#64748b;margin:.4em 0}.clx-editor-body code{background:#f1f5f9;border-radius:3px;padding:.1em .3em;font-size:.875em;font-family:ui-monospace,monospace}.clx-editor-body a{color:#6366f1;text-decoration:underline}.clx-editor-body hr{border:none;border-top:1px solid #e2e8f0;margin:.6em 0}.clx-editor-color-btn{position:relative;overflow:hidden}.clx-editor-color-btn input[type=color]{position:absolute;inset:0;opacity:0;width:100%;height:100%;cursor:pointer;border:none;padding:0}.clx-editor-toolbar-select clx-select .flex.flex-col{gap:0!important}.clx-editor-source{width:100%;resize:none;border:none;outline:none;background:#0f172a;color:#e2e8f0;font-family:ui-monospace,Cascadia Code,Fira Code,monospace;font-size:.8125rem;line-height:1.6;padding:1rem;tab-size:2}\n"] }]
9596
- }], ctorParameters: () => [], 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 }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], statusMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "statusMessage", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], _bodyEl: [{
9730
+ }], ctorParameters: () => [], 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 }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], statusMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "statusMessage", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], imagePicker: [{ type: i0.Input, args: [{ isSignal: true, alias: "imagePicker", required: false }] }], _bodyEl: [{
9597
9731
  type: ViewChild,
9598
9732
  args: ['bodyEl', { static: false }]
9599
9733
  }], _sourceEl: [{
@@ -11460,9 +11594,14 @@ class ClxNotificationComponent {
11460
11594
  * primaryColor) when unset. */
11461
11595
  badgeColor = input(undefined, ...(ngDevMode ? [{ debugName: "badgeColor" }] : /* istanbul ignore next */ []));
11462
11596
  // ── Panel accents — independent from the bell button's own color. ──────────────────────────
11463
- /** clx-tabs (Todas/Sin leer/...) + "Marcar todo leído" link accent — falls back to the theme's
11464
- * notification.tabsColor (then primaryColor) when unset. */
11597
+ /** clx-tabs (Todas/Sin leer/...) active tab text/icon color + "Marcar todo leído" link accent —
11598
+ * falls back to the theme's notification.tabsColor (which itself falls back to the general
11599
+ * "Pestañas" theme's tabs.activeTextColor, then primaryColor) when unset. */
11465
11600
  tabsColor = input(undefined, ...(ngDevMode ? [{ debugName: "tabsColor" }] : /* istanbul ignore next */ []));
11601
+ /** clx-tabs underline color, independent of tabsColor — falls back to the theme's
11602
+ * notification.tabsUnderlineColor (which itself falls back to tabs.underlineColor, then
11603
+ * primaryColor) when unset. */
11604
+ tabsUnderlineColor = input(undefined, ...(ngDevMode ? [{ debugName: "tabsUnderlineColor" }] : /* istanbul ignore next */ []));
11466
11605
  /** Whether the floating panel shows its outer border — falls back to the theme's
11467
11606
  * notification.border (then true) when unset. */
11468
11607
  border = input(undefined, ...(ngDevMode ? [{ debugName: "border" }] : /* istanbul ignore next */ []));
@@ -11477,6 +11616,7 @@ class ClxNotificationComponent {
11477
11616
  _buttonColor = computed(() => this.buttonColor() ?? this._themeSvc.config().primaryColor, ...(ngDevMode ? [{ debugName: "_buttonColor" }] : /* istanbul ignore next */ []));
11478
11617
  _badgeColor = computed(() => this.badgeColor() ?? this._style().unreadColor, ...(ngDevMode ? [{ debugName: "_badgeColor" }] : /* istanbul ignore next */ []));
11479
11618
  _tabsColor = computed(() => this.tabsColor() ?? this._style().tabsColor, ...(ngDevMode ? [{ debugName: "_tabsColor" }] : /* istanbul ignore next */ []));
11619
+ _tabsUnderlineColor = computed(() => this.tabsUnderlineColor() ?? this._style().tabsUnderlineColor, ...(ngDevMode ? [{ debugName: "_tabsUnderlineColor" }] : /* istanbul ignore next */ []));
11480
11620
  _border = computed(() => this.border() ?? this._style().border, ...(ngDevMode ? [{ debugName: "_border" }] : /* istanbul ignore next */ []));
11481
11621
  _borderColor = computed(() => this.borderColor() ?? this._style().borderColor, ...(ngDevMode ? [{ debugName: "_borderColor" }] : /* istanbul ignore next */ []));
11482
11622
  // ── CDK Overlay ─────────────────────────────────────────────────────────────
@@ -11574,7 +11714,7 @@ class ClxNotificationComponent {
11574
11714
  return new Date(iso).toLocaleTimeString('es-CO', { hour: '2-digit', minute: '2-digit' });
11575
11715
  }
11576
11716
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxNotificationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11577
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxNotificationComponent, isStandalone: true, selector: "clx-notification", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, categoryTab: { classPropertyName: "categoryTab", publicName: "categoryTab", isSignal: true, isRequired: false, transformFunction: null }, buttonColor: { classPropertyName: "buttonColor", publicName: "buttonColor", isSignal: true, isRequired: false, transformFunction: null }, buttonVariant: { classPropertyName: "buttonVariant", publicName: "buttonVariant", isSignal: true, isRequired: false, transformFunction: null }, buttonSize: { classPropertyName: "buttonSize", publicName: "buttonSize", isSignal: true, isRequired: false, transformFunction: null }, buttonIcon: { classPropertyName: "buttonIcon", publicName: "buttonIcon", isSignal: true, isRequired: false, transformFunction: null }, badgeColor: { classPropertyName: "badgeColor", publicName: "badgeColor", isSignal: true, isRequired: false, transformFunction: null }, tabsColor: { classPropertyName: "tabsColor", publicName: "tabsColor", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, borderColor: { classPropertyName: "borderColor", publicName: "borderColor", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", markRead: "markRead", markAllRead: "markAllRead", delete: "delete", deleteAllRead: "deleteAllRead" }, host: { classAttribute: "relative inline-flex items-center" }, ngImport: i0, template: `
11717
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxNotificationComponent, isStandalone: true, selector: "clx-notification", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, categoryTab: { classPropertyName: "categoryTab", publicName: "categoryTab", isSignal: true, isRequired: false, transformFunction: null }, buttonColor: { classPropertyName: "buttonColor", publicName: "buttonColor", isSignal: true, isRequired: false, transformFunction: null }, buttonVariant: { classPropertyName: "buttonVariant", publicName: "buttonVariant", isSignal: true, isRequired: false, transformFunction: null }, buttonSize: { classPropertyName: "buttonSize", publicName: "buttonSize", isSignal: true, isRequired: false, transformFunction: null }, buttonIcon: { classPropertyName: "buttonIcon", publicName: "buttonIcon", isSignal: true, isRequired: false, transformFunction: null }, badgeColor: { classPropertyName: "badgeColor", publicName: "badgeColor", isSignal: true, isRequired: false, transformFunction: null }, tabsColor: { classPropertyName: "tabsColor", publicName: "tabsColor", isSignal: true, isRequired: false, transformFunction: null }, tabsUnderlineColor: { classPropertyName: "tabsUnderlineColor", publicName: "tabsUnderlineColor", isSignal: true, isRequired: false, transformFunction: null }, border: { classPropertyName: "border", publicName: "border", isSignal: true, isRequired: false, transformFunction: null }, borderColor: { classPropertyName: "borderColor", publicName: "borderColor", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick", markRead: "markRead", markAllRead: "markAllRead", delete: "delete", deleteAllRead: "deleteAllRead" }, host: { classAttribute: "relative inline-flex items-center" }, ngImport: i0, template: `
11578
11718
  <!-- Trigger -->
11579
11719
  <button clx-button
11580
11720
  #origin="cdkOverlayOrigin"
@@ -11621,7 +11761,8 @@ class ClxNotificationComponent {
11621
11761
 
11622
11762
  <!-- Tabs -->
11623
11763
  <div class="px-4">
11624
- <clx-tabs [tabs]="_tabs()" [(activeTab)]="_filter" [clxColor]="_tabsColor()" />
11764
+ <clx-tabs [tabs]="_tabs()" [(activeTab)]="_filter"
11765
+ [activeTextColor]="_tabsColor()" [underlineColor]="_tabsUnderlineColor()" />
11625
11766
  </div>
11626
11767
 
11627
11768
  <!-- List -->
@@ -11735,7 +11876,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
11735
11876
 
11736
11877
  <!-- Tabs -->
11737
11878
  <div class="px-4">
11738
- <clx-tabs [tabs]="_tabs()" [(activeTab)]="_filter" [clxColor]="_tabsColor()" />
11879
+ <clx-tabs [tabs]="_tabs()" [(activeTab)]="_filter"
11880
+ [activeTextColor]="_tabsColor()" [underlineColor]="_tabsUnderlineColor()" />
11739
11881
  </div>
11740
11882
 
11741
11883
  <!-- List -->
@@ -11799,7 +11941,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
11799
11941
  changeDetection: ChangeDetectionStrategy.OnPush,
11800
11942
  host: { class: 'relative inline-flex items-center' },
11801
11943
  }]
11802
- }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], categoryTab: [{ type: i0.Input, args: [{ isSignal: true, alias: "categoryTab", required: false }] }], buttonColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonColor", required: false }] }], buttonVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonVariant", required: false }] }], buttonSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonSize", required: false }] }], buttonIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonIcon", required: false }] }], badgeColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeColor", required: false }] }], tabsColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabsColor", required: false }] }], border: [{ type: i0.Input, args: [{ isSignal: true, alias: "border", required: false }] }], borderColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "borderColor", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], markRead: [{ type: i0.Output, args: ["markRead"] }], markAllRead: [{ type: i0.Output, args: ["markAllRead"] }], delete: [{ type: i0.Output, args: ["delete"] }], deleteAllRead: [{ type: i0.Output, args: ["deleteAllRead"] }] } });
11944
+ }], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], categoryTab: [{ type: i0.Input, args: [{ isSignal: true, alias: "categoryTab", required: false }] }], buttonColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonColor", required: false }] }], buttonVariant: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonVariant", required: false }] }], buttonSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonSize", required: false }] }], buttonIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonIcon", required: false }] }], badgeColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "badgeColor", required: false }] }], tabsColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabsColor", required: false }] }], tabsUnderlineColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabsUnderlineColor", required: false }] }], border: [{ type: i0.Input, args: [{ isSignal: true, alias: "border", required: false }] }], borderColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "borderColor", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }], markRead: [{ type: i0.Output, args: ["markRead"] }], markAllRead: [{ type: i0.Output, args: ["markAllRead"] }], delete: [{ type: i0.Output, args: ["delete"] }], deleteAllRead: [{ type: i0.Output, args: ["deleteAllRead"] }] } });
11803
11945
 
11804
11946
  // ─── CDK overlay token (carries the resolved ref into the component) ──────────
11805
11947
  const CLX_ALERT_OPTIONS = new InjectionToken('CLX_ALERT_OPTIONS');
@@ -17919,5 +18061,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
17919
18061
  * Generated bundle index. Do not edit.
17920
18062
  */
17921
18063
 
17922
- 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, 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 };
18064
+ 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 };
17923
18065
  //# sourceMappingURL=codexly-ui.mjs.map