@ngbase/adk 0.1.20 → 0.1.21

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.
@@ -204,8 +204,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImpor
204
204
 
205
205
  class NgbLabel {
206
206
  constructor() {
207
- this.formField = inject(NgbFormField);
208
- this.id = this.formField._id;
207
+ this.formField = inject(NgbFormField, { optional: true });
208
+ this.id = this.formField?._id;
209
209
  }
210
210
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
211
211
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: NgbLabel, isStandalone: true, selector: "[ngbLabel]", host: { properties: { "attr.for": "id" } }, ngImport: i0 }); }
@@ -1 +1 @@
1
- {"version":3,"file":"ngbase-adk-form-field.mjs","sources":["../../../projects/adk/form-field/form-field.ts","../../../projects/adk/form-field/error.ts","../../../projects/adk/form-field/input.ts","../../../projects/adk/form-field/auto-height.ts","../../../projects/adk/form-field/label.ts","../../../projects/adk/form-field/currency-mask.ng.ts","../../../projects/adk/form-field/ngbase-adk-form-field.ts"],"sourcesContent":["import {\n computed,\n contentChild,\n contentChildren,\n Directive,\n effect,\n forwardRef,\n signal,\n Signal,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { uniqueId } from '@ngbase/adk/utils';\nimport { NgbInputError } from './error';\nimport { FormField } from '@angular/forms/signals';\n\n@Directive({\n selector: 'ngb-form-field, [ngbFormField]',\n})\nexport class NgbFormField {\n readonly _control = contentChild(FormField, { descendants: true });\n readonly _id = uniqueId();\n\n // we need to forwardRef the error component to avoid circular dependency\n readonly status = computed(() => this._control()?.state());\n private readonly _invalid = computed(() => this.status()?.invalid() && this.status()?.touched());\n\n readonly errors = contentChildren<NgbInputError>(forwardRef(() => NgbInputError));\n readonly hasErrors = computed(() => this._invalid() || this.errors().some(e => e.isInvalid()));\n}\n\nfunction statusChange(sControl: Signal<NgControl | undefined>): Signal<string | null> {\n const statusChanges = signal<string | null>(null, { equal: () => false });\n effect(cleanup => {\n const control = sControl();\n if (control?.statusChanges) {\n const sub = control.statusChanges.subscribe(() => statusChanges.set(control.status));\n cleanup(() => sub?.unsubscribe());\n } else if ((control as any)?.field) {\n // For standalone controls without statusChanges observable\n statusChanges.set((control as any).field().valid() ? 'VALID' : 'INVALID');\n }\n });\n return statusChanges;\n}\n","import { computed, Directive, inject, input, signal } from '@angular/core';\nimport { AbstractControl, FormArray, FormGroup } from '@angular/forms';\nimport { NgbFormField } from './form-field';\nimport { FormField } from '@angular/forms/signals';\n\n@Directive({\n selector: '[ngbError]',\n host: {\n '[hidden]': '!animate() && !isInvalid()',\n },\n})\nexport class NgbInputError {\n private readonly formField = inject(NgbFormField);\n /* the input can have comma separated error names like\n * 'required' or '!required && minlength'\n */\n readonly ngbError = input.required<string>();\n readonly invalid = input<boolean>();\n readonly animate = signal(false);\n\n private readonly errorNames = computed(() => {\n const names = (this.ngbError() ?? '').split('&&');\n return names.reduce(\n (acc, n) => {\n const trimmed = n.trim();\n if (trimmed) {\n const negated = trimmed.startsWith('!');\n acc.push({ name: trimmed.slice(negated ? 1 : 0), negated });\n }\n return acc;\n },\n [] as { name: string; negated: boolean }[],\n );\n });\n\n readonly isFieldInvalid = computed(() => {\n const control = this.formField._control();\n return control ? this.fieldInvalidFn(control) : false;\n });\n\n fieldInvalidFn(control: FormField<any>) {\n const names = this.errorNames();\n const field = control?.formField()();\n\n return (\n field?.touched() &&\n names.every(n => !!field?.errors().some((x: any) => x.kind == n.name) !== n.negated)\n );\n }\n\n readonly isInvalid = computed(() => {\n return this.invalid() ?? this.isFieldInvalid();\n });\n}\n\nexport function markControlsTouched(\n control: AbstractControl,\n options = { touched: true, dirty: false },\n) {\n if (control instanceof FormGroup || control instanceof FormArray) {\n Object.values(control.controls).forEach(c => markControlsTouched(c, options));\n }\n if (options.dirty) control.markAsTouched();\n if (options.touched) control.markAsTouched();\n control.updateValueAndValidity();\n}\n","import { computed, Directive, inject, input, model } from '@angular/core';\nimport { uniqueId } from '@ngbase/adk/utils';\nimport { NgbFormField } from './form-field';\nimport { FormValueControl } from '@angular/forms/signals';\n\n@Directive({\n selector: 'input[ngbInputBase]',\n host: {\n role: 'textbox',\n '[attr.id]': 'id',\n '[value]': 'displayValue()',\n '(input)': 'setInputValue($event)',\n '(blur)': 'onTouched()',\n '[disabled]': 'disabled() || undefined',\n },\n})\nexport class InputBase<T = unknown> implements FormValueControl<T> {\n readonly formField = inject(NgbFormField, { optional: true });\n\n readonly value = model<T>('' as any);\n readonly required = input(false);\n readonly touched = model<boolean>(false);\n readonly disabled = input(false);\n\n readonly id = this.formField?._id ?? uniqueId();\n readonly displayValue = computed<any>(() => this.value());\n\n protected setInputValue(ev: Event): void {\n const el = ev.target as HTMLInputElement;\n let value = el.value;\n if (el.type === 'checkbox') {\n this.setValue(el.checked as unknown as T);\n } else if (el.type === 'number') {\n this.setValue(el.valueAsNumber as unknown as T);\n }\n this.setValue(value);\n }\n\n onTouched() {\n this.touched.set(true);\n }\n\n setValue(value: any): void {\n this.value.set(value);\n }\n}\n","import {\n afterNextRender,\n Directive,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { InputBase } from './input';\n\n@Directive({\n selector: 'textarea[ngbAutoHeight]',\n})\nexport class AutoHeight {\n private el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private model = inject(NgControl, { optional: true });\n private ngbInput = inject(InputBase, { optional: true });\n\n readonly maxHeight = input<number>();\n\n constructor() {\n // Disable textarea resizing\n this.el.nativeElement.style.resize = 'none';\n\n const injector = inject(Injector);\n effect(cleanup => {\n // required for updating the height for the initial value\n this.update();\n\n const sub = this.model?.valueChanges?.subscribe(v => {\n if (v === this.el.nativeElement.value) {\n this.update();\n } else {\n // Wait for Angular to update the DOM with the new value\n // Use a settimeout to wait for the next tick\n afterNextRender(() => this.update(), { injector });\n }\n });\n cleanup(() => sub?.unsubscribe());\n\n const ro = new ResizeObserver(entries => {\n for (let entry of entries) {\n this.update();\n }\n });\n\n // Observe one or multiple elements\n ro.observe(this.el.nativeElement);\n cleanup(() => ro.disconnect());\n });\n\n effect(() => {\n const _ = this.ngbInput?.value();\n this.update();\n });\n }\n\n private update() {\n const el = this.el.nativeElement;\n el.style.height = 'auto';\n // also we need to consider the border so we need to calculate the border using height\n const borderHeight = el.offsetHeight - el.clientHeight;\n const height = el.scrollHeight + borderHeight;\n const maxHeight = this.maxHeight();\n if (maxHeight) {\n el.style.height = Math.min(height, maxHeight) + 'px';\n } else {\n el.style.height = height + 'px';\n }\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { NgbFormField } from './form-field';\n\n@Directive({\n selector: '[ngbLabel]',\n host: {\n '[attr.for]': 'id',\n },\n})\nexport class NgbLabel {\n private readonly formField = inject(NgbFormField);\n readonly id = this.formField._id;\n}\n","import { Directive, ElementRef, input, inject, computed } from '@angular/core';\nimport { InputBase } from './input';\n\n@Directive({\n selector: '[numberFormat]',\n host: {\n '(keydown)': 'onKeyDown($event)',\n },\n})\nexport class NumberFormat extends InputBase {\n // Input signals with default values\n private readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n // readonly value = model<any>();\n readonly decimals = input<number>(2);\n readonly decimalSeparator = input<string>('.');\n readonly thousandSeparator = input<string>(',');\n\n // Private members\n override displayValue = computed(() => this.formatDisplayValue(this.value() as any) as any);\n\n private readonly specialKeys = [\n 'Backspace',\n 'Tab',\n 'End',\n 'Home',\n 'ArrowLeft',\n 'ArrowRight',\n 'Delete',\n ];\n\n // Handles input changes\n override setValue(value: any) {\n const stringValue = value.toString();\n const position = this.el.nativeElement.selectionStart;\n const cleanedValue = this.cleanValue(stringValue);\n\n if (this.isValidNumber(cleanedValue)) {\n this.value.set(cleanedValue);\n this.updateCursorPosition(stringValue, position ?? 0);\n }\n }\n\n // Handles keydown events to validate input\n onKeyDown(event: KeyboardEvent) {\n if (this.specialKeys.includes(event.key)) return;\n\n const value = this.el.nativeElement.value;\n const position = this.el.nativeElement.selectionStart;\n\n // Handle decimal separator\n if (event.key === this.decimalSeparator()) {\n if (value.includes(this.decimalSeparator())) {\n event.preventDefault();\n }\n return;\n }\n\n // Only allow digits\n if (!/^\\d$/.test(event.key)) {\n event.preventDefault();\n return;\n }\n\n // Check decimal digits limit\n if (this.isDecimalPartFull(value, position ?? 0)) {\n event.preventDefault();\n }\n }\n\n // Private helper methods\n private cleanValue(value: string | number): string {\n return value\n .toString()\n .replace(new RegExp(`[^\\\\d${this.escapeRegExp(this.decimalSeparator())}]`, 'g'), '');\n }\n\n private isValidNumber(value: string): boolean {\n const parts = value.split(this.decimalSeparator());\n return parts.length <= 2 && parts.every(part => /^\\d*$/.test(part));\n }\n\n private formatDisplayValue(value: string) {\n const parts = value.split(this.decimalSeparator());\n let integerPart = parts[0]\n .replace(/^0+(?=\\d)/, '')\n .replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandSeparator());\n const decimalPart = parts.length > 1 ? parts[1].substring(0, this.decimals()) : undefined;\n\n const displayValue =\n decimalPart !== undefined\n ? `${integerPart}${this.decimalSeparator()}${decimalPart}`\n : integerPart;\n return displayValue || '';\n }\n\n private updateCursorPosition(originalValue: string, originalPosition: number) {\n setTimeout(() => {\n const el = this.el.nativeElement;\n if (originalPosition === originalValue.length) {\n // If cursor was at the end, keep it at the end\n el.setSelectionRange(el.value.length, el.value.length);\n return;\n }\n\n // Calculate new cursor position based on thousand separators\n const oldSeparatorCount = this.countSeparators(originalValue.substring(0, originalPosition));\n const newValueUpToOldPos = el.value.substring(0, originalPosition + 1);\n const newSeparatorCount = this.countSeparators(newValueUpToOldPos);\n\n const newPosition = originalPosition + (newSeparatorCount - oldSeparatorCount);\n el.setSelectionRange(newPosition, newPosition);\n }, 0);\n }\n\n private countSeparators(value: string): number {\n const regex = new RegExp(this.escapeRegExp(this.thousandSeparator()), 'g');\n return (value.match(regex) || []).length;\n }\n\n private isDecimalPartFull(value: string, position: number): boolean {\n const decimalPos = value.indexOf(this.decimalSeparator());\n return (\n decimalPos !== -1 &&\n position > decimalPos &&\n value.substring(decimalPos + 1).length >= this.decimals()\n );\n }\n\n private escapeRegExp(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngbase-adk-form-field.mjs","sources":["../../../projects/adk/form-field/form-field.ts","../../../projects/adk/form-field/error.ts","../../../projects/adk/form-field/input.ts","../../../projects/adk/form-field/auto-height.ts","../../../projects/adk/form-field/label.ts","../../../projects/adk/form-field/currency-mask.ng.ts","../../../projects/adk/form-field/ngbase-adk-form-field.ts"],"sourcesContent":["import {\n computed,\n contentChild,\n contentChildren,\n Directive,\n effect,\n forwardRef,\n signal,\n Signal,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { uniqueId } from '@ngbase/adk/utils';\nimport { NgbInputError } from './error';\nimport { FormField } from '@angular/forms/signals';\n\n@Directive({\n selector: 'ngb-form-field, [ngbFormField]',\n})\nexport class NgbFormField {\n readonly _control = contentChild(FormField, { descendants: true });\n readonly _id = uniqueId();\n\n // we need to forwardRef the error component to avoid circular dependency\n readonly status = computed(() => this._control()?.state());\n private readonly _invalid = computed(() => this.status()?.invalid() && this.status()?.touched());\n\n readonly errors = contentChildren<NgbInputError>(forwardRef(() => NgbInputError));\n readonly hasErrors = computed(() => this._invalid() || this.errors().some(e => e.isInvalid()));\n}\n\nfunction statusChange(sControl: Signal<NgControl | undefined>): Signal<string | null> {\n const statusChanges = signal<string | null>(null, { equal: () => false });\n effect(cleanup => {\n const control = sControl();\n if (control?.statusChanges) {\n const sub = control.statusChanges.subscribe(() => statusChanges.set(control.status));\n cleanup(() => sub?.unsubscribe());\n } else if ((control as any)?.field) {\n // For standalone controls without statusChanges observable\n statusChanges.set((control as any).field().valid() ? 'VALID' : 'INVALID');\n }\n });\n return statusChanges;\n}\n","import { computed, Directive, inject, input, signal } from '@angular/core';\nimport { AbstractControl, FormArray, FormGroup } from '@angular/forms';\nimport { NgbFormField } from './form-field';\nimport { FormField } from '@angular/forms/signals';\n\n@Directive({\n selector: '[ngbError]',\n host: {\n '[hidden]': '!animate() && !isInvalid()',\n },\n})\nexport class NgbInputError {\n private readonly formField = inject(NgbFormField);\n /* the input can have comma separated error names like\n * 'required' or '!required && minlength'\n */\n readonly ngbError = input.required<string>();\n readonly invalid = input<boolean>();\n readonly animate = signal(false);\n\n private readonly errorNames = computed(() => {\n const names = (this.ngbError() ?? '').split('&&');\n return names.reduce(\n (acc, n) => {\n const trimmed = n.trim();\n if (trimmed) {\n const negated = trimmed.startsWith('!');\n acc.push({ name: trimmed.slice(negated ? 1 : 0), negated });\n }\n return acc;\n },\n [] as { name: string; negated: boolean }[],\n );\n });\n\n readonly isFieldInvalid = computed(() => {\n const control = this.formField._control();\n return control ? this.fieldInvalidFn(control) : false;\n });\n\n fieldInvalidFn(control: FormField<any>) {\n const names = this.errorNames();\n const field = control?.formField()();\n\n return (\n field?.touched() &&\n names.every(n => !!field?.errors().some((x: any) => x.kind == n.name) !== n.negated)\n );\n }\n\n readonly isInvalid = computed(() => {\n return this.invalid() ?? this.isFieldInvalid();\n });\n}\n\nexport function markControlsTouched(\n control: AbstractControl,\n options = { touched: true, dirty: false },\n) {\n if (control instanceof FormGroup || control instanceof FormArray) {\n Object.values(control.controls).forEach(c => markControlsTouched(c, options));\n }\n if (options.dirty) control.markAsTouched();\n if (options.touched) control.markAsTouched();\n control.updateValueAndValidity();\n}\n","import { computed, Directive, inject, input, model } from '@angular/core';\nimport { uniqueId } from '@ngbase/adk/utils';\nimport { NgbFormField } from './form-field';\nimport { FormValueControl } from '@angular/forms/signals';\n\n@Directive({\n selector: 'input[ngbInputBase]',\n host: {\n role: 'textbox',\n '[attr.id]': 'id',\n '[value]': 'displayValue()',\n '(input)': 'setInputValue($event)',\n '(blur)': 'onTouched()',\n '[disabled]': 'disabled() || undefined',\n },\n})\nexport class InputBase<T = unknown> implements FormValueControl<T> {\n readonly formField = inject(NgbFormField, { optional: true });\n\n readonly value = model<T>('' as any);\n readonly required = input(false);\n readonly touched = model<boolean>(false);\n readonly disabled = input(false);\n\n readonly id = this.formField?._id ?? uniqueId();\n readonly displayValue = computed<any>(() => this.value());\n\n protected setInputValue(ev: Event): void {\n const el = ev.target as HTMLInputElement;\n let value = el.value;\n if (el.type === 'checkbox') {\n this.setValue(el.checked as unknown as T);\n } else if (el.type === 'number') {\n this.setValue(el.valueAsNumber as unknown as T);\n }\n this.setValue(value);\n }\n\n onTouched() {\n this.touched.set(true);\n }\n\n setValue(value: any): void {\n this.value.set(value);\n }\n}\n","import {\n afterNextRender,\n Directive,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n} from '@angular/core';\nimport { NgControl } from '@angular/forms';\nimport { InputBase } from './input';\n\n@Directive({\n selector: 'textarea[ngbAutoHeight]',\n})\nexport class AutoHeight {\n private el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private model = inject(NgControl, { optional: true });\n private ngbInput = inject(InputBase, { optional: true });\n\n readonly maxHeight = input<number>();\n\n constructor() {\n // Disable textarea resizing\n this.el.nativeElement.style.resize = 'none';\n\n const injector = inject(Injector);\n effect(cleanup => {\n // required for updating the height for the initial value\n this.update();\n\n const sub = this.model?.valueChanges?.subscribe(v => {\n if (v === this.el.nativeElement.value) {\n this.update();\n } else {\n // Wait for Angular to update the DOM with the new value\n // Use a settimeout to wait for the next tick\n afterNextRender(() => this.update(), { injector });\n }\n });\n cleanup(() => sub?.unsubscribe());\n\n const ro = new ResizeObserver(entries => {\n for (let entry of entries) {\n this.update();\n }\n });\n\n // Observe one or multiple elements\n ro.observe(this.el.nativeElement);\n cleanup(() => ro.disconnect());\n });\n\n effect(() => {\n const _ = this.ngbInput?.value();\n this.update();\n });\n }\n\n private update() {\n const el = this.el.nativeElement;\n el.style.height = 'auto';\n // also we need to consider the border so we need to calculate the border using height\n const borderHeight = el.offsetHeight - el.clientHeight;\n const height = el.scrollHeight + borderHeight;\n const maxHeight = this.maxHeight();\n if (maxHeight) {\n el.style.height = Math.min(height, maxHeight) + 'px';\n } else {\n el.style.height = height + 'px';\n }\n }\n}\n","import { Directive, inject } from '@angular/core';\nimport { NgbFormField } from './form-field';\n\n@Directive({\n selector: '[ngbLabel]',\n host: {\n '[attr.for]': 'id',\n },\n})\nexport class NgbLabel {\n private readonly formField = inject(NgbFormField, { optional: true });\n readonly id = this.formField?._id;\n}\n","import { Directive, ElementRef, input, inject, computed } from '@angular/core';\nimport { InputBase } from './input';\n\n@Directive({\n selector: '[numberFormat]',\n host: {\n '(keydown)': 'onKeyDown($event)',\n },\n})\nexport class NumberFormat extends InputBase {\n // Input signals with default values\n private readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n\n // readonly value = model<any>();\n readonly decimals = input<number>(2);\n readonly decimalSeparator = input<string>('.');\n readonly thousandSeparator = input<string>(',');\n\n // Private members\n override displayValue = computed(() => this.formatDisplayValue(this.value() as any) as any);\n\n private readonly specialKeys = [\n 'Backspace',\n 'Tab',\n 'End',\n 'Home',\n 'ArrowLeft',\n 'ArrowRight',\n 'Delete',\n ];\n\n // Handles input changes\n override setValue(value: any) {\n const stringValue = value.toString();\n const position = this.el.nativeElement.selectionStart;\n const cleanedValue = this.cleanValue(stringValue);\n\n if (this.isValidNumber(cleanedValue)) {\n this.value.set(cleanedValue);\n this.updateCursorPosition(stringValue, position ?? 0);\n }\n }\n\n // Handles keydown events to validate input\n onKeyDown(event: KeyboardEvent) {\n if (this.specialKeys.includes(event.key)) return;\n\n const value = this.el.nativeElement.value;\n const position = this.el.nativeElement.selectionStart;\n\n // Handle decimal separator\n if (event.key === this.decimalSeparator()) {\n if (value.includes(this.decimalSeparator())) {\n event.preventDefault();\n }\n return;\n }\n\n // Only allow digits\n if (!/^\\d$/.test(event.key)) {\n event.preventDefault();\n return;\n }\n\n // Check decimal digits limit\n if (this.isDecimalPartFull(value, position ?? 0)) {\n event.preventDefault();\n }\n }\n\n // Private helper methods\n private cleanValue(value: string | number): string {\n return value\n .toString()\n .replace(new RegExp(`[^\\\\d${this.escapeRegExp(this.decimalSeparator())}]`, 'g'), '');\n }\n\n private isValidNumber(value: string): boolean {\n const parts = value.split(this.decimalSeparator());\n return parts.length <= 2 && parts.every(part => /^\\d*$/.test(part));\n }\n\n private formatDisplayValue(value: string) {\n const parts = value.split(this.decimalSeparator());\n let integerPart = parts[0]\n .replace(/^0+(?=\\d)/, '')\n .replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandSeparator());\n const decimalPart = parts.length > 1 ? parts[1].substring(0, this.decimals()) : undefined;\n\n const displayValue =\n decimalPart !== undefined\n ? `${integerPart}${this.decimalSeparator()}${decimalPart}`\n : integerPart;\n return displayValue || '';\n }\n\n private updateCursorPosition(originalValue: string, originalPosition: number) {\n setTimeout(() => {\n const el = this.el.nativeElement;\n if (originalPosition === originalValue.length) {\n // If cursor was at the end, keep it at the end\n el.setSelectionRange(el.value.length, el.value.length);\n return;\n }\n\n // Calculate new cursor position based on thousand separators\n const oldSeparatorCount = this.countSeparators(originalValue.substring(0, originalPosition));\n const newValueUpToOldPos = el.value.substring(0, originalPosition + 1);\n const newSeparatorCount = this.countSeparators(newValueUpToOldPos);\n\n const newPosition = originalPosition + (newSeparatorCount - oldSeparatorCount);\n el.setSelectionRange(newPosition, newPosition);\n }, 0);\n }\n\n private countSeparators(value: string): number {\n const regex = new RegExp(this.escapeRegExp(this.thousandSeparator()), 'g');\n return (value.match(regex) || []).length;\n }\n\n private isDecimalPartFull(value: string, position: number): boolean {\n const decimalPos = value.indexOf(this.decimalSeparator());\n return (\n decimalPos !== -1 &&\n position > decimalPos &&\n value.substring(decimalPos + 1).length >= this.decimals()\n );\n }\n\n private escapeRegExp(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -292,7 +292,7 @@ class PortalService {
292
292
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: PortalService, decorators: [{
293
293
  type: Injectable,
294
294
  args: [{ providedIn: 'root' }]
295
- }], ctorParameters: () => [] });
295
+ }] });
296
296
 
297
297
  function basePortal(name, baseComponent) {
298
298
  const NAME = name;
@@ -1 +1 @@
1
- {"version":3,"file":"ngbase-adk-portal.mjs","sources":["../../../projects/adk/portal/dialog-ref.ts","../../../projects/adk/portal/portal-close.directive.ts","../../../projects/adk/portal/portal.component.ts","../../../projects/adk/portal/portal.service.ts","../../../projects/adk/portal/portal-base.service.ts","../../../projects/adk/portal/public-api.ts","../../../projects/adk/portal/ngbase-adk-portal.ts"],"sourcesContent":["import {\n ElementRef,\n InjectionToken,\n Injector,\n TemplateRef,\n Type,\n ViewContainerRef,\n inject,\n signal,\n DOCUMENT,\n} from '@angular/core';\nimport { ReplaySubject, Subject, first } from 'rxjs';\n\nexport type DialogInput<T = any> = Type<T> | TemplateRef<any>;\n\nexport abstract class BaseDialog {\n dialogRef = inject(DialogRef);\n document = inject(DOCUMENT);\n el = inject(ElementRef);\n\n // Subclasses must provide the ViewContainerRef via viewChild signal\n abstract readonly contentContainer: () => ViewContainerRef | undefined;\n\n get vcRef(): ViewContainerRef {\n return this.contentContainer()!;\n }\n\n target = signal<HTMLElement | null>(null);\n\n // Track animation state: false = waiting for enter, true = enter complete\n private enterAnimationDone = false;\n private isFirst = true;\n private currentActiveElement = new WeakRef(this.document.activeElement as HTMLElement);\n\n // Signal to track closing state for CSS animations\n readonly closing = signal(false);\n\n // Override in subclasses to indicate if animations are used\n // If false, close() will complete immediately without waiting for animationDone()\n protected readonly hasAnimations: boolean = false;\n\n constructor() {\n this.dialogRef.setBaseDialog(this);\n this.onOpen();\n // If no animations, mark enter as done immediately\n if (!this.hasAnimations) {\n this.enterAnimationDone = true;\n }\n }\n\n setOptions(_: DialogOptions): void {}\n\n close() {\n // Only start closing if enter animation is complete\n if (this.enterAnimationDone && !this.closing()) {\n this.closing.set(true);\n // If no animations, complete close immediately\n if (!this.hasAnimations) {\n this.dialogRef._completeClose();\n this.onClose();\n }\n // Otherwise, the actual close will happen after animationDone is called\n // which triggers when the leave animation completes\n }\n }\n\n onAnimationEnd(event: AnimationEvent) {\n if (event.target === event.currentTarget) {\n this.animationDone();\n }\n }\n\n animationDone = () => {\n if (!this.enterAnimationDone) {\n // First animation end = enter animation complete\n this.enterAnimationDone = true;\n } else if (this.closing()) {\n // Second animation end while closing = leave animation complete\n this.dialogRef._completeClose();\n this.onClose();\n }\n };\n\n private onOpen() {\n // make the body not scrollable and add padding to the right\n // calculate the padding based on the scrollbar width\n this.isFirst = this.document.body.style.overflow !== 'hidden';\n if (this.isFirst) {\n const padding = window.innerWidth - this.document.body.clientWidth;\n this.document.body.style.paddingRight = `${padding}px`;\n this.document.body.style.overflow = 'hidden';\n }\n }\n\n getTarget(): HTMLElement {\n return this.target()!;\n }\n\n onClose = () => {\n if (this.isFirst) {\n this.document.body.style.paddingRight = '';\n this.document.body.style.overflow = '';\n }\n const target =\n this.dialogRef.options.afterFocusEl || this.getTarget() || this.currentActiveElement.deref();\n target?.focus();\n };\n}\n\nexport interface CloseOptions {\n closeParent?: boolean;\n}\n\nexport class DialogRef<T = any> {\n data = this.options.data;\n private baseDialog: BaseDialog | null = null;\n private pendingCloseData: any = undefined;\n private _isClosing = false;\n\n // Expose closing state for consumers who need to check\n get isClosing(): boolean {\n return this._isClosing;\n }\n\n private onDestroySource = new Subject();\n onDestroy = this.onDestroySource.asObservable().pipe(first());\n\n private afterClosedSource = new Subject<any>();\n afterClosed = this.afterClosedSource.asObservable().pipe(first());\n\n events = new ReplaySubject<'created'>(1);\n\n // Parent-child relationship\n private _parent: DialogRef | null = null;\n private _children = new Set<DialogRef>();\n\n get parent(): DialogRef | null {\n return this._parent;\n }\n\n get children(): ReadonlySet<DialogRef> {\n return this._children;\n }\n\n get root(): DialogRef {\n return this._parent?.root ?? this;\n }\n\n constructor(\n public options: DialogOptions<T>,\n private destroyParent: VoidFunction,\n private closeAllFn: VoidFunction,\n private animation = true,\n ) {\n // Register with parent if provided\n if (options.parent) {\n this._setParent(options.parent);\n }\n }\n\n _setParent(parent: DialogRef) {\n this._parent = parent;\n parent._addChild(this);\n }\n\n _addChild(child: DialogRef) {\n this._children.add(child);\n }\n\n _removeChild(child: DialogRef) {\n this._children.delete(child);\n }\n\n // Set the BaseDialog reference so we can trigger animations\n setBaseDialog(baseDialog: BaseDialog) {\n this.baseDialog = baseDialog;\n }\n\n close = (data?: any, options?: CloseOptions) => {\n // Guard: do nothing if already closing - makes close() idempotent\n if (this._isClosing) {\n return;\n }\n\n this._isClosing = true;\n\n // 1. Close all children first (if closeChildrenOnClose is true)\n if (this.options.closeChildrenOnClose !== false) {\n // Create a copy since children will remove themselves during close\n [...this._children].forEach(child => child.close());\n }\n\n // 2. If we have a BaseDialog and animation is enabled, trigger the leave animation\n if (this.baseDialog && this.animation) {\n this.pendingCloseData = data;\n this.baseDialog.close();\n } else {\n // No animation, close immediately\n this.afterClosedSource.next(data);\n this.destroy();\n }\n\n // 3. If closeParent is true, close parent after self (child → parent order)\n // This ensures children animate out before parents, maintaining visual hierarchy\n if (options?.closeParent && this._parent) {\n this._parent.close(undefined, { closeParent: true });\n }\n };\n\n // Called by BaseDialog.animationDone() after leave animation completes\n _completeClose = () => {\n this.afterClosedSource.next(this.pendingCloseData);\n this.destroy();\n };\n\n closeAll() {\n this.closeAllFn();\n }\n\n destroy() {\n // Remove self from parent's children\n this._parent?._removeChild(this);\n\n this.afterClosedSource.complete();\n this.onDestroySource.next(false);\n this.destroyParent();\n }\n}\n\nexport class DialogTestingRef {\n close() {}\n}\n\nexport class DialogOptions<T = any> {\n backdrop? = true;\n backdropColor? = true;\n hideOverlay? = false;\n data?: T;\n // isSidePopup? = false;\n title?: string;\n fullWindow?: boolean;\n minWidth?: string;\n minHeight?: string;\n width?: string;\n height?: string;\n maxWidth?: string;\n maxHeight?: string;\n classNames?: string[] = [];\n header?: boolean;\n disableClose? = false;\n ayId?: string;\n focusTrap? = true;\n afterFocusEl?: HTMLElement;\n\n // Parent-child relationship options\n parent?: DialogRef;\n closeChildrenOnClose? = true;\n}\n\nexport const DIALOG_INJ = new InjectionToken('dialogInj');\n\nexport function createInj(parent: Injector, data: any, diaRef: DialogRef) {\n return Injector.create({\n providers: [\n { provide: DIALOG_INJ, useValue: data },\n { provide: DialogRef, useValue: diaRef },\n ],\n parent,\n name: 'dialogInj',\n });\n}\n\nexport const DialogTestProviders = [\n { provide: DIALOG_INJ, useValue: {} },\n { provide: DialogRef, useValue: null },\n];\n","import { Directive, inject, input } from '@angular/core';\nimport { DialogRef } from './dialog-ref';\n\n@Directive({\n selector: '[ngbPortalClose]',\n host: {\n '(click)': 'close()',\n },\n})\nexport class NgbPortalClose {\n readonly dialogRef = inject(DialogRef);\n readonly ngbPortalClose = input();\n\n close(data = this.ngbPortalClose()) {\n this.dialogRef.close(data);\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewContainerRef, viewChild } from '@angular/core';\n\n@Component({\n selector: 'ngb-portal',\n template: `<ng-container #myDialog />`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Portal {\n myDialog = viewChild('myDialog', { read: ViewContainerRef });\n}\n","import {\n Injectable,\n Injector,\n ApplicationRef,\n Type,\n ComponentRef,\n inject,\n EnvironmentInjector,\n createComponent,\n DOCUMENT,\n} from '@angular/core';\nimport { Portal } from './portal.component';\n\n@Injectable({ providedIn: 'root' })\nexport class PortalService {\n private mainContainer?: ComponentRef<Portal>;\n private document = inject(DOCUMENT);\n private appRef = inject(ApplicationRef);\n private environmentInjector = inject(EnvironmentInjector);\n\n private trackElements = new Map<string, ComponentRef<any>[]>();\n\n constructor() {}\n\n private componentCreator() {\n this.mainContainer ??= this.appendComponentToBody(Portal);\n return this.mainContainer!.instance.myDialog()!;\n }\n\n appendComponentToBody<T>(component: Type<T>) {\n // 1. Create a component reference from the component\n const componentRef = createComponent(component, {\n environmentInjector: this.environmentInjector,\n });\n\n // 2. append the component to the body\n this.document.body.appendChild(componentRef.location.nativeElement);\n\n // 3. Attach component to the appRef so that it's inside the ng component tree\n this.appRef.attachView(componentRef.hostView);\n return componentRef;\n }\n\n create<T>(component: Type<T>, injector: Injector, container: string) {\n const d = this.componentCreator().createComponent(component, { injector });\n if (!this.trackElements.has(container)) {\n this.trackElements.set(container, []);\n }\n this.trackElements.get(container)!.push(d);\n return d;\n }\n\n delete<T>(container: string, component: ComponentRef<T>) {\n component.destroy();\n const elements = this.trackElements.get(container);\n if (elements) {\n const index = elements.indexOf(component);\n elements.splice(index, 1);\n }\n }\n\n clear(container: string) {\n if (this.trackElements.has(container)) {\n const elements = this.trackElements.get(container);\n // Trigger close on each component to play leave animations\n // The BaseDialog.close() method will handle the animation and eventual destruction\n elements?.forEach(c => c.instance?.close?.());\n }\n }\n}\n","import {\n ComponentRef,\n EmbeddedViewRef,\n Injector,\n TemplateRef,\n Type,\n ViewContainerRef,\n inject,\n signal,\n} from '@angular/core';\nimport { keyMap } from '@ngbase/adk/keys';\nimport { BaseDialog, DialogInput, DialogOptions, DialogRef, createInj } from './dialog-ref';\nimport { PortalService } from './portal.service';\n\nexport function basePortal<U>(name: string, baseComponent: Type<U>) {\n const NAME = name;\n const portal = inject(PortalService);\n const injector = inject(Injector);\n\n function updateBaseComponent(component: Type<U>) {\n baseComponent = component;\n }\n\n function open<T>(\n component?: DialogInput<T>,\n callback?: (comp: ComponentRef<U>, opt: DialogOptions) => void,\n opt?: DialogOptions,\n animation = true,\n parentComponent?: Type<U>,\n ) {\n const options = { ...new DialogOptions(), ...opt };\n const diaRef = new DialogRef(options, destroy, closeAll, animation);\n const childInjector = createInj(injector, options.data, diaRef);\n const parent = portal.create(parentComponent || baseComponent, childInjector, NAME);\n\n // set options\n callback?.(parent, options);\n\n // close on backdrop click\n let sub: () => void | undefined;\n const childSignal = signal<ComponentRef<any> | EmbeddedViewRef<any> | undefined>(undefined);\n\n if (component === undefined) {\n return { diaRef, parent, instance: null, childSignal };\n }\n\n const parentInstance = parent.instance as BaseDialog;\n\n // close on esc - call parentInstance.close() to trigger leave animation\n if (!options.disableClose) {\n sub = keyMap('esc', () => parentInstance.close(), { injector, stop: true });\n }\n\n function destroy() {\n portal.delete(NAME, parent);\n sub?.();\n }\n\n // Trigger change detection to initialize viewChild signals\n parent.changeDetectorRef.detectChanges();\n\n // VCR is now available after detectChanges\n const vcRef = parentInstance.vcRef;\n const child = createChild(component, vcRef);\n diaRef.events.next('created');\n childSignal.set(child);\n\n function replace(component: DialogInput<T>) {\n vcRef.clear();\n createChild(component, vcRef);\n }\n\n function createChild(component: DialogInput<any>, vcRef: ViewContainerRef) {\n // for template type\n if (component instanceof TemplateRef) {\n return vcRef.createEmbeddedView(\n component,\n { $implicit: options.data, ...(Array.isArray(options.data) ? {} : options.data) },\n { injector: parent.injector },\n );\n }\n // for component type\n return vcRef.createComponent(component, {\n injector: parent.injector,\n });\n }\n\n return { diaRef, parent, replace, childSignal };\n }\n\n function closeAll() {\n // Close each dialog properly to trigger leave animations\n portal.clear(NAME);\n }\n return { open, closeAll, updateBaseComponent };\n}\n","/*\n * Public API Surface of portal\n */\n\nexport * from './portal-close.directive';\nexport {\n BaseDialog,\n type CloseOptions,\n DIALOG_INJ,\n type DialogInput,\n DialogOptions,\n DialogRef,\n createInj,\n} from './dialog-ref';\nexport * from './portal-base.service';\nexport * from './portal.component';\nexport * from './portal.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngbase-adk-portal.mjs","sources":["../../../projects/adk/portal/dialog-ref.ts","../../../projects/adk/portal/portal-close.directive.ts","../../../projects/adk/portal/portal.component.ts","../../../projects/adk/portal/portal.service.ts","../../../projects/adk/portal/portal-base.service.ts","../../../projects/adk/portal/public-api.ts","../../../projects/adk/portal/ngbase-adk-portal.ts"],"sourcesContent":["import {\n ElementRef,\n InjectionToken,\n Injector,\n TemplateRef,\n Type,\n ViewContainerRef,\n inject,\n signal,\n DOCUMENT,\n} from '@angular/core';\nimport { ReplaySubject, Subject, first } from 'rxjs';\n\nexport type DialogInput<T = any> = Type<T> | TemplateRef<any>;\n\nexport abstract class BaseDialog {\n dialogRef = inject(DialogRef);\n document = inject(DOCUMENT);\n el = inject(ElementRef);\n\n // Subclasses must provide the ViewContainerRef via viewChild signal\n abstract readonly contentContainer: () => ViewContainerRef | undefined;\n\n get vcRef(): ViewContainerRef {\n return this.contentContainer()!;\n }\n\n target = signal<HTMLElement | null>(null);\n\n // Track animation state: false = waiting for enter, true = enter complete\n private enterAnimationDone = false;\n private isFirst = true;\n private currentActiveElement = new WeakRef(this.document.activeElement as HTMLElement);\n\n // Signal to track closing state for CSS animations\n readonly closing = signal(false);\n\n // Override in subclasses to indicate if animations are used\n // If false, close() will complete immediately without waiting for animationDone()\n protected readonly hasAnimations: boolean = false;\n\n constructor() {\n this.dialogRef.setBaseDialog(this);\n this.onOpen();\n // If no animations, mark enter as done immediately\n if (!this.hasAnimations) {\n this.enterAnimationDone = true;\n }\n }\n\n setOptions(_: DialogOptions): void {}\n\n close() {\n // Only start closing if enter animation is complete\n if (this.enterAnimationDone && !this.closing()) {\n this.closing.set(true);\n // If no animations, complete close immediately\n if (!this.hasAnimations) {\n this.dialogRef._completeClose();\n this.onClose();\n }\n // Otherwise, the actual close will happen after animationDone is called\n // which triggers when the leave animation completes\n }\n }\n\n onAnimationEnd(event: AnimationEvent) {\n if (event.target === event.currentTarget) {\n this.animationDone();\n }\n }\n\n animationDone = () => {\n if (!this.enterAnimationDone) {\n // First animation end = enter animation complete\n this.enterAnimationDone = true;\n } else if (this.closing()) {\n // Second animation end while closing = leave animation complete\n this.dialogRef._completeClose();\n this.onClose();\n }\n };\n\n private onOpen() {\n // make the body not scrollable and add padding to the right\n // calculate the padding based on the scrollbar width\n this.isFirst = this.document.body.style.overflow !== 'hidden';\n if (this.isFirst) {\n const padding = window.innerWidth - this.document.body.clientWidth;\n this.document.body.style.paddingRight = `${padding}px`;\n this.document.body.style.overflow = 'hidden';\n }\n }\n\n getTarget(): HTMLElement {\n return this.target()!;\n }\n\n onClose = () => {\n if (this.isFirst) {\n this.document.body.style.paddingRight = '';\n this.document.body.style.overflow = '';\n }\n const target =\n this.dialogRef.options.afterFocusEl || this.getTarget() || this.currentActiveElement.deref();\n target?.focus();\n };\n}\n\nexport interface CloseOptions {\n closeParent?: boolean;\n}\n\nexport class DialogRef<T = any> {\n data = this.options.data;\n private baseDialog: BaseDialog | null = null;\n private pendingCloseData: any = undefined;\n private _isClosing = false;\n\n // Expose closing state for consumers who need to check\n get isClosing(): boolean {\n return this._isClosing;\n }\n\n private onDestroySource = new Subject();\n onDestroy = this.onDestroySource.asObservable().pipe(first());\n\n private afterClosedSource = new Subject<any>();\n afterClosed = this.afterClosedSource.asObservable().pipe(first());\n\n events = new ReplaySubject<'created'>(1);\n\n // Parent-child relationship\n private _parent: DialogRef | null = null;\n private _children = new Set<DialogRef>();\n\n get parent(): DialogRef | null {\n return this._parent;\n }\n\n get children(): ReadonlySet<DialogRef> {\n return this._children;\n }\n\n get root(): DialogRef {\n return this._parent?.root ?? this;\n }\n\n constructor(\n public options: DialogOptions<T>,\n private destroyParent: VoidFunction,\n private closeAllFn: VoidFunction,\n private animation = true,\n ) {\n // Register with parent if provided\n if (options.parent) {\n this._setParent(options.parent);\n }\n }\n\n _setParent(parent: DialogRef) {\n this._parent = parent;\n parent._addChild(this);\n }\n\n _addChild(child: DialogRef) {\n this._children.add(child);\n }\n\n _removeChild(child: DialogRef) {\n this._children.delete(child);\n }\n\n // Set the BaseDialog reference so we can trigger animations\n setBaseDialog(baseDialog: BaseDialog) {\n this.baseDialog = baseDialog;\n }\n\n close = (data?: any, options?: CloseOptions) => {\n // Guard: do nothing if already closing - makes close() idempotent\n if (this._isClosing) {\n return;\n }\n\n this._isClosing = true;\n\n // 1. Close all children first (if closeChildrenOnClose is true)\n if (this.options.closeChildrenOnClose !== false) {\n // Create a copy since children will remove themselves during close\n [...this._children].forEach(child => child.close());\n }\n\n // 2. If we have a BaseDialog and animation is enabled, trigger the leave animation\n if (this.baseDialog && this.animation) {\n this.pendingCloseData = data;\n this.baseDialog.close();\n } else {\n // No animation, close immediately\n this.afterClosedSource.next(data);\n this.destroy();\n }\n\n // 3. If closeParent is true, close parent after self (child → parent order)\n // This ensures children animate out before parents, maintaining visual hierarchy\n if (options?.closeParent && this._parent) {\n this._parent.close(undefined, { closeParent: true });\n }\n };\n\n // Called by BaseDialog.animationDone() after leave animation completes\n _completeClose = () => {\n this.afterClosedSource.next(this.pendingCloseData);\n this.destroy();\n };\n\n closeAll() {\n this.closeAllFn();\n }\n\n destroy() {\n // Remove self from parent's children\n this._parent?._removeChild(this);\n\n this.afterClosedSource.complete();\n this.onDestroySource.next(false);\n this.destroyParent();\n }\n}\n\nexport class DialogTestingRef {\n close() {}\n}\n\nexport class DialogOptions<T = any> {\n backdrop? = true;\n backdropColor? = true;\n hideOverlay? = false;\n data?: T;\n // isSidePopup? = false;\n title?: string;\n fullWindow?: boolean;\n minWidth?: string;\n minHeight?: string;\n width?: string;\n height?: string;\n maxWidth?: string;\n maxHeight?: string;\n classNames?: string[] = [];\n header?: boolean;\n disableClose? = false;\n ayId?: string;\n focusTrap? = true;\n afterFocusEl?: HTMLElement;\n\n // Parent-child relationship options\n parent?: DialogRef;\n closeChildrenOnClose? = true;\n}\n\nexport const DIALOG_INJ = new InjectionToken('dialogInj');\n\nexport function createInj(parent: Injector, data: any, diaRef: DialogRef) {\n return Injector.create({\n providers: [\n { provide: DIALOG_INJ, useValue: data },\n { provide: DialogRef, useValue: diaRef },\n ],\n parent,\n name: 'dialogInj',\n });\n}\n\nexport const DialogTestProviders = [\n { provide: DIALOG_INJ, useValue: {} },\n { provide: DialogRef, useValue: null },\n];\n","import { Directive, inject, input } from '@angular/core';\nimport { DialogRef } from './dialog-ref';\n\n@Directive({\n selector: '[ngbPortalClose]',\n host: {\n '(click)': 'close()',\n },\n})\nexport class NgbPortalClose {\n readonly dialogRef = inject(DialogRef);\n readonly ngbPortalClose = input();\n\n close(data = this.ngbPortalClose()) {\n this.dialogRef.close(data);\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewContainerRef, viewChild } from '@angular/core';\n\n@Component({\n selector: 'ngb-portal',\n template: `<ng-container #myDialog />`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Portal {\n myDialog = viewChild('myDialog', { read: ViewContainerRef });\n}\n","import {\n Injectable,\n Injector,\n ApplicationRef,\n Type,\n ComponentRef,\n inject,\n EnvironmentInjector,\n createComponent,\n DOCUMENT,\n} from '@angular/core';\nimport { Portal } from './portal.component';\n\n@Injectable({ providedIn: 'root' })\nexport class PortalService {\n private mainContainer?: ComponentRef<Portal>;\n private document = inject(DOCUMENT);\n private appRef = inject(ApplicationRef);\n private environmentInjector = inject(EnvironmentInjector);\n\n private trackElements = new Map<string, ComponentRef<any>[]>();\n\n private componentCreator() {\n this.mainContainer ??= this.appendComponentToBody(Portal);\n return this.mainContainer!.instance.myDialog()!;\n }\n\n appendComponentToBody<T>(component: Type<T>) {\n // 1. Create a component reference from the component\n const componentRef = createComponent(component, {\n environmentInjector: this.environmentInjector,\n });\n\n // 2. append the component to the body\n this.document.body.appendChild(componentRef.location.nativeElement);\n\n // 3. Attach component to the appRef so that it's inside the ng component tree\n this.appRef.attachView(componentRef.hostView);\n return componentRef;\n }\n\n create<T>(component: Type<T>, injector: Injector, container: string) {\n const d = this.componentCreator().createComponent(component, { injector });\n if (!this.trackElements.has(container)) {\n this.trackElements.set(container, []);\n }\n this.trackElements.get(container)!.push(d);\n return d;\n }\n\n delete<T>(container: string, component: ComponentRef<T>) {\n component.destroy();\n const elements = this.trackElements.get(container);\n if (elements) {\n const index = elements.indexOf(component);\n elements.splice(index, 1);\n }\n }\n\n clear(container: string) {\n if (this.trackElements.has(container)) {\n const elements = this.trackElements.get(container);\n // Trigger close on each component to play leave animations\n // The BaseDialog.close() method will handle the animation and eventual destruction\n elements?.forEach(c => c.instance?.close?.());\n }\n }\n}\n","import {\n ComponentRef,\n EmbeddedViewRef,\n Injector,\n TemplateRef,\n Type,\n ViewContainerRef,\n inject,\n signal,\n} from '@angular/core';\nimport { keyMap } from '@ngbase/adk/keys';\nimport { BaseDialog, DialogInput, DialogOptions, DialogRef, createInj } from './dialog-ref';\nimport { PortalService } from './portal.service';\n\nexport function basePortal<U>(name: string, baseComponent: Type<U>) {\n const NAME = name;\n const portal = inject(PortalService);\n const injector = inject(Injector);\n\n function updateBaseComponent(component: Type<U>) {\n baseComponent = component;\n }\n\n function open<T>(\n component?: DialogInput<T>,\n callback?: (comp: ComponentRef<U>, opt: DialogOptions) => void,\n opt?: DialogOptions,\n animation = true,\n parentComponent?: Type<U>,\n ) {\n const options = { ...new DialogOptions(), ...opt };\n const diaRef = new DialogRef(options, destroy, closeAll, animation);\n const childInjector = createInj(injector, options.data, diaRef);\n const parent = portal.create(parentComponent || baseComponent, childInjector, NAME);\n\n // set options\n callback?.(parent, options);\n\n // close on backdrop click\n let sub: () => void | undefined;\n const childSignal = signal<ComponentRef<any> | EmbeddedViewRef<any> | undefined>(undefined);\n\n if (component === undefined) {\n return { diaRef, parent, instance: null, childSignal };\n }\n\n const parentInstance = parent.instance as BaseDialog;\n\n // close on esc - call parentInstance.close() to trigger leave animation\n if (!options.disableClose) {\n sub = keyMap('esc', () => parentInstance.close(), { injector, stop: true });\n }\n\n function destroy() {\n portal.delete(NAME, parent);\n sub?.();\n }\n\n // Trigger change detection to initialize viewChild signals\n parent.changeDetectorRef.detectChanges();\n\n // VCR is now available after detectChanges\n const vcRef = parentInstance.vcRef;\n const child = createChild(component, vcRef);\n diaRef.events.next('created');\n childSignal.set(child);\n\n function replace(component: DialogInput<T>) {\n vcRef.clear();\n createChild(component, vcRef);\n }\n\n function createChild(component: DialogInput<any>, vcRef: ViewContainerRef) {\n // for template type\n if (component instanceof TemplateRef) {\n return vcRef.createEmbeddedView(\n component,\n { $implicit: options.data, ...(Array.isArray(options.data) ? {} : options.data) },\n { injector: parent.injector },\n );\n }\n // for component type\n return vcRef.createComponent(component, {\n injector: parent.injector,\n });\n }\n\n return { diaRef, parent, replace, childSignal };\n }\n\n function closeAll() {\n // Close each dialog properly to trigger leave animations\n portal.clear(NAME);\n }\n return { open, closeAll, updateBaseComponent };\n}\n","/*\n * Public API Surface of portal\n */\n\nexport * from './portal-close.directive';\nexport {\n BaseDialog,\n type CloseOptions,\n DIALOG_INJ,\n type DialogInput,\n DialogOptions,\n DialogRef,\n createInj,\n} from './dialog-ref';\nexport * from './portal-base.service';\nexport * from './portal.component';\nexport * from './portal.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -140,16 +140,14 @@ class NgbResizable {
140
140
  this.reducedSize = 0;
141
141
  this.localMinSize = Infinity;
142
142
  this.localMaxSize = -Infinity;
143
- this.initialReducedSize = 0;
143
+ this.lastReducedSize = 0;
144
144
  this.index = 0;
145
145
  this.str = '';
146
146
  effect(() => {
147
147
  const size = this.size();
148
148
  untracked(() => {
149
- if (size !== 'auto') {
150
- this.reducedSize = 0;
149
+ if (size !== 'auto')
151
150
  this.handleDrag();
152
- }
153
151
  this.resizable.setAuto();
154
152
  });
155
153
  });
@@ -191,24 +189,22 @@ class NgbResizable {
191
189
  : this.el.nativeElement.offsetHeight;
192
190
  }
193
191
  onStart() {
194
- this.initialReducedSize = this.reducedSize;
195
192
  const cSize = this.cSize();
196
193
  const minSize = this.getSize(this.min());
197
- this.localMinSize = Math.max(this.reducedSize + (cSize - minSize), this.reducedSize);
194
+ this.localMinSize = cSize + this.reducedSize - minSize;
198
195
  if (this.max()) {
199
196
  const maxSize = this.getSize(this.max());
200
- this.localMaxSize = Math.min(this.reducedSize - (maxSize - cSize), this.reducedSize);
201
- }
202
- else {
203
- this.localMaxSize = -Infinity;
197
+ this.localMaxSize = cSize + this.reducedSize - maxSize;
204
198
  }
199
+ // console.log(`onStart ${this.index}`, this.min(), this.localMinSize, this.localMaxSize);
205
200
  }
206
201
  onEnd() {
207
202
  this.localMinSize = Infinity;
208
203
  this.localMaxSize = -Infinity;
204
+ this.lastReducedSize = this.reducedSize;
209
205
  }
210
206
  getSize(size) {
211
- if (size === undefined || size === null || size === '')
207
+ if (!size)
212
208
  return 0;
213
209
  const minValue = size;
214
210
  if (typeof minValue === 'number') {
@@ -241,148 +237,60 @@ class NgbResizable {
241
237
  this.handleDrag(data);
242
238
  }
243
239
  }
244
- handleDrag(event) {
245
- if (!event) {
246
- this.updateFlex();
247
- return;
248
- }
240
+ handleDrag(event = { x: 0, y: 0 }) {
249
241
  const isHorizontal = this.resizable.direction() === 'horizontal';
250
242
  let delta = isHorizontal ? event.x : event.y;
243
+ delta -= this.lastReducedSize;
251
244
  const panels = this.resizable.panels();
252
- // Check how much we can move left (shrink panels before and including current)
253
245
  let remaining = -delta;
254
246
  for (let i = this.index; i >= 0; i--) {
255
247
  const panel = panels[i];
256
- remaining = panel.getUpdatedSize(panel.initialReducedSize + remaining).remaining;
257
- if (remaining === 0)
248
+ remaining = panel.getUpdatedSize(remaining).remaining;
249
+ if (remaining === 0) {
258
250
  break;
251
+ }
259
252
  }
260
253
  delta = delta + remaining;
261
- // Check how much we can move right (shrink panels after current)
262
254
  remaining = delta;
263
255
  for (let i = this.index + 1; i < panels.length; i++) {
264
256
  const panel = panels[i];
265
- remaining = panel.getUpdatedSize(panel.initialReducedSize + remaining).remaining;
266
- if (remaining === 0)
257
+ remaining = panel.getUpdatedSize(remaining).remaining;
258
+ if (remaining === 0) {
267
259
  break;
260
+ }
268
261
  }
269
262
  delta = delta - remaining;
270
- // Apply the validated delta
271
263
  const current = panels[this.index];
272
- const next = panels[this.index + 1];
273
- // Auto-Auto
274
- if (current.size() === 'auto' && next?.size() === 'auto') {
275
- this.updateSize(delta, 'prev', true);
276
- panels[this.index + 1]?.updateSize(-delta, 'next', true);
277
- this.resizable.setAuto();
278
- return;
279
- }
280
- const autos = panels.filter(p => p.size() === 'auto');
281
- const N = autos.length;
282
- if (N > 0) {
283
- // Fixed-Auto
284
- if (current.size() !== 'auto' && next?.size() === 'auto') {
285
- this.updateSize(delta, 'prev');
286
- const input = -delta;
287
- console.log('auto 1');
288
- autos.forEach(auto => {
289
- const factor = auto === next ? (N - 1) / N : -1 / N;
290
- auto.updateSize(input * factor, 'next', true);
291
- });
292
- this.resizable.setAuto();
293
- return;
294
- }
295
- // Auto-Fixed
296
- if (current.size() === 'auto' && next?.size() !== 'auto') {
297
- next?.updateSize(-delta, 'next');
298
- const input = delta;
299
- console.log('auto 2');
300
- autos.forEach(auto => {
301
- const factor = auto === current ? (N - 1) / N : -1 / N;
302
- auto.updateSize(input * factor, 'prev', true);
303
- });
304
- this.resizable.setAuto();
305
- return;
306
- }
307
- }
308
- // Fixed-Fixed
309
- this.updateSize(delta, 'prev');
310
- panels[this.index + 1]?.updateSize(-delta, 'next');
311
- this.resizable.setAuto();
264
+ current.updateSize(delta, 'both');
312
265
  }
313
266
  getUpdatedSize(px) {
314
267
  const v = Math.max(Math.min(px, this.localMinSize), this.localMaxSize);
315
268
  return { remaining: px - v, value: v };
316
269
  }
317
- updateSize(delta, direct, force = false) {
318
- if (this.size() === 'auto' && !force) {
319
- this.reducedSize = 0;
320
- this.updateFlex();
321
- return;
322
- }
323
- const requestedReducedSize = this.initialReducedSize - delta;
324
- const { remaining, value } = this.getUpdatedSize(requestedReducedSize);
270
+ updateSize(px, direct) {
271
+ const prevSize = -px;
272
+ const { remaining, value } = this.getUpdatedSize(prevSize);
325
273
  this.reducedSize = value;
326
274
  this.updateFlex();
327
- const actualDelta = this.initialReducedSize - this.reducedSize;
328
- const unabsorbed = delta - actualDelta;
329
- console.log('unabsorbed', this.index, actualDelta, unabsorbed);
330
- if (unabsorbed !== 0) {
331
- const nextIndex = direct === 'next' ? this.index + 1 : this.index - 1;
332
- const neighbor = this.resizable.panels()[nextIndex];
333
- if (neighbor && neighbor.size() === 'auto') {
334
- const autos = this.resizable.panels().filter(p => p.size() === 'auto');
335
- const N = autos.length;
336
- if (N > 0) {
337
- const baseShift = unabsorbed / N;
338
- const targets = new Map();
339
- autos.forEach(a => targets.set(a, 0));
340
- let remaining = unabsorbed;
341
- const neighborIdx = autos.findIndex(a => a.index === neighbor.index);
342
- // safe guard
343
- if (neighborIdx === -1)
344
- return;
345
- const relevantAutos = direct === 'next'
346
- ? autos.slice(neighborIdx)
347
- : autos.slice(0, neighborIdx + 1).reverse();
348
- for (const panel of relevantAutos) {
349
- const maxShrink = panel['localMinSize'] - panel.initialReducedSize;
350
- const maxGrow = panel.initialReducedSize - panel['localMaxSize'];
351
- const allowedShrink = -maxShrink;
352
- const allowedGrow = maxGrow;
353
- const consumed = Math.max(allowedShrink, Math.min(allowedGrow, remaining));
354
- targets.set(panel, consumed);
355
- remaining -= consumed;
356
- if (Math.abs(remaining) < 0.1)
357
- break;
358
- }
359
- // const tracks: number[] = [];
360
- autos.forEach(auto => {
361
- const t = targets.get(auto) || 0;
362
- const d = t - baseShift;
363
- // tracks.push(d);
364
- auto.updateSize(d, direct, true);
365
- });
366
- // console.log('auto 3 ', tracks, baseShift);
367
- }
368
- }
369
- else {
370
- neighbor?.updateSize(unabsorbed, direct);
371
- }
275
+ const isSame = prevSize !== this.reducedSize;
276
+ const v = direct === 'both' ? px : remaining;
277
+ if ((isSame && direct === 'next') || direct === 'both') {
278
+ // console.log(`updateSize ${this.index}`, this.reducedSize, px, value, v);
279
+ const next = this.resizable.panels()[this.index + 1];
280
+ next?.updateSize(-v, 'next');
281
+ }
282
+ if (isSame && (direct === 'prev' || direct === 'both')) {
283
+ const prev = this.resizable.panels()[this.index - 1];
284
+ prev?.updateSize(v, 'prev');
372
285
  }
373
286
  }
374
287
  calculateSize() {
375
288
  const size = this.lSize();
376
- if (this.size() === 'auto' && this.reducedSize === 0) {
377
- return size;
378
- }
379
289
  const baseSize = typeof size === 'number' ? `${size}%` : size;
380
290
  if (this.reducedSize === 0) {
381
291
  return baseSize;
382
292
  }
383
- const sign = this.reducedSize > 0 ? '-' : '+';
384
- const absSize = Math.abs(this.reducedSize);
385
- return `calc(${baseSize} ${sign} ${absSize}px)`;
293
+ return `calc(${baseSize} - ${this.reducedSize}px)`;
386
294
  }
387
295
  updateFlex() {
388
296
  const size = this.calculateSize();