@neural-ui/core 1.1.1 → 1.2.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neural-ui/core",
3
- "version": "1.1.1",
3
+ "version": "1.2.0",
4
4
  "description": "Modern Angular UI component library built with signals, standalone components, and OnPush change detection.",
5
5
  "author": "PedroMorenoTrujillo",
6
6
  "keywords": [
@@ -323,6 +323,8 @@ interface NeuSelectOption {
323
323
  label: string;
324
324
  disabled?: boolean;
325
325
  group?: string;
326
+ /** Objeto de origen para adjuntar sin transformación (p.ej. entidad de la API). Accesible vía (selectionChange). */
327
+ data?: unknown;
326
328
  }
327
329
  interface NeuSelectGroup {
328
330
  label: string;
@@ -361,6 +363,8 @@ declare class NeuMultiselectItemDirective {
361
363
  */
362
364
  declare class NeuMultiselectComponent implements ControlValueAccessor {
363
365
  private readonly elementRef;
366
+ private readonly _urlState;
367
+ constructor();
364
368
  /** @internal */
365
369
  readonly _triggerId: string;
366
370
  /** Template personalizado para cada opción del dropdown */
@@ -389,6 +393,18 @@ declare class NeuMultiselectComponent implements ControlValueAccessor {
389
393
  clearable: _angular_core.InputSignal<boolean>;
390
394
  /** Aria-label del botón clear que aparece en el trigger */
391
395
  clearAriaLabel: _angular_core.InputSignal<string>;
396
+ /**
397
+ * Sincroniza los valores seleccionados con este query param de la URL.
398
+ * Los valores se codifican como lista separada por comas: `?{urlParam}=a,b,c`.
399
+ * Pasar `null` (default) deshabilita la sincronización.
400
+ */
401
+ urlParam: _angular_core.InputSignal<string | null>;
402
+ /**
403
+ * Emite el array de NeuSelectOption completo (incluyendo data) al cambiar la selección.
404
+ * Emite [] al limpiar toda la selección.
405
+ * Los valores de ngModel / formControl siguen siendo string[].
406
+ */
407
+ readonly selectionChange: _angular_core.OutputEmitterRef<NeuSelectOption[]>;
392
408
  protected readonly _values: _angular_core.WritableSignal<string[]>;
393
409
  readonly isOpen: _angular_core.WritableSignal<boolean>;
394
410
  readonly searchQuery: _angular_core.WritableSignal<string>;
@@ -418,7 +434,7 @@ declare class NeuMultiselectComponent implements ControlValueAccessor {
418
434
  protected toggleChipMode(event: MouseEvent): void;
419
435
  protected onDocumentClick(event: MouseEvent): void;
420
436
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NeuMultiselectComponent, never>;
421
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuMultiselectComponent, "neu-multiselect", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "floatingLabel": { "alias": "floatingLabel"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "noResultsMessage": { "alias": "noResultsMessage"; "required": false; "isSignal": true; }; "clearAllLabel": { "alias": "clearAllLabel"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; }, {}, ["itemTpl"], never, true, never>;
437
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuMultiselectComponent, "neu-multiselect", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "floatingLabel": { "alias": "floatingLabel"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "noResultsMessage": { "alias": "noResultsMessage"; "required": false; "isSignal": true; }; "clearAllLabel": { "alias": "clearAllLabel"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "urlParam": { "alias": "urlParam"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, ["itemTpl"], never, true, never>;
422
438
  }
423
439
 
424
440
  /** Token para que neu-radio encuentre a su grupo padre */
@@ -520,6 +536,8 @@ declare class NeuSelectSelectedDirective {
520
536
  */
521
537
  declare class NeuSelectComponent implements ControlValueAccessor {
522
538
  private readonly elementRef;
539
+ private readonly _urlState;
540
+ constructor();
523
541
  /** @internal — ID \u00fanico para asociar label con trigger */
524
542
  readonly _triggerId: string;
525
543
  /** Template personalizado para cada opción del dropdown */
@@ -548,6 +566,18 @@ declare class NeuSelectComponent implements ControlValueAccessor {
548
566
  noResultsMessage: _angular_core.InputSignal<string>;
549
567
  /** Aria-label del botón de limpiar */
550
568
  clearAriaLabel: _angular_core.InputSignal<string>;
569
+ /**
570
+ * Sincroniza el valor seleccionado con este query param de la URL.
571
+ * Al seleccionar una opción se añade `?{urlParam}=value` a la URL.
572
+ * Pasar `null` (default) deshabilita la sincronización.
573
+ */
574
+ urlParam: _angular_core.InputSignal<string | null>;
575
+ /**
576
+ * Emite el objeto NeuSelectOption completo (incluyendo data) al seleccionar una opción.
577
+ * Emite null al limpiar la selección.
578
+ * El valor de ngModel / formControl sigue siendo string.
579
+ */
580
+ readonly selectionChange: _angular_core.OutputEmitterRef<NeuSelectOption | null>;
551
581
  protected readonly _value: _angular_core.WritableSignal<string | null>;
552
582
  readonly isOpen: _angular_core.WritableSignal<boolean>;
553
583
  readonly searchQuery: _angular_core.WritableSignal<string>;
@@ -573,7 +603,7 @@ declare class NeuSelectComponent implements ControlValueAccessor {
573
603
  selectOption(option: NeuSelectOption): void;
574
604
  onDocumentClick(event: MouseEvent): void;
575
605
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NeuSelectComponent, never>;
576
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuSelectComponent, "neu-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "floatingLabel": { "alias": "floatingLabel"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "noResultsMessage": { "alias": "noResultsMessage"; "required": false; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; }, {}, ["itemTpl", "selectedItemTpl"], never, true, never>;
606
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuSelectComponent, "neu-select", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "floatingLabel": { "alias": "floatingLabel"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "noResultsMessage": { "alias": "noResultsMessage"; "required": false; "isSignal": true; }; "clearAriaLabel": { "alias": "clearAriaLabel"; "required": false; "isSignal": true; }; "urlParam": { "alias": "urlParam"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, ["itemTpl", "selectedItemTpl"], never, true, never>;
577
607
  }
578
608
 
579
609
  /**