@agorapulse/ui-components 22.3.0 → 22.4.1

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.
Files changed (29) hide show
  1. package/agorapulse-ui-components-22.4.1.tgz +0 -0
  2. package/fesm2022/agorapulse-ui-components-avatar-group.mjs +20 -33
  3. package/fesm2022/agorapulse-ui-components-avatar-group.mjs.map +1 -1
  4. package/fesm2022/agorapulse-ui-components-datepicker.mjs +1 -1
  5. package/fesm2022/agorapulse-ui-components-datepicker.mjs.map +1 -1
  6. package/fesm2022/agorapulse-ui-components-directives.mjs +79 -15
  7. package/fesm2022/agorapulse-ui-components-directives.mjs.map +1 -1
  8. package/fesm2022/agorapulse-ui-components-labels.mjs +3 -108
  9. package/fesm2022/agorapulse-ui-components-labels.mjs.map +1 -1
  10. package/fesm2022/agorapulse-ui-components-overflow-base.mjs +193 -0
  11. package/fesm2022/agorapulse-ui-components-overflow-base.mjs.map +1 -0
  12. package/fesm2022/agorapulse-ui-components-overflow-list.mjs +89 -0
  13. package/fesm2022/agorapulse-ui-components-overflow-list.mjs.map +1 -0
  14. package/fesm2022/agorapulse-ui-components-select.mjs +14 -12
  15. package/fesm2022/agorapulse-ui-components-select.mjs.map +1 -1
  16. package/fesm2022/agorapulse-ui-components-tooltip.mjs +9 -5
  17. package/fesm2022/agorapulse-ui-components-tooltip.mjs.map +1 -1
  18. package/fesm2022/agorapulse-ui-components.mjs +9 -7
  19. package/fesm2022/agorapulse-ui-components.mjs.map +1 -1
  20. package/package.json +10 -2
  21. package/types/agorapulse-ui-components-avatar-group.d.ts +12 -5
  22. package/types/agorapulse-ui-components-directives.d.ts +19 -4
  23. package/types/agorapulse-ui-components-labels.d.ts +2 -35
  24. package/types/agorapulse-ui-components-overflow-base.d.ts +124 -0
  25. package/types/agorapulse-ui-components-overflow-list.d.ts +80 -0
  26. package/types/agorapulse-ui-components-select.d.ts +8 -11
  27. package/types/agorapulse-ui-components-tooltip.d.ts +3 -3
  28. package/types/agorapulse-ui-components.d.ts +12 -10
  29. package/agorapulse-ui-components-22.3.0.tgz +0 -0
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { HostListener, Directive, inject, ElementRef, ChangeDetectorRef, Renderer2, signal, effect, booleanAttribute, Input, input, output, isDevMode, EventEmitter, Output, forwardRef, Attribute, InjectionToken, numberAttribute, contentChildren, contentChild, afterRenderEffect, untracked } from '@angular/core';
2
+ import { HostListener, Directive, inject, ElementRef, ChangeDetectorRef, Renderer2, signal, effect, booleanAttribute, Input, input, output, isDevMode, EventEmitter, Output, forwardRef, Attribute, InjectionToken, numberAttribute, contentChildren, contentChild, afterRenderEffect, untracked, DestroyRef } from '@angular/core';
3
3
  import { NG_VALIDATORS } from '@angular/forms';
4
4
  import DOMPurify from 'dompurify';
5
5
  import { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';
@@ -893,7 +893,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
893
893
  * Put it on the container, mark the items with `apOverflowItem` and the badge with
894
894
  * `apOverflowCounter`; read `hiddenCount()` to render the badge and to derive the hidden data.
895
895
  * The container is measured, so it must be the box that actually bounds the row — give it
896
- * `overflow: hidden` and keep the items from shrinking.
896
+ * `overflow: hidden` and keep the items from shrinking. When `minVisible` keeps an item the row is
897
+ * too narrow for, that last item gets a `max-width` so the badge stays inside: let it truncate.
897
898
  *
898
899
  * Specs that mock a consumer's dependencies have to keep this directive — ng-mocks stubs inputs
899
900
  * and outputs, not plain signal members, so a mocked `hiddenCount` is not callable:
@@ -924,6 +925,13 @@ class OverflowCountDirective {
924
925
  counterFallbackWidth = input(24, { ...(ngDevMode ? { debugName: "counterFallbackWidth" } : /* istanbul ignore next */ {}), transform: numberAttribute });
925
926
  /** Items kept visible whatever the width. A lone "+N" reads as an empty row, hence the default. */
926
927
  minVisible = input(1, { ...(ngDevMode ? { debugName: "minVisible" } : /* istanbul ignore next */ {}), transform: numberAttribute });
928
+ /** Most items laid out whatever the width, for a group capped by design ("2 avatars at most"). */
929
+ max = input(undefined, { ...(ngDevMode ? { debugName: "max" } : /* istanbul ignore next */ {}), transform: (value) => (value == null ? undefined : numberAttribute(value)) });
930
+ /**
931
+ * Set to false to lay every item out and hide none, for a row unfolded or wrapping on purpose. The
932
+ * counts still say what a collapse would hide, so an unfolded row knows when folding it hides nothing.
933
+ */
934
+ collapse = input(true, { ...(ngDevMode ? { debugName: "collapse" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
927
935
  items = contentChildren(OverflowItemDirective, { ...(ngDevMode ? { debugName: "items" } : /* istanbul ignore next */ {}), descendants: true });
928
936
  counter = contentChild(OverflowCounterDirective, /* @ts-ignore */
929
937
  ...(ngDevMode ? [{ debugName: "counter" }] : /* istanbul ignore next */ []));
@@ -931,9 +939,12 @@ class OverflowCountDirective {
931
939
  ...(ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []));
932
940
  hidden = signal(0, /* @ts-ignore */
933
941
  ...(ngDevMode ? [{ debugName: "hidden" }] : /* istanbul ignore next */ []));
934
- /** How many items are currently laid out. */
942
+ // An item can change width while the container does not: a web font landing, a label re-rendered.
943
+ itemObserver = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(() => this.scheduleRecompute());
944
+ pendingFrame;
945
+ /** How many items fit on the line: the ones laid out, unless `collapse` is false. */
935
946
  visibleCount = this.visible.asReadonly();
936
- /** How many items are collapsed — the number the "+N" badge shows. */
947
+ /** How many items do not fit — the number the "+N" badge shows. With `collapse` false they stay laid out. */
937
948
  hiddenCount = this.hidden.asReadonly();
938
949
  constructor() {
939
950
  // ngxtension pipes its whole stream — the ResizeObserver callback included, despite the name —
@@ -950,10 +961,23 @@ class OverflowCountDirective {
950
961
  .pipe(takeUntilDestroyed())
951
962
  .subscribe(() => this.recompute());
952
963
  // The item set is the other trigger, and that one does have to wait for the render: the new
953
- // items have to exist before they can be measured.
964
+ // items have to exist before they can be measured. The badge too: the first pass reserved its
965
+ // fallback width, and its real one is only known once it is in the DOM.
954
966
  afterRenderEffect(() => {
955
- this.items();
956
- untracked(() => this.recompute());
967
+ const items = this.items();
968
+ const counter = this.counter();
969
+ this.collapse();
970
+ this.max();
971
+ untracked(() => {
972
+ this.observe([...items.map(item => item.elementRef.nativeElement), ...(counter ? [counter.elementRef.nativeElement] : [])]);
973
+ this.recompute();
974
+ });
975
+ });
976
+ inject(DestroyRef).onDestroy(() => {
977
+ this.itemObserver?.disconnect();
978
+ if (this.pendingFrame !== undefined) {
979
+ cancelAnimationFrame(this.pendingFrame);
980
+ }
957
981
  });
958
982
  }
959
983
  /** Measures the row and collapses its overflow. Public so a consumer resizing the container itself can force a pass. */
@@ -962,16 +986,25 @@ class OverflowCountDirective {
962
986
  // Undo the previous collapse first, so what follows measures natural widths. Before the early
963
987
  // return too: a pass that cannot measure would otherwise leave items out of the flow while
964
988
  // reporting nothing hidden — a blank row, badge included.
965
- items.forEach(item => (item.style.display = ''));
989
+ items.forEach(item => {
990
+ item.style.display = '';
991
+ item.style.maxWidth = '';
992
+ });
993
+ const collapse = this.collapse();
994
+ // The cap needs no measurement, so it holds even in a container that cannot be measured.
995
+ const cap = Math.min(items.length, this.max() ?? items.length);
966
996
  const containerWidth = this.elementRef.nativeElement.clientWidth;
967
997
  if (!items.length || containerWidth === 0) {
968
- this.setCounts(items.length, 0);
998
+ if (collapse) {
999
+ items.forEach((item, index) => (item.style.display = index < cap ? '' : 'none'));
1000
+ }
1001
+ this.setCounts(cap, items.length - cap);
969
1002
  return;
970
1003
  }
971
1004
  const gap = this.resolvedGap();
972
1005
  const widths = items.map(item => item.offsetWidth);
973
1006
  const total = widths.reduce((sum, width) => sum + width, 0) + gap * (items.length - 1);
974
- if (total <= containerWidth) {
1007
+ if (cap === items.length && total <= containerWidth) {
975
1008
  this.setCounts(items.length, 0);
976
1009
  return;
977
1010
  }
@@ -979,7 +1012,7 @@ class OverflowCountDirective {
979
1012
  const available = containerWidth - gap - this.counterWidth();
980
1013
  let used = 0;
981
1014
  let visible = 0;
982
- for (let index = 0; index < items.length; index++) {
1015
+ for (let index = 0; index < cap; index++) {
983
1016
  const width = widths[index] + (index > 0 ? gap : 0);
984
1017
  if (used + width > available) {
985
1018
  break;
@@ -987,10 +1020,41 @@ class OverflowCountDirective {
987
1020
  used += width;
988
1021
  visible++;
989
1022
  }
990
- visible = Math.min(items.length, Math.max(this.minVisible(), visible));
991
- items.forEach((item, index) => (item.style.display = index < visible ? '' : 'none'));
1023
+ visible = Math.min(cap, Math.max(this.minVisible(), visible));
1024
+ if (collapse) {
1025
+ items.forEach((item, index) => (item.style.display = index < visible ? '' : 'none'));
1026
+ this.narrowLastVisible(items, widths, visible, visible < items.length ? available : containerWidth, gap);
1027
+ }
992
1028
  this.setCounts(visible, items.length - visible);
993
1029
  }
1030
+ /** Fits the last item `minVisible` forced into a row too narrow for it, so the badge is not pushed out. */
1031
+ narrowLastVisible(items, widths, visible, limit, gap) {
1032
+ if (visible === 0) {
1033
+ return;
1034
+ }
1035
+ const last = visible - 1;
1036
+ const start = widths.slice(0, last).reduce((sum, width) => sum + width + gap, 0);
1037
+ if (start + widths[last] > limit) {
1038
+ items[last].style.maxWidth = `${Math.max(0, limit - start)}px`;
1039
+ }
1040
+ }
1041
+ observe(elements) {
1042
+ if (!this.itemObserver) {
1043
+ return;
1044
+ }
1045
+ this.itemObserver.disconnect();
1046
+ elements.forEach(element => this.itemObserver?.observe(element));
1047
+ }
1048
+ /** A frame later, not in the callback: a pass toggles the observed items, which inside it raises "ResizeObserver loop completed with undelivered notifications". */
1049
+ scheduleRecompute() {
1050
+ if (this.pendingFrame !== undefined) {
1051
+ return;
1052
+ }
1053
+ this.pendingFrame = requestAnimationFrame(() => {
1054
+ this.pendingFrame = undefined;
1055
+ this.recompute();
1056
+ });
1057
+ }
994
1058
  /** Guarded: these signals are written from a render effect, so an unchanged pass must be inert. */
995
1059
  setCounts(visible, hidden) {
996
1060
  if (this.visible() !== visible) {
@@ -1013,7 +1077,7 @@ class OverflowCountDirective {
1013
1077
  return this.counter()?.elementRef.nativeElement.offsetWidth || this.counterFallbackWidth();
1014
1078
  }
1015
1079
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: OverflowCountDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1016
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "22.0.5", type: OverflowCountDirective, isStandalone: true, selector: "[apOverflowCount]", inputs: { gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, counterFallbackWidth: { classPropertyName: "counterFallbackWidth", publicName: "counterFallbackWidth", isSignal: true, isRequired: false, transformFunction: null }, minVisible: { classPropertyName: "minVisible", publicName: "minVisible", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "items", predicate: OverflowItemDirective, descendants: true, isSignal: true }, { propertyName: "counter", first: true, predicate: OverflowCounterDirective, descendants: true, isSignal: true }], exportAs: ["apOverflowCount"], hostDirectives: [{ directive: i1.NgxResize }], ngImport: i0 });
1080
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "22.0.5", type: OverflowCountDirective, isStandalone: true, selector: "[apOverflowCount]", inputs: { gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, counterFallbackWidth: { classPropertyName: "counterFallbackWidth", publicName: "counterFallbackWidth", isSignal: true, isRequired: false, transformFunction: null }, minVisible: { classPropertyName: "minVisible", publicName: "minVisible", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, collapse: { classPropertyName: "collapse", publicName: "collapse", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "items", predicate: OverflowItemDirective, descendants: true, isSignal: true }, { propertyName: "counter", first: true, predicate: OverflowCounterDirective, descendants: true, isSignal: true }], exportAs: ["apOverflowCount"], hostDirectives: [{ directive: i1.NgxResize }], ngImport: i0 });
1017
1081
  }
1018
1082
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: OverflowCountDirective, decorators: [{
1019
1083
  type: Directive,
@@ -1022,7 +1086,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
1022
1086
  exportAs: 'apOverflowCount',
1023
1087
  hostDirectives: [NgxResize],
1024
1088
  }]
1025
- }], ctorParameters: () => [], propDecorators: { gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], counterFallbackWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "counterFallbackWidth", required: false }] }], minVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "minVisible", required: false }] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => OverflowItemDirective), { ...{ descendants: true }, isSignal: true }] }], counter: [{ type: i0.ContentChild, args: [i0.forwardRef(() => OverflowCounterDirective), { isSignal: true }] }] } });
1089
+ }], ctorParameters: () => [], propDecorators: { gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], counterFallbackWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "counterFallbackWidth", required: false }] }], minVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "minVisible", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], collapse: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapse", required: false }] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => OverflowItemDirective), { ...{ descendants: true }, isSignal: true }] }], counter: [{ type: i0.ContentChild, args: [i0.forwardRef(() => OverflowCounterDirective), { isSignal: true }] }] } });
1026
1090
 
1027
1091
  /**
1028
1092
  * Stops a click from reaching the ancestors, without altering the host semantics.
@@ -1 +1 @@
1
- {"version":3,"file":"agorapulse-ui-components-directives.mjs","sources":["../../../libs/ui-components/directives/src/autosize-textarea.directive.ts","../../../libs/ui-components/directives/src/base-button.directive.ts","../../../libs/ui-components/directives/src/checkbox.directive.ts","../../../libs/ui-components/directives/src/click.directive.ts","../../../libs/ui-components/directives/src/default-image.directive.ts","../../../libs/ui-components/directives/src/ellipsis.directive.ts","../../../libs/ui-components/directives/src/equal-validator.directive.ts","../../../libs/ui-components/directives/src/frozen-gif.directive.ts","../../../libs/ui-components/directives/src/interactive-element.ts","../../../libs/ui-components/directives/src/multi-style-text.directive.ts","../../../libs/ui-components/directives/src/overflow-count.directive.ts","../../../libs/ui-components/directives/src/stop-propagation.directive.ts","../../../libs/ui-components/directives/src/table-column-drag.directive.ts","../../../libs/ui-components/directives/src/agorapulse-ui-components-directives.ts"],"sourcesContent":["import { AfterContentChecked, Directive, ElementRef, HostListener } from '@angular/core';\n\n@Directive({\n selector: 'textarea[apAutosize]',\n standalone: true,\n})\n/**\n * expand textarea to fit content. Doesn't shrink.\n */\nexport class AutosizeTextareaDirective implements AfterContentChecked {\n static maxHeight: number = 200;\n\n constructor(public element: ElementRef) {}\n\n @HostListener('input')\n public onInput() {\n this.resize();\n }\n\n public ngAfterContentChecked() {\n this.resize();\n }\n\n public resize() {\n const style = this.element.nativeElement.style;\n const scrollHeight = this.element.nativeElement.scrollHeight;\n const actualHeight = this.element.nativeElement.offsetHeight;\n if (AutosizeTextareaDirective.maxHeight < scrollHeight) {\n // we arrived at the max\n style.overflow = 'auto';\n style.height = `${AutosizeTextareaDirective.maxHeight}px`;\n } else if (actualHeight < scrollHeight) {\n style.overflow = 'hidden';\n style.height = `${scrollHeight}px`;\n }\n }\n}\n","import { AfterViewInit, ChangeDetectorRef, Directive, ElementRef, inject, OnInit } from '@angular/core';\n\n@Directive({\n selector: '[apBaseButton]',\n standalone: true,\n})\nexport class BaseButtonDirective implements AfterViewInit, OnInit {\n hostId: string | undefined = undefined;\n hostDataTest: string | undefined = undefined;\n hostType: string = 'button';\n\n private elementRef: ElementRef = inject(ElementRef);\n private changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n ngOnInit() {\n this.hostDataTest = this.elementRef.nativeElement.getAttribute('data-test');\n this.hostId = this.elementRef.nativeElement.getAttribute('id');\n this.elementRef.nativeElement.removeAttribute('data-test');\n this.elementRef.nativeElement.removeAttribute('id');\n }\n\n // Sometimes attributes like the id, or the data-test are dynamic and can change between the constructor and the initialization.\n // In order to have the last attributes value we check if it changes, and if it does, we run a mark for check to update the view.\n ngAfterViewInit(): void {\n const hostDataTest = this.elementRef.nativeElement.getAttribute('data-test');\n const hostId = this.elementRef.nativeElement.getAttribute('id');\n const hostType = this.elementRef.nativeElement.getAttribute('type');\n if (hostDataTest && this.hostDataTest !== hostDataTest) {\n this.hostDataTest = hostDataTest;\n this.elementRef.nativeElement.removeAttribute('data-test');\n this.changeDetectorRef.markForCheck();\n }\n if (hostId && this.hostId !== hostId) {\n this.hostId = hostId;\n this.elementRef.nativeElement.removeAttribute('id');\n this.changeDetectorRef.markForCheck();\n }\n if (hostType && this.hostType !== hostType) {\n this.hostType = hostType;\n this.elementRef.nativeElement.removeAttribute('type');\n this.changeDetectorRef.markForCheck();\n }\n }\n}\n","import {\n booleanAttribute,\n Directive,\n effect,\n ElementRef,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n signal\n} from '@angular/core';\n\n@Directive({\n selector: 'input[type=\"checkbox\"][apCheckbox]',\n standalone: true,\n providers: [],\n})\nexport class CheckboxDirective implements OnInit, OnDestroy {\n private readonly elementRef = inject(ElementRef<HTMLInputElement>);\n private readonly renderer = inject(Renderer2);\n\n // State signals\n private _checked = signal(false);\n private _indeterminate = signal(false);\n\n // Input signal accessors that work with host bindings\n checked = this._checked.asReadonly();\n indeterminate = this._indeterminate.asReadonly();\n\n // Input setters with proper aliases for template binding\n // Couldn't be migrated to yet\n @Input('checked')\n set checkedInput(checked: boolean) {\n this._checked.set(checked);\n this.updateNativeElementSync();\n }\n\n @Input({\n transform: booleanAttribute,\n alias: 'indeterminate',\n })\n set indeterminateInput(indeterminate: boolean) {\n if (indeterminate) {\n this._checked.set(false);\n }\n this._indeterminate.set(indeterminate);\n this.updateNativeElementSync();\n }\n\n private updateNativeElementSync(): void {\n const input = this.elementRef.nativeElement;\n if (input) {\n input.checked = this.checked();\n input.indeterminate = this.indeterminate();\n }\n }\n\n // Private properties\n private listeners: (() => void)[] = [];\n private styleElement!: HTMLStyleElement;\n private checkmarkSvg!: SVGElement;\n private indeterminateBar!: HTMLElement;\n\n constructor() {\n effect(() => {\n if (this.checkmarkSvg && this.indeterminateBar) {\n this.updateCheckmarkVisibility();\n }\n });\n }\n\n // Custom SVG content\n private readonly checkSvgContent = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"10\" height=\"10\" fill=\"white\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14.238 3.337a.92.92 0 0 1 .025 1.301l-7.7 8a.92.92 0 0 1-1.326 0l-3.5-3.636a.92.92 0 1 1 1.326-1.276L5.9 10.674l7.037-7.312a.92.92 0 0 1 1.301-.025Z\" />\n </svg>\n `;\n\n ngOnInit() {\n this.createCheckboxStructure();\n this.setupEventListeners();\n }\n\n ngOnDestroy(): void {\n this.listeners.forEach(unlisten => unlisten());\n if (this.styleElement && this.styleElement.parentNode) {\n this.styleElement.parentNode.removeChild(this.styleElement);\n }\n if (this.checkmarkSvg && this.checkmarkSvg.parentNode) {\n this.checkmarkSvg.parentNode.removeChild(this.checkmarkSvg);\n }\n if (this.indeterminateBar && this.indeterminateBar.parentNode) {\n this.indeterminateBar.parentNode.removeChild(this.indeterminateBar);\n }\n }\n\n private createCheckboxStructure(): void {\n const input = this.elementRef.nativeElement;\n const parent = input.parentElement;\n\n // Make input's parent use inline-flex for alignment and position relative\n if (parent) {\n this.renderer.setStyle(parent, 'display', 'inline-flex');\n this.renderer.setStyle(parent, 'align-items', 'center');\n this.renderer.setStyle(parent, 'gap', 'var(--ref-spacing-xxs)');\n this.renderer.setStyle(parent, 'position', 'relative');\n }\n\n this.renderer.addClass(input, 'ap-checkbox-styled');\n\n this.createCheckmarkSvg();\n this.createIndeterminateBar();\n\n this.applyCheckboxStyles();\n\n this.updateCheckmarkVisibility();\n }\n\n private createOverlayElement(element: HTMLElement | SVGElement): void {\n const parent = this.elementRef.nativeElement.parentElement;\n\n // Apply common positioning styles\n this.renderer.setStyle(element, 'position', 'absolute');\n this.renderer.setStyle(element, 'top', '50%');\n this.renderer.setStyle(element, 'left', '8px'); // Center over 16px checkbox\n this.renderer.setStyle(element, 'transform', 'translate(-50%, -50%)');\n this.renderer.setStyle(element, 'pointer-events', 'none');\n this.renderer.setStyle(element, 'opacity', '0');\n this.renderer.setStyle(element, 'z-index', '1');\n\n // Append to parent\n this.renderer.appendChild(parent, element);\n }\n\n private createCheckmarkSvg(): void {\n // Create SVG element from string\n const tempDiv = this.renderer.createElement('div');\n this.renderer.setProperty(tempDiv, 'innerHTML', this.checkSvgContent);\n this.checkmarkSvg = tempDiv.firstElementChild as SVGElement;\n\n this.createOverlayElement(this.checkmarkSvg);\n }\n\n private createIndeterminateBar(): void {\n // Create the indeterminate bar element\n this.indeterminateBar = this.renderer.createElement('span');\n this.renderer.setStyle(this.indeterminateBar, 'height', '1.5px');\n this.renderer.setStyle(this.indeterminateBar, 'background', 'var(--ref-color-white)');\n this.renderer.setStyle(this.indeterminateBar, 'width', '8px');\n\n this.createOverlayElement(this.indeterminateBar);\n }\n\n private updateCheckmarkVisibility(): void {\n if (this.checkmarkSvg) {\n const opacity = this.checked() && !this.indeterminate() ? '1' : '0';\n this.renderer.setStyle(this.checkmarkSvg, 'opacity', opacity);\n }\n if (this.indeterminateBar) {\n const opacity = this.indeterminate() && !this.checked() ? '1' : '0';\n this.renderer.setStyle(this.indeterminateBar, 'opacity', opacity);\n }\n }\n\n private setupEventListeners(): void {\n const input = this.elementRef.nativeElement;\n\n // Input change listener (native checkbox change)\n const changeListener = this.renderer.listen(input, 'change', () => {\n this.onValueChange();\n });\n this.listeners.push(changeListener);\n\n // Listen for label clicks to ensure focus is maintained\n const parent = input.parentElement;\n if (parent) {\n const labelClickListener = this.renderer.listen(parent, 'click', (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n // If clicking on a label that targets our input, ensure focus\n if (target.tagName === 'LABEL' && target.getAttribute('for') === input.id) {\n // Small delay to ensure the label click is processed first\n setTimeout(() => {\n input.focus();\n }, 0);\n }\n });\n this.listeners.push(labelClickListener);\n }\n }\n\n private applyCheckboxStyles(): void {\n const styles = `\n /* Minimal checkbox styling */\n input[type=\"checkbox\"].ap-checkbox-styled {\n appearance: none !important;\n -webkit-appearance: none !important;\n -moz-appearance: none !important;\n \n display: inline-block !important;\n width: 16px !important;\n height: 16px !important;\n min-width: 16px !important;\n min-height: 16px !important;\n margin: 0 !important;\n padding: 0 !important;\n border: 1px solid var(--ref-color-grey-60);\n border-radius: var(--sys-border-radius-sm);\n background: var(--ref-color-white);\n box-sizing: border-box;\n cursor: pointer;\n vertical-align: middle;\n }\n \n /* Hover state */\n input[type=\"checkbox\"].ap-checkbox-styled:hover {\n border-color: var(--ref-color-grey-80);\n }\n \n /* Active/pressed state */\n input[type=\"checkbox\"].ap-checkbox-styled:active {\n border-color: var(--ref-color-grey-100);\n }\n \n /* Checked state */\n input[type=\"checkbox\"].ap-checkbox-styled:checked {\n background: var(--ref-color-electric-blue-100);\n border-color: var(--ref-color-electric-blue-100);\n }\n \n /* Checked hover state */\n input[type=\"checkbox\"].ap-checkbox-styled:checked:hover {\n background: var(--ref-color-electric-blue-80);\n border-color: var(--ref-color-electric-blue-100);\n }\n \n /* Checked active/pressed state */\n input[type=\"checkbox\"].ap-checkbox-styled:checked:active {\n background: var(--ref-color-electric-blue-60);\n border-color: var(--ref-color-electric-blue-100);\n }\n \n /* Indeterminate state */\n input[type=\"checkbox\"].ap-checkbox-styled:indeterminate {\n background: var(--ref-color-electric-blue-100);\n border-color: var(--ref-color-electric-blue-100);\n }\n \n /* Disabled state */\n input[type=\"checkbox\"].ap-checkbox-styled:disabled {\n border-color: var(--ref-color-grey-20);\n background: var(--ref-color-grey-10);\n cursor: default;\n }\n \n input[type=\"checkbox\"].ap-checkbox-styled:disabled:checked {\n background: var(--ref-color-grey-20);\n }\n \n /* Focus state */\n @media (hover: hover) {\n input[type=\"checkbox\"].ap-checkbox-styled:focus:not(.disabled) {\n outline: 3px solid var(--ref-color-electric-blue-100) !important;\n outline-offset: 1px !important;\n }\n }\n \n /* Label styling */\n input[type=\"checkbox\"].ap-checkbox-styled + label {\n display: flex;\n align-items: center;\n font-family: var(--comp-forms-label-font-family);\n font-size: var(--comp-forms-label-size);\n font-weight: var(--comp-forms-label-font-weight);\n line-height: var(--comp-forms-label-line-height);\n color: var(--comp-forms-label-text-color);\n cursor: pointer;\n }\n \n /* Empty label styling */\n input[type=\"checkbox\"].ap-checkbox-styled + label:empty {\n display: none;\n }\n \n /* Disabled label styling */\n input[type=\"checkbox\"].ap-checkbox-styled:disabled + label {\n color: var(--ref-color-grey-60);\n cursor: default;\n }\n `;\n\n // Create and append style element\n this.styleElement = this.renderer.createElement('style');\n this.renderer.appendChild(this.styleElement, this.renderer.createText(styles));\n this.renderer.appendChild(document.head, this.styleElement);\n }\n\n private onValueChange(): void {\n if (!this.elementRef.nativeElement.disabled) {\n const input = this.elementRef.nativeElement;\n\n if (this.indeterminate()) {\n // When indeterminate, clicking should go to checked state\n this._checked.set(true);\n this._indeterminate.set(false);\n input.checked = true;\n input.indeterminate = false;\n } else {\n // Normal toggle behavior\n this._checked.set(input.checked);\n }\n }\n }\n}\n","import { booleanAttribute, Directive, ElementRef, inject, input, isDevMode, output } from '@angular/core';\n\nconst NATIVELY_ACTIVATED_TAGS = new Set(['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA', 'SUMMARY']);\n\n/** Host tags already reported as redundant, so a 500-row list logs one line instead of 500. */\nconst warnedTags = new Set<string>();\n\n/**\n * Turns a non-interactive element into a control: it receives an ARIA role, enters the\n * tab order and activates with the keyboard, through the `(apClick)` binding alone.\n *\n * Prefer a real `<button>` whenever the layout allows one. Reach for this directive when\n * the element cannot be a button — a table row, a card, a styled anchor with no href.\n *\n * @example\n * ```html\n * <div (apClick)=\"openPost()\">…</div>\n * <span (apClick)=\"openDocs()\" apClickRole=\"link\">…</span>\n * <tr (apClick)=\"openRow()\" [apClickDisabled]=\"editing()\">…</tr>\n * ```\n */\n@Directive({\n selector: '[apClick]',\n standalone: true,\n host: {\n '[attr.role]': 'isInteractive() ? apClickRole() : null',\n '[attr.tabindex]': 'isInteractive() ? 0 : null',\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class ClickDirective {\n /** Turns the host back into a plain element: no role, no tab stop, no activation at all. */\n apClickDisabled = input(false, { transform: booleanAttribute });\n\n /** ARIA role applied while the host is interactive. */\n apClickRole = input('button');\n\n apClick = output<MouseEvent | KeyboardEvent>();\n\n private host: HTMLElement = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n constructor() {\n if (isDevMode() && this.isNativelyActivated()) {\n this.warnRedundant();\n }\n }\n\n protected isInteractive(): boolean {\n return !this.apClickDisabled() && !this.isNativelyActivated();\n }\n\n /** The two checks are independent, so an anchor without `href` still gets its contenteditable read. */\n private isNativelyActivated(): boolean {\n if (NATIVELY_ACTIVATED_TAGS.has(this.host.tagName)) {\n return true;\n }\n\n return this.isNativeAnchor() || this.isContentEditable();\n }\n\n /**\n * `routerLink` counts as an `href`, and is read as a written attribute so the answer does not\n * depend on whether this directive's host bindings run before RouterLink's. A bound\n * `[routerLink]` leaves no attribute, so such an anchor stays plain until RouterLink writes one.\n */\n private isNativeAnchor(): boolean {\n const isAnchor = this.host.tagName === 'A' || this.host.tagName === 'AREA';\n\n return isAnchor && (this.host.hasAttribute('href') || this.host.hasAttribute('routerLink'));\n }\n\n /** `contenteditable=\"false\"` is explicitly opted out, so only a present, non-\"false\" value counts. */\n private isContentEditable(): boolean {\n return this.host.hasAttribute('contenteditable') && this.host.getAttribute('contenteditable') !== 'false';\n }\n\n private warnRedundant(): void {\n const tag = this.host.tagName.toLowerCase();\n if (warnedTags.has(tag)) {\n return;\n }\n\n warnedTags.add(tag);\n console.warn(`apClick is redundant on <${tag}>: the browser already activates it with the keyboard.`);\n }\n\n protected onClick(event: MouseEvent): void {\n // Not isInteractive(): a natively interactive host must keep emitting, or its existing\n // (apClick) binding would silently stop working.\n if (this.apClickDisabled()) {\n return;\n }\n\n this.apClick.emit(event);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n // A key pressed inside a focusable child must not activate the host.\n if (!this.isInteractive() || event.target !== this.host) {\n return;\n }\n\n if (!this.activationKeys().includes(event.key)) {\n return;\n }\n\n // Before the repeat guard: every repeat must be cancelled, or the page scrolls under a held Space.\n if (event.key === ' ') {\n event.preventDefault();\n }\n\n // A native button activates once per press, however long the key is held.\n if (event.repeat) {\n return;\n }\n\n this.apClick.emit(event);\n }\n\n /** A link activates on Enter only; every other role also answers Space. */\n private activationKeys(): readonly string[] {\n return this.apClickRole() === 'link' ? ['Enter'] : ['Enter', ' '];\n }\n}\n","import { Directive, Input } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'img[default]',\n standalone: true,\n host: {\n '(error)': 'updateUrl()',\n '[src]': 'src',\n },\n})\nexport class DefaultImageDirective {\n @Input({\n required: true,\n })\n src = '';\n @Input() default = '';\n\n updateUrl() {\n if (this.default) {\n this.src = this.default;\n } else {\n this.src = 'assets/lib-ui-components/img/default-avatar.png';\n }\n }\n}\n","import { AfterContentChecked, Directive, ElementRef, EventEmitter, Input, Output } from '@angular/core';\n\n/**\n * Removes excess text from element until it fits in elements\n * and appends a ellipsis symbol to end of text. This requires that\n * the elements height be fixed\n *\n * @example\n * ```html\n * <p apEllipsis>Ullamco esse laborum</p>\n * ```\n *\n */\n@Directive({\n selector: '[apEllipsis]',\n standalone: true,\n})\nexport class EllipsisDirective implements AfterContentChecked {\n @Input() apEllipsisSeparator = '';\n @Input() apEllipsisClip = false;\n @Input() apEllipsisIndex = -2;\n @Input() apEllipsisChar = '...';\n @Input() apEllipsisClickable = false;\n\n @Output() apEllipsisRemovedElementsCount = new EventEmitter<number>();\n @Output() apEllipsisRemovedText = new EventEmitter<string>();\n\n private get hasOverflow(): boolean {\n const el: HTMLElement = this.el.nativeElement;\n return el.scrollHeight > el.offsetHeight || el.scrollWidth > el.offsetWidth;\n }\n\n constructor(private el: ElementRef) {}\n\n ngAfterContentChecked() {\n this.clipText();\n }\n\n private clipText(): void {\n const el: HTMLElement = this.el.nativeElement;\n let text = el.innerText;\n let removedText = '';\n if (this.apEllipsisIndex > -1) {\n removedText = text.substring(this.apEllipsisIndex, text.length - 1) + removedText;\n text = text.substring(0, this.apEllipsisIndex);\n el.innerText = `${text}${this.apEllipsisChar}`;\n\n if (this.apEllipsisClickable) {\n el.addEventListener('click', () => {\n el.innerText = `${text}${removedText}`;\n });\n }\n } else {\n while (this.hasOverflow && text.length > 0) {\n removedText = text[text.length - 1] + removedText;\n text = text.substring(0, text.length - 1);\n el.innerText = `${text}${this.apEllipsisChar}`;\n }\n }\n\n if (this.apEllipsisSeparator) {\n const removedElementsCount = removedText\n .split(this.apEllipsisSeparator)\n .filter(element => !!element && element.length > 0).length;\n if (removedElementsCount > 0) {\n this.apEllipsisRemovedElementsCount.emit(removedElementsCount);\n }\n }\n if (removedText && removedText.length > 0) {\n this.apEllipsisRemovedText.emit(removedText);\n }\n }\n}\n","// Based on https://scotch.io/tutorials/how-to-implement-a-custom-validator-directive-confirm-password-in-angular-2\nimport { Attribute, Directive, forwardRef } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[validateEqual][formControlName],[validateEqual][formControl],[validateEqual][ngModel]',\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => EqualValidatorDirective),\n multi: true,\n },\n ],\n standalone: true,\n})\nexport class EqualValidatorDirective implements Validator {\n constructor(\n @Attribute('validateEqual') public validateEqual: string,\n @Attribute('validateEqualReference') public validateEqualReference: string\n ) {}\n\n validate(self: AbstractControl): { [key: string]: any } | null {\n const other = self.root.get(this.validateEqual);\n if (other) {\n if (this.isReference()) {\n if (self.value === other.value) {\n if (other.errors) {\n delete other.errors['validateEqual'];\n if (!Object.keys(other.errors).length) {\n other.setErrors(null);\n }\n } else {\n other.setErrors(null);\n }\n } else {\n other.setErrors({ validateEqual: false });\n }\n } else if (self.value !== other.value) {\n return { validateEqual: false };\n }\n }\n return null;\n }\n\n private isReference(): boolean {\n if (!this.validateEqualReference) {\n return false;\n }\n return this.validateEqualReference === 'true';\n }\n}\n","import { Directive, ElementRef, Input, OnChanges } from '@angular/core';\n\nexport class GifService {\n static isGif(src: string) {\n return src && src.split('?')[0].endsWith('.gif');\n }\n}\n\n/**\n * If the image is a GIF then replace the img element by a canvas containing a frozen gif.\n * Note 1: if the image is displayed under a condition, the condition must be applied on the parent of the image, so the\n * new canvas element will have the same condition.\n * Note 2: the image must not have the properties \"display\" and \"visibility\" in its style. Since they are used to frozen\n * the GIF. You need to apply this properties on the parent element.\n * Note 3: If the GIF is frozen, all the event are propagated to the image. However, all events are dispatched\n * with an Event instance. Ex: click event is not dispatched with a MouseEvent instance.\n */\n\n@Directive({\n selector: 'img[apFrozenGif]',\n host: {\n '[src]': 'src',\n },\n standalone: true,\n})\nexport class FrozenGifDirective implements OnChanges {\n @Input({\n required: true,\n })\n src = '';\n @Input() apFrozen = true;\n // Add all the events that need to be propagated.\n @Input() apGifEvents: string[] = ['click'];\n\n private readonly element!: HTMLImageElement;\n private canvas: HTMLCanvasElement | null = null;\n\n constructor(private elementRef: ElementRef) {\n const element = this.elementRef.nativeElement;\n if (!(element instanceof HTMLImageElement)) {\n return;\n }\n\n this.element = element;\n }\n\n ngOnChanges(changes: any): void {\n let freeze = false;\n if (changes.src) {\n freeze = true;\n }\n if (changes.frozen) {\n if (changes.frozen.currentValue) {\n freeze = true;\n } else {\n this.unfreeze();\n }\n }\n\n if (freeze) {\n this.freeze();\n }\n }\n\n private freeze() {\n if (!GifService.isGif(this.src) || !this.apFrozen) {\n this.unfreeze();\n return;\n }\n\n // hack to avoid displaying the GIF before replacing it by the canvas\n this.element.style.visibility = 'hidden';\n this.element.addEventListener('load', () => this.addCanvas());\n }\n\n private addCanvas() {\n if (this.canvas) {\n this.canvas.remove();\n }\n\n this.canvas = document.createElement('canvas');\n this.canvas.width = this.element.width;\n this.canvas.height = this.element.height;\n this.canvas.getContext('2d')?.drawImage(this.element, 0, 0, this.canvas.width, this.canvas.height);\n for (let i = 0; i < this.element.attributes.length; i++) {\n const attr = this.element.attributes[i];\n if (attr.name === 'id') {\n // avoid two elements with the same id\n this.canvas.setAttribute('id', attr.value + '_frozenGif');\n } else if ((attr.name === 'style' && attr.value.includes('visibility: hidden;')) || attr.value.includes('display: none;')) {\n // remove the added 'visibility: hidden' and 'display: none'\n const styleValue = attr.value;\n this.canvas.setAttribute('style', styleValue.replace('visibility: hidden;', '').replace('display: none;', ''));\n } else if (attr.name !== '\"') {\n // test for invalid attributes\n this.canvas.setAttribute(attr.name, attr.value);\n }\n }\n\n this.addEvents();\n\n this.element.parentNode?.insertBefore(this.canvas, this.element);\n this.element.style.display = 'none';\n }\n\n private addEvents() {\n this.apGifEvents.forEach((eventName: string) => {\n this.canvas?.addEventListener(eventName, (ev: Event) =>\n this.element.dispatchEvent(\n // wm: find a way to dispatch the right event type\n new Event(ev.type, ev)\n )\n );\n });\n }\n\n private unfreeze() {\n if (this.canvas) {\n this.canvas.remove();\n this.canvas = null;\n }\n this.element.style.visibility = 'inherit';\n this.element.style.display = 'inherit';\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * A component that renders the element users and assistive tech actually reach, rather than being it.\n * `<ap-button>` is the case that matters: its host is a plain custom element wrapping a real `<button>`.\n */\nexport interface ApInteractiveElement {\n interactiveElement(): HTMLElement;\n}\n\n/** Provided by such a component so a directive on its host can reach inside without guessing. */\nexport const AP_INTERACTIVE_ELEMENT = new InjectionToken<ApInteractiveElement>('AP_INTERACTIVE_ELEMENT');\n","import { Directive, ElementRef, EventEmitter, Input, Output, Renderer2 } from '@angular/core';\nimport DOMPurify from 'dompurify';\n\nconst DATA_MST = 'data-mst';\n\n/**\n * This directive aims to parse simple string to extract some specific tags and to turn them into SPAN with styling classes attributes and optional event listening.\n * The specific tags must this schema: <ng-container data-mst=\"STYLING-CLASSES\">TEXT</ng-container>.\n * Example: 'Lorem <ng-container data-mst=\"my-style\">ipsum</ng-container> dolor sit amet'.\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[multiStyleText]',\n standalone: true,\n})\nexport class MultiStyleTextDirective {\n @Input() set multiStyleText(fullText: string) {\n // First remove previously added children (on update).\n this.renderer.setProperty(this.elRef.nativeElement, 'innerHTML', '');\n if (!fullText || fullText.length <= 0) {\n return;\n }\n\n this.renderer.setProperty(this.elRef.nativeElement, 'innerHTML', DOMPurify.sanitize(fullText.replace(/ng-container/g, 'span')));\n\n Array.from(this.elRef.nativeElement.children).forEach((childNode: Element) => {\n if (childNode.nodeType == 1 && childNode.tagName.toLowerCase() === 'span') {\n // Node.ELEMENT_NODE\n\n const span: HTMLElement = this.renderer.createElement('span');\n span.innerHTML = childNode.innerHTML;\n this.elRef.nativeElement.replaceChild(span, childNode);\n\n const mstValue = childNode.getAttribute(DATA_MST);\n if (mstValue) {\n const mstContents = mstValue.split(';');\n // Bind click events\n if (mstContents[1]) {\n this.renderer.listen(span, 'click', () => this.partEvent.emit(mstContents[1]));\n }\n // Add classes\n if (mstContents[0] && mstContents[0].length > 0) {\n this.renderer.setAttribute(span, 'class', mstContents[0].replace(',', ' '));\n }\n }\n }\n });\n }\n\n @Output() partEvent = new EventEmitter<string>();\n\n public constructor(\n private elRef: ElementRef<HTMLElement>,\n private renderer: Renderer2\n ) {}\n}\n","import {\n afterRenderEffect,\n contentChild,\n contentChildren,\n Directive,\n ElementRef,\n inject,\n input,\n numberAttribute,\n signal,\n untracked,\n} from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgxResize } from 'ngxtension/resize';\n\n/** Marks an element as one of the items the row may collapse. */\n@Directive({\n selector: '[apOverflowItem]',\n})\nexport class OverflowItemDirective {\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n}\n\n/**\n * Marks the \"+N\" badge so its width can be reserved. Optional, and the first pass never has it:\n * the badge only enters the DOM once `hiddenCount()` is above zero, so `counterFallbackWidth` stands in.\n */\n@Directive({\n selector: '[apOverflowCounter]',\n})\nexport class OverflowCounterDirective {\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n}\n\n/**\n * Lays a row of items out on a single line and collapses whatever overflows into a \"+N\" badge.\n *\n * Put it on the container, mark the items with `apOverflowItem` and the badge with\n * `apOverflowCounter`; read `hiddenCount()` to render the badge and to derive the hidden data.\n * The container is measured, so it must be the box that actually bounds the row — give it\n * `overflow: hidden` and keep the items from shrinking.\n *\n * Specs that mock a consumer's dependencies have to keep this directive — ng-mocks stubs inputs\n * and outputs, not plain signal members, so a mocked `hiddenCount` is not callable:\n * `MockBuilder(MyComponent).keep(OverflowCountDirective)`.\n *\n * @example\n * ```html\n * <div class=\"chips\" apOverflowCount #overflow=\"apOverflowCount\">\n * @for (chip of chips(); track chip.id) {\n * <ap-tag apOverflowItem>{{ chip.label }}</ap-tag>\n * }\n * @if (overflow.hiddenCount() > 0) {\n * <ap-tag apOverflowCounter>+{{ overflow.hiddenCount() }}</ap-tag>\n * }\n * </div>\n * ```\n */\n@Directive({\n selector: '[apOverflowCount]',\n exportAs: 'apOverflowCount',\n hostDirectives: [NgxResize],\n})\nexport class OverflowCountDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly ngxResize = inject(NgxResize);\n\n /**\n * Space between two items, in pixels. Read from the container's computed `column-gap` when left\n * undefined, which is what a flex or grid row already declares — pass it only when the gap comes\n * from somewhere the container doesn't express, such as item margins.\n */\n readonly gap = input<number | undefined>(undefined, { transform: (value: unknown) => (value == null ? undefined : numberAttribute(value)) });\n /** Width to reserve for the \"+N\" badge while it is not in the DOM to be measured. */\n readonly counterFallbackWidth = input(24, { transform: numberAttribute });\n /** Items kept visible whatever the width. A lone \"+N\" reads as an empty row, hence the default. */\n readonly minVisible = input(1, { transform: numberAttribute });\n\n private readonly items = contentChildren(OverflowItemDirective, { descendants: true });\n private readonly counter = contentChild(OverflowCounterDirective);\n\n private readonly visible = signal(0);\n private readonly hidden = signal(0);\n\n /** How many items are currently laid out. */\n readonly visibleCount = this.visible.asReadonly();\n /** How many items are collapsed — the number the \"+N\" badge shows. */\n readonly hiddenCount = this.hidden.asReadonly();\n\n constructor() {\n // ngxtension pipes its whole stream — the ResizeObserver callback included, despite the name —\n // through `debounceTime(debounce.scroll ?? 0)`, and `scroll` defaults to 50. That debounce is\n // trailing, so while a drag keeps firing events nothing comes through at all and the count\n // only catches up once the pointer stops. Zero on both, and the row follows the drag.\n //\n // A consumer whose row is expensive enough to want a debounce can still put one back through\n // ngxtension's own `provideResizeOptions`, which NgxResize merges over this.\n this.ngxResize.ngxResizeOptions = { debounce: { scroll: 0, resize: 0 } };\n\n // Straight off the observer, not through a signal and a render pass: ResizeObserver already\n // fires after layout, so the widths are there to be read.\n outputToObservable(this.ngxResize.ngxResize)\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.recompute());\n\n // The item set is the other trigger, and that one does have to wait for the render: the new\n // items have to exist before they can be measured.\n afterRenderEffect(() => {\n this.items();\n untracked(() => this.recompute());\n });\n }\n\n /** Measures the row and collapses its overflow. Public so a consumer resizing the container itself can force a pass. */\n recompute(): void {\n const items = this.items().map(item => item.elementRef.nativeElement);\n\n // Undo the previous collapse first, so what follows measures natural widths. Before the early\n // return too: a pass that cannot measure would otherwise leave items out of the flow while\n // reporting nothing hidden — a blank row, badge included.\n items.forEach(item => (item.style.display = ''));\n\n const containerWidth = this.elementRef.nativeElement.clientWidth;\n if (!items.length || containerWidth === 0) {\n this.setCounts(items.length, 0);\n return;\n }\n\n const gap = this.resolvedGap();\n const widths = items.map(item => item.offsetWidth);\n const total = widths.reduce((sum, width) => sum + width, 0) + gap * (items.length - 1);\n if (total <= containerWidth) {\n this.setCounts(items.length, 0);\n return;\n }\n\n // Something overflows: reserve the badge's room and keep as many items as fit before it.\n const available = containerWidth - gap - this.counterWidth();\n let used = 0;\n let visible = 0;\n for (let index = 0; index < items.length; index++) {\n const width = widths[index] + (index > 0 ? gap : 0);\n if (used + width > available) {\n break;\n }\n used += width;\n visible++;\n }\n visible = Math.min(items.length, Math.max(this.minVisible(), visible));\n\n items.forEach((item, index) => (item.style.display = index < visible ? '' : 'none'));\n this.setCounts(visible, items.length - visible);\n }\n\n /** Guarded: these signals are written from a render effect, so an unchanged pass must be inert. */\n private setCounts(visible: number, hidden: number): void {\n if (this.visible() !== visible) {\n this.visible.set(visible);\n }\n if (this.hidden() !== hidden) {\n this.hidden.set(hidden);\n }\n }\n\n private resolvedGap(): number {\n const declared = this.gap();\n if (declared !== undefined) {\n return declared;\n }\n // `column-gap` resolves to the keyword `normal` outside flex/grid, which parses to NaN.\n const computed = parseFloat(getComputedStyle(this.elementRef.nativeElement).columnGap);\n return Number.isNaN(computed) ? 0 : computed;\n }\n\n private counterWidth(): number {\n return this.counter()?.elementRef.nativeElement.offsetWidth || this.counterFallbackWidth();\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Stops a click from reaching the ancestors, without altering the host semantics.\n *\n * Use it on an element nested inside a clickable container — the container's handler\n * must not fire when the inner control is used.\n *\n * @example\n * ```html\n * <div class=\"row\" (click)=\"openRow()\">\n * <div class=\"row__actions\" apStopPropagation>\n * <ap-icon-button symbolId=\"more\" />\n * </div>\n * </div>\n * ```\n */\n@Directive({\n selector: '[apStopPropagation]',\n standalone: true,\n host: {\n '(click)': '$event.stopPropagation()',\n },\n})\nexport class StopPropagationDirective {}\n","import { Directive, ElementRef, OnDestroy, OnInit, inject } from '@angular/core';\n\nconst COLUMN_CLASS_PREFIX = 'cdk-column-';\n\n/**\n * Moves a column's body cells with its header cell while columns are reordered.\n *\n * Apply it to the table that carries `cdkDropList`:\n *\n * ```html\n * <table\n * cdk-table\n * cdkDropList\n * cdkDropListOrientation=\"horizontal\"\n * apTableColumnDrag>\n * ```\n */\n@Directive({\n selector: 'table[apTableColumnDrag]',\n})\nexport class TableColumnDragDirective implements OnInit, OnDestroy {\n private readonly table: HTMLElement = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private observer: MutationObserver | null = null;\n\n ngOnInit(): void {\n this.observer = new MutationObserver(mutations => this.mirrorHeaderTransforms(mutations));\n this.observer.observe(this.table, {\n attributes: true,\n attributeFilter: ['style'],\n subtree: true,\n });\n }\n\n ngOnDestroy(): void {\n this.observer?.disconnect();\n this.observer = null;\n }\n\n private mirrorHeaderTransforms(mutations: MutationRecord[]): void {\n for (const mutation of mutations) {\n const header = mutation.target;\n\n if (!(header instanceof HTMLElement) || header.tagName !== 'TH') {\n continue;\n }\n\n // The dragged header is parked off-screen while a placeholder clone\n // holds its slot, so only the element still in the flow positions the column.\n if (header.style.position === 'fixed') {\n continue;\n }\n\n const column = this.columnOf(header);\n\n if (!column) {\n continue;\n }\n\n const columnElements = Array.from(this.table.getElementsByClassName(COLUMN_CLASS_PREFIX + column));\n\n for (const element of columnElements) {\n if (element instanceof HTMLElement && element.tagName === 'TD') {\n element.style.transform = header.style.transform;\n }\n }\n }\n }\n\n private columnOf(cell: HTMLElement): string | null {\n const columnClass = Array.from(cell.classList).find(name => name.startsWith(COLUMN_CLASS_PREFIX));\n\n return columnClass?.slice(COLUMN_CLASS_PREFIX.length) ?? null;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agorapulse-ui-components-directives.mjs","sources":["../../../libs/ui-components/directives/src/autosize-textarea.directive.ts","../../../libs/ui-components/directives/src/base-button.directive.ts","../../../libs/ui-components/directives/src/checkbox.directive.ts","../../../libs/ui-components/directives/src/click.directive.ts","../../../libs/ui-components/directives/src/default-image.directive.ts","../../../libs/ui-components/directives/src/ellipsis.directive.ts","../../../libs/ui-components/directives/src/equal-validator.directive.ts","../../../libs/ui-components/directives/src/frozen-gif.directive.ts","../../../libs/ui-components/directives/src/interactive-element.ts","../../../libs/ui-components/directives/src/multi-style-text.directive.ts","../../../libs/ui-components/directives/src/overflow-count.directive.ts","../../../libs/ui-components/directives/src/stop-propagation.directive.ts","../../../libs/ui-components/directives/src/table-column-drag.directive.ts","../../../libs/ui-components/directives/src/agorapulse-ui-components-directives.ts"],"sourcesContent":["import { AfterContentChecked, Directive, ElementRef, HostListener } from '@angular/core';\n\n@Directive({\n selector: 'textarea[apAutosize]',\n standalone: true,\n})\n/**\n * expand textarea to fit content. Doesn't shrink.\n */\nexport class AutosizeTextareaDirective implements AfterContentChecked {\n static maxHeight: number = 200;\n\n constructor(public element: ElementRef) {}\n\n @HostListener('input')\n public onInput() {\n this.resize();\n }\n\n public ngAfterContentChecked() {\n this.resize();\n }\n\n public resize() {\n const style = this.element.nativeElement.style;\n const scrollHeight = this.element.nativeElement.scrollHeight;\n const actualHeight = this.element.nativeElement.offsetHeight;\n if (AutosizeTextareaDirective.maxHeight < scrollHeight) {\n // we arrived at the max\n style.overflow = 'auto';\n style.height = `${AutosizeTextareaDirective.maxHeight}px`;\n } else if (actualHeight < scrollHeight) {\n style.overflow = 'hidden';\n style.height = `${scrollHeight}px`;\n }\n }\n}\n","import { AfterViewInit, ChangeDetectorRef, Directive, ElementRef, inject, OnInit } from '@angular/core';\n\n@Directive({\n selector: '[apBaseButton]',\n standalone: true,\n})\nexport class BaseButtonDirective implements AfterViewInit, OnInit {\n hostId: string | undefined = undefined;\n hostDataTest: string | undefined = undefined;\n hostType: string = 'button';\n\n private elementRef: ElementRef = inject(ElementRef);\n private changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n ngOnInit() {\n this.hostDataTest = this.elementRef.nativeElement.getAttribute('data-test');\n this.hostId = this.elementRef.nativeElement.getAttribute('id');\n this.elementRef.nativeElement.removeAttribute('data-test');\n this.elementRef.nativeElement.removeAttribute('id');\n }\n\n // Sometimes attributes like the id, or the data-test are dynamic and can change between the constructor and the initialization.\n // In order to have the last attributes value we check if it changes, and if it does, we run a mark for check to update the view.\n ngAfterViewInit(): void {\n const hostDataTest = this.elementRef.nativeElement.getAttribute('data-test');\n const hostId = this.elementRef.nativeElement.getAttribute('id');\n const hostType = this.elementRef.nativeElement.getAttribute('type');\n if (hostDataTest && this.hostDataTest !== hostDataTest) {\n this.hostDataTest = hostDataTest;\n this.elementRef.nativeElement.removeAttribute('data-test');\n this.changeDetectorRef.markForCheck();\n }\n if (hostId && this.hostId !== hostId) {\n this.hostId = hostId;\n this.elementRef.nativeElement.removeAttribute('id');\n this.changeDetectorRef.markForCheck();\n }\n if (hostType && this.hostType !== hostType) {\n this.hostType = hostType;\n this.elementRef.nativeElement.removeAttribute('type');\n this.changeDetectorRef.markForCheck();\n }\n }\n}\n","import {\n booleanAttribute,\n Directive,\n effect,\n ElementRef,\n inject,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n signal\n} from '@angular/core';\n\n@Directive({\n selector: 'input[type=\"checkbox\"][apCheckbox]',\n standalone: true,\n providers: [],\n})\nexport class CheckboxDirective implements OnInit, OnDestroy {\n private readonly elementRef = inject(ElementRef<HTMLInputElement>);\n private readonly renderer = inject(Renderer2);\n\n // State signals\n private _checked = signal(false);\n private _indeterminate = signal(false);\n\n // Input signal accessors that work with host bindings\n checked = this._checked.asReadonly();\n indeterminate = this._indeterminate.asReadonly();\n\n // Input setters with proper aliases for template binding\n // Couldn't be migrated to yet\n @Input('checked')\n set checkedInput(checked: boolean) {\n this._checked.set(checked);\n this.updateNativeElementSync();\n }\n\n @Input({\n transform: booleanAttribute,\n alias: 'indeterminate',\n })\n set indeterminateInput(indeterminate: boolean) {\n if (indeterminate) {\n this._checked.set(false);\n }\n this._indeterminate.set(indeterminate);\n this.updateNativeElementSync();\n }\n\n private updateNativeElementSync(): void {\n const input = this.elementRef.nativeElement;\n if (input) {\n input.checked = this.checked();\n input.indeterminate = this.indeterminate();\n }\n }\n\n // Private properties\n private listeners: (() => void)[] = [];\n private styleElement!: HTMLStyleElement;\n private checkmarkSvg!: SVGElement;\n private indeterminateBar!: HTMLElement;\n\n constructor() {\n effect(() => {\n if (this.checkmarkSvg && this.indeterminateBar) {\n this.updateCheckmarkVisibility();\n }\n });\n }\n\n // Custom SVG content\n private readonly checkSvgContent = `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" width=\"10\" height=\"10\" fill=\"white\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14.238 3.337a.92.92 0 0 1 .025 1.301l-7.7 8a.92.92 0 0 1-1.326 0l-3.5-3.636a.92.92 0 1 1 1.326-1.276L5.9 10.674l7.037-7.312a.92.92 0 0 1 1.301-.025Z\" />\n </svg>\n `;\n\n ngOnInit() {\n this.createCheckboxStructure();\n this.setupEventListeners();\n }\n\n ngOnDestroy(): void {\n this.listeners.forEach(unlisten => unlisten());\n if (this.styleElement && this.styleElement.parentNode) {\n this.styleElement.parentNode.removeChild(this.styleElement);\n }\n if (this.checkmarkSvg && this.checkmarkSvg.parentNode) {\n this.checkmarkSvg.parentNode.removeChild(this.checkmarkSvg);\n }\n if (this.indeterminateBar && this.indeterminateBar.parentNode) {\n this.indeterminateBar.parentNode.removeChild(this.indeterminateBar);\n }\n }\n\n private createCheckboxStructure(): void {\n const input = this.elementRef.nativeElement;\n const parent = input.parentElement;\n\n // Make input's parent use inline-flex for alignment and position relative\n if (parent) {\n this.renderer.setStyle(parent, 'display', 'inline-flex');\n this.renderer.setStyle(parent, 'align-items', 'center');\n this.renderer.setStyle(parent, 'gap', 'var(--ref-spacing-xxs)');\n this.renderer.setStyle(parent, 'position', 'relative');\n }\n\n this.renderer.addClass(input, 'ap-checkbox-styled');\n\n this.createCheckmarkSvg();\n this.createIndeterminateBar();\n\n this.applyCheckboxStyles();\n\n this.updateCheckmarkVisibility();\n }\n\n private createOverlayElement(element: HTMLElement | SVGElement): void {\n const parent = this.elementRef.nativeElement.parentElement;\n\n // Apply common positioning styles\n this.renderer.setStyle(element, 'position', 'absolute');\n this.renderer.setStyle(element, 'top', '50%');\n this.renderer.setStyle(element, 'left', '8px'); // Center over 16px checkbox\n this.renderer.setStyle(element, 'transform', 'translate(-50%, -50%)');\n this.renderer.setStyle(element, 'pointer-events', 'none');\n this.renderer.setStyle(element, 'opacity', '0');\n this.renderer.setStyle(element, 'z-index', '1');\n\n // Append to parent\n this.renderer.appendChild(parent, element);\n }\n\n private createCheckmarkSvg(): void {\n // Create SVG element from string\n const tempDiv = this.renderer.createElement('div');\n this.renderer.setProperty(tempDiv, 'innerHTML', this.checkSvgContent);\n this.checkmarkSvg = tempDiv.firstElementChild as SVGElement;\n\n this.createOverlayElement(this.checkmarkSvg);\n }\n\n private createIndeterminateBar(): void {\n // Create the indeterminate bar element\n this.indeterminateBar = this.renderer.createElement('span');\n this.renderer.setStyle(this.indeterminateBar, 'height', '1.5px');\n this.renderer.setStyle(this.indeterminateBar, 'background', 'var(--ref-color-white)');\n this.renderer.setStyle(this.indeterminateBar, 'width', '8px');\n\n this.createOverlayElement(this.indeterminateBar);\n }\n\n private updateCheckmarkVisibility(): void {\n if (this.checkmarkSvg) {\n const opacity = this.checked() && !this.indeterminate() ? '1' : '0';\n this.renderer.setStyle(this.checkmarkSvg, 'opacity', opacity);\n }\n if (this.indeterminateBar) {\n const opacity = this.indeterminate() && !this.checked() ? '1' : '0';\n this.renderer.setStyle(this.indeterminateBar, 'opacity', opacity);\n }\n }\n\n private setupEventListeners(): void {\n const input = this.elementRef.nativeElement;\n\n // Input change listener (native checkbox change)\n const changeListener = this.renderer.listen(input, 'change', () => {\n this.onValueChange();\n });\n this.listeners.push(changeListener);\n\n // Listen for label clicks to ensure focus is maintained\n const parent = input.parentElement;\n if (parent) {\n const labelClickListener = this.renderer.listen(parent, 'click', (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n // If clicking on a label that targets our input, ensure focus\n if (target.tagName === 'LABEL' && target.getAttribute('for') === input.id) {\n // Small delay to ensure the label click is processed first\n setTimeout(() => {\n input.focus();\n }, 0);\n }\n });\n this.listeners.push(labelClickListener);\n }\n }\n\n private applyCheckboxStyles(): void {\n const styles = `\n /* Minimal checkbox styling */\n input[type=\"checkbox\"].ap-checkbox-styled {\n appearance: none !important;\n -webkit-appearance: none !important;\n -moz-appearance: none !important;\n \n display: inline-block !important;\n width: 16px !important;\n height: 16px !important;\n min-width: 16px !important;\n min-height: 16px !important;\n margin: 0 !important;\n padding: 0 !important;\n border: 1px solid var(--ref-color-grey-60);\n border-radius: var(--sys-border-radius-sm);\n background: var(--ref-color-white);\n box-sizing: border-box;\n cursor: pointer;\n vertical-align: middle;\n }\n \n /* Hover state */\n input[type=\"checkbox\"].ap-checkbox-styled:hover {\n border-color: var(--ref-color-grey-80);\n }\n \n /* Active/pressed state */\n input[type=\"checkbox\"].ap-checkbox-styled:active {\n border-color: var(--ref-color-grey-100);\n }\n \n /* Checked state */\n input[type=\"checkbox\"].ap-checkbox-styled:checked {\n background: var(--ref-color-electric-blue-100);\n border-color: var(--ref-color-electric-blue-100);\n }\n \n /* Checked hover state */\n input[type=\"checkbox\"].ap-checkbox-styled:checked:hover {\n background: var(--ref-color-electric-blue-80);\n border-color: var(--ref-color-electric-blue-100);\n }\n \n /* Checked active/pressed state */\n input[type=\"checkbox\"].ap-checkbox-styled:checked:active {\n background: var(--ref-color-electric-blue-60);\n border-color: var(--ref-color-electric-blue-100);\n }\n \n /* Indeterminate state */\n input[type=\"checkbox\"].ap-checkbox-styled:indeterminate {\n background: var(--ref-color-electric-blue-100);\n border-color: var(--ref-color-electric-blue-100);\n }\n \n /* Disabled state */\n input[type=\"checkbox\"].ap-checkbox-styled:disabled {\n border-color: var(--ref-color-grey-20);\n background: var(--ref-color-grey-10);\n cursor: default;\n }\n \n input[type=\"checkbox\"].ap-checkbox-styled:disabled:checked {\n background: var(--ref-color-grey-20);\n }\n \n /* Focus state */\n @media (hover: hover) {\n input[type=\"checkbox\"].ap-checkbox-styled:focus:not(.disabled) {\n outline: 3px solid var(--ref-color-electric-blue-100) !important;\n outline-offset: 1px !important;\n }\n }\n \n /* Label styling */\n input[type=\"checkbox\"].ap-checkbox-styled + label {\n display: flex;\n align-items: center;\n font-family: var(--comp-forms-label-font-family);\n font-size: var(--comp-forms-label-size);\n font-weight: var(--comp-forms-label-font-weight);\n line-height: var(--comp-forms-label-line-height);\n color: var(--comp-forms-label-text-color);\n cursor: pointer;\n }\n \n /* Empty label styling */\n input[type=\"checkbox\"].ap-checkbox-styled + label:empty {\n display: none;\n }\n \n /* Disabled label styling */\n input[type=\"checkbox\"].ap-checkbox-styled:disabled + label {\n color: var(--ref-color-grey-60);\n cursor: default;\n }\n `;\n\n // Create and append style element\n this.styleElement = this.renderer.createElement('style');\n this.renderer.appendChild(this.styleElement, this.renderer.createText(styles));\n this.renderer.appendChild(document.head, this.styleElement);\n }\n\n private onValueChange(): void {\n if (!this.elementRef.nativeElement.disabled) {\n const input = this.elementRef.nativeElement;\n\n if (this.indeterminate()) {\n // When indeterminate, clicking should go to checked state\n this._checked.set(true);\n this._indeterminate.set(false);\n input.checked = true;\n input.indeterminate = false;\n } else {\n // Normal toggle behavior\n this._checked.set(input.checked);\n }\n }\n }\n}\n","import { booleanAttribute, Directive, ElementRef, inject, input, isDevMode, output } from '@angular/core';\n\nconst NATIVELY_ACTIVATED_TAGS = new Set(['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA', 'SUMMARY']);\n\n/** Host tags already reported as redundant, so a 500-row list logs one line instead of 500. */\nconst warnedTags = new Set<string>();\n\n/**\n * Turns a non-interactive element into a control: it receives an ARIA role, enters the\n * tab order and activates with the keyboard, through the `(apClick)` binding alone.\n *\n * Prefer a real `<button>` whenever the layout allows one. Reach for this directive when\n * the element cannot be a button — a table row, a card, a styled anchor with no href.\n *\n * @example\n * ```html\n * <div (apClick)=\"openPost()\">…</div>\n * <span (apClick)=\"openDocs()\" apClickRole=\"link\">…</span>\n * <tr (apClick)=\"openRow()\" [apClickDisabled]=\"editing()\">…</tr>\n * ```\n */\n@Directive({\n selector: '[apClick]',\n standalone: true,\n host: {\n '[attr.role]': 'isInteractive() ? apClickRole() : null',\n '[attr.tabindex]': 'isInteractive() ? 0 : null',\n '(click)': 'onClick($event)',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport class ClickDirective {\n /** Turns the host back into a plain element: no role, no tab stop, no activation at all. */\n apClickDisabled = input(false, { transform: booleanAttribute });\n\n /** ARIA role applied while the host is interactive. */\n apClickRole = input('button');\n\n apClick = output<MouseEvent | KeyboardEvent>();\n\n private host: HTMLElement = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n constructor() {\n if (isDevMode() && this.isNativelyActivated()) {\n this.warnRedundant();\n }\n }\n\n protected isInteractive(): boolean {\n return !this.apClickDisabled() && !this.isNativelyActivated();\n }\n\n /** The two checks are independent, so an anchor without `href` still gets its contenteditable read. */\n private isNativelyActivated(): boolean {\n if (NATIVELY_ACTIVATED_TAGS.has(this.host.tagName)) {\n return true;\n }\n\n return this.isNativeAnchor() || this.isContentEditable();\n }\n\n /**\n * `routerLink` counts as an `href`, and is read as a written attribute so the answer does not\n * depend on whether this directive's host bindings run before RouterLink's. A bound\n * `[routerLink]` leaves no attribute, so such an anchor stays plain until RouterLink writes one.\n */\n private isNativeAnchor(): boolean {\n const isAnchor = this.host.tagName === 'A' || this.host.tagName === 'AREA';\n\n return isAnchor && (this.host.hasAttribute('href') || this.host.hasAttribute('routerLink'));\n }\n\n /** `contenteditable=\"false\"` is explicitly opted out, so only a present, non-\"false\" value counts. */\n private isContentEditable(): boolean {\n return this.host.hasAttribute('contenteditable') && this.host.getAttribute('contenteditable') !== 'false';\n }\n\n private warnRedundant(): void {\n const tag = this.host.tagName.toLowerCase();\n if (warnedTags.has(tag)) {\n return;\n }\n\n warnedTags.add(tag);\n console.warn(`apClick is redundant on <${tag}>: the browser already activates it with the keyboard.`);\n }\n\n protected onClick(event: MouseEvent): void {\n // Not isInteractive(): a natively interactive host must keep emitting, or its existing\n // (apClick) binding would silently stop working.\n if (this.apClickDisabled()) {\n return;\n }\n\n this.apClick.emit(event);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n // A key pressed inside a focusable child must not activate the host.\n if (!this.isInteractive() || event.target !== this.host) {\n return;\n }\n\n if (!this.activationKeys().includes(event.key)) {\n return;\n }\n\n // Before the repeat guard: every repeat must be cancelled, or the page scrolls under a held Space.\n if (event.key === ' ') {\n event.preventDefault();\n }\n\n // A native button activates once per press, however long the key is held.\n if (event.repeat) {\n return;\n }\n\n this.apClick.emit(event);\n }\n\n /** A link activates on Enter only; every other role also answers Space. */\n private activationKeys(): readonly string[] {\n return this.apClickRole() === 'link' ? ['Enter'] : ['Enter', ' '];\n }\n}\n","import { Directive, Input } from '@angular/core';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'img[default]',\n standalone: true,\n host: {\n '(error)': 'updateUrl()',\n '[src]': 'src',\n },\n})\nexport class DefaultImageDirective {\n @Input({\n required: true,\n })\n src = '';\n @Input() default = '';\n\n updateUrl() {\n if (this.default) {\n this.src = this.default;\n } else {\n this.src = 'assets/lib-ui-components/img/default-avatar.png';\n }\n }\n}\n","import { AfterContentChecked, Directive, ElementRef, EventEmitter, Input, Output } from '@angular/core';\n\n/**\n * Removes excess text from element until it fits in elements\n * and appends a ellipsis symbol to end of text. This requires that\n * the elements height be fixed\n *\n * @example\n * ```html\n * <p apEllipsis>Ullamco esse laborum</p>\n * ```\n *\n */\n@Directive({\n selector: '[apEllipsis]',\n standalone: true,\n})\nexport class EllipsisDirective implements AfterContentChecked {\n @Input() apEllipsisSeparator = '';\n @Input() apEllipsisClip = false;\n @Input() apEllipsisIndex = -2;\n @Input() apEllipsisChar = '...';\n @Input() apEllipsisClickable = false;\n\n @Output() apEllipsisRemovedElementsCount = new EventEmitter<number>();\n @Output() apEllipsisRemovedText = new EventEmitter<string>();\n\n private get hasOverflow(): boolean {\n const el: HTMLElement = this.el.nativeElement;\n return el.scrollHeight > el.offsetHeight || el.scrollWidth > el.offsetWidth;\n }\n\n constructor(private el: ElementRef) {}\n\n ngAfterContentChecked() {\n this.clipText();\n }\n\n private clipText(): void {\n const el: HTMLElement = this.el.nativeElement;\n let text = el.innerText;\n let removedText = '';\n if (this.apEllipsisIndex > -1) {\n removedText = text.substring(this.apEllipsisIndex, text.length - 1) + removedText;\n text = text.substring(0, this.apEllipsisIndex);\n el.innerText = `${text}${this.apEllipsisChar}`;\n\n if (this.apEllipsisClickable) {\n el.addEventListener('click', () => {\n el.innerText = `${text}${removedText}`;\n });\n }\n } else {\n while (this.hasOverflow && text.length > 0) {\n removedText = text[text.length - 1] + removedText;\n text = text.substring(0, text.length - 1);\n el.innerText = `${text}${this.apEllipsisChar}`;\n }\n }\n\n if (this.apEllipsisSeparator) {\n const removedElementsCount = removedText\n .split(this.apEllipsisSeparator)\n .filter(element => !!element && element.length > 0).length;\n if (removedElementsCount > 0) {\n this.apEllipsisRemovedElementsCount.emit(removedElementsCount);\n }\n }\n if (removedText && removedText.length > 0) {\n this.apEllipsisRemovedText.emit(removedText);\n }\n }\n}\n","// Based on https://scotch.io/tutorials/how-to-implement-a-custom-validator-directive-confirm-password-in-angular-2\nimport { Attribute, Directive, forwardRef } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, Validator } from '@angular/forms';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[validateEqual][formControlName],[validateEqual][formControl],[validateEqual][ngModel]',\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => EqualValidatorDirective),\n multi: true,\n },\n ],\n standalone: true,\n})\nexport class EqualValidatorDirective implements Validator {\n constructor(\n @Attribute('validateEqual') public validateEqual: string,\n @Attribute('validateEqualReference') public validateEqualReference: string\n ) {}\n\n validate(self: AbstractControl): { [key: string]: any } | null {\n const other = self.root.get(this.validateEqual);\n if (other) {\n if (this.isReference()) {\n if (self.value === other.value) {\n if (other.errors) {\n delete other.errors['validateEqual'];\n if (!Object.keys(other.errors).length) {\n other.setErrors(null);\n }\n } else {\n other.setErrors(null);\n }\n } else {\n other.setErrors({ validateEqual: false });\n }\n } else if (self.value !== other.value) {\n return { validateEqual: false };\n }\n }\n return null;\n }\n\n private isReference(): boolean {\n if (!this.validateEqualReference) {\n return false;\n }\n return this.validateEqualReference === 'true';\n }\n}\n","import { Directive, ElementRef, Input, OnChanges } from '@angular/core';\n\nexport class GifService {\n static isGif(src: string) {\n return src && src.split('?')[0].endsWith('.gif');\n }\n}\n\n/**\n * If the image is a GIF then replace the img element by a canvas containing a frozen gif.\n * Note 1: if the image is displayed under a condition, the condition must be applied on the parent of the image, so the\n * new canvas element will have the same condition.\n * Note 2: the image must not have the properties \"display\" and \"visibility\" in its style. Since they are used to frozen\n * the GIF. You need to apply this properties on the parent element.\n * Note 3: If the GIF is frozen, all the event are propagated to the image. However, all events are dispatched\n * with an Event instance. Ex: click event is not dispatched with a MouseEvent instance.\n */\n\n@Directive({\n selector: 'img[apFrozenGif]',\n host: {\n '[src]': 'src',\n },\n standalone: true,\n})\nexport class FrozenGifDirective implements OnChanges {\n @Input({\n required: true,\n })\n src = '';\n @Input() apFrozen = true;\n // Add all the events that need to be propagated.\n @Input() apGifEvents: string[] = ['click'];\n\n private readonly element!: HTMLImageElement;\n private canvas: HTMLCanvasElement | null = null;\n\n constructor(private elementRef: ElementRef) {\n const element = this.elementRef.nativeElement;\n if (!(element instanceof HTMLImageElement)) {\n return;\n }\n\n this.element = element;\n }\n\n ngOnChanges(changes: any): void {\n let freeze = false;\n if (changes.src) {\n freeze = true;\n }\n if (changes.frozen) {\n if (changes.frozen.currentValue) {\n freeze = true;\n } else {\n this.unfreeze();\n }\n }\n\n if (freeze) {\n this.freeze();\n }\n }\n\n private freeze() {\n if (!GifService.isGif(this.src) || !this.apFrozen) {\n this.unfreeze();\n return;\n }\n\n // hack to avoid displaying the GIF before replacing it by the canvas\n this.element.style.visibility = 'hidden';\n this.element.addEventListener('load', () => this.addCanvas());\n }\n\n private addCanvas() {\n if (this.canvas) {\n this.canvas.remove();\n }\n\n this.canvas = document.createElement('canvas');\n this.canvas.width = this.element.width;\n this.canvas.height = this.element.height;\n this.canvas.getContext('2d')?.drawImage(this.element, 0, 0, this.canvas.width, this.canvas.height);\n for (let i = 0; i < this.element.attributes.length; i++) {\n const attr = this.element.attributes[i];\n if (attr.name === 'id') {\n // avoid two elements with the same id\n this.canvas.setAttribute('id', attr.value + '_frozenGif');\n } else if ((attr.name === 'style' && attr.value.includes('visibility: hidden;')) || attr.value.includes('display: none;')) {\n // remove the added 'visibility: hidden' and 'display: none'\n const styleValue = attr.value;\n this.canvas.setAttribute('style', styleValue.replace('visibility: hidden;', '').replace('display: none;', ''));\n } else if (attr.name !== '\"') {\n // test for invalid attributes\n this.canvas.setAttribute(attr.name, attr.value);\n }\n }\n\n this.addEvents();\n\n this.element.parentNode?.insertBefore(this.canvas, this.element);\n this.element.style.display = 'none';\n }\n\n private addEvents() {\n this.apGifEvents.forEach((eventName: string) => {\n this.canvas?.addEventListener(eventName, (ev: Event) =>\n this.element.dispatchEvent(\n // wm: find a way to dispatch the right event type\n new Event(ev.type, ev)\n )\n );\n });\n }\n\n private unfreeze() {\n if (this.canvas) {\n this.canvas.remove();\n this.canvas = null;\n }\n this.element.style.visibility = 'inherit';\n this.element.style.display = 'inherit';\n }\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * A component that renders the element users and assistive tech actually reach, rather than being it.\n * `<ap-button>` is the case that matters: its host is a plain custom element wrapping a real `<button>`.\n */\nexport interface ApInteractiveElement {\n interactiveElement(): HTMLElement;\n}\n\n/** Provided by such a component so a directive on its host can reach inside without guessing. */\nexport const AP_INTERACTIVE_ELEMENT = new InjectionToken<ApInteractiveElement>('AP_INTERACTIVE_ELEMENT');\n","import { Directive, ElementRef, EventEmitter, Input, Output, Renderer2 } from '@angular/core';\nimport DOMPurify from 'dompurify';\n\nconst DATA_MST = 'data-mst';\n\n/**\n * This directive aims to parse simple string to extract some specific tags and to turn them into SPAN with styling classes attributes and optional event listening.\n * The specific tags must this schema: <ng-container data-mst=\"STYLING-CLASSES\">TEXT</ng-container>.\n * Example: 'Lorem <ng-container data-mst=\"my-style\">ipsum</ng-container> dolor sit amet'.\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[multiStyleText]',\n standalone: true,\n})\nexport class MultiStyleTextDirective {\n @Input() set multiStyleText(fullText: string) {\n // First remove previously added children (on update).\n this.renderer.setProperty(this.elRef.nativeElement, 'innerHTML', '');\n if (!fullText || fullText.length <= 0) {\n return;\n }\n\n this.renderer.setProperty(this.elRef.nativeElement, 'innerHTML', DOMPurify.sanitize(fullText.replace(/ng-container/g, 'span')));\n\n Array.from(this.elRef.nativeElement.children).forEach((childNode: Element) => {\n if (childNode.nodeType == 1 && childNode.tagName.toLowerCase() === 'span') {\n // Node.ELEMENT_NODE\n\n const span: HTMLElement = this.renderer.createElement('span');\n span.innerHTML = childNode.innerHTML;\n this.elRef.nativeElement.replaceChild(span, childNode);\n\n const mstValue = childNode.getAttribute(DATA_MST);\n if (mstValue) {\n const mstContents = mstValue.split(';');\n // Bind click events\n if (mstContents[1]) {\n this.renderer.listen(span, 'click', () => this.partEvent.emit(mstContents[1]));\n }\n // Add classes\n if (mstContents[0] && mstContents[0].length > 0) {\n this.renderer.setAttribute(span, 'class', mstContents[0].replace(',', ' '));\n }\n }\n }\n });\n }\n\n @Output() partEvent = new EventEmitter<string>();\n\n public constructor(\n private elRef: ElementRef<HTMLElement>,\n private renderer: Renderer2\n ) {}\n}\n","import {\n afterRenderEffect,\n booleanAttribute,\n contentChild,\n contentChildren,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n numberAttribute,\n signal,\n untracked,\n} from '@angular/core';\nimport { outputToObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgxResize } from 'ngxtension/resize';\n\n/** Marks an element as one of the items the row may collapse. */\n@Directive({\n selector: '[apOverflowItem]',\n})\nexport class OverflowItemDirective {\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n}\n\n/**\n * Marks the \"+N\" badge so its width can be reserved. Optional, and the first pass never has it:\n * the badge only enters the DOM once `hiddenCount()` is above zero, so `counterFallbackWidth` stands in.\n */\n@Directive({\n selector: '[apOverflowCounter]',\n})\nexport class OverflowCounterDirective {\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n}\n\n/**\n * Lays a row of items out on a single line and collapses whatever overflows into a \"+N\" badge.\n *\n * Put it on the container, mark the items with `apOverflowItem` and the badge with\n * `apOverflowCounter`; read `hiddenCount()` to render the badge and to derive the hidden data.\n * The container is measured, so it must be the box that actually bounds the row — give it\n * `overflow: hidden` and keep the items from shrinking. When `minVisible` keeps an item the row is\n * too narrow for, that last item gets a `max-width` so the badge stays inside: let it truncate.\n *\n * Specs that mock a consumer's dependencies have to keep this directive — ng-mocks stubs inputs\n * and outputs, not plain signal members, so a mocked `hiddenCount` is not callable:\n * `MockBuilder(MyComponent).keep(OverflowCountDirective)`.\n *\n * @example\n * ```html\n * <div class=\"chips\" apOverflowCount #overflow=\"apOverflowCount\">\n * @for (chip of chips(); track chip.id) {\n * <ap-tag apOverflowItem>{{ chip.label }}</ap-tag>\n * }\n * @if (overflow.hiddenCount() > 0) {\n * <ap-tag apOverflowCounter>+{{ overflow.hiddenCount() }}</ap-tag>\n * }\n * </div>\n * ```\n */\n@Directive({\n selector: '[apOverflowCount]',\n exportAs: 'apOverflowCount',\n hostDirectives: [NgxResize],\n})\nexport class OverflowCountDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly ngxResize = inject(NgxResize);\n\n /**\n * Space between two items, in pixels. Read from the container's computed `column-gap` when left\n * undefined, which is what a flex or grid row already declares — pass it only when the gap comes\n * from somewhere the container doesn't express, such as item margins.\n */\n readonly gap = input<number | undefined>(undefined, {\n transform: (value: unknown) => (value == null ? undefined : numberAttribute(value)),\n });\n /** Width to reserve for the \"+N\" badge while it is not in the DOM to be measured. */\n readonly counterFallbackWidth = input(24, { transform: numberAttribute });\n /** Items kept visible whatever the width. A lone \"+N\" reads as an empty row, hence the default. */\n readonly minVisible = input(1, { transform: numberAttribute });\n /** Most items laid out whatever the width, for a group capped by design (\"2 avatars at most\"). */\n readonly max = input<number | undefined>(undefined, {\n transform: (value: unknown) => (value == null ? undefined : numberAttribute(value)),\n });\n /**\n * Set to false to lay every item out and hide none, for a row unfolded or wrapping on purpose. The\n * counts still say what a collapse would hide, so an unfolded row knows when folding it hides nothing.\n */\n readonly collapse = input(true, { transform: booleanAttribute });\n\n private readonly items = contentChildren(OverflowItemDirective, { descendants: true });\n private readonly counter = contentChild(OverflowCounterDirective);\n\n private readonly visible = signal(0);\n private readonly hidden = signal(0);\n\n // An item can change width while the container does not: a web font landing, a label re-rendered.\n private readonly itemObserver = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(() => this.scheduleRecompute());\n private pendingFrame: number | undefined;\n\n /** How many items fit on the line: the ones laid out, unless `collapse` is false. */\n readonly visibleCount = this.visible.asReadonly();\n /** How many items do not fit — the number the \"+N\" badge shows. With `collapse` false they stay laid out. */\n readonly hiddenCount = this.hidden.asReadonly();\n\n constructor() {\n // ngxtension pipes its whole stream — the ResizeObserver callback included, despite the name —\n // through `debounceTime(debounce.scroll ?? 0)`, and `scroll` defaults to 50. That debounce is\n // trailing, so while a drag keeps firing events nothing comes through at all and the count\n // only catches up once the pointer stops. Zero on both, and the row follows the drag.\n //\n // A consumer whose row is expensive enough to want a debounce can still put one back through\n // ngxtension's own `provideResizeOptions`, which NgxResize merges over this.\n this.ngxResize.ngxResizeOptions = { debounce: { scroll: 0, resize: 0 } };\n\n // Straight off the observer, not through a signal and a render pass: ResizeObserver already\n // fires after layout, so the widths are there to be read.\n outputToObservable(this.ngxResize.ngxResize)\n .pipe(takeUntilDestroyed())\n .subscribe(() => this.recompute());\n\n // The item set is the other trigger, and that one does have to wait for the render: the new\n // items have to exist before they can be measured. The badge too: the first pass reserved its\n // fallback width, and its real one is only known once it is in the DOM.\n afterRenderEffect(() => {\n const items = this.items();\n const counter = this.counter();\n this.collapse();\n this.max();\n untracked(() => {\n this.observe([...items.map(item => item.elementRef.nativeElement), ...(counter ? [counter.elementRef.nativeElement] : [])]);\n this.recompute();\n });\n });\n\n inject(DestroyRef).onDestroy(() => {\n this.itemObserver?.disconnect();\n if (this.pendingFrame !== undefined) {\n cancelAnimationFrame(this.pendingFrame);\n }\n });\n }\n\n /** Measures the row and collapses its overflow. Public so a consumer resizing the container itself can force a pass. */\n recompute(): void {\n const items = this.items().map(item => item.elementRef.nativeElement);\n\n // Undo the previous collapse first, so what follows measures natural widths. Before the early\n // return too: a pass that cannot measure would otherwise leave items out of the flow while\n // reporting nothing hidden — a blank row, badge included.\n items.forEach(item => {\n item.style.display = '';\n item.style.maxWidth = '';\n });\n\n const collapse = this.collapse();\n\n // The cap needs no measurement, so it holds even in a container that cannot be measured.\n const cap = Math.min(items.length, this.max() ?? items.length);\n const containerWidth = this.elementRef.nativeElement.clientWidth;\n if (!items.length || containerWidth === 0) {\n if (collapse) {\n items.forEach((item, index) => (item.style.display = index < cap ? '' : 'none'));\n }\n this.setCounts(cap, items.length - cap);\n return;\n }\n\n const gap = this.resolvedGap();\n const widths = items.map(item => item.offsetWidth);\n const total = widths.reduce((sum, width) => sum + width, 0) + gap * (items.length - 1);\n if (cap === items.length && total <= containerWidth) {\n this.setCounts(items.length, 0);\n return;\n }\n\n // Something overflows: reserve the badge's room and keep as many items as fit before it.\n const available = containerWidth - gap - this.counterWidth();\n let used = 0;\n let visible = 0;\n for (let index = 0; index < cap; index++) {\n const width = widths[index] + (index > 0 ? gap : 0);\n if (used + width > available) {\n break;\n }\n used += width;\n visible++;\n }\n visible = Math.min(cap, Math.max(this.minVisible(), visible));\n\n if (collapse) {\n items.forEach((item, index) => (item.style.display = index < visible ? '' : 'none'));\n this.narrowLastVisible(items, widths, visible, visible < items.length ? available : containerWidth, gap);\n }\n this.setCounts(visible, items.length - visible);\n }\n\n /** Fits the last item `minVisible` forced into a row too narrow for it, so the badge is not pushed out. */\n private narrowLastVisible(items: HTMLElement[], widths: number[], visible: number, limit: number, gap: number): void {\n if (visible === 0) {\n return;\n }\n const last = visible - 1;\n const start = widths.slice(0, last).reduce((sum, width) => sum + width + gap, 0);\n if (start + widths[last] > limit) {\n items[last].style.maxWidth = `${Math.max(0, limit - start)}px`;\n }\n }\n\n private observe(elements: HTMLElement[]): void {\n if (!this.itemObserver) {\n return;\n }\n this.itemObserver.disconnect();\n elements.forEach(element => this.itemObserver?.observe(element));\n }\n\n /** A frame later, not in the callback: a pass toggles the observed items, which inside it raises \"ResizeObserver loop completed with undelivered notifications\". */\n private scheduleRecompute(): void {\n if (this.pendingFrame !== undefined) {\n return;\n }\n this.pendingFrame = requestAnimationFrame(() => {\n this.pendingFrame = undefined;\n this.recompute();\n });\n }\n\n /** Guarded: these signals are written from a render effect, so an unchanged pass must be inert. */\n private setCounts(visible: number, hidden: number): void {\n if (this.visible() !== visible) {\n this.visible.set(visible);\n }\n if (this.hidden() !== hidden) {\n this.hidden.set(hidden);\n }\n }\n\n private resolvedGap(): number {\n const declared = this.gap();\n if (declared !== undefined) {\n return declared;\n }\n // `column-gap` resolves to the keyword `normal` outside flex/grid, which parses to NaN.\n const computed = parseFloat(getComputedStyle(this.elementRef.nativeElement).columnGap);\n return Number.isNaN(computed) ? 0 : computed;\n }\n\n private counterWidth(): number {\n return this.counter()?.elementRef.nativeElement.offsetWidth || this.counterFallbackWidth();\n }\n}\n","import { Directive } from '@angular/core';\n\n/**\n * Stops a click from reaching the ancestors, without altering the host semantics.\n *\n * Use it on an element nested inside a clickable container — the container's handler\n * must not fire when the inner control is used.\n *\n * @example\n * ```html\n * <div class=\"row\" (click)=\"openRow()\">\n * <div class=\"row__actions\" apStopPropagation>\n * <ap-icon-button symbolId=\"more\" />\n * </div>\n * </div>\n * ```\n */\n@Directive({\n selector: '[apStopPropagation]',\n standalone: true,\n host: {\n '(click)': '$event.stopPropagation()',\n },\n})\nexport class StopPropagationDirective {}\n","import { Directive, ElementRef, OnDestroy, OnInit, inject } from '@angular/core';\n\nconst COLUMN_CLASS_PREFIX = 'cdk-column-';\n\n/**\n * Moves a column's body cells with its header cell while columns are reordered.\n *\n * Apply it to the table that carries `cdkDropList`:\n *\n * ```html\n * <table\n * cdk-table\n * cdkDropList\n * cdkDropListOrientation=\"horizontal\"\n * apTableColumnDrag>\n * ```\n */\n@Directive({\n selector: 'table[apTableColumnDrag]',\n})\nexport class TableColumnDragDirective implements OnInit, OnDestroy {\n private readonly table: HTMLElement = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private observer: MutationObserver | null = null;\n\n ngOnInit(): void {\n this.observer = new MutationObserver(mutations => this.mirrorHeaderTransforms(mutations));\n this.observer.observe(this.table, {\n attributes: true,\n attributeFilter: ['style'],\n subtree: true,\n });\n }\n\n ngOnDestroy(): void {\n this.observer?.disconnect();\n this.observer = null;\n }\n\n private mirrorHeaderTransforms(mutations: MutationRecord[]): void {\n for (const mutation of mutations) {\n const header = mutation.target;\n\n if (!(header instanceof HTMLElement) || header.tagName !== 'TH') {\n continue;\n }\n\n // The dragged header is parked off-screen while a placeholder clone\n // holds its slot, so only the element still in the flow positions the column.\n if (header.style.position === 'fixed') {\n continue;\n }\n\n const column = this.columnOf(header);\n\n if (!column) {\n continue;\n }\n\n const columnElements = Array.from(this.table.getElementsByClassName(COLUMN_CLASS_PREFIX + column));\n\n for (const element of columnElements) {\n if (element instanceof HTMLElement && element.tagName === 'TD') {\n element.style.transform = header.style.transform;\n }\n }\n }\n }\n\n private columnOf(cell: HTMLElement): string | null {\n const columnClass = Array.from(cell.classList).find(name => name.startsWith(COLUMN_CLASS_PREFIX));\n\n return columnClass?.slice(COLUMN_CLASS_PREFIX.length) ?? null;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}