codexly-ui 0.22.0 → 0.22.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codexly-ui",
3
- "version": "0.22.0",
3
+ "version": "0.22.1",
4
4
  "description": "Standalone, signal-based Angular UI component library for Codexly, styled with Tailwind CSS.",
5
5
  "keywords": [
6
6
  "angular",
@@ -1184,6 +1184,8 @@ declare class ClxSelectComponent implements ControlValueAccessor {
1184
1184
  readonly hint: _angular_core.InputSignal<string>;
1185
1185
  readonly errorMessage: _angular_core.InputSignal<string>;
1186
1186
  readonly disabled: _angular_core.InputSignal<boolean>;
1187
+ /** Multiple mode: "Seleccionar todos" / "Quitar todos" on top of the options. */
1188
+ readonly selectAll: _angular_core.InputSignal<boolean>;
1187
1189
  readonly async: _angular_core.InputSignal<boolean>;
1188
1190
  readonly loadOptions: _angular_core.InputSignal<((query: string) => Observable<ClxSelectOption[]>) | null>;
1189
1191
  readonly debounceMs: _angular_core.InputSignal<number>;
@@ -1249,6 +1251,10 @@ declare class ClxSelectComponent implements ControlValueAccessor {
1249
1251
  private _loadPreviewFont;
1250
1252
  protected _closePanel(): void;
1251
1253
  protected _selectOption(opt: ClxSelectOption): void;
1254
+ protected readonly _selectableFiltered: Signal<ClxSelectOption[]>;
1255
+ protected readonly _allFilteredSelected: Signal<boolean>;
1256
+ /** Selects every option the search shows, or removes them all when they already are. */
1257
+ protected _toggleAll(): void;
1252
1258
  protected _deselect(value: string | number): void;
1253
1259
  protected _clearAll(): void;
1254
1260
  protected _onTriggerKeydown(event: KeyboardEvent): void;
@@ -1259,7 +1265,7 @@ declare class ClxSelectComponent implements ControlValueAccessor {
1259
1265
  registerOnTouched(fn: () => void): void;
1260
1266
  setDisabledState(disabled: boolean): void;
1261
1267
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ClxSelectComponent, never>;
1262
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ClxSelectComponent, "clx-select", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "activeColor": { "alias": "activeColor"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "async": { "alias": "async"; "required": false; "isSignal": true; }; "loadOptions": { "alias": "loadOptions"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "minChars": { "alias": "minChars"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1268
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ClxSelectComponent, "clx-select", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "activeColor": { "alias": "activeColor"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "selectAll": { "alias": "selectAll"; "required": false; "isSignal": true; }; "async": { "alias": "async"; "required": false; "isSignal": true; }; "loadOptions": { "alias": "loadOptions"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "minChars": { "alias": "minChars"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1263
1269
  }
1264
1270
 
1265
1271
  type ClxCheckboxVariant = 'solid' | 'outline';
@@ -3832,6 +3838,8 @@ interface ClxProduct {
3832
3838
  tags: string[];
3833
3839
  main_image?: string;
3834
3840
  in_stock: boolean;
3841
+ /** Units left — for the "Últimas unidades" tag (ClxProductTagService). */
3842
+ stock_quantity?: number;
3835
3843
  /** Cuántas variantes/combinaciones distintas representa esta card (ej. un catálogo agrupado por
3836
3844
  * Color donde la card "Azul" cubre varias Tallas). > 1 hace que el botón de acción muestre "Ver
3837
3845
  * opciones" en vez de agregar directo al carrito, ya que la card no identifica una combinación
@@ -3844,8 +3852,9 @@ type ClxProductTag = 'new' | 'sale' | 'out-of-stock' | 'featured' | 'limited' |
3844
3852
  /** Corner of the product image where a tag sits; tags sharing a corner stack. */
3845
3853
  type ClxTagPosition = 'TOP_LEFT' | 'TOP_RIGHT' | 'BOTTOM_LEFT' | 'BOTTOM_RIGHT';
3846
3854
  /** MANUAL = assigned per product (its code comes in ClxProduct.tags); the others are computed:
3847
- * STOCK ('{n} en stock', product detail), OUT_OF_STOCK and DISCOUNT ('{n}' = percentage). */
3848
- type ClxTagKind = 'MANUAL' | 'STOCK' | 'OUT_OF_STOCK' | 'DISCOUNT';
3855
+ * STOCK ('{n} en stock', product detail), LOW_STOCK ('{n}' units left, up to stockThreshold),
3856
+ * OUT_OF_STOCK and DISCOUNT ('{n}' = percentage). */
3857
+ type ClxTagKind = 'MANUAL' | 'STOCK' | 'LOW_STOCK' | 'OUT_OF_STOCK' | 'DISCOUNT';
3849
3858
  /** One configured tag, as the host app's backend stores it (Catálogo → Etiquetas). */
3850
3859
  interface ClxTagStyle {
3851
3860
  code: string;
@@ -3857,6 +3866,8 @@ interface ClxTagStyle {
3857
3866
  shape: 'pill' | 'rounded';
3858
3867
  position: ClxTagPosition;
3859
3868
  sortOrder?: number;
3869
+ /** LOW_STOCK: shown while the units left are 1..stockThreshold. */
3870
+ stockThreshold?: number | null;
3860
3871
  }
3861
3872
  /** A tag ready to render — label with '{n}' already replaced. */
3862
3873
  interface ClxTagBadge {
@@ -3874,8 +3885,10 @@ interface ClxTagContext {
3874
3885
  /** Codes of its manual tags (ClxProduct.tags); computed ones mixed in ('out-of-stock') are ignored. */
3875
3886
  tags: readonly string[];
3876
3887
  inStock: boolean;
3877
- /** Units, for the STOCK tag — only the product detail passes it. */
3888
+ /** Units left, for the LOW_STOCK tag (and STOCK with showStockCount). */
3878
3889
  stockQuantity?: number | null;
3890
+ /** Show the STOCK tag ('{n} en stock') — the product detail, not the cards. */
3891
+ showStockCount?: boolean;
3879
3892
  /** Discount percentage, for the DISCOUNT tag (0 / undefined = no discount). */
3880
3893
  discountPercent?: number | null;
3881
3894
  }