s4y-ui 5.2.1 → 5.2.2

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 (33) hide show
  1. package/fesm2022/s4y-ui.mjs +1174 -32
  2. package/fesm2022/s4y-ui.mjs.map +1 -1
  3. package/lib/components/button/button.component.d.ts +4 -3
  4. package/lib/components/confirmation/confirmation.component.d.ts +23 -0
  5. package/lib/components/confirmation/confirmation.service.d.ts +34 -0
  6. package/lib/components/dynamic-dialog/dynamic-dialog.component.d.ts +4 -2
  7. package/lib/components/dynamic-dialog/dynamic-dialog.ref.d.ts +23 -1
  8. package/lib/components/dynamic-dialog/dynamic-dialog.service.d.ts +8 -6
  9. package/lib/components/dynamic-dialog/dynamic-dialog.tokens.d.ts +1 -1
  10. package/lib/components/dynamic-dialog/dynamic-dialog.util.d.ts +3 -0
  11. package/lib/components/dynamic-loading-global/dynamic-loading-global.component.d.ts +6 -0
  12. package/lib/components/dynamic-loading-global/dynamic-loading-global.service.d.ts +13 -0
  13. package/lib/components/dynamic-loading-global/index.d.ts +1 -0
  14. package/lib/components/dynamic-tooltip/dynamic-tooltip.component.d.ts +6 -0
  15. package/lib/components/dynamic-tooltip/dynamic-tooltip.directive.d.ts +26 -0
  16. package/lib/components/image/components/image-preview/image-preview.component.d.ts +22 -0
  17. package/lib/components/image/image.component.d.ts +31 -0
  18. package/lib/components/image/image.service.d.ts +12 -0
  19. package/lib/components/image/index.d.ts +2 -0
  20. package/lib/components/modal/modal.component.d.ts +3 -1
  21. package/lib/components/rating/rating.component.d.ts +40 -0
  22. package/lib/components/search-bar/search-bar.component.d.ts +6 -1
  23. package/lib/components/summary-card/summary-card.component.d.ts +22 -0
  24. package/lib/components/tag/tag.component.d.ts +28 -0
  25. package/package.json +1 -1
  26. package/public-api.d.ts +7 -0
  27. package/src/assets/icons/fullscreen-exit-line.svg +1 -0
  28. package/src/assets/icons/fullscreen-line.svg +1 -0
  29. package/src/assets/icons/refresh-line.svg +1 -0
  30. package/src/assets/icons/zoom-in-line.svg +1 -0
  31. package/src/assets/icons/zoom-out-line.svg +1 -0
  32. package/src/scss/styles.scss +255 -2
  33. package/src/scss/styles.scss.map +1 -1
@@ -6,12 +6,13 @@ export declare class ButtonComponent implements AfterViewInit {
6
6
  outlined: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
7
7
  loading: import("@angular/core").InputSignal<boolean>;
8
8
  size: import("@angular/core").InputSignal<tButtonSize>;
9
+ roundend: import("@angular/core").InputSignal<boolean>;
9
10
  variant: import("@angular/core").InputSignal<tButtonVariant>;
10
11
  fullWidth: import("@angular/core").InputSignal<boolean>;
11
12
  iconAligned: import("@angular/core").InputSignal<boolean>;
12
13
  ngAfterViewInit(): void;
13
- private get isDisabled();
14
- private variantClass;
14
+ protected get isDisabled(): boolean;
15
+ protected variantClass: import("@angular/core").Signal<"btn-primary" | "btn-secondary" | "btn-danger" | "btn-success" | "btn-info" | "btn-gray">;
15
16
  static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
16
- static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "button[s4yButton], a[s4yButton]", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "outlined": { "alias": "outlined"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "iconAligned": { "alias": "iconAligned"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "button[s4yButton], a[s4yButton]", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "outlined": { "alias": "outlined"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "roundend": { "alias": "roundend"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "iconAligned": { "alias": "iconAligned"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
17
18
  }
@@ -0,0 +1,23 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import { IConfirmationProps } from './confirmation.service';
3
+ import { SafeHtml } from '@angular/platform-browser';
4
+ import * as i0 from "@angular/core";
5
+ export declare class ConfirmationComponent {
6
+ private sanitizer;
7
+ props?: IConfirmationProps;
8
+ onCancelClick?: () => Promise<void>;
9
+ onConfirmClick?: () => Promise<void>;
10
+ confirmLoading: boolean;
11
+ cancelLoading: boolean;
12
+ loading: boolean;
13
+ get isTemplate(): boolean;
14
+ get isHtml(): boolean;
15
+ get isText(): boolean;
16
+ get template(): TemplateRef<any> | undefined;
17
+ get safeHtml(): SafeHtml | undefined;
18
+ get textContent(): string | undefined;
19
+ handleCancel(): Promise<void>;
20
+ handleConfirm(): Promise<void>;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmationComponent, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<ConfirmationComponent, "s4y-confirmation", never, {}, {}, never, never, true, never>;
23
+ }
@@ -0,0 +1,34 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export interface IConfirmationProps {
5
+ iconUri?: string;
6
+ title: string;
7
+ content?: string | TemplateRef<any>;
8
+ contentType?: 'text' | 'html';
9
+ width?: string;
10
+ height?: string;
11
+ confirmationProps?: IConfirmationBtnProps;
12
+ cancelProps?: IConfirmationBtnProps;
13
+ onCancel?: (() => Promise<boolean> | Observable<boolean> | boolean) | Promise<boolean> | Observable<boolean> | boolean;
14
+ onConfirm?: (() => Promise<boolean> | Observable<boolean> | boolean) | Promise<boolean> | Observable<boolean> | boolean;
15
+ }
16
+ export interface IConfirmationBtnProps {
17
+ text: string;
18
+ }
19
+ export interface IConfirmationResult {
20
+ confirmed: boolean;
21
+ data?: any;
22
+ }
23
+ export declare class ConfirmationService {
24
+ private readonly overlay;
25
+ constructor();
26
+ open(config: IConfirmationProps): Observable<IConfirmationResult>;
27
+ private handleAction;
28
+ private toObservable;
29
+ private createOverlay;
30
+ private confirmationPortal;
31
+ private closeWithResult;
32
+ static ɵfac: i0.ɵɵFactoryDeclaration<ConfirmationService, never>;
33
+ static ɵprov: i0.ɵɵInjectableDeclaration<ConfirmationService>;
34
+ }
@@ -1,8 +1,8 @@
1
- import { TemplateRef } from '@angular/core';
1
+ import { AfterViewInit, TemplateRef } from '@angular/core';
2
2
  import { ComponentPortal } from '@angular/cdk/portal';
3
3
  import { DynamicDialogRef } from './dynamic-dialog.ref';
4
4
  import * as i0 from "@angular/core";
5
- export declare class DynamicDialogComponent {
5
+ export declare class DynamicDialogComponent implements AfterViewInit {
6
6
  ref: DynamicDialogRef;
7
7
  dialogOptions: any;
8
8
  protected readonly injectedData: any;
@@ -13,7 +13,9 @@ export declare class DynamicDialogComponent {
13
13
  footerTemplate?: TemplateRef<any>;
14
14
  contentTemplate?: TemplateRef<any>;
15
15
  templateContext: any;
16
+ private portalOutlet?;
16
17
  constructor(ref: DynamicDialogRef, dialogOptions: any);
18
+ ngAfterViewInit(): void;
17
19
  get data(): any;
18
20
  onOk(): Promise<void>;
19
21
  onCancel(): Promise<void>;
@@ -1,11 +1,14 @@
1
1
  import { OverlayRef } from '@angular/cdk/overlay';
2
2
  import { Observable } from 'rxjs';
3
+ import { DynamicDialogComponent } from './dynamic-dialog.component';
4
+ import { ButtonDialogOptions, DynamicDialogOptions } from './dynamic-dialog.service';
5
+ import { ComponentRef } from '@angular/core';
3
6
  export type DynamicDialogCloseReason = 'ok' | 'cancel' | 'close' | 'backdrop' | 'esc' | 'navigation' | 'detach' | 'dispose';
4
7
  export interface DynamicDialogCloseEvent<T = any> {
5
8
  reason: DynamicDialogCloseReason;
6
9
  result?: T;
7
10
  }
8
- export declare class DynamicDialogRef<T = any> {
11
+ export declare class DynamicDialogRef<T = any, C = any> {
9
12
  overlayRef: OverlayRef;
10
13
  readonly afterOpened$: Observable<void>;
11
14
  readonly afterClosed$: Observable<DynamicDialogCloseEvent<T>>;
@@ -15,6 +18,9 @@ export declare class DynamicDialogRef<T = any> {
15
18
  private _afterClosed;
16
19
  private panelEl;
17
20
  private isClosing;
21
+ private _container;
22
+ private _opts;
23
+ private _contentComponentRef?;
18
24
  constructor(overlayRef: OverlayRef);
19
25
  private get backdropEl();
20
26
  /** Chamado pelo service logo após anexar o container. */
@@ -26,4 +32,20 @@ export declare class DynamicDialogRef<T = any> {
26
32
  backdropHideClass?: string;
27
33
  timeoutMs?: number;
28
34
  }): Promise<void>;
35
+ _attachContentComponent(componentRef: ComponentRef<any>): void;
36
+ getComponent<C = any>(): C | undefined;
37
+ hasComponent(): boolean;
38
+ _attachForButtonUpdates(container: DynamicDialogComponent, opts: DynamicDialogOptions<any>): void;
39
+ updateButtons(patch: {
40
+ ok?: Partial<ButtonDialogOptions>;
41
+ cancel?: Partial<ButtonDialogOptions>;
42
+ }): void;
43
+ setOkLoading(state: boolean): void;
44
+ setOkDisabled(state: boolean): void;
45
+ setOkText(text: string): void;
46
+ setCancelLoading(state: boolean): void;
47
+ setCancelDisabled(state: boolean): void;
48
+ setCancelText(text: string): void;
49
+ private _ensureBtn;
50
+ private _markForCheck;
29
51
  }
@@ -4,7 +4,7 @@ import { Observable } from 'rxjs';
4
4
  import { DynamicDialogRef } from './dynamic-dialog.ref';
5
5
  import { tButtonSize, tButtonVariant } from '../button/button.interface';
6
6
  import * as i0 from "@angular/core";
7
- export interface DynamicDialogOptions<TData = unknown> extends DynamicDialogSize {
7
+ export interface DynamicDialogOptions<TData = unknown, TComponent = any> extends DynamicDialogSize {
8
8
  title?: string | null;
9
9
  description?: string | null;
10
10
  data?: TData;
@@ -27,14 +27,15 @@ export interface DynamicDialogOptions<TData = unknown> extends DynamicDialogSize
27
27
  footerStyle?: {
28
28
  [key: string]: string;
29
29
  };
30
- onOk?: DialogHandler<TData>;
31
- onCancel?: DialogHandler<TData>;
30
+ onOk?: DialogHandler<TData, TComponent>;
31
+ onCancel?: DialogHandler<TData, TComponent>;
32
32
  hideFooter?: boolean;
33
33
  closable?: boolean;
34
34
  centeredHeader?: boolean;
35
35
  headerTemplate?: TemplateRef<any>;
36
36
  footerTemplate?: TemplateRef<any>;
37
37
  contentTemplate?: TemplateRef<any>;
38
+ canDismiss?: (reason: 'esc' | 'backdrop') => boolean | Promise<boolean>;
38
39
  }
39
40
  export interface ButtonDialogOptions {
40
41
  text?: string | null;
@@ -53,15 +54,16 @@ export interface DynamicDialogSize {
53
54
  maxWidth?: number | string;
54
55
  maxHeight?: number | string;
55
56
  }
56
- export type DialogHandlerContext<TData = unknown> = {
57
+ export type DialogHandlerContext<TData = unknown, TComponent = any> = {
57
58
  data: TData | undefined;
58
59
  ref: DynamicDialogRef;
60
+ component: TComponent | undefined;
59
61
  };
60
- export type DialogHandler<TData = unknown> = (ctx: DialogHandlerContext<TData>) => void | boolean | Promise<void | boolean> | Observable<void | boolean> | EventEmitter<void | boolean>;
62
+ export type DialogHandler<TData = unknown, TComponent = any> = (ctx: DialogHandlerContext<TData, TComponent>) => void | boolean | any | Promise<void | boolean> | Observable<void | boolean> | EventEmitter<void | boolean>;
61
63
  export declare class DynamicDialogService {
62
64
  private readonly overlay;
63
65
  private readonly rootInjector;
64
- open<C, TData = unknown>(component: ComponentType<C>, opts?: DynamicDialogOptions<TData>): DynamicDialogRef;
66
+ open<C, TData = unknown>(component: ComponentType<C>, opts?: DynamicDialogOptions<TData, C>): DynamicDialogRef<any, C>;
65
67
  private buildOverlayConfig;
66
68
  static ɵfac: i0.ɵɵFactoryDeclaration<DynamicDialogService, never>;
67
69
  static ɵprov: i0.ɵɵInjectableDeclaration<DynamicDialogService>;
@@ -1,4 +1,4 @@
1
1
  import { InjectionToken } from "@angular/core";
2
2
  import { DynamicDialogOptions } from "./dynamic-dialog.service";
3
3
  export declare const DYNAMIC_DIALOG_DATA: InjectionToken<any>;
4
- export declare const DYNAMIC_DIALOG_OPTIONS: InjectionToken<DynamicDialogOptions<unknown>>;
4
+ export declare const DYNAMIC_DIALOG_OPTIONS: InjectionToken<DynamicDialogOptions<unknown, any>>;
@@ -1,5 +1,8 @@
1
1
  import { EventEmitter } from '@angular/core';
2
2
  import { Observable } from 'rxjs';
3
+ import { DynamicDialogOptions } from './dynamic-dialog.service';
3
4
  export declare function isPromise<T = any>(v: any): v is Promise<T>;
4
5
  export declare function isEmitter<T = any>(v: any): v is EventEmitter<T>;
5
6
  export declare function toMaybeBooleanPromise(value: void | boolean | Promise<void | boolean> | Observable<void | boolean> | EventEmitter<void | boolean>): Promise<boolean | void>;
7
+ export declare function toHandlerResult(ret: any): Promise<any>;
8
+ export declare function allow(canDismiss: DynamicDialogOptions<any>['canDismiss'], reason: 'esc' | 'backdrop'): Promise<boolean>;
@@ -0,0 +1,6 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class DynamicLoadingGlobalComponent {
3
+ message: import("@angular/core").WritableSignal<string>;
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<DynamicLoadingGlobalComponent, never>;
5
+ static ɵcmp: i0.ɵɵComponentDeclaration<DynamicLoadingGlobalComponent, "s4y-dynamic-loading-global", never, {}, {}, never, never, true, never>;
6
+ }
@@ -0,0 +1,13 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class DynamicLoadingGlobalService {
3
+ private readonly overlay;
4
+ private overlays;
5
+ constructor();
6
+ showLoading(message?: string): `${string}-${string}-${string}-${string}-${string}`;
7
+ updateMessage(id: string, message: string): void;
8
+ hiddenLoading(id?: string): void;
9
+ private loadingComponentPortal;
10
+ private createOverlay;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<DynamicLoadingGlobalService, never>;
12
+ static ɵprov: i0.ɵɵInjectableDeclaration<DynamicLoadingGlobalService>;
13
+ }
@@ -0,0 +1 @@
1
+ export * from "./dynamic-loading-global.service";
@@ -0,0 +1,6 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class DynamicTooltipComponent {
3
+ text: string;
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<DynamicTooltipComponent, never>;
5
+ static ɵcmp: i0.ɵɵComponentDeclaration<DynamicTooltipComponent, "s4y-dynamic-tooltip", never, {}, {}, never, never, true, never>;
6
+ }
@@ -0,0 +1,26 @@
1
+ import { OverlayRef } from '@angular/cdk/overlay';
2
+ import { ElementRef } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';
5
+ export declare class DynamicTooltipDirective {
6
+ private readonly overlay;
7
+ private readonly elRef;
8
+ overlayRef?: OverlayRef;
9
+ tooltipContent: import("@angular/core").InputSignal<string>;
10
+ placement: import("@angular/core").InputSignal<TooltipPlacement>;
11
+ private tooltipPortal;
12
+ private onOverlayEnter?;
13
+ private onOverlayLeave?;
14
+ constructor();
15
+ get host(): ElementRef;
16
+ shown(): void;
17
+ hide(e: MouseEvent): void;
18
+ private bindOverlayHoverGuards;
19
+ private unbindOverlayHoverGuards;
20
+ private createOverlay;
21
+ private getPositionsByPlacement;
22
+ private dispose;
23
+ ngOnDestroy(): void;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<DynamicTooltipDirective, never>;
25
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DynamicTooltipDirective, "[s4yDynamicTooltip]", never, { "tooltipContent": { "alias": "s4yDynamicTooltip"; "required": true; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
26
+ }
@@ -0,0 +1,22 @@
1
+ import { OverlayRef } from '@angular/cdk/overlay';
2
+ import { ElementRef } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export declare class ImagePreviewComponent {
5
+ imgEl: import("@angular/core").Signal<ElementRef<HTMLImageElement> | undefined>;
6
+ src: string;
7
+ name: string | undefined;
8
+ overlayRef: OverlayRef;
9
+ zoom: import("@angular/core").WritableSignal<number>;
10
+ private readonly MIN_ZOOM;
11
+ private readonly MAX_ZOOM;
12
+ private readonly ZOOM_STEP;
13
+ protected fullScreenImage: import("@angular/core").WritableSignal<boolean>;
14
+ protected toggleFullscreen(): void;
15
+ protected zoomOut(): void;
16
+ protected zoomIn(): void;
17
+ protected resetZoom(): void;
18
+ private applyZoom;
19
+ protected close(): void;
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<ImagePreviewComponent, never>;
21
+ static ɵcmp: i0.ɵɵComponentDeclaration<ImagePreviewComponent, "s4y-image-preview", never, {}, {}, never, never, true, never>;
22
+ }
@@ -0,0 +1,31 @@
1
+ import { AfterViewInit, OnInit, TemplateRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class ImageComponent implements OnInit, AfterViewInit {
4
+ private readonly imageService;
5
+ private readonly elRef;
6
+ private readonly renderer;
7
+ private readonly destroy;
8
+ constructor();
9
+ src: import("@angular/core").InputSignal<string>;
10
+ innerTpl: import("@angular/core").InputSignal<TemplateRef<any> | undefined>;
11
+ fileName: import("@angular/core").InputSignal<string | undefined>;
12
+ disablePreview: import("@angular/core").InputSignal<boolean>;
13
+ withOverlay: import("@angular/core").InputSignal<boolean>;
14
+ private wrapper;
15
+ private overlayEl;
16
+ ngOnInit(): void;
17
+ ngAfterViewInit(): void;
18
+ private configureWrapperElement;
19
+ private configureOverlay;
20
+ private configureEyeSvg;
21
+ private configureImageSrc;
22
+ private onShowOverlay;
23
+ private createElement;
24
+ private addClass;
25
+ private removeClass;
26
+ private showPreview;
27
+ get eyeSvg(): string;
28
+ get ImageEl(): HTMLElement | null;
29
+ static ɵfac: i0.ɵɵFactoryDeclaration<ImageComponent, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<ImageComponent, "img[s4yImage]", never, { "src": { "alias": "s4ySrc"; "required": false; "isSignal": true; }; "innerTpl": { "alias": "innerTpl"; "required": false; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "disablePreview": { "alias": "disablePreview"; "required": false; "isSignal": true; }; "withOverlay": { "alias": "withOverlay"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
31
+ }
@@ -0,0 +1,12 @@
1
+ import { OverlayRef } from "@angular/cdk/overlay";
2
+ import * as i0 from "@angular/core";
3
+ export declare class ImageService {
4
+ private _overlay;
5
+ private _overlayRef;
6
+ open(fileSrc: string, fileName?: string): OverlayRef;
7
+ close(): void;
8
+ private createOverlay;
9
+ private createPortal;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<ImageService, never>;
11
+ static ɵprov: i0.ɵɵInjectableDeclaration<ImageService>;
12
+ }
@@ -0,0 +1,2 @@
1
+ export * from './image.service';
2
+ export * from './image.component';
@@ -16,6 +16,8 @@ export declare class ModalComponent implements OnDestroy, AfterViewInit {
16
16
  withHeader: import("@angular/core").InputSignal<boolean>;
17
17
  closeOnBackdrop: import("@angular/core").InputSignal<boolean>;
18
18
  closeOnEsc: import("@angular/core").InputSignal<boolean>;
19
+ interceptBackdropClick: import("@angular/core").InputSignal<boolean>;
20
+ onBackdrop: import("@angular/core").OutputEmitterRef<void>;
19
21
  constructor(renderer: Renderer2, document: Document);
20
22
  onClose(): void;
21
23
  ngAfterViewInit(): void;
@@ -23,5 +25,5 @@ export declare class ModalComponent implements OnDestroy, AfterViewInit {
23
25
  private escListener;
24
26
  ngOnDestroy(): void;
25
27
  static ɵfac: i0.ɵɵFactoryDeclaration<ModalComponent, never>;
26
- static ɵcmp: i0.ɵɵComponentDeclaration<ModalComponent, "s4y-modal", never, { "scrollableContent": { "alias": "scrollableContent"; "required": false; "isSignal": true; }; "centeredModal": { "alias": "centeredModal"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "modalStyle": { "alias": "modalStyle"; "required": false; "isSignal": true; }; "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "withHeader": { "alias": "withHeader"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; "closeOnEsc": { "alias": "closeOnEsc"; "required": false; "isSignal": true; }; }, { "visible": "visibleChange"; "requestClose": "requestClose"; }, ["modalHeaderTemplate", "modalFooterTemplate"], ["*"], true, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<ModalComponent, "s4y-modal", never, { "scrollableContent": { "alias": "scrollableContent"; "required": false; "isSignal": true; }; "centeredModal": { "alias": "centeredModal"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "modalStyle": { "alias": "modalStyle"; "required": false; "isSignal": true; }; "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "withHeader": { "alias": "withHeader"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; "closeOnEsc": { "alias": "closeOnEsc"; "required": false; "isSignal": true; }; "interceptBackdropClick": { "alias": "interceptBackdropClick"; "required": false; "isSignal": true; }; }, { "visible": "visibleChange"; "requestClose": "requestClose"; "onBackdrop": "onBackdrop"; }, ["modalHeaderTemplate", "modalFooterTemplate"], ["*"], true, never>;
27
29
  }
@@ -0,0 +1,40 @@
1
+ import { ControlValueAccessor } from '@angular/forms';
2
+ import { SafeHtml } from '@angular/platform-browser';
3
+ import * as i0 from "@angular/core";
4
+ type TSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
5
+ export declare class RatingComponent implements ControlValueAccessor {
6
+ private readonly sanitizer;
7
+ value: import("@angular/core").WritableSignal<number>;
8
+ hoverValue: import("@angular/core").WritableSignal<number | null>;
9
+ count: import("@angular/core").InputSignal<number>;
10
+ size: import("@angular/core").InputSignal<number | TSize>;
11
+ readonly sizePx: import("@angular/core").Signal<number>;
12
+ allowHalf: import("@angular/core").InputSignal<boolean>;
13
+ readOnly: import("@angular/core").InputSignal<boolean>;
14
+ disabled: import("@angular/core").WritableSignal<boolean>;
15
+ onChange: (value: number) => void;
16
+ onTouched: () => void;
17
+ protected stars: import("@angular/core").Signal<SafeHtml[]>;
18
+ get isDisabledClass(): boolean;
19
+ get isReadOnlyClass(): boolean;
20
+ clearHoverStar(): void;
21
+ writeValue(value: number): void;
22
+ registerOnChange(fn: (value: number) => void): void;
23
+ registerOnTouched(fn: () => void): void;
24
+ setDisabledState?(isDisabled: boolean): void;
25
+ setRating(index: number, event: MouseEvent): void;
26
+ onKey(event: KeyboardEvent): void;
27
+ onStarHover(index: number, event: MouseEvent): void;
28
+ onStarHoverTouch(index: number, event: TouchEvent): void;
29
+ onTouchCommit(index: number, event: TouchEvent): void;
30
+ private updateValue;
31
+ private getClientXFromEvent;
32
+ private computeHalf;
33
+ private get isInteractive();
34
+ get starLineIcon(): string;
35
+ get starFillIcon(): string;
36
+ get starHalfIcon(): string;
37
+ static ɵfac: i0.ɵɵFactoryDeclaration<RatingComponent, never>;
38
+ static ɵcmp: i0.ɵɵComponentDeclaration<RatingComponent, "s4y-rating", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "allowHalf": { "alias": "allowHalf"; "required": false; "isSignal": true; }; "readOnly": { "alias": "readOnly"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
39
+ }
40
+ export {};
@@ -1,5 +1,10 @@
1
1
  import * as i0 from "@angular/core";
2
+ type TSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
2
3
  export declare class SearchBarComponent {
4
+ size: import("@angular/core").InputSignal<TSize>;
5
+ iconPosition: import("@angular/core").InputSignal<"left" | "right">;
6
+ showIcon: import("@angular/core").InputSignal<boolean>;
3
7
  static ɵfac: i0.ɵɵFactoryDeclaration<SearchBarComponent, never>;
4
- static ɵcmp: i0.ɵɵComponentDeclaration<SearchBarComponent, "s4y-search-bar", never, {}, {}, never, ["input[s4ySearchBar]"], true, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchBarComponent, "s4y-search-bar", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "iconPosition": { "alias": "iconPosition"; "required": false; "isSignal": true; }; "showIcon": { "alias": "showIcon"; "required": false; "isSignal": true; }; }, {}, never, ["input[s4ySearchBar]"], true, never>;
5
9
  }
10
+ export {};
@@ -0,0 +1,22 @@
1
+ import { TemplateRef } from '@angular/core';
2
+ import { TooltipPlacement } from '../dynamic-tooltip/dynamic-tooltip.directive';
3
+ import * as i0 from "@angular/core";
4
+ export interface ISummaryCardProps {
5
+ iconUri: string;
6
+ iconColor: string;
7
+ withIcon: boolean;
8
+ iconSize: number;
9
+ iconBackgroundColor: string;
10
+ withFooter: boolean;
11
+ label: string;
12
+ value: string;
13
+ withTooltip: boolean;
14
+ tooltipContent: string;
15
+ tooltipPlacement: TooltipPlacement;
16
+ }
17
+ export declare class SummaryCardComponent {
18
+ props: import("@angular/core").InputSignal<Partial<ISummaryCardProps>>;
19
+ footerTpl: import("@angular/core").Signal<TemplateRef<any> | undefined>;
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<SummaryCardComponent, never>;
21
+ static ɵcmp: i0.ɵɵComponentDeclaration<SummaryCardComponent, "s4y-summary-card", never, { "props": { "alias": "props"; "required": false; "isSignal": true; }; }, {}, ["footerTpl"], never, true, never>;
22
+ }
@@ -0,0 +1,28 @@
1
+ import { ElementRef } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export type TagSeverity = 'success' | 'error' | 'info' | 'warning' | 'primary' | 'secondary' | 'neutral' | 'finished';
4
+ export type TagSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
5
+ export declare class TagComponent {
6
+ private readonly injector;
7
+ editInput: import("@angular/core").Signal<ElementRef<HTMLInputElement> | undefined>;
8
+ size: import("@angular/core").InputSignal<TagSize>;
9
+ severity: import("@angular/core").InputSignal<TagSeverity>;
10
+ value: import("@angular/core").ModelSignal<string>;
11
+ outlined: import("@angular/core").InputSignal<boolean>;
12
+ withShadow: import("@angular/core").InputSignal<boolean>;
13
+ editable: import("@angular/core").InputSignal<boolean>;
14
+ isEditing: import("@angular/core").WritableSignal<boolean>;
15
+ editStart: import("@angular/core").OutputEmitterRef<void>;
16
+ editEnd: import("@angular/core").OutputEmitterRef<void>;
17
+ protected class: import("@angular/core").Signal<string>;
18
+ private sizeClass;
19
+ constructor();
20
+ protected shadow: import("@angular/core").Signal<" box-shadow: var(--shadow-default);" | null>;
21
+ onDblClick(_: MouseEvent): void;
22
+ startEdit(): void;
23
+ stopEdit(commit?: boolean): void;
24
+ setValue(event: Event): void;
25
+ onKeydown(event: KeyboardEvent): void;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<TagComponent, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<TagComponent, "s4y-tag", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "severity": { "alias": "severity"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "outlined": { "alias": "outlined"; "required": false; "isSignal": true; }; "withShadow": { "alias": "withShadow"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "editStart": "editStart"; "editEnd": "editEnd"; }, never, ["[icon]"], true, never>;
28
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "s4y-ui",
3
- "version": "5.2.1",
3
+ "version": "5.2.2",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.2.0",
6
6
  "@angular/core": "^19.2.0",
package/public-api.d.ts CHANGED
@@ -24,6 +24,13 @@ export * from './lib/components/checkbox/checkbox.component';
24
24
  export * from './lib/components/sidebar-right';
25
25
  export * from './lib/components/popover';
26
26
  export * from './lib/components/menu';
27
+ export * from './lib/components/image';
28
+ export * from './lib/components/summary-card/summary-card.component';
29
+ export * from './lib/components/dynamic-tooltip/dynamic-tooltip.directive';
27
30
  export * from "./lib/components/modal/modal.animation";
28
31
  export * from './lib/components/select-multi/select-multi.component';
29
32
  export * from './lib/components/dynamic-dialog';
33
+ export * from './lib/components/dynamic-loading-global';
34
+ export * from './lib/components/rating/rating.component';
35
+ export * from './lib/components/tag/tag.component';
36
+ export * from './lib/components/confirmation/confirmation.service';
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M18 7H22V9H16V3H18V7ZM8 9H2V7H6V3H8V9ZM18 17V21H16V15H22V17H18ZM8 15V21H6V17H2V15H8Z"></path></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M8 3V5H4V9H2V3H8ZM2 21V15H4V19H8V21H2ZM22 21H16V19H20V15H22V21ZM22 9H20V5H16V3H22V9Z"></path></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M5.46257 4.43262C7.21556 2.91688 9.5007 2 12 2C17.5228 2 22 6.47715 22 12C22 14.1361 21.3302 16.1158 20.1892 17.7406L17 12H20C20 7.58172 16.4183 4 12 4C9.84982 4 7.89777 4.84827 6.46023 6.22842L5.46257 4.43262ZM18.5374 19.5674C16.7844 21.0831 14.4993 22 12 22C6.47715 22 2 17.5228 2 12C2 9.86386 2.66979 7.88416 3.8108 6.25944L7 12H4C4 16.4183 7.58172 20 12 20C14.1502 20 16.1022 19.1517 17.5398 17.7716L18.5374 19.5674Z"></path></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M18.031 16.6168L22.3137 20.8995L20.8995 22.3137L16.6168 18.031C15.0769 19.263 13.124 20 11 20C6.032 20 2 15.968 2 11C2 6.032 6.032 2 11 2C15.968 2 20 6.032 20 11C20 13.124 19.263 15.0769 18.031 16.6168ZM16.0247 15.8748C17.2475 14.6146 18 12.8956 18 11C18 7.1325 14.8675 4 11 4C7.1325 4 4 7.1325 4 11C4 14.8675 7.1325 18 11 18C12.8956 18 14.6146 17.2475 15.8748 16.0247L16.0247 15.8748ZM10 10V7H12V10H15V12H12V15H10V12H7V10H10Z"></path></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M18.031 16.6168L22.3137 20.8995L20.8995 22.3137L16.6168 18.031C15.0769 19.263 13.124 20 11 20C6.032 20 2 15.968 2 11C2 6.032 6.032 2 11 2C15.968 2 20 6.032 20 11C20 13.124 19.263 15.0769 18.031 16.6168ZM16.0247 15.8748C17.2475 14.6146 18 12.8956 18 11C18 7.1325 14.8675 4 11 4C7.1325 4 4 7.1325 4 11C4 14.8675 7.1325 18 11 18C12.8956 18 14.6146 17.2475 15.8748 16.0247L16.0247 15.8748ZM7 10H15V12H7V10Z"></path></svg>