@ngneers/controls 0.0.1-pre4 → 0.0.1-pre5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/fesm2022/ngneers-controls-button.mjs +3 -2
  2. package/fesm2022/ngneers-controls-button.mjs.map +1 -1
  3. package/fesm2022/{ngneers-controls-calendar-time-C7UnIFzU.mjs → ngneers-controls-calendar-time-BEeJIqIX.mjs} +2 -2
  4. package/fesm2022/{ngneers-controls-calendar-time-C7UnIFzU.mjs.map → ngneers-controls-calendar-time-BEeJIqIX.mjs.map} +1 -1
  5. package/fesm2022/ngneers-controls-calendar.mjs +3 -3
  6. package/fesm2022/ngneers-controls-calendar.mjs.map +1 -1
  7. package/fesm2022/ngneers-controls-dialog.mjs +1 -1
  8. package/fesm2022/ngneers-controls-dialog.mjs.map +1 -1
  9. package/fesm2022/ngneers-controls-drawer.mjs +1 -1
  10. package/fesm2022/ngneers-controls-drawer.mjs.map +1 -1
  11. package/fesm2022/ngneers-controls-edit-inplace.mjs +1 -1
  12. package/fesm2022/ngneers-controls-edit-inplace.mjs.map +1 -1
  13. package/fesm2022/ngneers-controls-filter.mjs +1 -1
  14. package/fesm2022/ngneers-controls-filter.mjs.map +1 -1
  15. package/fesm2022/ngneers-controls-input-field.mjs +1 -1
  16. package/fesm2022/ngneers-controls-input-field.mjs.map +1 -1
  17. package/fesm2022/ngneers-controls-input.mjs +2 -1
  18. package/fesm2022/ngneers-controls-input.mjs.map +1 -1
  19. package/fesm2022/ngneers-controls-paginator.mjs +1 -1
  20. package/fesm2022/ngneers-controls-paginator.mjs.map +1 -1
  21. package/fesm2022/ngneers-controls-select.mjs +1 -1
  22. package/fesm2022/ngneers-controls-select.mjs.map +1 -1
  23. package/fesm2022/ngneers-controls-slider.mjs +1 -1
  24. package/fesm2022/ngneers-controls-slider.mjs.map +1 -1
  25. package/fesm2022/ngneers-controls-toast.mjs +1 -1
  26. package/fesm2022/ngneers-controls-toast.mjs.map +1 -1
  27. package/fesm2022/ngneers-controls-tooltip.mjs +2 -10
  28. package/fesm2022/ngneers-controls-tooltip.mjs.map +1 -1
  29. package/package.json +1 -1
  30. package/types/ngneers-controls-button.d.ts +1 -1
  31. package/types/ngneers-controls-input.d.ts +1 -1
  32. package/types/ngneers-controls-tooltip.d.ts +1 -7
@@ -1 +1 @@
1
- {"version":3,"file":"ngneers-controls-dialog.mjs","sources":["../../src/dialog/dialog-templates.ts","../../src/dialog/prompt-dialog-base.ts","../../src/dialog/dialog.ts","../../src/dialog/dialog.html","../../src/dialog/create-dialog.ts","../../src/dialog/ngneers-controls-dialog.ts"],"sourcesContent":["import {\r\n computed,\r\n contentChild,\r\n Directive,\r\n input,\r\n TemplateRef,\r\n Type,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\n\r\n@Directive()\r\nexport abstract class DialogTemplates<T> extends NgnBase<'dialog'> {\r\n private readonly _userContentTemplate = contentChild<TemplateRef<unknown>>('content');\r\n /**\r\n * The content of the dialog.\r\n * Can be a string, a component type, or a template reference.\r\n * Can also be set using an `<ng-template>` element with `#content` template reference variable.\r\n */\r\n public readonly content = input<TemplateRef<unknown> | null | Type<T> | string>(null);\r\n protected readonly contentTemplate = computed(\r\n () => this._userContentTemplate() ?? this.content()\r\n );\r\n\r\n private readonly _defaultHeaderTemplate =\r\n viewChild.required<TemplateRef<unknown>>('defaultHeaderTemplate');\r\n private readonly _userHeaderTemplate = contentChild<TemplateRef<unknown>>('header');\r\n /**\r\n * Set a custom template for the header of the dialog.\r\n * Can also be set using an `<ng-template>` element with `#header` template reference variable.\r\n */\r\n public readonly templateHeader = input<TemplateRef<unknown> | null>(null);\r\n protected readonly headerTemplate = computed(\r\n () => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate()\r\n );\r\n\r\n private readonly _defaultFooterTemplate =\r\n viewChild.required<TemplateRef<unknown>>('defaultFooterTemplate');\r\n private readonly _userFooterTemplate = contentChild<TemplateRef<unknown>>('footer');\r\n /**\r\n * Set a custom template for the footer of the dialog.\r\n * Can also be set using an `<ng-template>` element with `#footer` template reference variable.\r\n */\r\n public readonly templateFooter = input<TemplateRef<unknown> | null>(null);\r\n protected readonly footerTemplate = computed(\r\n () => this._userFooterTemplate() ?? this.templateFooter() ?? this._defaultFooterTemplate()\r\n );\r\n\r\n /**\r\n * Types for the dialog templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n header: {\r\n headerId: string;\r\n title: string | null;\r\n };\r\n }>();\r\n}\r\n","import { Component, effect, input, ChangeDetectionStrategy } from '@angular/core';\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: '',\r\n})\r\nexport abstract class PromptDialogBase<D, ButtonValues> {\r\n public readonly ngnPromptDialogResolveFn = input<{\r\n fn: (value: D | null) => void;\r\n button: ButtonValues;\r\n }>();\r\n\r\n constructor() {\r\n effect(() => {\r\n const fn = this.ngnPromptDialogResolveFn(); // trigger\r\n if (fn) {\r\n this.onDialogButtonClicked(fn.button);\r\n }\r\n });\r\n }\r\n\r\n protected fulfilPrompt(data?: D) {\r\n this.ngnPromptDialogResolveFn()?.fn(data ?? null);\r\n }\r\n\r\n protected abstract onDialogButtonClicked(button: ButtonValues): void;\r\n}\r\n","import { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n afterRenderEffect,\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n TemplateRef,\r\n Type,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport {\r\n type CloseBy,\r\n toModalCloseBy,\r\n toPopoverCloseBy,\r\n NgnTemplate,\r\n type Openable,\r\n} from '@ngneers/controls/api/ng';\r\nimport { NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { NgnActionButton, NgnButton } from '@ngneers/controls/button';\r\nimport { NgnDefer } from '@ngneers/controls/defer';\r\nimport { NgnMovable, NgnResizable } from '@ngneers/controls/directives';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { generateElementId } from '@ngneers/controls/utils-ng';\r\nimport { dialogControlTemplate } from '@ngneers/controls-themes/templates/dialog';\r\n\r\nimport { DialogTemplates } from './dialog-templates';\r\nimport { PromptDialogBase } from './prompt-dialog-base';\r\n\r\nimport type { DialogSize } from './types';\r\nimport type { NgnActionButtonConfig } from '@ngneers/controls/api';\r\n\r\ntype TypedContent = {\r\n template?: TemplateRef<unknown>;\r\n string?: string;\r\n component?: Type<unknown>;\r\n};\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n selector: 'ngn-dialog',\r\n imports: [\r\n NgTemplateOutlet,\r\n NgnTemplate,\r\n NgnMovable,\r\n NgnDefer,\r\n NgnPt,\r\n NgnButton,\r\n NgnActionButton,\r\n NgComponentOutlet,\r\n NgnIcon,\r\n NgnResizable,\r\n ],\r\n templateUrl: './dialog.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [provideSelf(NgnDialog)],\r\n})\r\nexport class NgnDialog<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>\r\n extends DialogTemplates<T>\r\n implements Openable\r\n{\r\n protected readonly theme = this.injectThemeTemplate(dialogControlTemplate);\r\n protected readonly headerId = generateElementId();\r\n\r\n private readonly _dialogElement = viewChild.required<ElementRef<HTMLDialogElement>>('dialog');\r\n /**\r\n * Shows or hides the dialog.\r\n *\r\n * You probably want to react to openChange events from outside to update your variable accordingly.\r\n */\r\n public readonly open = model(true);\r\n /**\r\n * When `true`, the content will be loaded lazily when the dialog is opened for the first time.\r\n * Only applies when using a template for the content.\r\n */\r\n public readonly lazy = input(false, { transform: booleanAttribute });\r\n /**\r\n * When {@link lazy} is `true`, setting this to `true` will cache the content after the first load.\r\n */\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n /**\r\n * When `true`, the dialog will be shown as a modal dialog making the background content non-interactable.\r\n * @default false\r\n */\r\n public readonly modal = input(false, { transform: booleanAttribute });\r\n /**\r\n * When `true`, the dialog will automatically receive focus when opened.\r\n * @default modal()\r\n */\r\n public readonly autofocus = input(this.modal());\r\n /**\r\n * The title of the dialog. Displayed in the default header template.\r\n */\r\n public readonly title = input<string | null | undefined>(null);\r\n /**\r\n * Determines how the dialog can be closed by the user.\r\n * - `'any'` - The dialog can be closed by clicking outside the dialog or pressing the Escape key.\r\n * - `'escape'` - The dialog can only be closed by pressing the Escape key.\r\n * - `'none'` - The dialog cannot be closed by user interaction. It can only be closed programmatically.\r\n * @default 'any'\r\n */\r\n public readonly closeBy = input<CloseBy>('any');\r\n /**\r\n * The size of the dialog. You can set any CSS size value (e.g. `300px`, `50%`, `auto`, `min-content`, etc.) for each property.\r\n */\r\n public readonly size = input<DialogSize>({});\r\n /**\r\n * Action buttons to be displayed in the footer of the dialog.\r\n */\r\n public readonly footerButtons = input<Buttons>();\r\n /**\r\n * Whether the dialog is movable by dragging its header.\r\n */\r\n public readonly movable = input<boolean | null | undefined | ''>(false);\r\n /**\r\n * Whether the dialog is resizable.\r\n */\r\n public readonly resizable = input<boolean | null | undefined | ''>(false);\r\n /**\r\n * The result of the dialog, which is the `value` of the button that was clicked to close the dialog or null.\r\n */\r\n public readonly buttonClicked = output<Buttons[number]['value'] | null>();\r\n /**\r\n * Emits when the dialog has fully closed.\r\n */\r\n public readonly closed = output();\r\n\r\n public readonly promptResult = output<{\r\n value: (T extends PromptDialogBase<infer D, Buttons[number]['value']> ? D : never) | null;\r\n button: Buttons[number]['value'] | null;\r\n }>();\r\n\r\n private readonly _latestClickedButtonValue = signal<{ button: Buttons[number]['value'] } | null>(\r\n null\r\n );\r\n\r\n protected readonly contentComponentInputs = computed(() => {\r\n const component = this.typedContent().component;\r\n if (!component || !(component.prototype instanceof PromptDialogBase)) {\r\n return {};\r\n }\r\n const latestButton = this._latestClickedButtonValue();\r\n if (latestButton === null) {\r\n return {};\r\n }\r\n return {\r\n ngnPromptDialogResolveFn: {\r\n button: latestButton.button,\r\n fn: (result: T extends PromptDialogBase<infer D, Buttons[number]['value']> ? D : never) => {\r\n this.promptResult.emit({\r\n value: result,\r\n button: latestButton.button,\r\n });\r\n this._latestClickedButtonValue.set(null);\r\n this.open.set(false);\r\n },\r\n },\r\n };\r\n });\r\n\r\n /**\r\n * How a modal dialog can be closed by the user.\r\n */\r\n protected readonly modalClosedBy = computed(() => toModalCloseBy(this.closeBy()));\r\n /**\r\n * How a popover dialog can be closed by the user.\r\n */\r\n protected readonly popoverClosedBy = computed(() => toPopoverCloseBy(this.closeBy()));\r\n protected readonly isFullyClosed = signal(true);\r\n\r\n protected readonly typedContent = computed<TypedContent>(() => {\r\n const content = this.contentTemplate();\r\n if (!content) {\r\n return {};\r\n }\r\n if (typeof content === 'string') {\r\n return { string: content };\r\n } else if (content instanceof TemplateRef) {\r\n return { template: content };\r\n } else {\r\n return { component: content };\r\n }\r\n });\r\n\r\n constructor() {\r\n super();\r\n afterRenderEffect(() => {\r\n if (this.open()) {\r\n if (untracked(this.modal)) {\r\n this._dialogElement().nativeElement.showModal();\r\n } else {\r\n this._dialogElement().nativeElement.showPopover();\r\n }\r\n } else {\r\n this._dialogElement().nativeElement.close();\r\n this._dialogElement().nativeElement.hidePopover();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Different cancel handlers for different event types. Required for modal and popover dialogs.\r\n */\r\n protected onCancel(event?: ToggleEvent | KeyboardEvent): void {\r\n if (event instanceof KeyboardEvent) {\r\n // Modal dialogs handle this on their own\r\n if (this.modal()) {\r\n this.cancelPrompt();\r\n this.setStateToClosed();\r\n return;\r\n }\r\n if (event.key !== 'Escape' || (event.target as HTMLElement).tagName !== 'DIALOG') {\r\n // TODO: limitation: when focus is inside a different element, we cannot know if it is safe to close, so we skip it\r\n return;\r\n }\r\n if (this.closeBy() === 'escape') {\r\n this.setStateToClosed();\r\n }\r\n return;\r\n }\r\n\r\n if (event instanceof ToggleEvent && event.newState !== 'closed') {\r\n // This is also just for popover dialogs\r\n return;\r\n }\r\n /**\r\n * In case the dialog is closed with the same click event that tries to open it again immediately,\r\n * we need to wait for the next animation frame to avoid a stuck state where the outside thinks it's opened\r\n * but inside `open` is set to false.\r\n */\r\n requestAnimationFrame(() => {\r\n this.setStateToClosed();\r\n });\r\n }\r\n\r\n private setStateToClosed() {\r\n this.open.set(false);\r\n this.cancelPrompt();\r\n requestAnimationFrame(() => {\r\n const allAnimationsDone = Promise.all(\r\n this.element.nativeElement.getAnimations().map(x => x.finished)\r\n );\r\n allAnimationsDone\r\n .then(() => {\r\n this.isFullyClosed.set(true);\r\n this.closed.emit();\r\n })\r\n .catch(() => {\r\n // ignore cancelled animation\r\n });\r\n });\r\n }\r\n\r\n private cancelPrompt() {\r\n if (this.contentComponentInputs()) {\r\n this.promptResult.emit({\r\n value: null,\r\n button: null,\r\n });\r\n this._latestClickedButtonValue.set(null);\r\n }\r\n }\r\n\r\n protected closeWithButton() {\r\n this.open.set(false);\r\n this.cancelPrompt();\r\n }\r\n\r\n /**\r\n * Opens the dialog. Alternatively, you can also set the `open` input to `true`.\r\n */\r\n public show(): void {\r\n this.open.set(true);\r\n }\r\n public hide(): void {\r\n this.open.set(false);\r\n }\r\n public toggle(): void {\r\n this.open.update(open => !open);\r\n }\r\n\r\n protected singleButtonTypeFix(button: unknown): Buttons[number] {\r\n return button as Buttons[number];\r\n }\r\n\r\n protected buttonClick(button: Buttons[number]['value']): void {\r\n this.buttonClicked.emit(button);\r\n this._latestClickedButtonValue.set({ button });\r\n }\r\n}\r\n","<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n<dialog\r\n #dialog\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{ root: true, modal: modal() }\"\r\n [attr.closedby]=\"modalClosedBy()\"\r\n [autofocus]=\"autofocus()\"\r\n [attr.aria-labelledby]=\"headerId\"\r\n (cancel)=\"onCancel()\"\r\n (toggle)=\"onCancel($event)\"\r\n (keydown)=\"onCancel($event)\"\r\n [style.minWidth]=\"size().minWidth\"\r\n [style.maxWidth]=\"size().maxWidth\"\r\n [style.width]=\"size().width\"\r\n [style.minHeight]=\"size().minHeight\"\r\n [style.maxHeight]=\"size().maxHeight\"\r\n [ngnMovable]=\"movable()\"\r\n [ngnResizable]=\"resizable()\"\r\n [ngnResizableSizeLimits]=\"{\r\n minWidth: size().minWidth,\r\n minHeight: size().minHeight,\r\n maxWidth: size().maxWidth,\r\n maxHeight: size().maxHeight,\r\n }\"\r\n [ngnMovableDragHandle]=\"header\"\r\n [attr.popover]=\"popoverClosedBy()\"\r\n>\r\n <header #header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"headerTemplate()\"\r\n [ngTemplateOutletContext]=\"{ headerId, title: title() }\"\r\n ></ng-template>\r\n <button ngnButton [kind]=\"'icon'\" (click)=\"closeWithButton()\" tabindex=\"-1\">\r\n <ngn-icon [defaultIcon]=\"'xmark'\"></ngn-icon>\r\n </button>\r\n </header>\r\n\r\n @if (typedContent().template; as template) {\r\n <ngn-defer\r\n [lazyContent]=\"template\"\r\n [lazy]=\"lazy()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n />\r\n } @else if (typedContent().string; as string) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n {{ string }}\r\n </div>\r\n } @else if (typedContent().component; as component) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngComponentOutlet=\"component; inputs: contentComponentInputs()\" />\r\n </div>\r\n } @else {\r\n <ng-content />\r\n }\r\n\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-template [ngTemplateOutlet]=\"footerTemplate()\"></ng-template>\r\n </footer>\r\n</dialog>\r\n\r\n<ng-template\r\n #defaultHeaderTemplate\r\n [ngnTemplate]=\"templateTypes.header\"\r\n let-headerId=\"headerId\"\r\n let-title=\"title\"\r\n>\r\n @if (title) {\r\n <h2 [ptInt]=\"this\" [ptClass]=\"'default-header'\" [id]=\"headerId\">{{ title }}</h2>\r\n } @else {\r\n <div>\r\n <!-- Placeholder for default header content -->\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultFooterTemplate>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-footer'\">\r\n @for (button of footerButtons(); track $index) {\r\n <ngn-action-button [config]=\"singleButtonTypeFix(button)\" (clicked)=\"buttonClick($event)\" />\r\n }\r\n </div>\r\n</ng-template>\r\n","import { ComponentRef, Injector, ViewContainerRef } from '@angular/core';\r\nimport { setComponentInput } from '@ngneers/controls/api/ng';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\nimport { NgnDialog } from './dialog';\r\nimport { PromptDialogBase } from './prompt-dialog-base';\r\n\r\nimport type { DialogConfig } from './types';\r\nimport type { NgnActionButtonConfig } from '@ngneers/controls/api';\r\n\r\nexport type DialogHandle<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n> = {\r\n close: () => void;\r\n updateConfig: (config: Partial<DialogConfig<T, Buttons>>) => void;\r\n buttonClicked: Observable<Buttons[number]['value'] | null>;\r\n};\r\n\r\nexport type PromptDialogHandle<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n> = {\r\n close: () => void;\r\n updateConfig: (config: Partial<DialogConfig<T, Buttons>>) => void;\r\n result: Promise<{\r\n value: T extends PromptDialogBase<infer D, Buttons> ? D : never | null;\r\n button: Buttons[number]['value'] | null;\r\n }>;\r\n};\r\n\r\nfunction applyDialogConfig<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>(dialogRef: ComponentRef<NgnDialog<T, Buttons>>, config: DialogConfig<T, Buttons>): void {\r\n if (config.title !== undefined) {\r\n setComponentInput(dialogRef, 'title', config.title);\r\n }\r\n if (config.size !== undefined) {\r\n setComponentInput(dialogRef, 'size', config.size);\r\n }\r\n if (config.modal !== undefined) {\r\n setComponentInput(dialogRef, 'modal', config.modal);\r\n }\r\n if (config.footerButtons !== undefined) {\r\n setComponentInput(dialogRef, 'footerButtons', config.footerButtons);\r\n }\r\n if (config.closeBy !== undefined) {\r\n setComponentInput(dialogRef, 'closeBy', config.closeBy);\r\n }\r\n if (config.content !== undefined) {\r\n setComponentInput(dialogRef, 'content', config.content);\r\n }\r\n if (config.movable !== undefined) {\r\n setComponentInput(dialogRef, 'movable', config.movable);\r\n }\r\n if (config.resizable !== undefined) {\r\n setComponentInput(dialogRef, 'resizable', config.resizable);\r\n }\r\n}\r\n\r\nexport function createDialog<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>(\r\n injector: Injector,\r\n config: DialogConfig<T, Buttons>\r\n): T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons> {\r\n type ButtonValues = Buttons[number]['value'];\r\n\r\n const viewContainerRef = injector.get(ViewContainerRef);\r\n const dialogRef = viewContainerRef.createComponent(NgnDialog, {\r\n injector,\r\n }) as unknown as ComponentRef<NgnDialog<T, Buttons>>;\r\n\r\n applyDialogConfig(dialogRef, config);\r\n dialogRef.instance.buttonClicked.subscribe(value => {\r\n buttonClicked.next(value);\r\n });\r\n\r\n const buttonClicked = new Subject<ButtonValues | null>();\r\n dialogRef.onDestroy(() => {\r\n buttonClicked.complete();\r\n });\r\n\r\n if (\r\n typeof config.content === 'function' &&\r\n config.content.prototype instanceof PromptDialogBase\r\n ) {\r\n const _result = Promise.withResolvers<{\r\n value: (T extends PromptDialogBase<infer D, ButtonValues> ? D : never) | null;\r\n button: ButtonValues | null;\r\n }>();\r\n\r\n (dialogRef.instance as unknown as NgnDialog<T, Buttons>).promptResult.subscribe(result => {\r\n _result.resolve(result);\r\n });\r\n\r\n return {\r\n close: () => dialogRef.destroy(),\r\n updateConfig: (newConfig: Partial<DialogConfig<T, Buttons>>) =>\r\n applyDialogConfig(dialogRef, newConfig),\r\n result: _result.promise,\r\n } as T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons>;\r\n }\r\n\r\n return {\r\n close: () => dialogRef.destroy(),\r\n updateConfig: (newConfig: Partial<DialogConfig<T, Buttons>>) =>\r\n applyDialogConfig(dialogRef, newConfig),\r\n buttonClicked: buttonClicked.asObservable(),\r\n } as T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons>;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngneers-controls-dialog.mjs","sources":["../../src/dialog/dialog-templates.ts","../../src/dialog/prompt-dialog-base.ts","../../src/dialog/dialog.ts","../../src/dialog/dialog.html","../../src/dialog/create-dialog.ts","../../src/dialog/ngneers-controls-dialog.ts"],"sourcesContent":["import {\r\n computed,\r\n contentChild,\r\n Directive,\r\n input,\r\n TemplateRef,\r\n Type,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\n\r\n@Directive()\r\nexport abstract class DialogTemplates<T> extends NgnBase<'dialog'> {\r\n private readonly _userContentTemplate = contentChild<TemplateRef<unknown>>('content');\r\n /**\r\n * The content of the dialog.\r\n * Can be a string, a component type, or a template reference.\r\n * Can also be set using an `<ng-template>` element with `#content` template reference variable.\r\n */\r\n public readonly content = input<TemplateRef<unknown> | null | Type<T> | string>(null);\r\n protected readonly contentTemplate = computed(\r\n () => this._userContentTemplate() ?? this.content()\r\n );\r\n\r\n private readonly _defaultHeaderTemplate =\r\n viewChild.required<TemplateRef<unknown>>('defaultHeaderTemplate');\r\n private readonly _userHeaderTemplate = contentChild<TemplateRef<unknown>>('header');\r\n /**\r\n * Set a custom template for the header of the dialog.\r\n * Can also be set using an `<ng-template>` element with `#header` template reference variable.\r\n */\r\n public readonly templateHeader = input<TemplateRef<unknown> | null>(null);\r\n protected readonly headerTemplate = computed(\r\n () => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate()\r\n );\r\n\r\n private readonly _defaultFooterTemplate =\r\n viewChild.required<TemplateRef<unknown>>('defaultFooterTemplate');\r\n private readonly _userFooterTemplate = contentChild<TemplateRef<unknown>>('footer');\r\n /**\r\n * Set a custom template for the footer of the dialog.\r\n * Can also be set using an `<ng-template>` element with `#footer` template reference variable.\r\n */\r\n public readonly templateFooter = input<TemplateRef<unknown> | null>(null);\r\n protected readonly footerTemplate = computed(\r\n () => this._userFooterTemplate() ?? this.templateFooter() ?? this._defaultFooterTemplate()\r\n );\r\n\r\n /**\r\n * Types for the dialog templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n header: {\r\n headerId: string;\r\n title: string | null;\r\n };\r\n }>();\r\n}\r\n","import { Component, effect, input, ChangeDetectionStrategy } from '@angular/core';\r\n\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: '',\r\n})\r\nexport abstract class PromptDialogBase<D, ButtonValues> {\r\n public readonly ngnPromptDialogResolveFn = input<{\r\n fn: (value: D | null) => void;\r\n button: ButtonValues;\r\n }>();\r\n\r\n constructor() {\r\n effect(() => {\r\n const fn = this.ngnPromptDialogResolveFn(); // trigger\r\n if (fn) {\r\n this.onDialogButtonClicked(fn.button);\r\n }\r\n });\r\n }\r\n\r\n protected fulfilPrompt(data?: D) {\r\n this.ngnPromptDialogResolveFn()?.fn(data ?? null);\r\n }\r\n\r\n protected abstract onDialogButtonClicked(button: ButtonValues): void;\r\n}\r\n","import { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n afterRenderEffect,\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ElementRef,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n TemplateRef,\r\n Type,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport {\r\n type CloseBy,\r\n toModalCloseBy,\r\n toPopoverCloseBy,\r\n NgnTemplate,\r\n type Openable,\r\n} from '@ngneers/controls/api/ng';\r\nimport { NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { NgnActionButton, NgnButton } from '@ngneers/controls/button';\r\nimport { NgnDefer } from '@ngneers/controls/defer';\r\nimport { NgnMovable, NgnResizable } from '@ngneers/controls/directives';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { generateElementId } from '@ngneers/controls/utils-ng';\r\nimport { dialogControlTemplate } from '@ngneers/controls-themes/templates/dialog';\r\n\r\nimport { DialogTemplates } from './dialog-templates';\r\nimport { PromptDialogBase } from './prompt-dialog-base';\r\n\r\nimport type { DialogSize } from './types';\r\nimport type { NgnActionButtonConfig } from '@ngneers/controls/api';\r\n\r\ntype TypedContent = {\r\n template?: TemplateRef<unknown>;\r\n string?: string;\r\n component?: Type<unknown>;\r\n};\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n selector: 'ngn-dialog',\r\n imports: [\r\n NgTemplateOutlet,\r\n NgnTemplate,\r\n NgnMovable,\r\n NgnDefer,\r\n NgnPt,\r\n NgnButton,\r\n NgnActionButton,\r\n NgComponentOutlet,\r\n NgnIcon,\r\n NgnResizable,\r\n ],\r\n templateUrl: './dialog.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [provideSelf(NgnDialog)],\r\n})\r\nexport class NgnDialog<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>\r\n extends DialogTemplates<T>\r\n implements Openable\r\n{\r\n protected readonly theme = this.injectThemeTemplate(dialogControlTemplate);\r\n protected readonly headerId = generateElementId();\r\n\r\n private readonly _dialogElement = viewChild.required<ElementRef<HTMLDialogElement>>('dialog');\r\n /**\r\n * Shows or hides the dialog.\r\n *\r\n * You probably want to react to openChange events from outside to update your variable accordingly.\r\n */\r\n public readonly open = model(true);\r\n /**\r\n * When `true`, the content will be loaded lazily when the dialog is opened for the first time.\r\n * Only applies when using a template for the content.\r\n */\r\n public readonly lazy = input(false, { transform: booleanAttribute });\r\n /**\r\n * When {@link lazy} is `true`, setting this to `true` will cache the content after the first load.\r\n */\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n /**\r\n * When `true`, the dialog will be shown as a modal dialog making the background content non-interactable.\r\n * @default false\r\n */\r\n public readonly modal = input(false, { transform: booleanAttribute });\r\n /**\r\n * When `true`, the dialog will automatically receive focus when opened.\r\n * @default modal()\r\n */\r\n public readonly autofocus = input(this.modal());\r\n /**\r\n * The title of the dialog. Displayed in the default header template.\r\n */\r\n public readonly title = input<string | null | undefined>(null);\r\n /**\r\n * Determines how the dialog can be closed by the user.\r\n * - `'any'` - The dialog can be closed by clicking outside the dialog or pressing the Escape key.\r\n * - `'escape'` - The dialog can only be closed by pressing the Escape key.\r\n * - `'none'` - The dialog cannot be closed by user interaction. It can only be closed programmatically.\r\n * @default 'any'\r\n */\r\n public readonly closeBy = input<CloseBy>('any');\r\n /**\r\n * The size of the dialog. You can set any CSS size value (e.g. `300px`, `50%`, `auto`, `min-content`, etc.) for each property.\r\n */\r\n public readonly size = input<DialogSize>({});\r\n /**\r\n * Action buttons to be displayed in the footer of the dialog.\r\n */\r\n public readonly footerButtons = input<Buttons>();\r\n /**\r\n * Whether the dialog is movable by dragging its header.\r\n */\r\n public readonly movable = input<boolean | null | undefined | ''>(false);\r\n /**\r\n * Whether the dialog is resizable.\r\n */\r\n public readonly resizable = input<boolean | null | undefined | ''>(false);\r\n /**\r\n * The result of the dialog, which is the `value` of the button that was clicked to close the dialog or null.\r\n */\r\n public readonly buttonClicked = output<Buttons[number]['value'] | null>();\r\n /**\r\n * Emits when the dialog has fully closed.\r\n */\r\n public readonly closed = output();\r\n\r\n public readonly promptResult = output<{\r\n value: (T extends PromptDialogBase<infer D, Buttons[number]['value']> ? D : never) | null;\r\n button: Buttons[number]['value'] | null;\r\n }>();\r\n\r\n private readonly _latestClickedButtonValue = signal<{ button: Buttons[number]['value'] } | null>(\r\n null\r\n );\r\n\r\n protected readonly contentComponentInputs = computed(() => {\r\n const component = this.typedContent().component;\r\n if (!component || !(component.prototype instanceof PromptDialogBase)) {\r\n return {};\r\n }\r\n const latestButton = this._latestClickedButtonValue();\r\n if (latestButton === null) {\r\n return {};\r\n }\r\n return {\r\n ngnPromptDialogResolveFn: {\r\n button: latestButton.button,\r\n fn: (result: T extends PromptDialogBase<infer D, Buttons[number]['value']> ? D : never) => {\r\n this.promptResult.emit({\r\n value: result,\r\n button: latestButton.button,\r\n });\r\n this._latestClickedButtonValue.set(null);\r\n this.open.set(false);\r\n },\r\n },\r\n };\r\n });\r\n\r\n /**\r\n * How a modal dialog can be closed by the user.\r\n */\r\n protected readonly modalClosedBy = computed(() => toModalCloseBy(this.closeBy()));\r\n /**\r\n * How a popover dialog can be closed by the user.\r\n */\r\n protected readonly popoverClosedBy = computed(() => toPopoverCloseBy(this.closeBy()));\r\n protected readonly isFullyClosed = signal(true);\r\n\r\n protected readonly typedContent = computed<TypedContent>(() => {\r\n const content = this.contentTemplate();\r\n if (!content) {\r\n return {};\r\n }\r\n if (typeof content === 'string') {\r\n return { string: content };\r\n } else if (content instanceof TemplateRef) {\r\n return { template: content };\r\n } else {\r\n return { component: content };\r\n }\r\n });\r\n\r\n constructor() {\r\n super();\r\n afterRenderEffect(() => {\r\n if (this.open()) {\r\n if (untracked(this.modal)) {\r\n this._dialogElement().nativeElement.showModal();\r\n } else {\r\n this._dialogElement().nativeElement.showPopover();\r\n }\r\n } else {\r\n this._dialogElement().nativeElement.close();\r\n this._dialogElement().nativeElement.hidePopover();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Different cancel handlers for different event types. Required for modal and popover dialogs.\r\n */\r\n protected onCancel(event?: ToggleEvent | KeyboardEvent): void {\r\n if (event instanceof KeyboardEvent) {\r\n // Modal dialogs handle this on their own\r\n if (this.modal()) {\r\n this.cancelPrompt();\r\n this.setStateToClosed();\r\n return;\r\n }\r\n if (event.key !== 'Escape' || (event.target as HTMLElement).tagName !== 'DIALOG') {\r\n // TODO: limitation: when focus is inside a different element, we cannot know if it is safe to close, so we skip it\r\n return;\r\n }\r\n if (this.closeBy() === 'escape') {\r\n this.setStateToClosed();\r\n }\r\n return;\r\n }\r\n\r\n if (event instanceof ToggleEvent && event.newState !== 'closed') {\r\n // This is also just for popover dialogs\r\n return;\r\n }\r\n /**\r\n * In case the dialog is closed with the same click event that tries to open it again immediately,\r\n * we need to wait for the next animation frame to avoid a stuck state where the outside thinks it's opened\r\n * but inside `open` is set to false.\r\n */\r\n requestAnimationFrame(() => {\r\n this.setStateToClosed();\r\n });\r\n }\r\n\r\n private setStateToClosed() {\r\n this.open.set(false);\r\n this.cancelPrompt();\r\n requestAnimationFrame(() => {\r\n const allAnimationsDone = Promise.all(\r\n this.element.nativeElement.getAnimations().map(x => x.finished)\r\n );\r\n allAnimationsDone\r\n .then(() => {\r\n this.isFullyClosed.set(true);\r\n this.closed.emit();\r\n })\r\n .catch(() => {\r\n // ignore cancelled animation\r\n });\r\n });\r\n }\r\n\r\n private cancelPrompt() {\r\n if (this.contentComponentInputs()) {\r\n this.promptResult.emit({\r\n value: null,\r\n button: null,\r\n });\r\n this._latestClickedButtonValue.set(null);\r\n }\r\n }\r\n\r\n protected closeWithButton() {\r\n this.open.set(false);\r\n this.cancelPrompt();\r\n }\r\n\r\n /**\r\n * Opens the dialog. Alternatively, you can also set the `open` input to `true`.\r\n */\r\n public show(): void {\r\n this.open.set(true);\r\n }\r\n public hide(): void {\r\n this.open.set(false);\r\n }\r\n public toggle(): void {\r\n this.open.update(open => !open);\r\n }\r\n\r\n protected singleButtonTypeFix(button: unknown): Buttons[number] {\r\n return button as Buttons[number];\r\n }\r\n\r\n protected buttonClick(button: Buttons[number]['value']): void {\r\n this.buttonClicked.emit(button);\r\n this._latestClickedButtonValue.set({ button });\r\n }\r\n}\r\n","<!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n<dialog\r\n #dialog\r\n [ptInt]=\"this\"\r\n [ptClass]=\"{ root: true, modal: modal() }\"\r\n [attr.closedby]=\"modalClosedBy()\"\r\n [autofocus]=\"autofocus()\"\r\n [attr.aria-labelledby]=\"headerId\"\r\n (cancel)=\"onCancel()\"\r\n (toggle)=\"onCancel($event)\"\r\n (keydown)=\"onCancel($event)\"\r\n [style.minWidth]=\"size().minWidth\"\r\n [style.maxWidth]=\"size().maxWidth\"\r\n [style.width]=\"size().width\"\r\n [style.minHeight]=\"size().minHeight\"\r\n [style.maxHeight]=\"size().maxHeight\"\r\n [ngnMovable]=\"movable()\"\r\n [ngnResizable]=\"resizable()\"\r\n [ngnResizableSizeLimits]=\"{\r\n minWidth: size().minWidth,\r\n minHeight: size().minHeight,\r\n maxWidth: size().maxWidth,\r\n maxHeight: size().maxHeight,\r\n }\"\r\n [ngnMovableDragHandle]=\"header\"\r\n [attr.popover]=\"popoverClosedBy()\"\r\n>\r\n <header #header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"headerTemplate()\"\r\n [ngTemplateOutletContext]=\"{ headerId, title: title() }\"\r\n ></ng-template>\r\n <button ngnButton [kind]=\"'icon'\" (click)=\"closeWithButton()\" tabindex=\"-1\">\r\n <ngn-icon [defaultIcon]=\"'xmark'\"></ngn-icon>\r\n </button>\r\n </header>\r\n\r\n @if (typedContent().template; as template) {\r\n <ngn-defer\r\n [lazyContent]=\"template\"\r\n [lazy]=\"lazy()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n />\r\n } @else if (typedContent().string; as string) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n {{ string }}\r\n </div>\r\n } @else if (typedContent().component; as component) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'content'\">\r\n <ng-container *ngComponentOutlet=\"component; inputs: contentComponentInputs()\" />\r\n </div>\r\n } @else {\r\n <ng-content />\r\n }\r\n\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-template [ngTemplateOutlet]=\"footerTemplate()\"></ng-template>\r\n </footer>\r\n</dialog>\r\n\r\n<ng-template\r\n #defaultHeaderTemplate\r\n [ngnTemplate]=\"templateTypes.header\"\r\n let-headerId=\"headerId\"\r\n let-title=\"title\"\r\n>\r\n @if (title) {\r\n <h2 [ptInt]=\"this\" [ptClass]=\"'default-header'\" [id]=\"headerId\">{{ title }}</h2>\r\n } @else {\r\n <div>\r\n <!-- Placeholder for default header content -->\r\n </div>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultFooterTemplate>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-footer'\">\r\n @for (button of footerButtons(); track $index) {\r\n <ngn-action-button [config]=\"singleButtonTypeFix(button)\" (clicked)=\"buttonClick($event)\" />\r\n }\r\n </div>\r\n</ng-template>\r\n","import { ComponentRef, Injector, ViewContainerRef } from '@angular/core';\r\nimport { setComponentInput } from '@ngneers/controls/api/ng';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\nimport { NgnDialog } from './dialog';\r\nimport { PromptDialogBase } from './prompt-dialog-base';\r\n\r\nimport type { DialogConfig } from './types';\r\nimport type { NgnActionButtonConfig } from '@ngneers/controls/api';\r\n\r\nexport type DialogHandle<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n> = {\r\n close: () => void;\r\n updateConfig: (config: Partial<DialogConfig<T, Buttons>>) => void;\r\n buttonClicked: Observable<Buttons[number]['value'] | null>;\r\n};\r\n\r\nexport type PromptDialogHandle<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n> = {\r\n close: () => void;\r\n updateConfig: (config: Partial<DialogConfig<T, Buttons>>) => void;\r\n result: Promise<{\r\n value: T extends PromptDialogBase<infer D, Buttons> ? D : never | null;\r\n button: Buttons[number]['value'] | null;\r\n }>;\r\n};\r\n\r\nfunction applyDialogConfig<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>(dialogRef: ComponentRef<NgnDialog<T, Buttons>>, config: DialogConfig<T, Buttons>): void {\r\n if (config.title !== undefined) {\r\n setComponentInput(dialogRef, 'title', config.title);\r\n }\r\n if (config.size !== undefined) {\r\n setComponentInput(dialogRef, 'size', config.size);\r\n }\r\n if (config.modal !== undefined) {\r\n setComponentInput(dialogRef, 'modal', config.modal);\r\n }\r\n if (config.footerButtons !== undefined) {\r\n setComponentInput(dialogRef, 'footerButtons', config.footerButtons);\r\n }\r\n if (config.closeBy !== undefined) {\r\n setComponentInput(dialogRef, 'closeBy', config.closeBy);\r\n }\r\n if (config.content !== undefined) {\r\n setComponentInput(dialogRef, 'content', config.content);\r\n }\r\n if (config.movable !== undefined) {\r\n setComponentInput(dialogRef, 'movable', config.movable);\r\n }\r\n if (config.resizable !== undefined) {\r\n setComponentInput(dialogRef, 'resizable', config.resizable);\r\n }\r\n}\r\n\r\nexport function createDialog<\r\n T,\r\n Buttons extends NgnActionButtonConfig<T extends PromptDialogBase<any, infer B> ? B : unknown>[],\r\n>(\r\n injector: Injector,\r\n config: DialogConfig<T, Buttons>\r\n): T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons> {\r\n type ButtonValues = Buttons[number]['value'];\r\n\r\n const viewContainerRef = injector.get(ViewContainerRef);\r\n const dialogRef = viewContainerRef.createComponent(NgnDialog, {\r\n injector,\r\n }) as unknown as ComponentRef<NgnDialog<T, Buttons>>;\r\n\r\n applyDialogConfig(dialogRef, config);\r\n dialogRef.instance.buttonClicked.subscribe(value => {\r\n buttonClicked.next(value);\r\n });\r\n\r\n const buttonClicked = new Subject<ButtonValues | null>();\r\n dialogRef.onDestroy(() => {\r\n buttonClicked.complete();\r\n });\r\n\r\n if (\r\n typeof config.content === 'function' &&\r\n config.content.prototype instanceof PromptDialogBase\r\n ) {\r\n const _result = Promise.withResolvers<{\r\n value: (T extends PromptDialogBase<infer D, ButtonValues> ? D : never) | null;\r\n button: ButtonValues | null;\r\n }>();\r\n\r\n (dialogRef.instance as unknown as NgnDialog<T, Buttons>).promptResult.subscribe(result => {\r\n _result.resolve(result);\r\n });\r\n\r\n return {\r\n close: () => dialogRef.destroy(),\r\n updateConfig: (newConfig: Partial<DialogConfig<T, Buttons>>) =>\r\n applyDialogConfig(dialogRef, newConfig),\r\n result: _result.promise,\r\n } as T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons>;\r\n }\r\n\r\n return {\r\n close: () => dialogRef.destroy(),\r\n updateConfig: (newConfig: Partial<DialogConfig<T, Buttons>>) =>\r\n applyDialogConfig(dialogRef, newConfig),\r\n buttonClicked: buttonClicked.asObservable(),\r\n } as T extends PromptDialogBase<any, any>\r\n ? PromptDialogHandle<T, Buttons>\r\n : DialogHandle<T, Buttons>;\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -211,7 +211,7 @@ class NgnDrawer extends DrawerTemplates {
211
211
  }
212
212
  }
213
213
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnDrawer, deps: [], target: i0.ɵɵFactoryTarget.Component });
214
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: NgnDrawer, isStandalone: true, selector: "ngn-drawer", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, closeBy: { classPropertyName: "closeBy", publicName: "closeBy", isSignal: true, isRequired: false, transformFunction: null }, modal: { classPropertyName: "modal", publicName: "modal", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, iconClose: { classPropertyName: "iconClose", publicName: "iconClose", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, cache: { classPropertyName: "cache", publicName: "cache", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", open: "openChange" }, host: { attributes: { "role": "complementary" }, listeners: { "toggle": "onToggle($event)" }, properties: { "attr.popover": "closeByPopover()", "ariaModal": "modal() ? \"true\" : undefined", "attr.data-position": "position()" } }, providers: [provideSelf(NgnDrawer)], usesInheritance: true, ngImport: i0, template: "<header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate();\r\n context: { $implicit: { close: doClose, text: this.header() } }\r\n \"\r\n />\r\n</header>\r\n<ngn-defer\r\n [lazyContent]=\"contentTemplate()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [lazy]=\"lazy()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n>\r\n <ng-content />\r\n</ngn-defer>\r\n@if (footerTemplate(); as footerTemplate) {\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\" />\r\n </footer>\r\n}\r\n\r\n<ng-template #defaultHeaderTemplate [ngnTemplate]=\"templateTypes.header\" let-header>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-header'\">\r\n <span [ptInt]=\"this\" [ptClass]=\"'default-header-text'\">{{ header.text }}</span>\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [attr.aria-label]=\"i18n['drawer_close']()\"\r\n (click)=\"header.close()\"\r\n >\r\n <ngn-icon defaultIcon=\"xmark\" [icon]=\"iconClose()\" />\r\n </button>\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NgnDefer, selector: "ngn-defer", inputs: ["lazyContent", "lazyContentContext", "open", "lazy", "cache", "hiddenOnClosed"] }, { kind: "directive", type: NgnButton, selector: "button[ngnButton], a[ngnButton]", inputs: ["inline"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "directive", type: NgnTemplate, selector: "ng-template[ngnTemplate]", inputs: ["ngnTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
214
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: NgnDrawer, isStandalone: true, selector: "ngn-drawer", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, closeBy: { classPropertyName: "closeBy", publicName: "closeBy", isSignal: true, isRequired: false, transformFunction: null }, modal: { classPropertyName: "modal", publicName: "modal", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, iconClose: { classPropertyName: "iconClose", publicName: "iconClose", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, cache: { classPropertyName: "cache", publicName: "cache", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed", open: "openChange" }, host: { attributes: { "role": "complementary" }, listeners: { "toggle": "onToggle($event)" }, properties: { "attr.popover": "closeByPopover()", "ariaModal": "modal() ? \"true\" : undefined", "attr.data-position": "position()" } }, providers: [provideSelf(NgnDrawer)], usesInheritance: true, ngImport: i0, template: "<header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate();\r\n context: { $implicit: { close: doClose, text: this.header() } }\r\n \"\r\n />\r\n</header>\r\n<ngn-defer\r\n [lazyContent]=\"contentTemplate()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [lazy]=\"lazy()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n>\r\n <ng-content />\r\n</ngn-defer>\r\n@if (footerTemplate(); as footerTemplate) {\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\" />\r\n </footer>\r\n}\r\n\r\n<ng-template #defaultHeaderTemplate [ngnTemplate]=\"templateTypes.header\" let-header>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-header'\">\r\n <span [ptInt]=\"this\" [ptClass]=\"'default-header-text'\">{{ header.text }}</span>\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [attr.aria-label]=\"i18n['drawer_close']()\"\r\n (click)=\"header.close()\"\r\n >\r\n <ngn-icon defaultIcon=\"xmark\" [icon]=\"iconClose()\" />\r\n </button>\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NgnDefer, selector: "ngn-defer", inputs: ["lazyContent", "lazyContentContext", "open", "lazy", "cache", "hiddenOnClosed"] }, { kind: "directive", type: NgnButton, selector: "button[ngnButton], a[ngnButton]", inputs: ["inline"], exportAs: ["ngnButton"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "directive", type: NgnTemplate, selector: "ng-template[ngnTemplate]", inputs: ["ngnTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
215
215
  }
216
216
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnDrawer, decorators: [{
217
217
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"ngneers-controls-drawer.mjs","sources":["../../src/drawer/drawer-templates.ts","../../src/drawer/drawer.ts","../../src/drawer/drawer.html","../../src/drawer/ngneers-controls-drawer.ts"],"sourcesContent":["import { computed, contentChild, Directive, input, TemplateRef, viewChild } from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\n\r\nimport type { HeaderTemplateType } from './types';\r\n\r\n@Directive()\r\nexport abstract class DrawerTemplates extends NgnBase<'drawer'> {\r\n // Header template\r\n private readonly _defaultHeaderTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.header>>('defaultHeaderTemplate');\r\n private readonly _userHeaderTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.header>>('header');\r\n /**\r\n * Set a custom template for the header.\r\n * Can also be set using an `<ng-template>` element with `#header` template reference variable.\r\n */\r\n public readonly templateHeader = input<TemplateRef<typeof this.templateTypes.header> | null>(\r\n null\r\n );\r\n protected readonly headerTemplate = computed(\r\n () => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate()\r\n );\r\n\r\n // Footer template\r\n private readonly _userFooterTemplate = contentChild<TemplateRef<unknown>>('footer');\r\n /**\r\n * Set a custom template for the footer.\r\n * Can also be set using an `<ng-template>` element with `#footer` template reference variable.\r\n */\r\n public readonly templateFooter = input<TemplateRef<unknown> | null>(null);\r\n protected readonly footerTemplate = computed(\r\n () => this._userFooterTemplate() ?? this.templateFooter()\r\n );\r\n\r\n // Content template\r\n private readonly _userContentTemplate = contentChild<TemplateRef<unknown>>('content');\r\n /**\r\n * Set a custom template for the content.\r\n * Can also be set using an `<ng-template>` element with `#content` template reference variable.\r\n */\r\n public readonly content = input<TemplateRef<unknown> | null>(null);\r\n protected readonly contentTemplate = computed(\r\n () => this._userContentTemplate() ?? this.content()\r\n );\r\n\r\n /**\r\n * Types for the drawer templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n /**\r\n * Type of the template variable for the header template.\r\n */\r\n header: HeaderTemplateType;\r\n }>();\r\n}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n afterRenderEffect,\r\n booleanAttribute,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n untracked,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport {\r\n NgnTemplate,\r\n type Openable,\r\n Platform,\r\n type PopoverCloseBy,\r\n toPopoverCloseBy,\r\n} from '@ngneers/controls/api/ng';\r\nimport { NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { NgnButton } from '@ngneers/controls/button';\r\nimport { NgnDefer } from '@ngneers/controls/defer';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { drawerControlTemplate } from '@ngneers/controls-themes/templates/drawer';\r\n\r\nimport { DrawerTemplates } from './drawer-templates';\r\n\r\nimport type { IconType } from '@ngneers/controls-custom-types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-drawer',\r\n templateUrl: './drawer.html',\r\n imports: [NgnPt, NgTemplateOutlet, NgnDefer, NgnButton, NgnIcon, NgnTemplate],\r\n providers: [provideSelf(NgnDrawer)],\r\n host: {\r\n '[attr.popover]': 'closeByPopover()',\r\n '(toggle)': 'onToggle($event)',\r\n '[ariaModal]': 'modal() ? \"true\" : undefined',\r\n role: 'complementary',\r\n '[attr.data-position]': 'position()',\r\n },\r\n})\r\nexport class NgnDrawer extends DrawerTemplates implements Openable {\r\n protected readonly theme = this.injectThemeTemplate(drawerControlTemplate, {\r\n root: true,\r\n horizontal: () => this.horizontal(),\r\n });\r\n protected readonly i18n = inject(I18n).translations;\r\n\r\n /**\r\n * Emits when the drawer has fully closed.\r\n */\r\n public readonly closed = output();\r\n /**\r\n * Shows or hides the drawer.\r\n *\r\n * You probably want to react to openChange events from outside to update your variable accordingly.\r\n */\r\n public readonly open = model<boolean>(false);\r\n /**\r\n * How the drawer closes depending on user interaction.\r\n * @default 'any'\r\n */\r\n public readonly closeBy = input<PopoverCloseBy>('any');\r\n /**\r\n * Whether the drawer is a modal or not.\r\n * A modal drawer prevents interaction with the rest of the page while open.\r\n * @default false\r\n */\r\n public readonly modal = input(false, { transform: booleanAttribute });\r\n /**\r\n * Position of the drawer\r\n * @default 'left'\r\n */\r\n public readonly position = input<'top' | 'right' | 'bottom' | 'left' | 'fullscreen'>('left');\r\n /**\r\n * The width or height of the drawer depending on its position\r\n * @default '300px'\r\n */\r\n public readonly size = input<string>('300px');\r\n /**\r\n * Header text of the drawer\r\n */\r\n public readonly header = input<string>();\r\n /**\r\n * The icon to use for the close button in the default header template\r\n */\r\n public readonly iconClose = input<IconType>();\r\n /**\r\n * Lazy load the drawer content\r\n * @default false\r\n */\r\n public readonly lazy = input(false, { transform: booleanAttribute });\r\n /**\r\n * Whether to cache the lazy loaded content\r\n * @default false\r\n */\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n\r\n protected readonly appliedPosition = computed(() => {\r\n const position = this.position();\r\n if (this.platform.windowSize().height < 600 || this.platform.windowSize().width < 600) {\r\n return 'fullscreen';\r\n }\r\n return position;\r\n });\r\n\r\n private readonly platform = inject(Platform);\r\n private _togglingTriggeredByInput = false;\r\n protected readonly isFullyClosed = signal(true);\r\n protected readonly closeByPopover = computed(() => toPopoverCloseBy(this.closeBy()));\r\n protected readonly horizontal = computed(\r\n () => this.position() === 'top' || this.position() === 'bottom'\r\n );\r\n protected readonly doClose = this.hide.bind(this);\r\n\r\n constructor() {\r\n super();\r\n afterRenderEffect(() => {\r\n if (this.open()) {\r\n this._togglingTriggeredByInput = true;\r\n this.show();\r\n } else {\r\n this._togglingTriggeredByInput = true;\r\n this.hide();\r\n }\r\n });\r\n\r\n effect(() => {\r\n const position = this.appliedPosition();\r\n\r\n if (position === 'fullscreen') {\r\n this.element.nativeElement.style.top = '0';\r\n this.element.nativeElement.style.bottom = '0';\r\n this.element.nativeElement.style.left = '0';\r\n this.element.nativeElement.style.right = '0';\r\n this.element.nativeElement.style.width = '100%';\r\n this.element.nativeElement.style.height = '100%';\r\n return;\r\n }\r\n\r\n this.element.nativeElement.style.top = position !== 'bottom' ? '0' : 'unset';\r\n this.element.nativeElement.style.bottom = position !== 'top' ? '0' : 'unset';\r\n this.element.nativeElement.style.left = position !== 'right' ? '0' : 'unset';\r\n this.element.nativeElement.style.right = position !== 'left' ? '0' : 'unset';\r\n if (position === 'left' || position === 'right') {\r\n this.element.nativeElement.style.width = this.size();\r\n this.element.nativeElement.style.height = '100%';\r\n } else {\r\n this.element.nativeElement.style.height = this.size();\r\n this.element.nativeElement.style.width = '100%';\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Opens the drawer. Alternatively, you can also set the `open` input to `true`.\r\n */\r\n public show() {\r\n untracked(() => {\r\n if (this.open() && !this._togglingTriggeredByInput) {\r\n return;\r\n }\r\n this._togglingTriggeredByInput = false;\r\n this.element.nativeElement.togglePopover(true);\r\n });\r\n }\r\n\r\n /**\r\n * Closes the drawer. Alternatively, you can also set the `open` input to `false`.\r\n */\r\n public hide() {\r\n untracked(() => {\r\n if (!this.open() && !this._togglingTriggeredByInput) {\r\n return;\r\n }\r\n this._togglingTriggeredByInput = false;\r\n this.element.nativeElement.togglePopover(false);\r\n });\r\n }\r\n\r\n /**\r\n * Toggles the drawer open or closed. Alternatively, you can also set the `open` input accordingly.\r\n */\r\n public toggle() {\r\n if (untracked(this.open)) {\r\n this.hide();\r\n } else {\r\n this.show();\r\n }\r\n }\r\n\r\n protected onToggle(event: Event) {\r\n const evt = event as ToggleEvent;\r\n if (evt.newState === 'closed') {\r\n this.open.set(false);\r\n\r\n requestAnimationFrame(() => {\r\n const allAnimationsDone = Promise.all(\r\n this.element.nativeElement.getAnimations().map(x => x.finished)\r\n );\r\n allAnimationsDone\r\n .then(() => {\r\n this.isFullyClosed.set(true);\r\n this.closed.emit();\r\n })\r\n .catch(() => {\r\n // ignore cancelled animation\r\n });\r\n });\r\n } else {\r\n this.open.set(true);\r\n this.isFullyClosed.set(false);\r\n }\r\n }\r\n}\r\n","<header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate();\r\n context: { $implicit: { close: doClose, text: this.header() } }\r\n \"\r\n />\r\n</header>\r\n<ngn-defer\r\n [lazyContent]=\"contentTemplate()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [lazy]=\"lazy()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n>\r\n <ng-content />\r\n</ngn-defer>\r\n@if (footerTemplate(); as footerTemplate) {\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\" />\r\n </footer>\r\n}\r\n\r\n<ng-template #defaultHeaderTemplate [ngnTemplate]=\"templateTypes.header\" let-header>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-header'\">\r\n <span [ptInt]=\"this\" [ptClass]=\"'default-header-text'\">{{ header.text }}</span>\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [attr.aria-label]=\"i18n['drawer_close']()\"\r\n (click)=\"header.close()\"\r\n >\r\n <ngn-icon defaultIcon=\"xmark\" [icon]=\"iconClose()\" />\r\n </button>\r\n </div>\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngneers-controls-drawer.mjs","sources":["../../src/drawer/drawer-templates.ts","../../src/drawer/drawer.ts","../../src/drawer/drawer.html","../../src/drawer/ngneers-controls-drawer.ts"],"sourcesContent":["import { computed, contentChild, Directive, input, TemplateRef, viewChild } from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { NgnBase } from '@ngneers/controls/base';\r\n\r\nimport type { HeaderTemplateType } from './types';\r\n\r\n@Directive()\r\nexport abstract class DrawerTemplates extends NgnBase<'drawer'> {\r\n // Header template\r\n private readonly _defaultHeaderTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.header>>('defaultHeaderTemplate');\r\n private readonly _userHeaderTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.header>>('header');\r\n /**\r\n * Set a custom template for the header.\r\n * Can also be set using an `<ng-template>` element with `#header` template reference variable.\r\n */\r\n public readonly templateHeader = input<TemplateRef<typeof this.templateTypes.header> | null>(\r\n null\r\n );\r\n protected readonly headerTemplate = computed(\r\n () => this._userHeaderTemplate() ?? this.templateHeader() ?? this._defaultHeaderTemplate()\r\n );\r\n\r\n // Footer template\r\n private readonly _userFooterTemplate = contentChild<TemplateRef<unknown>>('footer');\r\n /**\r\n * Set a custom template for the footer.\r\n * Can also be set using an `<ng-template>` element with `#footer` template reference variable.\r\n */\r\n public readonly templateFooter = input<TemplateRef<unknown> | null>(null);\r\n protected readonly footerTemplate = computed(\r\n () => this._userFooterTemplate() ?? this.templateFooter()\r\n );\r\n\r\n // Content template\r\n private readonly _userContentTemplate = contentChild<TemplateRef<unknown>>('content');\r\n /**\r\n * Set a custom template for the content.\r\n * Can also be set using an `<ng-template>` element with `#content` template reference variable.\r\n */\r\n public readonly content = input<TemplateRef<unknown> | null>(null);\r\n protected readonly contentTemplate = computed(\r\n () => this._userContentTemplate() ?? this.content()\r\n );\r\n\r\n /**\r\n * Types for the drawer templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n /**\r\n * Type of the template variable for the header template.\r\n */\r\n header: HeaderTemplateType;\r\n }>();\r\n}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n afterRenderEffect,\r\n booleanAttribute,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n untracked,\r\n ChangeDetectionStrategy,\r\n} from '@angular/core';\r\nimport {\r\n NgnTemplate,\r\n type Openable,\r\n Platform,\r\n type PopoverCloseBy,\r\n toPopoverCloseBy,\r\n} from '@ngneers/controls/api/ng';\r\nimport { NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { NgnButton } from '@ngneers/controls/button';\r\nimport { NgnDefer } from '@ngneers/controls/defer';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { drawerControlTemplate } from '@ngneers/controls-themes/templates/drawer';\r\n\r\nimport { DrawerTemplates } from './drawer-templates';\r\n\r\nimport type { IconType } from '@ngneers/controls-custom-types';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-drawer',\r\n templateUrl: './drawer.html',\r\n imports: [NgnPt, NgTemplateOutlet, NgnDefer, NgnButton, NgnIcon, NgnTemplate],\r\n providers: [provideSelf(NgnDrawer)],\r\n host: {\r\n '[attr.popover]': 'closeByPopover()',\r\n '(toggle)': 'onToggle($event)',\r\n '[ariaModal]': 'modal() ? \"true\" : undefined',\r\n role: 'complementary',\r\n '[attr.data-position]': 'position()',\r\n },\r\n})\r\nexport class NgnDrawer extends DrawerTemplates implements Openable {\r\n protected readonly theme = this.injectThemeTemplate(drawerControlTemplate, {\r\n root: true,\r\n horizontal: () => this.horizontal(),\r\n });\r\n protected readonly i18n = inject(I18n).translations;\r\n\r\n /**\r\n * Emits when the drawer has fully closed.\r\n */\r\n public readonly closed = output();\r\n /**\r\n * Shows or hides the drawer.\r\n *\r\n * You probably want to react to openChange events from outside to update your variable accordingly.\r\n */\r\n public readonly open = model<boolean>(false);\r\n /**\r\n * How the drawer closes depending on user interaction.\r\n * @default 'any'\r\n */\r\n public readonly closeBy = input<PopoverCloseBy>('any');\r\n /**\r\n * Whether the drawer is a modal or not.\r\n * A modal drawer prevents interaction with the rest of the page while open.\r\n * @default false\r\n */\r\n public readonly modal = input(false, { transform: booleanAttribute });\r\n /**\r\n * Position of the drawer\r\n * @default 'left'\r\n */\r\n public readonly position = input<'top' | 'right' | 'bottom' | 'left' | 'fullscreen'>('left');\r\n /**\r\n * The width or height of the drawer depending on its position\r\n * @default '300px'\r\n */\r\n public readonly size = input<string>('300px');\r\n /**\r\n * Header text of the drawer\r\n */\r\n public readonly header = input<string>();\r\n /**\r\n * The icon to use for the close button in the default header template\r\n */\r\n public readonly iconClose = input<IconType>();\r\n /**\r\n * Lazy load the drawer content\r\n * @default false\r\n */\r\n public readonly lazy = input(false, { transform: booleanAttribute });\r\n /**\r\n * Whether to cache the lazy loaded content\r\n * @default false\r\n */\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n\r\n protected readonly appliedPosition = computed(() => {\r\n const position = this.position();\r\n if (this.platform.windowSize().height < 600 || this.platform.windowSize().width < 600) {\r\n return 'fullscreen';\r\n }\r\n return position;\r\n });\r\n\r\n private readonly platform = inject(Platform);\r\n private _togglingTriggeredByInput = false;\r\n protected readonly isFullyClosed = signal(true);\r\n protected readonly closeByPopover = computed(() => toPopoverCloseBy(this.closeBy()));\r\n protected readonly horizontal = computed(\r\n () => this.position() === 'top' || this.position() === 'bottom'\r\n );\r\n protected readonly doClose = this.hide.bind(this);\r\n\r\n constructor() {\r\n super();\r\n afterRenderEffect(() => {\r\n if (this.open()) {\r\n this._togglingTriggeredByInput = true;\r\n this.show();\r\n } else {\r\n this._togglingTriggeredByInput = true;\r\n this.hide();\r\n }\r\n });\r\n\r\n effect(() => {\r\n const position = this.appliedPosition();\r\n\r\n if (position === 'fullscreen') {\r\n this.element.nativeElement.style.top = '0';\r\n this.element.nativeElement.style.bottom = '0';\r\n this.element.nativeElement.style.left = '0';\r\n this.element.nativeElement.style.right = '0';\r\n this.element.nativeElement.style.width = '100%';\r\n this.element.nativeElement.style.height = '100%';\r\n return;\r\n }\r\n\r\n this.element.nativeElement.style.top = position !== 'bottom' ? '0' : 'unset';\r\n this.element.nativeElement.style.bottom = position !== 'top' ? '0' : 'unset';\r\n this.element.nativeElement.style.left = position !== 'right' ? '0' : 'unset';\r\n this.element.nativeElement.style.right = position !== 'left' ? '0' : 'unset';\r\n if (position === 'left' || position === 'right') {\r\n this.element.nativeElement.style.width = this.size();\r\n this.element.nativeElement.style.height = '100%';\r\n } else {\r\n this.element.nativeElement.style.height = this.size();\r\n this.element.nativeElement.style.width = '100%';\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Opens the drawer. Alternatively, you can also set the `open` input to `true`.\r\n */\r\n public show() {\r\n untracked(() => {\r\n if (this.open() && !this._togglingTriggeredByInput) {\r\n return;\r\n }\r\n this._togglingTriggeredByInput = false;\r\n this.element.nativeElement.togglePopover(true);\r\n });\r\n }\r\n\r\n /**\r\n * Closes the drawer. Alternatively, you can also set the `open` input to `false`.\r\n */\r\n public hide() {\r\n untracked(() => {\r\n if (!this.open() && !this._togglingTriggeredByInput) {\r\n return;\r\n }\r\n this._togglingTriggeredByInput = false;\r\n this.element.nativeElement.togglePopover(false);\r\n });\r\n }\r\n\r\n /**\r\n * Toggles the drawer open or closed. Alternatively, you can also set the `open` input accordingly.\r\n */\r\n public toggle() {\r\n if (untracked(this.open)) {\r\n this.hide();\r\n } else {\r\n this.show();\r\n }\r\n }\r\n\r\n protected onToggle(event: Event) {\r\n const evt = event as ToggleEvent;\r\n if (evt.newState === 'closed') {\r\n this.open.set(false);\r\n\r\n requestAnimationFrame(() => {\r\n const allAnimationsDone = Promise.all(\r\n this.element.nativeElement.getAnimations().map(x => x.finished)\r\n );\r\n allAnimationsDone\r\n .then(() => {\r\n this.isFullyClosed.set(true);\r\n this.closed.emit();\r\n })\r\n .catch(() => {\r\n // ignore cancelled animation\r\n });\r\n });\r\n } else {\r\n this.open.set(true);\r\n this.isFullyClosed.set(false);\r\n }\r\n }\r\n}\r\n","<header [ptInt]=\"this\" [ptClass]=\"'header'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n headerTemplate();\r\n context: { $implicit: { close: doClose, text: this.header() } }\r\n \"\r\n />\r\n</header>\r\n<ngn-defer\r\n [lazyContent]=\"contentTemplate()\"\r\n [open]=\"open() || !isFullyClosed()\"\r\n [lazy]=\"lazy()\"\r\n [cache]=\"cache()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'content'\"\r\n>\r\n <ng-content />\r\n</ngn-defer>\r\n@if (footerTemplate(); as footerTemplate) {\r\n <footer [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n <ng-container *ngTemplateOutlet=\"footerTemplate\" />\r\n </footer>\r\n}\r\n\r\n<ng-template #defaultHeaderTemplate [ngnTemplate]=\"templateTypes.header\" let-header>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-header'\">\r\n <span [ptInt]=\"this\" [ptClass]=\"'default-header-text'\">{{ header.text }}</span>\r\n <button\r\n ngnButton\r\n [kind]=\"'icon'\"\r\n [attr.aria-label]=\"i18n['drawer_close']()\"\r\n (click)=\"header.close()\"\r\n >\r\n <ngn-icon defaultIcon=\"xmark\" [icon]=\"iconClose()\" />\r\n </button>\r\n </div>\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -96,7 +96,7 @@ class NgnEditInplace extends EditInplaceTemplates {
96
96
  this.switchToDisplay();
97
97
  }
98
98
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnEditInplace, deps: null, target: i0.ɵɵFactoryTarget.Component });
99
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: NgnEditInplace, isStandalone: true, selector: "ngn-edit-inplace", inputs: { editVisible: { classPropertyName: "editVisible", publicName: "editVisible", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, cache: { classPropertyName: "cache", publicName: "cache", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editVisible: "editVisibleChange" }, providers: [provideSelf(NgnEditInplace)], usesInheritance: true, ngImport: i0, template: "<ngn-inplace\r\n [templateDisplay]=\"displayTemplate()\"\r\n [templateDisplayContext]=\"{ $implicit: { value: value() } }\"\r\n [templateContent]=\"editTemplate()\"\r\n [templateContentContext]=\"{\r\n $implicit: {\r\n value: value(),\r\n update: value.set.bind(value),\r\n close: editVisible.set.bind(editVisible, false),\r\n },\r\n }\"\r\n [contentVisible]=\"editVisible()\"\r\n (contentVisibleChange)=\"editVisible.set($event)\"\r\n [lazy]=\"lazy()\"\r\n [cache]=\"cache()\"\r\n [disabled]=\"disabled() || readonly()\"\r\n (contentVisibleChange)=\"!$event && touched.set(true)\"\r\n/>\r\n\r\n<ng-template #defaultDisplayTemplate [ngnTemplate]=\"templateTypes.display\" let-display>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-display'\">\r\n @if (!display.value) {\r\n <span [ptInt]=\"this\" [ptClass]=\"'default-fallback-display'\">{{\r\n i18n['editInplace_placeholder']()\r\n }}</span>\r\n } @else {\r\n <span>{{ display.value }}</span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultEditTemplate [ngnTemplate]=\"templateTypes.edit\" let-edit>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-edit'\">\r\n <ngn-input-field\r\n (focusout)=\"focusOut($event)\"\r\n [label]=\"label()\"\r\n [inputId]=\"inputId()\"\r\n [invalid]=\"invalid()\"\r\n [labelledBy]=\"labelledBy()\"\r\n >\r\n <input\r\n type=\"text\"\r\n ngnInput\r\n ngnAutofocus\r\n [value]=\"edit.value\"\r\n (valueChange)=\"edit.update($event ?? '')\"\r\n (keydown.enter)=\"edit.close()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'default-edit-input'\"\r\n (blur)=\"touched.set(true)\"\r\n />\r\n <button\r\n ngnButton\r\n type=\"button\"\r\n kind=\"icon\"\r\n [inline]=\"true\"\r\n (click)=\"edit.close()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'default-edit-close-button'\"\r\n >\r\n <ngn-icon defaultIcon=\"check\" />\r\n </button>\r\n </ngn-input-field>\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "component", type: NgnInplace, selector: "ngn-inplace", inputs: ["contentVisible", "lazy", "cache", "disabled"], outputs: ["contentVisibleChange"] }, { kind: "directive", type: NgnTemplate, selector: "ng-template[ngnTemplate]", inputs: ["ngnTemplate"] }, { kind: "directive", type: NgnInput, selector: "input[ngnInput], textarea[ngnInput]", inputs: ["invalid", "value"], outputs: ["valueChange"] }, { kind: "directive", type: NgnAutofocus, selector: "[ngnAutofocus]", inputs: ["ngnAutofocus"] }, { kind: "directive", type: NgnButton, selector: "button[ngnButton], a[ngnButton]", inputs: ["inline"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "component", type: NgnInputField, selector: "ngn-input-field", inputs: ["label", "labelledBy", "labelKind", "inputId", "showClearButton", "iconClearButton", "tabindex", "invalid", "readonly", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
99
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: NgnEditInplace, isStandalone: true, selector: "ngn-edit-inplace", inputs: { editVisible: { classPropertyName: "editVisible", publicName: "editVisible", isSignal: true, isRequired: false, transformFunction: null }, lazy: { classPropertyName: "lazy", publicName: "lazy", isSignal: true, isRequired: false, transformFunction: null }, cache: { classPropertyName: "cache", publicName: "cache", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { editVisible: "editVisibleChange" }, providers: [provideSelf(NgnEditInplace)], usesInheritance: true, ngImport: i0, template: "<ngn-inplace\r\n [templateDisplay]=\"displayTemplate()\"\r\n [templateDisplayContext]=\"{ $implicit: { value: value() } }\"\r\n [templateContent]=\"editTemplate()\"\r\n [templateContentContext]=\"{\r\n $implicit: {\r\n value: value(),\r\n update: value.set.bind(value),\r\n close: editVisible.set.bind(editVisible, false),\r\n },\r\n }\"\r\n [contentVisible]=\"editVisible()\"\r\n (contentVisibleChange)=\"editVisible.set($event)\"\r\n [lazy]=\"lazy()\"\r\n [cache]=\"cache()\"\r\n [disabled]=\"disabled() || readonly()\"\r\n (contentVisibleChange)=\"!$event && touched.set(true)\"\r\n/>\r\n\r\n<ng-template #defaultDisplayTemplate [ngnTemplate]=\"templateTypes.display\" let-display>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-display'\">\r\n @if (!display.value) {\r\n <span [ptInt]=\"this\" [ptClass]=\"'default-fallback-display'\">{{\r\n i18n['editInplace_placeholder']()\r\n }}</span>\r\n } @else {\r\n <span>{{ display.value }}</span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultEditTemplate [ngnTemplate]=\"templateTypes.edit\" let-edit>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-edit'\">\r\n <ngn-input-field\r\n (focusout)=\"focusOut($event)\"\r\n [label]=\"label()\"\r\n [inputId]=\"inputId()\"\r\n [invalid]=\"invalid()\"\r\n [labelledBy]=\"labelledBy()\"\r\n >\r\n <input\r\n type=\"text\"\r\n ngnInput\r\n ngnAutofocus\r\n [value]=\"edit.value\"\r\n (valueChange)=\"edit.update($event ?? '')\"\r\n (keydown.enter)=\"edit.close()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'default-edit-input'\"\r\n (blur)=\"touched.set(true)\"\r\n />\r\n <button\r\n ngnButton\r\n type=\"button\"\r\n kind=\"icon\"\r\n [inline]=\"true\"\r\n (click)=\"edit.close()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'default-edit-close-button'\"\r\n >\r\n <ngn-icon defaultIcon=\"check\" />\r\n </button>\r\n </ngn-input-field>\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "component", type: NgnInplace, selector: "ngn-inplace", inputs: ["contentVisible", "lazy", "cache", "disabled"], outputs: ["contentVisibleChange"] }, { kind: "directive", type: NgnTemplate, selector: "ng-template[ngnTemplate]", inputs: ["ngnTemplate"] }, { kind: "directive", type: NgnInput, selector: "input[ngnInput], textarea[ngnInput]", inputs: ["invalid", "value"], outputs: ["valueChange"], exportAs: ["ngnInput"] }, { kind: "directive", type: NgnAutofocus, selector: "[ngnAutofocus]", inputs: ["ngnAutofocus"] }, { kind: "directive", type: NgnButton, selector: "button[ngnButton], a[ngnButton]", inputs: ["inline"], exportAs: ["ngnButton"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "component", type: NgnInputField, selector: "ngn-input-field", inputs: ["label", "labelledBy", "labelKind", "inputId", "showClearButton", "iconClearButton", "tabindex", "invalid", "readonly", "disabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
100
100
  }
101
101
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnEditInplace, decorators: [{
102
102
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"ngneers-controls-edit-inplace.mjs","sources":["../../src/edit-inplace/edit-inplace-templates.ts","../../src/edit-inplace/edit-inplace.ts","../../src/edit-inplace/edit-inplace.html","../../src/edit-inplace/ngneers-controls-edit-inplace.ts"],"sourcesContent":["import { computed, contentChild, Directive, input, TemplateRef, viewChild } from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { ValueControlBase } from '@ngneers/controls/base';\r\n\r\nimport type { DisplayTemplateType, EditTemplateType } from './types';\r\n\r\n@Directive()\r\nexport abstract class EditInplaceTemplates extends ValueControlBase<'editInplace', string> {\r\n // Display template\r\n private readonly _defaultDisplayTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.display>>('defaultDisplayTemplate');\r\n private readonly _userDisplayTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.display>>('display');\r\n /**\r\n * Set a custom template for the display.\r\n * Can also be set using an `<ng-template>` element with `#display` template reference variable.\r\n */\r\n public readonly templateDisplay = input<TemplateRef<typeof this.templateTypes.display> | null>(\r\n null\r\n );\r\n protected readonly displayTemplate = computed(\r\n () => this._userDisplayTemplate() ?? this.templateDisplay() ?? this._defaultDisplayTemplate()\r\n );\r\n\r\n // Edit template\r\n private readonly _defaultEditTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.edit>>('defaultEditTemplate');\r\n private readonly _userEditTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.edit>>('edit');\r\n /**\r\n * Set a custom template for the edit view.\r\n * Can also be set using an `<ng-template>` element with `#edit` template reference variable.\r\n */\r\n public readonly templateEdit = input<TemplateRef<typeof this.templateTypes.edit> | null>(null);\r\n protected readonly editTemplate = computed(\r\n () => this._userEditTemplate() ?? this.templateEdit() ?? this._defaultEditTemplate()\r\n );\r\n\r\n /**\r\n * Types for the drawer templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n /**\r\n * Type of the template variable for the display template.\r\n */\r\n display: DisplayTemplateType;\r\n /**\r\n * Type of the template variable for the edit template.\r\n */\r\n edit: EditTemplateType;\r\n }>();\r\n}\r\n","import {\r\n booleanAttribute,\r\n Component,\r\n input,\r\n model,\r\n ChangeDetectionStrategy,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgnTemplate } from '@ngneers/controls/api/ng';\r\nimport { NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { NgnButton } from '@ngneers/controls/button';\r\nimport { NgnAutofocus } from '@ngneers/controls/directives';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { NgnInplace } from '@ngneers/controls/inplace';\r\nimport { NgnInput } from '@ngneers/controls/input';\r\nimport { NgnInputField } from '@ngneers/controls/input-field';\r\nimport { editInplaceControlTemplate } from '@ngneers/controls-themes/templates/edit-inplace';\r\n\r\nimport { EditInplaceTemplates } from './edit-inplace-templates';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-edit-inplace',\r\n templateUrl: './edit-inplace.html',\r\n imports: [\r\n NgnPt,\r\n NgnInplace,\r\n NgnTemplate,\r\n NgnInput,\r\n NgnAutofocus,\r\n NgnButton,\r\n NgnIcon,\r\n NgnInputField,\r\n ],\r\n providers: [provideSelf(NgnEditInplace)],\r\n})\r\nexport class NgnEditInplace extends EditInplaceTemplates {\r\n protected readonly theme = this.injectThemeTemplate(editInplaceControlTemplate, {\r\n root: true,\r\n invalid: this.invalid(),\r\n readonly: this.readonly(),\r\n disabled: this.disabled(),\r\n });\r\n protected readonly i18n = inject(I18n).translations;\r\n\r\n protected readonly closeContent = this.switchToDisplay.bind(this);\r\n\r\n /**\r\n * Controls the visibility of the content.\r\n */\r\n public readonly editVisible = model<boolean>(false);\r\n /**\r\n * Whether the content is loaded lazily.\r\n * @default true\r\n */\r\n public readonly lazy = input(true, { transform: booleanAttribute });\r\n /**\r\n * Whether the content is cached when closed.\r\n * @default false\r\n */\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Switches to the edit view.\r\n */\r\n public switchToEdit() {\r\n this.editVisible.set(true);\r\n }\r\n\r\n /**\r\n * Switches to the display view.\r\n */\r\n public switchToDisplay() {\r\n this.editVisible.set(false);\r\n }\r\n\r\n /**\r\n * Toggles between the display and content views.\r\n */\r\n public toggle() {\r\n this.editVisible.update(v => !v);\r\n }\r\n\r\n protected focusOut(event: FocusEvent) {\r\n if (!this.editVisible()) {\r\n return;\r\n }\r\n if (\r\n event.relatedTarget instanceof HTMLElement &&\r\n this.element.nativeElement.contains(event.relatedTarget as HTMLElement)\r\n ) {\r\n return;\r\n }\r\n this.switchToDisplay();\r\n }\r\n}\r\n","<ngn-inplace\r\n [templateDisplay]=\"displayTemplate()\"\r\n [templateDisplayContext]=\"{ $implicit: { value: value() } }\"\r\n [templateContent]=\"editTemplate()\"\r\n [templateContentContext]=\"{\r\n $implicit: {\r\n value: value(),\r\n update: value.set.bind(value),\r\n close: editVisible.set.bind(editVisible, false),\r\n },\r\n }\"\r\n [contentVisible]=\"editVisible()\"\r\n (contentVisibleChange)=\"editVisible.set($event)\"\r\n [lazy]=\"lazy()\"\r\n [cache]=\"cache()\"\r\n [disabled]=\"disabled() || readonly()\"\r\n (contentVisibleChange)=\"!$event && touched.set(true)\"\r\n/>\r\n\r\n<ng-template #defaultDisplayTemplate [ngnTemplate]=\"templateTypes.display\" let-display>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-display'\">\r\n @if (!display.value) {\r\n <span [ptInt]=\"this\" [ptClass]=\"'default-fallback-display'\">{{\r\n i18n['editInplace_placeholder']()\r\n }}</span>\r\n } @else {\r\n <span>{{ display.value }}</span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultEditTemplate [ngnTemplate]=\"templateTypes.edit\" let-edit>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-edit'\">\r\n <ngn-input-field\r\n (focusout)=\"focusOut($event)\"\r\n [label]=\"label()\"\r\n [inputId]=\"inputId()\"\r\n [invalid]=\"invalid()\"\r\n [labelledBy]=\"labelledBy()\"\r\n >\r\n <input\r\n type=\"text\"\r\n ngnInput\r\n ngnAutofocus\r\n [value]=\"edit.value\"\r\n (valueChange)=\"edit.update($event ?? '')\"\r\n (keydown.enter)=\"edit.close()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'default-edit-input'\"\r\n (blur)=\"touched.set(true)\"\r\n />\r\n <button\r\n ngnButton\r\n type=\"button\"\r\n kind=\"icon\"\r\n [inline]=\"true\"\r\n (click)=\"edit.close()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'default-edit-close-button'\"\r\n >\r\n <ngn-icon defaultIcon=\"check\" />\r\n </button>\r\n </ngn-input-field>\r\n </div>\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngneers-controls-edit-inplace.mjs","sources":["../../src/edit-inplace/edit-inplace-templates.ts","../../src/edit-inplace/edit-inplace.ts","../../src/edit-inplace/edit-inplace.html","../../src/edit-inplace/ngneers-controls-edit-inplace.ts"],"sourcesContent":["import { computed, contentChild, Directive, input, TemplateRef, viewChild } from '@angular/core';\r\nimport { templateTypesFn } from '@ngneers/controls/api/ng';\r\nimport { ValueControlBase } from '@ngneers/controls/base';\r\n\r\nimport type { DisplayTemplateType, EditTemplateType } from './types';\r\n\r\n@Directive()\r\nexport abstract class EditInplaceTemplates extends ValueControlBase<'editInplace', string> {\r\n // Display template\r\n private readonly _defaultDisplayTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.display>>('defaultDisplayTemplate');\r\n private readonly _userDisplayTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.display>>('display');\r\n /**\r\n * Set a custom template for the display.\r\n * Can also be set using an `<ng-template>` element with `#display` template reference variable.\r\n */\r\n public readonly templateDisplay = input<TemplateRef<typeof this.templateTypes.display> | null>(\r\n null\r\n );\r\n protected readonly displayTemplate = computed(\r\n () => this._userDisplayTemplate() ?? this.templateDisplay() ?? this._defaultDisplayTemplate()\r\n );\r\n\r\n // Edit template\r\n private readonly _defaultEditTemplate =\r\n viewChild.required<TemplateRef<typeof this.templateTypes.edit>>('defaultEditTemplate');\r\n private readonly _userEditTemplate =\r\n contentChild<TemplateRef<typeof this.templateTypes.edit>>('edit');\r\n /**\r\n * Set a custom template for the edit view.\r\n * Can also be set using an `<ng-template>` element with `#edit` template reference variable.\r\n */\r\n public readonly templateEdit = input<TemplateRef<typeof this.templateTypes.edit> | null>(null);\r\n protected readonly editTemplate = computed(\r\n () => this._userEditTemplate() ?? this.templateEdit() ?? this._defaultEditTemplate()\r\n );\r\n\r\n /**\r\n * Types for the drawer templates.\r\n */\r\n public readonly templateTypes = templateTypesFn<{\r\n /**\r\n * Type of the template variable for the display template.\r\n */\r\n display: DisplayTemplateType;\r\n /**\r\n * Type of the template variable for the edit template.\r\n */\r\n edit: EditTemplateType;\r\n }>();\r\n}\r\n","import {\r\n booleanAttribute,\r\n Component,\r\n input,\r\n model,\r\n ChangeDetectionStrategy,\r\n inject,\r\n} from '@angular/core';\r\nimport { NgnTemplate } from '@ngneers/controls/api/ng';\r\nimport { NgnPt, provideSelf } from '@ngneers/controls/base';\r\nimport { NgnButton } from '@ngneers/controls/button';\r\nimport { NgnAutofocus } from '@ngneers/controls/directives';\r\nimport { I18n } from '@ngneers/controls/i18n';\r\nimport { NgnIcon } from '@ngneers/controls/icon';\r\nimport { NgnInplace } from '@ngneers/controls/inplace';\r\nimport { NgnInput } from '@ngneers/controls/input';\r\nimport { NgnInputField } from '@ngneers/controls/input-field';\r\nimport { editInplaceControlTemplate } from '@ngneers/controls-themes/templates/edit-inplace';\r\n\r\nimport { EditInplaceTemplates } from './edit-inplace-templates';\r\n\r\n/**\r\n * @category control\r\n */\r\n@Component({\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n selector: 'ngn-edit-inplace',\r\n templateUrl: './edit-inplace.html',\r\n imports: [\r\n NgnPt,\r\n NgnInplace,\r\n NgnTemplate,\r\n NgnInput,\r\n NgnAutofocus,\r\n NgnButton,\r\n NgnIcon,\r\n NgnInputField,\r\n ],\r\n providers: [provideSelf(NgnEditInplace)],\r\n})\r\nexport class NgnEditInplace extends EditInplaceTemplates {\r\n protected readonly theme = this.injectThemeTemplate(editInplaceControlTemplate, {\r\n root: true,\r\n invalid: this.invalid(),\r\n readonly: this.readonly(),\r\n disabled: this.disabled(),\r\n });\r\n protected readonly i18n = inject(I18n).translations;\r\n\r\n protected readonly closeContent = this.switchToDisplay.bind(this);\r\n\r\n /**\r\n * Controls the visibility of the content.\r\n */\r\n public readonly editVisible = model<boolean>(false);\r\n /**\r\n * Whether the content is loaded lazily.\r\n * @default true\r\n */\r\n public readonly lazy = input(true, { transform: booleanAttribute });\r\n /**\r\n * Whether the content is cached when closed.\r\n * @default false\r\n */\r\n public readonly cache = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Switches to the edit view.\r\n */\r\n public switchToEdit() {\r\n this.editVisible.set(true);\r\n }\r\n\r\n /**\r\n * Switches to the display view.\r\n */\r\n public switchToDisplay() {\r\n this.editVisible.set(false);\r\n }\r\n\r\n /**\r\n * Toggles between the display and content views.\r\n */\r\n public toggle() {\r\n this.editVisible.update(v => !v);\r\n }\r\n\r\n protected focusOut(event: FocusEvent) {\r\n if (!this.editVisible()) {\r\n return;\r\n }\r\n if (\r\n event.relatedTarget instanceof HTMLElement &&\r\n this.element.nativeElement.contains(event.relatedTarget as HTMLElement)\r\n ) {\r\n return;\r\n }\r\n this.switchToDisplay();\r\n }\r\n}\r\n","<ngn-inplace\r\n [templateDisplay]=\"displayTemplate()\"\r\n [templateDisplayContext]=\"{ $implicit: { value: value() } }\"\r\n [templateContent]=\"editTemplate()\"\r\n [templateContentContext]=\"{\r\n $implicit: {\r\n value: value(),\r\n update: value.set.bind(value),\r\n close: editVisible.set.bind(editVisible, false),\r\n },\r\n }\"\r\n [contentVisible]=\"editVisible()\"\r\n (contentVisibleChange)=\"editVisible.set($event)\"\r\n [lazy]=\"lazy()\"\r\n [cache]=\"cache()\"\r\n [disabled]=\"disabled() || readonly()\"\r\n (contentVisibleChange)=\"!$event && touched.set(true)\"\r\n/>\r\n\r\n<ng-template #defaultDisplayTemplate [ngnTemplate]=\"templateTypes.display\" let-display>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-display'\">\r\n @if (!display.value) {\r\n <span [ptInt]=\"this\" [ptClass]=\"'default-fallback-display'\">{{\r\n i18n['editInplace_placeholder']()\r\n }}</span>\r\n } @else {\r\n <span>{{ display.value }}</span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultEditTemplate [ngnTemplate]=\"templateTypes.edit\" let-edit>\r\n <div [ptInt]=\"this\" [ptClass]=\"'default-edit'\">\r\n <ngn-input-field\r\n (focusout)=\"focusOut($event)\"\r\n [label]=\"label()\"\r\n [inputId]=\"inputId()\"\r\n [invalid]=\"invalid()\"\r\n [labelledBy]=\"labelledBy()\"\r\n >\r\n <input\r\n type=\"text\"\r\n ngnInput\r\n ngnAutofocus\r\n [value]=\"edit.value\"\r\n (valueChange)=\"edit.update($event ?? '')\"\r\n (keydown.enter)=\"edit.close()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'default-edit-input'\"\r\n (blur)=\"touched.set(true)\"\r\n />\r\n <button\r\n ngnButton\r\n type=\"button\"\r\n kind=\"icon\"\r\n [inline]=\"true\"\r\n (click)=\"edit.close()\"\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'default-edit-close-button'\"\r\n >\r\n <ngn-icon defaultIcon=\"check\" />\r\n </button>\r\n </ngn-input-field>\r\n </div>\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -490,7 +490,7 @@ class NgnFilter extends ValueControlBase {
490
490
  }
491
491
  }
492
492
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnFilter, deps: [], target: i0.ɵɵFactoryTarget.Component });
493
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: NgnFilter, isStandalone: true, selector: "ngn-filter", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, dataType: { classPropertyName: "dataType", publicName: "dataType", isSignal: true, isRequired: false, transformFunction: null }, allowMultiple: { classPropertyName: "allowMultiple", publicName: "allowMultiple", isSignal: true, isRequired: false, transformFunction: null }, listOptions: { classPropertyName: "listOptions", publicName: "listOptions", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, anchor: { classPropertyName: "anchor", publicName: "anchor", isSignal: true, isRequired: false, transformFunction: null }, filterLocally: { classPropertyName: "filterLocally", publicName: "filterLocally", isSignal: true, isRequired: false, transformFunction: null }, popoverOptions: { classPropertyName: "popoverOptions", publicName: "popoverOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filterChange: "filterChange", filterResultChange: "filterResultChange" }, host: { styleAttribute: "display: block;" }, providers: [provideSelf(NgnFilter)], viewQueries: [{ propertyName: "_popover", first: true, predicate: NgnPopover, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #rowsTemplate>\r\n <div [ptInt]=\"this\" [ptClass]=\"'rows'\">\r\n @if (dataType() === 'list') {\r\n <div [ptInt]=\"this\" [ptClass]=\"'row'\" data-testid=\"filter-row-list\">\r\n <ngn-select\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'value'\"\r\n [multiple]=\"true\"\r\n [options]=\"resolvedListOptions()\"\r\n [value]=\"$any(templateListSelection())\"\r\n (valueChange)=\"setListSelection($event)\"\r\n />\r\n </div>\r\n } @else {\r\n @for (c of templateConfig().conditions; track $index; let i = $index) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'row'\" [attr.data-testid]=\"'filter-row-' + i\">\r\n <ngn-select\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'operator'\"\r\n [options]=\"operatorOptions()\"\r\n [value]=\"c.operator\"\r\n (valueChange)=\"setOperator(i, $event)\"\r\n />\r\n @if (operatorRequiresValue(c.operator)) {\r\n <ngn-input-field [ptInt]=\"this\" [ptClass]=\"'value'\">\r\n <input\r\n ngnInput\r\n [type]=\"inputType()\"\r\n [value]=\"c.rawValue || ''\"\r\n (valueChange)=\"setRawValue(i, $event)\"\r\n />\r\n </ngn-input-field>\r\n }\r\n\r\n @if (allowMultiple() && templateConfig().conditions.length > 1) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'row-actions'\">\r\n <button\r\n type=\"button\"\r\n ngnButton\r\n [kind]=\"'text'\"\r\n [color]=\"'error'\"\r\n (click)=\"removeCondition(i)\"\r\n >\r\n {{ i18n['filter_removeCondition']() + ' ' + (i + 1) }}\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #matchModeTemplate>\r\n @if (dataType() !== 'list' && allowMultiple()) {\r\n <ngn-select\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'match'\"\r\n [options]=\"matchModeOptions\"\r\n [value]=\"templateConfig().matchMode\"\r\n (valueChange)=\"setMatchMode($event)\"\r\n data-testid=\"filter-match-mode\"\r\n />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #footerTemplate>\r\n <div [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n @if (dataType() !== 'list' && allowMultiple()) {\r\n <button\r\n type=\"button\"\r\n ngnButton\r\n kind=\"secondary\"\r\n (click)=\"addCondition()\"\r\n data-testid=\"filter-add-rule\"\r\n >\r\n <span aria-hidden=\"true\">+</span>\r\n {{ i18n['filter_addCondition']() }}\r\n </button>\r\n }\r\n <button type=\"button\" ngnButton kind=\"secondary\" (click)=\"clear()\" data-testid=\"filter-clear\">\r\n {{ i18n['filter_clear']() }}\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #popoverTemplate let-anchor=\"anchor\">\r\n <ngn-popover\r\n #popover\r\n [options]=\"appliedPopoverOptions()\"\r\n [anchor]=\"anchor\"\r\n [hasShrinkableContent]=\"true\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [id]=\"inputId() + '_popover'\"\r\n >\r\n <ng-template #lazy>\r\n <div [ptInt]=\"this\" [ptClass]=\"'popover-content'\">\r\n <ng-container [ngTemplateOutlet]=\"matchModeTemplate\" />\r\n <ng-container [ngTemplateOutlet]=\"rowsTemplate\" />\r\n <ng-container [ngTemplateOutlet]=\"footerTemplate\" />\r\n </div>\r\n </ng-template>\r\n </ngn-popover>\r\n</ng-template>\r\n\r\n@if (mode() === 'inline') {\r\n <div [ptInt]=\"this\" [ptClass]=\"'inline'\">\r\n <ng-container [ngTemplateOutlet]=\"matchModeTemplate\" />\r\n <ng-container [ngTemplateOutlet]=\"rowsTemplate\" />\r\n <ng-container [ngTemplateOutlet]=\"footerTemplate\" />\r\n </div>\r\n} @else if (mode() === 'input') {\r\n <ngn-input-field\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input-field'\"\r\n (click)=\"show()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n #field\r\n [label]=\"label()\"\r\n [inputId]=\"inputId()\"\r\n [invalid]=\"invalid()\"\r\n >\r\n <div role=\"button\" [ptInt]=\"this\" [ptClass]=\"'summary'\">{{ summaryText() }}</div>\r\n <ngn-icon [ptInt]=\"this\" [ptClass]=\"'icon'\" defaultIcon=\"magnifying_glass\" />\r\n </ngn-input-field>\r\n\r\n <ng-container\r\n [ngTemplateOutlet]=\"popoverTemplate\"\r\n [ngTemplateOutletContext]=\"{ anchor: field.element.nativeElement }\"\r\n />\r\n} @else {\r\n @if (anchor()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"popoverTemplate\"\r\n [ngTemplateOutletContext]=\"{ anchor: anchor() }\"\r\n />\r\n }\r\n}\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NgnInputField, selector: "ngn-input-field", inputs: ["label", "labelledBy", "labelKind", "inputId", "showClearButton", "iconClearButton", "tabindex", "invalid", "readonly", "disabled"] }, { kind: "directive", type: NgnInput, selector: "input[ngnInput], textarea[ngnInput]", inputs: ["invalid", "value"], outputs: ["valueChange"] }, { kind: "component", type: NgnSelect, selector: "ngn-select", inputs: ["popoverOptions", "options", "filter", "filterText", "filterIcon", "dropdownIcon", "virtual", "itemHeight", "editable", "editableAutoFilter", "multiple", "scrollToSelectedItemOnOpen", "tabindex", "checkbox"] }, { kind: "component", type: NgnPopover, selector: "ngn-popover", inputs: ["open", "anchor", "options", "hasShrinkableContent", "closeBy"], outputs: ["closed", "closing", "openChange"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "directive", type: NgnButton, selector: "button[ngnButton], a[ngnButton]", inputs: ["inline"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
493
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: NgnFilter, isStandalone: true, selector: "ngn-filter", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, dataType: { classPropertyName: "dataType", publicName: "dataType", isSignal: true, isRequired: false, transformFunction: null }, allowMultiple: { classPropertyName: "allowMultiple", publicName: "allowMultiple", isSignal: true, isRequired: false, transformFunction: null }, listOptions: { classPropertyName: "listOptions", publicName: "listOptions", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, anchor: { classPropertyName: "anchor", publicName: "anchor", isSignal: true, isRequired: false, transformFunction: null }, filterLocally: { classPropertyName: "filterLocally", publicName: "filterLocally", isSignal: true, isRequired: false, transformFunction: null }, popoverOptions: { classPropertyName: "popoverOptions", publicName: "popoverOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filterChange: "filterChange", filterResultChange: "filterResultChange" }, host: { styleAttribute: "display: block;" }, providers: [provideSelf(NgnFilter)], viewQueries: [{ propertyName: "_popover", first: true, predicate: NgnPopover, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #rowsTemplate>\r\n <div [ptInt]=\"this\" [ptClass]=\"'rows'\">\r\n @if (dataType() === 'list') {\r\n <div [ptInt]=\"this\" [ptClass]=\"'row'\" data-testid=\"filter-row-list\">\r\n <ngn-select\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'value'\"\r\n [multiple]=\"true\"\r\n [options]=\"resolvedListOptions()\"\r\n [value]=\"$any(templateListSelection())\"\r\n (valueChange)=\"setListSelection($event)\"\r\n />\r\n </div>\r\n } @else {\r\n @for (c of templateConfig().conditions; track $index; let i = $index) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'row'\" [attr.data-testid]=\"'filter-row-' + i\">\r\n <ngn-select\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'operator'\"\r\n [options]=\"operatorOptions()\"\r\n [value]=\"c.operator\"\r\n (valueChange)=\"setOperator(i, $event)\"\r\n />\r\n @if (operatorRequiresValue(c.operator)) {\r\n <ngn-input-field [ptInt]=\"this\" [ptClass]=\"'value'\">\r\n <input\r\n ngnInput\r\n [type]=\"inputType()\"\r\n [value]=\"c.rawValue || ''\"\r\n (valueChange)=\"setRawValue(i, $event)\"\r\n />\r\n </ngn-input-field>\r\n }\r\n\r\n @if (allowMultiple() && templateConfig().conditions.length > 1) {\r\n <div [ptInt]=\"this\" [ptClass]=\"'row-actions'\">\r\n <button\r\n type=\"button\"\r\n ngnButton\r\n [kind]=\"'text'\"\r\n [color]=\"'error'\"\r\n (click)=\"removeCondition(i)\"\r\n >\r\n {{ i18n['filter_removeCondition']() + ' ' + (i + 1) }}\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #matchModeTemplate>\r\n @if (dataType() !== 'list' && allowMultiple()) {\r\n <ngn-select\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'match'\"\r\n [options]=\"matchModeOptions\"\r\n [value]=\"templateConfig().matchMode\"\r\n (valueChange)=\"setMatchMode($event)\"\r\n data-testid=\"filter-match-mode\"\r\n />\r\n }\r\n</ng-template>\r\n\r\n<ng-template #footerTemplate>\r\n <div [ptInt]=\"this\" [ptClass]=\"'footer'\">\r\n @if (dataType() !== 'list' && allowMultiple()) {\r\n <button\r\n type=\"button\"\r\n ngnButton\r\n kind=\"secondary\"\r\n (click)=\"addCondition()\"\r\n data-testid=\"filter-add-rule\"\r\n >\r\n <span aria-hidden=\"true\">+</span>\r\n {{ i18n['filter_addCondition']() }}\r\n </button>\r\n }\r\n <button type=\"button\" ngnButton kind=\"secondary\" (click)=\"clear()\" data-testid=\"filter-clear\">\r\n {{ i18n['filter_clear']() }}\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #popoverTemplate let-anchor=\"anchor\">\r\n <ngn-popover\r\n #popover\r\n [options]=\"appliedPopoverOptions()\"\r\n [anchor]=\"anchor\"\r\n [hasShrinkableContent]=\"true\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [id]=\"inputId() + '_popover'\"\r\n >\r\n <ng-template #lazy>\r\n <div [ptInt]=\"this\" [ptClass]=\"'popover-content'\">\r\n <ng-container [ngTemplateOutlet]=\"matchModeTemplate\" />\r\n <ng-container [ngTemplateOutlet]=\"rowsTemplate\" />\r\n <ng-container [ngTemplateOutlet]=\"footerTemplate\" />\r\n </div>\r\n </ng-template>\r\n </ngn-popover>\r\n</ng-template>\r\n\r\n@if (mode() === 'inline') {\r\n <div [ptInt]=\"this\" [ptClass]=\"'inline'\">\r\n <ng-container [ngTemplateOutlet]=\"matchModeTemplate\" />\r\n <ng-container [ngTemplateOutlet]=\"rowsTemplate\" />\r\n <ng-container [ngTemplateOutlet]=\"footerTemplate\" />\r\n </div>\r\n} @else if (mode() === 'input') {\r\n <ngn-input-field\r\n [ptInt]=\"this\"\r\n [ptClass]=\"'input-field'\"\r\n (click)=\"show()\"\r\n (keydown)=\"onKeyDown($event)\"\r\n #field\r\n [label]=\"label()\"\r\n [inputId]=\"inputId()\"\r\n [invalid]=\"invalid()\"\r\n >\r\n <div role=\"button\" [ptInt]=\"this\" [ptClass]=\"'summary'\">{{ summaryText() }}</div>\r\n <ngn-icon [ptInt]=\"this\" [ptClass]=\"'icon'\" defaultIcon=\"magnifying_glass\" />\r\n </ngn-input-field>\r\n\r\n <ng-container\r\n [ngTemplateOutlet]=\"popoverTemplate\"\r\n [ngTemplateOutletContext]=\"{ anchor: field.element.nativeElement }\"\r\n />\r\n} @else {\r\n @if (anchor()) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"popoverTemplate\"\r\n [ngTemplateOutletContext]=\"{ anchor: anchor() }\"\r\n />\r\n }\r\n}\r\n", dependencies: [{ kind: "directive", type: NgnPt, selector: "[ptInt]", inputs: ["ptInt", "ptClass"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NgnInputField, selector: "ngn-input-field", inputs: ["label", "labelledBy", "labelKind", "inputId", "showClearButton", "iconClearButton", "tabindex", "invalid", "readonly", "disabled"] }, { kind: "directive", type: NgnInput, selector: "input[ngnInput], textarea[ngnInput]", inputs: ["invalid", "value"], outputs: ["valueChange"], exportAs: ["ngnInput"] }, { kind: "component", type: NgnSelect, selector: "ngn-select", inputs: ["popoverOptions", "options", "filter", "filterText", "filterIcon", "dropdownIcon", "virtual", "itemHeight", "editable", "editableAutoFilter", "multiple", "scrollToSelectedItemOnOpen", "tabindex", "checkbox"] }, { kind: "component", type: NgnPopover, selector: "ngn-popover", inputs: ["open", "anchor", "options", "hasShrinkableContent", "closeBy"], outputs: ["closed", "closing", "openChange"] }, { kind: "component", type: NgnIcon, selector: "ngn-icon", inputs: ["defaultIcon", "icon"] }, { kind: "directive", type: NgnButton, selector: "button[ngnButton], a[ngnButton]", inputs: ["inline"], exportAs: ["ngnButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
494
494
  }
495
495
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgnFilter, decorators: [{
496
496
  type: Component,