@nexterajs/ui 0.0.1 → 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 +835 -11
- 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 +621 -69
- package/fesm2022/nexterajs-ui-dropdowns.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-file-uploader.mjs +576 -11
- package/fesm2022/nexterajs-ui-file-uploader.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-forms.mjs +2702 -452
- package/fesm2022/nexterajs-ui-forms.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-grid.mjs +2350 -336
- package/fesm2022/nexterajs-ui-grid.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-intl.mjs +117 -15
- 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 +353 -0
- package/fesm2022/nexterajs-ui-notify.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-overlay.mjs +1671 -0
- package/fesm2022/nexterajs-ui-overlay.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-pivot.mjs +191 -136
- 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-styling.mjs +568 -3
- package/fesm2022/nexterajs-ui-styling.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-tree-view.mjs +150 -18
- package/fesm2022/nexterajs-ui-tree-view.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-validation.mjs +283 -97
- package/fesm2022/nexterajs-ui-validation.mjs.map +1 -1
- package/fesm2022/nexterajs-ui.mjs +6 -0
- package/fesm2022/nexterajs-ui.mjs.map +1 -1
- package/package.json +37 -2
- package/styles/_dropdown.scss +150 -1
- package/styles/_editor.scss +75 -21
- package/styles/_icons.scss +92 -0
- package/styles/_mixins.scss +104 -1
- package/styles/_scrollbar.scss +134 -0
- package/styles/_status.scss +21 -0
- package/styles/_toast.scss +243 -0
- package/styles/_tokens.scss +467 -2
- package/styles/_widget.scss +14 -3
- package/styles/index.scss +10 -4
- package/types/nexterajs-ui-charts.d.ts +446 -0
- package/types/nexterajs-ui-core.d.ts +515 -30
- package/types/nexterajs-ui-display.d.ts +720 -0
- package/types/nexterajs-ui-dropdowns.d.ts +318 -57
- package/types/nexterajs-ui-file-uploader.d.ts +240 -8
- package/types/nexterajs-ui-forms.d.ts +772 -43
- package/types/nexterajs-ui-grid.d.ts +878 -135
- 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 +149 -0
- package/types/nexterajs-ui-overlay.d.ts +703 -0
- package/types/nexterajs-ui-pivot.d.ts +91 -70
- package/types/nexterajs-ui-shell.d.ts +294 -0
- package/types/nexterajs-ui-styling.d.ts +163 -3
- package/types/nexterajs-ui-tree-view.d.ts +56 -4
- package/types/nexterajs-ui-validation.d.ts +110 -22
- package/types/nexterajs-ui.d.ts +6 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nexterajs-ui-notify.mjs","sources":["../../../projects/nextera-ui/notify/src/lib/notify/nxe-toast.config.ts","../../../projects/nextera-ui/notify/src/lib/notify/nxe-toast.component.ts","../../../projects/nextera-ui/notify/src/lib/notify/nxe-toast.service.ts","../../../projects/nextera-ui/notify/src/public-api.ts","../../../projects/nextera-ui/notify/src/nexterajs-ui-notify.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport type NxeToastType = 'success' | 'error' | 'warning' | 'info';\r\n\r\nexport type NxeToastPosition =\r\n | 'toast-top-center'\r\n | 'toast-bottom-center'\r\n | 'toast-top-right'\r\n | 'toast-bottom-right'\r\n | 'toast-top-left'\r\n | 'toast-bottom-left'\r\n | 'toast-top-full-width'\r\n | 'toast-bottom-full-width';\r\n\r\n/** Per-call options. Anything omitted falls back to the global {@link NxeToastConfig}. */\r\nexport interface NxeToastOverride {\r\n /**\r\n * Render the message as HTML rather than text.\r\n *\r\n * The message is still sanitised. Callers pass server-composed strings here — a list of\r\n * validation failures joined with `<br>` — so the markup is not author-controlled and must not\r\n * be trusted, but stripping it entirely would collapse those lists onto one line.\r\n */\r\n enableHtml?: boolean;\r\n /** Dismiss when the body is clicked. The close button works regardless. */\r\n tapToDismiss?: boolean;\r\n /** Milliseconds before auto-dismiss. `0` keeps it up until dismissed. */\r\n timeOut?: number;\r\n closeButton?: boolean;\r\n progressBar?: boolean;\r\n /** Extra classes on the toast element. */\r\n toastClass?: string;\r\n titleClass?: string;\r\n messageClass?: string;\r\n}\r\n\r\nexport interface NxeToastConfig extends NxeToastOverride {\r\n /** Which corner or edge the stack is anchored to. */\r\n positionClass?: NxeToastPosition;\r\n /**\r\n * Put the newest toast at the top of the stack.\r\n *\r\n * Defaults to true, matching the library this replaces. A naive appending list reverses it —\r\n * visibly, and without any test failing.\r\n */\r\n newestOnTop?: boolean;\r\n /** Drop a toast whose type, title and message match one already showing. */\r\n preventDuplicates?: boolean;\r\n /** Cap the stack; 0 means no cap. Older toasts are dismissed first. */\r\n maxOpened?: number;\r\n}\r\n\r\nexport const NXE_TOAST_DEFAULTS: Required<\r\n Pick<\r\n NxeToastConfig,\r\n | 'positionClass'\r\n | 'timeOut'\r\n | 'closeButton'\r\n | 'progressBar'\r\n | 'tapToDismiss'\r\n | 'enableHtml'\r\n | 'newestOnTop'\r\n | 'preventDuplicates'\r\n | 'maxOpened'\r\n >\r\n> = {\r\n positionClass: 'toast-top-right',\r\n timeOut: 5000,\r\n closeButton: false,\r\n progressBar: false,\r\n tapToDismiss: true,\r\n enableHtml: false,\r\n newestOnTop: true,\r\n preventDuplicates: false,\r\n maxOpened: 0,\r\n};\r\n\r\nexport const NXE_TOAST_CONFIG = new InjectionToken<NxeToastConfig>('NXE_TOAST_CONFIG', {\r\n providedIn: 'root',\r\n factory: () => ({}),\r\n});\r\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n output,\n SecurityContext,\n signal,\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { NxeMessageService } from '@nexterajs/ui/core';\nimport { NxeToastType } from './nxe-toast.config';\n\n/**\n * One toast. Rendered by {@link NxeToastService} into its container; not used directly.\n *\n * **The element order is load-bearing.** The close button comes first and is floated right, which\n * is how the library this replaces positioned it — move it after the title and it drops below the\n * text instead of sitting in the corner. Likewise the host carries the classes rather than an\n * inner wrapper, because the shipped stylesheet targets `.nxe-toast-container .nxe-toast`\n * directly and an extra element between them changes what `width` and `margin` apply to.\n *\n * Styles are global (`@nexterajs/ui/styles/_toast.scss`), not encapsulated, so an application's\n * existing overrides keep winning on specificity exactly as they did before.\n *\n * Accessibility, which the original had none of:\n * - `error` and `warning` announce as `alert` (assertive — the user's own action caused it).\n * `success` and `info` announce as `status` (polite).\n * - Focus is never taken. A validation toast typically appears mid-keystroke, and moving focus\n * would pull the caret out of the field being corrected.\n * - The close button is a real `<button>` with a label, reachable by keyboard.\n */\n@Component({\n selector: 'nxe-toast',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClass()',\n '[attr.role]': 'assertive() ? \"alert\" : \"status\"',\n '[attr.aria-live]': 'assertive() ? \"assertive\" : \"polite\"',\n 'aria-atomic': 'true',\n '(click)': 'onBodyClick()',\n },\n template: `\n @if (closeButton()) {\n <button type=\"button\" class=\"nxe-toast-close\" [attr.aria-label]=\"messages.t('notify.close')\" (click)=\"onCloseClick($event)\">\n ×\n </button>\n }\n\n @if (title()) {\n <div [class]=\"'nxe-toast-title ' + titleClass()\" [attr.aria-label]=\"title()\">{{ title() }}</div>\n }\n\n @if (message()) {\n @if (enableHtml()) {\n <div [class]=\"'nxe-toast-message ' + messageClass()\" [innerHTML]=\"safeMessage()\"></div>\n } @else {\n <div [class]=\"'nxe-toast-message ' + messageClass()\">{{ message() }}</div>\n }\n }\n\n @if (progressBar()) {\n <div><div class=\"nxe-toast-progress\" [style.width.%]=\"progressWidth()\"></div></div>\n }\n `,\n})\nexport class NxeToastComponent {\n protected readonly messages = inject(NxeMessageService);\n\n private readonly sanitizer = inject(DomSanitizer);\n\n readonly type = input.required<NxeToastType>();\n readonly title = input<string | null>(null);\n readonly message = input<string | null>(null);\n readonly enableHtml = input(false);\n readonly tapToDismiss = input(true);\n readonly closeButton = input(false);\n readonly progressBar = input(false);\n readonly toastClass = input('');\n readonly titleClass = input('');\n readonly messageClass = input('');\n\n readonly dismissed = output<void>();\n\n /** Pre-enter state: the service clears it a frame later so the opacity transition runs. */\n readonly entering = signal(true);\n /** Set while the leave transition plays; the service removes the view once it finishes. */\n readonly dismissing = signal(false);\n readonly progressWidth = signal(100);\n\n protected readonly assertive = computed(\n () => this.type() === 'error' || this.type() === 'warning',\n );\n\n protected readonly hostClass = computed(() =>\n [\n 'nxe-toast',\n `nxe-toast-${this.type()}`,\n this.toastClass(),\n this.entering() ? 'nxe-toast-entering' : '',\n this.dismissing() ? 'nxe-toast-leaving' : '',\n ]\n .filter(Boolean)\n .join(' '),\n );\n\n /**\n * Sanitised HTML for the message.\n *\n * Callers pass server-composed strings here — validation failures joined with `<br>` — so this\n * is data, not markup the application authored. `sanitize` drops anything executable and keeps\n * the line breaks the lists depend on.\n */\n protected readonly safeMessage = computed<SafeHtml>(\n () => this.sanitizer.sanitize(SecurityContext.HTML, this.message() ?? '') ?? '',\n );\n\n protected onBodyClick(): void {\n if (this.tapToDismiss()) this.dismissed.emit();\n }\n\n protected onCloseClick(event: Event): void {\n // Without this the host click handler also fires, dismissing twice.\n event.stopPropagation();\n this.dismissed.emit();\n }\n}\n","import { DOCUMENT } from '@angular/common';\r\nimport {\r\n ApplicationRef,\r\n ComponentRef,\r\n createComponent,\r\n EnvironmentInjector,\r\n EnvironmentProviders,\r\n inject,\r\n Injectable,\r\n makeEnvironmentProviders,\r\n} from '@angular/core';\r\nimport { NxeToastComponent } from './nxe-toast.component';\r\nimport {\r\n NXE_TOAST_CONFIG,\r\n NXE_TOAST_DEFAULTS,\r\n NxeToastConfig,\r\n NxeToastOverride,\r\n NxeToastType,\r\n} from './nxe-toast.config';\r\n\r\n/** Handle on a shown toast. `dismiss()` is safe to call more than once. */\r\nexport interface NxeToastRef {\r\n dismiss(): void;\r\n readonly type: NxeToastType;\r\n readonly title: string | null;\r\n readonly message: string | null;\r\n}\r\n\r\ninterface ActiveToast extends NxeToastRef {\r\n componentRef: ComponentRef<NxeToastComponent>;\r\n timer: ReturnType<typeof setTimeout> | null;\r\n key: string;\r\n}\r\n\r\n/**\r\n * Configure the toast stack once, at bootstrap.\r\n *\r\n * ```ts\r\n * providers: [provideNxeToast({ positionClass: 'toast-top-center' })]\r\n * ```\r\n */\r\nexport function provideNxeToast(config: NxeToastConfig = {}): EnvironmentProviders {\r\n return makeEnvironmentProviders([{ provide: NXE_TOAST_CONFIG, useValue: config }]);\r\n}\r\n\r\n/**\r\n * Shows toasts.\r\n *\r\n * **The container is deliberately not a CDK overlay.** A CDK overlay pane lands in the same\r\n * `.cdk-overlay-container` as the application's dialogs, which makes paint order creation order —\r\n * so a toast raised right after a dialog closes can end up behind the next dialog that opens.\r\n * Callers do exactly that. A dedicated container with its own stacking context keeps toasts above\r\n * dialogs regardless of the order things were created in.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class NxeToastService {\r\n private readonly appRef = inject(ApplicationRef);\r\n private readonly injector = inject(EnvironmentInjector);\r\n private readonly document = inject(DOCUMENT);\r\n private readonly userConfig = inject(NXE_TOAST_CONFIG);\r\n\r\n private readonly config: Required<\r\n Pick<\r\n NxeToastConfig,\r\n | 'positionClass'\r\n | 'timeOut'\r\n | 'closeButton'\r\n | 'progressBar'\r\n | 'tapToDismiss'\r\n | 'enableHtml'\r\n | 'newestOnTop'\r\n | 'preventDuplicates'\r\n | 'maxOpened'\r\n >\r\n > &\r\n NxeToastConfig = { ...NXE_TOAST_DEFAULTS, ...this.userConfig };\r\n\r\n private container: HTMLElement | null = null;\r\n private readonly active: ActiveToast[] = [];\r\n\r\n success(message?: string | null, title?: string | null, override?: NxeToastOverride): NxeToastRef {\r\n return this.show('success', message, title, override);\r\n }\r\n\r\n error(message?: string | null, title?: string | null, override?: NxeToastOverride): NxeToastRef {\r\n return this.show('error', message, title, override);\r\n }\r\n\r\n warning(message?: string | null, title?: string | null, override?: NxeToastOverride): NxeToastRef {\r\n return this.show('warning', message, title, override);\r\n }\r\n\r\n info(message?: string | null, title?: string | null, override?: NxeToastOverride): NxeToastRef {\r\n return this.show('info', message, title, override);\r\n }\r\n\r\n /** Dismiss everything currently showing. */\r\n clear(): void {\r\n for (const toast of [...this.active]) this.remove(toast);\r\n }\r\n\r\n show(\r\n type: NxeToastType,\r\n message?: string | null,\r\n title?: string | null,\r\n override?: NxeToastOverride,\r\n ): NxeToastRef {\r\n const options = { ...this.config, ...(override ?? {}) };\r\n const key = `${type}|${title ?? ''}|${message ?? ''}`;\r\n\r\n if (options.preventDuplicates) {\r\n const existing = this.active.find((toast) => toast.key === key);\r\n if (existing) return existing;\r\n }\r\n\r\n // Trim the oldest first: the newest toast is the one the user's last action produced.\r\n if (options.maxOpened > 0) {\r\n while (this.active.length >= options.maxOpened) this.remove(this.active[0]);\r\n }\r\n\r\n const componentRef = createComponent(NxeToastComponent, {\r\n environmentInjector: this.injector,\r\n });\r\n\r\n componentRef.setInput('type', type);\r\n componentRef.setInput('title', title ?? null);\r\n componentRef.setInput('message', message ?? null);\r\n componentRef.setInput('enableHtml', options.enableHtml);\r\n componentRef.setInput('tapToDismiss', options.tapToDismiss);\r\n componentRef.setInput('closeButton', options.closeButton);\r\n componentRef.setInput('progressBar', options.progressBar);\r\n componentRef.setInput('toastClass', options.toastClass ?? '');\r\n componentRef.setInput('titleClass', options.titleClass ?? '');\r\n componentRef.setInput('messageClass', options.messageClass ?? '');\r\n\r\n const toast: ActiveToast = {\r\n componentRef,\r\n timer: null,\r\n key,\r\n type,\r\n title: title ?? null,\r\n message: message ?? null,\r\n dismiss: () => this.remove(toast),\r\n };\r\n\r\n componentRef.instance.dismissed.subscribe(() => this.remove(toast));\r\n\r\n const host = this.ensureContainer(options.positionClass);\r\n // `newestOnTop` is prepend-vs-append, and getting it backwards is invisible to every test\r\n // while being immediately obvious to anyone who has used the application.\r\n if (options.newestOnTop) host.insertBefore(componentRef.location.nativeElement, host.firstChild);\r\n else host.appendChild(componentRef.location.nativeElement);\r\n\r\n this.appRef.attachView(componentRef.hostView);\r\n // This view is created imperatively rather than by a template, so nothing else will render it\r\n // before the next scheduled tick. Render it now: a toast that appears a frame late is a\r\n // flicker, and callers legitimately read the DOM straight after raising one.\r\n componentRef.changeDetectorRef.detectChanges();\r\n this.active.push(toast);\r\n\r\n // The toast mounts at opacity 0 and transitions in. Clearing the flag in a later frame is what\r\n // gives the browser a starting value to animate from — set it in the same frame and there is\r\n // no transition at all, just an instant appearance.\r\n requestAnimationFrame(() => {\r\n if (!componentRef.hostView.destroyed) {\r\n componentRef.instance.entering.set(false);\r\n componentRef.changeDetectorRef.detectChanges();\r\n }\r\n });\r\n\r\n if (options.timeOut > 0) {\r\n toast.timer = setTimeout(() => this.remove(toast), options.timeOut);\r\n if (options.progressBar) this.runProgress(toast, options.timeOut);\r\n }\r\n\r\n return toast;\r\n }\r\n\r\n /** Shrink the progress bar across the toast's lifetime, the way the original drove it. */\r\n private runProgress(toast: ActiveToast, timeOut: number): void {\r\n const started = performance.now();\r\n const tick = (now: number): void => {\r\n if (toast.componentRef.hostView.destroyed) return;\r\n const remaining = Math.max(0, 100 - ((now - started) / timeOut) * 100);\r\n toast.componentRef.instance.progressWidth.set(remaining);\r\n toast.componentRef.changeDetectorRef.detectChanges();\r\n if (remaining > 0) requestAnimationFrame(tick);\r\n };\r\n requestAnimationFrame(tick);\r\n }\r\n\r\n private remove(toast: ActiveToast): void {\r\n const index = this.active.indexOf(toast);\r\n if (index === -1) return;\r\n\r\n this.active.splice(index, 1);\r\n if (toast.timer !== null) clearTimeout(toast.timer);\r\n\r\n toast.componentRef.instance.dismissing.set(true);\r\n // Flush the leave class now rather than on the next tick, so the animation starts in the same\r\n // frame as the dismissal and the `animationend` below is guaranteed to have something to wait\r\n // for.\r\n toast.componentRef.changeDetectorRef.detectChanges();\r\n\r\n const destroy = (): void => {\r\n toast.componentRef.destroy();\r\n if (this.active.length === 0 && this.container?.isConnected) {\r\n this.container.remove();\r\n this.container = null;\r\n }\r\n };\r\n\r\n // The host is the toast element itself, and the leave is an opacity transition on it.\r\n const element = toast.componentRef.location.nativeElement as HTMLElement;\r\n\r\n // Wait for the transition, but never depend on it: an element that is display:none, in a\r\n // background tab, or under a zero-duration transition fires no `transitionend` at all, and a\r\n // toast that is never destroyed leaks a view. The timeout matches the 300ms in the stylesheet.\r\n let done = false;\r\n const finish = (): void => {\r\n if (done) return;\r\n done = true;\r\n element.removeEventListener('transitionend', finish);\r\n destroy();\r\n };\r\n element.addEventListener('transitionend', finish);\r\n setTimeout(finish, 350);\r\n }\r\n\r\n private ensureContainer(positionClass: string): HTMLElement {\r\n if (this.container?.isConnected) {\r\n this.container.className = `nxe-toast-container ${positionClass}`;\r\n return this.container;\r\n }\r\n\r\n const container = this.document.createElement('div');\r\n container.className = `nxe-toast-container ${positionClass}`;\r\n // Deliberately no `aria-live` here: each toast carries its own role, and a live region around\r\n // them would make every toast announce twice.\r\n this.document.body.appendChild(container);\r\n this.container = container;\r\n return container;\r\n }\r\n}\r\n","// @nexterajs/ui/notify — public API.\r\nexport * from './lib/notify/nxe-toast.config';\r\nexport * from './lib/notify/nxe-toast.component';\r\nexport * from './lib/notify/nxe-toast.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|