@shival99/z-ui 2.0.7 → 2.0.9

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 (81) hide show
  1. package/assets/css/themes/hospital.css +9 -9
  2. package/fesm2022/shival99-z-ui-components-z-accordion.mjs +1 -1
  3. package/fesm2022/shival99-z-ui-components-z-accordion.mjs.map +1 -1
  4. package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs +2 -2
  5. package/fesm2022/shival99-z-ui-components-z-autocomplete.mjs.map +1 -1
  6. package/fesm2022/shival99-z-ui-components-z-avatar.mjs +1 -1
  7. package/fesm2022/shival99-z-ui-components-z-avatar.mjs.map +1 -1
  8. package/fesm2022/shival99-z-ui-components-z-breadcrumb.mjs +1 -1
  9. package/fesm2022/shival99-z-ui-components-z-breadcrumb.mjs.map +1 -1
  10. package/fesm2022/shival99-z-ui-components-z-button.mjs +32 -9
  11. package/fesm2022/shival99-z-ui-components-z-button.mjs.map +1 -1
  12. package/fesm2022/shival99-z-ui-components-z-calendar.mjs +102 -27
  13. package/fesm2022/shival99-z-ui-components-z-calendar.mjs.map +1 -1
  14. package/fesm2022/shival99-z-ui-components-z-card.mjs +1 -1
  15. package/fesm2022/shival99-z-ui-components-z-card.mjs.map +1 -1
  16. package/fesm2022/shival99-z-ui-components-z-chat.mjs +1 -1
  17. package/fesm2022/shival99-z-ui-components-z-chat.mjs.map +1 -1
  18. package/fesm2022/shival99-z-ui-components-z-checkbox.mjs +1 -1
  19. package/fesm2022/shival99-z-ui-components-z-checkbox.mjs.map +1 -1
  20. package/fesm2022/shival99-z-ui-components-z-code.mjs +1 -1
  21. package/fesm2022/shival99-z-ui-components-z-code.mjs.map +1 -1
  22. package/fesm2022/shival99-z-ui-components-z-drawer.mjs +10 -3
  23. package/fesm2022/shival99-z-ui-components-z-drawer.mjs.map +1 -1
  24. package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs +1 -1
  25. package/fesm2022/shival99-z-ui-components-z-dropdown-menu.mjs.map +1 -1
  26. package/fesm2022/shival99-z-ui-components-z-editor.mjs +1 -1
  27. package/fesm2022/shival99-z-ui-components-z-editor.mjs.map +1 -1
  28. package/fesm2022/shival99-z-ui-components-z-empty.mjs +1 -1
  29. package/fesm2022/shival99-z-ui-components-z-empty.mjs.map +1 -1
  30. package/fesm2022/shival99-z-ui-components-z-filter.mjs +1 -1
  31. package/fesm2022/shival99-z-ui-components-z-filter.mjs.map +1 -1
  32. package/fesm2022/shival99-z-ui-components-z-gallery.mjs +3 -3
  33. package/fesm2022/shival99-z-ui-components-z-gallery.mjs.map +1 -1
  34. package/fesm2022/shival99-z-ui-components-z-icon.mjs +72 -5
  35. package/fesm2022/shival99-z-ui-components-z-icon.mjs.map +1 -1
  36. package/fesm2022/shival99-z-ui-components-z-input.mjs +2 -2
  37. package/fesm2022/shival99-z-ui-components-z-input.mjs.map +1 -1
  38. package/fesm2022/shival99-z-ui-components-z-kanban.mjs +1 -1
  39. package/fesm2022/shival99-z-ui-components-z-kanban.mjs.map +1 -1
  40. package/fesm2022/shival99-z-ui-components-z-menu.mjs +4 -3
  41. package/fesm2022/shival99-z-ui-components-z-menu.mjs.map +1 -1
  42. package/fesm2022/shival99-z-ui-components-z-metric-card.mjs +1 -1
  43. package/fesm2022/shival99-z-ui-components-z-metric-card.mjs.map +1 -1
  44. package/fesm2022/shival99-z-ui-components-z-modal.mjs +11 -3
  45. package/fesm2022/shival99-z-ui-components-z-modal.mjs.map +1 -1
  46. package/fesm2022/shival99-z-ui-components-z-pagination.mjs +1 -1
  47. package/fesm2022/shival99-z-ui-components-z-pagination.mjs.map +1 -1
  48. package/fesm2022/shival99-z-ui-components-z-popover.mjs +77 -9
  49. package/fesm2022/shival99-z-ui-components-z-popover.mjs.map +1 -1
  50. package/fesm2022/shival99-z-ui-components-z-select.mjs +2 -2
  51. package/fesm2022/shival99-z-ui-components-z-select.mjs.map +1 -1
  52. package/fesm2022/shival99-z-ui-components-z-steps.mjs +1 -1
  53. package/fesm2022/shival99-z-ui-components-z-steps.mjs.map +1 -1
  54. package/fesm2022/shival99-z-ui-components-z-switch.mjs +1 -1
  55. package/fesm2022/shival99-z-ui-components-z-switch.mjs.map +1 -1
  56. package/fesm2022/shival99-z-ui-components-z-table.mjs +1266 -422
  57. package/fesm2022/shival99-z-ui-components-z-table.mjs.map +1 -1
  58. package/fesm2022/shival99-z-ui-components-z-tabs.mjs +95 -5
  59. package/fesm2022/shival99-z-ui-components-z-tabs.mjs.map +1 -1
  60. package/fesm2022/shival99-z-ui-components-z-tags.mjs +1 -1
  61. package/fesm2022/shival99-z-ui-components-z-tags.mjs.map +1 -1
  62. package/fesm2022/shival99-z-ui-components-z-timeline.mjs +1 -1
  63. package/fesm2022/shival99-z-ui-components-z-timeline.mjs.map +1 -1
  64. package/fesm2022/shival99-z-ui-components-z-upload.mjs +3 -2
  65. package/fesm2022/shival99-z-ui-components-z-upload.mjs.map +1 -1
  66. package/fesm2022/shival99-z-ui-i18n.mjs +66 -8
  67. package/fesm2022/shival99-z-ui-i18n.mjs.map +1 -1
  68. package/package.json +7 -3
  69. package/types/shival99-z-ui-components-z-autocomplete.d.ts +1 -1
  70. package/types/shival99-z-ui-components-z-button.d.ts +7 -4
  71. package/types/shival99-z-ui-components-z-calendar.d.ts +12 -5
  72. package/types/shival99-z-ui-components-z-drawer.d.ts +8 -1
  73. package/types/shival99-z-ui-components-z-editor.d.ts +1 -1
  74. package/types/shival99-z-ui-components-z-icon.d.ts +27 -4
  75. package/types/shival99-z-ui-components-z-menu.d.ts +1 -0
  76. package/types/shival99-z-ui-components-z-modal.d.ts +10 -2
  77. package/types/shival99-z-ui-components-z-popover.d.ts +10 -3
  78. package/types/shival99-z-ui-components-z-select.d.ts +1 -1
  79. package/types/shival99-z-ui-components-z-table.d.ts +133 -53
  80. package/types/shival99-z-ui-components-z-tabs.d.ts +15 -7
  81. package/types/shival99-z-ui-components-z-upload.d.ts +1 -0
@@ -1,9 +1,10 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { EnvironmentProviders } from '@angular/core';
2
+ import { Type, EnvironmentProviders } from '@angular/core';
3
3
  import { ClassValue } from 'clsx';
4
4
  import * as saxBoldIcons from '@ng-icons/iconsax/bold';
5
5
  import * as saxOutlineIcons from '@ng-icons/iconsax/outline';
6
6
  import * as lucideIcons from '@ng-icons/lucide';
7
+ import * as animatedIcons from 'ng-animated-icons';
7
8
  import * as class_variance_authority_types from 'class-variance-authority/types';
8
9
  import { VariantProps } from 'class-variance-authority';
9
10
 
@@ -12,24 +13,46 @@ type ZSaxIcon = Extract<keyof typeof saxBoldIcons | keyof typeof saxOutlineIcons
12
13
  declare const Z_ICONS: {};
13
14
  type ZIcon = ZLucideIcon | ZSaxIcon;
14
15
 
16
+ type ZIconAnimationTrigger = 'manual' | 'hover' | 'focus' | 'interaction' | 'always';
15
17
  declare class ZIconComponent {
16
18
  readonly class: _angular_core.InputSignal<ClassValue>;
17
19
  readonly zType: _angular_core.InputSignal<ZIcon | undefined>;
20
+ readonly zAnimatedType: _angular_core.InputSignal<("accessibility" | "activity" | "play" | "airplay" | "check" | "alarm-clock-check" | "clock" | "alarm-clock" | "alarm-clock-off" | "align-horizontal-space-around" | "align-vertical-space-around" | "anvil" | "archive" | "arrow-big-down-dash" | "arrow-big-down" | "arrow-big-left-dash" | "arrow-big-left" | "arrow-big-right-dash" | "arrow-big-right" | "arrow-big-up-dash" | "arrow-big-up" | "arrow-down-01" | "arrow-down-10" | "arrow-down-a-z" | "arrow-down" | "arrow-down-left" | "arrow-down-right" | "arrow-down-z-a" | "arrow-left" | "arrow-left-right" | "arrow-right" | "arrow-right-left" | "arrow-up-01" | "arrow-up-10" | "arrow-up-a-z" | "arrow-up" | "arrow-up-left" | "arrow-up-right" | "arrow-up-z-a" | "award" | "x" | "axe" | "axis-3d" | "badge-alert" | "badge-check" | "badge-question-mark" | "battery-charging" | "battery-full" | "battery" | "battery-low" | "battery-medium" | "battery-warning" | "bean-off" | "beer-off" | "bell" | "bell-off" | "bell-ring" | "between-horizontal-end" | "between-horizontal-start" | "between-vertical-end" | "between-vertical-start" | "binary" | "blend" | "blocks" | "bluetooth-off" | "bold" | "bolt" | "bone" | "book-a" | "book-audio" | "book-check" | "book-dashed" | "book-down" | "book-headphones" | "heart" | "book-heart" | "book" | "book-image" | "key" | "book-key" | "book-lock" | "book-marked" | "minus" | "book-minus" | "book-open-check" | "book-open-text" | "plus" | "book-plus" | "book-text" | "book-type" | "book-up-2" | "book-up" | "user" | "book-user" | "book-x" | "bookmark-check" | "bookmark" | "bookmark-minus" | "bookmark-plus" | "bookmark-x" | "bot" | "bot-off" | "boxes" | "cog" | "brain-cog" | "briefcase-business" | "briefcase-conveyor-belt" | "briefcase" | "briefcase-medical" | "brush-cleaning" | "brush" | "bug-off" | "calendar-check-2" | "calendar-check" | "calendar-cog" | "calendar-days" | "calendar-off" | "calendar-sync" | "camera-off" | "candy-off" | "captions-off" | "cast" | "cctv" | "chart-bar-decreasing" | "chart-bar" | "chart-bar-increasing" | "chart-column-decreasing" | "chart-column" | "chart-column-increasing" | "chart-gantt" | "chart-line" | "chart-no-axes-column-decreasing" | "chart-no-axes-column" | "chart-no-axes-column-increasing" | "chart-no-axes-combined" | "chart-no-axes-gantt" | "chart-pie" | "chart-scatter" | "chart-spline" | "check-check" | "cherry" | "chevron-down" | "chevron-left" | "chevron-right" | "chevron-up" | "chevrons-down" | "chevrons-down-up" | "chevrons-left" | "chevrons-left-right" | "chevrons-right" | "chevrons-right-left" | "chevrons-up-down" | "chevrons-up" | "cigarette-off" | "circle-alert" | "circle-arrow-down" | "circle-arrow-left" | "circle-arrow-out-down-left" | "circle-arrow-out-down-right" | "circle-arrow-out-up-left" | "circle-arrow-out-up-right" | "circle-arrow-right" | "circle-arrow-up" | "circle-check-big" | "circle-check" | "circle-chevron-down" | "circle-chevron-left" | "circle-chevron-right" | "circle-chevron-up" | "circle-off" | "circle-parking-off" | "circle-plus" | "circle-question-mark" | "clapperboard" | "clipboard-check" | "clipboard" | "clipboard-list" | "pen" | "clipboard-pen" | "pen-line" | "clipboard-pen-line" | "clipboard-x" | "clock-10" | "clock-11" | "clock-12" | "clock-1" | "clock-2" | "clock-3" | "clock-4" | "clock-5" | "clock-6" | "clock-7" | "clock-8" | "clock-9" | "cloud-cog" | "download" | "cloud-download" | "cloud-moon" | "cloud-off" | "upload" | "cloud-upload" | "compass" | "contrast" | "copy-check" | "copy" | "cpu" | "crop" | "diamond-plus" | "dice-1" | "dice-2" | "dice-3" | "dice-4" | "dice-5" | "dice-6" | "diff" | "dna-off" | "droplet-off" | "drum" | "ear-off" | "eclipse" | "egg-off" | "expand" | "eye-off" | "file-chart-column" | "file-chart-column-increasing" | "file-chart-line" | "file-check-corner" | "file-check" | "file-cog" | "file-down" | "file-exclamation-point" | "file-minus" | "file-pen" | "file-pen-line" | "file-plus" | "file-question-mark" | "file-sliders" | "file-stack" | "terminal" | "file-terminal" | "file-up" | "fish-off" | "flag-off" | "flashlight-off" | "flask-conical-off" | "folder-check" | "folder-cog" | "folder-down" | "kanban" | "folder-kanban" | "folder-pen" | "folder-plus" | "folder-sync" | "folder-up" | "folder-x" | "frame" | "funnel-x" | "gallery-horizontal-end" | "gallery-horizontal" | "gallery-thumbnails" | "gallery-vertical-end" | "gallery-vertical" | "gauge" | "gavel" | "grid-2x2-check" | "grip-horizontal" | "grip" | "grip-vertical" | "hammer" | "hand-coins" | "hand-heart" | "hard-drive-download" | "hard-drive-upload" | "phone-off" | "headphone-off" | "heart-off" | "history" | "hop-off" | "house" | "wifi" | "house-wifi" | "image-down" | "image-off" | "image-up" | "images" | "infinity" | "key-round" | "key-square" | "keyboard" | "keyboard-off" | "landmark" | "layers" | "layout-dashboard" | "layout-grid" | "layout-panel-left" | "layout-panel-top" | "layout-template" | "lightbulb" | "lightbulb-off" | "link2-off" | "list-check" | "list-checks" | "list-restart" | "list-todo" | "loader-pinwheel" | "locate-off" | "log-out" | "mail-check" | "map-pin-check" | "map-pin-check-inside" | "pin-off" | "map-pin-off" | "maximize-2" | "maximize" | "megaphone-off" | "message-circle" | "message-circle-more" | "message-circle-off" | "message-circle-question-mark" | "message-circle-warning" | "message-square" | "message-square-more" | "message-square-off" | "mic-off" | "milk-off" | "minimize-2" | "minimize" | "monitor-check" | "monitor-cog" | "monitor-down" | "monitor-off" | "monitor-up" | "mouse-off" | "mouse-pointer-2" | "mouse-pointer" | "move-diagonal-2" | "move-diagonal" | "move-down" | "move-down-left" | "move-down-right" | "move-horizontal" | "move-left" | "move-right" | "move-up" | "move-up-left" | "move-up-right" | "move-vertical" | "navigation2-off" | "navigation-off" | "nfc" | "notebook-pen" | "nut-off" | "octagon-alert" | "orbit" | "package-check" | "paintbrush" | "panel-bottom-close" | "panel-bottom-open" | "panel-left-close" | "panel-left-open" | "panel-right-close" | "panel-right-open" | "panel-top-close" | "panel-top-open" | "paperclip" | "pen-off" | "pencil" | "pencil-line" | "pencil-off" | "pickaxe" | "plane" | "pointer-off" | "power-off" | "printer-check" | "rabbit" | "radar" | "radio" | "radio-tower" | "rainbow" | "redo-dot" | "redo" | "refresh-ccw-dot" | "refresh-ccw" | "refresh-cw" | "refresh-cw-off" | "rocket" | "rocking-chair" | "rotate-ccw" | "rotate-ccw-key" | "rotate-cw" | "route" | "route-off" | "rss" | "save-off" | "scan-text" | "scissors" | "search-check" | "search" | "send-horizontal" | "send" | "server-cog" | "server-off" | "settings" | "shield-alert" | "shield-check" | "shield-off" | "shield-plus" | "shield-question-mark" | "ship" | "ship-wheel" | "shopping-cart" | "shovel" | "shower-head" | "shrink" | "signal-high" | "signal" | "signal-low" | "signal-medium" | "signal-zero" | "signature" | "sliders-horizontal" | "sliders-vertical" | "smartphone-nfc" | "snowflake" | "sparkle" | "sparkles" | "speech" | "spell-check" | "square-arrow-down" | "square-arrow-down-left" | "square-arrow-down-right" | "square-arrow-left" | "square-arrow-out-down-left" | "square-arrow-out-down-right" | "square-arrow-out-up-left" | "square-arrow-out-up-right" | "square-arrow-right" | "square-arrow-up" | "square-arrow-up-left" | "square-arrow-up-right" | "square-chart-gantt" | "square-check-big" | "square-check" | "square-chevron-down" | "square-chevron-left" | "square-chevron-right" | "square-chevron-up" | "square-dashed-kanban" | "square-kanban" | "square-parking-off" | "square-pen" | "square-plus" | "square-scissors" | "square-stack" | "square-terminal" | "star" | "star-off" | "sun" | "sword" | "tag" | "telescope" | "text-align-center" | "text-cursor" | "text-cursor-input" | "text-search" | "thermometer" | "thumbs-down" | "thumbs-up" | "ticket-check" | "timer" | "timer-off" | "toggle-left" | "toggle-right" | "tornado" | "touchpad-off" | "trash-2" | "trash" | "triangle-alert" | "umbrella-off" | "undo-dot" | "undo" | "unfold-horizontal" | "unfold-vertical" | "unplug" | "user-check" | "user-cog" | "user-pen" | "user-round-check" | "user-round-cog" | "user-round" | "user-round-pen" | "vibrate" | "vibrate-off" | "video-off" | "volume-off" | "vote" | "waves" | "webhook-off" | "wheat-off" | "wifi-high" | "wifi-low" | "wifi-off" | "wifi-pen" | "wifi-zero" | "wine-off" | "zap-off") | undefined>;
21
+ readonly zAnimate: _angular_core.InputSignal<boolean>;
22
+ readonly zAnimationTrigger: _angular_core.InputSignal<ZIconAnimationTrigger>;
18
23
  readonly zSize: _angular_core.InputSignal<string | number | null | undefined>;
19
24
  readonly zStrokeWidth: _angular_core.InputSignal<number>;
20
25
  readonly zSvg: _angular_core.InputSignal<string>;
21
26
  protected readonly resolvedSvg: _angular_core.WritableSignal<string>;
27
+ protected readonly isHoverActive: _angular_core.WritableSignal<boolean>;
28
+ protected readonly isFocusActive: _angular_core.WritableSignal<boolean>;
29
+ protected readonly isTouchActive: _angular_core.WritableSignal<boolean>;
22
30
  protected readonly normalizedSize: _angular_core.Signal<string>;
23
31
  private readonly _svgFetchError;
24
32
  protected readonly zClasses: _angular_core.Signal<string>;
33
+ protected readonly animatedIcon: _angular_core.Signal<Type<unknown> | null>;
34
+ protected readonly animatedIconInputs: _angular_core.Signal<Record<string, unknown>>;
35
+ protected readonly shouldAnimate: _angular_core.Signal<boolean>;
25
36
  constructor();
26
37
  private _isRawSvg;
38
+ protected setHoverActive(isActive: boolean): void;
39
+ protected setFocusActive(isActive: boolean): void;
40
+ protected setTouchActive(isActive: boolean): void;
27
41
  private _isSvgPath;
28
42
  private _normalizeCustomSvg;
29
43
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ZIconComponent, never>;
30
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZIconComponent, "z-icon, [z-icon]", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "zType": { "alias": "zType"; "required": false; "isSignal": true; }; "zSize": { "alias": "zSize"; "required": false; "isSignal": true; }; "zStrokeWidth": { "alias": "zStrokeWidth"; "required": false; "isSignal": true; }; "zSvg": { "alias": "zSvg"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
44
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZIconComponent, "z-icon, [z-icon]", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "zType": { "alias": "zType"; "required": false; "isSignal": true; }; "zAnimatedType": { "alias": "zAnimatedType"; "required": false; "isSignal": true; }; "zAnimate": { "alias": "zAnimate"; "required": false; "isSignal": true; }; "zAnimationTrigger": { "alias": "zAnimationTrigger"; "required": false; "isSignal": true; }; "zSize": { "alias": "zSize"; "required": false; "isSignal": true; }; "zStrokeWidth": { "alias": "zStrokeWidth"; "required": false; "isSignal": true; }; "zSvg": { "alias": "zSvg"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
31
45
  }
32
46
 
47
+ type ZAnimatedIconExport = Extract<keyof typeof animatedIcons, `${string}Icon`>;
48
+ type ZBrokenAnimatedIconExport = 'AudioLinesIcon';
49
+ type ZSafeAnimatedIconExport = Exclude<ZAnimatedIconExport, ZBrokenAnimatedIconExport>;
50
+ type ZStripIconSuffix<T extends string> = T extends `${infer Name}Icon` ? Name : T;
51
+ type ZKebabCase<T extends string, Previous extends string = ''> = T extends `${infer Head}${infer Tail}` ? Tail extends Uncapitalize<Tail> ? Head extends `${number}` ? Previous extends '' | '-' | `${number}` ? `${Head}${ZKebabCase<Tail, Head>}` : `-${Head}${ZKebabCase<Tail, Head>}` : `${Lowercase<Head>}${ZKebabCase<Tail, Head>}` : `${Lowercase<Head>}-${ZKebabCase<Tail, '-'>}` : T;
52
+ type ZAnimatedIconName = ZKebabCase<ZStripIconSuffix<ZSafeAnimatedIconExport>>;
53
+ type ZAnimatedIcon = ZAnimatedIconName;
54
+ declare const Z_ANIMATED_ICONS: Record<ZAnimatedIcon, Type<unknown>>;
55
+
33
56
  declare const zIconVariants: (props?: ({
34
57
  zSize?: string | number | null | undefined;
35
58
  } & class_variance_authority_types.ClassProp) | undefined) => string;
@@ -37,5 +60,5 @@ type ZIconVariants = VariantProps<typeof zIconVariants>;
37
60
 
38
61
  declare function provideZIconLoader(): EnvironmentProviders;
39
62
 
40
- export { ZIconComponent, Z_ICONS, provideZIconLoader, zIconVariants };
41
- export type { ZIcon, ZIconVariants };
63
+ export { ZIconComponent, Z_ANIMATED_ICONS, Z_ICONS, provideZIconLoader, zIconVariants };
64
+ export type { ZAnimatedIcon, ZIcon, ZIconAnimationTrigger, ZIconVariants };
@@ -181,6 +181,7 @@ declare class ZMenuV2Component {
181
181
  private readonly _isMobile$;
182
182
  readonly isMobile: _angular_core.Signal<boolean>;
183
183
  protected readonly mobileLogo: _angular_core.Signal<string>;
184
+ protected readonly effectiveTitle: _angular_core.Signal<string>;
184
185
  protected readonly avatarSrc: _angular_core.Signal<string>;
185
186
  protected readonly visibleUserActions: _angular_core.Signal<ZMenuUserAction[]>;
186
187
  private readonly _routerPath;
@@ -33,6 +33,8 @@ declare class ZModalOptions<T, U> {
33
33
  zContent?: string | TemplateRef<T> | Type<T>;
34
34
  /** Custom CSS classes for the modal */
35
35
  class?: ClassValue;
36
+ /** Custom CSS classes for the modal body */
37
+ zBodyClass?: ClassValue;
36
38
  /** Data to be passed to the content component via Z_MODAL_DATA token */
37
39
  zData?: U;
38
40
  /**
@@ -170,6 +172,7 @@ declare class ZModalComponent<T, U> extends BasePortalOutlet implements OnDestro
170
172
  zAfterClose: _angular_core.OutputEmitterRef<void>;
171
173
  readonly zScrollbar: _angular_core.OutputEmitterRef<NgScrollbar>;
172
174
  readonly class: _angular_core.InputSignal<ClassValue>;
175
+ readonly zBodyClass: _angular_core.InputSignal<ClassValue>;
173
176
  readonly zVisible: _angular_core.ModelSignal<boolean>;
174
177
  readonly zTitle: _angular_core.InputSignal<string | TemplateRef<unknown> | undefined>;
175
178
  readonly zDescription: _angular_core.InputSignal<string | TemplateRef<unknown> | undefined>;
@@ -225,13 +228,18 @@ declare class ZModalComponent<T, U> extends BasePortalOutlet implements OnDestro
225
228
  protected readonly confirmIconColors: _angular_core.Signal<ZModalConfirmIconColors>;
226
229
  protected readonly effectiveTitle: _angular_core.Signal<string | TemplateRef<unknown> | undefined>;
227
230
  protected readonly effectiveDescription: _angular_core.Signal<string | TemplateRef<unknown> | undefined>;
231
+ protected readonly hasEffectiveDescription: _angular_core.Signal<boolean>;
232
+ protected readonly headerContentClasses: _angular_core.Signal<string>;
233
+ protected readonly effectiveBodyClass: _angular_core.Signal<ClassValue>;
234
+ protected readonly templateBodyClasses: _angular_core.Signal<string>;
235
+ protected readonly serviceBodyClasses: _angular_core.Signal<string>;
228
236
  protected readonly effectiveClosable: _angular_core.Signal<boolean>;
229
237
  protected readonly effectiveHideFooter: _angular_core.Signal<boolean | undefined>;
230
238
  protected readonly effectiveHideHeader: _angular_core.Signal<boolean | undefined>;
231
239
  protected readonly effectiveOkText: _angular_core.Signal<string | null | undefined>;
232
240
  protected readonly effectiveCancelText: _angular_core.Signal<string | null | undefined>;
233
241
  protected readonly effectiveOkDestructive: _angular_core.Signal<boolean | undefined>;
234
- protected readonly effectiveTypeOk: _angular_core.Signal<"info" | "warning" | "error" | "link" | "default" | "primary" | "secondary" | "destructive" | "success" | "outline" | "outline-primary" | "outline-secondary" | "outline-success" | "outline-info" | "outline-warning" | "outline-error" | "outline-destructive" | "outline-success-secondary" | "outline-info-secondary" | "outline-warning-secondary" | "outline-error-secondary" | "outline-destructive-secondary" | "outline-primary-secondary" | "ghost" | "ghost-primary" | "ghost-success" | "ghost-info" | "ghost-warning" | "ghost-error" | "ghost-destructive" | "subtle" | "subtle-primary" | "subtle-success" | "subtle-info" | "subtle-warning" | "subtle-destructive" | null | undefined>;
242
+ protected readonly effectiveTypeOk: _angular_core.Signal<"info" | "warning" | "error" | "default" | "primary" | "secondary" | "destructive" | "destructive-heartbeat" | "success" | "outline" | "outline-primary" | "outline-secondary" | "outline-success" | "outline-info" | "outline-warning" | "outline-error" | "outline-destructive" | "outline-shimmer" | "outline-success-secondary" | "outline-info-secondary" | "outline-warning-secondary" | "outline-error-secondary" | "outline-destructive-secondary" | "outline-primary-secondary" | "outline-primary-soft" | "outline-success-soft" | "outline-info-soft" | "outline-warning-soft" | "outline-error-soft" | "outline-destructive-soft" | "outline-primary-soft-border" | "outline-success-soft-border" | "outline-info-soft-border" | "outline-warning-soft-border" | "outline-error-soft-border" | "outline-destructive-soft-border" | "ghost" | "ghost-primary" | "ghost-success" | "ghost-info" | "ghost-warning" | "ghost-error" | "ghost-destructive" | "subtle" | "subtle-primary" | "subtle-success" | "subtle-info" | "subtle-warning" | "subtle-destructive" | "subtle-outline" | "subtle-primary-outline" | "subtle-success-outline" | "subtle-info-outline" | "subtle-warning-outline" | "subtle-destructive-outline" | "link" | null | undefined>;
235
243
  protected readonly effectiveOkDisabled: _angular_core.Signal<boolean | undefined>;
236
244
  protected readonly effectiveLoading: _angular_core.Signal<boolean>;
237
245
  protected readonly effectiveContentLoading: _angular_core.Signal<boolean>;
@@ -257,7 +265,7 @@ declare class ZModalComponent<T, U> extends BasePortalOutlet implements OnDestro
257
265
  private _clearCloseTimeout;
258
266
  private _disposeTemplateOverlay;
259
267
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ZModalComponent<any, any>, never>;
260
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZModalComponent<any, any>, "z-modal", ["zModal"], { "class": { "alias": "class"; "required": false; "isSignal": true; }; "zVisible": { "alias": "zVisible"; "required": false; "isSignal": true; }; "zTitle": { "alias": "zTitle"; "required": false; "isSignal": true; }; "zDescription": { "alias": "zDescription"; "required": false; "isSignal": true; }; "zWidth": { "alias": "zWidth"; "required": false; "isSignal": true; }; "zClosable": { "alias": "zClosable"; "required": false; "isSignal": true; }; "zMaskClosable": { "alias": "zMaskClosable"; "required": false; "isSignal": true; }; "zHideHeader": { "alias": "zHideHeader"; "required": false; "isSignal": true; }; "zHideFooter": { "alias": "zHideFooter"; "required": false; "isSignal": true; }; "zOkText": { "alias": "zOkText"; "required": false; "isSignal": true; }; "zCancelText": { "alias": "zCancelText"; "required": false; "isSignal": true; }; "zOkDestructive": { "alias": "zOkDestructive"; "required": false; "isSignal": true; }; "zOkDisabled": { "alias": "zOkDisabled"; "required": false; "isSignal": true; }; "zLoading": { "alias": "zLoading"; "required": false; "isSignal": true; }; "zContentLoading": { "alias": "zContentLoading"; "required": false; "isSignal": true; }; "zSkeletonRows": { "alias": "zSkeletonRows"; "required": false; "isSignal": true; }; "zOverlay": { "alias": "zOverlay"; "required": false; "isSignal": true; }; }, { "zOk": "zOk"; "zCancel": "zCancel"; "zAfterClose": "zAfterClose"; "zScrollbar": "zScrollbar"; "zVisible": "zVisibleChange"; }, ["customHeader", "customContent", "customFooter"], ["*"], true, never>;
268
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZModalComponent<any, any>, "z-modal", ["zModal"], { "class": { "alias": "class"; "required": false; "isSignal": true; }; "zBodyClass": { "alias": "zBodyClass"; "required": false; "isSignal": true; }; "zVisible": { "alias": "zVisible"; "required": false; "isSignal": true; }; "zTitle": { "alias": "zTitle"; "required": false; "isSignal": true; }; "zDescription": { "alias": "zDescription"; "required": false; "isSignal": true; }; "zWidth": { "alias": "zWidth"; "required": false; "isSignal": true; }; "zClosable": { "alias": "zClosable"; "required": false; "isSignal": true; }; "zMaskClosable": { "alias": "zMaskClosable"; "required": false; "isSignal": true; }; "zHideHeader": { "alias": "zHideHeader"; "required": false; "isSignal": true; }; "zHideFooter": { "alias": "zHideFooter"; "required": false; "isSignal": true; }; "zOkText": { "alias": "zOkText"; "required": false; "isSignal": true; }; "zCancelText": { "alias": "zCancelText"; "required": false; "isSignal": true; }; "zOkDestructive": { "alias": "zOkDestructive"; "required": false; "isSignal": true; }; "zOkDisabled": { "alias": "zOkDisabled"; "required": false; "isSignal": true; }; "zLoading": { "alias": "zLoading"; "required": false; "isSignal": true; }; "zContentLoading": { "alias": "zContentLoading"; "required": false; "isSignal": true; }; "zSkeletonRows": { "alias": "zSkeletonRows"; "required": false; "isSignal": true; }; "zOverlay": { "alias": "zOverlay"; "required": false; "isSignal": true; }; }, { "zOk": "zOk"; "zCancel": "zCancel"; "zAfterClose": "zAfterClose"; "zScrollbar": "zScrollbar"; "zVisible": "zVisibleChange"; }, ["customHeader", "customContent", "customFooter"], ["*"], true, never>;
261
269
  }
262
270
 
263
271
  declare class ZModalService {
@@ -15,6 +15,7 @@ interface ZPopoverControl {
15
15
  }
16
16
 
17
17
  declare class ZPopoverComponent implements OnInit, OnDestroy {
18
+ private static readonly _openPopovers;
18
19
  private readonly _overlay;
19
20
  private readonly _overlayPositionBuilder;
20
21
  private readonly _renderer;
@@ -35,6 +36,7 @@ declare class ZPopoverComponent implements OnInit, OnDestroy {
35
36
  readonly zDisabled: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
36
37
  readonly zOffset: _angular_core.InputSignal<number>;
37
38
  readonly zManualClose: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
39
+ readonly zOutsideClickClose: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
38
40
  readonly zScrollClose: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
39
41
  readonly zShowArrow: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
40
42
  private _overlayRef;
@@ -63,16 +65,18 @@ declare class ZPopoverComponent implements OnInit, OnDestroy {
63
65
  private _delay;
64
66
  private _setupScrollClose;
65
67
  private _showPopover;
68
+ private _isNestedPopoverTarget;
66
69
  private _setupResizeObserver;
67
70
  private _setupPopoverHover;
68
71
  private _hidePopover;
69
72
  private _clearHideTimeout;
70
73
  private _cleanupListeners;
71
74
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ZPopoverComponent, never>;
72
- 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; }; "zScrollClose": { "alias": "zScrollClose"; "required": false; "isSignal": true; }; "zShowArrow": { "alias": "zShowArrow"; "required": false; "isSignal": true; }; }, { "zShow": "zShow"; "zHide": "zHide"; "zControl": "zControl"; }, never, ["*"], true, never>;
75
+ 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"; }, never, ["*"], true, never>;
73
76
  }
74
77
 
75
78
  declare class ZPopoverDirective implements OnInit, OnDestroy {
79
+ private static readonly _openPopovers;
76
80
  readonly zContent: _angular_core.InputSignal<ZPopoverContent | null>;
77
81
  readonly zPosition: _angular_core.InputSignal<ZPopoverPosition>;
78
82
  readonly zTrigger: _angular_core.InputSignal<ZPopoverTrigger>;
@@ -81,9 +85,10 @@ declare class ZPopoverDirective implements OnInit, OnDestroy {
81
85
  readonly zHideDelay: _angular_core.InputSignal<number>;
82
86
  readonly zDisabled: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
83
87
  readonly zOffset: _angular_core.InputSignal<number>;
84
- readonly zPopoverWidth: _angular_core.InputSignal<number | "trigger" | "auto">;
88
+ readonly zPopoverWidth: _angular_core.InputSignal<number | "auto" | "trigger">;
85
89
  readonly zTriggerRef: _angular_core.InputSignal<HTMLElement | ElementRef<HTMLElement> | null>;
86
90
  readonly zManualClose: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
91
+ readonly zOutsideClickClose: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
87
92
  readonly zScrollClose: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
88
93
  readonly zShowArrow: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
89
94
  readonly zShow: _angular_core.OutputEmitterRef<void>;
@@ -118,6 +123,7 @@ declare class ZPopoverDirective implements OnInit, OnDestroy {
118
123
  hideImmediate(): void;
119
124
  toggle(): void;
120
125
  isOpen(): boolean;
126
+ updatePosition(): void;
121
127
  private _createOverlay;
122
128
  private _getWidthConfig;
123
129
  private _getTriggerElement;
@@ -128,13 +134,14 @@ declare class ZPopoverDirective implements OnInit, OnDestroy {
128
134
  private _setupScrollClose;
129
135
  private _delay;
130
136
  private _showPopover;
137
+ private _isNestedPopoverTarget;
131
138
  private _setupResizeObserver;
132
139
  private _setupPopoverHover;
133
140
  private _hidePopover;
134
141
  private _clearHideTimeout;
135
142
  private _cleanupListeners;
136
143
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ZPopoverDirective, never>;
137
- 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; }; "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; }; "zScrollClose": { "alias": "zScrollClose"; "required": false; "isSignal": true; }; "zShowArrow": { "alias": "zShowArrow"; "required": false; "isSignal": true; }; }, { "zShow": "zShow"; "zHide": "zHide"; "zHideStart": "zHideStart"; "zControl": "zControl"; "zPositionChange": "zPositionChange"; }, never, never, true, never>;
144
+ 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; }; "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"; }, never, never, true, never>;
138
145
  }
139
146
 
140
147
  declare const zPopoverVariants: (props?: ({
@@ -315,7 +315,7 @@ declare class ZTagClassesPipe implements PipeTransform {
315
315
 
316
316
  declare const zSelectVariants: (props?: ({
317
317
  zSize?: "sm" | "default" | "lg" | null | undefined;
318
- zStatus?: "default" | "open" | "error" | "disabled" | "readonly" | null | undefined;
318
+ zStatus?: "default" | "disabled" | "readonly" | "open" | "error" | null | undefined;
319
319
  } & class_variance_authority_types.ClassProp) | undefined) => string;
320
320
  declare const zSelectTagVariants: (props?: ({
321
321
  zSize?: "sm" | "default" | "lg" | null | undefined;
@@ -4,20 +4,19 @@ import * as _shival99_angular_virtual from '@shival99/angular-virtual';
4
4
  import * as _shival99_z_ui_components_z_input from '@shival99/z-ui/components/z-input';
5
5
  import { ZInputSize } from '@shival99/z-ui/components/z-input';
6
6
  import * as _angular_core from '@angular/core';
7
- import { TemplateRef, Type, AfterViewInit, ElementRef, OnDestroy, OnInit } from '@angular/core';
7
+ import { TemplateRef, Type, AfterViewInit, ElementRef, OnInit } from '@angular/core';
8
8
  import { CdkDragDrop, CdkDragEnd } from '@angular/cdk/drag-drop';
9
9
  import { ConnectedPosition } from '@angular/cdk/overlay';
10
+ import { ZPopoverDirective } from '@shival99/z-ui/components/z-popover';
10
11
  import { ClassValue } from 'clsx';
11
12
  import { NgScrollbar } from 'ngx-scrollbar';
12
13
  import { ZAutocompleteType, ZAutocompleteOption } from '@shival99/z-ui/components/z-autocomplete';
13
14
  import { ZButtonVariants } from '@shival99/z-ui/components/z-button';
14
15
  import { ZIcon, ZIconVariants } from '@shival99/z-ui/components/z-icon';
15
- import * as _shival99_z_ui_components_z_select from '@shival99/z-ui/components/z-select';
16
- import { ZSelectOption } from '@shival99/z-ui/components/z-select';
16
+ import { ZSelectOption, ZSelectConfig } from '@shival99/z-ui/components/z-select';
17
17
  import * as _shival99_z_ui_components_z_tooltip from '@shival99/z-ui/components/z-tooltip';
18
18
  import { ZTooltipConfig, ZTooltipContent } from '@shival99/z-ui/components/z-tooltip';
19
19
  import { ZExcelColumnConfig, ZExcelExportOptions } from '@shival99/z-ui/services';
20
- import * as _shival99_z_ui_components_z_table from '@shival99/z-ui/components/z-table';
21
20
  import { ZDateRange } from '@shival99/z-ui/components/z-calendar';
22
21
  import { ZDropdownMenuItem } from '@shival99/z-ui/components/z-dropdown-menu';
23
22
 
@@ -67,8 +66,34 @@ type ZTableCellContent<T> = string | number | TemplateRef<{
67
66
  type ZTableHeaderContent<T> = string | TemplateRef<unknown> | Type<unknown> | (() => string) | ((info: HeaderContext<T, unknown>) => string);
68
67
  /** Alias for ZTableColumnConfig — kept for backward compatibility */
69
68
  type ZTableColumn<T = unknown> = ZTableColumnConfig<T>;
70
- /** Available column filter input types */
71
- type ZTableFilterType = 'text' | 'number' | 'select' | 'multi-select' | 'date' | 'date-range' | 'range' | 'tags';
69
+ /** Available column filter value input hints */
70
+ type ZTableFilterValueType = 'text' | 'number';
71
+ type ZTableFilterUi = 'basic' | 'advanced' | 'custom';
72
+ type ZTableAdvancedFilterType = 'text' | 'number' | 'range' | 'date' | 'date-range' | 'time' | 'select' | 'multi-select' | 'tags';
73
+ type ZTableFilterOptionSource = 'faceted' | 'table';
74
+ /** Available column filter operators */
75
+ type ZTableFilterOperator = 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'equals' | 'notEquals' | 'greaterThan' | 'greaterThanOrEqual' | 'lessThan' | 'lessThanOrEqual' | 'empty' | 'notEmpty';
76
+ type ZTableFilterJoinOperator = 'and' | 'or';
77
+ interface ZTableFilterCondition {
78
+ joinWithPrev?: ZTableFilterJoinOperator;
79
+ operator: ZTableFilterOperator;
80
+ value?: unknown;
81
+ }
82
+ interface ZTableDraftFilterCondition {
83
+ readonly id: string;
84
+ readonly joinWithPrev?: ZTableFilterJoinOperator;
85
+ operator: ZTableFilterOperator | null;
86
+ value?: unknown;
87
+ }
88
+ interface ZTableFilterConditionView extends ZTableDraftFilterCondition {
89
+ readonly inputType: 'text' | 'number';
90
+ readonly isJoinGroupStart: boolean;
91
+ readonly isValueLess: boolean;
92
+ readonly joinLabelKey: string;
93
+ readonly joinTone: 'and' | 'or';
94
+ readonly operatorOptions: ZSelectOption<ZTableFilterOperator>[];
95
+ }
96
+ type ZTableLegacyAdvancedFilterType = Exclude<ZTableAdvancedFilterType, 'text' | 'number'>;
72
97
  /** Available inline cell edit input types */
73
98
  type ZTableEditType = 'text' | 'number' | 'select' | 'date' | 'checkbox' | 'textarea' | 'toggle' | 'autocomplete';
74
99
  /**
@@ -92,11 +117,28 @@ type ZTableCustomFilterFn<T> = (row: Row<T>, columnId: string, filterValue: unkn
92
117
  interface ZTableFilterConfig<T = unknown> {
93
118
  enabled?: boolean;
94
119
  mode?: ZTableMode;
95
- type?: ZTableFilterType;
120
+ valueType?: ZTableFilterValueType;
121
+ ui?: ZTableFilterUi;
122
+ advancedType?: ZTableAdvancedFilterType;
96
123
  options?: ZSelectOption[];
124
+ selectConfig?: Partial<ZSelectConfig<unknown>>;
125
+ optionSource?: ZTableFilterOptionSource;
97
126
  allowClear?: boolean;
127
+ label?: string;
98
128
  placeholder?: string;
99
129
  filterFn?: ZTableBuiltInFilterFn | ZTableCustomFilterFn<T>;
130
+ /**
131
+ * @deprecated Dùng `advancedType` thay thế.
132
+ */
133
+ type?: ZTableAdvancedFilterType;
134
+ /**
135
+ * @deprecated Dùng `advancedType` thay thế.
136
+ */
137
+ filterType?: ZTableAdvancedFilterType;
138
+ /**
139
+ * @deprecated Dùng `options` thay thế.
140
+ */
141
+ filterOptions?: ZSelectOption[];
100
142
  }
101
143
  type ZTableEditSize = 'sm' | 'default' | 'lg';
102
144
  interface ZTableEditConfig<T = unknown> {
@@ -150,29 +192,6 @@ interface ZTableEditConfig<T = unknown> {
150
192
  /** Allow typing custom values when no options match. Default: false */
151
193
  autocompleteAllowCustomValue?: boolean;
152
194
  }
153
- /** Minimal column info stored alongside saved config for cache invalidation */
154
- interface ZTableSavedColumnInfo {
155
- id: string;
156
- accessorKey?: string;
157
- }
158
- /**
159
- * Shape of the persisted table configuration (via ZCacheService).
160
- * Restored when a table with matching zKey re-mounts.
161
- * columnInfo is used to detect schema changes and invalidate stale caches.
162
- */
163
- interface ZTableSavedConfig {
164
- columnOrder: string[];
165
- columnSizing: Record<string, number>;
166
- columnPinning: {
167
- left?: string[];
168
- right?: string[];
169
- };
170
- columnVisibility: Record<string, boolean>;
171
- columnInfo: ZTableSavedColumnInfo[];
172
- showHeaderFooterShadow: boolean;
173
- showHorizontalBorder: boolean;
174
- showVerticalBorder: boolean;
175
- }
176
195
  /**
177
196
  * Imperative control handle emitted via `zControl` output.
178
197
  * Allows parent components to programmatically manipulate table state
@@ -663,6 +682,10 @@ interface ZTableConfig<T> {
663
682
  /** Template rendered during loading state */
664
683
  loadingTemplate?: TemplateRef<void>;
665
684
  getRowCanExpand?: (row: Row<T>) => boolean;
685
+ /** Fixed table width. Defaults to the available width of the parent container. */
686
+ width?: string;
687
+ /** Fixed table height. Keeps the horizontal scrollbar at the bottom when the table has few rows. */
688
+ height?: string;
666
689
  maxHeight?: string;
667
690
  minHeight?: string;
668
691
  /** Debounce time (ms) for async state updates; defaults to Z_DEFAULT_DEBOUNCE_TIME */
@@ -876,6 +899,7 @@ declare class ZTableComponent<T> implements AfterViewInit {
876
899
  protected readonly virtualRightSpacerWidth: _angular_core.Signal<number>;
877
900
  protected readonly renderedColumnCount: _angular_core.Signal<number>;
878
901
  protected readonly orderedLeafColumns: _angular_core.Signal<Column<T, unknown>[]>;
902
+ protected readonly hideableColumns: _angular_core.Signal<Column<T, unknown>[]>;
879
903
  protected readonly orderedHeaderGroups: _angular_core.Signal<{
880
904
  id: string;
881
905
  headers: _tanstack_angular_table.Header<T, unknown>[];
@@ -959,7 +983,10 @@ declare class ZTableComponent<T> implements AfterViewInit {
959
983
  hasRightPinnedColumns(): boolean;
960
984
  onTbodyScroll(event: Event): void;
961
985
  private _syncScrollLeft;
962
- /** Handles sort click; auto-adds shiftKey for multi-sort when enabled */
986
+ /**
987
+ * @deprecated Header sort now lives in the column filter popover.
988
+ * Giữ tạm để các consumer/template cũ còn compile trong giai đoạn chuyển đổi.
989
+ */
963
990
  handleSort(event: Event, handler?: (event: unknown) => void): void;
964
991
  onColumnDrop(event: CdkDragDrop<string[]>): void;
965
992
  onRowDragStarted(): void;
@@ -982,6 +1009,9 @@ declare class ZTableComponent<T> implements AfterViewInit {
982
1009
  onToggleColumnVisibility(columnId: string): void;
983
1010
  onToggleColumnPin(columnId: string, position: 'left' | 'right'): void;
984
1011
  handleColumnPin(columnId: string, position: 'left' | 'right' | false): void;
1012
+ toggleColumnVisibility(columnId: string): void;
1013
+ refreshColumnPopoverPositions(...popovers: ZPopoverDirective[]): void;
1014
+ private _isColumnHiddenFromVisibilityMenu;
985
1015
  moveColumnLeft(columnId: string): void;
986
1016
  moveColumnRight(columnId: string): void;
987
1017
  isFirstMovableColumn(columnId: string): boolean;
@@ -1013,35 +1043,85 @@ declare class ZTableComponent<T> implements AfterViewInit {
1013
1043
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZTableComponent<any>, "z-table", ["zTable"], { "zClass": { "alias": "zClass"; "required": false; "isSignal": true; }; "zConfig": { "alias": "zConfig"; "required": false; "isSignal": true; }; "zLoading": { "alias": "zLoading"; "required": false; "isSignal": true; }; "zKey": { "alias": "zKey"; "required": false; "isSignal": true; }; "zVariant": { "alias": "zVariant"; "required": false; "isSignal": true; }; }, { "zChange": "zChange"; "zControl": "zControl"; }, never, never, true, never>;
1014
1044
  }
1015
1045
 
1016
- declare class ZTableFilterComponent<T> implements OnDestroy {
1046
+ declare class ZTableFilterComponent<T> {
1017
1047
  readonly zColumn: _angular_core.InputSignal<Column<unknown, unknown>>;
1018
1048
  readonly zTable: _angular_core.InputSignal<Table<T>>;
1019
- private _debounceTimeout;
1020
- private readonly _debounceMs;
1021
1049
  private readonly _columnDef;
1022
- readonly filterType: _angular_core.Signal<_shival99_z_ui_components_z_table.ZTableFilterType | undefined>;
1023
- readonly columnFilterValue: _angular_core.Signal<unknown>;
1024
- readonly minValue: _angular_core.Signal<number | "">;
1025
- readonly maxValue: _angular_core.Signal<number | "">;
1026
- readonly rangeMinValue: _angular_core.Signal<any>;
1027
- readonly rangeMaxValue: _angular_core.Signal<any>;
1028
- readonly dateValue: _angular_core.Signal<Date | null>;
1029
- readonly dateRangeValue: _angular_core.Signal<ZDateRange | null>;
1030
- readonly selectValue: _angular_core.Signal<{} | null>;
1031
- readonly multiSelectValue: _angular_core.Signal<any[]>;
1032
- readonly selectOptions: _angular_core.Signal<_shival99_z_ui_components_z_select.ZSelectOption<unknown>[] | {
1050
+ private readonly _appliedFilterConditions;
1051
+ private readonly _appliedLegacyFilterValue;
1052
+ private readonly _appliedSortState;
1053
+ protected readonly sortOptions: _angular_core.Signal<ZSelectOption<string>[]>;
1054
+ protected readonly draftFilters: _angular_core.WritableSignal<ZTableDraftFilterCondition[]>;
1055
+ protected readonly draftLegacyFilterValue: _angular_core.WritableSignal<unknown>;
1056
+ protected readonly draftSortState: _angular_core.WritableSignal<false | "asc" | "desc">;
1057
+ protected readonly columnFilterValue: _angular_core.Signal<unknown>;
1058
+ protected readonly effectiveFilterValue: _angular_core.Signal<unknown>;
1059
+ protected readonly sortState: _angular_core.Signal<false | _tanstack_angular_table.SortDirection>;
1060
+ protected readonly effectiveSortState: _angular_core.Signal<false | _tanstack_angular_table.SortDirection>;
1061
+ protected readonly canSort: _angular_core.Signal<boolean>;
1062
+ protected readonly canFilter: _angular_core.Signal<boolean>;
1063
+ protected readonly filterUi: _angular_core.Signal<ZTableFilterUi>;
1064
+ protected readonly advancedType: _angular_core.Signal<ZTableAdvancedFilterType>;
1065
+ protected readonly isAdvancedUi: _angular_core.Signal<boolean>;
1066
+ protected readonly isBuilderMode: _angular_core.Signal<boolean>;
1067
+ protected readonly legacyAdvancedType: _angular_core.Signal<ZTableLegacyAdvancedFilterType>;
1068
+ protected readonly popoverContentClass: _angular_core.Signal<string>;
1069
+ protected readonly popoverWidth: _angular_core.Signal<number>;
1070
+ protected readonly sortLabelKey: _angular_core.Signal<string>;
1071
+ protected readonly legacyFilterLabelKey: _angular_core.Signal<string>;
1072
+ protected readonly filterConditions: _angular_core.Signal<ZTableFilterCondition[]>;
1073
+ protected readonly filterConditionViews: _angular_core.Signal<ZTableFilterConditionView[]>;
1074
+ protected readonly canAddFilterCondition: _angular_core.Signal<boolean>;
1075
+ protected readonly filterBadgeCount: _angular_core.Signal<number>;
1076
+ protected readonly hasFilterValue: _angular_core.Signal<boolean>;
1077
+ protected readonly isActive: _angular_core.Signal<boolean>;
1078
+ protected readonly draftSortValue: _angular_core.Signal<"asc" | "desc" | "none">;
1079
+ protected readonly rangeMinValue: _angular_core.Signal<any>;
1080
+ protected readonly rangeMaxValue: _angular_core.Signal<any>;
1081
+ protected readonly dateValue: _angular_core.Signal<Date | null>;
1082
+ protected readonly timeValue: _angular_core.Signal<Date | null>;
1083
+ protected readonly dateRangeValue: _angular_core.Signal<ZDateRange | null>;
1084
+ protected readonly selectValue: _angular_core.Signal<{} | null>;
1085
+ protected readonly multiSelectValue: _angular_core.Signal<any[]>;
1086
+ protected readonly selectOptions: _angular_core.Signal<{
1033
1087
  label: string;
1034
- value: string;
1088
+ value: any;
1035
1089
  }[]>;
1036
- ngOnDestroy(): void;
1090
+ protected readonly selectConfig: _angular_core.Signal<Partial<ZSelectConfig<unknown>>>;
1091
+ syncDraft(): void;
1092
+ toggleBasicSort(): void;
1093
+ addDraftFilter(joinWithPrev: ZTableFilterJoinOperator): void;
1094
+ removeDraftFilter(id: string): void;
1095
+ updateFilterOperator(id: string, operator: ZTableFilterOperator | null): void;
1096
+ updateFilterValue(id: string, value: unknown): void;
1097
+ updateDraftSort(value: string | null): void;
1098
+ resetFilters(): void;
1099
+ applyFilters(): void;
1037
1100
  onMinChangeDebounced(value: string | number | null): void;
1038
1101
  onMaxChangeDebounced(value: string | number | null): void;
1039
- onTextChangeDebounced(value: string | number | null): void;
1040
- onSelectChange(value: unknown): void;
1041
- onMultiSelectChange(value: unknown[]): void;
1042
1102
  onDateChange(value: Date | null): void;
1103
+ onTimeChange(value: Date | null): void;
1043
1104
  onDateRangeChange(value: ZDateRange | null): void;
1044
- private _debounce;
1105
+ onSelectChange(value: unknown): void;
1106
+ onMultiSelectChange(value: unknown[]): void;
1107
+ private _normalizeFilterUi;
1108
+ private _normalizeAdvancedType;
1109
+ private _defaultLegacyFilterLabelKey;
1110
+ private _normalizeFilterConditions;
1111
+ private _isFilterCondition;
1112
+ private _operatorDefinitions;
1113
+ private _operatorOptions;
1114
+ private _operatorOptionsForDraft;
1115
+ private _conditionJoinTone;
1116
+ private _withDraftId;
1117
+ private _createDraftId;
1118
+ private _isApplicableCondition;
1119
+ private _isValueLessOperator;
1120
+ private _applySortState;
1121
+ private _normalizeSortState;
1122
+ private _hasLegacyFilterValue;
1123
+ private _normalizeLegacyFilterValue;
1124
+ private _syncAppliedStateFromColumn;
1045
1125
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ZTableFilterComponent<any>, never>;
1046
1126
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZTableFilterComponent<any>, "z-table-filter", never, { "zColumn": { "alias": "zColumn"; "required": true; "isSignal": true; }; "zTable": { "alias": "zTable"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
1047
1127
  }
@@ -1063,7 +1143,7 @@ declare class ZTableActionsComponent<T = unknown> {
1063
1143
  readonly zConfig: _angular_core.InputSignal<ZTableActionColumnConfig<T>>;
1064
1144
  readonly zRow: _angular_core.InputSignal<T>;
1065
1145
  readonly zRowId: _angular_core.InputSignal<string>;
1066
- readonly zDropdownButtonSize: _angular_core.InputSignal<"sm" | "default" | "lg" | "xs" | "xl" | null | undefined>;
1146
+ readonly zDropdownButtonSize: _angular_core.InputSignal<"default" | "sm" | "lg" | "xs" | "xl" | null | undefined>;
1067
1147
  readonly zActionClick: _angular_core.OutputEmitterRef<ZTableActionClickEvent<T>>;
1068
1148
  protected readonly allActions: _angular_core.Signal<ZTableActionItem<T>[]>;
1069
1149
  protected readonly shouldShowAsButtons: _angular_core.Signal<boolean>;
@@ -1213,4 +1293,4 @@ declare const findColumnConfig: <T>(columnId: string, columns: ZTableColumnConfi
1213
1293
  declare function columnConfigToColumnDef<T>(config: ZTableColumnConfig<T>): ColumnDef<T>;
1214
1294
 
1215
1295
  export { ZTableActionsComponent, ZTableComponent, ZTableEditCellComponent, ZTableFilterComponent, ZTableIconTextComponent, columnConfigToColumnDef, findColumnConfig, getBodyConfig, getFooterConfig, getHeaderConfig, isBodyConfig, isFooterConfig, isHeaderConfig };
1216
- export type { ZTableActionBodyConfig, ZTableActionClickEvent, ZTableActionColumnConfig, ZTableActionItem, ZTableActionList, ZTableBulkActionClickEvent, ZTableBulkActionConfig, ZTableBulkActionContext, ZTableBulkActionHandlerContext, ZTableBulkActionItem, ZTableBulkActionList, ZTableBulkActionOptions, ZTableBulkActionViewItem, ZTableCellEditChange, ZTableCellEditEvent, ZTableChangeEvent, ZTableColumn, ZTableColumnConfig, ZTableConfig, ZTableControl, ZTableEditCellChangeEvent, ZTableEditConfig, ZTableEditSize, ZTableEditType, ZTableExcelExportConfig, ZTableExcelExportContext, ZTableExcelExportScope, ZTableFilterChangeEvent, ZTableFilterConfig, ZTableFilterType, ZTablePageChangeEvent, ZTablePaginationConfig, ZTableRowExpandEvent, ZTableRowSelectEvent, ZTableSavedConfig, ZTableSearchChangeEvent, ZTableSearchConfig, ZTableSortChangeEvent, ZTableSortConfig };
1296
+ export type { ZTableActionBodyConfig, ZTableActionClickEvent, ZTableActionColumnConfig, ZTableActionItem, ZTableActionList, ZTableAdvancedFilterType, ZTableBulkActionClickEvent, ZTableBulkActionConfig, ZTableBulkActionContext, ZTableBulkActionHandlerContext, ZTableBulkActionItem, ZTableBulkActionList, ZTableBulkActionOptions, ZTableBulkActionViewItem, ZTableCellEditChange, ZTableCellEditEvent, ZTableChangeEvent, ZTableColumn, ZTableColumnConfig, ZTableConfig, ZTableControl, ZTableEditCellChangeEvent, ZTableEditConfig, ZTableEditSize, ZTableEditType, ZTableExcelExportConfig, ZTableExcelExportContext, ZTableExcelExportScope, ZTableFilterChangeEvent, ZTableFilterCondition, ZTableFilterConfig, ZTableFilterJoinOperator, ZTableFilterOperator, ZTableFilterOptionSource, ZTableFilterUi, ZTableFilterValueType, ZTablePageChangeEvent, ZTablePaginationConfig, ZTableRowExpandEvent, ZTableRowSelectEvent, ZTableSearchChangeEvent, ZTableSearchConfig, ZTableSortChangeEvent, ZTableSortConfig };
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { TemplateRef, AfterViewInit, OnDestroy, ElementRef } from '@angular/core';
2
+ import { TemplateRef, OnInit, AfterViewInit, OnDestroy, ElementRef } from '@angular/core';
3
3
  import { ClassValue } from 'clsx';
4
4
  import { ZIcon } from '@shival99/z-ui/components/z-icon';
5
5
  import * as class_variance_authority_types from 'class-variance-authority/types';
@@ -20,11 +20,11 @@ interface ZTab {
20
20
  badge?: string | number;
21
21
  template?: TemplateRef<unknown>;
22
22
  }
23
- type ZTabsType = 'line' | 'enclosed' | 'enclosed-solid' | 'soft' | 'pill' | 'solid' | 'underline' | 'code-line';
23
+ type ZTabsType = 'line' | 'default' | 'enclosed' | 'enclosed-solid' | 'soft' | 'pill' | 'solid' | 'underline' | 'underlined' | 'badge' | 'sharp' | 'vertical-sharp' | 'code-line';
24
24
  type ZTabsSize = 'sm' | 'default' | 'lg';
25
25
  type ZTabsOrientation = 'horizontal' | 'vertical';
26
26
 
27
- declare class ZTabsComponent implements AfterViewInit, OnDestroy {
27
+ declare class ZTabsComponent implements OnInit, AfterViewInit, OnDestroy {
28
28
  readonly tabPanels: _angular_core.Signal<readonly ZTabPanelDirective[]>;
29
29
  readonly tabsListContainer: _angular_core.Signal<ElementRef<HTMLDivElement> | undefined>;
30
30
  readonly tabButtons: _angular_core.Signal<readonly ElementRef<HTMLButtonElement>[]>;
@@ -37,6 +37,9 @@ declare class ZTabsComponent implements AfterViewInit, OnDestroy {
37
37
  readonly zDestroyInactive: _angular_core.InputSignal<boolean>;
38
38
  readonly zTabsOnly: _angular_core.InputSignal<boolean>;
39
39
  readonly zReloadable: _angular_core.InputSignal<boolean>;
40
+ readonly zEmitOnActiveClick: _angular_core.InputSignal<boolean>;
41
+ readonly zCache: _angular_core.InputSignal<boolean>;
42
+ readonly zCacheKey: _angular_core.InputSignal<string>;
40
43
  readonly activeTab: _angular_core.ModelSignal<string>;
41
44
  readonly zTabChange: _angular_core.OutputEmitterRef<string>;
42
45
  protected readonly loadedTabs: _angular_core.WritableSignal<Set<string>>;
@@ -44,7 +47,9 @@ declare class ZTabsComponent implements AfterViewInit, OnDestroy {
44
47
  protected readonly canScrollRight: _angular_core.WritableSignal<boolean>;
45
48
  protected readonly panelRenderStates: _angular_core.Signal<Map<string, boolean>>;
46
49
  private _resizeObserver?;
50
+ private readonly _cacheInstanceId;
47
51
  constructor();
52
+ ngOnInit(): void;
48
53
  ngAfterViewInit(): void;
49
54
  ngOnDestroy(): void;
50
55
  protected readonly tabsClasses: _angular_core.Signal<string>;
@@ -57,18 +62,21 @@ declare class ZTabsComponent implements AfterViewInit, OnDestroy {
57
62
  protected scrollRight(): void;
58
63
  protected onTabsScroll(): void;
59
64
  private _setupResizeObserver;
65
+ private _restoreActiveTabFromCache;
66
+ private _saveActiveTabToCache;
67
+ private _getCacheKey;
60
68
  protected scrollToActiveDropdownItem(): void;
61
69
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ZTabsComponent, never>;
62
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZTabsComponent, "z-tabs", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "zTabs": { "alias": "zTabs"; "required": true; "isSignal": true; }; "zType": { "alias": "zType"; "required": false; "isSignal": true; }; "zSize": { "alias": "zSize"; "required": false; "isSignal": true; }; "zOrientation": { "alias": "zOrientation"; "required": false; "isSignal": true; }; "zLazy": { "alias": "zLazy"; "required": false; "isSignal": true; }; "zDestroyInactive": { "alias": "zDestroyInactive"; "required": false; "isSignal": true; }; "zTabsOnly": { "alias": "zTabsOnly"; "required": false; "isSignal": true; }; "zReloadable": { "alias": "zReloadable"; "required": false; "isSignal": true; }; "activeTab": { "alias": "activeTab"; "required": false; "isSignal": true; }; }, { "activeTab": "activeTabChange"; "zTabChange": "zTabChange"; }, ["tabPanels"], never, true, never>;
70
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZTabsComponent, "z-tabs", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "zTabs": { "alias": "zTabs"; "required": true; "isSignal": true; }; "zType": { "alias": "zType"; "required": false; "isSignal": true; }; "zSize": { "alias": "zSize"; "required": false; "isSignal": true; }; "zOrientation": { "alias": "zOrientation"; "required": false; "isSignal": true; }; "zLazy": { "alias": "zLazy"; "required": false; "isSignal": true; }; "zDestroyInactive": { "alias": "zDestroyInactive"; "required": false; "isSignal": true; }; "zTabsOnly": { "alias": "zTabsOnly"; "required": false; "isSignal": true; }; "zReloadable": { "alias": "zReloadable"; "required": false; "isSignal": true; }; "zEmitOnActiveClick": { "alias": "zEmitOnActiveClick"; "required": false; "isSignal": true; }; "zCache": { "alias": "zCache"; "required": false; "isSignal": true; }; "zCacheKey": { "alias": "zCacheKey"; "required": false; "isSignal": true; }; "activeTab": { "alias": "activeTab"; "required": false; "isSignal": true; }; }, { "activeTab": "activeTabChange"; "zTabChange": "zTabChange"; }, ["tabPanels"], never, true, never>;
63
71
  }
64
72
 
65
73
  declare const zTabsVariants: (props?: ({
66
- zType?: "line" | "enclosed" | "enclosed-solid" | "soft" | "pill" | "solid" | "underline" | "code-line" | null | undefined;
74
+ zType?: "line" | "default" | "enclosed" | "enclosed-solid" | "soft" | "pill" | "solid" | "underline" | "underlined" | "badge" | "sharp" | "vertical-sharp" | "code-line" | null | undefined;
67
75
  zOrientation?: "horizontal" | "vertical" | null | undefined;
68
76
  } & class_variance_authority_types.ClassProp) | undefined) => string;
69
77
  declare const zTabItemVariants: (props?: ({
70
- zType?: "line" | "enclosed" | "enclosed-solid" | "soft" | "pill" | "solid" | "underline" | "code-line" | null | undefined;
71
- zSize?: "sm" | "default" | "lg" | null | undefined;
78
+ zType?: "line" | "default" | "enclosed" | "enclosed-solid" | "soft" | "pill" | "solid" | "underline" | "underlined" | "badge" | "sharp" | "vertical-sharp" | "code-line" | null | undefined;
79
+ zSize?: "default" | "sm" | "lg" | null | undefined;
72
80
  zOrientation?: "horizontal" | "vertical" | null | undefined;
73
81
  } & class_variance_authority_types.ClassProp) | undefined) => string;
74
82
  type ZTabsVariants = VariantProps<typeof zTabsVariants>;