@weeehaoooz/talos-ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +85 -0
- package/fesm2022/weeehaoooz-talos-ui-button-button-group.mjs +237 -0
- package/fesm2022/weeehaoooz-talos-ui-button-button-group.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-button-button.mjs +93 -0
- package/fesm2022/weeehaoooz-talos-ui-button-button.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-core.mjs +438 -0
- package/fesm2022/weeehaoooz-talos-ui-core.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs +233 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs +361 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs +312 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs +235 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs +462 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs +805 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs +267 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs +351 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs +566 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs +534 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs +446 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs +376 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs +147 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs +242 -0
- package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs +514 -0
- package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs +548 -0
- package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs +692 -0
- package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs +761 -0
- package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs +896 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs +872 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs +119 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs +135 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs +666 -0
- package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs +147 -0
- package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-input.mjs +33 -0
- package/fesm2022/weeehaoooz-talos-ui-form-input.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs +455 -0
- package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs +379 -0
- package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs +297 -0
- package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs +661 -0
- package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs +346 -0
- package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs +896 -0
- package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs +252 -0
- package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs +916 -0
- package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-layout.mjs +851 -0
- package/fesm2022/weeehaoooz-talos-ui-layout.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-nav.mjs +897 -0
- package/fesm2022/weeehaoooz-talos-ui-nav.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui.mjs +17058 -0
- package/fesm2022/weeehaoooz-talos-ui.mjs.map +1 -0
- package/package.json +203 -0
- package/schematics/collection.json +10 -0
- package/schematics/ng-add/index.d.ts +3 -0
- package/schematics/ng-add/index.js +99 -0
- package/schematics/ng-add/schema.d.ts +10 -0
- package/schematics/ng-add/schema.js +2 -0
- package/schematics/ng-add/schema.json +52 -0
- package/styles/_alert.scss +56 -0
- package/styles/_badge.scss +279 -0
- package/styles/_button-group.scss +470 -0
- package/styles/_buttons.scss +442 -0
- package/styles/_card.scss +18 -0
- package/styles/_dialog.scss +116 -0
- package/styles/_drop-zone.scss +19 -0
- package/styles/_form-controls.scss +660 -0
- package/styles/_slide-toggle.scss +171 -0
- package/styles/_status-tag.scss +108 -0
- package/styles/_timeline.scss +19 -0
- package/styles/_tooltip.scss +32 -0
- package/styles/_typography.scss +279 -0
- package/styles/_variables.scss +590 -0
- package/styles/index.scss +15 -0
- package/types/weeehaoooz-talos-ui-button-button-group.d.ts +59 -0
- package/types/weeehaoooz-talos-ui-button-button-group.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-button-button.d.ts +38 -0
- package/types/weeehaoooz-talos-ui-button-button.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-core.d.ts +95 -0
- package/types/weeehaoooz-talos-ui-core.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-display-badge.d.ts +119 -0
- package/types/weeehaoooz-talos-ui-data-display-badge.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts +135 -0
- package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts +144 -0
- package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts +83 -0
- package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts +255 -0
- package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts +204 -0
- package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts +101 -0
- package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts +138 -0
- package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts +161 -0
- package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-feedback-alert.d.ts +212 -0
- package/types/weeehaoooz-talos-ui-feedback-alert.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts +259 -0
- package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts +147 -0
- package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts +32 -0
- package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-affix.d.ts +88 -0
- package/types/weeehaoooz-talos-ui-form-affix.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts +113 -0
- package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-checkbox.d.ts +165 -0
- package/types/weeehaoooz-talos-ui-form-checkbox.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-chips.d.ts +152 -0
- package/types/weeehaoooz-talos-ui-form-chips.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-color-picker.d.ts +144 -0
- package/types/weeehaoooz-talos-ui-form-color-picker.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-date-picker.d.ts +138 -0
- package/types/weeehaoooz-talos-ui-form-date-picker.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts +148 -0
- package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts +44 -0
- package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts +48 -0
- package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts +227 -0
- package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-form-field.d.ts +42 -0
- package/types/weeehaoooz-talos-ui-form-form-field.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-input.d.ts +15 -0
- package/types/weeehaoooz-talos-ui-form-input.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-otp.d.ts +111 -0
- package/types/weeehaoooz-talos-ui-form-otp.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-password-input.d.ts +145 -0
- package/types/weeehaoooz-talos-ui-form-password-input.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-radio.d.ts +84 -0
- package/types/weeehaoooz-talos-ui-form-radio.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-range-input.d.ts +181 -0
- package/types/weeehaoooz-talos-ui-form-range-input.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-rating.d.ts +110 -0
- package/types/weeehaoooz-talos-ui-form-rating.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-select-input.d.ts +195 -0
- package/types/weeehaoooz-talos-ui-form-select-input.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts +79 -0
- package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts +192 -0
- package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-layout.d.ts +286 -0
- package/types/weeehaoooz-talos-ui-layout.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-nav.d.ts +384 -0
- package/types/weeehaoooz-talos-ui-nav.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui.d.ts +5050 -0
- package/types/weeehaoooz-talos-ui.d.ts.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weeehaoooz-talos-ui-feedback-dialog.mjs","sources":["../../../projects/talos-ui/feedback/dialog/dialog.types.ts","../../../projects/talos-ui/feedback/dialog/dialog-ref.ts","../../../projects/talos-ui/feedback/dialog/dialog.directives.ts","../../../projects/talos-ui/feedback/dialog/dialog-header/dialog-header.component.ts","../../../projects/talos-ui/feedback/dialog/dialog-header/dialog-header.component.html","../../../projects/talos-ui/feedback/dialog/dialog-content/dialog-content.component.ts","../../../projects/talos-ui/feedback/dialog/dialog-content/dialog-content.component.html","../../../projects/talos-ui/feedback/dialog/dialog-footer/dialog-footer.component.ts","../../../projects/talos-ui/feedback/dialog/dialog-footer/dialog-footer.component.html","../../../projects/talos-ui/feedback/dialog/confirm-dialog/confirm-dialog.component.ts","../../../projects/talos-ui/feedback/dialog/confirm-dialog/confirm-dialog.component.html","../../../projects/talos-ui/feedback/dialog/dialog.service.ts","../../../projects/talos-ui/feedback/dialog/dialog.module.ts","../../../projects/talos-ui/feedback/dialog/weeehaoooz-talos-ui-feedback-dialog.ts"],"sourcesContent":["import { InjectionToken, TemplateRef } from '@angular/core';\n\n/** Size options for the dialog modal */\nexport type TalosDialogSize = 'auto' | 'sm' | 'md' | 'lg' | 'xl' | 'fullscreen';\n\n/** Backdrop blur intensity options */\nexport type TalosDialogBlur = boolean | 'none' | 'sm' | 'md' | 'lg';\n\n/** Visual variant for dialog styling and icons */\nexport type TalosDialogVariant = 'default' | 'primary' | 'danger' | 'warning' | 'info' | 'success';\n\n/** Footer button alignment */\nexport type TalosDialogFooterAlign = 'start' | 'center' | 'end' | 'space-between';\n\n/** Content padding variants */\nexport type TalosDialogPadding = 'none' | 'sm' | 'md' | 'lg';\n\n/**\n * Configuration options for opening a Talos Dialog.\n */\nexport interface TalosDialogConfig<TData = unknown> {\n /** Sizing preset: 'auto' (content-hugging), 'sm' (420px), 'md' (560px), 'lg' (768px), 'xl' (1024px), or 'fullscreen' */\n size?: TalosDialogSize;\n\n /** Blur background effect: true/'md' (standard frosted glass), 'sm' (light blur), 'lg' (heavy blur), or false/'none' */\n backdropBlur?: TalosDialogBlur;\n\n /** Explicit width override (e.g. '500px', '75vw') */\n width?: string;\n\n /** Explicit min-width override */\n minWidth?: string;\n\n /** Explicit max-width override */\n maxWidth?: string;\n\n /** Explicit height override (e.g. '600px', '80vh') */\n height?: string;\n\n /** Explicit min-height override */\n minHeight?: string;\n\n /** Explicit max-height override */\n maxHeight?: string;\n\n /** Custom CSS classes to append to the dialog panel */\n panelClass?: string | string[];\n\n /** Custom CSS classes to append to the dialog backdrop */\n backdropClass?: string | string[];\n\n /** Whether the dialog has a backdrop overlay. Defaults to true. */\n hasBackdrop?: boolean;\n\n /** Whether the user can dismiss the dialog by clicking the backdrop or pressing ESC. Defaults to false. */\n disableClose?: boolean;\n\n /** Whether pressing ESC closes the dialog. Defaults to true unless disableClose is true. */\n closeOnEsc?: boolean;\n\n /** Whether clicking the backdrop closes the dialog. Defaults to true unless disableClose is true. */\n closeOnBackdropClick?: boolean;\n\n /** Arbitrary data passed to the dialog component via TALOS_DIALOG_DATA */\n data?: TData;\n\n /** Accessible label for the dialog */\n ariaLabel?: string;\n\n /** ID of the element that labels the dialog */\n ariaLabelledBy?: string;\n\n /** ID of the element that describes the dialog */\n ariaDescribedBy?: string;\n\n /** ARIA role for the dialog element ('dialog' or 'alertdialog') */\n role?: 'dialog' | 'alertdialog';\n\n /** Whether focus should automatically be trapped and moved to the first focusable element */\n autoFocus?: boolean | 'first-tabbable' | 'first-heading' | 'dialog';\n\n /** Whether focus should be restored to the triggering element upon closure */\n restoreFocus?: boolean;\n\n /** Custom ID for the dialog */\n id?: string;\n}\n\n/**\n * Options for the confirm dialog convenience method.\n */\nexport interface TalosConfirmDialogOptions {\n title: string;\n message: string | TemplateRef<unknown>;\n confirmText?: string;\n cancelText?: string;\n variant?: TalosDialogVariant;\n size?: TalosDialogSize;\n backdropBlur?: TalosDialogBlur;\n disableClose?: boolean;\n showCancel?: boolean;\n icon?: any;\n}\n\n/**\n * Options for the alert dialog convenience method.\n */\nexport interface TalosAlertDialogOptions {\n title: string;\n message: string | TemplateRef<unknown>;\n okText?: string;\n variant?: TalosDialogVariant;\n size?: TalosDialogSize;\n backdropBlur?: TalosDialogBlur;\n icon?: any;\n}\n\n/** Injection token for data passed to a dialog component */\nexport const TALOS_DIALOG_DATA = new InjectionToken<unknown>('TALOS_DIALOG_DATA');\n\n/** Injection token for dialog configuration */\nexport const TALOS_DIALOG_CONFIG = new InjectionToken<TalosDialogConfig>('TALOS_DIALOG_CONFIG');\n\n/** Injection token for dialog reference */\nexport const TALOS_DIALOG_REF = new InjectionToken<unknown>('TALOS_DIALOG_REF');\n","import { DialogRef } from '@angular/cdk/dialog';\nimport { Observable } from 'rxjs';\nimport { TalosDialogConfig } from './dialog.types';\n\n/**\n * Reference to an actively open dialog instance.\n */\nexport class TalosDialogRef<R = unknown, D = unknown> {\n constructor(\n readonly cdkDialogRef: DialogRef<R, unknown>,\n readonly config: TalosDialogConfig<D>,\n readonly data?: D\n ) {}\n\n /** Unique identifier for the dialog */\n get id(): string {\n return this.cdkDialogRef.id;\n }\n\n /** Observable that emits when the dialog is closed with the result value */\n get closed(): Observable<R | undefined> {\n return this.cdkDialogRef.closed;\n }\n\n /** Observable that emits when the backdrop overlay is clicked */\n get backdropClick(): Observable<MouseEvent> {\n return this.cdkDialogRef.backdropClick;\n }\n\n /** Observable that emits keyboard events received by the dialog overlay */\n get keydownEvents(): Observable<KeyboardEvent> {\n return this.cdkDialogRef.keydownEvents;\n }\n\n /**\n * Close the dialog, optionally returning a result value to the opener.\n */\n close(result?: R): void {\n this.cdkDialogRef.close(result);\n }\n\n /**\n * Dynamically update the size of the dialog panel.\n */\n updateSize(width = '', height = ''): this {\n this.cdkDialogRef.updateSize(width, height);\n return this;\n }\n\n /**\n * Add CSS class(es) to the dialog overlay panel.\n */\n addPanelClass(classes: string | string[]): this {\n this.cdkDialogRef.addPanelClass(classes);\n return this;\n }\n\n /**\n * Remove CSS class(es) from the dialog overlay panel.\n */\n removePanelClass(classes: string | string[]): this {\n this.cdkDialogRef.removePanelClass(classes);\n return this;\n }\n}\n","import {\n Directive,\n HostListener,\n inject,\n input,\n OnInit,\n ElementRef\n} from '@angular/core';\nimport { DialogRef } from '@angular/cdk/dialog';\n\nlet uniqueTitleId = 0;\nlet uniqueDescId = 0;\n\n/**\n * Directive for the dialog title element.\n * Automatically handles accessible ARIA labeling.\n */\n@Directive({\n selector: '[talosDialogTitle]',\n host: {\n 'class': 'talos-dialog-title',\n '[attr.id]': 'id()'\n }\n})\nexport class TalosDialogTitleDirective implements OnInit {\n /** Optional custom ID for accessibility linking */\n readonly id = input<string>(`talos-dialog-title-${++uniqueTitleId}`);\n private readonly dialogRef = inject(DialogRef, { optional: true });\n\n ngOnInit(): void {\n if (this.dialogRef) {\n // Allow CDK or parent container to associate the title ID\n }\n }\n}\n\n/**\n * Directive for the dialog description/subtitle element.\n * Automatically handles accessible ARIA descriptions.\n */\n@Directive({\n selector: '[talosDialogDescription]',\n host: {\n 'class': 'talos-dialog-description',\n '[attr.id]': 'id()'\n }\n})\nexport class TalosDialogDescriptionDirective {\n /** Optional custom ID for accessibility linking */\n readonly id = input<string>(`talos-dialog-desc-${++uniqueDescId}`);\n}\n\n/**\n * Directive placed on buttons inside a dialog to trigger dismissal.\n * Passes the optional [talosDialogClose] value as the dialog result.\n */\n@Directive({\n selector: '[talosDialogClose]',\n host: {\n '(click)': 'onClick($event)'\n }\n})\nexport class TalosDialogCloseDirective {\n /** Value returned when closing the dialog */\n readonly dialogResult = input<unknown>(undefined, { alias: 'talosDialogClose' });\n\n private readonly dialogRef = inject(DialogRef, { optional: true });\n\n protected onClick(event: MouseEvent): void {\n if (this.dialogRef) {\n this.dialogRef.close(this.dialogResult());\n }\n }\n}\n","import { Component, inject, input, output } from '@angular/core';\nimport { DialogRef } from '@angular/cdk/dialog';\nimport { LucideX } from '@lucide/angular';\nimport { TalosDialogVariant } from '../dialog.types';\nimport { TalosDialogTitleDirective, TalosDialogDescriptionDirective } from '../dialog.directives';\n\n@Component({\n selector: 'talos-dialog-header, [talosDialogHeader]',\n imports: [LucideX, TalosDialogTitleDirective, TalosDialogDescriptionDirective],\n templateUrl: './dialog-header.component.html',\n styleUrl: './dialog-header.component.scss',\n host: {\n 'class': 'talos-dialog-header-host',\n '[class.has-divider]': 'divider()',\n '[class.variant-danger]': 'variant() === \"danger\"',\n '[class.variant-warning]': 'variant() === \"warning\"',\n '[class.variant-info]': 'variant() === \"info\"',\n '[class.variant-success]': 'variant() === \"success\"'\n }\n})\nexport class TalosDialogHeaderComponent {\n /** Main dialog title */\n readonly title = input<string>();\n\n /** Subtitle or helper description */\n readonly subtitle = input<string>();\n\n /** Visual accent variant */\n readonly variant = input<TalosDialogVariant>('default');\n\n /** Whether to show a bottom divider line */\n readonly divider = input<boolean>(true);\n\n /** Whether to show the top-right X close button */\n readonly showCloseButton = input<boolean>(true);\n\n /** Accessible label for the close button */\n readonly closeButtonAriaLabel = input<string>('Close dialog');\n\n /** Emitted when the close button is clicked */\n readonly closeClick = output<MouseEvent>();\n\n private readonly dialogRef = inject(DialogRef, { optional: true });\n\n protected handleClose(event: MouseEvent): void {\n this.closeClick.emit(event);\n if (this.dialogRef) {\n this.dialogRef.close();\n }\n }\n}\n","<div class=\"talos-dialog-header-inner\">\n <div class=\"talos-dialog-header-left\">\n <div class=\"talos-dialog-header-icon-slot\">\n <ng-content select=\"[talos-dialog-icon], [dialog-icon], lucide-icon, svg\"></ng-content>\n </div>\n\n <div class=\"talos-dialog-header-text\">\n @if (title()) {\n <h2 talosDialogTitle class=\"talos-dialog-header-title\">{{ title() }}</h2>\n } @else {\n <ng-content select=\"[talosDialogTitle], h2, h3\"></ng-content>\n }\n\n @if (subtitle()) {\n <p talosDialogDescription class=\"talos-dialog-header-subtitle\">{{ subtitle() }}</p>\n } @else {\n <ng-content select=\"[talosDialogDescription], p\"></ng-content>\n }\n </div>\n </div>\n\n <div class=\"talos-dialog-header-actions\">\n <ng-content select=\"[talos-dialog-header-actions]\"></ng-content>\n\n @if (showCloseButton()) {\n <button\n type=\"button\"\n class=\"talos-dialog-header-close-btn\"\n [attr.aria-label]=\"closeButtonAriaLabel()\"\n (click)=\"handleClose($event)\"\n >\n <svg lucideX [size]=\"18\" aria-hidden=\"true\"></svg>\n </button>\n }\n </div>\n</div>\n","import { Component, input } from '@angular/core';\nimport { TalosDialogPadding } from '../dialog.types';\n\n@Component({\n selector: 'talos-dialog-content, [talosDialogContent]',\n templateUrl: './dialog-content.component.html',\n styleUrl: './dialog-content.component.scss',\n host: {\n 'class': 'talos-dialog-content-host',\n '[class.padding-none]': 'padding() === \"none\"',\n '[class.padding-sm]': 'padding() === \"sm\"',\n '[class.padding-md]': 'padding() === \"md\"',\n '[class.padding-lg]': 'padding() === \"lg\"'\n }\n})\nexport class TalosDialogContentComponent {\n /** Internal padding size */\n readonly padding = input<TalosDialogPadding>('md');\n}\n","<ng-content></ng-content>\n","import { Component, input } from '@angular/core';\nimport { TalosDialogFooterAlign } from '../dialog.types';\n\n@Component({\n selector: 'talos-dialog-footer, [talosDialogFooter]',\n templateUrl: './dialog-footer.component.html',\n styleUrl: './dialog-footer.component.scss',\n host: {\n 'class': 'talos-dialog-footer-host',\n '[class.has-divider]': 'divider()',\n '[class.is-sticky]': 'sticky()',\n '[class.align-start]': 'align() === \"start\"',\n '[class.align-center]': 'align() === \"center\"',\n '[class.align-end]': 'align() === \"end\"',\n '[class.align-space-between]': 'align() === \"space-between\"'\n }\n})\nexport class TalosDialogFooterComponent {\n /** Button alignment in footer */\n readonly align = input<TalosDialogFooterAlign>('end');\n\n /** Whether to show a top divider border */\n readonly divider = input<boolean>(true);\n\n /** Whether the footer sticks to the bottom when content scrolls */\n readonly sticky = input<boolean>(false);\n}\n","<div class=\"talos-dialog-footer-inner\">\n <ng-content></ng-content>\n</div>\n","import { Component, inject } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { DialogRef } from '@angular/cdk/dialog';\nimport {\n LucideAlertTriangle,\n LucideInfo,\n LucideCheckCircle2,\n LucideAlertCircle,\n LucideHelpCircle\n} from '@lucide/angular';\nimport { TalosButtonDirective } from '@weeehaoooz/talos-ui/button/button';\nimport { TALOS_DIALOG_DATA, TalosConfirmDialogOptions } from '../dialog.types';\nimport { TalosDialogHeaderComponent } from '../dialog-header/dialog-header.component';\nimport { TalosDialogContentComponent } from '../dialog-content/dialog-content.component';\nimport { TalosDialogFooterComponent } from '../dialog-footer/dialog-footer.component';\n\n@Component({\n selector: 'talos-confirm-dialog',\n imports: [\n NgTemplateOutlet,\n TalosButtonDirective,\n TalosDialogHeaderComponent,\n TalosDialogContentComponent,\n TalosDialogFooterComponent,\n LucideAlertTriangle,\n LucideInfo,\n LucideCheckCircle2,\n LucideAlertCircle\n ],\n templateUrl: './confirm-dialog.component.html',\n styleUrl: './confirm-dialog.component.scss',\n host: {\n 'class': 'talos-confirm-dialog-host'\n }\n})\nexport class TalosConfirmDialogComponent {\n readonly data = inject<TalosConfirmDialogOptions>(TALOS_DIALOG_DATA, { optional: true }) || {\n title: 'Confirmation',\n message: 'Are you sure you want to proceed?'\n };\n\n private readonly dialogRef = inject(DialogRef);\n\n protected readonly title = this.data.title;\n protected readonly message = this.data.message;\n protected readonly isTemplateMessage = typeof this.data.message !== 'string';\n protected readonly confirmText = this.data.confirmText ?? 'Confirm';\n protected readonly cancelText = this.data.cancelText ?? 'Cancel';\n protected readonly variant = this.data.variant ?? 'primary';\n protected readonly showCancel = this.data.showCancel ?? true;\n\n protected get confirmButtonVariant(): 'primary' | 'danger' | 'secondary' {\n if (this.variant === 'danger') return 'danger';\n return 'primary';\n }\n\n protected onConfirm(): void {\n this.dialogRef.close(true);\n }\n\n protected onCancel(): void {\n this.dialogRef.close(false);\n }\n}\n","<talos-dialog-header [title]=\"title\" [variant]=\"variant\" [divider]=\"false\">\n <div class=\"confirm-icon-wrapper\" [class]=\"'variant-' + variant\" talos-dialog-icon>\n @switch (variant) {\n @case ('danger') {\n <svg lucideAlertCircle [size]=\"22\"></svg>\n }\n @case ('warning') {\n <svg lucideAlertTriangle [size]=\"22\"></svg>\n }\n @case ('success') {\n <svg lucideCheckCircle2 [size]=\"22\"></svg>\n }\n @default {\n <svg lucideInfo [size]=\"22\"></svg>\n }\n }\n </div>\n</talos-dialog-header>\n\n<talos-dialog-content padding=\"sm\">\n @if (isTemplateMessage) {\n <ng-container [ngTemplateOutlet]=\"$any(message)\"></ng-container>\n } @else {\n <p class=\"confirm-message-text\">{{ message }}</p>\n }\n</talos-dialog-content>\n\n<talos-dialog-footer [divider]=\"false\" align=\"end\">\n @if (showCancel) {\n <button talosButton variant=\"secondary\" size=\"md\" (click)=\"onCancel()\">\n {{ cancelText }}\n </button>\n }\n <button talosButton [variant]=\"confirmButtonVariant\" size=\"md\" (click)=\"onConfirm()\">\n {{ confirmText }}\n </button>\n</talos-dialog-footer>\n","import {\n Injectable,\n TemplateRef,\n inject,\n signal,\n Injector\n} from '@angular/core';\nimport { Dialog, DialogConfig, DialogRef } from '@angular/cdk/dialog';\nimport { ComponentType } from '@angular/cdk/portal';\nimport {\n TalosDialogConfig,\n TalosConfirmDialogOptions,\n TalosAlertDialogOptions,\n TALOS_DIALOG_DATA,\n TALOS_DIALOG_CONFIG,\n TALOS_DIALOG_REF\n} from './dialog.types';\nimport { TalosDialogRef } from './dialog-ref';\nimport { TalosConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TalosDialogService {\n private readonly cdkDialog = inject(Dialog);\n private readonly injector = inject(Injector);\n\n /** Signal of currently open dialog references */\n readonly openDialogs = signal<TalosDialogRef<unknown, unknown>[]>([]);\n\n /**\n * Open a component or template inside a modal dialog.\n */\n open<R = unknown, D = unknown>(\n componentOrTemplate: ComponentType<unknown> | TemplateRef<unknown>,\n config: TalosDialogConfig<D> = {}\n ): TalosDialogRef<R, D> {\n const size = config.size ?? 'md';\n const backdropBlur = config.backdropBlur ?? false;\n\n const panelClasses: string[] = ['talos-dialog-panel', `talos-dialog-size-${size}`];\n if (config.panelClass) {\n if (Array.isArray(config.panelClass)) {\n panelClasses.push(...config.panelClass);\n } else {\n panelClasses.push(config.panelClass);\n }\n }\n\n const backdropClasses: string[] = ['talos-dialog-backdrop'];\n if (backdropBlur === true || backdropBlur === 'md') {\n backdropClasses.push('talos-dialog-backdrop-blur-md');\n } else if (backdropBlur === 'sm') {\n backdropClasses.push('talos-dialog-backdrop-blur-sm');\n } else if (backdropBlur === 'lg') {\n backdropClasses.push('talos-dialog-backdrop-blur-lg');\n }\n\n if (config.backdropClass) {\n if (Array.isArray(config.backdropClass)) {\n backdropClasses.push(...config.backdropClass);\n } else {\n backdropClasses.push(config.backdropClass);\n }\n }\n\n const disableClose = config.disableClose ?? false;\n let talosRef: TalosDialogRef<R, D> | null = null;\n\n const cdkConfig: DialogConfig<D, DialogRef<R, unknown>> = {\n panelClass: panelClasses,\n backdropClass: backdropClasses,\n hasBackdrop: config.hasBackdrop ?? true,\n disableClose: disableClose,\n closeOnNavigation: true,\n autoFocus: config.autoFocus ?? 'first-tabbable',\n restoreFocus: config.restoreFocus ?? true,\n ariaLabel: config.ariaLabel,\n ariaLabelledBy: config.ariaLabelledBy,\n ariaDescribedBy: config.ariaDescribedBy,\n role: config.role ?? 'dialog',\n id: config.id,\n width: config.width,\n minWidth: config.minWidth,\n maxWidth: config.maxWidth,\n height: config.height,\n minHeight: config.minHeight,\n maxHeight: config.maxHeight,\n data: config.data,\n injector: this.injector,\n providers: (cdkDialogRef: DialogRef<R, unknown>) => {\n talosRef = new TalosDialogRef<R, D>(cdkDialogRef, config, config.data);\n return [\n { provide: TalosDialogRef, useValue: talosRef },\n { provide: TALOS_DIALOG_REF, useValue: talosRef },\n { provide: TALOS_DIALOG_DATA, useValue: config.data },\n { provide: TALOS_DIALOG_CONFIG, useValue: config }\n ];\n }\n };\n\n const cdkRef = this.cdkDialog.open<R, D, unknown>(componentOrTemplate, cdkConfig);\n if (!talosRef) {\n talosRef = new TalosDialogRef<R, D>(cdkRef, config, config.data);\n }\n const resolvedTalosRef = talosRef as TalosDialogRef<R, D>;\n\n // Track active dialogs\n this.openDialogs.update(current => [...current, resolvedTalosRef as TalosDialogRef<unknown, unknown>]);\n\n cdkRef.closed.subscribe(() => {\n this.openDialogs.update(current => current.filter(d => d.id !== resolvedTalosRef.id));\n });\n\n return resolvedTalosRef;\n }\n\n /**\n * Convenience helper to display a confirmation dialog.\n */\n confirm(options: TalosConfirmDialogOptions): TalosDialogRef<boolean> {\n return this.open<boolean, TalosConfirmDialogOptions>(TalosConfirmDialogComponent, {\n size: options.size ?? 'sm',\n backdropBlur: options.backdropBlur ?? true,\n disableClose: options.disableClose ?? false,\n role: 'alertdialog',\n data: options\n });\n }\n\n /**\n * Convenience helper to display an alert dialog.\n */\n alert(options: TalosAlertDialogOptions): TalosDialogRef<void> {\n return this.open<void, TalosConfirmDialogOptions>(TalosConfirmDialogComponent, {\n size: options.size ?? 'sm',\n backdropBlur: options.backdropBlur ?? true,\n role: 'alertdialog',\n data: {\n ...options,\n showCancel: false,\n confirmText: options.okText ?? 'OK'\n }\n });\n }\n\n /**\n * Close all currently open dialogs.\n */\n closeAll(): void {\n this.cdkDialog.closeAll();\n }\n}\n","import { NgModule } from '@angular/core';\nimport { TalosDialogHeaderComponent } from './dialog-header/dialog-header.component';\nimport { TalosDialogContentComponent } from './dialog-content/dialog-content.component';\nimport { TalosDialogFooterComponent } from './dialog-footer/dialog-footer.component';\nimport { TalosConfirmDialogComponent } from './confirm-dialog/confirm-dialog.component';\nimport {\n TalosDialogTitleDirective,\n TalosDialogDescriptionDirective,\n TalosDialogCloseDirective\n} from './dialog.directives';\n\nconst DIALOG_COMPONENTS = [\n TalosDialogHeaderComponent,\n TalosDialogContentComponent,\n TalosDialogFooterComponent,\n TalosConfirmDialogComponent,\n TalosDialogTitleDirective,\n TalosDialogDescriptionDirective,\n TalosDialogCloseDirective\n];\n\n@NgModule({\n imports: [...DIALOG_COMPONENTS],\n exports: [...DIALOG_COMPONENTS]\n})\nexport class TalosDialogModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, output, signal, computed, TemplateRef, Component, inject, ViewEncapsulation, Injectable, NgModule } from '@angular/core';
|
|
3
|
+
import { Overlay } from '@angular/cdk/overlay';
|
|
4
|
+
import { ComponentPortal } from '@angular/cdk/portal';
|
|
5
|
+
import { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';
|
|
6
|
+
import { LucideInfo, LucideCheckCircle2, LucideAlertTriangle, LucideCircleAlert, LucideX } from '@lucide/angular';
|
|
7
|
+
|
|
8
|
+
class TalosSnackbarComponent {
|
|
9
|
+
/** Snackbar instance data */
|
|
10
|
+
instance = input.required(/* @ts-ignore */
|
|
11
|
+
...(ngDevMode ? [{ debugName: "instance" }] : /* istanbul ignore next */ []));
|
|
12
|
+
/** Event emitted when snackbar requests dismissal */
|
|
13
|
+
dismiss = output();
|
|
14
|
+
/** Event emitted when snackbar action button is clicked */
|
|
15
|
+
action = output();
|
|
16
|
+
isDismissing = signal(false, /* @ts-ignore */
|
|
17
|
+
...(ngDevMode ? [{ debugName: "isDismissing" }] : /* istanbul ignore next */ []));
|
|
18
|
+
progressPercent = signal(100, /* @ts-ignore */
|
|
19
|
+
...(ngDevMode ? [{ debugName: "progressPercent" }] : /* istanbul ignore next */ []));
|
|
20
|
+
Infinity = Infinity;
|
|
21
|
+
timerId = null;
|
|
22
|
+
remainingMs = 0;
|
|
23
|
+
lastTickMs = 0;
|
|
24
|
+
isTopPosition = computed(() => {
|
|
25
|
+
const pos = this.instance().position;
|
|
26
|
+
return pos ? pos.startsWith('top') : false;
|
|
27
|
+
}, /* @ts-ignore */
|
|
28
|
+
...(ngDevMode ? [{ debugName: "isTopPosition" }] : /* istanbul ignore next */ []));
|
|
29
|
+
isTemplateMessage = computed(() => {
|
|
30
|
+
return this.instance().message instanceof TemplateRef;
|
|
31
|
+
}, /* @ts-ignore */
|
|
32
|
+
...(ngDevMode ? [{ debugName: "isTemplateMessage" }] : /* istanbul ignore next */ []));
|
|
33
|
+
templateMessage = computed(() => {
|
|
34
|
+
return this.instance().message;
|
|
35
|
+
}, /* @ts-ignore */
|
|
36
|
+
...(ngDevMode ? [{ debugName: "templateMessage" }] : /* istanbul ignore next */ []));
|
|
37
|
+
customIconComponent = computed(() => {
|
|
38
|
+
const icon = this.instance().icon;
|
|
39
|
+
return typeof icon === 'function' ? icon : null;
|
|
40
|
+
}, /* @ts-ignore */
|
|
41
|
+
...(ngDevMode ? [{ debugName: "customIconComponent" }] : /* istanbul ignore next */ []));
|
|
42
|
+
ariaRole = computed(() => {
|
|
43
|
+
const variant = this.instance().variant;
|
|
44
|
+
return variant === 'error' || variant === 'warning' ? 'alert' : 'status';
|
|
45
|
+
}, /* @ts-ignore */
|
|
46
|
+
...(ngDevMode ? [{ debugName: "ariaRole" }] : /* istanbul ignore next */ []));
|
|
47
|
+
ariaLive = computed(() => {
|
|
48
|
+
const variant = this.instance().variant;
|
|
49
|
+
return variant === 'error' || variant === 'warning' ? 'assertive' : 'polite';
|
|
50
|
+
}, /* @ts-ignore */
|
|
51
|
+
...(ngDevMode ? [{ debugName: "ariaLive" }] : /* istanbul ignore next */ []));
|
|
52
|
+
ngOnInit() {
|
|
53
|
+
const duration = this.instance().duration;
|
|
54
|
+
if (duration > 0 && duration !== Infinity) {
|
|
55
|
+
this.remainingMs = duration;
|
|
56
|
+
this.startTimer();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
ngOnDestroy() {
|
|
60
|
+
this.stopTimer();
|
|
61
|
+
}
|
|
62
|
+
startTimer() {
|
|
63
|
+
this.stopTimer();
|
|
64
|
+
const totalDuration = this.instance().duration;
|
|
65
|
+
this.lastTickMs = Date.now();
|
|
66
|
+
this.timerId = setInterval(() => {
|
|
67
|
+
if (this.instance().isPaused)
|
|
68
|
+
return;
|
|
69
|
+
const now = Date.now();
|
|
70
|
+
const delta = now - this.lastTickMs;
|
|
71
|
+
this.lastTickMs = now;
|
|
72
|
+
this.remainingMs -= delta;
|
|
73
|
+
if (this.remainingMs <= 0) {
|
|
74
|
+
this.progressPercent.set(0);
|
|
75
|
+
this.stopTimer();
|
|
76
|
+
this.onCloseClick();
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
const pct = Math.max(0, (this.remainingMs / totalDuration) * 100);
|
|
80
|
+
this.progressPercent.set(pct);
|
|
81
|
+
}
|
|
82
|
+
}, 50);
|
|
83
|
+
}
|
|
84
|
+
stopTimer() {
|
|
85
|
+
if (this.timerId) {
|
|
86
|
+
clearInterval(this.timerId);
|
|
87
|
+
this.timerId = null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
onMouseEnter() {
|
|
91
|
+
if (this.instance().pauseOnHover) {
|
|
92
|
+
this.instance().isPaused = true;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
onMouseLeave() {
|
|
96
|
+
if (this.instance().pauseOnHover) {
|
|
97
|
+
this.instance().isPaused = false;
|
|
98
|
+
this.lastTickMs = Date.now();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
onActionClick() {
|
|
102
|
+
if (this.instance().onAction) {
|
|
103
|
+
this.instance().onAction();
|
|
104
|
+
}
|
|
105
|
+
this.action.emit(this.instance().id);
|
|
106
|
+
this.onCloseClick();
|
|
107
|
+
}
|
|
108
|
+
onCloseClick() {
|
|
109
|
+
if (this.isDismissing())
|
|
110
|
+
return;
|
|
111
|
+
this.isDismissing.set(true);
|
|
112
|
+
if (this.instance().onDismiss) {
|
|
113
|
+
this.instance().onDismiss();
|
|
114
|
+
}
|
|
115
|
+
setTimeout(() => {
|
|
116
|
+
this.dismiss.emit(this.instance().id);
|
|
117
|
+
}, 200);
|
|
118
|
+
}
|
|
119
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosSnackbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
120
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: TalosSnackbarComponent, isStandalone: true, selector: "talos-snackbar", inputs: { instance: { classPropertyName: "instance", publicName: "instance", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { dismiss: "dismiss", action: "action" }, ngImport: i0, template: "<div class=\"talos-snackbar\" [class.variant-default]=\"instance().variant === 'default'\"\n [class.variant-info]=\"instance().variant === 'info'\" [class.variant-success]=\"instance().variant === 'success'\"\n [class.variant-warning]=\"instance().variant === 'warning'\" [class.variant-error]=\"instance().variant === 'error'\"\n [class.pos-top]=\"isTopPosition()\" [class.pos-bottom]=\"!isTopPosition()\" [class.is-dismissing]=\"isDismissing()\"\n [class]=\"instance().customClass || ''\" [attr.role]=\"ariaRole()\" [attr.aria-live]=\"ariaLive()\"\n (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n @if (instance().icon !== false) {\n <div class=\"talos-snackbar-icon\">\n @if (instance().icon && instance().icon !== true) {\n <ng-container *ngComponentOutlet=\"customIconComponent()\"></ng-container>\n } @else {\n @switch (instance().variant) {\n @case ('success') {\n <svg lucideCheckCircle2 [size]=\"20\"></svg>\n }\n @case ('warning') {\n <svg lucideAlertTriangle [size]=\"20\"></svg>\n }\n @case ('error') {\n <svg lucideCircleAlert [size]=\"20\"></svg>\n }\n @default {\n <svg lucideInfo [size]=\"20\"></svg>\n }\n }\n }\n </div>\n }\n\n <div class=\"talos-snackbar-content\">\n @if (instance().title) {\n <div class=\"talos-snackbar-title\">{{ instance().title }}</div>\n }\n\n <div class=\"talos-snackbar-message\">\n @if (isTemplateMessage()) {\n <ng-container\n *ngTemplateOutlet=\"templateMessage(); context: { $implicit: instance().data, instance: instance() }\"></ng-container>\n } @else {\n {{ instance().message }}\n }\n </div>\n </div>\n\n <div class=\"talos-snackbar-actions\">\n @if (instance().actionLabel) {\n <button type=\"button\" class=\"talos-snackbar-action-btn\" (click)=\"onActionClick()\">\n {{ instance().actionLabel }}\n </button>\n }\n\n @if (instance().dismissible) {\n <button type=\"button\" class=\"talos-snackbar-close-btn\" aria-label=\"Close notification\" (click)=\"onCloseClick()\">\n <svg lucideX [size]=\"16\"></svg>\n </button>\n }\n </div>\n\n @if (instance().showProgressBar && instance().duration > 0 && instance().duration !== Infinity) {\n <div class=\"talos-snackbar-progress\" [class.variant-success]=\"instance().variant === 'success'\"\n [class.variant-warning]=\"instance().variant === 'warning'\" [class.variant-error]=\"instance().variant === 'error'\"\n [style.width.%]=\"progressPercent()\"></div>\n }\n</div>", styles: [":host{display:block;width:100%;max-width:440px;pointer-events:auto}.talos-snackbar{position:relative;display:flex;align-items:center;gap:.875rem;padding:.875rem 1rem;background-color:var(--talos-snackbar-bg, var(--talos-card-bg, #ffffff));color:var(--talos-snackbar-text, var(--talos-text-color, #0f172a));border:1px solid var(--talos-snackbar-border, var(--talos-border-color, #e2e8f0));border-radius:var(--talos-snackbar-border-radius, var(--talos-border-radius, .5rem));box-shadow:var(--talos-shadow-dropdown, 0 10px 25px -5px rgba(0, 0, 0, .08), 0 8px 10px -6px rgba(0, 0, 0, .04));overflow:hidden;box-sizing:border-box}.talos-snackbar.pos-top{animation:talos-snackbar-in-top .25s cubic-bezier(.16,1,.3,1) forwards}.talos-snackbar.pos-top.is-dismissing{animation:talos-snackbar-out-top .2s cubic-bezier(.4,0,1,1) forwards}.talos-snackbar.pos-bottom{animation:talos-snackbar-in-bottom .25s cubic-bezier(.16,1,.3,1) forwards}.talos-snackbar.pos-bottom.is-dismissing{animation:talos-snackbar-out-bottom .2s cubic-bezier(.4,0,1,1) forwards}.talos-snackbar .talos-snackbar-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:2.25rem;height:2.25rem;border-radius:var(--talos-border-radius, .5rem);transition:background-color .15s ease,color .15s ease}.talos-snackbar.variant-default .talos-snackbar-icon,.talos-snackbar.variant-info .talos-snackbar-icon{background-color:var(--talos-info-subtle-bg, var(--talos-primary-light, #eff6ff));color:var(--talos-info-text, var(--talos-primary-color, #2563eb))}.talos-snackbar.variant-success .talos-snackbar-icon{background-color:var(--talos-success-subtle-bg, rgba(22, 163, 74, .12));color:var(--talos-success-text, var(--talos-btn-success-bg, #16a34a))}.talos-snackbar.variant-warning .talos-snackbar-icon{background-color:var(--talos-warning-subtle-bg, rgba(217, 119, 6, .12));color:var(--talos-warning-text, var(--talos-warning-color, #d97706))}.talos-snackbar.variant-error .talos-snackbar-icon{background-color:var(--talos-danger-subtle-bg, rgba(239, 68, 68, .12));color:var(--talos-danger-text, var(--talos-error-color, #ef4444))}.talos-snackbar .talos-snackbar-content{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center;gap:.125rem}.talos-snackbar .talos-snackbar-content .talos-snackbar-title{font-size:var(--talos-control-font-size, .8125rem);font-weight:600;line-height:1.25rem;color:var(--talos-text-primary, var(--talos-text-color, #0f172a))}.talos-snackbar .talos-snackbar-content .talos-snackbar-message{font-size:.8125rem;line-height:1.25rem;color:var(--talos-text-muted, #64748b);word-break:break-word}.talos-snackbar .talos-snackbar-actions{display:flex;align-items:center;gap:.5rem;flex-shrink:0;margin-left:auto}.talos-snackbar .talos-snackbar-action-btn{border:none;background:transparent;color:var(--talos-primary-text, var(--talos-primary-color, #2563eb));font-size:.8125rem;font-weight:600;padding:.375rem .625rem;border-radius:var(--talos-border-radius, .375rem);cursor:pointer;transition:background-color .15s ease,color .15s ease}.talos-snackbar .talos-snackbar-action-btn:hover{background-color:var(--talos-primary-subtle-bg, #eff6ff);color:var(--talos-primary-hover, #1d4ed8)}.talos-snackbar .talos-snackbar-action-btn:focus-visible{outline:none;box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .15))}.talos-snackbar .talos-snackbar-close-btn{display:flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--talos-text-muted, #94a3b8);padding:.375rem;border-radius:var(--talos-border-radius, .375rem);cursor:pointer;transition:color .15s ease,background-color .15s ease}.talos-snackbar .talos-snackbar-close-btn:hover{color:var(--talos-text-primary, #0f172a);background-color:var(--talos-bg-subtle, #f8fafc)}.talos-snackbar .talos-snackbar-close-btn:focus-visible{outline:none;box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .15))}.talos-snackbar .talos-snackbar-progress{position:absolute;bottom:0;left:0;height:3px;background-color:var(--talos-primary-solid-bg, var(--talos-primary-color, #2563eb));transition:width .1s linear;border-bottom-left-radius:var(--talos-border-radius, .5rem)}.talos-snackbar .talos-snackbar-progress.variant-success{background-color:var(--talos-success-solid-bg, #16a34a)}.talos-snackbar .talos-snackbar-progress.variant-warning{background-color:var(--talos-warning-solid-bg, #d97706)}.talos-snackbar .talos-snackbar-progress.variant-error{background-color:var(--talos-danger-solid-bg, #ef4444)}@keyframes talos-snackbar-in-top{0%{opacity:0;transform:translateY(-16px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes talos-snackbar-out-top{0%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(-16px) scale(.95)}}@keyframes talos-snackbar-in-bottom{0%{opacity:0;transform:translateY(16px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes talos-snackbar-out-bottom{0%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(16px) scale(.95)}}\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: LucideInfo, selector: "svg[lucideInfo]" }, { kind: "component", type: LucideCheckCircle2, selector: "svg[lucideCircleCheck], svg[lucideCheckCircle2]" }, { kind: "component", type: LucideAlertTriangle, selector: "svg[lucideTriangleAlert], svg[lucideAlertTriangle]" }, { kind: "component", type: LucideCircleAlert, selector: "svg[lucideCircleAlert], svg[lucideAlertCircle]" }, { kind: "component", type: LucideX, selector: "svg[lucideX]" }] });
|
|
121
|
+
}
|
|
122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosSnackbarComponent, decorators: [{
|
|
123
|
+
type: Component,
|
|
124
|
+
args: [{ selector: 'talos-snackbar', imports: [
|
|
125
|
+
NgComponentOutlet,
|
|
126
|
+
NgTemplateOutlet,
|
|
127
|
+
LucideInfo,
|
|
128
|
+
LucideCheckCircle2,
|
|
129
|
+
LucideAlertTriangle,
|
|
130
|
+
LucideCircleAlert,
|
|
131
|
+
LucideX
|
|
132
|
+
], template: "<div class=\"talos-snackbar\" [class.variant-default]=\"instance().variant === 'default'\"\n [class.variant-info]=\"instance().variant === 'info'\" [class.variant-success]=\"instance().variant === 'success'\"\n [class.variant-warning]=\"instance().variant === 'warning'\" [class.variant-error]=\"instance().variant === 'error'\"\n [class.pos-top]=\"isTopPosition()\" [class.pos-bottom]=\"!isTopPosition()\" [class.is-dismissing]=\"isDismissing()\"\n [class]=\"instance().customClass || ''\" [attr.role]=\"ariaRole()\" [attr.aria-live]=\"ariaLive()\"\n (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n @if (instance().icon !== false) {\n <div class=\"talos-snackbar-icon\">\n @if (instance().icon && instance().icon !== true) {\n <ng-container *ngComponentOutlet=\"customIconComponent()\"></ng-container>\n } @else {\n @switch (instance().variant) {\n @case ('success') {\n <svg lucideCheckCircle2 [size]=\"20\"></svg>\n }\n @case ('warning') {\n <svg lucideAlertTriangle [size]=\"20\"></svg>\n }\n @case ('error') {\n <svg lucideCircleAlert [size]=\"20\"></svg>\n }\n @default {\n <svg lucideInfo [size]=\"20\"></svg>\n }\n }\n }\n </div>\n }\n\n <div class=\"talos-snackbar-content\">\n @if (instance().title) {\n <div class=\"talos-snackbar-title\">{{ instance().title }}</div>\n }\n\n <div class=\"talos-snackbar-message\">\n @if (isTemplateMessage()) {\n <ng-container\n *ngTemplateOutlet=\"templateMessage(); context: { $implicit: instance().data, instance: instance() }\"></ng-container>\n } @else {\n {{ instance().message }}\n }\n </div>\n </div>\n\n <div class=\"talos-snackbar-actions\">\n @if (instance().actionLabel) {\n <button type=\"button\" class=\"talos-snackbar-action-btn\" (click)=\"onActionClick()\">\n {{ instance().actionLabel }}\n </button>\n }\n\n @if (instance().dismissible) {\n <button type=\"button\" class=\"talos-snackbar-close-btn\" aria-label=\"Close notification\" (click)=\"onCloseClick()\">\n <svg lucideX [size]=\"16\"></svg>\n </button>\n }\n </div>\n\n @if (instance().showProgressBar && instance().duration > 0 && instance().duration !== Infinity) {\n <div class=\"talos-snackbar-progress\" [class.variant-success]=\"instance().variant === 'success'\"\n [class.variant-warning]=\"instance().variant === 'warning'\" [class.variant-error]=\"instance().variant === 'error'\"\n [style.width.%]=\"progressPercent()\"></div>\n }\n</div>", styles: [":host{display:block;width:100%;max-width:440px;pointer-events:auto}.talos-snackbar{position:relative;display:flex;align-items:center;gap:.875rem;padding:.875rem 1rem;background-color:var(--talos-snackbar-bg, var(--talos-card-bg, #ffffff));color:var(--talos-snackbar-text, var(--talos-text-color, #0f172a));border:1px solid var(--talos-snackbar-border, var(--talos-border-color, #e2e8f0));border-radius:var(--talos-snackbar-border-radius, var(--talos-border-radius, .5rem));box-shadow:var(--talos-shadow-dropdown, 0 10px 25px -5px rgba(0, 0, 0, .08), 0 8px 10px -6px rgba(0, 0, 0, .04));overflow:hidden;box-sizing:border-box}.talos-snackbar.pos-top{animation:talos-snackbar-in-top .25s cubic-bezier(.16,1,.3,1) forwards}.talos-snackbar.pos-top.is-dismissing{animation:talos-snackbar-out-top .2s cubic-bezier(.4,0,1,1) forwards}.talos-snackbar.pos-bottom{animation:talos-snackbar-in-bottom .25s cubic-bezier(.16,1,.3,1) forwards}.talos-snackbar.pos-bottom.is-dismissing{animation:talos-snackbar-out-bottom .2s cubic-bezier(.4,0,1,1) forwards}.talos-snackbar .talos-snackbar-icon{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:2.25rem;height:2.25rem;border-radius:var(--talos-border-radius, .5rem);transition:background-color .15s ease,color .15s ease}.talos-snackbar.variant-default .talos-snackbar-icon,.talos-snackbar.variant-info .talos-snackbar-icon{background-color:var(--talos-info-subtle-bg, var(--talos-primary-light, #eff6ff));color:var(--talos-info-text, var(--talos-primary-color, #2563eb))}.talos-snackbar.variant-success .talos-snackbar-icon{background-color:var(--talos-success-subtle-bg, rgba(22, 163, 74, .12));color:var(--talos-success-text, var(--talos-btn-success-bg, #16a34a))}.talos-snackbar.variant-warning .talos-snackbar-icon{background-color:var(--talos-warning-subtle-bg, rgba(217, 119, 6, .12));color:var(--talos-warning-text, var(--talos-warning-color, #d97706))}.talos-snackbar.variant-error .talos-snackbar-icon{background-color:var(--talos-danger-subtle-bg, rgba(239, 68, 68, .12));color:var(--talos-danger-text, var(--talos-error-color, #ef4444))}.talos-snackbar .talos-snackbar-content{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:center;gap:.125rem}.talos-snackbar .talos-snackbar-content .talos-snackbar-title{font-size:var(--talos-control-font-size, .8125rem);font-weight:600;line-height:1.25rem;color:var(--talos-text-primary, var(--talos-text-color, #0f172a))}.talos-snackbar .talos-snackbar-content .talos-snackbar-message{font-size:.8125rem;line-height:1.25rem;color:var(--talos-text-muted, #64748b);word-break:break-word}.talos-snackbar .talos-snackbar-actions{display:flex;align-items:center;gap:.5rem;flex-shrink:0;margin-left:auto}.talos-snackbar .talos-snackbar-action-btn{border:none;background:transparent;color:var(--talos-primary-text, var(--talos-primary-color, #2563eb));font-size:.8125rem;font-weight:600;padding:.375rem .625rem;border-radius:var(--talos-border-radius, .375rem);cursor:pointer;transition:background-color .15s ease,color .15s ease}.talos-snackbar .talos-snackbar-action-btn:hover{background-color:var(--talos-primary-subtle-bg, #eff6ff);color:var(--talos-primary-hover, #1d4ed8)}.talos-snackbar .talos-snackbar-action-btn:focus-visible{outline:none;box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .15))}.talos-snackbar .talos-snackbar-close-btn{display:flex;align-items:center;justify-content:center;border:none;background:transparent;color:var(--talos-text-muted, #94a3b8);padding:.375rem;border-radius:var(--talos-border-radius, .375rem);cursor:pointer;transition:color .15s ease,background-color .15s ease}.talos-snackbar .talos-snackbar-close-btn:hover{color:var(--talos-text-primary, #0f172a);background-color:var(--talos-bg-subtle, #f8fafc)}.talos-snackbar .talos-snackbar-close-btn:focus-visible{outline:none;box-shadow:var(--talos-focus-ring, 0 0 0 3px rgba(37, 99, 235, .15))}.talos-snackbar .talos-snackbar-progress{position:absolute;bottom:0;left:0;height:3px;background-color:var(--talos-primary-solid-bg, var(--talos-primary-color, #2563eb));transition:width .1s linear;border-bottom-left-radius:var(--talos-border-radius, .5rem)}.talos-snackbar .talos-snackbar-progress.variant-success{background-color:var(--talos-success-solid-bg, #16a34a)}.talos-snackbar .talos-snackbar-progress.variant-warning{background-color:var(--talos-warning-solid-bg, #d97706)}.talos-snackbar .talos-snackbar-progress.variant-error{background-color:var(--talos-danger-solid-bg, #ef4444)}@keyframes talos-snackbar-in-top{0%{opacity:0;transform:translateY(-16px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes talos-snackbar-out-top{0%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(-16px) scale(.95)}}@keyframes talos-snackbar-in-bottom{0%{opacity:0;transform:translateY(16px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes talos-snackbar-out-bottom{0%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(16px) scale(.95)}}\n"] }]
|
|
133
|
+
}], propDecorators: { instance: [{ type: i0.Input, args: [{ isSignal: true, alias: "instance", required: true }] }], dismiss: [{ type: i0.Output, args: ["dismiss"] }], action: [{ type: i0.Output, args: ["action"] }] } });
|
|
134
|
+
|
|
135
|
+
class TalosSnackbarContainerComponent {
|
|
136
|
+
snackbarService = inject(TalosSnackbarService);
|
|
137
|
+
positions = [
|
|
138
|
+
'top-left',
|
|
139
|
+
'top-center',
|
|
140
|
+
'top-right',
|
|
141
|
+
'bottom-left',
|
|
142
|
+
'bottom-center',
|
|
143
|
+
'bottom-right'
|
|
144
|
+
];
|
|
145
|
+
groupedSnackbars = computed(() => {
|
|
146
|
+
const all = this.snackbarService.snackbars();
|
|
147
|
+
const map = {
|
|
148
|
+
'top-left': [],
|
|
149
|
+
'top-center': [],
|
|
150
|
+
'top-right': [],
|
|
151
|
+
'bottom-left': [],
|
|
152
|
+
'bottom-center': [],
|
|
153
|
+
'bottom-right': []
|
|
154
|
+
};
|
|
155
|
+
for (const item of all) {
|
|
156
|
+
const pos = item.position || 'bottom-right';
|
|
157
|
+
if (map[pos]) {
|
|
158
|
+
map[pos].push(item);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
map['bottom-right'].push(item);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return map;
|
|
165
|
+
}, /* @ts-ignore */
|
|
166
|
+
...(ngDevMode ? [{ debugName: "groupedSnackbars" }] : /* istanbul ignore next */ []));
|
|
167
|
+
onDismiss(id) {
|
|
168
|
+
this.snackbarService.dismiss(id);
|
|
169
|
+
}
|
|
170
|
+
onAction(id) {
|
|
171
|
+
// Action handled inside component and service
|
|
172
|
+
}
|
|
173
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosSnackbarContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
174
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: TalosSnackbarContainerComponent, isStandalone: true, selector: "talos-snackbar-container", host: { classAttribute: "talos-snackbar-overlay-host" }, ngImport: i0, template: `
|
|
175
|
+
@for (pos of positions; track pos) {
|
|
176
|
+
@if (groupedSnackbars()[pos].length > 0) {
|
|
177
|
+
<div class="talos-snackbar-position-group" [class]="pos">
|
|
178
|
+
@for (item of groupedSnackbars()[pos]; track item.id) {
|
|
179
|
+
<talos-snackbar
|
|
180
|
+
[instance]="item"
|
|
181
|
+
(dismiss)="onDismiss($event)"
|
|
182
|
+
(action)="onAction($event)"
|
|
183
|
+
/>
|
|
184
|
+
}
|
|
185
|
+
</div>
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
`, isInline: true, styles: [".cdk-overlay-container{z-index:10000!important;pointer-events:none!important}.cdk-global-overlay-wrapper{pointer-events:none!important}.cdk-overlay-pane.talos-snackbar-overlay-panel{position:fixed!important;inset:0!important;width:100vw!important;height:100vh!important;max-width:100vw!important;max-height:100vh!important;pointer-events:none!important;margin:0!important;padding:0!important;border:none!important;background:transparent!important;z-index:10000!important}.talos-snackbar-overlay-host{position:fixed;inset:0;width:100vw;height:100vh;pointer-events:none;z-index:10000;display:grid;grid-template-areas:\"top-left top-center top-right\" \". . .\" \"bottom-left bottom-center bottom-right\";grid-template-rows:auto 1fr auto;grid-template-columns:1fr auto 1fr;padding:1.5rem;box-sizing:border-box}@media(max-width:640px){.talos-snackbar-overlay-host{padding:.75rem}}.talos-snackbar-position-group{display:flex;flex-direction:column;gap:.75rem;max-width:440px;width:100%;pointer-events:none}.talos-snackbar-position-group.top-left{grid-area:top-left;align-items:flex-start;justify-self:flex-start}.talos-snackbar-position-group.top-center{grid-area:top-center;align-items:center;justify-self:center}.talos-snackbar-position-group.top-right{grid-area:top-right;align-items:flex-end;justify-self:flex-end}.talos-snackbar-position-group.bottom-left{grid-area:bottom-left;align-items:flex-start;justify-self:flex-start;flex-direction:column-reverse}.talos-snackbar-position-group.bottom-center{grid-area:bottom-center;align-items:center;justify-self:center;flex-direction:column-reverse}.talos-snackbar-position-group.bottom-right{grid-area:bottom-right;align-items:flex-end;justify-self:flex-end;flex-direction:column-reverse}\n"], dependencies: [{ kind: "component", type: TalosSnackbarComponent, selector: "talos-snackbar", inputs: ["instance"], outputs: ["dismiss", "action"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
189
|
+
}
|
|
190
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosSnackbarContainerComponent, decorators: [{
|
|
191
|
+
type: Component,
|
|
192
|
+
args: [{ selector: 'talos-snackbar-container', imports: [TalosSnackbarComponent], template: `
|
|
193
|
+
@for (pos of positions; track pos) {
|
|
194
|
+
@if (groupedSnackbars()[pos].length > 0) {
|
|
195
|
+
<div class="talos-snackbar-position-group" [class]="pos">
|
|
196
|
+
@for (item of groupedSnackbars()[pos]; track item.id) {
|
|
197
|
+
<talos-snackbar
|
|
198
|
+
[instance]="item"
|
|
199
|
+
(dismiss)="onDismiss($event)"
|
|
200
|
+
(action)="onAction($event)"
|
|
201
|
+
/>
|
|
202
|
+
}
|
|
203
|
+
</div>
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
`, encapsulation: ViewEncapsulation.None, host: {
|
|
207
|
+
'class': 'talos-snackbar-overlay-host'
|
|
208
|
+
}, styles: [".cdk-overlay-container{z-index:10000!important;pointer-events:none!important}.cdk-global-overlay-wrapper{pointer-events:none!important}.cdk-overlay-pane.talos-snackbar-overlay-panel{position:fixed!important;inset:0!important;width:100vw!important;height:100vh!important;max-width:100vw!important;max-height:100vh!important;pointer-events:none!important;margin:0!important;padding:0!important;border:none!important;background:transparent!important;z-index:10000!important}.talos-snackbar-overlay-host{position:fixed;inset:0;width:100vw;height:100vh;pointer-events:none;z-index:10000;display:grid;grid-template-areas:\"top-left top-center top-right\" \". . .\" \"bottom-left bottom-center bottom-right\";grid-template-rows:auto 1fr auto;grid-template-columns:1fr auto 1fr;padding:1.5rem;box-sizing:border-box}@media(max-width:640px){.talos-snackbar-overlay-host{padding:.75rem}}.talos-snackbar-position-group{display:flex;flex-direction:column;gap:.75rem;max-width:440px;width:100%;pointer-events:none}.talos-snackbar-position-group.top-left{grid-area:top-left;align-items:flex-start;justify-self:flex-start}.talos-snackbar-position-group.top-center{grid-area:top-center;align-items:center;justify-self:center}.talos-snackbar-position-group.top-right{grid-area:top-right;align-items:flex-end;justify-self:flex-end}.talos-snackbar-position-group.bottom-left{grid-area:bottom-left;align-items:flex-start;justify-self:flex-start;flex-direction:column-reverse}.talos-snackbar-position-group.bottom-center{grid-area:bottom-center;align-items:center;justify-self:center;flex-direction:column-reverse}.talos-snackbar-position-group.bottom-right{grid-area:bottom-right;align-items:flex-end;justify-self:flex-end;flex-direction:column-reverse}\n"] }]
|
|
209
|
+
}] });
|
|
210
|
+
|
|
211
|
+
class TalosSnackbarService {
|
|
212
|
+
overlay = inject(Overlay);
|
|
213
|
+
overlayRef = null;
|
|
214
|
+
/** Reactive list of currently active snackbar instances */
|
|
215
|
+
snackbars = signal([], /* @ts-ignore */
|
|
216
|
+
...(ngDevMode ? [{ debugName: "snackbars" }] : /* istanbul ignore next */ []));
|
|
217
|
+
idCounter = 0;
|
|
218
|
+
/** Global default configuration values */
|
|
219
|
+
defaultConfig = {
|
|
220
|
+
variant: 'default',
|
|
221
|
+
position: 'bottom-right',
|
|
222
|
+
duration: 4000,
|
|
223
|
+
dismissible: true,
|
|
224
|
+
showProgressBar: true,
|
|
225
|
+
pauseOnHover: true,
|
|
226
|
+
icon: true
|
|
227
|
+
};
|
|
228
|
+
/**
|
|
229
|
+
* Override default global configurations for all subsequent snackbars.
|
|
230
|
+
*/
|
|
231
|
+
setDefaultConfig(config) {
|
|
232
|
+
this.defaultConfig = { ...this.defaultConfig, ...config };
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Main entry point to open a configured snackbar.
|
|
236
|
+
*/
|
|
237
|
+
show(messageOrConfig, configOverrides = {}) {
|
|
238
|
+
let fullConfig;
|
|
239
|
+
if (typeof messageOrConfig === 'string' ||
|
|
240
|
+
messageOrConfig instanceof TemplateRef) {
|
|
241
|
+
fullConfig = {
|
|
242
|
+
message: messageOrConfig,
|
|
243
|
+
...configOverrides
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
fullConfig = {
|
|
248
|
+
...messageOrConfig,
|
|
249
|
+
...configOverrides
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
const merged = {
|
|
253
|
+
id: `talos-sb-${++this.idCounter}-${Date.now()}`,
|
|
254
|
+
variant: fullConfig.variant ?? this.defaultConfig.variant ?? 'default',
|
|
255
|
+
position: fullConfig.position ?? this.defaultConfig.position ?? 'bottom-right',
|
|
256
|
+
duration: fullConfig.duration ?? this.defaultConfig.duration ?? 4000,
|
|
257
|
+
dismissible: fullConfig.dismissible ?? this.defaultConfig.dismissible ?? true,
|
|
258
|
+
showProgressBar: fullConfig.showProgressBar ?? this.defaultConfig.showProgressBar ?? true,
|
|
259
|
+
pauseOnHover: fullConfig.pauseOnHover ?? this.defaultConfig.pauseOnHover ?? true,
|
|
260
|
+
icon: fullConfig.icon ?? this.defaultConfig.icon ?? true,
|
|
261
|
+
message: fullConfig.message,
|
|
262
|
+
title: fullConfig.title,
|
|
263
|
+
actionLabel: fullConfig.actionLabel,
|
|
264
|
+
onAction: fullConfig.onAction,
|
|
265
|
+
onDismiss: fullConfig.onDismiss,
|
|
266
|
+
customClass: fullConfig.customClass,
|
|
267
|
+
data: fullConfig.data,
|
|
268
|
+
createdAt: Date.now(),
|
|
269
|
+
isPaused: false
|
|
270
|
+
};
|
|
271
|
+
this.ensureOverlayCreated();
|
|
272
|
+
this.snackbars.update((current) => [...current, merged]);
|
|
273
|
+
return {
|
|
274
|
+
id: merged.id,
|
|
275
|
+
dismiss: () => this.dismiss(merged.id)
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
/** Convenience method for Success variant snackbars */
|
|
279
|
+
success(message, config) {
|
|
280
|
+
return this.show(message, { ...config, variant: 'success' });
|
|
281
|
+
}
|
|
282
|
+
/** Convenience method for Error variant snackbars */
|
|
283
|
+
error(message, config) {
|
|
284
|
+
return this.show(message, { ...config, variant: 'error' });
|
|
285
|
+
}
|
|
286
|
+
/** Convenience method for Warning variant snackbars */
|
|
287
|
+
warning(message, config) {
|
|
288
|
+
return this.show(message, { ...config, variant: 'warning' });
|
|
289
|
+
}
|
|
290
|
+
/** Convenience method for Info variant snackbars */
|
|
291
|
+
info(message, config) {
|
|
292
|
+
return this.show(message, { ...config, variant: 'info' });
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Dismiss a specific snackbar by ID, or the oldest active snackbar if no ID is specified.
|
|
296
|
+
*/
|
|
297
|
+
dismiss(id) {
|
|
298
|
+
if (!id) {
|
|
299
|
+
const current = this.snackbars();
|
|
300
|
+
if (current.length === 0)
|
|
301
|
+
return;
|
|
302
|
+
id = current[0].id;
|
|
303
|
+
}
|
|
304
|
+
this.snackbars.update((current) => current.filter((item) => item.id !== id));
|
|
305
|
+
if (this.snackbars().length === 0) {
|
|
306
|
+
this.destroyOverlay();
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Dismiss all currently active snackbars.
|
|
311
|
+
*/
|
|
312
|
+
dismissAll() {
|
|
313
|
+
this.snackbars.set([]);
|
|
314
|
+
this.destroyOverlay();
|
|
315
|
+
}
|
|
316
|
+
ensureOverlayCreated() {
|
|
317
|
+
if (!this.overlayRef) {
|
|
318
|
+
const positionStrategy = this.overlay.position().global();
|
|
319
|
+
this.overlayRef = this.overlay.create({
|
|
320
|
+
positionStrategy,
|
|
321
|
+
hasBackdrop: false,
|
|
322
|
+
panelClass: 'talos-snackbar-overlay-panel'
|
|
323
|
+
});
|
|
324
|
+
const portal = new ComponentPortal(TalosSnackbarContainerComponent);
|
|
325
|
+
this.overlayRef.attach(portal);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
destroyOverlay() {
|
|
329
|
+
if (this.overlayRef) {
|
|
330
|
+
this.overlayRef.dispose();
|
|
331
|
+
this.overlayRef = null;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosSnackbarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
335
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosSnackbarService, providedIn: 'root' });
|
|
336
|
+
}
|
|
337
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosSnackbarService, decorators: [{
|
|
338
|
+
type: Injectable,
|
|
339
|
+
args: [{
|
|
340
|
+
providedIn: 'root'
|
|
341
|
+
}]
|
|
342
|
+
}] });
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Convenience NgModule wrapping standalone snackbar components.
|
|
346
|
+
*
|
|
347
|
+
* Allows developers who prefer `TalosSnackbarModule` to import all snackbar elements in one go.
|
|
348
|
+
*/
|
|
349
|
+
class TalosSnackbarModule {
|
|
350
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosSnackbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
351
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.1", ngImport: i0, type: TalosSnackbarModule, imports: [TalosSnackbarComponent,
|
|
352
|
+
TalosSnackbarContainerComponent], exports: [TalosSnackbarComponent,
|
|
353
|
+
TalosSnackbarContainerComponent] });
|
|
354
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosSnackbarModule, imports: [TalosSnackbarComponent,
|
|
355
|
+
TalosSnackbarContainerComponent] });
|
|
356
|
+
}
|
|
357
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosSnackbarModule, decorators: [{
|
|
358
|
+
type: NgModule,
|
|
359
|
+
args: [{
|
|
360
|
+
imports: [
|
|
361
|
+
TalosSnackbarComponent,
|
|
362
|
+
TalosSnackbarContainerComponent
|
|
363
|
+
],
|
|
364
|
+
exports: [
|
|
365
|
+
TalosSnackbarComponent,
|
|
366
|
+
TalosSnackbarContainerComponent
|
|
367
|
+
]
|
|
368
|
+
}]
|
|
369
|
+
}] });
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Generated bundle index. Do not edit.
|
|
373
|
+
*/
|
|
374
|
+
|
|
375
|
+
export { TalosSnackbarComponent, TalosSnackbarContainerComponent, TalosSnackbarModule, TalosSnackbarService };
|
|
376
|
+
//# sourceMappingURL=weeehaoooz-talos-ui-feedback-snackbar.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weeehaoooz-talos-ui-feedback-snackbar.mjs","sources":["../../../projects/talos-ui/feedback/snackbar/snackbar/snackbar.component.ts","../../../projects/talos-ui/feedback/snackbar/snackbar/snackbar.component.html","../../../projects/talos-ui/feedback/snackbar/snackbar-container/snackbar-container.component.ts","../../../projects/talos-ui/feedback/snackbar/snackbar.service.ts","../../../projects/talos-ui/feedback/snackbar/snackbar.module.ts","../../../projects/talos-ui/feedback/snackbar/weeehaoooz-talos-ui-feedback-snackbar.ts"],"sourcesContent":["import {\n Component,\n TemplateRef,\n Type,\n computed,\n input,\n output,\n signal,\n OnDestroy,\n OnInit\n} from '@angular/core';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n LucideInfo,\n LucideCheckCircle2,\n LucideAlertTriangle,\n LucideCircleAlert,\n LucideX\n} from '@lucide/angular';\nimport { TalosSnackbarInstance } from '../snackbar.types';\n\n@Component({\n selector: 'talos-snackbar',\n imports: [\n NgComponentOutlet,\n NgTemplateOutlet,\n LucideInfo,\n LucideCheckCircle2,\n LucideAlertTriangle,\n LucideCircleAlert,\n LucideX\n ],\n templateUrl: './snackbar.component.html',\n styleUrl: './snackbar.component.scss'\n})\nexport class TalosSnackbarComponent implements OnInit, OnDestroy {\n /** Snackbar instance data */\n readonly instance = input.required<TalosSnackbarInstance>();\n\n /** Event emitted when snackbar requests dismissal */\n readonly dismiss = output<string>();\n\n /** Event emitted when snackbar action button is clicked */\n readonly action = output<string>();\n\n protected readonly isDismissing = signal<boolean>(false);\n protected readonly progressPercent = signal<number>(100);\n protected readonly Infinity = Infinity;\n\n\n private timerId: ReturnType<typeof setInterval> | null = null;\n private remainingMs = 0;\n private lastTickMs = 0;\n\n readonly isTopPosition = computed(() => {\n const pos = this.instance().position;\n return pos ? pos.startsWith('top') : false;\n });\n\n readonly isTemplateMessage = computed(() => {\n return this.instance().message instanceof TemplateRef;\n });\n\n\n readonly templateMessage = computed(() => {\n return this.instance().message as TemplateRef<unknown>;\n });\n\n readonly customIconComponent = computed(() => {\n const icon = this.instance().icon;\n return typeof icon === 'function' ? (icon as Type<unknown>) : null;\n });\n\n readonly ariaRole = computed(() => {\n const variant = this.instance().variant;\n return variant === 'error' || variant === 'warning' ? 'alert' : 'status';\n });\n\n readonly ariaLive = computed(() => {\n const variant = this.instance().variant;\n return variant === 'error' || variant === 'warning' ? 'assertive' : 'polite';\n });\n\n ngOnInit(): void {\n const duration = this.instance().duration;\n if (duration > 0 && duration !== Infinity) {\n this.remainingMs = duration;\n this.startTimer();\n }\n }\n\n ngOnDestroy(): void {\n this.stopTimer();\n }\n\n private startTimer(): void {\n this.stopTimer();\n const totalDuration = this.instance().duration;\n this.lastTickMs = Date.now();\n\n this.timerId = setInterval(() => {\n if (this.instance().isPaused) return;\n\n const now = Date.now();\n const delta = now - this.lastTickMs;\n this.lastTickMs = now;\n\n this.remainingMs -= delta;\n\n if (this.remainingMs <= 0) {\n this.progressPercent.set(0);\n this.stopTimer();\n this.onCloseClick();\n } else {\n const pct = Math.max(0, (this.remainingMs / totalDuration) * 100);\n this.progressPercent.set(pct);\n }\n }, 50);\n }\n\n private stopTimer(): void {\n if (this.timerId) {\n clearInterval(this.timerId);\n this.timerId = null;\n }\n }\n\n protected onMouseEnter(): void {\n if (this.instance().pauseOnHover) {\n this.instance().isPaused = true;\n }\n }\n\n protected onMouseLeave(): void {\n if (this.instance().pauseOnHover) {\n this.instance().isPaused = false;\n this.lastTickMs = Date.now();\n }\n }\n\n protected onActionClick(): void {\n if (this.instance().onAction) {\n this.instance().onAction!();\n }\n this.action.emit(this.instance().id);\n this.onCloseClick();\n }\n\n protected onCloseClick(): void {\n if (this.isDismissing()) return;\n this.isDismissing.set(true);\n\n if (this.instance().onDismiss) {\n this.instance().onDismiss!();\n }\n\n setTimeout(() => {\n this.dismiss.emit(this.instance().id);\n }, 200);\n }\n}\n","<div class=\"talos-snackbar\" [class.variant-default]=\"instance().variant === 'default'\"\n [class.variant-info]=\"instance().variant === 'info'\" [class.variant-success]=\"instance().variant === 'success'\"\n [class.variant-warning]=\"instance().variant === 'warning'\" [class.variant-error]=\"instance().variant === 'error'\"\n [class.pos-top]=\"isTopPosition()\" [class.pos-bottom]=\"!isTopPosition()\" [class.is-dismissing]=\"isDismissing()\"\n [class]=\"instance().customClass || ''\" [attr.role]=\"ariaRole()\" [attr.aria-live]=\"ariaLive()\"\n (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n @if (instance().icon !== false) {\n <div class=\"talos-snackbar-icon\">\n @if (instance().icon && instance().icon !== true) {\n <ng-container *ngComponentOutlet=\"customIconComponent()\"></ng-container>\n } @else {\n @switch (instance().variant) {\n @case ('success') {\n <svg lucideCheckCircle2 [size]=\"20\"></svg>\n }\n @case ('warning') {\n <svg lucideAlertTriangle [size]=\"20\"></svg>\n }\n @case ('error') {\n <svg lucideCircleAlert [size]=\"20\"></svg>\n }\n @default {\n <svg lucideInfo [size]=\"20\"></svg>\n }\n }\n }\n </div>\n }\n\n <div class=\"talos-snackbar-content\">\n @if (instance().title) {\n <div class=\"talos-snackbar-title\">{{ instance().title }}</div>\n }\n\n <div class=\"talos-snackbar-message\">\n @if (isTemplateMessage()) {\n <ng-container\n *ngTemplateOutlet=\"templateMessage(); context: { $implicit: instance().data, instance: instance() }\"></ng-container>\n } @else {\n {{ instance().message }}\n }\n </div>\n </div>\n\n <div class=\"talos-snackbar-actions\">\n @if (instance().actionLabel) {\n <button type=\"button\" class=\"talos-snackbar-action-btn\" (click)=\"onActionClick()\">\n {{ instance().actionLabel }}\n </button>\n }\n\n @if (instance().dismissible) {\n <button type=\"button\" class=\"talos-snackbar-close-btn\" aria-label=\"Close notification\" (click)=\"onCloseClick()\">\n <svg lucideX [size]=\"16\"></svg>\n </button>\n }\n </div>\n\n @if (instance().showProgressBar && instance().duration > 0 && instance().duration !== Infinity) {\n <div class=\"talos-snackbar-progress\" [class.variant-success]=\"instance().variant === 'success'\"\n [class.variant-warning]=\"instance().variant === 'warning'\" [class.variant-error]=\"instance().variant === 'error'\"\n [style.width.%]=\"progressPercent()\"></div>\n }\n</div>","import { Component, ViewEncapsulation, computed, inject } from '@angular/core';\nimport { TalosSnackbarComponent } from '../snackbar/snackbar.component';\nimport { TalosSnackbarService } from '../snackbar.service';\nimport { TalosSnackbarInstance, TalosSnackbarPosition } from '../snackbar.types';\n\n@Component({\n selector: 'talos-snackbar-container',\n imports: [TalosSnackbarComponent],\n template: `\n @for (pos of positions; track pos) {\n @if (groupedSnackbars()[pos].length > 0) {\n <div class=\"talos-snackbar-position-group\" [class]=\"pos\">\n @for (item of groupedSnackbars()[pos]; track item.id) {\n <talos-snackbar\n [instance]=\"item\"\n (dismiss)=\"onDismiss($event)\"\n (action)=\"onAction($event)\"\n />\n }\n </div>\n }\n }\n `,\n styleUrl: './snackbar-container.component.scss',\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'talos-snackbar-overlay-host'\n }\n})\nexport class TalosSnackbarContainerComponent {\n private readonly snackbarService = inject(TalosSnackbarService);\n\n readonly positions: TalosSnackbarPosition[] = [\n 'top-left',\n 'top-center',\n 'top-right',\n 'bottom-left',\n 'bottom-center',\n 'bottom-right'\n ];\n\n readonly groupedSnackbars = computed<Record<TalosSnackbarPosition, TalosSnackbarInstance[]>>(() => {\n const all = this.snackbarService.snackbars();\n const map: Record<TalosSnackbarPosition, TalosSnackbarInstance[]> = {\n 'top-left': [],\n 'top-center': [],\n 'top-right': [],\n 'bottom-left': [],\n 'bottom-center': [],\n 'bottom-right': []\n };\n\n for (const item of all) {\n const pos = item.position || 'bottom-right';\n if (map[pos]) {\n map[pos].push(item);\n } else {\n map['bottom-right'].push(item);\n }\n }\n\n return map;\n });\n\n onDismiss(id: string): void {\n this.snackbarService.dismiss(id);\n }\n\n onAction(id: string): void {\n // Action handled inside component and service\n }\n}\n","import {\n Injectable,\n TemplateRef,\n inject,\n signal,\n ApplicationRef,\n EnvironmentInjector,\n createComponent,\n ComponentRef\n} from '@angular/core';\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n TalosSnackbarConfig,\n TalosSnackbarInstance,\n TalosSnackbarRef,\n TalosSnackbarVariant\n} from './snackbar.types';\nimport { TalosSnackbarContainerComponent } from './snackbar-container/snackbar-container.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TalosSnackbarService {\n private readonly overlay = inject(Overlay);\n private overlayRef: OverlayRef | null = null;\n\n /** Reactive list of currently active snackbar instances */\n readonly snackbars = signal<TalosSnackbarInstance[]>([]);\n\n private idCounter = 0;\n\n /** Global default configuration values */\n private defaultConfig: Partial<TalosSnackbarConfig> = {\n variant: 'default',\n position: 'bottom-right',\n duration: 4000,\n dismissible: true,\n showProgressBar: true,\n pauseOnHover: true,\n icon: true\n };\n\n /**\n * Override default global configurations for all subsequent snackbars.\n */\n setDefaultConfig(config: Partial<TalosSnackbarConfig>): void {\n this.defaultConfig = { ...this.defaultConfig, ...config };\n }\n\n /**\n * Main entry point to open a configured snackbar.\n */\n show(\n messageOrConfig: string | TemplateRef<unknown> | TalosSnackbarConfig,\n configOverrides: Partial<TalosSnackbarConfig> = {}\n ): TalosSnackbarRef {\n let fullConfig: TalosSnackbarConfig;\n\n if (\n typeof messageOrConfig === 'string' ||\n messageOrConfig instanceof TemplateRef\n ) {\n fullConfig = {\n message: messageOrConfig,\n ...configOverrides\n };\n } else {\n fullConfig = {\n ...messageOrConfig,\n ...configOverrides\n };\n }\n\n const merged: TalosSnackbarInstance = {\n id: `talos-sb-${++this.idCounter}-${Date.now()}`,\n variant: fullConfig.variant ?? this.defaultConfig.variant ?? 'default',\n position: fullConfig.position ?? this.defaultConfig.position ?? 'bottom-right',\n duration: fullConfig.duration ?? this.defaultConfig.duration ?? 4000,\n dismissible: fullConfig.dismissible ?? this.defaultConfig.dismissible ?? true,\n showProgressBar: fullConfig.showProgressBar ?? this.defaultConfig.showProgressBar ?? true,\n pauseOnHover: fullConfig.pauseOnHover ?? this.defaultConfig.pauseOnHover ?? true,\n icon: fullConfig.icon ?? this.defaultConfig.icon ?? true,\n message: fullConfig.message,\n title: fullConfig.title,\n actionLabel: fullConfig.actionLabel,\n onAction: fullConfig.onAction,\n onDismiss: fullConfig.onDismiss,\n customClass: fullConfig.customClass,\n data: fullConfig.data,\n createdAt: Date.now(),\n isPaused: false\n };\n\n this.ensureOverlayCreated();\n\n this.snackbars.update((current) => [...current, merged]);\n\n return {\n id: merged.id,\n dismiss: () => this.dismiss(merged.id)\n };\n }\n\n /** Convenience method for Success variant snackbars */\n success(\n message: string | TemplateRef<unknown>,\n config?: Partial<TalosSnackbarConfig>\n ): TalosSnackbarRef {\n return this.show(message, { ...config, variant: 'success' });\n }\n\n /** Convenience method for Error variant snackbars */\n error(\n message: string | TemplateRef<unknown>,\n config?: Partial<TalosSnackbarConfig>\n ): TalosSnackbarRef {\n return this.show(message, { ...config, variant: 'error' });\n }\n\n /** Convenience method for Warning variant snackbars */\n warning(\n message: string | TemplateRef<unknown>,\n config?: Partial<TalosSnackbarConfig>\n ): TalosSnackbarRef {\n return this.show(message, { ...config, variant: 'warning' });\n }\n\n /** Convenience method for Info variant snackbars */\n info(\n message: string | TemplateRef<unknown>,\n config?: Partial<TalosSnackbarConfig>\n ): TalosSnackbarRef {\n return this.show(message, { ...config, variant: 'info' });\n }\n\n /**\n * Dismiss a specific snackbar by ID, or the oldest active snackbar if no ID is specified.\n */\n dismiss(id?: string): void {\n if (!id) {\n const current = this.snackbars();\n if (current.length === 0) return;\n id = current[0].id;\n }\n\n this.snackbars.update((current) => current.filter((item) => item.id !== id));\n\n if (this.snackbars().length === 0) {\n this.destroyOverlay();\n }\n }\n\n /**\n * Dismiss all currently active snackbars.\n */\n dismissAll(): void {\n this.snackbars.set([]);\n this.destroyOverlay();\n }\n\n private ensureOverlayCreated(): void {\n if (!this.overlayRef) {\n const positionStrategy = this.overlay.position().global();\n this.overlayRef = this.overlay.create({\n positionStrategy,\n hasBackdrop: false,\n panelClass: 'talos-snackbar-overlay-panel'\n });\n\n const portal = new ComponentPortal(TalosSnackbarContainerComponent);\n this.overlayRef.attach(portal);\n }\n }\n\n private destroyOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { TalosSnackbarComponent } from './snackbar/snackbar.component';\nimport { TalosSnackbarContainerComponent } from './snackbar-container/snackbar-container.component';\n\n/**\n * Convenience NgModule wrapping standalone snackbar components.\n * \n * Allows developers who prefer `TalosSnackbarModule` to import all snackbar elements in one go.\n */\n@NgModule({\n imports: [\n TalosSnackbarComponent,\n TalosSnackbarContainerComponent\n ],\n exports: [\n TalosSnackbarComponent,\n TalosSnackbarContainerComponent\n ]\n})\nexport class TalosSnackbarModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;MAmCa,sBAAsB,CAAA;;IAExB,QAAQ,GAAG,KAAK,CAAC,QAAQ;iFAAyB;;IAGlD,OAAO,GAAG,MAAM,EAAU;;IAG1B,MAAM,GAAG,MAAM,EAAU;IAEf,YAAY,GAAG,MAAM,CAAU,KAAK;qFAAC;IACrC,eAAe,GAAG,MAAM,CAAS,GAAG;wFAAC;IACrC,QAAQ,GAAG,QAAQ;IAG9B,OAAO,GAA0C,IAAI;IACrD,WAAW,GAAG,CAAC;IACf,UAAU,GAAG,CAAC;AAEb,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ;AACpC,QAAA,OAAO,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK;IAC5C,CAAC;sFAAC;AAEO,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;QACzC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,YAAY,WAAW;IACvD,CAAC;0FAAC;AAGO,IAAA,eAAe,GAAG,QAAQ,CAAC,MAAK;AACvC,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,OAA+B;IACxD,CAAC;wFAAC;AAEO,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI;AACjC,QAAA,OAAO,OAAO,IAAI,KAAK,UAAU,GAAI,IAAsB,GAAG,IAAI;IACpE,CAAC;4FAAC;AAEO,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO;AACvC,QAAA,OAAO,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,SAAS,GAAG,OAAO,GAAG,QAAQ;IAC1E,CAAC;iFAAC;AAEO,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO;AACvC,QAAA,OAAO,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,SAAS,GAAG,WAAW,GAAG,QAAQ;IAC9E,CAAC;iFAAC;IAEF,QAAQ,GAAA;QACN,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ;QACzC,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACzC,YAAA,IAAI,CAAC,WAAW,GAAG,QAAQ;YAC3B,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,SAAS,EAAE;IAClB;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,SAAS,EAAE;QAChB,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ;AAC9C,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE;AAE5B,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,MAAK;AAC9B,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ;gBAAE;AAE9B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,YAAA,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU;AACnC,YAAA,IAAI,CAAC,UAAU,GAAG,GAAG;AAErB,YAAA,IAAI,CAAC,WAAW,IAAI,KAAK;AAEzB,YAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3B,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,YAAY,EAAE;YACrB;iBAAO;AACL,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,aAAa,IAAI,GAAG,CAAC;AACjE,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YAC/B;QACF,CAAC,EAAE,EAAE,CAAC;IACR;IAEQ,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;AAC3B,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;IACF;IAEU,YAAY,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE;AAChC,YAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,GAAG,IAAI;QACjC;IACF;IAEU,YAAY,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE;AAChC,YAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,GAAG,KAAK;AAChC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE;QAC9B;IACF;IAEU,aAAa,GAAA;AACrB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;AAC5B,YAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAS,EAAE;QAC7B;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,YAAY,EAAE;IACrB;IAEU,YAAY,GAAA;QACpB,IAAI,IAAI,CAAC,YAAY,EAAE;YAAE;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAE3B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE;AAC7B,YAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAU,EAAE;QAC9B;QAEA,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;QACvC,CAAC,EAAE,GAAG,CAAC;IACT;uGA5HW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnCnC,m/EA+DM,EAAA,MAAA,EAAA,CAAA,47JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDvCF,iBAAiB,yRACjB,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,UAAU,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,kBAAkB,EAAA,QAAA,EAAA,iDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,mBAAmB,EAAA,QAAA,EAAA,oDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,iBAAiB,2FACjB,OAAO,EAAA,QAAA,EAAA,cAAA,EAAA,CAAA,EAAA,CAAA;;2FAKE,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAdlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,OAAA,EACjB;wBACP,iBAAiB;wBACjB,gBAAgB;wBAChB,UAAU;wBACV,kBAAkB;wBAClB,mBAAmB;wBACnB,iBAAiB;wBACjB;AACD,qBAAA,EAAA,QAAA,EAAA,m/EAAA,EAAA,MAAA,EAAA,CAAA,47JAAA,CAAA,EAAA;;;MEFU,+BAA+B,CAAA;AACzB,IAAA,eAAe,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAEtD,IAAA,SAAS,GAA4B;QAC5C,UAAU;QACV,YAAY;QACZ,WAAW;QACX,aAAa;QACb,eAAe;QACf;KACD;AAEQ,IAAA,gBAAgB,GAAG,QAAQ,CAAyD,MAAK;QAChG,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE;AAC5C,QAAA,MAAM,GAAG,GAA2D;AAClE,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,cAAc,EAAE;SACjB;AAED,QAAA,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE;AACtB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,cAAc;AAC3C,YAAA,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE;gBACZ,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACrB;iBAAO;gBACL,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC;QACF;AAEA,QAAA,OAAO,GAAG;IACZ,CAAC;yFAAC;AAEF,IAAA,SAAS,CAAC,EAAU,EAAA;AAClB,QAAA,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;IAClC;AAEA,IAAA,QAAQ,CAAC,EAAU,EAAA;;IAEnB;uGAzCW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,6BAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArBhC;;;;;;;;;;;;;;AAcT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wsDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAfS,sBAAsB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAsBrB,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAxB3C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,0BAA0B,EAAA,OAAA,EAC3B,CAAC,sBAAsB,CAAC,EAAA,QAAA,EACvB;;;;;;;;;;;;;;GAcT,EAAA,aAAA,EAEc,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,OAAO,EAAE;AACV,qBAAA,EAAA,MAAA,EAAA,CAAA,wsDAAA,CAAA,EAAA;;;MCJU,oBAAoB,CAAA;AACd,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAClC,UAAU,GAAsB,IAAI;;IAGnC,SAAS,GAAG,MAAM,CAA0B,EAAE;kFAAC;IAEhD,SAAS,GAAG,CAAC;;AAGb,IAAA,aAAa,GAAiC;AACpD,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,QAAQ,EAAE,cAAc;AACxB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,eAAe,EAAE,IAAI;AACrB,QAAA,YAAY,EAAE,IAAI;AAClB,QAAA,IAAI,EAAE;KACP;AAED;;AAEG;AACH,IAAA,gBAAgB,CAAC,MAAoC,EAAA;AACnD,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,MAAM,EAAE;IAC3D;AAEA;;AAEG;AACH,IAAA,IAAI,CACF,eAAoE,EACpE,eAAA,GAAgD,EAAE,EAAA;AAElD,QAAA,IAAI,UAA+B;QAEnC,IACE,OAAO,eAAe,KAAK,QAAQ;YACnC,eAAe,YAAY,WAAW,EACtC;AACA,YAAA,UAAU,GAAG;AACX,gBAAA,OAAO,EAAE,eAAe;AACxB,gBAAA,GAAG;aACJ;QACH;aAAO;AACL,YAAA,UAAU,GAAG;AACX,gBAAA,GAAG,eAAe;AAClB,gBAAA,GAAG;aACJ;QACH;AAEA,QAAA,MAAM,MAAM,GAA0B;YACpC,EAAE,EAAE,CAAA,SAAA,EAAY,EAAE,IAAI,CAAC,SAAS,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,EAAE,CAAA,CAAE;YAChD,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,SAAS;YACtE,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,cAAc;YAC9E,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,IAAI;YACpE,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,IAAI,IAAI;YAC7E,eAAe,EAAE,UAAU,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,IAAI,IAAI;YACzF,YAAY,EAAE,UAAU,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,IAAI;YAChF,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,IAAI;YACxD,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,IAAI,EAAE,UAAU,CAAC,IAAI;AACrB,YAAA,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;AACrB,YAAA,QAAQ,EAAE;SACX;QAED,IAAI,CAAC,oBAAoB,EAAE;AAE3B,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC;QAExD,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;SACtC;IACH;;IAGA,OAAO,CACL,OAAsC,EACtC,MAAqC,EAAA;AAErC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC9D;;IAGA,KAAK,CACH,OAAsC,EACtC,MAAqC,EAAA;AAErC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC5D;;IAGA,OAAO,CACL,OAAsC,EACtC,MAAqC,EAAA;AAErC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC9D;;IAGA,IAAI,CACF,OAAsC,EACtC,MAAqC,EAAA;AAErC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3D;AAEA;;AAEG;AACH,IAAA,OAAO,CAAC,EAAW,EAAA;QACjB,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE;AAChC,YAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE;AAC1B,YAAA,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;QACpB;QAEA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAE5E,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;YACjC,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;AAEA;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,EAAE;IACvB;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE;YACzD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBACpC,gBAAgB;AAChB,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,UAAU,EAAE;AACb,aAAA,CAAC;AAEF,YAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,+BAA+B,CAAC;AACnE,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;QAChC;IACF;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACxB;IACF;uGA7JW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA;;2FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AClBD;;;;AAIG;MAWU,mBAAmB,CAAA;uGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAR5B,sBAAsB;AACtB,YAAA,+BAA+B,aAG/B,sBAAsB;YACtB,+BAA+B,CAAA,EAAA,CAAA;AAGtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAR5B,sBAAsB;YACtB,+BAA+B,CAAA,EAAA,CAAA;;2FAOtB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAV/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP,sBAAsB;wBACtB;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,sBAAsB;wBACtB;AACD;AACF,iBAAA;;;AClBD;;AAEG;;;;"}
|