@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.
- package/ai/component-registry.json +20 -2
- package/fesm2022/ngstarter-ui-components-card.mjs +2 -2
- package/fesm2022/ngstarter-ui-components-form-builder.mjs +998 -305
- package/fesm2022/ngstarter-ui-components-form-builder.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-image-designer.mjs +1 -1
- package/fesm2022/ngstarter-ui-components-image-designer.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-pdf-viewer.mjs +3 -3
- package/fesm2022/ngstarter-ui-components-pdf-viewer.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-toolbar.mjs +18 -5
- package/fesm2022/ngstarter-ui-components-toolbar.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/_common.scss +6 -0
- package/styles/_tokens.scss +31 -4
- package/types/ngstarter-ui-components-form-builder.d.ts +45 -12
- package/types/ngstarter-ui-components-toolbar.d.ts +8 -3
|
@@ -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',
|
|
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.
|
|
4
|
+
"version": "21.0.47",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/elementarlabsdev/ngstarter.git"
|
package/styles/_common.scss
CHANGED
|
@@ -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
|
/* ========================================================================
|
package/styles/_tokens.scss
CHANGED
|
@@ -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'] {
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
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
|
|
382
|
-
protected readonly
|
|
383
|
-
protected readonly
|
|
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",
|
|
71
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarTitle, "ngs-toolbar-title", ["ngsToolbarTitle"], {}, {}, never, ["*"], true, never>;
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
|
|
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 };
|