diff --git a/projects/angular-split/src/lib/split-area/split-area.component.ts b/projects/angular-split/src/lib/split-area/split-area.component.ts index caf10d2..7a84854 100644 --- a/projects/angular-split/src/lib/split-area/split-area.component.ts +++ b/projects/angular-split/src/lib/split-area/split-area.component.ts @@ -8,9 +8,10 @@ import { inject, input, isDevMode, + linkedSignal, } from '@angular/core' import { SPLIT_AREA_CONTRACT, SplitComponent } from '../split/split.component' -import { createClassesString, mirrorSignal } from '../utils' +import { createClassesString } from '../utils' import { SplitAreaSize, areaSizeTransform, boundaryAreaSizeTransform } from '../models' @Component({ @@ -39,19 +40,15 @@ export class SplitAreaComponent { /** * @internal */ - readonly _internalSize = mirrorSignal( - // As size is an input and we can change the size without the outside - // listening to the change we need an intermediate writeable signal - computed((): SplitAreaSize => { - if (!this.visible()) { - return 0 - } + readonly _internalSize = linkedSignal((): SplitAreaSize => { + if (!this.visible()) { + return 0 + } - const visibleIndex = this.split._visibleAreas().findIndex((area) => area === this) + const visibleIndex = this.split._visibleAreas().findIndex((area) => area === this) - return this.split._alignedVisibleAreasSizes()[visibleIndex] - }), - ) + return this.split._alignedVisibleAreasSizes()[visibleIndex] + }) /** * @internal */ diff --git a/projects/angular-split/src/lib/utils.ts b/projects/angular-split/src/lib/utils.ts index 3da54eb..2f41514 100644 --- a/projects/angular-split/src/lib/utils.ts +++ b/projects/angular-split/src/lib/utils.ts @@ -1,4 +1,4 @@ -import { NgZone, Signal, computed, inject, numberAttribute, signal, untracked } from '@angular/core' +import { NgZone, inject, numberAttribute } from '@angular/core' import { Observable, filter, fromEvent, merge } from 'rxjs' export interface ClientPoint { @@ -106,25 +106,6 @@ export function createClassesString(classesRecord: Record) { .join(' ') } -export interface MirrorSignal { - (): T - set(value: T): void - reset(): void -} - -/** - * Creates a semi signal which allows writes but is based on an existing signal - * Whenever the original signal changes the mirror signal gets aligned - * overriding the current value inside. - */ -export function mirrorSignal(outer: Signal): MirrorSignal { - const inner = computed(() => signal(outer())) - const mirror: MirrorSignal = () => inner()() - mirror.set = (value: T) => untracked(inner).set(value) - mirror.reset = () => untracked(() => inner().set(outer())) - return mirror -} - export function leaveNgZone() { return (source: Observable) => new Observable((observer) => inject(NgZone).runOutsideAngular(() => source.subscribe(observer)))