@shival99/z-ui 2.0.50 → 2.0.52

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.
Files changed (40) hide show
  1. package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs +17 -4
  2. package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs.map +1 -1
  3. package/fesm2022/shival99-z-ui-components-z-calendar.mjs +1 -1
  4. package/fesm2022/shival99-z-ui-components-z-calendar.mjs.map +1 -1
  5. package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs +1 -1
  6. package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs.map +1 -1
  7. package/fesm2022/shival99-z-ui-components-z-editor.mjs +1 -1
  8. package/fesm2022/shival99-z-ui-components-z-editor.mjs.map +1 -1
  9. package/fesm2022/shival99-z-ui-components-z-filter.mjs +1 -1
  10. package/fesm2022/shival99-z-ui-components-z-filter.mjs.map +1 -1
  11. package/fesm2022/shival99-z-ui-components-z-input.mjs +1 -1
  12. package/fesm2022/shival99-z-ui-components-z-input.mjs.map +1 -1
  13. package/fesm2022/shival99-z-ui-components-z-kanban.mjs +1 -1
  14. package/fesm2022/shival99-z-ui-components-z-kanban.mjs.map +1 -1
  15. package/fesm2022/shival99-z-ui-components-z-media-player.mjs +1 -1
  16. package/fesm2022/shival99-z-ui-components-z-media-player.mjs.map +1 -1
  17. package/fesm2022/shival99-z-ui-components-z-menu.mjs +2 -2
  18. package/fesm2022/shival99-z-ui-components-z-menu.mjs.map +1 -1
  19. package/fesm2022/shival99-z-ui-components-z-pagination.mjs +1 -1
  20. package/fesm2022/shival99-z-ui-components-z-pagination.mjs.map +1 -1
  21. package/fesm2022/shival99-z-ui-components-z-popover.mjs +353 -83
  22. package/fesm2022/shival99-z-ui-components-z-popover.mjs.map +1 -1
  23. package/fesm2022/shival99-z-ui-components-z-select.mjs +175 -110
  24. package/fesm2022/shival99-z-ui-components-z-select.mjs.map +1 -1
  25. package/fesm2022/shival99-z-ui-components-z-table.mjs +4 -4
  26. package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -1
  27. package/fesm2022/shival99-z-ui-components-z-tabs.mjs +1 -1
  28. package/fesm2022/shival99-z-ui-components-z-tabs.mjs.map +1 -1
  29. package/fesm2022/shival99-z-ui-components-z-tooltip.mjs +34 -34
  30. package/fesm2022/shival99-z-ui-components-z-tooltip.mjs.map +1 -1
  31. package/fesm2022/shival99-z-ui-utils.mjs +26 -1
  32. package/fesm2022/shival99-z-ui-utils.mjs.map +1 -1
  33. package/package.json +1 -1
  34. package/types/shival99-z-ui-components-z-autocomplete.d.ts +5 -2
  35. package/types/shival99-z-ui-components-z-gallery.d.ts +4 -4
  36. package/types/shival99-z-ui-components-z-popover.d.ts +34 -4
  37. package/types/shival99-z-ui-components-z-select.d.ts +13 -7
  38. package/types/shival99-z-ui-components-z-table.d.ts +3 -3
  39. package/types/shival99-z-ui-components-z-upload.d.ts +3 -3
  40. package/types/shival99-z-ui-utils.d.ts +6 -1
@@ -78,7 +78,8 @@ interface ZAutocompleteControl<T = unknown> {
78
78
  close: () => void;
79
79
  setValue: (value: string) => void;
80
80
  value: Signal<string>;
81
- selectedOption: Signal<ZAutocompleteOption<T> | null>;
81
+ /** Signal with selected options. Autocomplete returns an empty or one-item array. */
82
+ selected: Signal<ZAutocompleteOption<T>[]>;
82
83
  /**
83
84
  * @deprecated Use individual event outputs (zOnFocus, zOnBlur, etc.) instead.
84
85
  * Will be removed in a future version.
@@ -180,6 +181,7 @@ declare class ZAutocompleteComponent<T = unknown> implements OnInit, ControlValu
180
181
  private readonly _measureVirtualItems;
181
182
  protected readonly config: _angular_core.Signal<ZAutocompleteConfig<T>>;
182
183
  protected readonly hasAsyncOptions: _angular_core.Signal<boolean>;
184
+ protected readonly asyncSelectedOptions: _angular_core.Signal<ZAutocompleteOption<T>[]>;
183
185
  protected readonly sourceOptions: _angular_core.Signal<ZAutocompleteOption<T>[]>;
184
186
  protected readonly isLoading: _angular_core.Signal<boolean>;
185
187
  protected readonly isLoadingMore: _angular_core.Signal<boolean>;
@@ -194,6 +196,7 @@ declare class ZAutocompleteComponent<T = unknown> implements OnInit, ControlValu
194
196
  protected readonly effectiveDebounceTime: _angular_core.Signal<number>;
195
197
  protected readonly effectiveOptionTemplate: _angular_core.Signal<TemplateRef<any> | null>;
196
198
  protected readonly hasCustomOptionTemplate: _angular_core.Signal<boolean>;
199
+ protected readonly selected: _angular_core.Signal<ZAutocompleteOption<T>[]>;
197
200
  protected readonly highlightQuery: _angular_core.Signal<string>;
198
201
  /**
199
202
  * Local-mode loading state after debounce to avoid quick flicker.
@@ -271,7 +274,7 @@ declare class ZAutocompleteComponent<T = unknown> implements OnInit, ControlValu
271
274
 
272
275
  declare const zAutocompleteInputVariants: (props?: ({
273
276
  zSize?: "sm" | "default" | "lg" | null | undefined;
274
- zStatus?: "default" | "disabled" | "readonly" | "open" | "error" | null | undefined;
277
+ zStatus?: "default" | "error" | "disabled" | "readonly" | "open" | null | undefined;
275
278
  } & class_variance_authority_types.ClassProp) | undefined) => string;
276
279
  type ZAutocompleteInputVariants = VariantProps<typeof zAutocompleteInputVariants>;
277
280
  declare const zAutocompleteOptionVariants: (props?: ({
@@ -188,7 +188,7 @@ declare class ZGalleryComponent implements AfterViewInit {
188
188
  protected readonly headerControlHeight: _angular_core.Signal<"1.75rem" | "2rem" | "2.5rem" | "2.25rem">;
189
189
  protected readonly skeletonMediaHeight: _angular_core.Signal<"9rem" | "14rem" | "11rem">;
190
190
  protected readonly toggleIconSize: _angular_core.Signal<"14" | "16" | "20" | "18">;
191
- protected readonly searchInputSize: _angular_core.Signal<"default" | "sm" | "lg">;
191
+ protected readonly searchInputSize: _angular_core.Signal<"sm" | "default" | "lg">;
192
192
  protected readonly filteredFiles: _angular_core.Signal<ZGalleryFile[]>;
193
193
  protected readonly selectedIds: _angular_core.Signal<Set<string>>;
194
194
  protected readonly isAllSelected: _angular_core.Signal<boolean>;
@@ -382,16 +382,16 @@ declare const isPreviewable: (file: ZGalleryFile) => boolean;
382
382
  declare const isImage: (file: ZGalleryFile) => boolean;
383
383
 
384
384
  declare const zGalleryVariants: (props?: ({
385
- zSize?: "default" | "sm" | "lg" | null | undefined;
385
+ zSize?: "sm" | "default" | "lg" | null | undefined;
386
386
  } & class_variance_authority_types.ClassProp) | undefined) => string;
387
387
  type ZGalleryVariants = VariantProps<typeof zGalleryVariants>;
388
388
  declare const zGalleryItemVariants: (props?: ({
389
389
  zMode?: "grid" | "list" | null | undefined;
390
- zSize?: "default" | "sm" | "lg" | null | undefined;
390
+ zSize?: "sm" | "default" | "lg" | null | undefined;
391
391
  } & class_variance_authority_types.ClassProp) | undefined) => string;
392
392
  type ZGalleryItemVariants = VariantProps<typeof zGalleryItemVariants>;
393
393
  declare const zGalleryFileIconVariants: (props?: ({
394
- zSize?: "default" | "sm" | "lg" | null | undefined;
394
+ zSize?: "sm" | "default" | "lg" | null | undefined;
395
395
  zMode?: "grid" | "list" | null | undefined;
396
396
  } & class_variance_authority_types.ClassProp) | undefined) => string;
397
397
  type ZGalleryFileIconVariants = VariantProps<typeof zGalleryFileIconVariants>;
@@ -6,6 +6,12 @@ import { VariantProps } from 'class-variance-authority';
6
6
  type ZPopoverTrigger = 'click' | 'hover' | 'manual';
7
7
  type ZPopoverPosition = 'top' | 'top-left' | 'top-right' | 'bottom' | 'bottom-left' | 'bottom-right' | 'left' | 'left-top' | 'left-bottom' | 'right' | 'right-top' | 'right-bottom';
8
8
  type ZPopoverContent = TemplateRef<unknown>;
9
+ type ZPopoverOverlaySize = {
10
+ width?: number | string;
11
+ minWidth?: number | string;
12
+ maxWidth?: number | string;
13
+ };
14
+ type ZPopoverPaneStyles = Record<'top' | 'left' | 'right' | 'bottom' | 'transform', string>;
9
15
  interface ZPopoverControl {
10
16
  close: () => void;
11
17
  closeImmediate: () => void;
@@ -40,6 +46,7 @@ declare class ZPopoverComponent implements OnInit, OnDestroy {
40
46
  readonly zManualClose: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
41
47
  readonly zOutsideClickClose: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
42
48
  readonly zScrollClose: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
49
+ readonly zSticky: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
43
50
  readonly zShowArrow: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
44
51
  private _overlayRef;
45
52
  private _componentRef;
@@ -47,8 +54,10 @@ declare class ZPopoverComponent implements OnInit, OnDestroy {
47
54
  private _listenerCleanups;
48
55
  private _positionSubscription;
49
56
  private _scrollSubscription;
57
+ private _viewportResizeSubscription;
50
58
  private _resizeObserver;
51
59
  private _hideTimeout;
60
+ private _positionFrame;
52
61
  private readonly _isVisible;
53
62
  ngOnInit(): void;
54
63
  private _setupOverlayContainerListener;
@@ -61,21 +70,30 @@ declare class ZPopoverComponent implements OnInit, OnDestroy {
61
70
  isOpen(): boolean;
62
71
  updatePosition(): void;
63
72
  private _createOverlay;
73
+ private _createScrollStrategy;
64
74
  private _disposeOverlay;
65
75
  private _setupDelayMechanism;
66
76
  private _setupTriggers;
67
77
  private _setupOutsideClick;
68
78
  private _delay;
69
79
  private _setupScrollClose;
80
+ private _setupViewportResizeReposition;
70
81
  private _showPopover;
71
82
  private _isNestedPopoverTarget;
72
83
  private _setupResizeObserver;
84
+ private _updatePositionAfterContentSettles;
85
+ private _schedulePositionUpdate;
86
+ private _cancelScheduledPositionUpdate;
87
+ private _updatePositionNow;
88
+ private _applyMobilePopoverPosition;
89
+ private _isTriggerVisibleInViewport;
90
+ private _setOverlayPaneStyles;
73
91
  private _setupPopoverHover;
74
92
  private _hidePopover;
75
93
  private _clearHideTimeout;
76
94
  private _cleanupListeners;
77
95
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ZPopoverComponent, never>;
78
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZPopoverComponent, "z-popover", never, { "zContent": { "alias": "zContent"; "required": false; "isSignal": true; }; "zPosition": { "alias": "zPosition"; "required": false; "isSignal": true; }; "zTrigger": { "alias": "zTrigger"; "required": false; "isSignal": true; }; "zClass": { "alias": "zClass"; "required": false; "isSignal": true; }; "zShowDelay": { "alias": "zShowDelay"; "required": false; "isSignal": true; }; "zHideDelay": { "alias": "zHideDelay"; "required": false; "isSignal": true; }; "zDisabled": { "alias": "zDisabled"; "required": false; "isSignal": true; }; "zOffset": { "alias": "zOffset"; "required": false; "isSignal": true; }; "zManualClose": { "alias": "zManualClose"; "required": false; "isSignal": true; }; "zOutsideClickClose": { "alias": "zOutsideClickClose"; "required": false; "isSignal": true; }; "zScrollClose": { "alias": "zScrollClose"; "required": false; "isSignal": true; }; "zShowArrow": { "alias": "zShowArrow"; "required": false; "isSignal": true; }; }, { "zShow": "zShow"; "zHide": "zHide"; "zControl": "zControl"; "zOutsideClick": "zOutsideClick"; }, never, ["*"], true, never>;
96
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZPopoverComponent, "z-popover", never, { "zContent": { "alias": "zContent"; "required": false; "isSignal": true; }; "zPosition": { "alias": "zPosition"; "required": false; "isSignal": true; }; "zTrigger": { "alias": "zTrigger"; "required": false; "isSignal": true; }; "zClass": { "alias": "zClass"; "required": false; "isSignal": true; }; "zShowDelay": { "alias": "zShowDelay"; "required": false; "isSignal": true; }; "zHideDelay": { "alias": "zHideDelay"; "required": false; "isSignal": true; }; "zDisabled": { "alias": "zDisabled"; "required": false; "isSignal": true; }; "zOffset": { "alias": "zOffset"; "required": false; "isSignal": true; }; "zManualClose": { "alias": "zManualClose"; "required": false; "isSignal": true; }; "zOutsideClickClose": { "alias": "zOutsideClickClose"; "required": false; "isSignal": true; }; "zScrollClose": { "alias": "zScrollClose"; "required": false; "isSignal": true; }; "zSticky": { "alias": "zSticky"; "required": false; "isSignal": true; }; "zShowArrow": { "alias": "zShowArrow"; "required": false; "isSignal": true; }; }, { "zShow": "zShow"; "zHide": "zHide"; "zControl": "zControl"; "zOutsideClick": "zOutsideClick"; }, never, ["*"], true, never>;
79
97
  }
80
98
 
81
99
  declare class ZPopoverDirective implements OnInit, OnDestroy {
@@ -89,11 +107,12 @@ declare class ZPopoverDirective implements OnInit, OnDestroy {
89
107
  readonly zHideDelay: _angular_core.InputSignal<number>;
90
108
  readonly zDisabled: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
91
109
  readonly zOffset: _angular_core.InputSignal<number>;
92
- readonly zPopoverWidth: _angular_core.InputSignal<number | "auto" | "trigger">;
110
+ readonly zPopoverWidth: _angular_core.InputSignal<number | "trigger" | "auto">;
93
111
  readonly zTriggerRef: _angular_core.InputSignal<HTMLElement | ElementRef<HTMLElement> | null>;
94
112
  readonly zManualClose: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
95
113
  readonly zOutsideClickClose: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
96
114
  readonly zScrollClose: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
115
+ readonly zSticky: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
97
116
  readonly zShowArrow: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
98
117
  readonly zShow: _angular_core.OutputEmitterRef<void>;
99
118
  readonly zHide: _angular_core.OutputEmitterRef<void>;
@@ -116,8 +135,10 @@ declare class ZPopoverDirective implements OnInit, OnDestroy {
116
135
  private _listenerCleanups;
117
136
  private _positionSubscription;
118
137
  private _scrollSubscription;
138
+ private _viewportResizeSubscription;
119
139
  private _resizeObserver;
120
140
  private _hideTimeout;
141
+ private _positionFrame;
121
142
  private readonly _isDestroyed;
122
143
  private readonly _isVisible;
123
144
  ngOnInit(): void;
@@ -131,6 +152,7 @@ declare class ZPopoverDirective implements OnInit, OnDestroy {
131
152
  isOpen(): boolean;
132
153
  updatePosition(): void;
133
154
  private _createOverlay;
155
+ private _createScrollStrategy;
134
156
  private _getWidthConfig;
135
157
  private _getTriggerElement;
136
158
  private _disposeOverlay;
@@ -138,16 +160,24 @@ declare class ZPopoverDirective implements OnInit, OnDestroy {
138
160
  private _setupTriggers;
139
161
  private _setupOutsideClick;
140
162
  private _setupScrollClose;
163
+ private _setupViewportResizeReposition;
141
164
  private _delay;
142
165
  private _showPopover;
143
166
  private _isNestedPopoverTarget;
144
167
  private _setupResizeObserver;
168
+ private _updatePositionAfterContentSettles;
169
+ private _schedulePositionUpdate;
170
+ private _cancelScheduledPositionUpdate;
171
+ private _updatePositionNow;
172
+ private _applyMobilePopoverPosition;
173
+ private _isTriggerVisibleInViewport;
174
+ private _setOverlayPaneStyles;
145
175
  private _setupPopoverHover;
146
176
  private _hidePopover;
147
177
  private _clearHideTimeout;
148
178
  private _cleanupListeners;
149
179
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ZPopoverDirective, never>;
150
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ZPopoverDirective, "[z-popover]", ["zPopover"], { "zContent": { "alias": "zPopoverContent"; "required": false; "isSignal": true; }; "zPosition": { "alias": "zPosition"; "required": false; "isSignal": true; }; "zTrigger": { "alias": "zTrigger"; "required": false; "isSignal": true; }; "zPopoverTrigger": { "alias": "zPopoverTrigger"; "required": false; "isSignal": true; }; "zClass": { "alias": "zClass"; "required": false; "isSignal": true; }; "zShowDelay": { "alias": "zShowDelay"; "required": false; "isSignal": true; }; "zHideDelay": { "alias": "zHideDelay"; "required": false; "isSignal": true; }; "zDisabled": { "alias": "zDisabled"; "required": false; "isSignal": true; }; "zOffset": { "alias": "zOffset"; "required": false; "isSignal": true; }; "zPopoverWidth": { "alias": "zPopoverWidth"; "required": false; "isSignal": true; }; "zTriggerRef": { "alias": "zTriggerRef"; "required": false; "isSignal": true; }; "zManualClose": { "alias": "zManualClose"; "required": false; "isSignal": true; }; "zOutsideClickClose": { "alias": "zOutsideClickClose"; "required": false; "isSignal": true; }; "zScrollClose": { "alias": "zScrollClose"; "required": false; "isSignal": true; }; "zShowArrow": { "alias": "zShowArrow"; "required": false; "isSignal": true; }; }, { "zShow": "zShow"; "zHide": "zHide"; "zHideStart": "zHideStart"; "zControl": "zControl"; "zPositionChange": "zPositionChange"; "zOutsideClick": "zOutsideClick"; }, never, never, true, never>;
180
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ZPopoverDirective, "[z-popover]", ["zPopover"], { "zContent": { "alias": "zPopoverContent"; "required": false; "isSignal": true; }; "zPosition": { "alias": "zPosition"; "required": false; "isSignal": true; }; "zTrigger": { "alias": "zTrigger"; "required": false; "isSignal": true; }; "zPopoverTrigger": { "alias": "zPopoverTrigger"; "required": false; "isSignal": true; }; "zClass": { "alias": "zClass"; "required": false; "isSignal": true; }; "zShowDelay": { "alias": "zShowDelay"; "required": false; "isSignal": true; }; "zHideDelay": { "alias": "zHideDelay"; "required": false; "isSignal": true; }; "zDisabled": { "alias": "zDisabled"; "required": false; "isSignal": true; }; "zOffset": { "alias": "zOffset"; "required": false; "isSignal": true; }; "zPopoverWidth": { "alias": "zPopoverWidth"; "required": false; "isSignal": true; }; "zTriggerRef": { "alias": "zTriggerRef"; "required": false; "isSignal": true; }; "zManualClose": { "alias": "zManualClose"; "required": false; "isSignal": true; }; "zOutsideClickClose": { "alias": "zOutsideClickClose"; "required": false; "isSignal": true; }; "zScrollClose": { "alias": "zScrollClose"; "required": false; "isSignal": true; }; "zSticky": { "alias": "zSticky"; "required": false; "isSignal": true; }; "zShowArrow": { "alias": "zShowArrow"; "required": false; "isSignal": true; }; }, { "zShow": "zShow"; "zHide": "zHide"; "zHideStart": "zHideStart"; "zControl": "zControl"; "zPositionChange": "zPositionChange"; "zOutsideClick": "zOutsideClick"; }, never, never, true, never>;
151
181
  }
152
182
 
153
183
  declare const zPopoverVariants: (props?: ({
@@ -156,4 +186,4 @@ declare const zPopoverVariants: (props?: ({
156
186
  type ZPopoverVariants = VariantProps<typeof zPopoverVariants>;
157
187
 
158
188
  export { ZPopoverComponent, ZPopoverDirective, zPopoverVariants };
159
- export type { ZPopoverContent, ZPopoverControl, ZPopoverPosition, ZPopoverTrigger, ZPopoverVariants };
189
+ export type { ZPopoverContent, ZPopoverControl, ZPopoverOverlaySize, ZPopoverPaneStyles, ZPopoverPosition, ZPopoverTrigger, ZPopoverVariants };
@@ -45,10 +45,8 @@ interface ZSelectControl<T = unknown> {
45
45
  isOpen: Signal<boolean>;
46
46
  /** Signal with current value */
47
47
  value: Signal<T | T[] | null>;
48
- /** Signal with currently selected option (single mode) */
49
- selectedOption: Signal<ZSelectOption<T> | null>;
50
- /** Signal with all selected options (multiple/tags mode) */
51
- selectedOptions: Signal<ZSelectOption<T>[]>;
48
+ /** Signal with selected options. Single mode returns an empty or one-item array. */
49
+ selected: Signal<ZSelectOption<T>[]>;
52
50
  /** Signal with current error message */
53
51
  errorMessage: Signal<string>;
54
52
  }
@@ -155,6 +153,7 @@ declare class ZSelectComponent<T = unknown> implements OnInit, ControlValueAcces
155
153
  readonly zScrollDistance: _angular_core.InputSignal<number>;
156
154
  readonly zMaxVisible: _angular_core.InputSignal<number | null>;
157
155
  readonly zScrollClose: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
156
+ readonly zSticky: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
158
157
  readonly zPosition: _angular_core.InputSignal<ZPopoverPosition>;
159
158
  readonly zSelectedTemplate: _angular_core.InputSignal<ZSelectLabelTemplate<T> | null>;
160
159
  readonly zOptionTemplate: _angular_core.InputSignal<ZSelectOptionTemplate<T> | null>;
@@ -193,6 +192,7 @@ declare class ZSelectComponent<T = unknown> implements OnInit, ControlValueAcces
193
192
  protected readonly config: _angular_core.Signal<ZSelectConfig<T>>;
194
193
  protected readonly hasAsyncOptions: _angular_core.Signal<boolean>;
195
194
  protected readonly sourceOptions: _angular_core.Signal<ZSelectOption<T>[]>;
195
+ protected readonly asyncSelectedOptions: _angular_core.Signal<ZSelectOption<T>[]>;
196
196
  protected readonly isLoading: _angular_core.Signal<boolean>;
197
197
  protected readonly isLoadingMore: _angular_core.Signal<boolean>;
198
198
  protected readonly canLoadMore: _angular_core.Signal<boolean>;
@@ -209,6 +209,7 @@ declare class ZSelectComponent<T = unknown> implements OnInit, ControlValueAcces
209
209
  protected readonly effectiveClearAllText: _angular_core.Signal<string>;
210
210
  protected readonly effectiveRequiredErrorText: _angular_core.Signal<string>;
211
211
  protected readonly translatedOptions: _angular_core.Signal<ZSelectOption<T>[]>;
212
+ protected readonly translatedAsyncSelectedOptions: _angular_core.Signal<ZSelectOption<T>[]>;
212
213
  protected readonly isMultipleMode: _angular_core.Signal<boolean>;
213
214
  protected readonly isTagsMode: _angular_core.Signal<boolean>;
214
215
  protected readonly effectiveSelectedTemplate: _angular_core.Signal<TemplateRef<any> | null>;
@@ -217,6 +218,7 @@ declare class ZSelectComponent<T = unknown> implements OnInit, ControlValueAcces
217
218
  protected readonly shouldUseVirtualScroll: _angular_core.Signal<boolean>;
218
219
  protected readonly selectedOption: _angular_core.Signal<ZSelectOption<T> | null>;
219
220
  protected readonly selectedOptions: _angular_core.Signal<ZSelectOption<T>[]>;
221
+ protected readonly selected: _angular_core.Signal<ZSelectOption<T>[]>;
220
222
  protected readonly displayedTags: _angular_core.Signal<ZSelectOption<T>[]>;
221
223
  protected readonly remainingCount: _angular_core.Signal<number>;
222
224
  protected readonly hasValue: _angular_core.Signal<boolean>;
@@ -264,6 +266,7 @@ declare class ZSelectComponent<T = unknown> implements OnInit, ControlValueAcces
264
266
  protected toggleDropdown(): void;
265
267
  protected onPopoverControl(control: ZPopoverControl): void;
266
268
  protected onPopoverShow(): void;
269
+ private _focusWithoutScroll;
267
270
  protected onPopoverHideStart(): void;
268
271
  protected onPopoverHideEnd(): void;
269
272
  protected onSearchChange(value: string): void;
@@ -275,6 +278,9 @@ declare class ZSelectComponent<T = unknown> implements OnInit, ControlValueAcces
275
278
  protected removeAll(): void;
276
279
  protected toggleSelectAllAction(): void;
277
280
  protected trackByValue: (_index: number, option: ZSelectOption<T>) => unknown;
281
+ private _findOptionByValue;
282
+ private _getOptionKey;
283
+ private _isValueEqual;
278
284
  private _emitControl;
279
285
  private _loadAsyncOptionsOnFocus;
280
286
  private _loadAsyncOptions;
@@ -293,11 +299,11 @@ declare class ZSelectComponent<T = unknown> implements OnInit, ControlValueAcces
293
299
  private _cancelAsyncValidation;
294
300
  private _triggerAsyncValidation;
295
301
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ZSelectComponent<any>, never>;
296
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZSelectComponent<any>, "z-select", ["zSelect"], { "class": { "alias": "class"; "required": false; "isSignal": true; }; "zMode": { "alias": "zMode"; "required": false; "isSignal": true; }; "zSize": { "alias": "zSize"; "required": false; "isSignal": true; }; "zLabel": { "alias": "zLabel"; "required": false; "isSignal": true; }; "zLabelClass": { "alias": "zLabelClass"; "required": false; "isSignal": true; }; "zPlaceholder": { "alias": "zPlaceholder"; "required": false; "isSignal": true; }; "zRequired": { "alias": "zRequired"; "required": false; "isSignal": true; }; "zDisabled": { "alias": "zDisabled"; "required": false; "isSignal": true; }; "zReadonly": { "alias": "zReadonly"; "required": false; "isSignal": true; }; "zLoading": { "alias": "zLoading"; "required": false; "isSignal": true; }; "zPrefix": { "alias": "zPrefix"; "required": false; "isSignal": true; }; "zAllowClear": { "alias": "zAllowClear"; "required": false; "isSignal": true; }; "zWrap": { "alias": "zWrap"; "required": false; "isSignal": true; }; "zShowSearch": { "alias": "zShowSearch"; "required": false; "isSignal": true; }; "zPlaceholderSearch": { "alias": "zPlaceholderSearch"; "required": false; "isSignal": true; }; "zDebounce": { "alias": "zDebounce"; "required": false; "isSignal": true; }; "zNotFoundText": { "alias": "zNotFoundText"; "required": false; "isSignal": true; }; "zEmptyText": { "alias": "zEmptyText"; "required": false; "isSignal": true; }; "zEmptyIcon": { "alias": "zEmptyIcon"; "required": false; "isSignal": true; }; "zMaxTagCount": { "alias": "zMaxTagCount"; "required": false; "isSignal": true; }; "zDropdownMaxHeight": { "alias": "zDropdownMaxHeight"; "required": false; "isSignal": true; }; "zOptionHeight": { "alias": "zOptionHeight"; "required": false; "isSignal": true; }; "zVirtualScroll": { "alias": "zVirtualScroll"; "required": false; "isSignal": true; }; "zShowAction": { "alias": "zShowAction"; "required": false; "isSignal": true; }; "zOptions": { "alias": "zOptions"; "required": false; "isSignal": true; }; "zConfig": { "alias": "zConfig"; "required": false; "isSignal": true; }; "zTranslateLabels": { "alias": "zTranslateLabels"; "required": false; "isSignal": true; }; "zKey": { "alias": "zKey"; "required": false; "isSignal": true; }; "zSearchServer": { "alias": "zSearchServer"; "required": false; "isSignal": true; }; "zLoadingMore": { "alias": "zLoadingMore"; "required": false; "isSignal": true; }; "zEnableLoadMore": { "alias": "zEnableLoadMore"; "required": false; "isSignal": true; }; "zScrollDistance": { "alias": "zScrollDistance"; "required": false; "isSignal": true; }; "zMaxVisible": { "alias": "zMaxVisible"; "required": false; "isSignal": true; }; "zScrollClose": { "alias": "zScrollClose"; "required": false; "isSignal": true; }; "zPosition": { "alias": "zPosition"; "required": false; "isSignal": true; }; "zSelectedTemplate": { "alias": "zSelectedTemplate"; "required": false; "isSignal": true; }; "zOptionTemplate": { "alias": "zOptionTemplate"; "required": false; "isSignal": true; }; "zActionTemplate": { "alias": "zActionTemplate"; "required": false; "isSignal": true; }; "zAsyncValidators": { "alias": "zAsyncValidators"; "required": false; "isSignal": true; }; "zAsyncDebounce": { "alias": "zAsyncDebounce"; "required": false; "isSignal": true; }; "zAsyncValidateOn": { "alias": "zAsyncValidateOn"; "required": false; "isSignal": true; }; "zValidators": { "alias": "zValidators"; "required": false; "isSignal": true; }; }, { "zOnSearch": "zOnSearch"; "zOnLoadMore": "zOnLoadMore"; "zOnBlur": "zOnBlur"; "zOnFocus": "zOnFocus"; "zControl": "zControl"; "zEvent": "zEvent"; }, ["customSelectedDirective", "customOptionDirective"], never, true, never>;
302
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZSelectComponent<any>, "z-select", ["zSelect"], { "class": { "alias": "class"; "required": false; "isSignal": true; }; "zMode": { "alias": "zMode"; "required": false; "isSignal": true; }; "zSize": { "alias": "zSize"; "required": false; "isSignal": true; }; "zLabel": { "alias": "zLabel"; "required": false; "isSignal": true; }; "zLabelClass": { "alias": "zLabelClass"; "required": false; "isSignal": true; }; "zPlaceholder": { "alias": "zPlaceholder"; "required": false; "isSignal": true; }; "zRequired": { "alias": "zRequired"; "required": false; "isSignal": true; }; "zDisabled": { "alias": "zDisabled"; "required": false; "isSignal": true; }; "zReadonly": { "alias": "zReadonly"; "required": false; "isSignal": true; }; "zLoading": { "alias": "zLoading"; "required": false; "isSignal": true; }; "zPrefix": { "alias": "zPrefix"; "required": false; "isSignal": true; }; "zAllowClear": { "alias": "zAllowClear"; "required": false; "isSignal": true; }; "zWrap": { "alias": "zWrap"; "required": false; "isSignal": true; }; "zShowSearch": { "alias": "zShowSearch"; "required": false; "isSignal": true; }; "zPlaceholderSearch": { "alias": "zPlaceholderSearch"; "required": false; "isSignal": true; }; "zDebounce": { "alias": "zDebounce"; "required": false; "isSignal": true; }; "zNotFoundText": { "alias": "zNotFoundText"; "required": false; "isSignal": true; }; "zEmptyText": { "alias": "zEmptyText"; "required": false; "isSignal": true; }; "zEmptyIcon": { "alias": "zEmptyIcon"; "required": false; "isSignal": true; }; "zMaxTagCount": { "alias": "zMaxTagCount"; "required": false; "isSignal": true; }; "zDropdownMaxHeight": { "alias": "zDropdownMaxHeight"; "required": false; "isSignal": true; }; "zOptionHeight": { "alias": "zOptionHeight"; "required": false; "isSignal": true; }; "zVirtualScroll": { "alias": "zVirtualScroll"; "required": false; "isSignal": true; }; "zShowAction": { "alias": "zShowAction"; "required": false; "isSignal": true; }; "zOptions": { "alias": "zOptions"; "required": false; "isSignal": true; }; "zConfig": { "alias": "zConfig"; "required": false; "isSignal": true; }; "zTranslateLabels": { "alias": "zTranslateLabels"; "required": false; "isSignal": true; }; "zKey": { "alias": "zKey"; "required": false; "isSignal": true; }; "zSearchServer": { "alias": "zSearchServer"; "required": false; "isSignal": true; }; "zLoadingMore": { "alias": "zLoadingMore"; "required": false; "isSignal": true; }; "zEnableLoadMore": { "alias": "zEnableLoadMore"; "required": false; "isSignal": true; }; "zScrollDistance": { "alias": "zScrollDistance"; "required": false; "isSignal": true; }; "zMaxVisible": { "alias": "zMaxVisible"; "required": false; "isSignal": true; }; "zScrollClose": { "alias": "zScrollClose"; "required": false; "isSignal": true; }; "zSticky": { "alias": "zSticky"; "required": false; "isSignal": true; }; "zPosition": { "alias": "zPosition"; "required": false; "isSignal": true; }; "zSelectedTemplate": { "alias": "zSelectedTemplate"; "required": false; "isSignal": true; }; "zOptionTemplate": { "alias": "zOptionTemplate"; "required": false; "isSignal": true; }; "zActionTemplate": { "alias": "zActionTemplate"; "required": false; "isSignal": true; }; "zAsyncValidators": { "alias": "zAsyncValidators"; "required": false; "isSignal": true; }; "zAsyncDebounce": { "alias": "zAsyncDebounce"; "required": false; "isSignal": true; }; "zAsyncValidateOn": { "alias": "zAsyncValidateOn"; "required": false; "isSignal": true; }; "zValidators": { "alias": "zValidators"; "required": false; "isSignal": true; }; }, { "zOnSearch": "zOnSearch"; "zOnLoadMore": "zOnLoadMore"; "zOnBlur": "zOnBlur"; "zOnFocus": "zOnFocus"; "zControl": "zControl"; "zEvent": "zEvent"; }, ["customSelectedDirective", "customOptionDirective"], never, true, never>;
297
303
  }
298
304
 
299
305
  declare class ZIsSelectedPipe implements PipeTransform {
300
- transform<T>(option: ZSelectOption<T>, value: T | T[] | null, isMultipleMode: boolean): boolean;
306
+ transform<T>(option: ZSelectOption<T>, value: T | T[] | null, isMultipleMode: boolean, zKey?: string): boolean;
301
307
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ZIsSelectedPipe, never>;
302
308
  static ɵpipe: _angular_core.ɵɵPipeDeclaration<ZIsSelectedPipe, "zIsSelected", true>;
303
309
  }
@@ -316,7 +322,7 @@ declare class ZTagClassesPipe implements PipeTransform {
316
322
 
317
323
  declare const zSelectVariants: (props?: ({
318
324
  zSize?: "sm" | "default" | "lg" | null | undefined;
319
- zStatus?: "default" | "disabled" | "readonly" | "open" | "error" | null | undefined;
325
+ zStatus?: "default" | "error" | "disabled" | "readonly" | "open" | null | undefined;
320
326
  } & class_variance_authority_types.ClassProp) | undefined) => string;
321
327
  declare const zSelectTagVariants: (props?: ({
322
328
  zSize?: "sm" | "default" | "lg" | null | undefined;
@@ -1263,7 +1263,7 @@ declare class ZTableFilterComponent<T> {
1263
1263
  protected readonly sortOptions: _angular_core.Signal<ZSelectOption<string>[]>;
1264
1264
  protected readonly draftFilters: _angular_core.WritableSignal<ZTableDraftFilterCondition[]>;
1265
1265
  protected readonly draftLegacyFilterValue: _angular_core.WritableSignal<unknown>;
1266
- protected readonly draftSortState: _angular_core.WritableSignal<false | "asc" | "desc">;
1266
+ protected readonly draftSortState: _angular_core.WritableSignal<false | "desc" | "asc">;
1267
1267
  protected readonly columnFilterValue: _angular_core.Signal<unknown>;
1268
1268
  protected readonly effectiveFilterValue: _angular_core.Signal<unknown>;
1269
1269
  protected readonly sortState: _angular_core.Signal<false | _tanstack_angular_table.SortDirection>;
@@ -1285,7 +1285,7 @@ declare class ZTableFilterComponent<T> {
1285
1285
  protected readonly filterBadgeCount: _angular_core.Signal<number>;
1286
1286
  protected readonly hasFilterValue: _angular_core.Signal<boolean>;
1287
1287
  protected readonly isActive: _angular_core.Signal<boolean>;
1288
- protected readonly draftSortValue: _angular_core.Signal<"asc" | "desc" | "none">;
1288
+ protected readonly draftSortValue: _angular_core.Signal<"none" | "desc" | "asc">;
1289
1289
  protected readonly rangeMinValue: _angular_core.Signal<any>;
1290
1290
  protected readonly rangeMaxValue: _angular_core.Signal<any>;
1291
1291
  protected readonly dateValue: _angular_core.Signal<Date | null>;
@@ -1353,7 +1353,7 @@ declare class ZTableActionsComponent<T = unknown> {
1353
1353
  readonly zConfig: _angular_core.InputSignal<ZTableActionColumnConfig<T>>;
1354
1354
  readonly zRow: _angular_core.InputSignal<T>;
1355
1355
  readonly zRowId: _angular_core.InputSignal<string>;
1356
- readonly zDropdownButtonSize: _angular_core.InputSignal<"default" | "sm" | "lg" | "xs" | "xl" | null | undefined>;
1356
+ readonly zDropdownButtonSize: _angular_core.InputSignal<"sm" | "default" | "lg" | "xs" | "xl" | null | undefined>;
1357
1357
  readonly zActionClick: _angular_core.OutputEmitterRef<ZTableActionClickEvent<T>>;
1358
1358
  protected readonly allActions: _angular_core.Signal<ZTableActionItem<T>[]>;
1359
1359
  protected readonly shouldShowAsButtons: _angular_core.Signal<boolean>;
@@ -100,7 +100,7 @@ declare class ZUploadComponent implements OnInit, ControlValueAccessor {
100
100
  protected readonly hasError: _angular_core.Signal<boolean>;
101
101
  protected readonly showError: _angular_core.Signal<boolean>;
102
102
  protected readonly errorMessage: _angular_core.Signal<string>;
103
- protected readonly currentStatus: _angular_core.Signal<"default" | "disabled" | "readonly" | "error" | "active">;
103
+ protected readonly currentStatus: _angular_core.Signal<"default" | "error" | "disabled" | "readonly" | "active">;
104
104
  protected readonly dropzoneClasses: _angular_core.Signal<string>;
105
105
  protected readonly acceptTypes: _angular_core.Signal<string>;
106
106
  protected readonly formatFileSize: (bytes: number) => string;
@@ -141,11 +141,11 @@ declare class ZUploadComponent implements OnInit, ControlValueAccessor {
141
141
 
142
142
  declare const zUploadDropzoneVariants: (props?: ({
143
143
  zSize?: "sm" | "default" | "lg" | null | undefined;
144
- zStatus?: "default" | "disabled" | "readonly" | "error" | "active" | null | undefined;
144
+ zStatus?: "default" | "error" | "active" | "disabled" | "readonly" | null | undefined;
145
145
  } & class_variance_authority_types.ClassProp) | undefined) => string;
146
146
  type ZUploadDropzoneVariants = VariantProps<typeof zUploadDropzoneVariants>;
147
147
  declare const zUploadFileItemVariants: (props?: ({
148
- zStatus?: "error" | "pending" | "uploading" | "success" | null | undefined;
148
+ zStatus?: "pending" | "uploading" | "success" | "error" | null | undefined;
149
149
  } & class_variance_authority_types.ClassProp) | undefined) => string;
150
150
  type ZUploadFileItemVariants = VariantProps<typeof zUploadFileItemVariants>;
151
151
 
@@ -82,6 +82,7 @@ declare const zMiniSearch$: <T>(data: T[], query: string, fields: (keyof T | str
82
82
  fakeDelay?: number;
83
83
  }) => Observable<T[]>;
84
84
  declare const zDetectBrowser: () => ZBrowserInfo;
85
+ declare const zIsMobileViewport: (maxWidth?: number) => boolean;
85
86
 
86
87
  /** Thông tin truy vấn dùng cho autocomplete/select tự tải dữ liệu. */
87
88
  interface ZAsyncOptionsQuery {
@@ -113,6 +114,8 @@ interface ZAsyncOptionsConfig<TOption> {
113
114
  pageSize?: number;
114
115
  /** Tự tải trang đầu khi dropdown mở/focus, kể cả keyword rỗng. */
115
116
  loadOnFocus?: boolean;
117
+ /** Các option đang được chọn cần giữ lại để hiển thị nhãn dù không nằm trong trang async hiện tại. */
118
+ selectedOptions?: TOption[] | (() => TOption[]);
116
119
  /** Khóa chống trùng khi append trang mới, ví dụ: option => option.value.code. */
117
120
  dedupeBy?: (option: TOption) => unknown;
118
121
  }
@@ -123,6 +126,8 @@ declare const Z_ASYNC_OPTIONS_DEFAULT_PAGE_SIZE = 20;
123
126
  declare function zToAsyncOptionsObservable<TOption>(result: ZAsyncOptionsLoadResult<TOption>): Observable<ZAsyncOptionsResult<TOption>>;
124
127
  /** Gộp option mới vào danh sách cũ và loại bỏ phần tử trùng theo dedupeBy/default key. */
125
128
  declare function zMergeAsyncOptions<TOption>(current: TOption[], next: TOption[], dedupeBy?: ZAsyncOptionsConfig<TOption>['dedupeBy']): TOption[];
129
+ /** Lấy option đang chọn từ config, hỗ trợ truyền mảng tĩnh hoặc signal/computed. */
130
+ declare function zResolveAsyncSelectedOptions<TOption>(config: ZAsyncOptionsConfig<TOption> | undefined): TOption[];
126
131
  /** Tính còn dữ liệu để load-more dựa trên hasMore, total hoặc độ dài page vừa trả về. */
127
132
  declare function zResolveAsyncOptionsHasMore<TOption>(result: ZAsyncOptionsResult<TOption>, pageSize: number, loadedCount: number): boolean;
128
133
  /** Lấy khóa ổn định cho option, hỗ trợ value là object và vẫn cho phép truyền dedupeBy riêng. */
@@ -213,5 +218,5 @@ interface ZFormDebugOptions {
213
218
  logLevel?: 'error' | 'warn' | 'log';
214
219
  }
215
220
 
216
- export { VIETNAMESE_MAP, Z_ASYNC_OPTIONS_DEFAULT_PAGE_SIZE, Z_DIVIDE_SCALE, Z_EMOJI_KEYWORDS, Z_EMOJI_SHEET, Z_EXCEL_NUMBER_FORMAT_MAP, Z_LOCALE_MAP, zCapitalCase, zCleanObject, zConvertColorToArgb, zCreateEvent, zDebugFormInvalid, zDecodeUnicode, zDetectBrowser, zFormatNum, zFormatNumExcel, zGetAsyncOptionKey, zMergeAsyncOptions, zMergeClasses, zMiniSearch, zMiniSearch$, zNoop, zNormalize, zRandomColor, zRegisterEchartsTheme, zRemoveVietnamese, zResolveAsyncOptionsHasMore, zToAsyncOptionsObservable, zTransform, zTreeBuild, zTreeFlatten, zUuid, zValidForm };
221
+ export { VIETNAMESE_MAP, Z_ASYNC_OPTIONS_DEFAULT_PAGE_SIZE, Z_DIVIDE_SCALE, Z_EMOJI_KEYWORDS, Z_EMOJI_SHEET, Z_EXCEL_NUMBER_FORMAT_MAP, Z_LOCALE_MAP, zCapitalCase, zCleanObject, zConvertColorToArgb, zCreateEvent, zDebugFormInvalid, zDecodeUnicode, zDetectBrowser, zFormatNum, zFormatNumExcel, zGetAsyncOptionKey, zIsMobileViewport, zMergeAsyncOptions, zMergeClasses, zMiniSearch, zMiniSearch$, zNoop, zNormalize, zRandomColor, zRegisterEchartsTheme, zRemoveVietnamese, zResolveAsyncOptionsHasMore, zResolveAsyncSelectedOptions, zToAsyncOptionsObservable, zTransform, zTreeBuild, zTreeFlatten, zUuid, zValidForm };
217
222
  export type { ZAsyncOptionsConfig, ZAsyncOptionsLoadFn, ZAsyncOptionsLoadResult, ZAsyncOptionsQuery, ZAsyncOptionsResult, ZBlurEventData, ZBrowserInfo, ZBrowserName, ZCapitalizeType, ZChangeEventData, ZClickEventData, ZCopyEventData, ZCutEventData, ZDblclickEventData, ZDeviceType, ZDragenterEventData, ZDragleaveEventData, ZDragoverEventData, ZDropEventData, ZEchartsThemeOptions, ZEmojiCategory, ZEmojiEntry, ZEmptyCheck, ZEvent, ZEventType, ZFocusEventData, ZFormDebugOptions, ZFormSubmitResult, ZFormatNumExcelOptions, ZFormatNumOptions, ZInputEventData, ZKeydownEventData, ZKeypressEventData, ZKeyupEventData, ZMousedownEventData, ZMouseenterEventData, ZMouseleaveEventData, ZMouseoutEventData, ZMouseoverEventData, ZMouseupEventData, ZNavigatorUABrandVersion, ZNavigatorUAData, ZNumberDivide, ZPasteEventData, ZTouchendEventData, ZTouchmoveEventData, ZTouchstartEventData };