@filip.mazev/blocks 1.4.15 → 1.4.17

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.
@@ -168,25 +168,33 @@ function optionalNumber(value) {
168
168
  function optionalBoolean(value) {
169
169
  return value === void 0 || value === null ? void 0 : booleanAttribute(value);
170
170
  }
171
- function injectComponentSurface(options = () => ({})) {
171
+ function injectComponentSurface(options = () => ({}), enabled = () => true) {
172
172
  const element = inject(ElementRef);
173
173
  const zone = inject(NgZone);
174
174
  const a11y = inject(BxA11yService);
175
175
  inject(ThemingService);
176
176
  let surface;
177
+ let rendered = false;
177
178
  const browser = isPlatformBrowser(inject(PLATFORM_ID));
178
- effect(() => {
179
+ const sync = () => {
179
180
  const current = {
180
181
  ...options(),
181
182
  reducedMotion: a11y.isReducedMotion()
182
183
  };
183
- zone.runOutsideAngular(() => surface?.update(current));
184
- });
184
+ const active = enabled();
185
+ if (!browser || !rendered) return;
186
+ zone.runOutsideAngular(() => {
187
+ if (!active) {
188
+ surface?.destroy();
189
+ surface = void 0;
190
+ } else if (surface) surface.update(current);
191
+ else if (!element.nativeElement.hasAttribute("data-bx-surface")) surface = mountSurface(element.nativeElement, current);
192
+ });
193
+ };
194
+ effect(sync);
185
195
  afterNextRender(() => {
186
- if (browser && !element.nativeElement.hasAttribute("data-bx-surface")) surface = zone.runOutsideAngular(() => mountSurface(element.nativeElement, {
187
- ...options(),
188
- reducedMotion: a11y.isReducedMotion()
189
- }));
196
+ rendered = true;
197
+ sync();
190
198
  });
191
199
  inject(DestroyRef).onDestroy(() => surface?.destroy());
192
200
  }
@@ -1 +1 @@
1
- {"version":3,"file":"filip.mazev-blocks-effects.mjs","names":[],"sources":["../../../projects/blocks/effects/directives/surface.directive.ts","../../../projects/blocks/effects/component-surface.ts","../../../projects/blocks/effects/lighting.service.ts"],"sourcesContent":["import { isPlatformBrowser } from '@angular/common';\nimport { AfterViewInit, booleanAttribute, DestroyRef, Directive, effect, ElementRef, inject, input, NgZone, numberAttribute, PLATFORM_ID } from '@angular/core';\nimport { BxA11yService, ThemingService } from '@filip.mazev/blocks/core';\nimport { mountSurface, SurfaceOptions } from '@filip.mazev/blocks/effects/runtime';\n\n/** Adds a decorative material without replacing native controls or their content. */\n@Directive({\n selector: '[bxSurface]',\n standalone: true,\n exportAs: 'bxSurface'\n})\nexport class BxSurfaceDirective implements AfterViewInit {\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly theme = inject(ThemingService);\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n public readonly bxSurfaceInteractive = input<boolean | undefined, unknown>(undefined, { transform: optionalBoolean });\n public readonly bxSurfaceGlassiness = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n public readonly bxSurfaceEmission = input<string | undefined>();\n public readonly bxSurfaceFocusEmission = input<string | undefined>();\n public readonly bxReducedTransparency = input<boolean | undefined, unknown>(undefined, {\n transform: optionalBoolean\n });\n\n private surface?: ReturnType<typeof mountSurface>;\n\n constructor() {\n effect(() => {\n const options = this.options();\n this.zone.runOutsideAngular(() => this.surface?.update(options));\n });\n\n inject(DestroyRef).onDestroy(() => {\n this.surface?.destroy();\n this.surface = undefined;\n });\n }\n\n public ngAfterViewInit(): void {\n if (this.isBrowser) {\n const options = this.options();\n this.surface = this.zone.runOutsideAngular(() => mountSurface(this.element.nativeElement, options));\n }\n }\n\n private options(): SurfaceOptions {\n return {\n glassiness: this.bxSurfaceGlassiness(),\n interactive: this.bxSurfaceInteractive(),\n reducedMotion: this.a11y.isReducedMotion(),\n reducedTransparency: this.bxReducedTransparency(),\n emission: this.bxSurfaceEmission(),\n focusEmission: this.bxSurfaceFocusEmission()\n };\n }\n}\n\nfunction optionalNumber(value: unknown): number | undefined {\n return value === undefined || value === null ? undefined : numberAttribute(value);\n}\n\nfunction optionalBoolean(value: unknown): boolean | undefined {\n return value === undefined || value === null ? undefined : booleanAttribute(value);\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { afterNextRender, DestroyRef, effect, ElementRef, inject, NgZone, PLATFORM_ID } from '@angular/core';\nimport { BxA11yService, ThemingService } from '@filip.mazev/blocks/core';\nimport { mountSurface, SurfaceOptions } from '@filip.mazev/blocks/effects/runtime';\n\n/** Internal component integration. An explicit bxSurface directive takes precedence. */\nexport function injectComponentSurface(options: () => SurfaceOptions = () => ({})): void {\n const element = inject<ElementRef<HTMLElement>>(ElementRef);\n const zone = inject(NgZone);\n const a11y = inject(BxA11yService);\n inject(ThemingService);\n let surface: ReturnType<typeof mountSurface> | undefined;\n const browser = isPlatformBrowser(inject(PLATFORM_ID));\n effect(() => {\n const current = { ...options(), reducedMotion: a11y.isReducedMotion() };\n zone.runOutsideAngular(() => surface?.update(current));\n });\n afterNextRender(() => {\n if (browser && !element.nativeElement.hasAttribute('data-bx-surface')) {\n surface = zone.runOutsideAngular(() =>\n mountSurface(element.nativeElement, {\n ...options(),\n reducedMotion: a11y.isReducedMotion()\n })\n );\n }\n });\n inject(DestroyRef).onDestroy(() => surface?.destroy());\n}\n","import { Injectable, NgZone, inject } from '@angular/core';\nimport { GlassLight, GlassScene, mountGlassScene } from '@filip.mazev/blocks/effects/runtime';\n\nexport interface BxGlassLight {\n update(light: GlassLight): void;\n destroy(): void;\n}\n\n/** Combine local semantic emitters without replacing another field's or toast's light. */\n@Injectable({ providedIn: 'root' })\nexport class BxGlassLightingService {\n private readonly zone = inject(NgZone);\n private readonly groups = new Map<HTMLElement, { scene: GlassScene; lights: Map<symbol, GlassLight> }>();\n\n public register(root: HTMLElement, light: GlassLight): BxGlassLight {\n let group = this.groups.get(root);\n if (!group) {\n group = { scene: this.zone.runOutsideAngular(() => mountGlassScene(root)), lights: new Map() };\n this.groups.set(root, group);\n }\n const current = group;\n const id = Symbol();\n let disposed = false;\n const sync = () => this.zone.runOutsideAngular(() => current.scene.update({ lights: [...current.lights.values()] }));\n current.lights.set(id, light);\n sync();\n return {\n update: (next) => {\n if (!disposed) {\n current.lights.set(id, next);\n sync();\n }\n },\n destroy: () => {\n if (disposed) return;\n disposed = true;\n current.lights.delete(id);\n if (current.lights.size) sync();\n else {\n this.zone.runOutsideAngular(() => current.scene.destroy());\n this.groups.delete(root);\n }\n }\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"filip.mazev-blocks-effects.mjs","names":[],"sources":["../../../projects/blocks/effects/directives/surface.directive.ts","../../../projects/blocks/effects/component-surface.ts","../../../projects/blocks/effects/lighting.service.ts"],"sourcesContent":["import { isPlatformBrowser } from '@angular/common';\nimport { AfterViewInit, booleanAttribute, DestroyRef, Directive, effect, ElementRef, inject, input, NgZone, numberAttribute, PLATFORM_ID } from '@angular/core';\nimport { BxA11yService, ThemingService } from '@filip.mazev/blocks/core';\nimport { mountSurface, SurfaceOptions } from '@filip.mazev/blocks/effects/runtime';\n\n/** Adds a decorative material without replacing native controls or their content. */\n@Directive({\n selector: '[bxSurface]',\n standalone: true,\n exportAs: 'bxSurface'\n})\nexport class BxSurfaceDirective implements AfterViewInit {\n private readonly element = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly theme = inject(ThemingService);\n private readonly a11y = inject(BxA11yService);\n private readonly zone = inject(NgZone);\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n public readonly bxSurfaceInteractive = input<boolean | undefined, unknown>(undefined, { transform: optionalBoolean });\n public readonly bxSurfaceGlassiness = input<number | undefined, unknown>(undefined, { transform: optionalNumber });\n public readonly bxSurfaceEmission = input<string | undefined>();\n public readonly bxSurfaceFocusEmission = input<string | undefined>();\n public readonly bxReducedTransparency = input<boolean | undefined, unknown>(undefined, {\n transform: optionalBoolean\n });\n\n private surface?: ReturnType<typeof mountSurface>;\n\n constructor() {\n effect(() => {\n const options = this.options();\n this.zone.runOutsideAngular(() => this.surface?.update(options));\n });\n\n inject(DestroyRef).onDestroy(() => {\n this.surface?.destroy();\n this.surface = undefined;\n });\n }\n\n public ngAfterViewInit(): void {\n if (this.isBrowser) {\n const options = this.options();\n this.surface = this.zone.runOutsideAngular(() => mountSurface(this.element.nativeElement, options));\n }\n }\n\n private options(): SurfaceOptions {\n return {\n glassiness: this.bxSurfaceGlassiness(),\n interactive: this.bxSurfaceInteractive(),\n reducedMotion: this.a11y.isReducedMotion(),\n reducedTransparency: this.bxReducedTransparency(),\n emission: this.bxSurfaceEmission(),\n focusEmission: this.bxSurfaceFocusEmission()\n };\n }\n}\n\nfunction optionalNumber(value: unknown): number | undefined {\n return value === undefined || value === null ? undefined : numberAttribute(value);\n}\n\nfunction optionalBoolean(value: unknown): boolean | undefined {\n return value === undefined || value === null ? undefined : booleanAttribute(value);\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { afterNextRender, DestroyRef, effect, ElementRef, inject, NgZone, PLATFORM_ID } from '@angular/core';\nimport { BxA11yService, ThemingService } from '@filip.mazev/blocks/core';\nimport { mountSurface, SurfaceOptions } from '@filip.mazev/blocks/effects/runtime';\n\n/** Internal component integration. An explicit bxSurface directive takes precedence. */\nexport function injectComponentSurface(options: () => SurfaceOptions = () => ({}), enabled: () => boolean = () => true): void {\n const element = inject<ElementRef<HTMLElement>>(ElementRef);\n const zone = inject(NgZone);\n const a11y = inject(BxA11yService);\n inject(ThemingService);\n let surface: ReturnType<typeof mountSurface> | undefined;\n let rendered = false;\n const browser = isPlatformBrowser(inject(PLATFORM_ID));\n const sync = () => {\n const current = { ...options(), reducedMotion: a11y.isReducedMotion() };\n const active = enabled();\n\n if (!browser || !rendered) return;\n\n zone.runOutsideAngular(() => {\n if (!active) {\n surface?.destroy();\n surface = undefined;\n } else if (surface) surface.update(current);\n else if (!element.nativeElement.hasAttribute('data-bx-surface')) surface = mountSurface(element.nativeElement, current);\n });\n };\n effect(sync);\n afterNextRender(() => {\n rendered = true;\n sync();\n });\n inject(DestroyRef).onDestroy(() => surface?.destroy());\n}\n","import { Injectable, NgZone, inject } from '@angular/core';\nimport { GlassLight, GlassScene, mountGlassScene } from '@filip.mazev/blocks/effects/runtime';\n\nexport interface BxGlassLight {\n update(light: GlassLight): void;\n destroy(): void;\n}\n\n/** Combine local semantic emitters without replacing another field's or toast's light. */\n@Injectable({ providedIn: 'root' })\nexport class BxGlassLightingService {\n private readonly zone = inject(NgZone);\n private readonly groups = new Map<HTMLElement, { scene: GlassScene; lights: Map<symbol, GlassLight> }>();\n\n public register(root: HTMLElement, light: GlassLight): BxGlassLight {\n let group = this.groups.get(root);\n if (!group) {\n group = { scene: this.zone.runOutsideAngular(() => mountGlassScene(root)), lights: new Map() };\n this.groups.set(root, group);\n }\n const current = group;\n const id = Symbol();\n let disposed = false;\n const sync = () => this.zone.runOutsideAngular(() => current.scene.update({ lights: [...current.lights.values()] }));\n current.lights.set(id, light);\n sync();\n return {\n update: (next) => {\n if (!disposed) {\n current.lights.set(id, next);\n sync();\n }\n },\n destroy: () => {\n if (disposed) return;\n disposed = true;\n current.lights.delete(id);\n if (current.lights.size) sync();\n else {\n this.zone.runOutsideAngular(() => current.scene.destroy());\n this.groups.delete(root);\n }\n }\n };\n }\n}\n"],"mappings":"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"}