@nexterajs/ui 0.0.2 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +279 -34
- package/fesm2022/nexterajs-ui-charts.mjs +1096 -0
- package/fesm2022/nexterajs-ui-charts.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-core.mjs +652 -12
- package/fesm2022/nexterajs-ui-core.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-display.mjs +1142 -0
- package/fesm2022/nexterajs-ui-display.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-dropdowns.mjs +321 -33
- package/fesm2022/nexterajs-ui-dropdowns.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-file-uploader.mjs +572 -10
- package/fesm2022/nexterajs-ui-file-uploader.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-forms.mjs +2027 -136
- package/fesm2022/nexterajs-ui-forms.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-grid.mjs +1222 -188
- package/fesm2022/nexterajs-ui-grid.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-intl.mjs +103 -11
- package/fesm2022/nexterajs-ui-intl.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-navigation.mjs +1054 -0
- package/fesm2022/nexterajs-ui-navigation.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-notify.mjs +46 -44
- package/fesm2022/nexterajs-ui-notify.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-overlay.mjs +1671 -0
- package/fesm2022/nexterajs-ui-overlay.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-pivot.mjs +51 -26
- package/fesm2022/nexterajs-ui-pivot.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-shell.mjs +542 -0
- package/fesm2022/nexterajs-ui-shell.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-tree-view.mjs +5 -2
- package/fesm2022/nexterajs-ui-tree-view.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-validation.mjs +42 -11
- package/fesm2022/nexterajs-ui-validation.mjs.map +1 -1
- package/fesm2022/nexterajs-ui.mjs +5 -0
- package/fesm2022/nexterajs-ui.mjs.map +1 -1
- package/package.json +33 -2
- package/styles/_dropdown.scss +5 -5
- package/styles/_editor.scss +52 -17
- package/styles/_mixins.scss +1 -1
- package/styles/_scrollbar.scss +5 -5
- package/styles/_status.scss +21 -0
- package/styles/_toast.scss +14 -14
- package/styles/_tokens.scss +420 -3
- package/styles/_widget.scss +14 -3
- package/styles/index.scss +6 -4
- package/types/nexterajs-ui-charts.d.ts +446 -0
- package/types/nexterajs-ui-core.d.ts +387 -22
- package/types/nexterajs-ui-display.d.ts +720 -0
- package/types/nexterajs-ui-dropdowns.d.ts +191 -48
- package/types/nexterajs-ui-file-uploader.d.ts +236 -7
- package/types/nexterajs-ui-forms.d.ts +675 -30
- package/types/nexterajs-ui-grid.d.ts +448 -93
- package/types/nexterajs-ui-intl.d.ts +39 -4
- package/types/nexterajs-ui-navigation.d.ts +531 -0
- package/types/nexterajs-ui-notify.d.ts +4 -2
- package/types/nexterajs-ui-overlay.d.ts +703 -0
- package/types/nexterajs-ui-pivot.d.ts +56 -48
- package/types/nexterajs-ui-shell.d.ts +294 -0
- package/types/nexterajs-ui-tree-view.d.ts +6 -3
- package/types/nexterajs-ui-validation.d.ts +20 -11
- package/types/nexterajs-ui.d.ts +5 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nexterajs-ui-overlay.mjs","sources":["../../../projects/nextera-ui/overlay/src/lib/dialog/nxe-dialog.types.ts","../../../projects/nextera-ui/overlay/src/lib/dialog/nxe-dialog-ref.ts","../../../projects/nextera-ui/overlay/src/lib/dialog/nxe-dialog-actions.directive.ts","../../../projects/nextera-ui/overlay/src/lib/dialog/nxe-dialog-title.directive.ts","../../../projects/nextera-ui/overlay/src/lib/dialog/nxe-dialog-frame.component.ts","../../../projects/nextera-ui/overlay/src/lib/dialog/nxe-dialog-frame.component.html","../../../projects/nextera-ui/overlay/src/lib/dialog/nxe-dialog.service.ts","../../../projects/nextera-ui/overlay/src/lib/dialog/nxe-dialog-content.directive.ts","../../../projects/nextera-ui/overlay/src/lib/dialog/nxe-confirm-content.component.ts","../../../projects/nextera-ui/overlay/src/lib/dialog/nxe-confirm-content.component.html","../../../projects/nextera-ui/overlay/src/lib/dialog/nxe-confirm.service.ts","../../../projects/nextera-ui/overlay/src/lib/menu/nxe-menu-trigger-for.directive.ts","../../../projects/nextera-ui/overlay/src/lib/menu/nxe-menu-item.component.ts","../../../projects/nextera-ui/overlay/src/lib/menu/nxe-menu-item.component.html","../../../projects/nextera-ui/overlay/src/lib/menu/nxe-menu.component.ts","../../../projects/nextera-ui/overlay/src/lib/menu/nxe-menu.component.html","../../../projects/nextera-ui/overlay/src/lib/menu/nxe-menu-divider.component.ts","../../../projects/nextera-ui/overlay/src/lib/nxe-tabbable.ts","../../../projects/nextera-ui/overlay/src/lib/popover/nxe-popover.component.ts","../../../projects/nextera-ui/overlay/src/lib/popover/nxe-popover.component.html","../../../projects/nextera-ui/overlay/src/lib/nxe-placement.ts","../../../projects/nextera-ui/overlay/src/lib/popover/nxe-popover-trigger-for.directive.ts","../../../projects/nextera-ui/overlay/src/lib/tooltip/nxe-tooltip-panel.component.ts","../../../projects/nextera-ui/overlay/src/lib/tooltip/nxe-tooltip.directive.ts","../../../projects/nextera-ui/overlay/src/lib/drawer/nxe-drawer.types.ts","../../../projects/nextera-ui/overlay/src/lib/drawer/nxe-drawer-ref.ts","../../../projects/nextera-ui/overlay/src/lib/drawer/nxe-drawer-frame.component.ts","../../../projects/nextera-ui/overlay/src/lib/drawer/nxe-drawer.service.ts","../../../projects/nextera-ui/overlay/src/lib/drawer/nxe-drawer.component.ts","../../../projects/nextera-ui/overlay/src/lib/drawer/nxe-drawer.component.html","../../../projects/nextera-ui/overlay/src/public-api.ts","../../../projects/nextera-ui/overlay/src/nexterajs-ui-overlay.ts"],"sourcesContent":["import { ComponentType } from '@angular/cdk/portal';\r\nimport { Injector, InjectionToken, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { NxeButtonStylingMode, NxeButtonType } from '@nexterajs/ui/forms';\r\nimport { NxeDialogRef } from './nxe-dialog-ref';\r\n\r\n/** Dialog width. `sm` 400px, `md` 640px, `lg` 960px, `xl` 1200px, `fullscreen` fills the viewport. */\r\nexport type NxeDialogSize = 'sm' | 'md' | 'lg' | 'xl' | 'fullscreen';\r\n\r\n/** ARIA role of the dialog. `alertdialog` is for a message that needs a response (confirm). */\r\nexport type NxeDialogRole = 'dialog' | 'alertdialog';\r\n\r\n/** The data a dialog was opened with, injected into the content component. */\r\nexport const NXE_DIALOG_DATA = new InjectionToken<unknown>('NXE_DIALOG_DATA');\r\n\r\n/** A button in the dialog's actions bar, declared in the config rather than in the content. */\r\nexport interface NxeDialogAction<R = unknown> {\r\n /** Button label. */\r\n text: string;\r\n /** Closes the dialog with this value when the button is pressed. */\r\n result?: R;\r\n /** `nxe-button` type. `danger` for the destructive choice. Default `normal`. */\r\n type?: NxeButtonType;\r\n stylingMode?: NxeButtonStylingMode;\r\n disabled?: boolean;\r\n /** Receives initial focus when the dialog opens. */\r\n autofocus?: boolean;\r\n /** Runs before closing. Return `false` to keep the dialog open (for example a failed save). */\r\n onClick?: (ref: NxeDialogRef<R>) => void | boolean;\r\n}\r\n\r\nexport interface NxeDialogConfig<D = unknown, R = unknown> {\r\n /** Heading, rendered as the dialog's accessible name. Omit it if the content declares `nxe-dialog-title`. */\r\n title?: string;\r\n /** Default `md`. */\r\n size?: NxeDialogSize;\r\n /** Injected into the content as {@link NXE_DIALOG_DATA}. */\r\n data?: D;\r\n /** Buttons for the actions bar. The content can declare `nxe-dialog-actions` itself instead. */\r\n actions?: readonly NxeDialogAction<R>[];\r\n /** Blocks Esc and backdrop dismissal. Change it later through {@link NxeDialogRef.disableClose} (for example while dirty). */\r\n disableClose?: boolean;\r\n /** Whether a click on the backdrop dismisses the dialog. Default `true`; only applies while `disableClose` is off. */\r\n backdropClose?: boolean;\r\n /** Accessible name when there is no visible title. Replaces `aria-labelledby`. */\r\n ariaLabel?: string;\r\n /** Id of the element that describes the dialog. */\r\n ariaDescribedBy?: string;\r\n /** Default `dialog`. */\r\n role?: NxeDialogRole;\r\n /** Show the corner close button. Default `true`. */\r\n showClose?: boolean;\r\n /** What takes initial focus: `first-tabbable` (default), `first-heading`, `dialog` or a CSS selector. `[cdkFocusInitial]` always wins. */\r\n autoFocus?: 'first-tabbable' | 'first-heading' | 'dialog' | string;\r\n /** Extra class(es) for the overlay pane. */\r\n panelClass?: string | string[];\r\n /** Where dependency lookups of the content start. Default: the root injector. */\r\n injector?: Injector;\r\n viewContainerRef?: ViewContainerRef;\r\n}\r\n\r\n/** What `NxeDialogService.open` accepts as content. A template receives `{ $implicit: data, dialogRef }`. */\r\nexport type NxeDialogContent<T> = ComponentType<T> | TemplateRef<T>;\r\n","import { signal } from '@angular/core';\r\nimport { DialogRef } from '@angular/cdk/dialog';\r\nimport { Observable, ReplaySubject } from 'rxjs';\r\n\r\n/**\r\n * Handle on an open dialog. Injectable in the content component (`inject(NxeDialogRef)`), and\r\n * returned by `NxeDialogService.open`.\r\n */\r\nexport class NxeDialogRef<R = unknown, C = unknown> {\r\n private cdkRef: DialogRef<R, unknown> | null = null;\r\n private outlet: (() => C | null) | null = null;\r\n private pendingClose: { result: R | undefined } | null = null;\r\n private titleClaimed = false;\r\n private readonly closedSubject = new ReplaySubject<R | undefined>(1);\r\n private readonly resultSignal = signal<R | undefined>(undefined);\r\n private readonly closedSignal = signal(false);\r\n private dismissable = true;\r\n\r\n /** The result the dialog closed with; `undefined` until it closes (and if it closed without one). */\r\n readonly result = this.resultSignal.asReadonly();\r\n /** `true` once the dialog has closed. */\r\n readonly isClosed = this.closedSignal.asReadonly();\r\n\r\n constructor(\r\n /** Unique id; the dialog's DOM id. */\r\n readonly id: string,\r\n /** Id the dialog's title element takes, and the dialog's `aria-labelledby`. */\r\n readonly titleId: string,\r\n ) {}\r\n\r\n /** Whether Esc and the backdrop may dismiss the dialog. Set `true` while the form is dirty. Explicit `close()` still works. */\r\n get disableClose(): boolean {\r\n return !this.dismissable;\r\n }\r\n set disableClose(value: boolean) {\r\n this.dismissable = !value;\r\n }\r\n\r\n /** The content component instance; `null` for a template, or before it is created. */\r\n get componentInstance(): C | null {\r\n return this.outlet?.() ?? null;\r\n }\r\n\r\n /** Close with a result. Safe to call more than once. */\r\n close(result?: R): void {\r\n if (this.closedSignal()) {\r\n return;\r\n }\r\n if (!this.cdkRef) {\r\n this.pendingClose = { result };\r\n return;\r\n }\r\n this.cdkRef.close(result);\r\n }\r\n\r\n /** Emits the result once, when the dialog closes, then completes. Late subscribers still get it. */\r\n afterClosed(): Observable<R | undefined> {\r\n return this.closedSubject.asObservable();\r\n }\r\n\r\n /** The same as {@link afterClosed}, as a promise. */\r\n whenClosed(): Promise<R | undefined> {\r\n return new Promise((resolve) => this.closedSubject.subscribe({ next: resolve, complete: () => resolve(undefined) }));\r\n }\r\n\r\n /** @internal Claimed by the first `nxe-dialog-title` in the dialog, which then carries {@link titleId}. */\r\n _claimTitle(): string | null {\r\n if (this.titleClaimed) {\r\n return null;\r\n }\r\n this.titleClaimed = true;\r\n return this.titleId;\r\n }\r\n\r\n /** @internal */\r\n _attach(cdkRef: DialogRef<R, unknown>): void {\r\n this.cdkRef = cdkRef;\r\n cdkRef.closed.subscribe((result) => {\r\n this.resultSignal.set(result);\r\n this.closedSignal.set(true);\r\n this.closedSubject.next(result);\r\n this.closedSubject.complete();\r\n });\r\n if (this.pendingClose) {\r\n const { result } = this.pendingClose;\r\n this.pendingClose = null;\r\n cdkRef.close(result);\r\n }\r\n }\r\n\r\n /** @internal */\r\n _setOutlet(outlet: () => C | null): void {\r\n this.outlet = outlet;\r\n }\r\n}\r\n","import { Directive, input } from '@angular/core';\r\n\r\n/**\r\n * The dialog's button row, pinned to the bottom of the dialog. `align` is where the buttons sit\r\n * (`end` by default, the primary action last).\r\n *\r\n * ```html\r\n * <div nxe-dialog-actions>\r\n * <nxe-button text=\"Batal\" (onClick)=\"ref.close()\" />\r\n * <nxe-button type=\"default\" text=\"Simpan\" (onClick)=\"save()\" />\r\n * </div>\r\n * ```\r\n */\r\n@Directive({\r\n selector: '[nxe-dialog-actions], [nxeDialogActions]',\r\n host: {\r\n class: 'nxe-dialog-actions',\r\n '[class.nxe-dialog-actions-start]': \"align() === 'start'\",\r\n '[class.nxe-dialog-actions-between]': \"align() === 'between'\",\r\n },\r\n})\r\nexport class NxeDialogActionsDirective {\r\n readonly align = input<'start' | 'end' | 'between'>('end');\r\n}\r\n","import { Directive, inject } from '@angular/core';\r\nimport { NxeDialogRef } from './nxe-dialog-ref';\r\n\r\n/**\r\n * Marks the dialog's heading. It takes the dialog's title id, so the dialog is named by it\r\n * (`aria-labelledby`). Use it in content that declares its own chrome instead of passing `title`.\r\n *\r\n * ```html\r\n * <h2 nxe-dialog-title>Tolak faktur</h2>\r\n * ```\r\n *\r\n * A dialog has one title: the first one claims the id. Outside a dialog it only adds the class.\r\n */\r\n@Directive({\r\n selector: '[nxe-dialog-title], [nxeDialogTitle]',\r\n host: {\r\n class: 'nxe-dialog-title',\r\n '[attr.id]': 'id',\r\n },\r\n})\r\nexport class NxeDialogTitleDirective {\r\n protected readonly id = inject(NxeDialogRef, { optional: true })?._claimTitle() ?? null;\r\n}\r\n","import { DIALOG_DATA } from '@angular/cdk/dialog';\r\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Injector,\r\n Provider,\r\n TemplateRef,\r\n ViewEncapsulation,\r\n inject,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NxeMessageService } from '@nexterajs/ui/core';\r\nimport { NxeButtonComponent } from '@nexterajs/ui/forms';\r\nimport { NxeDialogActionsDirective } from './nxe-dialog-actions.directive';\r\nimport { NxeDialogRef } from './nxe-dialog-ref';\r\nimport { NxeDialogTitleDirective } from './nxe-dialog-title.directive';\r\nimport { NXE_DIALOG_DATA, NxeDialogAction, NxeDialogContent } from './nxe-dialog.types';\r\n\r\n/** What the service hands the frame through the CDK `DIALOG_DATA` token. @internal */\r\nexport interface NxeDialogFrameData {\r\n ref: NxeDialogRef<unknown, unknown>;\r\n content: NxeDialogContent<unknown>;\r\n data: unknown;\r\n title: string | undefined;\r\n actions: readonly NxeDialogAction<unknown>[];\r\n showClose: boolean;\r\n injector: Injector | undefined;\r\n /** More providers for the content's injector, such as the drawer's own ref and data tokens. */\r\n providers?: readonly Provider[];\r\n}\r\n\r\n/**\r\n * The inside of every dialog: optional title, the scrolling body that hosts the content, optional\r\n * actions bar and the corner close button. @internal\r\n */\r\n@Component({\r\n selector: 'nxe-dialog-frame',\r\n imports: [NgComponentOutlet, NgTemplateOutlet, NxeButtonComponent, NxeDialogTitleDirective, NxeDialogActionsDirective],\r\n templateUrl: './nxe-dialog-frame.component.html',\r\n styleUrl: './nxe-dialog-frame.component.scss',\r\n host: { class: 'nxe-dialog-frame nxe-widget' },\r\n // The frame's own title directive reads the ref from here; the content gets it through contentInjector.\r\n providers: [{ provide: NxeDialogRef, useFactory: () => inject<NxeDialogFrameData>(DIALOG_DATA).ref }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeDialogFrameComponent {\r\n protected readonly frame = inject<NxeDialogFrameData>(DIALOG_DATA);\r\n protected readonly messages = inject(NxeMessageService);\r\n private readonly outlet = viewChild(NgComponentOutlet);\r\n\r\n /** Both kinds of content look up the ref and the data here. */\r\n protected readonly contentInjector = Injector.create({\r\n providers: [\r\n { provide: NxeDialogRef, useValue: this.frame.ref },\r\n { provide: NXE_DIALOG_DATA, useValue: this.frame.data },\r\n ...(this.frame.providers ?? []),\r\n ],\r\n parent: this.frame.injector ?? inject(Injector),\r\n });\r\n\r\n protected readonly template: TemplateRef<unknown> | null =\r\n this.frame.content instanceof TemplateRef ? this.frame.content : null;\r\n protected readonly component = this.template ? null : (this.frame.content as new () => unknown);\r\n protected readonly templateContext = { $implicit: this.frame.data, dialogRef: this.frame.ref };\r\n\r\n constructor() {\r\n this.frame.ref._setOutlet(() => (this.outlet()?.componentInstance as unknown) ?? null);\r\n }\r\n\r\n protected run(action: NxeDialogAction<unknown>): void {\r\n if (action.disabled) {\r\n return;\r\n }\r\n if (action.onClick?.(this.frame.ref) === false) {\r\n return;\r\n }\r\n this.frame.ref.close(action.result);\r\n }\r\n}\r\n","@if (frame.title) {\r\n <header class=\"nxe-dialog-header\">\r\n <h2 nxe-dialog-title>{{ frame.title }}</h2>\r\n </header>\r\n}\r\n<div class=\"nxe-dialog-body\">\r\n @if (template) {\r\n <ng-container *ngTemplateOutlet=\"template; context: templateContext; injector: contentInjector\" />\r\n } @else {\r\n <ng-container *ngComponentOutlet=\"component; injector: contentInjector\" />\r\n }\r\n</div>\r\n@if (frame.actions.length) {\r\n <div nxe-dialog-actions>\r\n @for (action of frame.actions; track $index) {\r\n <nxe-button\r\n [text]=\"action.text\"\r\n [type]=\"action.type ?? 'normal'\"\r\n [stylingMode]=\"action.stylingMode ?? 'contained'\"\r\n [disabled]=\"!!action.disabled\"\r\n [attr.cdkFocusInitial]=\"action.autofocus ? '' : null\"\r\n (onClick)=\"run(action)\" />\r\n }\r\n </div>\r\n}\r\n@if (frame.showClose) {\r\n <button type=\"button\" class=\"nxe-dialog-close\" [attr.aria-label]=\"messages.t('common.close')\" (click)=\"frame.ref.close()\">\r\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" focusable=\"false\">\r\n <path d=\"M3.5 3.5l9 9m0-9l-9 9\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" />\r\n </svg>\r\n </button>\r\n}\r\n","import { Dialog } from '@angular/cdk/dialog';\r\nimport { hasModifierKey } from '@angular/cdk/keycodes';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { nxePane } from '@nexterajs/ui/styling';\r\nimport { NxeDialogFrameComponent, NxeDialogFrameData } from './nxe-dialog-frame.component';\r\nimport { NxeDialogRef } from './nxe-dialog-ref';\r\nimport { NxeDialogConfig, NxeDialogContent } from './nxe-dialog.types';\r\n\r\n/**\r\n * Opens modal dialogs.\r\n *\r\n * ```ts\r\n * const ref = this.dialog.open(RejectInvoiceDialogComponent, {\r\n * title: 'Tolak faktur',\r\n * size: 'sm',\r\n * data: { invoiceId },\r\n * actions: [\r\n * { text: 'Batal', stylingMode: 'outlined', result: false },\r\n * { text: 'Tolak', type: 'danger', result: true },\r\n * ],\r\n * });\r\n * ref.afterClosed().subscribe((rejected) => rejected && this.reload());\r\n * ```\r\n *\r\n * The content is a component (it injects `NXE_DIALOG_DATA` and `NxeDialogRef`) or a template (it\r\n * receives `{ $implicit: data, dialogRef }`). Focus is trapped, starts on the first tabbable\r\n * element (or `[cdkFocusInitial]`) and returns to the opener when the dialog closes. Esc and a\r\n * backdrop click dismiss it unless `disableClose` is set; with dialogs stacked, Esc closes only\r\n * the top one. The page behind does not scroll.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class NxeDialogService {\r\n private readonly cdk = inject(Dialog);\r\n private sequence = 0;\r\n\r\n open<R = unknown, D = unknown, T = unknown>(\r\n content: NxeDialogContent<T>,\r\n config: NxeDialogConfig<D, R> = {},\r\n ): NxeDialogRef<R, T> {\r\n const id = `nxe-dialog-${++this.sequence}`;\r\n const ref = new NxeDialogRef<R, T>(id, `${id}-title`);\r\n ref.disableClose = !!config.disableClose;\r\n\r\n const frame: NxeDialogFrameData = {\r\n ref: ref as NxeDialogRef<unknown, unknown>,\r\n content: content as NxeDialogContent<unknown>,\r\n data: config.data,\r\n title: config.title,\r\n actions: (config.actions ?? []) as NxeDialogFrameData['actions'],\r\n showClose: config.showClose ?? true,\r\n injector: config.injector,\r\n };\r\n\r\n const cdkRef = this.cdk.open<R, NxeDialogFrameData, NxeDialogFrameComponent>(NxeDialogFrameComponent, {\r\n id,\r\n role: config.role ?? 'dialog',\r\n ariaModal: true,\r\n ariaLabel: config.ariaLabel ?? null,\r\n ariaLabelledBy: config.ariaLabel ? null : ref.titleId,\r\n ariaDescribedBy: config.ariaDescribedBy ?? null,\r\n autoFocus: config.autoFocus ?? 'first-tabbable',\r\n restoreFocus: true,\r\n hasBackdrop: true,\r\n backdropClass: 'nxe-dialog-backdrop',\r\n panelClass: nxePane('nxe-dialog-pane', `nxe-dialog-${config.size ?? 'md'}`, ...[config.panelClass ?? []].flat()),\r\n viewContainerRef: config.viewContainerRef,\r\n // Dismissal is decided below, so Esc and the backdrop can follow different policies and\r\n // `ref.disableClose` can change while the dialog is open.\r\n disableClose: true,\r\n data: frame,\r\n });\r\n ref._attach(cdkRef);\r\n\r\n // The overlay keyboard dispatcher only delivers a key to the topmost overlay, so with dialogs\r\n // stacked (or a menu open above one) Esc reaches exactly one of them.\r\n cdkRef.keydownEvents.subscribe((event) => {\r\n if (event.key === 'Escape' && !ref.disableClose && !hasModifierKey(event)) {\r\n event.preventDefault();\r\n ref.close();\r\n }\r\n });\r\n cdkRef.backdropClick.subscribe(() => {\r\n if (!ref.disableClose && config.backdropClose !== false) {\r\n ref.close();\r\n }\r\n });\r\n return ref;\r\n }\r\n\r\n /** Closes every open dialog, with no result. */\r\n closeAll(): void {\r\n this.cdk.closeAll();\r\n }\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\n/** The dialog's body: padded, and the part that scrolls (the title and actions stay in view). */\r\n@Directive({\r\n selector: '[nxe-dialog-content], [nxeDialogContent]',\r\n host: { class: 'nxe-dialog-content' },\r\n})\r\nexport class NxeDialogContentDirective {}\r\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, inject } from '@angular/core';\r\nimport { NxeDialogContentDirective } from './nxe-dialog-content.directive';\r\nimport { NXE_DIALOG_DATA } from './nxe-dialog.types';\r\n\r\n/** What `NxeConfirmService` passes the message component. @internal */\r\nexport interface NxeConfirmContentData {\r\n message: string;\r\n descriptionId: string;\r\n}\r\n\r\n/** The message of a confirm dialog. It is the dialog's accessible description. @internal */\r\n@Component({\r\n selector: 'nxe-confirm-content',\r\n imports: [NxeDialogContentDirective],\r\n templateUrl: './nxe-confirm-content.component.html',\r\n styleUrl: './nxe-confirm-content.component.scss',\r\n host: { class: 'nxe-confirm-content' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeConfirmContentComponent {\r\n protected readonly data = inject(NXE_DIALOG_DATA) as NxeConfirmContentData;\r\n}\r\n","<p nxe-dialog-content class=\"nxe-confirm-message\" [id]=\"data.descriptionId\">{{ data.message }}</p>\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { NxeMessageService } from '@nexterajs/ui/core';\r\nimport { NxeConfirmContentComponent, NxeConfirmContentData } from './nxe-confirm-content.component';\r\nimport { NxeDialogService } from './nxe-dialog.service';\r\nimport { NxeDialogSize } from './nxe-dialog.types';\r\n\r\nexport interface NxeConfirmOptions {\r\n /** The question, as a heading: name the object (\"Batalkan PO-HWG-2610-0042?\"). */\r\n title: string;\r\n /** What happens, and whether it can be undone. Line breaks are kept. */\r\n message?: string;\r\n /** Default: the localized \"Confirm\". Prefer the verb (\"Batalkan PO\"). */\r\n confirmText?: string;\r\n /** Default: the localized \"Cancel\". */\r\n cancelText?: string;\r\n /** Styles the confirm button as destructive and starts focus on Cancel. */\r\n danger?: boolean;\r\n /** Default `sm`. */\r\n size?: NxeDialogSize;\r\n}\r\n\r\nlet confirmSequence = 0;\r\n\r\n/**\r\n * Asks the user to confirm before something destructive or irreversible. Resolves `true` on\r\n * confirm, `false` on cancel or Esc.\r\n *\r\n * ```ts\r\n * const go = await this.confirm.confirm({\r\n * title: 'Batalkan PO-0042?',\r\n * message: 'PO ini tidak dapat dibuka kembali.',\r\n * confirmText: 'Batalkan PO',\r\n * danger: true,\r\n * });\r\n * ```\r\n *\r\n * It is an `alertdialog` described by the message. A backdrop click does not dismiss it, so an\r\n * answer is always deliberate.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class NxeConfirmService {\r\n private readonly dialog = inject(NxeDialogService);\r\n private readonly messages = inject(NxeMessageService);\r\n\r\n async confirm(options: NxeConfirmOptions): Promise<boolean> {\r\n const descriptionId = `nxe-confirm-${++confirmSequence}-description`;\r\n const data: NxeConfirmContentData = { message: options.message ?? '', descriptionId };\r\n const ref = this.dialog.open<boolean, NxeConfirmContentData>(NxeConfirmContentComponent, {\r\n title: options.title,\r\n size: options.size ?? 'sm',\r\n role: 'alertdialog',\r\n data,\r\n ariaDescribedBy: options.message ? descriptionId : undefined,\r\n backdropClose: false,\r\n showClose: false,\r\n actions: [\r\n {\r\n text: options.cancelText ?? this.messages.t('common.cancel'),\r\n stylingMode: 'outlined',\r\n result: false,\r\n autofocus: !!options.danger,\r\n },\r\n {\r\n text: options.confirmText ?? this.messages.t('common.confirm'),\r\n type: options.danger ? 'danger' : 'default',\r\n result: true,\r\n autofocus: !options.danger,\r\n },\r\n ],\r\n });\r\n return (await ref.whenClosed()) === true;\r\n }\r\n}\r\n","import { ConnectedPosition, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { TemplatePortal } from '@angular/cdk/portal';\nimport { Directive, ElementRef, OnDestroy, ViewContainerRef, inject, input, signal } from '@angular/core';\nimport { NXE_MENU, NxeMenuCloseTarget } from '@nexterajs/ui/dropdowns';\nimport { nxePane } from '@nexterajs/ui/styling';\nimport type { NxeMenuComponent } from './nxe-menu.component';\n\nlet triggerSequence = 0;\n\n/** Below the trigger, left edges aligned; flips above, then aligns right edges. */\nconst ROOT_POSITIONS: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top' },\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom' },\n];\n\n/** Beside the item, tops aligned; flips to the left. */\nconst SUBMENU_POSITIONS: ConnectedPosition[] = [\n { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top' },\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top' },\n { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom' },\n { originX: 'start', originY: 'bottom', overlayX: 'end', overlayY: 'bottom' },\n];\n\n/** Hosts where Enter and Space already produce a click. */\nconst NATIVELY_ACTIVATABLE = new Set(['BUTTON', 'A', 'INPUT', 'SUMMARY']);\n\n/**\n * Opens an `nxe-menu` from the element it sits on.\n *\n * ```html\n * <nxe-button icon=\"more\" aria-label=\"Aksi\" [nxeMenuTriggerFor]=\"menu\" />\n * <nxe-menu #menu>…</nxe-menu>\n * ```\n *\n * The element gets `aria-haspopup=\"menu\"`, `aria-expanded` and `aria-controls`. Click toggles;\n * ArrowDown opens on the first item and ArrowUp on the last; Enter and Space open from hosts that\n * are not buttons (`nxe-button`). The panel opens below the element and flips above (or aligns to\n * the other edge) when there is no room. On an `nxe-menu-item` it opens a submenu to the side.\n * Closing with Esc or by choosing an item returns focus to the element; clicking away does not.\n */\n@Directive({\n selector: '[nxeMenuTriggerFor]',\n exportAs: 'nxeMenuTrigger',\n host: {\n 'aria-haspopup': 'menu',\n '[attr.id]': 'id',\n '[attr.aria-expanded]': 'isOpen()',\n '[attr.aria-controls]': 'isOpen() ? menu().panelId : null',\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class NxeMenuTriggerForDirective implements OnDestroy {\n private readonly overlay = inject(Overlay);\n private readonly viewContainer = inject(ViewContainerRef);\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n /** @internal The menu this trigger sits in, when it opens a submenu. */\n readonly parentMenu: NxeMenuCloseTarget | null = inject(NXE_MENU, { optional: true });\n\n /** The menu to open. */\n readonly menu = input.required<NxeMenuComponent>({ alias: 'nxeMenuTriggerFor' });\n\n /** @internal Id of the trigger; the panel is labelled by it. */\n readonly id = this.element.id || `nxe-menu-trigger-${++triggerSequence}`;\n private readonly openState = signal(false);\n /** Whether the menu is showing. */\n readonly isOpen = this.openState.asReadonly();\n private overlayRef: OverlayRef | null = null;\n\n /** Opens the menu and moves focus to its first (or last) item. No-op while open. */\n open(focus: 'first' | 'last' | 'none' = 'first'): void {\n if (this.openState()) {\n return;\n }\n const menu = this.menu();\n this.overlayRef ??= this.createOverlay(!!this.parentMenu);\n menu.trigger = this;\n this.overlayRef.attach(new TemplatePortal(menu.template(), this.viewContainer));\n this.openState.set(true);\n menu._opened(focus);\n }\n\n /** Closes the menu. `restoreFocus` returns focus to the trigger element (Esc, or an item was chosen). */\n close(restoreFocus = false): void {\n if (!this.openState()) {\n return;\n }\n const menu = this.menu();\n this.openState.set(false);\n menu._closed();\n this.overlayRef?.detach();\n if (menu.trigger === this) {\n menu.trigger = null;\n }\n if (restoreFocus) {\n this.element.focus();\n }\n }\n\n toggle(): void {\n if (this.openState()) {\n this.close(true);\n } else {\n this.open();\n }\n }\n\n ngOnDestroy(): void {\n if (this.openState()) {\n const menu = this.menu();\n menu._closed();\n if (menu.trigger === this) {\n menu.trigger = null;\n }\n }\n this.overlayRef?.dispose();\n this.overlayRef = null;\n }\n\n protected onClick(event: MouseEvent): void {\n // A disabled `nxe-menu-item` swallows its own click before it gets here.\n if (event.defaultPrevented) {\n return;\n }\n if (this.parentMenu) {\n // A submenu item opens its menu; the pointer is already on it, so a second click leaves it open.\n this.open('first');\n } else {\n this.toggle();\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.ctrlKey || event.metaKey || event.altKey) {\n return;\n }\n // A submenu item is opened by ArrowRight, which its menu handles.\n if (this.parentMenu) {\n if (\n this.element.getAttribute('aria-disabled') !== 'true' &&\n !NATIVELY_ACTIVATABLE.has(this.element.tagName) &&\n (event.key === 'Enter' || event.key === ' ')\n ) {\n event.preventDefault();\n this.open('first');\n }\n return;\n }\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n this.open('first');\n break;\n case 'ArrowUp':\n event.preventDefault();\n this.open('last');\n break;\n case 'Enter':\n case ' ':\n // nxe-button is a div: it reports Enter and Space through its onClick output, not a DOM click.\n if (!NATIVELY_ACTIVATABLE.has(this.element.tagName)) {\n event.preventDefault();\n this.toggle();\n }\n break;\n }\n }\n\n private createOverlay(isSubmenu: boolean): OverlayRef {\n const menu = this.menu();\n const ref = this.overlay.create({\n positionStrategy: this.overlay\n .position()\n .flexibleConnectedTo(this.element)\n .withPositions(isSubmenu ? SUBMENU_POSITIONS : ROOT_POSITIONS)\n .withFlexibleDimensions(false)\n .withPush(true)\n .withViewportMargin(8),\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\n // A transparent backdrop catches the click-away. A submenu rides on its parent's.\n hasBackdrop: !isSubmenu,\n backdropClass: 'cdk-overlay-transparent-backdrop',\n panelClass: nxePane('nxe-menu-pane', ...[menu.panelClass()].flat()),\n });\n ref.backdropClick().subscribe(() => this.close(false));\n // Esc is normally handled by the panel; this covers a menu opened without focus inside it.\n ref.keydownEvents().subscribe((event) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.close(true);\n }\n });\n return ref;\n }\n}\n","import { FocusableOption } from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n booleanAttribute,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { NXE_MENU } from '@nexterajs/ui/dropdowns';\nimport type { NxeMenuComponent } from './nxe-menu.component';\nimport { NxeMenuTriggerForDirective } from './nxe-menu-trigger-for.directive';\n\n/**\n * One action in an `nxe-menu`. Use it as an element (recommended, and the only way for apps that ban\n * native buttons and `(click)` on non-interactive elements), or as an attribute on a\n * `<button type=\"button\">` or an `<a>`.\n *\n * ```html\n * <nxe-menu-item (itemClick)=\"signOut()\" [danger]=\"true\">Sign out</nxe-menu-item>\n * <nxe-menu-item routerLink=\"/profile\">Profile</nxe-menu-item>\n * <nxe-menu-item [nxeMenuTriggerFor]=\"more\">Lainnya</nxe-menu-item>\n *\n * <!-- attribute form -->\n * <button type=\"button\" nxe-menu-item (click)=\"edit()\">\n * <svg nxeMenuItemIcon viewBox=\"0 0 16 16\">…</svg>\n * Ubah\n * </button>\n * <button type=\"button\" nxe-menu-item danger (click)=\"remove()\">Hapus</button>\n * <button type=\"button\" nxe-menu-item [nxeMenuTriggerFor]=\"more\">Lainnya</button>\n * ```\n *\n * `disabled` keeps the item visible but unreachable by arrow keys and ignored by clicks. `danger`\n * colours a destructive item. `[nxeMenuItemIcon]` projects an icon before the label. An item with\n * `[nxeMenuTriggerFor]` opens a submenu instead of closing the menu.\n *\n * The element form has `role=\"menuitem\"`, a roving `tabindex`, Enter and Space activation, and\n * `aria-disabled` when disabled. `itemClick` fires on every activation (pointer, Enter, Space) of an\n * enabled item, and never on a disabled one; the attribute form emits it too.\n */\n@Component({\n selector: 'nxe-menu-item, [nxe-menu-item]',\n templateUrl: './nxe-menu-item.component.html',\n styleUrl: './nxe-menu-item.component.scss',\n host: {\n class: 'nxe-menu-item',\n role: 'menuitem',\n tabindex: '-1',\n '[attr.aria-disabled]': 'disabled ? true : null',\n '[attr.disabled]': \"disabled && isButton ? '' : null\",\n '[class.nxe-menu-item-danger]': 'danger()',\n '[class.nxe-menu-item-disabled]': 'disabled',\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeydown($event)',\n '(mouseenter)': 'menu?._hovered(this)',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class NxeMenuItemComponent implements FocusableOption {\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n /** @internal The menu this item sits in. */\n readonly menu = inject(NXE_MENU, { optional: true }) as NxeMenuComponent | null;\n /** @internal Set when the item opens a submenu. */\n readonly trigger = inject(NxeMenuTriggerForDirective, { optional: true, self: true });\n protected readonly isButton = this.element.tagName === 'BUTTON';\n /** Buttons and links turn Enter (and, for a button, Space) into a click themselves. */\n private readonly isNative = this.element.tagName === 'BUTTON' || this.element.tagName === 'A';\n\n /** Shown but not actionable. */\n readonly disabledInput = input(false, { alias: 'disabled', transform: booleanAttribute });\n /** Destructive action: coloured with the danger status. */\n readonly danger = input(false, { transform: booleanAttribute });\n\n /** Emits when an enabled item is activated, before the menu closes. */\n readonly itemClick = output<void>();\n\n /** `FocusableOption`: the key manager skips disabled items. */\n get disabled(): boolean {\n return this.disabledInput();\n }\n\n focus(): void {\n this.element.focus();\n }\n\n /** Typeahead matches the start of this. */\n getLabel(): string {\n return (this.element.querySelector('.nxe-menu-item-label')?.textContent ?? '').trim();\n }\n\n protected onClick(event: Event): void {\n if (this.disabled) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n this.itemClick.emit();\n // A submenu trigger opens its menu; choosing a plain item closes the one it is in.\n if (!this.trigger) {\n this.menu?.closeMenu();\n }\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n // Buttons and links already turn Enter into a click (and a button, Space); other hosts do not.\n if (this.isNative || event.defaultPrevented || event.ctrlKey || event.metaKey || event.altKey) {\n return;\n }\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.element.click();\n }\n }\n}\n","<span class=\"nxe-menu-item-icon\"><ng-content select=\"[nxeMenuItemIcon]\" /></span>\r\n<span class=\"nxe-menu-item-label\"><ng-content /></span>\r\n@if (trigger) {\r\n <svg class=\"nxe-menu-item-chevron\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" focusable=\"false\">\r\n <path d=\"M6 3.5 10.5 8 6 12.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n}\r\n","import { FocusKeyManager } from '@angular/cdk/a11y';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n Injector,\r\n TemplateRef,\r\n ViewEncapsulation,\r\n afterNextRender,\r\n computed,\r\n contentChildren,\r\n inject,\r\n input,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NXE_MENU, NxeMenuCloseTarget } from '@nexterajs/ui/dropdowns';\r\nimport { NxeMenuItemComponent } from './nxe-menu-item.component';\r\nimport type { NxeMenuTriggerForDirective } from './nxe-menu-trigger-for.directive';\r\n\r\nlet menuSequence = 0;\r\n\r\n/**\r\n * `nxe-menu` is the list of actions a trigger opens. It draws nothing where it is declared; the\r\n * panel appears in a CDK overlay when a `[nxeMenuTriggerFor]` element opens it.\r\n *\r\n * ```html\r\n * <nxe-button icon=\"more\" aria-label=\"Aksi baris\" [nxeMenuTriggerFor]=\"rowMenu\" />\r\n *\r\n * <nxe-menu #rowMenu>\r\n * <button type=\"button\" nxe-menu-item (click)=\"edit(row)\">Ubah</button>\r\n * <button type=\"button\" nxe-menu-item [disabled]=\"!row.canCopy\" (click)=\"copy(row)\">Salin</button>\r\n * <nxe-menu-divider />\r\n * <button type=\"button\" nxe-menu-item danger (click)=\"remove(row)\">Hapus</button>\r\n * </nxe-menu>\r\n * ```\r\n *\r\n * It follows the ARIA menu pattern. The panel is `role=\"menu\"` and each item `role=\"menuitem\"`;\r\n * ArrowUp, ArrowDown, Home, End and typing a letter move between items (skipping disabled ones),\r\n * Enter and Space choose, Esc closes and returns focus to the trigger, and Tab closes and carries on\r\n * to the next control. An item inside a menu that has its own `[nxeMenuTriggerFor]` opens a submenu\r\n * with ArrowRight (ArrowLeft or Esc closes it).\r\n *\r\n * The menu provides `NXE_MENU`, so `nxe-list` rows and `nxe-menu-item`s close it when chosen.\r\n */\r\n@Component({\r\n selector: 'nxe-menu',\r\n exportAs: 'nxeMenu',\r\n templateUrl: './nxe-menu.component.html',\r\n styleUrl: './nxe-menu.component.scss',\r\n providers: [{ provide: NXE_MENU, useExisting: NxeMenuComponent }],\r\n host: { class: 'nxe-menu-host' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeMenuComponent implements NxeMenuCloseTarget {\r\n private readonly injector = inject(Injector);\r\n\r\n /** Accessible name. Defaults to the trigger's. */\r\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\r\n /** Extra class(es) for the overlay pane. */\r\n readonly panelClass = input<string | string[]>('');\r\n\r\n /** @internal Id of the panel; the trigger's `aria-controls`. */\r\n readonly panelId = `nxe-menu-${++menuSequence}`;\r\n /** @internal */\r\n readonly template = viewChild.required(TemplateRef);\r\n private readonly descendantItems = contentChildren(NxeMenuItemComponent, { descendants: true });\r\n /** Only this menu's own items: a submenu declared inside this one brings its own. */\r\n private readonly items = computed(() => this.descendantItems().filter((item) => item.menu === this));\r\n\r\n /** @internal The trigger currently showing this menu. */\r\n trigger: NxeMenuTriggerForDirective | null = null;\r\n private keyManager: FocusKeyManager<NxeMenuItemComponent> | null = null;\r\n\r\n /** @internal `aria-labelledby` of the panel: the trigger, unless an explicit label is given. */\r\n labelledBy(): string | null {\r\n return this.ariaLabel() ? null : (this.trigger?.id ?? null);\r\n }\r\n\r\n /** Closes the menu (and any menu it was opened from). Called by items and `nxe-list` when chosen. */\r\n closeMenu(): void {\r\n const trigger = this.trigger;\r\n if (!trigger) {\r\n return;\r\n }\r\n trigger.close(true);\r\n trigger.parentMenu?.closeMenu();\r\n }\r\n\r\n /** @internal Called by the trigger once the panel is attached. */\r\n _opened(focus: 'first' | 'last' | 'none'): void {\r\n this.keyManager = new FocusKeyManager(this.items, this.injector)\r\n .withVerticalOrientation()\r\n .withHomeAndEnd()\r\n .withWrap()\r\n .withTypeAhead()\r\n .skipPredicate((item) => item.disabled);\r\n if (focus !== 'none') {\r\n afterNextRender(\r\n () => (focus === 'first' ? this.keyManager?.setFirstItemActive() : this.keyManager?.setLastItemActive()),\r\n { injector: this.injector },\r\n );\r\n }\r\n }\r\n\r\n /** @internal Called by the trigger when the panel is detached. */\r\n _closed(): void {\r\n this.closeSubmenus();\r\n this.keyManager = null;\r\n }\r\n\r\n /** @internal Moves the active item under the pointer, and closes a sibling's submenu. */\r\n _hovered(item: NxeMenuItemComponent): void {\r\n if (item.disabled) {\r\n return;\r\n }\r\n for (const other of this.items()) {\r\n if (other !== item && other.trigger?.isOpen()) {\r\n other.trigger.close(false);\r\n }\r\n }\r\n this.keyManager?.setActiveItem(item);\r\n }\r\n\r\n private closeSubmenus(): void {\r\n for (const item of this.items()) {\r\n if (item.trigger?.isOpen()) {\r\n item.trigger.close(false);\r\n }\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected onKeydown(event: KeyboardEvent): void {\r\n const manager = this.keyManager;\r\n const trigger = this.trigger;\r\n if (!manager || !trigger || event.defaultPrevented || event.ctrlKey || event.metaKey || event.altKey) {\r\n return;\r\n }\r\n switch (event.key) {\r\n case 'Escape':\r\n // Handled here, not by the overlay dispatcher, so only this level closes.\r\n event.preventDefault();\r\n event.stopPropagation();\r\n trigger.close(true);\r\n return;\r\n case 'Tab':\r\n // No preventDefault: focus is back on the trigger, so Tab moves on from it.\r\n this.closeChain();\r\n return;\r\n case 'ArrowRight':\r\n if (manager.activeItem?.trigger) {\r\n event.preventDefault();\r\n manager.activeItem.trigger.open('first');\r\n }\r\n return;\r\n case 'ArrowLeft':\r\n if (trigger.parentMenu) {\r\n event.preventDefault();\r\n trigger.close(true);\r\n }\r\n return;\r\n case 'Enter':\r\n case ' ':\r\n // The item handles it; typeahead must not eat the space as a character.\r\n if (manager.activeItem) {\r\n return;\r\n }\r\n }\r\n manager.onKeydown(event);\r\n }\r\n\r\n private closeChain(): void {\r\n const trigger = this.trigger;\r\n trigger?.close(true);\r\n trigger?.parentMenu?.closeMenu();\r\n }\r\n}\r\n","<ng-template>\r\n <div\r\n class=\"nxe-menu\"\r\n role=\"menu\"\r\n aria-orientation=\"vertical\"\r\n tabindex=\"-1\"\r\n [id]=\"panelId\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-labelledby]=\"labelledBy()\"\r\n (keydown)=\"onKeydown($event)\">\r\n <ng-content />\r\n </div>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\r\n\r\n/** A rule between groups of items in an `nxe-menu`. */\r\n@Component({\r\n selector: 'nxe-menu-divider',\r\n template: '',\r\n host: { class: 'nxe-menu-divider', role: 'separator' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeMenuDividerComponent {}\r\n","/** Controls a Tab can land on, as a selector. Callers still filter out the hidden ones. @internal */\r\nexport const NXE_TABBABLE =\r\n 'a[href], button:not([disabled]), input:not([disabled]):not([type=\"hidden\"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"]), [contenteditable=\"true\"]';\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n TemplateRef,\r\n ViewEncapsulation,\r\n booleanAttribute,\r\n inject,\r\n input,\r\n output,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NxeMessageService } from '@nexterajs/ui/core';\r\nimport type { NxePlacement } from '../nxe-placement';\r\nimport { NXE_TABBABLE } from '../nxe-tabbable';\r\nimport type { NxePopoverTriggerForDirective } from './nxe-popover-trigger-for.directive';\r\n\r\nlet popoverSequence = 0;\r\n\r\n/** Which side of the trigger the popover prefers. It flips to the opposite side when there is no room. */\r\nexport type NxePopoverPosition = NxePlacement;\r\n\r\n/**\r\n * `nxe-popover` is a small panel of content a trigger opens: a filter form, a help text, a few\r\n * details. It draws nothing where it is declared; the panel appears in a CDK overlay when a\r\n * `[nxePopoverTriggerFor]` element opens it.\r\n *\r\n * ```html\r\n * <nxe-button icon=\"filter\" text=\"Filter\" [nxePopoverTriggerFor]=\"filters\" />\r\n *\r\n * <nxe-popover #filters heading=\"Filter PO\" closable>\r\n * <nxe-form-field label=\"Pemasok\"><nxe-text-box /></nxe-form-field>\r\n * <nxe-button text=\"Terapkan\" (onClick)=\"apply(); filters.close()\" />\r\n * </nxe-popover>\r\n * ```\r\n *\r\n * It is a non-modal dialog: `role=\"dialog\"` named by its heading (else `aria-label`, else the\r\n * trigger), and the page behind it stays usable. Click on the trigger toggles it. Focus moves to the\r\n * first focusable control in the content when there is one (else the close button, else it stays on\r\n * the trigger). Esc closes and returns focus to the trigger; so does Tab off either end. Clicking\r\n * outside closes it and leaves focus where the click went.\r\n */\r\n@Component({\r\n selector: 'nxe-popover',\r\n exportAs: 'nxePopover',\r\n templateUrl: './nxe-popover.component.html',\r\n styleUrl: './nxe-popover.component.scss',\r\n host: { class: 'nxe-popover-host' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxePopoverComponent {\r\n protected readonly messages = inject(NxeMessageService);\r\n\r\n /** A title for the panel; it names the dialog. */\r\n readonly heading = input<string | undefined>(undefined);\r\n /** Draws a close button in the header. */\r\n readonly closable = input(false, { transform: booleanAttribute });\r\n /** Accessible name when there is no `heading`. Without either, the trigger names the panel. */\r\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\r\n /** Preferred side of the trigger. */\r\n readonly position = input<NxePopoverPosition>('bottom');\r\n /** Extra class(es) for the overlay pane. */\r\n readonly panelClass = input<string | string[]>('');\r\n\r\n /** Emits when the panel opens. */\r\n readonly opened = output<void>();\r\n /** Emits when the panel closes, however it was closed. */\r\n readonly closed = output<void>();\r\n\r\n private readonly sequence = ++popoverSequence;\r\n /** @internal Id of the panel; the trigger's `aria-controls`. */\r\n readonly panelId = `nxe-popover-${this.sequence}`;\r\n /** @internal */\r\n protected readonly headingId = `nxe-popover-${this.sequence}-heading`;\r\n /** @internal */\r\n readonly template = viewChild.required(TemplateRef);\r\n\r\n /** @internal The trigger currently showing this popover. */\r\n trigger: NxePopoverTriggerForDirective | null = null;\r\n\r\n /** Whether the panel is showing. */\r\n isOpen(): boolean {\r\n return this.trigger?.isOpen() ?? false;\r\n }\r\n\r\n /** Closes the panel and returns focus to its trigger. No-op while closed. */\r\n close(): void {\r\n this.trigger?.close(true);\r\n }\r\n\r\n /** @internal `aria-labelledby` of the panel: the heading, else the trigger unless an explicit label is given. */\r\n labelledBy(): string | null {\r\n if (this.heading()) {\r\n return this.headingId;\r\n }\r\n return this.ariaLabel() ? null : (this.trigger?.id ?? null);\r\n }\r\n\r\n /** @internal Tab off either end closes the panel, as a menu does, so focus is never stranded in an overlay at the end of the page. */\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (event.key !== 'Tab' || event.defaultPrevented || event.ctrlKey || event.metaKey || event.altKey) {\r\n return;\r\n }\r\n const panel = event.currentTarget as HTMLElement;\r\n const tabbable = Array.from(panel.querySelectorAll<HTMLElement>(NXE_TABBABLE)).filter(\r\n (el) => el.tabIndex >= 0 && !el.hasAttribute('hidden') && el.getClientRects().length > 0,\r\n );\r\n const active = document.activeElement;\r\n const first = tabbable[0];\r\n const last = tabbable[tabbable.length - 1];\r\n if (event.shiftKey) {\r\n if (!first || active === first || active === panel) {\r\n event.preventDefault();\r\n this.trigger?.close(true);\r\n }\r\n } else if (!last || active === last) {\r\n // No preventDefault: focus lands back on the trigger, so Tab moves on from it.\r\n this.trigger?.close(true);\r\n }\r\n }\r\n}\r\n","<ng-template>\r\n <div\r\n class=\"nxe-popover\"\r\n role=\"dialog\"\r\n tabindex=\"-1\"\r\n [id]=\"panelId\"\r\n [attr.aria-label]=\"heading() ? null : ariaLabel() || null\"\r\n [attr.aria-labelledby]=\"labelledBy()\"\r\n (keydown)=\"onKeydown($event)\">\r\n @if (heading() || closable()) {\r\n <div class=\"nxe-popover-header\">\r\n @if (heading()) {\r\n <div class=\"nxe-popover-heading\" [id]=\"headingId\">{{ heading() }}</div>\r\n }\r\n @if (closable()) {\r\n <button\r\n type=\"button\"\r\n class=\"nxe-popover-close\"\r\n [attr.aria-label]=\"messages.t('common.close')\"\r\n (click)=\"close()\">\r\n <svg viewBox=\"0 0 16 16\" focusable=\"false\" aria-hidden=\"true\">\r\n <path d=\"M3.2 2 8 6.8 12.8 2 14 3.2 9.2 8l4.8 4.8-1.2 1.2L8 9.2 3.2 14 2 12.8 6.8 8 2 3.2z\" />\r\n </svg>\r\n </button>\r\n }\r\n </div>\r\n }\r\n <div class=\"nxe-popover-body\">\r\n <ng-content />\r\n </div>\r\n </div>\r\n</ng-template>\r\n","import type { ConnectedPosition } from '@angular/cdk/overlay';\r\n\r\n/** The side of the trigger an overlay prefers. `start` and `end` follow the writing direction. */\r\nexport type NxePlacement = 'top' | 'bottom' | 'start' | 'end';\r\n\r\nconst OPPOSITE: Record<NxePlacement, NxePlacement> = { top: 'bottom', bottom: 'top', start: 'end', end: 'start' };\r\n\r\nfunction side(placement: NxePlacement, align: 'center' | 'start'): ConnectedPosition {\r\n switch (placement) {\r\n case 'top':\r\n return align === 'center'\r\n ? { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' }\r\n : { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' };\r\n case 'bottom':\r\n return align === 'center'\r\n ? { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top' }\r\n : { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top' };\r\n case 'start':\r\n return align === 'center'\r\n ? { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' }\r\n : { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top' };\r\n case 'end':\r\n return align === 'center'\r\n ? { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' }\r\n : { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top' };\r\n }\r\n}\r\n\r\n/**\r\n * Connected positions for a placement: the preferred side, then the opposite one (the flip), then\r\n * the two sides across. No offsets: the gap to the trigger is padding on the overlay pane, which\r\n * keeps it right for either writing direction and keeps the pointer over the pane while crossing it.\r\n *\r\n * `center` centres the overlay on the trigger (a tooltip); `start` aligns the edges (a popover).\r\n * @internal\r\n */\r\nexport function nxePlacementPositions(placement: NxePlacement, align: 'center' | 'start'): ConnectedPosition[] {\r\n const across: NxePlacement[] = placement === 'top' || placement === 'bottom' ? ['end', 'start'] : ['bottom', 'top'];\r\n return [placement, OPPOSITE[placement], ...across].map((p) => side(p, align));\r\n}\r\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport {\r\n Directive,\r\n ElementRef,\r\n Injector,\r\n OnDestroy,\r\n ViewContainerRef,\r\n afterNextRender,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { nxePane } from '@nexterajs/ui/styling';\r\nimport { nxePlacementPositions } from '../nxe-placement';\r\nimport { NXE_TABBABLE } from '../nxe-tabbable';\r\nimport type { NxePopoverComponent } from './nxe-popover.component';\r\n\r\nlet triggerSequence = 0;\r\n\r\n/** Hosts where Enter and Space already produce a click. */\r\nconst NATIVELY_ACTIVATABLE = new Set(['BUTTON', 'A', 'INPUT', 'SUMMARY']);\r\n\r\n/**\r\n * Opens an `nxe-popover` from the element it sits on.\r\n *\r\n * ```html\r\n * <nxe-button icon=\"filter\" text=\"Filter\" [nxePopoverTriggerFor]=\"filters\" />\r\n * <nxe-popover #filters heading=\"Filter PO\">…</nxe-popover>\r\n * ```\r\n *\r\n * The element gets `aria-haspopup=\"dialog\"`, `aria-expanded` and `aria-controls`. Click toggles;\r\n * Enter and Space do from hosts that are not buttons (`nxe-button`). The panel opens on the\r\n * popover's `position` (below by default) and flips when there is no room. Opening moves focus to\r\n * the first focusable control in the content, else the close button; Esc closes and returns focus\r\n * to the element; a click outside the panel and the element closes it and leaves focus where the\r\n * click went.\r\n */\r\n@Directive({\r\n selector: '[nxePopoverTriggerFor]',\r\n exportAs: 'nxePopoverTrigger',\r\n host: {\r\n 'aria-haspopup': 'dialog',\r\n '[attr.id]': 'id',\r\n '[attr.aria-expanded]': 'isOpen()',\r\n '[attr.aria-controls]': 'isOpen() ? popover().panelId : null',\r\n '(click)': 'onClick($event)',\r\n '(keydown)': 'onKeydown($event)',\r\n },\r\n})\r\nexport class NxePopoverTriggerForDirective implements OnDestroy {\r\n private readonly overlay = inject(Overlay);\r\n private readonly viewContainer = inject(ViewContainerRef);\r\n private readonly injector = inject(Injector);\r\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n\r\n /** The popover to open. */\r\n readonly popover = input.required<NxePopoverComponent>({ alias: 'nxePopoverTriggerFor' });\r\n\r\n /** @internal Id of the trigger; the panel is labelled by it when it has no heading or label. */\r\n readonly id = this.element.id || `nxe-popover-trigger-${++triggerSequence}`;\r\n private readonly openState = signal(false);\r\n /** Whether the popover is showing. */\r\n readonly isOpen = this.openState.asReadonly();\r\n private overlayRef: OverlayRef | null = null;\r\n\r\n /** Opens the popover and moves focus into it. No-op while open. */\r\n open(): void {\r\n if (this.openState()) {\r\n return;\r\n }\r\n const popover = this.popover();\r\n this.overlayRef?.dispose();\r\n this.overlayRef = this.createOverlay(popover);\r\n popover.trigger = this;\r\n this.overlayRef.attach(new TemplatePortal(popover.template(), this.viewContainer));\r\n this.openState.set(true);\r\n popover.opened.emit();\r\n afterNextRender(() => this.focusInto(), { injector: this.injector });\r\n }\r\n\r\n /** Closes the popover. `restoreFocus` returns focus to the element (Esc, Tab off an end, the close button). */\r\n close(restoreFocus = false): void {\r\n if (!this.openState()) {\r\n return;\r\n }\r\n const popover = this.popover();\r\n this.openState.set(false);\r\n this.overlayRef?.detach();\r\n if (popover.trigger === this) {\r\n popover.trigger = null;\r\n }\r\n popover.closed.emit();\r\n if (restoreFocus) {\r\n this.element.focus();\r\n }\r\n }\r\n\r\n toggle(): void {\r\n if (this.openState()) {\r\n this.close(true);\r\n } else {\r\n this.open();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.openState()) {\r\n const popover = this.popover();\r\n if (popover.trigger === this) {\r\n popover.trigger = null;\r\n }\r\n }\r\n this.overlayRef?.dispose();\r\n this.overlayRef = null;\r\n }\r\n\r\n protected onClick(event: MouseEvent): void {\r\n if (!event.defaultPrevented) {\r\n this.toggle();\r\n }\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (event.ctrlKey || event.metaKey || event.altKey) {\r\n return;\r\n }\r\n // nxe-button is a div: it reports Enter and Space through its onClick output, not a DOM click.\r\n if ((event.key === 'Enter' || event.key === ' ') && !NATIVELY_ACTIVATABLE.has(this.element.tagName)) {\r\n event.preventDefault();\r\n this.toggle();\r\n }\r\n }\r\n\r\n /** The first control in the content, else the close button; nothing when the panel has neither. */\r\n private focusInto(): void {\r\n const panel = this.overlayRef?.overlayElement.querySelector<HTMLElement>('.nxe-popover');\r\n if (!panel) {\r\n return;\r\n }\r\n const visible = (el: HTMLElement) => el.tabIndex >= 0 && el.getClientRects().length > 0;\r\n const target =\r\n Array.from(panel.querySelectorAll<HTMLElement>('.nxe-popover-body')).flatMap((body) =>\r\n Array.from(body.querySelectorAll<HTMLElement>(NXE_TABBABLE)),\r\n ).find(visible) ?? panel.querySelector<HTMLElement>('.nxe-popover-close');\r\n target?.focus();\r\n }\r\n\r\n private createOverlay(popover: NxePopoverComponent): OverlayRef {\r\n const ref = this.overlay.create({\r\n positionStrategy: this.overlay\r\n .position()\r\n .flexibleConnectedTo(this.element)\r\n .withPositions(nxePlacementPositions(popover.position(), 'start'))\r\n .withFlexibleDimensions(false)\r\n .withPush(true)\r\n .withViewportMargin(8),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n panelClass: nxePane('nxe-popover-pane', ...[popover.panelClass()].flat()),\r\n });\r\n // Esc closes this popover; an overlay opened from inside it (a drop-down) is above it and takes the key first.\r\n ref.keydownEvents().subscribe((event) => {\r\n if (event.key === 'Escape' && !event.ctrlKey && !event.altKey && !event.metaKey) {\r\n event.preventDefault();\r\n this.close(true);\r\n }\r\n });\r\n ref.outsidePointerEvents().subscribe((event) => {\r\n const target = event.target as Element | null;\r\n // The trigger's own click toggles; a drop-down or calendar opened from inside the popover is not \"outside\" it.\r\n if (!target || this.element.contains(target) || target.closest('.cdk-overlay-pane, .cdk-overlay-backdrop')) {\r\n return;\r\n }\r\n this.close(false);\r\n });\r\n return ref;\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, input } from '@angular/core';\r\n\r\n/**\r\n * The chip a `[nxeTooltip]` shows. Internal: it is created by the directive, not declared in a\r\n * template.\r\n * @internal\r\n */\r\n@Component({\r\n selector: 'nxe-tooltip-panel',\r\n template: '{{ text() }}',\r\n styleUrl: './nxe-tooltip-panel.component.scss',\r\n host: {\r\n class: 'nxe-tooltip',\r\n role: 'tooltip',\r\n '[attr.id]': 'tooltipId()',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeTooltipPanelComponent {\r\n readonly text = input('');\r\n readonly tooltipId = input<string | null>(null);\r\n}\r\n","import { AriaDescriber, FocusMonitor } from '@angular/cdk/a11y';\r\nimport { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport {\r\n ComponentRef,\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n OnDestroy,\r\n Renderer2,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n numberAttribute,\r\n signal,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { nxePane } from '@nexterajs/ui/styling';\r\nimport { type NxePlacement, nxePlacementPositions } from '../nxe-placement';\r\nimport { NxeTooltipPanelComponent } from './nxe-tooltip-panel.component';\r\n\r\n/** Which side of the element the tooltip prefers. It flips to the opposite side when there is no room. */\r\nexport type NxeTooltipPosition = NxePlacement;\r\n\r\nlet tooltipSequence = 0;\r\n\r\n/**\r\n * Adds a short text tooltip to the element it sits on.\r\n *\r\n * ```html\r\n * <nxe-button icon=\"edit\" stylingMode=\"text\" aria-label=\"Ubah\" nxeTooltip=\"Ubah PO-0042\" />\r\n * <button type=\"button\" nxeTooltip=\"Salin ke papan klip\" nxeTooltipPosition=\"bottom\">Salin</button>\r\n * ```\r\n *\r\n * It shows after `nxeTooltipShowDelay` (500ms) when the pointer rests on the element, and at once when\r\n * the element takes focus from the keyboard. It hides on Esc (first, before a dialog or menu under it\r\n * sees the key), when focus leaves, when the pointer leaves for longer than `nxeTooltipHideDelay`\r\n * (100ms, long enough to move onto the tooltip itself, so a reader can keep it open), and when the\r\n * element is pressed. Touch does not show it: there is no long-press.\r\n *\r\n * The text is also the element's description. While hidden, it is a visually hidden description the\r\n * element points at through `aria-describedby`, so a screen reader reads it on focus; while shown,\r\n * `aria-describedby` points at the `role=\"tooltip\"` element instead. The element's own name is never\r\n * touched: an icon-only `nxe-button` keeps its `aria-label`, and the tooltip adds to it.\r\n */\r\n@Directive({\r\n selector: '[nxeTooltip]',\r\n exportAs: 'nxeTooltip',\r\n host: {\r\n '(pointerenter)': 'onPointerEnter($event)',\r\n '(pointerleave)': 'onPointerLeave($event)',\r\n '(pointerdown)': 'hide(0)',\r\n '(click)': 'hide(0)',\r\n '(keydown.enter)': 'hide(0)',\r\n '(keydown.space)': 'hide(0)',\r\n },\r\n})\r\nexport class NxeTooltipDirective implements OnDestroy {\r\n private readonly overlay = inject(Overlay);\r\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n private readonly ariaDescriber = inject(AriaDescriber);\r\n private readonly renderer = inject(Renderer2);\r\n private readonly focusMonitor = inject(FocusMonitor);\r\n\r\n /** The tooltip text. Empty, or a `nxeTooltipDisabled` element, shows nothing. */\r\n readonly text = input<string | null | undefined>('', { alias: 'nxeTooltip' });\r\n /** Preferred side. `start` and `end` follow the writing direction. */\r\n readonly position = input<NxeTooltipPosition>('top', { alias: 'nxeTooltipPosition' });\r\n /** Milliseconds the pointer rests before the tooltip shows. Focus from the keyboard ignores it. */\r\n readonly showDelay = input(500, { alias: 'nxeTooltipShowDelay', transform: numberAttribute });\r\n /** Milliseconds between the pointer leaving and the tooltip hiding. */\r\n readonly hideDelay = input(100, { alias: 'nxeTooltipHideDelay', transform: numberAttribute });\r\n readonly disabled = input(false, { alias: 'nxeTooltipDisabled', transform: booleanAttribute });\r\n\r\n private readonly message = computed(() => (this.disabled() ? '' : (this.text() ?? '').trim()));\r\n private readonly visibleState = signal(false);\r\n /** Whether the tooltip is showing. */\r\n readonly isVisible = this.visibleState.asReadonly();\r\n\r\n /** Id of the `role=\"tooltip\"` element while it exists. */\r\n readonly id = `nxe-tooltip-${++tooltipSequence}`;\r\n\r\n private overlayRef: OverlayRef | null = null;\r\n private panel: ComponentRef<NxeTooltipPanelComponent> | null = null;\r\n private showTimer: ReturnType<typeof setTimeout> | null = null;\r\n private hideTimer: ReturnType<typeof setTimeout> | null = null;\r\n private described = '';\r\n private readonly unlisten: (() => void)[] = [];\r\n\r\n constructor() {\r\n this.focusMonitor\r\n .monitor(this.element)\r\n .pipe(takeUntilDestroyed(inject(DestroyRef)))\r\n .subscribe((origin) => {\r\n if (origin === 'keyboard') {\r\n this.show(0);\r\n } else if (origin === null) {\r\n this.hide(0);\r\n }\r\n });\r\n toObservable(this.message)\r\n .pipe(takeUntilDestroyed())\r\n .subscribe((message) => this.messageChanged(message));\r\n }\r\n\r\n /** Shows the tooltip after `delay` milliseconds. No-op without text. */\r\n show(delay: number = this.showDelay()): void {\r\n this.clearTimers();\r\n if (!this.message() || this.visibleState()) {\r\n return;\r\n }\r\n if (delay > 0) {\r\n this.showTimer = setTimeout(() => this.attach(), delay);\r\n } else {\r\n this.attach();\r\n }\r\n }\r\n\r\n /** Hides the tooltip after `delay` milliseconds. */\r\n hide(delay: number = this.hideDelay()): void {\r\n this.clearTimers();\r\n if (!this.visibleState()) {\r\n return;\r\n }\r\n if (delay > 0) {\r\n this.hideTimer = setTimeout(() => this.detach(), delay);\r\n } else {\r\n this.detach();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.clearTimers();\r\n this.unlisten.forEach((fn) => fn());\r\n if (this.visibleState()) {\r\n this.removeDescribedBy();\r\n }\r\n this.overlayRef?.dispose();\r\n this.overlayRef = null;\r\n this.ariaDescriber.removeDescription(this.element, this.described);\r\n this.described = '';\r\n this.focusMonitor.stopMonitoring(this.element);\r\n }\r\n\r\n protected onPointerEnter(event: PointerEvent): void {\r\n // A touch is followed by emulated mouse events; a tooltip there is a stuck tooltip.\r\n if (event.pointerType !== 'touch') {\r\n this.show();\r\n }\r\n }\r\n\r\n protected onPointerLeave(event: PointerEvent): void {\r\n if (event.pointerType !== 'touch') {\r\n this.hide();\r\n }\r\n }\r\n\r\n private attach(): void {\r\n this.showTimer = null;\r\n const message = this.message();\r\n if (!message || this.visibleState()) {\r\n return;\r\n }\r\n const ref = (this.overlayRef ??= this.createOverlay());\r\n ref.updatePositionStrategy(this.positionStrategy());\r\n const panel = (this.panel = ref.attach(new ComponentPortal(NxeTooltipPanelComponent)));\r\n panel.setInput('text', message);\r\n panel.setInput('tooltipId', this.id);\r\n this.visibleState.set(true);\r\n // The hidden description gives way to the tooltip itself; the text is the same.\r\n this.ariaDescriber.removeDescription(this.element, this.described);\r\n this.addDescribedBy();\r\n }\r\n\r\n private detach(): void {\r\n this.hideTimer = null;\r\n if (!this.visibleState()) {\r\n return;\r\n }\r\n this.overlayRef?.detach();\r\n this.panel = null;\r\n this.visibleState.set(false);\r\n this.removeDescribedBy();\r\n this.describe(this.message());\r\n }\r\n\r\n private createOverlay(): OverlayRef {\r\n const ref = this.overlay.create({\r\n positionStrategy: this.positionStrategy(),\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n panelClass: nxePane('nxe-tooltip-pane'),\r\n });\r\n // Esc dismisses the tooltip alone: a dialog or menu under it is not closed by the same key.\r\n ref.keydownEvents().subscribe((event) => {\r\n if (event.key === 'Escape' && !event.ctrlKey && !event.altKey && !event.metaKey && !event.shiftKey) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.hide(0);\r\n }\r\n });\r\n // Hoverable: reaching the tooltip keeps it, leaving it hides it.\r\n this.unlisten.push(\r\n this.renderer.listen(ref.overlayElement, 'pointerenter', () => this.clearTimers()),\r\n this.renderer.listen(ref.overlayElement, 'pointerleave', () => this.hide()),\r\n );\r\n return ref;\r\n }\r\n\r\n private positionStrategy() {\r\n return this.overlay\r\n .position()\r\n .flexibleConnectedTo(this.element)\r\n .withPositions(nxePlacementPositions(this.position(), 'center'))\r\n .withFlexibleDimensions(false)\r\n .withPush(true)\r\n .withViewportMargin(4);\r\n }\r\n\r\n private messageChanged(message: string): void {\r\n if (this.visibleState()) {\r\n if (message) {\r\n this.panel?.setInput('text', message);\r\n } else {\r\n this.detach();\r\n }\r\n this.described = message;\r\n return;\r\n }\r\n this.describe(message);\r\n }\r\n\r\n /** The hidden description a screen reader reads on focus while no tooltip is showing. */\r\n private describe(message: string): void {\r\n if (message === this.described) {\r\n if (message) {\r\n this.ariaDescriber.describe(this.element, message);\r\n }\r\n return;\r\n }\r\n this.ariaDescriber.removeDescription(this.element, this.described);\r\n this.described = message;\r\n if (message) {\r\n this.ariaDescriber.describe(this.element, message);\r\n }\r\n }\r\n\r\n private addDescribedBy(): void {\r\n const ids = this.describedByIds();\r\n if (!ids.includes(this.id)) {\r\n this.element.setAttribute('aria-describedby', [...ids, this.id].join(' '));\r\n }\r\n }\r\n\r\n private removeDescribedBy(): void {\r\n const ids = this.describedByIds().filter((id) => id !== this.id);\r\n if (ids.length) {\r\n this.element.setAttribute('aria-describedby', ids.join(' '));\r\n } else {\r\n this.element.removeAttribute('aria-describedby');\r\n }\r\n }\r\n\r\n private describedByIds(): string[] {\r\n return (this.element.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter(Boolean);\r\n }\r\n\r\n private clearTimers(): void {\r\n if (this.showTimer !== null) {\r\n clearTimeout(this.showTimer);\r\n this.showTimer = null;\r\n }\r\n if (this.hideTimer !== null) {\r\n clearTimeout(this.hideTimer);\r\n this.hideTimer = null;\r\n }\r\n }\r\n}\r\n","import { ComponentType } from '@angular/cdk/portal';\r\nimport { InjectionToken, TemplateRef } from '@angular/core';\r\nimport type { NxeDialogConfig } from '../dialog/nxe-dialog.types';\r\n\r\n/** Which edge the drawer sits on. `start` and `end` follow the writing direction: `end` is the right in LTR and the left in RTL. */\r\nexport type NxeDrawerSide = 'start' | 'end';\r\n\r\n/**\r\n * `overlay`: a modal panel over the page, with a scrim, a focus trap and Esc. `push`: a non-modal panel in\r\n * the page's own layout that takes its width from the content beside it.\r\n */\r\nexport type NxeDrawerMode = 'overlay' | 'push';\r\n\r\n/** Drawer width. `sm` 320px, `md` 420px (default), `lg` 560px, `xl` 760px, `full` the viewport. Never wider than the viewport. */\r\nexport type NxeDrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';\r\n\r\n/** The data a drawer was opened with, injected into the content component. */\r\nexport const NXE_DRAWER_DATA = new InjectionToken<unknown>('NXE_DRAWER_DATA');\r\n\r\n/**\r\n * What `NxeDrawerService.open` takes. The dialog's options, minus its `size` and `role`, plus the edge. The drawer is\r\n * modal: `title` names it, `actions` fill the footer, Esc and the scrim dismiss it unless `disableClose`.\r\n */\r\nexport interface NxeDrawerConfig<D = unknown, R = unknown> extends Omit<NxeDialogConfig<D, R>, 'size' | 'role'> {\r\n /** Edge of the screen. Default `end`. */\r\n side?: NxeDrawerSide;\r\n /** Default `md`. */\r\n size?: NxeDrawerSize;\r\n}\r\n\r\n/** What `NxeDrawerService.open` accepts as content. A template receives `{ $implicit: data, dialogRef }`. */\r\nexport type NxeDrawerContent<T> = ComponentType<T> | TemplateRef<T>;\r\n","import { NxeDialogRef } from '../dialog/nxe-dialog-ref';\r\n\r\n/**\r\n * Handle on an open drawer: the dialog's ref (`close(result)`, `afterClosed()`, `whenClosed()`, `result`,\r\n * `isClosed`, `disableClose`, `componentInstance`), injectable in the content as `inject(NxeDrawerRef)` and\r\n * returned by `NxeDrawerService.open`. It is also provided as `NxeDialogRef`, so the dialog directives\r\n * (`nxe-dialog-title`, `nxe-dialog-content`, `nxe-dialog-actions`) work inside a drawer.\r\n */\r\nexport class NxeDrawerRef<R = unknown, C = unknown> extends NxeDialogRef<R, C> {}\r\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\r\nimport { NxeDialogFrameComponent } from '../dialog/nxe-dialog-frame.component';\r\n\r\n/**\r\n * What `NxeDrawerService` opens in the CDK dialog container: the dialog's own frame (title, scrolling body,\r\n * actions bar, close button, all injecting the same ref and data), wrapped so the drawer's pane styles load\r\n * with it. @internal\r\n */\r\n@Component({\r\n selector: 'nxe-drawer-frame',\r\n imports: [NxeDialogFrameComponent],\r\n template: '<nxe-dialog-frame />',\r\n styleUrl: './nxe-drawer-frame.component.scss',\r\n host: { class: 'nxe-drawer-frame-host' },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeDrawerFrameComponent {}\r\n","import { Dialog } from '@angular/cdk/dialog';\r\nimport { hasModifierKey } from '@angular/cdk/keycodes';\r\nimport { Overlay } from '@angular/cdk/overlay';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { nxePane } from '@nexterajs/ui/styling';\r\nimport { NxeDialogFrameData } from '../dialog/nxe-dialog-frame.component';\r\nimport { NxeDialogRef } from '../dialog/nxe-dialog-ref';\r\nimport { NxeDialogContent } from '../dialog/nxe-dialog.types';\r\nimport { NxeDrawerFrameComponent } from './nxe-drawer-frame.component';\r\nimport { NxeDrawerRef } from './nxe-drawer-ref';\r\nimport { NXE_DRAWER_DATA, NxeDrawerConfig, NxeDrawerContent } from './nxe-drawer.types';\r\n\r\n/**\r\n * Opens modal drawers: a panel that slides in from the screen edge over the page, for a filter panel or a\r\n * quick look at a document that should not leave the list.\r\n *\r\n * ```ts\r\n * const ref = this.drawer.open(PoQuickViewComponent, {\r\n * title: 'PO-2026-0412',\r\n * size: 'lg',\r\n * data: { id: 412 },\r\n * actions: [{ text: 'Buka halaman penuh', type: 'default', result: 'open' }],\r\n * });\r\n * ref.afterClosed().subscribe((result) => result === 'open' && this.router.navigate(['/pos', 412]));\r\n * ```\r\n *\r\n * It is the dialog service with a different shape, and uses the same parts. The content is a component (it\r\n * injects `NXE_DRAWER_DATA` and `NxeDrawerRef`, or the dialog's `NXE_DIALOG_DATA` and `NxeDialogRef`) or a\r\n * template (it receives `{ $implicit: data, dialogRef }`). Focus is trapped, starts on the first tabbable\r\n * element (or `[cdkFocusInitial]`) and returns to the opener on close; Esc and a click on the scrim dismiss it\r\n * unless `disableClose` is set; the page behind does not scroll. `side` is `end` by default and follows the\r\n * writing direction. It slides in over 0.22s, and not under `prefers-reduced-motion: reduce`.\r\n *\r\n * For a panel that is part of the page and does not block it, use `nxe-drawer` with `mode=\"push\"`.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class NxeDrawerService {\r\n private readonly cdk = inject(Dialog);\r\n private readonly overlay = inject(Overlay);\r\n private sequence = 0;\r\n\r\n open<R = unknown, D = unknown, T = unknown>(\r\n content: NxeDrawerContent<T>,\r\n config: NxeDrawerConfig<D, R> = {},\r\n ): NxeDrawerRef<R, T> {\r\n const id = `nxe-drawer-${++this.sequence}`;\r\n const ref = new NxeDrawerRef<R, T>(id, `${id}-title`);\r\n ref.disableClose = !!config.disableClose;\r\n const side = config.side ?? 'end';\r\n\r\n const frame: NxeDialogFrameData = {\r\n ref: ref as NxeDialogRef<unknown, unknown>,\r\n content: content as NxeDialogContent<unknown>,\r\n data: config.data,\r\n title: config.title,\r\n actions: (config.actions ?? []) as NxeDialogFrameData['actions'],\r\n showClose: config.showClose ?? true,\r\n injector: config.injector,\r\n providers: [\r\n { provide: NxeDrawerRef, useValue: ref },\r\n { provide: NXE_DRAWER_DATA, useValue: config.data },\r\n ],\r\n };\r\n\r\n const position = this.overlay.position().global().top('0');\r\n const cdkRef = this.cdk.open<R, NxeDialogFrameData, NxeDrawerFrameComponent>(NxeDrawerFrameComponent, {\r\n id,\r\n role: 'dialog',\r\n ariaModal: true,\r\n ariaLabel: config.ariaLabel ?? null,\r\n ariaLabelledBy: config.ariaLabel ? null : ref.titleId,\r\n ariaDescribedBy: config.ariaDescribedBy ?? null,\r\n autoFocus: config.autoFocus ?? 'first-tabbable',\r\n restoreFocus: true,\r\n hasBackdrop: true,\r\n backdropClass: 'nxe-drawer-backdrop',\r\n panelClass: nxePane('nxe-drawer-pane', `nxe-drawer-${config.size ?? 'md'}`, `nxe-drawer-side-${side}`, ...[config.panelClass ?? []].flat()),\r\n positionStrategy: side === 'start' ? position.start('0') : position.end('0'),\r\n height: '100%',\r\n viewContainerRef: config.viewContainerRef,\r\n // Dismissal is decided below, as the dialog does, so `ref.disableClose` can change while it is open.\r\n disableClose: true,\r\n data: frame,\r\n });\r\n ref._attach(cdkRef);\r\n\r\n cdkRef.keydownEvents.subscribe((event) => {\r\n if (event.key === 'Escape' && !ref.disableClose && !hasModifierKey(event)) {\r\n event.preventDefault();\r\n ref.close();\r\n }\r\n });\r\n cdkRef.backdropClick.subscribe(() => {\r\n if (!ref.disableClose && config.backdropClose !== false) {\r\n ref.close();\r\n }\r\n });\r\n return ref;\r\n }\r\n}\r\n","import { Dialog, DialogRef } from '@angular/cdk/dialog';\r\nimport { hasModifierKey } from '@angular/cdk/keycodes';\r\nimport { Overlay } from '@angular/cdk/overlay';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n afterNextRender,\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n DestroyRef,\r\n ElementRef,\r\n inject,\r\n Injector,\r\n input,\r\n model,\r\n TemplateRef,\r\n viewChild,\r\n ViewContainerRef,\r\n ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { NxeMessageService } from '@nexterajs/ui/core';\r\nimport { nxePane } from '@nexterajs/ui/styling';\r\nimport { NxeDrawerMode, NxeDrawerSide, NxeDrawerSize } from './nxe-drawer.types';\r\n\r\nlet drawerSequence = 0;\r\n\r\n/**\r\n * `nxe-drawer` is a panel at the edge of the screen: a filter panel, the details of the row you clicked.\r\n *\r\n * ```html\r\n * <nxe-button text=\"Filter\" (onClick)=\"filters.set(true)\" />\r\n *\r\n * <nxe-drawer [(opened)]=\"filters\" heading=\"Filter pesanan\" side=\"end\" size=\"sm\">\r\n * <nxe-form-field label=\"Pemasok\"><nxe-text-box [formControl]=\"supplier\" /></nxe-form-field>\r\n * <div nxeDrawerFooter>\r\n * <nxe-button text=\"Atur ulang\" (onClick)=\"reset()\" />\r\n * <nxe-button type=\"default\" text=\"Terapkan\" (onClick)=\"apply(); filters.set(false)\" />\r\n * </div>\r\n * </nxe-drawer>\r\n * ```\r\n *\r\n * **Modes.** `overlay` (default) is modal: the panel opens in a CDK overlay over a scrim, `role=\"dialog\"` with\r\n * `aria-modal`, focus trapped and starting on the first tabbable element (`[cdkFocusInitial]` wins; `autoFocus`\r\n * changes it), Esc and a click on the scrim close it, focus returns to the control that was focused when it\r\n * opened, and the page behind does not scroll. `push` is not modal: the panel is an `<aside>` in the page's\r\n * own layout, a flex item that opens by growing from no width, so the content beside it narrows instead of\r\n * being covered. Put it inside a flex row. It takes focus when it opens and gives it back when it closes,\r\n * and Esc inside it closes it. Changing `mode` while open (a panel that is a push drawer on a desktop and an\r\n * overlay on a phone) moves the same content from one to the other.\r\n *\r\n * **Slots.** The heading is the `heading` input (the panel's accessible name; without one, set `aria-label`).\r\n * The close button, named by `common.close`, shows with `closable` (default) unless `disableClose` is on. Everything else is the body,\r\n * which scrolls, and `[nxeDrawerFooter]` is pinned under it.\r\n *\r\n * `opened` is a two-way model. `side` is `start` or `end` and follows the writing direction, `size` is `sm`,\r\n * `md` (default), `lg`, `xl` or `full`. `disableClose` stops Esc and the scrim from closing it and hides the\r\n * close button (a form that must be saved or discarded). For a drawer opened from code with a component, use\r\n * `NxeDrawerService`.\r\n */\r\n@Component({\r\n selector: 'nxe-drawer',\r\n exportAs: 'nxeDrawer',\r\n imports: [NgTemplateOutlet],\r\n templateUrl: './nxe-drawer.component.html',\r\n styleUrl: './nxe-drawer.component.scss',\r\n host: {\r\n class: 'nxe-drawer',\r\n '[class.nxe-drawer-push]': \"mode() === 'push'\",\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class NxeDrawerComponent {\r\n private readonly dialog = inject(Dialog);\r\n private readonly overlay = inject(Overlay);\r\n private readonly viewContainer = inject(ViewContainerRef);\r\n private readonly injector = inject(Injector);\r\n private readonly messages = inject(NxeMessageService);\r\n private readonly panel = viewChild.required<TemplateRef<unknown>>('panel');\r\n private readonly aside = viewChild<ElementRef<HTMLElement>>('aside');\r\n\r\n /** Whether the drawer is open. Two-way: `[(opened)]`. */\r\n readonly opened = model(false);\r\n /** `overlay` (default, modal) or `push` (in the page's layout). */\r\n readonly mode = input<NxeDrawerMode>('overlay');\r\n /** `start` or `end` (default). */\r\n readonly side = input<NxeDrawerSide>('end');\r\n /** `sm`, `md` (default), `lg`, `xl` or `full`. */\r\n readonly size = input<NxeDrawerSize>('md');\r\n /** The title, which also names the panel. */\r\n readonly heading = input<string>('');\r\n /** Accessible name when there is no `heading`. */\r\n readonly ariaLabel = input<string | undefined>(undefined, { alias: 'aria-label' });\r\n /** Show the close button. Default `true`. */\r\n readonly closable = input(true, { transform: booleanAttribute });\r\n /** Esc and the scrim do not close it, and the close button is hidden. */\r\n readonly disableClose = input(false, { transform: booleanAttribute });\r\n /** Whether a click on the scrim closes an overlay drawer. Default `true`; only applies while `disableClose` is off. */\r\n readonly backdropClose = input(true, { transform: booleanAttribute });\r\n /** What takes initial focus in overlay mode: `first-tabbable` (default), `first-heading`, `dialog` or a CSS selector. */\r\n readonly autoFocus = input<'first-tabbable' | 'first-heading' | 'dialog' | string>('first-tabbable');\r\n /** Extra class(es) for the overlay pane. */\r\n readonly panelClass = input<string | string[]>('');\r\n\r\n private readonly uid = `nxe-drawer-${++drawerSequence}`;\r\n protected readonly titleId = `${this.uid}-title`;\r\n protected readonly closeLabel = computed(() => this.messages.t('common.close'));\r\n protected readonly pushed = computed(() => this.mode() === 'push');\r\n /** The close button is hidden, not disabled, while `disableClose` is on. */\r\n protected readonly showClose = computed(() => this.closable() && !this.disableClose());\r\n\r\n /** Modal and open: the part that lives in the CDK overlay. */\r\n private readonly overlayShown = computed(() => this.opened() && this.mode() === 'overlay');\r\n private overlayRef: DialogRef<unknown, unknown> | null = null;\r\n private returnFocusTo: HTMLElement | null = null;\r\n\r\n constructor() {\r\n const destroyRef = inject(DestroyRef);\r\n toObservable(this.overlayShown)\r\n .pipe(takeUntilDestroyed())\r\n .subscribe((shown) => (shown ? this.attachOverlay() : this.detachOverlay()));\r\n\r\n // A push drawer takes focus when it opens and returns it when it closes; the first value (open at load) is left alone.\r\n let first = true;\r\n toObservable(computed(() => this.opened() && this.pushed()))\r\n .pipe(takeUntilDestroyed())\r\n .subscribe((shown) => {\r\n if (first) {\r\n first = false;\r\n return;\r\n }\r\n if (shown) {\r\n this.returnFocusTo = document.activeElement as HTMLElement | null;\r\n afterNextRender(() => this.aside()?.nativeElement.focus({ preventScroll: true }), { injector: this.injector });\r\n } else {\r\n const aside = this.aside()?.nativeElement;\r\n const target = this.returnFocusTo;\r\n this.returnFocusTo = null;\r\n // Only take focus back if it was in the panel (or lost with it): a click elsewhere keeps its own focus.\r\n const active = document.activeElement;\r\n if (target?.isConnected && (!active || active === document.body || aside?.contains(active))) {\r\n target.focus({ preventScroll: true });\r\n }\r\n }\r\n });\r\n\r\n destroyRef.onDestroy(() => this.detachOverlay());\r\n }\r\n\r\n open(): void {\r\n this.opened.set(true);\r\n }\r\n\r\n close(): void {\r\n this.opened.set(false);\r\n }\r\n\r\n toggle(): void {\r\n this.opened.update((open) => !open);\r\n }\r\n\r\n /** The close button and Esc go through here so `disableClose` is honoured in one place. */\r\n protected requestClose(): void {\r\n if (!this.disableClose()) {\r\n this.close();\r\n }\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (this.pushed() && event.key === 'Escape' && !event.defaultPrevented && !hasModifierKey(event)) {\r\n event.preventDefault();\r\n this.requestClose();\r\n }\r\n }\r\n\r\n private attachOverlay(): void {\r\n if (this.overlayRef) {\r\n return;\r\n }\r\n const side = this.side();\r\n const position = this.overlay.position().global().top('0');\r\n const ref = this.dialog.open(this.panel(), {\r\n id: this.uid,\r\n role: 'dialog',\r\n ariaModal: true,\r\n ariaLabel: this.heading() ? null : (this.ariaLabel() ?? null),\r\n ariaLabelledBy: this.heading() ? this.titleId : null,\r\n autoFocus: this.autoFocus(),\r\n restoreFocus: true,\r\n hasBackdrop: true,\r\n backdropClass: 'nxe-drawer-backdrop',\r\n panelClass: nxePane('nxe-drawer-pane', `nxe-drawer-${this.size()}`, `nxe-drawer-side-${side}`, ...[this.panelClass()].flat()),\r\n positionStrategy: side === 'start' ? position.start('0') : position.end('0'),\r\n height: '100%',\r\n viewContainerRef: this.viewContainer,\r\n // Dismissal is decided here so `disableClose` can change while it is open.\r\n disableClose: true,\r\n });\r\n this.overlayRef = ref;\r\n ref.keydownEvents.subscribe((event) => {\r\n if (event.key === 'Escape' && !this.disableClose() && !hasModifierKey(event)) {\r\n event.preventDefault();\r\n this.close();\r\n }\r\n });\r\n ref.backdropClick.subscribe(() => {\r\n if (!this.disableClose() && this.backdropClose()) {\r\n this.close();\r\n }\r\n });\r\n // Something else closed it (`Dialog.closeAll()`): the model follows.\r\n ref.closed.subscribe(() => {\r\n if (this.overlayRef === ref) {\r\n this.overlayRef = null;\r\n this.opened.set(false);\r\n }\r\n });\r\n }\r\n\r\n private detachOverlay(): void {\r\n const ref = this.overlayRef;\r\n this.overlayRef = null;\r\n ref?.close();\r\n }\r\n}\r\n","<ng-template #panel>\r\n <div class=\"nxe-drawer-frame\">\r\n @if (heading() || showClose()) {\r\n <header class=\"nxe-drawer-header\">\r\n @if (heading()) {\r\n <h2 class=\"nxe-drawer-title\" [id]=\"titleId\">{{ heading() }}</h2>\r\n }\r\n @if (showClose()) {\r\n <button type=\"button\" class=\"nxe-drawer-close\" [attr.aria-label]=\"closeLabel()\" (click)=\"requestClose()\">\r\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" focusable=\"false\">\r\n <path d=\"M3.5 3.5l9 9m0-9l-9 9\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\" />\r\n </svg>\r\n </button>\r\n }\r\n </header>\r\n }\r\n <div class=\"nxe-drawer-body\"><ng-content /></div>\r\n <div class=\"nxe-drawer-footer\"><ng-content select=\"[nxeDrawerFooter]\" /></div>\r\n </div>\r\n</ng-template>\r\n\r\n@if (pushed()) {\r\n <aside\r\n #aside\r\n class=\"nxe-drawer-aside nxe-drawer-{{ size() }} nxe-drawer-side-{{ side() }}\"\r\n [class.nxe-drawer-open]=\"opened()\"\r\n [attr.inert]=\"opened() ? null : ''\"\r\n [attr.aria-labelledby]=\"heading() ? titleId : null\"\r\n [attr.aria-label]=\"heading() ? null : (ariaLabel() ?? null)\"\r\n tabindex=\"-1\"\r\n (keydown)=\"onKeydown($event)\">\r\n <ng-container *ngTemplateOutlet=\"panel\" />\r\n </aside>\r\n}\r\n","// @nexterajs/ui/overlay — public API.\r\nexport * from './lib/dialog/nxe-dialog.types';\r\nexport * from './lib/dialog/nxe-dialog-ref';\r\nexport * from './lib/dialog/nxe-dialog.service';\r\nexport * from './lib/dialog/nxe-confirm.service';\r\nexport * from './lib/dialog/nxe-dialog-title.directive';\r\nexport * from './lib/dialog/nxe-dialog-content.directive';\r\nexport * from './lib/dialog/nxe-dialog-actions.directive';\r\nexport * from './lib/menu/nxe-menu.component';\r\nexport * from './lib/menu/nxe-menu-item.component';\r\nexport * from './lib/menu/nxe-menu-divider.component';\r\nexport * from './lib/menu/nxe-menu-trigger-for.directive';\r\nexport * from './lib/popover/nxe-popover.component';\r\nexport * from './lib/popover/nxe-popover-trigger-for.directive';\r\nexport * from './lib/tooltip/nxe-tooltip.directive';\r\nexport * from './lib/drawer/nxe-drawer.types';\r\nexport * from './lib/drawer/nxe-drawer-ref';\r\nexport * from './lib/drawer/nxe-drawer.service';\r\nexport * from './lib/drawer/nxe-drawer.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["triggerSequence","NATIVELY_ACTIVATABLE"],"mappings":"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"}
|