forty-cdk 0.35.0 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import { ApplicationRef, DOCUMENT, DestroyRef, Directive, ElementRef, EnvironmentInjector, Injectable, InjectionToken, Injector, PLATFORM_ID, afterNextRender, booleanAttribute, computed, effect, inject, input, isDevMode, linkedSignal, numberAttribute, output, signal, untracked } from "@angular/core";
3
3
  import { isPlatformBrowser } from "@angular/common";
4
- import { Collection, FormUiControlBase, IdGenerator, MODAL_EXEMPT_ATTRIBUTE, MODAL_PEER_ATTRIBUTE, accessibleTextContent, adoptHostId, afterNextRenderCancellable, composedClosest, composedContains, composedParentElement, createSingleSlot, createVetoableEvent, createVetoableNativeEvent, emitVetoableNativeEvent, findFirstFocusable, findTabbableEdges, firstEnabledHandle, firstEnabledHost, fortyError, fortyWarn, hostAriaLabel, hostDescribedBy, hostLabelledBy, injectFieldAnchor, injectFocusTrap, injectPortal, injectTypeahead, injectVetoableEmitter, isHoverCapablePointer, isImeComposing, isInitialFocusTarget, isNonTouchPointer, lastEnabledHandle, lastEnabledHost, leavesTabSequence, nextEnabledHandle, orphanContextError, resolveActiveElement, resolveEventTarget, resolveListTypeahead } from "forty-cdk/core";
4
+ import { Collection, FOR_FIELD_ANCHOR_CONTEXT, FOR_FIELD_CONTEXT, FormUiControlBase, IdGenerator, MODAL_EXEMPT_ATTRIBUTE, MODAL_PEER_ATTRIBUTE, accessibleTextContent, adoptHostId, afterNextRenderCancellable, composedClosest, composedContains, composedParentElement, createSingleSlot, createVetoableEvent, createVetoableNativeEvent, emitVetoableNativeEvent, findFirstFocusable, findTabbableEdges, firstEnabledHandle, firstEnabledHost, fortyError, fortyWarn, hostAriaLabel, hostDescribedBy, hostLabelledBy, injectFieldAnchor, injectFocusTrap, injectPortal, injectTypeahead, injectVetoableEmitter, isHoverCapablePointer, isImeComposing, isInitialFocusTarget, isNonTouchPointer, lastEnabledHandle, lastEnabledHost, leavesTabSequence, nextEnabledHandle, orphanContextError, resolveActiveElement, resolveEventTarget, resolveListTypeahead } from "forty-cdk/core";
5
5
  import { arrow, autoUpdate, computePosition, flip, hide, offset, shift, size } from "@floating-ui/dom";
6
6
  import { CssVarNamespacer } from "@angular/platform-browser";
7
7
  var BodyScrollLock = class BodyScrollLock {
@@ -3159,22 +3159,26 @@ var OverlayManagerCore = class {
3159
3159
  });
3160
3160
  }
3161
3161
  createInjectorFactory(providers, scope) {
3162
- let cachedInjector = null;
3163
- let cachedParent = null;
3162
+ let cached = null;
3164
3163
  return (parent) => {
3165
- if (cachedInjector && cachedParent === parent) return cachedInjector;
3166
- cachedParent = parent;
3167
- cachedInjector = scope ? Injector.create({
3164
+ if (cached?.parent === parent) return cached.injector;
3165
+ cached?.release();
3166
+ const injector = scope ? Injector.create({
3168
3167
  parent: scope.injector,
3169
- providers: [{
3170
- provide: scope.contextToken,
3171
- useValue: parent.get(scope.contextToken)
3172
- }, ...providers]
3168
+ providers: [...[scope.contextToken, ...FIELD_BOUNDARY_TOKENS].map((token) => ({
3169
+ provide: token,
3170
+ useValue: parent.get(token)
3171
+ })), ...providers]
3173
3172
  }) : Injector.create({
3174
3173
  parent,
3175
3174
  providers: [...providers]
3176
3175
  });
3177
- return cachedInjector;
3176
+ cached = {
3177
+ parent,
3178
+ injector,
3179
+ release: bindInjectorLifetime(injector, parent)
3180
+ };
3181
+ return injector;
3178
3182
  };
3179
3183
  }
3180
3184
  register(entry) {
@@ -3221,6 +3225,21 @@ var OverlayManagerCore = class {
3221
3225
  this.#outletRef = outletRef;
3222
3226
  }
3223
3227
  };
3228
+ const FIELD_BOUNDARY_TOKENS = [FOR_FIELD_CONTEXT, FOR_FIELD_ANCHOR_CONTEXT];
3229
+ function bindInjectorLifetime(injector, parent) {
3230
+ let destroyed = false;
3231
+ const destroy = () => {
3232
+ if (!destroyed) {
3233
+ destroyed = true;
3234
+ injector.destroy();
3235
+ }
3236
+ };
3237
+ const unregister = parent.get(DestroyRef).onDestroy(destroy);
3238
+ return () => {
3239
+ unregister();
3240
+ destroy();
3241
+ };
3242
+ }
3224
3243
  function isRecursiveTickError(error) {
3225
3244
  if (error === null || typeof error !== "object") return false;
3226
3245
  const { code, message } = error;