@ethlete/core 5.0.0-next.27 → 5.0.0-next.29

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.
@@ -36,7 +36,21 @@ export default async function generate(tree, schema) {
36
36
  logger.log(' export const THEMES = [...] satisfies Theme[];\n');
37
37
  return;
38
38
  }
39
- // Step 4: Validate theme configuration
39
+ // Step 4: Apply the generation-time default override, if any. The shared theme
40
+ // definitions may mark a default via isDefault, but in a monorepo each app picks its
41
+ // own default at its generation invocation — the option wins over the definitions.
42
+ if (schema.defaultTheme) {
43
+ try {
44
+ const defaultName = applyDefaultThemeOverride(themes, schema.defaultTheme);
45
+ logger.log(`🎯 Default theme set at generation time: ${defaultName}`);
46
+ }
47
+ catch (error) {
48
+ logger.error('❌ Invalid --defaultTheme option');
49
+ logger.error(` ${error instanceof Error ? error.message : String(error)}`);
50
+ return;
51
+ }
52
+ }
53
+ // Step 5: Validate theme configuration
40
54
  try {
41
55
  validateThemeConfiguration(themes);
42
56
  }
@@ -45,24 +59,24 @@ export default async function generate(tree, schema) {
45
59
  logger.error(` ${error instanceof Error ? error.message : String(error)}`);
46
60
  return;
47
61
  }
48
- // Step 5: Generate Tailwind CSS
62
+ // Step 6: Generate Tailwind CSS
49
63
  logger.log('\n🎨 Generating Tailwind theme CSS...');
50
64
  const css = generateTailwindThemeCss(themes, prefix, runtimePrefix, schema);
51
- // Step 6: Write the generated CSS file
65
+ // Step 7: Write the generated CSS file
52
66
  const outputDir = outputPath.substring(0, outputPath.lastIndexOf('/'));
53
67
  if (outputDir && !tree.exists(outputDir)) {
54
68
  logger.log(`📁 Creating directory: ${outputDir}`);
55
69
  }
56
70
  tree.write(outputPath, css);
57
71
  logger.log(`✅ Generated Tailwind themes at: ${outputPath}`);
58
- // Step 7: Generate the `EthleteColorThemeNameRegistry` augmentation, so `etProvideColor`
72
+ // Step 8: Generate the `EthleteColorThemeNameRegistry` augmentation, so `etProvideColor`
59
73
  // (and anything else that accepts a `RegisteredColorThemeName`) is checked/autocompleted
60
74
  // against this app's actual theme names, instead of a plain `string`.
61
75
  const typesOutputPath = schema.typesOutputPath || outputPath.replace(/\.css$/, '.d.ts');
62
76
  const typesDts = generateColorThemeNameTypes(themes, schema);
63
77
  tree.write(typesOutputPath, typesDts);
64
78
  logger.log(`✅ Generated color theme name types at: ${typesOutputPath}`);
65
- // Step 8: Try to find and update main styles file
79
+ // Step 9: Try to find and update main styles file
66
80
  const mainStylesFiles = findMainStylesFile(tree);
67
81
  if (mainStylesFiles.length > 0) {
68
82
  logger.log('\n📝 Found potential main styles files:');
@@ -195,6 +209,19 @@ function parseThemeObject(obj, sourceFile) {
195
209
  }
196
210
  return theme;
197
211
  }
212
+ // Makes the named theme the sole default, overriding any isDefault flags in the theme
213
+ // definitions. Matches the theme's name or its CSS-safe form. Returns the resolved name.
214
+ function applyDefaultThemeOverride(themes, defaultTheme) {
215
+ const wanted = createCssThemeName(defaultTheme);
216
+ const target = themes.find((t) => t.name === defaultTheme || createCssThemeName(t.name) === wanted);
217
+ if (!target) {
218
+ throw new Error(`No theme named "${defaultTheme}" found. Available themes: ${themes.map((t) => t.name).join(', ')}`);
219
+ }
220
+ for (const theme of themes) {
221
+ theme.isDefault = theme === target;
222
+ }
223
+ return target.name;
224
+ }
198
225
  function validateThemeConfiguration(themes) {
199
226
  const defaultThemes = themes.filter((t) => t.isDefault);
200
227
  // Error: No default theme
@@ -317,7 +344,7 @@ function generateColorThemeNameTypes(themes, schema) {
317
344
  * DO NOT EDIT THIS FILE MANUALLY
318
345
  *
319
346
  * Regenerate by running:
320
- * nx g @ethlete/core:tailwind-4-color-theme --themesPath=${themesPath}${schema.outputPath ? ` --outputPath=${outputPath}` : ''}${schema.typesOutputPath ? ` --typesOutputPath=${typesOutputPath}` : ''}${schema.prefix && schema.prefix !== 'et' ? ` --prefix=${schema.prefix}` : ''}${schema.runtimePrefix && schema.runtimePrefix !== schema.prefix ? ` --runtimePrefix=${schema.runtimePrefix}` : ''}
347
+ * nx g @ethlete/core:tailwind-4-color-theme --themesPath=${themesPath}${schema.outputPath ? ` --outputPath=${outputPath}` : ''}${schema.typesOutputPath ? ` --typesOutputPath=${typesOutputPath}` : ''}${schema.prefix && schema.prefix !== 'et' ? ` --prefix=${schema.prefix}` : ''}${schema.runtimePrefix && schema.runtimePrefix !== schema.prefix ? ` --runtimePrefix=${schema.runtimePrefix}` : ''}${schema.defaultTheme ? ` --defaultTheme=${schema.defaultTheme}` : ''}
321
348
  */
322
349
 
323
350
  declare module '@ethlete/core' {
@@ -340,7 +367,7 @@ function generateTailwindThemeCss(themes, utilityPrefix, runtimePrefix, schema)
340
367
  *
341
368
  * Generated from your theme definitions
342
369
  * This file can be regenerated by running:
343
- * nx g @ethlete/core:tailwind-4-color-theme --themesPath=${themesPath}${schema.outputPath ? ` --outputPath=${outputPath}` : ''}${schema.prefix && schema.prefix !== 'et' ? ` --prefix=${schema.prefix}` : ''}${schema.runtimePrefix && schema.runtimePrefix !== utilityPrefix ? ` --runtimePrefix=${schema.runtimePrefix}` : ''}
370
+ * nx g @ethlete/core:tailwind-4-color-theme --themesPath=${themesPath}${schema.outputPath ? ` --outputPath=${outputPath}` : ''}${schema.prefix && schema.prefix !== 'et' ? ` --prefix=${schema.prefix}` : ''}${schema.runtimePrefix && schema.runtimePrefix !== utilityPrefix ? ` --runtimePrefix=${schema.runtimePrefix}` : ''}${schema.defaultTheme ? ` --defaultTheme=${schema.defaultTheme}` : ''}
344
371
  */
345
372
 
346
373
  `;
@@ -30,6 +30,10 @@
30
30
  "type": "string",
31
31
  "description": "Prefix for the runtime theme-swap mechanism: the CSS custom properties (--<runtimePrefix>-color-primary) and selectors (.<runtimePrefix>-color--<name>) that ProvideColorDirective (etProvideColor) toggles between. Defaults to the same value as 'prefix'. Set this separately when your Tailwind utility prefix needs to differ from your runtime theme-switching prefix (e.g. because '--color-primary' is already a documented public API elsewhere in your app)."
32
32
  },
33
+ "defaultTheme": {
34
+ "type": "string",
35
+ "description": "Name of the theme to use as the default, overriding any isDefault flags in the theme definitions. Use this when multiple apps share one theme definition set (e.g. in a monorepo) but each app needs a different default."
36
+ },
33
37
  "skipFormat": {
34
38
  "type": "boolean",
35
39
  "description": "Skip formatting files after generation",
@@ -33,6 +33,24 @@ export default async function generate(tree, schema) {
33
33
  logger.log(' export const SURFACE_THEMES = [...] satisfies SurfaceTheme[];\n');
34
34
  return;
35
35
  }
36
+ // Apply the generation-time default overrides, if any. The shared theme definitions may
37
+ // mark defaults via isDefault, but in a monorepo each app picks its own defaults at its
38
+ // generation invocation — the options win over the definitions (per surface type).
39
+ try {
40
+ if (schema.defaultLightTheme) {
41
+ const name = applyDefaultSurfaceThemeOverride(themes, schema.defaultLightTheme, 'light');
42
+ logger.log(`🎯 Default light surface theme set at generation time: ${name}`);
43
+ }
44
+ if (schema.defaultDarkTheme) {
45
+ const name = applyDefaultSurfaceThemeOverride(themes, schema.defaultDarkTheme, 'dark');
46
+ logger.log(`🎯 Default dark surface theme set at generation time: ${name}`);
47
+ }
48
+ }
49
+ catch (error) {
50
+ logger.error('❌ Invalid default theme option');
51
+ logger.error(` ${error instanceof Error ? error.message : String(error)}`);
52
+ return;
53
+ }
36
54
  try {
37
55
  validateSurfaceThemeConfiguration(themes);
38
56
  }
@@ -202,6 +220,27 @@ function parseSurfaceThemeObject(obj) {
202
220
  }
203
221
  return theme;
204
222
  }
223
+ // Makes the named theme the sole default of its surface type, overriding any isDefault
224
+ // flags on themes of that type. Matches the theme's name or its CSS-safe form. Themes of
225
+ // the other type keep their flags. Returns the resolved name.
226
+ function applyDefaultSurfaceThemeOverride(themes, defaultTheme, type) {
227
+ const wanted = createCssSurfaceName(defaultTheme);
228
+ const matches = themes.filter((t) => t.name === defaultTheme || createCssSurfaceName(t.name) === wanted);
229
+ const target = matches.find((t) => t.type === type);
230
+ if (!target) {
231
+ if (matches.length > 0) {
232
+ throw new Error(`Theme "${defaultTheme}" has type '${matches[0].type}', but was passed as the default '${type}' theme`);
233
+ }
234
+ const available = themes.filter((t) => t.type === type).map((t) => t.name);
235
+ throw new Error(`No surface theme named "${defaultTheme}" found. Available '${type}' themes: ${available.join(', ')}`);
236
+ }
237
+ for (const theme of themes) {
238
+ if (theme.type === type) {
239
+ theme.isDefault = theme === target;
240
+ }
241
+ }
242
+ return target.name;
243
+ }
205
244
  function validateSurfaceThemeConfiguration(themes) {
206
245
  const defaultThemes = themes.filter((t) => t.isDefault);
207
246
  if (defaultThemes.length === 0) {
@@ -236,7 +275,7 @@ function generateSurfaceThemeNameTypes(themes, schema) {
236
275
  * DO NOT EDIT THIS FILE MANUALLY
237
276
  *
238
277
  * Regenerate by running:
239
- * nx g @ethlete/core:tailwind-4-surface-theme --themesPath=${themesPath}${schema.outputPath ? ` --outputPath=${outputPath}` : ''}${schema.typesOutputPath ? ` --typesOutputPath=${typesOutputPath}` : ''}${schema.prefix && schema.prefix !== 'et' ? ` --prefix=${schema.prefix}` : ''}
278
+ * nx g @ethlete/core:tailwind-4-surface-theme --themesPath=${themesPath}${schema.outputPath ? ` --outputPath=${outputPath}` : ''}${schema.typesOutputPath ? ` --typesOutputPath=${typesOutputPath}` : ''}${schema.prefix && schema.prefix !== 'et' ? ` --prefix=${schema.prefix}` : ''}${schema.defaultLightTheme ? ` --defaultLightTheme=${schema.defaultLightTheme}` : ''}${schema.defaultDarkTheme ? ` --defaultDarkTheme=${schema.defaultDarkTheme}` : ''}
240
279
  */
241
280
 
242
281
  declare module '@ethlete/core' {
@@ -259,7 +298,7 @@ function generateSurfaceThemeCss(themes, utilityPrefix, runtimePrefix, schema) {
259
298
  *
260
299
  * Generated from your surface theme definitions
261
300
  * This file can be regenerated by running:
262
- * nx g @ethlete/core:tailwind-4-surface-theme --themesPath=${themesPath}${schema.outputPath ? ` --outputPath=${outputPath}` : ''}${schema.prefix && schema.prefix !== 'et' ? ` --prefix=${schema.prefix}` : ''}${schema.runtimePrefix && schema.runtimePrefix !== schema.prefix ? ` --runtimePrefix=${schema.runtimePrefix}` : ''}
301
+ * nx g @ethlete/core:tailwind-4-surface-theme --themesPath=${themesPath}${schema.outputPath ? ` --outputPath=${outputPath}` : ''}${schema.prefix && schema.prefix !== 'et' ? ` --prefix=${schema.prefix}` : ''}${schema.runtimePrefix && schema.runtimePrefix !== schema.prefix ? ` --runtimePrefix=${schema.runtimePrefix}` : ''}${schema.defaultLightTheme ? ` --defaultLightTheme=${schema.defaultLightTheme}` : ''}${schema.defaultDarkTheme ? ` --defaultDarkTheme=${schema.defaultDarkTheme}` : ''}
263
302
  */
264
303
 
265
304
  `;
@@ -30,6 +30,14 @@
30
30
  "type": "string",
31
31
  "description": "Prefix for the runtime theme-swap mechanism: the CSS custom properties (--<runtimePrefix>-surface-*) and selectors (.<runtimePrefix>-surface--<name>) that ProvideSurfaceDirective (etProvideSurface) toggles between. Defaults to the same value as 'prefix'. Set this separately when your Tailwind utility prefix needs to differ from your runtime theme-switching prefix."
32
32
  },
33
+ "defaultLightTheme": {
34
+ "type": "string",
35
+ "description": "Name of the 'light' surface theme to use as the default, overriding any isDefault flags on light themes in the definitions. Use this when multiple apps share one surface theme definition set (e.g. in a monorepo) but each app needs a different default."
36
+ },
37
+ "defaultDarkTheme": {
38
+ "type": "string",
39
+ "description": "Name of the 'dark' surface theme to use as the default, overriding any isDefault flags on dark themes in the definitions. Use this when multiple apps share one surface theme definition set (e.g. in a monorepo) but each app needs a different default."
40
+ },
33
41
  "skipFormat": {
34
42
  "type": "boolean",
35
43
  "description": "Skip formatting files after generation",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ethlete/core",
3
- "version": "5.0.0-next.27",
3
+ "version": "5.0.0-next.29",
4
4
  "license": "MIT",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { InjectionToken, AfterViewInit, InputSignal, Signal, ComponentRef, StaticProvider, EmbeddedViewRef, ElementRef, QueryList, WritableSignal, InputSignalWithTransform, RendererStyleFlags2, Type, Provider, Injector, ViewContainerRef, Binding, computed, InjectOptions, TemplateRef, PipeTransform, TrackByFunction, DestroyRef, OnInit, OnDestroy } from '@angular/core';
2
+ import { InjectionToken, AfterViewInit, InputSignal, ApplicationRef, Signal, ComponentRef, StaticProvider, EmbeddedViewRef, ElementRef, QueryList, WritableSignal, InputSignalWithTransform, RendererStyleFlags2, Type, Provider, Injector, ViewContainerRef, Binding, computed, InjectOptions, TemplateRef, PipeTransform, TrackByFunction, DestroyRef, OnInit, OnDestroy } from '@angular/core';
3
3
  import * as rxjs from 'rxjs';
4
4
  import { Observable, BehaviorSubject, Subject } from 'rxjs';
5
5
  import * as _ethlete_core from '@ethlete/core';
@@ -390,14 +390,33 @@ declare const createTailwindColorThemes: (themes: ColorTheme[], prefix?: string)
390
390
  declare const provideColorThemes: (themes: ColorTheme[]) => _angular_core.Provider[][];
391
391
 
392
392
  declare const COLOR_PROVIDER: InjectionToken<ProvideColorDirective>;
393
+ /**
394
+ * The color provider attached to a bootstrapped root component (e.g. `ProvideColorDirective` in
395
+ * the app component's `hostDirectives`), if any. Detached DOM such as overlay panes can't reach
396
+ * it through element DI, so overlay containers fall back to this when resolving the provider to
397
+ * `syncWithProvider()` — resolve at sync time, not at injection time, since root components only
398
+ * register with `ApplicationRef` once bootstrap completes.
399
+ *
400
+ * @internal
401
+ */
402
+ declare const resolveAppRootColorProvider: (appRef: ApplicationRef) => ProvideColorDirective | null;
393
403
  declare class ProvideColorDirective {
394
404
  private themes;
395
405
  private prefix;
396
406
  private injector;
407
+ private parentProvider;
397
408
  private currentProviderSync;
398
409
  private forcedColor;
399
410
  color: InputSignal<RegisteredColorThemeName | ColorTheme | null | undefined>;
400
411
  effectiveColor: _angular_core.Signal<string | ColorTheme | null | undefined>;
412
+ /**
413
+ * The color that actually applies at this provider's location: its own effective color, or —
414
+ * when this provider is passive (no input, nothing forced) — the nearest ancestor provider's.
415
+ * Mirrors the CSS cascade, which falls through a provider's `-color--inherited` scope class;
416
+ * consumers that re-apply context across detached DOM (overlay panes) must use this instead
417
+ * of `effectiveColor` or a passive in-between provider (e.g. a form field's) erases the theme.
418
+ */
419
+ resolvedColor: _angular_core.Signal<string | ColorTheme | null | undefined>;
401
420
  colorName: _angular_core.Signal<string | undefined>;
402
421
  protected themeClass: _angular_core.Signal<string>;
403
422
  syncWithProvider(provider: ProvideColorDirective): void;
@@ -633,14 +652,22 @@ declare const firstElementSignal: (el: ElementSignal) => Signal<{
633
652
  previousElement: HTMLElement | null;
634
653
  }>;
635
654
 
655
+ type AnimatedSizeAxis = 'block' | 'inline';
636
656
  type AnimatedBlockSizeConfig = {
637
- /** The element whose `block-size` is animated. Defaults to the host `ElementRef`. */
657
+ /** The element whose size is animated. Defaults to the host `ElementRef`. */
638
658
  host?: SignalElementBindingType;
639
659
  /**
640
660
  * The content element(s) whose size changes drive the animation. Observe the content (children),
641
661
  * **not** the animated host — observing the host would feed the animation back into itself.
662
+ * For the `inline` axis this also means the observed content must be content-sized (e.g.
663
+ * `inline-size: max-content`); a plain block child just mirrors the host's animated width back.
642
664
  */
643
665
  observe: SignalElementBindingType | SignalElementBindingType[];
666
+ /**
667
+ * The axes to animate. May be a signal — e.g. to drop the `inline` axis while a panel is in a
668
+ * presentation whose width follows the viewport instead of its content. @default ['block']
669
+ */
670
+ axes?: AnimatedSizeAxis[] | Signal<AnimatedSizeAxis[]>;
644
671
  /** Animation duration in ms. @default 160 */
645
672
  duration?: number;
646
673
  /** Animation easing. @default 'ease' */
@@ -649,14 +676,21 @@ type AnimatedBlockSizeConfig = {
649
676
  resizingClass?: string;
650
677
  };
651
678
  /**
652
- * Smoothly animates an element's `block-size` when its content changes size (e.g. a list filtering,
653
- * a loading state resolving). Set up once in an injection context; it observes the given content
654
- * element(s) and animates the host from its previous height to its new natural height.
679
+ * Smoothly animates an element's `block-size` (and optionally `inline-size`, via `axes`) when its
680
+ * content changes size (e.g. a list filtering, a loading state resolving, a column being added).
681
+ * Set up once in an injection context; it observes the given content element(s) and animates the
682
+ * host from its previous size to its new natural size.
655
683
  *
656
- * Robustness notes: the baseline height is captured on the first render (via `afterNextRender`) and
657
- * the effect only animates after that, so the initial layout settling never plays as a grow-from-0.
658
- * A change that interrupts an in-flight animation continues from the current animated height, and
684
+ * Robustness notes: the baseline size is captured on the first render (via `afterNextRender`) and
685
+ * only later changes animate, so the initial layout settling never plays as a grow-from-0.
686
+ * A change that interrupts an in-flight animation continues from the current animated size, and
659
687
  * zero/pre-layout measurements are ignored. Respects `prefers-reduced-motion`.
688
+ *
689
+ * The animation starts synchronously inside the `ResizeObserver` callback — it runs after layout
690
+ * but **before paint**, so the host never paints a frame at its new natural size. Routing the
691
+ * resize through a signal + effect instead would apply the animation one change-detection cycle
692
+ * (= one painted frame) late: a growing panel would flash at its final size, snap back, and only
693
+ * then animate.
660
694
  */
661
695
  declare const injectAnimatedBlockSize: (config: AnimatedBlockSizeConfig) => void;
662
696
 
@@ -1682,6 +1716,13 @@ declare const injectOverlayRuntime: {
1682
1716
  };
1683
1717
 
1684
1718
  declare const createComponentId: (prefix: string) => string;
1719
+ /**
1720
+ * A unique id string. Uses `crypto.randomUUID()` when available, but falls back gracefully when it is
1721
+ * not — crucially in **insecure contexts** (a plain-HTTP page served from a LAN IP, not `localhost`),
1722
+ * where `crypto.randomUUID` is `undefined`. Calling it there throws, so anything using it during e.g.
1723
+ * an overlay/menu open would break on such hosts. Prefer this over `crypto.randomUUID()` directly.
1724
+ */
1725
+ declare const randomId: () => string;
1685
1726
 
1686
1727
  declare const createDestroy: () => rxjs.Observable<boolean>;
1687
1728
 
@@ -1787,8 +1828,8 @@ declare const Validators: {
1787
1828
  readonly ValidateAtLeastOneRequired: (config: ValidateAtLeastOneRequiredConfig) => ValidatorFn;
1788
1829
  };
1789
1830
 
1790
- declare const copyToClipboard: (text: string) => Promise<boolean>;
1791
- declare const readFromClipboard: () => Promise<string | null>;
1831
+ declare const copyToClipboard: (text: string) => Observable<boolean>;
1832
+ declare const readFromClipboard: () => Observable<string | null>;
1792
1833
 
1793
1834
  declare const clone: <T>(original: T) => T;
1794
1835
  declare const equal: (foo: any, bar: any) => boolean;
@@ -2950,5 +2991,5 @@ declare const injectTitleStore: {
2950
2991
  };
2951
2992
  declare const applyHeadTitleBinding: (binding: MaybeSignal<string | number | null | undefined>, options?: Omit<TitlePart, "text">) => void;
2952
2993
 
2953
- export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, ANIMATION_DEBUG_STORAGE_KEY, AT_LEAST_ONE_REQUIRED, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AnimatedOverlayDirective, AutoSurfaceDirective, BOUNDARY_ELEMENT_TOKEN, BREAKPOINT_INSTANCE_TOKEN, BREAKPOINT_ORDER, COLOR_PROVIDER, ClickOutsideDirective, ColorInteractiveContainerDirective, ColorInteractiveDirective, ColorInteractiveExcludeDirective, ColorInteractiveHasFocusDirective, DEFAULT_MULTI_INSTANCE_RELS, DEFAULT_MULTI_INSTANCE_TAGS, DEFAULT_VIEWPORT_CONFIG, DISABLE_LOGGER_PARAM, DragHandleDirective, ET_DISABLE_SCROLL_TOP, ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE, ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE, ET_PROPERTY_REMOVED, FOCUSABLE_SELECTOR, FOCUS_VISIBLE_TRACKER_TOKEN, HtmlToMarkdownPipe, IS_ARRAY_NOT_EMPTY, IS_EMAIL, InferMimeTypePipe, InitialsPipe, IsArrayNotEmpty, IsEmail, jsonLd_d as JsonLD, KeyPressManager, MUST_MATCH, MarkdownToHtmlPipe, MatchStateType, MustMatch, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, PropsDirective, ProvideColorDirective, ProvideSurfaceDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeHandlesComponent, RuntimeError, SEO_DIRECTIVE_TOKEN, SURFACE_PROVIDER, SURFACE_TYPE, ScrollObserverDirective, ScrollObserverEndDirective, ScrollObserverStartDirective, SeoDirective, SlugifyPipe, StructuredDataComponent, SurfaceInteractiveDirective, ToArrayPipe, TypedQueryList, ValidateAtLeastOneRequired, Validators, animationDebugLog, applyAlternateBinding, applyAlternateLanguagesBindings, applyArticleBindings, applyAuthorBinding, applyCanonicalBinding, applyCenteredPosition, applyDescriptionBinding, applyGlobalPosition, applyHeadBinding, applyHeadTitleBinding, applyHostListener, applyHostListeners, applyInitialFocus, applyKeywordsBinding, applyLinkBinding, applyMetaBinding, applyNextBinding, applyOgBinding, applyOpenGraphBindings, applyPrevBinding, applyResourceHintsBindings, applyRobotsBinding, applySocialMediaBindings, applyStructuredDataBinding, applyTwitterCardBindings, areScrollStatesEqual, bindProps, boolBreakpointTransform, booleanBreakpointAttribute, boundingClientRectToElementRect, breakpointTransformBase, buildElementSignal, buildSignalEffects, canUseSessionMemory, clamp, clone, cloneFormGroup, computedTillFalsy, computedTillTruthy, controlValueSignal, controlValueSignalWithPrevious, copyToClipboard, createAnchoredPositionCleanup, createArrayPropertyBinding, createAutoSessionMemoryKey, createBulkPropertyBinding, createCanAnimateSignal, createComponentId, createCssColorThemeName, createCssSurfaceName, createDependencyStash, createDestroy, createDocumentElementSignal, createElementDictionary, createElementDimensions, createEmptyElementSignal, createFlipAnimation, createFlipAnimationGroup, createHostProps, createIsRenderedSignal, createLogger, createOverlayRuntimeRef, createPropHandlers, createPropertyBinding, createProps, createProvider, createRootProvider, createRootThemeCss, createRoute, createRouterState, createRxHostListener, createSessionMemory, createSetup, createStaticProvider, createStaticRootProvider, createSwatchCss, createSwipeTracker, createTailwindColorThemes, createTailwindCssVar, createTailwindRgbVar, createThemeStyle, createUserConsentProvider, deferredSignal, deleteCookie, easeElastic, easeIn, easeInOut, easeLinear, easeOut, easeOutBack, easeOutBackStrong, elementCanScroll, equal, firstElementSignal, focusElement, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementScrollCoordinates, getFocusableElements, getFormGroupValue, getGroupMatchPoints, getGroupMatchScore, getHeadingElement, getKnockoutMatchScore, getMatchScoreSubLine, getObjectProperty, getScrollContainerTarget, getScrollItemTarget, getScrollSnapTarget, hasCookie, htmlToMarkdown, inferMimeType, initials, injectAngularRootElement, injectAnimatedBlockSize, injectBoundaryElement, injectBreakpointInput, injectBreakpointIsMatched, injectBreakpointObserver, injectCanHover, injectColorThemes, injectColorThemesPrefix, injectCurrentBreakpoint, injectDeviceInputType, injectDisplayOrientation, injectErrorTheme, injectFocusVisibleTracker, injectFragment, injectHasPrecisionInput, injectHasTouchInput, injectHostElement, injectIs2Xl, injectIsLandscape, injectIsLg, injectIsMd, injectIsPortrait, injectIsRouterInitialized, injectIsSm, injectIsXl, injectIsXs, injectLinkStore, injectLinkStoreConfig, injectLocale, injectMediaQueryIsMatched, injectMetaConfig, injectMetaStore, injectObserveBreakpoint, injectObserveMediaQuery, injectOverlayRuntime, injectPathParam, injectPathParamChanges, injectPathParams, injectPrefersReducedMotion, injectQueryParam, injectQueryParamChanges, injectQueryParams, injectRenderer, injectRoute, injectRouteData, injectRouteDataItem, injectRouteTitle, injectRouterEvent, injectRouterState, injectScrollbarDimensions, injectStructuredDataConfig, injectStructuredDataStore, injectStyleManager, injectSuccessTheme, injectSurfaceContextTracker, injectSurfaceThemes, injectSurfaceThemesPrefix, injectTemplateRef, injectTitleConfig, injectTitleStore, injectUrl, injectViewportConfig, injectViewportDimensions, injectViewportSize, injectWarningTheme, isAnimationDebugEnabled, isArray, isElementSignal, isElementVisible, isFocusable, isGroupMatch, isHTMLElement, isKnockoutMatch, isObject, markdownToHtml, maybeSignalValue, memoizeSignal, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, numberBreakpointAttribute, numberBreakpointTransform, previousSignalValue, provideBoundaryElement, provideBreakpointInstance, provideBreakpointObserver, provideColorThemes, provideColorThemesWithTailwind4, provideFocusVisibleTracker, provideLinkStore, provideLinkStoreConfig, provideLocale, provideMetaConfig, provideMetaStore, provideOverlayRuntime, provideRenderer, provideStructuredDataConfig, provideStructuredDataStore, provideStyleManager, provideSurfaceContextTracker, provideSurfaceThemesWithTailwind4, provideTitleConfig, provideTitleStore, provideViewportConfig, readFromClipboard, resetPositioningStyles, resolveSurfaceByElevation, round, routerDisableScrollTop, scrollToElement, setBackdropStyles, setBaseElementStyles, setCookie, setInputSignal, setupFocusTrap, setupPositioning, setupScrollRestoration, signalAnimatedNumber, signalAttributes, signalClasses, signalElementChildren, signalElementDimensions, signalElementIntersection, signalElementLastScrollDirection, signalElementMutations, signalElementScrollState, signalHostAttributes, signalHostClasses, signalHostElementDimensions, signalHostElementIntersection, signalHostElementLastScrollDirection, signalHostElementMutations, signalHostElementScrollState, signalHostStyles, signalIsRendered, signalStyles, slugify, switchQueryListChanges, syncSignal, templateComputed, toArray, toArrayTrackByFn, toStringBinding, transformOrReturn, typedBreakpointTransform, unbindProps, useCursorDragScroll, writeScrollbarSizeToCssVariables, writeViewportSizeToCssVariables, ɵProvideColorThemes, ɵProvideColorThemesPrefix, ɵProvideSurfaceThemes, ɵProvideSurfaceThemesPrefix };
2954
- export type { AlternateLanguagesConfig, AlternateLink, AngularRenderer, AnimatedBlockSizeConfig, AnimatedLifecycleState, AnimatedNumberSignal, AnimatedOverlayComponentBase, AnimatedOverlayMountConfig, AnimatedOverlayState, AnimationEndEvent, AnyTemplateType, ArticleConfig, BindPropsOptions, BoolBreakpointSignal, Breakpoint, BreakpointInput, BreakpointMap, BuildMediaQueryOptions, BuildSignalEffectsConfig, ColorTheme, ColorThemeType, ComponentTemplate, ComponentTypeWithInputs, ConsentHandler, ControlValueSignalOptions, CreateLoggerConfig, CreatePropsOptions, CreateProviderOptions, CreateSessionMemoryConfig, CreateUserConsentProviderOptions, CurrentElementVisibility, CursorDragScrollDirection, CursorDragScrollOptions, DragMoveEvent, DragStartEvent, ElementDimensions, ElementLastScrollDirection, ElementLastScrollDirectionType, ElementRect, ElementScrollState, ElementSignal, ElementSignalValue, ElementSize, EthleteColorThemeNameRegistry, EthleteSurfaceThemeNameRegistry, FacebookCard, FlipAnimationConfig, HeadBinding, HostProps, InjectQueryParamConfig, InjectUtilConfig, InjectUtilTransformConfig, IntersectionObserverEntryWithDetails, IsElementVisibleOptions, LinkConfig, LinkStoreConfig, LogicalSize, MaybeObservable, MaybeSignal, MetaConfig, MetaTagConfig, NgClassType, NgTemplateTemplate, NormalizedGameResultType, NormalizedMatchParticipant, NormalizedMatchParticipants, NormalizedMatchScore, NullableElementDimensions, NumberBreakpointSignal, OnThemeColorMap, OpenGraph, OpenGraphConfig, OverlayRuntimeAnchoredPosition, OverlayRuntimeAnimationDelegate, OverlayRuntimeAnimationDelegateEnterContext, OverlayRuntimeAnimationDelegateLeaveContext, OverlayRuntimeAutoFocusTarget, OverlayRuntimeCenteredPosition, OverlayRuntimeCloseEvent, OverlayRuntimeCloseSource, OverlayRuntimeComponentBase, OverlayRuntimeElements, OverlayRuntimeGlobalPosition, OverlayRuntimeGlobalPositionAlignment, OverlayRuntimeMountConfig, OverlayRuntimePositionStrategy, OverlayRuntimeRef, OverlayRuntimeRole, OverlayRuntimeShiftOptions, OverlayRuntimeState, PropHandlers, Props, PropsAttachedElements, PropsAttachedElementsInternal, PropsInternal, ProviderResult, RegisteredColorThemeName, RegisteredSurfaceThemeName, ResizeEdge, ResizeMoveEvent, ResourceHintsConfig, RobotsConfig, RootProviderResult, RouterDisableScrollTopConfig, RouterState, ScrollContainerTarget, ScrollItemTarget, ScrollSnapOrigin, ScrollSnapTarget, ScrollToElementOptions, SeoConfig, SetupScrollRestorationConfig, SignalAnimatedNumberOptions, SignalElementBindingComplexType, SignalElementBindingType, SignalElementIntersectionOptions, SignalElementScrollStateOptions, SocialMediaConfig, StaticProviderResult, StringTemplate, StructuredDataConfig, StyleManager, SurfaceContextEntry, SurfaceContextTracker, SurfaceInteractionColor, SurfaceTheme, SurfaceThemeColor, SurfaceType, SwipeEndEvent, SwipeTracker, SwipeUpdateEvent, SyncSignalOptions, TemplateRefWithContext, ThemeColor, ThemeColorMap, ThemeHSLColor, ThemeInkColorMap, ThemeRGBColor, ThemeSwatch, TitleConfig, TitlePart, Translatable, TwitterCard, TwitterCardConfig, TypedBreakpointSignal, UnbindPropsOptions, ValidateAtLeastOneRequiredConfig, Vec2, ViewportConfig };
2994
+ export { ANIMATABLE_TOKEN, ANIMATED_IF_TOKEN, ANIMATED_LIFECYCLE_TOKEN, ANIMATION_DEBUG_STORAGE_KEY, AT_LEAST_ONE_REQUIRED, AnimatableDirective, AnimatedIfDirective, AnimatedLifecycleDirective, AnimatedOverlayDirective, AutoSurfaceDirective, BOUNDARY_ELEMENT_TOKEN, BREAKPOINT_INSTANCE_TOKEN, BREAKPOINT_ORDER, COLOR_PROVIDER, ClickOutsideDirective, ColorInteractiveContainerDirective, ColorInteractiveDirective, ColorInteractiveExcludeDirective, ColorInteractiveHasFocusDirective, DEFAULT_MULTI_INSTANCE_RELS, DEFAULT_MULTI_INSTANCE_TAGS, DEFAULT_VIEWPORT_CONFIG, DISABLE_LOGGER_PARAM, DragHandleDirective, ET_DISABLE_SCROLL_TOP, ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE, ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE, ET_PROPERTY_REMOVED, FOCUSABLE_SELECTOR, FOCUS_VISIBLE_TRACKER_TOKEN, HtmlToMarkdownPipe, IS_ARRAY_NOT_EMPTY, IS_EMAIL, InferMimeTypePipe, InitialsPipe, IsArrayNotEmpty, IsEmail, jsonLd_d as JsonLD, KeyPressManager, MUST_MATCH, MarkdownToHtmlPipe, MatchStateType, MustMatch, NormalizeGameResultTypePipe, NormalizeMatchParticipantsPipe, NormalizeMatchScorePipe, NormalizeMatchStatePipe, NormalizeMatchTypePipe, PropsDirective, ProvideColorDirective, ProvideSurfaceDirective, RUNTIME_ERROR_NO_DATA, RepeatDirective, ResizeHandlesComponent, RuntimeError, SEO_DIRECTIVE_TOKEN, SURFACE_PROVIDER, SURFACE_TYPE, ScrollObserverDirective, ScrollObserverEndDirective, ScrollObserverStartDirective, SeoDirective, SlugifyPipe, StructuredDataComponent, SurfaceInteractiveDirective, ToArrayPipe, TypedQueryList, ValidateAtLeastOneRequired, Validators, animationDebugLog, applyAlternateBinding, applyAlternateLanguagesBindings, applyArticleBindings, applyAuthorBinding, applyCanonicalBinding, applyCenteredPosition, applyDescriptionBinding, applyGlobalPosition, applyHeadBinding, applyHeadTitleBinding, applyHostListener, applyHostListeners, applyInitialFocus, applyKeywordsBinding, applyLinkBinding, applyMetaBinding, applyNextBinding, applyOgBinding, applyOpenGraphBindings, applyPrevBinding, applyResourceHintsBindings, applyRobotsBinding, applySocialMediaBindings, applyStructuredDataBinding, applyTwitterCardBindings, areScrollStatesEqual, bindProps, boolBreakpointTransform, booleanBreakpointAttribute, boundingClientRectToElementRect, breakpointTransformBase, buildElementSignal, buildSignalEffects, canUseSessionMemory, clamp, clone, cloneFormGroup, computedTillFalsy, computedTillTruthy, controlValueSignal, controlValueSignalWithPrevious, copyToClipboard, createAnchoredPositionCleanup, createArrayPropertyBinding, createAutoSessionMemoryKey, createBulkPropertyBinding, createCanAnimateSignal, createComponentId, createCssColorThemeName, createCssSurfaceName, createDependencyStash, createDestroy, createDocumentElementSignal, createElementDictionary, createElementDimensions, createEmptyElementSignal, createFlipAnimation, createFlipAnimationGroup, createHostProps, createIsRenderedSignal, createLogger, createOverlayRuntimeRef, createPropHandlers, createPropertyBinding, createProps, createProvider, createRootProvider, createRootThemeCss, createRoute, createRouterState, createRxHostListener, createSessionMemory, createSetup, createStaticProvider, createStaticRootProvider, createSwatchCss, createSwipeTracker, createTailwindColorThemes, createTailwindCssVar, createTailwindRgbVar, createThemeStyle, createUserConsentProvider, deferredSignal, deleteCookie, easeElastic, easeIn, easeInOut, easeLinear, easeOut, easeOutBack, easeOutBackStrong, elementCanScroll, equal, firstElementSignal, focusElement, forceReflow, formatRuntimeError, fromNextFrame, getCookie, getDomain, getElementScrollCoordinates, getFocusableElements, getFormGroupValue, getGroupMatchPoints, getGroupMatchScore, getHeadingElement, getKnockoutMatchScore, getMatchScoreSubLine, getObjectProperty, getScrollContainerTarget, getScrollItemTarget, getScrollSnapTarget, hasCookie, htmlToMarkdown, inferMimeType, initials, injectAngularRootElement, injectAnimatedBlockSize, injectBoundaryElement, injectBreakpointInput, injectBreakpointIsMatched, injectBreakpointObserver, injectCanHover, injectColorThemes, injectColorThemesPrefix, injectCurrentBreakpoint, injectDeviceInputType, injectDisplayOrientation, injectErrorTheme, injectFocusVisibleTracker, injectFragment, injectHasPrecisionInput, injectHasTouchInput, injectHostElement, injectIs2Xl, injectIsLandscape, injectIsLg, injectIsMd, injectIsPortrait, injectIsRouterInitialized, injectIsSm, injectIsXl, injectIsXs, injectLinkStore, injectLinkStoreConfig, injectLocale, injectMediaQueryIsMatched, injectMetaConfig, injectMetaStore, injectObserveBreakpoint, injectObserveMediaQuery, injectOverlayRuntime, injectPathParam, injectPathParamChanges, injectPathParams, injectPrefersReducedMotion, injectQueryParam, injectQueryParamChanges, injectQueryParams, injectRenderer, injectRoute, injectRouteData, injectRouteDataItem, injectRouteTitle, injectRouterEvent, injectRouterState, injectScrollbarDimensions, injectStructuredDataConfig, injectStructuredDataStore, injectStyleManager, injectSuccessTheme, injectSurfaceContextTracker, injectSurfaceThemes, injectSurfaceThemesPrefix, injectTemplateRef, injectTitleConfig, injectTitleStore, injectUrl, injectViewportConfig, injectViewportDimensions, injectViewportSize, injectWarningTheme, isAnimationDebugEnabled, isArray, isElementSignal, isElementVisible, isFocusable, isGroupMatch, isHTMLElement, isKnockoutMatch, isObject, markdownToHtml, maybeSignalValue, memoizeSignal, nextFrame, normalizeGameResultType, normalizeMatchParticipant, normalizeMatchParticipants, normalizeMatchScore, normalizeMatchState, normalizeMatchType, numberBreakpointAttribute, numberBreakpointTransform, previousSignalValue, provideBoundaryElement, provideBreakpointInstance, provideBreakpointObserver, provideColorThemes, provideColorThemesWithTailwind4, provideFocusVisibleTracker, provideLinkStore, provideLinkStoreConfig, provideLocale, provideMetaConfig, provideMetaStore, provideOverlayRuntime, provideRenderer, provideStructuredDataConfig, provideStructuredDataStore, provideStyleManager, provideSurfaceContextTracker, provideSurfaceThemesWithTailwind4, provideTitleConfig, provideTitleStore, provideViewportConfig, randomId, readFromClipboard, resetPositioningStyles, resolveAppRootColorProvider, resolveSurfaceByElevation, round, routerDisableScrollTop, scrollToElement, setBackdropStyles, setBaseElementStyles, setCookie, setInputSignal, setupFocusTrap, setupPositioning, setupScrollRestoration, signalAnimatedNumber, signalAttributes, signalClasses, signalElementChildren, signalElementDimensions, signalElementIntersection, signalElementLastScrollDirection, signalElementMutations, signalElementScrollState, signalHostAttributes, signalHostClasses, signalHostElementDimensions, signalHostElementIntersection, signalHostElementLastScrollDirection, signalHostElementMutations, signalHostElementScrollState, signalHostStyles, signalIsRendered, signalStyles, slugify, switchQueryListChanges, syncSignal, templateComputed, toArray, toArrayTrackByFn, toStringBinding, transformOrReturn, typedBreakpointTransform, unbindProps, useCursorDragScroll, writeScrollbarSizeToCssVariables, writeViewportSizeToCssVariables, ɵProvideColorThemes, ɵProvideColorThemesPrefix, ɵProvideSurfaceThemes, ɵProvideSurfaceThemesPrefix };
2995
+ export type { AlternateLanguagesConfig, AlternateLink, AngularRenderer, AnimatedBlockSizeConfig, AnimatedLifecycleState, AnimatedNumberSignal, AnimatedOverlayComponentBase, AnimatedOverlayMountConfig, AnimatedOverlayState, AnimatedSizeAxis, AnimationEndEvent, AnyTemplateType, ArticleConfig, BindPropsOptions, BoolBreakpointSignal, Breakpoint, BreakpointInput, BreakpointMap, BuildMediaQueryOptions, BuildSignalEffectsConfig, ColorTheme, ColorThemeType, ComponentTemplate, ComponentTypeWithInputs, ConsentHandler, ControlValueSignalOptions, CreateLoggerConfig, CreatePropsOptions, CreateProviderOptions, CreateSessionMemoryConfig, CreateUserConsentProviderOptions, CurrentElementVisibility, CursorDragScrollDirection, CursorDragScrollOptions, DragMoveEvent, DragStartEvent, ElementDimensions, ElementLastScrollDirection, ElementLastScrollDirectionType, ElementRect, ElementScrollState, ElementSignal, ElementSignalValue, ElementSize, EthleteColorThemeNameRegistry, EthleteSurfaceThemeNameRegistry, FacebookCard, FlipAnimationConfig, HeadBinding, HostProps, InjectQueryParamConfig, InjectUtilConfig, InjectUtilTransformConfig, IntersectionObserverEntryWithDetails, IsElementVisibleOptions, LinkConfig, LinkStoreConfig, LogicalSize, MaybeObservable, MaybeSignal, MetaConfig, MetaTagConfig, NgClassType, NgTemplateTemplate, NormalizedGameResultType, NormalizedMatchParticipant, NormalizedMatchParticipants, NormalizedMatchScore, NullableElementDimensions, NumberBreakpointSignal, OnThemeColorMap, OpenGraph, OpenGraphConfig, OverlayRuntimeAnchoredPosition, OverlayRuntimeAnimationDelegate, OverlayRuntimeAnimationDelegateEnterContext, OverlayRuntimeAnimationDelegateLeaveContext, OverlayRuntimeAutoFocusTarget, OverlayRuntimeCenteredPosition, OverlayRuntimeCloseEvent, OverlayRuntimeCloseSource, OverlayRuntimeComponentBase, OverlayRuntimeElements, OverlayRuntimeGlobalPosition, OverlayRuntimeGlobalPositionAlignment, OverlayRuntimeMountConfig, OverlayRuntimePositionStrategy, OverlayRuntimeRef, OverlayRuntimeRole, OverlayRuntimeShiftOptions, OverlayRuntimeState, PropHandlers, Props, PropsAttachedElements, PropsAttachedElementsInternal, PropsInternal, ProviderResult, RegisteredColorThemeName, RegisteredSurfaceThemeName, ResizeEdge, ResizeMoveEvent, ResourceHintsConfig, RobotsConfig, RootProviderResult, RouterDisableScrollTopConfig, RouterState, ScrollContainerTarget, ScrollItemTarget, ScrollSnapOrigin, ScrollSnapTarget, ScrollToElementOptions, SeoConfig, SetupScrollRestorationConfig, SignalAnimatedNumberOptions, SignalElementBindingComplexType, SignalElementBindingType, SignalElementIntersectionOptions, SignalElementScrollStateOptions, SocialMediaConfig, StaticProviderResult, StringTemplate, StructuredDataConfig, StyleManager, SurfaceContextEntry, SurfaceContextTracker, SurfaceInteractionColor, SurfaceTheme, SurfaceThemeColor, SurfaceType, SwipeEndEvent, SwipeTracker, SwipeUpdateEvent, SyncSignalOptions, TemplateRefWithContext, ThemeColor, ThemeColorMap, ThemeHSLColor, ThemeInkColorMap, ThemeRGBColor, ThemeSwatch, TitleConfig, TitlePart, Translatable, TwitterCard, TwitterCardConfig, TypedBreakpointSignal, UnbindPropsOptions, ValidateAtLeastOneRequiredConfig, Vec2, ViewportConfig };