@ngstarter-ui/components 21.0.45 → 21.0.47

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.
@@ -252,7 +252,7 @@ class Toolbar {
252
252
  });
253
253
  }
254
254
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: Toolbar, deps: [], target: i0.ɵɵFactoryTarget.Component });
255
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: Toolbar, isStandalone: true, selector: "ngs-toolbar", host: { properties: { "class.ngs-toolbar-stacked": "!!_rows().length" }, classAttribute: "ngs-toolbar" }, queries: [{ propertyName: "toolbarItems", predicate: ToolbarItem, descendants: true, isSignal: true }, { propertyName: "navItems", predicate: ToolbarNav, descendants: true, isSignal: true }, { propertyName: "spacers", predicate: ToolbarSpacer, descendants: true, isSignal: true }, { propertyName: "_rows", predicate: ToolbarRow, descendants: true, isSignal: true }], exportAs: ["ngsToolbar"], ngImport: i0, template: "<ng-content/>\n\n@if (_overflowItems().length > 0) {\n <button ngsIconButton (click)=\"_openOverflowDialog(overflowDialog)\">\n <ngs-icon name=\"fluent:more-vertical-24-regular\" />\n </button>\n\n <ng-template #overflowDialog>\n <div class=\"ngs-toolbar-overflow-dialog\">\n <div class=\"ngs-toolbar-overflow-dialog-header\">\n <button ngsIconButton (click)=\"_closeOverflowDialog()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" />\n </button>\n </div>\n\n <div class=\"ngs-toolbar-overflow-dialog-content flex flex-col gap-6\">\n @for (item of _overflowItems(); track $index) {\n <div class=\"flex items-center gap-4\">\n <ng-template [ngTemplateOutlet]=\"item.template()\" />\n </div>\n }\n </div>\n </div>\n </ng-template>\n}\n", styles: [":host{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 4);overflow:hidden;flex-wrap:nowrap;width:100%}:host:has(>ngs-toolbar-row){flex-direction:column}:host>ngs-toolbar-item{flex-shrink:0}.ngs-toolbar-overflow-dialog{display:flex;flex-direction:column;height:100%}.ngs-toolbar-overflow-dialog-header{display:flex;justify-content:flex-end;padding:calc(var(--spacing, .25rem) * 2)}.ngs-toolbar-overflow-dialog-content{display:flex;flex-direction:column;padding:calc(var(--spacing, .25rem) * 4);gap:calc(var(--spacing, .25rem) * 2);flex:1;overflow-y:auto}.ngs-toolbar-overflow-item{display:flex;align-items:center;width:100%}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: Icon, selector: "ngs-icon", inputs: ["name"], exportAs: ["ngsIcon"] }, { kind: "component", type: Button, selector: " button[ngsButton], button[ngsIconButton], a[ngsButton], a[ngsIconButton] ", inputs: ["ngsButton", "ngsIconButton", "loading", "disabled", "disabledInteractive", "disableRipple", "reverse", "fullWidth", "hideTextOnMobile"], exportAs: ["ngsButton"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
255
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: Toolbar, isStandalone: true, selector: "ngs-toolbar", host: { properties: { "class.ngs-toolbar-stacked": "!!_rows().length" }, classAttribute: "ngs-toolbar" }, queries: [{ propertyName: "toolbarItems", predicate: ToolbarItem, descendants: true, isSignal: true }, { propertyName: "navItems", predicate: ToolbarNav, descendants: true, isSignal: true }, { propertyName: "spacers", predicate: ToolbarSpacer, descendants: true, isSignal: true }, { propertyName: "_rows", predicate: ToolbarRow, descendants: true, isSignal: true }], exportAs: ["ngsToolbar"], ngImport: i0, template: "<div>\n <ng-content select=\"ngs-toolbar-title,ngs-toolbar-subtitle\" />\n</div>\n\n<ng-content/>\n\n@if (_overflowItems().length > 0) {\n <button ngsIconButton (click)=\"_openOverflowDialog(overflowDialog)\">\n <ngs-icon name=\"fluent:more-vertical-24-regular\" />\n </button>\n\n <ng-template #overflowDialog>\n <div class=\"ngs-toolbar-overflow-dialog\">\n <div class=\"ngs-toolbar-overflow-dialog-header\">\n <button ngsIconButton (click)=\"_closeOverflowDialog()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" />\n </button>\n </div>\n\n <div class=\"ngs-toolbar-overflow-dialog-content flex flex-col gap-6\">\n @for (item of _overflowItems(); track $index) {\n <div class=\"flex items-center gap-4\">\n <ng-template [ngTemplateOutlet]=\"item.template()\" />\n </div>\n }\n </div>\n </div>\n </ng-template>\n}\n", styles: [":host{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 4);overflow:hidden;flex-wrap:nowrap;width:100%}:host:has(>ngs-toolbar-row){flex-direction:column}:host>ngs-toolbar-item{flex-shrink:0}.ngs-toolbar-overflow-dialog{display:flex;flex-direction:column;height:100%}.ngs-toolbar-overflow-dialog-header{display:flex;justify-content:flex-end;padding:calc(var(--spacing, .25rem) * 2)}.ngs-toolbar-overflow-dialog-content{display:flex;flex-direction:column;padding:calc(var(--spacing, .25rem) * 4);gap:calc(var(--spacing, .25rem) * 2);flex:1;overflow-y:auto}.ngs-toolbar-overflow-item{display:flex;align-items:center;width:100%}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: Icon, selector: "ngs-icon", inputs: ["name"], exportAs: ["ngsIcon"] }, { kind: "component", type: Button, selector: " button[ngsButton], button[ngsIconButton], a[ngsButton], a[ngsIconButton] ", inputs: ["ngsButton", "ngsIconButton", "loading", "disabled", "disabledInteractive", "disableRipple", "reverse", "fullWidth", "hideTextOnMobile"], exportAs: ["ngsButton"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
256
256
  }
257
257
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: Toolbar, decorators: [{
258
258
  type: Component,
@@ -263,7 +263,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
263
263
  ], host: {
264
264
  'class': 'ngs-toolbar',
265
265
  '[class.ngs-toolbar-stacked]': '!!_rows().length'
266
- }, template: "<ng-content/>\n\n@if (_overflowItems().length > 0) {\n <button ngsIconButton (click)=\"_openOverflowDialog(overflowDialog)\">\n <ngs-icon name=\"fluent:more-vertical-24-regular\" />\n </button>\n\n <ng-template #overflowDialog>\n <div class=\"ngs-toolbar-overflow-dialog\">\n <div class=\"ngs-toolbar-overflow-dialog-header\">\n <button ngsIconButton (click)=\"_closeOverflowDialog()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" />\n </button>\n </div>\n\n <div class=\"ngs-toolbar-overflow-dialog-content flex flex-col gap-6\">\n @for (item of _overflowItems(); track $index) {\n <div class=\"flex items-center gap-4\">\n <ng-template [ngTemplateOutlet]=\"item.template()\" />\n </div>\n }\n </div>\n </div>\n </ng-template>\n}\n", styles: [":host{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 4);overflow:hidden;flex-wrap:nowrap;width:100%}:host:has(>ngs-toolbar-row){flex-direction:column}:host>ngs-toolbar-item{flex-shrink:0}.ngs-toolbar-overflow-dialog{display:flex;flex-direction:column;height:100%}.ngs-toolbar-overflow-dialog-header{display:flex;justify-content:flex-end;padding:calc(var(--spacing, .25rem) * 2)}.ngs-toolbar-overflow-dialog-content{display:flex;flex-direction:column;padding:calc(var(--spacing, .25rem) * 4);gap:calc(var(--spacing, .25rem) * 2);flex:1;overflow-y:auto}.ngs-toolbar-overflow-item{display:flex;align-items:center;width:100%}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
266
+ }, template: "<div>\n <ng-content select=\"ngs-toolbar-title,ngs-toolbar-subtitle\" />\n</div>\n\n<ng-content/>\n\n@if (_overflowItems().length > 0) {\n <button ngsIconButton (click)=\"_openOverflowDialog(overflowDialog)\">\n <ngs-icon name=\"fluent:more-vertical-24-regular\" />\n </button>\n\n <ng-template #overflowDialog>\n <div class=\"ngs-toolbar-overflow-dialog\">\n <div class=\"ngs-toolbar-overflow-dialog-header\">\n <button ngsIconButton (click)=\"_closeOverflowDialog()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" />\n </button>\n </div>\n\n <div class=\"ngs-toolbar-overflow-dialog-content flex flex-col gap-6\">\n @for (item of _overflowItems(); track $index) {\n <div class=\"flex items-center gap-4\">\n <ng-template [ngTemplateOutlet]=\"item.template()\" />\n </div>\n }\n </div>\n </div>\n </ng-template>\n}\n", styles: [":host{display:flex;align-items:center;gap:calc(var(--spacing, .25rem) * 4);overflow:hidden;flex-wrap:nowrap;width:100%}:host:has(>ngs-toolbar-row){flex-direction:column}:host>ngs-toolbar-item{flex-shrink:0}.ngs-toolbar-overflow-dialog{display:flex;flex-direction:column;height:100%}.ngs-toolbar-overflow-dialog-header{display:flex;justify-content:flex-end;padding:calc(var(--spacing, .25rem) * 2)}.ngs-toolbar-overflow-dialog-content{display:flex;flex-direction:column;padding:calc(var(--spacing, .25rem) * 4);gap:calc(var(--spacing, .25rem) * 2);flex:1;overflow-y:auto}.ngs-toolbar-overflow-item{display:flex;align-items:center;width:100%}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
267
267
  }], ctorParameters: () => [], propDecorators: { toolbarItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ToolbarItem), { ...{ descendants: true }, isSignal: true }] }], navItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ToolbarNav), { ...{ descendants: true }, isSignal: true }] }], spacers: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ToolbarSpacer), { ...{ descendants: true }, isSignal: true }] }], _rows: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => ToolbarRow), { ...{ descendants: true }, isSignal: true }] }] } });
268
268
 
269
269
  class ToolbarNavLink {
@@ -282,16 +282,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
282
282
 
283
283
  class ToolbarTitle {
284
284
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ToolbarTitle, deps: [], target: i0.ɵɵFactoryTarget.Component });
285
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: ToolbarTitle, isStandalone: true, selector: "ngs-toolbar-title", ngImport: i0, template: "<ng-content/>\n", styles: [":host{font-size:var(--ngs-font-size-lg);font-weight:700;white-space:nowrap}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] });
285
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: ToolbarTitle, isStandalone: true, selector: "ngs-toolbar-title", host: { classAttribute: "ngs-toolbar-title" }, exportAs: ["ngsToolbarTitle"], ngImport: i0, template: "<ng-content/>\n", styles: [":host{display:block;font-size:var(--ngs-font-size-lg);font-weight:700;white-space:nowrap}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] });
286
286
  }
287
287
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ToolbarTitle, decorators: [{
288
288
  type: Component,
289
- args: [{ selector: 'ngs-toolbar-title', imports: [], template: "<ng-content/>\n", styles: [":host{font-size:var(--ngs-font-size-lg);font-weight:700;white-space:nowrap}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
289
+ args: [{ selector: 'ngs-toolbar-title', exportAs: 'ngsToolbarTitle', host: {
290
+ 'class': 'ngs-toolbar-title'
291
+ }, template: "<ng-content/>\n", styles: [":host{display:block;font-size:var(--ngs-font-size-lg);font-weight:700;white-space:nowrap}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
292
+ }] });
293
+
294
+ class ToolbarSubtitle {
295
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ToolbarSubtitle, deps: [], target: i0.ɵɵFactoryTarget.Component });
296
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: ToolbarSubtitle, isStandalone: true, selector: "ngs-toolbar-subtitle", host: { classAttribute: "ngs-toolbar-subtitle" }, exportAs: ["ngsToolbarSubtitle"], ngImport: i0, template: "<ng-content/>\n", styles: [":host{--ngs-toolbar-subtitle-font-size: var(--ngs-font-size-sm);--ngs-toolbar-subtitle-color: var(--ngs-color-secondary);--ngs-toolbar-subtitle-weight: 400;display:block;font-size:var(--ngs-toolbar-subtitle-font-size);color:var(--ngs-toolbar-subtitle-color);font-weight:var(--ngs-toolbar-subtitle-weight)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] });
297
+ }
298
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ToolbarSubtitle, decorators: [{
299
+ type: Component,
300
+ args: [{ selector: 'ngs-toolbar-subtitle', exportAs: 'ngsToolbarSubtitle', host: {
301
+ 'class': 'ngs-toolbar-subtitle'
302
+ }, template: "<ng-content/>\n", styles: [":host{--ngs-toolbar-subtitle-font-size: var(--ngs-font-size-sm);--ngs-toolbar-subtitle-color: var(--ngs-color-secondary);--ngs-toolbar-subtitle-weight: 400;display:block;font-size:var(--ngs-toolbar-subtitle-font-size);color:var(--ngs-toolbar-subtitle-color);font-weight:var(--ngs-toolbar-subtitle-weight)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
290
303
  }] });
291
304
 
292
305
  /**
293
306
  * Generated bundle index. Do not edit.
294
307
  */
295
308
 
296
- export { Toolbar, ToolbarItem, ToolbarNav, ToolbarNavLink, ToolbarRow, ToolbarSpacer, ToolbarTitle };
309
+ export { Toolbar, ToolbarItem, ToolbarNav, ToolbarNavLink, ToolbarRow, ToolbarSpacer, ToolbarSubtitle, ToolbarTitle };
297
310
  //# sourceMappingURL=ngstarter-ui-components-toolbar.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-toolbar.mjs","sources":["../../../projects/components/toolbar/src/toolbar-item/toolbar-item.ts","../../../projects/components/toolbar/src/toolbar-item/toolbar-item.html","../../../projects/components/toolbar/src/toolbar-nav/toolbar-nav.ts","../../../projects/components/toolbar/src/toolbar-nav/toolbar-nav.html","../../../projects/components/toolbar/src/toolbar-spacer/toolbar-spacer.ts","../../../projects/components/toolbar/src/toolbar-spacer/toolbar-spacer.html","../../../projects/components/toolbar/src/toolbar-row/toolbar-row.ts","../../../projects/components/toolbar/src/toolbar-row/toolbar-row.html","../../../projects/components/toolbar/src/toolbar/toolbar.ts","../../../projects/components/toolbar/src/toolbar/toolbar.html","../../../projects/components/toolbar/src/toolbar-nav-link/toolbar-nav-link.ts","../../../projects/components/toolbar/src/toolbar-title/toolbar-title.ts","../../../projects/components/toolbar/src/toolbar-title/toolbar-title.html","../../../projects/components/toolbar/ngstarter-ui-components-toolbar.ts"],"sourcesContent":["import { Component, model, inject, ElementRef, viewChild, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ToolbarBaseItem } from '../toolbar-base-item';\n\n@Component({\n selector: 'ngs-toolbar-item',\n imports: [NgTemplateOutlet],\n templateUrl: './toolbar-item.html',\n styleUrl: './toolbar-item.scss',\n host: {\n '[class.ngs-toolbar-item-hidden]': 'hidden()',\n }\n})\nexport class ToolbarItem implements ToolbarBaseItem {\n readonly elementRef = inject(ElementRef);\n readonly hidden = model(false);\n readonly template = viewChild.required<TemplateRef<any>>('itemTemplate');\n}\n","<ng-template #itemTemplate>\n <ng-content/>\n</ng-template>\n\n<ng-container [ngTemplateOutlet]=\"itemTemplate\" />\n","import { Component, model, inject, ElementRef, viewChild, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ToolbarBaseItem } from '../toolbar-base-item';\n\n@Component({\n selector: 'ngs-toolbar-nav',\n exportAs: 'ngsToolbarNav',\n standalone: true,\n imports: [NgTemplateOutlet],\n templateUrl: './toolbar-nav.html',\n styleUrl: './toolbar-nav.scss',\n host: {\n 'class': 'ngs-toolbar-nav',\n '[class.ngs-toolbar-item-hidden]': 'hidden()',\n }\n})\nexport class ToolbarNav implements ToolbarBaseItem {\n readonly elementRef = inject(ElementRef);\n readonly hidden = model(false);\n readonly template = viewChild.required<TemplateRef<any>>('itemTemplate');\n}\n","<ng-template #itemTemplate>\n <div class=\"ngs-toolbar-nav-container\">\n <ng-content />\n </div>\n</ng-template>\n\n<ng-container [ngTemplateOutlet]=\"itemTemplate\" />\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-toolbar-spacer',\n imports: [],\n templateUrl: './toolbar-spacer.html',\n styleUrl: './toolbar-spacer.scss',\n})\nexport class ToolbarSpacer {\n\n}\n","","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-toolbar-row',\n imports: [],\n templateUrl: './toolbar-row.html',\n styleUrl: './toolbar-row.scss',\n})\nexport class ToolbarRow {\n\n}\n","<ng-content/>\n","import {\n AfterViewInit,\n Component,\n contentChildren,\n effect,\n ElementRef,\n inject,\n TemplateRef,\n Injector,\n NgZone,\n OnDestroy,\n PLATFORM_ID,\n signal\n} from '@angular/core';\nimport { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport { ToolbarItem } from '../toolbar-item/toolbar-item';\nimport { ToolbarNav } from '../toolbar-nav/toolbar-nav';\nimport { ToolbarSpacer } from '../toolbar-spacer/toolbar-spacer';\nimport { ToolbarRow } from '../toolbar-row/toolbar-row';\nimport { ToolbarBaseItem } from '../toolbar-base-item';\nimport { Dialog, DialogRef } from '@ngstarter-ui/components/dialog';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { Button } from '@ngstarter-ui/components/button';\n\n@Component({\n selector: 'ngs-toolbar',\n exportAs: 'ngsToolbar',\n imports: [\n Icon,\n Button,\n NgTemplateOutlet\n ],\n templateUrl: './toolbar.html',\n styleUrl: './toolbar.scss',\n host: {\n 'class': 'ngs-toolbar',\n '[class.ngs-toolbar-stacked]': '!!_rows().length'\n }\n})\nexport class Toolbar implements AfterViewInit, OnDestroy {\n private _elementRef = inject(ElementRef);\n private _zone = inject(NgZone);\n private _platformId = inject(PLATFORM_ID);\n private _injector = inject(Injector);\n private _dialog = inject(Dialog);\n\n readonly toolbarItems = contentChildren(ToolbarItem, { descendants: true });\n readonly navItems = contentChildren(ToolbarNav, { descendants: true });\n readonly items = signal<ToolbarBaseItem[]>([]);\n readonly spacers = contentChildren(ToolbarSpacer, { descendants: true });\n readonly _rows = contentChildren(ToolbarRow, { descendants: true });\n\n protected readonly _overflowItems = signal<ToolbarBaseItem[]>([]);\n protected _dialogRef: DialogRef<any> | null = null;\n private _resizeObserver?: ResizeObserver;\n private _itemWidths = new Map<ToolbarBaseItem, number>();\n\n constructor() {\n effect(() => {\n this.items.set([...this.toolbarItems(), ...this.navItems()]);\n });\n }\n\n ngAfterViewInit() {\n if (!isPlatformBrowser(this._platformId)) {\n return;\n }\n\n this._zone.runOutsideAngular(() => {\n this._resizeObserver = new ResizeObserver(() => {\n this._updateOverflow();\n });\n this._resizeObserver.observe(this._elementRef.nativeElement);\n\n // Also observe each item to update cached widths if they change\n this.items().forEach(item => {\n const el = item.elementRef.nativeElement;\n if (el instanceof HTMLElement) {\n this._resizeObserver?.observe(el);\n }\n });\n });\n\n // Handle items changes\n effect(() => {\n const currentItems = this.items();\n this._zone.runOutsideAngular(() => {\n // Clear widths for items that are gone\n for (const item of this._itemWidths.keys()) {\n if (!currentItems.includes(item)) {\n this._itemWidths.delete(item);\n }\n }\n\n currentItems.forEach(item => {\n const el = item.elementRef.nativeElement;\n if (el instanceof HTMLElement) {\n this._resizeObserver?.observe(el);\n }\n });\n this._updateOverflow();\n });\n }, { injector: this._injector });\n\n // Initial check\n setTimeout(() => {\n this._updateOverflow();\n }, 100);\n }\n\n ngOnDestroy() {\n this._resizeObserver?.disconnect();\n }\n\n protected _openOverflowDialog(template: TemplateRef<any>) {\n this._dialogRef = this._dialog.open(template, {\n width: '100%',\n height: '100%',\n maxWidth: '100vw',\n panelClass: 'ngs-toolbar-overflow-dialog-panel'\n });\n\n this._dialogRef.afterClosed().subscribe(() => {\n this._dialogRef = null;\n });\n }\n\n protected _closeOverflowDialog() {\n this._dialogRef?.close();\n }\n\n private _updateOverflow() {\n this._zone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n const container = this._elementRef.nativeElement;\n const containerWidth = container.clientWidth;\n const items = this.items();\n\n if (containerWidth === 0) {\n return;\n }\n\n if (items.length === 0) {\n if (this._overflowItems().length > 0) {\n this._zone.run(() => this._overflowItems.set([]));\n }\n return;\n }\n\n // Identify other elements taking up space (title, spacer, etc.)\n const children = Array.from(container.children) as HTMLElement[];\n let staticWidth = 0;\n const gap = 16;\n let staticCount = 0;\n\n children.forEach(child => {\n const tagName = child.tagName.toLowerCase();\n const isItem = tagName === 'ngs-toolbar-item' || tagName === 'ngs-toolbar-nav';\n const isOverflowButton = (tagName === 'button' || tagName === 'ngs-menu' || child.hasAttribute('ngs-menu-trigger') || child.hasAttribute('ngs-menu-trigger-for') || child.hasAttribute('ngsmenutriggerfor')) && (\n child.hasAttribute('ngs-icon-button') ||\n child.hasAttribute('ngsiconbutton') ||\n child.getAttribute('ngs-icon-button') !== null ||\n child.querySelector('ngs-icon[name*=\"more-vertical\"]') ||\n child.querySelector('ngs-icon[name*=\"more\"]') ||\n child.querySelector('button[ngs-icon-button]') ||\n child.querySelector('button[ngsiconbutton]')\n );\n const isMenu = tagName === 'ngs-menu' || child.hasAttribute('ngs-menu') || child.querySelector('ngs-menu');\n const isSpacer = tagName === 'ngs-toolbar-spacer' || child.hasAttribute('ngs-toolbar-spacer');\n\n // Check if this child contains any of the ToolbarItems we're tracking\n const containsManagedItem = items.some(item => child.contains(item.elementRef.nativeElement));\n\n const isVisible = child.offsetParent !== null || child.offsetWidth > 0;\n\n if (!isItem && !containsManagedItem && !isOverflowButton && !isMenu && isVisible) {\n if (!isSpacer) {\n staticWidth += child.offsetWidth;\n }\n staticCount++;\n }\n });\n\n // 1. Update widths of items that are NOT hidden\n let allWidthsKnown = true;\n items.forEach(item => {\n if (!item.hidden()) {\n const width = item.elementRef.nativeElement.offsetWidth;\n if (width > 0) {\n this._itemWidths.set(item, width);\n }\n }\n if (!this._itemWidths.has(item)) {\n allWidthsKnown = false;\n }\n });\n\n // 2. If some widths are unknown (e.g., hidden since start), we MUST show them briefly to measure\n if (!allWidthsKnown) {\n this._zone.run(() => {\n items.forEach(item => {\n if (!this._itemWidths.has(item)) {\n item.hidden.set(false);\n }\n });\n });\n return;\n }\n\n // 3. Calculate how many items fit\n const overflowItems: ToolbarBaseItem[] = [];\n const overflowButtonWidth = 48; // A bit more room for the overflow button\n\n // Total width if ALL items fit\n const totalItemsWidth = items.reduce((acc, item) => acc + (this._itemWidths.get(item) || 0), 0);\n const totalVisibleCountAll = staticCount + items.length;\n const totalGapsWidthAll = totalVisibleCountAll > 1 ? (totalVisibleCountAll - 1) * gap : 0;\n const totalWidthAllItems = staticWidth + totalItemsWidth + totalGapsWidthAll;\n\n if (totalWidthAllItems <= containerWidth) {\n this._zone.run(() => {\n items.forEach(item => item.hidden.set(false));\n if (this._overflowItems().length > 0) {\n this._overflowItems.set([]);\n }\n });\n return;\n }\n\n // Not all items fit, we need overflow button\n let currentItemsWidth = 0;\n let fitCount = 0;\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const width = this._itemWidths.get(item) || 0;\n\n // If we add this item, we'll have:\n // staticCount + fitCount + 1 (this item) + 1 (overflow button)\n const potentialVisibleCount = staticCount + fitCount + 2;\n const potentialGapsWidth = (potentialVisibleCount - 1) * gap;\n const totalWidthWithThisItemAndOverflow = staticWidth + currentItemsWidth + width + potentialGapsWidth + overflowButtonWidth;\n\n if (totalWidthWithThisItemAndOverflow > containerWidth) {\n break;\n }\n\n currentItemsWidth += width;\n fitCount++;\n }\n\n for (let i = fitCount; i < items.length; i++) {\n overflowItems.push(items[i]);\n }\n\n // 4. Update visibility\n this._zone.run(() => {\n items.forEach((item, index) => {\n const shouldBeHidden = index >= fitCount;\n if (item.hidden() !== shouldBeHidden) {\n item.hidden.set(shouldBeHidden);\n }\n });\n\n const currentOverflow = this._overflowItems();\n const isSame = currentOverflow.length === overflowItems.length &&\n currentOverflow.every((item, index) => item === overflowItems[index]);\n if (!isSame) {\n this._overflowItems.set(overflowItems);\n }\n });\n });\n });\n }\n}\n","<ng-content/>\n\n@if (_overflowItems().length > 0) {\n <button ngsIconButton (click)=\"_openOverflowDialog(overflowDialog)\">\n <ngs-icon name=\"fluent:more-vertical-24-regular\" />\n </button>\n\n <ng-template #overflowDialog>\n <div class=\"ngs-toolbar-overflow-dialog\">\n <div class=\"ngs-toolbar-overflow-dialog-header\">\n <button ngsIconButton (click)=\"_closeOverflowDialog()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" />\n </button>\n </div>\n\n <div class=\"ngs-toolbar-overflow-dialog-content flex flex-col gap-6\">\n @for (item of _overflowItems(); track $index) {\n <div class=\"flex items-center gap-4\">\n <ng-template [ngTemplateOutlet]=\"item.template()\" />\n </div>\n }\n </div>\n </div>\n </ng-template>\n}\n","import { Component, input } from '@angular/core';\n\n@Component({\n selector: 'ngs-toolbar-nav-link,a[ngs-toolbar-nav-link]',\n exportAs: 'ngsToolbarNavLink',\n standalone: true,\n template: '<ng-content />',\n imports: [],\n styleUrl: './toolbar-nav-link.scss',\n host: {\n 'class': 'ngs-toolbar-nav-link',\n '[class.ngs-toolbar-nav-link-active]': 'active()',\n }\n})\nexport class ToolbarNavLink {\n /** The active state of the link. */\n readonly active = input(false);\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-toolbar-title',\n imports: [],\n templateUrl: './toolbar-title.html',\n styleUrl: './toolbar-title.scss',\n})\nexport class ToolbarTitle {\n\n}\n","<ng-content/>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngstarter-ui-components-toolbar.mjs","sources":["../../../projects/components/toolbar/src/toolbar-item/toolbar-item.ts","../../../projects/components/toolbar/src/toolbar-item/toolbar-item.html","../../../projects/components/toolbar/src/toolbar-nav/toolbar-nav.ts","../../../projects/components/toolbar/src/toolbar-nav/toolbar-nav.html","../../../projects/components/toolbar/src/toolbar-spacer/toolbar-spacer.ts","../../../projects/components/toolbar/src/toolbar-spacer/toolbar-spacer.html","../../../projects/components/toolbar/src/toolbar-row/toolbar-row.ts","../../../projects/components/toolbar/src/toolbar-row/toolbar-row.html","../../../projects/components/toolbar/src/toolbar/toolbar.ts","../../../projects/components/toolbar/src/toolbar/toolbar.html","../../../projects/components/toolbar/src/toolbar-nav-link/toolbar-nav-link.ts","../../../projects/components/toolbar/src/toolbar-title/toolbar-title.ts","../../../projects/components/toolbar/src/toolbar-title/toolbar-title.html","../../../projects/components/toolbar/src/toolbar-subtitle/toolbar-subtitle.ts","../../../projects/components/toolbar/src/toolbar-subtitle/toolbar-subtitle.html","../../../projects/components/toolbar/ngstarter-ui-components-toolbar.ts"],"sourcesContent":["import { Component, model, inject, ElementRef, viewChild, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ToolbarBaseItem } from '../toolbar-base-item';\n\n@Component({\n selector: 'ngs-toolbar-item',\n imports: [NgTemplateOutlet],\n templateUrl: './toolbar-item.html',\n styleUrl: './toolbar-item.scss',\n host: {\n '[class.ngs-toolbar-item-hidden]': 'hidden()',\n }\n})\nexport class ToolbarItem implements ToolbarBaseItem {\n readonly elementRef = inject(ElementRef);\n readonly hidden = model(false);\n readonly template = viewChild.required<TemplateRef<any>>('itemTemplate');\n}\n","<ng-template #itemTemplate>\n <ng-content/>\n</ng-template>\n\n<ng-container [ngTemplateOutlet]=\"itemTemplate\" />\n","import { Component, model, inject, ElementRef, viewChild, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ToolbarBaseItem } from '../toolbar-base-item';\n\n@Component({\n selector: 'ngs-toolbar-nav',\n exportAs: 'ngsToolbarNav',\n standalone: true,\n imports: [NgTemplateOutlet],\n templateUrl: './toolbar-nav.html',\n styleUrl: './toolbar-nav.scss',\n host: {\n 'class': 'ngs-toolbar-nav',\n '[class.ngs-toolbar-item-hidden]': 'hidden()',\n }\n})\nexport class ToolbarNav implements ToolbarBaseItem {\n readonly elementRef = inject(ElementRef);\n readonly hidden = model(false);\n readonly template = viewChild.required<TemplateRef<any>>('itemTemplate');\n}\n","<ng-template #itemTemplate>\n <div class=\"ngs-toolbar-nav-container\">\n <ng-content />\n </div>\n</ng-template>\n\n<ng-container [ngTemplateOutlet]=\"itemTemplate\" />\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-toolbar-spacer',\n imports: [],\n templateUrl: './toolbar-spacer.html',\n styleUrl: './toolbar-spacer.scss',\n})\nexport class ToolbarSpacer {\n\n}\n","","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-toolbar-row',\n imports: [],\n templateUrl: './toolbar-row.html',\n styleUrl: './toolbar-row.scss',\n})\nexport class ToolbarRow {\n\n}\n","<ng-content/>\n","import {\n AfterViewInit,\n Component,\n contentChildren,\n effect,\n ElementRef,\n inject,\n TemplateRef,\n Injector,\n NgZone,\n OnDestroy,\n PLATFORM_ID,\n signal\n} from '@angular/core';\nimport { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport { ToolbarItem } from '../toolbar-item/toolbar-item';\nimport { ToolbarNav } from '../toolbar-nav/toolbar-nav';\nimport { ToolbarSpacer } from '../toolbar-spacer/toolbar-spacer';\nimport { ToolbarRow } from '../toolbar-row/toolbar-row';\nimport { ToolbarBaseItem } from '../toolbar-base-item';\nimport { Dialog, DialogRef } from '@ngstarter-ui/components/dialog';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { Button } from '@ngstarter-ui/components/button';\n\n@Component({\n selector: 'ngs-toolbar',\n exportAs: 'ngsToolbar',\n imports: [\n Icon,\n Button,\n NgTemplateOutlet\n ],\n templateUrl: './toolbar.html',\n styleUrl: './toolbar.scss',\n host: {\n 'class': 'ngs-toolbar',\n '[class.ngs-toolbar-stacked]': '!!_rows().length'\n }\n})\nexport class Toolbar implements AfterViewInit, OnDestroy {\n private _elementRef = inject(ElementRef);\n private _zone = inject(NgZone);\n private _platformId = inject(PLATFORM_ID);\n private _injector = inject(Injector);\n private _dialog = inject(Dialog);\n\n readonly toolbarItems = contentChildren(ToolbarItem, { descendants: true });\n readonly navItems = contentChildren(ToolbarNav, { descendants: true });\n readonly items = signal<ToolbarBaseItem[]>([]);\n readonly spacers = contentChildren(ToolbarSpacer, { descendants: true });\n readonly _rows = contentChildren(ToolbarRow, { descendants: true });\n\n protected readonly _overflowItems = signal<ToolbarBaseItem[]>([]);\n protected _dialogRef: DialogRef<any> | null = null;\n private _resizeObserver?: ResizeObserver;\n private _itemWidths = new Map<ToolbarBaseItem, number>();\n\n constructor() {\n effect(() => {\n this.items.set([...this.toolbarItems(), ...this.navItems()]);\n });\n }\n\n ngAfterViewInit() {\n if (!isPlatformBrowser(this._platformId)) {\n return;\n }\n\n this._zone.runOutsideAngular(() => {\n this._resizeObserver = new ResizeObserver(() => {\n this._updateOverflow();\n });\n this._resizeObserver.observe(this._elementRef.nativeElement);\n\n // Also observe each item to update cached widths if they change\n this.items().forEach(item => {\n const el = item.elementRef.nativeElement;\n if (el instanceof HTMLElement) {\n this._resizeObserver?.observe(el);\n }\n });\n });\n\n // Handle items changes\n effect(() => {\n const currentItems = this.items();\n this._zone.runOutsideAngular(() => {\n // Clear widths for items that are gone\n for (const item of this._itemWidths.keys()) {\n if (!currentItems.includes(item)) {\n this._itemWidths.delete(item);\n }\n }\n\n currentItems.forEach(item => {\n const el = item.elementRef.nativeElement;\n if (el instanceof HTMLElement) {\n this._resizeObserver?.observe(el);\n }\n });\n this._updateOverflow();\n });\n }, { injector: this._injector });\n\n // Initial check\n setTimeout(() => {\n this._updateOverflow();\n }, 100);\n }\n\n ngOnDestroy() {\n this._resizeObserver?.disconnect();\n }\n\n protected _openOverflowDialog(template: TemplateRef<any>) {\n this._dialogRef = this._dialog.open(template, {\n width: '100%',\n height: '100%',\n maxWidth: '100vw',\n panelClass: 'ngs-toolbar-overflow-dialog-panel'\n });\n\n this._dialogRef.afterClosed().subscribe(() => {\n this._dialogRef = null;\n });\n }\n\n protected _closeOverflowDialog() {\n this._dialogRef?.close();\n }\n\n private _updateOverflow() {\n this._zone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n const container = this._elementRef.nativeElement;\n const containerWidth = container.clientWidth;\n const items = this.items();\n\n if (containerWidth === 0) {\n return;\n }\n\n if (items.length === 0) {\n if (this._overflowItems().length > 0) {\n this._zone.run(() => this._overflowItems.set([]));\n }\n return;\n }\n\n // Identify other elements taking up space (title, spacer, etc.)\n const children = Array.from(container.children) as HTMLElement[];\n let staticWidth = 0;\n const gap = 16;\n let staticCount = 0;\n\n children.forEach(child => {\n const tagName = child.tagName.toLowerCase();\n const isItem = tagName === 'ngs-toolbar-item' || tagName === 'ngs-toolbar-nav';\n const isOverflowButton = (tagName === 'button' || tagName === 'ngs-menu' || child.hasAttribute('ngs-menu-trigger') || child.hasAttribute('ngs-menu-trigger-for') || child.hasAttribute('ngsmenutriggerfor')) && (\n child.hasAttribute('ngs-icon-button') ||\n child.hasAttribute('ngsiconbutton') ||\n child.getAttribute('ngs-icon-button') !== null ||\n child.querySelector('ngs-icon[name*=\"more-vertical\"]') ||\n child.querySelector('ngs-icon[name*=\"more\"]') ||\n child.querySelector('button[ngs-icon-button]') ||\n child.querySelector('button[ngsiconbutton]')\n );\n const isMenu = tagName === 'ngs-menu' || child.hasAttribute('ngs-menu') || child.querySelector('ngs-menu');\n const isSpacer = tagName === 'ngs-toolbar-spacer' || child.hasAttribute('ngs-toolbar-spacer');\n\n // Check if this child contains any of the ToolbarItems we're tracking\n const containsManagedItem = items.some(item => child.contains(item.elementRef.nativeElement));\n\n const isVisible = child.offsetParent !== null || child.offsetWidth > 0;\n\n if (!isItem && !containsManagedItem && !isOverflowButton && !isMenu && isVisible) {\n if (!isSpacer) {\n staticWidth += child.offsetWidth;\n }\n staticCount++;\n }\n });\n\n // 1. Update widths of items that are NOT hidden\n let allWidthsKnown = true;\n items.forEach(item => {\n if (!item.hidden()) {\n const width = item.elementRef.nativeElement.offsetWidth;\n if (width > 0) {\n this._itemWidths.set(item, width);\n }\n }\n if (!this._itemWidths.has(item)) {\n allWidthsKnown = false;\n }\n });\n\n // 2. If some widths are unknown (e.g., hidden since start), we MUST show them briefly to measure\n if (!allWidthsKnown) {\n this._zone.run(() => {\n items.forEach(item => {\n if (!this._itemWidths.has(item)) {\n item.hidden.set(false);\n }\n });\n });\n return;\n }\n\n // 3. Calculate how many items fit\n const overflowItems: ToolbarBaseItem[] = [];\n const overflowButtonWidth = 48; // A bit more room for the overflow button\n\n // Total width if ALL items fit\n const totalItemsWidth = items.reduce((acc, item) => acc + (this._itemWidths.get(item) || 0), 0);\n const totalVisibleCountAll = staticCount + items.length;\n const totalGapsWidthAll = totalVisibleCountAll > 1 ? (totalVisibleCountAll - 1) * gap : 0;\n const totalWidthAllItems = staticWidth + totalItemsWidth + totalGapsWidthAll;\n\n if (totalWidthAllItems <= containerWidth) {\n this._zone.run(() => {\n items.forEach(item => item.hidden.set(false));\n if (this._overflowItems().length > 0) {\n this._overflowItems.set([]);\n }\n });\n return;\n }\n\n // Not all items fit, we need overflow button\n let currentItemsWidth = 0;\n let fitCount = 0;\n\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n const width = this._itemWidths.get(item) || 0;\n\n // If we add this item, we'll have:\n // staticCount + fitCount + 1 (this item) + 1 (overflow button)\n const potentialVisibleCount = staticCount + fitCount + 2;\n const potentialGapsWidth = (potentialVisibleCount - 1) * gap;\n const totalWidthWithThisItemAndOverflow = staticWidth + currentItemsWidth + width + potentialGapsWidth + overflowButtonWidth;\n\n if (totalWidthWithThisItemAndOverflow > containerWidth) {\n break;\n }\n\n currentItemsWidth += width;\n fitCount++;\n }\n\n for (let i = fitCount; i < items.length; i++) {\n overflowItems.push(items[i]);\n }\n\n // 4. Update visibility\n this._zone.run(() => {\n items.forEach((item, index) => {\n const shouldBeHidden = index >= fitCount;\n if (item.hidden() !== shouldBeHidden) {\n item.hidden.set(shouldBeHidden);\n }\n });\n\n const currentOverflow = this._overflowItems();\n const isSame = currentOverflow.length === overflowItems.length &&\n currentOverflow.every((item, index) => item === overflowItems[index]);\n if (!isSame) {\n this._overflowItems.set(overflowItems);\n }\n });\n });\n });\n }\n}\n","<div>\n <ng-content select=\"ngs-toolbar-title,ngs-toolbar-subtitle\" />\n</div>\n\n<ng-content/>\n\n@if (_overflowItems().length > 0) {\n <button ngsIconButton (click)=\"_openOverflowDialog(overflowDialog)\">\n <ngs-icon name=\"fluent:more-vertical-24-regular\" />\n </button>\n\n <ng-template #overflowDialog>\n <div class=\"ngs-toolbar-overflow-dialog\">\n <div class=\"ngs-toolbar-overflow-dialog-header\">\n <button ngsIconButton (click)=\"_closeOverflowDialog()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" />\n </button>\n </div>\n\n <div class=\"ngs-toolbar-overflow-dialog-content flex flex-col gap-6\">\n @for (item of _overflowItems(); track $index) {\n <div class=\"flex items-center gap-4\">\n <ng-template [ngTemplateOutlet]=\"item.template()\" />\n </div>\n }\n </div>\n </div>\n </ng-template>\n}\n","import { Component, input } from '@angular/core';\n\n@Component({\n selector: 'ngs-toolbar-nav-link,a[ngs-toolbar-nav-link]',\n exportAs: 'ngsToolbarNavLink',\n standalone: true,\n template: '<ng-content />',\n imports: [],\n styleUrl: './toolbar-nav-link.scss',\n host: {\n 'class': 'ngs-toolbar-nav-link',\n '[class.ngs-toolbar-nav-link-active]': 'active()',\n }\n})\nexport class ToolbarNavLink {\n /** The active state of the link. */\n readonly active = input(false);\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-toolbar-title',\n exportAs: 'ngsToolbarTitle',\n templateUrl: './toolbar-title.html',\n styleUrl: './toolbar-title.scss',\n host: {\n 'class': 'ngs-toolbar-title'\n },\n})\nexport class ToolbarTitle {\n\n}\n","<ng-content/>\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-toolbar-subtitle',\n exportAs: 'ngsToolbarSubtitle',\n templateUrl: './toolbar-subtitle.html',\n styleUrl: './toolbar-subtitle.scss',\n host: {\n 'class': 'ngs-toolbar-subtitle'\n },\n})\nexport class ToolbarSubtitle {\n\n}\n","<ng-content/>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ngstarter-ui/components",
3
3
  "description": "NgStarter - AI-friendly Enterprise Angular UI Components and Admin Panel",
4
- "version": "21.0.45",
4
+ "version": "21.0.47",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/elementarlabsdev/ngstarter.git"
@@ -121,6 +121,12 @@
121
121
  --text-3xs: 0.563rem;
122
122
  --text-tiny: 0.75rem;
123
123
  --text-md: 0.825rem;
124
+
125
+ /* --- RADII --- */
126
+ --radius-current: var(--ngs-control-radius);
127
+ --radius-small: var(--ngs-radius-sm);
128
+ --radius-medium: var(--ngs-radius-md);
129
+ --radius-large: var(--ngs-radius-lg);
124
130
  }
125
131
 
126
132
  /* ========================================================================
@@ -673,10 +673,37 @@
673
673
  --ngs-nav-item-active-icon-color: var(--ngs-color-secondary);
674
674
  }
675
675
 
676
- [data-ngs-radius='none'] { --ngs-control-radius: var(--ngs-radius-none); --ngs-dialog-radius: var(--ngs-radius-none); --ngs-nav-item-radius: var(--ngs-radius-none); --ngs-menu-item-radius: var(--ngs-radius-none); }
677
- [data-ngs-radius='small'] { --ngs-control-radius: var(--ngs-radius-sm); --ngs-dialog-radius: var(--ngs-radius-md); --ngs-nav-item-radius: var(--ngs-radius-sm); --ngs-menu-item-radius: var(--ngs-radius-sm); }
678
- [data-ngs-radius='medium'] { --ngs-control-radius: var(--ngs-radius-lg); --ngs-dialog-radius: var(--ngs-radius-xl); --ngs-nav-item-radius: var(--ngs-radius-lg); --ngs-menu-item-radius: var(--ngs-radius-lg); }
679
- [data-ngs-radius='large'] { --ngs-control-radius: var(--ngs-radius-xl); --ngs-dialog-radius: 1.25rem; --ngs-nav-item-radius: var(--ngs-radius-xl); --ngs-menu-item-radius: var(--ngs-radius-xl); }
676
+ [data-ngs-radius='none'] {
677
+ --ngs-control-radius: var(--ngs-radius-none);
678
+ --ngs-dropdown-radius: var(--ngs-radius-none);
679
+ --ngs-dialog-radius: var(--ngs-radius-none);
680
+ --ngs-nav-item-radius: var(--ngs-radius-none);
681
+ --ngs-menu-item-radius: var(--ngs-radius-none);
682
+ }
683
+
684
+ [data-ngs-radius='small'] {
685
+ --ngs-control-radius: var(--ngs-radius-sm);
686
+ --ngs-dropdown-radius: var(--ngs-radius-md);
687
+ --ngs-dialog-radius: var(--ngs-radius-md);
688
+ --ngs-nav-item-radius: var(--ngs-radius-sm);
689
+ --ngs-menu-item-radius: var(--ngs-radius-sm);
690
+ }
691
+
692
+ [data-ngs-radius='medium'] {
693
+ --ngs-control-radius: var(--ngs-radius-lg);
694
+ --ngs-dropdown-radius: var(--ngs-radius-xl);
695
+ --ngs-dialog-radius: var(--ngs-radius-xl);
696
+ --ngs-nav-item-radius: var(--ngs-radius-lg);
697
+ --ngs-menu-item-radius: var(--ngs-radius-lg);
698
+ }
699
+
700
+ [data-ngs-radius='large'] {
701
+ --ngs-control-radius: var(--ngs-radius-xl);
702
+ --ngs-dropdown-radius: 1.25rem;
703
+ --ngs-dialog-radius: 1.25rem;
704
+ --ngs-nav-item-radius: var(--ngs-radius-xl);
705
+ --ngs-menu-item-radius: var(--ngs-radius-xl);
706
+ }
680
707
 
681
708
  :root,
682
709
  .dark,
@@ -1,15 +1,15 @@
1
1
  import * as _angular_forms from '@angular/forms';
2
- import { ValidatorFn, FormControl, FormGroup } from '@angular/forms';
2
+ import { ValidatorFn, FormControl, FormGroup, FormArray } from '@angular/forms';
3
3
  import * as _angular_core from '@angular/core';
4
- import { Type, InjectionToken, EnvironmentProviders, TemplateRef } from '@angular/core';
4
+ import { Type, InjectionToken, EnvironmentProviders, Provider, TemplateRef } from '@angular/core';
5
5
  import { TreeNodeDropPosition, Tree, TreeNodeDrop } from '@ngstarter-ui/components/tree';
6
6
  import { DateRangeInput } from '@ngstarter-ui/components/datepicker';
7
7
  import { RadioGroupOrientation } from '@ngstarter-ui/components/radio';
8
8
  import { UploadFileSelectedEvent } from '@ngstarter-ui/components/upload';
9
- import * as _ngstarter_ui_components_form_builder from '@ngstarter-ui/components/form-builder';
10
9
 
11
10
  type FormBuilderFieldWidth = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
12
11
  type FormBuilderItemKind = 'field' | 'layout' | 'static';
12
+ type FormBuilderSettingsInheritance = 'field' | 'input-field' | 'layout' | 'layout-container' | 'static' | 'none';
13
13
  interface FormBuilderOption {
14
14
  label: string;
15
15
  value: any;
@@ -78,12 +78,12 @@ interface FormBuilderUploadContext {
78
78
  multiple: boolean;
79
79
  }
80
80
  type FormBuilderUploadCallback = (context: FormBuilderUploadContext) => any | Promise<any>;
81
+ type FormBuilderComponentImporter<T = any> = () => Promise<Type<T>>;
81
82
  interface FormBuilderSettingsContext {
82
83
  field: FormBuilderField;
83
84
  schema: FormBuilderSchema;
84
85
  update: (changes: Partial<FormBuilderField>) => void;
85
86
  }
86
- type FormBuilderComponentImporter<T = any> = () => Promise<Type<T>>;
87
87
  interface FormBuilderFieldSettingsContext {
88
88
  item: FormBuilderField;
89
89
  field: FormBuilderField;
@@ -100,6 +100,11 @@ interface FormBuilderSectionSettingsContext {
100
100
  update: (changes: Partial<FormBuilderSection>) => void;
101
101
  updateSection: (changes: Partial<FormBuilderSection>) => void;
102
102
  }
103
+ type FormBuilderSettingsSchemaFactory = (context: FormBuilderFieldSettingsContext | FormBuilderSectionSettingsContext) => FormBuilderSchema;
104
+ interface FormBuilderSettingsConfig {
105
+ extends?: FormBuilderSettingsInheritance;
106
+ schema?: FormBuilderSchema | FormBuilderSettingsSchemaFactory;
107
+ }
103
108
  interface FormBuilderItemDefinition {
104
109
  type: string;
105
110
  label: string;
@@ -109,7 +114,7 @@ interface FormBuilderItemDefinition {
109
114
  description?: string;
110
115
  defaults?: Partial<FormBuilderField>;
111
116
  renderer?: FormBuilderComponentImporter;
112
- settings?: FormBuilderComponentImporter;
117
+ settings?: FormBuilderComponentImporter | FormBuilderSettingsConfig;
113
118
  acceptsChildren?: boolean;
114
119
  }
115
120
  interface FormBuilderFieldDefinition extends FormBuilderItemDefinition {
@@ -135,12 +140,20 @@ declare const FORM_BUILDER_UPLOAD_CALLBACK: InjectionToken<FormBuilderUploadCall
135
140
  declare function formBuilderField(definition: FormBuilderFieldDefinition): FormBuilderFieldDefinition;
136
141
  declare function formBuilderItem(definition: FormBuilderItemDefinition): FormBuilderItemDefinition;
137
142
  declare function formBuilderSettings(definition: FormBuilderSettingsDefinition): FormBuilderSettingsDefinition;
143
+ declare function provideFormBuilderField(definition: FormBuilderFieldDefinition): Provider;
144
+ declare function provideFormBuilderFields(definitions: FormBuilderFieldDefinition[]): Provider[];
138
145
  declare function provideFormBuilder(config?: {
139
146
  items?: FormBuilderItemDefinition[];
140
147
  fields?: FormBuilderFieldDefinition[];
141
148
  settings?: FormBuilderSettingsDefinition[];
142
149
  uploadCallback?: FormBuilderUploadCallback;
143
150
  }): EnvironmentProviders;
151
+ declare const FORM_BUILDER_FIELD_BASE_SETTINGS_SCHEMA: FormBuilderSchema;
152
+ declare const FORM_BUILDER_INPUT_FIELD_BASE_SETTINGS_SCHEMA: FormBuilderSchema;
153
+ declare const FORM_BUILDER_LAYOUT_BASE_SETTINGS_SCHEMA: FormBuilderSchema;
154
+ declare const FORM_BUILDER_LAYOUT_CONTAINER_BASE_SETTINGS_SCHEMA: FormBuilderSchema;
155
+ declare const FORM_BUILDER_STATIC_BASE_SETTINGS_SCHEMA: FormBuilderSchema;
156
+ declare const FORM_BUILDER_SECTION_BASE_SETTINGS_SCHEMA: FormBuilderSchema;
144
157
  declare const DEFAULT_FORM_BUILDER_FIELDS: FormBuilderFieldDefinition[];
145
158
  declare const DEFAULT_FORM_BUILDER_ITEMS: FormBuilderItemDefinition[];
146
159
  declare function validatorsFromRules(rules?: FormBuilderValidationRule[], field?: FormBuilderField): _angular_forms.ValidatorFn[];
@@ -282,6 +295,7 @@ declare class FormBuilder {
282
295
  private dropFieldTreeSection;
283
296
  private isRootFieldTreeNode;
284
297
  private restoreFieldTreeExpansion;
298
+ private expandFieldTreeOwner;
285
299
  private flattenFieldTree;
286
300
  private openActualFieldsTreeForField;
287
301
  private findFieldTreeNodePath;
@@ -329,13 +343,24 @@ declare class FormBuilderRenderer {
329
343
  protected readonly visibleCanvasItems: _angular_core.Signal<FormBuilderRendererCanvasItem[]>;
330
344
  protected readonly formGroup: _angular_core.Signal<FormGroup<any>>;
331
345
  constructor();
332
- protected getControl(field: FormBuilderField): FormControl;
346
+ protected getControl(field: FormBuilderField, formGroup?: FormGroup<any>): FormControl;
333
347
  protected isContainerField(field: FormBuilderField): boolean;
334
348
  protected visibleChildren(field: FormBuilderField): FormBuilderField[];
349
+ protected isRepeaterField(field: FormBuilderField): boolean;
350
+ protected repeaterArray(field: FormBuilderField, formGroup?: FormGroup<any>): FormArray<FormGroup>;
351
+ protected repeaterGroups(field: FormBuilderField, formGroup?: FormGroup<any>): FormGroup[];
352
+ protected repeaterEmptyText(field: FormBuilderField): string;
353
+ protected addRepeaterItem(field: FormBuilderField, formGroup?: FormGroup<any>): void;
354
+ protected removeRepeaterItem(field: FormBuilderField, index: number, formGroup?: FormGroup<any>): void;
355
+ protected canRemoveRepeaterItem(field: FormBuilderField, formGroup?: FormGroup<any>): boolean;
335
356
  protected submit(): void;
336
357
  private createFormGroup;
358
+ private addFieldsToControls;
359
+ private createRepeaterArray;
360
+ private createRepeaterGroup;
337
361
  private visibleFields;
338
362
  private fieldInitialValue;
363
+ private allowsNullValue;
339
364
  private resolveCanvasItems;
340
365
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormBuilderRenderer, never>;
341
366
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormBuilderRenderer, "ngs-form-renderer", ["ngsFormRenderer"], { "schema": { "alias": "schema"; "required": true; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "showSubmit": { "alias": "showSubmit"; "required": false; "isSignal": true; }; "submitLabel": { "alias": "submitLabel"; "required": false; "isSignal": true; }; "uploadCallback": { "alias": "uploadCallback"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "formSubmit": "formSubmit"; "formReady": "formReady"; }, never, never, true, never>;
@@ -378,12 +403,19 @@ declare class FormBuilderSettingsHost {
378
403
  readonly update: _angular_core.InputSignal<((changes: Partial<FormBuilderField>) => void) | undefined>;
379
404
  readonly updateSection: _angular_core.InputSignal<((changes: Partial<FormBuilderSection>) => void) | undefined>;
380
405
  protected readonly itemDefinition: _angular_core.Signal<FormBuilderFieldDefinition | undefined>;
381
- protected readonly fieldDefinition: _angular_core.Signal<FormBuilderFieldDefinition | undefined>;
382
- protected readonly fieldKind: _angular_core.Signal<_ngstarter_ui_components_form_builder.FormBuilderItemKind>;
383
- protected readonly isLayoutField: _angular_core.Signal<boolean>;
384
- protected readonly customLoaded: _angular_core.WritableSignal<boolean>;
406
+ protected readonly settingsSchema: _angular_core.Signal<FormBuilderSchema | null>;
407
+ protected readonly settingsValue: _angular_core.Signal<Record<string, any>>;
408
+ protected readonly legacyLoaded: _angular_core.WritableSignal<boolean>;
385
409
  private readonly anchor;
386
410
  constructor();
411
+ protected applySettingsValue(value: Record<string, any>): void;
412
+ private createSettingsPatch;
413
+ private readSettingValue;
414
+ private settingsConfig;
415
+ private legacySettingsImporter;
416
+ private resolveOwnSettingsSchema;
417
+ private inferSettingsInheritance;
418
+ private baseSettingsSchema;
387
419
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormBuilderSettingsHost, never>;
388
420
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormBuilderSettingsHost, "ngs-form-builder-settings-host", ["ngsFormBuilderSettingsHost"], { "field": { "alias": "field"; "required": false; "isSignal": true; }; "section": { "alias": "section"; "required": false; "isSignal": true; }; "schema": { "alias": "schema"; "required": true; "isSignal": true; }; "definitions": { "alias": "definitions"; "required": false; "isSignal": true; }; "settingsDefinitions": { "alias": "settingsDefinitions"; "required": false; "isSignal": true; }; "update": { "alias": "update"; "required": false; "isSignal": true; }; "updateSection": { "alias": "updateSection"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
389
421
  }
@@ -429,6 +461,7 @@ declare class BasicFormBuilderLayoutSettings {
429
461
  readonly field: _angular_core.InputSignal<FormBuilderField>;
430
462
  readonly update: _angular_core.InputSignal<(changes: Partial<FormBuilderField>) => void>;
431
463
  protected readonly fieldWidthOptions: FormBuilderFieldWidth[];
464
+ protected readonly showHintSetting: _angular_core.Signal<boolean>;
432
465
  protected patch(changes: Partial<FormBuilderField>): void;
433
466
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BasicFormBuilderLayoutSettings, never>;
434
467
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<BasicFormBuilderLayoutSettings, "ngs-basic-form-builder-layout-settings", ["ngsBasicFormBuilderLayoutSettings"], { "field": { "alias": "field"; "required": true; "isSignal": true; }; "update": { "alias": "update"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -442,5 +475,5 @@ declare class BasicFormBuilderSectionSettings {
442
475
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<BasicFormBuilderSectionSettings, "ngs-basic-form-builder-section-settings", ["ngsBasicFormBuilderSectionSettings"], { "section": { "alias": "section"; "required": true; "isSignal": true; }; "update": { "alias": "update"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
443
476
  }
444
477
 
445
- export { BasicFormBuilderFieldSettings, BasicFormBuilderLayoutSettings, BasicFormBuilderSectionSettings, DEFAULT_FORM_BUILDER_FIELDS, DEFAULT_FORM_BUILDER_ITEMS, FORM_BUILDER_FIELDS, FORM_BUILDER_ITEMS, FORM_BUILDER_SETTINGS, FORM_BUILDER_UPLOAD_CALLBACK, FormBuilder, FormBuilderFieldHost, FormBuilderRenderer, FormBuilderSettingsHost, createDefaultFormBuilderSchema, formBuilderField, formBuilderItem, formBuilderSettings, provideFormBuilder, validatorsFromRules };
446
- export type { FormBuilderComponentImporter, FormBuilderField, FormBuilderFieldChange, FormBuilderFieldDefinition, FormBuilderFieldRenderContext, FormBuilderFieldSettingsContext, FormBuilderFieldWidth, FormBuilderItemDefinition, FormBuilderItemKind, FormBuilderLayoutItem, FormBuilderOption, FormBuilderSchema, FormBuilderSection, FormBuilderSectionSettingsContext, FormBuilderSettingsContext, FormBuilderSettingsDefinition, FormBuilderUploadCallback, FormBuilderUploadContext, FormBuilderValidationRule, FormBuilderVisibility };
478
+ export { BasicFormBuilderFieldSettings, BasicFormBuilderLayoutSettings, BasicFormBuilderSectionSettings, DEFAULT_FORM_BUILDER_FIELDS, DEFAULT_FORM_BUILDER_ITEMS, FORM_BUILDER_FIELDS, FORM_BUILDER_FIELD_BASE_SETTINGS_SCHEMA, FORM_BUILDER_INPUT_FIELD_BASE_SETTINGS_SCHEMA, FORM_BUILDER_ITEMS, FORM_BUILDER_LAYOUT_BASE_SETTINGS_SCHEMA, FORM_BUILDER_LAYOUT_CONTAINER_BASE_SETTINGS_SCHEMA, FORM_BUILDER_SECTION_BASE_SETTINGS_SCHEMA, FORM_BUILDER_SETTINGS, FORM_BUILDER_STATIC_BASE_SETTINGS_SCHEMA, FORM_BUILDER_UPLOAD_CALLBACK, FormBuilder, FormBuilderFieldHost, FormBuilderRenderer, FormBuilderSettingsHost, createDefaultFormBuilderSchema, formBuilderField, formBuilderItem, formBuilderSettings, provideFormBuilder, provideFormBuilderField, provideFormBuilderFields, validatorsFromRules };
479
+ export type { FormBuilderComponentImporter, FormBuilderField, FormBuilderFieldChange, FormBuilderFieldDefinition, FormBuilderFieldRenderContext, FormBuilderFieldSettingsContext, FormBuilderFieldWidth, FormBuilderItemDefinition, FormBuilderItemKind, FormBuilderLayoutItem, FormBuilderOption, FormBuilderSchema, FormBuilderSection, FormBuilderSectionSettingsContext, FormBuilderSettingsConfig, FormBuilderSettingsContext, FormBuilderSettingsDefinition, FormBuilderSettingsInheritance, FormBuilderSettingsSchemaFactory, FormBuilderUploadCallback, FormBuilderUploadContext, FormBuilderValidationRule, FormBuilderVisibility };
@@ -56,7 +56,7 @@ declare class Toolbar implements AfterViewInit, OnDestroy {
56
56
  protected _closeOverflowDialog(): void;
57
57
  private _updateOverflow;
58
58
  static ɵfac: i0.ɵɵFactoryDeclaration<Toolbar, never>;
59
- static ɵcmp: i0.ɵɵComponentDeclaration<Toolbar, "ngs-toolbar", ["ngsToolbar"], {}, {}, ["toolbarItems", "navItems", "spacers", "_rows"], ["*"], true, never>;
59
+ static ɵcmp: i0.ɵɵComponentDeclaration<Toolbar, "ngs-toolbar", ["ngsToolbar"], {}, {}, ["toolbarItems", "navItems", "spacers", "_rows"], ["ngs-toolbar-title,ngs-toolbar-subtitle", "*"], true, never>;
60
60
  }
61
61
 
62
62
  declare class ToolbarNavLink {
@@ -68,7 +68,12 @@ declare class ToolbarNavLink {
68
68
 
69
69
  declare class ToolbarTitle {
70
70
  static ɵfac: i0.ɵɵFactoryDeclaration<ToolbarTitle, never>;
71
- static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarTitle, "ngs-toolbar-title", never, {}, {}, never, ["*"], true, never>;
71
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarTitle, "ngs-toolbar-title", ["ngsToolbarTitle"], {}, {}, never, ["*"], true, never>;
72
72
  }
73
73
 
74
- export { Toolbar, ToolbarItem, ToolbarNav, ToolbarNavLink, ToolbarRow, ToolbarSpacer, ToolbarTitle };
74
+ declare class ToolbarSubtitle {
75
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToolbarSubtitle, never>;
76
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarSubtitle, "ngs-toolbar-subtitle", ["ngsToolbarSubtitle"], {}, {}, never, ["*"], true, never>;
77
+ }
78
+
79
+ export { Toolbar, ToolbarItem, ToolbarNav, ToolbarNavLink, ToolbarRow, ToolbarSpacer, ToolbarSubtitle, ToolbarTitle };