@ethlete/components 1.0.0-next.61 → 1.0.0-next.62

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
- import { InjectionToken, input, booleanAttribute, signal, computed, effect, untracked, Directive, inject, afterNextRender, DestroyRef, TemplateRef, ElementRef, model, linkedSignal, ViewEncapsulation, Component, numberAttribute, contentChildren, Injector, output, runInInjectionContext, contentChild, NgZone, afterRenderEffect, ApplicationRef, viewChild, ViewContainerRef, createEnvironmentInjector, DOCUMENT, EnvironmentInjector, inputBinding, isSignal, createComponent, assertInInjectionContext, isDevMode as isDevMode$1, provideEnvironmentInitializer, viewChildren, outputBinding, afterEveryRender, PLATFORM_ID } from '@angular/core';
2
+ import { InjectionToken, input, booleanAttribute, signal, computed, effect, untracked, Directive, inject, afterNextRender, DestroyRef, TemplateRef, ElementRef, model, linkedSignal, ViewEncapsulation, Component, numberAttribute, contentChildren, Injector, output, runInInjectionContext, contentChild, NgZone, afterRenderEffect, ApplicationRef, viewChild, ViewContainerRef, createEnvironmentInjector, DOCUMENT, EnvironmentInjector, inputBinding, isSignal, createComponent, assertInInjectionContext, isDevMode as isDevMode$1, provideEnvironmentInitializer, viewChildren, outputBinding, afterEveryRender, PLATFORM_ID, CSP_NONCE } from '@angular/core';
3
3
  import * as i1 from '@ethlete/core';
4
- import { injectHostElement, RuntimeError, createComponentId, ProvideColorDirective, defineLabels, toProvideFn, toInjectFn, toToken, injectStyleManager, SurfaceInteractiveDirective, createCanAnimateSignal, ColorInteractiveDirective, injectSuccessTheme, injectWarningTheme, injectErrorTheme, injectLocale, defineStaticRootProvider, inferMimeType, injectColorThemes, injectRenderer, ProvideSurfaceDirective, COLOR_PROVIDER, SURFACE_PROVIDER, injectSurfaceThemes, injectSurfaceThemesPrefix, injectSurfaceContextTracker, injectBoundaryElement, ANIMATED_LIFECYCLE_TOKEN, resolveAppRootColorProvider, resolveSurfaceByElevation, createCssSurfaceName, provideBoundaryElement, AnimatedLifecycleDirective, isElement, injectBreakpointObserver, isHTMLElement, equal, nextFrame, animationDebugLog, resolveOverlayLayer, defineRootProvider, injectOverlayRuntime, anchoredOverlayPosition, injectQueryParam, randomId, ScrollObserverDirective, signalElementScrollState, ScrollObserverStartDirective, ScrollObserverEndDirective, enableAnchoredOverlayPositionExtras, forceReflow, elementCanScroll, matchesReducedMotion, createSwipeTracker, applyHostListener, defineProvider, fromNextFrame, injectRoute, createUnsavedChangesTracker, createDocumentElementSignal, AnimatedIfDirective, signalElementDimensions, applyInitialFocus, syncSignal, AutoSurfaceDirective, setInputSignal, injectTemplateRef, signalHostElementScrollState, applyStructuredDataBinding, mountEasingTokens, typedBreakpointTransform, signalElementChildren, signalElementIntersection, signalHostAttributes, signalHostClasses, signalHostStyles, getScrollContainerTarget, getScrollItemTarget, getElementScrollCoordinates, provideBreakpointInstance, signalClasses, useCursorDragScroll, signalStyles, getScrollSnapTarget, injectPrefersReducedMotion, injectIsDocumentVisible, signalHostElementIntersection, clamp as clamp$1, signalHostElementDimensions, injectColorPalette, injectFocusVisibleTracker, isOnHigherOverlayLayer, copyToClipboard, getFocusableElements, injectAnimatedBlockSize, injectObserveBreakpoint, applyHostListeners, dragGestureFrom, signalDeferredLoading, AnimatableDirective, ColorInteractiveContainerDirective, ColorInteractiveExcludeDirective, injectParentSurface, ColorInteractiveHasFocusDirective, createFlipAnimation, createObjectUrlHandle, createFlipAnimationGroup, focusElement, isFocusable, htmlToMarkdown, markdownToHtml, injectHasTouchInput, DragHandleDirective, ResizeHandlesComponent, numberBreakpointTransform, signalElementMutations, DEFAULT_OVERLAY_LAYER, injectSurfaceType, applyLinkBinding, applyHeadTitleBinding, injectViewportSize, injectFileDownload, injectRouterEvent, canUseSessionMemory, createAutoSessionMemoryKey, createSessionMemory } from '@ethlete/core';
4
+ import { injectHostElement, RuntimeError, createComponentId, ProvideColorDirective, defineLabels, toProvideFn, toInjectFn, toToken, injectStyleManager, SurfaceInteractiveDirective, createCanAnimateSignal, ColorInteractiveDirective, injectSuccessTheme, injectWarningTheme, injectErrorTheme, injectLocale, defineStaticRootProvider, inferMimeType, injectColorThemes, injectRenderer, ProvideSurfaceDirective, COLOR_PROVIDER, SURFACE_PROVIDER, injectSurfaceThemes, injectSurfaceThemesPrefix, injectSurfaceContextTracker, injectBoundaryElement, ANIMATED_LIFECYCLE_TOKEN, resolveAppRootColorProvider, resolveSurfaceByElevation, createCssSurfaceName, provideBoundaryElement, AnimatedLifecycleDirective, isElement, injectBreakpointObserver, isHTMLElement, equal, nextFrame, animationDebugLog, resolveOverlayLayer, defineRootProvider, injectOverlayRuntime, anchoredOverlayPosition, injectQueryParam, randomId, ScrollObserverDirective, signalElementScrollState, ScrollObserverStartDirective, ScrollObserverEndDirective, enableAnchoredOverlayPositionExtras, forceReflow, elementCanScroll, matchesReducedMotion, createSwipeTracker, applyHostListener, defineProvider, fromNextFrame, injectRoute, createUnsavedChangesTracker, createDocumentElementSignal, AnimatedIfDirective, signalElementDimensions, applyInitialFocus, syncSignal, AutoSurfaceDirective, setInputSignal, injectTemplateRef, signalHostElementScrollState, applyStructuredDataBinding, mountEasingTokens, typedBreakpointTransform, signalElementChildren, signalElementIntersection, signalHostAttributes, signalHostClasses, signalHostStyles, getScrollContainerTarget, getScrollItemTarget, getElementScrollCoordinates, provideBreakpointInstance, signalClasses, useCursorDragScroll, signalStyles, getScrollSnapTarget, injectPrefersReducedMotion, injectIsDocumentVisible, signalHostElementIntersection, clamp as clamp$1, signalHostElementDimensions, injectColorPalette, injectFocusVisibleTracker, isOnHigherOverlayLayer, copyToClipboard, getFocusableElements, injectAnimatedBlockSize, injectObserveBreakpoint, applyHostListeners, dragGestureFrom, signalDeferredLoading, AnimatableDirective, ColorInteractiveContainerDirective, ColorInteractiveExcludeDirective, injectParentSurface, ColorInteractiveHasFocusDirective, createFlipAnimation, createFlipAnimationGroup, focusElement, isFocusable, htmlToMarkdown, markdownToHtml, injectHasTouchInput, DragHandleDirective, ResizeHandlesComponent, numberBreakpointTransform, signalElementMutations, DEFAULT_OVERLAY_LAYER, injectSurfaceType, applyLinkBinding, applyHeadTitleBinding, injectViewportSize, injectFileDownload, injectRouterEvent, canUseSessionMemory, createAutoSessionMemoryKey, createSessionMemory } from '@ethlete/core';
5
5
  import { NgTemplateOutlet, NgComponentOutlet, Location, DOCUMENT as DOCUMENT$1, isPlatformBrowser } from '@angular/common';
6
6
  import { DomSanitizer } from '@angular/platform-browser';
7
7
  import { DOUBLE_ELIMINATION_BRACKET_ROUND_TYPE, COMMON_BRACKET_ROUND_TYPE, BRACKET_ERROR_CODES, SWISS_BRACKET_ROUND_TYPE, SINGLE_ELIMINATION_BRACKET_ROUND_TYPE, TOURNAMENT_MODE, BRACKET_DATA_LAYOUT, resolveBracketLayout as resolveBracketLayout$1, createBracket, drawMan, createDoubleEliminationGrid, createStackedDoubleEliminationGrid, createSingleEliminationGrid, generateBracketRoundSwissGroupMaps, createSwissGrid, drawSwissMan, standingPickStartOrder } from '@ethlete/bracket';
@@ -1258,7 +1258,7 @@ class IconDirective {
1258
1258
  }
1259
1259
  }
1260
1260
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: IconDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1261
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: IconDirective, isStandalone: true, selector: "[etIcon]", inputs: { iconNameToUse: { classPropertyName: "iconNameToUse", publicName: "etIcon", isSignal: true, isRequired: true, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, allowHardcodedColor: { classPropertyName: "allowHardcodedColor", publicName: "allowHardcodedColor", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "innerHTML": "iconSrc()", "attr.aria-hidden": "label() ? null : \"true\"", "attr.role": "label() ? \"img\" : null", "attr.aria-label": "label()", "class": "hostClasses()" }, styleAttribute: "display: flex; align-items: center; justify-content: center;" }, providers: [
1261
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: IconDirective, isStandalone: true, selector: "[etIcon]", inputs: { iconNameToUse: { classPropertyName: "iconNameToUse", publicName: "etIcon", isSignal: true, isRequired: true, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, allowHardcodedColor: { classPropertyName: "allowHardcodedColor", publicName: "allowHardcodedColor", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "innerHTML": "iconSrc()", "attr.aria-hidden": "label() ? null : \"true\"", "attr.role": "label() ? \"img\" : null", "attr.aria-label": "label()", "class": "hostClasses()", "style.display": "\"flex\"", "style.align-items": "\"center\"", "style.justify-content": "\"center\"" } }, providers: [
1262
1262
  {
1263
1263
  provide: ICON_DIRECTIVE_TOKEN,
1264
1264
  useExisting: IconDirective,
@@ -1283,7 +1283,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
1283
1283
  '[attr.role]': 'label() ? "img" : null',
1284
1284
  '[attr.aria-label]': 'label()',
1285
1285
  '[class]': 'hostClasses()',
1286
- style: 'display: flex; align-items: center; justify-content: center;',
1286
+ '[style.display]': '"flex"',
1287
+ '[style.align-items]': '"center"',
1288
+ '[style.justify-content]': '"center"',
1287
1289
  },
1288
1290
  }]
1289
1291
  }], ctorParameters: () => [], propDecorators: { iconNameToUse: [{ type: i0.Input, args: [{ isSignal: true, alias: "etIcon", required: true }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], allowHardcodedColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowHardcodedColor", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
@@ -25797,7 +25799,7 @@ class ColorPickerAreaDirective {
25797
25799
  this.colorInput?.picker.setSaturationAndValue(saturation, brightness);
25798
25800
  }
25799
25801
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ColorPickerAreaDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
25800
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.6", type: ColorPickerAreaDirective, isStandalone: true, selector: "[etColorPickerArea]", host: { listeners: { "pointerdown": "handlePointerDown($event)" }, properties: { "style.--_et-color-picker-area-hue": "hueColor()" }, styleAttribute: "touch-action: none", classAttribute: "et-color-picker-area" }, exportAs: ["etColorPickerArea"], ngImport: i0 }); }
25802
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.6", type: ColorPickerAreaDirective, isStandalone: true, selector: "[etColorPickerArea]", host: { listeners: { "pointerdown": "handlePointerDown($event)" }, properties: { "style.touch-action": "\"none\"", "style.--_et-color-picker-area-hue": "hueColor()" }, classAttribute: "et-color-picker-area" }, exportAs: ["etColorPickerArea"], ngImport: i0 }); }
25801
25803
  }
25802
25804
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ColorPickerAreaDirective, decorators: [{
25803
25805
  type: Directive,
@@ -25806,7 +25808,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
25806
25808
  exportAs: 'etColorPickerArea',
25807
25809
  host: {
25808
25810
  class: 'et-color-picker-area',
25809
- style: 'touch-action: none',
25811
+ '[style.touch-action]': '"none"',
25810
25812
  '[style.--_et-color-picker-area-hue]': 'hueColor()',
25811
25813
  '(pointerdown)': 'handlePointerDown($event)',
25812
25814
  },
@@ -32142,9 +32144,28 @@ const DROPZONE_ENTRY_STATUSES = {
32142
32144
  ERROR: 'error',
32143
32145
  EXISTING: 'existing',
32144
32146
  };
32147
+ /** A `data:` URL rather than an object URL: a strict `img-src` rarely allows `blob:`. */
32148
+ const readImagePreview = (file) => {
32149
+ const url = signal(null, /* @ts-ignore */
32150
+ ...(ngDevMode ? [{ debugName: "url" }] : /* istanbul ignore next */ []));
32151
+ if (typeof FileReader === 'undefined')
32152
+ return { url: url.asReadonly(), dispose: () => undefined };
32153
+ const reader = new FileReader();
32154
+ reader.onload = () => url.set(typeof reader.result === 'string' ? reader.result : null);
32155
+ reader.readAsDataURL(file);
32156
+ return {
32157
+ url: url.asReadonly(),
32158
+ dispose: () => {
32159
+ reader.onload = null;
32160
+ if (reader.readyState === FileReader.LOADING)
32161
+ reader.abort();
32162
+ url.set(null);
32163
+ },
32164
+ };
32165
+ };
32145
32166
  const createFileDropzoneEntry = (options) => {
32146
32167
  const { file, handle } = options;
32147
- const objectUrl = file.type.startsWith('image/') ? createObjectUrlHandle(file) : null;
32168
+ const preview = file.type.startsWith('image/') ? readImagePreview(file) : null;
32148
32169
  const status = computed(() => {
32149
32170
  switch (handle.state()) {
32150
32171
  case 'success':
@@ -32161,14 +32182,14 @@ const createFileDropzoneEntry = (options) => {
32161
32182
  source: { type: 'file', file },
32162
32183
  name: computed(() => file.name),
32163
32184
  size: computed(() => file.size),
32164
- previewUrl: computed(() => objectUrl?.url ?? null),
32185
+ previewUrl: preview?.url ?? computed(() => null),
32165
32186
  status,
32166
32187
  progress: handle.progress,
32167
32188
  error: handle.error,
32168
32189
  errorMessage: handle.errorMessage,
32169
32190
  value: handle.value,
32170
32191
  handle,
32171
- objectUrl,
32192
+ disposePreview: preview?.dispose ?? null,
32172
32193
  };
32173
32194
  };
32174
32195
  const createExistingDropzoneEntry = (options) => {
@@ -32187,12 +32208,12 @@ const createExistingDropzoneEntry = (options) => {
32187
32208
  errorMessage: computed(() => null),
32188
32209
  value: computed(() => value),
32189
32210
  handle: null,
32190
- objectUrl: null,
32211
+ disposePreview: null,
32191
32212
  };
32192
32213
  };
32193
- /** Releases all resources held by an entry (object URL, in-flight upload). */
32214
+ /** Releases all resources held by an entry (preview read, in-flight upload). */
32194
32215
  const disposeDropzoneEntry = (entry) => {
32195
- entry.objectUrl?.revoke();
32216
+ entry.disposePreview?.();
32196
32217
  entry.handle?.dispose();
32197
32218
  };
32198
32219
  /** Checks a file against the native `accept` attribute semantics (`.ext`, `type/subtype`, `type/*`). */
@@ -34070,6 +34091,9 @@ const HEADING_SELECTOR = 'h1, h2, h3, h4, h5, h6';
34070
34091
  /** Must list only block-level containers: an inline element re-tagged in place loses its mark, so a
34071
34092
  * bare `<strong>` under the root has to be wrapped by the heading rather than turned into one. */
34072
34093
  const BLOCK_SELECTOR = 'p, div, blockquote, pre, li, figure, section, article';
34094
+ /** Alignment persists as a class, not an inline `text-align`, so rendered content passes a strict `style-src`. */
34095
+ const ALIGN_CLASS_PREFIX = 'et-rte-align-';
34096
+ const alignClassOf = (el) => [...el.classList].find((cls) => cls.startsWith(ALIGN_CLASS_PREFIX)) ?? null;
34073
34097
  const createRichTextEditorDomCore = (doc, renderer) => {
34074
34098
  const root = signal(null, /* @ts-ignore */
34075
34099
  ...(ngDevMode ? [{ debugName: "root" }] : /* istanbul ignore next */ []));
@@ -39076,7 +39100,7 @@ const MENU_SEARCH_IMPORTS = [MenuSearchDirective];
39076
39100
  const TEXT_ALIGNS = ['left', 'center', 'right', 'justify'];
39077
39101
  /**
39078
39102
  * The opt-in alignment tool's toolbar control: a menu of block alignments (left/center/right/justify).
39079
- * Alignment has no Markdown form, so it is persisted as a native `text-align` style on the block (or
39103
+ * Alignment has no Markdown form, so it is persisted as an `et-rte-align-*` class on the block (or
39080
39104
  * table cell) and round-tripped as raw HTML by the Markdown converter. Registered via
39081
39105
  * `provideRichTextEditorAlignmentTool`.
39082
39106
  */
@@ -39128,10 +39152,11 @@ class RichTextEditorAlignToolComponent {
39128
39152
  // explicit align action) - never in readAlign, which runs on every selection change
39129
39153
  const blocks = this.targetBlocks(root, range) ?? this.wrapLooseContent(root, range);
39130
39154
  for (const block of blocks) {
39131
- if (align === 'left')
39132
- this.renderer.removeStyle(block, 'textAlign');
39133
- else
39134
- this.renderer.setStyle(block, { textAlign: align });
39155
+ const current = alignClassOf(block);
39156
+ if (current)
39157
+ this.renderer.removeClass(block, current);
39158
+ if (align !== 'left')
39159
+ this.renderer.addClass(block, `${ALIGN_CLASS_PREFIX}${align}`);
39135
39160
  }
39136
39161
  this.current.set(align);
39137
39162
  this.editor().syncFromDom({ boundary: true });
@@ -39142,7 +39167,8 @@ class RichTextEditorAlignToolComponent {
39142
39167
  const range = this.editor().editorDom.getSelection()?.range;
39143
39168
  if (!root || !range)
39144
39169
  return 'left';
39145
- const value = this.targetBlocks(root, range)?.[0]?.style.textAlign ?? '';
39170
+ const block = this.targetBlocks(root, range)?.[0];
39171
+ const value = (block && alignClassOf(block)?.slice(ALIGN_CLASS_PREFIX.length)) ?? '';
39146
39172
  return TEXT_ALIGNS.includes(value) ? value : 'left';
39147
39173
  }
39148
39174
  /**
@@ -39209,7 +39235,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
39209
39235
  /**
39210
39236
  * Registers the opt-in `'align'` tool (block text-align: left / center / right / justify). Add to a
39211
39237
  * component/route's providers and include `'align'` in the editor's `tools`. Alignment persists as a
39212
- * native `text-align` style on the block (Markdown has no alignment syntax). Tree-shakes when unused.
39238
+ * `et-rte-align-*` class on the block (Markdown has no alignment syntax). Tree-shakes when unused.
39213
39239
  */
39214
39240
  const provideRichTextEditorAlignmentTool = () => ({
39215
39241
  provide: RICH_TEXT_EDITOR_TOOL,
@@ -39835,10 +39861,10 @@ const createRichTextEditorHeadings = (core) => {
39835
39861
  const { doc, renderer, root, getSelection, closestWithin, selectNodeContents, selectAcross, collapseInto, replaceWith, blocksInRange, isBlockEmpty, } = core;
39836
39862
  const replaceBlockTag = (block, tag) => {
39837
39863
  const replacement = renderer.createElement(tag);
39838
- // Alignment is the one style the editor persists on blocks, so it has to survive the re-tag.
39839
- if (block.style.textAlign) {
39840
- renderer.setStyle(replacement, { textAlign: block.style.textAlign });
39841
- }
39864
+ const align = alignClassOf(block);
39865
+ // Alignment is the one presentation the editor persists on blocks, so it has to survive the re-tag.
39866
+ if (align)
39867
+ renderer.addClass(replacement, align);
39842
39868
  while (block.firstChild) {
39843
39869
  renderer.appendChild(replacement, block.firstChild);
39844
39870
  }
@@ -41676,11 +41702,11 @@ const TOOLBAR_IMPORTS = [ToolbarComponent, ToolbarDirective];
41676
41702
  */
41677
41703
  class RichTextContentStylesComponent {
41678
41704
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RichTextContentStylesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
41679
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: RichTextContentStylesComponent, isStandalone: true, selector: "et-rich-text-content-styles", ngImport: i0, template: '', isInline: true, styles: ["@layer components{@property --et-rich-text-editor-content-gap{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-rich-text-editor-quote-indent{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-rich-text-editor-quote-bar-width{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-rich-text-editor-code-block-radius{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-rich-text-editor-token-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-token-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 4px;}.et-rte-content{overflow-wrap:anywhere}.et-rte-content>:first-child{margin-block-start:0}.et-rte-content>:last-child{margin-block-end:0}.et-rte-content p{margin-block:0}.et-rte-content p+p,.et-rte-content ul,.et-rte-content ol,.et-rte-content blockquote,.et-rte-content pre{margin-block-start:var(--et-rich-text-editor-content-gap)}.et-rte-content h1,.et-rte-content h2,.et-rte-content h3,.et-rte-content h4,.et-rte-content h5,.et-rte-content h6{margin-block:0;font-weight:700;line-height:1.25}.et-rte-content :is(h1,h2,h3,h4,h5,h6)+*,.et-rte-content *+:is(h1,h2,h3,h4,h5,h6){margin-block-start:var(--et-rich-text-editor-content-gap)}.et-rte-content h1{font-size:2.4rem}.et-rte-content h2{font-size:2rem}.et-rte-content h3{font-size:1.6rem}.et-rte-content ul,.et-rte-content ol{margin-block-end:0;padding-inline-start:1.5em;list-style-position:outside}.et-rte-content ul{list-style-type:disc}.et-rte-content ul ul,.et-rte-content ul ul ul ul ul{list-style-type:circle}.et-rte-content ul ul ul,.et-rte-content ul ul ul ul ul ul{list-style-type:square}.et-rte-content ul ul ul ul{list-style-type:disc}.et-rte-content ol{list-style-type:decimal}.et-rte-content ol ol,.et-rte-content ol ol ol ol ol{list-style-type:lower-alpha}.et-rte-content ol ol ol,.et-rte-content ol ol ol ol ol ol{list-style-type:lower-roman}.et-rte-content ol ol ol ol{list-style-type:decimal}.et-rte-content li{margin-block:0}.et-rte-content li::marker{color:color-mix(in srgb,currentColor 60%,transparent)}.et-rte-content a{color:var(--et-theme-color-primary-solid, currentColor);text-decoration:underline}.et-rte-content code{padding:.1em .3em;border-radius:4px;background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 14%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em}.et-rte-content blockquote{margin-inline:0;margin-block-end:0;padding-inline-start:var(--et-rich-text-editor-quote-indent);border-inline-start:var(--et-rich-text-editor-quote-bar-width) solid color-mix(in srgb,var(--et-surface-border-solid, currentColor) 80%,transparent);color:color-mix(in srgb,currentColor 82%,transparent)}.et-rte-content blockquote blockquote{margin-block-start:var(--et-rich-text-editor-content-gap)}.et-rte-content pre{margin-block-end:0;padding:8px 10px;border-radius:var(--et-rich-text-editor-code-block-radius);background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 10%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em;white-space:pre-wrap}.et-rte-content pre code{padding:0;border-radius:0;background:none;font-size:inherit}.et-rte-content .et-rte-token{--_et-rte-token-accent: var(--et-theme-color-primary-solid, var(--et-surface-interaction-solid, currentColor));display:inline;padding-inline:var(--et-rich-text-editor-token-padding-inline);border-radius:var(--et-rich-text-editor-token-radius);background:color-mix(in srgb,var(--_et-rte-token-accent) 22%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--_et-rte-token-accent) 45%,transparent);color:var(--et-theme-color-ink-solid, inherit);font-weight:500;white-space:nowrap;-webkit-user-select:all;user-select:all;cursor:default}.et-rte-content .et-rte-token-prefix{margin-inline-end:1px;opacity:.65}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
41705
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: RichTextContentStylesComponent, isStandalone: true, selector: "et-rich-text-content-styles", ngImport: i0, template: '', isInline: true, styles: ["@layer components{@property --et-rich-text-editor-content-gap{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-rich-text-editor-quote-indent{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-rich-text-editor-quote-bar-width{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-rich-text-editor-code-block-radius{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-rich-text-editor-token-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-token-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 4px;}.et-rte-content{overflow-wrap:anywhere}.et-rte-content>:first-child{margin-block-start:0}.et-rte-content>:last-child{margin-block-end:0}.et-rte-content p{margin-block:0}.et-rte-content p+p,.et-rte-content ul,.et-rte-content ol,.et-rte-content blockquote,.et-rte-content pre{margin-block-start:var(--et-rich-text-editor-content-gap)}.et-rte-content h1,.et-rte-content h2,.et-rte-content h3,.et-rte-content h4,.et-rte-content h5,.et-rte-content h6{margin-block:0;font-weight:700;line-height:1.25}.et-rte-content :is(h1,h2,h3,h4,h5,h6)+*,.et-rte-content *+:is(h1,h2,h3,h4,h5,h6){margin-block-start:var(--et-rich-text-editor-content-gap)}.et-rte-content h1{font-size:2.4rem}.et-rte-content h2{font-size:2rem}.et-rte-content h3{font-size:1.6rem}.et-rte-content ul,.et-rte-content ol{margin-block-end:0;padding-inline-start:1.5em;list-style-position:outside}.et-rte-content ul{list-style-type:disc}.et-rte-content ul ul,.et-rte-content ul ul ul ul ul{list-style-type:circle}.et-rte-content ul ul ul,.et-rte-content ul ul ul ul ul ul{list-style-type:square}.et-rte-content ul ul ul ul{list-style-type:disc}.et-rte-content ol{list-style-type:decimal}.et-rte-content ol ol,.et-rte-content ol ol ol ol ol{list-style-type:lower-alpha}.et-rte-content ol ol ol,.et-rte-content ol ol ol ol ol ol{list-style-type:lower-roman}.et-rte-content ol ol ol ol{list-style-type:decimal}.et-rte-content li{margin-block:0}.et-rte-content li::marker{color:color-mix(in srgb,currentColor 60%,transparent)}.et-rte-content a{color:var(--et-theme-color-primary-solid, currentColor);text-decoration:underline}.et-rte-content code{padding:.1em .3em;border-radius:4px;background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 14%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em}.et-rte-content blockquote{margin-inline:0;margin-block-end:0;padding-inline-start:var(--et-rich-text-editor-quote-indent);border-inline-start:var(--et-rich-text-editor-quote-bar-width) solid color-mix(in srgb,var(--et-surface-border-solid, currentColor) 80%,transparent);color:color-mix(in srgb,currentColor 82%,transparent)}.et-rte-content blockquote blockquote{margin-block-start:var(--et-rich-text-editor-content-gap)}.et-rte-content pre{margin-block-end:0;padding:8px 10px;border-radius:var(--et-rich-text-editor-code-block-radius);background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 10%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em;white-space:pre-wrap}.et-rte-content pre code{padding:0;border-radius:0;background:none;font-size:inherit}.et-rte-content .et-rte-token{--_et-rte-token-accent: var(--et-theme-color-primary-solid, var(--et-surface-interaction-solid, currentColor));display:inline;padding-inline:var(--et-rich-text-editor-token-padding-inline);border-radius:var(--et-rich-text-editor-token-radius);background:color-mix(in srgb,var(--_et-rte-token-accent) 22%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--_et-rte-token-accent) 45%,transparent);color:var(--et-theme-color-ink-solid, inherit);font-weight:500;white-space:nowrap;-webkit-user-select:all;user-select:all;cursor:default}.et-rte-content .et-rte-token-prefix{margin-inline-end:1px;opacity:.65}.et-rte-content .et-rte-align-left{text-align:left}.et-rte-content .et-rte-align-center{text-align:center}.et-rte-content .et-rte-align-right{text-align:right}.et-rte-content .et-rte-align-justify{text-align:justify}.et-rte-content .et-rte-align-start{text-align:start}.et-rte-content .et-rte-align-end{text-align:end}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
41680
41706
  }
41681
41707
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RichTextContentStylesComponent, decorators: [{
41682
41708
  type: Component,
41683
- args: [{ selector: 'et-rich-text-content-styles', template: '', encapsulation: ViewEncapsulation.None, styles: ["@layer components{@property --et-rich-text-editor-content-gap{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-rich-text-editor-quote-indent{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-rich-text-editor-quote-bar-width{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-rich-text-editor-code-block-radius{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-rich-text-editor-token-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-token-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 4px;}.et-rte-content{overflow-wrap:anywhere}.et-rte-content>:first-child{margin-block-start:0}.et-rte-content>:last-child{margin-block-end:0}.et-rte-content p{margin-block:0}.et-rte-content p+p,.et-rte-content ul,.et-rte-content ol,.et-rte-content blockquote,.et-rte-content pre{margin-block-start:var(--et-rich-text-editor-content-gap)}.et-rte-content h1,.et-rte-content h2,.et-rte-content h3,.et-rte-content h4,.et-rte-content h5,.et-rte-content h6{margin-block:0;font-weight:700;line-height:1.25}.et-rte-content :is(h1,h2,h3,h4,h5,h6)+*,.et-rte-content *+:is(h1,h2,h3,h4,h5,h6){margin-block-start:var(--et-rich-text-editor-content-gap)}.et-rte-content h1{font-size:2.4rem}.et-rte-content h2{font-size:2rem}.et-rte-content h3{font-size:1.6rem}.et-rte-content ul,.et-rte-content ol{margin-block-end:0;padding-inline-start:1.5em;list-style-position:outside}.et-rte-content ul{list-style-type:disc}.et-rte-content ul ul,.et-rte-content ul ul ul ul ul{list-style-type:circle}.et-rte-content ul ul ul,.et-rte-content ul ul ul ul ul ul{list-style-type:square}.et-rte-content ul ul ul ul{list-style-type:disc}.et-rte-content ol{list-style-type:decimal}.et-rte-content ol ol,.et-rte-content ol ol ol ol ol{list-style-type:lower-alpha}.et-rte-content ol ol ol,.et-rte-content ol ol ol ol ol ol{list-style-type:lower-roman}.et-rte-content ol ol ol ol{list-style-type:decimal}.et-rte-content li{margin-block:0}.et-rte-content li::marker{color:color-mix(in srgb,currentColor 60%,transparent)}.et-rte-content a{color:var(--et-theme-color-primary-solid, currentColor);text-decoration:underline}.et-rte-content code{padding:.1em .3em;border-radius:4px;background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 14%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em}.et-rte-content blockquote{margin-inline:0;margin-block-end:0;padding-inline-start:var(--et-rich-text-editor-quote-indent);border-inline-start:var(--et-rich-text-editor-quote-bar-width) solid color-mix(in srgb,var(--et-surface-border-solid, currentColor) 80%,transparent);color:color-mix(in srgb,currentColor 82%,transparent)}.et-rte-content blockquote blockquote{margin-block-start:var(--et-rich-text-editor-content-gap)}.et-rte-content pre{margin-block-end:0;padding:8px 10px;border-radius:var(--et-rich-text-editor-code-block-radius);background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 10%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em;white-space:pre-wrap}.et-rte-content pre code{padding:0;border-radius:0;background:none;font-size:inherit}.et-rte-content .et-rte-token{--_et-rte-token-accent: var(--et-theme-color-primary-solid, var(--et-surface-interaction-solid, currentColor));display:inline;padding-inline:var(--et-rich-text-editor-token-padding-inline);border-radius:var(--et-rich-text-editor-token-radius);background:color-mix(in srgb,var(--_et-rte-token-accent) 22%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--_et-rte-token-accent) 45%,transparent);color:var(--et-theme-color-ink-solid, inherit);font-weight:500;white-space:nowrap;-webkit-user-select:all;user-select:all;cursor:default}.et-rte-content .et-rte-token-prefix{margin-inline-end:1px;opacity:.65}}\n"] }]
41709
+ args: [{ selector: 'et-rich-text-content-styles', template: '', encapsulation: ViewEncapsulation.None, styles: ["@layer components{@property --et-rich-text-editor-content-gap{syntax: \"<length>\"; inherits: true; initial-value: 8px;}@property --et-rich-text-editor-quote-indent{syntax: \"<length>\"; inherits: true; initial-value: 12px;}@property --et-rich-text-editor-quote-bar-width{syntax: \"<length>\"; inherits: true; initial-value: 2px;}@property --et-rich-text-editor-code-block-radius{syntax: \"<length>\"; inherits: true; initial-value: 6px;}@property --et-rich-text-editor-token-radius{syntax: \"<length>\"; inherits: true; initial-value: 4px;}@property --et-rich-text-editor-token-padding-inline{syntax: \"<length>\"; inherits: true; initial-value: 4px;}.et-rte-content{overflow-wrap:anywhere}.et-rte-content>:first-child{margin-block-start:0}.et-rte-content>:last-child{margin-block-end:0}.et-rte-content p{margin-block:0}.et-rte-content p+p,.et-rte-content ul,.et-rte-content ol,.et-rte-content blockquote,.et-rte-content pre{margin-block-start:var(--et-rich-text-editor-content-gap)}.et-rte-content h1,.et-rte-content h2,.et-rte-content h3,.et-rte-content h4,.et-rte-content h5,.et-rte-content h6{margin-block:0;font-weight:700;line-height:1.25}.et-rte-content :is(h1,h2,h3,h4,h5,h6)+*,.et-rte-content *+:is(h1,h2,h3,h4,h5,h6){margin-block-start:var(--et-rich-text-editor-content-gap)}.et-rte-content h1{font-size:2.4rem}.et-rte-content h2{font-size:2rem}.et-rte-content h3{font-size:1.6rem}.et-rte-content ul,.et-rte-content ol{margin-block-end:0;padding-inline-start:1.5em;list-style-position:outside}.et-rte-content ul{list-style-type:disc}.et-rte-content ul ul,.et-rte-content ul ul ul ul ul{list-style-type:circle}.et-rte-content ul ul ul,.et-rte-content ul ul ul ul ul ul{list-style-type:square}.et-rte-content ul ul ul ul{list-style-type:disc}.et-rte-content ol{list-style-type:decimal}.et-rte-content ol ol,.et-rte-content ol ol ol ol ol{list-style-type:lower-alpha}.et-rte-content ol ol ol,.et-rte-content ol ol ol ol ol ol{list-style-type:lower-roman}.et-rte-content ol ol ol ol{list-style-type:decimal}.et-rte-content li{margin-block:0}.et-rte-content li::marker{color:color-mix(in srgb,currentColor 60%,transparent)}.et-rte-content a{color:var(--et-theme-color-primary-solid, currentColor);text-decoration:underline}.et-rte-content code{padding:.1em .3em;border-radius:4px;background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 14%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em}.et-rte-content blockquote{margin-inline:0;margin-block-end:0;padding-inline-start:var(--et-rich-text-editor-quote-indent);border-inline-start:var(--et-rich-text-editor-quote-bar-width) solid color-mix(in srgb,var(--et-surface-border-solid, currentColor) 80%,transparent);color:color-mix(in srgb,currentColor 82%,transparent)}.et-rte-content blockquote blockquote{margin-block-start:var(--et-rich-text-editor-content-gap)}.et-rte-content pre{margin-block-end:0;padding:8px 10px;border-radius:var(--et-rich-text-editor-code-block-radius);background:color-mix(in srgb,var(--et-surface-interaction-solid, currentColor) 10%,transparent);font-family:var(--et-font-family-mono, ui-monospace, monospace);font-size:.9em;white-space:pre-wrap}.et-rte-content pre code{padding:0;border-radius:0;background:none;font-size:inherit}.et-rte-content .et-rte-token{--_et-rte-token-accent: var(--et-theme-color-primary-solid, var(--et-surface-interaction-solid, currentColor));display:inline;padding-inline:var(--et-rich-text-editor-token-padding-inline);border-radius:var(--et-rich-text-editor-token-radius);background:color-mix(in srgb,var(--_et-rte-token-accent) 22%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--_et-rte-token-accent) 45%,transparent);color:var(--et-theme-color-ink-solid, inherit);font-weight:500;white-space:nowrap;-webkit-user-select:all;user-select:all;cursor:default}.et-rte-content .et-rte-token-prefix{margin-inline-end:1px;opacity:.65}.et-rte-content .et-rte-align-left{text-align:left}.et-rte-content .et-rte-align-center{text-align:center}.et-rte-content .et-rte-align-right{text-align:right}.et-rte-content .et-rte-align-justify{text-align:justify}.et-rte-content .et-rte-align-start{text-align:start}.et-rte-content .et-rte-align-end{text-align:end}}\n"] }]
41684
41710
  }] });
41685
41711
  /** @internal */
41686
41712
  const mountRichTextContentStyles = () => injectStyleManager().mount(RichTextContentStylesComponent);
@@ -50904,70 +50930,59 @@ class GridDebugComponent {
50904
50930
  }
50905
50931
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: GridDebugComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
50906
50932
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: GridDebugComponent, isStandalone: true, selector: "et-grid-debug", inputs: { grid: { classPropertyName: "grid", publicName: "grid", isSignal: true, isRequired: true, transformFunction: null }, externalItems: { classPropertyName: "externalItems", publicName: "externalItems", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
50907
- <details
50908
- style="font-family: monospace; font-size: 11px; border: 1px solid #d1d5db; border-radius: 4px; margin-top: 8px; background: #f9fafb; color: #111"
50909
- >
50910
- <summary
50911
- style="padding: 6px 10px; cursor: pointer; list-style: none; display: flex; align-items: center; gap: 10px; user-select: none"
50912
- >
50913
- <span style="font-weight: 700; color: #6b7280">et-grid-debug</span>
50933
+ <details class="et-grid-debug-panel">
50934
+ <summary class="et-grid-debug-summary">
50935
+ <span class="et-grid-debug-title">et-grid-debug</span>
50914
50936
 
50915
- <span style="color: #6b7280">
50916
- bp: <strong style="color: #111827">{{ activeBreakpoint() }}</strong> &nbsp;·&nbsp; {{ containerWidth() }}px
50917
- &nbsp;·&nbsp; {{ items().length }} items
50937
+ <span class="et-grid-debug-muted">
50938
+ bp: <strong class="et-grid-debug-strong">{{ activeBreakpoint() }}</strong> &nbsp;·&nbsp;
50939
+ {{ containerWidth() }}px &nbsp;·&nbsp; {{ items().length }} items
50918
50940
  @if (hasDrag()) {
50919
- &nbsp;·&nbsp; <span style="color: #d97706">⠿ dragging</span>
50941
+ &nbsp;·&nbsp; <span class="et-grid-debug-warning">⠿ dragging</span>
50920
50942
  }
50921
50943
  </span>
50922
50944
 
50923
50945
  @if (issueCount() > 0) {
50924
- <span style="color: #dc2626; font-weight: 700"
50925
- >⚠ {{ issueCount() }} issue{{ issueCount() === 1 ? '' : 's' }}</span
50926
- >
50946
+ <span class="et-grid-debug-issues">⚠ {{ issueCount() }} issue{{ issueCount() === 1 ? '' : 's' }}</span>
50927
50947
  }
50928
50948
 
50929
- <button
50930
- (click)="copyJson($event)"
50931
- style="margin-left: auto; padding: 2px 8px; border: 1px solid #d1d5db; border-radius: 3px; background: #fff; cursor: pointer; font-size: 11px; color: #374151"
50932
- >
50933
- Copy JSON
50934
- </button>
50949
+ <button (click)="copyJson($event)" class="et-grid-debug-copy">Copy JSON</button>
50935
50950
 
50936
50951
  @if (copied()) {
50937
- <span style="color: #16a34a; font-size: 10px">✓ copied</span>
50952
+ <span class="et-grid-debug-copied">✓ copied</span>
50938
50953
  }
50939
50954
  </summary>
50940
50955
 
50941
- <div style="padding: 8px 10px; overflow-x: auto; border-top: 1px solid #e5e7eb">
50956
+ <div class="et-grid-debug-body">
50942
50957
  <!-- Breakpoint legend -->
50943
- <div style="display: flex; gap: 6px; margin-bottom: 8px; flex-wrap: wrap">
50958
+ <div class="et-grid-debug-legend">
50944
50959
  @for (bp of breakpoints(); track bp.name) {
50945
50960
  <span
50946
50961
  [style.fontWeight]="bp.name === activeBreakpoint() ? '700' : '400'"
50947
50962
  [style.color]="bp.name === activeBreakpoint() ? '#1d4ed8' : '#9ca3af'"
50948
- style="padding: 1px 7px; border: 1px solid currentColor; border-radius: 99px"
50963
+ class="et-grid-debug-breakpoint"
50949
50964
  >{{ bp.name }}&nbsp;{{ bp.columns }}col&nbsp;≥{{ bp.minWidth }}px</span
50950
50965
  >
50951
50966
  }
50952
50967
  </div>
50953
50968
 
50954
50969
  <!-- Layout table -->
50955
- <table style="border-collapse: collapse; white-space: nowrap">
50970
+ <table class="et-grid-debug-table">
50956
50971
  <thead>
50957
- <tr style="background: #f3f4f6">
50958
- <th style="padding: 3px 8px; text-align: left; border: 1px solid #e5e7eb">id</th>
50959
- <th style="padding: 3px 8px; text-align: left; border: 1px solid #e5e7eb">type</th>
50972
+ <tr class="et-grid-debug-head-row">
50973
+ <th class="et-grid-debug-cell et-grid-debug-cell-start">id</th>
50974
+ <th class="et-grid-debug-cell et-grid-debug-cell-start">type</th>
50960
50975
  @for (bp of breakpoints(); track bp.name) {
50961
50976
  <th
50962
50977
  [style.background]="bp.name === activeBreakpoint() ? '#dbeafe' : '#f3f4f6'"
50963
- style="padding: 3px 8px; text-align: center; border: 1px solid #e5e7eb"
50978
+ class="et-grid-debug-cell"
50964
50979
  >
50965
50980
  {{ bp.name }}{{ hasExternal() ? ' int' : '' }}
50966
50981
  </th>
50967
50982
  @if (hasExternal()) {
50968
50983
  <th
50969
50984
  [style.background]="bp.name === activeBreakpoint() ? '#dbeafe' : '#f3f4f6'"
50970
- style="padding: 3px 8px; text-align: center; border: 1px solid #e5e7eb; opacity: .65"
50985
+ class="et-grid-debug-cell et-grid-debug-cell-ext"
50971
50986
  >
50972
50987
  {{ bp.name }} ext
50973
50988
  </th>
@@ -50978,13 +50993,13 @@ class GridDebugComponent {
50978
50993
  <tbody>
50979
50994
  @for (row of rows(); track row.id) {
50980
50995
  <tr>
50981
- <td style="padding: 3px 8px; border: 1px solid #e5e7eb; color: #6b7280">{{ row.id }}</td>
50982
- <td style="padding: 3px 8px; border: 1px solid #e5e7eb; color: #9ca3af">{{ row.type }}</td>
50996
+ <td class="et-grid-debug-cell et-grid-debug-cell-start et-grid-debug-id">{{ row.id }}</td>
50997
+ <td class="et-grid-debug-cell et-grid-debug-cell-start et-grid-debug-type">{{ row.type }}</td>
50983
50998
  @for (cell of row.cells; track cell.bp) {
50984
50999
  <td
50985
51000
  [style.color]="cell.intMissing ? '#dc2626' : '#111'"
50986
51001
  [title]="cell.intMissing ? 'MISSING - layout.' + cell.bp + ' undefined in internal state' : ''"
50987
- style="padding: 3px 8px; border: 1px solid #e5e7eb; text-align: center"
51002
+ class="et-grid-debug-cell"
50988
51003
  >
50989
51004
  {{ fmtPos(cell.int) }}
50990
51005
  </td>
@@ -50992,7 +51007,7 @@ class GridDebugComponent {
50992
51007
  <td
50993
51008
  [style.color]="cell.extMissing ? '#dc2626' : cell.mismatch ? '#d97706' : '#9ca3af'"
50994
51009
  [title]="cell.mismatch ? 'MISMATCH - ext=' + fmtPos(cell.ext) + ' int=' + fmtPos(cell.int) : ''"
50995
- style="padding: 3px 8px; border: 1px solid #e5e7eb; text-align: center"
51010
+ class="et-grid-debug-cell"
50996
51011
  >
50997
51012
  {{ fmtPos(cell.ext) }}
50998
51013
  </td>
@@ -51004,85 +51019,72 @@ class GridDebugComponent {
51004
51019
  </table>
51005
51020
 
51006
51021
  @if (hasExternal()) {
51007
- <p style="margin-top: 6px; color: #9ca3af; font-size: 10px">
51022
+ <p class="et-grid-debug-note">
51008
51023
  int = grid.currentItems() (internal) &nbsp;·&nbsp; ext = externalItems input &nbsp;·&nbsp;
51009
- <span style="color: #dc2626">red = undefined</span> &nbsp;·&nbsp;
51010
- <span style="color: #d97706">orange = mismatch</span>
51024
+ <span class="et-grid-debug-error">red = undefined</span> &nbsp;·&nbsp;
51025
+ <span class="et-grid-debug-warning">orange = mismatch</span>
51011
51026
  </p>
51012
51027
  }
51013
51028
  </div>
51014
51029
  </details>
51015
- `, isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
51030
+ `, isInline: true, styles: ["@layer components{.et-grid-debug-panel{font-family:monospace;font-size:11px;border:1px solid #d1d5db;border-radius:4px;margin-top:8px;background:#f9fafb;color:#111}.et-grid-debug-summary{padding:6px 10px;cursor:pointer;list-style:none;display:flex;align-items:center;gap:10px;-webkit-user-select:none;user-select:none}.et-grid-debug-title{font-weight:700;color:#6b7280}.et-grid-debug-muted{color:#6b7280}.et-grid-debug-strong{color:#111827}.et-grid-debug-warning{color:#d97706}.et-grid-debug-error{color:#dc2626}.et-grid-debug-issues{color:#dc2626;font-weight:700}.et-grid-debug-copy{margin-left:auto;padding:2px 8px;border:1px solid #d1d5db;border-radius:3px;background:#fff;cursor:pointer;font-size:11px;color:#374151}.et-grid-debug-copied{color:#16a34a;font-size:10px}.et-grid-debug-body{padding:8px 10px;overflow-x:auto;border-top:1px solid #e5e7eb}.et-grid-debug-legend{display:flex;gap:6px;margin-bottom:8px;flex-wrap:wrap}.et-grid-debug-breakpoint{padding:1px 7px;border:1px solid currentColor;border-radius:99px}.et-grid-debug-table{border-collapse:collapse;white-space:nowrap}.et-grid-debug-head-row{background:#f3f4f6}.et-grid-debug-cell{padding:3px 8px;border:1px solid #e5e7eb;text-align:center}.et-grid-debug-cell-start{text-align:left}.et-grid-debug-cell-ext{opacity:.65}.et-grid-debug-id{color:#6b7280}.et-grid-debug-type{color:#9ca3af}.et-grid-debug-note{margin-top:6px;color:#9ca3af;font-size:10px}}\n"], encapsulation: i0.ViewEncapsulation.None }); }
51016
51031
  }
51017
51032
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: GridDebugComponent, decorators: [{
51018
51033
  type: Component,
51019
- args: [{
51020
- selector: 'et-grid-debug',
51021
- template: `
51022
- <details
51023
- style="font-family: monospace; font-size: 11px; border: 1px solid #d1d5db; border-radius: 4px; margin-top: 8px; background: #f9fafb; color: #111"
51024
- >
51025
- <summary
51026
- style="padding: 6px 10px; cursor: pointer; list-style: none; display: flex; align-items: center; gap: 10px; user-select: none"
51027
- >
51028
- <span style="font-weight: 700; color: #6b7280">et-grid-debug</span>
51029
-
51030
- <span style="color: #6b7280">
51031
- bp: <strong style="color: #111827">{{ activeBreakpoint() }}</strong> &nbsp;·&nbsp; {{ containerWidth() }}px
51032
- &nbsp;·&nbsp; {{ items().length }} items
51034
+ args: [{ selector: 'et-grid-debug', template: `
51035
+ <details class="et-grid-debug-panel">
51036
+ <summary class="et-grid-debug-summary">
51037
+ <span class="et-grid-debug-title">et-grid-debug</span>
51038
+
51039
+ <span class="et-grid-debug-muted">
51040
+ bp: <strong class="et-grid-debug-strong">{{ activeBreakpoint() }}</strong> &nbsp;·&nbsp;
51041
+ {{ containerWidth() }}px &nbsp;·&nbsp; {{ items().length }} items
51033
51042
  @if (hasDrag()) {
51034
- &nbsp;·&nbsp; <span style="color: #d97706">⠿ dragging</span>
51043
+ &nbsp;·&nbsp; <span class="et-grid-debug-warning">⠿ dragging</span>
51035
51044
  }
51036
51045
  </span>
51037
51046
 
51038
51047
  @if (issueCount() > 0) {
51039
- <span style="color: #dc2626; font-weight: 700"
51040
- >⚠ {{ issueCount() }} issue{{ issueCount() === 1 ? '' : 's' }}</span
51041
- >
51048
+ <span class="et-grid-debug-issues">⚠ {{ issueCount() }} issue{{ issueCount() === 1 ? '' : 's' }}</span>
51042
51049
  }
51043
51050
 
51044
- <button
51045
- (click)="copyJson($event)"
51046
- style="margin-left: auto; padding: 2px 8px; border: 1px solid #d1d5db; border-radius: 3px; background: #fff; cursor: pointer; font-size: 11px; color: #374151"
51047
- >
51048
- Copy JSON
51049
- </button>
51051
+ <button (click)="copyJson($event)" class="et-grid-debug-copy">Copy JSON</button>
51050
51052
 
51051
51053
  @if (copied()) {
51052
- <span style="color: #16a34a; font-size: 10px">✓ copied</span>
51054
+ <span class="et-grid-debug-copied">✓ copied</span>
51053
51055
  }
51054
51056
  </summary>
51055
51057
 
51056
- <div style="padding: 8px 10px; overflow-x: auto; border-top: 1px solid #e5e7eb">
51058
+ <div class="et-grid-debug-body">
51057
51059
  <!-- Breakpoint legend -->
51058
- <div style="display: flex; gap: 6px; margin-bottom: 8px; flex-wrap: wrap">
51060
+ <div class="et-grid-debug-legend">
51059
51061
  @for (bp of breakpoints(); track bp.name) {
51060
51062
  <span
51061
51063
  [style.fontWeight]="bp.name === activeBreakpoint() ? '700' : '400'"
51062
51064
  [style.color]="bp.name === activeBreakpoint() ? '#1d4ed8' : '#9ca3af'"
51063
- style="padding: 1px 7px; border: 1px solid currentColor; border-radius: 99px"
51065
+ class="et-grid-debug-breakpoint"
51064
51066
  >{{ bp.name }}&nbsp;{{ bp.columns }}col&nbsp;≥{{ bp.minWidth }}px</span
51065
51067
  >
51066
51068
  }
51067
51069
  </div>
51068
51070
 
51069
51071
  <!-- Layout table -->
51070
- <table style="border-collapse: collapse; white-space: nowrap">
51072
+ <table class="et-grid-debug-table">
51071
51073
  <thead>
51072
- <tr style="background: #f3f4f6">
51073
- <th style="padding: 3px 8px; text-align: left; border: 1px solid #e5e7eb">id</th>
51074
- <th style="padding: 3px 8px; text-align: left; border: 1px solid #e5e7eb">type</th>
51074
+ <tr class="et-grid-debug-head-row">
51075
+ <th class="et-grid-debug-cell et-grid-debug-cell-start">id</th>
51076
+ <th class="et-grid-debug-cell et-grid-debug-cell-start">type</th>
51075
51077
  @for (bp of breakpoints(); track bp.name) {
51076
51078
  <th
51077
51079
  [style.background]="bp.name === activeBreakpoint() ? '#dbeafe' : '#f3f4f6'"
51078
- style="padding: 3px 8px; text-align: center; border: 1px solid #e5e7eb"
51080
+ class="et-grid-debug-cell"
51079
51081
  >
51080
51082
  {{ bp.name }}{{ hasExternal() ? ' int' : '' }}
51081
51083
  </th>
51082
51084
  @if (hasExternal()) {
51083
51085
  <th
51084
51086
  [style.background]="bp.name === activeBreakpoint() ? '#dbeafe' : '#f3f4f6'"
51085
- style="padding: 3px 8px; text-align: center; border: 1px solid #e5e7eb; opacity: .65"
51087
+ class="et-grid-debug-cell et-grid-debug-cell-ext"
51086
51088
  >
51087
51089
  {{ bp.name }} ext
51088
51090
  </th>
@@ -51093,13 +51095,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
51093
51095
  <tbody>
51094
51096
  @for (row of rows(); track row.id) {
51095
51097
  <tr>
51096
- <td style="padding: 3px 8px; border: 1px solid #e5e7eb; color: #6b7280">{{ row.id }}</td>
51097
- <td style="padding: 3px 8px; border: 1px solid #e5e7eb; color: #9ca3af">{{ row.type }}</td>
51098
+ <td class="et-grid-debug-cell et-grid-debug-cell-start et-grid-debug-id">{{ row.id }}</td>
51099
+ <td class="et-grid-debug-cell et-grid-debug-cell-start et-grid-debug-type">{{ row.type }}</td>
51098
51100
  @for (cell of row.cells; track cell.bp) {
51099
51101
  <td
51100
51102
  [style.color]="cell.intMissing ? '#dc2626' : '#111'"
51101
51103
  [title]="cell.intMissing ? 'MISSING - layout.' + cell.bp + ' undefined in internal state' : ''"
51102
- style="padding: 3px 8px; border: 1px solid #e5e7eb; text-align: center"
51104
+ class="et-grid-debug-cell"
51103
51105
  >
51104
51106
  {{ fmtPos(cell.int) }}
51105
51107
  </td>
@@ -51107,7 +51109,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
51107
51109
  <td
51108
51110
  [style.color]="cell.extMissing ? '#dc2626' : cell.mismatch ? '#d97706' : '#9ca3af'"
51109
51111
  [title]="cell.mismatch ? 'MISMATCH - ext=' + fmtPos(cell.ext) + ' int=' + fmtPos(cell.int) : ''"
51110
- style="padding: 3px 8px; border: 1px solid #e5e7eb; text-align: center"
51112
+ class="et-grid-debug-cell"
51111
51113
  >
51112
51114
  {{ fmtPos(cell.ext) }}
51113
51115
  </td>
@@ -51119,17 +51121,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
51119
51121
  </table>
51120
51122
 
51121
51123
  @if (hasExternal()) {
51122
- <p style="margin-top: 6px; color: #9ca3af; font-size: 10px">
51124
+ <p class="et-grid-debug-note">
51123
51125
  int = grid.currentItems() (internal) &nbsp;·&nbsp; ext = externalItems input &nbsp;·&nbsp;
51124
- <span style="color: #dc2626">red = undefined</span> &nbsp;·&nbsp;
51125
- <span style="color: #d97706">orange = mismatch</span>
51126
+ <span class="et-grid-debug-error">red = undefined</span> &nbsp;·&nbsp;
51127
+ <span class="et-grid-debug-warning">orange = mismatch</span>
51126
51128
  </p>
51127
51129
  }
51128
51130
  </div>
51129
51131
  </details>
51130
- `,
51131
- encapsulation: ViewEncapsulation.None,
51132
- }]
51132
+ `, encapsulation: ViewEncapsulation.None, styles: ["@layer components{.et-grid-debug-panel{font-family:monospace;font-size:11px;border:1px solid #d1d5db;border-radius:4px;margin-top:8px;background:#f9fafb;color:#111}.et-grid-debug-summary{padding:6px 10px;cursor:pointer;list-style:none;display:flex;align-items:center;gap:10px;-webkit-user-select:none;user-select:none}.et-grid-debug-title{font-weight:700;color:#6b7280}.et-grid-debug-muted{color:#6b7280}.et-grid-debug-strong{color:#111827}.et-grid-debug-warning{color:#d97706}.et-grid-debug-error{color:#dc2626}.et-grid-debug-issues{color:#dc2626;font-weight:700}.et-grid-debug-copy{margin-left:auto;padding:2px 8px;border:1px solid #d1d5db;border-radius:3px;background:#fff;cursor:pointer;font-size:11px;color:#374151}.et-grid-debug-copied{color:#16a34a;font-size:10px}.et-grid-debug-body{padding:8px 10px;overflow-x:auto;border-top:1px solid #e5e7eb}.et-grid-debug-legend{display:flex;gap:6px;margin-bottom:8px;flex-wrap:wrap}.et-grid-debug-breakpoint{padding:1px 7px;border:1px solid currentColor;border-radius:99px}.et-grid-debug-table{border-collapse:collapse;white-space:nowrap}.et-grid-debug-head-row{background:#f3f4f6}.et-grid-debug-cell{padding:3px 8px;border:1px solid #e5e7eb;text-align:center}.et-grid-debug-cell-start{text-align:left}.et-grid-debug-cell-ext{opacity:.65}.et-grid-debug-id{color:#6b7280}.et-grid-debug-type{color:#9ca3af}.et-grid-debug-note{margin-top:6px;color:#9ca3af;font-size:10px}}\n"] }]
51133
51133
  }], propDecorators: { grid: [{ type: i0.Input, args: [{ isSignal: true, alias: "grid", required: true }] }], externalItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "externalItems", required: false }] }] } });
51134
51134
 
51135
51135
  /** The grid, its items, the item toolbar and the default item actions. */
@@ -60222,7 +60222,7 @@ class DailymotionPlayerComponent {
60222
60222
  this.player = inject(DAILYMOTION_PLAYER_TOKEN);
60223
60223
  }
60224
60224
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: DailymotionPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
60225
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: DailymotionPlayerComponent, isStandalone: true, selector: "et-dailymotion-player", host: { styleAttribute: "display: block; width: 100%; height: 100%", classAttribute: "et-dailymotion-player et-stream-player" }, hostDirectives: [{ directive: DailymotionPlayerParamsDirective, inputs: ["videoId", "videoId", "startTime", "startTime", "width", "width", "height", "height"] }, { directive: DailymotionPlayerDirective }], ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
60225
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: DailymotionPlayerComponent, isStandalone: true, selector: "et-dailymotion-player", host: { properties: { "style.display": "\"block\"", "style.width": "\"100%\"", "style.height": "\"100%\"" }, classAttribute: "et-dailymotion-player et-stream-player" }, hostDirectives: [{ directive: DailymotionPlayerParamsDirective, inputs: ["videoId", "videoId", "startTime", "startTime", "width", "width", "height", "height"] }, { directive: DailymotionPlayerDirective }], ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
60226
60226
  }
60227
60227
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: DailymotionPlayerComponent, decorators: [{
60228
60228
  type: Component,
@@ -60239,7 +60239,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
60239
60239
  ],
60240
60240
  host: {
60241
60241
  class: 'et-dailymotion-player et-stream-player',
60242
- style: 'display: block; width: 100%; height: 100%',
60242
+ '[style.display]': '"block"',
60243
+ '[style.width]': '"100%"',
60244
+ '[style.height]': '"100%"',
60243
60245
  },
60244
60246
  }]
60245
60247
  }] });
@@ -60307,6 +60309,7 @@ const STREAM_SCRIPT_LOADER_DEF = /* @__PURE__ */ defineRootProvider(() => {
60307
60309
  const cache = new Map();
60308
60310
  const mountedScripts = new Set();
60309
60311
  const renderer = injectRenderer();
60312
+ const nonce = inject(CSP_NONCE, { optional: true });
60310
60313
  const load = (src) => {
60311
60314
  const cached = cache.get(src);
60312
60315
  if (cached)
@@ -60321,6 +60324,8 @@ const STREAM_SCRIPT_LOADER_DEF = /* @__PURE__ */ defineRootProvider(() => {
60321
60324
  const script = renderer.createElement('script');
60322
60325
  script.src = src;
60323
60326
  script.async = true;
60327
+ if (nonce)
60328
+ renderer.setAttribute(script, 'nonce', nonce);
60324
60329
  renderer.listen(script, 'load', () => {
60325
60330
  subscriber.next();
60326
60331
  subscriber.complete();
@@ -60510,7 +60515,7 @@ class FacebookPlayerComponent {
60510
60515
  this.player = inject(FACEBOOK_PLAYER_TOKEN);
60511
60516
  }
60512
60517
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: FacebookPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
60513
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: FacebookPlayerComponent, isStandalone: true, selector: "et-facebook-player", host: { styleAttribute: "display: block; width: 100%; height: 100%", classAttribute: "et-facebook-player et-stream-player" }, hostDirectives: [{ directive: FacebookPlayerParamsDirective, inputs: ["videoId", "videoId", "width", "width", "height", "height"] }, { directive: FacebookPlayerDirective }], ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
60518
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: FacebookPlayerComponent, isStandalone: true, selector: "et-facebook-player", host: { properties: { "style.display": "\"block\"", "style.width": "\"100%\"", "style.height": "\"100%\"" }, classAttribute: "et-facebook-player et-stream-player" }, hostDirectives: [{ directive: FacebookPlayerParamsDirective, inputs: ["videoId", "videoId", "width", "width", "height", "height"] }, { directive: FacebookPlayerDirective }], ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
60514
60519
  }
60515
60520
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: FacebookPlayerComponent, decorators: [{
60516
60521
  type: Component,
@@ -60527,7 +60532,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
60527
60532
  ],
60528
60533
  host: {
60529
60534
  class: 'et-facebook-player et-stream-player',
60530
- style: 'display: block; width: 100%; height: 100%',
60535
+ '[style.display]': '"block"',
60536
+ '[style.width]': '"100%"',
60537
+ '[style.height]': '"100%"',
60531
60538
  },
60532
60539
  }]
60533
60540
  }] });
@@ -60695,7 +60702,7 @@ class KickPlayerComponent {
60695
60702
  this.player = inject(KICK_PLAYER_TOKEN);
60696
60703
  }
60697
60704
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: KickPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
60698
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: KickPlayerComponent, isStandalone: true, selector: "et-kick-player", host: { styleAttribute: "display: block; width: 100%; height: 100%", classAttribute: "et-kick-player et-stream-player" }, hostDirectives: [{ directive: KickPlayerParamsDirective, inputs: ["channel", "channel", "width", "width", "height", "height", "muted", "muted"] }, { directive: KickPlayerDirective }], ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
60705
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: KickPlayerComponent, isStandalone: true, selector: "et-kick-player", host: { properties: { "style.display": "\"block\"", "style.width": "\"100%\"", "style.height": "\"100%\"" }, classAttribute: "et-kick-player et-stream-player" }, hostDirectives: [{ directive: KickPlayerParamsDirective, inputs: ["channel", "channel", "width", "width", "height", "height", "muted", "muted"] }, { directive: KickPlayerDirective }], ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
60699
60706
  }
60700
60707
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: KickPlayerComponent, decorators: [{
60701
60708
  type: Component,
@@ -60712,7 +60719,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
60712
60719
  ],
60713
60720
  host: {
60714
60721
  class: 'et-kick-player et-stream-player',
60715
- style: 'display: block; width: 100%; height: 100%',
60722
+ '[style.display]': '"block"',
60723
+ '[style.width]': '"100%"',
60724
+ '[style.height]': '"100%"',
60716
60725
  },
60717
60726
  }]
60718
60727
  }] });
@@ -60895,7 +60904,7 @@ class SoopPlayerComponent {
60895
60904
  this.player = inject(SOOP_PLAYER_TOKEN);
60896
60905
  }
60897
60906
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: SoopPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
60898
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: SoopPlayerComponent, isStandalone: true, selector: "et-soop-player", host: { styleAttribute: "display: block; width: 100%; height: 100%", classAttribute: "et-soop-player et-stream-player" }, hostDirectives: [{ directive: SoopPlayerParamsDirective, inputs: ["userId", "userId", "videoId", "videoId", "width", "width", "height", "height"] }, { directive: SoopPlayerDirective }], ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
60907
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: SoopPlayerComponent, isStandalone: true, selector: "et-soop-player", host: { properties: { "style.display": "\"block\"", "style.width": "\"100%\"", "style.height": "\"100%\"" }, classAttribute: "et-soop-player et-stream-player" }, hostDirectives: [{ directive: SoopPlayerParamsDirective, inputs: ["userId", "userId", "videoId", "videoId", "width", "width", "height", "height"] }, { directive: SoopPlayerDirective }], ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
60899
60908
  }
60900
60909
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: SoopPlayerComponent, decorators: [{
60901
60910
  type: Component,
@@ -60912,7 +60921,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
60912
60921
  ],
60913
60922
  host: {
60914
60923
  class: 'et-soop-player et-stream-player',
60915
- style: 'display: block; width: 100%; height: 100%',
60924
+ '[style.display]': '"block"',
60925
+ '[style.width]': '"100%"',
60926
+ '[style.height]': '"100%"',
60916
60927
  },
60917
60928
  }]
60918
60929
  }] });
@@ -61128,7 +61139,7 @@ class TikTokPlayerComponent {
61128
61139
  this.player = inject(TIKTOK_PLAYER_TOKEN);
61129
61140
  }
61130
61141
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: TikTokPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
61131
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: TikTokPlayerComponent, isStandalone: true, selector: "et-tiktok-player", host: { styleAttribute: "display: block; width: 100%; height: 100%", classAttribute: "et-tiktok-player et-stream-player" }, hostDirectives: [{ directive: TikTokPlayerParamsDirective, inputs: ["videoId", "videoId", "width", "width", "height", "height"] }, { directive: TikTokPlayerDirective }], ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
61142
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: TikTokPlayerComponent, isStandalone: true, selector: "et-tiktok-player", host: { properties: { "style.display": "\"block\"", "style.width": "\"100%\"", "style.height": "\"100%\"" }, classAttribute: "et-tiktok-player et-stream-player" }, hostDirectives: [{ directive: TikTokPlayerParamsDirective, inputs: ["videoId", "videoId", "width", "width", "height", "height"] }, { directive: TikTokPlayerDirective }], ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
61132
61143
  }
61133
61144
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: TikTokPlayerComponent, decorators: [{
61134
61145
  type: Component,
@@ -61145,7 +61156,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
61145
61156
  ],
61146
61157
  host: {
61147
61158
  class: 'et-tiktok-player et-stream-player',
61148
- style: 'display: block; width: 100%; height: 100%',
61159
+ '[style.display]': '"block"',
61160
+ '[style.width]': '"100%"',
61161
+ '[style.height]': '"100%"',
61149
61162
  },
61150
61163
  }]
61151
61164
  }] });
@@ -61418,7 +61431,7 @@ class TwitchPlayerComponent {
61418
61431
  this.player = inject(TWITCH_PLAYER_TOKEN);
61419
61432
  }
61420
61433
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: TwitchPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
61421
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: TwitchPlayerComponent, isStandalone: true, selector: "et-twitch-player", host: { styleAttribute: "display: block; width: 100%; height: 100%", classAttribute: "et-twitch-player et-stream-player" }, hostDirectives: [{ directive: TwitchPlayerParamsDirective, inputs: ["src", "src", "width", "width", "height", "height", "autoplay", "autoplay", "chat", "chat", "startTime", "startTime"] }, { directive: TwitchPlayerDirective }], ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
61434
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: TwitchPlayerComponent, isStandalone: true, selector: "et-twitch-player", host: { properties: { "style.display": "\"block\"", "style.width": "\"100%\"", "style.height": "\"100%\"" }, classAttribute: "et-twitch-player et-stream-player" }, hostDirectives: [{ directive: TwitchPlayerParamsDirective, inputs: ["src", "src", "width", "width", "height", "height", "autoplay", "autoplay", "chat", "chat", "startTime", "startTime"] }, { directive: TwitchPlayerDirective }], ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
61422
61435
  }
61423
61436
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: TwitchPlayerComponent, decorators: [{
61424
61437
  type: Component,
@@ -61435,7 +61448,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
61435
61448
  ],
61436
61449
  host: {
61437
61450
  class: 'et-twitch-player et-stream-player',
61438
- style: 'display: block; width: 100%; height: 100%',
61451
+ '[style.display]': '"block"',
61452
+ '[style.width]': '"100%"',
61453
+ '[style.height]': '"100%"',
61439
61454
  },
61440
61455
  }]
61441
61456
  }] });
@@ -61666,7 +61681,7 @@ class VimeoPlayerComponent {
61666
61681
  this.player = inject(VIMEO_PLAYER_TOKEN);
61667
61682
  }
61668
61683
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: VimeoPlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
61669
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: VimeoPlayerComponent, isStandalone: true, selector: "et-vimeo-player", host: { styleAttribute: "display: block; width: 100%; height: 100%", classAttribute: "et-vimeo-player et-stream-player" }, hostDirectives: [{ directive: VimeoPlayerParamsDirective, inputs: ["videoId", "videoId", "startTime", "startTime", "width", "width", "height", "height"] }, { directive: VimeoPlayerDirective }], ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
61684
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: VimeoPlayerComponent, isStandalone: true, selector: "et-vimeo-player", host: { properties: { "style.display": "\"block\"", "style.width": "\"100%\"", "style.height": "\"100%\"" }, classAttribute: "et-vimeo-player et-stream-player" }, hostDirectives: [{ directive: VimeoPlayerParamsDirective, inputs: ["videoId", "videoId", "startTime", "startTime", "width", "width", "height", "height"] }, { directive: VimeoPlayerDirective }], ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
61670
61685
  }
61671
61686
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: VimeoPlayerComponent, decorators: [{
61672
61687
  type: Component,
@@ -61683,7 +61698,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
61683
61698
  ],
61684
61699
  host: {
61685
61700
  class: 'et-vimeo-player et-stream-player',
61686
- style: 'display: block; width: 100%; height: 100%',
61701
+ '[style.display]': '"block"',
61702
+ '[style.width]': '"100%"',
61703
+ '[style.height]': '"100%"',
61687
61704
  },
61688
61705
  }]
61689
61706
  }] });
@@ -61900,7 +61917,7 @@ class YoutubePlayerComponent {
61900
61917
  this.player = inject(YOUTUBE_PLAYER_TOKEN);
61901
61918
  }
61902
61919
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: YoutubePlayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
61903
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: YoutubePlayerComponent, isStandalone: true, selector: "et-youtube-player", host: { styleAttribute: "display: block; width: 100%; height: 100%", classAttribute: "et-youtube-player et-stream-player" }, hostDirectives: [{ directive: YoutubePlayerParamsDirective, inputs: ["videoId", "videoId", "startTime", "startTime", "width", "width", "height", "height"] }, { directive: YoutubePlayerDirective }], ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
61920
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: YoutubePlayerComponent, isStandalone: true, selector: "et-youtube-player", host: { properties: { "style.display": "\"block\"", "style.width": "\"100%\"", "style.height": "\"100%\"" }, classAttribute: "et-youtube-player et-stream-player" }, hostDirectives: [{ directive: YoutubePlayerParamsDirective, inputs: ["videoId", "videoId", "startTime", "startTime", "width", "width", "height", "height"] }, { directive: YoutubePlayerDirective }], ngImport: i0, template: '', isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
61904
61921
  }
61905
61922
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: YoutubePlayerComponent, decorators: [{
61906
61923
  type: Component,
@@ -61917,7 +61934,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
61917
61934
  ],
61918
61935
  host: {
61919
61936
  class: 'et-youtube-player et-stream-player',
61920
- style: 'display: block; width: 100%; height: 100%',
61937
+ '[style.display]': '"block"',
61938
+ '[style.width]': '"100%"',
61939
+ '[style.height]': '"100%"',
61921
61940
  },
61922
61941
  }]
61923
61942
  }] });
@@ -69121,7 +69140,7 @@ class TabComponent {
69121
69140
  }
69122
69141
  }
69123
69142
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: TabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
69124
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.6", type: TabComponent, isStandalone: true, selector: "et-tab", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { styleAttribute: "display: none", classAttribute: "et-tab" }, queries: [{ propertyName: "customLabel", first: true, predicate: TabLabelDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "implicitLabelRef", first: true, predicate: ["implicitLabel"], descendants: true, isSignal: true }, { propertyName: "contentRef", first: true, predicate: ["contentTpl"], descendants: true, isSignal: true }], ngImport: i0, template: `
69143
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.6", type: TabComponent, isStandalone: true, selector: "et-tab", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.display": "\"none\"" }, classAttribute: "et-tab" }, queries: [{ propertyName: "customLabel", first: true, predicate: TabLabelDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "implicitLabelRef", first: true, predicate: ["implicitLabel"], descendants: true, isSignal: true }, { propertyName: "contentRef", first: true, predicate: ["contentTpl"], descendants: true, isSignal: true }], ngImport: i0, template: `
69125
69144
  <ng-template #implicitLabel>{{ label() }}</ng-template>
69126
69145
  <ng-template #contentTpl>
69127
69146
  <ng-content />
@@ -69141,7 +69160,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
69141
69160
  encapsulation: ViewEncapsulation.None,
69142
69161
  host: {
69143
69162
  class: 'et-tab',
69144
- style: 'display: none',
69163
+ '[style.display]': '"none"',
69145
69164
  },
69146
69165
  }]
69147
69166
  }], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], customLabel: [{ type: i0.ContentChild, args: [i0.forwardRef(() => TabLabelDirective), { isSignal: true }] }], implicitLabelRef: [{ type: i0.ViewChild, args: ['implicitLabel', { isSignal: true }] }], contentRef: [{ type: i0.ViewChild, args: ['contentTpl', { isSignal: true }] }] } });
@@ -70238,7 +70257,7 @@ const TREE_IMPORTS = [TreeComponent, TreeDirective, TreeNodeDirective, TreeNodeD
70238
70257
 
70239
70258
  // Generated from package.json by tools/scripts/generate-version.js - do not edit.
70240
70259
  /** The version of `@ethlete/components` this build was cut from. */
70241
- const COMPONENTS_VERSION = '1.0.0-next.61';
70260
+ const COMPONENTS_VERSION = '1.0.0-next.62';
70242
70261
 
70243
70262
  /**
70244
70263
  * Generated bundle index. Do not edit.