quang 19.0.27 → 20.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/README.md +0 -1
  2. package/auth/README.md +10 -0
  3. package/auth/index.d.ts +195 -9
  4. package/auth/mobile/index.d.ts +5 -1
  5. package/components/autocomplete/index.d.ts +46 -1
  6. package/components/checkbox/index.d.ts +15 -1
  7. package/components/date/index.d.ts +89 -1
  8. package/components/input/index.d.ts +19 -1
  9. package/components/paginator/index.d.ts +68 -5
  10. package/components/select/index.d.ts +32 -1
  11. package/components/shared/index.d.ts +112 -4
  12. package/components/table/index.d.ts +70 -1
  13. package/components/wysiwyg/index.d.ts +51 -1
  14. package/device/index.d.ts +14 -1
  15. package/fesm2022/quang-auth.mjs +18 -18
  16. package/fesm2022/quang-auth.mjs.map +1 -1
  17. package/fesm2022/quang-components-autocomplete.mjs +7 -7
  18. package/fesm2022/quang-components-autocomplete.mjs.map +1 -1
  19. package/fesm2022/quang-components-checkbox.mjs +6 -6
  20. package/fesm2022/quang-components-checkbox.mjs.map +1 -1
  21. package/fesm2022/quang-components-date.mjs +5 -5
  22. package/fesm2022/quang-components-date.mjs.map +1 -1
  23. package/fesm2022/quang-components-input.mjs +6 -6
  24. package/fesm2022/quang-components-input.mjs.map +1 -1
  25. package/fesm2022/quang-components-paginator.mjs +15 -15
  26. package/fesm2022/quang-components-paginator.mjs.map +1 -1
  27. package/fesm2022/quang-components-select.mjs +6 -6
  28. package/fesm2022/quang-components-select.mjs.map +1 -1
  29. package/fesm2022/quang-components-shared.mjs +6 -6
  30. package/fesm2022/quang-components-shared.mjs.map +1 -1
  31. package/fesm2022/quang-components-table.mjs +3 -3
  32. package/fesm2022/quang-components-table.mjs.map +1 -1
  33. package/fesm2022/quang-components-wysiwyg.mjs +6 -6
  34. package/fesm2022/quang-components-wysiwyg.mjs.map +1 -1
  35. package/fesm2022/quang-device.mjs +3 -3
  36. package/fesm2022/quang-device.mjs.map +1 -1
  37. package/fesm2022/quang-loader.mjs +7 -8
  38. package/fesm2022/quang-loader.mjs.map +1 -1
  39. package/fesm2022/quang-overlay-modal.mjs +3 -3
  40. package/fesm2022/quang-overlay-modal.mjs.map +1 -1
  41. package/fesm2022/quang-overlay-popover.mjs +8 -8
  42. package/fesm2022/quang-overlay-popover.mjs.map +1 -1
  43. package/fesm2022/quang-overlay-shared.mjs +10 -11
  44. package/fesm2022/quang-overlay-shared.mjs.map +1 -1
  45. package/fesm2022/quang-overlay-toast.mjs +8 -8
  46. package/fesm2022/quang-overlay-toast.mjs.map +1 -1
  47. package/fesm2022/quang-overlay-tooltip.mjs +6 -6
  48. package/fesm2022/quang-overlay-tooltip.mjs.map +1 -1
  49. package/fesm2022/quang-translation.mjs +6 -6
  50. package/fesm2022/quang-translation.mjs.map +1 -1
  51. package/forms/index.d.ts +51 -2
  52. package/index.d.ts +13 -9
  53. package/loader/index.d.ts +69 -4
  54. package/overlay/modal/index.d.ts +34 -1
  55. package/overlay/popover/index.d.ts +25 -1
  56. package/overlay/shared/index.d.ts +116 -3
  57. package/overlay/toast/index.d.ts +45 -2
  58. package/overlay/tooltip/index.d.ts +23 -2
  59. package/package.json +31 -31
  60. package/shared/index.d.ts +16 -1
  61. package/translation/index.d.ts +62 -4
  62. package/auth/auth-providers.d.ts +0 -39
  63. package/auth/auth.service.d.ts +0 -52
  64. package/auth/directives/has-at-least-one-role.directive.d.ts +0 -26
  65. package/auth/directives/has-every-role.directive.d.ts +0 -26
  66. package/auth/directives/is-authenticated.directive.d.ts +0 -14
  67. package/auth/directives/is-not-authenticated.directive.d.ts +0 -14
  68. package/auth/guards/index.d.ts +0 -2
  69. package/auth/guards/is-allowed.guard.d.ts +0 -2
  70. package/auth/guards/is-authenticated.guard.d.ts +0 -2
  71. package/auth/logout-on-error.interceptor.d.ts +0 -9
  72. package/auth/mobile/mobile-auth-feature.d.ts +0 -2
  73. package/auth/token-storage/index.d.ts +0 -3
  74. package/auth/token-storage/local-storage-feature.d.ts +0 -2
  75. package/auth/token-storage/memory-storage-feature.d.ts +0 -12
  76. package/auth/token-storage/session-storage-feature.d.ts +0 -2
  77. package/components/autocomplete/autocomplete.component.d.ts +0 -43
  78. package/components/checkbox/checkbox.component.d.ts +0 -11
  79. package/components/date/date.component.d.ts +0 -85
  80. package/components/input/input.component.d.ts +0 -15
  81. package/components/paginator/paginator-language.service.d.ts +0 -10
  82. package/components/paginator/paginator.component.d.ts +0 -30
  83. package/components/paginator/paginator.module.d.ts +0 -7
  84. package/components/paginator/paginator.service.d.ts +0 -6
  85. package/components/paginator/paginatorIntl.d.ts +0 -12
  86. package/components/select/select.component.d.ts +0 -29
  87. package/components/shared/ErrorData.d.ts +0 -4
  88. package/components/shared/makeId.d.ts +0 -1
  89. package/components/shared/option-list/option-list.component.d.ts +0 -53
  90. package/components/shared/quang-base-component.directive.d.ts +0 -50
  91. package/components/table/table.component.d.ts +0 -66
  92. package/components/wysiwyg/wysiwyg.component.d.ts +0 -46
  93. package/device/resize-observable.service.d.ts +0 -11
  94. package/forms/form-group-model.d.ts +0 -18
  95. package/forms/validators.d.ts +0 -43
  96. package/loader/loader-providers.d.ts +0 -23
  97. package/loader/loader.component.d.ts +0 -23
  98. package/loader/loader.interceptor.d.ts +0 -10
  99. package/loader/loader.service.d.ts +0 -9
  100. package/overlay/modal/modal.component.d.ts +0 -29
  101. package/overlay/popover/popover.component.d.ts +0 -13
  102. package/overlay/popover/popover.directive.d.ts +0 -11
  103. package/overlay/shared/CustomViewportRuler.d.ts +0 -63
  104. package/overlay/shared/quang-base-overlay.component.d.ts +0 -9
  105. package/overlay/shared/quang-base-overlay.directive.d.ts +0 -44
  106. package/overlay/toast/toast.component.d.ts +0 -13
  107. package/overlay/toast/toast.service.d.ts +0 -27
  108. package/overlay/tooltip/tooltip.component.d.ts +0 -11
  109. package/overlay/tooltip/tooltip.directive.d.ts +0 -11
  110. package/shared/intercept-utils.d.ts +0 -13
  111. package/translation/translation-loader.service.d.ts +0 -10
  112. package/translation/translation-providers.d.ts +0 -28
  113. package/translation/translation.service.d.ts +0 -15
  114. package/translation/translations.tokens.d.ts +0 -5
@@ -1 +1 @@
1
- {"version":3,"file":"quang-overlay-shared.mjs","sources":["../../../projects/quang/overlay/shared/quang-base-overlay.component.ts","../../../projects/quang/overlay/shared/quang-base-overlay.directive.ts","../../../projects/quang/overlay/shared/CustomViewportRuler.ts","../../../projects/quang/overlay/shared/quang-overlay-shared.ts"],"sourcesContent":["import { ConnectionPositionPair } from '@angular/cdk/overlay'\nimport { Component, input, signal } from '@angular/core'\n\n@Component({\n selector: 'quang-base-overlay-component',\n\n template: ``,\n})\nexport abstract class QuangBaseOverlayComponent {\n overlayContent = input.required<any>()\n\n payload = input<any>()\n\n positionPair = signal<ConnectionPositionPair | null>(null)\n}\n","import {\n ConnectedOverlayPositionChange,\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayPositionBuilder,\n OverlayRef,\n} from '@angular/cdk/overlay'\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal'\nimport {\n ComponentRef,\n DestroyRef,\n Directive,\n ElementRef,\n HostListener,\n OnDestroy,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\n\nimport { QuangBaseOverlayComponent } from './quang-base-overlay.component'\n\n@Directive()\nexport abstract class QuangBaseOverlayDirective<T extends QuangBaseOverlayComponent> implements OnDestroy {\n targetComponentType = signal<ComponentType<T> | undefined>(undefined)\n\n /**\n * The amount of pixels needed for the popover to automatically disappear. If undefined the popover will not disappear on scroll\n * Default: 100\n * @default 100\n */\n scrollCloseThreshold = input<number | undefined>(100)\n\n showMethod = input<'click' | 'hover'>('click')\n\n content = input.required<any>()\n\n quangOverlayPayload = input<any>()\n\n closeOnClickOutside = true\n\n overlayPosition = input<\n 'top' | 'top-left' | 'top-right' | 'bottom' | 'bottom-left' | 'bottom-right' | 'left' | 'right'\n >('top')\n\n destroyRef = inject(DestroyRef)\n\n private top = signal<ConnectedPosition>({\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -8,\n })\n\n private topLeft = signal<ConnectedPosition>({\n originX: 'start',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -8,\n offsetX: 40,\n })\n\n private topRight = signal<ConnectedPosition>({\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -8,\n offsetX: 40,\n })\n\n private bottom = signal<ConnectedPosition>({\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 8,\n })\n\n private bottomLeft = signal<ConnectedPosition>({\n originX: 'start',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 8,\n offsetX: 40,\n })\n\n private bottomRight = signal<ConnectedPosition>({\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 8,\n offsetX: 40,\n })\n\n private left = signal<ConnectedPosition>({\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n offsetX: -8,\n })\n\n private right = signal<ConnectedPosition>({\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n offsetX: 8,\n })\n\n tooltipPosition = computed((): ConnectedPosition[] => {\n switch (this.overlayPosition()) {\n case 'top':\n return [this.top(), this.bottom()]\n case 'top-left':\n return [this.topLeft(), this.bottomLeft()]\n case 'top-right':\n return [this.topRight(), this.bottomRight()]\n case 'bottom':\n return [this.bottom(), this.top()]\n case 'bottom-left':\n return [this.bottomLeft(), this.topLeft()]\n case 'bottom-right':\n return [this.bottomRight(), this.topRight()]\n case 'left':\n return [this.left(), this.right()]\n case 'right':\n return [this.right(), this.left()]\n default:\n return [this.top(), this.bottom()]\n }\n })\n\n private overlayRef = signal<OverlayRef | null>(null)\n\n private readonly overlay = signal(inject(Overlay))\n\n private readonly overlayPositionBuilder = signal(inject(OverlayPositionBuilder))\n\n private readonly elementRef = signal(inject(ElementRef))\n\n private positionStrategy = signal<FlexibleConnectedPositionStrategy | undefined>(undefined)\n\n private componentOverlayRef = signal<ComponentRef<T> | null>(null)\n\n @HostListener('click') onClick(): void {\n if (this.showMethod() === 'click') this.showHideOverlay()\n }\n\n @HostListener('mouseenter') onHover(): void {\n if (this.showMethod() === 'hover') this.showHideOverlay()\n }\n\n @HostListener('mouseleave') onLeave(): void {\n if (this.showMethod() === 'hover') this.detachOverlay()\n }\n\n attachOverlay(): void {\n const targetComponentType = this.targetComponentType()\n if (!targetComponentType) {\n return\n }\n this.positionStrategy.set(\n this.overlayPositionBuilder().flexibleConnectedTo(this.elementRef()).withPositions(this.tooltipPosition())\n )\n\n this.overlayRef.set(\n this.overlay().create({\n positionStrategy: this.positionStrategy(),\n scrollStrategy: this.scrollCloseThreshold()\n ? this.overlay().scrollStrategies.close({ threshold: this.scrollCloseThreshold() })\n : this.overlay().scrollStrategies.noop(),\n hasBackdrop: this.showMethod() === 'click',\n backdropClass: '',\n })\n )\n\n const componentPortal = new ComponentPortal(targetComponentType)\n const createdOverlay = this.overlayRef()\n if (createdOverlay) {\n this.componentOverlayRef.set(createdOverlay.attach(componentPortal))\n const componentOverlayRefInstance = this.componentOverlayRef()?.instance\n if (componentOverlayRefInstance) {\n componentOverlayRefInstance.overlayContent = this.content\n componentOverlayRefInstance.payload = this.quangOverlayPayload\n }\n }\n this.positionStrategy()\n ?.positionChanges.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((position) => {\n const positionRef: ConnectedOverlayPositionChange = position as ConnectedOverlayPositionChange\n const componentOverlayRefInstance = this.componentOverlayRef()?.instance\n if (componentOverlayRefInstance) {\n componentOverlayRefInstance.positionPair.set(positionRef.connectionPair)\n }\n })\n this.overlayRef()\n ?.backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (this.closeOnClickOutside) {\n this.detachOverlay()\n }\n })\n }\n\n detachOverlay(): void {\n this.overlayRef()?.detach()\n this.overlayRef()?.dispose()\n }\n\n showHideOverlay(): void {\n if (this.overlayRef()?.hasAttached()) {\n this.detachOverlay()\n } else {\n this.attachOverlay()\n }\n }\n\n ngOnDestroy(): void {\n this.detachOverlay()\n }\n}\n","import { Platform } from '@angular/cdk/platform'\nimport { DEFAULT_RESIZE_TIME, ViewportScrollPosition } from '@angular/cdk/scrolling'\nimport { DOCUMENT } from '@angular/common'\nimport { Inject, Injectable, NgZone, OnDestroy, Optional } from '@angular/core'\n\nimport { Observable, Subject, auditTime } from 'rxjs'\n\n/* eslint-disable */\n/**\n * Class cloe of [ViewportRuler](https://github.com/angular/components/blob/master/src/cdk/scrolling/viewport-ruler.ts)\n * To fix the wrong reported size of the viewport on mobile devices with hidden url bars\n * Issues references:\n * https://github.com/angular/components/issues/18890\n * https://github.com/angular/components/issues/27739\n *\n * To use this component provide it instead of `ViewportRuler`\n *\n * @example\n * providers: [\n * {\n * provide: ViewportRuler,\n * useClass: CustomViewportRuler\n * }\n * ]\n */\n@Injectable({ providedIn: 'root' })\nexport class CustomViewportRuler implements OnDestroy {\n /** Used to reference correct document/window */\n protected _document: Document\n /** Cached viewport dimensions. */\n private _viewportSize: { width: number; height: number } | null = null\n /** Stream of viewport change events. */\n private readonly _change = new Subject<Event>()\n\n constructor(\n private _platform: Platform,\n ngZone: NgZone,\n @Optional() @Inject(DOCUMENT) document: any\n ) {\n this._document = document\n\n ngZone.runOutsideAngular(() => {\n if (_platform.isBrowser) {\n const window = this._getWindow()\n\n // Note that bind the events ourselves, rather than going through something like RxJS's\n // `fromEvent` so that we can ensure that they're bound outside of the NgZone.\n window.addEventListener('resize', this._changeListener)\n window.addEventListener('orientationchange', this._changeListener)\n }\n\n // Clear the cached position so that the viewport is re-measured next time it is required.\n // We don't need to keep track of the subscription, because it is completed on destroy.\n this.change().subscribe(() => (this._viewportSize = null))\n })\n }\n\n ngOnDestroy() {\n if (this._platform.isBrowser) {\n const window = this._getWindow()\n window.removeEventListener('resize', this._changeListener)\n window.removeEventListener('orientationchange', this._changeListener)\n }\n\n this._change.complete()\n }\n\n /** Returns the viewport's width and height. */\n getViewportSize(): Readonly<{ width: number; height: number }> {\n if (!this._viewportSize) {\n this._updateViewportSize()\n }\n\n const output = { width: this._viewportSize!.width, height: this._viewportSize!.height }\n\n // If we're not on a browser, don't cache the size since it'll be mocked out anyway.\n if (!this._platform.isBrowser) {\n this._viewportSize = null!\n }\n\n return output\n }\n\n /** Gets a DOMRect for the viewport's bounds. */\n getViewportRect() {\n // Use the document element's bounding rect rather than the window scroll properties\n // (e.g. pageYOffset, scrollY) due to in issue in Chrome and IE where window scroll\n // properties and client coordinates (boundingClientRect, clientX/Y, etc.) are in different\n // conceptual viewports. Under most circumstances these viewports are equivalent, but they\n // can disagree when the page is pinch-zoomed (on devices that support touch).\n // See https://bugs.chromium.org/p/chromium/issues/detail?id=489206#c4\n // We use the documentElement instead of the body because, by default (without a css reset)\n // browsers typically give the document body an 8px margin, which is not included in\n // getBoundingClientRect().\n const scrollPosition = this.getViewportScrollPosition()\n const { width, height } = this.getViewportSize()\n\n return {\n top: scrollPosition.top,\n left: scrollPosition.left,\n bottom: scrollPosition.top + height,\n right: scrollPosition.left + width,\n height,\n width,\n }\n }\n\n /** Gets the (top, left) scroll position of the viewport. */\n getViewportScrollPosition(): ViewportScrollPosition {\n // While we can get a reference to the fake document\n // during SSR, it doesn't have getBoundingClientRect.\n if (!this._platform.isBrowser) {\n return { top: 0, left: 0 }\n }\n\n // The top-left-corner of the viewport is determined by the scroll position of the document\n // body, normally just (scrollLeft, scrollTop). However, Chrome and Firefox disagree about\n // whether `document.body` or `document.documentElement` is the scrolled element, so reading\n // `scrollTop` and `scrollLeft` is inconsistent. However, using the bounding rect of\n // `document.documentElement` works consistently, where the `top` and `left` values will\n // equal negative the scroll position.\n const document = this._document\n const window = this._getWindow()\n const documentElement = document.documentElement!\n const documentRect = documentElement.getBoundingClientRect()\n\n const top = -documentRect.top || document.body.scrollTop || window.scrollY || documentElement.scrollTop || 0\n\n const left = -documentRect.left || document.body.scrollLeft || window.scrollX || documentElement.scrollLeft || 0\n\n return { top, left }\n }\n\n /**\n * Returns a stream that emits whenever the size of the viewport changes.\n * This stream emits outside of the Angular zone.\n * @param throttleTime Time in milliseconds to throttle the stream.\n */\n change(throttleTime: number = DEFAULT_RESIZE_TIME): Observable<Event> {\n return throttleTime > 0 ? this._change.pipe(auditTime(throttleTime)) : this._change\n }\n\n /** Event listener that will be used to handle the viewport change events. */\n private _changeListener = (event: Event) => {\n this._change.next(event)\n }\n\n /** Use defaultView of injected document if available or fallback to global window reference */\n private _getWindow(): Window {\n return this._document.defaultView || window\n }\n\n /** Updates the cached viewport size. */\n private _updateViewportSize() {\n this._viewportSize = this._platform.isBrowser\n ? { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight }\n : { width: 0, height: 0 }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quang-overlay-shared.mjs","sources":["../../../projects/quang/overlay/shared/quang-base-overlay.component.ts","../../../projects/quang/overlay/shared/quang-base-overlay.directive.ts","../../../projects/quang/overlay/shared/CustomViewportRuler.ts","../../../projects/quang/overlay/shared/quang-overlay-shared.ts"],"sourcesContent":["import { ConnectionPositionPair } from '@angular/cdk/overlay'\nimport { Component, input, signal } from '@angular/core'\n\n@Component({\n selector: 'quang-base-overlay-component',\n\n template: ``,\n})\nexport abstract class QuangBaseOverlayComponent {\n overlayContent = input.required<any>()\n\n payload = input<any>()\n\n positionPair = signal<ConnectionPositionPair | null>(null)\n}\n","import {\n ConnectedOverlayPositionChange,\n ConnectedPosition,\n FlexibleConnectedPositionStrategy,\n Overlay,\n OverlayPositionBuilder,\n OverlayRef,\n} from '@angular/cdk/overlay'\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal'\nimport {\n ComponentRef,\n DestroyRef,\n Directive,\n ElementRef,\n HostListener,\n OnDestroy,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\n\nimport { QuangBaseOverlayComponent } from './quang-base-overlay.component'\n\n@Directive()\nexport abstract class QuangBaseOverlayDirective<T extends QuangBaseOverlayComponent> implements OnDestroy {\n targetComponentType = signal<ComponentType<T> | undefined>(undefined)\n\n /**\n * The amount of pixels needed for the popover to automatically disappear. If undefined the popover will not disappear on scroll\n * Default: 100\n * @default 100\n */\n scrollCloseThreshold = input<number | undefined>(100)\n\n showMethod = input<'click' | 'hover'>('click')\n\n content = input.required<any>()\n\n quangOverlayPayload = input<any>()\n\n closeOnClickOutside = true\n\n overlayPosition = input<\n 'top' | 'top-left' | 'top-right' | 'bottom' | 'bottom-left' | 'bottom-right' | 'left' | 'right'\n >('top')\n\n destroyRef = inject(DestroyRef)\n\n private top = signal<ConnectedPosition>({\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -8,\n })\n\n private topLeft = signal<ConnectedPosition>({\n originX: 'start',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -8,\n offsetX: 40,\n })\n\n private topRight = signal<ConnectedPosition>({\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -8,\n offsetX: 40,\n })\n\n private bottom = signal<ConnectedPosition>({\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 8,\n })\n\n private bottomLeft = signal<ConnectedPosition>({\n originX: 'start',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 8,\n offsetX: 40,\n })\n\n private bottomRight = signal<ConnectedPosition>({\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 8,\n offsetX: 40,\n })\n\n private left = signal<ConnectedPosition>({\n originX: 'start',\n originY: 'center',\n overlayX: 'end',\n overlayY: 'center',\n offsetX: -8,\n })\n\n private right = signal<ConnectedPosition>({\n originX: 'end',\n originY: 'center',\n overlayX: 'start',\n overlayY: 'center',\n offsetX: 8,\n })\n\n tooltipPosition = computed((): ConnectedPosition[] => {\n switch (this.overlayPosition()) {\n case 'top':\n return [this.top(), this.bottom()]\n case 'top-left':\n return [this.topLeft(), this.bottomLeft()]\n case 'top-right':\n return [this.topRight(), this.bottomRight()]\n case 'bottom':\n return [this.bottom(), this.top()]\n case 'bottom-left':\n return [this.bottomLeft(), this.topLeft()]\n case 'bottom-right':\n return [this.bottomRight(), this.topRight()]\n case 'left':\n return [this.left(), this.right()]\n case 'right':\n return [this.right(), this.left()]\n default:\n return [this.top(), this.bottom()]\n }\n })\n\n private overlayRef = signal<OverlayRef | null>(null)\n\n private readonly overlay = signal(inject(Overlay))\n\n private readonly overlayPositionBuilder = signal(inject(OverlayPositionBuilder))\n\n private readonly elementRef = signal(inject(ElementRef))\n\n private positionStrategy = signal<FlexibleConnectedPositionStrategy | undefined>(undefined)\n\n private componentOverlayRef = signal<ComponentRef<T> | null>(null)\n\n @HostListener('click') onClick(): void {\n if (this.showMethod() === 'click') this.showHideOverlay()\n }\n\n @HostListener('mouseenter') onHover(): void {\n if (this.showMethod() === 'hover') this.showHideOverlay()\n }\n\n @HostListener('mouseleave') onLeave(): void {\n if (this.showMethod() === 'hover') this.detachOverlay()\n }\n\n attachOverlay(): void {\n const targetComponentType = this.targetComponentType()\n if (!targetComponentType) {\n return\n }\n this.positionStrategy.set(\n this.overlayPositionBuilder().flexibleConnectedTo(this.elementRef()).withPositions(this.tooltipPosition())\n )\n\n this.overlayRef.set(\n this.overlay().create({\n positionStrategy: this.positionStrategy(),\n scrollStrategy: this.scrollCloseThreshold()\n ? this.overlay().scrollStrategies.close({ threshold: this.scrollCloseThreshold() })\n : this.overlay().scrollStrategies.noop(),\n hasBackdrop: this.showMethod() === 'click',\n backdropClass: '',\n })\n )\n\n const componentPortal = new ComponentPortal(targetComponentType)\n const createdOverlay = this.overlayRef()\n if (createdOverlay) {\n this.componentOverlayRef.set(createdOverlay.attach(componentPortal))\n const componentOverlayRefInstance = this.componentOverlayRef()?.instance\n if (componentOverlayRefInstance) {\n componentOverlayRefInstance.overlayContent = this.content\n componentOverlayRefInstance.payload = this.quangOverlayPayload\n }\n }\n this.positionStrategy()\n ?.positionChanges.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((position) => {\n const positionRef: ConnectedOverlayPositionChange = position as ConnectedOverlayPositionChange\n const componentOverlayRefInstance = this.componentOverlayRef()?.instance\n if (componentOverlayRefInstance) {\n componentOverlayRefInstance.positionPair.set(positionRef.connectionPair)\n }\n })\n this.overlayRef()\n ?.backdropClick()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n if (this.closeOnClickOutside) {\n this.detachOverlay()\n }\n })\n }\n\n detachOverlay(): void {\n this.overlayRef()?.detach()\n this.overlayRef()?.dispose()\n }\n\n showHideOverlay(): void {\n if (this.overlayRef()?.hasAttached()) {\n this.detachOverlay()\n } else {\n this.attachOverlay()\n }\n }\n\n ngOnDestroy(): void {\n this.detachOverlay()\n }\n}\n","import { Platform } from '@angular/cdk/platform'\nimport { DEFAULT_RESIZE_TIME, ViewportScrollPosition } from '@angular/cdk/scrolling'\nimport { DOCUMENT, Inject, Injectable, NgZone, OnDestroy, Optional } from '@angular/core'\n\nimport { Observable, Subject, auditTime } from 'rxjs'\n\n/* eslint-disable */\n/**\n * Class cloe of [ViewportRuler](https://github.com/angular/components/blob/master/src/cdk/scrolling/viewport-ruler.ts)\n * To fix the wrong reported size of the viewport on mobile devices with hidden url bars\n * Issues references:\n * https://github.com/angular/components/issues/18890\n * https://github.com/angular/components/issues/27739\n *\n * To use this component provide it instead of `ViewportRuler`\n *\n * @example\n * providers: [\n * {\n * provide: ViewportRuler,\n * useClass: CustomViewportRuler\n * }\n * ]\n */\n@Injectable({ providedIn: 'root' })\nexport class CustomViewportRuler implements OnDestroy {\n /** Used to reference correct document/window */\n protected _document: Document\n /** Cached viewport dimensions. */\n private _viewportSize: { width: number; height: number } | null = null\n /** Stream of viewport change events. */\n private readonly _change = new Subject<Event>()\n\n constructor(\n private _platform: Platform,\n ngZone: NgZone,\n @Optional() @Inject(DOCUMENT) document: any\n ) {\n this._document = document\n\n ngZone.runOutsideAngular(() => {\n if (_platform.isBrowser) {\n const window = this._getWindow()\n\n // Note that bind the events ourselves, rather than going through something like RxJS's\n // `fromEvent` so that we can ensure that they're bound outside of the NgZone.\n window.addEventListener('resize', this._changeListener)\n window.addEventListener('orientationchange', this._changeListener)\n }\n\n // Clear the cached position so that the viewport is re-measured next time it is required.\n // We don't need to keep track of the subscription, because it is completed on destroy.\n this.change().subscribe(() => (this._viewportSize = null))\n })\n }\n\n ngOnDestroy() {\n if (this._platform.isBrowser) {\n const window = this._getWindow()\n window.removeEventListener('resize', this._changeListener)\n window.removeEventListener('orientationchange', this._changeListener)\n }\n\n this._change.complete()\n }\n\n /** Returns the viewport's width and height. */\n getViewportSize(): Readonly<{ width: number; height: number }> {\n if (!this._viewportSize) {\n this._updateViewportSize()\n }\n\n const output = { width: this._viewportSize!.width, height: this._viewportSize!.height }\n\n // If we're not on a browser, don't cache the size since it'll be mocked out anyway.\n if (!this._platform.isBrowser) {\n this._viewportSize = null!\n }\n\n return output\n }\n\n /** Gets a DOMRect for the viewport's bounds. */\n getViewportRect() {\n // Use the document element's bounding rect rather than the window scroll properties\n // (e.g. pageYOffset, scrollY) due to in issue in Chrome and IE where window scroll\n // properties and client coordinates (boundingClientRect, clientX/Y, etc.) are in different\n // conceptual viewports. Under most circumstances these viewports are equivalent, but they\n // can disagree when the page is pinch-zoomed (on devices that support touch).\n // See https://bugs.chromium.org/p/chromium/issues/detail?id=489206#c4\n // We use the documentElement instead of the body because, by default (without a css reset)\n // browsers typically give the document body an 8px margin, which is not included in\n // getBoundingClientRect().\n const scrollPosition = this.getViewportScrollPosition()\n const { width, height } = this.getViewportSize()\n\n return {\n top: scrollPosition.top,\n left: scrollPosition.left,\n bottom: scrollPosition.top + height,\n right: scrollPosition.left + width,\n height,\n width,\n }\n }\n\n /** Gets the (top, left) scroll position of the viewport. */\n getViewportScrollPosition(): ViewportScrollPosition {\n // While we can get a reference to the fake document\n // during SSR, it doesn't have getBoundingClientRect.\n if (!this._platform.isBrowser) {\n return { top: 0, left: 0 }\n }\n\n // The top-left-corner of the viewport is determined by the scroll position of the document\n // body, normally just (scrollLeft, scrollTop). However, Chrome and Firefox disagree about\n // whether `document.body` or `document.documentElement` is the scrolled element, so reading\n // `scrollTop` and `scrollLeft` is inconsistent. However, using the bounding rect of\n // `document.documentElement` works consistently, where the `top` and `left` values will\n // equal negative the scroll position.\n const document = this._document\n const window = this._getWindow()\n const documentElement = document.documentElement!\n const documentRect = documentElement.getBoundingClientRect()\n\n const top = -documentRect.top || document.body.scrollTop || window.scrollY || documentElement.scrollTop || 0\n\n const left = -documentRect.left || document.body.scrollLeft || window.scrollX || documentElement.scrollLeft || 0\n\n return { top, left }\n }\n\n /**\n * Returns a stream that emits whenever the size of the viewport changes.\n * This stream emits outside of the Angular zone.\n * @param throttleTime Time in milliseconds to throttle the stream.\n */\n change(throttleTime: number = DEFAULT_RESIZE_TIME): Observable<Event> {\n return throttleTime > 0 ? this._change.pipe(auditTime(throttleTime)) : this._change\n }\n\n /** Event listener that will be used to handle the viewport change events. */\n private _changeListener = (event: Event) => {\n this._change.next(event)\n }\n\n /** Use defaultView of injected document if available or fallback to global window reference */\n private _getWindow(): Window {\n return this._document.defaultView || window\n }\n\n /** Updates the cached viewport size. */\n private _updateViewportSize() {\n this._viewportSize = this._platform.isBrowser\n ? { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight }\n : { width: 0, height: 0 }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { OverlayModule } from '@angular/cdk/overlay';
2
- import { NgClass, DatePipe, NgIf, NgTemplateOutlet } from '@angular/common';
2
+ import { NgClass, DatePipe, NgTemplateOutlet } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
4
  import { computed, signal, Injectable, inject, input, ChangeDetectionStrategy, Component } from '@angular/core';
5
5
  import { toObservable, toSignal } from '@angular/core/rxjs-interop';
@@ -40,10 +40,10 @@ class QuangToastService {
40
40
  this.currentToast.set(null);
41
41
  patchState(this.toastState, { count: this.count() - 1 });
42
42
  }
43
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
44
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangToastService, providedIn: 'root' }); }
43
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
44
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangToastService, providedIn: 'root' }); }
45
45
  }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangToastService, decorators: [{
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangToastService, decorators: [{
47
47
  type: Injectable,
48
48
  args: [{
49
49
  providedIn: 'root',
@@ -89,12 +89,12 @@ class QuangToastComponent {
89
89
  close() {
90
90
  this.toastService().closeToast();
91
91
  }
92
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
93
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.14", type: QuangToastComponent, isStandalone: true, selector: "quang-toast", inputs: { showAtLeastFor: { classPropertyName: "showAtLeastFor", publicName: "showAtLeastFor", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\n [class.hide]=\"!isShowing()\"\n [class.show]=\"isShowing()\"\n [ngClass]=\"[_currentToast()?.position ?? '', _currentToast()?.type ?? '']\"\n aria-atomic=\"true\"\n aria-live=\"assertive\"\n class=\"toast fade\"\n role=\"alert\"\n>\n <div\n *ngIf=\"!_currentToast()?.hideHeader\"\n class=\"toast-header\"\n >\n <span\n [ngClass]=\"_currentToast()?.type\"\n *ngIf=\"!_currentToast()?.customIcon\"\n class=\"rounded me-2\"\n ></span>\n <img\n [src]=\"_currentToast()?.customIcon\"\n *ngIf=\"_currentToast()?.customIcon\"\n alt=\"\"\n />\n <strong\n *ngIf=\"_currentToast()?.title\"\n class=\"me-auto\"\n >{{ _currentToast()?.title | transloco }}</strong\n >\n <small *ngIf=\"_currentToast()?.date\">{{ _currentToast()?.date ?? '' | date: _currentToast()?.dateFormat }}</small>\n <button\n (click)=\"close()\"\n *ngIf=\"_currentToast()?.showCloseButton\"\n aria-label=\"Close\"\n class=\"ms-2 mb-1 btn-close\"\n data-dismiss=\"toast\"\n type=\"button\"\n >\n <span aria-hidden=\"true\"></span>\n </button>\n </div>\n <div\n *ngIf=\"_currentToast()?.text\"\n class=\"toast-body\"\n >\n {{ _currentToast()?.text?.trim() | transloco: { textValue: _currentToast()?.textValue?.trim() } }}\n </div>\n <ng-container *ngTemplateOutlet=\"_currentToast()?.customTemplate ?? null\"></ng-container>\n</div>\n", styles: [".toast{position:fixed;min-width:200px;z-index:999999}.toast.top-left{top:2rem;left:1rem}.toast.top-right{top:2rem;right:1rem}.toast.bottom-left{bottom:1rem;left:1rem}.toast.bottom-right{bottom:1rem;right:1rem}.toast.center{top:50%;left:50%;transform:translate(-50%,-50%)}.toast.top-center{top:2rem;left:50%;transform:translate(-50%)}.toast.bottom-center{bottom:1rem;left:50%;transform:translate(-50%)}.toast .toast-header{background-color:unset}.toast .toast-header .rounded{height:1.125rem;width:1.125rem;display:inline-block}.toast .toast-header .rounded.success{background:#28a745}.toast .toast-header .rounded.warning{background:#ffc107}.toast .toast-header .rounded.error{background:#dc3545}.toast .toast-header button:focus{box-shadow:unset}.toast small{margin-left:1rem}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
92
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
93
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.0", type: QuangToastComponent, isStandalone: true, selector: "quang-toast", inputs: { showAtLeastFor: { classPropertyName: "showAtLeastFor", publicName: "showAtLeastFor", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\n [class.hide]=\"!isShowing()\"\n [class.show]=\"isShowing()\"\n [ngClass]=\"[_currentToast()?.position ?? '', _currentToast()?.type ?? '']\"\n aria-atomic=\"true\"\n aria-live=\"assertive\"\n class=\"toast fade\"\n role=\"alert\"\n>\n @if (!_currentToast()?.hideHeader) {\n <div class=\"toast-header\">\n @if (!_currentToast()?.customIcon) {\n <span\n [ngClass]=\"_currentToast()?.type\"\n class=\"rounded me-2\"\n ></span>\n }\n @if (_currentToast()?.customIcon) {\n <img\n [src]=\"_currentToast()?.customIcon\"\n alt=\"\"\n />\n }\n @if (_currentToast()?.title) {\n <strong class=\"me-auto\">{{ _currentToast()?.title | transloco }}</strong>\n }\n @if (_currentToast()?.date) {\n <small>{{ _currentToast()?.date ?? '' | date: _currentToast()?.dateFormat }}</small>\n }\n @if (_currentToast()?.showCloseButton) {\n <button\n (click)=\"close()\"\n aria-label=\"Close\"\n class=\"ms-2 mb-1 btn-close\"\n data-dismiss=\"toast\"\n type=\"button\"\n >\n <span aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n }\n @if (_currentToast()?.text) {\n <div class=\"toast-body\">\n {{ _currentToast()?.text?.trim() | transloco: { textValue: _currentToast()?.textValue?.trim() } }}\n </div>\n }\n <ng-container *ngTemplateOutlet=\"_currentToast()?.customTemplate ?? null\"></ng-container>\n</div>\n", styles: [".toast{position:fixed;min-width:200px;z-index:999999}.toast.top-left{top:2rem;left:1rem}.toast.top-right{top:2rem;right:1rem}.toast.bottom-left{bottom:1rem;left:1rem}.toast.bottom-right{bottom:1rem;right:1rem}.toast.center{top:50%;left:50%;transform:translate(-50%,-50%)}.toast.top-center{top:2rem;left:50%;transform:translate(-50%)}.toast.bottom-center{bottom:1rem;left:50%;transform:translate(-50%)}.toast .toast-header{background-color:unset}.toast .toast-header .rounded{height:1.125rem;width:1.125rem;display:inline-block}.toast .toast-header .rounded.success{background:#28a745}.toast .toast-header .rounded.warning{background:#ffc107}.toast .toast-header .rounded.error{background:#dc3545}.toast .toast-header button:focus{box-shadow:unset}.toast small{margin-left:1rem}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: TranslocoPipe, name: "transloco" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
94
94
  }
95
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangToastComponent, decorators: [{
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangToastComponent, decorators: [{
96
96
  type: Component,
97
- args: [{ selector: 'quang-toast', imports: [OverlayModule, NgClass, TranslocoPipe, DatePipe, NgIf, NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [class.hide]=\"!isShowing()\"\n [class.show]=\"isShowing()\"\n [ngClass]=\"[_currentToast()?.position ?? '', _currentToast()?.type ?? '']\"\n aria-atomic=\"true\"\n aria-live=\"assertive\"\n class=\"toast fade\"\n role=\"alert\"\n>\n <div\n *ngIf=\"!_currentToast()?.hideHeader\"\n class=\"toast-header\"\n >\n <span\n [ngClass]=\"_currentToast()?.type\"\n *ngIf=\"!_currentToast()?.customIcon\"\n class=\"rounded me-2\"\n ></span>\n <img\n [src]=\"_currentToast()?.customIcon\"\n *ngIf=\"_currentToast()?.customIcon\"\n alt=\"\"\n />\n <strong\n *ngIf=\"_currentToast()?.title\"\n class=\"me-auto\"\n >{{ _currentToast()?.title | transloco }}</strong\n >\n <small *ngIf=\"_currentToast()?.date\">{{ _currentToast()?.date ?? '' | date: _currentToast()?.dateFormat }}</small>\n <button\n (click)=\"close()\"\n *ngIf=\"_currentToast()?.showCloseButton\"\n aria-label=\"Close\"\n class=\"ms-2 mb-1 btn-close\"\n data-dismiss=\"toast\"\n type=\"button\"\n >\n <span aria-hidden=\"true\"></span>\n </button>\n </div>\n <div\n *ngIf=\"_currentToast()?.text\"\n class=\"toast-body\"\n >\n {{ _currentToast()?.text?.trim() | transloco: { textValue: _currentToast()?.textValue?.trim() } }}\n </div>\n <ng-container *ngTemplateOutlet=\"_currentToast()?.customTemplate ?? null\"></ng-container>\n</div>\n", styles: [".toast{position:fixed;min-width:200px;z-index:999999}.toast.top-left{top:2rem;left:1rem}.toast.top-right{top:2rem;right:1rem}.toast.bottom-left{bottom:1rem;left:1rem}.toast.bottom-right{bottom:1rem;right:1rem}.toast.center{top:50%;left:50%;transform:translate(-50%,-50%)}.toast.top-center{top:2rem;left:50%;transform:translate(-50%)}.toast.bottom-center{bottom:1rem;left:50%;transform:translate(-50%)}.toast .toast-header{background-color:unset}.toast .toast-header .rounded{height:1.125rem;width:1.125rem;display:inline-block}.toast .toast-header .rounded.success{background:#28a745}.toast .toast-header .rounded.warning{background:#ffc107}.toast .toast-header .rounded.error{background:#dc3545}.toast .toast-header button:focus{box-shadow:unset}.toast small{margin-left:1rem}\n"] }]
97
+ args: [{ selector: 'quang-toast', imports: [OverlayModule, NgClass, TranslocoPipe, DatePipe, NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [class.hide]=\"!isShowing()\"\n [class.show]=\"isShowing()\"\n [ngClass]=\"[_currentToast()?.position ?? '', _currentToast()?.type ?? '']\"\n aria-atomic=\"true\"\n aria-live=\"assertive\"\n class=\"toast fade\"\n role=\"alert\"\n>\n @if (!_currentToast()?.hideHeader) {\n <div class=\"toast-header\">\n @if (!_currentToast()?.customIcon) {\n <span\n [ngClass]=\"_currentToast()?.type\"\n class=\"rounded me-2\"\n ></span>\n }\n @if (_currentToast()?.customIcon) {\n <img\n [src]=\"_currentToast()?.customIcon\"\n alt=\"\"\n />\n }\n @if (_currentToast()?.title) {\n <strong class=\"me-auto\">{{ _currentToast()?.title | transloco }}</strong>\n }\n @if (_currentToast()?.date) {\n <small>{{ _currentToast()?.date ?? '' | date: _currentToast()?.dateFormat }}</small>\n }\n @if (_currentToast()?.showCloseButton) {\n <button\n (click)=\"close()\"\n aria-label=\"Close\"\n class=\"ms-2 mb-1 btn-close\"\n data-dismiss=\"toast\"\n type=\"button\"\n >\n <span aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n }\n @if (_currentToast()?.text) {\n <div class=\"toast-body\">\n {{ _currentToast()?.text?.trim() | transloco: { textValue: _currentToast()?.textValue?.trim() } }}\n </div>\n }\n <ng-container *ngTemplateOutlet=\"_currentToast()?.customTemplate ?? null\"></ng-container>\n</div>\n", styles: [".toast{position:fixed;min-width:200px;z-index:999999}.toast.top-left{top:2rem;left:1rem}.toast.top-right{top:2rem;right:1rem}.toast.bottom-left{bottom:1rem;left:1rem}.toast.bottom-right{bottom:1rem;right:1rem}.toast.center{top:50%;left:50%;transform:translate(-50%,-50%)}.toast.top-center{top:2rem;left:50%;transform:translate(-50%)}.toast.bottom-center{bottom:1rem;left:50%;transform:translate(-50%)}.toast .toast-header{background-color:unset}.toast .toast-header .rounded{height:1.125rem;width:1.125rem;display:inline-block}.toast .toast-header .rounded.success{background:#28a745}.toast .toast-header .rounded.warning{background:#ffc107}.toast .toast-header .rounded.error{background:#dc3545}.toast .toast-header button:focus{box-shadow:unset}.toast small{margin-left:1rem}\n"] }]
98
98
  }] });
99
99
 
100
100
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"quang-overlay-toast.mjs","sources":["../../../projects/quang/overlay/toast/toast.service.ts","../../../projects/quang/overlay/toast/toast.component.ts","../../../projects/quang/overlay/toast/toast.component.html","../../../projects/quang/overlay/toast/quang-overlay-toast.ts"],"sourcesContent":["import { Injectable, TemplateRef, computed, signal } from '@angular/core'\n\nimport { patchState, signalState } from '@ngrx/signals'\n\nexport interface ToastData {\n type: 'success' | 'warning' | 'error'\n title?: string\n position: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center' | 'top-center' | 'bottom-center'\n timing: number\n text?: string\n textValue?: string\n showCloseButton?: boolean\n date?: Date\n dateFormat?: string\n customTemplate?: TemplateRef<any>\n customIcon?: string\n hideHeader?: boolean\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class QuangToastService {\n private toastState = signalState({\n count: 0,\n currentTimeout: null as ReturnType<typeof setTimeout> | number | null,\n })\n\n public isShowing = computed(() => this.toastState.count() > 0)\n\n count = this.toastState.count\n currentTimeout = this.toastState.currentTimeout\n\n public openToast(toastData: ToastData): void {\n patchState(this.toastState, {\n count: this.count() + 1,\n })\n\n this.currentToast.set(toastData)\n\n if (this.count() > 1) {\n clearTimeout(this.currentTimeout() as number)\n patchState(this.toastState, {\n count: this.count() - 1,\n currentTimeout: null,\n })\n }\n patchState(this.toastState, {\n currentTimeout: setTimeout(() => {\n this.closeToast()\n }, toastData.timing),\n })\n }\n\n public closeToast(): void {\n this.currentToast.set(null)\n patchState(this.toastState, { count: this.count() - 1 })\n }\n\n public currentToast = signal<ToastData | null>(null)\n}\n","import { OverlayModule } from '@angular/cdk/overlay'\nimport { DatePipe, NgClass, NgIf, NgTemplateOutlet } from '@angular/common'\nimport { ChangeDetectionStrategy, Component, inject, input, signal } from '@angular/core'\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop'\n\nimport { TranslocoPipe } from '@jsverse/transloco'\nimport { map, of, switchAll, timer } from 'rxjs'\n\nimport { QuangToastService } from './toast.service'\n\n@Component({\n selector: 'quang-toast',\n imports: [OverlayModule, NgClass, TranslocoPipe, DatePipe, NgIf, NgTemplateOutlet],\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * Toast component that can be displayed by calling the `QuangToastService.openToast()` method,\n * passing an object of config {@link ToastData}.\n *\n * @usageNotes\n * The {@link ToastData.customTemplate} property is used to display the custom template inside the toast.\n *\n * The toast header can be hidden by setting the {@link ToastData.hideHeader} boolean to `true`.\n *\n * If the toast header is visible, setting the {@link ToastData.type} property will change the background color\n * of a squared indicator positioned next to the header's title.\n *\n * The component can also display a {@link ToastData.customIcon} in the toast header instead of the squared indicator.\n *\n * @example\n * <quang-toast></quang-toast>\n * this.quangToast.openToast({\n type,\n title: type,\n position: 'bottom-center',\n text: 'custom text here',\n showCloseButton: true,\n timing: 50000000,\n })\n */\nexport class QuangToastComponent {\n toastService = signal(inject(QuangToastService))\n\n readonly isShowing = this.toastService().isShowing\n showAtLeastFor = input<number>(500)\n\n private showToastBuffer$ = toObservable(this.isShowing).pipe(\n map((isShowing) =>\n isShowing\n ? of(isShowing)\n : timer(this.toastService().currentToast()?.timing ?? this.showAtLeastFor()).pipe(map(() => isShowing))\n ),\n switchAll()\n )\n\n showToast = toSignal(this.showToastBuffer$)\n\n readonly _currentToast = this.toastService().currentToast\n\n close(): void {\n this.toastService().closeToast()\n }\n}\n","<div\n [class.hide]=\"!isShowing()\"\n [class.show]=\"isShowing()\"\n [ngClass]=\"[_currentToast()?.position ?? '', _currentToast()?.type ?? '']\"\n aria-atomic=\"true\"\n aria-live=\"assertive\"\n class=\"toast fade\"\n role=\"alert\"\n>\n <div\n *ngIf=\"!_currentToast()?.hideHeader\"\n class=\"toast-header\"\n >\n <span\n [ngClass]=\"_currentToast()?.type\"\n *ngIf=\"!_currentToast()?.customIcon\"\n class=\"rounded me-2\"\n ></span>\n <img\n [src]=\"_currentToast()?.customIcon\"\n *ngIf=\"_currentToast()?.customIcon\"\n alt=\"\"\n />\n <strong\n *ngIf=\"_currentToast()?.title\"\n class=\"me-auto\"\n >{{ _currentToast()?.title | transloco }}</strong\n >\n <small *ngIf=\"_currentToast()?.date\">{{ _currentToast()?.date ?? '' | date: _currentToast()?.dateFormat }}</small>\n <button\n (click)=\"close()\"\n *ngIf=\"_currentToast()?.showCloseButton\"\n aria-label=\"Close\"\n class=\"ms-2 mb-1 btn-close\"\n data-dismiss=\"toast\"\n type=\"button\"\n >\n <span aria-hidden=\"true\"></span>\n </button>\n </div>\n <div\n *ngIf=\"_currentToast()?.text\"\n class=\"toast-body\"\n >\n {{ _currentToast()?.text?.trim() | transloco: { textValue: _currentToast()?.textValue?.trim() } }}\n </div>\n <ng-container *ngTemplateOutlet=\"_currentToast()?.customTemplate ?? null\"></ng-container>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quang-overlay-toast.mjs","sources":["../../../projects/quang/overlay/toast/toast.service.ts","../../../projects/quang/overlay/toast/toast.component.ts","../../../projects/quang/overlay/toast/toast.component.html","../../../projects/quang/overlay/toast/quang-overlay-toast.ts"],"sourcesContent":["import { Injectable, TemplateRef, computed, signal } from '@angular/core'\n\nimport { patchState, signalState } from '@ngrx/signals'\n\nexport interface ToastData {\n type: 'success' | 'warning' | 'error'\n title?: string\n position: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'center' | 'top-center' | 'bottom-center'\n timing: number\n text?: string\n textValue?: string\n showCloseButton?: boolean\n date?: Date\n dateFormat?: string\n customTemplate?: TemplateRef<any>\n customIcon?: string\n hideHeader?: boolean\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class QuangToastService {\n private toastState = signalState({\n count: 0,\n currentTimeout: null as ReturnType<typeof setTimeout> | number | null,\n })\n\n public isShowing = computed(() => this.toastState.count() > 0)\n\n count = this.toastState.count\n currentTimeout = this.toastState.currentTimeout\n\n public openToast(toastData: ToastData): void {\n patchState(this.toastState, {\n count: this.count() + 1,\n })\n\n this.currentToast.set(toastData)\n\n if (this.count() > 1) {\n clearTimeout(this.currentTimeout() as number)\n patchState(this.toastState, {\n count: this.count() - 1,\n currentTimeout: null,\n })\n }\n patchState(this.toastState, {\n currentTimeout: setTimeout(() => {\n this.closeToast()\n }, toastData.timing),\n })\n }\n\n public closeToast(): void {\n this.currentToast.set(null)\n patchState(this.toastState, { count: this.count() - 1 })\n }\n\n public currentToast = signal<ToastData | null>(null)\n}\n","import { OverlayModule } from '@angular/cdk/overlay'\nimport { DatePipe, NgClass, NgTemplateOutlet } from '@angular/common'\nimport { ChangeDetectionStrategy, Component, inject, input, signal } from '@angular/core'\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop'\n\nimport { TranslocoPipe } from '@jsverse/transloco'\nimport { map, of, switchAll, timer } from 'rxjs'\n\nimport { QuangToastService } from './toast.service'\n\n@Component({\n selector: 'quang-toast',\n imports: [OverlayModule, NgClass, TranslocoPipe, DatePipe, NgTemplateOutlet],\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\n/**\n * Toast component that can be displayed by calling the `QuangToastService.openToast()` method,\n * passing an object of config {@link ToastData}.\n *\n * @usageNotes\n * The {@link ToastData.customTemplate} property is used to display the custom template inside the toast.\n *\n * The toast header can be hidden by setting the {@link ToastData.hideHeader} boolean to `true`.\n *\n * If the toast header is visible, setting the {@link ToastData.type} property will change the background color\n * of a squared indicator positioned next to the header's title.\n *\n * The component can also display a {@link ToastData.customIcon} in the toast header instead of the squared indicator.\n *\n * @example\n * <quang-toast></quang-toast>\n * this.quangToast.openToast({\n type,\n title: type,\n position: 'bottom-center',\n text: 'custom text here',\n showCloseButton: true,\n timing: 50000000,\n })\n */\nexport class QuangToastComponent {\n toastService = signal(inject(QuangToastService))\n\n readonly isShowing = this.toastService().isShowing\n showAtLeastFor = input<number>(500)\n\n private showToastBuffer$ = toObservable(this.isShowing).pipe(\n map((isShowing) =>\n isShowing\n ? of(isShowing)\n : timer(this.toastService().currentToast()?.timing ?? this.showAtLeastFor()).pipe(map(() => isShowing))\n ),\n switchAll()\n )\n\n showToast = toSignal(this.showToastBuffer$)\n\n readonly _currentToast = this.toastService().currentToast\n\n close(): void {\n this.toastService().closeToast()\n }\n}\n","<div\n [class.hide]=\"!isShowing()\"\n [class.show]=\"isShowing()\"\n [ngClass]=\"[_currentToast()?.position ?? '', _currentToast()?.type ?? '']\"\n aria-atomic=\"true\"\n aria-live=\"assertive\"\n class=\"toast fade\"\n role=\"alert\"\n>\n @if (!_currentToast()?.hideHeader) {\n <div class=\"toast-header\">\n @if (!_currentToast()?.customIcon) {\n <span\n [ngClass]=\"_currentToast()?.type\"\n class=\"rounded me-2\"\n ></span>\n }\n @if (_currentToast()?.customIcon) {\n <img\n [src]=\"_currentToast()?.customIcon\"\n alt=\"\"\n />\n }\n @if (_currentToast()?.title) {\n <strong class=\"me-auto\">{{ _currentToast()?.title | transloco }}</strong>\n }\n @if (_currentToast()?.date) {\n <small>{{ _currentToast()?.date ?? '' | date: _currentToast()?.dateFormat }}</small>\n }\n @if (_currentToast()?.showCloseButton) {\n <button\n (click)=\"close()\"\n aria-label=\"Close\"\n class=\"ms-2 mb-1 btn-close\"\n data-dismiss=\"toast\"\n type=\"button\"\n >\n <span aria-hidden=\"true\"></span>\n </button>\n }\n </div>\n }\n @if (_currentToast()?.text) {\n <div class=\"toast-body\">\n {{ _currentToast()?.text?.trim() | transloco: { textValue: _currentToast()?.textValue?.trim() } }}\n </div>\n }\n <ng-container *ngTemplateOutlet=\"_currentToast()?.customTemplate ?? null\"></ng-container>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -11,8 +11,8 @@ class QuangTooltipComponent {
11
11
  this.positionPair = signal(null);
12
12
  this.payload = input();
13
13
  }
14
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
15
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.14", type: QuangTooltipComponent, isStandalone: true, selector: "quang-tooltip", inputs: { overlayContent: { classPropertyName: "overlayContent", publicName: "overlayContent", isSignal: true, isRequired: true, transformFunction: null }, quangTooltipPosition: { classPropertyName: "quangTooltipPosition", publicName: "quangTooltipPosition", isSignal: true, isRequired: false, transformFunction: null }, payload: { classPropertyName: "payload", publicName: "payload", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\n @tooltip\n class=\"quang-tooltip\"\n>\n {{ overlayContent() }}\n</div>\n", styles: [".quang-tooltip{background-color:var(--bs-body-color);color:var(--bs-body-bg);padding:.5rem;border-radius:5px;font-size:.75rem;opacity:0}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }], animations: [
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
15
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.0.0", type: QuangTooltipComponent, isStandalone: true, selector: "quang-tooltip", inputs: { overlayContent: { classPropertyName: "overlayContent", publicName: "overlayContent", isSignal: true, isRequired: true, transformFunction: null }, quangTooltipPosition: { classPropertyName: "quangTooltipPosition", publicName: "quangTooltipPosition", isSignal: true, isRequired: false, transformFunction: null }, payload: { classPropertyName: "payload", publicName: "payload", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\n @tooltip\n class=\"quang-tooltip\"\n>\n {{ overlayContent() }}\n</div>\n", styles: [".quang-tooltip{background-color:var(--bs-body-color);color:var(--bs-body-bg);padding:.5rem;border-radius:5px;font-size:.75rem;opacity:0}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }], animations: [
16
16
  trigger('tooltip', [
17
17
  state('*', style({ opacity: 1 })),
18
18
  transition(':enter', [style({ opacity: 0 }), animate(200, style({ opacity: 1 }))]),
@@ -20,7 +20,7 @@ class QuangTooltipComponent {
20
20
  ]),
21
21
  ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
22
22
  }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangTooltipComponent, decorators: [{
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangTooltipComponent, decorators: [{
24
24
  type: Component,
25
25
  args: [{ selector: 'quang-tooltip', imports: [OverlayModule], changeDetection: ChangeDetectionStrategy.OnPush, animations: [
26
26
  trigger('tooltip', [
@@ -38,10 +38,10 @@ class QuangTooltipDirective extends QuangBaseOverlayDirective {
38
38
  this.content = input.required({ alias: 'quangTooltip' });
39
39
  this.showMethod = input('hover');
40
40
  }
41
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangTooltipDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
42
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.14", type: QuangTooltipDirective, isStandalone: true, selector: "[quangTooltip]", inputs: { content: { classPropertyName: "content", publicName: "quangTooltip", isSignal: true, isRequired: true, transformFunction: null }, showMethod: { classPropertyName: "showMethod", publicName: "showMethod", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
41
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangTooltipDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
42
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.0", type: QuangTooltipDirective, isStandalone: true, selector: "[quangTooltip]", inputs: { content: { classPropertyName: "content", publicName: "quangTooltip", isSignal: true, isRequired: true, transformFunction: null }, showMethod: { classPropertyName: "showMethod", publicName: "showMethod", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0 }); }
43
43
  }
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangTooltipDirective, decorators: [{
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangTooltipDirective, decorators: [{
45
45
  type: Directive,
46
46
  args: [{
47
47
  selector: '[quangTooltip]',
@@ -1 +1 @@
1
- {"version":3,"file":"quang-overlay-tooltip.mjs","sources":["../../../projects/quang/overlay/tooltip/tooltip.component.ts","../../../projects/quang/overlay/tooltip/tooltip.component.html","../../../projects/quang/overlay/tooltip/tooltip.directive.ts","../../../projects/quang/overlay/tooltip/quang-overlay-tooltip.ts"],"sourcesContent":["import { animate, state, style, transition, trigger } from '@angular/animations'\nimport { ConnectionPositionPair, OverlayModule } from '@angular/cdk/overlay'\nimport { ChangeDetectionStrategy, Component, input, signal } from '@angular/core'\n\nimport { QuangBaseOverlayComponent } from 'quang/overlay/shared'\n\n@Component({\n selector: 'quang-tooltip',\n imports: [OverlayModule],\n templateUrl: './tooltip.component.html',\n styleUrl: './tooltip.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n animations: [\n trigger('tooltip', [\n state('*', style({ opacity: 1 })),\n transition(':enter', [style({ opacity: 0 }), animate(200, style({ opacity: 1 }))]),\n transition(':leave', [style({ opacity: 1 }), animate(300, style({ opacity: 0 }))]),\n ]),\n ],\n})\nexport class QuangTooltipComponent implements QuangBaseOverlayComponent {\n overlayContent = input.required<string>()\n\n quangTooltipPosition = input<'top' | 'bottom' | 'left' | 'right'>('top')\n\n positionPair = signal<ConnectionPositionPair | null>(null)\n\n payload = input<unknown>()\n}\n","<div\n @tooltip\n class=\"quang-tooltip\"\n>\n {{ overlayContent() }}\n</div>\n","import { ComponentType } from '@angular/cdk/portal'\nimport { Directive, input, signal } from '@angular/core'\n\nimport { QuangBaseOverlayDirective } from 'quang/overlay/shared'\n\nimport { QuangTooltipComponent } from './tooltip.component'\n\n@Directive({\n selector: '[quangTooltip]',\n})\nexport class QuangTooltipDirective extends QuangBaseOverlayDirective<QuangTooltipComponent> {\n override targetComponentType = signal<ComponentType<QuangTooltipComponent> | undefined>(QuangTooltipComponent)\n\n override content = input.required<string>({ alias: 'quangTooltip' })\n\n override showMethod = input<'click' | 'hover'>('hover')\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quang-overlay-tooltip.mjs","sources":["../../../projects/quang/overlay/tooltip/tooltip.component.ts","../../../projects/quang/overlay/tooltip/tooltip.component.html","../../../projects/quang/overlay/tooltip/tooltip.directive.ts","../../../projects/quang/overlay/tooltip/quang-overlay-tooltip.ts"],"sourcesContent":["import { animate, state, style, transition, trigger } from '@angular/animations'\nimport { ConnectionPositionPair, OverlayModule } from '@angular/cdk/overlay'\nimport { ChangeDetectionStrategy, Component, input, signal } from '@angular/core'\n\nimport { QuangBaseOverlayComponent } from 'quang/overlay/shared'\n\n@Component({\n selector: 'quang-tooltip',\n imports: [OverlayModule],\n templateUrl: './tooltip.component.html',\n styleUrl: './tooltip.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n\n animations: [\n trigger('tooltip', [\n state('*', style({ opacity: 1 })),\n transition(':enter', [style({ opacity: 0 }), animate(200, style({ opacity: 1 }))]),\n transition(':leave', [style({ opacity: 1 }), animate(300, style({ opacity: 0 }))]),\n ]),\n ],\n})\nexport class QuangTooltipComponent implements QuangBaseOverlayComponent {\n overlayContent = input.required<string>()\n\n quangTooltipPosition = input<'top' | 'bottom' | 'left' | 'right'>('top')\n\n positionPair = signal<ConnectionPositionPair | null>(null)\n\n payload = input<unknown>()\n}\n","<div\n @tooltip\n class=\"quang-tooltip\"\n>\n {{ overlayContent() }}\n</div>\n","import { ComponentType } from '@angular/cdk/portal'\nimport { Directive, input, signal } from '@angular/core'\n\nimport { QuangBaseOverlayDirective } from 'quang/overlay/shared'\n\nimport { QuangTooltipComponent } from './tooltip.component'\n\n@Directive({\n selector: '[quangTooltip]',\n})\nexport class QuangTooltipDirective extends QuangBaseOverlayDirective<QuangTooltipComponent> {\n override targetComponentType = signal<ComponentType<QuangTooltipComponent> | undefined>(QuangTooltipComponent)\n\n override content = input.required<string>({ alias: 'quangTooltip' })\n\n override showMethod = input<'click' | 'hover'>('hover')\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -18,10 +18,10 @@ class QuangTranslationLoaderService {
18
18
  getTranslation(lang) {
19
19
  return this.httpClient.get(`${this.translationBasePath ?? './'}assets/i18n/${lang}.json`);
20
20
  }
21
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangTranslationLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
22
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangTranslationLoaderService }); }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangTranslationLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
22
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangTranslationLoaderService }); }
23
23
  }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangTranslationLoaderService, decorators: [{
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangTranslationLoaderService, decorators: [{
25
25
  type: Injectable
26
26
  }], propDecorators: { translationBasePath: [{
27
27
  type: Optional
@@ -50,10 +50,10 @@ class QuangTranslationService {
50
50
  setTranslationKey(key, value, options) {
51
51
  return this._translocoService.setTranslationKey(key, value, options);
52
52
  }
53
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangTranslationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
54
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangTranslationService }); }
53
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangTranslationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
54
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangTranslationService }); }
55
55
  }
56
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: QuangTranslationService, decorators: [{
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.0", ngImport: i0, type: QuangTranslationService, decorators: [{
57
57
  type: Injectable
58
58
  }] });
59
59
 
@@ -1 +1 @@
1
- {"version":3,"file":"quang-translation.mjs","sources":["../../../projects/quang/translation/translations.tokens.ts","../../../projects/quang/translation/translation-loader.service.ts","../../../projects/quang/translation/translation.service.ts","../../../projects/quang/translation/translation-providers.ts","../../../projects/quang/translation/quang-translation.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\n\nexport const AVAILABLE_LANGS = new InjectionToken<string[]>('AVAILABLE_LANGS')\nexport const DEFAULT_LANG = new InjectionToken<string>('DEFAULT_LANG')\nexport const FALLBACK_LANG = new InjectionToken<string>('FALLBACK_LANG')\nexport const TRANSLATIONS_BASE_PATH = new InjectionToken<string>('TRANSLATIONS_BASE_PATH')\n","import { HttpClient } from '@angular/common/http'\nimport { Injectable, Optional, inject } from '@angular/core'\n\nimport { Translation, TranslocoLoader } from '@jsverse/transloco'\nimport { Observable } from 'rxjs'\n\nimport { TRANSLATIONS_BASE_PATH } from './translations.tokens'\n\n@Injectable()\nexport class QuangTranslationLoaderService implements TranslocoLoader {\n private readonly httpClient: HttpClient = inject(HttpClient)\n\n @Optional() private readonly translationBasePath: string = inject(TRANSLATIONS_BASE_PATH)\n\n getTranslation(lang: string): Observable<Translation> | Promise<Translation> {\n return this.httpClient.get<Translation>(`${this.translationBasePath ?? './'}assets/i18n/${lang}.json`)\n }\n}\n","import { Injectable, inject } from '@angular/core'\nimport { toSignal } from '@angular/core/rxjs-interop'\n\nimport { HashMap, SetTranslationOptions, Translation, TranslocoService } from '@jsverse/transloco'\n\nimport { AVAILABLE_LANGS, DEFAULT_LANG } from './translations.tokens'\n\n@Injectable()\nexport class QuangTranslationService {\n private readonly _translocoService: TranslocoService = inject(TranslocoService)\n\n activeLang = toSignal(this._translocoService.langChanges$, { initialValue: null })\n\n private readonly _availableLangs = inject(AVAILABLE_LANGS)\n\n private readonly _defaultLang = inject(DEFAULT_LANG)\n\n setActiveLang(lang: string): void {\n const targetLang = this._availableLangs.includes(lang) ? lang : this._defaultLang\n this._translocoService.setActiveLang(targetLang)\n }\n\n getActiveLang(): string | null {\n return this.activeLang()\n }\n\n translate(key: string, params?: HashMap): string {\n return this._translocoService.translate(key, params)\n }\n\n setTranslation(translation: Translation, lang?: string, options?: SetTranslationOptions) {\n return this._translocoService.setTranslation(translation, lang, options)\n }\n\n setTranslationKey(key: string, value: string, options?: Omit<SetTranslationOptions, 'merge'>) {\n return this._translocoService.setTranslationKey(key, value, options)\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core'\n\nimport { provideTransloco } from '@jsverse/transloco'\nimport { QuangFeature, QuangFeatureKind, quangFeature } from 'quang'\n\nimport { QuangTranslationLoaderService } from './translation-loader.service'\nimport { QuangTranslationService } from './translation.service'\n\nimport { AVAILABLE_LANGS, DEFAULT_LANG, FALLBACK_LANG, TRANSLATIONS_BASE_PATH } from './translations.tokens'\n\nexport interface TranslationConfig {\n availableLangs: string[]\n defaultLang: string\n fallbackLang: string\n translationsBasePath?: string\n reRenderOnLangChange?: boolean\n prodMode?: boolean\n failedRetries?: number\n logMissingKey?: boolean\n useFallbackTranslation?: boolean\n allowEmpty?: boolean\n}\n\n/**\n * @example\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideTranslation({\n * availableLangs: ['it', 'en'],\n * defaultLang: 'it',\n * fallbackLang: 'it',\n * })\n * ]\n * }\n */\nexport function provideTranslation(config: TranslationConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n QuangTranslationLoaderService,\n QuangTranslationService,\n provideTransloco({\n config: {\n availableLangs: config.availableLangs,\n defaultLang: config.defaultLang,\n fallbackLang: config.fallbackLang,\n reRenderOnLangChange: config.reRenderOnLangChange ?? true,\n prodMode: config.prodMode ?? true,\n failedRetries: config.failedRetries ?? 1,\n missingHandler: {\n logMissingKey: config.logMissingKey ?? true,\n useFallbackTranslation: config.useFallbackTranslation ?? true,\n allowEmpty: config.allowEmpty ?? false,\n },\n },\n loader: QuangTranslationLoaderService,\n }),\n {\n provide: AVAILABLE_LANGS,\n useValue: config.availableLangs,\n },\n {\n provide: DEFAULT_LANG,\n useValue: config.defaultLang,\n },\n {\n provide: FALLBACK_LANG,\n useValue: config.fallbackLang,\n },\n {\n provide: TRANSLATIONS_BASE_PATH,\n useValue: config.translationsBasePath,\n },\n ])\n}\n\nexport function withTranslation(config: TranslationConfig): QuangFeature<QuangFeatureKind.TranslationFeature> {\n return quangFeature(QuangFeatureKind.TranslationFeature, [provideTranslation(config)])\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quang-translation.mjs","sources":["../../../projects/quang/translation/translations.tokens.ts","../../../projects/quang/translation/translation-loader.service.ts","../../../projects/quang/translation/translation.service.ts","../../../projects/quang/translation/translation-providers.ts","../../../projects/quang/translation/quang-translation.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\n\nexport const AVAILABLE_LANGS = new InjectionToken<string[]>('AVAILABLE_LANGS')\nexport const DEFAULT_LANG = new InjectionToken<string>('DEFAULT_LANG')\nexport const FALLBACK_LANG = new InjectionToken<string>('FALLBACK_LANG')\nexport const TRANSLATIONS_BASE_PATH = new InjectionToken<string>('TRANSLATIONS_BASE_PATH')\n","import { HttpClient } from '@angular/common/http'\nimport { Injectable, Optional, inject } from '@angular/core'\n\nimport { Translation, TranslocoLoader } from '@jsverse/transloco'\nimport { Observable } from 'rxjs'\n\nimport { TRANSLATIONS_BASE_PATH } from './translations.tokens'\n\n@Injectable()\nexport class QuangTranslationLoaderService implements TranslocoLoader {\n private readonly httpClient: HttpClient = inject(HttpClient)\n\n @Optional() private readonly translationBasePath: string = inject(TRANSLATIONS_BASE_PATH)\n\n getTranslation(lang: string): Observable<Translation> | Promise<Translation> {\n return this.httpClient.get<Translation>(`${this.translationBasePath ?? './'}assets/i18n/${lang}.json`)\n }\n}\n","import { Injectable, inject } from '@angular/core'\nimport { toSignal } from '@angular/core/rxjs-interop'\n\nimport { HashMap, SetTranslationOptions, Translation, TranslocoService } from '@jsverse/transloco'\n\nimport { AVAILABLE_LANGS, DEFAULT_LANG } from './translations.tokens'\n\n@Injectable()\nexport class QuangTranslationService {\n private readonly _translocoService: TranslocoService = inject(TranslocoService)\n\n activeLang = toSignal(this._translocoService.langChanges$, { initialValue: null })\n\n private readonly _availableLangs = inject(AVAILABLE_LANGS)\n\n private readonly _defaultLang = inject(DEFAULT_LANG)\n\n setActiveLang(lang: string): void {\n const targetLang = this._availableLangs.includes(lang) ? lang : this._defaultLang\n this._translocoService.setActiveLang(targetLang)\n }\n\n getActiveLang(): string | null {\n return this.activeLang()\n }\n\n translate(key: string, params?: HashMap): string {\n return this._translocoService.translate(key, params)\n }\n\n setTranslation(translation: Translation, lang?: string, options?: SetTranslationOptions) {\n return this._translocoService.setTranslation(translation, lang, options)\n }\n\n setTranslationKey(key: string, value: string, options?: Omit<SetTranslationOptions, 'merge'>) {\n return this._translocoService.setTranslationKey(key, value, options)\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core'\n\nimport { provideTransloco } from '@jsverse/transloco'\nimport { QuangFeature, QuangFeatureKind, quangFeature } from 'quang'\n\nimport { QuangTranslationLoaderService } from './translation-loader.service'\nimport { QuangTranslationService } from './translation.service'\n\nimport { AVAILABLE_LANGS, DEFAULT_LANG, FALLBACK_LANG, TRANSLATIONS_BASE_PATH } from './translations.tokens'\n\nexport interface TranslationConfig {\n availableLangs: string[]\n defaultLang: string\n fallbackLang: string\n translationsBasePath?: string\n reRenderOnLangChange?: boolean\n prodMode?: boolean\n failedRetries?: number\n logMissingKey?: boolean\n useFallbackTranslation?: boolean\n allowEmpty?: boolean\n}\n\n/**\n * @example\n * export const appConfig: ApplicationConfig = {\n * providers: [\n * provideTranslation({\n * availableLangs: ['it', 'en'],\n * defaultLang: 'it',\n * fallbackLang: 'it',\n * })\n * ]\n * }\n */\nexport function provideTranslation(config: TranslationConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n QuangTranslationLoaderService,\n QuangTranslationService,\n provideTransloco({\n config: {\n availableLangs: config.availableLangs,\n defaultLang: config.defaultLang,\n fallbackLang: config.fallbackLang,\n reRenderOnLangChange: config.reRenderOnLangChange ?? true,\n prodMode: config.prodMode ?? true,\n failedRetries: config.failedRetries ?? 1,\n missingHandler: {\n logMissingKey: config.logMissingKey ?? true,\n useFallbackTranslation: config.useFallbackTranslation ?? true,\n allowEmpty: config.allowEmpty ?? false,\n },\n },\n loader: QuangTranslationLoaderService,\n }),\n {\n provide: AVAILABLE_LANGS,\n useValue: config.availableLangs,\n },\n {\n provide: DEFAULT_LANG,\n useValue: config.defaultLang,\n },\n {\n provide: FALLBACK_LANG,\n useValue: config.fallbackLang,\n },\n {\n provide: TRANSLATIONS_BASE_PATH,\n useValue: config.translationsBasePath,\n },\n ])\n}\n\nexport function withTranslation(config: TranslationConfig): QuangFeature<QuangFeatureKind.TranslationFeature> {\n return quangFeature(QuangFeatureKind.TranslationFeature, [provideTranslation(config)])\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/forms/index.d.ts CHANGED
@@ -1,2 +1,51 @@
1
- export * from './validators';
2
- export * from './form-group-model';
1
+ import { ValidatorFn, AbstractControl, FormGroup, FormControl } from '@angular/forms';
2
+
3
+ declare enum EuroLocale {
4
+ AT = "AT",
5
+ BE = "BE",
6
+ BG = "BG",
7
+ CY = "CY",
8
+ CZ = "CZ",
9
+ DE = "DE",
10
+ DK = "DK",
11
+ EE = "EE",
12
+ GR = "GR",
13
+ ES = "ES",
14
+ FI = "FI",
15
+ FR = "FR",
16
+ GB = "GB",
17
+ HU = "HU",
18
+ IE = "IE",
19
+ IT = "IT",
20
+ LT = "LT",
21
+ LU = "LU",
22
+ LV = "LV",
23
+ MT = "MT",
24
+ NL = "NL",
25
+ PL = "PL",
26
+ PT = "PT",
27
+ RO = "RO",
28
+ SE = "SE",
29
+ SI = "SI",
30
+ SK = "SK"
31
+ }
32
+ declare const europeanVatNumber: Record<EuroLocale, RegExp>;
33
+ declare function fileMaxSize(maxSize: number): ValidatorFn;
34
+ declare function fileMinSize(minSize: number): ValidatorFn;
35
+ declare function isFile(): ValidatorFn;
36
+ declare function fileType(fileTypes: string[]): (control: AbstractControl) => Record<string, any> | null;
37
+ declare function fileExtensions(list: string[]): (control: AbstractControl) => Record<string, any> | null;
38
+ declare function requiredCheckbox(): (control: AbstractControl) => Record<string, any> | null;
39
+ declare function minDate(dateToCompare: Date): (control: AbstractControl) => Record<string, any> | null;
40
+ declare function maxDate(dateToCompare: Date): (control: AbstractControl) => Record<string, any> | null;
41
+ declare function dateBetween(start: Date, end: Date): (control: AbstractControl) => Record<string, any> | null;
42
+ declare function isFiscalCode(): (control: AbstractControl) => Record<string, any> | null;
43
+ declare function isVatNumber(localeList: EuroLocale[]): (control: AbstractControl) => Record<string, any> | null;
44
+ declare function wysiwygRequired(): (control: AbstractControl) => Record<string, any> | null;
45
+
46
+ type FormGroupModel<T> = FormGroup<{
47
+ [K in keyof T]: FormControl<T[K]>;
48
+ }>;
49
+
50
+ export { EuroLocale, dateBetween, europeanVatNumber, fileExtensions, fileMaxSize, fileMinSize, fileType, isFile, isFiscalCode, isVatNumber, maxDate, minDate, requiredCheckbox, wysiwygRequired };
51
+ export type { FormGroupModel };
package/index.d.ts CHANGED
@@ -1,23 +1,24 @@
1
- import { EnvironmentProviders, InjectionToken, Provider } from '@angular/core';
2
- export declare const QUANG_CONFIG: InjectionToken<QuangConfig>;
3
- export declare const QUANG_LOGGING_BEHAVIOR: InjectionToken<"normal" | "verbose">;
4
- export interface QuangConfig {
1
+ import { InjectionToken, Provider, EnvironmentProviders } from '@angular/core';
2
+
3
+ declare const QUANG_CONFIG: InjectionToken<QuangConfig>;
4
+ declare const QUANG_LOGGING_BEHAVIOR: InjectionToken<"normal" | "verbose">;
5
+ interface QuangConfig {
5
6
  verbose?: boolean;
6
7
  baseHref?: string;
7
8
  }
8
9
  /** The list of features as an enum to uniquely type each feature. */
9
- export declare const enum QuangFeatureKind {
10
+ declare const enum QuangFeatureKind {
10
11
  AuthFeature = 0,
11
12
  TranslationFeature = 1,
12
13
  LoaderFeature = 2
13
14
  }
14
15
  /** Helper type to represent a Quang feature. */
15
- export interface QuangFeature<FeatureKind extends QuangFeatureKind> {
16
+ interface QuangFeature<FeatureKind extends QuangFeatureKind> {
16
17
  ɵkind: FeatureKind;
17
18
  ɵproviders: (Provider | EnvironmentProviders)[];
18
19
  }
19
20
  /** Helper function to create an object that represents a Quang feature. */
20
- export declare function quangFeature<FeatureKind extends QuangFeatureKind>(kind: FeatureKind, providers: (Provider | EnvironmentProviders)[]): QuangFeature<FeatureKind>;
21
+ declare function quangFeature<FeatureKind extends QuangFeatureKind>(kind: FeatureKind, providers: (Provider | EnvironmentProviders)[]): QuangFeature<FeatureKind>;
21
22
  /**
22
23
  * A type alias that represents all Quang features available for use with `provideQuangConfig`.
23
24
  * Features can be enabled by adding special functions to the `provideQuangConfig` call.
@@ -26,5 +27,8 @@ export declare function quangFeature<FeatureKind extends QuangFeatureKind>(kind:
26
27
  *
27
28
  * @see {@link provideQuangConfig}
28
29
  */
29
- export type QuangFeatures = QuangFeature<QuangFeatureKind>;
30
- export declare function provideQuangConfig(config?: QuangConfig, ...features: QuangFeatures[]): EnvironmentProviders;
30
+ type QuangFeatures = QuangFeature<QuangFeatureKind>;
31
+ declare function provideQuangConfig(config?: QuangConfig, ...features: QuangFeatures[]): EnvironmentProviders;
32
+
33
+ export { QUANG_CONFIG, QUANG_LOGGING_BEHAVIOR, QuangFeatureKind, provideQuangConfig, quangFeature };
34
+ export type { QuangConfig, QuangFeature, QuangFeatures };
package/loader/index.d.ts CHANGED
@@ -1,4 +1,69 @@
1
- export * from './loader.interceptor';
2
- export * from './loader.component';
3
- export * from './loader.service';
4
- export * from './loader-providers';
1
+ import { HttpInterceptorFn } from '@angular/common/http';
2
+ import * as _angular_core from '@angular/core';
3
+ import { InjectionToken, EnvironmentProviders } from '@angular/core';
4
+ import { UrlData } from 'quang/shared';
5
+ import * as rxjs from 'rxjs';
6
+ import { QuangFeature, QuangFeatureKind } from 'quang';
7
+
8
+ declare const LOADER_EXCLUDED_URLS: InjectionToken<UrlData[]>;
9
+ /**
10
+ * @deprecated
11
+ * @see {@link LOADER_EXCLUDED_URLS}
12
+ */
13
+ declare const EXCLUDED_URL: InjectionToken<UrlData[]>;
14
+ declare const quangLoaderInterceptor: HttpInterceptorFn;
15
+
16
+ /**
17
+ * @example
18
+ * <quang-loader></quang-loader>
19
+ *
20
+ * @example
21
+ * <quang-loader>
22
+ * custom loader here
23
+ * </quang-loader>
24
+ */
25
+ declare class QuangLoaderComponent {
26
+ /**
27
+ * Minimum time (in milliseconds) to show the loader for
28
+ * @default 500
29
+ */
30
+ showAtLeastFor: _angular_core.InputSignal<number>;
31
+ private readonly loaderService;
32
+ isLoading: _angular_core.Signal<boolean>;
33
+ showLoaderBuffer$: rxjs.Observable<boolean>;
34
+ showLoader: _angular_core.Signal<boolean | undefined>;
35
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<QuangLoaderComponent, never>;
36
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<QuangLoaderComponent, "quang-loader", never, { "showAtLeastFor": { "alias": "showAtLeastFor"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
37
+ }
38
+
39
+ declare class QuangLoaderService {
40
+ private loaderState;
41
+ isLoading: _angular_core.Signal<boolean>;
42
+ show(): void;
43
+ hide(): void;
44
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<QuangLoaderService, never>;
45
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<QuangLoaderService>;
46
+ }
47
+
48
+ /**
49
+ * @example
50
+ * export const appConfig: ApplicationConfig = {
51
+ * providers: [
52
+ * provideLoader([
53
+ * {
54
+ * url: 'assets',
55
+ * method: 'GET',
56
+ * },
57
+ * ])
58
+ * ]
59
+ * }
60
+ */
61
+ declare function provideQuangLoaderExcludedUrls(excludedUrls: UrlData[]): EnvironmentProviders;
62
+ declare function withLoaderExcludedUrls(excludedUrls: UrlData[]): QuangFeature<QuangFeatureKind.LoaderFeature>;
63
+ /**
64
+ * @deprecated
65
+ * @see {@link provideQuangLoaderExcludedUrls}
66
+ */
67
+ declare const provideLoader: typeof provideQuangLoaderExcludedUrls;
68
+
69
+ export { EXCLUDED_URL, LOADER_EXCLUDED_URLS, QuangLoaderComponent, QuangLoaderService, provideLoader, provideQuangLoaderExcludedUrls, quangLoaderInterceptor, withLoaderExcludedUrls };
@@ -1 +1,34 @@
1
- export * from './modal.component';
1
+ import * as _angular_cdk_overlay from '@angular/cdk/overlay';
2
+ import { Overlay } from '@angular/cdk/overlay';
3
+ import * as _angular_core from '@angular/core';
4
+ import { AfterViewInit, OnDestroy } from '@angular/core';
5
+ import { CdkPortal } from '@angular/cdk/portal';
6
+
7
+ type ModalAnimationMode = 'SLIDE_FROM_LEFT_TO_RIGHT' | 'SLIDE_FROM_RIGHT_TO_LEFT' | 'SLIDE_TOP_TO_BOTTOM' | 'SLIDE_BOTTOM_TO_TOP' | 'FADE';
8
+ declare class QuangModalComponent implements AfterViewInit, OnDestroy {
9
+ private readonly overlay;
10
+ readonly portal?: CdkPortal;
11
+ backdropClick: _angular_core.OutputEmitterRef<void>;
12
+ position: _angular_core.InputSignal<"right" | "left" | "center">;
13
+ height: _angular_core.InputSignal<string>;
14
+ width: _angular_core.InputSignal<string>;
15
+ padding: _angular_core.InputSignal<string>;
16
+ containerClass: _angular_core.InputSignal<string>;
17
+ animationMode: _angular_core.InputSignal<ModalAnimationMode | undefined>;
18
+ backgroundColor: _angular_core.InputSignal<string | undefined>;
19
+ showBackdrop: _angular_core.InputSignal<boolean>;
20
+ positionStrategy: _angular_core.Signal<_angular_cdk_overlay.GlobalPositionStrategy>;
21
+ animationClassEnter: _angular_core.Signal<"" | "left-to-right-enter-active" | "right-to-left-enter-active" | "top-to-bottom-enter-active" | "fade-enter-active">;
22
+ private readonly destroyRef;
23
+ private overlayConfig?;
24
+ private overlayRef?;
25
+ constructor(overlay: Overlay);
26
+ ngAfterViewInit(): void;
27
+ ngOnDestroy(): void;
28
+ closeModal(): void;
29
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<QuangModalComponent, never>;
30
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<QuangModalComponent, "quang-modal", never, { "position": { "alias": "position"; "required": true; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "containerClass": { "alias": "containerClass"; "required": false; "isSignal": true; }; "animationMode": { "alias": "animationMode"; "required": false; "isSignal": true; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; "isSignal": true; }; "showBackdrop": { "alias": "showBackdrop"; "required": false; "isSignal": true; }; }, { "backdropClick": "backdropClick"; }, never, ["[header]", "[body]", "[footer]"], true, never>;
31
+ }
32
+
33
+ export { QuangModalComponent };
34
+ export type { ModalAnimationMode };