codexly-ui 0.12.35 → 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.
@@ -8676,6 +8676,103 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
8676
8676
  }]
8677
8677
  }] });
8678
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
+
8679
8776
  const EDITOR_SIZE_MAP = {
8680
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' },
8681
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' },
@@ -8881,6 +8978,7 @@ const TOOLBAR_GROUPS = [
8881
8978
  ],
8882
8979
  [
8883
8980
  { cmd: 'createLink', icon: 'link', title: 'Enlace' },
8981
+ { cmd: 'insertImage', icon: 'image', title: 'Imagen' },
8884
8982
  { cmd: 'removeFormat', icon: 'format_clear', title: 'Limpiar formato' },
8885
8983
  { cmd: 'undo', icon: 'undo', title: 'Deshacer' },
8886
8984
  { cmd: 'redo', icon: 'redo', title: 'Rehacer' },
@@ -8917,6 +9015,11 @@ class ClxEditorComponent {
8917
9015
  statusMessage = input('', ...(ngDevMode ? [{ debugName: "statusMessage" }] : /* istanbul ignore next */ []));
8918
9016
  hint = input('', ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
8919
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 */ []));
8920
9023
  // ── View ─────────────────────────────────────────────────────────────────
8921
9024
  _bodyEl;
8922
9025
  _sourceEl;
@@ -9070,6 +9173,10 @@ class ClxEditorComponent {
9070
9173
  this._openLinkModal();
9071
9174
  return;
9072
9175
  }
9176
+ if (cmd === 'insertImage') {
9177
+ this._openImageModal();
9178
+ return;
9179
+ }
9073
9180
  this._bodyEl.nativeElement.focus();
9074
9181
  this._restoreRange();
9075
9182
  document.execCommand(cmd, false, arg);
@@ -9110,6 +9217,27 @@ class ClxEditorComponent {
9110
9217
  this._tick.update(v => v + 1);
9111
9218
  });
9112
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
+ }
9113
9241
  // ── Range save/restore ────────────────────────────────────────────────────
9114
9242
  _saveRange() {
9115
9243
  const sel = window.getSelection();
@@ -9228,7 +9356,7 @@ class ClxEditorComponent {
9228
9356
  this._cdr.markForCheck();
9229
9357
  }
9230
9358
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9231
- 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: [
9232
9360
  {
9233
9361
  provide: NG_VALUE_ACCESSOR,
9234
9362
  useExisting: forwardRef(() => ClxEditorComponent),
@@ -9599,7 +9727,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
9599
9727
  <p [class]="_sizeCfg().hint + ' text-gray-400'">{{ hint() }}</p>
9600
9728
  }
9601
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"] }]
9602
- }], 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: [{
9603
9731
  type: ViewChild,
9604
9732
  args: ['bodyEl', { static: false }]
9605
9733
  }], _sourceEl: [{
@@ -17933,5 +18061,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
17933
18061
  * Generated bundle index. Do not edit.
17934
18062
  */
17935
18063
 
17936
- 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 };
17937
18065
  //# sourceMappingURL=codexly-ui.mjs.map